x
50
        monitorBack.style.top = shakePhase*100 + 'px';
51
      }
52
      monitorBack.textContent = monitorBack.style.opacity;
53
    }, 1);
54
  }
55
56
  var lazer;
57
  var lazerAni;
58
  var bootBar;
59
60
  function lazerAppear() {
61
    console.log('ani: lazerAppear');
62
    var lazerStart = Date.now();
63
    var lazerTotal = 1000;
64
    var totalHeight = Math.max(document.body.offsetHeight, document.body.parentElement.offsetHeight);
65
    var totalWidth = Math.max(document.body.offsetWidth, document.body.parentElement.offsetWidth);
66
    lazer = elem('div', {
67
      position: 'absolute',
68
      background: 'orange',
69
      top: totalHeight/2 + 'px',
70
      left: totalWidth/2 + 'px',
71
      width: '1px',
72
      height: '1px',
73
      filter: 'blur(10px)',
74
      webkitFilter: 'blur(10px)',
75
      mozFilter: 'blur(10px)',
76
      oFilter: 'blur(10px)',
77
      msFilter: 'DXImageTransform.Microsoft.Blur(PixelRadius=\'10\')'
78
    }, document.body);
79
80
    lazerAni = setInterval(function() {
81
      var lazerPhase = (Date.now() - lazerStart) / lazerTotal;
82
      console.log('ani: lazerPhase '+lazerPhase);
83
      if (lazerPhase > 1) {
84
        clearInterval(lazerAni);
85
        if (lazer) {
86
          lazer.style.opacity = 0;
87
        }
88
        console.log('ani: create bootBar');
89
        bootBar = base.elem('div', {
90
          position: 'absolute',
91
          top: totalHeight/2 + 'px',
92
          background: 'green', color: 'green',
93
          height: '2px',
94
          width: '3%',
95
          filter: 'blur(10px)',
96
          webkitFilter: 'blur(10px)',
97
          mozFilter: 'blur(10px)',
98
          oFilter: 'blur(10px)',
99
          msFilter: 'DXImageTransform.Microsoft.Blur(PixelRadius=\'10\')',
100
          fontSize: '10%',
101
          innerHTML: ' '
102
        }, document.body);
103
104
        return;
105
      }
  • boot
    • base.d.ts
      declare function getText(element: Element): string;
      declare function getText(fn: Function): string;
      
      declare function setText(element: Element, text: string): void;
      
      declare function elem(tag: string): HTMLElement;
      declare function elem(tag: string, style: {}, parent?: Element): HTMLElement;
      declare function elem(tag: string, parent: Element): HTMLElement;
      declare function elem(elem: HTMLElement, style: {}, parent?: Element): HTMLElement;
      
      
      declare function on(obj: Node, eventName: string, handler: (evt: Event) => void);
      declare function on(obj: Window, eventName: string, handler: (evt: Event) => void);
      declare function on(obj: Node, eventName: string, handler: (evt: Event) => void);
      declare function off(obj: Window, eventName: string, handler: (evt: Event) => void);
      
      declare function createFrame(): createFrame.LoadedResult;
      
      declare module createFrame {
        export interface LoadedResult {
          global: Window;
          document: Document; 
          iframe: HTMLIFrameElement;
          evalFN(code: string): any;
        }
      }
    • base.ts
      function base(window: Window) {
      
        return {
          getText,
          setText,
          elem,
          on, off,
          createFrame,
          apply
        };
      
        function apply() {
          (<any>window).getText = getText;
          (<any>window).setText = setText;
          (<any>window).elem = elem;
          (<any>window).on = on;
          (<any>window).off = off;
          (<any>window).createFrame = createFrame;
        }
      
        function getText(obj) {
      
          if (typeof obj === 'function') {
            var result = /\/\*(\*(?!\/)|[^*])*\*\//m.exec(obj + '')[0];
            if (result) result = result.slice(2, result.length - 2);
            return result;
          }
          else if (/^SCRIPT$/i.test(obj.tagName)) {
            if ('text' in obj)
              return obj.text;
            else
              return obj.innerHTML;
          }
          else if (/^STYLE$/i.test(obj.tagName)) {
            if ('text' in obj)
              return obj.text;
            else if (obj.styleSheet)
              return obj.styleSheet.cssText;
            else
              return obj.innerHTML;
          }
          else if ('textContent' in obj) {
            return obj.textContent;
          }
          else if (/^INPUT$/i.test(obj.tagName)) {
            return obj.value;
          }
          else {
            var result: string = obj.innerText;
            if (result) {
              // IE fixes
              result = result.replace(/\<BR\s*\>/g, '\n').replace(/\r\n/g, '\n');
            }
            return result || '';
          }
        }
      
        function setText(obj, text) {
      
          if (/^SCRIPT$/i.test(obj.tagName)) {
            if ('text' in obj)
              obj.text = text;
            else
              obj.innerHTML = text;
          }
          else if (/^STYLE$/i.test(obj.tagName)) {
            if ('text' in obj) {
              obj.text = text;
            }
            else if ('styleSheet' in obj) {
              if (!obj.styleSheet && !obj.type) obj.type = 'text/css';
              obj.styleSheet.cssText = text;
            }
            else if ('textContent' in obj) {
              obj.textContent = text;
            }
            else {
              obj.innerHTML = text;
            }
          }
          else if ('textContent' in obj) {
            if ('type' in obj && !obj.type) obj.type = 'text/css';
            obj.textContent = text;
          }
          else if (/^INPUT$/i.test(obj.tagName)) {
            obj.value = text;
          }
          else {
            obj.innerText = text;
          }
        }
      
        function on(obj, eventName, handler) {
          if (obj.addEventListener) {
            obj.addEventListener(eventName, handler, false);
          }
          else if (obj.attachEvent) {
            obj.attachEvent('on' + eventName, handler);
          }
          else {
            obj['on' + eventName] = function(e) { return handler(e || window.event); };
          }
        };
      
        function off(obj, eventName, handler) {
          if (obj.removeEventListener) {
            obj.removeEventListener(eventName, handler, false);
          }
          else if (obj.detachEvent) {
            obj.detachEvent('on' + eventName, handler);
          }
          else {
            if (obj['on' + eventName])
              obj['on' + eventName] = null;
          }
        };
      
        function elem(tag, style, parent) {
          var e = tag.tagName ? tag : window.document.createElement(tag);
      
          if (!parent && style && style.tagName) {
            parent = style;
            style = null;
          }
      
          if (style) {
            if (typeof style === 'string') {
              setText(e, style);
            }
            else {
              for (var k in style) if (style.hasOwnProperty(k)) {
                if (k === 'text') {
                  setText(e, style[k]);
                }
                else if (k === 'className') {
                  e.className = style[k];
                }
                else if (!(e.style && k in e.style) && k in e) {
                  e[k] = style[k];
                }
                else {
      
                  if (style[k] && typeof style[k] === 'object' && typeof style[k].length === 'number') {
                    // array: iterate and apply values
                    var applyValues = style[k];
                    for (var i = 0; i < applyValues.length; i++) {
                      try { e.style[k] = applyValues[i]; }
                      catch (errApplyValues) { }
                    }
                  }
                  else {
                    // not array
                    try {
                      e.style[k] = style[k];
                    }
                    catch (err) {
                      try {
                        if (typeof console !== 'undefined' && typeof console.error === 'function')
                          console.error(e.tagName + '.style.' + k + '=' + style[k] + ': ' + err.message);
                      }
                      catch (whatevs) {
                        alert(e.tagName + '.style.' + k + '=' + style[k] + ': ' + err.message);
                      }
                    }
                  }
                }
              }
            }
          }
      
          if (parent) {
            try {
              parent.appendChild(e);
            }
            catch (error) {
              throw new Error(error.message + ' adding ' + e.tagName + ' to ' + parent.tagName);
            }
          }
      
          return e;
        }
      
        function createFrame() {
      
          var ifr = elem(
            'iframe',
            {
              position: 'absolute',
              left: 0, top: 0,
              width: '100%', height: '100%',
              border: 'none',
              src: 'about:blank'
            },
            window.document.body);
      
          var ifrwin = ifr.contentWindow || ifr.window;
          var ifrdoc = ifrwin.document;
      
          if (ifrdoc.open) ifrdoc.open();
          ifrdoc.write(
            '<!' + 'doctype html' + '>' +
            '<' + 'html' + '>' +
            '<' + 'head' + '><' + 'style' + '>' +
            'body,html{margin:0;padding:0;border:none;height:100%;border:none;}' +
            '*,*:before,*:after{box-sizing:inherit;}' +
            'html{box-sizing:border-box;}' +
            '</' + 'style' + '>\n' +
      
            '<' + 'body' + '>' +
      
            '<' + 'script' + '>window.__eval_export_=function(code) { return eval(code); }</' + 'script' + '>' +
      
            // it's important to have body before any long scripts (especialy external),
            // so IFRAME is immediately ready
            '<' + 'body' + '>' +
      
            '</' + 'html' + '>');
          if (ifrdoc.close) ifrdoc.close();
      
          var ifrwin_eval = ifrwin.__eval_export_;
          try {
            delete (<any>ifrwin).__eval_export_;
          }
          catch (weirdIEFailure) {
            // no big deal if it fails
          }
      
          ifrdoc.body.innerHTML = '';
      
          if (window.onerror) {
            ifrwin.onerror = delegate_onerror;
          }
      
          return {
            document: ifrdoc,
            global: ifrwin,
            iframe: ifr,
            evalFN: ifrwin_eval
          };
      
          function delegate_onerror() {
            window.onerror.apply(window, arguments);
          }
      
        }
      
      }
    • bootUI.js
      function bootUI(document, window, base) {
      
        base.elem(document.body, {
          background: 'rgb(3,11,61)',
          color: 'cyan',
          border: 'none',
          overflow: 'hidden',
          fontFamily: 'Segoe UI Light, Segoe UI, Ubuntu Light, Ubuntu, Toronto, Helvetica, Roboto, Droid Sans, Sans Serif'
        });
      
        base.elem('div', {
          innerHTML:
          	'<table style="width:100%;filter:blur(2.5px);-webkit-filter:blur(2.5px);-ms-filter: DXImageTransform.Microsoft.Blur(PixelRadius=\'2.5\');" width=100%><tr><td style="width:50%;" width=50% valign=top>'+
          	'<div style="color: white">'+
              '<div style="background: darkcyan; width: 33%; margin-top:0.5em;padding-left:0.5em;">######</div>'+
              '<div style="margin-left:0.5em;">'+
                '##### <br>'+
                '###'+
              '</div>'+
              '<div style="margin-left:0.5em;">'+
                '******* <br>'+
                '*********** <br>'+
                '*********** <br>'+
                '************ <br>'+
                '************* <br>'+
                '**************** ** <br>'+
                '*************** <br>'+
                '************' +
              '</div>'+
            '</div>'+
          	'</td><td style="width:50%; padding: 0.5em;" width=50% valign=top>'+
          	'<div style="color: white">'+
          	'-- <br>'+
          	'#### <br>'+
          	'####### <br>'+
          	'#### <br>'+
          	'#### <br>'+
          	'#### #### <br>' +
          	'######## <br>' +
          	'##### <br>'+
          	'####### <br>' +
          	'#######' +
          	'</div>'+
          	'***** ** <br>'+
          	'**** **** <br>'+
          	'*********' +
          	'</td></tr></table>'
        }, document.body);
      
      
        var progressContainer = base.elem('div', {
          position: 'absolute',
          left: 0, top: 0,
          padding: '3em'
        }, document.body);
      
        var header = base.elem('h2', {
          text: 'Mini portabled shell',
          color: 'white',
          fontWeight: '100',
          fontSize: '500%',
          marginBottom: 0, paddingBottom: 0,
          textShadow: '1px 1px 3px black'
        }, progressContainer);
      
        var smallTitle = base.elem('div', {
          fontStyle: 'italic',
          paddingLeft: '1em',
          textShadow: '1px 1px 3px black',
          text: 'Loading...',
          opacity: 0.8
        }, progressContainer);
      
        var bootBar = base.elem('div', {
          marginTop: '2em',
          background: 'gold', color: 'gold',
          height: '2px',
          width: '3%',
          fontSize: '10%',
          innerHTML: '&nbsp;'
        }, progressContainer);
      
        var darkBottom = base.elem('div', {
          position: 'absolute',
          bottom: 0,
          width: '100%',
          height: '3em',
          background: 'black'
        }, document.body);
      
        return {
          title: function(t, ratio) {
            setText(smallTitle,t);
            if (typeof console !== 'undefined' && typeof console.log === 'function')
              console.log(t);
            if (ratio) {
              bootBar.style.width = (ratio*100) + '%';
            }
          },
          loaded: function() {
            setText(smallTitle, 'Loaded.');
          }
        };
      }
    • earlyBoot.ts
      function earlyBoot(window: Window) {
      
        base(window).apply();
      
        (<any>window).__boot_times.earlyBootStart = (+new Date());
      
        document.write(
          '<' + 'style' + ' data-legit=mi>' +
          '*{display:none;background:black;color:black;}' +
          'html,body{display:block;background:black;color:black;}' +
          '</' + 'style' + '>' +
          (document.body ? '' : '<body>'));
      
        elem(document.body, {
          height: '100%',
          margin: 0,
          padding: 0,
          overflow: 'hidden',
          background: 'black', color: 'black'
        });
        elem(document.body.parentElement, {
          overflow: 'hidden',
          background: 'black', color: 'black'
        });
      
        var allStyleElements = document.getElementsByTagName('style');
        var addedStyle = allStyleElements[allStyleElements.length - 1];
      
        var bootFrame: any = createFrame();
        bootFrame.iframe.style.zIndex = <any>2000;
        bootFrame.iframe.style.display = 'block';
      
        base(bootFrame.global).apply();
      
        var bootUI = (<any>window).bootUI;
      
        var bootAPI = bootUI(bootFrame.document, bootFrame.global, { elem: (<any>bootFrame.global).elem });
        bootFrame.api = bootAPI;
        bootFrame.earlyStartTime = (<any>window).__boot_times.onerror_start;
        bootFrame.bootStartTime = (<any>window).__boot_times.earlyBootStart;
      
        var uniqueKey = deriveUniqueKey(location);
      
        var shellLoaderInstance = null;
        var shellLoadInterval = setInterval(function() {
          if ((<any>window).shellLoader === 'undefined') return;
          if (!shellLoadInterval) return; // protect against old Opera's super-async habits
          shellLoaderInstance = shellLoaderInstance ? shellLoaderInstance.continueLoading() : (<any>window).shellLoader ? (<any>window).shellLoader(uniqueKey, document, bootFrame) : null;
        }, 1);
      
        window.onload = function() {
      
          clearInterval(shellLoadInterval);
          shellLoadInterval = 0;
      
          removeSpyElements();
          bootFrame.iframe.style.zIndex = <any>1000;
          if (addedStyle.parentElement)
            addedStyle.parentElement.removeChild(addedStyle);
          bootFrame.iframe.style.display = '';
      
          (shellLoaderInstance || (<any>window).shellLoader(uniqueKey, document, bootFrame)).finishLoading();
      
        };
      
        function deriveUniqueKey(locationSeed) {
          var key = (locationSeed + '').split('?')[0].split('#')[0].toLowerCase();
      
          var posIndexTrail = key.search(/\/index\.html$/);
          if (posIndexTrail > 0) key = key.slice(0, posIndexTrail);
      
          if (key.charAt(0) === '/')
            key = key.slice(1);
          if (key.slice(-1) === '/')
            key = key.slice(0, key.length - 1);
      
          return smallHash(key) + '-' + smallHash(key.slice(1) + 'a');
      
          function smallHash(key) {
            for (var h = 0, i = 0; i < key.length; i++) {
              h = Math.pow(31, h + 31 / key.charCodeAt(i));
              h -= h | 0;
            }
            return (h * 2000000000) | 0;
          }
      
        }
      
        function removeSpyElements() {
      
          removeElements('iframe', function(ifr) { return ifr !== bootFrame.iframe; });
          removeElements('style', function(sty) { return sty.getAttribute('data-legit') !== 'mi'; });
          removeElements('script', function(sty) { return sty.getAttribute('data-legit') !== 'mi'; });
      
          function removeElements(tagName, predicateToRemove) {
            var list = document.getElementsByTagName(tagName);
            for (var i = 0; i < list.length; i++) {
              var elem = list[i] || list.item(i);
              if (predicateToRemove(elem)) {
                elem.parentElement.removeChild(elem);
                i--;
              }
            }
          }
        }
      
      }
    • onerror.js
      window.__boot_times = window.__boot_times || {};
      window.__boot_times.onerror_start = +new Date();
      
      window.onerror = function onerror() {
      
        var msg = [];
        for (var i = 0; i < arguments.length; i++) {
          var a = arguments[i];
          if (a && (typeof a === 'object')) {
      
            if (a.stack) {
              msg.push(a.stack);
            }
            else {
              var msg1 = [];
              for (var k in a) {
                var r = a[k];
                if (typeof r === 'function' || (typeof r === 'object' && !r)) continue;
                msg1.push(k+':'+r);
              }
              msg.push(msg1.join(', '));
            }
          }
          else {
            msg.push(a===null ? 'null' : a);
          }
      
        }
      
        alert(msg.join('\n'));
      
      }
  • isolation
    • noapi
      • imports
        • base64-js
          • b64.js
            var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
            
            ;(function (exports) {
              'use strict'
            
              var Arr = (typeof Uint8Array !== 'undefined')
                ? Uint8Array
                : Array
            
              var PLUS = '+'.charCodeAt(0)
              var SLASH = '/'.charCodeAt(0)
              var NUMBER = '0'.charCodeAt(0)
              var LOWER = 'a'.charCodeAt(0)
              var UPPER = 'A'.charCodeAt(0)
              var PLUS_URL_SAFE = '-'.charCodeAt(0)
              var SLASH_URL_SAFE = '_'.charCodeAt(0)
            
              function decode (elt) {
                var code = elt.charCodeAt(0)
                if (code === PLUS || code === PLUS_URL_SAFE) return 62 // '+'
                if (code === SLASH || code === SLASH_URL_SAFE) return 63 // '/'
                if (code < NUMBER) return -1 // no match
                if (code < NUMBER + 10) return code - NUMBER + 26 + 26
                if (code < UPPER + 26) return code - UPPER
                if (code < LOWER + 26) return code - LOWER + 26
              }
            
              function b64ToByteArray (b64) {
                var i, j, l, tmp, placeHolders, arr
            
                if (b64.length % 4 > 0) {
                  throw new Error('Invalid string. Length must be a multiple of 4')
                }
            
                // the number of equal signs (place holders)
                // if there are two placeholders, than the two characters before it
                // represent one byte
                // if there is only one, then the three characters before it represent 2 bytes
                // this is just a cheap hack to not do indexOf twice
                var len = b64.length
                placeHolders = b64.charAt(len - 2) === '=' ? 2 : b64.charAt(len - 1) === '=' ? 1 : 0
            
                // base64 is 4/3 + up to two characters of the original data
                arr = new Arr(b64.length * 3 / 4 - placeHolders)
            
                // if there are placeholders, only get up to the last complete 4 chars
                l = placeHolders > 0 ? b64.length - 4 : b64.length
            
                var L = 0
            
                function push (v) {
                  arr[L++] = v
                }
            
                for (i = 0, j = 0; i < l; i += 4, j += 3) {
                  tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
                  push((tmp & 0xFF0000) >> 16)
                  push((tmp & 0xFF00) >> 8)
                  push(tmp & 0xFF)
                }
            
                if (placeHolders === 2) {
                  tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
                  push(tmp & 0xFF)
                } else if (placeHolders === 1) {
                  tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
                  push((tmp >> 8) & 0xFF)
                  push(tmp & 0xFF)
                }
            
                return arr
              }
            
              function uint8ToBase64 (uint8) {
                var i
                var extraBytes = uint8.length % 3 // if we have 1 byte left, pad 2 bytes
                var output = ''
                var temp, length
            
                function encode (num) {
                  return lookup.charAt(num)
                }
            
                function tripletToBase64 (num) {
                  return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
                }
            
                // go through the array every three bytes, we'll deal with trailing stuff later
                for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
                  temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
                  output += tripletToBase64(temp)
                }
            
                // pad the end with zeros, but make sure to not forget the extra bytes
                switch (extraBytes) {
                  case 1:
                    temp = uint8[uint8.length - 1]
                    output += encode(temp >> 2)
                    output += encode((temp << 4) & 0x3F)
                    output += '=='
                    break
                  case 2:
                    temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
                    output += encode(temp >> 10)
                    output += encode((temp >> 4) & 0x3F)
                    output += encode((temp << 2) & 0x3F)
                    output += '='
                    break
                  default:
                    break
                }
            
                return output
              }
            
              exports.toByteArray = b64ToByteArray
              exports.fromByteArray = uint8ToBase64
            }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
            
        • buffer
          • index.js
            /*!
             * The buffer module from node.js, for the browser.
             *
             * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
             * @license  MIT
             */
            
            var base64 = require('base64-js')
            var ieee754 = require('ieee754')
            var isArray = require('is-array')
            
            exports.Buffer = Buffer
            exports.SlowBuffer = SlowBuffer
            exports.INSPECT_MAX_BYTES = 50
            Buffer.poolSize = 8192 // not used by this implementation
            
            var kMaxLength = 0x3fffffff
            var rootParent = {}
            
            /**
             * If `Buffer.TYPED_ARRAY_SUPPORT`:
             *   === true    Use Uint8Array implementation (fastest)
             *   === false   Use Object implementation (most compatible, even IE6)
             *
             * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
             * Opera 11.6+, iOS 4.2+.
             *
             * Note:
             *
             * - Implementation must support adding new properties to `Uint8Array` instances.
             *   Firefox 4-29 lacked support, fixed in Firefox 30+.
             *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
             *
             *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
             *
             *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
             *    incorrect length in some situations.
             *
             * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will
             * get the Object implementation, which is slower but will work correctly.
             */
            Buffer.TYPED_ARRAY_SUPPORT = (function () {
              try {
                var buf = new ArrayBuffer(0)
                var arr = new Uint8Array(buf)
                arr.foo = function () { return 42 }
                return arr.foo() === 42 && // typed array instances can be augmented
                    typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
                    new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
              } catch (e) {
                return false
              }
            })()
            
            /**
             * Class: Buffer
             * =============
             *
             * The Buffer constructor returns instances of `Uint8Array` that are augmented
             * with function properties for all the node `Buffer` API functions. We use
             * `Uint8Array` so that square bracket notation works as expected -- it returns
             * a single octet.
             *
             * By augmenting the instances, we can avoid modifying the `Uint8Array`
             * prototype.
             */
            function Buffer (arg) {
              if (!(this instanceof Buffer)) {
                // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
                if (arguments.length > 1) return new Buffer(arg, arguments[1])
                return new Buffer(arg)
              }
            
              this.length = 0
              this.parent = undefined
            
              // Common case.
              if (typeof arg === 'number') {
                return fromNumber(this, arg)
              }
            
              // Slightly less common case.
              if (typeof arg === 'string') {
                return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
              }
            
              // Unusual.
              return fromObject(this, arg)
            }
            
            function fromNumber (that, length) {
              that = allocate(that, length < 0 ? 0 : checked(length) | 0)
              if (!Buffer.TYPED_ARRAY_SUPPORT) {
                for (var i = 0; i < length; i++) {
                  that[i] = 0
                }
              }
              return that
            }
            
            function fromString (that, string, encoding) {
              if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
            
              // Assumption: byteLength() return value is always < kMaxLength.
              var length = byteLength(string, encoding) | 0
              that = allocate(that, length)
            
              that.write(string, encoding)
              return that
            }
            
            function fromObject (that, object) {
              if (Buffer.isBuffer(object)) return fromBuffer(that, object)
            
              if (isArray(object)) return fromArray(that, object)
            
              if (object == null) {
                throw new TypeError('must start with number, buffer, array or string')
              }
            
              if (typeof ArrayBuffer !== 'undefined' && object.buffer instanceof ArrayBuffer) {
                return fromTypedArray(that, object)
              }
            
              if (object.length) return fromArrayLike(that, object)
            
              return fromJsonObject(that, object)
            }
            
            function fromBuffer (that, buffer) {
              var length = checked(buffer.length) | 0
              that = allocate(that, length)
              buffer.copy(that, 0, 0, length)
              return that
            }
            
            function fromArray (that, array) {
              var length = checked(array.length) | 0
              that = allocate(that, length)
              for (var i = 0; i < length; i += 1) {
                that[i] = array[i] & 255
              }
              return that
            }
            
            // Duplicate of fromArray() to keep fromArray() monomorphic.
            function fromTypedArray (that, array) {
              var length = checked(array.length) | 0
              that = allocate(that, length)
              // Truncating the elements is probably not what people expect from typed
              // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
              // of the old Buffer constructor.
              for (var i = 0; i < length; i += 1) {
                that[i] = array[i] & 255
              }
              return that
            }
            
            function fromArrayLike (that, array) {
              var length = checked(array.length) | 0
              that = allocate(that, length)
              for (var i = 0; i < length; i += 1) {
                that[i] = array[i] & 255
              }
              return that
            }
            
            // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
            // Returns a zero-length buffer for inputs that don't conform to the spec.
            function fromJsonObject (that, object) {
              var array
              var length = 0
            
              if (object.type === 'Buffer' && isArray(object.data)) {
                array = object.data
                length = checked(array.length) | 0
              }
              that = allocate(that, length)
            
              for (var i = 0; i < length; i += 1) {
                that[i] = array[i] & 255
              }
              return that
            }
            
            function allocate (that, length) {
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                // Return an augmented `Uint8Array` instance, for best performance
                that = Buffer._augment(new Uint8Array(length))
              } else {
                // Fallback: Return an object instance of the Buffer class
                that.length = length
                that._isBuffer = true
              }
            
              var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
              if (fromPool) that.parent = rootParent
            
              return that
            }
            
            function checked (length) {
              // Note: cannot use `length < kMaxLength` here because that fails when
              // length is NaN (which is otherwise coerced to zero.)
              if (length >= kMaxLength) {
                throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                                     'size: 0x' + kMaxLength.toString(16) + ' bytes')
              }
              return length | 0
            }
            
            function SlowBuffer (subject, encoding) {
              if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
            
              var buf = new Buffer(subject, encoding)
              delete buf.parent
              return buf
            }
            
            Buffer.isBuffer = function isBuffer (b) {
              return !!(b != null && b._isBuffer)
            }
            
            Buffer.compare = function compare (a, b) {
              if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
                throw new TypeError('Arguments must be Buffers')
              }
            
              if (a === b) return 0
            
              var x = a.length
              var y = b.length
            
              var i = 0
              var len = Math.min(x, y)
              while (i < len) {
                if (a[i] !== b[i]) break
            
                ++i
              }
            
              if (i !== len) {
                x = a[i]
                y = b[i]
              }
            
              if (x < y) return -1
              if (y < x) return 1
              return 0
            }
            
            Buffer.isEncoding = function isEncoding (encoding) {
              switch (String(encoding).toLowerCase()) {
                case 'hex':
                case 'utf8':
                case 'utf-8':
                case 'ascii':
                case 'binary':
                case 'base64':
                case 'raw':
                case 'ucs2':
                case 'ucs-2':
                case 'utf16le':
                case 'utf-16le':
                  return true
                default:
                  return false
              }
            }
            
            Buffer.concat = function concat (list, length) {
              if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
            
              if (list.length === 0) {
                return new Buffer(0)
              } else if (list.length === 1) {
                return list[0]
              }
            
              var i
              if (length === undefined) {
                length = 0
                for (i = 0; i < list.length; i++) {
                  length += list[i].length
                }
              }
            
              var buf = new Buffer(length)
              var pos = 0
              for (i = 0; i < list.length; i++) {
                var item = list[i]
                item.copy(buf, pos)
                pos += item.length
              }
              return buf
            }
            
            function byteLength (string, encoding) {
              if (typeof string !== 'string') string = String(string)
            
              if (string.length === 0) return 0
            
              switch (encoding || 'utf8') {
                case 'ascii':
                case 'binary':
                case 'raw':
                  return string.length
                case 'ucs2':
                case 'ucs-2':
                case 'utf16le':
                case 'utf-16le':
                  return string.length * 2
                case 'hex':
                  return string.length >>> 1
                case 'utf8':
                case 'utf-8':
                  return utf8ToBytes(string).length
                case 'base64':
                  return base64ToBytes(string).length
                default:
                  return string.length
              }
            }
            Buffer.byteLength = byteLength
            
            // pre-set for values that may exist in the future
            Buffer.prototype.length = undefined
            Buffer.prototype.parent = undefined
            
            // toString(encoding, start=0, end=buffer.length)
            Buffer.prototype.toString = function toString (encoding, start, end) {
              var loweredCase = false
            
              start = start | 0
              end = end === undefined || end === Infinity ? this.length : end | 0
            
              if (!encoding) encoding = 'utf8'
              if (start < 0) start = 0
              if (end > this.length) end = this.length
              if (end <= start) return ''
            
              while (true) {
                switch (encoding) {
                  case 'hex':
                    return hexSlice(this, start, end)
            
                  case 'utf8':
                  case 'utf-8':
                    return utf8Slice(this, start, end)
            
                  case 'ascii':
                    return asciiSlice(this, start, end)
            
                  case 'binary':
                    return binarySlice(this, start, end)
            
                  case 'base64':
                    return base64Slice(this, start, end)
            
                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return utf16leSlice(this, start, end)
            
                  default:
                    if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
                    encoding = (encoding + '').toLowerCase()
                    loweredCase = true
                }
              }
            }
            
            Buffer.prototype.equals = function equals (b) {
              if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
              if (this === b) return true
              return Buffer.compare(this, b) === 0
            }
            
            Buffer.prototype.inspect = function inspect () {
              var str = ''
              var max = exports.INSPECT_MAX_BYTES
              if (this.length > 0) {
                str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
                if (this.length > max) str += ' ... '
              }
              return '<Buffer ' + str + '>'
            }
            
            Buffer.prototype.compare = function compare (b) {
              if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
              if (this === b) return 0
              return Buffer.compare(this, b)
            }
            
            Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
              if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
              else if (byteOffset < -0x80000000) byteOffset = -0x80000000
              byteOffset >>= 0
            
              if (this.length === 0) return -1
              if (byteOffset >= this.length) return -1
            
              // Negative offsets start from the end of the buffer
              if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
            
              if (typeof val === 'string') {
                if (val.length === 0) return -1 // special case: looking for empty string always fails
                return String.prototype.indexOf.call(this, val, byteOffset)
              }
              if (Buffer.isBuffer(val)) {
                return arrayIndexOf(this, val, byteOffset)
              }
              if (typeof val === 'number') {
                if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
                  return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
                }
                return arrayIndexOf(this, [ val ], byteOffset)
              }
            
              function arrayIndexOf (arr, val, byteOffset) {
                var foundIndex = -1
                for (var i = 0; byteOffset + i < arr.length; i++) {
                  if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
                    if (foundIndex === -1) foundIndex = i
                    if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
                  } else {
                    foundIndex = -1
                  }
                }
                return -1
              }
            
              throw new TypeError('val must be string, number or Buffer')
            }
            
            // `get` will be removed in Node 0.13+
            Buffer.prototype.get = function get (offset) {
              console.log('.get() is deprecated. Access using array indexes instead.')
              return this.readUInt8(offset)
            }
            
            // `set` will be removed in Node 0.13+
            Buffer.prototype.set = function set (v, offset) {
              console.log('.set() is deprecated. Access using array indexes instead.')
              return this.writeUInt8(v, offset)
            }
            
            function hexWrite (buf, string, offset, length) {
              offset = Number(offset) || 0
              var remaining = buf.length - offset
              if (!length) {
                length = remaining
              } else {
                length = Number(length)
                if (length > remaining) {
                  length = remaining
                }
              }
            
              // must be an even number of digits
              var strLen = string.length
              if (strLen % 2 !== 0) throw new Error('Invalid hex string')
            
              if (length > strLen / 2) {
                length = strLen / 2
              }
              for (var i = 0; i < length; i++) {
                var parsed = parseInt(string.substr(i * 2, 2), 16)
                if (isNaN(parsed)) throw new Error('Invalid hex string')
                buf[offset + i] = parsed
              }
              return i
            }
            
            function utf8Write (buf, string, offset, length) {
              return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
            }
            
            function asciiWrite (buf, string, offset, length) {
              return blitBuffer(asciiToBytes(string), buf, offset, length)
            }
            
            function binaryWrite (buf, string, offset, length) {
              return asciiWrite(buf, string, offset, length)
            }
            
            function base64Write (buf, string, offset, length) {
              return blitBuffer(base64ToBytes(string), buf, offset, length)
            }
            
            function ucs2Write (buf, string, offset, length) {
              return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
            }
            
            Buffer.prototype.write = function write (string, offset, length, encoding) {
              // Buffer#write(string)
              if (offset === undefined) {
                encoding = 'utf8'
                length = this.length
                offset = 0
              // Buffer#write(string, encoding)
              } else if (length === undefined && typeof offset === 'string') {
                encoding = offset
                length = this.length
                offset = 0
              // Buffer#write(string, offset[, length][, encoding])
              } else if (isFinite(offset)) {
                offset = offset | 0
                if (isFinite(length)) {
                  length = length | 0
                  if (encoding === undefined) encoding = 'utf8'
                } else {
                  encoding = length
                  length = undefined
                }
              // legacy write(string, encoding, offset, length) - remove in v0.13
              } else {
                var swap = encoding
                encoding = offset
                offset = length | 0
                length = swap
              }
            
              var remaining = this.length - offset
              if (length === undefined || length > remaining) length = remaining
            
              if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
                throw new RangeError('attempt to write outside buffer bounds')
              }
            
              if (!encoding) encoding = 'utf8'
            
              var loweredCase = false
              for (;;) {
                switch (encoding) {
                  case 'hex':
                    return hexWrite(this, string, offset, length)
            
                  case 'utf8':
                  case 'utf-8':
                    return utf8Write(this, string, offset, length)
            
                  case 'ascii':
                    return asciiWrite(this, string, offset, length)
            
                  case 'binary':
                    return binaryWrite(this, string, offset, length)
            
                  case 'base64':
                    // Warning: maxLength not taken into account in base64Write
                    return base64Write(this, string, offset, length)
            
                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return ucs2Write(this, string, offset, length)
            
                  default:
                    if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
                    encoding = ('' + encoding).toLowerCase()
                    loweredCase = true
                }
              }
            }
            
            Buffer.prototype.toJSON = function toJSON () {
              return {
                type: 'Buffer',
                data: Array.prototype.slice.call(this._arr || this, 0)
              }
            }
            
            function base64Slice (buf, start, end) {
              if (start === 0 && end === buf.length) {
                return base64.fromByteArray(buf)
              } else {
                return base64.fromByteArray(buf.slice(start, end))
              }
            }
            
            function utf8Slice (buf, start, end) {
              var res = ''
              var tmp = ''
              end = Math.min(buf.length, end)
            
              for (var i = start; i < end; i++) {
                if (buf[i] <= 0x7F) {
                  res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
                  tmp = ''
                } else {
                  tmp += '%' + buf[i].toString(16)
                }
              }
            
              return res + decodeUtf8Char(tmp)
            }
            
            function asciiSlice (buf, start, end) {
              var ret = ''
              end = Math.min(buf.length, end)
            
              for (var i = start; i < end; i++) {
                ret += String.fromCharCode(buf[i] & 0x7F)
              }
              return ret
            }
            
            function binarySlice (buf, start, end) {
              var ret = ''
              end = Math.min(buf.length, end)
            
              for (var i = start; i < end; i++) {
                ret += String.fromCharCode(buf[i])
              }
              return ret
            }
            
            function hexSlice (buf, start, end) {
              var len = buf.length
            
              if (!start || start < 0) start = 0
              if (!end || end < 0 || end > len) end = len
            
              var out = ''
              for (var i = start; i < end; i++) {
                out += toHex(buf[i])
              }
              return out
            }
            
            function utf16leSlice (buf, start, end) {
              var bytes = buf.slice(start, end)
              var res = ''
              for (var i = 0; i < bytes.length; i += 2) {
                res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
              }
              return res
            }
            
            Buffer.prototype.slice = function slice (start, end) {
              var len = this.length
              start = ~~start
              end = end === undefined ? len : ~~end
            
              if (start < 0) {
                start += len
                if (start < 0) start = 0
              } else if (start > len) {
                start = len
              }
            
              if (end < 0) {
                end += len
                if (end < 0) end = 0
              } else if (end > len) {
                end = len
              }
            
              if (end < start) end = start
            
              var newBuf
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                newBuf = Buffer._augment(this.subarray(start, end))
              } else {
                var sliceLen = end - start
                newBuf = new Buffer(sliceLen, undefined)
                for (var i = 0; i < sliceLen; i++) {
                  newBuf[i] = this[i + start]
                }
              }
            
              if (newBuf.length) newBuf.parent = this.parent || this
            
              return newBuf
            }
            
            /*
             * Need to make sure that buffer isn't trying to write out of bounds.
             */
            function checkOffset (offset, ext, length) {
              if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
              if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
            }
            
            Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
              offset = offset | 0
              byteLength = byteLength | 0
              if (!noAssert) checkOffset(offset, byteLength, this.length)
            
              var val = this[offset]
              var mul = 1
              var i = 0
              while (++i < byteLength && (mul *= 0x100)) {
                val += this[offset + i] * mul
              }
            
              return val
            }
            
            Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
              offset = offset | 0
              byteLength = byteLength | 0
              if (!noAssert) {
                checkOffset(offset, byteLength, this.length)
              }
            
              var val = this[offset + --byteLength]
              var mul = 1
              while (byteLength > 0 && (mul *= 0x100)) {
                val += this[offset + --byteLength] * mul
              }
            
              return val
            }
            
            Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 1, this.length)
              return this[offset]
            }
            
            Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 2, this.length)
              return this[offset] | (this[offset + 1] << 8)
            }
            
            Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 2, this.length)
              return (this[offset] << 8) | this[offset + 1]
            }
            
            Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 4, this.length)
            
              return ((this[offset]) |
                  (this[offset + 1] << 8) |
                  (this[offset + 2] << 16)) +
                  (this[offset + 3] * 0x1000000)
            }
            
            Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 4, this.length)
            
              return (this[offset] * 0x1000000) +
                ((this[offset + 1] << 16) |
                (this[offset + 2] << 8) |
                this[offset + 3])
            }
            
            Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
              offset = offset | 0
              byteLength = byteLength | 0
              if (!noAssert) checkOffset(offset, byteLength, this.length)
            
              var val = this[offset]
              var mul = 1
              var i = 0
              while (++i < byteLength && (mul *= 0x100)) {
                val += this[offset + i] * mul
              }
              mul *= 0x80
            
              if (val >= mul) val -= Math.pow(2, 8 * byteLength)
            
              return val
            }
            
            Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
              offset = offset | 0
              byteLength = byteLength | 0
              if (!noAssert) checkOffset(offset, byteLength, this.length)
            
              var i = byteLength
              var mul = 1
              var val = this[offset + --i]
              while (i > 0 && (mul *= 0x100)) {
                val += this[offset + --i] * mul
              }
              mul *= 0x80
            
              if (val >= mul) val -= Math.pow(2, 8 * byteLength)
            
              return val
            }
            
            Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 1, this.length)
              if (!(this[offset] & 0x80)) return (this[offset])
              return ((0xff - this[offset] + 1) * -1)
            }
            
            Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 2, this.length)
              var val = this[offset] | (this[offset + 1] << 8)
              return (val & 0x8000) ? val | 0xFFFF0000 : val
            }
            
            Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 2, this.length)
              var val = this[offset + 1] | (this[offset] << 8)
              return (val & 0x8000) ? val | 0xFFFF0000 : val
            }
            
            Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 4, this.length)
            
              return (this[offset]) |
                (this[offset + 1] << 8) |
                (this[offset + 2] << 16) |
                (this[offset + 3] << 24)
            }
            
            Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 4, this.length)
            
              return (this[offset] << 24) |
                (this[offset + 1] << 16) |
                (this[offset + 2] << 8) |
                (this[offset + 3])
            }
            
            Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 4, this.length)
              return ieee754.read(this, offset, true, 23, 4)
            }
            
            Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 4, this.length)
              return ieee754.read(this, offset, false, 23, 4)
            }
            
            Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 8, this.length)
              return ieee754.read(this, offset, true, 52, 8)
            }
            
            Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
              if (!noAssert) checkOffset(offset, 8, this.length)
              return ieee754.read(this, offset, false, 52, 8)
            }
            
            function checkInt (buf, value, offset, ext, max, min) {
              if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
              if (value > max || value < min) throw new RangeError('value is out of bounds')
              if (offset + ext > buf.length) throw new RangeError('index out of range')
            }
            
            Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
              value = +value
              offset = offset | 0
              byteLength = byteLength | 0
              if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
            
              var mul = 1
              var i = 0
              this[offset] = value & 0xFF
              while (++i < byteLength && (mul *= 0x100)) {
                this[offset + i] = (value / mul) & 0xFF
              }
            
              return offset + byteLength
            }
            
            Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
              value = +value
              offset = offset | 0
              byteLength = byteLength | 0
              if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
            
              var i = byteLength - 1
              var mul = 1
              this[offset + i] = value & 0xFF
              while (--i >= 0 && (mul *= 0x100)) {
                this[offset + i] = (value / mul) & 0xFF
              }
            
              return offset + byteLength
            }
            
            Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
              if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
              this[offset] = value
              return offset + 1
            }
            
            function objectWriteUInt16 (buf, value, offset, littleEndian) {
              if (value < 0) value = 0xffff + value + 1
              for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
                buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
                  (littleEndian ? i : 1 - i) * 8
              }
            }
            
            Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = value
                this[offset + 1] = (value >>> 8)
              } else {
                objectWriteUInt16(this, value, offset, true)
              }
              return offset + 2
            }
            
            Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = (value >>> 8)
                this[offset + 1] = value
              } else {
                objectWriteUInt16(this, value, offset, false)
              }
              return offset + 2
            }
            
            function objectWriteUInt32 (buf, value, offset, littleEndian) {
              if (value < 0) value = 0xffffffff + value + 1
              for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
                buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
              }
            }
            
            Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset + 3] = (value >>> 24)
                this[offset + 2] = (value >>> 16)
                this[offset + 1] = (value >>> 8)
                this[offset] = value
              } else {
                objectWriteUInt32(this, value, offset, true)
              }
              return offset + 4
            }
            
            Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = (value >>> 24)
                this[offset + 1] = (value >>> 16)
                this[offset + 2] = (value >>> 8)
                this[offset + 3] = value
              } else {
                objectWriteUInt32(this, value, offset, false)
              }
              return offset + 4
            }
            
            Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) {
                var limit = Math.pow(2, 8 * byteLength - 1)
            
                checkInt(this, value, offset, byteLength, limit - 1, -limit)
              }
            
              var i = 0
              var mul = 1
              var sub = value < 0 ? 1 : 0
              this[offset] = value & 0xFF
              while (++i < byteLength && (mul *= 0x100)) {
                this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
              }
            
              return offset + byteLength
            }
            
            Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) {
                var limit = Math.pow(2, 8 * byteLength - 1)
            
                checkInt(this, value, offset, byteLength, limit - 1, -limit)
              }
            
              var i = byteLength - 1
              var mul = 1
              var sub = value < 0 ? 1 : 0
              this[offset + i] = value & 0xFF
              while (--i >= 0 && (mul *= 0x100)) {
                this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
              }
            
              return offset + byteLength
            }
            
            Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
              if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
              if (value < 0) value = 0xff + value + 1
              this[offset] = value
              return offset + 1
            }
            
            Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = value
                this[offset + 1] = (value >>> 8)
              } else {
                objectWriteUInt16(this, value, offset, true)
              }
              return offset + 2
            }
            
            Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = (value >>> 8)
                this[offset + 1] = value
              } else {
                objectWriteUInt16(this, value, offset, false)
              }
              return offset + 2
            }
            
            Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = value
                this[offset + 1] = (value >>> 8)
                this[offset + 2] = (value >>> 16)
                this[offset + 3] = (value >>> 24)
              } else {
                objectWriteUInt32(this, value, offset, true)
              }
              return offset + 4
            }
            
            Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
              value = +value
              offset = offset | 0
              if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
              if (value < 0) value = 0xffffffff + value + 1
              if (Buffer.TYPED_ARRAY_SUPPORT) {
                this[offset] = (value >>> 24)
                this[offset + 1] = (value >>> 16)
                this[offset + 2] = (value >>> 8)
                this[offset + 3] = value
              } else {
                objectWriteUInt32(this, value, offset, false)
              }
              return offset + 4
            }
            
            function checkIEEE754 (buf, value, offset, ext, max, min) {
              if (value > max || value < min) throw new RangeError('value is out of bounds')
              if (offset + ext > buf.length) throw new RangeError('index out of range')
              if (offset < 0) throw new RangeError('index out of range')
            }
            
            function writeFloat (buf, value, offset, littleEndian, noAssert) {
              if (!noAssert) {
                checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
              }
              ieee754.write(buf, value, offset, littleEndian, 23, 4)
              return offset + 4
            }
            
            Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
              return writeFloat(this, value, offset, true, noAssert)
            }
            
            Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
              return writeFloat(this, value, offset, false, noAssert)
            }
            
            function writeDouble (buf, value, offset, littleEndian, noAssert) {
              if (!noAssert) {
                checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
              }
              ieee754.write(buf, value, offset, littleEndian, 52, 8)
              return offset + 8
            }
            
            Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
              return writeDouble(this, value, offset, true, noAssert)
            }
            
            Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
              return writeDouble(this, value, offset, false, noAssert)
            }
            
            // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
            Buffer.prototype.copy = function copy (target, targetStart, start, end) {
              if (!start) start = 0
              if (!end && end !== 0) end = this.length
              if (targetStart >= target.length) targetStart = target.length
              if (!targetStart) targetStart = 0
              if (end > 0 && end < start) end = start
            
              // Copy 0 bytes; we're done
              if (end === start) return 0
              if (target.length === 0 || this.length === 0) return 0
            
              // Fatal error conditions
              if (targetStart < 0) {
                throw new RangeError('targetStart out of bounds')
              }
              if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
              if (end < 0) throw new RangeError('sourceEnd out of bounds')
            
              // Are we oob?
              if (end > this.length) end = this.length
              if (target.length - targetStart < end - start) {
                end = target.length - targetStart + start
              }
            
              var len = end - start
            
              if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
                for (var i = 0; i < len; i++) {
                  target[i + targetStart] = this[i + start]
                }
              } else {
                target._set(this.subarray(start, start + len), targetStart)
              }
            
              return len
            }
            
            // fill(value, start=0, end=buffer.length)
            Buffer.prototype.fill = function fill (value, start, end) {
              if (!value) value = 0
              if (!start) start = 0
              if (!end) end = this.length
            
              if (end < start) throw new RangeError('end < start')
            
              // Fill 0 bytes; we're done
              if (end === start) return
              if (this.length === 0) return
            
              if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
              if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
            
              var i
              if (typeof value === 'number') {
                for (i = start; i < end; i++) {
                  this[i] = value
                }
              } else {
                var bytes = utf8ToBytes(value.toString())
                var len = bytes.length
                for (i = start; i < end; i++) {
                  this[i] = bytes[i % len]
                }
              }
            
              return this
            }
            
            /**
             * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
             * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
             */
            Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
              if (typeof Uint8Array !== 'undefined') {
                if (Buffer.TYPED_ARRAY_SUPPORT) {
                  return (new Buffer(this)).buffer
                } else {
                  var buf = new Uint8Array(this.length)
                  for (var i = 0, len = buf.length; i < len; i += 1) {
                    buf[i] = this[i]
                  }
                  return buf.buffer
                }
              } else {
                throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
              }
            }
            
            // HELPER FUNCTIONS
            // ================
            
            var BP = Buffer.prototype
            
            /**
             * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
             */
            Buffer._augment = function _augment (arr) {
              arr.constructor = Buffer
              arr._isBuffer = true
            
              // save reference to original Uint8Array set method before overwriting
              arr._set = arr.set
            
              // deprecated, will be removed in node 0.13+
              arr.get = BP.get
              arr.set = BP.set
            
              arr.write = BP.write
              arr.toString = BP.toString
              arr.toLocaleString = BP.toString
              arr.toJSON = BP.toJSON
              arr.equals = BP.equals
              arr.compare = BP.compare
              arr.indexOf = BP.indexOf
              arr.copy = BP.copy
              arr.slice = BP.slice
              arr.readUIntLE = BP.readUIntLE
              arr.readUIntBE = BP.readUIntBE
              arr.readUInt8 = BP.readUInt8
              arr.readUInt16LE = BP.readUInt16LE
              arr.readUInt16BE = BP.readUInt16BE
              arr.readUInt32LE = BP.readUInt32LE
              arr.readUInt32BE = BP.readUInt32BE
              arr.readIntLE = BP.readIntLE
              arr.readIntBE = BP.readIntBE
              arr.readInt8 = BP.readInt8
              arr.readInt16LE = BP.readInt16LE
              arr.readInt16BE = BP.readInt16BE
              arr.readInt32LE = BP.readInt32LE
              arr.readInt32BE = BP.readInt32BE
              arr.readFloatLE = BP.readFloatLE
              arr.readFloatBE = BP.readFloatBE
              arr.readDoubleLE = BP.readDoubleLE
              arr.readDoubleBE = BP.readDoubleBE
              arr.writeUInt8 = BP.writeUInt8
              arr.writeUIntLE = BP.writeUIntLE
              arr.writeUIntBE = BP.writeUIntBE
              arr.writeUInt16LE = BP.writeUInt16LE
              arr.writeUInt16BE = BP.writeUInt16BE
              arr.writeUInt32LE = BP.writeUInt32LE
              arr.writeUInt32BE = BP.writeUInt32BE
              arr.writeIntLE = BP.writeIntLE
              arr.writeIntBE = BP.writeIntBE
              arr.writeInt8 = BP.writeInt8
              arr.writeInt16LE = BP.writeInt16LE
              arr.writeInt16BE = BP.writeInt16BE
              arr.writeInt32LE = BP.writeInt32LE
              arr.writeInt32BE = BP.writeInt32BE
              arr.writeFloatLE = BP.writeFloatLE
              arr.writeFloatBE = BP.writeFloatBE
              arr.writeDoubleLE = BP.writeDoubleLE
              arr.writeDoubleBE = BP.writeDoubleBE
              arr.fill = BP.fill
              arr.inspect = BP.inspect
              arr.toArrayBuffer = BP.toArrayBuffer
            
              return arr
            }
            
            var INVALID_BASE64_RE = /[^+\/0-9A-z\-]/g
            
            function base64clean (str) {
              // Node strips out invalid characters like \n and \t from the string, base64-js does not
              str = stringtrim(str).replace(INVALID_BASE64_RE, '')
              // Node converts strings with length < 2 to ''
              if (str.length < 2) return ''
              // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
              while (str.length % 4 !== 0) {
                str = str + '='
              }
              return str
            }
            
            function stringtrim (str) {
              if (str.trim) return str.trim()
              return str.replace(/^\s+|\s+$/g, '')
            }
            
            function toHex (n) {
              if (n < 16) return '0' + n.toString(16)
              return n.toString(16)
            }
            
            function utf8ToBytes (string, units) {
              units = units || Infinity
              var codePoint
              var length = string.length
              var leadSurrogate = null
              var bytes = []
              var i = 0
            
              for (; i < length; i++) {
                codePoint = string.charCodeAt(i)
            
                // is surrogate component
                if (codePoint > 0xD7FF && codePoint < 0xE000) {
                  // last char was a lead
                  if (leadSurrogate) {
                    // 2 leads in a row
                    if (codePoint < 0xDC00) {
                      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
                      leadSurrogate = codePoint
                      continue
                    } else {
                      // valid surrogate pair
                      codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
                      leadSurrogate = null
                    }
                  } else {
                    // no lead yet
            
                    if (codePoint > 0xDBFF) {
                      // unexpected trail
                      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
                      continue
                    } else if (i + 1 === length) {
                      // unpaired lead
                      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
                      continue
                    } else {
                      // valid lead
                      leadSurrogate = codePoint
                      continue
                    }
                  }
                } else if (leadSurrogate) {
                  // valid bmp char, but last char was a lead
                  if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
                  leadSurrogate = null
                }
            
                // encode utf8
                if (codePoint < 0x80) {
                  if ((units -= 1) < 0) break
                  bytes.push(codePoint)
                } else if (codePoint < 0x800) {
                  if ((units -= 2) < 0) break
                  bytes.push(
                    codePoint >> 0x6 | 0xC0,
                    codePoint & 0x3F | 0x80
                  )
                } else if (codePoint < 0x10000) {
                  if ((units -= 3) < 0) break
                  bytes.push(
                    codePoint >> 0xC | 0xE0,
                    codePoint >> 0x6 & 0x3F | 0x80,
                    codePoint & 0x3F | 0x80
                  )
                } else if (codePoint < 0x200000) {
                  if ((units -= 4) < 0) break
                  bytes.push(
                    codePoint >> 0x12 | 0xF0,
                    codePoint >> 0xC & 0x3F | 0x80,
                    codePoint >> 0x6 & 0x3F | 0x80,
                    codePoint & 0x3F | 0x80
                  )
                } else {
                  throw new Error('Invalid code point')
                }
              }
            
              return bytes
            }
            
            function asciiToBytes (str) {
              var byteArray = []
              for (var i = 0; i < str.length; i++) {
                // Node's code seems to be doing this and not & 0x7F..
                byteArray.push(str.charCodeAt(i) & 0xFF)
              }
              return byteArray
            }
            
            function utf16leToBytes (str, units) {
              var c, hi, lo
              var byteArray = []
              for (var i = 0; i < str.length; i++) {
                if ((units -= 2) < 0) break
            
                c = str.charCodeAt(i)
                hi = c >> 8
                lo = c % 256
                byteArray.push(lo)
                byteArray.push(hi)
              }
            
              return byteArray
            }
            
            function base64ToBytes (str) {
              return base64.toByteArray(base64clean(str))
            }
            
            function blitBuffer (src, dst, offset, length) {
              for (var i = 0; i < length; i++) {
                if ((i + offset >= dst.length) || (i >= src.length)) break
                dst[i + offset] = src[i]
              }
              return i
            }
            
            function decodeUtf8Char (str) {
              try {
                return decodeURIComponent(str)
              } catch (err) {
                return String.fromCharCode(0xFFFD) // UTF 8 invalid char
              }
            }
            
        • ieee754
          • index.js
            exports.read = function (buffer, offset, isLE, mLen, nBytes) {
              var e, m,
                  eLen = nBytes * 8 - mLen - 1,
                  eMax = (1 << eLen) - 1,
                  eBias = eMax >> 1,
                  nBits = -7,
                  i = isLE ? (nBytes - 1) : 0,
                  d = isLE ? -1 : 1,
                  s = buffer[offset + i]
            
              i += d
            
              e = s & ((1 << (-nBits)) - 1)
              s >>= (-nBits)
              nBits += eLen
              for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
            
              m = e & ((1 << (-nBits)) - 1)
              e >>= (-nBits)
              nBits += mLen
              for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
            
              if (e === 0) {
                e = 1 - eBias
              } else if (e === eMax) {
                return m ? NaN : ((s ? -1 : 1) * Infinity)
              } else {
                m = m + Math.pow(2, mLen)
                e = e - eBias
              }
              return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
            }
            
            exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
              var e, m, c,
                  eLen = nBytes * 8 - mLen - 1,
                  eMax = (1 << eLen) - 1,
                  eBias = eMax >> 1,
                  rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
                  i = isLE ? 0 : (nBytes - 1),
                  d = isLE ? 1 : -1,
                  s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
            
              value = Math.abs(value)
            
              if (isNaN(value) || value === Infinity) {
                m = isNaN(value) ? 1 : 0
                e = eMax
              } else {
                e = Math.floor(Math.log(value) / Math.LN2)
                if (value * (c = Math.pow(2, -e)) < 1) {
                  e--
                  c *= 2
                }
                if (e + eBias >= 1) {
                  value += rt / c
                } else {
                  value += rt * Math.pow(2, 1 - eBias)
                }
                if (value * c >= 2) {
                  e++
                  c /= 2
                }
            
                if (e + eBias >= eMax) {
                  m = 0
                  e = eMax
                } else if (e + eBias >= 1) {
                  m = (value * c - 1) * Math.pow(2, mLen)
                  e = e + eBias
                } else {
                  m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
                  e = 0
                }
              }
            
              for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
            
              e = (e << mLen) | m
              eLen += mLen
              for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
            
              buffer[offset + i - d] |= s * 128
            }
            
        • is-array
          • index.js
            /**
             * isArray
             */
            
            var isArray = Array.isArray;
            
            /**
             * toString
             */
            
            var str = Object.prototype.toString;
            
            /**
             * Whether or not the given `val`
             * is an array.
             *
             * example:
             *
             *        isArray([]);
             *        // > true
             *        isArray(arguments);
             *        // > false
             *        isArray('');
             *        // > false
             *
             * @param {mixed} val
             * @return {bool}
             */
            
            module.exports = isArray || function (val) {
              return !! val && '[object Array]' == str.call(val);
            };
            
      • HostedProcess.ts
        module noapi {
        
          export class HostedProcess {
        
            process: Process;
            mainModule: Module;
            global: Global;
            coreModules: { fs: FS; path: Path, os: OS; };
        
            private _scriptPath: string;
            private _drive: persistence.Drive;
            private _console: any;
        
            exitCode: number = null;
            finished = false;
        
            private _context: isolation.Context;
            private _waitFor = 0;
        
            constructor(options: {
              window: Window;
              drive: persistence.Drive;
              scriptPath: string;
        
              argv?: string[];
              cwd?: string;
              env?: any;
              console?: any;
            }) {
        
              this.global = <any>{};
        
              this.coreModules = {
                fs: <FS>null,
                os: <OS>null,
                path: <Path>null
              };
        
              var noopt = {
                argv: options.argv || ['/node', options.scriptPath],
                cwd: options.cwd,
                env: options.env || {}
              };
        
              this._scriptPath = options.scriptPath;
              this._drive = options.drive;
        
              if (!noopt.cwd)
                noopt.cwd = dirname(options.scriptPath);
        
              this.global.process = this.process = createProcess(this.coreModules, noopt);
              this.global.module = this.mainModule = createModule('repl' /*id*/, null /*filename*/, null /*parent*/, require);
        
              var noapicontext = this;
              function require(moduleName: string) { return noapicontext.requireModule(moduleName, dirname(options.scriptPath), null); }
        
              this.global.require = <any>(moduleName => require(moduleName));
              this.global.require.resolve = id => this.resolve(id, noopt.cwd);
              this.global.__filename = options.scriptPath;
              this.global.__dirname = dirname(options.scriptPath);
              if (options.console)
                this.global.console = options.console;
              this._console = options.console;
        
              this.coreModules.fs = createFS(options.drive, this.coreModules);
              this.coreModules.os = createOS(this.global);
              this.coreModules.path = createPath(this.global);
        
              this._context = new isolation.Context(window);
        
              this.process.exit = code => {
                this.finished = true;
                this.exitCode = code || 0;
                this.dispose();
              };
        
              this.process.abort = () => {
                this.finished = true;
                this.dispose();
              };
        
              var timeouts: Function[] = [];
              (<any>this.global).setTimeout = (fun: Function, time: number, ...args: any[]) => {
                if (this.finished) return 0;
                var wait = this.keepAlive();
                var complete = () => {
                  delete timeouts[result];
                  wait();
                  fun();
                };
        
                var passArgs = [];
                passArgs.push(complete);
                passArgs.push(time);
                for (var i = 0; i < args.length; i++) {
                  passArgs.push(args[i]);
                }
                var result = setTimeout.apply(this.global, passArgs);
        
                timeouts[result] = wait;
                return result;
              };
        
              (<any>this.global).clearTimeout = (tout: number) => {
                var wait = timeouts[tout];
                if (wait) wait();
                delete timeouts[tout];
                clearTimeout(tout);
              };
        
              var intervals: Function[] = [];
              (<any>this.global).setInterval = (fun: Function, time: number, ...args: any[]) => {
                if (this.finished) return 0;
                var wait = this.keepAlive();
        
                var passArgs = [];
                passArgs.push(fun);
                passArgs.push(time);
                for (var i = 0; i < args.length; i++) {
                  passArgs.push(args[i]);
                }
                var result = setInterval.apply(this.global, passArgs);
        
                intervals[result] = wait;
                return result;
              };
        
              (<any>this.global).clearInterval = (intv: number) => {
                var wait = intervals[intv];
                if (wait) wait();
                delete intervals[intv];
                clearTimeout(intv);
              };
        
              this.process.nextTick = fun => {
                var wait = this.keepAlive();
                setTimeout(() => {
                  wait();
                  fun();
                }, 1);
              };
        
            }
        
            eval(code: string) {
              var wait = this.keepAlive();
              try {
                return this._context.run(code, this._scriptPath, this.global);
              }
              finally {
                wait();
              }
            }
        
            resolve(id: string, modulePath: string) {
              if (id.charAt(0) === '.') {
                return this.coreModules.path.join(modulePath, id);
              }
              else if (id.charAt(0) === '/') {
                return id;
              }
              else {
                var tryPath = this.coreModules.path.normalize(modulePath);
                var probePatterns = [
                  '../' + i, '../' + id + '.js', '../' + id + '/index.js',
                  '../node_modules/' + id + '/index.js'];
        
                while (true) {
                  tryPath = this.coreModules.path.basename(tryPath);
                  if (!tryPath || tryPath === '/') return null;
                  for (var i = 0; i < probePatterns.length; i++) {
                    var p = this.coreModules.path.join(tryPath, probePatterns[i]);
                    if (this._drive.read(p)) return p;
                  }
                }
              }
            }
        
            requireModule(moduleName: string, parentModulePath: string, parentModule: Module) {
        
              if (this.coreModules.hasOwnProperty(moduleName))
                return this.coreModules[moduleName];
        
              var resolvedPath = this.resolve(moduleName, parentModulePath);
              if (resolvedPath) {
                var content = this._drive.read(resolvedPath);
                if (content) {
                  var loadedModule = createModule(moduleName, resolvedPath, parentModule, moduleName => this.requireModule(moduleName, resolvedPath, loadedModule));
                  var moduleScope = (() => {
        
                    var ModuleContext = () => { };
                    ModuleContext.prototype = this.global;
        
                    var moduleScope = new ModuleContext();
        
                    moduleScope.global = moduleScope;
                    moduleScope.require = function(moduleName) { return loadedModule.require(moduleName); };
                    moduleScope.exports = loadedModule.exports;
        
                    moduleScope.global.__filename = resolvedPath;
                    moduleScope.global.__dirname = dirname(resolvedPath);
                    if (this._console)
                      this.global.console = this._console;
        
        
                    moduleScope.module = loadedModule;
        
                    return moduleScope;
                  })();
        
                  this._context.run(content, resolvedPath, moduleScope);
        
                  return loadedModule.exports;
                }
              }
            }
        
            dispose() {
              this._context.dispose();
            }
        
            keepAlive() {
              this._waitFor++;
              return () => {
                this._waitFor--;
                if (this._waitFor <= 0) {
                  setTimeout(() => {
                    if (this._waitFor <= 0)
                      this.dispose();
                  }, 1000);
                }
              };
            }
          }
        }
      • apply.ts
        module noapi {
        
          export function apply(
            global: any,
            drive: persistence.Drive,
            options?: {
              argv?: string[];
              cwd?: string;
              env?: any;
            }) {
        
            var apiGlobal = {
              process: <Process>null,
              module: <Module>null
            };
        
            if (!options) options = {};
        
            var cleanOptions = {
              argv: options.argv || ['/node'],
              cwd: options.cwd || '/',
              env: options.env || {}
            };
        
            var coreModules = {
              fs: <FS>null,
              os: <OS>null,
              path: <Path>null
            };
        
            apiGlobal.process = createProcess(coreModules, cleanOptions);
            apiGlobal.module = createModule('repl' /*id*/, null /*filename*/, null /*parent*/, module_require);
        
            coreModules.fs = createFS(drive, coreModules);
            coreModules.os = createOS(apiGlobal);
            coreModules.path = createPath(apiGlobal);
        
            global.process = apiGlobal.process;
            global.module = apiGlobal.module;
            global.require = global_require;
        
            function global_require(moduleName: string) {
              return module_require(moduleName);
            }
        
            function module_require(moduleName: string): any {
              if (coreModules.hasOwnProperty(moduleName)) return coreModules[moduleName];
        
              throw new Error('Cannot find module \'' + moduleName + '\'');
            }
          }
        
          export function nextTick(callback: Function): void {
        
            function fire() {
              if (fired) return;
              fired = true;
              callback();
            }
        
            var fired = false;
            setTimeout(fire, 0);
            if (typeof requestAnimationFrame !== 'undefined') {
              requestAnimationFrame(fire);
            }
            else if (typeof msRequestAnimationFrame !== 'undefined') {
              msRequestAnimationFrame(fire);
            }
        
          }
        
          export function wrapAsync(fn: Function): () => void {
            return function() {
              var args = [];
              for (var i = 0; i < arguments.length - 1; i++) {
                args.push(arguments[i]);
              }
              var callback = arguments[arguments.length - 1];
        
              nextTick(function() {
                try {
                  var result = fn.apply(null, args);
                }
                catch (error) {
                  callback(error);
                }
                callback(null, result);
              });
            }
          }
        
          export function wrapAsyncNoError(fn: Function): () => void {
            return function() {
              var args = [];
              for (var i = 0; i < arguments.length - 1; i++) {
                args.push(arguments[i]);
              }
              var callback = arguments[arguments.length - 1];
        
              nextTick(function() {
                try {
                  var result = fn.apply(null, args);
                }
                catch (error) {
                  callback(error);
                }
                callback(result);
              });
            }
          }
        
        }
      • def.d.ts
        declare module noapi {
        
          export interface RequireFunction {
            (id: string): any;
            resolve(id: string): string;
            cache: any;
            extensions: any;
            main: any;
          }
        
          export interface Global {
            module: Module;
            process: Process;
            require: RequireFunction;
            exports?: any;
            __filename?: string;
            __dirname?: string;
            console?: { log: Function; };
          }
        
          export interface ErrnoError extends Error {
          }
        
          export interface Buffer {
            [index: number]: number;
            write(string: string, offset?: number, length?: number, encoding?: string): number;
            toString(encoding?: string, start?: number, end?: number): string;
            toJSON(): any;
            length: number;
            copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
            slice(start?: number, end?: number): Buffer;
            readUInt8(offset: number, noAsset?: boolean): number;
            readUInt16LE(offset: number, noAssert?: boolean): number;
            readUInt16BE(offset: number, noAssert?: boolean): number;
            readUInt32LE(offset: number, noAssert?: boolean): number;
            readUInt32BE(offset: number, noAssert?: boolean): number;
            readInt8(offset: number, noAssert?: boolean): number;
            readInt16LE(offset: number, noAssert?: boolean): number;
            readInt16BE(offset: number, noAssert?: boolean): number;
            readInt32LE(offset: number, noAssert?: boolean): number;
            readInt32BE(offset: number, noAssert?: boolean): number;
            readFloatLE(offset: number, noAssert?: boolean): number;
            readFloatBE(offset: number, noAssert?: boolean): number;
            readDoubleLE(offset: number, noAssert?: boolean): number;
            readDoubleBE(offset: number, noAssert?: boolean): number;
            writeUInt8(value: number, offset: number, noAssert?: boolean): void;
            writeUInt16LE(value: number, offset: number, noAssert?: boolean): void;
            writeUInt16BE(value: number, offset: number, noAssert?: boolean): void;
            writeUInt32LE(value: number, offset: number, noAssert?: boolean): void;
            writeUInt32BE(value: number, offset: number, noAssert?: boolean): void;
            writeInt8(value: number, offset: number, noAssert?: boolean): void;
            writeInt16LE(value: number, offset: number, noAssert?: boolean): void;
            writeInt16BE(value: number, offset: number, noAssert?: boolean): void;
            writeInt32LE(value: number, offset: number, noAssert?: boolean): void;
            writeInt32BE(value: number, offset: number, noAssert?: boolean): void;
            writeFloatLE(value: number, offset: number, noAssert?: boolean): void;
            writeFloatBE(value: number, offset: number, noAssert?: boolean): void;
            writeDoubleLE(value: number, offset: number, noAssert?: boolean): void;
            writeDoubleBE(value: number, offset: number, noAssert?: boolean): void;
            fill(value: any, offset?: number, end?: number): void;
          }
        
        }
      • events.d.ts
        declare module noapi {
        
          export interface EventEmitter {
            //static listenerCount(emitter: EventEmitter, event: string): number;
        
            addListener(event: string, listener: Function): EventEmitter;
        
            on(event: string, listener: Function): EventEmitter;
        
            once(event: string, listener: Function): EventEmitter;
        
            removeListener(event: string, listener: Function): EventEmitter;
        
            removeAllListeners(event?: string): EventEmitter;
        
            setMaxListeners(n: number): void;
        
            listeners(event: string): Function[];
        
            emit(event: string, ...args: any[]): boolean;
        
          }
        
        }
      • events.ts
        module noapi {
        
          export function createEventEmitter(): EventEmitter {
        
            var _listeners: { [eventKey: string]: Function[]; } = {};
        
            var result = {
              addListener, removeListener, removeAllListeners,
              on, once,
              setMaxListeners,
              listeners,
              emit
            };
            return result;
        
            function addListener(event: string, listener: Function): EventEmitter {
              var key = '*' + event;
              var list = _listeners[key] || (this._listeners[key] = []);
              list.push(listener);
              return result;
            }
        
            function removeListener(event: string, listener: Function): EventEmitter {
              var key = '*' + event;
              var list = _listeners[key];
              if (list) {
                for (var i = 0; i < list.length; i++) {
                  if (list[i] === listener) {
                    list.splice(i, 1);
                    break;
                  }
                }
              }
              return result;
            }
        
            function removeAllListeners(event?: string): EventEmitter {
              var key = '*' + event;
              delete _listeners[key];
              return result;
            }
        
            function setMaxListeners(n: number): void {
              // too complicated for now, ignore
            }
        
            function listeners(event: string): Function[] {
              var key = '*' + event;
              var list = _listeners[key];
              if (list)
                return list.slice(0);
              else
                return [];
            }
        
            function emit(event: string, ...args: any[]): boolean {
              var key = '*' + event;
              var list = _listeners[key];
              if (!list) return false;
              for (var i = 0; i < list.length; i++) {
                var f = list[i];
                f.apply(null, args);
              }
              return true;
            }
        
            function on(event: string, listener: Function): EventEmitter {
              return addListener(event, listener);
            }
        
            function once(event: string, listener: Function): EventEmitter {
              return on(event, listener);
            }
        
          }
        
        }
      • fs.d.ts
        declare module noapi {
        
          export interface FS {
        
            rename(oldPath: string, newPath: string, callback?: (err?: ErrnoError) => void): void;
            renameSync(oldPath: string, newPath: string): void;
        
        
            truncate(path: string, callback?: (err?: ErrnoError) => void): void;
            truncate(path: string, len: number, callback?: (err?: ErrnoError) => void): void;
            truncateSync(path: string, len?: number): void;
        
            ftruncate(fd: number, callback?: (err?: ErrnoError) => void): void;
            ftruncate(fd: number, len: number, callback?: (err?: ErrnoError) => void): void;
            ftruncateSync(fd: number, len?: number): void;
        
        
            chown(path: string, uid: number, gid: number, callback?: (err?: ErrnoError) => void): void;
            chownSync(path: string, uid: number, gid: number): void;
        
            fchown(fd: number, uid: number, gid: number, callback?: (err?: ErrnoError) => void): void;
            fchownSync(fd: number, uid: number, gid: number): void;
        
            lchown(path: string, uid: number, gid: number, callback?: (err?: ErrnoError) => void): void;
            lchownSync(path: string, uid: number, gid: number): void;
        
        
            chmod(path: string, mode: number, callback?: (err?: ErrnoError) => void): void;
            chmod(path: string, mode: string, callback?: (err?: ErrnoError) => void): void;
            chmodSync(path: string, mode: number): void;
            chmodSync(path: string, mode: string): void;
        
            fchmod(fd: number, mode: number, callback?: (err?: ErrnoError) => void): void;
            fchmod(fd: number, mode: string, callback?: (err?: ErrnoError) => void): void;
            fchmodSync(fd: number, mode: number): void;
            fchmodSync(fd: number, mode: string): void;
        
            lchmod(path: string, mode: number, callback?: (err?: ErrnoError) => void): void;
            lchmod(path: string, mode: string, callback?: (err?: ErrnoError) => void): void;
            lchmodSync(path: string, mode: number): void;
            lchmodSync(path: string, mode: string): void;
        
        
            stat(path: string, callback?: (err: ErrnoError, stats: Stats) => any): void;
            lstat(path: string, callback?: (err: ErrnoError, stats: Stats) => any): void;
            fstat(fd: number, callback?: (err: ErrnoError, stats: Stats) => any): void;
            statSync(path: string): Stats;
            lstatSync(path: string): Stats;
            fstatSync(fd: number): Stats;
        
        
            link(srcpath: string, dstpath: string, callback?: (err?: ErrnoError) => void): void;
            linkSync(srcpath: string, dstpath: string): void;
        
            symlink(srcpath: string, dstpath: string, type?: string, callback?: (err?: ErrnoError) => void): void;
            symlinkSync(srcpath: string, dstpath: string, type?: string): void;
        
        
            readlink(path: string, callback?: (err: ErrnoError, linkString: string) => any): void;
            readlinkSync(path: string): string;
        
        
            realpath(path: string, callback?: (err: ErrnoError, resolvedPath: string) => any): void;
            realpath(path: string, cache: { [path: string]: string }, callback: (err: ErrnoError, resolvedPath: string) => any): void;
            realpathSync(path: string, cache?: { [path: string]: string }): string;
        
        
            unlink(path: string, callback?: (err?: ErrnoError) => void): void;
            unlinkSync(path: string): void;
        
        
            rmdir(path: string, callback?: (err?: ErrnoError) => void): void;
            rmdirSync(path: string): void;
        
        
            mkdir(path: string, callback?: (err?: ErrnoError) => void): void;
            mkdir(path: string, mode: number, callback?: (err?: ErrnoError) => void): void;
            mkdir(path: string, mode: string, callback?: (err?: ErrnoError) => void): void;
            mkdirSync(path: string, mode?: number): void;
            mkdirSync(path: string, mode?: string): void;
        
        
            readdir(path: string, callback?: (err: ErrnoError, files: string[]) => void): void;
            readdirSync(path: string): string[];
        
        
            close(fd: number, callback?: (err?: ErrnoError) => void): void;
            closeSync(fd: number): void;
        
        
            open(path: string, flags: string, callback?: (err: ErrnoError, fd: number) => any): void;
            open(path: string, flags: string, mode: number, callback?: (err: ErrnoError, fd: number) => any): void;
            open(path: string, flags: string, mode: string, callback?: (err: ErrnoError, fd: number) => any): void;
            openSync(path: string, flags: string, mode?: number): number;
            openSync(path: string, flags: string, mode?: string): number;
        
        
            utimes(path: string, atime: number, mtime: number, callback?: (err?: ErrnoError) => void): void;
            utimes(path: string, atime: Date, mtime: Date, callback?: (err?: ErrnoError) => void): void;
            utimesSync(path: string, atime: number, mtime: number): void;
            utimesSync(path: string, atime: Date, mtime: Date): void;
        
            futimes(fd: number, atime: number, mtime: number, callback?: (err?: ErrnoError) => void): void;
            futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: ErrnoError) => void): void;
            futimesSync(fd: number, atime: number, mtime: number): void;
            futimesSync(fd: number, atime: Date, mtime: Date): void;
        
        
            fsync(fd: number, callback?: (err?: ErrnoError) => void): void;
            fsyncSync(fd: number): void;
        
        
            read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: ErrnoError, bytesRead: number, buffer: Buffer) => void): void;
            readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number;
        
            readFile(filename: string, encoding: string, callback: (err: ErrnoError, data: string) => void): void;
            readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: ErrnoError, data: string) => void): void;
            readFile(filename: string, options: { flag?: string; }, callback: (err: ErrnoError, data: Buffer) => void): void;
            readFile(filename: string, callback: (err: ErrnoError, data: Buffer) => void): void;
            readFileSync(filename: string, encoding: string): string;
            readFileSync(filename: string, options: { encoding: string; flag?: string; }): string;
            readFileSync(filename: string, options?: { flag?: string; }): Buffer;
        
            write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: ErrnoError, written: number, buffer: Buffer) => void): void;
            writeSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number;
        
            writeFile(filename: string, data: any, callback?: (err: ErrnoError) => void): void;
            writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: ErrnoError) => void): void;
            writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: ErrnoError) => void): void;
            writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void;
            writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void;
        
        
            appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: ErrnoError) => void): void;
            appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: ErrnoError) => void): void;
            appendFile(filename: string, data: any, callback?: (err: ErrnoError) => void): void;
            appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void;
            appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void;
        
        
            watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void;
            watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void;
        
            unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void;
        
            watch(filename: string, listener?: (event: string, filename: string) => any): Watcher;
            watch(filename: string, options: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): Watcher;
        
        
            exists(path: string, callback?: (exists: boolean) => void): void;
            existsSync(path: string): boolean;
        
        
            createReadStream(path: string, options?: { flags?: string; encoding?: string; fd?: string; mode?: number; bufferSize?: number; }): ReadStream;
            createReadStream(path: string, options?: { flags?: string; encoding?: string; fd?: string; mode?: string; bufferSize?: number; }): ReadStream;
        
            createWriteStream(path: string, options?: { flags?: string; encoding?: string; string?: string; }): WriteStream;
        
          }
        
          export interface Stats {
            isFile(): boolean;
            isDirectory(): boolean;
            isBlockDevice(): boolean;
            isCharacterDevice(): boolean;
            isSymbolicLink(): boolean;
            isFIFO(): boolean;
            isSocket(): boolean;
            dev: number;
            ino: number;
            mode: number;
            nlink: number;
            uid: number;
            gid: number;
            rdev: number;
            size: number;
            blksize: number;
            blocks: number;
            atime: Date;
            mtime: Date;
            ctime: Date;
          }
        
          export interface Watcher extends EventEmitter {
            close(): void;
          }
        
          export interface ReadStream extends Readable {
            close(): void;
          }
        
          export interface WriteStream extends Writable {
            close(): void;
          }
        
        }
      • fs.ts
        module noapi {
        
          export function createFS(drive: persistence.Drive, modules: { path: Path; }): FS {
        
            var fs: FS = {
        
              renameSync: renameSync,
              rename: wrapAsync(renameSync),
        
              statSync: statSync,
              lstatSync: statSync,
              stat: wrapAsync(statSync),
              lstat: wrapAsync(statSync),
              fstat: null, fstatSync: null, // TODO: implement fstat using fstab
        
        
              existsSync: existsSync,
              exists: wrapAsyncNoError(existsSync),
        
              openSync: openSync,
              open: wrapAsync(openSync),
              close: null, closeSync: null,
              fsync: null, fsyncSync: null,
        
        
        
              readFileSync: readFileSync,
              readFile: wrapAsync(readFileSync),
              createReadStream: null,
        
              writeFileSync: writeFileSync,
              writeFile: wrapAsync(writeFileSync),
              appendFile: null, appendFileSync: null,
              createWriteStream: null,
        
        
              readSync: readSync,
              read: wrapAsync(readSync),
        
              writeSync: writeSync,
              write: wrapAsync(writeSync),
        
        
        
              truncate: null, truncateSync: null,
              ftruncate: null, ftruncateSync: null,
        
              chown: null, chownSync: null,
              fchown: null, fchownSync: null,
              lchown: null, lchownSync: null,
        
              chmod: null, chmodSync: null,
              fchmod: null, fchmodSync: null,
              lchmod: null, lchmodSync: null,
        
              link: null, linkSync: null,
              readlink: null, readlinkSync: null,
        
              symlink: null, symlinkSync: null,
              unlink: null, unlinkSync: null,
        
              realpath: null, realpathSync: null,
        
              mkdir: wrapAsync(mkdirSync), mkdirSync: mkdirSync,
              rmdir: null, rmdirSync: null,
        
              readdir: null, readdirSync: null,
        
              utimes: null, utimesSync: null,
              futimes: null, futimesSync: null,
        
        
              watch: null, watchFile: null, unwatchFile: null
            };
        
            return fs;
        
            function existsSync(file: string): boolean {
              var content = drive.read(file);
              if (content || (content !== null && typeof content === 'undefined'))
                return true;
        
              var files = drive.files();
              var normPath = modules.path.normalize(file);
              if (normPath.slice(-1) !== '/') normPath += '/';
              var leadMatch = getStartMatcher(file);
              for (var i = 0; i < files.length; i++) {
                if (leadMatch(files[i])) return;
              }
        
              return false;
            }
        
            function mkdirSync(path: string, mode?: any): void {
              var normPath = modules.path.normalize(path);
              if (normPath.slice(-1) !== '/') normPath += '/';
        
              if (existsSync(path)) throw new Error('Directory \'' + path + '\'');
        
              drive.write(normPath, '');
            }
        
            function renameSync(oldPath: string, newPath: string): void {
        
              var oldContent = drive.read(oldPath);
              if (oldContent !== null) {
                // TODO: check if directory is in the way
                // if (nofs
                drive.write(newPath, oldContent);
                drive.write(oldPath, null);
                return;
              }
        
              if (drive.read(newPath) !== null) {
                // node actually reports oldPath here, but let's be reasonable
                throw new Error('ENOTDIR, not a directory \'' + newPath + '\'');
              }
        
              var norm_oldPath = modules.path.resolve(oldPath);
              if (norm_oldPath === '/')
                throw new Error('EBUSY, resource busy or locked \'/\'');
              else
                norm_oldPath += '/';
        
              var norm_newPath = modules.path.resolve(newPath);
              if (norm_newPath === '/')
                throw new Error('EBUSY, resource busy or locked \'/\'');
              else
                norm_newPath += '/';
        
        
              var files = drive.files();
        
        
              var startAsOld = getStartMatcher(norm_oldPath);
        
              for (var i = 0; i < files.length; i++) {
                var fi = files[i];
                if (startAsOld(fi)) {
                  var oldContent = drive.read(fi);
                  var restPath = fi.slice(norm_newPath.length);
                  var newFiPath = norm_newPath + restPath;
                  drive.write(newFiPath, oldContent);
                  drive.write(newFiPath, null);
                }
              }
        
            }
        
        
        
            function statSync(path: string): Stats {
              // TODO: implement
              throw new Error('Not implemented');
            }
            /*
              stat(path: string, callback?: (err: no_ErrnoError, stats: nofs_Stats) => any): void;
              lstat(path: string, callback?: (err: no_ErrnoError, stats: nofs_Stats) => any): void;
              fstat(fd: number, callback?: (err: no_ErrnoError, stats: nofs_Stats) => any): void;
              statSync(path: string): nofs_Stats;
              lstatSync(path: string): nofs_Stats;
              fstatSync(fd: number): nofs_Stats;
            */
        
        
        
            function readFileSync(filename: string, options?: { encoding?: string; flag?: string; }): any {
        
              // TODO: handle encoding and other
              return drive.read(filename);
        
            }
        
            function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number {
        
              // TODO: consider also std handles
              //var path = nofs_fdtable()[fd];
        
              throw new Error('Buffer-aware API fs.readSync is not implemented.');
            }
        
        
        
            function writeFileSync(filename: string, content: string) {
        
              drive.write(filename, content);
        
            }
        
        
            function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number {
        
              if (fd === 1) {
                if (typeof console !== 'undefined')
                  console.log(buffer);
        
                return length;
              }
        
              var path = get_fdtable()[fd];
        
              throw new Error('Buffer-aware API fs.writeSync is not implemented.');
            }
        
        
        
        
            function openSync(path: string, flags: string, mode?: number): number;
            function openSync(path: string, flags: string, mode?: string): number;
            function openSync(path: string, flags?: string, mode?: any): number {
        
              var fdtable = get_fdtable();
        
              for (var fd in fdtable) {
                var fpath = fdtable[fd];
                if (fpath === path) {
                  return Number(fd);
                }
              }
        
              var newFD = _fdbase_++;
              fdtable[newFD] = path;
              return newFD;
            }
        
            var _fdbase_;
            var _fdtable_: string[];
        
            function get_fdtable() {
              if (!_fdtable_) {
                _fdtable_ = [];
                _fdbase_ = 34957346;
              }
              return _fdtable_;
            }
          }
        
        
        
        
        
          function getStartMatcher(oldPath: string) {
        
            if (!oldPath) return (txt: string) => !txt;
        
            return (txt: string) => {
              if (!txt) return false;
              if (txt.length < oldPath.length) return false;
              return txt.slice(0, oldPath.length) === oldPath;
            };
          }
        
        
        }
      • module.d.ts
        declare module noapi {
        
          export interface Module {
            exports: any;
            require(id: string): any;
            id: string;
            filename: string;
            loaded: boolean;
            parent: any;
            children: any[];
          }
        
        }
      • module.ts
        module noapi {
        
          export function createModule(
            id: string,
            filename: string,
            parent: any,
            requireForModule: (moduleName: string) => any): Module {
        
            var module: Module = {
              exports: {},
              id,
              filename,
              loaded: false,
              parent,
              children: [],
              require
            };
        
            return module;
        
            var _moduleCache: any;
            var _resolveCache: any;
        
            function require(moduleName: string): any {
              var key = '*' + moduleName;
              if (_moduleCache && key in _moduleCache)
                return _moduleCache[key];
        
              var mod = requireForModule(moduleName);
              (_moduleCache || (_moduleCache = {}))[key] = mod;
              return mod;
            }
        
          }
        
        }
      • os.d.ts
        declare module noapi {
        
          export interface OS {
            tmpdir(): string;
            hostname(): string;
            type(): string;
            platform(): string;
            arch(): string;
            release(): string;
            uptime(): number;
            loadavg(): number[];
            totalmem(): number;
            freemem(): number;
            cpus(): { model: string; speed: number; times: { user: number; nice: number; sys: number; idle: number; irq?: number; }; }[];
            networkInterfaces(): any;
            EOL: string;
          }
        
        }
      • os.ts
        module noapi {
        
          export function createOS(global: { process: Process; }) {
        
            return {
              EOL: '\n',
              tmpdir: () => '/.tmp',
              hostname: () => 'localhost',
              type: () => 'Linux',
              arch: () => global.process.arch,
              platform: () => global.process.platform,
              release: () => '3.16.0-38-generic',
              uptime: () => global.process.uptime(),
              loadavg: () => [0.7275390625, 0.65576171875, 0.4658203125],
              totalmem: () => 3680739328 + ((Math.random() * 1000) | 0),
              freemem: () => 2344873984 - ((Math.random() * 1000) | 0),
              cpus: () => [
                { model: 'AMD A4-1250 APU with Radeon(TM) HD Graphics', speed: 800, times: { user: 8058000, nice: 29600, sys: 1079400, idle: 128185400, irq: 0 } },
                { model: 'AMD A4-1250 APU with Radeon(TM) HD Graphics', speed: 800, times: { user: 7779400, nice: 33000, sys: 1069200, idle: 127970900, irq: 0 } }
              ],
              networkInterfaces: () => {
                return {
                  lo: [
                    { address: '127.0.0.1', family: 'IPv4', internal: true },
                    { address: '::1', family: 'IPv6', internal: true }
                  ],
                  wlan0: [
                    { address: '192.168.1.3', family: 'IPv4', internal: false },
                    { address: 'fe80::8256:f2ff:fe04:3d29', family: 'IPv6', internal: false }
                  ]
                }
              }
            };
          }
        
        }
      • path.d.ts
        declare module noapi {
        
          export interface Path {
        
            normalize(p: string): string;
            join(...paths: any[]): string;
            resolve(...pathSegments: any[]): string;
            isAbsolute(p: string): boolean;
            relative(from: string, to: string): string;
            dirname(p: string): string;
            basename(p: string, ext?: string): string;
            extname(p: string): string;
            sep: string;
            delimiter: string;
        
            // new apis? definitely not in v0.10.38
            parse?(p: string): { root: string; dir: string; base: string; ext: string; name: string; };
            format?(pP: { root: string; dir: string; base: string; ext: string; name: string; }): string;
        
          }
        
        }
      • path.ts
        module noapi {
        
          export function createPath(global: { process: Process; }): Path {
        
            var result: Path = {
              basename, extname,
              dirname,
              isAbsolute,
              normalize,
              join,
              relative, resolve,
              sep: '/',
              delimiter: ':'
            };
            return result;
        
            function isAbsolute(p: string): boolean {
              return /^\//.test(p);
            }
        
            function extname(p: string): string {
        
              var base = basename(p);
              var lastDot = base.lastIndexOf('.');
              if (lastDot >= 0)
                return base.slice(lastDot);
              else
                return '';
        
            }
        
            function join(...paths: any[]): string {
              return join_core(paths);
            }
        
            function join_core(paths: any[]): string {
              var parts: string[] = [];
              var trailSlash = false;
              for (var i = 0; i < paths.length; i++) {
                var part = paths[i];
                if (!part) continue;
        
                if (parts.length) {
                  var wlead = part;
                  part = part.replace(/^\/*/, '');
                  if (!part) continue;
                  if (wlead.length > part.length)
                    parts.push('');
                }
                var wtrail = part;
                part = part.replace(/\/*$/, '');
                if (!part) continue;
                parts.push(part);
        
                trailSlash = wtrail.length > part.length;
              }
        
              if (trailSlash)
                parts.push('/');
        
              return parts.join('/');
            }
        
            function relative(from: string, to: string): string {
              throw new Error('path/relative is not implemented');
            }
        
            function resolve(...pathSegments: any[]): string {
        
              var res = join_core(pathSegments);
        
              if (!/^\//.test(res))
                res = global.process.cwd() + res;
        
              return res;
            }
          }
        
          export function basename(p: string, ext?: string): string {
        
            p = normalize(p);
            if (p === '/')
              return '';
        
            var result: string;
        
            var lastSlash = p.lastIndexOf('/');
            if (lastSlash === p.length - 1) {
              var prevSlash = p.lastIndexOf('/', lastSlash - 1);
              if (prevSlash < 0)
                prevSlash = 0;
              result = p.slice(prevSlash + 1, lastSlash);
            }
            else {
              result = p.slice(lastSlash + 1);
            }
        
            if (ext && result.length >= ext.length && result.slice(-ext.length) === ext)
              result = result.slice(0, result.length - ext.length);
          }
        
          export function dirname(p: string): string {
            var p = normalize(p);
            if (p === '/') return '/';
            var lastSlash = p.lastIndexOf('/');
            if (lastSlash === p.length - 1)
              lastSlash = p.lastIndexOf('/', lastSlash - 1);
            return p.slice(0, lastSlash + 1);
          }
        
          export function normalize(p: string): string {
            return p;
          }
        
        }
      • process.d.ts
        declare module noapi {
        
          export interface Process extends EventEmitter {
        
            stdout: WritableStream;
            stderr: WritableStream;
            stdin: ReadableStream;
        
            argv: string[];
        
            execPath: string;
        
            abort(): void;
        
            chdir(directory: string): void;
            cwd(): string;
        
            env: any;
        
            exit(code?: number): void;
        
            getgid(): number;
            setgid(id: number): void;
            setgid(id: string): void;
        
            getuid(): number;
            setuid(id: number): void;
            setuid(id: string): void;
        
            version: string;
            versions: {
              http_parser: string;
              node: string;
              v8: string;
              ares: string;
              uv: string;
              zlib: string;
              openssl: string;
            };
        
            config: {
              target_defaults: {
                cflags: any[];
                default_configuration: string;
                defines: string[];
                include_dirs: string[];
                libraries: string[];
              };
              variables: {
                clang?: number;
                host_arch?: string;
                target_arch?: string;
                visibility?: string;
              };
            };
        
            kill(pid: number, signal?: string): void;
        
            pid: number;
        
            title: string;
        
            arch: string;
            platform: string;
        
            memoryUsage(): { rss: number; heapTotal: number; heapUsed: number; };
        
            nextTick(callback: Function): void;
        
            umask(mask?: number): number;
        
            uptime(): number;
            hrtime(time?: number[]): number[];
        
            // Worker
            send?(message: any, sendHandle?: any): void;
          }
        }
      • process.ts
        module noapi {
        
          export function createProcess(
            modules: { fs: FS; path: Path; },
            options: {
              argv: string[];
              cwd: string;
              env: any;
            }): Process {
        
            var evt = createEventEmitter();
        
            return {
              abort, exit, kill,
              nextTick,
              chdir, cwd,
        
              title: 'node',
              arch: 'ia32',
              platform: 'linux',
              execPath: '/usr/bin/nodejs',
        
              getgid, setgid, getuid, setuid,
        
              stdout: load_stdout(), stderr: load_stderr(), stdin: load_stdin(),
        
              memoryUsage,
        
              uptime: load_uptime(),
              hrtime: <any>function() { throw new Error('High resultion time is not implemenetd yet.'); },
        
              pid: load_pid(),
              umask: load_umask(),
              config: load_config(),
              versions: load_versions(),
              version: load_versions().node,
        
              argv: options.argv,
              env: options.env,
        
              addListener: evt.addListener,
              on: evt.on,
              once: evt.once,
              removeListener: evt.removeListener,
              removeAllListeners: evt.removeAllListeners,
              setMaxListeners: evt.setMaxListeners,
              listeners: evt.listeners,
              emit: evt.emit
        
            };
        
            function abort() {
            }
        
            function exit(code?: number) {
            }
        
            function kill(pid: number, signal?: string) {
              // when we emulate processes, implement process termination
            }
        
        
        
        
            function chdir(directory: string) {
              var dirStat = modules.fs.statSync(directory);
        
              if (dirStat && dirStat.isDirectory()) {
                if (directory !== cwd()) {
                  var normDirectory = modules.path.normalize(directory);
                  if (cwd() !== normDirectory) {
                    options.cwd = normDirectory;
                  }
                }
              }
              else {
                // TODO: throw a node-shaped error instead
                throw new Error('ENOENT, no such file or directory');
              }
            }
        
            function cwd(): string {
              return options.cwd;
            }
        
        
        
            function getgid() {
              // taken from node running on ubuntu
              return 1000;
            }
        
            function setgid(id: any) {
              // TODO: use node-shaped error
              throw new Error('EPERM, Operation not permitted');
            }
        
            function getuid(): number {
              // taken from node running on ubuntu
              return 1000;
            }
        
            function setuid(id: any) {
              // TODO: use node-shaped error
              throw new Error('EPERM, Operation not permitted');
            }
        
        
        
            function load_uptime() {
              var _uptime_start_ = typeof Date.now === 'function' ? Date.now() : +(new Date());
              return uptime;
        
              function uptime() {
                var now = typeof Date.now === 'function' ? Date.now() : +(new Date());
                return now - _uptime_start_;
              }
            }
        
        
        
            function load_stdout() {
              return <WritableStream>{
              };
            }
        
            function load_stderr() {
              return <WritableStream>{
              };
            }
        
            function load_stdin() {
              return <ReadableStream>{
              };
            }
        
        
        
            function memoryUsage(): { rss: number; heapTotal: number; heapUsed: number; } {
              return {
                rss: 13225984 + ((Math.random() * 3000) | 0),
                heapTotal: 7130752 + ((Math.random() * 3000) | 0),
                heapUsed: 2449612 + ((Math.random() * 3000) | 0)
              };
            }
        
        
        
            function load_pid() {
              return 32754 + ((Math.random() * 500) | 0);
            }
        
            function load_umask() {
              var _umask_;
              return umask;
        
              function umask(mask?: number): number {
                if (typeof _umask_ !== 'number') {
                  _umask_ = 2;
                }
        
                if (typeof mask === 'number') {
                  var res = _umask_;
                  _umask_ = mask;
                  return res;
                }
        
                return _umask_;
              }
            }
        
            function load_versions() {
              // real node running on ubuntu as of Friday 22 of May 2015
              // (these might not be properly implemented when hosted in browser)
              return {
                http_parser: '1.0',
                node: '0.10.38',
                v8: '3.14.5.9',
                ares: '1.9.0-DEV',
                uv: '0.10.36',
                zlib: '1.2.8',
                modules: '11',
                openssl: '1.0.1m'
              };
            }
        
        
            function load_config() {
              return {
                target_defaults:
                {
                  cflags: [],
                  default_configuration: 'Release',
                  defines: [],
                  include_dirs: [],
                  libraries: []
                },
                variables:
                {
                  clang: 0,
                  gcc_version: 48,
                  host_arch: 'ia32',
                  node_install_npm: true,
                  node_prefix: '/usr',
                  node_shared_cares: false,
                  node_shared_http_parser: false,
                  node_shared_libuv: false,
                  node_shared_openssl: false,
                  node_shared_v8: false,
                  node_shared_zlib: false,
                  node_tag: '',
                  node_unsafe_optimizations: 0,
                  node_use_dtrace: false,
                  node_use_etw: false,
                  node_use_openssl: true,
                  node_use_perfctr: false,
                  node_use_systemtap: false,
                  openssl_no_asm: 0,
                  python: '/usr/bin/python',
                  target_arch: 'ia32',
                  v8_enable_gdbjit: 0,
                  v8_no_strict_aliasing: 1,
                  v8_use_snapshot: false,
                  want_separate_host_toolset: 0
                }
              };
            }
          }
        }
      • stream.d.ts
        declare module noapi {
        
          export interface ReadableStream extends EventEmitter {
            readable: boolean;
            read(size?: number): string|Buffer;
            setEncoding(encoding: string): void;
            pause(): void;
            resume(): void;
            pipe<T extends WritableStream>(destination: T, options?: { end?: boolean; }): T;
            unpipe<T extends WritableStream>(destination?: T): void;
            unshift(chunk: string): void;
            unshift(chunk: Buffer): void;
            wrap(oldStream: ReadableStream): ReadableStream;
          }
        
          export interface WritableStream extends EventEmitter {
            writable: boolean;
            write(buffer: Buffer, cb?: Function): boolean;
            write(str: string, cb?: Function): boolean;
            write(str: string, encoding?: string, cb?: Function): boolean;
            end(): void;
            end(buffer: Buffer, cb?: Function): void;
            end(str: string, cb?: Function): void;
            end(str: string, encoding?: string, cb?: Function): void
          }
        
          export interface Stream extends EventEmitter {
            pipe<T extends WritableStream>(destination: T, options?: { end?: boolean; }): T;
          }
        
          export interface ReadableOptions {
            highWaterMark?: number;
            encoding?: string;
            objectMode?: boolean;
          }
        
          export interface Readable extends EventEmitter, ReadableStream {
            readable: boolean;
            //constructor(opts?: ReadableOptions)
            _read(size: number): void;
        
            read(size?: number): string|Buffer;
        
            setEncoding(encoding: string): void;
        
            pause(): void;
        
            resume(): void;
        
            pipe<T extends WritableStream>(destination: T, options?: { end?: boolean; }): T;
        
            unpipe(destination?: WritableStream): void;
        
            unshift(chunk: string): void;
        
            unshift(chunk: Buffer): void;
        
            wrap(oldStream: ReadableStream): ReadableStream;
        
            push(chunk: any, encoding?: string): boolean;
        
          }
        
          export interface WritableOptions {
            highWaterMark?: number;
            decodeStrings?: boolean;
          }
        
          export interface Writable extends EventEmitter, WritableStream {
            writable: boolean;
            // constructor(opts?: WritableOptions)
        
            _write(data: Buffer, encoding: string, callback: Function): void;
        
            _write(data: string, encoding: string, callback: Function): void;
        
            write(buffer: Buffer, cb?: Function): boolean;
        
            write(str: string, cb?: Function): boolean;
        
            write(str: string, encoding?: string, cb?: Function): boolean;
        
            end(): void;
        
            end(buffer: Buffer, cb?: Function): void;
        
            end(str: string, cb?: Function): void;
        
            end(str: string, encoding?: string, cb?: Function): void;
        
          }
        
          export interface DuplexOptions extends ReadableOptions, WritableOptions {
            allowHalfOpen?: boolean;
          }
        
          /**
           * Note: Duplex extends both Readable and Writable.
           */
          export interface Duplex extends Readable {
            writable: boolean;
            // constructor(opts?: DuplexOptions);
        
            _write(data: Buffer, encoding: string, callback: Function);
            _write(data: string, encoding: string, callback: Function): void;
        
            write(buffer: Buffer, cb?: Function);
            write(str: string, cb?: Function);
            write(str: string, encoding?: string, cb?: Function): boolean;
        
            end(): void;
            end(buffer: Buffer, cb?: Function): void;
            end(str: string, cb?: Function): void;
            end(str: string, encoding?: string, cb?: Function): void;
        
          }
        
          export interface TransformOptions extends ReadableOptions, WritableOptions { }
        
          /**
             * Note: Transform lacks the _read and _write methods of Readable/Writable.
             */
          interface Transform extends EventEmitter {
            readable: boolean;
            writable: boolean;
            // constructor(opts?: TransformOptions)
        
            _transform(chunk: Buffer, encoding: string, callback: Function): void;
            _transform(chunk: string, encoding: string, callback: Function): void;
        
            _flush(callback: Function): void;
        
            read(size?: number): any;
        
            setEncoding(encoding: string): void;
        
            pause(): void;
        
            resume(): void;
        
            pipe<T extends WritableStream>(destination: T, options?: { end?: boolean; }): T;
        
            unpipe(destination?: WritableStream): void;
        
            unshift(chunk: string): void;
        
            unshift(chunk: Buffer): void;
        
            wrap(oldStream: ReadableStream): ReadableStream;
        
            push(chunk: any, encoding?: string): boolean;
        
            write(buffer: Buffer, cb?: Function): boolean;
            write(str: string, cb?: Function): boolean;
            write(str: string, encoding?: string, cb?: Function): boolean;
        
            end(): void;
            end(buffer: Buffer, cb?: Function): void;
            end(str: string, cb?: Function): void;
            end(str: string, encoding?: string, cb?: Function): void;
        
          }
        }
    • nobrowser
      • HostedWindow.ts
        module nobrowser {
        
          export class HostedWindow {
        
            constructor(private _window: Window, private _drive: persistence.Drive) {
              
        
            }
        
          }
        
        }
      • overrideLocalStorage.ts
        module nobrowser {
        
          export function overrideLocalStorage(drive: persistence.Drive, cachePath: string) {
        
            var cachePathDir = cachePath + (cachePath.slice(-1) === '/' ? '' : '/');
        
            return LocalStorageOverride;
        
            class LocalStorageOverride {
        
              private _keys: string[] = null;
              length = 0;
        
              constructor() {
                var files = drive.files();
                for (var i = 0; i < files.length; i++) {
                  var f = files[i];
                  if (f.length > cachePathDir.length && f.slice(0, cachePathDir.length) === cachePathDir)
                    this._keys.push(f.slice(cachePathDir.length));
                }
                this.length = this._keys.length;
              }
        
              clear() {
                for (var i = 0; i < this._keys.length; i++) {
                  var f = cachePathDir + this._keys[i];
                  drive.write(f, null);
                }
                this._keys = [];
              }
        
            	key(index: number) {
                return this._keys[index];
              }
        
            	getItem(key: string): string {
                var keypath = cachePathDir + key;
                return drive.read(keypath);
              }
        
            	setItem(key: string, value: string): void {
                var keypath = cachePathDir + key;
                drive.write(keypath, value);
                for (var i = 0; i < this._keys.length; i++) {
                  if (key === this._keys[i]) return;
                }
                this._keys.push(key);
                this.length++;
              }
        
            	removeItem(key: string): void {
                var keypath = cachePathDir + key;
                for (var i = 0; i < this._keys.length; i++) {
                  if (key === this._keys[i]) {
                    this._keys.splice(i, 1);
                    this.length++;
                    drive.write(keypath, null);
                    return;
                  }
                }
              }
            }
        
          }
        }
      • overrideXMLHttpRequest.ts
        module nobrowser {
        
          export function overrideXMLHttpRequest(readCache: (url: string, callback: (content: string) => void) => void) {
        
            return XMLHttpRequestOverride;
        
            // urlBase - 'https://rawgit.com/jeffpar/pcjs/master'
        
        
            class XMLHttpRequestOverride {
        
              private _url: string = null;
        
              status = 0;
              readyState = 0;
              responseText = null;
              onreadystatechange: () => void = null;
        
              open(method: string, url: string) {
                this._url = url;
              }
        
              send() {
                var completed = false;
                this.readyState = 0;
                readCache(this._url, content => {
                  this.status = 200;
                  this.readyState = 4;
                  this.responseText = content;
                  if (completed)
                    this.onreadystatechange();
                  return;
                });
        
                if (this.readyState === 4) {
                  setTimeout(() => this.onreadystatechange(), 1);
                }
        
        
              }
        
              setRequestHeader() {
              }
        
            }
          }
        
        	export module overrideXMLHttpRequest {
        
            export function withDrive(drive: persistence.Drive, cachePath: string, realXMLHttpRequest: typeof XMLHttpRequest) {
              return overrideXMLHttpRequest(
                (url, callback) => {
                  var existing = cachePath + (cachePath.slice(-1) === '/' ? '' : '/') + (url.charAt(0) === '/' ? url.slice(1) : url);
        
                  var existingContent = drive.read(existing);
                  if (existingContent) {
                    callback(existingContent);
                    return;
                  }
        
                  var xhr = new realXMLHttpRequest();
                  xhr.open('GET', url);
                  xhr.onreadystatechange = () => {
                    if (xhr.readyState === 4 && xhr.status === 200) {
                      var response = xhr.responseText || xhr.response;
                      drive.write(existing, response);
                      callback(response);
                    }
                  };
                  xhr.send();
                });
            }
        
          }
        
        }
    • Context.ts
      module isolation {
      
        export class Context {
      
          private _frame;
          private _obscureScope: any = {};
          private _disposed = false;
      
          constructor(private _window: Window) {
            this._frame = createFrame(this._window);
            defineObscureScope(this._obscureScope, this._frame.global);
            defineObscureScope(this._obscureScope, this._frame.window);
            this._obscureScope.global = void 0;
            var setGlobal = this._frame.evalFN('(function() { return function(global) { window.global = global; }; })()');
            setGlobal(this._obscureScope);
          }
      
          run(code: string, path: string, scope: any) {
            path = path || typeof path === 'string' ? path : createTimebasedPath();
            this._obscureScope.global = scope || {};
            var decoratedCode =
              'with(window.global){with(global){   ' + code +
              '\n }}  //# sourceURL=' + path;
            var result = this._frame.evalFN(decoratedCode);
            this._obscureScope.global = null;
            return result;
          }
      
          dispose() {
            if (!this._disposed) {
              document.body.removeChild(this._frame.iframe);
              this._disposed = true;
            }
          }
      
        }
      
        function createTimebasedPath() {
          var now = new Date();
          var path = now.getFullYear() +
            (now.getMonth() + 1 > 9 ? '' : '0') + now.getMonth() +
            (now.getDate() > 9 ? '' : '0') + now.getDate() + '-' +
            (now.getHours() > 9 ? '' : '0') + now.getHours() +
            (now.getMinutes() > 9 ? '' : '0') + now.getMinutes() + '-' +
            (now.getSeconds() > 9 ? '' : '0') + now.getSeconds() +
            '.' + ((now.getMilliseconds() | 0) + 1000).toString().slice(1) +
            '.js';
          return path;
        }
      
        function createFrame(window: Window) {
          var ifr = window.document.createElement('iframe');
          ifr.style.display = 'none';
          window.document.body.appendChild(ifr);
      
          var ifrwin: Window = ifr.contentWindow || (<any>ifr).window;
          var ifrdoc = ifrwin.document;
      
          if (ifrdoc.open) ifrdoc.open();
          ifrdoc.write(
            '<!' + 'doctype html' + '>' +
            '<' + 'html' + '><' + 'body' + '>' +
            '<' + 'script' + '>window.__eval_export_=function(code) { return eval(code); }</' + 'script' + '>' +
            '<' + 'body' + '></' + 'html' + '>');
          if (ifrdoc.close) ifrdoc.close();
      
          var ifrwin_eval: typeof eval = (<any>ifrwin).__eval_export_;
          try {
            delete (<any>ifrwin).__eval_export_;
          }
          catch (weirdIEFailure) {
            // no big deal if it fails
          }
      
          ifrdoc.body.innerHTML = '';
      
          return {
            document: ifrdoc,
            window: ifrwin,
            global: ifrwin_eval('this'),
            iframe: ifr,
            evalFN: ifrwin_eval
          };
        }
      
        function defineObscureScope(scope: any, pollutedGlobal: any) {
      
          var natives = defineAllowedNatives();
      
          var dummy;
      
          // normal properties
          for (var k in pollutedGlobal) {
            if (scope[k] || natives[k]) continue;
            scope[k] = dummy;
          }
      
          // non-enumerable properties directly on global
          if (Object.getOwnPropertyNames) {
            var props = Object.getOwnPropertyNames(pollutedGlobal);
            for (var i = 0; i < props.length; i++) {
              if (scope[props[i]] || natives[props[i]]) continue;
              scope[props[i]] = dummy;
            }
      
            // non-enumerable properties on global's prototype
            if (pollutedGlobal.constructor
              && pollutedGlobal.constructor.prototype
              && pollutedGlobal.constructor.prototype !== Object.prototype) {
              props = Object.getOwnPropertyNames(pollutedGlobal.constructor.prototype);
              for (var i = 0; i < props.length; i++) {
                if (scope[props[i]] || natives[props[i]]) continue;
                scope[props[i]] = dummy;
              }
            }
          }
        }
      
        var allowedNatives = null;
      
        function defineAllowedNatives() {
          return {
            setTimeout: 1, setInterval: 1, clearTimeout: 1, clearInterval: 1,
            eval: 1,
            console: 1,
            undefined: 1,
            Object: 1, Array: 1, Date: 1, Function: 1, String: 1, Boolean: 1, Number: 1,
            Infinity: 1, NaN: 1, isNaN: 1, isFinite: 1, parseInt: 1, parseFloat: 1,
            escape: 1, unescape: 1,
      
            Int32Array: 1, Int8Array: 1, Int16Array: 1,
            UInt32Array: 1, UInt8Array: 1, UInt8ClampedArray: 1, UInt16Array: 1,
            Float32Array: 1, Float64Array: 1, ArrayBuffer: 1,
      
            Math: 1, JSON: 1, RegExp: 1,
            Error: 1, SyntaxError: 1, EvalError: 1, RangeError: 1, ReferenceError: 1,
      
            toString: 1, toJSON: 1, toValue: 1,
      
            Map: 1, Promise: 1
          };
        }
      }
  • load
    • shellLoader.ts
      //declare var showCommanderInContext;
      
      function shellLoader(uniqueKey: string, document: Document, boot: shellLoader.BootModuleAPI): shellLoader.ContinueLoading {
      
        var driveMount = persistence.bootMount(uniqueKey, document);
      
        return continueLoading();
      
        function continueLoading(): shellLoader.ContinueLoading {
          driveMount = driveMount.continueLoading();
      
          boot.api.title('Loading files: ' + progressText('dom'), 0.05 + 0.8* driveMount.loadedSize/driveMount.totalSize);
          return { continueLoading, finishLoading };
        }
      
        var timings;
        var prevStage;
        var prevStageStart;
        var prevTimeText;
        function progressText(stage) {
      
          var fileText = driveMount.loadedFileCount + ' (' + driveMount.totalSize + ' total)';
      
          var now = +new Date();
      
          if (!prevStage) {
            timings = [
              {stage: 'boot ui', time: boot.bootStartTime - boot.earlyStartTime}
            ];
            prevTimeText = ' boot UI ' + (boot.bootStartTime - boot.earlyStartTime) + 'ms init ' + (now - boot.bootStartTime) + 'ms';
            prevStageStart = boot.bootStartTime;
            prevStage = stage;
            return fileText + prevTimeText;
          }
          else if (prevStage !== stage) {
            timings.push({
              stage: prevStage,
              time: now-prevStageStart
            });
            prevTimeText += ' ' + prevStage + ' ' + (now - prevStageStart) + 'ms';
            prevStageStart = now;
            prevStage = stage;
            return fileText + prevTimeText;
          }
          else {
            return fileText + prevTimeText + ' ' + prevStage + ' ' + (now - prevStageStart) + 'ms';
          }
      
        }
      
        function finishLoading() {
      
          boot.api.title('Loading modifications: ' + progressText('local'), 0.85);
          driveMount.finishLoading(drive => {
      
            boot.api.title('Loading application: ' + progressText('ui-init'), 0.9);
      
            var uiframe = createFrame();
            uiframe.iframe.style.opacity = '0';
            uiframe.iframe.style.filter = 'alpha(opacity=0)';
            var uiframeBase = (<any>window).base(uiframe.global);
            uiframeBase.apply();
      
      
            var wasResized = false;
            var resizeHandlers: any[] = [];
            on(window, 'scroll', global_resize_detect);
            on(window, 'resize', global_resize_detect);
            on(document.body, 'resize', global_resize_detect);
            on(document.body, 'scroll', global_resize_detect);
            if (document.documentElement) on(document.documentElement, 'resize', global_resize_detect);
            if (document.documentElement) on(document.documentElement, 'scroll', global_resize_detect);
            on(uiframe.document.body, 'touchstart', global_resize_detect);
            on(uiframe.document.body, 'touchmove', global_resize_detect);
            on(uiframe.document.body, 'touchend', global_resize_detect);
            on(uiframe.document.body, 'pointerdown', global_resize_detect);
            on(uiframe.document.body, 'pointerup', global_resize_detect);
            on(uiframe.document.body, 'pointerout', global_resize_detect);
            on(uiframe.document.body, 'keydown', global_resize_detect);
            on(uiframe.document.body, 'keyup', global_resize_detect);
      
      
            (<any>uiframe.global).require = shell_require;
            boot.api.title('Loaded: ' + progressText('ui'), 0.95);
      
            global_resize_delayed();
      
            // TODO: do this concurrently with drive loading
            try {
              var files = drive.files();
              var shellScripts: string[] = [];
              for (var i = 0; i < files.length; i++) {
                if (!/^\/shell\//.test(files[i])) continue;
                var content = drive.read(files[i]);
                if (/\.js$/.test(files[i])) {
                  uiframe.document.write('<' + 'script' + '>' + content + ' //# sourceURL=' + files[i] + '</' + 'script' + '>');
                }
                else if (/\.css$/.test(files[i])) {
                  uiframe.document.write('<' + 'style' + ' type="text/css">' + content + ' //# sourceURL=' + files[i] + '</' + 'style' + '>');
                }
              }
            }
            catch (error) {
              alert('Shell initialisation failed ' + error.message+'\n'+error.stack+'\n'+error);
            }
      
            if (uiframe.document.close)
            	uiframe.document.close();
      
            function shell_require(moduleName): any {
              switch (moduleName) {
                case 'nowindow': return window;
                case 'noui': return uiframe;
                case 'nodrive': return drive;
                case 'uniqueKey': return uniqueKey;
                case 'resize': return { on: onresize, off: offresize };
                case 'timings': return timings;
              }
              throw new Error('Module ' + moduleName + ' is not supported.');
            }
      
            function onresize(handler) {
              if (typeof handler !== 'function') return;
              resizeHandlers.push(handler);
            }
      
            function offresize(handler) {
              if (typeof handler !== 'function') return;
              for (var i = 0; i < resizeHandlers.length; i++) {
                if (resizeHandlers[i] === handler) {
                  resizeHandlers.splice(i, 1);
                }
              }
            }
      
            function global_resize_detect() {
              if (wasResized) return;
              wasResized = true;
      
              if (typeof requestAnimationFrame === 'function') {
                requestAnimationFrame(global_resize_delayed);
              }
              else {
                setTimeout(global_resize_delayed, 5);
              }
            }
      
            var lastMetrics: any = null;
            var lastScroll: any = null;
            function global_resize_delayed() {
      
              var scrollPos = getScroll();
              if (!lastScroll || (scrollPos.x !== lastScroll.x || scrollPos.y !== lastScroll.y)) {
                lastScroll = scrollPos;
                uiframe.iframe.style.left = scrollPos.x + 'px';
                uiframe.iframe.style.top = scrollPos.y + 'px';
              }
      
              wasResized = false;
      
              var metrics = getMetrics();
              if (!lastMetrics || (metrics.windowWidth !== lastMetrics.windowWidth
                && metrics.windowHeight !== lastMetrics.windowHeight)) {
                lastMetrics = metrics;
                var w = metrics.windowWidth + 'px';
                var h = metrics.windowHeight + 'px';
                if (boot && boot.iframe) {
                  boot.iframe.style.width = w;
                  boot.iframe.style.height = h;
                }
                if (uiframe) {
                  uiframe.iframe.style.width = w;
                  uiframe.iframe.style.height = h;
                }
                document.body.style.width = w;
                document.body.style.height = h;
                if (document.body.parentElement) {
                  document.body.parentElement.style.width = w;
                  document.body.parentElement.style.height = h;
                }
      
                for (var i = 0; i < resizeHandlers.length; i++) {
                  var f = resizeHandlers[i];
                  if (f)
                    f(metrics);
                }
              }
            }
      
            function getScroll() {
              var x = window.scrollX || window.pageXOffset || document.body.scrollLeft || (document.body.parentElement ? document.body.parentElement.scrollLeft : 0) || 0;
              var y = window.scrollY || window.pageYOffset || document.body.scrollTop || (document.body.parentElement ? document.body.parentElement.scrollTop : 0) || 0;
              return { x, y };
            }
      
            function getMetrics() {
              var metrics = {
                windowWidth: window.innerWidth || (document.body.parentElement ? document.body.parentElement.clientWidth : 0) || document.body.clientWidth,
                windowHeight: window.innerHeight || (document.body.parentElement ? document.body.parentElement.clientHeight : 0) || document.body.clientHeight
              };
              return metrics;
            }
      
            boot.api.title('Preloaded: ' + progressText('ui'), 0.98);
      
            (<any>uiframe.global).shell.start(() => {
              var msg = 'Completed: ' + progressText('ui');
              boot.api.title(msg, 0.99);
      
              var start = new Date().valueOf();
              var fadeintTime = Math.min(500, ((+new Date()) - boot.bootStartTime) * 0.9);
              var animateFadeIn = setInterval(function() {
                var passed = new Date().valueOf() - start;
                var opacity = Math.min(passed, fadeintTime) / fadeintTime;
                boot.iframe.style.opacity = (1 - opacity).toString();
                if (uiframe.iframe.style.filter)
                  boot.iframe.style.filter = 'alpha(opacity=' + ((opacity * 100) | 0) + ')';
                uiframe.iframe.style.opacity = '1';
      
                uiframe.iframe.style.filter = 'alpha(opacity=100)';
      
                if (passed >= fadeintTime) {
                  clearInterval(animateFadeIn);
                  if (boot.iframe.parentElement) // old Opera may keep firing even after clearInterval
                    boot.iframe.parentElement.removeChild(boot.iframe);
                }
              }, 10);
      
              return msg;
            });
      
      
          });
      
        }
      
        function createFrame() {
      
          var ifr = <HTMLIFrameElement>elem(
            'iframe',
            {
              position: 'absolute',
              left: 0, top: 0,
              width: '100%', height: '100%',
              border: 'none',
              src: 'about:blank'
            },
            window.document.body);
      
          var ifrwin: Window = ifr.contentWindow || (<any>ifr).window;
          var ifrdoc = ifrwin.document;
      
          ifrdoc.write(
            '<!' + 'doctype html' + '>' +
            '<' + 'html' + '>' +
            '<' + 'head' + '><' + 'style' + '>' +
            'body,html{margin:0;padding:0;border:none;height:100%;border:none;background:black;}' +
            '*,*:before,*:after{box-sizing:inherit;}' +
            'html{box-sizing:border-box;}' +
            '</' + 'style' + '>\n' +
            '</'+'head'+'>'+
            '<' + 'body' + '>');
      
          return {
            document: ifrdoc,
            global: ifrwin,
            iframe: ifr
          };
      
        }
      }
      
      module shellLoader {
      
        export interface BootModuleAPI extends createFrame.LoadedResult {
          api?: any;
          earlyStartTime?: number;
          bootStartTime?: number;
        }
      
        export interface ContinueLoading {
      
          continueLoading(): ContinueLoading;
      
          finishLoading();
      
        }
      
      }
  • pcjs-embed
    • boot
      • bootUI.js
        function bootUI(document, window, base) {
        
          base.elem(document.body, {
            background: 'black',
            color: 'silver',
            border: 'none',
            overflow: 'hidden',
            fontFamily: 'FixedSys, System, Terminal, Arial, Helvetica, Roboto, Droid Sans, Sans Serif',
            fontWeight: 'bold'
          });
        
          var monitorBack = base.elem('div', {
            position: 'relative',
            width: '100%', height: '100%',
            padding: '3em',
            background: 'silver',
            opacity: 0,
            transition: 'opacity 0.1s ease-in',
            webkitTransition: 'all 0.05s ease-in',
            mozTransition: 'all 0.05s ease-in',
            oTransition: 'all 0.05s ease-in',
            msTransition: 'all 0.05s ease-in'
          }, document.body);
        
          shake(lazerAppear);
        
          function shake(callback) {
            var shakeStart = Date.now();
            var shakeTotal = 700;
            var shakeAni = setInterval(function() {
              var passed = Date.now() - shakeStart;
              var phase = passed/shakeTotal;
              if (phase > 1) {
                monitorBack.parentElement.removeChild(monitorBack);
                clearInterval(shakeAni);
                if (callback)
                	callback();
                return;
              }
        
              if (phase < 0.1) {
                monitorBack.style.opacity = phase * 10;
                monitorBack.style.width = (100 - phase) + '%';
                monitorBack.style.height = (100 - phase) + '%';
              }
              else {
                var fadePhase = (Math.sin((phase-0.1)*8) + 1) / 2;
                monitorBack.style.opacity = fadePhase * 0.5;
                var shakePhase = Math.sin((phase-0.1)*5);
                monitorBack.style.top = shakePhase*100 + 'px';
              }
              monitorBack.textContent = monitorBack.style.opacity;
            }, 1);
          }
        
          var lazer;
          var lazerAni;
          var bootBar;
        
          function lazerAppear() {
            console.log('ani: lazerAppear');
            var lazerStart = Date.now();
            var lazerTotal = 1000;
            var totalHeight = Math.max(document.body.offsetHeight, document.body.parentElement.offsetHeight);
            var totalWidth = Math.max(document.body.offsetWidth, document.body.parentElement.offsetWidth);
            lazer = elem('div', {
              position: 'absolute',
              background: 'orange',
              top: totalHeight/2 + 'px',
              left: totalWidth/2 + 'px',
              width: '1px',
              height: '1px',
              filter: 'blur(10px)',
              webkitFilter: 'blur(10px)',
              mozFilter: 'blur(10px)',
              oFilter: 'blur(10px)',
              msFilter: 'DXImageTransform.Microsoft.Blur(PixelRadius=\'10\')'
            }, document.body);
        
            lazerAni = setInterval(function() {
              var lazerPhase = (Date.now() - lazerStart) / lazerTotal;
            	console.log('ani: lazerPhase '+lazerPhase);
              if (lazerPhase > 1) {
                clearInterval(lazerAni);
                if (lazer) {
                  lazer.style.opacity = 0;
                }
            		console.log('ani: create bootBar');
                bootBar = base.elem('div', {
                  position: 'absolute',
                  top: totalHeight/2 + 'px',
                  background: 'green', color: 'green',
                  height: '2px',
                  width: '3%',
                  filter: 'blur(10px)',
                  webkitFilter: 'blur(10px)',
                  mozFilter: 'blur(10px)',
                  oFilter: 'blur(10px)',
                  msFilter: 'DXImageTransform.Microsoft.Blur(PixelRadius=\'10\')',
                  fontSize: '10%',
                  innerHTML: '&nbsp;'
                }, document.body);
        
                return;
              }
        
              if (lazerPhase < 0.5) {
                var appearPhase = lazerPhase * 2;
            		console.log('ani: appearPhase '+appearPhase);
                var bigDiameter = Math.min(totalHeight, totalWidth) / 20;
                var diameter = bigDiameter * appearPhase;
                lazer.style.width = diameter + 'px';
                lazer.style.left = (totalWidth - diameter)/2 + 'px'; 
                lazer.style.height = diameter + 'px';
                lazer.style.top = (totalHeight - diameter)/2 + 'px'; 
              }
              else {
                var widenPhase = (lazerPhase - 0.5) * 2;
            		console.log('ani: widenPhase '+widenPhase);
                var bigDiameter = Math.min(totalHeight, totalWidth) / 20;
                var height = bigDiameter - (bigDiameter * 0.7) * widenPhase;
                lazer.style.height = height + 'px';
                lazer.style.top = (totalHeight - height) / 2 + 'px';
                var width = bigDiameter + (totalWidth * 0.95 - bigDiameter) * widenPhase;
                lazer.style.width = width + 'px';
                lazer.style.left = (totalWidth - width) / 2 + 'px';
              }
            }, 1);
          }
        
          function lazerStop() {
            if (lazer && lazerAni) {
              clearInterval(lazerAni);
              lazer.parentElement.removeChild(lazer);
              lazer = null;
              lazerAni = 0;
            }
          }
        
          return {
            title: function(t, ratio) {
              // setText(smallTitle,t);
              if (typeof console !== 'undefined' && typeof console.log === 'function')
                console.log(t);
              if (ratio) {
                if (bootBar) {
            			console.log('ani: bootBar there '+ratio);
                	bootBar.style.width = (ratio*100) + '%';
                }
                else {
            			console.log('ani: bootBar not there '+ratio);
                }
              }
            },
            loaded: function() {
              setText(smallTitle, 'Loaded.');
            }
          };
        }
    • demos
      • 10mb-ega.json
        [[[{"sector":1,"data":[-1900006406,2080423120,122745995,-50651312,-1190788929,-1510801152,400874,129940992,1015022771,-2112981888,477429820,-32455037,-839944757,-1961587944,-292879796,-32455037,-2112129845,-193724356,839289790,-930435859,129717932,-854674432,-186491376,96468715,2080422656,1459749304,1935610829,-843042036,-311079149,-351886402,113426130,2113814145,-948589995,15398283,385876092,1635151433,543451500,1953653104,1869182057,1635000430,509963362,1869771333,1869357170,1852400737,1886330983,1952543333,543649385,1953724787,1293446501,1769173865,1864394606,1634887024,1735289204,1937339168,1097688436,1869116533,539828338,1769365828,1766596708,1852798068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8388608,50397186,77905,1359151104,-1437270016]},{"sector":2,"data":[1234185451,538987842,3157554,67586,50462722,587857,262161,8388609,620945162,-14022398,33617488,872028621,-1127182656,-661750784,-956269917,553678854,332266364,-1779891341,-1608577536,-141001712,58463782,58465286,-1552151034,329481219,2144380,2081498871,-1157497083,-201915904,2081621505,1912635112,2081661363,-1199735133,-1064435600,12310670,329330176,11987068,2081988654,352725550,851508860,45371620,1476444648,674117746,1987846150,100740622,-147948525,58460966,248441816,-804139745,633393344,24444931,-930398144,2082342646,855799168,2115931072,60029,-910294928,190589,-1406206229,1299480356,129699508,-351220480,5290225,521060494,2080612654,-1157610520,28835840,5826562,-13423502,637537209,639634816,538987904,871686727,2111815423,-67105863,242591475,-1107287873,196705771,1973875456,-2134981887,-5838723,382533812,236897273,-137219297,-25421770,353798338,-137219204,-2005132746,-1552146666,-1021346808,135695150,-771313284,906637030,-896828395,-1959859834,-847503850,49939,1867385357,2035494254,1835365491,1936286752,1919885419,1936286752,1919230059,225603442,1885688330,1701011820,1684955424,1920234272,543517545,544829025,544826731,1852139639,1634038304,168655204,1141509376,543912809,1953460034,1767990816,1701999980,1761610253,1768058210,1663049839,1764781423,1868852578,1663049843,3173743,0,-1437270016]},{"sector":3,"data":[-8,1610940495,19924736,184594431,-268500800,16781056,-4079,1611989327,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-533921088,50343682,855842865,1614086976,58734339,990093369,-532872256,67124995,1124343873,1879048176,76545796,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,100687621,1661345889,1617233472,109078278,1795596393,-529725760,117468934,1929846897,1618345968,-1018105,-16277383,-260241457,134250495,-16240641,-259717041,142641151,-1962368887,-268498752,152043272,-3951,1620379983,159422217,-1677725543,-526579264,167812873,-1559617375,1621491696,176203530,-1425366871,-268498240,-1003766,-1275072335,1622477632,192984843,-1156865863,-524481600,-999669,-1022611457,-255521728,209766399,-888364855,-523432768,218156812,-754114351,1624575296,226547469,-619863847,-522321936,-991475,-485613343,1625624128,243328782,-15818519,-268435457,251719438,-217112335,1626672960,260110095,-82861831,-520286272,268500751,51388673,1627721793,276891408,185639177,-519237439,285282064,319889681,1628770625,293672721,454140185,65521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":4,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":5,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":6,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":7,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":8,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":9,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":10,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-970063872,3069190,1978000104,-1331671016,-398392276,984613079,1476449000,785596041,785712838,1965964288,-704184823,-720976338,1060962094,-813694091,1965702146,47153189,1048577972,1946169046,-1342000126,-718919105,-2041417170,-2046172191,9562337,-136126074,-1998003834,-2145749531,-940178225,-1992526590,-13708482,-970009850,-13708026,785778374,6940672,-316282708,1961472744,1947024424,-1543095772,975074348,1008366787,-964266694,-350159036,694663696,-371004951,-13440971,-107126962,787173059,-2130587776,-394264371,1011280243,-387484659,-521666525,1364657900,884934414,375044]},{"sector":11,"data":[-8,1610940495,19924736,184594431,-268500800,16781056,-4079,1611989327,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-533921088,50343682,855842865,1614086976,58734339,990093369,-532872256,67124995,1124343873,1879048176,76545796,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,100687621,1661345889,1617233472,109078278,1795596393,-529725760,117468934,1929846897,1618345968,-1018105,-16277383,-260241457,134250495,-16240641,-259717041,142641151,-1962368887,-268498752,152043272,-3951,1620379983,159422217,-1677725543,-526579264,167812873,-1559617375,1621491696,176203530,-1425366871,-268498240,-1003766,-1275072335,1622477632,192984843,-1156865863,-524481600,-999669,-1022611457,-255521728,209766399,-888364855,-523432768,218156812,-754114351,1624575296,226547469,-619863847,-522321936,-991475,-485613343,1625624128,243328782,-15818519,-268435457,251719438,-217112335,1626672960,260110095,-82861831,-520286272,268500751,51388673,1627721793,276891408,185639177,-519237439,285282064,319889681,1628770625,293672721,454140185,65521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":12,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":13,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":14,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":15,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":16,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":17,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}],[{"sector":1,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-970063872,3069190,1978000104,-1331671016,-398392276,984613079,1476449000,785596041,785712838,1965964288,-704184823,-720976338,1060962094,-813694091,1965702146,47153189,1048577972,1946169046,-1342000126,-718919105,-2041417170,-2046172191,9562337,-136126074,-1998003834,-2145749531,-940178225,-1992526590,-13708482,-970009850,-13708026,785778374,6940672,-316282708,1961472744,1947024424,-1543095772,975074348,1008366787,-964266694,-350159036,694663696,-371004951,-13440971,-107126962,787173059,-2130587776,-394264371,1011280243,-387484659,-521666525,1364657900,884934414,375044]},{"sector":2,"data":[1145981271,542332751,270540832,0,0,2424832,131105]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[538976302,538976288,270540832,0,0,2424832,131105,0,538979886,538976288,270540832,0,0,2424832,33,0,827214167,538980400,541873743,0,0,759234560,199535,217712,542001495,538976288,541675081,0,0,3473408,524321,1950,1330597971,542262604,541415493,0,0,760217600,592751,13216,1330530647,1346454604,541347661,0,0,760217600,854895,19392,1330530647,1346454604,541217351,0,0,760152064,1182575,1213,1329877837,538976339,541415493,0,0,3145728,4456481,1,542001495,538976288,541937475,0,0,759234560,4524911,4867,827214167,538980400,542001474,0,0,759234560,4655983,182816,1381322563,538976322,542003014,0,0,760545280,7605103,12304,1447839048,538976322,542003014,0,0,760545280,7867247,10480,1381190996,538976322,542003014,0,0,760676352,8063855,10784,1381322563,538976321,542003014,0,0,760479744,8260463,8720,1447839048,538976321,542003014,0,0,760545280,8457071,8032,1381190996,538976321,542003014,0,0,760676352,8588143,8208]}],[{"sector":1,"data":[1095585618,538976334,542003014,0,0,760610816,8784751,27264,1230127955,538989648,542003014,0,0,760610816,9243503,5744,1162104653,538988114,542003014,0,0,760610816,9374575,9680,541278785,538976288,542398548,0,0,760938496,9571183,42,1129070915,538976288,541415493,0,0,761004032,9636719,24992,1162625347,1380009038,541415493,0,0,761004032,10095471,37360,1146241347,1162627398,541415493,0,0,761004032,10750831,36528,1346980931,541348418,541415493,0,0,761004032,11340655,9696,1129270339,538976331,541415493,0,0,761004032,11537263,7920,1414418243,541871954,541415493,0,0,761004032,11668335,53360,1213484868,538989385,542398548,0,0,761004032,12585839,493,1163153230,541344080,541415493,0,0,761004032,12651375,18544,1313423696,538976340,541415493,0,0,761004032,12979055,89584,1163281746,541676370,541415493,0,0,761004032,14420847,14816,1297237332,1279348297,541415493,0,0,761069568,14682991,43968,1128354384,1162037588,541282116,0,0,763691008,15403887,2944]},{"sector":2,"data":[1145128274,538985805,541282116,0,0,763691008,15469423,2922,1414091351,538976325,541415493,0,0,763691008,15534959,188464]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[1465662019,1329876553,1465668439,808537673,1448029744,76,0,0,1667845426,1869836146,1461744742,1868852841,1260417911,1701737061,1850286188,1718773108,543515489,544370534,544747058,543452769,7876147,1279724544,1279345231,1330400853,1264451,1413826316,1380274252,1146047826,117465925,1381258060,1482248259,1281296128,1397705795,167792965,1112493127,1330400321,1198915,1397637385,1464814665,5263941,1397310474,1162625601,710102852,1281295872,1313165391,1124401237,1212372033,1192034359,1094864716,1163019852,1280065861,1091043354,1313428302,1297373253,1281296128,1095062083,268456788,1280065859,1129271888,1414745673,1162038849,1292894261,1346718529,1229147986,1096045390,860177230,1281296128,1162171212,251679819,1262702412,1381127491,1414811205,558584641,1162284288,1146045268,1312901189,1564822596,1380323328,1380992325,1313424207,1312904275,3425603,1129270281,1380338753,476485,1129270281,1230195777,673114,1330398989,1129070914,1095781711,1659971,1514754830,1380339525,1431262021,1095058258,1330383104,1280065859,139150159,1330383872,1129070915,1095781711,873539,1230521610,1380272980,38552910,1162087936,1163150668,1213481296,1162690894,1275658316,1279345487,1414090313,1460207620,1163151681,1414415702,1444151326,1145654337,1128617025,1397048399,1162692421,1683182670,1162284544,1381319508,1414415698,1263747412,1275789348,1279541583]},{"sector":9,"data":[1095909961,6248786,1330398986,1397506370,340089417,1430390784,1346653257,2900548,1413826321,1414742348,1263749444,1312901187,6440263,1129270283,1314212929,1262702412,1275789321,1397441359,1162692421,1528910,1413826316,1263747412,1430607185,184558405,1112493127,1279675457,374556481,1381437952,1346720841,1229344594,1414743372,1196312914,1192034363,1430475845,1313165906,1111773268,1325924389,1179534672,1246055497,1163070208,1230131284,1414091343,301998169,1414808915,1229673281,1380275278,1312901187,2639175,1380471813,3692367,1163019787,1112099909,1498562898,1225588832,1096042830,1414352724,1162625601,1393295428,1096045637,1431391059,574969157,1162284800,1146047828,1212501077,1279544897,201338693,1414808903,1146113349,1163282770,1191903324,1413567557,1095650639,4736333,1330398994,1296843074,1163154241,1312901202,474303556,1162285056,1330794580,1162627398,1230132307,3819342,1413829393,1263747412,1313294675,1380994113,2507599,1128481038,1381192517,1431262021,1078281042,1162284544,1330794580,1145323843,1397966162,1275527218,1280463955,5918277,1413826319,1347241300,1162627398,1162690894,1275723873,1296318799,1280656463,201338181,1094930252,1095062092,1129270348,1275789318,1279345487,1145979208,738636,1414745095,1413563218,1191968857,1094864716,1312901196,356863044,1281296128,1414091351,167794245,1094930252,1280065868,344911,1413826314,1397900630]},{"sector":10,"data":[55463753,1162284800,1397639508,1129202004,1413563461,201340481,1129534281,1313162578,1111577159,1192034347,1413567557,1095257423,1162626126,1141506121,1413827653,1330921797,117458765,1381258060,1464880451,1163072000,1397051988,1129469263,1312901189,1380273220,1275854915,1380204879,1431262021,1027949394,1313409024,1096045641,5983059,1413826317,1179603536,1229278281,3757134,1163019786,1146047813,776293461,1229326336,1413563470,4541775,1129270283,1330531393,1497778516,1091043342,1346982734,1314276690,1330383872,1163021123,1381322579,4080963,1397706761,1163281748,2053198,1330398989,1380729154,1280065861,1065807,1330398986,1179402562,289752402,1313147136,1162625601,693325636,1095108864,1162625364,22301016,1347357696,1095781957,1095649364,4932941,1413826321,1430540109,1229342028,1095648588,3229005,1163019788,1397051973,1129469263,285228869,1414808915,1397445441,1129597271,1330794568,167782211,1094930252,1095517772,807751,1413829387,1346459475,1263488840,1090977819,1413563460,4607311,1280065805,1163019087,1381322579,4343107,1280201997,1397441359,1162692421,1594446,1330398987,1095516482,1129270348,1091108879,1430868814,1380274256,1493499983,1145849161,1192099869,1330467909,1162630468,1195463509,285225029,1229342020,1095255374,1162626126,1279410516,100687429,1163021407,5391425,1313424908,1397051972,1129469263,15429]},{"sector":11,"data":[1667845438,1869836146,1461744742,1868852841,1394635639,1702130553,1868767341,1734960750,1952543349,544108393,1969516397,1713399148,1226863215,1345277250,1415065411,5521711,1380126976,1163149637,1414748499,1230261573,38946125,1313410816,1380537681,1313819717,1414416711,218107219,1431391817,1397051977,1163154265,251658573,1280067915,1414748499,1230261573,55723341,1313149440,1162625601,1414748499,1230261573,1397900621,1142095876,1111577417,1498629452,1296389203,1162692948,349010,0,0,0,1768838424,543450484,1952543827,673215333,1851880531,1685217636,117440553,1095977284,54873154,1313408768,1380537681,100663621,1111576133,148812,1296387849,1312902996,411987,1095717895,1229538131,1091108868,1414091598,1296387919,5,0,1667845404,1869836146,1293972582,1702065519,1967269920,1699950451,1818323314,117440553,1095977284,54873154,1313408768,1380537681,100663621,1111576133,148812,0,1397310535,1497451600,824195616,539767603,539768377,975188535,1095189792,1869424672,1948280178,544104808,692794422,1953068832,1850024040,1668178280,1126196325,1919904879,1936278560,2036427888,1141309440,1111577417,279884,1447379978,1296384841,222643279,1229063680,1414283860,1393098753,1430475845,1380930386,1376583782,1229734213,1112491354,1413694794,1225195530,1230328142,6636882,1431192839,1245859661,1392902151,1279414868]},{"sector":12,"data":[100666196,1111576133,345420,1313817351,1280266836,1325793283,1431327829,83888212,1163413840,100665676,1312899923,807500,1280262921,1313428047,151366,1431192842,1330005069,106124366,1212353280,1129005893,1330860629,167798866,1163284301,1397904707,6771279,0,0,0,3,2097152,262176,-12648448,-14680065,-15728641,-16252929,-16515073,-16646145,-16711681,2130771967,1057030143,520159231,251723775,-16711681,-16711681,2131820543,2134441983,1065156607,1073545215,536805375,536805375,1073741823,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,4194304,6291456,7340032,7864320,8126464,8257536,8323072,-2139160576,-1065418752,8257536,7733248,6684672,4390912,196608,-2147418112,-2147418112,-1073741824,-1073741824,0,0,0,0,0,0,0,0,0,0,0,0,0,0,196611,2097159,262176,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},{"sector":13,"data":[-1,-1,-1,13041663,3670016,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,3670016,12976128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2097167,262176,-65536,12648447,12584704,12584704,12584704,16254720,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,12599040,12584704,12584704,12584704,-63744,-1,-1,-1,-1,65535,-12648448,2160895,2099200,-1623455744,-1627096846,-1627111182,-1627111182,-1627111182,-939245326,-939245530,-469483482,-234602418,-117161826,-234602434,-419151714,-838582066,-1643888410,-1677442830,-1744551822,-2147205070,-2147205118,-2147205118,-2143535102,2127874,2099200,-12646400,63743,0,0,0,0,0,983043,2097167,262176,-65536,-1,-1,-1,-1,-1,-50331649,-117440705,-117440737,-117440737,-117440737,-117440737,16580383,16269056,16260864,16260864,16260864,16523008,-117489920,-117440737,-117440737]},{"sector":14,"data":[-117440737,-117440737,-50331873,-193,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,16777216,16777344,16777344,16777344,16777344,16777344,-16711552,-16678657,16810239,16777344,16777344,16777344,16777344,16777344,128,0,0,0,0,0,0,0,0,0,0,458755,2097152,262176,2147352576,2147418111,1073545215,1073545215,536412159,536412159,267452415,267452415,132186111,132186111,62980095,62980095,25231359,25231359,25231359,25231359,267452415,267452415,267452415,267452415,267452415,267452415,267452415,267452415,267452415,267452415,267452415,267452415,-1,-1,-1,-1,65535,0,0,0,-2147418112,-2147418112,-1073545216,-1073545216,-536412160,-536412160,-267452416,-267452416,-132186112,-132186112,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,0,0,0,0,0,0,0,524291,2097158,262176,16777216,16842751,16842751,16842751,16842751,16842751,16842751,16842751,16842751,16842751,16842751,16842751,16842751]},{"sector":15,"data":[16842751,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,-130088960,-130088960,-130088960,-130088960,2013265920,2013265920,2017329152,2017329152,2017329152,2017329152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,524291,2097160,262176,-65536,-1,65535,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,-193,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,-31522816,102236160,102236160,102236160,102236160,102236160,102236160,102236160,-31522816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,851988,16842756,0,-1,-1,-4097,-6145]},{"sector":16,"data":[-7169,-65040,-65296,-65040,-7169,-6145,-4097,-1,-1,0,0,0,2,851988,16842756,0,-1,-1,-32769,-32770,-32772,-65288,-65296,-65288,-32772,-32770,-32769,-1,-1,0,0,0,2,1048591,16842754,0,-1,-65537,1073250300,266346480,2147254268,2147254268,-32772,-1,2,1048591,16842754,0,-1,2147287039,2147254268,2147254268,535826400,2147237880,-2,-1,2,1048592,16842754,0,-134219777,-268441601,-537407489,-1074159629,2147368956,-1,-1,-1,2,917519,16842754,0,2088501248,2088533116,2088533116,2080406528,-58721153,-58721153,64639,0,2,917517,16842754,0,-1,-1,-1,-16711936,-458760,-458760,-458760,0,2,917530,16842756,0,-1,-1,-16769344,-16769344,-16711937,-16711937,-16769344,-16769344,-16711937,-16711937,-16769344,-16769344,-1,-1,0,0,2,2752568,16842760,0,0,-16777216,-1056966529,-16777216,-1551894145,-522241,1673525631,-783361,-471926401,-1307137,-470943361,-2355457]},{"sector":17,"data":[-470550145,-12840961,-470550145,-12840961,-470943361,-2355457,-471926401,-1307137,1673525631,-783361,-1551894145,-522241,-1056966529,-16777216,0,-16777216,-1998856,-14680441,2124324839,-16254975,-1132466209,-1838728,-639502657,-15112450,-641665345,-16161538,1669396863,-16512769,1669396863,-16512769,1669396863,-16512769,1669396863,-16512769,-641665345,-16161538,-639502657,-15112450,-1132466209,-1838728,2124324839,-16254975,-1998856,-14680441,251723007,-16727809,-1347748609,-16727809,1331035647,-11221505,-1398115141,-5715337,1263889851,-11221577,-1414898533,-5715209,1280654763,-11221641,-1347789645,-5715273,1263889851,-11221577,-1398115141,-5748112,1331035647,-11221505,-1347748609,-5715201,1331035647,-16727809,251723007,-16727809,2,655390,16842756,0,-1,-8390401,-12586783,530507742,530507742,530507742,530507742,-12586783,-8390401,-1,0,0,1,2097152,262176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12648448,-12583681,-12583681]}]],[[{"sector":1,"data":[-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,-12583681,64767,0,0,0,1,2097184,262176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50331648,50331776,1929379968,1929379996,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930311836,-15763204,-15763204,-15763204,-15730436,-15732483,-15732481,-15736577,-16260865,-16269057,-16547585,-16580353,-16711426,-16711426,-16711428,-16711428,252,0,1,2097184,262176]},{"sector":2,"data":[0,0,0,0,0,0,0,0,2130706432,2130706684,-16580356,-536624897,-536625145,-536625145,-536625145,49159,49159,49159,49159,117489671,117489919,117440766,117440766,117440704,117440704,192,0,117440512,117440704,117440704,117440704,117440704,192,0,0,0,1,2097184,262176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117440512,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,117440704,192,0,117440512,117440704,117440704,117440704,117440704,192,0,0,0,1,2097184,262176]},{"sector":3,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50331648,50331840,50790592,50847936,-1023156032,-1023164221,-218054461,-218103601,1056964815,1056964860,-14745348,-14681857,-14681857,-14681857,1057028351,1056964860,-218103556,-218103601,-1023213361,-1023164221,50839747,50847936,50389184,50331840,192,0,0,0,0,1310738,131074,65537,65536,16711681,-16777216,64,1077936383,-65336,-65536,255,0,0,-65536,255,0,0,0,0,0,524300,0,0,33619712,1700004098,1852403058,201354337,2304,0,0,33685504,1970225921,1919248754,150998016,0,0,0,1208091138,7760997,524303,0,0,33554432,2035482882,1835365491,0,0,0,1852397332,1937207140,1970230048,1142973550,1702259058,234881138,1414086999,1314213715,1096045380,738644,1413829390,1128877910,1128481093,89411141,1163071744,1229936212,1431389507,1397052741,54876745,1163070720,1229936212,1330857283,138694229,1414727936,1330860111,172248661,1162285312,1380471892,1330139973,1447380044,240406085,1163070464,1229936212,1330529603,279892,1413829389]},{"sector":4,"data":[1314213715,1229934148,476499,1096045322,1330861138,155471445,1163071744,1229936212,1213482307,1213416786,272911439,1279461888,1397052239,1145984335,1141243906,1162166863,251662672,1314213699,1229936212,1330529603,223561044,1163071488,1229936212,1313162563,1330398550,410960,1162891017,1431262030,83022,1314476813,1280065859,1128877910,807749,1413826322,1163020372,1280264275,1096045380,257119572,1498221312,1313165391,1314213715,4676,0,0,16777114,117848832,-661863680,-1957345904,-661774612,-404203690,-1875413505,70838286,-18347600,-1547685115,163250183,68061696,-1947389440,38046707,292864011,1364395147,-26032,1532559360,1149878323,130253570,1583342050,-1962742397,1297948645,-1864856373,-326412987,-1579643362,-1073020921,-286719116,104960,-1073020928,-488045707,500480,-1628962384,-385649915,44171477,303616,206472,158655498,-1057037262,-33553246,163270856,-1949791488,-768388621,1375789240,-6664110,1493172479,58048523,-1996450071,14727172,-1342028663,71600248,1149763760,-2082567419,-807270461,-164433013,267914,-801419176,1381179252,-1598500301,1347572224,45978,190536192,-1990560576,10532868,-352172919,132875011,-1957432437,-527806270,45141246,-1962779509,84404236,860901976,-1873719095,60811278,1213225560,-4464502,-402345729,1532495085,1242033027,244370037,-1341919256,81520650,1476396451,-1962742397]},{"sector":5,"data":[1297948645,-401698613,-21430608,-1192367105,-387186689,1167120524,518818645,1465309326,1979616744,138840921,263738,1996443767,-401698808,-1073020042,1183538549,-1983316472,163252294,-167268096,-1950153759,1342475248,17050,105286400,184697993,856716480,1347572434,61850,1958742784,-1962637024,-527824826,1552614064,-401831166,-1070398379,-310157729,535137026,80366941,-1983892736,-21495228,-1192629249,-454295555,1167120524,518818645,1465309326,1979581928,205949705,263738,-1142357130,-1144455680,129040393,-1023155722,1586229387,172395272,-1965847984,-487193532,29018251,1996535808,-1072958985,1963351691,11659523,309648139,-372127605,-1946454709,64564184,-385649725,190382224,-352094775,-1554935682,1284112384,33128453,62592372,49905664,-880147340,-470415437,-1072961325,-1958739595,1413306576,-352094720,1141018723,1985231878,1213475842,-201978701,-939599733,853510739,-2115776257,771943107,-1319434357,-741660154,5608,-896804725,5771,1183568171,-18839028,-402411316,359793505,1583333427,-1962742397,1297948645,-1962932022,-337955888,11004125,-1202132757,-487849990,-335545416,-622110499,290656346,326242907,366220442,411047712,461380085,517872931,1167120524,518818645,1465309326,1979510248,239504203,263738,-922860937,-1325397573,65140231,-1947169853,1183517278,-18839026,-402345780,1114768105,-1962129781,1451952206,1977879046,1914715184,71600172]},{"sector":6,"data":[1996683651,88901663,2001992323,106203154,1583333427,-1962742397,1297948645,-1207956790,-286523404,-335546696,-476951,48817387,853535488,-523155228,1443074821,-1959858037,-54305276,-134220801,-218106369,-1929383425,1430622424,-1910575989,-396929320,829815890,1023821451,225705984,1946157373,146726,1827352948,69634704,-1328742912,-6664178,1476395263,38529104,1977289560,1977879280,-1707152408,975,-1276637552,1958742784,-1976636430,855639054,-906084160,-523172748,1347483627,1927810704,-1957340928,-459648536,1493172227,989879947,1576170969,2145914512,1606431488,49120094,1562371467,182861,-335548232,-1864856338,-326412987,1457032734,-71505833,112199029,855759080,-2090967104,-443874579,-884122337,1167120524,518818645,1465309326,1979423208,-402149371,-1070399051,-310157729,535137026,-1932833443,1430622424,-1910575989,-396929320,74775414,99336243,-1946155615,-2090967078,-443874579,-884122337,1167120524,518818645,1465309326,1962627560,-339725564,-401887225,-1014300311,-310157729,535137026,-1932833443,1430622424,-1910575989,-396929320,360053546,973620875,1996489734,106859276,-527775490,921177264,1606431489,49120094,1562371467,313933,1167120524,518818645,1465309326,1979381224,105286409,263738,-1070398346,-922874901,246472842,-1962868504,-2090967101,-443874579,-900899553,-661913598,-1957345904,-661774612,-1075292330,-1978436102,-1342176218,1355611656,1912657128]},{"sector":7,"data":[-469084142,-1070337163,-310157729,535137026,-389329571,-346489315,-1864856337,-326412987,1457032734,-91690921,1586171253,139365126,-1628959312,856650240,-2090967104,-443874579,-900899553,-353894396,-1930499075,1430622424,-1910575989,-396929320,544602710,973883019,1996489734,173968151,-527775490,-620035152,1317738868,-388877562,326238297,1583333427,-1962742397,1297948645,855640266,-387388471,-353632863,1167120524,518818645,1465309326,1979321832,172395290,263738,1586172279,105810696,-855711606,384304560,856650240,-2090967104,-443874579,-900899553,1659371526,1458498557,-18599344,-1948200504,-13739792,1577465236,1795576259,990297862,1611107591,319559179,940080135,1929919496,1359449864,-2012822008,-1259863808,-387698174,74711768,-855703632,-654916354,1355021304,-997566894,263382066,-1984240906,-1950219520,172788208,855792777,105155008,-1995946871,71600388,-1017619874,142052182,1174702118,1963095867,48643,-16222327,-1017248697,38243152,956303405,2002256967,-1329334270,-87820031,43509843,1929373160,-1072998329,-922010764,-1558668,-398953984,-897122068,-16717848,28332039,1493151208,-402589208,-997523546,-1946181144,-6494014,-1746353014,-389968897,-997523566,-335573528,1220555525,1408814315,-2134639781,16831294,-1007156620,37480531,38243152,1476675385,28312946,-99947527,-385896368,-78053538,1405311992,32958545,-397196683,1676149269,963795455,1225290817]},{"sector":8,"data":[1997535619,-1190925517,-162332664,264339673,-58670710,-1978829821,-771378692,-1863876377,49006346,1348202508,401081008,333994239,239569151,-1017423368,-336002128,-1195116296,-957874173,133792513,266872695,-2027851009,2287818,-337115984,-389903618,-1047789850,-1963007512,-19076924,13969024,-133693449,-117002045,-1957627157,65589697,-1190956088,-1017577473,1912612157,2147433733,45089910,-1007107079,-1957604526,2099677896,-2130933248,16831294,314182772,886880256,-930352649,28979435,-1260144640,-12717577,-1207732733,609223679,-1310207985,-2132291068,-813666073,-1966667136,-265987848,-1964453117,2145747176,-1047801974,-1017488551,-1023356488,13909632,-402426622,512426960,113705169,209,-2133118013,54334,1048582260,1963065556,62056453,-219673365,-1959294208,1977289694,-1950137599,14936267,-1022603383,2114373126,-386269184,-55049290,1763328,-1057043202,-100642328,-469701881,-335666143,-81664512,8914630,-1914125568,168326400,-31886108,-117279548,-754530621,15401216,269246948,1642463467,401277872,13829830,2114373120,15400960,-282828316,1642463467,-1275037024,-1021653632,1962954728,1961101832,1959067142,-1262225148,2049345538,-750878720,108331008,-2135636858,12786381,0,-4520448,650350335,-1577054560,-1341718394,-63589368,-1993465395,772344094,151717516,119442478,50915337,1048626171,-1006829434,-1302965680,-1159530993,-1039990647,-1070337909,-1996077943]},{"sector":9,"data":[76089412,1577337993,1354979418,8201864,263439498,-1984175114,-1948777728,-1064433081,-1957248168,-1977219465,2000373252,-1107069694,2005467136,72351494,1397801822,1465274961,-1909586402,-1945565410,-960459048,16809734,13909632,859337730,-1175417920,1048576004,1946222803,-981190383,-16354304,1962984844,4253726,-2076632597,259260630,12944441,-1929443724,57999557,1174415848,-957881786,32518,8130302,8136320,1595868959,1532582494,777520757,151596799,15409328,-816307994,-963948463,-527767343,-2080420632,1946158207,7137322,1048602482,1946222803,-423523828,-339375550,-347937280,-1047900148,-980762394,-430391066,-980121152,-2143098112,16831294,-2067322507,214,-527776117,78708996,-1894981422,-321863450,28626058,638108882,1048576213,1947140309,-971838718,54534,13436614,26929152,13895366,-1017554942,8426635,1215681035,1023337448,1007580161,1011512575,-385649404,-1779892091,-19994624,-907491190,-387413250,-796197180,-1963016216,-1175956752,-388986114,-259326284,8426633,1976109914,-2137748730,-1979323648,1793789511,8422599,314114048,-352276480,-855179678,-851542016,309592832,14058695,-288292864,13534406,-102313727,113657579,-956301107,16832006,-670644480,-956301056,16833030,-838416640,-973078528,53254,-400430087,-930415028,1172892978,-388986114,-259326400,971507947,239569150,268371435,-134216984,1381060803,-372191605,-754974280]},{"sector":10,"data":[207064032,74782521,13698569,-1017620134,1381061456,-469701638,-352252895,-2145262080,16831294,1048592757,1946222798,-704198901,-2147483392,-33499866,13581952,-955550719,16832518,-718897152,1048640768,1946222800,-637090037,-2147483392,-83831514,14419655,645922817,-2131296043,16811838,113657972,503382151,145760014,-1274443078,567147557,-737753569,12058880,-436147448,-339441088,-2143230464,16831294,1048583284,1946222718,-340348907,-347871744,207741952,-436147453,2114373217,15401216,-31186460,568721643,1532582651,-956644520,54534,13436614,15421440,17572324,568721643,-352317976,606200832,-436147202,-1017578719,1364414714,519903464,-1547685113,-979173162,8888832,-386078232,1165360352,-1070377385,-1090518087,-201588520,309675,-218053185,244139,-218050881,13476522,-1058627664,-1058619472,-1058611280,-1058603088,-2046819912,-53745440,-1477917562,1019281148,1592817155,2118025311,208929024,1642332395,15465508,216752614,498073835,11551462,1122369771,8339072,1394439169,860888658,-1327984960,382021128,632555785,1478610428,-737753569,1532624896,15450163,15417574,1532575974,-1006897064,16973828,65973,16973839,65953,16973841,66575,16973853,65650,36]},{"sector":11,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,65537,1,1852397341,1937207140,1836008224,1768846701,1769234787,544435823,1986622020,29285,1279476487,1263682130,1392902158,1431393349,100664133,1129140820,478543,1413829382,38620995,1396901632,1380078661,50335051,106452035,1162020608,1128682584,67111246,1414939971,1124532235,1196709445,808005,1128616454,72175427,1414727168,1297040193,1392902152,1329808462,100664653,1146373447,1000003,1279673094,172512085,1313408512,1297040201,1,0,0,1313818157,1397051988,858992928,741751084,975188535,1937330976,745366900,1919243296,1634625901,1395138668,589329509,10547,0,0,0,0,1835010,184353024,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775174201,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718623,655456,131072,-1879048192,524289,134217740]},{"sector":12,"data":[536872960,-536846081,0,718336,0,2035482624,1835365491,7680,812801,694364160,1886339872,1734963833,1109423208,1953723497,1835099506,1668172064,959520814,539898936,543976513,1751607666,1914729332,1919251301,778331510,0,520093696,1090525952,2560,0,26214400,201328895,536576,-33488888,16654111,0,3166,0,1919243264,1634625901,108,0,184353024,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775174201,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718623,655456,131072,-1879048192,524289,134217740,536872960,-536846081,0,718336,0,30208,469762048,806888556,806099000,0,203294208,2117090364,1010597388,0,410795008,2121809020,1013333118,1667261958,1014774883,1719549052,1717986150,1012939902,3670032,393312,408944670,7888908,0,0,0,1880624640,115,0,0,0,0,0,0,0,0,1711291392,2120629784,60,3964542,1866872,402653247,1080033340,242221280,1013332796,242236447,242247228,997746236,993791600,1879244902,241581070,242235488,476461884,242221056,477128252,1986817080,993791600,1879048294,241581070,469788256,1763189868,404232300]},{"sector":13,"data":[0,473105920,1613784678,1717962264,393216,1015178848,1617716838,409364064,1667261958,1717986915,1712875110,1717986150,207630342,1572920,393312,6291504,1597440,0,3145728,0,404232192,2122219227,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,32382,1724081688,-1016699368,6,6684867,1579020,2013266046,-1059061658,404226096,1711304294,404252220,404252262,1852571750,1852184600,406748672,402679320,404253792,912682598,404226048,806905446,-600282004,1852184600,402685542,409363992,469788256,1799234668,404232300,0,2083982336,1613760102,1717962288,786432,1719797296,1617323622,409364064,2002807814,1717986931,1712875110,1717986150,204484620,786540,393312,6291504,1597440,0,3145728,0,404232192,2122219214,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,1717985304,-2130681832,6,409337985,3160076,402653438,-1067450266,404232288,1712848896,2122212972,1010565120,6700032,1010580540,1717993020,1717960806,27772,905969664,0,0,7077888,0,228864,0,469762144,912293484,204478572,6198,204934144,1614153222,1719012400,2115509276,1721632280,1617322086,409362528,1801481222,1717986939,1712873574,1714709350,204484620,1006633158,1010711676,2021408304]},{"sector":14,"data":[2115528252,1048329340,1719549542,1717986150,404232318,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,1715232828,-1660930024,62,409338041,1711279128,402653438,-1067450266,1010571312,1010580540,1616928876,404258430,1667635260,1717986918,1717993062,1717986918,1010592870,2084322364,1010580734,2021145660,2081192056,1010580540,1715371580,1717986918,134243964,207627264,204472376,6172,204937216,2083920902,1715211388,3152924,1723206668,2087084156,410935392,1801484294,1717986927,1712863334,1712876390,202911768,100663296,1717986918,409364094,1796761100,1717986918,1714446446,1717988198,202911750,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,32382,1013342310,-1325372392,13158,2117861541,1711279152,402660606,-563622810,1717960759,1717986918,1616928879,404250720,1945507864,1717986918,1718517350,1717986918,101084262,101058054,1717986843,404252262,1715345432,1717986918,1717993062,1717986918,134243942,406594560,204472431,2113961599,205199360,107349516,1044125798,6291456,1723209734,1617322086,409366140,1801481318,1719428711,1712856188,1008233318,202911768,100663296,1717985382,409364016,1796762636,1717986918,1714446448,1715235686,102260748,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,32382,2120678496,-1325373952]},{"sector":15,"data":[2122212966,402653349,1711306876,402660478,-1016109466,1717960943,1717986918,2088525948,404250720,2070288408,1717986918,1719565926,1013343846,101082726,101058054,1717985307,404252262,1717966872,1717986918,1718517350,1717986918,26214,906395136,204472422,6172,205205504,107349528,208541798,2117074944,2125856780,1617322086,409364064,1801481318,1717593699,1712850540,405564262,202125360,1040187392,2120638566,409364016,1796765708,1717986918,1714437216,1712876390,202911768,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,268467838,409362528,-1325373928,445502,402653369,1711276032,62,52114236,1717966875,1717986918,1616928876,404257916,1868961816,1717986918,1719041638,409364070,1044276838,1044266558,2122211455,404258430,1717966872,1717986918,1719041638,1717986918,26214,1829118976,204472422,6198,205205504,108987952,208023654,1572864,1721630744,1617323622,409364064,1667262054,1717593699,1712875110,409351782,202125360,1711276032,1617322086,409364016,1796762636,1717986918,1714423392,1715235686,404232240,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,268467838,2117886054,-1325386216,445440,169,1711276032,6,104018688,2122199059,2122219134,1616930412,404250720,1734744088,1717986918,1717993062,409364070,1717986940,1717986918,1616928984]},{"sector":16,"data":[404250720,1717966872,1717986918,1717993062,1717986918,469788262,1299981312,404226150,1835008,204693532,1711695456,409350246,793628,1719670832,1617716838,409364064,1667262054,1717593699,1712875110,409351740,201732192,1711276032,1617323622,409353776,1796761100,1717986918,1714423392,1013331516,404232288,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,409387068,-1660937192,419328,2113929381,1711276032,1572870,205481472,1717985311,1717986918,1616930412,404250720,1668028440,1717986918,1717993062,409364070,1717986912,1717986918,1616930520,404250720,1717966872,1717986918,1717993062,1013343846,469777510,102245376,404226107,786432,203317276,1007041662,943468604,396316,1719670880,2121809020,1013333600,1669228092,1012939875,1008221286,409351704,201732222,1040187392,1044266108,2120615472,1669228044,1048329318,1042185312,208025112,404232318,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,415497752,-2130704872,13182,129,2063597568,1835014,520342654,1717985283,1717986918,2122202223,1010597502,1668824124,1010580540,1014791740,406600764,1044278368,1044266558,1044266223,2122202686,1715240574,1010580540,1048346172,205405758,3196,1572864,806092800,786432,0,0,0,3072,8126464]},{"sector":17,"data":[0,201326592,0,0,1006648320,0,0,1536,12,106954752,0,402653184,1880624640,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,24,-1023384040,0,195,1610612736,393222,0,26112,0,6144,0,0,0,12615168,0,0,0,6144,0,0,0,12615168,402653184,6240,0,0,1572864,0,0,0,6144,0,0,0,0,100663296,0,0,0,65280,0,31744,120,106954752,0,-268435456,0,0,0,0,0,0,0,0,0,939524096,0,2113960960,0,126,-1073741824,3932166,0,15360,0,30720,0,0,0,0,0,0,0,30720,0,0,0,0,-268435456,2035544160,1835365491,0,208077056,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775174201,1819033888,1734963744,544437352,1702061426,1684371058,46,0,1769503,655425,0,-1879048192,589569,137363468,16779264]}],[{"sector":1,"data":[-31514626,0,810496,0,30208,0,406591554,-16711936,1058028544,402800664,4079462,1579032,0,1813774336,942676004,3148828,0,1007435270,478031932,3947774,0,2081979452,2122217532,104621628,1667457126,2084338748,1717993020,2120640099,272392252,1610627072,503318016,202924032,30816,0,0,0,1936726030,241581080,477128252,1885748224,1718630508,520097340,1013999164,1717986928,2019965952,236719630,1010529806,60,24640,1834296320,1712855064,1717960704,409363968,1579008,404226072,1711302246,1711302144,26136,6246,1579110,267387135,2117861631,32256,1044119552,30,1879048192,1576462,15360,7895047,417824382,-16761730,1713372988,1620652824,2120629254,1010565222,24,0,405040156,403467369,24,1661337600,812017180,1711675488,100663398,-2107219968,1818650172,1717985376,1617298968,1717986147,409364070,1717790310,1613760102,805320716,100687872,1610625024,408944640,0,805306368,0,404226048,1712904984,1717966950,1711289880,1819023462,409337880,1717976064,1712875032,1712848896,404243558,-602400720,6686318,-524288000,-1845493760,404282282,26136,1711302246,402659430,1572888,1717966872,1711302144,1712875008,409337856,409337856,16711704,16715760,1610638950,201326592,3171174]},{"sector":2,"data":[3939843,454563840,1711282200,1812201472,-3997684,2117876967,-1015087360,1058825735,2114875518,6356582,270040702,402653192,1813774591,1818967588,1579020,0,1719428876,811610118,6710790,805309440,1717993990,1616930406,102262374,1937203308,1717986918,1717966950,208037475,1812738096,1610625024,805307904,24576,6240,0,12288,0,-837281768,26172,905969664,0,402653184,1811971686,0,1715208192,1147559960,24,100663296,6246,3694784,-1235924736,1712855064,1717960704,409363968,1579008,404226072,1711302246,1711302144,26136,6246,1579110,267387135,1717960959,12288,1667632128,809399856,202931814,404233008,26227,1007447044,2130680193,-1019445736,1711768039,2019963678,-26863586,404226104,1612191768,16717860,1618897948,806906934,1586700,1728839680,906364428,1980510304,404495462,-1643767682,1717593702,1717592160,1617692184,1717992299,408970854,878929510,808455270,402703884,1044151356,2084450364,409353336,2084338814,2118018622,1717790310,404258406,1612972056,1010580582,1010596924,2021145660,1614560376,1010593022,1717986876,1614571110,1008223334,2087074936,409353827,1623195648,603979832,404254122,26136,1711302246,402659430,1572888,1717966872,1711302144,1712875008,409337856,409337856,16711704,1006571504,822042726,1048471103,-619158682,6709351]},{"sector":3,"data":[408946200,1725628440,1812201472,-1717224424,-2359297,-1715240578,857433613,406748226,7143014,471341080,1013342264,524414,940335140,470560768,24,101477144,2088515100,476462092,201338908,2087106060,1618765408,102268512,1869308024,1717986918,1717966904,409344107,792624,1711669248,2120640102,202925670,1718294630,1852204646,1717973088,107374187,792624,1717985382,101058054,1717986918,1712855064,1864065126,1717986918,1717986918,2017222758,1712850494,1718838886,102,855664606,-615148852,1727535128,1726412800,-127473922,1579008,521666584,-411080858,-402692097,16738047,2039654,1638246,267387135,1617719295,1717835878,1669229360,1617943356,209584230,1579056,1850574,1009806340,-91,-2122383361,1014611395,2126721817,2120620158,404258406,1619000856,8273151,1008992264,805334808,8290060,1796735102,1711672332,1008231942,1610612798,-1239939584,1717593702,1718516832,1617716760,2087085931,404520038,409691750,405805116,12,1717593606,1717973094,409734168,1717986923,811626598,1013671526,6294630,1617297414,101082726,1717569030,404252262,2087085592,1717992475,1717986918,-60791194,102255486,1717986840,6710907,1875082878,1231447552,2014885546,419358232,101082630,536353022,-14680065,1617369343,1610612832,-16777216,411041536,15171352,16719864,1727991792,409362534,1798334054,-614046874,2120646267,404232216]},{"sector":4,"data":[32280,1816401948,-8307588,-33154,-1111260802,857217228,406748355,2120629760,471341080,2120638520,60,1714816638,470560768,24,403469104,1711695366,814616,209596416,1719580160,1616930400,1712875110,1667981420,1818648678,1717966854,806890603,789552,1715339264,813590112,202925670,1718294648,1617323622,1717973052,409344107,792624,2120638659,1044266558,2122219104,1712855064,1820287078,1717986918,1717986918,1578655840,1712864792,1047488102,106960956,-871359741,1834296371,1712855064,1711675494,402654726,402653208,404226072,6316134,24576,1711276032,1712855040,402653286,267452415,1617323520,1717973094,912681776,1618205542,1880621158,1579022,115,1006633188,1014939069,-2122425637,416061891,2017605400,100669470,410943030,1612191768,3964452,103022592,805332589,1586700,1932525568,2131111948,1714447878,402653196,-1644161024,1717986918,1717985376,1617323544,1617322851,409364070,1714841190,204484632,12,1717593702,1717973088,409734168,1717986923,805724262,1013671526,404238438,1724055576,1717985382,1616930406,404250720,1618902552,1717988568,1717986918,1617323622,1712868222,1717986840,805306471,856032864,-1842099184,404282282,-127506696,-18454810,1636352,1579008,2137399064,1743257447,16771071,520120063,-10066401,-59392,1711280112,812015718,1798334054,1852192358,6709310,402653184,14352408]},{"sector":5,"data":[7602176,-2120664064,404232252,-2115517636,2004385484,403599462,2115765862,276699196,-16744696,1835032,1716354084,1579008,469769216,1611424608,1712064102,471361072,805309468,1717993496,1616931942,1712875110,1667457126,1717985382,1013323878,1612211766,788016,1717960704,811624038,202925630,1718294630,1617323622,1013329926,1614571062,1579032,1617323715,1717986918,1616928870,1712855064,1826119782,1717986918,1717976166,1226358844,1712875032,6514278,106979328,1714962188,-1235924634,1712855064,1717966950,102,402653208,404226072,6684774,1711302246,1712848896,1712848896,402659430,267452415,1617325824,1717985382,912670256,811597926,2122219110,404232318,206,1006633020,404276163,-16771048,416072574,1618900728,107380230,404258310,60,1638144,405012508,402668294,201326616,1046486016,104627724,1009794168,101456952,-2145886208,2017229926,1715363966,2120629308,1614570339,406611516,1714821180,103841304,12,1044151358,1711681598,2120617086,2084333155,511467582,1714821182,404258316,1023344664,1044266558,1044135486,2122202686,2120640126,1010593775,205405756,-31966148,1047546648,1715354750,1618902627,52363264,617362232,404254122,409363992,6710886,1572864,1579008,6690840,1717960806,26112,26136,409363992,-59392,989859824,2120441980,404519740,3962684,6692352,402653184,6360,1835008]},{"sector":6,"data":[2122202112,2122186752,-12779776,1626872012,1006780569,6686208,1579008,0,0,6144,3148800,3072,0,0,0,12,31744,0,0,0,786432,0,0,3932220,0,0,201326598,0,417792,0,1572864,7346190,6144,0,24,0,0,0,6144,24,0,0,26112,3670016,-615149056,1712855064,1717966950,102,402653208,404226072,6684774,1711302246,1712848896,1712848896,402659430,267452415,6291456,1610612736,6144,0,0,14161920,0,12,0,-16777216,7929600,1572976,100669440,8257660,0,0,0,0,402653184,0,0,0,1572864,0,0,0,0,0,6,0,0,16711680,0,8126464,30720,1610612736,6,0,240,2013265920,0,7864320,0,0,0,-268435456,0,0,0,1006632960,0,1224736824,404272810,409363992,6710886,1572864,1579008,6690840,1717960806,26112,26136,409363992,-59392,4080,96,49152,0,0,402653184,112,262144,1700003840]},{"sector":7,"data":[1852403058,27745,0,0,1667845419,1869836146,1461744742,1868852841,1193309047,1752195442,544433001,1769366852,1226859875,1919251566,1701011814,1124728832,1229081935,1196574030,167784270,1380275537,1329742169,10179666,1129270282,1280202059,-1840561329,1480919296,1128354388,-397324204,1162283776,1431454292,1380927571,117478727,1415071060,559174991,1163070976,1447970132,1313821257,1414415693,1393623172,1414747205,1129596242,1414283848,1162104653,1125122055,1413563730,1413564485,1380075587,977818453,1095763456,1414283860,1107689501,1279415369,251667028,1397114447,1230459973,1464812622,256332367,1163070208,1431454292,1380927571,134255687,1095062083,1128547668,1158086709,1346980940,1590611,1413826322,1297369410,1229213761,1397638477,-1571926199,1414531584,1163021897,1313818951,1292239009,1229212757,251691094,1347700039,1180257359,1296845897,1413825615,1162284800,1095061076,1414743378,1330401091,134257234,1162626372,1128547668,1141440580,1413827653,1112492613,1124860148,1297698895,1178686533,-1757066167,1162286336,1480938580,1095254868,1413693778,1480938053,1497453140,1162283776,1413827924,1279870529,201358405,1397114447,1230394437,1313296979,1124860006,1413563730,1414087237,810565965,1162283520,1346456916,1162104653,1107951697,1095586889,1414087248,151006803,1163284041,1196577874,117451342,1280067910,676218706,1313411328,1397900628,1129595717,1380993356]},{"sector":8,"data":[374620997,1313409024,1414677843,15290704,1330463752,1431327829,100716628,1330925644,6508612,1414546438,1129335887,1163072000,1414087252,1146110285,1313164617,1313818963,1376911523,1448037701,1313818181,1397051988,1129469263,167807045,1229538375,1096042830,9982032,1397051916,1163022933,1330205763,251689550,1347700051,1180257359,1296845897,105202767,1163004672,1230394435,1279412563,218130501,1431391817,1447383625,1196577609,201360206,1465140551,1329876553,1196576599,1125122145,1413563730,1280266309,1313818457,1062094674,1296304128,1112820034,13194316,1413829397,1415071060,1380010051,1163150145,1415071058,541010,1313426693,15159632,1163019016,1229280321,218143043,1414743378,1447383631,1196577609,167805518,1297368403,1330466881,214340,1413826313,1095517522,5657410,1413826318,1464158550,1414680400,1598509647,1380321280,1380273473,2707015,1163019028,1111839809,1095586889,1145981264,1128616521,184562004,1414091351,1095320645,-230207668,1397162752,201361750,1162626387,1230394435,1313296979,1141309545,1481199693,13716549,1413826316,1145981271,1480939343,100687956,1163284301,1331028,1413829388,1145981271,1380931407,150997831,1330596934,1279870532,268441932,1163152969,1128616786,1397315156,1413694802,1191772258,1112495173,1413694794,1191837778,1262638149,1330401091,234900306,1398031687,1262702420,1162494543,5723203,1163019030,1128617025,1095781711]},{"sector":9,"data":[1279412564,1414087237,860897613,1380124928,1163149637,1028539728,1163069696,1279611476,89342529,1279462656,1296388943,1178686533,2118470729,1162284544,1480938580,1413827924,1396918610,1125122141,1413563730,1280267077,1380074569,1112036181,1163070976,1162434132,1380929623,1196576596,1125711885,1413563730,1280066885,1230262345,1313296963,1229213257,1413694802,1141440567,1431192909,1245859661,1392902351,1346722377,201386577,1465140563,1329876553,1415071063,1426587660,1129270350,-1857862581,1163070720,1313429332,1464158550,-1957406651,1162284288,1480938580,1415071060,1532251717,1163072512,1480938580,1398098516,1229343060,1230258499,675407,1129270278,-1874639797,1162283264,1313296980,-2041032894,1163069952,1129005652,1380928591,1393164289,1413829204,1279412291,151003988,1397114447,1380930629,218140487,1146373447,1128879685,1346454341,117461075,1280856132,-1975167935,1330644736,1330075980,83895374,1414877762,201381189,1162626372,1112491348,1413694794,1342701637,1414416705,726550354,1480920576,1146440771,1397315141,1413694802,1124335689,-94810033,1162284544,1162434132,1380929623,1415071060,1393033310,1162625347,-1940629435,1313147904,1094929749,1094863948,10373955,1397051913,1163022164,2573124,1129137163,1380928591,1330007625,1158021322,1346454355,167781957,1129596231,1112557900,5068879,1163019029,1380275265,1381253957,1313427015,1163020612,4281411,1163019016,1346720833]},{"sector":10,"data":[268494417,1279345491,1162434117,1380929623,1415071060,1392902162,1280196931,167806802,1414091351,1330664261,15813711,1179012873,1381254483,6639175,1413826327,1414418243,1230327369,1163151182,1480938584,1414415700,1141375096,1413827653,-346992571,1163070976,1162434132,1380929623,1415071060,1376321550,1398031173,1179014484,1191772302,1262638149,1162104653,1125253196,1413563730,1313818181,1145981268,1128616521,268450132,1347243843,1112101953,1229079884,1346456916,1191903389,1347638341,1246515023,16073295,1145980172,1330597971,1195462732,151058245,1230394448,1279412563,318793541,1095062083,1380074836,1229476693,1380533326,844383045,1379992320,251664195,1279481925,1128612949,1380993356,357843781,1162283776,1480938580,1128351316,201350213,1414808903,1129601093,1380928591,1393164378,1447384641,1196577609,117473614,1381254471,1429360719,1179585792,1413829446,1346980931,542000978,1296305920,1279346002,1329945161,1128614466,251712084,1178879041,1381256783,1431262021,2001027922,1145506816,1095130953,1095910994,9651533,1095058437,7948372,1279611660,1330922309,1128614466,50343252,440748368,1129516544,1464159297,1329876553,1415071063,1393426448,1414676820,1330597971,1195462732,134280773,1397705795,1112492613,1125253363,1413563730,1297040197,1230258512,1145392194,151008323,1112819027,1146047819,117441093,1162758476,1681998916,1331103488,1163084882,201362772,1414808915]},{"sector":11,"data":[1129601093,1380928591,1191706633,1230001221,1397507416,1280314368,1162697025,1229341012,8078668,1413829383,844123986,1376321540,1145984335,1413694802,1225785372,1380275278,1129070926,1413563730,1984119877,1380127232,1163149637,1414807888,1112429125,1213420882,1141375036,1094931277,-732804018,1163070720,1413694796,1346980931,743327570,1431373824,1247367749,16269903,1413826319,1096041805,1162627398,1398032706,1342701727,1280920655,625299017,1229981952,1280267352,-1538961847,1296304128,1112691795,13849676,1380865295,1229734213,1112491354,1413694794,1125580950,1413563730,1397310533,1146241347,1162625601,1297369410,10244161,1413829384,1163413840,285220684,1095062083,1279608148,1414547788,1196573513,100677198,1163280723,1983300,1162891015,1112492622,1326514416,1163085382,1162434132,1380929623,1196576596,1124990993,1413563730,1413827909,1279870529,302021957,1129596231,1163022933,1330664526,1230260563,5131855,1413829391,1096041805,1162627398,1398032706,1158152352,1279350097,1213089618,1162284288,1414087252,1112555853,1246975049,1162283008,1329808468,5195602,1163019018,1178948673,945049167,1162087936,1163150668,1096041805,1162627398,1125187711,1413563730,1313165381,1229213257,1413694802,1141637182,1431192909,1330005069,-833399730,1313147648,1112493397,1413694794,184567635,1381256516,1347636801,-599436465,1162284544,1447970132,1313821257,1414415693,1158217861,1179473230]},{"sector":12,"data":[1398033999,1376321606,1096041285,1162626894,1192296475,1414747205,1129596242,1414283848,1162104653,1275461720,1413828169,218108751,1112819027,1095586889,1414087248,218131027,1095062083,1163019604,1196577859,134234190,1146373459,1196576579,117,0,1167120524,518818645,-326903666,-1990765016,855704638,1346036672,-6663856,-486539009,-1547685072,983760952,23717888,561299467,1946167784,20899868,-1706027148,65535,-1898410920,3981248,855663801,-139725888,-2090967088,-443874579,-884122337,11208333,-6664162,-1560280833,109903888,512557248,244121800,1988952273,2669270,1394495518,1444303134,-26030,1444282368,25498,1221376,1326733,-1959856589,-486449268,-14790362,96931381,-13762560,1493260692,309641227,1195836809,529258635,-2147266688,1179049954,516150507,-6670849,184549631,-1946979136,-1289843216,-1190228736,1394497024,-6663906,184549631,1457222848,-26032,-1073020928,1347473524,16777114,-1959664896,113413872,-6662650,117440767,-1073019511,-661971340,1333796747,-964460541,855082770,-17984,-142102798,-8304825,-746717136,1462072415,16777114,-6662400,-1207959297,1344143512,67482,1958742784,3318539,529258635,-2147266688,1812031427,16871681,67110400,-369098752,65535,16777194,-5632,163053568,-6664192,-1560280833,-1073020876,163057268,2073710592,184549377,3580864,-326412861,1342204344,115610]},{"sector":13,"data":[60072704,74825739,803979307,-1728030024,-6664110,-1560280833,-1073019916,146336372,-1952821248,-1560281087,-1073020006,582539892,-1706025471,65535,-1962933832,298016229,1744831232,2097152257,453051146,67109120,-117374208,301990144,889258752,318767361,1006633728,-1811939072,-1291844842,754974977,-889126122,788529408,-2046754048,973078784,-486472960,1006633216,-301923584,1023410432,989922048,1056964865,1828717312,-1056964351,-1929313528,1174405376,1157628672,-419430143,-738196727,1996553985,1912603392,1912602881,-1660943608,-167771903,1702258965,1701137940,1167087646,518818645,-326903666,209617678,721712384,-1955599424,126553182,-1946794359,138933976,-15961024,-6681482,184549631,-1948224320,1200354910,911706932,-1980217719,1589967446,1200301816,-1983708377,1451881030,-62470156,468385792,653418180,1946173312,-230228197,-1006138842,1191118430,126363142,-1946401025,994576966,-595592122,637951684,-1962932282,-310117306,535137026,147475805,-1873273344,-326412987,-2082959842,-1070920980,-1979955575,1183447110,105286646,-375159,1183647862,-1202710794,-1706033150,261,737822347,1183446598,2109737734,-2082932990,-443874579,-900899553,1478361092,-1957345904,-661774612,722136195,-96040512,-1980217719,1183577670,-62486266,-1928825089,1343682118,1342177976,16777114,-62485760,-1980217813,-1073019322,-654900611,-1962742397,1297948645,503317706,1430622296,-1910575989,988578776]},{"sector":14,"data":[1752440891,1763734377,543236211,1835888483,745827941,1697540384,543236142,1701734764,1701998624,1701078371,2036473956,1931501856,1667853669,1852796015,540740109,1835888483,1937010277,1869116192,543452277,542396238,1953394531,544106849,1696624225,1818326385,1734964000,218762606,1769429770,2003788910,168648051,1699946555,1886593140,1701605231,1869881458,544173600,1881173876,1702258034,1814066286,1768186223,1864394606,1886593126,1701605231,1930038642,1819242352,2034070117,168653669,1651863364,1816356204,1399546729,1684366704,808465725,1967327757,1919906674,1852402754,1952535147,892681573,990514480,1869762592,1835102823,1852121203,544830068,1702126948,1852403058,1998615397,1751345512,1818846752,2019893349,1936614772,1936617321,1701994784,1936286752,2036427888,168649829,2036473915,1397703712,1702389024,1769239907,1444963702,544695657,1735357008,544039282,1835888483,224685665,1881160458,1830839913,1952999273,1936482592,1700929647,544104736,1702131813,1869181806,1869881454,1684300064,1919945229,1634887535,1664971629,1696623983,1646290296,168653921,1968054331,1867541612,1696625778,2037544046,1952801824,1768780389,544433518,543516788,1769108595,1965057902,543450483,1679847284,1953459813,1752440933,1847730277,577530997,1919905824,990514548,1919903264,1852793632,1952671086,1936617321,1702043692,1868767333,1869771886,1634738284,661415278,1699946611,1866670196,1667591790]},{"sector":15,"data":[1852795252,1868767347,1851878765,1309281636,1349282933,1031041647,1701736270,540740109,1684107084,1953391904,1931508082,1768121712,1936025958,1634236192,1885413492,1667853424,1869182049,1931506542,1819635560,1700929636,1634692128,543450468,1763734369,1936617315,1869351437,222127201,1377843978,1696624245,2037544046,1701868320,1768319331,1998615397,544498024,1819308129,1952539497,1936617321,1869116192,543452277,1914725730,539913845,1702057248,1836016416,1948279149,990514543,1635021600,1629516914,2003136032,1819239200,544107893,1948280431,1684368489,1886413088,1633905004,1852795252,1696607347,539911982,544175988,1970040675,779316845,1816207392,168652659,1869488187,1701013876,1634235424,1851859060,1886413088,1633905004,1852795252,2036428064,543515168,1818587760,1701077359,1696607332,539911982,1752461156,1949201257,1931506808,1953653108,990514547,1414483488,1145131077,1163412782,1913261358,222129781,1527385354,1702131813,1869181806,224228206,1818321674,1818321725,1633971813,2019896946,777920613,225206627,1685218058,1918985021,1818846820,2019896933,777920613,224686691,1836217354,1919251517,1634625901,2019896940,777920613,225276532,1954051082,1953459773,1684107365,1702389038,1949195808,168653944,1030319721,1702129518,778330480,543520869,1852386910,1829375337,1883074675,1953392993,1702389038,1831755296,168652915,1029926756,1953067639,2019896933,777920613,224620388]},{"sector":16,"data":[1527385354,1869377379,224228210,1527385354,1566992752,2004027917,1768190049,1060989811,2004027917,1769173089,809330042,1935739405,1852270963,1836016430,168636733,1920234593,1697538665,859661688,1644825906,1969972065,1868770928,875969901,1751321101,1802724459,1836016430,221525565,1836016394,1684955501,1836016430,221393725,1836016394,1868770928,875969901,1768163853,1868786547,1663987821,909995375,1678380340,1667986281,779710575,1030582115,168637494,1768711269,1868770926,875969901,1768294925,1697539182,909993336,1779043636,778987887,1030060133,168636466,1701080941,1836016430,168636733,1701998445,1836016430,221525565,1769107466,1663988846,826109295,1701972493,1702260579,1868770930,875969901,1701972493,1919906931,1868770917,875969901,1869810189,1697543282,909993336,1930038580,1953718901,1702389038,221262397,1852405514,1836016430,168636733,1885014541,1937011311,990514525,544175136,1886680431,1948284021,543236207,1701603686,1801547040,1851859045,1953391904,1763735922,1752440942,1931506537,1769235301,1864396399,1752440934,1868963941,168652146,1768300603,1634624876,1345217901,1713393234,1869376623,543450487,1696624225,1818326385,1734964000,990514542,1701344288,1818846752,1835101797,1769414757,1629514860,1634037872,1852383346,1701344288,1852785440,1819243124,1851871264,1126198373,1701736047,1869182051,1679848302,1869373801,1851859047,990514532,2037276960,1769107488]},{"sector":17,"data":[1919251566,2036428064,1701344288,1700929646,1852793632,1952671086,1948279909,1752440943,1713402729,543517801,543452769,543976545,1852404336,1735289204,1818851104,990514540,543515168,1701736292,544175136,1936287860,1818846752,1275727205,976311376,1275727165,976376912,1275727165,976442448,1124732221,976309583,808595773,745417776,221326392,1297040138,826096178,741355570,741878894,218762545,1868978954,1567847534,1866664461,1701409397,741875826,824979505,1395138610,589329509,1128081715,1112692047,1699219981,941651564,741355820,673198641,544499027,1026110243,1447839048,1409944898,1377858413,941649517,741355820,673198641,544499027,1026110243,1381190996,1124732226,1769108847,941650533,741355820,673198641,544499027,1026109987,1381322563,1208618305,544631909,808528952,540160300,1952797480,691151648,1279608893,168640854,544435540,544107858,808528952,540160300,1952797480,691151648,1397576765,168640850,1634561874,1395138670,589329509,1379739953,1312902479,1666386445,1953524082,1699948576,824385652,1129528617,1414547794,1867319821,1852990820,1699948576,824385652,1330461993,1314014532,2573]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[27679309,22,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":6,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":7,"data":[279886,1048808,191649315,131078,268436456,73996,131072,196610,4194366,12976208,14090449,1272,262146,0,0,0,592773204,592834928,12976822,40894481,-2147287036,1,46333952,-265289663,96,-2147221504,1,50593792,-265289723,104,-2147155968,1,50921472,-265289715,112,-2147090432,2,51773440,-265289704,32769,53346304,-265289716,32770,0,1330664199,1380273231,1330664199,1380273231,1329742085,1392989269,1280266064,21061,134217984,3072,1380272902,55330126,71910471,1380275029,-855507198,27787583,20958465,0,1667845409,1869836146,1461744742,1868852841,1344303991,1953393010,1394635365,1819242352,29285,1329742085,152661,1330664206,1380273231,1346653783,21188434,1953300480,1819506547,1668115310,1167087646,518818645,2122438798,1963004172,242679569,1342177720,16777114,112640,2122385899,1946226700,-2084555788,-443874579,-900899553,-1957363702,485262316,1183536727,16687884,687747,-1070393228,964688,271628368,1354771280,451995728,-397361101,99099262,81181,-1070397835,577824848,1342177720,1075661544,-1070397835,576776272,-401836289,748886840,-18432,1392508858,209125200,44442,19047168,19142281,-1157627976,1347616767,16660223,16777114,19309312,19404425,2897663,-1710983425]},{"sector":8,"data":[65535,2897663,937954960,741801756,-26112,-13434880,2097741699,-773878920,381127651,1962281728,142377745,-2096401408,158597180,-16483197,-347667596,-1813489957,1975520010,141885429,16777114,-465139456,-2082056567,1962869884,1347573257,1074617576,1962879349,21993992,1962868736,266725384,-187263,141885270,1343226552,-401547800,922684555,-1545076692,-5248250,-6682508,-352321281,339641253,443809792,384583309,1354773328,28856400,-6664192,184549631,-384666176,1183711072,860886764,1347440832,16777114,-293698816,856061202,1340625088,-330920671,-6664170,-1929379585,1343679558,16777114,-13702912,1167087646,518818645,-326903666,205949734,1962999869,28043523,-2014772362,998659,753468277,-385649151,37552983,-385649408,87884463,-385649408,104661582,-385649408,-1394015774,242679553,-15960321,1996425846,108461832,856208872,-1746298432,290973699,-1962700311,-472840610,1490819,-1543168,-6681994,184549631,1913747410,3947781,1996425843,-26102,-873791488,2768515,-14912512,1996426870,-26098,113704960,42,856585983,1285181632,-1962934269,-472840610,1482635,956974731,578095175,-788111733,379554787,41418496,-873984368,106859286,-1618222127,1204224022,-369099004,1996488565,243656714,13635327,-788111733,381649891,57999360,-1946198807,-472840610,1488895,-16091393,1743260790,108347407,-369098824,216596291]},{"sector":9,"data":[-62470389,-56557567,-62506752,1340670844,-60912894,1183572945,814168330,-1961528063,-472777634,19840899,-1962315000,-794559418,36497664,-335788289,242679757,383403661,-26032,1996423168,81848334,-1928431873,1343674950,16777114,-18618112,-1559607669,1183514922,138808070,-756481163,1354773502,1342181560,1343230136,-16222465,199755382,-21239528,-1207011585,-1706033151,65535,1183487,-1494678668,112894,-26032,113704960,655378,-92951,1996426870,-401698806,-2031546200,242679806,-16091393,244319862,185725160,-385649216,-1880490383,172395265,1946412861,242679575,-15960321,1996425846,108461832,16777114,32303360,16660223,503328440,242679632,19150591,19019519,16777114,-30152448,687747,2122518132,141885448,-1710328065,65535,16533191,-60912896,-1081875503,1946157078,-60912883,-1618222127,662765590,1191182331,-58817540,-2082571256,10814,-286719115,242679805,-1710328065,578,2754247,1996423168,1354773262,152474,-36706048,17464963,-957807755,242679805,-16353537,1659373686,-38278911,-15829249,1996425846,25815046,-1191335703,-397406208,-1595335869,1354773501,186333928,-1207536192,-1863778303,1423613,1354771280,84974160,1996423168,-26098,1994981376,1354773501,16777114,-43259648,-401967361,1996430918,108461832,503329976,79534672,1183383552,1958743034,142016276,-1207535873,1344143420,16777114]},{"sector":10,"data":[1975520000,-62470343,1586167808,-2082221572,5823,1586175860,-1948003844,-16771425,244318839,-1961619224,-472777634,1482635,-33404985,-62455809,150765187,2122566780,57934074,-1191380759,726663196,-1706012480,65535,-397361101,1183389863,145615100,-401705217,-689372474,1064444,820577141,1129983,518587253,1195519,1407779701,1719807,1374225269,-28448257,1963005245,-31069949,289217399,-385649407,306052842,-385649407,322829867,-385649407,686423510,33635838,1961427829,268516860,334037877,268582397,-2098658443,268647932,-1947663499,268713469,1827210101,-33691140,-1962742397,1297948645,1426066122,1996483723,112648,1354773328,-150930271,989921326,125764678,16400003,-1207602176,48955492,860930099,-6664000,-1962934017,113401317,-326413056,10939521,105286486,1023412781,58064909,50459369,-13724736,-1593325145,104399100,58458320,-1962811671,-788475874,814189539,71731457,1929381949,30009603,13645567,1342177976,-16015384,-1207894474,-1924136957,385833606,5290064,105880144,922681344,-1070399234,-1337553584,1354256406,-6664192,-16776961,161088630,-1996488703,1451863110,1518767534,-1957685505,235252806,-1706012160,65535,-1710983425,294,-1928825089,385833606,-1337553584,565727254,-6664192,1023410431,242483201,13645567,1358953912,-385145880,-164429505,-472785269,1490819,-1959758848,-1948003874,-1962928481,1194918982]},{"sector":11,"data":[-1960807160,-1948003874,-16771425,244318839,-1961725464,-1948003874,-956295521,-64441,1174471401,2080964227,-801701953,-149504,181594192,13635327,32241203,-803304634,-773969152,817857507,-260634623,-402360577,512428547,-567607088,-1618222127,-472841936,1488895,-1207666945,-397406206,-1662514450,142016262,-385829400,922681515,2122514640,91558918,-352321096,-83965,175564880,1048829931,1962934310,9038083,-1710721281,1910,702544,571472,126065232,1996423168,127572488,-1202716672,860880907,-1466281792,-956301305,9734,-2091455744,9790,1996443509,129014280,-1202716672,-1202716661,-1706033144,1981,-1710721281,65535,702544,1354773328,16777114,637978368,-352321280,-1895345636,-452467449,-452467449,-452467449,-452467449,973552135,-83368697,-443851259,442973,-2081649835,1448567532,-150929247,-28931624,-1929087233,1343682118,719258,74907392,1342177720,-1588543437,787939580,1178272000,-2096660484,64062,1689781620,855829248,-1070378816,97753680,1183645696,-1706027274,65535,57982987,-16620055,-375782282,-1996488694,95987782,-1868935168,1375731720,-26032,1183383552,-1468596310,-26032,1996423168,1354773416,-92864688,-1191414017,-256245727,-1706012160,2949,-1196919041,-1706033144,65535,-6664110,-16776961,28878966,-6664192,-16776961,-1207894474,-1924136955,1343673926,1342185656,577434,-29950208]},{"sector":12,"data":[440320,-1303999152,548950038,1637502976,-1962934262,-1952842682,-150929394,-1505326599,-1711520117,-770967049,1191117684,16556454,16385579,2108048955,16556298,16385579,-945404279,44102,-788464991,19924448,-371964279,1586168045,-1995994156,138269254,-385650176,-661978991,-1081351215,915079190,45154606,1996482259,10573480,-28966655,-1912703233,1344160837,-1704692225,2442,1080313227,19803895,1586229251,-1948003886,-2097146209,91488319,-338278771,-1303999229,1183437452,-1537832542,1453881087,1392408319,-1706012080,2453,162634320,1996423168,-1569259612,649882,787955712,-268238546,1453881087,-1912703233,1344169541,8828415,651418,-12195072,1469764214,-1996488698,1451863622,-1468596304,-1325322591,1356911363,16842913,1996488262,-1371108354,1375735301,-1371108528,1375735301,176069200,-1706033152,2692,-1697483009,1656,-2085861633,-1962748858,1178183238,-385647188,1048837896,1946157308,16556301,13633081,-1555561348,1996423376,186554884,-1202716672,-1957691369,-788475874,817857507,74844161,65781811,1342177720,736410,-25263360,-12878592,-1207894474,-1924136959,1343673926,1342185656,408218,-1468596480,-1325322591,1356911363,-1924087757,1343673926,383141517,-26032,-1706033152,65535,1996427243,-801701976,-92864768,-1092088176,74907392,-1700235521,2893,-1700104449,65535,-443850914,180829,-2081649835,2122386668,1946288394]},{"sector":13,"data":[9300227,-1727641973,16780939,100923895,1183383802,16556532,2113160761,13672820,1962165817,209125228,16777114,-163149568,-1928562945,1343682630,16777114,-159973632,13645567,-1862502657,4974606,-624897,1996485750,-401698564,1996423229,123771404,-1202716672,-1957691369,-472779682,19971971,855930376,-1207702592,-1706033151,65535,-1544272245,1996423376,-159973620,16777114,1575324416,503319234,1430622296,-1910575989,16425432,-16234967,-1070396810,138840912,16789239,108461904,16791295,-1174402632,1347551317,16777114,49120000,1562371467,445005,-2081649835,1448550124,-1962647925,1194006599,-96040682,58048523,-2097058583,1979647103,23324931,294787,-1897331852,-26112,104529920,1098121260,-2147197301,28836879,-526757888,-1207959541,-1706033151,862,2768515,-14912256,-16765898,-1207948234,-11533836,-16701386,-1711200714,65535,-1207948637,636026881,73304833,-971473013,34945,33968000,2897663,-2012888181,-1957683712,4457923,28856350,1352290304,1023410189,141885442,-956014965,-64441,-2130420085,-194969,-1962881815,2005599326,-2114780394,-2097116986,76350,1048774517,1946157094,-96040151,-1946270071,2139292766,1081474562,1141228427,-1873797632,191293454,1039943305,292945918,-369473909,2122514592,-780269318,-352319304,-58817585,-1962248705,1204225118,-335544572,73304942,-1979955573,166396487,-1962647925,1183384135]},{"sector":14,"data":[-59310084,1344194187,-1862371585,160557070,-1444657527,1265926144,-1202667469,-1202716661,-1957687275,1141179462,-397402624,37555806,-1960020736,1204225118,-134217980,76806,-16223224,244382838,-15975960,244382838,-1962154776,1204225118,872414722,-2146178112,-1954552474,1183515742,373752292,737822347,1600054342,-1034033781,-1957363710,741801964,13809664,45633566,-1202708991,-1706029008,1679,-1017256565,-2081649835,-1000996116,-1960441762,1979058999,-1933341899,1181122,-1014280110,1375734277,-1476216752,263625296,-259325952,-1207601856,988545023,106859350,-15697921,-1070395785,-26032,-1957298176,-2012936634,-11526656,-6683530,989855999,-747305914,638082756,1962950531,-1550166522,-1962934256,-1956772794,146955749,-326413056,1443556483,16139975,-28915968,-164429520,2097741443,-773944467,381649891,561250304,-472785269,1482635,4358019,-561310091,-1618222127,1207369750,1962934534,1860720135,-856996335,-2080481653,-1996292538,-28931273,-561295330,-2020875311,436535318,-1957683712,-1948003874,-1962928481,-523156921,96921680,-472785269,1482635,-784185461,-28966432,1183563755,19934718,-56362799,1958742784,104548366,125632762,1208024225,-1962870109,130547294,-1956773888,1438866917,-326898549,1187468818,-1962934018,1992558686,1149969924,172439810,-561311115,17299238,-385649408,-4717987,40299007,-1962385781,-422507913,637820612,-1993457525,1586231366,74877704]},{"sector":15,"data":[38046502,2131380025,-125926632,-15567872,563804278,-1996488687,1451880006,1975651312,1354773279,1342179512,1342189752,1347469355,-1962124824,2013202526,-401698814,-1561654714,653156036,637945739,1963476747,29092099,-1962385781,1468731975,239545108,-1995417829,1451883078,1926368252,1023768334,125173888,-2131605817,-1962480896,1183447622,-226589710,-1005751040,-1960382882,187041351,712312903,-1018113,1996484214,-227082488,1006500328,58061382,-1962870807,1204226142,-252,-207947658,-385875952,1586233191,209683208,-1958120192,-1715457037,-1995291511,1200165972,274172174,-1006352503,-2144932258,1946159999,-1933341919,1181122,-1014280110,1375734277,-1476216752,-26032,1589903360,126428910,1589910507,130492142,300613632,-1962385781,306482163,-1995156341,1468599879,140413712,-787724405,65065440,1452011078,9045488,-1980479863,2139354710,427098372,653549252,-1727903861,17325707,1460736583,71812884,-68616192,140413950,-1962129409,1589906503,1195058926,-1961135612,1988823134,1149970158,1418405382,306678024,-954968183,3143,1589907947,1200301812,1586206980,306678024,-1961601143,1204226142,-385875708,1586233010,373802760,1183514624,407341554,1191301675,274141454,653162180,637944971,956847243,91557975,1947092793,-295779315,105351974,138873638,1589931637,1065559790,638088192,-6670337,-1006632705,-1960382882,-1960442297,1589905495,1193879044,1461265930,1816588]},{"sector":16,"data":[43771984,2056933458,-1962934268,1452011078,1181168,-6664110,-1962934017,2005600350,172490506,1589962449,1086793220,-16777170,144373878,-16777199,781908086,-1962934270,183238214,-1694992641,2552,-1956711957,113401317,-326413056,1460464771,74907478,637850,-96040704,872175241,-1002837002,-561251714,-1960385583,1183395393,1958743038,748310566,-1996488685,1451882054,1181176,-677752750,-16777200,-1801781642,-16777199,-1499791754,1174405137,653942468,2097313593,650130366,638338953,-1207285879,-397410277,1347551709,1099674,-94452736,34570278,-1710983425,4928,653942468,67575,1996425844,284924420,317390848,-1207666945,1385758722,537049168,-26032,1599995904,-1034033781,-1957363710,49054700,956365985,125568582,1055637555,-1962520833,-472840610,19971971,-1947110648,-472840610,19957643,-2080487799,2113930366,-774337777,379554787,71731968,250283785,-771858805,379554787,71731968,-443873503,311901,-2081649835,-950661908,62534,17071745,-1959430896,2139293790,410784834,-1202667469,-1202716663,726667280,-397389632,-4716286,17361407,-1962385781,1207911031,-1947807422,1082721862,8972570,-2096603509,1962803839,41911062,-15698689,244318839,-1962509080,1204226142,-1946157566,436537414,-28931840,16139975,140413696,972441227,176046663,-1946263925,121177670,1586175349,1112538888,16154243,1204225397,-1962934264,1183055430,1183384318]},{"sector":17,"data":[-14750724,1183053382,-974454018,-2080612725,-1962738618,1183055478,76219134,1191118729,140413942,972441227,-528530873,-2096603509,1962936447,1115652943,-951487488,2631,804807,-1946973440,1200167492,105285896,-1986412493,1418269252,239569172,-1995417719,1200166983,71797014,-1710852353,5030,-1980217719,1381431894,-79697840,-1710852353,5061,17071745,-16354032,-352316410,336527108,112640,1575324510,1426065090,-326898549,861296398,-28931648,-1946401143,150897648,-561290371,-1081875503,1946157078,-1946209454,-1948003874,956307103,1132348031,-472785269,1482635,-523122805,1200347139,-163149542,248748624,1183383552,-195655182,653418180,638207883,17586059,1444019270,-159973378,1012634,-228670464,17299238,1174631680,-347628565,-62485590,1593726603,1575324511,-326412861,-1958477640,567084126,8438519,-164492684,-1205810560,567100417,-1034033781,-1957363710,-1957210388,2126775374,108446986,1583326451,-1034033781,1478361098,-1957345904,-661774612,1460726915,-801731754,105286400,1946159421,2506016,675088500,-385125376,189661476,-380600842,-1589247716,-264568580,300500341,1095681,-26032,-1073020928,189666941,-385647114,-561315588,-1081875503,1913127216,-219460062,16556358,243134523,-1958346261,-2082221602,134295743,909767799,58654972,956354537,1962987574,13035779,-1928825089,1343682118,1413018,-62485760,953241,-1946552575,-97109512]}],[{"sector":1,"data":[-1589739776,-956104454,897500731,-1710721281,2123,1358186121,13645567,-1862633729,-160176114,-1980467457,1442893878,-1862633729,-161224690,-16222465,-1600457610,-352321526,-97109726,184844032,-1996065281,-352257482,734432008,-89964345,-801732352,142016256,-865816,647628918,1342177290,1342183352,-472785269,956305569,1979789447,-339725564,112643,172333648,1996423168,112648,6600784,16396023,-66155623,-101234432,112720,374184528,1599995904,-1962742397,1297948645,503317706,1430622296,-1910575989,283935704,1996445271,-230257398,93999126,-1962934264,-1952843706,-150929394,-1578071047,-1991769860,1183579206,343304,-1073537673,-1476448621,-90106329,-62506752,117378430,1877672186,16400003,855995648,8710592,16387839,1048796651,1946157306,-97113618,-96566528,1266483200,16385735,1139474432,956365473,-747307962,1178322435,-1962377988,-89916346,19720960,-352257482,105286438,-1711509769,-150969159,1006144505,1946221118,-96564822,-1005786368,-703220203,219541525,-15332074,28838518,1689800704,-97585408,1317771520,1358559228,1342177720,16777114,112640,-310157474,535137026,113921373,-1873273344,-326412987,-2082959842,1187450604,-1962934030,133631070,594804737,-16615425,1996425846,108461832,16777114,-230258432,1946568251,-212959228,-230257792,-1962852119,2013203550,175570690,-16222465,-6683018,-1996488449,-1072958906,48825214,-1982269695]},{"sector":2,"data":[-1072958906,1586170740,-1983892724,1200162375,207522564,-1929218049,1343681606,16777114,19702528,19662583,259260431,-15966581,28836471,1587171328,-150994919,268512262,-2147191786,-142544050,76806,-1706396664,6028,-1980086647,1586232406,71797516,1946568459,-96040155,453265195,-771029417,92219260,1916442685,-212959200,207522688,1200209971,71796998,1586171883,-96040180,-1979951477,1468597319,738653958,1962999809,-13244157,720651914,636015076,1451884545,-1309267212,-2115316989,184549858,-196179262,123265,58048779,-1694560535,65535,-1980086647,1586232406,71797516,1946568459,-96040148,453265195,-771029417,-387382403,1023967230,57913288,-2130780439,-1954483378,-1070396322,-1996077175,-857144249,207522814,-1946532213,1200225366,106400004,-2080458007,-443874579,-900899553,1478361096,-1957345904,-661774612,1461906563,-16520362,1589904966,1065362950,116683808,1095763,3192912,-26032,-259325952,1962931773,-246482,-29534604,1024357631,611647487,1652422155,-352318529,1359619,1464909875,1343238328,-16222465,65537654,-1087313149,-387252202,-16222465,-1070397834,-26032,-259325952,696055307,1342193848,1342179512,1625242,-498693888,141934603,-1191919640,1793851391,-77469610,-941465973,-352321273,1556304,-1923701013,1343677510,16777114,142016256,-1928956161,1343677510,184603112,-1928039232,1343677510,16777114,1958742784,1425158]},{"sector":3,"data":[-1191217687,-1202716608,-1706033144,65535,199378569,-1952353088,509912,41388288,1200209971,71796998,1600045963,-1962742397,1297948645,503317706,1430622296,-1910575989,108954584,-2093845249,1962804862,108954412,-1960414208,133629534,175374337,-1711114241,3519,1586170859,41418502,16777114,108461824,16777114,49120000,1562371467,182861,1167087646,518818645,1586223246,17299206,-15043328,-1070398857,-26032,1586167808,41418502,1342179256,16777114,49120000,1562371467,182861,-2081649835,-950649620,51782,16008903,-163148544,1996443670,142016266,16777114,-193557760,-2131474689,1962997370,-193557516,16138950,-1946923265,1120334966,1136147190,-1924129280,1343682118,503333560,-867791536,683167766,-6664192,184549631,855995840,19982784,-1983101299,1452066374,-901331000,334168065,650534596,1965834112,130426375,-901316864,-993638657,-2144942498,-462094273,637820612,286148550,256362022,1333798419,1183645965,-968455732,-943171956,62534,-1006577943,-2144942498,913571903,200558219,1025078464,997457921,1946157629,212327,71137908,-385649408,384499850,-3639553,-1226258826,200313600,-1006144266,-1993997218,1589903735,-968425530,4161574,-2048326795,-990909696,-2144942498,108293695,1312784422,-1070463883,1589908971,1065363142,637957231,1968127872,-352210940,-1006456830,-2010774434,-1091894201,-3639553,1592313462,200313600,-995134218]},{"sector":4,"data":[-2010774434,-1494547641,650534596,1966161792,-339725820,-1006456830,-2010774434,-1897200313,637820612,542663,1204233728,637534218,411591,1333798400,-2144991220,-384824241,1191182188,-901346316,2113160761,-14685949,1575324510,1426065602,-326898549,-28915966,384499712,-150992200,1183448686,126494462,3157400,-113151,1589904454,1065362948,-1948158720,-443810234,311901,-2081649835,-11109652,-16712138,1183648886,-1202710824,-1706033112,7033,16660223,-1928694017,1343653958,1342197944,571802,71731968,1946568203,-2081060068,32209134,3964998,-963904907,1996443678,74907398,1677722,741801728,-2008642304,1183666198,-11528488,865732726,1577058316,-1034033781,-1957363702,753697772,-1207666945,-1924136953,1343673414,1342187704,1829274,74907392,-1202667469,1344143618,1342185656,1834650,74907392,1342181816,503370424,2668624,459577936,1996423168,16955396,244338718,-1207933208,1344143618,-1070378978,1375784122,1347440720,1342203064,1347469363,1342469887,-26032,1183383552,-1070378756,-26032,1183383552,-1070378754,-1202696112,-1202715673,-1706030848,7272,872314623,1183666368,-1202710828,-1202715673,-1706032896,65535,-1946401141,46292453,-1873273344,-326412987,-2082959842,-1202322196,-1202716608,-1706033126,7880,-1070337909,2130753616,-1706012007,65535,-15842167,1996425846,108461832,16777114,205818112,-1962522997,1149831254,341084434]},{"sector":5,"data":[-1995815285,1183517252,373590278,-954706807,397380,-1593686841,71616256,-963968860,-6664162,184549631,855930304,1443490752,2067610,112640,49120094,1562371467,445005,1167087646,518818645,-326903666,108461864,1364122,-666466048,-632910512,-6664170,-16776961,1996424822,352033496,1183514624,-532282406,-1962868573,782492742,-804862207,-956301312,64006,1423360,1354771280,-1710852353,7644,-2081394968,-443874579,-900899553,-1957363710,1357677548,503337912,4962384,1253593118,-1924129280,1343664198,1342197944,1692570,1958742784,-1337553622,1538805782,-1706025472,1190,393592843,-1202667469,-1202716654,726667264,-397389632,28900758,855829248,1575324608,-326412861,-1593643901,1183383568,75400190,-1205177344,726663197,-1706012480,7686,427610635,138216831,856847872,263737536,817385472,-1070903280,1340624976,1685757,1354771280,511285840,279117824,2143292160,-25263354,-402426880,1048772678,2113929232,112645,279000299,-28952320,2122516085,594804740,961593395,1946161158,178181,28836843,817385472,-1070903280,-68661168,-804861956,-1207959552,-443809793,180829,-2115204267,1442974444,-34044217,347603456,-2037559296,1343684088,1148314,-125399808,-158955011,-129579011,2122514432,58460408,-1962874903,-1979844986,-1634993594,-2030043658,1065418230,-1946979072,-2130839906,57999423,-1962900247,-472778658,1490819,-1205701376]},{"sector":6,"data":[-1202716608,-1706032888,6253,-772252021,377981411,1975520000,-295770104,-336050433,-128021591,-1215568943,1150091286,-1957683610,519960198,522689104,-2037710848,1344208374,2035610,-2038134528,-96040192,-2070261730,-1996488695,1149894214,-28377244,507790477,-96040112,-1650831330,-956301285,-130492,17188039,-1959662848,-472778658,1490819,-1960479744,-472778658,1482635,4358019,1586172020,-1948003848,-956295521,1607,1996424939,1566968,-34169205,-34175233,1962950528,-10163965,-1956712725,1438866917,1586228363,-1847036,-1711270217,6453,-788242805,377997283,-1962934272,46292453,-326413056,1450503299,-24906189,-1956152056,-2082221602,5823,-561286028,-1618222127,2139291670,1718878274,16660223,1342178488,378291853,5290064,535796304,922681344,-1070399234,-565801648,548950038,-711307264,-16777189,-1929368522,1343654982,383665805,71732048,-1706024692,7091,1946157373,-373279995,-164429637,2080964227,11266307,-472785269,1490819,1174893824,-381228309,-561250440,-1618222127,2139291670,763232258,-472785269,1482635,-1878886401,-118167538,-472785269,1482635,-1878886401,-124262386,-472785269,1482635,-33404985,-773944321,379554787,105379584,276037634,-472785269,1482635,-1710721025,4443,-472785269,1490819,-1953205248,-1948003874,-2097146209,1946174079,-773944442,379554787,440896256,-1946270071,-1846818,1342183095,1343226552]},{"sector":7,"data":[-960024,1290337910,-389944336,28896511,-443851264,180829,0,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,1845937963,-1996488704,1459642382,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-553981945,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,8567,-1017256565,-1192457387,-1957691328,1861682246,-1365618682,-1962934239,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,8637,-1017256565,736922453,1996443840,478976516,-443875328,-1957313699,74907628,1896858,1575324416,-326412861,-1710983425,8742,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,1671038582,-1996488687,-628294074,-1070870389,-1017256565,-1275051,463079030,-1962934270,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443875162,-1094991011,-990150400,1393062656,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1073779343,-1007912629,567095476,-1023380317,7210638,741772070,889239552,512303565,109838434,521011300,-1171980104,567091456,-1274115274,908256000,11929285,-617358708,-1306591434,-385649920,-986251703,-1946109434]},{"sector":8,"data":[244698,-1306591434,-1021372928,855643321,-1836583205,74711296,567099060,-1007492541,-387151019,1996423243,1042436,-1017256565,115600690,-657331503,1438907106,1122561163,-29235200,175432714,294528,1187382389,-987824636,-1207934442,567092480,-1274115297,-1157111040,520028162,1183514802,-850611196,12892961,12909441,-11335565,1128487703,-1144786197,-75431740,141754566,1528299347,-219462845,50354371,51107585,50358272,50604289,50358528,51666433,50358784,50571521,50359040,50430209,50359296,50424577,50359552,35477505,50394368,50435841,50360576,18941953,50331904,50438401,50360832,18964481,50332928,18976001,50333184,18979841,50333440,34120449,50332160,18992129,50334208,50385409,50363392,18998273,50335488,17938945,50335744,19005185,50336000,52430849,50331904,34117377,50333952,17908481,50336256,18909185,50336512,19011329,50336768,52506881,50332928,50629889,50333184,19022081,50338048,51118081,50334208,50599937,50334720,18950913,50339328,51843073,50335488,34112513,50339072,50584577,50337280,34163713,50340096,52187137,50370816,50818561,50371072,51725825,50371328,52181505,50371584,51717889,50371840,51686657,50340096,16815361,50344704,34105857,50343168,50528769,50341632,50533633,50341888,52178433,50342144]},{"sector":9,"data":[50380801,50342400,18712833,50346496,52206593,50375936,52210945,50376192,52419073,50376704,50878209,50377728,50627073,50345216,52224769,50346240,34102785,50348544,17661441,50350592,51102209,50347008,17912577,50351104,34252801,50349312,51734017,50347520,50868737,50348032,18423809,50352384,52237569,50348544,17672961,50352640,18373121,50352896,52243969,50349056,17668609,50353152,18254081,50353664,18717697,50353920,18806273,50354176,51909121,83937280,-14887168,50331904,17199105,50354432,51950849,83937536,-16741888,50332160,18809089,50354688,51943681,50383360,50871297,50350848,51830017,50383616,18943233,50354944,51818241,50384128,51981569,50384640,35463937,50355456,51997953,50386432,50578689,50353920,51836673,50386688,50338049,33576960,-14885888,33554688,-16741120,1828717056,1937208180,1835757164,0,5,0,0,0,0,0,0,0,0,0,1650524160,7632239,1769366884,7562595,1953656688,1879048307,1937011311,1929379840,1819242352,1996517989,1868852841,1845523319,111,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921]},{"sector":10,"data":[0,0,0,0,0,0,0,576716800,578822776,1953309388,1819506547,1668115310,257,4194304,524352,-1057030144,50331648,-1056964609,50331648,-1056964609,50331648,-1056964609,50331648,-1056964609,0,-1056964801,0,-1056964801,0,-1056964801,0,-1056964801,0,-1056964861,0,-1056964861,0,-1056964861,0,-1056964861,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,-1056964864,0,65280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12582912]},{"sector":11,"data":[0,12583680,0,12583680,0,12583680,0,66847488,-1,66863040,-1,66863040,-1,134102976,-1,32736,0,0,0,0,0,0,0,251658240,1023410175,251658240,1023410175,251658240,1023410175,251658240,1023410175,251658240,1073741628,251658432,1073741628,251658432,1073741628,251658432,1073741628,251658432,16777215,251658240,16777215,251658240,16777215,251658240,16777215,251658240,-4,251658492,-4,251658492,-4,251658492,-4,251658492,-1,251658492,-1,251658492,-1,251658492,-1,251658492,1020261180,251658492,1020261180,251658492,1020261180,251658492,1020261180,251658492,-1,251658492,-1,251658492,-1,251658492,-1,251658492,1020261180,251658492,1020261180,251658492,1020261180,251658492,1020261180,251658492,-1,251658492,-1,251658492,-1,251658492,-1,252,0,0,0,0,0,0,0,-12648448,-1,-12583681,-1,-12583681,-1,-12583681,-1,1060961535,-1,1060912335,-1,1060912335,-1,1060912335,-1,-12632881,-1,-12583681,-1,-12583681,-1,-12583681,-1,64767]},{"sector":12,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,1769099280,1953067631,168296569,2003782656,753664,1751607624,1866698752,1869771886,29548,1632632852,6648693,1375737088,1836413797,101,394330112,1919243264,1634625901,1828742516,1937208180,1835757164,-2143289344,285218310,1258328064,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,1869632386,1919249519,0,9437198,-65528,1342308353,1869632386,1919249519,2490368,4194338,-65528,1342308353,1919243906,1852795251,808333600,83886129,-2080362752,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989870336,234889216,16777472,-2142240000,27471,2004055149,1802398835,1802134381,1869632263,1919249519,544165398,1852404336,1936876916,1852793632,1952671086,825123941,1701998413,1634235424,1852776558,1919950949,1702129257,1868767346,1667591790,543450484,1948282740,1931502952,543518049,1953656688,1700009262,1852403058,543519841,1869574259,1869226092,572537442,1836213588,1952542313,1818304613,2019893356,1769239401,1881171822,1953393010,1651468832,1527332723,1937072464,979199077,1665227529,1702259060,1091058269]},{"sector":13,"data":[1953853282,657337902,1953724755,1696623973,1919906418,1634038304,1735289188,1869640480,1919249519,1835365408,1768300656,674129260,1852727619,1931506799,1819242352,1919905056,1752440933,840986209,1869226032,1881174882,1881174629,779383407,1631784960,1953459822,1769109280,1948280180,1326456943,1864397941,1634738278,544367984,388001391,1769366852,1847616867,1931506799,1667591269,543450484,455110255,1869574227,544367980,544432488,1852138850,1936615712,1819042164,791569509,544173908,2037277037,1919905824,1814066036,1702130537,1853169764,544367972,1919905883,542995316,1461743209,1227771465,1831749966,1953451551,1869505824,543713141,1802725732,1634759456,1948280163,1919950959,544501353,1953451546,1869505824,543713141,1869440365,1948285298,1919950959,510946921,776882519,541675081,1953394531,1936615777,1884496416,1701605231,1867398514,318778914,1953656656,1919705376,2036621669,1701867296,522205806,1868787273,1667592818,1868767348,1881173357,544502383,1953785203,543649385,237006447,1881173838,1953393010,1864397413,1225662574,1818326638,1881171049,980709999,32,0,1937009920,1852601207,1784900971]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[4217421,1,-65532,65535,0,0,64,0,0,0,0,0,0,0,0,64,279886,1966298,191455491,131078,268436056,81516,131072,262146,4194382,11272272,12583096,312,262144,0,0,0,1051066393,1051066624,68158519,69206273,-2147155964,3,75235328,-265289723,32769,75563008,-265289709,32770,76808192,-265289712,32771,-2147090432,3,77856768,-265289713,32769,78839808,-265289722,34817,79233024,-265289725,36864,0,1313429256,1094995023,80,524289,1114124,1162544640,1279610450,1229211395,1163089156,1162545234,1095713369,16925778,16963585,33951466,183040,100663546,26607617,116736,402,1667845424,1869836146,1461744742,1868852841,1327526775,1092641900,1768714352,1769234787,1394634351,1869639797,1293972594,1819632751,167772261,1279347012,1380992847,148303,1498698762,1346653783,21188434,1953300480,1819506547,1668115310,7959668,1458342741,1988885591,1962281738,2799910,1442986687,-6663849,-1912602369,-2144991162,32830,516164213,1586037312,138841094,-393185813,616445823,47104,-26032,983760896,272926978,1342178488,17050,37528320,1342180024,20890,37659392,856317068,2130753791,-1706010793]},{"sector":4,"data":[65535,856573065,205818304,-1157479239,146276384,508567040,-6663343,-1207959297,1149829120,407669782,-670939961,72125442,197831,-6662626,-1006632705,914949750,109838912,-1310195134,-365494489,-399048959,670033921,58048523,-402592023,-6681293,-1560280833,-1849753528,48640,-54869965,-1176816896,1443758180,1347573534,1364415315,1393972051,-26029,1151533056,12969984,1464926003,16777114,4629248,-1962887448,1252197446,-155176192,536934406,-1885273228,1930443776,974172162,-1274907680,717828880,1103923936,243917265,-108330632,-466425903,-523116335,1459714723,-2065114317,-150538752,108369152,-1157580824,861867936,2082376128,1962607361,1464881163,16777114,5629952,-1560064349,-1064435330,-372125813,856105144,-2136214529,-16594114,770179957,46972429,503380671,687978503,113189325,687978497,-645127731,31987396,-1342086469,457762944,4470527,16777114,-850611200,-1956749535,180510181,1975520000,-402083833,-521459026,1144425411,653034240,-26026,-125108224,1043791703,-26110,-594870272,-1705830825,65535,-6662314,-1962934017,1200305884,1876746,-1559786698,-998047718,-922827994,-855711606,-402435677,-768402877,-1206208536,178455030,34382594,4601483,855704249,-17472,1347440726,-6663853,-1342177025,1042675,183038640,-386879488,-1595408379,-1728991223,721428665,1358728161,1461080094,9149009,-1185415168,1347813632,1364219670]},{"sector":5,"data":[146330,549749504,4035,33685762,33619714,67073,83952641,335615233,369168897,16778497,117444612,318769152,167776512,-1912602624,-771375613,1896204293,67506438,-1290805242,1259314959,1980919314,755176453,-1458492143,-452538362,825358086,-1794976468,-1023299579,1167120524,518818645,1465309326,-1899459332,205949888,44409646,-1191020097,-1343094761,-1960026739,2126776910,242649862,1595408174,49120094,1562371467,707149,-1207959365,1048637536,1946157088,148301829,-823655445,-150538744,57971968,-1207812119,1048838129,1963000716,146270222,-385879368,-206042959,-1153569793,1048576000,1962934304,144893957,-1696070677,47880,-1946160200,184724238,1946331406,143321093,-2098723861,47880,-2130709832,158526,1978140277,32172296,-385323800,1049297380,1044054538,343147020,1954547190,205424911,1459565314,-1705552041,65535,1442977983,-6662370,-1560280833,-259325922,-1593549427,-1073020020,20777080,-402230016,-1192687159,-11119872,-1711129034,486,-1962439845,-1962928586,50338878,-550458,-150978397,-1547293721,1200292332,406227714,437160704,-1715076352,1050933751,736229120,32416710,-150583509,1220608984,-1174800487,237699097,-1053097922,-1047854466,184677027,-1957003584,103482439,-956104212,-550584,721440955,989872158,-1962770749,32547779,-1962918239,-1962917858,-754667056,-775386144,65065440,-774372415,-1946973213,-16650226,1442966582]},{"sector":6,"data":[1577068520,32245391,10536577,16784033,-16650746,1963061774,35176414,4470527,-6662370,-385875713,109969624,-1960443058,285114388,-25148558,1363047312,1049231155,109969908,-1960443058,285114388,-25162894,-150572144,-197228073,506920705,-1705552128,65535,922736631,1465319454,16777114,1309052416,344663555,-59448487,-1962863937,-2001918247,-432388347,796194785,1090589375,-293349077,1876226,100918263,1364197868,1980159,32257791,32388863,-1705814242,65535,-335114407,729869057,506920955,-331940096,-298385663,1398218241,336026,-197227776,1962871553,506891030,1465341440,318874,1456994048,-795191465,-1023410172,184917992,-1962183488,114424,-402340376,-1070397894,-41892967,-2145749505,544535289,1961949568,-235306789,32047989,-201752571,250151797,1364219403,-6662394,-1023409921,-946929869,113661702,-402587030,854066686,1778828806,-588774910,1191665418,-1040841237,-402426879,-1427438016,-1710552856,65535,1443274987,16777114,116786944,1971323494,-396950000,123669229,40503038,2013308648,96004306,-1962545944,1442858038,16777114,-9508608,-402648389,-1988558706,1948318080,1799258244,259260418,1962952936,1795606083,-1024983038,-2143687926,33712702,854069877,-2144504576,57937401,-385927959,552274581,40240886,-401967744,91553822,-351969816,540967146,141885440,34606729,34750089,-2130767895,141823481,1946417536,469336067]},{"sector":7,"data":[-18237,34750080,-1593609216,-1031011824,1027026664,175439871,185490664,-402426625,-571928009,1096702,1392922960,16777114,198740736,1482229723,540967107,57999360,-14319895,-1711258570,437,55457535,16777114,1354773248,16777114,-22877952,2113152,-972327680,16786182,-402435679,-1914104453,587646718,-6684672,-385875713,-92012928,-1959430655,-1341999330,-1732040112,678875195,-1957507029,2156752,-1205433766,-20958718,1357546436,1380977778,-402632518,1482293261,-1031541269,-1023118000,-1962756191,989989942,1946290742,238979898,-2147092990,1698312565,-1960020735,67056157,-1958018467,65876680,-650425910,-645201293,41289018,731383178,92816344,-1023255159,-1962875672,-1962800074,31779070,34223675,-756545163,204901120,-1980962046,39160069,34487945,34354825,13297859,4472459,16320246,-1911065328,855854598,131119579,-1977212748,46367495,-152969158,-320338571,-1104679938,1153827091,1304111359,1444828928,-26029,-268238848,2688199,1459688126,-6662626,-402652929,434700031,1358686989,-1974316717,-1966765360,217549542,204901248,171870978,1962359554,1963276614,58013754,1300903285,49905666,-788386445,1981414016,-2011581950,361431637,-2021662080,19982583,510981947,-1073085301,-432344200,-499454089,1291774834,-387519743,1499135782,-389851045,1499135781,1354979419,-397258413,1340604432,1532582403,1464910680,1593840872,178373464,201734914]},{"sector":8,"data":[-394824702,-76215114,-1308413464,571901441,1976699392,335988452,915144448,909836810,1366557196,1284183179,12642306,34223753,59522691,-152865791,376799426,2080439936,339098329,973501952,1979716918,3467469,-1031026453,-1054161270,-1979706205,872254145,-2132112695,1337098213,2236150,-167734552,-352312802,570869413,1048576000,1946157904,328067434,-628403886,-1315387510,-1948200188,-773795384,851510240,-774372353,915100643,-1705639868,65535,31103574,513998848,1475906304,37631743,252058,1515806208,-167765343,403057638,32416512,-167764831,369503202,32285440,-307224,-16759754,-1711268298,503,-1022155032,-2130393469,1912736510,32947715,-162311997,-352314842,-162312184,-150988250,-388461608,1381040292,855665384,1144425417,32292608,508776790,-1705566633,65535,-26026,-521666560,1532582418,1397801816,1448563281,-385964824,915079280,-940178886,-1962642320,-402506698,922681387,446300228,-1962934263,32291064,1448091223,16777114,1144454912,1419400960,-402653175,1600000667,1482381658,1745347,103540214,-291307496,1745153,-420034818,1574443,-1593707869,-503971812,1443371,-1593709405,-1023541220,103539446,-257753066,1397801729,922702417,345636932,1509949449,-1017619623,4470527,16777114,-26112,1465253888,16777114,-26112,-389873664,225706000,168688257,-1991376524,184686134,346145782,1958742786,15226660,-1950183935]},{"sector":9,"data":[637670966,-907521875,-771073536,-768405899,34870919,113351250,-768409600,-13384865,34881081,-1705613195,2617,35012233,-6662329,-1962934017,1962871800,-6662324,-1157627649,-259325886,-1706012077,361,-1554630685,-1706032620,65535,-929409198,117440522,-1910614183,872362970,866448374,106366719,-26025,-1709244416,65535,34879231,715930,172661248,-1070399488,-1070349415,40255107,-398232321,-164494741,-1014279597,-150994427,1088962786,1310625280,-1896379645,1526238146,1456180059,-52254035,-1425404488,-1597603490,-311080448,-391462861,1049296909,-1705573784,2805,381929355,117388063,-1705572777,65535,1119590851,1347572512,703642,1958742784,40411916,181377616,201064448,-396901422,-1746402965,-1014801663,136243206,1191309032,44508810,44578442,643287947,-1004403318,1202374154,-2124417566,-33513273,-1008110134,40255104,1345287423,1448235347,113641047,-973077848,2130880262,40240886,-1089964672,92996219,-956323864,-16620026,117446376,1499094623,-960276389,16935430,201407208,40280960,81782979,-1140854600,922681345,1397751878,16777114,1048625920,1946157674,1711732452,628391938,113661702,-964689240,-16603386,604137121,40280959,-402490433,12320588,-1001472,1610597352,15329287,41616955,-967808652,174086,44500678,-13047681,-1090356319,-1863843191,2076137472,9037826,-1191018053,-1749417329,508698114,-1705959853]},{"sector":10,"data":[65535,1459659240,43464447,43595519,43726591,43857663,16777114,42973440,-1705959849,65535,44566214,-1492728192,-2118385918,-19011582,-402490463,-1073020748,100863100,103481372,41878191,-770981837,369298044,371916826,226362029,404095824,-1308980480,91482116,1958742872,369492747,-1309111552,92727556,119471299,1713277867,1993882114,987268610,-2046658820,-1957647364,1575529411,-1416451328,5695576,1836547,100897451,-1012203494,4470411,164076118,-125108224,63409091,-1728047610,1842827,-930350089,100909196,-1952907240,-150988258,-1947694341,2097167553,-2147438590,41746684,1337524404,2126592536,985762306,-1979547931,-796146715,1847030,1443371,-154891630,721426990,-1845487610,2132708291,568873730,-1896117495,1493388806,41754251,-939599573,-678771714,-1950089422,1144455163,-1705566720,65535,-16757272,72220421,-1207941656,1347813377,16777114,1947110144,1876226,512485585,-338624486,-1169953839,401080942,1980664576,1876226,1569450193,39660294,1711659,41466443,508776534,1033523538,-1023410171,-11067818,-1711129546,65535,5160899,-6662378,369099007,490072071,1856177547,38112002,-1157467997,-2143027201,-92983751,1912863619,244483,40798151,-2017067008,-1996488080,-1711115234,65535,-779304306,68586278,1959869184,-2116383180,1124077630,-1591052976,993395310,1963093510,40935712,1879456566,-1592363774,993395318]},{"sector":11,"data":[1963095558,212236,-13234061,-352160250,378218170,-771031040,521582197,245699,503334376,922703697,1347551300,16777114,-1192195328,1347813377,16777114,-1701161472,-352321527,180222,29295595,1632256,1360941138,1144454999,-1706012160,65535,-6621045,-1023409921,40124041,235858619,-6676909,855638271,-661863479,-1957345904,-661774612,1988843350,205949710,1963003965,9550147,40124032,1443525889,-543534818,-352321529,1681817722,343212546,1442843320,-1705959856,65535,-26026,1609236480,1443012543,-6662370,503316735,-26025,1273692160,-1962864323,12061278,172127488,-2143390209,175374843,1946352512,133922821,-1014288523,40124032,-1206029055,-843382774,-12073470,8304928,1394495574,-26031,283639808,112665,-6664106,-1342177025,1583323393,-1962742397,1297948645,-2097149238,17009726,-108844172,858158354,114633,-2097111319,17009726,314251124,-153556992,-108851335,-2096466912,91491833,1963587971,516238863,1065366607,1964971520,-172627709,40582784,-385649664,1048576584,1963065962,-157161399,-880019061,2030200481,41656579,-8142594,-31493081,-32934712,637502408,-1057090444,-8141570,-32803800,-27102004,654279628,971529077,-1896313859,2045577922,-70064122,-385755671,-108792470,-1156680342,1407713298,-402228746,-1075248416,-1967092735,302434024,313524226,-1979700760,-401493772,-321912798,280032266,-805299736,183292140]},{"sector":12,"data":[16759028,4470527,1465012560,16777114,25749760,-1739435693,110991952,-461373440,1532582528,-2046709565,167930886,-1336052288,-1341330446,1795589633,1975519746,-1728860081,-1191112002,1344143392,-1705945570,610,1975519916,-12269829,-385971424,314507311,-1339954431,1778812416,1963080706,-2046775265,167930886,-1089112896,283640082,2105558784,-109764353,-1705566634,3855,1144425411,23247616,509009707,-828746921,-1023410169,326425355,309642043,-135792816,-137219085,-1948125199,868440264,-812923959,112835,1963260291,-1945729264,59679491,-1560146783,-941030902,66683648,-1902049163,59548419,243919595,-935656564,116843124,1972699383,-1194947359,243990608,-503906276,721596323,1220608967,-134613095,2109737961,700461826,-1962758394,-1560106210,1049297579,2145910806,370051583,1958951680,1829160466,12255234,23586816,40713856,-27167488,-1207800570,243990553,-503906278,721595811,1220608966,-134613095,2109737961,700461826,-1962758906,-1560106722,1049297577,870842392,403606015,-397193216,1482358798,544523067,-402652741,418054425,721594785,-1728047098,1718007,721426874,-1323922992,175499266,-1013333965,38,65576,16777253,16842791,196642,131105,16973859,16908324,118358016,-1391325506,-1053053658,-1073019532,650376565,180915117,-1960610332,-1962928098,-1962927562,-1593661162,1508377261,-391285760,413398528,113408,-91762125,512434155]},{"sector":13,"data":[915079190,378208284,-1348402517,3598338,-571962764,1483765,855638203,113106,4470411,1347638866,-26031,861536256,1381455561,1364283729,627866,-1348839936,-385875954,-1014038722,1962998144,-337761532,33128490,-570227339,-2138037781,74777337,401332267,1963194752,-338164988,-773944562,-2132868117,57935097,-1933328333,1962617799,2145061657,-339725564,2128231181,-1948611838,-151545405,-947067145,-1950091221,1375749142,861032787,1364415177,1975520080,-1705950975,65535,1219226,1776861952,134592512,1962420968,-1896314015,1310625474,871772931,168671442,-12800597,-1073085324,548405877,-2134704470,-311275270,-8552410,1325626656,-956369173,-25112014,-1193905639,-276624883,87631362,-947652492,-1070355710,-386430038,-1108805683,1472214007,-1706011056,65535,-402652738,2145973918,44022777,1394497107,893082,509041408,211065427,1465253888,647066,360170240,397678056,397744052,406132746,429463651,469637598,474422332,485498062,486612216,501751042,513089165,484777684,518332126,874323760,171868214,57933828,1170983219,518818645,-164407721,-1959862642,-2026617034,1442905142,1228311342,-29980876,521557504,46610175,-997568260,-1952915247,-1942060048,125108483,594816572,1478200040,46597831,113704960,713,1954596086,-953251575,2811906,-13761166,-1961642860,-402470642,-310173229,921013004,46597775,-561056205,16647823,16516751]},{"sector":14,"data":[1562337118,1397803853,1460032081,127723606,-92268172,-2146536429,259326970,-402414360,-336002106,60549127,-133981976,1510432606,-1017619623,1946160360,1501193,58138249,-1950098677,990082846,1946383646,186092292,-1014774821,1979416834,-1157402109,784532309,757401334,777352194,757401334,-397576956,-361487194,-1962933825,-1962707682,-2955021,58138171,76090228,58007177,199783759,-164707338,36513030,-164753548,70067462,1944586101,-335842268,4253899,1364219422,-26030,-1073020928,535501940,-1291833880,1347821057,-1705815471,65535,460636171,302152835,12060021,505531724,-26026,1444806656,16777114,-1007285504,-768358093,1328989230,1015031348,-1190759424,129630463,58310145,-389824461,-397409605,-1017642900,1108801601,-482142480,384517142,1243002952,1783306037,381183511,1847004013,-42788941,386168086,117440512,67698433,-16449032,1895303040,503351304,-132185864,49815556,570882081,-131923464,66593797,671610917,-1893138289,546253376,744525611,-1892872049,814689872,-9400529,-164707702,70067462,-796260491,567084724,45465283,456926463,80155252,154932734,-873921675,-1020884480,38922498,370738375,1968913603,755288037,46120470,45954697,1223,-1122071613,1966816258,-75414766,57803459,-1996307781,-972899042,1019412487,1007645232,738948921,-1274575312,15005194,1027392263,1060961140,2109732724,63406869,4030510,942599028]},{"sector":15,"data":[-1141738235,394920639,-896797134,24496395,-33241279,1711222293,1948727297,-502857724,-1222734856,714754,55320201,55576262,-947207423,-754667112,-775386144,65065440,67056321,-1008479784,1998190976,24087066,41217290,1336987134,41347130,-846796662,-779366914,-1023016983,243976499,-914357577,-1193675016,-1212461311,-1197544702,-152370945,-1156054600,-1846869320,-352256072,45588982,-1023231581,45684363,-1962554391,721599758,126501323,362987075,771999363,1962884224,70790673,-1959857547,102760772,638059203,-555613501,1976237763,-1223259375,-28331518,858488526,5236937,-889314069,-919401867,855654888,92203474,45551243,-973158094,1931083136,2943007,-889316629,378210933,-292945225,350996786,141937406,45551243,82561330,45551243,1337128330,855641832,91154880,-401059910,2129199107,-1019311611,-32766,109972597,-1977220274,-2146500290,-1010597913,1392151491,46478987,527824395,119428870,-2046787399,-1174189266,233308875,-1106813182,-1073085749,-922876556,-2147267678,108337724,436586022,-1431564309,58002748,1007289542,1978916874,-401952761,-164428857,46478985,734497626,367576002,67954688,-303561867,-231216900,-2014837387,-1946979076,-164707390,70067462,904460148,45588976,871659753,-1070378816,46401158,192266250,184535016,-2012973632,1526907942,309985034,175423499,175440700,-402433560,117310010,-1262288183,45596415,1735855420,1048780402]},{"sector":16,"data":[1946157767,-67180532,780863347,-756481337,-1962636293,-1979666216,8776184,611650108,-989985653,1914305664,8710403,-150974277,7203035,45164090,117311346,-1427569999,-273225472,225773628,-1073085301,-922872716,-352320837,1963408462,3192842,-26032,-960299008,177158,-990719512,-2147267522,108331004,-1417681792,1202324203,55328393,-402652742,-1214124548,1019280898,-1340575152,-2134573568,259135996,-1207953944,1354438656,702796032,-1560064994,113640119,-1023343792,11862448,109975734,-1977220274,-401669826,-2135363911,10534407,1877540659,-1899459598,503533086,-2132309497,-561283100,-150737967,-880040461,-1410129744,-2084364522,17009726,99104372,-1579469841,100728858,-654901224,4470411,1397773142,-1705815213,4777,313498198,29032448,112640,922702678,-1706033128,4901,-1961434173,479062258,440183846,1443236724,-62003119,-502833575,-1010725908,1396395328,1027423804,1381124927,438714689,464001834,448994216,447224728,459545391,458890037,456792890,-397075537,48766027,-1950130944,-940405766,181510,851544832,1958742765,-1965345864,1992506076,947922438,855798797,1255181275,-1576880224,-1084882245,113640139,-1224736068,-402606592,171704761,-1293417611,1946565633,1946172665,1954495545,1946696748,1947024424,1946827849,1947941985,1945254499,1191544858,1676199678,-1136754687,-831193086,-898368710,-339214778,-1335825467,22931463,106413291,-1946063640]},{"sector":17,"data":[-1178497335,-1262551026,-777063911,132746209,-1493225889,92805570,1593916136,-876689666,1372490242,-1017600781,686296496,-385175551,-202899165,-8459777,417881264,-404201983,1364414719,243976499,652739259,1482381820,184502761,-401574666,92930126,124985404,343148860,-2147466008,179262,-16119947,-805436556,-12654258,-829796521,-1286397776,974054151,-2146994683,158599485,-498086914,-1155650830,48114178,132219083,1952406524,518342,-1075053598,-1336946946,10872840,-1595400016,-385306624,11534491,-1962993943,-338744629,3598343,28377835,45876934,1962031616,1962621458,-2001983986,1676166917,-20447744,-370810170,-80019764,-939591308,-20780730,50333672,-369556751,1793654456,1962949632,6547462,-1970267413,1959733963,276056339,1207864151,1969204978,47314439,-1009833269,-24188579,686309552,-396927232,-1973485844,-16324130,45881078,-1325500439,-23992038,225708348,158539836,-396447664,72876035,1364414528,106387026,46608011,133830632,1499094623,1405311067,1465274961,-953251066,-393759742,1048640587,1946157769,-58267389,119158504,1499094623,468239195,1968328704,-1270972404,91488258,-352266520,-66131965,45352646,-1017619967,46405258,326488586,1978547176,-125310962,-1628960395,-1326352904,-1341986048,-1010824449,1962925544,-70129659,-1950091541,55813057,-1979681560,-389707064,-527826835,1369686410,953889539,1946166046,1393462109,1926052355,-20698539]}],[{"sector":1,"data":[922720448,-11337660,1342184502,16777114,1394510592,1927232003,1745209,2303544,653668468,103482040,-617414632,55713418,480368643,-1222183424,369502978,-1705816064,65535,4470527,16777114,1342621184,616759299,438760975,-166808832,-25115661,-2147257831,-628418066,45553287,989443816,1946335286,116797149,1946430757,-344266486,-1962716255,-1023232234,1397838342,47310928,-410991677,1976109695,1341816888,1337078642,1981349504,169391618,-401508928,1642654856,1309052416,-1960791293,-1012141117,-1276461848,1357117008,1577077736,-422457813,-102121077,1975519995,-1873286397,1381061456,-352065451,1459691240,-315431434,-523124477,-796133237,-167751496,65065443,1489931216,-1158509741,-756547504,-320316160,1516108800,-380085415,-25105425,-1241353703,5290008,-523115018,1354299531,717684224,-1947797771,-397032504,417917956,1309052416,-1960791293,2145681603,-880027253,-100422669,1576498509,5290179,-162402165,65876709,-1948200511,-1031120392,-1057046230,-772789352,718703334,851640021,-1947563018,-1010267178,176154496,-2146077239,275927290,-25145166,-1241352680,1975519768,-15210233,-1770733558,1381061456,-364648363,1459642088,-164436234,-523124221,-796133237,-167751496,736154083,-829686280,-225750184,-150974278,1042650,-385971363,1576796199,1482381658,518726377,55451275,-1014047858,-645143855,1465305995,1583326707,-100404733,535917901,1472957379,56601587,-176861702]},{"sector":2,"data":[-1276890429,-1974430944,-1732171070,-1963947200,-1731908922,736660288,1599123691,1279182019,93005315,-805731901,1008169479,-2095876832,177982,-1070396299,1337641267,-369391080,183041641,-2132571648,-1410105372,-991415319,-1962718146,65720791,-789937711,721581575,-1009677366,-1426069272,-369302969,110028820,-1070398642,-1221132349,-18644990,-388906101,-218738510,-2013087582,-1962756314,-1896117295,1124290054,2133295142,-2114395581,1913114874,1979648786,1144454926,1465341696,239770,-402068736,113698764,-1895759024,-1023232250,-208976413,-225778038,-804265344,-789655314,-1126162,1342355254,1493011432,91602954,-352307480,1976106512,3008517,-922827942,333974901,-1224306944,1342621186,-20774653,-402426424,-1017511934,639021800,1364592301,1509483240,-253622434,379709635,1443277862,-790081455,1582913784,-1007754745,1329877837,1229979731,1162674246,1498566477,1297040128,1230258512,4541506,1296912195,776228417,5066563,1397575491,1027818832,1347241300,-326412995,12643457,-1594075306,1183318263,16359678,-1577236856,1183383570,13605626,1183383552,-1547684872,-1633483882,60990211,-15960321,127535734,-1962934258,-1275049954,-1960719024,1183319110,1954588927,12773635,591298606,1014300717,369522373,23248647,-1197103707,-1934950334,-1070355504,2126818219,97118218,775780980,-2127727261,1970106362,176079911,638250728,1230454145,-2128190859,776864381,-1665639819,-1706029537,65535]},{"sector":3,"data":[-1070346101,753653902,1970286141,1778024710,373126246,1891011871,1073789183,-15960321,1444809334,-26032,-1958739968,494142020,-8874355,503407288,-1706027438,65535,1912619069,84470019,1946159933,84142339,1996431126,175570700,185067752,-1964608320,101252678,-876936969,-12615678,130483317,-106951424,457041920,-639040653,176079873,-1006298392,775752318,-2128120464,1969646074,-1155590623,2139095118,225720833,-2147120346,91568892,-1996469061,207522823,-1005953399,-387446146,-385649660,548929665,-148471808,-207360256,15835904,8449153,-57997546,-1422974792,-1423940680,-1274382651,1008848176,-2146209021,1966735740,-2018792190,-402186498,-142145053,-1431566570,-92983748,-12204506,106873888,41403686,1204233798,637717250,369383308,-2117301497,721453249,-1952123953,46972916,2142838550,-2119896320,-402620220,635963123,207522827,-16091511,1996426358,537369098,521535488,-2147438402,1232339004,-401965372,1460013439,-1098053866,2088828792,158611969,567089588,984891652,178957483,-1191545408,642723676,1962886456,1698178567,-1442745089,-1431560354,-92946422,-1769136362,12124024,1931595069,1891011874,-155175937,1954611014,671135747,-15960321,1444285046,546740816,-12779520,-1995541249,-1191219578,567100416,1954595574,178182,-989818135,-1058535818,1585891077,369099007,2013471,-9527669,-12544371,567099316,1491796851,1981840,-2037707147,1295908672,1024750682]},{"sector":4,"data":[259280218,-2037792717,-789053622,-11762039,-1962853655,-1308670842,736154373,-1979758458,-151033210,1946353478,108971080,-1996125402,654269574,-1996339829,-335582074,145788995,-150538698,41156864,-466482256,1855884112,-851528449,521558049,-2130753802,-1410854796,-12126711,906458240,2098887,-488046591,55240706,-1640249228,-1032650902,-9664887,-12020085,-754667182,212949218,-930354989,-9527669,-851312456,1788775201,16482815,-1157402096,-1641476128,-1319895190,-1948003580,1855884235,1553895167,1372730367,567099316,1539849049,-1644098699,-1098645668,1962999658,1821281224,1317440511,-1983839233,-1946196858,-1979756410,-989896058,-1979755386,-1929419130,-1983839296,872376454,1486261193,1855884287,1107343615,57876941,-1946206743,1392461462,-12544371,-1962926919,385838750,-851463137,-462267871,-1929377863,-1946206018,201288886,-385649198,-986316657,64523293,-1948741946,-1983511801,80184071,-337321398,-12126526,-989170686,-1985149322,-335586170,39774233,-639040651,283870206,268499841,-1014298509,-523041615,-4717589,-1635036929,-919339154,12112267,-1960719038,1509912222,-10707314,-1269706189,1579273535,58050107,-151085079,1963130694,1552321312,1060351,-9927031,-10058041,-1991376640,-1979751754,-1895865210,313304,1855884032,-851528449,-12126687,-385649662,-1634860678,1183776606,512501496,503709766,-16222465,-1224800650,-6619296,1342177535,-1544534389,1183514696,4891634]},{"sector":5,"data":[1946257384,-196703482,905981091,-1560276319,-2135424956,697125,790156,-1030827469,8954662,-1978758106,8436224,567089844,871646862,108447231,-164422514,613067436,-126500853,112804,2025229739,-1407248641,1975519914,1190549754,578028031,-10307899,637959876,1309695372,639404366,-988908151,654272134,638868876,-384678519,521535698,135522384,-1962222616,-1895866722,-850348861,1183732513,-161575948,-850742197,512439841,-75300623,-1962641921,-1258332002,1528941896,238852691,-1098186752,-1903427742,-1232339100,-1769210008,-661717146,1376671835,-2095688379,646516460,-611450878,891598928,109846989,512294932,-1906835438,-100657658,806784038,646522368,-2094661586,402665006,5117580,4990601,-410267250,1443307259,-874826926,1192674606,624932916,-291888691,-1912602593,-1260876864,639749456,4589198,378414842,-1960443826,-83866586,521061507,-998027939,259254276,-1543879029,1256718354,179890183,385875896,1183469599,16229118,-1560459638,1183514873,1221626,-1258791285,-1205744304,515571857,1144454912,1397759488,1117082,1583306752,-1034033781,-1004666870,1156057726,-1105261051,196681656,531034880,-4588349,-222285057,1166747310,550273275,-44725466,539019905,1969368637,1643806980,521585524,-1476331616,-1474005867,-385649663,1206386956,-166563061,1971388230,-1009044733,-402652744,1541998151,112191707,-401880600,451413479,-1309439227,-216626426,-1948069120,201280158]},{"sector":6,"data":[51016923,1006594718,-1962773549,15835603,-1635000109,512360268,-75300623,51279103,-1979749730,989917470,-1962772776,135838659,66477571,50566686,50568734,50569758,198706131,-1962773056,1943682014,-1982166270,-788466922,13009390,1927166728,-91532531,134279041,1527686632,-622315149,990438161,1912664854,-388330750,192086361,15932987,1323849842,-162303487,335607558,-2125458059,-2088763154,1085866207,1448562688,327981649,-1957167104,-2081883554,76736525,-1930404215,-1907821986,1183400128,-163183628,107302,-10582391,-1996484603,654269574,204427,-1980342741,201285790,1190577115,276070655,757243950,587598382,101330477,57945380,-1698440397,65535,-193675253,2433690,-1900006656,-1960427326,184549398,1022653906,-2082638078,33573438,-68626828,-166956279,1954611014,112843,-1191267095,314468352,209125121,369784575,580538454,1073741858,-380107659,-1952776694,-1912602587,109979330,-1960443882,771817534,-1423103583,757834030,16097707,16359595,-1105258838,1085866266,-979045632,1959069302,8435970,-1527514741,2098887,1290272769,1354773252,-26032,1541996544,186420223,-1911917093,-1960380346,-1996477410,870026780,-1396100106,188818570,385381824,2025229599,172076287,-2080737856,-372174143,-372119087,-511645231,-1992211970,1405351502,-208993103,-959186037,-427702317,-410910736,1085865999,1448562976,746906,-1072997632,-628423819,-843070471,-12204542]},{"sector":7,"data":[651899680,1191545004,-143278070,-1406738805,158646282,-160101828,-12270042,-400652032,-368669695,46906113,1124075462,1948270467,1065370374,-956664576,-343864057,512230092,1438843595,-326898549,-1604889086,1183318263,-1895380993,-956366848,536934406,16058055,-1070399481,-1577013086,-106823433,531021568,-956157976,872477446,15835904,-1379942349,35579935,91602955,16189126,108461968,-1710983425,8626,-402358588,-1849818569,-1948349696,92939983,1179059336,74788412,-812917109,-311050230,1968193408,25133328,158680649,-108268661,-349699911,508646206,9551367,-1409265985,1975519914,-18182,-402615873,1583284670,1962934077,-150551012,20777216,-1559268352,-240975629,-150551040,1153826816,837353727,-976669951,96928854,1170688336,-1207941630,567098624,-1995142346,1418409493,39160066,259202838,1229980871,1174553799,9551616,-1962866200,1047871704,-402358588,-1250624425,1970286141,1778024710,774272102,757284480,-1609075456,1183187191,16229119,-2082152728,225837823,-1560328566,1153827063,-1041694465,-373280000,-919404354,45666867,186764610,1023768018,57803490,-1174363159,-104923037,112896,-1174333976,-239140832,309504,-1174337048,1321140260,4176128,-402588184,1706688778,11583232,-402636615,-68681490,47038208,16678272,-1514528651,4241664,-2147427864,108347197,-113210,1170607339,-672653057,887640832,-407217154,9420544,-402652487,-306577226]},{"sector":8,"data":[16105216,-402652487,1874460842,16236289,-402652487,-140509026,-1963973632,-2147419866,-1005973532,-1174341726,-1849753598,2013440,-402619928,1051984014,28320205,-443851169,311901,536920567,-397342092,1029242919,1299578879,-2131984047,517769984,1364399703,2599834,-2134605568,-12756736,-147687937,1965031617,508974892,5892103,118380294,-399005761,526254159,-1073042772,521075317,-1204312134,567098624,57876246,1593835448,521061215,236954299,1347886675,16777114,-1021372928,-1194773679,567099904,-1260942503,-1021194945,-117242082,548425537,-961612803,-67108283,-1070400317,-1946157127,1101984479,1339684673,309649211,-12219866,175397948,108277564,41171516,1405348331,1394606267,1570394194,1526726696,868466699,-1705815077,65535,-2097148155,78708946,-892090157,-2146442112,-661917466,-1312564725,-1946973436,-741878789,-253328954,266830335,-1960393984,1308624950,-72063,-2130550899,-1912602909,-31128505,-958492929,1509949446,67271,111411199,137791744,50775808,503316736,-968828786,1291845638,401033,538249,-936653173,200329,-958689720,1291845638,67271,512557055,144900102,734563072,243878347,1126039555,-617358450,-956151809,136775,50612167,105352960,1074284431,2138563,192266251,-1107295048,1541935168,-1715457280,-1085058877,92995760,695517194,1966800000,740297744,-1261401503,-2145268466,1946157693,-1260942572,1931595067,-12126708]},{"sector":9,"data":[-1207536512,-689438717,-1017619463,539984,1153370997,3194370,-352309528,2025851658,178179,1476395752,3194563,5290832,-57941205,373131318,1398216272,1096858,387072,1481688195,9550275,374390835,1448154711,16777114,-994065664,572959,1946160872,-1105261051,-1077731400,96346060,666343936,-661782528,2891406,-829749490,1464989235,1499440883,179047540,-2131003968,-294322116,868469003,16228544,-2130753802,-989986188,1313429443,1094995023,1380396624,66,0,0,1048587776,-134206173,1838822004,-1912602585,-1948807976,71187444,-385649408,-1896218134,-1962933226,-83885530,-981209973,-672653808,646520577,-1896218622,-68777001,516159939,932859986,-1912602579,-1940236072,71186903,-1960676352,378469108,646643716,-1946484734,281379820,1474825872,36080102,-678495744,536602251,-401698621,-1021319610,61259347,846577675,116787939,1948254455,886938371,16189174,777418133,757481088,-397511424,57933966,-1912577560,-1946152442,104408792,913571840,249772011,16189174,856126496,-1678711104,116794589,1972699383,302419488,651725824,1593,-2144463499,2958910,1273498485,-402426880,-555220953,1540053760,67845763,-1995737856,-1711011042,11490,-389293429,376700970,267110707,1946165736,67565069,108266244,-402128711,1642332192,109502602,-461372412,167978236,-1016994108,-946929869,574524198,-499238144,568640257,15401228]},{"sector":10,"data":[-1047911962,15417574,1088865674,2116297188,568721643,-436096829,-1342117054,-1019025920,-1464090573,1393446957,16777114,-1145031936,240129004,-26029,1891303424,-1898279935,-485520422,41389007,855932868,-2082959680,-1510799165,-13374997,-1705552041,11929,-1705552041,11942,24165372,-628172148,-1595732085,-946929869,-989692021,-1014823817,-1510737400,-35132421,24165371,-628172148,769855371,-946929869,-989692021,-1047853961,65065288,-2081422344,-1477244733,-1946492812,-2027552188,1149829701,-204217598,-336562777,-1006830899,-986818730,-1976284362,918892036,67777615,1979260694,135456866,-402649154,1399980124,59508423,11534337,587630126,-386248659,485031825,-20715265,57141499,771952872,757335806,3025050,-628404224,567103668,1526740712,567103668,604962350,25880621,-23009030,-67150616,597831256,1228333,-402651160,1610090441,113558366,-1031011430,60294798,-1494614221,1381061377,1038636550,-1942060059,-160169725,1499072350,521585499,-1962695517,-1962916810,-167753154,-1794923514,-2144456843,2958142,-30518923,-2144525818,238910,1465279092,960922,-2103814656,-402653159,1558773683,-706222074,-352146200,1048587844,1962945827,180002,-40216746,956301359,1962953278,117321234,-1998050012,251539199,954740004,-387026431,96075996,112900,1085593995,-1070390835,939756707,1946395910,-30087165,-854851400,-155176159,-2147419898,-1834810508,-116984319]},{"sector":11,"data":[57950208,-1023306589,-1532813546,-1899416829,-1844561471,638153985,67112587,26349193,26492547,638153984,67243659,26480265,-2146934040,238910,434635636,-1543047426,192255235,-402509848,-1603010525,-388573463,57999387,-393206549,-1070399456,55445127,108314635,176593488,-739704832,-1522630448,91488259,2098886,-30489855,1965892366,31713324,16320246,-1106742000,-963969015,-402628376,-1070399107,771985571,757335608,-2027025547,1345136902,3200666,-30489856,774710022,757284480,-397839103,-6684225,-402652929,521538254,-1962833176,-486303730,32040969,-1191048728,-1705967615,65535,-1962933314,-486305778,-1845050341,-1899852797,788476865,757544585,689868334,520039981,521547047,16359619,1930078952,-1945712886,-402652925,-1007027466,959365171,1965893894,59810787,-2127751750,-1962901268,671135948,1360417294,718379600,-998178816,-12779392,1114962431,-768358093,-851311944,1379365409,-106436528,1515778187,774599929,757675657,-105846701,723421486,-919381203,12112435,1914817858,-561111535,872415161,-851462958,-851528671,-1329389791,-150538751,578065664,1929668328,271629832,-335900184,67221523,-8388421,1342194742,-1705815213,4221,-1013333965,-1874951344,544538627,477431976,28836520,1073837056,-402652994,-1834746075,-1810462461,-113448957,60169865,1961101912,1964288049,-1740733651,645201923,-1559956504,-173997150,1064192,1912603064,213794817]},{"sector":12,"data":[-17831936,-1996252509,-402416618,512358662,784532382,757466878,16777114,-26112,-2144468992,2957886,585630580,251538944,-806867674,-2013318400,-2096888258,-764280321,163055223,-102635264,67647115,-388532759,1743257670,116796928,1963011365,105637897,621707310,-1094516435,1048772614,1946157968,-25171956,-30537749,1965892110,2811930,-402633752,-164757396,19735814,1055394164,645934598,-1006752475,621213230,158663725,772242152,757403264,-164707580,70067462,-1259861644,645934599,-1006949083,621213230,158663213,772156136,757403264,-164707582,36513030,854067572,645934598,-1006818011,621213230,158664749,772181992,757403264,-164707576,137176326,-1746400908,645934598,-1007211227,59772555,-1047603741,34507558,-942873856,263686,915088896,1951268864,77669965,512435712,-1960443898,637536270,661131,-2097148737,58000126,1342181567,106058067,-26025,-1073020928,-125087884,-1107100029,997523458,59770510,922691159,-14286836,-1711272394,65535,-1047845397,-679876544,-1030871180,512686219,46007184,-930370304,-970545933,1390936069,-683480873,-1996488258,-1996224458,-352057794,101121796,-1878618620,113714691,2,796498627,-628424704,567103668,-151081752,-1794923514,-1986393484,-1711275982,12942,1071271657,0,0,0,0,1258291200,1162760773,76]},{"sector":13,"data":[0,0,0,0,0,0,0,0,0,0,0,-1912597853,378283712,-1993998336,-1962933730,117319384,48758792,637920004,263934,-2097036413,237118,-31060620,-1996487418,50567198,-2096914914,235070,-31060620,-1996487162,50565150,-2096916962,238142,-31060620,-1996486906,50569246,1208197662,1355006094,179280464,-1962475520,-54512680,-770965709,12128372,-1934888064,12681665,1254198800,-880022805,-1933333773,302419651,734039040,-1547684904,-1557790702,942014464,1946158342,60334851,117848102,-1560054784,942015392,1946158598,-2144991719,16779326,988286071,1448543990,655268432,132644864,-31062018,1962936334,429524486,-1023410127,1514045486,-143507148,1912641000,762288882,-617414656,-1030818253,-1960390260,989856790,-1908575023,272531930,1968194304,302943027,-1909595392,953305,990634752,-2145684022,1086,-661908364,1087934024,204347,512427635,-259325949,244045966,-773128190,1477414,1976699648,-101315667,-561107084,695394107,47900755,1976699739,1925397252,2001692,1960512256,10676229,922685298,-661913592,1493101800,-1946154846,-1021372712,-150538504,141889536,16320246,-117345088,1048786627,1946158091,1364414711,106387026,-400615906,1048629792,1962934307,-558438395,417920235,-123475968,920335355,67837575,567103668,1583286047,1482381658,168230595,303992324]},{"sector":14,"data":[2001664,1003523072,186545347,-402098981,95944744,-1944292864,137822163,8054784,565848,1912605368,34507530,-1912282368,382659545,168754719,-561200380,-1101799885,1810381824,-398412800,1935343624,6154476,-2095135751,1962541051,508776511,3474074,-1946514688,-1185391632,-15994880,-247789963,-829750669,-850341325,1489058593,-1944881671,12747226,735743503,14648305,-687090037,-1264790155,-1658729154,-561200353,-1101799885,199769344,-398478336,1918631848,1090567732,118380318,-1707177170,309556,254067595,-777371388,-773074453,-487861781,-1172369681,-919391142,567133835,-4717709,1608027135,-1590770913,251999299,-754667264,244040680,249758624,-1909538418,-399227618,-1070399450,-1950141491,-486301682,786009849,876938894,855642600,869413833,-1191234570,869072912,60825230,872363004,244002550,-372165565,-73010182,1405296406,1148215671,7041897,1885435731,1702521171,-1900006656,512435904,-1960443700,-1962881514,-473297973,5093398,-2128202803,1970225981,512306698,-1993460669,-1087093482,-1480908894,876591415,234881722,240324183,1381043793,16777114,-1094700288,521024602,1448545872,-6662626,-1593835265,1060910143,594682228,104521508,393491546,1346797580,508974862,940284502,76218368,-956349303,190579012,-972589614,3430918,1017912555,-2080672386,914949062,-1070386022,-399003457,112325308,-1557208877,1069036609,773967157,877076105,1225165870,-852184012]},{"sector":15,"data":[512306721,-1943129013,-1707848442,65535,877634350,1360431406,877901876,1822052366,-1090519008,-1984350297,1355754296,-1705945330,65535,-1662515442,1230026994,1548138667,-1430244437,868425494,-150538551,225776640,16320246,772175296,876680843,-1976646847,-2144052714,917782762,-372170291,-372119087,-372119087,-470294025,195,0,0,0,0,0,0,568654336,568780580,521061371,567092660,50775598,516096057,3415706,378088960,314063105,773967157,955326089,-217674706,961329720,-773320016,516104191,-250165970,-401428424,-1021313082,-1705881314,14621,44161166,-754536192,525949672,381165263,773967157,955850377,-83456978,966965816,-1779951952,516104191,-115948242,-401166280,-1021313142,-1275010328,780289,11798644,-2147482392,-1664941621,-115409106,-1957313736,74353644,19806510,1560704569,-114360530,-58655944,116683778,1364350806,33325139,196350837,183738600,1539476416,1583307353,46816519,1977879040,-402213883,1499198345,123625306,-1205940387,567096585,-383874770,109850168,297416939,-402018246,-1021313268,382021150,162543849,536805864,860888771,-153579840,134485766,525862773,-382795986,1012982840,1006924815,-1662028516,-383844562,-326413000,106058067,3756186,-2082959872,17470,-970056844,20513542,1913144889,172304,1929922105,-78162424,1593840360,1499072350,525884763,1048587983]},{"sector":16,"data":[1946171651,-435441641,-469701856,1975519776,-223746037,-970062222,3736326,280501955,773967157,955063945,-284783570,890615864,-1993465395,775484702,955713164,-1338298694,-27596784,-1338249798,-28121067,-661733325,-2024798280,772032774,-1590100061,-1557265392,806107389,520360099,-986833213,-1338446570,-30611440,-183057106,-401231816,-1070334430,-1590765426,279132413,-6214140,71934776,998687519,1000946582,1000291231,1000553405,1000291234,1003043743,1000291231,1000487842,1000160162,1000487888,1000487842,-1957348390,74353644,19806510,505312825,-577835725,-47281362,271485240,780873220,780744959,1562313801,-315687122,-58655944,-2147126765,544407292,1381434966,1347441489,-778517366,990297824,-2141655037,-13759292,1499158548,1577541466,414502749,-1947082520,1532516600,1583241817,431287787,-823533685,-385305359,868479433,-346334272,302037205,1337641267,-402147560,-768347723,-1360458060,-240391951,1482213515,-346071205,-241178440,-1360307365,-1219491912,1499027712,-422533653,-422517040,-703928624,-578030710,2129205940,270679537,-4520843,876466175,-1157335792,785317889,955592447,689868334,1424941,1978219648,-179312381,807670221,62394428,-1207732992,281870337,-1896467517,-2147369018,125075624,3553574,-1089571836,1084784642,958799732,1963196982,1019225112,638481856,637796513,67241483,62850933,-104363136,12843203,-16843264,-16843010,-16843009,-16843146]},{"sector":17,"data":[-16843146,-16843146,-16843146,-16843146,-16843146,-16843146,-16843146,-16843146,-16843146,-16843146,-16843146,-33489153,-16843009,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843009,-16843009,-1,-16843009,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843009,-16843009,-1,-16843009,-16843009,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843264,-16843009,-16843009,-1,1006567167,-1,-16843009,-2,588905983,588905773,588905773,588905773,588905773,588905773,588905773,588905773,588905773,588905773,-16777427,-16777217,817364479,-4653569,1002044927,-16908801,682950143,-4849921,666303999,-16908801,649199103,-5046785,632552959,-5177857,-22086145,-1965345793,1425768669,-472831113,-1014897711,-695583644,-1024011530,-2147256896,-489603098,-783611022,1258713826,24306385,1066020427,1979711360,-18428,-16809789,-12777099,-1963821825,-2145260571,225836543,-12728014,-1979550465,-339637304,617056783,-2132440449,594772223,-419250126,460645386,393379900,-1157581744,-1993458593,240324103,182884947,777519104,-1019453536,0,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114]}],[{"sector":1,"data":[1958742784,939968299,-1996488702,1459884046,1381172822,868479464,-6664000,1459618047,16777114,1958742784,-1050089465,-1021712304,-850591816,6734625,416153859,6815747,277479683,6946819,94044419,7012355,354550019,7077891,355991811,7143427,840696067,7208963,357433603,7405571,1047003395,65537,357892355,7471107,89194755,65538,229966083,131074,805503235,8126467,521994499,8192003,728957187,983041,895877379,1048577,89850115,589826,896991491,1114113,751108355,65539,192020739,1179649,670957827,131075,189268227,1245185,876085507,196611,919404803,1310721,825164035,262147,1049690371,327683,113836291,393219,177733891,8978435,729809155,1638401,184156419,9043971,171835651,9109507,172294403,9240579,1043202307,327684,210305283,1376258,178454787,9306115,190316803,393220,1049297155,1966081,255721731,1048579,97845507,1179651,97255683,1245187,898236675,2359297,977076483,2424833,100466947,1441795,785121539,2555905,785645827,2621441,40960259,10027011,233767171,2162690,875757827,2686977,827064579,2752513,201392387,10158083,660865283,2818049,869794051,10682370,17105155,10223619,610205955,2883585,548143363,2949121,948896003,3080193,255262979,2097155,329318659,2162691]},{"sector":2,"data":[950010115,3211265,249757955,3342337,477954307,10682371,116064515,10747907,636289283,2359299,248709379,3407873,153682179,2949122,284688643,2424835,481296643,10813443,1769731,3538945,170590467,10878979,62062851,2555907,481886467,10944515,76742915,2621443,867565827,3145730,16122115,2686979,723321091,3735553,807600387,2752515,939065603,3801089,7340291,11337731,749535491,11534339,112722179,3473411,10944771,3735555,832962819,4849665,254411011,12320771,427557123,3997699,429129987,4063235,688128259,5177345,320864515,4194307,220070147,4325379,330367235,4456451,1047331075,5963777,6095107,5701634,208666883,5177347,164954371,5308419,942276867,6356993,329908483,5373955,234619139,5439491,947650819,6488065,32506115,6094850,248250627,5701635,260768003,5767171,245170435,5832707,254017795,6029315,259916035,6094851,2004055149,1802398835,0,5,0,0,20547,65535,524288,8,0,0,0,0,0,0,0,0,131072]},{"sector":3,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65535,65535,65535,82837529,65535,0,0,524304,65535,67108866,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-65536,0,0,0,3,-13750738,255,0,0,16776960]},{"sector":4,"data":[0,0,0,0,0,2130706432,128,0,6400,1441281,0,0,-16777216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201326592,11,0,0,0,0,0,0,0,1426281728,3,0,0,0,0,65537,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,196614,131432,196858,131436,196870,131468,197010,131444,197014,131460,197064,131428,1953301195,1819506547,1668115310,1936485226,-1866465280,587211523,805359104,0,524292,524328,131092,1350717442,1835102817,1919251557,805306483,-1711274496,167775232,-2130706432,33104,1572951]},{"sector":5,"data":[917536,65537,1333809153,1828716651,-1866465280,754986248,1308675072,1392508928,1702130553,1633099885,1852403314,2097255,2883592,720904,1342308352,1851868034,544501614,1684957542,5242880,8519688,655368,1342308352,536871042,-1275064320,335546368,33554432,1866695248,1852404846,1998611829,543716457,1851880563,1685217636,1717920800,1953264993,16243,2097184,524468,30,1182945282,1763734127,1919903342,1769234797,1931505263,1461740901,1868852841,1428190071,661808499,1967595635,979723369,2097152,11796520,2621448,1342308352,1667585154,1902734952,544433525,544370534,1851880531,1685217636,1886404896,1633905004,1852795252,134217843,5120,838860800,768,67076688,8257663,2097208,65550,1342373889,1851868032,7103843,939536128,234889216,1792,-2142240512,27471,2004055149,1802398835,-1866465280,754986245,973130752,1342177280,1159743049,1919906418,134225920,134263808,2560,-2108685824,1735357008,544039282,1701996900,2037150819,1685024032,1701406313,1701650532,2037542765,536870958,-1275064320,335546368,33554432,1631814224,1953459822,1852793632,1970170228,1919950949,1936024431,1735289203,536870958,-1275060224,503318528,33554432,1866891856,1852383346,1836216166,1869182049,1702043758,1767317605,2003788910,1934958707,1931965029,1769293600,3827044,671096832,134263808,10240,-2108685824]},{"sector":6,"data":[1751344468,1970366830,1713402725,1394635375,1684955508,543453793,1819308097,1952539497,1936617321,524288,20,3276800,1342177283,2130837378,1937009920,1852601207,1699619328,1461740645,1280265801,542130500,1701603686,1869881459,1853190688,1869770784,1835102823,1851867938,544501614,544109938,1752459639,1752461088,1629516389,1768714352,1769234787,460549743,1953066569,543973737,1701996900,1919906915,1869488249,1868963956,409235061,1819308097,1952539497,544108393,1818850419,1667309676,1702259060,1701137940,1869422692,1679844722,543912809,1667330163,402653285,544501582,1970237029,1830840423,1919905125,1869881465,1853190688,1953451551,1869505824,543713141,1869440365,1713404274,1126199919,1651534188,1685217647,1851867931,544501614,1701012321,1344303987,1931494985,544235895,1701603686,0,1937009920,1329796352,1763717453,1869488243,1986076788,1634494817,358968418,843927363,544434464,544501614,1767994977,1818386796,1329799013,1629499725,1126196334,540167503,543519329,544501614,1767994977,1818386796,101,0,0,1937009920,1852601207,1886339844,1632634233,73757811,1802658125,1919111942,7105647,0,0,1828716544,1937208180,1835757164,1818978915]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[-342872853,1458278454,-1872761968,-385659927,-873921699,3,0,0,0,0,-1207959295,20783104,134789120,280494964,-1983145664,-1946151106,50338054,1418183,-852162120,471763233,503745536,20167168,-853210696,-987837663,-1207952362,567092489,-1265513697,1007734031,1006924807,188445444,1961659081,-1261292765,-1273967358,1007734024,-2146077408,-717618494,-956371598,-494872950,436109313,317448562,-1279387978,7071744,-402626328,-1070399387,-624224563,-993737532,-993737532,-993737532,-993737532,-993737532,-993737532,-993737532,-1279277884,1701990432,1629516659,1797290350,1948285285,1868767343,1852404846,774792565,-1062002642,-993737532,-993737532,-993737532,-993737532,-993737532,-993737532,-993737532,1373226180,549049738,1372662272,281871028,-1190153300,162791425,-1023536947,-18029991,516118982,-1900006576,386332376,125110276,-13754536,-469754834,1966554208,-13722381,-83878882,1465255509,240341330,28376095,1771142,494256138,281874356,121434251,209128308,91358268,-352277016,1042435,1771206,1515805440,1560763999,-1261494440,-1961833213,-990737458,637540158,67015,38127398,-947716096,-1194183932,-391443955,-12844963,-1073085324,548405877,985857706,653030101,553614720,-347143307,851902198,436109522,230217074,49251082,1946499366,46629880,-1430244437,585683507,985857536,-1292406059,-2134442496,-294512130,45405835]},{"sector":10,"data":[516165837,-276627433,1049175556,1371734018,281871028,281872564,2012512336,28957834,-855002112,-1017554928,-956241944,-16769018,570869759,872414976,605981147,639535360,-389467392,-12779297,992507135,1929388574,572426500,639515392,-1996196352,989865502,1929388046,537823492,604912384,-1996196352,-2097142770,-108982079,-948829568,-923041469,-2084670976,-16768450,-3997323,-2097142266,268444678,1523396,-1426062408,-1582579661,103481380,-1582628832,103481382,-1196752862,-1414856703,-1962929985,-1962925538,-402644978,1001062499,1929385278,281117458,2362939,994307442,1912612382,722070498,637542942,401033,1515204,637792131,147081,-1157107528,-148503936,-150993882,212018931,99923968,637585595,403191,-1557728265,-1960968178,-1912591346,855648798,1175779318,536535622,1392924611,-773205679,-1947610647,-1966896135,-754964466,5290728,-133963017,102941579,229703721,-133963565,2754190,1493535526,-1017182373,20774912,270514176,532153204,-53765824,-1560273107,-389872808,-1070333963,1237244046,1030404,12166643,48816,1006930470,1999401991,-401690546,12124385,524303800,-523166345,84290342,652792064,79606,-617364346,421431846,652464384,-1912125559,244002521,992346968,1912603406,-1074384106,-108986338,91439104,87460646,-202780416,-389285723,-872873810,117409000,871861023,-1077899584,263783497,866513664,41152,12062925,4096176]},{"sector":11,"data":[41158400,515815604,868257280,244002559,-108985512,74661888,343691,-1510741551,1511051,281870772,-1979704928,-855264056,-1965346032,-1948003879,-108394665,281871028,16000,-1977387259,-1224729314,-478129408,-854871009,1048599312,1963261952,551780366,-338491983,196397054,-1194651443,-617410557,-1966403379,977120,-997568276,99139838,-1973752832,-725957662,-1019023869,1139193520,-435866696,-423327166,-469701822,216042081,-1184766461,-18734080,-1979305031,-1975327039,-1186797883,-18729984,1642513546,57972163,-1207812119,1048838129,1963000716,146270222,-385879368,-206042959,-1153569793,1048576000,1962934304,144893957,-1696070677,47880,-1946160200,184724238,1946331406,143321093,-2098723861,47880,-2130709832,158526,1978140277,32172296,-385323800,1049297380,1044054538,343147020,1954547190,205424911,1459565314,-1705552041,65535,1442977983,-6662370,-1560280833,-259325922,-1593549427,-1073020020,20777080,-402230016,-1192687159,-11119872,-1711129034,486,-1962439845,-1962928586,50338878,-550458,-150978397,-1547293721,1200292332,406227714,437160704,-1715076352,1050933751,736229120,32416710,-150583509,1220608984,-1174800487,237699097,-1053097922,-1047854466,184677027,-1957003584,103482439,-956104212,-550584,721440955,989872158,-1962770749,32547779,-1962918239,-1962917858,-754667056,-775386144,65065440,-774372415,-1946973213,-16650226,1442966582]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[310281046,721777920,54979008,-1727899208,-6664110,-1996488449,-1072966586,-1705973388,584,-1980086647,1589967958,105286650,638080651,-1993996407,1183515223,206998282,71797030,106400038,138921766,1183514624,1200170514,-1948742902,-532248313,16777114,-530674944,-14125057,1996433015,242679568,-1157627976,1347616767,-231681,1603009142,341835562,-1697495415,65535,13794947,1187448949,-385875746,1996423845,242679568,16777114,-834238208,13125319,-565786880,1187512319,-1962934040,126554718,-1948236151,207588312,1183385483,-1948742710,1183411783,1975520214,-530674932,-1960157301,1183396935,-899773482,-1994242165,1190648902,1965031644,112645,-1070923029,-941472119,53318,-1711137815,622,20856451,-756480,-16696314,-1711016906,65535,-1980479863,1183446614,-296318484,-150983240,1174524014,-195115788,4162342,-907474827,-26111,1048772608,1962934594,1074200564,-195116031,-1707606234,65535,1019627144,-1207339521,-1705967618,65535,60438271,16777114,-967407104,61994538,-805051693,-1947576695,75465690,-14713088,-1711039946,731,20987523,-16091648,-1593753586,-1863777984,-373282048,922681483,-6683750,-2097151745,81982,251595126,1084293440,721611521,-195115840,138906406,197936777,-1962249024,1178195526,-349866804,-195115944,206015270,-1996487899,-1072962490,2122516085,1098186978,48529027,2122529652,896795620,31999687]}],[{"sector":1,"data":[239504128,1964000779,-195115913,105351974,-942782839,63558,969426571,863893574,-772245877,-94452506,651052683,1963737145,-197722339,71014915,1048772608,1996489020,14018819,20713215,-385794911,1191117005,-1949963272,1191168118,-991505976,1183578718,1082730190,-2017057268,1342177818,-1030962293,1375869445,2078800,-26032,1391132672,-1946919228,958844486,2054489671,15091399,239504128,-1995417973,1451880518,-96039950,100423307,1183384090,-631862824,-1024316,-1977159610,-664878073,651708159,-1073084536,1191121012,-427916314,-1948158689,-970532770,1996423175,-193527818,-1946532213,134610006,-1957670398,973470278,-11513342,1996427894,175570700,-16222465,1642595958,-565802752,393592843,922690539,-6683660,-2097151745,80958,736691062,-4183041,782356550,-800704255,-538377357,-394361859,-1005554432,-2094597538,1946159231,-767128826,-2210167,966448246,-16777209,-6630282,-1962934017,-2090934714,-443874579,-900899553,-1957363698,49054700,375309398,575114022,638738116,1589905289,1200301590,308200485,38242598,-1005816065,-14281122,244327031,-990110744,-1993993634,209125127,41418534,-1058533744,308200699,38242598,71812902,-953810944,1607,639000260,-1004714101,-1993993634,1589905479,1200236054,308200474,172460070,639000260,-1004845174,-2010770850,1589906247,1200236054,308200476,206014502,639000260,-1004583030,-2010770850,1589906759,1200236054]},{"sector":2,"data":[1006838796,-1341885183,-1341986045,308200449,239568934,256362022,1204168194,1589903632,1207313942,74711332,48956080,1589903792,1334453782,-253657052,1589952778,1200104978,126559761,638475972,1589905289,1200301590,241091604,38242598,639000260,639780747,-1005304021,-1993994658,1589904455,1200301590,241091606,105351462,639000260,-1005041781,-1993994658,1589905479,1200301586,241091586,172460326,639000260,-1004058741,-1993994658,1996426311,2013210124,-401698814,1589967612,1200170510,209125122,74972966,-370667888,241091834,71797030,638351103,-1878624257,-86579186,638475972,-16365687,-14283658,244320375,-990198808,-1993994658,1996425287,2013210124,-401698804,1589967463,1200170510,308200460,138906406,638475972,-1005697143,-1977216418,1589905991,1200104974,308200464,189237798,638475972,-1005500536,-1977216418,1589906503,1200104974,375309330,692554278,638475972,-1005369464,-1977215394,1589914183,1200104974,375309332,726108710,638475972,638797570,-1005238392,-1977215394,1589914695,1191323150,1200104979,375309334,142574374,-1341885440,704834305,-771509824,375309536,206539302,-805052032,650185441,-2145103990,-1056247327,638475972,-1005107320,-1977216418,1589906759,1200104974,1204233752,-1006632935,-1960438178,1589907527,1200170510,375309339,306678566,638475972,-1004714103,-2094655906,1946159231,178181,-1070923029,-1961468220,1207314160,91554572,-352321096,197143298]},{"sector":3,"data":[-28931642,66336511,222874,1010729728,158728193,20713215,-352240479,-4183294,1996428406,276234002,-15829249,1996488310,74907398,1577606911,-1034033781,1478361110,-1957345904,-661774612,1443163267,637951684,1443526539,638607044,244332543,-990295064,-1993994146,-14264825,244318839,-990317848,-1993994146,-1000996281,-14283682,-401698761,1589967144,126428684,2013210198,-401698814,1589967128,1200170508,-14264830,244319351,-990312472,-1993995170,643171399,-1878624257,-118036466,638344900,1443252105,142081830,-437776752,207537400,138905894,2013210198,-401698804,1589966987,1200170508,-14264820,244320887,-990348568,-1993995170,643172935,-1877379073,-127277042,638344900,-2145826935,-1006499250,-953809314,67655,17450742,-1070988172,28312299,1589960912,1334453772,-236879849,135053578,390563878,-15567105,1392906358,-1005947137,-14285218,-14286217,1610556983,-310157820,535137026,248139101,50336000,16946177,50331904,16948481,50333696,16956417,50333952,-16612352,50404864,17070849,50336000,16863233,33559040,-16669696,50372096,17068801,50336512,16889856,51811328,16921601,50339072,16859904,51784960,16788224,53199360,16896257,50349312,17017345,50350080,16825344,53661184,16878848,85352960,-16670464,40448,0,1167087646,518818645,-326903666,-2091493606,1962936958,-373282043,1586168519,-164132086]},{"sector":4,"data":[1950353476,-6663414,184549631,-1947831104,1418409028,-129595082,-1946528119,1552626300,-1960867060,1183392327,600897510,1183387461,-398002200,91488768,-352321096,-1983894782,1187511366,-1006632718,-1977157538,1006838791,640775425,639846283,1965377291,-431584473,-1947187575,529208924,-2011805814,1190652486,1950351590,1963146250,-431557109,-955943678,127558,1183384971,-128006922,373787430,653149833,-16222209,-1705970058,217,637951684,-1962784887,1589964358,1194010360,1996443656,-294191114,62106,106873856,71797030,653811396,-16091137,1996486262,17537774,1589903360,1200170502,-128007162,209190694,-624897,714796662,-1006632959,-1993996706,2122516551,1567883506,-231681,1589903989,2013210360,22256153,1183383552,106874108,653674123,1166739337,-62520574,172460326,653811396,-14977025,-14286219,-23455369,50331649,1589967942,1200170502,256243468,158598144,731448715,-336014910,62925570,-1528169402,175570688,-1695123713,402,637951684,1996425097,2013210122,27630082,1589903360,1200170502,175570690,74972966,112794,106873856,71797030,638220031,-1710852097,459,637951684,-16365687,-14284170,-6682505,-1006632705,-1993996706,1996425287,38112010,1358710275,133018,106873856,172460326,-1005947137,-14223266,1979652983,2013210114,-26087,1174601728,429543676,-1006632958,-1993996706,1996426311,292945674,16777114,106873856]},{"sector":5,"data":[424118566,638076299,-1978775671,-2010772923,1166676039,1200104971,205883921,306677798,653811396,-1004714102,-2010773922,1589908295,1200236280,106873886,340232230,653811396,639584138,-1004714238,-2010773922,1589908807,1200236280,1191323168,106873885,373786662,653811396,639846283,1948600075,-352210940,-1312806398,-991899133,-1977157538,65110031,-1056251440,407865894,183624064,106874049,390563878,653811396,-1005369462,-2010773922,1589909575,1200301816,106873860,457672998,653811396,-1006221429,-1993996706,28843335,-2090902016,-443874579,-900899553,262150,12320771,763494401,31522819,18153727,25165827,18219263,2555907,734134273,1167087646,518818645,-326903666,142016284,-1710852353,65535,-1981004151,1854139990,1585660652,1187447022,-2097151772,1962936958,1144946751,460587009,1344274616,-1149185,-1130697610,-1996488704,-1073018298,-1070916235,-16660503,1996425334,-294191354,-1695779073,65535,185222793,-941394752,-7098,-1710590209,214,-1980086647,-1039401898,1996428149,-294191350,736917247,-2070261568,-352321535,-461470766,-385649664,1048576236,1962934596,9890051,17450742,-1914109068,536918016,-294191280,-1695779073,65535,199640713,-16026176,496634486,-385875967,1996488572,37198566,1183383552,-195655182,-1981266295,1183574614,-61436934,-1996471803,1451882054,-330920968,-336574839,-161561582,653674239,1589905290,-398000152,-1962440666]},{"sector":6,"data":[1325396038,1975520240,175570916,131482,175570688,16777114,-230257920,-1980475765,1451883078,-431584260,-385202551,1183514763,-61436934,-1981266295,1107683926,-163149568,-1946659191,1183444038,-1005392912,1191179870,126494454,-1548604,-2010716090,-263812345,200298239,-1804864,1996425846,-327745554,-1705983957,65535,1996439531,108461832,16777114,-465139456,-385649344,1996488489,4372708,-1202695527,-1706033151,65535,-1804545,1996487798,-327745542,16777114,-461963520,16777114,-94452736,661619494,1602430530,-165281751,175440903,795837222,1602430530,1589903409,1200301818,1191912995,638219301,1109618563,627016486,175570688,165018,1144946688,192151553,21235398,172395264,-1962696541,-310179258,535137026,113921373,-1873273344,-326412987,-2082959842,922686188,-6683660,-1996488449,1451882566,-164777734,1174604390,-230258184,-990620023,-1960381858,-62486265,829800459,705316490,1996443876,108461832,16777114,1958742784,-228670455,71797542,-1070923029,-637303,-1711016906,65535,-336181621,-228670410,38243110,-940685687,61510,-231681,1996487798,146297072,1347590400,16777114,-6664192,-1996488449,1589966406,1200170738,-2084771068,-443874579,-900899553,-1957363706,1122796524,1187403351,1048837868,1996489006,306613010,1964262923,102754563,-1292602,-1006233367,-1977215394,1183322183,442403786,1183385483,-1948742678,931859551,-1989262197]},{"sector":7,"data":[-1072963514,1586170997,710904810,-1993062517,1150017606,-431584990,15091447,-1961986784,1207364190,91554056,-352321096,-1983894782,1150021190,-398030552,-1993718645,1589961286,2139104790,292814866,-1030962293,1375736325,162981968,-339720567,-1069103355,1589903360,126559766,197019273,-1958120000,1175130694,-1005882348,-1960440226,-1102673657,716715755,1962889216,108330762,392346,179935488,-1980107008,138264134,-955941632,572998,556675,1996426869,-1099497702,16777114,138840320,-506169,-96024577,1589936127,126559754,39291686,-1982052727,-1070866858,-1979824503,1183448134,31779300,16777114,1111393024,-193658879,20973311,651976388,-16040053,-947190668,1589909483,1200301788,-465163518,-150983239,64523241,-1960387490,-6664185,-2013265665,-12795322,-21493387,-6663937,-16776961,-1711039946,65535,717379210,-754732554,-1982856222,-628361642,294787,922689407,2056913818,-2097151996,81982,251595382,1084293440,22669569,1424605227,-1707671807,-26109,1048772608,1979711808,1074724617,21012737,-1070923029,651976388,-1995946101,-1072970170,1183517556,-968476192,552152948,-597769215,206015270,-1996487899,-1072959418,2122516853,57934062,-2097084695,1963126910,16640259,66092675,-186055819,-597769216,575114022,651052681,-1995028597,-1960390586,1183393095,1200301778,-733574883,440896038,651576968,-2011478134,-1977166010,1183325255,410451928,-1927907585]},{"sector":8,"data":[1343667782,1183666950,726669006,1178161344,638744006,51136502,2122320757,91488970,-352321096,1354771202,-1673473,1996482678,-461963294,-16222465,-51902858,-230258425,-2081139063,1962985086,-360170,2081455999,-134267643,1182861687,-2096627470,-1962871722,1452013638,-195675654,92212604,1995589177,75399942,-1958579200,1452013638,-195675654,92212604,1928480313,75399942,-1960151808,1452012102,-129594892,-1946528119,1183441990,-599356476,-1981917557,1451883590,-834237442,-1949546871,1183437382,-599358502,-465109203,956378785,57926726,-1946282263,1175130694,-385649388,1589903556,126559758,-993114487,-14282146,642779767,-1709803521,65535,-992983415,-1960440226,1183384135,1200301778,-733574904,172460582,651576968,-2012526710,-1977166010,1183321159,410451928,-1927907585,1343667782,-15436033,1183650422,-1202710834,726663169,1996443840,-394854426,1357018879,-186101680,-230258426,-1946921335,1452013638,-195675654,92030079,2012366393,-230230211,427032832,15091447,-1005423358,-2144989602,637669455,738740097,1207903745,-230230255,57999872,-990095895,-1960440226,731465735,653840834,-384743679,1183579202,-28963844,1458111349,-129567230,-10980289,-1711016906,203,-1966835969,-466945978,-1325385691,736678659,-1957674798,119928902,-1706016768,65535,1022117512,-15960578,-1711016906,1788,-16640791,-1711016906,116,-1982052727,766565974,65824502,1589959750]},{"sector":9,"data":[-1978668278,1183368262,173982956,-1946401141,-1993933226,1468605959,173982722,639616038,604784522,1963015171,173982747,639616038,556931,1589907061,-867792114,-1962440410,501996102,638213828,-1960435772,1589912135,126428686,638213828,-1960435772,1589912903,1200170510,375309314,71797542,638475972,-1006352503,-1960438178,1589904967,1200170510,173982726,639616038,-1004714101,-1993994658,1589905479,2139104790,930349066,15091447,-163744508,1963255366,173982775,639616038,51136502,1589907572,532948490,206015014,20710180,1589906805,532948490,142574374,-1005751296,-1004139938,2139104799,74711066,48955824,19185706,638475972,-1005959288,-1977215394,1589906247,1200104974,375309323,206015014,638475972,-1005828216,-1977215394,1589907015,1200104974,375309325,256346662,638475972,638470024,1001415,2139104768,125108749,223313958,-1005589759,-2144989602,1963134335,1333798405,1589904141,2139104782,91554318,240091174,241091588,289916710,1190592512,1946222840,1333798422,-2128215536,19662919,15091447,637826306,-1005500417,-2144989602,1946159743,173982806,639616038,1736576,1589922165,1333798414,1589904400,532948490,206015014,20710180,1589907829,532948490,142574374,721712384,-1207702592,-768933887,-1961992508,126559944,731503243,-1177347135,-101253118,638475915,-166639871,1950414918,241091592,273645606,-129567224,-1006078848,-2144989602,-1978658737,-466949050]},{"sector":10,"data":[-443850914,1622621,1167087646,518818645,-326903666,-1705617568,65535,20725379,-2096663296,81470,379193204,-352321524,1040646123,19702017,20055609,922698871,-2053504108,-2097151989,83964422,60045055,-150989384,1342255654,35927807,16777114,1975520000,841909009,922682625,-1952840812,-385875959,922681873,-1768291436,-1996488695,1996426822,176724500,1183383552,525758,-1916123511,1183435846,-967406396,11945671,-1000422400,-1950071041,1191168638,637897418,1191118728,-1233222730,-1914274766,1183435846,-1269396302,13401731,28837245,721611520,-1203336768,11159239,-1404647680,1183514624,-1371108914,-1983101301,1996468294,-1438216924,45633558,-6664192,-1962934017,1177267782,-834238038,732972683,1183427654,-830569524,-1962574848,99339846,-137476469,-834237992,13401731,1183516028,-1962546228,-654848954,-2083764599,1946204286,-1982269691,1586220102,678952738,-1205438465,-11534333,1996469366,1354771378,-1957670832,1610558047,-1538881244,1342182328,16777114,106873856,185043238,-385649216,-1706032887,1084,-1935260023,2122557534,1232339108,-11485141,-6642570,-1006632705,-1993995682,1975520007,13494531,183409232,1183383552,-1135179334,-14524789,2013210743,243750,-1267269808,1387427583,-4557057,1996466294,710904742,-349937665,-1983894776,1183431750,-197722182,116431363,1183383552,-1034516032,-14387457,1996469366,-1133051982,-4557057,1996466294,-1069118042]},{"sector":11,"data":[1586188310,142081982,688003,1200293244,-1962349814,1200340574,1356396298,1342180792,16777114,340146944,1586172789,710904610,956305569,91567175,-352321096,1354771202,-1997046808,-29571002,1183535477,-1136260166,1589908084,1066083850,192518743,-1705574400,3015,66336511,768922,106873856,1463782182,758682,-6662400,-16776961,-2120608650,-2097151988,81470,1676215159,1041170177,20881665,-1962845207,1175173702,-1005030212,-1960441250,-1835378881,-2147483636,1962920062,630871814,-2147483647,1979697278,10873091,650141380,294787,1183454581,1357130440,-5736705,244360822,200685288,-998148928,-1960394658,1589904455,126428682,650141380,-2096478209,81982,1048774517,1946157378,65903111,-336920576,21104383,650141380,-16040053,-947190668,1589910507,1200301760,-934376958,-1054085846,-150983239,64523241,-1960394658,597315591,-2013265916,-466967994,-26032,-1073020928,-21493387,865751295,-2097151996,82494,251595126,1117847874,721611521,106874048,1463782182,821658,343342848,285594,-197722368,113285635,1048772608,1979711806,1041170185,20881665,-1070923029,-1592887669,117375276,364445996,65140480,507939824,-1994369397,39094532,-1994635637,1183515716,105154842,-1994897781,1183516740,172263702,-1961867637,1149833814,240421132,638213828,1149831051,310151440,-2000140662,127538244,-1207959539,166395905,-6635477,721420543,-2090901824]},{"sector":12,"data":[-443874579,-900899553,-1957363680,49054700,-16353537,-6683530,-1996488449,-1072955834,1996426869,74907398,16777114,-28931840,-1946270069,79846885,-326413056,1444867203,639131332,1962950531,310280198,-1207602176,48955393,1183432747,1975520238,543081491,276791334,-1207339774,-4521985,114485631,1183432747,-431584792,1212032,1183516788,441879320,1183517163,441879320,-1996485627,1451883078,310280444,-1005947648,-2094655394,1946159231,112645,-1070923029,-990493047,-1977157026,1589908295,1194862112,-2130021363,-536811962,-1813490047,543081476,289928742,641037315,605112202,1963015171,-94452714,407369254,-2127268863,1610671686,-353872255,-1003951360,-165217698,1963006023,-431587042,1451456512,334169576,653942468,18368502,1182861684,-2096889626,-1006573482,-2094654370,1946157695,310280242,-1005423616,-1960379810,-1023203513,1347601036,-335622168,408863751,105351974,639393476,1946306361,-431587062,1451311104,-1006592792,-165273506,1961890119,-94452684,407341606,1183379492,543081698,289901094,1178267684,-2145749790,1946215038,-431587060,1451335680,-352285464,-431586552,-396983552,-330905731,1589903361,2139104800,527695886,243236902,-1000442621,-1977157026,1006838791,-2096728831,1946220158,239531526,-1000377342,-1977157026,1006838791,-385649663,2122514716,57934070,-1962863639,1183385158,341755134,-1995994330,2122572870,1048379646,-28931248,-1957635849,723969094,-1706032569]},{"sector":13,"data":[921,-350986556,-94452693,604473894,1963015171,-159480914,-139954944,1073745478,1182900597,-2116026138,19458134,1589941739,-28931308,-1006139098,-1960438690,-462014153,1183517310,-1715065884,216730545,638869188,1177225099,179411428,16777114,-431619840,-2081925615,1946158206,341754893,637814411,-385595511,1183515514,1347590412,-1713092981,1589923922,1200301818,1347590406,1025178,-1706012160,4046,1183535186,1347590410,638869188,1385760651,-94452656,71797542,-1001368935,-1960438690,1385759815,265656912,1347551232,1039514,-1706012160,4206,-6664110,-1006632705,-1993993122,-1073019833,199820158,1204233731,-385875708,2122515202,192151568,15629955,28837236,721611520,273058240,639393476,1183385483,341755134,-1995994330,2122572870,259850494,-134330741,-28931624,38243110,-2082191831,1946161278,-465138861,1178329297,-1958117378,-1952842170,-101194674,1038763657,92143624,149571271,1342224384,-1957670247,1385818694,280205904,1174470656,-397012506,-135641461,1183442030,-364475420,-523041871,-1728051155,166086153,99346518,32130759,-465138944,2113816121,1476442142,1375732410,-465138864,-1711389141,-778416046,83886096,-763142144,-1206457591,45766656,-1957670400,1177288262,1347590628,16777114,-431619840,-991406575,-1960435618,1183384135,1975520254,8644867,638869188,-1996208245,2122572870,1416888336,-775804007,-465173512,2113816123,112711,-25755824]},{"sector":14,"data":[-1696303361,4474,1038894729,92143621,99370695,1342224384,-1957670247,1385819206,300194384,1174470656,-397012506,-135510389,1183442030,-330920988,1175034184,-397014554,738096779,12117110,1389505480,2096499536,-372864251,1183514837,-28955676,-1207907095,-11534236,1996425846,294754828,1183383552,6600948,-94452656,108527398,74972966,1155482,-129595136,112720,-361300144,1164954,-129595136,1080963,731466612,66638274,1178335302,-1203864076,-11534335,1996485750,302619384,1183383552,343532,1187448190,-1207958036,1385779200,-330921136,-1706012007,4671,300303873,1183574102,161040620,1443489350,6600936,-94452656,108527398,74972966,1185946,-129595136,-327745712,-1695910145,4846,-1191688567,1385789440,-129594544,2096383545,-196703480,-336050645,-129594618,-1712044501,-1617276846,16777234,1444013638,-293698584,-1957006080,1589905478,1194010136,2996482,-880025097,-936655988,-1980739959,12120670,1347590480,638869188,-996604021,-1960382370,-101244337,-991279479,-930409378,71797542,-262224743,627018534,1183448055,-1715403796,-157659054,16777234,1444013638,-360807448,-2096726271,2114055294,-431587063,1451476992,1183514856,-364496404,1178155636,-1206747414,1385763840,6600784,-361300144,-336824577,335591440,-1202695527,-11534236,1996483702,326408938,1385758720,326933072,1174470656,-397012506,638869188,-1996077173,1589961798,1200301600]},{"sector":15,"data":[-28931832,947175435,98846347,1178271894,-2130084354,19719238,31936128,738096779,12117110,1347590412,1342177720,75298315,116115083,736380555,-1202651578,585826314,721522872,-259267514,-1727266632,28856402,-167030784,-963967876,-963967765,-1202661129,-1706033132,3856,-1706012007,3997,300303873,1589962838,2139104800,1031012362,638869188,556928,1190605685,1963196430,239531551,-1004964604,-1977157026,-2013060089,-1073028538,20710516,2122519413,225771766,935671,-2145422076,-352131250,341754905,138906150,639655620,1946830648,-431587063,1451429888,1589903592,2139104800,276037643,638869188,622464,1317013109,434847974,638869188,-1006024822,942022750,158600007,15091329,-396983540,543081472,209682470,-1005554688,-2144988066,1962936959,-431063034,-1004934272,-1977215906,1589905991,1194862112,-2130086900,201385542,15226499,-1947842933,-1956714410,549608933,50340864,17588993,50331904,17896448,53314048,-16532224,50402816,17394945,50333184,17533697,50333440,17399553,50333696,17388289,50333952,-16619264,50404608,-15971584,50404864,16794369,50335488,-16326656,50405120,16813825,50335744,17526785,50336000,-15968768,50405632,17478145,50336256,17525249,50336512,17627904,51811328,17904128,54401024,17382145,50339072,17473280,51784960,16952577,50347008,16954113,50347264,17787136]},{"sector":16,"data":[54476288,16879873,50348032,16782337,50348288,16801793,50348544,17639169,50349312,17643777,50349568,16893185,50352384,17510656,53432576,16891137,50352640,17434368,53662464,16886785,50353152,17377280,51798528,17818368,54355712,17462528,1439232,0,-2081649835,1448548588,15222471,943620864,125108225,20594307,-1710787584,53,117435371,1048772922,1962934588,1044284167,125042689,55706,-1316096,-16695802,-1711041482,65535,-1980086647,1187508806,-385875724,2122514809,326434820,-1947050357,1451951686,240597256,1194919285,-2094959604,1962935422,22079747,-1947050357,1451951686,39270664,1072235380,1946630401,20506883,-2131599733,1979651199,14608643,15236739,922686581,-6683660,-1996488449,1451883590,-398014466,766509057,-151888245,1174606951,-27882500,-1980873079,1048834134,1962934592,1111393031,125042689,16777114,-1316096,-1006550522,-1960382882,1962281783,-339309820,2996242,653156036,-1962776585,-58800936,-1996387546,1589963334,1342121710,2139301386,931069962,637771937,1946437433,-295779312,74972966,16777114,1975520000,-295779088,71812902,-2094661632,259326015,-1963827573,-467004345,1448538251,-16361240,244378230,705199848,-1947709212,1975520007,-83959,-26032,1048772608,1979711810,1108279049,21143809,-1070919701,1586170859,276299762,16777114,-228685056,-1710065665,632]},{"sector":17,"data":[19664639,-1191105375,-503906283,-1980086781,1183578182,-330921486,16139975,-159481088,-1961067243,1191177310,-126448660,-1963440385,-16283644,-437520826,368199299,-1577826561,1178140972,-385649676,2122579580,158597352,66336511,16777114,-1808335104,-26109,849412096,738601729,343297,748758646,20095745,1929381181,839304966,-16775935,-1207725002,653721621,-11534030,-1711135690,65535,20856451,-16157184,-1593754098,48955710,1048821803,1979711802,974061321,20619521,-1070923029,1577058744,1575324511,503318210,1430622296,-1910575989,82609112,106859350,2013208459,74972934,-397361109,-259261042,-1710852353,65535,-2090940789,-443874579,-900899553,1478361090,-1957345904,-661774612,-16222465,28837494,1609060352,49120253,1562371467,313933,1167087646,518818645,-326903666,-11118824,1996425334,-26106,1183383552,2113004,-1070922377,-2096970519,80958,1048774517,1946157374,50043399,-336920576,20842239,20987523,-2096663296,82494,479856500,-352321536,1107754987,-197722367,59611651,-930414592,-1962922568,774305754,-1983380735,1586100302,-1707671558,70687235,-259325952,1187511947,-352321304,956664623,578153542,-16497153,1166672453,-1964758521,-316012979,-1992244949,922743366,-1600519270,-385875965,-947715601,-398000376,956379297,-915216314,-1280257,-960959370,-1202708991,1385758727,-26032,-1706033152,65535,1358710409,321178]}]],[[{"sector":1,"data":[-297367296,200300169,-13732414,-1711039946,998,66336511,257690,-327745792,16777114,1111393024,58130433,-16662295,-1593753074,-1192689342,-295779327,-1995994330,1191178822,-297336850,19793411,1979776317,-1707671781,67803651,1996423168,77372156,1996423168,81435388,-1460994048,956379297,1996568070,-1707671753,75930115,117374976,922681654,916521882,-754732799,922702048,546964004,184549378,-16353856,-352242162,-1707671623,4495875,-259325952,-1192462593,1385758728,-18352,1392508858,-26032,815857664,805764865,-1309111551,65524483,-330920962,1170670985,-956301054,66629,-2013188448,1183450693,105186034,1166592254,-1707671801,32414211,1183514624,772146162,872823553,-10062335,-1711016906,1234,32654987,-16698362,-1207700426,653721645,-919928524,922701905,-6684130,184549631,-14780992,-1962856434,103412294,1996423476,88185596,1996423168,88709884,-857145344,-197722114,10983939,-930414592,-1962922568,774305754,-1983380735,1586100302,-196687878,837484544,-362753,1996486774,-260636692,-387025153,1183383694,-262764050,242598411,19926783,703874699,-385798650,1183055548,1191128568,-230257676,1928611385,-59310137,348826,-59310336,75162,-197722368,31824387,1048772608,1979711810,1108279049,21143809,-1070923029,20856451,-16157184,-1593754098,48955710,1183563819,723053554,1044284352,175505409,20844287,-385794399]},{"sector":2,"data":[-1070858948,1593653225,49120095,1562371467,313933,-2081649835,-1000994068,1182991454,-1960443388,173982727,38242598,637820612,16793473,-1070922124,12773785,-1962260853,201657430,-129595136,-1946528119,1451951174,4326662,-1979955575,1183579734,172370936,-150983379,-336557096,-60898286,654067455,1589905290,-129564680,-1962440666,-1073000762,1589962613,138840842,638028070,280519,73319424,1699187494,1732709158,1182994293,1589932292,1204233738,-352321528,71729942,108461937,-1710983425,1636,638213828,-1006090359,1191117918,1065362948,116684032,-1710983425,65535,638213828,-1006221431,1191117918,1065362948,-990612224,-953808290,2631,19793663,-1962654069,-1956772266,180510181,-1873273344,-326412987,-2082959842,-11138324,1996425334,46307846,1183383552,2113016,-1070922377,-16720663,-1315243914,-956301309,64582,20463235,-2096663296,80446,-258341004,-352321530,973537259,1010729729,125108225,20856451,-1710787584,1801,117435371,1048772926,1962934592,1111393031,125042689,189082,-1316096,-16694778,244381814,-2013088024,-12782010,-466996876,61993099,922740435,647627674,50331651,75269104,-14123520,922682444,1754923930,-1979711481,-466946490,26536016,-2080618871,82494,251597942,1117847874,-15865087,-1711039946,855,-1070864917,20856451,-16157184,-1593754098,48955710,1048821803,1979711802,974061321,20619521]},{"sector":3,"data":[-1070923029,1593591435,-1962742397,1297948645,1426064586,-326898549,1183471128,-1947981308,105286384,-12128213,-1711041482,2045,-939899255,62534,1586175467,71731962,1981040440,343900171,-1962576641,340207814,368723587,-1577826561,1178140972,-2395404,-1711041482,2098,60438271,588698,-364476160,16008903,-1961170176,1183509086,105330692,-963966858,671500072,1182992199,1191119082,19964404,1928611385,-1707671586,153590275,922681344,177865716,-1996488701,1451883590,-263812610,-940419447,62534,1589911531,1065559792,-1978698496,-467008442,38222118,690357366,1182990967,1191128560,19833332,1928611385,-164777767,1174602854,-27882500,-1996477179,1451882054,-164777736,1174603366,-330921476,-1578215799,1317667118,736963076,2996673,-1054088713,-336312695,-161561582,653674239,1589905290,-330891284,-1962440666,1325397062,1975520244,775301604,-197722367,61446659,28835840,-443851264,311901,-2081649835,-2141844756,1979647102,-373282043,922681486,-1516633190,-1996488695,1183512134,-1310447100,65065731,1183446598,-2585606,2139292239,108986370,294787,922685054,-1097202790,-1207959543,1424687105,-1963303285,-467007929,122128976,-27006896,-369013,-26057,1183514624,806289398,806783745,-754732799,-1983773726,1183579718,-129594886,16533191,-58817792,-1951171320,1191180382,-25785352,-1963047169,-16283644,-437519290,1575324510,503317186,1430622296]},{"sector":4,"data":[-1910575989,2122340056,74841862,636207147,60438271,648090,-1948742912,-427751818,61931775,1090512595,-1707671806,169187843,28835840,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,922683116,798622618,-1996488697,1187445318,300613884,-1946526069,121177670,1182996084,1191053562,-62485764,104588330,-462290640,-244026,60438271,476058,-62486016,-310123478,535137026,46812509,83891200,-16497152,50406656,16867841,50331904,17048321,50333184,16878593,50333440,17284097,50333696,17298433,50333952,17087233,50335744,16875777,50336000,17316609,50336256,17356289,33559296,-16496384,50406656,17225473,50339072,17384961,50343424,17006081,50347008,17007617,50347264,17036801,50347776,17059329,50348800,17188865,50349568,17213953,50355968,17219329,24576,0,1960512339,35621658,14123225,74771722,48957320,-651556983,-1962877056,1541597983,-1864856381,-326412987,-2116514274,1442878188,308185943,2139103115,125110530,16777114,-1962531328,-16051586,898304116,17319158,870908788,712805123,118521475,1589910901,637194,1149945342,637602825,1962950531,-1946278910,-2014834082,-2094273537,1963528318,308185887,-1962896711,1944586822,-1958657537,1810369606,308186623,-1945477495,116067414,100826243,-1159134347,276726530,-2093845503,1963135102,23259395,34635395,-1070339979]},{"sector":5,"data":[1343387391,16777114,172264192,242532363,-1710590721,65535,-369473911,-605486865,41714433,-352160505,308186045,-1207958855,199753735,-3001345,-1705897354,197,-1710590721,212,-375159,-6679946,-16776961,-6679946,-1929379585,1586359886,678756338,-14256897,369172534,-11332015,-1073018787,1552643956,-148927732,271943,1183518324,-1669035538,-263812352,10388617,200427147,1175188550,-129627146,-1937025932,1859322012,-160508942,10390667,-738955565,1996486766,-227082478,-755969,1996486262,-25864,-1070399488,-15567105,-6620554,184549631,857109696,309788626,16554578,1996423168,-26094,1592328192,273074175,1996423170,27695634,-1070399488,10257545,10388617,1343387391,106138,-92864768,16777114,-6662400,855638271,288787913,1824427265,1444827391,-1705568687,65535,-6662378,1593835775,-1961730421,702775,-131608,261755510,-1962934271,45683294,571392,-369235480,1149960521,1958742794,77221937,1342177281,119194,308185856,855640761,-37164864,-1207958855,-1075314681,1405105149,29989456,1996423168,34052626,1996423168,28744210,1996423168,18323986,1996423168,-26104,-1924136960,1962929742,645201704,18888447,1996443926,108461832,-1995940353,1721433158,-1996488702,1552615510,-148927732,271943,1183518324,-1669035538,-263812352,10388617,637951684,187041675,187040327,187040839,1601504839,10257545]},{"sector":6,"data":[10388617,120730,-1916194048,-1929309898,1358916798,374429214,32283223,1461059584,127898,308185856,-402650439,-1070334702,1184518227,-16777214,1318720118,-1962934270,45683294,571392,-1946356248,-62485705,34635395,2089510261,642313002,1183385483,1200301810,-196703998,71797542,653674121,-1996077173,-1936983994,1859322012,-160508942,10390667,-738955565,1996486766,-227082478,-755969,1996486262,25336568,1183514624,-15143940,1962879092,276234022,-15960321,1996425846,108461832,1594383871,49120094,1562371467,969293,-269762509,1167120524,518818645,-1070344050,185097867,-1961397029,-1886699489,-1895104366,175374484,-16222465,-1610676618,-310181742,535137026,80366941,-1864856576,-326412987,1457032734,-4181161,1996426870,-6664180,184549631,994211008,1962938886,175570703,-1710721281,65535,762626059,16777114,47104,2139825013,-6662398,-486539009,-1948611048,105810928,2126831499,-1527514104,-26029,1183514624,-2090967290,-443874579,-900899553,-661913590,-1957345904,-661774612,1443163267,-2000669865,1996487494,209125134,64461392,-1073020928,104543348,326434834,33244870,-16091393,-325449610,184549379,-1961134912,66427640,309657600,126468147,-1711114241,65535,-26025,1988820992,1962281734,112729,940334788,58063686,101211844,1251627091,184549380,-1956940608,1354773496,-26026,1222836224,1358710409,263066,-1909071104]},{"sector":7,"data":[-1948808254,-1698679816,1134,394861685,1183567499,38242812,142001438,530904060,68852304,28311552,-91546901,-1694730497,1250,-1694730497,1148,75668055,-1070399488,-310157729,535137026,181030237,-1864856576,-326412987,1457032734,-1070334889,185366155,-1957333770,39619380,1041281,-620536460,-2146806133,1618217211,2131164032,-1961657266,-1898410754,449283008,16777114,314671872,179907051,50036736,146350452,142377728,991458563,-1005290287,62391934,-1070355712,1150004139,-1047811308,-997191189,-784660866,-779681155,-1962359165,1604645825,49120094,1562371467,576077,1443394699,309658,-1947671808,-1948610850,108971248,-1190504821,-784662518,-896859523,-201535189,868912036,1403712448,323738,172395264,1478409707,-1957345904,-661774612,-2095911805,1962938494,-339727612,105286490,-1995942261,1451881030,172395508,-1995680117,1451882054,239504376,-1946532215,1183387718,-1948742660,-297367289,16777114,-295793920,-14125057,1996433015,-18418,1392508858,-230257328,1602965526,408944426,-1695529335,65535,-2081405301,-443874579,-900899553,1478361100,-1957345904,-661774612,637951684,17334147,-14274187,1589906039,2013210122,-26110,1589903360,1200170506,106873858,175636262,638213828,-1710983169,65535,638213828,-16496759,1996426358,106873866,41418534,641204006,-2096865281,-443874579,-900899553,1835016,107872259,18153727,109576195]},{"sector":8,"data":[18219263,83362051,1114113,94437635,1179649,97059075,1245185,3997699,932446209,104595459,378798081,39190531,110428161,42402051,1376257,103153669,21233919,50003971,85852161,78512131,372047873,103350274,21233919,56229891,272433153,80216067,784596993,49479683,96796673,73597187,4521985,83755267,4653057,77529091,785711105,88932355,366542849,39714819,106692609,47841539,6356993,102039555,375521281,26148867,8061183,46465027,16580863,48300035,8192255,35848195,8257791,36241411,16646399,0,0,0,1167087646,518818645,-326903666,775848218,1912667393,16693254,-1593774871,994050350,1979790342,872842024,922681857,767034356,874968832,1372138241,506920784,-26110,-1073020928,780339061,-352190156,-197722168,19503619,1183383552,-229209616,-150983240,1174604390,-229209104,-1981004151,782364246,772210433,-196703999,-150983240,1174664294,-229209104,-1980348791,1183578198,-296317972,-1981266295,1183574614,-128545802,-1980086647,1187511382,-352309786,-396442606,652756735,1589905290,-96010246,-1962440666,1325393478,1975520230,-161561372,509734,172395264,38242598,172476198,-1014300672,201704076,-11513344,1996484214,108462060,-402098433,1589904284,1204233974,-16777212,-1711016906,425,-2081143157,-443874579,-900899553,1478361094,-1957345904,-661774612,-952701821]},{"sector":9,"data":[63558,66336511,16777114,-431585024,-1326950775,174519853,-1981397501,1451879494,2996462,653024964,50489335,1452009030,-565802520,652236425,-1725806709,652107460,-148746357,-364475911,653024964,-1725610101,652107460,-148549749,-666465799,172490534,75465510,-1003784960,-14226338,1996423799,108461832,16777114,1975520000,-564214763,173014822,66336511,16777114,-373282048,1589904081,2013210334,38443524,1183383552,-61437446,652107460,-1710983169,65535,-1981659511,1589961814,1200301818,1347590422,558336806,-1957670247,1385818694,-666465456,-1706012007,513,-2097151699,1347551450,133274,-1706012160,65535,-1982970231,1174523990,-464121374,14974595,2122516087,242679778,30965379,-1612119169,-665911552,1996460779,-495517724,16777114,-329333760,71797030,-596328437,-26032,1183383552,-866743862,652107460,-148748405,1589963374,1200170732,-899759070,373786918,637951684,1589905289,1200301790,-663816411,653024964,-1004189815,-1993946530,1589909831,1200170502,-96040190,-1979951477,1451873350,-901346346,-1983097205,1451880518,-767113230,1183514676,-766574638,661962763,-2859324,-1977166778,-262224889,653281023,-487913592,32145027,1325336190,-18028054,19795711,-16687895,1996475510,-529072182,-2197761,1996478582,26929386,-992459125,-148452770,-1993989777,-165273273,1946228807,-96040107,100423307,1183383603,-598308390,-1030962293,-1996475643]},{"sector":10,"data":[1451881542,-94452490,508004902,-1977162710,-316007089,1077985579,-338540919,-631323625,47859331,-150500570,1589958758,-196705292,126428674,-2996597,-1072967090,1589960565,-1715459126,726108454,760711462,591890726,626493734,653942468,53430155,-1983738685,1451873350,-899758890,793217830,-1030962429,-1980742007,1996485206,-730398762,1589923922,2013210362,2013210145,-663290090,-387287297,1589903757,1200301818,1468737063,-899759063,658999590,693602598,653942468,640632715,640767883,1915311929,637957913,1982285625,-899759087,-1949415797,19320918,287713095,1589913943,1200301818,-1933376729,-733574718,-992586103,-1960392098,-1023203513,1183433356,-229209616,-2859324,-1977166778,-262224889,653281023,-1073084536,1589963381,2013210348,71539204,1187446784,-1006632456,-14229922,2090468471,-1006632956,-14229922,-2094658993,2130709119,60858658,71776550,1589907572,2013210334,-26108,-1073020928,1589964917,1204233950,-16777212,-1711016906,256,-2080881013,-443874579,-900899553,-1957363706,140428524,239569702,-1006342409,-1993995170,1589903943,1200301576,74381072,638344900,-1006352503,-1960441762,1861685831,207537158,105351462,638082756,-149665909,1589904494,1200170508,140428296,373787430,-1006342409,-1993995170,1589905991,1200301576,74381080,638344900,-1005828215,-1960441762,1861689415,207537158,340232486,638082756,-148748405,1589904494,1200170508,140428310,625445670]},{"sector":11,"data":[-1006211337,-1993995170,1589909831,1200301576,107935527,638344900,1562068873,1426066626,-326898549,509040138,-1005553979,1586236542,-96039682,-1962254709,140965827,1727524867,73856774,1330575363,105286653,-796138505,2080919295,-125925061,1183566731,1946303494,1946369085,1946238050,1946434609,14608643,-1996451863,1317796982,-729921276,-973713783,-896796554,1325376755,-973635594,-1058276234,1583292412,-1034033781,-1527578608,-1968384533,-790048288,-790048264,-790048264,-790048264,-388912392,-388892464,-388892464,-388892464,-492111664,-1397953575,-388898678,-120522544,-120526639,-388892464,-794101552,-790048264,-772222728,-788999960,-1427582472,-120522544,-120526639,-388892464,-120522544,-372710742,-1968373903,-790048288,-788999944,-790048264,-788999944,-388912392,-120522544,-388892464,-120522544,-777324336,-788999960,-772222728,-788999960,-1426534152,-120526639,-120522544,-120526639,-120522544,-373824854,-1968373979,-790048288,-788999944,-772222728,-788999960,-120542472,-388892464,-120522544,-120522544,-794105647,-788999944,-772222728,-788999960,-1426534152,-388892464,-120522544,-120522544,-120526639,-789000022,-772222728,-788999960,-788999944,-1495094536,167692521,1040253696,268435712,1375798016,301990144,838927104,318767364,-872348928,335544577,-201325824,402653441,-1795161282,671153921,956302081,754974978,-1174338794,1040187649,1711342336,1056964868]},{"sector":12,"data":[1167120524,518818645,-326903666,-1957210614,529205342,134381440,-6682756,134217983,-18431,185104011,-1958316810,142016308,-1705872129,65535,734147481,-196703806,-1064382324,871792269,-1951683648,866846278,-276583488,178440,-1711275589,65535,737822347,865728070,-1983763518,1183535684,-2090967052,-443874579,-900899553,-661913596,-1957345904,-661774612,-1946157128,-620034466,529207924,-16353537,882528887,-1728053248,-1037319629,-1962742397,1297948645,-1946156342,1430622424,-1910575989,149717976,1586190166,-2145416438,2080899711,1808903,34209792,1988870195,1962281738,-1959490717,1175128134,-1941277690,-1916760368,-1070336386,1183558571,-1070355704,149914539,-1157627207,1553596417,-1962934272,1177287238,-1036805642,2089665067,-1898345400,-1952863295,-101251506,105286571,-1421805359,-1951677813,-341113274,-1898345460,1216122305,-1414812757,112811,-310157729,535137026,113921373,-1873273344,-326412987,-2082959842,1448560364,13125319,-901331200,1586167808,-147354868,33557062,28837236,721611520,-498693696,673527,-1207602172,48955393,1183432747,172423122,91490304,-352321096,-1983894782,1190640198,1947205642,112645,-1070923029,-2082191735,1946215038,1380253443,106873942,175636262,142081830,209190694,-1705983957,65535,-1981266295,-1937053098,-120389476,-1949022583,-1634956606,-1980181760,1589955654,-733574394,205994278,2122517365,91488482,13911751,1044679424]},{"sector":13,"data":[-2081143159,1946215038,146704,2122517365,91488468,-352321096,-1983894782,-1072972730,2122517621,108331194,14974595,2122517364,91488468,-352321096,-1983894782,-1072956346,2122531188,745799868,1347469355,-11111169,2006602868,-1996488700,-1072969146,-303496331,209125123,70031952,1183383552,1975520200,64153859,-1207142657,-1706033139,65535,-992459127,-1960442274,1183387207,1200301762,-1102673648,-1981659509,2045367878,-498693375,1960199737,112645,-1070923029,197150345,-955943744,81476,12615299,2122518900,192217844,13926019,28837236,721611520,-1002010176,13794947,-1125579915,-96024832,1183514624,-96060980,451478396,-998341887,-1958120448,1174650438,-599356934,1221346955,2130331195,178181,28836843,-1102707968,-1980086781,1183572038,-96064564,-1037330104,1174665425,-565802558,-2472311,1183648886,-1202710822,-1706033150,961,15484615,-1102673152,-1980086781,1552674374,273124140,-1947187575,1077997126,-1947056503,1177275462,731465978,66638274,1174651462,106874070,239569190,-1205046017,-1924136957,1343679558,-1174145352,1347552249,1392923398,67344982,1182990336,1240007418,-998341633,-1960414208,1183432262,-867826724,-1948236151,1183433286,-632911394,-1928562945,1343674950,1342177976,16777114,-1983894784,1183444550,744262636,-1995421813,1200353350,-230258414,-1962516796,1174651462,1200170710,745864974,1342178232,384583309,-18352,1392508858,106104400]},{"sector":14,"data":[-6662573,-2097151745,1946206334,-196703482,-12696439,2122569294,58458326,-2080473367,1946208894,209125144,-1698138369,1162,-1698007297,65535,13256391,-1166114048,-2096532224,1962992766,30992643,13926019,-806812811,-864124159,-1962181108,-1181103034,-101253108,28836843,-431585024,1347469355,-10849025,-6662028,-1996488449,-1072969146,-907476107,209125121,-26032,1183383552,1975520200,28240131,640965828,-1962379265,939471452,640965771,-1709803521,65535,-1963571575,-754934132,-834237960,12222083,-1511455883,-431584512,-775804007,-1946645512,1174654534,1178288358,-1962377268,-956051898,-1961825472,-1723799994,-120470997,1183565963,-1983829044,1183565382,-968490050,1183434539,-431584262,-1037330112,1174665425,-968490050,2130331195,-867792043,66733611,731496006,-1946627646,-763460616,721581312,-1035598912,-2082847095,1946210942,-339244284,62925570,1174651462,-733608990,-1948367223,1183447622,-599356960,-1928562945,1343674950,1342177976,400282,-96010496,2122553323,57999588,-1006587415,-14273444,1552616055,-1959264462,-14273444,-1399187849,-1996488700,1183578182,-129618954,-1181097775,-101253117,-1963440637,-754934132,-968455688,-1712961909,-120470997,733892235,-967965752,-1946530167,-1723799994,-120470997,62801411,1178322502,-1957331206,1177275462,-1102707718,-775804007,-2080863240,1962988158,62925570,1183433286,-763460646,-1962642432,721611719,-1035598912,65160707]},{"sector":15,"data":[1183437894,-96039970,-1981790583,1996479558,-632910580,45633558,949637120,-16777213,-1746142650,16547459,1996432500,-663290100,162970,-897678592,-15502336,1996426358,40278728,1996423168,70556362,2122514432,57934050,-1202565889,1599995905,-1962742397,1297948645,854218,92733443,763494401,10158083,18153727,105512963,303169537,90243075,19071231,38993923,143917057,103874563,823459841,13238275,924319745,58982402,640745473,104988675,313917441,59637763,506920961,58785797,640745473,16711683,861667329,29884419,678166529,1167087646,518818645,-326903666,-62470396,-1070923776,209125200,-16091393,1996425334,138840838,1342981675,721831563,-1924134330,1343683654,16777114,1958742784,-62485755,-1070923029,-1962742397,1297948645,503318730,1430622296,-1910575989,106874072,641204006,637695999,637827071,-1878624257,-7280626,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,16533191,1354771200,-15960321,1996425846,108461832,385631885,-26032,-1073020928,1183516020,721611772,49120192,1562371467,34130509,889193216,855703296,-1577057535,1124138752,1,1167087646,518818645,-326903666,-62470396,2122514432,896794634,556675,2122526580,695468038,-1962254709,41911071,-1207206904,-1706032600,137,1996429035,142016266,-1207535873,-397410303,1183383736,-62485508,-1962742397,1297948645,503318218,1430622296]},{"sector":16,"data":[-1910575989,82609112,16533191,142508800,-2094042112,1946158718,140413737,2139299723,192677890,1342254008,56986,-15275264,1996425334,1354771206,1342177720,-1996463128,1183579206,49120252,1562371467,313933,1167087646,518818645,-326903666,-62470396,2122514432,745799688,425603,1586177652,-2095084792,2080899711,19576843,48798288,334168064,-16222465,-1070922122,300437584,-62486272,-2080618869,-443874579,-900899553,-1957363708,485262316,16008903,142508800,-1207536384,-2065104895,75399937,-2095221760,1946158718,175570711,-1710852353,662,200165001,721778112,23194048,-1962254709,-163149561,1200347275,-129595092,-33005941,126550855,-1947974007,1200355422,-62486262,58048523,-1962862871,1200350302,-263812854,58048523,-2097084695,1964902527,75400012,-15240192,2013203062,242745100,-15697921,932844151,-385875966,1996423390,-463566070,-15960065,1200295543,205990672,306678608,1343113003,1347469355,637008,1375753658,40016464,-1343684608,-465138944,-1996483579,-1763050938,-94467328,49956483,1183385483,-94467074,49956483,1183385483,-94467094,49956483,1183385483,-398014490,1183514624,-1037329922,1178335441,-1956610328,1183054430,126550778,-1947056503,1183054430,126550778,-2081667447,1946158206,175570708,-887041,-11474314,-6625674,-352321281,175570729,-887041,1183574646,-230282260,-431584432,1357530667,1347469355,637008,1375753658]},{"sector":17,"data":[-26032,1191116800,-1953240088,1325396038,1958743024,-10622717,32786119,140413696,-2096934914,1946158206,108954385,-16026624,1996425846,-25874,1183514624,1575324660,503318722,1430622296,-1910575989,1122796504,1187468887,-956301100,57926,15091399,243172096,-2096335872,1946160254,176063238,721777920,94431680,-1961992565,41911071,-1207141368,-1706032087,65535,-1962571287,1207831646,-1995994365,1187510342,-956301112,51782,-1995946357,1183566918,-834238202,-1928431873,1343670342,1342177976,16777114,-867792128,-1983363541,1183516742,-901370930,-2096740727,2097154174,138840840,1183439095,108954376,-1962377984,-654899642,-1962522999,1200355422,-800683766,2097152317,84928771,16777114,-330921728,58048523,-1962606359,2139355230,57941512,-1962891287,1183386695,239569886,-1948760439,1183387719,306678746,-1948891511,1979965046,-327745784,-2197761,1983502454,-1962640166,-1962677306,-11478458,-560277898,184549379,-385649216,2123039913,142486490,971798271,75357822,65783691,1356744331,-2590977,1996479094,-25898,-1073020928,2129199989,-327745788,-663290026,-666465449,1342588419,267418,1975520000,73656579,1458337535,735463051,1464862278,-1697220865,1375,57982987,-385618967,1183515717,1312248,-940554615,63046,-3127669,-1072967602,-1444347020,-163149056,-523116335,117283408,1183383552,1975520226,68413699,1207883915,-1995994365,1183579206]}],[{"sector":1,"data":[65065462,1183448134,-968439840,1586167809,172461048,-1949284727,1312195,-940554615,49734,1183045771,126550768,-1947711863,1183051870,126550768,-1948760439,1183051870,126550768,-942258551,56390,-1712830837,-120470997,2145142331,54651139,-2081399157,-1962741690,-562656969,-2081399157,-1962741690,-629241537,50873995,-1069119034,58640187,-385830423,1586167984,-263814160,-1995994366,1183574086,-398050826,1183516286,-163149336,-2081399157,-1962741690,-666466041,-2081399157,-1962741690,-700020473,14436039,-398030080,-775804007,-599376904,65602431,-262239233,49301123,1988704139,-262239266,49301123,2122923915,138841050,1183434243,-327745600,-663290026,41862971,-11483253,-2070227338,184549381,-385649216,-947191043,-1995946453,1996471878,2143697900,1355188994,1473804031,-1697220865,1522,58048523,-16590615,-1981031354,1586218891,-1035534398,1577313233,-1962440196,138816455,1002325641,-1962770490,-1033991226,-775796993,-60947485,1191118729,-18290212,13008515,1187461492,-1962934052,1178190406,-1960018468,-422454154,-231933,889187446,-2590977,1183515252,105251800,114268752,-1073020928,1189675893,-599358718,-2083722494,1962987646,9693443,-2081399157,-1962741690,-398030585,-2081399157,-1962741690,-196703993,-2081399157,-1962741690,-230258425,16402119,-599341312,1183514624,-1037329944,1178335441,-1957134628,1183051870,931857136,-1948354935,1183051870,1066074864,-1948615031]},{"sector":2,"data":[-972879802,1002456713,-1962770745,-94467129,-772126977,-530709533,-947189879,-1995946453,-969163194,-963967875,1183515627,-94467138,-772126977,-530709533,1191118729,-2086933540,1946210430,-196703480,1960199737,-599341247,720044032,-774080885,-59374618,-1280257,-700019916,1342588459,-16616193,1922750070,184549383,-385649216,1182990697,1183515356,-599377470,1187499644,-385875514,1183514841,-96074814,-523116335,1342178309,16777114,-733574912,58048523,-1962854167,55049944,1183385483,-1035564078,-772127229,-767163424,1183400000,-59310140,-4032769,1996480630,-763953158,21882960,-2083365237,-1962749370,-364476153,-2084282741,-1962752954,-465139449,14436039,-1960121600,-422454154,-2984445,889187446,735463051,-11532730,1996423796,128686806,-1073020928,-957807755,-599358720,-364475646,2094810681,-599341106,720044032,-774080885,-998898714,-1280257,-193528012,-1962773249,1174664262,-1281732602,184549379,-385649216,1182990477,1183515356,-599377436,1187499644,-2097151802,1946210430,-196703440,-1948760439,1183445574,-599341098,317390848,-774080885,-530674714,1586167947,-16741892,1183571014,-599377414,1183442556,-800683070,198201087,-385649472,1637547450,-1996488701,-1072959930,-11522700,1996483702,112652,-26032,-1073020928,1996427636,-294191346,-1878362369,-137828338,-1685879,1369108086,-2097151992,1946211454,-732001524,1392726014,549786,-495025408,-1962118144,1342104158]},{"sector":3,"data":[1805275907,-16777208,-6624138,-1962934017,1342049374,-431584509,-310157474,535137026,181030237,-326413056,1443687555,1183432747,-28931590,-1980217719,28900422,-196704000,-369736055,1183514923,-129615608,1206453116,-128021759,1988879313,-1962898678,-472777634,957249163,-2091877120,1946221182,-60912862,-771995905,-1962898461,1191179358,-1948003852,8979574,16678531,28845429,-1960645888,1191181406,-1948003844,9113206,-631157,-472779194,-1996065141,-25263360,735802368,-28931648,-1962886423,-472778658,-1962248565,-60912896,1988879313,2113943822,-25263291,-1961200384,1191180382,-1948003848,9112182,-762229,-472779706,-352029045,-128021736,-772258049,175541219,1586167947,-163119114,1988879313,-2097116922,1962998398,112735,1183538411,-96062466,1586181748,-62455812,1988879313,-1962898674,1191179870,-1948003850,8980086,-500085,-472778682,-1962248565,-195130624,-772520193,74877923,116064393,-243969,2122577990,91554046,-352321096,-1983894782,2122579526,-1586233094,1183432747,205949946,2113685049,-20256509,1586174699,-62455812,1988879313,-1962898674,1191179870,-1948003850,8980086,957105803,-562234298,1586174699,-129564680,1988879313,-1962898678,1191179358,-1948003852,8979574,956843659,-562235322,-1962516853,-1991707066,73304839,1223968395,-1956771959,214064613,-1873273344,-326412987,-2082959842,-950661908,63558,687747,1586175860,-1959294198,1183385670]},{"sector":4,"data":[105286644,1458980489,385107597,-26032,1183383552,-129594376,49120094,1562371467,184994381,1057030912,117440776,486540032,134217987,-1040186573,134217985,1845494563,167772426,570426141,-1946156792,-117439686,1090584323,-1828715775,1107361537,738198273,-1241513727,872416018,-1207959296,184550198,1660944648,1174405948,-167771900,21,-2081649835,1448548588,-1962641781,38046524,1006126729,-385646649,-947191506,-523116335,1183434243,-1948742678,-956102585,-62486208,2096645691,17885443,-523116335,1183434243,172461032,-1946270071,1195108446,-385649654,2134442230,721779720,15854016,1090274955,-940554615,64070,16008903,-1960580352,1191178334,-773598736,138447843,-1962258293,1191180894,-773598726,138447331,-16101239,1183577158,-60912652,-472783919,2131247161,-773878834,-1948003869,1586169920,-773598724,138413027,-1947449719,-1991706042,1183576646,1183402236,-263812114,-96040632,16008903,-2091783424,2080436862,-293717725,1183516789,-229703694,1586175211,-773598738,172002275,-772645237,971231715,-494990784,-1161589,1183444558,-774337552,-1948003869,1351288896,-94467318,-772124929,-1981558301,1351157824,-196673782,971785867,-1484983226,-1946517877,-773795385,-1983511584,-661919162,-1981004149,1183516743,172460542,28851337,-1956684288,46292453,-326413056,1460595843,141986646,65748107,-16496897,-11138442,1183516278,-1202700284,-397410302,1183384783,105266168]},{"sector":5,"data":[1996481140,1996445194,74907398,1342178232,-1996179736,1178203718,-16220424,1183515718,-13308936,-11138442,1183516278,726679556,-1796714304,-28931836,1443526399,-16353537,28836982,-2132258816,-62486268,2113816121,71761675,-1979824501,-1947531706,2114125699,-947171525,-523116335,1183434243,-1948742668,-1992231354,1183516743,172460540,-775451825,65065440,-230258234,1204279435,-1962934008,1200161862,-1203992310,48955393,1600045099,-1034033781,-1957363704,518816748,1988843095,-398014716,76218368,-772520311,65065440,-498693690,1200347275,1183401994,-297351172,2123038720,1200310260,-196738296,972703369,58587774,-1962862103,-773598753,138447843,-1423735,1347815030,-1191414017,-397410301,1183384519,-364475420,1038370347,813563906,1443264255,1223313035,-62485680,45633600,-1528279040,-330921725,971261579,276753478,737957515,-2084568128,1175126482,33614316,-472785013,1082909649,-129595126,1443264255,1996443720,112892,57534544,737560201,1183447110,2109737954,-129594618,1039549995,1518206977,1443264255,-1946650881,1346436166,-397361109,1183384387,-163148820,2112636473,-92391146,1183554174,-773878804,971231715,-1937830848,1201269575,2096791097,-775451871,65065440,-498693690,1183570059,138885622,960498559,58591815,-335579671,1183535066,-297387532,1191126141,-297366556,-523116335,1183434243,-1948742686,1200219206,-163149048,-16103543,-381161914,-4653339,20965887]},{"sector":6,"data":[-772514165,-1948003869,20973632,-269880250,-297366784,-523116335,1183434243,-1948742686,1183385671,172461034,972572297,58518086,-16724503,1213597302,-59310256,1342177976,-1996323096,1317795398,-1053079048,-1992293251,1996486726,1996445190,-59310102,-397361109,1183384167,-364495900,1183384446,-129594390,2095728185,8972547,1443264255,1996443720,243964,37873744,-1946794359,1178200646,-2094301706,2130769022,-10557181,-1946923265,-523111354,-972824367,-1948105079,-364475432,-1962391671,1200224326,-398000374,2122531563,58654964,-52247,1183577166,-773795340,-1983511584,-661921210,1089881739,-1962391671,1200224326,108461834,-159973546,-1191414017,-397410302,-1992293933,1191180358,-9573912,-2081534209,2080435838,-16389885,15236739,2122524276,58654964,-73751,1183577166,-773795340,-1983511584,-661921210,-1981266293,1183516743,172460540,-1980479861,-1715459324,-443850914,311901,1167087646,518818645,-326903666,-950642924,63046,949891,15270773,241076993,2139299723,209455106,1342446008,16777114,15526144,-1995684213,1183576646,-196703990,-1928431873,1343681094,1342177720,16777114,134789120,-26032,-125108224,58064651,-1711228183,65535,-1996357448,38111493,-1961992565,207391543,1183385483,-2082960392,1946223231,9103619,36063222,1156974196,2121531656,-14125825,1996433012,108461832,503596429,710708048,1443127295,-227082409,-1191938305,-397410301]},{"sector":7,"data":[1178271943,1448310002,-227082409,-386631937,-1072956477,1465271412,1459641064,200958440,1446474944,-58791849,-1981004151,-92017066,1023768063,578093055,200033931,242544198,-1981004149,1183576646,-196703762,93043179,2130855225,-163133503,-6684671,1459618047,16777114,-163149056,-310157474,535137026,181030237,-326413056,1459940483,108432214,-1962639733,-28931835,-472786805,1099817937,-62486264,-14125825,79177332,1586188288,1074236412,516131664,1354771280,809798480,1150111774,726670908,-1957670720,1610558044,-1956684260,79846885,-326413056,1460989059,-330905770,1187446784,-1962934024,1200295006,-28931796,1200347275,-62486262,1601486859,-947651701,-1957762284,1161365062,960331522,947782725,32261831,-2080929024,92997318,-1947187575,1325396038,1958743024,-263258328,-196703827,-297367123,956843659,-478153658,2129544761,-129579042,334168065,-523172469,50333189,-62485512,201084671,-156731968,1946223686,-125926555,-1957006336,2013203550,645398312,-16222465,1586169462,108527370,-16484353,1586168950,710904588,-1993580545,1190591046,343147012,972310155,108853830,-360829,1183521397,300632308,971916939,109050438,-360829,1183516277,-96040466,-335919477,138840934,2122539499,1299448044,1586183147,678952716,-14256129,1996425334,173968134,-16353281,1996424311,207522564,-14000245,1183394911,561266938,1476032255,184596200,-1950779968,1183447622,142016264]},{"sector":8,"data":[1459910399,-1996481304,1967130694,71759541,-1207602174,65765376,1585446840,1575324511,1426066114,-326898549,-1957275900,76219510,-151107959,1946289734,146751,-24443787,2123041515,-2081959426,-33356561,-1962489981,1325399622,1958743038,-28377275,956450187,58460230,-1959072952,138819845,1183516028,-2094077176,-672463633,-947650933,-15340794,93060686,2080917049,38112024,2080917049,80184285,-113013,-1072955826,-4660875,-1956684033,113401317,-326413056,1459940483,74877782,16533191,46564096,-1946256245,46564294,-964442485,1327229698,-1962752381,1144587846,-2096136194,1144586950,-955810050,130118,-947189781,1975520079,-62485538,-443850914,311901,1167120524,518818645,-326903666,-1957210616,-16052098,1962934200,-1942647973,-1916760368,1183577726,1183558414,-276583668,112900,-6628557,1342177535,339098,1586321408,712805370,-14125825,1996433012,142016266,1577014038,678756100,-14256897,1996486262,-59310088,-362753,1576994422,-610643924,1476395013,-310157729,535137026,214584669,16973831,67041,196615,66837,209672,67815,202388,66805,210616,67755,209756,67761,202338,66846,5615,0,0,0,1167087646,518818645,-326903666,-950642932,63558,738197438,10533119,-1706012007,873,-15992693,-2065104011,-426092800,-1996488704,1451883078,142016508,84309759]},{"sector":9,"data":[1347551254,1348468920,26778,-49920,1996438132,108461832,-1946532213,369491030,-1202695680,-1705992190,265,-24907637,1444508927,-231681,28899958,-1751494656,184549379,-955943744,129094,1962933891,-1298508282,-1006632957,-953746850,1459618311,70042,-125926656,1460040960,72090,-125926656,-1962642432,721611719,-2090901824,-443874579,-900899553,1478361092,-1957345904,-661774612,-955716477,63558,425603,1996439668,26057222,1183383552,-61437446,779403787,100288139,1347551262,100288139,1347551254,1344405688,215962,108461824,179866,108461824,85146,-129579264,1183514625,49120248,1562371467,182861,1167087646,518818645,-326903666,-129579256,2122514432,225705990,-1710852353,65535,33048263,-129594624,-1962742397,1297948645,503317194,1430622296,-1910575989,518816728,-431569066,-1070923775,-1980873079,1183444038,105265660,971572085,108461825,228250,-230258432,200562313,-385649214,1589903652,1200301810,-163149558,343326731,1077993681,-26032,1183383552,1975520252,16443651,-1962385781,-361330377,-1995291509,1150018630,-129595116,-1995029365,1150021702,-96040690,-755969,1996485238,-327745554,-397361109,1183383775,-296318484,1014284811,-1947574645,184586887,1946195079,142016360,-11485141,-1996451169,-1072961978,1996445557,-227082252,-1149185,28896374,-1528279040,142016256,-1705983957,65535,-16222465,1251665014]},{"sector":10,"data":[-16777214,1996425334,39164664,1996423168,-260636920,157338,-92372224,-16026624,1996425334,-25862,1187446784,-352321304,142016303,-231681,1996484214,-159973396,-385736472,1586233178,-1948003864,9174134,199378569,1342600384,16777114,-398000384,-1947050300,958851142,-629732793,16547459,1996425332,-25860,1996423168,-26106,1183514624,-310157594,535137026,80366941,-326413056,-1006441341,-2094658978,963969343,184960651,376768582,-1030962293,-1996484091,1451820614,105286408,-385329525,1589903775,126559750,1174528209,106859270,75465510,736261376,-2065065536,173982721,37716774,2122576245,57933828,-1962853911,1175127622,-385649656,-1014300544,503693964,-1957670400,1443267,45633618,-6664032,-1996488449,-12714426,-994282241,-1960441250,-1960440761,-523170217,1347605201,16777114,173982720,-1635284698,1958742784,-6664131,-1996488449,1451820614,173982728,654198411,1343375241,314069766,-6664192,-1006632705,-1993995682,-953805753,637534727,1539968,1996425333,-25858,1183514624,138808070,887686005,173982975,394231846,-1959496448,96636099,1347551262,369476491,-1202695680,-1705992190,73,1040074377,2020933631,173982800,642826283,1343518719,16777114,-1005917440,-1960441250,1183388231,-25755650,-16222465,79169142,1033523200,-1006632956,19270238,1996428359,105286654,84432523,1347551236,637951684,-523171957,1342178349,32666]},{"sector":11,"data":[173982720,340197670,394231846,-16222976,1939537526,-1006632956,-2094660002,1946158207,-23992061,638213828,1539968,-14284428,-1818619273,-1006632960,-14284194,-1711235401,161,638213828,10401791,44442,173982720,306693926,1994981376,1575324670,1426066114,-326898549,-1000974552,-1960442274,1183384647,50085366,1609106293,-385649150,758973517,-385649407,58065242,1023655913,57999658,1023611113,57999659,-385686295,1589904332,126559750,39291686,-2097151699,1586168026,-754404874,1003039723,995259857,-1957792317,1183386694,-293698578,-385649408,2122383589,1946755830,10610947,-1005816065,-14285218,-14281609,-14282121,-14282633,1996426871,2013210350,2013210124,1468737034,650128136,1376143243,-26032,-1494679552,209125120,16777114,-297367296,58048523,-2130447127,153286270,1183517557,139889414,-352315899,105286409,84432523,1183383578,-229209616,653287108,637695999,637827071,705185674,-1977200412,-1957689017,656835,-6664110,-1996488449,-1072960954,1996450676,161108206,-1996488698,1290403398,209125375,637951684,639137791,639006719,638875647,-15566849,-14225802,-14282633,-14283145,-14283657,-1960441225,-1070921641,105351974,-6664110,-1962934017,1178143814,-385649170,1996424021,-25755666,410010,1958742784,-361300216,464282,-294191360,16777114,53733632,637951684,-788111477,175541219,1183383691,1975520232,52160771,1342994175]},{"sector":12,"data":[147354,51374336,-1962522997,100993110,-1706012160,65535,200558217,-385649216,1996423925,1996443658,49539076,-1962743575,1451951686,394504,-6664110,-352321281,106874071,243239718,-26025,1183383552,1975520226,46131459,931911819,16271047,-1961366784,-472778658,-1912185341,-1960441786,76088903,-16595325,1166932038,971559169,-546113466,-16091393,-1695817098,-1962522997,100993110,-565802752,-991930743,537255518,1200170496,1468605962,-1705815540,65535,198985353,-385649216,-1706032547,65535,200558217,-16091968,-11531658,1323828342,-596181246,170394,37480704,-1962522997,100993110,-1706012160,65535,-54807,1183517814,139889414,1375733765,106873936,108527398,16777114,34334976,-1962117377,1451951686,525576,1589923922,2013210118,-26106,-286720000,106873857,-788034778,-1933376544,-666465854,-2468215,1589906550,2013210328,2013210366,105286652,1375733765,106873936,108527398,16777114,28829952,-1005816065,-14285218,-14285193,-1014298505,168149644,726684160,-1706012480,65535,-1006529303,-1960442274,-472840609,-1962248565,-62486272,58048523,-16679703,-1706029962,65535,-1006538519,-1960442274,-472840609,-1962248565,-62486272,58048523,-16688919,-1706029962,65535,-1006547735,-1960442274,-472840609,-1962248565,-62486272,58048523,-1962855191,-1960442274,-472840097,1183383691,1975520250,18868483,-15960321,-1705968522]},{"sector":13,"data":[65535,-1006563095,-1960442274,-472840609,-1962248565,-62486272,58048523,-1962870551,-1960442274,-472840097,1183383691,1975520250,14936323,-15960321,-1957626762,-14285218,-14283657,-6681993,-385875713,-113442615,-385649407,675151414,-385649406,-96600211,-385649406,-79823454,-385649406,1183514049,-1947981066,-1308718096,-2115513598,-1962918713,39160581,-1982314871,-1039410602,922687605,-1070923516,-6662576,-1996488449,39160069,-1982314871,1183570518,-632943656,1996450164,-629735668,-1948748033,145880646,-1957631789,1451951686,394504,-2014818222,1028188942,58000673,2013156073,52706587,736691061,52772350,115934069,69811710,384369525,-8721921,1963337277,-26941181,1963392829,-46274301,1963532861,-73996029,1963664189,-74520317,1593792489,1575324511,1426066114,-326898549,-1957275902,-13957002,-1958280725,-2082221601,-160104392,1980005945,105286411,-472785013,48955529,-947126485,-443850914,442973,1167087646,518818645,-326903666,-1957275876,1996425846,236382222,199640713,-385649216,-661978765,-2047459445,1946222760,20572419,17333635,-1897331852,1150113536,-96040701,142993488,201082505,1349416128,12186,-398030592,-1947576695,-523167163,99108355,1183383570,-396442392,82331267,653936267,-953809015,583,-2081923445,-1962743738,-1993995194,-330905849,401276928,-2096734524,637666886,1589905291,-398031896,126428674,971785983,-462230410,33179275]},{"sector":14,"data":[1996429893,75537148,-1326907392,-129579264,1996423168,26601702,-2097099031,1946290301,10086659,-1996274547,2105604678,158597149,10913163,-337361271,608537897,1166888990,-1202708964,-1705992190,3146,1038370441,-1099628545,1354771280,178256,66689616,1183514624,-297367046,15746759,205949696,-899447,1996426870,440548,-297366192,1961381910,1975520000,-428409078,721493736,190442432,-15174410,1996426870,-775517212,1996443872,108461832,184569576,-2133166912,1962941821,-461963512,800666,-96040192,1429983787,1997697558,340081413,1183517558,340101626,1459655,-96040192,1157747243,274010382,33048263,-129594624,-310157474,535137026,181030237,-326413056,1443556483,-955746677,64070,-16091393,1996424822,-694528508,-1996488693,-969148858,-2098658443,734432000,1183446598,-163148808,-1962654207,126553182,-1946270071,41911256,-1207599863,48955393,1183432747,1958743036,-27358382,9602955,9733899,1183532404,1003629560,1996688406,990278202,1996687878,209125170,1358953656,-106869,1023447711,594870273,184748705,1963133958,175570916,-16353537,1996424310,-25864,1178271744,721712376,-1207702592,-1956773887,180510181,-326413056,1443032195,-1962647925,-1467187145,-1132265216,1946157228,-1397424375,45521408,2088960000,309657864,11189379,-13405184,-1711232332,1165,2088970475,578093576,1932416,-1258354316,1402601638,-1929379836,1344152644]},{"sector":15,"data":[505169037,570472528,65051216,-1956773888,46292453,-1873273344,-326412987,-2082959842,1448572652,16533191,205949696,1979917629,78113027,1912808509,22145283,1963011389,72280323,2145977206,19545348,725448050,-9406719,1996426870,175570700,-787855733,105251808,755521163,1347551234,-1996184344,2122574406,527827210,-15829249,1996426358,172395274,1174659281,139889414,1375732781,75491408,-2081667447,1979845246,106873872,-1995994330,-1960382906,1183384135,242679792,-15960321,1183648374,-1873799446,-57350130,-1946925431,1038742598,241076996,2139299723,309659650,-1005684993,-14285218,-14286217,-26057,1996423168,209125134,-16091393,1996425334,-1950029050,1451951686,105284360,106873860,67520131,638028582,-1996335221,1451875910,106859488,33965699,-1995994330,1077992006,28482128,-259325952,-15991157,-1070922379,-1006383127,1182991966,-1960443386,-2096789241,1183515335,-2096789030,1187447495,-352321294,-564214769,652101375,92800906,-230228153,970606219,-378342842,-15829249,-784331658,1346388200,1344194187,-739766640,-196703749,202021462,921239552,106874111,33965699,-1995994330,-523119546,-1946663287,-523119546,1077993681,240228944,-259325952,-15991157,2045313909,106874111,67520131,638028582,-1996335221,1451872326,-733574190,-947714679,-230242558,317390848,-2083496252,637718598,92866443,-16595069,1183576646,-230278664,1996482162,209125134,-989890583]},{"sector":16,"data":[1182991966,-1960443386,-96040697,1342179333,878234,-1947170048,1979649022,-15537917,-1980086645,46629637,-2096734524,637797958,-1960441973,1183384151,-900298296,15877831,-1005393152,1183041630,-1960443192,-2096789241,1191117511,-96039950,1005113664,-478678458,-2096734524,637666886,92866443,-1996306557,1586218054,105284358,126559746,-947714679,-1035564798,-15829249,1183517814,-388939526,1342178053,1344194187,-1209528688,-196703750,-1961992565,-966883041,134381443,-739703948,1216316414,-385649408,-6619446,-16776961,1183649398,-1202710846,-1706033151,65535,-3776885,2013210743,-1032388826,734295807,-11513664,1996474998,-96039992,-11478793,2013214327,96701236,1344143420,506611595,710904656,-1708630017,65535,-939624983,46150,12076743,172395264,-1951512951,-991505936,-1960442274,1183446592,239483318,1187448949,-385875532,1586168048,-1995994186,-661934010,17319926,-437714059,407342077,-1951250807,1468737095,-1136228056,-994158967,-1977172898,-467007417,241694502,-2084944247,723630662,1996443840,2136762,1183383552,1975520184,-39130877,165780048,1183383552,-396981786,-1981659511,2122441814,1963532812,309253,112722923,-1975088896,15877831,-1005065472,1182991966,-1960443386,-429997049,48645763,-16283354,1183576646,-230278774,1183572338,139889414,33965699,-340898049,106873879,33965699,-1006138586,1183049310,-1993997594,-230228217,967722635,-512560570]},{"sector":17,"data":[-2082060604,-1961957818,1586216022,-1946645570,-611442958,-234879047,1183522725,-2084401946,-1962744210,1854137926,2122515174,309592244,-15829249,1996426358,-461963346,-371034369,1996487801,1354771378,-4557057,1996482678,-25882,1996423168,209125134,61752971,570800710,1357435136,-1804545,244376182,-1980177944,2122576966,57999544,-244503,1184544886,-16777206,547010678,-385875956,1589967921,1065559558,-385649408,1996487717,209125134,101349119,6809683,1039550089,58064895,-230423,767037046,28856321,1183666176,-68032010,1963070269,-67507965,1963075645,-75765501,1039919337,58000425,1039888617,58000673,1039996137,58000934,1039926505,58001698,1040061673,58002211,-369226519,1600060349,-1962742397,1297948645,1426066122,-326898549,-1000974576,-1960442786,-263812857,1342994175,385369741,27191376,1039550089,58064895,184605417,-1957595712,1207890014,338074115,1586167808,-1976071184,1183318596,1038363378,292814849,1946157629,212316,87898484,-348097536,209125144,1342372536,1342178744,503858317,-401698736,1183446994,-262239242,-1711058946,5293,-1996488264,-1072957882,1183545460,-8983560,-71824266,431509506,-3347712,-4715402,1149980678,-120504312,-339309744,142377918,-15961085,-55047050,79187970,-5707008,479858292,-1996488683,1451883590,1958874110,-60898140,138906150,-148446166,-125104537,-1207142657,-1924136455,-388947643,-1873607088]}],[{"sector":1,"data":[-145692658,-637303,-1013313932,-385875952,-4653197,-1956684033,180510181,-326413056,1460202627,108432214,-956006773,65094,11189379,-2092796672,91448575,-352295752,-1983411454,-523110330,721424901,-1706012215,4026,11175049,292864011,-1980217717,-956259196,6724,33441479,-25263360,-1957596160,-352277884,440699725,-2076457213,-462028636,1935998851,6600709,-947191061,-1946663287,16819332,-1258293178,1183514794,98619896,-919928814,922701905,-6684130,-1996488449,184593028,-1951238976,-2071332794,-1528102748,1600045099,-1034033781,-1957363708,216826860,1187468887,-4,-1578628490,172394756,58048523,-1962883607,55049944,1586182027,-1995994360,-2071201722,1183383724,1958743028,-1948742849,-163133633,1183514624,306461174,1586179702,71797752,-1962518645,-472779170,1362748369,957641986,-1005554431,1183515742,126428918,33310407,-9704704,-890505658,16023171,79172213,-1969598464,-1996488698,-2071333818,451608748,-1946913025,-523169212,67494097,922701824,-6684124,-1996488449,2122576966,779354356,-1946919285,73319487,-15580021,-1993993660,-128021753,-1962653813,1586169431,529212932,-472783919,1367933321,-62470398,1586167808,55574026,1593591435,1575324511,503318722,1430622296,-1910575989,149717976,-62470314,922681344,-1363672536,-6664192,-1996488449,-1072957370,-1930886283,251369984,1586167808,-952661000,590404,151667911,205833984,1153892608]},{"sector":2,"data":[-956298994,4164,184960651,1383336006,34096327,142016256,-1928956161,1344150596,1343226552,690330,-1501263616,-49920,-1957685132,-1202708794,-1706033134,2899,1962938941,-62470395,-1132265471,1962868902,494698523,-15371008,-1711233356,2809,1153895147,-956301048,130118,1001626,-58817792,-1962576896,49018950,-2090942421,-443874579,-900899553,1478361092,-1957345904,-661774612,1460989059,108432214,16271047,-330905856,-167051264,803799925,-1070901759,1347440720,-1679290736,1975520244,18671875,1207885451,-163607805,16820357,15270772,142443265,-10521343,-1711232331,4042,-1980873079,1589964886,-1923655954,-74774411,-234878535,-1956749403,-523170235,-1996484091,-2054425018,1183383722,-40218388,-16777195,1183575158,1347590646,35534591,1522330,-129595136,57982987,-16738583,1369107574,-385875946,-1598553973,1347590400,1216666,-330921728,2037694475,378247760,1183383552,-61437446,1459248836,141921623,163183499,1604710912,138790750,2105540609,2004090909,10913163,-899447,-1070861706,-1706012592,2718,-1913489665,1344145477,1342182072,1342618,1195264,1187448181,-1006632456,1465317982,-1927514739,1152980607,1604710912,-227082402,1350810,-327745792,1460634,-1396866304,158597120,11318783,1448090,-18969856,-1705639089,3526,16285315,1183529588,-1925714964,1344152645,505169293,-1610434480,342202960,1183383552,-49678]},{"sector":3,"data":[1927873396,-327745537,1526682,-327745792,1100698,-18969856,-1058340017,1600045099,-1962742397,1297948645,503317194,1430622296,-1910575989,216826840,1988843095,-1983894774,1183446598,1962281972,362436193,-1996488681,1451882566,1958874106,142016337,-1878624513,-44570610,-15992693,1996439668,-126418950,-624897,-1070861194,-334108592,-1980479863,-1039403434,-1000924044,-14224290,-1960442761,1346914311,101041035,-1873784320,-223025138,-1873295125,-35461106,-947128181,-310157474,535137026,113921373,-1873273344,-326412987,-2082959842,-1957295892,1187448438,184549624,1446802678,1184666,-96040704,201086601,-1003719486,-2094597538,494207295,2040157782,1375731735,540475216,394566146,-259325952,91551243,33048263,1268405760,-2097151982,1946220670,-339309820,-129594621,49120094,1562371467,182861,1167087646,518818645,-1957242738,1448478326,16777114,-11513344,-1711137226,4847,49120094,1562371467,182861,1458342741,242679639,185093771,-1944816439,74892763,-1064382324,-517218005,-201524085,-2388315,1583286878,-1034033781,-1957363700,73305068,-619986037,529206132,151158656,1200292724,1575324426,2818754,94568451,192479233,116129795,175964161,89456643,1,337051907,327681,330236163,393217,369950979,458753,88735747,587726849,252444675,856162305,358416643,1048577,359596291,1114113,361365763,1179649,102039555,303169537]},{"sector":4,"data":[357236995,1245185,123863043,2359551,298582019,378798081,388956419,1310721,121962499,2425087,129761283,2490623,127467523,613810177,278003715,798425089,138412035,2621695,143065091,2687231,134479875,2752767,132120579,2818303,360513539,372047873,220332035,816840705,148308227,3276801,117178371,162791425,95617027,313917441,120061955,146866177,99811331,591527937,36962307,96796673,372637955,4849665,368378115,5308417,68616451,5373953,364904707,5505025,366018819,5636097,293994499,375521281,108724227,166133761,102563843,115867649,233439235,367984641,106168323,141688833,328138755,368443393,0,0,-2081649835,-1957295892,126551134,-1946270071,142082008,16777114,-129595136,-990226807,537262174,1200170496,1468605962,106859276,1183385483,-153580548,1946224711,643810320,306678566,341281574,-336044348,-128007156,-1946388853,1418405444,1200170536,1468605970,-129594604,1593464459,-1034033781,-1957363708,49054700,-1962647925,-28931833,2013255819,-26104,-443875328,180829,1167087646,518818645,-327034738,1448542338,15746759,-230242560,1187446784,-1929379694,1988992638,503780884,-1515905258,-1960860251,1183424070,-1605989454,-1951119735,1177264710,-1236891234,732186251,1183424582,172395448,-1950726519,1183386694,239504316,-1995815381,1183563334,205925136,-1950333303,126557278,-1949415799]},{"sector":5,"data":[126554718,-1949284727,1207357022,74711304,65781803,-1996488264,1586230342,138933968,721712129,-1207702592,1183383553,-193035268,186086400,-1961659200,1988873822,272927696,1947223865,-373282043,1183516022,-1236911682,-739703937,-1069118719,2142783033,29944067,-1716107637,-138522997,1959922681,28895491,-1715976565,-138391925,1959922681,27846915,12484227,-1612119169,2143881985,26798339,-2133827957,1946255231,26011907,25067392,-2081881228,142508289,494207180,537296515,1183520629,-196724228,-208991627,957891723,91494471,-352321096,-1983894782,1183551558,1317771702,-1980106818,1183564358,1317771704,-1980106816,2122564678,376766608,-15567105,-1705918858,525,193873545,-385649216,1996424379,-1099497710,1342177720,140698,-1941534464,58048523,-16711959,1996427894,-998834250,232090,-1975088896,58048523,-2097094935,1946194046,-799110389,-1960425589,166406231,-15567105,-1276604810,-599356931,-2206071,1996427894,-39524212,-1981790583,1996481110,-1971912942,-1979869720,1451877446,-1870756890,-12421888,1996480118,1354771420,-799110320,-14125057,1996433015,-1133051974,-4294913,548978806,13416960,-1070903214,1183535184,3933646,1602965534,-954204374,47686,12338887,105286400,-1995942261,1451872838,-832664620,-1205045249,-1924136957,1343659590,-1157627976,1347616767,378947213,-1773761200,-1705816042,65535,32523975,-1870757120,-16354048,1911066230,-1938358275]},{"sector":6,"data":[-168984,1709738614,-1971912707,202138,-1938358528,16777114,-1870757120,-385649664,1996424091,59828622,966936203,310287942,-1986115957,1183552582,-1639544414,-1986771317,1183556166,-1606010460,1183519358,-1807316576,-1985722741,1183555654,-1538881132,12615299,1183516028,-1962546240,-654852026,-2081012087,2080421502,-1236890875,1183516139,-1982269514,1996487238,1996443666,-25866,1183383552,1975520130,52816131,1343387391,-1979948568,1451879494,-832664594,-1988343925,37615686,1377203456,736917247,-202878784,-767113466,1187446918,-352260396,-125926609,-15108863,1996484214,-18196,114616400,-959297849,-733559040,283836552,66616963,1187449461,-956292910,13423686,-1980348789,1187490886,-956300886,43078,-1984149877,2122559558,108855488,29378187,1183559750,-968455750,-1984018941,2122566214,226295990,-1980086645,1187498054,-352321332,-934885621,1183514624,-867792458,-1949278581,1183394375,642223062,-1993844853,1451878470,-965279766,-3639553,1996474998,-18228,1392508858,-1773761200,-694530026,-956301307,109638,11959939,1183516028,-1962546250,-654854586,-2085992823,2080421502,-1303999739,1183516395,-1236925518,-945404279,44614,12615299,1187450236,-1962934074,1183432774,-1962153014,1183446598,-901331002,1586167808,2122285264,-2147060479,1946255231,112645,-1070923029,-1947056503,2139147870,108331390,25132928,28837236,721611520,-1840870976,15892099,-1073018508]},{"sector":7,"data":[1183516021,-1962677296,1007013446,-666466048,-2082840948,2080424062,-1069118715,1183516139,-1948715072,-1199668240,-1962574848,99334214,-138918261,2093366232,17361155,10897095,-1199668480,-955417600,51270,-1984412021,418106438,12091011,1183516028,-1962546248,-654854074,-943176055,52294,-1947449717,1183444566,-363427352,-15567105,1996487286,32807670,1183383552,1975520128,18868483,1343387391,-1980077592,1451879494,-125926418,1376154882,-339727536,-125926641,-15895295,1996484214,-18196,83159120,-3770625,1996474486,-864616502,-1157627976,1347616767,378947213,-26032,2122514432,108855478,28722827,2122560070,108855480,28853899,1183560774,139889414,-1982708087,2122568790,158597364,-1949409653,1183394375,-832664618,-1205045249,-1924136957,1343659590,-1157627976,1347616767,378947213,-1773761200,-1705816042,1702,-394234113,1996487220,112827008,1726676992,-1947449717,1183444566,-363427352,-1949409653,1468737095,-330921688,-1947314551,1183429702,-1203371064,-1949546871,1451951686,-767129336,-2083236215,1946219646,709331718,-1948891511,2013253214,243756,-1639543472,-4698090,-17665,1183666258,-1924131178,1343657542,48798291,1187446784,-16776720,-1175944586,-2106130439,200090,-263812352,-310157474,535137026,415911261,-1873273344,-326412987,-992440802,-14285218,-14264201,1996445303,2013210122,2013210130,2013210196,209125202,444071718,343408422,376962854]},{"sector":8,"data":[1048051494,1014497062,1347469355,977767206,503331845,1602954832,-2095055040,-443874579,-900899553,1478361096,-1957345904,-661774612,637951684,643332095,727087103,1996443840,2013210122,2013210196,1996443730,2013210124,2013210132,2013210134,2013210174,642797628,87705483,1344143420,1080003366,-310173697,535137026,147475805,-1873273344,-326412987,-2082959842,-1957294356,1187448438,-956301062,64582,-1006564375,-1960441762,1183390791,1200301810,-62520546,653543049,52447115,1183445574,1200301814,-196738258,-1913108855,1343681094,384976525,242679632,-1710459137,2357,58048523,-1006585111,-14284706,-14267273,-1070904713,-14266288,-14268297,-14268809,-1960434569,1174611527,-14266118,28846199,548950016,13416960,-1070903214,1150111824,642784828,-1959108725,536816223,638082756,642545663,642414591,642807807,642676735,640448511,-399607809,1962869221,645201704,-887041,1589965942,2013210120,2013210192,-230257842,138881830,-196703408,172436262,1334519449,1392113454,737560203,-1957629370,1177286726,-14266124,-14270857,1149975671,-1924129232,1344158788,945785638,-14000245,-96010465,638082756,19810187,1589967942,-96040184,709310758,-420936834,112894,49120094,1562371467,707149,1167087646,518818645,1589958798,2013210120,2013210160,2013210162,2013210164,-18378,1392508858,-1705834928,1139,-2097151560,-443874579,-900899553,1478361098,-1957345904]},{"sector":9,"data":[-661774612,-1005917053,-1960442274,1183387719,172395510,653805193,51660683,1183446598,-129594374,-62486208,385238669,-163148464,1392922646,16777114,1958742784,106873941,1484259110,1450704678,-624897,-14284170,-14265225,-1960422793,723916871,1174603847,1996443894,-96040180,1358317099,1342177720,1048051494,1014497062,945785638,506480523,106859344,1148714790,1115160358,1080003366,-310173697,535137026,147475805,-1873273344,-326412987,1457032734,638344900,1586182027,678952710,1445361663,638344843,-1006471169,-14284706,-14264201,-963946889,138881830,207537232,38243110,638082756,1342850859,638344900,721700747,-1960423226,723912263,-1001389497,-14284706,-14270857,1586183287,809995014,1586188318,2013210120,2013210180,1602954818,1579155264,-1962742397,1297948645,1426066122,1465314443,2126782204,209110280,-2096739189,-947707706,-773730016,-2082352671,1963460222,130151955,-1968438411,-792710432,-1430250796,803991522,-1040809805,-1409190649,-779366192,1929793163,487073292,-679228464,-336141824,-151287282,1025517271,-679228464,-1947016704,-1949048118,-1001847730,-1960441730,-947714491,-973602016,-964491146,-1949201632,-1952123960,535880394,-443851169,836189,1475119957,108971260,239438630,139823654,-487066062,-372127605,-2096871797,-1410129721,1575324511,1246914,149422083,17432831,47710210,17236223,110493698,17301759,131072003,494665729,102760450,17367295]},{"sector":10,"data":[97255426,17498367,73990146,17563903,148963330,17694975,104726531,303169537,1376515,1179649,8519939,1245185,103809027,506920961,47513605,17236223,110297093,17301759,102563845,17367295,97058821,17498367,92405763,199491585,73793541,17563903,148766725,17694975,1167087646,518818645,1448597646,-1962117493,-167049602,-1070922635,-561304085,2139299723,192677890,1342383288,97178,1444473600,-16091393,1448544374,16777114,-1070903296,244338768,1577061864,49120095,1562371467,576077,1167087646,518818645,-326903666,-1957275874,-24966026,-1207534334,-655818751,-297351424,-963969024,-523116335,1342181893,16777114,-431585024,91602955,-1192640469,-430011648,-1962719234,-163149561,-1996486139,1183572550,274107150,-1981266295,1589963350,126559758,-506343797,-654057007,-62441178,1586173557,1200301582,-774993150,65130977,1194927833,1308718590,669777707,-2081923388,637724742,1586169739,-498695198,-1962440446,1183049822,-1960443160,-497120505,48383619,994510729,-1948943106,1175127622,-15633144,1183519350,656886,-1705619426,65535,-1980342645,309788471,175570771,-16222465,-6683018,-1996488449,1586228806,55574246,-26029,1183514624,-2090901778,-443874579,-900899553,1478361102,-1957345904,-661774612,242649942,74839563,971751467,529260171,134381443,414714748,-694530044,-352321535,1996445220,175570700,-16222465,1183516278]},{"sector":11,"data":[205925128,105286480,1342850603,1347469355,128154,-310157824,535137026,181030237,-1873273344,-326412987,1457032734,185759371,721712630,-1959662656,-2095084578,2080899711,102545419,36280912,485163008,276234070,-15829249,1996426358,142016266,721843967,-1706012480,65535,49120094,1562371467,969293,1167087646,518818645,-1957242738,-167045514,-1070922635,-561301525,2139299723,192677890,1342708408,164506,-1205671168,1448083457,-15436033,1996427894,242679568,-15960321,1996425846,108461832,173466,-310157824,535137026,315247965,-1873273344,-326412987,1457032734,186021515,721712630,-1959334976,-2095084578,2080899711,135772171,-26032,569049088,1448132651,-15436033,1996427894,242679568,-15960321,1996425846,108461832,16777114,-310157824,535137026,315247965,16973832,65858,196615,65820,209672,16711987,196898,16712269,196914,16712097,196915,65593,208935,65577,210616,65665,5622,0,0,1167087646,518818645,-326903666,-1957275900,2089487990,142443308,-1960479458,1161366598,-1961001204,1161366086,-1961525490,1161365574,-1962050032,1161365062,-1207599598,65732610,1577058744,49120095,1562371467,707149,1167087646,518818645,-326903666,106859276,1183385483,-1948742666,529208415,-1962260597,1183386711,-94991880,-1202667477,1380974593,-1694992641,65535,200558217,721712576]},{"sector":12,"data":[-14160960,1996424822,11967220,1183383552,1975520252,-193528054,244634,-2036992,1996424822,-25860,-310181888,535137026,46812509,-1873273344,-326412987,1473809950,242649942,-15958389,1962879092,1996445478,175570694,-1962379521,1344155204,506479755,1011125584,-1070903266,1552633936,476053290,-310157474,535137026,181030237,-1873273344,-326412987,-2082959842,1448558828,185497227,721778166,86436288,529260171,134381443,465046652,-6664188,-385875713,1183515920,205928712,1183516788,172374278,28837493,83552512,13649607,-1001994496,1187446784,-956301072,52294,1183432747,-330921490,1123567303,4372480,-26032,1183383552,1958743000,-19362914,126550855,-1996487675,436586566,-901347072,126606987,-1948367223,138933976,1443263520,16777114,-933328128,-1995684213,172395271,-1962784887,1200162886,105286404,1443252105,1344193419,1342177976,16777114,-933328128,1183385483,71776706,1200292733,205949188,-1949802869,1194967622,-1962705916,1183384647,-933328120,956712843,92209735,-352172149,-933328122,-1996077173,1586170438,105352136,2114078521,38243077,1586169579,105352136,-1962522999,1603001950,-1995994356,1586226246,308251614,1183385483,-1948742702,1183385671,343514,-1070920331,-1982577015,1183440966,-1959007282,-1081876898,2113994880,-2138600698,-1207702784,1183383553,146912,1187448189,-1962933776,-1081876898,2113994882,-2105046266,-1207702784,1183383553]},{"sector":13,"data":[-834222124,1586167809,341806046,1183385483,-1948742666,1183385671,81402,1187448693,-352321292,-196688094,1586167809,41911268,-2095811328,1963129470,-1001994482,1586167809,239569910,-1948105079,-120463290,-1962129879,-783753146,138805752,-774617461,172370424,1221871243,1174534353,-562626810,-15960321,1996425846,108461832,-202895728,-867825156,49432263,-193035520,-2147191808,-2088701362,1946209918,-528579814,-2147189247,-2096041394,1946540670,-629243126,-2147191808,-1960775090,1200350302,-230284512,1978811963,-867764675,-1959300094,1183565918,-1962440436,1200163398,138840834,-1962653815,1200162374,63347206,1996423168,440542,-934900912,45633566,244338688,-369279256,2122515115,896794820,-401698730,1183448250,1975520236,-800667896,-1696006144,-461963518,-1696434433,65535,200165001,-16091712,-6624138,-352321281,-867270436,-26048,2122514432,57999604,-1962873111,1207362654,1651769638,-2082578805,1946238591,-998341799,-162302720,1946340422,205949773,-1981790717,1183574598,-532272376,-1947842935,1174604358,-398030380,721831563,1183437894,-431584292,2095728185,10610947,970737291,58517574,1392547561,-1411329,1996482678,244338918,-385631768,1586167939,205949896,-1981790717,138840839,-1981790677,126550599,2114078521,176065334,-338395645,-562626780,214713995,1183535112,-1202708792,1464860674,516572811,-294191280,-1863551233,82110478,105286471,1003767339,-2083356729]},{"sector":14,"data":[1946207358,1996445228,79010540,1183383552,-562626564,-1192331521,-1706033151,65535,-59310250,39578,-327745792,43418,-830569728,-385649408,2122514795,1366556912,-1949802869,126422086,-1995815285,1183515207,1200179208,172395268,-1962522743,1200161863,105286408,172460360,-1995684213,1200294983,239569162,-1995684213,1183518791,306678026,516131670,374864,-26032,350814208,-933328127,-1995684213,-532282617,-1950202231,1178142790,-1962573886,65782342,-1962391925,1200212062,138840834,-1981790677,1183563846,-1069139700,1183516030,-1962677312,1586170950,71797192,-1995946357,2123040327,-729939190,1996432107,-867791906,-1957690356,1344194630,1342178488,-901346473,-1070903266,244338768,1191433704,721831563,-952380346,1586222207,105352136,-1962784887,-1991768506,1183564358,-733609206,-1950333303,1178190406,-1962573888,65781830,-1983756661,2123093574,-14488822,1183571574,1342442700,516441739,178256,1183536976,726671050,-1873784640,58255374,-696370873,1183570303,-733598970,-1950202231,1178195526,-1962705726,-125058490,1996432107,-867791906,-1957690356,1344194630,1342177976,-901346473,-1070903266,244338768,1191393768,2131131961,-25895,1187446784,-1962933808,1342101598,-6663421,-1962934017,1600049222,-1962742397,1297948645,1426066122,-326898549,-1957275886,2123042934,172264206,201213577,721778112,24439232,956581515,-209777084,2115126329,-196687890,1150091264,-62486252]},{"sector":15,"data":[-113013,-1072955826,1586177396,-62487556,-1995994366,1586228806,-62487556,71731970,-1082194119,-2080612725,956496966,-999719417,1182992990,-1960443382,-96040697,-2096472437,637667910,1183385483,-60912654,50087555,1183385483,-60912648,50087555,1183385483,1979649008,15853827,15629955,-387382411,-129594624,2113029689,173982762,34227843,-1995994330,1586231878,172393226,126559746,-2081274231,-907345169,-772913525,-62520864,-1946198551,1178204742,-1960935952,1183054942,126550780,-1946663287,1183054942,126550780,-2081405303,-352129426,-129594472,2130331193,-96040187,1183515627,106874104,33965699,-1962440410,1178202182,-1962573838,65794630,-990886261,1182991966,-1993997818,-196705529,-230257918,-1946794359,1178202182,-1004699662,1182992990,-1960443382,-96040697,-2096472437,637667910,1183385483,49251318,972048011,477950534,-2080612725,-1962738618,-129595129,-2080612725,-1962738618,-263812857,49180291,-1980348789,149549638,-196703233,-443850914,967261,1167087646,518818645,-1957242738,1962872438,645201704,-15960321,-1070921098,1347440720,721962635,-1957688250,1177224774,1552633866,-773598916,1287127011,1253572354,809798402,1150111774,-1957683652,536816220,49120094,1562371467,707149,1167087646,518818645,1448597646,-1961986421,1465257086,-1962248449,-953481146,105286480,1342850603,1347469355,-6662576,-1962934017,-773598760,1287127011,1253572354,-26110,1599995904]},{"sector":16,"data":[-1962742397,1297948645,1426066122,-326898549,-1957275890,45679734,-1715041536,-259261961,16271047,-369153280,1589903514,-775451898,65065440,1200301784,-62486270,-1962516853,-773729841,651756513,1317605259,2126593022,-125926542,-1961986816,-472778658,1577313233,-339637498,-129594553,-523116335,-1962523133,36505686,-196704000,-990488951,-1960381346,-230258425,972834443,931000902,972965515,142406214,654067339,669714313,-772252021,65262051,1183712862,-28931320,-1962440410,1191180382,-773598728,106824675,654067339,1191331721,58588731,-1946198039,-523110330,-443850914,442973,1167087646,518818645,-326903666,-1957275884,2123044982,343342864,1460827903,-1946217240,373749752,376701184,-16222465,1996424822,309788436,242679639,-385793816,1150091568,-297367236,-152019316,1946424902,-295779312,38243110,653674121,33703879,373749248,-1959365631,1451952710,-129595124,-990226807,-953747362,-1962934265,-1993994682,1962869319,1996445484,309788436,67486603,-11513344,1592266358,-336032772,306613022,756307595,1183383556,-94991880,653811396,1991,638469771,-2097002615,58655231,-167731223,1950357062,373749324,-1958317048,1183448644,1996443884,175348230,1183383552,1996445436,-92864760,-1913096449,731447877,1358483906,-2146023690,-4717196,-1207702529,-1706033151,65535,-1280257,-1701118858,-352321532,678756173,-1205439233,-1924136956,731447877,1358483906,-362753]},{"sector":17,"data":[1190590582,125043734,-1943124853,721677274,1347590592,68568822,-1070922380,-1962546279,-628346812,1996443730,-294191120,1347469355,-14001013,1190534239,175375382,-1947312444,-1993935290,1599996487,-1962742397,1297948645,1426068682,-326898549,1187468808,-1006632450,-2094658466,326434879,16777114,207537152,185043238,721712576,-950080576,64582,1183534315,65065468,1451952198,-129595126,-990226807,-1960440738,1589925431,939468536,637826815,-1962772481,1346372678,803737232,1975520000,1201296917,-1006632954,-953807778,-956301305,65094,1182993643,1183515388,-62506746,1183558780,-443851010,836189,1167087646,518818645,-326903666,-129579256,2122514432,74776590,1860943915,957105803,1719535686,956974731,1585317446,1342994175,-16222465,-6683018,-1996488449,-1072956346,-107330188,-1996488694,-1072956858,-11521676,1996426870,178428,199268944,-1073020928,1996428660,-92864754,-1191545089,-1706033147,65535,-506231,-207947146,-16777205,1201339510,-1962934261,-310118330,535137026,181030237,196627,68519,16989311,68587,196615,66001,209672,67722,205576,68554,211596,66749,201234,65961,203282,16712986,196899,65668,198804,67126,202388,16712620,196910,16712876,196911,16714344,196913,67703,208932,68158,201398,65847,210616,66414,202338]}],[{"sector":1,"data":[68531,212067,65914,5622,1167087646,518818645,-327034738,1448542392,722486923,1178276934,-1961724660,1177226822,172374802,1187448693,-352321146,-2042181883,1183514624,340146448,1183516788,306592014,28837493,186116352,818819,1191117685,176063244,-16550656,1187449414,-956301180,52806,12207815,1619445504,-956301057,34886,-9271609,-1070923776,-129594983,-1980082551,1451873862,-230242344,1186463814,-744861696,-1996488701,201291910,-385649216,-661976390,-1962719234,1686538503,1050111,98715273,-2037841906,1183580006,138808070,1183524724,139889414,-1980217719,1183447638,-665417258,25708231,1938718720,-1070923265,-1986902391,65647686,375294721,1173766027,108273672,-26029,1569390592,-1995994356,1569439814,-1995994350,-661939642,-1995946101,87924806,722367744,-1840870976,-1984674167,-335579514,-2135063754,108921088,8422795,28836843,-1270445824,1962934589,-834222331,-1115488255,2113994882,-2105177338,-1207702784,1183383553,1988544402,-1962933761,126555229,-1947187575,138906584,1039550089,125108225,14698183,-953947392,122950,-2084544885,1962934911,-159481067,-955288318,33513606,-262239488,-1995552885,-1635008954,1183580004,-1962440428,1200165446,273058562,-1962653815,1200164422,205949702,-1995160061,1183516743,306578186,-16103543,-1014294922,62410782,-6664192,-1962934017,-1946196834,120260679,-1962129783,1194003015,172394754,818819]},{"sector":2,"data":[1183516541,-338102516,205949699,-2096347511,2097154686,172395271,65788151,-1995815285,2122517062,678690952,957367947,159257670,-1995147637,1988695110,239504144,2131904057,10283267,-1995278709,1988694598,9496846,-10183029,-2037839989,1194983240,-1962705660,-930413497,-1716238709,-120470997,1317652523,1688111892,1216777215,71776767,1200292732,-1949791484,-1723288506,-120470997,1317652483,1688111888,105352191,2130855737,38243077,-1635055637,1200357220,-1949791482,731484742,737726914,307136968,-10183029,956712843,92144199,-352172149,1688111879,105352191,1183565963,731465874,66638274,240028104,28591755,1183517766,172360082,8945283,-11069835,1996428406,276234002,-1710328065,65535,-9271799,8945283,-1779891340,-2038529280,-385649408,-2030698356,1963130738,8579331,150226631,-528579840,-2147191808,-2088700850,16742078,2122521204,75366836,284446336,94404227,2122517108,74711200,552881792,8814211,1586187380,474450880,1005864483,1047917638,-10183029,-1995159925,306612999,-1962784887,1200164934,239504132,-1710864503,65535,505943,1686539088,-1202708737,-1706033150,65535,16777114,-1169766656,2122514433,57934010,-2096649239,16742078,2122545012,1903427790,-2037792725,1183448944,-1136227888,-10320247,722355851,731451974,1090048450,2055637312,-754601473,-6663968,-1996488449,-1072980922,1860764533,-19363065,126550855,-8616311,-8747381]},{"sector":3,"data":[-523116335,-12024183,-8616445,-1949153655,67061894,1183437382,1216777192,-398064641,-1953872247,67061894,1183418950,273058772,-1995160021,-1946204026,-2043081658,125697864,-12024181,-1962129783,1177226822,1216776466,172395519,-12024263,-2037708931,1183448904,273058570,722748971,-2037838778,1183580014,306588430,-1995815381,-1946198906,1174606918,273058060,51529355,1183386182,273058574,1075070507,-775804007,-465139208,722355851,-1723854266,-120470997,-1948498295,1177281606,-1740207692,735856267,1183420998,340167552,-1981528573,1183439430,-1236891242,722486923,1183441990,1954974154,2122746367,1623098367,1685324031,-1709803777,65535,-1980217719,-1072966074,1187448949,-385875836,1996424801,-1099497536,332186,-666466048,175489035,-1697220865,1312,1996479723,-1099497536,16777114,-96040704,393592843,-1694992641,65535,-663290025,1342177720,16777114,-2135692544,1090482830,226458,-1983894784,1183425606,-1572434526,1771720726,-1962934267,1385815110,1347590480,365722,-1471772416,-1918216567,1343662150,369818,-1923656192,1989001854,503781032,-1515905258,1583292325,381830797,96574032,1183514624,1347590628,-1706012007,1531,-1987295607,1183682134,-1706027380,1517,2123192150,-1938387538,371066646,-1515870945,-1923195105,1343663686,405146,-1941533440,1996443670,-1938358386,-774093173,-1706014496,1666,-2037792725,-2037776564,-2037514422,1343684426,396954]},{"sector":4,"data":[-2142860544,-1722789223,1016746066,-1996488698,-1979756410,-1912647018,385831046,105683536,1465253888,-9912691,-11487603,371066646,-1515870945,-1923195105,385837190,107715152,1183514624,1347590552,-1706012007,65535,-1981135223,1183706198,-1706027286,65535,-1098033322,1989017430,503781098,-1515905258,1583292325,-11106675,-6664170,-1929379585,1343679046,-1280257,1183574646,1222693248,-26032,1183514624,-565802602,-8485237,734807689,58780150,379733645,-1941533360,-1298509802,-1929379834,1343654982,380520077,116693584,636157952,379733645,-1471771312,-761638890,-1929379834,1343662150,381830797,118987344,1325334528,1955004342,-1501658113,970292224,1367315062,-11893107,1183666198,-1706027286,1796,384452237,1451658576,-1706027265,65535,-2037569301,1343684426,-11499891,681201686,-1929379833,385831046,1753648464,-1706027265,65535,-2470145,-1098659258,2080440142,-1773761583,2128234041,-632911091,-1953085815,-2037790138,1183580030,-1983511790,-1946198394,-2046620090,-970195108,-2109306552,8945283,1586187380,-1236890654,-2037708919,-2046558348,1200226158,-2037688574,135069554,516131664,178256,1589051216,1720093695,-11526401,1996478582,-25898,-1957232640,218067590,1183535240,-1202708766,-380633086,2122514994,1819541728,966149771,2130673286,-497120413,-2037708919,-2046558338,1200226158,-2037688574,135069554,516131664,178256,1589051216,1720093695,-11526401]},{"sector":5,"data":[1996478582,136616662,-2037710848,1178206046,1462072450,-9271669,-1957656564,1344201286,1342177976,-1954384129,520054406,-92864688,-1694992641,2507,-1948098933,126465606,966149771,2130673286,38242592,-8485237,-9533949,-1962653815,67073158,-1979748730,1187448391,-352320364,-497120493,-9140597,-9533949,-956151927,169030,-8995197,-385649408,2122514822,57999566,-2097075223,1946326142,10610947,-1948098933,1654557447,-773598721,2090730467,-1962440193,-40290,-771792250,65262051,-1946190690,-1979752826,1586168391,38243298,-1134654648,-472783919,-1982702077,-1134654713,-776190209,65262051,-2037656994,1200226142,-497120510,1586169739,-773598768,-396491805,1586169737,-800653360,-472783919,-1947705853,1200194118,-497120510,1208108939,-9396597,-472783919,-1987420669,1889438471,1887895551,-773598721,-1973550109,-1987950965,-739704249,-497120512,1208108939,-10314101,-472783919,-8610301,-1635055735,-2030043294,-472776862,-1643912239,-2037645444,1200226142,-497120510,-1962653813,-472794018,1577313233,-1962440238,1191165022,-773598788,-765590557,-10582389,-1962784887,1200349790,1586186242,-773598768,-396491805,1586169737,-800653360,-472783919,-1947705853,1200194118,-497120510,-385595509,-1957167270,218067590,1183535108,-11526430,-1224764298,-2037645474,1344208742,-2590977,-124070282,-1962934263,973037190,611615302,1921420119,1342442751,518145675,-1804140720,-1954384129,520054406]},{"sector":6,"data":[-92864688,-1694992641,2653,-1986640245,-2037653946,1183448958,-1236890676,-1953085815,-1979747194,1191149190,2128377401,-59184893,-1948098933,126475846,63719051,-1979748730,2122515015,796131552,-10570101,-1957223445,218067590,1183535112,-1202708766,1448083458,-10058101,1996443678,-696844328,736154,1983464960,-2083029118,16736446,1996438388,-696844522,695706,-62486272,-663290025,1342177720,692890,1996445440,-18182,86874704,1996423168,-59310314,16777114,-696844544,328858,1992196864,57999615,-2097114391,1946209918,2092367674,-763953153,-1542401,-1224766858,1996488546,10283220,-10320247,-1961462017,1344197702,-10307841,16777114,-1671525632,1392726014,743578,-1957500160,1183572574,-1962440266,1200217670,-867792126,-9533949,-1962653815,67073158,-1979748730,-1232402873,602668894,1921420119,1342442751,518145675,309328,-2037688752,1344208742,-2590977,-1634019722,1174405127,2139256377,59611863,1187446784,-1962933884,-16811874,-1705835697,65535,1585727115,49120095,1562371467,1231437,-2081649835,1448542956,-1962510709,1586168958,-1995994356,38243077,-947658869,38242564,16664263,-1961235712,126553694,1182991753,1200292878,-2082501886,1200161991,-28901630,2097051193,-775517214,769708512,1174470660,-28915958,434831360,-1962254709,-2096789241,-1962669458,-544538041,-1996175485,1191117383,-25806338,1187504764,-352321282,140413721,92866443]},{"sector":7,"data":[67651203,-1962784885,80184287,-16627831,1983512134,-1948091138,-773795386,273888,-955496959,65094,1586174443,-1995994356,208569093,38243076,-947658869,38242564,972965631,-495124874,-523123061,1581310161,1575324511,1379522,183304451,458753,30605315,856162305,16121859,437387265,178585603,303169537,182517763,19071231,189136899,378798081,89718787,1041760257,83165187,19792127,176488451,19857663,111345667,396361729,59244547,20185343,49283075,20250879,133562371,20316415,81264643,20709631,175439875,313917441,88801283,391053313,92667907,399507457,87621635,375521281,113442819,393216001,98041859,401801217,9633795,368443393,-2081649835,1448542956,-16222581,-963966346,95965214,-6664192,-1962934017,71579908,-125105539,-1996209013,75270404,-1727641973,-120470997,1183515689,731465734,33083842,1149961284,38025478,2089486718,38045954,-1962509175,731448390,704172482,1183515204,731465732,33083842,1599997508,-1034033781,-1957363704,49054700,105286486,1963607609,138840850,2097956409,-2147371003,-4710421,-1961170049,1177226310,1183535112,172370692,172395344,1342588459,65434,-28931840,818819,-4712834,205925247,1983508619,-1962573826,300678726,233555595,729809336,-259322810,2147382841,205915114,1593722505,-1034033781,-1957363702,49054700,209125206,722093707,-1957689274,1177224262,-6664186]},{"sector":8,"data":[-1962934017,-2147467792,189137269,-1962508810,-1948715066,-97808,-1962639493,-1207702586,1174633471,-443851250,836189,-1947432107,731448902,33083842,1183518278,731465734,1090048450,-1962260951,731448390,33083842,1183517766,731465732,1090048450,-1962392023,1178143302,-1962380274,1178142790,-1207601908,48955393,-443826133,836189,-2081649835,1448545516,-1962248565,1183516798,-1037330170,1183447249,440795638,373696832,-1727773045,-120470997,32786057,692066374,1183519814,407255316,-2081881228,273058560,1947747897,309758214,-1961853303,1178143814,-1996065768,2122911350,239504140,2131904057,306612997,1183515627,440810254,1183516029,-1961825510,1178144326,-1962574062,65737286,-1995553141,1183578182,-96040680,957236875,92148294,-351123829,239504131,2081834555,373721861,1183518955,306592014,1183516030,-1962677486,-1992290746,1183579206,8448276,957499019,108272198,-1995278711,1183518846,440809742,1988691572,209619214,-1994766709,1183578182,273037580,1183516031,-1962677488,1178274886,-1962574568,283842630,957105803,92213318,-351254901,205949699,-1946532215,1183389254,205949948,2114995769,273058565,1183515627,340146956,1183516028,-1961825516,1178143814,-1962574320,65736774,1074546315,-113015,1183652982,-1202710792,-1706033150,65535,-443850914,1753693,-2081649835,1448545516,637951684,819075,-14285188,132845127,637951684,-1005694977,-1960442274,-523170233]},{"sector":9,"data":[1174659281,656644,100550281,1183383556,-1948742662,-27358409,1183385483,-1947194380,2139880030,-27358462,-1962770645,-2094660002,2080377983,-94467307,-1962784885,-1993996706,1183519815,126428916,1586177259,38243326,637951684,-1961605239,126614110,637951627,-963967095,-259270409,-654850165,1589966987,2139694598,1204233736,184549382,-1961724673,-550458,38242598,-140917109,1468606207,-1956684284,113401317,-326413056,637820612,637683595,-1960442111,19268679,-1073019321,-1960438916,958793799,595330631,105326886,-351797466,73319450,138906406,992401655,192677447,138906406,105316646,-1961885914,79846885,-1873273344,-326412987,-2116514274,1459667692,273058646,1947485753,239504136,1964131897,112646,-955610903,36422,-1098252501,-1070858406,-163149415,-1980213623,1451870278,375294922,1187461003,-1207916814,-1706032986,65535,194791049,-385649216,-661976498,-1962719234,1753647367,1836543,-9795959,-1996478459,100625542,1183383556,263558,98846345,1183383600,138737346,-16223200,-6678922,-1962934017,126553180,-1950726519,126554716,-1952561527,138906584,1033389705,175439877,1183432747,-1270445680,-1132254485,2113994880,-2138797306,-1207702784,1183383553,-2101574732,108921088,8553611,28836843,-1874425600,1101697,-1961599861,-62486265,1200347275,-196703992,1946157373,550469921,-1168209152,163715,37557365,-955288320,33512070,-60912896,-1995552885]},{"sector":10,"data":[-1635010490,1183580008,-1962440428,1200165446,273058562,-1962653815,1200164422,205949702,-1962391671,1200163398,138840842,-1962129527,1200162374,178190,-1957670247,-1952903098,340167624,60414603,768807873,-628948991,-1706012160,1406,-9920885,-1206892663,1385758722,239504208,-1949791335,-628420026,331416473,77267,1375787651,-26032,-1635057664,1200226152,376897298,-1267269805,-393185537,-1634993558,126615400,-1961605495,1183384135,71797522,-1961867639,1183385159,138906382,-1962129783,1183386183,206015242,-1962391927,1183387207,273124102,-1948498295,1183388231,1996445394,309788436,-15698177,-6680970,184549631,-532232200,-940113918,175374368,1605251,1317012596,-940080928,443809808,28606083,1317012606,2122518752,175375768,9993859,1317012596,1586176224,474450874,1004553763,997580870,182263,-1635043980,1204289384,-956301296,4679,463514,2122536448,91488280,-352315464,243715,1753647952,-1202708737,-1706033147,65535,-16247831,1996428406,276234002,-15829249,1996469366,-89069424,812957707,-15304961,1996428406,276234002,-15829249,1996426358,142016266,-16353537,1996479606,-1267269678,-393185537,1183447762,131393934,-10830205,-10849280,-6678922,-1996488449,1183446598,1975520200,129558787,-4557057,-258295690,-1996488698,-1072969146,1996426101,-25912,-1679228928,-1166606585,-1699186945,65535,200820361,1444050368,-1194690817]},{"sector":11,"data":[-1706033151,65535,-336169217,1087341012,-26112,1183514624,172374482,1183522686,205925340,-1982052861,1183517766,172370898,-1982708221,1187449414,-352321322,-700004603,1183514625,105265618,1183522686,138816476,-1982052861,1183516742,105262034,-1982708221,1187448390,-352321332,-867776763,1996423169,175570700,-2328833,1996477046,-118298606,-10582391,-16222465,1996424822,-763953188,-401443073,1183447260,-696844308,-3377409,1358913206,-1996031512,1996461638,-1871249484,971785867,2147442310,1585875718,-1962677249,-11473850,1996479606,309788626,-1980164120,-40826,1996469366,-330921072,-10582471,-2037709186,65797982,1357661835,-2328833,1996477046,-118560750,-1947318647,130531934,-2037710844,1200226142,172460310,-1995290997,1200165959,407341324,-1982052725,1183518279,273123794,-1981004149,-1957490105,1344201798,383010445,178256,-26032,1183514624,340142864,-1037330112,1183447249,239504346,1074939435,-775804007,-800683528,735725195,1183429702,-800683116,-1987033557,1183547462,-632945900,-1982970231,1183420998,273058742,-1982183893,-2037791674,-2037776518,-1070858370,-1985722743,1183687238,-1706027358,2234,-1714403701,1385779282,149264976,1183383552,-1437169240,380126861,150313552,1465253888,-1917026675,118925430,-1524689378,1595909541,-1136226978,312102934,-1962934263,1385814598,1347590480,609434,-2008643328,-1920313719,1343653958,605850,-1923656192,1988996734]},{"sector":12,"data":[503781000,-1515905258,1583292325,380520077,159357520,1183645696,-11528568,1996458614,-800683128,1346953425,643994,-1983894784,-1979757946,-1912649594,385828998,157260368,1183514624,1347590528,-1706012007,2445,-11630967,-11495799,-11630963,-1650831338,1442840585,1891536215,1320586751,503781119,-1515905258,1583292325,-9402739,-1130737642,-1962934263,1385796678,1347590480,16777114,-431585024,-1914153335,1343678022,16777114,-1923656192,-1912646466,118941302,-1524689378,1595909541,1418104158,-1706027265,65535,384190093,-394854576,-1947830529,-523141050,-6664120,-956301057,55366,-1929097495,1343660614,378029709,167352912,1183645696,-1924131192,1343663686,671386,-1926894848,1343660614,380126861,169450064,1183645696,-1924131160,1343667270,680346,-1236336896,-8747265,10911363,1183569276,-666486384,-2037558916,1343684424,384190093,172923472,1183645696,-1924131098,385832070,-26032,686489600,-12024179,-2037559274,1343684430,684698,1317440768,-1924131073,385839238,-26032,1325334528,-1001979954,-11747709,-1949205504,1178178118,-1962049842,1183436358,-1002009710,-8485239,1085687435,-12155255,965887627,2130658950,1183222534,-1962677249,1183420998,2055637906,-2037823233,-2037645500,-2043019394,75366212,-12286325,-8485239,51529355,-2037786554,1183579996,-666490098,-2109306552,12994247,-465138944,-946190711,16737414,-1958089984,-2037671330,1194983260]},{"sector":13,"data":[959807248,813568583,-1014297877,1996443678,-138090302,-1952817525,973036678,-360836025,1586169739,-968425530,-1643912239,126484332,513427083,-127801264,412763779,-10189057,970213003,2097112198,1822329774,-1995994113,973031046,343736903,-1996339317,-1946192250,-1979758970,-2037710265,126484342,-1948498293,738159774,1174602311,-2040624164,-1635055735,126615404,-12155255,-1954128245,-2043945914,1174667078,38242780,-10451317,-775804007,-2075751944,-10451317,178585,1443101175,2090240388,-297366529,-775804007,2022083064,-297366529,66713497,-1979746154,-1946196330,-13794234,1149667711,1183201791,-1962508545,-335591802,1149668100,-2075776001,-9009527,729808824,-1979745146,973030022,2147436166,1183222534,-1962611713,67060358,-1979745146,-1946197370,771717254,-2037809153,-1634992320,1194983276,-1962574334,82510407,-12548469,-8878549,-1192212855,-2043969537,-2037776538,-1634992322,1194983276,-1962574078,82510407,-12679541,-10058237,-2082584951,2097451134,-800683186,-666485944,1183532405,1988508124,957709823,2130666118,1652984582,-1962677249,-2037785530,132906850,-1982052725,-1946192250,1178197062,957513438,92139590,-336574837,-599356669,-336574839,-599356666,1457407625,-6916353,-1224796042,-1224736932,-1224736906,1996488546,-562626576,-4819201,-1224764810,-1224736898,-2037645446,1344208746,-898171049,-389515521,1183384100,-2109305962,-10713543,669582197,-2040624383,-2037839989,-2037645498]},{"sector":14,"data":[-13762696,1149667711,1183201791,-1962508545,-335591802,1149668100,2022059007,1988528639,2147465471,-10058197,-12417399,-12155335,-2037709185,82575174,-12417397,-10058237,-10320247,763643531,-2037809153,1586233152,38222214,1200293246,-1962611966,738148486,1183417414,2147465456,-8616405,-12679543,965107339,92209735,-352172149,1049004804,2089157631,-565802497,76578435,1183535485,1552296834,146943,1183532415,1988508124,957709823,2130666118,1652984582,-1962677249,-2037785530,132906850,-1982052725,-1946192250,1178197062,957513438,92139590,-336574837,-599356669,-336574839,-599356666,1457407625,-6916353,1996429430,1991704450,1656160255,-260636673,-2197761,1996469878,2125922194,2058813439,1787202559,-1957683457,1350569159,-493825,-236390794,-1773762304,-1984543093,-2037673402,-2037776518,1191182206,-800683048,2111325753,-72881917,-10830205,-12880896,1996428918,242129608,1183383552,1996445434,112842,241408592,-11141120,-4654986,77222143,-16777209,1996428918,-25862,1996423168,115514056,-6684672,-956301057,101958,-23306613,-1705835697,65535,1586382475,49120095,1562371467,1362509,-2081649835,1448542956,-1962248565,1178141766,-1207599610,48955393,-125059029,578090507,556675,-16052620,146277748,-1204557056,787152903,91553547,-352317768,309285,2122522859,242483208,91553547,-352318536,112657,-16053013,45614452,-1207702784]},{"sector":15,"data":[1599995917,-1034033781,-1957363704,183272428,611748694,119701123,-11126914,1996431990,511115040,-14911745,1996429942,376897304,-15436033,1996427894,242679568,-15960321,1996425846,108461832,-402360577,1776878963,2144261,70556240,1183383552,1975520250,-373282043,1586169172,55049978,67438475,-62486272,621299339,1183383568,138841078,-1996480475,1183579718,81186,37559156,-385649408,71106964,-385649408,121438701,-385649408,1877541707,545161985,-1956744192,1178147398,-1962574314,65738310,991577739,92082758,-351123829,440830736,2115388985,373721861,1183515627,-60912870,1183516553,38242576,16678531,-1957289100,135006278,516131664,178256,511115088,-15960321,1996425846,74907398,1088154,545161984,-385649408,1183514760,407255324,1183516030,-1962677480,1178278982,-1962574572,283841606,958154379,92149830,-350730613,474385155,-1979949429,440830727,2115388985,373721861,1183515627,273038106,1183516028,-1961825520,1178147398,-1962574314,65738310,-1961212277,1200225374,-159481086,1445164032,201868939,-1014280188,45633566,1996443648,209125150,-16091393,1996424822,286562820,1183514624,340146456,1183516030,-1962677484,1178277958,-1961722340,1178146886,-1962574316,149623878,-350730613,474385155,-1979949429,306612999,-1962784887,1178146886,-1962574320,65736774,-1961343349,1200225374,239504132,-2096740471,1946220158,1183536675,1342442504,1344193419]},{"sector":16,"data":[1342178488,-14780673,1996426358,108461834,-1710983425,4480,-17146229,-1705835697,3724,-383629685,2122515344,1416888352,957892235,92148294,-351123829,407276291,-1979949429,440830727,2131772985,273058565,1183515627,-60912870,-2097002615,1946220158,1183536675,1342442504,1344193419,1342177976,-14780673,1996426358,108461834,-1710983425,4590,136464071,-2087851264,1946165374,-60912799,-1995290997,407276295,2132559417,474385157,1183515627,273038104,1183516028,-1961825520,1178146886,-1962574052,65739846,-1961343349,1200225374,-25263358,1445164032,201868939,-1014280184,45633566,1996443648,209125150,-16091393,1996424822,309041668,1586167808,340167676,1183516553,306592026,1183516031,-1962677486,1586174534,38242812,-1995422069,1183515719,239483162,1183516031,-1962677490,1178278470,-1961722090,1178147398,-1962574066,149622342,-350599541,373721859,-1979949429,2122516039,594804982,138840918,-1957690356,-1202708797,-11534332,1996430966,175570700,-16353537,1452934262,-2097151981,1962942590,-23009021,957892235,92216390,-350468469,407276291,2098349627,306612997,1183518955,474364184,1183516031,-1962677476,1586174022,-1962440196,1178146374,-1962574054,65739334,991315595,92016198,-351385973,373721872,2132428345,440830725,1183515627,-60912874,-2097002615,1962997374,-29824765,138840918,-1957690356,-1202708797,317259778,545162238,-1956416512,1183579230,-1962440430]},{"sector":17,"data":[1178147910,-1962574064,65736774,-1961081205,1200225374,373721858,2115126841,306612997,1183515627,-60912874,-1962653815,1200164934,-25263354,1445164032,201868939,-1014280184,79187998,1996443648,209125150,-16091393,1996424822,-26108,2122514432,57999392,-1962887959,1178147910,-1962574318,65737286,-1961081205,126483550,957761163,92215878,-350599541,373721859,2081441339,273058565,1183518955,440809750,1183516031,-1962677478,1586173510,38242812,958154379,92149830,-350730613,474385155,2098349627,306612997,1183518955,407255324,1183516030,-1962677480,1586175046,71797244,957761163,92213318,-351254901,373721859,-1979949429,2122516039,594804982,138840918,-1957690356,-1202708797,-11534332,1996430966,175570700,-16353537,-1365638026,-1962934252,1183579230,-1962440428,1178147398,-1962574062,65737286,-1961212277,1200225374,407276290,2115257913,340167429,1183515627,-60912872,-1962653815,1200165446,273058566,-1962391671,1178147398,-1962574066,65736262,-1961212277,1200225374,407276298,2114995769,273058565,1183515627,-60912872,-1962129527,1200164422,-159481074,1445164032,201868939,-1014280188,146296862,1996443648,209125150,-16091393,1996424822,360356356,1187446784,-385872606,-1956709282,583163365,-326413056,1460333699,611748694,1342185656,1005210,-96040704,91602955,-823541717,-94467323,-1962719234,263431,-1946401143,270862406,-163149568,621299339,1183383584]}]],[[{"sector":1,"data":[575048702,1946159165,736539,-605486219,867585,1055458165,933123,1256784757,28764420,2129539,1183536244,306592026,1183516030,-1962677486,1586174534,-1962440196,1178146886,-1962574064,65736774,-1961343349,1200225374,-25263358,1445164032,201868939,-1014280184,45633566,1996443648,209125150,-16091393,1996424822,374446596,2122514432,57999392,-1962881303,1178147910,-1962574318,65737286,991708811,92016710,-351254901,474385168,2115126841,306612997,1183515627,-60912868,1183516553,440809750,1183516031,-1962677478,1178277446,-1962574832,283840582,957761163,92215878,-350599541,373721859,-1979949429,1183515207,474364184,1183516030,-1962677476,1178277958,-1962574574,283841094,957892235,92150854,-350468469,407276291,-1979949429,1183515719,273037590,1183516031,-1962677488,1586173510,105351676,16154243,-1957289100,67897414,516131664,309328,511115088,-15960321,1996425846,74907398,1495450,474385152,2115257913,340167429,1183515627,-60912868,1183516553,306592022,1183516031,-1962677486,1586173510,38242812,958154379,92147782,-351254901,474385155,-1979949429,1183515719,239483158,1183516031,-1962677490,1586173510,105351676,16154243,-1957289100,67897414,516131664,309328,511115088,-15960321,1996425846,74907398,1051034,575063808,1586167810,55574266,287349331,1183514624,63170850,2129539,1183538804,440809750,1183516031,-1962677478]},{"sector":2,"data":[1178277446,-1962574574,283841094,957761163,92215878,-350599541,373721859,-1979949429,273058567,-2097002615,1946222206,1183536675,1342704648,1344193419,1342177976,-14780673,1996426358,108461834,-1710983425,6076,958154379,92148806,-350992757,474385155,-1979949429,474385159,2115126841,306612997,1183515627,-60912868,-1962784887,1178147910,-1962574320,65736774,-1961081205,1200225374,239504132,-2096740471,1946220158,1183536675,1342442504,1344193419,1342178488,-14780673,1996426358,108461834,-1710983425,6224,2129539,300483445,407276543,2132559417,474385157,1183515627,306592536,1183516029,-1961825518,1178146886,-1962574052,65739846,-1961343349,126483550,957761163,92215878,-350599541,373721859,2081441339,273058565,1183518955,440809750,1183516031,-1962677478,1586173510,38242812,16154243,-1444347019,1183536894,1342442504,1344193419,1342177976,-14780673,1996426358,108461834,-1710983425,6332,-2080472087,1946165374,-60912797,-1995290997,407276295,2131772985,273058565,1183515627,-60912872,-1962784887,1178147398,-1962574318,65737286,-1961212277,1200225374,273058564,-2096740471,1946222206,1183536675,1342704648,1344193419,1342178488,-14780673,1996426358,108461834,-1710983425,6495,1586233131,1204259836,-670834479,-1995159925,-60912889,-783825013,-1948777504,126423622,2129539,1183529076,340146456,1183516030,-1962677484,1586174022,1204784124,-654057007]},{"sector":3,"data":[1183516553,239483162,1183516031,-1962677490,1586174534,1204784124,-654057007,1586169737,1204259836,-670834479,-1995422069,-60912889,-783825013,-1948777504,126422598,16154243,-1957289612,67897414,-62485680,-11055074,1996430966,175570700,-16353537,-828767114,-956301287,467526,-2080542743,1946165374,-60912799,-1995290997,474385159,2115520057,407276293,1183515627,273038108,1183516028,-1961825520,1178147910,-1962574312,65738822,-1961081205,1200225374,-25263358,1445164032,201868939,-1014280184,45633566,1996443648,209125150,-16091393,1996424822,439458308,1586167808,340167676,1183516553,306592022,1183516031,-1962677486,1586173510,38242812,-1995422069,1183515719,239483158,1183516031,-1962677490,1586173510,105351676,16154243,-1957289100,67897414,516131664,309328,511115088,-15960321,1996425846,74907398,1315738,545161984,-385649408,1183579292,407255324,1183516030,-1962677480,1178278982,-1962574574,283841094,958154379,92149830,-350730613,474385155,-1979949429,440830727,2115388985,373721861,1183515627,273038106,1183516028,-1961825520,1178147398,-1962574314,65738310,-1961212277,1200225374,-159481086,-385649408,-1957233612,67897414,1593673961,1575324511,1581762,11075587,763494401,383910147,458753,1507331,856162305,242614275,303169537,74907651,437387265,46923779,19071231,242941955,378798081,145358851,1041760257,114491395,19792127]},{"sector":4,"data":[240517123,19857663,166330371,396361729,106954755,20185343,98762755,20250879,390856707,20316415,112918531,20709631,138018819,20840703,239468547,313917441,144441347,391053313,148307971,399507457,104923139,375521281,89391107,1030160385,168427523,393216001,153681923,401801217,349241347,368443393,0,0,-2081649835,1448545516,638082756,-1014284405,1183433356,-61437446,-1962654069,36505174,-163149568,-336046455,-96042236,-94452734,2084518182,-2096829452,-1006438802,958854750,-1946910913,969051331,544733766,653942468,1589917579,126559990,653942468,1589905289,931735286,49956483,49704579,-1946794357,1178204246,-1950976262,1451951174,142598,1996113467,-59310323,1392146175,-402360577,1183580014,-128545802,1929922105,175570702,84440831,1347551234,1593791976,1575324511,1426065602,-326898549,1589925392,931866120,-1030962293,-1980086647,1183579222,106334980,-1996487123,1451882054,-2096829448,-1006175674,958855774,-336298953,-160529660,-161561594,2134325542,-1933341708,-96060990,1589927543,126559994,653280905,-1996339317,-1960381882,1183384647,-161561356,-1006138586,-1993934242,-161561593,38243110,653942468,-1006483575,-1960380834,1589904455,1200170746,-161561596,653280907,1183516553,1200170738,-196703486,71797030,117065347,116813443,-1946794357,1178204246,-385648646,1183580021,106334980,989857325,225901126,-231681,-11339146]},{"sector":5,"data":[786957430,-163148801,972576395,242419782,-16091393,100993142,-397389312,-1956708587,146955749,-326413056,1460726915,73304918,1183385483,146928,28837245,-949884160,63558,-1962647925,1183386695,-2081190922,1187450566,-1090518274,1022033921,-964436341,38243076,-1946925431,1178203718,-955810060,64582,1183518187,-196724234,1187453309,-1962933764,1178205254,-16354050,1183447110,-196703234,1207322249,2146467385,-129594433,-443850914,180829,1167087646,518818645,-327034738,1448542376,-1962123637,-1203336953,168149899,1921419520,-1303984129,1187479551,-947912804,-2147382202,25315015,-335598720,1922992981,1921418239,126550783,-1946532215,-2080410978,50295430,1183385483,-1303999510,2113553977,-96040186,-1951250807,1178176582,-1962508550,1183447622,-1673098356,2112505401,-364475642,-1952692599,1178174022,-1962508566,1183443526,2117683074,-1952022600,168102982,-398030592,1183045771,126550760,-9265525,-9271677,-1962440446,1183049822,126550760,-9265525,-9271677,-16283390,1586214982,-1203336436,1183516553,38242738,-1986247029,1183515719,105351564,-1987950965,1187448903,-956301180,42054,-10320185,1187446784,-956301178,16741510,-1983894784,1183432262,105286588,1946699275,105286436,-1995942261,1451867206,-2042181698,-1904214015,-956170379,16744070,-599341312,-1712783359,241076992,1156986763,108273672,-26029,1552613376,-1995994356,1552654918,-1995994350,-661941178]},{"sector":6,"data":[-1995946101,87924294,-955419392,46662,-8485177,434831360,8436867,-1962508799,-352288636,112643,-944355703,33521286,341609216,1183385483,-1948742672,1183385671,81404,1187448693,-352321316,-599341271,1586167809,41911202,-2095352576,1946356350,-58817771,-955288318,33514118,-262239488,-1995552885,2122560582,427098246,207522646,-16615425,2013201527,142081798,16777114,1954941184,207522815,1183385483,-2038529096,-385649664,2122514569,58000138,-167739159,50295942,2122545524,91554058,-352321096,309251,-2082847095,1946213502,-632389628,2126414720,443810047,28737155,1317012606,2122518746,175375774,10387075,1317012596,1586176218,541559714,1004160547,796252742,447898,2122536448,91554058,-352315720,1357827,205949776,503319045,-1200160944,16777114,-26112,1187446784,-2097151580,1946199166,105244931,-401836289,-768869145,318767365,-230258222,-1191946615,1385758744,-193527984,-1695385857,1291,-628373365,-1947056501,-1903561642,-1635123364,61996894,16777114,833792,1364450091,-755969,-2037779850,-1769341096,-6619302,50331903,335501446,67066518,335502470,-1979752810,1451869254,-1706011962,1501,194135689,-385649216,-1706031646,1515,-1981528439,-1039407530,-941030539,1619973,66219767,1452008518,-901346842,-1949542775,-523111866,97142275,-2037841916,-1769341078,112787308,-227608832,-9796093,-9660789,-1982708087]},{"sector":7,"data":[112776278,-227608832,-1949153789,1183437910,-799634994,-8470909,-385649408,2122514616,57934346,-1962889239,-523126714,-2037825472,1861746552,1585875384,1620223,-1179095305,-796196854,-10582389,-628367151,-1023153673,-1728048123,-1983625591,1347602006,16777114,1619429632,1958743039,-6664089,-1996488449,1451853894,702602,-10572041,-1954003453,168135254,2055637248,2090240511,-1203336193,-523116335,-8747517,-1996487675,1451873862,-2008642600,-9533815,-9398647,2117730091,-1004306760,654274206,-63545,38258470,179896319,2024732416,1854276095,-555005953,-8485177,1996423168,-428409076,-1914407169,1343675974,-1695385857,65535,51019395,-2033775499,327528,-8485237,-2033776149,589672,-1982052725,2122564166,91488390,29509319,1656652544,947126527,-1710328065,65535,196888201,-955746880,33862,-16494615,1996464758,-25932,1183383552,1975520190,-1133052150,16777114,-2133005568,1090483342,16777114,-2142845184,1187446784,-1962934026,1200295006,-934901496,-1996208245,-369138554,1187447566,-1962934086,1452001862,-1471772212,-1951770999,-1946195322,-1979749226,1451876422,-465138718,-1981393269,1451857990,1720108954,-385875713,1589903752,1686539160,1194927871,-385647088,958792048,58659399,-385783831,1589903562,2139301528,108789772,239599398,1589905387,1342121624,-1738619890,239569702,-523116335,84690435,1183383562,263672,-1951381879,126613598,-10582391]},{"sector":8,"data":[-1951375733,1585851143,-1773762049,-1962784885,1194063966,1988528386,-1738634241,209683238,-1961460736,1200336990,-1738634494,340232486,-10582389,-351827674,-128021718,-1006483573,-1993959330,1586172999,-1962439760,-1993959330,-1773761785,1183439095,1988529046,-1982269441,-989890938,-2037671842,-1993932938,-953808825,1607,410304523,-1718204789,-9007477,-1993934345,1183515207,-101213802,72845606,-1952948540,654271622,2132035385,-14227197,17464963,-1960440715,-1470184441,44582531,1589915627,126559896,-2082447676,637722694,1589905289,1200301720,-530660330,48252547,-1006139098,-1960404898,1589907015,-532249632,126428674,-994425089,-1960404898,19268167,1200301575,1191257604,2092960518,1200301587,1194927624,639859718,637945641,451610623,647519940,-150452341,1195058904,638286854,638076811,637945601,1182994431,-2030102376,1183580006,1720072670,-385647105,2122579564,58655162,-2097071639,1963002494,-864616679,-1949665537,-523126202,-1949678077,1347603542,-369680920,-1224802068,-1224736916,112787306,-1167132928,-9796093,-9660789,-1293397934,1823932407,1790377983,-1166606337,-1996351000,-1098663354,1946222462,176063287,-13535998,-33610,-34122,1996477558,-2139684910,-9652481,-9783553,1689714512,-1971912705,-7833857,-34634,1021900406,-163149565,-1949677941,1183435862,-1437169240,-9795957,-9660789,-1981790583,1183572566,-732525614,-1985198455,-13914538,1589923307,126559968]},{"sector":9,"data":[-2086117692,637708358,1589905289,-532249632,126559746,-2085855548,637709382,1589905289,-532249632,126559746,-2085855548,637709382,1589905289,-532249632,126559746,-2085855548,637709382,960956297,-1367360898,-1984280949,2122547270,678691010,1954974550,1753615359,1996443903,-898170932,-4557057,-39754,1996476534,-1099497522,-1698924801,65535,-10189057,969426571,2113889414,-51975933,-10305917,-13732864,1996426870,171547324,1183383552,1996445422,112830,-26032,1996423168,-294191346,16777114,-1133052160,444826,78027264,-1098711040,1962999678,11135235,51019395,-1595341963,-2038529280,-385649664,2122514583,2020934154,-8603905,-8734977,-2853121,1996477046,1823932288,1790377983,1354771455,-10176769,-7702785,-1224767370,1996488568,32368886,-336181623,242679569,-2590977,1996478070,184130214,1996423168,-2005467254,-2590977,-1224747402,1996488568,132507894,1034307209,-780206079,-10438913,724122,1622605568,185899775,434831360,28868227,1996428158,205949710,503319045,-1200160944,16777114,-2075736320,2122514433,276103332,-1701677313,65535,-1701677313,65535,1585727115,49120095,1562371467,707149,-2081649835,1448545004,1183432747,737709054,14477814,16678531,112745333,-990972160,-670890402,-1962439898,440520,1586229239,651690758,112725897,-1947273472,-670890402,38243110,112773259,-1947207936,-670890402,38766886,-150993224]},{"sector":10,"data":[106859502,-1960388605,-930413497,-1152923765,-336134138,1577310347,1334388230,440324,1589964535,651690758,16926710,1191118196,-16520194,2122579534,1534394622,-150993224,106874094,-1960388605,-1194816761,-269025274,50749067,260646616,-150993224,106859502,-1960388605,-930414009,-150993224,106859503,-1993943037,112722511,-1947273472,-670890402,71797542,-947140469,441159,-661918729,637951491,1174687625,1208239755,58639931,-1191241239,1861681158,105251588,-1995942261,1451882054,-161561352,-95974618,112773259,-990906624,-670890402,-1005614810,-1960380834,-930350009,-150993224,106874095,-1993943037,1589903951,1200301814,-1949791234,112936903,-1947470080,106824664,638076558,-1962651767,-1956684089,113401317,-326413056,1463217283,-364460202,1340669952,440321,65695479,1451955782,263448,-1982970231,1589956694,1065428686,91586561,509734,440320,65695479,1451955782,263448,-1982970231,1589956694,931866318,125695499,-654850421,-1207465690,1861681158,373687274,-1994893685,1451871814,-832650032,71797542,651708041,1183385483,-96024580,1187446784,-385875736,1183514826,-398051058,-924253316,440320,65564407,1451954246,-834238190,-992979319,1183567454,1194927832,-385649660,1187446939,-1962933766,-773598760,443991267,637569830,-1996337013,1451873350,702678,651452100,50622455,-1983738685,1451879494,-832650002,-1727558874,653024964,-1993996407,1183515223]},{"sector":11,"data":[1200170508,440324,65695479,1451955782,263448,-1983232375,1589955670,126559946,-1993942793,1975520007,130491909,112754689,-395380992,-1961867773,67441238,-834238208,-992979319,-1960391074,651753223,-1073018999,-953808267,-343932665,-398000381,16416387,770245493,-364445697,957630091,58583622,738109161,-398030400,-1947580791,1178145862,-1960674070,1178144326,-385647384,367723532,-150993224,-259265938,639000260,292995,1191119741,340167658,2095728185,340167651,1978287673,440359,-1947570441,376882392,-16726234,-1206523009,1861681158,-990868504,-2094657442,2097153144,-398000373,957236875,-478353338,957236875,276162630,-150993224,-661919634,638613188,2147418311,1183432747,-767129090,957630091,192735814,957236875,58517574,-1191222039,1861681158,373687274,-1994893685,1451871814,-832650032,-1962439898,440520,-1947701513,276219096,2114468134,-832650168,71797542,1183565963,-28965934,-150993221,-1980724245,1317658698,-364475408,-1947580673,-1947600949,376882392,-1962898650,-767128632,64112383,112983622,-1947470080,-599094800,-338014583,440423,-1947701513,274646256,71338790,1183565963,-28965934,-150993221,-1980724245,1317658698,-398029864,-1947711745,-1947600949,276219096,-1962898650,-767128632,-108917,-1039925690,-150993221,-1980724245,1317657674,-1206522884,1861681158,-990868502,-2094655906,2097153144,-364445941,957630091,-478352826,957630091,662039110]},{"sector":12,"data":[-150993224,-661919122,639006404,2147418311,112727531,-395380992,1589964939,2021860880,192741380,-1947711745,1178144326,-1948025624,1178144326,-1206880792,1861681158,-992441368,-953806730,-1199571200,1861681158,373687274,-1994893685,1451871814,-832650032,-1962439898,440520,-1947701513,276219096,2114468134,-832650168,71797542,1183565963,-28965934,-150993221,-1980724245,1317658698,-364475408,-1947580673,-1947600949,376882392,-1962898650,-767128632,64112383,112983622,-1947470080,-599094800,-338014583,440400,-1947701513,274646256,71338790,1183565963,-28965934,-150993221,-1980724245,1317658698,-398029864,-1947711745,-1947600949,276219096,-1962898650,-767128632,-108917,-1039925690,-150993221,-1980724245,1317657674,-763460612,-1958054654,-472784802,1992614865,9119258,38832934,-1980348791,1586231382,-773598746,9119459,38832934,-1980610935,1589965910,1200170742,1468605958,-228670456,-1946794357,-1993934762,-1993996729,585697367,-25263107,-385649662,1183514778,107935492,-150992199,138806249,-1995811189,1451873350,-529072170,-2328833,1347554422,-1207886104,1861681162,-990868730,-1014246306,-972832116,638028070,-1962780791,-472784802,2126832593,-733574374,637634854,16929161,1996477558,-495517722,1376548607,-388729089,179831007,107935488,-1949020533,-936651170,651460292,-1993994871,1586168413,-773598746,444515555,-1949022581,-1993943466,1367942657,71729922,-58726142,-772776309]},{"sector":13,"data":[-991702557,-1960437130,1351296512,-733574910,-1193912695,1589903370,1878468308,-1933376764,-330921534,-1947314551,-996550586,-1993937826,-1993996729,1589905495,1199777492,1182990852,1183517420,1589942780,126428908,39291174,638338699,637814665,637945739,-2096605301,-1962218426,-1952842682,-1993937826,1468605959,205949698,71797030,105351974,139954982,-774349173,-1897672221,1183521862,-698971180,637569318,-385724279,1183579105,-1956684284,448945637,-326413056,-1006310269,-953809826,132167,-1727248757,105351462,139954470,-1030962293,-1996486139,1451883590,172395518,-60898151,638028070,-1962780791,-1993996218,1589904455,1200301572,1468737030,-60898296,105351462,139954470,184305283,-1727379829,654073483,-1993996407,1183515223,1200170504,73319428,105351974,139954982,654073540,637945737,-1962387575,180510181,-326413056,-1960907645,1451953222,-129595122,-939895159,59974,956581515,1702750790,653811396,163715,-1014280836,1183433356,-396981786,652631748,-63545,38258470,1187512319,-956301070,60486,-1962391925,1183386198,-27883012,15498883,-672595084,-431584512,99112587,1183383562,-262764050,15353543,-1204032768,1861681162,-129629946,-336967937,-373281901,1589903648,126559982,654073540,1589905289,1200301806,-60898300,83641987,38242598,-2081274113,-16060858,1589963334,-364475418,71776550,-1960391553,-1960442297,1183385687,-396981786,-1006630216,-148445602]},{"sector":14,"data":[-1023212433,1183433356,-262764050,15353543,-1003558144,-1960382882,-60898297,-1995994842,1589966406,1200301806,-60898300,83641987,38242598,-768375,1854140998,1191119598,-429996822,652887691,2130986809,126559942,39291686,-1981659511,-92019626,1024095743,91619327,-336443765,-429996947,-16267482,1204233983,-1946157310,1452008006,-431584796,-1947707767,1452013638,-397002246,-202833036,-431605250,-337050764,140428542,653674123,158664505,653543051,1946306361,140428321,-1006138586,-1993933730,140428295,38243110,-2080612668,637860934,-16627831,1187508806,-385875476,-443810130,319603293,-570359040,285212938,1778385664,301990147,1090519834,301990154,939590418,301990149,-721353984,318767370,-1375730944,587267850,1174405889,-1811939062,-671087850,402653444,-1174404290,771817222,771752705,788594442,-1593834751,872480516,218104577,889257732,-67108095,906034953,-1610611967,1006698246,671089409,754974981,1744831254,1040252678,503317249,-1241513718,-251657454,1040187652,-2130705601,1644167428,22,0,0,1167087646,518818645,-326903666,-1957275888,-1070919562,-1980217719,76282438,-990886263,-953808802,-1962934009,1451953222,-230258418,-990620023,-953748898,2631,-1995815795,-13894586,1223706251,192857915,-1962385724,958793286,-2094826489,1962997886,11725059,653418180,722093963,1200170695,2139694604,1204233738,-385875434,1586167979,38243324]},{"sector":15,"data":[2114340665,-125926592,-1003260928,-14284706,-228670457,172460838,-1993947349,-1993995193,-953808257,136775,-396995834,1182990478,1589909746,2139694834,-129579254,1187446784,-352321030,-60912827,956450699,981272135,16416387,1589915508,134161928,-1947050300,1194010311,1200170506,1204233740,100663574,1206408787,-230259968,-228670440,176130342,16402119,-129579264,-2092498943,-385549242,1589968690,650611698,638207787,638338953,18237383,-193528064,1458730751,1577061864,49120095,1562371467,838221,-2081649835,1448545004,637951684,638220171,819075,-1070922628,28836843,-990893312,-1993996706,-1960440201,-472839585,1577313233,206015236,637951627,638601097,638338955,51011467,-773598760,73270243,-1962129525,-1993996706,2123043399,-775517436,65065440,172329976,-1949791335,-628421051,465644441,-96040493,-1946397047,-1952904123,272993224,731503243,-1982653503,1451882054,106859512,209683238,-1962378240,-1993995707,-1002575097,-1960442274,-422506889,1586226897,239110916,637951627,1183516553,-61436934,-763111177,-1982138624,1451883078,-163148804,-134719861,13796312,1183439607,-128546314,637951684,51398539,-1993935290,1183519815,1200170742,1204233736,184549382,812972102,-493825,1996486262,-92864516,16777114,106873856,38242598,-493825,1996486262,-92864516,16777114,106873856,71797030,-443850914,33997405,1560281856,-1979711230,1157628734,1728053506]},{"sector":16,"data":[61,0,0,0,-1296313805,-1864856575,-326412987,-2082959842,1465256172,-1961867637,28906590,2109942528,-136775932,-62486055,-1946530167,1586171462,112914,125682475,-638068489,-1996454167,1317664838,-129594378,1006395019,-1959035709,198216698,50623743,-774689838,343313402,-1961722229,535033934,1465274961,-16222465,1593771638,56187402,1445721726,50757116,1979971670,-371072262,-91553600,-16002165,-771554188,-86912981,-1961593205,1317737086,1361044476,-11053486,1996425334,173997830,1979930970,-128570374,1443038845,-159513604,-2048269854,-129595136,-1946792311,1586231366,2093169660,-1946514628,1962871760,735183620,-86949165,-1961593205,1317737086,1361044472,-11053486,1996425334,173997830,2114148698,-61461514,1443038847,-92929032,988537314,-1946514544,1962871763,735183620,-86949168,-1961593205,1317737086,1361044476,-11053486,1996425334,173997830,1979930970,-128570374,1443038847,-159513604,1583342050,-1962742397,1297948645,-1946152758,1430622424,-1910575989,149717976,1586190166,-2145416434,2080899711,-26105,69140480,185499275,-1955040001,-796066763,2123219086,-1948808202,-1951724474,-1951724986,113146,-6628557,-1929379585,1962931838,-1705568724,65535,1198833675,1358581389,16777114,2089506816,678756138,-14256897,1996425334,-11463162,1284310109,678756156,-14256897,1996486262,-59310088,519730943,543031121,-26032,-1957167104]},{"sector":17,"data":[1452014150,-1207636996,1603928063,49120094,1562371467,707149,1167120524,518818645,-326903666,-1957210620,-16053634,898328180,-1064382324,-1946517875,-1951725498,-1918171578,28965502,-1696910592,411,-360819,1461070964,108698,1958742784,-1248178121,1476395009,858422411,678756306,-14256897,1996487286,1381126908,543031122,1962920243,645201704,1364283474,1342463487,125594,82532352,-1711276104,-310157729,535137026,113921373,196613,66117,204042,65906,210836,66173,202388,66104,209756,66127,5730,-2081649835,1465268460,1988874803,41714450,-2147257086,1183518926,1975520006,71600910,-1949809015,1183385156,-1995117622,1183566406,-934901500,1183432755,440830236,871360128,-330921536,639663812,1183384971,1166747366,-465139454,-1996175485,1183522942,-1982821866,1451884118,209619960,-1993456245,-1991709114,1166801990,-263812820,-1993849461,1166799942,-230258390,1226722955,-335788405,954830855,508463875,-1980269495,-1957683634,-149254,-16353537,1347421302,-3508481,1996474486,309788436,552078992,1490520838,1948305142,-96040176,-1946401143,1183447110,-338654466,-62486269,-1981397365,1586227782,-396457500,639663812,1317604747,1972053734,-461993726,-1996175485,-427810690,-1141691434,159318017,-830470540,1272903456,-1194841269,159318017,-830470540,1222244097,2127444808,-1815181562,-167195008,125051078,-604514057,-1996360064]}],[{"sector":1,"data":[1317658742,-599356966,-1948361079,-956895162,722433032,1183446086,-196703242,-336836983,1177260045,-163149326,-1980610933,-963908538,1183443153,549910242,-1991900812,-956901258,-2141096928,-92258098,-1957595905,1220971482,1861736695,-1949660180,-632910864,1861736695,331744246,-62520367,-1962880381,-528770,-134457719,1317796958,-1983249426,-745801138,-638072693,132219201,-1983655424,134608990,119883776,-758609152,-27883062,-1947836789,116122702,-1947574645,-830412722,410422020,-1995815797,-964439482,-1878136044,-1946246423,197892,-268181295,2094157567,71601135,-344014533,990004363,-1962771007,-867792447,-1948879223,-1946579981,1183572558,-165811204,108339398,343523339,-1073019669,1174605439,-155004690,74719430,-892286256,2094550783,-864142510,1183404149,83263740,1963247350,-698446986,-1996208245,126602310,-2133834103,-956955954,1211266049,-670834479,-1962491005,1325352967,2112895952,49709126,2094026495,29816390,1263208308,-347601013,-1958526204,-371004665,1860959739,113476496,1325336459,2129673168,49709082,2094026495,29816346,1263208308,-347601013,-1958526204,-1981617401,1183437918,-2143491122,1325335758,-1950057262,126604894,-670834479,-1996045437,1200346718,-867792638,208992315,1946273526,108477194,267113852,-1946201367,-523155449,2000410627,-1950057210,-956892090,992965892,712363638,-1946401143,1183568990,49709262,2094026495,29816486,1263208308,-347601013,-1958526204]},{"sector":2,"data":[-732002041,-1949415799,-956892090,173307206,-1994229294,1317665862,-27883038,-15698177,1465257590,-14911745,1996429942,309788436,-351772929,281474597,1183394164,-498169348,-108919,1996427382,-11053554,1996474998,343343048,-15567105,1183516766,-498168836,-2130815349,-956907546,51868680,1177280118,-632411156,2114128253,-163173412,-371175933,2114190957,-330945570,2111458859,-596245518,66471467,1458167886,-149250,-16353537,1347421302,-3508481,1996474486,309788436,-186118512,112642,-443851169,2146909,-458561537,-768409366,-1946045765,1430622424,-1910575989,720143320,2123061078,-1959425268,529207900,-2096607349,1149044217,200822409,-2094304046,1946253436,142525464,-1962520949,1418419292,84092510,52859819,-493638907,142525684,856051339,-25893,1156972544,259268616,-1710459137,65535,58048523,-2097069591,16810172,1996427646,175570700,-16222465,870844022,-1947866364,529206364,-1960552565,1187458164,-947912728,2147478086,15484615,-297351296,1317765120,142525446,184618728,-385648183,-1706032902,65535,710708056,-1962115957,-1958943939,937631309,16285315,-1040775564,729022496,-1925415795,1962928214,645201704,18364159,-16353537,1996425846,1962876424,1962876462,374808110,476053330,-1962891543,887292493,-1961722741,-95515331,-14125825,1979655796,242614032,1610567958,643089412,-1930406263,1552675398,542622762,16008903,-163133696,921370624]},{"sector":3,"data":[383024781,-149497,-1414812757,-1423031157,-1951672180,-1951720377,-1951719865,-1951717820,-2085935036,2122913007,-162099980,-1930396023,382005846,2089615636,-128021700,-259028434,207391491,1996431243,142016266,-16353537,1996487798,745865210,-11067823,1996485238,1376146416,-624897,1676211318,-6663942,1476395263,-310157729,535137026,147475805,147227392,1981869,149488500,-1072976639,-68615307,-24699392,-661733236,-398050387,1183384445,-330941464,1183384444,1178316268,-1996259862,1178331718,-1996260114,-589107642,-1161473,-2027951034,1001210359,92203078,870860425,1178316233,-1996128534,-919344570,-330941523,1183384957,-1379322900,2112767547,-297367291,1183566131,-398054420,1183521406,-364499986,1988825726,187992844,-150506039,1946157506,2011906309,2123069163,1979649016,2122531077,2104820230,638090948,-1960442485,-1960442787,992346709,628426325,142394171,92874387,73238822,2129419835,-329872633,72714534,2112374331,-396981450,-350910170,1975728942,1569400384,2094217990,651396874,637687177,990272905,125759070,653149835,990266761,125692502,652887691,-1023261303,-335544391,209095674,2089497739,-1958900974,2122909821,-339135496,-1864856346,-326412987,-2082959842,1465256172,-1944947003,1975520216,10676483,185353867,-352095040,1183551523,106728206,2084619051,146711,1183519359,73173776,2084619051,146695,1793786495,-46332789,-1957137153,73173764,159367995]},{"sector":4,"data":[1140213385,-335913335,-161576697,-96040640,-1962785653,-1019541924,1183385983,1586054136,-1995969540,-1992230818,1183710278,140297462,-1174404423,1962868754,276102930,1444827474,1392923398,-16222465,1343620726,-1962124033,76091462,-1995553141,1183515204,71600400,-1995553141,1583285828,-1962742397,1297948645,-1946152758,1430622424,-1910575989,149717976,1586190166,-2145416438,2080899711,-26105,34799616,2123087923,1962871562,-1942648009,-1916760368,-964430210,-1515848612,-1425521013,-1425652085,-1175028083,-293404670,138840928,-1956887415,1149830726,175570782,-1873717482,-67770354,-310157729,535137026,113921373,-1864856576,-326412987,-2082959842,1465264876,-1962123637,41910303,-1710785528,1982,1317733157,-1955470580,-108853682,-2090238974,276761337,-1064382324,1473674893,1183432755,-1876956204,-506338863,-26031,1183383552,1975520212,-1874728189,-661849973,-1957183346,-611580338,-1962379579,-203304495,1608224421,101480191,244339287,-1946456344,-16001922,-1705572748,65535,1593835960,49120094,1562371467,576077,-269762509,-2081649835,-2091510548,2097284222,112646,-956212247,60998,-788248949,1356911072,597658,-129595136,91602955,1038729259,-128021759,-1962719234,-28931833,15746759,-1960645888,45215862,1589962451,9119238,-1979818357,106859264,37784358,-1979818357,1191117376,71732208,2096121401,4241622,156211792,1183383552,1975520244,14674179,1207883915]},{"sector":5,"data":[-1995994365,1996487750,-454537206,243712,-1996198153,-523110842,235266257,-1516613632,-1996488695,-1072960442,-1561787531,-19363072,126550855,-375159,1996488310,656644,-163148976,-523116335,-59310256,-1996368920,-1072957882,1586188157,55574252,167483987,1183514624,1087961078,-163149504,-523116335,1342180869,16777114,-330921728,1333051403,1207883915,-1995994365,1996487238,74907646,1342179845,-772389237,1356911072,-386107649,1183383936,-94467082,-1980348789,175570695,243795,1354771280,-26032,1187446784,-1962933778,1342106718,127554307,-1962934262,1342108766,328880899,-1962934262,1342109790,-1801825533,-1962934264,-1956712890,146955749,-326413056,1443425411,-1962516853,-28931833,1207359627,141828104,-1710852353,1112,-2080481653,16810175,-2020931970,65732736,-1996488264,1586232390,-2101378050,108921088,8554379,28836843,-96040704,100433539,1187469950,-1962934024,-422446986,21411071,-1191414017,-1706013152,2717,-1996202357,1219821312,-92864767,1347297464,713370,73304832,-2097004407,-2096957370,2082535550,-1946973242,1177230404,1011321340,1149962121,-96064718,-1995290743,2095779399,16271047,-126448896,-1258297647,1996423558,1310767356,183999056,1586167808,-16742140,-16676684,548993654,-6664114,-1962934017,1082721374,-129596670,-125926654,-1949926368,474254323,-1979955669,1200176199,877103416,-1993324663,1200163911,71797000,1149962121,-96064718]},{"sector":6,"data":[-1994504311,1200167495,306678038,-1995552887,1200163399,38242566,1577058744,-1034033781,-1957363708,216826860,-1070377130,-1930148215,-1950314792,1183385670,105251838,1183402056,-96040452,-1241221493,-1958745089,2123103350,-95515650,-372126165,-1510783418,721962635,-774309945,1223217640,200564363,-150702885,1606626264,1575324510,855640770,-1963660352,147226866,-351279488,-695562151,-1946354037,-1985147786,-930351034,-163149395,-15960439,-613152178,-164452996,732813451,2111436744,265191429,-2136090121,-1020590090,92135633,-150473088,2109815768,66486276,1005113745,-2147254847,-771096074,-695596931,-2146909568,-141881374,-315424974,-903164278,-2146385536,-109047839,-385647096,-1946419070,-628425090,-472783919,-58836159,1191118194,-1962021900,260166,-163148885,-1425915901,-2130394237,-503300893,-25261600,-58815491,-1014965622,266567688,-472783919,2013167163,-196673787,1183518187,37749750,-129594453,984285187,-1977387818,147030238,-787487872,1004786147,91750014,-336312577,-163149043,-1425915901,66602635,2122951424,-15799812,-25261060,-472786294,2117854161,-16420100,233567302,66602635,1183558400,37749750,-773944661,1004786147,91421822,-336312577,-129594611,-1951727613,1074001478,2122951426,2123103742,-2116421636,-1979707423,147030234,-787487872,1105449443,2013167163,-196673787,1183518187,37749750,-129594453,-2085945341,-478083861,-522059716,-369328503,720528,176685059]},{"sector":7,"data":[763494401,160301315,458753,171704323,437387265,166330371,19005695,94306307,378798081,137101315,932446209,71958531,861667329,78381059,375521281,140115971,367984641,147652611,368443393,0,1167087646,518818645,-326903666,1988843018,-754798330,180782054,1385809547,-26032,1183383552,1975520252,-18427,1996437739,12229372,1183383552,-128546314,-1946788156,-1993996730,-1993997753,-953809801,1607,17286950,1204233728,-16777208,1939537014,-1962934271,-2090927034,-443874579,-900899553,1478361090,-1957345904,-661774612,-1207535873,-397410303,-310181847,535137026,46812509,-1873273344,-326412987,-2585058,-1070922122,780368,-1962742397,1297948645,1426064074,-326898549,1996445208,33790470,1183383552,-195655182,108380683,-369098824,1589903644,126559986,81224,1187448957,-369098762,1589903501,1200301810,-773795576,-1933376544,394690,-1980086647,1589967958,1200301818,-163149562,294531,1589929333,268379890,20939558,-953807243,2119,105367334,1273692160,653418180,425857,637957184,-351778817,-228670406,-1995994330,-661917626,-472783919,653948612,-1960443765,29033040,-128022272,-472783919,637569318,-1962782583,-523110330,-1946270071,1178202182,-15893250,1234830966,-1962934270,1860957766,1090406027,2112898619,-28931294,-523116335,-1946532349,1183448150,-296318484,653024964,958793611,58524743,-1946269953,-523110330,1174659281]},{"sector":8,"data":[-61436934,-1981004151,1183575638,-773795330,-96074784,-1981266295,1589963350,126559980,652762820,159188793,-11381934,-387388298,-28931327,-369604983,-1956708491,79846885,-1873273344,-326412987,-2082959842,-11138836,-1600518026,-1996488702,1451882566,1975651322,-18427,2122534891,158662662,653811396,-352172149,-128007104,41388838,637957635,-578865351,-523123061,67494097,1200170496,2005476868,142016258,181402,142016256,653811396,-1727772789,45633618,-6664192,-1962934017,-310157626,535137026,80366941,-1873273344,-326412987,-2585058,-6683018,-2097151745,-443874579,-900899553,1478361090,-1957345904,-661774612,1443818627,-1710590209,65535,-1980610935,-1039403946,-4716939,17426943,653418180,958793611,175964743,-1710590209,880,1589961963,126559986,-1995964634,-1960379322,52824135,1195058695,640646658,-787986549,-1981754912,-1014237626,101040780,-1957670400,-1023150522,1375733253,-159973552,16777114,-228670464,138921766,1589903360,1200301810,-773795576,-1933376544,394690,-1980217719,1586231894,-773598724,-126434077,637945483,1988821129,-773402116,-128021530,638076555,-1006485367,1183576670,1194927622,637959942,-351910007,-228670449,105367334,2122530816,225772028,-1710590209,65535,-352321096,-62485692,1183447249,-60912650,-472783919,653817540,1586167947,-773598730,3745507,1183568510,-773795338,-1933179936,-1957670206,-523109306,-972824367]},{"sector":9,"data":[350769234,-163149056,-335788407,-310157655,535137026,113921373,-326413056,-1006310269,-1960441762,1468737031,-62486270,-989964663,-1960442786,1468737031,140428290,638028070,-1006479479,1183515742,-27882500,638028070,-1962780791,146955749,16973830,66143,16973840,66175,16973841,65586,16973842,65631,196627,65566,202285,16712453,250,0,1167120524,518818645,-326903666,-61385210,-1005816123,1183516798,-1036805882,1183433259,-126449156,460640779,-523112405,-523116335,1988751363,-15930376,1501494350,1190688395,-1191676279,1183383560,106335226,-234683254,-234675062,-234668918,-234677110,-234673014,-234681206,1979921546,-1961588218,-2061584,-1015219634,-422461231,-405745456,-472854320,-439299888,-506408752,-422522672,-489631536,-341126960,-2090967078,-443874579,-900899553,347668490,-1188566272,585836563,-352056647,537704733,314120427,-1189876964,250291213,-905969224,196673552,-1190925544,-661902325,-1957210480,-1898476300,552371143,-768344949,-1523127674,910556386,-1927647863,1586240109,-1881633026,1183835718,38178792,-1996208497,1992616534,-1130526,184573416,-1005488686,864672374,-1946008692,1959136192,5171203,-1961205877,-2489569,-2585825,393865806,-1930002748,1959201728,-96040178,306546982,654067339,-1005304439,1183575678,1166616306,-196703470,340101414,1720566667,-2090967066,-443874579,-884122337,-1942779396,-1070398909]},{"sector":10,"data":[1963211046,136219621,639601409,-1995291513,1200292931,1149707792,105089300,-1022834813,1167120524,518818645,1465309326,-1006219637,1992625278,1604645640,49120094,1562371467,707149,1167087646,518818645,-326903666,205949738,1947092491,207537161,4161574,-4716939,23063039,50478723,-2096663552,197694,117379189,28836610,-6664192,-1560280833,1048773578,1962869706,242679765,-1928562945,1343673926,16777114,-700019456,-6664170,1342177535,602410640,-163149558,-1961987008,-472779170,-1081875503,1946157988,3979425,-1706012007,659,201082505,-1207536192,-286654469,-59310336,153754,-129595136,-990226807,-953747362,83886087,1347551246,-15829249,548932726,635981824,-128007157,653674123,1074153353,-2144991115,-381681329,1709703298,104760075,1081344003,383141517,-26032,1589903360,1200170744,2109737776,-59310311,106650,-59310336,206490,-128007168,809995046,1589934571,2139170552,1950351408,1333798581,954957825,-1946663285,235272790,-1957670400,1175128134,-1005620214,-2144991138,108265535,-1030962293,-122157589,1390054402,2144336,177662032,653811396,536956800,653811396,149447,105286400,138905894,-1993949133,-1993995193,-1993995705,-953799097,459847,-1694730497,554,-2080618869,-443874579,-900899553,1478361098,-1957345904,-661774612,1449192579,33310407,108461824,144794,2144471808,1023769613,108199996,-369099336,1996423614]},{"sector":11,"data":[173795334,-1980742007,-1039404458,-4716939,27847167,653287108,1073743863,-2094657420,1946157695,25815299,38272806,1048775403,1946157830,24766723,653287108,1073891211,71777062,1996440693,52140550,1996423168,108461830,244634,1049856,1375785603,178256,-26032,-1073020928,-71825803,21555711,-1710852353,688,-1980742007,1589965398,1199777520,1589905412,2005608176,652660994,3162311,1200301568,65065218,96636099,1183383598,-94991880,-1728015688,-6664110,-1006632705,-1993934754,1975520007,-62470392,-387317765,-128007168,-1707606234,65535,-1980479863,1589966422,133637872,359940096,379602573,-1933341872,918978,-6664110,-352321281,-401698791,1352140651,503517368,1354773328,379602573,-26032,1183645696,-1957685600,1452012614,656886,28856402,-6664176,-1006632705,-1993935778,762658823,653811396,-1919272961,-1006632957,-14223266,-26057,1589903360,1736451824,1589960449,130492152,1187446784,-335544324,-195115952,-1204289754,1344144148,-1705983949,65535,653549252,753536,-14284683,-26057,1589903360,1204233972,637534468,33703879,-2016991744,138,-1993949133,-1993996217,1589904967,939468536,234906,108461824,16777114,-62485760,49120094,1562371467,182861,1167087646,518818645,-326903666,-11118830,-6681482,184549631,2081259474,3947781,-38271373,16968191,-401836289,1183385705,-162100748,108380683]},{"sector":12,"data":[-369098824,1589903596,133637876,125116416,522022,-999066560,-1960381346,-405732737,776047398,1358710409,385178,-129595136,1392137865,175570768,-16222465,-1092090250,-1012992,1117453430,956301316,779355766,712832523,653549252,536872951,1996431476,73570828,1996423168,175570700,-16222465,-1070397834,112368208,-259325952,1996425451,80452108,-963969024,1589930219,133637876,1316257792,637959819,556931,619395444,863305483,653549252,-13600769,1996425846,-6662392,-1962934017,13039600,723744128,141951486,653549252,856193023,-6664000,184549631,197752256,-955484929,-129466,1187448299,-250,10095734,-1962934266,1599997510,-1962742397,1297948645,1426065610,-326898549,-1000974588,-2144990626,1946159999,931866119,1031140875,-1962260853,302320726,-1957670400,168102470,-1202695680,-1705990142,775,1967190155,-18427,1589923563,931735050,2013210198,2013210120,1354773254,16777114,1996445184,108461832,-1710983425,848,2117859467,-1961921276,-996604858,19270238,287704647,1589905495,2139104778,108331019,124623446,-947191808,-443850914,705117,1167087646,518818645,-326903666,-11118834,244976758,184549383,2081259474,3947781,-38271373,21948927,-401836289,1183385245,-162100748,108380683,-369098824,1589903672,133637876,141836288,411335,18606336,653549252,536872951,-337050763,2139825664,652726530,-1993457269,-1705968570]},{"sector":13,"data":[1594,-1980217719,1589967446,1200301816,1194927618,642610436,134367107,-1694730497,1676,-990087425,-1960380322,-523173305,-1845108527,1372138240,178256,38181456,-1073020928,1187450997,-989857018,-2094598050,-385351057,1996423337,123050748,1183383552,-94991880,-362753,1996486774,142016266,-402229505,-259260791,1963357755,-128007125,105351974,637945387,-788234357,652726759,9077129,75467558,71827238,-405674031,637945483,9208201,-1694730497,1684,-1710459137,1763,477951499,1946580537,209125143,-16091393,1996425334,112646,-26032,-259325952,787203723,653549252,-2147481609,-1070392972,175570768,-1962379521,96636099,1347551246,-11485133,-16542178,-1818620810,-1962934265,1599997510,-1962742397,1297948645,503318730,1430622296,-1910575989,317490136,-62470314,1996423169,29989382,-771031040,92015999,1929395261,-149498,-16705047,384304758,-263812859,200431241,-1207536190,65667071,-262224895,522022,-385649536,-1960443669,-422509961,775981862,1358579337,48538,-196704000,-990488951,-2144930722,1946159999,939468304,221850,-195116032,509734,-195116032,105351974,139954982,653287108,638207745,-15968495,429587062,-1006632959,-148443042,1965031431,9300227,50609795,-401705728,-1073019728,1187448693,-335544324,-262224776,38272806,522022,-14125808,-1207761866,-11530239,-1960442250,1385760327,-1675690160,-359677]},{"sector":14,"data":[-12778123,-993299201,-2144931746,-1005584049,-1960382370,-422509961,775997222,1048772608,1946157828,70713132,268744707,1354773328,520048720,178455452,202803459,70713091,268744707,112720,1354771280,-736166064,108461827,575130,-62485760,49120094,1562371467,182861,1167087646,518818645,-326903666,1996445192,153328134,-771031040,92018047,1929395261,108461838,573082,-149504,-2097115415,2113930878,108461842,608922,-129595136,200955529,-1207601726,1911291903,653811396,-2147481609,-14283916,2023370871,-352321527,-128007143,522022,639726656,-788367477,1895769830,147757614,1996423168,149330438,1996423168,154573318,787152896,653811396,-2097082496,197694,1996431476,163682822,922681344,79168260,-1070378992,-11513776,-1560044514,378077962,28836620,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,-11139348,-2019948426,184549381,2081783762,3947781,1996426867,170105352,28835840,9955584,556675,1996427902,168008200,1183383552,-61437446,91603467,-335544392,-94452614,522022,638940288,-1708099585,65535,653942468,-1708099585,65535,653942468,-553556096,41388838,-2094602543,1946168952,142016264,1592266384,-94452483,522022,639988752,-16707712,-1207761866,-11530238,-1960441738,1385760327,-736166064,142016259,662426,-9246464,-16222465,1996487798,1042682,1593795561,-1962742397,1297948645]},{"sector":15,"data":[1426064586,-326898549,861296392,-1002837002,-561314690,-1960385583,1183395393,1958743038,161108006,-1996488700,1451883078,1181180,-6664110,-16776961,899350134,-16777206,1033567862,1174405130,637820612,2097313593,142016446,272282,142016256,74138,-1956684288,113401317,-1873273344,-326412987,-2082959842,-2141825812,67134,465060981,-1202708989,1344144150,503518648,-1404662448,1354256406,-6664192,184549631,-954698560,64582,1191117803,-59339780,548174464,1116402804,856222636,-6664000,-1577058049,111149318,-2090952703,-443874579,-884122337,1167087646,518818645,-326903666,-2091493626,1962935934,-18427,-164420885,-2096913729,-243463426,1178142091,-1962183418,60960199,-120457007,-2092562709,-471137081,-310157474,535137026,46812509,-1873273344,-326412987,-2082959842,1187448556,-1962934020,339544646,1029207040,1618214933,1946163517,1785114,473788276,1031369728,980746269,16777114,50897664,-2089358439,197182,1048774516,1962935044,50503963,50464511,91602955,-352321096,1354773250,763034,63611648,-1996240223,1183579206,-3544068,1996425334,-26106,-286588928,-1559869813,-1073020156,-1070397323,-1560081245,1187447562,-352321028,105286613,-1559734645,378077962,-957676788,-1705983949,95,-352073053,49120185,1562371467,445005,1167087646,518818645,1183570062,1981702,71108468,-350194672,142508839,-14584577,1520044150,184549384]},{"sector":16,"data":[2132114642,3947781,28839538,-1593054464,378209034,65733388,-2087075789,-443874579,-900899553,-1957363708,106874092,637945599,1589905290,172424970,168265766,-1962249024,1325335622,1975520004,75400160,-16091904,1589905998,130426378,1575324416,1426066114,-326898549,75399940,855997696,149658048,-1710983425,2177,-1034033781,-1957363710,351044588,51265155,855929856,-1200231488,1344144163,16777114,1975520000,-28915892,1187450112,-956300564,192070,15746759,-28930816,-1930279287,1183708246,-163149332,871913100,-62486080,-1191557495,1344144171,384845453,-26032,540868608,-1207602432,48955393,111394867,104760067,292880387,50609795,-1207601920,48955393,111394867,50635011,-1017256565,196636,16712879,16973979,67102,16973840,67693,16973841,68692,16973842,67637,16973843,68571,196628,65704,16979501,68790,16973869,68725,196655,16711942,196933,16711801,196934,16714585,196935,16712790,196936,16712851,196937,16714610,16974154,68215,196666,16714541,196939,16713891,196940,16714092,16974157,65667,16973893,66832,16973898,68115,16973900,66918,16973905,66865,16973908,66880,16973910,66259,16973912,68251,16973916,66286,97,0,1167087646,518818645,-327034738,1187447074]},{"sector":17,"data":[-2097151868,1962935934,24570115,503527608,-26032,1183383552,1975520136,571401,-26032,1996423168,7256200,-1706012007,85,-1996237661,-16525802,1874364534,1347590400,27290,60596992,60692105,-1199016193,1385758721,8362576,-1767702528,-1743353597,-2005467389,-1728001864,-1801826222,-1560281088,378078096,1996424082,13219976,-1706012007,169,-1996230493,-16518634,-893876106,1347590400,48794,64791296,64886409,-1199016193,1385758923,13867600,-526188544,-501839613,-2005467389,-1728000840,-392540078,-1560281088,378078184,1996424170,13482120,-1706012007,253,-1996236637,-16524778,-809990026,1347590400,70298,64004864,64099977,-1199016193,1385758934,19372624,-459079680,-434730749,-2005467389,-1727998024,1016746066,-1560281087,378078188,1996424174,1030280,-1706012007,65535,-1996239709,-2096902634,198718,244319605,-1207818520,1344144198,503529144,54376528,-2037559266,1343684324,1342197944,116378,1958742784,-460944099,-1202710786,1344144206,16777114,1975520000,112649,-1560082781,1187447566,-1962934138,-472807842,-2016943151,932,-2088352001,2081064574,55752938,-1070903266,1371033680,-1924129277,385803398,10532944,36018768,-2037579776,-2037776668,-1769144610,-2033713440,65250,-1631317269,-2030043426,-2144928034,-227213249,-18708737,-18964796,4161574,-2037521291,-2037776668,-1769144610,-1024852256,56342528,-1224781794]}],[{"sector":1,"data":[-1224737056,1522073310,-1924129277,1343663686,1342197944,237722,1975520000,9038083,-1985067379,1452051014,638184332,1949056896,-1975058676,646602436,1962950528,-1973500690,646596351,1965834112,-16520352,1589938758,1065363082,116683808,-1907978925,244338710,-1929271576,1343655494,16777114,-6664192,-1996488449,1950385734,-2040624197,-472783919,61128579,-1207602176,1022099455,-18827521,-18958593,16777114,-2040624384,-472783919,61114249,-343652609,-560020341,-561577986,1065363198,-887552,-2080447858,16704190,887686004,-2075751425,-1962742397,1297948645,503317194,1430622296,-1910575989,149717976,106873942,-1995994330,1187510854,-956301060,63558,-772252021,-1846813,-1962696009,1174535238,142016262,688289535,1996487238,55679738,1183383552,-992441348,-970586506,1191116800,-128021508,-472783919,61126655,33310347,-16382394,1177093750,-92864518,16777114,-62486272,1992611979,12985862,-62456064,-2080880897,2081093758,-310157673,535137026,80366941,-1873273344,-326412987,-2116514274,-1207915796,1344144228,1347469355,503538616,1518767440,-1202710785,-1706033072,65535,-1918220663,-1979753850,-1929423226,-939566954,61013062,1183531755,60960252,-120457007,2097154621,1488387901,1454833663,-1404662273,244338710,-1929363736,1343663174,173466,-60912896,-1631320183,-2030043306,-2144927914,-227213249,83641987,-11100476,4161574,1183560821,60960252,-120457007]},{"sector":2,"data":[-1962742397,1297948645,-1873273141,-326412987,-338129378,1065362971,639530028,1948270464,172424984,-1006138842,1191118430,126363142,638213828,1962950528,106874076,509478,-1962520833,-2144991650,74791487,509478,-1962742397,1297948645,503318730,1430622296,-1910575989,250381272,-1710328065,1249,-1980348791,1589966934,1200301814,-196703992,522022,184841480,-15829568,-1248194954,-1207959548,1676279804,-161561599,21987366,242679560,331418,242679552,16777114,-230258432,58572811,-1962851863,999884870,1912802326,990279491,1979910662,242679611,387994,-163149568,-2080876919,197694,922724724,62391044,28856336,1183535104,919030,520048722,1996424092,101030414,-55050240,16050623,-1710328065,65535,200427145,-385647168,922681570,62391044,28856336,-1070903296,520048720,178324436,201722627,-1587907581,378209034,1183384332,-61437446,-1946532213,103545942,370869002,-771030260,91372407,1934499901,51028276,51119627,1996434292,-214796,-26032,-1073020928,451478389,242679807,16777114,2144471808,1023769791,-1200422852,-335544904,70713195,268679171,1354773328,520048720,2122515412,326434822,-15829249,1996426358,142016266,16777114,-15602944,1996426870,175570700,-1710721281,65535,-1947056503,1178142790,-14518798,-6680970,-1996488449,1451882054,1958874104,-161561584,23560230,242679799,16777114,-230257920,-1962742397]},{"sector":3,"data":[1297948645,1116874,3277059,65537,92143619,10158335,75235587,1179649,77529347,1245185,93126915,1310721,2228483,3080193,4194563,3276801,23920899,3801089,41877507,21889279,41484547,4521985,65077507,4587521,52560131,4718593,25231619,5701633,96796675,15794431,98041859,15859967,85721091,16122111,79495171,16187647,1167087646,518818645,-326903666,1187468816,-1962934030,2013203550,175570690,-16222465,520029814,1183384536,2126515186,16574723,1183439095,1958743026,207522571,1200209971,71796998,-15966581,1183646327,-11528460,-1962680290,264697840,-1961987072,2013203550,112642,-333512880,281474819,-2147191786,-142544050,1946681542,-870383799,-96040701,-1946397047,1200295006,105319172,1183524212,71773178,184964891,2133294290,983055621,1317019762,1586200819,-1983892724,1200162375,-1961891068,1183517790,-61436934,-1996208247,-956889513,1869873408,720651914,636015076,1451884545,-1309267212,-2115316989,184549858,-196179262,123265,1265942795,63708927,-1980086647,1586232406,71797516,1946568459,-96040166,453265195,-771029417,92219772,1924122685,-212959198,-1961759872,1183517790,-61436934,-1996208247,199951959,856448651,105351616,-1962653815,-2090929594,-443874579,-900899553,1478361096,-1957345904,-661774612,1444998275,-16222465,280495734,817385472,520048640,-259325040,1962933309,-49901]},{"sector":4,"data":[-167048844,-4714627,-1202525185,1307262976,-335545416,1183667784,-11528476,-16524258,1996425334,-465138426,-1427615722,1958742784,-465138419,520048662,-1073019920,1085851765,146296832,-6664192,-1996488449,-661921210,855799689,105351616,-1962653815,-310157629,535137026,80366941,-1873273344,-326412987,-1948742114,1950352966,108954374,-1207601920,367788031,-16359797,520028791,1996424144,-26106,28835840,49120000,1562371467,182861,1167087646,518818645,-326903666,106859268,855799807,520048832,1586168812,41418502,1342179256,65281791,-1962742397,1297948645,1426064074,-326898549,1187468860,-956301110,62534,385238669,175570768,-1710721281,65535,-756085,2055271494,-193658634,-957057397,-16714174,1988883534,-163395852,57391162,1183666206,-1202710794,1344144234,382486157,2668624,-26032,-1073020928,-1070398091,-1929302295,1183435846,-933851962,30033607,-1005327616,-2144942498,125119551,509478,-3520769,1589954118,1065363142,-991660800,-970587042,638651975,319768518,223313958,-867791615,-1933162871,1187498070,-1962934028,1178192454,-385647372,1589903575,1065363142,-1959234560,-1072958394,20781428,1027437568,1769209858,1946157885,277886,-1897331851,-15144192,1996474486,-401698618,-259325782,125105675,637820612,-1006536823,1191167582,1065363142,-385649408,-269811583,650534596,1953382272,1065362950,839152974,-1005196352,-2144942498,108293951]},{"sector":5,"data":[1329561638,28312693,45089515,637820612,-352041080,-931725378,-1866041601,5302286,-166989685,1589947764,1200104964,-995824893,-2144942498,74789183,49004594,1589904048,1200104964,-997397755,-953809826,2119,172476198,-2144993280,638061647,269242240,-36631,518648902,-443851009,574045,1167087646,518818645,-326903666,-62470396,384499712,-150992200,1183448174,126494460,3157400,-244223,1589904966,1065362950,-1948158720,-310117306,535137026,80366941,16973828,65975,16973829,66050,16973831,66206,16973882,66148,88,0,0,0,1167087646,518818645,-327034738,1448542434,12863175,274631424,1149974411,911510324,-1982183799,2089540694,38112050,-991279479,-1960388002,1183390023,-1996125280,-1960387002,-2037836217,1166802770,-465139441,14960375,-1205963774,-11534335,1996483190,34642592,1183383552,81360,1187449981,-352321072,-800667899,1183514624,67118564,-1952168311,2483270,579242248,-465138689,-1995440091,1979699782,251783172,-5618039,-119011723,1350994190,-1438217217,-11499989,250210384,-2865527,1358909622,-1995292184,-1946201978,-2043958714,-397344944,1183387343,-834222124,-1070923776,-1984018807,1183431750,-1203336774,651845316,-2011347062,-1977158074,1183325767,1200236224,-163184097,651576968,-2011150454,654269574,706234250,75236,-941603191,55366,1347469355,-10849025,-6662028]},{"sector":6,"data":[-1996488449,-1072976826,719913845,276233988,24746576,1183383552,1975520174,68151555,-1206880513,-1706033139,65535,-2083764599,1963081340,276234034,-11111169,-6663052,1375731967,-26032,1183383552,1975520250,63301891,1343256319,16777114,-62486272,58048523,-956060951,115782,-1992407925,-2098595770,-1983894781,1183425094,-1639544378,-1950988663,1183403076,105286626,-1950202231,1451952198,-431585014,-991406455,-1977162146,1317439495,-163149057,-11631048,1183451506,1317419200,-1979222273,-2037852602,1183514446,1317415158,-528579585,-1978240000,721374878,-773598721,-631372829,651970190,-348829813,-631323641,424119078,-361300144,-1700759809,687,-372750711,1149960741,-901346990,4750467,-2037766796,-2043084964,460717902,21644427,1150011974,-498718386,14843523,1191119231,1346669514,-1948159,1996427382,-25910,1183383552,-1031896118,-1000770560,-1977162146,1183318343,-163149132,1924417080,-1069118968,1991525944,-700020218,-1967896952,1177089606,-528579660,-1978305536,-13978530,-472783919,-1898291709,-1960387514,132855111,651845316,1343833995,-1411329,-6643594,-1996488449,99347526,15484615,-965280000,-4819201,1996477558,-327745592,-2197761,1996474998,-1505325616,-2037559274,1343684436,-2096742424,1963063422,-934900881,63981059,58051142,-16725783,1996427382,-629735460,51267211,-1957649850,1174604870,-2037755746,-466944178,-361300144,-6260993,-1224745354]},{"sector":7,"data":[-1224736942,1996488528,-797507640,-5998849,-56650,1996477046,1421771722,92012799,-352321096,1354771202,-10582387,1183666198,-397404456,1743455938,968377995,2113885318,1418103559,-1203336705,968509067,2113885830,1451657991,-1169782273,968640139,2130663558,1485212423,-1136227841,968771211,2130664070,1518766855,-1102673409,13532803,-2037702283,1183448916,1451658222,-263812609,-10975605,-1947056503,-1979753850,1187509318,-2097151538,1946206846,-1505326217,-1949940087,1183426630,1354662838,578027775,-3770625,-1694543690,1055,-4819201,-1979756362,-1694556026,1039,-14645757,1183515627,-1572435514,-11485565,-14519296,-1224751498,-6619312,-16776961,-1224755594,-2037776560,-6619362,721420543,-335602042,-1236890877,-1969338743,-2037861306,1183579982,-934901268,-1947842817,1325384262,1958742978,-36771581,49839747,-1830222988,242679552,-1928562945,1343680070,51267211,-1957640634,1174604870,-2037559114,1343684436,-1914800385,1343666246,-3508481,1996476534,-1435041884,-11487489,-1915455745,385819782,-1337553584,-2037559274,1343684420,-1962205720,973031558,1962886278,1250331495,1183201791,-10652417,146280566,-6664192,1342177535,319898,276233984,-14383475,1996443670,-25936,1996423168,-1401487600,339354,-2094142720,2080561278,276234018,-10582387,1996443670,-25896,1996423168,1585876240,-11528449,-6629258,-956301057,55366,-2080878849,2080503934,-59381501]},{"sector":8,"data":[37649539,1996428149,-59310320,347034,-92864768,349082,276233984,-1697876225,328,-15698177,848998006,-16777215,-6640522,-1962934017,1600046150,-1962742397,1297948645,503319754,1430622296,-1910575989,-1964211752,-1957275904,931860062,-1959508853,1183397460,-531199522,-1993194357,-661926330,-1996339317,1589964358,1200301790,-1337554663,-1949409653,-498693881,652107403,-1995028597,1586209350,256347086,-135772535,33613894,28843636,1996443648,-1334378514,460954,-666466048,2097152317,-666450164,99287041,14173895,-398030080,-1996226523,1586213958,74973134,-1995857176,1586215494,108527566,-1995860248,1183555654,-1606014022,160032848,-2472311,-397369226,1183386850,-1169781856,1352681003,-1995869464,2122570310,594870280,1183432747,-1706653290,-1952954743,1183441478,-1773761124,1996443670,1354771360,196995152,-956124951,54854,12863175,-968440064,1187446784,-956301112,51782,652107460,-2011347062,-1977157050,1183325767,1200236236,-96075233,651970184,-2011150454,-1977177018,-467003321,-1996488411,-1070865338,-1984805239,1183436870,-1035564626,-1991490421,1183573574,206998282,-1981135223,1589963862,126494442,-1969338744,1178139206,-1979157858,1178127430,-1979287906,1183374406,-96040290,-2086779352,1946215550,-1635874028,16770945,-405674031,652107460,-348831349,-564214777,424119078,-294191280,-1699711233,1956,-372095351,1149960593,-733574830,4750467,1183458164]},{"sector":9,"data":[-1639565140,1149967221,-733609654,692995211,2122573382,159318246,-1949022465,1174491204,242679782,-1697351937,594,-2083240311,1946159230,-362888104,21465638,-1967110520,1178139206,-1979157824,1178127430,-1979287872,1183374406,-96040256,-2084551128,1946215550,-1065448684,16770945,-405674031,652107460,-348831349,-564214777,424119078,-294191280,-1699711233,94,-336574839,-263796987,1996423168,-1032388656,-2459905,1996477046,-495517712,-2853121,1183701110,-1924131146,1343661126,-1962849304,1178190918,-1962508892,1183425606,-968455228,2108048953,-1505326330,-1949940087,1178191942,-1962508632,1183426630,-901346360,2125088313,-1438217466,-2083895671,1962989182,-1538880739,-1947056503,1183426118,-1471771660,-1946794359,1183427142,-700004360,2122514433,1752432648,-1984543093,1183567942,-1035564616,10518147,1996430452,-1602814000,558746,-1032388864,-1952418049,142187256,-956104704,1183515627,-1304000048,10518147,1996430452,-1602814000,258202,-1032388864,-1952418049,65051384,-953483264,1183515627,-1371108926,-2000664950,1183555142,-767129104,-1947580673,1325336646,1958742792,-27072253,1347469355,384976525,-797507760,-1916635393,1343661126,-1914538241,1343669318,-2853121,1996478582,-1166606412,-6260993,-2037523850,1343684470,381437581,-1773761200,-806858730,1216119558,-2096335872,1946158718,-431584506,-1957935991,1177263174,735087512,-1706128448,-1953083861,-2090901823,-443874579,-900899553]},{"sector":10,"data":[-1957363702,373722092,359972875,1946387517,117980541,-1942139788,-385649398,-773259091,140428288,52053643,1174606918,239469324,-1962440410,-1993992122,1589903943,130491908,1183514624,205914900,638469635,-1006352503,-953809826,583,638600843,-385464439,1589903504,440830728,722617899,1177226310,126428686,639125131,-1006483575,1183515742,651753230,1183516553,205914900,1589951979,440830728,-1962440410,1177229382,239479568,38242598,-1962647868,-654897594,38242598,638600843,-1006221431,-953809826,-1962934265,1174606918,1200170508,-1004016892,1183516766,126428698,51922571,1174605894,1200170510,73319426,38258470,1183514624,239469328,-443825685,1622621,-2081649835,1448556780,640310980,18368502,1183458676,-773576156,65065440,96636099,1183383603,-698971692,651452100,1183385483,1200301784,-1977357564,-467000250,1174659281,743869226,-1996475643,1451872326,-799095598,-1995994330,-1960388538,1177223751,-163149352,640310980,640370571,53303179,1183438918,-396981786,377454886,142540928,461340966,92143744,-352321096,-1983894782,1183571526,-297367274,15629955,1374225277,-163149054,-1948629367,1452009030,-230258200,737433225,-532248128,-2081798519,1962990206,35645699,14581379,12062068,-1207178368,1177092097,-1195250706,1183448960,-562134070,-1005816832,1183052382,-1960443150,-1005917433,1191178846,126494450,1005620120,57985606,-2097086487,1946214014,-228670452]},{"sector":11,"data":[49432195,-351827162,-228670454,653412095,26740618,2122574406,208928990,-2081268028,637727302,183175051,-893244,-1977159098,1174509575,-361300000,-14518529,1889149046,-1996488693,1996488262,511115232,-1709410561,3138,-1946663287,1178148422,-16550408,2122577998,225706004,723404427,731510854,-336014910,-1950340350,-25295880,-1147389,2122526326,477364250,444006231,779162,-126419200,-1994754305,-711275962,50331659,49007174,1174652811,2122534952,477364250,444006231,827034,-126419200,-1994754305,-1868904378,721420300,65783878,66602635,-11524538,1996425846,108461832,-402360577,2122516263,91488478,-352319816,243715,-371571159,1979842233,-562134038,-1005816832,1183052382,-1960443150,-1005917433,1191178846,126494450,-532282984,-1411329,1996431990,206805536,1183383552,-529072130,-14780673,-845538186,-1996488699,1183578182,-129615586,1325335413,343835640,-1962052608,1177230918,-1037329928,49019089,-125059029,67010051,1996484222,444498734,1461482496,-1709541633,3270,-493825,1183390326,213424842,1174601728,-1962742838,675677127,444498768,1461482496,-1709541633,2142,-493825,1183390326,139565768,1177223168,-1962677304,1174665286,1996443686,142016266,-16353537,-1511521162,-562134266,-1207536640,535363588,178431,-2080433687,1962940030,-35395325,-384416117,2122579424,158662674,1080963,2095645557,209617666,-955223040,56390]},{"sector":12,"data":[51922571,1174607430,-1961956594,-654897594,-1948498295,1174607942,-263812842,640310980,-16222209,1996430966,224762396,1183383552,310281210,-385649408,45613341,1996443648,477560606,954010,-465139456,2097152573,-465123579,1988820994,-462027782,2082371129,-339309820,507939587,-2081667447,1946162302,507939597,-1712568789,-120470997,-1070923029,-1948023,2122526326,544473114,64767627,-11476410,-191227274,-16777203,1996483702,-1694987494,3559,116115203,64767627,1174659654,2122534952,544473114,64767627,-11476410,865737334,-16777202,1996483702,-1694987494,3622,65783595,65816203,-11524538,1996425846,108461832,-402360577,1988822295,-495582224,-2094106881,1946163838,1996445210,240753178,1996423168,444006380,1285224587,50331662,-1962742841,675677126,444498768,1444574208,-1709541633,3809,-1280257,-125101450,972442,-339268864,-330921213,1344685571,-16091393,1996425334,74907398,-2096819224,1962938494,17950979,640310980,-16091137,1996430966,190814748,1183383552,-96039940,-771996117,62495200,-1946552576,-59374608,-2081655159,1946162302,507939596,731498027,-336014910,-1983894782,1996481094,444498734,-1960938496,1174658118,1996443874,252680730,-11141120,-125101450,984218,-339279104,-599356666,65160707,-2091898810,1946163838,-599356642,1357006339,-1709541633,3917,444006230,1083897995,721420303,-1962742841,642122694,175570768]},{"sector":13,"data":[-16222465,1996424822,66971652,66090635,1996481142,444498734,1444574208,-1709541633,3955,-1280257,-125101450,1009306,-339279104,63343362,-2091898810,1946163838,1996445210,196844058,1996423168,444006380,-1382352757,721420299,-1962677305,1174662214,1996443686,142016266,-16353537,-102235018,-1956684285,750935525,-326413056,1853949419,-2129784828,235930750,99349629,268715649,75399950,-1946846208,-443874234,180829,-2081649835,1448545004,185616011,1025144000,58000260,1023524329,58001160,1023511273,58002060,-352198167,73319482,640697995,2122516361,175374358,-1725938037,-120470997,-1070923029,639786692,50611971,1589913670,1200170500,776375044,38242598,639649283,-1006221431,-1960442786,1183385159,1200301818,-28931838,-1995994330,-1960380346,1183384647,-11335940,1996427894,779550512,-1929265432,1343682630,-15567105,1996435574,28174382,637820612,1589905291,126428684,637820612,-1006483573,-1993995170,1183515207,1200170748,-28931324,105351462,637820612,-1006352501,-1993995170,1589905479,1200301572,207537158,172460326,653805195,-1962129527,-1993934266,1589907015,130491912,1183514628,-2068211436,200931075,-1962052142,-140963258,1976699897,20048131,637820612,2147420103,71812902,-953778176,2147418695,105367334,1187479552,-2097151754,2080700030,17426691,-772383093,-991702557,-1960440706,73319473,2117548326,931735043,-772383093,-991702557,-1960440706]},{"sector":14,"data":[73319473,74922278,-1993997187,2123039863,-773336586,207537383,40995622,637820612,2114090809,2005476868,-159479038,-405674031,638344900,-1006472821,958792798,75302519,108497190,-336181505,377389962,-1962249216,731455558,-336014910,-994039038,52832862,1174602823,73319472,-1006139098,-1960435106,-25695993,-1962647868,1174613574,1200170528,576635906,38243110,-1004124669,-1993997218,1183516231,126428720,1474179,1183527284,-1037330144,703330513,-1962647868,-1993986490,1589903943,1200301602,642122502,637820612,-1962522743,-1993985978,377389831,735016192,475972800,71762726,-1003469309,-1993997218,518587463,-1956684034,784489957,-326413056,1460726915,173982806,725060390,-1960442250,2116747903,142508804,1444574208,-1710721281,4708,142016343,-1695136119,4696,-336181757,63343362,1183385158,142509048,1444574208,-1710721281,4765,142016343,-1695267191,4753,-336312789,63408898,1183384646,173982970,74943270,637957675,721846155,2122515582,443809800,142016342,1230234,1996445440,-230258424,1227162,-230292736,-963968277,-1996077565,2122579014,443809800,142016342,902298,1996445440,-263812856,898970,-263836928,-947191061,-1996208637,1589968454,-129594614,-1962440410,-1993934266,1183515207,1200170748,-28931324,105351462,-443850914,705117,-2081649835,-1957297428,-1181154234,-101252220,-25038197,159252930,50742923,-339661882,105286405]},{"sector":15,"data":[-1956723197,79846885,-326413056,73319510,-2093511898,595329790,-15698177,1996425846,-90548728,-16777212,1996427382,142016266,637820612,194656255,-1006632955,-953809826,-1006632953,1183516766,126428686,637820612,-14272629,-773402361,140428518,638338699,1577205897,-1034033781,-1957363698,149717996,1988843095,209619726,637820612,-523171957,1174659281,173443848,-1980217719,1589967446,2000234232,637957628,1962835769,73319493,-786461914,65262051,1183713374,931735050,637820612,-14284917,-774337785,65262051,1183713374,2139694602,73319426,272597798,1996427388,-11053552,1996425846,-397212152,1600061223,-1034033781,50335246,17648128,53314048,-16300032,50402560,18039552,53676032,17118464,51515904,-15509760,50406144,16850688,50893824,-16460288,50340864,17121280,53548288,17089792,51557888,-15585280,50417408,-15582208,50417664,17088256,53432576,16867072,51272960,16868864,617728,0,11468800,34275677,57148090,79889429,102499696,125044424,147458079,169609587,191630020,213388306,234884444,256052898,276959203,297537824,317723223,337515400,356914355,375920088,394401526,412424205,429988124,446962211,463412003,479337497,494607623,509287916,523378376,536879002,549658722,561783072,573186516,583934589,593961756,603268015,611853368,619652277,626730279,633021837,638592487,643311157]},{"sector":16,"data":[647308920,650454703,652879577,654452472,655238922,-661903600,-1957345904,-661774612,1183568435,-2116515066,2114159851,117976376,-2125844098,2114390251,117976364,-661903893,-1957345904,-661774612,1183568435,58993926,-1958080130,-2064940584,755662339,58459912,-150803646,-1722330408,-150992199,-774337551,-1081397533,-1959919616,721420935,1364218567,16777114,-1178139904,1996433168,-1705947128,289,-1036821921,-310132181,535137026,80366941,196609,65840,11650,1167087646,518818645,-326903666,-1957275892,1187448950,721420534,108954623,1446016260,1342177720,-672657776,200838143,-385649153,727056627,244338880,-1979726360,1958742789,14805251,59152983,-13959168,-2097096983,1963263614,45635097,244338688,-1946181144,1979649016,12445955,243798,62441451,141358848,72125337,1183447543,243964,-1727369993,-150582133,-96040455,425603,2122523508,192807174,-1727380341,-134590837,721611769,-1949791296,-1952905148,-67634082,1317652483,-163148810,302375121,-6664192,-1962934017,1962871800,-62485668,-1962392183,1166670406,108954378,-1962576637,48958020,1166655531,38127372,1183580158,239438086,16154243,1183526772,1166625014,106859268,-2020875311,1166606616,-196688122,233504768,-772514165,272746467,1191182335,71666676,2096383545,1590135787,49120095,1562371467,313933,1167087646,518818645,-326903666,-1957275884,2123042934,172395278,-1995680117]},{"sector":17,"data":[1451882566,138841082,-990886263,1182992990,-1960443382,-62486265,-2096472437,637667910,1183385483,243106812,-1724156672,-150319733,1959922681,19261699,-14125825,79177332,1996443648,-92864760,-1946650881,1344155204,1347469355,507266189,1354771280,710708048,-384016385,1325334775,38112008,990266883,561314886,16008903,1444080384,-193527977,50480523,-397408698,1191117024,71666676,2096383545,-62485530,-1006484087,1182992990,-1960443382,-163149561,-2096472437,637667910,1183385483,139395058,16008903,-1954878720,1844966470,-1949791480,1844968518,734528262,1317604429,-2094797842,2113931390,173982757,34227843,-1995994330,1586230854,172393226,126559746,-899447,1183516750,-297387534,1183569277,-297387530,1183523196,-297387534,1586174333,-1914449420,1183387713,-2082960404,309722943,-1979955573,1443621639,-193527977,-386107649,1191116852,71666676,2113160761,-8656637,1946172803,905926164,-362753,1996486774,108462064,-2014835056,-2090901762,-443874579,-900899553,-1957363700,216826860,1988843095,142510858,-788111733,272731107,200689289,-1956086592,1844905542,-196703992,-134855029,1174603373,205859828,-1946663287,1183446598,71732218,50753015,1160508486,-62486260,-1996208501,1962933830,645201704,1342182072,1342177976,385369741,776244048,-1070903266,1150111824,726670908,-1957670720,1610558044,106859292,1103619025,1593835280,1575324511,503318722,1430622296,-1910575989]}],[{"sector":1,"data":[82609112,1988843095,-335598840,175570704,1149982550,105251586,-11605936,75249991,1015278463,-15895552,889129590,-1878624513,-3938290,-26026,1599995904,-1962742397,1297948645,132810,4587779,458753,12517379,367984641,0,0,1667845408,1869836146,1461744742,1868852841,1428190071,544367987,1702129225,1667327602,167772261,1145130828,1297369410,11489345,1145980169,1279347012,5785423,1413829393,1163018563,1229734484,1230261070,11027789,1413829394,1346980931,1380011842,1162434116,-1823324841,1279462144,1464161103,1329876553,201337687,1129596231,1397965132,1162690894,1393164346,1095649097,1330794572,335624771,1279871043,1313429316,1180127044,1347243858,1414416719,1393361087,1230459973,1464812622,1196314444,1225261192,1397641027,1447385673,1162282496,843274068,1393033534,1330009157,374560067,1145375488,1314346057,1330794564,318844227,1465140551,1329876553,1480938583,1313164372,642274375,1414728960,1128879169,1346653783,776163154,1330646017,1498633299,1381123411,21123663,1162170379,1397050699,1162297683,1343094893,1096045391,1162694736,1195463507,151024709,1297436229,1347375696,318774099,1414743364,1415139154,1464554305,1329876553,1093817175,1380321537,1380273473,1398031173,1380125184,1163149637,1431192909,1393098903,1230263365,844252493,1192034632,1230459973,1464812622,1146244951,1124860037,1413563730,1313429317,693587780,1313148416]},{"sector":2,"data":[1162625601,1431192909,1296389193,1191837851,1279546437,1163151687,369122125,1129596243,1163284047,1230459986,1464812622,1195984200,11293768,1413826319,1414418243,1112297298,1213420882,1225261382,1313429331,794251076,1163069696,1381319508,1163022163,1163068928,843274068,1376321855,1095060549,1128547667,1124991044,1380009292,1296912195,1095062082,251712331,1414745936,1414092113,1397966157,105203521,1229457664,1094927684,-1504426670,1480919808,1230459977,1464812622,167772755,1397966157,1111836481,88143,1414744339,1497517911,1212368212,1380995649,1481197125,1124794419,1413563730,1380008773,10703941,1146115340,1464161345,1329876553,167803991,1145130828,1230132307,11552590,1163019027,1128617025,1163284047,1230459986,1464812622,1326252202,1129203024,1112557900,1146241359,1191510153,1128551493,1191968834,1230263365,1329810243,223628885,1163070720,1313429332,1465339716,-2042342833,1162283776,1313429332,1146572612,167789379,1145523268,1229738569,6575187,1431257877,1279480910,1329745993,1178882625,1095586383,9392980,1229018891,1397050708,1162297683,1225457776,1464749891,1380992078,20005711,1413826318,1381127491,1414811205,256200009,1398082816,1180652101,1380340289,742739265,1313146625,1313164612,184597333,1163023177,1296389187,1264145488,1162284288,1397050708,1162297683,2001948496,1163003904,1329808449,13389133,1330397966,1279477075,1329745993,-1975233983,1162284032]},{"sector":3,"data":[1095517012,1330402131,8603470,1413826321,1297307987,1279345743,1145981271,12408655,1095910411,1313164631,1380008533,1342767264,1414416705,1413694802,1292501317,1162891097,1297040206,167827533,1497453127,1230132307,12142414,1279870472,1128616524,167792980,1397114447,1163023429,5067843,1397050635,1162297683,1346716994,1292566632,1465208389,1380992078,20071247,1095715848,1329809732,167816782,1145130828,1397904707,11358799,1413826317,1431192909,1230132307,10569550,1195725325,1163154249,1095517010,3756883,1413826316,1296912195,1413567571,234932805,1398031699,1163154265,1296651341,741957,1229867271,1347436884,1192034309,1498633285,1296389203,1431192909,1225457820,1095517774,1163019604,5133379,1279871754,1296651340,1194480197,1397035521,1162887491,1296912195,1129207110,1313818964,1377108182,1397311301,1465009492,1329876553,1397050711,1162297683,1225719926,1313429331,1448562500,1112101705,3229004,1313166091,1397050692,1162297683,1158348911,1464685902,1329876553,3560279,1095715848,1313164612,201365077,1129596243,1397965132,1196314444,1141375108,1230455122,1414418243,1162087680,1330795603,1313429337,894914372,1163071744,1398362964,1094995789,1313429324,-1135128764,1145114624,1414747466,1145981271,1163024207,6706243,1413826319,1230259009,1230456150,1464812622,1158152252,1095779406,676613705,1162087424,1330795603,1380008793,10769477,1279870474,1313429324]},{"sector":4,"data":[1146572612,1162284033,1297040212,1381123405,13324879,1146308882,1430406988,1313821780,1128613955,1648641355,1163070464,1297040212,1096045389,13190484,1095914512,1095521102,1162691924,1195463507,167801157,1414418243,1330791251,20335692,1296388618,1346721359,407916370,1094913536,1112819026,1263421772,1129271888,1191838007,1162695749,1195463507,234908741,1398031687,1280266819,1312903756,4277575,1329809679,1296125518,1145984837,1129271888,1191838016,1431524421,1313164610,234921813,1128613955,1196180555,1414812994,6377039,1313424906,1313429316,844582724,1312884736,1347375193,3428437,1397048331,1498370644,1431192909,1342701720,1380862292,1280590661,1162285568,1296651348,1163022917,1431064403,1313818964,1376649230,1095060549,1094927699,1381323856,201331525,1279874370,1297040196,1111704653,1192034517,1347769413,1163149636,1413694802,1393295550,1498633285,1280262995,-1252830641,1162285056,1229734740,1095713360,1094992978,9322836,1413826316,1396788291,1380931411,201359684,1398031687,1280266819,1397706828,1393492031,1128354885,1163282772,1145981271,3888975,1163019020,1145394241,1330397513,151017799,1330204245,1128616526,167792724,1346980931,1397904707,1069647,1096241935,1431260496,1430406483,1313821780,1158545594,1498697805,1346980931,1380011842,251693892,1145981271,1380341583,1330662735,508841545,1095568640,1095320656,1380405068,1733575493,1229458944,1163151692]},{"sector":5,"data":[1431192909,1296389193,1124663458,1163087692,1296912195,1325924559,1229866320,743329603,1129516032,1280069458,1145981271,4020047,1413826313,1163018576,3036238,1413826320,1414748499,1162693957,1128878676,369144659,1129596231,1112557900,1146241359,1297239878,1095652417,9585997,1279350283,1413563465,1313296965,1393426560,1129534533,1280069458,1196310866,251674693,1229214537,1196379201,1397966157,1514489665,1329793024,1163024720,4871235,1413829383,1413694802,1393295432,1296322117,1095979845,942818631,1212353793,1296778053,1230327365,-1706212012,1229654272,1230261324,206718285,1313149952,1279479125,1329745993,1178882625,1095586383,9458516,1413829392,1346980931,1380011842,1413563460,201362753,1129596243,1397965132,1146244951,1393295490,1129534533,1280069458,1045647184,1314196736,1129596231,1129139535,-732806840,1381435648,1128617033,-850571953,1397295104,1313817417,2048841,1313164557,1163151701,1096045389,21579092,1329744910,1280590680,1346653783,860049234,1347356673,1329811013,13126989,1397310479,1129595216,1397050696,1162297683,1476853874,1330926403,20665156,1413829386,1414545731,306532949,1162285056,1297040212,1163281741,1095586894,13716307,1413826311,1347375696,1124991001,1431326031,1413563472,1128616517,201407572,1229734230,1163149636,1413694802,1141702783,1230456389,1464812622,1129271888,1192296555,1279480901,1329745993,1329877569,1380273751,1393623180]},{"sector":6,"data":[1129795400,1163284047,1230459986,1464812622,1393164459,1465339720,1329876553,117451351,1297368391,-1655353787,1094913536,1230457932,1464812622,1129271888,1175126138,1213415756,1145981271,6903631,1129531674,1112557900,1146241359,1297239878,1447121985,1095518529,-1052423102,1397296896,1145981271,1313167183,1162625601,285221700,1397966157,1111836481,1314347087,1330794564,335623491,1312903764,1413565523,1128481093,1380273221,1380930625,1393098930,1129795400,1413829185,1393295527,1163023429,1296389187,1230591056,1162284288,1229734740,1381256773,559170373,1163070976,1313429332,1398230852,1263488840,1225654393,1279350350,1413563465,1128616517,302021972,1146373447,1279415631,1229734725,1230261059,1393997,1196180492,1397901636,1128614981,251683668,1280067915,1414748499,1230261573,-1236122291,1163071488,1297040212,1163281741,1095586894,13650771,1413829383,1347375696,1342898202,1297371983,1095979845,7226695,1413829384,1162692948,218106450,1163087433,1162691662,1195463507,117489733,1297368403,-1638576571,1163004928,1297697872,1095979845,7554375,1413826316,1397904707,1330664015,150999379,1398099014,1297040200,302045005,1145980243,1229409348,1296909652,1095979845,6636871,1162363664,1095912259,1112492356,1330926677,167796814,1229407554,1229017166,2577486,1413826317,1229409348,1229800788,6247502,1414873613,1464749908,1380992078,19874639,1330139914,1381319511,1196576595]},{"sector":7,"data":[1381240832,1297305153,1329812553,1212370253,13521473,1095254794,1296385870,-1722462651,1163072000,1431258196,1128614978,1262700876,1162692948,1141374996,1415004498,1431590981,1397294848,1279871043,218116164,1465140551,1329876553,1128616535,184557652,1129596231,1413829185,-1219276976,1313148928,1212370261,1464093769,1329876553,3625815,1413829388,1296912195,1095062082,201380427,1129596243,1330860629,1397706834,1124925510,1296845889,1229342547,1380275276,1141440635,1330397513,1481589319,1141833815,1111577417,1162822988,1497451597,283205,1448037642,1313429317,945246020,1129516544,1313162578,1279479636,1414415689,1124991005,1313163596,1397707860,1162170947,218111054,1146373459,1414088524,1313426757,268459604,1145130828,1162036033,1095910732,1397903188,1158414513,1279410510,1313429317,576147268,1313148416,1162625601,1280132431,1380276545,1124925443,1431326031,1413563472,1313296965,1393230141,1094931525,1347700050,10834767,1397706764,1397050708,1162297683,234961202,1297368391,1095979845,1230259527,7882061,1413826317,1145981271,1163155279,2380888,1413826318,1229409348,1414350164,1565808709,1498614528,1396787283,1246642507,167819337,1163284041,1163023442,5395523,1413826315,1129535827,1380928591,1393098932,1145984834,1129271888,1192296752,1094931525,1112819026,1263421772,1162692948,1192362153,1279480901,1329745993,1447318081,1163347273,184587346,1263813959,1414748485]},{"sector":8,"data":[1782928449,1163007744,1414744391,1279480389,1329745993,1178882625,1095586383,218141012,1465140551,1329876553,1313819735,218138439,1096175177,1094994252,1196574036,134250062,1179927879,1398096719,1108344855,1196312914,1145981271,1330927439,760237908,1279527424,1145984839,1129271888,1225589044,1380275278,1413694803,1413694802,1191903311,1162695749,1195463507,21180997,1413829389,1145981271,1163155279,2446424,1095254804,1128613710,1112557900,1146241359,1229015107,234919246,1146373459,1414088524,1163152709,6050904,0,0,0,0,-2081649835,1448548588,-1710983425,773,-141821813,-15939965,28837494,748310528,-16777216,-1207717322,-1706033151,481,15353543,26667264,1612973194,863313980,1946224118,108461870,63452927,33178,108461824,721831051,1342471686,-11485141,-16482762,565708405,15776256,-1533390766,-2097152000,1962937980,108461874,63452927,96410,108461824,-1962511105,-120518588,1342456835,-1207274241,-1202716671,-256245727,-1706012160,404,-167698967,1148454916,1946224118,138709823,72484395,200296073,-955941440,61510,-16353537,-16528842,-16495050,1183516276,66638320,-11533244,-16494538,721703478,-1202696000,-1706033151,65535,32261831,604277248,1963015171,108461878,63583999,-1157627976,1347616767,-768882805,-1070870389,1347602059,1342177720,-16354049,1962869876,141885194,16777114]},{"sector":9,"data":[1975520000,-955913373,60486,-16353537,-16516042,-1711015370,65535,-16353537,-16519114,-1711018442,65535,1460041471,108330838,-402361089,2122514608,678691052,-16353537,-1710927818,608,-16353537,1962870388,175439620,-1207405313,-88473463,-1706012160,65535,1954546934,-230257365,1962889238,74776326,50742411,-1957688764,1141048388,1067077640,-16777213,1183647350,-1706027278,65535,-15677821,1166797382,-364496630,1609106301,108462078,1342177976,16777114,74907392,253082,-1956684288,113401317,-1873273344,-326412987,-2585058,1996426358,142016266,1347469355,-2097148952,-443874579,-900899553,-1957363704,149717996,-167223669,58000391,-1593796887,1183384498,205929466,-1706028427,65535,200951433,721778112,9365952,-1878493441,327411726,-1979955575,1996488278,140413946,-1710327809,683,200820361,-12290880,1586170998,17298954,1352729972,-1593447676,-120519600,50880139,-11532729,1996424311,-25755652,737834751,-1202696000,-860225504,-1706012160,65535,-362753,-6621066,-1593835265,1178141618,-14912244,-6620554,-352321281,209125138,-16091393,1996425334,74907398,-1207819032,-443875327,705117,-2081649835,1448547564,-1962647925,1586168391,541534984,-1947318647,126551134,721968779,1183391303,108462060,16777114,-1946645760,214336503,-768313,140413951,607340426,1971338432,73370427,-2146809866,1183658612,726669046]},{"sector":10,"data":[-4697920,1979666687,105220872,-2053484480,-1929379837,1343682118,-1149185,-1785009034,184549379,-949848896,-68538,15746759,172329728,2112898617,-163148464,1962889238,74776326,50742411,1346374212,50611339,1346373700,16777114,-163148544,1996443670,-327745554,16777114,1958742784,50656788,1187448692,-335544588,-263812305,-336312695,-263782617,-351222141,142016424,-16490869,939459191,16777114,212224,100010613,-955943679,-134074,-1710852353,65535,1593067147,1575324511,1426065090,-326898549,1996445204,825864,1183383552,-2082960386,1946159231,109019910,-15829760,-1070921610,1347440720,16777114,173968128,540231670,1200295028,-27358432,-1996077269,1586168902,138906622,990266883,2114260998,84975881,-1995946197,2122516038,92078086,411335,75399936,-955941632,1094,384714381,108461904,-1962641665,1200356958,105251592,105352016,1342457347,300954,142016256,125338,-163148544,-1070903274,922701904,922682640,-1214642930,-1929379839,1343680070,384714381,-163148464,-6664170,-1207959297,-768901120,-1070903214,-2001055664,-11513216,1996484214,-230257680,-1947318741,-788234738,1354826721,737429131,100921414,726664320,-11513664,1342414902,-26032,-259325952,1575324510,1426065602,-326898549,-11118794,1183648886,-1706027310,65535,31082123,1586168902,243237640,-385649408,1586168065,17298954,1352729972,-1593251068,731448400]},{"sector":11,"data":[66638274,1183385158,140413938,-1995683957,1200354886,-1992278002,-1072968634,-823590027,-1706025472,65535,200558217,-385649216,1183514813,-1202708788,-1873805303,255191054,1183576203,-1202708788,-1873805304,254142478,-15992693,2117685876,-11701004,1996426358,74907634,516703883,-241543344,-1929379835,-969211579,1996443517,209125132,-1915986293,1344143681,-953432437,-6664120,-1962934017,-936642994,74907473,-1915986293,1344143681,-953432437,418074696,427095563,1978957369,209125140,-887041,1183515766,1448091340,400282,-196703488,2126920520,209125154,66471563,1342521862,-1962641665,1083034718,-1957683711,-970197946,-6664120,1577058559,1575324511,1426066114,-326898549,1589925378,931866116,38243110,1946288445,33701166,1048790645,1979646006,-1202301317,-11534335,-402638282,-1202713609,-1001390079,-14285730,-14284681,-1830287753,-2091259133,-16763330,-1202317708,-11534335,-402638282,-1073017905,113706612,-65482,3554947,-1003129345,-2128214946,33555071,-2128205198,34144895,-1960435081,883099207,1200301573,87466760,-1070901674,976682832,194111488,87341136,518224,1575324510,1426064578,-326898549,-1957275896,2123040886,-1427614204,-1070903285,204990544,112726,976682832,190703616,1459373705,990613736,91618374,-352321096,-1547687166,1187446842,-2080374790,12350,922697332,922682202,-396951504,1183447998,-59310086,542874,-28931840,1603000459]},{"sector":12,"data":[-754667262,-153615389,1946356807,-92372213,-955941888,-67002,-1694730497,2357,540230902,-1444347020,-92372224,-385647616,2122514592,58064634,-402614295,-11138776,-396886922,1183447910,2109737978,1007077211,1023410176,225837053,3802823,1187446785,-352321286,-286763476,105265930,-11132044,-396949898,1183447862,2109737978,1077838599,225771520,3802823,1048772608,1946157120,-92372218,1443986432,-1191414017,-397410303,113705728,64,16416387,1048783484,1946157120,1007077155,-16777216,-16557514,-1207947210,-397410303,113705801,64,113706731,65600,4210307,-402426880,-11138911,1996424822,780538,1577613288,1575324511,1426065090,-326898549,-1957275898,1996424310,112648,976682832,168683520,-1996077431,-1705968570,1014,-2080487799,13374,882969716,-28931840,-1996476255,1586232390,41368062,-991362187,876512000,359923712,56243967,3159807,1342177720,-16596760,-352101834,142016272,-1207535873,-397410303,1996423740,-59310328,8435798,-401698736,-167048133,-4717187,-1962742785,-27358266,184698761,-1955562250,-1312388101,65065732,214402040,1963984374,50722317,113707125,65596,113706731,60,3161731,-162892544,1165234181,-1207404801,-11534057,378208885,-1070923718,1347602059,16777114,142016256,-1560132213,-1957691344,1200293982,105186078,541559632,50611459,-397408187,1520696005,-955847933,15366]},{"sector":13,"data":[108461824,295322,-1956684288,113401317,-326413056,1460857987,-28915882,2122579967,159186948,-1962385781,-347600313,-1983894782,548991558,-163149490,-1946663287,78710398,2114185171,214401800,-1996077685,1166798406,-62486268,2123060971,-754667258,142476263,-1962096765,1965816950,-297366780,-1996077781,-166988730,-963967363,-259270409,16023171,1183516797,-1982269452,1983509574,-2095218954,1946219646,-129594601,2146715193,-196703473,-1980217719,1183577718,-28931834,-16222465,1996424822,133425156,990267017,-1770655162,1593722507,1575324511,1426065090,-326898549,1017206280,138813696,4064967,-1070923776,-26032,-6684672,-956301057,13830,175570688,742554,-96040704,1200347275,-129595134,-1710590209,2955,-15960321,-1070921098,9103440,983691403,-28931840,292864011,-15960321,1996425846,1354771448,2095582864,973522698,-956301312,12806,142508800,-2094566400,1946222206,209125136,1342247608,108461910,-352028929,209125132,1342247352,1354771286,151099984,1996423168,-26100,-1073020928,1586176372,860326412,1077723172,2139297140,259260468,880279379,737703679,244338880,1577719528,-1034033781,-1957363702,49054700,1074186070,-956301312,16791558,1007077120,721420288,1513503222,-399281149,922682784,922682202,28835888,1055412224,-1012992,-1711056330,65535,816037931,56271616,-16222465,1996424822,2091012,2122519787,242483206,-16222465]},{"sector":14,"data":[1996424822,780292,-963907445,1575324510,1426065090,-326898549,-950642938,64582,-1710852353,3176,1972107403,2096499458,-1310815476,-1948003580,1183387201,75400188,-15764480,1996425334,-1070901754,-401698736,1170671967,-254,1201276534,-1962934259,1600060486,-1034033781,-1957363706,49054700,73319510,74943270,38243110,1946222653,16923938,71124596,1025012737,125042949,1946224189,-1002443977,-2094660514,1964115071,-1005917387,-2094660514,1947337855,73319465,74972966,-286781808,200313604,-15895050,1996424822,-26108,183173120,112726,-401698736,-1956773881,79846885,-1873273344,-326412987,-2082959842,1448553196,3554947,-385649153,1048773345,1946222646,112645,-1070923029,-1292663,-1207933898,-11534335,-402638282,1183385095,1975520216,45607171,1023952523,1903427597,1967980861,1010729735,1702166528,-1697089793,1829,-1980742007,1187510854,-2097151758,14398,854077301,1958742788,874416936,41911040,-1961329408,1603006558,-754667262,-262274077,51136502,1187448180,-1593835022,1183383604,-16390,-1946526069,2122383991,1951072264,142508295,443893760,-335544392,1681325848,-663290112,3946239,1347469355,-369286936,28836393,-62486272,1023952523,1651769376,-756481154,1958742785,1785163,1048785268,1962934328,-226589946,-1959168768,-167746530,1948267335,943620871,678756352,-362753,518522998,1090030340,1206453108,-954864895,15366]},{"sector":15,"data":[1681325824,-663290112,1347469355,-54794160,-16559128,1285216374,-385875961,1048773049,1962934330,-663289877,3815167,1342177976,184725992,735671488,11004415,6561419,540231670,-135724172,943620864,1333067776,1962933891,-92864750,-59310250,-1946438936,57950456,-402597399,1183515388,-96040464,-1948742832,-11140489,787020918,1975925508,-663290091,3815167,1342177976,184702440,-385649216,-4194438,939968511,-2097151744,14398,-1746336907,-94467328,1208633227,1408648841,-59310250,-1962675992,-58817544,990150144,-2096464130,2097216638,2097036147,-663290001,3815167,1342177976,184681960,-1587710784,1183383610,-663289864,112720,32565328,-1577826679,1178140730,-12487432,-16751562,28891254,-1779937280,-196703236,1356351113,1100186,-96040704,-335544386,809403155,57999360,-2080446999,1946219134,-19076861,1459255039,-386107649,-125107347,58064443,-2080454167,1946217598,906413850,-16776960,-1207933898,-1706033148,3917,6567679,-16503064,-16751562,-396896138,1586231685,-1312322566,65065732,206042840,-1959758576,133626462,-953649919,16791558,1025960704,-1988868096,1967849533,-23271165,1967980605,-23795453,1968177213,-9311997,-939649047,14342,27977728,-1697089793,4233,15498883,-4715148,2147465983,244338770,1577061864,49120095,1562371467,313933,1167087646,518818645,-326903666,1040631576,-1962934016,1451951686,-297367288]},{"sector":16,"data":[-2114955639,1971322874,-49915,113717108,-65482,6567679,1342178488,16777114,1681325824,57534464,32130759,6594818,-337099127,-398029489,-1159180266,1044284406,57999360,-1929342231,1343678534,-1202667477,-1202716160,-1202716151,-1706033151,4012,200951433,-1927449152,1343678534,-1202667477,-1202716416,-1202716409,-1706033151,65535,695517195,384321165,178256,-26032,-1073020928,1048815477,1962999862,-92372072,-1919781632,1343678534,-335822872,1514046352,494141443,56237707,271796214,-1202515083,-1706033148,65535,56243967,16777114,-26112,1692991488,49120255,1562371467,313933,-2081649835,1187448044,-2097151746,1963000958,138840837,-1070923029,-2080618871,14910,512434293,1207304292,645138482,1077102582,1187455093,1392509438,1342177720,33155152,512429547,2139291748,108265524,-1993062517,2122579014,561316100,972965515,427034182,-16762205,-16751562,28838006,1307070464,142016506,1090970,-62485760,-1034033781,-1957363706,876512236,259260416,3159807,669850,872859392,-1962934272,1438866917,1048833163,1962934324,809403155,208928768,3159807,664986,3449600,-1962920799,516120037,1430622296,-1910575989,82609112,-1946801322,456984134,1998877696,212268,305995124,-350391296,1208008195,803980939,-347078466,1258340087,12514027,-1091703987,-387252197,-347274818,2440675,641591156,1037464576,-495714265,1946167357]},{"sector":17,"data":[1590553555,-1962742397,1297948645,1426064074,-326898549,727078668,1996443840,296720900,-467009536,-1962654071,2139817566,2113866498,175606532,108461902,112727,7071824,1183578251,-1311274234,65196804,787906,-939637111,64582,133617803,-1960217340,1077939783,-1946532215,1191180894,-1744336134,1039943305,-277610464,-11485141,-6620042,704643327,-62486044,956581515,74775622,-1586104517,956581515,91552838,-335544392,1590135554,1575324511,1426064578,-326898549,-1957275900,2122516598,276627462,294531,1149961854,132859914,65781803,-1996077429,1183579206,105251076,956974219,125568582,411335,-2096239872,2097153662,172264199,105285960,-1324974453,65524484,214402046,972834443,91555398,-351910261,243106568,-339774464,-1956684045,113401317,-326413056,-1962742653,1200293982,-28931788,359972875,607340426,1950366912,75399948,-2096139264,1946158718,142016265,-1996485400,1183579718,1575324670,1426065090,-326898549,-28915966,1586167808,860326404,1077723172,-593427083,-1961432317,1207305310,276039730,-1995290741,-1072955834,547423861,-28931836,-1946270069,46292453,-326413056,3278535,-6684671,-16776961,-1710880714,65535,-1979425141,-1071369401,611598396,-401698733,1996423354,18266116,74907472,-11485141,-402638282,726728523,-1706012480,2714,1342177720,660122,1575324416,1426064066,-326898549,2122536452,1148452870,294531,1187448692]}]],[[{"sector":1,"data":[-351997700,-62470395,1996424088,239442438,-259325952,-1946394997,1149829703,-1995994352,1200296516,38218502,-1961606007,1143669831,373590290,-1710852353,3824,1575324510,503317698,1430622296,-1910575989,1007077336,-16777216,-16751562,-1207933898,-11534335,-402638282,726728375,1347440832,-2081006360,-443874579,-884122337,1167087646,518818645,-326903666,-1957275890,-397015434,-125042999,58064651,1459671529,-1705983957,65535,1048836235,1962934362,-339727612,112643,-1980086647,1183446598,-196703748,15877831,860157440,-2094565952,17112126,512434293,2139292892,376766730,32786119,373195520,175440128,33179335,-62470400,1156972545,91496499,32786119,-1103742720,-955615999,128070,33179335,860129792,-2143502300,1156978037,91554866,32786119,-62470400,1187446785,1459618294,1357906104,-1695254785,5229,-266291113,-59310256,1342106,817387264,1996443888,344431350,-1202257920,-11472800,-1801784714,1459617812,1357910200,-1694861569,65535,-310157474,535137026,46812509,-1864856576,-326412987,-2082959842,-950598932,64582,-1962260850,-1977218946,1004810757,175375942,108314634,-62455993,1183575275,-310157316,535137026,113921373,-1864856576,-326412987,-2082959842,1465257196,556675,-840367235,209125120,1358792936,1342177720,-125720,1050282614,-1962934253,138841072,-1962764056,1207307358,57942067,-1962896663,8398085,1963345467,8775939]},{"sector":2,"data":[-1962117377,75012,-6681996,-1996488449,686553670,16777114,-96040704,-1962123637,104531013,343672070,723797899,103489607,1161364742,1208316424,65788043,-1928831605,1343681094,-16353793,1166738549,172294918,71666512,-1705983229,1145,-1912965377,1343681094,115866,621054720,225705985,-15960321,-6620554,-352321281,-92864760,16777114,2133164288,105286655,1996424457,325622282,1583284224,-1962742397,1297948645,-1946154806,1430622424,-1910575989,1022133208,-1983892649,1183441478,108956644,78185867,-1705806592,65535,-1946401143,1200426589,-1202708990,-1873805303,-23468018,-506231,1183710326,-1706027326,1288,63063691,1183435334,-59310108,-1928438389,1344143943,-1694992641,1467,-1948023,-1315242890,-352321515,1979682851,1226766,1183651408,-6663962,-1929379585,-1959336354,1183384135,1200305890,-465139452,-1948105077,-2090867626,-443874579,-900899553,-661913598,-1957345904,-661774612,1443556483,142510935,-1707837953,5387,-1070337909,-1070447114,111215476,-62486267,1144635443,956658694,393545796,1463055871,-231681,-1962639818,1160456773,362434598,-1929379836,1394013278,75370123,-62485679,139199312,105120593,361273936,243990528,854066116,-96040192,75499051,-1946794359,-402405362,1996423201,108461832,-399215105,1979705594,365074996,1583284224,-1962742397,1297948645,-16775990,-1927936394,1364259910,16777114,-661863680,-1957345904]},{"sector":3,"data":[-661774612,1444867203,242649943,252477059,1586318965,1393972960,-1705830826,65535,1474330251,63190783,19866,-1070377216,1149980752,642001706,742689616,1344816171,1342238904,1342185912,28570,-11053568,-402640842,-6625158,855638271,317430208,209125206,-16091393,1996425334,-26106,1583284224,-1962742397,1297948645,-1325397302,-1914571248,-134017924,50345155,17808896,56654080,18168576,53999872,134396673,50349056,118574593,50352128,17826304,52592640,18026752,56853504,117789697,50354688,18171136,54004224,135680769,50352640,-15441920,50371328,-15479808,50372352,18319104,52073216,135665665,50355456,18196224,54008320,18304000,52009472,18324992,57121536,18191616,57058048,17024256,55649792,17099264,50475520,118919169,83888128,-16709376,50421760,17796096,52606976,118950401,50333952,134305793,50331904,134225665,50332160,18275840,56900864,18232320,55754240,18024448,52772608,17825024,53788416,134301697,50333952,17561088,52675072,17822720,51266304,17474048,56804608,16838656,55496192,18215936,37277952,-16708608,50421760,-15285504,50422784,135756033,50339072,134389761,50340352,18012160,53959168,18294016,57039360,16994048,56942080,18235136,54059264,16854272,55403008,135747841,50343168,17144576,55764224,17501184]},{"sector":4,"data":[50849024,17083136,56978176,134363137,50344960,18009856,56880128,17438464,53637888,17730560,2618368,0,1167087646,518818645,-326903666,-11118816,-6680970,-1996488449,-661914554,1963001846,209617676,-1962511360,1200162374,-1983894776,1183441990,-163149334,-1995815285,-125047738,-1995946357,1988884550,214336508,15091399,22931712,949379,-1705633932,65535,-1980610935,100922454,1149830224,-339571958,172279560,1386283008,138709252,15105667,1183384437,-60912658,1963001846,12511491,1613038730,-96040704,209043467,1088833163,1946830649,9496835,-1980348789,1586225734,-431584260,172439872,1183518325,172243446,1149961854,-498693878,-15829249,2122574454,74711290,65781803,50332088,-11475386,1996481142,183298296,-2082322807,1946221182,2114323253,-129595132,-1995815797,2123101766,-431584276,1089095305,-1948236151,1194982494,-15502070,1996426870,1996443878,-126418954,-1995787800,1586225734,-431584260,172439872,1183516277,138906082,-1962640247,1149892678,142344966,2112126521,-461469380,83245035,-1961593504,1141110854,-60912886,2114471739,-427916523,51344384,1183575678,-129595128,-1995946869,2089414214,-129594620,-1962523511,1174473284,172264440,2113291833,-163149565,956843147,58584646,-1947318647,133626974,-1962380031,-956043706,-2082191735,1191121094,-60912666,971392651,58591815,-1946249751,1177281606,-2147089654,105351428,-1948023]},{"sector":5,"data":[-6680970,-1962934017,1600053830,-1962742397,1297948645,1426066122,-1957237621,1149895798,1019225139,-166235072,1965044548,860157452,1443263504,16777114,112640,-1070923029,1575324510,503317186,1430622296,-1910575989,1988843224,1654281736,184549378,-1978305344,-1071369404,208945212,-1996077429,-397003708,49020837,-2090942421,-443874579,-900899553,1478361092,-1957345904,-661774612,108432214,47028822,-1073020928,-397015948,-2090926215,-443874579,-900899553,1478361090,-1957345904,-661774612,-15930237,1996425846,108461832,-1728050760,-6664110,-1996488449,1996485702,-6664182,-1996488449,-310117818,535137026,113921373,-1873273344,-326412987,-2082959842,-1957290260,1187449974,1442840814,16777114,1975520000,29747459,637951684,637695999,638089215,-1710852097,65535,1039287945,175374592,1946223165,-373282018,1187447202,-16776724,-6681994,-1996488449,1451876934,1975651300,-941430007,60486,1589962219,126494434,1183441962,75238,1961641531,22341891,637951684,-1006352501,958849630,57934151,-1962851863,203810374,277760,-605486219,539904,-655817867,-297351424,-1070923775,-1980348791,1589962822,1200301794,-96040701,876907350,1358186121,-362753,669574774,-163149567,896909323,-1995291509,-1072958394,1156977269,208930866,-1996218207,-1705577402,65535,-193527978,-362753,-135731594,-163149568,91537419,31999687,860129792,136700970,-129595136,695582731]},{"sector":6,"data":[15236739,1190536053,494207718,16154243,1048778612,1962934378,1996445200,-92864524,1342210232,-270004592,-163121663,-2091158271,1946220158,860157452,-2096729056,1946216574,-159481015,-2096270336,27198,2122529909,913637624,-394362026,-1206094848,451608850,-352317256,1161219,-26032,-1073020928,417923965,-1203639297,-11534063,-1070859658,1375732154,82221648,2122514432,678756600,15236739,1190535797,477430502,16154243,1048778356,1962934378,1996445199,-92864524,-1873756117,23128078,98715267,-2132392202,-1981217931,175570942,16777114,-297366784,49120094,1562371467,576077,-2081649835,1187450092,-2097151750,1962936446,11069699,-16222465,1911031414,-196703999,-385649344,1187446934,-16776454,381160054,1996443649,1354771208,85826128,1996423168,105945608,1183383552,-196703234,-523041615,100550147,1183383564,-153580554,359927815,-1207273729,-11534057,1183515255,1347590644,16777114,-161576192,52758410,-62486272,-1710721281,1364,-16222465,-1070922122,-401698736,1183384631,-1965519882,206087,-506231,-1710870986,1493,16285315,2122516085,74711292,33181312,-1946532213,146955749,-1873273344,-326412987,-2082959842,1448543980,1183577643,139394824,1299496971,-15698177,1183518326,67118342,-401698736,-125107237,896859915,1963197942,241011495,1983461259,-1962705656,1166739574,507527182,209125200,1443526399,476570,173982720,50726]},{"sector":7,"data":[103692031,437402,1590070016,49120095,1562371467,838221,1167087646,518818645,-326903666,209125124,141210,1958742784,176063278,-148343808,67110470,1996426357,142016266,-1996479512,1996425286,175570700,-1962379521,-2145057210,-6664192,-2097151745,-443874579,-900899553,-1957363704,183272428,1187468887,-939524104,63046,-1710852353,19,-113015,1996424822,1354771204,350752400,200837891,-1958382337,1200356958,-129595126,78770315,-293345581,-2081225968,468389062,-2080878849,2080438398,1962359578,268760598,1149961844,-163149566,-1592725885,1178142254,-2263562,-1710870986,1716,-1710852353,1883,1593329291,1575324511,503317698,1430622296,-1910575989,283935704,1187468887,-2097151752,1962938494,-373282043,1190593027,1946681350,-1983894776,1183386694,105314058,91488512,-15841593,276234239,-1961986305,2426438,244338692,-1962775832,105314296,1551106560,-1049297141,105789067,69724247,1149878315,105154824,504382861,516393808,172264272,-523041615,-953432573,1342178349,16777114,172818176,268725379,-1996209013,922742854,-744880594,-16777215,-16372170,-1070862218,-26032,28835840,24242432,15877831,172395264,1946961419,105313804,-1960217596,1183386182,105314034,188773504,-1971751681,8398085,1475888777,-1962694424,-1593422282,1183385134,14936336,-15960321,1894255222,-230258430,-847921141,58064651,-59671,-1710870986,2042]},{"sector":8,"data":[201263849,-15960577,1083838582,-1962934264,-1593119760,1183385134,1312197392,71600902,-1996484603,1996484678,148281872,1996423168,-260636912,-1705983957,1898,343261195,67520246,-991362188,-227082242,16777114,-21370624,-15698177,1183518326,67118342,-401698736,-125107901,209059595,-1710196993,2246,183234699,-1996083551,915083334,1183516238,71600624,185222399,-1960872705,-1924129081,1344147525,-1324727157,65065732,768027590,-1706033148,1477,2122520043,259391246,-1324712821,-2081959164,-33353489,-1962096765,2133132870,-129627392,2122515849,108331250,-2147277440,-1070923251,-1995946871,1183516228,239438322,-1995946357,1190527557,376705030,82745936,1183383552,-2133292038,1996423439,148806152,1996423168,87071248,-1981218816,-2090901762,-443874579,-900899553,1478361100,-1957345904,-661774612,1988843095,108956424,100244054,-1073020928,-16035212,2088967540,896794642,956571809,762581572,-1877838593,25552910,1197255,-2095125760,1962939004,843380248,-15567864,-1207721930,1385758721,-26032,1149829120,310149906,-15895552,-1070919052,-401698736,48955932,1600045099,-1962742397,1297948645,-1325398838,-1914571248,-134017924,-1864856381,-326412987,-2082959842,1465255148,-16220541,-1070398091,-16741911,-610661770,-1962934265,108954608,-1961724928,-1073018810,1144775804,-402230518,1189871549,172264336,-335563544,621120331,1183383568,-14387974,1996423797,1354773256]},{"sector":9,"data":[-1528295792,-62486017,1946157069,175570702,511130,-62485760,-2121256213,64078,1166743157,138820354,1183518325,103719690,105789065,350996363,-1928269949,-130347964,1996467059,165779978,-1070399488,-310157729,535137026,113921373,-326413056,105286486,1946437131,108461875,-1710983425,65535,1086058635,50680576,-6664192,184549631,1343583424,931780747,1394492227,-16353537,-6683530,1476395263,1575324510,-1946155838,1430622424,-1910575989,4372696,1882192,172726864,-1073020928,1347426932,160930384,-661979136,470042567,38258432,379256831,1476395018,-1962742397,1297948645,-1864856373,-326412987,1457032734,105286487,745848843,-1706012592,2702,1150021771,-23074806,-396950293,-276627339,205819152,-227280837,696218,136157696,28311552,-310157729,535137026,46812509,243968,146342891,-1864856576,-326412987,1373146654,-16091393,1183516790,67118342,-401698736,190447195,555578560,-661977522,-1054668917,567408464,105286415,922683145,-509999570,1476395018,-1962742397,1297948645,1426065098,-1957172085,1166738558,1958742798,67499788,1342600448,714394,268826368,-16223232,244318837,1610562280,-1034033781,-661913598,-1957345904,-661774612,1443032195,-62470313,1317076992,1946157064,142016303,705690,-1947170048,1144718918,1024815882,276561920,-1946304280,1058053,1166739060,-62486270,-1710721281,2875,1610368651,49120094,1562371467]},{"sector":10,"data":[313933,-2081649835,1465256684,16271047,71731968,-16366079,-1717957514,-1962934261,-25872,1183383552,172264438,2081048121,13232387,2131248697,172395512,-171800,922744438,922681420,28835918,-6664192,-1560280833,1183515970,-28931830,-946836757,64070,-1996077429,92998725,1962935333,241011520,963959563,503465869,637008,-26032,1183383552,241011708,561252155,-1913227521,1174602311,1344159996,1177225099,-1706014468,3103,88212995,-335919479,105286400,-1946532351,1178335814,-1996261640,-947652538,-28901616,956843659,41811526,1352764907,-129629948,-401979765,1317797057,72231928,-1995815285,166460998,-2096476791,1191121095,-28931074,1913144891,-159973393,16777114,209125120,770202,-129594624,-443851169,705117,196633,66618,208504,67704,217732,16714054,16973974,461411,16973912,461372,196698,66280,208402,67846,16998546,461442,16973829,460808,16973830,461665,16973831,461803,16973832,462041,196617,68724,217790,66646,16983359,459929,196627,66053,216268,68594,211153,16712612,196970,16711772,196973,16713259,196975,16714834,196977,68817,16988385,459415,16973884,459427,16973885,459527,62,0,0,0,1167120524,518818645,1465309326,350470195]},{"sector":11,"data":[-1705947056,65535,-1709307165,65535,780375,-310157729,535137026,1439386973,-326898549,71731970,-402415453,-119010729,95807492,-402527000,820512403,9037825,-402285592,-51902216,571403,-26032,1085800448,-157200384,1049861,17406544,379781120,73328644,16777114,88776960,-1588528943,-120519348,-26032,922681344,-6683128,-402652929,28839480,1389505408,1354771280,-805258672,-1588572078,103482638,-11533208,-16445386,721709110,-11513664,1342414902,-26032,883097600,172877830,-1962933832,46292453,-326413056,1460071555,84975958,1645120409,-1543899388,171771362,-955875840,168157702,4241408,964688,98709239,1342195205,16777114,-2081387776,-761065786,-2084140283,-1566372154,-2084140285,-1163718970,-2084140283,-626848058,-600405755,85112836,-1070903266,922701904,245433616,1745234693,-6664188,721420543,-1592595457,1149830420,-2082567422,413208262,105351429,-499238585,-941064443,580,-964436341,84844814,1577469833,1575324511,-326412861,1444211843,15615687,-294221056,1438181073,-296842752,-754851456,-264074784,-2081536257,2080960126,571620,28856400,-1924116480,1343680582,16777114,-330921728,-26032,1352859648,-327745787,16777114,1354771200,122266,104243968,1342177720,125338,100967168,1342178488,16777114,68985600,1575324510,-326412861,1460726915,74877782,1347469355,-1710852353,65535,-125107063]},{"sector":12,"data":[964695,-263811760,-6664170,-1962934017,1149891654,-230257916,1577206921,1575324511,1426064578,-326898549,-1202301134,-4584427,-1706011905,65535,1342575779,-1728052808,1790464082,40745474,1922715730,-16777214,-1207561162,1385758723,-18352,1392508858,-26032,922681344,28837396,1347590400,-1173611080,1347616767,16777114,-834238208,101988095,-26032,1183383552,-6663984,-1996488449,1451883590,-60898050,50087555,-1559786714,1586168928,-62487556,126559746,-1207673181,-1952907200,1183054942,-1960443140,1846446351,-1543899388,1085801578,1586206976,-62487556,260777474,74452617,1822685687,-1556070396,1788937320,525572,-1207671133,-1952907232,1183054942,-1960443140,1980664079,-1543899388,548930674,1586206976,-62487556,260777474,74976905,1956903415,-60912892,50087555,-1559786714,1586168954,-62487556,126559746,-1962639709,1183054942,-1960443140,75539207,-556251449,-767113469,451608586,-2082972021,-1006315450,-1960379266,1435182597,-1995994878,1182990935,1183515900,-766574638,-596262901,-1697614081,65535,-1697614081,65535,-1962597912,-16363490,1186464887,-11526651,-1711030730,65535,1342180792,119194,75801344,62011135,383403661,-26032,1183514624,99394522,-1545320821,616432674,2147465220,-964471216,-32118778,1350565560,113673046,-1191310616,1448116221,-402209149,-54985217,-2091495297,-186120506,2147203325,-964471216,-35002362,1350564536]},{"sector":13,"data":[113673046,-1191321880,1448116217,-402209149,-122094125,-2091495297,-924318010,2146941181,-964471216,-37885946,1350563512,1342519480,-1577209112,-523172736,69731843,-331940016,-26107,111345664,72786181,-120457007,-1593550173,-1181154216,-101253117,-788243293,-1207687618,1344144624,75380479,721749665,721692678,1342472198,50603681,1342471686,721749665,1342472198,308122,60340224,-1070903266,648106064,2114323204,922701828,1201276166,-1593835519,100861190,1688405120,69640452,69993987,-150993991,73573353,-443850914,-1957313699,49054700,52954766,637934241,-1906664541,-1593628154,-1557789156,-1070900579,-6664112,-1962934017,1438866917,-326898549,1354771202,-1157627976,1347616767,336282,1354771200,-1157627976,1347616767,16777114,738627072,113714691,1400919200,16777114,1575324416,-326412861,-1191198488,-4584397,-1706011905,580,899152,-1706012007,65535,53347982,1519887142,-1726576346,1354771290,-26032,-727515136,-703166203,99792901,-6664162,1023410431,158597132,1342180536,386714,-1073297664,-956301311,17071110,104773632,-6664162,-2147483393,409150,113708149,-65088,75237063,2090926080,28615428,53479054,637944993,-1906656861,-1593626106,-1557789114,448289467,-1706025466,65535,1946158141,964617,-26032,-443875328,-1957313699,1644611564,1560281088,-326412861,1459940483,1354771286,-1706012592,1558,721796259]},{"sector":14,"data":[1347440832,103062096,44236800,1354771206,-1706012592,1744,-955961181,413702,78561024,1352791595,-1207596794,1069157397,726684162,1347440832,-1706012592,65535,-972798583,-956299451,66117,-947665013,105947912,100565830,-661926788,-1710983169,65535,-1962691933,-16363490,146277495,-1634054144,-1560281082,109970704,-1557789900,512449205,2013202000,702468,-26032,245563392,906399237,-1214044669,88520794,-1070903266,922701904,922682640,-1717959410,721420292,-11513664,-16445386,-1710944714,65535,1577327267,1575324511,-326412861,-1207767933,112856122,-1202695673,-4584367,-1202695425,-1706032652,1814,-26032,985137152,119847436,1924681810,-17908,-1070903214,-26032,-1706033152,65535,-1173603656,1347616767,-1173593672,1347616767,-1173598280,1379991551,-28930736,45633558,-6664192,-1912602369,-1979500538,942079558,1946963718,1335895570,1385797644,-26032,1178075136,-1207601666,48955393,110018603,-1557789894,-1070900573,2130753616,-1706012007,1937,721815715,28856512,1347590527,500378,106341120,-1202667477,1385791236,129210960,-291307520,1354771205,-1719697224,-996519854,-1560281081,-1070922256,2139207760,-1706012007,65535,721746083,12079296,1347590527,517786,103588608,-1202667477,1385791233,133667408,-626851840,1354771203,-1719729480,144330834,-1560281080,-1070922612,2130950224,-1706012007,2073,721663651]},{"sector":15,"data":[79188160,1347590527,16777114,98083584,60831487,-1728052808,1033523282,-1560281080,922682400,45613984,1347590400,16777114,64791296,-1017256565,-2081649835,-1923739924,1183446598,-27882244,1187444267,1589903610,1065362948,-14781152,-219478970,972193408,179314815,-990220554,1191117918,117581316,1183330348,73319674,-2012771802,809300550,1589959293,-62455812,653936266,-2092562552,-1233386498,654073483,-1962932282,1452013126,-443851016,311901,-2081649835,1448551660,-956056385,64938054,1119417899,-17908,109989970,-1977220292,705422492,-2088268289,-17908,-457682862,-17822,1183666258,-1202710812,-1706033127,1859,-1948230005,39291655,-1982052727,2122374742,242483428,384059021,-13572016,-1982052727,1996480086,-596181026,16777114,-1982166016,46629637,-2082447733,-1962614714,1452006470,-1995994658,-2092563881,-2105799938,-443850914,-1957313699,585925612,16777114,-565802752,-532247216,-1030074346,-16777213,-6627722,-1593835265,-1901918902,88908033,-1593732957,-1834810318,71737601,-1593731933,-1767701242,75407617,-1593730909,-1700592512,374785,75378423,-1207853917,787939333,-1633483648,73441537,-1593728861,-1566374818,74096897,-1593727837,-1499265940,74621185,-1593726813,-1432157068,-532247807,65553923,-1559986170,1252065708,28222213,721767585,-1559951866,2057372080,28484356,-1560005471,1151402422,28877572,28968647,109969409,-1591344322,-1130145117]},{"sector":16,"data":[1575324417,-1873273149,-326412987,-2082959842,-1957295380,-6683018,-956301057,6150,470220544,81568005,314069022,-1706025467,2656,3687622,-600375466,1354771204,16777114,-163148544,314069014,-1706025467,65535,688160417,1174533702,1183667962,-1706027274,65535,-26026,-1705639936,65535,16777114,-310157824,535137026,46812509,-326413056,-16061309,-1207721930,1385758721,440400,-1706012007,649,200689289,-10324800,1342414902,169626,-1617276928,-1560281086,378078378,1183384748,-27883012,1098170891,654073540,-467007606,-939899255,63558,-500085,1183579206,-27882500,78251562,101353352,33179275,1589967942,126494460,1183441962,663234298,-2080880897,2081028222,1575324623,-326412861,1461644419,-196688042,1187446784,-352244490,4241529,-159973552,28314,-1192195328,-1078326199,726684171,-1202696000,-876977436,-1957670389,-11526458,-644155786,-1996488693,-1072963002,-24428684,1183523819,1002832886,-2145356089,343212093,97664,1183518325,1002832866,-955943225,128070,-193035449,-2083032064,1962996862,1268405777,-2097151988,-345704890,-196688123,2122514433,-2123104012,14843523,-1863777419,-1191277824,-4584375,-1957670145,-1202708793,-356883740,-1924115960,1343677510,1342181304,587930,1958742784,-465138347,-1929754999,938212438,4161574,1191128693,130426618,-94467282,653936383,-1958344762,1191180894,130426618,-94467249]},{"sector":17,"data":[653936383,-1957820474,-970524066,216727559,-990230785,-2144929186,-1066062273,384059021,-26032,-2142830592,1962999677,-498693127,-952383997,1927873398,-6662401,1577058559,1575324511,-326412861,-402645016,-739770229,24700928,-402579480,-219676138,77785091,-402373912,-443874888,-1957313699,49054700,84975958,1712229273,-1543899388,748881194,671532805,-1207959291,-1202716608,-1706033126,3320,1153953931,-947912426,6212,-1996162911,1153896004,-939524350,-64444,-1996250975,80153156,1153892363,-1962933744,-1706025274,3364,221026902,113704960,1588,1575324510,-326412861,-1207767933,-1202716608,-1706033126,3395,-1946270071,373802968,1204256768,-956301288,-956268537,-64953,-16496697,60858879,-1962260599,-1706025277,3446,-1694599425,3454,-1017256565,-2081649835,1085801196,448286720,-1785049088,-1996488691,-661914042,-1996093279,1204227655,-955519466,-59321,-16627769,71813119,1204289535,-1593834232,1200161696,516131594,231512656,1996423168,232037118,-443875328,-1957313699,49054700,1342193848,1342184120,912282,-28931840,144824459,239569158,35014599,407357312,1204224000,-939524350,-64441,403195847,60858624,-955627639,-1962932217,-1706025277,3614,-1694599425,3622,-1017256565,-2081649835,1085801196,448286720,1033523200,-1996488690,-661914042,-1996093279,1204227655,-955516394,-59321,-16627769,71813119,1204289535]}],[{"sector":1,"data":[-1593833976,1200161696,516131594,242260560,1996423168,242785022,-443875328,-1957313699,49054700,1342193848,1342184120,954266,-28931840,144824459,239569158,51791815,407357312,1204224000,-939524350,-64441,-1996250975,1204226631,-1962923000,-1706025277,3778,-1694599425,3786,-1017256565,-2081649835,1085801196,448286720,966414336,-1996488693,-661914042,-1996073311,1204227655,-955517674,-59321,-16627769,71813119,1204289535,-1593833976,1200161696,516131594,-26032,1996423168,194747134,-443875328,-1957313699,518816748,16777114,146688,1994982260,204060673,1376737978,1354771280,16777114,-297367296,-385649344,1996423517,1354771438,178256,255433296,1183383552,-229209616,1342194360,-260636846,16777114,-465139456,-26032,1183383552,-363427352,737048319,1347440832,16777114,-294191360,-1411329,1996482678,-25872,1996423168,-25874,699924480,-17908,-6664110,-1006632705,-1960384418,-431585017,38243110,-1946925431,20833862,1024488448,58523650,1023465705,1149108227,-1962880791,1452009542,263658,-11382702,-6625162,-16776961,-2003114890,-1962934269,1183441990,537315322,-956301312,16786438,-428409088,-1694861569,65535,16777114,9431296,652762820,-1996208245,-1960385978,1183385159,1200301822,-330921720,172460838,653674121,-1995683957,-1960379322,1183387207,-427916296,-1207601917,65732616,-788527432,-398065184,-1935617]},{"sector":2,"data":[1996488310,-159973396,-1411329,-1248139146,-1996488703,2122578502,208995302,-59310256,-1694992641,65535,-1696303361,4003,-1696303361,65535,2098887,113704960,65572,1342177976,-1946197527,1438866917,-326898549,4241410,1751120,281320016,1183383552,-1579643906,1200162312,373802766,1204227073,-939524328,-64953,-16496697,134727679,60858624,-955627639,133191,1344193419,1111706,-25755904,1113754,1575324416,-326412861,-1207767933,-1202716608,-1706033126,4427,-1946270071,373802968,1204256772,-1593835496,1200162358,50841360,38258432,1204289535,-1577058556,1200161696,516131594,293771856,1996423168,294296318,113704960,1458,106432199,-443875328,-1957313699,49054700,-1559994207,1587610852,96903940,-1560005471,1050739942,97035012,-1559986527,-324860464,75538692,-1559900509,1085801710,448286720,-1600499712,-1996488692,-661914042,-1996093279,1204227655,-955512554,294787143,-16627769,71813119,1204289535,-956299256,-1593832697,1200161696,516131594,215259728,1996423168,215653118,163053568,-17908,-6664110,-1560280833,-443873756,7717725,38993925,27263231,101187843,4194312,153420035,4325384,264568835,9044223,250675459,4915207,257884419,4980743,29950211,4521992,98042115,6619140,264241155,9240831,277151746,201392129,230031362,1661075457,149028866,209911809,123601155,5242887,90833155]},{"sector":3,"data":[65537,257032451,5308423,235667458,1661272065,85000451,131073,256508163,5373959,241041410,1912995841,252313859,5505031,213778434,1661468673,291635202,201916417,137035779,9830655,292290562,1661665281,109248771,5242888,91947267,65538,35324163,5373960,171966467,1686765569,246415362,1661861889,219283461,20054271,224657410,1662058497,261816579,393218,61931779,5701640,176160771,403701761,277807106,1662255105,104792066,202702849,94306563,65539,39190530,27263231,157483267,6094856,170328067,328597505,283377669,20971775,42205186,203227137,229703685,1661075457,125829123,11337983,235339781,1661272065,131399683,11403519,240713733,1912995841,34078723,11469055,213450757,1661468673,83296259,1562509313,291962885,1661665281,84672514,1420296193,250150914,204013569,7929859,28705023,246087685,1661861889,219611138,20054271,279248899,3735807,224329733,1662058497,277479429,1662255105,88276994,204668929,204603651,7798792,87097347,1571880961,92864771,65543,12976131,36831233,1310979,262151,283705346,20971775,275644675,327687,115802114,205127681,279773443,458759,113180675,1681719297,147718146,205651969,253559043,983047,84475909,1420296193,272892163,1114119,254148867,1179655,272367875,1245191,175374339,323223553,188940290]},{"sector":4,"data":[206110721,1835267,1572871,120848386,206503937,72482819,1380712449,116326402,206635009,117309443,-2033188863,119275523,777060353,156565507,953221121,6160387,1574109185,9633795,928645121,175767555,945487873,249102595,2818055,271843587,10682376,120324098,207683585,88604931,3080199,85524741,6815748,189726722,1659109377,158007299,954269697,89391363,3276807,173080579,291766273,61341699,24576255,270467331,3145736,116916483,3735559,190513411,3801095,224002050,200146945,179044611,3932167,108003587,3407880,180158723,3997703,105644291,3473416,180551939,4063239,118358018,208797697,59769091,4128775,9043971,879755265,85721346,6815748,245760002,200605697,39518467,4390919,29229315,3932168,176488451,980680705,295108867,4521991,235012098,200933377,0,1167120524,518818645,-326903666,-11053562,1996425846,108461832,-1728052040,-6664110,-1996488449,1996487750,-6664182,184549631,-1959496512,-6663952,-1962934017,1959398344,-1924115930,-397346746,-1073020886,1979205259,-6664184,855638271,-1705619264,65535,-26026,1599602688,49120094,1562371467,445005,-2081649835,1465256172,16777114,1958742784,-129595058,-1912177013,-1070397370,-1962571226,279463920,-1960441739,-96040699,-812955833,-2144943476,74776637,-768358093,-1979953527,-1977156010,-1073068283,-956827531]},{"sector":5,"data":[309592080,1183667974,-1477947142,200838143,-1727826494,1996436971,1354773496,-100609,1996487798,8108282,902691,-6664191,184549631,-136547136,1946190022,73304974,922240651,1451952009,1606912776,1575324510,1426065090,-326898549,509040132,209110524,-1962377532,1183515742,-1981230842,19267142,-62486272,2085353515,-28406988,-1375961597,-1059991413,-1031090141,-523181871,-523181871,-523181871,-963977007,-523181871,-523181871,-523181871,-997531439,-338369878,1583292361,-1034033781,-1957363700,149717996,-65120426,-1005685051,1586170494,33260292,1183532926,-137219322,-28931597,1258835595,-1946657143,-1981679677,-779355066,1579933323,-11842564,763166286,-1946395133,-1981230654,1325398598,1139571962,-1946973373,-129070332,69464579,-341050654,105286633,-787978505,-204960792,1583292325,-1034033781,-1957363698,49054700,176063318,-15043584,1996425846,108461832,-11485141,630850678,-1962934270,1979059184,102015258,1342850697,-16222465,-1070922122,74907472,181146,200313600,-16026378,-1705637258,723,-963907445,1575324510,503318722,1430622296,-1910575989,175570904,-16222465,28837494,-1914155008,49120255,1562371467,445005,1167087646,518818645,1996478606,142016266,-1207535873,-397410301,-310116504,535137026,113921373,-1873273344,-326412987,-2082959842,1448545516,-1962510709,-1073000762,-1070922379,721456105,242679807,-1324595573,1089000196,1347605035,-1728051528]},{"sector":6,"data":[530206802,-1996488704,-1072958394,1996445812,731533326,-1996488704,-1705969082,1454,-1980348791,-1039402922,1719745652,-1006629108,1191179870,126494454,-125049814,-15972725,-1073017778,-29676683,-24444290,-493825,1996486262,142016266,70949463,1996423168,67345146,1589903360,29763080,-339244288,-159514363,1600043499,-1962742397,1297948645,503319242,1430622296,-1910575989,485262296,-16222465,-6683018,-1996488449,1187511366,-2097151770,1962936958,142016288,721843967,-1706012480,65535,185222793,721778112,32762304,-1685817,175570943,16777114,-364476160,200038025,-15370814,-1070921098,-59310256,91265616,-1073020928,-722742924,15105667,1996434804,108461832,16777114,-431585024,-13994944,1996482166,-361299988,-1694730497,65535,-15305664,-73734538,-1006632957,-2144933282,510984511,-352321096,-427916517,-16222977,-6625674,-16776961,1637485174,-385875963,-1070858379,-990886263,-2144933282,1946157439,112645,-1070923029,-2080881015,-1962738578,1452010054,132588,-11382702,1996483190,-25860,2122514432,779354352,-1996198239,1889663558,-163149564,-1996199263,1822553158,-230258428,-1947574588,-120458170,-1962440410,-120458682,38242598,1990269163,-96040700,-1996195679,1923216966,-196703996,-1996196703,1183576646,984564,61992996,1317796051,-136195598,787945,-2080618871,1962997886,11659523,66733707,37615174,-385646848,2122514595,494207216]},{"sector":7,"data":[-1947574588,-1960379826,-101213945,-1962440410,-1960380850,-140967353,1200170745,-362888190,71797542,653149833,-788117621,-398030368,138906406,-1947974007,-1993935802,1183515719,1200170738,-196703482,603983621,-754732560,1200170744,-92372216,-1961264126,96636099,1347551244,201704331,-11513344,1996481654,-69211928,49708675,1183523708,-329872406,1375734789,-364475568,1375734789,-362888112,142081830,-1542401,434697846,175570940,23706,175570688,-11485141,-1705968522,65535,-2096478581,-443874579,-900899553,1478361094,-1957345904,-661774612,-14488445,1996425846,108461832,1342177976,-1979954200,1183445062,1975520252,30730499,3643984,1183383552,-94991880,653811396,251742198,28837236,721611520,-230258240,-1946663285,33946198,-129595136,653811396,-1996339317,-1960385466,1183384647,1200236256,-1981535736,-1977160634,1183385927,1207314164,460685313,-1804545,1996480630,-1014279956,1375735301,113613392,1183383552,-12850180,-16534986,1996481654,-25888,1183383552,1183535356,-194054172,603983621,-754732560,-328271880,-1713344777,1183535186,-94991368,1375735301,-26032,1996423168,52599536,1996423168,6462192,2122514432,57999612,-2097081879,1962996350,17361155,50622113,1023700998,58654722,-1962870295,-1952848826,-150704626,-364475911,-1713355125,74452619,1183447543,-1305018392,-26109,1183383552,1975520238,12642563,-1411329,1996482678,-193527828]},{"sector":8,"data":[1347469355,16777114,-431585024,58048523,-16741399,1342419510,453530,-498693888,2054471691,-1149185,916126838,-1996488697,-1072957882,922708084,1183515570,-196738068,1342178232,16777114,-1305018624,1354771203,-361300144,-1542401,1347481206,-1804545,548986998,13416960,-6664110,-16776961,1996484214,121805558,922681344,1996424114,-25886,1996423168,124820206,1996423168,124295932,1183514624,-62486042,2122523371,141820134,-1696172289,1912,-1695648001,65535,-1694730497,65535,65781803,-2080618869,-443874579,-900899553,1638406,122290435,4456456,122814723,4521992,64946435,5308423,64225539,5373959,52035587,1384382465,8192003,9896191,5439491,9961727,15663107,10027263,106037507,6946824,117768451,458760,61210883,1048583,59572483,1179655,106561795,1245191,103153923,10223624,120258819,2293768,114884867,2949128,101843203,3145736,34013443,3932167,111542531,3407880,36962563,3997703,47972611,4063239,107086083,4128775,62718211,4194311,56033539,4259847,57934083,4325383,0,0,1167087646,518818645,1996478606,209125134,1347469355,1384155322,245452880,2047224581,922701828,922682640,-1070922630,1996443728,142016266,-1710852353,65535,184953507,-1593412416,1285750868,103457031,-1962742397,1297948645,503319242,1430622296,-1910575989]},{"sector":9,"data":[142016472,16777114,1958742784,103457041,1963476537,1996443657,-26106,-310181888,535137026,80366941,-1873273344,-326412987,-2082959842,1183517420,75145990,103431811,-14715904,721824310,245452992,2047224581,922701828,922682640,-1070922630,-26032,-310181888,535137026,46812509,-1873273344,-326412987,-1596420578,1178076658,-1610056698,1178076659,-1609531898,1178076660,-1609729018,1178076659,-1207599354,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2116514274,-16387522,-2130151938,-16387010,-1207601922,48955393,-310132693,535137026,80432477,1694499584,-1845493504,939524960,838861056,2046821122,1124073728,-1107295474,1241514240,32,0,0,1167087646,518818645,-326903666,-1202301174,-1001390016,-1960442274,604309063,2090487808,-1962934272,1979059184,-373282043,1996423326,108461832,503989389,1751120,-26032,1962868736,544538402,16777114,71600384,980729867,1149878315,541362466,-1961081717,1183391316,-61437446,1098174987,1342193848,-92864686,16777114,-1706016768,65535,-15992693,1962872949,37526020,-1705639936,586,-947153941,1996443678,-92864516,16777114,-1983411456,1552686148,38061854,-1070904498,343211856,136858,340035840,-1996483423,339118340,112640,-310157474,535137026,80366941,-1873273344,-326412987,-2585058,-6681482,184549631,-1961265984,1602948190,74972932,-16091393,1996425334]},{"sector":10,"data":[-26106,48955392,-310132693,535137026,147475805,-326413056,16968833,73304918,-351504501,176063322,-1962183680,1183515740,71776522,1183532917,138808070,-963967883,1996440555,23173640,1183383552,-2037557752,1343684352,1342242744,16777114,142016256,16777114,-1983739136,-11532218,-2037578122,1343684352,16777114,1958742784,187993025,732067318,-443851072,574045,1167087646,518818645,-326903666,-1957275894,1175128646,721712396,-15995968,1996426358,-26102,1183383552,473861114,96961285,-1996107103,434895942,-362753,1996425334,-59310330,251414147,-1946206488,1979059184,1338477321,-529154037,1600045099,-1962742397,1297948645,503318730,1430622296,-1910575989,116163544,1996445271,-26106,20774912,726889728,1996443840,-26106,1183383552,1359622,1183529707,340015366,2088972405,141819910,-1710852865,65535,-1710983937,65535,1997955,1962870900,39098908,76218368,-1705638519,65535,-24444181,-167037557,1600045173,-1962742397,1297948645,503317194,1430622296,-1910575989,173968344,957106059,796198470,556675,-1705834380,65535,1586176491,1011336970,1204289535,1409285950,-1174222408,1347551948,-16222465,-6683018,-2097151745,-443874579,-900899553,1478361094,-1957345904,-661774612,-1174217544,1347551967,-11485141,-291895690,-1207959550,-4521985,-1957670145,-768932282,1375849088,-26032,-310181888,535137026,46812509,-1873273344]},{"sector":11,"data":[-326412987,-2082959842,1448543468,-351897973,1463126795,-1705983957,65535,-15991157,1600057205,-1962742397,1297948645,402653898,33620736,1207961345,872481536,1140852738,1040188160,-2080374528,1963000658,1459619585,-1593769216,1476396800,1963000576,1509951232,-687865088,201326850,-419429502,-1845493504,-1660943776,-1694498558,-1593834137,1090584322,-1358953727,603980034,-1744829054,-1694498558,-1543503257,1090584322,520160001,83887872,-1878981888,117442304,402653952,-1040187133,1174471432,352323329,1493172992,-603979519,-1191115935,788530944,100729600,805308162,-1946156288,-452984574,-1375665401,1157629697,1224803072,1174406912,-1979645184,1191184128,0,0,0,0,-2081649835,1448543468,-1962641781,956676158,92146805,-352172661,205884199,990528771,-1962573882,418055237,721700235,-1957690811,205859782,175505232,120218,38077184,-443850914,311901,-2081649835,1448545516,-1962510709,1183386180,75400190,-2096860160,1443298886,385238669,-26032,1183645696,-1957685514,-654893500,541363024,-1705977609,713,294531,2089497460,545008424,158662411,103532427,1174471808,843380472,-1593215984,103482432,48956544,1177141291,-96039940,70387243,-336181623,-62485730,71304747,-151501175,1948267076,70426889,75367979,-1070923029,-1912977879,1343682118,-106869,41418551,-16484353,149423222,-1956684288,79846885,-326413056,1460071555]},{"sector":12,"data":[71732054,184788131,-1004112704,-1960440738,-358415801,1200301573,104375046,-1559786714,-1960442928,379782215,81706502,-352026463,207537188,-1559786714,-1960442390,950207559,1200301574,64004866,105351974,-1106897245,2124481984,-96040700,95958665,-1995815285,138840836,-1962785655,1149830726,943622916,-365024506,-1946169083,-130348988,-125107586,-1577419261,1143670250,-1983446256,1149963332,105130768,51135531,721827846,172263879,50719393,78029767,2114485305,104374287,99223082,74777000,77991679,721828001,102933447,1143669899,1962889218,71600906,1342325803,16777114,205783808,-1962560349,100861508,1151534516,-1956684283,214064613,-1873273344,-326412987,-2082959842,-1957295892,145820742,37546195,246968181,-11526652,1996425334,-26106,-1073020928,915080821,904595278,61095555,-1962576896,65734726,-1962522997,506856432,-1205957884,209139973,2005599102,-1205957876,206015237,990529283,-1962508346,1996688503,242679562,1354771286,-2130697496,33688702,1996426101,1354771214,233311888,171346193,-310157819,535137026,181030237,-326413056,-1962611581,103482950,1183384842,1958743038,75400036,-16354048,1592264822,67549184,1048793118,1946157988,-339727612,-28931325,-1539407024,91488259,-335657333,1354771202,16777114,75399936,-13994752,719849590,142016256,-402229505,1183448350,61383164,1962690105,374800,-59310256,-1962702872,-1465648058,1575324419]},{"sector":13,"data":[1426065090,-326898549,74907394,16777114,-28931840,67549264,79187998,-6664192,-16776961,-6619530,-1962934017,46292453,-1873273344,-326412987,-2082959842,1448545004,-2096341365,1946160767,-1070902518,-6664112,-956301057,479238,-569981184,-939524347,-16392186,839305215,-1962934266,1084427334,108954373,-1961135104,508005336,-1962392023,1177100359,-1547465974,113705894,1620,1183516395,106210060,425603,1996426612,105286412,1342178861,-1090740760,-24443654,-2096969853,238654,-141884043,-2096959613,238654,1183516020,-1962677494,1183385670,64004600,-358546295,-1593472763,1149830678,104374532,-1593555575,1178141862,-955679240,403462,16443648,956703393,192739398,103286471,92864513,-1593775383,1178142132,-954434056,33957894,78029056,95952523,-1995421909,273124101,95684099,-1593785367,1178142020,-385647368,580976791,-1509545210,-1205957884,105331461,-1506433,671532800,-1593834490,547554212,68073478,-88584162,-1706025468,1210,503582392,571472,309328,86219344,-1264517120,-1593472763,1166607684,-569981180,-939524347,-16392186,95724031,-1559802205,512427274,126551480,-1560038237,1319175080,-129619193,-1207689565,1344144390,503642808,84777552,1996423168,-29366260,1342178744,62142207,-352210968,102932772,2113422905,671532828,-1593834746,512427332,1194001848,-1962571504,100864071,1166607906,675185412,729023494,-1560042335]},{"sector":14,"data":[246941216,-1202708988,1344144634,16777114,68073472,2124501022,1356396292,-150699871,-6663976,-16776961,62393462,79187968,922701824,922682848,28837342,-1070903294,175570768,-1710721281,65535,-310157474,535137026,147475805,-1873273344,-326412987,-2082959842,-1957296404,-6680970,-1996488449,1451883078,507808764,-1946532311,1177100356,-1070901508,1996443728,-92864516,1021841040,-2012821760,-2097139196,406078,-1202314380,-1202651138,-1202716622,1471809108,-1706012154,1628,-16297821,721823798,-1108848448,-310157824,535137026,181030237,-1873273344,-326412987,-2082959842,2122516204,242483212,-1324595573,1021891336,-385649662,246939781,-11526652,1996425334,35035654,1183383552,103981562,1962559033,242679558,-1962615576,4000838,1025733634,309592577,1963065917,242679628,-1873756117,223799310,113721323,1872,76023495,2122514632,762577146,956707489,628423238,-1207011585,-11468802,-1207662538,-4521985,-1706011905,65535,-16297821,721823798,300437696,-96040192,-2096745821,-443874579,-900899553,-1957363702,82609132,1049318999,915080100,922682920,-16055386,364381556,-1207702783,-11534060,1183516278,-1949160700,721835038,1389595593,-26032,914948096,1049167400,1599996836,-1034033781,1478361092,-1957345904,-661774612,-16091393,1877476982,175570937,-402098433,-310181877,535137026,113921373,-326413056,1461775491,104374614,99223083,1183447249]},{"sector":15,"data":[2143292406,41675011,-16353537,28836982,1843941376,-398030588,95952523,972441227,108857415,-1995946101,-88148410,-2080470268,1048773319,1962935204,-2080929019,-794754321,-1593538301,92866026,-1996089695,950076484,71665926,61095555,-952536064,70316102,921454279,83796228,83494443,-1578482039,1183384628,83534310,75367939,-1946925431,100922950,1183384828,-364475406,-1578875255,938148992,1123043015,-330905852,1151403068,-364476156,721748129,-1996162042,1183573574,-100269066,-196703996,50658465,-1996193786,2124542534,-465139452,-1981397365,922738758,1586168754,-1707606032,2023,-1161591,922682486,1855587272,-1996488696,1048837190,1946157988,74907428,83506943,83638015,-1411329,922744438,-1070922830,1586188368,41418736,-336169217,74907426,83506943,83638015,-624897,922740342,-1070922830,1996443728,-262239242,-1207666689,-860225504,-1706012160,2232,-16484609,1996485750,-461963278,-1193249025,-256245727,-1706012160,2356,62011135,-1286517,155228727,1048772608,1946157988,74907482,-1996238687,-1588534714,1177224760,-28931594,83796304,83494443,-159973552,62011135,-1957642197,1200352350,-163173628,41418576,-1191807233,-860225504,-1706012160,2322,-16484609,1183577206,-2147079170,1996443652,-2143879196,-10949884,950076534,-163173626,1357006473,-1996238687,-11469242,10614390,-66704635,922701828,1586168754,38243308,1358317099]},{"sector":16,"data":[-11485141,2013263478,2144260,1375784122,-26032,1996423168,-498693372,75367979,-227082416,75380479,-1193249025,-256245727,-1706012160,65535,62011135,-1695648001,2379,-16484609,-6620042,-16776961,921175158,74907392,503642808,1354771280,631450,108461824,-16484609,-1930893194,74907392,-16771864,1996424822,1354771204,1577189352,1575324511,1426064578,1048833163,1963197992,74907409,503580344,309328,177642064,-443875328,180829,-2081649835,-11139860,1996424822,-158537724,-1710852353,781,1996484747,28857862,-1310175232,-62486271,-4986794,1443264255,-386107649,-397017061,1996488613,-1070901754,26404944,52927062,-1956773888,79846885,-326413056,1459940483,104374614,99223097,-756481156,83541504,-947650933,-1539407102,91488259,-964428149,-1205957886,239569669,63964675,379651465,239545094,-1593555575,76088486,-1996086623,1996424260,83539974,1996443678,-401698812,512426228,1200293304,17115406,-1264516027,-1593538299,1149830468,102932740,77989419,2114340667,108461857,503642808,-969474224,-401698813,1996423360,83539974,-1070903266,52402768,1084293120,138819845,547438965,-1543096058,-1103596285,1048773646,1946157988,46564099,1023813793,125042690,1946157885,-1591940329,1149830580,108461828,503582392,-401698736,132841531,-1996143455,1592453892,1575324511,1426065090,-326898549,74907402,639130,-163149568,68073552]},{"sector":17,"data":[244338718,-16773400,-224725386,-1962934263,46292453,-1873273344,-326412987,-2082959842,1183648492,-11528458,1996425334,191076870,1996423168,-163148534,-6664170,-2097151745,-443874579,-900899553,1478361094,-1957345904,-661774612,-1928663933,1343682118,-16091393,1687816310,-16777212,1183648886,-11528458,-6683018,-2097151745,-443874579,-900899553,-1957363704,49054700,294531,1586186612,73370376,956703905,460588103,-1207404801,-11534311,1183516278,-2133710072,1347552714,16777114,-15734016,1996425334,374790,-26032,1183383552,108462078,199203408,1721958400,-15930621,922682998,-660995226,-1962934265,-443810234,442973,-1947432107,1178141766,-1962574586,65734214,-1962654069,79846885,-326413056,956581515,92145222,-351910261,71731971,-1034033781,1478361092,-1957345904,-661774612,1464003715,242649942,-1996249951,681704006,-1002010362,-1996249439,1419888198,-196703994,707806346,-62486044,-410912629,1183514632,16792844,1625883509,-385649150,20775778,1025733632,57999367,1023481321,57999368,1023500265,57999375,1023500009,57999495,-385762327,1589904234,1200301574,-330921712,205980454,653280905,-1995552885,52883014,1183386183,1979649010,126559779,39291686,-1983887735,1149878870,1078233410,1149878923,809798212,19260458,1178896640,117196534,-1897331851,1962871552,-62458320,-1961593852,103542854,1183384650,-230257684,72091179,-1947318647,100920390]}],[{"sector":1,"data":[1183384650,-297366544,72091139,-336443767,-62458307,-165776383,1946352710,-330921204,70387203,-336574839,-263812315,70387243,-336836983,-62458343,-1962314750,100920902,-924122042,737298059,-1996208634,-11080122,1996483702,-263812114,1357661739,737298059,726724166,-6664000,-1962934017,-1532757434,-1002009853,-1962530653,-1499216314,-196703485,721835171,12708288,112726,1182565200,-1962380288,1143677508,-1593578722,243990946,-506395522,-1054088751,1182565200,-1593478144,116064672,723797131,243998788,-506395520,-1054088751,-26032,-397017088,-397016503,-1705638554,65535,-6647317,-352321281,172395402,199902857,1443788224,382355085,-26032,1183383552,1979649002,384325133,1996445186,-119150358,1149904363,635710002,1183383556,843874494,1996445188,1354771434,16777114,-1099005184,-2147191552,-2080689564,1946159742,-13375229,-901345962,-6664170,-385875713,28901157,-372102400,1187447228,200290550,187790847,-165120513,1946235460,-6662650,1442840831,1016730,-1494723072,1996445185,108461832,-1873756117,-189667314,-939595543,-268372410,50873995,280045636,1317789907,642515718,1183432971,138856198,-1705639936,3841,18004048,-163148976,-11533300,1996425334,112368134,-1427570688,172395518,1023418669,58064903,67017961,-13724736,-955310425,395846,1187455467,-352319734,172410650,334168066,51005127,-955454720,2630,1187448299,1442840842]},{"sector":2,"data":[16777114,61252352,106182281,-1555676021,1996424100,1354771210,-369663000,249953869,249433836,250810071,251268851,988352250,1078234110,13822361,725898379,1111788480,-1962883095,1149831750,105286464,-351648119,138840844,-1958460279,1149830726,1081409346,-398166785,-11469690,-1729609100,1078233596,10741846,687747,-286719115,-1209510147,-6662653,1442840831,16777114,-364476160,28856406,-370651136,-129594885,-387287297,-11077143,1996483190,-95295240,-387287297,-11077159,-1070863754,-70850480,-361300138,16777114,-32839424,1963065661,-24647421,1963066173,-25761533,1963196477,-10229501,1963196733,-11933437,1963196989,-10360573,1963197245,-12523261,209125206,-16091393,1996425334,196188678,1599995904,-1962742397,1297948645,1426066122,-326898549,1988843016,1183667716,-1706027272,65535,245668438,-1499267072,-129594109,1962889238,1114963776,-12290817,-1326954892,-443851024,180829,1167087646,518818645,1448597646,1443395211,1097114,1958742784,108954419,1443984642,1342439864,1347469355,283023952,518717440,687235,2122520180,91488262,-352320581,-774165758,175934435,48955787,1600045099,-1962742397,1297948645,503317706,1430622296,-1910575989,1988843224,209125128,1119130,1975520000,-339727612,176063276,-15371006,12061814,-1957277692,1385760326,288266832,300613632,-15960321,-1070921098,-11119024,-337115530,-310157824,535137026,147475805]},{"sector":3,"data":[-1873273344,-326412987,-2082959842,-11138836,-1768288138,184549393,-2091813696,1963069054,276234023,1342440376,1347469355,297376336,1183383552,-94991880,638213828,1589905289,650283782,887818121,-1961861493,-167048585,2122521204,57933838,-1006188925,1149962846,126428674,-1962516796,-672463804,638213828,1991,637951684,1991,49120094,1562371467,838221,1167087646,518818645,1996478606,-26098,-1073020928,2122528628,460653068,-1207011585,-11533310,1451951734,-1950340344,1347553862,965274,-15275264,1996426870,112652,175570768,-16222465,199755382,49120000,1562371467,707149,-2081649835,1448547564,-955353461,61510,707937418,-330921500,818819,539297140,-1962480896,270920774,1958742784,112645,-1070923029,-2081012087,1962936958,1975520007,17623299,687747,1183519092,105265416,28837236,721939200,-1962677312,1183446598,209617902,-2146536448,199176804,-2146143040,-350211508,845447182,-293698577,-2147191808,-2096090548,1946218110,175934279,141950731,-26026,-125108224,818819,-947715212,-1996125434,2122575942,242483210,-1995946357,1183515205,71665926,1183516139,-16414456,41287477,1358520040,-402360833,92928318,294531,1156978292,192225331,271795446,28837236,721611520,71731648,871777931,695529030,707937418,-330921500,-1962930139,-511579058,-1056243680,1962871669,-26102,1149829120,-6662646,-352321281,-293698768]},{"sector":4,"data":[-2094369792,1946158206,776243748,1183441962,209617900,621114368,116064258,636241547,-1073020924,-11139212,2145913974,-263812106,-443850914,836189,-1578333355,1178140770,-1959168764,2139292766,91488326,-352071519,95723779,75370123,-1056710191,73304912,4620163,-1264515724,-1593578747,243991504,-506395520,-1705983741,65535,-1034033781,1478361090,-1957345904,-661774612,-1593250685,1178140778,-385649656,-559873831,-536474875,-385649403,113705165,1576,16777114,-532774656,1963233029,-566329044,1963231493,108954404,-15830016,922683510,28837710,-1326952448,142016494,-1192285976,-11534332,-352081866,-532774541,1963156229,-566328978,1963154693,1346274150,208928775,-1207404801,-1705967618,65535,355226,-96040704,-239991,1183647862,-1706027270,65535,503582392,-59310256,-1694861569,1530,200820361,-16354112,-1360525194,108954614,-15830016,922683510,28837710,887640064,571630,-126419120,-2081283096,414782,922683764,-728103340,721420301,98608064,-2096767325,-443874579,-900899553,3145732,260636675,939065345,237043715,1275133953,334561285,27984127,331153413,28180735,342294531,-2054815743,183828483,940179457,187564035,1686765569,3735555,1376452609,94896133,20316415,241369091,781254657,274792451,1620180993,239009795,445841409,8388611,1695875073,231079939,-2087387135,264306691,941228033,233963523,429522945]},{"sector":5,"data":[268828675,1738211329,55508995,1167851521,336134147,849149953,334036994,27984127,271056899,1629552641,330629122,28180735,188416003,1721958401,95420419,1428619265,95092738,20316415,197263363,464257025,335806467,1437990913,317587715,458759,326631427,-2068316159,309460995,163446785,276430851,624885761,88604675,675282945,74842115,1698693121,271450115,482672641,224854019,541720577,318177283,1288437761,241762307,-2058289151,337379331,1624440833,140509443,1900552,192086019,1717174273,138674435,2293768,338427907,1692270593,185270275,954269697,157351939,1172635649,198050051,2949128,232456195,-2072903679,6946819,1634926593,330104835,846397441,1167087646,518818645,-326903666,209617158,2138374658,16777114,637978368,-1962934266,1183385670,1812892668,-772157180,-1950274567,1195052638,-15303640,1996424822,-401698808,726664361,244338880,-352285464,-401698746,-1073020852,922682997,-404028124,86253195,-2020875311,1183384914,108462074,1342732031,16777114,6463744,1962559033,-92864746,1342179000,1342177720,-11485141,-979699082,-2097152000,-443874579,-900899553,1478361098,-1957345904,-661774612,1443163267,86253195,-1215568943,-167049902,-1202318988,726663187,1347440832,104602,721611520,-310157632,535137026,516640093,1430622296,-1910575989,142016472,-1207535873,-397410303,-310181877,535137026,80366941,-326413056,1460071555]},{"sector":6,"data":[89309014,425603,1988822388,-1591547130,-523172572,1183434499,-1948742662,509751,140413696,964944849,-1593412608,1183384868,140413704,831120337,29137494,-11141120,-18347914,1149982210,642001694,541363024,1344816171,16777114,642026752,1150111774,-1706025442,65535,112726,30513744,2122514432,611581958,374870,112720,608471888,723534891,735087570,575441856,-1960948693,-1706011967,65535,294531,727058804,244338880,1577446888,1575324511,1426065090,-1957237621,-1705638794,65535,-1993980789,1149971012,742689064,1354771286,16777114,-443851264,180829,1167087646,518818645,-326903666,-1957275844,1187450486,-1962934024,4000838,-385649406,58065030,1023544297,1483997199,1946162237,2047258,-11132044,1996426358,142016266,-1710852353,65535,-16642071,-1070921098,-6664112,-352321281,641631197,393478150,103167743,1342309048,-1705983957,65535,244338770,-1694650904,748,190362,30664960,-800682666,-6664170,-16776961,-2132225930,1183667717,-1706027312,65535,-956189463,129094,-1559607669,1996424494,108461832,1172835984,200837895,-385649153,1173750165,359925811,16285315,-2031549579,1095681,-26032,2062090240,205949697,1946288445,33766763,1793655668,28858113,848973824,184549379,-385649216,244318553,201179112,-385649216,1369047373,-1711276029,830,67782390,-1873341836,101181454,112727]},{"sector":7,"data":[-26032,116064256,-401698729,1043924595,57999458,1459690729,1342179000,1342177720,1464909867,36762,17295616,112727,-26032,-1073020928,-152501387,-26112,-396951552,-1202192787,-1873805311,71886862,5530,-26112,109969408,-1591344362,1183406757,403082950,103491075,1157847721,1779338022,66703620,-934901311,51775118,1520935206,-1899739511,637736966,1521157675,-1960295165,-788239346,-1983839239,-759628730,-1957683709,1177274438,1183535302,-1002034180,-26032,1996423168,-59310136,16777114,73239296,-1995028597,-1072956858,748750453,-96040698,-362753,-1711023562,65535,16777114,641632512,79189510,-1202696192,-4521985,-11513089,1996426358,-61437174,1183563819,-1706011960,65535,19736043,539906,-102169738,-1816132611,564657966,-2080211196,2130870018,2130842114,302153474,721583874,1600035264,-1962742397,1297948645,1426066122,-326898549,-1957275896,2123040374,-129594108,-396931050,1755381824,1812343556,-1037330172,1174665425,541362682,721708705,-1727763962,-120470997,-1980217853,1149967940,1812333344,608471300,52315275,-1996199418,1600004676,-1034033781,-1957363708,1988843244,-1715041532,86642315,788003319,243991656,-936704692,637951684,-1962520695,244029894,-101251798,787989131,-1993997210,1200301575,1745234694,1200170500,126559746,73795075,71797030,1575324510,503318210,1430622296,-1910575989,82609112,1988843095,108956424]},{"sector":8,"data":[-244025,874417151,545208582,-947181441,-1725937877,73928331,-930350601,721758369,787957953,-930413270,-1952856437,-150706658,-1983380485,1183579214,-2090901764,-443874579,-900899553,1478361092,-1957345904,-661774612,85985023,956640417,2114265094,671547154,86679813,86771201,73938687,-2097149464,-443874579,-884122337,1458342741,-1962641781,688272414,1999186039,-137983200,-6663976,-956301057,17114630,-26112,-1956773888,46292453,-1873273344,-326412987,-2082959842,1448545004,86783627,721758881,537853936,86024453,1417015355,-1996149599,915012678,-13957844,-544525333,-1081875503,1962935634,956754727,208993398,-773944506,1388282851,-277610491,1962702393,1187416854,1459954851,-1873756117,-87037938,742275399,-3703035,-1593497586,-654900120,-10688432,-310157474,535137026,516640093,1430622296,-1910575989,216826840,876019542,129997318,-259325952,104085247,385107597,-26032,1183514624,1745224694,-96040700,-196702890,922701846,161088446,1442840583,512922,-310157824,535137026,516640093,1430622296,-1910575989,82609112,641108822,637978373,-1962934267,-310157626,535137026,516640093,1430622296,-1910575989,86548952,73936631,-1962742397,1297948645,-326412853,1460333699,175541078,-1928823157,1343682118,-402229505,512490956,1200293428,-129619680,1476150825,385238669,-26032,-1073020928,-1545010315,1183667968,-162523402,1950363204,75399947,-1593477888]},{"sector":9,"data":[65734198,1342422689,16777114,75399936,1467839744,16777114,1962891008,678756134,493210,1962891008,544538398,-14519041,-6675340,-1962934017,1200292956,-28931818,259309579,1354771287,-25755824,16777114,1444276992,-26025,727056384,-1202696000,-1706033151,65535,-2144451338,1686113396,512458542,1333790260,-1957199826,-16370658,2013208183,-26080,-1705574400,65535,-443850914,574045,1167087646,518818645,-326903666,-1957275896,-13957002,1392002759,-1960056059,926546014,922689397,-6683084,-1996488449,1347877958,108461911,-71960,-6620042,-352321281,1183008523,1043923704,-813759188,-310157474,535137026,80366941,-326413056,1459940483,-1074386090,367723858,1946172803,-13238516,727057526,-1528278848,-947697922,741751042,1592098565,1575324511,503317186,1430622296,-1910575989,149717976,1988843095,243041032,-15895039,-6680972,-956301057,3652,-768147626,1354771205,16777114,944015872,-956807544,-2130757564,-2145373364,-1971376540,-466994876,-1577433463,1178141996,-1961329158,-472778146,89309059,-15960832,-11077002,1827145334,-1337725960,-126945778,503568523,126551260,73795075,244029768,-101251994,737822345,742275583,-1591771643,1178141996,-955943430,64070,-772120949,1388282851,-1217134587,1207584511,1600052203,-1962742397,1297948645,503317706,1430622296,-1910575989,1988843224,28857862,244338688,1593781480,-1962742397,1297948645]},{"sector":10,"data":[503317194,1430622296,-1910575989,82609112,1988843095,-1305069306,-1710918395,596,-768147626,-26107,1686110208,-1202266317,-1873805311,-27203570,-14781185,244326516,-1946441496,960792824,-472785013,89294791,1599995904,-1962742397,1297948645,503317194,1430622296,-1910575989,1988843224,-773944570,1384614883,-310157819,535137026,46812509,-1873273344,-326412987,-2082959842,1448543980,1443264139,1459100904,1726484112,81568255,737953417,-1961890817,1183054942,1149964028,71776550,-947189377,470170439,1458076677,1358906765,1342177720,16777114,-2090902016,-443874579,-900899553,1478361090,-1957345904,-661774612,1460202627,-1946211498,-1472841225,-9014012,512427638,1200293428,138806056,-401698736,1183447781,-49672,-661973644,86253193,-1215568943,1048577362,2097152146,972983042,1946530366,1480491840,175374342,597146,39426560,-16056320,-1873400972,3467278,106444543,1342178488,16777114,1479999232,-26106,882966528,1778792710,1342600192,16777114,1590070016,49120095,1562371467,313933,1167087646,518818645,-326903666,1988843088,1183667718,-397404482,1183383877,876019638,-26106,1183383552,1183666354,-11528514,-6637962,-1996488449,1451866694,-1300824132,420250,-1169782016,-1996486651,1183561798,-1270445636,-1715976565,-120470997,723405963,73834952,-775804007,-1983380488,512471118,-1047853516,2115913529,508005126,-1951381879,1174646854,874417080]},{"sector":11,"data":[575093510,1200294270,-1203360990,-1196407159,-768901116,-1070903214,-2001055664,-11513208,1150005366,-1270469856,1342178349,-1950845185,50705478,-1070903296,922701904,1347421088,16777114,106472192,74760203,95565449,49120094,1562371467,182861,1167087646,518818645,-326903666,205949798,1962938173,242679623,379209357,40344144,922681344,1183647154,-397404484,1183383629,-1703477318,1342178232,1342177720,381437581,-1166606512,16777114,242679552,379209357,41458256,28835840,350984448,-15829249,1996426358,142016266,-1710852353,544,-1962742397,1297948645,1426066122,-326898549,142016258,-16353537,1069024374,-6664192,-1996488449,-1072955834,1996433525,74907398,705039008,-1442446364,-1407808764,-1706012156,65535,-16353537,-6683530,-1996488449,1183579718,1575324670,872416962,-822082816,2030043394,-1711275217,-117440246,1057030967,1157629960,-1308622080,2130706690,1895826275,-1862205696,1442841345,-2130706173,-1895824585,-1811874043,201392897,1476396812,-1711275264,-1996488443,1677722424,-1979711231,-218103196,-1778319613,973079297,167772422,385942328,1509951244,1426064128,-1946156799,-1375730915,-1828716277,-1308622054,352321795,2046821221,-1711275765,855704345,1644169223,-939523328,-1694498549,1207960423,-1660944126,-503250126,1744832518,1241514752,553648390,637535073,-1392508663,553714449,1962936327,1090519808,838861067,-922746110,838861065,-603978995,922747139]},{"sector":12,"data":[1677722423,-1207959289,352387860,-2130704377,-1946090752,-2113927161,-1426062592,-1107295990,620757842,1056964867,1442841381,-1090518774,134218548,1073742084,33555240,1392574211,1291846401,1124073738,1291846414,-922746617,788595509,-1811937278,1660945152,1509949702,1694499686,1509949706,973079346,1526726913,-352320712,-603979509,-1191181471,-520093430,1358955320,1677721864,-1593834735,-452984565,1845494610,1761607937,-520092869,1778385155,822084407,-335544054,1442841443,1828716807,-268434149,-1778319613,-1124072703,1879048451,905970484,1929380106,50,0,1167087646,518818645,-326903666,503760648,-1207959296,-397410302,-1073020830,28837236,721611520,-96040512,5302352,16416387,113709173,30,5899975,-1070923776,-6672405,-402652929,512426257,2013202000,-26108,2122514432,141885448,-1996077429,99350598,33048263,-126419200,16777114,49120000,1562371467,313933,-1192457387,-4521985,-1957670145,1385759814,-26032,-443875328,180829,1167087646,518818645,-326903666,1988843014,173968134,956322977,91556935,-352321096,175570723,1963130499,1161221,381158379,727076864,-1706012480,65535,-2080618871,-663420162,49120094,1562371467,445005,1167087646,518818645,-326903666,-6662652,-1107296001,132841858,-956109181,-2130706428,1962967806,-18189,1392508858,8566864,-6664162,-1912602369,-1610412026,-2145124204,-1574535116,109991891]},{"sector":13,"data":[-1818229998,880813056,-727570816,2084471639,225705988,-1157627976,1347616767,16777114,-310157824,535137026,1439386973,-326898549,2084471570,91488260,16777114,-26112,-6684672,-1912602369,637735942,1473591039,384714381,1354771280,-18352,112720,-26032,-1073020928,-443818635,1478411101,-1957345904,-661774612,17306,-5511168,105913995,-1710983169,82,-1962742397,1297948645,-1873273141,-326412987,-2082959842,512427244,2013202000,1354771204,1347440720,-26032,244318208,738131432,1347440832,-26032,-6684672,-2097151745,-443874579,-884122337,196629,65961,16988033,65783,16973828,65907,16973829,131355,16973826,131438,196611,65678,17007116,196941,16973826,196969,327683,16711808,16974164,524728,16973945,458861,16973826,524770,131194,65864,220098,65744,206143,66034,153411,16711811,131412,65809,350170,65861,220098,66039,210794,65938,351982,65806,22490,1167087646,518818645,-326903666,-950642922,64070,-1124710713,-297351421,-164953122,1589932779,105284358,126559748,39291686,-1980742007,1589965398,172393226,1066083842,-1962933832,165729231,-8127930,-1959887606,-947128738,-670834479,1183385483,1958743018,-6664186,-16776961,1996485238,-25872,1586167808,-774927370,-1982266399,-295793913]},{"sector":14,"data":[-523122805,-670834479,-1947187573,126480982,1174558601,2131654201,-18295,1423440,1354771280,-6664112,-150994689,18938438,95947892,-1070903296,112720,1190596331,1946344954,374797,1354771280,15440464,1190526976,661914362,29245059,-1205832448,726663170,28856512,-6664192,-2097151745,334910,314050933,-6664187,1577058559,49120095,1562371467,84593229,1845560064,1107298304,1661010688,1157629952,-83885312,1241579264,-1493171455,1056964864,-838859995,-486539008,24,0,0,1167087646,518818645,113760398,65616,29245059,-2093255424,334910,-6679436,-402652929,-1070923721,473366352,539748357,314051051,244338693,-2096682008,1946158718,-26107,1048772608,1946158364,-26107,-310181888,535137026,46812509,-326413056,1459940483,-600405162,-335598844,-964471288,911374,473839943,1592950533,1575324511,-326412861,74877782,722236671,922702016,413205780,335948549,-396996603,-1956773881,46292453,-326413056,1444605059,1183432747,-364475920,-1946925431,384502902,556163,1191119732,138709994,-336574975,-196673789,1983460491,-1578797814,-120519552,-1947318647,1174664262,-230258198,-134330743,-1962646482,-936704434,200822409,-1593475383,166397028,-1727641973,-135115125,-96040455,15222471,-263812352,2130200121,112645,-1070923029,199640713,-2095024960,1946219646,-196703462,73674487,1183565963,734079750,-1952845754]},{"sector":15,"data":[-101190578,-1947711863,1183385670,209095676,1442877417,1347469355,160410,-62485760,-15186807,1098183246,16285315,2088971646,527695880,15105667,1149961588,-14685432,1996425332,-260636680,16777114,1678115584,-1962153212,1174661190,-1962677254,1183447622,407145452,-336837117,138840838,-1996077565,1183521860,-62520852,1224623755,1962034747,-297366778,-2095561687,1946219134,75538697,32392747,1150098500,1996443670,12380164,1983460491,-385649654,-1956708503,180510181,-326413056,-11485141,-16442314,-1593503178,103482646,-397409006,-443875324,-1957313699,183272428,1988843095,138840838,-1995815381,-1072957882,1183542900,1317771524,-1980106762,1183578182,-1983511804,247004230,175044352,81528323,-335657335,-27358399,2122528649,91554038,-335788405,-129594619,-259275261,-1979818357,2139817079,1461185292,505300365,-26032,1166868480,1996443670,1894654,-16040565,1183049077,1183518462,-162594826,-1250574325,-443850914,574045,-2081649835,1448542956,-1962641781,-788234690,3965951,-1070922635,-947191061,103482371,1586168958,-1593341690,1144587542,-1593477884,48956542,1141098379,106859268,1577338761,1575324511,1426064578,-326898549,-1957275900,189662326,721583606,75402230,85737019,1049298300,-11598564,1465255030,-397361109,1599995960,-1034033781,-1957363708,82609132,1988843095,1962281732,2123058689,1086819076,85722683,-12123788,1465255030,-402229505,1599995912]},{"sector":16,"data":[-1034033781,-1957363708,116163564,1988843095,142510858,254208087,-113015,1183385206,253159674,-1980086741,-1952842682,-819263922,1006237505,2097439238,85106968,738084489,85762559,105285960,721753761,1183448646,1183537148,-11517946,1996488310,-26285828,294531,1586169716,778534916,1183536879,-397393914,1448549541,1578946280,1575324511,1426065602,1448602763,-1962248565,-16054146,1586169461,209685260,1963065219,209125131,68131414,-125108224,1460434687,1996436735,74907398,1577073384,1575324511,1426066114,-326898549,-1957275902,1996424822,1436177928,-1962934268,1979649016,-95486,1448544374,-11485141,149423222,-1956684288,113401317,-326413056,1460333699,209095510,33310407,176065280,1191118315,960334844,-160102274,175570774,16777114,1475906304,-1995548952,2122577478,225705992,-1962385781,1183392839,-348156934,105155336,737822345,-96039937,-1980348885,-1952842170,-101188530,73664059,1149965949,38570758,737562249,-28931647,-1995684725,-13956538,1460303615,-624897,-396951946,2122578927,125042694,-2147066229,-2081477017,1946158206,1996445191,458024970,1577731723,1575324511,503319234,1430622296,-1910575989,183272408,1988843095,108956424,404378,944015872,1022903944,-1609861825,-922876644,-1996994936,246429764,66612982,-1996170234,1352334406,-1996488698,2122381894,175898872,-1728559478,85722683,2122343292,175964408,-1963440386,-654903226,1183452651]},{"sector":17,"data":[104569080,108791068,-2012930912,1183512646,944015608,-369750351,66471561,-1996170234,1183513670,-397371144,-1957291063,100922950,726664412,-1751494464,1442840581,503648952,94542416,-1974075392,1352202310,-335706136,1996445243,-6662148,1442840831,519849611,22649424,2122514432,326369530,-2131054872,737095268,922702016,-1628961508,-15865062,1465318518,112726,-34084784,271469696,-26026,2122514432,91488506,17050,118331904,1599995904,-1962742397,1297948645,503317706,1430622296,-1910575989,216826840,1988843095,-1103199480,427032577,29242937,-51838092,-129579264,-6684671,687866111,-351987706,-129579259,530186240,-1962934272,1149916732,-196704200,-369750351,81528323,1358710409,16777114,-1106852096,-1711276031,65535,-1980217845,1586230854,176129020,-1972800256,1352201286,-2095427864,334910,113714037,65552,1342509752,-437776752,-125926656,-1704233984,65535,1342177976,-347029461,-159481065,-400133120,-1125581997,-125926407,-1206881280,1448083459,1342177720,16777114,-1975784704,1352201286,-350650136,1183471153,-397371148,652999705,16154243,-1998056076,-125926407,734819584,922702016,1994917148,-15996135,-1202193290,-397410303,2122579213,343212038,-125926570,-1207601920,48955393,-1705983957,65535,20122,-2090902016,-443874579,-900899553,1478361092,-1957345904,-661774612,1460071555,108432214,29245059,17069312,-1593501642,1183384796]}],[{"sector":1,"data":[-335598596,-60912885,251414147,1191606017,705028768,2009545700,-2090901780,-443874579,-900899553,1478361090,-1957345904,-661774612,1459940483,108432214,16777114,1475906304,16777114,922703616,922682642,922682644,922682646,-6683368,1459618047,-1705983957,65535,-1103691945,-26109,-11075584,41221940,721699979,1149980676,38021894,2209872,1375793338,-26032,-1705574400,65535,-26025,1599995904,-1962742397,1297948645,503317194,1430622296,-1910575989,82609112,141986646,-1103199402,91488257,-352320328,178179,-26032,-241565696,-2097151996,114238,26877557,16777225,-1962600442,1554187846,-1103722237,150641153,-397017088,132841498,108461910,-1711234840,1506,49120094,1562371467,313933,-2081649835,-1957295892,1589118070,-1924129277,1344151108,16777114,1342621440,-1929379840,1343682630,721766049,1342471686,88618751,50678433,1342471686,50678945,1342472198,16777114,1183667712,-1706027272,2338,56376963,1445688320,-1705983957,65535,85737091,721843456,1994936512,922703384,-1070922532,91724368,-1705639936,1490,-1705638165,2344,1575324510,1426064066,-326898549,1988843010,1547600646,276037635,1354771286,16777114,153983488,1340801024,400282,403056896,-1106852091,-2097151999,20542,1156056436,1443621879,503537336,92445264,-1705639936,65535,428186,473858816,158662661,1342509752,635965072]},{"sector":2,"data":[243966,28857936,-1315287040,1577058310,-1034033781,-1957363708,351044588,1988843095,-330920696,1150111766,-1706025442,2662,294531,2122516853,57999366,-1342126615,946664974,81528323,-1946401143,1143678020,105251616,-1996208637,2122516548,1131675652,17057419,1149969476,-2147079388,-28931836,1166752907,608447268,1006126729,2114216966,-2147089650,-196703996,1183384971,-1592857606,1177224472,-196703746,16402119,1996445440,-1957303302,1143539270,-59310304,65182294,-125108224,723534987,1183391813,1678130168,-1961525756,1183391813,-129594370,75499011,-1980479863,485227134,-1996155743,1150025286,-28955872,75499011,-1946925431,1200356446,-96040692,1459255039,-100609,1996485750,-161355524,507809110,-1667608546,-1962934264,1149837380,608471832,-1927527287,1344151108,384583309,140876368,1183514624,-1956684038,113401317,-326413056,1460595843,207522646,723797899,104538183,310183012,556675,-1310129292,176063232,-385649664,1586167976,608668428,52447019,1174603846,1678129930,-385647356,1200291984,507980578,50611715,104531526,2122056802,822426,209125120,-16353537,-169343882,209125126,-16091393,1911031926,-62486018,-141820117,1946580537,108411149,-1983969923,-1107039456,2122522715,242483204,294531,1539245437,-1107039456,-167042935,922684532,922682686,-963967562,1996476671,175570700,-16222465,501808246,1962871552,1043791628,-1237909755,-3699963]},{"sector":3,"data":[138451664,1599995904,-1034033781,-1957363702,82609132,1988843095,-166809590,-125093780,81542659,185091723,745801286,556675,2122516092,125698054,-100907321,-955913441,534314054,556675,1996425076,-348848380,1996445188,-61407484,722236927,937971904,-1956684268,146955749,-1873273344,-326412987,-2082959842,1448543980,-16353653,1996425846,1354771208,71166038,-15992693,-167041163,-1628896395,860157440,-385649376,1962868885,544538398,16777114,102277888,-6662576,-352321281,860129918,539354154,-96040704,326418443,1946288003,-605530616,1958742787,-6662558,-1962934017,81351,71117428,-2095680512,1946221182,922703422,922682880,-6683164,-352321281,922703418,1996424676,-25862,736821248,-2012866400,2122529092,141820154,-26026,401276928,1354771286,587162,1443687168,100677375,98842367,1577061864,49120095,1562371467,445005,-2081649835,1448549612,-1710721397,2063,-2009578358,246544966,-125048330,81542659,1183384715,964860,50753271,-1996170234,1187511878,-2097151756,2097153662,-196688080,1183514625,1222178566,-1207548279,1861681166,-603585786,-28931836,-1728428406,2080785979,247956230,-375042,1189611126,-1705552364,1605,-25755818,-1710983425,2246,-2012854646,2122528836,762577140,687491,-588765324,-25755660,1475569384,-2131533080,737095268,1996443840,321906694,-16353537,-402318282,1609110355,175997697,-385649664]},{"sector":4,"data":[92995749,-1996208853,1183512134,1183422714,1692946674,-230257901,2114340409,-26311929,105840398,16023171,1183475060,1183422714,-263812626,-1996077429,1178202694,1074953966,-1947187575,1183444550,-163148814,1183439095,-260636682,-1192069377,-11468801,-18286986,1150113281,-1706025442,3715,-402229505,1586169036,-16283138,-1108867466,-27358460,-16496759,1150092918,2095599638,-402003199,1996485663,-223745794,-282172288,-1728428406,308013136,-1979665943,999881286,829687366,1459517183,721712895,-397389632,1183446469,1996445678,1354771452,-1980369688,1996483654,-294191106,1460798952,-387156225,-2115431938,608471808,723534891,-1996193786,1996482630,75622404,2116043835,-62485733,-1981528439,1586226758,-1995994364,1183574598,-1982269464,250341446,1183384715,-62485532,-1981135223,1996482118,-361299996,-11485141,1055451254,778338304,1996445679,295758054,507809110,-476426210,-16777202,686294134,407144708,602420479,474253572,271469696,147626582,1117388800,1577058315,1575324511,1426065090,-326898549,-1957275896,2123041398,-1924601082,1343682630,505300109,158112336,1183645696,1464866552,-1710983425,4034,-129594026,1268404246,-2097151990,1946158206,1150113288,535318550,1962871552,944015884,1150111896,1156075542,959744768,-1284175754,-443850914,574045,-2081649835,-1957297428,-2136931210,-1980182268,2089025094,92210178,148679,85500160,956302381,108791364,-1996154719]},{"sector":5,"data":[-1956772284,79846885,-326413056,1459809411,74877782,-150991176,-125106578,81542659,425603,2124482932,66638084,-1962743035,2114333445,-1593538300,961021212,225707590,-1962654325,-788234738,-339672071,71666439,75367939,1577337993,1575324511,1426064578,-326898549,-1957275902,246942326,-1947273472,-599915528,-1960711420,-11526457,-1070922634,-26032,-544538624,-15808637,-1070920585,108461904,-19404720,960939659,-680196026,-443850914,574045,1458342741,1443133067,1342182328,1347469355,-26032,-1956773888,46292453,-326413056,1048794966,1946157502,-373279995,1183515021,7906058,-1962391925,8037336,184964747,-1979157038,-1979422186,-788239306,404655082,2093169413,-2134496721,-1019543332,922690428,922681464,-442892166,-1560281077,-1706031592,65535,57982987,-1207878167,988348417,8037121,2050424658,2016870144,-1547685120,1347421696,16777114,-459056640,200313605,-385649216,-1070399219,-1556593526,2057373184,718834432,14450886,2099266619,100704276,1342323176,166632022,-919470080,-351935325,33665361,14123230,2099534907,-1581121979,-661979016,-595541462,507788032,10552701,-32314618,46369729,13926594,2082620475,100704524,-654884800,-351928157,-155058667,1946694468,-1547685112,-1628895772,309248,62391275,10217472,58048523,-1962898199,-16055170,-2098658443,860222976,-352095200,-109014918,991657218,174945527,185234889,990147830,-345934795]},{"sector":6,"data":[71732058,1483998267,-109030933,-1958579196,1837761662,-389707208,-661978742,973464224,1946491910,172460603,460703998,990150283,-1976732418,-980797348,1963129216,-20906492,986250944,857306307,98870208,-352320840,74857234,79170164,-1207375104,65732611,1593835704,1575324510,1342179522,2080569728,83460123,-492824972,470170117,185431301,-167480065,1478505285,-1023409992,-1957313704,-1957210388,-1070397322,-1959246710,17098968,881717387,-16483187,-1959395532,-1073019322,69804660,-1070396277,-1974415222,734104563,104591940,930874466,-745879413,-10958082,736883316,184829579,22181056,-1959395579,721753614,-19690995,473336514,239438597,104531243,125568098,-209008501,-1962752384,990128901,2097439238,93280263,535495823,1396921183,-1974455041,1042188762,-561360123,95821449,-397322413,-1578569820,1599625455,1575324510,-1962932542,-768471971,28443371,-1947432107,-930479034,-1962911256,1959922392,-163083508,326486282,-351989087,239569678,238731774,58000668,-1962600799,46292453,29270272,32241859,-326412807,1912888971,197145359,-1961397029,103490631,250283136,413260555,-1962445819,100868167,-443874176,180829,-166808239,-603585563,516118788,1430622296,-1910575989,82609112,276204374,16777114,108954368,1444180992,-15829249,1996426358,142016266,1760038544,-161813760,1958753092,1996445202,209125134,-16091393,199755894,-163386612,1948267332,641108238]},{"sector":7,"data":[28857862,-6664192,-1962934017,1200292956,-62486250,108380171,-1996084063,1996487750,-633929732,-26109,-11141120,-4714890,-17665,1021857874,-310157815,535137026,214584669,-1873273344,-326412987,1457032734,-1961986421,-2036136378,-1547687165,-2069691528,59417347,1443073187,-167430680,1950364484,58505236,1149980702,2491704,-1046851554,-352321514,58505241,28856350,-1588572160,1346897174,1208293537,143759952,1156972544,175472691,503545016,-26032,113704960,878,59246279,922681347,-6683152,1442840831,-1207142657,-4521985,-397389057,-2090989405,-443874579,-900899553,1478361098,-1957345904,-661774612,1461120131,205949782,1946222653,16858408,-1461124235,17054979,87890804,-385649407,3998619,-385649406,37552535,-385649406,-1997995633,172395267,1946160445,-385649139,54329700,-385649664,1996424051,58386446,16777114,59417344,59512457,-91492213,755648139,1183383589,2109737972,24635651,2113930045,24111363,32786166,1187448692,-352320788,-330905851,1183514625,-2012863508,-330941693,-1243020428,1845937920,-2097150205,230974,113713012,902,-1961992565,1191387719,-1543974626,1200292746,541524772,-1935410991,-196676093,-1592495103,1183384458,241077238,52578187,-120512953,-16545117,1996426870,89647114,59389579,59522699,837568139,-167540730,1946285126,-160003286,49039047,-193035520,957251073,2114159166,-2079930537,-335544573]},{"sector":8,"data":[2118007119,-951485181,17007622,-951981312,126022,32800387,909708926,813564800,58197703,686555135,58471993,113713789,66424,1724979947,-195130380,50235274,-523368,1586230342,-24671500,-268199934,-166830453,1975530311,1882652460,1949761283,-1181067773,1342177301,1425306,-1012992,-16551370,1459844662,16777114,-6664192,-1962934017,-1705552136,65535,456999403,-385649408,624819868,-385649920,675086855,-385648896,-51773812,242679553,-1962802200,-768931770,1044117643,74711948,59250313,990279307,1946389046,-2012821754,-1962934269,-947188130,-1994111189,1200356422,-1983436000,1200352838,-1983501538,-963907514,-1994242261,1996486726,175570700,-1996029464,-1072958906,-169278603,2143292160,26863875,58998403,-2096466688,227390,-1997995147,241076993,-1070381066,1048792437,2097611630,24504579,-2076277933,92143619,-336705909,1354771202,58998403,-1962574592,49019974,-2091859925,227390,1183516030,721611760,1048793280,2097152888,-129594619,-1070923029,-205133744,-1207880983,1344144252,84821643,1344143390,969370,-2076278016,108920835,58605193,1048775659,2097152900,-2109830908,2017362691,108920835,58472073,1048775659,2097152888,-2143909628,-2143909117,58499331,1654779947,2112895748,14543107,58867339,721649313,73703928,58587195,-16725271,-2115498378,242679559,58472191,58603263,28858198,-6664192,-385875713,1048772779,2097480558]},{"sector":9,"data":[1845952263,10348803,57556611,-16483065,-2096927226,2113990270,-2079930616,-352321277,-58817780,-955875840,-16546810,-260144129,-955744768,17004550,-2096305408,2113992830,2013710086,-1979711741,-1996256194,-1962702282,1207307870,645251123,58998403,-1593019392,2124612466,58106115,-2096921949,227390,1889602676,58499843,-1560054623,1048773504,1962935172,2017362695,427032579,-401705217,1586167840,860354062,-1207274112,1344144252,1305242,-2090902016,-443874579,-900899553,-1957363702,216826860,74877782,385369741,507809104,-1080405986,-2097151981,230462,1048775285,1962935160,12445955,58998403,-2095746048,230462,-1935603586,-96040701,-1935603989,-28931837,58211971,-1591839744,1183384458,2017362932,92143619,-336050551,59416844,-1577302391,1177093246,125410036,1183383552,1183666422,-1202710792,-1706033148,65535,-1070381834,1048794997,1946157944,-159973552,89143039,502426,-159973632,-755969,-16444362,-1962639818,103545414,-1202715372,1522139209,-1706012160,6349,-624897,1996485750,2117533694,85500164,1358841387,-1174386248,1347551322,510618,-159973632,513690,-443851264,180829,-2081649835,-1957295892,1207305310,57983027,-1979669527,1183332423,-166809094,-603585559,-28931836,2005653643,-62470644,-33166591,881589318,1963226681,-1976267786,-140968890,50660910,-1559948282,1187382130,65733116,-1946401026,1979058996,-62485769,103741336]},{"sector":10,"data":[403606277,-1983370491,-1962707442,1200227422,-62486472,58048522,-1963178242,-140968890,50618926,50663942,-1559986170,480248688,-96065019,1183369470,1975519996,-62456317,-1728297334,73543415,85331595,237750315,243860608,-1956773004,46292453,-1873273344,-326412987,-2082959842,1448543468,-1962117493,2040138366,-1560281068,378078090,1465254796,-1996260888,-1072956346,1586185332,511180558,-1709148161,4175,-955901789,402950,-58817792,-15565312,-16545226,-16544714,244321910,-336481560,241077089,540231670,922703988,-1705834984,3055,-25080597,108265728,17104513,1996439669,1189631758,272039680,-1976107259,1354771203,1419674,-1550168064,-1560281067,-11533430,-16445898,721652790,-342208320,1342177307,1871770,59548416,488020560,1599995904,-1962742397,1297948645,1426066122,-326898549,-1588177130,1183384856,-129593874,-1070903274,922701904,922682640,-627440370,-1929379821,1343682630,59520767,59389695,16777114,1975520000,31189251,59522699,59389579,2129559097,112645,-1070923029,200033929,-1957202752,1207305822,175423539,503694219,-263812864,922692843,922682252,-1070922870,2107265104,-1996488688,-1073019322,2092490869,-1202708989,1344144658,1574810,-263796992,1586168700,71797744,-120518909,-1947056503,1191380551,-1980182270,1183577158,2440452,641552500,-385649408,658309251,1024160768,57999400,-385826327,2122514761,494141676,425603]},{"sector":11,"data":[988349301,-227133183,1988822654,19917298,-1947181429,652805239,73834753,104580611,58590486,50403561,-385587658,2122514705,561250540,425603,48825205,-262239487,74790713,14608718,2096264761,-262239299,-353814645,734432000,184837638,-385647168,908787933,-689372058,-327253248,-2094238720,1946158718,-262239456,1963097913,-1511436540,-193054464,1586170236,41913328,-1962888983,-1427508098,-193033472,973041641,-579539330,103532427,-11533208,-1986335114,-1962934244,9169400,15498883,2122525300,527695878,2146729529,-262239286,721831819,990150662,-1962311993,1043007103,1676346496,-1958220985,1542188670,-1962602847,-788240370,1002515449,961314503,460713598,-1952856437,-150706674,-775844871,-137352200,-775844902,66638328,972162000,125169278,-788240223,-1593578504,-134019992,914954731,1049166730,1996424076,74907398,-1946291992,-1962702282,-1962701762,1346960454,1459123967,1876122,-1499836416,-1560281060,1183515530,-11515650,-1705510282,6701,439589456,-1935474688,-1956684285,79846885,-326413056,1988843095,142510858,1342177720,1936282,-1577090816,-162827264,1948267332,507808549,74059403,-1056704047,74059403,-103679535,-1968979709,874416899,541559558,74188331,1149965291,507773730,-1968965423,608471811,-786414589,59548664,59389695,365468240,-1202323456,-1202716668,-11534329,1996424822,-1070901500,-1706012592,65535,-443850914,574045,-2081649835]},{"sector":12,"data":[1448543468,-1962510709,1187447934,-1996488452,-25035146,326369794,16842369,-8175243,-1995934707,-8127362,-13339365,-1710880714,5119,16777114,1354771200,400661072,-6684672,721420543,-6664000,-2097151745,1946221694,-18427,28837867,721611520,-1956684096,79846885,-1873273344,-326412987,-2082959842,-1957294356,-167048074,-706149515,242679552,-1711206936,6579,-1980348791,-11077546,1676151414,-196703745,125091851,1115537419,-2130661399,1963000062,172395321,-1996479187,-1072956858,54337916,-786661632,1586231910,-24671494,1174509570,-96010248,-1963303285,-1744634233,-637439,1996486262,531077880,2092433408,-1957683709,103544390,-1957690486,103544902,-1706032244,7880,-1544141173,1183515530,59548664,16023171,1586183796,860354062,722039872,-1706012480,8026,-401705217,1996423224,2083979022,2117533443,58761475,58459691,58892624,58590763,112720,389257808,116064256,-401705217,-2090991554,-443874579,-900899553,-1957363702,49054700,1988843095,860157444,-1961266112,2092447868,-1957683709,-654891451,675646288,-1705977609,3800,-443850914,180829,-2081649835,1448543468,-1710983541,6238,738084489,860157695,1445229632,16777114,-488704,-2120548746,-16777209,1979711094,678821670,-13994497,-1751503755,-16777209,2092498550,-1202708989,-1706033148,6256,141885195,-1694599425,2000,-1694599425,6357,-443850914,180829]},{"sector":13,"data":[1475119957,209095510,-167084405,1950364484,944016141,503326213,494836304,2092433408,-1924129277,1344151108,1766810,1676170752,112895,482712144,-8323072,242548897,-1559869813,1183515532,59417348,1149970155,507773730,-1968965423,1149980675,541328164,-1935410991,1452953603,-16777190,-1710886858,7536,309334,505936,-18352,1392508858,1354771280,-1706012592,7472,-443850914,705117,1475119957,108432214,-352026997,278550024,-1962934240,1979136820,-1956684044,79846885,-326413056,1988843095,75401990,208992059,-396937985,-1705574421,2260,-443850914,311901,1458342741,-1962641781,2013202014,-857188852,1962281983,-1070901753,-6231984,1575324510,1426064578,-1070863221,74907472,-16761112,922682486,115868956,1575324416,1426064066,1448602763,-1962510709,367723646,-150991176,64523246,-16458722,-1070920585,-10688432,2096577350,-1956684057,79846885,-326413056,1988843095,75401990,246945003,-1947207936,-602012712,209190660,-397361109,-947126482,2143697743,-1956684059,79846885,-326413056,1460071555,964694,50622199,-1996170234,-125043642,-1961965693,-347732874,-2084074717,1344147143,519849611,964688,560241232,1996423168,-62487556,-18418,1435728,994494091,1963269126,470745044,-1956684283,46292453,-326413056,1443032195,-1962516853,149621879,280202,881539140,-193595893,1575324510,1426064578,-326898549,-1957275898,-1207624650]},{"sector":14,"data":[-285802482,1040447627,1166869724,-28931598,1183523307,-26311682,-1957683698,-1202708793,-1706033138,65535,250577751,1342177720,-1946181912,1178160838,-2655228,-1207624698,1861681166,-603585788,-1202708988,726663182,-6664000,-1207959297,1861681166,66620164,-1962615746,-1202708793,1344144658,2058650,-1956684288,46292453,196671,16718344,197004,16718292,197005,73077,210817,73590,222084,73962,152196,16716811,131603,16716658,197140,67630,145545,16719809,197141,74157,222346,65929,217611,73703,202254,69278,202768,73276,222485,68297,201622,68705,16977304,532239,196706,67594,201242,73160,209565,16715864,197042,73312,220450,72415,217004,68848,201133,68659,199986,70502,16987959,532219,16973953,532268,196738,72269,217660,72327,222269,16712983,196943,69626,206143,73676,206912,16714771,196945,16714838,196946,69032,201540,73457,203973,68674,198342,73354,204874,72263,217676,16716615,197084,73440,16988369,530604,196637,73648,210778,67756,200027,74131,217692,72345,222430,73524,211169,67915,202979,68860]},{"sector":15,"data":[16978276,530569,196653,73504,214501,70401,210794,16713181,328059,16716808,197139,67488,343276,16716655,328212,16719806,197141,16713480,196990,73250,210032,16713755,196994,73091,209523,69283,211572,69806,4983,0,0,0,1167087646,518818645,-326903666,1996445286,242679568,-1207142657,1385758725,-26032,1183383552,1975520176,-373282043,1996424208,-1334378736,16777114,-230258432,-26032,1183383552,-1269397070,-579550709,649223876,-1960441973,1183384151,-61437446,16533239,-1207602160,48955393,1183432747,-25928,1183383552,1183666358,-1706027334,65535,-1699318017,65535,-1984280949,1589947974,1200301746,-1639544571,122129190,653674121,-1995880565,-1960402874,1183386439,1200236280,-1572435955,16533239,-385649216,-1070923521,-1981921655,1190583366,309658106,1946830393,175570701,383534733,-26032,1996423168,-998834274,1342178488,64410,-599392000,-624897,146321014,228216832,16777217,1996480070,-998834272,1342178488,74394,-599391488,-2079095,1996486774,571566,46701136,1174601728,-498693666,383534733,-59310256,-1963297025,-466967994,-401698736,1048774713,1946157502,84844805,512428011,1200293428,-163149536,84179617,1177092100,-163148810,2128758329,-599356140,-1070903274,-163148976,1357006379,105370,84975872]},{"sector":16,"data":[956302381,394190918,383534733,84975952,769672747,726663172,-6664000,-1962934017,1183439942,-565802082,-1946794359,1177280582,-1605989924,736249483,1183440454,-1983894536,-259267514,10649216,1996435060,-1568767984,-1005881857,-1960398242,-768930233,1183517163,-1269396558,1375735045,-26032,1183383552,1975520228,37021955,-1951250805,218477654,-397389312,1183385228,-262764050,-2115481518,-1538881274,1386632841,108456016,-1981135223,1589963862,1065363182,-1962511360,-339571517,-2147305467,1347605035,-5867777,1183556726,-61436934,1391453824,-1636368560,-624897,1996464246,175570936,-1804545,-1070919562,-1298509744,-1962934269,1979059184,29157635,649223876,704923530,-398030364,653156036,91563832,-352321096,-1983894782,-1072961978,1122567029,1413793537,1183514624,1279560132,-1985067381,1183534660,139889414,-1992014711,1153910356,-385875886,1589903645,939468522,-1195084033,-1706033148,734,-996260215,-14226850,1996423799,571566,49584720,1183383552,-362887946,74972966,-1195084033,-1706033148,778,-996129143,-14226850,1996424823,571566,-26032,1183383552,-362887944,172460838,207063846,-1980086647,-1960379306,1183385671,-1933341780,918978,-1980873079,1589964886,126494446,-157661560,1954585158,1086556966,-1985722743,1586144854,-1895880038,637747206,190809994,-301603798,-297367285,-1030457,-15733761,1996484726,85911790,-1985722743,1996465750,-1535705178]},{"sector":17,"data":[-1996156952,1451862086,-260636758,-1149185,1996465782,-59310172,-362753,1996463734,-1602813962,1459123967,-5474561,1379930230,-26032,-1073020928,-1705637259,65535,1760294443,648568516,-467007606,-1030962429,-364476096,-1947445623,1325393990,1958743016,-19470077,15105667,-397007244,1183383701,280516340,1996443649,1354771444,106889040,208977931,5405827,1996424821,3860724,12091011,2088965748,276103250,112726,-26032,-1705639936,65535,-1695385857,65535,-1695385857,65535,-2090940789,-443874579,-900899553,-1957363700,1988843244,-2017962492,-1070903296,-1706012592,1138,309594280,67221590,1354771280,1384120250,93755984,-1705639936,65535,1575324510,1426064066,-326898549,-1957275902,2089485430,1962871554,-336098530,843380238,-166955775,1963471684,187992838,200177142,-1962641930,-1962742841,-1956684090,46292453,-1873273344,-326412987,1457032734,1443395211,16777114,1958742784,41192215,1183517419,876886278,881526388,-227150325,49006219,-2090942421,-443874579,-900899553,1478361092,-1957345904,-661774612,209095510,175570774,-1394078064,200313855,1443656950,-16222465,-6683018,1577058559,-1962742397,1297948645,503318730,1430622296,-1910575989,1988843224,1996445198,-401698804,-259260553,292877835,175570774,-16222465,-6683018,-352321281,1589652226,-1962742397,1297948645,503319242,1430622296,-1910575989,1988843224,1996445200,-401698802]}]],[[{"sector":1,"data":[-259260613,343209483,209125206,-16091393,1996425334,97884678,65732608,1587134507,-1962742397,1297948645,503319754,1430622296,-1910575989,1988843224,1996445194,-401698808,-259260677,292877835,67221590,108461904,1347469355,396698,-310157824,535137026,113921373,-1873273344,-326412987,1457032734,1443395211,-1878624513,-20846578,-166989685,-1202318988,726664192,1347440832,16777114,721611520,-310157632,535137026,80366941,-1873273344,-326412987,-2082959842,-1957294356,1183647862,-230258186,-2081139060,1946158718,197561108,-1005683264,1191178846,130426610,-1948715219,1183667952,-397404430,1589903395,130426610,209125120,-1928694017,1343682118,-2048389488,-310157570,535137026,147475805,-326413056,1988843095,184451848,-963961230,179950123,1358034688,-16353537,-521665418,702975,-768883061,-225709577,637820612,-14270581,1200498183,80120578,92808752,-443850914,442973,1167087646,518818645,-326903666,-950642896,64582,185091723,141822534,638082756,1991,-15829249,1183648886,-1202710820,-1873805281,-30414834,-1982052723,1452070982,-16520230,1589958726,1065363160,-940280800,53318,425603,-2144989580,141897023,-942127361,118854,837547563,2134507395,-62470339,1988689921,-1178170414,-503906294,808306435,-2081387776,1946158718,-764004087,-1070920834,-963953173,2010269241,-664877835,651708159,-1952970870,822051832,2122563197,108265680,-654850421]},{"sector":2,"data":[-15994741,2122517365,91488508,-352321096,-994039038,-1993996194,1590070023,49120095,1562371467,707149,1167087646,518818645,-326903666,-1957275868,2123042422,-1983894772,1149846084,1145342784,1950761995,-11053550,1996425846,108461832,189029631,-1957923392,409031,272452980,1031304192,125042708,1946163261,1451158294,175570774,1342178488,16777114,112640,-2089096295,1962936958,1350337294,-1593281280,1149829218,-2091455664,1946158718,1383891792,-1958054912,1418412100,-2091717822,1946159742,1350337301,-1281024,2023379060,-956301308,20548,1048829419,1946157154,1350337494,-1580174080,1149829218,1456008016,1342247352,1342177976,1347469355,-347841281,-11053386,1996425846,108461832,16777114,-2090902016,-443874579,-900899553,-1957363702,73319660,-12615642,-1014298251,50709132,-1005458688,1191117918,1065362948,-1946913536,-1031011258,-1034033781,1478361092,-1957345904,-661774612,175541078,80583254,-1073020928,1589927284,939468294,-1202948865,-1706033148,2298,637951684,-14284919,1962869879,309324,152148560,1589903360,1200170502,2013210116,1316290306,1342179512,600218,106873856,38242598,108527398,-1202817793,-1706033144,233,637951684,1577469833,-1962742397,1297948645,503318218,1430622296,-1910575989,-1957275688,2123041398,-15275258,995495030,-1207601673,48955393,-1873756117,-62658546,141965638,1600054653,-1962742397,1297948645,503318730,1430622296]},{"sector":3,"data":[-1910575989,116163544,915101271,1049298046,2122515584,175374342,-1593024828,690356652,1183515207,12592394,1946173501,8404263,-1069739148,-1003653888,111217758,-2147079419,1193879044,242679554,1443657471,-26025,283836416,-150993480,-1192195090,-269025275,-504629109,-310157474,535137026,181030237,-1873273344,-326412987,-2082959842,1448546028,1443526283,577178,1975520000,-373282043,1589903589,1066083846,192216635,-6662314,184549631,-941198144,62022,49825479,106873856,38243110,1962999869,-2017962216,-1070903296,-1706012592,2748,-151632247,1946482246,142016280,-1710852353,65535,-16222465,-6683018,-352321281,106873891,71797542,1946160445,1028093745,796131331,1962936637,-163121456,1456108802,24963159,-352321096,-230242462,1190526977,-1250622986,1996445526,6088946,1187505899,1442841080,1342247352,737703679,-1706012480,1116,455986923,1064192,-1073509513,-1476448621,179243730,173345365,173345365,173345365,173345365,177539669,177867413,173345434,178915925,1593794281,49120095,1562371467,445005,-2081649835,-11140372,1996425334,23062534,-1962522999,75400176,-16157696,-397014922,132841565,1443395327,-1962926360,108411376,1156975732,-579532749,271795446,-396961932,-1956710140,113401317,-326413056,1459809411,74877782,1443264255,-1962909464,-396929288,-1073020608,1996427124,1827165958,-151483648,1946300997,1590135793,1575324511]},{"sector":4,"data":[1426064578,-326898549,-1957275900,1156973686,477364786,1443264255,-1962924824,74907640,16967767,74760203,200001163,-454297717,1443264255,1577068264,1575324511,1426064578,1448602763,-1962510709,1032520830,58064651,-1962771317,-1956684089,79846885,-326413056,1459940483,-1946801322,1996424318,-823634170,972590079,141886590,74774027,82560651,-420743285,-443850914,311901,-2081649835,1448543468,-1207667061,-1706033136,65535,92127243,-352321096,-1983894782,1996487750,1055413766,-1947170048,-58817538,-16157696,-396949898,132906903,1460041471,-1946193688,1962818552,843445778,-153193471,1963471685,860223192,1473410064,1593303016,1575324511,1426064578,-326898549,-1957275902,2123040374,-1948284156,1183397959,1958742788,1959148303,-1965520117,-1071369401,-495697860,1600046987,-1034033781,-1957363708,73305068,36849654,-1014298763,1963345465,112645,-1070923029,-1034033781,50339076,17570816,53377024,17458944,52722688,17112832,56753408,17301760,52100864,-16651776,50370048,17359872,55708416,17318656,53383424,17433856,56660480,16873728,56956160,134249473,50355456,17334528,57121536,16933632,50475520,17440512,56865792,17451008,52772608,17049600,53788416,17419776,56967168,17456128,52675072,117714945,50336512,17048064,51266304,16805376,54055168,17127168,56744960,16811008,54059264,17021952,34071808]},{"sector":5,"data":[17000192,51113472,16833024,56683008,117448193,50347008,117454081,50347264,117456385,50347520,117716993,16128,1167087646,518818645,-326903666,-1957275822,111350342,-6664186,-1996488449,1451883078,104267772,-26106,1183383552,-1302951504,75892423,1183514625,-1337576454,1954545833,-2046376186,-939524348,17074694,-62485760,-1447934413,108298240,76154567,1190658047,1962999814,-364475047,1996443670,142016266,16777114,309788416,384452237,178256,-26032,1996423168,-26094,1183383552,-1168733768,384452237,-1200160944,-26030,1996423168,-26094,1996423168,-361300206,-1280257,1996484214,-25872,1589903360,1200301576,120268292,75902711,184867491,-385649216,2122514951,57999372,-2097021207,1979649150,276233998,-1710328065,65535,-15972727,1183650422,-1706027318,65535,411383,-1962576894,49009222,1174650923,-1976633398,-1136228092,-2147072266,1183517556,-754405114,-337368344,571395,-1982574965,-150770674,84452321,638082756,-1331492981,2139825667,205949698,-1961998845,1183387734,-1235842636,537282294,1183533684,795910,1946158141,539941,-1960440459,1183516287,-1976633398,737684228,-11054912,1996427382,-1233715442,-374049025,1589903693,1200301576,-901371130,-120469717,76164855,38208294,-739510133,2122970667,239504318,-1995417973,1451869766,-230258232,-1980475767,1183577718,-1235842124,1964004921,239483144,-186055819]},{"sector":6,"data":[276233984,-15829249,1996469878,105286580,1342181413,-1996231448,1451868742,-968455740,1455969929,-11485141,1996427382,1996444174,-18238,15853648,1190588555,913575942,81409593,1183527037,-195654670,1964004921,239483141,1589911668,1065362958,-16550624,1183518278,274107150,-1983756663,1183433814,-933852730,1589914603,126494402,-1069119080,1946160445,670981,1191125365,-1033976638,-1744336346,-2134880629,-1053095951,1191117685,-163133502,-164954111,-1950581245,1451999814,239503812,-2096081271,1962997374,-13702909,-11485141,1996471926,-227082252,-3639553,1996473974,5367814,-1950450039,1451953734,-968455920,-1983359351,1451881030,-163133452,-102170624,1354771454,-4294913,1996485750,-931725326,-3770625,484968054,105314048,141885696,-1710065921,65535,-310157474,535137026,248139101,-326413056,1460071555,276204374,61881995,-16482685,1190539892,745800452,81411723,1347469355,-15960321,1996425846,108461832,1358954424,738183912,71731960,20710180,-3079563,61881859,-16482685,1190529396,58015748,-16740887,1996426358,142016266,-402229505,1183383721,-27883012,-16482685,922689908,-2036267514,65992452,1996443847,209125134,-1962248449,1177287750,-6664182,-16776961,-16382410,1996426358,-62485750,1342850603,16777114,-1947204864,1451951686,-62506744,1589923699,1065363196,-15305463,1822555206,66638083,244029894,-101251832,-1947601088,-62485520]},{"sector":7,"data":[-1979820405,1451821638,-9180916,101070591,-150698335,1355219950,-15829249,1996426358,105286410,1342850603,231322,1590070016,1575324511,1426067138,1183575179,106334980,1929922105,140428322,-1744336346,102865488,-1073020928,1191118964,138870536,1589959915,1065362952,-1947044599,1451952198,1575324426,503318722,1430622296,-1910575989,485262296,176063318,-14126080,2107247222,184549381,721778112,16509376,-1979031925,-466996409,-1996486619,726923334,-1332064064,-16777212,1996427382,209125134,-16091393,1996425334,-26106,-259325952,511047179,687747,2122519156,208994552,-1207273729,-1706033151,1436,-369098824,1996423337,-26102,1183514624,1413777912,708002954,1058276,-2080749943,1962955388,-465138373,-1070903274,-1202696112,-1706033151,65535,511033355,16416387,1187451253,1442841082,1342177720,374426,-1697846528,65535,2122565099,292885222,-1990835061,-1705575354,65535,-335788405,-465138370,-1070903274,-26032,-1073020928,-1923734667,1343677510,16777114,1975520000,-465138412,-6664170,-1929379585,1343677510,16777114,-427917056,-1770782440,1593798889,-1962742397,1297948645,503319754,1430622296,-1910575989,142016472,16777114,1958742784,140413763,3702659,2139300212,460652628,-1204258817,-1706033151,65535,-16228725,62404727,-6664176,-16776961,-1070921610,-26032,1586167808,1380435720,1183514625,1447528710,-1962742397,1297948645]},{"sector":8,"data":[1426064586,-326898549,29251074,105286400,956847755,1215760966,638213828,1033373578,561774601,2113931837,867596,540870516,-351505408,172395280,51140235,-2094470202,1962935422,173982960,638207743,1352140682,16777114,1958742784,172424963,-1377044949,-1962260853,1581780054,-1034033781,50338570,17148672,53442816,17116672,56654080,17070848,53738496,17126656,52722688,17106944,52592640,134253057,50351872,117500929,50354688,16806144,56920576,17062656,56660480,134454529,50354944,134282241,50355456,16817664,56956160,134223617,50355712,134227457,50356224,134265345,50356736,134251009,50356992,-16507392,50344704,17098752,52606976,134260225,50364672,134408193,50364928,17124096,52675072,17105152,51266304,-16477696,50354432,-16433920,50354688,134478081,50340096,17088000,58939904,17112064,517376,0,0,1167120524,518818645,-326903666,-1957210616,1156974198,158727946,-26026,434831360,105182864,-1928170488,-397347258,1996425785,-126418954,16777114,41221888,16777114,-2090967296,-443874579,-900899553,-661913598,-1957345904,-661774612,1988843350,209619726,51135627,105314247,376766463,34030838,1156976757,175439626,2116568123,-339725563,960532603,577973316,1342185477,860894463,-6664000,184549631,192239808,-402325313,-1070396885,-1987029269,1996434500,-26102]},{"sector":9,"data":[-11403264,889129078,16777114,306447104,1344163870,1344194307,722224267,-1073016252,-998046091,-1878529272,-26032,-1705574400,218,17595393,1149964924,272926994,-15448951,-26060,-947191808,-310157729,535137026,181030237,-1864856576,-326412987,-2082959842,1465256172,-1928956277,1962931838,-1705568766,65535,1461081878,504775821,-26032,1996423168,-163149048,-2147072778,1149961844,1223217438,-126419120,-362753,-6620042,-16776961,1962870902,-26060,1583284224,-1962742397,1297948645,-1946155830,1430622424,-1910575989,1988843224,38046470,-6664112,-1711275777,65535,-1873391536,-9050098,-310157736,535137026,46812509,-1864856576,-326412987,-2585058,1033504886,-16777216,1996425334,-26106,-310181888,535137026,80366941,-1864856576,-326412987,-2082959842,1465262316,1443264139,-1897394544,41222143,1183666256,-1706027298,65535,-1394078064,-565801985,-152666485,1979648580,-1983446270,1183518276,507808232,-1929218817,1344149060,74906,105182720,-1927383936,1344149060,-773306741,-654882584,239373136,-388896559,1356396360,16777114,239373056,52585719,1149835332,507808540,52978935,-1992288700,1583290948,-1962742397,1297948645,335545034,-2113896192,134219520,218138368,167775744,16973824,50528771,134479875,302254340,262660,16843009,352588544,-134217724,2047027714,-586960125,-100403965,822356995,1057242884,1057242884,1225032452]},{"sector":10,"data":[1694783236,-1643869180,436510212,-1543287037,-1878739708,1430622352,-1910575989,-11053352,-1070395786,-26032,-259325952,235689611,-1916630265,-1191025858,-1343094760,-1962258805,243174367,778567470,-1207011585,-1705967624,726,242679632,-1207273729,-1706033151,65535,-385875528,-1202257770,-1705967624,768,-385596279,1589903494,1200301574,2005607960,1958742806,-1365618682,-1996488704,1988692038,30861318,1685372939,1358958009,16777114,876906752,-401698730,1183579755,1958742792,1996445199,108461832,53864462,-150510464,-352321096,-167014345,76231284,645185547,-26032,1156972544,443940618,188236939,1342600384,231066,910461696,108314635,60398160,-1705639936,934,-158316821,1963460164,105676857,124026888,-1070376965,-11517872,-6680972,-402652929,-1873410362,-64428018,-352255809,105182741,-401640440,1686111922,-6621434,-1090518785,300483072,636929,-1957275413,-1706012668,185,1225412235,990665867,-2029881653,-990868533,-645200258,-1070357261,-1695315030,246,-768358773,15067486,-351517557,107249697,1959332831,105676825,1444145952,-26030,-1293352960,-155176192,1947207236,-768393215,-2147435799,200214116,-2131528503,-351271348,142016493,-1710852353,65535,142016342,1342600959,-1710197505,65535,-1953465877,1418399812,8775954,-16222465,1150092918,-6664170,-352321281,417894516,-1871779068,-16104202,-108984716,58134528]},{"sector":11,"data":[-349156215,1364350556,-2096597249,208932090,67369601,-92207500,108332036,211866,1996443648,1979058950,920423181,-1710719095,65535,1149971435,1958742794,-26105,166395904,16777114,855829248,50380754,134694134,1686113140,1347614471,1476771560,-2090967206,-443874579,-900899553,1085800458,985157632,-6664192,184549631,-1023314496,1686171787,861402887,-1705619264,65535,-1207796599,860880962,105155008,1149837488,664424492,184549381,855864768,76137408,-1001385,52468304,78184448,-972458752,-956233148,268447812,1946189993,122454020,-2134706430,-2147191808,-1451227572,74711296,268913792,-16104202,1381370997,-26032,-1073020928,-6680716,184549631,-2147191616,-31455412,-661863488,-1957345904,-661774612,1443556483,209095511,-401698730,1962933153,1347833858,-1946925431,1317735006,2128165640,1004111618,159255628,990661771,-1962770727,306985945,-1957622658,310152147,-352158232,1962905612,-1949201646,1877479548,1464884994,-16104202,-11139980,1547433078,1393327376,2089537931,38529040,-7336725,-745861004,-401441653,-1991245251,1284051036,172291602,-1710394113,65535,410778,-1878594816,16777114,-401698816,1190656839,1962934022,244340230,1610193384,49120094,1562371467,576077,1167120524,518818645,1465309326,-1962510709,861274740,1196906495,-26025,-1705639936,65535,-310157729,535137026,46812509,-1864856576,-326412987,1457032734]},{"sector":12,"data":[175541079,-401698730,2126838543,-845543930,-1912602620,-1178586174,-218300417,1239021486,205818185,1444037769,142016337,856061695,244338880,-2131138584,-2131818908,856164172,608471488,1583333630,-1962742397,1297948645,-1946155318,1430622424,-1910575989,-1957210408,1451952758,172291590,1443722751,1376286463,16777114,-1877480704,1413201971,-1844478954,-149535701,-796189068,-401834869,1156972853,125050887,-6664106,1593835775,49120094,1562371467,445005,16777729,33882626,33554689,1040,134875118,135464979,137037858,140904497,1167120524,518818645,-326903666,-1957210614,2122386550,1963065354,41221939,385107597,34970192,1183514624,105266164,1183516797,105266168,1183384445,-163149050,2097694267,-96040184,2097694267,138840323,507808598,1174661329,142016262,-401698736,1183448877,39095292,235554443,1480494343,571655,-13717518,1283460709,1686110470,-91489529,-26025,-1705574400,387,1074152694,1183524725,340036092,-158326805,1946224196,-26035,1686110208,-1873347066,-136779762,-158319381,1946224196,121959989,1445950724,-15436545,-1873347466,-42801138,17464961,-1710263038,65535,108316475,-26025,1156972544,108396298,-26026,1583284224,-1962742397,1297948645,-1962932022,2126986178,-1010332926,-952384885,-947191171,620761283,637544192,603990016,754983680,201338368,553656832,503316480,1141456649,1510561801,1829330697,2114549001]},{"sector":13,"data":[-1425439735,-1106662647,-326413047,-2130383741,1963000058,284787461,-91553676,-62485167,26470480,509381465,-2129767285,1963000319,105182764,-2094828480,510988537,67585270,-1202319243,-11534079,1996488310,-401698564,1686175350,1283505926,1458111495,-1962471935,-2059498047,899336,-13717518,1156978789,57950214,-167691031,1946421060,124026887,-1878660101,67587200,1074154624,-150919959,-1877939237,537347318,1398147444,16777114,869829376,-1871516718,-617358601,-1953469461,1579882076,-27882500,1575738103,1610660752,1441518131,-6662512,-352321281,1157009430,158613510,-26026,132841472,-6662512,-167771905,1979648580,1654281734,-1090519032,686293760,-18431,-167730199,1979648580,573396490,-6664192,-352321281,1686147081,1686159110,-1695941881,121959936,-1960807420,1144721476,1393849618,12080722,1996443649,-59310082,-1880617328,-2141496579,33228644,1442970718,172291838,-2129562113,1952448763,1183667723,-1706027268,65535,68204630,1074152694,12059509,1996443649,-59310082,1407717008,105182973,1443919168,1342243256,-100609,244382838,-1912783384,-397345722,-11141083,1996488310,-401698564,1347878069,-16104202,-6682508,-352321281,-6647802,-1962934017,1438866917,-1957237621,1144721476,-1962705900,-162524604,1979648580,1996428812,-26108,183173120,1996428944,-26108,-443875328,180829,268911862,-1873400203,-154408946,1342338303,1962889302,309657360]},{"sector":14,"data":[-16104202,1234831476,-352321530,-1070362614,1369067600,-1879048186,-153753586,74776515,1342247352,-1207798529,-1705967628,1382,1962891088,-26110,952303616,-2013265152,-117440255,268436279,-16776957,-536870118,-2080374528,-1358953646,-2046820095,1275069317,-2013265656,1812005678,1509951236,-1761606912,-1979711228,1359020900,1459619843,1442841344,-1862270712,-335477970,1560283137,-889191680,-1795161853,-1174404221,436207873,-536870088,-1694498556,-1711275161,553648391,-603978911,553648394,-1493171358,-1207894267,1392575232,83887877,-1828650240,100665088,-1409219840,117442307,889193216,-1207959296,66436,134219524,536937216,150996740,-1811938560,-1090518778,-436206796,1056964874,956302117,1073742082,-1912601755,1124073734,-1090452649,352323334,1392575232,369100801,768,1358954760,436208517,-419365120,1006633729,1459618053,1107297122,-402587900,2080375553,-385810684,-301989119,-369033468,-100662527,1509949703,-184548558,-352256252,-1644166399,-335479035,-1224735999,-318701814,-1023409407,-301924598,553648897,-285147385,1191183105,-268370169,-1694498047,-251592951,1291846401,-234815735,1996489473,-218038519,-2046819583,-201261303,1577124609,754976769,-1895824640,-184484087,-1224735999,-167706871,134218497,-150929654,1459618561,-134152438,1593836289,-117375222,-2113928447,-100598006,838861569,1795162369,-1912601755,-83820790,-352320767,1912602883,436208516,1929380104,50]},{"sector":15,"data":[1167087646,518818645,-326903666,-1957275846,2123042422,-1983894774,1183447622,38046712,-1946794359,255659078,-385649408,58065082,1023512041,326369285,1962937149,23128323,1962937405,18671875,-16676887,1183708790,-1706027322,65535,-2147072778,1183657844,-1957685562,731455044,771281346,-654901247,239373136,734147481,178626,-1036781357,19776043,1356396288,16777114,-901346560,-1715059157,-149009269,675580409,410871,958493954,192819268,-1993325429,1149968452,-2096174296,1946165372,541362955,2083013689,809798125,19023047,675580672,52325623,-1992243642,1149966916,239338264,-1961081719,1452013638,18475514,67519734,-947129995,200296073,-15698496,1183708790,-1706027314,65535,-1030519,1962930294,-26060,1996423168,-25866,1996423168,-6662416,1442840831,737179391,-1873784640,50653198,-1695123713,65535,-1552548085,-1913227521,1343671878,16777114,1452600064,12511319,-11104789,1996426358,108461832,16777114,-8656640,1354771286,1290276496,1996445186,108461832,16777114,1975520000,-10491645,-26026,1458110464,1183536895,340035846,142016336,1342177720,184474,-12588800,91619083,-352321096,633350914,-523173887,1284235473,-69107706,1149878539,-14685946,1996620349,33570088,37587059,-385649407,1996488569,209125366,142016343,-1710852353,65535,-1980217719,-219547050,33832446,87941234,-385648894,20840280,-343247868]},{"sector":16,"data":[-2090901807,-443874579,-900899553,-1957363702,518816748,1988843095,-297351418,1187446785,-956301084,58950,-1710983425,65535,242532363,-16616193,-6683530,-1996488449,-1705638842,65535,-2132130167,-2146433460,-1962408116,1183518844,539908,222103412,-344165376,340036479,1964000313,306481925,1149961195,-28931824,1342181560,16777114,2092960512,-25263326,-1958969856,-1957691778,1183448646,105183206,729030656,-1147513002,-1962934270,-1960776712,-1992229306,2123097670,105183230,259268608,-6664106,989855999,57992774,1457932031,-428409001,-1705983957,65535,-401698730,1183384116,-948769810,3015750,537165443,2088984434,242483248,722224267,1141051972,809777936,1149979507,205797648,1187448181,1442841060,-35123568,1183399937,71732718,-1929886071,-1709770154,65535,1459242633,280311,-1207601665,65732609,1342177976,-362753,28899446,-6664192,-352321281,1354771208,16777114,1996445184,1996445674,-401698588,-11140906,244322932,-16755992,1996423796,-25878,1599995904,-1034033781,1478361092,-1957345904,-661774612,1443294339,-1962117493,1727471172,373555978,-1946532215,1183389764,106874108,-1946532213,-1993933738,1468605959,-310157822,535137026,147475805,-1873273344,-326412987,-2082959842,1448543468,-2096597365,1979647614,272927494,-1962522999,2083194494,2113866538,347624984,112742401,1149980676,62495016,737801984,-338102329,105183016,661914112]},{"sector":17,"data":[721845899,2083203708,2130643752,347624986,112742401,1149980676,62495016,66713344,-6663993,1577058559,49120095,1562371467,313933,1167087646,518818645,-326903666,-1957275882,2123041910,-1923656184,1343682118,635965072,-129594369,-1995553789,1187511366,-8584966,1996423796,112650,-26032,1183383552,-1923655958,1989013118,503781110,-1515905258,1595909541,-293698722,-955941632,60998,425603,1962874485,41221892,-16091393,1183705718,-1706027282,65535,-1207273729,-1706033151,65535,798635263,-1996488699,1996483654,-159973622,66615039,-1957683513,-953480124,-26032,889126912,351130,105182976,108335104,134628598,-11137164,1962871414,309657360,2028474000,-2090902016,-443874579,-900899553,1478361096,-1957345904,-661774612,1443294339,-1962510709,1143673412,-62486256,1014284299,-6671105,-1996488449,1150024262,-96074990,1149980702,-96074992,1149980702,306457356,-26032,1183514624,205793788,-6671105,-1962934017,1149833284,340035858,-134461813,-310157608,535137026,46812509,-1873273344,-326412987,-2082959842,-1957295380,1156975734,1198851078,134628598,1157039989,1947205638,1996445242,-163148536,244338710,1459474408,-1928956161,1343683142,-1041756528,239373309,-244223,1183648374,-1706027274,65535,-362753,-6621066,1577058559,-1962742397,1297948645,2099402,41746435,779616257,55377923,1669267457,88997891,1384382465,20185091]}],[{"sector":1,"data":[-2054815743,21299203,445841409,16777219,429522945,31457283,1738211329,5505027,1629552641,36438019,3342591,96993283,1721958401,74317827,464257025,78381059,456392705,97714179,-2068316159,79626499,524295,81854723,589831,79167747,131080,8978435,1698693121,52429059,1376263,18219011,-2058289151,81395971,2162696,43974659,32506111,17694979,2949128,57540611,33292543,54722563,33358079,26804227,33423615,38010883,33489151,37421059,33554687,25296899,33620223,24444931,33685759,22872067,33751295,18808835,33816831,69402627,33882367,0,0,0,1167087646,518818645,-326903666,-1957275844,2123042422,-1983894774,1183448134,38046714,-1946794359,20778054,-385649404,58065284,1023617001,57999616,1979752425,47638787,1962935613,45345027,1962937149,21162243,1962937405,14870787,1946160957,46917891,1183434635,1975520236,-159973616,382224013,-26032,1183383552,1996445420,-898170900,619187856,1962871555,51046659,-1913227521,1343670342,16777114,49998080,18200662,67549264,108461904,47770,347624960,112742401,1996443652,13277704,-706150400,1996445186,1996445452,-26106,1183383552,-61437446,-369867127,-8191300,-385649651,1465254580,-385598744,1156973228,57999622,-1962761239,1284184644,-103724770,1183433003,105266158,1183384445,474254086,-787592053]},{"sector":2,"data":[-1983828999,1178332742,-1996260088,-11139002,1996426358,108461832,16777114,-4696576,244338943,-385396504,727056988,244338880,1443316968,-16222465,-6683018,184549631,1446409408,1444655592,1347469355,1443612136,-1202667477,-1873772545,334161934,-1983894698,1347425348,1342177720,122010,105182720,1443263748,16777114,244340224,-384099864,-16055804,28837237,721611520,75200,-523116335,-2147070837,-1056179231,-385465207,1149960676,105265420,1183516019,-1962677498,1183386692,-1873783062,112977934,-364475562,1343505545,-1207404801,-1706033151,65535,1150003179,1183422752,-61437446,-2097043479,192282623,276102998,-2115498352,-1962743035,-968455737,958416011,243123782,-775528821,945554403,-768931957,-4666133,1455877119,-401698729,-1108670237,1996445526,108461832,-16359797,413591607,1996467179,-26104,-1031077888,-1928837495,1344149060,-16222465,-6683018,1442840831,1347469355,-2130000408,67308670,770245492,-159973631,1342177720,16777114,18802944,1354771286,115871376,1463585030,16777114,-398030592,-6664162,-1996488449,1149832260,-6662356,-150994689,1073743428,-397015948,889133662,84690059,1183383584,-1070903048,-26032,-1073020928,1183516276,742689272,-284793728,1354771286,173074512,1354771286,1350565816,1978142352,-1070901742,1343505545,-18093744,-628358005,1459549161,442820695,1459546857,-16353537,-270006154,9365766,410183766,1459541737]},{"sector":3,"data":[-384060440,356384463,1025865473,57803028,1040031465,57999618,-149527,1996486262,1996445452,108461832,16777114,-22615808,1963065405,-39655165,1963065661,-39589629,1963065917,-40703741,53334507,1391876,-1073493641,-1476448621,37356394,53150266,53149852,53150507,32440802,49021560,53150507,35586859,53150507,53150248,50856719,1183515379,-61436934,-310157474,535137026,181030237,-1873273344,-326412987,-2082959842,1448550124,-167092597,1946420807,11397379,-1711114241,65535,-16097653,1996423799,112648,-26032,1183383552,108954602,-1961724928,2013203038,41418500,1342732031,16777114,142016256,-1710590209,65535,-1928825089,1343681094,16777114,-196703488,722099851,-1952901049,-101249457,-166989685,-1070922627,-963968277,-1947449719,2005600862,1183534624,407317496,1334548808,-1946552562,2130590712,-339309820,-1983411454,1996484678,142016266,1089238783,1354771280,-401698736,1586169645,41418506,16777114,-2090902016,-443874579,-900899553,1478361094,-1957345904,-661774612,175541078,621168267,1149829123,105313800,-1207602112,48955393,19251243,-754405120,105679840,201254272,105155009,410871,-1207601918,48955393,19251243,-754011904,105679840,197125504,105155009,1342193848,1342178488,327066,944015616,18891975,-942109952,-956301305,66119,1342194360,1342179512,16777114,910461184,3701891,-1073018508,28837236]},{"sector":4,"data":[721611520,-310157632,535137026,113921373,-326413056,1461906563,108432214,14698183,-498678016,1149960192,-565802736,244338774,-1996342296,1283518534,1283461126,1996425223,-26108,-1073020928,1962872436,74907394,16777114,71731456,1023690379,326369288,1962936637,18344195,1962937661,21686531,1442926825,535301776,340036375,1964000313,306481925,1149961195,-28931824,-2053491457,-1996488702,280558150,-6664192,184549631,-2091746112,2130771582,9758979,1224623755,-1948367223,1183448646,105183202,208936960,-562626730,401050,-565802752,64898699,1346959942,-1995538200,-1072963514,1325359732,-565802018,1224361475,241952848,1349828619,-337752321,-28931253,-498693824,-1979824501,1157094982,1948254214,1996445201,-25886,1178271744,-16550686,1183572550,-96074786,238282832,199247497,-15371072,1183572550,-96074786,518541376,1958742798,-498663677,-1684392705,1442840578,-2197761,-1070865802,24746576,-11141120,244375158,-1996419096,1187508294,1442840810,-1018113,1996482678,-361299994,134512259,28864629,-949032192,64582,-956531061,-14618045,2122579014,-260306692,-1948367221,-472780706,725122187,-330921727,603981829,-330945544,-1914026359,1183445574,-396981018,1283501547,1187447302,-2096493308,1931478142,1354771210,16777114,-148837632,-16776122,28837237,-1207702784,1183383554,71732714,45664491,244338688,1577838568,1575324511,503317698,1430622296]},{"sector":5,"data":[-1910575989,149717976,1988843095,1996445196,-401698806,1183383640,373591036,-1946663287,1178148932,1444838908,-386107649,-930412113,-1962260853,-472777634,725122187,509933313,1174520067,239373304,66875127,1183389764,106874106,-1946663285,-1993934250,1468605959,-2090902014,-443874579,-900899553,1478361096,-1957345904,-661774612,1460202627,141986646,-2094105461,1979647614,-339727612,105286484,1930183737,541362949,-16037909,-1957749900,1144594500,-1961853138,-947177380,-670834479,956712587,721581575,944016383,-506343541,1077985539,-1929754999,32242782,-94452665,49956483,637945483,-260700359,-1959887735,-2090901817,-443874579,-900899553,-1957363708,283935724,1988843095,1996445198,24635404,-787718517,945554403,-939323509,-1947185527,-472839074,-1959240701,176044351,1183516022,-1962743030,172394951,956843659,58191942,-1980742005,1178142790,1446146826,-16091393,1996424822,-401698812,1589968561,1200301572,239338242,105351462,721962635,1693911622,117646878,71797030,-352321096,1589652226,1575324511,503319746,1430622296,-1910575989,183272408,140413782,-1711114241,65535,58048523,-2097097495,1979647614,140413705,-1995421813,1996424774,108461832,-1108865392,-163149314,-1962385781,1191388231,-96040670,-1959239797,-422447498,721831563,-62486272,972703371,343733830,-1207404801,-1202716395,-1957690362,1177286214,451625210,-1962385781,1194980934,1393917476,1342248376,1342441144]},{"sector":6,"data":[737560203,-1706023865,2423,-150446453,33556039,1183536500,709307388,-1993849045,-1072957370,-1202513794,-1202716396,-1957690362,-1181145017,-101253117,1358448131,1183525099,140413948,-1993717973,-1072957370,-1202512515,-1202716396,-1957690362,-1181145017,-101253117,737693323,-1449504312,1577058304,-1962742397,1297948645,1426064586,-326898549,-1957275900,2123040374,65523972,1166751868,-1996150014,889192006,368538,38077184,1183402056,-1293397764,1958742794,-26311917,-62485758,-1561833400,1958742794,-28377341,1402615039,-1962934266,994582596,58655814,-2080485633,2097217150,-339727612,-28931325,-443850914,311901,-2081649835,1448545004,-16222581,1183646324,-1706027274,65535,-1980348789,2123103814,511454202,2098887737,440699653,-947191061,-637303,1183646324,-1202710794,-1706033151,2662,-1979824501,1183577670,-28931592,737967755,2084114044,-1962574564,48962628,1183434635,41222136,385238669,112720,183867984,1183514624,-129594882,-2147072778,1183657844,-1957685514,731455044,771281346,-654901247,239373136,734147481,178626,-1036781357,19776043,1356396288,16777114,-96040192,1224099371,508332953,1149893111,65664808,-1992231354,1183521348,-129618948,239897497,1149893111,1975520034,574932741,1149960193,577566478,-1980217853,1157045316,1950351366,41221904,1347469355,1342177720,16777114,-1070901760,602427472,-1956684286,113401317,-1873273344,-326412987]},{"sector":7,"data":[-2082959842,1448544492,-2096597365,1962870398,-11119085,244319862,1358713832,-1979819800,1340865606,276102998,1105727120,-96040452,309657430,904400528,-129594884,1979336249,1996445199,-30414598,51528747,-806678460,-126419114,-1946279704,1586171980,-1948003846,153827452,-772252021,50922467,306981832,-1946399095,1600060486,-1962742397,1297948645,503317706,1430622296,-1910575989,317490136,1988843095,41221904,-1207011585,-1706033151,986,-1030519,-1706029450,3177,-244087,161847860,1183383552,-1954812942,1178148932,1446738956,-1913356659,118888052,-1515870811,541363038,17722615,2122577478,92078324,16008903,74776320,-16616193,28839542,1183666176,-1706027276,65535,1586185195,-1948004084,25901180,-1995946493,1150021190,205928736,1996427901,-227082482,209125206,-1863420161,174647310,425603,1187448180,-16777208,1183517766,205928714,2062091133,-1707802625,2511,-401698730,1996425245,-59310322,16777114,-2090902016,-443874579,-900899553,-1957363700,49054700,74877782,1309046275,-1207142657,-1706033151,65535,1947024512,171737093,-11663755,-253033394,-1005816065,-14284706,2013210167,105286402,1996443678,-26108,-1956773888,180510181,-1873273344,-326412987,-2082959842,1448545004,-955484533,64582,309657430,-1712845168,-129594886,-1961737077,-472778658,725122187,-163149567,2116437051,642025731,16402119,1996445184,142016266,721843967]},{"sector":8,"data":[-6664000,1577058559,49120095,1562371467,576077,-2081649835,1448546540,-1962379637,1183391812,105286648,-62486208,-2081405303,1962944636,-373282043,2122514818,91553798,2507975,106859264,2089542609,-1996387528,889192006,1067674,-28966144,-940423543,63046,66485891,-1092025476,-96024832,2122514432,292880886,49956551,-228685056,218201984,1191117685,-92371974,-150113024,1073743428,2122539636,1551106294,-1962522881,1178204230,1444249094,-402229505,-1073018700,889129589,931226,9890048,33179275,1174532678,108956670,2080630737,956664632,1081409094,1074153099,-1946401143,92929606,-788103541,947651559,1160447371,-196703746,2116437051,642025731,-28930730,-230257328,106859344,2089542609,-399376584,1183384499,-11474442,294531,1183565428,105265648,889175678,933530,-9245952,207133236,1191116800,105286406,-1960819575,1144649798,-1958904288,1183385158,-397388036,-1073018860,1183526517,205818366,-1207667457,-11534063,-189267340,-6663937,1342177535,721568907,97419474,-6664110,-1207959297,1022099455,-788103541,947651559,-1946269953,-28952315,1183517556,-62486266,-1979824501,108956421,2080630737,721783608,1183448645,642006004,1149830014,107249702,-62485507,-443850914,442973,1167087646,518818645,-326903666,-1957275880,1156976758,57934854,-167724311,1963460164,105182986,58003456,-16733463,1183646324,-1706027274,2568,385238669]},{"sector":9,"data":[-163148464,1150111766,-1706025450,3933,52708491,1183392324,541363188,2129937977,-196703997,-349930357,-11053461,1996425334,-330920698,-1243066346,1958743032,-330920671,1183666198,-1924131092,1343682118,1020570,242679552,384583309,262117968,1465253888,-15960321,1183648374,-397404436,-1072957312,1183654260,-1924131092,1343679558,385238669,-26032,1996423168,-330920690,-6664170,1191182591,2146729529,-2090901872,-443874579,-900899553,1478361100,-1957345904,-661774612,141986646,1015024619,-1207601907,233504769,105286470,184962815,736853952,-310157632,535137026,80366941,-1873273344,-326412987,-2082959842,1448545516,-1962248565,1178146884,721779976,14215616,721962635,-1952901052,-101249460,-1946532215,995041404,-1962181433,1183386692,-92370444,-11135253,1458109046,-94467079,2089542609,50957112,-196179512,410871,-12684224,197564980,1174601728,-163149324,250105920,1975520004,-161576159,553615232,666376309,-1768271872,184549393,-1962181440,1178143812,-16548364,889189454,902554,-94467328,2089542609,-1996387528,1150023750,105265430,1183516029,1447160824,-386238721,-930414521,721831563,373566401,508332953,1174665719,-62486024,410871,1443525664,97884752,1183383552,-196703236,2147239481,-129594613,2096907833,-62485571,-310157474,535137026,113921373,-326413056,1460071555,108432214,-1995946869,-1072955834,-1070922635,2123052011,65523972,1166751868]},{"sector":10,"data":[-1996150014,1828191302,441223966,1277937707,-95516394,33455747,45681781,-96040192,-1980106855,1183578694,-1956684038,79846885,-1873273344,-326412987,-2082959842,-1957295380,1157040246,1946222598,-129594004,-6664170,1442840831,1342248376,425603,45614452,-1207702784,726663171,412766400,1442840585,-362753,-6621066,-1996488449,1183446598,1095932,95132240,-1073020928,2122520445,141819910,-1995291509,116127302,-1995422581,1149893702,1996445204,-159973380,1342177720,418458,-310157824,535137026,80366941,-326413056,1460464771,175541078,-1962516853,140413759,1183385483,71707636,-1946663287,1183446086,71732222,1978943033,112645,-1070923029,-939768183,64070,957105291,108852294,-385875016,1157038280,1967128582,222134395,1187448949,-385875462,92930212,-2137370472,184549394,-16485184,-12059066,-381157818,2122514572,494141692,958940299,578615366,957105291,92143174,-352320840,243715,-335919479,675580744,2130200121,178181,1031826667,-1976142816,-1705994235,1362,175423499,-129594553,-506113,-1958216122,1191180358,-28901384,957105291,226360902,29354071,-1703624693,33179335,675580672,2146977337,-92372040,-351046400,205818636,2113816121,1191134985,540901630,1586229108,-28931320,1586169737,-1958770426,1600059974,-1034033781,1478361096,-1957345904,-661774612,1460464771,276204374,638213828,-1986525302,1150023750,-96040672,-26026]},{"sector":11,"data":[1183383552,272927734,-134986103,1073743428,2122524532,394199304,553156227,2122322292,192155128,722617483,1178275908,1443526152,-401705217,1183385603,1996445198,209125134,-16091393,1996425334,-401698810,1183384654,2092960764,541363009,2130331193,608471817,-1994243069,-11076538,1996486262,-59310322,737953419,20778566,721714688,-1962021952,1586230342,-1948004082,19609724,112720,-401698736,1962932205,-159973630,16777114,-4696576,244338943,1593101544,49120095,1562371467,838221,1167087646,518818645,-326903666,-1957275898,1149961846,272902930,201082505,-9538368,348494388,-125108224,51397771,1996443847,-401698564,-1072956488,1283458164,1149960710,516358930,272927568,1344194307,722224267,-1706028476,65535,704398987,889130052,1366170,742689536,1024214059,343801888,84690059,1149829136,1345650476,-1705983957,5772,-1995422581,1149833796,-62485740,1600051447,-1962742397,1297948645,1426064074,1586228363,222265348,28837237,721611520,1575324608,503317186,1430622296,-1910575989,216826840,1988843095,105182726,-385649400,1149960367,272906516,1149961589,-1962677486,1183387716,-1873783044,-221583346,-939899255,63558,16547459,889144180,1418906,-62520576,-397391800,1183448981,-1707802632,5628,16285315,1157047157,1950351366,-94467300,2089542609,-62485704,225771833,958416011,92142150,33048263,1996445184,-196702724,244338710]},{"sector":12,"data":[-135137048,33556036,1149965429,-196724454,1149963390,-196703978,17712267,1150023238,574882596,2147108411,-163133691,1996455680,-159973388,16777114,-2090902016,-443874579,-900899553,1478361090,-1957345904,-661774612,1461775491,175541078,-1995291509,1183709254,-465139218,-1947838836,-1991761852,1183572038,-532268794,1183516285,105286112,1137114923,-2092490514,-159643649,-1696172289,574,-1685879,371497524,1183383552,105286626,1141104849,-364476104,-1962900759,1854138974,126550762,-398030520,-1947574645,-159479489,2095611449,-497120408,-1986526838,155056710,-1958054656,-163173433,603981829,-163183624,-1991719125,29813830,-1707802848,5710,-1996405363,-11136444,1996483702,-461963290,-1705983957,3347,-1947435517,1174531142,-1707802648,3429,-337492343,-92864755,1192858,1958742784,-347650303,105286547,990269183,58591302,-36631,276929076,1183514624,272927224,1444037769,721975039,-1075294016,-2090901770,-443874579,-900899553,-1957363706,49054700,108432214,-1959234305,-523172794,-1202700224,-1706033086,698,201213577,-1996262208,1183529028,-443851010,311901,1167087646,518818645,-326903666,-1957275876,2123042422,138775306,201082505,-1962052416,-472840098,-1959240445,105285895,142016343,-1980583704,1586229830,65261832,260782173,1317652483,105286630,91736123,1183433099,1996445446,-364475130,244338710,-1947203352,1183390277,-330920978,-1995553533]},{"sector":13,"data":[1166798918,-297402082,-1981135221,2122572870,91488508,15353543,74841987,1443001855,1342177720,384452237,202152528,1183514624,-364475932,15892099,-1923737730,1343679046,50742923,-1957688250,1177282118,434655238,105248757,108335104,134628854,1166750068,-431605488,1183525238,306526470,-11067022,1979648118,309722896,384452237,-261167024,192200715,-364475050,1788497942,1577058319,49120095,1562371467,707149,1167087646,518818645,-326903666,1988843024,272927504,-2081012087,1963067006,306481933,1964000313,112645,-1070923029,1459373705,-1877838593,-275060722,-129595072,425603,1149966196,1144733712,-1005686254,-2144990626,91491647,-352321096,-1983894782,1996484678,438278668,1183383552,1996445196,108954376,-1207601918,48955393,-397361109,1183383777,1975520244,13166851,-401698730,1183447950,1996445426,209125128,-1878362369,-193337330,-151894527,1963066948,1183536654,-11517938,244380278,-150561304,1073743428,2122517621,108265478,33965302,-11134092,1996426870,-190519056,-1946532215,1178204230,-1962508550,1183447622,108954616,1443722496,-1207011585,-1873772545,-55384050,410871,-1961134847,1144595012,958496544,242556996,541363030,-957853624,675560432,2088963711,812908592,959464587,679349316,-193527978,-231681,-353892234,-1070901760,1005080656,-129579020,-1070858241,115186256,-1873412096,61663246,1593329291,-1962742397,1297948645,1426066634,-326898549]},{"sector":14,"data":[1988843016,306481928,-1995422677,1962933830,422353462,1183383552,-1707802630,6524,-1946663287,1183054430,126550778,-1946401143,1183054430,1149960954,-16283376,-1231407500,-2097151975,1946158206,272927496,1979467321,913637209,100550283,726663176,1218072768,-1996488684,-1073007036,-1706016652,6637,-1996487675,-661915066,49956483,-1979824501,-94467321,49956483,-1996077429,272927495,519587331,-96040112,1996443678,456366846,1962868736,431856182,889126912,1722522,910461696,1575324510,1426065090,-326898549,1988843018,108954378,-1961987072,1143538758,244340240,-335945240,142016355,1767834,-129595136,49825411,49825411,-2080874869,-1962739642,-28931833,-2080874869,-1962739642,272902407,-1980217717,1586297414,-1667621124,-1996488683,-1873347514,-107157490,-25755818,-231681,244382326,-1947039000,1177227844,272927230,-1710721281,6970,1575324510,503318722,1430622296,-1910575989,116163544,1988843095,340036362,1964000313,306481925,1149961195,-62486256,244338774,-1980956696,1589967430,373590790,2097625382,-92372203,1446933504,-772120949,947686371,1346896267,1149970155,-62506740,-11131011,-689374602,510457838,637951684,360515387,-92370090,1552672721,41025336,108461830,988286608,-2090901780,-443874579,-900899553,-1957363706,116163564,1988843095,-62470388,1149960192,172374304,889145469,1305242,173968128,2089542609,-1995863240,-939262386,1459244681]},{"sector":15,"data":[-401967361,1183444593,71711228,1183516275,-62486268,519718539,142016336,-16353537,479919222,-16777196,338270772,1183514624,-1956684036,180510181,-326413056,1988843095,75399942,-1961069568,-405732226,-1959232509,1157834820,-1962595330,220926028,58507579,-1962651905,1599996998,-1034033781,-1957363708,283935724,1988843095,-163133692,1962868736,469473846,1183383552,-2082960398,1979646591,15853827,49432195,1183385483,-228684804,49432195,1183385483,-228684808,49432195,1183385483,-228684812,49432195,1183385483,-129594374,2130462265,-62486269,1342194360,-1695254785,1245,201213577,-385649216,1183514787,-11526414,1251671670,-1996488676,1344204870,-1695254785,7661,-1707707137,7262,-59310250,66602635,726727238,2056933568,-2147483620,1442973260,276102998,1239944848,1183535339,-11526416,-1070861194,-401698736,1962931876,482187830,1183383552,-1948742670,38112248,1996425097,479828734,1996423168,-25858,1183514624,340036092,1962889302,112658,297900624,-1202323456,-1873739777,-335550450,268848256,134696064,32917191,913637120,1898650,-163149056,-443850914,180829,1167087646,518818645,-326903666,1988843012,913637126,1906330,-62486272,880066571,1183045771,1149960956,-1962440432,1183054942,130482940,1586233343,-62487556,509698,-60912896,50087555,1991,-1707707137,7504,49120094,1562371467,182861,-2081649835,1448543980]},{"sector":16,"data":[-16490869,500013623,-125108224,-166987893,1586180724,206015236,1183434243,-2129204226,1947012412,92843014,-2096436409,1586168774,208634628,-25806589,1586226551,-1707606268,7853,-443850914,180829,-2081649835,1448548076,294531,1996428661,-6756346,721843967,-397389632,-1070862422,-1962852375,1207371358,1950351366,243953,-1994362889,939521094,51136395,1200223302,-1070903252,426744400,-1073020928,1854132340,1586168820,945785606,-1996339317,1586232390,206015238,-1979955669,-1072959418,939503742,2020250,-364476160,1988884619,-1947204612,-1957683514,-972819386,519980681,-260636848,2001562,106859264,722225035,1174666310,-163149314,66879115,1187506814,-385875462,1602945158,65065272,721914840,1183448134,66096108,2105671286,1946815998,958065453,444003958,1352139914,1454490,1958742784,1191134724,1191134956,540836076,96919924,96880397,96880397,1586185994,945785606,-772127093,-1948777504,1177223751,-62510100,-1946663287,1200293470,1178290208,-16550406,-963905458,-947171298,1996443678,430873336,2114125824,-96010248,-1962516853,1194981958,-385647072,-947126420,-1981135317,939461703,2028442,108461824,1347469355,-1192334872,1599995905,-1034033781,-1957363708,82609132,-16490869,580531831,-1996488679,-661914554,-16613501,28837236,721611520,-28931648,-16490869,1335506551,-1962934247,-443810234,180829,1167120524,518818645,1465309326,-1962246517]},{"sector":17,"data":[1972045398,138840888,-268177405,-1960817269,1090985726,108447787,-1413348435,1583348450,-1962742397,1297948645,3081930,275447811,779616257,418512899,1669267457,66387971,452919297,470286339,1384382465,67961091,5046280,74252291,-2054815743,42926339,5898247,38993923,1686765569,9764867,445841409,144441347,236126209,7471107,429522945,54067203,1738211329,252182531,1629552641,242679811,1646329857,506789891,3342591,396034051,1721958401,196083715,464257025,389677059,456392705,467927299,327687,497156355,393223,476446979,458759,462553347,524295,356843523,-2068316159,470810883,589831,210764035,131080,291438595,-2059730943,243728387,624885761,178323459,1698693121,40960003,239271937,171180035,1464008705,403570947,1376263,63438851,-2058289151,213516547,2162696,281411587,32506111,196870403,2949128,253493251,1701511169,330104835,33292543,370409475,33358079,472055811,33423615,319684611,33489151,90243075,33554687,25493507,33620223,21692419,33685759,19464195,33751295,67108867,33816831,293273603,33882367,294060035,33947903,0,0,0,1167087646,518818645,-326903666,1988843012,105286408,1946353725,50412829,37555316,1025209347,510919427,-397015061,1183383596,-62485508,-1873405717,12969998,-1873350421,20703246,-1873352469,14739470,-2090934037]}],[{"sector":1,"data":[-443874579,-900899553,-1957363708,183272428,1988843095,306481924,-1995422677,1962932294,28350978,-1073020928,-1070922635,-6652949,-1207959297,-1957691326,-1723795386,-6664110,-1996488449,-1072957882,-224786571,-352321536,-159973415,122266,-62486272,-108919,-26060,1141047296,-96040688,1996443678,-59310082,-1694992641,65535,-990355829,-970523522,889126913,16777114,-159973632,131482,112640,-159973552,16777114,30251520,28835840,-1956684288,46292453,-1873273344,-326412987,-2082959842,-1957296916,-397015434,-1072955580,-1873410444,845838,49120094,1562371467,182861,1167087646,518818645,-326903666,1988843014,175932166,1443853312,165274,-62486272,25356374,1448483307,-1710197505,421,-62485168,-1070903274,-1164292016,-2147483646,-2146433460,1577584460,-1962742397,1297948645,503317194,1430622296,-1910575989,283935704,108432214,-1995422581,2089022534,74711050,166445099,-193527978,174234,-163149568,-1711115009,65535,74825739,1324073003,1342177720,16777114,-230258432,125157387,132762,1457908480,16777114,-227082496,16777114,-96040704,1459377801,1347571794,16777114,1996443648,-401698572,1183383580,-227082256,16777114,-26112,-2090991616,-443874579,-900899553,1478361090,-1957345904,-661774612,1443556483,-2096204149,1946159740,138840949,-1946663287,1451952710,-96040692,-939764087,2118,972572299,208865350,-368956]},{"sector":2,"data":[-2144929210,460655935,51135627,1143670854,272892690,1982874683,1354771215,16777114,-11801856,-857012154,-1710459137,65535,1443645065,16777114,1996445184,209125128,-1207273729,-1706033151,65535,3336278,1448484075,-1710197505,65535,209125200,-16091393,-1070921610,-26032,1283457024,1283461126,-2090989561,-443874579,-900899553,-1957363702,49054700,74877782,-26026,1183383552,726685438,-1706012480,65535,-16616193,-6619530,1577058559,-1034033781,50337282,-16685312,50464768,-16689152,50465024,-16748032,50366720,-16694016,50465280,-16737536,50366976,-16744704,50367232,-16716544,50367744,-16662272,50368000,16936192,56852224,16828416,55739392,117566721,50354688,117486081,50333696,117496065,50333952,117477121,50335488,117482753,50336256,117498113,50336512,117603329,50337024,-16657152,50458880,-16582912,50461696,-16607232,50461952,-16589312,50462464,-16585728,132864,0,0,0,1167087646,518818645,-326903666,1988843084,-196688116,1187446784,-956301070,46150,336232065,-1207602175,48955393,1183432747,-733558804,1187446784,-956301090,46662,13780679,175932160,-1962511360,1149832260,138840870,1946157629,-385646986,-1073020709,20798836,-385649664,1187447011,-16776780,1183646324,-1706027292,65535,384059021,-465138352,1150111766,-1706025450,65535]},{"sector":3,"data":[67665539,-420936843,176062720,57934101,-1962888983,1174611012,541887412,-1053079223,-1108802691,541362944,1210336299,-956256279,-19386,1150003691,1183402018,-1197413452,1143668737,1458826018,-16353537,971566198,-230258429,353009281,-1962576639,65736268,-1960948597,-654839226,-335939687,105286605,196363913,-385649216,2122448741,1963005194,2668549,666371051,-1236891392,11828867,1256784764,-1234271233,-12326654,-327745706,-1996273176,-940985274,212226,71141492,1033139200,-1250687994,1946422845,-1715459105,-2130527255,18090622,1149966453,-1270480086,1227246731,175948091,723928203,-1991759292,-11094970,1996469366,55568394,-899447,2122515060,91488492,-352321096,1354771202,-327745706,1342367208,1342177720,16777114,-327253248,-1962183424,1183445574,-230242316,-6684672,184549631,-150506048,536872516,28837236,721611520,-532248128,141934603,-1711115009,595,32786059,1183520324,407110130,67519734,334037876,74776322,1342247352,-1207798529,-1705967628,65535,-327253168,-1207602176,65734146,721813944,735087570,38046656,-6664110,-2097151745,1946214526,105182773,-1962118016,731455044,1224266178,-1816951,1996423796,-227082252,384059021,-465138352,-6664170,-16776961,-6684044,-385875713,2122514686,158662868,-26026,1183383552,-730398764,65291915,-1957628858,1174660678,1183535346,-465163288,-364475568,1357268523,-2853121,1996481654]},{"sector":4,"data":[2144486,1375784122,-26032,2088960000,276037642,-730398890,1347469355,16777114,10807552,15892099,1149964669,574882596,737166985,1183429702,-1962087442,1183392836,-1270469650,-2081405303,1946219646,608471888,-1994243069,1996484678,-25900,1183383552,-193035310,-1960936192,1141058116,-1270469848,-2210167,1183569014,-196738072,-428409008,-337086721,-730398960,-1804545,1183573622,-196738076,-361300144,16777114,1996445184,-294191148,-1018113,-1070866826,-26032,2122514432,276037842,-2853121,-6630794,-956301057,53830,1342177720,16777114,2109737728,-1069118177,-1070903274,33601616,34191440,1354771280,16777114,1975520000,-48895741,-390695169,-1073020522,1149986676,272906516,1149961589,-1962677486,1183387716,175932412,1443787776,-1169781424,-6664170,-352321281,1996445198,-1169781252,-6664170,-1962934017,1177154630,-230257734,1455179305,1074152694,280495476,-1207702780,-11534080,1996471414,-25926,1962868736,-26110,-1528233984,41222140,-1697351937,65535,733234827,30048466,-1980348791,-2090928042,-443874579,-900899553,-1957363704,82609132,141986646,294531,1149969780,-62486236,1210074251,108461904,1342203064,287386,608471296,737953419,1828136004,-1960580338,1183394372,642026492,1996443720,6600710,79731280,1149829120,-62485718,-148224981,1183391340,-443851010,442973,-2081649835,-1957296404,2122516086,376700932,52460675]},{"sector":5,"data":[-1070922627,1149972203,-62486236,1210074251,2088964075,-360971738,-1993718645,1150024774,1183402022,-59310086,1342203064,-1694861569,65535,1575324510,1426064578,-1957237621,2122385526,1946227716,105286433,-2094775295,2097161340,608471819,-955890135,9284,-150583669,242022360,1183522795,709099782,2784387,1149963133,105261354,2770119,105286400,1828182263,-443851234,442973,-2081649835,1996428012,56465924,-1073020928,-1070922628,1183663339,726669038,12079296,28856321,-1070903295,91462224,-1073020928,2122392948,1946223088,71732185,1978811961,-297366063,-1070903274,16824400,28856400,2040156160,-1207959549,-443875327,386056797,704643840,2013266181,1040188206,184614659,1258291970,150995202,1023411015,184549636,-67108014,553648385,2013266786,553648384,-1660943519,1040252673,1241514752,-1207959291,-738196702,-1090518783,452985652,1056964866,687932197,369100803,-301989120,1358954755,-369032315,503318530,-1291844864,-671088383,-1711209721,570427394,1325466368,654313475,-1090518272,-100598013,-1358953727,-83820797,-1946156287,1795162368,-67107995,-67043581,1644167937,-16711934,-436206847,50396931,-1392508158,117505794,2,0,-2081649835,1448542956,1443133067,16777114,1958742784,-6662633,1442840831,74394,1459129088,976983,49006475,1600045099,-1034033781,-1957363710,-1957275668,2123040374,-1202235900,-1706033149,65535,1460032163]},{"sector":6,"data":[1342177720,16777114,-1956684288,79846885,-326413056,108432214,22911574,-11141120,1050281078,1577058305,-1034033781,1478361092,-1957345904,-661774612,1462692995,242649942,-1962246517,4000838,-385649407,58065108,1023551465,1953759239,1962936381,11790595,1962936893,31385859,1962937405,30075139,1946160957,8666379,-1276574859,35121408,1183434635,1975520244,1183667726,-1706027310,65535,1458849417,-386631937,-11075768,1996485750,39774420,192282379,-767128234,-6664170,721420543,250190272,1996445186,142016268,-402229505,-336919725,138431616,-26026,1183383552,-397388044,1996488456,28858100,-337096704,1996445189,-25868,1156972544,-1082847168,70286464,1156975989,125109056,1354771286,1443277288,181146,1453648640,-2147232280,-1695072156,65535,-8153621,1452307744,-397361109,-2014641284,120618112,1592329076,-18431,-2080408855,276111615,71320822,1793655669,-840411393,-10229501,60090454,-1979630359,-466993084,1726599723,1078233601,69592106,-230258432,108330763,71322752,1686111467,-396952768,1183448622,1975520244,-13899517,137395328,190190453,-1207601921,65732610,1342178232,-351923736,-193528054,-227082410,1443093480,-386631937,-18219429,1078233854,52814890,-1969362176,-466997180,1929380413,-18355965,1979712317,277795,87887988,-385649920,104726229,-384141824,-15991091,1283458676,82510130,-30251904,225771275,-352321089]},{"sector":7,"data":[50299656,46072694,1078233600,52814890,1975991040,-23074557,608191626,181373948,1078233281,-41359274,200558217,-385649216,1448148613,-385630744,-11075723,1996425334,-26106,-397017088,1183448422,1975520244,-27006717,28856406,-1444392960,1078261248,-385649400,1996488521,28858100,1676169216,-6662652,-385875713,37617461,1026193154,57803264,1040070377,57999617,1040101609,57999621,1459529961,1460434687,-16222465,-6683018,-352321281,67124514,149488501,67190271,183042933,67255807,-1696005259,67321342,-1662450827,1590488062,49120095,1562371467,707149,1475119957,108432214,-1979416949,-466993084,989856805,1443853511,1342440376,1354771287,-26032,1599995904,-1034033781,-1957363708,183272428,1988843095,108956424,294531,2088768628,242485040,1448132651,1379336023,-26106,-11075584,-1710861770,65535,-1963571575,-466997180,1979713597,12904707,781434883,72001535,-1070901673,58517584,-1070901673,36366416,-129594026,-6664170,1459618047,385369741,809798224,726721578,-6664000,-385875713,1448542346,-397361109,1448543050,-352164376,28857979,468209664,1078261252,1443394564,1342177976,-167506456,1946694468,79189599,-1552384,1448471299,-129594025,79187990,367546368,1183667972,726669048,-6664000,1442840831,-129594025,62410774,-102215680,1183667971,-11528456,-1711028682,65535,-1070901673,48031824,60822251,64095136]},{"sector":8,"data":[64095186,64095186,65078279,-159973545,230554,-1956684288,113401317,-326413056,1444080771,-2146797941,1963405436,2145932830,-163149317,1183666262,-1202710792,-397410301,-11140200,-924256650,1443621883,385369741,102537808,1183645696,-11528456,1996424822,-26108,-1073020928,1183528308,33570056,20779124,1025012738,661979650,10414166,28844523,-6664192,184549631,-2146140736,1946628220,28857870,233328640,1443162880,1577077224,-1034033781,-1957363704,1988843244,1078261254,724464900,395989184,-2147483648,1443905612,16777114,1080328192,79189743,65556480,75400190,-2146798592,1444954188,16777114,-443851264,311901,1458342741,-167479669,1946435652,-1070901738,-36116400,541082870,2056915316,-2147483643,736051300,-828747584,1577058309,-1034033781,-1957363710,49054700,1988843095,-26108,727056384,-1545056064,809798397,54387754,1023767552,796196870,708854922,-2114417692,1191183335,103840896,45614453,-1207702784,-952434687,-13958531,67221590,-1070901424,1251627088,1442840579,-397361109,-1070923206,6986320,1599995904,-1034033781,-1957363710,149717996,1988843095,108956424,294531,1187448180,-1979710460,-466993083,989856805,1014236230,707806602,1925188580,81198,121440118,-349604864,1183668002,-1706027272,951,-129594026,1166692374,1357130288,1342177720,248730,1443228416,583767,-443850914,442973,-2081649835,1448547564,1443133067]},{"sector":9,"data":[-1928956161,1343682118,1342177720,-956183576,65094,707806346,277988,87886964,1024225792,309723142,1187448299,-167771650,1946435652,178199,1187452139,-2147482882,1946304636,-28915734,-471138304,-125059029,54543606,28837236,721611520,-137950272,-1996203474,1183575622,1546582014,-330921724,385238669,-159973552,-1946650881,100922950,-1957690278,100923462,-1706032036,65535,1446540543,-16353537,-1928965578,1343682118,16777114,108461824,-11485141,-16493514,1996486262,1513553912,1547108100,-294191356,-1192462593,-1706033151,65535,-443850914,311901,-2081649835,1448548076,-1979287925,-14012324,33720202,-62486120,142016342,384845453,-59310256,-1962876952,1344157252,16777114,-297367296,-1962379521,1344157252,-1695648001,65535,-1980217719,2123102806,-58817552,-1962118142,1177285702,-775476232,-1946680344,1177285190,-163183622,-772651477,-28931608,294531,727063924,1996443840,-6663944,1459618047,66733707,1346960966,16777114,-163190016,1946694468,142016287,1347469355,910461776,1996443678,1996445678,1354771454,-26032,552271872,-1207404801,-1706033150,85,1460172543,-1946257665,1344157252,-1695648001,65535,-443850914,442973,1458342741,-16353653,297285748,1962889217,72780596,-963919829,-1080405934,1577058309,-1034033781,-1957363708,116163564,1988843095,176065292,142016342,-1710852353,1186,184829579,-385649216,20775100]},{"sector":10,"data":[1024816128,678690818,1946157885,277809,-2081881227,10676480,637951684,637945739,721569579,-788243450,1191257848,9103618,-1593418044,67437658,117515776,1149992171,-1706025418,1873,1476019849,506872971,-92864688,587418,-62486272,1476286089,-1173613640,1347553517,1342177720,16777114,-2147079424,106873860,637993254,1174603659,263676,71797030,654198411,84035331,-1993998332,585827911,202618967,1392508858,112720,124033616,1183383552,-27883012,-1962516796,-370617918,1600061295,-1034033781,50340618,17094400,53377024,16784640,53999872,17005056,52100864,17182976,58656256,17130240,59082240,16945664,57411840,118002689,33577472,17347584,51122944,17110272,53383424,16843520,52073216,16780544,51254016,134790401,50354944,17277696,58955008,16806656,54008320,16834560,52009472,16970496,57121536,17317888,56697088,16795648,52145152,17232128,52114432,17281280,59029504,134734849,50332160,17226752,56900864,17343744,55754240,17309440,52772608,17242112,55496192,17107712,59068672,17117440,53631488,17054720,57039360,17084928,56942080,17290752,55403008,134504705,50343168,17047296,54912256,17299456,55764224,16870400,59011584,17127168,3306240,0,1167087646,518818645,-326903666,-1957275862,1149898358,-1947981264,205949944,1962937405]},{"sector":11,"data":[15198467,568918902,81153,37571188,-385649408,171770018,-385649408,501809390,172395265,200689289,1443788224,383141517,-26032,1183383552,1996445430,-663289866,-2097072408,1962936958,1183667723,-1706027306,65535,2112602155,-1072971733,-8128907,-990808829,-1960442274,-1960438201,1183389783,-94991880,653811396,1979662208,1200301580,-129595135,16402119,980745984,-362753,-6621066,-1996488449,-1000979388,-14285218,-14282633,922685047,922682474,-1070922644,-26032,-1662320640,-1072971733,-8153483,-7244541,-6667148,-352321281,67076999,28863602,-372102400,-8191854,-385650173,1525415794,-1711276104,-2097118743,57803775,1459577321,-16222465,-6683018,1442840831,16777114,1975520000,-11998973,-26026,1183383552,-1202694410,-397410303,-11141029,-6621578,-385875713,255721258,-385649408,511180527,1912606013,933125,-11101066,1996426358,142016266,-1710852353,65535,-2126701845,-385649408,-2109866125,-385649408,-2076311688,-385649408,-756285574,-310157474,535137026,181030237,-326413056,1460989059,141986646,707806346,-62486044,-230257322,-6664170,1442840831,-1207535873,-1706033146,65535,-2081536375,1946158206,-62485712,-767831509,121439607,-1961987584,-768869306,91738683,1979713853,1354771220,108461904,-1913751809,1343681094,16777114,108461824,-1695648001,548,-113015,28837494,-6664192,-2097151745,1946173564,108461835]},{"sector":12,"data":[-1707051777,803,1039943307,58064905,50391529,-13724736,-2096953177,1962948220,14215427,1358954424,16777114,860157440,-13798392,-1070922122,44611664,1375906746,-230257328,727076886,-1957670720,1143679556,1149980710,675556140,46504528,250281984,-1928956161,1343681094,-401698730,-4718431,-6663937,-385875713,2088960130,2087977028,-16353537,-1207710666,-4521985,-1957670145,1344160836,1358954424,1347469355,74069759,74200831,16777114,-1957565696,-352073666,-1103197430,-1962611965,-2147236290,1929851004,108461840,384976525,-6662320,-352321281,-1405187797,108461827,384976525,374864,-26032,350945280,37421627,43647547,47252171,46858967,47645393,-16353537,-6619530,1577058559,1575324511,503318210,1430622296,-1910575989,108954584,-15501825,-1070920586,1996443728,-26104,-1070923776,1996433131,106859276,506873739,-18352,175570768,-1979156737,-466997177,1342263309,16777114,112640,-1962742397,1297948645,1575114,19791875,939065345,18546691,1812529153,18939907,236126209,7340035,445841409,21168131,941228033,5373955,429522945,23855107,1738211329,11730947,11403519,28508163,1629552641,29360131,464257025,33095683,456392705,34799875,131080,39452677,31785215,57737219,5570815,38338819,1507335,43188483,1572871,55181315,902365185,13762563,541720577,39649282,31785215,48955395]},{"sector":13,"data":[1717174273,41549827,1298268161,33816835,2949128,50462723,1172635649,15139075,4128775,0,0,0,16777236,33554689,33686017,18350595,983298,458754,18153480,65671,655371,67240961,68027395,67568646,67699720,67830794,67961868,328709,14221312,49480435,23265587,23265635,49938727,26476911,28705197,29884863,35652046,36569640,38208059,39912013,42074740,44368534,47514302,15794907,50397380,1167120524,518818645,-326903666,-11053530,-1070395786,-26032,-259325952,185353867,1023768054,2020933633,235822731,4099335,2210048,1317777394,1457489674,1080557358,-397361101,1149834097,1996445198,142016262,-351826200,889150997,-16616193,45615734,-6664192,-1207959297,-857145343,1284201984,1361961756,16777114,474253568,-1709280001,249,85846102,1347862579,172263760,-1996077943,1149833284,-401698798,-1070394753,-1207920919,-11533824,1962879092,1345841958,-1929218817,1461115006,16777114,-11069952,1996425334,-26106,-1073020928,1482166901,-1995946357,1183524932,642025734,1351637995,-16222465,1256719990,1582230284,2123192151,-1705568544,65535,-529072298,-1914538241,1343677510,369640424,-26025,703266816,477429598,66714,510983936,104858,-6662656,-352321281,370075664,364832854,-370669589,904418837,1365240598,-402229505,1458241954,112734,1465798891]},{"sector":14,"data":[1342399976,1342178744,16777114,-1192195328,-1706033146,473,1465567371,637951684,722487179,-1960423226,-1054142905,1200301648,65458444,-1960423226,-628422073,-135006311,65130979,-1070378815,-26032,1391132672,-1999828386,1256927564,31713361,1996440811,108461832,-538440048,-13112571,1996425334,1491620102,1361832708,-352197144,1996443941,-26104,-11534336,-6683018,-352321281,1996443921,41347078,1354773334,-401698736,1609240879,41221969,16777114,318498816,-1201778197,-921960449,1278994546,1457749776,330426449,-1201783317,2088828927,-764084173,-351779701,1978159406,1959922432,-11513306,1996425334,-1706012154,65535,-397341973,-771030948,1347554676,16777114,-396996608,-346554230,1149984315,-13243632,1996425334,28856582,28332032,301459536,-1964486570,1344138002,142665809,1364203499,-351727128,1347902992,142016337,-1710852353,65535,-2090967143,-443874579,-900899553,-1957363702,1988843244,-1194183930,1317797887,273431300,1962877821,-26084,1586167808,-1898249468,939468482,-1709411073,65535,-1709280001,822,-443851176,311901,-11510952,1218059895,-1023410173,-2081649835,1448543468,-2096597365,1962938492,9169155,-1962509173,121439814,54818560,-13724736,1191426983,2083207659,53799694,803933820,722486411,1861684804,1689884932,-1946552576,2113866744,-335598822,276597526,-1206850737,-1845260541,-1677486333,-1325151485,-1962691325,1143672900]},{"sector":15,"data":[-28931826,41797435,-396953461,1465258948,-1962018840,1144587844,51739658,1346899524,-1710197505,65535,1006519945,58526276,1443513481,1578331112,1575324511,1426065090,-326898549,1988843020,826590726,-1070901759,244338768,722434792,-443851072,311901,-2081649835,1448545516,-2096728437,2080375934,272927496,2080654905,-18426,-16742423,2089488460,75377424,2088822737,108265523,1074807947,1962932227,121084444,1183383552,-27883012,-788248949,-62520352,-1980348791,33945686,1380995584,1475770111,309914,863797248,-1960348672,-523169724,50611715,1452014662,-163149314,1090016905,-11382702,1150023286,71707408,-26032,1962868736,56859164,-1202323456,-11534335,244319350,-1961963800,1600000068,-1034033781,-1957363708,49054700,1988843095,863797256,-2096204800,2097087614,272927496,2114209337,-18427,2122526443,309722884,2084175659,1444249104,108461911,1192285672,-11079445,1996424310,281602054,1354771286,-401698736,-1070920077,-443850914,442973,-2081649835,1448553196,-1207667061,-1202716608,-1706033096,65535,-15992693,-1070922379,1442891497,1464909867,16777114,-1070901760,91658832,-125108224,-477098,92641872,92864512,1443001737,1358951608,365210,71665920,-1001386,10132048,1183383552,-62458116,-1341885180,704834305,826640576,620512906,843417602,620512906,876972033,620512906,860194824,1852871,-1983894784,1166607941,-2000672246]},{"sector":16,"data":[1166554693,138790709,-396886017,-1705639861,65535,1356351113,383403661,-26032,-11141120,-6629258,-1962934017,1166662214,-1070901468,238282832,-15841911,28836469,-1070903296,112720,-26032,1166737408,-1956684252,46292453,-326413056,1443163267,721712779,574917056,-1205844855,726663234,-1706012480,1737,1579041929,-1034033781,-1957363710,49054700,1988843095,310151940,-947656751,863797312,-1962380288,537203268,-523520,-947184524,726684313,530206912,-1996488697,-1073013692,-1070922635,1149437931,28844050,-1956684288,46292453,-326413056,1460595843,175541078,-2096857461,1962941564,1962871602,-31989,-4716940,22079999,1342194360,1347469355,16777114,474253568,-16235321,-1983894529,1149830724,306481424,-2096479095,58064895,-1961853813,272906695,1996474482,108461832,182682,1183399936,574882810,1005733513,662052932,-998244316,-230258431,723416319,1996443840,-6663950,184549631,-1207536192,-471203842,-230257920,-14662519,1352277620,-1996488701,1451883590,142016510,-1962510593,1174610500,-11513092,-1248134538,-16777209,-6676876,-1962934265,1144590916,1443396624,201254888,-4688704,1788484724,-1996488700,1451883590,-196703746,-1946790263,-953479100,1183441105,863797490,-1962511360,1174474820,-775451662,-196738592,-624897,1183577206,-162100236,1375732229,-227082416,519578,-195116032,639779979,1183516553,574882298,3374208,1149971060]},{"sector":17,"data":[65065232,1452014662,-1983446018,1451881542,1079005942,1149980754,1355229968,298394,-195116032,509478,-15710977,-1030087564,1442840580,1342177720,-401698729,-947188845,-443850914,574045,1167087646,518818645,-326903666,1988843012,-62470390,2088828927,410255410,142016342,-1207535873,-1202651137,726663170,-1696051008,-62486260,142016342,-16353537,1156119670,-310157570,535137026,113921373,-326413056,1444473987,-955746677,65094,16533191,-263796992,1187446784,-1962934022,-1952906170,-101243828,58053131,-1962884375,1207304796,208961586,-1996384095,-1700659642,-62486271,-1979556725,-1071369657,158711868,721524385,1183448134,39619578,540166134,-1834940044,-28955903,-1030519,1183646324,-1706027278,2298,-1929218817,1343681094,591514,39619328,1077102582,889136244,384321165,20814416,889126912,384321165,-26032,1183514624,-230282776,703219339,1962931270,-230257918,1358841387,737429131,1177287750,1183535354,65065470,1174603334,1183535344,1284217092,-134613212,-61961239,-1056710191,1358579203,1342177720,137882,-443851264,442973,1458342741,184841867,-1207599626,65798143,1577058744,-1034033781,-1957363710,1988843244,2113276676,-137983226,-1962742824,-443851066,180829,1458342741,-1744550262,1614606475,2067530878,1183456892,-549611516,-1744404992,2080438077,71731727,16203160,1033374590,92078335,-337623923,1590070018,-1034033781,-1957363710]}],[{"sector":1,"data":[1424786412,1988843095,-1002009332,-1933818231,79216214,-6664192,-1996488449,-166986170,2078868341,175570689,-16616193,45615734,-6664192,1342177535,748698,-1304000256,-1207273729,-1706033151,65535,226682966,1962882303,175570690,1342177976,59290,830242816,-385649408,2088960295,58654736,-16703767,1183646324,-1706027274,2264,112726,165931088,272927568,1342587947,259226,-1270445824,2117730091,-385646668,1183514863,608437240,1459373705,50742411,-1712828217,-1069118984,-2084415863,91619322,1962934077,39619407,137578486,1996432245,178186,-126419120,-4032769,1996472438,-1065943102,457114,-6664192,-352321281,175570719,1347469355,-1032388784,1354790655,1342177976,737703679,-1706012480,65535,-126293930,105155414,1183434499,1424511158,-1404663541,968246923,226437700,959202443,92255814,-352321096,-1983894782,2088811078,208994357,3177600,2122516085,712310956,3505280,2088765045,729022512,3046528,2122524020,108331194,11304579,2122517621,326369466,3112064,1996426612,-163148534,-6664170,-1962934017,1183448134,166283256,233330431,175570700,-1699580161,65535,-443850914,705117,-2081649835,1448542956,-2096597365,1946161276,71732095,1946165565,1027241737,645136400,1149988587,-1948715250,108954104,1081409792,602429270,-1957041407,-303362436,-335544385,114664,2122441707,1963000070,779911235,-348294144,2243885]},{"sector":2,"data":[624811380,1026650624,-663355354,1912612669,2637095,552326006,3505280,2088765045,343146544,3046528,-1202319755,-11533309,1962879092,28305446,-443850914,442973,-2081649835,1448545004,-2096597365,1962938492,10807555,537165443,2088770677,292814899,175439702,1443195880,-401967873,-2014771930,-1070901760,280522987,1654280192,184549388,-1207599680,48955393,1183432747,1161462,216635984,-1073020928,28837245,721611520,-129594944,276086795,294531,2122517106,74653700,1074022019,-1996208501,1187445318,-1923743492,1343683142,-1207274241,-2091909119,1946220158,1354771202,-1962395416,-31752,727062132,-397407676,-1202323434,-11533309,1962879092,15722534,-443850914,442973,-2081649835,1448545004,-2147060085,1946170748,13363459,1342181560,852122,2109737728,112645,-1070923029,-1191426423,-1706033135,65535,92127243,-352321096,-1983894782,2122579526,1249116412,3374208,2088780916,1047855152,1443527819,74901591,15226710,1448564230,151906391,91602955,-352321096,1354771202,1443407336,161474647,-1980217719,1153890902,-1202323152,1380975617,-386369793,-11141035,1996425844,154134532,1465317515,-2096877592,1946222206,813465613,1443329280,81979479,1465264619,-1995874072,1451882566,813465850,1443263488,-352058696,809813512,28857857,1996443652,-126418950,1577060584,1575324511,1426064578,-326898549,-1957275890,2088962678,57999376,-1962730263,37554246]},{"sector":3,"data":[-385649406,58589822,1023601897,57999872,1023470569,208929281,-2147287831,1946170748,49539377,-1711115009,633,3046528,-488045708,813465602,-385649664,1153827545,1962869045,-26110,1962868736,-26110,2122383360,1963066120,-352210940,-2000672254,1962882884,340036866,1285181470,1442840586,-16353537,-756546442,742689032,-1205189495,-1706033136,3147,176013323,3374208,28312692,-1070988565,170804360,1445098944,-399870721,28379087,707742856,1958820845,1962890759,78243882,712310614,-352062488,1962890779,128837674,74825739,48955824,1149812778,1962890799,75884586,712310614,-2130463768,67176574,1962873972,112642,26261584,1354771280,256744016,2122383360,1963196936,813465611,-1207208704,149618689,3505280,-1070860940,57982987,-1962805015,1183388740,106334980,-1993980791,-771020716,1149962876,2144353050,9562371,556673,-2093058814,2097153662,105286407,116119799,721831563,-125101500,-523041615,-150892499,-129594920,2097152317,-129579259,1962868737,112642,-126419120,1347469355,16777114,108954368,-2096530176,1962935932,25684227,958022795,209585734,1209025675,1963344955,24373507,108954454,721714432,-1207702592,726663169,-538423104,108954611,-1207599872,116064258,723141771,1183392836,1996445190,74907398,-1996404504,1150025286,-28952276,854131573,779911169,1444246784,57796688,-1979824501,1149840452,-397388246,1810563939]},{"sector":4,"data":[959202443,108341828,712310614,1149981163,742665002,-109778864,724192395,-1991115186,1743319622,-230278151,-11137932,1962879604,46852140,1150014187,742665002,-110696368,724192395,-1991115186,1508438598,-230278151,-11138691,1962933878,1443359532,-13863681,-1712783754,-28931326,1445741705,-385976577,-1561787868,813465600,-385649408,1153826969,367722544,3505280,-1964440715,41221888,1342177720,16777114,893699584,776259072,-26112,1962868736,745865002,16777114,1183399936,712310776,-1708362497,2657,216791179,1149917014,1357130287,1191529960,2146991673,880574703,1446802432,1342177720,2112360080,930906112,1445753856,1342177976,1843924624,1025567488,57999875,1040000489,58000385,1039996137,58000386,1040052201,58000387,1593794281,1575324511,1426065602,-326898549,1988843010,340036872,1996443678,74907398,84634,1958742784,105286427,608996249,1183447543,273452030,990268459,50691521,65734212,1593835448,-1034033781,1478361094,-1957345904,-661774612,141986646,297284863,1962889217,106334980,1150009387,-1706012158,65535,49120094,1562371467,313933,1475119957,108432214,1443135115,29222999,1465276246,184863464,-1207601728,48955393,-397361109,2088764514,175374388,112726,-401698736,1600061336,-1034033781,-1957363708,-1957275668,2123040374,108804356,1465255038,-397010453,-952433391,727061629,-947171136,1074676779,301111888,-397410304]},{"sector":5,"data":[1599995912,-1034033781,-1957363708,49054700,1988843095,75401990,1209025675,1354771280,317364823,-1706033152,4857,2084173963,1448834054,-1962566680,-953481660,-1994101513,2089418310,41221894,1342177720,957236363,276697156,-150969160,1284217327,239872784,49019383,-1202667477,-1706033151,5156,721581311,1996443840,1347440894,-26032,1962868736,234396162,-397017088,1599997204,-1034033781,-1957363708,1988843244,837309958,71731973,1443513481,1577383912,-1034033781,-1957363708,82609132,1988843095,105155334,1074676739,738084489,958852095,410256510,2131131449,-25282285,1465257596,184784616,1443198144,7989335,-1070901418,53274704,276576583,1600050559,-1034033781,-1957363708,116163564,1988843095,105155336,1074676739,-113015,1996424822,276666884,-1992294400,1996487238,74907398,1084570,-336033024,108935459,2084117876,957906694,326958718,820533078,793545219,-1053037270,1465255284,1191186152,2147122745,-1956684072,113401317,-326413056,1460333699,108432214,956595851,1434388092,58976342,1300023099,3243136,1962887028,-129594110,-644198378,-1962934253,105130951,-1994101513,1141111366,-28931804,70182998,-1711115009,5089,1358317193,385369741,190028368,1962868736,-159973630,1310106,-639085056,-1956684285,79846885,-1873273344,-326412987,-2082959842,-1957294868,2088766070,2004090929,556675,2088964724,208928784,50742411,994053700,1601963590]},{"sector":6,"data":[-1929218817,1343682118,1330842,41221888,385178,-196704000,28856406,1183666176,-397404426,1962931672,-193528062,391066,41221888,1342177720,2114995257,6600719,-1727632137,1225804939,49019383,-1202667477,-1706033151,1562,141885270,1577143528,-1962742397,1297948645,1426065098,-326898549,1988843016,41221894,385369741,238787152,2122514432,91488260,-352321096,-1950340350,-28931128,610044825,-1056703497,1575324510,1426064578,-326898549,-1004934394,1191118942,1065362952,-2146798336,1962999422,-339727539,71761740,637820612,-467007606,1347537195,1357978,-28932096,638082756,-316010614,1364382251,-1694873975,65535,989611656,-1217070522,91602954,-352321096,-28931568,2113685048,178181,62391275,1575324416,1426065602,-326898549,-1957275898,1183518326,205916938,1589905780,1065362954,-1207601920,1877737471,1191739019,2131786809,75399952,721712128,-1962611776,-1958211516,75400184,-1962642432,721611719,-96040512,1209025675,2131248699,75399942,-2084277248,2080444540,209125310,1443526399,-304945065,585650258,-28931585,-301668266,956712587,75497030,267110283,276576583,-13958539,1979350585,1586293712,1575324511,1426066626,-326898549,1988843010,-28915962,2088828927,1383399475,-16482685,1149979772,71710992,-396999555,2088960512,242548488,74907478,1459352552,-402098945,2122579323,393543428,74907478,-1946427416,1149830214,172263688,1625837654]},{"sector":7,"data":[-955913219,-63420,-1995946869,-396951994,1183515024,-443851010,311901,-2081649835,-1957296916,2088765558,242548787,294531,1183530100,138709254,1962882283,376150556,1284177920,65130768,64654280,1317602894,-27358724,294531,28312692,-1070988565,654073540,1962870664,378378780,-1956773888,113401317,-326413056,1459940483,108432214,-2147189109,1962947452,142358798,28837237,724626176,-13833280,1939479668,-1962934265,-506392500,-628373501,1317654275,-27358724,654073540,-1952970870,477429752,482202,1590135552,1575324511,1426064578,-1957237621,1183516790,105251076,425603,1187448701,-352321530,272927500,2080785977,1183401988,105286406,1575324510,1426065090,-1957237621,1149961334,239338246,1149980744,-1706014704,5985,1575324510,1426064066,-1957237621,2088961654,92143908,-352321096,-1950340350,71732168,-150584277,-1056758684,-796143061,135053355,1575324510,1426064578,-326898549,1988843020,41221896,385107597,399612496,2122514432,92078086,-351910773,105286446,1006519945,108984902,-1980086645,1183579718,1284217342,1358559012,722486411,1346897476,1177754,105120512,1593591433,-1034033781,-1957363706,1988843244,914128900,723284992,1149980864,105130762,611120960,-6664120,-16776961,-6684044,1577058559,-1034033781,-1957363710,1988843244,914128900,-16223232,-6684044,1577058559,-1034033781,-1957363710,149717996,74877782,-1929218817,1343682630]},{"sector":8,"data":[1268634,41221888,1342177720,737965823,-6664000,-973078273,1577137732,-1034033781,-1957363710,1988843244,813465604,1443656704,1342440376,1347469355,-2131383064,1946170748,45635084,-1070903294,-1696051120,914129141,-1710656512,65535,3556550,1575324510,3343042,240386051,779616257,326631427,939065345,39518211,34341119,170721283,452919297,346095875,5177351,122880003,1384382465,395771907,-2054815743,45613315,5767175,307101699,1191772161,179634435,5898247,166134019,5701640,236847107,781254657,26083331,445841409,99483907,6094856,400752643,-2087387135,24641539,429522945,328269827,941228033,51118083,1738211329,90832899,1646329857,388890627,1629552641,327548931,1721958401,248119299,1428619265,167968771,464257025,305922051,4063487,88867075,327687,275054595,1437990913,27721987,458759,395247619,-2068316159,169345283,131080,383778819,1379663873,307625987,884932609,105120003,983047,290717699,624885761,108986627,1048583,27328771,1114119,370016515,1179655,372900099,1245191,38928643,1376263,156303363,541720577,298450947,1380712449,397606915,-2058289151,90243075,1649868801,180027651,2162696,236322819,844759041,285540355,1692270593,182190083,1298268161,168362243,2949128,31719427,1667825665,149225475,1625948161,405012483,-2072903679,275906563,846397441]},{"sector":9,"data":[1167087646,518818645,-326903666,108461828,16777114,1975520000,-339727612,1354771246,16777114,-62486272,956309665,208930374,2375299,-1593478144,-571801564,-1559869813,1183514656,2401276,-2097151560,-443874579,-900899553,1478361090,-1957345904,-661774612,2375299,-954502144,8198,604423936,-2097152000,11838,870843252,112644,-1070923029,-1962742397,1297948645,-1873273141,-326412987,-2082959842,1448543980,2375299,-2089651200,9790,922686068,129499174,-1070903293,-1706012592,319,2244227,-12487680,-1711267274,328,1049358475,250282028,-6671105,1442840831,-402340221,-947190771,1975520079,574029803,25532928,922681344,-6684638,-1560280833,113704994,44,3016391,547422209,2532096,-352321096,1589652226,49120095,1562371467,1478413133,-1957345904,-661774612,1460333699,641138518,50771968,1354771280,-275099568,-16777214,-1711267274,589,-24383349,16402119,2924800,-336050551,41714457,-15698944,76282438,-1996335989,39160069,-2096838781,1183515846,-129040392,-579485685,2242303,169370,637978368,-1593835520,1178140716,-955878150,16788998,-96040192,-2097140573,11838,65536884,-2090902013,-443874579,-884122337,1167087646,518818645,648140942,49120000,1562371467,1478413133,-1957345904,-661774612,1460202627,141986646,2375299,184841216,721778166,11725248,56485974,-15992693,1048799861,1962934306]},{"sector":10,"data":[4372501,309328,-26032,1183383552,2270204,922688235,748748834,-773795584,263648,1354771280,16777114,-62486272,16547459,-1705593484,65535,200951433,-1962576704,38272984,2242303,233370,-1577547008,117375020,-523173844,-133963567,82523529,42461271,-1996077429,-396950971,-1073020102,37554804,1024818176,276758531,721581567,-1202696000,-1706024832,65535,2242303,195482,772196096,-1962934016,1599997510,-1962742397,1297948645,503317706,1430622296,-1910575989,116163544,-13937065,2375225,1996437876,42330118,-166989685,2088971636,460652546,2506371,-15436800,-1207949770,-11533563,-1070922122,-6664112,-1962934017,922681980,1033502754,-1962934269,-2090901817,-443874579,-900899553,1478361090,-1957345904,-661774612,-2097140575,-443874579,-884122337,1167087646,518818645,1996478606,35514374,242532363,2242303,236954,112640,-1070923029,-1962742397,1297948645,503317194,1430622296,-1910575989,82609112,608076630,125042688,2244227,721712384,-2092962880,1946158718,108461841,-1962814744,1962281968,80118762,922685163,-6684638,-1560280833,-259325910,2242303,16777114,2924800,-523116335,2754051,-1082735045,-2090990453,-443874579,-900899553,1478361090,-1957345904,-661774612,-16222465,-6683018,-2097151745,-443874579,-900899553,1478361092,-1957345904,-661774612,-15958399,721712063,-15602752,1996426358,142016266,-1710852353]},{"sector":11,"data":[65535,-1962742397,1297948645,503318730,1430622296,-1910575989,82609112,108461910,288410,1958742784,674663185,105286400,-402642781,-963968902,-1070923029,49120094,1562371467,182861,1167087646,518818645,1448597646,-1962379637,-1705638274,65535,292864011,1153623,-1073020928,1048774516,1962934312,-339727612,674642218,957510912,1962944574,112645,-1070923029,-352321096,674692882,51230720,-1070901680,-778414256,1577058308,49120095,1562371467,313933,-940799147,11782,675185408,359923712,2635519,1342376120,2504447,1347469355,47258,1575324416,-1873273149,-326412987,-1579643362,-310181848,535137026,1439386973,-326898549,1988843012,41714436,1447785472,184592872,1027830976,913571841,1946157629,212263,1962882165,-26110,1183383552,-27883012,654073540,-1710852097,65535,-1711115009,65535,-1711115009,65535,1962871019,-26110,-1956773888,46292453,-326413056,1459940483,973024086,1962943038,-339727612,75399999,-625664,-1711267274,200,-166989685,915007348,1049296938,250282028,1178141835,-1962642172,-2095715386,-947190586,1975520079,574029803,15636992,-1108672512,-443850914,180829,1458342741,-1962641781,146692,54335860,1025078272,427032704,1946190397,8600842,45615732,-1207112960,132841473,-352320584,1589652226,-1034033781,50336514,117702657,50350080,117585921,50350336,134563329,50349312]},{"sector":12,"data":[17047808,56659200,17062912,56660480,117574145,50332928,117582081,50333184,117503745,50333440,134556673,50364160,117796865,50333696,117808641,50333952,17080064,52772608,117607425,50335744,117783553,50336000,117774849,50336256,117781505,50336512,117448961,50340608,117690113,50349568,117495553,18176,1167087646,518818645,-326903666,-11118812,1996426358,113502218,1088177801,-4716939,13101567,-388204801,-259324040,1946223862,-83962,-167725847,1954602054,48412696,1183666206,-1873799454,62580750,-1201441472,-1763049477,47364096,1183666206,-1873799454,61007886,-1947700160,63407102,-402098433,92866396,184702345,-1207601726,1810628604,-402229505,1166608200,139823366,175489547,-16615937,123004981,1183572459,71665928,-1996077429,1996425797,516393948,-26032,1183449088,-498693924,383927949,-26032,1183383552,1958743008,-599329252,-15633024,905904757,-16312856,1979648117,118286342,-337623413,17596422,1591494283,49120095,1562371467,576077,1167087646,518818645,1589958798,126494214,-1779937128,-153580794,91554055,-335544904,142016267,-1710852353,65535,-1962742397,1297948645,503317706,1430622296,-1910575989,149717976,-401967361,-661977504,1963001846,-149499,1996438763,-26102,1183383552,-61437446,661963275,435701447,-1005393152,1191180894,126494458,-16359740,-2010773946,-129594617,200822527]},{"sector":13,"data":[736392640,-1207702592,-310116353,535137026,113921373,-1873273344,-326412987,-2082959842,-2141845780,-2097148570,1946158718,209617670,721712649,-1200231488,1727463439,-153580788,16912007,1187507572,-1207959302,1727463439,-152007924,33689220,-1535109772,-990051826,1191118942,277121544,126363138,-939899137,64582,956712587,259914310,-1710459137,65535,201082505,-2096267328,2097216638,-96040168,351000823,-16228668,1183451206,126363388,-335919361,-96039989,49120094,1562371467,576077,1167087646,518818645,-2141792114,-2097149594,1997080702,1030159,-1962383625,243791576,91488770,-335544392,1030181,-1962383625,243791576,-327941886,-150990920,-259323802,34507904,105286146,34636936,-2090942421,-443874579,-900899553,1478361092,-1957345904,-661774612,-2147160957,-167768730,1954548806,178181,163054571,206473984,8380801,74694971,1206632491,-401836289,-661977892,1963001846,-18427,1187460587,-352321284,209125153,-16228668,-1977219002,-1705994233,65535,125091851,-134461813,-15668264,1183579206,105840390,-713703413,-2080618869,-443874579,-900899553,1478361096,-1957345904,-661774612,1443294339,484992,-2147072266,45614452,-1207702784,1317732361,2145485062,1942043392,-18427,1996438507,73066502,83292299,-1149951,-6683018,-1996488449,4061766,-2132904832,1190592036,309690374,-16419585,2078802804,192216836,-402033409,1183515762,-310157574]},{"sector":14,"data":[535137026,46812509,-1873273344,-326412987,-2082959842,1719665900,1996423179,142016266,-1710852353,65535,1039943305,343179264,-401967361,-661978132,1946290166,106873863,21495590,-2080618869,-443874579,-900899553,1478361094,-1957345904,-661774612,1443163267,263779883,-1947273472,243791576,108265730,-401698730,-2092499172,-428077570,49120094,1562371467,1478413133,-1957345904,-661774612,-1956975485,1451951686,-1505326840,-945269111,1702982,1589906155,-1505296474,509478,-244085,-1072956338,1996483701,175570700,380389005,35055696,-1995815287,1183648854,-397404500,1183384197,108347562,-369098824,1589903857,-1438217722,-167278554,1954589254,48740361,-1945483639,1996426334,175570700,380389005,30861392,-1995815287,1183648854,-1706027348,65535,2080375357,-1404663105,-754404968,-1966568480,194555206,-61961784,876462475,2137682994,825310589,842861684,1029141553,1031024949,1187484395,-1006604548,1183516254,1200170748,1204233729,637536784,168970183,1333798400,1996423436,175570700,380389005,23521360,-1995815287,-1039463338,1290357621,-62470399,-1008009066,754730695,-943920383,39386182,1187493355,-352014084,-62470226,-1477768864,-1057208633,-945755374,629210182,809343467,1037136947,-395037640,1949642813,959856078,266986868,-1404663041,1958742936,4537618,1312623988,1027175424,762576975,-939592215,195654,-1979294012,-2010710970,1996424263,175570700,380389005]},{"sector":15,"data":[14346320,-1995815287,-1039463338,-1058467467,-62470400,-722796543,16533191,-1966216448,194554950,1024292032,141819959,1946171453,-22484692,133973703,106873856,654067338,-16562296,1996426358,-1404662518,-1914154986,172394752,185357961,-351701566,-62470284,-706019320,-1733540214,225755147,1946169661,3292475,1676217716,106874110,25133862,-953584274,195654,-1979294012,-2010710970,1996424519,175570700,380389005,4122704,-1995815287,-1039463338,636160373,16533191,-2133464320,1951444094,-31397629,637951684,-16365625,1204233983,654311176,-16103481,-2084557825,-443874579,-900899553,-1957363704,49054700,185091723,91556422,-342245333,140428388,4161574,1589965428,126494216,184436360,-12225344,540805190,977012852,742130804,1589912437,130426372,-16520448,1589905478,1065362952,653554720,1946173312,138841019,-351644021,-28931556,887640216,73319426,637814527,-1360328824,637820612,-352319546,1575324636,1426065602,-326898549,1187468808,-956300804,65094,637820612,1352140682,-1744699672,1946173757,4406549,1279079284,1026782208,947126352,-369098824,-222429047,-62470398,1015021568,-1003523023,1191117918,126494212,-924299112,1144669697,-337152769,47365847,-490807061,-28915966,-689241984,-956106562,8453702,2122565611,276037884,-16490812,-1977220026,825071623,-96040704,637820612,1966751616,71761667,16416387,1589941884,1065362948,-2087881472]},{"sector":16,"data":[1946222206,178181,163054571,-96060672,2011759485,-28931073,1593460227,-1034033781,-1957363708,71759596,-1190103936,1183514639,8332548,-1543118345,-1190270206,1183449103,-136041980,34473441,-1034033781,-1957363710,4241644,1354771280,-1710983425,65535,-796143061,-443826133,180829,-1275051,-6683018,-1962934017,79846885,-1873273344,-326412987,-2133291490,-16774810,1183451254,-1705994234,65535,-1962742397,1297948645,503317706,1430622296,-1910575989,157712600,142016256,-1710852353,65535,-1962742397,1297948645,503317706,1430622296,-1910575989,157712600,142016256,-1710852353,65535,-1962742397,1297948645,503317706,1430622296,-1910575989,124158168,108461824,16777114,49120000,1562371467,182861,1167087646,518818645,1719720078,1996423175,-26106,-310181888,535137026,46812509,-1873273344,-326412987,-2133291490,-16774810,1996425334,-26106,-310181888,535137026,80366941,-1873273344,-326412987,-2133291490,-16774810,1996425334,-26106,-310181888,535137026,80366941,-326413056,71731798,1022397336,-1207599775,48955393,-1072971733,-963967884,1150092267,-443851040,302170717,-1811873024,1509951236,-1107229952,16778752,536937216,33555969,-1375665408,50333184,66304,67110402,-402586880,83887618,335610624,100664840,1392575232,117442051,-1543437568,134219267,-436141312,150996488,-1040121088,167773704,939590400,184550920,1543570176]},{"sector":17,"data":[201328136,2097218304,218105352,-1644100864,234882568,1375798016,251659777,-603913472,251660039,-218037504,285214471,0,1167087646,518818645,-326903666,-1957275852,1183518326,17841420,289215348,-385649407,322765149,-385649407,-706150149,-1607008511,112643,-1202695527,1385758722,-26032,-125108224,58064651,-16722711,1459855414,16777114,200837888,-385649153,-1705574207,65535,-1996480507,1451871814,1975651280,11266307,-1982970229,1451875398,-700004642,-597769139,651576970,-1977219280,-700043257,1021069055,1458205978,1342177720,-3115265,-1030041994,-16777216,1996476534,15768270,20971520,-1202270650,-11534235,1996476534,-25906,569049088,34342654,6600790,19634768,-1202716672,726664193,1996443840,-831062064,85658,-797507840,-1697745153,65535,-834272960,651058884,1964654464,-6662201,1459618047,16777114,28857856,-390574080,-1070903293,-6664112,-1207959297,-538378239,1689802240,-6664192,-1996488449,1654773830,-666486528,1996481908,67811544,34381904,1346954282,383796877,23435856,1996423168,67352792,34381904,1346954282,1347469355,96666,-663290112,1342440120,-1924087765,1343676486,16777114,-1952388352,20777542,1033400832,125173762,1946182717,1452075801,1342177720,16777114,28857856,-6664192,-385875713,2122579829,57934344,-37655,-1207721930,1385758721,-26032,-1706033152,65535,1456227977,16777114]}]],[[{"sector":1,"data":[-767129344,-864616624,16777114,-763953408,1342177720,1354771280,-26032,-11141120,-6630794,-16776961,-6632330,-385875713,-1070858467,-310157474,535137026,181030237,-1873273344,-326412987,-2133291490,134206,922690677,28836768,1347590400,-1202667477,-4521985,-1706011905,65535,34342598,218547712,-310181886,535137026,382422365,-855637248,-117440255,-83819721,1157629953,-1375665408,1509951232,-218103040,436207873,-1107295432,-1358889215,452985600,587202817,-1728052395,-1308622591,805307733,-436142334,-452984063,1056964864,50397989,318768897,939524864,1459683074,-1560280320,1476460289,-771751168,1526791936,-1560280320,1543569152,-369032448,419432449,855638528,-436142334,-654245119,754976769,1040253696,1006634752,1359020800,1023411968,1610679040,1040189184,151061248,1056966401,-1006566656,1006635009,0,0,0,0,1167087646,518818645,-326903666,205949822,-1995549045,1451852870,-1907964026,-1039466496,-2031549579,-401698815,1183385368,-1773761150,1183535126,-1873788798,113895438,91537419,350863403,-2074164222,25133094,641168698,211289994,6368544,1351108233,1692929680,1958742790,-2075753509,-1773761278,1183535126,-1873788792,109963278,175423499,-1870498049,104982542,1187494635,-1207959148,1203375140,1183399938,-1839822448,646209220,1962950528,16181507,-1399172346,-1996488702,1996458566,-2072576122,719851152,1975520006,14346499]},{"sector":2,"data":[9717447,-1975088384,-1954265597,1183417942,-1839822448,646995652,1560248192,28837237,721611520,-1807316544,-7715189,-1072985522,1589918068,1200236176,-1941534465,74721852,91569980,26494663,-1937866752,-2146667428,1949273214,-1937866746,-2095483590,1962969726,112645,-1070923029,-2087827831,1962972286,-11998968,-342864129,-1904311377,-16550912,2122551366,108331150,9076355,1325349500,-1872837488,-2012771802,-970552250,1589903367,1065363076,102069248,-401698733,-1073019531,28837237,721611520,-1807316544,-7315772,1183486022,126363276,9731715,-337050763,-1904311298,-16550912,1996460110,209125134,-7178497,-6647690,-1879047937,93513742,-1971173751,1090814534,-963230072,-1925540026,1343658054,1082279563,-401698736,2122515767,460587016,-15698177,1996425334,142016272,378947213,8185936,-6664110,-2097151745,1946195070,176063329,-10783744,1996427382,67483658,1354771280,664424528,-16777214,1996427382,68073482,105286480,1354755877,-15829249,1385827446,-2130706430,1074792038,1996432500,175570704,1342443192,-2147072373,-1202683700,-4584412,67071,1375785603,59087440,1183514624,49120148,1562371467,838221,-2081649835,1187452140,-16776962,1996425846,-26104,1183383552,1183666428,-1706027276,65535,737691275,1183446086,-59310100,16777114,-297367296,-1149185,1996424822,108461828,-1710983425,952,1357923977,186522,-330941696,2122524534]},{"sector":3,"data":[2138374398,637820612,-1986525302,1996485190,-1202518290,-1706033145,65535,-2081667543,1962994814,-59310246,-1695648001,65535,16678531,1325351284,72285956,637820612,-13760570,1586168910,130426372,72285998,637820555,-13760570,1586168910,130426372,72286044,637820555,-12974138,1586168910,-230258172,-1962440666,1451951174,-2094863610,-1962474426,1325396038,2126515184,73319436,637814527,1968979840,-28915734,1005125633,1575324671,503318722,1430622296,-1910575989,2028766168,209125206,-1207535873,726664201,1347440832,239770,-163149568,92127243,-957759445,209125120,-1207535873,-11533302,1183708790,-1706027374,65535,-1986902387,1452051014,-1706027380,65535,-2138552695,1968935550,112645,-1070923029,193873545,-13863744,1325369926,-2005496952,646602436,1560232134,764640896,1191140725,-2008088694,646602379,973162438,38258214,-1958155520,1451985478,-129594996,1392137865,84122192,1183383552,-1004934256,-2144929698,661925439,110120703,-26029,1183383552,-94991880,9469571,1589961087,-129564680,772261414,653811339,-16775226,1996425846,-1938358520,-1702201601,423,1586382475,-1962742397,1297948645,503318730,1430622296,-1910575989,1022133208,-62470314,1996488703,-26104,-1031077888,1342719625,1342600959,-1710852353,65535,-972267893,-1929367225,1343671366,-16222465,1183516278,2145681418,-401698736,-1073020496,-1813445772,1354771200,-1719729480]},{"sector":4,"data":[-6664110,1342177535,346266,-96040704,516179655,-360807680,-11176914,1183648374,-397404468,-1073020737,1190545012,762581217,-1950068993,1120322678,1988844492,-868053564,-1483059178,50331648,1183433798,-1012794,1120323142,1988845004,-868038970,209125120,-1916504437,1343671362,408474,-62486272,-229757,1183649404,-1873799476,22603790,-1938505717,-1694861569,65535,-17006973,1190596724,1950351370,209125129,-1996459544,2122579014,209059580,-1207142657,-1705967618,65535,-972267893,1392587079,1347469355,16777114,142016256,-16353537,1996425334,-26106,1183514624,-310157572,535137026,147475805,-326413056,-150803325,-2147481530,1589907828,1200236036,-1981535723,1183186502,-1207602168,48955393,-443826133,442973,-2081649835,244322028,-1996382488,-1070861754,-401698736,1183383925,-129579274,-112802213,-96025043,-79247840,-62470611,-45693347,-196688128,1105920000,-1863026945,21751822,1692929680,-196723967,28847221,1996443648,-25868,-1073020928,1183456372,-2009004812,1996487238,-129594108,-6664170,-1996488449,-1072955834,1191119740,-163148812,2096383545,-227082313,48762512,-28931327,-1034033781,-661913598,-1957345904,-661774612,-1960945834,1586367574,-853887986,105810721,-1912056181,1320421982,41034189,1595916339,49120094,1562371467,707149,1167120524,518818645,1465309326,106335006,-1274519922,-1272853222,1914817871,532689666,-310157729,535137026]},{"sector":5,"data":[80366941,-1864856576,-326412987,-1948742114,246679126,-467000883,-1962742397,1297948645,-1946156342,1430622424,-1910575989,1455759064,-851725306,855798305,-310173760,535137026,80366941,-1864856576,-326412987,1457032734,2126782039,-65075704,168183435,-1274645056,-31339239,-1328510272,-141841828,567101364,-1070398862,-2090967265,-443874579,-900899553,-661913594,-1957345904,-661774612,567089588,-310123478,535137026,-1932833443,1430622424,-1910575989,106335192,567086772,-310123478,535137026,46812509,-1864856576,-326412987,-1260876258,706858265,49120228,1562371467,1362765,43319299,939065345,69599491,5046279,86573059,34537727,92340227,34603263,102891779,65537,91226115,34668799,72614147,5767175,68026627,5898247,76546307,327682,93454595,393218,45416707,5963784,49020931,941228033,79888387,11337983,9371650,203685889,42205187,1629552641,75366659,1376263,41287683,5964031,32178179,6029567,34275331,6619391,80281603,928645121,0,0,0,1167087646,518818645,-326903666,-1957275894,2088962166,74711050,317456171,108461910,16777114,-774337792,945554403,2122923915,-1707802628,142,1183434499,-94466824,2122915051,-128021508,-467007606,10525264,-1073020928,1191117940,1191135224,2117683192,-2130682,11639348,1183514624,-2090901764,-443874579,-900899553,1478361092,-1957345904]},{"sector":6,"data":[-661774612,1443163267,-16222581,-26060,1141047296,-62486254,126539915,-1705974742,65535,108314635,18760843,889128518,16777114,105286400,49120094,1562371467,313933,1167087646,518818645,-326903666,1988843030,-62470392,250281994,1979469567,-339727612,-26073,1183645696,1448089322,1342243512,112720,-26032,-1073020928,1183570548,-754404882,105253856,49120094,1562371467,100977229,553648896,151060224,1308623618,855703296,-100662528,-1207959296,872481570,134219520,1711342336,150996736,-436141312,486541056,0,0,2,524296,16842754,0,7012414,8323179,6488157,62,1745838350,2081389338,1628003677,443753476,142545012,1779391355,677799435,1749558349,2050036031,1677818645,978913802,1968513365,1697188135,1778611216,557845773,1545091155,1728467570,1864200734,675556719,1260741700,1261980207,424299044,461244525,1947760955,1645245720,575088738,1394688002,1496734262,393614169,1383208825,1964602640,30996,660483149,1177177863,778915107,978395970,1930583903,155871745,208342117,1768496489,1345608251,1061816617,557852747,1897996621,688481552,326765677,1530028128,930304824,1583231582,1811968531,239823621,426446434,1077041689,1031428649,625616456,811479362,1964733488,259792213,2105348988,1210862911,843128936,641806150,1628656981,621112832,1092098157,1428575008,1014256701,844966237]},{"sector":7,"data":[1730750784,1913350150,243013970,1281431677,1846245660,828249108,1545025369,1445281849,376642646,2048163126,743251229,1578448217,1379228466,690576190,1113721965,2081908494,896561173,1430024529,640046393,142348401,1695180072,896692759,1934833236,1244616765,4868646,1164247909,2081911829,626474876,1327447884,1228627498,527448634,1765349751,1762028038,862019850,1327316306,1244022570,241642283,2064859232,644705562,2035889479,1378967082,511392057,1828999280,811885571,576405329,1260672514,724261180,140906081,1830715176,67397894,809902935,1294103893,1548109346,2004055149,1802398835,1802134381,8336,1767108608,25978,1867378704,25974,1665789984,28271,1868230704,-2147455633,1816391776,6648687,2004055149,552624256,1937009920,1852601207,1784900971,-1874853888,486555652,1124109568,0,262148,3932240,65636,8605858,134242560,402661376,25856,-2108686080,6225920,2228230,6619164,1342308359,1509949570,771762176,16782592,16777216,32848,2004055149,1802398835,1802134381,1953387784,1701606505,1917126244,561147762,107695874,1668178243,1090874469,1953656674,1952797189,1225161074,1919905383,1700332389,1867383411,0,1828716544,1937208180,1852397343,1937207140,1146309920,1293964111,1768448865,1142973806,1852141669,1953391972,1174798336,1095586383,50331988,39016787]},{"sector":8,"data":[1167087646,518818645,-326903666,1187468840,-956301080,63046,1183432747,-599356962,-1980610935,1183439430,135063768,705709706,-1058516764,273057799,705578634,-1259843356,239503367,940590730,108334662,-385873992,-1779956778,-330921721,705578634,-330941468,45614706,62974208,1342202040,-1727790920,312102994,-1996488703,-1072957882,1187448949,-385875480,1996424035,19503862,1183383552,-564753956,-428555765,705578634,182997220,-49911,-1073018500,20778366,-948866048,583750,-1207749911,1183383555,1292792,387575,-364476160,705578634,-1070903068,112720,-362902704,-15894529,1996480118,133425372,292864011,-1996488008,330954822,99219200,1183383552,6338794,-128021680,-2020875311,151322720,-754732800,1372138472,-26032,1183383552,1975520242,-10557176,-352320328,-227082298,16777114,-666466048,198858377,-385649214,1586233156,138906602,2012729899,-96040691,722552715,225966034,-1947318647,-768929465,-1995606025,931914838,704989066,191363044,1200343179,-1311667450,65065733,-896841530,-151530965,1325647875,-61961981,166217415,12904704,705578634,1996443876,-461963282,-1417589,1996426615,-596181026,185020648,-385649216,1183514755,138808070,1183518836,1356396526,184966911,-385649216,1586168355,222792682,65955575,1183441990,-62485516,1945388601,-398014712,82378756,-196703486,-337230199,-362902730,704792458,-1949791260,1177282118,-137221124]},{"sector":9,"data":[-1992277775,-768872378,-150992711,-1328903183,-1948200447,61993054,1992616915,534232,-1947842817,1200351838,-196738291,2011579963,-95486020,-1417589,1183573062,256326116,1187455863,-16776988,2122575430,359923962,184960651,225708102,-1149185,-1073019298,-2065104011,-92372223,-385649664,1187512094,-1979711256,-467005882,-361300144,1342226616,-1207584024,-397410302,-1061680911,1996443648,-596181026,-1957642197,1200286302,-2132530678,-397344828,-12777006,-1206225665,-11534144,1996480118,112860,-18352,163113040,1979711293,-398014712,485031943,-431569151,1156251650,1342226616,-2197761,1996479606,-431584282,146395691,-1947076864,112842,1586225363,-754732570,-663304981,705202726,1959298541,-542715,-1070923029,157870160,1962934077,-431554640,-772252021,1619495907,994066432,-1401428410,1342226616,-2197761,1575541878,-49912,1187482484,-1962934042,1452006470,-532248098,-337488247,-530660339,652232447,-16775226,2122442310,1912733926,-431568916,619380736,705578634,1996443876,-596181026,1342177720,65422987,1342230534,1074081000,1021903733,-431554561,-1947574645,105351991,-523041359,726189571,1006041042,-998775226,185222795,527699014,1342226616,705578634,1996443876,175570700,-2197761,-1612129162,58015750,-1963001111,-467005370,239503952,-361300144,-2197761,300473462,91570183,65554119,-599356672,1960723979,-159973624,267162,-159481088,-16223232]},{"sector":10,"data":[563803766,-1962934268,1175181382,-16223014,-6622602,-2097151745,1946219134,-227082488,16777114,-398030080,49120094,1562371467,838221,1167087646,518818645,-326903666,-950642912,60486,15746759,-1983894784,1183441990,138840802,-397351894,1183318935,105286152,-397351894,1183318923,1357130246,-955959064,-983994,1342202040,-11485141,1939537014,-1996488704,-1072959418,1859193205,-58817540,-2115930880,67173502,1996427890,9083632,1183383552,-464090654,141935115,32261831,43182336,-24906197,-1202160381,-1202716520,-397410144,-998044471,-773944572,-1900544029,10532864,210298960,-1979399037,100665414,-1598553952,-1070903296,147253328,1038632585,158728191,-1989917555,1240067142,1979058946,-394854647,-1995803160,1996485190,164817128,-1968968890,-467007418,105286224,1354771280,-1804545,-974593418,1958742789,-330905848,300482563,105286146,1346429994,1342226616,-1996286232,-1072960442,-102169740,105286145,1346429994,-1996305944,-12715450,-955746817,191558,-1962811415,1174663750,-768915206,-1980074249,1183510086,1357130246,-1804545,28893814,922701824,-152567600,141901826,132925127,28240128,1342177720,-1006249752,-1977163170,-532248569,74760202,896918844,652369604,2129792,-2144991372,1977950335,-1946801372,-297387578,-957807753,12630016,-461963440,-1914538241,-397409724,-1073019348,-347721611,-1908998178,-461963520,-387811585,-998047358,1975520006,-1875443943]},{"sector":11,"data":[-498693376,98850443,1347551264,-2097059352,-1073019196,1187448948,-385874452,1589903660,1200301794,-196703974,977767206,736511625,969313270,1601629766,-1980479861,1183578182,-163149338,-1962785651,-125945352,2117666164,1174631926,2122570731,326434808,1342226616,-1804545,1996481142,94562552,-2080881015,1962931838,12630035,-461963440,-1935617,-1981221258,-163149563,-491901,2122561141,-1334444042,738164713,10008822,10532944,183494736,-1962621821,-1846818,-1207923017,-397410144,-998045010,105286148,10487296,1342218424,1174897128,2080636547,-2081018932,1987904510,1342216376,1342218424,-2096450328,-561314620,-1207966767,-1598553970,1944604672,79987466,542346,-1207918586,-1202716520,-397410128,-998045043,-773944572,-1900544029,11581440,172812368,-1979399037,100664902,-1598553936,-1330098176,-2071310336,-467009388,-461963440,-1935617,-974586762,1958742791,2017758470,1191032041,1183548907,-465171486,1996425332,66427632,2122514432,141820144,-1695516929,1027,1592542859,49120095,1562371467,313933,-2081649835,1187448556,-2097151748,2097937534,73319499,637814527,1183319946,140413950,-1979169025,-96040953,678768188,2122520043,360516604,-16490812,-1977220026,-28932089,-2130950401,1948319358,140413925,-1979169025,-96040953,955926154,192216646,201096835,28838516,-16258304,-1611924410,-443826133,298697565,-1060060976,1073742629,-326412861,1175109683,-1274710780]},{"sector":12,"data":[1075957017,1575324488,-1275067710,841075993,-1957313564,72780524,567086772,-443816910,180829,-1259566251,72780342,41034189,-443817481,180829,567086516,-326412861,108432214,1317668638,1854625032,1317545476,-850152448,-1956750047,113401317,-326413056,-1944168618,-1976388391,567084630,1975520152,-1896641779,75402177,-67100487,1595909363,1575324510,1426064578,1465314443,205949470,-1962385723,1451951694,634213636,-796172965,486539448,1595867136,1575324510,1426066114,1465314443,205949470,-1962385723,1451951694,650990852,-796172965,486539448,1595867136,1575324510,1426066114,-326898549,509040136,567095476,-990165368,872154238,139365065,326566460,1622692126,869830144,-203304458,857692581,-1983869185,1183644798,33602558,-1978906998,-22345114,-1817472061,-164366110,918937230,1686765688,-110721020,-1979425656,1720190820,-2142194440,41226235,1686656180,-96025081,-1979337724,1589905478,208571132,1451884977,175540750,12063693,-1273335296,138840580,-1963172156,28380270,-1978771830,332204662,1929380024,-95486456,-4667531,-111244545,-1979425656,1552480350,-75595769,-988842238,2126775414,-1966525444,-506394546,1595909619,1575324510,1426066626,1451945099,369080324,-58715187,1948152321,66879521,397678451,-1341892982,1930677507,117211143,-286587019,-352321096,178189,12060907,-1207702784,-443809793,180829,-2081649835,1465275628,-1927342562,-678701442,-972522099]},{"sector":13,"data":[-1269366779,-14562022,-387447178,-1928915203,-678712194,-16398810,105236006,130515720,-1430192388,-919388240,-1426912335,567087540,75402078,-617350137,-1409283143,41164860,178970507,-502434624,-1430244366,74767115,-1442742387,-947183866,1208239659,-443851169,311901,1458342741,241077079,-16776776,1996426358,74907398,276299600,1979582696,-52055959,-1442545980,-1440757885,505399171,-1190627643,179044363,-1442614080,82049250,-1426906960,-1442271201,-1274361981,-1960719060,-790572863,-754732576,-1413084448,567093940,129821057,78766474,-963975470,-1039474479,-1413467221,1586211755,1996439566,108461836,1342469887,-401573889,1583349189,-1034033781,-1957363700,861361900,21466587,-15960321,1996424822,-397193212,1249246589,185104011,-1272744458,173443894,567132926,12466290,6339328,-1946157128,992731919,-2096663350,1128469446,2126836203,192777476,-67103815,-1070357261,113578,-16091393,1996424822,-397389052,1583349081,-1034033781,-768409590,2105655691,1913648653,-136261369,132842101,-1056708399,50492919,1438844485,113765515,-65380,604259978,10396163,-1034033781,-1957363710,49054700,-1667147946,1718894592,10356470,-1268812798,-2011050704,915144518,1586167964,-1965935864,-1292203241,-11054334,1996424822,-396996092,1968962789,-24947911,-2145553151,1912864638,-1260811241,1121422130,119415245,194566542,637892032,-15251514,-1965935781,-234680489,-11074894,1996424822]},{"sector":14,"data":[-396996092,1583348905,-1034033781,-1957363706,-1957210388,1317735038,-12392444,104460939,661913756,1996445520,108461832,1509909480,92943477,1358955194,142016336,1376155391,-62658479,-1994427047,-1006593010,-1960442274,226328832,242421750,17057527,-1325108224,636015364,-796192769,1930249529,-18429,-443851169,574045,1458342741,209619799,-402239861,-225706280,10225209,1464870772,-16091393,-102233994,1198873086,45745546,-11513600,1996425846,-397323768,1968831449,-1676768974,71731968,2105659955,1930425869,-1241206505,105314288,108265473,-522992941,-755562773,-755514845,638082756,153489441,1606431488,1575324510,1426066114,-1957237621,384304246,-1270807301,1174702394,6076486,-1270479735,-1205744313,41091071,-1956720393,46292453,-326413056,-1274784117,-1205744325,343080959,-628371209,973176704,126487157,-397393620,-1070335268,-1034033781,-1957363710,72780780,-851246920,-167415263,192221377,567097780,-4717197,855829503,1575324608,1426064066,1452010635,-851790844,-18399,-789118350,-1034033781,-1957363710,72780780,567089844,1317788467,139889414,567103156,24363915,1575324488,1426065090,1452010635,-853887996,-1260702943,-1960719025,1208054723,-1034033781,-1957363710,106335212,1183464884,1931595012,-18429,-1034033781,-1957363708,106335212,-851246920,-2146602463,1317660641,-1194773756,567100161,-1962518901,-1040841650,-2147257216,1018461921,275915213,-919349109]},{"sector":15,"data":[567099572,125027211,567099060,-1946157128,79846885,-326413056,567095476,1451973556,1929591814,1124120585,326312397,1317747892,1914817796,-1260877046,857853246,-1207702592,-443809793,311901,-1947432107,-919403434,-851246664,-1962184159,1102316630,41034189,-443826125,180829,-1947432107,1317735006,106334984,1183466164,1931595012,-18427,-443821941,574045,518818645,-989176181,1068762710,-855355765,855798561,-443867200,574045,518818645,-989176181,1085539926,-855355765,855798561,-443867200,574045,-1947432107,1317733462,140413702,-851312456,856322593,-851397431,1942063905,-18429,-1034033781,-1957363706,73305068,1946437375,-851528695,-1157402079,-1014235137,-1034033781,-1957363710,-1101572372,-24379393,1996472371,-1578610674,-1957399810,209125360,-401967361,1198718636,-987826037,1317733974,-1260483836,1914817855,-473396439,-1260418290,1914817856,1958820637,521661413,12115595,1914817879,-1193309426,567105281,-1070398094,1461653739,-1946188824,209125368,-1191256600,1448148991,1476359144,1493135336,-443851169,836189,1458342741,73304919,-768358093,-851312200,-1960545759,872057840,-1194183735,567099906,-896854670,-695742325,12111751,1914817858,-1949922554,-1207571497,-796131329,-443851169,180829,1458342741,140413783,-1958608712,1317733462,1914817798,859878408,1931595209,-18429,-443851169,442973,-1947432107,12059742,-1960719017,-1207602239,-796131329]},{"sector":16,"data":[-1034033781,-1957363710,140413932,-1962652021,28837462,-1205744297,57868288,-1946157128,113401317,-326413056,-1958543176,567084118,57917835,-1946157128,46292453,-326413056,-1958542920,1451951182,1931595014,-18429,-1034033781,-1957363708,1431787244,-1962510709,119407742,-2131938308,1966735740,205958152,-345953248,-853953532,-19887583,-1270807358,-1151882438,76164956,812959546,745849658,-1934965878,-1929934887,-1260876096,1914817863,-2015785405,-1178586377,-1359806465,1166681679,1959213823,1958951431,-1430025725,-678704845,1958951596,1975990788,-851819226,1508056181,1959394895,1341819879,-12219866,-596327622,-210421188,-339725480,-1014329230,181267370,1011184832,1022195232,1021932603,1021670444,1021408380,1021146155,1020884028,1020621886,1020359714,1020097627,1019835485,1019573309,1007055457,67270522,-1430126880,-1871368644,-510999042,-1997812482,1946287488,-1968867580,92808929,-930364282,-544498973,-651437525,-802465717,50546573,1572996033,-443851169,311901,1475119957,-1962467754,-678755202,-4603853,1336865535,2123102091,-1176532218,-1359806465,-1948649663,-202142722,1589808036,1438866783,1448602763,2123040542,871860998,-17984,-146690318,75402201,-1527523445,1600045707,312157,75694339,983041,123994371,1114113,77725955,1179649,123076867,1245185,0,0,16843264,4194816,33423680,16779264,0,66050,-2147454974,130818]},{"sector":17,"data":[131080,33554432,33554689,23593024,150995708,256,33685504,1879179265,-50147328,589826,2,16843264,14680576,133761376,33558272,0,20644153,23200095,2371,1112359497,1127108425,1224756559,1329876290,1329802835,1329791053,1312902477,1329802820,7077965,8519799,1799,6044225,65535,1667845421,1869836146,1461744742,1868852841,1293972343,1397703763,1702380832,1769239907,1092642166,1768714352,1769234787,28271,1397052175,1313818963,1297436229,1129271888,1141506056,1314345545,1330794564,184550467,1213481296,1346653783,54742866,1313213184,1380926017,1330794580,184551747,1263749444,1346653783,37965650,1313213952,1380926017,1196180564,1129271888,1192099847,1313428549,1314344774,1330794564,234882371,1397966163,1464749897,1380992078,82767,1145980421,411468,0,0,0,-1020541813,-1996153181,-1996485594,-1560277466,-1598554102,856051983,1347572434,16777114,190383872,-352094784,-1598320557,-795936241,1409016715,-6683055,-1912602369,378283712,-1993998332,117441062,-6661287,184549631,-1993771840,1459621902,1381172822,-1705983949,65535,-26025,-1073020928,244321908,185125352,-368741184,65535,-850591816,-1873273311,-326412987,-2082959842,401081580,-838416638,-956301056,64582,184960651,712247366,637951684,1946173312,4241441,8435792,-26032,1183383552,1958743036]}],[{"sector":1,"data":[-11526643,1996425334,-26106,1183514624,49120252,1562371467,313933,-2115204267,-956264212,65094,503369912,18528336,431509534,-1924129279,385840774,8435792,33790544,-1073020928,-588709003,-129579264,-2037579775,-2037776522,-1769144462,-1142292620,1923007488,126494463,-9402744,74719292,108342332,-9271553,-1631262741,-2144927886,57999423,-1962895895,-1983738685,1451883078,-2146767876,754938046,1191121780,-94452486,-2012771802,-1728089978,1996496957,-94452506,-2012771802,-1073023418,1191118708,130426618,1958149888,1924595711,-125926401,-1207602176,65797950,1358905272,164506,1958742784,-129579249,1187446784,-352321026,-96010493,653942468,1948270464,1065363188,-972786388,-2144537018,1965880958,-129579259,1183514625,-61436934,-9271671,-9136503,-9265468,4161574,954794868,13678847,532172830,-1202708991,1344143646,-9009523,-2135404522,-6664192,184549631,-385649216,-2037579629,-2037776522,-1769144462,2028732276,-9265468,-2012771802,1023373446,1006924832,-16354004,-335580538,1923007719,1065363199,-1957334016,-1983738685,1451883078,-2146767876,754938046,1191121780,-94452486,-2012771802,-1728089978,1996496957,-94452506,4161574,1191118708,130426618,1958149888,1924595711,178431,-26032,1183514624,-61436934,-9271671,-9136503,-9265468,4161574,2078868340,-28931073,-1017256565,-2081649835,1448553708,-1705983957,704,-1207837021,-1706033148]},{"sector":2,"data":[65535,721735331,-6664000,-1996488449,-1705978810,65535,735463049,1996443840,-25900,1996423168,571606,50174544,-459079680,-696844542,1342180024,199834,48931584,-1193904385,-1706033138,794,-1177127169,-1957625844,-25872,-972881920,2097152829,-905525498,-16777216,1183700598,-1706027304,65535,-1546107253,1183515422,13149152,52299265,-1545451893,513869090,263427,-16556381,62445174,573503232,-1037330171,-930350895,-150991432,-1727716818,-120470997,1346421035,1073946273,-6664128,-1560280833,1996423878,-6663978,-1929379585,1343682630,1347469355,-150993992,-1727716818,-120470997,230213771,573503232,-1037330171,-1054082863,52339024,-56995776,-16777213,1183700598,-11528456,-1711153610,65535,385369741,1354771280,243792,86126327,-775804007,-1194816520,787939341,731448610,737726914,513888449,-1706016765,1104,-1915324673,1343682630,80623359,16777114,52338944,-775804007,-1578071048,731448610,-1946627646,-129593864,1448562710,-150993992,-1727716818,-120470997,230213771,573503232,-1037330171,-1054082863,-1924085973,-1706032828,65535,-1915324673,1343682630,80623359,308378,52338944,-775804007,-1947169800,-788192706,-129593881,-1923657706,-1202651324,787939331,731448610,-1946627646,899272,86126327,-775804007,734079992,1150111943,-1147514878,-16777213,1183700598,-11528456,-1710961098,972,-1697220865,65535]},{"sector":3,"data":[1342182328,410266,1975520000,112645,-1070923029,184554147,-955747136,189958,722594560,12079296,1347590527,327322,48669440,-1202667477,1385791234,-26032,-1834811392,1173507,74825739,65781803,1577058744,1575324511,-326412861,1443163267,16664263,4241408,1751120,129407568,-259325952,-1996298591,1153896004,-1593835504,1149829594,16300042,-1944697719,1153898588,-939524350,-64444,1344194187,361626,1975520000,11856131,-1996431176,1552684612,184862488,38061824,1153957887,-1946157308,-1706025274,1451,58048523,-1207923223,1149829354,408718358,132295,-16628537,71616511,-963903489,-811970530,184549381,-1201048384,1149829348,408718358,-16628537,71616511,80216063,-963969013,261771294,184549382,-1203407680,1149829336,408718358,31078143,-1728052808,-6664110,-1996488449,80153668,1153892355,-939524350,-64444,17974471,340051712,-963969024,-6664162,184549631,-955943744,130630,-26026,1183514624,-443851010,1478411101,-1957345904,-661774612,-951915389,16829446,440320,105814608,1319305216,374786,-26032,614662144,-633929982,1226753,-1102672560,515395606,-694530048,184549382,-385649216,1996423654,1354771206,16777114,-599357184,1354771280,-4698032,12079359,-1365618679,184549382,-385649216,1996423614,1354771420,381568653,131119184,16824400,-26032,-1073020928,-1612119179,105286401,-1878859101]},{"sector":4,"data":[65988622,31078143,1342183608,503490232,2013264,116628048,-1073020928,2011759477,-633929983,1882113,32946256,683167774,278548480,184549383,-385649216,922681690,498598362,649613312,-1202708989,-1706033102,1837,58048523,-16695831,-1207838154,-1202716649,1344144224,1342190264,477850,1975520000,18934019,31078143,1342182584,503498936,3323984,124230224,-1073020928,65602421,-633929983,1161217,78952528,347623454,-2070261760,184549383,-385649216,922681574,616038874,-1866969088,-1202708991,-1706033087,65535,58048523,-1711224343,65535,77596358,-704198912,-956301311,16969734,-2113485056,-1207959551,-1588592576,-523173698,11967056,-1633484800,1975520004,9758979,503376568,19183696,-1070903266,1380974778,1347440720,108461904,-633929904,-1706012671,2063,184882851,-1201048384,1344143588,503391672,-1161811120,1347571712,1347440720,1342600959,31078143,983191632,-1560281080,-1073019702,-524796300,-1202708992,1344143654,817545259,1347441232,-11513776,-11532682,1342298678,-26032,-995950592,1958742786,-26093,-6684672,-956301057,52230,112640,-1962742397,1297948645,1426064074,1996483723,31373316,178256,142776912,1996423168,80656388,178256,143825488,1996423168,48674820,178256,144874064,1996423168,59947012,178256,145922640,1996423168,52344836,178256,146971216,1996423168,86161412,178256]},{"sector":5,"data":[148019792,1996423168,13154308,178256,149068368,1996423168,48543748,178256,150116944,1996423168,48936964,178256,151165520,1996423168,46577668,178256,152214096,1996423168,56539140,178256,153262672,1996423168,1226756,178256,154311248,1996423168,13285380,178256,-26032,-443875328,180829,1167087646,518818645,-326903666,-62470364,1183514624,31105806,16402119,209617664,-954895104,67142,-16091393,244320374,-1980296472,116128326,-401836289,-4653335,-17665,1996443730,161323534,245563392,269912325,-18427,1392508858,242679632,636058,38839040,38934153,-1157627976,1347616767,-1710328065,65535,-1996154205,-1593500650,101385486,58000656,-1593784087,101384784,57999954,-16728855,-1207838154,-1924136938,1343675462,1342185144,419738,1975520000,10479875,503371960,-599356080,-1070903274,1375784122,1347440720,1342203064,1347469355,1343125247,132422224,1183383552,1958743036,-868318389,1148518400,818819,-1410846347,1958743030,105301765,2122514434,527696122,519718539,112720,26843728,-1073020928,1187448180,-16776698,513473142,-16777210,1996487798,-26106,669712384,-1202667477,726663192,1347440832,-26032,1048772608,1946157260,-58817778,-16223232,-6620042,-2097151745,1946221694,-868318452,91553792,-352321096,-2084558078,-443874579,-900899553,1478361098,-1957345904,-661774612,-16061309]},{"sector":6,"data":[-1711087050,65535,-1191557495,1344143568,503378104,19380304,1183666206,-1202710794,-1706033150,2887,209043467,-1191545089,-1202716620,166395905,-1191545089,726663220,-6664000,-1207959297,1344143626,503392440,1354771280,731802,78553856,503384760,19839056,-1070903266,-26032,-291307520,17479682,884494366,-1202708991,1344143632,62410782,1637502976,-1207959541,1344143626,503397048,18135120,1344163870,1342178232,753306,17479680,1119375390,-1202708991,1344143680,385631885,178256,195140176,1183449088,18326268,503384760,21674064,1220038686,-1924129279,1343683654,1342177976,66202,-62486016,-2097080158,-443874579,-884122337,131130,16713085,131076,16713046,131077,16714110,131078,16714133,131079,16714156,196617,65656,196608,16714314,196626,16714362,16973843,197934,16973829,199259,196615,16713616,196650,16713803,196651,16713798,16973868,196637,131087,67070,16973863,327782,16973829,196704,16973854,196663,16973860,329359,16973977,330499,16973979,329337,16973980,330436,327837,67065,16973863,199046,16973875,263051,16973869,198770,16973878,330262,16973865,199445,16973881,199396,16973882,330342,16973866,263039,16973875,262868,16973876,328941,16973997]},{"sector":7,"data":[329195,16973998,330217,16974000,328901,16974003,330383,16973877,329053,327737,16713119,327682,16713151,327683,16713080,16973828,263356,327748,16713041,327685,16714107,327686,16714130,327687,16714153,16973833,328395,16973890,328418,16973892,328867,16973896,262894,16973904,196810,16973912,196683,16973915,262836,16973911,328801,16973905,328717,16973907,262964,131165,16713124,131074,16713156,3,0,0,1167087646,518818645,-326903666,-633929978,-26111,20774912,-2092532224,52798,-4706956,-17665,922701906,-6684198,-1996488449,1451883078,726684412,-1706012480,65535,-231681,-6620554,-16776961,-6683018,721420543,-6664000,-352321281,6809603,-1962742397,1297948645,503317194,1430622296,-1910575989,384599000,-1928694017,1343679046,1342182584,16777114,48406784,1946830393,-364475096,-659009514,-1706025472,791,360038411,-1207273729,726664196,1347440832,16777114,-339727616,112643,-1962742397,1297948645,1426065098,922741899,1622672098,-1202708989,1344144072,1343238584,151706,81152,-1070921355,-6664112,-1962934017,516120037,1430622296,-1910575989,1894548440,-1987033459,1452078662,172395512,1946961419,-1960842437,-986974650,1023438853,461176931,-16097596,-1977218490,-161561593]},{"sector":8,"data":[653674239,1589905288,1065362954,-992447232,-970525090,1183645703,-1706027376,544,284444359,239504128,1946163261,1850680,490563700,-950111232,3208262,31078143,-126419120,-1946781953,-986974650,-134220755,-6663976,-1962934017,1452013126,-96040456,-335784311,44480521,-1929754999,1589967966,1065363194,-1960283136,-986974650,1023438853,461176931,653936383,1589905290,-163119114,-351827930,52869337,-155660565,-993400063,-970525090,1183514631,138808070,-1014282636,1183433356,-61437446,1183522795,96807926,1664942192,-1004831488,1191118430,126494214,-631100,-2010712506,106873863,4161574,1589958773,130426614,-59310336,-1694861569,65535,12992131,721712128,-2096174144,1946161278,273058565,-492764181,1183666178,-1202710896,1344144564,-2131474805,-1706028852,65535,1962934589,112645,-1070923029,-1962742397,1297948645,503319754,1430622296,-1910575989,621078744,1342479523,-1559855896,-1511521076,77374244,-472786805,36091903,-2096731928,-443874579,-884122337,1167087646,518818645,-326903666,1187468900,-1879047940,79489038,-397361109,-6678390,989855999,1963123206,-401698811,2122394437,1963196678,18934019,-1996174175,244379718,-1577087768,1178141900,-15633168,721753654,-1202696000,-1706033151,65535,379602573,85893456,798642206,-1879048189,308471822,379602573,85893456,1134186526,184549379,-955943744,130118,379602573,31504464,-6664162]},{"sector":9,"data":[-1879047937,293791758,379602573,31504464,-6664162,184549631,-955943744,130118,-1985984883,1452055622,-1671510882,-1952692481,-788227018,646220518,641795074,1586169736,-1673068644,973588006,-1996153183,300675654,-6529340,1988860998,-230227982,-2010774390,-228685049,1962950528,-1605988889,1996443670,-1669922914,16777114,-1898411264,1065363138,-1005947812,1191156830,130426524,-1671510948,647775999,-1960179770,1191156830,130426524,-1671525586,647775999,-1960179770,-970548130,1183645703,-1873799520,598599694,-1878173720,188737550,132648592,-1375287538,-16777216,-1929190858,1343681606,16777114,-126419200,-1862633729,136636430,46413567,1347469355,1342177720,279450,-58817792,-2130217728,67176062,922685813,-1070922550,28856400,-191213568,-2130706430,67110526,113706613,188,1312455,-1147535360,989855746,1963123206,112649,-401698736,244328753,1577278440,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,108432214,993904267,-385649408,58589321,755114985,138215474,-385649152,-1073544595,-1476448621,384304816,39840252,503469240,85893456,60444702,1442840579,323226,38267136,6831747,737181185,280514752,-1070903296,1347440720,250089104,36432380,-26026,1183383552,1975520250,35383555,-26032,-1073020928,922686068,12059362,-1070903292,-1706012592,1364,-1694861569,65535,-2097023767,31806,-353827980,-26111]},{"sector":10,"data":[-488046592,1488897,1354771280,16777114,-603535616,-16777215,28838006,-1070903292,-1706012592,65535,-956187415,16899078,142016256,370586,-62486272,4372560,1354771280,361626,-59310336,1342194104,-1705983957,1428,-1191414017,-1202716611,-1706033144,1463,909749739,57999390,-16681751,765069430,-1996488698,-11469754,721428022,-929410880,-1996488699,-16769482,-1202258826,-1706033144,1597,-397361109,244323698,724056296,12624832,-16463709,-1207778250,-397410303,922688444,-1070923068,28856400,-2003152896,-1207959546,-1873805311,664528910,25312899,-385649408,922681609,-1070922552,346482768,956366057,1962983990,15984899,1206390416,142016257,16777114,-62486272,-1036583088,1354771200,413338,-1036613376,-59310336,571478,-26032,244318208,-1878467352,195356686,-397361109,922686690,922682052,-1070923656,112720,-26032,244318208,-14183192,721601590,-1202696000,-1706033151,1061,1342177720,182980240,-939079897,-2097151996,98878,-1070921868,367546448,-401698796,1743454496,80151751,80151788,79168720,80151730,1111295175,-385649408,528481789,1962949949,-24647421,2080390717,4144446,-1175911553,4275710,1290339189,1026354174,394199113,2080393277,-36706045,2080392253,4668698,384369535,1024519167,57999434,1040040425,58001360,1593684201,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112]},{"sector":11,"data":[425603,244319605,-14232344,-1711094730,65535,1358710409,-14868760,-16595914,-6620042,-2097151745,1946158718,1354771208,988286608,49120038,1562371467,182861,1167087646,518818645,-326903666,306086662,796131328,-1727953759,-120470997,-1577433463,731448096,-1980182078,922745926,1183646434,-1706027270,65535,-362753,-6620042,-16776961,-1711041994,2021,1342177720,515226,49120000,1562371467,1478413133,-1957345904,-661774612,-1705983957,65535,48641791,16777114,49120000,1562371467,1478413133,-1957345904,-661774612,17464963,1048785012,1946157240,-1140406510,-956301056,47110,335988480,-1962934016,-2069690810,138840833,-16572253,-1873803658,67954702,113713899,65720,12861059,-16157696,-1711225802,65535,-397361109,113709814,196,-1962742397,1297948645,-1946155318,1430622424,-1910575989,49054680,-1957341354,1988824190,-1950338294,-1175942184,-422510560,-392833071,-1818951574,-1828690456,-287178732,1432210827,-1962508604,403749353,3664018,1960083,1697941,-1070350285,2116771242,-947171578,-310157729,535137026,147475805,-729133056,1509949928,-355405174,-355407152,48818896,-2133423616,41160674,-838991695,-897528542,-2133775824,57942266,-1012219254,-2044215278,666899140,1438893190,1452010635,-854674428,-1947981279,46292453,-1864856576,-326412987,-2585058,1996426870,242679564,-1710459137,65535,106349854,567089844]},{"sector":12,"data":[-989180277,1320422486,41034189,1344258099,-15829249,1996426358,209125134,16777114,-310159360,535137026,181030237,-1864856576,-326412987,517508638,-1274652987,-1272853222,1914817871,532689666,-1962742397,1297948645,1426064586,1465314443,72795422,567089844,-1274521915,-1742615279,-1956749537,146955749,-1864856576,-326412987,1457032734,2126782039,1183579144,1975519750,-853953530,-1967063519,-1436766000,-141877498,567101364,1996428146,142016266,-16091393,1301940342,855638025,1583292352,-1962742397,1297948645,1426065098,-987829109,1589905494,1258338308,-1960894003,146955749,-326413056,1443949699,1183516247,-1073337590,922196224,1183384314,-1983892496,-1897267642,505318144,-1947994365,1124124702,-1023153199,-1946532215,512487494,-470351120,-1996486651,1183579206,-98661392,65271554,100924998,-523173696,77465091,76279947,-150989125,-1898411037,28837446,662709760,1073837072,-2081143159,1586039235,-129594122,1460075403,16777114,-230258432,-15960321,1996487798,-126418950,-624897,-6622602,-16776961,1325399110,-2001420,1325399622,-1961724920,104595014,57869050,-39191,1491726406,1583286271,-1034033781,-1957363702,183272428,2007302,1962950205,73319446,-1727558874,49290891,512488439,-470351110,-997191189,-1960442786,-397409721,-1073013627,55050612,-1996439546,513932870,4078848,1589911157,1200301572,120268292,49290891,-1723284733,-1958677513,-150799842,-1877873693]},{"sector":13,"data":[637820612,637945739,1342326571,1075594472,25304715,1929272875,2126723928,-1983673598,-1072956346,-996062348,1958742784,-129595068,1183432755,112886,1342994175,16777114,507413248,360005120,-15960321,1996488310,-126418948,-386500865,367787643,209125264,-100609,1996487798,-159973384,16777114,-443873536,705117,1167087646,518818645,-326903666,142016274,385238669,67738192,95944704,-6664192,1375731967,-26032,1183383552,-6663952,-956301057,62022,16008903,142016256,384976525,128227920,1996423168,-227082490,-1695254785,65535,-16353537,630911094,-1996488692,1996484166,-163148538,1996443670,-25872,1996423168,-294191354,16777114,-260636928,16777114,49120000,1562371467,313933,1167087646,518818645,-327034738,1448542336,-150680415,-1325063634,98620163,1183383560,52339074,734147481,178626,-1036781357,1183433259,138841084,2105689657,80519441,-1962601821,1183416902,56533498,1183532011,535816,572427161,-754732795,-1946421277,33457136,28837245,-1962743040,85107654,86126327,-523041871,-1996486651,-861799866,302383876,-1952888827,-150662642,1580136441,-62521085,503439544,221813328,1183383552,787955960,514000162,-128021758,31492038,-1807315712,513888278,-1706025467,1219,77610624,-2094042112,121918,512436341,2139096350,259260417,378816141,2144336,781864990,-1929379827,1343657030,503619768,-26032]},{"sector":14,"data":[1183645696,-1706027372,2693,86126327,35522051,-1551874423,1183515168,-2142895230,989857797,746391622,-1727848799,-1037319629,-754974023,734147576,-1580692542,103482206,731448094,66638274,-2042197567,-1980086645,233538630,1090274955,-2042197696,142886599,-2008627456,1183514632,-2008643320,59131531,-1996284410,-157185466,-96061182,-123664267,-62506750,922702708,-222821662,-1202708990,-1706033151,3670,-1727848799,-1037319629,-754974023,734147576,-190625598,-234436862,-1962932222,-157025722,-62485758,-16582493,-1207626186,-11534328,-16583626,1996487286,1354771452,952986,-1975088384,-1996487675,1183551046,-1840871162,-150854495,-1941534248,50873995,-1996348410,1319211078,-1840905982,956503713,276137030,956504737,141920326,956504225,1182041670,48379647,503518904,112720,246717008,381616128,-2072605437,371066654,-1515870945,922689445,922682570,922682134,446759704,369502979,480333827,403057411,-1070903293,249862736,-1969160192,-1908000511,-1902047115,-1840891647,-1935603595,-1874446079,922700148,-2001206558,-1202708991,-1706033151,1527,-1929279297,119442550,-1524689378,530949541,46413567,-7571713,1183551094,-1941558384,-1840870576,1351501355,-1705983957,65535,80230143,1579107816,49120095,1562371467,313933,-1275051,-1711094730,65535,-1710983425,1856,-1034033781,-1957363710,108462060,-1710983425,1875,46413567,16777114,1575324416]},{"sector":15,"data":[-1946155838,1430622424,-1910575989,451707864,-1593419946,1183383746,12886522,192200715,-1946401143,184669726,-352094757,-1960931234,-1947479557,1443621875,-59310249,-386238721,-2092040107,-277020418,-544522773,872177294,-1928915210,196732030,514191872,-1946209529,1489347,-259268105,-1510807087,521599115,-1176209779,-1510866933,-1070335093,1996445520,-92864516,1325404392,119521397,-310157729,535137026,1439386973,-326898549,106386968,106860062,-1156954485,-470351850,118943883,-1175945587,-1510866933,-787855733,1183400160,140413950,1450427195,1958951755,1489689,-670833673,1394495518,-402360577,3997791,-16548608,118947398,-1947697523,381419078,115603200,-11526569,1088947318,15616,1183521917,1489162,-125050377,1183516446,172395006,-259268105,-1510807087,119446251,1988960022,172395496,-150989127,-789017631,530969321,-1956749561,146955749,-326413056,503732054,-1005947195,344589918,638640768,1947207670,112649,292934154,-4707349,1976699647,71732004,1962951741,164004639,839500675,975613156,1124562183,-176832502,28313579,-5242249,8448408,1962952253,112668,638012555,1913081659,-1962314260,992347468,-512621233,-335544392,4537820,28843381,55347968,55524134,-394933390,637619339,1912688443,870152128,-2084901952,-829748794,1017963570,168064046,-1946716736,-2081190954,-24442426,775728166,-1073085324,-561252747,648868491,208996154,1975519811]},{"sector":16,"data":[-1947104267,-9704993,-1744360922,1583286047,-1034033781,-1957363702,183272428,12861059,-950111232,65094,12850827,1183432747,-128546314,-1577433463,1178141142,-1958248966,1452013126,591352,1183535186,591350,-610643886,-1962934263,1452013126,-163150856,591126,-694529966,-1996488692,1183579206,-62506498,1183516286,-28931588,-335919361,-28915786,1183514625,573503486,-1194816763,787939333,731448610,66638274,-267482680,-1715369214,-1037319629,-754973767,734147576,-754732606,49325024,-150991688,-1559944658,163054316,573503232,56402693,-1017256565,1167087646,518818645,-326903666,-950642934,98822,-1073297664,-956301312,313350,-599883008,829685761,1342193848,1342210232,16777114,-62486272,494190603,503369912,16824400,683167774,-1957683712,1344207942,1342210232,16777114,-1002536192,1299447808,12850827,1183432747,-128546314,938210859,653680324,1963984886,-1933341926,591298,-1598533550,-11526652,244382838,184571880,-1089506112,495649154,-472840705,77479563,1183003017,960894710,2130826806,-599882813,242483201,16547459,1996425332,85760764,1048772608,1946157442,1354771207,133097552,46413567,1342177720,1578028008,49120095,1562371467,1478413133,-1957345904,-661774612,-2096436093,121918,-1310129291,108954368,-955222784,2623046,2122320363,276049654,-1005828353,-1977217954,-163149817,-361381878,638344900,1962950528,19130627,-1962129665]},{"sector":17,"data":[1183385158,-128021512,1962950528,17819907,1191117803,-128021512,1948270464,4161781,1183572852,240552716,-1980086647,485227606,720782986,1372138468,21797456,1589903360,121120506,1191121525,-129564678,-1963434357,-163149817,-663412676,-1963434357,-163149817,74719292,158711818,-385875528,1191116979,-128021512,1033373578,-227082208,1589938155,1065362952,-991857664,-1977218978,-163149817,1987362826,2768280,775765108,1029338112,276037695,638344900,1937049400,-15972609,-739571642,-1006090497,-1977217954,-163149817,1534377994,-1082905028,-351516929,-159481670,-15698898,1589906502,126494220,183912072,-991267392,-1977218978,-163149817,-1753956342,-1821102532,-351779073,207537386,775913510,-2144949644,393543743,1589945835,1065362956,-1005816576,-2144991138,57999423,738150889,49120192,1562371467,707149,-2081649835,-1667148052,-62486268,-1560000885,-661977956,-1207966767,-2098724314,-1438216716,-1070903274,-401698736,-1072958181,1183520116,77374460,-472786805,36091903,737435880,-15340608,-1207770570,726664192,1347440832,332954,112640,-1034033781,1478361092,-1957345904,-661774612,10415233,31506006,77340299,-2020940847,1090781734,-968489848,-968476156,1187381252,1187446678,1187383452,1183645853,-1202710882,1344143428,1416090,-1773761280,-2037559274,1343684452,200571112,-1923779136,-1979746682,1452066886,-1928401974,-1929417594,-934921263,1325337715,-933313336,541032486]}],[{"sector":1,"data":[1589963124,1065363144,-16550880,-2037528506,1183448940,-61436678,-1949809013,1178192470,-1005685766,1191180894,126494458,-347732856,313063,49120094,1562371467,1478413133,-1957345904,-661774612,-1923945341,1343663686,-1873756117,-199628786,74760203,317440043,503652001,-1371108016,-124104682,-1207959540,-310181887,535137026,1439386973,-326898549,138840864,1946288189,33635668,37555060,-385649406,803799238,-499712254,-26110,1048772608,1946158258,35449091,956440737,58459206,-16641559,1183517302,503720708,417878018,30974723,58189904,6555335,1996423169,-26102,-337051648,1681818369,57999360,-2097028631,307774,-672595084,75399937,-1588888576,1178141216,-2092729084,2080376446,52339005,2131117625,71732021,35522091,46524496,-1577564535,1178141144,-385649160,-12779102,-16288513,-397407626,1996423953,-129594614,1342298275,-385678104,1048772998,1962869208,175570698,30947071,-956108568,-16656378,23915007,6569603,-385649408,113705314,100,16777114,-666991872,58064641,-16691735,922684022,-1092091432,108954370,-1593082624,1178141470,-385647098,1421345074,-1588584958,1344144670,1374618,-196688128,1048773205,1946157528,30974254,-1946532215,1065415774,-350194688,-528580599,-15764480,1586230342,-2012771596,1547493446,1325394805,-92371974,-1955171072,130479198,388995584,1183383552,-27883012,16777114,-163149568,78776007,-6684671]},{"sector":2,"data":[721420543,1444674630,-1949791234,-628361658,2128231321,10610947,-935655556,-1729559694,-498692864,-1070903274,-1202696112,-1706033151,6056,-965427189,65306241,-1926794238,1343676998,16777114,-498692864,-6664170,-352321281,-195130455,1962950528,-11015933,-369867009,1183711057,726669026,45633728,-1202696190,-1706033151,65535,-428556277,78776007,244318208,737129960,1421365440,726670850,-1706012480,65535,309641227,48379647,1342439608,1347469355,346921552,244318208,-336599064,-1308178673,-1207959548,-1706033097,1225,-1034033781,-1957363704,1793885164,-1136753834,175374336,1326723,-385649408,1996423408,74907398,16777114,1958742784,14608643,-1207404801,-1706033144,3015,-6664110,-16776961,28838006,1838829568,-1929379829,1183422022,-61436678,-520206649,-1005458687,1191180894,-25785350,-1963047169,126363140,-2130813301,-411762625,-368956,-970524090,513875975,-28931835,1589907947,-96010246,-100725,76217926,-1962440666,1065418334,-2132314880,303166,1048787828,1962934748,505318196,25133061,-1005947904,1191180894,130426618,-28915876,300614816,-368956,1988885062,-28901378,-2010774390,-27358457,1962950528,-94452505,509478,721975039,-928952128,731463680,1358483906,378947213,-1916564656,-1054108082,178231888,-1956773888,146955749,-326413056,-1593381757,1178141986,721714436,-951129152,130630,1074077345,-1946401143,1065417822]},{"sector":3,"data":[-349867008,1952201735,-62456049,-1963172213,-96040953,-311050230,737953419,-150659578,990192174,92144710,-335657333,-60912880,1946173312,-62456061,-335657217,1575324606,1426064066,-326898549,75399956,-1593281280,1183384866,-1587090434,-1992293090,1183576134,-230258428,2122328555,259260652,-1947187457,126546014,1022117512,-1346212,2122576462,326369522,-2131730805,57933887,-1947187457,1065414750,-1948748544,103542854,787940638,1183384866,-226589698,-1206750208,1344144544,1152922,787955712,1174471970,-28931074,35522051,-1913370999,1343682118,35534591,-11485141,922743926,-6683874,-16776961,-404224394,-297367052,-163148464,-6664170,-16776961,1996424822,-185931538,-1034033781,1478361092,-1957345904,-661774612,-1960645501,255659078,1026454528,477364244,1912733757,33766734,1996441975,1996443662,108461832,737888488,1273731520,-15829249,244320886,-336513560,242679790,383665805,-26032,1996423168,-562626802,383927949,-43063216,-1928431873,1343675974,16777114,-3872000,1996426870,175570700,-16222465,-6683018,-2097151745,-443874579,-900899553,-1957363702,108462060,-1962840088,-1073019834,1996424820,5105670,-1034033781,-1957363708,-1962518548,-1962907634,512314329,-472842136,1715374931,-1948318976,71731991,-1343092962,-1031057585,45832363,1714880256,-1705816064,65535,-16750941,149423222,-1956706560,46292453,-326413056,-1003028650,-204412926,-11472757]},{"sector":4,"data":[1676149878,-1003028736,-639085054,-443851021,180829,-2081649835,1465255148,-486257013,-1003028693,-207296510,-1946270071,-486512626,-1946580207,-1392482762,1358853887,1325410792,922744181,1996423876,-207951618,6819467,-1070395677,-16750429,-1711249866,4798,-443851169,180829,-2081649835,106369772,-956021109,588870,1982083,-1724877506,49946251,1183446007,-162100744,-1728003935,1586230263,-1579668488,-470351120,-1946401279,512489030,378209008,-634714846,730863595,1912651782,-1194816695,653721643,33883426,-1948742912,505870273,-28931837,-2080612861,1586037443,-1928915206,1183575678,142844,-28931157,-96040021,-28931157,52299267,-293696085,101086975,438278743,1594294272,-1034033781,-1957363708,6857196,259375115,-1157627208,1347616832,1192346,1074916096,45867217,1714880256,-1705816064,6924,393527307,-1962907997,-788502498,-1948777501,126420038,6817535,-1962907487,46292453,-1864856576,-326412987,1473809950,1745783558,119423232,6700683,-234469749,130124719,49120095,1562371467,182861,-2081649835,1448547052,-16353537,496632950,184549400,721777856,19327424,-1207404801,-1706033144,7395,932859986,-16777192,95946870,815419392,1375731736,-26032,1996423168,112648,407083600,1996423168,-26104,1183383552,922702078,127533766,721420300,12052982,-1461059797,-230257920,104580867,58459340,-1593793559,-285801634,1183400000]},{"sector":5,"data":[86155764,61992951,1077993683,-1191819639,787939331,731448610,-1980182078,1996484166,-163183864,-193527984,-150991432,-1727716818,-120470997,1357792811,1073946273,-25755824,1347469355,13239865,548931700,13416960,1723336427,10074624,-6664110,-1962934017,-553389474,-2020940847,1090781734,-506232,1996425334,13148662,-775804007,-196738056,1183666240,-1202710792,-1706033151,6402,306067783,-385647099,-1589182641,-285801198,1005733513,2097466374,-13047549,-1694599425,65535,-16222465,-402351050,1599995912,-1034033781,-1957363704,216826860,-1727773045,85069451,788003319,1077936990,-1946925431,-140966842,-138245127,-1325063634,1088475907,-163149504,385369741,-163148976,1342178349,1223968395,230182984,573503232,-1037330171,1174665425,263670,-196703408,52299267,1342178053,1706906,108461824,385369741,472554064,-443875328,311901,-2081649835,1183516396,33570056,20791412,1023964162,578028034,-956264983,16807430,-499712256,365861378,1996423168,369531402,-1667170304,80782084,1048779755,1946157174,1980155751,-1711276032,5789,1048774635,1946157174,74907475,-402229505,1183383760,-28931588,108904459,-1996186463,-794690490,-62506748,1996424820,3336444,16678531,2122393212,1963065864,-401698785,1996482678,-801702134,-178722812,125157387,77346559,-1879045144,-390404082,-1034033781,-1957363704,49054700,85341951,-1980770840,-11469242,-402337738]},{"sector":6,"data":[1996488388,71732222,1342492835,-83992,-16443850,-840368522,1575324655,503317186,1430622296,-1910575989,116163544,33310407,108461824,-1862290456,-402331634,85341951,80754431,200599016,-15960640,-402351050,1187512216,-1879047940,-398268402,-2080618869,-443874579,-900899553,-1957363710,49054700,85107030,86126327,-523041871,2114340411,108954428,-2093581312,2080375934,71732016,1578011545,-134613245,-1962601938,105286600,572427161,-1309570299,-136064253,-1980759045,-861798794,2112895748,-339309820,-18429,1575324510,503317698,1430622296,-1910575989,585925592,1024214667,812908559,20797559,-1587383040,-794622820,-1715459324,1996450795,209125134,-16222465,1072170614,-1381378,1996426870,-401698806,-571741330,-1928431873,1343675974,1736346,242679552,-1914800385,1343676998,-240152,1183649398,-1706027298,6809,339588075,1036284928,91357696,1979843133,242679721,-15960321,1996425846,108461832,1748890,49120000,1562371467,707149,-2081649835,1448554220,1024083595,141820417,1946288957,15919455,48379647,2003610,74907392,-402229505,1183384232,-49666,-706149505,80257792,224716880,-1862371585,-72751090,443924491,67651318,28837749,1541951488,-25755654,1342177720,-369505304,1190527144,58000392,-16736279,-706150794,9890297,-16484609,1441269366,-28931838,2147483453,8579331,1342177720,-384536,28900982,-1847046144,-330920455]},{"sector":7,"data":[-1070903274,33732688,28856400,1620725760,184549399,-2082048832,50238,378228852,-1070923580,-1982708087,381211734,-27358464,915137489,687277214,-1949153791,1452003910,-696349228,118943883,-1176859106,-1510866933,-700019425,280514582,-6664192,184549631,-1207599680,48955393,-397361109,1599999242,-1034033781,-1957363702,384599020,1048794711,1946157178,27715843,7997127,1996423169,112646,1354771280,507413328,91569664,-352321096,1354771202,2225562,108461824,1347469355,507413328,91569920,-352321096,1354771202,2266778,2013710080,-256,1183647350,-1706027276,9229,385107597,602511952,-1073020928,113708916,66298,1836743,803799041,-96040191,38667819,504269721,-1543899389,20775674,-1207730432,-89980927,507413250,57949696,-1962899991,-1952843706,-150802418,1876985,2097152317,470206214,-1593835264,787939356,104530682,914162050,50430625,1208154630,-99710055,737801986,-1996481530,1996483142,1354771206,-361300144,586783312,1048772608,1979646072,2013710094,-385875968,1187512149,-1593835286,1183383744,-364475410,49950455,-1063128949,244029696,-101252358,-125048329,1031732795,1005307531,1836743,-2103377919,-100255487,734493954,-1996293626,1996483142,112646,1354771280,1357543167,16777114,2017362688,-1418330368,7866055,-219611135,-1547203586,1178140864,-15633170,721601590,-1202696000,-1706033151,3524,7880323,-2094432513]},{"sector":8,"data":[1040195134,-1063187339,244029696,-101252358,-1063189525,-330921728,-16353537,1342208054,-1710983425,1650,7997127,1599995904,-1034033781,-1957363708,49054700,1982083,-1590266562,787940126,1178272506,-1960477180,-1952905658,-150802418,-97585159,-1949791486,-1952906170,-150790626,63439867,-1996439538,384564814,-335544392,71731996,504269721,66713347,-1996439546,-2103312826,-28952319,1183572605,1575324670,1426064578,-326898549,-1136753906,2037710848,11419267,-385649664,1996423297,74907398,1883034,1975520000,175570754,1342179512,1888410,-1706012160,7383,-1928562945,1343682630,769690,175570688,385369741,108461904,-402360577,1536878252,989855748,1963123206,175570694,-2097137944,47678,1048783220,1946157524,209125154,993690,-737753344,-352321535,-499712238,67155970,1354771280,-560312240,-1962934249,180510181,-326413056,-1593512829,1183383654,-62470146,317390848,-1962641665,1183055454,939459326,-586264,1755446342,-62506752,-443816324,180829,-2081649835,-2091510548,-16746434,-1696005259,142016257,385238669,570989136,614531072,-163184382,1982083,690582846,-90047930,-230258430,737822347,-1952844218,-150802418,-97585159,-196703998,695582731,-1996293471,569111622,688017057,1187511366,-1962933774,-1952842682,-150790642,-196703751,91602955,32786119,12624128,-940554615,65094,184960651,1024881856,796131329,1946157629,212271]},{"sector":9,"data":[71118708,-349211648,-230257912,1183439095,-28931074,12584449,12598915,-953123584,49158,-1955599616,-487853498,-336312693,-196703269,1048828139,1966997534,71731981,49950455,12584491,1183565035,-2081035516,30782,-2103367819,-100269311,-1952888830,-150799858,736753657,1183446086,12624366,2112767545,-297366751,-352272221,2017362713,309657856,25310859,49952299,12596793,914949246,-1063190336,-263836928,201213577,-2089978688,16807998,1996431989,112648,-1070137520,312102912,-16777178,-1070921610,-28931248,787994871,820708126,721975039,-1063169856,244029696,-101252358,112720,592747088,1996423168,-28931320,-99710055,-134613246,-265357352,-1070903294,1354771280,-1706012592,65535,-1710721281,65535,80230143,1577577960,-1034033781,1478361094,-1957345904,-661774612,1461906563,242649942,-1962115445,998855,58087284,1023444457,141819905,1946158397,9562420,112726,1354771280,-1818603440,1442840614,1347469355,-644198320,721420321,-2132174400,-11053568,1996425846,108461832,-335943192,-1070901526,-84744112,-11083285,244320886,-337319448,1183667926,-1706027298,8261,-562626730,-1914669313,1343676998,1459417320,383665805,543201872,-1343553536,175570774,-402229505,-1544815190,1946162237,18103741,356323186,1038448129,91357696,1979843389,-11053424,1996425846,108461832,2131354,-2090902016,-443874579,-900899553,-1957363702,82609132]},{"sector":10,"data":[-1980353706,-396951946,1072226753,1975925504,112678,-6662576,184549631,991458496,1963236406,-28931322,-1946401143,1191181918,-1981558274,1174546103,80492091,1183565948,80520190,1593591435,-1017256565,567089588,1438901290,1183575179,505318148,1220739843,-1946945639,46292453,-1864856576,-326412987,-2082959842,1465265900,-1983892730,-996017082,1958742784,1150963718,-1207959544,-1096613868,1489664,1086055415,1347572480,16777114,12886784,58048523,-1207918359,45809704,-1640562944,-1705816060,7260,58048523,-1560246039,817562782,-1912655104,1996476534,108461832,-1873406381,-519968754,-1962898967,104594502,661848254,507808310,326381116,12846734,-2095114722,381228486,-5967360,-1927283642,1444335734,552078992,-1587942431,335872190,1489664,-1147542537,922681346,1347551428,-26029,-1073020928,-995943052,12493056,-788524027,179168,77477631,-392539312,184549415,-1156418112,-1070399459,1347441488,244338768,-338137880,77505295,12453507,-8918764,-109789173,-1543747957,-996081194,1958742784,30843162,-1157579101,-470351850,-2411623,1375781942,1452954448,-1593835480,-1073020458,-784334475,-2411552,1342479926,678664787,1594294272,49120094,1562371467,313933,1167087646,518818645,-326903666,-2091493508,5182,12061044,244338692,-1193699864,-1706033135,10531,92127243,-352321096,-1983894782,280557638,664424448,184549420,-1207599680,48955393]},{"sector":11,"data":[1183432747,80257498,-1948760439,3999814,1024160769,57999617,-385731607,1183515305,2112774,-840367243,-385649151,138215934,-385649408,222101802,-385649408,-2031549995,-1003028734,178178,1354771280,-369418776,922681973,62390980,-1947342080,624756294,1031500800,259260454,1962944317,8710403,1946167357,-2096370855,313406,251593844,-928971576,-666486524,988349301,1776832514,-935919869,74246148,14319235,-1394015371,-663290112,-1461186928,1975520242,8644867,80230143,-1729622384,1958743026,34072835,80230143,1342177720,-370097176,-928972295,104546308,-1434648190,80217855,1048814827,1966997534,49979805,80217657,103388284,-1897200440,1982083,-1584958146,100861128,104530682,175964546,16972449,-385562618,-928907408,244029700,-101252358,-1056708105,25298491,1508443004,25338367,80257864,-45079,-1878734794,-233445362,58048523,-16677655,-402339786,2062151776,-125926655,-385649664,28836209,-1209511936,-10425872,-1987557747,1452049478,85893510,-335919479,-2074164207,-1954265345,1191180918,637831930,1586169736,4161786,1589962613,130426500,-1928467712,-779319226,1988380217,-2075197684,646209220,1968979840,-2008642070,1312412044,956855686,58033222,-997964033,-970554274,244318215,735869416,1183666368,726668936,-1706012480,6088,309641227,48379647,1342439608,1347469355,610245200,244318208,-371414040,1048772817,1962934658,13101315]},{"sector":12,"data":[80230143,1223167632,1975520241,-21960445,-2080427799,34878,-1427569804,-2012821760,-1962934016,-2036082106,10217728,1962942781,-32642813,1962943037,-32052989,1929389373,8644867,1996499005,-32511741,2122545643,1937050886,8928899,-949193728,34822,-2109832448,1601437697,80230143,-521662832,1975520240,-935919861,112644,-284235696,12861059,-1958710272,721470486,-196703808,-1191815543,512426006,-472841016,77477515,1174481143,-196703244,-1913235829,-259268994,-1910634730,768474,-1927305742,1343675974,8795903,1577234920,49120095,1562371467,313933,1167087646,518818645,-326903666,1048794640,1946157076,67155977,-401698736,297326202,-1952821248,184549409,-1207599680,48955393,1183432747,80257532,-1963964791,-467007930,1347537195,1272474,-1981535744,2122516038,1098121468,2097152317,12314883,2113935933,11790595,-955887873,63046,956615841,58521158,-1962893079,-472779170,956712587,1963075207,-159973621,-1092088176,8907250,-336181505,-1002535977,2121531392,12850827,1183432747,-94991880,-336181623,-939065542,-939116284,-955878140,313350,1488896,80223883,915137489,687277214,-1946663421,1183447638,-195655182,-1963827516,942016070,192153927,-1577695489,1178141058,-1581351690,1178141896,-1205832464,-397410303,922742338,568853704,-935919872,19195908,80230143,1342177720,-1192385560,-2090991615,-443874579,-900899553,-1957363710,49054700]},{"sector":13,"data":[956350625,276563014,-150987615,50526766,989904902,1367278662,1982083,-1591446210,1178140864,-1962115836,-1952906170,-150799858,-1960449031,-1952906170,-150799858,470166521,-1592464640,1178140864,-1962574588,149619782,721700491,1073936902,-113015,-1207778250,-11534332,65601142,1575324663,503317186,1430622296,-1910575989,82609112,25312899,-950963200,16824838,507413248,209010176,721612961,84222470,183173124,-150983752,84222510,1183383557,-1003028484,112642,-59310256,-26032,922681344,1139279048,105286400,184669347,-16157248,-1711094730,9285,-1962742397,1297948645,503317194,1430622296,-1910575989,-1170308136,192151552,12191431,-6684672,-2097151745,-443874579,-884122337,-2081649835,1048773868,1946157242,-2109832351,1517551617,117196487,507413248,896876032,956350625,175965254,-150802271,-62486056,1183520235,-1073337596,244029696,-101252358,49295095,-1946401279,-1962739186,-140966842,-339571719,71731975,12584491,506394432,1183401987,-59310082,-26032,-443875328,180829,-2081649835,1589905132,133572102,-1875217392,-659232754,-1588543445,1344144670,-1962522997,151324758,-1706012160,11012,309641227,48379647,1342439608,1347469355,723163728,244318208,-338108440,105286508,84432523,1183383561,-27883012,2122320363,276049658,-990099713,-1977156514,-96040953,-361381878,654073540,1962950528,1354771229,1342184376,1347469355,-1962522997]},{"sector":14,"data":[151324758,-1873784320,-776214514,1183522795,139889414,1375734021,75400016,-1207602176,65732610,1342366369,2095582864,1575324418,503318210,1430622296,-1910575989,149717976,-1962522997,1183385686,-61437446,1234849874,-352321492,105316099,637951684,1962950528,-2146112524,1949235326,-96040165,972838539,276170310,-1006219521,-1977219490,-129595385,-545956804,-16359740,-2144991674,1316302399,108461830,503351992,803117648,-1073020928,1996439668,108461832,503353016,804428368,-1073020928,1996434548,108461832,503354040,805739088,-1073020928,1996429428,108461832,503355064,10525264,-1073020928,-1070922636,28836843,49120000,1562371467,313933,-2081649835,1465266924,1187445790,1992622286,75416584,792505004,1547437172,1191052149,1975519950,1170679535,640298751,369182088,-732525281,567089844,13780679,72795392,1320470835,57811405,-2147437591,1946209918,9103619,16777114,-1898410496,-1946145762,-164375970,1946172544,1346219381,-1391758015,1967674429,1027386373,179046260,-335841856,-797537821,-1408991548,1950039210,1975519749,1555058422,994828171,58000478,638315343,1979598136,-2010755327,1988755269,-765555504,-2146928955,1966735740,-1404680702,1975519914,1170679546,640298751,-989772408,-919403434,567103156,1992632435,3965136,1992664693,75416584,-1073042772,-953746827,1160707909,21350182,-970570408,-385875131,1187381426,521535695,-1393396083,-76206532,1480932481]},{"sector":15,"data":[2088963189,108348674,147803776,1015100651,209014595,1292008579,1317013109,585827535,1094859905,2088963189,108352514,47140480,1015099883,175458640,1174568067,1317012597,1337197007,-1435295283,13598336,2122323317,57934030,-2080409623,1962988158,-18552573,-973118487,1017906294,1325102378,-1731246454,1094845639,1409434823,1963108352,1124386595,38061903,78118989,80156277,1153914949,-1476377342,-955681528,-951496700,4588100,-1956749537,146955749,-1873273344,-326412987,-2116514274,1442894572,16533191,175570688,-1710721281,13302,2113961789,140428296,2135410214,175570688,3297690,172394752,1342193848,1342210232,3288474,-632911616,343195659,1342193848,1342210232,1853850,-1136228096,360038411,-1202667477,726663192,1347440832,-401698736,-1259745619,175570692,16777114,-1983739136,244320838,-338357784,138870531,638082756,1948270464,981896692,105912063,859740755,-2033778688,65334,638082756,973176704,-1977215115,736373255,-1706012215,13140,1076749354,914786560,-632910849,-1224781794,244383542,-1982401816,-1072972218,255660148,-385649408,244318830,-371913752,1589904443,1065362952,639333678,1543602048,-2144988044,1949172095,38594819,41910310,-385649572,1183515202,173443848,-1983363447,434883158,578039612,510926908,58010172,1006773737,-385649345,1191117342,-933313336,-2012771802,-1073029050,1183570549,-900297784,-1981528439,1177282134,814123272]},{"sector":16,"data":[981896703,-11528449,1996425846,880515592,1988820992,141962184,-12942650,981896448,-1706027265,13619,-12941683,434655254,1975520004,29681923,-1098902037,1952251694,138840860,956978827,292997190,-993505537,-1977169826,780568583,1965964543,-933313315,775913510,1183541876,948341210,138841087,-1995811189,1451870278,-2145260598,805252798,-1098897292,1948319534,949914401,948371455,-931740417,650659583,126354570,650665668,-2037905526,-1073021138,-1635004043,130481976,-632911104,-2037559266,1343684410,-1912851992,385825414,895916624,-2037841920,1307311920,-12941683,-1933293943,1183565398,173443848,-1983363447,552323670,-13713792,-2144898001,553594558,1589911668,-934871096,-1006138842,1191167070,126363332,650665668,-2037905526,-1073021138,1589957237,130426564,814123776,982420991,-1933507585,-1002010158,-339323255,-1001455869,650403524,1965965184,-1001979916,-13465971,-16363498,-1013267338,-1207959500,1344143697,-13465971,1354256406,-1957683711,1344199238,1342210232,1201562,1958742784,-1136227460,-1950726519,-2037786042,1139539768,-13713792,-1960151714,1344191046,-12941683,1553616918,-352321483,-1169752317,-2135269749,-176881601,-2135269749,326381119,-340111617,-1168208909,-1950726401,-1962985290,-16283644,-1946208122,-1962985314,780568583,1975519999,-1168208977,-1962932282,-2037793722,1183579960,-1136227878,-13072757,-338016631,981896515,-1873799425,-96737266,611696651,-12941683]},{"sector":17,"data":[2140819478,721420335,465064128,-1070903296,-2037559216,1343684410,-1427632496,-43062837,517621387,981896528,-1706027265,5841,517621387,896834128,1183383552,-428408862,-1696303361,6625,1038239235,192807039,736386756,-970530210,-1962901689,1344199238,-1673473,530244726,-1962934259,1183439430,-2146309190,805252798,-1098901644,1948319534,-1169752304,-1967497589,780568583,1975519999,-1169781790,-13072759,1191117803,-1168208966,1948270464,516131829,838113872,1586167808,-1962440516,1088064707,1183535186,-1706025286,12918,-1967366517,-259287033,218185926,-13066613,-13070593,-956299322,187462,-1996077429,1187503686,-1962934068,1183431750,-799109938,-1982052723,1452069446,-1983894572,1183438918,-2146112554,1560227518,1183521652,948320730,-15567105,-1946208114,-1962985314,780568583,1966750975,949914590,-2012771585,1023356550,1006924892,-16485062,-1191233402,1344143568,503407800,22853712,1183666206,-1202710808,-1706033132,13465,517621387,848599632,113704960,65898,384321165,948341584,-1706025217,12234,326483979,721541793,-1924115758,1343671366,16777114,-1962022144,1344199238,382486157,-752883632,-939768183,92678,-401698816,2122567920,158663164,-1982183797,1586235462,-58817782,-15830210,1996487798,142016266,904400528,-629243136,-16223232,429578870,-2097151945,1946205310,-1133052152,1805466,-58817792,-1207602626,48955393,-2090942421,-443874579]}],[{"sector":1,"data":[-900899553,1478361094,-1957345904,-661774612,185222795,1024095424,594804738,1962936381,1354771208,-352314184,1354771206,1342184376,1347469355,-16222465,244319862,-2083944216,-443874579,-900899553,-1957363706,183272428,71732054,-1996073333,1451883590,-16520194,1589967942,1065363196,-1946913536,1451951174,-62506746,1589909106,126494460,1022772872,1007252538,-16419748,-538182578,-1946401025,1452014662,-129594882,-335915383,-159481847,-15698898,1589967942,126494460,183912072,-1947568704,1982594166,150897656,-167050113,-1070922635,1589916651,1065363196,-16550610,1183579206,-27882500,-1980217719,65796694,-990099713,-2144928674,-193658817,1177273227,212472,28888191,-443851264,311901,1167087646,518818645,-326903666,172422664,-954043264,93190,1916206848,1882652417,945789441,922681344,922681718,1268384116,-352321536,1812383564,-1962934015,1856178758,138840833,1358710409,16777114,-129595136,-990226807,1183053918,-1960442632,1468737031,24158978,24254089,653811339,-1960441973,1956840023,1981188353,-59310335,16777114,49120000,1562371467,445005,1167087646,518818645,1996478606,175570700,-16222465,922682998,520028526,-310181516,535137026,147475805,-1873273344,-326412987,-2585058,-16683466,-2097057762,-443874579,-884122337,196699,16713021,131083,16711718,196616,16713006,196620,16712958,196621,16717812,196622,16714653]},{"sector":2,"data":[16973840,75591,196609,16723664,16973847,338188,16973930,337689,16973931,336191,16973933,339686,16973934,327861,16973935,333685,16973937,333695,16973938,209433,16973829,207062,16973830,210699,16973831,269546,16973825,269558,16973826,337468,16973948,336676,16973949,206797,16973839,207039,16973840,327905,16973825,206775,16973841,271360,16973833,327919,16973826,211065,16973842,211117,16973843,209417,16973845,327771,16973830,265212,16973972,395556,16973829,397699,16973830,265175,16973974,333590,16973839,335514,16973842,335540,16973843,333601,16973845,209013,16973861,336049,16973846,336931,16973847,269756,16973857,329077,16973978,269707,16973858,330734,16973852,329061,16973981,210621,16973869,196626,16973872,337078,16973857,196655,16973875,339430,16973987,211026,16973876,339495,16973988,269579,16973869,339614,16973989,331524,16973990,339456,16973991,337608,16973863,337634,16973864,210568,16973882,269566,16973876,328067,16974000,336889,16974004,327763,16973877,327744,16973878,331269,16973880,327817,16973882,265166]},{"sector":3,"data":[16973890,269792,16973892,265261,16973893,337460,16973885,197541,16973902,337383,16973886,210578,327759,16711715,16973832,337543,16973888,331532,16973890,331552,16973892,329656,16973893,329647,16973894,210600,16973911,329665,16973895,210416,16973912,335445,16973896,210327,16973913,210394,16973914,336402,16973899,330778,16973905,335458,82,0,-1192457387,1586185216,-2128491260,-1845460766,-1034033781,-1957363710,209125356,-16091393,1996426358,-26102,-987889664,448005206,1317741005,173458696,567103156,-1070398862,1996443679,175570700,-15960321,-6681994,1476395263,-1034033781,-1957363702,1455759084,-853887996,-850414559,855798305,-443867200,311901,-1192457387,1586190080,-1960719098,28836958,-1960719017,79846885,-326413056,-18345,-26032,-1070399488,-6664112,-1006632705,820511870,-18432,-26032,-1956708352,79846885,-326413056,-1261292713,-148779722,1893988321,47619,-402358588,-1956708345,79846885,702720,-657331503,1376189154,-1705572784,65535,-1191705849,-1012203445,-1964209323,2050753606,1631323767,539755122,-1034033781,-1957363710,108462060,-16484609,1996424822,2529796,-987889664,968098902,41034189,1344258099,-16353537,1996424310,74907398,20378,-443852800,311901,518818645,-1274784059,706858262]},{"sector":4,"data":[1975520228,-854543354,532689697,-1034033781,-1957363708,1455759084,-854084604,535046689,-1034033781,-1957363708,108462060,-16484609,1996424822,18520580,-987889664,1001653334,41034189,1344258099,-16353537,1996424310,74907398,80282,-443852800,311901,1458342741,175570775,-16222465,1996425846,25598472,1996423168,74907398,-16353537,-1030093706,503316481,-1006086459,1454638206,41034189,1344258099,-16091393,1996425334,142016266,107930,108461824,-16484609,1996424822,32872964,1599602688,1575324510,1426065602,1996483723,74907398,-16353537,-744881034,503316481,-1274784059,1914817857,532689666,108461904,-16484609,1996424822,33987076,-1957167104,79846885,-326413056,-16353537,1996424310,74907398,140186,1455758848,-851790844,855798305,-11526208,1996424822,108461828,-1710983425,578,1575324504,503317698,1430622296,-1910575989,988578776,1988843095,205949710,12584491,52309751,-1194441079,787939338,100861218,134546156,51553024,-150992456,-1996152274,100910662,134546194,25207552,63325835,83984390,-761069560,13148417,-1037330112,1174665425,-230258226,48889643,1488898,-787718517,-774927389,64553953,-150692322,105251631,-1995942261,1451870278,591306,-1982314871,1183439446,-698971692,775686123,1191121012,-731986732,-2012771802,-1073035706,-1202262923,-11534328,1996485238,-663289894,735331979,1183438918,1754943732,-2097151997]},{"sector":5,"data":[1140900414,-1202317707,-11534327,1996485238,-663289894,-1695254785,909,56402262,1342179333,-887041,1996478070,-696844332,-1697351937,1004,1358186121,241050,-1036090624,427116288,56402262,1342179589,-887041,1996478070,-193527852,265882,-933313536,268957222,-1588193420,134546156,1996443648,3455218,129519646,317280256,-933313535,125304614,91750182,384190093,93952592,1183645696,-1706027290,1095,-134986103,-1996152274,-1588147130,1177223954,1996443852,-431583758,1996443670,70163188,1048772608,1967521986,312563225,-867816701,1996443712,-431583758,1996443670,74029812,1589903360,2013210312,-599356157,-1008185322,-599356160,-1566945258,-1996488700,788001862,1183384866,-2136910132,-867816703,-227082416,383534733,-193527984,297370,-1036090624,427115776,25207126,1087129131,-227082416,383534733,-193527984,312474,-933313536,24641318,385238669,23586896,385238669,-26032,1183383552,573503476,-867792635,30581078,1355564587,-1913489665,1343682118,-1695254785,1252,12729987,1444508997,721539745,1346423878,-1913489665,1343682118,-1695254785,65535,16981665,961016390,58591870,1593702121,49120095,1562371467,707149,-2081649835,1183518956,31466760,-388823631,-1946401143,522520646,-263812864,-1324857717,99144457,1183383632,78553592,208977931,1946157373,146715,820715892,-1979955573,1183578694,-230258192,-1980217717]},{"sector":6,"data":[485228102,-1980742005,1183578694,-1947538436,1183447110,-62485510,-1947056503,-538185658,-1962654069,1183385174,-162100748,184188547,1589906045,-196673548,537380390,-1711651189,1996443730,-193527818,379290,-196738816,-762172,396424262,126363137,183664259,1586170493,-196673548,805815846,-1712175477,1996443730,-193527818,391578,-196738816,-762172,396424262,126363137,184450691,1586170493,-196673548,805815846,-1711389045,1996443730,-193527818,59546,1575324416,1426065090,-326898549,138840842,-388822095,-1946663287,-534443962,-754601721,-163149336,-1962654069,1183385174,-61437446,1023297223,-297893120,561315842,285099719,-125926655,-2096530420,-955451282,18153030,16285315,1187453045,-352318216,-125926639,-2096401152,1962997374,-129579259,2122514456,175966968,-368956,-970524090,1183522823,1347590648,-231681,-1214580106,16777222,1589967430,-96010246,637606048,2122516360,175966966,-369013,-970524090,1183526919,1347590646,-231681,-493159818,16777219,1996487238,-92864516,519980683,-26032,-443875328,442973,1167087646,518818645,-326903666,1183536690,17841420,289213300,-385649407,-991362509,537315072,-2130706427,-805038530,-1925679865,1343672390,-413976,179834486,1183666176,-1706027312,1841,382748301,-110499760,-1207011585,-1924136949,1343672390,486042,112640,-16551703,-6680970,-2097151745,1208227390,1048774516,1967719446]},{"sector":7,"data":[-783890865,77111296,1183334660,242679760,1342179512,382748301,126523984,1048772608,2113995516,77242393,1183334660,242679760,1342179768,382748301,133798480,1996423168,571406,112720,176396880,-1779761152,1342193848,-150991432,1073768494,161847888,1183383552,1975520250,-373282043,379650797,3620100,960324468,1030059008,1735655482,1946174013,3423506,1048798325,1962934376,85893469,-956233751,77656134,-1207011585,-1957691388,1344204870,16777114,-92864768,16777114,373195520,175387140,68566659,-385649611,1048772830,1962934376,13953283,-1207011585,-773259258,-263796992,-1125449132,1055934151,-944379136,31649862,1586212587,509690,12861059,-385649408,378208413,-1070923580,-1980610935,1721889878,-163149568,15222471,-1956451584,1183053406,529203958,915137489,381158558,53016320,1452012102,591348,-1981135223,1048833110,1951007766,373195527,259339780,-1280257,-6624650,184549631,-1960872768,1344207430,-1280257,-1030034826,-1962934264,1344207430,503332792,-26032,1191116800,6857192,2095597113,-96040042,-2070261730,-1996488701,-1072956346,-259323532,-956670325,-1962868928,1183447622,-17241616,-1207011585,-1706033148,2384,1355695753,16777114,-831062272,1342439864,-1169113045,1347552232,16777114,-26112,-1796669440,172395518,1946157373,146715,417923957,539905,820577141,605441,1323893621,-26089215,-1207011585,-1706033151]},{"sector":8,"data":[2445,-26032,-1073020928,-722926731,537315325,-956301051,188422,373195008,1963446276,242679561,1342177720,1048794859,1966343190,242679639,1342178488,653722,-6664192,-1996488449,1085861446,1191137280,-294191122,16777114,-129595136,510967819,-1207011585,-1957691388,1344206918,-1695648001,65535,519587467,-26032,1996423168,-126419186,16777114,-44439296,68566659,-2096204750,855905854,1048774516,1966408726,242679573,1342177720,16777114,-1070903296,-26032,1996423168,41084942,-2082060663,906237502,485032821,373195773,58018308,201134825,-385649216,1187512139,-2096889628,1107564094,1191117685,-499712028,-461963518,1347469355,-26032,686358528,373195263,1946669060,-536426666,-2097151742,335934,-790035596,242679804,250200107,675185663,57934082,-213271,146280054,28856320,-1617276928,-16777206,163057270,-1070903296,-195095,163057270,28856320,-6664192,-16776961,146280054,1591929600,-1962742397,1297948645,503319242,1430622296,-1910575989,283935704,-62470314,1183514624,68592390,1946175549,4799759,-1986459020,1451882566,8514042,-1157627976,1347616767,16777114,48014080,1358448327,-96024832,2122514432,175458566,1392002759,-96024832,113704960,764,16008903,-1959531776,-422448010,1342177720,36091135,16777114,146688,512432501,-472841476,36078731,77105033,50071295,50085507,-16023807,-861801402]},{"sector":9,"data":[-196724476,1048823164,2113995516,-129596664,-94993663,-633929984,112641,-1202695527,1385758726,-26032,1183383552,-633929742,-6664191,-1996488449,-1705970106,65535,-1996269405,-956081642,16794118,1958873856,-633929951,-92864767,-493825,-16588234,-16445386,-1710944714,65535,1090274953,-1070917771,1620048,1354771280,-1706012592,65535,16533191,1107740416,-1593835520,101385048,141820762,-1695123713,65535,1593591435,-1962742397,1297948645,1426064074,-326898549,56140040,56235659,-1980217719,1187510870,-352321284,-128007149,653805311,-1986525302,1174535750,-62455816,956974731,-444793786,-500028,-1977157562,1183422471,71732222,2097038905,1183401988,-62470146,367722496,-500028,-1977157562,106873863,637945599,1191118728,-28931076,2096907833,106874083,509478,-1034033781,-1957363704,317490156,-96024746,1187446784,-956301064,65094,68566659,-385649335,1048772784,1967653910,10938627,-1207666945,-1706033148,3341,219388496,1183383552,4241654,-163119280,-1695123713,3365,200951433,-14322496,79168630,1183535104,-11526406,1083897462,-2097151987,906237502,1183517300,-1706025222,3402,1023678113,91488306,1962947901,74907465,1342179000,588954,-1818603520,-1996488695,1085863494,1191137280,-159973386,503450,-129595136,510967819,-1207666945,-1957691386,1344206918,-1695123713,2496,519587467,164272720,379650048]},{"sector":10,"data":[3288324,1979717693,47114499,781434883,267954175,-2131075445,57999423,-16598039,-1014299530,-1070903266,244338768,186288616,-385649216,1187447460,-385875458,1996423836,1354771204,644506,-94467328,1962950528,42395907,1344193419,68566659,-1593477834,65733346,1342177976,16777114,40560896,16416387,1642660725,-94467326,1962950528,39250179,16285315,1307116405,1996444418,74907640,-1996303896,1038745158,-92372222,-385649408,1586168372,4161786,703136629,1996444418,281077764,2122571243,57999610,-1962797079,1065417310,-385649408,2122514956,57999608,-1962802199,1065416798,-385649408,1996423672,1996444666,175564804,2122557931,57999610,-16653335,1996487286,-401698812,1183388400,-603535362,-385875967,2122514892,57999610,-1962818583,1065417310,-385649408,-11337288,937952374,-9705196,597658,1958742784,74907398,-2097035800,1962998398,26667267,-362753,1760035958,-12064489,-1996187487,1048837190,2113995516,74907414,1342179768,16777114,1958742784,77242630,-244087,1187511366,-1593835276,1178141900,-1206419980,-1957691391,-472779682,36091903,731546,212224,-861857931,-196724476,915096181,960890008,175438966,-336693623,-196673780,-1700674069,1183399940,-297366802,1183334404,-247019792,-230242758,74907392,1342177720,1347469355,384845453,259037776,233504768,-772514165,646417379,1183399938,-25874,2107244544,184549390,-16354112]},{"sector":11,"data":[-68680586,-600375552,-26110,-1039466496,1996428661,1619972,1354771280,-1706012592,4054,-16731159,-1711088586,3052,68566659,-15895223,1996484214,-25860,300613632,-1149185,-1070859146,1347440720,16777114,-28931840,16777114,-28931328,645185547,1946157373,74907407,68566659,-1205242551,116064290,-1207666945,726663192,1347440832,198220368,-526385152,1093507073,-61961472,1976056649,-40179448,-352312392,-28915747,854261760,233639360,235540522,224660878,241045546,271191676,271192106,271192106,271192106,271191614,271192106,271192106,245370528,2122517902,141820154,-1694861569,4162,16285315,1996425332,134322936,1183514624,-443851010,180829,-1275051,-1866988426,-1202708991,1344144564,1343230136,16777114,1575324416,1426064066,-326898549,1988843012,-2146702588,192159804,1949056128,1015039494,-1980730112,1015086710,-16550912,80150086,-27358464,1183319946,1948269820,1965833220,-28901627,1183575019,-443851010,180829,-2115204267,1442925292,11421383,-964245760,-956301058,2097205318,-21461305,1187446784,-973078338,-956256186,118342,1342193848,1342198200,1114778,-1199142656,1958743038,4241475,5355600,214473296,1183383552,1958742974,-960593105,1031078142,1342194360,-1714403701,-6664110,-1996488449,201246342,-1176341056,1183514626,-101213744,1037059721,-780337052,-1207666945,726663192,1347440832,316971600,-1008140288]},{"sector":12,"data":[-961085695,257596158,1183383552,-1135179334,-1979294069,-1232697337,1948269822,1965833220,105316101,1996483307,-17569786,-1951250807,4161752,1996425332,1685508,-1533365013,184549394,-955550528,52806,-402360577,1183579822,-1957683706,1344192070,-20412787,-1444392938,-1132033783,-1102672898,848973854,-1996488686,1183563846,-11526466,468238454,-934901499,-1098904085,1965883062,138840851,-1962391809,126486622,-21592440,-428597188,-402098433,1183448697,-2133292110,57999423,-2097084695,16694462,-51838092,74907392,-385869128,1183579948,-1957683704,520009862,1354771280,154593360,-1950988663,520009862,306223696,-2037841920,1183579834,-1706025464,4717,2080395325,140413703,5195718,-10582387,1183535126,-1706025464,1738,11959939,-2037571468,1343684446,1226138,4996352,-2037575555,1343684446,503337144,329423440,-2037579776,1343684446,1342185656,382879373,-310450096,-20674935,58048523,-1711083031,4841,11959939,-2037570444,1343684446,579482,-957314304,16734850,-1207666945,-1924136927,385834630,1354771280,1996427499,440324,1354771280,1585876304,-1706027265,3886,1289626,1958742784,-834222325,1996423168,-44767228,-1984805237,-397408186,1183448425,140413874,1946173312,-16586493,-21447037,-16157696,-1694582602,4910,12484227,1996425332,271882942,-1098711040,1946222278,-961085678,259824382,-1224802304,-6619450,-2097151745,1962978942]},{"sector":13,"data":[48425219,13139587,-639040651,112642,-1962748439,218480710,5258496,-2037573507,1343684296,384845453,-1102673072,1174657676,-397389120,-1070922706,-628716208,-1202710786,-397410274,-2037516183,1343684314,384845453,145988176,2122514432,729022670,1295514,74907392,1342179256,-19233139,412766230,-1711276025,3911,192200715,13518535,74907392,-1946387992,520009862,1585876304,-397404417,-1073020231,28841588,-2037755904,765001566,-1706033087,5170,309706763,-1207666945,726663174,-1957670720,-383907770,1183579446,-1924129090,385813638,41936976,376750091,1342177720,-15956342,4271512,249666128,-1073020928,1996427381,964612,1354771280,105286480,2122564843,225706190,-402360577,-1073020439,-1209465996,-1199141890,508567294,343054928,1183514624,508567230,39688784,-2037579776,1343684446,-15956339,-6664170,184549631,-16157248,230163574,-55645952,-21461365,-1070903266,-26032,1183383552,2109737926,74907417,1342179000,1347469355,-21461365,1251627038,-385875951,1183514797,726671038,-6664000,-1996488449,-1072973754,1996429693,358849222,1996423168,964612,1354771280,-1102673072,-57367,1996473974,-1166606404,-1697614081,65535,-10713463,1064747019,1962934077,-1200160966,-4425985,-1705985418,65535,-19364215,-10713461,-19364295,-1635007116,1992621784,947922618,-385649638,1996423378,-356456264,58048523,-16726551,-1276594058,1975520234]},{"sector":14,"data":[-965279986,-390564097,1187506970,-16776786,1805301878,-16777195,278578806,-1962934250,1344192070,-2070261730,-1962934251,520009862,-1706025392,5545,382879373,-355801008,-20674935,-20660605,-385649664,1183710558,-1924131088,1343680582,1498010,-263811840,-426094570,50331669,1040104070,377290832,-21461365,-2046567796,1347616442,384845453,369465936,-1098711040,1962999484,-41686781,384845453,297769552,1174601728,5258688,-1847000196,-1102672899,1174657676,-1924115776,1343680582,1493658,-42276608,-1698269441,5656,-1699186945,65535,515786379,-336598960,-1207666945,726663183,-1957670720,-369182586,-1070858792,1575324510,1426065090,-326898549,-1959204078,1178141766,-15895314,-6623626,989855999,259327046,-1929087233,1343680070,16777114,-1928008960,1343680070,16777114,-297366272,-6664170,-1929379585,1343680070,1347469355,112720,-26032,-1073020928,-526274187,1575324418,1426064066,-327029621,1996423296,142016266,377505421,16824400,-26032,-1073020928,1996433020,74907398,378029709,308058704,1996423168,74907398,-16353537,2090468470,-1207959550,48955393,-443826133,574045,-2081649835,-2091513108,1946158206,75399951,-1005619967,-2144991650,108342847,-385875528,1183514783,139889414,-1980348791,1589966934,2139105014,611662337,-1744336346,-372709296,-526333813,-935618559,-1070922636,1183020011,1854079734,2122514948,-1066139644,653680324,1968979840]},{"sector":15,"data":[72286181,-940161281,64070,1074077345,-1946270071,1178141766,-1005552134,-2144930210,292903999,25133094,-1962248960,1065418334,-340560640,-27358333,-1963047169,-397371385,1589963106,-163119114,-1977169781,-1957652473,-380573455,-1904884165,-335919361,-443851082,442973,-2081649835,1183516396,240552716,-1979955575,-857080234,708679680,1030321152,57999406,1023445225,661913663,-237884,-1977156538,73319431,637814527,1589905288,126494216,184174216,-385649216,775684247,-1006596631,-2144991138,259272255,638076671,1589905290,71761668,-16283610,1978399814,788168320,1589911412,138870536,-1006138842,1191117918,126363140,638082756,1183319946,1975519994,-60898085,-2012771802,-1073022394,775701364,-1014284428,1191166604,-991499268,1191181406,126494460,-16490812,-2010774458,-2146833657,1949235838,138870544,638082756,1183319946,1975519994,140428522,4161574,1191117684,-60898296,-2012771802,-1073022394,619250548,73319679,509478,-1034033781,-1957363700,-655588884,-1035548928,1187446784,-1207959090,-1202716608,-1706033072,6369,-12679543,343195659,1342193848,1342197944,1109402,-800683776,1215676427,-1207666945,726663192,1347440832,440572496,-1098711040,1946222398,1052180233,421042943,2122514432,141820112,-1697614081,4896,12746371,837354357,-864124158,-385649408,28836392,35973376,-402098433,1183446837,-2133292092,141819967,-1207666945,-1494548464,-402229505]},{"sector":16,"data":[1183446813,-2133292092,141819967,-1207666945,-1897201639,1715354,1958742784,-834222325,1996423168,-153556988,503858827,1049004880,726671103,-397389632,-2037710380,1344208702,1684122,679905536,105286655,1183535134,-1924129072,385822854,28502096,516966027,446208592,1183383552,1049004998,-11526401,-385931082,-1072956122,1183518581,-11526448,401131126,1958743037,112645,-1070923029,-1949546871,1344145478,1342185656,382879373,-433919920,-13728119,1786036235,503858827,3192912,-767128240,166219798,1975520230,74907410,1342179512,1347469355,503858827,-76311,112723062,-1695749376,6727,-1207666945,726663176,-1957670720,520044166,347839056,110755840,184549403,-955550528,52806,-402360577,1183708662,-397404462,-2037783048,-1098645714,1946222382,-24188669,13532803,1996426612,-71047164,57982987,-1912701975,1343680582,384845453,360159824,1183645696,-1706027280,7228,-14121469,2097172541,1049004822,64654591,1392453766,-263811760,-1885712362,-1962934245,218482246,5258496,-2037573507,1343684400,384845453,-800683184,1174657676,-397389114,45677782,-2037559296,1343684418,1342210232,-1913581336,385827462,-263811760,-2103816170,-2097151982,1946209918,454924843,1996423168,505860,1116114256,-1706027265,5055,1150874,1958742784,-834222325,1996423168,-182392828,-12679541,1183535134,-397402416,87942770,-385649408,289275621,-385649408,1187512029]},{"sector":17,"data":[-385875518,-1070858492,-1034033781,-1957363706,887915500,638344900,1946173312,-1933341931,1347567810,503338424,344169040,-1073020928,1996429173,142016266,-15829249,-275116938,-1207959525,-1343684607,138840834,-1995811189,1451871814,207537360,25133094,639268154,1589905290,-834207794,-1962440666,1191169630,130426574,205947706,207537154,775913510,-504822924,2139104768,125066241,25133094,-14387968,1996476534,85893582,832196638,-16777188,1589906502,1065363150,-385649408,1191116980,-990909490,-2144990114,1949172095,10676483,41910310,638219356,163712,-1847000204,-797507840,-1580304641,1344144670,1430170,175570688,-1710721281,5555,-1962392061,1183386198,-799634994,34358915,1325335531,-832650034,1547665446,1589965941,1065362956,-1961855744,1451952198,-799655670,1178142069,-1961003826,1451952198,132362,1976587835,-834258127,1589914741,2139104776,578107905,-338802945,-834237667,1023952427,461176911,-15966524,-1977217978,-832650233,651052799,1589905288,1065362956,-992316160,-970535330,1183514631,173443848,-1982970231,267112534,718044800,2122323572,276037836,-993114369,-1977168290,-867792889,-462078148,-16091393,1471678582,-1706025472,7446,58048523,-1946252055,1451952198,1347567626,503339448,461019728,-1073020928,1927873397,-832649986,4161574,1996450165,142016266,1342189752,383010445,-488970160,1400225803,283723510,1183534452,173443848,-1982970231]}]],[[{"sector":1,"data":[65785942,-993114369,-2144940450,-193658817,-1949413633,-2144940450,58022975,-1946278679,138816451,2080395069,-31987453,-1949415681,-970535330,1191140359,-832664626,509478,-1946287895,1451952198,-834238198,-338667895,-834207997,651058884,1962950528,138841076,956978827,376884806,651058884,1183319946,1949973708,1952201737,-833683707,1589960683,126494414,1020020360,1006924892,-1957595846,1452002886,1347567824,-16353537,1575486582,-832650240,977240102,1191117685,-832650034,-2012771802,-970534330,1547436039,1996437621,142016266,2053018,5192960,1996433533,142016266,503340216,540580432,384499712,-3115265,1996476022,74907398,-1006628888,-970535330,-1070923769,-1034033781,-1957363700,82609132,71732054,1946568203,-990499996,-1977218978,-62486521,561299466,494153276,-1006090497,1191117918,126363140,150897478,166452604,788299392,1191121012,140428296,-2012771802,-1073021882,-164894091,638082756,1946173312,138870549,-1006138842,1191117918,126363140,83788614,1589961340,130426372,-443851264,574045,-2115204267,-956251412,51782,1342193848,1342197944,1625242,1082558720,1975520255,74907413,1342183608,1347469355,-1281732528,-385875937,1586168363,-2012771834,1023360646,1006924832,-16419540,-353696186,-402229505,1183445333,530488008,-1073020928,-169278603,-800667903,1996423168,-249763836,-1962809367,1344144966,-12548469,-1070903266,367546448,-834237956,-12548469]},{"sector":2,"data":[-90550242,-1996488673,1187511878,-1962870836,-2037840314,-1634992316,1065418564,-1978436608,1049004039,1950301439,1965702148,-867776689,1183514656,-11526650,1183698038,-397404462,-2037784444,-1072955582,1793655669,532191745,1996423168,440324,1354771280,105286480,-90550242,-1711276008,6501,58048523,-16691479,-2014837642,21359088,-12286209,2122552555,225706192,-402360577,-1072957855,1156121460,-263811839,1183666198,-1706027280,6798,384845453,428972624,1174601728,5258750,-2037705347,-628293824,1392395779,-263811760,-1214623722,-1207959526,-1924136957,385828486,8435792,-338433968,-12155251,1183666198,-1706027280,6907,13663875,1520053108,-16777184,129500278,-2037559296,1343684422,1775770,544512512,-1073020928,1187449716,-16777008,-471333770,-830569489,-1706003456,8359,503727755,-506599344,1946158397,1064204,1187458420,-352321078,74907413,1342179768,503727755,1354771280,519543376,-778436608,184549408,-11766592,-1679293322,-12260369,179831926,-1070903296,-1948652720,520044678,-515381168,376750091,2039450,74907392,1342180280,1347469355,384845453,-2037662997,1344208704,-385976577,-1072957958,1187448180,-1929379382,1343672902,-1981851672,-2080423290,16728766,-1041693835,-934900738,1342588553,-1980803864,1586219078,4161542,250151796,1086227454,158597375,-12536065,1641114,-901346560,-1034033781,1478361092,-1957345904,-661774612,1460464771]},{"sector":3,"data":[-196688042,1183515808,-96040696,1183516395,-96010246,-2131075445,-227270593,1191117803,-94467078,2132819840,541032693,65743221,-1946532097,1065417310,-2131397600,393478207,-1207535873,726663184,1347440832,584555088,-1070923776,-16712471,-1711087050,65535,1183576203,-1202708984,1344143454,1899674,1958742784,140413723,1965703040,25133062,-1962052608,1065355358,-1207602176,48955393,1183432747,1958743032,-163133580,1586167808,775913480,1191125364,705137160,1372138468,575183440,1586167808,-196673548,1191118728,-159480842,-1948812280,1065355358,-1961855698,1191179358,142511092,-1979169025,-955807739,63046,-2146935157,561250367,-1979169025,736373255,-1706012215,3316,-762229,126415942,-2081011969,2080634494,-195130409,1442842566,1342194360,16285315,146277748,721611520,-1885712192,1442840610,1342194104,16285315,146277749,721611520,-1667608384,1442840610,1342193080,-1705983957,65535,1577058744,49120095,1562371467,313933,-2115204267,1442876140,-402229505,-2037781071,-661913736,1946173312,74907415,1342183864,1347469355,-1566945200,721420320,29223360,1342178744,-8747379,-2135404522,250105856,105286633,77221918,-1929379805,385841806,-1695511727,9355,-2143435261,-1927119616,385841798,105286480,714756126,-16777186,129500278,-2037559296,1343684474,2119066,541301248,-1073020928,1996424820,-317659132,-1996077429,-335579002,2022113028,2023656447]},{"sector":4,"data":[4161791,351007605,956712587,1929345158,1992196121,309607167,-8876289,-8872309,-2037905526,1547501430,-2030051723,-2037645448,1183448952,-1961432066,-1962968930,1988528135,1958742783,1949187092,2022113040,2022083583,-28955649,2080376893,2022083550,-28931585,-1098904853,1949237110,-28901616,-1963041141,1988528135,1975519999,2022083561,-1957683457,1344208454,2103194,2023656192,4161791,-2030107532,-2037645448,1183448952,-1962152962,1065418334,-15764480,1183579718,2022059006,212479,1586227580,509694,503727755,-587798448,309641227,-1207666945,726663200,-1957670720,-383908282,1183579819,-1924129274,385841798,-228071344,58048523,-1912693527,-1979745658,1452079686,-16520196,1589967430,1065363194,-336300800,-95486205,653942468,1968979840,2089192948,970034431,125172814,58054715,-990230785,-970524066,-2037579769,1343684474,-8747379,362434582,1342177310,200432104,-385649216,28900929,-443851264,311901,1167087646,518818645,-326903666,1748927280,92080640,-352294751,702467,-2080881015,26686,803799925,2734081,86126327,-1996484603,79230534,-6664192,-1962934017,-129594424,52309751,-930365181,-1727848799,-120470997,-1048328189,-196179709,435046087,-263796992,922681369,1183646434,-1706027282,65535,721609889,422442566,-230258432,2112767545,-297366779,1183515627,-297367054,721611425,170783814,-230258432,2112898617,-263812347,1183515627,-230258190]},{"sector":5,"data":[2097154621,702469,1183515627,-263812622,956328097,91551814,-352321096,-1547687166,1187447586,-956301062,-1865876410,74760203,553406080,31078143,1342182840,382748301,2013264,-26032,1755381760,48145152,1342194360,-150989128,-1727865298,530206802,-1560281071,-1073020184,-1070918539,1620048,1354771280,-1706012592,9796,-122147093,-1924129280,1343672390,-231681,1996487286,-260636690,-624897,922743926,-1070923038,-633929904,-1706012671,65535,-1962742397,1297948645,-326412853,-1962480509,1344144966,2291610,736512,1586169726,189253126,105286400,-335788407,-2012771802,1060961862,708576372,1996428917,2013188,1354771280,-1706012592,10081,720093227,-1946401025,1065417822,-2133691136,123454,1996427124,31635460,108461904,-352316952,74907401,-402229505,-443875076,311901,-2081649835,1187398380,1187446730,1187383504,1183645905,-968455726,-1916250484,1183441478,-1000960830,-1933162869,-1102673454,-1950329207,1183385158,-27357956,1183522283,-968479810,2097154877,-60898265,654067455,1589905290,-1102643266,-1006139354,-2144928674,-629866433,1589906155,-1102643266,537380390,733890187,188597830,-1947501568,1451999814,-1102673468,-1950329207,1183384646,-27357956,1183522283,-1035588674,2097154877,-60898265,654067455,1589905290,-1102643266,-1006139354,-2144928674,-629866433,1589906155,-1102643266,537380390,733890187,188596806,-1913947136,1343670854,198841320]},{"sector":6,"data":[-15305536,515377270,-1070903296,1347440720,2619290,-339727616,112643,-1034033781,-1957363706,1055687660,-3520826,147867334,13715142,-1982708083,1452066374,-1982690104,1451868742,71732164,-1929623927,502005342,734152331,188597830,-1004045056,1191181406,126494460,-4038972,-2010725818,-60898297,4161574,183229045,-4038972,-970538426,1183522823,-968479806,2080377661,-901345813,1609060374,1958743001,108461846,1342185144,1347469355,-1634054064,721420321,-1207702592,-443875327,311901,1167087646,518818645,-326903666,77373788,-1913370999,1183425606,-61436678,1183522795,96807930,1329397852,-1004831488,1191119454,126494218,-368956,-2010711482,173982727,4161574,1589958773,130426618,105286400,1946699275,-1538880165,1656246294,-1706025472,8637,947175435,737822347,6030789,2097172029,-94452693,653936383,-346290234,-96040161,1543882027,5192960,1589910397,105316102,-1006138842,1191180894,126363386,637951684,1962950528,-94452520,509478,-637241,-1518436097,-1974635206,-466967482,1347537195,2228890,769927680,1183383617,-129579018,-861863936,-129615612,1586171517,-1948003848,-2026244538,963969574,956615841,1149106246,956603553,208992326,-1694992641,10556,1165279243,-622973,2122319486,208928934,379864717,-665655216,175489035,-352321096,-129564886,2122558699,142540790,-1695254785,65535,-1207011585,726663199,-1924116288,1343661126]},{"sector":7,"data":[2476186,-2084558080,-443874579,-900899553,-1957363702,250381292,1183536727,8168196,12861059,-385649408,113705112,390,52575875,1343714304,1342177720,-1588543445,170722014,-1070903296,-26032,922681344,-2036727064,-1996488662,1451883590,-1005155330,-1983894784,1451882054,-96040456,1996440555,-25862,-1073020928,381170804,-94467328,915137489,687277214,-1946794493,1183447126,-195655182,-2080618812,-1961427898,1586229846,-1946645516,-611442958,-234878023,1191124901,25338362,2096776761,-399048779,741448194,1599995904,-1034033781,-1957363710,753697772,1996445271,112644,-26032,1996423168,571396,-26032,1347551232,16777114,56402176,-1996486651,163110470,573503232,-1577547003,-956103956,-1560279035,-956103918,50430115,30581703,-788192607,-335150112,525570,-2082978167,190526,-1259797643,-399048959,290888194,1183383552,-162100748,1988752939,25946586,25572921,2112422782,25600257,989858309,-385646650,1183514992,506394586,-1580692733,-645201122,734147481,178626,-1036781357,-670842325,-1946657143,1452012614,591350,-1981790583,1183441494,-229209616,775686123,1191121012,-262224656,-2012771802,-1073032122,1996483701,571396,-126419120,-1935617,1183572086,-532272144,726047312,1183514624,-229209104,-1979955575,65797718,-990099713,-2144928674,-193658817,-16484609,1996480118,-227082248,-1947175169,-263836733,731748944,1589903360,133572340]},{"sector":8,"data":[-15371248,1996424310,-126418984,503348920,505936,11462992,653549252,638023679,-1929021441,1343677510,427930,-96040704,86126327,-2734455,312542326,-700044541,-126419120,384059021,-92864688,2874010,-195116032,58195750,384059021,-648746928,384059021,737385040,1183383552,573503482,-700020475,-1593542913,1177223552,1996443862,-465138184,1996443670,739744506,1589903360,2013210356,-465138431,384323606,-465138214,295325718,-1996488666,788003398,1183384866,74907606,721539745,-11479482,1183709302,-11528476,1268447862,-16777213,-2092508602,957805638,2114117174,-26416893,48772863,1261210,-1956684288,79846885,-326413056,1443687555,-1996388703,1187509830,-1962934028,-1073018810,20780660,1025012736,443809794,1946157885,277788,652942964,-768313,-954209281,128070,1187453163,-335546636,-196688111,183173130,721700491,-1996388858,1183577158,-2046426636,-566850815,183403266,25572921,914949246,1048772998,2097152390,-2046376186,-1962934271,103544390,1183383942,1958743028,175570787,385369741,-26032,513867776,-1036805885,45728299,871944960,-1983763518,179894854,506394368,-96075005,-113015,28838518,922701824,-1706032762,65535,722106111,1183535296,506394612,-1070903293,1183666256,-1706027272,65535,-1710590209,65535,1575324510,1426065602,1183575179,867588,456999540,1027437568,292814881,1946165821,2506012,675094388]},{"sector":9,"data":[-350129152,108461871,1342177976,1347469355,-335619352,108461855,-352320584,108462062,-403980245,-1207535873,-538247167,-1710852353,65535,-1034033781,1478361092,-1957345904,-661774612,-1960514429,20778054,1025864704,1316225026,1962938173,8710403,1946162237,16792946,-1377238155,18169088,-1796668555,11462912,48379647,3012506,-62486272,3913808,112720,772250192,1996423168,-75569138,-1710328065,2309,-375799765,922681492,-1399192862,-1996488671,-1202652090,726663227,-6664000,-2097151745,190526,922683764,1201275624,-956301293,31750,-3544320,1996426870,-26102,-1125449728,-1928431873,1343675462,16777114,242679552,-388204801,1996487636,-599356146,-6664170,-352321281,242679703,-16091393,1996425334,-36050938,1996457707,175570702,-369180440,1996488570,209125134,-16091393,1996425334,-26106,-310181888,535137026,181030237,-1873273344,-326412987,-2116514274,-956238100,41030,217728710,-1979294069,176588807,1948269823,1965833220,105316101,1586227947,4161542,-1070922379,-1207753751,1344143568,503378104,11253840,-2037559266,1343684374,1342210232,16777114,377916672,-1773762049,-342337908,180256778,292826367,-996784385,-1977182626,176588807,1975519999,-1772174104,4161574,1191122548,130426518,-1978799360,-1728116090,1996496957,-1773732079,647388868,-2037905526,-1073021174,1183573365,-1739158634,-1985722743,350987862,-16073088,-1977912276]},{"sector":10,"data":[-1728116090,1979719741,-1773732079,647388868,-2037905526,-1073021174,1589960309,1065363094,-15043584,-970549690,300613639,-16087414,2112920,742130806,1191121269,-1772174186,-2012771802,184486534,-1948158528,1451988550,277252504,311855615,-1978799105,-1728116090,1979719741,-1773732079,647388868,-2037905526,-1073021174,1589962101,130426518,-1537293312,4161574,-1098895500,1946222358,278840360,1065363199,-14781440,1996465782,377916836,105912063,1354771283,-26032,1183383552,1975520156,1354771221,1342180536,1347469355,-1013297072,-385875919,1996423636,-700019300,-6664170,-1962934017,1174656582,51684318,-1545582965,1996423844,702620,-26032,-2037841920,-1952841972,-150793202,344361465,335988735,-956301308,205830,-499712256,1354771202,3193498,108461824,-1981808408,1586208326,4161542,1048785012,1962935316,-633929868,6600705,-11513191,-16588234,-16625098,-1711124426,65535,184816803,-1204193856,-397344773,1048774623,1962935076,-499712227,112642,167942736,1048772608,1946158100,339148553,763402756,1996423168,-25956,1183514624,18016672,-1197705473,726663177,922702016,922682652,1347421466,3220378,339148544,309252,105286480,765087774,-16777181,179870838,1183535104,-1706025466,12841,105286480,-1070903266,1939492944,-1996488655,-1072956346,1978205053,105286655,-1952299383,1065394782,-1975028736,176588807,1948925183,1967078404,108461876]},{"sector":11,"data":[-6523137,-385936202,1048772767,1946157860,-12130045,-1197705473,726663179,1347440832,-6664112,-1962934017,1183424070,-337031162,-1572405250,1183560171,-1571881210,-1969070453,176588807,1952201983,1949973561,105286453,817385502,1183666176,-397404502,-1072968088,-1070917772,440400,1354771280,105286480,1570394142,-352321486,-1085868399,-385649392,1996488571,-1669923066,-15419649,184747752,-385649216,1187512180,-385875552,-310116500,535137026,46812509,-326413056,30076033,590518870,-1073020928,-1070922124,-566171568,503858827,1049005392,726669054,-397389632,-2037520068,1343684158,2864794,-62486272,503858827,2144336,-867791536,-706195434,981895629,1975520254,42526979,-1202667477,726663174,-1957670720,1344145478,2707866,40954112,384452237,-364475056,-258322410,-1962934241,-1903297466,-1056702914,1347605132,384452237,601201232,-2037579776,1343684158,-29456755,1721389078,-1929379820,385760902,1354771280,1351322,1015449856,1049005566,-1924131074,385760902,846174800,-2033778688,65078,16664263,-129579264,-1293352960,-92372223,-385649153,1988821446,-897399046,-2037579522,-2037776694,-1769144636,-2033713466,65080,16416387,-2031549579,-997815551,-963212290,-1064924674,-1030321666,-1063336706,126494462,-20412792,1165279242,1098123836,913639740,-29981045,-1542550631,66713346,234764422,-654835720,-11893111,-11893109,-11890945,58048523,-1962885655,-116554]},{"sector":12,"data":[-956417914,553602178,-1098849557,1964703432,108461947,-29968641,-1912703233,385830022,951517008,874879742,-2037710848,788004408,-2046754140,-2033713610,65080,-20398464,-385649654,346095795,-28966653,-29980985,-2030108672,1191182016,71732216,1962427961,9824515,16271047,-28915968,1996423168,112646,1354771280,1347440720,3452826,-1098479360,2109737982,14674281,-20398464,-1961921268,-1991769018,-2033780666,-385155384,-2037710993,1033436872,208797728,-29837685,-29849857,-11763064,-29835647,729088128,-16353537,-117066,-2037514634,1343684428,1342210232,2822810,948341504,-1540425730,914751746,948357118,-16776962,-369180538,1048837835,1962935076,-1064924298,-997839874,-96065026,-20937077,-20801909,-20674935,-20539767,-20930876,4161574,2122516085,745865466,-20930876,440369190,1944650612,-14816258,-1912718154,385796742,8370256,352098896,1183383552,1992297466,-30283517,-1207535873,726663169,1347440832,-241545136,-1996488656,201244294,1342471616,-16528664,-1694614346,5338,382486157,-880089008,-29718903,-29704573,-385649408,-1956708986,113401317,-326413056,17886337,-91830442,-1929379586,-1979744634,-1929447802,-335611754,-158954719,96807934,2067595394,-1004831488,-67938,-1946225018,1191118966,637831688,1586169736,4161544,-2037655691,-986972426,-1996455419,-1631257018,-2144928010,1952251775,2139104783,141835007,-17398017,1544013350]},{"sector":13,"data":[-17391932,-17398017,705152550,-17391989,-17398017,772261414,-17391989,-17398017,705152550,-17391989,509478,-8485235,-2037559274,1343684348,199300328,-1962445376,-369165690,-2037579520,1343684348,-385976577,-1072963254,28837237,721611520,-91846208,1975520254,13822211,11404999,-2037579775,1343684348,16777114,-26112,113704960,386,31211139,-1204587520,-1202716608,-1706033024,7901,-8616311,510967819,503369912,16824400,683167774,-1957683712,520060038,8435792,786799184,1048772608,1946157252,-1005155490,-1983894784,-1979780986,-1979780458,-335612794,-258030527,133572350,-1961134832,96636099,1347551241,503619768,2092367696,-25857,-1073020928,-2101472396,-14906623,-1948004092,-1962631626,-1979779962,-259620096,-2030102786,-694026508,-192530175,-2085192450,121918,-1098706828,1946222460,2092367625,557161215,1996423168,74907398,-385873176,-1956708615,113401317,-326413056,11594881,-1002536106,57999360,-1962814487,721470486,1686538688,1721141759,-196703745,-1979824503,-369142650,381157773,1419676416,-1948003841,-150692298,1686504232,1721142271,1350994431,1385597439,1954975231,-1957685505,100618374,1347551241,3616410,1954974976,-1588586753,1344143532,2300826,1352582144,133572351,-1928563696,1343652422,503361720,-1929328919,1343652422,503360673,929602128,-1631322112,-14221488,-14284937,-2037578377,1343684456,2849178,1753648384,-1706027265]},{"sector":14,"data":[14227,-9138547,-936651892,1394000259,1753648465,-1706027265,14199,378160781,11313488,-1415950306,-1006632905,654266526,-1929152513,385833094,-847714224,-10975603,-728084458,-1929379785,-1929415538,-2084033581,1364402369,-10975603,-1164292074,-1929379785,1343657030,503360673,938187344,-1631322112,-14221488,1183646071,-397404426,1183698485,-1706027274,14326,-9138547,-936651892,1395310979,-163148463,-2036707306,-1929379790,385840262,823433808,-2037841920,1996488546,1354771206,-1912703233,385840262,1656160080,863410943,346095616,-28966653,-1946925313,1178141766,-953387532,62534,16664263,108461824,1342177720,1347469355,-1706012592,14450,-11106679,847036427,52706947,-13667072,-1577102202,-2043084414,58589012,-104471,28837494,-1070903296,1347440720,869112400,-2037841920,-1072955562,-397409155,-1956773881,79846885,-326413056,280311,-1958841280,-79887290,1025012991,678756348,2097151293,-115451,922691454,213386260,-16258304,-1207692234,726663205,1347440832,806591056,166395904,68433663,-352311624,1575324649,503317186,1430622296,-1910575989,351044568,1183663339,726669036,1347440832,1342177720,1478298,1958742784,339641140,309592068,68433663,384583309,375757392,-1073020928,1183650933,-1706027284,5745,384583309,377199184,1048772608,1946157860,608076725,91553795,-352321096,-2084558078,-443874579,-900899553,1478361092,-1957345904]},{"sector":15,"data":[-661774612,1024214667,846463248,1946227005,18234631,1374371956,52692679,922681345,28836578,1704611840,-16777168,-895873418,-956301264,267270,112640,1996434923,1354771214,16777114,35824384,-1710328065,11752,922739691,1622671906,28856560,-627421184,-352321491,-2084557872,-443874579,-900899553,50355210,84776193,50354176,87070721,50354432,87625217,50354688,84717569,50354944,87098113,50355200,84730625,50355456,-13155072,50335488,84384257,50356480,-16212224,50336000,18085889,33554688,34269185,50331904,-15877888,50336256,84849921,50356736,-13057536,50336512,-15750912,50336768,-15777280,50337024,-14088192,50337280,-14040576,50337792,34578689,50331904,-13751808,50338048,34573825,50332160,-13220352,50338304,86934017,50359040,-13252096,50338560,-13253376,50338816,87618817,50359552,84559361,50359808,84482305,50360064,87628801,50360576,87631361,50360832,53863425,50332928,53904897,50333440,69872129,50332160,86844417,50363392,52801281,50335488,84960513,50331904,53352193,50336000,69876993,50333952,53060353,50336256,53087745,50336512,50376193,50337536,50370049,50337792,50372353,50338048,103978753,50332928,103987713,50333184,87662593,50337280,70783489,83894528,34268417,50331904,86144769,50371072]},{"sector":16,"data":[87667457,50371328,86316033,50338816,87659777,50371584,86886657,50371840,70795265,50341376,86822401,50340096,87652097,50340352,84497921,50340608,84719105,50341376,86915329,50341632,86920961,50341888,86374401,50342144,53873153,50346496,51082753,50347008,51086081,50347264,70253057,50345216,51088385,50347520,85349121,50343424,86349313,50376704,86302465,50377472,86652417,50377728,87654145,50345216,51820033,50350592,84360961,50379776,70308353,50349056,86842369,50347264,86835201,50347520,53005569,50351872,86612481,50348032,53789697,50352384,53776897,50352640,51694337,50352896,53650689,50353408,51714049,50353664,52979713,50353920,53934337,50354176,70270465,50352128,53938433,50354432,53956609,50354688,51047681,50355456,53608961,50356736,70263553,50355456,84654081,22272,0,0,0,5,0,0,0,1,0,4063237,774504540,2228266,541937475,541415493,5521730,1144791072,4084297,536870912,0,1061109567,1061109567,4144959,707668572,1543518720,6044160,774504540,6029354,0,1998585856,1701540463,1852776548,32,65535,538968064,1380533308,62,1480916992,1329791045,1229979725,1094844486,538968148,538976288]},{"sector":17,"data":[538976288,538976288,8224,154,1380533308,62,1,1310720,4456448,0,65536,0,1684957527,7567215,1936942419,7237481,7498052,1752457552,1766064128,27507,1769366852,25955,1232364871,7300718,1735357008,1936548210,1850277888,27764,28001,788557168,1968308282,1275068526,6578543,0,1952531561,1416167525,6647145,892416371,846397497,3749171,1148387375,6648929,1416822842,6647145,1954047232,1769172581,7564911,776882519,5066563,1818585203,108]}],[{"sector":1,"data":[]},{"sector":2,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2097409,4194337,524352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65281,0,65281,0,65281,0,65281,0,65281,0,65281,0,0,0,0,0,0,0,0,14688000,0,15744768,0,16285440,0,16580352,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16580352,0,16285440,0,15744768,0,14688000]},{"sector":3,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463]},{"sector":4,"data":[0,0,0,0,0,0,0,0,0,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,1953300480,1818838544,905969765,1853182464,3026478,1275087360,778330479,11822,1866661938,774797680,989855790,1952794368,1718503712,855638127,1818575872,778400869,11822,1917845556,779382377,-2147471826,1699872821,1701667182,3026478,1701402128,1040711799,1869107968,29810,1867251775,26478,134217728,1816199233,1107296364,1918980096,1818323316,3026478,1342192896,1919381362,7564641,0,1107313672,1632510073,25965,2034368581,1952531488,1174405221,544817664,1702521171,4685824,1260419394,6581865,1701860240,1818323299,3670016,543452741,1936942419,7237481,1124088064,1952540018,1766072421,1952671090,779711087,11822,1749221431,1701277281,1919501344,1869898597,774797682,1207959598,1919895040,544498029,1635017028,1936278560,774778475,4784128,1701536077,1937330976,544040308,1802725700,3026478,1392523904,1444967525,1836412015,1632510053,774792557,1953300526,-2143289344,419436805,1006681600]},{"sector":5,"data":[524292,524316,131075,1149390850,1952803941,14949,393252,786582,8388612,8474755,402654208,134264320,1792,-2108685824,2883584,2097192,65550,1342373889,7032704,671117824,234889216,512,-2142240000,1668178243,27749,2004055149,1802398835,1802134381,-2143289344,419436804,738230784,0,524292,524320,131075,1350717442,1769239137,3828833,100673536,201348608,1024,-2125430016,1245184,2097176,65550,1342373889,7032704,402673408,234889216,512,-2142240000,1668178243,27749,2004055149,1802398835,1802134381,-2143289344,419436804,738246144,0,524292,524312,3,1350717442,1953393010,536870970,-1711274496,67111936,-2097119232,33104,1572908,917536,65537,1333809155,1912602731,536877056,33558016,50331648,1631813712,1818583918,1953300480,1819506547,1668115310,1936485226,-2143289344,419436805,1006681600,0,524292,524356,131075,1132613634,1952540018,1766072421,1952671090,981037679,4980736,7208966,262156,1350762624,67108993,-1241507840,117442560,33554432,33360,2621484,917536,65537,1333809155,1912602731,536881152,33558016,50331648,1631813712,1818583918,1953300480,-2143289344,419436804,738246144,0,524292,524328,131075,1132613634,1735287144,1867784293,805306426,-1979709952]},{"sector":6,"data":[67111936,-2097119232,33104,1572908,917536,65537,1333809155,1912602731,536877056,33558016,50331648,1631813712,1818583918,1953300480,1819506547,1668115310,-2143289344,419436805,1006681600,0,524292,524336,131075,1451380738,1836412015,1632510053,3827053,100677632,201359872,1024,-2125430016,262144,11927576,458760,1342308352,738197634,536881152,16780800,50331904,1800372304,7471104,2097192,131086,1342373888,1851868032,7103843,1937009920,1852601207,-2143289344,419436804,738246144,0,524292,524304,131075,1384271874,3829365,100669440,201368064,-2147482624,-2125430016,2883584,2097176,65550,1342373889,7032704,402682368,234889216,512,-2142240000,1668178243,27749,-2143289344,419436804,738246144,0,524292,524308,131075,1283608578,979657071,1835008,10354694,262156,1350762624,738197633,536877056,16780800,50331904,1800372304,7471104,2097176,131086,1342373888,1851868032,7103843,1937009920,1852601207,1784900971,1685285995,-2143289344,419436807,1275117056,0,524292,524308,131075,1132613634,981037167,1835008,10354694,262156,1350762624,67108993,335550464,83888128,33554944,1867809360,469762106,-1644161536,100666368,-2097119232,33104,2621444,524470,7,8540162,939535360]},{"sector":7,"data":[234889216,16777472,-2142240000,27471,3670130,917536,2,1132482563,1701015137,1828716652,1937208180,1835757164,-2143289344,419436807,1275117056,0,524292,524320,131075,1384271874,1835101797,14949,393256,786578,8388612,8474755,402654208,134225920,33555712,-2108685824,3829588,369108992,201363968,-2147482112,-2125430016,262144,11927592,458760,1342308352,738197634,536885248,16780800,50331904,1800372304,7471104,2097208,131086,1342373888,1851868032,7103843,1937009920,1852601207,-2143289344,419436804,1006668800,0,655380,524388,65546,1401049090,1667591269,1919164532,543520361,1713401716,1634562671,1073741940,671094272,134220800,50332672,4292688,671094784,234889216,16777472,-2142240000,27471,2621524,917536,2,1132482563,1701015137,1828716652,1937208180,1835757164,1818978915,-2143289344,419436805,1006668800,0,655380,524388,65546,1401049090,1667591269,1919164532,543520361,1713401716,1634562671,738197620,503322112,134220800,50332672,4292688,369120256,201334272,67111168,-2142240512,402653250,536881152,16780800,50331904,1800372304,5505024,2097192,131086,1342373888,1851868032,7103843,1937009920,1852601207,1784900971,-2143289344,419436805,1275104256,0,655380,524388,65546,1401049090]},{"sector":8,"data":[1667591269,1919164532,543520361,1663070068,7958639,335549440,134243328,16780288,-2108685824,1953724787,1948282213,1073741935,671097600,134220800,50332672,4292688,939530240,234889216,16777472,-2142240000,27471,3670100,917536,2,1132482563,1701015137,1828716652,1937208180,-2143289344,419436806,1275104256,0,655380,524388,65546,1401049090,1667591269,1919164532,543520361,1663070068,7958639,335549440,134243328,16780288,-2108685824,1953724787,1948282213,738197615,503325440,134220800,50332672,4292688,587224064,201334272,67111168,-2142240512,402653250,536885248,16780800,50331904,1800372304,5505024,2097208,131086,1342373888,1851868032,7103843,1937009920,-2143289344,419436811,1795201536,0,327680,524442,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,130946,234881024,134257152,33554176,-2108685824,1143821133,1159746383,1969448312,1702259060,1966080,6160418,-65528,1342308353,1919243906,1852795251,808333600,49,-1711264000,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989871360,234889216,16777472,-2142240000,27471,5046272,131226,262145,8540162,1392517376,134234112,16776960,-2108685824,1802725700,1634751264]},{"sector":9,"data":[1176528227,979723634,6750208,2621523,655368,1342308352,553648258,1073766144,-16775168,33554687,1699578448,2037542765,1701987872,14949,6226023,524328,11,8540162,1937009920,1852601207,-1865940992,335549444,1073764864,1291845632,1329868115,2017796179,1953850213,6649449,2883613,917536,65538,1132482563,1701015137,108,1509951488,-16775168,33554943,1699971664,1852400750,103,1509954048,67110912,33554688,33360,1835008,524378,131071,1954697218,1919950959,544501353,1869574259,779249004,1953300480,1819506547,1668115310,1936485226,1886339848,1735289209,1817191200,1702060389,1936615712,544502373,1143821133,1679840079,543912809,1679847017,1702259058,1699875104,1768776046,153118574,1701602628,1735289204,1125318688,1952540018,543649385,1701996900,1919906915,1124868217,1869508193,1768300660,371221614,1852727619,1998615663,1702127986,544175136,1986622052,1124999269,1869508193,1701978228,1701667182,1679824928,1667592809,2037542772,544434464,544501614,1953525093,1126444665,1869508193,1701060724,1702126956,1701344288,1920295712,1953391986,1919509536,1869898597,237926770,1852727619,1679848559,1952803941,1124868197,1869508193,1919950964,460615273,1852727619,1663071343,544829551,1701603686,544175136,1702065257,237921900,1852727619,1663071343,1952540018,1310597221,1696625775,1735749486,1768169576,1931504499]},{"sector":10,"data":[1701011824,544175136,2037411683,1937009952,1819626779,1819306356,1768300645,544433516,544501614,1869376609,778331511,760433926,139677508,1970233921,774778484,1176521478,191194482,543452741,1936942419,141455209,544499015,1868983881,760433936,542330692,1667594309,1986622581,1750344549,1998615401,543976553,543452773,1920298873,1852397344,1937207140,1936028448,1852795251,1867387438,1852121204,1751610735,1835363616,779711087,1819626786,1819306356,1701060709,1852404851,1869182049,1847620462,1629516911,2003790956,858678373,1852727619,1663071343,544829551,1953265005,1701605481,1818846752,1948283749,543236207,1735289203,1679844716,1769239397,1769234798,187592303,1852727619,1914729583,421555829,544501582,1970237029,1830840423,1919905125,1869881465,1853190688,1867394592,1852121204,1751610735,1835363616,544830063,1679847284,1819308905,1696627041,1919513710,1768169573,1952671090,779711087,1851867927,544501614,544499059,1970040694,1847616877,778399073,1851867931,544501614,1851877475,1679844711,1667592809,2037542772,544175136,1851867928,544501614,1634038371,1679844724,1667592809,2037542772,1746932768,1847620449,1768300655,544433516,1763733097,1126772340,1869508193,1970282612,1397563508,1397703725,1937339168,544040308,1948282479,1679844712,1701540713,778400884,1851867927,544501614,1836216166,1679848545,1701540713,778400884,1701597241,543519585,1667590243,1752440939]},{"sector":11,"data":[1948284001,1679844712,1936421737,1701994784,1952805664,1713401973,1948283503,544434536,1919250543,1869182049,1310404206,1696625775,1735749486,1701650536,2037542765,544175136,1852404336,1310666356,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,1852404336,11892,0,1828716544]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[538976451,538976288,270540832,0,0,2424832,131105,0,538979886,538976288,270540832,0,0,2424832,33,0,827214167,538980400,541873743,0,0,759234560,199535,217712,542001495,538976288,541675081,0,0,3080192,524321,1683,1330597971,542262604,541415493,0,0,760217600,592751,13216,1330530647,1346454604,541347661,0,0,760217600,854895,19392,1330530647,1346454604,541217351,0,0,760152064,1182575,1213,1329877837,538976339,4544581,0,0,3145728,33]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[114409,53,1936607488,544502373,609439556,1702063689,1092646002,1768714352,1769234787,1227124335,1919251310,1767317620,2003788910,1951604851,1970565729,1679828080,543912809,1679847017,1702259058,221935648,1701990410,1629516659,1797290350,1998616933,544105832,1684104562,220471417,604638474,1735357008,544039282,544173940,543648098,1713401716,1763734633,1701650542,2037542765,1953451520,1869505824,543713141,1802725732,1634759456,1713399139,1931506287,1701147235,2019893358,1851877475,1124099431,1869508193,1768300660,1461740654,1868852841,1931506551,1953653108,1713401973,1936026729,1547321600,1296912195,776228417,5066563,1397575491,1027818832,1413566464,1459633480,808537673,1229073968,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1751349340,606350951,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143703040,-402357272,113706009,41550080,567095476,-402496862,1488454604,40084311,42010310,20113408,1491619996,1939691524,1765703721,292880386,91555900,-855580696]},{"sector":10,"data":[29081120,-855581976,1963473952,54847493,-974600725,14870529,113688043,-2147417495,164158,-1763114123,41281536,184712865,-1106283328,-1930952704,43640834,-402652226,-2118516093,19851266,37560947,-1173654272,-2118254316,10872834,138275051,-2146667264,50487870,-337115789,-103290110,8390343,-2086925056,163390,113116788,38135808,-402230371,1374224472,45869311,-1962931778,855827398,-2147027264,58003458,-402512152,1369178734,-402500632,-1655110757,1203242610,-14030505,-1849817373,2484225,-1157686295,1102316120,-474078771,17950726,1001707147,1303650765,1286873549,138158541,1891500917,-1073042431,-796260236,567083700,229831659,-1308622104,-855460854,666551073,-1576760575,162791757,1052385741,-855002111,201898017,1807360461,-855002111,385663777,40083719,-1107231069,230228475,1765703680,242483202,-1962801474,-17922,-1359822797,-2134912521,-1967115520,96535045,2116878339,671251968,-1967115515,-134002939,-1951789648,1048619713,1962934889,-853953524,-1270807519,-377246918,-1163595006,-661913082,113754254,8389228,40771212,40896199,512491612,113705586,7078516,41295500,-1090485826,28835932,-1088303831,28835948,-1155412695,119407210,-1996477279,106044935,2877523,1763523,-1073042346,1555168117,1963735118,313083,-851725222,-1962112991,113165298,-2146137598,246694378,1438851533,-326898549,-973332908,118884470,-1951498611,792505567,1547438196]},{"sector":11,"data":[977011828,-544537739,-1073042877,1586097013,139904428,-402366780,1601372264,74711612,1450509116,1963023336,142525521,973175936,431229300,1090789837,-1398064460,1950039210,1975519749,1555058422,-29018074,642711925,520045960,-1960896938,-1431524234,-92946422,-1006086459,434635870,1931435520,1946303502,1963146244,3964933,536457077,-1034033781,519569416,378285653,-1993473787,-1207892186,567102208,85364270,646655489,526188807,-1960966461,-1962771426,-850873141,-2017423839,-1912440314,871773144,-773729793,-52309535,119514611,914955971,512623224,-13237638,520255518,252006595,-754667264,-1260876824,1914817864,868257300,-1547684865,109838949,-1414856089,-1949158568,244040698,65208935,-1962932504,-486376946,-1262383610,-1021194935,-486525720,-1041752535,39369470,1018480947,376578509,382064779,-91553179,-2097001077,1085539521,1051992525,-1323359795,1488634625,-851332094,-993789663,-1946000066,637854657,-1023259253,-1191056193,736624648,235238400,31309343,76275596,21865006,-695476338,-851246920,1931415073,17414664,-335707160,-171981845,375041,-1910110442,855649310,-212381194,1952014246,-1073042420,1015085941,200176896,519881673,33996551,567089588,-1196801788,-1951704006,-1261292553,-1105081017,-474021370,178957318,-1325763136,-29083556,-2008153739,-24379580,-1409156162,1975519914,96729338,78710943,-661919533,1253312278,-4513331,-850873089,507194913,158531843]},{"sector":12,"data":[-402636056,-1226179368,1048653564,555745409,724447861,771818270,8521414,784347936,738231200,1997093936,113651223,-1323302781,199283468,-1207732800,-1019542528,-668268941,567101620,507843,79629803,-2143387648,57933824,516145203,-1615278452,-754667256,-1896872984,868234206,1279033846,-2129693361,1330053756,-1207039883,508561278,-1021326505,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1330073420,855687401,-1597993280,-1574567911,413139984,-888091392,5242880,94373280,1073741824,236959744,1919117645,1718580079,1767317620,2003788910,253821043,1936876886,544108393,825241137,1125582848,1920561263,1952999273,694364192,1667845408,1869836146,1126200422,1869640303,1769234802,539782767]},{"sector":13,"data":[892877105,1092624430,1377856620,1952999273,1699881075,1987208563,3040357,1766660109,1936683619,544499311,1629516649,1734701600,1702130537,543450482,1684107892,1918987621,1718558827,1667845408,1869836146,1126200422,779121263,-67108864,-1912534808,-402643962,-890765127,437684992,1139441664,2102827,2102827,1049350659,1122500636,473860864,507380480,2269440,-133961519,6154319,-52202166,-1979701570,3932484,115869044,-1191908608,-53805030,869305261,-1258310693,-1408185086,108314634,281874100,-54266389,-1093520814,-288292828,1707659,-1960384047,-775649787,-1966550584,-1058635532,171959424,-2032760094,-421352508,1524462926,844299715,2408146,244051665,-372178918,-2046457050,-775892540,-2131719488,-64748570,-695549430,-492059514,-562737433,-1094452134,313524743,1713910,1040447627,314245152,-1340019968,438760978,438209280,1139507200,512475907,-338624478,-125058301,2113067,-1593830725,1127022618,4438272,-218086471,1274545060,-1262226571,-1575957233,-1070399464,-1608073074,430048272,-1462700544,-167217872,653206736,-1207693150,281870342,-1223688008,-1206858495,28774401,12783821,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12648448,192,-1006682368,49407,-50393344,50331648,-251658241,0,-49408,49407]},{"sector":14,"data":[-15794176,240,-15794176,252,-256,-3841,-1,-251707408,0,-3932161,-16777024,-1,-16580416,-50331649,0,0,0,-253,192,-1,49407,-1,-16,-251658241,16580415,-16580608,-1056979969,-49408,-1,-64768,-1056964609,-61696,-12648256,1057014015,-50331649,-12648448,-1,-16776961,-251658241,-1,1072758783,65535,-61696,62980035,64767,-251719936,12648195,15793935,0,0,-65536,16777215,16580355,-15794176,-251723536,0,16715520,-12648448,49407,-1006633153,-12599041,0,67059456,49407,-16515841,192,-62980096,16580352,1057029903,255,-12648448,15793920,0,65295,-49408,-16776976,-3932161,15794112,0,-3932413,1056964800,252,0,0,65535,-251723776,0,-1057029376,61695,251658240,255,-50331841,-64768,-1006648321,49407,0,-1056979969,-50397184,64575,0,1069612803,64767,12648192,0,-4129024,240,-15794176,1056964608,16777212,-786673,-3932221,192,0,12648195,15793935,0,0,-15794176,50397183,49407,0,-3841,15794175,16715520,-62980096,1069612863,-1006648321,-1056979969]},{"sector":15,"data":[0,50331648,-1,-16129,49407,-49408,-65296,-16518913,192,-16777216,-16,61695,65295,268189440,-3841,-3932413,12648387,0,-16580608,-50331649,0,0,0,-65536,-1057029121,0,-251723776,-1,251658480,255,-16516033,66912255,-1056979969,49407,0,-64768,16777215,64575,0,12648195,-12648448,12648384,0,-4129024,240,-15794176,1056964608,-65284,-16518913,-4128829,240,-16580608,12648387,12648255,0,0,-1057029376,-1057029376,61695,50331648,-251674369,0,16715520,-62930881,-49408,-1006697536,-12599041,0,67059456,50381055,-16518913,192,-62980096,15793923,1069612815,255,-12648448,15793920,0,261903,16531212,16776975,-3932413,-50396224,251658240,-16518913,-16777024,252,0,50331648,-1,-16531201,252,15793935,61695,251658240,-1020261121,50396223,50396415,-1056979969,-49408,-1,-1057029376,-62980096,-61696,-12648256,1056964863,-50331649,-12648448,-1,-16776961,240,-15794176,1057174284,-16776964,-16580368,12648387,-256,12648447,12648195,16531200,0,0,-16580608,12648447,-65536,-1056964609,-251723776]},{"sector":16,"data":[0,67047168,-62977024,-1069613056,-1006697728,49407,-50393344,50331648,49407,64575,-49408,49407,-15794176,240,-15794176,252,15793920,0,1057029903,192,0,0,0,0,0,0,0,-251658496,0,0,0,0,0,0,0,0,12648255,1056964608,-1056979969,-16580608,15794175,-64768,65535,-15794176,-1,0,16777215,50331648,-251658241,-16777216,-251658241,-1,1072758783,61695,-65536,12648387,-253,15794175,-253,64767,-253,-50331649,-15794176,15794175,-64768,-251658241,-65536,-983041,-1,-12586753,252,-1006633213,-16727809,50393343,62980095,-1,1057014015,61695,-1056964864,-49408,65535,15794175,-1056964861,-256,-3841,-1,-49168,251658240,-3932161,-251719744,50331648,-16515841,-16777024,-64528,-1,16580607,-4128769,-15744769,240,16580355,61695,251658240,255,-1056964801,-12648448,-1056979969,64575,251658240,-1057029121,-62980096,65295,0,-16711921,-15793924,16531200,0,-16711921,240,-15794176,1056964608,15794175,-256,-4128829,240,-16580608,12648387,1073495808,16777215]},{"sector":17,"data":[-61696,-12599041,192,61695,50331648,-251674369,0,16715520,-62980096,50396415,-1006636033,-1056979969,0,50331648,49407,-264244993,0,-16777216,-49216,-16580368,192,-16777216,-16,61695,65295,1073495808,-15793921,-3932221,12648387,0,-16580608,-1,15794112,0,-251723776,-253,-1057029184,0,-251723776,-1,251658480,255,-15729601,67059648,-1006648321,49407,0,-64768,16777215,61695,0,15793920,-50331889,12648195,0,-983296,-251658241,-15794176,1056964608,-251722756,-16515841,-3932221,192,0,-253,1057029375,240,0,49407,67108611,49407,0,-3841,15794175,16715520,-62980096,-256,-1006697488,-251674369,0,50331648,-16727809,-12648193,65535,-241,192,-4129009,240,-16580608,15794112,0,65295,16531200,-1056964801,-3932413,16531392,0,-16515313,-15793984,16715712,0,67047168,50393343,-62930689,0,16715520,61695,251658240,817889535,251722815,50397183,-1056979969,15793935,-16580608,-1057029124,-251723776,-253,-1,-16515841,-12648196,-251719744,50331648,-16712449,240,-15794176,1057177356,-16580356,-16580356]}],[{"sector":1,"data":[12648387,15794175,-1056964861,12648195,16580352,15793983,-65536,-65344,16777215,-251658496,-64768,-251723584,0,218042112,-62979265,-251723776,-1006697728,50381055,-1,50393343,49407,50396223,-1,16580607,-61696,61695,-253,15794175,15793920,0,806158095,16531395,12599040,-3932413,50331840,-251658241,-16580608,1056964800,251658492,-1,255,-49408,0,-253,240,61695,251658240,817889535,0,0,0,0,0,0,0,0,15794175]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[2120269,358,32,720896,-164822912,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":9,"data":[817766158,-3768063,15106305,1312588286,-1938918075,-795936040,-1946425717,2085293660,-773598939,65262051,9118300,3308675,1153893749,-1962931918,-377277876,-1931422972,552567759,1552676867,897338134,-472783919,1543758801,-1962898654,-377277876,-1931422972,552240074,-11350013,-544336780,-1048457589,216728064,0,0,0,2025675,1314014539,1112888403,1917132858,544370546,1769108836,1646290798,225734511,240788490,-855002081,1275181089,4858317]},{"sector":10,"data":[279886,19923026,1991,32772,512,91365,0,1,4195800,4718664,5374034,2,262144,0,0,0,1994326105,1994391616,1380272902,4998478,23330816,23341313,1895905501,1390215425,21984257,822169562,1367933265,22129921,-754888359,1366294865,22146561,-301903335,1645805921,23217409,520184593,1659371875,23252737,-738106622,1658716514,23276289,-687775129,1667236193,20327425,-1677642258,920977718,20153089,-1493092648,811139382,20986113,-1224657231,917766454,20412161,1224816641,1061290304,16923393,1140920456,366936345,18193409,872486218,382533910,18448641,-1593764353,804651311,21282049,453068047,627507528,19303425,855714467,708051243,19646721,134293792,1112146216,21137921,-268352889,1144717635,21240577,-318694868,434438425,21715457,-251573457,1259340106,21627905,-469677514,1243021641,21618945,-1476310471,1250623818,21666561,-1123988901,517341476,18132225,-1744758372,277348628,18821633,1409359566,627441977,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8978431]},{"sector":11,"data":[0,0,0,0,0,0,0,65536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1230438400,1313418830,1767309385,2003788910,2035490931,1835365491,1936607488,544502373,1768169472,1763732339,1749221486,1701277281,1936278560,218562667,1952531978,2017815649,1663071337,543515759,536879165,1667331187,1986994283,1818653285,168654703,112640,-326412853,-1962349437,-1070922154,-1980217719,1589967446,1200301816,1191912980,640381974,950147,642917492,-15828993,1996424310,214558724,309706763,-16482685,1996425332,-401698812,-1070905270,1996453867,74907398,-1996044824,1451883590,75400190,-16222977,244319350,-1958204952,1175190598,-1002146562,-148440994,-2147480505,1996428404,175570694,-16222465,1996488310,570222844,1996436459,119597062,1996443730,142016266,1323830928,1996443694,108461836,-100609,317258870,-1005655262,-148440994,-2147480505,1183549556,1575324422,503319234,1430622296,-1910575989,-1561558568,1183536640,198322956,-385649214,1996423353,175570700,-85455216,-163149497,-1962260989,1183386710,-229209616]},{"sector":12,"data":[-637301,-1072957874,1589908852,126494448,-10582392,74734652,1500854844,-940554497,63046,-1024316,-1977159610,-62486521,74760202,1114975804,-10189171,1996443670,62253302,199902857,-10652224,1996426358,1686539530,-1202710785,-1873795072,391964686,-10320247,-2092862144,16737982,-2037699724,2028601190,-263258365,2122352363,175268348,2063367808,1182794871,1988878588,-163119114,-1996732790,-335584126,112779,-16560407,-890762634,-364476155,15367811,2028536692,1656160002,1656160255,1686539775,-397404417,-2037834413,-1072955552,-1224798347,244383586,-1203322392,350814219,1623098115,242549247,-10307841,-1410855280,-373281978,-1769274625,-1070858400,-1981528439,1589962326,1207379684,1971322892,1333798423,2122514956,477495048,-16351613,-397273483,-991230359,652500676,34359286,-1224800652,-336855200,-10438913,-1995683096,-1072960954,250151797,-463551487,38258470,-1960411136,-768923577,-10445173,-745813717,-1980217719,1317665366,14084584,15367811,-1108802699,-128007168,188189478,-385649162,-1224802128,-1224736928,-396951710,1183385364,-229209616,-1024316,-1977159610,1183422471,1996444406,1558728944,-364476158,1836433419,-10189171,-1945483639,317394006,-1024316,-1977159610,173982727,638207743,1183516552,-162594826,-462045173,-16097596,-970585530,1586179591,172424970,1158137382,-16097653,-970585530,1586190343,172424970,1158137382,638213771,-1929377850,385836166]},{"sector":13,"data":[-18352,-1873784167,-37754866,-336968055,-361300218,-2096934424,1946217086,-361300215,-1996206872,1589963334,-129596424,-364475646,-16283354,1589962822,-398029852,507984166,468255606,1204233983,-2097151742,1946217086,-463551375,478118694,-9997312,-385916746,1183385304,2126515176,1620478798,-994038785,-1960385442,1183392327,-296318484,31999687,-463551488,652756619,1914455865,-329333707,71824934,-15240128,1358913718,-10307841,-10307841,-1995875608,-1072960954,1191122036,-330923032,-2083853558,1962993790,-364460283,2122514432,192151786,-10438913,-10307841,-2094596632,1946217086,142508845,-2096204289,1979647614,-1983894776,1183385670,1354771206,-16222465,-1224800650,-1224736928,82378594,-364475908,-1224799765,244383586,-12286488,-385916746,2122522194,57934058,-16725015,-385916746,-1041691990,-364475648,-10451319,15353543,735087360,-465139264,-2082056567,1979648126,108954394,-1005292033,-148446114,-2147480505,-1863777419,138840573,-1006221687,-165223330,1946291271,1622605647,47835391,-768375,-385916746,-1224801810,-1175912608,-163149563,1962934589,-193528026,-16222465,-1224800650,-4653216,1760055551,-364475909,1182121995,-10438913,1810370192,-12850422,-385916746,854262277,652500676,950147,-1224796300,-14221472,-4714889,-397389569,-1073018833,283706229,1622605821,25749759,-10438913,-1996332312,1183574598,-310157590,535137026,147475805,-326413056,-1960945834]},{"sector":14,"data":[-1590819746,-1073020920,-1064428428,641633062,490219008,-985200011,-880081290,108308211,434470,1595924715,1575324510,1426065090,1465314443,-1962522994,954401870,915088969,-1070399484,-1072976858,-1053087116,-936692353,-1406740341,-361496516,141885244,-472780029,-554962173,-472792181,-670833711,-670833711,-823397629,1342440376,1021841040,869413725,641526720,1946172588,1020890091,52393215,652464627,-1191087989,1342636031,1625837905,198324999,-1949469504,-339309616,-1014263790,-472783919,-472786941,-1030957053,1593917581,1575324510,1426064578,1465314443,637826756,587299968,-1910622860,915081310,872153126,-268194624,-1409104253,-1962639676,641655752,276104504,1973875527,-611537653,140392735,1357602420,-964431613,652012290,852003500,860244461,651201472,1009790124,850884361,-1327985692,65206026,-336928061,534481971,1963482681,-17633,-1207417202,-1960443860,100671510,-397258669,-1910635922,200313818,529298882,2930768,1342732031,1476591592,-443851169,442973,1475119957,-486257013,650219075,132855,947224576,4096294,1967476224,117384751,-1960443902,637544510,1969803,-2128208157,526,-14265984,-3872715,71732825,-503134333,914433776,-2147483646,1575324511,1426064066,-1957172085,-1070398386,-1047638045,34010918,1971322880,1048651332,1162739712,-14271627,637534734,2637451,504269606,640344832,134785,106004480,-399114458,1963458497,-14285301]},{"sector":15,"data":[130869301,92874247,46629721,-2128157470,566,-443850880,180829,1475119957,-1090107762,-768409580,38112038,309641227,104696614,74907472,-402360577,48432579,-1956657269,79846885,-326413056,637814414,-1459614559,-1064566781,-1960440460,184551454,637826267,-1962391669,1575324616,1426064066,1996483723,16377860,880066571,-2128166770,1308622910,1210414149,-1591295858,-1073020927,-1064428940,4096294,1950699008,-1195363569,-1873804282,1527900174,82559027,-277561333,-443823989,180829,1458342741,637814414,788215,729120768,440304422,594804736,406749990,460652544,303467302,512435712,-620036088,52823156,-494860713,-1993932802,637540374,1709707,1614118,-905197429,-1185935756,1376190463,-186101423,65755140,1578107064,-1034033781,-1957363710,139365356,-1054734416,602931387,-787516199,-773074453,1022087659,-2147257088,20711627,-880802955,281146884,-880802956,-1949158654,1317733958,-788077820,-489500192,1347572730,501747344,27807832,-397409163,-1957036025,113401317,-326413056,-1878755585,1491331086,1575324562,1426064066,1317792907,1361044228,201319144,1209496768,1346420878,84342310,125043712,1381028403,-401791000,1996446189,-401698812,-443852765,180829,1458342741,172396119,-1962510709,-1960441762,-2094661036,57999420,1133537515,-1960437131,-1157625322,1376166912,-1873587706,265611278,1124746894,1475019381,344663627,38570790,-851312456,-1958186463]},{"sector":16,"data":[67437638,-1152186880,-919404521,-397324205,-1940127992,-1907286055,872362944,-1425766464,1149747851,1317776130,1377764868,1068816267,526000589,-1053093518,1381174645,1543451368,79220875,855960320,1003523008,108267614,-851528624,1583306785,-1034033781,-1957363704,-1906878740,2123040326,650130180,637685131,1962950019,1360519961,-17438639,105287257,869830174,530949622,-401698735,1583306567,-1034033781,-1957363708,-1906878740,-1031010234,2793766,1594115587,1575324510,1426065090,-1000936309,-1960442762,-1960442788,992347716,1962936374,1048587815,1962934414,116860428,8388620,-880802956,100869648,124911634,268829478,855995136,-1874269248,1963115510,113849148,-397324205,185073184,640971968,638080137,-83598208,72122406,1220643842,-1993949042,-1912602354,-1036304191,-165277836,1963983940,-1873803768,1463347214,1149969927,1589644040,-1034033781,-1957363708,49054700,1183733590,915088900,-13434846,1207860873,37651238,410255616,137792294,1686119936,1443297540,201279720,-10652480,2146172486,473840422,645428992,-167486325,913653955,1963115510,281278013,-919390092,1364284166,134055912,812962315,139757862,73695270,1283467003,-1064566268,33984046,651856640,-1064433783,1443237099,201258216,-16157504,-964428218,-1460975862,1183432755,661934078,638250627,33834230,-1960382860,1342572612,134062312,138709286,74743846,-1948652798,-1072955834,1598554485,1575324510,1426064066]},{"sector":17,"data":[-326898549,-950577656,129094,101349060,141885222,134044392,695582731,650130182,1342731519,108330790,-401698736,638014843,1946698809,9103619,1962878470,-47060984,1958742791,-28931600,639522310,-1962771317,1580795486,1461875716,-2114290039,1047142,-271383375,2122971907,-611427844,872302222,-50383882,1340843251,76228240,-1960390093,-788516338,-489500192,-1949660166,1107343568,728900045,1586417547,-1261292546,1914817855,1975597854,1157047834,1946222596,-1927342566,45742678,-851463168,990147105,520647873,-1070397602,-1962856215,-1907818938,60892864,-754667264,1959209952,-28930550,-1070348149,531297276,-1960442018,19203140,-385649664,-1960443725,184551486,638153983,-402098689,-125043601,519980686,207523414,276107,-1392721869,1726204043,1946172588,768758,276102972,956302266,460589126,-506334973,-538185469,1963719299,108822542,-1973783318,1178142788,189953288,-1958906625,-27751462,507478310,638022744,-661897343,-2144982411,1972372095,33879587,116790901,1946288140,17102359,-953806220,-342847481,552308747,-1207450074,25135398,1946417795,105170444,-2017227542,1552484700,-487455993,-9180777,1577862798,1283466783,-148503548,67652,-1960440459,50347550,-970586018,637599559,2498187,1418405443,-2118110460,1946157538,116794894,1946288140,44049926,-1949762048,105449550,1996443987,-397258498,1451971920,-95515652,201213579,-1956749376,180510181]}]],[[{"sector":1,"data":[-326413056,1443556483,-1983892649,-789054394,-1895938423,1988823622,958811656,1979718710,-1947807413,-773402146,653460454,2242051,71628582,544474112,136219430,1207313920,343229444,-17658,922691078,1397948430,134196968,343195659,73173798,1963115510,1443255053,1543260392,292929547,-1007272725,638219268,-1995946869,-655755194,105286400,1208513600,1963214393,638905124,661131,111411387,1376145926,-401698733,-1996027106,1183448646,-49916,-1326906507,1443235328,1342732031,-402360577,1381104965,-89003952,1526224521,-1073019047,-1960398732,-1007221668,-1502347008,123777,116809353,-27358378,-1911851709,653364162,-96040531,-1991558421,-506332594,-506338863,582504787,1356542720,244339027,-1991084056,-397345722,1532623459,276086795,869830174,-851462958,829562657,762691899,-963709389,-16091393,1443298422,-362753,1996486774,-25755658,1342280168,-1862502657,1385031694,185032280,-351374144,-339725564,1996424938,-99227400,-28407033,1225815105,1946570297,-1948677366,-851528504,-1950250207,-1956749368,146955749,-326413056,134647342,244000256,81985542,-169098866,637814411,-1912600925,1048784576,1962934282,1048782348,1946157104,178466308,71731968,942594867,1962970654,-1873587439,1392240654,185597416,-1962707776,-443874234,180829,-1897100459,-1960442810,771753494,956303521,125109318,135694638,185920256,-1911524160,111224512,71710976,-1993936523,-1912601066]},{"sector":2,"data":[-953809850,6,244319744,-397285144,-443871314,180829,-326412987,49054494,1996445526,-129505274,611631115,-244087,-2031551370,-1910606345,-1960379322,184551454,638022875,-402098177,1996486969,-8328964,1726726195,-62484848,201782822,-260832768,654067342,532107,142081830,-402229505,962263313,1114965590,33984046,244000256,-1910112252,855639558,-61436965,22493478,-165276555,1946420551,1200301581,1975520010,1086360589,-1910109973,-522057657,1183760435,512435964,-1993998328,-1070397369,244338768,1599207656,49120094,1562371467,182861,-2081649835,1465258220,-1962117493,1309347406,856978704,-1949748270,28836958,1914817858,-94992071,-1946663287,-1073017274,1183530101,1975520016,-95515855,-1946659189,12059742,1914817858,521543189,-1175431539,1308688392,-94993416,-851463168,1920081697,1853210939,-225748970,-397409045,-1064372169,41716518,105155366,1317652787,637776380,-486454238,1552623186,32211716,-472824718,306613766,673055526,529212928,-27358969,434832098,-15567105,-397409162,1996486940,-397389058,1586230597,1958743038,-397389035,-1030818655,4096294,1967476224,-62455974,-1070377493,637601257,-486257526,308186101,1962932608,-1950118184,958811097,1979718686,-472821535,-472792181,-670833711,572392230,1207313920,259276804,-689417466,1963043064,-1863823343,101444599,74907473,-402360577,-796132333,1353442136,239504210,192266251,1317785740]},{"sector":3,"data":[1359274768,-1896387864,638038976,-919397342,572916913,1364394316,-402098433,-1064372397,1482316633,1946352512,66813998,-75479948,-1206815739,-964493311,172949256,-1226243202,-1872368642,19269091,-1947669755,495396568,1967389579,-1948455946,1579416670,-483494650,352396805,-628371989,-1960999130,-160087045,165921259,637862182,-352168703,651725750,-1993990777,-74775979,-336431805,638182310,19272961,-1679032763,-2027496821,1166616093,1140558846,-1947471243,-443851169,1098333,0,0,0,0,0,110046876,-13757646,773007926,321783439,741801774,110046739,-13757648,521348662,604423982,-352321517,-617377759,1342504888,-1058533744,110046800,-1892805842,773009414,322045583,774800174,1430585875,102689931,1347637586,516173563,-919399634,38767142,-1152369181,1359413247,-1125625005,-196704000,539920686,-87693293,1515725795,74760763,-165025710,1499158608,1562314586,922693197,-13757646,773009462,321795839,646704079,-486322294,-2084555968,958792899,653817095,-1157478514,1359413247,-1590799533,61936430,-31135533,788416135,-15520093,1827143758,785048570,-15519581,-790036874,-28931595,-352303361,66879648,1532730231,520575577,856651101,922693357,-13757648,101920310,-315372717,125166602,820514448,-32117779,101283276,-401698733,149619958,-1873607086,15919118,774831918,-1064417261,651899712,1967996800,1334519342,640213761]},{"sector":4,"data":[67454966,-1960435339,-771028393,-1047651980,1312784678,638612805,185098123,638088411,1963480889,-1010660606,-4629928,1381061119,-308811440,-1962742397,1297948645,-1957345845,1465261804,637951684,16001,963986766,69090086,1259172608,471743270,-1960152320,367739339,775913766,1260287440,109019174,856847594,1334453961,-17912,1381126406,-335970584,1606690321,-454556153,1249437940,-398283032,-1031058819,-310157729,535137026,80366941,-326413056,142001238,-1190764917,1451950143,179054084,-16223040,-2009709614,921887239,83910,1586217867,918760198,-1956771960,146955749,1430635264,-2095125365,-11124500,-2031613322,-472763405,-2081387729,1962936446,105286405,1586306539,16759486,-15382086,1996425334,-397257978,1586364311,1393972926,1458680040,-250353584,-905197429,49120094,1562371467,445005,-326412987,-11053538,921177206,-1910119437,171346904,-1966525696,149521164,-1006078835,1312491646,-1962640378,-62323122,-1527529077,378406,1583335563,-1962742397,1297948645,1157630154,518818645,-402229505,115602165,-1591295858,-930414590,-1962742397,1297948645,1157628618,518818645,-14788778,-722990474,-1073018893,-661777548,-1962379637,105286654,98814091,111473660,1606978335,49120094,1562371467,445005,-326412987,-1590798562,-1073020916,-256167307,541112577,-1873588143,1268705294,-1959870322,771755038,788108,2001190,441088,-1929364039,-1993996201,-488994025]},{"sector":5,"data":[260646646,-1960394610,184550942,638219739,184549537,-336759360,126559929,434982,-1946517619,1183579742,1958742790,-397408760,-1962413249,-678691624,-1951745872,-357520445,138841002,172395435,-1933407317,197692354,-310157366,535137026,113921373,-1957346048,777461484,184552609,-1910410048,138820544,-1591343500,-269811712,856063627,-1414792000,650611627,394887,-18261,-2090874741,-443874579,-900899553,-1957363708,1381061612,73319430,-1203797978,-2144991628,343264319,926492227,-695529867,-1007233229,-2046659583,1065953010,1532582407,-1034033781,-1957363708,777475820,931583,1361634137,-1947036952,1451951686,922691076,-1960443892,637537854,-2096083573,-521989433,1974465276,1435051739,-1946948610,2123040374,1220971268,-1977171826,637535518,184552097,-1962773056,109979334,-2128216063,1308622910,-165907131,1165296835,572427046,244000256,199426076,138885414,-1014822796,-369761782,-1960443518,-1024064425,653554692,1838635,1396824567,209059595,1042189094,651756288,-47162,29554267,-135724171,-13761024,1493175350,-1047642909,3604262,-1176816896,-1014824899,1065362952,639858104,1963030329,2139694621,1979648769,870287125,-1414792000,650611627,394887,-2082502741,-756938517,638042603,269963,-15997902,-397003915,-91491929,204901158,244002304,-818216946,-1993471883,-352317898,316903445,-242620335,202279718,1976515328,914958065,-739704820,260777472,-160118518]},{"sector":6,"data":[-2147302525,-244055811,1962933632,-578137282,-315424974,-1948004021,-773598765,651822051,2235907,-165227981,1946289223,1468737028,-165258488,208929287,141873675,2013210194,-27858943,-503069821,850324457,133572333,638743554,-368672896,-14283915,-14284425,904398711,197362686,-1913920542,91619083,73891878,651267067,269963,168790822,-2092337975,-41942333,-2131659776,175439869,-654054094,-654057007,-315432213,109019174,639792618,1963554617,1979648796,1200301588,1204233735,641715462,638080904,-351713399,2139694596,197362441,-1326722334,-443851169,311901,-326412987,1089241886,556675,1586306164,1269283518,-16222465,1381172854,-1912884504,1393999710,-318904240,1996424939,-278140922,-310130549,535137026,80366941,651725824,283316107,1963042961,-1909550325,-1962933730,-644967649,40894246,-326412987,-400664802,-1072959429,-1070387340,84342310,628360192,1460043403,201734438,773158144,923271,202803494,1300964864,310218000,1085010940,235310886,-310157568,535137026,46812509,-1202103552,1364214016,-1957345965,-326951188,-984132016,1183516758,1977879046,-1958890494,1124120824,108143053,567134091,1183648627,374480558,786978640,1608026884,49120094,1562371467,445005,-326412987,1424786206,1183536982,281343494,41172404,1183399092,122091260,-966560640,-989726138,-167049098,1015094645,393561422,136220206,171346688,173968384,-1945602423,1187450446]},{"sector":7,"data":[-402579956,1418532783,-1949748472,782040134,8003327,-2115435661,-1193768192,567105280,119456651,67585782,1413024372,956855556,58000972,-1274966551,-383660738,1992622263,142525452,1426619789,-1962783768,1190551037,41157639,2122972979,1958743034,142001473,772306061,5455488,503936000,777395798,7479039,17254134,-617413260,-1962846231,122091222,-1207470832,567100160,-919401358,-839104885,-385650143,71041262,-907476110,-92372992,-1924238080,1183558238,374480636,652759123,-49917,-1175911564,244002304,836960264,915134862,1955397642,-1928915448,-1431524738,-92946422,-391479667,1992622482,178957324,385512896,-1437168353,1183566131,1931595260,142001605,-167218035,1948256070,1048587881,1946157139,-1965345951,1105952796,-74753934,1962991336,-92372984,-348818176,122091040,-2146732672,1946221182,13821957,-4245269,-1125627905,-1946520320,-2009004857,142525444,-1962181235,19196151,-1431505017,-92946422,1946204648,142001425,856183949,-62485559,544416205,1992657899,38045960,-335544392,2126811251,142445832,1988960022,-397061974,1482490128,142001232,-1190626163,-1070399489,-638079246,637976963,-2144465784,21310,-1977215884,537659460,-1952947924,4319480,41156789,-2010724866,-1201995412,567105280,105679142,72648998,1107773174,1051989108,1190535629,175374855,-1928825147,1102317652,-1014292019,-310157729,535137026,181030237,113408,-13740205,1006660126]},{"sector":8,"data":[-843398398,3729473,-1186873157,703270960,-402575942,521011242,-402573894,-1514527328,630908993,-398349152,1052448316,269531393,134694646,297337716,627107856,-1023409480,-400617732,1589912945,142052616,-1576760794,-1574026836,-1064566706,957120196,108334662,41286459,132710027,-1960901120,625928663,-1178586372,-544473089,1094823666,-549725705,-1977216140,1547501381,792464244,977012596,-347143308,872203241,24936685,-1408273094,740297798,1006924385,-385386983,431227012,-796253747,1090831102,1470839476,-1976607557,1959213572,1958951472,-1430025684,-142091892,-661733236,567101364,-644982926,-1070401657,-218103879,-1977200722,-952434875,-1019607180,-1014365324,-1949748310,-1019564841,-952499084,-2144978315,1950023549,1948006408,1950103588,-851819232,1994596725,1996683648,-906080492,-91499660,1166681679,1958951679,1966750920,-1070376717,-1979669527,-1175737661,1987362826,-311287748,179047287,1013675200,-336104416,1950039264,1949973724,1949056216,1954299092,1948990672,1950104780,1950235848,1948400836,1952136384,1952267452,1950170296,1918975156,2004499462,-18873342,2012840129,1017815927,-33131218,-18773307,16613580,-109047692,-1977256180,1019488961,-383944956,-108986549,-384469240,-41877693,1996780545,652315147,-997849720,58048523,1040148201,-126418936,-1915737256,-1056767161,1438892547,-326898549,176079876,-1979807256,1183644798,918892286,479068216,2891406,1015084595,-1386843136]},{"sector":9,"data":[1967214653,1413328139,-1408928440,125058364,1975519916,-991695877,-1431566722,91503420,-160055286,643608654,1979598136,-2010755327,1444872005,-1392740667,1975519914,106350074,-851246920,-1962577375,567084102,141762398,1962949760,-18238,-1034033781,-1070399478,1309050414,-594818304,-1959372970,2133066823,431228533,1090789837,-164208860,1971323975,-1740559329,-13373301,1023240936,113155,-2092496268,-260695553,-24391117,1090832267,1583299252,-1979710774,-771444256,266633448,1009790981,67270201,972849159,-998243466,1430635271,-2095125365,1465255148,-1877969153,-7149554,-990226807,-1951725954,-2136469434,-986826379,-1912588234,740199964,-1376374016,745848842,1967477821,1295887627,-1408928432,125058364,1975519916,-2132481029,1966735740,-1404088574,141869066,-1325864022,199993982,645815480,1979663672,-978628863,62458998,-1073042432,-492174476,173444088,108384779,567094452,1451872563,1107523068,-963970837,-1409329944,1323877002,783854591,1303948116,-1070355632,172374442,1455768437,1048587782,1912799312,861647886,1931595209,1951415330,-1205474551,567100160,-276625038,-61437175,1018424130,856782082,-851659575,-1962315231,-851528488,-1878594783,1183432755,-62485508,1610241675,49120094,1562371467,838221,-1607548877,-1073020786,-13743499,1493174326,-1047642141,104267558,512435712,-1960443870,-486532082,1207379690,1962934532,1207379485,1961885700,1468737045,264405766,-355341615]},{"sector":10,"data":[-355341615,41140795,-1014775157,-338238966,1064757438,-326412861,1447488643,-1983892649,1178205254,-989432826,76153974,-28931776,956980875,125044830,-164373618,378555371,-1166635745,1085920907,173968128,567099316,-1053085070,1015098994,678779469,-1958851445,-1047839660,477413899,-851312456,-1189776863,-695533504,567099316,-1053095310,1015088757,91505998,-672546765,-94467838,50625675,1284179580,-772209892,-2080832543,-506395967,1284241667,-772209872,65130977,281510905,-1191281149,-617414649,-397191344,-1072961444,2116760436,-62486018,-1946369906,1580857950,-1959889656,1141048388,-1174918394,-1054146496,-930372365,-678748410,567099316,1972176754,1958820800,-59310324,870877416,1609121984,205846274,-311091200,67271808,-13375620,-67092295,-1960401677,855645198,1049175744,132317218,-1515870811,653910699,2494091,604908326,1049175552,-1527578588,672041766,237708800,-1993998298,-1409276354,735611818,-391362101,1269443041,-1527515019,705596198,237708800,-1993998296,-218093506,1049175716,-1960443842,-1342170098,648737791,3948169,470715174,-1207049472,-617398323,-1817458690,-119368789,-1934901197,-1960399936,637535246,2756139,708741414,-217914624,1049175716,-1414725628,-930428621,-58707741,-2131528704,175439868,-506347125,-1527527421,-1263737621,-793203922,-1070355650,-33405814,100869832,-1515519938,-421354076,-617363221,35555622,512304640,-1993998330,637536798,3284537]},{"sector":11,"data":[-953809035,151007750,-28407040,-1993995549,-989853122,-1527577482,236882726,1960512256,-472823024,-472790133,-654056495,572392230,512304640,-1960443896,855646750,992362953,1979718670,12577027,572916144,712246343,73892134,958795775,1946159134,1333798410,-2144976892,-370211737,-2144468841,36414,-2128209035,4195407,-165276693,1947206727,1333864169,653262852,790144,116795008,1963065356,116794988,1946222604,915088996,-466485244,-1072976858,-796174476,3976230,-12782988,-1053156748,-234682252,-234626351,-165223701,477430276,1241761411,-722733963,139212838,-165280139,141885956,1242285699,-1058279819,72319270,-165280768,1950352455,-1960422640,184551454,637891803,1074024320,180585307,654259945,1449611,762632971,-1948004021,-773402125,653460454,2242051,72122406,1048782400,1946157070,1283532304,637796356,538251,72122406,116860480,-2147483636,-2094657675,4670,-953809035,4614,1254263824,109894286,-1064566783,-443851169,574045,-1897100459,-1070398394,4096294,1967476224,2930701,1342469887,-1947804696,-443874234,180829,1458342741,205950551,-458102778,272039718,-488704,-857209226,105286117,-440014761,-1000744818,-1004140426,1593770612,1958742788,1606912770,1575324510,1426066114,861400203,209598975,-14786188,1894254710,-1896313884,279120990,108461824,199592680,-1991150400,-396949946,1183769983,35570952,176130304,-1961998455]},{"sector":12,"data":[1334381134,312550924,38242560,1089830,-1006221431,1200358470,306678036,521160703,-1908506578,192217088,-402098433,244383546,-1961784856,-443850809,705117,503348899,504183272,-1930948976,-335596739,911890662,796297,237406518,-136566016,-1765572133,512308736,-315424758,1391233877,-1957345968,249765612,1342619699,244339024,120450792,-768380957,-1911126482,1959922432,-1877080541,1037756430,872098280,-1873653038,1042016270,1381159475,317197968,244325950,121484776,-1962901317,1060775627,641932660,540805002,154990708,-880020364,1959001675,1065362954,653686029,-1962932282,244004569,28966922,1048782336,1963065436,378217989,28835934,1575324416,516672333,1430622296,-1910575989,485262296,242679638,-1981586200,-796138426,1183432747,-396981786,652631748,639911819,1965442873,-373282043,1451950310,-994038812,-1960384930,1183392839,-229209616,-16222465,-85457290,-330921722,-15960321,-286782858,-297367290,-1947187573,33944150,-196704000,-990488951,-1960381346,1962281783,525603,-1980217719,2122578518,527761644,-887041,-11079562,1996425334,116647942,192200715,653549252,1962950531,-997528801,1183577182,121186028,213445236,1744250368,-129629950,-1946663285,-1511261610,15353543,-195116032,652887691,1979860793,-293698772,-15043328,1996485238,-128006928,108527398,-15960321,-1696069002,1975520006,-128007156,653149835,1963345721,-195116017,652887691,1963083577]},{"sector":13,"data":[-14554868,-2081798401,-351471546,-129594448,49120094,1562371467,707149,1167087646,518818645,-326903666,2122536480,57999366,-16698647,921176182,-532248094,58048523,-1962859799,-1983894576,1451878982,-362887956,608668454,642201894,149488501,-1950340351,1183385158,-61437446,653942468,688003,216597364,2139301377,57999368,637575913,67389430,-14279564,244320375,188486376,-1005620030,-14222754,244320375,-381939480,1451950303,-994038816,-1960383906,1183392839,-195655182,-1996488187,1451882054,-161561352,4162342,-1662450827,525568,-1981397367,-1960384426,-1960442809,1183385175,-464090654,1802813963,15746759,-161561600,653280907,1979860793,-96040089,1978025529,-94452663,142081830,-16222465,1593771638,200313826,-1003522826,-1993934242,-2144991113,-352058289,-94452640,71825190,58060800,654275561,-16484353,1139335286,-94452735,138905894,-963952661,1191134955,-431586320,-1197806836,1589903372,1744250614,-431619838,-1947842933,1391061078,1979059199,-531199212,1183432747,-329872918,1342506168,1021841040,-339727556,-94452725,172490534,138906406,49120094,1562371467,313933,1167087646,518818645,-326903666,1996445210,-524031986,-1947842935,-1983894576,1451878470,-396442390,608668454,642201894,-1070922123,10807705,736515723,-396442432,608668454,-1980873079,1996484694,175570700,-1996203800,1183575110,-262763538,-1996488187,1451881030,-228670220,188189478]},{"sector":14,"data":[86209782,1183383560,-128546314,15498883,1996439925,-294191120,209125206,-401967361,-1073019811,1589914996,1065559794,647459840,637814667,-1996073077,1451883078,105286652,638080651,637814665,-1962518647,1452014150,-1004672004,1183576670,121186028,213436532,1744250368,-163184382,-1946794357,-2081687466,49120094,1562371467,707149,871140181,106859456,1393019776,-1914154928,29554400,-1909582219,-1962933754,1207314138,141836290,637814411,15402889,-443825525,311901,-326412987,1996445214,-541857780,2020917259,-1962491762,-1960441226,-880802724,-14265593,-1960443276,637543454,1451954059,139856646,1364858996,856184459,-741279808,64026592,-355400122,-85796655,-2094641063,1946159228,861558820,-788077614,-489500192,650720250,1376285951,244339024,1345883880,1055395472,99324473,-236433008,-1072997921,-1907881356,-1993981760,-1845493490,-2090940277,-443874579,-900899553,-1957363704,49054700,-1070377130,-16091393,1347422326,1407717008,142001407,-1946270071,512435906,-1960443868,1418405391,970666754,58064478,-779074837,-489434654,-896852230,956718731,326370398,-1014178930,-13371853,-201539442,-1898410332,856615875,-1260876078,1914817855,1975597834,1183522566,-1945506818,-397205541,-1070342199,-443851169,574045,-326412987,142016286,-1898012440,106859456,41418534,641204006,637814667,661131,605981478,260777472,12256849,106038948,244339538,133153256,1967151705]},{"sector":15,"data":[-4498937,-1876825089,-783171533,-489631262,-1194816518,567099904,-428713383,-489570253,-85798703,-1014249333,-1962742397,1297948645,1157629130,518818645,105286486,1937031179,-401698736,-922011557,1586195829,29619718,-1909563019,637534726,-1014095989,4096294,1967476224,512435790,958791716,1946166814,106335042,637715331,930350905,637826957,-2097000565,958793923,125044823,-502479997,652536821,162947,1392908660,642975314,-1873797889,939124750,132319067,72319014,855960324,1589654482,-1962742397,1297948645,1157628618,518818645,105286486,2054471691,-560076720,393592843,35556910,106859264,1963049974,38270562,-1906543552,1208609567,-1070344050,73358,16001,1064650062,2367115,2498105,1451963764,46367494,729024313,-2097000565,1463355587,-2096663544,-152957757,2139351787,326369290,2131382271,71825177,259387392,-2146941047,-326553,244319862,-1992913176,1183516230,-310157818,535137026,46812509,-1957346048,1996431084,-586422264,1586217102,1200301574,651309826,2367115,-787510490,-489500192,49120250,1562371467,313933,-326412987,-11053538,-622327690,1958743004,-1012950,244320886,188136680,1444705746,-1878624513,-32184306,-11077493,1465321078,1358793704,-401698729,1599610322,49120094,1562371467,445005,1458342741,105287255,607554342,909714944,1400111142,-2093184218,-2094660922,1198784572,38570790,71616294,-1943655432,-964491700]},{"sector":16,"data":[-1960423160,1084752964,-1960434316,-1950338284,-773664305,-1946492208,1107343560,-855351669,1398146593,-48306093,637945486,-2096610167,-497480506,1605626828,1575324510,1426064578,-1000936309,-829750154,-1072971636,-919395468,1017915132,639268131,1958742700,1009789972,839808777,-1327985692,65140490,-339178557,-473855002,-2147480317,1575324510,1426064578,509013131,51017413,-1070397322,-930370308,637820612,172165002,-401115968,-527819111,1977629356,871162381,121120448,-789117835,-1070398741,-443851233,705117,-1880555520,-326413056,1988843350,75401990,372703022,784937728,757862025,-1897667751,922691265,-1591345152,-969211900,-1993996939,-1946155970,651705299,138891,1964007309,786270983,757870217,-1014251378,-1070344053,17298982,958804852,326435959,-1004121338,-2128215457,1530907967,637826055,637829001,1979610937,642975251,637689796,1070415745,74712923,-25196250,120792640,-1019507084,-1192523146,959372083,1965894686,-796110075,1583325163,-1034033781,1392902148,-27817178,359977483,1120046666,4096038,158682368,168725286,-1962745088,-963752239,244000326,551747594,-1910050421,637534470,2236043,470715174,2000233984,-2095942648,-169735485,74943270,-695793829,38767398,237708995,-638124004,-506338863,1007551270,-1930261760,-1022927934,1435523051,-1957237621,-13761418,855643702,243871433,-480694996,650219239,14079,70662438,-1941801984,77670099,651705088]},{"sector":17,"data":[138891,1964007309,786270983,757870217,-1014251378,-1070344053,17298982,858143349,1002664967,-339773757,786117611,757866041,-796129931,-1898779821,-1933341757,15395266,-25741018,1392906101,39830566,-851476186,1963416383,-957660956,74922278,1392960117,39830566,-851476186,1946639167,-17372973,72825126,-956841100,-1116348415,1392963281,507063888,812913440,-2027503221,-1993997745,-265945521,-754667009,63319016,1030352,38216486,-972298541,38242598,72845606,-1962452136,-1645542282,-796081268,-1959869637,1964187678,1048784579,1946161956,109981225,-1959914716,773005854,638790817,772032393,638790305,771901321,638789281,385763209,512437767,-1943137504,773006342,321003145,71797542,321692462,38243110,321561390,-28865754,321299246,72322086,38258470,118362932,-384620357,-1956708514,46292453,-1957346048,1465261804,-401698794,-1030868191,-14230133,-1960421833,-14285705,367526519,106874110,273123622,239570726,209160486,176130342,138907430,105352998,73894182,638552358,855791497,-2090967104,-443874579,-900899553,-594870268,75467574,108512566,-1877969665,851961870,-1949135110,-1946483612,113607660,-1895402241,1962868806,-62484728,-1895140097,1962932806,-401698804,1451831969,639419646,1070415745,-919399051,55544358,117440443,-397192367,-1064378841,-1945215861,1586037830,-339244286,413216400,378220032,1170931734,518818645,1988843350,209617674]}],[{"sector":1,"data":[855798784,142509046,-2130414592,-2130640698,855674822,564145856,-2114977024,-1946160922,-754667010,-1177406482,1381048384,-401698729,-1073008308,-454491275,-661764096,107328,1183570062,206998282,393597451,78759563,-628301613,1311492235,168724746,959232,754977955,44236822,82334208,304089,-1006632514,-1064565122,1450493707,-1607548877,-1895497695,-754667264,64916712,378220272,-544538608,1375797433,1364395606,837291664,-1899590898,109522624,-1557790702,2126774338,643177990,-1090095675,-1945698212,1959660505,1091341070,620331841,616104822,-1935346944,777002950,2178688,-955878400,-2147471354,1139285504,1105731074,1962281728,842434820,37667840,3318016,138776358,71665958,273008422,113704960,8388660,-956287325,16778758,2114373376,-1941679104,-2090967080,-443874579,-900899553,-1957363704,1183719148,379661828,1975520000,109850119,300613656,-1977165682,973080606,2130708510,10692107,109850112,501940246,10606734,1958742784,650153481,532026,1183772287,429060,10692096,-443867392,180829,518818645,772036235,-1912596831,1975663576,41225,1483566,-661776661,184549537,990737600,-1896647230,10561216,41728,-1960852853,46292453,1364414464,106387026,516173342,-1959919544,-1207940034,-1004142590,-294113,2005735796,1334519302,652280324,1962949760,1959329284,-487128200,-2132808718,1836316156,-523122805,-523116335,-1728051707,773865657]},{"sector":2,"data":[1580686,1044109196,561250308,378467467,646643716,-326434814,1360053635,244338770,-1993384984,-1912602074,-337212457,1347571976,1239944848,774300463,4726468,654311353,958799812,653817103,1991,38242598,-953761650,525383,952614,1594302208,1532582494,-1269775528,1478610189,-2144452308,50352190,-1057095053,1209975854,651309824,-75292732,-1914800897,-1960442249,-788331441,3964966,-2144439692,50352190,-148499854,-2139093692,-987340171,87689084,233527925,457504294,642872704,1963148346,1364350539,-785756077,943637806,775290624,-1912597855,1245610968,527761408,-1191176002,984350740,-1944947248,-850348837,-2082567391,1051990507,1291723213,-1578638593,-1073020862,-1269051019,1478610256,1582979419,1278608174,-377363968,-1950089363,1200305884,1958742788,413216260,446901760,182784,1458342741,-1946411433,-1064434618,-661733325,-1107287873,-1515913216,-1515870811,-1526662978,73305765,1719939,855995392,19065024,740213806,126559744,637547683,-1560131701,-1003618250,637547550,950208394,516173312,-1977221056,3908103,941540398,126559744,-167759197,-2147468794,431234933,-796253747,-1072905474,-1929364830,-973062858,-1268973756,1931595079,-12270076,809405184,1962871552,-1207493113,1741508096,1595922572,1575324510,1426064066,1465314443,1586428958,105286406,549378190,-1900006656,49088,-1515870811,-121657947,782607616,3415748,637548705,-1003616376,-1610596322]},{"sector":3,"data":[-2010775493,873907463,-1675971584,2048851758,106860032,3810944,72256447,-1047647773,3842086,527712424,3810954,977223461,-1928038972,-1962918594,192259831,16743552,243332981,-1958739910,-2097139170,6718,28312948,-1275059224,-13722544,-1962903010,184561718,-1207601930,1741508097,1452005516,1583292164,-1034033781,513277956,-1047602804,269966,504269614,520037888,-1021378536,-326412987,1347900958,1483054,74825739,-185915187,10606734,104760064,-327942144,-1959862388,989861942,1476883966,1562336863,777112397,1707659,-818215709,1392931701,807322670,1065362944,772502784,4202180,4161574,123405684,783412057,2098942,134676050,-2081939968,770187004,135200508,-963708416,-2128153037,1409318462,638612804,267916,36079910,1455852544,519965160,-22550442,267918,140939,404655150,251538944,-2080702432,5694,1532627829,1599625479,1297948510,1095883,-981209973,112912,396935,1344164169,922702166,520028178,22609940,184550926,516912320,519834088,1526445032,-380041381,1430650650,-1960907637,-2048391610,869830144,-353088,2097153550,101107477,-352321536,-401682687,-38207493,-380629451,32243430,-68677937,49120255,1562371467,182861,-326412987,784347934,2098744,-1909577355,-2130700258,1409318462,-1207143100,117388892,1343094790,-1191268887,-1873804543,768469006,397055,-2080374856,-443874579,-884122337,-1959338869]},{"sector":4,"data":[-1959393209,116065887,-1959338869,-1073019321,-1590819723,-1064435688,2118025510,1967412224,28885761,244338691,-1020424472,654301672,395007,-402652470,-1591279666,46792722,-1156271872,-1313137487,920423192,-402110581,-1959329860,-1959394233,-617413033,-2027497078,1468474887,444930,-1946185240,109520579,80347154,-8067072,136184358,-520388608,-525139331,2114976640,1393537794,512239171,101056520,1358620136,133861352,135200294,-895985664,4,0,0,154971394,-1639957357,1023229499,1161624898,-45728515,1023235900,104660316,1628126238,998065212,138172679,1862941889,1005521980,1060921601,-888259663,1021000508,1211953189,1850293586,1024936509,4032843,1984708197,972566846,1446678528,-1959321410,914829014,-231000298,2011890549,516173456,-1070399436,772245030,771772322,3677892,775421734,1056395,567103668,-5110092,520040092,-193658758,-850348965,1006534945,-1273400265,-1205744302,-2027536306,-1557263289,-930348918,239568678,9216814,-852155208,512306721,-1943142274,503349254,1924800270,623163456,-1155587635,-1070399486,-13741997,1577085470,-1957345845,45817580,112640,-13741997,771779102,924190407,-986826949,-1207927274,567092516,1326877230,855750656,2122326477,410320902,369542958,-1271441865,773967186,9045701,206014758,241142822,-1962742397,1297948645,-1342176566,109456897,-1073086381,244329333,872354024,-1144811813,653918336]},{"sector":5,"data":[967051207,38767654,71812902,-1943651930,-953809329,966728775,508529702,-1070349317,1392936494,1958742528,-1070335421,-401698736,-617349281,-2135178354,1990274560,378220032,-1993998216,1468605959,2057383426,378220032,-1993998212,-1993997241,-1590819241,-1959919486,637568022,639387529,-81897591,921996227,855929995,-1145008448,-1590820612,-1993998202,-2002702841,1200170496,1048784386,1946157180,-7673853,-854851400,512437793,-1014104046,567103668,-1962928967,1052003289,-136175155,1109297958,1977289472,516173541,-1047789500,-953807901,654311175,149447,1048784384,1946157062,1354773257,520040016,-963969020,567102644,4235566,1108773678,1428081408,871140176,-1898410304,-1962899938,-1543895994,1183528732,924492552,-1559607669,1566062360,-1677147005,924464895,924333823,436651806,-12999113,-1908991434,-80274402,-1194598006,48967936,1430634547,646458910,-1959905420,-2093541842,-981269523,1715088899,787969280,-1962838273,80053228,788186107,924321423,1347618386,-2141759919,788399718,924333823,-87819268,403083054,1499356983,1510431576,776822047,924329727,65739700,511757440,512634375,1048641560,1146355838,1048799349,1946157086,1003981921,1962935358,471793414,1428286208,-1896156021,-1962933226,-83885530,-981209973,471793424,36079872,-678495744,1576789643,-396873501,-1993408615,-852025818,-1892770781,775362566,924722747,-998042252,641412610,141899550,406257454,57908535]},{"sector":6,"data":[-380895048,1355022128,-352283928,-1070378993,-352285464,28856327,8644608,535262296,1915354240,821854213,-1909560714,-167765986,1073756678,1048663669,1146355838,1397771893,-30538158,855646214,-1145008448,1924661392,126297664,650677328,1342326663,3806858,-2143296896,1073756686,781979316,8003327,3937933,781990836,8003327,38244134,772247334,2100990,1482381831,1966996608,-148772861,-95593185,2049900334,113478400,516173395,-1910112200,651725575,1008224138,638088702,186140670,776989632,4726468,-2095070170,-277544965,71772710,36106867,1603077191,1958742538,503524873,-922877876,-2144405643,50352190,-165276814,1971323463,499352345,1363050542,24379392,1065428555,108351299,41910566,123412558,1946565827,1912880143,1946631190,1946827794,-16062194,-385948440,196410932,-385823511,703070559,-9836290,1317609077,-402017034,99221070,-32053247,1979668200,-402279413,1183448638,15919606,941540654,-1910535424,1245610971,326369280,1912888889,35556110,73283840,397673843,-386000664,-13697543,-402621906,-706150773,-397389059,1515781637,11591818,1946287232,184320098,-58692748,-2144177146,1047791612,-1274479488,-380865529,-2127691624,540481086,-2146929609,57999354,-385952279,-1779892653,-360195,45352820,-335691544,105807989,-401886144,-1073021515,1719671924,129285894,-335697688,-31332335,-335713304,-31856399,-386047000,1183382930,-397939722]},{"sector":7,"data":[1441332747,-1896182787,227278430,-402472317,2123103610,-27357444,41205770,1166592254,-400299263,837352943,-1897952003,-1174762553,615579647,-638079246,-352130685,-36313082,-386066456,1583349062,123426905,1297948506,-38147889,-1258486808,1386015495,781982132,8003327,-1036382540,772961370,1580686,8273537,91571284,3810944,-39130753,1011703071,-821988063,2049900334,777455104,3686084,637898278,-31948928,-31062923,123672647,-386011671,-1030947664,1121619530,269892398,-1962445056,-352320738,129536049,4096000,125062400,16000,-1960479398,771752206,3684037,410324027,-350087704,1978175495,570681596,209043467,1586092683,571640,17190528,-369736055,1508441928,-389903108,-1073012233,-320084107,1330530647,1346454604,1146047790,-62986240,403082798,1048782336,1946157086,11135235,-1174634812,-1070399489,-638079246,1166747209,550273275,-44201178,539020161,1969434173,1878753542,1026585709,108356142,1952578433,775759220,-2130283152,1952868859,-126434022,508692049,-401698730,1029293141,41025600,188575979,-1956154112,8435921,118939691,1992686731,41207288,210431282,-217923197,-976581724,-1527513994,-12204506,654084874,1992627456,41716216,-1174125428,1376664956,244340254,-2117859096,1023443140,577962048,1962934845,-350769127,-163149035,-1929879868,-61422143,-1427631948,4210171,1317012595,1183383814,-75503370,784348111,3684037,1983591563]},{"sector":8,"data":[-385649660,-986776434,-1962919882,-1948545508,771768854,1183371,125163835,303466798,-485299456,650219024,4329099,-210384069,1108773158,512634368,1048772632,1962934302,-164391103,-401698730,909714349,309592086,503324859,922703699,922681360,520028178,914948116,-400686978,-1959857390,-486533618,784764506,2760331,520603430,1334584895,-986802430,-1912588234,371101212,109981184,-1960443882,-2097151434,914954478,-1960443858,-1996487626,-1275056074,-13722548,-1962903010,281379820,404655662,272039680,244325888,-1876749592,-783226866,1458949609,520040022,1430585446,-2095125365,1465254636,567089588,246730890,520040092,1183318138,1053044476,-14286792,241077045,781996212,8003327,-1962125685,1437861494,-1269095987,-13722544,-1912571362,-1947073598,-1557787066,-1993998314,-1962933706,-12777914,-1207732721,271388671,-1312060416,962509316,-288099701,-668213757,-494804781,-1039990769,434982,136218918,1369646592,512304640,-953810861,520096262,244065855,-919404532,1208912166,243869184,-973340598,1959069814,440582,-1979687745,866513684,-978605120,1959069814,7126794,112276618,-1414814221,-989301051,-2135358860,-201749760,868387748,-59340078,-494213574,-855768458,-1031092678,-922877322,-310157729,535137026,181030237,777395712,3684037,378220205,526254096,480325323,51968,-2147287040,1080246360,1310624046,109850176,516636752,516238931,1204240462,1526923267]},{"sector":9,"data":[-30487777,771760134,2113152,-385649663,-50659177,1364330014,-577874093,772033675,9383560,-1212217586,571713,-217418611,-326410332,236744331,9616927,12859017,-1398652668,1098038849,1946273014,1099152899,-466434165,-1174368093,-1073004198,-1816524428,1946762305,-388592894,1048576340,1946747024,1102035472,9373430,-1174178432,1038631333,512026625,-402504193,-571990391,511240192,-402502145,37559933,45125632,28312180,123361627,1912749087,771993659,5244472,813109874,1363050542,678627840,-1895369170,544505856,1077331246,312832,1317072011,-998047460,1515805448,526212958,-1868485113,1246464,537853486,1918357248,543519849,1953460848,1702126437,1768169572,1763732339,1631780974,1953459822,1634038304,1919295588,1124101487,1869508193,1920409716,543519849,1342205812,1953393010,1847620197,1914729583,2036621669,1919164416,543520361,536885848,1769366884,2123107,0,0,1953724755,1159753061,1919906418,1851867904,544501614,1684957542,-1061486560,269859137,404655662,1003981824,1946158142,-84636897,267918,140939,-2081649669,199758021,36079872,-678495744,-1006901621,942587955,1946178310,-1173467119,240255122,-13741741,1023435294,784531458,12846791,1465254034,-946942068,-1002534098,-1393390848,1975519914,-1993453574,1593885758,1430635358,-1591808885,-1073020920,1586176373,1977289478,1394979586,-1193029309,1397751872,132648592,132340237]},{"sector":10,"data":[-1962932061,-1961391656,49120200,1562371467,182861,-1313144143,11647745,-326412987,82608926,1317558102,139365371,-1873710365,539748366,-990099831,-2144991626,1131684668,104448051,427098120,-401698736,1625554828,-470004085,244338953,-1994390296,1992558678,868233990,-53333047,-1073042394,-1040300172,-1024967052,-774206712,64619459,63623640,1189473235,-1406744269,393527306,154939436,-466432905,179361931,-1023155721,-420755317,-486125941,16351499,-1962576960,12839361,-1091977165,-1829117184,532107,1603090423,65196290,-1932424230,-1950314800,1962281783,72628265,2126782581,91524358,316918411,1390980169,652249608,1256719754,-533051640,931916916,479003764,-919350805,-470069622,185197159,-14781194,1558905412,1668609547,2130857215,-2013318388,1447004476,-1595404656,-336186611,1392216899,-1157184893,1381171264,-806875504,-259303157,745862667,1157576073,72124418,-470004085,244338953,-1994452760,-561313706,2089617182,-1966525691,-985594804,-1527576970,-208986362,-388905333,57993425,1606418445,49120094,1562371467,313933,-326412987,106859294,-1073677439,-472838030,1603134417,-1873601019,-25630706,-1070398741,-1962742397,1297948645,1157628618,518818645,1023821451,108183552,-523116335,-1070398741,-1962742397,1297948645,1157628618,518818645,2126796630,650720008,1586171272,16482572,-785878336,971231715,460587599,-486256758,105789718,1317733503,2005747974,-205419771]},{"sector":11,"data":[96872100,859106048,187755456,-1325894437,-1014257117,-1962931525,-768407986,1230173175,74760203,-219479325,-1962521047,72877646,-85808592,-1951743950,1598031430,49120094,1562371467,576077,168648027,-1957345987,1465261804,1996431118,209125134,-16091393,1793591414,-1947170047,-108853690,505312511,-1070343538,-1979708742,820740124,-75493774,1175024394,-13442313,-387792125,-219656161,1583306754,-1962742397,1297948645,1157630666,518818645,521033558,-1961867637,-1039461802,1996429173,343342870,-16091393,1996425334,7530502,468409971,376897424,-15436033,1996427894,16246800,1962932611,240552198,-1005828471,2045250686,1166681604,209634559,1912797571,629810707,209051706,74721084,74785340,1191373187,1241929355,41339451,102681227,1375177503,-217547068,650130084,525862280,39577680,-2090967208,-443874579,-900899553,-1957363694,509040364,602472243,-919396863,-1039402869,2028667765,72286096,-2144943474,192240445,175555911,-471310925,-1341099008,-18166,-1977176334,1975519749,-1336808479,-18166,1992666866,-1949158650,92939999,1950170183,1946827790,1952136434,1975519786,-1960514580,92940027,1966947399,-2000670206,994460164,41026646,-1073067442,179365749,-218103879,851766190,-1962637120,32241858,1595875321,1575324510,1426066114,1465314443,-385928418,-1189216118,-125042689,1450492427,-2144943474,192240445,142001479,1340628403,-1341099008,-18166,-1977176334]},{"sector":12,"data":[1975519749,-1340937247,-18166,-1977176334,1958742533,1968913412,-18171,1992629483,-398609660,-545980386,-1950184377,-1190285089,-1359806465,-638107327,522175371,-443851169,574045,973441574,-1979288125,-339736060,83290130,-1048179574,-2046496792,977749704,-1008634687,580984590,1958742784,17033229,-636757877,-389873292,-947191693,41221899,381292724,13024001,1946173312,18790917,1377738932,-1873784034,-752818162,1073752227,45633908,16312386,-2097151227,1119551698,1347572512,-974647664,2269978,863289355,-402607896,-987889449,-1207950314,-1957289952,1577355762,-1258291271,1914817855,533236493,2097346947,178435,-1763174165,244340224,857400040,-1546505280,614662178,639011072,-1004616960,-989846466,-1409276874,41164860,-136246980,1095645411,1011460780,-485329859,1948269613,1946762483,1946828015,-337671202,-1426355225,1017911523,1006793760,-470294263,-1405006323,108284330,-1082914244,642774507,1947876736,230180857,-1070355702,915087274,-1873412062,457697294,1347862579,244338775,-1961216280,244338928,-1558501656,378077220,-1950154714,1442849334,585633424,-17637,2629255,1258648643,567099060,1107343555,2629259,-768358093,1170416077,518818645,1443425411,857673303,570853312,244338688,-1088810264,-1679294462,200838142,-385649214,-1910636175,-3807038,1530757158,-985199755,1572015734,1962827240,-1190481899,-1359806465,168135206,-941525568,194630,179319531]},{"sector":13,"data":[-218103879,-988681298,1035143798,1962817000,-1190481895,-1359806465,1006996006,168064091,-941328960,325702,-951646485,129094,33062531,642715508,222037386,171767924,-947653516,-1960960253,-2097141730,561381371,855709370,-851659575,2663201,141744267,1085589811,158540237,-15210465,-756432845,-1983302912,2122970702,-62485254,520540043,-873934285,-125926656,522941698,1153088030,-402652487,-1195769670,112964,-1006587416,-1108865410,240567552,520136168,1153022494,-402652231,2122514586,393478648,-401965372,1455751328,8972298,-1128653281,112964,-1006600728,-1981282690,106349824,520122856,1153088030,-402652487,2126774374,-125926406,-1341688575,-18166,-678711566,-4603854,-2085686529,-97844241,-921972853,-225761666,1443090827,-1194773514,567099904,803785011,-162100480,12110131,102878530,-1949332705,1894614,401131827,1189617408,-38934274,1593835960,49120094,1562371467,838221,567099572,-1053095822,1308689525,-380058634,-812908794,-2144975025,-109638339,-821831177,-1153583677,-594854731,1468741150,1603155462,1334457864,851544836,1931595245,-18429,444959,-1959338869,1051984991,-4709939,1073836799,-1962933558,1468741340,1334523398,1200305672,1602958852,-851266550,-1207667935,-895877121,1068564488,-1958694469,-511041828,106400566,140480054,72321846,174033718,57876941,536870840,-1962932022,-1003071524,872154239,-17984,-1047810318,1212733687]},{"sector":14,"data":[313951,517770074,-986294442,-1003092873,-259969,526278626,-402650934,-1431502874,-92946422,-1941387381,-387257406,-1070333994,-218103879,-420786258,872401384,1946433728,87565879,-391368844,91357459,-347724662,16181253,-661920718,1191545382,1912667880,629810694,-402265273,-466485024,-881540293,1912602808,132857865,4030502,-347602572,1474071444,2143565398,-1950249980,11004103,1927809507,918719488,1577338763,313951,1448598667,75482166,-947142260,-486499352,7071753,-1959345524,1599996999,-402651958,-147062974,776870772,6372992,-2028833792,-695515138,8775852,994443634,-1946979593,-1933145102,-13768230,-594833264,2143565399,92939780,125091850,6416455,-1958280846,1606585543,-67107638,-1406732405,1912622824,1195853317,518583531,-1073042944,-54268811,-1406732405,1912616680,1195853317,434697451,-1073042944,1019473013,1007579745,1007187578,1007055584,738359294,1094501152,1513885298,-1069807498,-566491534,537133687,1048587971,1912668257,244002341,-851836843,-1053156489,-986053518,-1959915146,973100814,973764557,973566657,-134055995,-3933757,1602946125,52920578,-1992881920,-775749028,-66642199,-108308541,192138027,860936695,-1316672,1599646707,1397774019,-1476113013,-2092206846,-18348861,106793730,-1962933570,17298944,-1020589963,527680059,-661978997,1005120994,1942108929,-617394158,-389379181,1532625669,-1049272744,-1195130829,143327236,-1962350205]},{"sector":15,"data":[1005716467,1397715953,-1014810901,45344774,-1962386037,1963042823,41388809,-230952149,-64745609,-337454965,989917672,-1950977342,440560,-829689301,-108793085,1444377096,1334300299,-1994618622,-242810292,205953,1174342665,-1023190268,1510018944,1086518874,-930412428,-402497653,190775095,-208944192,779417099,244306,389093155,1946346112,-2016267515,2005599319,17102338,-561576075,-1946224408,-164131874,57999620,-1946227480,-167027982,38570947,-251408853,990019467,-1961659149,767634375,-1019543544,-947189645,-117179509,-947191061,1330597454,119466449,-56232963,1195853382,1381061571,-1957235149,-752156073,27789195,44574580,2005607284,58490884,-1961200384,-1020591545,259506747,1962281822,1002832647,41288260,-1957235829,-1946409977,1590551256,-1017423526,172345174,2105741313,57933826,1376407038,-1957642189,1300957277,-1475900668,610366465,-489124868,-1957012492,1958742979,38218510,1308547319,990149642,1577218754,-28093757,-512488627,856311294,102623478,-1320082316,-561278718,1493270760,-311115765,-343729013,-17897466,76136499,1073892480,-2146808448,1173805035,-1384873974,-2146798208,-1880401317,163203,-259305611,1946289398,74746733,228480,1464951925,-320278389,-2143974914,-661978355,-2130551415,150995751,41716031,-1946409856,1166869597,1594329350,1284309424,18081798,-1948349607,17102391,-1628961675,1323911677,-214212865,133634164,309657601,208991755]},{"sector":16,"data":[721568907,969081798,41288263,-1957235829,-52199393,-1058481941,1962281982,-11054636,-25040841,1960786777,-1983149307,227082879,-1996288640,-2120809915,150995749,1301124869,-1948304634,75336671,1482624391,-12581772,1347617861,1602945456,9955332,-47939495,1979702923,-33101820,74787678,-346304981,-1950338146,-472824871,-397286447,1952054583,-2015851758,-1957228963,1192069624,79095879,-1956700791,1049347016,28901382,441288448,-1070396445,1342259384,216534672,1049346837,-919404538,-484815481,1085850369,244338689,1930753768,-214269,-2147264627,-751043358,-54918285,-919354369,44615307,-164425867,141869067,-478095221,82543612,75688131,-2084310411,1946163325,1357132296,1577013587,-1010824426,-326412987,-396929506,1183580040,1947248648,38141699,184966795,621901275,712245250,-2147224856,1333789239,518733826,1962705640,46331417,-588770188,-1992848637,1283522116,-427818246,-2013039601,1190593143,1946161160,38665987,-1946201112,-2090967096,-443874579,-900899553,1430585348,1444867211,-14489513,268846839,-16550912,1988821573,-11343862,1190615156,1962967046,-1946973378,140379096,-1946211096,2122515036,1517617160,-1070397981,-150929687,132678,45151348,1586219315,-12851190,-1070339980,-1377247605,-1989380868,38567940,-1956517056,-167049658,1686133364,-461324286,40110143,-1040822549,-1958120384,-1202321314,1175126018,-70916090,-2135985058,-381681036,-751107935,-1957284745]},{"sector":17,"data":[139759090,1935397691,-2016507101,478741071,612495751,108265475,-352041473,1955303432,52723970,-2029254400,38570481,-351648117,133599348,991327489,293012055,1256770443,105314299,57933888,-335849752,106335153,-486538565,1976796423,-12130045,1585828619,-2063108854,-244054434,-1031023821,-402104693,-445318333,-1949791408,28314206,-1946258200,1374161526,1492159486,721571723,-83105586,-201815209,-706191451,-1995803397,1283495428,1149829882,105314302,57933840,-402502145,-930349572,-310157729,535137026,113921373,-1957346048,1465261804,-1946301464,99092086,-402426626,-2132214888,-36509694,-310157729,535137026,46812509,-192195072,108301110,1962796008,38218501,-930359049,182878,921996118,-402230133,-829686324,1284178915,-1949465086,46816961,920423168,-1962647669,46397123,1207307636,91570178,1946372094,-1962439929,182984,-352104450,920423412,855924619,46397120,1334514804,1088520194,-838988683,1946090880,57640965,-930364533,-1962933558,1602959068,46396932,-1014297740,972971915,855798791,-893154341,1430585346,1444867211,-49354665,-133800309,-386059032,-1072956534,103613300,-49092608,-310157729,535137026,46812509,920423168,906250123,-1962518645,-2030041570,1468470855,313880,-326412987,-1957210594,-1073018298,-1877072267,277604366,477413387,1458604881,-1746399600,1174625040,13796102,-2095299325,108265682,-919355341,-919377173,116471,-8386443]}],[{"sector":1,"data":[-2147257087,1448280777,-1873719214,261744654,1397613403,-401698736,-661974946,-2147161213,1049361635,1972043782,39815432,260061065,39618817,-16228983,-561314747,-1191563288,-2141519871,410321407,-401698786,-1070395360,244338768,504390888,132648592,112656,-310157729,535137026,113921373,-1957346048,1465261804,-485863797,-1948676606,-620033954,-645130379,650219081,204427,-472709967,106858315,-150577621,652802267,-1915057156,-1070398337,990269067,727675865,-118757169,1605104471,-971088499,-970976699,-1996291003,1170671189,-1940770794,1170675789,-951131884,33561669,-68425480,1586229899,82543366,-1979915392,1049167965,2106261510,-1992521466,1602814556,21269762,1971914633,21335298,-1877080695,257746958,-930414160,-310157729,535137026,113921373,274565888,259316491,1334430003,-1995995390,-1014296507,1355008139,307071826,1442778083,-1962482924,-346531112,1522545631,509068122,1166932999,-4674812,-152916993,1492929929,1962281923,-18416,1073890439,-963966348,-1995422329,-1010814204,-1070349496,1090669707,-2142697356,41238753,-1073019765,1979059139,239438635,-166989685,-1951588492,38046664,1209627712,753024,1084755828,254021237,1963672888,1977879047,-1007285501,-503024499,-789860900,1468861298,-18710527,24302395,-83261,-1949748285,1946265794,200684318,-1961397056,-1014084648,1295876134,958797429,276105845,24983846,-1950152076,-8722190,478928245,-1950105549]},{"sector":2,"data":[29619928,-620024203,-1007265420,-1957399550,-1019539875,260787574,-506338863,-1019487997,-661962381,1090670475,-162973324,980762817,-661977205,106772811,1564027251,-1910213112,1031808707,639399245,1946254649,1569400342,1960512266,1963407632,38767370,-770977653,868467595,-1949748288,-1070349360,1954595318,104410856,-344719354,1398001911,520040016,190513156,-372083520,-619970699,-158260875,359924417,-25040815,-2146507942,2005418190,1244326658,703120014,869413637,-400626752,427033645,1946338038,-27400172,931915235,650546766,-2012586615,-722992521,-1010267390,1357679445,-397192878,1586233075,-142969608,8453702,-620020107,132345205,-768360397,-150896151,196166,45150836,1586219315,1994917628,-462158069,637719784,1342273023,1493483496,210307188,1073892480,861419499,22079936,-1946270069,-166987178,-1360520332,40140802,837058814,-167615480,158613697,1949353206,-350975728,39184396,1949353206,1435051524,-345117951,1086453324,-619992972,45638260,-28964096,-2147332982,-1056305951,145285386,17564276,-1962195576,1592284684,510942723,1073902720,1820984457,-1907452414,1166616262,216367114,91064358,-385744152,-1880555310,66292480,-32446248,140348198,376951611,1111683723,141808443,-1912435224,68085958,-369342837,-1912209238,2100897475,723940609,1474844371,494034436,-1940270333,44624065,1090406135,-1962380288,1238010841,637713384,-351773301,1451952059,146994942]},{"sector":3,"data":[45812085,-2060328192,-382896685,1586233054,29619964,529203829,650350155,637748619,638076302,1963031865,1157834245,-1036304381,-796196234,-1880375245,1190646539,1946157564,-2049756400,158727774,1793643059,-338654459,-1950184515,-389116962,510919301,-1946388853,29816776,-1962642176,1211403214,-397492082,-1047853334,-443823989,1586217821,29619964,529203829,-1907637365,-128021565,736679939,1569400573,650350088,1963031865,-388814044,494011278,-1047735549,-150871576,4259398,-645199756,-397817205,-1960443404,-202831779,-388877314,-796195599,1375683561,1526529768,-771028364,115870837,49735681,-1946387736,958841800,-294387371,-335544392,105221874,637816203,1963021625,14936073,-402467864,-1910047657,-337508283,1300821555,-59381749,1156976500,-176930814,-243985351,-335791384,-973159444,1871184756,-838941949,1946090880,55574029,-1040840075,-402426879,-919404541,1381041859,442317142,1207325300,1282670850,1073891318,-745847179,-1907679349,-1960442173,-1960440227,260770933,650219081,-1962117751,-1047639796,241010982,1569184395,1225755418,-225721970,209028902,-1907815285,1435051713,-1993996530,-1993995147,-628421027,123296350,1569400515,38270474,-1959562239,442337235,186402303,-1960872741,-1912190705,653429697,-1962117753,-1047639796,240486694,1971922439,1569269260,-1993948402,-1993995179,1455623765,1300964945,-1958681846,38270681,-164072447,1967129159,1569400370,1972053518,260769292]},{"sector":4,"data":[650219081,-1962117751,-1047639796,241010982,474873607,172854054,1964657977,442337546,58054971,1494900009,-167001250,1972045429,474843930,-1958145053,-963752396,209029926,1073890550,-167050379,-1007275069,1443120639,651070214,-1912058489,1971922625,650546694,721964425,1323235313,58034470,1300833881,2106140166,2106140161,96871946,650219085,-150450901,-1993979431,-1017248947,637816319,637957515,638076302,101086601,-1893284210,723912773,-554235787,1971922510,1464910595,734236166,1138489305,990904505,-1962642471,723051467,-773729831,870437345,-50383936,-1064522765,-1911503744,131984320,1371756639,29590352,-1946495512,1166935117,572166,91488680,-1291303538,126756358,24983846,-1960424332,-75494795,187790600,944665846,1232405372,44585048,-1960426635,994050885,1379562178,-370618229,-1072997888,-14274700,-963901835,602456206,-1058339068,1948155193,1962281756,1173759517,376702981,-538439701,958690048,91496061,1946614656,126756357,-397174046,995820113,-1962118206,1959922640,1498958337,650362931,1073956235,-903100277,501478963,1946614656,63343625,-21174030,-1960439829,-232060811,-1895910936,1972053702,-1893311994,-1070399163,205883686,239438118,-1037955920,88442918,-163528564,175390914,139299622,-388461751,-963707164,184550376,-963853376,930412043,25004326,651309906,638211463,637957631,638076302,1963031865,-23533565,2100897287,638022913,-402111090]},{"sector":5,"data":[-225706358,2100897370,637826049,185091470,1359397878,24983846,333974645,1941998592,117145612,-1910110860,870965767,-1022928448,54889254,511523136,1173764212,846530571,1166943750,1031808520,638022746,134563318,-1962467468,1965754485,1966810654,638808840,-150440661,1992702942,-339334396,-339725563,-1036318975,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1465255424,1381061456,-494807413,-1945763839,29982913,-1036794229,-226443122,1426269697,28856835,1569400320,1977289482,1136888835,89122822,1599750489,1003523102,47553,-812969611,771869056,1533486729,-1139339526,788224869,1533349513,-972832117,-553395573,74643259,-544487797,990904505,-1962642479,724558794,-772699183,-773729823,1925397473,-661718003,-972831858,-164372989,738004715,-1948374074,-422490383,-1014048626,-1510736245,959366891,1952146702,-1909523956,777741590,1533486731,1499078651,1583306843,1455684615,511523154,1166936436,572166,-1912592408,112920645,2025472,197168730,-402295616,276037206,806045174,2100890229,-402295550,-864747036,1301005150,1354773252,24983846,-1910110348,1492509191]},{"sector":6,"data":[189134531,957314320,175440509,1962959336,17230064,-75437195,1591702790,-264519540,958801268,527761789,427095563,1948155193,189134342,101741832,-1960393074,637993797,1912816953,1455852546,-1960398613,-167048587,2084051316,638874883,134563318,-75496332,2100937480,-2147060706,868419323,-1007285258,126756358,-1960394612,-840432811,24446975,1123060675,1946745728,1166747159,-1037348856,926492240,-351927436,-1064413695,418103347,1949776166,1979655686,50588424,-1064546110,105955843,105220902,-1929494808,-1073018938,-1993997196,643302981,-1945614967,650153666,1476810121,138774822,-1064385908,106268966,-1960393074,-167048587,-1064565388,637831488,-1960441970,-963901371,642303531,637748617,642581958,345542,175999270,209553702,243108134,201112552,1359397824,-1960380877,958792533,628359549,-14751658,639530078,1996707129,1962281752,-963770866,54889254,1161373191,-1945733629,1166747334,126756355,123326690,57996811,-1023409688,-1064545711,55413542,24983846,-1960393074,477430613,410307131,-963919730,-16390058,-1945876993,1307051968,197168892,-1874793536,1300899398,1979655685,1979655681,1979655692,650153486,638469519,638338447,637617551,1074089352,1156104334,-963752195,1224480744,188792974,-1995934474,1971922436,1526084362,1342620505,172344914,-1982846208,1166937173,968985608,594812541,134956534,-1910104715,958793285,125043069,88471078,737113352,992353869]},{"sector":7,"data":[58067021,-1995944565,-164424115,434657622,-352094726,-2142138302,1962935164,375229424,-378332103,45145739,1963086056,-1948325118,-1064417276,242614054,653894888,637629951,-402434677,76544908,1073892480,17450438,206907742,-2141603977,1509952125,1505953624,28922126,855829248,1465261769,512634450,238616578,1433731096,171376430,1306745088,-14237298,637535798,1848971,1044286246,651070208,16001,-512408242,-1070342173,1974399740,-1438625832,-651436405,1943944011,-775713844,65262051,652464600,2235907,140479270,-385928361,-346032009,1583307471,-986789089,-1912588226,869895197,1241921984,-987401216,-16758722,-389867451,-1712783388,-1876890635,-385885208,401339862,-2955120,-957822669,-1878201353,35556910,-52480,-3991483,1388517453,39291702,-1189115082,-1014824956,13796111,1263141491,-606999855,1079704290,239620980,72235353,-232521100,-167033464,359989698,74830347,225706664,2100887820,-1475972066,872576264,264566273,-461371788,30179568,-1322130304,180888076,818214625,1317735284,-1047639804,21859110,918826691,-1960443848,1461633804,1090484712,603980037,-2016375810,995106373,186611408,1073968576,1170610411,417857547,-1961921280,48766549,911612,1167000693,-396733922,526384977,441283,855920011,138776274,200949736,1170654144,-622329845,1959922683,9103619,105221714,1513979942,-1910080140,958793797,460587389,175475494,-394988021]},{"sector":8,"data":[228480,1157030517,-596377342,88471078,114652424,54889254,637816203,638076302,1946254649,1031808563,639333466,185234827,-2144570122,1962935164,38073894,639529985,134563318,-963898764,-150440661,510995422,1959134016,132859914,54854438,129819200,-2072591813,106483851,134184425,-1072971125,1950876788,-31176703,851694131,-1957210396,-1949791239,29619955,931857013,1465261794,1443029480,-869668777,837310294,1004113078,1464563150,512503327,1122697218,-74759966,518534655,1958874061,-339725564,1048784433,1946157062,38112020,-13741993,184550430,-2147060544,-343932339,38139398,856650753,-396929281,1465254542,-1196039192,1583284225,-1933328373,115888600,1651792371,-1070346101,-1961992821,-654097633,-472783919,1913543939,264471373,78727282,1702947795,-1343686901,-1959009293,-224007984,-1960430476,78709597,-343677997,-52199421,-1324458709,-1947479294,241011651,126339211,1128515627,-523116335,-544745469,-1980633112,-1946449139,-919354424,1958742979,-1950104831,1200305884,1468741124,109522438,-2027028476,-905968106,1430585348,1444867211,-41883561,1183568435,106859786,-386038552,2062086900,-3806979,-310157729,535137026,113921373,-1957346048,1465261804,-1946331672,1183517782,140414214,-386049816,1323889422,-6690563,-310157729,535137026,147475805,-1957346048,1465261804,-1946342936,-919402922,-386603800,1583349033,-1962742397,1297948645,1157628618,518818645,132667222]},{"sector":9,"data":[106335229,141939211,943113262,344663552,-1962523250,958792781,192217429,1363198092,1927827538,643389953,-502774386,-188880663,1610408168,49120094,1562371467,182861,920423258,1074022283,508039540,512634455,-13434878,1377322495,-1930320663,-387126312,904658910,1962924520,-189339600,-806867989,-400132865,569111732,201311720,639268050,1342391691,79286835,-773795584,1509614290,-1410856981,-1949464833,407764929,46800735,-6494208,2045248372,-1950338060,-387257398,-109772914,-1946913816,1172237249,518818645,1139300182,-18180,-402235763,-386335671,32043242,309757,-773795504,1509614290,1610363112,49120094,1562371467,313933,41262,35031854,16501504,1163067392,1111835719,1442858837,-1070397865,-1960394610,-1912599010,16826307,-1184665922,-201588727,376809006,1813940526,44117603,62410752,-13742080,-2090636770,1594295492,-1957313698,-2094135572,6515774,1190601588,1979710470,74907420,-16353537,1996425334,205964298,-1070379002,520040016,-998022294,-443873522,836189,787254101,1668038275,-15567872,1996424310,112646,520040016,-998022294,1575324422,1426064578,772205707,1668038275,-15764480,45614198,-13742080,-2090636770,-1962474300,46292453,-1957346048,-326951188,-1155592694,1253703681,1358081,567099572,1107711627,1606028405,1161473,567099572,373963755,-193032953,-1418186568,-1962933063,992706,-355341615,-355341615,960245764]},{"sector":10,"data":[285475446,-1192697174,866847245,1452124864,-1189144844,29032456,-851397632,112673,-401698736,54343,0,0,0,0,0,131072,1,184613560,-1156877120,240148183,520040019,-401211282,-768357086,2115406134,378088960,-1766260712,1364332132,146280018,887705653,109850365,-1943142384,637538822,4327111,-1047855104,-388823887,1687855918,78765195,-796070957,-1557216509,-930323304,-1099669317,-215255328,-338492239,-1993424125,-94064098,-427044722,921515003,931465,203852086,15630592,914961922,-1591345142,1480392958,1024095319,276125511,470220590,117386752,854261788,33614224,-54512866,268865070,8437248,-268194778,234978445,1734129951,728191422,79793102,431270402,1090789837,-206882124,788275108,1050254,268812428,512437760,-1960418152,-1912602098,378218179,1397882896,244339024,-485622552,-1767690584,-37754780,-1156958488,-1993459491,771778078,6819468,-1899459554,2014936,1020912603,76218603,1023639333,74711935,1223,109981215,-2135031792,650130176,1190134700,-268194778,-62601434,-970566065,726466116,-2131983888,-1141077248,101072896,1398216278,333975184,1963409588,83764760,104857787,1461081606,-401698733,1074246654,669582197,-1191408895,-13697025,1348769846,1088968470,-2134605382,1958742784,784371429,637536419,2242187,105152806,-14284800,100663814,782582760,525966,-1207959106]},{"sector":11,"data":[-13697025,1442842678,-186101746,1975520167,14215427,-1099669319,-248809760,134268545,134647342,785943296,1689394691,1963049974,-1896199423,-68777005,868453968,8436223,-201539533,-315402070,238455094,646526464,-293535732,-1992947200,-2097149386,-1942612244,905970710,140937,269388590,243873280,-952762318,-2147470330,243873280,-952762314,16778758,113718784,1146355838,35570742,1871259136,1871259152,263737358,382423143,785155560,1578636,370576430,-1900006656,16563136,638806456,-1557264505,-930348922,38242086,8954670,-1744400850,1048782436,1962934282,1689565191,43837776,-850656840,1313429281,774910001,5130562,-1873804880,-780539890,0,0,0,0,1458342741,-68680105,105286647,1023696523,477495312,637826756,637813899,637951115,538171,52824693,637538846,1056259,-1324366973,-2081697020,2078802371,72190956,-1157216882,279445512,1166935668,441096,24983846,-1960440203,994050885,855995074,9169353,1687724334,121185864,-1910110092,-337780217,-1590783878,20801380,-2141882880,1249117947,24983846,-31177611,1678125358,100740711,19293338,1461584709,140348966,637748521,638076161,856180110,-1174457354,-201588728,-1910087771,1166805085,-1960435962,-1064564131,772245824,-379283293,1156120379,-13244159,958841228,326369661,-756493773,512438003,126575766,1687724846,-385934615,1594357533,1575324510,1426064578]},{"sector":12,"data":[1465314443,-990445080,-1960441738,-1590819252,-1907858280,651899840,637761535,638089215,638220287,638351359,-1961986049,-1064434618,638473867,637622153,637886344,638214025,638345097,-2096210039,-645197887,-338492239,-402537597,860547942,1468606171,62950403,-1993981232,-1002436521,-2144991114,637666380,-1962392439,53349470,778344478,1687821867,-72,1996425846,108461832,1860718675,142001315,73173798,16827383,-1030874252,-930352757,866985724,-17701,1393456895,1364219398,401101395,71732904,-1960387789,-1030879145,239570726,206016294,172461862,-1993975464,-1064433593,106400038,-1037319538,1200170568,784870147,1687817729,637818507,637949833,-16693305,1602758399,130426373,1602954829,1086360586,-1557264503,48784536,-1956749322,214064613,1465255424,1687724334,650153544,202379,868257344,512175835,19818340,-1939564002,-1947008058,735587294,-1910615341,73787614,79255583,-774753536,-489500192,922693370,1347576982,-401698735,-13699001,-396061130,-1557225465,1583309976,49927,0,-2081649835,-1909585172,644126726,771754145,1687815723,1734648622,-1774780626,-1613109148,-1744402642,103493220,19817624,1348953094,1493135080,-1710872274,1776467812,771752633,1688092291,1090614272,-1207957829,-768409599,-1873784237,-139532274,-1425600772,1776877441,82372210,-1734267388,100871780,-1064409244,-1960378573,1183385669,1049306876,52822020,637535806,1838731]},{"sector":13,"data":[-506332925,-1048315645,65130754,244000505,-117243856,-506338863,-919340797,-471312559,857072636,-1873784640,-124786674,-1774780626,-1623332764,1687724846,1687724334,1678115630,-18073,1364262707,-924297385,-1983869259,101121606,128263912,33998630,864026624,1049306870,1022033960,117440440,905913936,-1902107672,198740930,856454338,126494400,1347618371,194736872,856520128,67221723,-401698736,-1070335709,-50444658,-397408597,1174904006,506870566,649949696,132807,-1960443903,184551478,642413814,-167486325,1098137795,1964033014,-397015540,1443298358,-341844760,-1145031888,62482914,121187840,1128465525,-2026965022,1149838855,1283466760,-400686588,-661916654,384311179,-611431436,67212,654258975,2242187,-1911886205,-964428218,992364298,1979718718,15984899,73173798,1967178742,46396978,-1007230603,870085648,1364395721,-1646335919,1418274311,1686119944,-2144929020,-1946024884,109981376,-628424702,-1912108762,649391040,-1007221621,276164608,201783078,1946157568,909714962,192217096,38046502,105154342,-1996191962,724499014,778344966,644310179,33834230,1443243381,-470061592,1156982295,276107268,-100609,1443297910,1390956887,-10491396,-85436922,653685918,538169,-165270155,1947206724,-397015514,-1960379590,52823620,637538822,1050115,45732403,-14285312,1347553396,-401698735,772273599,1687566079,782073576,-1956341597,53410374,778344454]},{"sector":14,"data":[1687815723,-71,1347944054,-1577981871,-50397975,654198414,2373259,641088294,-385649408,-1390018412,-369670520,-1390018429,653805193,737674439,38571046,637847171,1074021623,643986432,1376130187,71600934,637538341,-1979556725,-472647858,-1545055408,639689722,268715254,123339892,-1070384149,244338768,787891432,1687566079,782037736,1516542115,651309831,638080135,-1590815609,724460696,56924678,-4520254,1347815167,-1130174381,1149838855,214336264,1979207423,195896974,-385649472,-402194572,1183561386,1975520252,-1874203901,-1710871762,1688415844,922693223,-1729600362,-1734136164,100871780,-1064409244,953126,1324974336,-385649339,484703467,236914206,179719,-60332353,-1673623250,109850212,-1527552866,531284019,-1774780626,-401698716,-1557203781,904422550,-893130751,778346683,1050254,38258478,-1943142272,-953285561,1689126471,139430958,172476206,-1943142292,-1591342009,-1993474004,109981191,-14286840,1493173814,-1047646237,104267558,650130176,1443385,-617353868,-148450765,3078,-1157270144,-896768864,1358954425,1359369042,-342656280,1048784590,1946182814,1688255252,-1640562898,922693220,1393452188,585633424,1575324564,-1311077437,-3964660,871093007,-50383882,-360638485,12128256,-1935281280,268436952,-1064511346,-1911554043,-428520512,-489487439,-1510749557,1465261763,-402652993,-1763125126,526278617,-928593725,-928659291,505356197,522133023]},{"sector":15,"data":[522067742,1481461061,811096152,1868787273,1667592818,1329864820,1702240339,1869181810,168633454,-1957310684,162799340,-855353659,-443867359,311901,1380275029,1398362880,5064020,587215139,1162543154,1095713369,587220050,1465253941,548937486,-1994273483,-1946126818,-1207928826,567096609,8003209,8128140,-852155208,2115930401,-2147054592,891795456,512303565,109838466,1387528324,-1960435251,-1960440761,-1969025449,-1944680192,1856551680,244339470,-1951782424,1857338352,-1873605034,-1507661810,-1996463453,-1157602282,240545463,-401698733,1722000912,1746307328,1856879360,244339470,-1951794712,1857338352,-1873605034,-1510807538,-1996461405,-1157600234,240545463,-401698733,1856218592,1880525056,1857731328,244339470,-1951807000,1858321392,-1873605034,-1513953266,-1996459357,-1157598186,1393426517,242198459,1857338195,-1873605034,-1515788274,-1093971886,984416341,-1392150844,74957882,6358782,516120159,-661733325,27016900,1958616846,704366,-218101575,-1273203290,174574912,-1206618652,1741508099,125101066,1972370560,773304326,520102306,106387139,-1205924322,567096609,8003209,8128140,567095476,74580540,57803836,-1576886039,646447184,512229457,683343954,1912814592,3717899,1946221696,3521283,4988553,567104180,-1996202099,-1946138594,637553158,-2094653500,-143261889,4464265,4589196,581973428,632562125,-1782963536,857853294,-1931964736,915091145,339279914]},{"sector":16,"data":[1278805365,-1106349054,339280832,1278805365,855798786,-1899983626,-1261204520,-853364699,-1899459551,1979059160,35121411,2766473,5258880,-2143260157,167792958,-1205963406,567106822,-1994401652,-1560264650,-964493246,741771532,3056384,-1996175741,-1560266698,-964493254,1010206982,4104960,875989318,3580672,-2147448855,419451198,1387541877,-1064558131,2885319,782434530,1007077120,-1560206592,113705022,19267648,-956284253,-1912588282,3842817,3409607,916652331,-1270093056,-1960719057,-1262318389,-2094936750,1232413435,113688716,-955973551,889211910,1074185984,-1560175872,113705026,28442668,-956289373,335558662,3842816,3933895,1050870204,872859392,-1560185856,884211766,512303565,109838384,-18284494,468419328,1963931942,1463363078,-2094566398,958794435,637957391,1946310457,1346273305,259326720,33735553,1963931942,1463363078,-385649662,512295169,109838380,884211758,512303565,109838384,867434546,567083184,5258880,-2129890045,637642987,242489144,-2097097495,942015939,-385649641,512295113,109838388,-343736266,1346273282,91489024,3153604,1075743043,1107725312,807322624,96699136,5258880,-2096925693,512297195,109838396,516161598,-1946419148,-926776877,-633650432,2146108274,-1090810992,163147361,1973875456,1790855148,702830,-512383245,279043979,1346273280,276038400,1946630950,79921942,1946630950,-1874007282,637634747,57935675]},{"sector":17,"data":[-1987034645,-1946142690,-1006618106,-1593821154,958791696,-1003719417,637550622,1962950528,-853953502,-1261401567,1008848142,-2046069996,1008649410,121120256,250087797,-18179,1351621355,242121912,-69539760,-397406632,-1833370668,-397406610,-1070335028,1583286047,24612291,-72063,-2130543475,-2080375065,-372174911,-372119087,-903091759,-511649289,-494908674,-31176450,-617357682,-951253050,66375,-16693305,90147071,-1996071028,1602816127,-628220406,-950401082,66375,-16693305,140479743,-1996136568,-1994519969,-645003697,721966985,130435793,56068429,-16693305,90147071,-1995808887,1602817119,1377718286,-1912191095,139430360,-968243157,1334398215,21481219,1602813951,174033157,-1995677815,2139688543,-1981837818,-953481145,1292355144,-1996398711,2005467975,174033158,-506373543,-506338863,-1030864303,-13385677,-628184077,1491194201,1170430810,518818645,1183536982,140413706,-1962127733,283641430,512503551,-13434878,-1996071543,1170671701,-1996487420,2106137213,511543576,538068423,340117248,1569546595,-52199389,-2096210551,-511704087,-775214084,-1981165079,-1992080625,-74772387,870297576,-13390912,2028525708,1208454111,-1993949042,-1993471395,637534238,-1945746034,-402243392,638050143,-1962254967,-2090967096,-443874579,-900899553,8,704642893,0,0,0,687865677]}],[{"sector":1,"data":[]},{"sector":2,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,279886,1900626,2065,32772,0,0,0,1,4194485,4718664,5374034,96,262144,0,0,0,68683726,68682048,1398362886,5064020,17104896,16779777,1711342358,47055107,117635585,16843264,738198440,1,65536,0,1430585344,-1960907637,-1073018810,12192117,-695355392,1208008425,298666101,-388823375,194511652,-1173719616,2122514433,812908806,105265984,1912603577,178435,567089588,973495947,1343648963,246731659,431235533,-125165107,-854674342,1979398689,-768372364,1967682539,516173420,-1064566784,1912602941,-402294944,-303365300,425603,-340249995,126232064,303662,-1064386509,67536422,94514693,-852446208,212257,12071797,650153712,-115072,-400132612,569049138,303150,856131622,784371392,637535648,772080802,399045,98818444,-853208136,869413665,49120192,1562371467,313933,-852159560,512306721,-1943142394,234883078,16955935,-853208136,-58670303,-2145357310,460786940,1954595574,113651222,-83885507,520040092,-970063866]},{"sector":3,"data":[16923910,771752650,405247,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65535,0,771752192,36712191,1027506222,-210501630,1010729006,-344653566,1007091246,-13722622,-100519906,974556206,646524418,386794040,-83742532,-435441584,-469701856,1975519776,102651199,1448235347,787297111,36976325,1967173116,1950395657,80118559,1950937835,1947008777,113672965,76146411,1150109254,-2095251460,-655686458,1499094623,1562314587,-30475688,771898382,37361294,942050094,-2144415998,146494,900998005,567085232,807307566,109850114,632554034,236849328,38058527,773792205,37488326,-2144417023,146494,-970058892,146438,145761716,382021150,567083568,1430637343,773778571,36970181]},{"sector":4,"data":[185222795,-1190497088,-503905304,-136933959,-12614671,2139298421,427097860,-1962520949,1334380630,106400004,-1996339319,-1878463737,-351747197,-1948568612,-2083812413,-443874579,-900899553,1430585350,1461644427,876528686,105286402,-12745946,-2094658955,1979647101,-1877480684,225835067,-18180,-1412368469,116108203,147293072,-930358549,49120095,1562371467,182861,37593390,-523515765,84158086,1959016991,939852987,520587271,637863028,-2010773704,1444836359,521075799,-1912573765,33998787,-1207959552,535298991,-1206881280,401081272,-1207405568,266863553,1326019840,16009,132748,-1021354401,-2126259405,1931477243,-1946449140,637424,-294279437,-1009054781,196609,66100,300,0,0,0,279886,1441884,2177,163845,0,0,0,2,4194395,5242960,6029404,108,262144,0,0,0,56887321,56950848,50792528,50987073,1497713416,1380011842,68,196870,2622208,50385923,453181712,53609219,0,0,0,0,1167120524,518818645,1465309326,-1106870588,213385589,-204961024,1606495140,49120094,1562371467,313933,1167120524,518818645,1465309326,-1945477436,-2128705088,-2096722943,-1791065343,1198850049,162543028,512303565,109838725,381157767,-1994273483,-1946054370,-1274965242,-1173770203,567083417,-402227516]},{"sector":5,"data":[900988970,567090096,25763465,25888396,464528820,-855454278,-1794717919,1610612481,49120094,1562371467,576077,382534324,62161074,-402648901,78905378,468193715,-1291275264,1370130,280232370,199791027,-1289702400,321680,347291828,57984132,-1022261210,1167120524,518818645,1465309326,26558083,-1273072640,503951397,25499333,-1273028147,505131045,25761477,-954261043,103686,-2090967296,-443874579,-884122337,1167120524,518818645,1465309326,-1961736565,274631632,662559499,510988860,856194756,134645440,624436739,-1073082252,1460013429,244340486,-385750040,-1070399322,-1006590743,-2135618442,309101606,-2077867404,1014305132,275547174,1190606453,1962934534,1408991279,-343922061,841314887,-54555905,-32766,2126781044,638234632,-470409846,-2010724606,1975728645,134661813,-1360330493,-1157558110,-1014759428,1963407364,55020281,309657404,292324390,-1073083276,2133075577,275547174,1200299637,1820599809,-2046659568,1156982468,208929044,1916926592,1526366215,-997850505,-12786638,401081973,-10557184,-1425506620,1593835960,49120094,1562371467,969293,1085332275,384308403,-1290752000,1042577,-1867308880,-1275066136,520068097,-993853039,-165278602,12452096,1959169536,101197318,-154991593,102770384,549651479,261921709,571833501,-1431394717,-127962579,657718769,754586854,-1397774543,1101553579,-1908326079,1166054031,1229276560,1145653577,1330597797]},{"sector":6,"data":[1331665231,-1705683627,-2048827559,-2073984096,-1970826874,-1920366462,1686867105,-1818061404,1868534895,-2120834153,-946315399,-454891012,-353901088,-286267157,-909785876,-151730458,-394254,-1549607722,-513380187,-235211795,-1078285615,-1128420257,549170081,729554976,724249387,724270123,724249387,757803819,724249387,724249387,724249405,724249387,724249387,538979115,1595940896,1605787615,1600107871,1600085855,1600085855,1600085937,-1335926945,1851766711,-400512846,-1682243541,-1606636543,-684850062,178970658,-336431680,350785579,35371776,1921006764,584527364,-1073042720,351007349,-594847088,911693342,906524613,-66814012,-486539340,1606585241,147464030,0,0,0,50529027,2131232776,-16185079,168627469,454761243,538976288,168627499,-14077904,-14601935,-2143276494,-14470349,-14404556,-14338763,-1637992906,-14272713,-14010312,-14141127,21061953,37904962,54747971,71590980,88433989,105276998,122120007,138963016,155806025,172649034,189492043,206335052,223178061,240021070,256864079,273707088,290550097,307393106,324236115,341079124,357922133,374765142,391608151,408451160,425294169,442137178,-13619104,-13553311,-13487518,-13421725,-13355932,-13290139,-13224346,-13158553,-13092760,-13026967,-13750674,-13943365,-12833604,-1621152323,-12702018,-12960838,-12636225,-8494912,461069275,477912284,494755293]},{"sector":7,"data":[-14538786,-14013846,-13816467,-13948053,-1,842079231,909456435,809056311,151567293,1380276049,1230330196,-572829617,1396773133,1212630596,-1169405110,-602881826,1447254106,-1135784382,1779482558,1880367122,1953722993,2021095029,613519481,627908902,594224908,774709800,1835624551,1801872740,1617125985,-65682,167774462,184549120,0,0,0,0,0,0,857624576,-455569728,1945123936,1971365947,403109438,812976132,71908992,-1976995324,1006901030,-167414459,477430980,225727292,158615100,393557820,1963181302,388401675,-153815548,125111492,-13740001,1392608558,-1973296048,-427815712,-421493151,-2135664543,-1003298782,-434065328,-823633888,1968454656,2028210722,10676483,771754657,1023512483,-243994624,771754145,1526828451,-13740001,771853614,26754688,-385649664,-30539646,-83781626,68617974,1008432132,773289286,26674886,-388461824,61866090,-1757511634,1366622209,-617392917,-5187446,1934949248,-2020987324,-13500140,1917320064,1408991288,116798327,1948255255,386332204,225772292,-1073035382,-1976688779,-352247417,-1202499560,917733392,-2128675026,777542401,25239295,-1291841352,520039990,-970063487,104454,-816308389,1448235347,-850065833,1594318107,1532582494,117321411,-1278279273,1948924930,1006744338,-1291029450,1948072964,1007203078,168785208,-167282204,387850451,503890692,12780567,-16185337]},{"sector":8,"data":[-16382716,197121,0,0,279886,852067,2269,163845,0,65536,0,65538,4194365,5242960,5963865,114,262144,0,0,0,42862728,42860864,44501170,44695617,1431260421,17747,256,1380272902,55330126,25428737,50441219,564,1167120524,518818645,1465309326,149143603,-1705947056,65535,1734,3139584,125157387,184590568,-2129038144,1929431289,-1074754797,-661913530,-1527529330,1734,-1878922241,-310157729,535137026,-1161081507,28901948,-1850715648,-301743485,-360490320,-301929726,1022099691,158620250,-503004541,-339725340,236357969,268879360,113641472,-2080505839,-1964244286,655407584,854392626,-1963193632,-1309154592,29881861,-16116619,45158516,1963509750,-155058679,41223367,234930686,114425872,113704977,2228228,-1191112008,-1094516545,1048773279,1962934300,245607704,279096320,295873536,238977792,91553792,-1695956941,378229248,-1031602162,-293556221,839051907,-301929536,-345984950,-1031541248,-352145405,-360452608,-339725822,-1956975104,-2097148394,28312770,236358638,-322358528,378273250,-1031602162,-301223932,-1962933573,-2097148394,-919403070,1963043052,1979310596,99255173,1951218924,-478196986,-1946191895,1107299862,-1947336272,855641622,-1145008448,958792704,-2096597993,958792387,-1996196585,-956294114,671089670,31111168]},{"sector":9,"data":[-1023359559,1167120524,518818645,1465309326,-1106870588,246939648,-204961024,1606495140,49120094,1562371467,313933,1167120524,518818645,1465309326,-1996071228,-1946151906,-2097146362,4670,646602101,-722075631,568654492,568771594,248447467,-2080375832,7230,-555216524,471763966,-1900006656,126297792,-1275060573,1089589,512303565,109838360,632553498,-1174400864,567083040,568654492,1115682,113713638,-65518,248447467,1610611688,49120094,1562371467,313933,1167120524,518818645,1465309326,1048836764,1946157074,-1977490381,-167767770,-339473708,-1960712704,184556574,856323291,-1581216064,-1993998306,-1608141817,-987889648,-855631850,113712929,18,248447467,1610611688,49120094,1562371467,117581,1310979,262145,0,0,131072,131072,2,0,0,0,0,0,1381061456,508909398,-1899459578,1501400,141869067,136843,1318655,1599938311,1532582494,53080]},{"sector":10,"data":[0,0,0,0,0,0,0,0,0,0,0,0,1049296896,-141885426,-1962752381,-292507434,15456139,-1978718996,-1328116760,-678695248,-1309933333,182506244,-661940027,-793717109,-338195474,254077952,-695474038,-1947275088,-335483945,-523041615,-989136757,-695512936,-1544634317,-947191538,-729100041,-355335247,587203001,600963025,184619022,269912017,269891841,1997435905,235831303,99288065,17698432,178434,-1054620534,237228535,-1056243440,17827463,17827385,125242996,17698432,-2147095792,134286862,-434065319,-1014236384,91537675,17698432,17735937,195,0,378208256,-1460928498,-352094912,-768372614,30545545,95539338,28961490,-137288960,-737270831,-2016343295,956421142,1946276886,-2146994418,67228174,243271147,-1979579950,-771509808,178666,-772288221,30674467,377999627,372834772,242483668,243271543,-351272494,-770801659,-661977087,-523041615,-677199836,-754536191,-1058832157,30809736,30934726,605350657,-666992577,192020737,101191031,113639894,855769560,169929664,-1744709882,-694105973,-661940223,30934726,197364480,-2147126079,16896526,1342296737,551952560,-121373864,-118027518,15666179,0,0,279886,3867052,3103,163845,0,0,0,2,4194565,27328592,28049836,118]},{"sector":11,"data":[262144,0,0,0,674236668,674234432,24841087,24903745,-2147418108,7,194445312,5242897,8912640,9961472,-265289711,65281,195559424,-261095407,11140866,12189696,-265289711,65283,13303808,-265289711,65284,14417920,-265289711,65408,196673536,-261095407,15597441,-2147352576,10,197787648,5242885,16711675,198115328,5242885,17039354,198443008,5242883,17367037,198639616,5242883,17563644,198836224,5242883,17760248,199032832,5242883,17956857,199229440,5242883,18153470,199426048,5242885,18350079,199753728,5242902,18677751,201195520,5242884,20119542,-2147287040,5,20316160,-265289711,65280,201457664,5242897,21495553,22544384,-265289711,65282,23658496,-265289711,65283,24772608,-265289711,65284,21233664,2,202571776,5242885,25919489,202899456,5242887,26214731,0,1296387846,89016642,1414418246,1229195091,1095520339,89,503513357,597492486,52683011,-201120203,535626533,52430083,1946360198,550699799,51348739,-603777530,67131173,616366849,52749315,-167565737,38,0,0,1077936128,-1061126016,-100401153,-803739264,-2131225653,-100456727,-803739264,-2131225653,-100456727,-803739264,-2131223613,-100456727,-803739264,-2131223613,-875550999,-377423853]},{"sector":12,"data":[-2131098867,-875548439,-377423853,-2131098867,-1009766167,-377423845,-2131098867,-1009766167,-377423845,-2131098867,667881,2228246,3801134,5374022,1769566,2555931,5832743,5832805,84213861,117900549,202114823,202116108,117902348,84215559,-1610611451,22938240,16973904,-1610612736,0,0,0,0,16777216,15728641,41943215,65886,-65533,40,524288,34,524322,8196,2490369,3997744,157286522,41944790,1572929186,41960540,24641186,16646394,245825409,16648644,353959809,16649744,6356865,262216,0,0,1082130432,67637280,12058882,-1441739505,-855633736,251705360,272371917,1962934456,-1899459565,25672384,-854588744,63879696,-284751944,541362883,281928754,12779952,-16777216,0,-16776961,255,-16711936,65280,-16711681,65535,960379452,4143933,960379452,4143933,2670588,166264752,13156096,-1574518734,280559632,-1431984896,-492132955,-661863432,-61489010,-402432536,1458045563,9496577,-402635288,-689437860,57534465,1048626013,1962999825,285656597,-661913600,1442627726,-402443800,1357381637,-1077715709,312569184,339118848,-397388288,-142146832,-1191162952,549257221,28371200,-1962928479,-402646986,-24444565,367528116,-1610565629,-544489330,-402642754,414449677,-1962736664,2144763,-67057474,637535418]},{"sector":13,"data":[648283530,648283530,648283530,648283530,61080970,-1008147718,-1064380276,379586483,583213568,-1577054178,-1020657648,1283254644,683604106,387072,-927021174,1929591808,-1948743137,5290494,-528087669,-528033583,-1963597141,-791621628,-33257272,-1008437813,-24393590,838901946,-1967115301,183030565,-1965520157,1967827652,-1021572880,-125118218,-402642754,-947257339,-50280258,762512188,-24389494,50372793,49251321,-372123765,-528087669,-528035631,-1946819925,21334778,-1060054832,-33471096,-52988469,-1161262397,-234684256,855542606,-1967115301,182506245,-1428387133,150107466,-1077674980,379678048,406227712,1221376,1324681,1115846,5367809,79358417,-1193571328,-1064394752,-1532700530,61121700,-1532713742,-234642268,-611389214,1835057091,-1962929503,-402648010,-372178909,-2030041926,-1193571081,-1064394752,-1532700530,61121700,-1532713734,-100424540,-611389214,436612035,-772222720,737726968,-1962927050,-773402162,65458662,-2114976783,-1183973178,-1195180000,12451911,608078702,637184,1977995,1849087,1718015,243913099,780730400,-315424734,-772157095,200921593,-150438455,66651097,50981873,-2097143794,192827625,-1056708213,58708267,1502627051,310233355,-645146121,2110979,-100403197,-880019742,235080427,-377421790,108921182,2231849,915021182,-1189216222,-1047617536,-315434610,-1527526774,-184289277,-193605890,-967195873,4358,5433539]},{"sector":14,"data":[297517107,1946630144,185042953,-402164499,149487009,82363136,-17176576,4700355,1969803,-1946562239,-1946147786,-1610563622,-946937970,-1536294721,-1532713820,-1532713820,-1532694525,-1532713820,61121700,-1897340176,-315374630,1130112,-1590660096,512426006,-1019543534,-2137849475,-1020528413,2097162301,438208794,1614080,1318539,-1020540789,-654900099,540924299,-1592754688,-131858410,-1962927453,855644190,-1982466112,83893278,513998880,1745152,99152779,607553792,-778648832,-771829250,62915582,62915520,66061248,62915520,63882224,63832067,63832069,63241992,1794,-1173945672,-1192295484,-826605816,62451459,63879680,17152239,61916143,-284963142,-285211208,244002499,232981786,-66778434,-796152530,-487609042,115703,16777473,65537,65793,257,402653192,524312,4112,16,1799,458759,460544,7,117442311,0,1792,1950942976,-527767293,-955595485,-14287734,-1429992705,-661726836,570884792,63224547,-284019549,78703824,-284963142,1183570318,38176516,-1996470649,2147419206,118431551,-1065352957,-50794272,16777214,-66847231,-267388921,-1069555681,-789151617,84542770,-1020132062,-1003306446,-1022704078,-1005927926,-1021131254,-1004355038,2058012194,1840675303,-1431655766,1194936101,-661895623,-1957345904,-661774612,-402638664,1465262548,-337050765,12188679,-833713919,1183432755]},{"sector":15,"data":[239504336,1946165309,-816936855,-2046771014,-2050621719,-33262398,-772984127,1944244706,-1459244304,74711072,-1023490562,721347968,-178878251,-478029685,-338624484,-75496668,-2147257851,-779484479,-922564606,245336878,-1983655162,-208938402,255617,-875443247,-20036866,-152078902,1946275398,-373279995,-919402651,939524538,729075534,1992622517,-1036276454,-1378496267,1183428013,20819426,1023833089,-713752317,-1378496263,-1390786935,-1390655863,-974895479,1001202294,-707725886,-1985106515,1034804294,158597377,1025559936,-1451949821,-1378496263,-1390262647,-1390131575,-153205111,225710277,86295946,87295860,-847248524,-143751040,1959884344,-145850285,175555872,18906243,1149911924,-129595358,1014556112,2126786419,1569400326,1435182596,-1898935290,-964784704,-1409283911,856122506,-1965028670,-1020129468,-789134326,-1930632534,1972177990,415663072,-351635831,-13768445,185890443,-1946782474,-16051586,1330573172,620185226,-1957596150,1451958350,1946724382,-1962760161,-1948611647,1451956302,990999574,-1862172984,41866043,-268184697,82574083,-100404989,-1206099992,-826671101,212020739,113651205,-284949222,788465848,-284879709,771753400,-284880733,1242846859,-1960812917,132350459,952601344,125095806,-971487605,-1962739130,468464,763164475,1187431210,-1976696327,1996869295,-96025084,604505089,-1948646649,132350419,-1886769664,-662043178,-1959863549,-351936865,-110720971,-829453778]},{"sector":16,"data":[63046405,66716634,634620914,-478085113,-1976696825,705025711,-972787005,67238470,-1979243512,-1144485151,-472710913,1183370378,-295794179,-355341615,91613905,-919410398,1451838018,-1965192472,-1982728471,-74780594,1586090998,-772812302,32494063,1586176638,-2134144226,1946210174,-772878068,32428526,1317739126,306613014,-885325386,55052157,-1228405800,-60913409,-1946454392,-947135362,1174529015,-79235550,-150834048,-528578081,13598336,2123044212,-137917470,440795617,-2131015946,-537460108,-1964605815,1183512438,1964812302,1946396751,-128021958,108650704,1187415987,-620068616,-1007283080,-1909099456,96013406,-1730097152,-594881290,-523235861,852817560,132350172,-167639623,343147206,-167396119,1979710790,182878219,1963654784,81389827,-402552648,57876136,-2096842519,-57990972,-1930789239,-1983869232,-930288570,-919349106,-1191747958,-156543151,57938115,-156608848,510919107,-156609616,376703683,-1934968656,-1463899192,899333,109946355,-1993997032,-1007226043,-1337101280,1183558328,-1146049780,172395434,-645089109,-661735253,2005579947,-1965585493,129498182,-1196767454,-1951686610,78687170,-151296374,125059267,1451821236,-1423984686,615573386,-1573996373,-1413313621,-1411805512,1980420659,-1341426435,1183558333,850963438,2122951679,-816444712,-437714059,1927532544,10742019,16139974,-1928956219,1350042740,1947255798,-163133922,-1966437504,-461372572,-1174228985,-1192295474]},{"sector":17,"data":[-1557264379,-1947269872,-1200297007,-1951693686,-1951669178,-1193606184,-1951685494,900770755,21269418,-536168277,883734699,179872939,-155669564,1256958928,-2147261302,1678395380,-972655353,-339675578,73697846,-1983630676,1686816326,-1003312124,-1966586231,850134116,-901346876,-1422480200,-1425661256,-1413069171,917559435,103987370,21466539,-1341920341,-930305364,-919349106,443872778,-793194870,100237504,-638187662,-1274494592,-1096027192,78710170,1325311475,-1961921286,-663320585,-835989621,-661733236,-164453133,-2096214389,58007801,-788484631,-1947610647,1451940470,-813793035,1963880961,616991496,1946237955,-796215292,-797015893,-1341492734,-1967609306,-830428379,633768706,1967652867,29816333,-427790732,-1031096066,-1203214869,1551222410,-154891592,1416954566,-1196808528,1290470794,-372119087,-478029429,-155713524,-784501552,-1949380146,206278,-159377291,80147972,-1967648652,-506352680,-825105967,-1023488303,-670325781,1962934845,46593548,649070453,-773074518,786105323,99518347,-1425944960,-1401042178,-153715063,125108934,-1196808528,-1934940790,-1093103928,-1515911774,-230257755,-1993940858,2122971973,-1899983660,-396981288,1903481355,-166830454,1802837187,1946403830,-5195746,1946272758,-963987453,-527779669,11189931,1965081590,-789071845,-166335573,1979710790,10796610,-2131278090,1190528628,863273206,57928401,1957349003,987444008,125172062,-1420865864,-2092480837,175374842]}]],[[{"sector":1,"data":[-494224976,-1262056789,-963925005,-619992512,-1014299788,-1954681941,1579931230,79578072,-2096975616,57811195,994701009,-1340178730,-1031034183,-743708461,1958882272,1174349328,-154795010,-1329034269,-1047811351,-1949594709,2128493530,736004866,-663319594,-1527529077,-265554037,-12204506,-154403158,-204960797,200289188,-1961001262,1036463046,158531459,-527826388,-341056848,93765131,-1523669714,-1426061779,183522955,-1961921290,1988875342,-204592168,-1980594524,-930284715,2123028622,29882103,1538261876,281540266,1588593524,1499445418,29882027,-2014772363,2046757376,-163121640,-1339787968,1183689405,915254214,112788930,-341445888,281540114,-940176012,-1207405304,-1951676799,-156507066,141886151,-1412988488,-1411496309,-1411133256,736777867,-2080734249,-360707470,-1327330814,233548659,-1425837384,-2085951056,-1031076374,565426347,549975723,783818356,1451994016,-1413313582,1720321200,418152699,119847083,-1573996373,-1413313621,1947256822,-964577253,-431584341,-478093430,99844109,1451952501,-775803932,-1413338142,-1412988488,-1965013365,65241311,1963062144,-564753655,-489569749,-1951677909,-953423290,1929347901,-1979569143,-1411206944,-1765930517,765830405,-1330970618,2116790987,-940156950,-989629424,2126781046,307137314,-109149956,-50236415,-11198029,1532881502,23643265,-67108424,438732846,378726405,-310157729,535137026,550128989,-396457216,-768357493,-247035325,334823740,-109149990]},{"sector":2,"data":[-50105343,-81011721,-1073029237,-1057093516,1183319157,1720336881,1975844595,-211384316,-397506239,-974240119,2126781046,63879714,1854589235,-402398221,1317732428,-1305353240,117618884,85500718,-1194413329,-1557266171,-1192295152,-1557201144,-202439404,-296863324,-217903499,1317796611,307167208,300674421,-470716790,976899,-83627261,1964134143,-371510353,-443875506,-1557264208,-1192295148,-1557266427,-1175517936,132842498,653919370,-1946483322,784642753,-284878685,-321859918,-789642064,-1394248211,629810938,-1950090326,-394908681,-2147291517,-2097024642,-994443050,117618691,436651566,-1292959227,784436174,-284880733,-970817852,-972492218,-2012680122,1183513950,-129566979,-1978436224,-1006699426,-17015160,132350411,173933312,-662042830,-84785525,92940015,-72694902,-471314805,-16205816,-205288721,-263812182,158655498,-1977159686,-1430025723,-130053,-1300950450,-1880499405,-1864856322,-326412987,-1193767394,1843920954,1918326296,306613012,-775801959,98619872,-930414560,1930975208,88664323,1720312067,410437112,856587972,306613202,1383383051,-654899329,1586092851,-96040680,558730022,652889737,-1995160181,-166994874,1149974388,735087362,-661971898,-752155523,1451875123,-531199518,374704934,377346619,721831051,-1036313530,-1031077252,108969995,41861947,-739699989,475958020,-1981653367,-617357218,373656358,1183433515,-532282914,-503856381,727026470,-1991720445,-1014241210]},{"sector":3,"data":[-628362357,-1023155721,-330921656,1992672907,-666450166,-2094661632,1946162301,355318342,-2081401207,1946160252,357808675,-1947183479,1451822676,307530714,-1948887415,1451823188,341085144,869553801,-598308398,-1105832821,-771025647,197022068,-766080747,1451872819,-1169888292,1451824526,209486832,-1172081664,1451824447,240421872,-1948625271,1451823700,273976278,-1948756343,1451824212,-1982712876,1418452054,360103446,192205323,-1995083586,-768355754,-1982048631,-159255946,1988695471,544654830,-1996073845,1174664278,-974981348,1586174070,1962281758,-1995666573,-74717618,-1996204917,-785652650,159177003,-1947828599,869477327,-2114352165,-2097149977,-537458449,-771981687,-773205527,-1983839255,-633604538,1992652669,243188756,2129811199,1958743035,734069534,734759875,-1972404774,-775386391,-773271064,-511684376,1459572999,65727474,633547713,-880082937,-571745749,-1981391223,-880024482,-410912373,-276627449,-1981810936,-472777602,-472783919,1183433475,343328246,856587972,-229179429,-930420342,-388896559,-2142181167,-347011103,53537260,1510083305,1354773342,1381388360,-886366485,-376828034,-388904822,-388896559,132218960,-127517871,2122569588,-680261412,1213251635,307137360,444582155,-472363381,175555846,-1961868151,1177281606,-531199002,-371042773,1992622814,-485717216,-431060135,-1948100981,2123097206,302180576,-1174404168,-1557265458,-970062580,33888774,33929455,84976430,-1195068689]},{"sector":4,"data":[-1557264638,-974191336,1149897334,-2012797941,-1111833530,41714453,-1978829823,119801668,-1178057080,1726681875,-372222327,1149960539,142377230,1992622339,-1977584630,-523236540,-999913320,-2095722566,1946223228,121932507,-2003246896,1471793254,-1993086189,-661926330,-1023164413,-1980479997,1150012486,-1002010360,-2012593014,-591739322,41714453,-1951828991,1183384644,105155272,-1177926008,1451824010,1317753296,-775844890,-773271064,-2113948952,-771749919,-464614422,-774272183,-773074453,-2113947925,-2097149983,-638122007,725673682,570588632,-430011946,639663812,51019204,-1950091650,-215223178,-1962742141,63879898,145810314,-1977159686,-934901243,1317796778,2093550566,-1207340007,-1963983096,-1426864058,145811338,-1977159686,-934901243,-33293398,2145275647,-1972180021,1988872294,1324559348,652107403,-1003354742,807846434,1317750533,2093550566,-205223410,92939946,-970800078,50671654,-612414466,1183530987,62915534,179960,1653268363,92939976,-1037908942,1191522342,199642763,-1978762039,648737732,-1003354742,807847458,737905413,2035207806,-864156717,2145275647,242664904,-1003785019,-1004134274,2114128509,-159479306,33587945,-1964977202,-799604786,-638187338,-248904076,-522982018,1997077888,1961691665,197145114,-1409190666,-315437686,-1070406421,24442379,705212844,1272441833,931870283,-1959376053,2026441231,197145115,50623734,-760419210,149520608,-383067658,-855460749,-1360270030]},{"sector":5,"data":[-1964214781,-1781042,1988874326,-361364500,1944614459,-327775972,66354827,2122970750,-128021514,1988804659,-595688452,-351964152,-1871058010,-829765325,-1959376053,1962281783,-327810206,-28341450,-757037396,149520612,-247801354,-830075777,-836058925,145828725,-1059910933,803982890,-1393789437,1459602566,-2084272432,-1959394069,1979058999,52751339,613084278,-377437997,-2032536056,-799604796,-1059863418,-167188096,82543577,188189494,1272739318,-1964996021,-13899279,788031115,85591750,263907328,-310157729,535137026,516574557,1166681600,-1961301217,1311895118,1325378802,639532282,1998472506,1160390376,652374557,638864779,1948271930,98694671,-654114808,-463601213,-56497832,854615807,1407242724,-1960388469,-1960430783,-936692407,52655195,1183570510,-700044328,1174602879,1183400404,62927832,-1977170983,418062149,837701259,-5442994,746388046,507853350,707192951,-495837883,541407782,-466440588,-1957437231,1099638488,1233856051,97004341,1952120840,-1009187887,1491361281,-1946407191,1311895118,-766604302,-654065613,145772739,-100413766,92940015,-1429977462,650336507,1446122890,651436740,-1018751696,-832664749,840272422,-735919018,638922790,1446121866,651436741,-620555984,840010278,-735918506,1192308774,-661863589,-1957345904,-661774612,1443163267,276219223,-1979169654,210439014,-1996327797,820247158,-1341660032,63879682,134592751,84976430,436651566,-1947270651]},{"sector":6,"data":[-91550634,240028494,33965814,-242547596,-773273293,1073854477,1023231624,50754563,1451858368,276743176,175490342,638338699,-150569589,-1947204633,-645198258,-372119087,-251401775,-1064380276,132350273,-1618334208,-872546006,113405,33965814,-788787595,-154927389,-137417773,-621329959,-405679114,-405674031,66944640,-1957211275,276743379,241011494,-1962379638,9046398,545970947,-536164557,180761260,-152816956,1946224198,852295170,1975657156,477382943,-773092523,-1965782293,579485184,-536164557,180761260,1975661252,1575805442,-349604513,138840930,17188598,-789117836,850188278,1975722692,1237617171,-142128780,1131720435,66553665,-1003311886,-506338863,1190584785,292880902,-638070997,-523222711,1312553843,-350192134,-388937467,-1047790733,113651452,-402651878,1583287632,-1962742397,1297948645,-1207955766,-454295553,1167120524,518818645,1465309326,2112405555,-385649904,1992622434,-485717230,273582864,-1961994613,-386233359,1992625288,-2130595566,16975996,1183452020,-1732194291,-1324718456,105155332,-1961990409,1959071316,-1947204854,-661974970,-388896559,-268179247,516993,716147246,108956417,-1962385781,1975978947,12445955,-1960393842,-478065891,-771031025,-164729483,17127047,-1976679308,-1341823321,63879683,84714286,436651566,-1192295675,-1557265915,-1964047088,772321509,-284879709,45663410,1183510279,-2027803123,841876854,604341895,613087751,-369425272]},{"sector":7,"data":[62390433,212020736,113716741,328976,436651566,-571997179,-16205588,85238574,-1915603985,-782955906,-1349832989,-771021396,-511044235,-994442576,413347331,78704389,-321859918,919745519,-125172342,-704699254,-987577294,76071986,-789445817,146929345,-346174348,83460158,-768405899,746897459,-1169673868,736839679,-125116534,209048075,-826669904,-790525437,-768348180,746897459,55050612,-155070222,-596375359,-1014247285,-401980184,-970060852,334342,-310157729,535137026,281693533,-1427636480,-1962874140,-288274706,-947247734,75033866,305438774,142208266,-1021131726,92849202,91865139,-797261440,-25211451,1925959883,-109097724,2118993867,150832123,629862268,92850058,149783367,-791941249,1292137163,1204550015,-2080670131,-277083907,-1157691208,-268827698,1032324490,-310163461,-873955576,343534858,63879762,-661986422,-268826448,495453578,1524402939,-661864397,-1957345904,-661774612,-402604872,1465257580,-2132212877,1187445760,1992687595,71600906,-1948498295,1183385156,38046686,-1947908472,-478065892,1586036751,376882670,-989707125,2093227638,139234058,16906625,-108983948,913637635,-1962750080,1317604940,33129442,2122899408,106204136,-135506295,-1980234782,1183642238,474385396,1946161725,277797,-1326905227,112643,-1070398741,772447208,85591750,-2090967296,-443874579,-900899553,-940179428,859993216,-1949158455,-1957755780,-984743308,-661911970]},{"sector":8,"data":[192201483,1468731275,74943234,-402227317,62392788,212020736,113716741,328976,436651566,-840432635,-16205590,85238574,309773807,1183384715,38046680,-1948629367,-75299748,1955299077,-398002556,-1978567423,-1730096956,-1965529464,-523182266,-597260136,-106460626,-25513960,-163149368,-989761304,-1951590794,-930370096,-271451509,-271454255,-1947042301,132350426,-1618334208,1183514922,58673178,1358903017,2122929694,-362903310,2089485451,735785730,-1291553854,-1948715262,-1949856816,1187441782,-2033811991,730922820,-149916735,30114008,1187438327,-2033811479,-1958281404,1925856200,80445445,1988741767,1976699888,-226587895,-370516342,-930348828,2123094158,1976110076,147554333,1963246582,-142704619,940537343,1635052382,1391156872,1510054888,-1007265813,-1206225656,-1951666559,-1976652863,-2147448153,1183450308,-2118603799,-1031033914,-346146645,1585984372,-1886769429,-315490158,-1959863549,-1962906953,-1096485921,78715173,-557440,515769716,-217337575,-129594460,101041963,1166550528,-531199490,568805062,-2115469696,1720326005,132415719,-994442576,413347331,-321851643,-827194192,-226572817,-1963960693,2123033182,-162624552,1440773771,1576558335,31999734,1183523188,-599357475,-1948367224,1183308102,-632911656,31610507,1188098646,-777423897,-1980093470,526317134,-796152324,1489537965,-1912687895,-1929428290,-1983803695,1317664894,-1899393798,419413721,-218101319,-142704476,-1978305281]},{"sector":9,"data":[37545286,146673269,-217796327,-596210267,-25851610,-152150389,1954605126,-2013909399,1946223958,-549025183,1988567598,-2026754555,1183319430,-616133924,1988567598,-2026754555,1183319430,-1484116264,61867366,772001466,-284881757,771884472,-284880733,-2132261178,45663410,413347335,1891561221,1489177,-557440,2122321012,108266213,-1189516098,-1527578598,-1976687381,52808847,-1215615269,-1527568980,-1323756354,-142704635,1007252735,-1106938878,129046800,2122950131,-2037529604,-953417913,-2132246912,700337268,1423641,2532595,2552133,-1007223995,638219266,-1007925818,-213531098,-1948022193,-1976635810,-1977234289,786105281,632076171,-1527522166,-1323745602,-156962039,91488963,-112867802,1160259151,1203684350,2472217,2532595,2548037,-1007228091,638546946,1340294598,-112867802,1170613839,-1329347620,63879688,629862394,1207647624,-477490973,85238574,-87586065,-72735350,-963905054,-268826448,1032332682,-192230405,629801394,-1003305078,-1003305438,1976699562,-695481599,629861603,-1003305078,-1003306206,-336338262,-2134378771,1589983860,39291670,1334573707,443976452,-783253938,-1947807258,1239941744,243718,84714286,268879662,771753221,85591750,-415045628,788465848,-284879709,-1961984373,-930410426,145870603,2126847861,75334418,-1961659387,39160581,-847188342,-756625280,-382866434,-336987156,376882683,-2130551669,-1912600605,541428696,1996489533,81382]},{"sector":10,"data":[1837818996,-1979610590,1368000609,410094096,-1982314871,1854462550,-2130726684,1946346878,-398002651,-1978371071,1177737286,-580504868,182343218,1958873796,-1978930259,-523182266,-969738030,1183359092,-295793690,-2132261130,1190547060,1215594724,1451750958,1081344261,-1994560584,1317861446,-465138950,1988567598,-2026754555,1183319430,-1484116261,61867366,772001466,-284881757,771884472,-284880733,-2132261178,45663410,413347335,1340862213,-12403059,-1047604852,-1980203383,-913507762,146397582,496418304,-1976654605,-1960457073,786105281,632076171,347710707,496942592,673621235,-930350267,-1397257426,-1180372187,-1296170997,648344349,654132520,-1946204888,1992628806,80118550,-385646776,-1387201841,514709643,735087446,-385649197,-1958084455,-772812293,66048495,1586426494,-196702476,516993,-827356626,-1948646651,132350419,-1886769664,-355400234,-355341615,-383646347,1245890866,585522826,-1966398741,854166245,-1963881527,-896803970,1190535600,91554280,-336044289,1347835714,-1957670573,-770973098,-527820171,-1341660032,63224322,85500718,-1326657297,-271666684,-523189110,52816080,2055902720,1492159448,1509449471,1600018523,-790462973,1589539776,1273583647,-1864856321,-326412987,-1193767394,-310181887,535137026,281693533,-1864856576,-326412987,-2082959842,1465257708,-2080610679,1946226302,243172140,-1203801086,1720385537,-2090967044,-443874579,-900899553,1183645710,-11528464,1996425334]},{"sector":11,"data":[173997830,-562774005,-1980353597,1988751990,-260666892,-386498931,-2092564390,-244185602,-1070349077,-1980742007,180287046,704256,771754683,-97142,-22705618,-230258177,-24671698,-1981533441,-397151162,-1168375896,-634716158,-97788555,-232008075,1187499893,-1107295504,1988689925,-226587146,1308624360,-1393822599,1883734,1736739630,92874241,1770294062,1166616065,-9771006,2097475203,-1933353241,1430622424,-1910575989,720143320,-1946396842,-620031394,585696121,242664706,50037579,-472836225,185222795,91491398,-1851261138,-2020921821,149496727,33810690,-108852085,-2096204795,1912734332,47363,2131097987,108301816,-1006503960,-1951724930,-1047811134,30927275,-946940020,-1949008243,66814748,12256126,786105088,592553983,-1155498611,568918017,41192705,1284163891,1284133122,210391297,-1996376088,2123233374,-1898541868,-1946799162,103475409,103213146,102951002,594867723,1947598467,721322762,-24967820,51672383,132547062,-2071253504,414786001,-772199680,-1951665175,-1097205690,-151584765,-164376437,184937448,51279094,-2071253258,-276618799,-1414812920,48043,-2013222935,-581588446,41207159,1241928843,-1274127221,142376963,175424771,-617414028,-1174636919,61079560,-1946426638,-217842570,1996614784,185955051,-1310362405,1166681608,1159866104,1159866096,-236803352,-352320581,105679705,2114320771,-13768445,-402099059,-1924005648,-370607500,-729131008,-472786549]},{"sector":12,"data":[-472783919,593600397,-402647832,250085393,-771510016,-389360946,45809669,-1961104640,571891,-892285232,848873098,-1107068734,-1406262439,-492125134,1972225017,176080096,-1962932294,-903739826,543000870,-1274519925,906540292,600363692,25700058,1976434243,147293170,-378155778,-1931447155,1473810128,-768353485,146407219,-1967115456,-670887868,50873482,-133976880,1144700852,973567239,41226052,-333261578,-579483138,185071800,990147803,186873304,990147794,186349008,990147839,-2129431048,184615143,48660687,-410980854,-2131817980,643793101,-1342018168,855829249,-2090967104,-443874579,-900899553,76218386,1359107210,-617351630,-511260365,-637282301,-510994173,-86898511,-53291312,-120400176,-75376944,58458494,1497419392,1344362947,-652074719,33,0,-256,-65281,-134744065,-134744073,-541097993,-33818641,-67240194,-1075843081,-134744193,-134807305,-608338185,-1109661721,941691006,102961953,8960,-1864856576,-326412987,1473809950,-1962260853,1586170966,140380934,1860701044,108971263,-1993954308,243188757,142442534,-1979157501,-1730096954,851610521,-310157322,535137026,214584669,-1864856576,-326412987,1457032734,-2084555945,1946422910,243172102,-987859707,898304638,1997012611,-773402348,1741062630,-1899459583,108971224,-1331321348,-2090967295,-443874579,-900899553,-1909587954,-2144996066,-830342943,243859463,378077546,914948460,1049166190]},{"sector":13,"data":[113639792,-1325334167,-1577411392,512426006,635961368,1947955968,-2033634535,1359051278,23594694,1843985216,512634589,-1571281419,32178554,-68677937,-1909537793,-2077887202,1963026446,952709932,1946249486,1845902113,52133633,989865478,2080467462,1881029393,-2129953023,989863875,2080467998,-922009343,-1909537799,-970590946,92422,-1864856381,-326412987,1457032734,108971095,-1207956290,-930414588,1604645884,49120094,1562371467,313933,1167120524,518818645,1465309326,243714355,1709375866,23594694,872062080,1980139456,1912996097,-2017447167,16873478,-83790842,-52641816,-184119762,108447013,-972302196,12528244,440576,1743300083,512634588,-1577441803,1990393856,1913006337,172289,687962275,-972983290,1073833990,248447467,654310376,24774342,-2090967295,-443874579,-900899553,-1070465020,584120003,-789134396,584382147,-1009453372,-1966881654,-1009715516,851690546,-1009715516,583255074,-1009715516,-1005924106,181728963,-1009453372,180601866,-1009715516,-1010565200,631448938,628237677,629089653,630138244,629613964,630465916,630793643,631776672,33817602,67240966,67240962,33687040,1167120524,518818645,-4663154,49120255,1562371467,838221,1167120524,518818645,1465309326,-661731188,343852284,17983105,-1928432384,-1191140810,-1527578592,-337963032,-1036612341,6863104,-1527529077,-310157729,535137026,315247965,-1864856576,-326412987,1457032734]},{"sector":14,"data":[108447063,-1193601304,1583349759,-1962742397,1297948645,-1946155830,1430622424,-1910575989,-1671997736,138841082,24512043,-1962839389,506136158,512295288,-919404172,24776326,248447467,-469763096,1483616,1580681,-437731151,1947759613,1745780765,-73646079,-337955864,-401682687,-1909522437,-970590946,16873990,-73649173,-337970200,-401682687,-1909522437,-1675234018,-1593724422,512426354,104530292,-1468727274,1580603,243835509,32178554,-68677937,-2090967041,-443874579,-900899553,-661913596,-1957345904,-661774612,856053590,2047772361,-1604066559,-1073610392,2038004594,1923218076,1948158721,-821957887,-268274,-74714997,1307101491,-1992198659,-1996483018,-1677715394,-629479173,248447467,788528104,636821134,23594694,-1577411584,512426354,104530292,-1049296874,1580603,113687413,-352255622,-401682687,585891835,23594742,-1676249792,-631576325,248447467,788528104,636821134,23594694,2047264320,1594294529,49120094,1562371467,16829261,16777217,-930348800,-1070344050,-1414812757,839446403,317378815,-1226125104,-2147373053,158601466,-92273744,855798832,-773402176,-17822746,858225866,-1966175552,-1964977686,48112349,36150951,-802708857,-487730963,-1965520148,-763318068,17311464,-947661333,727433992,-149326908,104412888,276234250,201734454,906262016,-1962931037,-469763872,696630,828214,12238899,-469763712,0,0,0,131073]},{"sector":15,"data":[0,0,0,4194304,0,2097152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,20971520,175,65536,0,3,2097152,262176,-12648448,-14680065,-15728641,-16252929,-16515073,-16646145,-16711681,2130771967,1057030143,520159231,251723775,-16711681,-16711681,2131820543,2134441983,1065156607,1073545215,536805375,536805375,1073741823,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535]},{"sector":16,"data":[4194304,6291456,7340032,7864320,8126464,8257536,8323072,-2139160576,-1065418752,8257536,7733248,6684672,4390912,196608,-2147418112,-2147418112,-1073741824,-1073741824,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2097167,262176,-65536,12648447,12584704,12584704,12584704,16254720,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,16269056,12599040,12584704,12584704,12584704,-63744,-1,-1,-1,-1,65535,-12648448,2160895,2099200,-1623455744,-1627096846,-1627111182,-1627111182,-1627111182,-939245326,-939245530,-469483482,-234602418,-117161826,-234602434,-419151714,-838582066,-1643888410,-1677442830,-1744551822,-2147205070,-2147205118,-2147205118,-2143535102,2127874,2099200,-12646400,63743,0,0,0,0,0,524291,2097160,262176,-65536,-1,65535,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,-193,-1,-1,-1,-1,-1,-1,-1,-1,-1]},{"sector":17,"data":[-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,-31522816,102236160,102236160,102236160,102236160,102236160,102236160,102236160,-31522816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,851988,16842756,0,-1,-1,-4097,-6145,-7169,-65040,-65296,-65040,-7169,-6145,-4097,-1,-1,0,0,0,2,851988,16842756,0,-1,-1,-32769,-32770,-32772,-65288,-65296,-65288,-32772,-32770,-32769,-1,-1,0,0,0,2,1048591,16842754,0,-1,-65537,1073250300,266346480,2147254268,2147254268,-32772,-1,2,1048591,16842754,0,-1,2147287039,2147254268,2147254268,535826400,2147237880,-2,-1,2,1048592,16842754,0,-134219777,-268441601,-537407489,-1074159629,2147368956,-1,-1,-1,2,917519,16842754,0,2088501248,2088533116,2088533116,2080406528,-58721153,-58721153,64639]}],[{"sector":1,"data":[2,917517,16842754,0,-1,-1,-1,-16711936,-458760,-458760,-458760,0,2,917530,16842756,0,-1,-1,-16769344,-16769344,-16711937,-16711937,-16769344,-16769344,-16711937,-16711937,-16769344,-16769344,-1,-1,0,0,2,2752568,16842760,0,0,-16777216,-1056966529,-16777216,-1551894145,-522241,1673525631,-783361,-471926401,-1307137,-470943361,-2355457,-470550145,-12840961,-470550145,-12840961,-470943361,-2355457,-471926401,-1307137,1673525631,-783361,-1551894145,-522241,-1056966529,-16777216,0,-16777216,-1998856,-14680441,2124324839,-16254975,-1132466209,-1838728,-639502657,-15112450,-641665345,-16161538,1669396863,-16512769,1669396863,-16512769,1669396863,-16512769,1669396863,-16512769,-641665345,-16161538,-639502657,-15112450,-1132466209,-1838728,2124324839,-16254975,-1998856,-14680441,251723007,-16727809,-1347748609,-16727809,1331035647,-11221505,-1398115141,-5715337,1263889851,-11221577,-1414898533,-5715209,1280654763,-11221641,-1347789645,-5715273,1263889851,-11221577,-1398115141,-5748112,1331035647,-11221505,-1347748609,-5715201,1331035647,-16727809,251723007,-16727809,2,655390,16842756,0,-1,-8390401,-12586783,530507742]},{"sector":2,"data":[530507742,530507742,530507742,-12586783,-8390401,-1,0,0,1,2097184,262176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50331648,50331776,1929379968,1929379996,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930297500,1930311836,-15763204,-15763204,-15763204,-15730436,-15732483,-15732481,-15736577,-16260865,-16269057,-16547585,-16580353,-16711426,-16711426,-16711428,-16711428,252,0,1310738,131074,65537,65536,16711681,-16777216,64,1077936383,-65336,-65536,255,0,0,-65536,255,0,0,0,0,0,524300,0,0,33619712,1700004098,1852403058,201354337,2304,0,0,33685504,1970225921,1919248754,150998016,0,0,0,1208091138,7760997,524303,0,0,33554432,2035482882,1835365491,0,0,0,279886,4194411,3124,229381]},{"sector":3,"data":[0,0,0,65539,4194616,5767256,6488161,407,262144,0,0,0,217055659,217055488,9178154,9240896,14484093,14548993,1431261957,17486,256,1380272902,21775694,393474,167969039,23331584,50457603,-469564668,90768133,50699011,1476592693,60752644,50672131,2063795452,77595396,17090307,4456706,1560477953,0,0,1314213715,-661913532,-1957345904,-661774612,12080982,-1706029568,65535,1342177723,-26029,-930414592,-469762376,951586315,-1202630656,-883949475,-310157729,535137026,13323613,-30490573,771769094,4406912,-1338870527,-1203509578,1122370867,1122419850,1642332395,51175562,12149222,-1174478300,-1047919053,-980794650,12141286,-1963007436,-1335761212,251538945,46792771,16973826,65560,16973871,65570,93,279886,3211362,3319,163845,0,0,0,65538,4194471,5242960,5898328,651,262144,0,0,0,175115326,175112512,16518375,16711745,1297040132,77,100663297,1414748499,17780037,50331651,906166299,5505792,50363651,-1190985573,13894400,50394627,906166548,22283009,50426371,-1341980271,1,0,0,0,1167120524,518818645,1589958798,29616134,-1962742397,1297948645,-1946155830,1430622424]},{"sector":4,"data":[-1910575989,106874072,-2096880408,-443874579,-900899553,-661913596,-1957345904,-661774612,-1005951350,1558709854,49120006,1562371467,445005,1167120524,518818645,1720375438,126674950,4000373,-1207471104,49020927,-310123470,535137026,46812509,-1864856576,-326412987,-1965519330,1183451238,39446534,-1962742397,1297948645,-1946155830,1430622424,-1910575989,140937944,-402241910,-310181356,535137026,80366941,-1864856576,-326412987,-1965519330,1726482022,49120002,1562371467,182861,1167120524,518818645,1465309326,-1005951350,266864222,-2090967290,-443874579,-900899553,-661913594,-1957345904,-661774612,-1962383734,1709704798,49120006,1562371467,313933,1167120524,518818645,1465309326,-1979160950,1223165566,-2090967289,-443874579,-900899553,-661913596,-1957345904,-661774612,-1962383734,-2115500450,49120005,1562371467,313933,1167120524,518818645,1720375438,106859272,-2096793112,-443874579,-900899553,-661913596,-1957345904,-661774612,1720342358,96462854,-310157729,535137026,46812509,-1864856576,-326412987,1457032734,107383383,1594205672,49120094,1562371467,182861,1167120524,518818645,1465309326,-402233718,1583285790,-1962742397,1297948645,714,1442840576,663365207,1929682664,-18426,503373033,-820081618,511478529,-1895825480,958680,-644953805,-1575023225,-155713284,-1981946881,-940106676,896794632,-1207811864,1048576030,1962672380,702467,-402588253]},{"sector":5,"data":[460456870,-494857078,62390275,-1204826878,801964545,1552664883,-644997602,-350285943,-13433223,817874830,144882176,-2146692936,158598141,-1174393665,146278556,1212451083,169993466,15419460,653992422,2089369028,1279560778,-997581305,632561422,-1960894003,1119892433,63078638,116261099,2089617182,440626,-2012763149,1149846084,28305442,-397408396,-346554071,568654358,-163027830,-423353644,1153891105,-1070399426,1595557001,-396967074,443679667,484968825,1975520000,-166860013,1967144516,-85947893,-83658264,-1017200589,1581252792,-396929341,863110027,-315488391,-352128536,-303542230,712333312,993021067,511588428,-1960018748,-2010760100,-650427647,-617414030,-12821367,1055406148,1606431491,1283507038,1149960475,1458891546,-389467305,1416758083,-2142221704,-1988083124,1284053580,78178354,-482849653,65583158,1342563003,-6663410,-1962934017,400767052,-788084946,956311553,-277530548,-784432338,-209911807,201326265,1359508672,-26032,1482227712,-400796533,-1047855099,180575839,-400918044,275907122,-494857078,45613059,-1204826878,801964548,-350464885,-1070382543,79855854,619446507,1969241184,-1070445831,82477294,169993466,15419460,519774694,-985054070,632572500,-1960894003,1552620628,-1070391778,394909838,861389599,768511,1149957682,1178870341,1950762034,1004571214,124913276,57926864,998297216,158468732,-321852208,-830471309,142359360,-321910926]},{"sector":6,"data":[-830471309,1979058720,-63012837,74775552,233553634,-919382189,-1274812230,1595264390,-1444198565,-963976142,169493512,1455644608,663365207,-1207819544,124977151,-1343747463,197145344,-1017225280,-486481688,16574710,1418457458,-1070382564,9758958,-1545019765,-1983609344,-471316924,1111642112,-1997635572,-947175324,-2012453856,-1360511164,65699840,-1964064374,15418053,1480737518,1149911790,-796777460,350802112,887130624,1149955595,-792670195,616616128,584381955,1128564932,-804502390,-2010110752,1149977668,306457386,-2145368951,-919403286,-487849749,113410299,-336854805,1149824000,99254341,-285602384,-352009600,-360649728,-335484155,-11408901,-1946252458,-661911821,-1178563041,-1527578599,-1017194354,-919355341,-167770136,-2035276592,958810592,41223759,958824460,41224271,958795788,41224783,1388519436,21990182,-108806093,-2129759694,1934295545,113160,-138280776,-1194816527,-1017446412,55020326,1996815488,-14762162,74834954,67434369,980879420,913442092,41214978,-456078082,-456071984,67945482,90671654,595125258,-327152780,2030597122,1963173914,1392190486,55544358,-754909254,1525058274,-172440584,-1195116033,-1007026181,-852492104,1963146273,-1207912433,-1073074227,-1007221132,24379588,-13712391,-889073394,1049304663,1418395901,-1898237156,-1965258021,-1981558555,-1962669929,183161299,-1859553820,399311540,1965606134,281343521,-469099404,1968117112,143116267]},{"sector":7,"data":[520093700,1723521,1112309761,-1849467096,-2016995379,1032,1113882655,956310999,-535630640,1946743936,459540493,35996918,1283458164,-1017183707,1077824640,-1958648696,-1031791532,539290629,-360706444,44624900,34342517,-301929490,-2097381181,-591519113,-2146601984,192348668,1946177214,48643,-1094458358,-58720100,-1091210112,-260636484,-109051720,-396929341,460521423,102635896,2089617183,-1175221466,-1070399482,-1510737156,-1510799695,1595868923,861324126,-5642030,175293067,1552484472,574917924,-1017193844,-6952874,242352308,-1946547080,-738778556,1552537635,-1017185502,-8525738,-1047772302,947178251,-768358093,-1047796726,1149903736,1145315909,-1320926158,-1964453372,-461356444,-1966863848,-461357468,-1950086560,1418408524,126363192,21989670,56068390,1149747251,-1178378726,65797952,1455358137,1929325288,-99190757,138570784,1418412620,63078428,180691692,-301929535,440699899,-396967074,527630087,-75495559,-350915321,475302664,1929902976,67056139,-13698341,-83389033,1578779787,-1526229821,-1324897785,-989349113,-653799673,1112309767,1686160136,-1360398526,79855870,-352187156,-2134643200,619447490,-301929475,79855811,-352252692,-2134643200,619447490,-301929474,28703683,-1006761496,-388877482,-1031012717,-963967886,-1017193844,-2065148074,2020963070,1111815793,-1959496686,1144730180,-1960020208,1686772820,1284176451,1961101890,79855628,-339473684,-511644160]},{"sector":8,"data":[281147133,-914355852,-270434300,-1996607256,872104524,440667072,1141584501,-1004768206,1552623228,25830964,710687555,-617414030,-13345655,-469028276,-154968481,1963002948,356813321,540951798,-1070338955,1583335731,-396929341,561184259,112794744,847023360,41287434,519895299,-88067577,184265459,-402426625,1150025562,-1017225446,5160534,-1101658901,773718016,30350990,1381061456,1418397271,46301212,-329645589,175440296,-125049806,-1510003118,1149962462,574890276,1499094791,-434065317,525925152,171495262,149555654,1283459302,-1031765982,-527766525,-360646518,-990450683,-2147191792,574628428,1678262116,1945096218,575438914,843877121,2099924027,1044706866,-164858592,192152263,67978486,1149896052,574810900,108347460,135087350,1156978037,309657868,1964327994,1045200909,-2147161312,-385803700,1157037932,427032845,1963934778,1112309766,988605192,158666308,-146643840,-335743768,373570270,1283458165,1156973090,-814383038,-1960411964,-2010761636,1547387649,855798314,912034267,843876673,1914719291,1112312362,1964229110,1130662434,208987146,-335232384,-1004350218,-301807232,34424054,-914356620,-56629247,-381531000,-1031733516,547941379,-360685452,1113885189,1969276150,96794201,-990504076,-2146733055,-863961372,256150032,-461371669,239373035,-347970424,2143614513,1156985973,158613566,-1086430080,-348044150,944540445,2093227235,979143468,1124174374,1915771963]},{"sector":9,"data":[-1982123262,-1991689636,-370263988,1283522188,-331217886,-219415260,-335232384,-1975171960,-773813528,-790048280,-754732564,20456936,-1977465847,-1073068988,-400419980,108324922,541215872,1686112235,-219619518,-28644869,16973826,66391,16973826,66430,3,0,0,0,0,0,0,0,0,0,0,67108864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67633152,0,0,0,0,0,0,0,67764224,0,0,0,0,0,0,0,67895296,0,279886,131209,3520,32772,0,0,0,0,4194353,8388672,8978569,662,262144,0,0,0,-2147024892,1,218103808,5242896,43647032,-2146959360,2,219152384,6291632,44728348,56229888,-265289529,32798,0,1313818119,1380533332,1313818117,21332]},{"sector":10,"data":[1835010,184353024,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775174201,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718623,655456,131072,-1879048192,524289,134217740,536872960,-536846081,0,718336,0,2035482624,1835365491,7680,812801,694364160,1886339872,1734963833,1109423208,1953723497,1835099506,1668172064,959520814,539898936,543976513,1751607666,1914729332,1919251301,778331510,0,520093696,1090525952,2560,0,26214400,201328895,536576,-33488888,16654111,0,3166,0,1919243264,1634625901,108,0,184353024,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775174201,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718623,655456,131072,-1879048192,524289,134217740,536872960,-536846081,0,718336,0,30208,469762048,806888556,806099000,0,203294208,2117090364,1010597388,0,410795008,2121809020,1013333118,1667261958,1014774883,1719549052,1717986150,1012939902,3670032,393312,408944670,7888908,0,0,0,1880624640,115,0,0,0,0,0,0,0,0,1711291392,2120629784]},{"sector":11,"data":[60,3964542,1866872,402653247,1080033340,242221280,1013332796,242236447,242247228,997746236,993791600,1879244902,241581070,242235488,476461884,242221056,477128252,1986817080,993791600,1879048294,241581070,469788256,1763189868,404232300,0,473105920,1613784678,1717962264,393216,1015178848,1617716838,409364064,1667261958,1717986915,1712875110,1717986150,207630342,1572920,393312,6291504,1597440,0,3145728,0,404232192,2122219227,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,32382,1724081688,-1016699368,6,6684867,1579020,2013266046,-1059061658,404226096,1711304294,404252220,404252262,1852571750,1852184600,406748672,402679320,404253792,912682598,404226048,806905446,-600282004,1852184600,402685542,409363992,469788256,1799234668,404232300,0,2083982336,1613760102,1717962288,786432,1719797296,1617323622,409364064,2002807814,1717986931,1712875110,1717986150,204484620,786540,393312,6291504,1597440,0,3145728,0,404232192,2122219214,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,1717985304,-2130681832,6,409337985,3160076,402653438,-1067450266,404232288,1712848896,2122212972,1010565120,6700032,1010580540,1717993020,1717960806,27772,905969664]},{"sector":12,"data":[0,7077888,0,228864,0,469762144,912293484,204478572,6198,204934144,1614153222,1719012400,2115509276,1721632280,1617322086,409362528,1801481222,1717986939,1712873574,1714709350,204484620,1006633158,1010711676,2021408304,2115528252,1048329340,1719549542,1717986150,404232318,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,1715232828,-1660930024,62,409338041,1711279128,402653438,-1067450266,1010571312,1010580540,1616928876,404258430,1667635260,1717986918,1717993062,1717986918,1010592870,2084322364,1010580734,2021145660,2081192056,1010580540,1715371580,1717986918,134243964,207627264,204472376,6172,204937216,2083920902,1715211388,3152924,1723206668,2087084156,410935392,1801484294,1717986927,1712863334,1712876390,202911768,100663296,1717986918,409364094,1796761100,1717986918,1714446446,1717988198,202911750,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,32382,1013342310,-1325372392,13158,2117861541,1711279152,402660606,-563622810,1717960759,1717986918,1616928879,404250720,1945507864,1717986918,1718517350,1717986918,101084262,101058054,1717986843,404252262,1715345432,1717986918,1717993062,1717986918,134243942,406594560,204472431,2113961599,205199360,107349516,1044125798,6291456,1723209734,1617322086,409366140]},{"sector":13,"data":[1801481318,1719428711,1712856188,1008233318,202911768,100663296,1717985382,409364016,1796762636,1717986918,1714446448,1715235686,102260748,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,32382,2120678496,-1325373952,2122212966,402653349,1711306876,402660478,-1016109466,1717960943,1717986918,2088525948,404250720,2070288408,1717986918,1719565926,1013343846,101082726,101058054,1717985307,404252262,1717966872,1717986918,1718517350,1717986918,26214,906395136,204472422,6172,205205504,107349528,208541798,2117074944,2125856780,1617322086,409364064,1801481318,1717593699,1712850540,405564262,202125360,1040187392,2120638566,409364016,1796765708,1717986918,1714437216,1712876390,202911768,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,268467838,409362528,-1325373928,445502,402653369,1711276032,62,52114236,1717966875,1717986918,1616928876,404257916,1868961816,1717986918,1719041638,409364070,1044276838,1044266558,2122211455,404258430,1717966872,1717986918,1719041638,1717986918,26214,1829118976,204472422,6198,205205504,108987952,208023654,1572864,1721630744,1617323622,409364064,1667262054,1717593699,1712875110,409351782,202125360,1711276032,1617322086,409364016,1796762636,1717986918,1714423392,1715235686,404232240,2122219008,2122219134,2122219134]},{"sector":14,"data":[2122219134,2122219134,2122219134,2122219134,2122219134,268467838,2117886054,-1325386216,445440,169,1711276032,6,104018688,2122199059,2122219134,1616930412,404250720,1734744088,1717986918,1717993062,409364070,1717986940,1717986918,1616928984,404250720,1717966872,1717986918,1717993062,1717986918,469788262,1299981312,404226150,1835008,204693532,1711695456,409350246,793628,1719670832,1617716838,409364064,1667262054,1717593699,1712875110,409351740,201732192,1711276032,1617323622,409353776,1796761100,1717986918,1714423392,1013331516,404232288,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,409387068,-1660937192,419328,2113929381,1711276032,1572870,205481472,1717985311,1717986918,1616930412,404250720,1668028440,1717986918,1717993062,409364070,1717986912,1717986918,1616930520,404250720,1717966872,1717986918,1717993062,1013343846,469777510,102245376,404226107,786432,203317276,1007041662,943468604,396316,1719670880,2121809020,1013333600,1669228092,1012939875,1008221286,409351704,201732222,1040187392,1044266108,2120615472,1669228044,1048329318,1042185312,208025112,404232318,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,415497752,-2130704872,13182,129,2063597568,1835014,520342654,1717985283,1717986918,2122202223]},{"sector":15,"data":[1010597502,1668824124,1010580540,1014791740,406600764,1044278368,1044266558,1044266223,2122202686,1715240574,1010580540,1048346172,205405758,3196,1572864,806092800,786432,0,0,0,3072,8126464,0,0,0,201326592,0,0,1006648320,0,0,1536,12,106954752,0,402653184,1880624640,2122219008,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,2122219134,939556478,24,-1023384040,0,195,1610612736,393222,0,26112,0,6144,0,0,0,12615168,0,0,0,6144,0,0,0,12615168,402653184,6240,0,0,1572864,0,0,0,6144,0,0,0,0,100663296,0,0,0,65280,0,31744,120,106954752,0,-268435456,0,0,0,0,0,0,0,0,0,939524096,0,2113960960,0,126,-1073741824,3932166,0,15360,0,30720,0,0,0,0,0,0,0,30720,0,0,0,0,-268435456,2035544160,1835365491]},{"sector":16,"data":[279886,89260361,5606,2064389,10000,131072,0,65567,4196939,20447544,21037375,1057,262270,0,0,0,1079774762,1079836992,31396421,80146800,142676588,82702704,49156861,92205424,341381934,95416688,170464390,117961072,112334131,129298800,113969198,114028848,107350176,107475248,12257549,12382512,176359706,176484656,150473160,150597936,400427612,400552240,181799920,181924144,45354151,45478192,201592023,201716016,205917601,206041392,448138864,448262448,341512232,341635376,40833400,40956208,43258273,43381040,220860877,220918064,67637925,67760432,26219241,26275888,216535810,216592688,102110175,102232368,69211209,69333296,336139406,336261424,21239254,21360944,60167659,60289328,58987949,66453841,1229211395,16777216,1258684416,1162760773,50399052,704712348,828638001,19993857,469840177,824377649,-855376127,2367,-16580351,67043598,-1358348339,50399232,1442918975,847250189,17653249,-335465994,838729997,17686785,1070400511,50832150,812909313,17845505,-16379834,255839491,-855440803,22417215,205507843,-855440184,33820479,272616707,-855441139,28380991,-1140653822,85852962,-855376127,22484287,1778581764,613810985,52627459,-16571582,255839491,-855441408,135337535,121621763,16842785,67486979]},{"sector":17,"data":[1070400511,50331659,-1559543859,1070400258,50376715,1527463885,50399744,-1241313390,798753554,54168579,2097351545,146866954,51110913,1375797248,67043840,671693,1070400256,50351882,169083649,50980611,67984,-1274871549,143917833,17330691,1070400511,100694794,1014956801,53022979,-838792851,115868466,34738691,1070400511,50406147,-771276851,50399749,1073818459,798425360,19930627,1610821680,810025233,53492737,755052391,67043888,285687757,1070400261,84019221,807862529,19932161,1359163443,808059183,-855376127,8259903,553844994,646382384,-855376126,831,71290115,17170432,19940609,1107374137,808845616,17841409,-16698669,356502787,17170432,53030659,704850401,713032490,17825539,667546,-956104446,5767948,-855376127,44828223,-1375534845,779420454,86938115,1070400511,50422541,868301,1070400256,51641101,-905101363,1070400276,67186701,763495169,50748419,198293,67043863,772227021,1070400260,17023239,382337793,-855376126,142085183,104844547,17696405,53496323,1677931222,234160909,53532163,67309652,344916274,51678209,-603777903,463536959,53493505,-16704563,222285059,16979563,18293763,1560477782,67043598,-1945681971,16843267,-385676313,67044363,1845706701,1070400263,51837197,1745698765,1070400279,34225419,212009729,17594627,1070400511,604428566,33489408]}],[{"sector":1,"data":[-1575469107,1070399744,50375704,33490944,-1072152627,1070399744,16827928,-1239924787,1070399744,16822552,-1156038707,1070399744,16819992,-887603251,1070400256,100716056,67043584,1589197,100665600,1070400511,50331671,1914126285,1070400256,50368791,-1911078963,1070400258,50458903,1897349069,150995970,1070400511,50340889,-1474740275,1070400259,50689049,1209614285,1070400264,50925849,-115785779,1070400266,50442777,-149340211,1070400262,17545241,67043584,1654733,66048,-167766380,16712469,1226391501,1070399498,51725,-1979301939,66818,302003036,375521306,3642368,-16706065,104844544,16843347,102643456,1070399743,489742,-1072807987,1070399496,630030,51724237,1070399488,468494,-854704179,65798,-16704132,239062272,16845050,35790848,1070399743,35854,1225342925,65793,-16505295,473943296,-855638016,90643519,54512896,-855637871,14287679,-1040187132,924319787,3344384,-16697672,88067328,16845080,51784960,1070399743,70152,-788119603,1070399497,16777224,487194625,-855572733,160106047,322948352,-855637464,66459199,1811939585,16711976,344013,66048,402665648,16711998,621101005,66306,-1006620971,366542894,-855572732,206900543,222285056,-855635564,7743,507497728,16843591,104620800,1070399743,78878,-451788851,1070399491,17,-988790835,1070399488]},{"sector":2,"data":[16,1745895373,66825,-1610606736,401801239,1560576,-16705713,272616704,16842832,20801280,1070399743,33554452,1061027841,272534016,1070399743,749584,1276133325,1070399496,21519,1309097933,1070399494,83483,421150669,1070399492,26,1796882381,1070399492,27,-484818995,1070399490,227610,-652525619,1070399489,136219,-1340522547,1070399498,56861,-1239597107,100663296,1364197868,1167120524,518818645,-1957242738,-167049610,915080309,881525000,1418444851,441223948,100826243,2088968316,444532738,529259147,19286007,-1290832896,1347440641,1347440720,-401698736,-2090991598,-443874579,-900899553,-617480190,-2135751957,1167120524,518818645,1381226638,-1460895407,-11053568,1996428406,72476690,-637303,1996427382,71690254,-1191950711,1996423169,175570700,-401698736,1183395395,1958743026,302398220,-2146863872,1946221694,-196703457,-1913895287,-796075394,163168398,-205507840,10533035,-1996205336,58055238,-2147212567,1963064446,61335566,1988826740,-92369928,-393211413,149094729,-386380151,57999846,-1962677527,-13333545,1149972548,-297367244,-661899893,-1946369906,-812918146,1149975947,272992626,-1981921653,-2097116027,112722631,1586146048,31687164,1950649088,-1951677693,1406532,-1014256896,61571084,1782644699,-1410972021,-2085895541,346098375,1183558400,1183558648,-947672100,899102,-1425887061,1210369923,-947672149]},{"sector":3,"data":[-2085901564,-1414855481,-2002015317,1183517253,-947672080,-163149034,-196703317,-230257749,-397505621,-1705965853,65535,1457157771,-85455216,1958742802,-18343,1442906042,244338770,185398760,1447524562,244338768,185421032,1446738130,1455871,-169341296,1958742800,-1589867731,1166606372,244340242,186138600,-1592036160,1178271760,3187182,849412980,373655808,-401698730,-1073010220,-1125642891,244340226,855961064,-2145653824,-1954609051,283371086,-401698730,-1073020144,478929012,134367174,1583335051,-1962742397,1297948645,-1962929974,1049359942,-812973814,1032522723,-1959508677,-227198851,3848387,-1996304664,930406470,-401441084,-1048374401,-18776059,-517210997,1444344971,309788422,16777114,17611008,1360942614,16777114,-1705634304,65535,540927883,855864064,1183433673,-528577558,-617351629,1406284614,1391097599,-26026,-1940193280,-54423847,-654111349,-1834222713,737904555,821789657,-654058891,-947651701,-163149052,-364475477,-531723349,109560203,-1012203254,1183576459,-229733388,2106277003,1962871602,-1977775306,-1024041897,-164858623,208929986,1963115254,25421828,-1010224189,1195056523,990737774,141914191,39602166,-370415756,191397771,-1192921601,-119013256,-498693887,-1830222987,-1948742912,3711263,-1586215031,1200160826,939950966,377684480,-1962934214,1577780830,-1960676088,-1072960442,244325236,1965782504,41913108,-26025,1451819008,105285896]},{"sector":4,"data":[2122908643,317319400,-18710901,92996421,28957324,14608384,-402436610,1747784453,-1959758592,504269597,269912834,-162120960,243993461,1451950626,135694810,-11513599,-6677897,-1996488449,495707206,192038793,-1961200192,316926542,17440395,1200299915,17474360,-26031,-1070399488,11004099,495706484,36063223,-2144177152,1954610302,-1705617620,65535,915261747,-1098055407,508624720,1461080406,16777114,-1705568768,65535,1592149641,1958742879,-14840922,1452962423,-486539261,-389467371,-1957691336,1920466717,100506,-1072998400,-2132277899,-1954485504,-1898410793,478936256,1032570763,-1993193593,-947689403,-196703378,-230257749,200969131,1854587894,-2132442884,1347558539,276234065,-15829249,1996426358,142016266,-16353537,-1195175841,-919404287,1178128947,-1978501892,1737100871,-58818548,-1962511232,1468729423,-263812854,1398004531,244339281,-1992827672,-1072964026,333973108,-599357171,-431060029,1996426979,-25882,-1706033152,65535,1343117507,16777194,1343117312,16777194,-629764864,-402651713,1317732386,1359406052,16777114,-159973632,-8472,-655821706,-227082241,872403688,-48567872,195901180,1342600384,16777114,-243970304,674693059,-6664190,184549631,-661863488,-1957345904,-661774612,1443294339,106859351,2139103115,125569026,-605548912,855645745,108432320,1886713355,118895755,-125923844,-1951683669,-1073017276,1676150900,-129595124]},{"sector":5,"data":[1149979508,207153180,1962559113,10532928,277538896,201082505,-1959627584,507350008,-561251321,-218083143,-1962440283,1200224326,-96040178,-1994635383,-1962898801,-16742209,-16742265,244319862,-351345432,-126448375,-402652225,-947126454,-310157729,535137026,46812509,-1864856576,-326412987,1457032734,140413783,2139103115,125569026,937954960,855713585,142511040,1668611851,1317748107,2110327558,-2004024570,-2091615232,-938278407,8949049,-950976130,16812677,142016256,2011696784,242614030,-1961069057,881546805,1186531102,-1510736896,62911627,-19863552,-1962490749,1015744630,268977654,-397014924,1702890192,-1957040376,989890693,1605466049,49120094,1562371467,313933,1167120524,518818645,1465309326,184972939,-1961265930,-1937274084,-386364672,208931654,881580171,1065951115,9208969,-310157729,535137026,46812509,-1864856576,-326412987,1457032734,108432215,578090507,-1131727733,495648908,-1946157128,-1995185393,1459653772,330138,1304576,-402229505,1583286856,-1962742397,1297948645,-1962933558,186616798,-1962380069,139427871,-1007490288,1167120524,518818645,-326903666,861361692,108432320,309655051,1183399051,38636520,1946614147,150569761,971572084,175505153,309914,1958742784,-1063628559,-1962934268,38127420,-1070399482,-1947777400,1347815030,-1998057840,244340478,-1962062616,209488692,1166753163,-498693772,-1988737653,1552606278,31686920,-1948581120]},{"sector":6,"data":[2018142801,1783728387,184742784,108292689,-352261912,1552650293,678756138,-14256897,-689435553,-414285824,206867328,-1926603637,389624415,529205620,1603084171,-1946948760,394881109,-1988999797,2089543750,-12743910,645214285,-1707706881,966,1088900736,-1962865989,1060706940,529205620,1603084171,-1946948808,947751741,-1258340471,-1258356586,-1258356584,-57999206,-33137013,-11336881,1962872436,-1934295268,-414779904,-16550784,1190530164,57950439,-1961200385,-30713868,-337055791,1317756156,1361634280,320922,-495547648,1474592395,888399958,-6662569,1174405375,1459672963,887351382,798643799,-402653176,-2065105785,-58595076,1583284656,-1962742397,1297948645,-1962933558,478873206,9078727,-1873412095,203483150,-1962720002,-661863628,-1957345904,-661774612,29251414,704256,1594079464,49120094,1562371467,313933,1167120524,518818645,1996478606,108461832,-11485133,1996425846,381979404,-401698736,-310116420,535137026,147475805,-1864856576,-326412987,-2082959842,1465256684,-1090518338,1726480398,-1962380285,142443327,1594717187,49120094,1562371467,313933,-1946663287,2122911357,197145588,-1947962113,138775357,1358710409,267162,-1909726464,653298626,-922022773,537204853,1149838848,1150035466,-1873410548,22145038,41205771,1996428523,69573372,1996423168,113089272,-1070399488,-259285525,2106277003,1050300424,-16777207,916126838,-1962934263,-661915578]},{"sector":7,"data":[2139692939,-193033458,-350978167,-1864856361,-326412987,-1193767394,-617414656,-1962389877,1374160470,49120000,1562371467,313933,1167120524,518818645,45668494,173968128,-1962389877,770180694,49120000,1562371467,445005,1167120524,518818645,62445710,106859264,-768358093,-2097148952,-443874579,-900899553,1364393986,-997502894,244338710,-2080448792,-1933375292,1430622424,-1910575989,-1000909096,-947714434,198305810,-1961705085,245497,1593981160,49120094,1562371467,313933,1167120524,518818645,1465309326,108971260,1091282664,738124160,519867361,-1945733435,-205484336,1720328100,205949450,241601104,1343243914,-1978505590,-1974463418,1183454822,1996443672,477560602,-14780673,1996431478,381979426,-401698736,-410255495,-310157729,535137026,516574557,-1864856576,-326412987,-2082959842,1465254636,637959876,184698251,642479296,-486257269,93005381,997572619,105220902,863306152,795927031,872171145,1300899529,-1948125432,2098680,1962988163,572427034,337000706,-1962642432,1392647710,-1550167982,184549379,-385256000,346095763,-1870927104,-1705971573,2313,-1910604317,-1948873790,-973567025,-1510209930,-1515870811,-1409530229,-1070355541,-1414812757,-1414812757,-1378317395,-670305397,-661780876,-1510741551,1458735903,612250,1226752,181069904,-611567133,-661929074,-1070383221,309419,3711403,3842475,939951019,377684224,-1962934214,-1070355514,-1414812757]},{"sector":8,"data":[1583334283,-1962742397,1297948645,1442841802,531866,-339725568,-1864856343,-326412987,-2082959842,-1940451604,-1916760368,872214654,1183558592,-1411871984,-1425127797,839536266,-138179603,984545,-788475261,-774319638,-774319638,-785811990,-1409407784,-1978906998,1183558625,1183558406,2123213576,-1873340688,-22419442,49120095,1562371467,838221,-252985293,-1313093325,-1864856575,-326412987,1373146654,-1715457194,185228939,-1959496485,2135394847,863917962,142016502,1376155391,-1873390000,-10360818,393539595,-470004085,-14906606,1381107831,36321023,16777114,1590070016,-1962742397,1297948645,-1962932534,147031007,162981971,-661967645,1066127243,-1030825332,-1409499085,-1582578037,-1582628808,-2085945286,16791558,3806851,108446976,-628185869,-1072970869,-1864856381,-326412987,-1948742114,-620033442,529206900,-1962391925,1200031318,274171662,-1962742397,1297948645,-1946155318,1430622424,-1910575989,106859480,141875979,1200299915,274172686,-1962742397,1297948645,-1946156342,1430622424,-1910575989,149717976,176065367,1853161227,1586183563,-2017228024,-1996452195,-1020527522,-1946663287,-745863586,9477511,737828489,-162100781,1032521451,268979584,50876043,1300852813,105810792,-1988997885,468216397,-129594588,-1946790261,1959398344,239962895,141871371,1343124991,249817170,-16040565,1996473461,63891466,-1946401141,-2090861994,-443874579,-900899553,213450758,6601474,247006955]},{"sector":9,"data":[7125762,1167120524,518818645,1448335502,173968215,2139103115,125569026,244367755,858365672,-1950338094,-16053634,1032537716,-485994869,108432191,947189259,-1946394997,38898433,108297603,159984254,-1962774135,529207901,-485863541,-2145341182,1292386505,1954382600,1342862599,175570770,1512052968,595060824,-310157729,535137026,113921373,7125760,-1174138183,166399326,-1191156549,1455031296,-1864856563,-326412987,1406701086,-1957210542,529206878,134381440,-1047853188,216534672,242649897,880080395,-1959490730,9174110,1342337163,-15960321,244320886,-1960882200,1996443896,108461832,1105727120,-1085253857,2089222150,1459555842,41716218,-310157729,535137026,181030237,-1864856576,-326412987,-2082959842,861275372,-2147435840,185235083,-1961265930,-95515340,-14001013,1962879092,142016294,369522431,73400145,49120094,1562371467,445005,1167120524,518818645,-326903666,-1957210618,529205854,134381440,244320124,19422696,4242178,12238899,175541120,645199371,2089497739,1962871572,-1958900969,-108853171,1074623746,-1992274805,1284241486,-95516350,-386120055,1583284304,-1962742397,1297948645,-1946155318,1430622424,-1910575989,116163544,1586190166,-2145416438,2080899711,-401698809,34154490,12238899,172919680,1153108963,-1983892736,233372742,-2090967296,-443874579,-900899553,1988820998,-399209718,-24443129,1552677635,678756138,-14256897,1996425334,-11067898]},{"sector":10,"data":[2122515551,510918908,1312361867,-1962379784,1312358989,1343190266,175570770,-1877707521,53667854,-544516006,-2028714105,-219670953,-661863674,-1957345904,-661774612,1586190166,-2145416440,2080899711,-401698809,19736426,1988870195,1962281736,-1959490759,-1073017276,1183519093,1958742790,32827433,1149838452,1342958350,-402229505,-1073009725,1962873972,-1900740850,-1867186432,204466176,-402098433,1583284512,-1962742397,1297948645,-1946155830,1430622424,-1910575989,-1957210408,881526902,9215115,1032535947,108461907,-1960083736,-1962898276,-398489313,1996486317,14870536,-310157729,535137026,80366941,-1157517056,-1934293839,28380907,-352053574,-1174097659,246744085,1167120524,518818645,1364318350,1996445526,142016262,-16091393,-41939850,-1958120308,529206878,134381440,-1031075972,-1662513520,-1950338266,-167047562,881555316,-1962933575,856102652,584509659,1141620787,-1961265906,529206364,2013220944,175636232,-890761584,1958742827,239372617,1461124235,187370216,-1959037760,-60912648,-544810190,-1961986421,-1979675852,-315426226,1364676688,-1477964144,1958742825,242679567,-2147474456,1972173950,-169875453,-1705512821,2383,-997996917,-2090967288,-443874579,-900899553,-1957363702,-1957210388,881525878,-31687541,-1070398643,1947091979,112915,1344042239,9221375,-401698735,183183698,-14912257,-402617164,1174284887,-1994552573,-1073009572,1962870388,5105692,-443851169,180829]},{"sector":11,"data":[1167120524,518818645,1465309326,1988870195,1962281738,1446284067,-2094238581,2126777542,-1515848698,-276585051,-617390584,-402652487,1962877676,911388,-310157729,535137026,113921373,-326413056,-1962647925,243743,503873411,1200292991,-443858934,180829,-1947169962,142081820,-486263832,1448103943,1479133928,-1010824354,1167120524,518818645,1183570062,-2562042,-1962742397,1297948645,1426064074,-1957237621,881525878,1593104616,-1034033781,311820290,312152710,312611406,-661908817,-1957345904,-661774612,1586190166,197145350,-1961397029,41257791,460912139,-24966028,50822409,-1795215626,1583288836,-1962742397,1297948645,1073742538,507244779,779354132,2106323851,-325429496,-486539254,-1898411228,529213122,697980755,1526726667,-619986893,-1705570443,2929,284990038,28835840,2105787136,175440648,242614099,1210522,484989696,1407707908,16777114,-1705786624,4734,-696991733,1405337651,870846096,-661863436,-1957345904,-661774612,1443163267,140413783,2139103115,125569026,1139281552,855715108,108956608,561315595,1602952587,-1867518,83592063,-1930886283,100369152,192244863,1460172543,-1847062896,-1956647940,-167049098,881588084,-75242543,-2095090684,1634861819,276334419,1996425845,-401698808,1206585068,-1878493441,412280846,1996439019,719869704,1958742789,545032997,57999115,-1996272130,-125099964,-1962719746,180847421,-1959756663,1149699654,1975520020]},{"sector":12,"data":[1583300609,-1962742397,1297948645,1526727882,-947142645,2022172533,-339725552,-1983892507,1586231878,-473199864,-165704720,1946224711,209161192,1149908107,207915534,1044067723,292814868,-1995417717,2089024086,91488266,1963740219,-1946645564,1988692084,1536841468,-486539246,-1748857164,185961254,638481874,-2130152053,1946223102,1961900814,-59310326,1207194,110291712,-768360397,-470135157,-1705946862,5055,1364218457,1302938,123361280,306546982,341149990,-1962385781,1405104927,-1934098682,642797568,637695487,-402360833,1527195793,-1954646135,2139686518,675777574,-1961330809,549618647,173377830,205884454,-166986101,881528180,-1710721793,5117,-1962259201,881526390,-1962261249,1149831238,1458604812,-1310191984,1347573275,669519504,244340474,1444652776,244338770,1459256552,-1946383384,-19797561,-1313093325,-1864856575,-326412987,1457032734,108956503,-1070385781,-2096997237,276039419,1946680195,150700811,-1125579148,13035776,9145011,-1992230941,57952256,-33512983,1962869573,334797328,1149829120,676628774,-150438773,1946157511,408718142,1207902091,142081802,1364634,-1904614656,-1948742718,2098632,172460326,207063334,-2027533177,1149970516,335952664,855930112,651310025,638734217,-1156294775,-940113918,745865344,-1708886785,65535,-1993063287,-1960954284,-1948610856,1334521671,67630641,-1023212427,1200212483,760187179,572191,-31819637,1032520517]},{"sector":13,"data":[-1010891986,712542485,-327595189,99287472,855854590,-2090967104,-443874579,-900899553,-1073020926,-1991708812,-1411840,1352279156,-16777196,-1885728652,-167772139,1946224708,408718096,1342119819,142081802,1415066,55442944,-1962932037,1308498552,2034977539,11135990,167772160,2560,-18176,-218316749,1239021486,-1864856381,-326412987,-388461026,-310116377,535137026,-1949610659,-352180714,378245125,1499136548,378210283,-1940192732,1347573961,401232721,-1962934267,-352180714,-326412819,35534591,-16353537,-677772170,-1962934262,79846885,-1864856576,-326412987,-2585058,-16638410,1996425334,371431942,-310181888,535137026,80366941,1364414464,-1709308334,65535,1532582407,-661863592,-1957345904,-661774612,106058067,374905374,1510408192,-310158503,535137026,1355500893,106058067,-26082,1510408192,-1017619623,1167120524,518818645,1364449422,-1709308334,5770,1532582407,-1962742397,1297948645,200510411,-1961986826,-1959490602,-1533390284,-352321518,-661863442,-1957345904,-661774612,-1070377130,185235083,1444181238,-1946500376,214336308,-66683196,-1515870811,1593835960,49120094,1562371467,445005,1167120524,518818645,-1070344050,184966795,-1962511141,-1937274081,49120000,1562371467,182861,1167120524,518818645,12114062,674692880,194662402,-486539242,-1013297143,-1207959530,-310181887,535137026,-1932833443,1430622424,-1910575989,106874072,38243110]},{"sector":14,"data":[1468606105,49120004,1562371467,313933,1167120524,518818645,-1000941426,1992624734,637831942,1149961985,1192306178,71600898,71766310,49120094,1562371467,576077,1167120524,518818645,-1000941426,1992624734,637831942,1149962025,1192830466,71600898,71768358,49120094,1562371467,576077,1167120524,518818645,1589958798,668018182,39309606,72864038,-1962742397,1297948645,-1946155830,1430622424,-1910575989,650720216,-1006350455,1183517790,2109737738,140441355,-150319591,-772339106,184960651,-150635072,-772340130,-150452597,-1993996698,1468605959,172395266,637953783,637683457,184833809,857044169,1610032841,1610032644,1327048194,536290820,38738214,-1962742397,1297948645,1426066122,-326898549,-1957210588,881526390,-1962115957,272993085,1049346059,930349110,-1962654581,529204318,-2096607349,1317602025,-1949070370,1962871615,991791907,-210435513,199118475,-1961855543,1329283148,-1947962106,1329283660,-1948486392,21948871,8686731,-1946792311,-1996454260,1284241486,-263288512,-1992143733,1284239950,-1930261718,-1916694831,-2080577410,-1515910970,-293362267,872057616,-28931648,-2080749943,1963133052,239373137,1358841481,1372570,-364476160,-1897113975,198740930,-385649200,537198829,1200170496,1200367114,108432140,1149973643,676104998,17319158,1392906356,-1047603061,306678566,340757286,-1993996453,-1993993657,2123174991,-50468632,-1962510709,710708020,855638712]},{"sector":15,"data":[678756297,1344697599,1364285206,-493825,1610610294,1975520036,84667138,-397410294,-1072956292,1844118389,-661958512,-1962719234,710707975,168153227,178432,678756178,1361474815,1344165654,-493825,1610610294,190536228,-1962576448,-1876038669,-1962654581,-225769908,-1962639733,38046013,-1962652535,1149890630,-230257914,-1995946871,-880018850,478748039,-645138893,184766462,1443263734,1523610,-57939968,201213579,-16223040,-1382351242,-1962934251,1583348294,-1034033781,-661913596,-1957345904,-661774612,1444605059,106859351,2005606283,-1959490804,-1073016252,3423883,1702163339,-1995278453,881584246,-1962359165,2123170388,-1898935060,702912,-1918569476,-141822338,-1414807501,866894475,45722560,108461824,-397322730,1183520975,-163173382,-654900615,-1947318647,881526390,-1962652533,529262686,-1947318645,1962871615,991791889,-210435505,1963345723,-372798482,-1070399290,-1947580791,28977756,-1916194048,1962929278,645201704,1364661842,-11447983,-1073011617,-1813445771,656640,-80811952,58048523,1342211561,1207883915,-402158845,1988885359,87329542,28901386,710707968,-14125825,374417012,508567127,610271056,1543209192,91602955,1139536779,-362903152,1149968267,38242564,-1996077941,1183515719,105351662,-1962115957,-11513027,1979656309,-401698774,-1990520244,2123040839,-1959425046,529262686,1065865099,-164414327,-18194805,-167050417,-1705638284,6641,199902859]},{"sector":16,"data":[-1959693120,881526390,186539147,-33327909,1149829967,-17265890,495649605,-1996073077,-1962901356,-1802958761,-1014824830,777816330,-553098112,-310157729,535137026,46812509,-1864856576,-326412987,-1948742114,-620033442,529207412,-1962391925,-2021194154,-1752760188,-310181754,535137026,113921373,-1864856576,-326412987,1457032734,108956503,930414347,1435188619,2027031298,49972014,495659381,208984843,17006464,529210739,-253026421,-1326965365,-1983892486,1583300613,-1962742397,1297948645,855638730,1441786816,-326898549,-1957275896,931858526,-1995815797,-1072956346,1183534196,239337732,-1961737215,1140917830,272892172,-947650933,-1960187116,46629637,-2080881015,1183515335,-29032188,16959363,1183579717,-129040392,141869067,-1962752125,-336918970,-244085,-1072956338,28888437,-1956684288,113401317,-1873273344,-326412987,-2082959842,1448547052,16271047,176063232,-1957202944,1200294494,-62486262,1249165323,-964430965,-2093356268,2089484998,1183428094,1183428080,1338477556,611631115,1183427919,1183428078,-297366030,1996443670,108461832,1223167632,1958742784,-129579044,183173121,-244085,-1072956338,1183563125,-2090901768,-443874579,-900899553,1478361094,-1957345904,-661774612,-16091393,1996425334,-401698810,-310116505,535137026,113921373,-1873273344,-326412987,1457032734,637951684,1589917579,926492170,958800767,494797943,38243110,637951684,2080524089,173982736,105351974]},{"sector":17,"data":[637951684,2080524089,-339727612,112643,49120094,1562371467,576077,1167087646,518818645,1448597646,637951684,-1006483573,958794334,58655303,637951684,-1006483573,-1993994658,1589903943,931866118,638213828,-29671541,-947190658,-963968277,638475972,1589905289,1200301574,173982726,105330982,1589904254,1200301574,241091590,105351462,637951684,-1006352501,958794334,58590279,637951684,-1006352501,-1993994658,-1960442809,1194927623,638221828,637683595,2131117881,241091606,-1993949141,-1993996729,-1993997241,-1993997753,-1207702777,1599995905,-1962742397,1297948645,-1946153782,1430622424,-1910575989,250381272,-661891242,-1944815931,-1916563757,-1515850114,-661740123,-1961199989,-1073018300,1183403636,309490,18368247,-150833920,-263812648,-150184252,137286,1946355061,-2096567544,1325339846,-12850190,545059406,35145463,-1960413952,443976702,-1961572733,98619652,-268238842,-210372805,384561195,-310157729,535137026,382356829,-788231424,394720,1418457091,-129594622,41799739,1150013579,-61961468,41730363,-801390197,-1993954947,-1993997737,-24443321,-1962489981,-1981230844,1190655046,1962934552,-523155449,-133963567,-1016277,58586190,67075305,361492606,1005995659,-1962770480,38112208,1006259851,-1962771263,2110798785,1200170714,394864132,1996444422,142016266,-16353537,-1073016738,1743324021,207537407,-1957316117,1122796524,1187468887,-956301060,64070]}],[{"sector":1,"data":[12863175,-1102657792,1187446784,721421302,-230258240,972048009,58005574,-1962763799,529209438,134381443,582487164,244338697,-384358936,-1192754558,408849398,1156986763,91554056,-352321096,-1983894782,1150153798,-398030532,-1947574644,1183389254,340167630,-1949284727,1174607430,-767129326,51660427,1183387718,75400148,-15764480,1183651958,-1202710834,-397410302,1183519571,-834262062,201213577,-1961722432,1183436358,-767128638,-1949415799,1183433286,-733574190,-1982839253,-1072957370,1183519357,-1035564592,-1982577013,1183567942,-733574718,-1995553141,-1072964026,-2098658443,-1948742911,-62486265,-1995684213,1183569478,-666466038,294531,-823590027,205949696,-1995291133,1183570502,273023754,1406944905,383141517,178256,315484240,16678531,1183517053,-700055278,-2082847231,2097215614,273058569,30950913,1183571014,-632931882,1183387517,-632910910,-1948891511,1183433286,-666465318,2111587897,-1035564785,-1982052725,1183569990,-599356990,735856267,1317787718,-800183340,276152635,735725195,1317787206,-833737774,1131725115,-2095548673,-1923741460,-57946506,369280899,521543175,-1515870811,1996447263,149717774,-696873642,-947651445,521543170,-1515870811,1996447263,108461832,16777114,-532248320,-1962871831,1178193478,-2147189290,-1946225050,1178193990,-2147189288,-1946290586,1200356446,676825894,-1980742007,2139157078,108331390,25132928,28837236,721611520,-1002010176,25066624]},{"sector":2,"data":[2088765045,91488639,-352321096,-1983894782,2122563142,276037828,209043467,100419211,1183383612,-362902296,-151232885,1963001927,112645,-1070923029,-2080749943,1946219646,1958742806,-60912878,958022795,125049415,14698183,-1956910336,1418405444,-330921688,-2081532279,1962996862,-92372204,-1962380288,1200356446,-2096501974,1962984574,709135346,-1947842935,1451951686,-498693880,-1812855,1996434548,-834236938,-4698090,-17665,1183666258,-1924131130,1343669830,-401698730,1860762661,-532247564,-443850914,1491549,1167087646,518818645,-326903666,-1957275898,1589905014,2139301384,494141464,273124134,138881830,-1996029146,-1960379322,52826695,723911239,1183386183,140428538,641698598,640186367,1462138879,41418534,746061606,712507174,-231681,-1960379786,-953482169,1200301648,1194010118,-14266366,-14279049,1149967479,642784816,639924223,639793151,-14655605,140428319,440895782,1577058744,49120095,1562371467,707149,1167087646,518818645,1586223246,-2095084782,2080899711,102610955,-401698736,569054174,-15567105,1996427382,209125134,722106111,1347440832,-16222465,28837494,1374179328,49120252,1562371467,969293,1167087646,518818645,1996478606,376897304,-15436033,1996427894,242679568,-15960321,1996425846,108461832,1342177720,-2080630808,-443874579,-900899553,1478361108,-1957345904,-661774612,1461513347,-263796906,2122514432,57999388,-2097076247]},{"sector":3,"data":[1962939006,18802947,-1961075061,41911071,-1207141368,-1873802461,322758670,-1962865943,1183390278,407276530,-1946925431,1174608454,-163149546,51922571,1183388742,273058808,-1947711863,1183387206,273058794,-1995684349,1183575110,172360462,-1161591,1183652982,-1202710798,-397410302,1996427123,-398029550,45633558,1692946432,-163149041,-1980611029,1183573574,-196727816,-1947974007,1177283654,-62486040,737035915,1183443526,1958743034,-58817774,-2096335872,1946216062,-461470970,-955812608,127046,1183542507,-431605252,1183526517,-465159686,1996433013,-227082468,-755969,1996482166,309788644,-1542401,1996483190,108461832,-397361109,871103232,-2095286529,1988954348,385649650,521543175,-1515870811,309788447,-1928795005,-57939850,-1524689378,530949541,-16222465,362415734,-1996488671,1183576134,-2090901776,-443874579,-900899553,1478361112,-1957345904,-661774612,1445522563,1080963,-1070922379,-2097056023,1962935934,112646,-1962841367,529207390,134381443,565709948,244338693,-384701976,1586168147,-164132080,1950353476,244339466,184999912,-1950124864,1418409028,-96040650,-990095735,-1977157026,1006838791,642479361,639846283,1965377291,207391553,1200299915,-599357150,-1961468789,373787167,-136690040,1073798214,54266484,1190535285,443876060,-15698177,1996426870,175570700,-16222465,-6683018,-385875713,82313435,138841073,-1995811189,1451878470,105286634,-1947449719]},{"sector":4,"data":[1183387206,205949934,-1030519,1183649910,-1202710802,-397410303,1552616899,-1960867060,-789110201,590503051,1183387463,-666437672,108273152,17384694,1187462516,-956301070,62534,-1960026997,1183387719,306678774,1408779913,1342178232,384976525,-18352,1392508858,-532247216,1183666198,1448089312,1659375248,-15668232,1996427382,-532247080,-6664170,-2097151745,1946175612,678756146,-14256897,1996426870,1354771212,175570768,-1962379521,-654899642,913637200,-1925942017,1344158788,506610827,710708048,-400007169,-1863716767,-310157570,535137026,214584669,-1873273344,-326412987,1457032734,-16353653,1962879092,140428326,242745126,276299558,-15829249,-14283658,-14284169,-14284681,1962871927,880082742,507266189,843352912,1552633886,677379882,1577058744,-1962742397,1297948645,503319242,1430622296,-1910575989,209125336,-16091393,1996425334,1354771206,-2097138712,-443874579,-900899553,1478361096,-1957345904,-661774612,-15960321,1996425846,108461832,1342177720,-2097148952,-443874579,-900899553,-1957363704,686588908,2122536535,108331020,-375799765,1586168186,-164132084,1950353476,244339466,184862696,-1947896640,1418409028,-62486218,-989964663,-1977156514,1006838791,642282753,639846283,1965377291,207391550,1200299915,-364476126,-1961468789,373787167,-136558968,1073801798,54266484,1190534517,393544426,-15960321,1996425846,108461832,-1710983425,65535,-1962867223]},{"sector":5,"data":[1552626300,-1960867060,-789110201,-1995487965,-11085242,1996425846,108461832,-1878755585,15263758,-1980479863,2122577494,712245254,14305015,-1962511358,-348125626,-1983894782,1190656070,1946419418,1208322826,-775804007,721611768,-96040512,1187449579,-956301064,64070,1183432747,-532248094,-1980479861,-1072962490,1183517044,-96074760,-1947974143,1183446598,-532247578,2112112185,112645,-1070923029,-1947056503,1178198598,-1207599642,48955393,1183432747,209125360,383796877,178256,-401698736,1183517364,-498717722,198723209,-1962508864,1177281094,-398030362,15761027,-654899852,-1947711863,1177281606,-666465824,108904459,736118411,1183441990,-226589714,-150637568,-297367080,736646795,-297366592,-443850914,705117,1167087646,518818645,-326903666,-1957275888,1149963894,911510324,-1980217719,2089548374,142508850,-1955761152,1183402052,1958743026,108954380,-1962511104,1183403076,-401698564,1962929588,645201704,1347469355,1996443728,175570700,-150452597,1996443864,-126418950,507266189,516393808,710708048,-1993842689,1451881542,-401698570,2122575278,208929010,425603,1183516277,1279560188,-1946925429,82572886,-1070918261,-310157474,535137026,181030237,-1873273344,-326412987,-2585058,1996425334,313124870,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,16533191,176063232,-15371264,1996425846,108461832,-866072,1290275446,-62486040,-2080618869]},{"sector":6,"data":[-443874579,-900899553,1478361094,-1957345904,-661774612,1443949699,16533191,176063232,-1957727232,931859038,-1995553653,-1072959418,-1070907276,-1980479863,1183576646,-163149560,-1996077429,-1923876794,1343681094,1342177976,-16151832,1183576182,-230282250,-129594544,1358186027,1726484112,175570943,-1981332504,1183579206,-310157572,535137026,113921373,-1873273344,-326412987,-2082959842,-950663444,64070,687747,1586176372,-13137142,-16741196,1996425334,-233838586,-401967361,1996482529,-419764214,-1946532215,-2090927546,-443874579,-900899553,1478361094,-1957345904,-661774612,1443687555,16271047,176063232,-1959889920,931859038,-1995946357,1183577158,-163149562,-196702893,28856342,-588754944,745864968,385107597,-401698736,1183445531,-129594376,49120094,1562371467,445005,1167087646,518818645,-326903666,-950642910,63558,687747,-1360460939,173968128,1183385483,-1948742676,931863647,-1962522997,1465256022,-1947304307,503781104,-1515857266,1595909541,175570782,384714381,178256,141158480,-1995815797,-1072956346,-24416908,-350959741,-2096788644,1183384263,-2096788502,1183384263,-2096788512,1183384263,-364475420,199905023,-12946240,93055566,-1996306557,93052486,-1996306557,1183572550,-498714130,1183570814,-565822990,1183568765,-465159696,1183566718,-532268556,1187496829,-352321032,-62485750,201084671,-1952811584,1600059462,-1962742397,1297948645,503318218,1430622296]},{"sector":7,"data":[-1910575989,183272408,1187468887,-2097151748,1946159230,108954429,-1959300096,931858526,-1962516853,-62470337,1149960193,-96040696,-351779525,-96040170,200953599,-1961659200,516326342,-947662965,1958820638,-62470168,1183514624,-2090901764,-443874579,-900899553,1478361092,-1957345904,-661774612,1462168707,106859350,1149974411,106203908,-1980348791,1150023766,-565802652,-1989786485,1150016582,-465139348,-1989262197,1150017606,-263812842,529258635,-1962653813,1183385175,-396981786,20463235,-2096663296,80446,-6682764,-352321281,973537259,-1808335103,757570051,1183383552,-940012566,60486,1166760171,240487180,1978160697,-431605433,1166754421,-565823228,1166752373,-599377658,1166750325,-465159928,1166748277,-532268790,93004405,956454283,410384470,1979074105,272993043,-1948105079,1183388229,-96024580,1122697217,-15349885,748809286,-330942207,1996464242,1996445190,-159973384,-2197761,1996479606,-529072156,-1018113,1996482678,-361299994,383927949,-62485168,-6664170,-1996488449,2122578502,2138308858,-1696434433,5424,-1980610935,-1039403946,1187448693,-352321286,612139878,-16223232,60433524,-2097151974,1946165884,578092808,2972826,-498693376,-1960557431,1452012102,876906996,-1959373687,1149893702,-6664158,-1996488449,1589916228,1200301810,1468737071,1200170545,1468605995,133572141,-1962117884,650284227,640370433,-2144512239,-4257692,-1711041482,65535]},{"sector":8,"data":[20594307,-16157184,-1593755122,48955706,1183563819,-2090901766,-443874579,-900899553,-661913598,-1957345904,-661774612,-1962516853,2044398539,-1948518654,-936179130,41533451,1452005623,197800712,-150832686,-1964836902,66834891,13796291,-653597743,443798331,-1072958473,-922020744,-654900615,-2097151558,-443874579,-900899553,-768409594,192937912,-135497271,1441328080,-326898549,-1957210622,881525878,-1962115957,675646269,-1946270071,1284188765,1397772652,1978142352,1683786751,1348881547,244339537,-1711314968,-1037319629,1150015627,-1036805778,-1019493845,-1014297476,-1037319629,-345095031,1183551540,1850510334,1361730955,244338771,-1946208280,1284203612,1364414566,703073936,-1036805633,-661929429,-1720957813,-1036794997,1149878827,-1956749460,46292453,291825664,-1070399232,184966795,-1961986853,712477471,-14125057,1560225399,1206436620,856096785,308186048,594860811,2005606283,-3591382,2013210743,1996443942,242679568,-15960321,1996425846,108461832,-1022337793,-1191063877,121307156,-1014823308,1106764292,-1864856373,-326412987,1457032734,142525527,-955531124,-521643404,-11448346,1996425846,-1705572856,65535,-1950183847,1065363160,1092711738,-1946230400,-1931400228,-1950314800,-975532804,-1527576458,-2010719602,-57934259,99349387,-1962377532,105810932,1460013539,313754,101182208,-26025,-427098112,-310157729,535137026,113921373,277407744,1586168064,-2084556026,108204027]},{"sector":9,"data":[-2020877565,-1933377514,1430622424,-1910575989,-2084555816,2003175038,140413715,208984843,1602953099,52398860,126551646,-1962742397,1297948645,-1325398838,-919422207,1167120524,518818645,1448204430,-1950338217,-620032418,529227124,1200354867,2147427586,1962935357,142576460,419797591,1138950144,-628166517,1150016307,139233806,-503845582,1317742448,1992375050,-1950250238,-1948742712,544509399,-167346492,1963064390,-1929935095,-1899983144,-201586594,1391692708,2947994,868649728,-2090967086,-443874579,-900899553,1420886026,-1151815237,-1313129295,2092022650,-1149980229,-1313128783,1622260600,-1150242373,-1313108303,1689369476,-1150504517,-661889871,-1957345904,-661774612,-1952858061,-620034466,529206132,-654054094,1468729227,49120002,1562371467,182861,1167120524,518818645,1586223246,-2145416438,2080899711,-401698809,34866826,185228939,-1961986853,138840863,-2029627765,1468488775,49120094,1562371467,445005,1167120524,518818645,1586223246,-1960867062,1451952198,1548191494,-2090969209,-443874579,-900899553,-661913594,-1957345904,-661774612,140413778,2139103115,125569026,244367755,856043240,140413888,242539275,-315482229,66866826,105286617,-310179961,535137026,80366941,17086720,-1158988622,-1308555591,-1179391110,2092040455,45722859,-348212735,17152421,-1628735310,728259979,1569284189,1784515384,-1990042325,-2134689187,-1946257819,1563651165,-1962117788,1563651677,-2147191450]},{"sector":10,"data":[-1023314355,1167120524,518818645,1465309326,-1962385781,41910303,-1878557688,93906958,2123038979,859671304,105810880,-108835613,-1958250744,1951238105,141871931,537415040,1074285952,133923665,58469503,-1929379141,1258433590,1972056436,-2093708532,-472831802,-472783919,-1985088765,-1985125307,-1985124795,-1985123259,-396857787,1583349617,-1962742397,1297948645,1124074698,-1989911159,1569285725,1851623788,263839979,6339074,297338603,7387650,1167120524,518818645,1465047182,-1962254709,41910303,-1962443768,-401698623,2123039999,-1958900982,25951326,-1962392063,1442906689,1895531270,1642791797,-1944196208,1430622424,-1910575989,1586190296,-2145416438,2080899711,-401698809,34276542,185237131,-1961790209,138840893,-1956625017,1434912342,-20649886,49120095,1562371467,445005,1167120524,518818645,-1957177202,529205854,134381440,244320124,218398184,176065282,-797638901,1317748107,-2017359096,-1929154491,1300824206,105810792,1434964363,-1869806734,1783466240,907717611,911226421,-1816512917,-1174148300,-661900363,-1957345904,-661774612,-1070377130,185366155,-1961855754,142525492,-1157214581,-755040255,1593835960,49120094,1562371467,576077,-348949830,880720387,1167120524,518818645,1465309326,-1962117493,142525492,856051339,1607663579,49120094,1562371467,576077,-348881222,863156739,1458342741,175541079,2126787723,72256262,-754984141,-443851169,574045,1167120524]},{"sector":11,"data":[518818645,166254734,49120000,1562371467,-2071213235,-2079653732,963903646,887641937,866105856,-1962933064,-486498676,1398497032,-12105897,-1956945966,-486499188,652410645,-134005293,871920971,-752434231,1274544933,-919343755,-388877373,1450508782,721783590,963665988,-1955828489,-1948611608,-120495036,-751578997,-654900615,331678617,-1960939309,-67672996,326945035,1885881347,1313778448,1963049462,80118531,-138165534,93005529,1685389136,-9669377,1962893428,20441192,-1960387605,1615080197,1828141424,-1947694228,1682213850,-796133167,41538355,60414199,1892881349,1683786526,-921961481,1141052284,-1424986000,-1040822706,-2096925439,-1025375034,651818947,-11532917,1962894452,1618280300,-395283201,-605355807,1167120524,518818645,166254734,49120000,1562371467,-2071213235,-2079653732,192151710,115890001,866826752,-1157697047,266928127,643200257,1143670155,-147230616,-393517972,1150016139,-1946627732,2043884496,-1713834238,-753679101,1552621168,201062252,51608777,275800132,-162640213,57999809,-503003517,-638073918,1342540582,-9669377,1962894452,1618280296,-352298776,93005531,1886405675,1684862777,-628365173,-781433717,869305336,-150832685,-989619752,510710547,-143893365,2093550587,1615069971,1319833712,29488718,-964492427,-1010638332,-1960388105,1962889221,1685389164,-9407233,48783476,1440475904,1448209547,1996424791,142016262,-1878362369,-131667954,729076235]},{"sector":12,"data":[209125200,-16222465,244320886,1542984680,393531915,-1962652021,2026910675,63122182,50785217,721580225,118124739,-1957077409,180510181,-226387712,-1031045120,-638063125,29086259,-809487616,24528118,-628344203,-661733325,922745432,922681346,244056064,113704962,899547136,1457164027,190177745,1573978075,869960798,-86470976,1679,132751,-1009086725,-315402920,1150016267,979143480,-2077551500,74514574,183681,9477163,-847182735,-1036845055,-634142165,-1959863765,1563608726,19325695,1191997445,486614599,1195838064,-389811998,-269811624,-352300056,83961585,1195838576,1897726246,-498645238,1038664688,-386929920,-236257224,1896153382,642205452,175119617,-253606073,2287811,501805035,653388544,208733441,19285831,1191866653,-1007623609,-352319512,190703,12251627,1241610624,-1021998810,529149531,1989017394,67013380,1272941563,-1898869685,-1523122751,1610392886,49120094,1562371467,-874280115,1167120524,518818645,1465309326,-1945745781,-1916629286,-1191037890,-218365926,-2032628817,-1946209541,-1948580909,-947715970,964900357,-483822592,838809102,1461080656,16777114,906816256,1380987391,-6662378,1593835775,49120094,1562371467,182861,-269762509,-1960442021,105071367,-1957345965,1465261804,-1030825332,36978317,-67102023,-661934094,-13436026,-620506229,-1929347445,-208992899,3769142,283329140,838809171,1461080656,3601818,250305280]},{"sector":13,"data":[838809171,1461080656,3605402,1499093760,-1962742397,1297948645,-1961260234,41911071,1359508488,39619922,-1946219543,-873362438,-622084045,-1960442021,-1940433401,-1916629286,-1191037890,-218365926,-2032628817,-1946209541,-1915026477,-208992642,3769142,249766516,1345453878,-1705568686,14169,-13234965,374493233,929667671,1552744448,-21567230,-152321997,1167120524,518818645,-326903666,-1957210618,2123042934,240552716,-1995815285,1183579206,-96040696,1183432755,106859512,3203969,-203904,377289806,-882771,679279182,612107323,1178997887,390017,1325339371,-13927174,-695731130,1246365163,-1375975681,-209594745,166395914,1191171719,99844602,-1900052480,-1200357374,-129564757,1183560427,-2090967048,-443874579,-900899553,-661913588,-1957345904,-661774612,1444211843,209095511,-787856245,-62486048,-964442485,-260667110,-1996483067,1988883526,172264202,1183441105,-2084140038,1988696774,1443310,519194249,243174151,-654850165,-1425487997,-1414807501,-1985238101,2122971262,-364475914,-2130157941,-788516637,114000363,-329348864,-1946913141,1586229886,-363951124,-667696757,745849635,1946158249,-95122666,-234626351,-1031547253,-262764282,44648006,-1961790464,-489555371,-678692349,-1996045693,1195896406,871128713,-61931575,-2018699908,-95485961,70985340,327099004,-243251642,-15537404,696056398,-2013509889,1325788158,-62455985,-2130802771,149619441,1191181959,82936058]},{"sector":14,"data":[-1980467575,1317663358,-827850774,243174146,50873739,1166669382,-2090967288,-443874579,-900899553,-1070399478,1988882411,-1962677264,2123099766,71666166,1946305849,113738589,-1946532725,62915528,105266119,-1047799689,2123081203,-1958286346,1166669438,38091012,-947701644,-260666618,-1947312501,1334573636,63998970,64029650,1003946961,-1502149034,1347900246,142016337,-135786864,116360189,158711819,-385596021,-471269239,-1962571266,-147064714,70986612,-930398603,990010763,880084060,-1962650229,113673182,-217659517,-1994033753,2123039831,172883726,-336038261,241077060,-1996335989,-4583849,207063423,1468652279,307726608,-1980334453,-141821826,-788084861,-1980234784,-544475522,-1961984373,1161559623,-1996259824,1149964357,205863686,1166607229,71600908,2115126587,306546947,-1962260993,1166669438,-27989758,1167120524,518818645,-326903666,861361668,172919744,1988827363,1962281740,108954385,1443789829,-401967361,-397016857,-991308053,139365120,1183578339,-523155450,-523116335,1183441105,-62470394,1996423424,-618469124,200951433,-385649216,1988821160,-1959490806,1032521854,-1072965493,-1014292597,771507715,1448280068,108461911,-401698736,-1072956056,1182865781,-1962868484,-11273634,922745974,-6684124,-486539009,1035987817,58523678,-1962926408,2123102838,-11512052,-1711135690,15135,881544419,503860363,-1958900985,-1995076641,38061844,-1527578619,-1593540723,-1582628808]},{"sector":15,"data":[-2085945286,16791558,3806851,-92864768,1792154,209125120,-1948898584,2123041398,-2090967288,-443874579,-900899553,1317732360,1359406074,3895706,-339725568,-326412834,1988843350,-1959490812,1996425340,922703622,1016726052,-486539205,-1949332724,1032521342,-201586914,-1956749404,79846885,-1144442112,-1957363279,-1940433172,74892763,38026157,1001196413,92078660,-352313665,1359619,-1031021682,158714123,49690367,-472252440,-1949332646,-1949266952,-1898214339,-1070334781,374955,3711403,3842475,939951019,377684224,-1962934214,-108811327,-1205767148,-978649087,-1515912074,45655461,1150003968,1150004218,1150004222,1150004216,132885500,179945523,-1901333760,1606585307,1575324510,-1946155838,1430622424,-1910575989,-299987496,-397206014,-310116521,535137026,-1932833443,1430622424,-1910575989,149717976,2123234391,-1962469642,-1951724474,-1951724986,-1951725498,-2085943738,1461061871,1610556136,-1962742397,1297948645,1426065610,-326898549,-1912842488,118945918,-1425389941,-1425521013,-1425652085,-1425783157,-2096343413,1461061871,1610543592,-1034033781,-661913590,-1957345904,-661774612,180078899,172395264,-201862605,1378927232,1975520065,-993948685,643434078,-498919544,260581113,-1962742397,1297948645,1426065098,1465314443,280941107,379357952,-1960867072,-1960647921,-1958900743,1161495622,-1961724670,1161496134,-1962248956,-1995994875,-338588907,-338064418,49185752,-628371591,1608079080]},{"sector":16,"data":[1575324510,-1946155838,1430622424,-1910575989,1465275352,1183579955,2109737736,-1948780782,-654899626,1956599,138840320,-1962518903,-1073017786,-671673731,-150317429,500889560,1183383552,173443340,376815627,-1962258805,-768407482,-661917193,-150583669,-338457615,-661942210,-1962258805,1183516758,-773074682,-773140007,1977289688,-1947076620,1389507568,209125200,-1878362369,37611534,1997035067,990409223,58066502,855764611,197561298,-150506241,-2082932774,1583284442,49120091,1562371467,576077,1167120524,518818645,1465309326,1183570739,2109737736,-1949042926,-654899626,1956599,138840320,-1962518903,-1073017786,-738782595,-150317429,500889560,1183383552,173443340,-150581621,-1946645535,-259323322,-100408841,140965782,-678692861,-619985269,-621344908,-628893449,-2090967296,-443874579,-900899553,-661913592,-1957345904,-661774612,-13412525,185091723,-149783104,106335191,-621291273,-1996488675,1451821126,205949702,276676619,-150317429,500889560,1183383552,173443340,443924491,-1962258805,-768407482,1183576567,-1947076858,198325186,-347638273,-661942196,-1962258805,1183516758,-773074682,-773140007,1977289688,871495668,-11513134,1996426358,-401698806,1446707483,1913091848,105265931,1177224822,206969610,453396011,-16054186,-621344907,-628893449,-2091163904,-443874579,-900899553,1430585352,840887435,-788077587,-489500192,49120250,1562371467,52045]},{"sector":17,"data":[-1003791781,-654894733,168180022,907048704,788025,-1556741002,-527761396,-1949609134,1107525654,788464756,-5241984,-1140936517,1352203696,16777114,-1957340416,394997484,-1070382269,-523124086,745784363,959895799,1996491270,104412707,74842124,828214,1465311371,-963985357,-11476783,1583307219,1532880267,-469769981,-1140871191,1536219276,1125616430,-1957345981,-661774612,-1031094221,-1003757359,-654843277,168180022,920221440,788025,-1556741002,-527761396,-1070377130,-523123062,1507065680,-310157729,535137026,123424093,1392959747,-1864856373,-326412987,1457032734,-1962129781,-503904690,1183570059,-135230710,-1764097055,50882295,-1949070376,-310157626,535137026,147475805,196650,16721023,196880,16721379,16974097,81813,196609,16721219,196883,16721752,16974100,71479,16973829,80819,16973830,80789,16973831,76846,16973832,77065,196617,16723147,16974107,71234,16973839,68653,16973840,70289,16973841,77766,16973842,77833,16973843,71282,16973847,71332,131096,74238,205344,16725960,16974124,76831,196637,16725974,131373,75201,16983601,66198,327730,74235,16982560,77020,16973886,77630,16973893,77621,16973894,66769,327751,75198,16983601,77560,16973902,66145,16973912]}]],[[{"sector":1,"data":[66157,16973913,66164,16973919,67512,16973920,66553,196705,16712676,196861,16712704,196733,16713497,196734,16713507,196862,16713791,196863,16716445,8519941,1167120524,518818645,-326903666,-1990765016,855704638,1346036672,-6663856,-486539009,-1547685072,983760952,23717888,561299467,1946167784,20899868,-1706027148,65535,-1898410920,3981248,855663801,-139725888,-2090967088,-443874579,-884122337,11208333,-6664162,-1560280833,109903888,512557248,244121800,1988952273,2669270,1394495518,1444303134,-26030,1444282368,25498,1221376,1326733,-1959856589,-486449268,-14790362,96931381,-13762560,1493260692,309641227,1195836809,529258635,-2147266688,1179049954,516150507,-6670849,184549631,-1946979136,-1289843216,-1190228736,1394497024,-6663906,184549631,1457222848,-26032,-1073020928,1347473524,16777114,-1959664896,113413872,-6662650,117440767,-1073019511,-661971340,1333796747,-964460541,855082770,-17984,-142102798,-8304825,-746717136,1462072415,16777114,-6662400,-1207959297,1344143512,67482,1958742784,3318539,529258635,-2147266688,1812031427,16871681,67110400,-369098752,65535,16777194,-5632,163053568,-6664192,-1560280833,-1073020876,163057268,2073710592,184549377,3580864,-326412861,1342204344,115610,60072704,74825739,803979307,-1728030024]},{"sector":2,"data":[-6664110,-1560280833,-1073019916,146336372,-1952821248,-1560281087,-1073020006,582539892,-1706025471,65535,-1962933832,298016229,1744831232,2097152257,453051146,67109120,-117374208,301990144,889258752,318767361,1006633728,-1811939072,-1291844842,754974977,-889126122,788529408,-2046754048,973078784,-486472960,1006633216,-301923584,1023410432,989922048,1056964865,1828717312,-1056964351,-1929313528,1174405376,1157628672,-419430143,-738196727,1996553985,1912603392,1912602881,-1660943608,-167771903,1702258965,1701137940,1167087646,518818645,-326903666,209617678,721712384,-1955599424,126553182,-1946794359,138933976,-15961024,-6681482,184549631,-1948224320,1200354910,911706932,-1980217719,1589967446,1200301816,-1983708377,1451881030,-62470156,468385792,653418180,1946173312,-230228197,-1006138842,1191118430,126363142,-1946401025,994576966,-595592122,637951684,-1962932282,-310117306,535137026,147475805,-1873273344,-326412987,-2082959842,-1070920980,-1979955575,1183447110,105286646,-375159,1183647862,-1202710794,-1706033150,261,737822347,1183446598,2109737734,-2082932990,-443874579,-900899553,1478361092,-1957345904,-661774612,722136195,-96040512,-1980217719,1183577670,-62486266,-1928825089,1343682118,1342177976,16777114,-62485760,-1980217813,-1073019322,-654900611,-1962742397,1297948645,503317706,1430622296,-1910575989,988578776,310281046,721777920,54979008,-1727899208]},{"sector":3,"data":[-6664110,-1996488449,-1072966586,-1705973388,584,-1980086647,1589967958,105286650,638080651,-1993996407,1183515223,206998282,71797030,106400038,138921766,1183514624,1200170514,-1948742902,-532248313,16777114,-530674944,-14125057,1996433015,242679568,-1157627976,1347616767,-231681,1603009142,341835562,-1697495415,65535,13794947,1187448949,-385875746,1996423845,242679568,16777114,-834238208,13125319,-565786880,1187512319,-1962934040,126554718,-1948236151,207588312,1183385483,-1948742710,1183411783,1975520214,-530674932,-1960157301,1183396935,-899773482,-1994242165,1190648902,1965031644,112645,-1070923029,-941472119,53318,-1711137815,622,20856451,-756480,-16696314,-1711016906,65535,-1980479863,1183446614,-296318484,-150983240,1174524014,-195115788,4162342,-907474827,-26111,1048772608,1962934594,1074200564,-195116031,-1707606234,65535,1019627144,-1207339521,-1705967618,65535,60438271,16777114,-967407104,61994538,-805051693,-1947576695,75465690,-14713088,-1711039946,731,20987523,-16091648,-1593753586,-1863777984,-373282048,922681483,-6683750,-2097151745,81982,251595126,1084293440,721611521,-195115840,138906406,197936777,-1962249024,1178195526,-349866804,-195115944,206015270,-1996487899,-1072962490,2122516085,1098186978,48529027,2122529652,896795620,31999687,239504128,1964000779,-195115913,105351974]},{"sector":4,"data":[-942782839,63558,969426571,863893574,-772245877,-94452506,651052683,1963737145,-197722339,71014915,1048772608,1996489020,14018819,20713215,-385794911,1191117005,-1949963272,1191168118,-991505976,1183578718,1082730190,-2017057268,1342177818,-1030962293,1375869445,2078800,-26032,1391132672,-1946919228,958844486,2054489671,15091399,239504128,-1995417973,1451880518,-96039950,100423307,1183384090,-631862824,-1024316,-1977159610,-664878073,651708159,-1073084536,1191121012,-427916314,-1948158689,-970532770,1996423175,-193527818,-1946532213,134610006,-1957670398,973470278,-11513342,1996427894,175570700,-16222465,1642595958,-565802752,393592843,922690539,-6683660,-2097151745,80958,736691062,-4183041,782356550,-800704255,-538377357,-394361859,-1005554432,-2094597538,1946159231,-767128826,-2210167,966448246,-16777209,-6630282,-1962934017,-2090934714,-443874579,-900899553,-1957363698,49054700,375309398,575114022,638738116,1589905289,1200301590,308200485,38242598,-1005816065,-14281122,244327031,-990110744,-1993993634,209125127,41418534,-1058533744,308200699,38242598,71812902,-953810944,1607,639000260,-1004714101,-1993993634,1589905479,1200236054,308200474,172460070,639000260,-1004845174,-2010770850,1589906247,1200236054,308200476,206014502,639000260,-1004583030,-2010770850,1589906759,1200236054,1006838796,-1341885183,-1341986045,308200449]},{"sector":5,"data":[239568934,256362022,1204168194,1589903632,1207313942,74711332,48956080,1589903792,1334453782,-253657052,1589952778,1200104978,126559761,638475972,1589905289,1200301590,241091604,38242598,639000260,639780747,-1005304021,-1993994658,1589904455,1200301590,241091606,105351462,639000260,-1005041781,-1993994658,1589905479,1200301586,241091586,172460326,639000260,-1004058741,-1993994658,1996426311,2013210124,-401698814,1589967612,1200170510,209125122,74972966,-370667888,241091834,71797030,638351103,-1878624257,-86579186,638475972,-16365687,-14283658,244320375,-990198808,-1993994658,1996425287,2013210124,-401698804,1589967463,1200170510,308200460,138906406,638475972,-1005697143,-1977216418,1589905991,1200104974,308200464,189237798,638475972,-1005500536,-1977216418,1589906503,1200104974,375309330,692554278,638475972,-1005369464,-1977215394,1589914183,1200104974,375309332,726108710,638475972,638797570,-1005238392,-1977215394,1589914695,1191323150,1200104979,375309334,142574374,-1341885440,704834305,-771509824,375309536,206539302,-805052032,650185441,-2145103990,-1056247327,638475972,-1005107320,-1977216418,1589906759,1200104974,1204233752,-1006632935,-1960438178,1589907527,1200170510,375309339,306678566,638475972,-1004714103,-2094655906,1946159231,178181,-1070923029,-1961468220,1207314160,91554572,-352321096,197143298,-28931642,66336511,222874,1010729728]},{"sector":6,"data":[158728193,20713215,-352240479,-4183294,1996428406,276234002,-15829249,1996488310,74907398,1577606911,-1034033781,1478361110,-1957345904,-661774612,1443163267,637951684,1443526539,638607044,244332543,-990295064,-1993994146,-14264825,244318839,-990317848,-1993994146,-1000996281,-14283682,-401698761,1589967144,126428684,2013210198,-401698814,1589967128,1200170508,-14264830,244319351,-990312472,-1993995170,643171399,-1878624257,-118036466,638344900,1443252105,142081830,-437776752,207537400,138905894,2013210198,-401698804,1589966987,1200170508,-14264820,244320887,-990348568,-1993995170,643172935,-1877379073,-127277042,638344900,-2145826935,-1006499250,-953809314,67655,17450742,-1070988172,28312299,1589960912,1334453772,-236879849,135053578,390563878,-15567105,1392906358,-1005947137,-14285218,-14286217,1610556983,-310157820,535137026,248139101,50336000,16946177,50331904,16948481,50333696,16956417,50333952,-16612352,50404864,17070849,50336000,16863233,33559040,-16669696,50372096,17068801,50336512,16889856,51811328,16921601,50339072,16859904,51784960,16788224,53199360,16896257,50349312,17017345,50350080,16825344,53661184,16878848,85352960,-16670464,40448,0,1167087646,518818645,-326903666,-2091493606,1962936958,-373282043,1586168519,-164132086,1950353476,-6663414,184549631,-1947831104]},{"sector":7,"data":[1418409028,-129595082,-1946528119,1552626300,-1960867060,1183392327,600897510,1183387461,-398002200,91488768,-352321096,-1983894782,1187511366,-1006632718,-1977157538,1006838791,640775425,639846283,1965377291,-431584473,-1947187575,529208924,-2011805814,1190652486,1950351590,1963146250,-431557109,-955943678,127558,1183384971,-128006922,373787430,653149833,-16222209,-1705970058,217,637951684,-1962784887,1589964358,1194010360,1996443656,-294191114,62106,106873856,71797030,653811396,-16091137,1996486262,17537774,1589903360,1200170502,-128007162,209190694,-624897,714796662,-1006632959,-1993996706,2122516551,1567883506,-231681,1589903989,2013210360,22256153,1183383552,106874108,653674123,1166739337,-62520574,172460326,653811396,-14977025,-14286219,-23455369,50331649,1589967942,1200170502,256243468,158598144,731448715,-336014910,62925570,-1528169402,175570688,-1695123713,402,637951684,1996425097,2013210122,27630082,1589903360,1200170502,175570690,74972966,112794,106873856,71797030,638220031,-1710852097,459,637951684,-16365687,-14284170,-6682505,-1006632705,-1993996706,1996425287,38112010,1358710275,133018,106873856,172460326,-1005947137,-14223266,1979652983,2013210114,-26087,1174601728,429543676,-1006632958,-1993996706,1996426311,292945674,16777114,106873856,424118566,638076299,-1978775671,-2010772923]},{"sector":8,"data":[1166676039,1200104971,205883921,306677798,653811396,-1004714102,-2010773922,1589908295,1200236280,106873886,340232230,653811396,639584138,-1004714238,-2010773922,1589908807,1200236280,1191323168,106873885,373786662,653811396,639846283,1948600075,-352210940,-1312806398,-991899133,-1977157538,65110031,-1056251440,407865894,183624064,106874049,390563878,653811396,-1005369462,-2010773922,1589909575,1200301816,106873860,457672998,653811396,-1006221429,-1993996706,28843335,-2090902016,-443874579,-900899553,262150,12320771,763494401,31522819,18153727,25165827,18219263,2555907,734134273,1167087646,518818645,-326903666,142016284,-1710852353,65535,-1981004151,1854139990,1585660652,1187447022,-2097151772,1962936958,1144946751,460587009,1344274616,-1149185,-1130697610,-1996488704,-1073018298,-1070916235,-16660503,1996425334,-294191354,-1695779073,65535,185222793,-941394752,-7098,-1710590209,214,-1980086647,-1039401898,1996428149,-294191350,736917247,-2070261568,-352321535,-461470766,-385649664,1048576236,1962934596,9890051,17450742,-1914109068,536918016,-294191280,-1695779073,65535,199640713,-16026176,496634486,-385875967,1996488572,37198566,1183383552,-195655182,-1981266295,1183574614,-61436934,-1996471803,1451882054,-330920968,-336574839,-161561582,653674239,1589905290,-398000152,-1962440666,1325396038,1975520240,175570916,131482]},{"sector":9,"data":[175570688,16777114,-230257920,-1980475765,1451883078,-431584260,-385202551,1183514763,-61436934,-1981266295,1107683926,-163149568,-1946659191,1183444038,-1005392912,1191179870,126494454,-1548604,-2010716090,-263812345,200298239,-1804864,1996425846,-327745554,-1705983957,65535,1996439531,108461832,16777114,-465139456,-385649344,1996488489,4372708,-1202695527,-1706033151,65535,-1804545,1996487798,-327745542,16777114,-461963520,16777114,-94452736,661619494,1602430530,-165281751,175440903,795837222,1602430530,1589903409,1200301818,1191912995,638219301,1109618563,627016486,175570688,165018,1144946688,192151553,21235398,172395264,-1962696541,-310179258,535137026,113921373,-1873273344,-326412987,-2082959842,922686188,-6683660,-1996488449,1451882566,-164777734,1174604390,-230258184,-990620023,-1960381858,-62486265,829800459,705316490,1996443876,108461832,16777114,1958742784,-228670455,71797542,-1070923029,-637303,-1711016906,65535,-336181621,-228670410,38243110,-940685687,61510,-231681,1996487798,146297072,1347590400,16777114,-6664192,-1996488449,1589966406,1200170738,-2084771068,-443874579,-900899553,-1957363706,1122796524,1187403351,1048837868,1996489006,306613010,1964262923,102754563,-1292602,-1006233367,-1977215394,1183322183,442403786,1183385483,-1948742678,931859551,-1989262197,-1072963514,1586170997,710904810,-1993062517]},{"sector":10,"data":[1150017606,-431584990,15091447,-1961986784,1207364190,91554056,-352321096,-1983894782,1150021190,-398030552,-1993718645,1589961286,2139104790,292814866,-1030962293,1375736325,162981968,-339720567,-1069103355,1589903360,126559766,197019273,-1958120000,1175130694,-1005882348,-1960440226,-1102673657,716715755,1962889216,108330762,392346,179935488,-1980107008,138264134,-955941632,572998,556675,1996426869,-1099497702,16777114,138840320,-506169,-96024577,1589936127,126559754,39291686,-1982052727,-1070866858,-1979824503,1183448134,31779300,16777114,1111393024,-193658879,20973311,651976388,-16040053,-947190668,1589909483,1200301788,-465163518,-150983239,64523241,-1960387490,-6664185,-2013265665,-12795322,-21493387,-6663937,-16776961,-1711039946,65535,717379210,-754732554,-1982856222,-628361642,294787,922689407,2056913818,-2097151996,81982,251595382,1084293440,22669569,1424605227,-1707671807,-26109,1048772608,1979711808,1074724617,21012737,-1070923029,651976388,-1995946101,-1072970170,1183517556,-968476192,552152948,-597769215,206015270,-1996487899,-1072959418,2122516853,57934062,-2097084695,1963126910,16640259,66092675,-186055819,-597769216,575114022,651052681,-1995028597,-1960390586,1183393095,1200301778,-733574883,440896038,651576968,-2011478134,-1977166010,1183325255,410451928,-1927907585,1343667782,1183666950,726669006,1178161344]},{"sector":11,"data":[638744006,51136502,2122320757,91488970,-352321096,1354771202,-1673473,1996482678,-461963294,-16222465,-51902858,-230258425,-2081139063,1962985086,-360170,2081455999,-134267643,1182861687,-2096627470,-1962871722,1452013638,-195675654,92212604,1995589177,75399942,-1958579200,1452013638,-195675654,92212604,1928480313,75399942,-1960151808,1452012102,-129594892,-1946528119,1183441990,-599356476,-1981917557,1451883590,-834237442,-1949546871,1183437382,-599358502,-465109203,956378785,57926726,-1946282263,1175130694,-385649388,1589903556,126559758,-993114487,-14282146,642779767,-1709803521,65535,-992983415,-1960440226,1183384135,1200301778,-733574904,172460582,651576968,-2012526710,-1977166010,1183321159,410451928,-1927907585,1343667782,-15436033,1183650422,-1202710834,726663169,1996443840,-394854426,1357018879,-186101680,-230258426,-1946921335,1452013638,-195675654,92030079,2012366393,-230230211,427032832,15091447,-1005423358,-2144989602,637669455,738740097,1207903745,-230230255,57999872,-990095895,-1960440226,731465735,653840834,-384743679,1183579202,-28963844,1458111349,-129567230,-10980289,-1711016906,203,-1966835969,-466945978,-1325385691,736678659,-1957674798,119928902,-1706016768,65535,1022117512,-15960578,-1711016906,1788,-16640791,-1711016906,116,-1982052727,766565974,65824502,1589959750,-1978668278,1183368262,173982956,-1946401141]},{"sector":12,"data":[-1993933226,1468605959,173982722,639616038,604784522,1963015171,173982747,639616038,556931,1589907061,-867792114,-1962440410,501996102,638213828,-1960435772,1589912135,126428686,638213828,-1960435772,1589912903,1200170510,375309314,71797542,638475972,-1006352503,-1960438178,1589904967,1200170510,173982726,639616038,-1004714101,-1993994658,1589905479,2139104790,930349066,15091447,-163744508,1963255366,173982775,639616038,51136502,1589907572,532948490,206015014,20710180,1589906805,532948490,142574374,-1005751296,-1004139938,2139104799,74711066,48955824,19185706,638475972,-1005959288,-1977215394,1589906247,1200104974,375309323,206015014,638475972,-1005828216,-1977215394,1589907015,1200104974,375309325,256346662,638475972,638470024,1001415,2139104768,125108749,223313958,-1005589759,-2144989602,1963134335,1333798405,1589904141,2139104782,91554318,240091174,241091588,289916710,1190592512,1946222840,1333798422,-2128215536,19662919,15091447,637826306,-1005500417,-2144989602,1946159743,173982806,639616038,1736576,1589922165,1333798414,1589904400,532948490,206015014,20710180,1589907829,532948490,142574374,721712384,-1207702592,-768933887,-1961992508,126559944,731503243,-1177347135,-101253118,638475915,-166639871,1950414918,241091592,273645606,-129567224,-1006078848,-2144989602,-1978658737,-466949050,-443850914,1622621,1167087646,518818645]},{"sector":13,"data":[-326903666,-1705617568,65535,20725379,-2096663296,81470,379193204,-352321524,1040646123,19702017,20055609,922698871,-2053504108,-2097151989,83964422,60045055,-150989384,1342255654,35927807,16777114,1975520000,841909009,922682625,-1952840812,-385875959,922681873,-1768291436,-1996488695,1996426822,176724500,1183383552,525758,-1916123511,1183435846,-967406396,11945671,-1000422400,-1950071041,1191168638,637897418,1191118728,-1233222730,-1914274766,1183435846,-1269396302,13401731,28837245,721611520,-1203336768,11159239,-1404647680,1183514624,-1371108914,-1983101301,1996468294,-1438216924,45633558,-6664192,-1962934017,1177267782,-834238038,732972683,1183427654,-830569524,-1962574848,99339846,-137476469,-834237992,13401731,1183516028,-1962546228,-654848954,-2083764599,1946204286,-1982269691,1586220102,678952738,-1205438465,-11534333,1996469366,1354771378,-1957670832,1610558047,-1538881244,1342182328,16777114,106873856,185043238,-385649216,-1706032887,1084,-1935260023,2122557534,1232339108,-11485141,-6642570,-1006632705,-1993995682,1975520007,13494531,183409232,1183383552,-1135179334,-14524789,2013210743,243750,-1267269808,1387427583,-4557057,1996466294,710904742,-349937665,-1983894776,1183431750,-197722182,116431363,1183383552,-1034516032,-14387457,1996469366,-1133051982,-4557057,1996466294,-1069118042,1586188310,142081982,688003,1200293244]},{"sector":14,"data":[-1962349814,1200340574,1356396298,1342180792,16777114,340146944,1586172789,710904610,956305569,91567175,-352321096,1354771202,-1997046808,-29571002,1183535477,-1136260166,1589908084,1066083850,192518743,-1705574400,3015,66336511,768922,106873856,1463782182,758682,-6662400,-16776961,-2120608650,-2097151988,81470,1676215159,1041170177,20881665,-1962845207,1175173702,-1005030212,-1960441250,-1835378881,-2147483636,1962920062,630871814,-2147483647,1979697278,10873091,650141380,294787,1183454581,1357130440,-5736705,244360822,200685288,-998148928,-1960394658,1589904455,126428682,650141380,-2096478209,81982,1048774517,1946157378,65903111,-336920576,21104383,650141380,-16040053,-947190668,1589910507,1200301760,-934376958,-1054085846,-150983239,64523241,-1960394658,597315591,-2013265916,-466967994,-26032,-1073020928,-21493387,865751295,-2097151996,82494,251595126,1117847874,721611521,106874048,1463782182,821658,343342848,285594,-197722368,113285635,1048772608,1979711806,1041170185,20881665,-1070923029,-1592887669,117375276,364445996,65140480,507939824,-1994369397,39094532,-1994635637,1183515716,105154842,-1994897781,1183516740,172263702,-1961867637,1149833814,240421132,638213828,1149831051,310151440,-2000140662,127538244,-1207959539,166395905,-6635477,721420543,-2090901824,-443874579,-900899553,-1957363680,49054700]},{"sector":15,"data":[-16353537,-6683530,-1996488449,-1072955834,1996426869,74907398,16777114,-28931840,-1946270069,79846885,-326413056,1444867203,639131332,1962950531,310280198,-1207602176,48955393,1183432747,1975520238,543081491,276791334,-1207339774,-4521985,114485631,1183432747,-431584792,1212032,1183516788,441879320,1183517163,441879320,-1996485627,1451883078,310280444,-1005947648,-2094655394,1946159231,112645,-1070923029,-990493047,-1977157026,1589908295,1194862112,-2130021363,-536811962,-1813490047,543081476,289928742,641037315,605112202,1963015171,-94452714,407369254,-2127268863,1610671686,-353872255,-1003951360,-165217698,1963006023,-431587042,1451456512,334169576,653942468,18368502,1182861684,-2096889626,-1006573482,-2094654370,1946157695,310280242,-1005423616,-1960379810,-1023203513,1347601036,-335622168,408863751,105351974,639393476,1946306361,-431587062,1451311104,-1006592792,-165273506,1961890119,-94452684,407341606,1183379492,543081698,289901094,1178267684,-2145749790,1946215038,-431587060,1451335680,-352285464,-431586552,-396983552,-330905731,1589903361,2139104800,527695886,243236902,-1000442621,-1977157026,1006838791,-2096728831,1946220158,239531526,-1000377342,-1977157026,1006838791,-385649663,2122514716,57934070,-1962863639,1183385158,341755134,-1995994330,2122572870,1048379646,-28931248,-1957635849,723969094,-1706032569,921,-350986556,-94452693,604473894]},{"sector":16,"data":[1963015171,-159480914,-139954944,1073745478,1182900597,-2116026138,19458134,1589941739,-28931308,-1006139098,-1960438690,-462014153,1183517310,-1715065884,216730545,638869188,1177225099,179411428,16777114,-431619840,-2081925615,1946158206,341754893,637814411,-385595511,1183515514,1347590412,-1713092981,1589923922,1200301818,1347590406,1025178,-1706012160,4046,1183535186,1347590410,638869188,1385760651,-94452656,71797542,-1001368935,-1960438690,1385759815,265656912,1347551232,1039514,-1706012160,4206,-6664110,-1006632705,-1993993122,-1073019833,199820158,1204233731,-385875708,2122515202,192151568,15629955,28837236,721611520,273058240,639393476,1183385483,341755134,-1995994330,2122572870,259850494,-134330741,-28931624,38243110,-2082191831,1946161278,-465138861,1178329297,-1958117378,-1952842170,-101194674,1038763657,92143624,149571271,1342224384,-1957670247,1385818694,280205904,1174470656,-397012506,-135641461,1183442030,-364475420,-523041871,-1728051155,166086153,99346518,32130759,-465138944,2113816121,1476442142,1375732410,-465138864,-1711389141,-778416046,83886096,-763142144,-1206457591,45766656,-1957670400,1177288262,1347590628,16777114,-431619840,-991406575,-1960435618,1183384135,1975520254,8644867,638869188,-1996208245,2122572870,1416888336,-775804007,-465173512,2113816123,112711,-25755824,-1696303361,4474,1038894729,92143621]},{"sector":17,"data":[99370695,1342224384,-1957670247,1385819206,300194384,1174470656,-397012506,-135510389,1183442030,-330920988,1175034184,-397014554,738096779,12117110,1389505480,2096499536,-372864251,1183514837,-28955676,-1207907095,-11534236,1996425846,294754828,1183383552,6600948,-94452656,108527398,74972966,1155482,-129595136,112720,-361300144,1164954,-129595136,1080963,731466612,66638274,1178335302,-1203864076,-11534335,1996485750,302619384,1183383552,343532,1187448190,-1207958036,1385779200,-330921136,-1706012007,4671,300303873,1183574102,161040620,1443489350,6600936,-94452656,108527398,74972966,1185946,-129595136,-327745712,-1695910145,4846,-1191688567,1385789440,-129594544,2096383545,-196703480,-336050645,-129594618,-1712044501,-1617276846,16777234,1444013638,-293698584,-1957006080,1589905478,1194010136,2996482,-880025097,-936655988,-1980739959,12120670,1347590480,638869188,-996604021,-1960382370,-101244337,-991279479,-930409378,71797542,-262224743,627018534,1183448055,-1715403796,-157659054,16777234,1444013638,-360807448,-2096726271,2114055294,-431587063,1451476992,1183514856,-364496404,1178155636,-1206747414,1385763840,6600784,-361300144,-336824577,335591440,-1202695527,-11534236,1996483702,326408938,1385758720,326933072,1174470656,-397012506,638869188,-1996077173,1589961798,1200301600,-28931832,947175435,98846347,1178271894]}],[{"sector":1,"data":[-2130084354,19719238,31936128,738096779,12117110,1347590412,1342177720,75298315,116115083,736380555,-1202651578,585826314,721522872,-259267514,-1727266632,28856402,-167030784,-963967876,-963967765,-1202661129,-1706033132,3856,-1706012007,3997,300303873,1589962838,2139104800,1031012362,638869188,556928,1190605685,1963196430,239531551,-1004964604,-1977157026,-2013060089,-1073028538,20710516,2122519413,225771766,935671,-2145422076,-352131250,341754905,138906150,639655620,1946830648,-431587063,1451429888,1589903592,2139104800,276037643,638869188,622464,1317013109,434847974,638869188,-1006024822,942022750,158600007,15091329,-396983540,543081472,209682470,-1005554688,-2144988066,1962936959,-431063034,-1004934272,-1977215906,1589905991,1194862112,-2130086900,201385542,15226499,-1947842933,-1956714410,549608933,50340864,17588993,50331904,17896448,53314048,-16532224,50402816,17394945,50333184,17533697,50333440,17399553,50333696,17388289,50333952,-16619264,50404608,-15971584,50404864,16794369,50335488,-16326656,50405120,16813825,50335744,17526785,50336000,-15968768,50405632,17478145,50336256,17525249,50336512,17627904,51811328,17904128,54401024,17382145,50339072,17473280,51784960,16952577,50347008,16954113,50347264,17787136,54476288,16879873,50348032,16782337]},{"sector":2,"data":[50348288,16801793,50348544,17639169,50349312,17643777,50349568,16893185,50352384,17510656,53432576,16891137,50352640,17434368,53662464,16886785,50353152,17377280,51798528,17818368,54355712,17462528,1439232,0,-2081649835,1448548588,15222471,943620864,125108225,20594307,-1710787584,53,117435371,1048772922,1962934588,1044284167,125042689,55706,-1316096,-16695802,-1711041482,65535,-1980086647,1187508806,-385875724,2122514809,326434820,-1947050357,1451951686,240597256,1194919285,-2094959604,1962935422,22079747,-1947050357,1451951686,39270664,1072235380,1946630401,20506883,-2131599733,1979651199,14608643,15236739,922686581,-6683660,-1996488449,1451883590,-398014466,766509057,-151888245,1174606951,-27882500,-1980873079,1048834134,1962934592,1111393031,125042689,16777114,-1316096,-1006550522,-1960382882,1962281783,-339309820,2996242,653156036,-1962776585,-58800936,-1996387546,1589963334,1342121710,2139301386,931069962,637771937,1946437433,-295779312,74972966,16777114,1975520000,-295779088,71812902,-2094661632,259326015,-1963827573,-467004345,1448538251,-16361240,244378230,705199848,-1947709212,1975520007,-83959,-26032,1048772608,1979711810,1108279049,21143809,-1070919701,1586170859,276299762,16777114,-228685056,-1710065665,632,19664639,-1191105375,-503906283,-1980086781]},{"sector":3,"data":[1183578182,-330921486,16139975,-159481088,-1961067243,1191177310,-126448660,-1963440385,-16283644,-437520826,368199299,-1577826561,1178140972,-385649676,2122579580,158597352,66336511,16777114,-1808335104,-26109,849412096,738601729,343297,748758646,20095745,1929381181,839304966,-16775935,-1207725002,653721621,-11534030,-1711135690,65535,20856451,-16157184,-1593754098,48955710,1048821803,1979711802,974061321,20619521,-1070923029,1577058744,1575324511,503318210,1430622296,-1910575989,82609112,106859350,2013208459,74972934,-397361109,-259261042,-1710852353,65535,-2090940789,-443874579,-900899553,1478361090,-1957345904,-661774612,-16222465,28837494,1609060352,49120253,1562371467,313933,1167087646,518818645,-326903666,-11118824,1996425334,-26106,1183383552,2113004,-1070922377,-2096970519,80958,1048774517,1946157374,50043399,-336920576,20842239,20987523,-2096663296,82494,479856500,-352321536,1107754987,-197722367,59611651,-930414592,-1962922568,774305754,-1983380735,1586100302,-1707671558,70687235,-259325952,1187511947,-352321304,956664623,578153542,-16497153,1166672453,-1964758521,-316012979,-1992244949,922743366,-1600519270,-385875965,-947715601,-398000376,956379297,-915216314,-1280257,-960959370,-1202708991,1385758727,-26032,-1706033152,65535,1358710409,321178,-297367296,200300169,-13732414,-1711039946]},{"sector":4,"data":[998,66336511,257690,-327745792,16777114,1111393024,58130433,-16662295,-1593753074,-1192689342,-295779327,-1995994330,1191178822,-297336850,19793411,1979776317,-1707671781,67803651,1996423168,77372156,1996423168,81435388,-1460994048,956379297,1996568070,-1707671753,75930115,117374976,922681654,916521882,-754732799,922702048,546964004,184549378,-16353856,-352242162,-1707671623,4495875,-259325952,-1192462593,1385758728,-18352,1392508858,-26032,815857664,805764865,-1309111551,65524483,-330920962,1170670985,-956301054,66629,-2013188448,1183450693,105186034,1166592254,-1707671801,32414211,1183514624,772146162,872823553,-10062335,-1711016906,1234,32654987,-16698362,-1207700426,653721645,-919928524,922701905,-6684130,184549631,-14780992,-1962856434,103412294,1996423476,88185596,1996423168,88709884,-857145344,-197722114,10983939,-930414592,-1962922568,774305754,-1983380735,1586100302,-196687878,837484544,-362753,1996486774,-260636692,-387025153,1183383694,-262764050,242598411,19926783,703874699,-385798650,1183055548,1191128568,-230257676,1928611385,-59310137,348826,-59310336,75162,-197722368,31824387,1048772608,1979711810,1108279049,21143809,-1070923029,20856451,-16157184,-1593754098,48955710,1183563819,723053554,1044284352,175505409,20844287,-385794399,-1070858948,1593653225,49120095,1562371467]},{"sector":5,"data":[313933,-2081649835,-1000994068,1182991454,-1960443388,173982727,38242598,637820612,16793473,-1070922124,12773785,-1962260853,201657430,-129595136,-1946528119,1451951174,4326662,-1979955575,1183579734,172370936,-150983379,-336557096,-60898286,654067455,1589905290,-129564680,-1962440666,-1073000762,1589962613,138840842,638028070,280519,73319424,1699187494,1732709158,1182994293,1589932292,1204233738,-352321528,71729942,108461937,-1710983425,1636,638213828,-1006090359,1191117918,1065362948,116684032,-1710983425,65535,638213828,-1006221431,1191117918,1065362948,-990612224,-953808290,2631,19793663,-1962654069,-1956772266,180510181,-1873273344,-326412987,-2082959842,-11138324,1996425334,46307846,1183383552,2113016,-1070922377,-16720663,-1315243914,-956301309,64582,20463235,-2096663296,80446,-258341004,-352321530,973537259,1010729729,125108225,20856451,-1710787584,1801,117435371,1048772926,1962934592,1111393031,125042689,189082,-1316096,-16694778,244381814,-2013088024,-12782010,-466996876,61993099,922740435,647627674,50331651,75269104,-14123520,922682444,1754923930,-1979711481,-466946490,26536016,-2080618871,82494,251597942,1117847874,-15865087,-1711039946,855,-1070864917,20856451,-16157184,-1593754098,48955710,1048821803,1979711802,974061321,20619521,-1070923029,1593591435,-1962742397,1297948645]},{"sector":6,"data":[1426064586,-326898549,1183471128,-1947981308,105286384,-12128213,-1711041482,2045,-939899255,62534,1586175467,71731962,1981040440,343900171,-1962576641,340207814,368723587,-1577826561,1178140972,-2395404,-1711041482,2098,60438271,588698,-364476160,16008903,-1961170176,1183509086,105330692,-963966858,671500072,1182992199,1191119082,19964404,1928611385,-1707671586,153590275,922681344,177865716,-1996488701,1451883590,-263812610,-940419447,62534,1589911531,1065559792,-1978698496,-467008442,38222118,690357366,1182990967,1191128560,19833332,1928611385,-164777767,1174602854,-27882500,-1996477179,1451882054,-164777736,1174603366,-330921476,-1578215799,1317667118,736963076,2996673,-1054088713,-336312695,-161561582,653674239,1589905290,-330891284,-1962440666,1325397062,1975520244,775301604,-197722367,61446659,28835840,-443851264,311901,-2081649835,-2141844756,1979647102,-373282043,922681486,-1516633190,-1996488695,1183512134,-1310447100,65065731,1183446598,-2585606,2139292239,108986370,294787,922685054,-1097202790,-1207959543,1424687105,-1963303285,-467007929,122128976,-27006896,-369013,-26057,1183514624,806289398,806783745,-754732799,-1983773726,1183579718,-129594886,16533191,-58817792,-1951171320,1191180382,-25785352,-1963047169,-16283644,-437519290,1575324510,503317186,1430622296,-1910575989,2122340056,74841862,636207147]},{"sector":7,"data":[60438271,648090,-1948742912,-427751818,61931775,1090512595,-1707671806,169187843,28835840,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,922683116,798622618,-1996488697,1187445318,300613884,-1946526069,121177670,1182996084,1191053562,-62485764,104588330,-462290640,-244026,60438271,476058,-62486016,-310123478,535137026,46812509,83891200,-16497152,50406656,16867841,50331904,17048321,50333184,16878593,50333440,17284097,50333696,17298433,50333952,17087233,50335744,16875777,50336000,17316609,50336256,17356289,33559296,-16496384,50406656,17225473,50339072,17384961,50343424,17006081,50347008,17007617,50347264,17036801,50347776,17059329,50348800,17188865,50349568,17213953,50355968,17219329,24576,0,1960512339,35621658,14123225,74771722,48957320,-651556983,-1962877056,1541597983,-1864856381,-326412987,-2116514274,1442878188,308185943,2139103115,125110530,16777114,-1962531328,-16051586,898304116,17319158,870908788,712805123,118521475,1589910901,637194,1149945342,637602825,1962950531,-1946278910,-2014834082,-2094273537,1963528318,308185887,-1962896711,1944586822,-1958657537,1810369606,308186623,-1945477495,116067414,100826243,-1159134347,276726530,-2093845503,1963135102,23259395,34635395,-1070339979,1343387391,16777114,172264192,242532363]},{"sector":8,"data":[-1710590721,65535,-369473911,-605486865,41714433,-352160505,308186045,-1207958855,199753735,-3001345,-1705897354,197,-1710590721,212,-375159,-6679946,-16776961,-6679946,-1929379585,1586359886,678756338,-14256897,369172534,-11332015,-1073018787,1552643956,-148927732,271943,1183518324,-1669035538,-263812352,10388617,200427147,1175188550,-129627146,-1937025932,1859322012,-160508942,10390667,-738955565,1996486766,-227082478,-755969,1996486262,-25864,-1070399488,-15567105,-6620554,184549631,857109696,309788626,16554578,1996423168,-26094,1592328192,273074175,1996423170,27695634,-1070399488,10257545,10388617,1343387391,106138,-92864768,16777114,-6662400,855638271,288787913,1824427265,1444827391,-1705568687,65535,-6662378,1593835775,-1961730421,702775,-131608,261755510,-1962934271,45683294,571392,-369235480,1149960521,1958742794,77221937,1342177281,119194,308185856,855640761,-37164864,-1207958855,-1075314681,1405105149,29989456,1996423168,34052626,1996423168,28744210,1996423168,18323986,1996423168,-26104,-1924136960,1962929742,645201704,18888447,1996443926,108461832,-1995940353,1721433158,-1996488702,1552615510,-148927732,271943,1183518324,-1669035538,-263812352,10388617,637951684,187041675,187040327,187040839,1601504839,10257545,10388617,120730,-1916194048,-1929309898]},{"sector":9,"data":[1358916798,374429214,32283223,1461059584,127898,308185856,-402650439,-1070334702,1184518227,-16777214,1318720118,-1962934270,45683294,571392,-1946356248,-62485705,34635395,2089510261,642313002,1183385483,1200301810,-196703998,71797542,653674121,-1996077173,-1936983994,1859322012,-160508942,10390667,-738955565,1996486766,-227082478,-755969,1996486262,25336568,1183514624,-15143940,1962879092,276234022,-15960321,1996425846,108461832,1594383871,49120094,1562371467,969293,-269762509,1167120524,518818645,-1070344050,185097867,-1961397029,-1886699489,-1895104366,175374484,-16222465,-1610676618,-310181742,535137026,80366941,-1864856576,-326412987,1457032734,-4181161,1996426870,-6664180,184549631,994211008,1962938886,175570703,-1710721281,65535,762626059,16777114,47104,2139825013,-6662398,-486539009,-1948611048,105810928,2126831499,-1527514104,-26029,1183514624,-2090967290,-443874579,-900899553,-661913590,-1957345904,-661774612,1443163267,-2000669865,1996487494,209125134,64461392,-1073020928,104543348,326434834,33244870,-16091393,-325449610,184549379,-1961134912,66427640,309657600,126468147,-1711114241,65535,-26025,1988820992,1962281734,112729,940334788,58063686,101211844,1251627091,184549380,-1956940608,1354773496,-26026,1222836224,1358710409,263066,-1909071104,-1948808254,-1698679816,1134,394861685]},{"sector":10,"data":[1183567499,38242812,142001438,530904060,68852304,28311552,-91546901,-1694730497,1250,-1694730497,1148,75668055,-1070399488,-310157729,535137026,181030237,-1864856576,-326412987,1457032734,-1070334889,185366155,-1957333770,39619380,1041281,-620536460,-2146806133,1618217211,2131164032,-1961657266,-1898410754,449283008,16777114,314671872,179907051,50036736,146350452,142377728,991458563,-1005290287,62391934,-1070355712,1150004139,-1047811308,-997191189,-784660866,-779681155,-1962359165,1604645825,49120094,1562371467,576077,1443394699,309658,-1947671808,-1948610850,108971248,-1190504821,-784662518,-896859523,-201535189,868912036,1403712448,323738,172395264,1478409707,-1957345904,-661774612,-2095911805,1962938494,-339727612,105286490,-1995942261,1451881030,172395508,-1995680117,1451882054,239504376,-1946532215,1183387718,-1948742660,-297367289,16777114,-295793920,-14125057,1996433015,-18418,1392508858,-230257328,1602965526,408944426,-1695529335,65535,-2081405301,-443874579,-900899553,1478361100,-1957345904,-661774612,637951684,17334147,-14274187,1589906039,2013210122,-26110,1589903360,1200170506,106873858,175636262,638213828,-1710983169,65535,638213828,-16496759,1996426358,106873866,41418534,641204006,-2096865281,-443874579,-900899553,1835016,107872259,18153727,109576195,18219263,83362051,1114113,94437635]},{"sector":11,"data":[1179649,97059075,1245185,3997699,932446209,104595459,378798081,39190531,110428161,42402051,1376257,103153669,21233919,50003971,85852161,78512131,372047873,103350274,21233919,56229891,272433153,80216067,784596993,49479683,96796673,73597187,4521985,83755267,4653057,77529091,785711105,88932355,366542849,39714819,106692609,47841539,6356993,102039555,375521281,26148867,8061183,46465027,16580863,48300035,8192255,35848195,8257791,36241411,16646399,0,0,0,0,5,0,0,0,3932298,4980804,6029396,7077988,8388726,11206784,0,0,0,0,-65536,255,-1061158912,192,-2139095040,128,1077936128,64,0,0,1,0,0,-65536,255,0,0,5,-65536,255,65537,16842754,0,0,0,0,0,1140850688,1280332617,1711298881,1937010287,1835364096,7235938,1684957559,7567215,1819047278,1953656688,1852796416,101,0,0,0,0,0,0,0,0,0,0,0,0,0,1987208238,4607232,65535,18,131071,1329987587,777213006,5132102]},{"sector":12,"data":[327680,65538,0,0,0,-655359999,-538511672,-388175652,-154607642,154720496,388290800,538632166,655419612,655423176,538577208,388241188,154673178,-154654960,-388225264,-538566630,-655354076,-655357640,-655304464,-655304464,-655304464,655415536,655415536,655415536,655415536,655415536,655370000,655370000,655370000,-655350000,-655350000,-655350000,-655350000,1868965648,1768191086,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,537001984,536870914,4194306,260046914,65537,65537,186845474,52691749,19727649,36176171,69796138,34801190,4325376,11075584,53018629,65546,52756495,589904,4784213,15269978,13172831,6619296,2687141,36241578,2162863,35979504,8978677,6422778,255,256,16777217,16777216,16777473,16777473,0,1,16777472,16777217,16777217,16777217,16777217,16777216,257,256,968294401,981678723,968309379,965687690,968309379,965687690,968309379,981678474,14979,0,1966080,1769238101,1684368500,0,0,0,0,7106675,1702100992,1677750381,1667855973,1929409381,1819242352,1392538213,1819242352]},{"sector":13,"data":[1697542757,25976,1919251317,1886584832,1701605231,1769406578,2003788910,1869480051,1701052416,1701013878,1677721715,1667855973,29541,1953656688,1879048307,1937011311,0,0,0,0,-1,196609,16711956,164,279886,136446413,9895,1867781,5120,262144,0,524316,4197985,25166112,26739080,5670,262333,1187250176,42201088,4325376,-1997793659,-1997799104,398008149,386789744,216539371,413397360,295838151,427815280,126755612,450163056,20128674,458944880,53420984,460386672,343811064,464580976,203892056,487649648,33826357,502133104,17505816,17625392,565714476,565834032,214245480,214364464,104669507,104788272,183181749,183234864,98706048,98824496,523903727,524022064,50406651,50524464,92218679,92336432,152118683,152236336,58861118,58978608,405939843,406057264,98904096,99021104,152774792,152891696,38742307,38793520,127019348,127070512,18295256,18411824,54666848,122814801,-2147352572,1,703397888,1048609,32769,-2147221504,2,647954432,-261095421,705593345,648151040,-261095423,705789954,-2147155968,1,705822720,-265289722,32769,-2147090432,1,648216576,6291460,706248705,0,1163089156,82,524289,1507345,2424863,3211306,1498613248,1296389203]},{"sector":14,"data":[1497713416,1380011842,1330447684,121983829,1347635524,89735500,1314213715,1329792068,1258704205,1162760773,1145504588,50397513,-16549690,171953411,-855441408,29690431,171953411,16908702,53674243,209595,587399464,1428620117,55947779,335762698,1456866133,56435203,1510159522,846398258,53367043,-1862062481,780665646,51042307,268634775,188678922,56683011,-1056743184,1637090144,56718083,-66887391,1637352243,56744963,-1090297347,429523809,52073219,1124270642,218563342,51177475,-989650919,1657078556,56865795,-16642541,121621763,-855441012,13436479,-670891771,132449031,58854403,1241743908,67043872,475085,1070400256,50387207,842793729,57563907,-16496887,138398979,-855437141,273680447,138398979,-855436920,285280319,-117243629,940180279,54008323,1879258970,933102388,56900867,-1979489176,1689322340,56942083,1073964309,1701512037,57003011,-1560058278,1733952358,20302083,1070400511,16777230,924582657,-855376111,71503423,239062275,-855440017,3391,222285059,-855438863,79498559,222285059,-855440134,86969663,222285059,-855439839,113773887,222285059,-855439041,95096127,222285059,-855439899,57088575,440388867,-855441408,90901823,222285059,-855438981,146672959,2130903309,1292043107,53377027,-1140627557,582484770,52541955,-2147277505,599917346,52722691,-1241308630,318767393,871039745,53648643]},{"sector":15,"data":[-1375522176,617939750,56654083,1124283583,1463747415,56046339,604198703,1650066274,56763395,553869927,1649869666,56762627,-15441308,390057219,-855441408,5642047,390057219,-855441267,28841791,390057219,-855440946,45029183,390057219,-855440626,55777087,390057219,-855440450,64886591,390057219,-855440369,81336127,390057219,-855440312,1343,54512899,-855438737,179110719,54512899,-855439677,184419135,54512899,-855438599,150078271,117637377,67044708,386088909,1070400258,51083779,1375944653,1070400258,50688259,-402440243,50398981,1912832917,-2068315260,59068675,-805075578,-2029255802,-855376119,1599,104844547,-855441321,8980031,88067331,-855440829,40371519,88067331,-855439998,42796351,54512899,-855440774,45417279,1761804546,775684963,-855376127,2879,-1241317118,-2059730091,-855376127,17368639,1644364034,1679491917,-855376127,326304319,-1509752571,1656423266,52159235,1174622052,67043623,605503437,16778755,-2014248191,-855376112,16259135,406834435,-855441105,59316287,406834435,-855441003,43128895,406834435,-855439363,51517503,406834435,-855439325,138876991,406834435,-855439253,143398975,406834435,-855440840,67508287,406834435,-855439151,145561663,406834435,5439488,-1627193087,67045512,-1022410803,1070400258,50331669,2115256269,1070400256,51125768,-603373619,1070400257,51849730]},{"sector":16,"data":[-2078916659,1070400256,17278989,1912996609,-855376127,89720895,-754777847,630129541,52545539,-687660862,1464795991,56071171,1761829414,67043938,1544110029,1070400267,117600007,853869313,52609795,872618751,464257819,55949571,-15968982,54512899,-855635199,124128319,155176192,-855636666,50136895,390057216,-855637726,3135,155176192,-855636361,94701887,155176192,-855635709,148834623,205507840,-855635993,9964095,-2130706165,1473511479,5755648,-637510718,1473577047,3631616,-1929355538,1620181088,22095360,1070399743,50459906,1322123265,5432576,-16690498,54512896,17104896,6521856,-335534092,954269795,20500736,1070399743,34842626,772931585,21810176,1070399743,18207490,1384382465,-855572735,350290495,318767361,16712972,-1526579251,1070399508,389900,352600013,1070399498,318220,-2130100275,65801,-16707070,138398976,16976714,1262592,1946178059,16711994,654917581,66054,-335539306,16711996,587808717,66312,-1996482333,296550456,-855572735,110823743,268435721,291766296,1275648,-1744824818,224067597,1186304,838862534,16712205,-687259699,1070399488,50653961,996737025,3693312,-16704116,205507840,16911273,5941504,-16688475,205507840,16844574,19415040,1070399743,67108873,926351361,3111168,1828721848,16712219,-1106821171,1070399490,50459399,642711553,2529792]},{"sector":17,"data":[-16699610,88067328,16974659,3503872,352342908,16713740,822624205,1070399491,988162,218251213,1070399500,620803,-284409907,1070399506,443912,2046967757,1070399510,33934600,1167851521,21357824,1070399743,50458888,1275133953,638464,-16686893,155176192,16845151,21998592,1070399743,16912665,203227137,-855572735,15206975,-754974427,1380712541,5938432,-1610589541,1571881044,5548032,-1191159109,1519845466,799488,-1258267977,1520631898,806656,973081697,208797708,807168,-469759004,209911906,803328,687869001,1661861900,783616,-100637947,1661075467,6492416,134220782,201916515,6490880,16802580,16712204,-1744224307,1070399495,18055688,1841299457,-855572735,175638847,-1392508667,-2091253670,777984,151027462,16722028,789921741,1070399491,25,2131836877,1070399508,18,370294733,1070399490,16,1130445,1070399488,294417,2031108045,1070399493,971793,-384745523,1070399503,27,-1475264563,1070399516,31259,2131902413,1070399489,76818,17973197,1070399489,1130769,1393639373,1070399514,243984,-2028912691,1070399496,461585,2047885261,1070399491,106767,1309622221,1070399488,374287,1863270349,1070399489,50203,1947156429,1070399494,435471,2014265293,1070399495,67855,1261517,1070399488,459535,873480141,1070399492,1239569,2115059661]}],[{"sector":1,"data":[1070399495,331280,-1827586099,1070399499,33842970,1379663873,51127296,1070399743,530454,-1592377395,1070399507,17904150,146931713,-855572733,337513535,205507840,-855631459,497617983,1543504129,82,76044776,108432130,-1962639733,-2096776674,1946159743,112645,-1070923029,-385871709,1156972675,2071273523,360054539,-167486325,1969228359,776271372,-161778560,1965044548,-129594027,1150111766,-1588584930,1344144208,384306832,1958742885,1183667762,726669048,-397389632,1149899734,1019225139,-2096663488,101438,1283459700,1283459119,199951407,112726,1354771280,-2088305944,4158,1686111349,2088992558,125042690,1459778815,-1946198552,1962281780,-8984317,-2018711357,1183515394,55616262,1064579,-2096728832,1946158206,473858900,141885445,-1710852353,65535,185104011,1443329270,-402360577,1049362206,300614876,185365899,1443329270,-402360577,-947650806,964622,85733111,81528323,-529152197,104087171,-16092160,-16370634,-404224906,1072219134,-1593506681,1178141794,-1996260090,1688274502,71710980,1183384445,207522564,271796214,-1014290315,503324165,175570768,-1962379521,1174604358,1183535110,71697160,-401698736,1996448479,-2043680756,1387814379,-1957683709,503647302,-1873797632,1662183438,-397361109,-1679290773,-129593979,1996443670,142016266,51005067,-1957689786,1174603846,244338692,-10314008,1183648886,-397404424,1996457463,-2053249012]},{"sector":2,"data":[-15966581,55752759,112720,-17962928,-1014663704,59169000,108432129,96083595,1946974009,860157532,-396987376,-1202289346,-397410298,1183398825,1958743036,808910607,-26107,1183514624,87073788,-11125621,-402277834,-11106903,721795638,-1041739584,1150113413,-397402594,1686144391,-396894417,-397013561,266896679,62412421,15224832,1793639301,-15790458,244321910,190729960,721778112,52160960,-1995028853,1183575622,-364476140,622478987,4046848,-2096728768,1946160766,578224094,-400525569,1183385460,1958743016,-63011890,91488257,-351905090,-396457201,85084043,-397410240,-259305335,-1351289333,-1705983957,65535,-1962130295,1149888582,407276292,-1994762613,1418276932,-465123534,1149894656,635710003,1183383568,-907520276,1975520057,23062787,607339658,1967144128,241077050,539905920,-550280064,1077103744,70468854,1207305845,192152627,-2146541941,-2147208369,-1962658996,1200295518,-297402074,19416971,1187506758,-167771674,1975530308,540967723,58011653,-956232471,2116,-281844608,-1058781497,944031232,98214144,-939768183,58950,1443583,607339658,1971338432,-327253226,-955943680,536929350,-1996113247,1187511366,-1979710746,-1071369404,259375164,-13089594,-1996250463,1187511366,-1962933274,1141498950,910477106,2122514432,880082956,31882883,1586179700,474450920,1948141323,343408419,1998723,1200293748,-337998820,-396457207,-1961080949]},{"sector":3,"data":[1347558999,16777114,205949184,-1995684213,1183528004,977570058,-1947705717,1468730439,1011124494,-2093067127,1946216062,843380282,-1592364028,1178141794,-1996260078,1688277574,273037572,1183384445,507809040,1996443678,-361299986,65947275,-1957686714,1174661702,244338704,1449141992,1342210488,-1924087765,1343620678,186706920,1443722688,1342177720,-1914171760,-32773884,31882883,1586177141,41913102,125173515,-352159863,-2093118711,-109772739,80164233,1183514624,944015630,2122527467,376767206,949891,1996426100,411101198,-348633975,944031493,-2091515904,1946217598,-62485755,-626981909,-1070903291,-2093029296,15105667,1183657588,-1924131086,1344151108,-504885616,-2085071265,-1070903296,-230257328,1508397078,642026784,1183666206,-1873799438,1606608910,112726,1354771280,369510029,540731472,15105667,-1202314892,726663173,1149980864,675556140,-796143061,1284227115,642525994,1347600779,-2095049752,1946217598,860651583,-431584496,292864011,1946157373,146745,54341236,-348228608,862224419,343835631,-2096204796,1946293374,28857864,-118992896,1996445313,112660,2156624,468436619,164423766,1586231019,860354062,1458402320,-350768408,384325351,-1008604286,25359848,141986563,184974987,-385649153,-947191533,3997732,-1959823873,8332743,-134330743,1946190023,179979,-1996601718,720058692,1090406134,1317078388,-1962966786,1149828678,114488,1048777963]},{"sector":4,"data":[1946157502,33522445,-8190604,-1090292477,-947191806,1946157373,146724,54334836,-1961200640,860354271,-385649376,46071955,-2087458048,16782910,29295477,860157440,-385649648,-11140973,-402269642,-6651471,-2097151745,762643199,6569603,1443394816,1342178232,-2139022616,-1710214324,1746,158646283,1342177720,450458,-1801824768,-352321529,67076948,1048779637,1962934718,944031287,860651520,28857872,-6664192,-352321281,62412340,-722972672,860651648,1149916688,-11495368,244319350,-351878168,-1103199464,108265473,1181383,1465253889,-956299288,4614,-806829312,-1962802303,2123040374,244340484,190511592,-165251648,1963995972,860223008,1444574224,98187007,-1702822680,1535,271797376,28858198,-1410838528,-689388672,-1962734719,2123041398,140352008,-1073020928,28838260,1771720704,-2147483640,1458516836,1342177720,-2139077912,-1978649780,1183332421,108954620,-1977518848,1183332420,-166809362,100920942,1183384796,-396996372,1183416438,1996445418,-2138052372,1861619376,-603585540,-96040700,1541953360,-263812736,384976525,507874640,244338718,1465731048,-386238721,1183481957,944015612,-92864682,-386894081,2122547320,779419654,-1971315736,1166601798,1150113592,-397402594,2117697583,1460106730,1458337535,-11073557,1996483702,-2142574358,2143414359,-396945685,-1705572827,65535,-62485930,-1159180136,2145052799,29244985,914949237,-1923743298]},{"sector":5,"data":[1343681094,1451223784,1451212008,1342177720,-2088795160,1962935934,28858120,1978159104,1376175999,-1023410176,8439016,-1172403456,172460805,-2135430973,1988821251,244340230,190357480,721778112,9759168,16402119,-1930930688,860129792,-2143502300,-397015435,1676347398,607339658,1967144128,233330182,-950736107,129606,6567481,-1202321291,-397393917,1157005051,863244339,540230902,1486491509,1442840584,1342177720,-343970072,-6662618,-1711275777,65535,16777114,1958742784,1354771218,16777114,1443425024,98187007,1451178216,-1873756117,4384782,16416387,251594612,468189206,112651,2143873219,512426241,1200293306,-28931828,494190603,-1946263925,1194918982,1392932152,820514448,-27358209,1183385483,1975520254,-622279709,-1962800257,1686112374,-396955853,-396984688,-397014932,909713155,108331098,5899975,909705216,91553830,16777114,1177958656,-955878137,476678,-30000896,-955878139,392710,1354771200,1291446358,2122516203,494146284,-1928563457,1343679046,1354771286,1358954424,1342177720,-1108865392,1975520085,108954589,1443722496,1342177976,1347469355,466282576,8566870,1354771280,-1108848560,674642203,-955878144,10246,41714432,-16223232,-6684044,-1979711233,-1071369404,477380668,3439747,1962870900,160471604,2088960000,141819922,-1710066433,65535,2110449750,1080451,1962870900,-26096,1153826816,-397017031,1153892826]},{"sector":6,"data":[-2130706428,1946573566,2028492292,-555170999,-1962868098,213386870,1256738816,-1980200119,-16053636,1689782644,172329216,-1962654327,2011743175,-16645506,1996424822,-26108,-259325952,359986699,1326731,91553547,1963226425,-339244284,-348288250,-1010816017,8293608,138840836,1946830347,209095545,-401698730,1853118060,184974475,-1206159873,-397410289,-1073002276,1149852788,-17265914,898302789,1223,1174285291,-1003123965,1625819206,-1959562240,1074039605,-1073496061,1308508224,1460603907,1220143184,-1962719746,1958742837,175570718,-1710721281,65535,-16479408,21948420,28837007,106859264,-33399671,-389872819,50363909,-401973621,276037912,-402241852,1149960203,855798786,55443136,197364931,101676251,166632016,-1073020928,20776053,210486016,65750598,990168707,-1007034364,8242408,173968131,1946212328,105301081,1962920680,55442951,1256964147,-6671105,-16776961,495649396,268371851,1308496245,686315267,175541064,1149878323,-1926829306,898303060,-2029996056,82574550,-96171603,-126488005,-360508117,55442948,1034881,-387427753,-1933354937,1430622424,-1910575989,15499736,173968129,1946183656,1359776552,-1929096053,-65890,1393953398,1393971794,1342243000,16777114,106888960,80118617,1308548578,49120003,1562371467,445005,8180200,73304833,1946167272,-1928557788,1065419356,292716544,-2130690175,1397820279,1342326667,1531414248]},{"sector":7,"data":[79922009,1308550370,-1873558781,1423108110,2139819892,1962871558,54918664,-16042613,871773123,-523123776,-268181295,12797510,454233095,555026944,1195062319,1967283024,1852798068,1768178944,1951596660,1667855457,1936280576,2020557428,1919111936,1114401903,805335649,1397310464,1497451600,1296387840,5130562,707668572,1129864192,607012680,1392518180,1163154265,1769406541,2003788910,1868759155,1936879468,1852794368,1493201780,1920287488,1114795891,1802398060,1702125906,1635209984,1970228592,1967285619,1852798068,1866727539,1701601909,1667853379,1701860203,1392534629,1819243107,1918984812,1667318272,1869768555,6581877,1769235265,1767138678,6646900,1667329609,1702259060,1819568468,1699545189,1459647854,1868852841,1767309431,2003788910,1835102790,1699545189,1700033902,1459647608,1868852841,2019906679,1767112820,1415933044,7632997,8107240,108432129,309655051,-1070381834,1156975733,108273715,-26026,-389873664,16808853,-167348597,1975530308,860157446,-1978698720,-1071369404,225804348,271795446,727058292,-1930932032,1793639290,-1962737541,2123041398,-396929528,1048803865,1962934296,1996445195,-26106,116064256,-26026,-389873664,33585985,1443395211,1342183608,1342177720,1347469355,-890761584,862224407,862224607,62412527,-1628942336,860651641,862224400,105286367,1446528136,-1022989848,8062184,141986562,1304662,108461910,16777114,108954368]},{"sector":8,"data":[-402426624,-389872142,16808610,1443133067,1342183608,1347469355,-401698736,1156978545,108380211,540232832,1686115307,-1202262221,726663177,1347440832,1390939792,-1103742697,-2096139007,4670,-1202321291,-397410300,-1202292447,-397410303,-396986087,-397016268,-389872118,16808585,1443264139,1911033488,1975520082,-339727594,860157465,-151620592,1965044548,-1561831696,200313614,-1192593930,-389873663,33847897,-1962379637,-1873410434,1379854350,91602955,-1159086037,860157440,-1207602160,48955393,1183432747,860130042,-2143502300,-2098658444,1962871552,112645,-1070923029,1962559035,1962871646,98214171,-1577564535,1183385018,83854332,-1202316684,-397410303,283867275,-1996113247,-626919354,-62486267,12249174,540232832,-281844608,141885195,271797376,-550280064,-126419114,1450761448,737965823,-169324352,1962871672,870864435,187558656,959018495,1962959926,62412323,954749056,-1978012808,-1071369404,125124668,-1796712618,1443490576,112727,-162469808,-1007008117,7946728,74877697,271797376,1064579,-1962314752,1207305308,108298250,16640086,1153893867,1442840596,1342179768,1342177720,1347469355,-286781808,-1410836971,73173764,-2146809866,-1142422667,317216375,73173880,-2146809866,-941096075,-404176009,-1962867848,-397015946,1552678457,172460548,-125049814,8447873,-1947728523,1443162999,192400360,-1593149953,1183383568,1975520254,1962890762,18343956,1459504777]},{"sector":9,"data":[-1962920216,-62486268,-1170800810,2012211205,108330763,16678531,1996427380,507809276,-25755824,-386869528,909735774,141885540,-2147239850,2001332304,2020665539,1988821249,-1172403452,209685253,2105743851,225706004,-1709935105,498,1328583,1962818304,188582662,-1008503297,7881192,74877697,271795446,-11138443,-402269642,82540417,-12654506,2015684803,1988821254,574917380,-1994505173,1150022726,541338404,-1946401143,119873092,-28931840,-1988686104,-13896122,-28931248,1358185987,-1694730497,65535,-15992693,922698612,-1705573454,4277,200820361,-13470528,-16534986,-1070858634,-193527984,-231681,1962931830,544538398,-1174396744,1347551436,16777114,-1305018624,-126419197,16777114,343705856,-386500865,-389843240,33716118,-2096728437,1946158206,-1305018605,74907395,1126810,-28931840,91602955,-352321096,1987962968,-1705510773,65535,1541953111,1962891126,544538398,723666059,-1957683644,1143678020,922701856,1149961138,468254,1354771280,-1174396744,1347551436,1091994,-1305018624,-25755901,1080474,-6662400,1459618047,729177064,401130432,-1962868617,909706358,141885538,-1873756117,490334222,76428857,244319605,-1015869464,41367784,175540995,-1962508661,81351,1586174325,206015240,-1946401143,-15991682,92998004,201082505,200308160,-1962380033,-1996191483,-1962153163,1200293982,-1996191476,1586170999,172490504,1995434179]},{"sector":10,"data":[1988821506,108956424,-351484029,1949645062,188582662,200701439,-1962248961,-1962571516,1342113374,-2081897718,-1962803082,-1202321802,-11534331,1149961334,675556140,-796143061,1284227115,642525994,1347600779,1055395472,-1696021741,-1962737546,1178143302,1342665736,-402229505,28901312,-2098674944,-1962801034,1207306334,208977971,607340426,1954561216,17819907,50757251,28837234,721611520,-129594944,2122577451,57999878,-2097150786,1963198078,245251,16285315,512427636,82511322,96083595,-385056885,92995763,-1946401143,1183397957,-96040458,443858955,1586171883,947880950,-1961921536,1183397959,-161575946,-1070381066,1569450101,172488196,964392196,1987315838,16416387,-167050123,-167042443,28837237,721611520,139365312,972048009,91617870,-352321096,1002449666,1249243206,16154243,-167050123,2122519925,259326982,-151626101,1948267335,860354054,-2094304248,1946220670,793114118,-2095090624,1962997886,860222982,1460892688,1342183608,737703679,1996443840,-401698810,2123043361,1962871804,-12130045,393541131,-1157627976,1347616767,721966731,1388743616,1354771280,-1016131864,7690472,175540995,271533302,1183521909,138808070,1150095476,-11526634,1996425334,-401698810,1283477792,1283461167,1283461166,-389865425,33781029,1586230827,209685256,2117667307,-1962380282,188582903,-1946978817,115917766,-1593835403,1386414164,1354771200,-1023037208,7647720,373195520]},{"sector":11,"data":[1232404736,100548227,722367744,-1202696000,-397410303,-22849362,-29457659,678690821,100546303,266866320,1648264185,410320896,100546303,1342179000,1342177720,-11485141,-1878655434,289925134,-351928671,-1010816254,7625192,74877697,-352160629,862224394,-337094945,187993087,-1007520266,7618024,74877697,-352160629,367547918,860651773,-404204000,187993087,-1007782410,108273128,209095429,762705419,-1988944152,-1202654138,1344144710,62797567,16777114,-193528064,-1200408600,726663175,28856512,244338688,-352030488,-1946211518,1175128134,-1927056374,1343682630,-16091393,1150093430,-1873797602,1356326926,527745035,385369741,104851536,1465317515,-16353537,2112357494,1962871666,-593864954,-1023410156,74704104,209095428,1443528331,184623848,-385649216,-16056038,2088969333,141951246,-1710328577,5496,411383,-385649536,1153892512,-2147483378,-369414300,2088960153,175440142,411383,-385649280,2088960137,225771790,505300109,97249360,-351386487,243041048,722629888,1347440832,-26032,1149829120,795115534,242548731,1460565247,411383,-1207601792,65732610,1342178488,1404058,1183401984,1958743034,507809063,-2098704354,-129595131,-15829761,-1202712972,-1706033151,6027,-96040632,-1694992641,5510,16416387,1962872181,380279310,1153892352,-2097151986,1946159230,793542660,105313796,-2096466942,1946160764,793542660,243041032,-955878400]},{"sector":12,"data":[17124870,105313792,-164793343,1946420806,860157446,-148802302,-2147482042,1317012597,1955267334,1443752706,142016343,-402229505,881553736,-277481973,1920002243,1988821248,860157444,-166431728,1948267332,73173769,1474435,28837237,721611520,-1897348160,-1962863246,1156974198,58003502,-2147356439,1458515556,1450261480,1342183096,-1993907992,1686173254,1183706927,-1924131102,1344153156,1172835984,507809102,1150111774,-1873797610,1312221198,1354771286,-1959994648,1284236870,642525994,735465097,-498717759,-1948760439,1284237382,676080428,737824393,-465163327,-1948236151,1183384644,-153580580,1946290759,-662797562,-1961921280,1207360606,359923978,14712451,1996427124,393452278,-397017088,854159557,381179393,-756527104,-565802714,-1989105944,-11478458,1704648310,-1962934249,1143726662,-62486234,736380555,1183393860,-364474888,1150111766,-1873797594,1301997582,384452237,-59310256,-1862764801,1310058510,384452237,-364475056,1183666198,-1873799454,1314383886,384452237,-364475056,1186484246,-1873797627,1313073166,-1948616961,1177283142,1183535356,-129618964,-297366704,1357530667,737166987,-11473850,1996479094,-327745558,-1174396744,1347551436,1123738,-629735680,68826879,16777114,-629735680,-9425944,-929374602,-1929379817,1343676998,-1962712856,1996445688,28858358,-1231400960,1459617815,723928203,-1957633466,1177233476,-6663964,-1929379585,1344153156,-1996278552,1347482694]},{"sector":13,"data":[309335,403020368,-11141120,28898422,-397389824,-1705545884,6096,-1695254785,6104,-1695123713,6155,1354771286,1342177720,-160456984,1975530308,507809058,-353873890,-488702,-16437194,1459957814,1342178488,16777114,77223680,-1023410160,7376104,108461825,1342177720,-1023409688,7354856,108432130,1865869398,271533302,1686115188,1150152495,-1924129250,1344149060,1172835984,778338380,860130031,1077723172,727058292,-588754752,75399978,1443656704,-1202667477,1347420161,1450098664,1342177720,1863444560,294531,1955272309,1443752706,-1202667477,-397410303,881553147,-277481973,1875437763,1988821248,62412292,-1070903296,676629328,1378239627,-401698736,961940625,1963048502,178181,-1070923029,-115939248,1872292035,1988821761,140413702,-351502453,1962818317,1996445447,-12261372,-16040565,-389812363,50556857,17450742,-13951372,81540747,-2091512341,1996426950,108461832,-1946173720,104548295,-360970980,34227958,922684788,1996424098,108461832,-151018776,1946421830,-1170800883,142016261,-402229505,-389808241,33582886,-2096728437,1946158206,860651526,-2147161328,1458516836,1450054632,-397361109,-389845520,17067778,-2096859509,340030,922683764,798623024,-1929379814,1343682630,503662264,1962281808,642026757,1186464747,-1873797627,1272965134,385369741,452631120,815988736,48808709,-1962735761,-1873409418,1189799950,91602955,-504774613]},{"sector":14,"data":[793048576,-2146667512,1459040100,1347469355,-999439640,-953809314,3655,-401698730,-125100505,637951684,2088976265,91488526,-352321096,-994039038,-1993996706,-1073017785,-1705557644,4336,949379,727125621,1347440832,-26032,669712384,1460565247,16777114,1962889216,112654,357145168,-11075584,-879096204,-16777194,-1281749388,-956301292,3652,105286487,84432523,1347551236,16777114,-1909049088,-1961528060,1207305308,108355594,-26025,-1873346560,1795549198,637951684,149447,793048576,1444508676,-401698729,-1073020685,28837237,721611520,106874048,38242598,-80780160,-389822581,50490889,1443526283,-236450160,1958742853,106873913,960465702,1963232822,73173785,1611286518,-1202255243,-1705967617,65535,-401698729,1589930708,2139301382,108265484,288856663,-396951552,-389845828,33844602,385369741,108461904,-1878755585,1234626574,385369741,-26032,-389873664,67464605,818819,1183516277,205949194,-1928694017,1343682118,82316944,209125190,-16091393,1996425334,-163148538,244338710,-1023409688,91056360,176063238,-14912760,431493238,1996443648,173443852,1183563819,-1873784306,166193166,-16103799,1996426358,108461832,-1878362369,1257170958,1831856323,-1902050814,138819844,1996425333,-401698810,1996450279,1357832,108461904,1347469355,-1427632496,-62486263,956599969,141887558,-1878624513,1777788942,-1006877045,40693992]},{"sector":15,"data":[173968131,-1992800373,1207368774,158629939,91602955,1183433611,-59310084,1342183864,-1962379521,-1070922154,1376405131,-401698736,-389871267,67267769,-1878231297,1151526926,58048523,-2097107479,1962937470,12708099,425603,1586187380,793245196,-2143456248,1408708455,1347469355,-1955894552,2139294814,678822158,637911947,-397402624,1183448753,207522812,-15828993,-1202712969,-1706033151,6686,-1694730497,6507,-401836289,1586178329,243237644,-2091355135,1946160767,242745155,-16091393,-6682506,-16776961,1996425846,175570696,-1962379521,637865030,-1873797632,1222895630,-16091393,1586169974,642222860,-1957635849,-654890937,-401698736,501958771,-16091393,244320374,726120936,-15602752,1996426358,142016266,1625820816,112708,1809311939,1988821248,860157446,-1962576704,48969796,-389824469,16804734,-1979418997,-1071369404,91570236,-348633973,-1010816254,7038440,74877697,1955267563,860129848,1077723172,-963906444,1800202435,1988821248,862224388,163075807,28856320,-1070903296,-370651056,1256740359,736674666,-1962868117,2089485430,163075640,-1070903296,-397389744,-397015092,1183383745,1958743036,-1948742904,-351827708,-1996190971,-397016507,-1073020110,1173759348,108331571,70468854,-396948620,727149036,-907521856,1150113641,-1202708962,1347420161,-1007242776,7016680,141986563,-2096726389,1946159742,173968237,17727363,2013203062,-1705552370,6047]},{"sector":16,"data":[-1962254709,1273692743,84559499,1344143390,244340566,-1958261016,637864518,1448091136,-401698729,1996441407,-396929526,-963942047,443860747,-1207273729,726663171,1586188480,676825866,1378240395,-401698736,1586169665,-1995994358,-1073018298,-389829003,16935502,-1962647925,1972058239,1978874626,-339727603,956599055,108266566,-167037813,-963906699,1781065923,1988822536,947686158,52839819,1183386694,138806262,-1946532215,1174612037,-129595126,-1996077565,-396886970,2122541316,57999364,1442879209,184691176,-385649216,1187446923,1442840816,1342177976,-1994452760,-1070858682,-87037872,-163148458,283660310,-1192733079,244340328,-1994821656,-1072958394,2122516084,292880638,-260636841,1342177720,1342178232,-345476120,-28931293,1357923977,-193527984,1708442,79187968,1083854848,184549404,1037139136,-864092159,-386631937,2122541240,141820158,-1694599425,8011,1354771287,1449676776,-335964440,507809050,1183666206,-1873799434,1165944846,1753475158,1354771286,-1016582168,74007016,74877697,-401698730,-125043297,-18880426,201082505,1466528960,1459233000,1342183096,-1994501912,-1072955834,922685300,1218053424,-1962934244,816053830,1150113285,-397402594,1686136899,1586224943,-1996190724,38112007,1971913865,860157442,1445295120,401084048,1975520066,860157467,1460761604,1449646056,1466416872,-397361109,82536368,1742465110,1757210819,1988821505,860157446,-1207602160,48955393]},{"sector":17,"data":[1178320939,-2090765308,1946289278,862224475,75400175,-2147191808,-1961872564,-16041860,1173767796,1081417779,271795702,-397002124,2122540928,108331268,1737222230,-1923674389,1344151108,1342177720,-197072816,1354771286,-161004568,1946301253,1441289995,-1070901401,1731389520,-126228394,1753475267,1988821248,244340230,188771304,-1977715520,-1071369404,108347452,-18814890,1149898731,1019225139,1443263872,2078805648,1390986209,-1962540952,-1873407882,1077602318,930398219,607339658,1967144128,1996445205,209125134,-16091393,1996425334,-38148090,1149901291,1019225139,1443919232,-15829249,1996426358,142016266,-1008695320,6800872,74877697,1149902059,1019225139,-166234816,1947218756,860157446,721712160,-1962218560,-167036812,28893301,-661863680,-1957345904,-661774612,1024214667,1098186784,-1559869813,-1557266348,512449963,1195050548,773027084,1571624587,125157947,-1960394098,-1996488682,1347423319,-397361101,-6671097,-16776961,-6682506,-402652929,-1763099336,1064192,1183578229,5546758,1571529518,-661780706,244039731,149094428,1232528201,283837155,1376684838,644670208,5508667,1642816884,-1057075194,-26032,-1070399488,-26032,-1962475520,1358968334,1359349987,16777114,251594496,512426012,-11337698,-16768970,-16768458,-16767434,-2097142730,-6669629,-402652929,109969598,-14286822,-1207958986,-1705967617,8526,1359405913,16777114,-2097041408,-443874579]}],[{"sector":1,"data":[-900899553,28377098,-919400725,-2093556597,1979649151,79227139,1167120524,518818645,1183570062,165892110,170138,-339135744,-1873784818,1051060238,-399215528,1348011267,922693200,-13739349,777693494,1400780543,2083979054,142016339,-16353537,1996425846,-2065149684,238770492,57999484,-2097119581,-443874579,-900899553,-661913590,-1957345904,-661774612,-1962387829,512624198,199753812,49120000,1562371467,313933,1851011,-1559530238,378077220,251592742,-1899823076,1048782528,1946288156,2080783120,638612736,989862049,1962966534,2080818950,-1023410176,1167120524,518818645,110024846,-1943142316,861777670,104345280,326458794,939931942,638350592,919238,1452953601,-2097151967,-443874579,-884122337,132892979,28400216,-1940893103,1430622424,-1910575989,-11053352,244321398,1966978792,11987203,2122578315,57999368,-1593291009,-259325868,872378600,-1432211776,650546781,1442855075,-15698177,1996426870,175570700,-16222465,-401734026,-1073005604,1996446069,175570700,-402098433,-1073019284,-1964455563,-6664192,1476395263,956331496,1946504710,1030162,1946181864,209125130,185725928,-1197181504,1323827475,-16092160,166202486,1975520051,1962871698,5236785,401083984,1005082879,780200704,648560259,1343058944,-15698177,-13758858,1478927902,175439627,638475972,889341835,1583284242,-1962742397,1297948645,-1962930998,1451952718,56879368,560306768,1451819008]},{"sector":2,"data":[-16192752,-6680458,-1912602369,916661958,-661863680,-1957345904,-661774612,2126796630,650130182,-2130555509,1946222841,33128725,-2129693695,1946223865,100237577,-352095231,642879614,637826559,503870975,1342210744,372703006,898311684,620950504,101384208,-1706033102,65535,1952038923,138841680,2030109370,-2133264635,-511639102,-1073020924,-1960439180,-478084515,-75366405,74711296,-269951,-930361077,68558475,1448235347,-952631470,-1912602617,-14284730,-14284683,-401734027,1499135316,-498908325,1593946335,49120094,1562371467,313933,1167120524,518818645,-980232050,126551646,-2130554997,1946227705,419004682,184841217,1345025216,74973009,-16222209,-108984713,108265752,18086273,1334513013,105843464,1610548596,-1912083706,-401697854,-310181805,535137026,80366941,-1864856576,-326412987,-1948742114,-1873605026,1001056270,-11330188,1996426358,142016266,-1962510593,1183398471,-1928915442,-2019946914,-2097151967,-443874579,-900899553,240648206,920423248,504127371,1048784391,1946166956,-594849006,1342620547,777197062,648683263,-2091165689,65682115,-1946157019,-594833192,207588150,1979710339,-372536571,-1064435410,1602954835,1960512260,2139170312,1951092226,-1715457276,-1960420413,637555726,1946963771,1048784552,1946166956,-594849006,1342620547,777197062,648683263,-396666873,83911437,5521035,-1911660917,480316511,1958742784,1946303499,590060039,-286588928]},{"sector":3,"data":[-1559345525,1183514654,2138892,-1559607669,1183514658,2401030,-1559738741,922681382,-1909587954,643291142,8140543,2117533478,440305408,62412544,470189824,922701824,-4718590,-1667608321,-16777183,-1711275466,65535,2468506,473858816,-193658624,-28262349,-140881728,-1895825371,-1895818234,771758598,1473775246,2114359078,110044672,190316668,-2096073536,3646,922683765,10092546,-1593835482,378208292,-389873626,50356813,-16359797,-13235594,-13236617,-13237129,-13237641,142508855,235304192,-335853592,-957870588,-1023299330,65535,6429928,106859781,2117533486,922693158,1397827196,1944587920,50011,0,0,0,0,-286785536,855834721,1586207168,-294134,109971829,-1014824876,-2096108749,611517947,-620504317,647676801,1183516430,139889414,126297850,39290662,1977289723,113716743,88017,1419875267,33260288,1200292726,-1957444852,126551132,1515963227,995317849,990607306,990868161,202078146,-1036270847,-1053034126,-1070336649,1532582595,-486428590,1959475990,33129234,-620034187,-1070397068,240341443,188510696,-1909537856,861776646,1048782528,1963065372,-876544510,39911912,1781959427,1979058944,108461922,-1207404801,-397408710,-259315576,1023818913,292880382,678739979,1946157373,1711720231,-352321280,71732026,1946288445,33832202,121439604,-1207339774,-1873805296,1004005390,468448811,6686407]},{"sector":4,"data":[1552613376,407341828,201213577,1342731456,101201663,-1990204952,184572982,-16026122,-16381898,-402257866,-963944498,1618798787,1554055424,71710976,113707381,92,-1019891480,39889128,141986562,-401698730,882981003,1778792710,-2096335616,130110,244319605,188470760,-2096466442,27198,2129134452,1745274677,-1996488704,184576566,-1962511114,1755515972,105286400,-1023383901,241196264,376867593,621954699,1183383553,306613242,-1996488155,1183578182,271634,1457800841,-401312001,2122538849,125042936,1342177720,-2090906136,1946215550,1996445203,175570700,-16222465,1593771638,16050446,209125206,-16091393,1996425334,240582406,-2097094167,1946220670,-431583929,-1070903274,33601616,34191440,112720,-401698736,-1072956938,2122530933,494141690,384190093,1354771280,1342243000,1342244792,1342177720,-739766640,1975520249,-401698787,-1175717486,384190093,1354771280,244338768,200916456,-385649216,2123038855,318735336,1983479668,-1962248730,-754404921,1946303720,16744716,-2126808063,2130774015,-394854603,-1149185,244378742,-1996170264,2122573894,242483428,1996443734,-294191126,-370379009,-11075780,1996482678,-294191126,-370379009,1996488511,17086696,17283152,-40179632,343261195,384190093,-401698736,1183709768,-1873799450,-84350962,6960697,384369525,-873937921,-1929178274,1343679046,-16353537,1256719478,1975520047,-373282043,1183515702,-163149334]},{"sector":5,"data":[1912668221,16858389,-706149513,17054978,87885938,-385648895,2122384072,1963065590,-330921202,-1947842935,1183444550,-1911297048,637737478,643475873,1521161867,-1981397367,1996482646,-428408856,-387287297,-259261094,662042123,52037262,-1947842933,-1557731242,-1993975127,-1923437802,1343679046,-953192984,31750,112640,1443083753,5912319,201126632,-2067264,-1075311500,1958742837,-360808183,-814415360,1962916587,899409932,259375115,8390343,113704960,124,-1895873815,-1962731002,1452009030,-1448925464,378087002,1183537835,33635830,71110004,1023964162,57934343,-1962895127,1207305308,175441930,6700675,-385649663,1218510981,1242991367,-229230329,91371383,2012235321,-1204405968,-1205177085,1344144338,-1542401,244377206,188356584,-1592363840,1178141614,-2096204298,721614406,122332096,-351844189,-163148990,-1962692957,1452011590,1577452530,13796096,-1996011357,-1996010986,-1207715786,1344144338,770066059,-1957691388,1212737606,-431584432,1342178309,1088964235,244338752,-1590093080,-1073020826,20790132,1024226304,829685762,1946157885,-2130056390,-23005626,104611467,-624897,1996424822,-71899132,58048523,1459551721,-402098433,-1072956473,-269935499,642026494,-1947843031,1177102404,-1949176856,1177099844,541363174,1183707371,-397404438,1183526406,33635818,71109236,1023767554,1031078407,6700675,1446411522,-1980673560,-661915578,1077037046,-2091899020]},{"sector":6,"data":[26174,163054965,-1207702784,-397410303,-1072997521,-588709003,-128021507,137578486,-169278604,-159481347,946995712,1048641323,2097152131,114435,8666752,-2130412288,-2147482929,34366,-813628291,1048576016,2097152146,80707844,-1824620544,75300864,577409,184571553,1946179590,-63012005,1416953857,14829255,-497120512,5685120,-1908640768,637737990,1473591039,52037262,-1422459098,922691162,1996446377,-260636686,-1542401,-1202198922,-336134141,1342308869,6960895,-1959644440,-2017009058,-16777130,2122572358,-1317272606,-159973546,-394854569,-1673473,1996485238,22407408,-385843549,1183514003,-1947981076,-1811482888,91521024,-350224200,734014210,-565802542,-153069943,-2147450235,12060020,721611584,-1982714944,1451874886,-163121444,-1207602175,48988160,-768884693,-1948629493,1317723222,200092397,-565834815,-1948232181,-1950340144,1183444550,-27883012,33308291,-1910803200,637738502,648298115,1460630528,-14266286,187081246,-385649472,915143937,-167051166,1048781941,1962934372,-51386109,6567563,-1191807233,-1202716416,-397410045,-1072956980,1182991476,1149961462,-465139444,1513553750,-103421952,58048523,-212759,-1612127114,1958742834,-55318269,-387680513,-1073007999,-471268491,1996445436,-106043384,58048523,-1912810007,1343679046,1445725672,1475770111,-100609,1996487798,-260636686,-1560262936,882966654,1543911686,-385649664,-8127365,-385649648]},{"sector":7,"data":[1048837235,1946158248,-60167933,-624897,1996488310,-401698564,3997768,-385647359,20839507,-385647103,-957809589,-62527185,1517873347,1988822784,1412890384,436637184,922691075,-14263637,-10835658,1996424822,175570692,-16222465,1996426358,-1998039538,-1964457168,-16580518,79170166,129519617,-504868863,1958743032,138868495,141893632,755648139,65732612,-1022736757,5923048,106859265,-472783919,64915339,65050507,1514924227,2122514688,91488262,-351910261,32815107,1342202019,-1557627928,-389873570,23085,-1023385439,5907688,106859009,-2020933846,-1013448574,5903592,6463744,1510729923,1988821250,244340230,187821800,1443656950,484970128,1975520052,-1946801406,989880894,191657214,1460630783,1342179512,1354771286,-401698736,-166988171,-397006732,1448144418,-2091361560,25150,1043929204,309592162,6436607,1342179512,1354771286,-401698736,915011145,-167051166,-1202313868,1464860679,1347469355,854068880,708740086,259260422,17414230,1354771280,244338768,-1946805016,1994965959,-1962736295,1149962870,105265420,1187450485,-1962933768,-768931770,283900043,957105291,695535686,16271047,108956416,823912535,-1980086647,-1202258858,-11534308,1589966966,1354771450,41418534,-890761584,112885,1495525571,1988821509,1979058952,105301765,1183522819,-2147277562,1954546493,105286433,1027605285,376717315,621168267,54337539,-1962183648,52758086]},{"sector":8,"data":[268647696,1183534965,1073947910,1950352189,-1103199445,611581953,621168267,54362115,956724608,1946271286,-1103692013,36628481,141934603,-1560166751,267061062,621168267,54333443,-1989315312,-1962457546,-955824586,476678,1681275136,-385649408,113705468,954,6569603,-385649408,1183449346,1006969862,-385649403,922681556,-2034761628,-1070903296,860129872,539354154,-1949160704,-1950340144,-1873784122,-185341938,57983499,-1979667479,52692550,58000188,721461225,27912640,607339658,1971338432,947191568,184654824,-1962510912,1793669188,1178009599,25880583,58048523,1459581161,-1996390424,-1072957882,1183518325,537076998,1965032253,-11278077,16154243,1149901941,635710003,1183383560,105286648,1025508133,141828099,137579648,-164953365,1354771286,621168267,54345731,-1207602112,48955393,-397361109,1185102738,-125926649,-385649664,2122579725,57934070,-2130770711,-369675420,922746621,112722020,-1070903296,860129872,539354154,-1949160704,-1950340144,-1873784122,-199235570,-1560255327,914949958,1048772708,1946157086,1513523460,105313792,-1962380031,1654851142,722004736,244338880,201148136,-385649162,1149894809,1019225139,1443263872,-1192751472,-63011858,712310785,956329121,578030660,-1157627976,1347616767,722224267,1813941202,-1949750528,-1873784109,1350625294,-1559477109,1183449196,1006969862,1445032965,1342211768,1342177720,708002954,2106852,-796143061]},{"sector":9,"data":[1185005611,-1873784313,-209459186,440406,105286224,154929444,45614453,-1207702784,-1974468607,-466996412,721428517,735087570,122069440,244338770,972248296,1962959926,-1170308340,91553795,-352321096,-1983894782,113769542,66490,28836843,1273545472,-2097086378,1946158206,74907419,-1528295792,1958742832,73304847,271796214,1207305844,91490355,-352321096,-1010816254,39215336,108461825,1239944848,1681296174,108461824,1342177720,-1957373208,1122550726,-1593769386,1183383658,108462076,1342177976,-1957339928,-389809082,22057,1347469355,-1017819928,55975144,1412890368,770172928,-1980086647,1589967958,2013210362,611837968,1442834627,922681347,-890765228,-96040659,-990095735,-1960379810,-1960438713,-389867945,16995809,5519103,-1993495320,1451883078,-94452484,679445286,638416128,19417031,105286400,709331238,1438116035,1996423936,1554442,108461904,1347469355,-1108865392,112878,1436281027,1048772868,1946157166,1354771243,104078987,-1710458881,65535,104078987,-401836033,1183395149,-61437446,16777114,-94452736,38242598,-1694599425,9143,-1202667477,1343103170,16777114,108461824,-1728052808,1840795730,863025715,1973047378,-16777165,62391926,1347590400,-1157627976,1347616767,16777114,540967680,494743301,1342193848,1343226040,16777114,-129595136,158646283,16777114,1975520000,-18409,1392508858,571472,-1873784167,1314711566]},{"sector":10,"data":[921419819,7224963,-1207077632,-1873805304,705685518,-713768949,16285315,1996425332,-25864,1996423168,-25858,1223163904,1845937968,-1207959552,-389873663,33576113,-16222465,2090468982,-1023410166,55877864,141986562,-401698730,1149906056,635710003,1183383560,108954620,-164793088,1963471684,112645,-1070923029,-396953461,-1873349713,1327949838,6436409,-1070921611,-401698736,1283521103,267061299,708002954,-2114417692,-2147481369,200749924,1443984639,1342180024,721843967,-1873784640,-254547954,-1006877045,5516520,142016258,-402229505,109979848,-1591344352,-1960420699,-1906661610,637739526,643475875,1521161865,6031047,48758784,-85408983,-1912471469,637740038,643474849,1520899723,637951684,-1993996407,-389873065,16995293,1443264139,-974647664,239373099,1459242633,-2097137944,1946221182,-59340497,2088968427,443809806,36914422,-1957290379,503708742,-1202708992,-1202716671,-397377536,-396959942,-259266603,-696912373,1397549251,1988821248,243041028,1443853312,1342181304,1347469355,-401698736,1955328021,1443293954,-1946166552,1979058996,535348214,-956235693,347654,876019456,71731974,244338718,184558824,-1206356800,-4521985,-1957670145,1344144454,1342177720,189627112,-1207601728,48955393,-389824469,50352933,-2096466293,1962937980,793048582,-952470520,17124870,208994048,187323624,1445622976,-402229505,-1072959101,-1202315404,726663183,1347440832]},{"sector":11,"data":[52823694,2117533478,922691155,552096636,-339727368,112643,1389619395,1996424192,175570700,-16222465,28837494,-960999424,8960512,468209746,209125120,-16091393,1996425334,1354771206,-1174387016,1347551334,-1023409688,139613672,175570695,3658650,-263812864,200431241,-385649214,1589903571,2013210352,2013210116,112646,2122534992,74711048,199999531,653287108,638076811,50753527,1452011590,787954,-6664110,-1996488449,-1072956858,-1930886283,-1305018624,-1046851581,-1996488650,1996486726,1354771216,919575120,1183383552,-162100748,-1206880513,-4521985,-1706012160,14045,-1979955575,1996488278,242679568,-1005816065,-14225314,-14285705,922682999,-1070922830,1996443728,74907398,1530266,-1305018624,-126419197,1104282,276233984,-624897,-6622090,-16776961,1996427382,-59310082,16777114,-92864768,2026650,175570688,3667098,-263812352,1962034699,-92372218,-14912256,1996427382,209125134,74069759,74200831,-1728036168,-6664110,-1023409921,5341416,1813416704,-1581241596,-389872534,16797998,-402360577,-389866497,33706341,-1996459871,1178205254,-1961921528,1923286598,138840832,-402624349,1183514716,1122550780,-16711599,922682998,1072170504,854115152,-16777135,-2097037306,114750,904397692,29401344,1360783555,1048772608,1962934720,1354771209,935631440,251592704,-1063190080,-18300159,-2097086384,1946158718,1345644549,686293995]},{"sector":12,"data":[-1477917872,-1962933424,184578102,722171382,-1706012480,14318,1048784619,2080375232,-6662617,-1996488449,1451883078,1975651324,1916177158,-1381632,1996487798,-25862,-1705639936,8613,1352919235,1988821248,28857862,216551424,-1830239487,-16711600,45614710,-51884032,-2098674944,-16645552,244320374,187197160,-13798208,1776813686,1975520079,142508830,-1961004032,1602947166,172460548,-151239032,1965096006,-62458362,-1207602112,48955393,-389824469,16797761,1443264139,-16763672,31982196,-337067264,-1962868657,216728694,2091094,-402492161,881590252,-260704757,1343482051,-1070923776,518224,-397361109,-389816131,16863166,-956008821,23558,620226560,105922187,-167044373,1966671220,-2146470654,1962936189,38127369,1170604032,1032520198,-495583477,1338763459,-1070923776,112720,3532880,1337714883,1988821250,1346276102,958393094,410322037,490880,1170608756,727056391,-1063628608,-1207959526,149618689,-16040565,-1070867083,1329916099,1988821507,244340230,187132648,721778112,9169344,17057526,-167041164,1190536052,494215172,-167486325,1948256839,272927493,1552641515,172488196,1443263552,-352257048,1996445278,5826564,-1946401143,184963134,-1975683648,1166541894,41257222,208991755,74841942,-402360577,619381691,721712639,-1706012480,15187,721712639,-1706012480,65535,-16484865,-1711007178,15173,-1710983681,6746]},{"sector":13,"data":[17253830,-1023130229,89039336,1344178946,125796358,-1961396992,1194919494,-1978698494,-467007929,1963214395,112645,1187476459,-1090518790,-1070922160,-1980217719,898364998,494204427,490624,1183529845,38025478,1149904245,1004808710,460653638,33179335,1979058944,-125924570,494272267,200703627,722892287,-2094339136,1962934908,-125925115,2122908651,-335639562,959810485,1946570806,-1996190963,105947397,914949257,1183516240,132695034,-1962868402,2089485430,141900036,-11137420,28837493,-790081536,141920514,-1022999157,55453928,5171200,96083595,-1207142401,-397410303,1049297138,-164952868,-544534293,-15808637,28839031,-605532160,909723136,-360774372,97656459,-1207142401,-397410303,512426182,2013201882,1354771212,-956253720,20998,-1880571136,-1962932915,-385462218,2088763531,57999367,-16744215,-1113979788,1073741883,1962931573,-26108,1183383552,-61437446,1347469355,647647312,-1996488683,1962933830,992844292,1183383552,41222134,-1979419393,-467007932,35514448,17188086,1996435829,74776574,2016666,1996443648,112886,516921936,1962868736,-25755900,1714074,74776320,-362753,-6620042,-16776961,-442827146,-1962934218,1962281780,-9508605,1295247555,1988821504,-11081720,108461910,-1023403544,5037544,108432130,-11138581,132646006,187992832,-1007454730,21808616,108432130,-167486325,1948256839,276597509,1552617963,172488196]},{"sector":14,"data":[958035008,359991415,1460043659,1758874,-143310848,28858198,1894273024,41221889,-397361109,2122579878,343146500,539968758,1686113908,1157029679,74784819,-593369002,1281943747,1988821505,243041030,721712384,-2089948224,1946158206,73173806,537544694,2089485684,-1961891056,1207305308,292831242,-1962379383,1465255551,1342177720,-352252184,28857872,1443162880,1342177976,-1946364184,243041272,1462203905,1701018,-1137246464,177886981,1342177339,-1207012097,-1706033151,16000,-1137246377,1026595333,-947191808,1273555139,1586168320,243237638,-16222719,-476445578,-16777158,233309302,-873938101,-1962868405,1552614518,172488196,-401705952,1149829167,1975520016,-339727580,73173795,1074415606,-74770572,425347,283643765,105220352,-512442357,542151,112640,1267263683,364380160,-17908,-1070903214,1347440720,-6664112,-1023409921,38514920,-1172403454,176128773,-1958644736,1194919494,-1204194292,1344144710,-1981950744,-1072956346,-1070917772,88520784,-59310256,96083595,-15960065,-521664906,142016257,-1694730497,15704,-1694730497,15712,1260185795,1988821762,1996445192,4450308,201213577,-15633216,-1706031498,14756,-1694599425,16218,17057526,1150092660,-1929123034,-125100476,-16353537,41287477,3771546,108461824,1979659775,966302210,-389873664,34097866,1443264139,198725352,722367936,1347440832,989829712,1541996544,-196702975]},{"sector":15,"data":[1190547478,91488516,-349813619,507809027,519063177,-401698736,1183655616,-1924131084,1343681606,503662264,-401698736,-24434803,1173758187,-1217130445,540231158,1183691125,-1924131084,1343681606,505824653,-401698736,2122917737,-756525070,200838110,-2083293697,114238,-1096738956,-230278911,1586171764,860326642,-2143502300,1927873396,71759615,-2096532476,1963003516,-10229501,134498038,2088962420,57999374,-1912646423,1343681606,4144282,-62486272,58048523,-2097109271,1979780732,71759391,1343845388,242548560,134498038,28837236,-1207702784,-1706033148,16025,268715766,1996428148,-59310084,87045887,1342177720,4149146,-1172403456,176128773,1444180992,-1018113,2013265014,-227082484,184570600,-162892608,1946223686,860157504,-163941374,1965032518,1354771252,-1018113,1962933366,753422338,1958742784,1444866852,-1948388120,860157688,722498564,1996443840,-59310096,1443001855,-1962931480,1979059191,-62485538,1230039235,1988822279,963701510,1869874294,271795446,1183671156,-1957685514,1344145990,505300109,-401698736,-1073011143,1183665012,-1706027274,6546,-899447,1996425334,79187976,983191552,-1996488645,1996488262,995859186,2122514432,225705996,-2146673013,-947900849,16781318,-25263360,-2096729087,1962999422,-339727612,187992841,-1198754314,-389873663,84560078,-1962117493,922684030,244319752,-940065816,-5050,755517067,87883778,-385649152]},{"sector":16,"data":[-1073545064,-1476448621,-947175362,1946198333,10697999,-2115435660,-330905856,2062282784,283920071,-1955337232,10567111,-1556278668,-160992000,1975530308,-330905759,1525411888,15484615,-2125206544,1946198527,-1543536378,-1958251264,54331462,1024553984,427032581,1946158653,474395,787160436,10747777,1187448693,-336568084,-330905823,451670160,-2131999033,-954995728,-261034938,1069157611,1071071223,1073168375,1183530999,-266322452,809306740,1023767792,913698912,8601216,1445952768,1342178232,-347643672,-297366247,-1070903274,33601616,34191440,112720,-401698736,1048633906,2080374915,-401698592,2122576353,393543660,18004054,138840912,1357661707,-16353537,244319350,-1008430872,105359848,175540996,-1962377589,992711,738084489,108954616,-2096204543,1962935422,-1983894776,1183385158,104112388,6948409,-1202712715,726663199,1347440832,1323830928,1782481892,57933824,-167636759,1946694468,34072835,5914243,-1959627776,-268419641,-152501387,-267371263,-286719115,-266322687,-420936843,-265274111,-555154571,-264225535,-689372299,-263176959,-823590027,860157441,-1207601728,48955393,1183432747,-196687882,-947191808,1978679357,22997251,-1981217922,-268419839,-1461124235,-267371264,-1511455883,-266322688,809306228,-380341008,2122514829,57999606,-2097052439,16782910,2062091125,860157441,1445950496,184644072,-385649216,-1705639575,3330,6436409,1525220213]},{"sector":17,"data":[112743937,28856320,-1070903296,244340304,-370967320,-1873411771,-885266418,-2097070871,1962997374,20179203,708002954,2106852,200820361,1444312256,184623592,-385649216,244318489,1445066216,545690,1996445184,105880312,2122514432,57999608,-352256791,-196687977,2122514433,343146742,29245059,-385649664,1048772837,1962999830,14412035,184829579,91489862,-352280129,-28915963,1465253888,-100609,1996424822,-193528060,16777114,1647720704,-385649408,1156972717,57942067,-385833751,1187512135,-2097151748,1946161788,309657394,-1705983957,65535,-262096816,1354771280,16777114,-96040704,326418443,126539915,-1996487899,922745926,-6683090,-2097151745,1962998910,280516190,-1070903296,-380612528,1172897540,-11736275,-1070922634,-26032,1072365568,-16353537,-6683530,-352321281,1996445234,74907398,-1694599425,65535,1346183659,1036743920,58060896,1040151529,-579538832,1961918525,-258982440,4048500,-1011583759,4541928,74877697,1292374,1354771280,244338768,-1008591640,4552936,108432129,112726,125008,1160046787,1988821510,-196702970,1150111766,-1873797602,557770766,8632406,1354771280,385107597,-401698736,2089542113,675580710,-1912846711,1344153156,385107597,-401698736,2122522900,880017412,1978957369,-62485752,1962296889,62412309,-1070903296,-162100400,1391740555,-401698736,961995169,1963048502,178181,-1070923029,-836310960]}]],[[{"sector":1,"data":[-196703402,-1957640405,1177286214,2129154300,417879619,-1813462044,-1962736316,1686112374,1183707182,-11528458,1996424822,-401698812,1183522984,-28931592,707937418,12592612,1946173501,8404328,-1069740172,-1591708416,103482630,1174471808,-163148296,2124501014,1356396292,-150699871,244338904,-1977540120,-1071369404,1316241468,3439747,1283475572,1962869038,1183536692,-28955656,2117533520,-96040188,1358317099,16777114,-129629952,972834443,511506502,-336050551,-163148439,2124501014,-1176963324,-369688571,75538768,-369633033,1157014507,645140530,737953419,104593478,444466240,70143104,-2144189194,-2136930956,721611524,1074695104,700984068,1157037134,443818034,36588672,-2144189194,2124481908,721611524,839814080,700984068,1283521102,1996425262,74907398,385238669,-401698736,-389865548,17122178,-167479669,1975530052,776271366,1451193351,-397361109,-125044993,1920270091,19809526,1465255796,16777114,843380224,1444377792,385369741,469297232,-129594025,-1070903274,-401698736,1156972739,91504690,937973590,776271364,-166628350,1946431044,-1202235893,-1873805311,113109006,36586742,1465256820,1342177720,4546970,776271360,1443525636,1354771287,16777114,-396929536,-389810425,16859886,-167479669,1946431300,28857890,1894273024,200838134,1444181247,-401698729,-1072966177,1686111348,1465318191,-1007233304,37945576,175540995,-800987050,947175435,-1995553653]},{"sector":2,"data":[2122579014,91488262,17712327,-2051516928,-1070903296,-1873784752,-546052082,-1979955573,2122518084,208928776,141869067,70208640,-7870378,1119348931,1589904398,931866120,41913126,71797542,1183434283,1200301808,-1983436026,2124540486,-431585020,-1996193631,1187510854,-956292628,15789638,-1996240735,1183579206,1958742790,81238,37563252,1025602560,208928771,1946158141,343338,1005270900,-1996239199,45218886,-738564397,736880230,-352075103,62955779,-771996023,1725032038,-1592202246,1183384912,-330905604,1187446857,-352298258,61645062,-1946401143,-523109818,-1423831,1996426358,912497404,1183383552,209125372,1996445526,-92864528,-1149185,-979702666,50331718,1996487294,1183536652,1355219946,-1018113,1996487286,-327745554,4643738,209125120,1996445526,-361299994,-1149185,-107287434,-16777146,1183517814,-431608848,1464911363,-1673473,1996483190,-327745554,3610522,209125120,-1694730497,18062,1100212419,1988822802,273058578,1963869707,38267139,-401698730,-1073014416,988349301,-1909049086,1444705540,484970128,172395326,1963738635,273058574,76940801,17712779,1443141638,185222795,192220230,36914422,565708148,-1207702784,-397410303,-125046353,-1995422069,1183576134,-230258418,-263811753,28856342,-962965504,1459617863,383665805,440769104,1183645696,-1924131098,1343675974,-303559024,105286428,1946699275,-1332062393,-1929379766,1343682118]},{"sector":3,"data":[-16222465,244319862,1461506024,385238669,178256,1210292816,1183645696,-11528458,1962878580,-401698776,-11068101,1996486262,-92864520,-1694730497,19154,185222795,1718881350,383665805,-565801648,1996443670,175570700,1659375248,-163148515,1183666198,-1873799458,477292558,-163148457,45633558,-6664192,-1929379585,1343682118,-14256897,244328564,-1927487768,1343682118,4084122,-196704000,1721390928,1342177352,-1191938305,-1706033151,18556,-11136021,1996484726,1054599410,1012111959,1183383552,-1137246220,-193528059,-1202667477,-1706033147,18591,96220927,-1018113,-1399131530,-16777187,-16401354,922743926,79168956,1620725760,-1962934212,1175128646,-16223220,949679222,-1929379779,1343675974,-15698177,244321910,-1927523608,1343675974,383665805,-431583920,244338710,1461490920,-2197761,1183572086,-565826590,-465138864,1356875307,-565802153,1343243819,736118411,-1202713018,-860225504,-1706012160,14005,184960651,108267590,1256036951,-396951552,1183530624,205916938,2088970357,578027522,36914422,-397013644,727072304,233328832,-15733954,770179700,41222127,-397361109,909767218,108332174,-401698730,-11125712,-1207583690,1347420161,-1019361304,926873064,108432130,-1979416949,-466997692,-1996472283,-1923700154,1343658054,-1927837208,1343658054,-150700383,-2136911656,1356396292,-1477964144,843352603,1077723172,-1923661195,1343658054,1342178232,887623312]},{"sector":4,"data":[-1740206596,2124501014,1356396292,-150699871,244338904,1461418472,379078285,-1434549424,-1207602176,65732609,1342177976,82316944,35449340,721749665,721692678,-1996193786,1183552582,-2147079270,101057284,-1639544571,-1740206761,922701846,244319176,-1591981080,1177093248,922703770,922682372,-2003172350,1459617846,66598655,66467583,3568282,843380224,-952011768,41542,607339658,1967144128,69640454,1470252681,63846143,69482239,-6785281,922719350,922682406,1996424232,1354771362,-401698736,648086624,2114323204,-1740242684,70403318,648097908,2114323204,-1673123580,-835256489,708247299,-1673098492,75367939,-1804140720,69613311,69744383,1347469355,-401698736,-1705573344,15433,-1740207273,1344160771,60442251,-1957683132,1141087302,1183535134,541328286,436640336,20774912,1460237568,3965850,18671872,731661963,1183422534,1183667858,-1202710868,-1873805232,383838222,194397833,-385649216,-1923678062,1343663174,-1701415169,65535,-1985722743,1183557206,-1740231780,69602955,-1053040175,111242876,1086466821,1183447249,2109737982,-28915963,1183514624,-1538905188,-778549717,-1840870920,69600827,648087677,-1980182268,-11038138,-16513994,-1711013322,19984,112727,1268030032,-1957232640,1174640710,1183535250,-28965990,-1404662448,1996443670,-25962,-1202257920,-1706033150,65535,11173507,-1063189132,-1593578749,1183384514,-6664032,1459618047]},{"sector":5,"data":[4788890,-1807316224,-1583724919,1177093248,-1673098338,-1951906167,1174640710,2114333586,-1673099004,-1740206761,1996443670,-401698656,1183521400,-1673098840,59917867,-1996194298,-1923639226,1343658054,-1868531969,442165262,1016850627,1988821764,142510858,723666059,103489092,1183384626,608472056,723534891,-1996210170,1157036614,611648562,-126419113,70426960,75367979,71344464,75499051,6469712,1375797178,1283299920,2078998528,-935919785,1283889667,1183383552,1996445692,-92864520,721695393,1342471686,721698977,1342472198,-1174396488,1347551472,5112986,1996445440,1307024124,-11075584,-16527818,-16496586,1996486774,108954618,-1593478144,48956542,244039723,-936704974,108954449,-1593478144,48956544,244039723,-936704960,1354771281,244338768,-1023278104,3920104,106859265,540231670,-397203339,1996438148,-864819194,-1962510593,503645766,-397402624,1996438191,978708486,-1207535873,-397410303,-389858748,33700761,-1878493441,327346190,1265942539,-1979162997,-466997689,-1996472283,648150086,1960327942,78160177,712300603,8829011,108954448,-2096401408,1962998910,112653,1688275691,138819840,-1070861452,1354771280,-401698736,1183569893,721611772,988332992,722143035,-163149376,-1980479863,1178204230,-15829746,1996427894,-26096,1183383552,142508814,-2096729088,1962935934,-1305018592,309788419,-15698177,244321910,-1996153880,1451883078,138840572,1183433355]},{"sector":6,"data":[142016262,-1207535873,1347420161,1347469355,3559322,-129595136,58048523,-16719895,-1711033802,65535,200558217,-385649216,-11534132,1369110646,-1996488626,1996485190,1354771444,142016336,-1207535873,-4587422,-1706012160,20075,737441535,-1706012480,18989,185878155,292820550,-755969,1996427894,242679568,-350986497,-193528043,1347469355,-15567105,1996427382,-401698802,1183384739,1958743030,-193528026,89143039,5142170,-193528064,1347469355,-16222465,-1984428426,16431616,-1483059118,-16777146,1996485750,1191484146,2122514432,108331254,-15827325,2122516084,578027766,-15042817,1996429430,209125368,-16091393,1996425334,1354771206,112720,-401698736,2122514464,141820148,-1695254785,2466,16285315,1996425332,1219468024,1183514624,-823606282,-2096495303,1962940030,63742214,-15317367,-1070917514,1687834704,-16777141,-4712330,16759551,530206802,-16777142,1996429430,1326553622,1183383552,-1305018372,343342851,5199002,-96040704,-15173889,1996427894,242679568,-15960321,-16534986,1996425846,108954376,-1207405568,-1195767990,-1207506176,-491124922,-1706012160,18692,62011135,-1694861569,20319,-15173889,1452997750,-1023410100,37304552,175540995,105286998,244338710,-1928236056,1344153156,-16222465,244319862,185948136,-14781248,1996423796,108461832,-1202667477,-397410303,1183383735,1975520252,-339309818,-1010816254,54063336]},{"sector":7,"data":[964612,85733111,906227851,418055388,-15960833,1996426358,142016266,-402229505,-125108093,561381131,-293353845,-603571442,-1948420860,-16539106,1996426359,175570700,-16222465,1558709878,1609089792,-1962736840,1183385670,105286650,-1946401143,-16401890,-11531145,1996487286,112644,3532880,-166989685,922692725,1996423614,-92864516,-1207666945,-397410303,-259325884,309720587,-231681,1996487286,112644,918939728,-963907445,939845827,1988822273,1444473612,-16091393,1996425334,74907398,-1962930200,1979649016,187992840,736392694,-605502528,-1962606025,-167048074,1156987508,880021555,505300109,175570768,-1878493441,339666958,544522251,1513553750,-696653824,91602955,-335544641,860157536,-1978829816,-1071369404,-327860164,1575731243,294531,1150113140,-11526618,1996425846,-401698808,-1073015808,1962875252,175570690,-16222465,1996424822,-10360828,201213577,1445623232,1342211256,-11485141,1996425846,-401698808,-125053903,1962934147,108954543,-1962380288,931726942,-1962770551,1994965958,-1962737097,1149962870,138819880,-1964440708,541362944,-1963178359,-1071369660,1752547388,17106593,1183579206,138820092,1156995709,963905586,52315275,50603526,990150150,696124998,689849483,1149961798,138815776,503552184,142016336,-1878624513,324462606,91537419,-352320584,-339727498,843380338,-1961855996,103490116,103482412,1178272894,-1204519418,1475018754]},{"sector":8,"data":[19809526,1183570804,138820092,95998844,-1958417664,1178152004,-165774328,1946431044,709135296,2080785977,843380235,-1196264444,602603524,-352319816,709135134,2080785977,776271371,-1207602174,199950343,958809227,-1921251770,-1023409736,-1940910504,1430622424,-1910575989,172395480,184962699,-149982007,-372176786,-763117309,105810688,-310117897,535137026,113921373,1343117312,1498962523,-1053076654,-1047854468,1343117515,1498962523,-1053076654,-1047854465,1343117515,1167120524,518818645,509073550,-1962246460,1183516750,-1426850810,-310157537,535137026,147475805,1343117312,1167120524,518818645,1465309326,105810718,1992628963,142525452,225703739,55099787,-34077712,-335764237,-1527514109,-2090967265,-443874579,-900899553,-555220982,-1929101259,385842878,142001415,-1207546229,-935657344,-7274122,1461062774,-1700465839,19216,901245123,-1098054080,118947710,-1962379579,-2135423410,1992833792,1996460289,242679568,369915647,-1527557801,4950682,1119601408,-1157371136,1515716672,-1705880752,13193,1515804867,-1202630064,-1706033088,65535,1348098243,869440082,-1073020928,-1202713740,-1706033149,65535,1532609368,192273163,309328,1397267024,-27787264,126550855,1532617215,192273163,374864,1398446672,-27787264,-503381169]},{"sector":9,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521012766,1400637183,117376117,512447358,-75410272,645157760,-1961825405,-220002225,1963347967,105875949,753536,-11279243,188344375,189267547,1419904767,-1532898069,-1508471980,197692244,185889994,1241609664,1420075848,1420170889,58049035,118178792,-1590768865,-1959898244,-883720682,-1903110004,-727636288,378217989,868943318,-1190925367,1927806977,-16449485,244321910,1946900200,-947336,-1511519626,1975520001,1354825218,5519103,1317740302,206998286,1946214376,192905228,-13798400,-346775026,-1145031897,-1014803600,1979058960,-2131001082,-2130384044,1918148859,-346466044,138885424,-921967499,-745864587,119470987,-1047811240,-1413313621,-1951683752,1183558598,1183558406,1044097800,74601632,1419787913]},{"sector":10,"data":[-919354477,28902379,853796864,1996423680,-401698808,359926471,-242540786,-1962389877,1642595926,-402230272,31981597,512475904,1194939552,-2096531976,-75427605,-227060864,-1608611538,868455252,138906048,1946896186,189237255,1419906815,1499093955,521018963,1419779723,1400961921,-343730314,956621584,185168911,971863250,-394984873,-335558424,-5576477,512475935,-1070377824,1400961921,-343728778,138885392,1329328756,1005417730,-394984361,986090320,1968704071,197197535,1482277824,521018961,-125085866,104448051,1584682146,1419785867,1400962689,-293383050,192708624,-953344,157280308,-395001845,-1962779509,-795744049,2088820340,330825738,67269633,189595141,1419906815,1571501823,1521170175,1521039103,1400780543,1400649471,-15829761,1962871924,1962889220,130672642,1583284656,-661863649,-661774704,2083979054,3139667,-1957311713,-1202235668,1727464424,-736195836,1943223045,-772540656,1926446059,1048788993,1946158550,1606431490,1575324510,1426064066,-189141877,97820929,-1056714189,-922496493,1727525367,1575324420,855638722,-1325208631,861559553,95965376,856419200,-1325208631,-1202038015,1380974597,-398073005,83898701,-1961992565,2123041398,1962871564,-1957275868,-930404793,-1957635849,-796186553,1464916215,-1873653418,228190222,-1879046424,227665934,242679747,1996445271,108461832,-1011045912,3213544,209095428,185237131,1461875967,-1960426357,1356396488,-1960295285]},{"sector":11,"data":[1356396496,-1705881257,18571,-1711274264,22456,-11053373,1996425334,794486790,-2147483453,503316608,1364234328,-1966568878,-1193014549,41484544,29016318,321536,-883402406,1342578428,240275795,-1606515937,1567948838,1963065405,1473356549,20795627,1023767553,963969280,1964112256,1473552901,-109045013,-1576700654,132863955,1473461888,-2146863872,5755966,67371636,292929546,2418718,255527541,1207895669,250289924,-784432353,57933911,-402640664,-370671525,1532582407,-1021376680,1473584782,409219,184775936,512476096,-75300854,-1962641606,721423390,989856798,516096583,1364205326,-788084910,-1207959465,243991040,378231461,-1008182617,-1995934209,-16774626,234882574,387103,525883738,-717815869,1347440727,2117533520,2083979091,1364218451,184929000,957838784,1952094470,-1759576314,-1207180454,-1706033151,65535,1438892083,244051083,-1070399404,8128057,238618228,947191932,8130185,959365171,1948688390,175570733,772306687,1400780543,2083979054,-13741997,774282782,777299107,1420170889,197145489,-29264438,8430528,-1070379797,-717816018,175570775,1342732031,-16353537,240125046,-1559913496,-1073020800,959324021,1951912198,33601555,-1962520949,-1628961706,-402295603,-957612263,-352289629,140428301,638552870,637685639,-443871351,574045,871140181,-2147075648,-385649408,959316215,1948688390,1347440675,1354825296,-1642135762,73319462]},{"sector":12,"data":[4161830,638285058,637695999,-402360321,686490500,959365171,1948687366,108461835,772044543,647634687,8396427,512634398,119429077,-1494722730,526278405,637820612,-108982389,57999872,-2130669335,1946223097,16351542,-2127531007,1946224121,83460394,-1205570559,-109051903,-32932860,117014720,78643838,1946548608,49905676,-109049996,-1274907640,839773056,29488868,-2135686539,38242854,-661988557,8569729,19138442,108643338,41428770,126353716,8579969,-1962986861,973179678,1946256007,-16796926,-1960933181,167477249,113643900,-2097151605,130110,-6683275,-956301057,32774,1575324416,1218]},{"sector":13,"data":[0,0,0,0,508952576,117317390,1048599489,1963023297,-1089041387,-1121547941,1539161691,-72063,-1961362930,1048837094,1962944160,1364414517,28873106,33864450,1520647811,-1828621312,1224801512,-355396236,-392959279,1950941425,-773140214,34060522,1493230824,27809883,-924253323,2042628864,-1247728102,-1981548710,777692438,-145049695,-1491695135,18671706,-1962900247,-1189704765,13035610,378210675,-1047831877,1359002600,-619984589,-1616825484,-1715272870,1520115339,100924407,104553125,92101293,861580705,-1324991534,-1593410470,860379825,-1625912878,-2016900262,727360774,-1072998200,100872052,-768386399,1520895491,1521419835,-1348401795,1003631450,2086318854,1521721606,-1949158584,-1592358440,-1492744358,198716250,-1205410869,243991040,378231461,535321255,-1723956229,175374426,520049233,1482316439,1380976611,16777114,251591168,141908929,1539249806,1539122827,-154444257,57934530,-151327256,91489474,-471285506,-1072970758,-654900611,91669051,-506338351,2062074872,-100532181,-1945743676,1975585728,-1190715899,-1207040698,105929389,1239944785,1632263,240698363,1532647760,-95333800,-83881240,-375762096,-889192356,1520804142,-1491170514,521018970,1521288763,-1381956739,-1324991654,-1593541542,-1555539279,507206309,75324079,1521426059,1521688123,512427388,-1991550285,861579038,-1626437175,-1592882854,784539482,1473316550,49921]},{"sector":14,"data":[-1864856576,-326412987,-1193767394,-1202716612,-397410294,-1557266372,-310159403,535137026,-389329571,16788169,-1207535873,-397410286,-1543897056,-1557266348,122707371,-1392081106,10692189,-1070397952,412747344,1476395059,-1957313541,765089772,1342177331,-1962522997,-503905202,1342192133,1361068217,1347537203,16777114,1505791488,1958742875,-1073966314,-1951727614,1202390086,3848263,-1047811157,1606454443,-1034033781,-1957363708,5546476,-1391555794,1959332701,-1047594436,2001702,1958820608,-1949201658,787147723,1571620411,-1993472139,-346182370,650284551,7817,512351027,-1993473924,-77746402,-26032,-1243086848,1575324417,-326412861,-90417322,373721886,-1064380274,671371,540219,-1070397323,394811,-1957223307,-1929378802,371065974,-1527514081,-397190369,512295177,117374986,-400687098,-1554513605,-350289864,-401682687,1583349755,-1034033781,-661913580,-1957345904,-661774612,1996445526,-1070391534,2629259,578077498,175492094,394811,117382773,1589968936,38258446,130482194,715194368,71796992,104552171,1383333894,538251,1317739659,-940709876,242540171,-1962785653,1451952718,-943724536,-2031613579,870413568,-1003754560,243994238,-1527578620,-1089933693,119406608,-1515870811,-2085895285,1962935934,403097352,-352321280,1042435,1583334283,-1962742397,1297948645,-100659510,251594526,77660166,137792256,171870976,2012429056,-880018145,-208941525,67013454]},{"sector":15,"data":[1201992696,802363,985596786,138316032,-1006896128,66292732,735022064,-201618482,171870628,63175424,989856798,1912605726,3848963,663099,1506014091,992891224,1952295686,484986886,-1010814208,109992027,-2094661548,33561662,992348021,1946163718,-4181246,1364744675,-1425654994,772044125,-1906464094,113649344,855703608,104539840,359923726,959270,922691078,1134166018,117440550,184549816,-970013760,22915590,1571791150,125091851,-924270450,773027327,190688673,-1911851840,-4593472,41254,1539567988,-4181158,1409715939,882976256,1958742784,788473349,113901618,28397824,860947435,-594848823,140479286,74832651,250288355,184835979,-2129693477,1263403647,1499138165,-905969395,1499136002,46841907,668723200,1996423680,142016262,-397361101,-389812440,50341833,-970056015,694224134,134661678,417868129,649184000,82510256,699410097,1627759150,1627955758,2597096,5564419,637862182,-1023259391,1475119957,515460429,1173504,-1956690619,113401317,2537728,2586856,176065283,-401698729,594870112,1183578371,105810696,1364218192,244340510,-1962720280,1356396293,-150846069,244338904,-1023164696,1393188491,837291664,-1911589633,2123040838,65876486,-1962439719,-389873073,50341673,1393188491,300420752,-15698689,1996425334,-1014817274,244339486,-1023215640,49006899,48759217,-1962868697,-1873607074,-18159602,-1070394252,1207306467]},{"sector":16,"data":[141822003,1207306475,41164851,-389824258,16787165,1392926347,-974647664,1393325310,1342181048,1347469363,-1019155632,2539752,207522564,-401698733,276102824,899155,108461904,-16091393,535496822,648014019,1586168576,244339466,1962837992,213406483,-1070379008,142016336,-1878624513,-1021319154,-1194773565,-661913167,-1957345904,-661774612,1393057419,1508380304,-485395202,73370374,65323907,1200293470,1113033536,-1962742397,1297948645,855639242,-2135836471,1381653336,-1202695342,-1313341007,-1864856447,-326412987,-1948742114,-1873605538,-32053234,-922083980,1602946681,-456948988,-1962254845,1200031302,1944703296,139889414,-2092804217,-443874579,-900899553,-152567800,-1962868699,-1873607074,-35723250,512164980,-1933377446,-1064398632,5939494,-1864856373,1515831438,860967515,1602954944,1960512260,2139170314,1967869442,-876544510,-62208,-65536,-65536,-65536,-65536,-65536,-65536,11599872,-1157516869,-1313144143,78756611,-1157254725,-594868559,173509430,33616513,-1909578891,643291142,8590904,942026364,2080412182,1468741159,372975116,477364330,-1878763287,-2064481904,-2146339582,125108729,-1711276104,-2147480886,-462092807,-645211341,-620504317,-424673490,624158818,-1070399232,-2096734581,108993275,-2020875311,-356318834,22756,2431208,108954369,-1592232960,-1073020804,104534388,192151636,1095760,1400019536,-1957167104,-1935473082,-6664191]},{"sector":17,"data":[-1023409921,1519442060,106519303,-661774766,-401698733,578092231,-401698735,443874500,-619986893,1468666996,-1058897869,1967192704,945785609,-361379013,-887111426,2404584,106471680,192200715,-401698736,-1070357529,-1559865181,-389872206,16786581,1392926347,2112360080,-1962707716,784544839,1532666785,110046727,1392925347,521019083,1681331853,-853213000,-71098591,-850657096,-1864856543,-326412987,1473809950,243188988,-1425258869,-1425389941,-1425521013,-1425652085,49120095,1562371467,838221,1167120524,518818645,-1000875890,79234686,-54512896,-2090882061,-443874579,-900899553,-661913596,-1957345904,-661774612,-987867306,2126775926,309514,530969596,-310157729,535137026,147475805,-1864856576,-326412987,517508638,1589969328,72321798,176033595,990269323,41812559,-2095071181,-443874579,-900899553,-661913596,-1957345904,-661774612,-1950338274,1451951694,173982984,2080528187,106380048,255527805,1329268604,-33391356,-310173760,535137026,147475805,-1864856576,-326412987,517508638,-1962254651,117508166,-1962653951,1191249478,105316610,49120031,1562371467,576077,1167120524,518818645,-987834226,1183517278,17246472,1183515719,38217990,520505089,-1962742397,1297948645,-1946154806,1430622424,-1910575989,-984131880,-1174664586,1353515012,-990153399,-2080567682,1992623815,113672966,-1386543951,25024571,49905811,-1416429185,-2081458871,1460011719,82316944,1958743039]}],[{"sector":1,"data":[-1873345013,-21960690,49004595,1610351024,49120094,1562371467,838221,1167120524,518818645,1465309326,-1006209339,1996426878,175570700,-924316016,1444827390,-1058533744,1958743038,-1072998373,1460013940,1743261328,-339725314,509019719,-401698730,988544636,1958742872,-11074033,1996426358,-401698806,653000296,309756,1967739053,1992687099,113672970,-1324955773,1001216772,-1828618813,2130901376,1235981057,28372853,-2090967044,-443874579,-900899553,1122500620,-1962672094,1347423302,-1710852353,20226,142001232,2113936104,-1036598254,209125121,1347572051,1251628550,-1711275956,26216,520494787,-661934596,-1379365971,92193579,732811403,-389865535,50340345,-402229564,310312927,30029508,1393194751,105927249,1719900758,-389873664,100802966,1343112843,142016336,6719642,1992577024,-1326950902,1954438911,-1996488257,1183448662,1996444668,1381061390,108461911,-1710983425,26302,175555675,105679654,1996444489,-11447538,-11010442,1996424822,1727568388,-1000669184,-1960441226,-11468212,1364397686,-59310249,-16353537,379192438,1493172327,638219972,1258577035,1393456895,1996445521,108462076,-1710983425,26419,6738330,1122550528,-1006370783,-16661986,1996426358,142016266,101086975,-11540397,-326412861,1354773278,16777114,-971062272,142016257,-16353537,105907318,-13637549,1575324447,-402651454,85467393,-1961986421,-1873409410,-119085042,125157387]},{"sector":2,"data":[-768884693,-1962651159,423431238,-385649408,58065682,755223785,305987590,65107712,-13724736,1449880999,1342177720,16777114,1781938432,-1865845504,-897062898,1157022443,175386674,-401698730,-1072979516,-1000951180,-14285218,-14280585,244323959,-1727792408,-2096892439,1946171004,913637126,-2081745176,1946159740,175439755,-336917784,1996445315,108461832,-371486744,-11075722,1996425334,-401698810,1149895619,1019225138,-385649472,-1873346722,-1514412018,58048523,1459573225,-1511518576,-230258225,-1070447370,-1923737228,1343682118,-485912,1183707766,726669046,244338880,1457348328,-386763009,1996480726,520546546,-939582999,62534,3570819,-16042892,1149972596,-1706025418,26859,-12219056,-377362352,-1946925431,1344157252,-16222465,1996424822,-373954316,50749124,-970525602,1183514631,-13374988,3570819,-873921675,910461950,2124042270,-385875891,-1873346787,-1628575730,1459533289,1460434687,-16222465,-2098723210,-22746666,142016342,-1878624513,-401676274,1459549417,382879373,-401698736,-1923698572,1343672902,1659375248,-25368143,-610277290,-1946257943,1200292956,-800683750,58048523,1040082409,192348170,-472786805,62556043,-3127671,530239606,1442840683,1996445526,-401698608,28881297,-29431552,1996445526,108461832,-371772952,1048837678,1946158630,-31135485,542455,-385649376,1048837658,1962934372,-32446205,155043723,1025537024,57933837,-130583]},{"sector":3,"data":[-1207933898,-1202716398,726724656,-1873784640,-1149507570,-136727,-1207933898,-1202716398,-1873805296,-996087794,92127243,-336576328,-263145255,1190647019,1965031432,-37689085,58064651,1459468777,1342247608,1357971640,1464909867,1157020139,58015794,201285609,-2147060481,-348115380,778338308,860157631,-385649392,-8126648,-385649406,-1873346752,-144644082,208977931,1354771286,16777114,-13965056,-401698730,1183436224,-397388046,1996480274,490924274,201266153,-385649153,2122579278,57933832,1459439081,552078992,-46339644,-1159178410,-46863954,425603,736691061,860130045,-2143502300,535364468,1962871805,860157455,-167152368,1967140676,-49485565,158727947,271795446,-1506443,1962871804,795115526,-2147161153,1447046988,91553547,-352320328,1354771202,1927810704,-52631133,84442755,-11067020,-16518090,-1711017418,27397,3604311,-29950204,1796446723,-962527232,1461709571,67385087,67254015,5175194,922703616,922682360,-409336842,-1593835442,1183384508,-1415950128,1459617867,-14256897,-1969608588,-1962934211,-628305850,-2097098263,404030,1877541749,-63011844,57933825,-236055,721824310,245452992,2047224581,922701828,922682640,-1070922630,-401698736,1139389664,-1335206916,-1335381913,1952952423,-1754776982,459857000,1852371561,1852289129,-1335280791,-1335381913,1030388839,57999493,2013108713,2047275,854131573,8470012,1105789813,8535548]},{"sector":4,"data":[1592329077,8601084,1894318965,8666620,1206453109,-68621827,1963000893,-38606589,-2042815625,-385649408,-1606549972,-385649920,-1556218930,-385648896,-1008075503,17186299,-236387467,17382909,988349301,17972735,1877541749,-72816131,479455427,1988821763,914129674,-16157696,417871476,910461415,184960651,1215563846,-16222465,-1399191946,-1962934168,1996441592,1817877000,1183383552,-756525304,-96040474,74825739,602652715,-1980086645,1996437060,-26104,-1031077888,1342719625,-1962510593,1344157252,-435034025,-1023409736,52159976,141986563,-1996374367,2122579526,108331012,29230791,1156972544,141901875,271795446,-164953483,-1980074359,-11076490,837289590,-2081387776,1946221182,860157459,-2096269888,114238,909706868,-613088834,137577718,1983448948,735081980,-28931082,-1962819933,2145960902,-1962802917,-167049610,-11138699,1541932150,-161944832,1954558788,947684121,-1961659392,1207318620,175378483,74907478,23193683,2122529259,561250308,74907478,-1962922520,1354771448,1459910399,-1962823960,1979137008,-339244284,-335639786,1354771432,1443133183,-1962830104,1962871800,-1008276575,1774056,108432130,-1560000885,113706114,67102,105645767,113704960,1048,87176841,-1167228488,1347579268,1347469355,349562960,829734923,-1167222856,1347579290,184590056,-1960676160,-16401890,-4715401,-17665,-1070903214,-397389744,-1073015567,1048774516,1962935320]},{"sector":5,"data":[1279165371,74776582,65783435,-1022997343,1760488,175540995,271795446,1156974196,91570226,-352321096,860157519,-2096139136,1946171516,945589001,271796214,1048831605,1962935602,1278642440,-339727610,842414379,-2096204539,295486,1048778356,1962935884,403097576,-1996488444,-1593422794,149620254,102631111,-1393885184,439412931,1388184066,742296325,-2095453435,292814908,-1070910209,1593790544,1975520004,-339727612,46564109,189777803,-1193249344,-389873663,6721,6567679,619187856,6595058,434956483,1988821761,75401992,425603,-1070903691,-396996528,1183383631,1958743038,-28931323,727073515,-396930880,1183383611,1975520254,-2095387668,1946171517,-1070901478,947257168,-1996479768,-1072955834,2106315637,860223032,1474328000,-402229505,149683838,108461910,125015,428140739,1996423937,108461832,-1962641665,-16401890,568855671,-28931840,376815627,-16222465,1996424822,-635532540,209190661,-1996486680,1183579718,1273545726,-1962671079,2123041398,1979058950,142508811,-1207601920,48955393,1183432747,-129579010,-16056320,-963967627,-1962883351,1183384646,1975520252,11659523,29245059,-1960610816,947880920,-1207601920,48955393,104579115,57999806,-1962898711,1207368798,544542771,1586200555,860354300,-166365936,1950363463,947880816,-1962314752,1207318623,-555022285,972840587,91568255,-352321096,-1983894782,2122578502,259325960,16678531,-1073018508]},{"sector":6,"data":[1183516020,-2092241924,1962999422,-59361019,28837237,721611520,-28931648,359972875,556675,2122518388,91488504,-336050549,-339244256,-92372196,-1962511360,1183448134,-60912648,1172899723,142509055,735540480,1474872256,-16771560,-1878749642,356640782,6567679,1342178488,-954748696,64582,31999687,1681296128,-1472820992,-398014716,-1202323456,-1873805296,-1103304690,58507275,-1207914263,-1394016255,1480491776,678756358,-401698730,-1072959170,-1705632140,65535,106444543,1342178488,-689434992,1479999389,-401698810,99337289,65539728,-700019278,-1070903274,-1202696112,-1873805311,-1305942002,-1250639861,16533191,-398014720,1183514625,17120728,-1259797643,-385649152,3997889,-385649919,20775131,1024882177,427032836,-1207906583,-1873805311,-223090674,50087623,-398014720,-1192689664,-398014720,1183514624,605658,1156121461,1064447,-1595341963,729148160,28856512,2011713536,-28931589,58050107,-1879012631,-220141554,8829014,1354771280,-1963041141,-466996409,721428517,735087570,1388547008,-401698736,-1039420399,1996447604,8829182,112720,860129872,539354154,-1949160704,-1950340144,-1873784122,-1276385266,-1979812213,-352016330,-398014668,2122514432,695538394,33310407,757263104,138215936,52066048,-13724736,-781090905,-1016020112,-1015967376,-1854880912,-1016020111,-394362000,-1928039424,1343673926,568856208,-700019278,244338710,-2085432856,1962998910]},{"sector":7,"data":[-20322045,-1159197040,95966912,1894273024,-401698795,922743334,244319374,-2095859736,1963064446,1679723306,206015232,1342209187,-1673473,1996481654,-529072158,-2197761,1996479606,-663289894,-325195693,-956268893,305158,-1763130624,-1962602986,-24441226,1447085955,384059021,49473616,1024214667,57999522,2113988841,21948675,1946157629,408902,255676532,-385649408,339542325,-385649664,2105737550,208928806,14974593,-1207602160,48955393,1183432747,645267450,175570774,74760203,65781803,1342424737,-1964503408,-2125337688,268493950,1979665012,-525211638,2122531563,326369290,-401698730,-1202275329,726663172,-840412992,-1876301054,298772494,2122523371,58001674,-2097093143,-167506834,1971383878,209617167,343212289,956431009,108268102,-375799765,113705204,506,175570774,17596033,-1207601919,48955393,-397361109,-1073019720,2122439284,1962999820,172395475,-352191837,608565195,-998932480,-2145104512,83642055,-165418240,1954554949,608565171,-1401585664,2133091712,150750919,-166991104,1954606662,-62470245,1187446800,-352321290,-330921189,1996443678,108461832,-1779954032,1975520241,-163119345,149702275,972441227,-578817978,2377207,-385649536,-11075742,1996486262,5499132,1459574249,-385875528,87949084,1026129665,58458372,1040130025,142344448,2130772285,-14685949,209125206,-16091393,1996425334,-401698810,451671029,1963065405,-8918781]},{"sector":8,"data":[1963065661,-12195581,1963065917,-11540221,-389819669,51123350,-1928825089,1343678534,-1962853400,-964491146,71732032,1946157373,146714,-51838091,277760,138243700,1028355072,1853095952,-1962863895,-461311418,106335104,-489486159,1149878795,-230258140,2133189674,-196723968,1996428404,178184,-126419120,-956218392,263238,1996467179,309256,1354771280,-385798168,1157038287,1954578468,12970243,652742288,142016446,1342178488,-397361109,183173392,-1207404801,-397410302,1187451749,-1946158082,1178142278,-1959887116,1178203206,-2094629384,1963459710,-129594612,-1946270071,1183446086,608499206,-1961986944,1178142278,-1962511112,1183446086,105286406,1962427961,-196724432,1183516031,-1962677256,1183385158,-754404872,608996320,-2139037311,1175175435,608471302,-1207404801,-11534334,-1847003018,-25263360,-1959889669,1183448646,-401698810,244366729,-1961917464,1586230910,-763262458,1149868033,675596074,1048772609,1946157550,-301007100,1273545473,-1962737133,-947713922,73319488,621168011,-1993986048,108366599,1042049,41388326,637945227,621168521,145821440,-1993938733,1166869575,1200170508,608537352,172460326,637566757,-1978644599,-1744706940,206014758,31229066,1200170648,-269958386,-956093934,-268218,-2096597365,1996439750,-1404662520,-1981263850,108331007,-1995881496,2122577478,175374598,-1878493441,-1034033138,1187452395,-16776984,1183647862,-1873799490,-1544886258]},{"sector":9,"data":[-1984018805,2089016902,527695910,11304577,1343779856,1342732031,-1873756117,-1512249330,1977850448,1183383552,-14685190,922738294,1436156870,-1996488601,1996487238,3604446,-29950204,1794284035,1996423168,112862,1265539664,2122514432,1366622470,16154243,1996437108,-868810786,1984207363,1183383552,-562626564,69613311,69744383,737572607,1253593280,12106247,-941076398,-562626625,-1694730497,30594,-2197761,889129076,503989387,74776400,-1998057840,-465123364,199819264,-1168209151,-1618290685,-14024208,101353354,100918314,378209450,1183384748,-195655182,1390311167,-1706012080,31097,1358841481,635965072,-532248100,-1948100983,1066120286,721700747,-532272185,1183443153,108954616,-15239935,-956047754,41221968,-755969,1996485238,-401698562,2122570775,1450443014,632702603,145850112,1178331347,-1874364956,227207182,956327073,980748358,721975039,1996443840,244338912,-1962109208,126596190,1358448131,65160843,1346896452,-1545073008,108954381,-150506238,-2139048378,1996425333,-401698808,2122518108,326435334,956581515,91612230,-352321096,-280573,-2081929591,1962666110,-562626784,515131019,-465138864,1974486585,112645,-1070923029,-394854576,-1645736304,-465109241,146032259,971261579,58636358,-70935,1996480118,1976736506,2122514432,259326214,-1928825089,1343667782,-85455216,-16323678,-102179210,-1209482481,-1090319088,1183580155,4195592]},{"sector":10,"data":[-506231,1183647862,-397404442,1183579472,2130716144,-388822863,-1946532215,54330950,1025209344,1500774409,1946160445,1785161,540871796,1025733632,980680747,2122522603,208994308,-1964482933,-1744705401,233568395,-2132255093,-83760961,2123039604,-67140614,-1360460939,108954368,-2090634231,1962935422,-2147436467,2122533611,-562757628,-336953717,75400156,-1193904896,-1873805296,-1237784562,92127243,-335544392,112643,2123100299,201196538,-1962508801,-347082114,-226608889,-13958529,1979350585,-278620,-1070882837,-1946657141,-444586929,-1983378561,1996432463,2122536712,427034886,720389770,8332772,309643067,720389770,8332772,1962034747,112645,2122518251,91488260,-352319304,309251,-83105712,151420547,28837236,721611520,-689388608,-16363249,244322422,199736040,-955943488,4166,621168267,1183416320,105286652,-1996484827,-1946194810,-494433576,-2037803007,1183580022,251667718,-388822863,-9533815,-8616249,1183514624,805315846,-9795959,1963982909,105286179,-2037845980,272432990,-1073078668,-2033771916,65386,-821598592,-8616249,149618689,-1877969153,169011214,1080963,1996425588,-1549735920,-1961867639,1175128134,-1609337590,-467007989,78251523,78386827,-1995946359,1996425814,209125134,7973786,-196704000,-1995577624,-11489210,1996426870,-193528052,703073936,-1572435495,-6007159,1996468342,142016266,-16091393,798623862,1342177388]},{"sector":11,"data":[166203024,-1505326631,-1599580535,-467007987,78251523,78386827,-1982314871,1996479062,1380995760,1988926032,-1873805312,-656480242,-1982970231,1996476502,202619056,1392508858,112720,-401698736,-523118396,-3258879,-1779912586,-1983894771,1183424070,108461952,184859624,-1592757056,100860966,1183384682,74228126,-1954527607,-1493709242,-930349194,-9009525,640612168,-1983380732,-1946197874,244033094,-506395610,-11484925,-118971786,-1224781609,-253165728,-1639578665,69602955,-1056710191,-8239479,1996465270,-673585024,112773259,674166528,-1983380732,-1577098098,787940390,-930414098,721767073,731480646,66638274,-230258239,-150722399,-1962807762,88908232,-10189269,-775804007,-1983839240,-1098788282,268500842,1085806708,1183535104,-1706016524,21280,200951433,-385649472,113705115,66044,-9781631,91557888,-352321096,-1950340350,-461371834,281837775,-955890039,113703494,-1996112223,-1900494778,-1924129276,1343675462,1342183096,1944587920,-1912158249,-1593835516,378208342,1183383640,-128546314,309707275,-2013232224,-2069825978,-146372608,-2013231456,1183709254,-1202710846,-4564307,-1873784065,-381753330,1347469355,-840429936,6988257,-1582152055,1183383654,6857140,-10058103,115871376,242679735,-1962117377,1344207430,1089750667,-687740848,30033607,276726528,-1960938496,1200230494,635710003,1183383560,-63011894,158662657,1354771283,1407717008,-230257736,998393347]},{"sector":12,"data":[2114260998,84975889,-1954396629,-788234738,-1983829023,1183576646,1686504402,235289599,-1592623611,-2044001010,244055908,-506395520,1183433003,-2147239726,1347605035,-16091393,-1070921610,1384169658,-227082416,-2984193,-1224768906,1996488548,922701840,1347421088,501747344,-2081387642,130110,1688290676,-1605990144,-1996463455,-1070871482,-1560255325,914948194,-1063190438,-1371109119,28589699,-1207602176,49020927,-1063010261,1958742785,137821961,-401698810,922729216,244318644,-1950663704,1086817278,-150991176,61984870,1183443155,709135276,723928107,-1711316858,-120470997,-8485239,-1960033141,-372125618,1143718187,1652984104,-1535705089,-394234113,1177277863,65589668,-1996216314,-196703483,-1962654327,1177267270,65589712,738157190,1166650438,105286402,-1962523255,100900422,1166607398,1988528904,608537087,-9533813,-523040591,-1960557303,1166670406,273058570,-953793143,10309,1787202902,-397404417,1187510284,-352321366,1922992948,2122746879,-1962440193,-2046570938,1200226174,1652984580,105351679,-1985198549,1200292423,637928196,2122746116,-1438187521,-9271677,-1438217464,-9009607,117425023,-2091515410,1946221694,309253,28836843,244338688,-2087656216,16743614,914949236,1187446874,-2130706218,16739006,-955222768,31750,112640,172025936,1456895625,854068880,-1925452873,1343654982,735475455,-1873784640,-1524832242,745848843,378291853,112720,-401698736]},{"sector":13,"data":[-1072962873,1183650933,-1873799540,-1509758962,378291853,-401698736,2105779890,-1082916824,33308291,-1958185984,1789112902,-1270445312,-1962907997,-1543543162,1048772712,1946157086,-1605989627,-1070923029,-1962911069,1654901830,-1605989632,-1962908509,-1063014842,2092960513,-1180768251,-1070921237,-1835380656,-1962934217,1183394373,-897678422,-2095876864,130110,1996426357,112656,-401698736,-1873365570,-1985878002,25968259,721843200,1944604864,-63012087,1819541505,381830797,-401698736,1183571648,96379840,383534733,76462160,381177886,244338688,-942405144,130054,-1173960960,-956301053,16738438,1755220736,-829977857,-661940223,8554378,-2144042972,-9920885,574020867,-1634994617,-2021064856,-1073086378,-353893516,1753677790,1757316095,-914619393,33162951,1183514624,-1947679830,-1962868727,-266009530,1064192,540873076,1024553984,292814896,1946173501,-1592464623,300614618,-352023391,62300428,-660535317,721611525,-1763130432,-1962601207,1183649398,-11528482,1996426358,-401698806,1183704428,-11528474,1996426358,-401698806,983688540,112826629,-1543899392,1017184766,-1037330171,10746065,-431583998,-22982634,1356396289,-150863711,244338904,736486888,108935679,1049299572,45154814,216786899,17333891,1049298549,-405732866,-130613418,-164167933,2146867715,1183383552,-598308390,943128406,-562626811,736130815,1464881344,-402229505,-11140706,-16435146,1996483190,-29949984]},{"sector":14,"data":[1354771201,108461911,1442940392,87570175,-2197761,-1070863242,3604304,1996445442,23914502,943128406,-361300219,-1280257,-16646602,1459748918,-402229505,-11140782,1996479606,1979095770,2122514432,91553800,-352321096,178179,-1578088823,-523173378,953241,-1980107006,1183438406,142509052,-955747072,127046,-2080604463,1946158718,10807555,-935919786,-2133681661,1183383552,1996445434,-532247578,1089488427,1183535168,-431608854,-260636848,-1174396488,1347551472,8423066,1183536640,-700054562,1358710315,-1542401,1183579254,-398054420,2209872,1375793338,-2136434096,-1957298176,1177281094,1996443862,-59310104,736904843,-1202657210,-256245727,-1706012160,32969,-428409002,1222919819,1183535176,-431608854,-260636848,-1174396488,1347551472,6770842,1996445184,-2125030662,1743454208,384976525,-428409008,1088439947,1996443712,-465138710,-1873786808,-481695730,-230257322,244338710,-1947884312,1183443014,-330920972,-1946663287,1174658630,-230258218,-1981397365,-1923680698,1343681094,2129137296,-364475419,-1947056503,1177281094,-163149354,-230257322,244338710,-1008376600,50797032,75399944,-385649408,922681490,1996424114,1981454864,1183383552,309788666,1342181048,16777114,81152,1187449972,-939524100,16776774,-1070921493,-1979824503,1996487750,-25755886,-1694730497,27364,-1961724161,1452014662,-51714,1392505472,2139265616,1996423168,242679570,-15960321]},{"sector":15,"data":[-16646602,-16646090,-1962692042,1174603334,1996443658,6731784,1375771066,1330158160,922681344,1996424114,-2143642886,736821248,-15567105,-16529354,1996427382,209125134,33437439,33568511,50742923,-11531706,28838006,244338688,-1009990680,430312,209125124,-16091393,1996425334,1354771206,-1023360280,424168,242649861,-401698730,-1072964000,1962874996,209125122,-16091393,1996425334,112646,4974672,-1070923029,101247171,915080451,1049298204,787154140,-1996153695,1979710022,209125132,-16091393,1996425334,74907398,184556776,721712576,-1592529984,1178141980,-2096925190,189664967,-1194492426,-389873663,100730306,-351373685,1463126842,-16222465,1593771638,1975520010,-339727612,75399983,-2095025152,1946157693,41287450,-15960321,1996425846,108461832,1342177720,201310440,-1948879680,1979649022,112832,91547843,1988822272,209125124,-16091393,1996425334,1424512518,1958743039,-769750186,209190661,-15960321,1996425846,108461832,-8394666,997507083,96083595,-15960065,1996426358,142016266,1443264255,201286888,-1960807232,-16393698,1996426359,175570700,-16222465,-397015434,-1072955575,28837236,721611520,1122550720,-2097086459,27198,1788942196,105265408,-1202712716,726663199,1347440832,-1024979312,108954529,-15633408,532153974,-1070903296,-1873784752,-1582569458,84404419,1996424200,-401698804,-1072964368,-1880554635,-1908505856,57933828]},{"sector":16,"data":[-1962880280,-1901917114,-1811495164,-956301052,17076742,-1878604032,-1711276028,33874,-2096775517,1962935934,75538694,-2096740727,1962936446,75407622,-1962391927,-1633482170,81156,-1202709642,-1924136946,1343680582,16777114,-196703488,-1962522999,1183445574,105286408,-1962632541,-1667037114,209125124,1358954424,77608703,-1165686088,1347585293,-219672944,77767632,69265603,1996423424,-401698812,-1072964537,1048782196,1946158222,1577556510,104529920,326436286,294531,-1902049164,71710980,28837237,721611520,719897536,721420292,-1125625664,1958743039,124931,64284867,-1070923776,-401698736,922681559,-4717426,244338943,-942598168,303622,-1912158464,-956301308,302598,-1811495168,-1023410172,255208,1354771202,201291496,-1586268992,1178141846,-1593281272,1178141848,-2090634234,299070,-1070922124,18147408,-1559738741,1183515798,77112070,76429055,1358954424,-1175974256,-1908998192,-18428,-1607008432,-18428,1392508858,-401698736,-1566322671,-1845049596,-2097151740,300094,28837237,721611520,76587968,108314635,-397361109,-389873474,33555297,-1593418044,-1993997162,77111559,38242598,55306435,1996423424,-19011578,141869067,-1873756117,124942,53733571,1048772864,1946158224,108461830,-956269080,299014,-1811480832,384353028,-16711677,-1461189002,1958743038,1354771208,31985296,-18300160,-2097086462,300094,1048775797,1962935440]},{"sector":17,"data":[112651,251594987,-176946028,-1072971733,-1834938252,76587780,108314635,-402229505,-389873626,83886793,956599969,393547334,76691072,-1807842559,192217092,76560000,1354771201,-1023409688,16933352,74877697,76430987,-401698729,-1072986103,-167042188,-1873340555,-1310595058,-1873350517,1632270,244340311,-340659224,244340238,-352319000,-1878604026,-1023410172,67265768,108432129,77479555,-12618239,-16534986,-1710973386,33242,1459242633,76953343,77084415,77346559,77215487,62011135,1347469355,-1174387016,1347551334,8507034,-1305018624,-92864765,922698987,1603929424,1442840681,77479555,-1593477887,65733968,1342584481,8833946,-62486272,-1774780586,-1741226236,-1674117372,-1707671804,4831236,1375754938,-2141087152,-11141120,1352334454,-1023410042,117992,105286401,-2096848733,298558,922691956,-4717426,244338943,-3225624,-1207661002,-11468801,-1207656394,750421033,-1873784188,-836769778,-1023106397,102632,77635840,-1407283773,13363535,948510349,-1929329431,-384689634,512557245,-1226238792,2032045312,11528495,980688525,-1929336599,-383939554,512557217,-1695990935,236883200,9693462,1022107277,-1929343767,-385000674,512557189,2146121819,-786526832,-1871123656,113647245,-1919913493,-350744546,512594026,1676350358,-1675719280,-1872958651,326573709,-1919920661,-347921378,512593998,1206597857,1142853008,-1874793709,926359181,-1919927829]}],[{"sector":1,"data":[-351163106,512593970,736831552,-1742828144,-1876628723,1669602957,-1919934997,-349703138,512593942,267063652,-2128704112,-1878463689,929701517,1485832683,-469807090,1296912195,-1864856576,-326412987,-1193767394,1343129580,16777114,113408,-6663344,-2097151745,1562313453,1975520077,-215034,-369096502,65535,0,0,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,25506,-326412965,1125616430,-1967115453,736154050,-148081724,104412888,595001354,201734454,906262016,-1962931037,861361888,-775517504,-738242336,-1956749479,56319461,-370933791,-1933836369,777752792,1128470411,-326412987,869830174,-775779648,1942236128,920188898,656953,959895927,1979714566,212022788,1457556224,-1967115433,1356911046,1599722495,49120094,1562371467,50813773,-883751199,16973953,461677,16973896,540070,327744,16724823,16974240,542781,16973889,544440,16973892,544454,327749,78750,144101,70448,16978434,294427,16973926,286039,16973927,542602,196685,16712629,16973974,539374,196687,16714114,16973976,557413,16973904,489942,16973914,558081,196690,16720131,197019,16720139,16974236,140308,16973828,493579,327773,79192,210295,16728700,16973983,550781,131159]},{"sector":2,"data":[96749,134163,81114,16976917,545504,131163,16724826,197024,16728804,197028,16728787,197029,16728774,197030,16728713,197031,16728657,197032,16729425,328105,70445,16978434,542696,196706,16729345,16974250,542591,16973923,546752,196709,16737014,196909,16737002,196910,16737018,196911,16737010,16974128,539754,196713,16737006,131377,78196,208678,16737022,196915,16734855,197044,16736998,131380,97091,16997037,540029,16973941,493656,16973825,353152,16973841,490180,16973829,480048,16973830,480058,16973831,542631,16973953,557452,16973825,475811,196617,16711888,16974154,543665,16973954,554498,196610,16713396,16974155,542791,196739,16714091,131404,93552,224704,16713965,196941,16713257,16974158,531563,327814,78193,208678,16713244,16974159,482849,196623,16713795,196944,16728569,16974161,557474,16973833,482958,196625,16713263,16974162,467882,196626,16728578,16974163,472813,16973843,486458,16973845,472026,16973847,471868,196632,16746528,16974040,551723,196756,16738877,16974300,468485,196637,16738269,16974301]},{"sector":3,"data":[467627,16973854,558731,16973974,483391,196639,75388,206415,16740444,131551,100095,17008083,468503,16973856,537493,16973976,484271,16973857,482811,16973858,467417,16973859,528492,16973980,492492,196644,16729161,16974180,558786,16973853,539052,16973854,471881,327718,93549,17001920,545549,16973857,558713,16973858,538883,16973863,493569,131119,78753,209637,16715177,196978,16715094,196979,16715086,16974196,558753,196653,16728484,16974197,468283,16973877,542804,196655,16716889,16974199,544193,327728,100092,17008083,544212,16973876,539879,16973877,472589,16973886,471903,131139,79195,16987511,461502,16973893,472055,16973894,461559,71,0,0,-2081649835,1448548588,-1710983425,773,-141821813,-15939965,28837494,748310528,-16777216,-1207717322,-1706033151,481,15353543,26667264,1612973194,863313980,1946224118,108461870,63452927,33178,108461824,721831051,1342471686,-11485141,-16482762,565708405,15776256,-1533390766,-2097152000,1962937980,108461874,63452927,96410,108461824,-1962511105,-120518588,1342456835,-1207274241,-1202716671,-256245727,-1706012160,404,-167698967,1148454916]},{"sector":4,"data":[1946224118,138709823,72484395,200296073,-955941440,61510,-16353537,-16528842,-16495050,1183516276,66638320,-11533244,-16494538,721703478,-1202696000,-1706033151,65535,32261831,604277248,1963015171,108461878,63583999,-1157627976,1347616767,-768882805,-1070870389,1347602059,1342177720,-16354049,1962869876,141885194,16777114,1975520000,-955913373,60486,-16353537,-16516042,-1711015370,65535,-16353537,-16519114,-1711018442,65535,1460041471,108330838,-402361089,2122514608,678691052,-16353537,-1710927818,608,-16353537,1962870388,175439620,-1207405313,-88473463,-1706012160,65535,1954546934,-230257365,1962889238,74776326,50742411,-1957688764,1141048388,1067077640,-16777213,1183647350,-1706027278,65535,-15677821,1166797382,-364496630,1609106301,108462078,1342177976,16777114,74907392,253082,-1956684288,113401317,-1873273344,-326412987,-2585058,1996426358,142016266,1347469355,-2097148952,-443874579,-900899553,-1957363704,149717996,-167223669,58000391,-1593796887,1183384498,205929466,-1706028427,65535,200951433,721778112,9365952,-1878493441,327411726,-1979955575,1996488278,140413946,-1710327809,683,200820361,-12290880,1586170998,17298954,1352729972,-1593447676,-120519600,50880139,-11532729,1996424311,-25755652,737834751,-1202696000,-860225504,-1706012160,65535,-362753,-6621066,-1593835265]},{"sector":5,"data":[1178141618,-14912244,-6620554,-352321281,209125138,-16091393,1996425334,74907398,-1207819032,-443875327,705117,-2081649835,1448547564,-1962647925,1586168391,541534984,-1947318647,126551134,721968779,1183391303,108462060,16777114,-1946645760,214336503,-768313,140413951,607340426,1971338432,73370427,-2146809866,1183658612,726669046,-4697920,1979666687,105220872,-2053484480,-1929379837,1343682118,-1149185,-1785009034,184549379,-949848896,-68538,15746759,172329728,2112898617,-163148464,1962889238,74776326,50742411,1346374212,50611339,1346373700,16777114,-163148544,1996443670,-327745554,16777114,1958742784,50656788,1187448692,-335544588,-263812305,-336312695,-263782617,-351222141,142016424,-16490869,939459191,16777114,212224,100010613,-955943679,-134074,-1710852353,65535,1593067147,1575324511,1426065090,-326898549,1996445204,825864,1183383552,-2082960386,1946159231,109019910,-15829760,-1070921610,1347440720,16777114,173968128,540231670,1200295028,-27358432,-1996077269,1586168902,138906622,990266883,2114260998,84975881,-1995946197,2122516038,92078086,411335,75399936,-955941632,1094,384714381,108461904,-1962641665,1200356958,105251592,105352016,1342457347,300954,142016256,125338,-163148544,-1070903274,922701904,922682640,-1214642930,-1929379839,1343680070,384714381,-163148464,-6664170,-1207959297]},{"sector":6,"data":[-768901120,-1070903214,-2001055664,-11513216,1996484214,-230257680,-1947318741,-788234738,1354826721,737429131,100921414,726664320,-11513664,1342414902,-26032,-259325952,1575324510,1426065602,-326898549,-11118794,1183648886,-1706027310,65535,31082123,1586168902,243237640,-385649408,1586168065,17298954,1352729972,-1593251068,731448400,66638274,1183385158,140413938,-1995683957,1200354886,-1992278002,-1072968634,-823590027,-1706025472,65535,200558217,-385649216,1183514813,-1202708788,-1873805303,255191054,1183576203,-1202708788,-1873805304,254142478,-15992693,2117685876,-11701004,1996426358,74907634,516703883,-241543344,-1929379835,-969211579,1996443517,209125132,-1915986293,1344143681,-953432437,-6664120,-1962934017,-936642994,74907473,-1915986293,1344143681,-953432437,418074696,427095563,1978957369,209125140,-887041,1183515766,1448091340,400282,-196703488,2126920520,209125154,66471563,1342521862,-1962641665,1083034718,-1957683711,-970197946,-6664120,1577058559,1575324511,1426066114,-326898549,1589925378,931866116,38243110,1946288445,33701166,1048790645,1979646006,-1202301317,-11534335,-402638282,-1202713609,-1001390079,-14285730,-14284681,-1830287753,-2091259133,-16763330,-1202317708,-11534335,-402638282,-1073017905,113706612,-65482,3554947,-1003129345,-2128214946,33555071,-2128205198,34144895,-1960435081,883099207,1200301573,87466760]},{"sector":7,"data":[-1070901674,976682832,194111488,87341136,518224,1575324510,1426064578,-326898549,-1957275896,2123040886,-1427614204,-1070903285,204990544,112726,976682832,190703616,1459373705,990613736,91618374,-352321096,-1547687166,1187446842,-2080374790,12350,922697332,922682202,-396951504,1183447998,-59310086,542874,-28931840,1603000459,-754667262,-153615389,1946356807,-92372213,-955941888,-67002,-1694730497,2357,540230902,-1444347020,-92372224,-385647616,2122514592,58064634,-402614295,-11138776,-396886922,1183447910,2109737978,1007077211,1023410176,225837053,3802823,1187446785,-352321286,-286763476,105265930,-11132044,-396949898,1183447862,2109737978,1077838599,225771520,3802823,1048772608,1946157120,-92372218,1443986432,-1191414017,-397410303,113705728,64,16416387,1048783484,1946157120,1007077155,-16777216,-16557514,-1207947210,-397410303,113705801,64,113706731,65600,4210307,-402426880,-11138911,1996424822,780538,1577613288,1575324511,1426065090,-326898549,-1957275898,1996424310,112648,976682832,168683520,-1996077431,-1705968570,1014,-2080487799,13374,882969716,-28931840,-1996476255,1586232390,41368062,-991362187,876512000,359923712,56243967,3159807,1342177720,-16596760,-352101834,142016272,-1207535873,-397410303,1996423740,-59310328,8435798,-401698736,-167048133,-4717187,-1962742785]},{"sector":8,"data":[-27358266,184698761,-1955562250,-1312388101,65065732,214402040,1963984374,50722317,113707125,65596,113706731,60,3161731,-162892544,1165234181,-1207404801,-11534057,378208885,-1070923718,1347602059,16777114,142016256,-1560132213,-1957691344,1200293982,105186078,541559632,50611459,-397408187,1520696005,-955847933,15366,108461824,295322,-1956684288,113401317,-326413056,1460857987,-28915882,2122579967,159186948,-1962385781,-347600313,-1983894782,548991558,-163149490,-1946663287,78710398,2114185171,214401800,-1996077685,1166798406,-62486268,2123060971,-754667258,142476263,-1962096765,1965816950,-297366780,-1996077781,-166988730,-963967363,-259270409,16023171,1183516797,-1982269452,1983509574,-2095218954,1946219646,-129594601,2146715193,-196703473,-1980217719,1183577718,-28931834,-16222465,1996424822,133425156,990267017,-1770655162,1593722507,1575324511,1426065090,-326898549,1017206280,138813696,4064967,-1070923776,-26032,-6684672,-956301057,13830,175570688,742554,-96040704,1200347275,-129595134,-1710590209,2955,-15960321,-1070921098,9103440,983691403,-28931840,292864011,-15960321,1996425846,1354771448,2095582864,973522698,-956301312,12806,142508800,-2094566400,1946222206,209125136,1342247608,108461910,-352028929,209125132,1342247352,1354771286,151099984,1996423168,-26100,-1073020928,1586176372,860326412]},{"sector":9,"data":[1077723172,2139297140,259260468,880279379,737703679,244338880,1577719528,-1034033781,-1957363702,49054700,1074186070,-956301312,16791558,1007077120,721420288,1513503222,-399281149,922682784,922682202,28835888,1055412224,-1012992,-1711056330,65535,816037931,56271616,-16222465,1996424822,2091012,2122519787,242483206,-16222465,1996424822,780292,-963907445,1575324510,1426065090,-326898549,-950642938,64582,-1710852353,3176,1972107403,2096499458,-1310815476,-1948003580,1183387201,75400188,-15764480,1996425334,-1070901754,-401698736,1170671967,-254,1201276534,-1962934259,1600060486,-1034033781,-1957363706,49054700,73319510,74943270,38243110,1946222653,16923938,71124596,1025012737,125042949,1946224189,-1002443977,-2094660514,1964115071,-1005917387,-2094660514,1947337855,73319465,74972966,-286781808,200313604,-15895050,1996424822,-26108,183173120,112726,-401698736,-1956773881,79846885,-1873273344,-326412987,-2082959842,1448553196,3554947,-385649153,1048773345,1946222646,112645,-1070923029,-1292663,-1207933898,-11534335,-402638282,1183385095,1975520216,45607171,1023952523,1903427597,1967980861,1010729735,1702166528,-1697089793,1829,-1980742007,1187510854,-2097151758,14398,854077301,1958742788,874416936,41911040,-1961329408,1603006558,-754667262,-262274077,51136502,1187448180,-1593835022,1183383604,-16390]},{"sector":10,"data":[-1946526069,2122383991,1951072264,142508295,443893760,-335544392,1681325848,-663290112,3946239,1347469355,-369286936,28836393,-62486272,1023952523,1651769376,-756481154,1958742785,1785163,1048785268,1962934328,-226589946,-1959168768,-167746530,1948267335,943620871,678756352,-362753,518522998,1090030340,1206453108,-954864895,15366,1681325824,-663290112,1347469355,-54794160,-16559128,1285216374,-385875961,1048773049,1962934330,-663289877,3815167,1342177976,184725992,735671488,11004415,6561419,540231670,-135724172,943620864,1333067776,1962933891,-92864750,-59310250,-1946438936,57950456,-402597399,1183515388,-96040464,-1948742832,-11140489,787020918,1975925508,-663290091,3815167,1342177976,184702440,-385649216,-4194438,939968511,-2097151744,14398,-1746336907,-94467328,1208633227,1408648841,-59310250,-1962675992,-58817544,990150144,-2096464130,2097216638,2097036147,-663290001,3815167,1342177976,184681960,-1587710784,1183383610,-663289864,112720,32565328,-1577826679,1178140730,-12487432,-16751562,28891254,-1779937280,-196703236,1356351113,1100186,-96040704,-335544386,809403155,57999360,-2080446999,1946219134,-19076861,1459255039,-386107649,-125107347,58064443,-2080454167,1946217598,906413850,-16776960,-1207933898,-1706033148,3917,6567679,-16503064,-16751562,-396896138,1586231685,-1312322566,65065732,206042840]},{"sector":11,"data":[-1959758576,133626462,-953649919,16791558,1025960704,-1988868096,1967849533,-23271165,1967980605,-23795453,1968177213,-9311997,-939649047,14342,27977728,-1697089793,4233,15498883,-4715148,2147465983,244338770,1577061864,49120095,1562371467,313933,1167087646,518818645,-326903666,1040631576,-1962934016,1451951686,-297367288,-2114955639,1971322874,-49915,113717108,-65482,6567679,1342178488,16777114,1681325824,57534464,32130759,6594818,-337099127,-398029489,-1159180266,1044284406,57999360,-1929342231,1343678534,-1202667477,-1202716160,-1202716151,-1706033151,4012,200951433,-1927449152,1343678534,-1202667477,-1202716416,-1202716409,-1706033151,65535,695517195,384321165,178256,-26032,-1073020928,1048815477,1962999862,-92372072,-1919781632,1343678534,-335822872,1514046352,494141443,56237707,271796214,-1202515083,-1706033148,65535,56243967,16777114,-26112,1692991488,49120255,1562371467,313933,-2081649835,1187448044,-2097151746,1963000958,138840837,-1070923029,-2080618871,14910,512434293,1207304292,645138482,1077102582,1187455093,1392509438,1342177720,33155152,512429547,2139291748,108265524,-1993062517,2122579014,561316100,972965515,427034182,-16762205,-16751562,28838006,1307070464,142016506,1090970,-62485760,-1034033781,-1957363706,876512236,259260416,3159807,669850,872859392,-1962934272]},{"sector":12,"data":[1438866917,1048833163,1962934324,809403155,208928768,3159807,664986,3449600,-1962920799,516120037,1430622296,-1910575989,82609112,-1946801322,456984134,1998877696,212268,305995124,-350391296,1208008195,803980939,-347078466,1258340087,12514027,-1091703987,-387252197,-347274818,2440675,641591156,1037464576,-495714265,1946167357,1590553555,-1962742397,1297948645,1426064074,-326898549,727078668,1996443840,296720900,-467009536,-1962654071,2139817566,2113866498,175606532,108461902,112727,7071824,1183578251,-1311274234,65196804,787906,-939637111,64582,133617803,-1960217340,1077939783,-1946532215,1191180894,-1744336134,1039943305,-277610464,-11485141,-6620042,704643327,-62486044,956581515,74775622,-1586104517,956581515,91552838,-335544392,1590135554,1575324511,1426064578,-326898549,-1957275900,2122516598,276627462,294531,1149961854,132859914,65781803,-1996077429,1183579206,105251076,956974219,125568582,411335,-2096239872,2097153662,172264199,105285960,-1324974453,65524484,214402046,972834443,91555398,-351910261,243106568,-339774464,-1956684045,113401317,-326413056,-1962742653,1200293982,-28931788,359972875,607340426,1950366912,75399948,-2096139264,1946158718,142016265,-1996485400,1183579718,1575324670,1426065090,-326898549,-28915966,1586167808,860326404,1077723172,-593427083,-1961432317,1207305310,276039730,-1995290741]},{"sector":13,"data":[-1072955834,547423861,-28931836,-1946270069,46292453,-326413056,3278535,-6684671,-16776961,-1710880714,65535,-1979425141,-1071369401,611598396,-401698733,1996423354,18266116,74907472,-11485141,-402638282,726728523,-1706012480,2714,1342177720,660122,1575324416,1426064066,-326898549,2122536452,1148452870,294531,1187448692,-351997700,-62470395,1996424088,239442438,-259325952,-1946394997,1149829703,-1995994352,1200296516,38218502,-1961606007,1143669831,373590290,-1710852353,3824,1575324510,503317698,1430622296,-1910575989,1007077336,-16777216,-16751562,-1207933898,-11534335,-402638282,726728375,1347440832,-2081006360,-443874579,-884122337,1167087646,518818645,-326903666,-1957275890,-397015434,-125042999,58064651,1459671529,-1705983957,65535,1048836235,1962934362,-339727612,112643,-1980086647,1183446598,-196703748,15877831,860157440,-2094565952,17112126,512434293,2139292892,376766730,32786119,373195520,175440128,33179335,-62470400,1156972545,91496499,32786119,-1103742720,-955615999,128070,33179335,860129792,-2143502300,1156978037,91554866,32786119,-62470400,1187446785,1459618294,1357906104,-1695254785,5229,-266291113,-59310256,1342106,817387264,1996443888,344431350,-1202257920,-11472800,-1801784714,1459617812,1357910200,-1694861569,65535,-310157474,535137026,46812509,-1864856576,-326412987,-2082959842]},{"sector":14,"data":[-950598932,64582,-1962260850,-1977218946,1004810757,175375942,108314634,-62455993,1183575275,-310157316,535137026,113921373,-1864856576,-326412987,-2082959842,1465257196,556675,-840367235,209125120,1358792936,1342177720,-125720,1050282614,-1962934253,138841072,-1962764056,1207307358,57942067,-1962896663,8398085,1963345467,8775939,-1962117377,75012,-6681996,-1996488449,686553670,16777114,-96040704,-1962123637,104531013,343672070,723797899,103489607,1161364742,1208316424,65788043,-1928831605,1343681094,-16353793,1166738549,172294918,71666512,-1705983229,1145,-1912965377,1343681094,115866,621054720,225705985,-15960321,-6620554,-352321281,-92864760,16777114,2133164288,105286655,1996424457,325622282,1583284224,-1962742397,1297948645,-1946154806,1430622424,-1910575989,1022133208,-1983892649,1183441478,108956644,78185867,-1705806592,65535,-1946401143,1200426589,-1202708990,-1873805303,-23468018,-506231,1183710326,-1706027326,1288,63063691,1183435334,-59310108,-1928438389,1344143943,-1694992641,1467,-1948023,-1315242890,-352321515,1979682851,1226766,1183651408,-6663962,-1929379585,-1959336354,1183384135,1200305890,-465139452,-1948105077,-2090867626,-443874579,-900899553,-661913598,-1957345904,-661774612,1443556483,142510935,-1707837953,5387,-1070337909,-1070447114,111215476,-62486267,1144635443,956658694,393545796]},{"sector":15,"data":[1463055871,-231681,-1962639818,1160456773,362434598,-1929379836,1394013278,75370123,-62485679,139199312,105120593,361273936,243990528,854066116,-96040192,75499051,-1946794359,-402405362,1996423201,108461832,-399215105,1979705594,365074996,1583284224,-1962742397,1297948645,-16775990,-1927936394,1364259910,16777114,-661863680,-1957345904,-661774612,1444867203,242649943,252477059,1586318965,1393972960,-1705830826,65535,1474330251,63190783,19866,-1070377216,1149980752,642001706,742689616,1344816171,1342238904,1342185912,28570,-11053568,-402640842,-6625158,855638271,317430208,209125206,-16091393,1996425334,-26106,1583284224,-1962742397,1297948645,-1325397302,-1914571248,-134017924,50345155,17808896,56654080,18168576,53999872,134396673,50349056,118574593,50352128,17826304,52592640,18026752,56853504,117789697,50354688,18171136,54004224,135680769,50352640,-15441920,50371328,-15479808,50372352,18319104,52073216,135665665,50355456,18196224,54008320,18304000,52009472,18324992,57121536,18191616,57058048,17024256,55649792,17099264,50475520,118919169,83888128,-16709376,50421760,17796096,52606976,118950401,50333952,134305793,50331904,134225665,50332160,18275840,56900864,18232320,55754240,18024448,52772608,17825024,53788416,134301697,50333952,17561088]},{"sector":16,"data":[52675072,17822720,51266304,17474048,56804608,16838656,55496192,18215936,37277952,-16708608,50421760,-15285504,50422784,135756033,50339072,134389761,50340352,18012160,53959168,18294016,57039360,16994048,56942080,18235136,54059264,16854272,55403008,135747841,50343168,17144576,55764224,17501184,50849024,17083136,56978176,134363137,50344960,18009856,56880128,17438464,53637888,17730560,2618368,0,1167087646,518818645,-326903666,-11118816,-6680970,-1996488449,-661914554,1963001846,209617676,-1962511360,1200162374,-1983894776,1183441990,-163149334,-1995815285,-125047738,-1995946357,1988884550,214336508,15091399,22931712,949379,-1705633932,65535,-1980610935,100922454,1149830224,-339571958,172279560,1386283008,138709252,15105667,1183384437,-60912658,1963001846,12511491,1613038730,-96040704,209043467,1088833163,1946830649,9496835,-1980348789,1586225734,-431584260,172439872,1183518325,172243446,1149961854,-498693878,-15829249,2122574454,74711290,65781803,50332088,-11475386,1996481142,183298296,-2082322807,1946221182,2114323253,-129595132,-1995815797,2123101766,-431584276,1089095305,-1948236151,1194982494,-15502070,1996426870,1996443878,-126418954,-1995787800,1586225734,-431584260,172439872,1183516277,138906082,-1962640247,1149892678,142344966,2112126521,-461469380,83245035]},{"sector":17,"data":[-1961593504,1141110854,-60912886,2114471739,-427916523,51344384,1183575678,-129595128,-1995946869,2089414214,-129594620,-1962523511,1174473284,172264440,2113291833,-163149565,956843147,58584646,-1947318647,133626974,-1962380031,-956043706,-2082191735,1191121094,-60912666,971392651,58591815,-1946249751,1177281606,-2147089654,105351428,-1948023,-6680970,-1962934017,1600053830,-1962742397,1297948645,1426066122,-1957237621,1149895798,1019225139,-166235072,1965044548,860157452,1443263504,16777114,112640,-1070923029,1575324510,503317186,1430622296,-1910575989,1988843224,1654281736,184549378,-1978305344,-1071369404,208945212,-1996077429,-397003708,49020837,-2090942421,-443874579,-900899553,1478361092,-1957345904,-661774612,108432214,47028822,-1073020928,-397015948,-2090926215,-443874579,-900899553,1478361090,-1957345904,-661774612,-15930237,1996425846,108461832,-1728050760,-6664110,-1996488449,1996485702,-6664182,-1996488449,-310117818,535137026,113921373,-1873273344,-326412987,-2082959842,-1957290260,1187449974,1442840814,16777114,1975520000,29747459,637951684,637695999,638089215,-1710852097,65535,1039287945,175374592,1946223165,-373282018,1187447202,-16776724,-6681994,-1996488449,1451876934,1975651300,-941430007,60486,1589962219,126494434,1183441962,75238,1961641531,22341891,637951684,-1006352501,958849630,57934151,-1962851863,203810374,277760]}],[{"sector":1,"data":[-605486219,539904,-655817867,-297351424,-1070923775,-1980348791,1589962822,1200301794,-96040701,876907350,1358186121,-362753,669574774,-163149567,896909323,-1995291509,-1072958394,1156977269,208930866,-1996218207,-1705577402,65535,-193527978,-362753,-135731594,-163149568,91537419,31999687,860129792,136700970,-129595136,695582731,15236739,1190536053,494207718,16154243,1048778612,1962934378,1996445200,-92864524,1342210232,-270004592,-163121663,-2091158271,1946220158,860157452,-2096729056,1946216574,-159481015,-2096270336,27198,2122529909,913637624,-394362026,-1206094848,451608850,-352317256,1161219,-26032,-1073020928,417923965,-1203639297,-11534063,-1070859658,1375732154,82221648,2122514432,678756600,15236739,1190535797,477430502,16154243,1048778356,1962934378,1996445199,-92864524,-1873756117,23128078,98715267,-2132392202,-1981217931,175570942,16777114,-297366784,49120094,1562371467,576077,-2081649835,1187450092,-2097151750,1962936446,11069699,-16222465,1911031414,-196703999,-385649344,1187446934,-16776454,381160054,1996443649,1354771208,85826128,1996423168,105945608,1183383552,-196703234,-523041615,100550147,1183383564,-153580554,359927815,-1207273729,-11534057,1183515255,1347590644,16777114,-161576192,52758410,-62486272,-1710721281,1364,-16222465,-1070922122,-401698736,1183384631,-1965519882,206087,-506231]},{"sector":2,"data":[-1710870986,1493,16285315,2122516085,74711292,33181312,-1946532213,146955749,-1873273344,-326412987,-2082959842,1448543980,1183577643,139394824,1299496971,-15698177,1183518326,67118342,-401698736,-125107237,896859915,1963197942,241011495,1983461259,-1962705656,1166739574,507527182,209125200,1443526399,476570,173982720,50726,103692031,437402,1590070016,49120095,1562371467,838221,1167087646,518818645,-326903666,209125124,141210,1958742784,176063278,-148343808,67110470,1996426357,142016266,-1996479512,1996425286,175570700,-1962379521,-2145057210,-6664192,-2097151745,-443874579,-900899553,-1957363704,183272428,1187468887,-939524104,63046,-1710852353,19,-113015,1996424822,1354771204,350752400,200837891,-1958382337,1200356958,-129595126,78770315,-293345581,-2081225968,468389062,-2080878849,2080438398,1962359578,268760598,1149961844,-163149566,-1592725885,1178142254,-2263562,-1710870986,1716,-1710852353,1883,1593329291,1575324511,503317698,1430622296,-1910575989,283935704,1187468887,-2097151752,1962938494,-373282043,1190593027,1946681350,-1983894776,1183386694,105314058,91488512,-15841593,276234239,-1961986305,2426438,244338692,-1962775832,105314296,1551106560,-1049297141,105789067,69724247,1149878315,105154824,504382861,516393808,172264272,-523041615,-953432573,1342178349,16777114,172818176,268725379]},{"sector":3,"data":[-1996209013,922742854,-744880594,-16777215,-16372170,-1070862218,-26032,28835840,24242432,15877831,172395264,1946961419,105313804,-1960217596,1183386182,105314034,188773504,-1971751681,8398085,1475888777,-1962694424,-1593422282,1183385134,14936336,-15960321,1894255222,-230258430,-847921141,58064651,-59671,-1710870986,2042,201263849,-15960577,1083838582,-1962934264,-1593119760,1183385134,1312197392,71600902,-1996484603,1996484678,148281872,1996423168,-260636912,-1705983957,1898,343261195,67520246,-991362188,-227082242,16777114,-21370624,-15698177,1183518326,67118342,-401698736,-125107901,209059595,-1710196993,2246,183234699,-1996083551,915083334,1183516238,71600624,185222399,-1960872705,-1924129081,1344147525,-1324727157,65065732,768027590,-1706033148,1477,2122520043,259391246,-1324712821,-2081959164,-33353489,-1962096765,2133132870,-129627392,2122515849,108331250,-2147277440,-1070923251,-1995946871,1183516228,239438322,-1995946357,1190527557,376705030,82745936,1183383552,-2133292038,1996423439,148806152,1996423168,87071248,-1981218816,-2090901762,-443874579,-900899553,1478361100,-1957345904,-661774612,1988843095,108956424,100244054,-1073020928,-16035212,2088967540,896794642,956571809,762581572,-1877838593,25552910,1197255,-2095125760,1962939004,843380248,-15567864,-1207721930,1385758721,-26032,1149829120,310149906]},{"sector":4,"data":[-15895552,-1070919052,-401698736,48955932,1600045099,-1962742397,1297948645,-1325398838,-1914571248,-134017924,-1864856381,-326412987,-2082959842,1465255148,-16220541,-1070398091,-16741911,-610661770,-1962934265,108954608,-1961724928,-1073018810,1144775804,-402230518,1189871549,172264336,-335563544,621120331,1183383568,-14387974,1996423797,1354773256,-1528295792,-62486017,1946157069,175570702,511130,-62485760,-2121256213,64078,1166743157,138820354,1183518325,103719690,105789065,350996363,-1928269949,-130347964,1996467059,165779978,-1070399488,-310157729,535137026,113921373,-326413056,105286486,1946437131,108461875,-1710983425,65535,1086058635,50680576,-6664192,184549631,1343583424,931780747,1394492227,-16353537,-6683530,1476395263,1575324510,-1946155838,1430622424,-1910575989,4372696,1882192,172726864,-1073020928,1347426932,160930384,-661979136,470042567,38258432,379256831,1476395018,-1962742397,1297948645,-1864856373,-326412987,1457032734,105286487,745848843,-1706012592,2702,1150021771,-23074806,-396950293,-276627339,205819152,-227280837,696218,136157696,28311552,-310157729,535137026,46812509,243968,146342891,-1864856576,-326412987,1373146654,-16091393,1183516790,67118342,-401698736,190447195,555578560,-661977522,-1054668917,567408464,105286415,922683145,-509999570,1476395018,-1962742397,1297948645,1426065098,-1957172085]},{"sector":5,"data":[1166738558,1958742798,67499788,1342600448,714394,268826368,-16223232,244318837,1610562280,-1034033781,-661913598,-1957345904,-661774612,1443032195,-62470313,1317076992,1946157064,142016303,705690,-1947170048,1144718918,1024815882,276561920,-1946304280,1058053,1166739060,-62486270,-1710721281,2875,1610368651,49120094,1562371467,313933,-2081649835,1465256684,16271047,71731968,-16366079,-1717957514,-1962934261,-25872,1183383552,172264438,2081048121,13232387,2131248697,172395512,-171800,922744438,922681420,28835918,-6664192,-1560280833,1183515970,-28931830,-946836757,64070,-1996077429,92998725,1962935333,241011520,963959563,503465869,637008,-26032,1183383552,241011708,561252155,-1913227521,1174602311,1344159996,1177225099,-1706014468,3103,88212995,-335919479,105286400,-1946532351,1178335814,-1996261640,-947652538,-28901616,956843659,41811526,1352764907,-129629948,-401979765,1317797057,72231928,-1995815285,166460998,-2096476791,1191121095,-28931074,1913144891,-159973393,16777114,209125120,770202,-129594624,-443851169,705117,196633,66618,208504,67704,217732,16714054,16973974,461411,16973912,461372,196698,66280,208402,67846,16998546,461442,16973829,460808,16973830,461665,16973831,461803,16973832,462041,196617,68724]},{"sector":6,"data":[217790,66646,16983359,459929,196627,66053,216268,68594,211153,16712612,196970,16711772,196973,16713259,196975,16714834,196977,68817,16988385,459415,16973884,459427,16973885,459527,62,0,0,0,1167120524,518818645,1465309326,350470195,-1705947056,65535,-1709307165,65535,780375,-310157729,535137026,1439386973,-326898549,71731970,-402415453,-119010729,95807492,-402527000,820512403,9037825,-402285592,-51902216,571403,-26032,1085800448,-157200384,1049861,17406544,379781120,73328644,16777114,88776960,-1588528943,-120519348,-26032,922681344,-6683128,-402652929,28839480,1389505408,1354771280,-805258672,-1588572078,103482638,-11533208,-16445386,721709110,-11513664,1342414902,-26032,883097600,172877830,-1962933832,46292453,-326413056,1460071555,84975958,1645120409,-1543899388,171771362,-955875840,168157702,4241408,964688,98709239,1342195205,16777114,-2081387776,-761065786,-2084140283,-1566372154,-2084140285,-1163718970,-2084140283,-626848058,-600405755,85112836,-1070903266,922701904,245433616,1745234693,-6664188,721420543,-1592595457,1149830420,-2082567422,413208262,105351429,-499238585,-941064443,580,-964436341,84844814,1577469833,1575324511,-326412861,1444211843,15615687,-294221056,1438181073]},{"sector":7,"data":[-296842752,-754851456,-264074784,-2081536257,2080960126,571620,28856400,-1924116480,1343680582,16777114,-330921728,-26032,1352859648,-327745787,16777114,1354771200,122266,104243968,1342177720,125338,100967168,1342178488,16777114,68985600,1575324510,-326412861,1460726915,74877782,1347469355,-1710852353,65535,-125107063,964695,-263811760,-6664170,-1962934017,1149891654,-230257916,1577206921,1575324511,1426064578,-326898549,-1202301134,-4584427,-1706011905,65535,1342575779,-1728052808,1790464082,40745474,1922715730,-16777214,-1207561162,1385758723,-18352,1392508858,-26032,922681344,28837396,1347590400,-1173611080,1347616767,16777114,-834238208,101988095,-26032,1183383552,-6663984,-1996488449,1451883590,-60898050,50087555,-1559786714,1586168928,-62487556,126559746,-1207673181,-1952907200,1183054942,-1960443140,1846446351,-1543899388,1085801578,1586206976,-62487556,260777474,74452617,1822685687,-1556070396,1788937320,525572,-1207671133,-1952907232,1183054942,-1960443140,1980664079,-1543899388,548930674,1586206976,-62487556,260777474,74976905,1956903415,-60912892,50087555,-1559786714,1586168954,-62487556,126559746,-1962639709,1183054942,-1960443140,75539207,-556251449,-767113469,451608586,-2082972021,-1006315450,-1960379266,1435182597,-1995994878,1182990935,1183515900,-766574638,-596262901,-1697614081,65535,-1697614081]},{"sector":8,"data":[65535,-1962597912,-16363490,1186464887,-11526651,-1711030730,65535,1342180792,119194,75801344,62011135,383403661,-26032,1183514624,99394522,-1545320821,616432674,2147465220,-964471216,-32118778,1350565560,113673046,-1191310616,1448116221,-402209149,-54985217,-2091495297,-186120506,2147203325,-964471216,-35002362,1350564536,113673046,-1191321880,1448116217,-402209149,-122094125,-2091495297,-924318010,2146941181,-964471216,-37885946,1350563512,1342519480,-1577209112,-523172736,69731843,-331940016,-26107,111345664,72786181,-120457007,-1593550173,-1181154216,-101253117,-788243293,-1207687618,1344144624,75380479,721749665,721692678,1342472198,50603681,1342471686,721749665,1342472198,308122,60340224,-1070903266,648106064,2114323204,922701828,1201276166,-1593835519,100861190,1688405120,69640452,69993987,-150993991,73573353,-443850914,-1957313699,49054700,52954766,637934241,-1906664541,-1593628154,-1557789156,-1070900579,-6664112,-1962934017,1438866917,-326898549,1354771202,-1157627976,1347616767,336282,1354771200,-1157627976,1347616767,16777114,738627072,113714691,1400919200,16777114,1575324416,-326412861,-1191198488,-4584397,-1706011905,580,899152,-1706012007,65535,53347982,1519887142,-1726576346,1354771290,-26032,-727515136,-703166203,99792901,-6664162,1023410431,158597132,1342180536,386714,-1073297664]},{"sector":9,"data":[-956301311,17071110,104773632,-6664162,-2147483393,409150,113708149,-65088,75237063,2090926080,28615428,53479054,637944993,-1906656861,-1593626106,-1557789114,448289467,-1706025466,65535,1946158141,964617,-26032,-443875328,-1957313699,1644611564,1560281088,-326412861,1459940483,1354771286,-1706012592,1558,721796259,1347440832,103062096,44236800,1354771206,-1706012592,1744,-955961181,413702,78561024,1352791595,-1207596794,1069157397,726684162,1347440832,-1706012592,65535,-972798583,-956299451,66117,-947665013,105947912,100565830,-661926788,-1710983169,65535,-1962691933,-16363490,146277495,-1634054144,-1560281082,109970704,-1557789900,512449205,2013202000,702468,-26032,245563392,906399237,-1214044669,88520794,-1070903266,922701904,922682640,-1717959410,721420292,-11513664,-16445386,-1710944714,65535,1577327267,1575324511,-326412861,-1207767933,112856122,-1202695673,-4584367,-1202695425,-1706032652,1814,-26032,985137152,119847436,1924681810,-17908,-1070903214,-26032,-1706033152,65535,-1173603656,1347616767,-1173593672,1347616767,-1173598280,1379991551,-28930736,45633558,-6664192,-1912602369,-1979500538,942079558,1946963718,1335895570,1385797644,-26032,1178075136,-1207601666,48955393,110018603,-1557789894,-1070900573,2130753616,-1706012007,1937,721815715,28856512,1347590527]},{"sector":10,"data":[500378,106341120,-1202667477,1385791236,129210960,-291307520,1354771205,-1719697224,-996519854,-1560281081,-1070922256,2139207760,-1706012007,65535,721746083,12079296,1347590527,517786,103588608,-1202667477,1385791233,133667408,-626851840,1354771203,-1719729480,144330834,-1560281080,-1070922612,2130950224,-1706012007,2073,721663651,79188160,1347590527,16777114,98083584,60831487,-1728052808,1033523282,-1560281080,922682400,45613984,1347590400,16777114,64791296,-1017256565,-2081649835,-1923739924,1183446598,-27882244,1187444267,1589903610,1065362948,-14781152,-219478970,972193408,179314815,-990220554,1191117918,117581316,1183330348,73319674,-2012771802,809300550,1589959293,-62455812,653936266,-2092562552,-1233386498,654073483,-1962932282,1452013126,-443851016,311901,-2081649835,1448551660,-956056385,64938054,1119417899,-17908,109989970,-1977220292,705422492,-2088268289,-17908,-457682862,-17822,1183666258,-1202710812,-1706033127,1859,-1948230005,39291655,-1982052727,2122374742,242483428,384059021,-13572016,-1982052727,1996480086,-596181026,16777114,-1982166016,46629637,-2082447733,-1962614714,1452006470,-1995994658,-2092563881,-2105799938,-443850914,-1957313699,585925612,16777114,-565802752,-532247216,-1030074346,-16777213,-6627722,-1593835265,-1901918902,88908033,-1593732957,-1834810318,71737601,-1593731933,-1767701242,75407617]},{"sector":11,"data":[-1593730909,-1700592512,374785,75378423,-1207853917,787939333,-1633483648,73441537,-1593728861,-1566374818,74096897,-1593727837,-1499265940,74621185,-1593726813,-1432157068,-532247807,65553923,-1559986170,1252065708,28222213,721767585,-1559951866,2057372080,28484356,-1560005471,1151402422,28877572,28968647,109969409,-1591344322,-1130145117,1575324417,-1873273149,-326412987,-2082959842,-1957295380,-6683018,-956301057,6150,470220544,81568005,314069022,-1706025467,2656,3687622,-600375466,1354771204,16777114,-163148544,314069014,-1706025467,65535,688160417,1174533702,1183667962,-1706027274,65535,-26026,-1705639936,65535,16777114,-310157824,535137026,46812509,-326413056,-16061309,-1207721930,1385758721,440400,-1706012007,649,200689289,-10324800,1342414902,169626,-1617276928,-1560281086,378078378,1183384748,-27883012,1098170891,654073540,-467007606,-939899255,63558,-500085,1183579206,-27882500,78251562,101353352,33179275,1589967942,126494460,1183441962,663234298,-2080880897,2081028222,1575324623,-326412861,1461644419,-196688042,1187446784,-352244490,4241529,-159973552,28314,-1192195328,-1078326199,726684171,-1202696000,-876977436,-1957670389,-11526458,-644155786,-1996488693,-1072963002,-24428684,1183523819,1002832886,-2145356089,343212093,97664,1183518325,1002832866,-955943225,128070,-193035449]},{"sector":12,"data":[-2083032064,1962996862,1268405777,-2097151988,-345704890,-196688123,2122514433,-2123104012,14843523,-1863777419,-1191277824,-4584375,-1957670145,-1202708793,-356883740,-1924115960,1343677510,1342181304,587930,1958742784,-465138347,-1929754999,938212438,4161574,1191128693,130426618,-94467282,653936383,-1958344762,1191180894,130426618,-94467249,653936383,-1957820474,-970524066,216727559,-990230785,-2144929186,-1066062273,384059021,-26032,-2142830592,1962999677,-498693127,-952383997,1927873398,-6662401,1577058559,1575324511,-326412861,-402645016,-739770229,24700928,-402579480,-219676138,77785091,-402373912,-443874888,-1957313699,49054700,84975958,1712229273,-1543899388,748881194,671532805,-1207959291,-1202716608,-1706033126,3320,1153953931,-947912426,6212,-1996162911,1153896004,-939524350,-64444,-1996250975,80153156,1153892363,-1962933744,-1706025274,3364,221026902,113704960,1588,1575324510,-326412861,-1207767933,-1202716608,-1706033126,3395,-1946270071,373802968,1204256768,-956301288,-956268537,-64953,-16496697,60858879,-1962260599,-1706025277,3446,-1694599425,3454,-1017256565,-2081649835,1085801196,448286720,-1785049088,-1996488691,-661914042,-1996093279,1204227655,-955519466,-59321,-16627769,71813119,1204289535,-1593834232,1200161696,516131594,231512656,1996423168,232037118,-443875328,-1957313699,49054700,1342193848]},{"sector":13,"data":[1342184120,912282,-28931840,144824459,239569158,35014599,407357312,1204224000,-939524350,-64441,403195847,60858624,-955627639,-1962932217,-1706025277,3614,-1694599425,3622,-1017256565,-2081649835,1085801196,448286720,1033523200,-1996488690,-661914042,-1996093279,1204227655,-955516394,-59321,-16627769,71813119,1204289535,-1593833976,1200161696,516131594,242260560,1996423168,242785022,-443875328,-1957313699,49054700,1342193848,1342184120,954266,-28931840,144824459,239569158,51791815,407357312,1204224000,-939524350,-64441,-1996250975,1204226631,-1962923000,-1706025277,3778,-1694599425,3786,-1017256565,-2081649835,1085801196,448286720,966414336,-1996488693,-661914042,-1996073311,1204227655,-955517674,-59321,-16627769,71813119,1204289535,-1593833976,1200161696,516131594,-26032,1996423168,194747134,-443875328,-1957313699,518816748,16777114,146688,1994982260,204060673,1376737978,1354771280,16777114,-297367296,-385649344,1996423517,1354771438,178256,255433296,1183383552,-229209616,1342194360,-260636846,16777114,-465139456,-26032,1183383552,-363427352,737048319,1347440832,16777114,-294191360,-1411329,1996482678,-25872,1996423168,-25874,699924480,-17908,-6664110,-1006632705,-1960384418,-431585017,38243110,-1946925431,20833862,1024488448,58523650,1023465705,1149108227,-1962880791,1452009542]},{"sector":14,"data":[263658,-11382702,-6625162,-16776961,-2003114890,-1962934269,1183441990,537315322,-956301312,16786438,-428409088,-1694861569,65535,16777114,9431296,652762820,-1996208245,-1960385978,1183385159,1200301822,-330921720,172460838,653674121,-1995683957,-1960379322,1183387207,-427916296,-1207601917,65732616,-788527432,-398065184,-1935617,1996488310,-159973396,-1411329,-1248139146,-1996488703,2122578502,208995302,-59310256,-1694992641,65535,-1696303361,4003,-1696303361,65535,2098887,113704960,65572,1342177976,-1946197527,1438866917,-326898549,4241410,1751120,281320016,1183383552,-1579643906,1200162312,373802766,1204227073,-939524328,-64953,-16496697,134727679,60858624,-955627639,133191,1344193419,1111706,-25755904,1113754,1575324416,-326412861,-1207767933,-1202716608,-1706033126,4427,-1946270071,373802968,1204256772,-1593835496,1200162358,50841360,38258432,1204289535,-1577058556,1200161696,516131594,293771856,1996423168,294296318,113704960,1458,106432199,-443875328,-1957313699,49054700,-1559994207,1587610852,96903940,-1560005471,1050739942,97035012,-1559986527,-324860464,75538692,-1559900509,1085801710,448286720,-1600499712,-1996488692,-661914042,-1996093279,1204227655,-955512554,294787143,-16627769,71813119,1204289535,-956299256,-1593832697,1200161696,516131594,215259728,1996423168,215653118,163053568]},{"sector":15,"data":[-17908,-6664110,-1560280833,-443873756,7717725,38993925,27263231,101187843,4194312,153420035,4325384,264568835,9044223,250675459,4915207,257884419,4980743,29950211,4521992,98042115,6619140,264241155,9240831,277151746,201392129,230031362,1661075457,149028866,209911809,123601155,5242887,90833155,65537,257032451,5308423,235667458,1661272065,85000451,131073,256508163,5373959,241041410,1912995841,252313859,5505031,213778434,1661468673,291635202,201916417,137035779,9830655,292290562,1661665281,109248771,5242888,91947267,65538,35324163,5373960,171966467,1686765569,246415362,1661861889,219283461,20054271,224657410,1662058497,261816579,393218,61931779,5701640,176160771,403701761,277807106,1662255105,104792066,202702849,94306563,65539,39190530,27263231,157483267,6094856,170328067,328597505,283377669,20971775,42205186,203227137,229703685,1661075457,125829123,11337983,235339781,1661272065,131399683,11403519,240713733,1912995841,34078723,11469055,213450757,1661468673,83296259,1562509313,291962885,1661665281,84672514,1420296193,250150914,204013569,7929859,28705023,246087685,1661861889,219611138,20054271,279248899,3735807,224329733,1662058497,277479429,1662255105,88276994,204668929,204603651,7798792,87097347]},{"sector":16,"data":[1571880961,92864771,65543,12976131,36831233,1310979,262151,283705346,20971775,275644675,327687,115802114,205127681,279773443,458759,113180675,1681719297,147718146,205651969,253559043,983047,84475909,1420296193,272892163,1114119,254148867,1179655,272367875,1245191,175374339,323223553,188940290,206110721,1835267,1572871,120848386,206503937,72482819,1380712449,116326402,206635009,117309443,-2033188863,119275523,777060353,156565507,953221121,6160387,1574109185,9633795,928645121,175767555,945487873,249102595,2818055,271843587,10682376,120324098,207683585,88604931,3080199,85524741,6815748,189726722,1659109377,158007299,954269697,89391363,3276807,173080579,291766273,61341699,24576255,270467331,3145736,116916483,3735559,190513411,3801095,224002050,200146945,179044611,3932167,108003587,3407880,180158723,3997703,105644291,3473416,180551939,4063239,118358018,208797697,59769091,4128775,9043971,879755265,85721346,6815748,245760002,200605697,39518467,4390919,29229315,3932168,176488451,980680705,295108867,4521991,235012098,200933377,0,1167120524,518818645,-326903666,-11053562,1996425846,108461832,-1728052040,-6664110,-1996488449,1996487750,-6664182,184549631,-1959496512,-6663952,-1962934017,1959398344]},{"sector":17,"data":[-1924115930,-397346746,-1073020886,1979205259,-6664184,855638271,-1705619264,65535,-26026,1599602688,49120094,1562371467,445005,-2081649835,1465256172,16777114,1958742784,-129595058,-1912177013,-1070397370,-1962571226,279463920,-1960441739,-96040699,-812955833,-2144943476,74776637,-768358093,-1979953527,-1977156010,-1073068283,-956827531,309592080,1183667974,-1477947142,200838143,-1727826494,1996436971,1354773496,-100609,1996487798,8108282,902691,-6664191,184549631,-136547136,1946190022,73304974,922240651,1451952009,1606912776,1575324510,1426065090,-326898549,509040132,209110524,-1962377532,1183515742,-1981230842,19267142,-62486272,2085353515,-28406988,-1375961597,-1059991413,-1031090141,-523181871,-523181871,-523181871,-963977007,-523181871,-523181871,-523181871,-997531439,-338369878,1583292361,-1034033781,-1957363700,149717996,-65120426,-1005685051,1586170494,33260292,1183532926,-137219322,-28931597,1258835595,-1946657143,-1981679677,-779355066,1579933323,-11842564,763166286,-1946395133,-1981230654,1325398598,1139571962,-1946973373,-129070332,69464579,-341050654,105286633,-787978505,-204960792,1583292325,-1034033781,-1957363698,49054700,176063318,-15043584,1996425846,108461832,-11485141,630850678,-1962934270,1979059184,102015258,1342850697,-16222465,-1070922122,74907472,181146,200313600,-16026378,-1705637258,723,-963907445,1575324510]}]],[[{"sector":1,"data":[503318722,1430622296,-1910575989,175570904,-16222465,28837494,-1914155008,49120255,1562371467,445005,1167087646,518818645,1996478606,142016266,-1207535873,-397410301,-310116504,535137026,113921373,-1873273344,-326412987,-2082959842,1448545516,-1962510709,-1073000762,-1070922379,721456105,242679807,-1324595573,1089000196,1347605035,-1728051528,530206802,-1996488704,-1072958394,1996445812,731533326,-1996488704,-1705969082,1454,-1980348791,-1039402922,1719745652,-1006629108,1191179870,126494454,-125049814,-15972725,-1073017778,-29676683,-24444290,-493825,1996486262,142016266,70949463,1996423168,67345146,1589903360,29763080,-339244288,-159514363,1600043499,-1962742397,1297948645,503319242,1430622296,-1910575989,485262296,-16222465,-6683018,-1996488449,1187511366,-2097151770,1962936958,142016288,721843967,-1706012480,65535,185222793,721778112,32762304,-1685817,175570943,16777114,-364476160,200038025,-15370814,-1070921098,-59310256,91265616,-1073020928,-722742924,15105667,1996434804,108461832,16777114,-431585024,-13994944,1996482166,-361299988,-1694730497,65535,-15305664,-73734538,-1006632957,-2144933282,510984511,-352321096,-427916517,-16222977,-6625674,-16776961,1637485174,-385875963,-1070858379,-990886263,-2144933282,1946157439,112645,-1070923029,-2080881015,-1962738578,1452010054,132588,-11382702,1996483190,-25860,2122514432]},{"sector":2,"data":[779354352,-1996198239,1889663558,-163149564,-1996199263,1822553158,-230258428,-1947574588,-120458170,-1962440410,-120458682,38242598,1990269163,-96040700,-1996195679,1923216966,-196703996,-1996196703,1183576646,984564,61992996,1317796051,-136195598,787945,-2080618871,1962997886,11659523,66733707,37615174,-385646848,2122514595,494207216,-1947574588,-1960379826,-101213945,-1962440410,-1960380850,-140967353,1200170745,-362888190,71797542,653149833,-788117621,-398030368,138906406,-1947974007,-1993935802,1183515719,1200170738,-196703482,603983621,-754732560,1200170744,-92372216,-1961264126,96636099,1347551244,201704331,-11513344,1996481654,-69211928,49708675,1183523708,-329872406,1375734789,-364475568,1375734789,-362888112,142081830,-1542401,434697846,175570940,23706,175570688,-11485141,-1705968522,65535,-2096478581,-443874579,-900899553,1478361094,-1957345904,-661774612,-14488445,1996425846,108461832,1342177976,-1979954200,1183445062,1975520252,30730499,3643984,1183383552,-94991880,653811396,251742198,28837236,721611520,-230258240,-1946663285,33946198,-129595136,653811396,-1996339317,-1960385466,1183384647,1200236256,-1981535736,-1977160634,1183385927,1207314164,460685313,-1804545,1996480630,-1014279956,1375735301,113613392,1183383552,-12850180,-16534986,1996481654,-25888,1183383552,1183535356,-194054172,603983621,-754732560,-328271880]},{"sector":3,"data":[-1713344777,1183535186,-94991368,1375735301,-26032,1996423168,52599536,1996423168,6462192,2122514432,57999612,-2097081879,1962996350,17361155,50622113,1023700998,58654722,-1962870295,-1952848826,-150704626,-364475911,-1713355125,74452619,1183447543,-1305018392,-26109,1183383552,1975520238,12642563,-1411329,1996482678,-193527828,1347469355,16777114,-431585024,58048523,-16741399,1342419510,453530,-498693888,2054471691,-1149185,916126838,-1996488697,-1072957882,922708084,1183515570,-196738068,1342178232,16777114,-1305018624,1354771203,-361300144,-1542401,1347481206,-1804545,548986998,13416960,-6664110,-16776961,1996484214,121805558,922681344,1996424114,-25886,1996423168,124820206,1996423168,124295932,1183514624,-62486042,2122523371,141820134,-1696172289,1912,-1695648001,65535,-1694730497,65535,65781803,-2080618869,-443874579,-900899553,1638406,122290435,4456456,122814723,4521992,64946435,5308423,64225539,5373959,52035587,1384382465,8192003,9896191,5439491,9961727,15663107,10027263,106037507,6946824,117768451,458760,61210883,1048583,59572483,1179655,106561795,1245191,103153923,10223624,120258819,2293768,114884867,2949128,101843203,3145736,34013443,3932167,111542531,3407880,36962563,3997703,47972611,4063239,107086083,4128775]},{"sector":4,"data":[62718211,4194311,56033539,4259847,57934083,4325383,0,0,1167087646,518818645,1996478606,209125134,1347469355,1384155322,245452880,2047224581,922701828,922682640,-1070922630,1996443728,142016266,-1710852353,65535,184953507,-1593412416,1285750868,103457031,-1962742397,1297948645,503319242,1430622296,-1910575989,142016472,16777114,1958742784,103457041,1963476537,1996443657,-26106,-310181888,535137026,80366941,-1873273344,-326412987,-2082959842,1183517420,75145990,103431811,-14715904,721824310,245452992,2047224581,922701828,922682640,-1070922630,-26032,-310181888,535137026,46812509,-1873273344,-326412987,-1596420578,1178076658,-1610056698,1178076659,-1609531898,1178076660,-1609729018,1178076659,-1207599354,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2116514274,-16387522,-2130151938,-16387010,-1207601922,48955393,-310132693,535137026,80432477,1694499584,-1845493504,939524960,838861056,2046821122,1124073728,-1107295474,1241514240,32,0,0,1167087646,518818645,-326903666,-1202301174,-1001390016,-1960442274,604309063,2090487808,-1962934272,1979059184,-373282043,1996423326,108461832,503989389,1751120,-26032,1962868736,544538402,16777114,71600384,980729867,1149878315,541362466,-1961081717,1183391316,-61437446,1098174987,1342193848,-92864686,16777114,-1706016768,65535]},{"sector":5,"data":[-15992693,1962872949,37526020,-1705639936,586,-947153941,1996443678,-92864516,16777114,-1983411456,1552686148,38061854,-1070904498,343211856,136858,340035840,-1996483423,339118340,112640,-310157474,535137026,80366941,-1873273344,-326412987,-2585058,-6681482,184549631,-1961265984,1602948190,74972932,-16091393,1996425334,-26106,48955392,-310132693,535137026,147475805,-326413056,16968833,73304918,-351504501,176063322,-1962183680,1183515740,71776522,1183532917,138808070,-963967883,1996440555,23173640,1183383552,-2037557752,1343684352,1342242744,16777114,142016256,16777114,-1983739136,-11532218,-2037578122,1343684352,16777114,1958742784,187993025,732067318,-443851072,574045,1167087646,518818645,-326903666,-1957275894,1175128646,721712396,-15995968,1996426358,-26102,1183383552,473861114,96961285,-1996107103,434895942,-362753,1996425334,-59310330,251414147,-1946206488,1979059184,1338477321,-529154037,1600045099,-1962742397,1297948645,503318730,1430622296,-1910575989,116163544,1996445271,-26106,20774912,726889728,1996443840,-26106,1183383552,1359622,1183529707,340015366,2088972405,141819910,-1710852865,65535,-1710983937,65535,1997955,1962870900,39098908,76218368,-1705638519,65535,-24444181,-167037557,1600045173,-1962742397,1297948645,503317194,1430622296,-1910575989,173968344,957106059]},{"sector":6,"data":[796198470,556675,-1705834380,65535,1586176491,1011336970,1204289535,1409285950,-1174222408,1347551948,-16222465,-6683018,-2097151745,-443874579,-900899553,1478361094,-1957345904,-661774612,-1174217544,1347551967,-11485141,-291895690,-1207959550,-4521985,-1957670145,-768932282,1375849088,-26032,-310181888,535137026,46812509,-1873273344,-326412987,-2082959842,1448543468,-351897973,1463126795,-1705983957,65535,-15991157,1600057205,-1962742397,1297948645,402653898,33620736,1207961345,872481536,1140852738,1040188160,-2080374528,1963000658,1459619585,-1593769216,1476396800,1963000576,1509951232,-687865088,201326850,-419429502,-1845493504,-1660943776,-1694498558,-1593834137,1090584322,-1358953727,603980034,-1744829054,-1694498558,-1543503257,1090584322,520160001,83887872,-1878981888,117442304,402653952,-1040187133,1174471432,352323329,1493172992,-603979519,-1191115935,788530944,100729600,805308162,-1946156288,-452984574,-1375665401,1157629697,1224803072,1174406912,-1979645184,1191184128,0,0,0,0,-2081649835,1448543468,-1962641781,956676158,92146805,-352172661,205884199,990528771,-1962573882,418055237,721700235,-1957690811,205859782,175505232,120218,38077184,-443850914,311901,-2081649835,1448545516,-1962510709,1183386180,75400190,-2096860160,1443298886,385238669,-26032,1183645696,-1957685514,-654893500,541363024,-1705977609]},{"sector":7,"data":[713,294531,2089497460,545008424,158662411,103532427,1174471808,843380472,-1593215984,103482432,48956544,1177141291,-96039940,70387243,-336181623,-62485730,71304747,-151501175,1948267076,70426889,75367979,-1070923029,-1912977879,1343682118,-106869,41418551,-16484353,149423222,-1956684288,79846885,-326413056,1460071555,71732054,184788131,-1004112704,-1960440738,-358415801,1200301573,104375046,-1559786714,-1960442928,379782215,81706502,-352026463,207537188,-1559786714,-1960442390,950207559,1200301574,64004866,105351974,-1106897245,2124481984,-96040700,95958665,-1995815285,138840836,-1962785655,1149830726,943622916,-365024506,-1946169083,-130348988,-125107586,-1577419261,1143670250,-1983446256,1149963332,105130768,51135531,721827846,172263879,50719393,78029767,2114485305,104374287,99223082,74777000,77991679,721828001,102933447,1143669899,1962889218,71600906,1342325803,16777114,205783808,-1962560349,100861508,1151534516,-1956684283,214064613,-1873273344,-326412987,-2082959842,-1957295892,145820742,37546195,246968181,-11526652,1996425334,-26106,-1073020928,915080821,904595278,61095555,-1962576896,65734726,-1962522997,506856432,-1205957884,209139973,2005599102,-1205957876,206015237,990529283,-1962508346,1996688503,242679562,1354771286,-2130697496,33688702,1996426101,1354771214,233311888,171346193,-310157819,535137026]},{"sector":8,"data":[181030237,-326413056,-1962611581,103482950,1183384842,1958743038,75400036,-16354048,1592264822,67549184,1048793118,1946157988,-339727612,-28931325,-1539407024,91488259,-335657333,1354771202,16777114,75399936,-13994752,719849590,142016256,-402229505,1183448350,61383164,1962690105,374800,-59310256,-1962702872,-1465648058,1575324419,1426065090,-326898549,74907394,16777114,-28931840,67549264,79187998,-6664192,-16776961,-6619530,-1962934017,46292453,-1873273344,-326412987,-2082959842,1448545004,-2096341365,1946160767,-1070902518,-6664112,-956301057,479238,-569981184,-939524347,-16392186,839305215,-1962934266,1084427334,108954373,-1961135104,508005336,-1962392023,1177100359,-1547465974,113705894,1620,1183516395,106210060,425603,1996426612,105286412,1342178861,-1090740760,-24443654,-2096969853,238654,-141884043,-2096959613,238654,1183516020,-1962677494,1183385670,64004600,-358546295,-1593472763,1149830678,104374532,-1593555575,1178141862,-955679240,403462,16443648,956703393,192739398,103286471,92864513,-1593775383,1178142132,-954434056,33957894,78029056,95952523,-1995421909,273124101,95684099,-1593785367,1178142020,-385647368,580976791,-1509545210,-1205957884,105331461,-1506433,671532800,-1593834490,547554212,68073478,-88584162,-1706025468,1210,503582392,571472,309328,86219344,-1264517120,-1593472763]},{"sector":9,"data":[1166607684,-569981180,-939524347,-16392186,95724031,-1559802205,512427274,126551480,-1560038237,1319175080,-129619193,-1207689565,1344144390,503642808,84777552,1996423168,-29366260,1342178744,62142207,-352210968,102932772,2113422905,671532828,-1593834746,512427332,1194001848,-1962571504,100864071,1166607906,675185412,729023494,-1560042335,246941216,-1202708988,1344144634,16777114,68073472,2124501022,1356396292,-150699871,-6663976,-16776961,62393462,79187968,922701824,922682848,28837342,-1070903294,175570768,-1710721281,65535,-310157474,535137026,147475805,-1873273344,-326412987,-2082959842,-1957296404,-6680970,-1996488449,1451883078,507808764,-1946532311,1177100356,-1070901508,1996443728,-92864516,1021841040,-2012821760,-2097139196,406078,-1202314380,-1202651138,-1202716622,1471809108,-1706012154,1628,-16297821,721823798,-1108848448,-310157824,535137026,181030237,-1873273344,-326412987,-2082959842,2122516204,242483212,-1324595573,1021891336,-385649662,246939781,-11526652,1996425334,35035654,1183383552,103981562,1962559033,242679558,-1962615576,4000838,1025733634,309592577,1963065917,242679628,-1873756117,223799310,113721323,1872,76023495,2122514632,762577146,956707489,628423238,-1207011585,-11468802,-1207662538,-4521985,-1706011905,65535,-16297821,721823798,300437696,-96040192,-2096745821,-443874579,-900899553,-1957363702]},{"sector":10,"data":[82609132,1049318999,915080100,922682920,-16055386,364381556,-1207702783,-11534060,1183516278,-1949160700,721835038,1389595593,-26032,914948096,1049167400,1599996836,-1034033781,1478361092,-1957345904,-661774612,-16091393,1877476982,175570937,-402098433,-310181877,535137026,113921373,-326413056,1461775491,104374614,99223083,1183447249,2143292406,41675011,-16353537,28836982,1843941376,-398030588,95952523,972441227,108857415,-1995946101,-88148410,-2080470268,1048773319,1962935204,-2080929019,-794754321,-1593538301,92866026,-1996089695,950076484,71665926,61095555,-952536064,70316102,921454279,83796228,83494443,-1578482039,1183384628,83534310,75367939,-1946925431,100922950,1183384828,-364475406,-1578875255,938148992,1123043015,-330905852,1151403068,-364476156,721748129,-1996162042,1183573574,-100269066,-196703996,50658465,-1996193786,2124542534,-465139452,-1981397365,922738758,1586168754,-1707606032,2023,-1161591,922682486,1855587272,-1996488696,1048837190,1946157988,74907428,83506943,83638015,-1411329,922744438,-1070922830,1586188368,41418736,-336169217,74907426,83506943,83638015,-624897,922740342,-1070922830,1996443728,-262239242,-1207666689,-860225504,-1706012160,2232,-16484609,1996485750,-461963278,-1193249025,-256245727,-1706012160,2356,62011135,-1286517,155228727,1048772608,1946157988,74907482,-1996238687]},{"sector":11,"data":[-1588534714,1177224760,-28931594,83796304,83494443,-159973552,62011135,-1957642197,1200352350,-163173628,41418576,-1191807233,-860225504,-1706012160,2322,-16484609,1183577206,-2147079170,1996443652,-2143879196,-10949884,950076534,-163173626,1357006473,-1996238687,-11469242,10614390,-66704635,922701828,1586168754,38243308,1358317099,-11485141,2013263478,2144260,1375784122,-26032,1996423168,-498693372,75367979,-227082416,75380479,-1193249025,-256245727,-1706012160,65535,62011135,-1695648001,2379,-16484609,-6620042,-16776961,921175158,74907392,503642808,1354771280,631450,108461824,-16484609,-1930893194,74907392,-16771864,1996424822,1354771204,1577189352,1575324511,1426064578,1048833163,1963197992,74907409,503580344,309328,177642064,-443875328,180829,-2081649835,-11139860,1996424822,-158537724,-1710852353,781,1996484747,28857862,-1310175232,-62486271,-4986794,1443264255,-386107649,-397017061,1996488613,-1070901754,26404944,52927062,-1956773888,79846885,-326413056,1459940483,104374614,99223097,-756481156,83541504,-947650933,-1539407102,91488259,-964428149,-1205957886,239569669,63964675,379651465,239545094,-1593555575,76088486,-1996086623,1996424260,83539974,1996443678,-401698812,512426228,1200293304,17115406,-1264516027,-1593538299,1149830468,102932740,77989419,2114340667,108461857,503642808]},{"sector":12,"data":[-969474224,-401698813,1996423360,83539974,-1070903266,52402768,1084293120,138819845,547438965,-1543096058,-1103596285,1048773646,1946157988,46564099,1023813793,125042690,1946157885,-1591940329,1149830580,108461828,503582392,-401698736,132841531,-1996143455,1592453892,1575324511,1426065090,-326898549,74907402,639130,-163149568,68073552,244338718,-16773400,-224725386,-1962934263,46292453,-1873273344,-326412987,-2082959842,1183648492,-11528458,1996425334,191076870,1996423168,-163148534,-6664170,-2097151745,-443874579,-900899553,1478361094,-1957345904,-661774612,-1928663933,1343682118,-16091393,1687816310,-16777212,1183648886,-11528458,-6683018,-2097151745,-443874579,-900899553,-1957363704,49054700,294531,1586186612,73370376,956703905,460588103,-1207404801,-11534311,1183516278,-2133710072,1347552714,16777114,-15734016,1996425334,374790,-26032,1183383552,108462078,199203408,1721958400,-15930621,922682998,-660995226,-1962934265,-443810234,442973,-1947432107,1178141766,-1962574586,65734214,-1962654069,79846885,-326413056,956581515,92145222,-351910261,71731971,-1034033781,1478361092,-1957345904,-661774612,1464003715,242649942,-1996249951,681704006,-1002010362,-1996249439,1419888198,-196703994,707806346,-62486044,-410912629,1183514632,16792844,1625883509,-385649150,20775778,1025733632,57999367,1023481321,57999368,1023500265,57999375]},{"sector":13,"data":[1023500009,57999495,-385762327,1589904234,1200301574,-330921712,205980454,653280905,-1995552885,52883014,1183386183,1979649010,126559779,39291686,-1983887735,1149878870,1078233410,1149878923,809798212,19260458,1178896640,117196534,-1897331851,1962871552,-62458320,-1961593852,103542854,1183384650,-230257684,72091179,-1947318647,100920390,1183384650,-297366544,72091139,-336443767,-62458307,-165776383,1946352710,-330921204,70387203,-336574839,-263812315,70387243,-336836983,-62458343,-1962314750,100920902,-924122042,737298059,-1996208634,-11080122,1996483702,-263812114,1357661739,737298059,726724166,-6664000,-1962934017,-1532757434,-1002009853,-1962530653,-1499216314,-196703485,721835171,12708288,112726,1182565200,-1962380288,1143677508,-1593578722,243990946,-506395522,-1054088751,1182565200,-1593478144,116064672,723797131,243998788,-506395520,-1054088751,-26032,-397017088,-397016503,-1705638554,65535,-6647317,-352321281,172395402,199902857,1443788224,382355085,-26032,1183383552,1979649002,384325133,1996445186,-119150358,1149904363,635710002,1183383556,843874494,1996445188,1354771434,16777114,-1099005184,-2147191552,-2080689564,1946159742,-13375229,-901345962,-6664170,-385875713,28901157,-372102400,1187447228,200290550,187790847,-165120513,1946235460,-6662650,1442840831,1016730,-1494723072,1996445185,108461832,-1873756117,-189667314]},{"sector":14,"data":[-939595543,-268372410,50873995,280045636,1317789907,642515718,1183432971,138856198,-1705639936,3841,18004048,-163148976,-11533300,1996425334,112368134,-1427570688,172395518,1023418669,58064903,67017961,-13724736,-955310425,395846,1187455467,-352319734,172410650,334168066,51005127,-955454720,2630,1187448299,1442840842,16777114,61252352,106182281,-1555676021,1996424100,1354771210,-369663000,249953869,249433836,250810071,251268851,988352250,1078234110,13822361,725898379,1111788480,-1962883095,1149831750,105286464,-351648119,138840844,-1958460279,1149830726,1081409346,-398166785,-11469690,-1729609100,1078233596,10741846,687747,-286719115,-1209510147,-6662653,1442840831,16777114,-364476160,28856406,-370651136,-129594885,-387287297,-11077143,1996483190,-95295240,-387287297,-11077159,-1070863754,-70850480,-361300138,16777114,-32839424,1963065661,-24647421,1963066173,-25761533,1963196477,-10229501,1963196733,-11933437,1963196989,-10360573,1963197245,-12523261,209125206,-16091393,1996425334,196188678,1599995904,-1962742397,1297948645,1426066122,-326898549,1988843016,1183667716,-1706027272,65535,245668438,-1499267072,-129594109,1962889238,1114963776,-12290817,-1326954892,-443851024,180829,1167087646,518818645,1448597646,1443395211,1097114,1958742784,108954419,1443984642,1342439864,1347469355,283023952,518717440]},{"sector":15,"data":[687235,2122520180,91488262,-352320581,-774165758,175934435,48955787,1600045099,-1962742397,1297948645,503317706,1430622296,-1910575989,1988843224,209125128,1119130,1975520000,-339727612,176063276,-15371006,12061814,-1957277692,1385760326,288266832,300613632,-15960321,-1070921098,-11119024,-337115530,-310157824,535137026,147475805,-1873273344,-326412987,-2082959842,-11138836,-1768288138,184549393,-2091813696,1963069054,276234023,1342440376,1347469355,297376336,1183383552,-94991880,638213828,1589905289,650283782,887818121,-1961861493,-167048585,2122521204,57933838,-1006188925,1149962846,126428674,-1962516796,-672463804,638213828,1991,637951684,1991,49120094,1562371467,838221,1167087646,518818645,1996478606,-26098,-1073020928,2122528628,460653068,-1207011585,-11533310,1451951734,-1950340344,1347553862,965274,-15275264,1996426870,112652,175570768,-16222465,199755382,49120000,1562371467,707149,-2081649835,1448547564,-955353461,61510,707937418,-330921500,818819,539297140,-1962480896,270920774,1958742784,112645,-1070923029,-2081012087,1962936958,1975520007,17623299,687747,1183519092,105265416,28837236,721939200,-1962677312,1183446598,209617902,-2146536448,199176804,-2146143040,-350211508,845447182,-293698577,-2147191808,-2096090548,1946218110,175934279,141950731,-26026,-125108224,818819,-947715212]},{"sector":16,"data":[-1996125434,2122575942,242483210,-1995946357,1183515205,71665926,1183516139,-16414456,41287477,1358520040,-402360833,92928318,294531,1156978292,192225331,271795446,28837236,721611520,71731648,871777931,695529030,707937418,-330921500,-1962930139,-511579058,-1056243680,1962871669,-26102,1149829120,-6662646,-352321281,-293698768,-2094369792,1946158206,776243748,1183441962,209617900,621114368,116064258,636241547,-1073020924,-11139212,2145913974,-263812106,-443850914,836189,-1578333355,1178140770,-1959168764,2139292766,91488326,-352071519,95723779,75370123,-1056710191,73304912,4620163,-1264515724,-1593578747,243991504,-506395520,-1705983741,65535,-1034033781,1478361090,-1957345904,-661774612,-1593250685,1178140778,-385649656,-559873831,-536474875,-385649403,113705165,1576,16777114,-532774656,1963233029,-566329044,1963231493,108954404,-15830016,922683510,28837710,-1326952448,142016494,-1192285976,-11534332,-352081866,-532774541,1963156229,-566328978,1963154693,1346274150,208928775,-1207404801,-1705967618,65535,355226,-96040704,-239991,1183647862,-1706027270,65535,503582392,-59310256,-1694861569,1530,200820361,-16354112,-1360525194,108954614,-15830016,922683510,28837710,887640064,571630,-126419120,-2081283096,414782,922683764,-728103340,721420301,98608064,-2096767325,-443874579,-900899553,3145732]},{"sector":17,"data":[260636675,939065345,237043715,1275133953,334561285,27984127,331153413,28180735,342294531,-2054815743,183828483,940179457,187564035,1686765569,3735555,1376452609,94896133,20316415,241369091,781254657,274792451,1620180993,239009795,445841409,8388611,1695875073,231079939,-2087387135,264306691,941228033,233963523,429522945,268828675,1738211329,55508995,1167851521,336134147,849149953,334036994,27984127,271056899,1629552641,330629122,28180735,188416003,1721958401,95420419,1428619265,95092738,20316415,197263363,464257025,335806467,1437990913,317587715,458759,326631427,-2068316159,309460995,163446785,276430851,624885761,88604675,675282945,74842115,1698693121,271450115,482672641,224854019,541720577,318177283,1288437761,241762307,-2058289151,337379331,1624440833,140509443,1900552,192086019,1717174273,138674435,2293768,338427907,1692270593,185270275,954269697,157351939,1172635649,198050051,2949128,232456195,-2072903679,6946819,1634926593,330104835,846397441,1167087646,518818645,-326903666,209617158,2138374658,16777114,637978368,-1962934266,1183385670,1812892668,-772157180,-1950274567,1195052638,-15303640,1996424822,-401698808,726664361,244338880,-352285464,-401698746,-1073020852,922682997,-404028124,86253195,-2020875311,1183384914,108462074,1342732031,16777114,6463744,1962559033,-92864746]}],[{"sector":1,"data":[1342179000,1342177720,-11485141,-979699082,-2097152000,-443874579,-900899553,1478361098,-1957345904,-661774612,1443163267,86253195,-1215568943,-167049902,-1202318988,726663187,1347440832,104602,721611520,-310157632,535137026,516640093,1430622296,-1910575989,142016472,-1207535873,-397410303,-310181877,535137026,80366941,-326413056,1460071555,89309014,425603,1988822388,-1591547130,-523172572,1183434499,-1948742662,509751,140413696,964944849,-1593412608,1183384868,140413704,831120337,29137494,-11141120,-18347914,1149982210,642001694,541363024,1344816171,16777114,642026752,1150111774,-1706025442,65535,112726,30513744,2122514432,611581958,374870,112720,608471888,723534891,735087570,575441856,-1960948693,-1706011967,65535,294531,727058804,244338880,1577446888,1575324511,1426065090,-1957237621,-1705638794,65535,-1993980789,1149971012,742689064,1354771286,16777114,-443851264,180829,1167087646,518818645,-326903666,-1957275844,1187450486,-1962934024,4000838,-385649406,58065030,1023544297,1483997199,1946162237,2047258,-11132044,1996426358,142016266,-1710852353,65535,-16642071,-1070921098,-6664112,-352321281,641631197,393478150,103167743,1342309048,-1705983957,65535,244338770,-1694650904,748,190362,30664960,-800682666,-6664170,-16776961,-2132225930,1183667717,-1706027312,65535,-956189463]},{"sector":2,"data":[129094,-1559607669,1996424494,108461832,1172835984,200837895,-385649153,1173750165,359925811,16285315,-2031549579,1095681,-26032,2062090240,205949697,1946288445,33766763,1793655668,28858113,848973824,184549379,-385649216,244318553,201179112,-385649216,1369047373,-1711276029,830,67782390,-1873341836,101181454,112727,-26032,116064256,-401698729,1043924595,57999458,1459690729,1342179000,1342177720,1464909867,36762,17295616,112727,-26032,-1073020928,-152501387,-26112,-396951552,-1202192787,-1873805311,71886862,5530,-26112,109969408,-1591344362,1183406757,403082950,103491075,1157847721,1779338022,66703620,-934901311,51775118,1520935206,-1899739511,637736966,1521157675,-1960295165,-788239346,-1983839239,-759628730,-1957683709,1177274438,1183535302,-1002034180,-26032,1996423168,-59310136,16777114,73239296,-1995028597,-1072956858,748750453,-96040698,-362753,-1711023562,65535,16777114,641632512,79189510,-1202696192,-4521985,-11513089,1996426358,-61437174,1183563819,-1706011960,65535,19736043,539906,-102169738,-1816132611,564657966,-2080211196,2130870018,2130842114,302153474,721583874,1600035264,-1962742397,1297948645,1426066122,-326898549,-1957275896,2123040374,-129594108,-396931050,1755381824,1812343556,-1037330172,1174665425,541362682,721708705,-1727763962,-120470997,-1980217853,1149967940]},{"sector":3,"data":[1812333344,608471300,52315275,-1996199418,1600004676,-1034033781,-1957363708,1988843244,-1715041532,86642315,788003319,243991656,-936704692,637951684,-1962520695,244029894,-101251798,787989131,-1993997210,1200301575,1745234694,1200170500,126559746,73795075,71797030,1575324510,503318210,1430622296,-1910575989,82609112,1988843095,108956424,-244025,874417151,545208582,-947181441,-1725937877,73928331,-930350601,721758369,787957953,-930413270,-1952856437,-150706658,-1983380485,1183579214,-2090901764,-443874579,-900899553,1478361092,-1957345904,-661774612,85985023,956640417,2114265094,671547154,86679813,86771201,73938687,-2097149464,-443874579,-884122337,1458342741,-1962641781,688272414,1999186039,-137983200,-6663976,-956301057,17114630,-26112,-1956773888,46292453,-1873273344,-326412987,-2082959842,1448545004,86783627,721758881,537853936,86024453,1417015355,-1996149599,915012678,-13957844,-544525333,-1081875503,1962935634,956754727,208993398,-773944506,1388282851,-277610491,1962702393,1187416854,1459954851,-1873756117,-87037938,742275399,-3703035,-1593497586,-654900120,-10688432,-310157474,535137026,516640093,1430622296,-1910575989,216826840,876019542,129997318,-259325952,104085247,385107597,-26032,1183514624,1745224694,-96040700,-196702890,922701846,161088446,1442840583,512922,-310157824,535137026,516640093,1430622296,-1910575989]},{"sector":4,"data":[82609112,641108822,637978373,-1962934267,-310157626,535137026,516640093,1430622296,-1910575989,86548952,73936631,-1962742397,1297948645,-326412853,1460333699,175541078,-1928823157,1343682118,-402229505,512490956,1200293428,-129619680,1476150825,385238669,-26032,-1073020928,-1545010315,1183667968,-162523402,1950363204,75399947,-1593477888,65734198,1342422689,16777114,75399936,1467839744,16777114,1962891008,678756134,493210,1962891008,544538398,-14519041,-6675340,-1962934017,1200292956,-28931818,259309579,1354771287,-25755824,16777114,1444276992,-26025,727056384,-1202696000,-1706033151,65535,-2144451338,1686113396,512458542,1333790260,-1957199826,-16370658,2013208183,-26080,-1705574400,65535,-443850914,574045,1167087646,518818645,-326903666,-1957275896,-13957002,1392002759,-1960056059,926546014,922689397,-6683084,-1996488449,1347877958,108461911,-71960,-6620042,-352321281,1183008523,1043923704,-813759188,-310157474,535137026,80366941,-326413056,1459940483,-1074386090,367723858,1946172803,-13238516,727057526,-1528278848,-947697922,741751042,1592098565,1575324511,503317186,1430622296,-1910575989,149717976,1988843095,243041032,-15895039,-6680972,-956301057,3652,-768147626,1354771205,16777114,944015872,-956807544,-2130757564,-2145373364,-1971376540,-466994876,-1577433463,1178141996,-1961329158,-472778146,89309059]},{"sector":5,"data":[-15960832,-11077002,1827145334,-1337725960,-126945778,503568523,126551260,73795075,244029768,-101251994,737822345,742275583,-1591771643,1178141996,-955943430,64070,-772120949,1388282851,-1217134587,1207584511,1600052203,-1962742397,1297948645,503317706,1430622296,-1910575989,1988843224,28857862,244338688,1593781480,-1962742397,1297948645,503317194,1430622296,-1910575989,82609112,1988843095,-1305069306,-1710918395,596,-768147626,-26107,1686110208,-1202266317,-1873805311,-27203570,-14781185,244326516,-1946441496,960792824,-472785013,89294791,1599995904,-1962742397,1297948645,503317194,1430622296,-1910575989,1988843224,-773944570,1384614883,-310157819,535137026,46812509,-1873273344,-326412987,-2082959842,1448543980,1443264139,1459100904,1726484112,81568255,737953417,-1961890817,1183054942,1149964028,71776550,-947189377,470170439,1458076677,1358906765,1342177720,16777114,-2090902016,-443874579,-900899553,1478361090,-1957345904,-661774612,1460202627,-1946211498,-1472841225,-9014012,512427638,1200293428,138806056,-401698736,1183447781,-49672,-661973644,86253193,-1215568943,1048577362,2097152146,972983042,1946530366,1480491840,175374342,597146,39426560,-16056320,-1873400972,3467278,106444543,1342178488,16777114,1479999232,-26106,882966528,1778792710,1342600192,16777114,1590070016,49120095,1562371467,313933,1167087646,518818645]},{"sector":6,"data":[-326903666,1988843088,1183667718,-397404482,1183383877,876019638,-26106,1183383552,1183666354,-11528514,-6637962,-1996488449,1451866694,-1300824132,420250,-1169782016,-1996486651,1183561798,-1270445636,-1715976565,-120470997,723405963,73834952,-775804007,-1983380488,512471118,-1047853516,2115913529,508005126,-1951381879,1174646854,874417080,575093510,1200294270,-1203360990,-1196407159,-768901116,-1070903214,-2001055664,-11513208,1150005366,-1270469856,1342178349,-1950845185,50705478,-1070903296,922701904,1347421088,16777114,106472192,74760203,95565449,49120094,1562371467,182861,1167087646,518818645,-326903666,205949798,1962938173,242679623,379209357,40344144,922681344,1183647154,-397404484,1183383629,-1703477318,1342178232,1342177720,381437581,-1166606512,16777114,242679552,379209357,41458256,28835840,350984448,-15829249,1996426358,142016266,-1710852353,544,-1962742397,1297948645,1426066122,-326898549,142016258,-16353537,1069024374,-6664192,-1996488449,-1072955834,1996433525,74907398,705039008,-1442446364,-1407808764,-1706012156,65535,-16353537,-6683530,-1996488449,1183579718,1575324670,872416962,-822082816,2030043394,-1711275217,-117440246,1057030967,1157629960,-1308622080,2130706690,1895826275,-1862205696,1442841345,-2130706173,-1895824585,-1811874043,201392897,1476396812,-1711275264,-1996488443,1677722424,-1979711231,-218103196,-1778319613]},{"sector":7,"data":[973079297,167772422,385942328,1509951244,1426064128,-1946156799,-1375730915,-1828716277,-1308622054,352321795,2046821221,-1711275765,855704345,1644169223,-939523328,-1694498549,1207960423,-1660944126,-503250126,1744832518,1241514752,553648390,637535073,-1392508663,553714449,1962936327,1090519808,838861067,-922746110,838861065,-603978995,922747139,1677722423,-1207959289,352387860,-2130704377,-1946090752,-2113927161,-1426062592,-1107295990,620757842,1056964867,1442841381,-1090518774,134218548,1073742084,33555240,1392574211,1291846401,1124073738,1291846414,-922746617,788595509,-1811937278,1660945152,1509949702,1694499686,1509949706,973079346,1526726913,-352320712,-603979509,-1191181471,-520093430,1358955320,1677721864,-1593834735,-452984565,1845494610,1761607937,-520092869,1778385155,822084407,-335544054,1442841443,1828716807,-268434149,-1778319613,-1124072703,1879048451,905970484,1929380106,50,0,1167087646,518818645,-326903666,503760648,-1207959296,-397410302,-1073020830,28837236,721611520,-96040512,5302352,16416387,113709173,30,5899975,-1070923776,-6672405,-402652929,512426257,2013202000,-26108,2122514432,141885448,-1996077429,99350598,33048263,-126419200,16777114,49120000,1562371467,313933,-1192457387,-4521985,-1957670145,1385759814,-26032,-443875328,180829,1167087646,518818645,-326903666,1988843014,173968134,956322977]},{"sector":8,"data":[91556935,-352321096,175570723,1963130499,1161221,381158379,727076864,-1706012480,65535,-2080618871,-663420162,49120094,1562371467,445005,1167087646,518818645,-326903666,-6662652,-1107296001,132841858,-956109181,-2130706428,1962967806,-18189,1392508858,8566864,-6664162,-1912602369,-1610412026,-2145124204,-1574535116,109991891,-1818229998,880813056,-727570816,2084471639,225705988,-1157627976,1347616767,16777114,-310157824,535137026,1439386973,-326898549,2084471570,91488260,16777114,-26112,-6684672,-1912602369,637735942,1473591039,384714381,1354771280,-18352,112720,-26032,-1073020928,-443818635,1478411101,-1957345904,-661774612,17306,-5511168,105913995,-1710983169,82,-1962742397,1297948645,-1873273141,-326412987,-2082959842,512427244,2013202000,1354771204,1347440720,-26032,244318208,738131432,1347440832,-26032,-6684672,-2097151745,-443874579,-884122337,196629,65961,16988033,65783,16973828,65907,16973829,131355,16973826,131438,196611,65678,17007116,196941,16973826,196969,327683,16711808,16974164,524728,16973945,458861,16973826,524770,131194,65864,220098,65744,206143,66034,153411,16711811,131412,65809,350170,65861,220098,66039,210794,65938,351982,65806,22490]},{"sector":9,"data":[0,5,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1867513856,544241008,1970169165,65535,0,0,0,0,0,0,0,65536,0,2361869,0,-65536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,454164480,454761234,531227,0,0,0,0,0,0,0,0,0,0,0,0,0,2162688,4784368,589914,33620053,33619972,100992003,33817095,84017152,33622021,33686275,50004475,507,84148994,50857734,773,327680]},{"sector":10,"data":[5,33686018,770,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1329790976,960115021,741355574,741813317,1347158065,960115028,741355574,741878862,1430323249,12632,827216464,-134217728,134217976,8,0,0,-1,-1,51970047,-64748,52036374,-64736,-1,-1,-1,-1,-1,54198271,1376255,52822018,1400635393,4980739,202571777,53346306,1519845377,52297730,647626753,52953090,1520107521,53084162,1520238593,53215234,1419771905,54394882,1520631809,52690946,1520762881,52559874,1521025025,53739522,1521811457,53870594,1521942529,53477378,1522073601,53608450,1522204673,54001666,206503937,51380226,1473445889,51511298,1473511425,52166658,1473576961,54525954,199163905,54263810,199491585,0,0,0,8336,1767108608,25978,1867378704]},{"sector":11,"data":[25974,1665789984,28271,1868230704,-2147455633,1816391776,6648687,2004055149,552624256,1937009920,1852601207,1784900971,1953387784,1701606505,1917126244,561147762,107695874,1668178243,1090874469,1953656674,1952797189,1225161074,1919905383,1700332389,1867383411,0,1828716544,1937208180,279886,1048676,9903,163845,0,0,0,65538,4194354,5242960,6029402,10780,262146,0,0,0,297151008,297201968,10365758,14680081,1146309894,4477775,65536,1162544640,1279610450,-855376126,319,20958467,1076,0,0,0,279886,17564101,11393,327686,8389608,131072,327680,393221,4194485,25690216,27066769,11080,262186,0,0,0,34023133,34079040,196355848,726987120,956311521,741208432,969224171,969339184,86256543,867627089,-2147287036,1,737280000,-261095359,873037825,-2147221504,1,741539840,-261095403,877297665,-2147155968,16,878641152,-265289720,32819,879165440,-265289721,32834,879624192,-265289721,32820,880082944,-265289720,32825,880607232,-265289721,32823,881065984,-265289720,32826,881590272,-265289722,32822,881983488,-265289721,32842,882442240,-265289718,32818,883097600,-265289718,32821]},{"sector":12,"data":[883752960,-265289720,32848,884277248,-265289719,32849,884867072,-265289719,32850,885456896,-265289718,32851,886112256,-265289708,34768,887422976,-265289719,32868,-2147090432,3,742916096,-261095405,888045569,744161280,-261095401,889290754,745668608,-261095409,890798083,0,1146309893,21327,134217984,369102592,520100352,1392902144,1163154265,1397556813,1146310468,1380272902,55330126,71910471,1380275029,1497713416,1380011842,16843076,-16252889,54512897,-855564297,439485247,54512897,-855562674,764019775,71290113,-855570732,961152063,54512897,-855572369,953615423,257,16720384,1107574733,1070399521,2401284,-1861992499,1070399534,702212,1594048461,1070399496,165636,1661157325,1070399535,3266819,-150782003,1070399488,511491,1879261133,1070399495,2051843,134496205,1070399528,1868035,-1476182067,1070399499,1238531,855850957,1070399503,2595075,2130919373,1070399492,3618307,-1308475443,1070399498,467715,-1677508659,1070399490,520707,-402440243,1070399528,2884611,212941,1070399488,403970,805519309,1070399544,3728643,-1140637747,1070399544,158467,-1174192179,1070399508,1404419,0,0,0,0,855834814,1347821248,-6664112,184549631,504394944,-26026,1444806656,16777114,-1260328192,505531724,1430622296,-1910575989]},{"sector":13,"data":[82609112,23871107,-14584832,1996426358,142016266,-1710852353,65535,16777114,1975520000,734014215,27388370,1024214667,57999386,1979763433,20506883,1023410477,58064918,50418153,-13724736,-16681305,1996425846,108461832,16777114,112640,1996473835,-26098,-1175781376,12861059,-5082112,-1711225802,65535,1996466155,-26098,-1645543424,-1710590209,65535,1996461035,175570700,16777114,-7935232,1996426870,9890058,-16091393,1996425334,-26106,1827209216,242679807,-1710590209,65535,-41239,-6681482,-385875713,1996488531,11974666,1335513118,-385875967,113770307,65742,-2080425239,1963396222,112645,-1070923029,-26032,619249664,-25857,485031936,-834763777,427032576,12977863,1996423169,12040202,-6664162,-956301057,50694,13541632,10348953,-804618623,-10390265,-793244042,-6664185,-385875713,9633503,29884572,14156232,18547144,29884699,29884872,29884872,29884872,29884590,29884872,29884649,20513224,1946227261,1026783159,410124544,1996554557,-16062205,1963000381,-17241853,1963004221,-16258813,-15829249,1996426358,142016266,-1710852353,65535,-13819925,343299,-1073487241,-1476448621,8323566,16187639,16908744,1491665170,49120254,1562371467,319474253,-268434688,419495680,-671022336,1795163393,184615680,1811940608,1862271744,486604545,184550144,503381761]},{"sector":14,"data":[838861568,520158977,704643840,536936193,369165056,1895826688,-83885312,553713408,486605568,1912603904,-503315712,570490624,-922746112,587267840,-1140849920,604045056,-1308622080,620822272,-1778384128,637599488,-1996487936,654376704,1291846400,671153920,1207960320,687931136,-1476328704,285213440,0,0,0,0,-1020541813,-1996153181,-1996485594,-1560277466,-1598554102,856051983,1347572434,16777114,190383872,-352094784,-1598320557,-795936241,1409016715,-6683055,-1912602369,378283712,-1993998332,117441062,-6661287,184549631,-1993771840,1459621902,1381172822,-1705983949,65535,-26025,-1073020928,244321908,185125352,-368741184,65535,-850591816,-1873273311,-326412987,-2082959842,401081580,-838416638,-956301056,64582,184960651,712247366,637951684,1946173312,4241441,8435792,-26032,1183383552,1958743036,-11526643,1996425334,-26106,1183514624,49120252,1562371467,313933,-2115204267,-956264212,65094,503369912,18528336,431509534,-1924129279,385840774,8435792,33790544,-1073020928,-588709003,-129579264,-2037579775,-2037776522,-1769144462,-1142292620,1923007488,126494463,-9402744,74719292,108342332,-9271553,-1631262741,-2144927886,57999423,-1962895895,-1983738685,1451883078,-2146767876,754938046,1191121780,-94452486,-2012771802,-1728089978,1996496957,-94452506,-2012771802,-1073023418,1191118708,130426618]},{"sector":15,"data":[1958149888,1924595711,-125926401,-1207602176,65797950,1358905272,164506,1958742784,-129579249,1187446784,-352321026,-96010493,653942468,1948270464,1065363188,-972786388,-2144537018,1965880958,-129579259,1183514625,-61436934,-9271671,-9136503,-9265468,4161574,954794868,13678847,532172830,-1202708991,1344143646,-9009523,-2135404522,-6664192,184549631,-385649216,-2037579629,-2037776522,-1769144462,2028732276,-9265468,-2012771802,1023373446,1006924832,-16354004,-335580538,1923007719,1065363199,-1957334016,-1983738685,1451883078,-2146767876,754938046,1191121780,-94452486,-2012771802,-1728089978,1996496957,-94452506,4161574,1191118708,130426618,1958149888,1924595711,178431,-26032,1183514624,-61436934,-9271671,-9136503,-9265468,4161574,2078868340,-28931073,-1017256565,-2081649835,1448553708,-1705983957,704,-1207837021,-1706033148,65535,721735331,-6664000,-1996488449,-1705978810,65535,735463049,1996443840,-25900,1996423168,571606,50174544,-459079680,-696844542,1342180024,199834,48931584,-1193904385,-1706033138,794,-1177127169,-1957625844,-25872,-972881920,2097152829,-905525498,-16777216,1183700598,-1706027304,65535,-1546107253,1183515422,13149152,52299265,-1545451893,513869090,263427,-16556381,62445174,573503232,-1037330171,-930350895,-150991432,-1727716818,-120470997,1346421035,1073946273,-6664128]},{"sector":16,"data":[-1560280833,1996423878,-6663978,-1929379585,1343682630,1347469355,-150993992,-1727716818,-120470997,230213771,573503232,-1037330171,-1054082863,52339024,-56995776,-16777213,1183700598,-11528456,-1711153610,65535,385369741,1354771280,243792,86126327,-775804007,-1194816520,787939341,731448610,737726914,513888449,-1706016765,1104,-1915324673,1343682630,80623359,16777114,52338944,-775804007,-1578071048,731448610,-1946627646,-129593864,1448562710,-150993992,-1727716818,-120470997,230213771,573503232,-1037330171,-1054082863,-1924085973,-1706032828,65535,-1915324673,1343682630,80623359,308378,52338944,-775804007,-1947169800,-788192706,-129593881,-1923657706,-1202651324,787939331,731448610,-1946627646,899272,86126327,-775804007,734079992,1150111943,-1147514878,-16777213,1183700598,-11528456,-1710961098,972,-1697220865,65535,1342182328,410266,1975520000,112645,-1070923029,184554147,-955747136,189958,722594560,12079296,1347590527,327322,48669440,-1202667477,1385791234,-26032,-1834811392,1173507,74825739,65781803,1577058744,1575324511,-326412861,1443163267,16664263,4241408,1751120,129407568,-259325952,-1996298591,1153896004,-1593835504,1149829594,16300042,-1944697719,1153898588,-939524350,-64444,1344194187,361626,1975520000,11856131,-1996431176,1552684612,184862488,38061824,1153957887,-1946157308]},{"sector":17,"data":[-1706025274,1451,58048523,-1207923223,1149829354,408718358,132295,-16628537,71616511,-963903489,-811970530,184549381,-1201048384,1149829348,408718358,-16628537,71616511,80216063,-963969013,261771294,184549382,-1203407680,1149829336,408718358,31078143,-1728052808,-6664110,-1996488449,80153668,1153892355,-939524350,-64444,17974471,340051712,-963969024,-6664162,184549631,-955943744,130630,-26026,1183514624,-443851010,1478411101,-1957345904,-661774612,-951915389,16829446,440320,105814608,1319305216,374786,-26032,614662144,-633929982,1226753,-1102672560,515395606,-694530048,184549382,-385649216,1996423654,1354771206,16777114,-599357184,1354771280,-4698032,12079359,-1365618679,184549382,-385649216,1996423614,1354771420,381568653,131119184,16824400,-26032,-1073020928,-1612119179,105286401,-1878859101,65988622,31078143,1342183608,503490232,2013264,116628048,-1073020928,2011759477,-633929983,1882113,32946256,683167774,278548480,184549383,-385649216,922681690,498598362,649613312,-1202708989,-1706033102,1837,58048523,-16695831,-1207838154,-1202716649,1344144224,1342190264,477850,1975520000,18934019,31078143,1342182584,503498936,3323984,124230224,-1073020928,65602421,-633929983,1161217,78952528,347623454,-2070261760,184549383,-385649216,922681574,616038874,-1866969088,-1202708991]}],[{"sector":1,"data":[-1706033087,65535,58048523,-1711224343,65535,77596358,-704198912,-956301311,16969734,-2113485056,-1207959551,-1588592576,-523173698,11967056,-1633484800,1975520004,9758979,503376568,19183696,-1070903266,1380974778,1347440720,108461904,-633929904,-1706012671,2063,184882851,-1201048384,1344143588,503391672,-1161811120,1347571712,1347440720,1342600959,31078143,983191632,-1560281080,-1073019702,-524796300,-1202708992,1344143654,817545259,1347441232,-11513776,-11532682,1342298678,-26032,-995950592,1958742786,-26093,-6684672,-956301057,52230,112640,-1962742397,1297948645,1426064074,1996483723,31373316,178256,142776912,1996423168,80656388,178256,143825488,1996423168,48674820,178256,144874064,1996423168,59947012,178256,145922640,1996423168,52344836,178256,146971216,1996423168,86161412,178256,148019792,1996423168,13154308,178256,149068368,1996423168,48543748,178256,150116944,1996423168,48936964,178256,151165520,1996423168,46577668,178256,152214096,1996423168,56539140,178256,153262672,1996423168,1226756,178256,154311248,1996423168,13285380,178256,-26032,-443875328,180829,1167087646,518818645,-326903666,-62470364,1183514624,31105806,16402119,209617664,-954895104,67142,-16091393,244320374,-1980296472,116128326,-401836289,-4653335,-17665]},{"sector":2,"data":[1996443730,161323534,245563392,269912325,-18427,1392508858,242679632,636058,38839040,38934153,-1157627976,1347616767,-1710328065,65535,-1996154205,-1593500650,101385486,58000656,-1593784087,101384784,57999954,-16728855,-1207838154,-1924136938,1343675462,1342185144,419738,1975520000,10479875,503371960,-599356080,-1070903274,1375784122,1347440720,1342203064,1347469355,1343125247,132422224,1183383552,1958743036,-868318389,1148518400,818819,-1410846347,1958743030,105301765,2122514434,527696122,519718539,112720,26843728,-1073020928,1187448180,-16776698,513473142,-16777210,1996487798,-26106,669712384,-1202667477,726663192,1347440832,-26032,1048772608,1946157260,-58817778,-16223232,-6620042,-2097151745,1946221694,-868318452,91553792,-352321096,-2084558078,-443874579,-900899553,1478361098,-1957345904,-661774612,-16061309,-1711087050,65535,-1191557495,1344143568,503378104,19380304,1183666206,-1202710794,-1706033150,2887,209043467,-1191545089,-1202716620,166395905,-1191545089,726663220,-6664000,-1207959297,1344143626,503392440,1354771280,731802,78553856,503384760,19839056,-1070903266,-26032,-291307520,17479682,884494366,-1202708991,1344143632,62410782,1637502976,-1207959541,1344143626,503397048,18135120,1344163870,1342178232,753306,17479680,1119375390,-1202708991,1344143680,385631885,178256,195140176]},{"sector":3,"data":[1183449088,18326268,503384760,21674064,1220038686,-1924129279,1343683654,1342177976,66202,-62486016,-2097080158,-443874579,-884122337,131130,16713085,131076,16713046,131077,16714110,131078,16714133,131079,16714156,196617,65656,196608,16714314,196626,16714362,16973843,197934,16973829,199259,196615,16713616,196650,16713803,196651,16713798,16973868,196637,131087,67070,16973863,327782,16973829,196704,16973854,196663,16973860,329359,16973977,330499,16973979,329337,16973980,330436,327837,67065,16973863,199046,16973875,263051,16973869,198770,16973878,330262,16973865,199445,16973881,199396,16973882,330342,16973866,263039,16973875,262868,16973876,328941,16973997,329195,16973998,330217,16974000,328901,16974003,330383,16973877,329053,327737,16713119,327682,16713151,327683,16713080,16973828,263356,327748,16713041,327685,16714107,327686,16714130,327687,16714153,16973833,328395,16973890,328418,16973892,328867,16973896,262894,16973904,196810,16973912,196683,16973915,262836,16973911,328801,16973905,328717,16973907,262964,131165,16713124,131074]},{"sector":4,"data":[16713156,3,0,0,1167087646,518818645,-326903666,-633929978,-26111,20774912,-2092532224,52798,-4706956,-17665,922701906,-6684198,-1996488449,1451883078,726684412,-1706012480,65535,-231681,-6620554,-16776961,-6683018,721420543,-6664000,-352321281,6809603,-1962742397,1297948645,503317194,1430622296,-1910575989,384599000,-1928694017,1343679046,1342182584,16777114,48406784,1946830393,-364475096,-659009514,-1706025472,791,360038411,-1207273729,726664196,1347440832,16777114,-339727616,112643,-1962742397,1297948645,1426065098,922741899,1622672098,-1202708989,1344144072,1343238584,151706,81152,-1070921355,-6664112,-1962934017,516120037,1430622296,-1910575989,1894548440,-1987033459,1452078662,172395512,1946961419,-1960842437,-986974650,1023438853,461176931,-16097596,-1977218490,-161561593,653674239,1589905288,1065362954,-992447232,-970525090,1183645703,-1706027376,544,284444359,239504128,1946163261,1850680,490563700,-950111232,3208262,31078143,-126419120,-1946781953,-986974650,-134220755,-6663976,-1962934017,1452013126,-96040456,-335784311,44480521,-1929754999,1589967966,1065363194,-1960283136,-986974650,1023438853,461176931,653936383,1589905290,-163119114,-351827930,52869337,-155660565,-993400063,-970525090,1183514631,138808070,-1014282636,1183433356,-61437446,1183522795,96807926]},{"sector":5,"data":[1664942192,-1004831488,1191118430,126494214,-631100,-2010712506,106873863,4161574,1589958773,130426614,-59310336,-1694861569,65535,12992131,721712128,-2096174144,1946161278,273058565,-492764181,1183666178,-1202710896,1344144564,-2131474805,-1706028852,65535,1962934589,112645,-1070923029,-1962742397,1297948645,503319754,1430622296,-1910575989,621078744,1342479523,-1559855896,-1511521076,77374244,-472786805,36091903,-2096731928,-443874579,-884122337,1167087646,518818645,-326903666,1187468900,-1879047940,79489038,-397361109,-6678390,989855999,1963123206,-401698811,2122394437,1963196678,18934019,-1996174175,244379718,-1577087768,1178141900,-15633168,721753654,-1202696000,-1706033151,65535,379602573,85893456,798642206,-1879048189,308471822,379602573,85893456,1134186526,184549379,-955943744,130118,379602573,31504464,-6664162,-1879047937,293791758,379602573,31504464,-6664162,184549631,-955943744,130118,-1985984883,1452055622,-1671510882,-1952692481,-788227018,646220518,641795074,1586169736,-1673068644,973588006,-1996153183,300675654,-6529340,1988860998,-230227982,-2010774390,-228685049,1962950528,-1605988889,1996443670,-1669922914,16777114,-1898411264,1065363138,-1005947812,1191156830,130426524,-1671510948,647775999,-1960179770,1191156830,130426524,-1671525586,647775999,-1960179770,-970548130,1183645703,-1873799520,598599694,-1878173720]},{"sector":6,"data":[188737550,132648592,-1375287538,-16777216,-1929190858,1343681606,16777114,-126419200,-1862633729,136636430,46413567,1347469355,1342177720,279450,-58817792,-2130217728,67176062,922685813,-1070922550,28856400,-191213568,-2130706430,67110526,113706613,188,1312455,-1147535360,989855746,1963123206,112649,-401698736,244328753,1577278440,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,108432214,993904267,-385649408,58589321,755114985,138215474,-385649152,-1073544595,-1476448621,384304816,39840252,503469240,85893456,60444702,1442840579,323226,38267136,6831747,737181185,280514752,-1070903296,1347440720,250089104,36432380,-26026,1183383552,1975520250,35383555,-26032,-1073020928,922686068,12059362,-1070903292,-1706012592,1364,-1694861569,65535,-2097023767,31806,-353827980,-26111,-488046592,1488897,1354771280,16777114,-603535616,-16777215,28838006,-1070903292,-1706012592,65535,-956187415,16899078,142016256,370586,-62486272,4372560,1354771280,361626,-59310336,1342194104,-1705983957,1428,-1191414017,-1202716611,-1706033144,1463,909749739,57999390,-16681751,765069430,-1996488698,-11469754,721428022,-929410880,-1996488699,-16769482,-1202258826,-1706033144,1597,-397361109,244323698,724056296,12624832,-16463709,-1207778250,-397410303,922688444,-1070923068]},{"sector":7,"data":[28856400,-2003152896,-1207959546,-1873805311,664528910,25312899,-385649408,922681609,-1070922552,346482768,956366057,1962983990,15984899,1206390416,142016257,16777114,-62486272,-1036583088,1354771200,413338,-1036613376,-59310336,571478,-26032,244318208,-1878467352,195356686,-397361109,922686690,922682052,-1070923656,112720,-26032,244318208,-14183192,721601590,-1202696000,-1706033151,1061,1342177720,182980240,-939079897,-2097151996,98878,-1070921868,367546448,-401698796,1743454496,80151751,80151788,79168720,80151730,1111295175,-385649408,528481789,1962949949,-24647421,2080390717,4144446,-1175911553,4275710,1290339189,1026354174,394199113,2080393277,-36706045,2080392253,4668698,384369535,1024519167,57999434,1040040425,58001360,1593684201,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,425603,244319605,-14232344,-1711094730,65535,1358710409,-14868760,-16595914,-6620042,-2097151745,1946158718,1354771208,988286608,49120038,1562371467,182861,1167087646,518818645,-326903666,306086662,796131328,-1727953759,-120470997,-1577433463,731448096,-1980182078,922745926,1183646434,-1706027270,65535,-362753,-6620042,-16776961,-1711041994,2021,1342177720,515226,49120000,1562371467,1478413133,-1957345904,-661774612,-1705983957,65535,48641791,16777114,49120000,1562371467]},{"sector":8,"data":[1478413133,-1957345904,-661774612,17464963,1048785012,1946157240,-1140406510,-956301056,47110,335988480,-1962934016,-2069690810,138840833,-16572253,-1873803658,67954702,113713899,65720,12861059,-16157696,-1711225802,65535,-397361109,113709814,196,-1962742397,1297948645,-1946155318,1430622424,-1910575989,49054680,-1957341354,1988824190,-1950338294,-1175942184,-422510560,-392833071,-1818951574,-1828690456,-287178732,1432210827,-1962508604,403749353,3664018,1960083,1697941,-1070350285,2116771242,-947171578,-310157729,535137026,147475805,-729133056,1509949928,-355405174,-355407152,48818896,-2133423616,41160674,-838991695,-897528542,-2133775824,57942266,-1012219254,-2044215278,666899140,1438893190,1452010635,-854674428,-1947981279,46292453,-1864856576,-326412987,-2585058,1996426870,242679564,-1710459137,65535,106349854,567089844,-989180277,1320422486,41034189,1344258099,-15829249,1996426358,209125134,16777114,-310159360,535137026,181030237,-1864856576,-326412987,517508638,-1274652987,-1272853222,1914817871,532689666,-1962742397,1297948645,1426064586,1465314443,72795422,567089844,-1274521915,-1742615279,-1956749537,146955749,-1864856576,-326412987,1457032734,2126782039,1183579144,1975519750,-853953530,-1967063519,-1436766000,-141877498,567101364,1996428146,142016266,-16091393,1301940342,855638025,1583292352,-1962742397,1297948645,1426065098]},{"sector":9,"data":[-987829109,1589905494,1258338308,-1960894003,146955749,-326413056,1443949699,1183516247,-1073337590,922196224,1183384314,-1983892496,-1897267642,505318144,-1947994365,1124124702,-1023153199,-1946532215,512487494,-470351120,-1996486651,1183579206,-98661392,65271554,100924998,-523173696,77465091,76279947,-150989125,-1898411037,28837446,662709760,1073837072,-2081143159,1586039235,-129594122,1460075403,16777114,-230258432,-15960321,1996487798,-126418950,-624897,-6622602,-16776961,1325399110,-2001420,1325399622,-1961724920,104595014,57869050,-39191,1491726406,1583286271,-1034033781,-1957363702,183272428,2007302,1962950205,73319446,-1727558874,49290891,512488439,-470351110,-997191189,-1960442786,-397409721,-1073013627,55050612,-1996439546,513932870,4078848,1589911157,1200301572,120268292,49290891,-1723284733,-1958677513,-150799842,-1877873693,637820612,637945739,1342326571,1075594472,25304715,1929272875,2126723928,-1983673598,-1072956346,-996062348,1958742784,-129595068,1183432755,112886,1342994175,16777114,507413248,360005120,-15960321,1996488310,-126418948,-386500865,367787643,209125264,-100609,1996487798,-159973384,16777114,-443873536,705117,1167087646,518818645,-326903666,142016274,385238669,67738192,95944704,-6664192,1375731967,-26032,1183383552,-6663952,-956301057,62022,16008903,142016256,384976525,128227920]},{"sector":10,"data":[1996423168,-227082490,-1695254785,65535,-16353537,630911094,-1996488692,1996484166,-163148538,1996443670,-25872,1996423168,-294191354,16777114,-260636928,16777114,49120000,1562371467,313933,1167087646,518818645,-327034738,1448542336,-150680415,-1325063634,98620163,1183383560,52339074,734147481,178626,-1036781357,1183433259,138841084,2105689657,80519441,-1962601821,1183416902,56533498,1183532011,535816,572427161,-754732795,-1946421277,33457136,28837245,-1962743040,85107654,86126327,-523041871,-1996486651,-861799866,302383876,-1952888827,-150662642,1580136441,-62521085,503439544,221813328,1183383552,787955960,514000162,-128021758,31492038,-1807315712,513888278,-1706025467,1219,77610624,-2094042112,121918,512436341,2139096350,259260417,378816141,2144336,781864990,-1929379827,1343657030,503619768,-26032,1183645696,-1706027372,2693,86126327,35522051,-1551874423,1183515168,-2142895230,989857797,746391622,-1727848799,-1037319629,-754974023,734147576,-1580692542,103482206,731448094,66638274,-2042197567,-1980086645,233538630,1090274955,-2042197696,142886599,-2008627456,1183514632,-2008643320,59131531,-1996284410,-157185466,-96061182,-123664267,-62506750,922702708,-222821662,-1202708990,-1706033151,3670,-1727848799,-1037319629,-754974023,734147576,-190625598,-234436862,-1962932222,-157025722,-62485758,-16582493]},{"sector":11,"data":[-1207626186,-11534328,-16583626,1996487286,1354771452,952986,-1975088384,-1996487675,1183551046,-1840871162,-150854495,-1941534248,50873995,-1996348410,1319211078,-1840905982,956503713,276137030,956504737,141920326,956504225,1182041670,48379647,503518904,112720,246717008,381616128,-2072605437,371066654,-1515870945,922689445,922682570,922682134,446759704,369502979,480333827,403057411,-1070903293,249862736,-1969160192,-1908000511,-1902047115,-1840891647,-1935603595,-1874446079,922700148,-2001206558,-1202708991,-1706033151,1527,-1929279297,119442550,-1524689378,530949541,46413567,-7571713,1183551094,-1941558384,-1840870576,1351501355,-1705983957,65535,80230143,1579107816,49120095,1562371467,313933,-1275051,-1711094730,65535,-1710983425,1856,-1034033781,-1957363710,108462060,-1710983425,1875,46413567,16777114,1575324416,-1946155838,1430622424,-1910575989,451707864,-1593419946,1183383746,12886522,192200715,-1946401143,184669726,-352094757,-1960931234,-1947479557,1443621875,-59310249,-386238721,-2092040107,-277020418,-544522773,872177294,-1928915210,196732030,514191872,-1946209529,1489347,-259268105,-1510807087,521599115,-1176209779,-1510866933,-1070335093,1996445520,-92864516,1325404392,119521397,-310157729,535137026,1439386973,-326898549,106386968,106860062,-1156954485,-470351850,118943883,-1175945587,-1510866933,-787855733,1183400160]},{"sector":12,"data":[140413950,1450427195,1958951755,1489689,-670833673,1394495518,-402360577,3997791,-16548608,118947398,-1947697523,381419078,115603200,-11526569,1088947318,15616,1183521917,1489162,-125050377,1183516446,172395006,-259268105,-1510807087,119446251,1988960022,172395496,-150989127,-789017631,530969321,-1956749561,146955749,-326413056,503732054,-1005947195,344589918,638640768,1947207670,112649,292934154,-4707349,1976699647,71732004,1962951741,164004639,839500675,975613156,1124562183,-176832502,28313579,-5242249,8448408,1962952253,112668,638012555,1913081659,-1962314260,992347468,-512621233,-335544392,4537820,28843381,55347968,55524134,-394933390,637619339,1912688443,870152128,-2084901952,-829748794,1017963570,168064046,-1946716736,-2081190954,-24442426,775728166,-1073085324,-561252747,648868491,208996154,1975519811,-1947104267,-9704993,-1744360922,1583286047,-1034033781,-1957363702,183272428,12861059,-950111232,65094,12850827,1183432747,-128546314,-1577433463,1178141142,-1958248966,1452013126,591352,1183535186,591350,-610643886,-1962934263,1452013126,-163150856,591126,-694529966,-1996488692,1183579206,-62506498,1183516286,-28931588,-335919361,-28915786,1183514625,573503486,-1194816763,787939333,731448610,66638274,-267482680,-1715369214,-1037319629,-754973767,734147576,-754732606,49325024,-150991688,-1559944658]},{"sector":13,"data":[163054316,573503232,56402693,-1017256565,1167087646,518818645,-326903666,-950642934,98822,-1073297664,-956301312,313350,-599883008,829685761,1342193848,1342210232,16777114,-62486272,494190603,503369912,16824400,683167774,-1957683712,1344207942,1342210232,16777114,-1002536192,1299447808,12850827,1183432747,-128546314,938210859,653680324,1963984886,-1933341926,591298,-1598533550,-11526652,244382838,184571880,-1089506112,495649154,-472840705,77479563,1183003017,960894710,2130826806,-599882813,242483201,16547459,1996425332,85760764,1048772608,1946157442,1354771207,133097552,46413567,1342177720,1578028008,49120095,1562371467,1478413133,-1957345904,-661774612,-2096436093,121918,-1310129291,108954368,-955222784,2623046,2122320363,276049654,-1005828353,-1977217954,-163149817,-361381878,638344900,1962950528,19130627,-1962129665,1183385158,-128021512,1962950528,17819907,1191117803,-128021512,1948270464,4161781,1183572852,240552716,-1980086647,485227606,720782986,1372138468,21797456,1589903360,121120506,1191121525,-129564678,-1963434357,-163149817,-663412676,-1963434357,-163149817,74719292,158711818,-385875528,1191116979,-128021512,1033373578,-227082208,1589938155,1065362952,-991857664,-1977218978,-163149817,1987362826,2768280,775765108,1029338112,276037695,638344900,1937049400,-15972609,-739571642,-1006090497,-1977217954,-163149817]},{"sector":14,"data":[1534377994,-1082905028,-351516929,-159481670,-15698898,1589906502,126494220,183912072,-991267392,-1977218978,-163149817,-1753956342,-1821102532,-351779073,207537386,775913510,-2144949644,393543743,1589945835,1065362956,-1005816576,-2144991138,57999423,738150889,49120192,1562371467,707149,-2081649835,-1667148052,-62486268,-1560000885,-661977956,-1207966767,-2098724314,-1438216716,-1070903274,-401698736,-1072958181,1183520116,77374460,-472786805,36091903,737435880,-15340608,-1207770570,726664192,1347440832,332954,112640,-1034033781,1478361092,-1957345904,-661774612,10415233,31506006,77340299,-2020940847,1090781734,-968489848,-968476156,1187381252,1187446678,1187383452,1183645853,-1202710882,1344143428,1416090,-1773761280,-2037559274,1343684452,200571112,-1923779136,-1979746682,1452066886,-1928401974,-1929417594,-934921263,1325337715,-933313336,541032486,1589963124,1065363144,-16550880,-2037528506,1183448940,-61436678,-1949809013,1178192470,-1005685766,1191180894,126494458,-347732856,313063,49120094,1562371467,1478413133,-1957345904,-661774612,-1923945341,1343663686,-1873756117,-199628786,74760203,317440043,503652001,-1371108016,-124104682,-1207959540,-310181887,535137026,1439386973,-326898549,138840864,1946288189,33635668,37555060,-385649406,803799238,-499712254,-26110,1048772608,1946158258,35449091,956440737,58459206,-16641559,1183517302,503720708]},{"sector":15,"data":[417878018,30974723,58189904,6555335,1996423169,-26102,-337051648,1681818369,57999360,-2097028631,307774,-672595084,75399937,-1588888576,1178141216,-2092729084,2080376446,52339005,2131117625,71732021,35522091,46524496,-1577564535,1178141144,-385649160,-12779102,-16288513,-397407626,1996423953,-129594614,1342298275,-385678104,1048772998,1962869208,175570698,30947071,-956108568,-16656378,23915007,6569603,-385649408,113705314,100,16777114,-666991872,58064641,-16691735,922684022,-1092091432,108954370,-1593082624,1178141470,-385647098,1421345074,-1588584958,1344144670,1374618,-196688128,1048773205,1946157528,30974254,-1946532215,1065415774,-350194688,-528580599,-15764480,1586230342,-2012771596,1547493446,1325394805,-92371974,-1955171072,130479198,388995584,1183383552,-27883012,16777114,-163149568,78776007,-6684671,721420543,1444674630,-1949791234,-628361658,2128231321,10610947,-935655556,-1729559694,-498692864,-1070903274,-1202696112,-1706033151,6056,-965427189,65306241,-1926794238,1343676998,16777114,-498692864,-6664170,-352321281,-195130455,1962950528,-11015933,-369867009,1183711057,726669026,45633728,-1202696190,-1706033151,65535,-428556277,78776007,244318208,737129960,1421365440,726670850,-1706012480,65535,309641227,48379647,1342439608,1347469355,346921552,244318208,-336599064,-1308178673,-1207959548]},{"sector":16,"data":[-1706033097,1225,-1034033781,-1957363704,1793885164,-1136753834,175374336,1326723,-385649408,1996423408,74907398,16777114,1958742784,14608643,-1207404801,-1706033144,3015,-6664110,-16776961,28838006,1838829568,-1929379829,1183422022,-61436678,-520206649,-1005458687,1191180894,-25785350,-1963047169,126363140,-2130813301,-411762625,-368956,-970524090,513875975,-28931835,1589907947,-96010246,-100725,76217926,-1962440666,1065418334,-2132314880,303166,1048787828,1962934748,505318196,25133061,-1005947904,1191180894,130426618,-28915876,300614816,-368956,1988885062,-28901378,-2010774390,-27358457,1962950528,-94452505,509478,721975039,-928952128,731463680,1358483906,378947213,-1916564656,-1054108082,178231888,-1956773888,146955749,-326413056,-1593381757,1178141986,721714436,-951129152,130630,1074077345,-1946401143,1065417822,-349867008,1952201735,-62456049,-1963172213,-96040953,-311050230,737953419,-150659578,990192174,92144710,-335657333,-60912880,1946173312,-62456061,-335657217,1575324606,1426064066,-326898549,75399956,-1593281280,1183384866,-1587090434,-1992293090,1183576134,-230258428,2122328555,259260652,-1947187457,126546014,1022117512,-1346212,2122576462,326369522,-2131730805,57933887,-1947187457,1065414750,-1948748544,103542854,787940638,1183384866,-226589698,-1206750208,1344144544,1152922,787955712,1174471970,-28931074]},{"sector":17,"data":[35522051,-1913370999,1343682118,35534591,-11485141,922743926,-6683874,-16776961,-404224394,-297367052,-163148464,-6664170,-16776961,1996424822,-185931538,-1034033781,1478361092,-1957345904,-661774612,-1960645501,255659078,1026454528,477364244,1912733757,33766734,1996441975,1996443662,108461832,737888488,1273731520,-15829249,244320886,-336513560,242679790,383665805,-26032,1996423168,-562626802,383927949,-43063216,-1928431873,1343675974,16777114,-3872000,1996426870,175570700,-16222465,-6683018,-2097151745,-443874579,-900899553,-1957363702,108462060,-1962840088,-1073019834,1996424820,5105670,-1034033781,-1957363708,-1962518548,-1962907634,512314329,-472842136,1715374931,-1948318976,71731991,-1343092962,-1031057585,45832363,1714880256,-1705816064,65535,-16750941,149423222,-1956706560,46292453,-326413056,-1003028650,-204412926,-11472757,1676149878,-1003028736,-639085054,-443851021,180829,-2081649835,1465255148,-486257013,-1003028693,-207296510,-1946270071,-486512626,-1946580207,-1392482762,1358853887,1325410792,922744181,1996423876,-207951618,6819467,-1070395677,-16750429,-1711249866,4798,-443851169,180829,-2081649835,106369772,-956021109,588870,1982083,-1724877506,49946251,1183446007,-162100744,-1728003935,1586230263,-1579668488,-470351120,-1946401279,512489030,378209008,-634714846,730863595,1912651782,-1194816695,653721643,33883426]}],[{"sector":1,"data":[-1948742912,505870273,-28931837,-2080612861,1586037443,-1928915206,1183575678,142844,-28931157,-96040021,-28931157,52299267,-293696085,101086975,438278743,1594294272,-1034033781,-1957363708,6857196,259375115,-1157627208,1347616832,1192346,1074916096,45867217,1714880256,-1705816064,6924,393527307,-1962907997,-788502498,-1948777501,126420038,6817535,-1962907487,46292453,-1864856576,-326412987,1473809950,1745783558,119423232,6700683,-234469749,130124719,49120095,1562371467,182861,-2081649835,1448547052,-16353537,496632950,184549400,721777856,19327424,-1207404801,-1706033144,7395,932859986,-16777192,95946870,815419392,1375731736,-26032,1996423168,112648,407083600,1996423168,-26104,1183383552,922702078,127533766,721420300,12052982,-1461059797,-230257920,104580867,58459340,-1593793559,-285801634,1183400000,86155764,61992951,1077993683,-1191819639,787939331,731448610,-1980182078,1996484166,-163183864,-193527984,-150991432,-1727716818,-120470997,1357792811,1073946273,-25755824,1347469355,13239865,548931700,13416960,1723336427,10074624,-6664110,-1962934017,-553389474,-2020940847,1090781734,-506232,1996425334,13148662,-775804007,-196738056,1183666240,-1202710792,-1706033151,6402,306067783,-385647099,-1589182641,-285801198,1005733513,2097466374,-13047549,-1694599425,65535,-16222465,-402351050,1599995912]},{"sector":2,"data":[-1034033781,-1957363704,216826860,-1727773045,85069451,788003319,1077936990,-1946925431,-140966842,-138245127,-1325063634,1088475907,-163149504,385369741,-163148976,1342178349,1223968395,230182984,573503232,-1037330171,1174665425,263670,-196703408,52299267,1342178053,1706906,108461824,385369741,472554064,-443875328,311901,-2081649835,1183516396,33570056,20791412,1023964162,578028034,-956264983,16807430,-499712256,365861378,1996423168,369531402,-1667170304,80782084,1048779755,1946157174,1980155751,-1711276032,5789,1048774635,1946157174,74907475,-402229505,1183383760,-28931588,108904459,-1996186463,-794690490,-62506748,1996424820,3336444,16678531,2122393212,1963065864,-401698785,1996482678,-801702134,-178722812,125157387,77346559,-1879045144,-390404082,-1034033781,-1957363704,49054700,85341951,-1980770840,-11469242,-402337738,1996488388,71732222,1342492835,-83992,-16443850,-840368522,1575324655,503317186,1430622296,-1910575989,116163544,33310407,108461824,-1862290456,-402331634,85341951,80754431,200599016,-15960640,-402351050,1187512216,-1879047940,-398268402,-2080618869,-443874579,-900899553,-1957363710,49054700,85107030,86126327,-523041871,2114340411,108954428,-2093581312,2080375934,71732016,1578011545,-134613245,-1962601938,105286600,572427161,-1309570299,-136064253,-1980759045,-861798794,2112895748,-339309820,-18429]},{"sector":3,"data":[1575324510,503317698,1430622296,-1910575989,585925592,1024214667,812908559,20797559,-1587383040,-794622820,-1715459324,1996450795,209125134,-16222465,1072170614,-1381378,1996426870,-401698806,-571741330,-1928431873,1343675974,1736346,242679552,-1914800385,1343676998,-240152,1183649398,-1706027298,6809,339588075,1036284928,91357696,1979843133,242679721,-15960321,1996425846,108461832,1748890,49120000,1562371467,707149,-2081649835,1448554220,1024083595,141820417,1946288957,15919455,48379647,2003610,74907392,-402229505,1183384232,-49666,-706149505,80257792,224716880,-1862371585,-72751090,443924491,67651318,28837749,1541951488,-25755654,1342177720,-369505304,1190527144,58000392,-16736279,-706150794,9890297,-16484609,1441269366,-28931838,2147483453,8579331,1342177720,-384536,28900982,-1847046144,-330920455,-1070903274,33732688,28856400,1620725760,184549399,-2082048832,50238,378228852,-1070923580,-1982708087,381211734,-27358464,915137489,687277214,-1949153791,1452003910,-696349228,118943883,-1176859106,-1510866933,-700019425,280514582,-6664192,184549631,-1207599680,48955393,-397361109,1599999242,-1034033781,-1957363702,384599020,1048794711,1946157178,27715843,7997127,1996423169,112646,1354771280,507413328,91569664,-352321096,1354771202,2225562,108461824,1347469355,507413328,91569920,-352321096]},{"sector":4,"data":[1354771202,2266778,2013710080,-256,1183647350,-1706027276,9229,385107597,602511952,-1073020928,113708916,66298,1836743,803799041,-96040191,38667819,504269721,-1543899389,20775674,-1207730432,-89980927,507413250,57949696,-1962899991,-1952843706,-150802418,1876985,2097152317,470206214,-1593835264,787939356,104530682,914162050,50430625,1208154630,-99710055,737801986,-1996481530,1996483142,1354771206,-361300144,586783312,1048772608,1979646072,2013710094,-385875968,1187512149,-1593835286,1183383744,-364475410,49950455,-1063128949,244029696,-101252358,-125048329,1031732795,1005307531,1836743,-2103377919,-100255487,734493954,-1996293626,1996483142,112646,1354771280,1357543167,16777114,2017362688,-1418330368,7866055,-219611135,-1547203586,1178140864,-15633170,721601590,-1202696000,-1706033151,3524,7880323,-2094432513,1040195134,-1063187339,244029696,-101252358,-1063189525,-330921728,-16353537,1342208054,-1710983425,1650,7997127,1599995904,-1034033781,-1957363708,49054700,1982083,-1590266562,787940126,1178272506,-1960477180,-1952905658,-150802418,-97585159,-1949791486,-1952906170,-150790626,63439867,-1996439538,384564814,-335544392,71731996,504269721,66713347,-1996439546,-2103312826,-28952319,1183572605,1575324670,1426064578,-326898549,-1136753906,2037710848,11419267,-385649664,1996423297,74907398,1883034,1975520000]},{"sector":5,"data":[175570754,1342179512,1888410,-1706012160,7383,-1928562945,1343682630,769690,175570688,385369741,108461904,-402360577,1536878252,989855748,1963123206,175570694,-2097137944,47678,1048783220,1946157524,209125154,993690,-737753344,-352321535,-499712238,67155970,1354771280,-560312240,-1962934249,180510181,-326413056,-1593512829,1183383654,-62470146,317390848,-1962641665,1183055454,939459326,-586264,1755446342,-62506752,-443816324,180829,-2081649835,-2091510548,-16746434,-1696005259,142016257,385238669,570989136,614531072,-163184382,1982083,690582846,-90047930,-230258430,737822347,-1952844218,-150802418,-97585159,-196703998,695582731,-1996293471,569111622,688017057,1187511366,-1962933774,-1952842682,-150790642,-196703751,91602955,32786119,12624128,-940554615,65094,184960651,1024881856,796131329,1946157629,212271,71118708,-349211648,-230257912,1183439095,-28931074,12584449,12598915,-953123584,49158,-1955599616,-487853498,-336312693,-196703269,1048828139,1966997534,71731981,49950455,12584491,1183565035,-2081035516,30782,-2103367819,-100269311,-1952888830,-150799858,736753657,1183446086,12624366,2112767545,-297366751,-352272221,2017362713,309657856,25310859,49952299,12596793,914949246,-1063190336,-263836928,201213577,-2089978688,16807998,1996431989,112648,-1070137520,312102912,-16777178,-1070921610]},{"sector":6,"data":[-28931248,787994871,820708126,721975039,-1063169856,244029696,-101252358,112720,592747088,1996423168,-28931320,-99710055,-134613246,-265357352,-1070903294,1354771280,-1706012592,65535,-1710721281,65535,80230143,1577577960,-1034033781,1478361094,-1957345904,-661774612,1461906563,242649942,-1962115445,998855,58087284,1023444457,141819905,1946158397,9562420,112726,1354771280,-1818603440,1442840614,1347469355,-644198320,721420321,-2132174400,-11053568,1996425846,108461832,-335943192,-1070901526,-84744112,-11083285,244320886,-337319448,1183667926,-1706027298,8261,-562626730,-1914669313,1343676998,1459417320,383665805,543201872,-1343553536,175570774,-402229505,-1544815190,1946162237,18103741,356323186,1038448129,91357696,1979843389,-11053424,1996425846,108461832,2131354,-2090902016,-443874579,-900899553,-1957363702,82609132,-1980353706,-396951946,1072226753,1975925504,112678,-6662576,184549631,991458496,1963236406,-28931322,-1946401143,1191181918,-1981558274,1174546103,80492091,1183565948,80520190,1593591435,-1017256565,567089588,1438901290,1183575179,505318148,1220739843,-1946945639,46292453,-1864856576,-326412987,-2082959842,1465265900,-1983892730,-996017082,1958742784,1150963718,-1207959544,-1096613868,1489664,1086055415,1347572480,16777114,12886784,58048523,-1207918359,45809704,-1640562944,-1705816060,7260,58048523]},{"sector":7,"data":[-1560246039,817562782,-1912655104,1996476534,108461832,-1873406381,-519968754,-1962898967,104594502,661848254,507808310,326381116,12846734,-2095114722,381228486,-5967360,-1927283642,1444335734,552078992,-1587942431,335872190,1489664,-1147542537,922681346,1347551428,-26029,-1073020928,-995943052,12493056,-788524027,179168,77477631,-392539312,184549415,-1156418112,-1070399459,1347441488,244338768,-338137880,77505295,12453507,-8918764,-109789173,-1543747957,-996081194,1958742784,30843162,-1157579101,-470351850,-2411623,1375781942,1452954448,-1593835480,-1073020458,-784334475,-2411552,1342479926,678664787,1594294272,49120094,1562371467,313933,1167087646,518818645,-326903666,-2091493508,5182,12061044,244338692,-1193699864,-1706033135,10531,92127243,-352321096,-1983894782,280557638,664424448,184549420,-1207599680,48955393,1183432747,80257498,-1948760439,3999814,1024160769,57999617,-385731607,1183515305,2112774,-840367243,-385649151,138215934,-385649408,222101802,-385649408,-2031549995,-1003028734,178178,1354771280,-369418776,922681973,62390980,-1947342080,624756294,1031500800,259260454,1962944317,8710403,1946167357,-2096370855,313406,251593844,-928971576,-666486524,988349301,1776832514,-935919869,74246148,14319235,-1394015371,-663290112,-1461186928,1975520242,8644867,80230143,-1729622384,1958743026,34072835]},{"sector":8,"data":[80230143,1342177720,-370097176,-928972295,104546308,-1434648190,80217855,1048814827,1966997534,49979805,80217657,103388284,-1897200440,1982083,-1584958146,100861128,104530682,175964546,16972449,-385562618,-928907408,244029700,-101252358,-1056708105,25298491,1508443004,25338367,80257864,-45079,-1878734794,-233445362,58048523,-16677655,-402339786,2062151776,-125926655,-385649664,28836209,-1209511936,-10425872,-1987557747,1452049478,85893510,-335919479,-2074164207,-1954265345,1191180918,637831930,1586169736,4161786,1589962613,130426500,-1928467712,-779319226,1988380217,-2075197684,646209220,1968979840,-2008642070,1312412044,956855686,58033222,-997964033,-970554274,244318215,735869416,1183666368,726668936,-1706012480,6088,309641227,48379647,1342439608,1347469355,610245200,244318208,-371414040,1048772817,1962934658,13101315,80230143,1223167632,1975520241,-21960445,-2080427799,34878,-1427569804,-2012821760,-1962934016,-2036082106,10217728,1962942781,-32642813,1962943037,-32052989,1929389373,8644867,1996499005,-32511741,2122545643,1937050886,8928899,-949193728,34822,-2109832448,1601437697,80230143,-521662832,1975520240,-935919861,112644,-284235696,12861059,-1958710272,721470486,-196703808,-1191815543,512426006,-472841016,77477515,1174481143,-196703244,-1913235829,-259268994,-1910634730,768474,-1927305742,1343675974]},{"sector":9,"data":[8795903,1577234920,49120095,1562371467,313933,1167087646,518818645,-326903666,1048794640,1946157076,67155977,-401698736,297326202,-1952821248,184549409,-1207599680,48955393,1183432747,80257532,-1963964791,-467007930,1347537195,1272474,-1981535744,2122516038,1098121468,2097152317,12314883,2113935933,11790595,-955887873,63046,956615841,58521158,-1962893079,-472779170,956712587,1963075207,-159973621,-1092088176,8907250,-336181505,-1002535977,2121531392,12850827,1183432747,-94991880,-336181623,-939065542,-939116284,-955878140,313350,1488896,80223883,915137489,687277214,-1946663421,1183447638,-195655182,-1963827516,942016070,192153927,-1577695489,1178141058,-1581351690,1178141896,-1205832464,-397410303,922742338,568853704,-935919872,19195908,80230143,1342177720,-1192385560,-2090991615,-443874579,-900899553,-1957363710,49054700,956350625,276563014,-150987615,50526766,989904902,1367278662,1982083,-1591446210,1178140864,-1962115836,-1952906170,-150799858,-1960449031,-1952906170,-150799858,470166521,-1592464640,1178140864,-1962574588,149619782,721700491,1073936902,-113015,-1207778250,-11534332,65601142,1575324663,503317186,1430622296,-1910575989,82609112,25312899,-950963200,16824838,507413248,209010176,721612961,84222470,183173124,-150983752,84222510,1183383557,-1003028484,112642,-59310256,-26032,922681344,1139279048]},{"sector":10,"data":[105286400,184669347,-16157248,-1711094730,9285,-1962742397,1297948645,503317194,1430622296,-1910575989,-1170308136,192151552,12191431,-6684672,-2097151745,-443874579,-884122337,-2081649835,1048773868,1946157242,-2109832351,1517551617,117196487,507413248,896876032,956350625,175965254,-150802271,-62486056,1183520235,-1073337596,244029696,-101252358,49295095,-1946401279,-1962739186,-140966842,-339571719,71731975,12584491,506394432,1183401987,-59310082,-26032,-443875328,180829,-2081649835,1589905132,133572102,-1875217392,-659232754,-1588543445,1344144670,-1962522997,151324758,-1706012160,11012,309641227,48379647,1342439608,1347469355,723163728,244318208,-338108440,105286508,84432523,1183383561,-27883012,2122320363,276049658,-990099713,-1977156514,-96040953,-361381878,654073540,1962950528,1354771229,1342184376,1347469355,-1962522997,151324758,-1873784320,-776214514,1183522795,139889414,1375734021,75400016,-1207602176,65732610,1342366369,2095582864,1575324418,503318210,1430622296,-1910575989,149717976,-1962522997,1183385686,-61437446,1234849874,-352321492,105316099,637951684,1962950528,-2146112524,1949235326,-96040165,972838539,276170310,-1006219521,-1977219490,-129595385,-545956804,-16359740,-2144991674,1316302399,108461830,503351992,803117648,-1073020928,1996439668,108461832,503353016,804428368,-1073020928,1996434548,108461832,503354040]},{"sector":11,"data":[805739088,-1073020928,1996429428,108461832,503355064,10525264,-1073020928,-1070922636,28836843,49120000,1562371467,313933,-2081649835,1465266924,1187445790,1992622286,75416584,792505004,1547437172,1191052149,1975519950,1170679535,640298751,369182088,-732525281,567089844,13780679,72795392,1320470835,57811405,-2147437591,1946209918,9103619,16777114,-1898410496,-1946145762,-164375970,1946172544,1346219381,-1391758015,1967674429,1027386373,179046260,-335841856,-797537821,-1408991548,1950039210,1975519749,1555058422,994828171,58000478,638315343,1979598136,-2010755327,1988755269,-765555504,-2146928955,1966735740,-1404680702,1975519914,1170679546,640298751,-989772408,-919403434,567103156,1992632435,3965136,1992664693,75416584,-1073042772,-953746827,1160707909,21350182,-970570408,-385875131,1187381426,521535695,-1393396083,-76206532,1480932481,2088963189,108348674,147803776,1015100651,209014595,1292008579,1317013109,585827535,1094859905,2088963189,108352514,47140480,1015099883,175458640,1174568067,1317012597,1337197007,-1435295283,13598336,2122323317,57934030,-2080409623,1962988158,-18552573,-973118487,1017906294,1325102378,-1731246454,1094845639,1409434823,1963108352,1124386595,38061903,78118989,80156277,1153914949,-1476377342,-955681528,-951496700,4588100,-1956749537,146955749,-1873273344,-326412987,-2116514274,1442894572,16533191,175570688]},{"sector":12,"data":[-1710721281,13302,2113961789,140428296,2135410214,175570688,3297690,172394752,1342193848,1342210232,3288474,-632911616,343195659,1342193848,1342210232,1853850,-1136228096,360038411,-1202667477,726663192,1347440832,-401698736,-1259745619,175570692,16777114,-1983739136,244320838,-338357784,138870531,638082756,1948270464,981896692,105912063,859740755,-2033778688,65334,638082756,973176704,-1977215115,736373255,-1706012215,13140,1076749354,914786560,-632910849,-1224781794,244383542,-1982401816,-1072972218,255660148,-385649408,244318830,-371913752,1589904443,1065362952,639333678,1543602048,-2144988044,1949172095,38594819,41910310,-385649572,1183515202,173443848,-1983363447,434883158,578039612,510926908,58010172,1006773737,-385649345,1191117342,-933313336,-2012771802,-1073029050,1183570549,-900297784,-1981528439,1177282134,814123272,981896703,-11528449,1996425846,880515592,1988820992,141962184,-12942650,981896448,-1706027265,13619,-12941683,434655254,1975520004,29681923,-1098902037,1952251694,138840860,956978827,292997190,-993505537,-1977169826,780568583,1965964543,-933313315,775913510,1183541876,948341210,138841087,-1995811189,1451870278,-2145260598,805252798,-1098897292,1948319534,949914401,948371455,-931740417,650659583,126354570,650665668,-2037905526,-1073021138,-1635004043,130481976,-632911104,-2037559266,1343684410,-1912851992]},{"sector":13,"data":[385825414,895916624,-2037841920,1307311920,-12941683,-1933293943,1183565398,173443848,-1983363447,552323670,-13713792,-2144898001,553594558,1589911668,-934871096,-1006138842,1191167070,126363332,650665668,-2037905526,-1073021138,1589957237,130426564,814123776,982420991,-1933507585,-1002010158,-339323255,-1001455869,650403524,1965965184,-1001979916,-13465971,-16363498,-1013267338,-1207959500,1344143697,-13465971,1354256406,-1957683711,1344199238,1342210232,1201562,1958742784,-1136227460,-1950726519,-2037786042,1139539768,-13713792,-1960151714,1344191046,-12941683,1553616918,-352321483,-1169752317,-2135269749,-176881601,-2135269749,326381119,-340111617,-1168208909,-1950726401,-1962985290,-16283644,-1946208122,-1962985314,780568583,1975519999,-1168208977,-1962932282,-2037793722,1183579960,-1136227878,-13072757,-338016631,981896515,-1873799425,-96737266,611696651,-12941683,2140819478,721420335,465064128,-1070903296,-2037559216,1343684410,-1427632496,-43062837,517621387,981896528,-1706027265,5841,517621387,896834128,1183383552,-428408862,-1696303361,6625,1038239235,192807039,736386756,-970530210,-1962901689,1344199238,-1673473,530244726,-1962934259,1183439430,-2146309190,805252798,-1098901644,1948319534,-1169752304,-1967497589,780568583,1975519999,-1169781790,-13072759,1191117803,-1168208966,1948270464,516131829,838113872,1586167808,-1962440516,1088064707,1183535186,-1706025286]},{"sector":14,"data":[12918,-1967366517,-259287033,218185926,-13066613,-13070593,-956299322,187462,-1996077429,1187503686,-1962934068,1183431750,-799109938,-1982052723,1452069446,-1983894572,1183438918,-2146112554,1560227518,1183521652,948320730,-15567105,-1946208114,-1962985314,780568583,1966750975,949914590,-2012771585,1023356550,1006924892,-16485062,-1191233402,1344143568,503407800,22853712,1183666206,-1202710808,-1706033132,13465,517621387,848599632,113704960,65898,384321165,948341584,-1706025217,12234,326483979,721541793,-1924115758,1343671366,16777114,-1962022144,1344199238,382486157,-752883632,-939768183,92678,-401698816,2122567920,158663164,-1982183797,1586235462,-58817782,-15830210,1996487798,142016266,904400528,-629243136,-16223232,429578870,-2097151945,1946205310,-1133052152,1805466,-58817792,-1207602626,48955393,-2090942421,-443874579,-900899553,1478361094,-1957345904,-661774612,185222795,1024095424,594804738,1962936381,1354771208,-352314184,1354771206,1342184376,1347469355,-16222465,244319862,-2083944216,-443874579,-900899553,-1957363706,183272428,71732054,-1996073333,1451883590,-16520194,1589967942,1065363196,-1946913536,1451951174,-62506746,1589909106,126494460,1022772872,1007252538,-16419748,-538182578,-1946401025,1452014662,-129594882,-335915383,-159481847,-15698898,1589967942,126494460,183912072,-1947568704,1982594166,150897656,-167050113]},{"sector":15,"data":[-1070922635,1589916651,1065363196,-16550610,1183579206,-27882500,-1980217719,65796694,-990099713,-2144928674,-193658817,1177273227,212472,28888191,-443851264,311901,1167087646,518818645,-326903666,172422664,-954043264,93190,1916206848,1882652417,945789441,922681344,922681718,1268384116,-352321536,1812383564,-1962934015,1856178758,138840833,1358710409,16777114,-129595136,-990226807,1183053918,-1960442632,1468737031,24158978,24254089,653811339,-1960441973,1956840023,1981188353,-59310335,16777114,49120000,1562371467,445005,1167087646,518818645,1996478606,175570700,-16222465,922682998,520028526,-310181516,535137026,147475805,-1873273344,-326412987,-2585058,-16683466,-2097057762,-443874579,-884122337,196699,16713021,131083,16711718,196616,16713006,196620,16712958,196621,16717812,196622,16714653,16973840,75591,196609,16723664,16973847,338188,16973930,337689,16973931,336191,16973933,339686,16973934,327861,16973935,333685,16973937,333695,16973938,209433,16973829,207062,16973830,210699,16973831,269546,16973825,269558,16973826,337468,16973948,336676,16973949,206797,16973839,207039,16973840,327905,16973825,206775,16973841,271360,16973833,327919,16973826,211065,16973842,211117]},{"sector":16,"data":[16973843,209417,16973845,327771,16973830,265212,16973972,395556,16973829,397699,16973830,265175,16973974,333590,16973839,335514,16973842,335540,16973843,333601,16973845,209013,16973861,336049,16973846,336931,16973847,269756,16973857,329077,16973978,269707,16973858,330734,16973852,329061,16973981,210621,16973869,196626,16973872,337078,16973857,196655,16973875,339430,16973987,211026,16973876,339495,16973988,269579,16973869,339614,16973989,331524,16973990,339456,16973991,337608,16973863,337634,16973864,210568,16973882,269566,16973876,328067,16974000,336889,16974004,327763,16973877,327744,16973878,331269,16973880,327817,16973882,265166,16973890,269792,16973892,265261,16973893,337460,16973885,197541,16973902,337383,16973886,210578,327759,16711715,16973832,337543,16973888,331532,16973890,331552,16973892,329656,16973893,329647,16973894,210600,16973911,329665,16973895,210416,16973912,335445,16973896,210327,16973913,210394,16973914,336402,16973899,330778,16973905,335458,82,0,0,5]},{"sector":17,"data":[0,1,0,4063237,774504540,2228266,541937475,541415493,5521730,1144791072,4084297,536870912,0,1061109567,1061109567,4144959,707668572,1543518720,6044160,774504540,6029354,0,1998585856,1701540463,1852776548,32,65535,538968064,1380533308,62,1480916992,1329791045,1229979725,1094844486,538968148,538976288,538976288,538976288,8224,154,1380533308,62,1,1310720,4456448,0,65536,0,1684957527,7567215,1936942419,7237481,7498052,1752457552,1766064128,27507,1769366852,25955,1232364871,7300718,1735357008,1936548210,1850277888,27764,28001,788557168,1968308282,1275068526,6578543,0,1952531561,1416167525,6647145,892416371,846397497,3749171,1148387375,6648929,1416822842,6647145,1954047232,1769172581,7564911,776882519,5066563,1818585203,108]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2097409,4194337,524352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65281,0,65281,0,65281,0,65281,0,65281,0,65281,0,0,0,0,0,0,0,0,14688000,0,15744768]},{"sector":3,"data":[16285440,0,16580352,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16580352,0,16285440,0,15744768,0,14688000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463]},{"sector":4,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,1953300480,1818838544,905969765,1853182464,3026478,1275087360,778330479,11822,1866661938,774797680,989855790,1952794368,1718503712,855638127,1818575872,778400869,11822,1917845556,779382377,-2147471826,1699872821,1701667182,3026478,1701402128,1040711799,1869107968,29810,1867251775,26478,134217728,1816199233,1107296364,1918980096,1818323316,3026478,1342192896,1919381362,7564641,0,1107313672,1632510073,25965,2034368581,1952531488,1174405221,544817664,1702521171,4685824,1260419394,6581865,1701860240,1818323299,3670016]},{"sector":5,"data":[543452741,1936942419,7237481,1124088064,1952540018,1766072421,1952671090,779711087,11822,1749221431,1701277281,1919501344,1869898597,774797682,1207959598,1919895040,544498029,1635017028,1936278560,774778475,4784128,1701536077,1937330976,544040308,1802725700,3026478,1392523904,1444967525,1836412015,1632510053,774792557,1953300526,1886339848,1735289209,1817191200,1702060389,1936615712,544502373,1143821133,1679840079,543912809,1679847017,1702259058,1699875104,1768776046,153118574,1701602628,1735289204,1125318688,1952540018,543649385,1701996900,1919906915,1124868217,1869508193,1768300660,371221614,1852727619,1998615663,1702127986,544175136,1986622052,1124999269,1869508193,1701978228,1701667182,1679824928,1667592809,2037542772,544434464,544501614,1953525093,1126444665,1869508193,1701060724,1702126956,1701344288,1920295712,1953391986,1919509536,1869898597,237926770,1852727619,1679848559,1952803941,1124868197,1869508193,1919950964,460615273,1852727619,1663071343,544829551,1701603686,544175136,1702065257,237921900,1852727619,1663071343,1952540018,1310597221,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,2037411683,1937009952,1819626779,1819306356,1768300645,544433516,544501614,1869376609,778331511,760433926,139677508,1970233921,774778484,1176521478,191194482,543452741,1936942419,141455209,544499015,1868983881,760433936,542330692]},{"sector":6,"data":[1667594309,1986622581,1750344549,1998615401,543976553,543452773,1920298873,1852397344,1937207140,1936028448,1852795251,1867387438,1852121204,1751610735,1835363616,779711087,1819626786,1819306356,1701060709,1852404851,1869182049,1847620462,1629516911,2003790956,858678373,1852727619,1663071343,544829551,1953265005,1701605481,1818846752,1948283749,543236207,1735289203,1679844716,1769239397,1769234798,187592303,1852727619,1914729583,421555829,544501582,1970237029,1830840423,1919905125,1869881465,1853190688,1867394592,1852121204,1751610735,1835363616,544830063,1679847284,1819308905,1696627041,1919513710,1768169573,1952671090,779711087,1851867927,544501614,544499059,1970040694,1847616877,778399073,1851867931,544501614,1851877475,1679844711,1667592809,2037542772,544175136,1851867928,544501614,1634038371,1679844724,1667592809,2037542772,1746932768,1847620449,1768300655,544433516,1763733097,1126772340,1869508193,1970282612,1397563508,1397703725,1937339168,544040308,1948282479,1679844712,1701540713,778400884,1851867927,544501614,1836216166,1679848545,1701540713,778400884,1701597241,543519585,1667590243,1752440939,1948284001,1679844712,1936421737,1701994784,1952805664,1713401973,1948283503,544434536,1919250543,1869182049,1310404206,1696625775,1735749486,1701650536,2037542765,544175136,1852404336,1310666356,1696625775,1735749486,1768169576,1931504499,1701011824,544175136]},{"sector":7,"data":[1852404336,11892,0,1828716544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[8084045,3,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":12,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":13,"data":[279886,131221,190350734,32772,0,0,0,0,4194352,9175104,9765013,1175,589824,0,0,0,-2147024892,1,5046272,5242904,68,-2146959360,3,6619136,-265289580,32780,16318464,-265289531,32781,29229056,-265289405,32782,0,1313818119,1380533332,1431257861,16978,738197504,1414418246,542328146,741552945,925644345,540680242,1920298819,544367977,808528952,540160300,1952797480,691217184,0,0,0,786435,155058432,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718600,589920,2,-1879048192,524289,137363466,536872960,-536846081,0,603648,0,1866661888,1701409397,852082,206438656,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718602,655456,2,-1879048192,589825,154140684,536873216,-67084033,0,804352,0,1866661888,1701409397,917618,338559232,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352]},{"sector":14,"data":[1702061426,1684371058,46,0,4718604,786528,3,-1879048192,786433,204472335,536873984,1342202111,1,1320448,0,1866661888,1701409397,114,0,0,155058432,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718600,589920,2,-1879048192,524289,137363466,536872960,-536846081,0,603648,0,30208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65280,0,0,0,68157440,472004872,68157440,68166152,956310024,956826640,268435490,69339140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1048596]},{"sector":15,"data":[524288,0,0,0,0,0,0,0,0,0,0,1040187400,24,62,268312,402653184,1616904216,134742112,335564308,134742016,134742036,1308622868,1309935624,134217728,134222856,68157440,469776648,68157440,68157448,956301320,956826640,268435456,67110916,134217728,554174996,268699672,0,136052992,1040456732,471612940,262144,943594512,2138840702,1047993983,1669100318,478026855,2004827774,2004318071,473963647,524322,393312,140509196,1597444,0,0,0,805832192,471604273,471604252,471604252,471604252,471604252,471604252,471604252,471604252,134224924,1996495872,1092754952,4,135790657,525316,134217791,555810852,943196177,473446456,2139037247,1044283263,1736195646,471604252,1998396444,2004318071,134749280,337923604,134742016,134750740,1312498196,1309935624,134224930,136451080,134226528,1377700372,134744096,2102,941752832,537666082,572662288,524288,138486280,555884833,136454433,907026948,572596770,575226145,572662306,69210178,0,131104,2097168,532480,0,1048576,0,134744064,471604297,471604252,471604252,471604252,471604252,471604252,471604252,471604252,7196,572662280,1291854344,28,136577113,2056,134217850]},{"sector":16,"data":[572653604,134742050,134744072,555819289,134750497,572655624,572662306,572660770,572662306,8766,469762048,0,0,786432,0,72704,0,134217760,606093056,68157456,2076,136446976,538182146,572654624,1041235968,340591108,539050017,136462368,705700868,1092698418,570966049,336863778,68161540,1006632960,1044266558,942423868,1946691132,1065238124,1715224438,2000058231,134744190,471604294,471604252,471604252,471604252,471604252,471604252,471604252,471604252,134224924,1998327838,1358974984,4067620,1041760341,570426384,134217850,606356516,336857108,336860180,538984488,134750240,841025544,1094795585,574954561,337781282,1010573857,1010580540,1044266550,943210046,1815492664,1044266558,1715346494,2003199590,134248254,136057856,68157481,1040203391,136448000,1008995332,505153596,2099208,341115906,1008812094,138297404,705705988,1094598954,570965566,134752788,67637256,33554432,1094861089,137511440,705176580,1109475634,571490329,571744802,101199940,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,134224924,136461344,1358964736,1040327196,134217817,570431516,469764154,2121867800,336859241,336860180,1010581583,134757436,712574984,1094795585,575216705,136454690,33697313,33686018,1094795529,134758721,842991624,1094795585,574954561]},{"sector":17,"data":[572662306,134226465,302153216,68157510,2076,136450048,37618184,35784738,1041235968,1046349828,539050017,136464160,571483204,1092632870,570949924,135539220,67375120,1040187392,2135048225,136462864,705181700,1109475618,571489808,570960418,134744088,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,134224924,2132938784,1291850760,148480,134217813,570425344,10,286462208,1044258835,1044266558,538984568,134750240,639698952,1094795585,575740993,136454690,1044259134,1044266558,2139045951,134774655,574687240,1094795585,575216705,572662306,8737,624699392,68157508,2102,136454144,570696208,69341218,524288,574619656,555884833,136454432,571548228,572531234,570966306,136451080,67244065,1107296256,1078083873,136461840,705176580,1109475618,638714128,336860180,134744098,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,134224924,136056862,1090521608,8764,65,570425344,10,572858940,572662309,572662306,555819337,134750497,572655624,572662306,572660770,136454690,1111630112,1111638594,1077952840,134758464,574687240,1094795585,642849857,338044454,134222910,1107830784,134742075,524288,1042038792,470686782,404492316,264200,2000422928,2138840702,1047993976,2004841272,477633650,471613043,477565960]}],[{"sector":1,"data":[67178623,1023410176,1044332158,1047986748,1799250692,1044266615,453803644,137761800,805832318,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,134224924,472006152,1040204808,4352,1040187454,1006632960,524298,1146045440,2004294735,2004318071,2139037263,1044283263,1920745022,471604252,475798556,471604252,1027436144,1027423549,1044266550,1044266558,2000567870,1044266558,457055294,135994139,2080,0,268697600,1048576,0,0,0,4096,0,0,0,0,452984832,0,0,469769216,65280,0,15360,56,35651584,0,805306368,524288,0,0,0,0,0,0,0,0,0,0,30728,0,0,536870912,1572891,117506048,1,0,3072,0,0,0,0,0,0,0,6144,0,0,0,4194304,805306368,1866674272,1701409397,114,206438656,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718602,655456,2,-1879048192,589825,154140684,536873216,-67084033,0,804352]},{"sector":2,"data":[30208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16711680,0,0,0,0,34603008,539100930,134217952,1090650882,1142956032,8657920,-2000125568,17301504,538968577,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1048576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7864320,0,16384,0,0,67633152,29362437,67108880,8389636,5259392,16918272,7356929,33816576,1073774594,34603008,2098946,268435520,16777730,6299648,137472,13140352,17301504,536870913,67108864]},{"sector":3,"data":[-2128576252,34631812,8,16777216,-2096692706,955785664,990846,0,471743488,-1012432097,-482673415,-403831905,941494150,-2028007810,-1893728337,-546211897,-536820543,524336,1610612760,1610627072,51118340,128,0,1,0,-1065304064,236730564,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,398590721,306061340,34576,8650752,16973836,-33521536,117702656,67699328,473434306,-2147285234,2134540000,-472932545,2096689377,63398268,1893777537,-126804680,490700540,67647616,549587205,134217888,1074005252,1217413248,16852502,-2005908991,33816632,1092649474,67126400,-500989692,68192328,65540,33554432,1141378593,1073766688,-2146426558,2097152,69288512,560088072,1095140360,1115947012,1141119235,1208488225,67734120,-1876942206,536871553,72,536870920,536888320,262144,128,0,1,0,562036737,236730404,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,14448,-501152767,4333576,8405030,7995648,-2113666030,-201260992,135004160,152241728,67633188,-2147483390,558248512,541362192,270549120,-2071453662,-2012208830,-1876942280,135406664,17536,0,64,0,0,8,0,312,0,67108992,301238020,135299216]},{"sector":4,"data":[8457474,67108864,1073742369,-2147442400,-2096094974,4227073,-1975516640,287459336,1099075616,-2105278460,-2105235198,1216880673,-2012708320,17896594,536871169,503316612,-1600060661,745947376,-536606948,951114118,-946008724,-583932985,-1623492649,562036929,236730392,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,656507907,10493980,545343273,4849920,66578,-200736384,134479872,270631492,169085000,1082196485,612520096,-2147219182,270549120,1217409057,67703332,-1876933320,269558856,507266296,-1048377585,507174113,-1014823153,1893777537,50804276,1893777537,422780472,-1201420660,67170032,4456960,134234144,67330,134217728,-2130705887,-1192222271,-2096030204,-125730815,-1974598640,285378575,2139156704,42270724,-2109454078,1200103457,-2012708352,34211986,562036737,16777218,1667681292,848097288,-2147221244,-959944573,671494963,-2012217055,269558418,545259649,236730368,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,536953356,5251232,1199720488,7471600,33693452,-200736448,134479896,961626690,169087028,1082196485,1015061664,-2147021026,270549120,1217407225,67703332,-1876932296,-1609554872,16930948,541097984,1640374800,541890608,270549120,-870835938,-1944505498,135358264,270615172,67126412,-532479488,134259264,-523297022,268498945]},{"sector":5,"data":[66081,-1006100446,-2146557688,256,-1856894968,285362184,1099927584,-2105147388,-2111567614,-2138103746,1342735040,67373140,541065217,520093696,587483144,579092728,327940,-2104997758,117711137,1343226113,50994346,411041798,236730368,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,-410974456,2621692,-2143008983,4913425,-2130246656,-200801920,118358040,1689330305,287449324,558007304,612429841,-2147219182,270549120,1217405985,67703332,-1876932296,1074799688,524174468,-507279601,2139160305,-523264193,270549120,1209012579,67703332,135350584,-1608498556,67119236,283119360,134223001,67330,536870912,131617,-2079789021,-2147475184,-125763584,-1622011888,285362184,1099071488,1115951108,-2112616190,-2004344800,1342734880,134485100,538968065,553648128,570705928,579616768,-2147090172,-2104997758,270625,1343226305,67771562,545259521,236730368,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,268567048,1310784,1073889318,4849936,1024,336068864,0,-2008006398,524173396,-507279601,545263857,264208,270549120,1217405473,67703332,-1876930248,1074799688,557990648,574916624,1082138642,528416,270549120,1209012545,67703332,135350584,-1608498556,10372,293864448,134219813,8457474,1076887744,67371553,-2079842016]},{"sector":6,"data":[50405664,4227073,541917216,555893896,1094877192,579080196,1141639442,1275597088,537428512,268706372,537919553,553648128,1667681292,578043928,1074004228,-964147070,134492979,540021025,134488644,545259585,236730368,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,16908,663616,549555984,8650752,0,336068864,251658240,284787396,541147838,304367760,557978121,541362192,270549120,-2071453406,-2012208830,-1876942280,1074799688,557990528,574916624,1673929234,1624021041,270549120,-870837917,-1944505498,152269624,1080083076,67113100,-494730240,67171864,65540,-2144337728,-1014034658,2029023424,51256864,2129921,1897926720,-1010334753,-482549511,923668383,952377335,1797000824,552649153,521041732,537395393,503316480,-1333722213,1996812512,-485617377,953970151,119475500,551084224,520386372,545259713,236730368,-1065286905,473460960,-2130508018,946921664,50794012,1893777537,118365240,-524254973,67123312,14714627,8659168,15,7864320,7936,351535360,0,1024590848,-236766204,1065286904,2134687263,-472932545,2096689377,59209852,1893777537,253713464,-505363577,507370688,-777828465,473488617,-2096953586,2096689377,59194140,1893777537,-2045952968,1085301187,4336,-2147483648,33554432,8,128,0,0,0,1]},{"sector":7,"data":[2031616,0,0,0,0,1536,0,0,-536821759,0,0,8650752,4352,0,288,0,524288,-1065304064,0,0,0,0,0,0,0,0,0,0,1,16261120,0,0,0,905969920,1024,0,0,0,524288,0,0,0,0,0,0,0,0,524288,0,0,0,0,16384,-2147483648,8320,0,0,0,0,0,0,0,0,0,0,0,0,0,8395008,0,0,0,65281,0,7864320,3584,0,8390520,0,3145728,8388608,0,0,0,0,0,0,0,0,0,0,1,8192,0,0,0,512,6144,0,0,0,3145728,0,0,0,0,0,0,0,0,3145728,0,0,0,0,0,16973824,1866711232,1701409397,114,338559232,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189]},{"sector":8,"data":[824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718604,786528,3,-1879048192,786433,204472335,536873984,1342202111,1,1320448,0,30208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,786432,-335474896,15761433,786432,-1744761296,254803980,16816129,805309676,434897167,128,-268434496,3178521,0,0,15728640]},{"sector":9,"data":[100663296,1572864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65295,0,32769,0,0,0,393216,2021857632,9994521,393216,-1744757920,425721862,50370689,1610614392,427328281,128,-1744763296,6324249,1572864,-1006566376,9961728,1572864,1560,102236184,16777216,402659524,12845318,16777216,1619001728,1572864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251658240,786432,28672,117489665,7340224,459616,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2145845248,8396544,0,2031616,-268431616,3,0,8396640,0,0,0,524544]},{"sector":10,"data":[0,0,0,0,0,786432,1812139568,9994545,786432,-1744761040,254803980,-2093377535,805309548,426509071,128,-268434496,1882226713,38913,-864020128,260441862,-2147393536,1728,0,983808,-125755552,66880259,-2128610109,248,402685953,-2095056895,-92241952,1073514367,-478546719,-1629024260,1929842303,-1052772127,-192839688,-258021505,-277241857,-119505137,435159488,393344,12288,201375744,3145728,197472,6,0,0,12,0,939524096,482345222,-2146437056,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-134216864,986880,-2129036288,12583160,520093696,-2144272256,411113728,520093702,16777440,12595424,2013266736,54419456,-536658208,1066926398,-947914000,-54034436,1073529663,-2021655357,-125755586,536379679,-1491076992,-1628997218,940568441,454657,939662176,15761457,393216,-1736369824,425721862,34510977,1610614328,423133721,63616,-1744763296,811630617,38913,-864020128,416058399,221184,12596832,0,-2129066496,214118624,234914567,-1020261373,12,201326595,-1070593021,-2034159376,402965296,-1070592989,209912160,806225688,1662520515,214118412,1611408198,-969931162,-1061142522,3145824,0,12288,201375744]},{"sector":11,"data":[3145728,196608,6,0,0,12,0,1610612736,912261126,-2146436928,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-1946090656,101107248,33606656,12590852,536870912,-2144272320,1887437056,1040187392,192,12595296,201328496,1007616,-268431376,267386895,1127253521,71512068,106954758,-1020239872,214118412,806142768,-1020200768,214118412,403097136,6147,0,0,0,0,0,3342336,0,0,1610676224,0,805306368,0,-24962720,416861232,417792,1623211824,0,-1070593024,213909600,402686733,-1020261376,12,100663302,1616907264,46346480,402940720,-1070595034,411238752,949880600,1712850630,79900678,806101830,-2095511866,-1065336564,3145776,50331648,-92260360,1073266974,-2127040831,1006845920,2009861638,-2122844031,-188646418,2031929151,-952524817,1623211934,593494022,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-2136928416,101682975,67158017,12595442,1593835520,-2144272352,402657120,1040974592,192,12595296,2013266736,983040,-268431376,267386895,1127219715,71512068,106954758,1664114688,107372684,1611032160,-480118688,214118412]},{"sector":12,"data":[520930096,-2093016893,-125616136,2113438527,-2128610592,-125755400,517996830,-2029920255,-125755528,536379679,-954206080,482832668,933152625,40583,-1736369824,212862768,417792,1610616624,0,-1070589952,209715552,821592857,-1020258304,1610614284,66847500,-513599488,12791960,403727152,-1070595962,813891936,1022756376,1712850630,-2134822906,806093574,17786566,-1073740904,3145752,100663296,-2031929332,202295153,-1070064633,402850656,947259142,-415756601,207821852,806093580,-2095511866,1619009804,6291462,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-1067435936,110674224,83910659,12591002,1493172224,2031776,402724960,1040974592,192,8396640,205308720,-2129043360,-1736369768,462979353,53542979,268644624,106954758,1664114688,107372748,1611032160,1667496032,214118412,412664112,-966780829,214327308,-972241312,-412056013,250048526,106954758,-1021353984,250048652,1880024944,-479069984,214118412,940360496,3299,-1744764832,375423039,393280,1619007792,0,-1070583808,2013266784,1057784625,-2128668544,1610614524,16777240,1634087040,8601496,535847728,-1069612922,1619198304,912655896,-971045178,-260030714,420217606,419462,-1073740048,3145740,0,40054796,201770592,-1070593018,805503840,811992582,1714423494]},{"sector":13,"data":[-2080172020,806093580,51340998,1610613516,6291462,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-131911584,117428016,83898371,-1744764798,1493221439,50331808,-260038660,504103680,16801984,805503224,208061233,-2129018656,-1736369768,462979353,54460611,-268222480,106954758,1669095424,107372652,1611032160,1667692640,214118412,418431024,-1073729437,213909516,101498880,1717568051,107372550,106954758,-479174656,107372556,1611032160,1667496032,214118412,806142768,3171,-1744764832,870236191,393280,-24700624,16515840,-1070571520,201328224,806125665,-1070583616,12,50331660,1667653632,6500604,403727152,-1070588282,-259849888,856032792,102237894,402666246,420217606,1046150,-1073738656,3145734,50331648,6500604,218023776,-1070593018,-536673440,811992582,1714423494,-268429300,806093580,50751174,-1073674740,3670022,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-1073729440,6340656,83924993,818102146,1610400512,32,96,101450496,24768,-1732165888,2030486322,-1019248543,-54312964,1073529663,53542979,268644624,106954758,1664114688,107372604,1611032160,1668085856,214118412,526434352,-1019275069,-54312964,2147271487]},{"sector":14,"data":[-411107085,-18382850,106954758,1667260416,107372556,1611032160,1667692640,214118412,806142768,3171,-66650112,817086720,393408,1610612784,0,-1070546944,201329760,806150271,-1070583616,24,117179142,1667629056,6500364,402940720,-1070593018,411263328,822486552,102237894,209858822,252445446,-2145805309,-1071638432,3145731,100663296,6500364,201377376,-1070593018,805503840,811992582,1714423494,469899276,420217612,17823366,1610615960,6291462,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-1073729536,6324255,83938304,1611006106,1526775808,32,96,101450496,192,-872415232,37535748,-1020264349,214118412,856474416,1127219203,71512068,106954758,1664114688,107372572,1611032160,1668872288,214118412,408993840,-966783997,214327308,-972241312,106954755,417792,106954758,1667260416,107372556,1611032160,1668085856,214118412,815317296,39009,805503072,808698672,393344,1610612784,100663303,-2145812479,214112352,806126337,-1070571328,1879049840,201326595,1717985280,-2040451066,402965296,-1070593021,209936736,805709336,51907779,214118412,101450502,-1070593021,-1071632288,3178497,100663296,-2031929332,202295153,-1070588921,402850656,811992582,-415756601,201529372,253510412,-2145805309,1614813424]},{"sector":15,"data":[6291462,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-2141112224,107003952,67136512,805503218,1493221376,160,0,109839104,192,-1744764928,56680455,1717570787,107372550,1661363808,1127253521,71512068,106954758,-1020239872,214118412,806142768,-1020200768,214118412,408993840,-966783997,214327308,-972241312,-412056013,250048526,106954758,-479174656,250048524,1880024944,-478611232,482554140,955301937,61664,805503072,522094111,393312,1610612784,100663302,51314691,-121552900,536396039,-2095095680,1610614464,402685953,-278700032,-54493425,1056737151,-478546943,-2029568004,2081419135,20904129,-126715656,116949279,-512161791,-1059029000,3194880,50331648,-58689546,1073275166,-478548799,503776252,2037894975,-2127038239,-125665300,116293895,-1070004223,1623211872,6291462,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-54325408,116391936,33568768,-1744764924,536870912,50331712,252,108397312,262336,805502976,8306688,-984991,268431375,-149946384,-947913488,-54034436,1073529663,-2021655357,-125755444,536379679,-2124416896,-125755400,1022918943,1665087495,-161267722,2079744831,-2128610080,-125755400,1073529663,-2027946813]},{"sector":16,"data":[-125755490,536379679,-2126514048,-287236370,929095710,24704,0,6,196608,96,12,6,0,0,0,-1073741824,0,6291456,0,0,0,0,0,0,96,0,0,-1073741824,3170304,0,0,0,3072,768,0,3145728,12,0,0,1610612928,6291462,0,0,0,0,0,0,0,0,0,0,0,0,0,768,100663296,16789507,248,520093696,128,0,100664064,393408,0,0,0,0,0,12288,0,0,0,0,0,0,0,0,0,0,0,12288,0,0,0,0,0,6291456,0,817889280,49152,0,0,-2147418112,192,0,12,0,0,0,0,0,3145728,0,0,0,0,0,16777216,156,0,0,-134217728,15741184,65295,0,0,6144,768,0,3145728,12,0,16777216,1610612864,6291462]},{"sector":17,"data":[0,0,0,0,0,0,0,0,0,0,768,100663296,57347,0,0,0,0,234881792,196832,0,0,0,0,0,6144,0,0,0,0,0,0,0,0,0,0,0,6144,0,0,0,0,0,0,0,813695232,32769,0,0,0,0,0,0,0,0,0,0,0,-2145452032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61441,15872,0,8126464,62,0,117440512,939524288,12583174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,917504,0,0,0,0,0,28672,0,0,0,0,0,0,0,0,0,0,0,28672]}],[{"sector":1,"data":[2025850624,1866711047,1701409397,114,-1194816518,567099904,-428713383,-489570253,-85798703,-1014249333,-1962742397,1297948645,1157629130,518818645,105286486,1937031179,-401698736,-922011557,1586195829,29619718,-1909563019,637534726,-1014095989,4096294,1967476224,512435790,958791716,1946166814,106335042,637715331,930350905,637826957,-2097000565,958793923,125044823,-502479997,652536821,162947,1392908660,642975314,-1873797889,939124750,132319067,72319014,855960324,1589654482,-1962742397,1297948645,1157628618,518818645,105286486,2054471691,-560076720,393592843,35556910,106859264,1963049974,38270562,-1906543552,1208609567,-1070344050,73358,16001,1064650062,2367115,2498105,1451963764,46367494,729024313,-2097000565,1463355587,-2096663544,-152957757,2139351787,326369290,2131382271,71825177,259387392,-2146941047,-326553,244319862,-1992913176,1183516230,-310157818,535137026,46812509,-1957346048,1996431084,-586422264,1586217102,1200301574,651309826,2367115,-787510490,-489500192,49120250,1562371467,313933,-326412987,-11053538,-622327690,1958743004,-1012950,244320886,188136680,1444705746,-1878624513,-32184306,-11077493,1465321078,1358793704,-401698729,1599610322,49120094,1562371467,445005,1458342741,105287255,607554342,909714944,1400111142,-2093184218,-2094660922,1198784572,38570790,71616294,-1943655432,-964491700]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[7887437,3,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":10,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":11,"data":[279886,131221,190350844,32772,0,0,0,0,4194349,9175104,9765013,1175,589824,0,0,0,-2147024892,1,5046272,5242903,68,-2146959360,3,6553600,-265289598,32776,15073280,-265289551,32777,26673152,-265289480,32778,0,1313818119,1380533332,1279608837,16982,687865856,1414418246,542328146,741552945,925644345,540680242,1986815304,824981536,842083376,1699948576,857940084,41,0,0,0,524291,135856384,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718600,589920,2,-1879048192,1,119603210,536873728,-1778360065,0,529408,0,1699217408,151025260,218169344,671088651,1126181219,1920561263,1952999273,1953055264,1701999731,1226861921,539911022,892877105,1816207406,1769087084,1937008743,1936028192,1702261349,11876,0,1207962112,167796736,512,0,400,553651200,851976,6356768,188,185073664,0,1207959552,7760997,16777226,3963,539583272,2037411651,1751607666,1765941364,1920234356,544039269,778268233,943272224,1092628021,1914727532,1952999273,1701978227,1987208563]},{"sector":12,"data":[3040357,0,786432,6291528,196620,0,102400,983040,268438049,1627332608,57856,1979711488,15,0,1986815304,0,135856384,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718600,589920,2,-1879048192,1,119603210,536873728,-1778360065,0,529408,0,145408,33554432,134218752,335547904,587209728,671098112,822094592,956315392,1040202752,1224753920,1426083584,1627413248,1828742912,2030072576,-2130673920,-1979677952,-1761570816,-1476354816,-1258246656,-989807360,-771699712,-503260672,-385817600,-184488192,117505792,369168129,620830209,838937601,1073822209,1359038977,1560368897,1711366401,1879140865,2046915841,-2046722047,-1845392383,-1694394367,-1493065471,-1425954559,-1291734783,-1023296255,-821966591,-654191359,-519971327,-318642431,-100535039,84017153,218237698,419566338,520231938,620896770,721561602,822226434,922891266,1023556098,1124220930,1224885762,1325550594,1426215426,1526880258,1627545090,1728209922,1828874754,1929539586,2030204418,2114092034,-2046656510,-1845326846,-1711106046,-1543332094,-1342002174,-1174227710,-989676286,-821900798,-654125822,-503128830,-318576638,-217911550,-83691774,134414338,402853891,604184067,805513731,1006843395]},{"sector":13,"data":[1275281923,1526944771,1761829379,1912827907,2047047171,-2046591485,-1778151933,-1509712381,-1241272829,-1056720637,-788281085,-519841533,-301734141,-100404221,100925443,302255108,537139204,738469380,939799044,1074019844,1208239108,1376013316,1577342980,1778672644,1980002308,2130999556,-1962638076,-1761308412,-1576756220,570730244,0,0,0,0,0,0,0,0,0,0,0,1024,0,0,0,0,0,0,0,0,0,0,49159,536870912,0,-1556839296,16842880,-1803283962,272656384,5269536,168034824,4,262144,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,167772160,2,0,0,0,0,0,0,0,0,100663296,0,8400899,538984452,172032000,4195416,623104,-1342160823,-1336926176,67371008,524298,-804257278,-2147483638,1180292,220274701,1111490560,8192,333654037,8408329,-1049556953,484930366,1879048192,-202305028,-1865418765,42115664,-101155710,1372645361,-81637052,119201,541065280,2140192,0,0,-1241093376,-608801317,1843115629,-1318200394,1313989632,49553,-1994388256]},{"sector":14,"data":[-1609811968,274817377,1125123137,-270011520,-2008498209,-117963527,-1611007752,-1600085856,79790242,8675881,688537856,278286885,-2144758206,1142195488,689242130,663397460,-1205338104,-2011159670,41512,285378816,67766794,-1538240496,-2101213565,285869445,1363431696,1075841570,4194304,136331328,32,256,-2013265920,1843082891,-1234314314,-608801317,319402093,587354257,303038720,1879052321,572694532,71368722,-2080292592,537921556,-2054846392,84215045,-1600085755,-106782560,32,0,16777216,0,32769,1024,1145273616,8925058,621316168,-1572306884,174120864,34220345,269485066,-1971148720,92635810,1360003339,303319620,234897424,1741611896,1940891836,-1115996985,1380616866,914393208,-608801317,1843115629,-1318200394,1279951928,33608964,150605032,-1610338286,270804004,-1574401374,134513794,-2008539120,84231557,-1576729339,-1600085856,-1910274668,915333944,965665592,949887522,-1640395037,-1750980470,672137362,654476256,-2008547266,-266155760,204423,692654616,-418708750,-1328488559,-2104339838,-504297991,-2077603312,1074799112,340066560,-1448982447,-1574401496,-1977474678,134959690,1843082848,-1234314314,-608801317,-1002065555,319099460,13163051,303214627,774457860,-1969086439,-461069784,1050660615,635799880,84215045,-1600084987,-2054643552,268714336,340068673,589448529,1360283089,680175173,5412002,1683061776]},{"sector":15,"data":[814230946,790661256,-2113369726,570826508,34241865,1343226890,578988112,629244554,1242575112,1107855914,251674632,1214186565,-1977045342,428515880,-1834382814,914393136,-608801317,1843115629,-1318200394,312443712,1112592388,2097320,83890194,1098060051,-142745609,134513871,-2008539120,84219269,-1476066043,-1600085856,-820774520,1070592828,2111829825,1162945570,-1438297836,-1801312118,687865938,549622866,-2004353016,-1994251966,238088,1161167384,67766794,-1537978352,-2105146750,285873537,286344208,1074299400,340070656,-1448982704,-1574401496,1361184138,-2009052142,1843082880,-1234314314,-608801317,71676269,654462020,1048872,269615104,572910080,1360282917,-2075126715,537921556,226854984,84215045,-1600081915,-2121752416,340087060,71649361,606224656,1360282961,680178245,5006498,1675896848,-2063589342,-1040644089,470249756,559988896,-202291968,-804260621,49947219,-109020030,-2079334135,-100134639,251674628,1087300472,-1968658270,1014643751,1209147806,914393208,-608801317,1843115629,-1318200394,1107619897,49153,16253152,4198429,960971847,340087060,-270011568,-2008498209,-117963527,-1074136840,522133279,-815562488,919597884,965665592,949035810,-1137078557,1201596281,136,1073807424,257,0,4194304,16515072,0,0,0,1024,0,-1065024768,248,536874752,536870912,8,1795174400]},{"sector":16,"data":[0,0,0,2097152,23552,0,1048576,117506240,1,16777216,128,0,0,0,0,0,3145728,0,0,0,3179521,1986815304,0,0,185401600,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718602,655456,2,-1879048192,1,136380428,536874240,-1140825857,0,722944,0,145408,50331648,184550912,452989696,805316352,922759936,1140865792,1342196992,1459639296,1660967680,1929407232,-2097120512,-1828680960,-1560241408,-1375687936,-1191137024,-939474944,-620704000,-318708736,-16714240,268503040,604051969,771827457,1023489537,1375815681,1677810689,1996582401,-2046722303,-1744728319,-1392401151,-1107184127,-972963327,-788411903,-553527295,-285087999,-33425919,151127553,402788610,503454466,671229186,973222658,1241661954,1442992642,1610767618,1845651202,2097313538,-1979546622,-1878881022,-1677552894,-1543331838,-1409112062,-1274892286,-1140672510,-1006452734,-872232958,-738013182,-603793406,-469573630,-335353854,-201134078,-66914302,67305474,201525251,335745027,469964803,587407363,771958275,1040397827,1224951299,1459834883,1694719747,1912826627,2114156035,-1962703613,-1778150909,-1593599485]},{"sector":17,"data":[-1358714877,-1190940157,-1023165181,-771503869,-469509373,-201069821,100924675,402919172,755245316,1057240580,1359235076,1560566276,1661231108,1862559236,-2096858876,-1761309436,-1425759996,-1190875388,-888880636,-586886140,-284891644,-33229308,235210244,503649797,822420997,1074083845,1342523397,1527076869,1627741701,1812292613,2063954693,-1962573051,-1694133499,-1492803835,-1257918971,-1023034363,-771372539,570808581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50331648,248,0,0,1073742336,138732608,1073741824,554764296,137494612,1902133248,134217737,537002241,32,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,536870912,0,0,0,0,0,0,0,0,0,0,0,0,0,33554432,0,0,-2147483392,335558817,536870912,301995024,72089760,-1903132672,67108864,8389122,1073741888,13131808,268435600,-2063591416]}],[{"sector":1,"data":[21103360,4195843,-2145370112,1,104940041,-2143012856,654311424,-2138634367,-946878641,32903,20920320,-252583929,270434302,34146596,-2021179390,2046353889,-2105408259,-117109748,268469475,134250496,1226866688,2,33554432,0,646318592,1717986918,1717986918,1717986918,1717986918,183566344,2017729545,-268435360,-2078703615,285228032,202449536,-2147450559,135274496,-51253233,-2143322114,260173833,1022410755,540871695,337922192,544210949,-1875865280,134217824,1243882512,42026195,-1937471228,1145118720,1118274,-1992080887,1078477840,671088640,1078462535,1212156104,16456,-2126494720,134811908,270614656,51448100,1149788166,-2080108270,-2105408479,151523850,35360,134250496,18874369,2,33554432,0,642322944,1717986918,1717986918,1717986918,1717986918,-234352384,-2080366071,134283408,1076249090,838890496,305226304,-2147483328,135274560,590092,304103552,281086025,1107829124,541232144,304367760,8912905,0,0,0,32768,201326592,4,4096,1239764745,1179141152,1207992512,1094715457,-2013263800,215368,1116619872,67441284,-1874837376,35719460,613437578,-2080110316,1162085409,286269713,37136,-394741640,1227660787,260790546,-409727465,170101316,-968322521,1717986918,1717986918,1717986918,1717986918,-1862209272,838932497,-469630864,-2146942462,302019618]},{"sector":2,"data":[68297792,1082196609,338186400,328212,304103552,547423305,-2130439608,545606688,287590544,-259459055,-252645136,1008660208,1228684348,-2021178079,-1937275001,605194616,1152840,109380616,1124612160,1207992448,-2105343935,-2021618865,1041023112,1116866584,67232391,524320508,37816804,613435474,1610877204,1162085409,564183056,32784,428196996,1228022537,-1874041310,312054168,-1843230140,104895008,1717986918,1717986918,1717986918,1717986918,-1820317687,1107371257,-1803399279,1083346689,310408226,-766368694,1082196625,338186400,-134094313,306151164,546423883,-2130439608,545868832,270813328,162596001,151587081,1109463305,1229079106,1212737059,1279805512,605194636,9541704,-2138897400,1325953176,-1997475609,1140851009,138497096,3162183,1150423046,67179076,-1874640768,44108068,663766050,418908644,673711137,1094762656,32776,159483004,1226973689,-1874312126,-1030713200,1632915780,102769217,1717986918,1717986918,1717986918,1717986918,-253746935,1107366464,-457277326,-2143485440,285226018,768944261,557974578,574916624,66084,304103552,545850441,-2130439608,546393120,270813328,-125303743,-117901064,2116091896,1233026686,1212687396,1279805512,605194644,9048133,1103175432,1124633124,-2013233024,1325400641,138496224,1040990272,1200754712,67441348,-1874837376,34703652,613433858,-2080102140,673711137,-2126503775,32776,159483012,1226973441]},{"sector":3,"data":[-1874312030,579899536,1632915780,104862274,1717986918,1717986918,1717986918,1717986918,193019913,838929656,-1811775486,512,5154,1094977797,-507295916,1048377584,328252,304103552,545588297,-2130439608,547441696,270813328,160036929,151587081,1075843081,1228947520,1212687396,1279805512,605194660,9048133,1107626240,1174963236,134316224,1074267201,138561608,213064,-2004025248,134811940,-1876868992,34179364,1149780226,-2080108286,269485089,21041218,32772,428196996,1226973961,-1874312174,311529880,-1870127028,104862340,1717986918,1717986918,1717986918,1717986918,18697,-2080366015,134299889,0,50336802,-2100816950,304367860,1099039753,590148,304103552,277022793,1107829124,541232144,270813328,159973441,151587081,1109463305,1229079106,1212687396,1279805512,1681037764,8657090,-2080175864,1074297368,117768704,-2134438015,125994823,35207,138416128,-252583897,-1877065474,-100306652,-2071511038,2013456641,269547552,-113178556,32772,-394741638,1226972657,-1891089398,-510652905,143204404,104895111,1717986918,1717986918,1717986918,1717986918,16314632,2013273153,-268435456,8392448,5181,-498528256,304384019,1099039753,-51253177,-1841332226,260173897,1022410755,532417551,-524056817,-189792191,-185273100,1008660212,1228684348,-2025339869,-1937275001,-1546557320,268098,65536,1074266112,512]},{"sector":4,"data":[0,256,4128768,0,0,0,0,0,0,16777216,32768,0,134217984,0,8388624,16777216,4198912,0,0,0,0,32768,1,0,0,262176,0,0,0,2097152,0,0,0,0,0,0,0,262144,0,0,0,128,528388,0,-2147221504,1024,0,0,512,0,0,0,0,0,0,0,16777216,8356035,0,268443136,0,8388624,100663296,8391168,0,0,0,0,0,1,0,0,786464,0,0,0,6291456,0,0,0,0,0,0,0,786432,0,0,0,0,3149848,1986815304,0,259719424,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718604,786528,3,-1879048192,1,169934863,536875008,-503291649,0,1013248,0,145408,67108864,251660288,553654272,973090560,1124089344,1375750144,1610636288]},{"sector":5,"data":[1761633536,2013294336,-1979678464,-1677683968,-1375689472,-1073694976,-855586560,-637480704,-335486208,33616896,385944577,771826433,1090598913,1510034945,1711365633,2030137345,-1828616447,-1442734079,-1040075007,-738079743,-385753343,16905985,352455426,537008642,755115266,1023554818,1342326274,1644320770,1862429442,-2113767166,-1979546110,-1778216446,-1392335870,-1073564158,-821900798,-637348350,-352132350,-16582910,251856642,419632387,688070403,855846403,1023621123,1191395843,1359170563,1526945283,1694720003,1862494723,2030269443,-2096923133,-1929148413,-1761373693,-1593598973,-1425824253,-1258049533,-1090274813,-922500093,-771502589,-553396733,-251402237,-33293821,235144707,537139460,805578756,1074017540,1292126212,1510233348,1728339716,1996779268,-2096858364,-1895528444,-1559980284,-1157320956,-855325948,-519776508,-184227068,235208452,604314117,939863557,1174749701,1308969477,1560629765,1980066053,-1878686971,-1442472699,-1140478203,-771373307,-402268923,-66719227,235275525,537270022,839264518,1225145094,1510363398,1812357894,2030466310,-2130281210,-1912175354,-1610180858,-1308186362,-1006191866,-771307258,-469312762,-167318266,134675974,570888199]},{"sector":6,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1009778691,-262093282,100663296,863526912,4250160,100665078,1612636160,16777414,-2130508160,1676,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16711680,786432,0,0,-2147418112,-2043189664,39009,-1073741056,-1508297780,62652736,-1342108672,13025331,213909504,210551046,-2147418112,4120,7,8454424,0,67526656,0,-2134900724,6144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2147368960,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8126464,-134217728,0,24]},{"sector":7,"data":[0,0,-268435456,0,0,0,0,0,0,0,0,942718976,-2138230469,51118080,456558083,820772936,-871494132,17170528,806929281,1812358656,404490258,7870524,201326592,253693052,-235853952,4095228,50331648,117701824,-1055973384,-1048084482,-2045142911,-1072943008,-2088767295,-821035040,-511635978,1876984199,-521021197,-2147368960,109052160,-1743179776,24,0,32769,0,963719219,-409177138,-1670132167,1942895079,-835065956,954702963,8126488,-1712220063,7299,805307907,3185671,939917438,214327296,-2147368080,17176672,-132161408,-102293698,-1717993474,117670815,-268353856,477921295,-1056160225,-1073335400,1625293784,829320288,135,-972683770,-1312082893,454564024,6786075,1661141763,1719689496,1043753990,409350198,204,1019612160,1723897905,-972285949,99,-2023553536,1611433479,1619014092,-1736363752,945851417,214360092,-1055339424,226910616,-1014570623,406044720,12339,16809985,805309568,1579008,0,-2147418112,0,409141248,1942895001,-835065956,971480179,-409177138,-1670132167,67123431,-1721670714,906074521,33685504,-436189184,15990784,-520066034,-2137450354,1022410755,-255851761,-1732181962,1619001606,1670945049,-1053812605,1630538886,-966779773,865648908,110649606,48]},{"sector":8,"data":[49152,0,7,16777216,1812332672,1614179327,869013606,201326595,-1741615930,255680,862176792,1884161,-2046346397,426557452,422600832,-1743153023,-264487840,-664795444,1637400844,868420742,-2145818932,3151971,-1192165120,-1634788034,-1743177925,-507069991,-1709328143,2027477107,-58292281,965613667,-409177138,-1670132167,1942895079,-835065956,954702963,1052833816,46143539,34360,1208021252,-872379199,1812332788,805724928,-1073544397,51330288,20377792,17225856,-1726390144,818099096,114065433,-1677642912,-1056151871,856044440,-265173473,524188920,534677263,-1014558945,1630745571,524188856,533169935,862375064,-1011348197,1747189766,19185692,204422,214308864,-406781949,-971476765,471907,1707474951,-1072904564,1619007756,-1736376016,912306201,114088044,-1056122784,210108824,1020015555,214106127,50331696,862178329,963103896,-828794471,-870763673,-1730569165,-842630952,409144454,1942894848,-835065956,971480179,-409177138,-1670132167,-1944504089,-1736493472,-1101004064,-654049229,650326016,-1057698816,1721265414,60710918,1721262342,-1738439143,411042150,1619001606,865638681,-2145832861,861931212,1724029953,865648908,1712856582,-963896861,-862441117,-1733217949,859006668,-959696592,-862441117,-862441113,219886438,443340,-2147403668,2139488632,402653315,117836998,-1741462397,6782000,-1044308196,-947073658,420266232,-114262020]},{"sector":9,"data":[-266757889,-859032736,-1736505652,-1055916276,912657542,17176684,3148931,-2045181952,-862428832,-1684459069,862358553,-1738439143,-640902975,416053478,956307555,-409177138,-1670132167,1942895079,-835065956,954702963,922521625,45095180,2120660576,50393596,-872358665,1812381940,-121213236,1627833214,-2045155688,-244869023,-238608512,-1726382084,808661950,114065433,-1677642912,-1056151868,201733016,405825048,16975372,811843712,1724684337,-248433869,828622476,862440600,862375064,1720097049,239599622,-2117322749,-534831482,214309112,1623588876,-969926605,7340091,-846827264,-1072929128,1619007756,-1736369872,828430361,114083468,-1056171936,210133376,1014505062,201523974,16777264,1633715961,834915487,-1944478055,-2045168794,-1737385887,820825548,415445196,1942894848,-835065956,971480179,-409177138,-1670132167,-1877395225,-2122367392,-1640496488,-654047540,12582912,7654400,510015494,-971076415,-1022610676,204721200,411042246,1619001606,865638681,-2145832933,861931212,1724423169,865648908,1712851974,2130507825,-946921665,-1623248641,871622607,-963897037,-862441117,-862440089,-1726401690,16803462,1812335614,864453069,805306371,404229318,406058703,247392,-1061085412,-434123514,426557452,422600832,-1944479103,-1022611360,408946380,1637400940,507251846,101082744,3147267,-2045181184,211312992,-1684459069,862358553,-1738439143,-1882744807,1618507836,956304483]},{"sector":10,"data":[-409177138,-1670132167,1942895079,-835065956,954702963,1667276825,30933004,107347969,514,-872415040,20,415446732,-217068490,-817889284,33488115,17225856,-1726390144,806302616,114065433,-1677642912,-1056151856,201733016,422823455,828622476,811650200,101455920,422785795,828622476,963103896,862375064,1015476504,1809317894,29846540,100860038,214315011,1723865136,-966780877,471907,1988493575,1611413040,1619014092,-1686030056,811632153,214352140,-1053291424,411263384,-1020261316,100862982,50331696,862178361,828886168,-1936090727,-870763674,-1713792973,-870840637,409190448,1942894848,-835065956,971480179,-409177138,-1670132167,-1407633177,403439808,1048772976,100859955,0,1362944,1738046720,-865652538,-2130239784,119437536,-1732181882,1619001606,1670945049,-1053812729,1630538886,-1017111421,1628201752,102239372,-828622541,-862375065,-1733217949,859006668,-963897037,-862441117,-862375577,1631089638,399564,941112976,8814973,805504515,-1891693444,-253664384,859733088,18661377,925892739,-1055973384,-653827842,-2081318527,-1072910209,56684737,-1043349256,202961025,260473137,3147507,-1193737984,-1936777922,-1734790853,828804313,-1742882575,113495664,-63928807,956307555,-409177138,-1670132167,1942895079,-835065956,954702963,16709912,3151884,124,50395136,-167771920,20,2093793280,513329088,2027979015,-125368546]},{"sector":11,"data":[-102293698,-1717993474,117670815,-268353856,477921295,1055916383,217628679,-656341480,490436332,532596622,-1014558945,-248433693,524188812,1070040847,-1318861042,414736856,134217728,0,33554636,0,0,0,256,-2046623744,0,0,0,0,0,786432,0,0,196608,48,0,196608,32769,-2147418112,32769,0,409141344,0,0,0,0,0,1073741824,419430400,152,0,0,50380800,0,0,0,0,1572864,0,0,0,0,0,0,0,0,0,3072,0,0,0,0,-1056964608,12416,0,13369344,1024,0,0,33554432,0,64512,0,0,0,0,0,0,0,0,120586243,248,0,-2147417917,0,-2147385343,0,6291456,6243,0,0,0,0,0,0,15734784,0,0,-1073741824,8388864,0,0,0,0,12,0,0,0,0,0,0,0,0,100663296]},{"sector":12,"data":[813744384,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,-1073545216,240,0,8257536,3,-2147418112,32769,0,808648896,0,0,0,0,0,0,402653184,0,0,0,117440512,0,0,0,0,3670016,0,0,0,0,0,0,0,0,0,7168,0,0,0,0,-2130640896,1699242112,30316,0,83938304,1611006106,1526775808,32,96,101450496,192,-872415232,37535748,-1020264349,214118412,856474416,1127219203,71512068,106954758,1664114688,107372572,1611032160,1668872288,214118412,408993840,-966783997,214327308,-972241312,106954755,417792,106954758,1667260416,107372556,1611032160,1668085856,214118412,815317296,39009,805503072,808698672,393344,1610612784,100663303,-2145812479,214112352,806126337,-1070571328,1879049840,201326595,1717985280,-2040451066,402965296,-1070593021,209936736,805709336,51907779,214118412,101450502,-1070593021,-1071632288,3178497,100663296,-2031929332,202295153,-1070588921,402850656,811992582,-415756601,201529372,253510412,-2145805309,1614813424]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[8084045,3,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":17,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]}]],[[{"sector":1,"data":[279886,131221,190350958,32772,0,0,0,0,4194352,9175104,9765013,1175,589824,0,0,0,-2147024892,1,5046272,5242904,68,-2146959360,3,6619136,-265289593,32813,15466496,-265289546,32814,27394048,-265289472,32815,0,1313818119,1380533332,1397576709,16978,738197504,1414418246,542328146,741552945,925644345,540680242,544435540,544107858,808528952,540160300,1952797480,691217184,0,0,0,2949123,141295872,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718600,589920,2,-1879048192,1,135331850,536873728,-1644142337,0,549888,0,1834221568,1834098803,3014766,190316800,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718602,655456,2,-1879048192,1,168886284,536874496,-1040162561,0,741376,0,1834221568,1834098803,3080302,267780352,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352]},{"sector":2,"data":[1702061426,1684371058,46,0,4718604,786528,3,-1879048192,1,185663503,536875008,-369065985,0,1043968,0,1834221568,1834098803,110,0,0,141295872,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718600,589920,2,-1879048192,1,135331850,536873728,-1644142337,0,549888,0,145408,33554432,167773440,385880576,704651520,822095104,973092096,1140867328,1224754944,1358973952,1526748672,1694523392,1862298112,2030072832,-2130674176,-1962900480,-1728015872,-1493131776,-1258246656,-973030144,-721367552,-436151040,-268375296,-16713728,268503040,503388161,771827201,989934593,1258374145,1543590913,1778475777,1879141633,2046915329,-2080276735,-1895724799,-1711172607,-1576952063,-1375623167,-1274957567,-1123960319,-872299007,-670969343,-503194111,-368974079,-184422399,16907265,184681986,352456706,570563074,704783874,839003650,973223426,1107443202,1241662978,1375882754,1510102530,1644322306,1778542082,1912761858,2046981634,-2113765886,-1979546110,-1845326334,-1711106558,-1576886782,-1476221438,-1342002430,-1157450494,-956120574,-788345854,-570238462,-368909566,-167580414,-16581886,167970306,318967299,503519491,637739267,771959299,1023619843]},{"sector":3,"data":[1359169283,1560499715,1795384323,2030268931,-1962704893,-1694264573,-1425825021,-1207717117,-1039942397,-805058813,-536619005,-268179453,260099,218366980,520361476,822355972,1040463876,1225016324,1392791044,1560565764,1778672132,1946447620,2114222340,-2046524668,-1945859836,-1794863356,-1593533692,-1392204028,-1190874364,-1006322428,-804992508,-603662844,-419110652,-1039864828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-536674304,0,0,-2147483648,143296067,131072,294126721,271712276,607262728,276824064,270864,16777216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8388608,0,0,0,0,0,0,0,0,0,0,0,0,64,0,1233403904,5120,-2147352319,8397316,605030476,76,2629696,268697608,8389261,-1609557951,1661486083,67371040,288,-1039629038,-2145119972,-1945037312,820418839,402653184,-203349520,-201721375,1903413177,-130234493,-823660303,1853258988,12754159,-2147393472,808239424]},{"sector":4,"data":[0,203555328,-1717986919,-1717986919,-1717986919,-1717986919,1566851224,269411784,148897792,478162947,639111171,1074823689,134480513,-808466625,1909379023,1019738140,1010580540,-591795357,-1065912338,1364599234,622985216,-2103092695,818517008,575735810,-2062376848,304227357,419430419,557077042,18473,1359488256,-2012212974,-2112876150,1657151522,-1995946686,1229210661,-1807203294,536870981,1082163200,4100,-2147483648,67108864,-1726409951,-1717986919,-1717986919,-1717986919,77109657,9013395,16779281,-2013260784,671168512,1141916168,-2059230976,1209275402,1145324612,1141383492,1111638626,828654146,574916624,2126114,0,0,64,12288,2097152,681647888,68354594,1108355328,1229529172,102285344,17977716,25329672,539263504,1161974470,67209480,1109543236,-2142760319,-1939654650,-714837042,841794482,-1651706164,2213061,-1717987047,-1717986919,-1717986919,-1717986919,1166298264,-1742290936,149422592,939530273,-1844959231,-1592735448,336233794,67373076,553911300,1112687112,1111638594,-2012196508,1226056260,1670132006,409144347,-2044367653,830890264,1759229661,168825017,-1038297576,687899668,949191696,251869254,-1986786682,-267910686,-2098185758,1252663352,-267880126,-1975384895,310543009,604045376,1234342548,608768549,-1840232046,1212454228,-1726382048,-1717986919,-1717986919,-1717986919,1385732505,549543780,-2108708568,150601928]},{"sector":5,"data":[687937801,1363415625,1210323489,-2010701167,-2021161209,-502783612,1111638602,-1855700414,574916624,138496276,-1836838846,606709140,-1843115678,-1838927287,279259209,688144144,521175586,34679054,143238384,-1845428212,18020756,293765128,539263504,1094863530,69308424,1101171266,4198916,-1635507193,304564626,1234314313,1381339676,2196520,-1717987047,-1717986919,-1717986919,-1717986919,-2109517672,-1708777463,11057792,134852643,1386909699,-213801591,1050660839,67373116,553911300,1112162824,1111638594,-2012212891,1896358468,1942894887,-1107849057,1234314473,843682340,625578660,335585316,35735844,1224737808,-1542172142,251857033,90768006,-2012212974,-2112876158,1183982114,-1995947710,71369761,-1861729982,604569664,1234079876,608801316,-1845216868,68232482,-1726414815,-1717986919,-1717986919,-1717986919,1385732505,-1073200564,20971793,16,16779273,1192259908,806882378,1212465504,1145324612,1141383492,1111638598,291914306,574916624,1244217608,279221330,604578180,-1843115630,-1843121335,1077420617,-2045242352,68190750,-868497888,830871571,286834720,-471757567,-473826847,2138299577,-532880749,-2084319759,1665533057,4231567,-865921017,-609849918,152089453,757222808,2213009,-1717987047,-1717986919,-1717986919,-1717986919,128994456,940449800,14680064,-2012348168,302528528,506691868,-470714308,-812660793,1942933455,1021507740,1010580540,1893785707,-518251464]},{"sector":6,"data":[1942894919,409144475,1717810893,897999128,-768324157,16416,16777232,1075839008,0,2097152,15728640,0,0,0,3670016,0,419430400,16064,786432,64,6168,35651584,34,0,0,0,134217728,-1073676288,0,0,3145736,0,0,50331648,0,0,0,0,0,0,469762048,0,0,0,-2144336896,544435540,7236946,0,190316800,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718602,655456,2,-1879048192,1,168886284,536874496,-1040162561,0,741376,0,145408,50331648,184550912,469767424,855648256,973092352,1157643776,1358974464,1476416768,1660967936,1895852544,2130737152,-1929345536,-1694460928,-1526685184,-1342134272,-1056917248,-721369088,-419373568,-67047168,234947840,604051713,788605185,1090598913,1476480513,1812030209,-2130610431,-1862170623,-1526621183,-1140739583,-821967615,-687746303,-503194879,-301864959,-66980607,167904001,352456962,587340802,721561346,906113538,1208107266,1442991874,1644322050,1778542338,1996648706,-2046656510,-1845326846,-1643996926,-1392335614,-1258114814,-1123895038,-989675262]},{"sector":7,"data":[-855455486,-721235710,-587015934,-452796158,-318576382,-184356606,-50136830,84082946,218302723,352522499,486742275,620962051,755181827,872624387,1040398083,1292059907,1526945283,1745052163,2013491971,-2029814269,-1778152701,-1610376189,-1392269053,-1224494845,-972833021,-821835517,-670838013,-368845309,33814019,302254340,604248836,906243332,1292123908,1610897156,1912891652,-2147190012,-1979415292,-1710977276,-1358650364,-989545980,-620441596,-368779516,324868,369429253,654647045,889531909,1124416517,1359301125,1661294597,1896180229,2131064837,-1979349499,-1845129723,-1660578299,-1425693691,-1190809083,-955924475,-771372283,-536487675,-301603067,-83495931,570818821,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-268238848,0,0,0,50399232,1879089281,536870912,-2013002236,100668433,50626624,1140864,268435968,270533124,0,524288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,536870912]},{"sector":8,"data":[0,0,0,0,0,0,0,0,0,0,0,0,8,0,67108864,-1052638206,34832,151523328,-2145254400,1082132736,-1337981944,16777216,663552,8192,-2147073664,134217748,67178500,27394432,6660,1049608,64,-2095038199,-1861739516,318767184,68947586,-2015136776,0,1098915612,-2025898504,947583219,1894653159,529406256,-51330801,-298287330,-287557313,-1026491333,397312,202932225,1595396,0,0,268566528,36993,0,0,0,262144,119281634,925458,81789696,1074688,9306236,-2129590143,16777220,1883242496,-17502177,-828424321,419306608,4124897,2031616,-1905025986,-1908683151,-2109706016,526987,671613952,-1571518128,738853569,134479912,160190504,1091108864,579388449,1088423945,289805312,-2105537502,8407076,539099136,1132740672,135348752,138547334,806887492,579084484,1226981896,269632528,135414920,17808,-2147483646,134218784,8,-2147483648,0,1665273860,858993459,858993459,858993459,858993459,-502202112,545294344,67108994,285215248,31981568,411173258,67125792,-2147483390,285876288,270615052,-2010954616,138546241,-121632959,138513440,-2078276575,-2009070575,0,0,0,16384,-1073741824,0,4]},{"sector":9,"data":[-1527642360,134292112,603996320,335806794,1212416129,805308032,-1608497374,571507076,268575041,541591618,1084502040,1107567684,1108346912,-2105268190,1216876576,-1008598912,-177107321,1720437132,-156223124,-1150815283,277100495,858981184,858993459,858993459,858993459,151270195,-2045763327,5131776,80218368,8968,9044200,-1002436476,33884676,1352679553,1208238610,67703332,-1975515103,-2004876220,1279263777,69306498,-2012183520,-1008629636,991694471,941362823,647534961,470714307,1718863672,-1724539955,34078848,337675074,1074792929,21111808,-521067508,412256323,1225002111,-2131189728,-507436272,146939648,1343496304,608452772,135283204,690045456,541065475,16520,-1857543149,1245980194,1144166665,-1857023031,340398403,54530180,858993459,858993459,858993459,858993459,545353732,1342212512,167520586,1098842184,6850560,143216778,168053168,1082196485,-1038921568,507279360,136381455,71600880,34771072,-2004071360,-2078276575,-1874702320,-2126503920,-1857551358,-2004335582,1210377096,-918281583,-1975246191,8409110,-1069481464,138487884,611907587,1140982338,1199837193,50356352,270616840,571506820,268902721,541591618,1083461652,2080687175,1091569676,214337,1082671232,619839488,606248712,285822532,310985762,-1843097336,268968241,858981152,858993459,858993459,858993459,-1727777997,150528993,1347309696,8972549,-2013235704,701366569]},{"sector":10,"data":[-1861673519,-2079846136,-2012208830,1207976482,67703332,-1992292319,-1870658492,1279263250,69306512,537953312,-470710206,1058967495,2084446152,311003384,579946532,579979844,1227131204,252182528,1150460128,1073744001,71451648,269057538,411058308,1191709823,-2138771423,16851472,138547202,-1877860284,71581844,134366212,1161904400,-2139062268,16793732,-1878514670,1229243425,1143083273,-1862004087,573680164,54530052,858993459,858993459,858993459,858993459,276996100,1317012544,151277632,72,2656256,35989504,521217296,-507279601,37681392,270548992,136381448,71600448,34771072,-2002760640,-2078276575,-1988354032,-1857543150,268977186,-2004860896,1210323593,-901504367,-1992023407,18724,-1585314816,134300434,1140867072,69339458,1090785673,805307904,146939904,1108361604,276955153,557992002,546082834,1107821188,1074792482,1074299520,1082393729,605159680,69374280,294209604,310985762,1142461188,277136456,858981184,858993459,858993459,858993459,-939248845,-2092957560,680402944,1049600,-2013265793,1343094824,1193280583,1217404945,67703332,1107562818,1149767713,138479649,138479810,-1944058847,69273665,537953312,605194560,1143116104,1143116104,311003272,579946532,647220292,1187289164,67633152,1007469185,1090521281,-1617984766,-512752612,1216003,470286336,1056447751,-2131523777,1894201468,960069607,17702852,473752560,-2105507825]},{"sector":11,"data":[-54271716,16514,-1903705103,1282336305,951303133,-854002704,-2016656232,54530180,858993459,858993459,858993459,858993459,7368964,528517344,50331648,224,2684416,142671872,1896775992,1065286904,-253260257,1065352952,-1670132065,-264168194,-121632962,129895455,52426944,-1327468320,-1882725391,243743518,-579782628,-2026642468,-684188658,1815517965,33927,-2147483648,-1879048192,-2147483392,0,0,2,0,0,0,0,0,6291456,0,0,-1061027840,0,268566528,16385,276824064,0,268730368,64,0,0,0,-2147483648,-2030043136,0,0,-2147483648,2048,0,0,0,2097152,0,0,0,0,0,0,0,0,2,0,0,0,75759616,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,4128768,0,-2147360767,16777216,14528,196608,8392706,0,0,0,0,0,0,0,0,939556864,0,0,0,0,224,0,0,0,0,0,0,0,917504]},{"sector":12,"data":[0,0,50331648,6158,544435540,7236946,0,0,267780352,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718604,786528,3,-1879048192,1,185663503,536875008,-369065985,0,1043968,0,145408,67108864,251660288,570432000,1056977408,1224753920,1442860800,1644191232,1795188480,1996517120,-2030010624,-1761571072,-1493131520,-1224691968,-1023361280,-805255424,-520038400,-117380864,268502272,671161089,1023488769,1459702273,1677810945,2046914561,-1778284287,-1375624447,-956187903,-637415423,-217979135,235012865,620894722,771893762,1006777090,1275216898,1560433666,1828873218,2030204162,-1979547390,-1845326334,-1643996670,-1291671038,-989676542,-738013694,-553460990,-268244990,50527234,318966531,587406083,872622851,1040398595,1208173315,1375948035,1543722755,1711497475,1879272195,2047046915,-2080145661,-1912370941,-1744596221,-1576821501,-1409046781,-1241272061,-1073497341,-905722621,-737947901,-586950397,-385621757,-83627773,251922179,520361732,839134212,1107573252,1409566468,1627675652,1845782788,2063889156,-1929083644,-1727753980,-1559978492,-1174099196,-670775036,-335224828,67434500,470093829,939862021,1308967685,1678072069,1963290373,-2130347259,-1811577083,-1375362811,-939148539]},{"sector":13,"data":[-502934267,-200939771,235274501,671488774,1040593926,1325811462,1594251014,1862690566,-2096728314,-1845065210,-1576625658,-1375294970,-1207520762,-955859450,-653864954,-351870458,-49875962,185008646,487003143,788997639,1074214663,570902535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120586246,-2146571264,112,118259713,-809461631,-335544218,786435,-960491808,1610612736,18776065,920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61455,0,0,0,196608,-1199501984,14188557,-1073741824,-1732178920,15112545,-2147371007,464519448,50816]},{"sector":14,"data":[208896,110625075,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,-872415232,0,0,-2147418112,0,0,0,0,0,112,0,0,0,0,0,0,0,0,2014863360,7130230,117638656,-857821159,51934720,811828999,-1073741056,1608929,1812332646,109514523,281182211,33554464,2021142576,-63423480,30840,52297728,-125631496,2146455311,511570127,-1628966596,939990648,-535871944,987762494,-249782657,536836318,-1577852957,-2147417919,1879048206,426803201,14520,0,0,0,101090049,32,0,0,0,0,251659008,3985200,119524472,520093696,855639552,-268369789,213922048,1879840774,464920,1879050096,527433735,-112259074,-51953665,-12791821,-1073281273,267387198,520125568,960268071,-133247007,821592311,-857945040,50331704,-1718022906,-591344461,-854850036,16789699,-1934524031,6733873]},{"sector":15,"data":[438004742,1611435148,11016390,1883767296,1075350668,-859009952,0,117837363,-969898367,289812492,1612188803,238028995,-1055908850,-2034165626,-1941125608,814505992,-1866462898,-2134761421,393216,208896,404226096,0,201326592,0,50528256,958859523,-409177138,-1670132167,1942895079,-835065956,65510515,101652736,13381656,8437856,163602432,12605440,1895866371,940317760,405805080,267386895,1044480,813829616,415303878,-2040462301,-2101125096,-2034159592,-2090782708,46358556,-2034233320,19099652,140,0,0,0,104,50331648,128,-1073741824,1812332544,-1743250917,147087372,100663544,135016652,-2000621512,13421772,405995520,-2034170622,805717600,201397062,281239576,504237872,432439313,-1038563712,1611172940,273100940,811798753,50348228,-1329471290,1001885671,1001642905,-606040445,-137437261,-276923153,134415299,1942895047,-835065956,971480179,-409177138,-1670132167,402784487,806913561,1196294240,1577058432,420219200,-1610416000,205533440,808458264,-2146893728,-1736439400,160989193,138829954,69408961,1612220001,422625891,1611058304,-1046740685,270008931,939820736,2022498627,2021161080,126057336,990316295,-592351076,50794012,1552401281,-1657047058,16243950,-1702925306,-1073336295,1617956044,818676736,408424460,-859039496,1879051980,216600579,106989249,1124479238,1612188672]},{"sector":16,"data":[187703491,-2146363626,-964683322,202174488,939929864,7512195,549982403,828835328,322138466,429627705,-943416099,1289107761,644244166,63129804,956760067,-409177138,-1670132167,1942895079,-835065956,65510515,-2095497697,16265264,-1064557415,102798080,12595212,822125315,406031449,416028774,429424921,-2129028991,1619532184,415506438,-2040459133,-496869352,-864020176,20144134,40092316,-2034233320,428022788,-858993524,-858993460,-1987475003,814520713,321316376,1673692169,862358665,-423326695,393314,1728974646,202152967,67133656,940060876,281808024,939576440,822484094,-119469925,1057359456,-1895316729,-524066568,328600368,-507019119,1022412672,822610956,-1065265146,277020988,192,856044390,-1724828877,-1734796898,422799052,1724255367,-1043569050,197507,1942894855,-835065956,971480179,-409177138,-1670132167,405930983,821825295,664273100,-1635737703,1614741536,-1547629376,-859033344,432740451,-1055903604,213979148,520929552,-536387336,-259842052,-132610463,422605410,1611058304,-996409037,270008931,251954880,211294467,202116108,432802828,-1717986919,-956813172,-862441117,-862375066,-1944505498,6735564,87425030,-930493312,-125236212,818678812,217844752,2093756620,117497856,521216780,106989281,1124479238,1612188675,154153155,-2133782106,-964689466,202116656,1292048904,51961858,12589059,870711552,854799110,429627697,1724684441]},{"sector":17,"data":[-1937565389,1131361478,51282822,956809217,-409177138,-1670132167,1942895079,-835065956,65510515,-1070592972,13369536,20127897,2134940,209746700,2013307072,1036746246,1613525891,1073529663,-1019216701,1619538428,415506438,-2040459133,979525656,-864020176,20144134,40093852,-2034233320,419628548,1010580620,1060912188,-1616961588,831297951,828622476,862375064,862375066,-966226919,52,-1736374785,202174616,134242304,203698380,550243352,939527372,587209854,-2039410637,805701216,201524038,415457304,283543856,29786353,-2045196672,503843852,1879363331,135464472,100663488,856044390,-1724834813,-1734796901,422799052,1019661441,-2033727941,197379,1942894855,-835065956,971480179,-409177138,-1670132167,204735463,12582912,1196294268,1367376281,786496,-1598026752,-1043595008,101090191,-501193154,249700366,554623520,134635650,69408961,1612220001,422583906,1611058304,-795082445,270008931,100959936,-863182589,-858993460,403492044,421009432,-963890804,-862441117,-862178458,-1944505498,3982968,359399430,1880627587,1627393036,810076288,-937899964,416047308,1879051980,820916492,1177585201,21377036,1712852099,-2010116925,-1049620282,-2034171770,101500440,-2046751728,202913800,12584979,593888768,806581030,-1717987023,1204197529,-863749853,-2043602738,54725827,956760067,-409177138,-1670132167,1942895079,-835065956,65510515,8404793,1585344]}],[{"sector":1,"data":[-1072906144,12607488,201326592,41168,100893465,1712065548,1611032160,1717569126,813850886,415303750,-2040462301,247619608,-2034159592,-2090782708,-2067701732,56696844,16975368,-858993492,-858993460,-1734830004,831297944,422758028,591627788,1944489100,-466576327,393240,235282284,202152975,-662699776,1895594032,1618505752,13398136,269221888,-126126080,2146471695,511443151,-1618480324,953130111,998960,-1198780610,216007454,2082244097,217259836,50331840,-1312570957,-583295005,-572662371,-641628445,410486471,258182193,197571,1942894855,-835065956,971480179,-409177138,-1670132167,924713959,819986688,2031820,520093696,4128768,-1603268864,100663296,403639299,-1033204,268431375,-217055248,-108064770,-51953665,-12791821,-1073281529,267387198,-1625523072,-1073219584,267387198,1989705991,1987475062,260536182,487526159,-268945202,50794012,127386497,-287524493,1628208,74186752,0,2052,4224,0,0,4,1580032,0,0,0,0,0,917504,0,0,0,12583939,0,1627389952,8388992,100663296,6144,0,50528258,3,0,0,0,0,0,16,7876608,0,0,201326592,786432,0,0,0,0,100663296]},{"sector":2,"data":[0,0,0,0,0,0,0,0,2,0,0,0,0,-1071644672,48,0,403046400,268435712,0,0,524288,117440512,224,0,0,0,0,0,32771,0,0,67305472,192,0,25190656,128,402654720,0,1179648,197379,0,0,0,0,0,0,805306368,0,0,0,3072,6,0,0,0,0,768,0,0,0,0,0,0,0,0,0,196608,0,0,0,0,16777216,11583520,0,0,4098,0,0,0,0,0,0,0,0,0,0,0,0,0,0,264274179,240,1040187392,768,251658240,15360,0,-2097086436,6,0,0,0,0,0,0,0,0,0,0,1835008,0,0,0,0,234881024,0,0,0,0,0,0,0,0,0,0,14]},{"sector":3,"data":[0,0,-524222208,1834221792,1834098803,110,0,0,-125825032,267943951,-2146436992,-125825032,267943951,63616,-2141112224,107003952,67136512,805503218,1493221376,160,0,109839104,192,-1744764928,56680455,1717570787,107372550,1661363808,1127253521,71512068,106954758,-1020239872,214118412,806142768,-1020200768,214118412,408993840,-966783997,214327308,-972241312,-412056013,250048526,106954758,-479174656,250048524,1880024944,-478611232,482554140,955301937,61664,805503072,522094111,393312,1610612784,100663302,51314691,-121552900,536396039,-2095095680,1610614464,402685953,-278700032,-54493425,1056737151,-478546943,-2029568004,2081419135,20904129,-126715656,116949279,-512161791,-1059029000,3194880,50331648,-58689546,1073275166,-478548799,503776252,2037894975,-2127038239,-125665300,116293895,-1070004223,1623211872,6291462,-2146437120,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,-2146436992,-125825032,267943951,63616,-54325408,116391936,33568768,-1744764924,536870912,50331712,252,108397312,262336,805502976,8306688,-984991,268431375,-149946384,-947913488,-54034436,1073529663,-2021655357,-125755444,536379679,-2124416896,-125755400,1022918943,1665087495,-161267722,2079744831,-2128610080,-125755400,1073529663,-2027946813]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[8084045,3,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":7,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":8,"data":[279886,131221,190350716,32772,0,0,0,0,4194352,9175104,9765013,1175,589824,0,0,0,-2147024892,1,5046272,5242904,68,-2146959360,3,6619136,-265289636,32772,12648448,-265289594,32773,21430272,-265289510,32774,0,1313818119,1380533332,1431257861,16722,738197504,1414418246,542328146,741355570,875312697,540680248,1920298819,544367977,808528952,540160300,1952797480,691151648,0,0,0,262147,96338176,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145736,327776,0,-1879048192,524289,137363462,536872960,-536846081,0,374272,0,1866661888,1701409397,327794,140378368,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145738,458848,1,-1879048192,589825,154140680,536873216,-67084033,0,546304,0,1866661888,1701409397,393330,228458752,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352]},{"sector":9,"data":[1702061426,1684371058,46,0,3145740,589920,2,-1879048192,786433,204472330,536873984,1342202111,1,890368,0,1866661888,1701409397,114,0,0,96338176,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145736,327776,0,-1879048192,524289,137363462,536872960,-536846081,0,374272,0,30208,402653184,1712862774,403445816,0,943588096,2114879038,1044283196,458752,471743600,2138980222,2120433535,1098412831,1048460899,1669217918,1667457891,1012932223,786456,393328,408944654,7893004,0,1572864,0,806880768,59,0,0,0,0,0,0,0,201326592,1667436044,1043734040,28,406650686,801852,939524159,1616904254,103812336,473316124,238567231,242234908,981362236,974915440,943652918,238427150,56630384,473316124,56623104,106968604,991639064,991691616,1610612790,53877763,402667120,205422390,202905696,6172,409142784,1612579683,1667434080,1042028568,910231068,808674099,409165872,1664103942,1664312179,1666867251,909534051,204478470,1008205884,1044266814,2020491032,1981298236,1065238126,1669209719,1667457891]},{"sector":10,"data":[404229247,471604334,471604252,471604252,471604252,471604252,471604252,471604252,471604252,7196,910039103,1291859992,102,2120613977,1712852486,402653306,1616904291,471597168,907832931,2139054876,2122219391,1664319102,1044266558,1667701822,1667457891,202913342,905997923,202915638,404226147,1712062566,1717767192,406789120,201326604,402653246,408958464,202899515,2130738815,409144320,2117475852,1061031038,7340032,1667046407,1009999934,411004732,1999649798,1665033067,1662533182,471624502,202905628,1711276134,2003198003,410215998,1796750348,1714643827,1662529595,907832118,202905606,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,201333788,2137209952,1358982144,2134782779,406585429,1711277592,402659386,1852204606,909515830,473306140,808476727,404238384,1937446936,1667457891,1667964003,912483171,471610931,471604252,909533195,2021144118,1849587832,1044266558,1667701822,1667457891,25395,805732096,202899558,6198,409147392,58655536,56825955,1042022400,2136932380,808674099,409166640,1798321766,1664115559,1662518070,137772572,202119216,1711276032,1617322035,409157144,1796748812,1714643811,1729627696,473316892,404229168,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,201333788,138285119,1358968344,419328,89,1711291454,1006632970]},{"sector":11,"data":[1668166400,2139042030,1048526398,1044276092,404241982,1798510616,1667457891,1668488291,140731235,1717973822,1717986918,1616928872,404250720,1936070680,1667457891,1668488291,912483171,402667059,1719416320,202899515,1572864,2118004760,2114354815,507392062,464920,1665144944,2138979966,2120433528,1669296956,1048067683,1044135547,476255240,201726079,989855744,1044332414,2120418878,1803449100,1044266595,990854268,409146376,404229247,471604224,471604252,471604252,471604252,471604252,471604252,471604252,471604252,201333788,476265996,1291852824,13183,2113929301,2063597568,786442,102721151,1667440159,1667457891,2139045479,2122219391,1736343166,1044266558,1048452158,473841214,993752688,993737531,1010712374,2122202172,1664908926,1044266558,1065229374,473907007,7230,1572864,403439616,1048576,24576,0,0,4096,1835008,0,0,0,452984832,0,0,1006837248,65280,0,7168,56,124780544,0,1879048192,806880768,0,0,0,0,0,0,0,0,0,0,1040218112,0,62,1610612736,3932187,252051456,6,0,7168,0,0,0,0,0,0,0,7168]},{"sector":12,"data":[1879048192,1866690672,1701409397,114,140378368,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145738,458848,1,-1879048192,589825,154140680,536873216,-67084033,0,546304,0,30208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1572912,0,0,12582918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,855638016,0,-16711680,0,24576,0,0,19922944,808649603,805306608,1661371137,1714427904,13372416,-858996640,1572864,405832641,19922944,808649603,805306608,1661371137,1714427904,13372416,-858996640,1572864,405832641,100689408,-1017068020,102264856,12585996,100663296,-2096685538,2029547968,990846,0,102644736,-203962593,1635647229,2012119967,2126908867,-945873025,-2045903897,-542088765,-268384541,786552,1879048220,1879063552,51249152,192,0,32769,0,-1061036032]},{"sector":13,"data":[0,0,0,0,100663296,836993281,4141208,36639,16515072,118423582,-33505152,118358016,16974720,101456064,29412364,209665688,12585990,13394112,16987007,3158915,59129600,1627414534,101465280,29412364,201326744,12585990,13394112,16986907,3158915,59113728,1627414534,100663488,-202256628,202948656,8390406,201326592,-972290509,-1065291424,-2145832186,3145728,-2040437056,422800396,1640219268,-1010433914,-1008296701,1825353777,-2045916364,-1877396541,805307331,520093900,-1309423857,914055416,818286366,2128140738,-941941137,-2034631705,-542084157,1623228641,253639926,-524188921,507279600,-1048377585,1014558944,-2096689378,2029052097,118431292,-253705853,15480,-519978233,6500504,8405280,131328,-2130639309,-201260864,201719808,197568,101449952,-1065352957,2143516912,-202383425,2130508017,-942688207,-50794013,-659528900,203097696,524183292,-524056817,1065348337,-473460961,2029052097,-946915572,-50794013,-1657061572,208922574,100713468,6489600,402679392,-2132730109,402653184,-2147416525,-118443583,-2095505908,-121536511,-1889072080,419679247,2143353072,-2084110202,-1011417853,1741467697,-871578752,17768155,813695363,16777216,1932946572,1002895372,-523894778,-1007878973,1821159729,-2036760319,-802147365,1640005825,253639868,-524188921,507279600,-1048377585,1014558944,-2096689378,2029052097]},{"sector":14,"data":[118431292,-253705853,100678776,818087692,14168304,1619417383,7995648,8789790,-191299136,201719808,222150,253630560,-524188921,817946352,270945432,405823680,1826143357,-2045961418,-659527876,-1743178132,17002182,811647104,1640182296,812439728,405823680,1826109494,-2045961418,-1936103620,204694470,100713414,-530512384,402717888,-528021757,805369857,394803,-870829981,-2146487528,768,-1720903668,419654796,1641005184,-1010427770,-1013027581,-2133905345,-871578656,101069787,817889283,520093696,856059020,868638972,-2134441978,-1010012989,126660913,-862420511,-2095505701,952107015,253639680,-524188921,507279600,-1048377585,1014558944,-2096689378,2029052097,118431292,-253705853,100678776,-520027380,6684920,-1010020820,7535089,-2029058560,-191364736,118423576,2033398659,422785228,828622476,1052809369,-1064890593,405823680,1826141745,-2045961418,-659523268,-266848660,524248006,-236730481,2143354616,-252715073,405823680,1826107423,-2045961418,-1936102084,-1741593658,26310,837816064,402693273,-2134832125,1610612736,101451315,-862391965,-2147405008,-121569280,-1620639696,420703372,1640218756,1673926790,-1014100725,-859033552,2014102320,210133350,811597859,822083584,859204748,863920128,-523894778,-1010012989,9220401,2025357617,202322790,1623228449,253639680,-524188921,507279600,-1048377585,1014558944,-2096689378,2029052097,118431292,-253705853]},{"sector":15,"data":[100678776,805552903,1781856,1611022375,4849968,0,345506048,0,206594054,-1082169836,-67637281,818018557,270945432,405823680,1826140977,-2045961418,-659525316,1612199532,828597244,862375064,1623404569,792624,405823680,1826140209,-2045961418,-1919190724,-261037114,100678854,-480049664,201389592,6,-1070595904,-1014030562,2029007040,51322416,3178497,811604160,-202913825,1635774717,932155295,2122714619,1738415996,821621219,529490278,808452323,503316480,-639383589,2064054520,869171359,2129554931,127803199,819788000,528905062,1623228641,253639680,-524188921,507279600,-1048377585,1014558944,-2096689378,2029052097,118431292,-253705853,100678776,14714625,12988656,12607264,131328,8396544,351011072,251659776,821559488,-1335804866,456551640,2139004429,-202383425,2130508017,-942722689,-50794013,-1893761220,-235871289,-1640108352,-642553905,1065279213,-473460961,2130508017,-942723041,-50794013,-972210372,1622700515,6396,-1073741824,100663296,16777228,128,0,0,0,3,2031616,0,0,0,0,12586496,0,0,-268386301,65281,0,3932160,8392448,0,12583280,0,3932160,-1061036032]},{"sector":16,"data":[16527360,32799,16515072,0,905970432,7168,2083520512,12,0,3670016,0,0,0,0,0,0,0,0,3670016,0,0,0,0,24576,-1056768000,1866723520,1701409397,114,228458752,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145740,589920,2,-1879048192,786433,204472330,536873984,1342202111,1,890368,0,30208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65295,0,0,0,0,0,1572864,-872413672,15761433,1572864,-1744763368,102236184,38913,402659532,432799750,16777344,1619001728]},{"sector":17,"data":[1605657,0,0,15728640,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100663296,786432,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100663296,50331648,4092,1056964608,192,-268366080,3,0,4064,2013267824,393216,813898080,9961728,393216,8395104,425721862,50331776,1610614320,3179289,0,-1744763296,6291456,1572864,-872413672,9961728,1572864,1560,102236184,0,402659532,13369350,16777216,1619001728,1572864,0,1719671136,529269510,221184,192,0,-2128671744,-125755424,267944711,-2128610173,248,805355520,-2128611327,-226459680,2147354495,-478547232,-1629024260,1896287868,-2139098912,-58490896,-258021505,-411459585,-253722722,267386928,393216,28672,117489665,7340224,8847712,30]}],[{"sector":1,"data":[0,0,0,939524096,12583174,0,0,0,0,0,0,0,0,0,0,0,0,0,-134217632,111068976,-2078671359,8388866,1073741824,983072,411048288,520093702,192,8395104,201327408,24576,0,535822366,64225,-33095680,0,8387587,0,251658240,1611595776,0,1879105657,454657,813898080,15761433,393216,-1736369824,425721862,-1022453631,1610614320,422609689,128,-1744763296,1885372441,38913,-864020128,836273695,417920,1619007840,0,-1070589952,214118496,402686733,-1020261373,1610614284,201326595,1616907267,247672928,805749552,-1070592413,411238752,940443440,1664093379,107360268,1611424614,-2095511962,-1059037172,422576152,128,12288,201375744,3145728,196608,6,0,0,12,0,1610612736,509607942,1044672,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,61440,-1946090752,101450511,67110403,8392698,1593835520,-2145845216,-268434592,1006632960,128,8395104,402654000,393216,1610614368,241172486,-411103645,115572734,1073529663,-953130816,-268431458,821035023,-953028416,-1628997218,1067370288,6339]},{"sector":2,"data":[0,0,0,196608,0,0,1610674176,0,805306368,0,-33357728,414237488,786432,1610616624,0,-1070583808,213909600,813204249,-1020258304,1610614284,66847500,-530117632,113651952,858809136,-1070594554,813891936,1016989488,1714423494,6762502,806093574,17786566,-1065352296,3145740,16777216,-20758536,1073529663,-2127038845,478355424,2010909958,-1016071037,-54313994,2031929151,-411496465,1623211934,929038342,1044608,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,61440,-2134831264,111052569,83935238,-864020094,1493221439,-2028404576,402656510,1006632960,24704,813898080,201327408,1007616,-268431376,519045135,1664091654,811806726,106954758,1664114688,214118604,1611449136,1667493984,214118412,806142768,-2128668573,-125755400,1039696159,-1019216189,-54312964,517996830,-955391999,-54313096,1073529663,-952110912,482832668,1067370353,40647,-1744764832,1012924446,786624,-18383056,16253184,-1070571520,2021654880,1066173233,-2128668544,252,48,1634482368,8798104,1072718640,-1069613050,-528285344,922093104,-2042689850,-260030714,806093574,419526,-1073740048,3145734,0,107360268,201770592,-1070068730,813891936,946210310,1714423494,6691852,806093580,-2095511866,-1065275124]},{"sector":3,"data":[3670022,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,61440,-264038304,15728655,83898371,-1732178302,1610137856,983072,-259973280,470549248,24704,-1744760848,2034025265,-2129018687,-1736369768,932741401,54460614,-268222480,106954758,1669226496,107372652,1611032160,1667690592,214118412,815317296,-1073729437,213909516,101498880,1717569126,107372550,106954758,-482385920,107372684,1611032160,1667493984,214118412,806142768,3171,-66650016,1725726727,786624,1610616624,0,-1070546944,201328224,806142015,-1070583616,12,66847500,-479764480,6697212,858809136,-1070588154,813916512,862324272,103810758,243282182,420217606,1047683,-1073734560,3145731,50331648,6697212,218023776,-1070593018,-528285344,811992582,1714423494,-66906100,420217612,17788035,1610614424,6291462,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,61440,-1073735584,117360432,67161088,805503226,1493221376,160,96,67896064,128,-872415232,57065475,-1019281213,-54312964,2130494271,53477382,805515264,106954758,1664114688,107372604,1611032160,1668083808,214118412,821084208,-1019278237,-54312964,1073529663,-411107098,-18382850,106954758,1667260416]},{"sector":4,"data":[107372556,1611032160,1667690592,214118412,815317296,39009,805502976,1672921392,786560,1619007792,100663303,-1070563327,201529440,806126337,-1070583616,1879049752,201326595,106954752,107163654,805749552,-1070594557,411263328,822502960,53480643,113651724,252445446,-2145806335,-1067421600,3178497,100663296,107360268,201377376,-1070531581,948109664,811992582,1714423494,100669452,253494028,-2145780733,1623202032,6291462,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,61440,-2134831264,106954752,67122688,-1732174078,1073741824,32,0,76284672,128,-1736368384,101498886,1717570755,107372550,1711695456,1664091747,107163654,106954758,-1020239872,214118428,806142768,-1019678528,214118412,1063305264,-966783805,214327308,1712113248,106956294,417792,106954758,1667260416,107372556,1611032160,1668083808,482554140,1072742449,61632,1611006048,1042055967,393440,96,100663302,-2095120381,-121552900,536396039,-2128650112,1610614512,805355520,-1893769216,-121602289,2097022847,-478545408,-1912127492,2014310271,8188096,-59541264,116949279,-512124927,-1059029000,3194880,50331648,-54300682,1073505087,-478606208,243728892,2037894975,-1019216669,-66896132,116310279,-528902143,1623211872,6291462,1044480,-268431376,267386895]},{"sector":5,"data":[1044480,-268431376,267386895,1044480,-268431376,267386895,1044480,-268431376,267386895,61440,-66911392,116391936,50334726,-872414980,1056964608,117440704,254,74842880,196736,805502976,254861327,-984863,268431375,-149946384,-411042591,-18382850,1073529663,125828291,-268431476,267386895,24113152,-125755400,1894809631,1665103879,-161267722,1006003007,-1019216669,-54312964,1073529663,-954204989,-54313058,1073529663,-1052774208,-287236370,811655198,24576,0,6,196608,192,12,0,0,0,0,-1073741824,0,0,0,0,0,0,0,16777216,156,0,0,-268435456,15728640,65295,0,0,63489,16128,0,7340032,14,0,117440512,939524288,12583174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100663296,63495,0,0,0,0,201328128,917696,0,8306688,192,0,0,28672,0,0,0,0,0,0,0,0,0,0,0,57344,0,0,0,0,0,6291456]},{"sector":6,"data":[1891632896,1866711047,1701409397,114,939929864,7512195,549982403,828835328,322138466,429627705,-943416099,1289107761,644244166,63129804,956760067,-409177138,-1670132167,1942895079,-835065956,65510515,-2095497697,16265264,-1064557415,102798080,12595212,822125315,406031449,416028774,429424921,-2129028991,1619532184,415506438,-2040459133,-496869352,-864020176,20144134,40092316,-2034233320,428022788,-858993524,-858993460,-1987475003,814520713,321316376,1673692169,862358665,-423326695,393314,1728974646,202152967,67133656,940060876,281808024,939576440,822484094,-119469925,1057359456,-1895316729,-524066568,328600368,-507019119,1022412672,822610956,-1065265146,277020988,192,856044390,-1724828877,-1734796898,422799052,1724255367,-1043569050,197507,1942894855,-835065956,971480179,-409177138,-1670132167,405930983,821825295,664273100,-1635737703,1614741536,-1547629376,-859033344,432740451,-1055903604,213979148,520929552,-536387336,-259842052,-132610463,422605410,1611058304,-996409037,270008931,251954880,211294467,202116108,432802828,-1717986919,-956813172,-862441117,-862375066,-1944505498,6735564,87425030,-930493312,-125236212,818678812,217844752,2093756620,117497856,521216780,106989281,1124479238,1612188675,154153155,-2133782106,-964689466,202116656,1292048904,51961858,12589059,870711552,854799110,429627697,1724684441]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[7887437,3,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":14,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":15,"data":[279886,131221,190350825,32772,0,0,0,0,4194349,9175104,9765013,1175,589824,0,0,0,-2147024892,1,5046272,5242903,68,-2146959360,3,6553600,-265289635,32769,12648448,-265289597,32770,21233664,-265289550,32771,0,1313818119,1380533332,1279608837,16726,687865856,1414418246,542328146,741355570,875312697,540680248,1986815304,824981536,842083376,1699948576,841162868,41,0,0,0,65539,96534784,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145736,327776,0,-1879048192,1,119603206,536874496,-1778360065,0,375808,0,1699217408,33584748,755040256,671088648,1126181219,1920561263,1952999273,1953055264,1701999731,1226861921,539911022,892877105,1816207406,1769087084,1937008743,1936028192,1702261349,11876,0,805308928,117465088,256,0,400,553650176,1245193,6356768,190,136839168,0,1207959552,7760997,16777219,2833,539583272,2037411651,1751607666,1765941364,1920234356,544039269,778268233,943272224,1092628021,1914727532,1952999273,1701978227,1987208563]},{"sector":16,"data":[3040357,0,786432,6291504,131081,0,102400,655360,318769697,1627332608,57856,201326592,11,0,1986815304,0,96534784,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145736,327776,0,-1879048192,1,119603206,536874496,-1778360065,0,375808,0,145408,33554432,134218752,318770688,570431744,671098112,822094592,989870336,1073757696,1224754176,1392528896,1560303616,1744855552,1946185216,2080406016,-2063565312,-1811903232,-1577018880,-1342134016,-1090471936,-889142016,-620702976,-503259904,-301930240,63488,251725825,503387905,721495297,989934337,1291929345,1493259009,1627479297,1778476289,1946251009,-2147386879,-1962834687,-1811836671,-1610507775,-1543396863,-1409177087,-1140738559,-939408895,-771633663,-637413631,-436084735,-217977343,-33425151,100795393,302124034,402789634,503454466,604119298,704784130,805448962,906113794,1006778626,1107443458,1208108290,1308773122,1409437954,1510102786,1610767618,1711432450,1812097282,1912762114,1996649730,2114091266,-2013101310,-1895658238,-1727884286,-1509777150,-1342002430,-1157451006,-989675518,-821900542,-670903550,-469574398,-352131582,-201134334,16972034,285411587,503518979,738403587,973288195]},{"sector":17,"data":[1258504451,1493390083,1694719747,1828940547,1963159811,-2130478845,-1862039293,-1593599741,-1325160189,-1140607997,-872168445,-603728893,-385621501,-184291581,17038083,218367748,486806276,671359492,872689156,1006909956,1141129220,1308903428,1510233092,1711562756,1912892420,2063889668,-2029747964,-1828418300,-1627088636,570729732,-1907611627,278545,1406011667,-2132575026,-1895628008,2084454022,686352379,1627496784,-126059458,673769723,-1171289534,276856889,269492224,4180,-2147483648,0,1834713909,-1234314314,-608801317,-1999063443,-1619162501,-553189348,31624240,274728176,1611151376,-817044687,214361863,-1617792909,235080733,-239914738,1623408896,574626960,12638234,-515504120,47330341,81319440,543236868,2081751256,705827297,-1206648700,84955681,-127708140,558452932,142754369,558966792,1111576963,-2013231742,1363290152,1074405953,-415654333,-1761288669,1033823161,625332686,1162132520,-608801381,1843115629,-1234314314,1385045208,547694208,-498360309,214977380,405811353,-1050660864,134874755,-369377745,-1615851479,522133279,-1802226636,576656660,19154208,281309479,156242592,1613300769,1342759449,15362,243411216,-1942018302,1397131300,-1042085730,-1758396288,1111539280,-386938637,1229267294,-125141951,1210353904,562176162,1358954504,1370762562,340071511,-1860680367,-1983372219,1830498436,-1234314314,-608801317,-1579633043,678437098,-1595256930,1226867760]}],[{"sector":1,"data":[-1838938924,1217923731,-1992023407,537454611,1007749506,-1600085848,-726294368,303305748,-411452272,-622823010,-759796453,-1897710302,-1466244296,-1574401374,2080374920,713175396,-2010906492,290551937,-127713264,-1579214912,142754369,558967848,1078019369,-2012706682,1343522082,532868,675467526,-1806380765,1162941509,-668430074,1078202565,-608801509,1843115629,-1234314314,1921948888,562112736,234889227,72370400,-1164963319,-134480478,146726895,-906806225,-1599729647,-1600085856,336860342,572461332,-1969084278,1091601004,1159860740,340087060,-1969051558,5251621,-1630983920,553918530,334367043,-1797054322,268501784,2084486672,736626682,1125236112,-2055585730,46237680,-1601206264,1577255048,1361110841,323310676,-820232802,1008896272,1830502468,-1234314314,-608801317,-1982286227,638591739,-1609957188,1879105539,66076752,-2053373055,1344803850,-1093671005,521267707,522166049,-482926817,-505158685,-1503058416,1906796954,-1830602546,-1911342814,-946085064,1021475230,32,1073807488,4210688,0,2048,8392448,0,0,0,0,0,1052260352,0,2146311,68157440,0,-2144010228,0,0,0,0,8160,49159,-1073725440,-2138898432,128,50331648,128,0,0,0,0,0,8388864,0,0,0,12591116,1986815304]},{"sector":2,"data":[0,0,0,0,137167104,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145738,458848,1,-1879048192,1,153157640,536875776,-1107271425,0,534528,0,145408,50331648,201328128,469767424,855648256,973092352,1191198208,1392529408,1509971712,1711300352,1946184960,-2113897728,-1879013120,-1644128512,-1476352768,-1308579072,-1056916992,-721369088,-419373568,-117379072,151060736,486609665,654385153,922824705,1275150849,1593923073,1912695041,-2113832191,-1811838207,-1459511039,-1174294015,-1006518527,-805189375,-570304767,-318642943,-66980863,134349569,386011138,486676994,654451714,922890242,1191329538,1409437442,1593989634,1828873730,2097313282,-1962769406,-1811771134,-1576887806,-1442667006,-1308447230,-1174227454,-1040007678,-905787902,-771568126,-637348350,-503128574,-368908798,-234689022,-100469246,33750530,167970307,302190083,436409859,570629635,688072195,855845891,1090730499,1258506243,1493389827,1778607107,2030268931,-2013037309,-1778151677,-1576821501,-1375492349,-1123830269,-956055549,-771503101,-519841277,-284956669,-16517629,285476867,587471364,923020292,1208238084,1476677636,1694785540,1862560260,2114221060,-1845196796,-1509647356,-1174097916,-939213308,-637218556,-335224060]},{"sector":3,"data":[-66784252,168100612,402985221,637869829,939863301,1174748933,1409633541,1610963717,1778738437,1980067589,-2063237883,-1794798331,-1526358779,-1325029115,-1090144251,-855259643,-620375035,-1039801851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615808,0,-671088640,0,0,0,0,0,0,0,0,0,-1894187008,49363,50396925,6364,109064960,1610645020,-870441460,49347,1662780976,9489504,-1073735437,-2144209952,-2097074173,6316038,906756870,61644,1824921696,-654278631,-605998976,103809048,204511281,-1290993472,948749104,13424652,1668810240,-1633696793,15759486,253624320,2130207168,-1614856321,-1023009844,870113632,1065286905,1826148239,-1330577098,-1278746913,202752,208896,394080,0,3072,50331648,-585301833,-572662307,-572662307,-572662307,819781085,1739823459,-1067444096,8782080,1623588984,-167708672,235675328,1630541872,1611038903,403472126,303759459,111081731,-1642527997,217979904,29363206,-1933507706,-1744737229,1662517248,1382155056,-1017073555,-2147258341,13375500,198,-151406835,-1945277224,100669560,1731256525,-855232360,415260827,-248500173,-1335770234,460075056,-211760122,-2045954338,64532673,20343832,-1736369765,32961]},{"sector":4,"data":[-203165197,-612614202,2088564278,-554467588,-1687315507,-1909332425,-572662307,-572662307,-572662307,-572662307,-807009316,922774579,50380982,1640759419,-392625780,113260032,805307916,50727960,-1011826429,2139062143,224627761,-477151293,-1656750344,-659529329,-429443476,1008635751,1021243768,-1058803336,-248446976,-235802127,1723047923,-868771071,51118272,414237490,419335425,1623985152,1050660193,60324108,1728497183,-1057187431,809484129,-267977969,920378976,-1329494515,1813562319,260976950,-2141120509,454754304,1668232758,-614016154,-960051610,-1681060666,-969870484,-576873679,-572662307,-572662307,-572662307,920444381,1730021830,-869058944,8094687,17234809,855697560,2113963673,507279408,-1014823153,1616953406,-1942921120,1625541991,-2096285992,1637604704,913103024,-1044367514,403441283,-1681037773,-1942919626,454794201,-1222960357,-1681037645,12610614,-533658868,-1933494674,202309496,1874878668,-870796351,16780536,-35951476,-1335771002,468463664,-866062330,-66210087,1660993485,2070111768,403047950,32865,923147259,-614046746,-966337594,-1933326650,1668062157,-1070560207,-572662499,-572662307,-572662307,-572662307,-1882245412,935332876,-1149167184,1660944491,731382236,-1072943104,-866123714,-1944505498,-1057986618,2122219134,224627761,920150203,-580877555,-659529293,918958956,1050660711,1627388284,-419955715,-1686270927,454761243,1723053339,1815518157,117440704]},{"sector":5,"data":[1641795832,416058497,1640765440,-1283366528,51956784,1728103967,-1014624909,808497249,-865723540,-153567136,-1312325619,1662542720,102485955,-2144266228,463143168,1057371702,-614016154,-960051610,-238236480,115601816,-585269199,-572662307,-572662307,-572662307,870112733,1740577254,-865658752,8782272,16777216,117450904,1720162777,2147483341,-152051777,1616954160,-1942921120,1619987811,-2096285992,1642323296,829216944,-647174521,-1681037645,-2084477392,-1942944250,454794189,-1122297061,-1714592077,8415206,-516750580,-1939784050,-664791040,-1040751752,2016419487,415260915,218312716,1065320184,468459440,-1065434308,-2131135528,-1008783233,-2038316785,-669022671,32817,-203165189,-614071354,2087115574,-1899528452,-1734778500,-2144213305,-572662499,-572662307,-572662307,-572662307,-1064357412,264265740,192,-134151940,686555392,520093708,-2038858088,-659529277,2118006380,2139062143,-110916559,-477151353,-1673527560,-1893777410,109502919,1050660839,1021245820,-958140040,-1720087503,-235802127,1042268147,-1010304900,0,49152,55296,32,0,536870912,251658240,224,0,0,0,-2147418112,0,0,-2147017216,254,2113929216,12288,113246208,0,58721024,183,0,0,0,0,1728053248,128,0,16777216,1572992,113180928]},{"sector":6,"data":[6144,0,0,0,8388864,0,0,0,6144,0,0,0,50331648,3718,1986815304,0,185663744,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145740,589920,2,-1879048192,1,169934858,536875776,-503291649,0,723968,0,145408,67108864,251660288,570431744,1006645248,1157644288,1409305088,1644191232,1795188480,2030071808,-1962900992,-1660906496,-1358912000,-1056917504,-838809088,-620703232,-301931264,100726272,453054465,822158849,1140931329,1543589889,1744920577,2080469505,-1778284031,-1409179135,-1023297535,-721302271,-368975871,33683457,369232898,537008898,755115266,1023554818,1325549058,1610766082,1845651714,-2147322110,-2013101054,-1811771390,-1425890814,-1123896318,-889010686,-687681022,-402464766,-66915326,201524226,369299971,604183555,771959043,939733763,1107508483,1275283203,1443057923,1610832643,1778607363,1946382083,2114156803,-2013035773,-1845261053,-1677486333,-1509711613,-1341936893,-1174162173,-1006387453,-855389949,-637284093,-335289597,-117181181,151257347,520361988,755246596,1090793988,1359235332,1560566020,1761894660,2030334212,-2063303420,-1878750972,-1576757500,-1207653116,-905658364,-570108924,-234559484]},{"sector":7,"data":[184876036,537204229,872753669,1107639813,1241859589,1493519877,1896178949,-1996129019,-1593469691,-1308252667,-939148027,-570043643,-234493947,67500805,369495302,671489798,1057370374,1342588678,1644583174,1862691590,1996911366,-2063172858,-1761178106,-1459183610,-1157189114,-922304506,-620310010,-318315514,-33098490,570885638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32895,0,0,0,-1061158864,-2147011594,-1073741824,855835395,251700237,-1073692576,-866119888,786432,805703180,12,0,0,0,0,0,0,0,0,0,3072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1073741824,49152,0,0,0,0,0,0,24,0,0,0,0,0,0,117440515,14576,63491,423680,-1677656064,17588224,51118304,12333315,49164,202125312]},{"sector":8,"data":[1083834816,817896192,466354179,192,456130563,3145728,805309440,503377120,-1073741824,402656771,-654245780,488375936,805306496,8438528,48,1063676934,102635550,30,104727296,-473921777,1056864504,31,1072693248,-2122370880,-817891103,1717631216,110649606,1008245761,2146484255,117171975,1640231104,-117885008,1610670321,100696065,-1073734656,6316134,0,0,0,-2133131008,1942894855,-835065956,971480179,-409177138,-1670132167,251659239,523463820,202119219,101449728,419438080,-2143354740,-536824313,405799708,-1073741044,-2130244560,-18759169,-119038081,955777280,-2146994128,2021656440,865615160,466378758,-2096144381,-1196310272,13254,453783552,601082904,408973411,-837273802,100862976,29569222,1812332696,817062246,204670515,50380992,-870834589,-1073683615,-1724816634,-2130460543,2016460952,-2045131168,100863024,1661363808,-1643968744,857260824,818700300,-255850813,1612198851,808687665,-2147418112,805307904,1610661888,96,0,24,50331648,968345368,-409177138,-1670132167,1942895079,-835065956,15178867,-959997952,822095971,27878,855700249,13056,-1241448323,811008,119406688,511238273,103842567,408977433,-1718025978,-2043593594,411459864,-952596895,1611019032,1619401164,49176,503316480,0,0,8388864,0,3584,0,3]},{"sector":9,"data":[1627324422,3366942,-1065318559,107152896,1667481600,1661763585,260544817,-1894129424,-866071400,204505857,1717567494,119039494,-2129028217,1611019928,113443020,518429025,-1939750900,16777264,2122119409,-50561986,-546871706,-507017441,-960567303,1815529155,-854006985,1942895079,-835065956,971480179,-409177138,-1670132167,404685799,519270156,1007039232,-1692860416,1628184064,4010880,1610652673,405799692,818089011,-1022610484,-2147414992,17176672,914594201,858784563,53686275,865635641,416047110,-954695732,-118431293,-132235652,524188796,-959673329,2096689347,-1911611586,-862441153,-216320410,393228,-1073725594,-1621032930,104790247,-2097084829,-118398010,-2145436136,939524124,-2036754127,-2097050497,1055297343,1845945983,-1714616808,-962625127,-536379642,-1721694525,-2147021594,3181761,-1944518656,828622534,1818674828,-862441114,-1944505498,-960248296,-835662797,956788760,-409177138,-1670132167,1942895079,-835065956,65510515,-1056465101,855651200,-137560058,62425,855670591,-2147405819,-510827572,-1738460946,1636178278,-1942002024,528481281,-1684409913,53687267,805516080,-1724316877,1611019160,1635260620,811630747,50727960,-960066559,-862441117,425967820,828622476,828886680,912706712,793371,33488902,1617141377,-1065318559,107154432,-261685241,1664125977,252149761,-1721638672,-866058599,204505857,1717569030,102265606,-2116446087,1614153368,113455296]},{"sector":10,"data":[507252531,-2038365949,16777264,-960459527,-963890817,828800102,862375064,-971471079,-2040434842,-1072135327,1942894855,-835065956,971480179,-409177138,-1670132167,204735463,519270156,2112237824,-1692847976,786432,805647104,124141056,1612591235,-102260865,-408977410,-2147414800,17176672,830708121,858784691,53686275,865644857,416047110,-954695888,-50794013,-65060994,1065352896,-942879585,-963896845,-828886685,-862441109,422785894,152,864248166,-1939750815,-863977024,202114659,-1944493984,419652400,-2147237759,57904897,-2045131168,235080752,1634100832,-1741617512,51954552,818700300,102631107,50541336,3180033,-1944517888,811648710,1718011644,-862441114,-2129054874,2034026136,63161315,956809240,-409177138,-1670132167,1942895079,-835065956,65510515,16813113,402654083,13369356,1548,855638016,5,1619004876,-255826378,-1073541316,103824624,408977433,-1718025978,-2031013754,411459864,-482834847,1611019032,1613764812,862374936,1673956377,-1060732879,202911840,422825164,828622476,829673112,828820632,15735011,1063649286,1614749190,16777267,104781952,1673578271,1043396848,8395038,-1067450368,-2122382589,-868222751,1717630464,-153132996,1010341889,1626538008,-54402969,1628964364,-2080831613,16777264,2122119405,-972279746,828793702,-507000936,2114883577,1640378392,-2133073529,1942894855,-835065956,971480179,-409177138,-1670132167]},{"sector":11,"data":[522126311,1048773056,15730432,-134021120,4128768,8731904,520093792,1014923393,255652032,1022410755,-18759361,-102260865,821598617,-2146994064,2021656440,-519062471,-259571716,-2028249040,-84612653,2023702141,524188796,-942896113,2096634083,-1911611586,-946921602,-255594269,96,3072,1966080,411041792,0,0,0,128,14696192,0,0,0,0,0,0,0,0,133227265,248,16777216,786680,0,1572870,0,3840,24,0,0,0,0,0,32,3,0,0,1610612736,14680320,-259849984,6,0,16777216,192,0,0,0,0,0,0,0,0,3670016,0,0,0,0,117440512,12583811,1986815304,0,0,0,0,1072742449,61632,1611006048,1042055967,393440,96,100663302,-2095120381,-121552900,536396039,-2128650112,1610614512,805355520,-1893769216,-121602289,2097022847,-478545408,-1912127492,2014310271,8188096,-59541264,116949279,-512124927,-1059029000,3194880,50331648,-54300682,1073505087,-478606208,243728892,2037894975,-1019216669,-66896132,116310279,-528902143,1623211872,6291462,1044480,-268431376,267386895]},{"sector":12,"data":[8084045,3,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":13,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":14,"data":[279886,131221,190350944,32772,0,0,0,0,4194352,9175104,9765013,1175,589824,0,0,0,-2147024892,1,5046272,5242904,68,-2146959360,3,6619136,-265289632,32809,12910592,-265289596,32810,21561344,-265289544,32811,0,1313818119,1380533332,1397576709,16722,738197504,1414418246,542328146,741355570,875312697,540680248,544435540,544107858,808528952,540160300,1952797480,691151648,0,0,0,2686979,99877120,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145740,327776,0,-1879048192,1,135331846,536873728,-1644142337,0,388096,0,1834221568,1834098803,2752622,138412288,1663565824,1866670121,1769109872,544499815,1919117645,1718580079,1866670196,539914354,892877105,1816207406,1769087084,1937008743,1936028192,1702261349,11876,0,3145738,458848,1,-1879048192,1,168886280,536874496,-1073716993,0,538624,0,1834221568,1834098803,2818158,192413952,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352]},{"sector":15,"data":[1702061426,1684371058,46,0,3145740,589920,2,-1879048192,1,185663498,536875008,-335519489,0,749568,0,1834221568,1834098803,110,0,0,99877120,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145740,327776,0,-1879048192,1,135331846,536873728,-1644142337,0,388096,0,145408,33554432,167773440,385880576,704651520,822095104,973092096,1140867328,1224754944,1358973952,1526748672,1694523392,1862298112,2030072832,-2130674176,-1962900480,-1728015872,-1493131776,-1258246656,-973030144,-721367552,-436151040,-268375296,-16713728,268503040,503388161,771827201,989934593,1258374145,1543590913,1778475777,1879141633,2046915329,-2080276735,-1895724799,-1711172607,-1576952063,-1375623167,-1274957567,-1123960319,-872299007,-670969343,-503194111,-368974079,-184422399,16907265,184681986,352456706,570563074,704783874,839003650,973223426,1107443202,1241662978,1375882754,1510102530,1644322306,1778542082,1912761858,2046981634,-2113765886,-1979546110,-1845326334,-1711106558,-1576886782,-1476221438,-1342002430,-1157450494,-956120574,-788345854,-570238462,-368909566,-167580414,-16581886,167970306,318967299,503519491,637739267,771959299,1023619843]},{"sector":16,"data":[1375946755,1577277187,1812161795,2047046403,-1945927421,-1677487101,-1409047549,-1190939645,-1023164925,-788281341,-519841533,-251401981,17037571,218367236,520361476,822355972,1040463876,1225016324,1392791044,1560565764,1795449348,1963225092,2130999812,-2029747196,-1929082364,-1778085884,-1576756220,-1375426556,-1174096892,-1006322172,-804992508,-603662844,-419110652,-502993916,-1004763886,-2145119970,-1945037312,820418871,941146112,-471784968,-470156815,1903413177,-130226301,-823660303,1857453036,12754159,-2147458880,808239424,0,32768,203555328,-1717986919,-1717986919,-1717986919,-1717986919,1484014744,404743624,-386727680,482357283,1125650435,1075364360,-1907834079,12837663,155501251,404651722,303963654,817942577,-1072950216,1368199364,1210056704,-500607592,-1729857276,554763284,-1626169248,304097449,419431443,559174194,253970729,1359218054,-2012737262,-2112880246,1388716068,-1995946686,1229210629,340345890,939982917,1888259171,-1011706620,-153341396,-993682036,-1726409951,-1717986919,-1717986919,-1717986919,244881817,624003,37792038,-1728572216,687945737,1679593800,-2059394944,604636290,-404232409,567163367,505323105,859184670,1673956377,555907427,112919126,-1476094960,524560,149035008,3670568,-703067632,-1626029538,-2079315698,944126099,-1711210484,31623476,971169800,540574448,2034387626,79818760,-2103342526,-2142760318,-1835785215,308759506,1234314313]},{"sector":17,"data":[1381339728,-2145367996,-1717987047,-1717986919,-1717986919,-1717986919,1600410776,-1641504576,145275535,420022305,1370034177,1352149538,176505505,33719315,268567042,556890500,555819297,-2012163786,1158947396,835065923,1516996996,-1020086563,432222220,1759229485,1056968869,35727636,687866896,-1527770607,251857033,-42139002,-2012737262,-2112876158,1183982116,-2012724926,-2076048351,-1845214910,604307520,1234079876,608801316,-1845216868,69805394,-1726414815,-1717986919,-1717986919,-1717986919,1419286937,1074365003,-2109701848,-1341980472,-2130507767,-750489270,-403441248,608083919,-2088533213,562303106,555819309,288825633,574916624,690321672,144986698,-1836838846,1234314313,-1843095260,-1606933175,1178080272,1081886,-868497888,830871575,421052448,-471792383,-473826831,2138299577,-532880765,-2084319759,1665533057,4231567,-865921017,-609849982,152089453,757255580,2213009,-1717987047,-1717986919,-1717986919,-1717986919,1202998936,-1138352120,11010560,-2012348168,268711944,110960782,1613764620,-406330397,971499495,509837006,505290270,1893785654,-1055122376,1942894919,-1942944069,-1288578202,432222220,-768324157,16416,16777232,1075839008,0,2097152,15728640,0,0,0,3670016,0,419430400,16064,786432,64,6168,35651584,34,0,0,0,67108864,-1073676288,16777247,240]}]],[[{"sector":1,"data":[3670024,0,0,50331648,128,0,0,0,0,0,234881024,0,0,512,-2144336896,544435540,7236946,0,0,0,138412288,1663565824,1866670121,1769109872,544499815,1919117645,1718580079,1866670196,539914354,892877105,1816207406,1769087084,1937008743,1936028192,1702261349,11876,0,3145738,458848,1,-1879048192,1,168886280,536874496,-1073716993,0,538624,0,145408,50331648,201328128,486544896,872425984,989869824,1157644032,1358974464,1476416768,1660967936,1895852544,2130737152,-1929345536,-1694460928,-1526685184,-1358911488,-1090471936,-754924032,-436151040,-117379328,167838208,503387137,687940353,989934337,1375815681,1677810689,2013359617,-2013167871,-1677618687,-1308513791,-1023296767,-889075967,-704524543,-503194623,-268310271,-50203135,117572353,352456194,486676738,671228930,973222658,1208107266,1409437442,1560434946,1778541570,2046981122,-2063433726,-1862104318,-1627220222,-1492999422,-1358779646,-1224559870,-1090340094,-956120318,-821900542,-687680766,-553460990,-419241214,-285021438,-150801662,-16581886,117637890,251857667,386077443,520297219,637739779,805513475,1040398083,1292060419,1493390083,1761829635,2013491203,-2046591997,-1878815741,-1643931389,-1459379453,-1207717629,-1056720125,-872167933,-553397501]},{"sector":2,"data":[-150738173,168033795,570693124,973352452,1409566212,1711561988,2013556484,-2046525180,-1845195772,-1576757244,-1241207804,-905658364,-570108924,-335224316,325124,335874565,637869317,872754437,1107639045,1342523653,1644517125,1845848069,2047177733,-2080014331,-1945794555,-1761243131,-1526358523,-1291473915,-1056589307,-872037115,-637152507,-402267899,-184160763,570817285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,805502976,0,0,0,0,0,0,0,0,0,-2146631680,7,61443,0,57344,0,1046478896,23310339,16777408,857476224,3355488,209740039,-1340013810,109052160,811600902,1660945152,1618700,456351744,1694525891,1501966720,-2046753152,1610812470,1641590797,671482818,318767272,203296707,-940313604,128,-2097135752,1073740536,-1109930017,250592487,-405835513,1056766435,939293183,-270738279,103845614,402681856,125829894,14,805306368,0,1982883328,-286331154,-286331154,-286331154,-286331154,-2061597983,266363374,16810113,956303344,2031843,268873753,806358881,1803550728,50913286,-386711712,6500448,2143341592,811647117,29393969,409002191,-1023377383,-1933447040,2359507,-1060366336,-1741385668,-2140551584]},{"sector":3,"data":[428212536,8401792,-69685235,1149633636,369123440,481499495,1815511169,1610614464,-1044266868,-1738439027,406018124,126228675,865613838,1657146422,328741017,1208782104,24676044,2014854799,1945581004,-2015634122,-843906,-213978308,-603158919,-286331154,-286331154,-286331154,-286331154,2016419552,268460996,33587271,202114312,3801292,537833529,2098914,482345244,18661377,454431680,2147483389,807330749,-17271844,-102527169,-409094184,427286137,-941385223,2065178255,-2040457082,-1202065690,-2017205904,-1065550280,1626787187,-2114125044,-969931832,637559000,746979683,-865865479,419371227,1633852697,-1637777159,-134014961,84286403,865610902,952503350,562835480,-2130311507,13387404,-1725123815,865848686,-915642810,869689011,-1718200010,820761,-286331154,-286331154,-286331154,-286331154,1216132321,666919272,75471661,-1736505372,1614427744,1187427865,809943909,643826214,36069378,29762400,811713156,2081211288,-2096290098,221698144,-1039649831,-1591636944,1815524237,-865684519,-877515573,-871602586,-916180327,-647203143,547055027,-256900852,-962556653,641268739,1275266659,1734776845,100688064,-244862159,-1738440563,418584588,75898307,865609446,486280422,1099313176,50529197,17932,-1688095993,865848812,-647207226,868443827,446929718,394803,-286331154,-286331154,-286331154,-286331154,2033235169,744489982,1946400295,1024196804,1717952]},{"sector":4,"data":[-1234771140,1622568552,2146436991,125825031,17203184,1014558944,806142744,-2096257333,221698144,-1039649830,-1054831568,-470706035,1058967495,-537428520,-851548570,-647219557,-647219525,1083926963,418907904,-960440282,1174429696,2125663331,1623627981,419371200,432577281,-1738439027,406001740,616962243,865608518,1187777542,-2138886120,109249990,9772,-1687834087,865828108,-647207322,-1279181252,-1899688909,820833,-286331154,-286331154,-286331154,-286331154,-2077181727,666919216,67115808,164,669184,1052837376,-1002520304,-2129098623,-2004805496,420905752,811713156,806142872,-2096240952,221698144,-1039649828,-1054831568,1815518201,-865684519,411459865,-848927130,-1723062637,-647190981,-1058981453,-262077684,1148227395,1132683520,211722183,-943460232,1610614427,991739952,1073741048,-1108930594,-286311954,-410029809,2095509891,73532,-1882777146,9964,-113730545,-1281684020,-831756745,434570800,-993719053,820857,-286331154,-286331154,-286331154,-286331154,8298209,274751608,33587279,-2139160568,25836288,100855809,2030494241,-1019355965,-591184420,-202127555,2147483389,2141120445,-17276004,-102527169,2096161231,-473888993,-403459711,2067701711,-1897711474,-868452489,243778529,-806894789,-2139090529,1616904960,671088640,8388608,0,0,1,15872,0,0,0,0,14336]},{"sector":5,"data":[-268235250,0,1610643456,0,3640,939524096,3171840,0,0,0,0,4096,264266496,16777344,240,117452800,0,0,0,0,-1073741824,0,0,0,0,0,0,0,0,12,0,0,0,13099264,544435540,7236946,192413952,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775239737,1819033888,1734963744,544437352,1702061426,1684371058,46,0,3145740,589920,2,-1879048192,1,185663498,536875008,-335519489,0,749568,0,145408,50331648,234882816,570432000,1056977408,1224753920,1442860800,1677746176,1828743424,2030072064,-1996455680,-1728016128,-1459576576,-1191137024,-989806336,-771700480,-452928512,-50270976,352389632,755048449,1107376129,1543589633,1761698305,2114024449,-1727951615,-1325292031,-905855487,-587083007,-150869503,302122753,671227394,822226178,1057109506,1325549314,1610766082,1879205634,2080536578,-1929214974,-1794993918,-1593664254,-1241338622,-939344126,-687681278,-503128574,-217912574,100859650,369298947,637738499,939732483,1107508483,1275283203,1443057923,1610832643,1778607363,1946382083,2114156803,-2013035773,-1845261053,-1677486333,-1509711613,-1341936893,-1174162173,-1006387453,-838612733]},{"sector":6,"data":[-670838013,-536617725,-335289341,-50072573,285477123,553916676,872689156,1174682628,1476676356,1694785540,1946447620,-2130413308,-1828418812,-1627089148,-1459313660,-1073434364,-570110204,-217782780,218431492,654645765,1141191685,1510297349,1879401733,-2130347259,-1895463163,-1576692475,-1157255675,-721041403,-284827131,17167365,453381638,889595910,1258701062,1543918598,1812358150,2080797702,-1878621178,-1626958074,-1358518522,-1157187834,-989413626,-737752314,-435757818,-133763322,168231174,403115783,705110279,1007104775,1292321799,-1039706873,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16777216,0,0,0,0,402677760,15925255,7936,3145728,-1743161152,9986310,6303751,-218101992,12294,196614,213912816,0,50331648,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24576]},{"sector":7,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100663296,0,0,0,1610618880,110002445,8401200,51118080,100715520,40473,1630220,-1899947936,0,17596417,805306520,196608,112247651,1610612832,-2046740468,-1325203216,993791104,805306368,1795,96,36952076,-1073542137,2105537,210501888,252059166,505298702,0,-2139103231,2059411216,2147386239,-403576701,-2115552113,126317504,-1056441151,-212924420,-418399037,970908559,1882748670,-1073670144,805309952,121045774,0,0,0,805306368,1944502368,-835065956,971480179,-409177138,-1670132167,1892563431,333710176,857672911,12640527,16253696,416153952,12584704,808452295,-1061133984,1073743968,1048578,-16769152,-1610615584,-813695245,-51183556,20854812,2088767472,-102703101,-807323332,-948733938,-1044379848,1676043910,402653376,2037148720,-532257890,1852190816,201366553,1636568332,11534734,255055884,1611045004,11276738,479330560,269361955,858989336,0,1619013891,-2043605960,813850928,-1017112436,8591622,415424992,806929200,-1849091901,-1023141759,286028036,-669489652,-1073741824,1610614272,50528262,0,16777216,128,1610612736,1939628384,-835065956,971480179,-409177138]},{"sector":8,"data":[-1670132167,1892563431,-517782016,3214470,6295568,263168,6488208,25169408,1617985741,-2141077280,-536863744,20447239,1476398784,-1939862493,1177584145,-2090733544,-2034167794,-2090782708,115546124,-2034233320,-2111754236,6327327,0,0,0,8388864,0,7168,0,6,-1694509044,-1073532903,812652742,204669184,1041629699,858981936,125829939,-1341312256,36899916,848310576,-1017116648,203526,811753905,405848856,-2130634557,1661471873,537279112,-1944493544,-596115456,-249809384,863233990,2037442414,2071338940,-805511431,1626922447,1929404512,-835065956,971480179,-409177138,-1670132167,1892563431,537052003,1838284,14731559,15862016,13000800,8392243,-969899827,415479905,805381728,38567945,-1728048288,207881222,103977089,-2124324840,-864022133,20144134,468061336,-2034233320,-1004523516,-1016869864,-1010580541,941153475,-600229832,-523337501,507279600,-415425521,-270747277,12117879,258342924,-1677236466,819468294,204669696,52825602,522061374,-518058496,271803328,12783494,1055928624,-1015087080,204550,808608154,405863448,-2130638852,1695549057,1073945736,1598256,-422838272,1713786412,1127428967,-1936182477,-1053137978,-1001599848,-1070495527,1929394272,-835065956,971480179,-409177138,-1670132167,1892563431,599943014,3342591,1734552364,1707000,8649987,9176627,-1238255923,-664400797]},{"sector":9,"data":[402801600,75939856,528556336,259784710,104788097,-513581032,-863989367,20144134,602279064,-2034233320,1746939908,1724304664,1717986918,1277978214,-867414964,835159905,591825944,1666096145,1724684337,1061670,100598028,-929510272,-33482746,204702479,54461196,53677107,14336,828818288,3345663,848310576,-1017103336,8591622,807035276,405848088,-2118057786,874513281,-2147407920,1598304,-969146368,1719584352,-483183770,-1944505549,1898996678,1754121880,1616957552,1929404512,-835065956,971480179,-409177138,-1670132167,1892563431,-536640666,3345456,-1058666196,15919899,15622400,25166387,1048255463,-104064522,-58196096,268427583,-104628232,207880198,103977089,-2124324840,-863972984,20144134,-1008333672,-2034233320,807415812,-513700833,-505290271,-60752159,-855835396,862358625,1673956377,1675009073,1674352689,10498374,365690880,1880660353,805312518,202506752,839267089,104008755,-518058496,-499317824,-2043573247,813850928,-1017112564,147003446,403595648,806928432,-2134828861,952107458,-2139012112,1597890,-993263616,1667288676,858993638,-2011614413,422592504,948422553,1623224536,1929404512,-835065956,971480179,-409177138,-1670132167,1892563431,280232807,920624,1610860583,1706752,0,8405555,101070336,421015564,113770649,-1878969792,409239564,-1939862493,1177584145,-2090770408,-2034143224,-2090782708,115546124,56696844]},{"sector":10,"data":[809506824,1717963800,1717986918,-1067163546,-859782976,862358625,1657047057,1743002673,-506685133,14729415,533463052,-602993149,805310466,504116832,470162495,471731230,125829939,125878528,2025905923,2029945727,-403574781,-101237352,126284736,-1056448319,-1073506335,411041916,-1044127391,9986558,2020999168,1883010616,-1682752665,-258163781,-264764480,822535118,1626874268,1929404512,-835065956,971480179,-409177138,-1670132167,1892563431,14730851,2296952,14684944,263168,64515,8438332,101482511,405814296,268206579,-133988384,1073659935,-1610616608,-813695245,-51122116,20852764,2088767472,-119218173,20889607,2021658608,-1279058628,-1280068685,2016984243,-294094728,969394033,1014558944,997727518,1894239901,4194438,67108864,0,8193,1568,0,0,1,8126464,0,0,0,0,0,1879048192,0,0,0,28864768,254,50331648,6291584,0,2016,0,805355521,49248,0,0,0,0,0,2,4063232,57359,16253696,0,939524144,0,0,0,0,0,57344,0,0,0,0,0,0,0,0,0,3670016,0,0,0,0,117440512,8389383]},{"sector":11,"data":[544435540,7236946,0,0,-268431376,267386895,1044480,-268431376,267386895,61440,-66911392,116391936,50334726,-872414980,1056964608,117440704,254,74842880,196736,805502976,254861327,-984863,268431375,-149946384,-411042591,-18382850,1073529663,125828291,-268431476,267386895,24113152,-125755400,1894809631,1665103879,-161267722,1006003007,-1019216669,-54312964,1073529663,-954204989,-54313058,1073529663,-1052774208,-287236370,811655198,24576,0,6,196608,192,12,0,0,0,0,-1073741824,0,0,0,0,0,0,0,16777216,156,0,0,-268435456,15728640,65295,0,0,63489,16128,0,7340032,14,0,117440512,939524288,12583174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100663296,63495,0,0,0,0,201328128,917696,0,8306688,192,0,0,28672,0,0,0,0,0,0,0,0,0,0,0,57344,0,0,0,0,0,6291456]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[7952973,3,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":3,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":4,"data":[279886,131233,189692143,32772,0,0,0,0,4194350,9961536,10551457,1187,589824,0,0,0,-2147024892,1,5111808,5242911,80,-2146959360,4,7143424,-265289426,32769,26935296,-265289407,32770,47972352,-265289238,32771,80084992,-265289246,32772,0,1313818119,1380533332,1297043973,20033,704643072,1414418246,542328146,1414418243,1330990665,1129534293,1313426497,540680263,1634561874,1395138670,589329509,10545,1918979328,776216683,2036421664,7499628,65540,315883776,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1879048192,65281,319881248,536879360,24190,0,128256,0,1867644928,7233901,16777218,5121,539575080,2037411651,1751607666,1766662260,1936683619,544499311,892877105,0,0,0,0,0,0,0,0,2359297,196610,262169,65538,-16674816,2097152,553653009,1585324032,0,-184549376,1,0,1634561874,196718,513212672,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624]},{"sector":5,"data":[0,0,0,0,0,0,65536,131108,1638403,131076,-1140850688,65282,319881248,536879616,24190,0,128256,0,1867644928,7233901,16777220,7703,539575080,2037411651,1751607666,1766662260,1936683619,544499311,892877105,0,0,0,0,0,0,0,0,2359297,196610,262169,65538,-16598016,2097152,587207697,1585324032,0,-184549376,1,0,1634561874,1632436334,1142975346,315883776,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1879048192,65281,319881248,536879360,24190,0,128256,0,130048,268435456,167772160,268442368,352333568,335561472,402690816,419483648,167849728,234962432,234972160,268536320,436312320,167879424,436318720,167884544,369213952,335660800,335680512,335685376,335707392,335730432,335736064,335754752,335778560,335793152,335823872,168075520,168081152,402968832,436525056,402973184,302311680,453322240,335909376,369471488,352715776,369508864,352745984,335978496,386318848,403115264,185022976,252136960,369586944,302489600,419936256,386394624]},{"sector":6,"data":[369626368,369648128,369661696,369693184,336160000,319399680,403292928,336194816,403310080,336211456,352997632,336229120,235572992,235578112,235579392,369802240,707072,168479232,336255232,353051392,319512576,353080832,319543296,218895104,319568640,369929472,185392640,185400576,353184512,185423872,554527744,369998336,336456448,353251328,336491008,286174976,286185472,252646912,370094848,302998528,403668224,336569600,319801344,303034112,235932416,135288832,235953408,403745280,1103872,1836012032,28257,-16513664,17563906,-2130771980,100663808,-16056192,16843009,-2130706433,134153220,-17235328,-116817913,41945087,-2146959623,486081547,-102494848,-268795876,-243269618,-2147480058,486539272,14877824,-368803811,16843263,-16711935,-131330,33358076,33555198,16843265,33947906,33685762,49803904,100729346,16843266,131329,-50135548,-50267135,16711423,33489407,-2147352831,367920149,48956800,-16646142,-33423870,16711168,50201086,33555199,50397953,50266880,251429119,50266622,33686016,-16646142,-33489407,16711422,-15985280,16843009,-65281,-16711681,-33358079,-33292795,-50201086,-768,33358078,50071294,16646654,-16842754,-16646401,16908290,84083203,50463239,16777473,-2130771713,-130319,-50266369,-33358335,33161344,34277378,-2147417598,-63995]},{"sector":7,"data":[16908033,50266624,192938495,-33358336,-16450045,17039365,33817093,-2147352061,83813118,100598783,83952640,67240705,33555328,33751554,327940,-33161468,-33292796,-503152638,50398210,67110145,67044863,142607614,-2146697212,101382139,-151388032,118325254,-142601728,-2147478793,-59131,16908033,50266624,75497983,-2147479024,33494789,-16711423,343998463,-2145325568,33358857,100598782,83952384,16974594,-16580606,-83755774,-67109632,-131586,8388862,-16646656,-16580863,16973829,16908549,-2147417599,-16646142,-33423615,-50267391,-16778241,-65537,34080384,16581631,-318799851,-58715136,-2147481344,16844804,-65025,-33423616,-16515327,16973828,33620225,50266624,50004733,50201086,50332671,48957824,16843009,-16646142,-66913022,133922818,196353,197125,-16646398,83948928,16778243,16646655,134512894,33489153,-16711681,-16646655,327427,33620227,50266880,16581117,49742720,131329,-33358077,32769,33685762,50332161,33489663,16515581,-3,-16711937,16908033,192938495,197114,-16580861,-2147353087,318768652,15401344,-352288747,1052661,117897088,67469312,8391422,66978304,50332671,16908801,-16646141,-50135549,-50266879,-1,33489150,-16711169,-167280639,33685762,33555201,50201599,-92274178,-2147480853,328182]},{"sector":8,"data":[260112133,16908039,16711937,-16842753,-50266625,-16581119,327426,33751302,33620738,50266880,16581118,-16908289,-514,-33424128,-2147221758,33485318,50266878,100664575,33686273,41943298,50266624,16581118,-16908289,-2130706690,100664323,33423488,50201342,33752320,33489152,49512702,196354,75497989,-16580355,-16385021,261890,-251232251,50267643,83887103,-50067328,196353,50462979,50332673,16646655,-33619971,-2147418881,33423360,50332415,16908801,33555584,16646655,-16842755,167543039,33489405,67109631,16843265,262403,-16646397,-67043839,-257,-58654723,-16646656,196353,16908548,-2147417599,-16646140,-33423615,-16778240,-65537,-16052096,-50135549,-50266367,-65793,33489149,66978557,50332415,16908801,-16383997,-33358076,-50201342,-512,33489150,-16711169,-83591167,-16842754,-16712193,-33358591,42008322,33620480,196866,-16449786,-33358334,184909825,16843263,-255,-15990656,16843009,-2130706433,33491717,-16711423,8454143,33554190,66047,-16580862,118784001,152046064,302843008,116293632,75497490,-267841529,134512649,33489153,-16711681,-16646655,261890,16843011,33554945,33489663,50332412,49414528,16843009,-16646142,-2147287550,33491454,-16711423,310444031,-16842996,-33489409,-16646399]},{"sector":9,"data":[16973827,50397698,33489408,-117735170,67044094,33620736,125829377,589813,33620482,33423872,-130819,-16842755,-33554690,-50266625,-33423871,-16580862,16973827,33685763,50397698,50332417,33489663,-201424641,33556735,176161025,-2146043644,352840455,116324736,-84574190,-209715191,-2147482106,393222,263552,-352223211,-58714880,50334955,16843009,-16646142,-50200830,-167739391,16843010,33554945,33489663,-125828610,50333696,16843009,-16580606,-50200830,-2147421183,16971020,33620225,50266880,33423871,17240448,-393213,-33620477,-50266369,-16581119,261890,16974085,50463234,50332161,33424127,-252149506,50201086,67044095,50398464,33686017,92274946,-2146107388,352381697,183237760,33620736,16908546,-16449533,-33358077,-167641854,-351633408,33685762,50397697,67044608,50201343,92275198,-2146107388,352381697,15795840,-218726392,100663312,-176096513,-2147482102,1051638,117438976,263552,-352223211,109057280,-2146959119,1110774,-83950080,101381504,200704000,293601287,196871,-33292294,-16777730,-33424128,-16580862,17104899,33685763,33620738,50266880,-285638402,50201086,67044095,50398464,33686017,125829378,-2146959112,134281217,133758080,67469312,25171200,-2146107157,352381708,15401344,-336625643,109051911,-2147481856,789232,118222976]},{"sector":10,"data":[425984,92274695,-2146107388,352381697,132906112,368672768,176160775,-15663100,-33423869,-512,33423614,-16711169,-284786687,67047680,-8388097,-2147481621,352322565,15401344,-351436779,92278259,-2146694916,201913591,132903040,425984,-310378490,-2147481835,393222,263552,-352223211,-58714880,-2147481621,988665,117438976,263552,-352223211,-109047290,-2146105362,368700167,15402880,-352223211,-293595904,-2147482389,262157,102099840,557056,92274695,-2146107388,319613697,217052288,-352288749,-260041472,-2147482389,393225,102100352,67796992,50201085,83821311,67175168,33686017,131331,-33358077,-66978303,-50332416,-16843009,16711677,-33554304,-16581119,327426,17039619,33686018,163841,-33358078,-66978303,-50332416,-16843009,92340222,-2146107388,352381697,216792192,16843520,131329,-16580861,-134087423,-183992320,16843010,50332161,33489663,-192937474,-2147481846,33358858,50266878,50332927,33620993,16974338,-16580606,-33423870,-50267135,-16777985,-131330,8388862,-33423872,-16580862,16973828,33685764,-2147417598,-16646142,-33423870,-50267135,-16777985,-65794,1309568,50201087,33554943,16908545,33620231,16646400,-67403521,33620993,65793,92339969,-2146107388,352381697,216792192,16843520,131329,-16580862,-134087423,-167215104]},{"sector":11,"data":[16843010,33554945,33489663,-192937474,-2147481845,16971010,117637377,65793,-108986623,33686008,33620231,16646400,118522111,100728065,-16843265,16646141,50201085,33620480,16908545,16908806,-226491902,33686263,33687041,16843009,-33292286,-50201342,-16777984,16646142,-2130902778,352322569,15401344,-335970283,-100661505,100663311,-159319297,-2147481835,251659269,33686273,131331,-33358077,-251593471,62336,33751311,-2147417598,519159,100665216,67338240,-92269305,-2146302229,368700935,116127616,425984,75497478,-2146106364,268692477,-51379072,-352026603,-41937660,-2146434069,368898052,132903296,622592,58720262,-2146104060,353233908,-219479936,-335642603,109051910,-2147482112,398830,100664960,67338240,167774983,132905600,-2146828277,200928007,116782720,491520,-209715194,-2147481835,368247824,-202699136,-352288747,-100661505,-226492402,3605,-2147024902,536870916,14680448,-520126432,-109051897,-2147481824,403571712,2432,-536772576,-109043712,-2147481632,467193,135398272,-2147153669,-66584336,109052936,-16646396,16908290,-65279,218464511,16711936,-16646400,327426,16843010,117441025,16843265,16055680,33685769,-2147483391,33552124,33358330,33555199,16974337,-16646141,-108986878,-16646405,16908290,-2147417598,352322565,15401344,-184516587,-16581118]},{"sector":12,"data":[16973826,50397698,67043840,33358590,-130818,109117182,33620725,196866,-33292542,-2147353086,322550,-15855744,16843009,-16842497,-33554690,-33424128,261890,33751298,33620738,50266880,-168197890,50201086,33555455,33686273,260047106,-2146107388,352381697,-17432704,-16777474,-33424128,261890,33751298,33620738,50266624,-168132354,50201086,33555455,33686273,58720514,-2147482389,267775,202441856,-131072,-16777218,-50266625,-16581119,16908291,50463235,50332161,-2130836737,-50267137,-75432193,-33423617,261890,33751298,-2147417598,33490186,-16711423,-256,33423614,301990655,-1375360,196353,-218333166,-125829112,-2147481842,33426184,50266623,33620480,16908545,-16646142,-33423615,-16777728,-65537,-25165570,196353,-2147352316,-33488890,-16778240,16843136,16712447,-2147418623,33490935,16777983,16974337,16973829,-209714943,50397691,50332929,131329,-50135295,-50267647,16711679,66978303,67469567,25171200,-2146107157,-33360640,196355,33620227,-58717440,16843506,-2146762750,322546,118881408,294912,92274695,16908036,-65279,117473535,25169408,-2146565902,324348,118422656,67534848,16843263,-255,459136,-33358062,-16712191,33489151,-16711169,-335249407,50270720,-8388097,-2147482389,352322565,15401344]},{"sector":13,"data":[-234192875,92277494,-2146957572,134674681,82571904,117932032,-276824058,-2147481842,393220,263552,-352223211,-58714880,-2147482389,464380,722304,-234782706,8392192,66978549,50332415,131329,-218333173,33620226,25168640,66978549,50332415,131329,-218333173,33620226,-411038976,-2147482382,462588,117441664,294912,92274695,-2146566133,234942977,49610880,50267134,16843520,-2146762750,16970492,184549889,83030656,251428864,75497479,-2147481856,33360649,67044094,50397696,16974338,-16580606,-50201086,-33554944,-131330,8388862,-33423872,261890,33751298,-2147417598,-16646142,-50201086,-33554944,-65794,722304,-352223211,8393984,50201326,50332415,16908801,-16646141,-50135549,-33489407,-2130772225,16971014,50397698,67043840,33424126,83031680,368869376,260046855,-2146107381,352381697,-17891456,-16777474,-33424128,261890,33751298,33620738,50266624,-168132354,50201086,33555455,33686273,58720514,-2147481849,234883845,15860096,-134184946,-33358591,261890,16777473,-65025,-192872703,-2147482369,462588,17632640,-16514818,-16777218,-33489665,130817,33620226,33686785,-2147417855,16906741,33882370,16843010,33489664,16515582,-2,67174143,92339713,17891332,33620483,33489408,-285638402,50401536,-92274431,-2147481358]},{"sector":14,"data":[184552197,16974337,-16580606,-159318526,17498357,-2147417598,234942983,15860096,-219054066,125829124,-2147482624,265983,101385088,-218398706,109054981,-2146501900,455416,100664448,184844288,-41939452,-2146761742,251458820,82969728,-218267634,75500291,-2146501387,520945,100665728,184844288,-159379957,-2146563086,250933760,116588160,294912,-260046842,-2147482098,393220,101385344,-218398706,109054981,-32572684,-33358332,-16711935,33489407,-318865407,75497478,-2147482112,250940174,-168686464,-234848242,-67107585,-192937972,3086,-2147155972,33423369,50266623,33620480,33620225,50201088,-917120,16908290,16843010,-16646142,67304450,131330,-16580862,196353,-2147352318,33747711,50266624,50266623,33620480,16908545,1152,360480,16843010,33554945,33489663,33555199,-8388094,131570,-16580862,196353,67240194,-16581630,16908290,16843010,-16646142,-234782718,33555198,16843265,33554945,33489663,58720766,33423379,50266877,67174912,33620483,33489408,49185022,-16581119,16908290,16909060,-16646142,-33489663,1802658125,539903008,1819894100,335610112,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076]},{"sector":15,"data":[-1879048191,65281,319881248,536879360,24190,0,128256,0,130048,268435456,167772160,268442368,352333568,335561472,402690816,419483648,134295296,234961152,234970880,268535040,436311040,167878144,436317440,167883264,369212672,335659520,335679232,335684096,335706112,335729152,335734784,335753472,335777280,335791872,335822592,168074240,168079872,235195392,436523776,235199744,302310400,453320960,335908096,403024640,352712448,386283776,386298112,369530624,369539328,436668672,218576384,302467584,386363648,336043520,453490176,419948544,369625856,386423808,369659136,403243520,386486016,352948992,420065024,336190720,436860416,369761792,352993536,369779456,235568896,235574016,235575296,369798144,702976,168475136,353028352,319492864,302732800,353076736,302765312,252446464,336349696,353147904,218944768,218957312,336413440,202211584,554541568,386794496,302926336,353273600,336516608,286200576,286213120,235895296,386898688,336584960,487592704,336617728,353415424,336658176,236009472,135365888,236030464,403822336,1180928,1836012032,28257,-16513664,17563906,-2130771980,100663808,-16056192,16843009,-2130706433,134153220,-17235328,-116817913,41945087,-2146959623,486081547,-102494848,-268795876,-243269618,-2147480058,486539272,14877824,-368803811,16843263]},{"sector":16,"data":[-16711935,-131330,33358076,33555198,16843265,33947906,33685762,49803904,100729346,16843266,131329,-50135548,-50267135,16711423,33489407,-2147352831,367920149,48956800,-16646142,-33423870,16711168,50201086,33555199,50397953,50266880,251429119,50266622,33686016,-16646142,-33489407,16711422,-15985280,16843009,-65281,-16711681,-33358079,-33292795,-50201086,-768,33358078,50071294,16646654,-16842754,-16646401,16908290,84083203,50463239,16777473,-2130771713,-130319,-50266369,-33358335,33161344,34277378,-2147417598,134153220,-17235328,753671,66978558,100599038,83952640,50463746,-25165310,-16449822,392963,17105156,-2147220989,33685507,67240706,67110145,83756543,50201598,48366208,16974084,-16515067,-33292539,67665924,-75494400,-2147087625,116849152,462208,-134774766,92274706,33554201,66047,-16580862,268730369,92274706,16908055,-65279,1343743,159391982,-33424124,392963,33882371,33620739,50266880,16450045,-17039363,-16777731,32768,33489406,100598527,83952384,16843265,41943298,33489408,33423871,-196357,-65541,-2130706689,-16644090,352386307,15531904,16547860,75497481,-16711416,16776961,33423871,83821567,16843520,131329,-50135294,-33359102,-16581119,-2147287037,16968457,33620225]},{"sector":17,"data":[50266624,50070269,17300352,83886847,33555202,-2130771457,50659573,-16711676,-33489407,17302656,-16646399,33489151,67043838,50332927,131329,-50135293,-2147418879,16971523,50332161,33424127,33554560,16908801,-16580606,-50200830,-50267135,-1,33489150,-16711169,-99909631,50332417,33489663,209715710,-2146238458,352381697,-169148288,-2147479537,460535,-33290880,32778,-16515582,16973827,50397698,67043840,33358590,-196355,-16777217,-16646400,33489153,49678208,16908801,-16646141,-33358333,-335904767,-159383542,83887361,118456575,16843263,-16711935,-65793,33358077,50266878,100664575,33686273,131331,-33358077,-16712447,-16843265,16777213,50201085,109052927,-33423630,-16580862,17170436,33686019,163841,-33358078,-16712447,-16843265,58785790,-2147090428,-33423872,196098,131845,-33423615,33747840,83886847,-50036734,67044096,50267644,83887103,-68090240,-16580859,-2147155965,33358856,50332415,16974337,-16580604,-50266623,-131329,8388860,-16646656,16973826,-2147417598,-16646140,-50266623,-65793,-49677184,-16646399,17039362,50397442,50332673,33489407,-261890,-33554434,16548095,33489406,67109631,16843265,75497730,33489408,16646655,-65540,-2130706689,67046160,33358590,-196353,-33554690,-50200832]}],[{"sector":1,"data":[-16515582,16973826,50397698,83822080,50201343,16581117,-16777218,-16646400,33489153,-17103744,-65793,33489149,50201341,164095,33685762,100664065,50267391,33424126,-16054912,16843009,-2130706433,33491968,-16711423,92340223,16908043,-65279,234914047,-16646145,33554689,33489663,-117437824,-2146433264,1182980,302444160,294912,284758023,17302656,-16646399,33489151,50266622,50332671,16843009,-16646142,-66978046,-2147287038,16970241,33620225,50266624,-25165058,16908041,-65279,202539263,-65793,33423613,67043839,33620736,196866,-33423614,-17237120,261890,16908547,-184057855,33556735,131330,-50201086,-33554944,-16843009,-131074,33358077,50201086,67044095,50397952,33686017,16974082,-16580605,-16646398,-786816,16908296,67993601,226498035,-2146106901,318893566,167442304,116490240,109051910,-2147482112,368706569,-85260416,-352157675,16973835,33554945,33489919,25166333,16843510,-16646142,-33423613,16220161,16908297,33554945,50201599,15991292,32837760,131329,-33292542,-2147353342,67090,117440001,-16777728,-65537,33358077,66978558,83821567,50397952,16974081,-16646141,-33423870,-17761152,-33358335,-16515325,16973828,33620227,67731457,125834746,-2146043157,649986,16843011,67109633,83756287]},{"sector":2,"data":[33424126,16187900,48959360,16843009,-16515069,-33227260,-50201086,67731457,125834746,-2146043157,150925578,267582080,458496,183730426,-209715194,33558283,-2147090949,368706569,-85260416,-250970091,-92272386,-16773134,-2131099642,396019,118223744,101875712,-33488895,-33552641,-257,16646142,50201085,67044350,50332927,16843521,131331,-33358077,-75432958,-33423630,-16515582,327427,16974083,-2147417599,-16646142,-66912766,117505408,67731456,125834746,-2146043157,368765714,-85260416,-336232427,109051911,-2147481856,789229,118222208,425984,159383559,-2146043388,368765703,132842112,368279552,260046855,-15598844,-33423614,-33489407,16711679,33489406,-2147352831,301723404,50201343,132842880,67731456,125834746,-2146043157,233827091,83625856,-184844276,-159380476,-2147481621,393222,118876032,425984,159383558,-2146043388,368765703,132842112,368279552,-100532209,159385341,-2146043388,352447238,32178304,-317947885,226498035,-2146043157,368765703,82572416,884736,-444596220,-2147482091,458760,-100398720,-351895531,-109047289,-2146301967,368765702,65795712,688128,-411041786,-2147482091,33358860,66978558,83821567,50397952,16908545,-16580605,-50135550,-66978559,-33555200,-65537,8388861,-33423872,-16515582,327427,33751299,229378,-33358078,-50201342]},{"sector":3,"data":[-50267135,-16843265,-100398720,-351829995,41948666,50334955,131329,-33292542,-134087678,-183795712,33620226,67043840,33358590,118157696,67928064,50201085,67044350,50332927,16843521,196866,-33358077,-50201342,-50267135,-513,16646142,-33554304,-33358335,-16515325,16973828,-2147352061,-16646141,-50135550,-66978559,-33555200,-159318274,33488915,33489662,16843264,17235970,16777729,-2130771714,100793340,65793,159448833,-2146043388,368765703,199950976,16843520,-16646142,-50200829,-2147420415,16971274,33554945,33489919,-58719746,16843264,17301761,16777729,-2130771714,117635835,65793,-327090431,-2147481854,67091,117440001,-16777728,-131073,33358076,33555198,16843265,33686535,49804672,17041154,131329,-16580861,-66978559,-768,16711679,17235966,-2147483138,368706573,-85260416,-335577067,-100530435,117374991,-259982848,-2147481835,201131016,50332927,16974337,-16580604,-50201086,-209653500,-15991552,16973828,-2147417598,519165,100665216,67534848,8393985,-2146237973,368307468,116129152,425984,142606342,-2146042364,335473411,-152237696,-351633387,58725886,-2146173205,368504073,132904832,622592,125829126,-2146105596,352840698,-320141696,-352026603,109051910,-2147482112,398824,100664960,67534848,201132548,82509952,-2146697974,183954189]},{"sector":4,"data":[116849024,491520,-310378490,-2147481835,367854612,-303360896,-351895531,-100530435,-327155698,33558037,-2147025414,536870916,14680448,-520126432,-109051897,-2147481824,403571712,2432,-536772576,-109043712,-2147481632,467193,135398272,-2147153669,-66584336,109052936,-16646396,16908290,-65279,185630975,83822590,16843264,-33423357,-41878015,-16253194,16908292,-100696063,-33555200,16711678,66978301,50332671,16843265,131330,-50135294,-75432703,-33423623,261891,-2147352316,234619912,50397952,58720513,-2146566932,-50266112,-16581118,16908290,33620225,67044096,33358846,-130818,-67043841,33229184,-16515070,-33292797,-335839231,243269636,16842766,-65536,-33554690,-33424128,261891,16908547,33620481,50266880,-151289603,66978302,67109887,310379009,-15795196,16908292,33555201,-2130836994,251457535,33555711,-8388351,-196359,-16777475,-33424128,261891,16908547,33620481,50266624,-2130902531,33487355,67044350,33620992,82578048,335839232,-16515324,-33423869,-65793,33358077,67044350,33620736,16908545,-16580606,-75432446,-33423627,261891,-2147352316,33490191,-16711423,-256,33423614,50266623,251462655,50267391,-18544000,-16580862,-16122364,-16515324,-33423614,-16712191,33489151,-16711169,-335183871,293601290,-15795189,-50070013]},{"sector":5,"data":[-33489663,16777215,33489407,-2147352831,251456782,66978815,125829630,-196366,-16777475,-33424128,261891,16908547,33620481,50266624,-2130902531,33487355,67044350,33620992,-100398976,-351829995,41948666,50070265,50266878,16843264,-33423359,16973830,-218202111,33554946,50333438,196865,-33423870,82833792,67731456,16843263,-255,17561728,66978558,65792,458243,-2147417853,16904959,117310208,16843520,-33423357,176225793,16908036,-65279,200835327,-33358335,16842755,184353536,50267135,33423871,-65282,-16646400,33489153,32245888,-50135039,-16515318,-2147287550,368706568,-85260416,-217219051,16843263,-16711935,16777215,83624446,16646654,33555072,17170945,-117735423,100794625,131329,-50135294,82834560,67665920,83824380,16843264,-33423357,-8323583,-15794961,16908292,-352288767,25165828,50200847,16778238,-16646143,-2146959868,16904705,83821056,58722302,50070265,50266878,16843264,-50200575,-234848246,33554946,58723069,50070265,50266878,16843264,-33423359,16973830,-218202111,33554946,50333438,196865,-33423870,17760640,66978558,65792,-33227006,-234782713,33554689,134087935,49873792,50201340,33555199,65793,458242,-2147417853,33747710,117309952,16843520,-33423357,159448577,-33424117,261891]},{"sector":6,"data":[16908547,33620481,50266880,16581117,-65539,-16777473,32768,66978302,67109887,75497985,50266625,16581117,-2130771972,-33485055,261634,33554689,251397375,32179072,-16646143,-2146501628,-50204155,-16581374,16908290,33620225,67044096,33358846,-130818,-50266625,33163648,-16515070,-33292797,133398529,276824071,-2146043381,368765703,15860608,-16908291,-50266369,-16515583,16973827,33620226,33554945,33358591,-100957955,66978302,67109887,41943553,-2147481848,-33485055,261634,33554689,134087935,32637312,-16646143,-2146959868,-66914045,-16581118,16842754,33489152,-16646145,855680,257,-33554433,-50266625,130817,117506306,-2147417852,16906743,16843783,33489664,16581117,-3,130816,159383808,-15795196,16908292,33555201,-2130836994,251457535,33555711,-41942783,-2147481102,-33485055,261634,50331905,33556222,-25165310,66034,458243,33620226,33554945,50201343,-117276420,83822590,16843264,-33423357,-41878015,-16253194,16908292,251756545,-33358335,16842755,117310208,33686016,32702080,-33357823,16908294,16843265,50266880,33358590,-261892,-2147352320,-33485055,261634,50331905,33556222,-25165310,66034,458243,33620226,33554945,33424127,-150830850,50334206,16908545,-16646142,-33423870,-83821567]},{"sector":7,"data":[33620223,-16844672,33751049,251887618,-16581374,33619971,-25165056,131579,-16449789,-33358334,-16711935,33489151,-16711169,-66682879,33620736,-16646141,8453378,16908279,16711937,-1,-33423872,-16580862,16973828,251756546,-33358335,16842755,117310208,33686016,32702080,-33357823,16908294,33620481,50266624,-2130967810,251459843,66978815,16581117,-2,-16646400,33489153,-51573120,-33292530,-2147353085,50268945,116916990,50266878,32899456,66978558,-2147351552,-16645897,17039363,-192937982,67109386,33555201,16220415,197124,-33423870,-33552000,-16646399,16908290,16843010,-33423358,-234782718,33555199,16843265,33554945,50070271,33620484,50266624,50266623,33620480,49479552,-16646142,-16646398,16908290,33620226,294913,92282880,16843264,131329,-16580862,196353,-2147352062,33682175,50266624,50266623,33620480,50070020,33555199,16843265,33554945,25166591,196338,16908546,131329,-16580862,-2147353087,-33549565,-16581375,16908290,16909060,-16646142,-293536255,50200834,33555199,33752065,33554945,16581119,1918979582,776216683,2036421664,7499628,513212672,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624]},{"sector":8,"data":[65536,131108,1638403,131076,-1140850688,65282,319881248,536879616,24190,0,128256,0,130048,268435456,184549376,302005760,352347136,335575040,402711296,436281344,184658944,235001856,235014912,268582400,419595008,184721152,419613440,184736000,386070272,335742208,335766528,335778560,335808512,335845376,335857408,335883776,335917568,335937792,335975680,185014528,185029888,403152640,419931648,403161600,319277312,453520128,336107264,369677056,352935424,369730816,352981760,336240384,386602240,403407616,202115584,269241088,369925120,302845696,437085696,403558144,370020352,370046720,370073088,370110464,336592384,336614144,403747328,336658688,403782144,336697088,370274560,336740864,236095232,236100352,236101632,370324480,1229312,185778688,336784896,353588224,320055808,353626880,320096512,236230144,320134400,387286272,202765568,219561472,370575360,202829312,571941376,387436032,337133056,353932544,337182720,286876416,286895616,253361920,387589888,303723264,404399872,337310464,320553728,303794432,236703232,136059648,236724224,404516096,1874688,1836012032,28257,-16513664,16908289,-184516600,69120,32702336,-2146566144,16904704,150929920,-16253056,16842753,16777473,-65281,-2147418113,16777472,-16777215,92274943,130820]},{"sector":9,"data":[-100564986,25167615,-33488391,-116752378,100663807,-392832,-117342202,117309697,-117437568,-535986144,-92266247,-2147479827,919281,2176,-486244323,75504896,-65300,33685504,-131072,-33554434,-50266881,196097,50462979,33687042,131329,-2147287293,33682165,33947906,33620226,-789120,16908290,100729346,16909058,-16580606,-50200830,-50267135,-1,50200830,-16646144,-2130771968,367920149,48956800,-16646142,-33423870,16711168,50201086,33555199,50397953,50266880,251429119,50266622,33686016,-16646142,-33489407,16711422,857728,65535,514,-2,-16646400,-33161726,-33358333,-33489919,16711679,117309949,33424124,-130818,-16777474,196353,33751299,50660355,33620483,16646400,49250559,-50266369,-16646655,33228416,33587452,-58655489,-2147156224,50463489,50529540,-176160510,-511,33358078,-2130967298,67238653,84149251,16909059,-16711679,-16382080,-16711935,33489151,16777727,-16580607,-2147353086,16841217,-16777215,25166079,-2147417854,83885568,-33551744,-33292798,392964,33882372,33751556,-419659774,83821567,67175936,41943809,-16580632,458499,17170694,-2147352317,33685508,67240706,67110145,83756543,50201598,31851648,262403,-16449786,-385974269,50397697,100664833,67045119,142607103,33685252]},{"sector":10,"data":[-2147352822,201389056,32768128,17497601,-134512639,101187585,-159383551,-2147087622,16841462,16778250,-393088,-16320512,-99975168,176162550,-167706374,-2147418108,285214476,-8388607,495,-134774767,16777233,16772992,-2147479295,33495047,-65281,-16646400,16842753,50266880,25166334,16843002,-65536,33652736,8388865,-2147155970,1117956,-276823808,285278463,369459200,16777727,65793,-16711935,16777215,65664,257,-2147418113,552468500,293601281,-301989408,67731488,66978301,50333183,50464001,131331,-50135293,-50267391,-33620993,16711677,-16581248,327426,17039621,557058,-66978303,-50332928,-75432193,-16646402,392962,17105157,-2147417598,-16646142,-83755519,-67110144,-65793,395648,-318668781,25170432,-2146107156,66972416,-8388098,-2147481071,33488890,-130432,-33325054,-8388095,-2147417345,16779268,-16777215,8388863,16777727,-16711679,-16711935,33489151,67043838,50332927,16843009,-16646142,-83690238,-33423870,261890,-317947901,33554945,-41942273,16843512,-16646141,-66912766,133922818,196353,262405,-176095486,67241216,-2130771712,50724854,-16711676,-33489407,525440,257,-2147418113,130816,16777473,16712191,-16711681,-16646655,327427,33620227,50266880,41943549,131576,-2147287293,16972029]},{"sector":11,"data":[50332161,33424127,50396800,33620480,131330,-16580861,-66978559,-768,16711679,33489407,65792,-16646399,-99909632,50332161,-58719489,16843510,196865,-33292541,-67600383,65792,16776960,461696,-318668782,25170432,-2146107156,267774720,-159383536,-2147481594,33488891,-130432,-33325054,-8388095,-2147417345,184419333,-16515582,16973827,50397698,67043840,33358590,-196355,-16777217,-16646400,16842753,33489152,192938239,131576,-2147287292,16971260,50397441,67044352,33423871,16513408,257,-2147418113,716801,134346368,33062912,-16515068,243334914,16842759,-65536,-16678912,33489151,16843008,-16711679,-16777472,16646142,50201085,83821311,50398720,16974338,-16580606,-50201086,-33554688,-131330,33423614,50266623,-589440,327426,16974086,-16154623,-50266623,-75432193,-16646411,-16580863,17235972,33685763,163841,-16646398,-50266879,-513,58785790,-2147090428,50395662,100402175,83821311,25166848,-16580617,-2147221501,100397319,67044350,132096,32504192,50201342,33752320,33489152,49578238,196353,-109051646,50266370,83886847,67665921,50266621,33620736,262403,-33423613,-16777984,16580605,-16646528,16973826,557058,-50266623,-92209409,-16646145,16973826,-2147417854,-16711676,-50266623]},{"sector":12,"data":[-257,-49677184,-16646399,17039362,50397442,50332673,33489407,-261890,-33554434,49905919,67109631,176161281,16646400,-2130771972,33488633,67109887,16909057,33555584,16581119,-16908292,352682239,65792,16776960,-521600,-33423614,-50266623,-65793,33489149,66978557,50332415,16908801,-16383997,-33358076,-50201342,-512,33489150,16777727,-16711679,-2147418367,-16779520,-33424128,33491328,196865,-16449786,-67403774,-2,-50266625,-16646911,42008322,16843264,196866,-16449785,-33423614,184909825,16777727,65793,-16711935,16777215,65664,257,-2147418113,33491456,16843008,-16711679,-256,8388863,16842753,-65536,184909824,16777727,65793,-16711935,16777215,65664,257,-2147418113,33491970,-65281,-16646400,16842753,50266880,25166334,16843002,-65536,33652736,8388865,-2147155970,166725396,75499792,4363,-1081343,1114368,285732736,-2147418112,16842735,75497489,-267841529,151289865,130816,16646656,-33423872,-16580863,16973828,33620225,50266624,50070015,32965760,-16515071,-117604351,33620226,50267136,-41942529,16973825,-196608,117473280,16777727,65793,-16711935,16777215,65664,257,-2147418113,-16839662,16646142,33489406,50332671,16908801,-16646141]},{"sector":13,"data":[-75432447,-16580872,16973827,-2147417854,150992135,16908800,-33423358,-33489663,-16777729,-65794,16646141,33423869,50266878,50332671,33620737,16908802,196867,-16580861,-25100543,589811,-2147417854,351863818,116328064,-285507566,-92270074,-2146105365,654068,101118848,360448,-260046841,-2147352577,16973569,-16840064,-33390591,41943807,-2147351810,352322565,15466880,-335445997,-75492096,50334955,16843009,-16646142,-50200830,-133988351,33554945,-41942273,16843512,-16515070,-2147353086,459001,16843011,50332161,33489663,15991293,32968576,-16580606,-134381566,33620226,50267392,-176160258,-2147417365,33685503,-130176,-33390590,-25165314,-2147353069,50331138,33424256,-32766,293601538,16580871,-16908538,-33554690,-33424128,-16580862,17104899,33685763,50397954,50266624,-2130836994,50328564,83887103,33620737,-17955712,-16515583,17104900,33751556,67469313,25171200,-2146238228,352381953,183237504,33620736,16908546,-16449533,-33358077,-167641854,-301039616,50397697,67044608,-58719489,33620718,262403,-33227003,-2147353085,16968695,33554304,-33325054,41943807,-2147352834,33428478,-130432,-33325054,-8388095,-2147417345,352322565,15466880,-335445997,-75492096,4331,83197958,8388614,-2146959108,1050613,-243205632,-2147417359,33685503]},{"sector":14,"data":[-130176,-33390590,109052414,-2147416577,33816573,50265728,-33587197,-75495935,17104640,-100630524,33686270,-50528128,-2147417087,33425912,-130432,-33325054,-8388095,-2147417345,-16449532,50462080,50233598,-8323838,-2131099389,352322565,15466880,-335445997,-75492096,4331,83197958,8388614,-2146959108,526325,49019264,-32767,58720769,-2147287042,33488386,100599424,-163839,-25165309,-2147286274,100793855,-16712832,-2147221244,50264576,8389122,67239165,167280641,41943550,-2147287042,33684995,50331520,118587393,100728065,-16843265,16646142,50201085,67044095,50398464,33686017,196867,196354,-134217471,-592768,261890,16974085,-301694974,66978302,83887359,50463745,125829378,-2147155719,100727551,-25165313,-2147481351,16908537,33554304,-33325054,41943807,-2147352834,352322565,15466880,-335445997,176166144,-2146107157,318827521,15466880,-336625643,75497480,-2147481600,658161,135000448,294912,-310378488,-2147417365,33685503,-130176,-33390590,142606846,-2147417345,33685503,-130176,-33390590,-226491906,-2147353069,50331138,33424256,-32766,142606594,-2147352833,50331138,33424256,-32766,92274946,-2146107388,318827521,15466880,-335839211,-125829112,-2147481579,16968697,33554304,-33325054,41943807,-2147352834,33428478,-130432,-33325054]},{"sector":15,"data":[-8388095,-2147417345,285213705,33489919,15467392,-2147221744,285273090,33358847,-130818,-33489153,130817,16777473,16712191,16646272,257,-2147418113,585731,33618304,-32767,58720769,-2147287042,33488386,263552,-335445995,25170688,-2146107156,200666123,134087552,-168132597,-109049081,-2146629389,584687,100664704,367886336,75497480,-2147481856,16968686,33554304,-33325054,41943807,-2147352834,16908042,-16842112,334725121,41943550,-2147287042,33684995,50331520,-32997375,41943806,-2147351554,352322565,15466880,-335445997,-75492096,-2147481365,988664,-226428416,-2147417359,33685503,-130176,-33390590,-25165314,-2147353069,50331138,33424256,-32766,58720514,-2130770688,-33357315,33750656,67076349,92338689,-2146172924,352840704,116128384,-285507566,109056518,-2146043410,352381703,15466880,-335445997,-310373120,-2147482133,327692,102099584,557056,-343932920,-2147417365,50331409,-16907648,334528513,41943550,-2147417345,33488652,-130432,-33325054,-8388095,-2147417345,335545349,250347648,-336363499,-176156148,-2146300690,335605504,99348352,622592,-327155706,-2147482091,16968699,50269312,-16613375,-226491906,-2147353069,16973570,-50066816,-16581119,327426,17039619,50463234,50332161,33424127,16515582,-196611,-33620226,-2147418369,50267132,83887103]},{"sector":16,"data":[33620737,16779904,16581118,-131077,-33914626,66978302,83887359,50463745,41943298,50266624,16515581,-16973829,-2130706691,352322565,15466880,-335445997,-75492096,50334955,16843009,-16580606,-50200830,-2147419903,33683210,50266880,49806720,131329,-33358075,183795713,-109051896,-2147417365,33685503,-130176,-33390590,-25165314,-2147353069,50331138,33424256,-32766,176161026,-33424124,-16580862,16973828,33685764,33620738,50266880,33423870,-196356,-16842756,-16777730,66879488,67044095,50398464,176161281,33423616,-327427,-2130771971,33488378,83821566,67175680,16909058,33555072,33358591,-327428,-16908548,318472447,-16581119,16908289,100729345,131585,-33489407,16841856,16843010,-100892672,16844034,-16711679,263552,-335445995,25170688,-2146107156,846843,16843011,33554945,33489663,16318973,33032832,-16646142,-117604350,33620226,50267136,-41942530,16843264,17170946,16777730,-2130837250,33620220,65793,33028736,17171201,16777473,65962239,-109051896,-2147417365,33685503,-130176,-33390590,-25165314,-2147353069,50331138,33424256,-32766,276824322,16580871,-16908538,-33554946,-33424128,16973826,100795138,16843266,-16580606,-218791934,16908801,16908806,-176160255,196595,33685762,50464257,131330,-16580861]},{"sector":17,"data":[-50201343,-16777984,16646142,-2130902778,100664322,16385920,-335445995,25170688,-2146107156,100723463,284881024,368345088,-176160760,-2147024917,67041794,-33750144,-33193982,192938491,-2147416577,33816573,50265728,-33587197,-142604799,-2147353074,50331138,33424256,-32766,92274946,17760260,50463235,50332161,33424127,-2131623683,251658483,8389121,17826030,33620227,-336101375,109051912,-2147482112,16908525,33554304,-33325054,41943807,-2147352834,16973578,-16842112,67338241,-92269305,1181419,-335839229,109056518,-2146108945,519159,100664704,15695872,41943554,-2147287042,33488386,50268800,-16678911,75497983,-2146106364,268692477,-25164544,-2146434069,285077507,75499007,-2146106133,268692477,-25164544,-2146434069,268300547,-243268097,-2147481365,131075,100664192,15433728,-25165565,-2147351809,50331138,-16907648,-15958015,41943298,-2147352833,353108995,216790400,-336232427,-8383220,-2146175764,519421,100664704,367951872,92274694,-2147481856,33811439,-130688,-33390590,159384062,-2147417345,33488642,-32246656,-16613375,159383810,-2147352833,50331138,66978176,67338242,167774983,132905600,-2146893813,185068794,109054464,-2146764052,521717,100665216,368214016,-209715192,-2147417365,33488643,50269056,-16613375,-125828610,-2147353069,50331138,33424256,-32766,293601538]}],[{"sector":1,"data":[61956,-99844090,226498036,-2146044693,368372493,234946176,-2131099648,117436915,-17169792,-50102269,92275453,-2147353602,-16444407,50462080,50233598,-8323838,-2131099389,536870916,14680448,-520126432,-109051897,-2147481824,403571712,2432,-536772576,-109043712,-2147481632,467193,135398272,-2147153669,-66584336,125830152,-16646652,16973826,16777473,-65281,-16711681,98305,65792,16776960,-262016,-33521660,92274945,33488910,-33423360,33423360,83821311,16843264,131329,16908551,-184778751,117441025,-58719743,16843251,17301506,16843522,-134512640,33227263,50266621,33620224,196867,-33423614,-132992,16842754,-116948990,33423868,16777983,16843265,263552,50266389,-302088192,-58715648,1517,-167739372,-16581119,16973826,50397698,67043840,33358590,-130818,159448831,131576,-2147287292,16971260,50397441,67044352,33423871,49018752,-32767,260047361,-65521,33685504,-16908288,-33554690,-33424128,261890,33751298,33620738,50266880,-118128386,67109631,75497985,-16646411,261889,16974084,-2147417599,352322574,-58720251,-2146238228,388348,-25160448,-16842763,-50266369,-16581119,16908291,50463235,33554945,-2130836993,50329847,33620992,-17496960,-16646399,17039363,33620227,-352092159,-8388350,-2147352065,33624322]},{"sector":2,"data":[50331520,285573121,-33554421,-257,16711677,50201085,33555455,33686273,131331,-33358077,16449408,-2130771969,50266615,33620992,16451968,-16842755,16679167,33489406,67109887,16843521,209715458,-65530,33685504,-131072,-33489409,-16646399,-2146435069,67104002,58724096,-16646164,-2146303998,652027,135198592,-294912,41943550,-2147287042,33684995,50331520,202342401,-16711423,16777215,33489406,-16843648,-16646399,16908290,33620226,33554945,33489407,-130818,-16777218,-2147418369,50266878,33620480,16778880,-130818,-17006338,50266623,33620992,41943297,33489152,-261890,-2130706434,33491195,16777983,16843265,262403,16843011,66909568,50332673,-51085311,16974081,16973829,16777729,33358591,-196358,-16711937,-16515583,-33095552,16711679,50201087,67469567,25171200,-2146238228,388348,8393984,33423862,67044095,16843264,196865,-184647671,134218497,32767360,196865,15892490,58720264,-2147481600,16968686,33554304,302022658,41943550,-2147287042,33684995,50331520,-16285695,41943550,-2147287042,33684995,50331520,67469313,131584,16711168,384,-32766,-25165822,-2146566138,201388801,99875968,-2146566144,524539,49478016,-32767,8389121,-2147353077,50331138,33424256,-32766,125829378,33685508]},{"sector":3,"data":[-16908288,98304,-8388096,-2147482881,285214462,33489919,15467392,-2147221745,388605,67047424,33423871,-65283,196096,16712192,58785536,-2147417363,33685503,263552,-335445995,-58715392,1516,-217481195,75500023,-2146957316,117897721,117045632,-218267641,-293601273,-2147481586,458755,49016704,-32767,159384065,-2147417595,33423107,-32705152,-33390591,58721023,-2147352066,16973823,-16906368,-33456126,92275204,-2146107388,318827521,99417216,-2146107392,524539,49019264,-32767,8389121,-2147353070,50331138,33424256,-32766,92274946,-2146566133,201388801,99875968,-2146566144,-33425920,-16580863,16908291,50397441,-25163520,197108,-201490424,50397441,41945600,33423862,67044095,16843264,196865,-184647671,134218497,32767360,196865,15171594,58720264,-2147481600,524291,49472384,-32767,8389121,-2147353077,50331138,33424256,-32766,125829378,-2147352833,50331138,33424256,-32766,125829378,-2147352833,50331138,33424256,-32766,92274946,-2146566133,201388801,99875968,-2146566144,-33425920,-16580863,16908291,50397441,-25163520,197108,-201490424,50397441,-226489856,-2147481600,524291,49475200,-32767,8389121,-2147353077,50331138,33424256,-32766,125829378,-2147352833,50331138,33424256,-32766,159383810,-33424117]},{"sector":4,"data":[261890,33751298,33620738,50266880,16581118,-16908290,-16777730,66879488,67109631,176161281,16646400,-2130771972,33488378,67043839,50398208,16908545,33555072,33489407,-261891,-16777219,184910079,25171200,-2146238228,388348,8393984,50201070,50332415,16908801,-16646141,-50135549,-33489407,-2130771969,33683465,50267136,49675392,16843009,-16515069,-33423613,133595137,-109051896,-2147417365,33685503,-32374656,-33390591,58721023,-2147352066,16973823,790144,-318668780,-25161216,16777965,-2146107137,-16781570,16711678,50201085,33555455,33686273,131331,-33423614,-460928,17039362,-184254462,33489406,67109887,16843521,41943298,-2147481593,33488891,-130432,-33325054,-8388095,-2147417345,234883845,15925632,-201555956,234881029,15992704,65535,514,-16777218,-33423872,-2147221758,526587,49478016,-32767,8389121,-2147353077,50331138,33424256,-32766,226492674,16646413,-65788,-50331905,-16646656,16908289,83952130,16843265,-168394749,25166847,83952129,-2147417599,83820801,32896640,83952130,16843265,-16580606,-66978303,-512,16711679,-2130837244,234882565,16843521,131330,-33423614,15792256,-2147352305,-33361922,50401536,-109051647,-2147481102,150997765,16843521,196866,-16646398,-159318527,17367287,-184844286]},{"sector":5,"data":[167772165,16843521,15861632,-2147482354,201389052,99875968,-2146566144,16970481,33554304,168656898,-8388095,-2147417345,235277059,99810176,-184778740,92277765,-15991819,-218595326,58720263,-2147482112,33751281,-16907648,-16220159,25166082,-2147352577,235145988,66256256,-167870453,58723075,-15991307,-234586109,-41939452,-2146761742,194044,58723075,-16056842,-219054077,142606344,-2147482112,16974059,-16841856,-15958015,41943298,-2147352833,235539204,183695232,-218660850,-8385014,-2146633997,521213,100664192,250642432,58720262,-2147481856,16970481,-16841856,-16285695,41943298,-2147352833,33426678,50266752,-16285695,58720766,-2147417345,235277060,99810176,-184778740,92277765,-49546251,-33358330,-16712191,50200831,-16646144,-2130771968,519424,100664192,15826944,41943555,-2147352834,16973576,-65152,185434113,192941814,-2146502926,251064843,-185464192,-2147221504,788992,-176096256,-2147155978,67042306,-33750144,-33193982,125829627,-2130770675,-33357315,33750656,67076349,159448065,-16646656,196353,16908546,131329,-2147287550,50328065,33620480,33620225,50266624,33817340,33554945,33489663,33555199,-8388095,131826,-16580862,196353,16908546,-2147417599,536870916,33555840,16843009,-16646142,-16646398,33685506,-218136574,33554945,33489663,33555199]},{"sector":6,"data":[33817089,50266876,33620480,33620225,50266624,-17694336,16908290,16843010,-16646142,-33423614,318996481,-50201088,196354,50594050,131330,-33423614,16969344,50266878,67174912,33620483,33489408,1308492029,543912545,1411395140,504824064,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1140850687,65282,336658464,536879872,24190,0,128256,0,130048,268435456,184549376,335560192,352347136,352352256,402709248,436279296,184656384,268552960,268568320,285360896,419596288,184722432,419613952,184736512,386070784,352519936,352548352,352557312,352582400,352613632,352620288,352643584,352673536,352691712,352740608,184998400,185013760,403135744,419914752,403144704,352814848,453506816,336093952,403219200,352923136,386497792,386526464,369783808,369814016,436953600,235661568,319564288,386694912,336393984,470632704,420330240,370017024,386821632,370071296,403663616,386921728,370166272,420520960,336656640,437335040,370251008,370274048,370296064,236093440,236098560,236099840,370322688,1227520,185776896,370337536,320029952,303277568,370403072,303321856,269783552,353691648,370496512,219520512,219536896]},{"sector":7,"data":[370553344,202803968,588691968,404171520,337082624,370659328,353913088,303607808,286844928,236536064,404318976,337230080,505016320,370821632,370846464,337315584,236670464,136026880,236691456,404483328,1841920,1836012032,28257,-16512640,-33423616,-217808883,234684671,15926400,-2146632703,16904708,217776384,-16449920,16842753,16777473,-65281,-2147418113,16777472,-16777215,142606591,-33423612,-100433914,58722045,-67042823,-116555770,117309951,-33946752,-117211130,117178625,-117437568,-535986144,-92266247,-2147479827,919281,-134214528,-485654499,159391224,-65300,33685504,-131072,-33554434,-50266881,196097,33685763,16975362,-16580606,-218595326,67568129,-125828607,196595,100794626,16908803,-16580606,-50200830,-50267135,-1,50200830,-16646144,-2130771968,367920149,48956800,-16646142,-33423870,16711168,50201086,33555199,50397953,50266880,251429119,50266622,33686016,-16646142,-33489407,16711422,857984,65535,514,-2,-33423872,-32965886,-50201086,-768,33423614,50266622,50202111,33424127,-130818,-16777474,196353,17170691,33685763,33620483,16646400,66289919,25231356,16711424,33423870,-2130771201,50462212,16909827,-16648832,16711679,33423870,100598527,-33718019,50397953,50463746,65794,159448833]},{"sector":8,"data":[-16711929,33489151,16777727,-16646143,-33423614,-100499455,65792,16776960,131456,-2147287295,33423376,66913021,83756030,83887359,50398209,41943810,-33292570,392964,-435388408,66913021,50267134,83821567,8391167,17367544,-2147352317,50462729,67175169,83821824,66979070,50136061,209715710,-16252698,-33227259,-436043773,50397697,8390913,-16121864,-16515324,-50070014,-2147287805,33489930,33491458,15990912,-201293812,184418561,-75497215,134218231,-2147483386,101382902,16447104,264705,-100630527,116916479,176161023,-2147027206,16841226,16778486,461952,-2147483375,126975,-142601984,4599,-1081343,1114368,-15137664,16776960,33489407,65792,-16580862,-2147353087,16841218,-16777215,25166079,-16711678,251953154,16777233,16772992,-2147479295,33494531,16843008,-16711679,-256,8388863,16842753,-65536,1605632,73958,31463808,-2145327616,33358860,66978558,83821567,50397952,16908545,-16580606,-50135550,-66978559,-33555200,-65537,-41942786,-16581118,-16515326,17039364,491522,-33423870,-66978559,-16778240,-16843648,-16515583,-16515326,17104900,-2147417854,-16646142,-33424126,-66978559,-16778496,209780735,34732808,-351895552,301663486,-85260416,-351895531,50136061,92275198,-50200834,151486465,130816,16646656]},{"sector":9,"data":[-33423872,-16515327,16973827,33554945,50201343,50202358,260048126,131564,-33358078,-2147287806,16905475,33554945,50201343,-41941256,50266372,83952896,-2130771712,33882357,-159383547,50529790,33489408,-2130771714,-16774905,33554433,-33554178,-16646655,261891,33620227,50266624,33423871,92275197,131575,-16580862,-117473279,33620225,50266624,33424126,33619584,16843520,131329,-33358077,-50201343,-768,16711679,766,65282,-66354945,50332161,-41942273,16843511,-16515070,-33423614,135233537,135675,-18151808,-2146305276,368765703,-253032832,-2147479537,184222729,183895424,32931840,-142606328,67110145,-2130771201,-16708879,261891,16843011,50332161,50201599,16581116,-2,-33489153,33554434,-16776961,33164160,-16580606,-2147287549,16971007,67109377,50201599,293601790,-65528,33685504,-131072,-33554690,-33424128,-16515582,327427,16974083,50397697,50266880,16646654,-65539,-33554689,-16646656,-2147287295,67040771,83821567,33620992,33491328,-196354,-167870210,66978302,67044095,83887359,16843265,33555328,33489407,-261891,-2130706434,117310470,-389248,-66847229,-16515579,-2147156221,83818498,159384831,-33096975,-16580861,-2147483132,-50073859,50659330,67041408,-2147351296,-16645898,17104899,-16711678]},{"sector":10,"data":[193003009,-16646908,196353,33685763,50332417,33489663,-196354,-50331906,163840,8389115,196353,-2147417852,16974079,67109248,-16678657,-50266623,25231103,-2130707456,50200830,67109631,58720769,33489408,16646655,-2130771972,33295098,50266878,33620736,262403,-16646396,-50266623,-257,-25100290,-2147353856,50200577,50332415,-8388095,100730112,-16744193,-50266623,8453887,-2130706945,33423614,50266878,33620736,75497729,33489408,16646655,-65540,202408191,33489663,16581118,-2,-50266369,-33358335,261891,16843010,50332417,67044607,50201598,16581117,-16777218,196096,16712192,58785536,16711673,-2130836995,33685257,83821568,66978815,-328576,16711679,33358332,-2130771201,16842755,83886593,67044607,66978559,109052414,130827,16843009,16711936,-1,16809984,65792,16776960,-16056960,16842753,16777473,-65281,-2147418113,16777472,-16777215,109052159,130827,16843009,16711936,-1,16809984,65792,16776960,-15860096,16776960,33489407,65792,-16580862,-2147353087,16841218,-16777215,25166079,-16711678,118784002,152046064,285934720,-2147418112,16842735,-276824047,4359,-1081343,1114368,268895360,-2146832375,-16774905,33554433,-33554178,-16646655,327427,33620227,50266624]},{"sector":11,"data":[33423871,33423868,16908800,25165825,-2147416590,33620223,50266624,33423871,32964992,131329,-16580862,-16581631,16908289,83722241,16777727,65793,-16711935,16777215,65664,257,-2147418113,-16839662,16646142,33489406,50332671,16908801,-16646141,-75432447,-16580872,16973827,-2147417854,150992135,16908800,-33423358,-33489663,-16777729,-65794,16646141,33423869,50266878,50332671,33620737,16908802,196867,-16580861,-25100543,589811,-2147417854,351536141,32508544,-318734319,8393217,16908524,-2147352559,588534,101118592,360448,-243269625,-2147352833,16973570,-16840320,-33390591,58721023,-2147352066,368706569,-85260416,-351829995,25171450,50334699,131329,-16515326,-2147353343,33683203,67043840,-8388097,16843255,-16646142,-2147287549,524536,33620226,67043840,33293054,293601524,131574,-33292542,-167673854,50332161,50201599,-75496962,-2147417109,33685502,-16907392,-33325054,-92274179,-2147353325,50265603,33424256,-98302,310378755,16777478,458750,-65538,-33554689,-33424128,-16515582,327427,16974083,50397953,50266624,-2130836994,50262777,67044095,67110143,125829633,-33423635,-16580861,327427,33685765,67731457,125834746,-2146043157,368765703,166396288,16843520,196865,-33227004,-33358332,-150864895]},{"sector":12,"data":[-334397440,50397441,83821568,50201854,49086848,196866,-33227004,-50070268,-335642623,-25165565,-2147352065,50265603,-33684608,335183873,58720765,-2147287298,33684995,67108480,67731457,125834746,-2146043157,368765703,-17757568,-218529784,117374991,100988032,200441856,-83754993,66123392,-98303,58720769,-2147287298,33422851,67045248,-98303,-8388094,-2147286530,100728064,-33490048,-2147221500,50264577,25166337,33684989,167215105,58720765,-2147287298,33684995,67108480,229377,-41877755,-2130836735,-50200576,-100398720,-351829995,125834746,-2146043157,150925578,267581824,-2147025152,394484,135000704,-335577088,-25165565,-2147352065,50265603,-33684608,-16285695,-25165565,-2147351809,50462463,16580736,16482310,67110142,-17170048,-2147352318,33422593,-142606078,-2147353335,50265603,33424256,-98302,310378755,16777478,458750,-65538,-33554689,-33424128,-16515582,327427,16974083,33620737,50266880,-2130967810,50263288,67044095,67110143,159384065,33489407,-218332931,66978302,67044095,83887359,16908801,33555072,33358591,16613629,-109051896,-2147417600,50462719,-16972928,-33325054,159384061,-2146043388,368765703,-85260416,-351240171,125834746,-2146043157,368765703,149681536,294912,-310378488,-2147480566,527341,134218880,-336363520,-25165565,-2147352065]},{"sector":13,"data":[50265603,-33684608,-16154623,-25165565,-2147352065,50265603,-33684608,334397441,58720765,-2147287298,33684995,67108480,-16154623,58720765,-2147287298,33684995,67108480,67731457,125834746,-2146043157,368765703,149619072,368214016,-8388600,-2147417109,33685502,-16907392,-33325054,-92274179,-2147353325,50265603,33424256,-98302,243269891,-15598844,-2147287550,234679049,50267135,-51509376,-33161715,-33423870,-512,33423614,16777727,-16711679,-2147418367,16842240,-16777215,159383807,-2147481360,16974073,33554048,-33325054,58721022,-2147353090,368706569,-85260416,-351829995,293606906,-2146700820,201653508,83164544,-201490420,-176157692,-2147481364,393221,135653248,294912,-192937977,-2147417109,33685502,-16907392,-33325054,176161277,-2147417345,33488642,-49025408,-33325055,58721022,-2147352066,17039358,-16840576,-33390591,41943807,-2147351810,368706569,-85260416,-351829995,25171450,-2147481365,988658,-159319550,-2147417103,33685502,-16907392,-33325054,-92274179,-2147353325,50265603,33424256,-98302,58720515,-2130770688,-50068995,50593408,67731706,109057274,1180141,-352288766,8393473,-2146303507,318107147,226493438,-2146043157,368765703,-85260416,-336363499,209715205,-2147482368,398820,134219904,-336494592,-8388350,-2147352065,50265617,-33684608,334200833,41943550]},{"sector":14,"data":[-2147417345,33423117,-16907392,-33325054,-25165311,-2147417089,351929353,132908672,-335904747,-75492858,-2146302226,301723397,-159382529,-2147482133,393224,102098816,-352223232,-25165565,-2147351809,16973322,-16842112,334331905,41943550,-2147417345,33358860,66978558,83821567,50397952,16908545,-16580605,-50135550,-66978559,-33555200,-65537,-58720003,-16515581,327427,-2147352316,-50135287,-66978559,-16778240,-16843904,-16515583,-16515326,17104900,-2147417854,-16646141,-33424126,-66978559,-16778496,159449087,-2146043388,368765703,-85260416,-352223211,16973836,33554945,50201599,16253436,32902528,-16646142,-2147287549,16905728,33554945,50201599,-243269122,-2147481590,17034239,33554048,-33325054,58721022,-2147353090,33362938,-16907392,-33325054,-25165311,-2147417089,33358860,66978558,83821567,50397952,16908545,-16580605,-50135550,-66978559,-33555200,-65537,-58720003,-16515581,327427,-2147352316,-50135287,-66978559,-16778240,-16843904,-16515583,-16515326,17104900,-2147417854,-16646141,-33424126,-66978559,-16778496,-159318017,50200850,33554943,16908545,16843013,-2130771712,16843261,-41943039,17236217,16777729,-2130771715,368706569,-85260416,-351829995,25171450,50334699,131329,-16515326,-134087423,-150241280,33554945,33489919,33030016,131329,-33292542]},{"sector":15,"data":[16547842,16843010,16844290,-16711679,16907648,-2147483391,134347004,131329,-16712447,134540416,-335577088,-25165565,-2147352065,50265603,-33684608,335183873,58720765,-2147287298,33684995,67108480,101941249,-33488895,-33552641,-257,16580605,50201085,33620736,50725378,50332161,-125828353,117572082,-2147352316,50328568,33620480,33686278,50332161,33489663,16515581,-3,-33489153,-33487105,226492417,-2146043388,368765703,-85260416,-335708139,310380286,-2147024902,1112817,135655040,-335839232,92276477,-2147222278,33291526,67046528,-98303,-8388094,-2147286530,100728064,-49351808,-33325055,58721022,-2147352066,17039358,-50067328,327435,50462979,50332673,33424127,-2131622659,201195507,67110143,75497729,-15991316,33816580,-335708158,109051912,-2147482112,16974061,33554048,-33325054,58721022,-2147353090,16973579,-16842112,67534849,285278720,8389120,-2146369044,285339136,-185595264,-335708140,92274695,-2147482112,33620207,-130176,-33390590,176161277,-2147417345,33488642,264320,1179138,-335314942,58724862,-2146304274,301526792,176162046,-33423125,-2147352559,301919235,-17955968,-267878383,83759352,149682048,229376,58720258,-2147482112,16974059,33554048,-33325054,58721278,-2147353091,16973581,-16842112,67600385,-75492090,-2146105621,352775163]},{"sector":16,"data":[-286521984,-335314925,92274695,-2147482112,398824,117441920,-336232448,41943554,-2147287042,33488386,50268544,-16613375,-293600770,-2147353069,16973570,-16840320,-33390591,41943807,-2147351810,168035334,8391677,-49675029,-352288757,201132548,-135525248,-151486455,125829127,-2147482112,529900,49019264,-16613375,41943807,-2147353090,16973580,-16842112,334725121,58720765,-2147287298,33684995,67108480,68386817,327161326,-2146046229,367979283,-219475328,-2147025408,921596,-142542334,-2147025423,66976260,-50526848,335839233,-25100540,-2130902271,-100465666,1152,-536772576,-8380416,-2147481632,467193,235143296,622616,25174016,-2145386272,516345,119601536,302219264,84474632,134279296,-2147219204,33424391,50332415,65793,-16711935,16777215,25166335,16842752,-65536,-67076096,8389887,-2147417602,134089488,33620992,131329,-33423870,-17367936,-2147090425,193281,83822590,16580480,-16908291,-50266369,-16515583,16908291,33620227,33554945,33489407,-2130902530,67042041,50332671,75497985,-16580876,261890,16974083,67600385,117377022,33620992,16908545,-16580606,-50201342,-33554944,-65537,33423614,50266623,58721279,-16253198,17170436,-16285693,-50201087,-16777984,100136576,-33030656,117800967,-33423870,-50266879,-513,66713984,-98303]},{"sector":17,"data":[243270145,-65521,33685504,-131072,-33554690,-33424128,261891,16974082,33620481,50266880,-117931779,67044095,33620736,-17562496,-16580862,16973827,-2147417853,201131026,50332927,16843265,-33423358,-25100799,-15991313,-2147155964,388096,83824380,16580480,-16908291,-50266369,-16515583,16908291,33620227,33554945,33489407,-2130902530,50330616,50332671,75497985,-16580876,261890,16974083,-351698943,-25165565,-2147352065,-16509948,-33292541,-16777727,16646142,66978301,33555455,16843521,131330,-33358077,-526208,261890,-2147352317,50263044,67044095,50397952,276824321,-65530,33685504,-131072,-33489153,-16581119,-16515326,-16122364,-33358077,-402030590,100598783,67045886,-18347648,-16580862,-33161469,-16515320,-33358334,-16712191,50200831,-16646144,-2130771968,781573,-66383744,-33292530,-2147353085,251456266,92275966,-67108114,-33227250,-50201342,-512,50200831,-16646144,-2130771968,-50268916,-66049,33358078,67044350,50397696,16908545,-16646142,-33423615,-125764351,-16580613,16973827,-201031678,50266878,50332671,16843521,-100398976,-2147483115,368765701,99287680,-2146043392,-66914046,-16581118,16908290,50332161,25167358,-16514826,-2147221500,100595201,33620736,131329,-33423870,66056576,-98303,142606849,33685508]}]],[[{"sector":1,"data":[-16908288,98304,-8388096,-2147482881,-33486089,196098,33620225,100532992,16122240,327428,-167673852,50333182,16843265,-33423358,176225793,33685508,-16908288,98304,-8388096,-2147482881,-33486090,196098,33620225,134087424,50267135,33424126,-65282,196096,16712192,159448832,-33226514,-16515321,-251363326,134087935,50267135,142607102,34994692,-351961088,41948666,-100661781,-200376299,16776960,131584,-512,33423614,33424636,33619584,16843264,17039873,-2147483135,67304442,-75497215,33620473,33620230,50266624,-269188867,-25165565,-2147352065,201131016,50332927,16843265,-33423358,-25100799,-15991313,-2147155964,388096,83824380,65929600,-98303,25166337,50200847,16777982,131329,-2146894333,83948289,41945342,-33226763,-2147483129,-50137086,-16581118,16908290,50332161,25168126,-33226509,-184385528,134087935,41943042,50135800,50266878,16843264,-33357822,-167673851,83821568,25166848,392950,16908547,33554945,-2130836994,-33485055,196098,33620225,150864640,15925632,-2146894331,83883266,133118,49808000,50201341,33555199,131329,-2147090941,67171841,67110143,-17432192,16973829,33620226,33423872,185172222,66978301,33555455,16843521,196867,-50135293,-33489663,-513,16646141,-16581248,261890]},{"sector":2,"data":[-2147352317,-33488887,-50266879,-92209409,-16580866,261890,33751299,229377,-33423870,-50266879,-66049,17760640,50201342,16843008,-16580606,-2146697980,83946499,201131263,-1178496,-2146501628,-50204154,-16646655,196354,16843010,33555201,66978815,16646653,-33554434,159448320,131579,-16515325,-184582142,50397441,67044096,50201343,134738560,-229376,58720765,-2147287298,33684995,67108480,185630721,125834746,-2146043157,191237,41948666,-196366,-16777475,-33424128,261891,16974082,33620481,33489408,33423871,-67600131,67044095,33620736,-17562496,-16580862,16973827,-2147417853,526080,-33555328,-33325055,58721022,-2147352066,17039358,17760640,50201342,16843008,-33292286,-218005497,134088192,-720256,34078212,-200638464,16776960,131584,-512,33423614,83755774,921216,65535,514,-33554434,-50266625,130817,33685762,33620737,-2147352319,67106552,33620352,33620737,16875521,-125827841,33686005,33620737,131329,-50135294,-50266879,16777215,766,65282,67731711,83823613,33620736,131329,-33423870,-34603392,327435,-335314939,251396098,-41941761,-2147480843,-33485055,196098,33620225,100532992,16122240,327428,-167673852,50333182,16908801,-16646142,-50135550,-17300864,16973832,33620226]},{"sector":3,"data":[33423872,-151224066,83888382,49480064,-16253440,251756548,-33358335,16842754,50332161,25167358,-16514826,-2147221500,100595201,33620736,131330,-33358078,-66978558,16776192,33620224,17760640,50201342,16843008,-33357822,-167673851,83821568,25166848,392950,33685763,33554945,33424127,-134053635,50333950,16908801,-16646142,-50135550,-67044351,16777471,-142605823,589565,-218005499,134086658,58721535,50135567,33555199,131329,-67272702,67109121,50267391,33424126,-65282,196096,16712192,159448832,-16580362,-2147287036,-16714231,33554687,-33554430,16711679,50201086,83821311,16843776,16514432,33685762,33554945,-2130902273,-33485055,196098,33620225,100532992,16122240,327428,-167673852,50333182,16908801,-16646142,-66912766,-50789760,-33292530,-2147353085,251456266,92275966,-67108114,-33227250,-50201342,-512,50200831,-16646144,-2130771968,50268945,116916990,50266878,-135000704,-16646656,-49643518,16646140,142606847,-33620992,-16581120,117473283,-16646135,-159318527,50398211,-2130771712,33816824,-33423357,159448321,-16646656,196353,16908546,131329,-2147287550,50328065,33620480,33620225,50266624,33817340,33554945,33489663,33555199,-8388095,131826,-16580862,196353,16908546,-2147417599,536870916,33555840]},{"sector":4,"data":[16843009,-16646142,-16646398,33685506,-218136574,33554945,33489663,33555199,33817089,50266876,33620480,33620225,50266624,-17694336,16908290,16843010,-16646142,-33423614,318996481,-50201088,196354,50594050,131330,-33423614,16969344,50266878,67174912,33620483,33489408,1308492029,543912545,1411395140,4327111,-1047855104,-388823887,1687855918,78765195,-796070957,-1557216509,-930323304,-1099669317,-215255328,-338492239,-1993424125,-94064098,-427044722,921515003,931465,203852086,15630592,914961922,-1591345142,1480392958,1024095319,276125511,470220590,117386752,854261788,33614224,-54512866,268865070,8437248,-268194778,234978445,1734129951,728191422,79793102,431270402,1090789837,-206882124,788275108,1050254,268812428,512437760,-1960418152,-1912602098,378218179,1397882896,244339024,-485622552,-1767690584,-37754780,-1156958488,-1993459491,771778078,6819468,-1899459554,2014936,1020912603,76218603,1023639333,74711935,1223,109981215,-2135031792,650130176,1190134700,-268194778,-62601434,-970566065,726466116,-2131983888,-1141077248,101072896,1398216278,333975184,1963409588,83764760,104857787,1461081606,-401698733,1074246654,669582197,-1191408895,-13697025,1348769846,1088968470,-2134605382,1958742784,784371429,637536419,2242187,105152806,-14284800,100663814,782582760,525966,-1207959106]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[8084045,3,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":8,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":9,"data":[279886,131198,189692135,32772,0,0,0,0,4194351,7602240,8257662,1152,589824,0,0,0,-2147024892,1,4915200,5242888,44,-2146959360,1,5439488,-265289452,32769,0,1313818119,1380533332,1380143878,5525577,0,1313818155,1397051988,1313817376,1431193940,1397970255,1229734211,975193934,1919111968,544501865,1952797480,691086112,1291845632,65537,288555264,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1879048192,65281,289472549,536879360,24190,0,128256,0,1666383872,1953524082,1918979328,288555264,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1879048192,65281,289472549,536879360,24190,0,128256,0,130048,268435456,167772160,268439552,352328192,335556096,402678016,436248064,167830272,234942976,234948352,268508160,436284160,167851264,436291072,167856896,369186304,335633152,335642112,335644416,335651840,335659776,335662848,335671808]},{"sector":10,"data":[335683840,335686400,335701504,167941376,167947008,402835200,436391424,402839552,302178048,453183232,335770368,386112000,335800832,386144512,335830528,335844608,386189824,402981632,285560064,252018176,403025664,319158784,554054400,403081728,352765952,419889408,369573376,419921152,336054272,319291136,403189504,386428672,470330880,403233792,386474496,352939008,235518720,235523840,235525120,369747968,652800,185202176,269099520,235556096,185235968,269128960,168477440,134931456,252384000,252397824,118194432,118202112,235652352,135005184,420226816,302802432,235704832,252493568,252505088,218963968,185416960,151870208,252540928,252550144,353221632,269347584,252580096,235814144,235825664,135182080,235846656,403638528,997120,1919111936,7630953,263552,83918862,16843263,-255,263296,-116883449,192939776,-2145322752,553246733,250477184,116490240,142606350,-2145583104,486597380,-18217600,-50332162,-33424128,16908290,33620226,33687041,16843009,-33357822,-66978558,-16777984,68518142,92280302,131819,-33358078,-33489407,33423614,50266878,50397696,50332417,-2130771201,33427196,33555199,131586,-33423614,-16843264,394264830,-65523,-16711681,-33358079,-33292795,-66978302,-512,16711679,33423870,33294335,16646655,-16842754,-16646401,16908290]},{"sector":11,"data":[84083203,33686023,16777729,-2130771713,-63995,16908033,50266624,192938495,-33358336,-16450045,17039365,33817093,-2147352061,33685507,67240706,67110145,83756543,50201598,657536,-134512628,8390154,-2147027206,301991693,318240640,403079168,-65025,16908033,50266624,75497983,-2147479024,33494789,-16711423,343998463,-2145325568,33358857,100598782,83952384,16974594,-16580606,-83755774,-67109632,-131586,109052158,67043848,-2146107139,-16774908,-16646655,327426,16843010,33554945,66978559,920310,184812928,50919936,16843264,196865,-33292542,-50201342,-768,-2130771969,251003917,-75497457,-2146107150,16122895,-16709121,261891,33685763,33555201,50201599,16581117,-3,276889343,-33620217,-50266369,-16515583,17104901,50463236,50331905,33424127,-65283,-33620227,-50266113,-16581119,68255747,-58714634,-2147479829,33358856,33555199,16908801,16974084,33620482,50266880,33358335,-196356,-16777217,-33424128,-16515582,-16580860,-33489407,-131329,276824316,-33292533,-16646910,-16777984,16646142,50135551,33489918,33620736,262402,-33161467,-33424125,-768,184910078,16843263,-255,-15990656,16843009,-2130706433,33491717,-16711423,25231359,-16646387,33489407,-16646143,-2147352830,166725396,75499792,-2147479027]},{"sector":12,"data":[1181422,268895360,-2146832375,-16774909,-16646655,327426,16843010,33554945,33489663,50332412,-16449408,16843009,-2130706433,-16839662,16646142,33489406,50332671,16908801,-16646141,-75432447,-16580872,16973827,-2147417854,150992135,16908800,-33423358,-33489663,-16777729,-65794,16646141,33423869,50266878,50332671,33620737,16908802,196867,-16580861,-25100543,589811,-2147417854,-16639744,-66847485,-100402940,-33614592,-16843266,16711421,33554943,33686017,16974339,226492421,65798,-16449789,-33358077,-33358333,-16711935,33358079,33358331,50135806,67044094,33555455,131329,-16580862,-50201087,16744449,16973825,33620225,50266880,33423871,-130819,209780479,16842762,33554945,16646655,-16842754,-50266625,-33358335,-16580861,17039364,33620227,50332161,33424127,67993854,50266622,117376255,50267135,33424126,-65282,-16646656,16908290,16974338,-16580605,-66912766,-67044607,-513,16646142,33555198,50463489,33751554,243269890,16842760,16777729,-130817,-50332162,-16646912,16973826,50397442,-50266879,-16646399,16973826,50397442,50332417,33424127,168460542,-130818,-33423617,261891,196868,-75432190,-33030655,-33227258,-33423870,-512,33423614,33555199,-100433919,8388617,83821081,33227772]},{"sector":13,"data":[16515581,-3,-16646400,16973826,67174914,33489664,16646655,-16384250,-50135550,-50267135,-65793,-2130837250,-128249,-16711937,-16581119,16908289,33554945,117310719,50201854,-65282,109116928,50137594,50201599,16646654,-1,-33358336,-16318972,16973829,33554689,50266623,336494845,-33620226,-33554689,-33424128,196353,33620225,100598528,50267646,33424126,-130818,-33489153,196353,176161026,-16908772,16449531,50135546,16777983,196865,-49938685,-16318967,-33358077,16776961,50135550,66978557,-2130836226,-128249,-16711937,-16581119,16908289,33554945,117310719,50201854,-65282,394329600,-130831,-33488897,-33358335,-33358333,-2147418623,33619970,33621760,65793,-16646398,75562242,67109392,50201599,16646654,-16842755,-16646400,-16384254,-16515323,-33358334,-16712191,33423615,33555199,50463489,50332161,-2130836737,-128251,-16711937,-16581119,16908289,33554945,83822079,41945086,49808377,50266620,33554943,131329,-16384254,-2146959868,-133957374,-16647166,130818,33620226,100598272,50333694,65793,-16646398,92339458,-501,33489150,33489662,16843264,-16646142,-33227003,-117276665,-66914301,-16580863,16908290,33554945,134088191,16843520,-16646143,-50135295,-50066304,-33358335,-16580861]},{"sector":14,"data":[17039364,33620227,50332161,50201343,33423869,-261892,-16777219,-33489153,16973826,33751555,33686274,101548033,50331905,67044607,66978559,33424126,-65281,-83755776,-33424127,-33358590,-16515326,16908293,33620225,50266880,33423871,-130819,226557951,-16580854,-33423871,16711424,50135550,67044350,16843264,-16515070,-66847229,-33358588,-33424127,16776960,50266622,50397696,50397954,50266880,101548286,50331905,67044607,66978559,33424126,-65281,-83755776,-33424127,-33358590,-16515326,16908292,33620225,50266880,33423871,-196355,33620225,33621248,-16645886,-50135295,35192960,66978559,50135804,16581116,-3,-16646400,16908290,50463234,16908802,-16646142,-50200830,-50267135,-65793,-2130837250,16648714,-16777218,-16515583,17039363,-16646141,-33424512,-33096185,-33358332,-33489407,16711679,50266622,-2147417600,-128251,-16711937,-16581119,16908289,33554945,67044607,33555711,16908801,-16646142,-66912511,-117245949,-16253312,458500,16843011,33489408,-2130902273,-128251,-16711937,-16581119,16908289,33554945,67044607,50332927,131585,-50069758,-66913022,-66978559,-512,33489151,33555199,33686273,92274946,-501,33489150,33489662,16843264,-16580606,-351633393,176166390,-2146042133,33483534]},{"sector":15,"data":[83690493,134022909,-32896896,16776960,50201086,33555199,131329,654851,33685763,33554945,16646655,-16777218,-200835072,-512,33423614,66978558,66980348,33424126,-65282,92339712,-501,33489150,33489662,16843264,-16646142,-16515324,16908292,33620226,50266624,33358590,-2131098882,134150402,117312253,83756542,-65026,-50201088,-50070270,-49938941,-16118400,-33423614,-16712191,33423614,66978557,33555455,131329,-33292540,-66847484,-50201085,16776960,67043838,16843264,131329,-16515325,-33292798,16776961,50135550,66913277,-2130901250,536870916,14680448,-520126432,-109051897,-2147481824,403571712,2432,-536772576,-109043712,-2147481632,467193,135398272,-2147153669,-66584336,125830152,-16646652,16973826,16777473,-65281,-16711681,98305,65792,16776960,-262016,-33521660,159383809,-16842989,-33489153,-16646399,16908290,33620482,33489408,-392450,16973829,33554689,50266623,335577341,-83624702,-50201087,-512,50266622,134153471,16844288,-16646143,-50201086,67239168,131329,125894402,-65518,-33489153,-16646399,16908290,50397698,50201344,319389949,-65793,33423614,50266623,33620480,131330,-33423614,-58659322,392972,16843011,33489408,-2130902273,-16640255,-33423615,-512,33423615]},{"sector":16,"data":[50332415,16908801,-16646142,-50135295,68419712,33358587,16581118,-16777218,-33358079,-49677048,261895,33620226,33358335,33620471,33489408,-2130902273,-16837879,16711678,33489406,33555199,16908801,-16646142,42008321,-66584839,-33358069,16776961,66912766,50201597,66978815,335577341,-83624702,-50201087,-512,50266622,117376255,8390911,33358080,50135806,16777983,-16646143,16908291,33554689,50266623,184779005,65792,16776960,34209152,458492,16843010,33489408,-2130902273,16780035,-16777215,-41942785,-84147703,-33358062,16776961,66912766,50201597,66978815,335577341,-83624702,-50201087,-512,50266622,117376255,8390911,33358080,50135806,16777983,-33423359,-2147418879,16908288,16843521,-16646143,-50135295,34865280,33227773,16581118,-16777218,-16580863,524036,16843014,33489408,-2130902273,-50195456,16908034,83820800,25166847,50201085,50266877,65792,-16449791,-50233341,-50135551,196354,33554689,33555455,65793,-16646398,8453378,50135572,66047,-16449791,-50233341,-50135551,196354,33554689,33555455,65793,-16646398,109116674,-33489392,-16646399,16908290,33620482,33489408,16646655,-16842754,131071,33685762,33555201,-2130771457,-50195456,83885569,109056762,50201070,33555199]},{"sector":17,"data":[131329,-16580862,-2147353087,16973820,-16580605,-50069758,-15529600,-16777474,-16646656,196353,33685762,33554945,-133988097,100533247,67045373,16843264,-50200830,-16582400,-50070013,34865280,16646653,16777986,-16646143,16842755,33554689,50266623,335577341,-33424126,50463232,33554945,-58719746,67175167,33489408,-2130902273,-50195456,58784770,1243895,33620226,33489408,-2130902273,522488,34865280,458492,33620226,50266624,-2130902274,117374209,16843264,-16646143,-50135295,34865280,393212,16843011,50266880,16581118,33021,16843777,-16646142,-32504960,261890,33685762,50266624,-100499202,33556222,131329,-33358078,-50266879,16777344,33620228,-2130771456,-50195456,196354,117440769,196865,-50135549,-131712,-16711937,-16253951,-16712191,335577343,117373954,16843264,-16646142,-50135550,-84082304,-33358062,16776961,66912766,50201597,66978815,335577341,-16581374,33685506,50266624,33358590,33620226,67044096,33424127,-33488897,-50070271,-50004477,159448323,-16646656,196353,16908546,131329,-2147287550,50328065,33620480,33620225,50266624,33817340,33554945,33489663,33555199,-8388095,131826,-16580862,196353,16908546,-2147417599,536870916,33555840,16843009,-16646142,-16646398,33685506,-218136574]}],[{"sector":1,"data":[33554945,33489663,33555199,33817089,50266876,33620480,33620225,50266624,-17694336,16908290,16843010,-16646142,-33423614,318996481,-50201088,196354,50594050,131330,-33423614,16969344,50266878,67174912,33620483,33489408,1308492029,543912545,1411395140,1869379937,-411038976,-2147482382,462588,117441664,294912,92274695,-2146566133,234942977,49610880,50267134,16843520,-2146762750,16970492,184549889,83030656,251428864,75497479,-2147481856,33360649,67044094,50397696,16974338,-16580606,-50201086,-33554944,-131330,8388862,-33423872,261890,33751298,-2147417598,-16646142,-50201086,-33554944,-65794,722304,-352223211,8393984,50201326,50332415,16908801,-16646141,-50135549,-33489407,-2130772225,16971014,50397698,67043840,33424126,83031680,368869376,260046855,-2146107381,352381697,-17891456,-16777474,-33424128,261890,33751298,33620738,50266624,-168132354,50201086,33555455,33686273,58720514,-2147481849,234883845,15860096,-134184946,-33358591,261890,16777473,-65025,-192872703,-2147482369,462588,17632640,-16514818,-16777218,-33489665,130817,33620226,33686785,-2147417855,16906741,33882370,16843010,33489664,16515582,-2,67174143,92339713,17891332,33620483,33489408,-285638402,50401536,-92274431,-2147481358]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[8084045,3,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":7,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":8,"data":[279886,131210,189692122,32772,0,0,0,0,4194351,8388672,9044106,1164,589824,0,0,0,-2147024892,1,4980736,5242896,56,-2146959360,2,6029312,-265289547,32769,17891328,-265289396,32770,0,1313818119,1380533332,1146047750,5132869,0,1313818155,1397051988,1313817376,1431193940,1397970255,1229734211,975193934,1685015840,544109157,1952797480,691086112,1291845632,543912545,65538,189137152,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1879048192,65281,288423968,536878592,24190,0,128256,0,1867317248,1852990820,512,1357825,692267008,1886339872,1734963833,1293972584,1869767529,1952870259,943272224,53,0,0,0,0,0,0,0,603980032,50332160,67115264,512,45875200,536871167,1192192,2116026399,94,0,501,0,1685015808,7238245,1802658125,539903008,189137152,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624]},{"sector":9,"data":[65536,131108,1638403,131076,-1879048192,65281,288423968,536878592,24190,0,128256,0,130048,268435456,167772160,268439552,352328192,335556096,402678016,436248064,167830272,234942976,234948352,268508160,436284160,167851264,436291072,167856896,369186304,335633152,335642112,335644416,335651840,335659776,335662848,335671808,335683840,335686400,335701504,167941376,167947008,402835200,436391424,402839552,302178048,453183232,302215936,352551424,352562944,352572416,319025664,302253568,352589056,369377536,134500352,268719360,352610816,285505792,402948864,369399552,369403392,352637184,369421056,352656128,335886848,268788480,369454336,302350848,403016704,335912960,302361088,335918592,235259136,235264256,235265536,369488384,393216,168165376,319164160,319172864,302404352,319188992,302420480,201766144,319210752,319222016,134677760,168236288,285682432,134691328,503791360,319250944,319256064,319265024,319273728,218619136,285732096,201854976,319299584,268973056,369638912,285757952,268983296,285765120,235437312,134793728,235458304,403250176,608768,1685015808,7238245,263552,83918862,16843263,-255,263296,-116883449,192939776,-2145322752,553246733,250477184,116490240,142606350,-2145583104,486597380,-18217600,-50332162,-33424128]},{"sector":10,"data":[16908290,33620226,33687041,16843009,-33357822,-66978558,-16777984,68518142,92280302,131819,-33358078,-33489407,33423614,50266878,50397696,50332417,-2130771201,33427196,33555199,131586,-33423614,-16843264,394264830,-65523,-16711681,-33358079,-33292795,-66978302,-512,16711679,33423870,33294335,16646655,-16842754,-16646401,16908290,84083203,33686023,16777729,-2130771713,-63995,16908033,50266624,192938495,-33358336,-16450045,17039365,33817093,-2147352061,33685507,67240706,67110145,83756543,50201598,657536,-134512628,8390154,-2147027206,301991693,318240640,403079168,-65025,16908033,50266624,75497983,-2147479024,33494789,-16711423,343998463,-2145325568,33358857,100598782,83952384,16974594,-16580606,-83755774,-67109632,-131586,109052158,67043848,-2146107139,-16774908,-16646655,327426,16843010,33554945,66978559,920310,184812928,50919936,16843264,196865,-33292542,-50201342,-768,-2130771969,251003917,-75497457,-2146107150,16122895,-16709121,261891,33685763,33555201,50201599,16581117,-3,276889343,-33620217,-50266369,-16515583,17104901,50463236,50331905,33424127,-65283,-33620227,-50266113,-16581119,68255747,-58714634,-2147479829,33358856,33555199,16908801,16974084,33620482,50266880]},{"sector":11,"data":[33358335,-196356,-16777217,-33424128,-16515582,-16580860,-33489407,-131329,276824316,-33292533,-16646910,-16777984,16646142,50135551,33489918,33620736,262402,-33161467,-33424125,-768,184910078,16843263,-255,-15990656,16843009,-2130706433,33491717,-16711423,25231359,-16646387,33489407,-16646143,-2147352830,166725396,75499792,-2147479027,1181422,268895360,-2146832375,-16774909,-16646655,327426,16843010,33554945,33489663,50332412,-16449408,16843009,-2130706433,-16839662,16646142,33489406,50332671,16908801,-16646141,-75432447,-16580872,16973827,-2147417854,150992135,16908800,-33423358,-33489663,-16777729,-65794,16646141,33423869,50266878,50332671,33620737,16908802,196867,-16580861,-25100543,589811,-2147417854,368575497,149620864,-101482475,75497482,-2146107388,649984,16843011,33554945,33489663,-142605827,50333952,16843009,-16580606,-50200830,-2147420415,-16840430,-65794,33423612,50266878,83887103,33620737,16908802,-16646140,-33423870,263296,-352288747,16973831,33620482,83886849,50267135,33358590,75497721,-2146107388,912128,134935424,200835072,75497485,-2146107388,912128,134935424,152207360,-16843009,16580606,50201086,67044095,50398464,33686017,262402,-33358078,-50266623,83950464,67403776]},{"sector":12,"data":[243275008,-2146107157,980466,263296,67928085,67047424,33423871,-130818,-33554433,75562496,-2146107388,250800910,167445888,67403788,8393984,-2147480576,352322564,149618816,-351764459,142611960,-2146107157,352322564,250282112,-352288747,159388928,-33423868,-16580862,17104899,33685763,67174914,50266624,33423870,-327427,-16842755,-50331906,67403776,8393984,50334187,16843009,-16580606,-50200830,-2147420415,33424393,50266878,83887103,33620737,16908802,-16646140,-33423870,-83821311,-16777729,-65794,58720508,-2147088879,352322564,166396032,16843520,131329,-16580862,-150864639,491520,293604103,-33620473,-50266881,196097,16908546,100729345,16843266,131329,-50135549,-50267135,-2130772225,352322568,250345856,67403776,50401024,16974338,-16580606,-50201086,25227520,-2146105340,368634632,84148864,-351961067,92280315,-2146105877,368831237,235144064,-352288747,25171442,657412,-351764469,293604088,-2146045436,977664,236319360,294912,25174016,-2145386272,516351,119601536,67141632,159389710,-2145386496,536928257,132184448,553222144,58720263,150669330,15761413,67697672,-16513408,196353,16843010,-2130706433,234883855,-17497984,-33554690,-33423872,261890,33751298,50397698,50266624,67404030,8393984,50201333,33555455,16908801]},{"sector":13,"data":[-16646141,-33358333,-33489663,-2130772225,-16904689,16646142,50201086,33555455,33686273,196866,-33358078,266112,-184516587,-65794,33423613,67044094,50397696,16908802,-16646141,58785282,3089,-65538,-33554689,-33423872,261890,33751298,50397698,50266624,67797246,33423614,285213695,133365120,185565184,67047424,33423871,-130819,-17888896,-33554690,-33423872,261890,33751298,50397698,50266624,67404030,8393984,50136054,33555455,196865,67338250,-16711423,33554431,459136,67469326,-16711423,33554431,459136,-33292527,-2147418623,352322564,-151909760,-66813942,75499527,-2146107388,234883844,66453632,67044093,16843264,-2146828285,-50072064,261890,50397442,75500032,-2146566133,-50072064,261890,50397442,142608896,-33423861,261890,33751298,50397698,50266624,16581118,-16908290,-33554690,184844288,8393984,50201326,33555455,16908801,-16646141,-33358333,-33489663,-2130772225,352324367,-17956736,-33554690,-33423872,261890,33751298,50397698,50266624,184844542,8392192,50135544,67044094,235831296,-131329,33358077,33620735,17105154,33620226,50266368,16581117,-16777219,263552,33751313,-2147483135,520952,722048,33751306,33555201,-2130902017,234944000,101384832,-234455026,58724090,-2146565109]},{"sector":14,"data":[251458052,82969728,-234586098,58724092,-2146563317,250999296,101384832,-234455026,83758842,33424126,243269887,-2146503413,782848,185529728,622592,33489406,33555199,16843265,33554945,25166590,196594,16908546,131329,-66912510,16909314,-16646142,-16646398,16908290,-218136574,33554946,33489663,33555199,16843265,75497730,-2145386496,16908293,33620225,50266624,50266623,33686016,32702336,-16646142,-16646398,16908290,-66976766,196354,16908546,131329,-2147287294,50262529,33620480,33620225,50266624,33423871,1246080,50135550,33555199,33752065,33554945,-2130836993,-33488146,196354,50594050,131330,-50200830,1632501248,1142975346,1632903214,347603200,1126694912,1866670121,1769109872,544499815,1919117645,1718580079,959520884,13624,0,0,0,0,0,0,0,65536,131108,1638403,131076,-1140850688,65282,305201184,536878848,24190,0,128256,0,130048,268435456,184549376,302001152,352342528,318793216,402704128,419496960,184651008,234993920,235005696,268571904,419584512,184710656,419602944,184725504,386059776,335731712,335751936,335757568,335773952,335796480,335804416,335829248,335859200,335864576,335898112,184933120,184948480,403071232,419850240,403080192]},{"sector":15,"data":[319195904,453441280,336028416,336037120,352835328,352854272,319315200,302549760,352890624,369689856,151595776,285817088,352935680,285836544,403283200,369740032,369748736,336214272,369781504,336250624,336266496,285956352,369849088,336306432,436975872,336323840,319553792,336338688,235684096,235689216,235690496,369913344,818176,185367552,336373760,336391168,302854144,336424448,302887424,235796480,336470784,336494336,151956736,151968000,319751424,151988992,521091328,336561920,319796480,336591616,336609024,235963136,286304512,185664768,336666880,269569792,403793664,303141632,269594368,303156480,236056320,135412736,236077312,403869184,1227776,1685015808,7238245,263552,-2147483378,127743,-8385024,130820,16843009,16711936,-1,16809984,65792,16776960,-16513664,-2147090431,117438977,33096064,-2147025407,33552650,25167360,-2147024902,16906497,192939774,-2145322752,553246733,250477184,116490240,159383566,18677760,-469794816,486539265,48891008,-33620480,-50266625,196097,16908546,17041409,131329,-50135294,-33489663,-2130706433,-3831,16646142,33489405,33620480,33686536,33554945,33489663,16581117,-16842755,176160770,-2147287808,367920149,48956800,-16646142,-33423870,16711168,50201086,33555199,50397953,50266880,251429119,50266622]},{"sector":16,"data":[33686016,-16646142,-33489407,16711422,-32827776,-16646656,-16318974,-33423614,-33489919,16711679,33423870,50136575,16646654,-16842754,-33488897,196353,33751298,50726147,33620483,-234848256,16646400,25166334,-33357825,-33358074,-66978302,-512,16711679,50201086,33359358,16646655,-2130771970,-130815,33423615,-65152,16908290,84083203,33686022,513,101154817,16712191,-16711681,130817,50331905,33424127,16384384,257,-2147418113,16843265,-130944,688132,66978558,100599038,83952640,50463746,66050,31522688,-33358336,-16450045,17039365,33817093,-2147352061,33685507,67240706,67110145,83756543,50201598,-8388607,33554912,33751554,327940,-33161468,-33292796,67665922,167903743,8389119,-2146696972,16905216,16845566,33028992,17172480,-84508672,-159382006,167837946,-2147418108,16775680,16713464,-151385472,-99975162,83230976,209715456,17891335,-268468224,285212673,301463424,-2147418112,16842735,125829137,-16646376,16776960,33489407,65792,-33358077,-100564991,65792,16776960,16908672,-33521663,75498751,4367,-1081343,1114368,-15334016,16842753,16777473,-65281,-2147418113,16777472,-16777215,343933183,18935296,-535724032,552468481,-50067072,-16515583,16973829,50528773,50332161,33358591]},{"sector":17,"data":[-196357,-33685765,-2147418369,66978302,50333183,50464001,67108736,50332161,33521919,-83755774,-67109632,25230846,-16777983,-2147353344,-16644090,352386307,15727488,50266625,18022654,151289856,-33423616,-16580863,16908292,33620225,50266624,183960574,32505984,33488896,83821310,16843264,-16646142,-150733310,-16678902,16777229,234943104,67469312,167313419,16252032,-2147481087,167378688,50266496,33620736,196866,-33292543,-50201342,-768,33488895,-133922816,16973827,-58719486,16909308,-16711677,-2147287805,67042308,16581117,-16777219,-50134144,118325502,70144,15401088,-352288747,987381,-135005312,-16744435,16777230,-16513664,-134053879,8390655,2808,16220161,-159383543,67044103,33620736,196866,-33292542,-50201342,-768,33488895,-134184960,-16646143,16973828,-58719486,16909308,-16646141,-2147287805,67042308,16581117,-16777219,-50134144,84836606,66049,-131329,33358078,100598782,67175680,16974338,-16580607,-50201086,-33554688,-131330,33358079,176161534,-16777737,-2147353344,67043073,83887615,33752065,50134144,16843523,50266880,83656957,-50201085,-33554688,75562749,-33686012,-50266113,-2147222015,50199556,58721279,-167768572,-335773675,852224,-151060352,-2147483371,33358856,33555199,16843265,17039618]}],[{"sector":1,"data":[16843010,50332161,33358591,-196356,-50266369,-16646655,-16449790,-16646398,-33489407,-131329,-25165572,196353,33685762,33620993,16908801,-16580606,-50200830,-50267135,-1,33358078,50201342,50267391,16646655,-2130771970,-196351,33358076,51445632,425986,260111875,-50135538,-50266367,-65793,33489149,66978557,50332159,16908801,-16449532,-50070011,-50266623,33488895,-2147352320,67105545,75498237,-50069764,-50266367,-2130837761,-16972796,-16712193,-33293055,33881216,33489917,33620736,-50561021,67174915,100599040,25166846,-33423873,-2130707200,33491717,16843008,-16711679,-256,8388863,16842753,-65536,167804928,16777727,65793,-16711935,16777215,65664,257,-2147418113,33491717,16843008,-16711679,-256,8388863,16842753,-65536,201490432,16712191,-16711681,130817,50331905,33424127,16384384,257,-2147418113,16843265,-130944,118784004,152046064,285934720,-2147418112,16842735,-276824047,4359,-1081343,1114368,268895360,-2146832375,-16774909,-16646655,261891,16843011,33554945,33489663,33358334,33225344,33488896,67044350,16843520,-16646142,-50201086,-100958207,92339715,-2147351808,66847744,65152,260,150962428,16777727,65793,-16711935,16777215,65664,257]},{"sector":2,"data":[-2147418113,-16839662,16646142,33489406,50332671,16908801,-16646141,-75432447,-16580872,16973827,-2147417854,150992135,16908800,-33423358,-33489663,-16777729,-65794,16646141,33423869,50266878,50332671,33620737,16908802,196867,-16580861,-25100543,589811,-2147417854,368575498,-101840768,-2147418350,302509576,-125829119,-2146105109,719603,201454976,67403776,25171200,-2146238228,584959,16843011,50332161,33489663,-109051395,50333686,131329,-50135293,16351233,16973831,33620225,50266880,33358335,25166072,50333686,131329,-50135293,-2147419903,-16840430,-65794,33423612,50266878,83887103,33620737,16908802,-16646140,-33423870,-720768,-65792,-50331905,-33423872,261891,33751301,67174915,33489408,33423871,67403776,25171200,-2146238228,519423,33685763,50397697,67044608,50201343,16318973,116130176,16843520,16908545,-16449533,-16580861,-100532991,67403776,25171200,-2146238228,847103,184677760,-2130771968,396021,-92274432,-2147482112,723450,-192937728,-2147480576,352322564,15466880,-2147418348,846592,184677760,-2130771968,396021,-92274432,-2147482112,-16840430,-65794,33423612,50266878,83887103,33620737,16908802,-16646140,-33423870,16514048,-457344,-65792,-50331905,-16646656,-16580863,17104899,16908547]},{"sector":3,"data":[67174913,33489408,16646655,64765,67404031,8393984,491,-2147418347,16771854,70912,15401088,-168591339,-192937972,-2147480575,352322564,-8388607,491,67928085,67047424,16646654,-33554434,159383807,496,-16515312,-33423871,-512,-2130837505,352322564,-8388607,491,-351436779,217317631,-202109568,-66879475,68617,167049088,67403788,8393984,491,32788,16777227,201389184,67403776,25171200,-15728400,-268337152,-125825017,-2146301717,318303752,-101513344,-267943920,69632,15401088,67403797,25171200,-15597330,-301891584,-226487795,-2146300437,302050816,32374912,-2146107392,33424393,50266878,83887103,33620737,16908802,-16646140,-33423870,-83821311,-16777729,-65794,25166076,-33424127,261891,33751301,33620739,50266880,16581117,-16908293,-16777731,67403776,25171200,-15466260,-352288768,16908297,33620225,50266880,33423871,8388856,33556726,131329,-33358077,-2147420159,33424393,50266878,83887103,33620737,16908802,-16646140,-33423870,-83821311,-16777729,-65794,25166076,-33424127,261891,33751301,33620739,50266880,16581117,-16908293,-16777731,285376512,66821,33290880,-2147154688,352322564,15466880,-2147418348,584448,16843011,50332161,33489663,16318973,133562496,16843520,-16580606]},{"sector":4,"data":[-117310206,17137664,68102,116849280,118587402,-131330,33358076,33555198,16843265,33882370,16843010,50332161,33358335,-130820,16711679,-17756544,-16777472,-50266881,130817,33685762,33686785,16908801,-33357822,-66978558,-16777984,84443390,25170944,-15466260,-335904768,16777229,16774016,-2147480319,251659268,33686273,131331,-33358077,-251593471,16839296,17760256,50397443,50332161,33489407,32571645,67272704,-125823736,117441003,-301432814,318308607,-118617984,67272725,-92269306,83886571,-301629422,92279547,-2146239503,302378501,99351424,-301563886,318439679,-85064064,67338261,70925,32240256,-2146104064,16771840,243275251,-15338517,67272704,184551943,-125829119,117441003,-167280630,184090879,-101316480,-2146762742,368247824,-202699136,-335577067,-226492402,218169344,334790656,16777229,234943104,294912,25174016,-2145386272,516351,119601536,67141632,159389710,-2145386496,536928257,132184448,553222144,58720263,150669330,15761413,67697672,-33290368,196353,16843011,16711936,-1,-2147352832,16777217,-16777215,8388863,-2147155972,16907776,724864,-2147483378,127743,-8385024,-16843019,-33489409,-16581119,16908291,33686019,33555201,-2130836737,-16975872,33423613,67043839,50397696,16908545,-33292285,263296,-2147483371]},{"sector":5,"data":[125951,8393984,50201333,33555455,16908801,-16646141,-33358333,-33489663,-2130772225,-33228800,16908291,50397441,67043840,33423871,-17039107,-32632960,-33554690,-33423872,261890,33751298,50397698,50266624,-134184706,-16842241,16646142,33489406,33555455,16843521,196866,-33423614,260047105,18153476,-335577088,352321537,-17432704,-33554690,-33423872,261890,33751298,50397698,50266624,-134184706,16645884,33489406,33555455,16843521,196866,75562500,2834,-65539,-33554689,-33423872,261890,33751298,50397698,50266624,-67796738,-33554422,-65793,33423613,67043839,50397696,16908545,-16646141,16907777,-33289344,-16646656,17891331,-352026624,16646400,25166334,262143,-218333167,16777223,16775552,-2147481855,16714512,67047168,33423871,-130818,16711679,15600768,-33292529,-50201086,-16777728,-250904322,-65794,33423613,67044094,50397696,16908802,-16646141,8453634,-33620744,-16646656,261889,16974082,50397697,-2130836480,352322564,-8388607,491,-167739371,-16581373,16908291,167772929,66516352,50266878,16843264,17432578,67403776,16777727,65793,-16711935,16777215,65664,257,-2147418113,234882560,-8388607,498,67403790,16777727,65793,-16711935,16777215,65664,257]},{"sector":6,"data":[-2147418113,352323072,-8388607,491,67403797,70912,32243584,-2146107392,16773643,192940790,-2146699786,117898243,-109051902,-2146957320,352322564,-8388607,491,184844309,69120,32702336,-2146566144,-50072064,261890,50397442,-176158208,50201590,33555199,131329,-2147483382,-50072064,261890,50397442,-176158208,50201590,33555199,131329,-2147483382,234883844,-8388607,498,-167739378,-16581373,16908291,167772929,66516352,50266878,16843264,17432578,185106432,50201086,33555455,33686273,196866,-33358078,-33489663,-16843265,16646142,-33488768,-16646399,16908291,33620227,33555201,33489407,-130819,-16777219,-2147418625,352324356,-8388607,491,-301957099,-16581118,16908291,50397698,67043840,33424126,-130819,8453886,66979064,16843264,196865,-16515326,-50201087,-2130772992,352324367,-8388607,491,-285245419,-65794,33423613,67044094,50397696,16908802,-16646141,8453634,-33620744,-16646656,261889,16974082,50397697,-2130836480,234883844,-8388607,498,-134184946,-33358591,261890,17234048,50201342,1023,235831551,-131329,33358077,33620735,33882370,-8388350,131583,-2147287295,33423105,-196355,-16711296,-2147418114,16775179,25231103,-33555199,-2147353344,50331393,-8388095,83952383]},{"sector":7,"data":[16843266,-16711678,-50201342,-768,67469566,70912,32243584,-2146107392,520956,-109051648,117506303,184844288,50399744,196866,-50069758,32961920,17432576,33620482,67043840,-167739138,69120,32702336,-2146566144,235277058,32701056,-2146695936,16774150,109055227,-2146501900,235211523,32701312,-2146761728,201127172,-50854784,-184254453,-58717436,-2146761486,16774405,92277756,-2146501643,235604739,-192937983,184549874,-234848242,250937599,-168686464,-2147418354,235277058,32701056,-2146695936,16774150,167513339,-85259648,-16253682,202211328,209718774,-2146568462,848894,62592,-2147481087,658680,-192937728,-2147480576,33423369,50266623,33620480,33620225,50201088,-917120,16908290,16843010,-16646142,67304450,131330,-16580862,196353,-2147352318,33747711,50266624,50266623,33620480,16908545,1152,360480,16843010,33554945,33489663,33555199,-8388094,131570,-16580862,196353,67240194,-16581630,16908290,16843010,-16646142,-234782718,33555198,16843265,33554945,33489663,58720766,33423379,50266877,67174912,33620483,33489408,49185022,-16581119,16908290,16909060,-16646142,-33489663,1802658125,539903008,352840698,-320141696,-352026603,109051910,-2147482112,398824,100664960,67534848,201132548,82509952,-2146697974,183954189]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[1936287828,544434464,543516788,1953394531,1937010277,543584032,543516788,1701603686,1128415520,1415074862,2573]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[30169677,45,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":5,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":6,"data":[279886,1704183,190934735,131078,268436480,74332,131072,196610,4194370,14155856,15073504,1297,262147,0,0,0,1281949782,1282011440,96601417,185467153,-2147418108,1,94765056,-265289711,32769,-2147352576,2,95879168,1048582,32769,96272384,1048579,32770,-2147287040,1,96468992,-265289663,32769,-2147221504,1,100728832,-265289726,32769,-2147155968,1,100859904,-265289708,32771,-2147090432,1,102170624,-265289725,32769,0,1279345412,67,524289,100663308,1314014539,1191398469,1426344260,22168915,1070399999,17398273,33489408,1744912333,1070399489,2647809,1766664192,1936683619,544499311,1684957527,544438127,1668047171,1952541813,1092645487,1768714352,1769234787,28271,1279345419,1145984835,1129271888,1090846721,1414876994,3,0,0,0,-2081649835,-1202320148,1344144900,16777114,-96040704,100941440,-1207601875,65732618,-1996486216,783874118,79187968,-397402618,-998042738,1958742790,-129564925,185218815,16777114,1458604800,-150993224,50740270,1342866950,-150993992,-1727498706,-120470997,176686595,899152,104607479,1983315792,6469640,1375797178,22387280,1048772608,1946159744,297293364,1009710848,-1580692730,787940924,-936703220,176557571,243793]},{"sector":7,"data":[141962999,-775804007,-2012871688,-591900662,-11526646,-351597514,1183536716,-96060936,1183516029,-1962677254,788002886,-930412996,-150990152,721828910,-2046426175,62410762,1982789376,-1037330168,100923601,-1202713976,1344144900,972572299,92142150,-335919477,-129594621,-26032,1048772608,1946157072,112744008,1009710848,-2046426362,1990283274,62494984,-1946552576,243912,141962999,-775804007,62981112,1342867462,-1727644511,-120470997,141992272,-775804007,1119375608,1347590400,16777114,171376384,-6662645,1577058559,-1017256565,1167087646,518818645,2122438798,1963004172,242679569,1342177720,16777114,112640,2122385899,1946226700,-2084557836,-443874579,-900899553,-1957363702,183272428,1187468887,721420542,245503,16678531,-8167563,-1957004026,126551646,-1577564535,-269023684,-150993223,-1194816535,787939342,-1147599300,-67698678,1317652483,768246,104607479,244121,1174665719,-2046426122,-129615094,1183520894,-2046426122,-129615094,1187448701,-352321026,-373281885,-347668345,-25263205,-940411904,65094,1451030027,-150440287,-1948200466,702664,141962999,-930365141,-150988872,-1727498706,-150969157,-1983370245,-1047791538,141954699,-1056710191,176686595,990273163,327025223,66602635,990545926,-1585642937,33441479,1308748544,16678531,2122557044,-1921777410,-1996071285,106859319,1459781513,74907478,-2097148696,28837572,-1956684288,1438866917]},{"sector":8,"data":[-326898549,-11118844,922682486,-6681848,-16776961,179831926,-6664192,-1962934017,787941446,112789052,-1947601152,964848,104607479,702873,-268174857,-150744648,-1727498706,-150969159,-1946645511,787940934,-523171722,1996486699,-2043280636,1040406026,-1202255224,787939339,-1181153732,-101253117,-1202665981,787939335,865667190,-1178457150,-120389630,-1037319629,-1588541693,-523172292,1983315792,57842184,1996423168,-1202235900,787939339,-1181153732,-101253117,-1202665981,787939335,865667190,-1178457150,-120389630,-1037319629,-1588541693,-523172292,1983315792,-26104,1599995904,-1017256565,-387151019,922689010,-6681898,-1962934017,1438866917,-1957237621,731448390,-1946627646,1226992,104607479,909766699,92145212,-351912799,-1547269374,1183517318,-1037330170,-259262255,-150993224,721974830,1983265264,-1593475576,48957558,-2002532725,102540042,-150991688,50886190,-1559590906,-2036267488,102408970,-150985544,50740270,-1559591418,-1956772322,1438866917,-326898549,-1588177104,1183386246,833750,141962999,64243337,1208649734,-1579661687,100862598,1183385148,-666465318,-1948498295,1183439430,141992414,-775804007,-767129096,64767627,1183437382,2406624,104607479,63981193,1208649222,-1579006327,1183386248,-498693148,-1947842935,1174660166,-398030382,65160843,-1996080122,1183574598,-330921496,-1593542913,-523172292,176555523,176726352,141952515,-797537456,-729904298]},{"sector":9,"data":[4372567,-1706012007,1249,-1207666945,-1706033151,1322,87071312,1996423168,176595204,104596995,141992272,-775804007,-2012871688,1465274378,-1174396488,1347551472,398746,2406400,104607479,213446795,1982789376,-488696,906167414,55970438,1460308030,16777114,74907392,50740385,1990283462,-1037330168,-956041007,-26032,1996423168,571396,95918672,-1706033152,1451,-1929087233,1343673926,1342178232,348826,74907392,383927949,243792,-26032,922681344,-6682538,-1207959297,787939342,-1181153732,-101253110,176555523,-1192081783,787940305,-1181153162,-101253020,176686595,-768375,-1928656330,1343681094,16777114,74907392,-887041,-6622090,-16776961,922682486,-1113978794,-16777211,129500278,-6664192,1342177535,455834,176595200,-1577564535,1183386248,-59340294,-1912701303,1343682630,1342177720,-26032,1996423168,-129594108,922701846,-6681848,-16776961,922682486,922684038,-963966328,176555563,734497616,1342867462,-1174396488,1347551472,31386,74907392,-2096668440,196608708,1009710848,96049414,-1946552576,833776,141962999,1996486795,-2043280636,330847754,1982789376,179935496,66713344,-1962244034,1372072911,503334840,178256,109484624,1996423168,666392068,1982789376,179935496,737801984,1356396487,503335608,178256,111843920,1996423168,1001936388,1982789376,179935496,737801984,1356396487]},{"sector":10,"data":[503336376,178256,114203216,1996423168,1337480708,1982789376,179935496,737801984,1356396487,503337144,178256,17209936,1996423168,-26108,1183383552,100835822,953241,1039791878,1232994305,-1149185,-1710571466,1853,-1207666945,787939488,-1181153732,-101253115,176555523,2799696,141962999,702873,100923895,-1588589944,-523172292,1983315792,-294191352,1347469355,-352318280,-294191289,142096127,176026,74907392,-150953800,-1727644626,-150993479,-2046426119,733499402,1982789376,179935496,66713344,1342867462,-788120415,922702048,1996425334,1354771438,1030224,548950096,13416960,-6664110,-16776961,-207950218,1577058314,1575324511,-326412861,178929283,-385649408,113705099,2730,104347391,102905599,510874,1446444800,170433032,922681344,922682936,-224786346,-16777209,721827894,-1202696000,1347420210,-1174396488,1347551472,305306,943128320,1412890374,79337992,922681344,-1070922184,196628560,1009710848,62494982,1358558976,-150992968,-1727498706,-1037319629,-754974023,734147576,1017204930,1356910854,141965055,210586,74907392,-150452597,-1190773714,-369688570,246990987,1009710848,180066566,66844416,-2045901880,1183535370,1982789382,-1948200696,64075976,141962999,6601625,-1054082057,176686595,768080,104607479,244121,-1588528649,-523171722,943128400,1354771206,2144336,1375784122,-26032,-443875328]},{"sector":11,"data":[-1957313699,149717996,-164932009,351815367,75399936,-1610123922,-1986524542,1303905350,-6664192,184549631,-1960280640,725419078,1027830784,1165230125,1946174269,5389585,1664953716,1023898624,594804850,1187448299,184550404,-1959954954,1065416798,-14322688,126548038,71711640,29288821,-941298944,197702,1187503595,-352321020,71747542,-806682623,1249179147,-1576335712,2123041406,351240696,922701568,1100614410,-1996488704,-947127738,440729,-1957496329,-101213753,-92864688,-2080814872,922683076,1996425994,23042810,-2054553600,1352138772,-2095719960,-963968316,-443850914,1478411101,-1957345904,-661774612,-1959859069,4000838,-385649407,58065501,1023614441,1215561729,1962934845,21686531,1946158397,408853,255664756,-385649408,339542287,-379882496,1996423379,142016266,-402229505,-997983803,52881670,687747,501810037,242679555,16777114,51570944,-401705217,-997983854,50784514,503716536,142016336,-1710852353,65535,208977931,178796287,231322,48687360,181810943,1996485355,-196702962,-6664170,-16776961,-1710735818,1371,-1928694017,1343681606,138295039,16777114,45541632,1195651,-385649664,1996423852,108461832,-401705217,1911096010,-2143386625,57933834,-2096983063,4670,-1981217932,172395266,1946157373,146696,2045315444,304211970,-402492439,1843990844,172395266,1946412861,242679575,-15960321,1996425846,108461832]},{"sector":12,"data":[16777114,38725888,104478463,-1728052296,1996443730,2083979022,2050424584,-26104,837353472,242679554,382879373,-26032,1996423168,-114562862,-16595837,1183649398,-1706027310,65535,-369814040,922681864,-6683080,-16776961,-1710874058,2835,104478463,16777114,81152,922690677,479856726,-16777205,-1710735818,2853,142096127,732826,-1070137600,-26102,-1070923776,-26032,-1175912448,-230242559,1996423168,-26098,-1073020928,28840308,-6664192,-1996488449,-6622650,-16776961,614076022,-1996488692,-1202652090,-2091909118,1946219134,-339727612,112643,194353744,1048772608,1962934290,23783683,-1191414017,1347420161,763290,-59310336,1342177976,1342177720,16777114,21686528,1195651,-385649664,1996423488,200514062,-1073020928,837354356,176063233,-2096270783,2002389630,172395271,65740812,-1995815285,-397407674,-997983040,1975520002,17492227,-67095,-6680970,184549631,-385649472,1183514872,2964746,1211960692,1031762944,980680817,-2097093655,4670,-639040652,242679552,-1710328065,3136,178256,8435792,208247376,-1981284352,242679567,-1710328065,3163,178256,1048786411,1946157074,10676483,-15829249,2006584950,1342177292,1342177720,1342210232,820378,271706112,-15829249,-6680970,1342177535,1342177720,-1705983957,65535,1048800491,1962934290,354216037,2122539243,1517635594,1181383]},{"sector":13,"data":[79167488,-1202708986,1344145472,16777114,-30086912,1963004221,-39982845,20780407,1037267969,57999618,1040114153,-965476091,1040039657,57999634,1040035561,57999638,1040079593,57999872,1039992297,57999873,-369275415,-310116965,535137026,181030237,-326413056,1443163267,-150993224,-259324818,-1979288061,-2013260668,1587084870,-1017256565,-2081649835,1448543980,-1710983425,2363,-1923682165,1343620678,1342177720,16777114,184983552,-1928692062,1448085062,-2081140760,-125107004,1443133183,615066,1962871552,142016277,-402229505,-997982313,1357130244,-2095983128,-2014838076,-1956684046,1438866917,-326898549,-11118836,922682486,-1248196524,721420295,1476340726,74907478,-2080769304,1996424900,104636676,112848887,-1947601152,1882312,104607479,703385,-939262985,176557571,141992273,-523112713,213436555,1982789376,-1950274808,1292488,141962999,737933209,-2012347448,112742666,65992448,3016135,28856350,1654280192,1191182342,2080833411,-24951150,-7701500,95945846,1009710848,-2046426362,62410762,1982789376,-2012871928,347623434,1009710848,-2046426362,-2002694134,1980105482,1017204744,1356910854,-787974495,765087968,1577058312,1575324511,-326412861,1461120131,205949782,-402244957,-1073020227,-1070922379,-2097015831,1962936958,209125138,-2097016856,-1073020220,1105789812,-1840383,1991772790,45633544,-1617276928,-16777202,1018694262,45633542,-1348841472]},{"sector":14,"data":[-16777202,-659027338,45633546,-1080406016,-16777202,12061302,45633542,-811970560,-16777202,45615734,45633542,-543535104,-16777202,1421347446,45633544,-275099648,-16777202,146279030,45633547,-6664192,-16777202,1454901878,45633544,261771264,-16777201,1052248694,45633544,530206720,-16777201,-692581770,45633546,-6664192,-16776961,-1464333706,45633546,1067077632,-16777201,2025327222,45633544,1335513088,-16777201,-1061680522,45633546,1603948544,-16777201,-1061680522,45633546,1872384000,-16777201,-2101867914,45633546,-1885712384,-16777202,-1207551434,-1202716671,1344146058,1342185144,1022874,976682752,178182,182237264,515395614,-1097183232,-1207959537,1344146140,3482,185377536,104478463,1342178232,504033464,1357904,-26032,113704960,68266,111305648,176071179,-1157627976,1347616767,104478463,16777114,142254848,142349961,503337912,176863312,-1070903266,1375784122,1347440720,-11513776,1347423350,16777114,-1980724480,1443564086,-1705983957,65535,727185547,1347440832,1342433208,1342767288,1064858,-1070901504,183547984,-407351266,12079107,-6664191,1442840831,-1710983425,65535,-26026,350945280,384452237,-26032,1183645696,-1706027286,65535,384452237,1354771280,-6664112,184549631,-1948682816,1600056902,-1034033781,-1957363702,82609132,184606440,721778112,8645056,184633320,-1191938880]},{"sector":15,"data":[-1202716608,-1706033126,65535,-244087,28836982,1347590400,16777114,-60912896,-1962129527,1204288606,-956301038,5191,-1191420277,1200160856,408914966,-1577296245,1200162878,-60912880,-1996208501,1586170439,50841596,-60912896,-16627769,71813119,1183580159,-1706025220,65535,-2089500661,-1694730497,65535,-1962933832,1438866917,-326898549,1354771202,1144986,-28931840,74825739,837533739,-1694599425,1750,-16369501,850984566,-1706012672,65535,-2096749917,407614,-1072965004,-1070868876,-25755824,1169818,1575324416,-326412861,1445129347,-1705983957,3372,-166989685,-1070922635,-1923721237,1343676486,16777114,-532247808,-1962379613,1017375302,414733830,-1063628800,1023410193,142475266,181929671,116064257,181929671,-1202323456,-1706033112,4557,1443233955,1342188216,16777114,100836096,1448132651,874906,-443851264,-1957313699,49054700,1354771286,1178010,139764480,1342178488,308378,185115392,181943939,-1206750208,-4554881,-1706012160,4704,-351775069,571429,28856400,-1202696192,1344143454,16777114,1458604800,16777114,139895552,184326742,1048772608,1962936406,-373282043,1048772871,1946159832,16758790,-1207506023,1085964288,-1706012160,65535,185089699,735737024,12079296,1347590527,1214362,181838592,104478463,-1728052808,-6664110,-1560280833,922684072,28837434,1347590400,1223578,142123776]},{"sector":16,"data":[104478463,-1728052552,-6664110,-1560280833,1048775360,1946159784,2017362828,-2055995384,-2123055093,104478463,1342177720,504007352,2013264,317954640,-1073020928,1692992373,976683007,178182,182237264,515395614,278548480,184549395,-385649216,922746695,62391866,-256356352,-1202708982,-1706033132,4909,58048523,-54551,-1207551434,-1202716668,1344146050,1342177976,1017242,1975520000,-15865597,-1576369504,396492849,182237184,-1516613602,-1560281073,28838668,-443851264,-1957313699,116163564,-164932009,-16353537,-828767114,-1962934253,-1004868616,-1977220002,1183422464,25831166,-1979676634,1589968454,25699844,-147108026,1600053628,-1017256565,1475119957,149717846,-1962641779,-1526262020,-1197103707,-1202716562,-397407550,-998035993,180533260,1600051852,-1017256565,-2081649835,-11140372,1996424822,323459588,-259325952,1589908459,71761668,638076554,91555640,-352321096,1321634569,-427835381,-1956724693,1438866917,-326898549,-1202301158,-11534290,1996424822,-4921340,184992899,-15698496,1996424822,7583748,848973854,-1207959530,-11534291,1996424822,-7280636,184992899,-1089964864,1191116801,721611524,108462079,-1710983425,5492,512618635,-1175976574,-161575665,-1928270360,-402292194,1586302892,283175148,1589917931,126494212,1021855368,-1741720530,-1914288503,-622270882,-161575665,-1928362008,-402290146,-974646712,-1843491566,302966789,-386507123,1191121066]},{"sector":17,"data":[-167031292,1191167103,-167031292,1488480372,-11526648,1996424822,361536004,1488453632,-397402616,-997982576,-196688124,820709464,-1963696501,1183422471,-396456472,-1928364824,703130718,-1709273841,300607493,-1928173592,-402288098,1586303408,273475820,-196673714,-864029173,93986445,-1928395800,-397153186,-396684860,1586303026,250800364,1408654989,1527905256,185606632,-1928366849,-571935138,275572750,-386507123,1586302990,248441078,-402444101,817369090,-1956684285,1438866917,-326898549,71204884,192228614,503710904,101038160,-2144146658,805700670,79171445,-1706025466,5584,2113929789,-330906078,-314143443,79187990,-1706025466,5531,503710904,-330920624,-1382395882,-1962934260,1438866917,-326898549,-1084860666,1048576009,1965884932,783828737,79187968,-397402618,-997982722,1958742790,79185665,-1706025466,4967,-147066741,-24958092,-2146929407,805700670,-1974599307,-2071460794,1150092804,-96040703,2097154877,-338130172,768771,100960198,-1956684288,1438866917,2122378379,611659268,1342189240,503710904,-39786416,184992899,-1205307968,1344144900,503346872,-26032,401276928,-1325105536,250086773,-1978864641,-467008442,-11016112,-1962752893,1438866917,-326898549,-2141825240,1024097854,1961427829,100972547,-1964486626,79987709,-1946648947,-1526262032,-1197103707,1344144900,-2080541464,2123171012,384863216,-1515870969,103069861,1592283166,79987709,-1947697523]}]],[[{"sector":1,"data":[-1526262032,-1599756891,1033373208,57999402,1023540969,326369323,1962945853,10807555,1962946365,20310275,-1929193751,1038674014,-2111927027,221702149,2115010792,-262238932,-1928516632,-402292194,1860701476,-1923318256,434694238,-1575056115,264431621,-386900339,1458048268,-347833072,-396456644,-1928527896,-402292194,1122503928,-1926202096,-303501218,-2111927028,216459269,2098213096,-396456674,-1928537112,-402281954,1586302852,214886640,2114984168,-2147039482,-2097151734,688190,1290339188,-396456702,-1928547352,-1108807586,37218575,-387424627,512560292,-1645738622,266856460,1586310269,210954480,92413581,-401830936,1551765461,-387424627,512560256,-1981282910,-262238961,-401837080,1149046717,1586314475,208070888,92413581,-401842200,813567913,-386900339,512560212,1307051394,261613580,1586306685,205711592,94510733,-1928408088,904458334,260040716,113706622,68224,176176771,-385649664,1586299315,203090152,-386900339,-1628893524,-262238975,-1928590360,-402292194,1323830276,-385649393,1586299008,200730856,92413581,-401870872,947785529,-386900339,512560100,-571996798,254273547,1586302078,198371560,94510733,1586316011,197585128,95035021,-1928421400,-1175916450,251914251,921386621,-386900339,512560044,-1511520894,250603531,1586302077,194701544,94510733,1586352875,193915112,95035021,-1928435736,-2115440546,248244235,113706622,68224,176176771,-385649664]},{"sector":2,"data":[1586299135,191293672,-386900339,-353825216,-262238976,-1928636440,-402292194,-1696068784,-385649394,1586299155,188934376,-1928539672,1944641630,-396456692,-1928645656,-402292194,1994918700,-1929020402,65792094,-387948915,512559900,367527346,241166347,-2014772353,-262238976,-401930264,1586302102,205056216,-386900339,512559864,-236452478,238807050,1586300284,-1929122832,-504833954,-1306620662,182118405,2114856168,-1575056049,181331973,-387424627,512559816,-1041758846,235661322,1586300284,-1929122840,-1310138274,233629706,-386900339,512559784,-1578629758,233564170,1586300284,-1929122832,-1847011234,232515594,113706621,68224,176176771,-1928170240,2045306974,-262238966,-1928512536,-1477904290,-2143386869,779419658,-1928795005,-57935754,-1515911402,-605510235,147096569,79188050,703090694,113541928,1342571704,1342579896,-2094523416,1458046148,-1956684287,1438866917,-326898549,-1202301176,1344144900,-2080765720,2123171012,384863224,-1515870969,-128021083,-1928721432,-402292194,1323829764,-955679475,17465350,10086656,-386376051,512559600,-370670206,221505545,-2065104011,2118025216,309686538,-386376051,512559572,-840432206,219670537,-326931596,-126448376,118946955,-1515870811,-2096270360,2123172036,384863224,-1515870969,149717925,-1946650995,-1515870724,-115283803,1376306307,100972624,661579856,-1207516029,1344144900,-2080805656,-661977916,-1928758296,-402292194,-1092089484,-1206946548]},{"sector":3,"data":[1344144900,503347384,450009680,2129133568,-1956684288,1438866917,1048833163,1946159876,67553047,-1207959541,1344144932,503710904,452565584,65732608,-1963231000,413271110,1575324422,-326412861,182060743,79167488,-1202708986,1344143483,1358490,-2143386880,125108234,176045696,-954567325,17499142,103069696,2126008350,-1706025472,6980,102237894,-2147039488,-1962934262,1438866917,-326898549,727078682,-398029313,79187990,-1706025466,7034,384321165,-123213744,-1962621821,146204888,92413581,-402083864,443812857,55041931,-394297123,-1191873488,1344144900,384254861,485071440,783810560,79187968,-397402618,-997984202,1958742790,100972587,1218072606,-1962934252,-1132441872,1949304324,21270008,1038501513,75300875,65788043,-973075525,394375,-443850914,-1957313699,250381292,922703447,-1382413558,184549404,-385649216,28836015,-6664192,-1962934017,1979059184,10348803,483498582,1183383552,-61437446,-1980348791,1589966934,126494454,183649928,645428416,2084650880,1065362954,67403610,-1979454688,1183380038,1970093310,-163119303,653680324,-1952970870,2084650232,2136620041,541428997,-947191061,1946168125,2964780,1664946292,1026454528,594804850,553535174,1187382507,1191117310,-28931338,971526296,46433260,-337407512,-28916083,-957879550,-352059834,-28915999,1457253124,1896346,486447616,1035468800,233328640,46433260,1591961064,1575324511]},{"sector":4,"data":[-326412861,1443294339,185218815,738970,1958742784,-26035,1119354880,347623424,1347590400,16777114,200313600,1446212854,16777114,-96040704,201086601,1378055362,-1191545089,1344144900,1747610,-6662656,-1207959297,1448083457,16777114,190552576,-1956773888,1438866917,-326898549,-1202301160,1344146092,-2080972568,2123171012,384863208,-1515870969,100972709,-890744802,79987702,-1947173235,-1526262032,-1918523995,-840374178,-2111927034,113698821,2114588904,-262238932,-1928938520,-402292194,-18348364,-1923318263,-1444353954,-1575056122,156428293,-386900339,-421001572,-347833079,-396456644,-1928949784,-402292194,-756545912,-1926202103,2112417886,-2111927034,108455941,2097791208,-396456674,-1928959000,-402281954,1586301204,106883312,2114562280,-2147039482,-2097151734,688190,1586311797,105310440,-386900339,1586301264,125102328,-1928795005,-57935754,-1515911402,-1343707739,147096565,-1397206958,-35106806,113541923,-386376051,512558612,233309570,156755974,113707125,16,113706731,65552,-443850914,-1957313699,8501484,179091536,600238160,-955988861,4102,1575324416,-326412861,1461251203,179091542,-1293397986,79987701,-1947697523,-1526262032,-1197103707,1344144900,-2081055512,2123171012,384863216,-1515870969,-396456539,-1929011224,-402292194,-488110696,-1926464248,-1914113954,-2111927035,92727301,2114506984,-396456612,-1929020440,-402284002,1586301060,91154672]},{"sector":5,"data":[2097723624,-1925387452,1642653790,-2111927035,89843717,2114495720,-262238928,-1929031704,-402292194,-1830288056,-1927381752,1038674014,-1575056123,131000325,-386900339,2062026032,-955875832,17465350,-2143386880,846528522,-387424627,1586300184,128641264,-386376051,-326957498,-126448376,118946955,-1515870811,-2081127960,1347553476,1342876856,-2094870552,1586300612,82241784,92413581,-402333720,141887529,1050311,116064256,1050311,1599995905,-1017256565,-1964209323,111281222,1038363147,578027566,-722926730,212224,58097012,1023454185,57999361,1023447017,57999362,-385842455,1048772861,1962937050,75399189,-1206946639,1344144900,503350456,535468624,1183449088,1357130244,-2081002264,2122318532,58044676,-956248855,17488390,12839168,704923274,-85438236,46433274,182060743,-1360461824,-637090048,-402653174,113702529,-385874408,48758941,-1193153542,1344144900,504016056,454859344,113704960,2778,-335857432,-49551234,887681259,-387191810,1877736980,-352292632,-86644557,624780779,2012312576,277767,1475077492,1912613437,2833746,759007862,-343575552,6503750,527947636,1962946365,-9115389,1912614973,3751218,770245495,4013567,1961427829,1025567743,57999470,1040129001,57999472,1040141801,57999473,1040149481,57999537,-1946221591,1438866917,-326898549,-1202301160,1344144900,-2081198872,-661977916,-1929151512,-402277858,1586300500,78178544]},{"sector":6,"data":[503719096,-212866992,-1929067389,-259266434,-1515911402,1586341285,55765224,92413581,-402437144,142345877,-387424627,166396736,-387424627,-941096136,-1306620668,53405701,2114353384,-262238899,-1929174040,-402292194,1726481180,-1928823802,300478558,-1928729853,166260830,77129731,95559309,-402456600,511575625,94510733,-1929186328,-840374178,-262238971,-402462744,108856881,176162503,1048772609,1962936960,-396456654,-1929195544,-1847005090,-128021243,-2096890392,1988954348,385649656,-1515870969,-231151451,1376306307,100972624,545712208,-402209661,1600059841,-1017256565,-940799147,711174,-2147039488,-956301302,17499142,403097088,79167494,-1202708986,1344143494,2205850,179091456,-1984409570,-1706025472,8647,-1017256565,-2081649835,113706220,65554,503857336,100972624,-1835380706,-1207959521,1344144900,-2081282840,-661977916,-402508824,1183384471,-27883012,-1934077870,79187968,-1461170170,147096351,16678531,1183516796,-27882500,1183518187,-27882500,-763111177,-2082801920,159318522,-1073019780,-471334029,1575324637,195,0,0,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,939968299,-1996488701,1459654670,1381172822,857605352,-6664000,1459618047,16777114,1958742784,-339351545,511567952,-850591816,-1957313759,-18196,-1957313699]},{"sector":7,"data":[-18196,-1957313699,1354771436,-1710983425,8903,-1017256565,-1192457387,-1957691328,1861682246,-23441402,-1962934238,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,8973,-1017256565,736922453,1996443840,279484932,-443875328,-1957313699,74907628,1119386,1575324416,-326412861,-1710983425,9078,-1017256565,-2081649835,-1070923028,71732048,-1706012007,7365,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443867504,-796081315,1465303182,512488331,-1014824408,-1929671924,-1898345280,-52916543,-644962907,384562059,-208971946,36183691,-1962097789,-1898345221,-1515848511,-75369589,1584661024,36183689,-956532855,1594097223,-796081314,1465303182,512488331,-1014824408,-1929671924,-1898345280,-52916543,-1515870811,-208938610,1465260267,512488331,-1014824408,-1929671924,-54423847,-1515870811,-75369589,242483744,36183689,134105030,1610381193,-186006690,-1898935293,126559936,39291686,-796125973,-1960394610,183212295,1468729227,-1962677502,1465293063,-796140917,-2145073270,-604567687,-612115721,675187456,214401794,35716993,1049214068,2106130984,-1898345220,16744641,1170607221,-1632369666,1594472424,1170654046,-1118500866]},{"sector":8,"data":[-880048288,-74720461,1561136872,1455644255,-1898410921,675187648,-59405566,-2080488054,-8319801,-1267465696,36191881,-1996718711,-1510146491,1946369189,1604691202,-796081314,-661912853,1465303182,-1946354805,-2097010658,201467910,-796126741,-661912853,1465303182,-1946354805,-2147342306,1963196031,-59274483,780379557,1594622504,-1990868130,-1962888154,-396886921,-1956707328,-454337058,49008780,-1064380276,-74754218,673090556,671515394,300616706,49008780,-1064380276,-74754218,673090556,-25198590,-1961921273,-1515848585,780379557,1594622504,-544750754,-1962724120,-337672201,1431787241,11806345,915099987,-293404120,674662668,175931394,141855491,-1243085451,-402396412,1532560565,-1017225379,1049319254,1569325608,-59405314,141948731,830537522,-1017225344,-1929609847,-54423847,66814117,-2136143755,1605075188,-1515863202,-2131459923,-1017225301,-796108970,49004686,-2065148074,1443162882,-1191998633,1995112456,-796108970,49004686,1827166038,1443162882,-1191998633,1592459268,-796108970,49004686,1424512854,1443162882,-1191998633,1189806092,-796108970,49004686,1021859670,1443162882,-1191998633,787152916,-796108970,49004686,619206486,1443162882,-1191998633,384499728,-796108970,49004686,216553302,1443162882,-1191998633,-661979136,36191883,-1047602804,134118784,2106003572,646534652,-1744895820,1599930514,-1014774946,11976450,-1962797080,675187703,1457515266,-1898935209,1443032000]},{"sector":9,"data":[31189079,1465255147,179893131,1450633984,-1898935209,1443032000,29616215,1465255147,112784267,1449061120,-1898935209,1443032000,28043351,1465255147,247001995,1447488256,-1898935209,1443032000,26470487,1465255147,381219723,1445915392,-1898935209,1443032000,24897623,1465255147,314110859,1444342528,-1898935209,1443032000,23324759,1465255147,45675403,-1948742912,-1946015682,-2134798631,1946680957,1592284677,971595265,310271,146480363,-1156060416,317390860,-352317253,1358605,12257515,-1157371136,1465253912,36191883,134118784,2105559924,1031014386,-1995640957,-1946015682,-1950314792,2106195061,142445564,1931017091,646534413,-1744895820,1599930514,780387166,-15990232,-1627352425,-784269275,182767848,1583324896,46367683,-352262936,46367675,133332352,-276581772,675186956,13625346,-1346654741,924629504,-2129762327,1986939143,1684630625,1766067075,1701079414,544825888,1325958192,1718773110,-1971884180,1635013390,1864395619,1718773110,225931116,1920099594,840987247,976236593,1869366816,1852404833,1869619303,544501353,1869771365,-1105184142,233514985,-349709122,670285320,-742521877,1444871207,45817614,2406656,-1272446022,1176620352,-1953392468,-851397418,-1161065695,1085548547,-1403117107,1357132319,-132681496,-1074558005,-1064566602,-1047602804,-1510156146,-1093038427,-1950154570,11976691,-645087092,-661732978,-1515870724,-1093038427,-1950154570,2106195061,-28981508]},{"sector":10,"data":[-1962677497,872217717,-1962112064,-1023999404,628391808,-86964855,-657335855,-640550191,-86910767,-657335855,-1996339831,-427817907,12747151,106268984,-1996125757,1166606917,105220356,675187651,210500610,855790731,-2134706240,-785812353,-774254086,-772091432,-774319655,-774254086,-1880719144,939573889,1479,-1996339831,1435042893,-1007187194,-796211061,1049357035,-1375993304,179161227,-1378579768,-594874230,-772240723,-774647326,-774647326,181653986,-2147257139,-2135883318,-326436598,-265950942,1205878143,2964855,-784633288,-773795360,2010200800,-166366713,276038086,-2097035648,141754579,1023442949,393510784,376750091,176154496,-1981478201,-477494715,92915338,-373033077,-1070334327,1166607753,-1007187198,-628370893,-1014247285,-796189205,-770974925,-621341319,-628420117,-1014247285,125419531,-621290505,-1979655293,-1266670396,74901918,-628370893,-1014249333,-930406933,-921969869,-638118535,-628420117,-1014249333,125419531,-638067721,-1979655293,864036036,-1110297601,-1393982112,3860487,736628203,-402068736,65732661,-788519192,13796288,-925801355,10086595,1055395307,-402068736,65732698,184564200,-1018464814,-352310040,2942989,2028472555,-402396416,-919404482,226098955,-755510793,-2081040137,-779943726,-2084384512,510984401,-389821743,65732691,855644648,570537435,-2134045973,334856697,1925387227,-1695956223,10873341,-703950163,-1850895443,-293367379,-1225159928]},{"sector":11,"data":[-2131680753,-444591922,-773205633,-773205527,1959332841,-18251304,-2089192957,-897638151,-349836925,-1965935824,-125129510,-1396143443,-293355130,-1947629052,2145485305,-790310912,-590284335,1299499275,1920919936,553222983,-377251713,-2133199072,444336377,-184419712,-494873904,-1965880831,-1963423009,853969604,149520630,367256043,-1308493184,14319617,-657330480,-623846447,-503262592,-1949660429,-1010594864,-2147438087,-1070399279,-373043061,1760099557,-402149376,915079477,2080571944,284132102,-427763829,-252018305,-1981779073,-24443268,-54531645,-1342141976,17819651,36189835,-2130543613,-1962901265,2145812695,2139159169,2089410419,-1006728446,-1962926360,-2097010634,2080444655,-1006728442,-1962912280,-2130565066,16810223,-24444292,1049361603,-1064566232,-1047602804,-1515870811,915128462,280625704,105679616,-511575669,-905314289,-2130293623,-1946160921,2145747151,-788515400,-773205527,-2115382807,2097427433,-338036988,8710465,675187708,-1933538302,-1514041639,-1950314843,-1174263754,1284178048,-2114352382,167804897,38570442,-8329343,-444543093,1620095,-846536239,-377361102,1216151702,-935601673,343732107,-2147424383,-935593461,-930411916,-444469365,-366247936,-108998093,-2146141176,-1292566022,13795328,80090122,149520384,-1964512442,-1156783308,-1047920086,586058455,-1020491544,-779368141,-1144834934,-276168703,115597706,-674174255,-687146270,-754262494,-1300104576,14319617,-41221516]},{"sector":12,"data":[-489436022,36179595,734528408,-1997405490,1174856500,-503311232,-1007172614,1282703232,-1007299631,-2131005463,-456097844,38046659,39684902,1954513065,-1445922847,-789086336,-738729356,2139145207,-663432201,-281875318,-472787592,192143569,-1929934957,-1898345278,1004179137,-1962576445,87762436,-255592509,-782338945,-373033517,-863962340,-1008414593,637944971,-1459200629,-512458768,-257306377,1959851903,-137103390,-142610237,-1965525805,2028942060,-773598763,-1827965984,-1030948985,-1047602804,-1019487602,1149966197,1161504260,-1961986812,992346692,91554373,992347275,-142097659,-2147334773,65765620,-1962785397,898236765,-813694798,38570880,-1946190709,-410975884,-830341376,-1043234816,-318062383,-469080716,-331719820,-209255053,714209927,-2133002523,1232541948,-388970032,-1970153008,-486492723,251232341,-771026308,-880802956,869501697,283738331,1047797106,2114320768,1959922219,30310403,-209004918,-41230454,1997072768,-786205673,-19672606,-336038463,-1948349671,-792622121,9955816,1950335734,550141955,-623776815,-1024001310,-2147257281,-523231030,-687664016,1349770771,-623780911,-58669826,-381323777,-97781267,-678694117,175365771,-621292553,13861877,-619982602,-327152779,-2023066096,1960512474,1979648612,149717007,-74818698,-225780086,-16068046,-855766408,-489600140,-160312367,36847232,-385649664,-92274316,1913091968,29816340,-964685964,13861633,-989984909,1962933376]},{"sector":13,"data":[-773795782,2139138520,-2145118348,176154496,675187655,38111490,-963976310,-141884023,842956995,57933826,855733993,675187648,38111490,-141884023,-370771517,-1375930039,-778685301,181981408,-1948879644,-506396083,-318055984,1032571764,-1053632373,-2139034496,-452821011,-998190224,-229248,844156276,-2131784961,-914325301,-1947497600,-1947732026,-1950348326,-403202875,-763111421,-1946514688,65468353,-1644555304,-880802956,-154825983,-1949891615,173577171,-787777281,181653986,-385190428,-989921429,1962933376,-14882385,1301018503,-790507262,38046681,-657399599,1450503434,-613096438,-327106254,2146271361,-2140084950,-2139044736,-2139815940,-1979622005,-2134298067,1048608975,1946157618,-773074680,842924761,1418416130,841255425,-2133950272,-657331503,-1962927384,1173742,-695483893,-897580172,-371356927,1609170812,1943223288,-1762396387,367247411,-963904885,-654843401,-678692325,55445363,1943212993,-4275207,62991359,1942064080,113689581,-1979710926,167916590,-2146994963,-331739411,-469091209,922695796,113705512,37028392,861033296,-388287790,1532690006,671532888,1342322946,-13479341,1526601704,110057563,1005126184,868234238,-1563282469,922681906,113705512,37290536,-397257904,-1070334430,-1560136285,-739573193,1837889415,16089350,-1960973440,675187703,-1515870974,2145681581,176219776,915123174,-24444376,107842499,105155580,-556735023,-623845167,1962926117,-521829934]},{"sector":14,"data":[2011708415,-1778940151,-1072966010,-986988172,-1606559497,-793217274,-790769178,1474154978,-1059995439,-528039727,-1968375669,-1832897824,-1817341523,266633389,185650304,-2090633985,410783487,57987595,-1962817152,-1949594671,-2084555816,-411627281,594692212,2080833411,1959922219,30310403,-242559350,-343224950,-125116534,-466434934,1997074307,-786205681,-774778398,1204867539,384562549,-1024012409,-2147257281,-388947766,-539894831,-152905007,-1755394169,1950335734,550141955,930145745,-657398319,1276326914,56365825,91523996,268428929,268488321,-134343779,1948254407,-773861101,-774254117,549815258,1977679235,-157030141,-788494103,-153562907,456403664,1545273676,91523843,-1670753,13533455,-31744496,-164424845,-671624970,-772287497,334879479,333321166,79625470,1979648768,-523766248,-310307979,1081475584,-1958906802,-1948677125,-338545718,-523765788,-2129103585,1979777261,-527788249,-74791030,-376775286,-225784182,-141098830,1963983047,552436498,-489590412,-741223983,-336865327,-57645589,38420096,-385649664,-92273787,1913091968,29816351,-964683148,13730561,-2097097853,-940113705,141828096,-2095004285,812966141,1049360267,-561577432,-411008988,1961742607,853575202,180685760,105220551,-1979359864,-1047811386,-1413051477,-1962545277,58311671,-51006231,38420096,-385649664,-1070398601,36191883,-1414793333,-24400981,1150024899,634424070,-613122064,856051083,-253656623]},{"sector":15,"data":[-774867841,769774048,-377389056,-1056735264,375920,-2081408,-422529420,-397354799,57934209,1560398464,-657398319,268486647,-489615755,-741223983,-317990959,-1813312907,-2095004285,-2005606147,-369154839,-142084802,105745404,-511585909,-277577744,856048779,2146444752,-523134092,539877841,-521567872,1891707775,-2147482213,1962926141,-773402469,-1968418600,-1379323160,-1382896237,-2146442112,1351749836,-964429941,38321925,-461328899,281837583,1185260971,-956521401,1048576005,1946157642,1220541727,-1376285950,-388896629,38413826,-1376923221,-1381246767,-1381246767,-55846703,-773140136,-774123048,4188377,3926103,3663959,3401815,-1056193781,-678706677,1952406361,30048259,1946665718,147488771,-606998575,-623781423,-606998575,-623781423,-606998575,-623781423,-1946220311,855787574,1943419903,1976699740,2012232452,1391916859,-1947389033,37921269,74760203,-225712137,38052176,108314635,-268179465,1185016339,1958742786,65533704,13796328,-621323630,-585380325,-1779950755,1939050898,235097875,504562242,101909060,370344518,-311229880,237719491,505086530,102433348,235078214,504562244,-1038941626,37885579,-1966478347,-466483644,269225764,-1979564381,254019141,1084428300,-1948568830,-485717013,227250458,-503904029,-896800629,1435174027,1959922434,65206022,1440355272,1150020915,1958742786,185961230,-150440750,331875298,1490407898,-1957641973,-1073020348,1435176308]},{"sector":16,"data":[1959922434,65206022,870978520,184847305,-1961921344,-771029931,-487126924,-367798269,1150013905,1958742788,185961231,-150375214,332923874,13730794,1354959704,-1073019765,653723764,-402456000,93047315,141869067,37627639,-904665085,1150016307,1958742786,72715023,141873675,-402398473,-741225965,184829067,-1961855808,-771030443,-487126668,-904665085,1426117507,1166798131,1958742786,1042741000,331875074,38046682,141869067,37758711,-636237821,184829067,-1961200448,-771029931,-487126156,-636237821,1150014929,1076295428,332923650,71666666,141869067,37627639,-367798269,-167625056,50479142,-782592059,-774778398,-774385197,-774778398,-774385197,-774778398,1591202259,-960236021,150022,38483595,141882891,79752833,1350038843,1282731275,36189951,36177607,1364197965,1465209682,-919348429,1055445555,1532846076,-950511270,1426204678,1381060610,861361491,-70129409,1515937119,110057561,451478056,868234236,869413833,871183323,38445823,36189951,36177607,1364197973,1465209682,-1074005784,-1070398899,-1414812757,-1957312789,-61384980,1988953886,40550156,-1523145418,-1523145418,-1957361429,-61384980,1988953886,40025860,-1523145418,-1523145418,-1090362690,922681962,113705512,41026088,-755018413,110058333,158466600,1593995960,1575324510,-1966525501,1612614088,41074434,1946418304,1946631186,1946369036,-1413467368,-341070933,-1107054313,-1515912498,243312037]},{"sector":17,"data":[-343932295,47103495,-1515870811,39718537,1589178763,-555200510,46433028,-1401569269,1048781232,1912799838,-1742557182,-788317533,-1967879194,1962281730,1612614547,350767874,43563776,-1962930456,649438,-402482245,2011758595,-1744336129,-1202502832,-397410302,-998044877,28885766,-1950091003,-1962792906,-1178586114,-1410138108,-1007092085,49201148,-1979300725,2146478584,-265952908,769095935,1552564192,55347973,1442927755,-774774063,-489565231,-741223983,-774774063,-813640751,1947248768,1049865,-640554031,-120464687,-1992302587,-75299259,-117214466,-1202571541,-470306895,56088765,-1123847190,-745799681,-168312781,-573446141,-1047800949,335148535,-1948397080,-138310701,1492159477,-578030089,-570177397,-506347469,-791555119,-741219887,-506343215,-791555119,-741219887,1158205649,73238790,-956150391,1577058309,-81729449,-122296225,268856707,-1957313544,82609132,1988843095,76170756,-153580648,67337095,-1952910475,772065016,-1744532922,-1946401143,-1962637113,-2142831490,1962999676,-1956684052,1438866917,-326898549,-1957275902,116065398,1949187200,1015039494,1190491392,16743552,199962484,1952791680,1161592843,-2142894476,-260767684,-1957771637,1308748792,1949318272,775717114,1179517301,-2008611446,1975519748,-1956684042,1438866917,1586228363,-400585468,512617372,-1779956286,-287315733,28837244,721611520,1575324608,-326412861,2122536535,443809796,-402098433,-997991587,106859266]}],[{"sector":1,"data":[-74768501,119468171,-1515870811,1996429547,-616306680,-1962752893,-346887976,-1962516853,-400585441,1600056372,-1017256565,-2081649835,1448544492,-2096871797,1465256172,-57937781,369411971,-1515870969,-396468315,-998047131,-96040696,138840912,2122534976,92143624,-352321096,-1950340350,1183447646,759137272,28837237,721611520,-129629248,1342588419,-2096698648,1988822724,-94467322,1965899651,755287556,142508870,-1979089408,76022084,772064838,1342350520,-1928831349,-397409984,-998045540,-2081387772,1946159742,1157940739,-94467258,-2147065973,1198796863,-1946526069,189727359,-1962312193,-1948715065,755287800,1694466886,-947187332,6601113,67172855,-140916853,1190824953,2081095555,-1714975983,-150992199,-1962671879,-101213753,-1958282613,-1962671929,1599997510,-1017256565,-2081649835,1448543980,-2096871797,-1957295892,-2080601104,118883015,-1515870811,24635486,-1995914109,-1957627322,38243288,1342719491,1965899651,112645,-1070923029,1342588419,-2096754968,1988822724,-94467322,1965899651,755287556,-94467258,163715,28840319,-396996608,-998047473,805619204,-1962480826,1996749406,142508802,-1203470848,1448083457,-2097089816,80086212,1586185774,41911290,-1960018688,-654900665,2117728395,-1962574584,48957510,1183434635,-396996600,-998047545,142016260,1342189752,116582486,-1962490749,1599997510,-1017256565,-2081649835,1448543468,-2096871797,-259323668,118946955,-1515870811,-2097105688]},{"sector":2,"data":[1183385796,-1948742660,-1991769529,-63046074,-1962377985,1178142790,-15433986,1996425846,108461832,-402360577,-997982718,-15734008,1996425334,74907398,-2080448024,1599997636,-1017256565,-2081649835,1952778366,142508806,-15633083,1996426358,108461834,-402360577,653000138,1711832707,1996427637,108461834,-402360577,-997982554,-15537402,1996426358,108461834,-402360577,-997982374,1575324424,-326412861,74877782,114681942,1073923203,1183536720,1355154182,-2096770328,-1956772156,1438866917,1465314443,-1898410756,74878400,906146495,916797093,-1096468827,-397081934,-1084423717,-1733557574,-1851460719,44744618,495583026,-1996335735,1170670661,-1962755578,-1956749369,1438866917,-1070338933,-1017256565,36189835,-385683777,915141855,-289471960,-189601534,36189835,-385683777,915142351,-289471960,-148313854,36191883,-385683778,1049359508,-289537496,-149624574,-1070377136,675187708,-1414812926,-1017618517,36191883,141948731,49200835,36191883,-1515870811,36189835,674663363,49200898,-1515870811,-1022824829,-1526532417,-2086296155,-1094514450,82510574,36189835,108330840,-16485121,889127540,-289480449,-1962611966,1476536374,1150223503,71601922,-16366449,674663392,49200898,-1515870811,-1850870901,91867403,-346952398,675187479,-1515870974,1360847781,674663254,49200898,1593185000,675187542,-200939518,-964470434,-1947934200,-1962792898,1150010359,635996678,729055216,1027588141]},{"sector":3,"data":[595002224,-388823887,-511653750,-389005049,-388962096,-136803432,281903323,-1979290490,-523106752,-1022989176,1686787667,1200238089,-2139085559,376816698,-2096445821,96012995,49185536,-1962742909,121318916,1532949473,-1783802173,-1817341267,-1174457427,-388956155,-623780911,-539894319,-472779550,20828369,-606997248,1577319981,1820933257,72648962,-1996071799,1724057668,-4,16777215,-858993408,-858993460,-1090519604,80085770,21284353,-1950338256,123420880,-661911869,-1073954674,-1185479938,-1510801404,105679710,2131190912,-1040768845,108298224,41535755,-397201997,-13369477,-1409088066,-1149992792,95287434,-930398210,-145944390,1303417314,-939268874,-1699686637,-939268106,-377357805,-545189132,-145288381,50249439,-1157495576,333987111,158490623,834361159,9300029,-1750247585,-1834117715,-1850895443,-141829641,216252467,-623776815,-556671535,-186458928,-2125020032,319003350,332469225,51101657,838865081,1381192128,-800041387,-774450716,-774712875,-791621421,-774450716,-774712875,1506857171,324658434,-384607759,1506874201,1366291,-690887472,-758000175,-791620655,1504325636,1229962722,-201510736,-1048314706,51035666,28839048,123427328,52215235,-1962932039,-205507587,1200303787,138674440,-1207957569,-953483260,-1003823070,-654916566,-1952971772,727077832,-2082526247,-251459389,-964430037,772049670,20850679,289275974,-2093088170,-2097150890,-1014824210,1592189442]},{"sector":4,"data":[46498651,-2084801201,-175698195,195924397,-938758712,-1834103542,-1750216438,-1817341523,200641453,-15894336,-489617332,-774776879,-791555119,587203005,869600239,33194477,-49023616,-585904877,-707672813,-787977215,-1983575091,38570300,-1996202871,12781124,0,77594624,0,0,1992,0,245121024,0,-1138753536,7102,-1090256896,915282889,1890950656,-978474965,-721392739,1241501606,-708675553,-376643584,-1169700480,-1912493421,-73532962,1403682539,-858993405,-858993460,184548812,1030792151,-89925878,426061055,-1223206686,-33557551,293888462,-424948617,1306614783,-1785413948,-1157641242,-1387972204,-1764773602,971613695,2146052005,-1577112408,2086976740,1474154566,2048473854,826484067,-1141068096,-16040193,1505428857,-2082474177,-1014822165,1962871562,1945096461,-396930059,1533017723,1438903531,1005120651,-491395068,175432714,294528,1187382389,-987824636,-1207751658,567092480,1846446879,-1157111035,520028162,1183516012,-850611196,-326413023,1459940483,74877782,-1962385781,80086655,317408816,1946172800,1191545349,816841451,-12188536,2122516046,-394330106,-2097150778,2080376446,893222930,65736060,1311769798,1949908096,-1962606857,1065354334,-1962379983,1207896158,-1961956606,1346372678,-402360577,-998047364,-1956684284,-1144824347,-75430536,141755774,1528299347,-219462845,310211,-851181384,-167087583,91521218,56397696]},{"sector":5,"data":[-327595200,-852446013,54436641,939953859,915088899,12058668,-1994273483,-1945949154,235089414,620804127,-853389126,244004385,585303406,1879491894,869960709,520042203,57869676,920743145,91489989,62642828,520041984,521536876,1358275,-2013865165,1946223452,-851528700,-220052703,-326412861,-16583704,-1092090762,1575324670,-326412861,119428695,-1962639733,-678754698,990400139,-1961593090,1002505158,51147768,1324942321,-1527513777,-1960973316,-775550009,-1962249240,-775539769,-1528073496,-202780343,-1979354203,92808708,1600045707,-1957313699,119429100,-1962639733,139365343,1183455971,-1948218874,1944768983,-1958106622,-202780207,1944768939,92808707,1566557067,-326412861,1460464771,-2080535722,1170606831,1183531526,71665924,1170670985,-1920991486,-11532218,-396949898,-998047056,-1012986,2105737805,209453058,495697970,126354943,183231530,1354773335,-2097076760,-963967804,-443850914,-1957313699,508975084,108956423,-1070336117,-218103879,-638107218,-1962639733,-1952123945,1566531266,-326412861,-1962467753,-1070398338,-218103879,1086426030,1608054592,-315440291,-355399965,-85796655,-326412861,-167485813,537091207,45616756,-1949748414,1931595217,31648003,56395766,-385649280,1317732481,106334984,-1070397666,-1957275652,-470119440,1074444389,846573298,735021905,283331018,60563917,74685936,1240140212,796180491,178502,-1274774342,1931595072,-351685628,1958742836]},{"sector":6,"data":[-678733542,-1957575189,-842388529,-268198879,-1274776675,186313481,-166300224,1073962119,1586170740,440369158,-336067723,12122372,41048348,1600046731,-1962846231,1451952206,-851397626,-1274776799,-470947063,1975520235,1552414439,175390723,1065409163,-133991142,-1191586069,-789898240,-2081649835,1448543468,-1979287925,-1449654716,108265603,1074152694,-4716940,14215679,17188086,1283458676,-286580730,33967232,-284793728,1149878323,-1980200190,1157037694,259328006,-1744354166,-472786805,87984118,-1959758847,75246396,310312715,74776407,-1744354166,-20584368,-1996045181,1150025286,76103684,-16628537,73173761,-2012985718,-160896249,1963198020,-1493270196,-1976863484,1352140612,-2096653592,-1073020220,117388149,1153893736,-1979302396,-1952970940,-958148136,17120903,104793287,12106475,-571977726,46433246,184829065,-2147060544,-351795636,105676957,114436,71732567,121932368,1223184536,113542142,972965513,57998974,-1962986519,-467008442,-443850914,2126234461,-2131001083,1393062661,1130043391,-1007490237,-2130345797,1929741051,402608904,-347913381,141738994,-443826125,108249949,-1207955992,-443809793,-466435235,-1023409688,167986850,-2145159708,50544190,574360946,540806515,95421810,1016072171,-1342015981,75414291,983800023,-997539069,-1957300245,23247084,1474147816,108432214,-22903155,-1962550109,-660404154,71731973,-955919197,387590,-402209024,-2147483643]},{"sector":7,"data":[57999420,-2147399191,57943356,-956232983,17162758,-1547685120,-794622496,98870021,-1559898461,-761068070,99525381,-955912029,537255430,-2144146688,108342588,99616511,1015031787,-15960789,-955916282,381446,-2145981696,225779772,98582147,-16091904,-351940090,-301531388,76170757,15224984,46433030,-1082802165,99006550,92923984,-1962621821,775717104,117379701,1447429594,1342563000,-2096794904,-259324732,1970027648,-704198905,1174405637,1962949760,10545411,-1986526070,1040096902,175374405,1946175293,5782789,117377397,-2038233648,-1960771938,771661446,356319331,54425344,-13724736,-12206681,-955915258,388614,702464,8906832,-352140157,571472,280556267,871230208,-1595387712,-1192629503,-169148415,-23152897,-352182552,-335639589,-2025477311,-1337610171,-1186615227,-1186612923,-1186612923,-1186612923,-1186621115,-1186612923,-1186618555,-1186626747,-1639597755,-365001915,91488261,-351934303,-1494661600,624787710,-2142828940,-176881603,-970209397,518542928,79987459,-1964378229,-1956684034,1438866917,414772363,-603133952,2122536535,74713604,98830079,97926787,-1961462784,-1962551266,39291655,-1980217719,109312598,-352057896,-465665239,276037637,98049675,1183385483,-96024584,233504768,98049675,-1986459765,1451882566,-670661638,1048773125,1946158574,-129594611,1962558987,71731973,-1070398741,-1962546013,-2096767946,386110,2122525301,612172026]},{"sector":8,"data":[168066691,80090997,1183532589,-94991368,-763111177,-1982138624,1451882566,-163133446,99287041,16139975,-2080535808,1996429551,1996445444,-126418950,-2096857368,1048774852,1946158554,686315296,46433275,98700939,1317652523,-972755970,-1958334460,1325399622,2143292414,-2012902670,-801209596,125042693,58483004,1176513664,-8552377,-2082048768,386110,-526314379,-771355899,-2096401403,1962997374,112645,-1070398741,39184464,1577239683,1575324511,-326412861,-402650952,1448598238,98436807,2122514464,276037636,-1593835074,109250008,-1996356136,871103558,98049675,1183385483,-670661636,-1073020411,1187448181,-16477444,-2065105802,46433274,1048834187,1946158554,-502908662,-1962642683,-1962548682,721806910,-264338434,125108229,17754199,1443021955,-386107649,-998047379,-264338684,125042693,16181335,1577239683,1575324511,-326412861,-402652488,-660481454,-28931835,98188931,-955878144,101048838,-801702144,-499712251,74907397,98318079,-385976577,-997985570,75399946,-2096728985,1967588478,-297893096,292880389,98713219,-16092160,-402269130,-997986327,-297893118,292814853,98713219,-16091904,-402269130,-997986408,-670661886,113707013,1516,184934561,1946538502,-25755886,-2081421080,-1073020220,28837236,855829248,619204800,1575324417,-326412861,-1276592077,1048794841,1962935786,-736195784,38797061,163715,1183453564,-736195836,-13137147,704940039]},{"sector":9,"data":[-15864860,-16395210,1541932150,79987706,-16353984,-351933946,-402194684,-443851259,-1957313699,178412,1473865192,-365001898,1366622213,184841867,-347439370,-736195789,38797061,163715,-559935108,-736195835,-12612859,705005575,-15799324,-16395210,-402268618,-997983742,74792964,99223295,189712011,-2084143168,387646,1183516533,-402259708,-1956684283,1438866917,45673611,-654514176,1988843095,108956420,99237507,-347310848,-736195787,38797061,163715,76157564,97787531,134156171,126409099,250340394,97793791,1352139914,-2080794136,1967129796,-368640252,-947173883,1975520079,-365001788,125108229,17188491,1577445382,1575324511,-326412861,-402650440,1448597650,98317963,1183432755,-129594884,98975371,-128063402,-1996307325,-131335610,-2096857557,389182,1015027061,-2096073427,805690942,-1733555851,-23205808,-2096970621,805690942,-16053388,1048774526,1946158576,75399961,-16354304,1592326214,-331447552,108265477,-386119937,1048772720,1962935792,-1310173402,46433278,294531,2122516852,57999608,-2097138456,388158,2122516852,57999612,-16759832,-396952970,-997982479,-264338684,225705989,98436807,-396951520,-997982604,-1956684286,1438866917,-1070338933,-2083008024,385086,733480308,-1207702784,-397410272,-443810301,-1957313699,-390056980,817420210,-253210624,46433277,99368579,-2095680240,380990,1488455028,-1207702784,-397410184]},{"sector":10,"data":[-997982765,1575324418,-326412861,-402652488,1448597374,-2147060085,242559548,98049675,98043523,1178569474,-13419797,2083536000,960266291,1043934847,192218586,1966095488,-569981178,-1409273851,-774927464,65130977,65130959,820609992,1015085451,-2147124176,-478267076,-1996202357,1590070079,1575324511,-326412861,-402652488,-1101605098,233505945,1178076298,-1207601916,149618689,3964998,-1070338443,1575324510,-326412861,-2096865653,293410043,2080439171,1552414220,91504643,-352321096,1572877058,-326412861,887685299,-326413056,1459940483,77512278,401342259,-1744419702,1946190761,1978160651,46433024,1191277632,956876419,1929733686,1590135779,1575324511,-1957275709,1183517262,106334980,1460174475,-1812199650,326418442,1963653507,2043808526,-1439846390,-763110409,-1948584192,-768371977,41205771,-141299209,-746089743,960245764,654574198,197299114,-1998424637,-2035527931,-12285947,1928805199,1600018677,-1957313699,82609132,1988843095,1459565316,-2097128728,1149895364,1006838790,-163810046,1963460164,121932303,-774337640,1049097955,661913861,1143669899,-62486268,461291531,74776400,-1744354166,-168171440,990299267,125107270,537283712,-1946157121,76088388,148679,1590135552,1575324511,-326412861,-2147197301,1573848679,50354115,50905857,50358784,51028225,50359040,51409665,50359296,51403265,50360576,19027969,50331904,51405825,50360832,19050497]},{"sector":11,"data":[50332928,19062017,50333184,19065857,50333440,19078145,50334208,33733377,50332672,51400193,50363392,19084289,50335488,19091201,50336000,18607617,50336256,18646273,50336512,19097345,50336768,52592897,50332928,51066369,50333184,52154113,50366720,19108097,50338048,52201985,50366976,33889793,50336512,52213249,50367232,33922817,50369536,33883393,50336768,52230401,50367744,34061825,50370048,52158209,50368000,19036929,50339328,34490113,50338816,34071809,50339072,50978049,50337280,34470657,50340096,51390721,50370816,34118145,50340352,34047745,50340608,51084801,50371328,50696449,50338816,33898753,50340864,51385345,50371584,51077889,50371840,51100161,50339584,17499393,50343936,50994945,50340096,51130881,50373120,17816833,50344704,34443009,50343168,17772289,50345472,51039745,50341632,51045377,50341888,34744577,50343936,51381505,50342144,51398657,50342400,34688001,50344704,34683905,50344960,51541249,50375936,51427585,50376192,51550465,50376448,51566081,50376704,34746625,50347008,51447809,50346240,34738177,50348544,34422017,50348800,34049793,50349056,34748929,50349312,51073793,50381056,51456257,50348544,51471617,50349056,50989313,50349312,18979073]},{"sector":12,"data":[50354176,34710273,83906560,-15664384,50331904,18095873,50354432,18585345,83909120,-15740672,50332416,19029249,50354944,50985985,50351104,50716161,50351616,34729217,50353920,51001601,50352384,50720513,50352896,34704641,50355456,51035649,50353920,50430209,33576960,-15663104,33554688,-15739904,768,0,0,0,0,5,0,0,0,-1322373119,822230315,1663906610,909456387,923018538,1898920248,807403520,1026273582,858927392,874529581,623523381,959985440,1291853871,726466605,5393664,1124090701,6515809,1668047171,11141120,11141205,11141205,11141205,774176853,771778104,3014704,805318192,774897710,3026944,774897712,3026944,30757,763101184,762589321,762458214,786313316,794964621,794833648,751645422,1929653536,7631473]},{"sector":13,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16842556,-521078532,32960,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1141243904,1229016399,1230177358,1409632078,1397968716,42009210,0,646,119552514,1920099616,684655,808463205,48,0,0,0,0,0,0,0,0,-65536,-1,32751,0,16352,0,16368,0,16384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25264513,1]},{"sector":14,"data":[0,0,536870912,538976288,538976288,673720360,538976296,538976288,538976288,538976288,1210064928,269488144,269488144,269488144,-2079322096,-2071690108,-2071690108,269488260,269488144,-2122219135,16875905,16843009,16843009,16843009,16843009,269484289,269488144,-2105376126,33718914,33686018,33686018,33686018,33686018,269484546,2101264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,369101325,219677186,202116105,-63481,302846719,1848180482,694971509,539831040,142475299,142475264,1,0,258,0,518,0,900,0,1026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,0,0,0,0,0,0,0,87425024,0,65535]},{"sector":15,"data":[0,0,1084571789,1264664749,16633,0,0,0,16420,0,-1717944248,-1717986919,16313,-849019008,16845,-849019008,49613,0,16368,0,82009,90963971,262399,0,852227,2097165,262176,-65536,-1,-1,-1,-1,-1,-1,-1056964609,-2130706625,536870687,1073741711,1073741775,1073741775,1073741775,1073741775,1073741775,536870863,-2130706545,-1056964833,-193,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,520093696,536871040,1073741888,1073741856,1073741856,1073741856,1073741856,1073741856,536870944,520093760,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1310740,16842756,0,254,15794173,15794173,15794077,15794141,15794141,15794155,15794155,15794155,15794155,15794167,15794175,15794175,15794175,15794175,15794175,15794175,15794175,15794175,15794175,2,786447,16842754,0,-17104644,-25428229,-19398985,-16777489,-16777473,-16777473]},{"sector":16,"data":[257,4194304,524352,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,16580607,0,16580383,0,15793951,0,15793927,0,15793927,0,15793927,0,15793927,0,15793927,0,82902791,8772,82902791,8772,133172992,65279,82841344,8772,82841344,8772,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,15732480,0,16518912,0,16518912,0,-520155392,0,-520155392,0,-520155392,0,-520155392,0,-520155392,0,-520155392,0,-520155392,0,-61696,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},{"sector":17,"data":[-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16580608,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-536674080,-8454144,-536674080,-8454144,-536674080,-8454144,-536674080,-8454144,-536674080,-8454144,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-251461408,529516515,-251461408,529516515,-251461408,529516515,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-251461408,529516515,-251461408,529516515,-251461408,529516515,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,-16580384,-1,224]}],[{"sector":1,"data":[0,0,0,0,1768179088,16777332,1886339840,843450745,163840,1953718608,1850280293,115,-2143289344,285218313,1946198016,0,327680,524448,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,130946,234881024,134258688,33554176,-2108685824,1668047171,1952541813,29295,2228254,524382,131071,1451380738,1769173605,824209007,3223598,788529152,151035904,33554176,-2108685824,2037411651,1751607666,547954804,892877105,1766662188,1936683619,544499311,1886547779,973078574,536886016,-1711272448,50331906,1800372304,0,10879052,65538,1342308356,130,-1610590720,16780288,33554688,542212688,1901273149,1701994869,1869566496,538976372,541990944,1749229629,1701277281,1734955808,110,-1610587136,16780288,33554688,1917878864,544437093,539446567,543452769,757083179,743579692,544370464,1868963907,1699553394,2037542765,0,1631783424,1819632492,1919906913,1920091397,1091072623,1953853282,19803694,177,0,0,0,0,67600385,117377022,33620992,16908545,-16580606,-50201342,-33554944,-65537,33423614,50266623,58721279,-16253198,17170436,-16285693,-50201087,-16777984,100136576,-33030656,117800967,-33423870,-50266879,-513,66713984,-98303]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[15751757,64,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":10,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":11,"data":[279886,17957335,191459723,655366,268445696,66684,655360,196618,4194514,28573840,29753792,1769,262189,1187250176,42463232,113573888,113574012,113635696,82379003,82506032,1477902677,1477964080,23987992,24051984,25626419,25624848,34539342,34603024,51054447,51118352,20318113,20381968,35522486,35586320,33949660,101581073,-2147352572,1,134283264,1048585,32769,-2147287040,1,134873088,-265289663,32769,-2147221504,1,139132928,-265289709,32769,-2147155968,11,140378112,-265289719,32779,140967936,-265289720,32769,141492224,-265289717,32770,142213120,-265289717,32771,142934016,-265289721,32772,143392768,-265289717,32773,144113664,-265289719,32774,144703488,-265289710,32775,145883136,-265289716,32776,146669568,-265289722,32777,147062784,-265289720,32778,-2147090432,5,147587072,-265289699,32769,149487616,-265289707,32770,150863872,-265289710,32771,152043520,-265289720,34815,152567808,-265289725,34816,-2146893824,1,152764416,1048580,32769,0,1279345416,1094995525,82,524289,100663308,1314014539,1191398469,1426344260,760366419,1070399999,22531843,-2063450163,1070399744,22533379,-620544051,1070399831,22536451,-419217459,1070399831]},{"sector":12,"data":[22539523,-217890867,1070399831,22542595,-16564275,1070399831,22545667,184762317,1070399832,5771523,973291469,1070399567,368131,-1526513715,1070399516,2080259,-754761779,1070399517,1235971,-1291632691,1070399496,818691,-1492959283,1070399508,611331,1426276301,1070399558,4709123,-2147270707,1070399557,93953,606157,1070399488,5,1292255181,1070399488,8,475085,1070399488,71174,-217628723,1070399488,173569,278477,1070399488,296706,67387341,1070399489,2,1795243981,1070399491,215041,369704909,1070399489,236545,-1056555059,1070399489,152583,1766662656,1936683619,544499311,1684957527,544438127,1701601603,1918985326,1869762592,1835102823,1174929408,1296388686,88430159,1313213184,1095451457,1297236300,117443411,1111576134,173299023,1313212928,1414418243,1397509970,1141440519,1313228620,1313165391,1175453698,1330794574,1329742147,1380996178,223628873,1313212416,1163280723,217921,1145980422,105206849,1313212160,1313428048,218104916,1094995526,1413829465,1196312916,218106195,1347636806,1095320389,1296651340,251660357,1279544902,1329742151,1380996178,206851657,1094912512,1145984844,1129271888,1,0,151252200,209125125,-16091393,1996425334,74907398,16777114,1975520000,-339727559,-297366194,4778064,712359947,39991039,72103679,384714381,-26032,-1073020928]},{"sector":13,"data":[1183650933,-1706027282,65535,384714381,-26032,1183645696,726669038,1347440832,16777114,1975520000,-227082312,-1023024664,33783016,73304833,-2130413685,18023039,-1070920075,-401698736,28836069,14608640,-2130420085,16777855,-806812812,48668928,544540473,1946812035,12642563,1851011,-16026368,-1711089098,65535,922733803,-202702214,1851011,-385649408,-963968866,1946160445,1031698186,1920204809,-1593799191,104399940,242549322,1342177720,-1705983957,65535,1252103403,-1706016766,65535,1048807659,1962934858,112656,1354771280,-26032,1911095296,38445567,-1193546936,-1706033135,65535,1081917451,47855359,1342248376,1965227651,243717,45614059,-1070903296,-6664112,-385875713,922746684,1659437798,2178559,574427762,1036023296,-1636564954,1962944573,-9180925,-389824469,17433253,4734595,-15895552,-1207803338,-1706033151,65535,4865667,722236416,-6664000,-16776961,-1929360882,-1924076474,-1873742266,32827406,956456609,460715590,956453025,326495302,956453537,192278086,956454049,58060870,-1593779479,378208860,1183384158,-94991880,-1544141173,922681950,-6684062,184549631,-385649472,922681479,-6684032,-1996488449,-1705971130,65535,1357661837,16777114,-196704000,39585339,1554208628,38846210,518813325,521543175,530949541,1851011,-12684032,1354297974,-6664190,-1593835265,104399398,158663248]},{"sector":14,"data":[956443297,1946309638,36086032,1978418745,36348184,1978680889,49069840,503457470,-1515870969,16777114,-2143879424,-227082494,16777114,108954368,-1205505024,-1924136356,-1873741754,14936078,343195659,5113543,1554055169,1578535682,58368770,58463881,31985296,1860748032,-1593834751,378208860,1183384158,-61437446,1358579341,49821439,-2081943920,-96039680,58374224,-401698736,-12779367,-2089779457,164926,-1070920076,26450512,113704960,196682,40648323,-1591708161,378209146,1822622588,1846970626,-26110,104529920,125108834,16777114,-1204491520,-1706033151,65535,-1962706271,-1996260330,1451883078,-96039428,112720,-401698736,2058878994,1183666179,-1070903046,-6664112,-1023409921,52456,140413698,17188491,2139161159,2114297602,140413709,-1610453119,140413701,-389871617,33751209,-1962379637,92997246,91423801,-335544392,956664602,-1207601660,267059201,956450187,-394526140,2130854969,-1010816018,1167120524,518818645,1465309326,-1275058456,-1339962068,48625212,13926593,-1996071285,1978206727,911363,-310157729,535137026,80366941,-852839424,140413729,-963976142,126470398,-922828150,-2130557047,-1995981591,1539507279,787254101,1128470411,-1031094221,-533995311,-1070377130,-523123062,1507065680,-443851169,-519873699,-1933843457,777752792,1128470411,-326412987,869830174,-775779648,1457531872,-1967115433,1356911046,1599722495,49120094]},{"sector":15,"data":[1562371467,50813773,-883751199,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,-1375287509,-1996488703,1459724302,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-78321657,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,1255,-1017256565,-1192457387,-1957691328,1861682246,513429510,-1962934267,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,1325,-1017256565,736922453,1996443840,-26108,-443875328,-1957313699,74907628,16777114,1575324416,-326412861,-1710983425,1430,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443875162,-21249187,83591425,1393062658,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1073861263,-1007912629,567095476,-1023298397,28182158,741772070,889239552,512303565,109838754,521011620,-1171980104,567084144,-200373450,908256001,32900805,-617358708,-232849610,-385649919,-986251703,-1946027514,244698,-232849610,-1021372927,855643321]},{"sector":16,"data":[-762841381,74711297,567099060,-1007492541,-387151019,1996423243,1042436,-1017256565,115600690,-657331503,1438907106,1122561163,-29235200,175432714,294528,1187382389,-987824636,-1207852522,567092480,-200373473,-1157111039,520028162,1183515122,-850611196,33864481,33880961,-11335565,1128487703,-1144786197,-75431420,141754886,1528299347,-219462845,50341059,50520577,50358272,50430977,50358528,50406401,50358784,50356481,50359296,-16771840,50335232,-16730112,50335488,50415361,50360064,-16707072,50335744,50350081,50360576,-16712704,50336000,17070081,50331904,50352641,50360832,-16715776,50336256,-16644864,50336512,-16647168,50336768,-16649472,50337024,17092609,50332928,-16620288,50337280,17104129,50333184,-16633088,50337536,17107969,50333440,-16563456,50337792,-16574464,50338048,-16577280,50338304,17120257,50334208,17126401,50335488,17133313,50336000,17139457,50336768,50635009,50332928,17150209,50338048,17079041,50339328,50455297,50339584,50346497,50377216,50528769,50347008,50491649,50349056,17071361,23296,0,0,1167087646,518818645,-326903666,340167432,-1962790237,-89976250,273058562,-1962771293,-22868410,205949698,-1560279251,1183515168,59548426,-1559738741,1183515208,39232262,723154687,1996443840,410451734,-1157627976]},{"sector":17,"data":[1347616767,-1709541633,65535,-1980217719,1347615318,16777114,-62486272,-362753,-6621066,-1962934017,-310117306,535137026,382356829,-1873273344,-326412987,-2116514274,1442910444,-244025,205949951,1946226749,17906952,-387359628,242679554,36845311,1073938081,-761638882,-16777215,922685046,364380722,922701828,-1070923232,-6664112,-16776961,-22999434,1344159746,49952511,41694975,1346375864,109978,1975520000,242679563,-1705983957,594,-385875528,-90111343,172374274,1187448693,-352318966,36872461,1963607609,172410629,1183514635,81162,37559156,-385649408,171770141,-385649408,188547363,-385649408,1357447748,242679554,1342177720,243866,-6664192,184549631,-385649216,1996423735,842465038,59547906,922701854,2124022304,-1929379838,385809542,59547984,-1046851554,-1929379839,1358888070,1342177720,-1929224728,1358888070,184758504,-12421952,-2037576074,1343684348,49952511,41694975,1346375864,226458,1958742784,59547940,-2037559266,1343684348,16777114,242679552,36845311,503549089,-26032,-1192689664,-1942552831,1354771203,-16644632,-402420682,-1073020199,-1070920844,-26032,-1729560576,59547905,-6664162,-1929379585,1358888070,2062028432,1958742786,-62470350,-1935605759,-1588584957,1344143944,1344798904,16777114,1444842240,1023904002,259391487,38280843,163715,1187448181,-4,1996426870,-16323588,-1070920074]}],[{"sector":1,"data":[-26032,954793984,138840833,1946157373,146699,-152501387,19261696,-15829249,-1929235914,385809542,540475216,-26110,1996423168,59547918,922701854,-6683910,184549631,-385649216,-1935540437,-1706025469,687,-17529207,-17004915,-6664170,-1996488449,-1946224506,-58552848,-158955010,-2133292034,91499071,1966751616,112645,-1070923029,-17660279,-17004915,-17398215,-2037560202,1343684348,-17398133,-6664162,-1996488449,-1946225018,-2012771624,1023340678,1006924842,-955878081,33485446,-157381888,-2012771586,1023340678,1006924892,-1950780102,520025734,-26032,-2037841920,-1098645770,1946222322,-192509164,-1945203714,-1933507837,-1957670182,-335612282,-192509166,-1945203714,-1933507837,-1588571430,507511550,-106263,-1935602058,-11526653,-16582090,-1207796682,-1706016752,65535,58048523,-369198359,1996488259,842465038,142016258,250089104,1589652224,-1962742397,1297948645,503319242,1430622296,-1910575989,108954072,762643200,-1207273729,-1706033151,964,175570768,-1710721281,65535,964688,1354771280,-6664112,1342177535,16777114,49120000,1562371467,445005,-2081649835,1448545004,16402119,105286400,1344163870,172186,-163149568,503727619,73701968,-259325952,1015086731,-2146208466,1966014332,-159481075,-955812606,63558,1015038699,-2147126180,125123132,33048263,-2093880576,1946158206,-339727612,178179,972572297,477300350]},{"sector":2,"data":[1949187456,1547534378,1183519348,-1957683706,-1706025273,751,-538183541,503399565,-129594544,50202115,2073710622,1577058305,1575324511,503317698,1430622296,-1910575989,-2098429480,1988843008,516328198,2122747216,-1202710785,-1706032896,549,91602955,-352321096,1589652226,-1962742397,1297948645,1426064074,-1957237621,283837558,1948925056,1060929541,28837237,1174989568,1962949760,1589652459,-1034033781,50337282,50459137,50358272,50582273,50360064,50583809,50340352,50417409,50340608,16799745,50344704,16806657,50344960,17082369,50350592,16983553,50351360,17041921,50351616,16908033,50351872,17070849,50354176,17038593,83909120,-16757504,50332160,50357505,50353920,50395137,50354176,50415873,50354944,50378497,50355200,50424577,50355456,50499329,50356992,50391297,50357248,50384641,33580288,-16756736,512,0,123170792,40018180,1946830393,19720451,16777114,2047228672,-402426622,1183523478,1958742788,146696,266929012,1714880257,80996354,1358448265,-1996154136,-11471290,-16498634,721700918,-6664000,-1593835265,1183384130,108432382,737572395,990003254,-1996259642,1084358262,1241918212,-230258428,721974923,-969148298,1988690814,-633929742,1354771202,37762815,-887041,-1705968010,75,-1946270069,-788246002,734079969,-1996262394,1956772934,-96040702,-1711520117]},{"sector":3,"data":[99094155,1956903415,1975520002,1946615556,41197826,71607112,-1711520117,99094155,-1031013897,-775804007,1419985144,-1580692732,787939956,-939325976,58199689,1851011,-398167040,1956716406,-96064766,200558217,-348881216,1144425247,-193582332,-422378831,51295487,302368395,-102215677,1958742809,-196149495,16023171,1996479349,112884,244338768,-1206161688,48955393,-389824469,85284440,-1962933826,-768931770,1183578251,1457420,58091892,755185129,322764802,-385649152,-1073545011,-1476448621,-1070922648,823846992,158646283,39991039,16777114,1979058944,57338115,-375799765,28836728,-102215680,-1577850064,1178141282,-385649650,726663313,-6664000,-402652929,45626593,1307070464,1354771285,16777114,-2084377856,1946159742,885516476,1996470251,108461838,-16222465,669518454,-336557058,2050424740,-26110,1996423168,-666465010,-6664170,-16776961,-1679239050,242679562,-2590977,1290328694,242679557,383272589,-26032,922681344,-6684038,-385875713,-8126621,-16156927,1996426870,14936330,1460303615,723785192,-11933194,336232067,146339189,-236433408,-12981975,-1705983957,65535,-1191235863,-219480063,39991039,16777114,1975520000,-15079165,1851011,-15961088,1996425846,429713414,-41239,1996425846,319154182,-1577102615,1183384168,47882746,1963869753,473858831,141819904,956583585,275973702,956458657,242552390,956490401]},{"sector":4,"data":[108398662,-1996257119,1996487238,-25862,-1125580800,40280574,1963869753,48406811,1980253753,37527827,-1593424343,1177092678,-432603384,9693442,956465313,1198853702,1851011,-1589611520,1178142186,-1592364538,1178141252,-15830266,-1207803338,-397410292,1827219066,59810302,1913013817,49586449,1929791033,1647771401,899074,922738923,179831394,-1579685120,1178141402,-385649650,1048837873,1946157084,937973568,-129595108,38405691,922685812,-6684062,-16776961,244381814,-1591978008,1177093198,1245118214,469755906,-16234967,-16614858,1996426358,142016266,-351897857,142016341,-2130282753,33754238,28837237,721611520,1810387136,-35788527,-15829249,1996425846,108461832,-384675352,2122579491,57999370,201225449,-2096138753,1963002494,1345781513,-401698816,1996423628,73709582,1354771280,-6664112,-385875713,244383131,-381577752,-626917997,239483138,988349300,473859070,57933824,1358835945,-1588543445,-523172770,1354771280,16777114,233826304,47855359,137114,47882496,-385855325,-626918057,239483138,-18283660,473859069,57933824,-1694632727,65535,-386057495,2078803917,-47060729,-15829249,-186119562,-47847161,-385788696,-2115437281,-48633598,36897175,30016051,65930166,36897834,36897331,36897331,31261235,26083694,36897331,71763024,1963004733,-38737661,440215671,1036219392,57999390,1040035049,57999616,1040119273]},{"sector":5,"data":[57999633,1040017385,57999634,-369264151,356384113,-385649407,373161358,1032680449,57999872,1040036073,57999873,1040049897,57999875,1040047849,58000484,-369166359,1996488001,209125134,-16091393,1996425334,-26106,-389873664,479848,39991039,385369741,90479184,1084293120,-230258428,737953419,1183447110,-196687882,1183514624,-163169806,1183518334,-230282250,-775804007,-196703752,956587681,92206150,-336312693,73310467,1377495235,922681350,1183646306,-1706027274,65535,737953419,1183447110,-28915724,1218510848,-196724476,1183518590,1208364020,-1037330172,1183447249,72524286,2130593337,-28931323,1386284011,-102186236,-2097086383,191038,1996425333,-26106,-389873664,414140,39991039,16777114,-28931840,-1962933825,47882743,5244473,922701940,12058704,-1070903292,-1706012592,65535,-1980086647,-801375146,-164953484,39991039,16777114,1958742784,-129579227,183173120,33062531,-13958027,1996427243,-25864,1183383552,1975520248,-25881,1996423168,440574,949638736,-16777210,129564278,-1705619456,1605,-1191282945,1464860680,16777114,572928,1043988267,91553820,146798123,-25755904,1342179768,107977302,1996423168,702718,-6662320,-1107296001,-13959167,956463777,1962954758,-644336,-402503114,-1073005330,146735988,-25755904,1342181304,115448406,1996423168,1030398,-929409200,721420294,673090550]},{"sector":6,"data":[1646134018,-1836583420,57966595,-16774978,297336438,-1705619456,1634,-2097151554,7230,-164953484,-1191282945,1448083474,404378,-1981234432,-16776112,-1711119818,1469,-1694611831,65535,201082505,-15958592,79232630,28856320,-15602944,-6620042,-16776961,79232630,-1070903296,110795344,922681344,1048773724,1946158150,2144261,280495083,-6664192,-16776961,721576502,-1202696000,-1706033151,65535,1344202947,1721828098,138819842,1996431221,1354771206,48379647,37107455,72496895,-1174396488,1347551472,16777114,41984256,1963476537,108461932,652742288,38845953,1851011,-1957727232,-391969210,112742402,-6664192,1375731967,-26032,922681344,922681438,-1679292950,-365494528,13559813,38024959,-16726040,-16752586,-402419658,-190775166,1241918210,-1310175228,108461824,-1106988568,1996423718,244340230,-352229912,47882594,1963476537,108461914,1347469355,37238527,72496895,-1174396488,1347551472,537754,108461824,-1588543445,103481922,-11533230,-16631754,-1207676362,-256245727,-1706012160,1913,1851011,-16223232,-873986442,-15930608,669517430,108461830,-1022974744,5184488,1547108098,108461824,16777114,-399048960,74907394,72496895,99497727,35796735,6043391,1347469355,-1174396744,1347551436,16777114,-504839424,-16711602,-16586698,-1070922634,1245118288,1077346052,2209794,1375793338,135371344]},{"sector":7,"data":[-389873664,17256164,39728895,1358055053,-16768536,922682998,922682462,1183646580,-1924131086,1343681094,16777114,-6664192,-1023409921,38702056,105286402,3979673,1451817463,105286654,-1996884071,1183711046,1996443900,833540,-26032,-389873664,33574496,705054346,-1309635612,82966026,73304880,-2012985601,-154760441,818184433,-2012979573,971555623,-1962803122,1191118430,74877702,-1979431169,168265732,-1947437632,-1018689978,642663400,108461826,1354122893,-1207935768,-1706033147,1955,-6664110,-1996488449,-1072974778,922690676,1183646336,-1706027274,1302,-1996209503,1996486214,-163148536,1996443670,-25932,1996423168,1110900488,1949761284,-1236890365,1183666198,-1706027338,2265,148871760,-389873664,33770928,-375098,-1962516853,-1140521913,-45709049,-1057093750,-1963178360,-1057095097,-1912912248,-11470266,112723062,-6664192,-1023409921,5077992,-1962153213,1191118942,71731720,1183516552,105840390,-344604661,-1022867829,38624232,-62470397,1183524624,-137221368,1183448182,138841086,1995952683,139889148,16678531,2122517621,108331012,33324675,1586172533,105316102,83773066,-955807696,66630,-1962931527,-768869306,1183445495,2009074684,105286581,1292036291,648020227,-2000617982,681638982,-2000617982,715258694,129762562,-1912781175,-11470266,28836982,-6664192,-1023409921,55366632,-96039678,108461904,16777114,-28931840]},{"sector":8,"data":[376815627,1727413424,-61961475,-1056707286,-1996202357,112647,1183515627,-1578580994,-352255924,73304837,1586169855,-2145416444,-244047809,1284171971,1183646212,1996443898,-26106,1183383552,1975520248,73304867,721176202,126437604,-1979425141,-466945210,38242632,-1962647925,-1137836730,71796999,-1007139189,55331816,105286402,-1246113237,-772671739,-1948200480,1200161886,105286404,-235417045,-1106880887,216727918,-1962510807,1207895134,23969284,1178191499,736981766,1862173183,-2096466687,91554303,-352321096,-1967117566,704647309,-1983839251,1178336838,688289542,-347666874,73305048,1586184073,105286404,-1023260791,4970472,108461826,1342180536,-1957642197,1344144454,770970,108461824,1342439864,-1202667477,-796164097,-526757806,-1023410171,4958184,2130753536,1375797178,200383056,547553280,1975520000,-339727612,374833,201431632,1347551232,788634,2269952,-445333493,1342179000,616602,-1706012160,2415,184557219,-1194429248,-389873663,19288,2113155,-16157696,-1711267786,3128,2244227,-16157696,-1711267274,3144,1982083,-16157696,-1711268298,65535,1260579011,1996423685,-129594106,-2070261738,-1962934263,-1593827274,1178141282,-1962642426,-16768458,1183646838,1448089336,629402,434684672,-16711093,-6683018,-1962934017,65558256,-1010398464,4905960,74907393,1342179512,832666,-1706012160,1962,-1207666945]},{"sector":9,"data":[-1706033147,3050,-6664110,-16776961,922682486,-627441634,-1023410164,4891624,1547108098,1647771392,140614144,1996423168,171376390,74907395,50870015,51132159,6043391,1347469355,-1174396744,1347551436,559514,1776861952,-16711606,244319350,1074121192,-1177408704,-235470841,-389823861,16861776,-1962647925,277318175,-1947981312,73305072,721700747,309714,-770969097,1065551477,1174500609,-389822837,346660,1342411448,1342188216,-397361109,649657494,-1159180286,57844735,-1091010931,118882854,-945445467,64070,1358448269,-1543534616,1923155042,1644561155,394500,129618475,-1544423680,1654719568,59901188,-939637111,128582,1586171627,-28901378,-1997126006,-163119353,956527265,-361302458,956442273,1963085830,36348182,39061049,915082613,512426578,-2004876190,-398457966,-389872299,346512,50477217,-1727772154,-150992967,-62486023,-150713695,-28931624,16402119,-94467328,1183572945,-259552770,-62485755,-113151,2122578502,-444856326,-772120949,37265891,99649417,721576097,-1727770106,72355467,1183447543,40149494,-940030327,64070,1586173419,-1948003846,-2021001146,1183516160,-129629706,-1577433345,1178141776,-1948025606,-472778146,721568417,-1996205562,-1023016825,38337512,-10229759,-1996095304,244055110,-506395568,1183432963,-14357506,-1070922634,-60912816,922695679,922681912,565707858,15776256,-426094510,-2097151986]},{"sector":10,"data":[-1962738618,1178205766,-1194036484,1183385074,787964,-335657335,74907429,-237941,1681325879,1245118210,1614216964,2209794,1375793338,145660496,1182990336,1183515388,-62506498,-389819534,20138104,84028065,1183385532,36085999,1183367422,-330920466,-1404662448,702544,166697552,1183383552,1580136354,-1580692732,-1054145992,-775804007,-1471772168,44320455,74907392,178256,-1404662448,1996443670,163224226,1187446784,-956067082,100705862,16664263,21031168,-2086248821,-1962760634,-230258425,-1952031093,-230282489,-940292471,99658310,16533191,-1436644608,44713603,1183385483,-1436644360,1177225099,-96040456,16678531,922701941,1183515388,2146633212,-1639543472,79187990,-6664192,-1996488449,787978822,-930413474,737822347,-1037329983,1174665425,-1471772168,721577121,-1996101626,1996465222,-1468596476,-1639543472,1996443670,256547482,1586167808,4161782,-1779891339,-1572419840,126484482,1059382314,-1404662448,1352418953,-1946615576,1065393246,-16354000,1191158350,-1572435044,73281271,1183565963,-1715393542,-120470997,-1980217853,1183557702,1611017204,-1037330172,1174665425,1376125938,-1538881276,-151626101,225722375,-16484609,-11470730,1189673590,-161576191,1954547702,74907407,-493825,1996465270,4909306,-16484609,1996466294,-1673098332,1996443678,267033250,1191116800,-163119108,133987971,-454491267,-28901378,956584097,58588742,-84503,922682486]},{"sector":11,"data":[904397352,47882497,5244473,1189610357,-1377254655,-1962671034,-788242890,71732198,731498027,66638274,243992646,-506395574,1183433003,243960,71970551,66602499,-96040506,-1962522997,-788246002,-1983829023,915144262,908788818,-167050510,-963967874,-1070923029,50742787,-1996201978,1996487750,-126419190,-1946257665,1177287238,-11517704,-1207676362,-256245727,-1706012160,4446,-16091393,1996486774,-96039940,1090012715,1379336016,2209796,1375793338,293640784,1996423168,-126419190,-100609,-1962653130,1177287750,-1202700034,-256245727,-1706012160,4514,-16091393,1996487286,1245118462,-62485756,1090405931,2209872,1375793338,246127184,-389873664,67126728,-1962248449,67438662,1996443648,6600710,28856350,-442871808,-16777199,1183517302,71697160,73270827,1342178093,-1207535873,1344143462,1342177720,1084058,-2048343296,-16644539,1183646838,1156075764,108461824,385107597,-26032,-389873664,410984,36189951,1358186125,-1962924312,1174664262,-1037329928,103545041,1183384670,-96039938,72484395,-244087,-1705968010,65535,1160964291,1183515139,1644561158,-28931836,506265,1451882999,-28931076,-1980106855,1586231878,-59340028,-2071206191,100861424,126420042,-1962647925,-422445962,99779723,-1962653815,1988822110,-1947807238,50724996,-1996205562,1586168391,-92894460,-2071206191,1200162306,-840383738,-1962672060,130483294,535494656]},{"sector":12,"data":[-1962385781,121178694,1182998399,1586168328,2080848136,112645,1586172395,-1962410236,1183515742,2080848134,-1010816041,38058984,23967745,-150577525,1183384679,75465724,-1962118144,-783809465,1088999912,-1946401279,529204830,-2020875311,1174470760,106859516,721700747,309714,-770969097,1065551989,-16550399,1586232390,38243078,-1946401279,-389809082,541756,-1091273075,118882854,-945445467,63046,1358186125,-1947726192,-263812609,57804291,-375159,1183707254,-639086338,584837152,213436555,-26282240,1183432963,-1960252420,126614622,1005733513,594803270,163715,-259322252,-1947175381,-2147196386,-2147249528,217859715,-1577171201,1178141290,-388989698,-389864792,345028,1851011,729576448,244338880,-940449816,7174,-633929984,112642,1354771280,1342545848,-1705983957,65535,47855359,1342177720,-150991688,50473510,1342318086,1342177720,16777114,2050424576,1354771202,16777114,-2143879424,1354771202,112720,122460752,681639936,42377986,-2031612272,48668928,5244473,-626982028,244338690,-1007588376,4406248,-331447552,108265474,49024767,1048778219,1962935024,-339727612,-267452659,-335100158,-1207956734,-389873663,17168,49036931,-16354293,-352130042,-264338667,74807042,233553963,49284863,49022663,28835840,-437730560,-2097086398,1946158206,-3676155,-1746402325,1958743039,-401698811,-389873663,17136,1342368952]},{"sector":13,"data":[1224240360,42337851,-323483021,1592283138,65751288,-1560115551,-152567058,1958742786,36093754,503508158,-1515870969,47855359,1342177720,-150991688,50473510,1342318086,1342177720,1308058,-128980992,-16601624,-1711089098,859,-1022289432,54682600,108461827,1342566584,1342179256,1358710413,201162728,-10390336,12060790,922701830,1183646800,1776832762,1958743037,505931,-1946521865,-60947496,-2130813303,234175,-323013004,36093442,-1515911394,734235557,1342464518,-1711166744,17,47842875,922683764,244318938,-2081414168,1946158206,36091911,39839824,1105651907,-323026432,36093442,-1515911394,105286565,376750091,1946157373,146716,54336628,1026388992,896794628,-1070917653,-19994544,-352321096,112706,1048834795,1962935024,-339727612,-267452622,-401698814,-521404723,49299075,-1411977,-352129018,71732204,213504555,-1544423680,1183515376,-137221372,-334067215,-1009587454,21064680,473858820,57933824,-1593771031,1178141402,-385649654,-1084882704,649986796,-1526260222,-1956731483,574425158,-385649408,58065061,1023457769,57999369,1023450601,57999373,1023451369,57999393,-385842967,1048772792,1946157806,49193223,1558925384,201182696,-1207143232,-397409556,1346959021,-1207901208,-1813446655,-298415360,1923171842,2096118531,-36444106,-411779061,-538197973,49165963,185069187,-400523786,-1072956014,-323432076,1927827458,-339344394]},{"sector":14,"data":[-298415166,130450178,990081697,1443266032,-352301336,1916152754,-40638461,-1485520885,732031830,-1310175040,-1197675523,-169148415,48641791,-1243083120,-1198724114,-397409754,-2081750795,1962943805,-10819325,1946166845,2571667,1961427829,2637311,-1070881932,1079961795,1183514881,49193732,184591592,-13208384,-1878861258,-179116018,1358841481,36189951,-347160,1183579766,36217604,1342342819,-351256,-16590282,-6619530,-402652929,-873923919,367575822,-1962868672,-291306426,6023170,192200715,-1560000885,244318854,-1006817048,20969448,73304833,-1593673845,121176614,715198069,71776514,-397015435,334233467,1443120779,-1962742593,-1526259984,1449043365,-1006653464,71287784,-633929984,1354771202,112720,336763472,-389873664,147372,1403034,-1192195328,-1873804564,-83564530,555149392,-1873348469,-306518002,-389822581,17383304,1851011,-948931328,16784390,1354771200,-1645736304,48669165,5244473,2057373300,5284610,47855359,385369741,207329872,1386283008,-28956412,47855359,1374162576,-263812620,-129594032,922701846,2040135714,-16777204,-16590282,1335554166,-16777193,-1207797194,-397410176,922743618,28836474,26890240,-16777196,31982710,99140352,-16711361,244319350,1358587368,186677224,-1959693120,648086622,1963407618,36348168,1946437433,112645,-1070923029,1183576203,650073604,519080706,-1515870969,1962281822,-191109117]},{"sector":15,"data":[36714239,721524712,244338880,-1593376792,104399590,108331088,-401698736,-1679233840,-18425,133228624,41957119,1347469355,1342177720,1556122,-2143879424,352623106,922681344,-1070923046,28856400,-442871808,-16777192,-1711089098,6382,-1022552600,322854888,198567937,-1577695607,1183384654,58106344,736904841,18213375,105113687,-396889973,-1073010110,1996425076,-1947707900,-773878797,-1948003869,-1996288377,-1924074938,-397353914,1183444878,1962871792,-226590452,91488976,99632839,74907392,38680319,-599356074,1996443670,298031856,-396951552,1183385073,1611006954,-297367292,-2114042169,-773879040,-1948003869,-1996287865,-12714938,50951423,67499590,-28931840,-1962641665,1344208454,1358954424,384321165,2144336,-26032,1043922944,1953825354,41563903,1347469355,16777114,2050424576,768002,1354771280,-107327408,-16777191,-1207797194,726664192,1347440832,1708442,-129595136,-371063,-1207797194,726664193,1347440832,1713818,2050424576,768002,112720,1354771280,440179280,922681344,28836474,-1070903292,-92864688,-1694992641,2989,1950234951,-385647102,-1125581086,568902410,-1962867907,1346372678,1342377656,-1207882008,1183384334,1141804030,-773730044,-1983839263,384563782,-106869,96701239,-397410300,-1073020780,1182993524,1183515902,-28952070,1183572594,-28955654,-120457007,201082505,1345093312,-1962923544,-523109306,235266257]},{"sector":16,"data":[-28931837,1586172651,-1959264258,273859,13232208,83783299,251559553,-1008240893,3973096,51296257,71732048,-523116335,1342377477,721581217,-523172794,-397352751,-389866821,16792700,-788248949,98619872,-1202715890,-1588591858,1177223796,-773795580,-1729605408,1508426522,-16645316,-270006666,-28915962,-739768928,-1982297335,1688336990,138885380,-397209484,-259323388,73670283,-1996341109,-1058472378,108461833,990289640,92208710,-335657333,108461830,-1996058904,-1606613434,721712389,-1960711232,1183515742,-1962440442,1178205766,-1593477882,65733732,-1946157128,1200161886,112642,1004726467,1996423682,108587014,-112953,1883145215,309657346,-1962326296,1881050096,37784322,-385988983,1183517011,1183401990,108954620,-1726974976,39325323,1445591543,-58817540,-955941632,-954,972834443,92208710,-335657333,-62485757,1074153097,-1070922635,1586176491,105286404,1183516553,105265662,1889600885,-1207702782,1586233343,38242564,-1023409736,70999016,105286402,376750091,1946157373,146726,54341748,1026651136,846462980,28863723,28856320,-1070903296,-401698736,28835935,-1202066688,-1202716671,-1873805311,24897550,922741995,-622132156,71579391,2057431531,1342585090,721974528,244338880,-1497112,-1528298378,-840413180,1354771453,904400528,74907395,-16500248,721607222,-1202696000,-1706033151,6399,-1070881557,988997827,2057372427,1342585090]},{"sector":17,"data":[721974528,244338880,-1578572824,1183384334,-336188432,238485284,-330920701,-21108656,443858955,1342177720,-1946290712,1452010566,51291118,51385993,175520070,-166996097,2122411892,1946341616,-633929934,-401698814,1183444860,922702066,922682454,-2101869484,-1588584960,103613530,2056933376,-16777191,-16590282,1201336950,-16777192,-1929192906,1343682118,1579674,72655104,-1577564535,1183384440,-633929732,1354771202,-150607711,1183666414,-1924131082,1343682118,16777114,973024000,393480318,50481825,1141259206,-1593344764,-972881334,1151402987,1475906308,971509392,2097036034,108954374,1459909632,184650216,-12880650,-1711089098,7630,-654850421,54978640,16777114,1958742784,2050917153,443809794,41563903,1347469355,1342177720,1875098,2050424576,419994114,-389873664,34355652,956463777,1962954758,1354771208,-1243083120,-336188441,1142852405,-773598972,246939619,-297366269,-48830384,594853899,1342177720,-1946359576,-788249570,-1948003869,1452011078,243763696,278366467,1983464963,197558024,-385649162,922681477,1183646426,-1706027274,7477,-1996204895,2023880774,-62486269,47855359,-1957642197,-136775738,1342564398,385238669,-163148464,1570394134,-2097151971,280126,922699125,244318938,-1980889112,1048703558,47186702,850920829,-1207702783,1183383864,-227082262,72759039,72627967,1344163870,636058,463097856,-16777187,-16590282,664466038]}]],[[{"sector":1,"data":[-1962934243,-2096872386,1946158718,38445328,1183434283,2143292392,-1950340350,244340728,-1593775128,-970259388,75351867,3991639,930412043,47855359,2037658,-35105280,497654273,-1073020928,1048781172,1946157690,2050424602,1354771202,112720,499489360,922681344,-1667628422,-1023410147,70800360,74907393,-1996469016,100923974,1183384672,72262142,-1577564535,1183384438,-633929732,-129594110,28856342,1855606784,-1929379809,1343682630,-11485141,-1711128522,65535,40253183,385369741,112720,521050704,-389873664,16791548,-150714741,50718766,-1023126522,3664872,74877697,72627755,75429387,49006219,-1952858069,-150607858,1141259257,185826564,-1962639626,721611718,244029888,-101251608,1151402987,-639057148,-1593768905,104399482,141885520,-1873756117,-439687154,-1559869813,922681930,922681978,-397409202,-1588527219,103482230,-11533234,721707062,-1868934976,-402653184,-259324689,-1962899009,-472840610,-2020875311,1183384336,-49670,-125106316,-947651069,2050424580,768002,1354771280,1218072656,-16777184,1459780150,-1351192,-1207797194,-1202716661,726663169,-1706012480,6631,41563903,1347469355,1693082,78505984,956463777,1962954758,244338694,-1008389144,3605480,-633929984,112642,1354771280,1342546104,721454568,1342338054,-1705983957,8387,920578243,922681602,28836570,1183666176,-1924131074,1343683654,16777114,-633929984]},{"sector":2,"data":[112642,1354771280,66864779,726664262,-660975424,-1023410157,3581928,74877697,1979711107,238485257,2942979,922742923,28836570,1347833856,1373594,-2115452160,-16711626,-1207772618,-1706033151,65535,1342457347,-1006648856,20342760,-28915967,1183711231,1183666180,417878270,-28931328,911141059,1183645953,1183666430,82333700,-28931328,909830339,1586168328,-12614908,28837237,721611520,-163149376,125091851,-1962516853,-1207702777,1183384992,60614908,1358186121,-1996236824,1586229830,138871796,-1912977783,-11472314,1357445750,737708800,-25785866,1586178539,-28931324,611583801,5892182,-147066741,1183650428,1996443890,2746618,-29624181,-141884803,972965631,-763364234,-2096934168,1946220158,73304842,-1979824501,-1962546425,931726942,899868867,-1598094846,106859269,1983592331,-1962183932,76153468,-972823510,-947189879,897771715,1988821249,1480493828,-1715041534,-101199989,-33293781,94371713,-1598094466,-1010332923,120938472,48556033,-1191688567,2024013823,40936194,-1946657141,1688406087,233329412,-62486269,-1946270071,1191442526,-196703992,16402119,-196703488,1946043961,-27358422,-467007606,1183433475,71732210,1963083577,734235439,2024012870,-230257918,-1543748053,1187447908,-1962933766,1178205254,-1962314498,1177286214,40936444,-1962770712,602667590,-1946263925,1194918982,-1962246654,-62510141,-352033629,-28931118,-1946794359,1183445574]},{"sector":3,"data":[-1013781506,859093992,1245088512,2050424578,899074,2734160,-1471771312,731533334,-1996488672,1187421254,1187446998,-402653030,1183384075,-773944364,-1948003869,-1996287865,-12725690,-1961200385,-729938952,-467008118,-1996487379,1183685190,1166889174,635981828,-1673098266,1973044793,-700019432,1183666198,-1706027352,65535,91602955,-352321096,-1983894782,-790060986,-1602321663,-385649664,-1209532223,-1193768191,2124611585,71796995,-2097039640,1979699838,-1520009193,-1520008963,-773944322,-1948003869,-1996288377,871081542,50428648,-1924083130,-1202674618,-397410300,-2065165781,-763953407,-1962892824,-773598754,277333987,1459617539,715409034,1356396516,-1979686424,84188230,1317790762,14778532,1183432971,-1669430364,-150047488,16819270,1190594421,1946288292,-763460806,-1961658881,-773598754,246939619,-30087165,-1996200799,1996476998,-1538880046,8775760,-472785269,1183572945,277318098,1183471107,1357130404,-1023409688,3369960,-1961497854,45155958,-964565293,1015218960,-1962576641,67175494,-1593424129,1178141300,-1008698362,87245800,13166593,1358448265,-1996422168,1174665798,-62486268,126539915,1183441962,-1983708170,1397816902,-1946657141,1174603847,-28955654,290056272,-1946657141,1193932358,10086408,855566531,-2081947130,-1946645760,126485598,1183441962,120502772,990399787,-1207601215,48955393,1183432747,1958743036,73304891,50423680,9889879,-1946663287,108397552]},{"sector":4,"data":[66340491,-96040506,1166757974,-129629432,-397359573,1996427495,1996445188,282978548,32786059,250284101,46020351,-1202667477,-397410256,552078581,-62485760,847440067,132644865,1458604800,-1023392792,3306472,-2110324992,976898,845605059,922681344,367526530,1508426496,-1962868686,-472841122,50509823,16777114,1172882176,-1962868686,-472841122,50509823,16777114,837337856,-1962868686,1200292958,96666374,-389873654,6959648,-1996453192,-1979765114,-385930106,-125042790,425347,1166870388,780568842,-432603137,68728834,112720,1354771280,630692432,1183383552,-432603140,964610,1354771280,-1231400880,-1962934235,1962281968,1345781529,899072,-1923725744,-1979763578,385821830,584030800,-963969024,-1996077781,201273990,-1961527872,520040070,747014992,-1706025217,8996,745848843,-10557353,1508398928,847643647,1979666687,264103944,-13846785,1342850445,263317590,-1207536247,2124611585,71665923,-2080440600,1946221694,-432603374,68728834,1354771280,-2103816112,-1023410139,36785128,9158144,-1946235416,108889080,-1962576896,180782071,48641791,-447420330,-1006714136,53553128,108954370,-1207601820,48955393,-125059029,158727947,1694924419,-873921676,71731968,1946222653,33570069,4025716,-385649405,3997833,-378244091,-16056146,2057390964,5284610,-1946261016,120174832,-1559739349,512426124,-472841654,-2020875311,1183384336,-49666]},{"sector":5,"data":[-397012620,-661913976,-1963041277,31730183,-402617338,1048837699,2097152140,-1945712793,-352321536,48669023,-956280669,-1056928762,-950932736,-16741370,1962871679,-70981627,1525170923,-12719106,721591350,817385664,-689418240,187558666,-1593477889,65733242,990045857,1962954758,1345781531,964608,1354771280,530206800,989855782,2113965062,124931,809167043,922681447,230162512,-927444992,-2037559296,1343684408,2566042,-2114614528,-352270098,847678227,881232383,516328447,-26032,-259325952,-986986869,-1996437499,1006580358,2113965062,884902876,948160255,922681599,-2037579696,-397344968,922739718,922682046,817365696,988303360,-169295094,-1962603985,272436294,1023898625,1014235409,1183538923,5022478,33179334,33113798,-1124383033,-129594105,-330920624,112720,177707600,1996423168,440334,-330920624,-6664170,-1207959297,652935169,1024083595,125042689,1946157629,-1250550,317197942,-1774848,-1070920074,-26032,-672464896,-389824469,17772376,-1207666945,-1924136954,1343678534,1342180280,2638490,74907392,1342179256,385107597,768080,-26032,-1073020928,1183648629,1183666420,-504868632,-398029344,-498692784,-494540720,1450557451,1358186125,1342368952,199390952,-1203276352,-1873804564,-362747890,-1929183069,-1957567922,-401698576,-2036077998,2009479939,-155693015,-1511501822,3604235,59422723,194701392,74760203,59377407,-1207666945]},{"sector":6,"data":[-1706033151,10254,922685163,-1070923122,4241488,152299600,782690499,-2031615998,1354771200,-974647664,1458973660,-1946404888,59154936,1912751417,50372877,1996637497,38127365,-396951553,-2092499920,-612629506,49690367,721652385,1342371334,-1207157016,1347421050,1342177720,-1873756117,490072078,1851011,-1207340032,-397409754,502001468,5256959,1709706896,-1084795172,649986796,-1526260222,1583326629,1525157520,2114373611,-402652925,-389873631,77336,39466751,2721690,-1578071296,117375118,-1073020786,914949237,-389872580,11768,9309951,922683765,-1097202628,-1023410174,154002408,-1084795390,649986796,-1526260222,1583326629,1023690379,58064917,50498281,-13724736,724306343,-706195264,1975520008,41281795,1342177720,-384347160,-1070923157,146729040,58048523,-402497815,1491670986,977175298,510918658,1558938,-297367296,1342422200,1342177720,-15616280,-1365578122,-385875963,28836403,770199552,36301058,1342177976,184689640,-385649216,1642594843,34990367,1342178232,184684520,-385649216,-1729625593,33679870,2745754,-297367296,47842875,-253164683,12079105,-1070903292,-1706012592,10915,-1980479863,-801376682,-722926731,1095681,712219216,-1073020928,783814013,-6664192,184549631,-11961152,-16621002,-1711119818,10928,440400,8435792,717068880,1996423168,50378990,1354771280,1301958736,-16777177,-16621002,-1711119818]},{"sector":7,"data":[1776,440400,1354771280,16777114,24242432,-1192331521,726663939,1347440832,2773146,22931712,2811034,12079104,-1696077053,10991,50444368,899341547,1342177322,-352124232,-391124783,-2097072407,7230,1354237300,-1200428286,-397409712,552201318,473858817,494141440,1342318264,-1209528688,200838119,-385649153,1464795399,1342368952,-337646104,1354771265,-370586648,1048772851,1946157084,36091927,-401698736,-125048950,-1422524543,-655817867,-806664448,-352321096,309462,13297744,58048523,-2097102103,7230,-323483020,-370651134,11659756,-352129864,405072005,-1207916823,-397410299,-1073020768,-1729559691,-26112,113704960,66430,-402617623,-2065102849,440320,8317008,2037694475,72892035,-402295808,1844124723,-350457368,505960,6482000,1567932427,58590919,922681345,244318848,-1948215320,244340464,-2308888,1443004470,2011034,473858816,896794624,1342318264,-336863000,-903236820,36298025,539626538,-483731414,2813482,-13960916,1110119722,-1993644757,-1423208661,-852774613,875312427,971555626,-16711381,721706038,1996443840,1647771396,73304834,-472783919,2275327,2144255,16777114,-940537088,19462,837337856,-1962589397,272436294,1023898625,544473361,1183528683,5022478,243792,374864,73971792,-26032,28835840,15853824,1024083595,359923713,1962934845,13297923,1962935101,13232387]},{"sector":8,"data":[-722878421,242679552,1342177720,16777114,1570394112,184549378,-3705664,62393974,-2037559296,1343684474,1342210232,2633114,2055638272,-1706027265,65535,-8747379,86501456,-8747379,-26032,-1073020928,922686325,-2037579064,-1202651270,-397410256,2112423113,2055638527,726669055,-6664000,-1962934017,91504888,-352321096,-1950340350,1962281968,-6662370,-16776961,-1929206730,1358920326,1342252216,1023709416,57999367,-1912651799,1358920326,240248918,58048523,-53271,28839542,-1264955392,-385875928,1996488480,-339727602,242679792,1342177720,-402098433,166266062,233358335,-1962604502,272436294,1023898625,477364497,1183543787,5022478,505936,9484368,-409317346,-1207959513,1508573185,1024083595,125042689,1946157629,-1250499,129502838,1183666176,-1202710798,-1706033141,11485,1358055053,1342368952,-1982005528,-1072959418,1996425333,112654,28840427,1996443648,84470000,1996468715,1354771214,2976666,732228352,-2048343104,-1962606039,272436294,1023964161,913572113,-1962881047,1285754438,163074048,-2069803008,34775810,-26032,1996423168,571406,49848656,1342312611,-1705983957,65535,-385875528,1183514782,81162,37555316,1028486144,1433665545,1996482283,571406,-62485168,-1070903274,-26032,279117824,-58817790,1023767552,276168714,44971775,-1202667477,-397410240,-1259666627,-1560145247,278987396,49849090,-1207011585]},{"sector":9,"data":[99287041,722368255,161108160,-352321490,242679699,1342179768,1343125247,16777114,1975520000,112645,-1070923029,775592528,1048772608,1962934802,112645,-1070923029,-385740125,-1070858402,681502915,1183515914,17841420,289212532,-379751423,1183514911,5022478,38411915,-472783919,51298187,-1952856181,-150841330,1959922681,1183667993,-1343729428,242679769,1342178232,384583309,766483024,1996423168,702478,50378832,50391120,-1207011585,-1202716661,-397409536,28836594,13101312,1024083595,913571841,1946157629,212266,171773044,1025995776,779354123,1996479723,702478,142016336,-16596504,196611702,1996443648,-4134136,-1070920074,113737451,66648,45364875,113707755,1112,45233803,-1207011585,-1924136957,1343679558,1342180536,3004570,-330920704,36485200,-624891824,200820361,722238912,1996443840,52226296,-1577094167,-1952906708,-150841330,1976699897,-1338573050,-15799550,-402510794,104067590,242549848,1354771286,1342193848,-385761048,1996488516,112654,784046672,904462336,-1010816001,153577448,205949701,1946226749,17906951,1391155572,-1559345525,-1202716596,-1202716657,-1588592624,251987014,34906880,-26032,922681344,1183646256,2011713774,242679768,1342181816,384714381,792894032,1996423168,41066766,-1560278011,-1706032618,11453,-401698736,-1070869240,-1962866199,19728966,998656,-118946954,-1816132864,-2119696594]},{"sector":10,"data":[242679601,1342181816,384714381,833616,802003536,1183645696,817385710,-873967614,-96040487,209567755,-11485141,669579894,12445954,755111073,1183383567,71737852,1962690105,-62485732,-16496989,184835126,-1207601984,65732640,1342181560,474010,35037440,-1560277971,-1073020302,20778100,1024816128,410255362,113706731,983640,-1207011585,367722497,39323335,-253034466,39323335,-387252164,722368255,647647424,-352321488,242679628,1342180536,1342181048,-1559607669,-1706032618,12382,1996436459,1030158,1095760,172395344,-352185181,1211150821,-1590582991,-1590582991,-1590582991,-1590582991,1429315889,1429296433,1848733233,112689,636676291,1183515904,17841420,289212276,-351439871,239504159,-1207939933,384499713,17464963,1996426869,112654,827300432,-404029440,-389824469,58860948,-16742771,142016336,-1948824600,108954608,1443329024,-402229505,1049351996,-16056244,1049298037,-1923677598,385810566,42639696,1996443678,-26108,-389873664,16852308,-956008821,65094,1015028971,-2146667218,1965949308,24936478,-1961331364,-1706025274,10086,1015083147,1457485056,1342214584,-1009327128,2431976,75399427,762643200,-16222465,1956251254,1342177330,-1207404801,-1706033149,12428,964688,1354771280,-778416048,1342177322,16777114,-504839424,-402587612,1048772689,1946157950,-1506345146,62699522,75400016,-1207602176,48959488]},{"sector":11,"data":[588038187,-14423984,1946157629,408866,1048781173,1946157626,62699533,112720,148498512,28840171,1508397056,721939449,-1207702592,-389873663,74888,2808218,1005619968,1963124278,-229382139,909707755,57999994,-1007702552,1143236584,71731970,1962933565,-115444,-12775308,-350128897,47358333,-8878455,2122544363,91488262,-352311621,2603779,-2020875311,-454360440,-8747379,108954448,-1593478144,65733260,1342345377,-1982472216,-2080409466,1946158718,36085804,1183367422,36217084,1183367422,36348411,-1995981819,1183710534,-1224781574,28901240,-694530048,-352321497,1580662539,2025258754,-716379905,-8747379,-1224767765,-1070858376,3192912,-30414768,599976131,649592839,244338690,-1948311064,1183667952,2045268214,833536,-1946784009,41150712,2105800707,91553794,-352321096,-1983894782,1843921477,673090306,1646134018,-1833467900,1048805379,1962934300,674692893,-129594110,-566630320,47855359,385369741,112720,525048400,113704960,66430,592636099,922681344,-1070922260,178256,-26032,-324861952,-1547687163,1789068004,837337858,-402520541,1183384061,73305076,931788331,40517259,-1983894705,1183448134,-2091717640,1962997886,-62470320,-963969024,731498243,-1946627646,126420062,-1962931016,804717662,1577310347,-1995994124,1178334790,-955812602,129094,1183521771,105265654,1187450230,-1962933764,931857502,-1962480826,1066075230]},{"sector":12,"data":[2130131791,26929322,16547459,1586169204,-1962410236,-389810106,33759912,-1593543029,-268238230,33619585,922686078,-1070923076,3192912,-51124144,1626062891,48510521,-24435075,-16201853,-1207571402,-269025268,178256,875469392,-1073020928,922682997,-890568036,48512649,-1962858264,833736,50753271,-28931647,833616,50622199,-1588527546,1177223786,833798,-397350409,233308267,1781958913,112642,572713155,213385730,107935488,-420941685,-1192230144,1861681164,1355154180,40542550,721831467,213451846,1357510400,-1962921240,103351366,-840433046,1782483712,147292930,990045345,-15106568,-1996100554,-1962744770,833991,-1202656777,-1706033150,13574,566421699,1988821761,108397316,956712587,477235270,-16497013,-1073019826,1586182004,105316102,-16220533,92932166,-454359160,17057419,1988692038,-15668474,1586169422,139394822,-1979154805,-1962440699,1325335622,1975520004,-1010398234,35744744,833537,-1962643721,3139824,2089021443,292880386,-16352125,2088962933,91619080,-352321096,-1950340350,2025720,175439627,-1207666945,-397410303,-389808373,8492,99366655,2434458,501793536,-16777183,-1710887882,9529,554625219,652738560,1275512576,-1207959550,726663169,820531392,5415680,242597899,43136767,-1202667477,-397410256,-389809331,8416,5389955,-955419648,20998,112640,160950352,549906627,1183449665]},{"sector":13,"data":[1357130244,503355064,1354771280,-8485235,-6664170,184549631,-1926335296,385842822,105286480,-523040847,503605253,178256,-26032,1183383552,225722622,-1694599425,11575,-352321096,-1010816254,18904040,106859266,294787,1586170997,-33044732,112895,1586191851,105351942,1963476739,73304841,-63545,1048831979,1962934354,-1808335088,1354771202,1342189752,-335897368,38576585,-1988047744,28900934,-11513856,535299702,1958742784,73304842,-1979824501,-5313785,721589814,280514752,1793609728,-1010816006,85982184,-129579261,2122515558,91554054,1291339463,142508802,-15633408,45614710,-605531992,1975520008,8710403,-788111733,-2138600477,-96040701,-1962647925,1191380551,4785416,-388823375,-940161399,-1962934265,-522979770,-113015,1586231926,-754480136,1347590624,-1705983957,65535,1979710083,-49915,1996428660,74907642,-385976577,-1073018855,28837236,721611520,-62486080,-16222465,-253229450,1958742792,-58817773,-1962052608,1183578206,-1207500298,48955393,-389824469,50667336,16271047,71731968,-1988107136,1190655558,1954545668,-129579259,2122514433,292814856,-1191676161,-397367294,-1073018850,-1830222987,-128021760,-2020875311,1183384448,1183535354,-754535946,1372138464,1354771280,3660954,-359680,-12778123,-15305473,1183578742,-1202708986,-1706033142,65535,1946159677,142016267,-386369793,1206585431,-1962516853,1191380551]},{"sector":14,"data":[-62486264,-1946519809,98208963,1347551242,-1694730497,14484,1979467323,112645,-1070923029,-113015,1996425334,136177912,192200715,16678531,28837236,721611520,2112406464,-1711207650,13037,736904841,244338880,-3368984,1183646838,770199802,1975520251,-92864683,1342177720,201042152,-15895104,244378742,734819304,27060672,-1946349336,833736,66744055,-163149375,1183570059,-1962440444,1204287070,-1962934270,1204287070,-1962934268,1204287070,-1946157306,1204287070,-385876216,-689373976,-1194816516,1861681164,64523258,-161576487,-1996077173,1200352838,-364476152,-2080585752,1962928766,-364475636,-1207795037,803799041,234481665,-939768183,259142,-766209,1709765750,-1948742677,1183384135,-193527810,-1947505688,1178205254,-1579059980,1178141276,-2082900738,1962933886,-193528014,-1981072408,-1924075450,-397346746,-1072956138,1996427125,-348460812,-386238721,719977486,-262239233,280519,-193528064,-1367064,166263926,-263812629,-1147261,-1847000204,-1948742912,-1983894544,1200162884,-262239482,-1996208501,1586168391,71813104,1996423168,-353441540,-1946417944,833752,-1946521865,-62485520,-402112375,2122578944,1282736126,-386631937,-661919048,-16627769,-193527809,-1392664,1183710838,-907521798,-70522631,213436555,-93391104,-654059381,-940155255,-63417,-17269117,1586170228,-129594378,-402241655,1996487604,-77534982,-369342837,28901098,1996443648]},{"sector":15,"data":[-294191120,201158888,-385649472,1586233191,38258672,1996488703,-14554628,480438467,2122515459,125108234,37371523,-2096270336,1963002494,1379828493,108331008,-385875528,1996423354,-1476216822,91809872,309706763,-401967361,45614011,-1259843584,-373282045,45613210,45633536,1474842752,1975520005,112645,-1070923029,-166989685,1996426612,59631626,1342177976,-1962703128,1525352062,-32866941,1166758261,-96040698,1946156605,-96012474,108298240,17464963,1190595956,1971323130,176063282,1445754112,-16222465,-1293354378,1958743036,-96040057,-1593162359,1166607462,45635078,1996443648,-68884472,58048523,-2080413207,2117668039,-6195452,484969078,178179,51767376,465758403,-1561853431,105286637,45633566,530206720,-1996488659,-1072957882,1183518845,726670854,-6664000,-1996488449,2122577478,578683126,-1695123713,14064,-1191772952,-11534334,266864246,1350568962,200978152,-384207424,922681746,1996423896,3192838,-171186096,736978152,25618880,-150991688,84044334,865665087,-1178457150,-120389626,-1037319629,73835328,-1946546968,-1194816528,787939340,-939326870,-335786359,172279560,-964427778,-59361012,-102173833,30206201,-386251127,1183447521,-1194816528,787939340,-939326870,-2080616823,1962998398,-260666594,2013034041,16836867,-1995815797,-29495738,-1996262145,-964491708,-387585268,1183386367,1978159358,-1191670808,1464860673,-1018113,485031030]},{"sector":16,"data":[1958743038,1354771222,-260636841,-386107649,-1072955893,28837236,721611520,-96040512,-16628281,-25755649,-2081927192,1946221182,-260636776,184682216,-393317184,28899684,-1427615744,105286400,1756909598,-1202708988,-1706022910,14050,1090012809,1996427124,1004837624,1891106816,233328644,178202,-1476216752,55371856,-1191557495,-397410302,2122514831,242483450,1342533816,-402229505,-1073014269,1187452021,-16420858,-1207787978,-1202715280,-397410256,1183577217,-1202708986,1344144488,1346371768,3998874,-118364160,58590919,1996423168,53209094,-1192494872,451608577,-1191654424,-397410302,-1070923087,780368,44054271,-380583893,-389808533,17045968,-396954069,-125048980,-16614013,1979656820,-62485246,-159193008,-1946647320,833736,-1946390793,-1982266408,-2115499913,75400184,-955943936,1093,-414521258,67011398,-124075908,-1996488648,649656390,244338690,1356129768,-329752,244381814,-1010328600,18443240,71731969,-1912715639,-397345210,1586220216,25133310,-1979353798,65771527,-1021755672,85542888,-28915968,1187446784,-352321028,-58817669,-8489984,-773259658,-2081387546,1962869372,41221982,1358579341,-1191843864,1861681164,-386364422,-133957663,-16235065,105155583,1963475971,38061846,-4653057,105220607,-16104055,2145974902,-2094928905,1946158204,105220891,-1593162359,1166607462,112646,178256,-806857136,-62486024,-546840,2045312630]},{"sector":17,"data":[-28901402,67010179,2095645565,-62485505,414116035,1586168065,-1948004092,-1962704713,91570374,-352321096,73304851,-2016943151,-64640,1024629334,-387252224,411232451,45613347,45633536,2011713704,1958742785,59023673,1358579337,-1728036680,-1070903214,947493456,-92078080,1023768063,443875327,-362753,213386358,1781462784,-555200510,1958742784,112645,-1070923029,-15992693,-1276574859,-1169781504,4241488,1354771280,-1194679832,-1924136876,-1202668986,-397410296,-259262901,1342335672,178262,-163714992,-122097525,-1202302974,-397410302,-259262929,1342342328,178262,-165550000,1924722827,-1202302974,-397410302,-259262957,1342331064,178262,-167385008,1186525323,-1202302972,-397410302,-259262985,1342320824,178262,-169220016,1996484747,1354771450,312102992,-2097151937,91619322,1962934077,-92864745,1354385037,1342193848,184558824,-1207601984,48955393,-125059029,1342177976,201245416,185169088,-1207601921,48955393,-389824469,50337632,-1962379521,1344144966,-1710983425,65535,1963214395,112645,922685675,-1070923102,271628368,-241178544,-389824469,16848688,-1207666945,-397367294,-259325914,-402360577,-166986133,1183520628,-754470652,74450400,381872208,91537419,-352321096,-1010816254,1506280,108432130,-2071206191,1344144066,-1324988789,98620167,1344144488,-1710983425,15721,58754185,-1207602112,48955393,-389824469,17569480,1342422200]}],[{"sector":1,"data":[-402360577,-2002663296,71710978,28837236,721611520,37397440,175423499,503596683,753441360,1183645696,922702056,1441268408,1996443848,-26108,-397410304,922732616,1183646306,-1706027288,65535,376629443,2122514944,175374342,-402360577,-1072955981,28837236,721611520,1441317824,-402587370,-1070864331,-401698736,113755252,894,-1543503944,2057503340,1458973443,-1948002328,38258648,-396951553,-2092506144,-344194050,-940389656,194566,-2079930624,-956301054,33714694,1476839168,-16761854,721706038,228217024,-1593835471,1185087810,805750532,-16654334,-402487242,-722927843,75400180,-955419648,201467398,38844416,-699930544,-1008216856,1075170280,1547108096,1647771396,768002,243792,309328,374864,10139728,8435792,-2142859952,73971792,58767440,-26032,-1073020928,31982452,-1914125568,-402643691,-1070864531,-13965232,58736267,1967179659,-1472790767,1354771202,1342189752,-370158360,727122269,1347440832,4181914,-359680,-12778123,1461286143,381306509,4241488,952408656,1077739520,-1207601920,48955393,1183432747,1975520252,15788291,-2071267797,1110966356,-16288582,-385701322,-2092564254,-360969986,1354909325,1358841485,1342177976,737362664,1996443840,-229381890,58048523,-1929328663,-1202666426,-1202715912,-397410302,1183707939,-2068295482,45633538,350769152,-934900237,41072720,178256,-217716656,1355433613,1342331064]},{"sector":2,"data":[1342177976,-1913456920,-1202664378,-1202715578,-397410302,1183707879,817385678,45633538,-655863808,1547108338,1178501892,91488260,-352313160,1095683,1098095184,213385216,-26282240,1471563401,519260392,-1233715376,4336282,-1236911360,28837237,721611520,-62486080,737360872,-1528278848,-58817541,-16026624,-402498506,-1072958008,-1070916491,-35198896,44840703,-1202667477,-397406160,-1070862695,-75896752,1555570155,-1202696190,726663169,244338880,-1711080728,11166,1342468280,-939704088,201467398,38844416,-730601392,-1008336664,34863080,-28915967,1586167808,-773598972,277318627,-62486269,1962934077,-514463721,1988876427,-1325364228,636015368,1183383553,-513939202,-1006745973,320061416,1245612800,-775451902,-1981754912,-661923258,51414923,1039156873,1316356095,618677899,-1996157952,1317068870,1187447265,-2147483138,-1946295962,-1996288377,1183444550,-465123614,401100800,1681326046,-532247292,-529668016,58048523,-1962838807,-773598753,73703907,51414921,374871,-857184533,66096096,83357814,91554048,-352321096,633350914,1183383553,-754404902,-2146661408,-1056178459,1183515785,-28931622,276152331,33555703,1015024245,-1207601915,48955393,1183432747,-526259980,16023171,1996429940,-541529872,-472785013,-2016943151,-64752,-280489,-545462192,-622335913,66602633,-1996101626,178388038,-163149565,50857475,-375159,-1929192906,1343682118,1342177720]},{"sector":3,"data":[3412634,-633929984,518625794,1005060096,-1982297120,28896350,58630912,-1962653815,1200352350,-364476158,-2085144,1183705718,1508397298,-25263121,-1207602176,65732609,-1979711560,1256774214,-1194816527,1861681164,64523250,-632910887,-402372863,1183576388,-431584790,-472785013,-2020875311,1183384334,-25263128,-1925811200,-1202657722,-1706032262,17728,-1924631232,-1202657722,-1706032548,17766,2130706237,-431584458,-1545054581,378078074,1553597308,-352321469,-431583966,58374224,-26032,-1073020928,1555566965,-1202696190,726663169,244338880,-1023355160,1185768,-1572961536,1567948800,10618567,1223360513,-1873756117,37742606,5127811,-13470720,721604150,817385664,719867904,1309067244,-1207959552,1347420764,1342177720,-1873756117,9299982,40634055,1469775871,-352321467,636935,-430249904,40648323,-944671233,41478,-1377254656,-1962605807,272436294,1024029697,1148453137,1424736299,-1559345525,1554055244,1578535682,-96040702,-1912842615,-1588528570,1346372344,16777114,40679424,-96039600,112720,242679632,552078992,1812383488,-1191182590,350945281,17464963,1996469877,112654,835885648,-404029440,289597635,-85457878,207522786,1468729227,-1270445822,-1950984567,126552670,-1996335221,1451868230,2047264706,-385876221,1183383831,-1267269692,1354516109,-370298904,-1360527112,-1194816529,1861681164,-1983839300,-661931450,1183385483,71797680,-1950464375]},{"sector":4,"data":[1183385159,142052268,-2081450008,1962983038,12839171,-12728693,-2095876609,1962936446,12708099,1455715979,-391350529,-397016871,-397353420,-1880498600,390912,-385649407,1325334656,38112190,-1917696375,-1924091834,-1705987002,18196,-1922599872,-1924091834,-1705983930,17712,-1961659328,1451995206,58368946,58463881,-570496938,2122541035,1047789574,-1929218561,-397359546,1183433126,64523192,1204172509,1183523014,767886264,-1924136903,-397409211,1996472796,309254,67221584,1354771280,382092941,-26032,92930048,-956046294,2122578059,57934014,1459578601,-2251800,1788984390,-1136248574,-35060867,-505419522,265742531,62783490,-396997120,-661922448,1443004299,-2082636824,-311033857,-389822837,33623992,-402229505,-259269292,1342177720,74907478,-940549912,-64956,-402229505,-389817008,16781244,956319905,276039238,39991039,-1559869813,-1706033080,65535,259451075,-1070923773,-401698736,1183563160,201336058,-96040699,-17078656,50024064,-1996346207,1187445830,922681598,1183646820,1156075770,1958743004,112650,-665196464,-1023373336,84882408,1354771200,1441271440,-592385859,-396887925,-661922580,41426435,145819531,-259266349,124545,-1996339829,-1662454202,2016870364,-608638974,1198847499,-1913227521,-397345722,-1092031556,-1194816531,1861681164,64523260,72351705,-1578255384,1183384108,-163148296,58374224,1191483984,-1073020928,1555566965]},{"sector":5,"data":[-1202696190,726663169,244338880,-1191340312,-397344769,32036811,-1511472384,-402652914,-661922774,-1560280648,1200161662,-601233404,36452095,735143912,1174531062,-472785269,748807121,243742978,-1578075133,1352860282,244340224,-1193887768,-397344769,922736570,-1070923046,28856400,-1315287040,-1023410108,118388712,205949701,1946226749,17906951,1206592884,-1559345525,1183645772,753422578,242679745,1342179000,384976525,813341264,28835840,-1960383744,20777542,1023898624,175374338,1996483819,-559159282,1996481771,1354771214,4607642,735570688,-236403776,-402647283,-1073020026,-4715907,1793609983,15264005,48248575,383534733,-26032,1183514624,-465173540,-16589661,-1207771082,-1706033142,65535,-603026535,-1543899390,-722992514,-62486019,41289415,-157220864,-632911614,37633667,-385649664,-1969160044,-632932093,-1981217924,-329783296,213436555,-630262016,1183432963,-1948742696,-733574905,-1996077173,1200345670,-28931832,-2081668120,1979711102,-763460845,-1960545025,1183448134,1996443902,-40900398,-100609,-1070869386,4843600,1148502027,59653763,-16419584,-1863591354,41303683,-1592495104,100860534,104530830,125698686,184711912,-14846784,1996488310,112852,1173584,-814366709,1625819883,1958742786,56289283,217245891,1183515462,71213828,-9140595,-956156765,232966,142016256,-1982170136,1187508806,-956300804,126534,-627906480,1586229387]},{"sector":6,"data":[138871794,972310153,58193014,-150944279,1962999812,71073800,-1394015371,108461824,184631784,-385649216,922681475,2008547892,548950016,199774208,325567,-1962445823,-972934114,1962879495,37003522,-397393856,1183432162,-58817552,-2094893824,1946218110,41713927,360514256,84030625,-1957691385,86896710,548950016,-941076480,-263812162,36963843,1183400000,-2585610,130479686,-161576160,-2147481658,175506492,-1913227521,-397409212,803782112,1975520001,142016267,735692776,11266496,16533191,41713920,92013264,15615687,704940544,-1949957148,-13374992,-2081268085,1946158719,-1908505731,225705987,1342177720,184600296,-351504960,108462012,184577512,-1951238976,-947654018,-1923945718,-1979747194,1187511878,-1979710982,1586185989,-28901378,194512776,1025537216,57933837,-2142822421,-93057731,-947190805,171802695,1586231412,-12073218,1325525760,16402119,-92372224,-389778176,-1073020790,1491665781,4030719,1996466549,-652548088,-1023409736,51076072,-1908505855,1031077891,41303683,-1206946816,-397410302,-1073020877,-1070922635,1996434155,-96039676,-1092294576,1358579341,36976383,-390236952,-1073020870,28893300,149442560,1958742784,112853,185526467,512426240,130417204,-401872128,-1073020906,-1070922635,1183518187,72285956,-344604661,-1023409736,714728,1044284160,963903492,956464801,2080536070,3532811,74825739,753647659,48248575,-1588543445]},{"sector":7,"data":[787939958,-1588591908,1344143924,-1650831330,1342177310,2007962,1980169984,-1912144126,112643,177924291,922681345,28836576,-1070903296,1347440720,-26032,1183383552,2109737982,14608397,-385976577,-1070923267,113707499,630,-1023409736,604660712,116955648,-526188544,2109737730,-18426,-402607383,113761329,574,48248575,1342179768,-1202667477,-4521985,-11513089,-1710990282,19897,-1070903214,-2103816112,-16777139,-1929223626,1343666246,1342183608,16777114,-533266688,702466,-1203335856,-1080405994,1342177356,381175437,1354771280,1290443344,1183383552,2109737942,-533266671,118725122,-555220992,-700019749,922695659,179831900,1347590400,39991039,-1157627976,1347616767,73152255,16777114,-1706012160,65535,-16589149,721576502,-1986375488,721420338,-1712798784,-2097151991,147006,922687349,196608736,-1070903296,1347440720,1297062480,-521666560,-533266688,1301453314,1927806976,-1847016485,-352187895,-330920636,-1070903274,-1202696112,-1706033151,65535,880066571,48119427,-15567872,-1929191882,1343679558,16777114,1975520000,-330920684,-6664170,-1929379585,1343679558,16777114,1044284160,-1250689022,37633667,-1207601920,48955393,-389824469,83888432,1024214667,544473360,1946227005,18234631,1458259316,37619399,1357381633,-569981184,-1207959550,1156251649,722368255,-6664000,-1560280833,1996423704,374798,62699600,1088854608]},{"sector":8,"data":[1344143360,4804250,242679552,-571994480,-3347530,-1207822282,-1202655136,-1706033151,1826,-1070876181,144107715,922681344,28836450,-811970560,-16777139,-1711088074,381,48105159,-389873664,16844916,-66814333,1187448693,-352312834,75399954,-955812357,2293318,1187448299,-1962928130,-472777122,42514431,1342422200,5156506,817385472,-1561833472,1575535586,-1962592504,1554189894,1174849284,1342177284,1342181560,4385434,1095680,-26032,1085800448,12079104,-666466040,-26032,1183383552,-934901286,91602955,-823541717,-644346,-1957294474,1344194630,-1697089793,4019,-767129280,2080375357,-773944353,-934900765,42502025,30557835,1177143366,-662797352,1187347968,2083126915,-629735482,721944760,-1202661306,-1706033088,13736,184974824,-391809856,-1072972814,-1070921355,119728208,721840361,12079296,1347590527,5243546,40411904,-495665141,-1202667477,1385791233,1343724112,-2002583552,1958742787,1354771405,-1719729480,-6664110,-1560280833,-1073020326,2122561652,2121596940,1353598605,1342184120,-397361109,1996470718,112654,-1706012007,65535,196757129,-946899776,114758,12732103,10795008,-1933293943,1183565406,-1203336946,195970759,-1337538816,1187512319,-1912602702,1343663686,16777114,1975520000,-11081469,1183432747,-1069119038,-1996443720,1586283590,-1371107898,2040156182,184549456,-385649216,-164888780,-523123061,604365009]},{"sector":9,"data":[-1673099008,2013255819,-13107454,1150946934,-1962934195,126458974,184702857,-385649214,-2092499192,-797177346,-1207011585,1385758721,-26032,1285750784,1975520004,-18159357,-401705217,-1073019516,28837493,-19076864,-1705983957,3207,1352550025,383534733,1235130960,1996423168,-25954,1554186240,1958742784,1354771413,-1700890881,11253,-1545845109,1183515744,73311206,-1545582965,1183515378,57975780,611696651,-1727766367,-1037319629,-754973767,734147576,-1673098814,2097152317,112645,1183515627,57975708,50558113,-1559994362,95946216,-1952821248,-1560281007,112723018,-1751494656,-1560281007,45614162,-1550168064,-1560281007,364380718,-1348841472,-1560281007,62391790,-6664192,-1560280833,922681890,246939746,1183666176,-1706027360,65535,-1549646197,1183515400,51159972,-788245855,-1673098784,50558113,-1996101626,1183554118,570819484,-1740207870,966411915,58497094,-1550301557,-392101312,65065221,50614790,-1560054778,1386283620,-234476796,-1773762302,41926667,-930365397,-150993224,-1962651090,63015888,1611006914,440580,100919799,1621296210,1611071234,40149250,39847427,-1207811421,787939331,1183385064,37790154,37881347,50520739,1174653510,1946551196,1376125699,71869188,84171425,787939372,100861022,100861002,100860680,1183384110,35955092,73008643,-150993915,-1962648018,243912,71970551,-291387389,65065221,-1840346680,999573131]},{"sector":10,"data":[-1962639672,-1962677311,1084462150,1242467076,736219396,37135297,36570667,71960067,-1593689949,755303514,1580136192,1241907972,-800683772,1074027169,1580136256,99263236,99485187,50480291,-1559999994,100860816,-190642706,1577452290,71475972,-1559994719,100860682,100860680,1319306334,440322,73281271,38667779,-1207675229,787939331,100861022,1319306326,-1194816764,787939368,-939326370,71962115,58068617,37895819,-788245855,737684448,-1962707906,244029895,-101251608,1208120483,-1962654557,-101213753,731497099,1090048450,-1962650461,41198024,99102455,243910659,-1179122824,726670848,-1169141568,1347551436,-1588572080,-523172782,71828995,1354771280,242679632,-342208432,-1560281005,-1073020318,45614709,-65214208,503366840,1354771280,1082178128,921194578,-2132258639,922702001,922682432,922682440,-1070923166,242679632,630870096,-1560281004,-1073020314,922684533,-258342302,-385875890,-826737802,726670848,-1169141568,1347567616,922701904,922681910,922681920,-11533722,1347423862,5528730,41984768,-965427189,503371960,1354771280,1075886672,-11513774,-1593688010,103482432,-11533238,-16629194,721577526,1996443840,-1706012658,65535,184736419,-1198558016,1344143586,1347469355,-1174403912,1347571712,721565345,731500614,-1543974462,-1588592068,1177224264,1376685002,736219396,38183873,-797507760,-3508481,-1207802314,-11534235,-1070920074,-543535024]},{"sector":11,"data":[-1560281004,-1073020186,971572085,15186175,-1070903266,12210256,1347441216,-11513776,-1207772618,-11534236,-1070920074,-1348841392,-1560281005,-1073020294,166265717,-1946801153,-941370914,-16547705,-24951041,-1192199165,726663170,1788498112,-1560281009,1354237420,1589137410,-6664190,-1207959297,-1873804720,-1111955442,-16622429,721576502,-390573888,-1070903293,-6664112,184549631,-15632960,721604662,280514752,-1897377776,-22615588,39991039,-1705983957,20123,1356220041,1347469355,1357904,151042128,1434884688,1996423168,1354771414,503495329,1357904,16824400,-26032,2122514432,91554310,-352321096,-1547687166,1239941866,140428465,4161574,28838261,1843941376,-15078421,1996425846,73971720,-1070903266,1083480656,-2136801280,-333780989,48905859,-1593019392,1352860282,-368654592,-16777214,-16621002,-107346314,-16777131,-1711119818,22018,40253183,1342177720,5640090,1714880256,1444452866,922681344,28836480,630870016,-16777130,-1711112138,22062,47855359,1342177720,5651354,-633929984,1153079810,922681344,28836582,1603948544,-16777192,-1711086026,21996,-1023409736,16851944,-1191826688,-1202716606,-1706031104,21767,-472785269,50497417,74825739,166445099,67011398,28892540,-169295104,-16711680,28836982,1347590400,5675674,6464256,-1202667477,1385791482,-26032,1587740672,1354771200,-1719665736,-1986375598,-1560281002]},{"sector":12,"data":[1048772704,1946157154,1581155088,158597120,91537419,-352321096,-1010816254,41960,1648263936,158597120,6436607,5696922,1581155072,158597120,6174463,5701018,1614709504,158597120,6305535,796826,1843970816,-1962868736,-1073019834,20780660,1024357376,259325954,6043391,5111450,-5707776,733278440,-1957313600,-1957210388,1102316630,28844493,855798528,-1956749376,46292453,-326413056,1451972438,-1962467834,1454638206,28844493,855798528,-1956749376,79846885,-1269344768,69324057,1593881665,1432077150,-1959859061,860046103,-775779648,1457531872,-1967115433,1356911046,1599722495,1575324510,-2030757,-661865501,-1959896176,1162035991,518818645,-1070344050,-523124086,1465311275,-963985357,-11476783,1583307219,-1962742397,1297948645,-519895205,-1144302842,-346881726,745126852,-1145115821,-346863325,665172920,-1145902253,-346870387,773176236,-1146688685,-346870020,808696736,-1147475117,-346869336,1173207956,-1148261549,-346861974,1309260680,-2105349293,-201260288,1761608519,1711342336,1778385706,33620736,1795162885,469828352,1828717390,-553581824,1845494531,-2097085696,1862271794,-1342176768,201391949,989856256,218169165,1124139776,1895826254,1291911936,1912603470,1543570176,83886422,-939457792,100663631,1291911936,134218038,-1157561600,16777740,1543570176,150995254,1275069184,453050114,1140916992,2080375638,1358955264,469827407,453051136,2097152841]},{"sector":13,"data":[301990656,486604621,167772928,503381769,436208384,520158991,1426129664,2130707232,-1459617024,536936202,-1476328704,150995468,-2030042368,553713459,369165056,16778034,-234880256,570490634,-822082816,587267909,-1912601856,604045100,-100662528,620822316,-1191116032,100664065,754975488,637599567,-704642304,654376769,-1509948672,671153992,-184483072,-1996487931,486540032,687931206,503382784,-1979710714,1509950208,704708431,922813184,167773013,385876736,721485653,-1493105920,201327361,302056192,-1879047418,1006699264,486539793,-83819776,369099561,-419364096,385876797,-989789440,553648716,1845560064,-1728052395,-1493105920,-1711275258,16843520,570425869,-805240064,-1694497970,1476461312,-1677720747,-2080308480,-1660943574,-234814720,637534797,939590400,553648926,-1845427456,-1577057494,-419364096,570426190,-1023343872,587203372,285278976,-1560280316,-1090452736,855638352,1073808128,-1543503100,1627456256,603980621,-956235008,754975244,939590400,-1526725870,-134151424,620757824,-503250176,-1509948671,486605568,-1493171452,-285146368,654312193,234947328,671089410,-1358888192,687866708,-486472960,704643925,436273920,872415825,-318700800,-1392508081,1073808128,-1375730864,-1425997056,-1358953642,-1946090752,-1342176433,-503250176,-1325399216,2130772736,-1291844783,-1593769216,-1275067636,-234814720,872416030,-83819776,889193299,-150928640,939524895,-1694432512,956302160]},{"sector":14,"data":[-704576768,1107296779,-1107229952,1241514325,486605568,1140851287,-587136256,1157628502,1661010688,1023410974,1073808128,1291845938,-385809664,1040188192,-67042560,1056965408,-771685632,1325400384,-1946090752,1073742624,-1459551488,1090519840,-436141312,1358954814,67175168,1107297105,16843520,1375732035,-754908416,1392509243,738263808,1140851537,285278976,1409286466,1627456256,1157628713,-1090452736,1426063675,536937216,1442840896,-738131200,1459618085,-1275002112,1342177865,1811940608,16842576,1929446144,1509949773,-1006566656,1375732305,1543570176,1291846431,989922048,1358955288,-1023343872,1627390262,33620736,1375732498,-1392507648,201391949,-1040121088,1426064153,302056192,1560281681,939525376,218169165,1493238528,1459618604,1963000576,1476395849,-1073675520,1493173069,889258752,1509950286,1728119552,1526727474,-1258224896,1543504718,-1040121088,1560281904,1342243584,1577059118,2113995520,1593836334,1744896768,1610613553,-570359040,1627390766,-855571712,1644167982,1845560064,1694499655,1895825920,16842576,0,0,1167087646,518818645,-327034738,-11140960,-1070920586,-11513776,-1706030986,65535,425603,-1159134347,209125120,-1928825089,385837190,8435792,-26032,-2037841920,-259260574,-9979264,-972721060,1560242306,-10320129,-10307957,-9927994,105286400,-1996486651,-1946196858,134547014,244338688,-1996451352,-1912641914,-1979750266,-1946197882]},{"sector":15,"data":[973039238,1946117254,1688111886,1622576127,939821823,-1959758841,973039238,1979671686,1621003017,4161791,1183517300,525574,-10189175,-15960321,-2037708170,1344208740,16777114,-1959662848,520053894,14522960,-2037841920,-2037645468,1344208736,86938,-6755584,28839030,-6664192,1342177535,-1705983957,65535,49120094,1562371467,576077,1167087646,518818645,-326903666,105286406,1344163870,16777114,105251584,932859934,-1996488703,820771910,503727755,-62485680,-6664162,-1996488449,-661914554,1183319946,1952201978,1966750724,-62485745,-6664162,-1996488449,149683270,956712587,-931660730,-1962742397,1297948645,525002,15991043,2228227,13500675,5046273,19071235,5111809,18415875,5898241,15401219,5963779,12648707,6029315,3801347,6094851,1835267,6553603,1167087646,518818645,-327034738,79167634,-1202708991,1344143613,503381176,1954975056,-1202710785,-1706033024,65535,108380171,-369098824,-2037579448,1183448948,-162099980,-1098901269,1949106030,-159973601,-1695254785,136,-1980479863,1589966422,126494452,-9533816,-629817334,653549252,1946173312,-196673759,509478,-1098901269,2132868974,-159973601,-1695254785,195,-1980479863,1589966422,126494452,-9533816,-629817334,-1946925429,1183446614,-61437446,-1098899477,1949106030,1857978406,528359679,-624897,43709558,-1996488703,1451881542,-195115786]},{"sector":16,"data":[-2012771802,184512134,-992774720,-2144930722,678690879,653543167,-352319546,1857978399,125706495,-9519488,-14715604,1996486262,20486900,1183383552,-162100748,653549252,-2037905526,-1073021074,1183568757,-162100236,-9402743,-9267575,-1098901269,2116091758,-159973601,-1695254785,65535,-1980479863,1589966422,126494452,-9533816,-629817334,653549252,-16775226,1996487798,1954975226,-11528449,-36170,738160822,-1706012480,65535,200820361,-385649216,-310116686,535137026,63655261,671154944,973078784,1879114496,889192961,1342243584,1291845888,0,0,0,0,1167120524,518818645,1465309326,567094452,-1996071285,38766871,-310157729,535137026,46812509,-1864856576,-326412987,1457032734,-852839337,106859297,1468598152,55544065,-310157729,535137026,46812509,-1873273344,-326412987,-2082959842,-1957295892,1988692086,-96024584,1586167808,55020042,1183441962,1111393276,544538625,2080377917,-59866357,-96024820,99287352,855262919,-58817791,-955943680,851014,1459386111,21249667,-167348992,1946420806,112645,-1070923029,-401698736,-259325685,-2013187680,1586185732,38242826,1448141866,1342177720,-253227376,-2081387776,1946221182,537183768,1586170603,-96010246,76023690,-94467258,1962950528,105314029,-1962183672,1065416798,-972851920,80093191,734432000,-2090928058,-443874579,-900899553,1478361094,-1957345904,-661774612]},{"sector":17,"data":[1460595843,141986646,-1947044215,1200294494,1040591619,-1177408767,-235470748,-1979492471,-467008953,-1963178359,-125107897,-1946517879,-129594942,20987523,-1994755072,1200290942,-1981535742,1048836678,1963065664,-1983739128,2122972230,-59310088,1144454998,-401698815,-259325889,-2013187936,1996441092,922703610,244318532,-1962923288,19964144,-12188536,-11077514,-1878965194,1435662,80146571,-230282496,-310157474,535137026,113921373,-1873273344,-326412987,-2082959842,1448543468,-1962248565,-963966850,702873,1183447543,1975520252,108954374,-1979157504,805633094,-1958279800,179935686,-2131101952,361246914,1590135623,49120095,1562371467,445005,1167087646,518818645,-326903666,1988843020,1183667718,-756526856,200313601,-1207536138,-1024851969,832587264,-12306431,-1923681931,-397347770,-259325515,-478874101,16139975,3964928,1344157044,16777114,-2012968448,849410630,-96061439,1187448693,-352242948,20488210,1979336248,-163133514,1187446785,-1962854148,1065417822,-2095942400,82494,2122531189,410914040,-335544648,3965018,1586204020,-62455812,1946630316,-8394282,16154243,2122517877,393547000,16271047,-2096043264,1946220670,-125926449,-2096857844,-2096302010,2098788478,-193035329,-1950778052,1183451230,55019768,-1997257078,1204159047,130416641,1589652224,-1962742397,1297948645,503317706,1430622296,-1910575989,216826840,1988843095,1183667718,-555200268,200313600]}],[{"sector":1,"data":[-1207536138,-1813381121,815814144,-397371391,-259325801,-344656373,-96039594,12314704,-166989685,-1604919948,1352139056,-1962902808,1962281968,1183667918,-1628942084,200313600,-2134870794,-1149960132,1023492257,125042689,1946157629,-1962087620,1183577214,-196703750,-1577419127,1174470974,-58817540,-2130346652,124582982,-1979162997,1200157766,-62485758,-1979496567,1200159302,244339457,-352274968,-58815733,-1980479861,-1091830714,-310157474,535137026,80366941,-326413056,-1962742653,126486110,-1963047288,1178076230,-2146667266,1949171326,-25264122,-16222929,1183516230,721611526,1575324608,1426064578,-326898549,-1957275898,32179830,540835910,1988754036,-28915716,76152832,1475906456,16777114,1975520000,822051614,-8185476,-1206616263,1727463434,768017406,1183383600,-1203943682,970158603,91618422,283885611,540835910,1586231924,-28931324,-963967095,-443850914,311901,1167087646,518818645,-326903666,-1957275898,2139096670,108265474,201490304,-21494154,8907263,-1962516853,-276757633,-8190020,-1207601545,1944846333,-1979294069,-14024097,19105674,-259267542,247799,1586170485,41910278,1174500610,-1979294069,-467009209,2009480008,39815865,-472776918,17479563,-150901320,200279015,-1928694529,-388890811,54585553,63436784,-1962248960,2139096670,24510978,106859334,704726922,1086718948,129618475,-1997408512,1589652247,49120095,1562371467,33737293,218170112]},{"sector":2,"data":[855638786,1224803072,1325400320,0,1167087646,518818645,-326903666,-1957275888,1988692086,114672,2114256771,14608643,20979339,-472783919,21332362,-1072962518,20780148,1028813824,1634992130,1962935101,8513795,1190543595,980681734,-2146804085,259391295,-26029,-1073020928,-1070922371,1442882537,-1979031925,98839047,-397377556,-259325791,1963065219,738510340,83854150,80086132,-347650528,1586189967,38242826,-553262038,2062045311,-336557312,105314021,-1948027640,1200228958,1357130241,1144454998,14653953,-259325952,20987523,-960269056,-347722748,173968317,721635211,-1996407290,-1181090746,-101253020,28857936,-174436352,-1962934272,-62485520,6601113,1448278519,1342177720,16777114,-370111744,80150399,734432000,1600057414,-1962742397,1297948645,1426065098,-1957237621,922682998,1996423932,516328196,2013264,-26032,-972881920,1575324510,197826,11665411,2883839,5636099,2949375,19529987,11534339,1167087646,518818645,-326903666,138840836,-1207763805,1344143758,503403192,1354771280,21146,21013248,537282294,113707124,65858,1190536171,141824006,21104327,367722496,503418552,22591568,-1070903266,7707216,1117978624,105313793,-955747324,16860166,-1206523136,1344143758,503406264,1354771280,35482,21275392,503418552,23443536,-1070903266,-26032,1050869760,26130433,1907904542,-1202708991,1344143666]},{"sector":3,"data":[112742430,-1046851584,-1207959552,1344143758,503412664,20494416,1344163870,1342179000,56986,26130432,2142785566,-1202708991,1344143741,385631885,178256,16882256,1183449088,19964668,503418552,25671760,-2051518434,-1924129279,1343683654,1342177976,16777114,-62486016,-2097073758,-443874579,-900899553,1478361092,-1957345904,-661774612,-1205539709,-397408258,-4718423,-1561833465,604423936,-1207958014,-1202683936,-397377557,109248593,-1207631324,-1202683924,-397377550,1187446849,-2097151748,82494,951592309,-1706025471,369,-1191426423,1344143666,16777114,73048832,2130462265,-62485754,-2096866653,100948486,-1962742397,1297948645,1426064074,-326898549,727078690,-14619658,-16581578,1191118454,-532247290,515395606,-6664192,-1962934017,2130590712,-1946711294,1178141766,30963206,1577198646,1575324511,1426064578,-326898549,-63504638,134133762,-1202695527,1385758726,-26032,-1073020928,922687604,1996423932,-25858,1183383552,1958743038,112645,-1070923029,201213577,1342600384,16777114,1575324416,459458,34930947,1179649,2162947,3735553,10944771,3801089,32112899,3932161,33161475,3997697,28508419,11534339,23331075,5898241,0,0,0,5,0,0,505355295,522133023,522067742,0,0,65535,65535,65535,65535,65535,65535,65535]},{"sector":4,"data":[65535,65535,0,0,0,-1280269643,-1247629133,0,0,3932222,2031616,5898299,9896056,13893813,17891571,21889328,538968064,538976288,0,32767,1094921728,1094910028,710672460,1279345454,0,1466720579,1632461934,1124101737,1851223137,1651856228,1818313472,1298427479,7235937,1466720579,1968399470,1631780962,1684952940,6452563,1466720579,1968399470,1682243682,1157657705,7629156,1529830434,1014774365,993864510,8236,1986348032,6644585,1684957559,7567215,2031616,5898299,9896056,13893813,17891571,21889328,505355295,522133023,522067742,1296120367,0,19792,0,0,16777216,33555202,16974593,1147731970,6648929,1835619433,1281949797,1869768058,1700358400,1716482657,1952805734,825324288,1929394485,959787826,1929391872,1702125892,1929394688,1701669204,1852375040,27764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,97517568,99616232,591420,3670019,524543,3932163,590079,4194307,655615,4456451,721151,2359299,196863,2621443,262399,2883587,327935]},{"sector":5,"data":[3145731,393471,3407875,459007,258,2097184,16842756,0,-12584705,-12584705,-16269057,-16269057,-1863681,-1863681,-507906,-507906,-507906,-507906,-507906,-507906,-507906,-507906,1073676280,1073676280,-1879048221,-1879048221,-469762161,16777216,16777216,-12584705,-12584705,-12584705,-8389377,-1,-1,-1,-1,-1,-1,-1,257,4194304,524352,0,0,16128,0,16128,0,16128,0,16128,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768]},{"sector":6,"data":[0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,768,0,15729408,0,15729408,0,15729408,0,15729408,0,-64768,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,-12648448,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,255,0,0,0,0,0,0,0,1061093376,1061109567,1061093439,1061109567,1061093439,1061109567,1061093439,1061109567,63,0,0,0,0,0,0,0,1061093376,1061109567,1061093439,1061109567,1061093439,1061109567,1061093439,1061109567,63,0,0,0,0,0,0,0,1061093376,1061109567,1061093439,1061109567,1061093439,1061109567,1061093439,1061109567,63,0,0,0,0,0,0,0,1061093376,1061109567,1061093439,1061109567,1061093439]},{"sector":7,"data":[1061109567,1061093439,1061109567,63,0,0,0,0,0,0,0,1061093376,1061109567,1061093439,1061109567,1061093439,1061109567,1061093439,1061109567,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1818838544,101,2003127808,65536,1852141647,3026478,1392509440,6649441,1392509696,543520353,774796097,67108910,1769099264,774796398,92274734,1835356672,778401391,268447278,1953064005,393216,158627139,7103812,1124075264,158953583,-2147470778,1632632840,157643891,7564873,1701402128,150995063,2036417536,3753481,1291848320,1752460911,808535561,1750274048,30575,1867776011,158949732,1701670728,786432,1986359888,1937076073,1733320201,7361824,1308626176,158627941,543641694,-2147455420,1631846414,774792564,877005102,1816203264,7172705,1392512768,1175024741,276824117,1852785408,1819243124,774778483,1884262400,1852795252,285212787,1918979328,910559595,1179648,1667592275,543973737,1701669204,154021422,-2147469498,1631846419,1699946617,1852404852,774796135,46,-1874853888,335549446,1342215168,0,131118,786532,8388611,8474755]},{"sector":8,"data":[335545344,939542016,50332672,-2091867392,5701632,3276840,65550,1342373889,1701859200,1459617902,838875648,33558016,50331648,1631813712,1818583918,5111808,3932180,327692,1342308352,33554562,671089152,-16774144,33555199,1766228560,1847616876,979725665,0,0,-1874853888,335549445,805348864,0,983052,786536,8388611,8474755,33557504,201341952,16776960,-2108685824,1702256979,1818846752,1935745125,1342177338,1207960064,83889152,33554944,33360,983160,917539,65537,1400918019,6649441,553678848,234889984,512,-2142240000,1668178243,27749,0,-1874853888,335549447,1006664704,0,524292,524360,65535,1350717442,1953393010,1886404896,1953393007,1953391981,67108979,335550976,-16775168,33554687,1917223504,3829103,704644096,134220800,16776960,-2108685824,3829588,402660352,201338368,1536,-2125430016,1835008,3014696,458764,1350762496,1409286273,587208448,16780800,50331904,1800372304,5505024,2293799,131086,1342373888,1851868032,7103843,0,0,-1874853888,335549447,1006664704,0,524292,524364,65535,1384271874,1987013989,1883316325,1852403568,1852140916,29556,1703940,524308,65535,1182945282,980250482,262144,786474,-65528,1342308352,980374658,1835008]},{"sector":9,"data":[3014680,393228,1350762496,469762177,771762176,117443584,-2097152000,33104,1507412,917539,65537,1333809155,1409286251,587212544,33558016,50331648,1631813712,1818583918,0,0,-1874853888,335549444,738234368,0,655364,524328,65535,1401049090,544698216,1702125892,805306426,771753984,117443584,-2097152000,33104,458856,917539,65537,1333809155,1744830571,587208704,33558016,50331648,1631813712,1818583918,0,0,0,-1874853888,335549446,939563520,0,524292,524344,65535,1099059202,1836212588,1852785440,1819243124,67108979,1342183424,-16775168,33554687,1631945296,544828530,1735289170,540026912,808525869,14889,1441880,786448,8,8474755,637535232,201334784,33556736,-2142240000,1853189971,1912602724,587207936,16780800,50331904,1800372304,7471104,2293797,131086,1342373888,1851868032,7103843,0,0,0,-1874853888,335549445,738229248,0,524292,524340,65535,1401049090,1768121712,1411411041,979725673,3932160,2621447,196620,1350762496,67108993,587208704,167775744,50331904,1850310736,1953654131,2883584,2293784,720910,1342373888,1818576000,6648933,402674688,234889984,512,-2142240000,1668178243,27749]},{"sector":10,"data":[-1874853888,335549452,1208001536,0,524292,524336,65535,1149390850,1394637153,1769239653,7563118,402654208,134225920,16776960,-2108685824,1702129225,1818326642,3407872,1310742,786444,1342373892,3486080,369118208,201331712,67112192,-2142240768,12339,1441892,786452,262158,914378752,67108912,738207744,-16775168,33554687,1867022928,1176531573,1634562671,872415348,335554048,251661312,50332672,842104912,4980736,1310758,1048588,1342177284,3420800,939525120,134232064,16776960,-2108685824,1918989395,1735289204,1835619360,14949,3604544,786472,17,8474755,671120384,234889984,16777472,-2142240000,27471,3670140,917539,2,1132482563,1701015137,108,0,-1874853888,335549446,1308662272,0,327680,524442,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,130946,234881024,134257152,33554176,-2108685824,1701601603,1918985326,1966080,6160418,-65528,1342308353,1919243906,1852795251,808333600,49,-1711264000,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989871360,234889216,16777472,-2142240000,27471,-1874853888,335549443,1879101440,0,524310,524360,65535,1350717442]},{"sector":11,"data":[1935762796,1701978213,1651336557,774795877,1459617838,587225600,16780800,50331904,1800372304,262144,13107226,262200,1352859651,7032707,0,0,-1865940992,335549444,1073764864,1124073472,1852140641,7496036,2883613,917536,65538,1132482563,1701015137,108,1509951488,-16775168,33554943,1699971664,1852400750,103,1509954048,83888128,33554688,33360,1835008,524378,131071,1954697218,1752440943,1919950949,544501353,1869574259,779249004,0,1853171722,1819568500,136930405,1701601603,1918985326,1952531478,1752375397,1684829551,1869573152,1768693867,404776299,1919970633,1919250543,1851879968,1864394087,1633951846,779314548,1835619350,1752375397,1684829551,1869573152,1768693867,924869995,1852727619,1663071343,1952540018,1751326821,1701277281,1818846752,539828325,1953064037,1769414771,1847618668,1646294127,1701978213,1685221219,724460645,1663070030,1735287144,1768300645,757097836,1768187168,1629516660,1646290290,1735289189,1936286752,1685217635,523134053,1702130753,544501869,1914728308,1919902565,1684349028,544437353,1818845542,640574565,1702130753,544501869,1914728308,543449445,1702125924,1869768224,1768300653,1713399148,1701603681,1126641252,1735287144,1768300645,1763730796,1969627251,757099628,1701605408,543519585,1629515620,1986089760,1309814373,1696625775,1735749486,1701650536,2037542765]},{"sector":12,"data":[1631791918,544483182,1634624882,1847616877,1713403749,543517801,1768300589,1763730796,1869488243,1633886327,1684368492,1950424096,1886217588,1869881460,1986097952,1768300645,1713399148,1701603681,1141714532,543912809,1713402729,778857589,1885688337,1701011820,1769497888,1852404851,1393959015,543520353,1920103779,544501349,1851877475,980641127,32,0,0,0,1818838543,1869488229,1868963956,778333813,1953451546,1981833504,1684630625,1818321696,1633971813,1768300658,422471020,661545283,1701978228,1663067233,1852140641,544366948,1701603686,1833507630,1886351984,1696625253,2037150305,1852404256,1701847143,1685023090,1867387694,543236212,1667592307,543973737,1701669236,1884494126,1718182757,543450473,1701669236,1953459744,1970234912,506356846,1667592275,1701406313,1769218148,1629513069,1634038380,1763735908,1937055854,1124937317,1869508193,1919950964,544501353,1818313483,1633971813,539828338,1868710152,774796405,1867781678,1634541679,1679849838,1936028769,544106784,778400629,1952531469,1936269413,1819633184,537996908,2019906592,1920213108,1633906293,778331508,1769107222,1634625895,1631789164,1684956524,1713402465,342191209,1701601603,1918985326,1634231072,543516526,1701603686,2003136017,1818313504,1633971813,1768300658,25964,0,0,1953451541,1981833504,1684630625,1818846752,1835101797,1310662757,1696625775,1735749486]},{"sector":13,"data":[1768169576,1931504499,1701011824,544175136,1852404336,1310400628,1696625775,1735749486,1701650536,2037542765,544175136,1852404336,1395925108,1702130553,1818435693,543908719,544432488,1852138850,1634231072,1684367214,1684086828,1953723754,543649385,1954047342,1634492704,439250290,544173908,2037277037,1869374240,544435043,1948283503,1919249769,1143352947,543519841,1953723757,543515168,1914728041,1701277281,543584032,808991025,544175136,960049202,1631853870,1919885433,1852796192,1713399924,1684825449,1869575200,1918987296,556688743,1920298824,1919885427,1852402976,1936028789,1701406240,1948279916,1814065007,1701278305,1631784494,1953459822,1701995296,543519841,0,0,1851869703,2037539189,1650804232,1918989682,1632437625,90727282,1769107521,1632437100,1967785081,1241802094,108620917,1969714497,1393128563,1702129765,1919246957,1952665351,1919246959,1987005960,1700949349,1698957426,1651336547,1392931429,1633971829,1867318905,2036425838,1702188039,2036425843,1684363017,1685284206,31073,0,0,1969771528,1633973106,1917191801,2036425833,1952535304,1633972853,22217081,22282573,22282583,5439814,0,0,117469441,7864576,2030108681,16779776,720932,201335049,2230528,1929445389,16780800,983156,285242625,7733504,771817490,-2130701056,524333,0,-1962736664,2144763,-67057474,637535418]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[11164237,64,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":5,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":6,"data":[279886,15204743,191784445,458758,262145000,65836,458752,196615,4194433,23330936,24510832,1647,131110,1187250176,34074624,720896,57999804,57999680,104858316,104919408,289998011,290058608,728631610,728691056,295638220,295694640,371202475,371257648,22421392,85590033,-2147287036,1,133824512,-265289663,32769,-2147221504,1,138084352,-265289707,32769,-2147155968,10,139460608,-265289719,32774,140050432,-265289719,32769,140640256,-265289720,32770,141164544,-265289721,32771,141623296,-265289722,32773,142016512,-265289709,32779,143261696,-265289721,32775,143720448,-265289721,32776,144179200,-265289713,32777,145162240,-265289720,32778,-2147090432,3,145686528,-265289717,32769,146407424,-265289697,32770,148439040,-265289714,32771,-2146893824,1,149356544,1048580,32769,0,1380008712,1279870532,69,524289,100663308,1314014539,1191398469,1426344260,642925907,1070399999,16777220,537280461,1070399751,16777222,-955891763,1070399747,17178374,570703821,1070399774,17349125,1191526349,1070399752,532998,-754761779,1070399504,2118660,805584845,1070399513,316419,-469549107,1070399503,344579,503660493,1070399490,204549,-217759795,1070399498,644357,201736141]},{"sector":7,"data":[1070399501,752902,1074151373,1070399506,731651,-804962355,1070399503,1018117,822427597,1070399503,861701,2047033293,1070399501,1087749,-754696243,1070399513,2048004,318914509,1070399489,2,755122125,1070399492,1546756,1057243085,1070399528,229635,212941,301989888,1701080649,1631789176,1210082418,1818521185,29285,1397638662,71652929,1094912768,1314341970,1330794564,201328195,1162104393,1145984856,1129271888,1174863873,1329742158,349269,1095648779,1414680386,1129271888,1175322632,1329742158,1279546450,1330794567,100665155,1229213254,609345,1196180487,1129271888,1174798338,1162891086,846,-2081649835,1183519980,24027916,687747,-6681483,184549631,-384928320,1996423361,-26102,-998047744,74907394,-16222465,1996424822,-26100,-998047744,1975520008,10217731,40908543,16777114,1958742784,-330920629,922701846,12059248,129519617,-1070903295,-26032,-1073020928,1048784501,1946157194,1882652455,-26110,1183383552,-6663938,-2097151745,922682052,1996423792,-25858,113704960,138,384583309,1354771280,-6664112,184549631,-12225344,-16622538,-1929106890,1343679558,16777114,1958742784,-8591101,384583309,-26032,1183645696,-1706027284,65535,738158057,-1732751168,726670849,-1202696000,-1706033104,65535,-443826133,705117,0,1942235995,920188696,656953,959844215]},{"sector":8,"data":[1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,-33110229,-1996488704,1459679246,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-22747129,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,407,-1017256565,-1192457387,-1957691328,1861682246,-828747770,-1962934271,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,477,-1017256565,736922453,1996443840,-26108,-443875328,-1957313699,74907628,16777114,1575324416,-326412861,-1710983425,582,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443875162,1320928093,1425768705,1393062657,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1073816207,-1007912629,567095476,-1023343453,16647822,741772070,889239552,512303565,109838578,521011444,-1171980104,567083296,1141803830,908256001,21366469,-617358708,1109327670,-385649919,-986251703,-1946072570,244698,1109327670,-1021372927,855643321,579335899,74711297,567099060,-1007492541,-387151019,1996423243,1042436,-1017256565]},{"sector":9,"data":[115600690,-657331503,1438907106,1122561163,-29235200,175432714,294528,1187382389,-987824636,-1207897578,567092480,1141803807,-1157111039,520028162,1183514946,-850611196,22330145,22346625,-11335565,1128487703,-1144786197,-75431596,141754710,1528299347,-219462845,50338243,50374401,50359296,50357761,50359552,50384385,50360576,16852993,50331904,50386945,50360832,16875521,50332928,16887041,50333184,16890881,50333440,16903169,50334208,-16743680,50339584,16909313,50335488,-16763392,50339840,50393089,50331904,-16768512,50340096,16916225,50336000,-16772352,50340352,16922369,50336768,50417921,50332928,16933121,50338048,16861953,50339328,50350337,50343680,50380033,50377216,50362881,50348544,50369025,50349056,16854273,1828739840,1167087646,518818645,1996478606,30455814,178256,2529872,1996423168,72923142,178256,3578448,1996423168,30586886,178256,4627024,1996423168,68204550,178256,5675600,1996423168,40679430,178256,6724176,1996423168,64403462,178256,7772752,1996423168,85243910,178256,8821328,1996423168,26392582,178256,9869904,1996423168,40024070,178256,10918480,1996423168,68597766,178256,11967056,1996423168,81704966,178256,13015632,1996423168,23377926,178256,14064208,1996423168,26261510]},{"sector":10,"data":[178256,15112784,1996423168,62306310,178256,16161360,1996423168,69908486,178256,17209936,1996423168,11450374,178256,-26032,-310181888,535137026,516640093,1430622296,-1910575989,-1796439592,-950642944,16740998,108461824,1342182072,503421112,3323984,21994064,1996423168,440326,24295504,515395614,1687834624,-16777215,129500790,817385472,-1202708988,-1706033112,377,-1207535873,-1202716664,1344144608,1342185144,102042,108461824,1342179768,503560376,2013264,27499088,1996423168,1226758,26785872,850939934,-6664192,184549631,-385649216,-4718208,-17665,1996443730,30513670,1721958400,1746307330,-18430,1392508858,108461904,125082,85369600,85464713,-1157627976,1347616767,-1710852353,511,-1996327261,-1207797738,-4521985,-11513089,379192950,-1560281086,378077810,-4717964,-17665,1996443730,36542982,-895287296,-870938367,-18431,1392508858,108461904,148890,2055637248,2090240511,-18177,1392508858,108461904,154778,42115840,42210953,-1157627976,1347616767,-1710852353,65535,-1996396381,184642070,-385649214,1119355072,884494336,1347590400,16777114,26649344,58048523,-956258327,273414,805750272,113704963,65894,65472198,134661888,-973078523,17032710,-26032,-2037841920,-1769341076,-1631256722,-74711188,-1190929218,-1510866918,26621695,16777114,9746432]},{"sector":11,"data":[-1330098146,726670848,16562880,1347440722,6600784,1354771280,108461904,-6664112,-1996488449,201290374,-1204587328,1344143538,503361976,309328,1380974778,1354771280,-11513776,-1191218506,-11534136,-1070922122,-275099568,-1560281086,-1073020304,-1224795275,-1732706446,726670849,-1202696000,-1706033104,65535,-638992341,1882652416,68532226,29603920,1354771280,-26032,922681344,-55049616,-6663937,-1560280833,378078478,922682640,-55049616,-1224781569,-1224736900,-6619270,-16776961,-36170,-6681482,-16776961,-6683018,-2097151745,1183515332,173443848,-9009527,-8874359,-2030107413,-1631256714,-2144927882,-227270593,-9140537,-2033777872,65392,-9003324,541032486,-1635049346,-2030043276,-1232339084,-2030043274,-1977155722,-16283644,-2080411514,2147446974,-1635002756,130482036,53524480,-6664162,-2147483393,208958,817370484,-6664189,-2097151745,-1073020220,113640821,-1207958736,1599995905,-1962742397,1297948645,-1873273141,-326412987,-2082959842,727069420,1268404416,-1560281084,79167952,1469730816,-1560281084,45614168,-6664192,-1560280833,-1202716206,-1924136952,1343672902,16777114,-767128320,-6664170,-1560280833,-1073020462,-794753419,30581505,-4538325,-1706012160,1188,184800931,-1593412160,-693960240,16758787,-1706012007,65535,184815779,-1593412160,279118936,12040196,-1070903266,1347440720,-6664112,-1996488449,-1072965050,-1070922379]},{"sector":12,"data":[-16686103,246995574,-375762944,-16777212,213506678,-259305216,16777114,1036387072,192741379,-1560161631,1486947604,-955258108,16821766,64397568,-1593502557,1822622736,-629735678,383534733,-26032,1996423168,-25894,1183514624,-465173540,-1962831197,1688462406,-431584510,-1593679197,-1556086382,683148310,1647245056,197890,-1207640413,787939339,100860306,84214162,23372544,-1202667477,1385791232,91986512,-1868365824,1354771201,-1719729480,-6664110,-1560280833,922682294,28836206,1347590400,16777114,-62486272,24000255,-1728052808,-6664110,-1560280833,1048773674,1962934672,-14751485,62275203,-385649408,2122579732,57999612,201264105,-385649216,1085865732,448286720,-6664192,-1996488449,-1072968122,-303496331,-1193767938,1200160916,408914966,-1996386143,1183518279,206014972,1066951,151504640,38258432,1204289535,-1577058556,1200161134,306693898,1204224001,-1962934252,-1706025277,65535,58048523,-89111,-6631818,-1207959297,-2090991615,-443874579,-884122337,131119,16712160,131076,16712206,131077,16712229,131078,16712276,131079,16712253,131080,16712183,196617,16712599,16973838,197466,16973935,67027,16973829,67119,16973831,66169,16973839,197440,16973825,66218,16973842,66249,196627,16712719,16973860,197479,16973959,197507,16973960,132291]},{"sector":13,"data":[16973977,65978,16973875,65558,16973878,197411,16973865,132211,16973874,197519,16973866,197994,16973997,198029,16973998,196922,16974000,198047,16974001,198176,16973881,132236,16973890,132386,16973892,66559,16973903,132315,327760,16713220,327681,16712111,16973826,132201,327762,16712134,327683,16712157,327684,16712203,327685,16712226,327686,16712273,16973831,132159,327767,16712250,327688,16712180,16973833,132378,131165,16713225,131073,16712114,131074,16712137,1953300483,1167087646,518818645,-327034738,-950664920,64582,-19102067,108461904,-1276637552,79987460,-19102067,-2037559274,1343684474,1344798904,163226,1552320768,2109737983,-373282043,-2033843407,-1207894157,-1924136957,1358917766,-10701057,-2096061208,-2037578044,1343684464,503323320,-26032,-1073020928,515379060,-6664192,-2097151745,-353828156,178178,-662270640,-1224781570,1860763484,113541904,26621695,-19364213,23463427,-150981447,1372138465,178256,-26032,-1073020928,-1224796299,1889206108,-1207959549,1344144408,1342182072,16777114,4372480,29603920,-1706012007,484,-10582391,-764100597,32807504,-2037841920,-1769341068,-2033713290,65384,-1207810327,-1202716620,-11533348,-385917770,-998043659,1555496710,1354771455]},{"sector":14,"data":[112720,20355664,-2037841920,-1769341088,-1224736926,922746716,922682340,-1070922782,35494480,113704960,1288,1342177976,1342506680,-10701057,-2096123672,1048774340,1962935558,22145283,1342177976,1342504632,-10701057,-2096130840,45614788,12079104,-1224781819,-2098659492,113541903,1342177976,-8878451,1555496784,258992383,-1962490749,-134252410,-1727897042,-1037319629,-754973767,734147576,84059074,1342177976,-8878451,1555496784,256108799,-1962490749,-134252410,-1727950290,-1037319629,-754973767,734147576,84190146,1342194360,-11485141,-1710946762,65535,200951433,-385649216,-1706032985,65535,-9795959,-9660791,84293375,-1224781742,-655818916,147096334,-10701057,1347469355,1342177720,155290,1686538496,1721141759,-29949953,3604228,112645,-1224781744,-1224736916,-6619286,-1996488449,201289350,-1560054592,-1224801016,-1224736932,-1224736922,-1070858396,44669520,-92078080,1025537535,460718079,-19102067,-2037559274,1343684474,1352663224,243610,1552320768,-3675137,1402665590,-16777213,1553660534,-352321533,1555496724,1354771455,84293375,1342177720,209562,178176,-628716208,-1224781570,1122565980,113541902,-19218815,108134851,-19233081,-1224801854,-1224737062,-1224736906,-1224736908,82378588,147096334,-19226997,-9128252,50726,-21473786,-591900668,244338691,-2096616472,-2037839676,-1072955686,-6682508,-1560280833,1048772632]},{"sector":15,"data":[1946158344,137821961,-26107,-1224802304,-1224736932,-1224736926,-1070858400,-26032,-1098711040,1946222298,1753677614,-662270977,1753627134,-385649665,-1224737363,-6619298,-16776961,-1694540106,65535,1181383,1187446785,-16776708,-1694540618,65535,1593591435,-1962742397,1297948645,-1873273141,-326412987,-2116514274,1459688172,-62470314,-2037579776,-11468944,244319862,-2097073688,-2037578556,1343684464,-17791347,12079126,-6664152,-1996488449,-1072959418,-1070922371,-973012247,-1207895226,-1924136957,-11470778,652800118,113541901,385369741,2144336,2073710622,184549381,-1206946624,-1706033122,1571,-385694589,45613248,-2037559296,-11469074,-219615114,113541900,26621695,-150981448,738127526,-1202695735,-1706033150,174,376815627,-1695516929,1218,503584952,1226832,13212240,-2037710848,1722023662,-1774780671,121805313,1183383552,-162100748,15877831,-1205474560,-1202716620,-11533348,-1830227850,113541900,-2081143100,-1959463866,64798456,-234874183,-230228059,-17922421,1928480313,-1774780462,42703361,113704960,18,-1929258817,520024246,4241671,817407474,-1202708989,1344143840,338586,-62470400,1996423169,108567280,1183514624,-2090901764,-443874579,-884122337,1167087646,518818645,-326903666,1183536648,-62486266,-1995946357,384563782,788037248,1586175092,-96010246,-231797,76217414,1586169736,-2012771588,-1073022906,1586224757]},{"sector":16,"data":[4161788,1187448181,-1962924804,1344207430,519849611,96442960,1183514624,-1706025464,65535,49120094,1562371467,1478413133,-1957345904,-661774612,40955009,-1070901673,-26179959,-26311031,-1912846711,1358799494,-1878624513,-9902066,-1929067389,385720966,53524560,1788497950,184549376,-1207601728,48955393,-2037792725,-1072955862,815800436,-2146658301,2734160,-1070903266,1921420624,-1706027266,65535,326483979,-2037551893,1343684210,-39680371,-6664170,-1929379585,385774214,-226063024,-1202710786,-1706029056,1544,-9271671,53493376,-955747328,821966982,-955847933,821966982,507413252,645201920,-29849973,-2034741218,-1202708990,-1705992190,1612,-40466807,91602955,-352321096,1086335746,397939061,2006601728,-2097152000,-1070923068,-2096828183,16741054,1048594044,1946157872,53524503,-659009506,-1202708991,-1705992192,53,-40335735,-9259265,1347469355,118135376,-92078080,1029797375,1551237119,53493376,-16157696,-1694656330,1665,-40454401,48026,1849097984,2471937,1921420624,-1202710786,-1706033024,65535,-26048883,-2037559274,1343684002,16777114,1547108096,1921420546,-1202710786,1344144312,1342189752,16777114,-10295040,-1202667477,-11534291,-385912138,-998045093,243718,3061840,1924595536,172615935,-1207516029,-1202716670,-11533978,-385912138,-998045129,1924595462,1354771455,112720,128162384,-930414592,-1962920776]},{"sector":17,"data":[1714354138,-1056728831,-2037787885,-1769341394,1119419952,-1011331072,1347590401,55450,679905536,1975520254,22079747,122919504,-2037841920,-1769341068,922746742,-426114666,-1996488704,-1979814266,-1979813738,-1979833722,-939645802,16657542,23503104,-30636487,1776878450,1855898626,1207314174,108266506,-40466805,-2037709589,-2037777000,-1001325018,654208670,638089215,721844223,446320832,-1962934271,-1946259834,-2080477034,889089670,-29704563,118943883,-1176859106,-1510866918,1149683231,-2037710594,-1769210322,-2037776848,-1769341376,884538946,-2037559296,1343684154,-9259265,-2096550680,876415172,-385647360,-1224801919,-1070858382,28856400,530206720,-1996488696,-1979871098,-159082,-36170,-118602,738078390,-1147514688,-1207959543,-1924136958,1358919814,-31017217,-2096575256,45614788,-2037559296,-11468936,-385912138,-998045461,2025751302,57999615,-1207908375,-1924136952,1358797446,-31017217,-2096587544,146278084,-2037559296,-11469414,-385912138,-998045509,4372486,1354771280,-8866049,471450,-96040704,913686539,-9259265,564890,-1732837632,145201917,-1224802304,2090532246,-1929379831,1358852742,518524560,46433032,503584952,1226832,71211600,1996423168,72260346,-2037841920,-1769341388,-1224737226,1347616632,-31017217,-2096626968,-1224800060,-1224736904,-1224737226,-1224737228,518586226,147096328,-30243191,-1694861569,2812,-1694861569,2821,-8878453]}]],[[{"sector":1,"data":[-30243271,45636978,-2037559296,-11469420,-385997130,-998045739,178182,-1803121328,-1224781571,-186056846,113541895,2080375357,-1799946446,1991704573,1958150143,649527295,126740734,-16202621,-158538,-35146,-35658,-385912138,-998045783,-1803142392,-13143043,-1694534986,2437,-40323329,626330,-1766392064,166173437,-2037579776,-1873740174,121104398,-1207778173,-1706033129,2925,-385694589,-1224801982,-1070858382,28856400,-677752832,-1996488695,-1979830650,-118634,-36170,-159050,738037942,93999296,-16777206,-369218426,-1224737397,-140837006,-2147483639,208958,-1224799884,530251160,-16777206,738039478,1347440832,691354,1354771200,1342190264,-40454401,-2096686360,-1224800572,-509936234,-2097151990,16657086,-2037570700,-1873740382,111142926,-1929198461,1358799494,-26048883,108456016,-1929067389,-335699322,53524494,882528286,-1929379835,385774214,30980176,45633566,1587171328,-1996488693,-1191339898,1344144176,503439544,79010384,-1224802304,96009624,1347590400,-1705983957,2949,-31291765,-31156597,-26311031,-26175863,-30636345,736821248,1342190776,-29718899,-1732837552,105375997,-1006189437,-2080477562,889089670,-1232209781,448396858,-5901824,-1577177978,-2043084442,-864879060,-40323329,274586,302434048,-956301312,130118,-30884221,-15567872,-1694619466,2840,-30886145,168858,1854311168,1887833086,-16157442]},{"sector":2,"data":[-1711172042,1170,1593591435,49120095,1562371467,1478413133,-1957345904,-661774612,-954012541,57926,53493376,-955812864,53539398,1187448299,-1962659598,1344205382,503482040,-1476216752,97819216,1183383552,292896992,1342184376,259226,46433024,-118898645,-529072383,1347469355,1342177976,417434,-163149568,-1946659191,2139293790,57999370,-1207871767,726663234,2013221056,245668360,1183383552,1975520252,19917059,246717008,1183383552,-363427352,1342177976,84428427,-11534328,1625874550,113541893,1342177976,-16222465,1357439094,113541893,1342177976,1074284171,1996443712,87943392,1023853699,58523650,-1962846487,1200293982,-754732796,244029920,-101252510,-1191557495,-1924136958,-11470266,283697270,113541893,-1962385781,61933127,-1952849709,-150892018,-96040455,1342177976,1358579341,-387942657,-998046485,146694,82379645,-529072383,1347469355,1342177720,822170,-465139456,-1947838839,2013202526,1354771210,-16222209,1996483190,-25880,1996423168,-428408864,736392959,-56995648,-2097151987,494272506,1979711293,-230257896,-2034741218,-1202708990,-1705992190,3559,-337623415,140413901,-16222209,1996483190,-529072152,-2096868120,1586170052,138885384,-2065104010,-59310336,1011354,-59310336,1013402,-14685440,1234886774,-1207959539,2062090265,178430,-498692784,-529072304,-2096876824,1996424900,175570700,16777114,-565802752,1912718141]},{"sector":3,"data":[-565786875,45613506,1183666176,1996443870,67758304,1023853699,628883458,-2197761,1996426358,-529072374,-2096899864,1183385796,-529072140,562586,-565802240,1945388601,1751046,-1946283799,1333790302,1183515658,-128545802,-1996077175,28837975,49120000,1562371467,1478413133,-1957345904,-661774612,1444736131,33310407,140413696,673735,106859264,17450998,867700596,172394752,-1207148916,770244609,106859266,67782646,1048584820,1946157872,-230242553,99287856,821184199,-230257916,-2034741218,-1202708990,233545730,503525560,30980176,12079134,1385844896,-1996488689,-1957632442,2013202014,108527368,-1705983957,3803,1342177976,84428427,-11534328,-286726538,113541890,-2096603509,1962936447,24570115,1342177976,-428409005,-2096966424,45614788,1183535104,1346387976,-387549441,-998047039,178182,-163148464,-428409008,-2096975640,1183516356,1647245302,-1036805886,62505515,871944960,-1950209086,1200162910,178180,-163148464,-428409008,-2096986904,1183516356,-1842415626,-1036805887,62505515,871944960,-1950209086,1200162910,4372486,1354771280,-1710721025,2181,200951433,-385649216,-1706032950,2250,-1981004151,1586228822,142081800,1996443730,35252454,-16202621,-1070864778,28856400,429543424,-1996488689,1451878470,140413930,2013214719,112642,1996443728,-327745554,147354,140413696,185223049,-955943488,64582,-1673473,1996483190]},{"sector":4,"data":[1354771432,525210,-359680,-12760971,-1958513153,1207305822,729023498,53493376,-955812864,53539398,1187448299,-1962659598,1344205382,503482040,-1610434480,174561872,1183383552,-1196299290,1344144176,503437496,-1610565552,1996482283,151296762,1996423168,151821050,451608576,-1947830529,-1070921634,142081872,1342177720,810394,-62470400,45613056,1183666176,1996443876,22800614,-2130262909,29615230,1187448178,-16661788,1996481654,175570700,-387549441,-998047453,-463566072,638219972,-16777018,681240182,-1962934256,-2090927034,-443874579,-884122337,1167087646,518818645,-326903666,53518340,884494488,726670848,1589137600,-1706025468,1448,578076683,503602872,42383440,12079134,-1466281968,-1996488692,-1072956346,-1706030980,3303,414716651,-1533390848,-2097151991,113705668,65566,-1962742397,1297948645,-326412853,1443687555,-1980479859,1187511366,-1962934022,254084166,-28931840,1859323057,670980,1586170483,-28931332,149630980,-1963172213,923074118,1191118728,-62455814,83525251,1325387132,-96024580,1586167808,105316102,-231797,76217422,1191118728,-92371974,-1947763708,130418270,-443851264,-1957313699,1451972588,-1962467836,1454638718,41034189,-1956659149,1438866917,1452010635,-851332090,855798305,1575324608,-326412853,73304862,-1274652987,172919615,41099725,-1960853453,1438866917,1586228363,106334980,1317748660,1931595016,-1950338302]},{"sector":5,"data":[1438866917,-1960907637,1455752286,-1958693882,567085646,-1070398861,1575324447,-326412861,-1962647925,1085539926,-855093621,855798561,1575324608,50337475,-16577792,50334464,-15715584,50334720,17540609,50335488,17048577,50335744,17620225,50336000,50774273,50331904,17544705,50336256,17618177,50336512,34535681,50343936,17351169,50345984,50763777,50376704,17832705,50350592,33758721,50349312,17453825,50351872,17814273,50352384,34372097,50350592,17796353,50353152,17032961,50353920,17463809,50354176,17213697,50354432,17631489,50354688,17826817,1828741376,1167087646,518818645,-326903666,205949798,1962939965,11921667,552141686,77059,1979716413,54520067,781434883,51750911,-1559345525,244318812,-15064088,-1070920074,-26032,1183383552,-1070903054,-1202696112,-1202651137,-1706030848,134,24000255,1342178232,379471501,2013264,-26032,1996423168,1354771442,379471501,582465616,16824400,-26032,585629696,242679577,1347469355,1208051361,1354771280,44698,242679552,1342177720,1347469355,-26032,-1070923776,1996441323,108461832,-16091393,1996426358,358606862,-351615869,176063461,-1193315328,-1706032034,285,-352140157,112849,672524368,184730755,-3967808,-402646986,-998039147,112642,-1360408021,1354771202,-2094532888,-1073020220,1996483444,-26098,-504692736]},{"sector":6,"data":[1342463672,16777114,46433024,24000255,16777114,81152,922688373,1083834834,-16777215,-1711009738,329,64370431,16777114,1354771200,16777114,-391976192,1441337915,40935935,1963345465,142508307,208995584,1342182072,-1142419824,-10163945,-938836351,-385649664,1048772996,1962934294,142508301,108331776,9045703,113704961,22,-1577118743,1178141296,-385649658,1996423613,-18422,1375797178,-26032,1996423168,1354771210,-26032,-794755072,-13571839,-16091393,-437776778,20441345,-1928431873,1343672902,16777114,272531712,1962970624,-700019440,1996443670,242679762,-352004888,-700019442,1996443670,242679762,-2097000728,1996425412,-767128306,-6664170,-385875713,2122579604,57999626,-95255,1996425334,242679558,-2096698904,2045314756,108462078,-16091393,-1561850250,-1250536,1996424822,242679562,-350603288,175570910,-383671064,1996488318,242679562,-383523352,2122514597,57999370,-2080489495,1946159230,-29955837,1064577,108331149,40908543,922682603,-6684068,-385875713,244383260,-384318488,1048706580,9306128,166265716,1547108350,-26110,1183383552,1614270,39847467,26357495,-1912846711,1343681606,-11485141,716766326,1647245056,1183535106,-1845099524,-6664191,-16776961,1183694454,-1706027276,65535,39597823,-1698793729,65535,-2114079767,582421118,1996448117,242679562,-2096725784,-1645673276,402665725]},{"sector":7,"data":[1728276225,1778523651,-1643995646,1728276226,1728276227,1728276227,16898051,1728110849,-872192253,17906945,417923957,1026979838,57999385,1040077033,57999386,1040138217,57999616,1040121833,57999618,-69911,1996426870,175570700,-16222465,-6683018,-352321281,17972530,2062091125,18103807,-1394015371,18169342,-1293352075,18234878,-1159134347,33635837,300483445,33766909,166265717,-2085032963,-443874579,-900899553,-1957363702,283935724,-1929087233,1343682630,450202,272531712,1962970624,374802,118856272,1347551232,16777114,-1593578752,1183384852,1958743026,-6664092,-956301057,62534,16139975,74907392,385107597,-26032,1996423168,-193528058,-1695123713,65535,-16353537,1100673654,-1996488700,1996484678,-129594106,1996443670,97426162,1996423168,-260636922,16777114,272531712,1962970624,-227082488,79770,1575324416,-326412861,1445391491,1457795,-385649664,1889600096,535809,770459273,104529928,75367646,149712515,-1996156255,137225286,1678129920,-2096857599,-955718546,126534,-1560280648,212009560,73179397,2128889401,369492762,-1952888828,-150727154,1476788729,73179394,33159065,-1962603514,103541830,1183384798,2126515166,244029708,-506396062,1174534647,-465138706,370051993,-1980107004,1721884742,1476802817,-1560052222,1721827928,201734401,-1560052219,1183515916,-297387552,1183516030,-1962677266,1183440966,23503330]},{"sector":8,"data":[2145535545,-498693373,-1545451895,922682386,-107347562,-1996488698,1451874886,305564636,379670020,-1947273468,721705998,-129070648,-150838623,65065454,-1996203514,413268550,302383872,-1952888828,-150903282,-61437447,-150981448,-632945686,-1982048629,1451878470,-431568918,-941031424,-263811840,1996443670,-126418950,66733707,1342496262,66602635,1342268422,423322,108461824,384845453,1479999312,-26108,1183645696,-1202710800,1347485695,16777114,108461824,384845453,-801702064,109484545,1996423168,112646,120101456,1996423168,-96040186,1688293440,-1037330174,1174665425,-1957674760,1452009542,722410,1183535186,722408,1671057490,1342177287,485786,40018176,1177149649,68592122,-2080881151,-13309842,2122579022,427622652,1208051361,-1191426423,1861681204,-632945668,-1982048629,1451878470,-431554582,956568225,58582598,-1946210583,50617398,-1929276874,1343680582,73021183,1342260365,50616993,1342496262,1342325901,437402,108461824,384845453,1815543632,113089026,915079168,906167388,1183646098,-11528464,-1929094602,-1588591804,100861018,-1924135714,-1706032060,735,-1928956161,1343680582,40646399,16777114,-1774780672,126327297,-1956773888,1438866917,-326898549,74907410,385238669,-26032,1183514624,-1845099524,-1952888831,-150892018,-230258183,26621695,16777114,-297367296,-1192208759,787939380,1174471264,108462062,1342179512,16777114]},{"sector":9,"data":[-1706012160,450,-1207535873,-1706033151,65535,16664263,-196688128,1122697216,66340491,990011398,2097243654,108461885,39991039,-1946257665,1452011078,722416,1183535186,722414,-6664110,1342177535,16777114,26386688,-2080487935,-13308346,1183577158,-196724238,922728060,-6684266,-1711275777,65535,39585339,413219701,1611016960,-1842415870,-28931839,385238669,1354771280,-1191282945,787939370,-1957690782,100924998,-1706032750,2156,-1928956161,1343682118,191642,1575324416,-326412861,1444736131,26621695,338842,-465139456,-1947838839,1308776502,-150727007,1544457198,-1983370492,1654779982,-772868350,1510343648,-62486268,50337953,1208113158,1712229273,-1980107007,884537942,65730304,1452008518,-330921498,-1157495,-1711121354,686,199771785,-385649216,1187446988,-385875734,1183645869,-1957685518,1346436166,1089488523,-62485680,81659395,1183535176,-1845099536,-1706016767,1437,-1914145025,1343681094,30422783,276122,-394854656,1342177720,383642,-394854656,1090274955,40149328,-775804007,-263846920,1183535168,-296317972,1375734533,-330921136,1375734533,101161552,-1706033152,1549,-788372831,-62510624,17045153,1854140486,1325348076,-92371974,-1592165120,-1991769754,884537926,-93391104,-1947974141,1183442518,-296318484,-1578481921,1178141272,-385647126,922746696,1996423772,49847016,922681344,-962985578,1577058310]},{"sector":10,"data":[-1017256565,-2081649835,-1957297428,1889732166,138840833,721752739,755065862,1554186248,26386692,-775804007,972065784,2080660534,73179395,-956015453,134502918,-1845099776,263425,-2080487799,159806,922690676,163054192,1996443648,2668798,39988983,196628544,-1842415872,-1070903295,-26032,-1956773888,1438866917,-327029621,1448542490,503584952,-26032,-2037841920,-1072955530,305995892,-385649664,1996425576,26785796,-1070903266,817385552,496652288,-385875956,1183517008,7552262,-722926731,-385647100,1697450210,867584,904463222,-1816132855,-1599602898,636946,153938000,-2097072151,7742,434701172,1354771209,-2095122712,-1073020220,166265717,-1237909751,179935747,113639424,-973077712,198662,-1206941464,-1706032034,3217,-16595837,-1711182282,3229,-16595837,-1207855562,1385758772,178256,-26032,113704960,65894,1574599,113704960,608,-401401368,922685219,-510000746,-1996488697,-1979783546,-989927274,-1946229090,64798459,-234874183,-1774780507,152279553,1048641536,9306128,922684021,-1008205800,46433046,721712895,-1202696000,-1706033151,65535,26228479,802202,302434048,-2130706432,-1929375682,-385649664,-1070921652,182164048,922681344,-1885732240,-385875966,-1070921672,504752208,184730755,-385649216,28837928,669536256,46433032,-9664887,594853899,-401698736,-998040267,1975520002,406257418,393472000]},{"sector":11,"data":[-16595837,-1694536522,2995,-16256023,-402646986,-998041763,132573442,-384023320,28837856,216748032,1064577,192217229,23475967,16777114,-1696863488,65535,-2146975767,208958,-2033776268,53542766,-1207906839,-397410302,-998045778,1820756226,1975520255,127592707,1183666206,-1202710912,-1706032896,65535,-9402743,-1987557747,-2080412026,16740542,347608948,244338688,-2096265752,-1224801596,882573164,-352321524,1820756914,726671103,-6664000,-1996488449,1040149126,1602158591,-26032,922681344,330826094,-2037559296,1343684330,1342210232,28314,1820756736,-1706025217,65535,-18184563,-2037690346,1344208748,16777114,1547108096,-360280830,-1202710786,1344144608,1342252216,16777114,474368,922716276,-6684068,-16776961,-1694536522,65535,62273279,840602,272531712,1962970368,1882652442,67155970,1354771280,-895856560,-1996488692,-1979747706,-2113964906,-1912598466,-15830016,-402646986,-998042382,1958742786,1857486677,-25857,-998047744,1958742786,220456987,1342463672,55450,46433024,24000255,16777114,46433024,1064577,578093197,1586943,-2095720216,922682052,28836464,-1070903292,1958149968,1924595711,-25857,922681344,-6684272,-385875713,278988352,105265408,904463221,108953862,292880526,1586943,-2095812120,-1073020220,501812597,406257414,361228288,-1962752893,279119430,74907392,1962970685,-339727612]},{"sector":12,"data":[112643,1354771280,-1650831280,-16777216,-2130546634,9307774,-1070922635,28836843,-6664192,-16776961,-1207799754,-2125463541,9242238,28837237,721611520,-1070903104,26890320,-2130706418,9307774,922703733,-2037579172,1343684472,1014426,2122746624,244029951,-101252718,-9402743,108380171,-9402681,915079169,-1238695578,1049362288,-2037710824,-1723269264,-120470997,-29624277,-947190659,-963968277,184705187,-955875904,155654,264300544,-1912177023,-1593477888,65733212,1342337185,974234,74907392,1347469355,1342177720,946330,87222528,1064577,57933965,-16439319,-1207799754,726664215,1347440832,808858,85125376,1064577,343212174,1586943,-2095811352,922682052,1139277848,46433043,1342178232,-2096826904,-2037841212,-1072955540,-504822923,65517572,-2037690338,1344208748,1005210,406257408,296937472,-1878866813,301787150,-402646877,113708834,65554,721712895,-1202696000,-1706033151,2736,-2080594711,329790,922685300,1369048328,-956301308,329734,406257408,335013888,-16595837,-385716170,1996488506,-26106,-2048327680,-25860,1776877568,1351940,1963345465,73328899,1963359875,922685045,-711327344,-1560281074,166396258,23213823,661146,1354771200,1041050,105286400,-385870685,96009196,803753984,46433028,-9664887,58048523,-16507927,-1207855562,787939380,872743270,1347590400,1342177976,675482]},{"sector":13,"data":[1975520000,68728849,314069022,-6664192,-385875713,1048706029,9306128,922685812,669515800,46433042,58048523,-386149143,-407369149,-1957683709,520055942,-26032,243269632,-1878850586,284223502,-2130700125,-1912598466,-11045632,-1929225162,385841286,63543888,-2037710848,-1952841858,-150892018,1887865337,1975520255,1887880966,-1962933761,721511990,-1946193738,-1962928066,1224700038,-775804007,1006119928,-1962639874,-1962742841,39887814,108904459,39847623,-1209532416,272531725,1962970624,406257421,294447104,-385694589,-1070858618,267098704,922681344,-761658768,-385875958,1048706674,9306128,922686581,-1964507112,46433042,1586943,-2096014872,922682052,-1070923410,-360280752,-1202710786,-1706033024,3049,-18184563,1891127318,-1706025472,4160,-18184563,-407351274,-1706025469,4176,-18184563,1924681750,-1706025472,3077,39597823,-18184563,-524791786,-1202708988,-1706032863,2499,1946157373,44493059,84426371,-15764480,-1710946250,3715,84412103,1048772608,2113995110,406257492,258664448,-1593654141,104399206,326434840,1064577,74776717,82559019,1208051361,-402646877,1048644806,9240592,922684021,-1024983016,46433041,26621695,-150981448,-1727961554,45633618,1100632064,-352321519,145090621,26621695,683930,-427390720,-392787458,-425802498,-1090810882,448332764,-5901824,-1711172042,2702,1064577,175440014]},{"sector":14,"data":[1586943,-2096085528,113705668,65554,-218391,-1207855562,787939380,872743270,1347590400,1342177976,988570,1975520000,68728849,314069022,664424448,-385875953,1048641984,9306128,922685812,-68681704,46433039,58048523,-16668695,-402646986,-998043375,-435257342,244318979,-1559310872,1048641560,9306128,-397386123,-998043698,1547108098,2022083842,-1706027265,3441,-8485237,-1844540519,-1980107007,201289862,-955877952,33517702,1714850560,1890986753,406752255,1887865600,731465983,737726914,2113813496,-339244284,-1547269374,-1073020320,113706621,608,-16019992,-1070922634,28856400,-509980672,-956301299,16781830,17754368,1064577,343212174,1586943,-2096074520,922682052,1072168984,46433039,1342180280,-2097090072,-2037841212,-1072955540,-571931787,-6664192,-385875713,129562834,-739749888,46433024,-9664887,58048523,1342226409,16777114,-122361600,50871936,-1710722048,4761,-1207916567,-397410296,-998047578,1820756226,1975520255,9627907,503515320,1820756816,-1706025217,3653,16777114,-126097152,182585847,191564635,188746554,320473908,320475930,242683400,245239454,1962965821,-26744573,1949113983,408832,-1073525641,-1476448621,246485718,233311921,320475930,267521770,1946190909,1024622474,57999484,1040128489,57999491,-335590423,8731933,1609106293,9256447,-1908600708,-385646848,-1220675128,-385649374]},{"sector":15,"data":[1600059091,-1017256565,-2081649835,1183515884,40542980,1946157373,146717,104677492,1024685056,1064566793,1946159933,40280387,40375947,379652075,404130565,-62486267,-108919,-1962840522,1385759814,1547108176,-25755902,-1694730497,65535,1990269931,2014743298,-1579750654,378208714,-840236596,-1962773855,-352160746,1575324612,-326412861,-16061309,-1711121354,65535,1358841481,1342213560,1050169,146277749,721611520,-711307072,-16777197,-1900478858,104419328,91553808,-352319304,1354771202,1306522,-25755904,1342207160,1312313,146277749,721611520,161108160,-16777196,1975058038,104419328,91553812,-352319304,1354771202,16777114,272531712,1946193152,22014211,1326723,-14584460,-1207799754,726664214,1347440832,1384090,1958873856,-25755893,1342207672,183222315,-1191282945,-1202716554,-1706033151,5279,33310407,1547108096,-26110,-1073020928,1187459700,-16776966,-6620554,-1996488449,-1072956858,1048779124,1970602004,178181,28836843,-96060672,1187503477,-1711275780,65535,-1191282945,-11534221,-1365574538,-16777196,1958280822,-1070903296,347970128,1996423168,7715070,1354771280,1363098,-25755904,1342206136,-1705983957,5339,-1191282945,726663300,-358985536,-16777196,-2051473802,-1070903296,352688720,1996423168,6928638,1983808336,74711040,65781803,1342177720,1390746,339641088,896889856,40908543,1342439608]},{"sector":16,"data":[1347469355,224107088,1183383552,-128546314,544591931,-1191282945,-1202716559,-1706033151,5463,-1191282945,-1192689550,138314496,-529268731,-1191282945,726663281,1939493056,-16777195,1924726390,-1070903296,-16737559,1991835254,28856320,-2087038976,-16777195,1958280822,28856320,-1818603520,-16777195,1975058038,28856320,-1550168064,-16777195,1891171958,28856320,-1281732608,-16777195,1907949174,28856320,-1013297152,-16777195,1924726390,28856320,-744861696,-16777195,1941503606,28856320,-476426240,-16777195,-2068251018,28856320,-207990784,-16777195,-2051473802,28856320,60444672,-16777194,1773731446,28856320,-6664192,-1962934017,1438866917,113765515,65558,40908543,-16353537,-6683530,-1962934017,1438866917,-326898549,272531744,1962970368,209125235,-401967361,-998047231,-532248316,17202817,1027110146,58720255,-1593752599,1178140696,-385649184,1996423480,375008,1547108176,75229186,-16333693,79224950,922701824,1793589852,113541892,-1593764887,1178140696,-1915521568,1343677510,-1202667477,1347420674,1342177720,16777114,1958742784,14805478,-1727248757,26349195,100923895,1183384160,108954080,192152065,956307617,58056774,-1593795351,1178141030,-385647392,413204672,1611016960,-1842415870,-28931839,-1710983425,2100,-1914550647,1343682118,-11485141,716766838,1647245056,1183535106,-1845099522,1234849793,-16777193,1183703670,-1706027274]},{"sector":17,"data":[5974,-1545582965,103481368,787939936,1183383954,-163148290,-1070903274,-25755824,-150984008,1342333486,66995851,1342280198,508058,-495517952,385238669,130914896,1996423168,-495517948,1572506,-1590695168,1178141030,-1926791712,1343677510,-1202667477,1347420674,1342177720,1482138,1958742784,7321830,74907472,-2081293080,-443874108,1478411101,-1957345904,-661774612,-2129728381,-1912598466,-1956285184,103482950,787939936,1183383954,1547108348,384342530,1183383552,-196702734,-1070903274,-59310256,-150984008,1342333486,66864779,1342280198,1614746,-227082496,385107597,387488336,922681344,1996423772,151689970,1183514624,1614600,224389200,-1207778173,585826305,-1207404801,-11534331,-402498506,-998047035,142016262,1342178488,39597823,-2096974616,-310180156,535137026,1439386973,-326898549,915101200,-1588722670,-285801450,73141899,1317652523,40018418,-523112713,73008643,-1577171319,100859928,-1723333614,23465611,1451882999,-263796740,-1662451712,-196702976,1183535126,-1957674754,1346433606,66995851,1208278534,-230257840,26347011,-543535040,-1929379816,1343681606,-16353537,-275118986,184549400,-1925417536,1343681606,-1946663285,-788372978,1086401505,1996443712,-126418954,66471563,1208050694,194662472,-1929379817,1343681606,-16353537,-6683530,184549631,-1962576704,803994694,-788372831,-28956192,17045153,1325396550,-58817540,-1593344768,-1991769754]}],[{"sector":1,"data":[1191181382,68329968,2112898617,-10884861,1593835448,-1017256565,1167087646,518818645,-327034738,2122514562,309662214,-8485235,-1732751338,-1706025471,6635,922687211,1996423534,2122747142,-1202710785,-1706033024,4128,39597823,-8485235,-524791786,-1202708988,-1706033104,4200,-1962742397,1297948645,-326412853,65472198,134661888,-1207959547,1344143480,-2080610072,113640644,-1962867738,1438866917,-326898549,-666464984,-401698736,-998047723,1547108098,-666465022,530206742,-1962934250,516120037,1430622296,-1910575989,149717976,503727755,9746512,-1801826274,-1962934254,1344144966,503347640,441555536,1048576000,1946157872,-129579199,1187447600,-352112390,-129564925,-2131206517,-176881601,1586170859,1547665656,1325337460,-96039944,2012759609,-128021523,1968979840,-129564925,503727755,-129594544,1183516907,-1202708986,1344143730,1061018,49120000,1562371467,1478413133,-1957345904,-661774612,-16192381,-1711121354,5024,-1191426423,1344143518,503359160,8239184,1183666206,-1202710792,-1706033150,65535,578142219,7734983,1996423168,6928636,112720,449550928,1996423168,6994172,112720,113712875,65654,-1191414017,726663273,-627420992,-16777190,1790508150,-1070903296,340564560,-310181888,535137026,1439386973,-326898549,1614096,-940423543,130630,23477891,-1207534334,-2115436543,-2143386879,108331008,-1560274783,113705734,65664]},{"sector":2,"data":[1023821451,1115095048,781434883,470198271,1576703,1588867,-385647616,1721827554,413353985,14215424,1574655,956393121,1946163206,13166851,1574599,-1075249152,23503104,84674105,1183516277,18803198,688196769,-2097145850,6206,-1612119172,23503104,1574401,-1593797143,104399206,-697039604,17108129,-1593829370,104399206,2088501272,1574441,111245035,403060995,1344435200,-2096777752,-1073020220,922684532,-823656424,46433030,111217643,1614595,16664263,74907392,-11485141,-1207953354,-1706033151,7292,40908543,1347469355,1342177720,1179546,2114373376,-956301312,32774,-10295040,-385333621,455671604,458824512,463608707,459414528,463608674,956307617,58061382,-2080423959,32318,922697077,-1030094224,-1996488681,922742854,1183646320,-1706027274,7328,-1913620737,1343682118,30422783,556442,1882652416,-260636926,1532314,2114373376,-2097151744,1946486398,74907411,-11485141,-1207953354,-1706033151,7458,-370453784,-443810084,-1957313699,283935724,39887190,-113015,1183646838,-1706027276,7576,-1711651189,26349195,1183447543,-263796740,1183514624,1958742790,81179,37565812,1027044352,1014235139,1946158141,343365,99301236,-1030457,-263812097,39847425,23475851,972846635,2114084918,1614186807,-952177918,127046,1183571947,-1982269444,-705957818,-335788405,138841078,39847467,1996484075]},{"sector":3,"data":[112644,142016336,492214864,1407909888,39861891,-955876096,155654,-28931328,39847467,200296073,-2093452096,1946486398,74907409,1342177720,39859967,505059920,1996423168,1354771204,-135248245,1342280238,1347469355,-6664112,-16776961,731513974,1577058316,-1017256565,-2081649835,1048644844,9306128,922696565,1183646300,-1706027274,4516,-1711520117,26349195,1183447543,1711684606,-955810815,62534,2122521323,91554046,33441479,23503104,-335657429,23503108,-196703928,39597823,1064577,91553934,-352321096,1354771202,-11485141,-1705970570,3363,39597823,1064577,91553934,-352321096,1354771202,1064577,91553934,-352165727,1614083,112720,-26032,-443875328,1478411101,-1957345904,-661774612,-1960645501,255659078,1985901568,12577027,1962936125,10152195,1962936381,10545411,-2097100311,1962939454,-1075248268,142016256,-16353537,1996425846,242679564,16777114,180650752,-375799765,1996423359,92530698,1996424939,83879946,184730755,-2082114112,1946162238,-2081825163,373195520,-730529792,-1928431873,1343675974,123290,272039680,238485253,1882652421,209125122,735999743,-1706012480,7985,-1864468737,7661582,-16595837,1183649398,-1706027298,535,1048810219,1953759252,-26061,-2064973824,1326723,-1708821388,65535,1040152041,57999616,1040153577,57999618,1040149481,141689344,1996620349,-13113085]},{"sector":4,"data":[84948735,84817663,40908543,-15960321,1996425846,108461832,16777114,49120000,1562371467,707149,1167087646,518818645,-326903666,272531732,1962970624,10610947,494746,-62486272,84426371,-1586203648,1178141296,721974780,-677752640,-16777185,-6683018,-1996488449,-1072957370,-11516044,-1710946250,8129,-375159,922682998,922682626,922682628,922682622,1996424448,1354771448,13023312,1375766714,-26032,1996423168,-92864520,271258,-126419200,16777114,40935680,1979467321,-778416122,-2097151987,1962939454,1889605493,-62506750,2058882933,1996443650,-26106,-998047744,49120004,1562371467,-1957311667,82609132,1712258902,-1774780671,543726081,1183383552,-27883012,-150981448,-259324818,721512097,884540486,1357510400,-1912840508,1342583872,-1030962293,1347601923,-2096693272,922684100,865730966,1577058337,-1017256565,1167087646,518818645,-326903666,-11118830,-1711172042,8631,-1980873079,1183445078,-162100748,15877831,-948704512,65534022,-1946925429,184940118,-96040704,-1946397047,1065416798,-1004309504,-1977157026,-397371385,-998047581,-128021758,126535819,-242528104,-2097114392,-969211196,1589912948,126494458,-2132258664,46433024,-1946657141,-1744336184,-386823344,-998047633,2143697666,-15209718,1191180358,-2086081542,-13306810,1721889350,-230278911,1721861500,-230278911,1177231220,3455474,-11474441,1996486262,-196703244,66475659]},{"sector":5,"data":[-397389119,-998046147,-195116022,-591463541,1751299,922723826,211419542,-16777199,-1962842618,1600057926,-1962742397,1297948645,-326412853,1627684480,2122320508,75463172,537161344,-1744550262,-1017256565,-2081649835,1448545004,65406710,-15108861,-1207799754,726664200,1347440832,2228122,1975651072,14739715,1342194360,-1727937608,-6664110,-1996488449,-1072956858,431493493,244338688,-2080930328,-1070923068,-16723223,-308610442,-1996488688,1451883590,1882652670,-1202695678,-1706032701,65535,-100609,-21431178,-591900668,-6664189,-2097151745,-1073018684,116835444,1963066342,1882652438,67680258,1354771280,765087824,184549396,-955878206,16781830,1882652416,67745794,1354771280,-2120593328,-973078495,255494,65406662,-435257344,922682371,-1113980522,-1996488670,1451882054,3455224,17067767,1589966406,-1090810890,448332764,-5901824,-1711172042,8800,-1694861569,8939,-1694861569,9015,84426371,-15764480,-1710946250,4224,84412103,28835840,-1956684288,1438866917,-326898549,-1202301174,-1202716606,1385759171,563583568,1183383552,1975520250,2144271,-401698736,-997984642,12970242,26621695,2290586,-163149568,-1191684471,1861681204,-163184380,-1946794357,-591398826,519080707,-628220409,-234874183,922689445,798622102,-16777181,312146550,-1996488672,1451883590,-1202695426,-1202715394,-1706032164,65535,185123971,-1207142976,-1873805284]},{"sector":6,"data":[-166402034,-16595837,1996488310,-219944708,-16464765,1268447862,-16777184,-6620554,-2097151745,329790,2058886772,-11526654,-16448970,-1593506762,100861186,-1588591362,100861188,401278208,503478968,374864,1654739024,328962,26386768,1342178565,1566106,-1956684288,1438866917,1183575179,2174212,1996490557,-1816132791,-341311698,1354771235,-352320072,23503121,737471304,116084928,-1202667477,-11534335,-402498506,-997984467,1354771206,1342179512,39597823,-2080957208,28837572,-2094470400,1946162238,-1070922635,1996430827,-26108,-998047744,-1478235390,-1591497693,-752641757,-752626909,-1960586461,1438866917,-326898549,1161248,-26032,-1073020928,28837245,721611520,-330921536,108314635,537165443,-1070922372,-2097070871,-12581818,-1711172042,8755,-1981659511,413262934,1183399936,3455208,65564407,1452008006,-96040476,-939764087,59974,956393121,712895046,1978156601,-398014703,1183514624,-464090142,-1980086647,1589967958,1200236282,-397371381,-997983037,71711490,922694005,1486487958,-1593835486,1178141030,-385647382,1048641730,9306128,922691444,-1276641256,46433276,-387418369,-997982767,-10228990,1183574598,-61436934,888817283,-337099009,1614219,39847467,26357495,-1912715639,1343681094,-11485141,716766838,1647245056,1183535106,-1845099522,-1298509823,-16777179,-1711121354,9659,1357268617,384976525,633969232,922681344]},{"sector":7,"data":[1996423772,634755814,1183514624,1614824,1064577,712310925,39597823,-11485141,-1207953354,-1706033151,9759,-1929496,721580086,-1202696000,-1706033151,7149,922684139,182976536,46433024,-1962933832,1438866917,-326898549,1547108112,-196702974,1536839702,-1962934234,-1952843194,-150892018,-62486023,721700491,-150839290,-28931607,385107597,1354771280,-1191282945,787939370,-1957690782,-1056702906,654940752,922681344,295305820,-1996488665,-1924075450,1343681606,2563994,1547108096,-260636926,2566810,39887104,2080654905,-62485747,39847427,71711560,1621187197,71710978,1183517053,1611016964,-1962153214,1177224262,1611017212,1183399938,1611006450,1547108098,112642,1614217040,-593866750,-16777189,721574966,1183535296,-136775694,1342280238,1347469355,1872384080,-16777187,-1711121354,7543,-1017256565,-2081649835,1996427500,-230257404,1083854870,-1962934244,-1952843706,-150892018,-62486023,1023821451,863240225,1946165821,2309401,607993204,1026651136,947126310,1946167357,-373281992,1183514796,403047420,-96040704,956393121,679279174,-1591547064,1177223192,-96040452,410894347,16402119,-1592661248,-454360730,-352315231,1614303,-96040640,16416387,1721854332,-96061183,413229437,-96061184,103504244,787939936,1183383954,-230257154,-1070903274,-25755824,-150984008,1342333486,66995851,1342280198,2324890,74907392,1847194,-263812864]},{"sector":8,"data":[-230257328,-224767978,-16777193,1996424310,475896560,1183514624,1614842,-30152624,-1207778173,-443875327,-1957313699,509040364,75416828,-1962379579,-1527641010,-1956749537,1438866917,1465314443,2126839070,142001412,51138187,1324942321,-56298929,-1956749537,1438866917,-327029621,1048772740,1946157086,11528451,1342179000,-2081714712,1183384260,1975520252,10217731,-2037559266,1343684476,1342243000,2646682,-28931840,376750091,1342182584,1877479056,46433265,-1694730497,10286,922709483,932840374,-2130706392,-1912598466,-15830016,-402646986,-997983874,1958742786,-59310275,16777114,46433024,779403275,413384747,39887616,-2114618904,-1929375682,-16091904,-402646986,-997983627,1547108098,1354771202,112720,685742672,1996423168,679320316,922681344,-1969618544,-1962934232,516120037,1430622296,-1910575989,-2031320616,-62470400,1183514624,-1924129274,385841798,16824400,708614736,1183383552,1958743034,1357848,-401698736,-997986118,108461826,2778010,-339727616,-1237909649,686660099,1996423168,-26106,-998047744,1958742786,-250615733,1342463672,666778,46433024,24000255,669850,46433024,413384747,39887616,-737816,-402646986,-997983807,-435763710,922681347,-1070923172,28856400,1419399168,-956301275,130118,26228479,968602,-62485760,-1962742397,1297948645,-326412853,17755265,1195651,-165645056,33809926,922687861,146276976]},{"sector":9,"data":[-1070903292,-1706012592,8731,58049035,-16653335,-1207865802,-1924136958,385806982,8435792,714709584,1048576000,1962935088,8448259,-9140537,82510640,-9140481,-9134453,1962950528,-1962021901,-2130742114,208952383,-9138433,-9126271,-344521936,-9134453,1968979840,1955004164,-226062849,2089191934,-16454657,-1946190714,-2130740066,-210436033,-1635050261,-2030043276,126549876,-1662496616,46433271,-8610165,-8616193,-1635055736,1065418612,-1948551936,-956334946,283836423,-17660275,1924681750,-1706025471,10933,39597823,-17660275,-1195880426,-1202708989,-1706033117,10957,-8485239,1946158653,17295619,1586943,-2080940568,-1073020220,-622263435,809402368,57933827,-1207905047,-397410302,-997988098,1988528386,1975520255,11659523,1183666206,-1202710912,-1706032896,2956,-8747383,-1987557747,-2080409466,16743102,347608948,244338688,-2081499672,-1224801596,-610599050,-352321494,1988529074,726671103,-1013296960,-1996488693,1040151174,1451163647,198351440,922681344,330826094,-2037559296,1343684338,1342210232,2835354,1988528896,-1706025217,3060,-17660275,-2037690346,1344208758,1702554,1547108096,-226063102,-1202710786,1344144608,1342252216,1671322,474368,-1224767372,547028854,-352321525,406257428,-140253184,721601667,-952570944,822048902,2025258755,209623807,-998047744,1975520002,-2082149601,50298558,1048829300,1946158344,137821967]},{"sector":10,"data":[578329093,113704960,1288,-1962933832,1438866917,-327029621,922681472,1996423534,-2142860028,-2135404522,1754943488,-16777191,-1929225162,1343651910,503727755,2209872,703634000,20774912,-1207601920,48955393,-443826133,6013789,681902083,655615,604635395,6946819,58130691,7012355,394330371,7143427,682688515,917759,689963267,7274499,721027075,983295,190054403,1048831,189595651,1114367,246022147,1179903,245497859,1245439,309067779,1310975,308084739,1376511,306118659,1442047,667418883,458753,568262659,1507583,535953411,1573119,28705027,65538,519307267,1638655,143196419,131074,515899651,7995395,518389763,1704191,510197763,1769727,641990915,8126467,587726851,1835263,673579267,8192003,602013699,1900799,580780291,983041,283050243,1048577,119275779,589826,727318787,65539,577241347,1114113,607387907,1179649,613613827,1245185,680656899,2425087,22085891,393219,670105603,2490623,341442819,8978435,344981763,9043971,68681987,9699330,66257155,9830402,342556931,9437187,527630595,1441795,525926659,1507331,5767427,10027011,146538755,2162690,331022595,10092547,532021507,2228226,447348995,10158083,4325635,10223619,67764483,1835011,443547907,10289155,19464451,3145729]},{"sector":11,"data":[628818179,2162691,567017731,2359299,529268995,2949122,432734467,2424835,514130179,2555907,161349891,3604481,517472515,2621443,290652419,3670017,221970691,2752515,445645059,3801089,528154883,3407874,691929347,11534339,64618755,11796483,17957123,3473411,159777027,3670019,65077507,4325378,665649411,4849665,533266691,4456450,723124483,4521986,641401091,3997699,624951555,4063235,715391235,5177345,502006019,4194307,713163011,5308417,621019395,4325379,622723331,4456451,668139779,4521987,712179971,5570561,620429571,4718595,424673539,5767169,702021891,5832705,146145539,5898241,414384387,4980739,96272643,5111811,475070723,5308419,621936899,5373955,95289603,5439491,326107395,5701635,-2115204267,-1207905556,1344143518,503359160,8566864,-2037559266,1343684402,1342187704,16777114,847678720,-632911361,-1098904853,1949105966,-632881392,-1965400437,780568583,1975519999,-631338007,1946173312,-632881390,-352319546,784236554,276766975,-1948629249,126540382,-13728120,-378159094,-1982183797,300670022,-13713792,-2145946580,553594558,1191121022,-631338022,-2037905526,-1073021138,1586225781,4161754,1191123316,509658,-1098903061,2116091694,784236551,276114687,-1948629249,126540382,-13728120,-495599606,-1982183797,-335597434,784236554,276701439]},{"sector":12,"data":[-1948629249,126540382,-13728120,-378159094,-958767477,1183514631,-1924129060,385823366,814123856,726671103,-1706012480,65535,199116425,-2095090240,1946214014,-562626808,136858,2209792,55286352,-998047744,-373282046,1996423342,-532247074,-6664170,-1962934017,1174659142,30712808,-1545058677,1183515568,40805354,-1193380097,726663177,922702016,922681988,1347420802,100762,-1303999232,-26032,-998047744,-562626814,1342180024,380782221,44931664,-1924136960,1343664710,1347469355,129178,2109737728,-9180925,39716551,113704960,470,24000255,-1728050504,922701906,922681948,922681706,-6684312,-1560280833,-1073020564,1122567029,1547108351,1354771202,132506,-565802240,-1017256565,-2081649835,120382,1048785013,1962934878,74907411,1342180280,1347469355,-1706012592,734,39597823,1342177720,16777114,1815543552,-26111,1996423168,-26108,-443875328,1478411101,-1957345904,-661774612,-401150845,1183448530,1975520244,14608643,571472,38640208,1183383552,-193527824,1342180024,16777114,-364476160,-737244263,-1980107007,-1072957370,1191117685,-1774780424,62691841,1183383552,-296318484,16139975,-947983616,64070,15877831,-1589581056,1178141030,-12550666,922743926,1996423790,-330920966,99505803,1347551243,99370635,1347551243,16777114,-6664192,-1593835265,1174471124,-330923014,-163119308,-1947056385,1178204230,-4686606]},{"sector":13,"data":[28898422,-1070903296,1347440720,-26032,1183383552,2109737980,-1511501815,46433030,1048777451,1962934742,23503115,2113291833,-8918781,26621695,16777114,-193528064,-2080455192,-310181180,535137026,516640093,1430622296,-1910575989,-1091796520,-1202301184,-1202716606,1385759171,-26032,-2037841920,-1072955530,314052469,-6664192,-2097151745,-202833212,8697858,-2085072866,-1202708992,12189700,726684224,-1202696000,787939368,1346372194,-150991944,1342280238,39597823,-11485141,1342271030,-26032,1183383552,1975520194,1991704331,61905663,-1494548480,-1979949592,201293446,-15960640,-1694533962,65535,-16608791,-1694533962,65535,-1986771319,683185750,1848571648,-1556070398,196608462,-735119616,-737803519,328961,-16686941,-1191215434,-1706033147,65535,103586384,1183383552,2125922298,-25857,1183383552,1921435544,-2097151745,1963001470,1975520091,138314515,208928773,1342186680,337818,46433024,40908543,1342504632,1342430392,-11485141,-1224763274,317259646,214205186,-8472833,1342177720,1347469355,-1706012592,1514,201082505,-385647424,-397409880,-998046420,27191554,-8472833,1342179512,296602,1954973952,2125922303,702719,37657168,-2037841920,-1952841876,50421774,-150875122,-1840870919,58048523,-946714881,36934,-956214039,50246,-8747321,367591424,105286401,2089829945,18278659,956307617,1685360710,26621695]},{"sector":14,"data":[158362,1854310656,1888913919,3455231,26242807,-1946194298,-1946194298,-1912639338,-259275138,-1910634730,1751514,-14703118,-1711172042,1559,-6916353,1183683702,1183666306,-6663994,-2097151745,-1073018684,297286005,-2053484544,-2097151995,736821956,-1094287731,118883292,-234874183,-2105635419,-1190854978,-1510866937,40908543,-6916353,-1011313546,-6664191,-16776961,1996472950,-1804140650,16777114,-1736539392,-2095221504,1946193022,1925088023,276103423,-9271553,1342186680,481434,46433024,-1916635393,-1924103610,-11483578,1996473462,2125922200,11528447,-1592998781,1178140696,-2096204656,1946193022,-1938358520,16777114,23109888,30672387,-3914239,-2030071738,1183580026,2055616914,-385647105,-1224737057,28901246,-1070903296,1347440720,22911568,1183383552,2109737980,-26547965,30817923,-1962183424,1178142278,-385647216,1996488353,34511554,-1224802304,161152886,-16777213,-1694533962,922,-8472833,-1694861569,1764,-8472833,-2080661016,2122515140,141820056,-1701284097,273,-310157474,535137026,1439386973,-326898549,1996445248,112644,-26032,1996423168,112644,61907280,-775804007,138806264,1183535168,722186,1183535134,722186,2056933406,1342177281,177050,207522560,688003,-722926731,108954368,-385649408,1996423371,-26108,1183383552,74907624,1342177720,50873995,84005894,-1588592636,1346896334,50873995]},{"sector":15,"data":[1208049670,-26032,1996423168,207522566,-1710589953,1894,-1946270071,931859550,-1962641665,787940423,-1952906642,-150838770,1200312569,-735119610,244029697,-101252718,50873859,84005894,-1588592636,-285801874,1645120409,1358558978,-150845557,-1727933394,26349195,-11470345,-1070922122,-11120560,548930167,13416960,-6664110,184549631,-1207142976,-1706033135,282,-16595837,1996424822,-25858,1996423168,-394854652,16777114,61907200,-775804007,138806264,30672387,-1996487675,1996487750,67811342,1354771280,-1113960368,-1996488697,1187510854,-352321302,-1069103553,-1052326360,242679552,1342444728,-1914013953,1343668294,16777114,-330921728,-1207666945,-11534335,1183710326,-11528512,-1852117898,-1593835514,1174471124,-364445700,972703371,-1182995898,721712895,1996443840,-835256568,138840833,23070211,136354384,1988820992,-734657784,74907393,-1924087765,-11534012,-1929261514,-1706032572,2110,50886283,-16657354,-1070922634,54824272,-835256496,71601409,-26032,-1956773888,516120037,1430622296,-1910575989,351044568,1183663339,726669036,1347440832,1342177720,16777114,1958742784,1816036148,309592065,23869183,384583309,-26032,-1073020928,1183650933,-1706027284,65535,384583309,-26032,1048772608,1946157526,-700546123,91553793,-352321096,-2084558078,-443874579,-900899553,1478361092,-1957345904,-661774612,-1962349437,272436294,1027044353]},{"sector":16,"data":[192151825,1963005501,9824515,-956258583,16897542,1547108096,112642,30251600,1996423168,101620238,113704960,364,-385875528,1996423297,1354771214,16777114,70165248,53493376,-1204063232,1344144176,428954,53413120,-335919479,-94467309,1183319946,1952201976,1949973518,-95486198,821722753,-1674493,1996487238,309262,-96040112,1996425963,309262,24295504,-6664162,-16776961,-6680970,-352321281,775356303,-262096892,112720,-26032,2078867456,-2084557825,-443874579,-900899553,-1957363702,1577502700,-150994686,1073742918,1183526772,-312060,-63105932,1025340671,92078077,2130705981,2209816,649593835,563761152,-2097151996,99287748,-352311368,1575324656,-1873273149,-326412987,-2082959842,1048779500,1970536468,1882652448,108954370,-1207601807,65733376,1342374328,1347469355,185965136,-504823808,138314496,57999365,-16721943,-1711121354,2868,58048523,-1711224855,65535,-1996158815,2122576966,1031107078,964688,-431583920,1570394134,-1929379829,-11475386,-402323402,-998047237,84452100,2071314443,-1544272245,314049800,630870016,-2097151989,1187447492,-352321292,-163148446,922701846,922682626,-23001852,33948420,77680645,393989,-1600499707,-1929379829,1343682118,1342177720,-26032,922681344,1183646320,-1202710794,-1706033151,2994,84412103,243269632,-1593703450,100860540,-2136800878,41591042,39978499]},{"sector":17,"data":[-2096988509,1946219646,178188,-193527984,16777114,205298176,-310181888,535137026,516640093,1430622296,-1910575989,451707864,1326723,-14125708,-1207799754,726663938,1347440832,497562,1958873856,18934019,1342182840,799898,46433024,-16707095,-1711121354,65535,58048523,-1207893527,-1706033150,65535,200558217,-385649216,-1202716451,-1924136946,1343678022,16777114,-431584000,-193527984,-2097094936,1183384772,1975520244,1226758,-2097104919,329790,1183661428,-11528458,-16448970,-1593506762,100861182,-1588591358,100861188,-1706031872,3090,40908543,385238669,112720,203725392,922681344,-90569464,-1962934260,-22812602,-364475644,-150667101,111406190,41591045,-1593507165,77791868,-196703483,721750179,-258322240,-16777205,-1711116234,2411,385238669,37158736,70713093,83796229,84018691,84189520,83887619,-26032,922681344,1183646320,-1202710794,-1706033151,65535,65408640,-1207112958,-1706033118,2499,-1711094653,65535,-1962742397,1297948645,-326412853,-955716477,64582,16402119,-28915968,922681344,-6684068,-1996488449,-1705969594,3191,-375159,-23398282,-1996488701,922746438,1996423772,-25864,2122514432,1936982266,16678531,1996451188,74907642,837786,1958742784,106859358,-16615425,28836983,726683648,-1706012480,65535,201082505,-12553024,-1705968010,1010,645185547]}],[{"sector":1,"data":[738096895,-1957670720,2013202014,74972930,1358591743,2144336,1375784122,-26032,-1073020928,1996426613,218995452,1187446784,-2097151748,1946221182,-92864760,859034,-25263360,-16223232,-1181024650,-1962934267,-443810746,1478411101,-1957345904,-661774612,1443949699,1023952523,57999872,1023473641,141820417,1946288701,31189337,503478968,242679632,-1710459137,65535,58048523,-16661271,-6683018,-16776961,1183647350,-1706027274,65535,737822347,-1560124922,1183515570,-1845089284,62169857,68421319,1183514625,240552716,-1996236637,-385623530,1048772997,1962935316,24897795,16777114,84189440,41682489,44108149,2047228165,-1923189758,1343682118,84031231,84162303,50660001,1342504454,50660513,1342504966,1014170,41591040,-1593507165,77791868,1882652421,-163148542,28856342,295325696,-16777202,-1207799754,1344143994,1342177720,700570,138314496,91488261,65408640,84058370,-1593583453,-626850556,335988483,-385875964,1048772849,1962935316,15198467,51136139,721582598,-1996236794,-1298009018,-196724477,103484030,100860538,451609560,39990923,41825835,41563651,2113173049,64528652,41551403,1183434243,239504140,41682435,64620075,-1577826679,1178141620,722108148,50494470,-352069114,-1841919206,-2143933695,2083914498,-193578750,-626979715,2080779011,-1983511806,-660533690,205928707,-626980747,239483139,922705268,-1432747408]},{"sector":2,"data":[-1996488689,2058940998,1996443650,-401698574,-998047506,41596932,1183535134,-670684404,1183535107,-637129970,-6664189,-1962934017,1451953222,64529166,64624265,1342339768,-1863158017,12118030,-16464765,-16617418,-929369482,1577058319,-1962742397,1297948645,-1873273141,-326412987,-2082959842,329790,2058886772,-11526654,-16448970,-1593506762,100861186,-1588591362,100861188,401278208,503478968,374864,1654739024,328962,26386768,1342178565,692122,2091008,-1962742397,1297948645,-1873273141,-326412987,-388461026,-310181879,535137026,1439386973,-326898549,1882652418,207854082,1183383552,41597182,-25755824,333975184,79987456,40908543,-1694599425,3206,-1017256565,1167087646,518818645,-326903666,108461834,30422783,826778,140413696,-1962653813,-129070833,1183433003,105352182,-1996337269,-1054082482,-244087,1996424822,1996444152,112886,4831312,1375754938,272865872,1586167808,105351944,-96040632,-16353537,-11470730,28898934,1236815872,5945856,1738166354,-1962934256,1200293982,-96040702,-16353537,-1202653066,-11534335,1236860022,5945856,-1936043950,-1962934256,1200293982,1183401988,108462072,-92864688,1342177720,-1191414017,1522139209,-1706012160,65535,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-1588197652,1183384186,41722362,-1946401143,624756294,1026716672,259260454,1946167101,2637104,-1070916748,-1593784599]},{"sector":3,"data":[1177092498,2603260,39988983,1983508619,-350585094,26386729,-335788543,40018408,-335919575,40018400,-335919615,1647741912,2117479170,2050360066,-92915454,1988690813,702714,26357495,1983508619,-1961787396,721523254,50495542,956464182,58588278,-1577290103,1178141306,-1593281030,1178141308,-11897604,-1207799754,1344143994,1342177720,1149338,-96040192,-1962605917,77855814,41596933,1183535134,2047224826,1183535106,2080779260,-73773054,-16777202,-1207799754,1344143994,1342177720,917402,-435257344,28836355,-310157824,535137026,1003179357,1660945152,201391882,1694565120,1828717320,33620736,1862271754,-1946090752,1895826184,-1778318592,1912603400,1644233472,33554950,385876736,469827333,1359020800,2097152785,1711276800,503381761,973144832,251658499,536937216,285212934,-788462848,301990148,67175168,318767365,402719488,-1996487926,-436141312,-1979710710,604046080,-1962933494,-520027392,-1929379062,-704576768,369099270,1140916992,-1912601845,1728119552,301990669,33620736,452985352,-1392442624,318767885,503382784,486539792,-1375665408,503316998,-419364096,369099531,-687799552,553648647,-301923584,570425868,1258357504,587203079,2113995520,-1694498039,218170112,-1677720823,1409352448,637534724,1895891712,654311943,1946223360,553648909,-301923584,570426120,1459684096,603980549,-452918528,754975247,1694565120,620757765,-1207893248,805306892]},{"sector":4,"data":[-1979645184,687866627,553714432,973078784,1812005632,872415756,-67042560,889192960,-167705856,889193224,1140916992,1140851206,-1157561600,1157628427,-822017280,1107297038,587268864,1140851471,1963000576,1342177796,-520027392,1207960333,553714432,1509949705,1057030912,1375732234,1476461312,1275069197,1996555008,1291846417,-1644100864,1308623626,-335478016,1459618307,788595456,1560281601,-1224670464,1493172993,2113995520,1509950216,1661010688,1543504649,1937009920,1167087646,518818645,-327034738,1187446930,-1962934022,272436294,1023898625,1249116433,1996450027,768014,3717200,1150963742,-16777215,196611702,364400640,-2135404540,-1070903296,-6664112,-16776961,1052249718,-1202708992,-1202716660,-1202716662,-1706016752,302,-385875528,1183515286,81162,37559668,-385649408,188547335,-385649408,205324911,-385649408,-1070923515,-16616983,28839542,-1332064256,1342177280,16777114,1975520000,13756675,-1207011585,-1706033141,426,28351056,117768192,-62486272,1342193848,-1694730497,450,200951433,-385649216,1996423331,768014,-96040112,1996443678,31496956,-2037579776,1343684466,519718539,44866128,28835840,-2037559296,-397344910,-998047227,1921420548,-1847045889,46433026,863289355,-1928431873,385839750,833616,702544,1074837584,48470608,-1073020928,1996428660,768014,1921420624,-1706027265,702,738138601,1996443840,28829946]},{"sector":5,"data":[-16464765,1172896374,46433026,192200715,-1705983957,65535,-1946225175,1344207430,16777114,242679552,-335907073,242679558,-1705983957,65535,-1946233367,20777030,1024160768,57999362,-385798423,1996488386,768014,-26032,-1706033152,65535,-1191426423,-11534272,1996487750,-25860,1183383552,1975520250,-23795453,-1207011585,-1957691381,1344207430,-1694730497,65535,-1928431873,385839750,833616,-26032,-1073020928,-1276574859,1921420544,-1706027265,529,-1947056503,1344207430,204954,-163149568,-1980086781,-661916602,1948925824,977240069,28837237,721611520,1887865280,-96039937,1995720249,-1957683645,1344205894,208282,-196704000,126539915,-9533816,74721852,108347196,-9402681,1586167809,-2012771596,1023372934,1006924892,-1950190278,1344205894,16777114,-196704000,-9388413,-1961724928,-1903300026,-1056702606,1347605132,-336312693,-230257904,-9269619,-762527485,1152929874,-1706025472,920,-1207011585,-1924136949,385839750,-26032,1996423168,-25862,-1746337792,242679805,-9271667,213405718,179851264,280514560,-6664128,184549631,-385649216,1172962721,142016510,-401705217,-998046999,-43718396,-1962742397,1297948645,1426066122,-326898549,-950642934,64070,503596683,-1706025392,65535,66471561,1344144454,230042,-1947170048,977043710,1015026036,-2146208466,1966014332,-159481075,-955812606,63558,1015036139]},{"sector":6,"data":[-955812516,129094,2122525931,74711046,65781803,-1996488008,2117728326,-2145946876,611593789,503596683,516393808,-26032,-125108224,1150149867,-1957683711,1275459654,-1706025472,65535,-443850914,-1957313699,1988843244,-2146374908,91499068,1967078528,112645,-2142893845,-344653764,-1956724693,516120037,1430622296,-1910575989,-1930657320,1183536640,17841420,289213300,-385649407,15270123,242679553,1347469355,702544,1354771280,24730,809402368,57999363,-16732183,179834486,-2037559296,1343684476,1342210232,345242,-62486272,-1165954933,1952251771,2088945168,1191140607,-59339780,-8617274,1988544256,-1207750401,-397409488,-998047420,2022082818,2089192959,1954974207,2022083583,1988508159,-1961987073,-1946192226,-1962969930,1946630148,1956547373,4161791,-2037708171,-2043019400,108265334,-9009465,1996423984,768014,1988528976,-1706025217,1663,-2037698069,1344208758,307354,1988528384,1954974719,-1706025217,1493,1996463083,112654,83270224,726663168,395989184,-1207959546,-1377239039,172395264,1946157373,146709,-2031549579,736512,-2031549579,-373282048,1996423312,112654,84712016,-1706033152,157,-948649973,-1207011585,-1706033141,1525,11967056,67436544,-62486272,1342193848,-243969,-929366922,-1996488704,201292422,-14322496,196611702,-2037690368,1344208762,-1694730497,230,-8734977,-8734977,16777114]},{"sector":7,"data":[79987456,-15829249,-1694532938,1692,-39703,-1070920074,-988336,1996425334,7071758,-385563517,-2090926259,-443874579,-900899553,-1957363702,82609132,503596683,-1706025392,516,503596547,96049744,1183383552,71732222,1996375609,-1957683669,1344208454,148890,-28931840,126539915,1023166088,1006924892,-1948617414,1344208454,162202,-28931840,-1946270069,1438866917,2122443915,1963130886,74907438,1342177720,393882,1996443648,768004,125016656,-1202716672,726663182,1347440832,16777114,-6664192,-1962934017,516120037,1430622296,-1910575989,787252184,209617238,1416954128,1355957901,23475967,-2097122840,1183384772,1715373052,125108481,100288199,-955913472,326214,24000255,-1946519809,1116601462,-1202710830,-970260440,-26032,1996423168,309262,-767128240,1738166294,-1207959545,485163009,286031489,-2095876863,1963002494,242679565,-1705983957,392,-1070865941,49120094,1562371467,707149,-2081649835,-1957296404,1183385158,71732218,179950123,-2131626240,1586180290,-96010246,1183520648,-137221372,71731697,-579354613,737822347,1183385158,-94467074,-956674305,485163015,-1979294069,-62486521,-1962522881,76216950,-561313912,-1963307265,126417990,972703371,-596507066,1593722507,-1017256565,1167087646,518818645,-326903666,205949734,1946226749,17906951,2028693620,1023568545,292814851,1946159165,736570,1187462260,-352300070]},{"sector":8,"data":[-632895739,1996424167,309262,-632911024,798642206,-16777216,79171190,-1751494656,1342177280,16777114,112640,-956263191,50911814,1183699179,-632911394,1342185144,1356744333,-605548912,79987464,1187494123,-1962934052,20777542,1024029696,1433665538,1609285675,-1207011585,-1706033148,2157,181836368,1183383552,1975520252,1782481678,125043458,40517251,-1205177083,-11534272,1996487750,184195836,1183383552,1958743004,242679572,1342178488,517752459,-59310256,726426,242679552,-1696827649,2848,-2080413975,-443874579,-900899553,1478361098,-1957345904,-661774612,-1958417277,272436294,1024291841,57999633,721532137,53406144,1342187704,1356088973,669519504,79987464,-1207011585,-1924136956,1343673414,300186,242679552,1342180280,648090,28856320,-1070903292,-733573808,-1734717418,721420293,735087570,-1706011968,1553,4865667,-385649664,-1632108319,-1202708992,1344143445,503338168,-1069118128,683167766,-6664192,184549631,-385649216,1183645885,-1102673472,2122321899,359935164,549224064,1191120756,-1101100098,1183319946,1975519932,-1101100059,1946173312,-1102643450,-1929377850,1343668294,503339960,-26032,-1073020928,113706612,192,-1967235445,-1136228345,74722364,91562044,-339851521,-1101100053,1183319946,1951415484,1970289668,-1039743215,-352321536,-1132560375,-15764436,1586216518,-2012771650,-1073038266,1586228085,-2012771650,742177862]},{"sector":9,"data":[540804212,1191118197,-1947472962,126533214,1018971784,1006924870,-955878074,16827398,1241958144,-16776960,112725622,129519616,1048793088,1946157250,440325,129500139,-1214623744,-16777207,163057270,179851264,1048793088,1946157248,636933,179831787,-677752832,-16777207,213388918,230182912,1048793088,1946157252,833541,230163435,1318735872,-16777205,79171190,-795193344,1342177290,489882,112640,-956203031,53830,755648139,205324289,-385649152,-1073480135,-1476448621,1996426069,440334,171547216,1183383552,12755408,1959806521,1241958150,-1962934272,-1029451706,242679552,1342179768,679066,-800683776,956350625,108318790,4851399,1183514624,12624848,-1207011585,-1706033140,65535,-1580185975,1178140868,-955878192,18950,-800683264,-2097101661,19006,1183664757,-1202710848,1344143456,63130,-1069645056,74711040,834881222,12729987,-972786688,-2091596474,50238,1187382388,-1632090425,-1202708992,1344143465,381699725,-26032,113704960,65610,-1207011585,-1706033148,1214,85105232,1183383552,1975520252,1782481678,125043458,40517251,-1205177083,-11534272,1996487750,86481660,1183383552,1958742994,242679572,1342178488,517097099,-59310256,268698,242679552,-1697483009,1376,-80151,112725622,129519616,-15275264,163057270,179851264,-16061696,213388918,230182912,1996443648,-26102,-1729560576]},{"sector":10,"data":[420089598,1057505035,654851848,1057695499,856371976,1057505035,-385138933,-310116741,535137026,181030237,-1873273344,-326412987,-2116514274,-16737044,-1711172042,3407,-10058103,-9922935,-150981448,50337838,-1946196346,100624534,1183383604,-195655182,32523975,10938624,66078347,989861894,1963025926,1720093454,1754696703,-230258177,-1946921335,1452012102,722420,-1980086647,1187511382,-2097151762,2099834494,-94452630,4161574,-1014275724,1183433356,-329872918,-1996077429,1586231366,4161784,1589916020,1065363178,640185344,-467007606,1347537195,801178,-128021760,-316010614,1364382251,-10189175,900762,1686518272,-1961855745,1065416798,-14519296,1191180870,-6755346,1191180358,-2085622806,-13307322,1721888838,-263833343,1340670847,-1774780417,240556545,1721827328,-263833343,1183524479,403047408,-163149568,956393121,58521158,-637399,922744438,-40239080,-2097151986,1609237700,24000255,1342185400,-9795955,-2135404522,1855606784,-1929379834,385837702,9222224,-677752802,-1929379828,385837702,105286480,-409317346,-1929379828,385837702,9353296,-6664162,-16776961,-1929225162,385837702,62437456,817385502,1150963712,-2097151987,-443874579,-884122337,1167087646,518818645,-327034738,1448542434,1342194360,-1727937608,-6664110,-1996488449,-1072976826,922687861,-1732771236,726670849,-1202696000,-1706033104,65535,-16571671,664448118,-1996488690]},{"sector":11,"data":[1451868230,-1337538622,922681344,1347551856,1342292920,16777114,1882652416,67155970,1354771280,999968848,-1962934257,-1505326654,-1996482399,-1946213242,1174644294,-1034515520,-14645623,-14510455,1187469035,-1962735420,-1983738685,1451869766,-1000436792,1946173312,705137192,1372138468,231971408,1589903360,260712134,-768873174,-2037821102,-1181024482,973078542,1962876550,-1000436981,1962950528,16312587,-3913985,-1108621754,-14645505,-14639420,4161574,-2030067595,1721892644,612776193,-955877889,16721030,-1371093248,1721827328,1178159105,-385647442,922681673,-6684266,-1996488449,1451862086,3455146,-14373129,-1951906303,1451993158,-897675862,118943883,-1176859106,-1510866918,-1774780641,-26111,1996423168,-1065943102,1353860749,1355433613,16777114,147096320,12353155,1996425332,-25924,1183514624,-1034515520,-14645623,-14510455,-14639420,4161574,-1175911563,-1001994496,-1014299896,1183433356,-933852730,-2134614389,678690879,-467007606,1347537195,970394,-966867968,705661478,1389505517,512133457,24484607,-2043019264,1786052382,-2134614389,1802829887,28329671,-1333886208,-385649408,413204752,612776192,-15436545,1358898358,16777114,79987456,58048523,-120855,-1207799754,726664193,146297024,-1706025469,2175,-14643573,62934571,-1948570680,-1949750311,738140294,-930365370,-1936043693,-385875960,1191117083,-968425532,-41495,-369155962,-2030043334]},{"sector":12,"data":[1721892644,612776193,-955877889,16721030,-1371078912,-87063,-16617418,1996472950,29604032,225024592,1183514624,-1034515520,-14645623,-14510455,-14639420,4161574,1290339189,734235647,1178320966,-385647450,1187512127,-1962735420,-1983738685,1451869766,-1000436792,1946173312,705137192,1372138468,266050128,1589903360,260712134,-768873174,-2037821102,630914846,973078540,1962876550,-1000436981,1962950528,-17766133,-3913985,-1108621754,-14645505,922717931,532152686,-2037559296,1343684390,1342210232,833434,646352128,-1202710785,1344143504,1061274,646352128,-1202710785,1344144136,1065370,646352128,-1202710785,1344143506,837530,1547108096,646352130,-1202710785,1344144312,1342189752,851866,-1401487616,815770,-1401487616,16777114,-2090902016,-443874579,-884122337,1167087646,518818645,-326903666,1187468818,-16776972,-1207799754,726664192,1347440832,883610,-263812864,1005737609,-12749360,-1711172042,4357,884525195,-136672512,50337838,-162625080,-500087,1996425334,-1950250234,722387,-1326952366,147096320,-768375,-1711172042,4451,16023171,-2098658444,4372480,29603920,-1706012007,3367,200165001,1349285056,757914,-96040704,-239991,1375891510,29603920,259693136,1183514624,-230278672,1996432500,-92864516,-1946532349,1347615830,1202586,-230257920,-661925333,-990880213,-970524042,1996423168,108461832,-231681]},{"sector":13,"data":[753465974,147096320,-768375,1637543542,-16777200,1771761270,-2097151984,1962996862,106859270,1577060294,-1962742397,1297948645,-326412853,-1961956221,1451951174,-62486266,-369207671,1183514772,-129595128,-1030962293,-1980610935,1183577174,138816504,2097825339,-228670368,653412095,1183319946,1965898998,-96024817,1586167809,-129564680,-689240184,821460608,2122319484,612252150,1089896064,2122325620,410266870,687242880,2122322548,208939510,720797312,2122319476,192226294,-500085,1183512646,-1950225418,130480222,-92372224,-1961856000,1177286726,343304,28837246,-15602944,1589967942,1065363196,-385649664,-1070858400,-1017256565,1167087646,518818645,-327034738,1183645878,-1202710796,1344143558,1273754,-1069645056,74711040,838289094,385107597,16824400,-6664112,-1996488449,-1072981434,1357448061,-2065149951,46433025,-1919256833,1343659078,1226138,108461824,1342197944,-11893107,40953936,-1996045181,619442758,-1919256833,1343659078,1243546,-1703477504,-1705983957,4812,-1197836545,-1706033151,4912,-1919256833,385829510,-227082416,1279642,2126514944,318675655,1183383552,-61437446,-1919256833,1343659078,1283994,-26112,1177223168,-61465606,377278987,-1203960449,-1206946293,-1706033117,65535,-385694589,2122514597,-931856225,-1197836545,-1706033151,5026,24000255,1342180024,-11893107,1354256406,-459649024,-16777197,-1929225162,385829510]},{"sector":14,"data":[9746512,565727262,-56995840,-1929379821,385829510,13350992,1083854878,-973078508,234835590,-1919256833,385829510,374864,-26032,-1073020928,1996433023,-1673097830,-1113960426,-16777197,-1070884234,330209872,1996423168,112794,-26032,-991232000,-1919256833,1343659078,16777114,-1619098880,-1215232,-6645130,-352321281,1849098031,1095681,1250331984,-1202710785,-1706033072,4113,39597823,-11893107,-1799860202,-1202708992,-1706033104,4185,-1962742397,1297948645,-326412853,-12391293,1183646838,-1706027290,65535,-385649344,1048772846,1946157252,-414791929,99288240,753354439,-532247295,-793227242,-1706025472,2697,67389066,-481916879,503374008,-532247216,-692563946,-1924129280,1343668806,1342185144,570266,-1035563776,-339720567,-1099005943,-15764436,1586217030,-2012771648,-1073037754,1586228085,-2012771648,742178374,540804212,1191118197,-1947472960,126533726,1019102856,704935278,-2146636864,1970257534,-352210940,-2013089790,2122377798,57934014,-1950333185,126533726,1019102856,1022456876,1022194720,-1341885128,-1341986040,-381253625,12484224,1191117684,-1067545664,1183319946,1949056190,1948269809,1966226669,-352145404,-2000672254,1183705926,-1706027290,65535,-1017256565,-2081649835,-1923720980,1343663174,503375544,370448976,1183645696,-62486100,1191117803,-60912644,1962950528,-1036090379,74711040,48977072,1586188464,-62455812,1183516552]},{"sector":15,"data":[-28931832,2122342891,108802218,967474816,2122336894,1148464298,598376064,2122333812,947137194,1084915328,1586175349,-62455812,-1960048698,1191181406,738707196,-237941,130481222,-2145326292,1951443582,-1434550266,-1961593516,1191181406,1141360380,-237941,1183513670,-1962440534,1191181918,-2012771586,-1073042874,1586204789,-62455812,-1959065658,1191181406,218613500,-956539253,1183645703,-1706027348,3868,-1951906167,-986973114,989877253,226362950,-972654965,-1962890174,1183385158,71732136,1183666206,-1706027348,4405,1588086411,-1017256565,16973870,196968,196712,16716568,196620,16713041,16973837,200857,16973935,67562,16973829,66246,196615,16715369,16973852,69880,16973839,201567,16973825,69995,16973841,69804,196626,16714907,16973859,69856,16973843,201446,16973839,199145,16973846,197831,16973858,197884,16973859,200986,16973860,198598,16973862,70757,16973882,68286,16973883,201543,16974000,66721,16973901,134778,16973893,66978,16973902,69574,16973903,67834,16973911,70950,16973912,201331,16974024,69665,16973913,201996,16974025,71144,16973914,201752,16974026,201361,16974027,201437,16974029,201675,16974031,201408,16974039,198672,16973912]},{"sector":16,"data":[198592,16973915,198753,16973916,198661,16973917,199063,16973920,199190,16973922,197106,16973923,197625,16973924,196679,1953300581,0,5,0,0,141,116,1196228608,67,4409165,1146241838,1146241792,1196228608,67,4477507,1380134442,774504516,4477507,1380134442,68,1127098972,17490,1685015808,1124101477,3231055,843927363,1395413036,1685015808,28005,1059192866,0,539828224,0,0,1953064005,0,2228258,2228258,1685217603,1701603686,1767309312,2003788910,1698955379,1701013878,0,1682243584,1140880489,1280332617,22849,65537,1329790977,1090531917,3164244,827150147,808648762,745417776,3222584,1953656656,1413546099,68,0,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,41943040,44040856,1953301228,1819506547,1668115310,257,4194304,524352,-65536,-1,-1,-1,-1,-1,-1,-1,-1,240,-65536,240,-65536,240,-65536,240,-65536,240,-65536,240,-65536]},{"sector":17,"data":[240,-65536,240,-251723776,0,-251723776,0,-251723776,0,-251723776,0,-251723776,0,-251723776,0,-251723776,0,-251723776,0,16515072,0,16515072,0,16515072,0,16515072,0,16515072,0,16515072,0,16515072,0,16515072,0,0,0,0,0,0,0,0,0,0,0,256,0,256,0,256,0,256,0,768,0,768,0,768,0,768,0,1792,0,1792,0,1792,0,1792,0,3840,0,3840,0,3840,0,3840,0,7936,0,7936,0,7936,0,7936,0,16128,0,16128,0,16128,0,16128,0,32512,0,32512,0,32512,0,-33024,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-256,61695,-256,61695]}],[{"sector":1,"data":[-256,61695,-256,61695,0,0,0,0,0,0,0,16777216,-1,16810239,-1,16810239,-1,16810239,-1,33023,0,0,0,0,0,0,0,2130706432,-1,2130706686,-1,2130706686,-1,2130706686,-1,254,0,0,0,0,0,0,0,-12648448,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,-12648196,-1,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,1818838544,1694498917,2003127808,6684672,1852141647,3026478,1392535296,6649441,1392535552,543520353,774796097,1761607726,1769099264,29806,1917845610,544501353,7105601,1291873152,1701278309,3026478]},{"sector":2,"data":[1768178960,1979711604,1684952320,1750272367,1668498735,7274496,1701080649,774778488,3556873,1124102400,1141470325,27749,1866662002,1175026032,1929379890,1935757312,1225352564,29550,1699872880,1919906931,101,1946681344,2019906560,1971322996,1667846144,1701999988,1767247872,30565,1631781005,158557298,-2147468986,1766588558,1175024755,268447793,1685217603,7929856,778331201,1175006766,2046820407,1818575872,157643877,14406,1967390843,1667853424,6648929,1090550912,1685025909,778854761,1175006766,1401946165,1668440421,-2097151896,544163584,774795092,877005102,8650752,1684957510,3026478,1174439296,543452777,1954047310,3360265,2004055149,1802398835,-1874853888,167774726,1442878464,0,131118,786532,8388619,-8302461,67108864,1174410240,201340928,-1560280320,16745296,5701632,3276840,65550,1342373889,1919241600,25959,3801175,917554,2,1132482563,1701015137,1308622956,1006638080,167775232,33554432,33360,131074,786472,196607,1182945282,1852140649,979725665,1953300480,-1874853888,167774726,1442878976,0,131118,786532,8388619,8474755,335545344,939542016,50334720,-2091867392,5701632,3276840,65550,1342373889,1701859200,1459617902,838875648,33558016,50331648,1631813712,1818583918,5111808,3932180,655372,1342308352,33554562]},{"sector":3,"data":[671089152,-16774144,33555199,1766228560,1634624876,3827053,1937009920,1852601207,-1874853888,419436805,788571648,0,983052,786536,8388619,8474755,33557504,201341952,16776960,-2108685824,1702256979,1818846752,1935745125,1342177338,1207960064,167775232,33554944,33360,917624,917539,65537,1400918019,6649441,536901632,234889984,512,-2142240000,1668178243,27749,2004055149,-1874853888,419436804,738253824,0,524292,524332,131075,1233276930,2019910766,1852394528,14949,393268,786596,4,8474755,402668544,234891264,16777472,-2142240000,27471,1572984,917544,2,1132482563,1701015137,1828716652,1937208180,1835757164,-1874853888,419436804,738246656,0,524292,524304,131075,1099059202,3826788,100669440,201368576,1024,-2125430016,3014656,2621464,65550,1342373889,7032704,402680320,234891264,512,-2142240000,1668178243,27749,-1874853888,419436813,1543553024,0,524292,524308,131075,1149390850,980181353,1835008,10485766,262156,1350762496,67108993,603985920,83888128,33554432,1766097488,1411411041,6647929,369112576,201336832,67110400,-2142240000,1701736276,6946816,2621462,458764,1342177284,1819627648,25971,2621444,524304,8,1350717442,7631471]},{"sector":4,"data":[637548032,201336832,67111168,-2142240000,827150147,6946816,2621478,655372,1342177284,1297040256,67108914,603994112,184551424,33554432,1631748688,1377854581,6648929,905983488,201336832,67111936,-2142240000,808464945,6946816,2621494,851980,1342177284,808465280,3538944,2097224,65550,1342373889,7032704,1207986688,234889216,512,-2142240000,1668178243,27749,2004055149,1802398835,-1874853888,419436804,738224128,0,524292,524312,131075,1199722498,1867784303,536870970,1140852224,67111936,-2097152000,33104,1572871,917544,65537,1333809155,956301419,671094784,33558016,50331648,1631813712,1818583918,1953300480,1819506547,1668115310,1936485226,-1874853888,419436804,738224128,0,524292,524308,131075,1182945282,979660393,1835008,4718598,262156,1350762496,117440641,671094784,16780800,50331904,1800372304,3735552,2621464,131086,1342373888,1851868032,7103843,1937009920,1852601207,1784900971,1685285995,-1874853888,335549448,1711315456,0,327680,524442,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,130946,234881024,134257152,33554176,-2108685824,1685217603,1701603686,1966080,6160418,-65528,1342308353,1919243906,1852795251,808333600,49,-1711264000]},{"sector":5,"data":[-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,1275068416,33593856,67109120,-2108685824,0,10092630,262152,1342308353,1023410306,536886016,16780800,50331904,1800372304,1953300480,1819506547,1668115310,1936485226,-1865940992,335549444,1073764864,1124073472,1717858913,6646889,2883613,917536,65538,1132482563,1701015137,108,1509951488,-16775168,33554943,1699971664,1852400750,103,1509954048,67110912,33554688,33360,1835008,524378,131071,1954697218,1919950959,544501353,1869574259,779249004,1953300480,1819506547,1818575879,543519845,543903510,1663070068,1952540018,1752440933,1768300645,373253484,1702256979,1920295712,1953391986,1634231072,1936025454,1091051578,1953853282,103689774,1918976800,537228132,1685217603,1853171722,1819568500,220816485,1685217603,1701603686,1952539680,1631783009,1768318066,1124623724,1717858913,711289961,1634036816,1881171315,543908713,1948282997,1881171304,1701736296,1327505454,1869881451,1852793632,1970170228,16229,1828716544,1937208180,1835757164,1851867923,544501614,1818323300,1836412448,779248994,1953451555,1869505824,543713141,1869440365,1948285298,1919950959,544501353,1952672112,778400373,1953451538,1869505824,543713141,1869440365,288258418,1819305298,543515489,1936291941,1735289204,1867388192]},{"sector":6,"data":[543236212,1768710518,1768300644,1634624876,573465965,1919248468,1936269413,544173600,1954047348,544106784,543516788,1885957219,1918988130,1309945444,1702109295,1763734648,1702043763,1952671084,590242917,544501582,1970237029,1679845479,543912809,1667330163,1869881445,1986097952,1768300645,841901420,1852727619,1663071343,1952540018,1702109285,1713401965,778398825,1868111904,1633886325,1953459822,1801547040,1751326821,1701277281,1310928499,1696625775,1735749486,1701650536,2037542765,1126178862,543453793,544501614,1702257011,1311452772,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,1702257011,1920295712,1953391986,1918984992,1126641252,1869508193,1886330996,1948282469,544238949,1701603686,1126178862,543453793,544501614,1702257011,1310862948,1696625775,1735749486,1701650536,2037542765,544175136,1684104562,1667854368,1701999988,1867391534,1852121204,1751610735,1835363616,544830063,1914728308,1126198901,1717858913,778398825,1953451542,1981833504,1684630625,1918984992,1768300644,204367212,1852727619,1713402991,543452777,2004055149,1802398835,1802134381,1953451551,1869505824,543713141,1869440365,1948285298,1701978223,1663067233,778334817,1851867917,544501614,1852404336,1411722868,1701995880,544434464,1881173870,1970561897,1763730802,1752440942,1818435685,1868722281,778334817,1701336092,1763730802,1869488243,1685024032,1663069541,1701736047,1684370531]},{"sector":7,"data":[1867389742,1650532468,1948280172,1919950959,544501353,1952672112,1936028277,1631784494,1953459822,1701995296,543519841,1953451547,1869505824,543713141,1869440365,1948285298,1919950959,779382377,1953451551,1869505824,543713141,1802725732,1634759456,1948280163,1919950959,779382377,0,0,1895837185,2949376,1895891059,16806400,8716402,-2097122559,7602432,1962999932,16805632,7929974,2046850817,7864576,2030108813,-2063561216,7733275,2004055149,1633971813,1768300658,422471020,661545283,1701978228,1663067233,1852140641,544366948,1701603686,1833507630,1886351984,1696625253,2037150305,1852404256,1701847143,1685023090,1867387694,543236212,1667592307,543973737,1701669236,1884494126,1718182757,543450473,1701669236,1953459744,1970234912,506356846,1667592275,1701406313,1769218148,1629513069,1634038380,1763735908,1937055854,1124937317,1869508193,1919950964,544501353,1818313483,1633971813,539828338,1868710152,774796405,1867781678,1634541679,1679849838,1936028769,544106784,778400629,1952531469,1936269413,1819633184,537996908,2019906592,1920213108,1633906293,778331508,1769107222,1634625895,1631789164,1684956524,1713402465,342191209,1701601603,1918985326,1634231072,543516526,1701603686,2003136017,1818313504,1633971813,1768300658,25964,0,0,1953451541,1981833504,1684630625,1818846752,1835101797,1310662757,1696625775,1735749486]},{"sector":8,"data":[2513485,17,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":9,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":10,"data":[279886,1179861,190284719,131078,268436480,70684,131072,196610,4194347,10092624,12845246,1255,262146,0,0,0,401801298,401801488,9830910,14155793,-2147287036,1,34078720,-265289663,64,-2147155968,1,38338560,-265289715,32769,-2147090432,1,39190528,-265289720,32769,0,1229734665,1095713360,1124549714,1112557900,17490,1329742085,87125,1229734670,1146241616,1346653783,37965650,65536,786440,1162544640,1279610450,1229211395,1163089156,33489490,81869,1070399744,16899585,654311424,1919117645,1718580079,1767317620,2003788910,1816338547,1868722281,543453793,1819308097,1952539497,7237481,0,0,0,0,1167087646,518818645,2122438798,1963004172,242679569,1342177720,16777114,112640,2122385899,1946226700,-2084557836,-443874579,-900899553,-1957363702,1022133228,209095510,702550,10532944,515395614,2090487808,-2097152000,1946159742,4241474,2013264,20093520,1183383552,1958742998,213407273,1183535104,-1202708778,-1706033122,349,-1957642197,1344198214,503357624,269531216,-26032,-1070923776,1442921705,-2096834072,-1073020220,-1598492556,508567040,-1161811120,1347555580,74907472,6600784,1354771280,1347442256,16777114,-62486272,-26032,1183383552,230183130,-6664192,1342177535]},{"sector":11,"data":[16777114,-629735680,383534733,-26032,1996423168,-629735428,16777114,-431584512,-1962880861,1174658118,13542372,-788475743,13804520,-788476255,-1545023000,1996423380,-25860,279117824,4241408,702544,-26032,1183383552,1975520216,8513795,737965823,-6664000,-1996488449,-1202258362,-1957691381,1344198726,1342180024,16777114,-25755904,1347469355,65517648,151042128,25860688,1996423168,1354771454,517490315,112720,16824400,-26032,1996423168,-25896,-4718592,-17665,-1705619374,65535,-1996438877,-352271338,-1002009324,-6664170,-1929379585,1343669318,16777114,-1002009344,-1070903274,-1706012592,65535,-646594549,1590183563,-1034033781,1478361098,-1957345904,-661774612,1446440067,-1961986421,356322374,-385649408,58589941,1023621865,57999362,1023499497,57999365,1023488489,57999366,1023443945,57999375,1023542249,57999380,-352131095,172395272,1946157373,1996445205,175570700,-16222465,-6683018,-385875713,922682150,28836030,1347590400,-1003028650,-1036583168,-26112,132841472,1064579,721908992,-372102208,278987518,172374272,1183517557,1090310,-352321096,272039912,51230720,175570768,-16222465,-157677962,-385875966,2122515154,-948699126,556675,-1705590411,65535,-1217085429,-26026,-1343553536,1024083595,611581986,155019127,1027896320,292814881,-939564311,64582,1187451883,-352321028,-62470388]},{"sector":12,"data":[99287042,66864839,364402176,1996443649,1354771452,61774416,1793654784,-62470145,535494656,33310407,-1206326528,-1706033136,65535,92127243,-352320840,243715,1459373705,-352250696,2440644,641585012,1033663488,-864813017,1946167357,-17700455,17464963,-2081881228,440304384,57999360,738137321,1347440832,-269986224,180650767,1459553513,1062655,16777114,440304384,225705984,1347469355,-396996528,-998043698,-701038838,-26112,-1070923776,-26032,-756482048,272532478,376700928,1062655,1342376120,-16091393,1996425334,-26106,-1923743744,1343681606,16777114,1183667712,-1202710796,-1706033151,65535,-1543503944,312672278,28857856,-1070903296,6600784,1354771280,264858,28857856,-1070903296,1342182563,1342177720,269210,-1070901760,1689800784,-1070903296,-26032,727056384,413356224,28856320,1033523200,-385875961,-1705574843,65535,58048523,1459501289,382879373,-26032,1996423168,899282,14391888,-1706033152,1313,-1194166529,-1706033147,1127,-6664110,-16776961,146330230,-40218624,1375731716,-26032,1183645696,-396996398,-998046700,1183667716,-1706027310,65535,-2080514839,1963264638,-36443901,1719939,-1961856000,-1070922154,1376405131,179852880,-13702397,1996424822,1139299850,113541889,-2080527127,1963264638,-39589629,1719939,-1961331712,-1070922154,1376405131,246961744,-370651133,147096334]},{"sector":13,"data":[-162583,1996424822,1508398602,-3740926,-1711221194,902,1342178744,361370,-1706012160,1418,-385821021,-1923678887,1343670854,244122,175570688,14038783,57754,175570688,382355085,-701038768,-26112,787021824,16793085,2011759477,17972733,-521600139,18103804,1793655669,18169343,854131573,50871807,887686005,51199486,-135724171,-54138372,49120094,1562371467,707149,-2081649835,95951596,-6664192,1375731967,-26032,-693960704,1354771200,-1719729992,-6664110,-1996488449,1996485702,10532868,-6664162,-1996488449,-1598492090,-62486272,-939630964,63046,65423047,-1983894784,1183447622,71732216,-940554615,-6074,-1423673,-330905601,1187446784,-1560280850,1183645886,-1706027290,65535,-1017256565,-2081649835,-1957292308,-1593830346,103481548,1183383752,105286650,1979712573,19523843,781434883,108242943,13514283,906188779,1374355662,-1728027464,312561746,1347590400,-11485141,1625819254,-397389296,-259321926,1183527915,-838456326,-364476160,956354209,57928262,-2081798519,1963067006,-364475641,65788151,65685131,537586672,1241916934,738609670,2096499462,306086663,75431936,736884267,1193529,915080829,535494674,-768883061,13514487,200038025,-1592757038,-388955954,74895419,13514243,-1578338773,-970260460,200689289,184975296,-142967360,-28931624,1324681,721472673,989906950,327155270,-1207666945]},{"sector":14,"data":[1344143558,1342177720,247962,-15340800,-1070922634,-159973552,503367352,-1706025392,65535,-1710983425,65535,-1207666945,-2091909119,4670,-1070922625,312547819,1347590400,-1728027464,-963948462,-397389159,1347555382,1343213288,1342177720,16777114,-443851264,-1957313699,384599020,406227798,13279488,12977707,-1946401143,71108166,-385649152,-1073544925,-1476448621,908789697,1475018960,13645315,1689801195,1347590400,-1728047455,-1070903214,142016336,1376719592,242018384,871100555,737953419,-1996435450,-794695098,-364496640,1183384435,108954602,-1962445566,-654841274,1183515627,-336591894,1946643978,-1744332793,185039367,-2096661258,5694,-164952961,909716459,108855318,1455755,-963960853,922210859,1451819216,1959922670,13672720,-801380143,906167414,1982529744,1614318,1183434283,2143292408,2109737734,-1982269580,915008582,-895418344,-972674304,-330941696,1996428159,13023236,28856350,-375762944,-352321530,74907413,737703679,-960999232,508567040,117480016,1996423168,118004228,1996423168,1354771204,1443385,379656574,1347590400,-1728027464,-963948462,-397389159,1347555054,1343129320,1342177720,260506,-443851264,-1957313699,-2098429460,-1957275904,76220022,-1161591,-1070922634,-6664112,-2097151745,1946157692,-294191343,503596173,-701038768,87202304,1996423168,-129594108,362434582,-1962934267,100923974,1144717340,-385646842,1183515211]},{"sector":15,"data":[-771357704,-498693888,-1560226655,113704988,26,16777114,-465139456,57982987,-16725271,-1207910858,-1202716657,1344143520,1342185144,657050,-532248320,-1149185,922739318,-1598554084,-11526656,1905975414,-1593835510,100860110,50659540,470155520,-294191360,-1946650881,100923974,53280796,1183535104,-129618948,112720,637008,1375753658,160275024,1996423168,-126418962,66733707,1207966726,-62485680,1358448171,1342177720,-1174402632,1347551317,16777114,13023232,1183666206,-1706027272,65535,16784545,-2097100794,6718,1659437941,-868811007,-902365440,-935919872,-969474304,74907392,-2096527896,1558776516,-599341311,1187446784,-956301176,99910,971261579,58623558,-45847,-6649738,-1996488449,87918662,-15370496,1342225974,378291853,2013264,5216848,854261760,1032341131,57999488,1023463657,141688961,1996522301,15329539,-1920436481,1343654982,1342197688,16777114,-1975088896,1137113227,1187381388,1183645915,-1706027380,65535,-2088089975,1946213502,-2075736524,-2058959316,-294191328,-1935617,-1929372618,1343652934,1342177976,710298,-294191360,377767565,178256,177576528,1174470656,-294191134,378291853,-1971912880,16777114,-565802752,65160843,1317789254,-770823172,1925266176,-125924586,13778435,1994554937,-495023862,16830113,-16770042,1996484214,473366498,-1941533440,1996443670,-25974,1183514624,-498728482]},{"sector":16,"data":[31213255,-953750784,16783878,-1941518848,-1941533440,1337479190,213405696,-974630909,147096328,9207424,837354356,-2042167297,-1191261719,1344143558,-150941023,-727625512,1356396288,16777114,440304384,1970536448,1342177976,-1728044872,-6664110,-1996488449,-1072987578,-1360460939,-6664192,-1996488449,-1979744634,-1039433642,-1696005259,2124334080,-74754305,-234876743,-1014276443,1375732741,71601488,-960999394,-1706025472,65535,-1702725889,65535,-11485141,1996456566,50968580,137291856,-16202621,-6651274,-352321281,-263811758,1150111766,-1202708988,1344143558,752794,13017344,-1947187575,1178202694,-1959756042,1178202182,-1960280332,103543366,100860104,-1957691372,103542854,100860102,-1924136936,-11472826,1996484214,976900,-1710570365,65535,-443850914,-1957313699,250381292,-28915882,1187446785,-1107293962,-1696006114,-1707802880,65535,201082505,-385649216,76218502,1946157885,1029601094,141819905,1946157629,8448279,-15960321,1996487798,108461832,-2096859416,1827342532,-15960321,1996425846,142016508,-402229505,569049202,1342181048,-402229505,-998046720,-11932924,1996426358,-59310326,-16222465,921175670,180650753,-335657335,8469807,209169012,1912603709,343331,485213814,1946190397,8601003,283887988,-1962752381,1325397574,1958743030,-10884861,16678531,230165877,1996443648,61007878,1577370755,-1017256565,-2081649835,1448548588]},{"sector":17,"data":[-16353653,-6683530,-1996488449,-1072957882,-1070922379,-16727319,1996486262,71866888,1996423168,964616,-398029488,-6664170,-2097151745,-16772546,1183520885,-872010772,-939130112,1221376,108904459,1181383,1048772608,1979645974,-364475624,13239851,12977667,184555171,-955875904,5638,71600896,1183384619,105155582,-1996340181,2123103302,176040938,2113830457,-28931323,-947191061,-1946532215,2116807806,-58836724,1183516029,-1962742788,-129594937,-16484609,41221940,1358591743,-624897,1996425846,2144268,1375784122,-26032,1996423168,-25866,28835840,-1956684288,1438866917,-326898549,-1957275868,1149961846,-1996215548,1150024774,38021894,-939899255,63558,-1710721281,2891,-1981135223,-1039405994,-1796668555,-364475647,-595686058,118943883,-1512403426,530949541,142016350,754842,74907392,16777114,-398030592,58048523,-1962842391,121494598,1023769600,1618870280,-1207666945,-1706033148,3653,74907472,1342179512,944282,1996443648,-596181026,-2097070104,1183385796,1975520228,18802947,-1207666945,-1706033146,3701,74907472,1342180024,16777114,1996443648,-596181024,-2097082392,1183385796,1975520254,15657317,1181383,113704960,22,721472161,-1996438010,-861805498,-939119872,-28931840,-16484609,41221940,-16485121,-6683020,-16776961,1996424310,-25892,1996423168,721718020,-1957688762,1177223748,-6664180]}]],[[{"sector":1,"data":[-1962934017,121494598,1028158464,1567883272,1048799723,1979645974,-465138920,13239851,12977667,184555171,-955875904,5638,306086656,-1737097472,738084491,50383878,-1560229882,-1073020910,113739389,18,-2080408087,1946214014,-528579820,-15830016,1996424310,-529072162,16777114,74907392,-1804545,-6619530,-16776961,1183515766,1342450442,722224779,-1706032572,65535,-16484609,-6626698,-1996488449,1996486726,-394854652,16777114,-129594624,-443850914,-1957313699,283935724,-375097,-62470273,1187446784,-956300812,130630,687747,-1293352075,71731968,1023410477,58064903,50373865,-13724736,-955253337,720454,1187462123,-352295682,-196688076,1187447038,-348634882,-196688088,1187449324,-349761282,-196688100,-219479810,-351910261,-888145807,-451948017,-653266673,1729128207,1354771216,-1946257665,1385761350,122480720,-1980742007,1347613270,-11485141,1183577206,1347590408,-1727641973,803754066,-397389305,1174603562,-229239824,-2097151699,1347551450,-1996048664,1451882054,-96039944,972838539,192084054,1178142071,721712886,-1962677312,-443812282,-1957313699,335988716,-956301312,6150,-1103692032,108461824,503357624,2013264,152410704,1996423168,13023236,922701854,-1097203498,-16777208,-1598552970,-1202708992,-1202651137,1344143558,1342185912,16777114,1575324416,-326412861,9104513,1183536727,-1837200122,118943883,-1515870811,731137675]},{"sector":2,"data":[721471494,-835258414,-1806292736,731399819,-768895930,13514487,193484425,-1592363822,-1037369138,-1583856127,1178140876,-1593409896,1177092302,-1807316072,2140685881,26077443,721472161,721470982,-801703982,-28931840,629063691,731399819,-768895930,13514487,193349257,-15565120,-459667338,-1996488691,1451854918,1975651214,899088,74907472,-2080436248,1156121796,-25263359,-955941276,6618694,-7440641,1218088054,50331658,1451985990,-2109306482,-2088479095,-16771522,113706613,22,1195651,-1955170817,1451985990,2122746254,-2141812225,-8747321,-861863936,-939119872,-137221376,-1996435914,-1946190714,1451983430,2122725764,-14781441,1996488310,2125922176,-1706652161,13887568,17351811,-33146,-335578490,2055637974,2089167871,-836306945,1221376,108904459,1181383,-2037710848,653787004,100860110,-861732664,172395264,922210859,1183383758,-1960776816,1325371462,1958742928,-25755873,-7440641,1183681654,1994936474,147096320,-997439999,-2144957346,-680198081,-1986771317,1206618694,-1954396533,1178174550,-12160116,1996488310,-1938358386,1352287885,-2097134360,-2037839676,-1769341066,1996488568,-1837695228,-1920305409,1343658566,154114642,-2037710848,1174536054,13541772,-1953872383,1325368902,1975520134,142016431,920986,-1956684288,1438866917,-326898549,727078666,-1946211338,1183384646,176044538,1589932670,1187416838,-1977165821,-62486521,1958742936,605535]},{"sector":3,"data":[171780980,1024750592,259260429,-1962647925,-670873657,-1996732790,-993334521,-2144991650,108268856,171474982,-347721099,-1714975953,-150992711,-137286663,-162100774,-956054901,2097825339,-163149033,200691455,-1953073984,-947190690,-958921913,-370466809,-768882805,-1070870389,1600046731,-1017256565,-2081649835,45614828,146296832,1347590400,736154,-96040704,1517600779,290167376,1183383552,-27883012,1114948107,-1946394940,-1993996218,1589903943,205949948,105351462,-1946394940,-1993996730,-60898297,638207627,-16496759,-1449461130,721420306,1996443840,74907642,1342376888,-2097147928,1996425412,195009274,-443875328,-1957313699,49054700,16777114,-28931840,309641227,74907472,-16353537,1996425846,43227656,-443875328,50013,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,1040631595,-1996488704,1459630094,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-336926713,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,5255,-1017256565,-1192457387,-1957691328,1861682246,-1097183226,-1962934252,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,5325,-1017256565,736922453,1996443840,6461956,-443875328,-1957313699,74907628,103066,1575324416,-326412861,-1710983425,5430]},{"sector":4,"data":[-1017256565,-2081649835,-1070923028,71732048,-1706012007,4957,-1929492855,735087578,1575324608,-326412861,-16585597,-1097202058,-1996488685,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443874764,-1900297379,-1795456768,1393062656,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1073767055,-1007912629,567095476,-1023392605,4064910,741772070,889239552,512303565,109838386,521011252,-1171980104,567088144,-2079421642,908256000,8783557,-617358708,-2111897802,-385649920,-986251703,-1946121722,244698,-2111897802,-1021372928,855643321,1653077723,74711296,567099060,-1007492541,-387151019,1996423641,27125764,-1017256565,1475119957,-13413546,184960651,-149783104,72780759,-621291273,-1996488675,1451820614,172395268,310231051,1452005367,-136775928,7642,-1995815287,-1073018794,1317738101,105286408,-235417037,1183570059,-1947076860,-1875055661,1317787787,106334984,-788248949,-774254101,198758890,-134973989,871402481,-11513134,1996425846,15525896,1996903995,990409223,58065990,855764611,197561298,-150506241,-2082932774,1583022298,146955615,-326413056,-617392553,184960651,-149783104,72780755,-621291273,-1996488675,1451820614,172395268,310231051,1452004343,-136775928,7642,-1995815287,1317734486,-1948125436]},{"sector":5,"data":[138841080,-503844725,-141100541,-134019482,-963913845,125098763,-654845193,1577114243,146955615,-326413056,1183536723,1975520010,139365142,856049291,-1947076654,71732184,-745803273,-1953481493,140413896,-1962518901,-372177850,-355345455,-921970479,-201853835,-768348021,1996443730,142016266,989862376,125240918,1178273906,-2096925180,-768409106,1532937867,574045,1458342741,-1962260853,-503905202,1183570059,-135230712,-1764097055,50751223,-1949070376,-1034068282,-315490296,-355399965,-85796655,-326412861,-402636056,-469041997,2122320500,74776580,-33274170,840353054,620804096,-1960894003,-486505458,178951,8527615,-1274788213,-1155412660,-75431788,141754516,1528299347,-219462845,9747395,9894785,-11335565,1128487703,1506013931,268501760,1778385667,1057030912,1795162882,-872348928,1811940097,-436141312,1862271763,-1291779328,1895826177,402719488,16777492,-1124007168,1912603393,1996555008,2063598095,1879114496,83886356,-1660878080,100663572,-1409219840,117440788,1526792960,16777732,-603913472,167772436,-905903360,50332174,1442906880,2080375560,922813184,2097152776,-201260288,251658516,-1493105920,2130707208,-1845427456,16777984,1845560064,150995460,251724544,285212949,1778451200,301990163,-1560214784,318767379,1224803072,201327119,654377728,335544597,-553581824,218104334,1090585344,83886868,-1912536320,100664067,1459684096,234881551,604046080]},{"sector":6,"data":[-1996487932,1359020800,419430677,-134151424,-1979710709,1812005632,-1811938801,-855571712,-1946156269,-1090452736,369099278,469828352,-1912601844,989922048,503316756,-184483072,-1895824632,-352255232,-1879047415,822149888,-1845492982,570491648,-1828715775,1761673984,-1795161341,1711342336,486539785,-1308556544,369099522,352387840,503317006,1912668928,-1728052479,-1979645184,553648658,-1442774272,570425869,1191248640,-1677720831,-2063531264,654311951,-889126144,553648904,-1476328704,587203330,-1610546432,855638273,-33488128,754975244,906035968,654312196,-2080308480,671089412,-989789440,687866624,-419364096,872415756,-1694432512,-1392508155,-1425997056,-1375730939,-1845427456,-1342176496,1409352448,-1275067644,-268369152,956302085,67175168,1107296773,-1308556544,1140851213,-201260288,1157628420,1308689152,1023410952,-2063531264,1040188168,-452918528,1073742595,-838794496,1107297024,-117374208,1140851456,939590400,1342177806,-1761606400,16842497,-704641792,33619717,2063663872,1509949713,-1677655296,1241514761,251724544,1375732237,486605568,1526726932,620823296,1308623627,1107362560,1459618308,-1258224896,1325400843,-1560214784,1358955280,-2113862912,1526727178,-301923584,1560281600,-1124007168,1426064144,1510015744,1459618562,419496704,1476395776,-1711275520,16842497,-620756480,33619717,0,0,5,0,0,-65536,-65536,0,8454145]},{"sector":7,"data":[8585346,196609,262146,5,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,359661568,361764232,5596,0,0,257,4194304,524352,-65536,-1,-1,-8390401,-1,-12586753,-1,-14688001,-1,-15744769,-1,-16285441,-1,-16285441,-1,-16285441,-1,-16285441,-1,-16285441,-1,-16711426,-1,2130706680,-1,520093920,-1,117440640,14745599,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000]},{"sector":8,"data":[0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,14688000,0,-57600,-1,65535,0,0,0,0,0,0,8390400,0,12586752,0,14688000,0,15744768,0,15744768,0,15744768,0,0,0,16285440,0,16711425,0,-2130706681,0,-520093921,0,-117440641,-116981760,-16777217,-150503297,-1,-150503265,-1,-284720913,-1,-284720913,-1,-553156361,-1,-553156361,-1,-536379145,0,-418938865,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673]},{"sector":9,"data":[-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-418938673,-1,-536379185,0,-16285681,-1,-16285441,-1,-16285441,-1,-16285441,-1,-16285441,-1,33023,0,0,0,0,0,0,-2143289344,285218310,1258328064,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,1768711042,1634689648,25714,917504,524432,131071,1132613634,1651534188,1685217647,2490368,4194338,-65528,1342308353,1919243906,1852795251,808333600,83886129,-2080362752,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989869312,234889216,16777472,-2142240000,27471,0,0,1700004864,1107719288,1634563177,1766852464,1920300131,2035483749,1141074796,17993,1124663296,1651534188,1685217647,1868710152,774796405,1816205870,1684104562,1970413689,1852403310,1816338535,1868722281,778334817,1917139975,1047687026,1765948429,2037539182,1952531488,1125334625,1651534188,1685217647,544434464,1953525093,11897,0,112642,-1360408021,1354771202,-2094532888,-1073020220,1996483444,-26098,-504692736]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[7756365,13,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":16,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":17,"data":[279886,1179884,191191628,131078,268435968,69084,131072,196610,4194343,11862096,14352597,1278,262146,0,0,0,290455635,290455824,8782214,13893649,-2147287036,1,26148864,-265289663,84,-2147155968,1,30408704,-265289716,32769,-2147090432,1,31195136,-265289724,32769,5898240,1,31457280,1048591,95,0,1330397957,1141132099,88167489,1129270339,1279460683,4932431,1111557376,22304079,1279462400,1464550223,1380992078,148303,134217984,3072,1380272902,55330126,71910471,1380275029,-855507198,319,20958465,65590,1294139392,1869767529,1952870259,1852397344,1937207140,1869366048,1092643683,1768714352,1769234787,28271,1937009920,1852601207,1784900971,1167087646,518818645,2122438798,1963004172,242679569,1342177720,16777114,112640,2122385899,1946226700,-2084557836,-443874579,-900899553,1478361098,-1957345904,-661774612,-1959990141,255659078,-385649408,58065026,1023470569,1416888321,1946157629,343386,-169268620,172395264,1946413373,15395075,10499839,-1728052808,1996443730,-1338573042,-1372127488,-26112,451608576,-16091393,1996425334,242679558,-2096988952,1996425412,-26098,-1070923776,12773785,-401705217,-998047405,-1053950,922685046,1067057172,-402653181,-1070923500,-26032,-689242112]}],[{"sector":1,"data":[-1928431873,1343675974,16777114,1354771200,-2197761,-102232458,113541890,-1928431873,1343675974,16777114,-5510400,1996425846,42788878,-352009085,13559965,-352294168,242679701,383010445,-26032,1996423168,-969474294,-26112,1996423168,-733573878,922701846,-6684474,-385875713,339607400,1036940288,-1049362411,1946164797,17972654,283706229,18038271,1996464500,209125134,-16091393,1996425334,-26106,-310181888,535137026,181030237,-326413056,1342179512,103578,-1706012160,411,-1207910237,-1706033147,430,-6664110,-1560280833,-1070923578,112720,571472,29923920,1347551232,118682,10658560,-1202667477,-1202716671,-1706033147,65535,-6664110,-1560280833,-443875142,-1957313699,-1070137364,32217600,922681344,-191233850,-16777215,-1711234506,509,12203775,16777114,1575324416,-326412861,-15930237,-1130757002,-1996488701,-1202654138,-1706033142,555,-16727389,146338934,983191552,-1560281086,1996423364,440564,38378064,1183383552,-193527810,1342178488,16777114,-62486272,-16484609,-6622090,-1962934017,1385823814,6600784,-1588571495,1385758914,233957456,1273516114,13411085,13506185,-1711520117,1689800786,1347590400,-1728002911,-790081454,-397389299,-928838358,-904492800,-19273728,1064579,-10128384,-1711232458,65535,-1996435293,-956247530,64070,-772127093,65065440,-1962881018,-1996434922,1451882054]},{"sector":2,"data":[-902365192,-935919872,-835256576,-868811008,-161561600,38243110,-397389159,1347554675,-1005793816,-1993935266,1191117383,-92371974,-4621252,-1711232458,65535,1342219448,-1962252056,1438866917,-1296503669,726670848,-11513664,1996424822,-26104,1978138624,176063239,-14125823,922682486,1855586324,-16777213,922682486,2025324564,-1070903066,-2103816112,-956301309,16781830,-2094142720,4670,1996433012,339148548,-26112,1996423168,339148548,65583104,1354771280,-26032,113704960,18,-1017256565,-2081649835,1183647980,-555200262,46433033,956344481,276168262,956343969,141950022,956343457,645200454,-1710983425,65535,-1191688567,-11534335,1996486774,1239044,-16333693,1996424310,39295736,-443875328,-1957313699,250381292,11155199,175258,13673216,13768329,-1207535873,-1706033151,65535,556675,1996452213,11712518,922701854,1771700422,-16777209,-186120586,46433025,1342177720,10630911,-150993480,-1962892242,10920392,834457,-939262985,108461905,-2096890904,-1070921532,-1573454000,-1506345216,108461824,-2096896024,1048774852,1946157074,27322627,1342179000,1342197944,12203775,11024127,-2097052439,1946224766,25487619,1358579341,-2096566040,1048773316,1962934290,11051297,1962821177,440345,5290064,-1170800816,-1472790784,108461824,-2096963352,-1499395388,-62506752,-1532949643,-96061184,350815093,306086657,57999360]},{"sector":3,"data":[-1207922711,-1202716659,-11534256,-16729546,-16734666,-1427634570,180650754,1342180792,1342194104,12203775,-150993480,-1962892242,10920392,834457,-939262985,108461905,-2096987928,230165188,1354256384,922701824,1183514786,10920956,108461904,-2096995096,230165188,1102598144,922701824,1183514786,10789882,-150993479,-1580692503,-1147600730,-67698676,-11417597,921175670,180650754,-1070892053,-1170800816,-1506345216,108461824,-2096967704,28838084,922701824,95944890,-1540425984,-1580692736,-1147600730,-67698676,-11417597,-1444411786,147096322,-11485141,-1962892746,-1499202490,1996443648,43182086,-1207384957,-11534335,-1962892746,-1532757434,375040,-930354697,-1728010591,-150991685,1372062715,-402229505,-998047128,306086664,611647488,956344481,477429318,1342179000,1342197944,12203775,-1543616885,-11534168,-1897396618,180650753,11155199,198810,1575324416,-326412861,-1189679997,-1230962663,-1308218624,-1712720128,12848779,1183447543,-902365190,-935919872,-835256576,-868811008,1347590400,1376393960,158656592,1039681161,92078082,33048263,-92372224,-955941630,195142,503362232,-129594544,-654837551,-96040112,-654837551,-26032,-1230962688,-1308218624,-1543974656,-1197408084,-1274664192,66638080,-1560235002,-1298071362,-1408892160,12362496,16139975,-163149056,-523116335,13633027,13768331,-1980610935,1085862998,1347590431,-1728009055,1589923922,1200301810]},{"sector":4,"data":[1347590402,1376357096,149219408,12453379,-1192474999,1385766720,11313488,-1001368935,-1960381858,1347590407,1376347880,146860112,12322307,-1947580791,-1181092282,-101253115,477417995,49970819,2122535806,1299972856,1089095307,-1947318647,-1992233914,753659974,65685131,1183447622,-330920978,-1980217853,1183707206,-1957685526,-120456634,-1957635849,-120457146,-1705977609,65535,-1929087233,1343679046,12596991,79770,-163119360,1022787203,820577149,11712767,1183535134,1358483960,-772127093,2056933624,-1962934266,1438866917,-326898549,74907398,12334847,12465919,619674,6600704,-1588571495,1385758892,172395344,-397389159,1347553443,-1995964952,1183578694,-773795578,-804912160,-770274560,-62486272,-108919,1996424310,139500044,1996423168,142016260,547738,74907392,-1726005064,1183535186,1347590650,654073540,1385760651,139847760,-1343729582,-1140456697,1085820928,1347590431,-1711651189,1589923922,1200301820,1347590402,1376269032,126675024,12453379,160209488,-443875328,-1957313699,518816748,-1207666945,-1706033139,65535,-16484609,647628918,-2097151999,1946159742,505861,95945707,-62486272,84297355,-1181155313,-101253060,-1946265975,788003910,-1181155156,-101253020,-1947187575,-523108794,100917457,378208464,1183383762,-329872918,-1726005064,1183535186,1347590640,652893892,-1727903861,-1528278958,-397389305,1183385342,524335350,-1957670247,1385820230]},{"sector":5,"data":[-362888112,-1727558874,-2065149870,-397389305,1183385310,176063476,-1207602176,65732673,-1996468040,1183579206,-773795578,-804912160,-770274560,-431585024,-1192733047,1385766720,-429996976,38243110,-1957670247,788003910,-1181155156,-101253020,-397389159,1347553075,-1996059160,1085864518,1347590431,652631748,1385760651,-62485680,11284215,6601113,1385822711,118089808,1676169298,-129595130,-1962641665,100922438,-1957691204,100922950,-1706032962,2466,-1962641665,100923462,-1957691204,100923974,-1706032962,2490,-1593542913,1177223356,-1096724236,-163173632,173578832,1996423168,-129594620,12322307,-96040112,12453379,175151696,2122514432,91488266,-352317512,1357827,-1946401143,503645766,1018796288,-1980107008,1183579734,-1406208004,1689884928,-1980107008,1183576134,-773795330,-804912160,-770274560,-498693888,-1192995191,1385766720,-263812272,-1001368935,-1960385954,1385759303,105244752,-1612165038,-96040699,-1726005064,1183535186,1347590640,652369604,1385760651,103147600,2145931346,-129595131,-1962641665,100922438,-1957691204,100922950,-1706032962,2694,-1962641665,100923462,-1957691204,100923974,-1706032962,2718,-1593542913,1177223356,-1096724236,-163173632,-26032,1996423168,-129594620,12322307,-96040112,12453379,-26032,-443875328,-1957313699,216826860,721467041,-1996443130,-1197343162,-1274664192,-62486272,13514495,13383423,13252351,13121279]},{"sector":6,"data":[-397389159,1347552651,-1996167704,1451881542,-28931082,-162120807,92218748,1995720251,-196703458,-1946532215,1177288262,33083898,-1962888698,100923974,-1230831438,-13112576,-16725450,-16725962,-16724426,-1962881994,1385823814,87681104,-1813491630,-129595132,737953419,-120457146,11798017,66602635,-1560235002,-443875144,-1957313699,418153452,-1207142657,-1202716670,1344143504,1342181304,782490,176063232,-15567616,1307053174,46433025,460701707,1005174827,175570689,1342220984,1342177976,16777114,268879616,-1207959552,1344143504,-1070903266,1375784122,1347440720,1342203064,1347469355,1342994175,-26032,1183383552,922702074,-390594540,-1070903293,1402622032,184549379,-1203669568,-1202716608,-1706033112,3277,-113015,79170678,1183535104,-1202708738,-1706033112,3134,-1957642197,1344208454,503353528,269531216,-26032,-840433664,-9901579,-1559476597,-4718432,-17665,1996443730,-26100,-1365049344,-1340700416,209125120,1342177720,503353528,1030224,223058512,1996423168,1354771450,16777114,-62486272,1354771280,-407351216,12079107,2006601737,-16777204,-1070859146,9484368,-373796834,12079107,-6664191,-16776961,1996487286,-26108,350945280,384321165,-26032,1183645696,-1706027288,65535,384321165,1354771280,-6664112,184549631,-2525760,-68621194,46433026,-1034033781,-1957363702,183272428,1342193848,1342184120,16777114]},{"sector":7,"data":[-62486272,-1866934133,373786880,-1961336948,1204288606,-1962934256,130546782,1586167811,71732220,-1962260599,1204288606,-939524350,-64441,-1202667477,1385791232,-26032,1586167808,239569404,-939762037,3143,519849611,-26032,-1073020928,-1070922635,1996441067,-25860,1996423168,243716,-163148464,95965206,-6664192,-16776961,-1866988426,-1924129280,1343682118,16777114,-28931840,-965427189,1342469887,16777114,11182848,-1962933832,1438866917,12119179,-1960719060,-41941922,-2147255284,-1070396179,126469514,1200210314,-1983477246,-443874233,50013,0,0,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,772196139,-1996488704,1459625998,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-46209017,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,3655,-1017256565,-1192457387,-1957691328,1861682246,2124042246,-1962934258,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,3725,-1017256565,736922453,1996443840,198744580,-443875328,-1957313699,74907628,865946,1575324416,-326412861,-1710983425,3830,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018]},{"sector":8,"data":[-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443874901,2126234461,-2063892224,1393062656,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1073762959,-1007912629,567095476,-1023396701,3016334,741772070,889239552,512303565,109838370,521011236,-1171980104,567086544,1947110198,908256000,7734981,-617358708,1914634038,-385649920,-986251703,-1946125818,244698,1914634038,-1021372928,855643321,1384642267,74711296,567099060,-1007492541,-387151019,1996423504,18147332,-1017256565,1475119957,-13413546,184960651,-149783104,72780759,-621291273,-1996488675,1451820614,172395268,310231051,1452005367,-136775928,7642,-1995815287,-1073018794,1317738101,105286408,-235417037,1183570059,-1947076860,-1875055661,1317787787,106334984,-788248949,-774254101,198758890,-134973989,871402481,-11513134,1996425846,14477320,1996903995,990409223,58065990,855764611,197561298,-150506241,-2082932774,1583022298,146955615,-326413056,-617392553,184960651,-149783104,72780755,-621291273,-1996488675,1451820614,172395268,310231051,1452004343,-136775928,7642,-1995815287,1317734486,-1948125436,138841080,-503844725,-141100541,-134019482,-963913845,125098763,-654845193,1577114243,146955615,-470994432,-773140218,-1006968104]},{"sector":9,"data":[-387151019,1021837416,1961102077,75399178,-972786432,519963718,2234053,-853213000,243998497,132317300,-16776517,-1962905058,1286865990,-2068110899,-2063892224,1393062656,1130043391,-1007490237,1458342741,-1962260853,-503905202,1183570059,-135230712,-1764097055,50751223,-1949070376,-1034068282,-2068119544,-2030337792,1393062656,1130043391,-1007490237,16973883,196970,16973931,199847,16973932,199822,16973937,69080,16973825,199832,16973938,69168,16973829,69213,16973830,69228,16973831,132096,16973826,69276,16973834,196770,16973948,133090,16973828,69300,16973839,199686,16973825,69327,16973841,66541,16973842,67085,16973843,69351,16973844,200193,16973829,196810,16973830,69393,16973849,199623,16973834,133178,16973843,196799,16973836,133029,16973844,69115,16973854,199775,16973977,199753,16973980,196890,16973857,68642,16973875,133101,16973869,68489,16973878,196825,16973863,196853,16973864,199602,16973865,199810,16973866,68957,16973884,68973,16973885,199950,16973997,199521,16974000,196993,16974004,131509,16973885,199974,16973881,131464,16973890,131554,16973893,197135,16973890,197594,16973892,197418]},{"sector":10,"data":[16973896,131612,327760,16714775,327681,16715005,16973826,69085,16973915,198488,16973901,198539,16973902,197655,16973905,196742,16973911,196633,131160,16714778,131073,16715010,1953300482,1819506547,0,5,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,254803968,256905032,1953304476,1819506547,1668115310,257,4194304,524352]},{"sector":11,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-12583169,-1,-12583169,-1,-1,-1,-1,-1,-469762105,-1,-469762105,-1,-1,-1,-1,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,536870911,-8388609,536870897,-8388609,-15,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-1,-8388609,-923649,-8388609,-923649,117506047,-1,-1,-1]},{"sector":12,"data":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,536870911,-1,536870897,-1,-15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-469762105,-1,-469762105,-1,-1,-1,-1,-1,-12583169,-1,-12583169,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1953366015,-2143289344,285218310,1258328064,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,1869374338,27491,917504,524432,131071,1132613634,1801678700,2490368,4194338,-65528,1342308353,1919243906,1852795251,808333600,83886129,-2080362752,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989869312,234889216,16777472,-2142240000,27471,1648429056,779384175,1124412974,1801678700,1952539652,1867782753,1634541679,1663072622,1801678700,1919885427,1835627552,779317861,0,0,1828716544,1937208180]},{"sector":13,"data":[-524222464,-521403580,-512817537,-498595416,-478933835,-454029409,-424144290,-389606167,-350808263,-308143800,-262137072,-213181300,-161997384,-108978543,-54780140,8000,54796052,108994193,162012600,213195916,262150928,308156744,350820153,389616873,424153694,454037407,478940341,498600360,512820863,521405252,524222464,521469116,512883073,498660952,478999371,454094944,424209826,389671703,350873799,308209336,262137072,213246836,162062920,109044079,54845676,57537,-54730516,-108928657,-161947064,-213130380,-262085392,-308091208,-350754617,-389551337,-424088158,-453971871,-478874805,-498534824,-512755327,-521339716,-1375730939,-1845427456,-1342176496,1409352448,-1275067644,-268369152,956302085,67175168,1107296773,-1308556544,1140851213,-201260288,1157628420,1308689152,1023410952,-2063531264,1040188168,-452918528,1073742595,-838794496,1107297024,-117374208,1140851456,939590400,1342177806,-1761606400,16842497,-704641792,33619717,2063663872,1509949713,-1677655296,1241514761,251724544,1375732237,486605568,1526726932,620823296,1308623627,1107362560,1459618308,-1258224896,1325400843,-1560214784,1358955280,-2113862912,1526727178,-301923584,1560281600,-1124007168,1426064144,1510015744,1459618562,419496704,1476395776,-1711275520,16842497,-620756480,33619717,0,0,5,0,0,-65536,-65536,0,8454145]},{"sector":14,"data":[1464909,89,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":15,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":16,"data":[279886,19399208,191785539,655366,402653984,71148,655360,262154,4194580,33226896,34472454,1872,262192,0,0,0,406126727,406188400,129368629,129495408,128254674,128315696,597754712,597881136,113575346,113701168,383976998,384102704,426379175,426504496,281610581,281735472,64883314,65007920,103156406,229507089,-2147287036,2,186187776,-265289663,336,190447616,-265289663,344,-2147221504,1,194707456,-265289716,355,-2147155968,11,195493888,-265289692,32776,197853184,-265289720,32775,198377472,-265289717,32774,199098368,-265289712,32769,200146944,-265289708,32777,201457664,-265289719,32778,202047488,-265289676,32779,205455360,-265289710,32771,206635008,-265289719,32772,207224832,-265289719,32773,207814656,-265289715,32770,-2147090432,11,208666624,-261095414,32769,209321984,-261095413,32770,210042880,-261095411,32771,210894848,-261095414,32772,211550208,-261095413,32773,212271104,-261095412,32774,213057536,-261095413,32775,213778432,-261095412,32776,214564864,-261095418,32779,214958080,-261095371,32777,218431488,-261095422,32778,0,1313817351,1280266836,1296126730,1229278288,122572611,1414418243,122441554,1414418243]},{"sector":17,"data":[5001042,65536,786440,100663313,1314014539,1191398469,1426344260,139609427,1113146699,1146241359,-855507187,56623423,104844545,-855569387,149619007,121621761,-855572480,146080063,71290113,-855572480,61998143,71290113,-855569613,297731135,71290113,-855566340,1599,104844545,-855568082,2111,-14483455,71290113,-855572412,67044415,71290113,-855569545,302777407,71290113,-855566266,125305151,37735680,-855637803,52562239,155176192,-855637479,575,155176192,-855637107,831,54512896,-855637459,65798975,54512896,-855637085,21889855,37735680,-855637061,98960191,20958464,-855632921,206438719,20958464,-855633757,324075839,20958464,-855632984,343540031,20958464,-855632560,46205247,155176192,-855638016,360382783,88067328,-855636704,1343,88067328,-855636658,5571903,88067328,-855636794,27919679,88067328,1398,1852397333,1937207140,1852793632,1819243124,1851879456,27749,1145323788,1414418246,1279537201,201330503,1178879041,844385871,1196180528,1091305488,1330005060,808670286,289885252,1145113344,1414680644,1279537201,117442119,1296912195,205999172,1145113344,1414680644,1279537202,184551239,1346651201,808670290,138890308,1380976128,1196180564,1124728834,1162759759,1279546435,201329479,1179403588,827608655,1196180528,1141637138,1330007109,808604750,323439684,1162087168]}],[{"sector":1,"data":[1414680652,1279537201,184551751,1347175748,808604754,172444740,1095763968,1145849166,214860,1329742088,1279546453,134219079,1330401091,1196180562,1124990980,1381256783,1314344015,1330794564,134218051,1398099789,1196180549,1124728852,1414419791,1279547730,3399,2004055149,1802398835,1802134381,-2081649835,1996450028,1354771212,504001208,5290064,2857552,1996423168,112652,221821008,1354256414,1083854848,-16777216,95947894,381177856,-1202708981,-1706033072,85,-1207142657,-1202716665,1344145794,1342197944,27290,209125120,1342179512,504139448,5290064,8362576,1996423168,636940,228505680,146296862,-1801826304,-16777216,179833974,-524791808,-1202708982,-1706033144,175,687747,1996435572,178188,-1404662448,1354256406,932859904,721420289,1183666368,-1202710868,1344146744,1343238328,73626,-373282048,1996423820,-26100,-1073020928,1183527796,149332748,503320760,221821008,-1070903266,1375784122,1347440720,1342203064,1347469355,1342994175,-26032,1183383552,1975520170,1354771225,504001208,221821008,817385502,-6664176,-385875713,1996423630,243724,-1404662448,1354256406,-1936044032,-16777215,-1070880138,-26032,1183383552,-1070903042,-1202696112,-1202716660,-1706032832,368,738096895,1183666368,-1202710868,-1202716660,-1706032896,439,210517635,-12553216,79170678,1183666176,-1202710868,-1706033072,644]},{"sector":2,"data":[-1700104449,460,178256,40606288,1183383552,-1070903042,-1404662448,196628502,12079104,-1667608575,-1207959550,-1706033127,515,913686539,-1700104449,527,1358841481,1342178232,1342177720,125594,-25755904,1342177720,33200720,1996423168,309502,112720,35691088,565706752,-6664192,184549631,-15108672,1637526134,-1996488702,-1202651578,-1202716662,-1706033151,65535,503329208,2799696,666390558,-1924129280,1343663174,1342179768,16777114,-1404662528,-26032,1183645696,-1202710868,1344143414,16777114,1975520000,-1435041981,16777114,45633536,-6664192,-1996488449,922746438,196610278,1183666176,-1202710868,-1706033072,65535,738096895,1183666368,-1202710868,-1202716664,-1706032896,65535,-5605633,-6683530,-352321281,-1740206796,244338710,185295080,-14256704,-1928714698,1343658054,16777114,1975520000,-1740206828,-6664170,-1929379585,1343658054,16777114,-1740206848,-1070903274,-1706012592,65535,-1183465461,168312451,-16157696,-1710618570,800,120864387,-16157696,-1710803914,65535,124403331,-16157696,-1710790090,816,168836739,-16157696,-1710616522,832,164904579,-16157696,-1710631882,851,209731203,-385649408,922746235,-6681472,-385875713,-443810449,705117,1167087646,518818645,-326903666,205949732,1946158653,-385649029,20775227,1024291840,477364226,1946158397,14805284,-16222465]},{"sector":3,"data":[1996424822,-26098,-1070923776,20572569,721502696,-6664000,-352321281,242679789,-16353537,1996425334,20506634,1996479723,-565801714,-6664170,-16776961,1183649398,-397404450,1996423743,-565801714,-6664170,-352321281,242679733,-401967361,-1427439053,204226179,-16223232,-6681994,-2097151745,1946159742,142508949,-7375616,-1710471626,65535,922715371,10095112,-16777213,-6680970,-1996488449,-1202660282,-1706033147,65535,-6664110,1375731967,-26032,144900096,242679562,-1696827649,65535,170276607,1342182840,1347469355,-26032,904462336,172395519,1946160189,242679574,-15960321,1996425846,108461832,16777114,-11080960,-1207376330,1385758722,242679632,185087743,184956671,-555217264,-17110768,687747,-236387467,641138686,82614794,-437714944,998910,32047989,1392127,1374225269,1457663,289265268,-385649407,306052883,-342985727,49120148,1562371467,707149,-1275051,-1710610890,65535,-1017256565,-2081649835,1187448556,-1962934020,-995948986,138840838,-1962345821,-1073019834,20787316,1023964160,645136386,-16715543,-1207294410,-1706033150,1333,170276607,1342177720,16777114,973522688,-385875712,1889599693,-1037330169,-930350895,-1727510901,-120470997,1183433003,159162878,-775804007,-1949791240,731448902,737726914,-96040511,16678531,1187448189,-2097151746,2097216126,-96024827,922681344,1996425766,-92864514]},{"sector":4,"data":[124794623,159135487,-1705983957,65535,3817091,-2090306560,-16732610,922690421,45615654,-390574080,-1070903293,-459648944,184549381,-1207601728,48955393,1183432747,641138684,112650,-26032,726663168,-1706012480,65535,108314635,16547459,922687348,381159246,-1202708981,1344146744,1342189752,50586,973522688,-1962934272,146955749,-326413056,-1962742653,113401317,-326413056,-1962611581,19727430,670976,1038680950,-1816132863,1554513710,-432603385,440328,-11513191,922682998,922683918,244320780,-384883480,922681624,62392550,1347590400,-16353537,-16197578,-351742410,-432603167,309256,-11513191,922682998,922684004,-890566046,149305087,-1728052296,1996443730,540475142,506920712,-4986104,-1207376330,1385758724,108461904,170538751,170407679,922721515,129501414,1347590400,-16353537,-16154570,-351699402,-432603259,571400,-11513191,922682998,922683628,1843988714,-432603137,636936,-11513191,922682998,922684448,1441336350,-432603137,702472,-11513191,922682998,922683178,1038681896,108462079,103578,-28931840,505936,-25755824,1354771280,474778,1975520000,112645,-1070923029,-26032,787152896,149305087,-1728050248,1996443730,1949761286,1916206855,-17372921,106563133,112592497,115672781,121898773,111085192,-443873539,311901,1167087646,518818645,-326903666,205949702,1946226749,17906952]},{"sector":5,"data":[334047860,112641,128162384,1183383552,-6663942,-16776961,-1766322570,1996443648,-25862,28835840,15657216,1024083595,729022465,1962934845,13560067,1962972733,242679781,1342215864,1343125247,532122,1975520000,112645,-1070923029,-2084377776,822334,28839029,204251904,140352080,-1070923776,2130884688,-1706012007,2155,141662800,1996423168,9877518,-26032,1183383552,-1701162758,-1207959545,1344143444,503333816,-92372144,-1207602176,65732668,-1946140488,-1706011942,65535,-2080618871,822334,-1070920843,1342975139,261018,1354771200,-1719729992,-6664110,1342177535,16777114,-58817792,-16091904,-6680970,-352321281,-18411,1751120,1354771280,503340216,73308752,1996423168,1354771214,577178,-15800064,-310132693,535137026,181030237,-1873273344,-326412987,-2116514274,17894526,1996427637,112654,-26032,28835840,-2130056448,17828990,-1070861196,-1962742397,1297948645,503319242,1430622296,-1910575989,619480024,1024214667,427032848,-924253322,146689,255663220,1025864704,57999381,-352255767,242679560,16777114,-373282048,1996423623,-26098,28835840,28961024,170276607,504207032,1354771280,16777114,242679552,383665805,63412816,1996423168,-562626802,-1864337665,26798094,-1928431873,1343675974,253850,-1195382016,1344145184,-16222465,-6683018,184549631,-13142848,-1097200010,-1996488695,-2091852730]},{"sector":6,"data":[47166,28837237,721611520,12100544,-401698736,1996423720,-596181234,647578,-1137246464,68196870,1996423168,168270350,1183383552,1996443868,142016270,-1710852353,65535,-26032,1996423168,-596181234,281754,-12130048,-15829249,1996425846,142016262,16777114,-1371634944,58064640,-54295,1838812790,-1996488694,-11477946,-4714890,-4330497,-1710631882,2616,1342179000,672154,-1706012160,2639,-16132957,-1710456778,1051,1342178744,678810,174891776,174986889,1050300498,-1560281084,146279552,815419392,-1560281084,378079478,-974583560,242679806,271258,-599357184,17464963,-1202702475,1344146304,209729279,779674,-1237417216,225705984,-1193511169,1344146304,798362,-1237417216,91553792,-352321096,-1547687166,703135926,176063487,-385649662,-957808864,-401698808,1996425359,-401698596,233374084,18038271,339580788,-385649407,20840206,-385649406,54394584,-385649406,887750277,49120254,1562371467,707149,1167087646,518818645,-326903666,142016260,150484735,150353663,783770,142016256,1342177720,786842,-62470400,1996423168,124565512,-4698082,1183535359,-754732548,180618720,632836126,1687834624,-16777205,-155711370,-1202708982,-1957625857,61996102,1510334675,-1202708985,-1706033115,3099,-2080618753,2080570494,-1371634763,141950720,-1878521624,131196942,16533191,-60912896,-2016943151,-62604]},{"sector":7,"data":[-2080618753,2080832638,142016492,-1377300848,142016256,12072703,568856208,-1371634944,259325696,-16222465,922684022,244318382,-2096832280,-443874579,-900899553,1478361094,-1957345904,-661774612,-1207404801,1344145184,209729279,16777114,142016256,150484735,150353663,16777114,142016256,1342177720,16777114,142016256,503825080,-18352,119584848,632836126,-6664192,-2097151745,1946158718,142016269,503783608,-26032,1996423168,119584776,922701854,244320724,-2096613400,-443874579,-900899553,1478361092,-1957345904,-661774612,1443949699,11419267,-15567617,-1710796746,3185,183514879,16777114,121020672,-1578088823,1183385408,809403388,427032582,120995459,-2096792052,201799214,120995459,-955878144,201799174,121020672,192153145,1996444788,-130613498,-164167928,228956680,1996423168,181712902,922701854,-1986392960,-16777203,28837494,-1785049088,-16777203,2122516086,92081392,-351841608,205436931,1347607180,1358954424,504026296,2472016,231119440,1689845760,121676032,-1980106855,-955826154,62022,-772639093,1954843622,914635019,-1593084665,1178140846,-385649422,1586167996,-1846798,-1928907081,-1873742778,111929358,-772645237,918520803,763169287,385369741,12236880,1905938462,-1929379827,1343682630,385107597,-26032,1183645696,-1924131084,1343682630,16777114,108461824,-1309522293,98620163,1344145104,209729279,689562,108461824]},{"sector":8,"data":[1342177720,728474,108461824,150484735,150353663,725402,108461824,385107597,-18352,-230257840,-523041871,503762949,2472016,188979792,-1365180416,-230278912,1996428405,-230257914,-523041871,503762949,177838672,1988820992,-1947807246,-1996015996,-16026492,2122576454,58525426,-1946218007,916713542,-62485753,1577533603,-1962742397,1297948645,503317194,1430622296,-1910575989,149717976,637951684,163713,-385649663,-2094661396,1946748031,14870787,11419267,-11176705,-1710610890,3989,1358448265,170276607,11417343,16777114,-1373730048,-941371136,-16026489,-1375287297,-256,244381814,-141336,-1207294410,-1202716670,726664168,-1706012480,1471,170276607,-1694992641,2477,956780705,1963738630,1095711,248420944,11075584,-2096335744,822334,178340213,-1587811574,1458244336,957018273,1963738630,1095696,250059344,11075584,-337677184,168468794,205915705,280500853,177885184,-1459617777,-881491968,210517635,-1591970816,451610300,956742817,1963738630,1095700,-26032,11075584,-1583123072,1185089360,-373282036,1589903738,2139170310,1962999810,122724848,205915705,-257881740,1174812938,-1579256564,1183383726,106874106,71797542,1962943805,10676483,1946166845,2571535,-1394015371,2637056,-1242863500,11419267,-1592691201,104400720,58002502,-1207922967,300613635,956780705,1963738630,440325,146277355,-96040704]},{"sector":9,"data":[170276607,624538,-129595136,16533191,106873856,654067339,1996900153,14280963,75465510,-385649627,1325334660,122724858,205915705,-1070900107,1048796139,1979646126,122724622,205915705,95961716,-1582372096,104400720,91556934,-352319560,637088,1048812523,1979646126,122724759,205915705,1927873396,-339727361,-1371634812,57999104,-1577091607,104400720,-1099625402,-385875272,62455659,-96060672,1352733822,1174812935,-1207601908,65732610,-1996487240,1589967430,2139301382,745875204,-1577433345,104400720,91556934,-352320840,374787,2113553979,122724627,205915705,-1070922635,62391275,-96040704,-493825,-16112074,-694486410,-16777207,417987654,641138687,-126419190,955546,112640,-1962742397,1297948645,503317706,1430622296,-1910575989,216826840,-1207273729,-1706033143,4305,-6664110,-1996488449,1451881542,175570934,1342179000,664986,-1706012160,3254,-1980217719,1996487254,-734593270,288135689,1183383552,108954620,-385647360,2122514693,58589702,-1711211287,4626,303602256,104529920,259328550,122697471,1189786,122724608,-15972701,-16305098,-1710790090,4461,-16091393,-16318410,-16317898,-1593359818,103483142,-11532542,721892406,-11513664,-16301514,-1207483338,-860225504,-1706012160,4513,120862463,168834815,1194650,175570688,117978879,118109951,121779967,721882785,1342638598,120862463,1347469355]},{"sector":10,"data":[121779967,121911039,-1174396744,1347551436,1207962,175570688,721880225,1342706694,117585663,135542527,721882785,1342636550,-1174396488,1347551472,1174938,175570688,117454591,117585663,135542527,721882785,1342636550,-1174396488,1347551472,1234842,175570688,117454591,117847807,-2097083415,2097350270,18344195,84311683,250151806,-26111,-1706033152,65535,170264123,922685301,-1231418640,-1593835511,1185090288,876019468,1781989127,310090247,1996423168,272039690,305594119,1110900487,118923527,118621739,876019536,1354771207,1110900560,1144454919,2144263,1375784122,313498192,922681344,922683188,-6682096,-16776961,922684022,922683160,922683162,513869634,436611847,922701831,-1070921932,922701904,922683202,548931396,13416960,-6664110,-16776961,346098294,335948551,922701832,922683154,513869844,302394119,565727239,15776256,-6664110,-16776961,922684022,922683152,922683154,513869844,302394119,565727239,15776256,463097938,-16777197,922684022,922683152,922683158,922683202,565708972,15776256,-912633774,-16777199,1996425846,-193527818,1097626,175570688,-362753,-660932490,-16777200,1996425846,283810556,-310181888,535137026,113921373,-1873273344,-326412987,-958886370,738564358,1139281552,94216192,121021336,-1744462688,-1610139485,-1550318177,-310180038,535137026,1439386973,113699979,-1876294247,1632270]},{"sector":11,"data":[-1744461920,-1610138461,-1550318178,-1667168450,121676549,-1017256565,1167120524,518818645,1465309326,-1962567519,-1962567138,-1962566642,-133849578,-1734139443,-1709274875,-1676769019,-1642690299,47109,-789118349,-310157729,535137026,516640093,1430622296,-1910575989,82609112,-1996077429,1183579206,179935496,-2131101952,1586180290,-15234820,1183579206,-101213944,185091721,-1948287040,130481246,108461824,-2097148952,-443874579,-900899553,-1957363708,116163564,71732054,519849609,-26032,1174601728,1183402236,-1961038854,126549086,-113016,1988885574,-2012968198,-2192633,1183513166,-1962440450,1178204742,1591505660,-1034033781,1478361090,-1957345904,-661774612,1443425411,638082756,-1960429685,-970259385,653805193,637945739,-1996339413,1996487238,108461836,1392794,-62486272,1443657471,638082756,-16615425,922744950,565708972,15776256,-275099566,-16777196,-1000993674,-1960441762,103482951,-11532116,922744950,565708972,15776256,244994130,-16777195,-1000993674,-14284706,922681975,1996425236,2210042,1375793338,355834448,1996423168,140428300,71797542,135530027,2013210192,339148546,-92864760,-1174396488,1347551472,1244058,209125120,-1694730497,4930,49120094,1562371467,576077,1167087646,518818645,1996478606,175290374,951603230,-1202708979,-1706029008,1541,-1962742397,1297948645,503317194,1430622296,-1910575989,82609112,-15698177,1996426870]},{"sector":12,"data":[175570700,-16222465,-6683018,-1996488449,-12714938,721974783,244338880,-1946181144,-310117306,535137026,214584669,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,-838416597,-1996488699,1459994638,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-370874361,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,5719,-1017256565,-1192457387,-1957691328,1861682246,-1902489594,-1962934250,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,5789,-1017256565,736922453,1996443840,-26108,-443875328,-1957313699,74907628,16777114,1575324416,-326412861,-1710983425,5894,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443875162,515621725,620462342,1393062662,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1074131599,-1007912629,567095476,-1023028061,97388174,741772070,889239552,512303565,109839810,521012676,-1171980104,567088608,336497462,908256006,102106821,-617358708]},{"sector":13,"data":[304021302,-385649914,-986251703,-1945757178,244698,304021302,-1021372922,855643321,-225970469,74711301,567099060,-1007492541,-387151019,1996423243,1042436,-1017256565,115600690,-657331503,1438907106,1122561163,-29235200,175432714,294528,1187382389,-987824636,-1207582186,567092480,336497439,-1157111034,520028162,1183516178,-850611196,103070497,103086977,-11335565,1128487703,-1144786197,-75430364,141755942,1528299347,-219462845,50353347,51291649,50358784,50625793,50359040,50523137,50359296,50894337,50360064,50516737,50360576,18212865,50331904,50519297,50360832,-16542208,50337024,18235393,50332928,-16628224,50337280,18246913,50333184,-16662528,50337536,18250753,50333440,-16723456,50337792,-16220416,50338048,34810113,50331904,34394881,50332160,18263041,50334208,-16124672,50338560,51144705,50363392,-15696128,50338816,-16134144,50339072,50938113,50363648,-16176640,50339328,-16179968,50339584,18269185,50335488,-15836928,50339840,51735553,50331904,34813697,50333952,18276097,50336000,18282241,50336768,51777793,50332928,50571009,50333184,18292993,50338048,51283969,50334208,50669569,50334720,18221825,50339328,33830657,50371072,34917121,50339072,51452161,50337280,51446785,50337536,50419713,50370816,50801921,50371072]},{"sector":14,"data":[50453761,50371328,34693121,50340608,50414081,50371584,50796801,50371840,50437633,50372352,34908417,50343168,50941441,50341632,50948353,50341888,50397697,50342144,50715137,50374912,50505473,50342400,16923905,50346496,17319937,50346752,50859009,50375936,51448321,50343424,50337281,50376704,51427329,50377728,50638337,50345216,50699265,50345984,50865921,50379264,34221057,50348544,33755137,50349056,34216961,50349312,51267585,50348544,51417345,50349056,50860545,50349312,16930049,50353920,50855425,50349824,17650433,50354176,17654273,50354432,18104833,50354688,18214145,50354944,50952961,50351104,51169025,50352384,51241473,50352640,51182081,50353408,51747585,50353920,50897153,50354176,50513153,50354688,50835969,50356480,50846977,1828741632,1937208180,1835757164,1167087646,518818645,-326903666,309252,1940048,-2136801280,1354771207,10650,206873344,1342179256,13722,210412288,1342179000,16794,148546304,1342179512,16777114,183411456,1342193848,1342184120,16777114,-62486272,74825739,1793835051,-1202667477,1385791232,-26032,1586167808,239569404,-1207535873,1344143460,16777114,-60912896,-1207154807,1200160876,341806098,-1996077429,1204226631,-956299760,-956300537,-64953,-16496697,7649535,-1944696951]},{"sector":15,"data":[-1014294433,-6664162,184549631,-6458176,-6620042,-1207959297,-310181887,535137026,46812509,-1873273344,-326412987,-2082959842,-4709140,-17665,922701906,127535334,-1560281087,378079978,-4715796,-17665,922701906,530188518,-1560281087,378079614,-4716160,-17665,922701906,932841702,-1560281087,378079016,-4716758,-17665,922701906,1335494886,-1560281087,378080286,-4715488,-17665,922701906,1738148070,-1560281087,378080006,-4715768,-17665,922701906,2140801254,-1560281087,378079090,-4716684,-17665,922701906,-1751512858,-1560281087,378079446,-4716328,-17665,922701906,-1348859674,-1560281087,378079470,-4716304,-17665,922701906,-946206490,-1560281087,378079566,-4716208,-17665,922701906,-543553306,-1560281087,378079842,-4715932,-17665,922701906,-140900122,-1560281087,378079846,-4715928,-17665,922701906,261753062,-1560281086,378079262,-4716512,-17665,922701906,-6682394,-1560280833,378079396,-4716378,-17665,922701906,1067059430,-1560281086,378079400,-4716374,-17665,922701906,1469712614,-1560281086,378079784,-4715990,-17665,922701906,1872365798,-1560281086,378079788,-4715986,-17665,922701906,-2019948314,-1560281086,378079756,-4716018,-17665,922701906,-275117850,-1560281088,378079466,95946988,-1550168064,-1560281086,112723988,-1348841472,-1560281086,45615276,-1147514880]},{"sector":16,"data":[-1560281086,347604802,-946188288,-1560281086,330827588,-6664192,-1560280833,-1070920564,2147334224,-1706012007,745,721906339,-55029568,1347590527,16777114,168862464,-1710852353,787,1358710409,16777114,120890112,-16353537,748354678,721420291,1419399360,-1996488701,-1924072378,1343675462,16777114,1354771200,-1694730497,893,-1545845109,1183517296,206742504,-150991432,-1559597010,683149692,1378809600,124822284,-1710852353,65535,1358710409,1342178744,275098,-1706012160,65535,966414418,-1560281084,1996425736,-59310330,16777114,105286400,-16298333,-1207376330,1385758721,108461904,183252735,183121663,16777114,170304256,1979711293,-339727612,112643,-1962742397,1297948645,503318218,1430622296,-1910575989,82609112,-1207535873,-1706032752,991,-16297821,-1699215754,-291876863,-1560281085,1996425968,27572230,66951760,178454528,108461834,1342290104,16777114,113025792,-1559801695,1048775750,1962937484,-1137246436,-1001466,-1137246384,-6664186,-2147483393,1347615970,16777114,440320,71670352,1347551232,283546,164930304,1342178744,286618,174891776,174986889,-6664110,-1560280833,146279552,-6664192,-1560280833,378079478,330828024,124035840,-1559798621,-1264384068,128754439,-1560272968,1621297000,130065159,-1559775069,113706928,6424490,-1560253768,-1365047462,7256071,-1559776605,1991771998,123904768,-1207454045]},{"sector":17,"data":[-1163722630,124166919,129894087,-1900543870,119317248,-1207495517,413335686,118530823,118621895,113704972,2230046,-1560275016,379782938,108461831,503818936,83597904,1996423168,123385862,144330782,-16777211,-1296562570,-1706025465,1301,-1207535873,1344145250,336538,108461824,503823032,87005776,1996423168,118536198,1016746014,-16777211,414713462,-1706025465,1532,721884321,-1559805434,279119640,145531143,118621697,50796193,1208527878,-1593369949,103352492,330827550,181838592,-1559572829,-492631354,114991878,-1207512413,-626851809,181576458,-1559573853,-559741210,114729734,114296519,414711824,180658944,-1207511901,-660406244,180921094,-1560271688,-593294644,2668550,-1559830365,113707728,3147492,181667527,113705010,4066008,-1560262472,77793036,4241415,-1559820125,113706752,788226,118359751,397934626,118137600,-16316765,-793246090,-1706025466,1545,-1207535873,1344146116,399002,108461824,503765176,102996560,1996423168,181188614,815419422,-16777210,-524810634,-1706025466,1597,-1207535873,1344146132,412314,108461824,503775416,106404432,1996423168,118011910,-6664162,-1593835265,103483140,144901954,117482247,17345697,-1593376250,103483146,-1556084564,-1398733050,235284744,227981319,922701854,922683088,922683090,922683108,-1315305754,-1207959546,1344146304,1342187960,1342197432,1342188216,1342199480]}],[{"sector":1,"data":[16777114,108461824,504070328,115579472,113704960,6948640,119801543,113705090,4982562,119932615,1996423256,119584774,-291876834,-16777212,-1207376330,-1202716666,1344145346,1342197944,16777114,-26112,-1917321216,-1202708992,1344143485,1342356664,470170,91761920,312727799,10926091,-1783082978,-1202708992,-1706032652,65535,-150738899,113157080,168441599,1342177976,1342228664,1342484664,-1705983957,1892,112998143,1342177976,1342203064,1342407864,-1705983957,65535,168441599,1342177976,185743103,1342177720,495258,-1137246464,178182,-1103691952,112646,-26032,2025324544,302394117,-6664181,-1207959297,103482344,-1706031426,65535,-1962742397,1297948645,4391626,19791874,262399,21364738,327935,24510466,393471,26083330,459007,27656194,524543,29229058,590079,30801922,655615,40239106,721151,41811970,786687,22937602,852223,32374786,983295,33947650,1048831,5308675,327681,35520514,1114367,37093378,1179903,12779779,458753,38666242,1245439,18219010,1310975,117309443,1704191,69140739,8847363,69796099,8912899,57147651,10092546,128450819,1310723,36110595,3342337,127598851,11010051,118554883,3735553,50135299,3407874,6947075,11337731,8192259,11403267,47710467,11468803,116982019,11534339]},{"sector":2,"data":[43450627,11730947,56688899,11796483,11993347,3735555,57606403,4325378,125370627,4063235,122421507,4194307,49545475,4325379,51052803,4456451,110559491,4718595,10616837,65791,16449541,131327,14876677,196863,19595269,262399,21168133,327935,24313861,393471,25886725,459007,1179907,5701634,27459589,524543,29032453,590079,30605317,655615,40042501,721151,41615365,786687,22740997,852223,52494595,6094850,32178181,983295,33751045,1048831,35323909,1114367,60621059,5832707,36896773,1179903,63963395,5963779,38469637,1245439,18022405,1310975,10944514,65791,16646146,131327,15073282,196863,113115395,6750211,1167087646,518818645,-326903666,12761172,-1128771554,726670848,-1298509632,-1996488704,-1072976826,28837237,721611520,103850944,503369656,13219920,-944222178,-1202708992,1344146166,1342178232,26266,14465024,-692563938,-1202708992,1344143572,503803064,243792,8624720,-357040128,-1202708992,1344143588,503374264,122861648,129519646,-1600499712,-1207959552,1344143608,503378616,15710288,1052266526,-1202708980,-1706033145,65535,503382968,16627792,-1070903266,-26032,1183383552,1958742956,81162,37558644,-1203538944,1344145128,503818936,15112784,-256376832,-1206719738,1344145136]},{"sector":3,"data":[503818936,16095824,-390594560,-1202708986,1344145330,66714,116963328,-1162325986,-1706025465,277,-122149909,-1202708986,1344145322,74906,115914752,-1296543714,-1706025465,65535,-351866696,641631183,292814858,170276607,1347469355,1342177720,16777114,49120000,1562371467,1478413133,-1957345904,-661774612,-15668093,28837494,1872384000,-16777215,45614710,-6664192,-2097151745,-16732610,922691188,-6682074,-1996488449,-11472826,-16112074,-1879003594,72542222,170276607,-1695516929,65535,721778872,1342902790,1358055053,120218,18397184,146296862,-1924129279,1343681094,126874,-62486272,721676472,1342619142,1358055053,16777114,-58817792,-1206029312,1344143665,503390392,-230257328,-6664170,184549631,-1207601984,48955393,1183432747,1975520252,108461832,16777114,-18432,1751120,1354771280,503396792,-26032,-310181888,535137026,46812509,-1873273344,-326412987,-1948742114,138218054,-385649152,-1073544983,-1476448621,178324249,105265418,780343669,-2129392878,-938798530,-385647616,113705161,13110034,-2097102615,268877358,113131139,-385647516,113705137,6555326,-1593792279,1178143242,-2095483642,336269830,185745025,58655920,-956264215,-1341451770,8907012,113116803,-1103199984,2114159622,-1106851974,-352091130,168468850,1963345465,305037576,-352257525,-1104248434,-352270330,168468895,1963345465,302416136,-352257525]},{"sector":4,"data":[-1106869841,-352270330,168468928,1963345465,138840840,-351595869,138840882,-351879517,168468778,1963345465,-11081469,-1577096215,1178143242,-343641082,-2097001832,-788350718,-1744639742,251855107,-1962698749,1185089094,45633548,178343936,105265418,312542581,-1593578741,-1202714946,-1706033151,65535,956959393,863307334,-1207142657,-1706033151,1049,-1207142657,-1202716671,103482744,726666002,-1706012480,1472,721778872,1342902790,16777114,-1207047424,103482344,-1706031426,65535,-1962742397,1297948645,503318730,1430622296,-1910575989,82609112,16533191,-62485760,-523041871,503762949,142016336,-1710852353,65535,91537419,-335788405,-62456052,184319619,-4663428,49120255,1562371467,313933,1167087646,518818645,-1957242738,154994246,-385649152,-1073544834,-1476448621,1048774086,1979646126,142016284,1342177976,91034,175570688,-16222465,1637484150,-352321532,-1371634876,830210816,11419267,-13992187,1996425846,-1372127480,-401698816,-6684260,-16776961,2056915574,-16777211,1996425846,108461832,16777114,-1373730048,-941371136,-16026489,105286655,-385831261,1048772860,1962868910,-1371634800,-579076096,11419267,-2719998,1996425846,-1372127480,-401698816,-1209335480,11419267,-2090566656,33599038,1996447103,105286410,-523041871,503762949,87792208,2122514432,208995846,11411083,-2013273135,183174966,11411083,-1879055407,915081014]},{"sector":5,"data":[-422510418,11568267,121013305,-2067331458,1846,11417227,-1132206383,2097153846,-1333490847,914655488,-11015417,1996425846,-18424,-401698736,-1108738350,-1371634944,-411303168,11419267,-2064635,1183517302,-754732794,114296288,1922715678,-2097151995,1963460222,-1373730036,-1847040,-351848825,-1373730038,-1847040,-16304497,-402608586,1996423457,105286410,-523041871,503762949,-26032,1996423168,95197706,1525350400,11419267,-11307777,1996425846,-1372127480,-401698816,512426064,-472842066,192186311,113770495,-65362,-1710590209,65535,-1207404801,-1202716670,726664168,-1706012480,65535,67769579,67765258,75105402,77595770,85787808,-2090990307,-443874579,-900899553,1478361094,-1957345904,-661774612,-16091393,-1710456778,65535,425603,2122529660,897516038,-1207872280,-1202651137,726663198,1347440832,138906,175570688,117454591,117585663,721880225,721879046,1342706694,721882785,-351862266,108954413,-2093646845,2131035774,20375599,-16091393,-16314314,-1593372106,103483156,103483152,-1588590572,103483166,-1202714862,-256245727,-1706012160,65535,-1962742397,1297948645,1426065098,1183575179,212228,71110772,1026520064,57999365,-385835799,1048772795,2114717500,1007077126,-2097151737,17251390,113706621,788284,1342178488,-369113880,1084293271,79272199,200931072,-1592953390,-1181153472,-101253020,225825291,-1727577951]},{"sector":6,"data":[-150892359,1976699897,1010729763,477430279,121519747,-955875811,17251846,1044284160,1434255623,121505479,1307246621,121380491,1050797009,1116158215,-955876095,17251846,1044284160,830275847,121380491,-2020875311,1050870082,-2128418041,856113214,-955875832,-1140375546,1077838087,2080881671,-9901821,121636551,1609107507,1575324671,1426064066,113699979,-1607662183,-1650325706,121151493,-1610244958,-1616771270,127769093,-443875328,-1957313699,-1727609108,1017129733,94347783,-1576583520,1084294558,94151431,16777114,1575324416,50337731,50731265,50360064,-16643840,50338048,50413825,50363648,-16667392,50340096,-16493824,50340352,-16505088,50340608,-16495872,50340864,-16287232,50341120,50558977,50334208,50552833,50334720,50566145,50336768,33977345,50339072,33945601,50343168,50562305,50374656,16784129,50346240,16795905,50346496,16892161,50346752,50547713,50347520,50429697,50348544,50437121,50349056,50385409,50350592,50579457,50351104,50642433,1828737536,1167087646,518818645,1183570062,17841420,289212276,-351177727,242679582,1342181560,-1207933464,300613633,-15829249,280496758,-605532160,736946945,49120192,1562371467,707149,1167087646,518818645,1183570062,17841420,289212276,-351177727,242679582,1342189752,-1207950872,300613633,-15829249,817367670,-1746382848,736946945,49120192]},{"sector":7,"data":[1562371467,707149,-2081649835,1187469036,-16776962,-16193994,1183646838,-1202710868,-1706033072,224,91602955,-352321096,-1983894782,1996488262,15120390,-1404662448,-6664170,-2097152000,1962999422,-432603365,71731976,1183666240,-1202710868,-1706033072,607,91602955,-352321096,-1983894782,1996488262,16431110,-1404662448,429543446,-1929379839,-1705989050,65535,-1207535873,-1924136720,1343663174,80282,-1404662528,1689800726,-1706025469,852,-1207535873,-1924136934,1343663174,16777114,-432603392,309256,-1202695527,1385758725,27040336,1183383552,-432603222,-1449504760,-1560281087,2122517812,175440126,28875344,-1039466496,28837237,721611520,-28931648,149305087,-1727773045,-1037319629,-754973511,734147576,1385775298,440400,-1706012007,65535,-5618039,1342760502,16777114,229417728,16678531,-1706030475,65535,91603467,-352321096,-1983894782,-4653498,-17665,-476426158,-1560281087,-4715936,-17665,-6664110,-1560280833,2122516712,242483454,-1207535873,-1705967617,666,1996426475,112646,-26032,-443875328,311901,-2081649835,1187468524,-2097151746,1946224254,23456003,-1207404801,-1202716646,-1202716659,-1202716558,1344145442,16777114,1614216960,-26102,-1039466496,922708341,1183516902,591108,-1404662448,1354256406,-375762944,184549378,-1207601728,48955393,1183432747,1958743038,142016264,-335544392,142016283]},{"sector":8,"data":[380389005,221821008,817385502,479875072,-16777213,-1070921610,61381200,922681344,-1399190220,-16777214,-1710379978,696,-16713239,-1710596042,916,1342710456,16777114,574521344,1467285512,149305087,268729987,649594229,-1207702784,-1924136890,1343663174,1342210232,16777114,1975520000,112645,-1070923029,201213577,-16026432,-6682506,-385875713,1996423330,-1404662520,951603222,-1202708979,-1706033104,65535,-1207924247,1344145442,212122,-2133292288,1544036799,582492788,-1706025464,65535,-1082074997,1949960225,136493071,1740132382,-1706025469,65535,149305087,-1728052040,1996443730,75399944,-1593215696,378210468,132843686,-1962348895,1376317462,-26032,-1073020928,183051892,108954623,-14846718,-1710410698,925,229390079,16777114,142016256,-1705983957,65535,-1034033781,1478361094,-1957345904,-661774612,-1960645501,272436294,1023898625,292815121,1996432619,1095694,7661648,-352321096,242679575,-16091393,1996425334,1095686,36497488,-1070864661,-1962742397,1297948645,503319242,1430622296,-1910575989,585925592,1024214667,125042960,1946227005,-14357743,817368694,669536256,112640,1996429291,175570702,-16222465,817366646,-538423296,736553729,49120192,1562371467,707149,-2081649835,1187470060,-1207959298,-1202716670,-1706033151,65535,185232035,-15174208,-1650850186,-1996488700,1996466758,1354771206,306074]},{"sector":9,"data":[-11015424,1996424822,43051012,1853210635,174733055,460442,108461824,328346,-1438217984,721843967,563761344,-16777211,-1962351050,50660422,1183666176,-1202710868,-1706033072,1367,91602955,-352321096,-1983894782,-1072955834,1996426100,50567850,837353472,-1435042047,380389005,221821008,817385502,-1885712384,-385875966,1996423448,-26106,1183383552,108461990,1358952632,122566399,16777114,-1502150912,1342177720,394394,1312227072,1354771207,16777114,108461824,1342233784,504114872,91658832,922681344,1183516902,263428,-1404662448,1354256406,-1785049088,184549381,-1207601728,48955393,1183432747,108462078,1342236344,380389005,95722064,2122514432,494207230,149305087,84166283,-1924136955,1343663174,1342197944,381850,1975520000,112645,-1070923029,-113015,-88603018,1183666176,-1706027348,1522,16678531,922688885,1183516902,394500,-1404662448,1354256406,-1533390848,184549376,-1207601728,48955393,1183432747,108462078,1342177720,380389005,110598736,2122514432,242483454,-1207535873,-1705967617,1810,1996426475,112646,33987152,-443875328,311901,-2081649835,1183536876,81162,37581684,-385649408,339542223,-385649664,2122514652,1567949064,-1207535873,726664201,1347440832,16777114,-1438217984,1979711293,12249347,174733055,16777114,-1194816768,1861681281,-1983839318,783854662,-1957683700,1344187462,483738]},{"sector":10,"data":[1781989120,-26102,1996423168,14465036,204388432,-1013297122,-352321536,209125241,1342182584,1342441912,1347469355,114203216,1183383552,-49750,1996429428,1357836,67811408,-1435041968,504094392,37329488,922681344,95946982,1347590400,-2096335105,1963983998,156147977,156243595,-1465841685,-1441363192,-1706012152,894,1946157629,1781989141,-26102,1996423168,112652,33069648,-443875328,705117,-2115204267,-956129556,65094,210517635,-1207143168,748879873,-6664180,721420543,45633728,1347590527,16777114,-6664192,-956301057,16687238,2122747136,-1202710785,1344145442,16777114,2122747136,-1202710785,1344144233,495258,2122747136,-2091903233,1966081150,182499333,-1632107541,1390054413,19438160,-2037579776,1343684478,-8485235,-6664170,-16776961,-1710692298,578,57983499,-2097115159,822334,-1070920843,1342975139,725402,1354771200,-1719729992,530206802,1342177291,730522,-432603392,71731976,1342179589,-14121331,1354256406,-996519936,184549380,-1207601728,48955393,1183432747,108462078,290714,105285888,112720,86874704,2122514432,175374590,-1710852353,2597,1996429291,679906566,-1202710785,1344146744,1342189752,325530,-373282048,922682091,-1550186264,-1929379838,1358921350,1342240696,-25917811,-26032,-2037841920,-2037514372,-1202651266,-1706032277,2344,130472075,40233216,-43874675,-2037559274]},{"sector":11,"data":[1343684478,588442,1652985088,-1924131075,385782406,124885584,-2033778688,-401,-43874675,-26032,-1073020928,518587253,75399938,-972589776,16640390,-2033842709,-1929314842,385737350,75400016,-1207601904,65733485,-1945931080,-1706011942,65535,57982987,-2097026839,16687294,783817333,-1924129268,385782406,159357520,783810560,-1706025460,2533,268729987,468255604,-410612479,646351357,-1667608321,-16777207,-1191237962,-1706032262,2445,-26048887,130472075,647924480,4161791,-1897331851,1921420033,1926773758,25422083,174733055,-150961736,100573358,-1202716543,-1706033150,2624,-8747383,58048523,-1560235287,-2037577110,1343684258,-14252405,-627421154,-1929379831,1358865030,1342405816,655258,-958887168,-2037579769,-1705967966,2586,-1207535873,-1202716652,726664193,-2037559104,1343684258,691866,1781989120,177707530,-930414592,-150961736,67018926,612796865,-1924129025,385782406,179542608,-2037710848,1344208676,704154,1781989120,180853258,-2030108672,-1224737120,2126053158,1570394115,-1996488694,-1946212730,4161752,619250549,646381567,649527295,175479551,350814208,108462079,319130,12314880,174733055,-150961736,100573358,-1202716543,-1706033150,65535,-8747383,-713768949,-1928697181,-1979848058,1358898822,1342406840,16777114,646351104,-2133292033,74711103,-14252289,-14240001,180634,108461824,1342182584]},{"sector":12,"data":[1342439864,-1957642197,520038022,184523344,922681344,1637485162,-1962934266,8501448,-23023881,-2037792509,1344208676,-23951731,2107265046,-1962934266,520037510,-26032,922681344,-2036725142,-16777210,-1912692602,1358853254,16777114,2089191680,2092860415,57999615,-2080534039,16687294,1996428660,1357830,67614800,1354771280,-1365618608,-2097151994,822334,-1070920843,1342975139,472986,1354771200,-1719729992,1167741010,1342177287,478106,-1601795328,1575324670,503317698,1430622296,-1910575989,205949912,1946226749,17906951,518721908,-1207011585,-397410288,28835941,-15602944,1996426870,1095690,24963152,-1070863125,-1962742397,1297948645,503319242,1430622296,-1910575989,205949912,1946226749,17906951,518721908,-1207011585,-397410256,28835873,-15602944,1996426870,3192842,20506704,-1070863125,-1962742397,1297948645,1426066122,-327029621,-950665082,65094,149305087,84166283,-1924136953,385841798,8435792,204380752,-1073020928,28837237,721611520,-28931648,-8747379,783831062,-1706025460,3731,-1207535873,-1924136710,385841798,206477904,2122514432,510984446,149305087,84166283,-1924136952,385841798,8435792,238787152,-1073020928,28837237,721611520,-28931648,-1207535873,-1924136700,385841798,214800976,2122514432,242483454,-1207535873,-1705967617,3560,-2101839893,-1706025469,65535,2055638352,-1202710785,-1706033024,65535]},{"sector":13,"data":[-8747379,1721389078,-1962934258,2055376368,-62486017,1586171371,1547665660,130418037,-1927484672,385841798,-62485680,-6664162,-1996488449,-2037515194,1178206074,-2656772,448267894,-2037559296,1343684474,343706,108461824,1342177720,397978,-443851264,311901,-2081649835,1183515372,81158,37557620,-385649408,104661223,1023964160,1853095943,-2097093143,822334,28839029,204251904,223648336,-1070923776,2130884688,-1706012007,3426,224959056,1996423168,75399944,-1207601904,65732640,1342193848,-1996443672,1048837702,1962937484,-1547687157,-1706030036,3457,-1202667477,1385791232,227514960,-1706033152,3477,16678531,1048803956,1962937484,112652,1342975139,902042,1354771200,-1719729480,-778416046,1342177293,907162,75399936,-15895280,115869814,-28915966,166395905,-402098433,1183388281,-1942060034,192217100,748929067,-1046851572,721420295,12079296,1347590527,511898,-711307264,-2097151993,1946222206,142016267,-1710852353,1149,-1034033781,-1957363706,-2098429460,1996445185,1751046,899152,7518288,2122747216,-1706027265,2485,-8485235,152803920,-1098907648,1962999678,-432603334,71731976,1342178821,-16873843,-2135404522,-627421184,184549390,-1207601728,48955393,1183432747,1975520254,10479875,-1710852353,2080,-1929335831,385842822,242915920,-259325952,-8537472,-1926990756,385842822,53058128,-259325952]},{"sector":14,"data":[-8537472,-1928301510,385842822,59357264,-1550168034,-1929379826,385842822,204388432,1016746014,-1929379825,385842822,-24736432,-1706027266,3917,1400225803,149305087,537165443,431490421,-1207702784,-1924136903,385810054,8435792,133143120,-1073020928,28837237,721611520,-28931648,57982987,-40471,-2037578122,1343684350,504182968,3192912,137992784,-1070923776,-1929341463,385842822,-24736432,-1706027266,3884,-25262451,582504470,-1706025464,3938,-25262451,783831062,-1706025460,2198,-25262451,-2037559274,1343684350,16777114,1958742784,2122747317,-1924131074,385810054,142973520,-2037579776,1343684222,-25262451,-1617276906,-1929379833,385842822,2122747216,-1706027265,3955,-1928956161,1358855814,-8485235,-26032,-1073020928,1776878453,112895,1575324510,1426064578,-327029621,-1799880486,-1202708989,1344144267,503939768,-1404662448,1354256406,-375762944,-1207959537,1344144285,504094392,60602448,-2037559266,1343684392,1342210232,1099930,679906560,-1514647297,983191555,-1996488688,-1946212730,4161752,-2030107532,-1224736986,580583206,-1962934256,-2130762082,359923775,-14121331,282237520,-2037579776,1343684392,-352081992,204388405,61454416,141335120,-661979136,-1207957562,1344146478,591002,679906560,-1202710785,1344146478,1109146,679906560,-1202710785,1344144299,1079706,679906560,-1924131073,1343663174,1113242,61716480]},{"sector":15,"data":[-558346210,-1924129269,385820806,289905232,1183383552,1958743038,-18411,1751120,1354771280,503559608,292461136,-977797120,-1202708989,1344144318,503561656,679906640,-1202710785,-1706033024,65535,-14121331,236624464,-1098907648,1946222376,9627907,-14121331,-558346218,-1706025461,3868,-14121331,-843558890,-1706025469,4364,-14121331,783831062,-1706025460,4380,-14121331,-810004458,-1706025469,4396,-14121331,1183666198,-1706027348,3068,16678531,-659022220,-1202708989,1344144337,-14121331,-6664170,184549631,-1207601984,48955393,1183432747,1958743038,-18411,1751120,1354771280,503570616,313498192,2122514432,175440126,-1710983425,65535,922695659,-6682802,-1996488449,-1202673082,726663171,-1499836224,-16777199,28879478,-1070903296,297114192,1996423168,309418,1354771280,16777114,1575324416,503317186,1430622296,-1910575989,585925592,1024214667,125042960,1946227005,-14357743,548933238,1961381888,112640,1996429291,175570702,-16222465,548931190,921194496,736553730,49120192,1562371467,707149,1167087646,518818645,-326903666,205949730,1946226749,17906951,619385204,-1207011585,-397410240,28835879,-15209728,1996426870,142016266,-1207535873,-397410240,-420806167,-310132693,535137026,181030237,-326413056,-949687165,65094,537165443,1996433269,1357830,-26032,1183383552,-6664032,184549631]},{"sector":16,"data":[-15305280,-1070922122,207657552,-1662451712,108461825,-351379736,75400166,-385649632,1996423398,67614880,1354771280,1301958736,-16777210,-1207376330,-1924136928,1343662662,1342197944,1245338,1975520000,112645,-1070923029,-113015,-424147338,1183666176,-1706027350,4895,16678531,922688117,565709030,1183666176,-1202710870,-1706033072,4923,91602955,-352321096,-1983894782,1996488262,16431110,-1438216880,1520062486,-2097151981,1962999422,-432603366,2275336,-1438216880,1354256406,-560312320,184549387,-1207601728,48955393,1183432747,108462078,1342177720,380257933,202283600,2122514432,158597374,-1207535873,468320255,108462079,1342185656,-16658712,-591919498,783831040,-1706025460,5235,-1928956161,1343660614,16777114,243712,175124215,-1985722877,28875846,-577089536,-1962934253,-936662962,-150993992,51015726,145531336,-939269935,201084553,-1962574135,-1673123391,-150993224,51139118,1183425094,1354771358,16777114,-1504802048,112773163,1378809600,-1580727540,-523171820,1317652483,2127105020,700549893,1996463686,-1636368634,-1952680193,1177265734,1183535266,-1538905176,1354771280,16777114,108461824,1342177720,842138,1575324416,1426064578,-327029621,1187446914,-1962934018,20777542,1026782208,57999362,1023469033,57933844,-2097092375,1963001982,209125149,-402360577,1996423391,14465036,204388432,-459648994,-385875950,1996423365,74907404]},{"sector":17,"data":[-2097102104,1948255358,9562371,1023531496,2138374143,1517600779,1946157373,10479875,-401836289,922683651,599263462,-2037559296,1343684478,1342209208,1230234,1975520000,112645,-1070923029,201213577,-16091968,395971702,-352321515,209125211,-8485235,951603222,-1202708979,-1706033088,3846,922698475,95946982,1347590400,-15960321,-16095178,-1710594506,1784,1946157629,-14554322,1486490742,-352321522,-432603358,374792,-11513191,922684534,922683950,-739571156,722237183,-1969598272,-1962934254,180510181,-326413056,-11080573,347604598,163074048,-1070903292,-1706012592,5503,1034569353,58064895,-16713751,347604598,179851264,1996443652,-1371107926,278548502,-2097151986,1965032574,-1371108073,210679888,368548432,1183383552,-958886996,166395911,1353598605,1451162,199145472,1183666206,-1706027346,5581,537165443,1183007861,-1934097236,-1957683701,1344187462,1071514,65648640,1183666206,-1202710866,1344144360,504114872,899152,370907728,783810560,-239579124,999968771,-1962934250,509656,-189260309,-1924129277,1343663686,503575480,204388432,230182942,-828747776,-1207959530,-1706030034,5936,504114872,389782096,783810560,-88584180,563761155,-1962934249,4161752,783817845,-2091901428,1965032574,228505605,-524811285,1390054410,275356240,-443875328,311901,-2115204267,-956266260,64070,-1202667477,-1706032511,1120]}]],[[{"sector":1,"data":[-8878455,108380171,-369098824,1048772970,1962937484,112652,1342975139,857754,1354771200,-1719729480,614092882,1342177293,862874,66959360,-1070903266,-55029680,-1957683709,520059014,41990224,385718864,-2037710848,1183448952,-27358210,1962950528,8907011,503580344,516131664,67483728,-2037559266,1343684474,1342209976,1035162,-28931328,-558346210,-1706025461,2268,58048523,-1929344791,1358920326,1342443192,1046426,-958887168,-2037579769,-1705967750,4111,-8747379,1234849814,-1929379824,385841798,228505680,-778416098,-1929379816,385841798,204388432,211439646,184549399,-385649472,1187446914,-2097151494,822334,-1070920843,1342975139,1482138,1354771200,-1719729992,-1415950254,1342177302,1487258,2025258752,76913407,1183514624,-1923486726,1358920326,1342443704,1557146,-62486272,1065408651,-16550912,1996487750,68335868,361929296,1183383552,-2133292036,57933887,-243969,1251671158,-1962934246,1065417822,-955943936,129606,-106869,1065418310,-385649408,-252969245,-1017256565,1167087646,518818645,1183570062,17841420,289212276,-351177727,242679588,1342185656,-1207930392,401276929,-15829249,1996425846,108461832,1342185656,-352204312,-2084557850,-443874579,-900899553,1478361098,-1957345904,-661774612,1024214667,125042960,1946227005,-14357743,1085804150,669536256,112640,1996429291,175570702,-16222465,1085802102,2145931264]},{"sector":2,"data":[736553729,49120192,1562371467,707149,-2115204267,1442908396,16664263,-432603392,71731976,1342178309,-8747379,-2135404522,60444672,184549401,-1207601728,48955393,1183432747,2055638526,-1202710785,1344146478,1693594,108461824,1342241464,-8747379,597315606,-2097151975,1962999422,-432603362,71731976,1342178565,-8747379,-2135404522,1805275136,184549402,-1207601728,48955393,1183432747,108462078,1342244024,-8747379,-375762922,-2097151975,1946222206,108461839,1358954424,1391514,12445952,504114872,-125399728,-1202710786,-1706016768,6937,-8878455,2130706237,2055638350,-1924131073,385810566,431200848,-2037579776,1343684474,1687194,-1913615616,-1979745662,-2037515194,1343684474,519849611,212834896,1183383552,2055638524,-62506497,1586175348,1547665660,130473077,-1928271104,385841798,68466768,93999134,-1929379813,385841798,446995024,-259325952,-8799616,-1928301254,385841798,68532304,-811970530,-16777190,448267894,-2037559296,1343684474,1279130,108461824,1342177720,1321370,-443851264,311901,-2115204267,-956233492,65094,1024083595,410255361,1962934845,47704323,1946158653,474379,1424556917,47376642,-1207142657,-1202716646,-1202716659,-1202716544,1344145442,1399962,136493056,363174480,1048576000,1962936354,-432603319,71731976,1342178821,-8747379,-2135404522,-1181069312,184549396,-1207601728,48955393,1183432747,1958743038]},{"sector":3,"data":[15526147,-1928562945,385841798,221821008,817385502,-325431296,-385875948,582484576,-1706025464,6839,-1082074997,1952188449,136493090,-2019930082,-1962934260,566198488,259275272,503849656,68663376,-560312290,-1207959526,1344145442,504114872,375298640,582483968,-1924129272,385841798,246717008,-1073020928,99156853,136493058,-2037559266,1343684474,1422490,136493056,-2037559266,1343684344,1346371768,16777114,2022082816,2109737983,-432603306,71731976,1342179077,-8747379,-2135404522,1234849792,184549405,-1207601728,48955393,1183432747,136493310,60444702,-1929379812,385841798,136493136,1905938462,-2097151971,1962999422,-15406845,-1710459137,7551,-2097052695,822334,28839029,204251904,474651216,-1070923776,2130884688,-1706012007,7256,475961936,2122514432,276111364,-1207142657,-397410272,1183383890,8710652,-401836289,1996425054,4241420,20768848,201082505,-1200785984,1344145442,16777114,2055638272,-1202710785,1344146478,1871514,2055638272,431509759,-459649020,-1962934243,509656,-8747379,1637502998,-1207959523,1344144411,504094392,2055638352,-1706027265,7884,175489035,-1710459137,4476,-4713749,448286975,-1070903296,-1706012592,7912,210517635,722171136,204252096,480352848,-1070923776,2130753616,-1706012007,7343,481663568,2122514432,57999612,-2097114135,1967129726,209125132,1342179000,1899162,75399936]},{"sector":4,"data":[-1206946496,1344145442,504114872,504470096,1048772608,1962937484,112652,1342975139,1891226,1354771200,-1719729480,-375762862,1342177308,1896346,75399936,-16222944,-454554506,-16323840,1340607606,-1942060282,192217100,748929067,2040156172,721420311,12079296,1347590527,1542042,-1919266816,-16777193,1996426358,422943242,-443875328,705117,-2115204267,-956234516,65094,503849656,-24736432,-1706027266,3972,-16873843,-6664170,-1996488449,201260166,-9603904,-1962351050,134546502,-2037559296,1343684478,1342209976,1618842,1975520000,112645,-1070923029,-1191295351,1344145442,1453722,2122747136,-1202710785,1344145442,1997722,-25263360,-16092160,-744880522,-352321516,108461847,-8485235,951603222,-1202708979,-1706033104,6807,65781803,-1962933832,79846885,-326413056,26274945,-26179897,-2033778688,65140,503587512,199145552,565727262,-1924129276,385777286,16758864,367696464,-2037579776,-1202651522,-1706032086,7718,-25524599,1065408651,-16288768,-956401018,-2037579769,-1705968002,7745,-8485235,-2037559274,1343684222,2013082,8448256,-25524597,-26048887,70039632,396991056,-2037841920,-661913990,1946173312,2055667463,509694,-25512193,1985178,1924595456,400005886,-2037710848,1344208498,504073400,391879248,-1073020928,-1098709131,1946222196,1887881001,-1929379330,385842822,70170704,-1936044002,-1929379810]},{"sector":5,"data":[385842822,1921420112,-1706025218,5963,-2033776917,130676,-25518453,1946173312,-9115389,-26165629,-1928301312,385842822,70301776,1721389086,-1207959527,1344144433,504094392,2122747216,-1706027265,4238,201213577,-1206553408,-1202651137,726663194,968380608,-1706025468,4266,503597496,71481424,1102598174,-1924129276,385777286,16758864,559061584,-2037579776,-2037776770,-2037514634,-1202651522,-1706032047,7995,-25655671,1065408651,-13995008,-956401530,-1224802297,1404632696,2006601732,-1996488672,-1946257274,4161752,1344146292,16777114,2022082816,1991704574,526621438,-1224802304,-1365574024,-1962934239,519992966,199145552,-2019930082,184549407,-1957333568,519993478,193771600,1520062494,184549406,-2092862016,1946222206,73250845,1454919710,-1202708988,1344144469,2136730,1958742784,112645,-1070923029,201213577,-1206553408,-1202651137,726663194,1706578112,-1706025468,8381,16678531,1996425333,547789316,1840775168,-6664188,184549631,-12945984,-1710797258,8408,-25393527,243792,112720,537958992,-1224802304,28900988,-1706012672,8225,-25381121,1342178488,1342177720,2156698,1575324416,1426064066,-327029621,-2037579646,1343684478,503849656,468032080,-2037579776,1343684478,504114872,459512400,-2037579776,1343684478,1824154,1975520000,74907405,2175386,-373282048,783810689,1975013388,-207990780,-1962934245,509656]},{"sector":6,"data":[504114872,458463824,2008547328,-1202708988,1344146398,504114872,471374416,-1073020928,1996425845,472160772,-1108672512,1358954424,1342184120,-1202667477,1344144509,2150298,-18432,1947728,1354771280,949637200,-16777188,-1710797258,4487,1358841481,1342180024,-1705983957,4503,-1962933832,46292453,-326413056,-949949309,63046,16664263,1354771200,1342382520,1473690,-1605990144,578142219,-1710983425,8686,1342457481,1342177720,2227098,74907392,2230682,-373282048,-2068315684,726670852,-1202696000,1344144515,513820299,52475984,564501072,1183514624,-129594976,-2131206517,678756415,16154243,-1008139404,-432603392,4241416,-1572434608,1354256406,1469730816,184549410,-1201769024,1542127617,503614392,-129594544,-1967632354,-1924129276,1343683142,1342177976,1955482,-96039680,503355984,2122317824,494141690,32917191,74907392,1342182584,1342439864,-1957642197,1344206918,2245018,-128021760,-2131212545,57999423,-335578647,-1983894544,1996488262,134584836,1183383552,28856324,312102912,-2097151992,1946222206,74907402,1799322,-15275264,1183646838,-1202710878,1344146744,1342189752,1939610,-1602814208,1545882,-16389888,-1207666945,-1202716652,726664199,1347440832,1720730,-432603392,4306952,-1572434608,1354256406,-1835380736,184549410,-1207601728,48955393,1183432747,74907646,1342236344,379733645,582064720,2122514432,443875582]},{"sector":7,"data":[149305087,1342194360,379733645,5290064,583899728,-1073020928,28837237,721611520,-28931648,-1207666945,-1924136710,1343660614,1631130,-25263360,-15043328,-1207376330,-1924136893,1343660614,1342197944,1784730,1975520000,112645,-1070923029,-113015,28836982,1183666176,-1706027358,8967,-1207666945,-397410240,1996485195,14465028,204388432,1989824542,-16777182,697999478,-1207959518,-443875327,180829,-2081649835,582484716,-1706025464,65535,503616184,199145552,-1850191842,-1706025468,8101,175489035,-1710983425,8154,-4708373,448286975,-1070903296,77117520,1905938462,-1207959517,-1202651137,726663197,1347440832,2083994,77510656,535009872,-1073020928,922688117,-258341042,-1996488673,-1202651578,-1202716662,-1706033151,8194,-1034033781,50347778,52649729,50360064,35674369,83916544,-16655616,50342656,18943233,50332928,-14722560,50337280,17391617,50333184,19074817,50333440,-14452224,50337536,17415681,50333696,17427969,50333952,-14465024,33560832,-16658944,50337280,35858433,50366464,52568321,50331904,17278977,50336256,17319681,50336512,50664705,50365952,-14654208,50341632,-14738432,50341888,-15566080,50342144,-15398912,50342400,-16229888,50342656,-16709632,50342912,69016577,50332928,-16067328,50343168,-16210432,33566208,-16654848,50342656,-15012352]},{"sector":8,"data":[50343680,-15755776,50343936,-14866688,50344192,52664321,50371328,52659969,50371840,17591297,50343680,51613953,50339840,17595393,50344192,52504833,50340352,52032769,50342400,18810369,50346496,19086337,50346752,16862721,50347008,16866049,50347264,52140033,50375936,16869889,50347520,52501505,50343424,52526849,50376704,51619585,50377472,51649793,50345984,18435073,50350592,18828545,50351360,18450945,50351616,18908673,50351872,52141569,50349312,52136449,50349824,18838273,50353920,18890241,50354176,18894337,50354432,18444545,50354688,16896769,50355456,52197633,50354176,51540481,50354944,52620289,83909632,-16659712,50337280,52547841,1828742400,1937208180,1167087646,518818645,-326903666,-129579512,-129594815,-6664040,-1996488449,1451883078,1959922684,-129594872,1962559032,106859274,-1996994934,-32511225,2122381382,-780248328,-972661109,1204175111,-310181887,535137026,46812509,-1873273344,-326412987,-2116514274,1442915052,16533191,105286400,-2037559266,1343684320,-1705983957,742,-9140599,2147483453,18082051,1988529488,-1202710785,-1873805248,83945486,-8995199,376789581,196232843,242529350,-1951250805,1183429718,-94991880,-1070921493,-1980086647,-1224738746,1996488564,-126418950,-1705983957,257,-9128193,381044365,4241488,-401698736]},{"sector":9,"data":[2122384566,1950699190,10938627,-9128193,735856267,-129629230,1392137747,1354771280,84378,1958149888,-163148289,28856342,244338688,-16481816,-1946192714,17106502,-1974460927,1352201798,1810370192,-163149308,-1947169896,-2134505890,-16776959,-35658,1996481654,1354771426,16777114,1958149888,-163148289,28856342,244338688,-1979434520,1033434694,41681024,1183350960,1958150134,105286655,503349253,-163149232,244338840,-1962666520,106859504,8421574,-62470400,-1224802303,244383604,-1962652184,-2090927034,-443874579,-900899553,1478361090,-1957345904,-661774612,40168577,16533191,138840832,-2037559266,1343684126,-102232432,1958742786,105286420,-2037559266,1343684476,-437776752,1975520002,-373282043,-2037579055,1343684126,-8616307,-6664170,184549631,-11766336,-1207376330,-1924136880,385785990,5290064,43162192,-1073020928,28837237,721611520,-62486080,175423499,-1710590209,684,1996469227,-1601794806,-1202710786,1344146744,1342189752,181658,-946148608,1090484870,-2096239716,16743102,-1367269772,327745402,1342177976,-11485141,-1694532938,65535,-17660279,-613105653,-8733053,-11111168,-1207376330,-1924136879,385785990,5290064,62888528,-1073020928,28837237,721611520,-62486080,175423499,-1710590209,65535,1996429291,-1601794806,-1202710786,1344146744,1342189752,16777114,-222888192,-25858,283705344,512134655,-1924131074,385719430]},{"sector":10,"data":[536918096,50633296,-2037841920,-12714120,-1915322625,385842310,-1668903600,-1202710787,-1706029055,65535,-31684983,2147483453,19785987,-17647873,16777114,-192509696,-157906434,2025259006,-155779073,-189333506,2058813438,-401698561,-2037841314,-1072955746,-1224789387,-1224737252,244383608,1375942120,-401698736,-1224801459,244383260,-16610840,-1694567754,65535,-8866049,2011696784,20703490,-31672577,-17385729,-17516801,-23152897,937954960,-1635370238,-6916866,-1862394698,38856718,-8616307,244338710,-16657432,-1862305610,37545998,149305087,1342198456,-23034227,1354256406,-6664192,184549631,-1207601728,48955393,1183432747,-125399556,-1924131074,385785990,-26032,-2037579776,1343684476,296858,-125399808,-1924131074,385842310,67803728,-2037579776,1343684344,503620792,77109840,2122514432,175374588,-1710590209,556,1996429291,-125399798,-1202710786,1344146744,1342189752,148890,-222888192,56924926,-1997996032,2025259006,-401698561,922681758,1404569830,-2037559296,1343684256,1342197944,135834,1975520000,112645,-1070923029,-1912846711,385808518,-1601794736,-1706027266,1273,-8616307,-6664170,-1929379585,385808518,2089192784,-1706027265,65535,16547459,65602420,175570942,-17267059,-128279,-1694567754,718,-2097151560,-443874579,-900899553,1478361094,-1957345904,-661774612,8580225,-15960321,-2037577098,1343684478]},{"sector":11,"data":[1342243000,30874,2092960512,142016294,-1928956161,1343653446,253594,142016256,-16353537,1996425334,-26106,28835840,721611520,49120192,1562371467,576077,1167120524,518818645,1465309326,-1274653045,-1960719078,1451952206,-850480118,855798305,-2090967104,-443874579,-900899553,-661913594,-1957345904,-661774612,1451972438,-853887994,-850414559,855798305,-2090967104,-443874579,-900899553,-661913598,-1957345904,-661774612,106349854,567099828,-1070398862,49120031,1562371467,313933,1167120524,518818645,-1960912754,1455754334,-1958759416,567084622,-1070398861,49120031,1562371467,576077,1167120524,518818645,-1960912754,1455754334,-1958693880,567084622,-1070398861,49120031,1562371467,576077,1167120524,518818645,1465309326,-1274650997,1931595070,1606431490,49120094,1562371467,182861,1167120524,518818645,-987834226,1001653846,41034189,-2095071181,-443874579,-900899553,-661913596,-1957345904,-661774612,567089588,-310165244,535137026,-1932833443,1430622424,-1910575989,509040344,-66552124,168183435,-1274645056,-31339239,-1328510272,520530524,1203042187,41034189,1595916339,49120094,1562371467,445005,1167120524,518818645,12114062,106859351,-1047846451,-1962742397,1297948645,-1946156342,1430622424,-1910575989,1459730648,-1962254709,1451951694,-2094936824,-443874579,-900899553,50335494,16935937,50335488,17085441,50336000,50606337,50331904]},{"sector":12,"data":[16980225,50336256,17054209,50336512,-16508928,50341632,67439105,50333184,50617601,50376704,17097985,50350592,17033473,50351872,16829441,50353152,16905985,50353920,17071105,50354176,17037825,50354432,16783105,1828740096,1167087646,518818645,-327034738,1448542382,1024214667,192151824,1963004221,8841475,-2096991511,822334,28839029,204251904,6462032,-1070923776,2130884688,-1706012007,112,7772752,1996423168,39118862,-11368823,210517635,722171136,204252096,38705744,-1070923776,2130753616,-1706012007,604,40016464,-1098711040,1962999634,242679569,-1705983957,65535,-385875528,1996423685,112654,-26032,1996423168,105310222,1183573739,81162,-2115435659,146689,742247284,1024095233,57999670,-352243223,242679751,1342256824,198554,-96040704,67745872,1354771280,-6664112,-1962934272,1421249008,-97281,-24404364,1996482513,67745798,1354771280,664424528,-1996488703,1024021637,158728191,156534215,2011758592,-92864513,1342442168,-11225345,-11106675,1704611862,-1929379839,1358911110,1343000248,16777114,-62486272,504139448,-26032,-661979136,-956533109,1996423168,67811334,1419676496,-1846785,-1928768329,1343662150,99994,1451658496,-1924131073,1343662150,16777114,-92864768,1342180280,1347469355,26909264,1996423168,67352826,1421279056,1354771455,28351056,1996423168]},{"sector":13,"data":[67287290,1421279056,1451658751,-1706027265,452,-1191545089,-11533305,738153654,-1706012480,472,-1191545089,-1202716661,726663169,-1706012480,513,737834751,1347440832,16777114,-92864768,16777114,-23533312,-1207535873,726664201,1347440832,238746,1418103040,-49665,2078868341,242679806,1342254264,1342441400,-11231605,-1207966767,-1070921388,-6664112,-385875713,1996488282,78833678,58048523,-2080485911,822334,28839029,204251904,41589328,-1070923776,2130884688,-1706012007,648,42900048,1996423168,110356494,210517635,722171136,204252096,-26032,-1070923776,2130753616,-1706012007,65535,-26032,-320274432,1589652477,49120095,1562371467,707149,-2115204267,1442907884,-1202667477,-1706032511,65535,-17135991,578142219,-1710983425,878,1342457481,1342177720,228250,74907392,232602,-373282048,263717889,-1202708990,1344143878,503939768,216184912,1354256414,949637120,-16777213,750257270,395988993,-1996488701,-44410,918029430,-6664191,-1996488449,-1191226234,1344143896,1347469355,503453624,-91845808,-1202708738,-1706032512,976,-17129845,1962950528,-432603314,5814280,1451658576,-1202710785,-1706033072,65535,91602955,-352321096,-1983894782,1996488262,-26108,1183383552,28856324,-6664192,-2097151745,1962999422,38070531,-1710983425,65535,-16625431,-1191226698,726664193,-491237184]},{"sector":14,"data":[-1706025460,65535,-17135989,-1951906167,1065396318,-1204587264,1344143903,1347469355,503455416,-91845808,-1202708738,-1706032512,65535,-17004857,-2037710848,1183448826,-24721496,-385875714,-1224801907,28901202,-1070903292,-1471771824,-124104674,-1962934268,1191159902,4161704,-202660492,503457976,-1471771824,666390558,-1924129278,385810566,5290064,101292624,-2037579776,-1705967872,1123,-16728448,-385649408,-2033778386,130814,-16742771,36747344,79993424,1183383552,-2133292036,192151615,-243969,-1751450506,-1962934268,1065417822,-385649664,-1014300433,-491237346,-1706025460,1166,-1929322775,1343662662,514344587,79075920,1183645696,-744861526,-1929379836,1343662662,504139448,82025040,-2037579776,1343684438,519849611,105028176,-2037579776,-1202651306,-1706032590,1352,130472075,1451658496,1570394367,-1929379835,1343662662,-11106675,1385844758,-16777210,-1191226186,726664193,1183666368,-1706027350,1307,-16990589,-1958904556,-771818314,1387724774,68008191,1354771280,-11106675,-1717940202,-1996488698,1024021636,108396543,156533959,-1232404480,-422445316,156533899,145654921,-17004801,-1191414017,-1706032588,1559,-1946401143,4161752,1191119732,-59310084,405914,-60912896,1946173312,-15210237,-5742965,1065396294,-1946848000,1065396318,-385649664,-1098645878,1962999550,-432603290,5879816,1451658576,-1202710785,-1706033072,1934]},{"sector":15,"data":[91602955,-352321096,-1983894782,1996488262,46438916,1183383552,28856324,-778416128,-2097151998,1946222206,-37951229,-1929087233,385832582,221821008,817385502,-6664192,-16776961,-1694565706,1756,-1191383319,1344143934,503461816,37140560,-2037559266,1343684352,1342197944,195482,8817920,1186484479,1587171330,-1996488698,-661936058,1946173312,-1471742202,-1929377850,1358889094,422810,1451658496,-1924131073,385810566,-26032,-2037579776,1343684438,504139448,109288016,1996423168,38320296,128621136,1183383552,-2133292120,57933887,-5748993,-1181046666,-1929379833,385832582,-1471771824,1973047326,-16777215,-1191226186,726664205,-2037559104,1343684438,440474,-58291968,-49666,-1224796555,129564500,-1070903292,-17004919,-1706012592,1747,-11356417,1342441400,-16998773,-1207966767,-1070921388,1234849872,-16777209,-1694565706,65535,1577058744,-1034033781,-1957363710,1592558060,-950642943,33481350,74907392,1342256824,463002,-96040704,-1207666945,-1706032852,205,-939768183,16704646,-457798912,-427636994,-2030043138,-1098645788,2081750756,-460929044,-16776962,179894902,-1224781820,-2037514524,1343684258,57242,-359680,-12777355,-385649153,-1635057255,-472776988,156546955,58062347,-2147389463,-72006,1709769589,-494483711,-16776962,-1207376330,-1924136870,385841798,5290064,56138320,-1073020928,28837237,721611520,-28931648]},{"sector":16,"data":[-22903155,210679888,20290128,-661979136,-1929377850,1358865030,16777114,2055638272,-1924131073,385786502,134650448,2122514432,460652798,149305087,1342200760,-17135987,1354256406,-1667608576,184549381,-1207601728,48955393,1183432747,2055638526,-1924131073,385809030,139893328,1996423168,67811578,-459371696,-1948003842,-1979099969,-1728125309,-91845296,-1706027266,2178,-17135987,210679888,155032144,-661979136,-1929377850,1358887558,560282,2055638272,-1924131073,385809030,140941904,-2037579776,1343684474,504139448,144546384,1996423168,67811580,-459371696,-1846786,-1928768329,385809030,191470160,-2037579776,-1705967878,2351,-8747379,-2037559274,1343684346,568730,2055638272,-1202710785,1344143946,678298,-25263360,-16092160,-644217738,-352321534,74907435,-8747379,951603222,-1202708979,-1706033104,1503,-1635052821,-472776988,156546955,-18577782,-18447736,-18577665,-1946270487,1593762438,1575324511,1426064066,-327029621,1187447346,-1207959042,1344143956,503467448,38582352,-2037559266,1343684288,1342197944,664986,-1064923904,1503285502,-1929379831,1358872710,1342332088,620698,-1098479360,-2133292034,125042751,-21068033,-1929377850,1358872710,627610,-1061257216,1634992382,-10975545,-2037710847,-2037776706,-1202651462,-1706032546,2562,-21068151,1065408651,-16288768,-956383610,-1224802297,-1667563846,-16777207,-1694581066,2624]},{"sector":17,"data":[-21068149,-21199223,1065408651,-14912256,-1946239866,520010886,216184912,-191213538,-352321526,1485227782,-956301057,16666246,74907392,1342256824,1342442168,-28395777,-28277107,2040156182,-2097151990,141950970,1979711293,32827651,-28277107,210679888,171088464,-661979136,-1207957562,1344143969,-28277107,1622691862,-1924129278,1343663174,1342197944,272026,-1404662528,40482896,195009104,-661979136,-1929377850,-1705989050,1072,380389005,-26032,1183645696,-1202710868,1344143979,690586,74907392,1342254264,1342442168,-28402037,-1207966767,-2037577388,1343684258,698778,-1404662528,-2037559274,1343684258,722074,74907392,1342254264,1342442168,-28402037,-1207966767,-2037577554,1343684416,755610,1488880384,57999615,-1929333015,385765510,-1064923824,-1706027266,2780,57982987,-1929339159,385826950,-1132033200,-1706025218,65535,57982987,-1929345303,385732230,-1064923824,-1706027266,1148,-36796787,1840795670,-1706025470,2837,-36796787,-2037690346,1344208570,730522,-830042880,-1202710787,1344143983,734874,-830042880,-1924131075,385786502,78027344,2025324544,-1202708990,1344143985,-36796787,-6664170,184549631,-955943488,65094,1358954424,1342184120,-1202667477,1344144000,261018,1317469952,74907646,1342256824,1342442168,-28395777,-10844531,731533334,-2097151998,91619322,1962934077,1518767403,-1900523265,1318735884]}],[{"sector":1,"data":[-1962934268,509656,-10844531,-2037559274,1343684176,705690,1975520000,-24188669,16678531,-2001199500,-1924129278,385765510,-1404662448,1268404246,184549387,-1207601984,48955393,1183432747,-35264002,16678531,1996425333,-26108,-4718592,448286975,-1070903296,43038800,77221918,-1962934259,46292453,-1873273344,-326412987,-2116514274,-1962890516,272436294,1024160769,57999633,-385816855,1996423412,1357838,223976016,-2037841920,-1705967786,65535,242597899,722368255,2056933568,-385875955,-1598553906,-1202708990,1344144025,503486648,-1438216880,1354256406,-23441408,-1929379827,-1202673082,-1706032472,3273,-1946401143,4161752,1191118452,509692,1353336461,843418,1485212928,-1924131073,1343662662,965018,1485212928,-1202710785,1344146574,847514,-59310336,1342352056,903834,-62486272,1065408651,-16550912,1996487750,138779388,-2037579776,1343684440,519849611,244030032,-1224802304,230227798,-1070903292,1485213008,-1706027265,3480,-1207011585,-1706033151,154,-352321096,242679571,-16091393,1996424822,1042440,-1070863637,-1962742397,1297948645,1426066122,1183575179,81160,37555316,1026323456,343146516,1996435691,175570698,1342182584,459162,216748032,33848963,1996429429,108461834,184554984,-16026432,-1070921098,8952400,-443875328,574045,-2115204267,-16702228,163054710,-1070903292,-1706012592,3516,-19102071]},{"sector":2,"data":[1979711293,-373282043,1996424062,67811332,-591986864,1854311934,-1706027265,2088,-9533811,210679888,241277520,1183383552,-958886918,-1900543993,-1706025460,322,-1191557631,1344144045,-9533811,-1397207018,-1924129278,385801862,5290064,153459280,-1098907648,1962999518,-432603314,6338568,-561607344,-1202710786,-1706033072,3820,91602955,-352321096,-1983894782,-1072956346,1996426100,146512390,1760100352,108462079,-18970995,951603222,-1202708979,-1706033104,2260,-1912647959,1358880390,1342354872,947354,-958887168,-2037579769,-1202651426,-1706032457,2102,1065408651,-1928301312,385801862,45725776,-711307234,-1929379826,385801862,247765584,-2037579776,1343684318,16777114,814123264,1975520255,1854311797,-1202710785,1344144062,1004442,-561607424,-1706027266,3934,-9533811,-2037559274,1343684318,986010,-432603392,6404104,-561607344,-1202710786,-1706033072,2023,91602955,-352321096,-1983894782,-2037515194,1343684462,-18970995,1872384022,-2097151985,1946221694,-15013629,-1928956161,-369135994,-1098645726,1998651184,-25564925,-13584641,503496888,-26032,1183383552,-128546314,57983499,-1929341463,385838726,46905424,-1080405986,-1929379831,385801862,172661328,-2037579776,1343684462,-18970995,-895856618,-16777209,-1207376330,-1924136863,385801862,5290064,315660880,-1073020928,28837237,721611520,-62486080,-9533811,-2037559274]},{"sector":3,"data":[1343684318,1077658,-58817792,-16092160,-593885578,-352321518,108461847,-9533811,951603222,-1202708979,-1706033104,4852,-13584641,16777114,-37099264,503502520,47036496,-2101850082,-1202708983,1344146658,1342197944,1260954,108461824,-13584641,-9533811,1183535126,-11526406,1183446622,817299444,-25857,2122514432,57999604,-2097085719,822334,28839029,204251904,286104144,-1070923776,2130884688,-1706012007,4379,287414864,-2037579776,1343684402,-9533811,-1382395882,-1929379828,1358901894,1263258,847678720,-1202710785,1344144094,1089690,-561607424,-524791554,1452953602,-1962934253,509656,-18970995,-1768271850,-1929379826,385823366,-561607344,-1706027266,4272,-13465971,-491237354,-1706025470,4288,-13465971,1183535126,-1706025222,3261,503507896,48543824,-2037559266,1343684402,776090,-28931840,175489035,-1710852353,3062,-4712981,448286975,-1070903296,49526864,194662430,-2097151988,822334,-1070920843,1342975139,1163162,1354771200,-1719729992,-845524910,1342177297,1168282,-196703488,-1034033781,1478361092,-1957345904,-661774612,1024214667,125042960,1946227005,-13046977,1052249718,28856323,-6664192,-16776961,1052249718,-1343729661,242679553,1342389944,802458,-6664192,-16776961,28839542,278548480,721420301,16509376,1024083595,393478145,1946157629,52706674,1996454515,52541454,52672592]},{"sector":4,"data":[-16734999,-504885642,1975520000,13428995,210517635,-1207143168,748879873,-342208500,721420305,45633728,1347590527,1178010,-6664192,-16777199,1978142326,-1942060285,192217100,748929067,848973836,721420288,12079296,1347590527,16538,1184518144,-16777216,-1070920074,207067728,1827340288,688553601,-15961341,616042102,683167747,-2128286973,53217918,1996426355,53065742,53196880,2122387947,1996696842,242679573,1342385336,1342385592,-1710590209,4719,2122394347,1912815114,176062755,477561663,-1207011585,-1202715842,-11533505,-6681994,-16776961,1996426870,9758730,-2097151560,-443874579,-900899553,-1957363702,1458340844,-1207666945,-1202715852,-1202716659,-1924136880,1343663686,649114,-1371108096,-341031287,-2012771762,809282118,960234620,922697342,1689782502,1183666176,-1202710866,-1706033072,3612,175489035,-1710983425,3638,1996429035,-1371108092,951603222,-1202708979,-1706033104,3664,250331179,-1951643905,1065397342,-1196788480,-443875327,180829,-2081649835,146299116,-2125455869,54396030,-55048843,-1207702782,-628358398,-71806894,-1924129278,1343663686,1342197944,817050,-1371108096,211655248,1183645696,-1438217810,51296336,210016848,1183383552,-2133292116,108265535,-961788161,1996423175,330996394,1586167808,4161706,1996426100,53786630,-339506352,108461834,1342387384,503517368,-26032,1183514624,-1438217812,51755088]},{"sector":5,"data":[335583824,1183383552,-2133292116,108265535,-961788161,1996423175,337156778,1586167808,-1744336214,1946182973,7224699,1866270068,-15895552,565708406,599281667,250302467,-1207535873,-1202715871,-1202715869,-1706032350,5217,-1985198453,-1202673082,-1706032361,5233,-1951644023,4161752,1191118452,509612,-1700104449,5257,-1968546165,875403271,-1471772416,679264267,2130707517,108461859,1342383288,1342384312,94914187,468386596,-1207535873,-1202715871,-1202715869,-1695874271,-1207535873,-1202715868,1347420968,1355930,-1404663040,1353336457,1342380472,1360026,-1404663552,1065408651,-16354304,130460742,-1435042048,1366170,-1438217472,465063966,-1706025469,5375,1417003019,-1207535873,-1202715863,-1202715861,-1706032343,5448,-1985198453,-1202673082,-1706032349,4223,-1951644023,4161752,1191118452,509612,-1700104449,4193,-2136318325,1467314239,-1207535873,-1202715860,-1202715859,1391133484,514475659,52279376,580538398,184549397,-15698496,699926134,733499395,716722179,-1952978173,1344186950,503521720,196450896,-1073020928,1944650612,108462079,1342384568,1342385080,-35863,750257782,767053827,-1706012669,4684,-1034033781,-1957363708,720143340,-1207666945,-1202715852,-1202716659,-1924136942,1343680070,1222042,-330905856,1996423969,-327745788,1471130,1975520000,13297923,770459275,205325089,-385649152,-1073545043,-1476448621,1183651369]},{"sector":6,"data":[-1202710810,1344144165,1479834,9693440,384190093,53000272,1183706347,-1202710810,-487914709,384190093,53393488,1183701227,-1202710810,-823459023,384190093,53786704,1183696107,-1202710810,-1159003337,384190093,54179920,1183690987,-1202710810,-1494547651,384190093,54573136,1183685867,-1202710810,-1830091963,384190093,55097424,1183680747,-1202710810,2112422731,-1340760321,-1005209067,-669659627,-334110187,1439253,336988694,-1927930346,1343680070,384190093,262511184,1191116800,-327253524,58655533,-939583511,54455366,1072463489,-13795581,1996424310,-25876,-1073020928,1183533684,54410732,1060964212,-348949501,-700019441,1287147542,-1706025469,4183,503535800,-700019376,1183666198,-1706027282,4309,427147275,-1710983425,4324,1183655147,-1202710826,-840236206,-336836865,-18277,1751120,1354771280,503537336,284924496,-443875328,620937821,-637467904,1862271766,-1275002112,83886338,1845494528,369164051,-402586880,117440773,-1275067648,419495702,-318700800,2080375553,-452918528,2097152769,-872348928,16777999,-1291844864,654376719,-1577057536,671153939,1207960320,687931148,1862337280,369099537,369165056,771752208,-1090452736,570426117,906035968,838861071,-184483072,973078799,2063663872,704643857,-1476328704,989856022,1073808128,-1392508144,-1308556544,771752709,-2046754048,-1342176497,-1895759104,1325400336,1174471424,1157628688,838927104]},{"sector":7,"data":[1191183120,-1744764160,1459618068,-1459551488,1476395285,1308689152,1493172502,-603913472,1509949709,-1593769216,1593835790,-721353984,1610613007,167838464,1476395794,1761673984,1526727441,-1845427456,1543504659,-268369152,1610613523,1392575232,1627390737,2097218304,1644167957,1828782848,1694499605,1937009920,1167087646,518818645,-326903666,205949730,1962938173,8841475,1946226749,17906967,339557236,1028092929,1400111617,1946289213,9627982,-401705217,-1073020775,1996427637,-18418,-26032,28835840,-8787200,28839542,-6664192,-352321281,242679789,-16091393,1996424822,165079048,1996479723,175570702,-16353537,-1847064458,-1194595572,1344146562,-16222465,-6683018,184549631,-1195936576,-1706033104,65535,1996467435,-565801714,-6664170,-16776961,1996426870,-529072162,-15824664,1183649398,-1706027298,65535,-1070889749,-1962742397,1297948645,1426066122,-327029621,1448542350,1342178744,16777114,156410624,16533191,-59340032,-422378831,-771989877,1555562467,-26111,-2071396352,-1802958974,-2071394428,-1802958288,1191119410,-58817540,-2982902,-1207376330,-1924136848,385841286,8435792,25729616,-1073020928,28837237,721611520,-28931648,594919435,-1207666945,-1202716652,726664193,-2037559104,1343684472,111514,-359680,-29554059,-1207601665,48955393,1183432747,1975520254,-432603365,7452680,2022083920,-1202710785,-1706033024,482,91602955]},{"sector":8,"data":[-352321096,-1983894782,-1072955834,1996432245,1357828,67221584,1354771280,-8878451,228216854,-2097151998,175505402,1979711037,112645,-1070923029,201213577,-14977600,-1207376330,-1924136846,385841286,8435792,37526096,-1073020928,28837237,721611520,-28931648,594919435,-1207666945,-1202716652,726664193,-2037559104,1343684472,157594,-359680,-29554059,-1207601665,48955393,1183432747,1975520254,-432603365,7583752,2022083920,-1202710785,-1706033024,662,91602955,-352321096,-1983894782,-1072955834,1996432245,1357828,67221584,1354771280,-8878451,-1046851562,-2097151998,175505402,1979711037,112645,-1070923029,201213577,-14977600,-1207376330,-1924136844,385841286,8435792,49322576,-1073020928,28837237,721611520,-28931648,594919435,-1207666945,-1202716652,726664193,-2037559104,1343684472,203674,-359680,-29554059,-1207601665,48955393,1183432747,1975520254,-432603365,7714824,2022083920,-1202710785,-1706033024,842,91602955,-352321096,-1983894782,-1072955834,1996432245,1357828,67221584,1354771280,-8878451,1973047318,-2097151997,175505402,1979711037,112645,-1070923029,201213577,-14977600,-1207376330,-1924136842,385841286,8435792,61119056,-1073020928,28837237,721611520,-28931648,594919435,-1207666945,-1202716652,726664193,-2037559104,1343684472,249754,-359680,-29554059,-1207601665,48955393,1183432747,1975520254]},{"sector":9,"data":[-432603365,7845896,2022083920,-1202710785,-1706033024,65535,91602955,-352321096,-1983894782,-1072955834,1996432245,1357828,67221584,1354771280,-8878451,-6664170,-2097151745,175505402,1979711037,112645,-1070923029,201213577,-14977600,-1207376330,-1924136840,385841286,8435792,72915536,-1073020928,28837237,721611520,-28931648,594919435,-1207666945,-1202716652,726664193,-2037559104,1343684472,295834,-359680,-29554059,-1207601665,48955393,1183432747,1975520254,-432603365,7976968,2022083920,-1202710785,-1706033024,1651,91602955,-352321096,-1983894782,-1072955834,1996432245,1357828,67221584,1354771280,-8878451,513429526,-2097151995,175505402,1979711037,112645,-1070923029,-113015,-1128790922,-1298509822,-1560281084,1996425764,47233028,79796816,77791232,74907402,1342359224,16777114,221684480,170145535,1342177976,-1202667477,726663215,-224767808,-16777212,-1207303114,726663170,817385664,-1070903296,84515408,922681344,45616438,-1070903296,3192912,1354771280,16777114,74907392,1342182584,1342441400,1347469355,22649424,113704960,2930,-1207648536,-1706033148,1344,145491459,-1207302493,-1706033137,1360,145491499,-1207470429,-1706033132,1372,-1207483229,-1706033143,1384,-1207376733,-1706033141,1396,-1207072093,-1706033140,1408,-1207069533,-1706033149,1420,-1191557495,-1706033131,1433]},{"sector":10,"data":[-9009527,1342180024,16777114,-1037330176,-2046691119,922746742,1891109094,-1706025471,65535,-1207154525,787939364,865668178,-1178457150,-120389630,-1037319629,-9009661,-1559810909,-89979212,206741770,-523040847,734147481,178626,-1036781357,-2043952597,816054134,112763655,-1207239005,787939404,865667696,-1178457150,-120389629,-1037319629,145491459,722141347,-56362426,6600714,175124215,734147481,871945154,63056834,-1559712762,1177224890,112632826,-150963016,-1727369170,-1037319629,-1036781357,100909611,849545388,-96064761,-2096681309,1962999422,-432603366,8042504,207009872,683167774,-1684385792,184549382,-1207601728,48955393,1183432747,1975520254,-432603366,8108040,165328976,683167774,-1013297152,184549382,-1207601728,48955393,1183432747,1975520254,-432603366,8173576,150779984,683167774,-342208512,184549382,-1207601728,48955393,1183432747,1975520254,-432603366,8239112,153466960,683167774,781864960,184549377,-1207601728,48955393,1183432747,1958743038,-373282043,1996423899,-26108,-2037841920,-1202651276,1344146518,949637150,1342177287,474778,165061376,165156489,-9128193,503962296,-1706025392,65535,-26032,-1063059456,-1038710522,74907398,-9128193,16777114,-2113485056,-956265460,302810118,209887488,-1560250363,-2069820282,6161676,-15955805,-2101869450,-1706025460,65535,-150990152,-1324715986,-1543974141,1822624844]},{"sector":11,"data":[169648907,50992291,-1559624186,1889733712,169911051,-1207297885,787939468,-120517550,312735953,17086474,206712567,-120457007,-1962271069,-787999690,7911654,206712567,-2885493,-787884383,302394360,64550666,-1547293753,346098538,-773795576,1921419744,165061119,-9271805,191497731,-1593086301,-120518976,168953387,-956049161,1252247083,113287436,-9271805,206177795,-1593028957,-972878998,-1593123677,103484272,103484268,731449968,66638274,51080198,-1559712762,1252068062,-1547304180,1352731378,1275472652,1879452428,-1037330166,100923601,100863052,-190642004,335988490,-1593835253,103484270,446892052,191537418,135529987,-1593174365,1185090066,169779463,-1593357661,103483928,1218644140,145531143,100917457,100861768,1285752694,1921420039,1174799359,229155591,721898657,721897478,-1727369210,-120470997,122160643,145491459,-1592939869,103483934,379782978,169779464,-1593304413,103483212,413337772,1141244680,-1408892153,136094472,-1559620959,513869510,-895268854,7387142,175124215,-861669165,-1811535098,-1408881907,208136,-1593390941,-523171820,100917457,-1935472954,-1979317491,227582733,1208405153,227713864,227804715,-1592947037,1487079446,135962890,-1593156445,1587742408,1141254922,-1408881913,173712136,-1559620959,379652874,335938312,185508616,721898657,-1559712762,1587612428,185639690,-1559751007,2023951394,148677383,-1559749983,2091060262,148939527]},{"sector":12,"data":[721951905,-1559712762,1520503006,-1408892150,125739784,-1727470431,-120470997,2124531851,-570021113,-1037330168,-1054082863,148768259,51127459,-1559698426,614534184,-1408892148,149070600,722217121,-1559712762,28837754,-1956684288,46292453,-326413056,192028299,-472783919,171096063,170964991,-15947800,-1207294922,-11534334,-1207162314,-1706033151,2597,168048383,1342177976,205272831,1342177720,670362,909573888,178189,-533266608,112652,-26032,-443875328,-1957313699,116163564,138840918,1946157373,146715,-1729559691,1326336,-404159627,1391872,-1763114123,26798336,722106111,-124104512,-2097151990,822334,28839029,204251904,180722256,-1070923776,2130884688,-1706012007,2771,182032976,179830784,1555582976,-1202708991,1344145968,16777114,175570688,-2097064728,822334,-1070920843,1342975139,16777114,1354771200,-1719729992,-6664110,1342177535,16777114,-25263360,-385649664,1996423454,-26102,334036992,175570689,-1705983957,70,-956234263,64582,-1308854645,-1947806974,-1962442108,-1995996012,-1995820924,-16108908,2122579014,-528741636,-81176,-1550185866,-1996488693,-1202652602,-397344769,1996424836,-92864758,770970,12380416,-1207535873,726664201,1347440832,751514,192062208,1979711293,1913046810,-16774901,129500790,163074052,-1070903296,-6664112,-402652929,1048837739,1963133810,335988546,-1593835253,103484270]},{"sector":13,"data":[446892052,191537418,135529987,-16116061,177867382,-1996488697,-1202652602,-397410301,1996424716,375034,100853840,-16091393,1369111158,-2097151993,67859006,113718901,133908,722226849,-1559751674,1252067866,335938316,169255688,-1710590209,3796,1358579337,1342178488,-16399384,96008822,-13440768,1575324510,1426065602,-326898549,-28915944,1187446785,-1962934026,-472779170,-2020940847,-467006928,-129594032,207854160,1183645696,-1924131096,1343682630,16777114,-398029568,-524791786,-1706025471,3186,-772383093,-1964781085,705311111,1183666404,-1734717192,-1929379828,1343678534,385369741,209820240,1183645696,-1202710808,1344143842,829338,-161576192,-472783919,171083658,-1924078550,-1705969594,65535,384321165,-129594032,-6664170,-2097151745,1946222206,31766563,1586188318,-1948003850,503444103,-398029488,-6664170,184549631,-1207601984,48955393,1183432747,-163119106,183926403,921240445,-18177,1751120,1354771280,503442360,190159440,2122514432,141885694,-1710983425,2794,-1034033781,-1957363710,49054700,138840918,1979713597,23324931,781434883,242329599,956966049,393544774,204082943,204095107,-385647616,113705285,3114,-1593754391,1178143236,-16354044,-351519730,-535888008,-532774132,58458124,-956227351,843782,18344192,956966049,393544774,204080895,204095107,-385646801,113705217,3083306,-1593771799,1178143236]},{"sector":14,"data":[-16354044,-351519738,-536412316,-532774132,58667020,-956244759,806150150,13887744,956966049,141886534,204091011,-9115380,956957857,292881478,205270659,1010729740,58458124,-352277271,-533822606,2028538892,170172927,1963214393,705069831,-1997861876,956957857,242549830,205260419,1010729740,2138976268,109274091,-351531808,170172816,1963214393,105286408,-351524189,168075622,1963214393,105286408,-351519581,105286486,-351477597,170172750,1963214393,-16848637,956957857,57934918,-939583255,801798,-1590629632,1178143268,-385649404,77725476,71710986,1055458164,1007077375,-352309236,1812801554,-519196659,219024653,1393440014,-15779826,45614198,614551552,71710986,715195765,-1592726772,1178143236,-1593477884,65735740,1343021217,1342177720,659610,708247296,1010237196,-533266676,163964940,192028299,-472783919,170952585,171087753,-1710590209,2859,-2080487799,750142,1048781684,1946225522,1916699420,359925003,192036483,-1207012344,-1706033136,65535,1954545833,1916177182,-754798325,818315750,-25755894,-16616193,-26060,76087296,-16624503,922746486,-1847063694,175570690,-1694599425,2881,1575324510,1426065602,-326898549,184459534,135532171,-1054088751,184157739,-1577302391,1183386364,184590836,-940030327,65094,-134330741,-1181090706,-101253072,184157699,135529987,-1947056503,-146735546,-140903314,-100269063,335938314]},{"sector":15,"data":[-163149560,-1191282945,-1957691368,-454537023,-1706012152,4082,-375159,1183647350,-11528462,-73729418,-16777201,60488310,-16777200,2122579526,-1669582850,-1980348789,-22941114,-163149558,-1928956161,1343681094,1342189496,1342183608,1342189752,1376294632,275618384,1183383552,-2137370374,-16777200,-2003109258,-2097151984,644158,1996427636,184203270,922701854,-509998636,-1593835504,1183385270,112894452,-940030327,65094,-134330741,-1181090706,-101253071,112461315,135529987,-1947056503,-146735546,-140903314,-1274674183,335938310,-163149560,1342185656,-1191282945,-397410256,1347553307,1095834,-96040704,-1928956161,1343681094,-1694861569,4289,-1694861569,4297,-2080487681,2083585662,-163148901,-1577957751,1183385272,108462070,384976525,2144336,3192912,-790081456,-1706012153,4403,1358579337,1132186,-92864768,1134234,-734100736,292814857,-1207535873,1344145076,164902655,1157786,120496384,-1577826679,1183385394,-28915720,1183514624,-59836418,3258777,100923895,100861740,1183385620,-28931086,-59836608,66713497,50801670,-1995959290,548992582,414732288,1996443648,123070718,-2120593326,-1996488687,1996487238,-230257402,1996443670,294296314,1996423168,294820602,1191116800,-25263106,-1952744400,1183446598,120627698,-637303,1183647350,-1202710798,-1202716640,-1202716648,-397410256,1347553031,1169818,-96040704,304192080,1996423168]},{"sector":16,"data":[311007994,1048772608,1946159572,108461841,503786680,-734593200,-26103,1996423168,-18426,452688,-1034033781,-1957363706,317490156,-1207535873,-1706033151,65535,172635903,172504831,1183386,-163149568,755254923,171835391,-385649152,-1073544022,-1476448621,1996428930,-1976107258,310483468,1183383552,1446445054,1412890378,312056330,1183383552,108462076,503760568,-59310256,16777114,108461824,113653503,113784575,16777114,108461824,113653503,114046719,1200538,108461824,113915647,114046719,1204890,108461824,113915647,1208404129,-26032,1996423168,-1942552826,-1908998387,1211563789,-26100,1996423168,-25755898,16777114,-59310336,16777114,67692800,171063039,170931967,16777114,-62486272,-1207535873,1344146186,-1694730497,4812,-1207535873,1344146186,-1695123713,4828,-1207535873,1344146466,-1694730497,4933,-1207535873,1344146466,-1695123713,4949,-1694730497,4957,-16353537,-16107978,-1710607306,4898,-1980217719,1996487254,153466886,-4698082,179851519,-1202708981,-1706033115,65535,-16353537,1996487286,325950200,1877540864,1312227075,1278672650,330275338,1183383552,108462076,503793336,-59310256,1295002,108461824,503793336,-159973552,1299098,-59310336,1032090,108461824,173160191,173029119,1312154,-129595136,-371063,922682998,922684840,-55046742,508567048,344562256,-1706033152]},{"sector":17,"data":[5263,2122547947,175440644,171849471,171718399,922683627,922683970,412748352,-1996488684,1996487750,168998918,1996443678,333617916,1996423168,168998918,1996443678,334666486,1996423168,169523206,1996443678,338860796,1996423168,169523206,1996443678,339909366,-1930887168,108462078,172373759,172242687,1357210,-129595136,-371063,-16103882,-1710603210,4004,-2080618871,17503294,1996435573,191543302,1996443678,342006518,1996423168,191543302,1996443678,343055094,1996423168,-600375546,-566821110,207009802,1996435179,206223366,1996443678,263690998,1996423168,206223366,1996443678,352164598,1996423168,-231276794,-197722358,165328906,1344163870,465818,-6664192,-16776961,922682998,922683974,1620707908,-1996488683,1451880006,108462064,172635903,172504831,16777114,876019456,1781989127,353016327,1183383552,108462068,135673599,135804671,121779967,121911039,120862463,1347469355,-1174396744,1347551436,1390234,108461824,503846584,-159973552,1394330,876019456,272039687,357734922,1996423168,1479999238,173711626,145491459,1110900560,1144454919,876019463,1354771207,2144336,1375784122,-26032,1996423168,173586438,1996443678,270244598,922681344,1996425012,301898484,1996423168,-260636922,-1695648001,65535,-16353537,1996487286,318020344,283705344,976683005,943128330,322083338,1183383552,108462076,503897272,-59310256]}],[{"sector":1,"data":[1421722,108461824,503897272,-159973552,1428122,108461824,503806136,-59310256,1223834,108461824,-385386312,1996488238,185251846,1996443678,366648054,1996423168,122075142,1996443678,367696630,1996423168,168998918,1996443678,368745206,1996423168,169523206,1996443678,369793782,1996423168,148682758,1996443678,370842358,1996423168,125351942,1996443678,371890934,1996423168,203601926,1996443678,314350326,1996423168,374790,-75044784,1048796907,1963002644,108461832,-352320584,108461830,1342178488,-300056,95946358,1642614784,108462075,1342177976,-305176,129500790,1307070464,108462075,-397361109,1996487492,636934,372945643,317198992,328602997,335090582,321459646,301339489,-1695123713,4836,-1034033781,-1957363708,317490156,1183471191,-1947981308,-126449168,-1962588534,-92370440,-1996077430,-147063226,-963967882,-947191061,1996375611,1995913996,-339309820,-339244281,-28931581,1005864584,-1962642441,-1962742842,-28951609,-147125133,-963967885,-947189781,1183450091,-163149570,-1979699015,-466947002,720787082,-138279946,16713185,-21376469,-1544423679,1183452220,-196724490,113708917,3296,204080839,-454492128,1010729728,629086220,720782986,-1963947036,-125045690,721432761,-1948125242,-775027761,734069737,63933394,-336463922,-163149269,-259267542,-1946925430,767951864,-654900738,-1175566711,-947191760,-503855573,-772911477,734069737]},{"sector":2,"data":[-294193198,-1978867549,-466947002,1183510667,-138007562,-772240424,-297367064,1177273995,-754732552,-297401376,-134753749,-1947187575,-96064570,1174659283,-137221138,-230258185,1177273995,65065982,-768872890,1183447031,-126469636,1177224565,-1977685006,-466947002,1979336251,-263812341,100419115,166395920,737298059,537260102,204120832,92127243,204080771,708739888,92155916,204091011,-1956684240,79846885,-326413056,294531,1182991475,2122526724,74854404,805596803,134512259,1183520115,138816262,84174583,61931524,1174661331,-2094732536,1930953854,105286405,2122521067,275980292,721428665,1183515726,138816262,-739515913,-1962391925,113401317,-326413056,-2096436093,1962935422,16758809,721839863,3193298,1183445495,-129594882,-369736055,2122514596,410458118,84166283,1727463472,1574150,817484331,-1980631296,468449862,-150583669,402981990,-1177408768,-235470800,721833611,72221640,-1946530167,-523172282,-1980086741,-11469754,1183578742,1049864,-13768624,-150929479,1574369,817484331,-1980631296,1996486214,-92864516,-402098433,-4587761,98694912,-768933864,-150982471,-129594895,-231681,1183578742,1060104,-17962928,-150929479,1574369,817484331,-1980631296,1183579718,-754404866,-129627168,-225783253,-527772534,1175175210,1575324662,3016386,9961731,6815747,251396355,6946819,217448707,7274499,218365955,1638655,345964803]},{"sector":3,"data":[65538,298582275,131074,204341251,2162943,359530755,589826,362872835,2490623,306249987,1245186,305201411,1310722,253362435,10092546,328204547,2162690,351076611,2228226,348258563,2949122,10944771,2555907,12583171,2621443,5701891,2752515,214368515,3866625,177471747,11337731,95420675,11403267,66978051,11534339,87032067,11730947,16646403,11796483,179110147,11862019,360579331,4325378,379322627,4521986,246219011,4063235,81461507,4194307,200016131,4325379,255066371,4456451,177864963,4521987,176554243,4653059,205324547,5767169,206307587,5832705,327811331,5898241,9109763,4980739,14745859,5701634,361824515,5308419,119603459,5963778,309723395,5505027,320078083,5570563,175309059,5767171,77791491,5963779,69796099,6619139,125567235,6750211,2004055149,1167087646,518818645,-326903666,205949730,1946226749,17906951,954935668,-401705217,-1073020865,1996426357,-18418,41130576,1996423168,112654,-26032,28835840,-15471872,1996426870,108461834,-402098433,-353697426,-310132693,535137026,181030237,-326413056,-400495485,113706908,1742,16664263,-25263360,-14584576,-1593252298,117376718,-2147154226,850939904,-1202708986,-1706033025,271,91602955,-352321096,-1983894782,850984518,-1202708986,1344144758]},{"sector":4,"data":[16777114,1975520000,-837877828,1354771206,-150975816,1342623278,16777114,170042112,108314635,16678531,-1070922380,-16720919,-1710611914,65535,-1996049757,1187505222,-956301088,57926,922713323,1183516902,8390114,103987280,2142785566,-6664192,-1962934017,1344201798,-16441368,347604086,28856320,-1070903292,-465138864,1620725790,-2097151999,175505402,1979711037,-28915963,1586167809,86548964,1964525369,74907426,1342182584,1342441400,736261887,-1706012480,424,31475399,-498693376,-2096404317,-11869114,-828251578,-498714362,2045313917,-25263105,-385649664,2122579792,477429984,191406920,-1207666945,-1202716652,-11533305,722167862,-1706012480,665,-1207666945,1344144656,-1207798296,-443875327,180829,-2081649835,1183516396,59456776,149488501,-385647103,20775459,1025537024,2054422530,1962939453,12118275,1963165245,29944067,1963165501,30533891,-2097009687,822334,28839029,204251904,37919312,-1070923776,2130884688,-1706012007,592,39230032,1996423168,131262474,58048523,-1711147031,65535,210517635,722171136,204252096,-26032,-1070923776,2130753616,-1706012007,65535,-26032,922681344,-6682078,-16776961,-1710611914,65535,722106111,-6664000,-385875713,1996423596,84981770,-1477947362,175570689,1342182584,1342441400,191379199,1347469355,16777114,25618688,-1207535873,726664201,1347440832,211098]},{"sector":5,"data":[71731456,1979711293,84981765,1253575403,74381056,112330243,-1929623927,1996488286,-397402614,1307115862,175570689,1342409656,1342410168,1342409656,204186,20375808,-1207273729,-1202715765,-1202715763,-404028532,-1207273729,-1202715765,-347077747,175570906,1342410680,1342410936,1342410680,235162,175570688,1342182584,16777114,163074048,-1070903292,-1706012592,65535,1023690377,91619327,-351989576,4896778,50622199,-1996049914,1586297926,175570942,1342411704,-1929623925,2360794,-2103816110,-16777213,-1799878026,1183535107,-27882500,1375742469,61315664,-1645674496,175570688,1342410680,1342410936,-26032,1996423168,60012554,91797584,-6664162,-16776961,-1799878026,2042122243,-924115451,-1207273729,-1202715770,-1202715769,518587270,175570943,1342408376,-385644616,1996488500,60143626,175570768,-26032,-1073020928,28837237,721611520,513429696,-352321531,59522349,-269941899,59588094,-135724171,59719166,-51838091,59784702,1894318965,60112383,-1757562764,-385649405,-443810220,574045,-2081649835,1996425452,59291656,73319504,511180582,-1705983957,65535,-1207404801,-1957690478,1451951174,3540230,1922715730,-16777212,-1984427914,1183535107,106334980,1375746565,76126800,1996423168,59422728,71732048,84301451,1347551302,303258,142016256,1342410424,-1962654069,1040516694,-1706012160,1207,-1207404801,-1957690479,1451951174]},{"sector":6,"data":[4326662,-694529966,-1006632956,-2094660514,1962942591,142016296,1342411704,-1030962293,1375740933,83532368,1996423168,60078088,71732048,84301451,-346947542,142016284,1342411704,503675576,84646480,1996423168,60078088,91994192,815419422,-16777210,-1783101322,1589923843,2013210116,-26078,1589903360,2139301380,276103200,-1207404801,-1202715761,-1202715760,199951247,-1207404801,-1202715761,1347421072,357530,73319424,440896294,208977931,1946157373,146794,350975348,-1207404801,-1202715765,-1202715763,-1706032245,1454,385369741,71732048,84301451,1347551280,395930,73319424,478118694,638022656,35422083,1996441205,59160584,59226192,59160656,99719760,1589903360,2139301380,1735721500,385369741,92059728,-11080930,-1950873482,-1917300733,-1934077949,-6558973,-1950873482,-1917300733,-1897181181,-1207404801,-1202715770,1347421063,190874,73319424,478118694,-1926990589,1343682630,503676600,-26032,1183645696,-1957685512,1451951174,3147014,-6664110,-16776961,-2051536778,1183666179,-1706027272,875,-1034033781,-1957363706,351044588,-1559874888,512494472,1996426122,74907398,-1929326872,1343679558,-1006582040,-1993997218,1183651911,-397404436,1589903543,1200170500,-330920678,-1461170154,73319424,474450214,384583309,10086480,637820612,-1927395447,1343679558,-1006597400,-1993997218,1183653959,-397404436,1589903483,1200170500,-1933341918]},{"sector":7,"data":[2360770,1760055378,71731968,84301451,1347551274,-1962911000,1451951174,3147014,1290293330,71731968,84301451,1347551286,-1962918168,1451951174,3802374,820531282,71731968,84301451,1347551294,-1962925336,1451951174,4326662,350769234,71731968,84301451,1347551302,-1962932504,79846885,-326413056,-1962218365,1451951174,-62486266,-939633015,64070,193470148,541032486,1187452277,-1006632454,638289950,1965047680,-2012807345,-990844149,638289950,1965834112,-2012807361,-2144474357,1946220158,-96024767,2122317824,276111862,-16490812,-970587066,117374983,418057096,193470091,193464063,193595022,-1006138842,1191117918,126363140,193470148,-2012771802,742192710,117422453,2122517384,175374586,-16490812,-970587066,1589911559,130426372,-129579264,552271872,972455552,179840895,-126945536,-237884,-930350010,-1744336346,-377239549,-129070800,654073540,1183319946,2100313334,-129594413,-1034033781,-1957363708,116163564,-1996128072,1586297414,-28915716,1344143360,-106869,-472777146,89819019,922701854,1335493928,-1560281080,1996424488,-92864516,-106869,-472777146,89819019,922701854,1872364842,-1560281080,1996424490,-92864516,-106869,-472777146,89819019,922701854,-1885731540,-1560281080,1996424492,-92864516,-106869,-472777146,89819019,922701854,-1348860626,-1560281080,1996424494,-92864516,-106869,-472777146,89819019,922701854,-811989712]},{"sector":8,"data":[-1560281080,1996424496,-92864516,-106869,-472777146,89819019,922701854,-6683342,-1560280833,1996424498,-92864516,-106869,-472777146,89819019,884494366,508567045,440400,152738384,1996423168,-92864516,-106869,-472777146,89819019,985157662,508567045,440400,155097680,1996423168,-92864516,-106869,-472777146,89819019,1085820958,508567045,440400,157456976,1996423168,-92864516,-106869,-472777146,89819019,1186484254,508567045,243792,159816272,1996423168,-92864516,-106869,-472777146,89819019,1253593118,508567045,243792,162175568,1996423168,-92864516,-106869,-472777146,89819019,1320701982,508567045,243792,164534864,1996423168,-92864516,-106869,-472777146,89819019,1387810846,508567045,243792,166894160,1996423168,-92864516,-106869,-472777146,89819019,1454919710,508567045,243792,-26032,-443875328,-1957313699,-1091796500,-2033756672,130894,-1207666945,-1202716652,726664201,1347440832,77722,-96040704,1962934077,4896805,66744055,-1996049914,-1929426298,-989901666,654264990,-1927776257,385827462,101574736,-2037575445,1343684418,503678392,180460112,1996423168,59488260,175807056,-1073020928,-2033776524,65394,1996431083,59553796,186423888,-1073020928,-2033776524,130930,-2033776917,196466,-9259265,-12024179,-1192734698,74907397,1342408120,378029709,440400,-26032]},{"sector":9,"data":[-2037841920,1183711056,-1924131162,1343653958,362906,-2008642304,-26032,2122317824,1081409672,149305087,1342218424,379995789,5290064,194026064,-1073020928,1996425845,194812420,384499712,-1929087233,1343661638,504182968,3192912,-26032,-2033778688,65358,-1207666945,-1706032249,994,376750091,547782272,-2033776523,262004,-2033770261,130932,-1232398101,2055274320,141893797,-9140537,116064258,-9140537,-1224802304,-2037514380,1343684434,-955975960,130118,-1207666945,-1924136056,1343683654,-1705983957,65535,16547459,922697845,-1581774618,1183666176,-1202710874,-1706033072,148,175489035,-1710983425,65535,1996429035,-1505325820,951603222,-1202708979,-1706033104,2826,-11630905,1996423168,59291652,1418104144,-1202710785,-1706033150,3119,-11237747,181049936,-1098711040,1962999630,-373282043,1996424189,59815940,202086992,-2037841920,-1924071560,1343682630,-16493848,-1783102346,1654280195,-1996488694,1358920326,-11106675,954748950,74907396,1342411704,-8616307,112742422,1436176384,-1996488692,-1912647546,385842310,1354170192,61532415,-1207666945,-1924136044,1343652422,1342179000,817818,1350994176,-2109305345,-1224781802,-2048327856,74907395,1342411448,378422925,178256,211786320,-2037841920,1183711056,-11528562,-385920842,1996424032,59357188,-1840870064,45633558,-996519936,-1996488692,-1912647546,1343656518,-11487489]},{"sector":10,"data":[-16565272,-1900542858,1183666179,-1202710890,-1706033150,3305,-11499895,378947213,1354170192,51833087,-1207666945,-1924136047,1343658566,1342177976,855706,1350994176,-1706652161,-1224781802,-236388528,74907394,1342409400,379471501,178256,179214928,-2037841920,1183711056,-11528546,-385920842,1187447500,-1207959302,1183384967,-1537307486,1586188318,-96010246,-2020875311,1344144730,-12417395,1838829590,-1996488691,-1072955834,1996433524,-1569259612,-369013,-472778170,89819019,-2037559266,1343684424,892570,1958742784,112645,-1070923029,201213577,-14125888,1996465270,-94467166,-772126977,1518832611,-1924129275,385831558,231709264,-1073020928,28837236,721611520,-28931648,678739979,-5998849,1586209398,-96010246,-2020875311,1344144730,-11237747,-6664170,184549389,-1207601984,48955393,1183432747,1958743038,-1535705305,-1952286977,1191180894,-1948003846,503667335,-129594032,815419414,184549390,-1207601984,48955393,1183432747,1958743038,-1535705304,-1952286977,1191180894,-1948003846,503667335,1451658576,-1706027265,3681,91537419,-352321096,-1983894782,-1072955834,1996433524,-1569259612,-369013,-472778170,89819019,-2037559266,1343684476,954778,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166,-772126977,1518832611,-1924129275,1343652422,967066,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166]},{"sector":11,"data":[-772126977,1518832611,-1924129275,1343653958,979354,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166,-772126977,1518832611,-1924129275,1343655494,991642,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166,-772126977,1518832611,-1924129275,1343656518,1003930,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166,-772126977,1518832611,-1924129275,1343657542,16777114,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166,-772126977,1518832611,-1924129275,1343658566,1028506,1958742784,112645,-1070923029,201213577,-14191424,1996465270,-94467166,-772126977,1518832611,-1924129275,1343659590,870298,1958742784,112645,-1070923029,201213577,-16222784,-6683530,-1207959297,-1202651137,726663194,-1934077760,-1706025467,685,1577058744,-1034033781,-1957363710,149717996,294531,1996426101,108461832,-351956552,105286467,-1995942261,1451883078,-129579012,1187446785,-352321282,-94452716,653936383,1948270464,-129579259,1191116800,71732222,2097038905,-125926428,-15698944,1996425334,93632518,1452953630,-1962934262,113401317,-326413056,-1962480509,1451951174,-96040698,-1946397047,-1181153210,-101253110,-1003437440,1191117918,394798596,-1727510901,1183447543,2143292168,73305054,637816575,-1962932282,1451951174,-96061178,1589913203,126494458,-989968760,-1977220002,-94452729]},{"sector":12,"data":[653936383,1589905288,72285956,654198410,-806680696,-1034033781,50339590,51372033,50360064,16828673,50332928,-16000512,50337280,16934913,50333440,16835585,50333696,16932609,50333952,-15742208,50338048,-16633856,50338304,51098625,50331904,-16059904,50341632,17313537,50346240,50346497,50342400,17364481,50346496,17793281,50346752,50468865,50375936,51045889,50376704,50470401,50349312,50465281,50349824,16822529,50353920,17844993,50354176,17178369,50354432,50343425,50354176,50538753,50354944,50617089,50355200,51105793,50355456,50611201,50355712,51082241,50355968,50678017,50356224,50590465,50356480,51114497,50356736,50993409,1828742400,1937208180,1835757164,1818978915,1167087646,518818645,-327034738,-1070923514,42055760,36608592,-2037841920,-1072955572,1996433525,2923014,-1706033152,441,1342588553,1342177720,117914,108461824,121498,-373282048,-1581776444,726670853,-1202696000,1344144800,-11762037,-2135404514,-1046851582,-1962934272,-1979757434,1187510342,-1962934112,1065416798,-2094238464,1946198142,25094403,149305087,1342204088,379733645,5290064,61643344,-1073020928,266929012,112641,-1207890967,1344144810,519587467,95008848,-2037559266,1343684346,1342197944,152986,-91845376,244338942,-2147331096,16710334,-941030539,-1605974272,-2037579775]},{"sector":13,"data":[-1202651398,-1873803854,30795790,-1946532215,4161752,1191119732,-92864518,568856208,-94467326,1946173312,9038083,1344193419,503939768,19438160,2045444096,-11630963,1183535126,-1706025224,848,-11630963,-1900523498,-1706025460,328,-11630963,1183535126,-1706025222,65535,-11630963,95729744,-401698736,-661978777,-16775226,28837494,-1070903292,1317440848,-1706027265,65535,-1191545089,-1873803850,21096462,-1946532215,4161752,1191119732,-92864518,-1914171760,-94467327,1946173312,-8591101,-500085,1065416774,-385649408,-252969275,1183432747,108462076,114586,-6664192,-1996488449,-1202715066,-1706033151,65535,16547459,1996425844,62429702,384499712,-1928956161,1343660614,504182968,3192912,64002640,-1224802304,127598412,-385875966,-1224737213,-1600454836,-1207959550,-310181887,535137026,46812509,-1873273344,-326412987,-2082959842,-1070920468,52541520,-26032,1183383552,1975520244,-339727612,105286521,-1070903266,-1195880368,-1957683707,1344205894,1342382264,165018,-129579264,1183514624,-163149324,-2131337589,812908607,503727755,516131664,96057424,1183666206,-1202710790,-1706033150,65535,1358579341,-1847062896,-92372992,-955091968,129094,-1695254785,65535,-336050549,-161576179,-2131343617,-1334575041,-310119445,535137026,46812509,-1873273344,-326412987,-2082959842,1183517420,-96040696,-2131075445,829685823,-1996077429]},{"sector":14,"data":[-1014236090,-336050551,-128021744,955664010,-15567609,1191181382,-60912648,1183319946,1975519990,-60912668,1962950528,-96040187,1191118315,-2084705286,-443874579,-900899553,1478361092,-1957345904,-661774612,-1962611581,1183385158,-16520196,1586232390,541032700,1183577460,1960327942,-1957683701,-1706025277,65535,-1996077429,65797190,-1946401025,1065417822,-1946848000,-667220410,1325339764,-60912644,1948270464,-62455819,-956539253,-310181881,535137026,46812509,-1873273344,-326412987,-2082959842,922703084,1773668582,1183666176,-1202710868,-1706033072,65535,175489035,-1710852353,65535,1996429035,-1404662522,951603222,-1202708979,-1706029008,65535,-1962742397,1297948645,721610,24117507,7274499,1442051,327681,33227011,458753,32637187,65539,4259843,2556159,3735811,2228227,6488323,3801089,2490627,3014659,9830659,11534339,18219267,5767169,20447491,5832705,2004055149,1802398835,0,5,0,0,1349284931,1818586721,1986356224,1936024425,1852794368,1845523316,1768161391,1735355489,1953392896,1702428780,65651,7562585,1392537422,1299210615,1702065519,1953789250,7564911,1684957559,7567215,1684957559,7567215,1953394531,7106418,1953394531,7106418,1349284931,1818586721,1920287488,1114795891,1802398060,1702125906,1852405504,1937207140,1970226176,1130720354,1801677164]},{"sector":15,"data":[1701146707,1769406564,2003788910,-65421,3866647,59,3145728,1835619433,1852375141,788556916,1631875840,1761633652,7107694,1416822842,6647145,1819569769,5062912,892416371,1852375097,1342205044,846397517,3749171,1819569769,1631873280,1761633652,7107694,1936880963,1816293999,1382772329,6648929,1684957559,7567215,1651863364,1816356204,1399546729,1684366704,1852405504,1937207140,1852405504,1937207140,0,1835039,1966111,1966111,2031647,2031646,2031646,524293,131072,589827,262150,65543,1886216531,1665754476,1459646063,1868852841,1767309431,2003788910,1954047316,1919111936,1651272815,1090548321,1986622563,1953059941,1224762732,1952670062,1415935593,1701606505,1953059840,1700029804,1459647608,1868852841,1634879095,1291871597,7695973,1970169165,1954047316,1667318272,1869768555,6581877,2097184,1869377379,1660973938,1919904879,24838259,26018178,27459991,29032881,30147015,1968046549,1867541612,1996518514,1868852841,29559,1953656688,1677721715,1667855973,29541,1769366884,7562595,2883628,1677721644,1667855973,1769406565,2003788910,2883699,3014700,1986356224,6644585,1684957559,7567215,2883628,1986356224,1936024425,738208768,738208768,1986356224,6644585,1684957559,7567215,1684957559,7567215,1769366884,7562595,1769366884,7562595,1986356224,6644585]},{"sector":16,"data":[1684957559,7567215,2883628,1986356224,1936024425,771763200,1919168000,2556022,1230390596,1330464067,654329156,1819627008,1919897708,1769406580,2003788910,2883699,2883630,1769366884,1996514659,1868852841,1996518263,1868852841,29559,827150147,1329791034,3813965,1953656688,2883699,808464945,738208768,822094848,892219648,738210304,6630400,738225964,875298926,3484672,738211372,942407735,3222528,892219692,3288064,28716,827150147,1329791034,3813965,1953656688,1869611123,7566450,1543527482,704653824,1380205568,1329987670,1163023438,3801171,2883628,1701511226,1818586738,1308646400,1349282933,7631471,1684957559,7567215,1986356224,1936024425,738208768,738209280,1986356224,1936024425,1986356224,1936024425,1701052416,1701013878,1852405504,1937207140,738208768,1986356224,6644585,1684957559,7567215,1684957559,7567215,1986356224,1936024425,11264,1953394534,3014771,1986356224,1936024425,1701052416,1701013878,2883699,2883628,1543527424,1711287808,1937010287,1701052416,1701013878,2883699,2883628,1986356224,1936024425,1986356224,1936024425,1701052416,1701013878,1852405504,1937207140,738208768,1701052416,1701013878,1852405504,1937207140,1852405504,1937207140,1986356224,1936024425,1711287808,1937010287,1852794368,29556,1953394534,1711276147,1937010287,1868955648,7566446,1953394534,1868955763]},{"sector":17,"data":[7566446,1130954798,1953396079,1761638770,1702125892,1967352064,1852142194,1761638755,1768384836,1761637236,1701669204,2051827968,7303781,892416371,846397497,3749171,1920287603,1668179314,1416822905,1937076072,6581857,1667581043,1818324329,1631875840,1929405812,1701669204,1766617856,29811,0,0,0,0,0,0,1,131072,0,19777,1297088512,0,36,2883584,3014656,3080192,3801088,2883584,77987840,78972079,80151743,81003725,81790170,83100906,84083965,2753801,0,2097184,1819569769,1761619968,7107694,1819569769,2236928,2236450,0,0,1986356224,1936024425,1701052416,1701013878,2883699,2883628,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,390070272,392173400,1953306540,1819506547,1668115310,257,4194304,524352,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,1792,0,1792]}],[{"sector":1,"data":[0,1792,0,1792,0,1792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12582912,0,12582912,0,12582912,0,12582912,0,12582912,0,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12648448]},{"sector":2,"data":[-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,3670271,16128,3670023,16128,-13041657,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,3670247,16128,3670023,16128,-12648441,-1,-12648193,-1,-12648193,-1,-12648193,-1,3670271,16128,3670023,16128,-13041657,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,-13041433,-12632065,3670247,16128,3670023,16128,-12648441,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,-12648193,-1,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,2097409,4194337,524352]},{"sector":3,"data":[0,0,0,0,0,0,0,0,0,65281,0,65281,0,65281,0,65281,0,65281,0,65281,0,0,0,0,0,0,0,0,14688000,0,15744768,0,16285440,0,16580352,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16711425,0,16580352,0,16285440,0,15744768,0,14688000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680]},{"sector":4,"data":[16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,-16711680,16318463,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,0,8390400,1953300480,1936607504,1819042164,1869182049,33554542,1684291840,2003127840,1769099296,1919251566,3026478,1140851456,1952803941,1917853797,1702129257,774778482,589824,543450177,544695630,1953394502,3026478,1140853376]},{"sector":5,"data":[1952803941,1866866789,774796398,1393557550,1886745701,65536,1852731203,1769235301,779316847,11822,1917845508,1702129257,774778482,360448,1835888451,1667853941,1869182049,1344303982,779383407,-1879036370,1717924432,1852142181,7562595,1392510592,1701147235,1866670190,1936879468,3026478,-2143289344,167778585,-1912557568,0,524296,524408,10,1132613634,1970105711,1633905006,1852795252,1699946611,1852404852,29543,1441800,524332,10,1350717442,7631471,335559680,201335808,67321344,-2142240256,827150147,1879048250,603984896,1056967680,1027,1329823824,3813965,637536256,134228992,2560,-2108685824,1685414210,1952535072,14949,2359356,786461,820,8474755,905971712,134228992,2560,-2108685824,1685221207,1852132384,6845543,872430592,201332736,67314688,-2142240256,1342177332,402666496,620760064,1027,3506256,872441856,201332736,67315200,-2142240768,-2147483594,402666496,654314496,1027,3637328,872454144,201332736,67315712,-2142240768,134217784,738215424,167774208,33554432,1632666192,2037672306,3932160,2359364,52494348,1342308356,1702249856,1610612846,603997184,570428416,1027,1682931792,-2080374684,603997184,587205632,1027,1867415632,25966,5636104,524332,10,1401049090,544239476,1937008962,3932160,2097236]},{"sector":6,"data":[53018636,1342308356,12672,5505120,786464,262954,830492672,13614,5505156,786464,262955,847269888,524288,2883686,655368,1342308352,1851869314,1634235236,25963,6553660,786484,262956,1216368642,2003071585,6648417,1677750272,201339904,67316992,-2142240768,1701736270,2424832,2097272,65550,1342373889,7032704,2013293312,234889216,512,-2142240000,1668178243,27749,2004055149,1802398835,1802134381,-2143289344,419436804,1073789952,0,393224,524356,10,1149390850,1969317477,1344304236,1953393010,29285,1179656,2621572,196628,1149456547,1969317477,1344304236,1953393010,29285,1310868,917536,65537,1333809155,-1811939221,536881664,33558016,50331648,1631813712,1818583918,1953300480,1819506547,-2143289344,419436806,1409338368,0,393224,524320,10,1350717442,1953393010,29285,393364,524332,10,1132613634,1701736047,1869182051,134217838,-2080370176,905979904,-1560280831,1866695504,1667591790,1852795252,9699328,3145746,19660840,1352859649,1852785539,1952671086,7237481,1073753856,234889216,16777472,-2142240000,27471,4194429,917536,2,1132482563,1701015137,1828716652,1937208180,1835757164,1818978915,1350565888,10,1744871424,0,524300,1703996,459152,1417695235]},{"sector":7,"data":[6647145,134241792,436219904,117545472,-2142240000,1702125892,524288,4456488,28180532,1342177287,1920287616,544370547,1852402754,201326699,1006649344,-1543500800,50332161,1919112016,1114401903,29281,872418304,134221824,2560,-2108685824,2003790931,3670016,1048628,655368,1342308352,1935754882,1409286260,1140860928,-1040174080,1793,1866760272,1701601909,1768702752,27491,4194392,786492,131512,1666404355,1819045746,7496002,5767168,1048628,655368,1342308352,1869370242,-2080374665,268448768,167774208,33554432,1632010832,29811,2004055149,-2143289344,167778572,-1946088448,0,393224,524352,10,1401049090,1701147235,1866670190,1936879468,524288,7864338,1310760,1352859649,1919112067,544105829,1869377347,29554,4980744,524312,10,1216499714,25973,4980772,786524,131772,1666404355,1819045746,7496002,524288,1572964,655368,1342308352,1769095810,7628903,1677730816,201350144,33738752,1397752576,1819243107,1918976620,134217728,402684928,167774208,33554432,1866695248,7499628,2080384000,201350144,33736192,1397752576,1819243107,1918976620,-1946157056,2013267456,167774208,33554432,1632862800,1701605485,9175040,2097270,65550,1342373889,7032704,1979758592,234889216,5376,-2142240000,1702061394,-469761932,536901120]},{"sector":8,"data":[33558016,50331648,1631813712,1818583918,1953300480,1819506547,1668115310,1936485226,-1874853888,419436804,1040227328,0,524296,524340,10,1300385794,1702065519,1953517344,1936617321,524288,9175060,9830412,1342373890,1717914752,1769090932,544499815,1937076077,1969365093,1852798068,2004033651,1701867617,603979876,536881152,16780800,50331904,1800372304,5767168,2097192,131086,1342373888,1851868032,7103843,1937009920,1852601207,-1874853888,100664867,-1644099072,0,393222,524356,10,1132613634,1953396079,1394637170,1769239653,7563118,301991424,671116288,16782336,-2091867392,1853189955,544830068,1953785171,1936158313,7864320,9175054,655404,1342177287,1835619456,1866866789,1952542066,8126464,2621466,59703308,1342308356,540160384,1920298856,8126464,2621482,59768844,1342177284,540291712,1920298856,11141120,1310748,655368,1342308352,976302466,14645,1704128,786450,915,8474755,469817344,134222848,2560,-2108685824,893006642,-301989831,301996544,-1811936256,-2097151997,33104,2883754,524328,10,1401049090,1918988389,1919906913,-738197446,167782912,-1862267904,-2097151997,33104,4194310,2883692,458762,1149259776,543519841,1836216134,29793,4980746,786456,263051,1300254722,22852,4980784,786456]},{"sector":9,"data":[263052,1149259776,22861,4980822,786456,263053,1501581312,17485,6160394,524328,10,1401049090,1918988389,1919906913,872415290,167795712,-1912599552,-2097151997,33104,4194424,3670156,458762,1317031936,1700949365,1866866802,1952542066,8126464,2097230,655368,1342308352,808464770,14896,4980894,786442,914,8474755,1543535616,134225920,2560,-2108685824,1768121668,980181357,10354688,655450,59310092,1350762496,2080374913,536898048,167774208,33554432,1766621776,3830899,1744870912,201329152,231936,-2125430016,11796480,3932244,655368,1342308352,1667581058,1818324329,1734960160,980644969,15859712,655442,59244556,1350762496,-1275068287,1006658560,-1795159040,50332163,1699512400,1852400737,1700405351,28530,8126584,1835148,458762,1132482560,1701999221,544826222,1836216134,29793,9044092,524316,10,1401049090,1868721529,14956,8913050,786450,901,8474755,-2013219840,201335808,67339776,-2142240256,1717924432,30825,8913116,786468,263047,1400918016,1768318581,100663416,536903680,16780800,50331904,1800372304,2883584,2097280,60227598,1342373888,1936020096,29797,8388690,917536,2,1132482563,1701015137,1828716652,1937208180,1835757164,-2143289344,419436810,1509993472]},{"sector":10,"data":[524296,524352,230,8540162,335546368,134243328,2560,-2108685824,1702063689,1948284018,1679844712,543912809,1752459639,1701344288,1811939360,805311488,-100661248,33554432,33360,1835016,524396,10,2038583298,1998615919,543716201,1629515636,1763730532,544175214,1986622052,8293,1835124,524292,240,8540162,469792768,134228992,2560,-2108685824,1919885356,1869112096,6648687,603981824,134257664,2560,-2108685824,1629515361,1919251564,1769234798,1679844726,1702259058,1919509551,1869898597,3832178,805308416,201366528,-2147476992,-2125430016,2359296,2097220,65550,1342373889,7032704,1140877312,234889216,512,-2142240000,1668178243,27749,-2143289344,7,1107360768,0,524296,524392,230,8540162,335546368,671128576,16782336,-2091867392,7340032,5242888,16384008,1342308354,8322,393408,786484,524287,8540160,134267136,134230528,16833536,-2108685824,11272192,2097198,65550,1342373889,-738197376,536882688,33558016,50331648,1631813712,1818583918,1953300480,-2143289344,419436806,1208007680,0,524296,524460,250,8540162,301991936,134261760,66560,-2108685824,524288,11272222,1703948,1350762624,385876097,536883712,100666880,50331904,1700364368,1308622963,536883712,117444096]},{"sector":11,"data":[50331648,1867415632,8716288,2097202,131086,1342373888,1851868032,7103843,1937009920,1852601207,1784900971,1685285995,-1874853888,285218310,1258328064,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,1852793730,1819243124,0,9437198,-65528,1342308353,1852785538,1819243124,1851871264,27749,2228262,524352,131071,1451380738,1769173605,824209007,3223598,788530432,151028736,33554176,-2108685824,2037411651,1751607666,547954804,892877105,1766662188,1936683619,544499311,1886547779,889192494,536886016,16780800,50331904,1800372304,1953300480,1819506547,1953451538,1869505824,543713141,1869440365,221149554,1953394499,543977330,1701732688,1816206956,1684104562,1970413689,1852403310,1866670183,1869771886,1632641132,778855790,1868710152,774796405,1867319342,778400629,1411001902,1830842223,544829025,1668246627,1864397675,1769218162,1936876909,1163133998,1308906579,73756271,544108320,1380199940,1177420886,1125338703,1953396079,1394637170,1769239653,779315054,11822,1953300480,1684291851,1769099296,1919251566,1769107468,1919251566,1818846752,977339237,1867388764,1769107488,1919251566,1818846752,1713402725,1684960623,1983975982,1634494817,543517794,1852404304,1936876916,1769099278,1919251566,1818838560,52443749,493118529,2037411651]},{"sector":12,"data":[1936941344,1634296687,543450484,1852404336,544367988,1701603686,1869878048,1769104416,1680827766,1667592809,2037542772,1631785786,1953459822,1684300064,1769107488,1919251566,46,1828716544,1937208180,1835757164,1818575886,543519845,1852404304,242378100,1852404304,544367988,1701603654,1141252154,1952803941,1750280293,1684370017,1769107488,1919251566,1818846752,1769414757,1847618668,1646294127,1701060709,1702126956,1142894180,1952803941,1935745125,1768124275,1684370529,1769107488,1919251566,1818846752,1712660581,544042866,1986622052,1768173413,1952671090,981037679,544165405,1986622052,1768173413,1952671090,544830063,1667592307,1701406313,1124871780,1869508193,1768300660,237003886,1852727619,1679848559,1952803941,8293,0,1937009920,1852601207,1784900971,1684291848,1852786208,1868958068,1713402990,56978537,341588545,1713401678,544501359,1701603686,1868963955,778333813,1635139855,1650551913,1176528236,1937010287,1852786187,1766203508,540697964,1684291843,1886339866,1935745145,1768124275,1684370529,1852794400,1768300660,320890220,1679847284,1702259058,1919509551,1869898597,272267634,1852727619,1629516911,1713398884,779382383,0,1953300480,1819506547,1668115310,1936485226,544165395,1953394534,1852383347,1818326131,778331500,1818575883,543519845,1953394502,1852786187,1766203508,540697964,1818575878,476410981,1701602628,1629513076,1668248435]},{"sector":13,"data":[1702125929,1868963940,1713402990,543517801,1869768213,1919164525,795178601,1701996900,1919906915,1310538361,1919164527,795178601,1701996900,1919906915,1886593145,1718182757,778331497,1851867916,544501614,1684957542,1631784480,1953459822,1818584096,543519845,0,1828716544,1937208180,1835757164,1851867931,544501614,2037411683,1818846752,1869881445,1937008928,778464357,1953451551,1869505824,543713141,1869440365,1948285298,1868767343,1713404272,778398825,1953451550,1869505824,543713141,1802725732,1634759456,1948280163,1868767343,237009264,1852727619,1663071343,1952540018,8293,1310392320,1869619311,544437362,1953720684,1763730533,1230446702,1313418830,1310076489,1919950959,1702129257,1763734386,1635021678,1684368492,1631785262,1953459822,1986095136,1868701797,86009972,1684955424,32,1937009920,1769099299,1919251566,1818846752,1869488229,1768693876,1684370547,544106784,776882519,776556105,1763714846,1869488243,543236212,1768710518,1919950948,1702129257,1768300658,3040620,1867388416,543236212,1768710518,1633820772,1914725493,778400865,369098752,1881173838,1953393010,544436837,1953721961,1701604449,1126575716,1869508193,1701978228,1685221219,2003136032,1952805664,1735289204,1852383347,1313429280,1229867310,46,1828716544,1937208180,1835757164,1818978915,1852397329,544698212,1801675074,1970238055,1460364398,1868852841,1700012151,1393259640]},{"sector":14,"data":[1819243107,1631723628,1091597170,1986622563,1767120997,543517812,309485890,1667329609,1702259060,1953059872,1109419372,1410232929,1701606505,1918976544,2019906592,1767312500,2003788910,1634879008,1292395885,544566885,158490946,1970169165,2019906592,1666388340,1852138866,1667318304,1869768555,107245173,1769235265,1225287030,1952670062,174421609,1701603654,1682251808,1460565097,1868852841,1700012151,538997880,1828716576,1937208180,544165405,1920103779,2036559461,1836675872,543977314,1667592307,1701406313,1311190628,1700949365,1718558834,1667589152,1818324329,1734960160,544437353,544501614,1667592307,1701406313,11876,0,0,0,2004055149,1802398835,1802134381,1395545396,741228846,538976288,538976288,741416992,808202272,808202796,539766828,539774273,539774288,740565024,741223468,742009903,1632252972,745431408,538976288,538976288,825761824,741482540,741485616,741354544,743260448,743264288,-1524621280,774646828,975974188,1312042028,1701344357,1851878514,539784036,857743392,824192049,841756716,824979756,555753516,555753516,1713381420,741223532,741157932,876293178,1735157058,745370985,538976288,538976288,539767347,741551153,741420082,538979377,538979361,538979361,539772448,791424044,992754220,1634879028,744842094,538976288,538976288,741552928,858534176,824980012,539767084,539762976,539762976,742793248]},{"sector":15,"data":[741092384,742009903,1884501051,745433441,538976288,538976288,875765792,741417004,741485619,741420081,740368416,740368416,1937002528,741092908,975974188,1228159788,2037145972,538976300,538976288,857743392,824192057,808202796,824979756,555753516,555753516,1277173804,741223470,741289004,876293178,1953068883,1819436410,744779361,538976288,539767092,741485617,741420082,538979377,538979361,538979361,774656582,774646828,992751148,1768838452,543450484,1735289163,745369444,741618720,808202528,824980012,539767084,539762976,539762976,748888096,741223468,742009901,1698968620,1918987630,538979435,538976288,892608544,741417004,741485619,741420081,740368416,740368416,1380655136,741092908,774647596,1395931948,1701078391,538979438,538976288,874520608,824192054,841757228,824979756,555753516,555753516,1260396588,741223506,741157932,876293166,2003988302,539785569,538976288,538976288,539768628,741485617,741420082,538979377,538979361,538979361,774656587,791424044,992751148,1936021300,1699160180,1851878770,538979449,741946400,858534176,824980012,539767084,1428955424,539783784,743261216,741092398,741223470,1967207483,1634890867,744581484,538976288,825630752,741417004,741485616,741420081,740368416,740368416,606085152,774646828,975973676,1177824300,1634496105,539780206,538976288,892543008,824192056,841757484]},{"sector":16,"data":[824979756,555753516,555753516,1293951020,740305995,741157932,876293178,1701344335,1866670194,1920233077,538979449,539766816,741354544,741354546,1092627504,1344285773,538979405,741090336,791424556,741095980,10753,0,0,0,1937009920,1852601207,1784900971,1685285995,0,2035482624,1835365491,7680,812801,694364160,1886339872,1734963833,1109423208,1953723497,1835099506,1668172064,959520814,539898936,543976513,1751607666,1914729332,1919251301,778331510,0,520093696,1090525952,2560,0,26214400,201328895,536576,-33488888,16654111,0,3166,0,1919243264,1634625901,108,0,184353024,1663565824,1866670121,1769109872,544499815,1937008962,1634038388,1850286189,824192611,775174201,1819033888,1734963744,544437352,1702061426,1684371058,46,0,4718623,655456,131072,-1879048192,524289,134217740,536872960,-536846081,0,718336,0,30208,469762048,806888556,806099000,0,203294208,2117090364,1010597388,0,410795008,2121809020,1013333118,1667261958,1014774883,1719549052,1717986150,1012939902,3670032,393312,408944670,7888908,0,0,0,1880624640,115,0,0,0,0,0,0,0,0,1711291392,2120629784]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[1142968148,538976335,538976288,538976288,538976288,1230131232,1414091343,1393167705,544239464,544370534,544695662,1953068403,538976288,538976288,1342836034,1701736296,1852138528,1953720692,538976288,538976288,538976288,1409944899,543517537,544366947,1713401449,1948283503,1969581685,538976368,1292504385,543517537,1851878512,1701978213,1987208563,1869182049,538976366,1342836034,543908713,1948282997,1952540008,1948283493,1701536617,538997620,537529666,1866997792,1970086007,222259299,1852785418,1952670068,1634038304,1919906924,538976288,538976288,222437408,1701593866,1730178657,1734439521,538976357,538976288,538976288,222502944,2003782922,2002873376,538976366,538976288,538976288,538976288,222437408,1634488330,1886593134,1735289202,1918986016,544105828,538976288,222437408,1751339786,1819632741,1635131493,1769234787,538996335,538976288,222371872,1634030090,1461854308,1629516385,1344300142,1701011813,538976290,222502944,1769101066,1193305460,1684955506,538993005,538976288,538976288,222502944,2037727754,1701998624,1953391987,1919903264,1918979360,543254644,222437408,1818317834,1869881451,1701987872,538976356,538976288,538976288,222437408,1801540618,1970217061,1634148468,1734435442,538976357,538976288,222437408,1818313482,1768956012,544173665,1701737844,538976370,538976288,222502944,10]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[14703181,31,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":16,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":17,"data":[279886,12583297,191782519,655366,268437504,68348,655360,262154,4194430,22282384,23527775,1601,262174,0,0,0,222625900,222687600,74187104,74248560,64487860,64549168,122094081,122155312,38994567,39121200,115016367,115142960,82379565,82506032,23724935,23851312,25953186,26014000,28705725,50987281,-2147287036,1,64618496,-265289663,32769,-2147221504,1,68878336,-265289714,32769,-2147155968,6,69795840,-265289719,32769,70385664,-265289719,32777,70975488,-265289710,32778,72155136,-265289720,32770,72679424,-265289721,32772,73138176,-265289720,32780,-2147090432,3,73662464,-265289720,32769,74186752,-265289706,32770,75628544,-265289725,32771,-2146893824,1,75825152,1048578,188,0,1229016327,1128481102,1414483463,1145131077,16777216,201328640,4352,1380272902,55330126,71910471,1380275029,1497713416,1380011842,33489220,-2130624563,16777476,1070399999,67108868,33496064,409549,1070399744,16976646,-2063122483,1070399744,16806659,212941,1070399488,66307,1762017229,1070399491,5,1158037453,1070399493,73478,-1459339315,1070399489,255748,475085,1070399488,402692,-2130559027,1070399488,215042,606157,1070399488]}],[{"sector":1,"data":[66568,922828749,1070399496,431620,-721338419,1070399495,648705,1006714829,1070399498,686849,-1626914867,1070399491,296711,540621,1070399488,254465,1766663424,1936683619,544499311,1684957527,544438127,1702129486,543449456,1819308097,1952539497,7237481,1347291392,1346653783,21188434,1313212160,1431257665,184551764,1111576134,1347703375,205737810,1313213952,1380926017,1196180564,1129271888,1141440523,1313228620,1313165391,1174929418,1447121742,55787845,1313211904,1145981254,1291845640,-2081649835,1048776428,1946157088,439811857,1354771200,112720,-26032,922681344,146276378,45633536,1183535104,994566,71732048,1342178349,1342177720,16777114,1575324416,1426065090,-327029621,1183514768,736520,1139344245,-385647103,19727059,605440,-404159626,-1816132862,497549102,112643,-26032,113704960,10485790,-385875528,-1070923007,-401698736,-1073020076,922742388,922681982,28835864,263737344,280514560,314068992,922701824,-2135424890,-2037559296,-1202651276,-1202716022,-1706032520,65535,1039419017,477495295,1586943,3946239,5125887,-9140595,3192912,-401698736,-1729427631,16023171,1048810100,1979646584,406257474,1010237184,1954974976,922702079,616038444,244338688,1023879400,57933830,-38423,-1711110090,65535,-9140595,-1967632362,-1202708990,-1706029056,65535,-1929217885,1358918790,16777114]},{"sector":2,"data":[-12785408,1851011,-1207340032,-1202716670,971702273,1586943,1342293176,-1705983957,65535,-58903,-1207952842,726664193,-4566848,-1706012033,459,-2130771479,153150,163057269,79187968,-51884032,-18028287,16777114,-18552576,1342180024,-352320072,1095912,-26032,-1073020928,62391677,-1207702781,1183384320,439811848,67155968,1354771280,-1415950256,-1996488702,1451882054,1976581112,-22746877,16777114,1887865088,1745407,-9402823,413207668,1887844608,-385649409,2122448518,1963131400,-18416,-26032,-1073020928,1877541749,439812094,142016256,1347469355,-26032,1541996544,1354771454,16777114,-28251904,1718015,1342445496,1347469355,-2080426007,8254,1152910709,-1207702784,12189892,-1706012080,65535,343195659,2113155,-1207601920,48955393,547602475,-32446208,1586943,3946239,5650175,1542045739,1745406,1946437177,-34281213,17202817,-14060282,721426486,922702016,347602970,246960129,-1070903292,-6664112,1342177535,1342177720,16777114,-37426944,33980033,-385649658,922746298,28835864,922701824,364380186,-1697977599,65535,200951433,-385647424,-63046246,-1593477633,250282064,-67469693,1386284405,-1593578752,1183383626,406257660,1010237184,1048793088,1946157084,3318022,-1191328279,-1075248700,1258374397,1342277121,1342394371,2130798339,-2046791423,998656,1223230325,1025081343,57999372]},{"sector":3,"data":[1040114409,57999373,1040079593,-2022440946,871088171,1962941245,-18618109,423430783,-385649408,-387186998,2080571453,50413027,1223230335,50478590,1609106293,50544126,954794869,-1949701122,146955749,-326413056,-16585597,721583670,1996443840,406257414,73304832,-472783919,9091071,8959999,16777114,-28931840,1979711293,406257436,1010237184,909573888,1354771200,1343238328,1659375248,-339727612,-28931325,-1034033781,1478361092,-1957345904,-661774612,-955978621,130118,1718015,1342441656,1347469355,84384336,-1039466496,922705780,922681368,922681404,1048772656,1946157084,3318021,-994573333,2122534913,91488262,-351272776,213920514,244338723,-1996227352,104725574,-2094631680,7230,45616500,28856320,954748928,-14685185,-1207953354,726663620,1620725952,-352321535,-58817779,-1207602174,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2082959842,1183526124,1064204,-2132212875,-385649152,37552565,1030452224,57999365,1023458281,57999366,1023446761,57999367,1023447017,913571848,1962938173,12904707,-2097044247,1963657854,702478,374864,-21895088,-16689687,1996426870,175570700,-16222465,2140800630,-385875962,922681662,1996423194,175570700,-16222465,2140800630,-385875961,-1070923482,-26032,468254720,1354771201,-1041756528,1975520254,17623299,1586943,16777114,16836864,1342177720,-1511518576,1877580286]},{"sector":4,"data":[176063233,-385649663,922681578,1352269848,184549383,-385649472,922681562,-6684646,-385875713,1183514830,1958742794,81168,-85392523,146688,-1209465996,242679552,-16353537,2011695222,11069946,-1928431873,1343673926,16777114,242679552,383141517,-26032,-1947664384,439811840,-163148544,-6664170,-2097151745,2131232382,105301767,283836416,134639235,972703371,75236934,105285960,34111107,1187448703,-352321528,141460240,-62485758,2080917049,1183401988,439811848,209125120,-16091393,1996425334,35559942,753598464,-352156184,1745191,1963345465,142508324,494208256,1586943,3946239,3553023,-1202667477,-1873805264,33810446,82427947,242679807,-16091393,1996425334,-100669434,-394936309,-1779954032,1038215939,57999634,2013163753,1129768,-806812811,1719806,289268340,-6392831,1996426870,175570700,-16222465,-6683018,-352321281,18234667,2078868341,1024423935,-613285612,1996559677,-27596541,20828651,-385649406,71171843,-385649406,-1075052805,-1962742397,1297948645,1426066122,-326898549,209125146,-16091393,1996425334,74907398,16777114,1975520000,-339727559,406257483,1312227072,-431583998,-6664170,184549631,-1927318080,1343678022,16777114,-431584000,2811984,175423499,384190093,-26032,1183645696,726669030,1347440832,16777114,1975520000,-364475464,-1034033781,-1957363702,82609132,-1593549173,121176090,-1947663500]},{"sector":5,"data":[41910528,57934082,-16743959,-1711269834,65535,1953873931,2113155,-1955760896,2139292766,1685325828,218398595,922705524,297271322,-4698108,-1070903041,-1550167984,989855751,1912610310,1354771212,16777114,-339727616,439811898,964608,1354771280,2023379024,184549377,2132901074,1073757445,922688114,922681368,922681404,-1070923722,3192912,-401698736,-974454675,-1962933832,46292453,-1873273344,-326412987,-2116514274,-2097085204,7230,1183517301,-1706025466,65535,-1710852353,65535,-17004919,-16873843,950095894,-1706025472,2073,-2037690286,1344208636,545178,406257408,-24736512,-1706027266,65535,-1962742397,1297948645,503317194,1430622296,-1910575989,116163032,-24736511,-1957685506,1344145990,551834,-91846400,-57243138,142509054,1376547840,138840912,-6664162,-16776961,-2037576074,1343684350,504120971,108461904,16777114,49120000,1562371467,707149,-2081649835,922684140,12058650,-1070903292,-1706012592,2346,-1980217719,-801375658,28837237,721611520,-62486080,1586943,582042,28856320,-342208512,1342177288,1342374072,-1694730497,2296,1586943,590234,28856320,194662400,1342177289,1342374328,-1694730497,2328,1586943,603802,28856320,1083854848,1342177289,1342374840,-1694730497,2392,1718015,1342445240,1347469355,67279440,1183383552,406257662,157391360,-1202716672,-1706033151]},{"sector":6,"data":[2411,1685584,-25263280,721712128,-1207702592,-1706033151,2526,1586943,640922,28856320,-778416128,1342177289,1342184376,2113155,-1207602176,48955400,-1705983957,65535,33310407,406257408,-26112,-1073020928,1187457140,-352321290,-159481075,-955812607,64582,1996427243,-25866,1183383552,1975520246,-25884,922681344,-124125160,1342177289,1342177720,16777114,45633536,1996443651,170564348,-443875328,1478411101,-1957345904,-661774612,-16061309,-1711269834,65535,-1694742903,65535,200951433,-15958592,247004278,28856320,-15602944,-6620554,-16776961,247004278,-1070903296,-26032,-6684672,-2097151745,-443874579,-884122337,1167120524,518818645,1465309326,-1962851167,-1962850786,-1962850290,-134133226,1151541709,1176406273,1208912129,1242990849,47105,-789118349,-310157729,535137026,-1932833443,1430622424,-1910575989,142016472,-16353537,1996425334,-26106,-987889664,1102317142,41034189,1344258099,-16222465,1996424822,108461832,16777114,-310159360,535137026,80366941,0,0,0,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,1577502507,-1996488703,1459703822,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-74455033,27322448,-850591816,-1957313759,-18196,-1957313699]},{"sector":7,"data":[-18196,-1957313699,1354771436,-1710983425,2919,-1017256565,-1192457387,-1957691328,1861682246,-1634054138,-1962934261,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,2989,-1017256565,736922453,1996443840,-26108,-443875328,-1957313699,74907628,16777114,1575324416,-326412861,-1710983425,3094,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443875162,-1363426467,-1258585855,1393062657,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1073840783,-1007912629,567095476,-1023318877,22939278,741772070,889239552,512303565,109838674,521011540,-1171980104,567085808,-1542550730,908256001,27657925,-617358708,-1575026890,-385649919,-986251703,-1946047994,244698,-1575026890,-1021372927,855643321,-2105018661,74711297,567099060,-1007492541,-387151019,1996423243,1042436,-1017256565,115600690,-657331503,1438907106,1122561163,-29235200,175432714,294528,1187382389,-987824636,-1207873002,567092480,-1542550753,-1157111039,520028162,1183515042,-850611196,28621601,28638081,-11335565,1128487703,-1144786197,-75431500,141754806,1528299347]},{"sector":8,"data":[-219462845,50347715,50826497,50358272,50440705,50358784,50654977,50359040,50797825,50359296,-16590848,50334976,-16624640,50335232,50725377,50359808,50897921,50360064,-16635648,50335488,-16644608,50335744,-16673536,50336000,50788609,50360576,17496065,50331904,-16489728,50336256,50793985,50360832,-16696064,50336512,-16728064,50336768,-16747008,50337024,17518593,50332928,-16330496,50337280,17530113,50333184,-16109824,50337536,17533953,50333440,-16121856,50337792,-16254976,50338048,17546241,50334208,50338305,50363648,17552385,50335488,50888961,50331904,17559297,50336000,17565441,50336768,51060993,50332928,50663937,50333184,50958849,50366720,17576193,50338048,50970113,50366976,67801601,50332928,67809537,50333184,17505025,50339328,50967041,50368512,50683649,50337280,50453761,50337536,50955265,50371072,50911233,50371328,50905345,50371840,50679553,50339584,50907905,50372352,50705153,50340096,50866177,50341120,50697473,50341632,50700801,50341888,50785025,50377216,50670849,50345216,50347265,50345984,16855041,50350592,34216705,50349056,50509057,50347520,17297409,50351872,50404353,50349312,17304577,50354176,17497345,50354944,50573569,1291867904,543912545,1411395140]},{"sector":9,"data":[-2081649835,1085803244,12079104,-62486270,31431248,1183383552,-163149318,74825739,1475067947,16664263,74907392,-771858805,1486851043,-1959264512,1344206406,-1694730497,65535,-129595072,-771858805,1486851043,-163149056,1183516553,-163184136,-244183,2122579526,-1048832002,-1191545089,1177223680,1085821180,-6664192,-1962934017,46292453,-1873273344,-326412987,-2116514274,1442907884,-401705217,-1072955542,-1070922379,721556969,45633728,1347590527,188570,42509056,-1207011585,1344143536,16777114,38707968,42483331,198407168,-3181376,1996425846,-26104,2122514432,175439884,-401705217,-1073020450,1183560820,41853710,-17135929,518717446,-17123701,-422378831,8963713,-16616193,242679604,16777114,-1996191488,-1895890348,-1098645766,2097217274,-401698601,582484518,-1924129280,385810054,-1161811120,1347551484,-1202696112,726663268,-11513664,1347423862,98714,1614592,58048523,-1191229463,1344143545,503363768,12892240,1380974778,1354771280,39368784,26261584,406257488,1030144,242679632,1347469355,16777114,1745664,58048523,-1694561303,65535,1586943,-1705983957,65535,-17004919,1354771280,196628560,12079104,-862302199,-16777215,738131126,1050759360,-1202708992,-1202716661,-1706032896,65535,39198347,-1207957562,726663234,-811970368,-1560281086,922681986,213385242,922701828,-1070923134,-1499836336,-16777214,-1711263178]},{"sector":10,"data":[65535,1586943,-1710852353,65535,638082756,1946173312,29669492,1392922654,16777114,29669376,-26032,-994574336,-1202708991,1344144010,1344798904,161434,41460480,1979711293,406257460,1010237184,29669376,741801808,2406400,-26032,104660992,-1206487808,1344143812,503483064,268482640,-26032,2023948288,2017362690,158662402,1342293176,16777114,439811840,67221504,1354771280,1718015,1342439608,1347469355,44931664,1347551232,16777114,112640,49120094,1562371467,707149,-2081649835,1085801196,448286720,-6664192,-1996488449,-1070858682,2130819152,-1706012007,65535,-1979818357,1996426823,112644,-1706012007,65535,-1979818357,1204227143,-956301038,5191,-1996208501,582486599,373786880,-954703988,-64953,-16496697,273139711,-1014300666,-6664162,184549631,721712576,-15995968,-6619530,-1207959297,-443875327,180829,1167087646,518818645,-326903666,12498956,-1930017143,1344206942,503366584,1354771280,229274,-96040704,-493825,-910625162,726670848,-6664000,-1560280833,1996423458,-159973384,503369656,17479760,1344163870,1342179000,243866,-126419200,-1191807233,1344143573,503386296,-1202708912,-1706033146,982,-493825,-575080842,-1202708992,1344143579,385631885,178256,-26032,1183449088,111384828,-126419199,-1191807233,1344143589,503374776,-62485168,45633558,-1650831360,-1979711485]},{"sector":11,"data":[-1550255034,1996423432,-159973384,503376824,1354771280,223642,19178240,200951435,1024226496,460587009,1946157629,-952833244,72710,503760640,-956300543,100737030,-954144000,50404358,503760640,-352321535,470206442,-956300031,134290950,537315072,-2097151999,-443874579,-884122337,16973850,197111,196719,16712329,16973843,65554,16973829,65655,16973830,66363,196615,16712286,196634,16712234,196635,16712192,196636,16712080,16973853,197043,16973977,197020,16973980,65801,16973875,66581,16973881,196933,16973865,66555,16973882,197132,16973866,196777,16973997,197364,16973998,196672,16974000,196793,16974001,197419,16973881,66109,16973898,65746,16973903,66081,327768,16712474,131073,16712479,1632436225,1167087646,518818645,-326903666,-1924863212,1343679558,1347469355,112720,-26032,-1073020928,1048786036,1946157692,2083979026,-330920702,-6664170,184549631,-1928038976,1343679558,16777114,-330920704,-6664170,-2097151745,161342,1048819060,1962934902,112645,-1070923029,-1962742397,1297948645,503317706,1430622296,-1910575989,205949912,1946226749,17906970,373098356,-346786815,1980155749,-402652926,28836635,-10884352,-1070920074,-26032,1185087488,473858818,628424704,-1207011585,-2091909100,7230]},{"sector":12,"data":[849413492,-1207309568,-1706032700,65535,1347607180,16777114,242679552,16777114,-4723968,-1207810506,-1202655136,-1706033151,65535,-1070881557,-1962742397,1297948645,503319242,1430622296,-1910575989,-689143336,-2009661696,-26110,113704960,630,16777114,-1002010368,108904459,-369098824,1996423802,-733573692,-6664170,-1962934017,1174656070,39101404,-1545714037,1996423754,702660,-26032,-2037841920,-1952841940,-150842354,914786809,-998834177,1342179768,-1202667477,-4521985,-11513089,-1711112650,523,-1070903214,-677752752,-1929379839,385825414,3711312,-1248178146,1375731713,473858896,91488256,-352308575,29669379,1347607180,16777114,-998834432,1342180024,-12941683,-6664170,1342177535,-12941683,-1070903274,-392540080,-1996488702,-1072972730,1996426877,37067460,1183514624,29157820,41826047,-1728049992,922701906,-4718568,-17665,922701906,-6684034,-1560280833,378077828,1347551878,16777114,41722624,460701707,42350335,42219263,200346,-998834432,194458,-280576,-16683543,721426486,-1046851392,-16777213,-1207952842,726664205,1347440832,165530,948340992,-62470145,1187446784,-956301114,16723590,-196688128,922681344,297271322,1996443652,1354771398,53582416,1183383552,951517128,-25857,1174601728,713460166,-998834177,-11485141,-2037646218,1344208682,-1698138369,65535,-13060353,16777114,39100672]},{"sector":13,"data":[-244223,-2037648314,1178206006,-951681804,62534,16533191,-998834432,1342177720,1347469355,-1706012592,853,196888201,-14516800,1922745462,-2097151997,161342,-1326972043,-2043216128,-2076770558,61250050,-706150400,1983808510,594870274,1718015,1342442424,-13728001,-13715713,1347469355,16777114,-968455936,58507275,-2080426007,161342,1996436085,112836,1354771280,1347440720,233114,2109737728,112645,-1070923029,196888201,-401771328,1996423239,60398276,-1913978880,41303683,-15305472,196658294,-1070903296,1347440720,-26032,552075264,-998834432,16777114,-2043216128,-2076770558,-26110,-1070923776,-1962742397,1297948645,-326412853,1586943,1342177720,16777114,2083979008,-26110,113704960,636,-1017256565,16973854,196638,16973933,197209,131183,16712194,131083,16712055,16973836,196677,16973937,196687,16973938,66194,196616,16711969,16973848,66233,196617,16711884,16973849,196829,16973846,131760,16973857,196848,16973979,196774,16973980,131467,16973862,197191,16973858,65920,16973875,66093,16973876,197578,16973877,131558,16973892,196886,16973893,65947,16973912,131414,16973904,65991,327770,16712191,327691,16712052,16973836,131387,16973917,197145,16973913,196663]},{"sector":14,"data":[16973914,196821,1632436316,1142975346,1167087646,518818645,-327034738,1183514758,17841420,289212276,-348359679,242679634,1342181304,1342444984,1342208952,1347469355,16777114,242679552,1342181304,1342182072,1851011,721712128,-1207702592,-1706032502,65535,-1962870807,20777542,1024816128,57999362,1023483881,57999375,721493737,19589568,-1207011585,-1706033151,65535,-26032,-1073020928,-1041693835,242679552,1342181304,-8747379,2075676694,-6664192,-1929379585,385841798,-26032,-2037579776,-1873739910,98494478,-8747379,-26032,-1073020928,1996429685,1010237198,1278672640,1354771200,1342189752,79770,-1922045184,385841798,2055638352,-1706027265,545,-8747379,-1070903274,41720400,2023948288,2055638274,-1924131073,385841798,37198416,1048772608,2080375416,2016870202,52795906,1996423168,1010237198,775356160,2055638272,616059135,-157659135,1023410177,91553799,-352321096,-1983894782,-1072956346,28837236,-11801856,-2037576074,-1202651270,-1873805311,4581390,-428556277,503432376,2055638352,-1706027265,65535,-1207011585,-1706033151,65535,1996474603,-339727602,242679793,1342181304,-1710721281,65535,-310136597,535137026,181030237,-1873273344,-326412987,-2082959842,1187450092,-16776966,-1711110090,65535,1718015,1342181048,1347469355,47684176,1183383552,1975520248,108954475,-15109120,922684022,922681404,1996423240]},{"sector":15,"data":[3192840,34642512,1206583296,1586943,3946239,4601599,-1207404801,-1706033119,65535,1962934589,43169834,1344163870,159386,43169792,1100632094,-1207959549,1344144018,-1382395874,721420290,244338880,721674984,26536384,425603,1183520885,-1202708984,1344144010,1353188024,247450,41460480,1183534059,508567048,53975632,1183514624,-1202708984,-1706033150,65535,184711331,-1960936000,1344145478,-1705983957,65535,184711331,-1207599936,48955393,1183432747,138841082,1344163870,216474,2017362688,242614018,-16091393,-16761802,-385854410,922746664,414711834,28856324,-1070903296,-73772976,-1996488702,922745926,-6684030,-1996488449,1586295878,439812086,964608,1354771280,2140819536,-1996488701,922744902,1996423800,-193527818,57514576,1178271744,-12028680,-1711111626,981,41432831,235162,-92372224,-1960676352,1344145478,-6664162,-1962934017,1344145478,16777114,138840832,1344163870,16777114,175570688,3946239,4339455,-94231,-16615370,1996486262,1354771444,16777114,439811840,67745792,1354771280,-1365618608,-16777213,-6682506,-956301057,7174,2016870144,63740418,2122514432,309592316,1718015,1342445752,1347469355,-26032,2122514432,410255366,503858827,42645584,-1070903266,-26032,-1706033152,65535,42088191,16777114,112640,-1962742397,1297948645,503318218,1430622296,-1910575989]},{"sector":16,"data":[250381272,2017362774,494272258,1586943,3946239,2766591,-1207535873,-1706033104,1268,15319083,-2009661694,29399554,922681344,-1070923144,45633616,1184518144,-1996488700,1451883078,-196703748,41432831,1347469355,-26032,2122514432,528417020,2122385276,2000683258,-2110324970,-196703486,1119375424,77221888,184549381,-15239744,-1711114186,1210,1586943,3946239,3815167,922714859,28835866,-1070903292,-1706012592,1409,42088191,189338,-163149568,-500084,503478326,-193527984,16777114,2016870144,18782722,1586167808,-159988492,50726,-6662650,-1962934017,994702414,-12812600,-1711111626,1359,1586943,3946239,4470527,-1207535873,-1706033104,217,42088191,-1202667477,-1706033086,65535,-1873756117,18212878,-989920791,1191179870,1065363190,-1960413906,1191179870,1065363190,-1961200308,1191179870,1065363190,-1961986737,-2144930210,91572031,-352321096,-1983894782,922743366,479855234,-1207959549,1344143812,503727755,107453008,1996423168,108042758,113704960,28,-16680728,-1207952842,726663179,1347440832,366234,439811840,67942400,-2110324912,1354771202,95656528,2122514432,544473330,1718015,1342439864,-1957642197,-1031015338,-644198318,-1207959547,-1706033151,65535,1586943,1342177720,1718015,1342248376,1342443192,1347469355,391322,28856320,-6664192,-16776961,-1207952842,-1202716661]},{"sector":17,"data":[726663169,-1706012480,1618,1718015,1347469355,1342177720,16777114,439811840,-26112,28835840,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,1946158718,1354771212,16777114,1958742784,439811914,833536,1354771280,503392952,109222480,113704960,65564,503432376,3318096,-610643938,-1207959546,-1706032700,903,1718015,1342439864,1347469355,117807696,113639424,-2097151402,-443874579,-900899553,1478361090,-1957345904,-661774612,1443163267,-955877749,64582,1015028971,-2146667218,1965949308,24936486,-1960807076,-1706025274,65535,1015083147,-1948289792,-1588584762,1077936262,1956270110,1577058305,-1962742397,1297948645,1426064074,-326898549,503760648,-16736256,-1207952842,726663182,1347440832,467866,-96040704,16664263,-14292224,-1207952842,-11533295,-1070858634,-761638832,-1996488703,513931334,-129615616,1183516286,2008056,-113013,1178336838,-1949270790,583228901,-1811873024,1862271748,-1140849920,251723525,1728119552,100663556,-1660878080,134217988,-603913472,150995204,268436224,436272900,1711276800,469827333,302056192,2080375558,151061248,2097152774,721421056,520158978,-1744829696,536936193,-1107295488,553713408,1342178048,570490624,956302080,587267846,-335478016,83887104,234947328,100664321,-2113862912,587203328,1560347392,1241514242,-1006566656,1291845894,-486472960,1040188165,-1442774272,1325400320]}],[{"sector":1,"data":[1946223360,1358954756,-1325333760,1375731972,-1878981888,1392509186,788595456,1409286404,-100596992,1426063616,503382784,1157628676,234947328,1442840835,1577124608,1476395269,-889126144,1509949700,-2147417344,1476395777,2080441088,1526727424,-1627323648,1560281856,822149888,1694499584,1918979328,776216683,1167087646,518818645,-326903666,1183667768,-62486070,425603,-661974668,-956545281,1586171143,-62455812,-16119866,1676213366,-901346048,-6664170,-1996488449,2122565702,494141446,1191178379,-901593400,-931755251,-959953153,-1962227134,1191168118,-901593400,108954368,-15960832,-6633354,184549631,-15371072,-1207952842,726664210,1183666368,-1706027318,65535,49120094,1562371467,182861,-2081649835,-1588193556,1183383838,17211626,-1996798328,1183381830,-163149576,-2013198176,1187442246,1187381502,113639665,-1708392123,246,-1744746080,372673360,-331182847,178256,21030992,-1744746336,406227792,-331182847,178256,19720272,21300934,-26070,1268776960,-1957652479,-1929307082,-1202654142,-397410302,1252000014,-1957652479,-1929306570,-1202654142,-397410302,922681594,915079496,1116537120,79188212,-404205568,-230242560,915079434,2055209238,611594988,837581440,2055224181,410989293,854424192,915091317,1116340504,-930375444,-1729281398,494190859,284313287,574522113,292880385,18232971,854424192,1258162046,-311787284,608076546,1450508289,18626187]},{"sector":2,"data":[821328512,1116543861,-1924131084,1343681858,116122,18653440,18744889,1191117694,-361329686,821328512,1116540789,-1924131084,1343681858,122522,372673280,-327516159,-1928366800,1343679554,384647821,32348752,1183514624,-1924129276,1343679558,129434,-1957670400,1344205382,132506,-1202695680,1344143654,135578,-1924115968,1343681606,16777114,-443851264,180829,-1947432107,1174471750,-1960973562,-1181153210,-101253110,-13581696,1586169422,-1961392122,-140965818,138840569,-16497013,-1073019826,-443819659,84329053,-2080308480,1862271744,1795162880,268500736,-1006632192,503381760,-1593769216,1476395265,922813184,1509949696,1918979328,1167087646,518818645,1183570062,17841420,289212276,-347835391,242679644,1342181304,503469752,-26032,1996423168,833550,19702096,1342341283,60314,1446936576,1098186754,-1207011585,-1706033151,147,1354771280,16777114,-1960121600,20777542,1026061312,309592066,1946160189,998753,-1914109067,-373282048,1996423322,175570702,50074,112640,-16741911,28839542,-6664192,1342177535,16777114,1958742784,242679780,1342181304,503469752,2144336,-26032,-2136932352,19702530,-15829249,1469713014,-1879048189,5498894,1996470251,833550,242679632,-26032,-1073020928,28837237,721611520,-6664000,-2097151745,163902,28837237,721611520,41984960,1996456939,1030158,142016336,16777114]},{"sector":3,"data":[-9312000,-1962742397,1297948645,503319242,1430622296,-1910575989,317490136,1718015,1342439608,1347469355,22190672,1183383552,-128546314,1718015,1342442936,1347469355,24549968,1183383552,-6663954,-1996488449,1183576134,-230258184,1718015,1342181048,1347469355,32021072,1183383552,-230257676,1357923843,737429131,-1202654650,-397409706,1183383651,-294191108,16777114,-58817792,-14977537,-16771018,-16761802,-1207946186,-1202716074,-1706033088,65535,1183526635,-230292996,1718015,1342439864,-1202667477,1344143958,131482,-230292736,-796143061,1183563819,-1706011918,731,-1962742397,1297948645,-326412853,-1962480509,1344144454,16777114,-62486272,721831563,-1992229818,1187510854,-352321282,142016283,-16484609,552139894,1958742784,-28931323,1191121387,138870782,972703371,-579011002,-1946157128,113401317,-326413056,1443687555,33441479,-129579264,1183514624,-163149562,-1995946357,1183577158,-129615612,1048793981,1962934572,-161576133,-467007606,1347605035,168090,-1981535744,1586232390,721914612,-1706011950,65535,1183441962,-62506502,1191123179,-163148808,-637185,-1226050490,-1946788213,76215414,-428603592,16664263,-28931328,1575324510,1426065090,-326898549,439811842,964608,1354771280,-1415950256,-1996488701,12123718,-28955840,10729881,1183447543,2109737982,-28915961,199950336,1694400131,1187448190,-1962908418,516120037,1430622296]},{"sector":4,"data":[-1910575989,82608600,205949697,1946226749,17906951,619388532,-1979736856,-66426,246943350,-1224781824,-1070858500,-26032,401276928,1024083595,74711041,250331179,-15829249,-6681994,-1207959297,-310181887,535137026,181030237,-1873273344,-326412987,-2082959842,1190532844,91521030,-352295752,-1983894782,1190586950,91586566,-352321096,-1983894782,-1072958906,922686837,414711834,28856324,-1070903296,-1113960368,-16777213,-1207952842,726663182,1347440832,16777114,1183399936,1073757678,1119359871,1996443648,-25874,1183383552,1975520240,-226589923,-15567616,-1207952842,726664216,1347440832,296090,-373282048,922681664,-1070923752,1996443728,112874,-26032,922681344,1183645720,-1706027276,65535,503394232,19839056,1996443678,108461832,1342179512,1342177976,771245707,-1957691377,70122054,922701824,263716888,922701824,-1070923138,-6664112,-1996488449,-1072956346,1996425845,-25872,-1913978880,-1695516929,347,-1292663,-1207952842,-11534323,1183575670,-1706025236,1200,-1695516929,409,1718015,16777114,-62485760,1342184099,1342442680,-1544534389,726663810,-1706012480,1261,1586943,1342177720,16777114,473858816,91488256,-352308575,29669379,-26032,2122514432,359923950,1718015,1342441912,1342177720,1347469355,329882,439811840,-26112,922681344,28835866,-1070903292,-1706012592,1546,1586943]},{"sector":5,"data":[1342177720,-1202667477,-1706033151,1331,15892099,922685813,-1070923752,28856400,-6664192,-1207959297,-310181887,535137026,80366941,-1873273344,-326412987,-2082959842,1448547564,15615687,-62470400,2122514432,57999110,-16740375,-1711269834,65535,91602955,1458159659,112641,-26032,1183383552,1975520236,98212359,-454361088,-1695779073,65535,-1980610935,1347613782,120218,105285888,2113155,-954043136,64070,956712587,360577606,653418180,1963802496,2139104795,343214593,32392903,-327745792,16777114,-26112,485163008,-375041,1996485750,-25870,1183383552,-195655182,1183563499,-96040698,1718015,1342439608,1347469355,103979600,1183383552,-128546314,2113155,-2089913088,1946218110,439811871,67876864,-18352,1354771280,105945680,1317732352,-1983370250,401338446,1718015,1342443960,737572607,-1706012480,1687,-1947187575,1317793862,-162649096,737955465,-96074815,1967675,922688382,922681368,922681404,-1070923712,3192912,28875344,-337051648,439812094,964608,1354771280,983191632,-1962934271,-62485560,-1952851317,105286640,731511435,64428998,198382529,2132114642,1073757445,922685046,922681368,922681404,-1360330698,1577058744,49120095,1562371467,537053773,-251591936,1862271747,-771685632,83886339,1644233472,117440772,1812005632,134217988,-1946090752,150995204,-2113928448,436272902,-771751168]},{"sector":6,"data":[469827332,218104576,536936193,-1811873024,301990149,-721353984,318767365,1812005632,-1996487931,-1979645184,-1979710715,2113995520,-1912601851,-167705856,369099524,402719488,553648900,1426129664,570426112,-1727986944,587203328,1392575232,687866628,-1124007168,704643844,-1795095808,889193220,-369032448,1291845893,469828352,1040188165,2097218304,1325400322,167838464,1073742596,-1593769216,1509949701,-2130640128,1476395776,1275134720,1526727424,637600512,1543504640,-1308556544,1560281856,1040253696,1577059075,956367616,1627390720,-637467904,1644167936,1918979328,1167087646,518818645,-326903666,340167432,-1962818909,1352864326,273058562,-1962783581,1386417734,205949698,-1560279251,1183515072,41591562,-1559738741,1183515204,38314758,723154687,1996443840,410451734,-1157627976,1347616767,-1709541633,65535,-1980217719,1347615318,16777114,-62486272,-362753,-6621066,-1962934017,-310117306,535137026,382356829,-1873273344,-326412987,-2116514274,1442910444,-244025,205949951,1946226749,17906952,-387359628,242679554,29505279,1073894049,-761638882,-16777215,922685046,364380610,922701828,-1070923328,-6664112,-16776961,1386286710,1344159746,38811391,38549247,1346375864,109978,1975520000,242679563,-1705983957,594,-385875528,1352729233,172374274,1187448693,-352318966,29532429,1963607609,172410629,1183514635,81162,37559156,-385649408,171770141]},{"sector":7,"data":[-385649408,188547363,-385649408,1357447748,242679554,1342177720,243866,-6664192,184549631,-385649216,1996423735,-1036583154,41591041,922701854,2124022208,-1929379838,385809542,41591120,-1046851554,-1929379839,1358888070,1342177720,-1929224728,1358888070,184758504,-12421952,-2037576074,1343684348,38811391,38549247,1346375864,226458,1958742784,41591076,-2037559266,1343684348,16777114,242679552,29505279,503478945,-26032,-1192689664,2050424577,1354771202,-16644632,-402490826,-1073020199,-1070920844,-26032,-1729560576,41591041,-6664162,-1929379585,1358888070,2062028432,1958742786,-62470350,2057371649,-1588584958,1344143940,1344798904,16777114,1209961216,1023904002,259391487,38018699,163715,1187448181,-4,1996426870,-16323588,-1070920074,-26032,954793984,138840833,1946157373,146699,-152501387,19261696,-15829249,-1929264586,385809542,-1070137520,-26111,1996423168,41591054,922701854,-6684080,184549631,-385649216,2057436971,-1706025470,687,-17529207,-17004915,-6664170,-1996488449,-1946224506,-58552848,-158955010,-2133292034,91499071,1966751616,112645,-1070923029,-17660279,-17004915,-17398215,-2037560202,1343684348,-17398133,-6664162,-1996488449,-1946225018,-2012771624,1023340678,1006924842,-955878081,33485446,-157381888,-2012771586,1023340678,1006924892,-1950780102,520025734,-26032,-2037841920,-1098645770]},{"sector":8,"data":[1946222322,-192509164,2047773694,-1933507838,-1957670182,-335612282,-192509166,2047773694,-1933507838,-1588571430,507511378,-106263,2057375350,-11526654,-16625610,-1207808970,-1706016752,65535,58048523,-369198359,1996488259,-1036583154,142016257,250089104,1589652224,-1962742397,1297948645,503319242,1430622296,-1910575989,108954072,762643200,-1207273729,-1706033151,964,175570768,-1710721281,65535,964688,1354771280,-6664112,1342177535,16777114,49120000,1562371467,445005,-2081649835,1448545004,16402119,105286400,1344163870,172186,-163149568,503727619,73701968,-259325952,1015086731,-2146208466,1966014332,-159481075,-955812606,63558,1015038699,-2147126180,125123132,33048263,-2093880576,1946158206,-339727612,178179,972572297,477300350,1949187456,1547534378,1183519348,-1957683706,-1706025273,751,-538183541,503399565,-129594544,38929923,2073710622,1577058305,1575324511,503317698,1430622296,-1910575989,-2098429480,1988843008,516328198,2122747216,-1202710785,-1706032896,549,91602955,-352321096,1589652226,-1962742397,1297948645,1426064074,-1957237621,283837558,1948925056,1060929541,28837237,1174989568,1962949760,1589652459,-1034033781,50337282,50459137,33581056,-16756736,50334208,50582273,50360064,50583809,50340352,50417409,50340608,16799745,50344704,16806657,50344960,17082369,50350592,16983553]},{"sector":9,"data":[50351360,17041921,50351616,16908033,50351872,17070849,50354176,17038593,83909120,-16757504,50334208,50357505,50353920,50395137,50354176,50415873,50354944,50378497,50355200,50424577,50355456,50499329,50356992,50391297,50357248,50384641,1291871488,543912545,1167087646,518818645,-327034738,-11140960,-1070920586,-11513776,-1706030986,65535,425603,-1159134347,209125120,-1928825089,385837190,8435792,-26032,-2037841920,-259260574,-9979264,-972721060,1560242306,-10320129,-10307957,-9927994,105286400,-1996486651,-1946196858,134547014,244338688,-1996451352,-1912641914,-1979750266,-1946197882,973039238,1946117254,1688111886,1622576127,939821823,-1959758841,973039238,1979671686,1621003017,4161791,1183517300,525574,-10189175,-15960321,-2037708170,1344208740,16777114,-1959662848,520053894,14522960,-2037841920,-2037645468,1344208736,87706,-6755584,28839030,-6664192,1342177535,-1705983957,65535,49120094,1562371467,576077,1167087646,518818645,-326903666,105286406,1344163870,16777114,105251584,983191582,-1996488703,1183579206,-62506746,1344154486,519849611,-26032,1183383552,-1965519876,-96040953,74734652,-629851588,519849611,-26032,1183383552,-62485508,-1962742397,1297948645,525002,15991043,2228227,13500675,5046273,19071235,5111809,18415875,5898241,15401219]},{"sector":10,"data":[5963779,12648707,6029315,3801347,6094851,1835267,6553603,1802658125,1167087646,518818645,-327034738,1018691730,-1202708991,1344143669,503395512,1954975056,-1202710785,-1706033024,65535,108380171,-369098824,-2037579443,1183448948,-162099980,-1098901269,1949106030,-159973601,-1695254785,136,-1980479863,1589966422,126494452,-9533816,-629817334,653549252,1946173312,-196673759,509478,-1098901269,2132868974,-159973601,-1695254785,195,-1980479863,1589966422,126494452,-9533816,-629817334,-1946925429,1183446614,-61437446,-1098899477,1949106030,1857978406,528359679,-624897,43709558,-1996488703,1451881542,-195115786,-2012771802,184512134,-992774720,-2144930722,678690879,653543167,-352319546,1857978399,125706495,-9519488,-14715604,1996486262,20486900,1183383552,-162100748,653549252,-2037905526,-1073021074,1183568757,-162100236,-9402743,-9267575,-1098901269,2116091758,-159973601,-1695254785,65535,-1980479863,1589966422,126494452,-9533816,-629817334,653549252,-16775226,1996487798,1954975226,-11528449,-36170,738160822,-1706012480,65535,200820361,-1207601728,65798142,-2080881013,-443874579,-884122337,16973827,65576,16973882,131440,16973877,65616,1632436301,1142975346,1632903214,0,5,0,0,1412311644,21592,0,10485761,1867382784,1634755956,65636,327683]},{"sector":11,"data":[720906,1114128,1179660,1310739,1441813,1572887,1703961,1835035,1966109,2097183,2883626,3145774,3538994,3670068,3932218,4194366,4456514,4718662,4980810,5242958,5505106,1048662,0,65535,0,0,65535,65535,1529830434,1014774365,993864510,8236,1852399949,6513473,1768178944,1852375156,1761635444,1702125892,1767139584,1929405805,959787313,858944256,788543797,1631875840,973104500,1767142144,1761633645,1919253068,538968175,538976288,538976288,538976288,8224,3080434,1296105530,0,19792,0,393219,196608,6,538968064,0,1157627904,7629156,1986348032,6644585,1684957559,7567215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,206569472,208669800,199868,9961475,524543,10223619,590079,9175043,196863,257,4194304,524352,16646144,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656]},{"sector":12,"data":[0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,16678656,0,32512,0,2130706432,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686]},{"sector":13,"data":[-1,2130706686,-136414225,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-276963329,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-269567009,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,-1,2130706686,14745599,2130706432,-1572930,2130706684,-1572865,2130706682,-1572865,2130706678,-1572865,2130706670,-1572865,2130706654,-1572865,2130706622,-1572865,2130706558,-18350081,2130706686,-35127297,2130706686,-68685833,2130706686,-135790593,2130706686,-270008321,2130706686,-538443777,2130706686,-1075314689,2130706686,2145910783,2130706686,-1638401,2130706686,-1703937,2130706686,-1835009,254,0,1632436224,1818838544,150995045,2003127808,655360,1852141647,3026478,1392509184,6649441,1392509440,543520353,774796097,243269678,1769099264,268465262,1953064005,1638400,1868852821,795366153,6517573]},{"sector":14,"data":[1124270080,1141470325,27749,1866662657,1175026032,33554482,1935757315,1225352564,29550,1816331011,7496037,0,1392510720,1667591269,1816207476,201326700,1835619328,1631858533,1175020916,53,461373440,1919899392,1918312548,-1879019423,1918985555,26723,1766195203,774792302,142606382,1852392960,1699618916,1175024760,1632436275,1142975346,1632903214,1919904889,-2143289344,335549446,1342215168,0,131118,786532,8388623,-8302461,67108864,1174410240,268449792,-1560280320,16745296,5701632,3276840,65550,1342373889,1701859200,1459617902,838875648,33558016,50331648,1631813712,1818583918,5111808,3932180,1179660,1342308352,33554562,671089152,-16774144,33555199,1766228560,1847616876,979725665,1632436224,-2143289344,335549445,1073771520,0,262152,786532,65535,1401049090,1668440421,1868963944,2112114,268437504,201352192,-2147479808,-2125430016,524288,3538974,786444,1342373890,1952533888,1126197347,6648673,536888320,234889984,16777472,-2142240000,27471,3145796,917539,2,1132482563,1701015137,1291845740,543912545,1411395140,1869379937,-2143289344,285218314,1711312896,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,130946,234881024,134254592,33554176]},{"sector":15,"data":[-2108685824,1702129486,6578544,570435072,134234112,33554176,-2108685824,1936876886,544108393,825241137,327680,8650799,-65527,1342308353,1886339970,1734963833,-1457490840,943272224,1293954101,1869767529,1952870259,1919894304,11888,3866677,917536,65537,1333809153,107,-1509929472,16777728,33555456,33360,5701640,786528,65535,545411074,1835356704,1768843617,1713399662,543516018,1667330163,14949,5701736,786444,14,830623746,12336,5701748,786440,65535,629297154,1632436224,-2143289344,335549445,805348864,0,983052,786536,8388623,8474755,33557504,201341952,16776960,-2108685824,1702256979,1818846752,1935745125,1342177338,1207960064,301992960,33554944,33360,983160,917539,65537,1400918019,6649441,553678848,234889984,512,-2142240000,1668178243,27749,1802658125,-2134900736,335549443,570463744,1308622848,1885697135,33580129,-1946156032,-16774144,33554943,1766228560,1847616876,1713402991,1684960623,1917001774,1702125925,2003136032,1818846752,16229,1441821,917539,65537,1501581315,29541,1441872,917539,2,1317031939,1291845743,-1865940992,335549444,1073764864,1308622848,1885697135,486564961,536882176,33558016,50331904,1631813712,1818583918,0,5898248,-65528,1342308353,1852134274]},{"sector":16,"data":[1735289188,0,5898258,1310728,1342308353,2019914882,116,1509956608,-16775168,33554943,1869906512,1769107488,1931506798,1819242352,3043941,1918979328,1631785216,1953459822,1701867296,1768300654,2123116,1869488157,1868963956,543452789,1917001773,1702125925,2003127840,1818838560,285228901,1819305298,543515489,1936291941,1735289204,32,1632835072,1663067510,1701999221,1663071342,1735287144,540701541,1853171722,1819568500,170484837,1702129486,543449456,8237,1918979328,776216683,1851867917,544501614,1684957542,1309745210,1696625775,1735749486,1701650536,2037542765,1818838544,1869881445,1634476143,979724146,1867384608,1634755956,1648429156,779384175,1276587566,543518313,544173940,1735290732,544175136,1953718608,1310666341,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,1702257011,1310335034,1629516911,1818326560,1847616617,1885697135,1713398881,979725417,1833245728,544830576,1701603686,1818851104,1700929644,1818584096,1684370533,1125654586,1869508193,1634934900,1696621942,2037674093,1818846752,220215909,1852727619,1881175151,1953393010,1867388192,543236212,1768710518,1768300644,1634624876,372139373,544501582,1635131489,543451500,1701603686,1701667182,1310662714,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,1852404336,1310400628,1696625775,1735749486,1701650536,2037542765,544175136,1852404336]},{"sector":17,"data":[1125326964,1869508193,1919098996,1702125925,1818846752,1632444517,1142975346,1632903214,1869567003,1668640032,1702109288,1948284024,1867980911,1461740658,779116914,0,0,0,1291845632,543912545,218115585,2949376,1895891714,16974080,524402,201356289,1803520,1632436249,565709030,1183666176,-1202710870,-1706033072,4923,91602955,-352321096,-1983894782,1996488262,16431110,-1438216880,1520062486,-2097151981,1962999422,-432603366,2275336,-1438216880,1354256406,-560312320,184549387,-1207601728,48955393,1183432747,108462078,1342177720,380257933,202283600,2122514432,158597374,-1207535873,468320255,108462079,1342185656,-16658712,-591919498,783831040,-1706025460,5235,-1928956161,1343660614,16777114,243712,175124215,-1985722877,28875846,-577089536,-1962934253,-936662962,-150993992,51015726,145531336,-939269935,201084553,-1962574135,-1673123391,-150993224,51139118,1183425094,1354771358,16777114,-1504802048,112773163,1378809600,-1580727540,-523171820,1317652483,2127105020,700549893,1996463686,-1636368634,-1952680193,1177265734,1183535266,-1538905176,1354771280,16777114,108461824,1342177720,842138,1575324416,1426064578,-327029621,1187446914,-1962934018,20777542,1026782208,57999362,1023469033,57933844,-2097092375,1963001982,209125149,-402360577,1996423391,14465036,204388432,-459648994,-385875950,1996423365,74907404]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[25188941,153,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":5,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":6,"data":[279886,56492849,191654789,2162694,268435712,2098572,2162688,196641,4194605,51446088,52429594,2703,131215,0,0,0,730333935,730460464,52629200,52752688,159387580,159445296,201331275,201453872,158274968,158396720,207951921,208073008,203758509,203878704,208674585,208728368,292495986,292614448,566175521,566292784,137244688,137359664,170799694,170914096,107558202,107671856,18822887,18936112,9779010,9892144,20526962,20640048,38942675,39055664,56637566,56750384,39139697,39252272,18889245,19001648,38943348,39055664,35666719,35778864,16923574,17035568,187776005,187887920,9322248,9433392,187383606,187429168,6701604,6811952,17777222,17887536,59785881,59896112,20792206,20902192,243811306,243921200,151013327,150995280,150358630,291897681,-2147418108,10,322240512,-265289711,312,323354624,-265289711,319,324468736,-265289711,328,325582848,-265289711,336,326696960,-265289711,344,327811072,-265289711,353,328925184,-265289711,362,330039296,-265289711,371,331153408,-265289711,380,332267520,-265289711,389,-2147352576,1,333381632,1048899,397,-2147287040,1,354549760,-265289663,403,-2147221504,1,358809600,-265289689]},{"sector":7,"data":[409,-2147155968,4,361365504,-265289719,415,361955328,-265289720,424,362479616,-265289716,435,363266048,-265289720,440,-2147090432,3,363790336,-265289717,32769,364511232,-265289712,32770,365559808,-265289711,32771,-2146893824,1,366673920,1048580,451,0,1380929030,139215181,1347573059,1279479365,1381319431,1145979208,1381319431,1415071060,1381319432,1364345165,1430456389,1396788306,1124618067,1380274773,138761025,1129469251,1397968722,1381319432,1313423696,1430456148,1280659026,1095763276,89411145,1313423696,1095763284,139742793,1162627398,1313165391,1279870474,1447121733,72565061,1347175752,1329742090,1380996178,89411145,1162036033,1095763276,5525065,65536,786437,1145504512,1162544713,1279610450,1163089156,33525586,-1560199219,1070399758,17682185,1711685581,1070399755,16880135,-972537907,1070399753,17362180,737229,1070399744,17017611,-250921011,1070399749,18770698,-1559609395,1070399774,18159617,-436125747,1070399766,16806668,802765,1070399488,415747,606157,1070399488,1171969,1292189645,1070399497,374277,1191395277,1070399495,2,212941,1070399488,254473,-1911996467,1070399492,273673,-939180083,1070399488,341792,320880589,1070399493,172297,1627996109,1070399503,275488,1980383181,1070399502,191500]},{"sector":8,"data":[185089997,1070399499,262668,671693,1070399488,1918986,-116768819,1070399514,1891082,604651469,1070399514,1679370,236994509,1070399492,883978,34226125,1070399505,128521,-821477427,1070399488,21769,1929985997,1070399489,968457,-1056358451,1070399492,4,1495220173,1070399497,98335,-65060915,1070399489,548890,-1155907635,1070399494,693016,-988135475,1070399497,501509,-1727381555,1070399496,696072,-16236595,1070399499,412427,1510621133,1070399491,215301,-804962355,1070399490,348421,-469090355,1070399492,22538,1242185677,1070399521,186394,2082422733,1070399491,2658561,253706189,1070399489,1612289,385957837,1070399512,757761,320356301,1070399497,432651,-150323251,1070399520,293664,-853524531,1070399492,937994,1327053,1070399488,16,1523661,1070399488,10003,1261517,1070399488,10002,1195981,1070399488,10005,1392589,1070399488,10001,1130445,1070399488,30,1916877,1070399488,27,868301,1070399488,14,1654733,1070399488,15,1851341,1070399488,22,2047949,1070399488,24,1720269,1070399488,7,540621,1070399488,23048,1292320717,1070399488,1498890,486883277,1070399496,2119690,2031632333,1070399497,671258,789200845,1070399508,538399,1042104269,1070399491]},{"sector":9,"data":[304160,-1038073907,1070399491,234784,-115327027,1070399492,193309,-1996406835,1070399515,58633,285818829,1070399489,64265,587939789,1070399495,41221,1308966861,1070399488,68357,637878221,1070399488,5,1527070669,1070399494,1777665,956645325,1070399490,136709,-586858547,1070399489,445957,-1174323251,1070399505,1152513,-1979629619,1040187418,1919117645,1718580079,1632641140,544501353,539583272,892877105,1667845408,1869836146,1126200422,779121263,544825888,544104772,1631806285,539780450,1629516901,11884,1330600462,1414877005,1346653783,71520082,1094913280,1396790862,1346653783,54742866,1095764992,1465142857,1380992078,82767,1095914511,1229343555,1095976268,1396786518,1410334728,1262698834,1162627398,1312901187,155469127,1095765504,1414808908,1145984837,1129271888,1175191554,1129598543,1112296513,206259009,1430522624,1279345488,1128350284,150997835,1380926017,1397052500,167776084,1380926017,1230131284,939086,1095914509,1229343555,1347372364,478789,1330600461,1464748365,1380992078,344911,1128351244,1279345477,1128350284,234884427,1163149648,1465141572,1380992078,410447,1347371788,1279870553,1296125509,2629,-2081649835,1996429548,-26108,1183383552,74907624,-401698736,1996427372,-394854652,16777114,-1372127488,1983315725,-1707671796,4233741,-1202716672,-1202699352,-1706023152,65535]},{"sector":10,"data":[-955363165,552454,-2110324992,34576910,1183383552,-1070903064,42572368,-1706033152,140,736655103,-11513664,-15886282,-1207065546,-256245727,-1706012160,168,-1542401,-1710496714,655,736655103,-11513664,-15886282,-1207065546,-256245727,-1706012160,65535,-1696041217,226,-1705983957,65535,201213577,-14977600,-6683530,-1996488449,-1202655162,-1202716638,-1706033151,65535,1996425451,41851646,1996423168,1354771204,16777114,-263812864,729071627,1354771280,-2118627248,12079104,530206721,-16777215,-1070862218,286832720,-2135404514,12079104,-6664191,-1962934017,46292453,-326413056,-2096960381,357438,1187448693,-352321026,1949761332,-26107,37552128,-1207602176,48955393,1183432747,1958743038,1312719648,125108229,72236672,-1207274496,1344144334,16777114,74907392,16777114,-28931328,-1034033781,-1957363710,-2110324756,26450446,922681344,-1667626012,-16777215,-1710456778,421,179975935,110234,1781989120,-26104,244318208,-15717400,-1710158794,65535,1962934589,-26107,-443875328,-1957313699,250381292,1996445271,-163148538,-6664170,-1962934017,1177287238,-28931594,721712895,922702016,-124122188,-16777214,1996424310,-1271463938,52468235,922681344,-6681452,-1996488449,213447750,-164694272,-1192195315,787939331,-125104650,-1727138143,-1037319629,-754974023,734147576,-28406846,-835991509,-1995576957]},{"sector":11,"data":[1996485198,2110733060,-339244284,-230257917,112720,222596432,239903056,50716881,1996443648,1354771444,2144336,1375784122,-26032,1996423168,-25868,1996423168,1354771204,170906,-1583722496,-16777214,129500278,-6664192,1342177535,16777114,234266880,734147481,178626,-1036781357,-259276245,1443133183,1342177720,-787614047,96863200,-1588592637,-523170228,1342178309,16777114,74907392,-1727138143,-1037319629,-754974023,734147576,-167377982,-1202700275,-1706033151,832,-1593542913,865668598,-1178457150,-120389630,-1037319629,234227203,1285640256,98619662,-1706033148,875,-1593542913,865668598,-1178457150,-120389630,-1037319629,239903056,-1706016704,65535,-1593542913,865668598,-1178457150,-120389630,-1037319629,234229387,-1056710191,1342178053,1074678945,-6664128,-16776961,1996424822,1354771204,231578,108461824,-1207666945,-1706033149,919,-16353537,45614198,-1499836416,-16777213,1996424822,112644,-26032,1048772608,1946159212,1354771211,-1710983425,65535,-443850914,311901,-2081649835,-1957295892,-1667037626,71731979,-1962167645,-1700592058,74877707,196359723,2130053966,-339309820,-1983894782,1996424262,1816036102,91553800,-352321096,1354771202,16777114,1950253824,57999365,-1593790487,1178143726,-1962574586,65734214,-1995706719,1721890886,71710988,1183516029,-1593578748,1183386726,209101310,2113422905,-129594619]},{"sector":12,"data":[1990263787,-129595124,957121185,92143174,-335657333,209887491,-1946270071,1177224774,-1037329928,1183447249,71732220,-1711389141,-120470997,-375159,-16419786,100924534,1346374580,-493825,28900982,-1097183232,-2097151996,539198,922683005,199951730,138034819,-15237632,721776694,-11513664,1996486774,112894,-26032,-1956773888,113401317,-326413056,-1962480509,3999814,1025012738,57999873,1023460329,57999874,1023478249,1165230595,-16695063,-1710348234,65535,141442691,-385646848,1048772909,1979648108,19130627,-1710590209,1476,-375159,1996424822,-744861692,-16777211,1996425846,98474746,-18284544,108461824,721712895,-6664000,-1996488449,87948870,-16026368,-1878690762,104917006,2122524907,829752574,138034819,-16026368,-1878690762,313518094,1048776939,2097154106,1949761289,-401698811,1996428064,-1103692022,-26109,-1494679552,-25263360,-385649661,1048772765,1946159162,977175512,-629276664,1048821227,1962936430,1949761345,123509253,113704960,2156,16777114,62825216,-1710590209,1548,-375159,1996424822,-6664188,-16776961,1996425846,103193338,1996423168,-26102,117374976,1072367726,141442691,-13074944,-2096599538,552510,113716597,-63380,-1710590209,1676,-375159,726665846,2040156352,-16777213,1996425846,111188730,-6684672,-1962934017,146955749,-326413056,-2096173949,1970340990,112645]},{"sector":13,"data":[-1070923029,90048059,-1578564747,75399936,-1207601807,48955393,1587789867,75399941,723613040,-1197846336,-1996488704,-1705971130,1685,15892099,1996433012,11574002,485163008,-1710852353,10,1358055049,16777114,108461824,-1695385857,33,503566008,171620432,28856350,-6664032,-1996488449,-1705970618,65535,-1695254785,65535,-1928956161,1343682630,122778,108461824,-231681,-471269770,1949761532,1354771205,112720,-26032,-443875328,311901,-2081649835,1048773868,1962935668,108461832,16777114,71731968,1023417901,58064979,50521833,-13724736,-16108377,-1710918602,65535,-16536087,-1710918602,65535,-16539159,-1207602122,-1706033151,65535,-16543255,-1710918602,65535,-16546327,-1710918602,65535,16777114,108461824,16777114,57469184,138034819,-15960832,-1878690762,561506318,-2096932375,539198,1340670844,1949761283,-26107,1139343360,1949761283,-401698811,938017774,1949761283,-401698811,736696081,1949761283,-401698811,535369543,1949761283,-401698811,334043297,1949761283,-401698811,132715980,1949761283,135502341,1183383552,1681818620,141819909,-26032,267059200,90717827,-16223232,-6620042,-16776961,-16419786,-1315242890,-385875960,922682062,664405364,-1996488696,-1705968570,65535,922738155,1067058548,-1996488696,-1202652090,-1706033102,65535,922732011,-1667627660,-1996488696]},{"sector":14,"data":[-1202652090,-420806605,1023690379,57999438,1023463657,57999439,1023451369,57999440,1023454697,57999441,1023470057,175374418,1962955581,13232387,1048777195,1946160546,-339727612,112643,-15883613,244319862,-16070936,-1710918602,2253,1358710409,-1779954032,1949761288,-59310331,583322,-1036090624,57999363,-16728087,-1710918602,65535,91502335,331930,-62486272,91502335,-26032,922681344,1996424564,86678268,922681344,-6683276,-16776961,-1710918602,65535,-2097029655,17435198,28837236,-1207702784,178455128,-8656630,168574592,704934912,-1341985856,168600065,-939562775,17435142,201770496,113639434,-973075955,658950,228722375,1256783872,238977279,74711050,49004586,245498288,-13113078,168640128,704934912,-1341985856,168665601,-56087,1996424822,24045572,63061635,-385649664,1048837953,1962935654,22341891,91502335,16777114,21555456,-16353537,2095580278,-15341311,91502335,1860701840,19982606,91502335,-437776752,19196174,-16353537,-1880619914,18409729,-1710852353,65535,-16708119,1996424822,-60954620,-16711191,62391926,-6664192,-385875713,1996423410,112646,1996484587,178182,1996482539,-339727610,71732192,-120387407,1023442725,141819958,1946174013,12904721,-16353537,244319350,-385211672,1996488305,74907398,-1964503408,-27006710,120522531,122357563,167839575,167840257]},{"sector":15,"data":[167840257,167840257,127469424,129042341,130615229,135137237,138020898,167840257,167840257,167840257,167840257,167840257,167840257,167840257,167840257,167840257,167840257,167840257,167840257,167840257,139200588,139200588,139200588,158009707,160696683,167840148,166332891,167381490,167840257,167840257,167840257,167840257,162269600,163056129,163056056,167840184,167840196,164563407,-1034033781,-1957363708,49054700,-1710852353,2851,1358841481,63190783,-1705983957,2831,-1946257665,-995949498,146296835,865751040,-1962934261,79846885,-326413056,-16585597,1520043638,-1996488693,-11469242,721977398,1184518336,-16777205,1183579766,142648068,571472,191732304,-443875328,311901,-2081649835,1996423916,13081094,1183383552,1889620222,6882568,1354771280,755354,-25755904,755254923,1889730665,6882568,571472,-26032,-443875328,311901,1167087646,518818645,-326903666,1376175876,-16776955,-1365637514,-2097151995,539198,244332917,-14886168,-73791882,-1996488693,-397345722,1996423256,-59310330,790426,-2110324992,5413390,1183383552,1038635260,-59310336,426650,-2094470400,539198,-6676099,-16776961,-627440010,-1996488697,-1705968570,65535,-16353537,127597686,-2097151992,-443874579,-900899553,-1957363710,74907628,-1705983957,94,6593104,1996423168,1354771204,-1741226160,-1539899635,2209805]},{"sector":16,"data":[1375793338,8428112,-443875328,180829,1167087646,518818645,-327034738,-11140970,-6683018,184549631,-13404992,-2037578122,-1202651284,-1202716544,726663178,-6664000,503316735,280148048,817385502,-6664192,-16776961,1973028470,-385875967,1996423349,-230257402,-778416106,-1962934266,1177286214,-96040462,737691275,1183446086,737184752,1309389878,75429387,49006219,1183432747,200188400,2113553977,-96040187,-291437589,1787201803,208052735,2112898617,-263812347,1721828331,-62486260,737822347,-1711314298,-120470997,-1947318647,1177284678,-1037329924,1183447249,135444716,-491237346,726670855,1342225088,1996443730,-330920978,196347395,-1224781760,1996488554,108462076,-11485141,1343294518,-26032,1956839424,345657349,1577058320,-1962742397,1297948645,1426064074,-326898549,-18428,1392508858,204930896,-26095,1183383552,-27883012,286013183,503525560,74907472,-59310254,16777114,-25755904,-1694730497,65535,-1034033781,-1957363710,149717996,-1710983425,2796,-2080618871,347710,1048774516,1946158418,112645,-1070923029,-506231,1048837238,1946158430,7387141,1907885035,2122534912,91488504,-352321096,1354771202,920730,-59310336,90062467,-1207602176,65732721,1342206136,-1705983957,3737,-2080606465,351806,1891108212,-1207702784,726663281,1134186688,-16777202,1048837238,1946158430,7452677,1891107819,146296832,-56995840]},{"sector":17,"data":[-956301302,130630,138034819,-12880640,-6683530,184549631,724530368,434852032,1946157629,212234,20776308,-955812608,65094,1996427243,-25862,1183383552,1975520250,-25893,1996423168,3062012,-25755824,55450,1575324416,503317186,1430622296,-1910575989,653034456,1183432747,-96040452,1024214667,1098121232,1776878454,81153,37564276,1027699712,57999365,1023444201,57999366,1023481833,57999375,-385842455,1996423515,-21567474,-1946532213,-2098594730,242679553,-336526872,242679791,-1712184600,-1980086647,-521405354,737308648,-6664000,-352321281,1950254035,242483205,91502335,82586,146688,28837236,735111936,-2083722304,1946159742,1312719791,125108229,72236672,-1197378560,1344144334,93594,-6952192,1996426870,142016262,-336306712,242679687,383403661,-26032,1996423168,-629735666,-897048,1183649398,-1706027302,65535,91504259,-385649664,1996488538,-26098,-1073020928,1273561972,1614709759,57933829,-939572759,17129478,242679552,-1746399600,-13571588,-33011977,-385649409,1996488486,175570702,-369678872,2122383130,1769308170,-401705217,199884161,242679807,-1928562945,1343620678,-369830168,2122579706,57999370,-2080443927,1946159230,-18290429,138034819,-15958528,-1710919626,65535,-2080451095,539198,922683005,-336919182,91502335,289269227,2005758977,1129767,-521600139,1457662,-152501387]}]],[[{"sector":1,"data":[242679806,-15960321,1996425846,108461832,16777114,-22222592,1963004477,-9246461,1963005501,-25237245,1912733757,33766868,1827210103,-2083853313,-443874579,-900899553,1478361098,-1957345904,-661774612,161482439,113704960,2312,151389895,1996423168,108461832,1374162576,67553025,-956301302,656902,134661888,-956301302,17435142,201770496,113639434,-973075955,658950,168756934,268879360,113639434,-973075951,659974,169019078,-1576614144,-956301299,590854,142016438,1354105016,1088949904,33998595,-4063223,12060790,244338882,-16538392,244320374,-1207812376,-1706033142,3112,-16146269,244319862,-2097148952,-443874579,-900899553,1478361092,-1957345904,-661774612,161494783,1175962,167950336,-6664162,-1560280833,1996425632,-401698810,1996423216,241088518,-6664162,-16776961,244319862,-1593819160,-523170398,241042947,241567235,-2096334685,-443874579,-900899553,1478361090,-1957345904,-661774612,-16353537,-1710645194,4563,-2096562013,-443874579,-900899553,1478361090,-1957345904,-661774612,151010947,-15961088,922682998,781846784,-2097151988,-443874579,-900899553,1478361090,-1957345904,-661774612,161494783,101018,49120000,1562371467,1478413133,-1957345904,-661774612,1446964355,-1710721281,4974,1357792905,1342194360,504268984,306223696,1183383552,-1866968848,1301958656,-16777198,918089334,-524791808,-1706025456,65535]},{"sector":2,"data":[1358317193,1342214328,1237402,108461824,-955977752,62534,-956266007,311878,16598726,821839558,-772514165,1015516131,-1960383735,-768871866,-150992199,-330921487,-4032885,-1047805362,-1964218633,-936709554,-2010070656,1183578186,-230258196,-747257845,79855235,1191117684,-260636734,-1957642197,1116586614,-1957685512,-998181818,2122535106,310247668,-1712044405,-150992199,1976699897,2144261,-1070923029,1342295168,1262234,-196673792,956892833,58586182,-939561751,62534,1586188267,-1846796,-1928748361,1343669318,1342187448,16777114,-159973632,-1924087765,1343669318,-2131474805,-2091862332,2113991806,-196703470,702873,-770967049,548930933,721611520,30179520,17275472,1191116800,151560692,2096383545,-310157655,535137026,80366941,-1873273344,-326412987,-2082959842,1996424428,342137350,1183383552,171869180,477430026,168574592,-2146077440,658750,1048579701,1962936846,-1572961529,192151565,-1191414017,726663246,-16061504,1320746102,146296832,-895856640,-16777197,1337523318,1048793088,1946225162,571397,-1070923029,333814352,1996423168,5290236,205422672,91488266,-352319304,1354771202,1310874,-59310336,1342198200,168640128,-1207602176,48955400,-1705983957,5147,-1191414017,-2142240685,659006,146277748,721611520,916082880,-16777196,1387854966,1048793088,1946160546,571397,-1070923029,237476432,-310181888,535137026,46812509]},{"sector":3,"data":[-1873273344,-326412987,-2082959842,-1974074132,-467007930,909766795,1333135624,-1710721281,3504,1358710409,151271167,-1705983957,5255,-1946388737,77792838,146296841,-358985728,-1962934252,-1846818,-1207328073,1344145940,1342185656,1248666,106859008,-472776918,151685002,1577717666,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,105286230,-259267542,151402041,1996437110,303077896,1183383552,922702076,-1070921470,352164432,1996423168,105286652,1342767779,1342179512,1290138,-773944576,1015516131,167944969,49120094,1562371467,313933,1167087646,518818645,-326903666,1183536652,307661584,1375736325,274646096,222792230,-397351894,1589903513,126559760,1358579337,-1006562072,-1960442274,582506039,1687834624,-1996488683,-1202260922,-1706033142,65535,734147481,178626,-1036781357,1183433259,-196675592,443810048,1090143883,-1946401143,1178204230,-13008900,-890700682,-62456064,1187507691,-352320778,-159481060,-167346680,1954608198,-163149029,-1980076297,-397345722,1191116965,-163148810,1006268151,-645990330,1577058744,-1962742397,1297948645,1426067146,-326898549,1048794628,2098792712,142016371,-1710852353,65535,201213577,-15043136,1996425334,-26106,1183383552,1958743038,137792335,-337194743,-62470344,451608576,-771983733,-28931098,161645625,1183517045,176437508,-16026615,144833606,-62506743,144825980,-62506743,-259320196]},{"sector":4,"data":[1183573713,-1568372226,71731977,151684233,151521023,1575324510,1426065090,-326898549,1187468804,-352321282,-27358447,1183572945,1015494916,-16024311,111279686,-28952311,1586227068,-1948003842,-2026306490,141887804,956892833,1132265030,-1995897183,384564294,855408259,1988824445,-1947807236,-1995883900,-16171900,1183579214,-62506498,1048830591,2100431110,101121796,-25263351,-1962115790,-472777122,-1996208501,1577663623,-1034033781,1478361090,-1957345904,-661774612,-1207374717,-1883629684,-11513321,-1710158794,6040,-1980217719,1589967446,939468294,-1961867637,302322262,642798080,637827071,100825087,399546963,1183383552,-92864516,-1694992641,6110,-2080618869,-443874579,-900899553,-1957363698,317490156,1342177976,-1728051528,-6664110,-1996488449,-1072958906,-1706029452,65535,-1980479863,317453910,1358954424,16777114,-129594112,-1930148215,1589966422,71732212,-1207465690,-4521985,-11513089,-1710158794,6068,653549252,637683593,-1207674999,-4521985,-11513089,-1710158794,3446,-1980873079,1996484694,1354771204,1996444240,-159973394,-1695254785,65535,-113015,1996484726,401185518,1996423168,-92864516,892058,-226589952,-15567872,-6622602,-16776961,-6622602,-352321281,-18423,-26032,1183514624,1575324670,503317186,1430622296,-1910575989,82609112,138034819,-10193665,-2096612850,539198,1996431733,410294790,1183383552,108462076]},{"sector":5,"data":[1342203832,-2081943920,108461825,16777114,-13767936,1723336310,244338688,-16731672,-124123530,-1879048168,270657550,-1710852353,6333,-244087,-1706031498,65535,-16353537,-493159306,-2097151976,-443874579,-900899553,1478361090,-1957345904,-661774612,-2096829309,17316414,117398388,1048774714,1962936378,108461871,768922,-62486272,-1207535873,-1873805210,16836622,-16353537,-6620042,-16776961,1996424822,198023932,569049088,-1207535873,-1873805209,2156558,-1710852353,2983,-1863840112,108461839,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,142016260,1696154,-409317376,-1996488679,-11469754,28837494,1268404224,-16777191,783875190,28856320,1637502976,-2097151975,1969686142,-59310304,1342188216,1342177720,1667482,-59310336,1342188472,1342177720,1671578,-59310336,1342185144,1342177720,1675674,-59310336,1342185400,1342177720,1679770,-59310336,1342185656,1342177720,1683866,-59310336,1342185912,1342177720,1687962,-59310336,1342186168,1342177720,1701530,49120000,1562371467,313933,1167087646,518818645,-326903666,142016260,16777114,-627421184,-1996488684,-11469754,-1070922122,436574800,1996423168,3062012,1354771280,1710746,108954368,-14781081,716766326,-1070903296,438934096,1996423168,2865404,1354771280,1718426,-59310336,1342185144,-1705983957,6727,-1191414017,726663199]},{"sector":6,"data":[1452953792,-16777190,548994166,-1070903296,442866256,1996423168,2210044,1354771280,1735578,1312719616,259260430,-1191414017,726663202,-241545024,-2097151987,-443874579,-900899553,1478361092,-1957345904,-661774612,-16454525,832177782,-1996488677,-1202652090,726663212,-1164291904,-16777190,767097974,-1070903296,449419856,1996423168,3127548,1354771280,1759386,-59310336,1342189752,-1705983957,6887,-1191414017,726663217,-157658944,-16777190,850984054,-1070903296,453352016,1996423168,3389692,1354771280,1786266,1678165760,-956301051,17132550,49120000,1562371467,182861,1167087646,518818645,-326903666,108461828,1903770,-62486272,2930768,1354771280,1790106,-59310336,1342188984,-1705983957,7007,-1191414017,726663215,1855606976,-16777189,817429622,-1070903296,488479312,113704960,66920,90965703,-310181887,535137026,46812509,-1873273344,-326412987,-2082959842,1048775404,1962935652,1748927242,57999365,-2097027351,1138750,1474888565,1816036097,58523653,-16704535,-1710325194,7123,-2081012087,353342,922708340,1016729952,-1996488676,1996487750,-1506344970,-1472790771,-1237909747,-1204355317,28856331,-1202696192,-860225504,-1706012160,7269,-1694730497,7277,90586755,-385649408,922681497,546966424,-16777188,-1710172618,6143,-2069643221,143172360,-1559723357,1721960582,-9114875,-1710453194,7286,-506231]},{"sector":7,"data":[922744438,922684838,922684840,922684342,-1202713672,1347420161,-1174198600,1347551266,1875866,-126419200,1877914,1614216960,500931089,1183383552,-159973380,228996863,229127935,196491007,196622079,112720,-2034741168,15645184,-929410990,-16777188,-795149194,-16777188,-1070922122,922701904,922684824,1996426660,-1202695946,-860225504,-1706012160,7705,-1695123713,3045,1048779243,1946158436,108461834,16777114,-16192768,-6683018,-2097151745,354366,922683764,77204622,-16777187,-1710137290,4429,-1710721281,6443,1358579337,1342188728,1342177720,1912218,-92864768,1342188984,1342177720,1916314,-92864768,1342189496,1342177720,1920410,-92864768,1342189752,1342177720,1924506,-92864768,1342190008,1342177720,1928602,-92864768,1342190264,1342177720,1932698,-92864768,1342190520,1342177720,1653658,1678165760,-956301307,354310,1812383488,-2097151995,-443874579,-900899553,1478361092,-1957345904,-661774612,-2096436093,353342,1048775285,1962935656,16312579,90979971,-2095874816,353342,-6682764,-352321281,-26107,922681344,-409333408,-1996488675,922745926,-694546814,-1996488693,1048835654,1946158436,-59310294,1342177720,-1237909680,-1204355317,-159973621,228996863,229127935,-1174396744,1347551436,161434,-10556672,28900470,-11513856,-16009674,-16009162,922744438,922684838,548933032,13416960,1905938514]},{"sector":8,"data":[-16777186,-1710453194,8133,-375159,28900470,-11513856,-16009674,-16009162,1347484278,-1174354248,1347551368,2095258,-92864768,1999258,-159973632,2001306,-59310336,2111386,108461824,2055066,-129595136,-1710852353,6437,-126419120,-521662832,108462076,-1694992641,8081,-1962742397,1297948645,503317194,1430622296,-1910575989,108462040,2036378,1975520000,108461836,1342186168,-351698968,542677525,1996423168,-401698810,1996423187,-401698810,-310116696,535137026,46812509,-1873273344,-326412987,-2082959842,1996430060,545757702,-1073020928,1996426613,2209798,154855504,-1711196695,65535,90455683,-2096466688,354366,451478389,1816036097,326959109,90455683,-1710787584,7627,-761657877,-16777187,983172726,-1996488680,922740294,922684342,922684826,-2087056402,-1996488673,922742854,922684344,922684846,-325448602,-1996488672,1996483142,-428409082,1608602,-1237909760,-1204355317,112651,-1070903216,-1818603440,-1996488671,-1072958906,-1561787531,1996443648,-361299984,16777114,-227082496,2085274,-431585024,291518207,2099354,-96040704,736524031,-11513664,-16009674,-16009162,28899958,-1202696192,-860225504,-1706012160,8239,90717827,-13077504,-1710453194,7104,-637303,-1070864778,922701904,922684342,1996426168,112886,649613392,12302850,-56995758,-16777189,1268446838,-1207959520,-11534334,-6622602]},{"sector":9,"data":[-16776961,1402665590,-16777184,77260406,-1711276004,3722,-1962742397,1297948645,503317194,1430622296,-1910575989,1089242072,1996445271,409442822,244318208,-16249112,1469711990,184549390,-15895104,548931190,-974630912,91678983,1342177976,16777114,-901347072,58048523,1342322153,1342181048,383927949,-26032,1183514624,-1069119004,-1981397365,1996487750,-25910,1183383552,-598308390,2004140555,-2459905,-1207177674,787939338,-1706029670,8451,-16009565,922737782,179833958,-1372653824,848973837,-1560281088,1183517624,-1037329984,100923601,-1952904266,-101203890,199116425,-16550464,1183571526,-563152960,-1962166621,731511878,66638274,-1727285242,-134459765,-565802503,58048523,-1948367105,1861745734,-1962284066,-1230782394,-62485749,-1593067357,104402328,58657718,-1995721055,-1532888506,-1207551731,-1593606389,1183386552,196518386,-1588576192,1077939128,112720,-1070903216,-6664112,-1560280833,-1073016480,854131573,228106500,-1711651285,-120470997,-1592940893,1177226660,-1037329934,-1465648943,-96040179,228984323,-1962038621,100921926,-1398600280,210155533,-1497870306,-1706025459,9319,-559693781,282895120,-1559176541,1996427480,570333898,1183383552,1614217154,596744721,1183383552,28856560,-11513856,-16009674,-16009162,-1070873994,1996443728,-59310144,-1174396744,1347551436,16777114,196518144,1979336249,196649224,1962034745,108461869,-1947175169]},{"sector":10,"data":[1346435654,1089619595,-1237909680,-1204355317,-92864757,-386763009,1183515585,196518906,-1544403317,1996426168,582523586,1996423168,591501830,1183383552,922702036,922684838,1996426664,-227082246,-1192200449,1347420161,-1174396744,1347551436,2416282,-730398976,1892762,108461824,-1697351937,9051,-1695516929,9226,-1710852353,8913,1354771280,361114,108461824,2006170,244338688,-940068888,17125894,53078272,1342178232,2426522,-129595136,58048523,1342311145,1533082,-968455936,-1916250487,-259273602,-1910634730,-1515870758,1996431269,402103032,2122514432,108267468,147619459,-1734276235,196518669,-351427423,-834237641,-1946925431,1183436870,108462070,2418330,-733574912,1355577087,385107597,61532240,-16353537,-1332030346,-1962934242,-1230769082,-163149045,-1593067357,1077939126,196649296,-1202700224,1347420161,1347469355,2074522,291545856,58048523,1342325993,2391706,-263812864,1354771280,1123482,-1466281984,-16777199,-1070862218,922701904,922684342,565709752,15776256,1251627090,-16777204,1996484726,-25908,1183514624,474572,138217332,-351243264,-260636898,-3246337,-6631306,-16776961,922742902,922684342,-6681672,-16776961,1996484726,-25902,1996423168,511286000,-1734279168,-1241106163,-1593606389,1183386550,228893178,196609593,-1197407361,-230258421,722311329,731511366,-1543974462,-1532949082,-230282483,-775804007]},{"sector":11,"data":[229155832,66733707,-1559386618,1183518122,-1476000782,229417741,504137400,229029968,-6664162,721420543,283026368,-1559176029,-660401958,1614216976,508336657,1183383552,196518384,1979336249,196649224,1962034745,108461865,-1018113,1996487286,-1237909518,-1204355317,-92864757,-386763009,1183514989,196518906,-1544403317,1996426168,112880,922701904,922684342,1996426168,1354771440,2144336,1375784122,507746896,1996423168,512858630,1183383552,922702036,922684838,922684840,922684342,-1947661384,112893,547461712,1183383552,1975520224,15722755,-1230782421,-2081387765,-1554644282,1077939128,112720,-1070903216,-2120593328,-1560281053,-1073016480,-1763114123,228106496,196478507,-775804007,229024760,722314401,-1727285242,-120470997,-1592940381,100863398,-1432155210,229155085,196609539,-1207063389,1344146566,504211128,568105552,-1070923776,-1559175517,-626847524,282632976,-1696565505,65535,-1710852353,2445,196492931,-2093452032,768062,922694005,-73789088,-2097151972,1103422,922683764,-811986730,-2097151963,759870,922683764,395971480,-16777188,632817270,-13702400,-258341258,1342177317,-1705983957,8905,-1710852353,8896,-401698736,113767568,66918,-206615,548931190,1374179328,518167042,1599995904,-1962742397,1297948645,1426064074,-327029621,1048772738,1946158414,1379828492,91553797,-352321096,309788455,1350583949,1342210232]},{"sector":12,"data":[1342186424,-1705983957,10359,1186484254,-1202708980,-1706033071,10375,-8485239,1946157373,9234691,89261767,1183514625,1946551050,-301581556,-1593147893,103484398,1183386740,138840842,209585667,208012859,1721830014,2114333452,138840332,50742923,1342993414,51226785,1342995974,722093707,-11532730,1996424310,242679568,722224779,-1706032058,9972,51226273,1342993414,50611851,1342995974,-1962248449,1177225286,1996443652,239504144,1342588459,-1710459137,65535,-1034033781,-1957363696,175570924,637820612,1996437503,571400,656382544,-11534336,79169654,1016745984,1342177319,-1006614296,-1993997218,175570695,41418534,-1207404801,-1706033142,10057,142016336,1342179000,1398682,518541312,73319424,38242598,4162342,-1073018498,28837246,721611520,1575324608,1426065602,-326898549,-263796976,1187446785,-2097151498,1962935422,13232387,755648139,121438209,-385649152,-1073545029,-1476448621,1187456982,-352318730,-163133631,988479588,-17807673,-163133696,787167296,-17807673,-163133696,585827304,-17807673,-163133696,384509712,-385333621,667943042,665135006,667166648,667953068,1183524816,1347590640,-1727510901,10113106,1375731752,105286480,-1706012007,10263,-1979955575,1183579734,1347590646,-1727773045,-6664110,-1996488449,1451882566,-62485510,66999947,1444149318,77306,1375787651,-92864688,-1694992641,65535,-1980610935]},{"sector":13,"data":[-770968490,92212092,1988099901,-339727612,-230257917,-1034033781,-1957363704,-2131983892,108461824,1350583949,1342210232,721712895,-2087038784,503316492,280148048,817385502,-1818603520,-1962934260,79846885,-1873273344,-326412987,-2082959842,1048774380,1946160100,-466157751,683055627,1183383552,-2110324740,695114254,1183383552,-59310086,1347469355,228079359,228865791,1358591743,2144336,1375784122,698260048,1996423168,686463738,1996423168,705272572,-310181888,535137026,516640093,1430622296,-1910575989,216826840,89261767,1822490625,-1546062075,-1969158804,-1546062072,1996425354,578198022,1183383552,-1975614474,108855304,-26032,1048772608,1946158436,-159973622,2808474,-2096108800,354366,1996425332,485202678,1048772608,1946158018,108461832,16777114,92446976,-2103191305,-466157819,695900683,1183383552,-2110324742,715233806,1183383552,-92864524,1347469355,228079359,228865791,1358198527,4634704,1375758010,700422736,1996423168,1354771444,-1741226160,-1539899635,-92864755,1186484304,6732288,-526757806,-16777175,-1070859658,922701904,922684824,1996426660,-1202695948,1723465798,-1706012160,10753,737572607,-11513664,-15886282,-15883210,1347482742,-1174396744,1347551436,2804378,-193528064,2757018,-92864768,2806426,1681818368,175439877,90717827,-385649408,-626982594,-1475989232,229155085,282723889,823188129,-1592940538,103878872,-1499394650]},{"sector":14,"data":[-670682867,282632464,228984369,823189153,-1592939514,103878060,-559869730,-1408880368,282894605,229246513,822979233,-1592730618,103878876,-1432285782,-1509545203,196518669,722316449,-1559386106,1048775608,1946158436,1816036172,981336069,291518207,2813338,-62486272,-624897,-15882698,-15882186,-16009674,1342945334,1342177720,2144336,1375784122,722901584,1996423168,723426044,1996423168,581278454,-2081882112,1816036096,1954414597,210646783,2828186,-129595136,-624897,-15882698,-15882186,-16009674,1342945334,1342177720,52869200,1375740602,580754000,1996423168,577673976,922681344,-224784032,-1996488671,1996487750,-1506344970,-1472790771,-1237909747,-1204355317,28856331,-1202696192,-289800058,-1706012160,10458,-1694730497,10466,-1695123713,10574,143277699,-16220672,781907574,-16777175,1996424822,581999350,-310181888,535137026,46812509,16973951,200789,16973931,74754,16973947,73583,131200,16717559,196620,16712134,131089,16717739,196621,16721327,16973843,74698,196611,16722090,16973851,198409,16973948,74727,196620,16721980,16973852,198382,196733,16721907,196637,16712632,16973854,74743,196622,16713243,196639,16715605,196640,16715561,16973857,206428,196609,16713323,16973858,66054,196627,16713618,16973859]},{"sector":15,"data":[66039,196628,16713577,196644,16713569,196645,16719994,16973862,200471,196614,16713552,16973863,137047,196623,16713540,327720,16715114,196672,16713524,16973865,204493,16973961,140735,196625,16713512,16973866,206350,16973962,140025,16973842,66261,196635,16713412,16973867,140054,16973843,204584,196747,16713404,16973868,74687,196637,16713332,16973869,204867,196749,16712991,16973870,205545,196750,16713145,16973871,137077,196631,16721384,16973872,200318,16973968,137226,196632,16713019,16973873,76624,16973858,198118,196626,16712709,16973874,73934,16973986,198187,196627,16714211,16973875,73661,16973987,74281,196643,16714184,196660,16721304,196661,16713976,16973878,200019,196630,16713946,16973879,201250,196759,16713780,16973880,201263,196761,16713756,196665,16713723,16973882,201844,16973978,203435,196763,16713706,16973883,196845,196764,16721484,16973884,74659,16973869,203419,196765,16714855,196669,16714756,196670,16714739,16973887,200602,16973855,75055,16973872,199851,131105,16715117,16973888,198852,16973990]},{"sector":16,"data":[198895,16973991,200562,16973863,131516,16973872,200584,196648,16722237,16973896,200010,16973865,69975,16973881,136960,196659,16722269,16973899,137012,16973876,206303,196654,16722784,16973903,76632,16973892,199835,16973877,71462,16973894,197779,16973880,136684,16973893,136702,16973894,136349,16973896,75538,16973904,207134,16973890,132787,16973898,73914,16973906,207738,16973892,197876,16973893,74653,16973911,206202,196682,16718085,16973932,69999,196701,16718039,196717,16717952,196718,16717905,196719,16719699,327795,16717556,196620,16719692,327796,16717736,196621,16721608,196725,16721296,16973942,200081,196695,16722799,1953300599,1167087646,518818645,1996478606,4777990,74825739,904642603,-402229505,-1073020735,1996485236,19916806,-395001845,-402229505,-1073020516,1996480116,34269190,-730546165,-402229505,-1073020297,28887668,49120000,1562371467,182861,-2081649835,1085801196,448286720,-6664192,-1996488449,-1072955834,-1070922635,1586193387,71732222,1342850953,503844024,-26032,1586167808,206014974,-1995961160,1603015239,239585044,1200160768,408914966,1342177976,16777114,-27358464,-955234423,-956298489,-64953,-16496697]},{"sector":17,"data":[516131839,-26032,-1073020928,1996465268,-25858,28835840,1575324416,1426064066,-326898549,4241410,1751120,6789712,1183383552,1975520254,-339727612,-27358380,-1996208501,-861861305,239569155,-1995957576,1603016263,1354771224,43418,-27358464,722487177,340232640,-955103351,-956300537,-64953,-16496697,516131839,13015632,-1073020928,1996469108,13802238,28835840,1575324416,1426064066,-326898549,4241410,1751120,15637072,1183383552,1975520254,-339727612,-27358381,-1996208501,1204226631,-1207959538,1200162834,408914966,-1705983957,281,-1979818357,-1070919609,-1995159671,130486855,1204224011,-939524350,-64441,1344193419,81562,1958742784,-25755724,84634,112640,-1034033781,-1957363710,49054700,1342193848,1342184120,91802,-28931840,74825739,1424736299,-1946263925,1200161862,63742218,-1207023735,1200162858,408914966,-1705983957,400,-1979818357,-1070919609,-1995159671,130486855,1204224003,-939524350,-64441,1344193419,112026,1958742784,-25755725,115098,112640,-1034033781,-1957363710,49054700,1342193848,1342184120,122266,-28931840,74825739,1407959083,-1946263925,1200161862,239585034,850919424,373786888,723017612,144330944,-1962934270,1200225886,-1983894768,1200165959,185059090,38258432,1204289535,-1946157308,-1706025277,557,-1267417077,-1694599425,569,-1962933832,46292453,-326413056]}],[{"sector":1,"data":[-1207767933,-1202716608,-1706033126,597,201213577,721712576,-1958483008,1183579742,172460292,-1996239711,582487623,373786888,-954703988,397383,198599,-16627769,71813119,-1014235137,-1533390818,184549378,-3902272,-1332019594,-1207959550,-443875327,285393501,637534720,67174146,-1660943872,83951362,67109376,100728579,-872348928,83886594,385942272,117441027,-2046754048,-1375730944,184615680,956302083,2130772736,1459618050,-1174403840,16842496,838862080,33619713,-1459616512,50396929,553649408,67174146,-1744829184,83951362,-16775936,100728578,-1090518528,16842496,922747392,33619713,-1375731200,50396929,1937009920,1167087646,518818645,-326903666,-26104,1183383552,-61437446,-1962223453,198878146,-1727342431,-1037319629,-754974023,734147576,-670694462,234267402,-1727276383,-1037319629,-1036781357,100909611,1285753818,98619662,-1264386043,1543948043,-1207953391,-11534312,-16021962,-1710517706,65535,-16108381,887621238,-129595136,443858955,-16508184,-2065168778,40036355,-402229505,283640001,93513733,-6683157,-1962934017,-310118330,535137026,46812509,-326413056,-16454525,213386358,-1706025464,65535,185373859,721778112,8513984,234239743,-150993480,1343114286,1342177720,1354771280,16292432,-2036137984,1958742798,1095898,28856400,726683648,-1706012480,275,185442467,-1195346752,1347420176,1342177720,9353296]},{"sector":2,"data":[-6664162,-1560280833,-1073017356,45655412,-1070903296,-1706012592,65535,185364131,-1198492480,-1706033145,65535,185488035,-385649216,28901245,1575324416,1426064066,-326898549,-11118824,-1207135178,-1924136946,1343679046,16777114,239902976,50716881,-297387264,1776878460,-1808335103,-26100,1183383552,-297366534,-1728052435,-120470997,-939637111,59462,1988843499,1191105000,737834751,-11120448,28896374,1996443648,1354771450,1088964235,2144336,1375784122,32086608,1996423168,1354771450,-327745706,1342177720,737834751,1183535296,1346388200,-1174354248,1347551368,16777114,-398032128,-28931326,2095597113,-92864607,1342178488,80026,-6664192,-16776961,-1070859658,-398030000,1346435281,-1192462593,-1202716671,-256245727,-1706012160,65535,15222471,-1956123904,1979973238,-394359832,1996488657,1354771450,51268769,1346388167,-1192462593,-11534335,-1070859658,38047056,2144336,1375784122,43162192,1996423168,1354771450,51268769,1346388167,-1192462593,-11534335,-1070859658,54824272,13023312,1375766714,29530704,1182990336,1183515368,-398050818,1996460412,309498,50436688,-1706033152,775,737834751,1183535296,66638312,1074678790,1996443712,112876,2209872,1375793338,36215376,1996423168,-25862,1599995904,-1034033781,-1957363710,183272428,243676927,97946,-62486272,1354771280,131482,127553536,-16777214,-1070859146]},{"sector":3,"data":[922701904,95948278,1278146304,565727246,15776256,-1415950254,-16777213,79232118,-1432727552,1342177282,176282,-96024832,-157220864,-1036805875,62505515,871944960,-1983763518,1183577670,1278146554,-1580692722,731450956,66638274,-28407352,16416387,1183531893,234267126,734147481,244162,-1036781357,244040235,-936702474,2130071099,-59310240,-624897,45678198,28856320,565727232,15776256,-308653998,-2097151997,-351996346,-59310144,-1946781953,1177288262,-1588576006,865668598,-1178457150,-120389629,-1037319629,244048081,-936702474,-96040111,1346953425,-1174396488,1347551472,186010,-96010496,100302467,1172898685,-59310081,188058,1575324416,-326412861,1443163267,16664263,-25263360,-2094042105,1946877566,-25263319,-2094828533,1946746494,-25263331,-1961397242,-422445450,-1962641665,503365252,-26032,-2071396352,1191120376,-25263106,-339575284,-27358449,279045073,-125335282,-28901619,419331715,-861803652,237544195,-1559359327,245566988,235447054,-1559361885,1996426756,53000196,1117409310,-1560281084,-1956772918,46292453,-326413056,1347469355,833616,239873783,1342180357,-150991688,1343092270,1342177976,1342180536,1342183608,1342178488,-1207926040,726663169,-1202696000,787939333,-11530676,-1207044554,-1202716667,-1202716671,-1202716667,-397410303,45613147,-1070903296,1354256464,-256356352,79187968,112742400,414732288,129519616,954748928]},{"sector":4,"data":[243712,1354771280,833616,171192055,-775804007,465064184,1546581760,-1037330159,-1202652975,-1202716668,-1202716663,726663204,82333888,1575324416,-326412861,-1207767933,1861681172,200410388,519980681,276234064,-15567105,1996426358,-26098,1586167808,105286654,-1962129527,1200162886,172395274,-1962391671,1200161862,1317771538,-1980106998,1183518791,-101213948,-1961994359,314727909,-326413056,-1207767933,1487077384,286434065,957056673,2114687494,302434080,-16773103,-1710361546,1517,1358841481,1347469355,1342181560,-352319304,193372455,194119225,113721469,1053016,234108671,193946,-28931840,1354771280,571472,1095760,-25755824,1347469355,1342179512,2144336,1375784122,-26032,1996423168,67214078,-443875328,-1957313699,49054700,1342179512,112720,-1363652528,-1706025472,222,1358841481,16777114,180134656,-1694599425,65535,-1017256565,1167087646,518818645,922736782,28840204,716722176,-1202708978,-1706033120,1674,286013183,1342177976,504030392,2144336,111188560,922681344,62394636,1186484224,-1202708980,-1706033120,1718,286013183,1342178488,504410808,2144336,114072144,922681344,95949068,-1162326016,-1202708981,-1706033120,1762,286013183,1342179000,504445112,2144336,116955728,922681344,129503500,414732288,-1202708975,-1706033120,65535,286013183,1342179512,504268984,2144336,119839312]},{"sector":5,"data":[922681344,163057932,-524791808,-1202708976,-1706033120,1850,286013183,1342180536,504214200,4241488,108304976,-310181888,535137026,516640093,1430622296,-1910575989,485262296,-1705983957,65535,199509641,-385649216,-1202716165,-1706033112,1915,-16021853,716760182,-1969598464,-1560281081,1996426130,571620,127507024,1990393856,-461963508,1342180024,16777114,209888000,-1192986881,-1706033148,1975,-15885661,112780406,1822052352,-1560281081,1996426670,102669028,1990262784,-1036805876,62505515,871944960,-1715328062,-2103357358,1347590412,527002,-431585024,199775881,-385647150,142540946,2013257533,8972547,-1727236447,-541568942,1389505535,137140816,1347551232,-1542401,966452854,-1560281080,-2103374730,1347590412,738189240,-1706011950,2126,1996443730,-428408856,547738,209888000,-1727161695,-541568942,1389505535,141597264,1347551232,-1542401,2107303542,-1560281080,-1365176934,1347590413,738189240,-1706011950,65535,1996443730,-428408856,16777114,229548800,-1532772309,228107021,112720,1354771280,19438160,-1163722752,309258,53713488,1789067264,67155976,112720,726683728,-1706012480,2261,-15957853,-1593018826,103484546,-1202713676,1347420161,1347469355,585370,243442432,228079359,228865791,1342177720,1354771280,104634960,-459079680,-1170308341,359923722,141180547,-2096204800,819262,1048774516,1962937986]},{"sector":6,"data":[-1170308253,158597130,179975935,601498,1782481664,158597128,141178623,605594,-2143386880,158597132,209729279,609690,-2109832448,158597134,243414783,413850,-465665280,158597131,199505663,597402,-1547687168,-2103243804,209756942,-1559729501,65735354,-2097151560,-443874579,-884122337,16973847,65640,196736,16711831,196625,16714077,196627,16713156,196635,16713751,196636,16713697,16973853,66343,16973853,66150,16973858,67094,16973859,66361,16973869,67768,16973872,67416,16973876,67141,16973884,67734,16973885,197771,16973997,196792,16973999,198414,16974000,67522,16973892,67496,16973904,65893,16973906,67746,16973911,197994,16973896,196622,1953300566,1167087646,518818645,-326903666,108461846,16777114,-330921728,768080,49781328,-1706033152,65535,-1192462593,1344146362,1452953630,1342177280,23706,-96040704,-1543743863,-1031074838,-15994717,951643254,508567057,-26032,-1706033152,65535,-1980086647,-358482858,-96061173,1183516278,199926778,957083809,108461126,-1543747957,62393328,-265357568,-1037330165,100792529,62393322,-265357568,-1036805877,45728299,871944960,29502402,-15994874,1996424822,-25876,113704960,1051350,243271367,280494104,922701824,922684294,-476443758,-1560281088]},{"sector":7,"data":[922684164,922685056,922684294,-6681710,-1560280833,-2136928046,193766158,-1559178591,-694088810,-754732790,239772640,-754252639,240428000,-787578719,1241908192,240952078,-1559178591,146280068,-1202696192,1347420161,1347469355,16777114,195994368,-16093464,-1207194058,1385758736,194951248,-6664162,-16776961,-1710510538,65535,-1207193437,787939331,243994240,-506393014,1183432963,282239478,244048081,-506393616,100909315,1183387220,200319476,-775804007,-1949791240,731510342,737726914,-368694335,208184075,737429131,722522630,-1559498746,129502316,-1248178176,-788529151,-163184160,1342179512,16777114,31510784,1996485702,-297366266,1996443670,-193527818,16777114,108461824,-1705983957,65535,503849656,132954192,-1070903266,1385185466,-163148976,-775804007,-296842248,-1957574613,731509830,-1946627646,-936644530,-159973551,-755969,-1070922122,204930896,-1706012655,617,1342535843,16777114,49120000,1562371467,182861,-2081649835,1924663532,-1202708984,1344146362,-1174404680,1347571712,208156415,208418559,199898879,200292095,1342469887,286013183,1347469355,174490,91923200,503871928,288929872,-1070903266,1380974778,208183632,199886339,200279555,1815543632,-365494516,-264831221,74907403,1342177976,286013183,1347469355,16777114,92054272,-1929087233,1343682630,16777114,-129594624,-1711520253,-120470997,-96040112,-1711389181,-120470997]},{"sector":8,"data":[-26032,-443875328,180829,-2081649835,922684652,-6681682,-1996488449,79232582,-6664192,-1996488449,-1070859706,2005584,1183383552,-196687880,1187446784,-16776964,1996424310,-193527810,-1694730497,65535,91537931,-336050549,-96040189,59415120,1996423168,-196703484,181808887,193725955,-62485680,184823543,194381315,181838160,77680712,-1202698229,-256245727,-1706012160,941,-2080618753,2080963710,-196673630,150240899,1996461180,-25858,1996423168,-1338573052,62429707,1183383552,74907638,240924415,243545855,239744767,240400127,-1174396488,1347551472,16777114,74907392,-1695123713,36,-1593542913,1212681100,194421072,-1706014648,1092,-1593542913,1212681100,184852816,-523041871,194381315,67410512,1996423168,181838084,-523041871,193725955,184852816,100917459,-1706030186,1054,-1593542913,61934294,100917459,-1588589684,1212681110,70425168,1996423168,193765636,-1588574136,1212681110,72981072,1996423168,240951556,-2069802936,-1706014706,65535,-1593542913,1346899548,51283105,1343116294,291226,74907392,51272865,1343113734,51283105,1343116294,296602,74907392,51272865,1343113734,1208911009,77109840,1996423168,240951556,-2069802936,-1706014706,65535,-1034033781,-1957363708,49054700,1023952523,276038144,1946288445,33701230,-1209465995,13363456,141442691,-385646848,1048772801,1962937318,12052739]},{"sector":9,"data":[-16353537,-2115500938,1975520006,11004163,-16353537,401081462,1975520005,112645,-1070923029,240518707,-1964440715,175570688,346778,-28931840,108461904,-402360577,1996424500,-25755894,352922,-2090276096,552510,1996440693,74907398,-1559876632,-1073017882,1996434548,74907398,-1559969304,1996426838,1153546,1183383552,1996443902,74907398,-16453656,1996425846,11705086,1996423168,-26102,117374976,401279086,141442691,-15696384,-2096599538,552510,-6683275,-1962934017,146955749,-326413056,-955585405,64582,16402119,-163148544,-6664170,-16776961,1183648374,-1706027274,65535,1023952523,57999373,1979749865,25815299,1946159421,10348821,425603,-1796668547,175570688,-385875272,2122514562,58523654,-1711242519,1538,92014139,922684277,-6683272,-352321281,102341228,104529920,108332410,92026623,922740971,-487914118,412570,2013674240,-2094566139,2097153662,1443284749,-956301307,33749574,1048786923,1962935638,1443284784,-956301051,33684038,-6675477,989855999,1946515974,-8853245,425603,1996427132,112650,31844432,33310407,-92372224,-15830016,1996425846,-163148294,568872982,-92371970,-385649664,2122514666,57934076,-1207901719,-571932671,108954368,-1949402112,624756806,1026585600,208928806,1946167101,2637102,116070772,688587937,-1935542202,-163170037,263725437,-701565184,-1590957302,1174473476]},{"sector":10,"data":[-1578636296,1177094870,-1579160586,1174473430,-1579684874,61934294,100917459,1178274700,-1592819722,731450070,66638274,-1995731962,-1767770554,-129615605,263719293,70186752,-1592530165,61934340,100917459,1178274710,-1592819720,731450116,66638274,-1995729402,1996486726,-163148534,949637142,-16777208,1996486262,138648312,485031936,1785343,2011759477,2113022,-1209465995,2440702,82379635,2637311,686359415,-17176065,-443826133,574045,-2081649835,330826988,-1483059200,184549377,-385649472,2122514613,91555588,-352321096,1354771202,16777114,75399936,-385649657,1183645849,-1706027268,1447,-1928956161,1343683654,373914,181838080,-775804007,-1945762824,-62506229,263732095,-701565184,-1037330166,100923601,1178274700,-1591313156,731450116,66638274,990615046,360709702,-150990920,-1727331282,-120470997,194381315,2113816123,181838134,-775804007,-1945762824,-62486261,-1727331167,-120470997,194381315,-113015,1183647350,-1706027268,65535,-231681,-694485386,-1962934270,79846885,-326413056,-1962087293,20776006,1023964160,1148452866,-1593801495,1183385706,196125176,-1962382685,-1331431354,54716427,-1710852353,2216,1358579337,329114,-62486272,1358591743,1342178232,16777114,-92864768,-1694730497,1309,-1710852353,65535,1358579337,1342177720,120986,-92864768,140698,108461824,16777114,-1372127488,148347403,922681344]},{"sector":11,"data":[-6681680,-956301057,358918,2080818944,-1962934267,79846885,-1873273344,-326412987,-2082959842,-1070913812,-1979955575,1183578694,539916,-991362186,474368,-2098658446,81152,104663668,-385649408,1475018898,-401705217,1183578378,-61436934,-16726295,1996426870,105286924,1642614806,-1577989,1183649398,-1706027302,65535,-15829249,-2014782858,242679801,383403661,-26032,-1024786432,-15829249,1996425846,108461832,201071336,-5278528,1996426870,175570700,-16222465,-6683018,-1996488449,1451883078,-7083012,1996426870,-35854324,2122549483,-2106261496,-15829249,-1662514570,-8984066,687747,1843987317,142509055,-385649664,1996488548,100375054,1508442112,16858623,4001655,1032680193,57999375,-335585047,17907094,4044916,1032614402,58130946,-335594263,49120130,1562371467,707149,-2081649835,1589904620,126559748,193725995,-703689831,-1980106998,-1960379322,103481927,-1952904298,-150273010,-28931591,-472786805,194938763,-1325399622,-61986297,-1037835565,-1034033781,-1957363708,149717996,637820612,103483275,-1952904308,-150284786,-129594887,38243110,194381355,68062105,-1980106997,1048837190,1946160726,-774337770,112867,1311377329,-136260616,-1635311152,-1961628917,-472777634,-1325399624,-129095161,-2029395757,922684318,280497070,1347590400,504078008,21207632,922681344,-828765264,-16777208,-1710510538,332,-16011101,1048774774]},{"sector":12,"data":[1946160726,309253,-1070923029,50502224,-1706033152,2854,-1962379521,788002886,100862678,-1957688436,788003910,100862724,-1588589674,1346898646,1208681633,2209872,1375793338,189373008,1996423168,-1338573048,190093835,1183383552,142016506,240924415,243545855,239744767,240400127,-1174396488,1347551472,222362,142016256,-1694861569,818,-1034033781,-1957363706,73319660,638291105,763103033,-1324689759,65065731,638290950,494798651,638293665,2080524089,184852756,100917459,958794646,92078663,-352321096,-1950340350,79846885,-326413056,1342938808,-1324597087,98620164,-397410088,-443875299,-1957313699,205562348,-523041615,1342232581,1342938808,-1962933016,1438866917,-326898549,1187468802,-1962934018,1182991966,1988821510,71729924,-1996190974,-28901625,150896259,-1956715140,79846885,16973862,199051,16973931,65743,196736,16714431,196627,16712427,196635,16713877,16973855,66534,16973843,66508,16973844,68378,16973853,198580,16973841,197994,16973842,198023,16973843,199114,16973846,198124,16973847,198463,16973852,68328,16973869,198593,16973853,197305,16973856,65833,16973872,198837,16973858,198988,16973863,199010,16973864,197148,16973865,68296,16973884,198780,16973870,198535,16974003,66430,16973892]},{"sector":13,"data":[198853,16973877,198845,16973883,198789,16973890,66336,16973907,198816,16973892,198474,16973894,68322,16973911,198561,16973895,65593,16973915,131123,16973914,68278,196714,16712141,1953300609,1167087646,518818645,1996478606,-26106,-1706033152,63,-2096502109,-443874579,-900899553,1478361090,-1957345904,-661774612,166346371,-15961088,922682998,-1885730326,-2097152000,-443874579,-900899553,1478361090,-1957345904,-661774612,-16061309,-6683018,-1996488449,1451882566,1946561530,-163149556,103531147,1183386750,108462076,1358329599,16777114,108461824,16777114,-1281732608,-1560281088,-310179352,535137026,46812509,-1873273344,-326412987,-2585058,922682998,-107345432,1342177280,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,1354771206,16777114,-96040704,242597899,504021688,112720,-26032,1996423168,108462074,154522,-96040192,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,92421763,-2093383936,361022,-6681987,-1879047937,11397134,1342177976,-1560215368,-523172480,1385816273,-26032,2124611584,1958742789,1156272131,92276423,1223360512,956661921,2080735750,2117533503,32283141,922681344,109053310,-1593768575,-523172480,1385816273,178256,-26032,-1073020928,780207733,16778624,92157695,16777114,286565120,286660233]},{"sector":14,"data":[956661921,2097512966,92447017,-523116335,286524931,286660235,-1980086647,1589967958,138841082,-1962440410,-1993996730,117375559,-310180478,535137026,80366941,-1873273344,-326412987,-2585058,-1710916042,65535,92157695,16777114,2114373376,721420293,286696384,-1559161693,-2103245440,49120005,1562371467,1478413133,-1957345904,-661774612,286531268,641204006,-1878886401,-19142642,-1962742397,1297948645,-1873273141,-326412987,-2082959842,1048773868,2114061698,108461898,1342179512,16777114,2107265024,-1996488702,1996487750,372702982,339148561,-2110324975,-26107,1996423168,-59310330,16777114,108461824,286668543,286537471,92419839,225434,-2094077184,361022,1996433278,337560582,2013210129,2013210116,-26106,1996423168,337560582,939468305,41418534,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,108461828,468192912,108462077,1642598032,-401698563,1996488484,-26106,1183383552,1095932,-26032,-1073020928,1996426365,112646,53123664,1996423168,-401698810,244383515,-83224,1996424822,-25860,1996423168,-401698810,1996488043,-401698810,-310117144,535137026,46812509,-1873273344,-326412987,-2585058,244319862,-1862490648,-21567474,-16353537,-15657418,-15657930,-1710915018,65535,1692929680,108462078,-1511518576,49120252,1562371467,182861,1167087646,518818645,-326903666,-950642930,62022]},{"sector":15,"data":[-1962385781,120259655,-1946532215,1194001991,-129595134,-1957670247,1385762374,64461392,-930414592,-1946532213,1347590618,-1727248757,-242528174,-6620277,989855999,2131459287,1992702724,112645,-1070923029,-939768183,128070,-16725271,1586169462,50825992,-1957686714,1174602311,244338704,-2097087256,1946221694,108461838,-15829249,244321398,-16708632,1183052358,1182991366,1586168840,71797512,1183385387,105352186,-1996339413,1385822278,239504208,-1706012007,1125,1183565963,-1713730566,1183535186,1347590412,-74714741,457626,2094480128,990150411,-1207601466,48955393,1183432747,-62485514,1962296883,108461875,-1962385781,306578183,38243152,1343243779,1860701840,-58817792,-15830016,1996424822,209125134,2112360080,-230228224,67520131,-1980348789,1191181382,172395508,2113160761,-13899517,-1962510593,126552158,1343374851,50481035,-1873801146,2615310,16547459,1996426868,242679558,-1878231297,3598350,-1947056385,1600057926,-1962742397,1297948645,503320266,1430622296,-1910575989,173968344,-1995946357,105286407,-2097002615,-443874579,-900899553,1478361094,-1957345904,-661774612,-1962254709,117508166,17188491,-310181305,535137026,113921373,-1873273344,-326412987,-2082959842,1996444396,571406,39164496,-1706033152,20,-1928431873,1343663686,-15960321,1183517302,205925128,105286480,1342850603,204086923,-1207966767,-6683260,1342177535,1353598605]},{"sector":16,"data":[-404222320,1922715901,-2097151998,-443874579,-900899553,1478361098,-1957345904,-661774612,1443687555,957056673,2114687494,194158858,-2045867111,-1593251061,-1952904314,-150236658,-96040455,16008903,-129579264,213385216,-194054400,1586229387,-1948003848,-1995984768,1187509830,-352321284,193372456,194119225,1183517822,-161575942,126431223,1183517931,-161575942,-1996328969,1182990919,1191118070,-128021508,1183572945,-2071512580,-3506427,2122577990,-1501821192,-2081143041,2080699518,-310157672,535137026,516640093,1430622296,-1910575989,82609112,108432214,1309308459,2114977411,1030149,-963968277,-1946401143,1177225286,-1037330164,-259262255,-59360946,1183516029,-1962742788,-62486074,92127243,16533191,242679552,-15960321,1996425846,108461832,-771996021,1996443872,-25860,-2090991616,-443874579,-900899553,1478361098,-1957345904,-661774612,1460857987,142508886,-2096204544,1962935934,-129579256,-1494679552,105286400,-1722789223,295325778,-1962934265,138841032,1385814667,1347590480,-74714741,476570,331744000,-196703785,-940157303,64582,-375097,-129579137,1187463167,-1962934034,1178201670,-1956875016,1385822278,1347590480,245402,-263812864,-1947052407,1452012614,-229230090,92016511,1945126457,-129594616,-335788407,-196703464,972445323,595391062,1178142079,-1961068816,1183447110,-129594374,-1947318647,1174666310,-2131176966,1183416292,-1952650248,1600059462,-1962742397]},{"sector":17,"data":[1297948645,503317706,1430622296,-1910575989,82609112,-1995684213,922745926,1996427532,-11526648,194644598,16777224,2122517574,997457926,504120971,105286480,-6664162,-1962934017,1344144966,16777114,205914368,722224779,1177156678,204930826,138840849,1183535168,-11526644,-6681994,-1962934017,-310117306,535137026,147475805,-1873273344,-326412987,-2082959842,1183517932,239483146,-2115435659,-196704000,1183432747,-62486022,1996451051,-92864752,-1202667477,-11534335,1996425334,-59310320,-1202667477,-860225504,-13833472,1996427382,1354771450,1342177720,-16222465,1996427382,1354771452,1946568249,13023240,-352286534,8828934,1375792826,153000528,1183514624,-196728562,-2080618753,2130769022,172395454,-768511,1183578694,-96061170,1183550588,205928712,-2115435659,-196704000,1183432747,-129594890,1996451051,1354771216,-624897,28839542,1996443648,1354771216,-1191676161,-860225504,-13833472,-1070919562,-159973552,-1207011585,-11534335,-1070919562,-126419120,1946568249,13023240,-352286534,8828934,1375792826,-26032,1183514624,-196728564,-2080880897,2130769022,138841022,-768511,1183577670,-163170036,-310145924,535137026,214584669,-1873273344,-326412987,-2082959842,1946158718,108461832,16777114,49120000,1562371467,503499341,33620736,1778385667,302056192,33554691,1275069184,486604548,-1056898304,318767362,-1375665408,335544578,-2130640128,-1811939072]}],[{"sector":1,"data":[-1191116032,-1778384640,1107362560,251658753,-2113862912,268435969,-184483072,285213185,-1795095808,301990401,1711342336,318767617,-1107229952,469762310,-1845427456,570425608,-1493105920,603980037,-1862204672,620757250,1812005632,754974981,-654245120,872415488,654312192,1241579265,-301923584,939524608,-956235008,-1342176505,1627456256,1157628169,-167705856,1275068674,1593901824,1325400320,1711342336,1459618053,-553581824,1476395527,-385809664,1509949959,-1996487936,2113994496,234881792,2130771712,-1761606912,-2147418363,1937009920,-1192457387,-11533234,-6683530,-1962934017,46292453,-326413056,-1962480509,100861510,104533108,226429934,50611851,990674438,2114741766,-2110324910,31562254,1183383552,1183535356,1946551046,-301581556,-1593016821,1177226222,1946561286,721611532,1183535296,2114323204,1711684364,-1593016820,1177226342,2114333444,721611532,-6664000,-16776961,463142006,-2097151998,539198,1419844213,-96040699,89392839,1996423169,-26104,1183514624,89433082,-16222465,1996424822,977175300,92209160,-352321096,1354771202,16777114,1575324416,1426065090,-326898549,-11118840,-6681994,-1711275777,348,201213577,-385649216,20775231,-385649408,121438411,-1962249216,-1846824,-351405897,1849590606,1132331016,63583999,86170,175570688,184986,-129595136,440400,-26032,1996423168,2050424824,2083979020,2050424588,2083979020,-26100]},{"sector":2,"data":[1996423168,-126419190,193434,-16127232,-1710356938,531,141573763,-1706134528,835,1946158397,179780,141561482,1988749011,-1715041284,-120470997,1589966987,126559748,208930307,-140916989,737081342,638350342,-1960441975,100860487,-956101506,-134285415,2114333678,1200170508,73319426,4162342,-1578564740,130491904,-1461125120,1748927232,1584660485,504211128,73319504,41418534,-1707606234,576,1182056459,210646783,209306,-96040704,73319504,721914662,1074636294,1200301648,-1475990782,-1706016755,65535,108315147,237516543,922682603,-6681094,-16776961,1771764342,-385875965,922746674,652807674,1681818623,527695877,504211128,73319504,41418534,-1707606234,65535,125091851,237516543,-65303,-384960458,1589968633,228106500,2080848166,-1993979900,73319431,41911078,638090496,149447,-1005458688,-1532951458,1194927629,1208318978,38242598,1023952523,410255872,1963065661,15984899,1963065917,28305667,1946288957,44099925,141442691,-385646848,2057372310,291676940,-1559462751,1589907812,126559748,638352035,-1560131701,1996426364,54237706,1183383552,175570936,1354771280,-27358384,-472783919,56532991,-16091393,1989867638,-385875965,1048773198,2130707842,38070531,-1559463263,2090930530,291808012,637820612,2057504651,1200301580,209494786,16777114,89432832,192200715,243414783,16777114,-16192768,-6681994]},{"sector":3,"data":[-1996488449,-6621114,1023410431,175374358,-1694992641,65535,1996425451,-25864,1048772608,1946158420,-126419190,16777114,-15996160,1996425846,-25864,1996423168,-26102,113704960,1364,-2097037847,552510,-1276574860,73319424,-1559786714,2057507170,199271180,38243110,-1559141213,-492630916,52533771,1419968512,-1036090619,141819907,-1710590209,65535,90455683,-2094566144,354366,1048780917,2130708618,65575449,389873664,-1710263296,220,1946162749,-26107,1996423168,77568522,1183383552,175570936,112720,1354771280,-771858805,-1846813,-16556385,1996425846,84515576,-6684672,989855999,141822534,-1710590209,65535,-1710590209,65535,67010179,113706612,66898,141428479,-2097088023,552510,-269941889,1846476544,1849590536,57933832,-1593777687,1654852730,209494289,-1005493085,-1960442786,209363719,38243110,-2096333661,1946222206,-25263342,-2096335871,1946680958,-25263354,-14453501,-728102282,-1996488700,1996486726,-1070903286,112720,-27358384,-472783919,56532991,1048790251,1946158420,-2110324981,112105998,149618688,-1710590209,1378,-506231,726665846,28856512,1586188288,-773598722,1587544035,1413382915,175374341,-1694992641,1754,1996426219,-126419190,365210,1681818368,695533573,90717827,-2094893824,559678,1048779647,2130707842,-25263340,-2096204793,1946418814,175570696,229018]},{"sector":4,"data":[1409730304,-1711276027,65535,134119043,1048791157,2113931374,-902365375,17668611,1996423168,95525386,1183383552,112742648,580538368,-16777215,922744950,922684538,922684540,922684538,983174268,-16777215,1996425846,97950456,1599995904,-1034033781,-1957363704,49054700,1048786155,1946158018,142016301,71066,-28931840,1342732031,1342177720,369510029,-26032,1187446784,-16777212,1996425334,21338878,1325334528,75399940,-1950122752,113401317,-326413056,-2096829309,1963394174,108461834,16777114,-15865088,-6683018,-1711275777,65535,1342182328,16777114,1975520000,75400058,-1207601913,48955393,-1705983957,65535,117735043,1183670645,-1706027268,65535,-1928956161,1343683654,16777114,-58817792,-1592361984,1178144152,-2096202244,2080439934,228892936,2097038905,228106542,-775804007,-62486024,-1727159135,-120470997,-113015,1183647350,-1706027268,65535,-231681,-6619530,-1962934017,79846885,-326413056,-2096698237,539198,266929022,-2110324991,117217806,1183383552,74907642,1347469355,228079359,228865791,1358591743,2144336,1375784122,119904848,1996423168,120429306,1048772608,1946158018,108461835,-1710983425,65535,90455683,-12291072,-1710137290,58,-375159,922682486,922684838,922684840,922684342,-1202713672,1347420161,-1174396744,1347551436,16777114,-92864768,33690,74907392,16777114,-2088899840]},{"sector":5,"data":[354366,922711668,-895873906,-1996488700,1996487238,-1506345212,-1472790771,-1237909747,-1204355317,28856331,-1202696192,582615846,-1706012160,1956,-362753,-1710137290,65535,-16484609,-15882698,-15882186,-16009674,-16009162,28899958,-1202696192,-289800058,-1706012160,1746,-1694861569,1276,-1710983425,65535,-1034033781,-1957363708,418153452,957395105,208930886,89917127,1183514625,280011528,16008903,-398029568,949637142,-16777210,1183648374,-1706027288,1605,1023952523,57999373,1979750633,54520067,1962936637,48425219,1048788459,1946158018,1514046215,796131333,63061635,-16223232,-1332082058,-2097151992,2097153662,1443284804,-956301307,350726,-1740733696,125042701,228867715,-2094828288,1946219646,175570702,-1913358593,1343678534,-2080871192,1946219646,49735939,-385875528,1187447538,-352189708,1446937558,-814415867,89523911,1048772609,1946160536,-1539406910,-1150025715,32786119,-2085295358,246334,1048774516,1946158426,-1036090458,141819907,-1710590209,964,425603,113707133,1368,1048807915,1962935640,1476839298,-956301051,350726,1849590528,58589192,-2080412439,890942,1659437941,-1539406849,57999373,-1694541591,2818,1946157885,277838,87892596,-15567872,62392950,1183666178,-397404440,854194101,175570943,16777114,-14161664,138034819,-16026368,-6681994,-385875713,1048837909,2080376890]},{"sector":6,"data":[-15996669,-1710590209,65535,-2080440087,539198,1048833652,2130708538,-17831677,2122567147,58523654,-1207861527,-1706033136,2425,276676619,1342181816,724634,2109737728,10676483,89786055,1048772609,1962937752,-21501693,228867715,-385649408,1183579821,2440456,641544308,1024226304,779354151,1946167357,-1593382119,1177093468,1543962602,-394362107,-954237696,59462,1554064619,-364510971,1554114539,-398055163,1554112491,-398065403,-1734223893,-398051059,-1991768964,2122573894,125632746,15353543,-1592988928,1178144164,1208253674,-1423735,1183648374,-1706027288,1668,-1542401,-1885672842,-385875962,1048837669,2113931374,-31725309,-219003193,201498891,-1577171319,1183386624,201105910,-1578350967,1183386618,138841080,1946166589,2506084,658312308,1030517760,1131675688,1325338859,-159480842,-1962443520,-1991706554,1183577670,-126945282,-1980348925,1996484678,-26102,-11534336,-6623114,-2097151745,890942,-1360460939,-1539406851,963969037,-154391,1183577670,-163169800,1187497084,-352321290,-28377155,16678531,1183560829,1183402220,-5510146,1183579718,-28952084,1187487868,-352321282,-196687975,1726546432,1543948285,-385875707,1048837469,2113931374,-44832509,425603,1256784765,64920317,1183383552,1095932,-26032,-1073020928,1191121020,-58817540,-954893288,64582,1325338347,-58817540,-955941632,1571910,-1710590209,2694]},{"sector":7,"data":[-59310256,1040141289,57999392,1039975401,57868325,1039988969,58130472,-369228823,-1070859027,-1034033781,1478361096,-1957345904,-661774612,723971203,-62486080,-1946532215,138218566,-385649152,121438384,-385650176,20775068,1023898624,292814853,1996452843,-194975730,-1946532213,-1293288362,242679552,-16353537,1625819254,-1446924,1183649398,-1706027302,65535,-15829249,-857154954,242679802,383403661,-26032,-991232000,-15829249,1183648886,-397404666,-1259604767,-15829249,1996425846,-106502138,1996465899,175570702,-16222465,-1243085194,1958743035,242679699,-15960321,1996425846,108461832,16777114,-96040704,-369338743,1996488566,209125134,-369510680,20840298,1024423681,-1166868224,1962938173,-9443069,37602283,1033729025,-1183710720,1979843389,-2085426301,-443874579,-900899553,50344202,50949121,50358784,51125505,50359040,17133313,50332672,-16300288,50338560,50386689,50363392,-16736768,50341376,-16190464,50343680,-16085248,50343936,50848513,50336000,17264641,50340352,50608129,50336256,50676737,50336512,-16385792,50345472,50606081,50337280,-16323584,50345728,50602753,50337536,50992129,50338816,50851841,50339072,17267713,50343168,-16434944,50348288,-16557568,50348544,-16560128,50348800,-16414976,50349056,50726913,50373632,-16727808,50349312,-16745728,50349568,50725633]},{"sector":8,"data":[50374144,-16774400,50349824,51101697,50341632,-16304896,50350080,51107329,50341888,-16398848,50350336,-16518656,50350592,-16242944,50350848,-16169984,50351104,-16175360,50351360,51066881,50343424,-16179968,50351616,-16272384,50351872,50729217,50377472,17280001,50349056,50573825,50344960,50592257,50348544,16908289,50352896,50601473,50349056,50682369,50349312,50994945,50349568,50735105,50349824,50451457,1828736000,1167087646,518818645,-6629234,-1207959297,1344145450,503833272,-1161811120,1347571712,922701904,922684824,1996426660,922701830,1347424524,16777114,91267840,24943184,-310181888,535137026,46812509,-1873273344,-326412987,-2082959842,1448543468,243414783,16777114,-62486272,166082303,165951231,-1728052552,-1449504686,-1962934272,285516232,165152299,1385814667,-499712176,-533266679,-1947104503,14588667,-972881920,1347606291,166082303,165951231,49050,208970496,166082303,165951231,-1728052552,-241545134,-1962934272,285647304,165283371,1385814667,-499712176,-533266679,-1947104503,-25861,-972881920,1347606291,166082303,165951231,16777114,209625856,208944771,-955745024,816134,-1592268032,100863092,104533400,175901678,722202273,-1559390202,1048775796,2097155198,2114373384,-352321524,209625367,228853251,208012859,1721830012,-1543099636,209625869,737965823,-11513664]},{"sector":9,"data":[-15886282,-15883210,-15961034,-1710457290,65535,-1694730497,65535,91240191,16777114,1879492352,-16777211,-1710918602,65535,16777114,-2090902016,-443874579,-900899553,1478361090,-1957345904,-661774612,723971203,-62486080,-1946532215,138218566,-385649152,121438347,1031500544,1517617157,-16353537,48760950,-96040184,-369338741,1996423306,-632910578,-6664170,-16776961,1996426870,78440666,-1928431873,1343674950,16777114,-2954496,1996426870,105286924,1659392022,-4003072,1996426870,142016266,-402229505,-1073020526,1996468084,209125134,-16091393,1996425334,-26106,1183383552,-61437446,1996461035,209125134,-352098584,998792,4033652,1037005313,-1217003263,1912733757,33701317,-1091854986,-1962742397,1297948645,1426066122,-326898549,209363206,-1592696157,1688407164,73319441,-1559786714,-1960440710,2091057735,138840844,1946288189,33635603,-907476107,33701120,-353827979,16705792,141442691,-385646848,1996423412,-26102,1183383552,-2031595266,209363203,291636779,-1577433463,103484540,1183388004,-96039940,285738499,165154443,165416451,226279739,722065569,51447814,-351675386,-96040172,285476355,165152315,-660534659,67513097,-96040687,66864779,-1961817594,50977294,990502414,-1592951615,103483866,100864266,350947806,66864779,990971398,2097797638,165323018,285607467,-1191426423,1344147716,-362753,-6620042,-16776961]},{"sector":10,"data":[-286720394,175570690,-1694599425,65535,1996439787,-26102,1048772608,1962936430,175570708,16777114,209363200,-1593057117,-492630916,1845952267,-2095584504,552510,251596926,1048774766,1962936430,-26107,-443875328,574045,-2081649835,-1331623188,138819856,113708148,66908,-1559738741,1187451056,-956301060,64070,385238669,97950288,1996423168,-163148534,-476426218,-1962934267,222103622,1986425856,26405123,1962936637,19261699,2122524139,226295814,89523911,1187446784,-352189702,1446937362,192217093,89523911,1187446785,-1962802694,-1331492794,-92372208,-15830016,1996425846,-163148294,786976790,-92371970,-385649664,2122514779,57934076,-1207872791,1323892737,108954369,-955745024,350214,-2084508928,350270,1187494261,-956300804,17127430,1849590528,-1484849144,91502335,16777114,-2086868224,2097153662,8972547,1023952523,812908581,1946166845,2571532,675098228,-350653440,89956614,-506327,-2096800762,2097215102,-163133665,619380736,17128609,-403965882,688217249,-538184122,17128609,-672401850,957192353,75298374,-163149496,16285315,1187448701,-352321288,228892940,2096645689,1183401988,175570936,385238669,103455312,1996423168,-126418954,406938,-15996672,89917127,48824321,1849590783,58589192,-2080442135,2097153662,-17831677,16777114,-28931840,1342181560,16777114,2092960512,-28901616,419331715,1187452284]},{"sector":11,"data":[-352321282,-28377330,16678531,1187448189,-16771074,1771702902,1342177285,16777114,1996443648,-25858,1187446784,-385744646,540933789,-385649408,624819824,-385649920,675151501,-385648896,-2098594071,-1950340098,146955749,-326413056,-1207636861,-1706033133,65535,57982987,-2097118487,1963394174,112645,-1070923029,-26032,2122514432,1769277188,385631885,-26032,1996423168,-62485242,-6664170,-2097151745,2080439422,228106518,2113685049,-25263346,-1593279488,1178144164,-1590264578,100864260,731451656,-1980182078,111279174,168166161,-1037330159,1183447249,108462078,385631885,-26032,1996423168,-25755652,16777114,1575324416,1426064578,1996483723,702468,-26032,1996423168,505860,107518544,-1706033152,1646,-1207666945,-1706033147,1708,112368208,1996423168,70713092,104267537,137821969,171376401,-26095,-443875328,180829,-2081649835,1448551660,63452927,16777114,-28931840,-1207666945,-1706033149,65535,-26032,1996423168,1354771204,-1741226160,-1539899635,2209805,1375793338,-26032,-291438592,460043,734147481,244162,-1036781357,1183433259,-498677776,1721827344,-1036805876,79282731,871944960,-339596350,-360807628,-2096729088,1962997374,-360807576,-16223232,-1785009546,-2097151993,1946220158,-159973624,500634,-498663680,-1727240543,-136163701,-431584775,1342177976,-1712306549,1183535186,1347590630,530074]},{"sector":12,"data":[-1706012160,65535,-1423735,-15995338,28894838,726683648,-1706012480,65535,-2081012087,1962993278,-427916404,-15698944,-6624650,-1996488449,1451881030,-2093618188,1946217086,-361300216,632218,-159481088,-15830016,-1382353290,-1593835511,1183386752,-364460042,-1766326272,-230258420,-940286324,124486,-1695123713,97,-940816759,2160710,16402119,-62470400,-1545011200,-62485759,1004946947,2114741766,208052489,-1979955669,-6625722,-1996488449,-11475898,1996487286,1354771448,16777114,-263812352,-1957670247,1385817670,137796176,1174470656,-95022600,-1804545,1996485750,-263812110,-1957670247,1385817670,140024400,-1706033152,65535,-1696303361,65535,-1946781953,1385820230,-431584432,-1706012007,2195,1996443730,-227082252,16777114,-499712256,-533266679,178185,-1706012007,2214,1183565963,-1713730564,922701906,922683878,-242546204,-593822837,50331656,1389827014,-499712176,-533266679,146577929,922681344,922683874,45681120,1406872320,-1695511727,2289,1183565963,-431619076,1385814667,-432603312,-466157815,-598832887,-1696702839,2371,333202947,1347608150,165820159,165689087,600218,-1983501568,1996482630,-600375316,922701833,1996426222,112870,-26032,1996423168,-667484412,-499712247,-533266679,178185,-1706012007,2390,1183565963,-1713730564,922701906,922683878,-242546204,211483531,50331658,1389827014]},{"sector":13,"data":[-499712176,-533266679,166828553,100859904,-11531814,-16131018,1996482678,1354771436,2144336,1375784122,-26032,1183514624,-62520858,957114017,58588230,-109847,1687874678,-2097151999,1946217086,-361300200,16777114,-361300224,16777114,-159973632,16777114,74907392,-227096,-1650786698,1577058310,1575324511,1426064578,1448602763,-1727271263,-1995841373,-1962286570,-1550252474,378079716,922683878,922683874,45615584,1347590400,663450,-1580692736,-628421530,-11513191,-16128458,-1962286026,-1694790671,2648,-686569981,922701906,922683874,1033505248,989855754,1635714118,-1559869813,922683868,922683874,45615584,1347590400,682906,-1580692736,-628421530,-11513191,-16128458,-1962286026,-1694790671,150,-686569981,922701906,922683874,2006583776,-1560281088,113707486,2520,721700491,-1727406586,-120470997,-351675741,208052597,165716889,165811849,-1727773045,-1995840349,-16128490,-16129482,-1207312330,1385758722,182229584,-930414592,-1962152287,1347590618,166082303,165951231,-74714741,731290,331744000,-11513129,-16129482,-1710628810,2829,-1962287965,-559741882,105286409,165414443,-775804007,165192696,165283527,922681344,922683874,45615584,1347590400,736154,-1580692736,-628421516,-11513191,-16128458,-1962286026,-1694790671,2928,-686569981,922701906,922683874,1436158432,50331659,-1559635962,922685700,922683874]},{"sector":14,"data":[45615584,1347590400,754586,-1580692736,-628421506,-11513191,-16128458,-1962286026,-1694790671,3000,-686569981,922701906,922683874,-1650849312,50331659,-1559635450,922685702,922683874,45615584,1347590400,773018,-1580692736,-628421224,-11513191,-16128458,-1962286026,-1694790671,3072,-686569981,922701906,922683874,-442889760,50331659,-1559165946,922685704,922683874,45615584,1347590400,791450,-1580692736,-628421212,-11513191,-16128458,-1962286026,-1694790671,1865,-686569981,922701906,922683874,2023360992,50331656,-1559165434,1600000266,-1034033781,50344196,50673921,50358784,50472449,50359040,-16308992,50336512,17189377,50332672,-16268288,50338560,-16077312,50338816,50553345,50363392,-16070400,50339072,-16774400,50341120,34033665,50335488,34019073,50336000,34045697,50336256,17204737,50338560,34184449,50336512,-16235520,50342656,17223169,50339072,-16438016,50343680,-16420352,50343936,50580993,50336000,50557185,50336256,17397249,50340352,50567681,50336512,50347521,50337280,50658817,50338816,17193985,50343168,50584321,50339072,17262593,50343936,50452225,50341632,50457857,50341888,50345217,50342144,-16678656,50350592,-16484096,50351360,50684673,50343424,-16237568,50352640,50703361,50377472,-16251648,50352896,17403649]},{"sector":15,"data":[50349056,-16256256,50353152,50425089,50345216,50507265,50348544,50550785,50349056,50969345,50349312,50661633,50349568,17192449,50353920,50710017,50349824,50546433,50351360,-16688128,50360320,-16183808,50360576,17327361,1828743680,1167087646,518818645,-326903666,1916206854,-26107,113704960,1394,91502335,91290,285516032,209323521,17893025,-1593017338,100733188,111219042,1678115089,285516049,199230977,17893025,-2096373242,-443874579,-900899553,1478361092,-1957345904,-661774612,1443163267,-1962116447,-1324509162,737858308,285516738,-1962115935,-754080746,-1547555846,915083526,-964489832,-754732793,285516286,144950787,228892945,-754972923,101057528,285909777,285490819,-955482880,1115142,137791744,-1592071407,104402328,293474568,-1961817949,130188240,-86834255,77840939,104760081,360513553,285607623,-1532952576,460045,-120388687,-351204701,228892954,285869625,178459006,-2083484911,61933506,-1037305133,-1592719709,103354628,111217786,2080778513,285516044,291636777,688981665,-1592695802,103354628,111217632,-502912751,137541643,-491237346,726670855,1342225088,1347440722,228079359,228865791,1342732031,286013183,-6664112,-1560280833,-1706031758,65535,49120094,1562371467,313933,1458342741,-2096728437,61933510,77725395,-1547304175,1183518984,460036,100923603,178458886,285778193]},{"sector":16,"data":[2131117625,105286411,722536611,285516742,957418145,343868486,-1560000885,-796192502,-1324891517,737858307,285647810,1575324510,1426065090,-326898549,-11118844,-1710325194,65535,-1946270071,722537014,-1961818570,722536510,-15662018,-1070922634,-947171248,-523041871,-741962928,1996443872,70713342,104267537,-1202301167,-860225504,-1706012160,65535,721712895,-1588571968,103485704,-1588588284,103485706,-11529978,922746486,922685700,548933894,13416960,-6664110,-16776961,129500278,-6664192,1342177535,16777114,74907392,-1588543445,117771684,-754732800,-1499836168,-16777214,-1734278026,460045,-120388687,-1532932032,460045,-1705969453,65535,-1593542913,117771672,-754732800,-1070903048,-26032,1996423168,228106500,-1325398267,1358484227,84780193,-120389625,-1868935104,-16777214,1570438774,1577058307,1575324511,1426064578,-326898549,1376175876,-16776955,-1710325194,1147,-2080487799,1946158718,77680669,2047214353,111235084,2080768785,-6664180,-1560280833,378080668,-1667166818,-1643771123,-1207602163,48955396,-1705983957,599,-244087,-1705968010,872,-1577158913,100864260,-1588589446,100864262,-1202713476,1347420161,-1174396488,1347551472,230810,-25755904,308634,142016256,-1694730497,605,-16222465,-15959498,-1207141322,1347420161,-1174396488,1347551472,249498,228106496,-1325398267,-1946627325,-754157034,2093104098]},{"sector":17,"data":[228892946,-754972923,2081852408,1004720908,-14451262,2057373814,-754732788,2090946784,1356911372,1342179512,2209872,1375793338,-26032,-443875328,574045,-2081649835,1654720236,2047224593,-28931828,722560161,-1995670522,2122579014,377225470,66995851,990971910,2114820102,228106524,285738539,1183518955,67503102,2109737745,285516040,1183439095,-58817538,-1961460736,100924486,104534282,478023076,722314401,-351204858,-62485744,285607427,142458891,-149879135,-62486056,33441419,-1961819130,100793414,1183518982,134611454,-62485743,285869569,16678531,-1073019787,922698612,-610660734,-1996488700,1996487238,1354771208,285778256,285476395,285909328,285607467,-92864688,285488895,285619967,-1174396744,1347551436,331162,-92864768,333210,75399936,-16026624,1996425846,-49813496,2122534891,108331262,16547459,922698612,-593883518,-1996488703,1996487238,1354771208,285778256,285476395,285909328,285607467,-92864688,285488895,285619967,-1174396744,1347551436,150426,-92864768,16777114,1575324416,1426065602,-326898549,73319428,4162342,-953809027,-352321529,73319439,638425249,75237177,126428744,637820612,163715,-953808771,583,1589907947,228892932,38222118,642254204,-2097002615,552510,2057380478,291676940,-1559462751,1589907812,126559748,-120388687,638352035,-754825333,209495032,1023952523,460587520,1963065661]}],[{"sector":1,"data":[9890051,1963065917,18999555,1963066173,24701187,-2097042967,712766,1048777845,2130708590,1095699,-26032,-1073020928,922683005,82513406,234895103,16777114,1849590528,58654728,-1593739799,104402042,208998754,957119649,1964073990,23128323,-1710590209,65535,-2080487799,712766,1996426612,-1070903286,-1075294128,-15864835,1996425846,1354771454,-55580592,-16091393,-1231356298,-385875962,1048772902,1946159214,8579331,637820612,61933451,1654913235,209363729,638312611,-754825333,291808248,-1559462749,244321250,-16410392,-493221258,-1996488698,280559174,-962965504,184549381,-1207599680,48955393,-526139349,1958742794,175570706,-1191282945,726663169,1005080768,-15668227,1996425846,112894,1354771280,-251672,1996425846,118987518,1996423168,-26102,117374976,-1813444498,1849590528,58654728,-16741911,-2096599538,552510,1996455541,100702730,1183383552,-532773890,276037642,1342863103,-1202667477,-397410303,283901146,-16091393,-1070858634,112720,-70784944,-16091393,-6619530,-1711275777,65535,182453959,887816192,84777121,61931527,378271955,-489485190,545178171,84780193,-120389625,209458827,-1036262701,1996426878,-26102,-1706033152,2157,-1034033781,-1957363704,183272428,16533191,-96024832,1183645696,-1706027274,2395,-1928694017,1343682118,616602,-163149056,67500068,-163149568,620250763,263672]},{"sector":2,"data":[-1946663287,272435270,1980724224,22538499,1962937661,9300227,2122529003,846987510,957192353,712898118,16285315,-1532943236,-129615603,1048779901,2130708590,108954389,-16352256,-351404490,3604228,98146830,2122514432,242483450,-16091393,1183709814,-397404426,2122579229,57934074,-2097081367,1946221694,17492227,-385875528,2122514694,226295814,89523911,1187446784,-352189702,1446937537,-1166737403,89523911,1187446785,-352189958,108954541,-955745024,350214,-2086671616,350270,1187485813,-956300804,17127430,1849590528,-2038497272,91502335,16777114,-8722176,425603,1911096189,138841087,1946166589,2506024,658312308,1025799168,326369320,1854080235,2122516728,427622646,83248839,-2094798080,-351733690,-160529427,-2081953016,-351734202,228106721,2096514617,-131839991,-1996487675,2122577478,125632760,83379911,-1592661248,1178144164,1208581368,67500068,-129595136,-1928694017,1343682118,635290,-159973632,-1694992641,2492,1040116713,57999392,1040125929,57868325,1040112617,58130472,-369141271,-1070858544,-1034033781,-1957363704,82609132,1342182328,16777114,1958742784,8710403,117735043,28837237,721611520,-6664000,-2097151745,1963394174,-62485141,-6664170,-16776961,1183647350,-1706027268,65535,16547459,-1734273412,-62506739,2122518141,142344446,957195425,947715654,-1727162207,-120470997,67500068,-62486272,-1727159135]},{"sector":3,"data":[-120470997,67500068,-28931840,-1928956161,1343683654,16777114,-59310336,-1694599425,65535,-1034033781,1478361092,-1957345904,-661774612,723971203,-62486080,-1946532215,138218566,-385649152,121438352,1028485888,1400111109,1996434155,209125134,369510029,-81794992,-1946532213,-1947599786,242679552,-16091393,1996425334,-45422586,-462110709,-15829249,1996426358,142016266,-1710852353,65535,-1980086647,-924058538,-15829249,-437777290,-4330498,1996426870,142016262,-336124440,242679727,383403661,-26032,1996423168,-629735666,-562968,1183649398,-1706027302,65535,255691499,1037464576,-1670250240,1979777341,33570180,54366834,-385648894,-1997799584,-1962742397,1297948645,503319242,1430622296,-1910575989,82609112,243414783,728474,-62486272,1354771280,205978,815419392,-16777213,922745974,922685700,144773382,67513105,178343953,101067537,565727249,15776256,1436176466,-16777213,-879035274,721420299,1996443840,-154146810,-1962742397,1297948645,503317194,1430622296,-1910575989,149717976,199505663,731546,-62486272,243414783,790938,-129595136,70713168,104267537,285778193,285476395,285909328,285607467,-59310256,285488895,285619967,-1174387016,1347551334,757914,-59310336,285488895,285619967,722536609,1343292422,722537121,1343292934,-493825,-15662026,-1206843850,1723465798,-1706012160,3011,-493825,-15662026]},{"sector":4,"data":[-1592719818,103485704,-1588588284,103485706,-11529978,922745974,922685700,1186468102,6732288,1402622034,-16777204,-744818570,-16777205,1536883830,-16777204,1805256310,-1996488698,1996487238,-420982778,108462069,-1694861569,1583,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,199505663,794010,-62486272,243414783,190618,-96040704,-231681,-15662026,-1592719818,103485704,-1588588284,103485706,-11529978,922745462,922685700,548933894,13416960,-1382395822,-16777212,1671101046,-16777204,-879035274,-2097151998,-443874579,-884122337,16973854,198263,16973930,199212,196715,16714417,16973851,66243,16973843,66163,16973844,68331,16973853,198520,16973841,68445,16973858,198334,16973842,66076,16973859,198428,16973843,196641,16973846,198897,16973852,68291,16973869,198533,16973853,199258,16973863,199280,16973864,196955,196649,16713560,16973900,198482,16973870,198961,16974003,68339,16973892,196626,16973877,199643,16973890,66311,16973907,199664,16973892,198634,16973893,198908,16973894,68285,16973911,198987,1953300551,1167087646,518818645,-326903666,-1808335100,1808908,922681344,614076038,-16777216,-1710383050,45,234108671,13978,-1137246464,4168202]},{"sector":5,"data":[922681344,1218055278,-16777216,-1710337482,65535,-1962742397,1297948645,-1873273141,-326412987,-2082959842,922683116,-6683276,-16776961,-6682506,-1996488449,-1070859706,-92864688,552078992,-62470398,1183517682,201630470,-99710055,-1980106997,-1962147818,-140966330,201499641,-11485141,244382326,-16648472,1996425334,1354771450,-1461186928,142016270,-1694861569,65535,-1962742397,1297948645,503317706,1430622296,-1910575989,201630168,-1962742397,1297948645,-1873273141,-326412987,-1579643362,-310179734,535137026,516640093,1430622296,-1910575989,210805208,-1962742397,1297948645,-1873273141,-326412987,-1579643362,-310179142,535137026,516640093,1430622296,-1910575989,82609112,16533191,1357824,100429559,1344146418,637951684,637695999,-1701169153,184549377,-1962576704,216792134,-2080618753,2080701566,-18220,-1962742397,1297948645,503317706,1430622296,-1910575989,149717976,1357910,84307703,1183386610,-1001382148,-14284706,-14286217,-26057,-1073020928,-4717195,-1958482945,931920990,638082756,-970258549,-134455669,-1952904593,-836041649,1183447543,140413946,38243110,737959563,1878458951,1334548744,38742790,1183447543,138906616,66744055,-2090928058,-443874579,-900899553,1478361094,-1957345904,-661774612,141311619,-2095087873,67660862,1996429437,175570694,-16222465,-1878496202,-11278322,-401698736,-310181877,535137026,113921373,-1873273344,-326412987]},{"sector":6,"data":[-2082959842,-1202322196,787939348,-259323796,200459905,-2080606583,2080376446,105286464,2114733113,306460984,922694516,1996425324,-401698808,1183514675,1284217094,-1980107000,1183518788,-101213946,-1961995127,1149830726,1815543570,142016264,216534672,-310157824,535137026,80366941,-1873273344,-326412987,-2082959842,-2091506964,2147420286,18802947,67665539,367592316,1357825,-1962381577,-221871632,-327775989,-1995422581,1150024262,-498693878,-1995553653,1150019142,-163149560,-1947044215,1183384132,-1996190754,1150017606,-196703994,-1996209013,1177284166,-62486048,737429131,1183440454,-62485512,-1711640841,-136163701,-532282375,-1947187575,1861744710,1317771750,66713590,1183440454,-96039960,-59836608,-498168935,1174665719,-364475936,1088833163,-1711771913,-134852981,-565836807,-2082191735,1962936446,-263782650,-2081929473,1963133054,108461893,-1726915423,-1037319629,-754974023,734147576,-263846974,882987072,-1036805878,-120339925,-1037319629,1088964099,291283280,-1588574136,1212680756,637008,1375753658,64133712,1996423168,-260636922,-1947699457,1177283142,1183535344,-398054428,637008,1375753658,-26032,-2090991616,-443874579,-900899553,1478361092,-1957345904,-661774612,-16454525,-1710573002,1139,-787736415,769708512,1183383555,2092960764,1354771215,1358722815,-26032,166395904,1342179512,16777114,180003584,-1962742397,1297948645,-1873273141,-326412987,-2082959842]},{"sector":7,"data":[1187449068,-1207161094,1347420168,1342177720,205562192,-523041615,503371781,-26032,1183383552,1958743036,-6664156,-1996488449,-1072957370,922685300,-2120611734,-1962934268,1789130822,-59310328,4762,49120000,1562371467,1478413133,-1957345904,-661774612,1443163267,452740807,833548,203960055,512487563,-472839126,129007755,1577881763,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-1957293844,1822623302,1357832,141307639,-964562805,1988692978,108954616,-11504384,379193462,-1996488697,-1070860730,-159973552,-1595404656,142016509,-1695123713,1859,-1202667477,-1873805311,162523150,721699979,1183399940,105155580,1073890347,-375159,-1710918602,103,16777114,-1961563392,1200355422,-1996018940,1200356422,38218502,-1191557495,-1706033145,1378,1174528209,571644,-26032,-523173888,-375295,1183647862,-11528462,1996487798,-25862,448266240,-1202708984,1344145378,1085980715,-1957670256,731511878,-1946627646,-936644018,-96040111,-775804007,-196178952,-11417557,1996487798,142016506,-11485141,1343294518,-26032,1183383552,142016496,-1705983957,1790,-1695516929,1798,49120094,1562371467,313933,-2081649835,-1202320660,787939348,-259323796,200459905,-1946782071,69928004,-1946270071,1183385156,272927740,-146743087,-1952842130,-506394036,1183447543,239373304,-146743087,-1952842642,-506394548,1183447543,74907642,385369741]},{"sector":8,"data":[-26032,1996423168,-92864520,16777114,-161576192,-1559083125,-1956770924,46292453,-326413056,-1962611581,3999814,-385649406,20775256,-385649406,37552409,-385649662,1048772977,2130708590,23587075,141430527,141442691,-385649664,347603289,1815017216,200410376,1589923870,2013210116,939468290,85914,1975520000,11593987,185101473,1024947392,57999361,1023448041,57999362,1023447785,2138308611,922688491,-1070920804,-401698736,512428009,-472839164,234403839,16777114,175570688,16777114,-28931840,112720,-26032,1996423168,-25858,1996423168,-26102,1996423168,124295934,1183383552,-25755652,1815543632,-401698808,1048774711,1962936428,1354771211,-1862502657,-77207538,-100609,-2137326474,-956301305,-16225274,-1875514369,-52828146,244357099,-335771672,-401698672,-1981022932,-1710590209,1950,1358710409,194262783,-1192751472,175570938,-1694730497,1976,16777114,-2090800384,552510,1996434037,-26102,1996423168,7313930,1183383552,108462076,1342469887,1172835984,175570938,-1694730497,192,141428479,1048783339,2113931374,175570722,323482,-62486272,-16353537,-1873804170,-99162098,-16091393,144374902,-1962934267,146955749,-326413056,-954930045,323654,167265991,74907392,-1705983957,2120,139369040,1996423168,1354771204,1816656,291254007,-775804007,213405944,875493120,-1037330166,-1202652975,-256245727]},{"sector":9,"data":[-1706012160,942,-1207666945,-1706033145,2411,146250320,146276352,-1202696192,1347420161,1347469355,284314,-96040704,16139975,-230242560,1183514624,-230278664,-538377348,-330905856,1183514624,-330941968,-1008139396,-92864768,-1728048968,1183535186,-754667018,14157280,-6664162,-16776961,1671101046,-1996488700,1996485702,999968772,-1996488695,62455366,1546581760,-1037330159,103545041,731451740,-1174875710,-796196861,-1947056501,1546581978,-1712720111,-120470997,1183433475,-138310674,-1727384530,-120470997,171181611,-775804007,-1949266952,-628364218,171192055,731507191,66638274,-62486077,-16484609,-1957630346,100920902,-1957686948,100924486,-1706030540,65535,-16484609,1905983094,-16777207,1620767862,-16777207,2122577478,108799222,-369998081,1191182108,-14226964,-1694861569,1012,721712895,-1969598272,1342177289,626842,1575324416,1426064066,-326898549,1996445198,309252,161258064,-1706033152,2466,-1207666945,-1706033144,1053,-26032,1187446784,-956300034,457286,351815367,-62470400,1978335232,183912135,-230242560,1525350400,-771983733,833766,-1947046153,-1333752872,-196703993,-2068512944,-126419195,-386500865,1996423254,-196703484,1586188318,-1846788,-1710914377,65535,-1946913025,-472777634,92583935,-134723957,1183535320,1356396534,-16767512,1183052358,1183519990,-230278658,1191157372,-129596420,-96040152,2096907833]},{"sector":10,"data":[-443851133,180829,-336819371,173968146,17188491,71731975,-2097002751,-16512442,2122516558,-444792824,-1034033781,-1957363704,49054700,185101473,1024554176,1500774401,1946157629,212340,1944799092,211039999,710298,-28931840,721712895,-1202696000,787939340,218435062,1285640192,98619662,-11534333,-1070858634,548950096,13416960,-6664110,-16776961,-6619530,-352321281,74907438,-335731992,-2043216090,-26098,1183383552,74907646,1347469355,234239743,-150993480,-351384530,74907577,-97048,-16225226,244319350,-1946706200,79846885,-326413056,1444867203,384190093,-26032,1996423168,-431583990,-6664170,-956301057,60998,-150989640,-1962382290,-221871632,-327775989,-1995422581,1150024774,-263812850,-1995815797,1150020166,-163149560,1023952523,661913613,1946165309,2440482,417923957,2505985,-1293352075,2571520,938017653,2637057,-773258379,-2095650048,2080376446,1849590544,74776584,141428479,49170119,-293698814,-385649408,2122383691,1946288366,20179203,-1981004149,-661917114,-1996339317,126608454,-1948105079,1183385159,71797754,737429129,1183441478,-96039938,-1981528533,1183578182,1088475644,-1711378697,-773173621,66713569,1183441478,-263812122,-146743087,-1952843666,-506333618,1174665719,-398030364,-1928694017,1343678022,891290,-428409088,-1696041217,3492,-2097100055,2097153662,-9574141,141442691,-16485120,-955748858]},{"sector":11,"data":[33615430,-2081403137,2080436350,-11409149,1224099467,-370129271,2122579783,58523654,-2080424215,552510,117376117,1187448942,-16645906,1183576134,-263833098,552141693,-263796737,417923072,108954623,-385647360,1048837903,1962936430,1845952260,-297351416,1325335040,-58817540,-385647616,1183579891,1183402218,-18224644,425603,-521600131,1849590782,74776584,141428479,15615687,-62456062,971654795,58588230,-939605271,64582,-83223,1996425846,-431583762,1827164182,-293698567,-1207601920,48955393,-1956724693,146955749,-326413056,1443556483,117735043,-1746336908,1357824,141307639,-964562805,1988692978,71601146,1183384619,105155582,-1996340181,1183710278,-1706027274,2838,-1928956161,1343682118,730010,-159481088,-1961460736,1178205766,-2096202250,2080438398,-62485752,2096645689,-94467261,-787462261,1861697760,1334548990,-136195830,-163149319,-787593333,1861697760,1334548988,-136195832,-129594887,-1928956161,1343682118,408218,-159973632,-1694992641,1605,1342182328,349338,1975520000,75399955,-1207601913,48955393,-1705983957,65535,1575324510,503317698,1430622296,-1910575989,653034456,1183432747,-96040452,1024214667,58064904,1023455209,57802759,1023443689,175374337,1962935869,8448259,1996445675,-136779762,-1946532213,-1477837738,242679552,-1928562945,1343620678,-336054552,242679783,383403661,-26032,1996423168,-629735666]},{"sector":12,"data":[-250904,1183649398,-1706027302,65535,1996473067,175570702,-16222465,-1326971274,1958743036,242679727,-15960321,1996425846,108461832,16777114,-96040704,-335784311,242679699,-401836289,-1997799809,687747,2122547828,57933832,-34327,-6680970,-385875713,255721326,1031959552,-1250819840,1979777341,33570205,37596018,-385648894,-1578369189,-1962742397,1297948645,503319242,1430622296,-1910575989,82609112,1187468887,-2096368900,1946158718,-234436850,-956301301,783366,-1203770624,787939331,-259322378,-1207402869,787939340,-131396106,-1727138143,-1037319629,-754974023,734147576,-2080887870,-29684241,-963967875,-947191061,-1979949429,38258439,213385217,-164694272,-60912883,-939323509,-1995652733,-208993201,-1962785653,-787592178,1086391265,105351488,-310157474,535137026,80366941,-1873273344,-326412987,-2082959842,1448545004,-150989640,-234551698,-129595125,-1207404801,-1706033139,65535,-1727138143,-1037319629,-754974023,734147576,-62486078,-1946530167,-1073019322,20780916,-385649408,-1053097619,-353827979,212224,-1494656140,-1808335103,287349260,1183383552,142016502,1090274955,-96040112,922701888,1285623286,-11515890,1586230902,273124344,234229387,1089075009,239569744,239865483,1089075009,2144336,1375784122,180066896,1996423168,180591350,1323892736,142016257,16777114,142016256,1342179256,1091226,-1399173120,-16777200,-157218698,-1036805875]},{"sector":13,"data":[62505515,871944960,63056834,100924486,1346375158,-1727116127,-1037319629,-1036781357,1174651435,129519866,-164694272,-1036805875,-120339925,-1037319629,66864643,1074656774,505936,239873783,734147481,871945154,63056834,-1705969082,2352,-1710721281,65535,-16726807,-1070921610,283482704,-1706033152,4331,-1962379521,1346436166,66733707,1074678790,-157200320,273677,239903056,1342178349,-1174396488,1347551472,539802,142016256,1342178488,526490,244994048,-1207959544,787939331,731450956,-1946627646,-92929040,-1727138143,-120470997,2114189451,142016508,1448564311,16777114,-11998464,-1710324170,2697,-637303,1183516790,-167377924,1346387981,66733707,1074678790,-157200320,1346914317,1208896673,1996443720,-128021514,-149928053,1074656814,239569744,239873783,1593743593,49120095,1562371467,688310861,1828782848,1795162894,1124074240,318832393,-2080308480,67109135,-1040186624,453050127,805307136,637599493,-1878981888,452985104,-654245120,486539536,939590400,285213453,-1778318592,301990663,100729600,570425616,-2063531264,318767879,-67042560,603980041,-1761541376,369099534,285278976,469762828,1157694208,486540045,721486592,754974992,1627456256,805306632,-872348928,570426117,352322304,1140915985,771818240,654312206,1140916992,671089422,-1107229952,687866629,889193216,1241579269,-1425997056,1006633224,302056192,1023410436]},{"sector":14,"data":[-251591936,771752710,-1392442624,-1291844851,234947328,1140850960,234947328,889193223,-738131200,989856517,-855571712,1107297031,-419364096,1140851463,-385809664,1157628678,469828352,1174405900,620823296,1459618064,-1006566656,1191183117,-1459551488,1275069190,-1560214784,1778385160,2046821120,-2130641147,-1744829696,-2113863920,419431168,-2097086704,1937009920,1167087646,518818645,-326903666,-935919866,4954627,1183383552,-2110324740,59677198,1183383552,1949761530,2117533452,-1741226228,-1539899635,-1070903283,244338768,-15470360,-6620554,-16776961,2073754742,-2097152000,-443874579,-884122337,1167087646,518818645,-326903666,-2091493624,1962936446,108954377,-385649408,922682071,1234830280,-1996488701,2122579014,1752432646,425603,-1070922626,1183516651,-1543109882,-96040691,92127243,16402119,105286400,-259270409,208942847,66733707,1342995974,228079359,425603,1183516028,-1962743034,-1543095354,-2096136947,2080376446,105286405,-963966997,-1532951573,1996443661,1354771210,-1862633729,322955278,556675,-1947663499,108954368,-1962574848,99288646,-150583669,-1543095336,-2089452275,2113931390,-339727612,138840839,228066819,-2080881015,2113930878,105286405,-1070923029,-2080749943,2097215614,-129579259,1183514624,1946551288,1183535116,2114323450,2122534924,92012552,-351779189,138840837,-2091853577,2080376446,105286405,1183516139,-1948715258,722314254,1996444104,-126419190]},{"sector":15,"data":[-1862633729,313255950,-150583669,-1947169832,-654899130,1996486795,142508810,-1962574592,48957510,-654852053,108954448,-1962574592,48956998,-654852053,142508880,-1962574848,48957510,104449931,377359768,556675,1183516028,-1962743032,-1580692537,-1054143080,-1070923029,108954448,-1962574848,48956998,104449675,377359780,425603,1183516028,-1962743034,-1580692538,-1054143068,-1070923029,175570768,556675,1183516030,721611528,2122535104,92143622,-351910261,1354771202,-1174396744,1347551436,252826,138840832,208930305,17188491,185368070,191132864,-1593278784,1177226660,721611526,-96040512,92127243,16402119,105286400,-259270409,722106111,1996443840,-1741225990,105265421,1183516028,-1962743034,-1543095354,-2096136947,2080376446,105286405,-963966997,-1532951573,922701837,1183517812,2114323450,244338700,-2095828760,1962936446,9300227,-150583669,-2081387560,2080376446,105286405,-963968277,228853307,2122543997,142475272,722311329,48957510,1183432747,108954616,721714688,-1962742848,-96040506,16285315,1187448189,-16776968,1996425846,-92864520,556675,1183516028,-1962546424,-654899130,108954448,-1962574848,99288646,-150583669,-1542550568,1372072717,66602635,1342993414,66733707,1342995974,-1696067952,-59310317,16777114,-2090902016,-443874579,-900899553,1478361094,-1957345904,-661774612,-2096436093,246334,1996425332,-26106,1996423168,-26106]},{"sector":16,"data":[1996423168,-26106,1183383552,-2110324744,61577742,1183383552,1681818614,175439877,90717827,-385649408,922681509,-6680224,-1996488449,1048837190,1946158436,-159973592,228996863,229127935,196491007,196622079,112720,548950096,13416960,-6664110,-352321281,-1908998302,86022668,1183383552,-159973382,228996863,229127935,196491007,196622079,112720,649613392,2275843,932859986,-16777212,922744438,922684838,922684840,922684342,1996426168,112892,-2034741168,15645184,-1818603438,-16777212,1201338998,-16777212,-1147470730,-2097151996,349246,1048776309,1962935652,1748927239,343146501,737703679,-11513664,-15886282,-15883210,317453942,737572607,-11513664,-15886282,-15883210,-1070860170,548950096,13416960,1637503058,-2097151995,353342,1996425844,-25864,267059200,90717827,-16223232,-6621066,-16776961,865793654,-16777210,1996424822,-25864,1048772608,1946158018,108461832,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,228106512,-1577433463,1183387044,108954616,-385649408,922681799,-946207800,-1996488698,922745926,-761656348,-16777210,-1710325194,1640,-1980742007,726725190,-1957670720,1178143302,-1962574342,65796678,1342850699,956843659,92141638,-336050549,138840835,-260636848,1347469355,-1174396744,1347551436,431258,138840832,2130200121,1949761315,2114323212,1996443660,-129594374]},{"sector":17,"data":[1342719531,737179391,1996443840,-401698808,753602209,956843659,612235334,737310463,1996443840,175570936,721962635,-11470778,-1962118090,100923462,-1873802114,287565838,956974731,830405190,208930307,2117533520,-96040180,1342850603,956843659,92141638,-336050549,138840835,-260636848,722106111,244338880,-351388440,172395322,2113553977,-227082446,737834751,1183535296,-96064758,138840912,2113422905,-129594619,1183515627,1183535112,1946551290,922701836,244321406,-15683352,-1667567498,-16777210,-241562506,1342177286,456602,-163149568,-16091393,28838006,726683648,-1706012480,1766,185328803,-11504448,-1710325194,1652,-1030519,-1710496714,30,1358055049,1347469355,-16091393,1996425334,-1202695952,-860225504,-1706012160,565,-1695385857,1700,-1695516929,67,-1191807233,726663210,-16061504,716764790,28856320,328880128,-16777209,312147062,-352321536,-466157750,-26101,1996423168,142016266,1342177720,1354771280,-26032,-459079680,209125131,16777114,-6664192,-1996488449,-1202653626,-2091909078,779326,-1070922636,28836843,-6664192,-1962934017,-1734145466,138840845,-2096257885,-443874579,-900899553,-1957363704,317489644,74907393,1347469355,28856400,-2137370624,-1929379832,385842310,72267856,1671057438,-1929379833,385806470,63879248,2040156190,-1593835513,-2037840562,1320746866,-1202708988,1344144590,497818]}]],[[{"sector":1,"data":[74907392,350752400,-28931839,1635041291,503566008,-259617456,-1706027266,1960,503598776,2089192784,-1706027265,2023,-9271669,-16429405,244319350,184606440,-1191938624,1344144334,503986872,537049168,147954256,-2037841920,-1705967760,2566,503566008,172144720,-342208482,-352321528,1312718865,91553796,-352321096,-1547687166,-1667168946,2055637259,196256255,196347435,2022082888,2109737983,2022098694,-1593835265,-2043081746,108920698,-8747381,-291437589,-293172981,208052734,-8878535,-2037709187,65798008,-1995675999,-2037646266,-2043936902,731512558,-1980182078,-1946192250,738162822,731511878,-1980182078,-35706,-1224801162,100925302,1346374580,-17910017,-1191414017,-1706033151,65535,1342459576,-1878755585,414902286,-1946270069,46292453,-1873273344,-326412987,-2116514274,-956255508,63558,63452927,330650,-163149568,72236672,-385649408,1320682104,-1202708988,1344146182,1344798904,16777114,1350994176,2109737983,36497667,503598776,185514064,-6664162,-16776961,738152630,1347440832,16777114,200188160,-1577433463,1183386726,193372654,-1578744183,1183386514,210936288,-1577302391,1183387030,243180016,-1579006327,1183387822,180396508,-1578482039,1183386324,1354170344,267774207,-2210167,-385920842,1183387627,1354170330,266463487,-15995229,-385920842,1721962455,1354170124,265152767,-16021853,-385920842,-1834807357,1354170123,263842047]},{"sector":2,"data":[-15953245,-385920842,-1767698513,1354170125,262531327,-15827293,-385920842,-1365045349,1354170128,261220607,-16072541,-385920842,-727511161,1354170122,259909887,-1947974007,1177804358,-465161254,200148531,208012851,193332787,194119219,210896435,227935795,243140147,279840307,180356659,181667379,-2115746167,1631903358,2122386293,1968008922,1958742788,1354170227,-25857,1996423168,1384549638,-2135404289,347623424,1320701952,-6664188,503316735,280148048,817385502,-6664192,-973078273,282118,-1543879029,1183517678,208053230,-1545189749,1183517574,194159584,-1543747957,1183517842,227976176,-1545451893,1183518334,279880668,-1544927605,1183517376,181707752,-1559331167,-1365177666,182100752,-1559457119,-1767830552,200057613,-1710852353,3080,-1579792759,104402038,1500842990,957121185,1963746822,200188240,243140153,1721845621,-1375323892,-12684016,683202166,-711307264,989855754,1963689478,-696844500,1342188216,16777114,-1845085440,-1592101621,104401798,292883602,957059745,1963824646,1577502472,-352321275,1577502470,-16777211,1996424822,203201238,787152896,-1928956161,1358910086,1342210232,1342181048,1342459576,663450,-1202708992,1344147634,1342189752,667546,1309066752,2122514436,57934072,-2147447319,282174,28837237,721611520,89039808,1342426808,1827147408,63879189,985157662,-1202708982,-1706029054,1998,-2131605879,282174,-1873800331]},{"sector":3,"data":[7530510,-506231,-660934026,-352321529,-227082481,-11487489,1105727120,-129595129,16285315,-826799500,-1706025469,65535,-1559331167,-291435088,291414795,-1559187807,1721830898,167813900,208930503,113704960,3198,-1695123713,2225,16285315,113706613,1362,-2080881013,-443874579,-900899553,1478361090,-1957345904,-661774612,-954274685,59462,-1705983957,898,1357792905,-303559024,1354771204,-1695648001,1222,-1727271263,-1037319629,-754973767,734147576,1713829826,-330921716,-1705983957,65535,1357792905,-1175974256,-293698812,-16223232,1067118198,-1593835516,865668078,-1178457150,-120389629,-1037319629,208021239,972834441,108457030,-1981004149,1996487750,-401698810,1996423419,2144262,726684313,-1818603328,-956301299,123462,-335788405,-360807663,-14191360,1183572550,-137221124,1183441526,178426,1354771280,-1694861569,65535,-2115352951,16841342,2122437495,1979777274,-361300208,16777114,-465139456,-337226103,-360807647,-16223232,1805314678,-956301299,59974,-1995663688,1586291782,-96024602,1183514880,-430535708,-1980479863,1183577686,-330921478,1589906923,-196673548,-16267738,-2081665281,1962994814,-58817555,-1960152064,1178205254,-1996261638,1183578694,-62510598,-16353537,1996482166,-6663964,989855999,-713754042,31999687,-360807680,-15698944,-6624650,-16776961,-6624650,-1962934017,-310122426,535137026,46812509]},{"sector":4,"data":[-1873273344,-326412987,-2082959842,1996424428,1354771206,-107327408,-1593835512,104008686,104008806,104008582,104008594,104008850,104009110,104009342,104009902,104008384,708119252,-62486228,-1207535873,-397385404,1996426161,1299101702,195553360,-16353537,-401871306,1996426141,1714880262,194242572,-16353537,-401897930,1996426121,-1841889530,192931851,-16353537,-401829322,1996426101,-1774780666,191621133,-16353537,-401703370,1996426081,-1372127482,190310416,-16353537,-401948618,1996426061,-734593274,188999690,-16353537,988347510,49120011,1562371467,182861,1167087646,518818645,-826746738,-1202708989,1344145978,1352663736,1007258,49120000,1562371467,1478413133,-1957345904,-661774612,8842369,-8747321,1048772609,1962935634,8448259,91504259,-16157696,-1878690762,245688334,-1928956161,1358920838,1342210232,1342183096,89013891,-1207602176,267061988,72236672,-1207602176,65733710,1342426808,1032602,-1202708992,1344146502,1342186424,1036698,2055637248,409087,1996433013,1354771206,-488108400,-62486259,242597899,-8747321,113704961,1362,-2033776917,196474,-8747381,-1962742397,1297948645,503317194,1430622296,-1910575989,-1897102888,-96024832,1048772608,1962935634,11856131,-1142419824,1312719088,57999364,-1207917079,1344144462,504039096,268613712,259562064,1183383552,2092960764,63879202,985157662,-1202708982,-1705992190,4133]},{"sector":5,"data":[-9271671,1358722815,1374162576,-1593447677,1077938952,200951433,1028751040,208928769,1946157629,-163133632,99287056,653674183,108461824,-9140595,8435792,-159973552,1342459576,729498,-1202708992,1344147634,1342189752,733594,72267776,949637150,-352321520,-163133677,-974454758,16416387,113706613,1362,-2080749941,-443874579,-900899553,1478361090,-1957345904,-661774612,8711297,88999623,-826802176,-1202708989,1344145978,1352663736,1092250,-62486272,280205904,1320681472,-1706025468,2984,-8616307,1119375382,-1706025462,4196,-8616307,-401698736,1344147617,1342459576,-1763176816,-1706025456,4212,503598776,2089192784,-1706027265,4242,503598776,63879248,-6664162,-1207959297,1344144334,503598776,122919504,113639424,-1207958450,1344144334,503986872,178256,191666768,1183383552,-459648772,-2097151984,-443874579,-884122337,1167087646,518818645,-326903666,105286406,45633566,-6664192,-1996488449,-1072956858,-1706029700,2951,33310407,-955913472,64582,-2080618869,-443874579,-900899553,1478361090,-1957345904,-661774612,1459940483,108954454,-10718208,683148918,781864960,-1560281071,1996426216,2799622,289249872,-324861952,108461835,1342179512,1133722,180265728,-1207535873,-1706033142,4443,-16065885,79169142,1788497920,-1560281071,1996426650,440326,180591184,-1365049344,-953881843,84666374,-335100160]},{"sector":6,"data":[-956299765,-804602362,-637090046,-956178422,386767366,-1375287551,-1593780211,-1834808344,200057100,-1592944989,2124614334,182100238,-1592742237,1385762198,193372496,-1706012007,4565,-1834891125,-1713730804,-1834921902,1347590411,-74714741,1217434,2094480128,990150479,-1589020986,-291303810,-1372127477,-2043216112,-1841889525,302291467,-11534336,-15886794,-1710452170,4671,-1727240541,-120470997,279840259,1712229273,-1980106996,-1365115834,1317771536,-1543899140,1206586470,-1559187807,922684518,922685054,922684306,1301941126,1342177298,210908927,227948287,16777114,200188672,-775804007,2114323448,244029710,-101250066,-1577302391,-1952903554,-101188530,-2146701661,-267653594,-1727271263,-1037319629,-754973767,734147576,1347590594,-1727240543,1268404306,184549395,2132442322,-2147067,45683574,200188160,-1543899239,1721830382,1894357260,243180031,-1592938333,1587743726,279879953,-1592921437,10685542,-2090902006,-443874579,-900899553,1478361090,-1957345904,-661774612,-954667901,64070,556675,-4716931,19720703,63452927,1318298,-62486272,32261831,200188160,-1728051451,-1037319629,-754973767,734147576,-196703806,-351508831,-260144366,-13339392,1721887814,1317771532,-1980106772,45674054,1183535104,1347590644,-1712437621,-879079342,1375731732,349346384,1183383552,-293698576,-1949928192,1727525958,-129594898,276086795,-1695516929,5368,-1981266295,569109078]},{"sector":7,"data":[15761027,1996425332,335911664,1187446784,-1207959312,1183386774,-362902296,16271047,108461825,1347469355,330537552,1996423168,1354771208,-1885712304,-1962934260,1183447110,-129594382,1978811961,108461870,-1411329,-1705973642,65535,-899447,1996425334,-394854422,223058512,1183383552,-230278666,1187499892,-2097151494,1946218622,-260636912,877466,-260636928,1381530,142016256,1316250,108461824,1060506,-59310336,775322,-96040192,-1962742397,1297948645,503317706,1430622296,-1910575989,619480024,1379828566,57999365,-2096984855,1962937982,42199299,818819,2062091125,306612994,734147481,244162,-1036781357,1183433259,306613212,1208894979,734147481,871945154,-1983763518,-291379130,460043,734147481,871945154,-1983763518,1187506758,-956301060,122438,-351517045,-461470958,-13339392,1183571526,1317771532,-1980106786,45670470,1183535104,1347590634,-1713355125,1050300498,1375731733,213686864,1183383552,-528579612,-1580829440,1183386752,-426094362,-1996488701,2122572358,376701152,-1696303361,3285,-1981004151,1183444566,-229209616,2122524651,141820132,-1696303361,3307,14960327,211204096,-1930410359,1183445598,-295793428,31475399,-364475648,-1957670247,1385762886,-26032,1183383552,-162100748,552879747,16144003,16271047,18409728,16547459,1988842613,-126473460,2128639545,-529102589,-1947449717,1183444566,-229209616,-739766640]},{"sector":8,"data":[-96040456,-159973552,737441535,1067077824,-16777194,1996487286,-260636686,-135641461,-1705975698,6247,-1694861569,5724,31213195,1996484678,-398029850,1088177707,-11513191,1996485238,411933424,1996423168,306613218,-1310959989,736285443,-1070903102,242679632,1342177720,-16091393,1183516790,-129629434,2144336,1375784122,415341136,1996423168,-398029850,1088177707,-11513191,1996485238,-25872,1183514624,-263847446,-1946401025,1178198086,-951683588,64582,535301776,-96040456,-159973552,737441535,-1801826112,-16777194,1996487286,-327745554,-135641461,-1705975698,5801,-1694861569,5809,-135641461,26861678,1444017222,-129564682,957105803,58587206,-2080449047,2113993854,-401698764,1183446986,1996443898,-193527818,-1705983957,6203,-362753,1996484214,-364475412,1358720759,1303194,-92864768,1601434,-495517952,1633690,-461470976,-15698944,-73735050,-16777192,-1164254090,1577058327,-1962742397,1297948645,503320266,1430622296,-1910575989,619480024,209617750,-385649408,2122514961,57999370,-1962800919,865667142,-1178457150,-120389629,-1037319629,-1948498295,1174603846,865683468,-742249534,734147576,-398030398,84668065,865665031,-742249534,734147576,-364475966,16533191,-565786880,1183514625,-2095912182,1962992766,-565772492,-1727379829,-136425845,-498693639,1342177976,-1712699765,1183535186,1347590626,1568410,-1706012160,4946]},{"sector":9,"data":[-2082191735,1962992254,209756614,1358186121,1370010,-431585024,14843523,1996428916,326146788,1183383552,-229209616,-1981004151,669773398,14974595,1996425332,419666660,1187446784,-1207959324,1183386774,-228684560,-1930672503,1187507806,-1962933790,-1986460090,1451882054,-364475400,-11513191,1996486774,407673590,1183383552,-128546314,553010819,16275075,16402119,14084352,16547459,1988848501,-92919030,2128770617,-495548157,-1947449717,1183444566,-229209616,602410640,-532248074,-126419120,737572607,-1499836224,-1962934253,1385818694,-498693296,-1706012007,4540,301352449,1996486742,-227082272,-1947175169,1861741126,647647458,-16777191,228253814,-1962934252,1174527046,-193527824,736642699,-1723802554,1996443730,-260636686,16777114,309788416,-1961855233,1174605382,1996443898,112652,-428409008,-1962391925,61987926,-1037311277,1354771280,-1174396744,1347551436,266138,-364475648,-1030655,1183579206,-62506526,1187448181,-16776964,1183578694,-96061174,535364477,-428408833,807834,-461470976,-15698944,-40180618,-16777197,-2036669322,1577058323,-1962742397,1297948645,1426067146,-326898549,74907396,385631885,112720,332438096,1183449088,-1947981060,46292453,-326413056,-16585597,-756546442,-1981535489,1996488262,-3676156,-523040591,-1946270207,-443810234,180829,-2081649835,1183450348,-62486524,-1928956161,1343683654,1342177720,1463450,1575324416]},{"sector":10,"data":[1426064578,1996483723,71731718,-397351894,1996488654,88508934,-397351894,-443809854,311901,1167087646,518818645,-327034738,1048772740,1962935630,1312718872,292880388,-1928956161,1358920838,1342210232,-352314184,108461875,1944587920,108461827,-1712845168,146932,113653620,-16775986,1105725046,1958743021,108461864,-8616307,8435792,899152,1354771280,1759898,-1202708992,1344147634,1342189752,1763994,49120000,1562371467,182861,1167087646,518818645,-327034738,1048772746,1962935630,1312718876,359989252,-1928956161,1358920326,1342210232,1342184632,-2081832917,108461824,-337113456,108461826,300420752,146932,-2115435659,-18432,1392508858,204930896,-26095,-2037841920,-1769341066,922746744,1152913676,-11526648,999949942,1342177286,-8866049,-8997121,16777114,-62486272,-8866049,-8997121,16777114,-58817792,-13405184,1843922550,1958743020,108461865,-8747379,8435792,964688,80656464,459053648,1344143360,504410808,3192912,460102224,-310181888,535137026,46812509,-1873273344,-326412987,-2116514274,-16742676,244319862,-16631320,244319862,184844264,-1207536192,-2031484929,1312718848,125108228,89013891,-1207602176,65733710,-1996239176,-826738106,244338692,200637928,-13732672,-2037578122,-1202651270,-1202716544,-1202716654,-1706031922,3793,1186484254,-1202708980,-1706032844,3809,1962935869,80656550,1183535134]},{"sector":11,"data":[-1873797382,74442766,343261195,503631544,266050128,1996423168,-401698810,149618712,-1878624513,-209721330,-2080618871,-443874579,-900899553,1478361090,-1957345904,-661774612,9235585,-1996140895,1386347078,2022082821,1309067263,-956301307,17125894,2055638272,-1202710785,1344144462,1832090,72267776,-826781666,-1706025468,7211,-1878624513,-215750642,201082505,-1201965632,-11533234,244319862,-2096810008,1962998398,2059305068,1702166783,503566008,72267856,1553616926,-973078500,282118,503566008,171620432,45633566,1771720736,-1996488690,1358918790,1419418,63879168,1119375390,-1706025462,7284,2122523627,377356540,503598776,2055638352,-1706027265,4168,-1543879029,-2037709490,1386479480,-62485755,-1962742397,1297948645,1426064074,-326898549,172138498,-768875478,-1147514798,-2013265892,1586232902,25133060,-1978305222,-768894969,-6664110,973078783,242548294,233553963,16777114,-28952064,28897909,1575324416,503317186,1430622296,-1910575989,82609112,-1878493441,5826574,425603,113706612,66898,89013891,-15895552,244320374,-1979846936,720108614,-1878493441,-234100722,201082505,185562304,-954761536,17124870,1309066752,1320681476,1996443652,-401698808,1183515664,49120252,1562371467,313933,1167087646,518818645,-326903666,-1036090620,192151555,-1710852353,65535,-2097088023,353342,1048774517,1946158440,108461866,692378]},{"sector":12,"data":[-62486272,-1710852353,6803,-59310256,16777114,108461824,-1694730497,7671,-2097102359,361022,1048797054,1946158420,-2110324981,505387534,149618688,-1710852353,7721,-1694742903,65535,1946162749,-59310326,16777114,-16192768,-6620042,-2097151745,349246,1996425844,507615996,199950336,-16353537,1318780022,-16777186,244319862,-337291288,-1975614629,1416888328,143277699,-2092466688,349246,922684276,-1919283582,-352321513,108461832,1931674,-62486272,-26032,1048772608,1946158420,-59310326,1489306,-15996160,1996424822,184982268,1996423168,-401698810,113763584,2186,-1962742397,1297948645,503317194,1430622296,-1910575989,1782481880,309592076,-16222465,-826800522,-1706025469,8548,1589905387,130426374,112640,-1962742397,1297948645,503317706,1430622296,-1910575989,686588888,-1207273729,1344145486,16777114,-62486272,1131724811,-1157627976,1347616767,-1694730497,7994,-1980217719,-1039402410,1183656308,-11528488,1996486750,-126418950,2053786,-666465024,-826781674,-1873797629,15984654,185262755,-1207601728,48955393,-310132693,535137026,113921373,-1873273344,-326412987,-2116514274,-956266772,713222,-18432,1392508858,204930896,531667473,1183383552,-61437446,-1070903214,-6664112,-16776961,1996487798,534878970,1048772608,1946159842,1354771241,-8747379,8435792,1620048,63879248,436574800,1344143360]},{"sector":13,"data":[504410808,3192912,437623376,-492765184,49120010,1562371467,1478413133,-1957345904,-661774612,-1207374717,-4521985,-11513089,-1710158794,6778,-1980217719,922745430,1522012428,-11526648,-1516632458,1342177313,-362753,-1583679370,-1996488678,1996487750,-126418950,1749402,-62485760,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,-16097596,-1977218490,-62486521,-16359740,-1977219514,-96040953,1643937408,2122320508,75463420,-520337792,1643806336,2122320508,75463418,-520468864,955926154,74775622,166445099,16547456,28882549,49120000,1562371467,576077,1167087646,518818645,-326903666,105286406,-1946532215,4161752,116083828,788299392,1586171764,105316102,1183319946,1975519996,-58818325,-1960479698,1204160094,1191128831,1292355078,-16359797,130418246,106859347,-972667137,1586188295,509446,519718539,480483920,-310181888,535137026,46812509,-1873273344,-326412987,735612446,1706578112,-11526648,-1962418122,1344144966,16777114,132162304,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,-1996077429,686554182,-1979294069,-96040953,141843516,74723132,125123132,1074153099,-1946401143,1344144966,16777114,105285888,-2147066229,-797638593,-2080618869,-443874579,-900899553,1478361090,-1957345904,-661774612,8580225,-8485235,716722198,-1706025458,7141,-2146935157,242483263,-8485235,-1873588202,-8656882]},{"sector":14,"data":[1048780011,1962935630,2122747148,-1202710785,-347077682,2122747366,-1202710785,1344146148,16777114,108461824,1934490,-2037559296,1343684478,16777114,49120000,1562371467,1057278541,1895825920,117505818,-1493171712,134283039,-939523584,167837470,822084096,184614687,-167705856,-2147483375,385876736,318832389,-1308622080,453050141,2046886656,2080375555,1895826176,486604567,-1912601856,536936219,-2046754048,16778015,1006633728,570490636,2013332224,251658775,-822017280,285213206,-1644100864,301990423,1291846400,721485596,-956235008,318767638,-1006632192,788594461,-100596992,570425621,-1191116032,419431198,-1090452736,-1694498042,1979712256,1006698271,1090585344,-1660943610,1476461312,805306630,-620756224,1107361565,-788528384,1124138781,-1325333760,620757793,1912668928,-1509948669,-721353984,-1493171452,-1577057536,1208024836,1610613504,1258356509,-805240064,855638558,-318700800,872415774,-956235008,771752735,-1291844864,1325465348,-1610611968,1375797013,-1962933504,1392574229,-369032448,1140850973,1258357504,905970463,1124139776,939524871,302056192,1241514262,520160000,1342177553,-1140784384,1107297053,1124139776,1241514524,-1744764160,1140851485,-50265344,1157628690,755041024,1291846177,-1174338816,1325400608,1845495040,117505818,-2013199616,1476395550,-1543502592,134283039,-1660878080,1493172769,-989854464,167837470,771753216,184614687,-754908416,1459618591,1962935040]},{"sector":15,"data":[2013331225,-687865088,2030108432,-452918528,1627390496,-2097151232,2046885648,-973012224,1778385173,-922746112,2063662876,838861568,2080440094,-1929379072,2097217309,1937009920,1167087646,518818645,-327034738,-950665074,64582,286031489,-385649663,1183515244,81162,37559156,-385649408,54329578,-385649408,87884009,-385649408,-1612119780,242679554,1342177720,78234,-6664192,184549631,-385649216,1996423809,243726,80656464,2058899486,2124042240,-1929379839,385840774,80656464,1150963742,-1207959550,-1924136959,1358919302,-2096995096,-2037578556,-397344906,-998046992,1958742786,242679603,-9009523,95965206,79187968,280514560,1905938496,184549378,-15371072,62393974,-2037559296,1343684470,153242,34662656,-1202667477,-397409074,-998047211,80656388,44230736,184730755,722171072,-6664000,-385875713,-826801686,-1706025468,65535,1342492344,16777114,242679552,1342177720,16777114,29616384,722368255,-2114917440,50333822,-1209465996,242679553,1342177720,81562,1996443648,243726,-26032,-1202716672,726663182,1347440832,16777114,-6664192,-385875713,1183515014,81160,37555060,-385649408,1944649970,242679553,1342178232,503631544,8042576,-26032,1996423168,1988529422,-1202710785,-1706033147,65535,58048523,-1929335319,385840774,28285520,1183383552,80656630,77221918,-1996488701,-838469050,-129595132,1065408651]},{"sector":16,"data":[-2147126230,91568703,-352321096,-1983894782,-2113964922,80672894,-826784138,-1957683708,1344206918,201114,-129595136,126539915,-9271672,74721852,108347196,-9140537,1586167809,-2012771592,1023373958,1006924892,-1950321350,1344206918,16777114,-129595136,-9126269,-1961987072,-2104625546,1343684470,-336050549,-160003316,-9010547,1035489302,-1706025464,892,-1207011585,-1924136957,385840774,43948624,2146107392,-1207011585,1344144590,1342178744,1342178488,1346375864,184218,1975520000,-37361405,-1207011585,-1202716669,-383908658,2122448445,1963003916,242679631,1342178232,503839416,-26032,1996423168,243726,68532304,8042576,1354771280,-26032,1996423168,133871630,95965214,79187968,280514560,-6664128,-16776961,244321910,-956055576,130118,1593591435,-1962742397,1297948645,1426066122,-326898549,-950642934,64070,503596683,-1706025392,65535,66471561,1344144454,222874,-1947170048,977043710,1015026036,-2146208466,1966014332,-159481075,-955812606,63558,1015036139,-955812516,129094,2122525931,74711046,65781803,-1996488008,2117728326,-2145946876,611593789,503596683,516393808,-26032,-125108224,1150149867,-1957683711,1007024198,-1706025464,65535,-443850914,-1957313699,1988843244,-2146374908,91499068,1967078528,112645,-2142893845,-344653764,-1956724693,516120037,1430622296,-1910575989,-1897102888,1187468800,-2130706182]},{"sector":17,"data":[17894526,-1645673612,172395264,1946157373,146701,54349428,-380603392,1996423589,112654,71146064,-1706033152,79,58048523,-16676887,62393974,-826781696,-1202708988,-1706033030,1222,1342492344,66970,242679552,1342177720,402330,22735104,722368255,-2114917440,50333822,1240007540,242679553,1342177720,281242,1996443648,243726,90806864,-1202716672,726663182,1347440832,85402,1922715648,-385875963,2122383640,1946226700,18082051,722368255,1347440832,1342178488,-1705983957,179,72236672,-955747328,1325364358,-2095715580,347710,-2033776523,63897460,-2033776917,138674036,-9134453,1962950528,11397379,-1207011585,-1924136956,385841798,8304720,7051856,1183383552,-2131719172,1560246714,-2100948876,-10682502,1988885574,2055390972,-2037710593,-2037776524,-397344906,-2037841760,-2037514376,-2037776518,-2037645454,-2043019400,242483062,-9003381,-9259381,121111690,-1635045516,1065418610,-1962248960,973043846,1946121862,1954974472,1988528639,242679807,1342178232,-9009525,-912633826,-352321536,1988528945,-1706025217,1371,-9009527,-9271669,-627421154,-352321531,242679705,1342177720,18842,-1070903296,22256208,1996423168,-401698802,1187447068,-1962933766,-2090927546,-443874579,-900899553,-1957363702,82609132,503596683,-1706025392,418,503596547,96377424,1183383552,-1959728130,1344144454,519980683,31824464]}],[{"sector":1,"data":[1183383552,-1965519874,-62486521,74734652,259340860,519980683,35232336,1183383552,-1962349570,1178141766,-1949796354,46292453,-1873273344,-326412987,-2082959842,1187448044,-2130706180,17894526,2122522485,208929034,34242179,2122516084,561317642,-15829249,1922697846,-352321530,209617167,225771792,-1878100225,6481934,33310407,-62485760,-1962742397,1297948645,503319242,1430622296,-1910575989,82609112,16533191,209617152,343212305,17464963,1996426869,112654,17930832,267059200,269254273,-15895295,244321910,-956296216,130118,-2080618869,-443874579,-900899553,1478361098,-1957345904,-661774612,-15537021,1183647350,-1706027276,1941,737691275,1183446086,-96039954,-1980348885,1996487750,-26106,-1924136960,1343680582,-1149185,244382838,-16759576,1183516278,-1037329938,1317796049,1372072944,-1711520117,-120470997,737300107,1996444104,-59310098,-1705983957,65535,-1207535873,-1706033151,65535,-1962742397,1297948645,503317194,1430622296,-1910575989,283935704,242679638,16777114,-230258432,571472,122788432,1183383552,-227082256,1342180024,16777114,-62486272,-15829249,-6622602,-16776961,-6680970,184549631,-1961003840,731508806,-990326334,-1993995682,-62485753,-775804007,1200170744,9955586,-1928431873,1343681606,16777114,-129594624,-1712044541,-120470997,638213828,1183516553,-96074762,-775804007,1200170744,138840834,-775804007]},{"sector":2,"data":[653298680,-972879989,2129675835,-263812342,-1993947605,-1961497849,731449414,-1946627646,173982960,2100771110,931735043,-1727641973,-120470997,1589964939,1200301578,1002832642,142539846,737953419,-8787514,-1727641973,-120470997,1589964939,2000233994,637828354,1577219977,-1962742397,1297948645,1641162,15663363,6815747,72941827,7274499,124190979,2031619,112197891,2097155,73335043,2228227,65798403,2293763,118751491,2752515,113901827,3014659,117965059,3670019,121766147,5242881,120914179,4325379,123666691,4456451,88867075,5046274,95027459,5111810,16515331,5177346,8061187,5767170,94372099,5898242,68222979,7471359,69009667,5767171,65405187,5963779,88015107,6029315,67633411,6094851,26214659,6488067,75497731,6553603,45482243,6619139,1167087646,518818645,-326903666,-1924863212,1343679558,1347469355,112720,-26032,-1073020928,1048786036,1946158446,1849098002,-330920699,-6664170,184549631,-1928038976,1343679558,16777114,-330920704,-6664170,-2097151745,348222,1048819060,1962935632,112645,-1070923029,-1962742397,1297948645,503317706,1430622296,-1910575989,216826840,16271047,209617152,695533841,-1710328065,65535,112720,-26032,1996423168,-26098,113704960,1390,89130695,-1175912447,209617152,57934096,-16730903,-1070920074,-26032]},{"sector":3,"data":[1183383552,1622692092,28856560,-6664192,-2147483393,282174,1187448692,-352039178,1312719635,125108229,-822720825,-955913469,182777414,-1980348789,65796678,-1946794241,1065416286,-336235264,-193036259,-1960610758,1178204742,505116406,-163148976,-6664162,-1996488449,1586230854,-2012771594,1547498566,1586222965,-2012771594,1547498566,977011828,1191117685,242679798,1342178488,519456395,-26032,1996423168,-26098,1996423168,-26098,1187446784,-1962933768,-310118330,535137026,181030237,-326413056,-1956713341,1065354846,721777920,22211008,-1996077429,-661915066,1946173312,-2146178066,1965073022,-96040167,-694530018,-1996488703,1586231878,-2012771590,-1073044922,1183572341,-62486022,2122322923,427044002,519718539,34708048,1183383552,-94467078,1183319946,1975519906,-94467103,1946173312,-96010338,-352319546,-1568767969,-2145028832,1965990526,-94467322,-1962932282,1344207430,145562,-96040704,-1963303285,-1572435961,-713703414,-1980086645,334233158,748846720,1183521140,-1706025222,618,-1946532215,126548574,178407048,-1948158528,1065417310,-385649408,1191182137,509690,2122322923,427106466,519718539,-26032,1183383552,-94467078,1183319946,1975519906,-96039967,-2086386039,1946158206,-28931302,1183535134,-1957683460,1344185414,1347469355,16777114,-1961301248,1344208454,519849611,-1538880688,-1070903266,-6664112,-1996488449,-1072957370,-1202708108,-1706033114]},{"sector":4,"data":[886,326435240,-1694992641,65535,16271047,1309067008,-1962934258,-443811770,311901,1167087646,518818645,-326903666,1309067094,-1207959282,1344144189,503527096,132298832,1183666206,-1202710870,-1706033071,845,1353336461,-402229505,1183448667,1975520252,1312719665,712245262,503532216,54769744,-491237346,-1924129273,1343662662,1342198200,16777114,-1438216960,108461904,-1979832600,1048837190,1946158430,9234691,16547459,1996446836,2668796,59087440,-391970816,-59310325,1342188216,234650,200057600,-1191414017,-1706033144,931,-16073053,179895414,-1298509824,-1560281085,1996425946,309500,63019600,-1700593664,-59310323,1342179000,16777114,229548800,113715947,330728,200017607,113704966,47188670,182060743,113705440,18288026,229508807,113705176,3662,-2080618869,-443874579,-900899553,1478361090,-1957345904,-661774612,1450896515,91096775,113704960,1360,1342177720,-941093232,-230258178,225820683,-1207535873,-397344769,-135724282,-2008642302,716722198,-1706025458,65535,72236672,-1928301568,1343653958,1342459576,16777114,-2095453440,347710,1183648373,-1202710904,-404028466,378029709,182761552,-6664162,-16776961,146338422,-1768271872,-1996488700,1996482630,702706,46701136,1183383552,-18206,1392508858,204930896,82221585,1183383552,-531199522,721843967,-358985536,-16777210,-1206842314,1344144210]},{"sector":5,"data":[-16353537,1996480630,-25890,1856176128,-18427,1392508858,204930896,-26095,1183383552,-598308390,-1192069377,726663177,-11382592,1347476086,336282,-227082496,1342180024,378029709,-26032,-1924136960,1343653958,1347469355,344474,-431585024,58572811,-16678423,62452342,-1070903296,-1924116400,1343682118,435610,-431585024,58572811,721510889,-11513664,1592384094,-159481087,-2095745792,1962998398,-125926641,-2096532224,1962998910,21883139,-624897,-15995338,-1852118922,-1996488699,1996483654,1714880504,-495517940,379802,-364476160,957083297,58518598,-1593775639,1178143846,-385647382,1183514846,-163173382,-1948760439,1177287750,-196703752,-624897,-15995338,-593827722,-16777211,922745462,1996426222,-1695511576,1520,1183434283,-126419066,208025343,-1696434433,1537,-231681,-15964618,-259267978,403610,-1983501568,1183576134,-2042231828,200148539,-291432066,-330945781,1350977161,-1542401,-1710494154,1613,-1948760439,1174661702,1711684592,-1592164852,1177226342,-263812630,-495517872,208025343,16777114,-196704000,8814211,2122527358,746455280,1347469355,-2466049,1996485238,-126418954,-2590977,1996485750,-361299988,-7964929,1290334326,1354771201,-631308464,1347469355,-2466049,62452342,-1070903296,-1924116400,1343682118,448410,-431585024,125681675,1342600959,-2097117720,348222,-1729559691,1346274302,930414597]},{"sector":6,"data":[-1192069377,726663179,1347440832,244994128,-2097151993,355902,1996435572,112646,123247184,922681344,1637483886,-956301305,355846,-15471872,45675126,-1070903296,1347440720,-26032,1996423168,47487730,1996423168,-562626592,470170,-596181248,-1696958721,65535,49120094,1562371467,182861,-2115204267,-956267796,17125382,1849590528,460587013,-1207535873,-1706033151,154,91109119,41626,1845937920,-150994939,1073742918,1183537524,-316156,1996489789,-1816132842,-1700266194,-28915961,418054174,536757959,-955127040,1965638,126618347,130746245,127076299,-1928956161,1358921350,1342210232,738096895,-6664000,503316735,280148048,817385502,-6664192,-1962934017,79846885,-326413056,-2095256445,1962935934,38398211,294531,1089012597,172395266,734147481,244162,-1036781357,1183433259,172395492,1208370691,734147481,871945154,-1983763518,-291377082,460043,734147481,871945154,-1983763518,1187508806,-1962933786,887817286,15498883,2122516084,1752498424,15498883,1996425332,147102444,2122514432,141820152,-1694992641,2258,-1947842817,-1952906170,-101194162,-1192606071,-1957691390,1385820742,-364475568,-1706012007,2311,-6664110,-1996488449,922741830,1996426222,112874,-1070903216,-6664112,-1996488449,2122577990,-1938489110,15367811,1996427380,-25876,1183383552,-162100748,2122528235,141820140,-1695779073,2589]},{"sector":7,"data":[16285315,1996426868,170236664,-2136932352,-129595124,15484615,211204096,-1930148215,1187509854,-16776726,-6621066,-1996488449,1183575622,1347590408,-1712175477,1503285330,-1996488695,1451883078,-96041988,-61439200,-28915968,-672595968,-28931328,1005209091,159253574,721700491,1183448646,-25878,1183383552,1996443880,-92864516,-1705983957,65535,-1712175477,1183535186,1347590634,620954,-96075520,-240111,1996482678,-193527818,-1712175477,1183535186,1347590634,629658,-6664192,-16776961,-6625162,-16776961,1183578230,1347590642,-1712699765,-6664110,1375731967,-159973552,-1695254785,65535,-15436033,1996427894,209125374,-1710983425,2513,1343243779,-15829249,1996483190,74907404,360346,1996443648,175570926,-11485141,1996424822,2144490,1375784122,-26032,1183514624,-28966422,956581515,58588742,-57623,379252342,-2097151993,1946217598,-327745768,16777114,-327745792,16777114,-126419200,16777114,1575324416,3150530,1966339,7143427,163315971,8388609,4522243,7405571,5177603,7471107,77660162,917759,81592322,983295,139722755,1245439,150142979,1769727,142082051,1900799,130482435,65539,142541059,983042,45547779,10027009,138805507,1114114,145621251,1179650,169148675,1245186,159842307,2818303,166592771,2293761,23724291,1441795,83951875,2490369]},{"sector":8,"data":[14090499,10158083,12976387,10223619,129433603,3932415,144113923,3145729,79364355,2228227,43843843,3473409,78250243,3342338,119603459,3407874,9437443,3014659,23199747,5243135,72941571,5308671,51904771,3801090,159318019,5374207,155713539,5439743,168231171,4456449,154533891,5505279,116588803,3473411,75956483,5242881,28246275,5046274,19333379,5111810,71565571,5767170,75170051,5832706,85065987,5898242,77463557,917759,81395717,983295,80871683,5832707,3604739,5898243,162005251,6946817,22675715,6029315,1167087646,518818645,-326903666,-11118830,129501814,-2103816192,-16777216,1183648886,-1706027278,65535,425603,-1997995147,1413382912,1114963973,-1207273729,-1706033145,199,13474384,1996423168,-533266678,-499712245,10131979,1996423168,1882652426,1916206860,11180556,1996423168,208713738,1183666206,-397404430,1996423673,899082,-26032,1996423168,-26102,1996423168,-533266678,-499712245,14522891,1996423168,909573898,943128330,15571466,1996423168,-26102,-1377239040,142508801,-12421888,129501814,748310528,1342177282,144026,175570688,199243519,199374591,148122,175570688,208680703,208811775,152218,175570688,504131768,-230257328,1927827478,2050394881,-533320948,-59340533,209469067,199376427,200965769]},{"sector":9,"data":[192184063,-1962640138,-1962611770,1004074950,-385646649,1988690129,2096499696,-339244284,-137917692,922702040,922685008,-2036724606,-1996488703,-166986682,-963967876,-963967765,1183439095,-58817554,-1962574848,99351622,-134461813,-297387048,-1880554628,-59340544,-654850421,-2110324912,1345781516,29989390,1183383552,-1955206150,-654836666,1183576203,-1948715014,-58817544,-1962574848,49019974,-952383861,1183535486,-263812612,92258315,-335919477,1355254530,240137983,209860351,16777114,-62486272,15761027,1183516028,-1962742800,-297367098,16547459,1183516028,-1962546180,-654836666,2112767547,-263812337,1459373705,-939557143,64582,66864779,-1559502842,1183517238,-502922246,171483915,-1559611743,950078576,208839434,-1207273729,-1706033145,65535,42048080,1996423168,-533266678,-499712245,44734987,1996423168,909573898,943128330,45652490,1996423168,171358218,1183666206,-397404430,1599995917,-1962742397,1297948645,1426065610,-326898549,209125126,208549631,247706,-28931840,-16091393,1183647862,-11528454,1996424822,20310020,-1005816065,-14284706,2013210167,48142850,1996423168,-92864756,-1694730497,748,-16091393,1183647862,-11528454,1996424822,26470404,-1005816065,-14284706,2013210167,51550722,1996423168,-92864756,-1694730497,800,-16091393,1183647862,-11528454,1996424822,32696324,-1005816065,-14284706,2013210167,54958594,1996423168]},{"sector":10,"data":[-92864756,-1694730497,852,-16091393,1183647862,-11528454,1996424822,39249924,-1005816065,-14284706,2013210167,58366466,1996423168,-92864756,-1694730497,904,-16091393,1183647862,-11528454,1996424822,45869060,-1005816065,-14284706,2013210167,61774338,1996423168,-92864756,-1694730497,956,-16091393,1183647862,-11528454,1996424822,44689412,-1005816065,-14284706,2013210167,-26110,1996423168,-92864756,-1694730497,65535,-15960321,-6619530,-1962934017,180510181,-326413056,1459809411,73319510,38243110,638082756,-1006483575,-1960440738,140428343,38243110,638344900,1342326571,240137983,209860351,279706,-990903552,-1993996194,73319479,994020134,-1002406409,-1960440738,-28931833,863290939,1177274251,1589924094,1200301576,207537154,38218534,734432080,-1705968058,1176,638344900,50483083,140428488,38766886,1581222182,1575324511,1426066626,-326898549,-1000974590,-1960442786,-1001912761,-1993996194,1589903943,931866124,638082756,-1006483573,723913822,-11533753,-15839178,-1710456266,1239,1589964843,931735048,637820612,-147112053,1589919869,126559756,1006519945,-1959562042,-28955705,140428368,38243110,638344900,1342326571,1177273995,664424702,-1006632955,-1960440738,-939326897,638082756,637685641,1600012169,-1034033781,-1957363700,-1000974356,-1960442786,1589903943,1200170504,207537154,-1002992858,-1960441762,1589903943]},{"sector":11,"data":[1194010124,922701826,922685008,1704594562,721420293,140428528,-1002993370,958792798,1249707127,638344900,-147112053,1589919860,1200301572,1355229956,638082756,-1006483573,723913822,-1957690809,1355230150,376986,207537152,38767398,1589954563,1334388232,73319426,71797542,638082756,1599997833,-1034033781,-1957363700,-1000974356,-1960442786,-1001912761,-1993996194,1589903943,931866124,638082756,-1006483573,723913822,-11533753,-15839178,-1710456266,1534,1589964803,931735048,637820612,2097444665,207537226,994020134,-1002408713,-1960442786,-953482169,140428368,38243110,638344900,1342326571,-953432437,21469776,1589903360,1334519308,-993524990,-1993996194,1589903951,1200301572,140428292,1577552166,1575324511,1426066626,1589963915,1200301572,1589921798,1200170504,207537154,-1006138586,-1993996194,214064391,-326413056,637820612,-1006483573,-1993996194,1589903943,126559756,638082756,-1034090615,50333964,17040641,50364416,16783105,50332672,16803329,50336512,16799233,50336768,16795137,50343168,50340865,50340096,16793601,50353920,-16731648,50365696,-16741888,1828750848,1167087646,518818645,-326903666,209363214,291636793,1654721405,-196703983,-351503711,209363209,-1577826679,1183388002,-194083844,-62487800,-193035512,-955941632,62534,957192353,58653766,-1577302391,104402044,192745828,-1995348831,2090990150,-1593185524,1183386748]},{"sector":12,"data":[291807738,-2080881015,-2096563602,-2096564154,2097216126,-96024827,-1532952576,-129615603,1183384446,-2110324744,-26098,1183383552,-6663946,-16776961,230225526,-6664192,-1207959297,-1706033136,65535,209567755,-1191807233,-1706033151,65535,-624897,-15637962,-15637450,-15959498,-1710457802,65535,-1695123713,65535,-16091393,1996485750,-62485510,1358186027,737691275,-11470266,1996486262,-92864524,-1174396744,1347551436,16777114,-159973632,16777114,49120000,1562371467,151571021,-1409219840,1778385664,-1140784384,33554688,-1560214784,67109120,-1912601856,453050112,151061248,570425601,-738196736,1140915968,285278976,1140850945,-603979008,-2113863936,-1761606912,-2097086720,1937009920,1167087646,518818645,-326903666,175570692,-1705983957,84,5937744,1996423168,2050424586,2083979020,-667484404,198877450,-775804007,565727480,15776256,2140819538,-16777216,-1710325194,65535,1358710409,-1705983957,65535,-26032,1996423168,2050424828,2083979020,-667484404,198877450,-775804007,565727480,15776256,-6664110,-16776961,-6620042,-2097151745,-443874579,-900899553,50332936,-16758784,50338560,16793345,50339072,16783873,50343168,16811777,50349056,16782337,1828738816,1167087646,518818645,-326903666,175570692,1342180792,46746,108954368,-10980352,-1097201034,-16777216,922684022,922685794,-828763804,-16777216]},{"sector":13,"data":[922684022,922684538,1402604668,-16777216,922684022,922684384,-560329758,-16777216,-426112394,-16777216,-15959498,-1710457802,299,-1710590209,65535,-2097104663,1946159230,-533266677,-499712245,10676491,957440673,1963751942,291807500,209454649,-1830222987,1413382912,1316225029,243414783,16777114,-62486272,899152,-26032,1996423168,16161532,1996423168,1647771644,1681325841,17209873,1996423168,2050424828,2083979020,18258444,1996423168,18782972,1996423168,-25860,1996423168,-26102,1996423168,1647771402,1681325841,-26095,1996423168,2050424586,2083979020,-26100,1996423168,-26102,922681344,922684538,-6681476,-2097151745,-443874579,-900899553,50333960,16782593,50332672,-16733952,50338560,16794369,50336512,16790273,50336768,-16748544,50348800,16838145,50349056,-16750592,50365440,-16753920,50365696,-16768256,1828750848,1167087646,518818645,1996478606,175570700,-16222465,-1070922122,3401808,-1962742397,1297948645,503318730,1430622296,-1910575989,209125336,-16091393,1996425334,112646,780368,-1962742397,1297948645,1426065610,-326898549,175570690,1342178744,28570,1973047296,-16777216,112724598,-6664192,1342177535,16777114,108954368,-385649408,1996423446,505866,15112784,1996423168,291676426,199231033,-526318211,-1593578741,-1588588190,104403300,92081122,-351542623,291807491]},{"sector":14,"data":[291676496,199231033,-526318210,-1593578741,-1588588190,104403300,92146658,-351542623,291807491,24156752,1996423168,899082,27892304,1996423168,-26102,2122514432,745799684,-1710590209,65535,-1710590209,65535,-1191295351,-1706033136,65535,209567755,-1207273729,-1706033151,393,-1593149697,104402042,92081120,-351543135,209363203,209494352,199362105,-492763779,-1593578741,-1588589444,104402042,92146656,-351543135,209363203,209494352,199362105,-492763778,-1593578741,-1706029956,505,294531,1996428148,-26102,1996423168,-25755894,16777114,175570688,16777114,11921664,556675,-1394015372,175570688,1342179256,16777114,175570688,957440673,2097930246,199270661,1654719467,1688293393,-502908655,-1593475829,65735650,1343317153,957440673,2114707462,199270661,1654719467,1688293393,-502908655,-1593475573,65735650,1343317153,149914,175570688,957119137,2097930246,199270661,2057372651,2090946572,-502908660,-1593475829,65735650,1342995617,957119137,2114707462,199270661,2057372651,2090946572,-502908660,-1593475573,65735650,1342995617,16777114,1575324416,723650,17826051,6946819,18874627,131073,9044227,262145,14287107,1769473,6488323,2949121,17039619,4980737,6095107,5701633,25034755,8519935,16515075,8585471,26279939,8716543,15597571,8782079,1167087646,518818645]},{"sector":15,"data":[1996478606,175570700,-16222465,-1070922122,3401808,-1962742397,1297948645,503318730,1430622296,-1910575989,209125336,-16091393,1996425334,112646,780368,-1962742397,1297948645,1426065610,-326898549,175570694,1342178744,28570,1973047296,-16777216,129501814,-6664192,1342177535,16777114,291676416,199231019,-1577171319,103485796,1183386594,-25755654,243152639,200161023,44186,-28931840,-362753,-15684042,-1710463434,189,1358579337,227948287,210908927,56730,-96040704,1358853887,106906,-96040704,1358841481,210908927,227948287,61594,-96040704,-100609,-15995338,-1710326218,259,-113015,922745462,922684518,1905922222,-1996488703,2122578502,57999366,-16689431,112724598,1301958656,-16777215,-526316938,-28955893,199401808,1358579243,66995851,1342955526,66733707,1342956038,147098,175570688,1342180792,162458,209363200,199231019,-1577171319,103484540,1183386594,-25755654,243152639,200161023,99482,-28931840,-362753,-15684042,-1710463434,405,1358579337,227948287,210908927,112026,-96040704,1358853887,193690,-96040704,1358841481,210908927,227948287,116890,-96040704,-100609,-15995338,-1710326218,475,-113015,922745462,922684518,-996536146,-1996488702,2122578502,745799684,-1710590209,65535,-1710590209,65535,-1191426423,-1706033136,65535,209567755]},{"sector":16,"data":[-1207273729,-1706033151,602,-1710590209,65535,-1593149697,1177226208,-492744450,-96064757,-28931248,199230979,-96040112,199362051,44079696,1996423168,-26102,2122514432,57999364,-16709399,1996425846,-25860,1996423168,-26102,-219611136,142508800,-385649664,1996423401,440330,-26032,1996423168,199270666,1358841387,722199201,-1957627322,100924998,-1957688352,100923974,-1706030110,65535,722238113,-1995710458,2090991174,-502912244,-96040693,-100609,-15827402,-1710494154,727,-113015,922745462,922685614,-392557466,-1996488702,-11470266,-15886794,-1710452170,776,-375159,-1705968010,65535,-1980086647,-11469242,-15953354,-1710385610,795,-375159,922746486,922684398,-6680962,-1996488449,1996488262,1714880506,-1372127476,10066448,1183383552,175570938,722198689,-1588527546,1177226210,1183535354,-536476674,1183535115,-502922246,1100632075,-1962934271,180510181,16973837,197120,196714,16711881,16973964,66350,16973952,66064,16973826,65819,16973828,66391,16973848,65635,16973869,66036,16973900,65629,196695,16712290,196738,16712172,196739,16712262,196741,16712216,1953300614,1167087646,518818645,1996478606,175570700,-16222465,-1070922122,3401808,-1962742397,1297948645,503318730,1430622296,-1910575989,209125336,-16091393,1996425334]},{"sector":17,"data":[112646,780368,-1962742397,1297948645,1426065610,-326898549,175570690,1342178744,28570,1973047296,-16777216,129501814,-6664192,1342177535,16777114,108954368,-385649408,1996423449,440330,15112784,1996423168,291676426,199231033,-526318211,-1593578741,-1588588190,104403300,92081122,-351542623,291807491,291676496,199231033,-526318210,-1593578741,-1588588190,104403300,92146658,-351542623,291807491,24156752,1996423168,899082,28088912,2122514432,745799684,-1710590209,65535,-1710590209,65535,-1191295351,-1706033136,65535,209567755,-1207273729,-1706033151,396,-1710590209,65535,-1593149697,104402042,92081120,-351543135,209363203,209494352,199362105,-492763779,-1593578741,-1588589444,104402042,92146656,-351543135,209363203,209494352,199362105,-492763778,-1593578741,-1706029956,508,-1710590209,65535,294531,-873921675,175570688,-1694599425,65535,-1710590209,65535,-2097105431,1946159230,11331843,-1207273729,-1706033146,65535,-1593149697,104403298,92081120,-351543135,291676419,291807568,199362105,-492763779,-1593578741,-1588588188,104403298,92146656,-351543135,291676419,291807568,199362105,-492763778,-1593578741,-1706028700,588,-1593149697,104402042,92081120,-351543135,209363203,209494352,199362105,-492763779,-1593578741,-1588589444,104402042,92146656,-351543135,209363203,209494352]}],[{"sector":1,"data":[199362105,-492763778,-1593578741,-1706029956,65535,-1034033781,50334474,50399233,50358784,16848897,50332160,16812545,50332672,16833025,50337792,16802561,50343168,16841729,50351104,16801025,50353920,-16673792,50364928,-16714752,50365184,-16680960,50365696,-16703488,1828750848,1167087646,518818645,-326903666,175570696,1342179000,47002,142508800,-2091748352,361022,-6680449,-16776961,-15998922,-385097162,-2103377701,-773795579,335938528,370576145,-129595119,-371063,1589906038,2013210360,2013210364,9804542,1996423168,2050424586,2083979020,10852876,-1511456768,92446976,-523116335,286524931,286660235,-1980217719,1996487254,-128007158,-59244762,-25690330,59290,175570688,291649279,291780351,63386,108954368,-15436800,230165110,-6664192,-16776961,-6681994,-1593835265,-523172478,100917457,378212628,1183387926,-94991880,-1005947137,-14223266,-14222217,-6619529,-16776961,922684022,922684538,-6681476,-2097151745,1946158718,175570709,16777114,2050424576,2083979020,-26100,-310181888,535137026,147475805,16973831,65557,16973828,65642,16973843,65626,196628,16711719,196682,16711954,196740,16711941,196741,16711871,1953300614,1167087646,518818645,1996478606,175570700,-16222465,-1070922122,3401808,-1962742397,1297948645,503318730,1430622296,-1910575989]},{"sector":2,"data":[209125336,-16091393,1996425334,112646,780368,-1962742397,1297948645,1426065610,-326898549,175570690,1342178744,28570,1973047296,-16777216,129501814,-6664192,1342177535,16777114,108954368,-385649408,1996423446,440330,15112784,1996423168,291676426,199231033,-526318211,-1593578741,-1588588190,104403300,92081122,-351542623,291807491,291676496,199231033,-526318210,-1593578741,-1588588190,104403300,92146658,-351542623,291807491,24156752,1996423168,899082,27892304,1996423168,-26102,2122514432,745799684,-1710590209,65535,-1710590209,65535,-1191295351,-1706033136,65535,209567755,-1207273729,-1706033151,385,-1593149697,104402042,92081120,-351543135,209363203,209494352,199362105,-492763779,-1593578741,-1588589444,104402042,92146656,-351543135,209363203,209494352,199362105,-492763778,-1593578741,-1706029956,505,294531,1996428148,-25755894,16777114,175570688,16777114,175570688,16777114,11921664,556675,-1394015372,175570688,1342179000,16777114,175570688,957440673,2097930246,199270661,1654719467,1688293393,-502908655,-1593475829,65735650,1343317153,957440673,2114707462,199270661,1654719467,1688293393,-502908655,-1593475573,65735650,1343317153,149914,175570688,957119137,2097930246,199270661,2057372651,2090946572,-502908660,-1593475829,65735650,1342995617,957119137,2114707462,199270661]},{"sector":3,"data":[2057372651,2090946572,-502908660,-1593475573,65735650,1342995617,16777114,1575324416,723650,17826051,6946819,18874627,131073,9044227,262145,6488323,2949121,17039619,4980737,6095107,5701633,25755651,8519935,16515075,8585471,26279939,8716543,15597571,8782079,14286851,8847615,1167087646,518818645,-326903666,-526297574,2047224587,-96040692,722199201,-1995670522,2122577990,528351482,66733707,51222534,990671878,2114711046,200188174,208930347,228066859,-1946532215,100923974,-1073017740,1956710525,-1982269684,2122578502,528351480,66602635,51225606,990674438,2114741766,208052494,209585707,228853291,-1946663287,100923462,-1073017730,2124482685,-1982269684,922744902,-6680958,-1996488449,2122575430,812908550,-92864688,-1694992641,65535,722106111,-11513664,-15886282,-15883210,1347481206,-1174396744,1347551436,89242,20572416,556675,820577140,-92372223,-955023872,63046,-1980086645,-1734219194,-96064755,1187452139,-1962934038,-654837178,-1946794359,100923974,1183387032,-125926412,-955023872,62022,-1980217717,-1532893626,-129619187,1187452139,-1962934042,-654837690,-1947056503,100923462,1183387044,175570928,-624897,1996485238,1996443892,-361299986,-1192855809,-860225504,-1706012160,65535,722106111,-6664000,1342177535,16777114,-125926656,-1593278976,1177226660,721611768,-62486080]},{"sector":4,"data":[-134723957,-1012776,-1070921098,-59310256,228079359,2096645689,-129594619,-963968277,2209872,1375793338,34183760,2122514432,142475514,722311329,49019462,1183432747,-125926424,721714688,-1962742848,-62486074,-16091393,-2091849610,2080438910,-96040187,1183516139,1356396538,16285315,1183516028,-1962742792,-1542550586,1372072717,-1174396488,1347551472,16777114,-294191360,16777114,-310157824,535137026,147475805,196615,16711831,16973851,65966,16973853,65741,16973858,65901,196653,16711852,16973894,66065,16973892,65895,1953300567,1167087646,518818645,-326903666,175570692,1342180792,35994,108954368,-13208576,-1801844106,-16777216,922684022,922685794,-1533406876,-16777216,922684022,922684538,-1264972676,-16777216,922684022,922684384,-1763111966,142508800,-385649664,1654718618,2047228177,-1593019124,104403300,58002556,-2097117719,349246,922701428,-6680958,-1996488449,-1202652090,-1706033139,65535,-1694730497,204,-231681,-15637962,-1710136266,220,-231681,-15959498,-1710457802,236,-1694730497,244,-1694730497,65535,-1710590209,65535,-16091393,-15637962,-1710136266,65535,-16091393,-15959498,-1710457802,65535,-1710590209,65535,-1962742397,1297948645,461002,1376515,262145,8323075,1769727,4391171,1245185,3342595,1310721,12845315]},{"sector":5,"data":[4456449,12320771,8716543,2293763,8782079,1167087646,518818645,-326903666,1748927236,57999365,-2097112343,1946159230,-1908998282,-26100,1183383552,229030140,922701854,922684386,-6681632,184549631,-13732672,-526254986,-1509545205,-1588576243,103484386,1346375080,16777114,1958873856,-59310320,29082,175570688,-351946776,-59310286,16777114,209125120,134810,1996443648,43031050,-6684672,-956301057,354310,-2095125760,1946158718,1778829072,-251,244320886,-351769368,175570711,-351910680,209125135,-16091393,1996425334,780294,-1962742397,1297948645,1426065610,1996483723,440328,-26032,2122514432,1584660484,-16222465,-15637962,-1710136266,364,-16222465,-15959498,-1710457802,268,-16222465,-15998922,-1710497226,380,209336063,209467135,100762,142016256,1342178744,16777114,-6664192,-1711275777,65535,-1710721281,65535,2122534891,175374342,199243519,199374591,1654733547,2047228177,-1593215732,104403300,762580092,-16222465,-15637962,-1710136266,65535,-16222465,-15959498,-1710457802,65535,209336063,209467135,16777114,108954368,-1592626176,-1499263878,-1432141811,209494285,-351426397,209363250,228984377,-1499265666,-1592923379,104402042,75435434,229286720,957119649,2114824198,229155589,2090929643,-1408878324,1074036493,-2096255837,1946158206,175570697,-402098433,-443875322]},{"sector":6,"data":[574045,-2081649835,-1432285460,-1509545203,196518669,722316449,-1559386106,1996426168,42441222,-1706033152,65535,90834631,-1230897153,1346387979,1074509985,28856384,726683648,-1706012480,593,-1593012573,1077939126,196649296,-1202700224,1347420161,1347469355,16777114,291545856,210648707,184841216,-2093386304,822846,922683764,2140802190,-2097151998,1138750,922683764,-6680224,-16776961,-6683018,1342177535,-1710983425,65535,209050,44624128,243414783,175514,-230258432,210646783,178586,-196704000,291518207,417434,-163149568,737441535,-107327296,1342177282,196506,-193528064,1347469355,1074509473,-1197387712,1346387979,-1174396488,1347551472,16777114,-193528064,1342179256,199578,295325696,-16777213,79230070,-1835380736,1342177283,235674,-193528064,1208854177,229155152,1016746056,-16777213,949679222,-1711276031,65535,737441535,-1706012480,65535,-1191807233,1347420161,196491007,196622079,1358198527,2144336,1375784122,59152976,1996423168,112884,922701904,922684342,1996426168,-1506344974,-1472790771,8828941,1375792826,63871568,1996423168,309492,19241552,-1706033152,299,737441535,1347440832,-26032,1996423168,112884,922701904,922684342,1996426168,-1506344974,-1472790771,36091917,1375779770,66099792,1996423168,112884,922701904,922684342,1996426168,-1202695946,582615846]},{"sector":7,"data":[-1706012160,1142,-1913358593,-11470778,-16009674,-401885130,1183514948,-129615364,-571931778,-28931328,2130331193,13822211,737953419,-1556023226,1183517622,-96064514,196649792,1224230539,228984321,51226273,-1559513594,1183518122,100747514,-1465840216,-1207565555,229417739,-1191938305,1347420161,196491007,196622079,-755969,1996486774,2144506,1375784122,77503056,1996423168,112886,922701904,922684342,1996426168,-1506344974,-1472790771,2144269,1375784122,79731280,1996423168,112886,922701904,922684342,1996426168,-1202695948,-2001076026,-1706012160,1256,-887041,-15882698,-15882186,-16009674,-16009162,28898422,-1202696192,-289800058,-1706012160,65535,113711339,2998,196609735,-1499398144,229286669,-1559385951,1996426668,85105398,1996423168,85629684,1996423168,6396658,1996423168,-401698812,-2034760723,-1202708980,1344146854,344218,282638336,-1497870306,-1706025459,65535,-1034033781,-1957363708,82609132,-955752821,2097152583,-16365625,509951,71812989,1187512319,-385875458,1996423333,1354771210,1358853887,-828747696,-1996488699,-12714938,-1959561985,121178206,126419582,-1962385781,1194982470,-1996260092,1586168903,-28931320,2114078521,38242563,-1962385781,1194982982,-1996260090,1996424775,105286410,1996443712,1354771454,178256,-26032,1183383552,-49668,1586180980,2114402568,-1962440446,1183516766,71776764]},{"sector":8,"data":[1200161661,140413700,972965515,58589767,-1962784887,1183516766,105331198,1200161661,-28901626,-2096869633,2113930366,-11343613,-1034033781,-1957363704,116163564,1290276496,1095683,105421392,-1073020928,113707389,132458,-1207915799,-1706033135,65535,58507275,-956263191,17132038,-2110324992,107649550,1183383552,-1908998150,2267660,1183383552,1614217212,117348881,1183383552,-92864514,228996863,229127935,196491007,196622079,-1191414017,1347420161,-1174198600,1347551266,444826,-92864768,228996863,229127935,196491007,196622079,-1191282945,1347420161,-1174370632,1347551470,477594,-25755904,448922,-59310336,450970,-92864768,588186,-955847936,354822,1575324416,1426064066,-326898549,-2110324978,118135310,1183383552,-1908998158,118921740,1183383552,1614217204,153459217,1183383552,1782481918,57999877,1342223849,1342177720,-1237909680,-1204355317,-227082485,228996863,229127935,-1174387016,1347551334,486298,-25755904,1342177720,-1237909680,-1204355317,-193528053,-960999344,8960512,-1818603438,-16777209,922682486,922684838,922684840,922684342,1996426168,112894,1186484304,6732288,-1147514798,-16777209,28900982,-11513856,-16009674,-16009162,922743414,922684838,1186467240,6732288,10113106,-16777208,28900982,-11513856,-16009674,-16009162,1347482742,-1174354248,1240137864,-887041,-15882698,-15882186,-16009674]},{"sector":9,"data":[-16009162,28898422,-1202696192,582615846,-1706012160,2088,-887041,-15882698,-15882186,-16009674,-16009162,28900982,-1202696192,-289800058,-1706012160,2249,385238669,229029968,832196638,-1207959547,1344146854,722238113,1343316486,722238625,1343316998,16777114,-1505852672,243073037,-1499217877,-1241119987,229286667,-1734274069,-1442432755,-1559593459,103484842,-1499264074,-1472298227,243073037,-1465663445,-1207565555,229417739,-1532947477,-1408878323,-1559593459,103484844,-1465709640,74907405,228996863,229127935,196491007,196622079,-1191938305,1347420161,-1174198600,1347551266,586138,74907392,228996863,229127935,196491007,196622079,-1191282945,1347420161,-1174370632,1347551470,220826,-25755904,590234,-193528064,592282,-227082496,330394,1575324416,503317186,1430622296,-1910575989,82609112,210646783,172442,-62486272,-1207535873,-1706033150,711,47028816,1996423168,-1506345210,-1472790771,-1237909747,-1204355317,-59310325,1342177720,32094288,1375759034,167025232,1996423168,175020796,-310181888,535137026,46812509,-1873273344,-326412987,-2082959842,1048775404,2080376172,16443651,-150639455,91005912,504420536,229029968,932859934,-16777208,-1710325194,2488,-637303,-1710496714,2500,-375159,-1710137290,2512,-244087,-1710453194,2738,-506231,-1070859658,922701904,922684824,1996426660,-1202695946]},{"sector":10,"data":[-860225504,-1706012160,2588,-1191414017,1347420161,196491007,196622079,-624897,-15882698,-1207064522,-860225504,-1706012160,2622,-1191414017,1347420161,196491007,196622079,1358460671,13023312,1375766714,174496336,1996423168,-1506344970,-1472790771,-1237909747,-1204355317,-126419189,1342177720,8829008,1375792826,183081552,1996423168,175545080,1996423168,176069372,1996423168,176593658,1996423168,185834230,-310181888,535137026,516640093,1430622296,-1910575989,116163544,-722989424,108462078,1726484112,-1908998146,180263436,1183383552,1614217210,108435985,1183383552,108462076,228996863,229127935,196491007,196622079,-1191545089,1347420161,-1174387016,1347551334,723866,-59310336,1342177720,-1237909680,-1204355317,-92864757,1186484304,6732288,-1583722414,-16777210,463142006,-16777205,-778372490,-16777210,244319862,-2080510744,-443874579,-900899553,50338562,-16641024,50366464,-16569600,50366720,-16699392,50366976,50737665,50358784,-16608000,50367232,-16617728,50336512,16832001,50332672,17136385,50366208,-16143360,50338560,16982785,50334464,16841729,50336512,16837633,50336768,17016321,50338048,16968961,50339072,17392129,50340352,17381889,50343168,16921601,50343936,-16742656,50350592,50362625,50343424,17394177,50349056,16798977,50352896,17380353,50353920,50963201,50350592]},{"sector":11,"data":[50345729,50351104,50876673,50351360,-16743936,50363648,-16705280,1828750336,1167087646,518818645,1996478606,440330,4889168,2122514432,544538632,-16091393,-15998922,-1710497226,98,-16091393,-15637962,-1710136266,114,425603,1996428404,899082,-26032,1996423168,-26102,1996423168,-533266678,-499712245,-26101,1996423168,2050424586,2083979020,-26100,2122514432,141819910,-1710590209,65535,-1962742397,1297948645,329930,1179907,262145,3670275,1245185,2621699,1310721,8388611,8716543,5373955,8782079,1167087646,518818645,1048828046,1946158436,142508888,-1203997696,1344146854,199374591,199243519,16777114,1958742784,175570696,-352300824,209125187,147354,1996443648,-26102,-6684672,-956301057,353286,-2095650048,1946158718,1778829064,-335544571,175570711,-352096536,209125135,-16091393,1996425334,15656966,-1962742397,1297948645,1426065610,-326898549,-401698810,-526317136,-1509545205,167289613,722199201,-1559386106,-256374278,-11526647,-16123850,-1593181642,103484824,100863402,-1588589600,103484836,100863404,-1706030110,458,-1559386463,-1465841172,166634253,1342181560,62106,2109737728,1778829064,-352321019,1161331,-26032,-1073020928,113729661,66922,243414783,70042,-62486272,291518207,151194,-28931840,-231681,-15882698,-1592940490,103484842]},{"sector":12,"data":[-1588589146,103484844,-11530840,28900982,-1202696192,-860225504,-1706012160,65535,-1694599425,340,-1694730497,65535,113706731,1386,-1034033781,-1957363710,116163564,425603,1996425333,-401698808,-1497890466,-1588584947,104402042,92081120,-351543135,209363203,209494352,199362105,-492763779,-1593578741,-1588589444,104402042,92146656,-351543135,209363203,2090946624,-502908660,-1593475573,65735650,1074560161,-26032,1996423168,-401698808,2122514690,57999364,-1593773079,103484842,-1230828122,229417227,229115435,-1207191389,1344146566,504211128,34445904,-659030016,-1202708976,1344146854,16777114,196518144,-1588576192,1077939128,112720,-1070903216,-6664112,-1560280833,-1073016480,-1779891339,1778829056,-251,-6681994,1342177535,16777114,-2110324992,39492110,1183383552,1614217212,-26095,1183383552,28856574,-11513856,-16009674,-16009162,922745974,922684838,548933032,13416960,-1281732526,-16777212,-1070859146,-26032,-1706033152,749,-231681,-15882698,-15882186,-16009674,-1207191498,-256245727,-1706012160,839,-1694599425,708,-1694730497,332,1996425451,-401698808,-443875322,574045,1167087646,518818645,-326903666,108461828,180107007,247450,-62486272,1074636449,-1442432192,-1593082099,1077939624,229377595,1996430718,-1506345210,-1472790771,229286157,228984363,229417296,229115435,-16741655]},{"sector":13,"data":[922682998,922684838,-1432285784,-1509545203,28856333,1236815872,5945856,1855606866,-16777213,922682998,-1465840218,-1202700275,-1588592639,103484844,1212681640,4831312,1375754938,60201552,1996423168,229286150,-1465823160,-1202700275,-1588592639,103484844,1212681640,4831312,1375754938,62626384,1996423168,-1506345210,229417229,-1432268728,-1509545203,28856333,1236815872,5945856,-6664110,-16776961,1996424822,-25860,-310181888,535137026,46812509,-326413056,1461775491,166764886,209323577,2057373054,-1593578740,1183386096,167027198,2113816121,-28931323,-190774293,-28931831,956953249,2114747398,209494277,-224328725,-129595127,956954273,92141638,-336050549,167158019,-1577564535,1177094648,167420414,-1946663383,103546438,1183386092,-129594374,166594091,-1913239927,1343679558,-100609,1183578230,-1241119746,1183535115,-1207565320,-929411061,-16777216,-1710325194,1148,-1554807,-1710137290,261,-768375,244319350,-111128,1996424310,-294191124,737166987,-1957630906,1177285190,1996443886,112884,548950096,13416960,-1969598382,-2097151995,33909310,1183521396,-364475928,-1996208501,-1499339194,-465139443,-1995593567,384557638,-1980479861,1183574598,-431584792,31737543,-498678016,2122514433,92012794,-335919477,-96040187,104585463,58461110,-1962848023,-654838202,2122576011,92012790,-336181621,1002867458,2081142790,20179203,16154243]},{"sector":14,"data":[2122540148,75366646,132890667,66471563,-1995720698,1996487750,-1506344986,-1476001011,922701837,2122517430,92012790,-336181621,1002867458,2097920006,-159481073,-1962574848,132904518,65783435,1342945441,-1411329,1183573110,-62520350,2144336,1375784122,21273168,2122514432,57999610,-1962874391,-654838202,2122576011,92012790,-336181621,1002867458,1963702278,13428995,16416387,-1070922626,1183516651,-1241119750,-532248309,16154243,1183516030,721611766,-62486080,-134592885,-488488,1183573622,-1509555232,1183535117,-1476000772,2122534925,92012794,-335919477,1002932994,2097919494,-92372209,-1962574848,132905542,65783691,1342944929,16154243,1183516028,-1962742794,-1207551546,-2095677941,2080437886,-163149051,-963968277,-1197356917,-339662069,1354771202,-1947568385,1174660166,1183535328,-62520350,-14881968,922740342,922684838,922684840,922684342,1996426168,-461963286,-1193117953,-860225504,-1706012160,1864,504211128,-330920624,-23441386,-16777215,244319350,-245272,-1550125962,-16777210,144369782,-1962934264,-324796858,-129594615,1577709219,1575324511,503317186,1430622296,-1910575989,283935704,1681818454,57999365,-1878949399,57075726,722315937,-1995594234,-1398670778,-1475990771,-163149555,-1995594079,-1465782202,-62486259,291518207,468890,-129595136,1090143883,1183535168,1346388214,1342177720,1354771280,36149840,1183383552,1958743028,-509980633]},{"sector":15,"data":[-1996488696,-1202654650,1347420161,-362753,1996486262,-1202695944,-860225504,-1706012160,1901,1324775051,-1191676161,1347420161,1459255039,1358460671,1342177976,-1174354248,1347551368,496026,-126419200,1342177720,1342177976,1459255039,-1191676161,1347420161,-1174354248,1347551368,506266,-92894464,-126419122,1342177720,1996445264,-126418954,1342177976,1342177720,-1174354248,1347551368,514714,-126419200,1342177976,1342177720,-159973546,1358460671,13023312,1375766714,134257232,2122514432,812908788,-1191676161,1347420161,-362753,1996486262,-1202695950,-1145437658,-1706012160,2112,-1695385857,2128,-1695254785,65535,-1878624513,-88283122,-16353537,-15882698,-15882186,-16009674,-16009162,28899446,-1202696192,-860225504,-1706012160,2316,-1878624513,-91428850,-1694992641,2486,49120094,1562371467,182861,1167087646,518818645,-326903666,1681818386,57999365,-1878965271,29550606,856063619,1187457653,-1593835016,103484842,1183387046,-163133444,1187446785,-956300814,128070,722316449,-1995593722,686551110,33310407,229417216,229115435,-940030327,128582,32655047,229286144,228984363,-940292471,127046,-775804007,-297367048,291518207,653722,-96040704,-16743447,1996487286,-227082250,-231681,1996486774,-193527814,-1192200449,1723465798,-1706012160,2353,-362753,1996485750,-59310096,-493825,1996487286,-227082250]},{"sector":16,"data":[-1174387016,1347551334,611994,-92864768,-624897,1996485238,-126418948,-362753,1996485750,4634864,1375758010,161913424,2122514432,141898502,-899329,116125774,-637185,1325397070,-293698578,-385647616,1996488561,-401698808,1996486998,-1506345208,-1472790771,-1237909747,-1204355317,-92864757,1342177720,2144336,1375784122,170367568,1996423168,-401698808,1996486950,170892026,-310181888,535137026,80366941,-1873273344,-326412987,-2082959842,244319468,-16750616,244319862,-460312,-1497889162,-1706025459,65535,-1878624513,-119216114,291518207,290970,-62486272,112720,-1432268720,-1475990771,-1398714355,-1475990771,1996443661,112892,163074128,5618176,-2087038894,-16777214,-1130693514,-2097151998,-443874579,-900899553,1478361090,-1957345904,-661774612,-2096567165,355390,-840367236,91005184,1822677239,282638341,-1497870306,-1706025459,1675,243414783,687514,-129595136,199505663,690586,-96040704,291518207,458138,-62486272,737834751,-11513664,-15886282,-15883210,1347483766,-1174396744,1347551436,710042,-59310336,1342177720,-1237909680,-1204355317,-126419189,228996863,229127935,-1174396744,1347551436,425114,-126419200,-1705983957,654,43293264,1996423168,-1506344968,-1472790771,-1237909747,-1204355317,2209803,1375793338,45390416,1996423168,186030844,1996423168,186555130,1996423168,110861048,-310181888,535137026]},{"sector":17,"data":[298536285,-587136256,1778385664,1157628672,-1895760126,268436224,318832392,1895826176,453050122,100729600,486539531,-1392442624,570425610,-436141312,754974986,436273920,805306631,1191183104,1241579264,956367616,771752704,234947328,1140850955,-536804608,1459618058,1728119552,1207960324,1744896768,1241514762,620823296,1275069184,-402586880,1375732489,1107297024,2097217280,1937009920,1167087646,518818645,2122569870,1282670598,-1710590209,65535,-16091393,-15959498,-1710457802,65535,276087307,-16091393,-15959498,722238518,317411520,-16091393,-15959498,-1207141322,-4521985,-1706012160,65535,-1710590209,65535,-1962742397,1297948645,264394,5243139,1638401,2359555,5439489,5767171,8519935,1310723,8585471,1167087646,518818645,-326903666,-2110324988,-26098,1183383552,142509052,1343583232,209336063,209467135,16777114,228369152,228464265,185441441,1947049478,175570708,1342177720,22938,-59310336,-352321096,175570706,1342181560,26010,-59310336,1342181560,16777114,142508800,-11635712,922684022,922684538,-1667167108,-1643771123,721777677,116103616,-1157627976,1347551487,47002,-59310336,209336063,209467135,185441441,1947049478,-1715459323,-4716821,16759551,-6664110,-352321281,175570752,291649279,291780351,59802,175570688,209336063,209467135,63898,-59310336,291649279,291780351]}],[{"sector":1,"data":[16777114,-59310336,209336063,209467135,16777114,-59310336,16777114,49120000,1562371467,118016589,1157694208,67109120,301990656,453050112,-654245120,318767360,-922680576,335544576,-1862204672,520093952,16843520,1140850945,687932160,1392509184,1937009920,1167087646,518818645,-326903666,175570698,1342179000,43674,175570688,1342179256,220314,1654280192,-2097151997,559678,166265727,142508801,-11504640,922684022,922684296,1352272778,-16777215,922684022,922684302,1620708240,-1207959551,787939330,-2002580600,178187,193605367,-1207203165,787939330,-1901917298,178187,193998583,-955543389,820230,-15602944,-1430779274,-11526642,-1710455754,298,425603,1996428404,899082,55614032,1996423168,50436618,2057371648,-1981755124,2090989126,-1981755124,-2002651066,-1912208629,-1037330165,1317796049,-1983370250,-1969095602,-1878654197,-1037330165,1317796049,-1983370248,1183578702,-163184132,1174520203,-2079930376,-16777204,-16021450,-401896906,-2001206903,1183666187,-1900523274,112742411,-1410838528,175570688,504277688,-2076770480,-26100,2122514432,1853095942,-1710590209,809,2122540267,544538632,-16091393,-15998922,-1710497226,368,-16091393,-15637962,-1710136266,384,-16091393,-15998922,-1710497226,785,-16091393,-15959498,-1710457802,801,425603,-526313356,193504011,-1559502175,2057374602,193897228]},{"sector":2,"data":[-1559462751,2122517392,359923718,143277699,-955744768,559622,-955847936,17336838,49120000,1562371467,576077,-2081649835,1448548076,294531,1586174325,-13107448,-1293417865,106859264,2013214719,11003906,-1962894103,931858526,-1962254709,63408959,-120504122,-1946532215,1586168391,38208264,-1980182208,1586232390,-1995994362,-972821946,-1980182208,1586229830,38243080,50749067,-784334265,-196703752,-1947580789,65130958,1086784449,-772222656,-330921480,-1962385781,-523173305,51011211,1586168391,38208262,-120504256,1183447249,175570926,1358579341,1357661837,1208239755,-11474864,1357661837,1358055053,-1962510593,1346896966,1593785832,1575324511,1426065602,-1957237621,-784333242,105286136,1074022027,1183447249,-2076278012,443809804,209991307,-422378831,956712587,1963894404,71731977,245924921,1048650356,8457348,117376125,915082372,45157508,1183573715,-1501263610,71731982,245925001,1575324510,503317698,1430622296,-1910575989,108462040,16777114,108461824,193476351,193607423,225946,108461824,193869567,194000639,230042,108461824,16777114,-1979267328,-2097151992,-443874579,-900899553,1478361090,-1957345904,-661774612,-1207535873,-1706033146,65535,-1207535873,-1706033145,65535,-26032,1996423168,-2009661690,-1976107253,-26101,1996423168,-1908998394,-1875443957,-26101,-310181888,535137026,46812509,16973832,65557,16973828]},{"sector":3,"data":[65623,16973843,65607,16973844,65688,16973861,65575,16973869,65569,196695,16711992,196741,16711858,1953300614,1167087646,518818645,-326903666,-2091493622,1946159230,1095719,-26032,-1073020928,113708669,61410268,199100103,216727720,198969031,113706826,12061662,722238113,-1995349498,-1072956346,-654899843,-1577302391,103484540,1183388004,2109737978,-1982269691,117439046,1048774796,2130839692,142508818,-2096335616,2130902142,-92372218,-955875838,560134,-1942060288,57933832,-16735511,-1710361546,160,-506231,-1710325194,65535,1358317193,16777114,-159973632,-1962116447,-787410418,1354836985,-1962115935,-787392498,1354836985,286406399,290993919,737703679,-11513664,-15999434,-1710498762,285,-1695123713,65535,209467019,-787392351,-1947194376,-1593017794,-120516334,1996486699,-11118838,-15658442,-15640522,1448605302,-1174396744,1347551436,16777114,-159973632,77210,-126419200,16777114,-2090902016,-443874579,-900899553,50333192,50338305,50358784,-16739328,50338560,16834561,50340352,16852225,50349056,-16717824,50364928,-16733952,1828750080,1167087646,518818645,-326903666,108954374,-385649408,113705198,2180,143132359,45613056,414732288,143041280,-773795431,-1706011950,73,-1207199581,-1202716670,-2103246592,1347590408,16777114,282501888,194526851,184841216]},{"sector":4,"data":[-2093713984,759870,922683764,2006584216,-2097152000,1103422,922683764,1520046294,-956301311,558598,-2113485056,-956301304,246278,-948573440,17023494,-1741226240,45718027,1183383552,-61437446,737828548,126428864,38242598,194524927,186522,175570688,110234,209125120,-1202667477,-11534334,-1710334410,449,-1559502687,-593293042,199401738,-1559162717,922684126,103485710,-1706029472,485,-1710459137,493,-1710590209,457,-1962742397,1297948645,503318730,1430622296,-1910575989,82609112,63061635,-11373568,-1710325194,65535,737953417,1996443840,-401698564,1996423362,-25860,113704960,962,-1710852353,401,104090,-1741226240,23304715,922681344,-6680362,721420543,142910400,-1559721821,-2036135806,49120008,1562371467,182861,1167087646,518818645,-326903666,108461828,16777114,-26112,1048772608,1946158018,108461904,16777114,-62486272,34904656,1996423168,1354771206,1342177976,241055487,16777114,-59310336,152474,108461824,-1694730497,65535,286144255,722538657,1343119366,16777114,108461824,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,-1036090620,1198784515,-1710852353,65535,143146627,-2093974016,1946159230,142016265,-402229505,1187448183,-352321284,142016274,-16353537,-1070859146,38791248,-1577302273,1178142856,-1671940,-6683018,-2097151745]},{"sector":5,"data":[-443874579,-900899553,-1957363708,82609132,-2009169066,108331016,143132359,-2002714623,104546312,628885638,194524927,143001219,143040792,-773795431,-1202695470,-1706033150,786,91602955,143011459,143171864,104546368,746522758,143132415,194524927,16777114,-62486272,-1946265975,-787969994,-60898074,-29324506,-16742106,-1710516170,65535,1575324510,-326412861,1443425411,143146627,-955878144,17336326,142778624,142870073,922690172,109056214,-1593767805,1385760898,178256,-26032,-1073020928,780207733,16779394,1074300065,142739003,117394815,922683524,1117391768,-1996488701,1451883590,-701038594,62691856,1183383552,-94991880,-1577290044,-523171704,-1960382461,83830300,-1963428156,-2010774458,-701038848,57907728,922681344,-208008296,1577058307,-1017256565,1167087646,518818645,-326903666,1996445192,21797390,1996423168,12425740,-823590912,106873856,637945599,1183319946,1963474168,-2009169051,58654728,-16730903,-1710516170,1183,-1980086647,915143766,-422508408,653942468,958791819,108396096,143134463,1589907691,-2009691142,652661000,251595007,922683524,-1248195688,-16777216,1996426870,-2009169140,108920840,1208518817,-1070923029,112720,2122339819,678759928,-1577170968,245566432,143171857,2016343880,-502922484,286302987,286144255,241174059,15768144,736821248,-1728559478,-956829557,527761376,-23992234,-16595837,1996426870]},{"sector":6,"data":[143171852,1048793160,1968638080,1354771368,-16766744,2122517070,58458122,-55575,10095734,-16777215,-124121482,1577058304,-1962742397,1297948645,1426066122,-326898549,922703412,-1365636200,-1996488700,1451883078,-701038596,10131984,1183383552,-363427352,-150583669,51148846,722132486,-1995546618,1988886086,-991506170,-1960379810,-398064896,-1981131125,1451879494,9119470,37763366,1996435060,1996444168,1217079020,1372072706,16777114,-465139456,-1578740087,-523170398,1183576203,-1983511580,-1031015354,149669379,16008903,209232128,-2081405303,1962935422,-2143386866,125065224,228736643,-2095549440,1946159742,142016274,738084491,1343070726,209204991,-2096978712,1409532990,-593424523,-532248310,66340491,-351609850,-1002536141,427119875,-1712044405,-120470997,-593366901,-1983501558,-593371066,-339344630,-1002536173,259347971,722132129,1183446086,182231520,-2081274231,1460174910,1996425333,178184,1996424939,112648,101685840,1048772608,1962937762,24832259,142622339,-2094566057,1946215550,142016289,-1948223745,103546438,-11530846,1996485750,6469872,1375797178,-26032,1996423168,-26104,1183383552,-128546314,-1710721281,65535,-1948023,28838006,-6664192,-1962934017,-523172282,-1946532349,1183448150,-564753956,-1962379521,1346953286,-100609,1996484214,-597768980,38243110,1342647078,422810,105286400,1174659281,-61436934,-1982314871,1996479062]},{"sector":7,"data":[-532247800,1996443712,-294191106,-991136001,-1960388514,723911239,-1516613625,-1962934266,-523172282,-1946532349,1183448150,-698971692,-16222465,1183572086,-11517698,1996484214,-731986708,38243110,1342647078,448410,105286400,1174659281,-61436934,-1982839159,1996477014,-529072376,1224623755,-294191280,-991136001,-1960390562,723911239,-6664185,-16776961,1183516790,-128545802,-755511049,-6664110,-1962934017,-523172282,-1946532349,1183448150,-833189428,-16222465,1996480630,-294191106,-991136001,-1960391586,723911239,1721389063,-16777209,1996425334,-159973384,453530,142016256,-1696434433,1458,1183527147,65065222,1452014150,-599356932,-2206071,1996425334,-25755680,-1149185,1589963894,1200301788,120268290,104962640,1183514624,286172146,-150583669,51148846,-1559502330,922685712,103485710,-1706029472,1082,194524927,498330,-701038848,148806160,-1956773888,146955749,-326413056,-16061309,1183647350,-1706027272,65535,243414783,523930,-163149568,721712895,-11513664,-15886282,-15883210,1347483254,-1174396744,1347551436,533914,-159973632,535962,1575324416,1426064578,-326898549,-2110324990,161454606,1183383552,142016510,-11485141,922682998,1996426648,-25755900,108461904,-1174396744,1347551436,16777114,-25755904,673690,1575324416,503318210,1430622296,-1910575989,250381272,-230242474,113704960,2180,143132359,45613056]},{"sector":8,"data":[414732288,143041280,-773795431,-1706011950,2173,-1207199581,-1202716670,-2103246592,1347590408,13466,282501888,194526851,184841216,-2094041664,759870,922683764,-1415967848,-2097151992,1103422,922683764,1738150102,-956301312,558598,-2113485056,-385875960,922681487,-426112104,-1996488696,1451883078,-94452484,-1993949141,1200170503,-1741226238,153917963,1996423168,159488518,1183383552,-128546314,1589914859,-163119114,-2012771802,-1073023930,171714164,1508377973,-1978405895,-1952910266,-523831312,1443329279,-2080782616,1191117508,-226590222,-897835200,-1710852353,874,956859041,2114487302,142910211,1074301089,143001147,-2036267138,-2002565112,-310157816,535137026,46812509,-1873273344,-326412987,-2116514274,1442889964,194526851,-385649408,1048773899,1962938582,84011267,194524927,626842,-196704000,-633207,-1710172618,819,-1981921655,922738774,681185632,-1996488703,-1705969594,918,16402119,-230242560,1187446784,-352321306,-431584394,1174659281,-162100236,-11499895,-11364727,-11493692,641174310,1946318649,-126419145,-1948367221,-972824490,-1960423342,-970259897,83466832,-2037841920,-1769341096,-1566441638,-1948200691,1485212656,-1983511553,-1031017402,149669379,15484615,209232128,31999625,1183576646,-330941958,1183516286,-96040468,-1578744065,1178142856,-8225562,2073753718,-16777212,1050343542,-2097151999,-2096956858,-1593642426,1178144152]},{"sector":9,"data":[-1593278470,1178144164,-1590395150,1183387032,228893178,-899447,-2037578122,-1202651300,-1202716544,726663204,-6664000,503316735,280148048,817385502,-6664192,-1593835265,1178143670,-1593281030,1178143672,-1958841102,1078000198,-230257840,-1202700224,1347420161,1347469355,16777114,-364476160,292864011,291518207,16777114,-364475648,-351182685,196518156,-1577433463,1183386552,1614217202,227777041,1183383552,-1466281736,-16777207,-1070860170,-26032,-1706033152,65535,737703679,-1957670720,1078000198,-230257840,-1202700224,-256245727,-1706012160,1514,-1694992641,1522,-1980873079,1187508310,-956300548,58950,-1962797847,-523114938,-1946925565,-2037778858,-1769341104,-1631256750,-1960378544,-565802185,65033867,-498693690,652498569,1946318649,-126419153,-1960423342,-970259897,166894160,-2037841920,-1769341096,-1566441638,-1948200691,1485212656,-1983511553,-1031017402,149669379,15484615,209232128,-2081929591,1409532990,-2033776523,196436,1048782827,1968505796,-96040179,-1712568789,-120470997,1048776171,1968571332,-96040180,1089226283,1418103104,-1572961281,57999373,-16699415,28899446,882528256,-16777209,1996486774,-294191120,847258,-431584512,1174659281,-162100236,-11499895,-11364727,-1946650881,1224692870,-59310256,-1804545,-1631264138,-1960378544,723911239,1838829575,-1962934260,-523114938,-1946925565,-2037778858,-1769341108,1996488526,1418103800,-11517697]},{"sector":10,"data":[1996487798,-495517724,-11755836,38243110,1342647078,828314,-431584512,1174659281,-162100236,-12024183,-11889015,-493825,-1946200906,1346960454,-1804545,-1631264138,-1960378552,723911239,-644198393,-1962934260,-523114938,-1946925565,-2037778858,-1769341116,1996488518,1421279224,-62485505,1996443712,-495517724,-12280124,38243110,1342647078,871066,-126419200,-1947318645,-789057450,1347605239,469402,-431584512,1174659281,-162100236,-12548471,-12413303,-493825,-43850,1996487798,-495517724,-12542268,1183524843,65065446,1452012614,1350994422,1385597439,-126418945,-11225345,-231681,1996481654,1352582370,1200301823,120268290,119249488,1191116800,-398029850,-1577302527,1178142856,-385647130,1996488161,171940600,1996423168,242260728,922681344,-2137386794,-16777203,-1710516170,1937,90979971,-385647360,922681583,-1600516478,-1996488691,-43386,-1710137290,1981,-506231,-1516632458,-1996488703,-11477946,-15882698,-15882186,-16009674,-16009162,-43338,-15882698,-1207064522,-860225504,-1706012160,3669,-1543879029,1183517622,196649970,51226273,722315782,-1727285754,-120470997,-1592940893,100863400,103484844,731450296,-1543974462,-1499394648,-1241119987,229286667,51226785,-1559513082,-2034758228,-1202708980,1344146854,16777114,-596181248,228996863,229127935,196491007,196622079,-1191676161,1347420161,-1174396744,1347551436,516506]},{"sector":11,"data":[-596181248,16777114,108461824,-1696827649,468,-1694992641,3705,-11094273,518554,-310157824,535137026,46812509,196641,16715110,196749,16714483,16973966,68595,196610,16714445,16973843,68609,196617,16714474,16973851,199315,16973825,133224,16973839,131736,16973840,133275,16973841,133315,16973842,134519,16973843,68388,16973853,68663,16973857,69080,196642,16714371,16973884,68356,16973869,68285,16973872,198580,16973857,196816,16973987,196945,16973988,198536,16973989,197518,16973990,197763,196775,16715357,16973896,68974,16973892,67072,16973900,200107,16973890,200296,16973892,68350,16973911,68396,16973914,200237,16973898,68478,1953300571,-2115204267,-1962894100,212012102,280514577,-1706025472,65535,-15816541,-1206842314,1344143382,13978,63742720,-1202667477,1385791234,-26032,-928841728,-6664189,-1711275777,65535,-16222465,-6683018,-1962934017,1175127622,-1206881272,1344144462,-16222465,-6683018,-1207959297,1344146114,16777114,-28931840,1685372939,243416707,-16157696,-1710325194,152,199507587,-16157696,-1710496714,168,179977859,-16157696,-1710573002,65535,16777114,204930816,-26095,20774912,-1710918400,65535]},{"sector":12,"data":[-1202667477,1344146866,504410808,3192912,-26032,1183514624,40888830,687747,922688373,-6680308,184549631,-1207011904,1344146114,1342177720,70810,-26112,-1073020928,-1028125067,-1202708982,-1706033151,65535,-10189171,716722198,-1706025458,103,184960651,158599238,637951684,1962950528,1686539533,-1202710785,1344146148,-2037576469,1343684452,-16222465,-6683018,-1207959297,1344145420,-10189171,-1070903274,1375784122,-1202696112,1347420260,1347469355,286013183,-6664112,-1996488449,-6620602,-2097151745,1962936958,204930849,-26095,-1073020928,837354356,180533249,28856350,-40218624,-385875968,1996423456,211073034,178256,30054992,1996423168,243709962,178256,31103568,1996423168,228636682,178256,32152144,1996423168,234141706,178256,33200720,1996423168,180140042,178256,34249296,1996423168,208582666,178256,35297872,1996423168,240302090,178256,-26032,1996423168,234403850,3323984,37395024,1996423168,200456202,5290064,38443600,1996423168,181975050,178256,39492176,1996423168,198883338,178256,40540752,1996423168,234272778,178256,41589328,1996423168,239908874,178256,42637904,1996423168,196392970,178256,43686480,1996423168,291289098,178256,44735056,1996423168,171227146,178256,45783632,1996423168,286439434,178256,29006416,1996423168,291026954]},{"sector":13,"data":[178256,36346448,-6684672,-1711275777,65535,16777114,-92864768,-1710983425,65535,-1694861569,65535,385238669,-26032,1183514624,-11517706,-6621066,-352321281,-92864719,245905151,384059021,-26032,-1073020928,1183652981,-397404444,1183645743,-1706027292,65535,384059021,-26032,1183645696,726669028,1347440832,16777114,1975520000,-1950340164,180510181,-326413056,2050917206,779354117,637820612,909719435,108266874,92026425,1589910645,2139170308,1946222850,2139170312,1962999810,73319433,637892769,-1956771959,79846885,-1864856576,-326412987,1473809950,106349830,-1274380604,1931595094,-18426,865076203,-2090924096,-443874579,-900899553,-661913592,-1957345904,-661774612,139904286,-1274657141,1931595069,-18429,49120031,1562371467,445005,1167120524,518818645,-987834226,1317734486,-851659770,-1207733471,-2095054849,-443874579,-900899553,-661913594,-1957345904,-661774612,-1274650997,1931595070,-18426,865076203,49120192,1562371467,182861,1167120524,518818645,1455806606,-851332090,-1207536863,65798143,-2084555888,-443874579,-900899553,-661913596,-1957345904,-661774612,-1274650997,1931595077,-18429,-1962742397,1297948645,-1946156342,1430622424,-1910575989,1586175704,139904268,-1274655093,1931595071,-18429,49120031,1562371467,576077,1167120524,518818645,-1960912754,1455754334,105810696,567099572,-4717709,-310173697]},{"sector":14,"data":[535137026,147475805,-1864856576,-326412987,114855454,-1005822325,-1047787434,-1274657141,1931595074,-18428,-310179943,535137026,147475805,-1864856576,-326412987,-1260876258,69324057,-310142911,535137026,516640093,1430622296,-1910575989,142016472,-16353537,1996426358,48621578,-1962742397,1297948645,503318730,1430622296,-1910575989,142016472,-16353537,1996426358,35710986,-1962742397,1297948645,2250,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,-1643722965,-1996488696,1460178958,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-96147449,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,1527,-1017256565,-1192457387,-1957691328,1861682246,781864966,-1962934266,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,1597,-1017256565,736922453,1996443840,-26108,-443875328,-1957313699,74907628,16777114,1575324416,-326412861,-1710983425,1702,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114]},{"sector":15,"data":[-402345728,-443874901,-289684643,-184844024,1393062664,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1074315919,-1007912629,567095476,-1022843741,144574094,741772070,889239552,512303565,109840530,521013396,-1171980104,567084416,-468808906,908256008,149292741,-617358708,-501285066,-385649912,-986251703,-1945572858,244698,-501285066,-1021372920,855643321,-1031276837,74711304,567099060,-1007492541,-387151019,1996423504,18147332,-1017256565,1475119957,-13413546,184960651,-149783104,72780759,-621291273,-1996488675,1451820614,172395268,310231051,1452005367,-136775928,7642,-1995815287,-1073018794,1317738101,105286408,-235417037,1183570059,-1947076860,-1875055661,1317787787,106334984,-788248949,-774254101,198758890,-134973989,871402481,-11513134,1996425846,14477320,1996903995,990409223,58065990,855764611,197561298,-150506241,-2082932774,1583022298,146955615,-326413056,-617392553,184960651,-149783104,72780755,-621291273,-1996488675,1451820614,172395268,310231051,1452004343,-136775928,7642,-1995815287,1317734486,-1948125436,138841080,-503844725,-141100541,-134019482,-963913845,125098763,-654845193,1577114243,146955615,-470994432,-773140218,-1006968104,-387151019,1021837416,1961102077,75399178,-972786432,519963718,143791813,-853213000,243998497,132319460,-16776517,-1962352098,1286865990,-189062707,-184844024,1393062664,1130043391]},{"sector":16,"data":[-1007490237,1458342741,-1962260853,-503905202,1183570059,-135230712,-1764097055,50751223,-1949070376,-1034068282,-189071352,-151289592,1393062664,1130043391,-1007490237,16973867,197445,196716,16711748,196624,16711872,16973841,197420,196721,16711853,16973842,197430,196722,16711816,196627,16712067,196628,16711938,196629,16711915,196630,16712082,196631,16712409,196632,16712404,16973849,132488,196609,16712399,16973850,197356,16973948,132576,16973829,132621,16973830,132636,16973831,196822,16973825,132684,16973834,198065,16973829,132708,16973839,132735,16973841,132759,16973844,197366,16973841,132801,16973849,132523,16973854,131254,16973872,196987,16973865,197348,16973866,196645,16973997,131786,16973878,131185,16973879,131495,16973880,196628,16974001,197398,16974002,196671,16973893,197379,16973894,131151,16973903,131364,16973912,131411,16973913,132493,1953300571,0,5,0,0,1701012321,1869480044,1818324338,1969422336,1918987634,1660970353,1634497141,7304051,1953658211,7632997,1752331619,6581857,1886549347,1818455653,1920295680,1935766117,1969422437,1852402802,1969422437,1970430578,1660971123,1681093237]},{"sector":17,"data":[1920295680,1852399984,1969422452,1819308914,1660972649,1886614133,7954802,1668445539,1936945010,-1114112,-524355,-8650786,-4325393,-9,-1,-1,-1,-3342337,-13369498,-3342439,-13369498,2031513,3145767,4194360,5374025,6488154,7471209,8650875,0,0,0,0,-1,-1,-1,-1,34952,8738,34952,8738,-32897,-2057,-32897,-2057,572688520,572688520,572688520,572688520,-34953,-8739,-34953,-8739,-1431677611,-1431677611,-1431677611,-1431677611,-572688521,-572688521,-572688521,-572688521,43690,43690,43690,43690,-43691,-43691,-43691,-43691,858993459,858993459,858993459,858993459,65535,65535,65535,65535,286361736,1145315874,286361736,1145315874,-286361737,-1145315875,-286361737,-1145315875,1061109567,1061109567,1061109567,1061109567,-65279,-1,-65536,-1,-808497586,-454755076,1061103399,1920136179,-50561410,-202114567,-808458265,1061134239,-269516929,-538968579,-134742274,-67387457,-52429,-49345,-52429,-49345,2004287488,2004318071,2004287488,2004318071,1061093376,1061109567,1061109567,1061109567,-202178560,-202116109,1061093376,1061109567,-505285645,505334988,2122202943,-101057284,-49345,-1,-49345,-1]}]],[[{"sector":1,"data":[-65536,960068732,-943221869,-4113,-1616953537,-12337,-202114567,-6169,-2021142577,-52429,-50528257,859011192,-1718010820,-1717976125,2088516668,2088566012,2071723260,-808470601,-33688589,-16843010,-1953820913,-1195844131,-387420048,-1903239715,1044266558,-1044276068,-471604253,471648713,-909566948,-471604253,-1667448383,1044266558,-538972177,1431677867,-33751040,-134743045,1987479688,1886417008,1734838408,252645135,-134742017,-707400725,-707417430,-134747157,-134744073,-134744073,-134744073,-134744073,1852994915,7105653,1886152008,1698955264,1701013878,1767985152,1140880494,1667855973,1767309413,2003788910,1648427123,1349808751,1953393010,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,62521344,-65536,262144,24,84]},{"sector":2,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,0,1,0,0,-65536,0,0,0,0,0,0,589829,327685,327685,131074,-65534,-1,196607,131074,196611,-131069,-65538,262142,196611,262148,-196604,-131075,327677,262148,327685,-262139,-196612,393212,327685,65534,65534,131072,131072,2,2,-131072,-131072,65534,-3,131069,262143,196609,65539,-65533,-131070,-65538,-3,-4,131068,327679,262145,65540,-65532,-196606,-131074,-4,-65541,196603,393214,327682,131077,-131067,-262141]},{"sector":3,"data":[-196611,-65541,-65536,131072,131073,-65535,-65536,-131072,196608,196609,-131071,-131072,-196608,262144,262145,-196607,-196608,-262144,327680,327681,-262143,-262144,65534,131070,65537,1,65534,65533,131069,65538,2,65533,65532,131068,65539,3,65532,65531,131067,65540,4,65531,-2,131073,65538,-65537,-2,-65539,196610,131075,-131074,-65539,-131076,262147,196612,-196611,-131076,-196613,327684,262149,-262148,-196613,196606,-65535,-131072,131069,196606,262141,-131070,-196607,196604,262141,327676,-196605,-262142,262139,327676,393211,-262140,-327677,327674,393211,105645516,117180076,127665996,103286200,115869336,126355256,100926884,114558596,125044516,98567568,113247856,123733776,0,1886611812,7954796,1953784144,544109157,1953064005,774504448,5264205,1397587548,1412300880,20557,1852399952,1631780980,1935767150,1632632832,1953785196,1632632933,1768179060,1868169332,1968139631,1868169332,1850305903,0,1294871132,20563,1701603654,1852141647,1632632832,1299476073,1819632751,1766195301,1632855404,1933665654,1347636480]},{"sector":4,"data":[0,65535,1967259648,1852798068,1953841664,7237492,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,115343360,117442296,1509196,62259203,5570815,61997059,5636351,61734915,5701887,61472771,5767423,61210627,5832959,60948483,5898495,60686339,5964031,60424195,6029567,60162051,6095103,59899907,6160639,59637763,6226175,59375619,6291711,59113475,6357247,58851331,6422783,58589187,6488319,58327043,6553855,58064899,6619391,57802755,6684927,57540611,6750463,57278467,6815999,57016323,6881535,56754179,6947071,56492035,7012607,2004055149,1802398835,131331,2097152,262176,-65536,-2097153,-3145729,-3670017,-3932161,-4063233,-4128769,2143354879,1069613055,532742143,264306687,130088959,62980095,29425663,12648447,12648447,12648319,264306495,264306687,130088959,130285567,63438847,-2083520513,-2116026369,-1040187393,-1056964609,-520093697,-520093697,-251658369,-251658369,-129,-1,65535,0,0,0,0,524288,786432,917504,983040]},{"sector":5,"data":[-2146500608,-1072758784,-535887872,-267452416,-133234688,-66125824,-32571392,-1072758784,-1072758784,-536084480,1611137024,1879048192,805306368,939524096,402653184,469762048,201326592,234881024,100663296,117440512,0,0,0,1953300480,259,2097183,262176,-65536,-1,-1,-57346,-63492,-64520,-65040,-65040,-65056,-65088,-64640,-16840960,-50393344,-117489920,-251691264,-520093952,-1056964863,-2130706685,16776967,16711439,16580383,16318271,16318335,-1040973825,-1007157249,-941096961,267386879,1070399487,-3080193,-8126465,-7340033,-12582913,65535,0,0,0,49153,61443,63495,30720,14336,4111,32799,32831,32895,16777471,50331902,117440764,251658488,520093936,1056964832,2130706624,-16777088,-33488896,469762048,-670892032,-804847616,-1073283072,983040,786432,1048576,0,0,0,1953300480,983299,2097167,262176,-50397184,-50331649,-251658241,-251658433,-1056964801,-1056964849,16776975,16776963,16580355,16580352,15793920,15744768,12599040,12586752,3840,768,12583680,12586752,15732480,15744768,16531200,16580352,16776960,16776963,-1056964861,-1056964849,-251658481,-251658433,-50331841,-50331649,-1,-1,50397183]},{"sector":6,"data":[50331648,201326592,201326784,805306560,805306416,-1073741776,-1073741812,-66912244,-66912001,-66322177,-66273028,-63913732,-63950596,12595452,12585984,-63960064,-63950596,-66309892,-66273028,-66862852,-66912001,-1073741569,-1073741812,805306380,805306416,201326640,201326784,50331840,50331648,0,0,1953300480,1048835,2097174,262176,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,-536805376,-268337145,520126479,251658488,16777456,16777344,16777344,16777344,16777344,16777344,16777344,16777344,16777344,16777344,16777344,16777344,16777344,16777344,251658368,251658480,16777456,16777344,251658368,520093936,-268369672,-536772593,32775,0,1953300480,983299,2097167,262176,-65536,-1,-1,-1,-1,-1,1073741823,1073741811,-196621,-196612,-4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-196609,-196612,1073741820,1073741811,-13]},{"sector":7,"data":[-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,855834624,855834675,50331699,50331648,50528256,50528259,3,0,-268238848,-268238785,63,0,50528256,50528259,50331651,50331648,855834624,855834675,51,0,0,0,0,0,0,0,1953300480,983299,2097167,262176,-65536,-1,-1,-1,-1,-1,-1929379841,-1929379889,-65585,-65553,-458769,-458760,-262152,-262149,-458757,-458760,-262152,-262149,-458757,-458760,-65544,-65553,-1929379857,-1929379889,-49,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,201326592,201326784,-956301120,-956301300,117440524,117440512,117637120,196611,-268435453,-268435336,196728,117637123,117440515,117440512,-956301312,-956301300,201326604,201326784,192,0,0,0,0,0,0,0,1953300480,259,2097152,262176,-65536,-1,12648447,12583680,12583680,12583680,12583680,12583680,12583680,12583680,12583680,12583680,12583680,12583680,-64768,-1,-1]},{"sector":8,"data":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,786691,2097165,262176,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,402653184,402653184,402653184,402653184,402653184,402653184,402653184,402653184,0,0,-2122383360,-2122383106,254,0,402653184,402653184,402653184,402653184,402653184,402653184,402653184,402653184,0,0,0,0,0,0,0,0,1953300480,1638659,2097181,262176,-65536,-1,-1,-1,-1,-1,-1,-1,16711679]},{"sector":9,"data":[16580381,15793934,14745345,12648192,8421127,8421135,12615455,14712639,15761279,33062911,66879487,134119423,268402687,-1073774593,-32769,-32769,-32769,-32769,-32769,-32769,-1,-1,-1,201392127,503316480,1056964608,1929379840,-520093568,-1073676096,-2147286816,458864,-15794120,-14745348,3145982,6324225,12615680,8388615,8388623,12582939,6291507,3145827,18350275,51118211,101056515,201523203,-1207894013,-268435453,3,3,3,3,1,32768,0,0,1953300480,259,2097152,262176,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,2,5439981,16842814]},{"sector":10,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8454144,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,534839263,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268492832,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-1882718241,-4097,-524289,-67137537,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268449905]},{"sector":11,"data":[-1,67043319,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-408944673,-4097,-524289,-67127048,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268441697,-1,-18612233,-1217,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-65553,25161983,-1088425729,1056964800,396427231,-4097,-524289,-74453362,-1,-3,-257,2147483647,-12648193,-65,-117448705,-1048829,-251691012,-251723393,8437535,-2154752,-268494944,-1,-12583177,268368867,-194561,-16777217,-1,1073512447,-4194545,-536870913,-990721,2147352559,528478463,-1088421889,536801415,-2021523489,-4097,-117966337,-72303685,66848764,63741,-2130739712,2147418368,-1835023,117505727,-939532289,-1081348,-251707399,-57473,-267403489,-2158593,-268449913,-503316481,-7689,-1007092740,-100851204,2130640895,-117497857,-1605633,-121634823,-536886977,1073651711,-1074003985,528478463,-1088421889,-1879052257,662765535,-4097,-956857345,-70193426,-117906959,-1539,1073643262,2139094271,-196657,-117448257,1073733503,-1097729,-251682829,-57473,-251674849,-2097153,-268488816,268369919,-15369,-235668544,-100795143]},{"sector":12,"data":[2130640895,-16809988,-6324417,-943751170,-549454081,1073709054,-537395217,-8392449,-1073741825,-3841,-1882718241,-4097,-1057538056,-83836933,-51250717,-1667,-229634,2134900735,1073741631,-24641,-204897,-1081360,-251670553,-129,-251674625,-2097153,-268464185,-2031617,-62930697,-35390720,-109183245,2130640895,-4,-12615873,1069498367,-540016641,-4063236,-269484049,-8392449,-1073741825,-3841,-808845345,-4097,-990380157,-83824626,-17563677,-1667,-229634,2134900735,1073741631,-32834,-401433,-1048673,-251664433,-129,-251674625,-2097153,-268447799,-15728897,-1069300489,-1836288,-113377565,2130640895,-4,-12615873,2143174655,-538443777,-6291463,-136314897,-8392449,-1073741825,-3841,-808714273,-117444609,-1040711873,-83886064,-18350109,-1731,-229634,2134900735,1073741631,-32834,-401433,-1048625,-251661409,-129,-251674625,-2097153,-268447797,-7937,1098231,-1836288,-113377593,2130640895,-4,-12615873,2143174655,-538443777,-1572871,-71303185,-8392449,-1073741825,-3841,-808714273,-2080378881,-990380033,-83886012,-24117261,-1731,-229634,2134900735,1073741631,-49217,-401457,-1048589,-251659969,-129,-251674625,-2097153,-268447797,-61442,4506871,-918784,-113410530,2130640895,-4,-12615873,-1614856193]},{"sector":13,"data":[-543162369,-393219,-41943057,528478463,-1073741825,-3841,1338572767,1073278975,-1040711681,-83886064,2115960568,-1731,2147254014,2134900479,2147418015,-16789569,-204993,-17825796,-251659137,-57473,-251674849,-2097153,-268480552,-32,1098231,2096691968,-109233090,2130640895,-50380802,-3178625,-473956356,-545261313,2147418110,-16777489,528478463,-1088421889,-3841,264306655,-3936257,-990380033,-83886012,410910972,-1667,536837886,2147481855,-393241,-1052772161,2147409919,-51412994,-260047105,-57473,-251674849,-2097153,-268496960,-49,4506871,16710400,-117636865,2113929216,16810239,-950273,-20971549,-536934656,2147368959,-529,25161855,-1088425729,-3841,534904799,-4097,-1040711681,-83689456,-2113994241,-3,-257,2147483647,-15777796,-65,-1610620929,-118489092,-264306688,-251723393,-520110305,-2097281,-268492831,-1,1110519,-1265,-131073,-16777217,-1,16744447,-4194497,-536870913,-405505,-17,-8392449,-1073741825,-14712577,1072824287,-4097,-50855937,-79757244,-1,-3,-257,2147483647,-1,-65,-520101889,-1048829,-251658241,-129,-2130722817,-2097377,-268484623,-1,327671,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449]},{"sector":14,"data":[-1073741825,-1,2147024863,-4097,-524289,-67173440,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268468232,-1,267452407,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-196641,-4097,-524289,-67158020,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-52428801,-268435580,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,61695]},{"sector":15,"data":[0,0,0,0,0,0,0,0,0,0,0,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-15729409,-9,-1025,-134145,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1537,-33,-50335745,-524529,-67108865,872415231,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,535887743,-100679681,-2097153,-268435457,-15729409,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073806592,-3841,-33,-50335745,-524529,-67170308,-1,-3]},{"sector":16,"data":[-257,2147483647,-1,-65,-8193,-1048577,-251658241,-2146764673,-520110081,-2097281,-284172033,-11534849,1677262839,-117441537,-156671,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-260050689,-1082146726,-12599041,16777183,-33558781,-524465,-67143184,-1677592321,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658242,1349370239,16760703,-2097393,-274658562,-15729409,2095513591,150535167,-131327,-16777217,-1,16744447,-4194497,-536870913,-16516865,2147287023,-2088767233,-1086368659,-3841,720961503,-50335839,-524529,-75546929,-15790096,-3,-257,2147483647,-15785220,-65,-520101889,-1048768,-251691012,-1459911041,-251674817,-2097153,-284622608,-3146241,-1616904201,2145450815,-117574897,2113929216,16810239,-1997504513,-20971645,-536934656,2131804671,1073283055,-1887440641,-1086347013,-3841,-1427963937,-33558647,-524337,-73412801,-217055264,286390781,301956624,2147422225,-7763744,17955007,-1845501953,-1097968,-251674632,-587296897,-252199105,-2097154,-282481982,-15729409,-411042057,-253690929,-117571840,2118403140,1145324798,583171967,-457179360,-545307580,1061422335,536018927,-2021658369,-1086336834,2147414247,-1433731105,-50335965,-50856177,-68683265,2130764000,1145370877,1157398084,2134852676,2132943490,1145357503]},{"sector":17,"data":[1157553983,-1097916,-251715598,-1040743553,-255344833,-2146306,-274487286,-15729409,-50333193,-1007617177,-100843620,2114982161,286331388,-2012709057,-1849737336,-551612143,2131759612,-1881079825,-2139098881,-1086389770,536801415,-1473577249,-117444697,-252182777,-83820544,1067370488,286390781,301760016,2134839569,1065912328,286331327,301784847,-1048831,-251686936,352370815,-267927745,-52490242,-275799510,-16518913,57591,-939984127,-117620834,2118403140,1145324796,572686143,1153318690,-548977596,-15776520,667090927,-528486145,-1136658688,50331648,-1565853473,-520097889,-1057489149,-83820544,1067370488,1145370877,1157398084,2134852676,1059201570,1145324734,1157160775,-1048801,-251713598,-618733441,48767,-253819136,-281048406,-14425857,49399,-939984111,-100843618,2114982161,286331388,-2012709057,297680776,-553185007,-15789575,-2088173585,-528486145,-1082139978,268365831,-1968512289,-1056968833,-520618205,-80674816,1057014520,286390781,301760016,2134839569,1065912328,286331326,301522695,-1048825,-251688056,-23084673,-259538945,-1025564674,-268490582,-14434049,61687,-956302479,-117620992,2118403140,1145324796,572686143,79642402,-548453308,-12368648,555941871,-1015025409,-1073761059,1073672391,699042527,-1056968705,-117965021,-68091904,1057015551,1145370877,1157398084,2134852676,1059201570,1145341119,1157422879,-1048767,-251715294,-34633857]}],[{"sector":1,"data":[-253247489,14647294,-268459264,-16260865,16841975,-956302351,-100843776,2114982161,269554172,-2004320449,-1044414584,-549515247,-15724036,-2012676369,528478463,-1073751578,-69385,-1493106466,-251662337,-17301753,-68091136,1057015551,286390781,301891088,2139033617,-7829304,269607359,301916031,-17858800,-251688824,-1276690562,-251674625,719257599,-268464215,-15730433,117506039,-956302351,-117620992,2118403140,1078199551,585269247,-121635039,-536919804,2135180542,572718319,2138894463,-1073760265,-3841,-1616876834,-117444609,-524529,-68087936,1057015551,63741,-2130739712,2147418368,-14474510,117505727,83877887,-51413180,-260103390,-403439752,-251674625,719257599,-268484704,-14680833,532742135,-1023411215,-180480,-16777217,-1,150765567,-4194545,-536870913,-15691265,63727,-8785857,-1073747975,-15793921,2139097822,-50335745,-524481,-68075552,1057014015,-3,-257,2147483647,-12648193,-65,-1040195585,-1048815,-251658241,-201523329,-1056980993,-2132803777,-268435711,-8389377,2146500599,-520094735,-164096,-16777217,-1,-32769,-4194305,-536870913,-16523009,-17,-8392449,-1073792514,-8396545,-33,-50335745,-524289,-68026376,-16715521,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-2113929345,-251674625,-2097153,-268435457,-61956]},{"sector":2,"data":[-9,-1039,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1537,-33,267448319,-524289,-67502081,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-100679681,-2097153,-268435457,-33024,-9,-1031,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-16650241,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-251658241,-129,-16385,-2097153,-268435457,-1,-9,-1025,-131073,-16777217,-1,-32769,-4194305,-536870913,-1,-17,-8392449,-1073741825,-1,-33,-4097,-524289,-67108865,-1,-3,-257,2147483647,-1,-65,-8193,-1048577,-218103809]},{"sector":3,"data":[0,0,0,0,0,0,1953300480,1819506547,257,4194304,524352,-65536,-16269057,-1,-16711426,-1,520093936,-1,50331776,-16777217,0,-50331649,0,-251658433,0,-1056964849,0,-2130706681,0,16776963,0,16711425,0,16580352,0,16547584,0,16269056,0,16260864,0,15732480,0,15732480,0,14681856,0,14681856,0,14680832,0,14680832,0,12583168,0,12583168,0,12583168,16777216,8388848,50331648,8388856,117440512,8388860,117440512,8388860,117440512,252,117440512,252,117440512,252,50331648,248,16777216,240,0,0,0,0,0,0,0,0,0,0,0,8388608,0,8388864,0,8389376,0,12583680,-268238848,12584704,-133758976,12586752,-32571392,14688000,-15794176,14696320,-14745600,14712800,-14745600,15794175,-12648448,15794175,-12648448,16318463,-8454144,16318463,-8454144,16580607,-65536,16711679,-65280,16777215,-64768,-2130706433,-63744,-520093697,-57600,-117440513,-49408,-1,-256,-1]},{"sector":4,"data":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,16547584,0,-2130706685,0,-520093937,0,-117440705,0,-16777217,50331648,-1,117440640,-15728641,251658464,-16253185,520093936,-16515841,1056964856,-16647937,2130706684,-16647937,-16776962,-16647937,-16776961,-16647937,-16678657,-16515841,-16662273,-16253425,-33431297,-15728889,-66854657,-253,-133959425,-255,-133959425,-16777471,-133697521,-117440767,-133695485,-251658495,-66586623,-520093949,-33032192,-1056964857,-16287744,-1056964849,-15763456,-1056964609,-15763456,-1056964609,-15763456,-1056964609,-15763456,-1056964609,-15763456,-520093697,-15730688,-251658241,-15730687,-117440513,-15730685,-16777217,-15730673,-1,-15732481,-1,-15732481,-241,-32513793,2146500359,-66592513,266403587,-133701377,65076993,-133709569,12648193,-133988097,8453889,-134021057,8453889,-66912250,65283,-33488896,65287,-16711680,65039,-16777216,65279,-16777216,64767,2130706432,63743,1056964608,61695,520093696,57599,251658240,33023,50331648,254,0,248]},{"sector":5,"data":[0,0,0,0,0,0,0,0,0,0,0,1953300480,1818838544,503316581,2003127808,2031616,1852141647,3026478,1392517120,6649441,1392517376,543520353,774796097,578813998,1769099264,268465262,1953064005,2752512,1868852821,543707913,6517573,0,1157638912,1702060402,0,2883840,158627139,7103812,1124084993,158953583,12870,1632632878,157643891,7564873,1124085505,1918985580,0,3145984,1702260297,16807026,1918107697,543515489,1701274693,838926451,1768703488,1866997872,1870293362,1818326126,3375360,1885957190,1919243808,1633905012,905969772,1852786176,1107296372,1852786176,2053722996,1393557605,1701607796,5113856,1767992400,893782382,5177344,1684827970,3556873,1224757248,1768710516,927336803,5308416,1701080661,1852402802,944114021,5373952,1819571535,6647401,1392530176,1802072692,1953853285,0,5507072,1734962241,1701585006,29798,1816199253,544106345,1953391971,29285,1816199254,544106345,1751607666,116,1460142080,1634750208,6649201,1409308800,1936613746,1701994864,268465262,1701601616,6648948,1342200320,1702130785,779316850,1175006766,1526726707,1852394496,1767317605,1936225380,154021422,13382,1916928092,543716213,1885431891,774796133,1568669742,1869566976,774796140,1334837294]},{"sector":6,"data":[1869182064,29550,1868169318,1226861935,960891246,6750208,1836019546,1953845024,808535561,0,6883328,1193307982,6580594,1174432256,543518313,1684632135,7012352,1768187213,1193307509,6580594,1124101120,1936875887,1917263973,25705,0,1682243694,1344304233,1702130785,774794866,46,1879048192,1919895040,1769099296,1919251566,7438336,544370502,1701995347,1828744805,1937208180,1835757164,-1874853887,167774726,1342215168,0,131118,786532,8388611,-8302461,67108864,1174410240,83900928,-1560280320,16745296,5701632,3276840,65550,1342373889,1701859200,1459617902,838875648,33558016,50331648,1631813712,1818583918,5111808,3932180,262156,1342308352,33554562,671089664,-16774144,33555199,1884258896,1176530533,979725417,1953300480,-1874853887,134218757,805348864,0,983052,786536,8388611,8474755,251688960,234889984,16777472,-2142240000,1702256979,7864320,2293793,131086,1342373888,1851868032,7103843,33574912,201345024,33555456,-2108685824,786432,3932162,-65524,1342308352,1986089858,1766203493,1092642156,14963,2004055149,-1874853887,419436806,1308662272,0,327680,524442,131071,1300385794,1869767529,1952870259,1852397344,1937207140,0,10092558,-65528,1342308353,1767985282,29806,1507337]},{"sector":7,"data":[262143,1350717440,1953392993,1966080,6160418,-65528,1342308353,1919243906,1852795251,808333600,49,-1711264000,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989871360,234889216,16777472,-2142240000,27471,-1865940992,335549444,1073764864,1342177280,1953392993,738204928,234889216,16777728,-2142240000,1668178243,27749,524288,524378,131071,1401049090,1768189541,26478,1179648,524378,65540,8540162,469762048,134240768,33554176,-2108685824,1881173876,1953393010,1869640480,1919249519,1828716590,1937208180,1835757164,1632634880,544501353,671752237,1769238133,1684368500,1632634153,91516521,1852399952,1800340084,1851867910,141321571,1970233921,774778484,1852786184,2053722996,1866859621,1310946414,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,544109938,1852399952,520105588,544501582,1970237029,1830840423,1919905125,1869881465,1853190688,1767985184,439252078,1852727619,1663071343,1952540018,543236197,544695662,1986945379,1124889441,1869508193,1886330996,2125413,1851867916,544501614,1702257011,1376845856,1634496613,1696621923,1953720696,543649385,453000961,544434464,544501614,1635131489,543451500,1852399952,1768300660,355362156,1702256979,1920295712,1953391986,1634231072,1936025454,1059062304,1763711232,1818304627]},{"sector":8,"data":[1684104562,1700929657,543649385,1953064037,355361893,544501582,1635131489,543451500,1701603686,1701667182,1311440928,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,1953064037,1869504800,1919248500,1818846752,1124937317,1869508193,1919950964,779382377,1953451551,1869505824,543713141,1802725732,1634759456,1948280163,1919950959,779382377,1953451547,1869505824,543713141,1869440365,1948285298,1919950959,779382377,1767985201,1663071342,1869508193,1634738292,543519859,543516788,1953394531,1937010277,543584032,543516788,1885957187,1918988130,1344417380,1953392993,1851876128,544501614,544503139,1948282740,1126196584,1651534188,1685217647,1632641838,544501353,1852727651,1663071343,544829551,1948282740,1126196584,1651534188,1685217647,1750345262,1881174889,1702130529,1818851104,1986994284,1920430693,543519849,1920298873,1851876128,779313526,2019906601,1936269428,1869575200,1734959648,544175136,1953718640,1852383333,1948282740,1998611816,1868852841,1310404215,1696625775,1735749486,1701650536,2037542765,544175136,1953718640,1310600805,1696625775,1735749486,1768169576,1931504499,1701011824,544175136,1702257011,32,0,1953300480,704649989,3014912,755040300,16788992,2949233,1509978625,7536896,1946222683,16797184,5177461,1342207489,7799040,2013331537,-2130680320,6750329,2004055149,-129595009,1183554795,-2090901768,-443874579]},{"sector":9,"data":[]},{"sector":10,"data":[3562061,26,32,65535,-333119488,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":11,"data":[1409297384,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,221148023,240788490,-855002081,1275181089,8653]},{"sector":12,"data":[279886,1835250,191264114,131078,268435968,74012,131072,196610,4194397,13631568,14745819,1294,589828,0,0,0,593821699,593821968,104202262,180224017,-2147418108,1,52690944,-265289711,32769,-2147287040,1,53805056,-265289663,32771,-2147221504,1,58064896,-265289722,32769,-2147155968,3,58458112,-265289720,32769,58982400,-265289721,32770,59441152,-265289716,32771,-2147090432,1,60227584,-265289721,32769,0,1447383559,1230197317,16777216,201328640,1258684416,1162760773,1145504588,1398080585,-16494011,20958465,-855565366,308019519,20958465,-855572480,3539263,1294270464,1869767529,1952870259,1852397344,1937207140,1986351648,1769173605,1886404896,1633905004,1852795252,1225195520,1195723852,281665,1329742085,218197,1447383566,1230197317,1346653783,21188434,1313410560,1397900630,1397050693,1162297683,1828716546,1937208180,1835757164,1818978915,1936483443,1299014754,1330791241,1413893971]},{"sector":13,"data":[1167087646,518818645,2122438798,1963004172,242679569,1342177720,20378,112640,2122385899,1946226700,-2084557836,-443874579,-900899553,1478361098,-1957345904,-661774612,286031489,-15633151,28839542,-6664192,-1207959297,166395905,269254273,737440769,49120192,1562371467,707149,-2081649835,113713900,2408,-1710983425,647,1358841481,1342180024,16777114,-6664192,-16776961,1183710838,-1706027298,65535,-1545714037,1183517038,158770152,-16484609,1067122294,-2097151997,17394238,1721830261,164274953,-351673695,166633737,-1593193821,-593294880,2996233,164507383,-1207317341,-397408698,-998045158,-402209022,-956296183,17437702,-569981184,-956290807,17394694,2734080,74907472,-2096961560,28837060,1575324416,-326412861,-1960907645,10683974,71731978,-16107357,-1207304138,-1706033150,669,-1929087233,1343682118,16777114,-96040192,-1980348885,-794565562,-62485751,-1980217813,787997254,1178274254,-1591509276,1178143180,-1996259868,1183573062,179935716,-1543899392,-1952905662,-150352370,105161721,681647851,-498714368,1183384445,-498693150,702873,1151597047,-835782906,105030409,-1324989279,-1981754621,1117908038,-1981754618,1183579718,515480044,-1543899392,1183517138,-465159682,1183518078,-28955676,-775804007,721611768,166765504,971785867,226419270,736249483,731507782,-336014910,-1547687166,1186466292,-1108848634,46433030,157826691]},{"sector":14,"data":[-13995008,-16121290,-401997770,-998043787,108461828,1347469355,164640511,158217983,-1174402632,1347551317,16777114,1575324416,-326412861,-2096305021,4158,-1377238156,71731969,-1962264413,691865158,2121823232,24832259,1962939453,10676483,1946164797,25880847,-402360577,-998042858,25094402,-1207666945,1344146070,16777114,1812383488,-16776951,211420278,-1996488701,10745414,302434058,1342177280,1342177976,203930,-159973632,-2096097048,113705668,1313256,1342588600,-2096608792,1186464452,-169324538,46433029,-956244247,17437702,2734080,74907472,-2097079320,300483780,335988481,-1207959030,-387252182,169084615,750256132,-941757696,101323782,3061760,1048826603,1947470312,11200771,-1710983425,869,-1544141175,-1202714112,-1706033150,65535,1050311,1996423169,261351670,-16595837,-1710626250,923,-16484609,-6621578,-1207959297,-1202715066,-1202716652,-1202716670,726663171,28856512,-4697984,-236433281,74907418,16777114,-163149568,-1207304029,-11532730,-1207303114,-1202716669,-397410302,922682018,1186466308,1996443654,74907638,-2097113368,922683588,-6682132,-956301057,4102,74907392,-1695123713,179,922696939,45614656,1347590400,-16484609,-16109002,-1710608330,65535,708649195,-385649408,742260487,-385649408,775814922,-385649408,842923789,-385649408,-443810186,-1957313699,49054700,-1710983425,65535]},{"sector":15,"data":[1358841481,165558015,-1705983957,1051,-100609,146278006,-6664192,-1962934017,-559741370,1575324425,-326412861,1443687555,720783047,-402209024,-956296183,1375302,1996437739,-193528056,1342177976,1342178232,186406888,-1962380096,-391908282,-14947575,1996425334,243956,178256,473622608,108314635,-1980479861,1586232390,-163150858,-1995994366,-1072958394,1048819829,1964247528,176063351,-2096729068,1964309630,-96024733,1187446784,-956301058,784454,-1946657141,947914870,-16419582,250346054,-1946657141,947914870,-16550653,1191181894,-125926408,-1948680616,1178205766,-1962115334,1177287238,-2034740994,-1959924982,1178205766,722042362,-1202652602,485165600,-1202667477,350947898,-1202667477,216730282,336232067,-1070918795,169261136,108461904,-402360577,-998046053,-443851256,-1957313699,317490156,384714381,1354771280,28856400,-6664192,184549631,-2096139072,1964175486,1354771213,-2095247384,-1070923068,1183651819,-1706027282,65535,384714381,-26032,28835840,1575324416,-326412861,1460071555,-28915882,1187446784,-1207959300,1861681162,66096126,1586232438,188779012,1183441962,81402,54356084,-16091904,-16121802,-351679946,3604232,-600375542,105093641,1183514624,1143928828,66095878,-1962281930,788004422,-125106622,-787886431,-523296,-1593180106,-956102160,38047056,164536656,-523116335,166725163,100915447,-956103102,105161040,1212728835]},{"sector":16,"data":[113285712,1191116800,-58817540,-385647352,1191182193,-25263106,-385647352,1600061280,-1017256565,-2081649835,-2091512596,1964247166,28371203,50757251,922686581,922683904,1469712842,-956301306,129606,922686187,922683904,-1885730340,-956301312,195142,755517067,-1181155317,-101253110,105000695,164499083,-1056710191,166725123,-1946663287,187500614,179935488,-1946552576,1143928770,-200932602,-1992278007,922744390,1996425728,1183535352,-837907464,-773730039,62991329,1342587398,66471563,755385350,-1706033148,65535,1342178488,-11485141,1151466102,273670,105029968,164499083,-506338863,-11484885,1996486262,3604472,16508938,-955202429,1375302,-1962882071,1183385670,-28931084,-1946925567,1988883550,704678410,71711716,-1377238156,-28931328,-1946925567,1988883550,704678410,71711716,1178332020,-385649658,1995112592,-1946919285,1183451766,-1962899450,-2021067682,1183516230,732660,702873,788003319,243992130,-506394162,100909315,1183386096,-196703240,-1728050387,-150992199,-138245127,50742318,1074394118,-163149504,167786239,1358460671,-1946663285,-787886578,736219617,1107690433,1183535110,1141244918,273670,141204048,1183514624,-196728322,-1946919285,9046646,1178330154,-385649404,1586233202,-62487556,-1995994366,-1072955834,585696116,140413951,-1979025781,8914502,1575324510,1426065602,-326898549,276726534,-15567872,146277494,-1986375680]},{"sector":17,"data":[1342177280,541338,-935919872,145660425,1187446784,-352321282,243172184,-955812607,134726,1187448299,-2097151730,1963003518,74907401,164247295,1996425195,-600375548,143104521,1996423168,178180,19962448,1996423168,108461828,-1962379521,1174603334,1183535114,205914888,144939600,1191116800,306613246,2097038905,276726688,-13995008,922682486,-509998606,-16777208,1996424310,142016262,50742923,-1957688762,1174603846,43667468,-352321530,-365494519,53778953,-443875328,-1957313699,216826860,-1324989279,-1981754621,1117912134,-1981754618,-761135546,-835782903,-163149559,167786239,166606591,596378,3604224,-163149046,100917457,-1588590096,-523171374,166987267,-25755824,-1191414017,-256245727,-1706012160,2360,167786239,166868735,607642,3604224,-264831222,-197722359,-25755895,-1191414017,-256245727,-1706012160,2412,167786239,166606591,645274,166764800,-335919479,3604261,-92864758,166999807,164509439,-1191414017,-256245727,-1706012160,2469,17187489,1183578694,-268041218,-96060663,-190722179,-96040695,922691051,922683904,1996425712,-25755654,1342177720,-1174396488,1347551472,658842,105160960,-1946532351,100924486,1178274292,-1949336070,100924998,1183386096,-62485512,166987267,-768375,-16121802,-1710624202,2658,33179335,-13505792,-1962278858,1174665286,1183535354,244029946,-101250610,166987267,112720]}],[{"sector":1,"data":[-59310256,-1174396488,1347551472,674458,-96010496,972441227,-948110778,33179335,-13702400,-1962278858,788003398,100862414,-1957688848,1174664262,1996443898,112894,2209872,1375793338,36280912,1191116800,164798970,2096776761,3604426,-298385654,95853065,922681344,1996425728,-197722120,182688265,922681344,1183517184,-163183624,167027024,164759043,178428496,922681344,1183517184,-163183624,-196703408,164759043,180066896,922681344,1183517184,-268041226,1183535113,-771357708,-879079415,-16777206,-16121802,-16125898,-224725898,-16777206,-1962278858,1174665286,1183535350,-771357708,-6664183,-16776961,-16121802,1996486774,-25868,1996423168,-92936188,-1017256565,-2081649835,-950663444,65094,16533191,6600704,-1946259721,-60947496,-972786037,1191116800,-58817540,-1671581,2122579526,-662829314,16664263,-62470400,1183514635,-96040452,1689785579,-26282240,1577310347,74877946,-16711482,1183578694,525820,2147108411,-62487583,-58817782,-1194361263,1861681252,-1947169794,1086719070,1689781037,-26282240,1586229387,910214660,6600707,-1946259721,73305072,36454598,-150969160,-259260818,-972792181,-16632000,2122579526,-2055338242,1575324510,-326412861,1443163267,16664263,-1962022144,1183514206,2022148348,-28901623,-1946263925,9046134,184305288,-2082179648,1946159742,172395310,702873,-259261961,158660107,83773183,2022148144]},{"sector":2,"data":[172395273,702873,-1031734793,-27358416,-1996601601,-1962313577,-2017001890,-1207957128,-11531912,1525155446,79987461,-402360577,-998046212,-443851262,-1957313699,216826860,1342177976,807066,158507776,-1705983957,3164,-1207312221,-1706033148,2047,-1207308637,1347420168,1342177720,11319376,-6664162,-1996488449,-1705969082,65535,185201315,721778112,37218752,-1694861569,65535,158074567,-1070923775,8165968,1183383552,414732536,-895856640,1023410188,142475266,157943495,116064257,157943495,1996423168,702712,-26032,-935526400,-955747072,34196998,-955847936,17419782,1354771200,-1694992641,940,-1727987784,43667538,-1560281075,12061154,1389505535,219257424,1889730560,-1161811191,1347551487,16777114,157721344,-1207666945,-1202716669,1344146070,1342182584,867994,74907392,1342178488,503990968,2668624,223582800,1996423168,374788,169261136,179851294,1754943488,-16777203,112723062,-1430761472,-1202708982,-1706033132,3453,-1207666945,-1202716665,1344145978,1342181304,889498,74907392,1342179512,503980216,1030224,229087824,1996423168,636932,176601168,263737374,-1130737664,-16777203,179831926,1924681728,-1202708982,-1706033132,65535,1342193848,1342184120,16777114,-62486272,58048523,738111721,62410944,1347590527,914074,158638848,-1202667477,1385791232,235117136,-324861952,1354771209,-1719729480]},{"sector":3,"data":[345657426,-1560281074,1996425706,112644,-1706012007,65535,-2096510813,619582,1659437941,-331447298,57999369,-2080483095,649790,1323893621,1975520254,-28841725,-1207666945,1385758723,-26032,1586167808,206014972,-1191420277,1200160932,408914966,157957763,-1593478144,65735024,-1962286943,1200225374,-60912880,-16627769,71813119,1586233343,306694140,1204224001,-1962934252,1183579230,172460292,-939762037,-1962933497,1344207942,16777114,1975520000,-59310325,965786,-36706048,-1694730497,65535,-1962933832,1438866917,-326898549,205949700,-2096742237,1962936958,1575505939,46433277,57982987,721534953,43116992,1064579,-385649664,1996423815,166639626,178256,252877392,1996423168,166901770,178256,253925968,1996423168,158513162,178256,254974544,1996423168,165722122,178256,256023120,1996423168,157726730,178256,-26032,1996423168,165853194,178256,258120272,1996423168,158382090,178256,259168848,1996423168,164280330,178256,260217424,1996423168,165459978,178256,261266000,1996423168,166508554,178256,262314576,1996423168,158644234,178256,263363152,1996423168,166377482,178256,264411728,1996423168,164149258,178256,265460304,1996423168,165591050,178256,266508880,1996423168,169129994,178256,267557456,1996423168,1357834,1226832,268606032,1996423168,2799626,8042576]},{"sector":4,"data":[269654608,1996423168,177649674,1357904,270703184,1996423168,172668938,2668624,271751760,1996423168,169261066,702544,272800336,1996423168,178960394,1357904,273848912,1996423168,171620362,1030224,274897488,1996423168,169916426,1030224,275946064,1996423168,176601098,1030224,276994640,1996423168,175290378,1357904,278043216,1996423168,157988874,178256,279091792,1996423168,164542474,178256,251828816,-4718592,-17665,1996443730,282434060,-660406272,-636057335,671532809,-956289792,4102,-18432,1392508858,209125200,1109146,171221760,171316873,-1157627976,1347616767,-1710459137,65535,-1995820893,-1207291370,1344143548,1195651,-1207602176,65735242,-1945463112,726684378,13417152,1347440722,6600784,1354771280,209125200,-6664112,-1996488449,726727750,-6664000,-1996488449,726728262,1347440832,1342433208,1342767288,1139098,-25755904,-1202667477,1344146034,1342433208,1342243000,16777114,-59310336,-1710983425,65535,-1694730497,65535,-336352280,1575324667,1426066114,-326898549,105286402,-16121181,719848566,46433025,-16484609,-1710628810,4570,721712895,-11513664,-16134090,-1207341514,-256245727,-1706012160,2316,-1207666945,-1706033151,4646,-1207666945,-1706033142,3141,134584912,1996423168,74907396,503727755,568873040,46433025,-26032,-930414592,722063521,-1037329983]},{"sector":5,"data":[726726865,1183535296,1347427846,-2097086488,-1706032444,65535,157812423,1996423169,178180,139369040,-443875328,-1957313699,49054700,166069959,113704960,264676,-1207666945,-1202716006,-11534136,-16131530,-1710630858,65535,-1017256565,1167087646,518818645,-326903666,165978372,166069817,1996437119,211720718,1183383552,-1070903044,922701904,922683856,163055982,5618176,10113106,-16777197,-16128506,1996426870,350132988,216727552,-1207011585,-1706032486,65535,-1962742397,1297948645,1426066122,1048833163,1963002216,165978433,166110016,-2096859393,617022,1889600884,-1593578743,-1706030624,4512,721712895,-11513664,-16134090,-1207341514,-256245727,-1706012160,4540,157812423,-443875328,-1957313699,49054700,16664263,-16323840,1191181894,73304836,1962950528,-28931086,-1017256565,-2081649835,1151405804,-754732794,-163149344,-754564447,-129594912,-1559869813,1183517140,165061384,105004675,-385649408,1048772749,1962935876,8644867,-1995838303,-257819066,105265417,1183542654,-268041224,105265929,-190750338,138819849,1183537534,-200932362,138820361,1183534462,-268031226,244029705,-101251518,-1946401143,103483462,-1952904716,-150584306,-96040455,-150992200,1174666350,722426,-1192081783,-11532730,45675126,62410752,-773304320,1958742796,158638342,-113015,-1097138570,-1962934252,1438866917,-326898549,105160974,-523041871,-1577695607]},{"sector":6,"data":[-523041214,-1946663287,-727513530,138840841,-2096507229,410174,1609106293,1144947457,57999366,-1593747991,1178143216,-385646842,1183514954,-268041224,105265929,1005126527,167026945,2131248697,19982595,66471563,990508038,58656838,-1962860055,103482950,-1952904720,-150584818,-62486023,721962635,-1727400954,105123467,1183447543,702714,66875127,184941126,-230258432,1342588600,-1192069377,-1202716670,-397410301,-1073017844,-1108802699,-228685056,105285574,1812383490,-956301303,16781318,-365494528,357997065,1996423168,353737220,1183383552,167814132,-34871216,-16595837,1996424310,357407476,1186463744,1996443654,178418,243792,1354771280,1350566328,1350565816,-1207348248,-11532730,45675126,62410752,-1108848640,74907403,1210010,-196704000,-1207304029,-11532730,-1207303114,-1202716669,-397410302,922743026,1186466308,1996443654,74907636,-2081495320,1996425412,-193528060,845978,-331940096,364288521,113704960,16,922688235,28837440,1347590400,-16484609,-16109002,-1710608330,968,-1017256565,-2081649835,1048775916,1964247528,1816036106,57999369,-2097047319,4670,1996426613,172668932,2040156190,-956301310,16781830,-365494528,135174665,113704960,65552,158088835,-955419648,324678,50218695,10086656,169098883,-950700799,64582,720914119,2793728,-336181623,-128021719,1183385483,105298166,-159973552,1342177976]},{"sector":7,"data":[1342178232,185246696,-955812672,130118,1182991595,2122515192,-780926724,771114635,-1181155317,-101253110,-1946265975,837547590,1342588600,168048383,1342178232,1342177976,1342177720,1350566328,1350565816,-1593310232,187501062,179935488,-1980107008,111279702,732426,702873,1183447543,-196703244,105000695,1117898891,-1037330170,-939263791,166727171,164892297,-134330741,-1962523602,105161160,-775804007,63439864,-1995836402,-16132594,-202898314,46433028,-1710983425,5318,-1946532215,788001862,243992130,-506394162,100909315,1183386096,-28931084,105131767,166987267,1183400000,243966,112720,243792,105161040,1342178349,-1962523999,-787886578,736219617,1996443841,-193527810,-386238721,-997986079,268879632,-16777216,1996424310,312646394,922681344,922683862,1996425684,-66787324,-1962490749,1438866917,-326898549,-398556404,175445001,158088835,-385649408,-727645989,-268031223,244029705,-101251518,-1577826679,103483862,-1952904716,-150584306,-28931591,16533191,108954368,-1928498176,-1924071866,-397347770,199950503,1358841485,1358186125,-2097101848,179832004,-194054400,1577310347,197362686,-2131337591,17188543,113756021,65552,1342588600,178259,243792,149612624,91537419,33310407,268879616,-2097152000,1946221694,-196703332,105000695,1117898891,-1037330170,-939263791,166727171,164892297,-134330741,-1962523602,105161160,-775804007]},{"sector":8,"data":[63439864,-1995836402,-16132594,-1947728778,46433027,165033727,164902655,-402360577,-997983474,1575324422,-326412861,-16490869,73304839,2114404227,509717,106859264,1586169855,121602822,130483326,-443875328,-1957313699,73305068,1586171903,4162308,130487677,1586167815,-1961885946,1065551454,-956007168,-1962932473,1438866917,-326898549,112646,-1979824503,1183579206,2309382,-1192688779,-385649152,154993072,-385649408,222101738,-385649408,540868807,-385649408,557646015,1031107584,57999394,-385832471,1151402710,-704249594,29288713,722064545,-1727401978,104992395,1183447543,105030140,164890153,-1593728023,103483862,-1952904716,-150584306,-28931591,103399819,-1981216298,165060865,166987307,1141803929,-1980107002,-727581114,-268031223,244029705,-101251518,-1577302391,103351876,-1309996586,722065057,-1727400954,105123467,1183447543,700550142,-1593190906,100730434,1038682580,164929793,166725163,1108249497,-1980107002,1151466566,-704249594,-9049847,17188001,-351676922,272532434,57933824,-16638487,-16132554,-16133066,1726481526,34204154,1064579,-385649664,280494324,-1130737664,184549401,722435520,1996443840,-41424892,-385563517,28836326,-1192301824,-1706033135,6665,58507275,-16657943,1996424310,434608644,-1202716672,-1202716622,-1706033024,6644,-16484609,463078518,1342177306,1342190264,-1705983957,65535,1342190264,-402360577]},{"sector":9,"data":[-1460934609,1342181816,16777114,2092960512,25487619,-16484609,-57015178,1342177283,1342182584,1342210232,1720730,74907392,-1710983425,7204,1357904,1354771280,1694874,1357824,641577451,-385649408,326631061,1962943549,-22681341,1962943805,-26679037,1023488489,57999399,1040110825,57999400,1040075753,57999432,1040136425,57999440,-369132055,-727645938,-268031223,244029705,-101251518,1039812233,75431943,260030475,-1727642975,-120470997,166725123,-2096507741,2131294846,-58817780,-2094959360,1962998398,505883,105000695,1117898891,-1037330170,-939263791,166727171,164892297,722065057,-1727400954,105123467,1183447543,474618,-1073019777,1151405951,-1037330170,100923601,-693958156,-92372215,-2096333048,1962999422,-92372191,-1206160128,787939335,-930412988,-1727642463,-120470997,235128835,243862004,-727643690,-268031223,244029705,-101251518,-930354697,-1727642975,-120470997,235128835,243862000,-694089260,-200922359,244029705,-101251516,-930354697,-1727642463,-120470997,235128835,243862004,1996425686,1632260,-16595837,-16132554,-16133066,-1679293322,113542135,-1017256565,-2081649835,-727644948,-62486263,-1995843935,1996488262,-62485244,999968790,-16777187,1996487798,491166462,-443875328,1478411101,-1957345904,-661774612,-1960252285,289213510,1982821377,36104451,1962934589,8448259,1962934845,12577027,1962935869,17819907,1962938173]},{"sector":10,"data":[24963331,1962999869,15001859,1996452331,242679562,-2082071832,-1070922556,36170137,-1710328065,6606,-2080618871,4158,726671220,45633728,1268404228,-16777188,28900470,45633536,1553616900,-352321508,-59310135,-1202667477,-1706032128,65535,-1191414017,-1202716671,-571800576,-401705217,-997989382,-1952191742,-415430074,-15240189,1996426870,175570700,-16222465,-6683018,-385875713,922681777,62391872,1347590400,-15829249,-16107978,-1710607306,5496,-38935,-1710866378,65535,1962934589,1882652452,483367433,922681344,-660993550,-16777188,-1710660042,7393,165820159,823450,1354771200,16777114,-13965056,-1710328065,65535,57982987,-16693015,1996425846,-76290034,-1191244567,-1706033133,65535,1266008075,687747,1183530356,105265422,-727630476,-129595127,-1995843935,1996487238,-129594098,-6664170,-16776961,1996486774,-25862,922681344,922683862,1996425684,-170334194,-16333693,-6681994,-2097151745,1962936958,-22091517,556675,-1511455884,242679806,16777114,-23402240,-1928431873,1343674438,16777114,-663290112,-401705217,-997989505,242679556,383272589,-26032,1911095296,272532478,309657600,-16222465,1996424822,-176887794,-385432445,922746456,-409335318,-385875949,1996488268,-26098,113704960,65574,-1694614551,65535,1064579,-2095680256,9790,1996427124,108461832,-401705217,-997984783]},{"sector":11,"data":[637978374,-385875968,356384272,1025210113,57803028,1040057321,57999634,1040079081,57999635,-369232919,373161557,-385649407,4062702,-385649406,20840303,1032811522,-1686896126,-2080491287,-443874579,-900899553,-1957363702,82609132,-907520170,140413670,-1014300878,-167746375,273023969,-1056706421,-2080487799,-24441914,-661849853,750370958,-1510736896,-2020744239,1183386116,-2080648708,1964248702,337525302,2801162,1693123444,195951760,-1961528128,-670826914,1963016064,15132912,1240001396,14084353,-100609,1996426358,27715594,184600553,-13994533,-1710606282,5808,-16121693,1996488310,209125134,-401967361,922740538,922683960,446302720,-352321513,-386692341,909836485,-1301018092,-1090508098,1586167828,-62944772,1958742957,-27358395,1065408515,-1947175679,7792840,-108271244,1074284171,-150708597,105810907,1996478967,1996445456,209125130,-397323440,1178337036,-1983611386,1586169414,994019836,897385542,-8145429,959345940,58003070,-1946200599,-1958737850,-604568482,-150581621,276234201,175570775,1342994175,-840412845,105266174,1183384446,105286406,1583339767,-1034033781,1451884558,209095178,-994093481,-2096788736,-1073020217,-259321228,-243978184,809037827,272169588,-1072961675,-1966907554,1451887222,-27358452,1024345739,745799700,-1076362410,92995780,184731523,-1961134912,1966094576,1103705073,809037827,272169332,-265558923,-85847928,394845419]},{"sector":12,"data":[2123088734,182137854,-478147747,182702338,-478145955,182702342,-478129827,182702350,-478128035,-1326722786,98825806,-259325718,-1190410365,-617414578,-768360397,-1560223581,-1392770850,1193118360,14063370,-2029921533,-270401318,-1962876767,-2097095138,1946356862,-355429629,-355417301,12059506,-1957313667,861361900,769984,-1190625789,-490864562,108953600,-1106938877,-617414426,38149258,-1728454144,175423499,2038235323,-2097104125,1583334147,-1034033781,-1957363706,140413932,-2146804221,242549055,-1979418998,-538442154,112894,-1070398859,-1034033781,-1957363704,1183537132,1326344,1988758644,106334724,-401973621,-1956643090,146955749,0,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,-569981141,-1996488699,1459998734,1381172822,855727592,-6664000,1459618047,16777114,1958742784,-310646777,30861392,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,8583,-1017256565,-1192457387,-1957691328,1861682246,-1097183226,-1962934239,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,8653,-1017256565,736922453,1996443840,231315972,-443875328,-1957313699,74907628,962970,1575324416,-326412861,-1710983425,8758,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578]},{"sector":13,"data":[1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443875108,-1957313699,15722732,184479464,-2146798364,1962935422,71747076,382017278,12060114,522308901,103026315,45811683,572456704,71731974,567102644,-2130301253,1929786619,402608904,-347913381,79414258,1140897792,175251917,1954595574,42958853,2034974726,817153004,-459071027,110019333,-1960442402,-1207948234,567096576,97656457,97781388,12066574,554744357,-1959386675,-486136818,113587746,-628357594,-13182157,1929781790,-32249597,705086774,-1143305210,-13238269,369500702,347718431,-153406720,17171079,1051985012,-498916915,-1957313550,1435884,-402360577,-443810004,-315440291,-355399965,-85796655,104119235,104135553,-11335565,1128487703,-1144786197,-75430348,141755958,1528299347,-219462845,33574083,-15670272,50332672,52009729,50358784,52203265,50359040,50674433,50359552,50682881,50360576,18946049,50331904,50685441,50360832,18968577,50332928,18980097,50333184,18983937,50333440,34719745,50332160,18996225,50334208,51475457,50363392,19002369,50335488,19009281,50336000,19015425,50336768,52510977,50332928,52226305,50333184,19026177,50338048]},{"sector":14,"data":[51532801,50334208,34245121,50336512,34238977,50336768,51556353,50334720,18955009,50339328,34056705,50337792,52285953,50336256,52289537,50336512,34771713,50339072,52263169,50337280,34739201,50340096,51464449,50370816,50596865,50371072,52181761,50371328,51458817,50371584,52147969,50338816,52048897,50371840,52229121,50339584,18659329,50343936,50412801,50340096,52046081,50373120,17871361,50344704,51750657,50341120,34792449,50343168,17781249,50345472,52267265,50341632,34370305,50343936,52273665,50341888,51455745,50342144,51473409,50342400,51241217,50375936,51268097,50376192,51194113,50376704,52236289,50377472,34372609,50347008,51291393,50346240,34403073,50348544,35440129,50349312,52352001,50348544,52359937,50349056,52283137,50349312,52150785,50349568,52256513,50349824,34384641,83906560,-15828224,83886336,-15685888,83886592,-15676928,50332416,18947329,83909376,-15671040,50332672,34722817,50353920,34730497,50354944,33594369,50355456,52210689,50353920,50338049,33576960,-15826944,33554688,-15685120,33554944,-15676160,1828717312,1937208180,1835757164,1818978915,1936483443,1299014754,1330791241,1413893971]},{"sector":15,"data":[0,5,0,0,0,655369,65547,-524289,-655370,0,720941,5308434,852056,1048607,2490429,4456531,917590,983081,3145779,3801172,2162773,4128804,2228290,2818083,3473454,4194360,1572929,2752537,3407919,4849721,1507403,2097178,4063269,4784195,786508,1376273,4653084,5374030,1441879,4718619,77,1702258002,6910834,5570730,5570730,5570730,5570730,1702258002,6910834,655369,65547,-524289,-655370,0,513,0,0,511,-127664383,134612488,25592,-33756936,-118948611,-66584576,117703687,2300,326918,117244928,-49938432,67108868,1789,67632136,150734596,-386400256,-50463236,63720,101251171,1677199366,101251171,1677199366,-386400256,65792,63720,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16836856,201851137,-127729664,134612488,-127704308,134612488,25592,16836856,-119013375,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,135004160,16843008,63720,101190755,1677199366,101251171,1677199366,-386400256,65792,63720,67567624,134219524,17170432,67174660,1537,17039622]},{"sector":16,"data":[100729857,524288,117703687,2048,16779276,201851137,207814656,134612488,-127704308,134612488,25356,16836856,201850881,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,-386400256,16843008,63720,101251171,1677199366,101251171,1661732870,-386400256,65792,3080,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16836856,201851137,-127729664,134612488,-127704308,134612488,25356,16836856,201850881,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,135004160,16843008,63720,101190755,1677199366,101251171,1661732870,-386400256,65792,3080,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16779276,201851137,207814656,134612488,207840012,134612488,25592,16779276,-119013375,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,-386400256,16843008,63720,101251171,1677199366,101190755,1677199366,135004160,65792,63720,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16836856,201851137,-127729664,134612488,207840012,134612488,25592]},{"sector":17,"data":[16779276,-119013375,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,135004160,16843008,63720,101190755,1677199366,101190755,1677199366,135004160,65792,63720,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16779276,201851137,207814656,134612488,207840012,134612488,25356,16779276,201850881,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,-386400256,16843008,63720,101251171,1677199366,101190755,1661732870,135004160,65792,3080,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16836856,201851137,-127729664,134612488,207840012,134612488,25356,16779276,201850881,524288,117703687,2048,17039622,100729857,17170432,67174660,1537,67567624,134219524,135004160,16843008,63720,101190755,1677199366,101190755,1661732870,135004160,65792,3080,67567624,134219524,17170432,67174660,1537,17039622,100729857,524288,117703687,2048,16779276,201851137,207814656,134612488,25356]}],[{"sector":1,"data":[-2122252288,65921,0,0,0,0,0,0,0,0,0,581304320,583410366,1953309458,1819506547,1668115310,259,2097152,262176,-65536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,257,4194304,524352,0,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792]},{"sector":2,"data":[0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,1792,0,-12648448,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-62922497,33488641,-130031361,16580352,-247471873,16285692,-482353025,15745022,-952115137,14688255,-1891639265,12619775,-1623203825,12636159,-1623203825,12636159,-1623203825]},{"sector":3,"data":[12636159,-1623203825,12636159,-1891639281,12619775,-952115185,14688255,-482353121,15745022,-247472065,16285692,-130031489,16580352,-62922497,33488641,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-29368065,16776963,-62922497,16711425,-130031489,2130509568,-264249281,-491776,-532684769,-966912,-1069555569,-1892608,-1069555513,-1630464,-1069555481,-1630464,-1069555481,-1630464,-1069555481,-1630464,-1069555481,-1892608,-532684601,-966912,-264249201,-491776,-130031585,2130509568,-62922689,16711425,-29368193,16776963,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,-12590849,-1,57599,0,0,0,1953300480,1835091728,838860901,1852393472,1214122356,1310720,1936941392,5266953,1308630656,-1879017627,1818848083,687865964,1734689280,1701736041,704643186,1987005952,6644585,1157639168,1919250552,780140660,1935756544,7497076,2004055149,1802398835,1802134381,-2134900736,419436802,838899712,1375731712,1919252069,83913075,-1946155776,-1711271424,33554690,1868137040,1634541685,1852776569,1830844780,543520367,1629515636,1634759456]},{"sector":4,"data":[1998611811,1701995880,1701344288,1920295712,544370547,1629516649,1869767456,3044211,419445760,234889216,16947968,-2142240000,27471,2004055149,1802398835,1802134381,-2134900736,419436802,838899712,1375731712,1919252069,83913075,-1946155776,-1711271424,33554690,1868137040,1634541685,1869488249,1634738292,539915123,1987005728,1752637541,543519333,543516788,1936880995,1763734127,543236211,1936683619,11891,1638460,917536,66203,1333809155,1828716651,-2143289344,285218310,1258328064,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,262018,234881024,134254592,33554176,-2108685824,1702258002,6910834,570435072,134234112,33554176,-2108685824,1936876886,544108393,825241137,327680,8650799,-65527,1342308353,1886339970,1734963833,-1457490840,943272224,1293954101,1869767529,1952870259,1919894304,11888,3866681,917536,65537,1333809155,1828716651,117440512,1702258002,359232370,1702258002,543781746,1667330640,1701013876,1835091744,1632633957,1494053747,1830843759,544502645,1936941392,1701401608,1835091744,1868106853,1867260021,1646294131,1493901433,1461745007,1646292591,1091051641,1953853282,3026478,0,2004055149,1802398835,1802134381,-1073545216,-1073545216,-1073545216,-1073545216,-1073545216,-16580608,-1,-1]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[9591373,77,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":9,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":10,"data":[279886,23724451,191394610,458758,268436480,65964,458752,196615,4194478,25165944,26345868,1805,131131,0,0,0,85983727,85983568,1559692130,1559818608,198056837,198177136,47914649,48034096,305078137,305197360,43656310,43708720,80094517,355860497,-2147287036,1,161087488,-265289663,32769,-2147221504,1,165347328,-265289713,32769,-2147155968,11,166330368,-265289716,32771,167116800,-265289719,32769,167706624,-265289716,248,168493056,-265289720,32770,169017344,-265289719,32776,169607168,-265289719,32775,170196992,-265289716,32777,170983424,-265289722,32778,171376640,-265289705,32772,172883968,-265289686,32774,175636480,-265289704,32773,-2147090432,3,177209344,-265289715,32769,178061312,-265289703,32770,179699712,-265289724,32771,-2146893824,1,179961856,1048578,32769,0,1279543567,1447121735,1095254853,1397049166,1380275208,1095649613,76,524289,100663308,1314014539,1191398469,1426344260,55723347,1070399999,17412866,-972734515,1070399750,17423621,33503232,-620412979,1070399746,17041925,-184205363,1070399755,17783045,-536526899,1070399748,16898565,939671501,1070399800,17153538,-553500723,1070399492,138758,-1056620595,1070399505]},{"sector":11,"data":[19716,33832909,1070399489,4,-1576714291,1070399488,4174850,201473997,1070399550,206341,-1660600371,1070399489,68102,1694646221,1070399537,6018306,2046967757,1070399554,3506690,1342324685,1070399553,4333314,2013675469,1070399489,2932738,1526874061,1070399532,2940930,-972931123,1070399534,3018242,620904397,1070399532,3141634,-1929232435,1070399536,3154690,1342324685,1070399536,2879234,-2097004595,1070399532,2158338,654458829,1070399528,4529154,-167624755,1070399556,3557378,285360077,1070399495,710147,1040400333,1070399498,9217,81869,1070399488,2988546,81869,1070399489,3,-469614643,1070399557,5226242,839008205,1070399566,5057794,1766662656,1936683619,544499311,1684957527,544438127,1819308097,1952539497,544108393,1836213588,1175126016,1279345486,1128350284,864843,1414415878,122507845,1313212160,1313818704,134220101,1312902726,1380276051,1174929418,1397310542,89018179,1163135744,1314344274,1330794564,134218051,1095978566,1396786518,1174994947,1346454350,1163023700,1174798342,1297040206,150997069,1313428048,1330794580,100666179,1347374662,151109,1129203211,1112296513,827016001,1828716556,1167087646,518818645,1996478606,108461832,-15960321,417860214,49120004,1562371467,576077,1167087646,518818645,1996478606,108461832,-15960321,1407715958,49120003,1562371467]},{"sector":12,"data":[576077,-2081649835,1996428012,175570700,-16222465,1996424822,-26108,-1073020928,-1070900875,-2097115159,1947398270,809403381,1198784533,355481343,354039551,384714381,-26032,-1073020928,2122396021,1963000048,-193528042,-887041,-1709887434,65535,184992899,-1928038976,1343680070,16777114,-297366272,-6664170,-1929379585,1343680070,1347469355,112720,-26032,-1073020928,1048810869,1946162480,1748927458,-613089279,24002179,-2853888,-15388618,-1877775306,583694,-443824661,705117,1167087646,518818645,-326903666,1916699402,914292737,24381127,1996423168,328775686,-4698082,-6664192,-1560280833,-1073020558,1996429439,1354771206,-26032,-1073020928,1923156084,-1546062079,1048772978,2113929586,142016291,-1191086943,-1056762984,1347607180,24262399,16777114,-163149568,24380929,24249897,-1962742397,1297948645,1226,1942235995,920188696,656953,959844215,1979714566,212022788,-2061568,-1140870941,-1329856848,-1705993987,65535,16777114,1958742784,1845937963,-1996488700,1459904526,1381172822,855713768,-6664000,1459618047,16777114,1958742784,-26417145,27322448,-850591816,-1957313759,-18196,-1957313699,-18196,-1957313699,1354771436,-1710983425,535,-1017256565,-1192457387,-1957691328,1861682246,1318735878,-1962934270,1438866917,1996483723,108461828,1342193848,16777114,1575324416,-326412861,-1710983425,605,-1017256565]},{"sector":13,"data":[736922453,1996443840,-26108,-443875328,-1957313699,74907628,16777114,1575324416,-326412861,-1710983425,710,-1017256565,-2081649835,-1070923028,71732048,-1706012007,65535,-1929492855,735087578,1575324608,-326412861,-16585597,-6683018,-1996488449,-628294074,-1070870389,-1017256565,-1275051,-6683018,-1962934017,1438866917,1996483723,-26108,-1073020928,28837236,721611520,1575324608,-326412861,1347469355,16777114,-402345728,-443874901,-1094991011,-990150396,1393062660,1130043391,-1007490237,-1207958341,567100416,-1024062862,-2147126144,1074041487,-1007912629,567095476,-1023118173,74319502,741772070,889239552,512303565,109839458,521012324,-1171980104,567083424,-1274115274,908256004,79038149,-617358708,-1306591434,-385649916,-986251703,-1945847290,244698,-1306591434,-1021372924,855643321,-1836583205,74711300,567099060,-1007492541,-387151019,1996423504,18147332,-1017256565,1475119957,-13413546,184960651,-149783104,72780759,-621291273,-1996488675,1451820614,172395268,310231051,1452005367,-136775928,7642,-1995815287,-1073018794,1317738101,105286408,-235417037,1183570059,-1947076860,-1875055661,1317787787,106334984,-788248949,-774254101,198758890,-134973989,871402481,-11513134,1996425846,14477320,1996903995,990409223,58065990,855764611,197561298,-150506241,-2082932774,1583022298,146955615,-326413056,-617392553,184960651,-149783104,72780755]},{"sector":14,"data":[-621291273,-1996488675,1451820614,172395268,310231051,1452004343,-136775928,7642,-1995815287,1317734486,-1948125436,138841080,-503844725,-141100541,-134019482,-963913845,125098763,-654845193,1577114243,146955615,-470994432,-773140218,-1006968104,-387151019,1021837416,1961102077,75399178,-972786432,519963718,73537221,-853213000,243998497,132318388,-16776517,-1962626530,1286865990,-994369075,-990150396,1393062660,1130043391,-1007490237,1458342741,-1962260853,-503905202,1183570059,-135230712,-1764097055,50751223,-1949070376,-1034068282,-994377720,-956595964,1393062660,1130043391,-1007490237,16973845,196814,16973933,196785,16973937,65960,16973825,196795,16973938,66048,16973829,66093,16973830,66108,16973831,66156,16973834,66180,16973839,66207,16973841,66231,16973844,197073,16973829,66273,16973849,65995,196638,16712037,196655,16711840,196656,16711774,16973873,196742,16974002,196922,16974027,65965,16973915,196903,1953300684,-2081649835,727057644,244338880,188804840,-12815168,347604086,-1070903296,-401698736,1183396163,146942,104671604,1023898624,594804743,45617131,28856320,-1080406016,-1962934272,-25263120,184841473,-1950059274,722070470,-1091638282,-370475007,1575324510,-326412861,-1202393981,-1924136880,-397365690,-998033630,1958742788]},{"sector":15,"data":[112645,-1070923029,-5486967,1771701366,-1996488701,-1202651578,-2091909112,1946201214,-339727612,112643,-26032,-443875328,-1957313699,49054700,-1996337503,79232582,62410752,1067077632,184549377,-14125888,1085801590,1319194626,-28952318,28837236,721611520,244338880,725695720,1085821120,244338690,-1959186200,1438866917,1183575179,474374,32047989,-385647103,20775399,-385649408,37552458,1026782208,57999363,1023443433,57999364,1023447017,57999365,1023523049,57999366,-385767703,62390779,45633536,1318735872,-385875967,28836331,-1070903296,55024208,-1039466496,-655817867,74907393,1342183608,-1873756117,805169166,1946158653,29485315,-2096859393,93758,28837237,721611520,1541951680,1975520069,27650307,24002179,-385649664,28835986,9365760,316030592,-15764480,-692583306,244338706,-381705752,45613439,28856320,-8197376,-370670474,46433278,-1207866647,-1202716666,1827209221,375039,309328,-2080414999,93246,28837237,721611520,1996443840,912320516,-1559968637,-692584084,244338706,-382499864,1996423471,1849590532,91553793,-352321096,1354771202,189057512,-385649216,1048772883,1962934638,-9508605,1856225323,16902401,24000255,-402360577,-998034193,15853828,-381390872,922681579,1996423530,15067140,-1559968637,-1628765846,23740035,-15698944,-16684490,-857209738,79987456,-1207866717,-1202716671,-1873804932]},{"sector":16,"data":[933488654,24002179,-14322688,-1070922634,1146415184,410304523,23987911,113704960,360,-1207666945,-1706033151,65535,1343396024,-773321072,-704199118,1085800466,-1202708990,1344143740,1342227640,-10978840,1085801590,28856322,244338688,-348174104,74907480,16777114,-11605248,-6683530,-352321281,736580,-957807755,1025146878,57999368,1040112873,57999369,1040138217,57999370,-335601175,802080,-1360460939,867838,-1326906507,933374,401146741,65617407,99156853,1575324670,-326412861,425603,146281077,129519616,-6664192,-1996488449,367724102,425603,28837237,721611520,105286080,16777114,74907392,16777114,163074048,2122534912,91488262,-352319304,1354771202,16777114,105286400,-1017256565,1575783253,-326412861,1023821451,208929280,1946288445,33701141,904603252,-15960321,1996425846,1404299272,1996433387,-26108,1996423168,175570700,-402098433,300635103,16777114,209125120,-16091393,1458047094,1575324499,-326412861,8711297,1589925463,1065362950,-385649408,-2033778546,65406,-8470909,-1005290113,1191118430,126494214,-8470901,176178056,-1958054464,-956334402,-16744381,1183646838,244338816,-1958850584,1962281968,112725,37795920,-401698736,1996436961,1619972,1354771280,417861264,408877,1996436597,1849590532,192217089,-352321096,2122776328,731245567,1944604864,1958742850,1849590549,91553793]},{"sector":17,"data":[-352321096,-1547687166,48955758,-963906005,-443850914,-1957313699,49054700,-1070901673,78551632,-1181155328,-101253040,-1996071285,1030151,79272528,79233024,-259305216,312474,112896,-1694987439,65535,-970209493,1685913,1586231799,1577552132,1575324511,503317698,1430622296,-1910575989,149717976,16271047,207537152,138906406,-1996029146,-1960379834,1183386183,106874108,653936267,2114078521,2139301461,1232338952,138885414,-1960435842,958792775,964626503,654067339,2114602809,1200301621,1194927622,-349471222,106873892,653936267,2097432377,1194927622,-1005095672,1183516254,1194927868,637959430,2081048377,-129579259,2122514433,695468280,-1962522997,201656406,-11513344,1996427894,3323920,1438443600,-1962516796,-1993934266,1183516743,1200170748,106873866,105351974,172439846,-1960441227,958792775,91490375,-352321096,-2084558078,-443874579,-900899553,1478361102,-1957345904,-661774612,638607044,605112202,1963015171,106873890,-1959264474,1451954246,1180946,922701906,922682582,1392903380,438682,-1207702784,-310181887,535137026,248139101,-326413056,10022017,16402119,75399936,-385649408,2122514617,57999366,-16731927,-6683530,-1996488449,-1072981434,-1628896395,108461824,1342190264,-9927027,-6664170,-16776961,1996462710,-26106,1996423168,-632910438,-6664170,-1962934017,1174657606,-1673098782,1352681101,1352550029,-1191306264,1861681155]}]],[[{"sector":1,"data":[-1036805732,45728299,871944960,-1983763518,1178196038,-1996259682,1187487302,-956301150,42054,731543295,-11513664,-16461258,-1929064394,1343658566,16777114,-1568767232,-1928498176,1343661638,16777114,-96040704,-16484609,-6645130,-1962934017,-443811258,-1957313699,75400172,-2094500864,1382462,922683764,-6679272,-2097151994,1281598,922683764,-6679666,-16776961,-6683530,-1962934017,46292453,-1873273344,-326412987,-2082959842,1183516396,315925262,-1157627976,1347616767,-1710328065,1863,-1996173149,-1207643626,-4521985,-11513089,-6680970,-1560280833,378078420,1183515862,173443848,-1996171101,-16459242,-1628959114,1975520043,-373282043,2122514771,2020933644,1342193848,1342184120,16777114,-96040704,-512442357,-1202667477,1385791232,-26032,1586167808,239569402,-1207011585,1385758721,-26032,1586167808,206014970,17975239,340248320,1857552384,373786899,-1961336948,1200164422,509706,38258432,1204289535,-1946157308,-1706025277,65535,-2055946229,-1694861569,65535,-1207011585,1385758721,-26032,446889984,1975520021,-10098429,504590008,1095760,-1070903266,1375796410,1347440720,1342203064,1347469355,1343125247,-26032,1183383552,1975520252,-13244157,-1206570845,-1706033139,65535,185931939,1348039872,-386107649,-997982793,328114948,-11668760,-773260170,-59310322,1342177720,173210,242679552,16777114,-59310336,-2080904472]},{"sector":2,"data":[297272004,244338688,-1205010456,-1202716671,-1873804736,831514638,-231681,664405622,-1207959541,569049089,-1202667477,-1202716662,-1873800362,683010062,-1694730497,1799,355468999,-1461125120,49120254,1562371467,707149,-2081649835,1996428012,8886788,1183383552,1975520254,12183811,702544,1748927312,91488257,-352319304,1354771202,229786,-129579264,1996423169,-26108,-1073020928,1187455860,-16776972,-6622090,-1996488449,-1072958394,20777588,-940804864,63558,16777114,-163133696,1048772609,1946157422,1748927250,192217089,16285315,1187448181,-16776970,112787062,1996443648,157915894,1996423168,506110,1354771280,628634,-163133696,1048772609,1946157422,1748927239,208928769,188903656,-955943488,63046,-1191282945,-11534331,-1566902666,-352321536,74907408,1342180024,1343444664,-1192751472,1575324455,503317186,1430622296,-1910575989,283935704,1024214667,57999386,1979802601,39184643,1023410477,58064916,50387689,-13724736,-15991897,-1070920074,-26032,1183383552,-1070903044,-1202696112,-1202715673,-1706032896,2584,737965823,79188160,-1202708971,-1202715671,-1706032896,65535,166445099,-401967361,28840836,-372102400,-236453274,-1447142,1743261302,46433071,-596328437,722293224,-6664000,-352321281,808910799,793569301,184730755,-4098880,-401264586,-997984866,1958742786,808910771,-60102635,355468999,-1528102912]},{"sector":3,"data":[24118983,1996423169,790423566,184730755,-7244608,1877479030,46433269,-1904885749,24118983,2078867456,176063487,-1207601919,48955393,1654898731,1958742785,242679575,-15960321,1996425846,108461832,16777114,29944064,-384249880,1048837962,1962934292,335988542,-16776960,-16459210,-16459722,-186118538,113542136,443924491,1342182072,-2048389488,37795882,2092453918,-1202708991,-397410108,28856370,244338688,-13244696,244321910,-14540312,28839542,-6664192,-385875713,1996488430,-181540850,-385694589,2122579682,91555596,-352321096,1354771202,518524560,-20125408,-16222465,1996424822,242679562,-2081057560,-1209464636,176063486,-385649408,2122579630,57933832,-88599,-6680970,-385875713,1996488346,108461832,-16091393,1996426358,-134354930,-385170301,1996488322,175570694,-1878100225,715188238,-385432445,1996488302,175570694,-401705217,-320132350,-16353537,1996425846,1043326990,1996480235,175570694,-401705217,-789889313,-401705217,1005190382,176062974,57934825,-1191261463,-1202716669,-1706033150,63,-469884439,-1257622775,-1593133814,973825290,-1257555445,-1257589494,-1257589494,-771050230,2013941002,-1257589494,772415498,18169098,678924916,1962999869,-10032893,1963000381,-9246461,1963004221,-15931133,1946227261,18103704,2045313909,-27137537,1963066173,-37689085,373103479,-385649407,4063090,-385649918,37617223,-385648894,1021968140]},{"sector":4,"data":[33832446,32047989,33963519,-1813445771,83901949,-1947663499,-31331843,-1962742397,1297948645,1426066122,1183575179,138819846,1183516796,138819844,1183384446,138840840,-1034033781,-1957363706,1988843244,-1961063676,1200161348,-1948742910,-1995994876,41191732,1575324510,1426064066,1448602763,-1962510709,1166738558,38045954,1971928201,-1982297342,-1956684233,79846885,-326413056,1460071555,140413782,1081219,2139838590,108432142,-1962641917,-956100537,972834441,712967806,645855035,-953432437,990135945,209457223,1066951,239585024,652935168,-1962385781,1191248966,273099022,1183521003,105265660,-969207683,1183517823,140413702,-1995552981,1586171975,276792072,-1591771392,-667221990,-661974411,446891915,138819840,113706613,26,-402098433,1600061228,-1034033781,-1957363706,82609132,294531,1586195828,276792072,-1962511104,1200162374,140413710,51267467,1183387719,105286654,-1996208637,1183579206,239548678,1200292735,140413710,-1961998455,1178205254,-1962574082,65797702,-1946401141,1194002526,273123598,989862561,185758936,1393456320,-82968,922683510,-756547558,138841086,-1962927453,113401317,-326413056,1460202627,972434262,1333529718,403472003,1586186623,-1948004084,-1961988417,1982532213,208995082,830404107,-1928706421,-1056763315,1183439500,-61437446,2114221625,74877189,1988821995,142016260,-16353537,1996487798,74907642,-347288088,-1946801406]},{"sector":5,"data":[-1956684090,180510181,-326413056,1443425411,818819,-1310129283,209617664,-385647080,2122514600,58523658,-2097111063,2119109246,9890051,-787718517,1854376931,-62486258,721440952,-259323322,2097444409,71731973,-963968277,200820361,-1955627328,1174604358,1181180,1996443678,108461832,-386369793,1586187350,209683452,-1962511104,1200163398,-60912886,51005323,1183386695,172395518,-1980217853,1183578694,172439818,1200292735,-60912886,-1962260599,1178204742,-1962574082,65797702,-1946532213,1194064990,206014730,175570771,-386369793,-1956708776,180510181,-326413056,1460464771,-989910186,-1960441250,-196703993,71797542,-1980479957,1183578182,-96040460,38243110,-990099831,1183517278,1194927868,1346534918,-362753,1996425334,71731974,2113422905,-129594619,1183515627,2095599620,66096126,108397054,-2096859607,2113930366,106873870,637945599,-16119866,-2092497842,2130707582,-339244284,-62456059,1600039403,-1034033781,-1957363702,116163564,173968214,819075,-1159134337,172460800,-1946270071,1174603846,-96040698,51136395,1183448646,-28931076,2131248697,-96061130,1183396222,-96040184,-1995946453,1195050566,-1961722868,1183386695,206030598,1204224000,-352321526,173968201,17188491,1193871943,-1959007476,1178205254,958102792,377289286,-1995946453,1586169414,138840842,1143731083,206014730,1586174187,-96040182,2131380025,-62485752,2080917049,105301765,2122514432]},{"sector":6,"data":[595460102,294531,1996426356,142016266,-402229505,1183579404,172360456,503321093,108461904,1581957608,-1034033781,-1957363704,108462060,-1202667477,-11534256,434635894,106859519,17319879,75399936,-955616000,4167,935879,1575324416,1426064578,-326898549,1586189830,-1995994362,1586232902,-1995994364,1586231878,71797758,-1946401143,1150024310,71796996,1183571595,71797244,-1962516853,-1962440250,1183515742,1577552382,-1034033781,-1957363708,351044588,1187468887,-956301066,63558,16402119,-62470400,1187446784,-956301058,16783366,-330905856,1187446784,722366192,-262239233,49301123,2088974219,91488264,-336050433,734497625,1183385156,-58817550,-1995606784,1187510910,-1996488196,1055653446,66733707,-952370106,1183518069,-28952078,1191118197,-1960317956,-163173433,-506231,1183646838,1575506166,-330921728,1064681483,-1980610933,2122972742,-62470150,2089353217,138725126,-2092498944,-2055333633,1177274251,-129594890,2122519531,327024888,-1929087233,-397347258,1183383584,-327253012,-941132800,6150,369542912,-1962934272,1600056390,-1034033781,-1957363710,317490156,1988843095,-263796988,2088960000,58654722,-2097085207,2130708092,8841475,556163,1149971326,138685188,-1946270071,1141048900,-196703992,1183384715,-28931086,1183384619,-193033234,1006761987,-352158679,142377836,-1960280832,1183384644,105155582,-1995946965,76280902,-1947056503,69928004]},{"sector":7,"data":[-1947318647,-193068040,16940073,-952177860,62534,1183384715,71601138,1183384619,105120750,1183515649,105120750,-956152791,1604,76224491,-1947056503,1183384132,-196687890,67174400,148679,-193035520,-1960610816,1183448646,-163133448,1174601728,-62486028,1358579399,108461824,1358317197,-402098945,2122517493,796131566,-1980610933,1187510342,50331894,1183444550,-96024580,1996423248,-163148538,971526166,-263812853,-1928956161,1343682118,-956114456,1604,1592805003,1575324511,1426064578,-326898549,-2091493572,2097154174,23259395,50873995,423429702,-385647104,113705300,65558,-16222465,1996424822,121169924,294531,-1880554628,71731968,1183439095,141986564,-964565295,-41218450,-1992495229,1183578694,-96064762,-335657335,1183427874,-1948742660,1191312966,-1070902524,-50141104,-939762037,67655,92914571,-16595069,2122578510,-713228038,-787972469,1858568679,-1391203570,-1946401143,71732184,-1962653911,-2096789053,1325335239,-25263106,-1947960064,1022264309,-2096869633,2097153150,11725059,-2096789075,-320142649,294531,-1578564737,141986560,-788105725,1858503142,71731982,-1946532215,1177224774,-28931590,-788234613,-2080570393,619396335,-1962742141,-62486268,1354771280,-1946391576,1204288606,-1962934008,1193934406,49251076,92914571,-2080747777,2097216126,142511059,-788103677,1858568679,-2095584498,76219118,-1946401143,71732184,-2096871679]},{"sector":8,"data":[-1014299921,1325335945,-25263106,-1948222208,-422509450,-293341949,-2096436420,-293403921,-1996190974,72285957,294531,1600056701,-1034033781,-1957363706,250381292,556675,-605486219,73319424,41418534,-1202667477,-397410280,1589966801,1200170500,2013210114,1354771206,1342183864,-990397208,-1993997218,-14285241,1354771255,1342197688,-990402328,-1993997218,2013210119,1354771204,1342197944,-990407448,-1993997218,1048773703,1946157078,1200301603,1194010118,1334519298,254486020,1363012087,-955810560,129094,1996428779,-69015544,-16222465,1996424822,151447556,-990361975,-1960442786,-523173305,-1995543035,-1960379322,723911751,-230258425,38243110,-335919479,-60912865,50087555,1183385483,1589924094,939468292,-887041,1240004726,-96010246,-1962647868,958855750,-713095609,-1034033781,-1957363706,149717996,-15829249,1996426358,142016266,-16353537,-1326971786,608076559,913637376,-1995684213,1183578694,-129595126,1074546315,-1946270071,1174604358,-62486268,-15829249,-16769482,-16769994,-16768458,-1929371594,-397346746,-443874351,836189,-2081649835,1448546028,-402098433,1589903552,2013210116,1354771202,1342183608,-1980332824,1589966406,2013210116,1354771206,1342183864,1224110312,972703369,58652230,-1962899479,-523110842,-1995543035,1586232390,-62487556,-1992848638,1589968502,1066083844,2097839161,-339244284,172264195,-1946925431,1141049924,-129595124,637820612,2097432377]},{"sector":9,"data":[1200301574,-1962677500,1177286726,-230258188,729726987,1588867,1443525632,1358198527,-336134168,142016282,-624897,1183577206,-28965900,503321093,-227082416,-71704,1183577670,-163169798,1600029822,-1034033781,-1957363706,116163564,406750038,1333067776,1457795,-12487680,971506806,-1959138310,-1962927586,2088960631,578682896,-1996209013,1150024774,-96040690,-16484609,-1924072330,-1056763316,1347607180,-401574657,-11075960,1962872436,-169744368,1719939,1589671168,-1034033781,-1957363710,82609132,-164932009,-150969672,-2114417682,-1962615609,-1981558306,-1995542849,1971913845,138790662,1032388608,-956138103,2629,1342981575,239453952,1170669568,1459617808,-397361109,1170733360,-956301304,3141,419332934,1996468862,218294276,-443850914,180829,-387151019,-443871887,-1957313699,82609132,2122536535,1451098116,556675,2122535036,1249843208,425603,2122531964,1048530694,-787980661,1858046947,175475470,50755115,-167048075,1983457406,-1996259836,1586168950,306285830,-1957277666,-654900154,1133045840,108461911,-174135210,688146059,1599999045,-1034033781,-1957363706,183272428,75400022,-385646848,2122514667,58523660,-2097093911,2115505278,14280963,687747,-790035587,176063232,-385647025,1586168007,-1948004084,-1995542905,1183579718,-28966134,-1996484091,1586296902,172395514,1023690243,159252560,721440952,1183386182,-27358460,51005323,1177226311]},{"sector":10,"data":[-163149558,92127243,16139975,71731968,-1980348925,1183579206,-62520566,2113949757,5289993,-1995815381,1996487750,-126418950,-231681,-873986954,-92864702,-493825,1996425334,74907398,-1958576664,2139356766,91553804,-351648117,-27358442,956974731,92080711,-351647861,172395267,-1979818357,1586170439,172395518,1143731083,-62520566,1393313673,-16091393,-1779893130,-443851020,705117,-2081649835,1183515372,172374278,1187448702,-352321026,105286421,1963607609,71731976,2131248697,-28915735,1183514624,1575324670,1426065602,-326898549,138840836,2114733625,172395272,-351512949,138840854,1963738681,105286408,2131379769,105286632,-1995942261,1451883590,73305086,1468598153,-1933341950,1575324626,1426066114,-326898549,138840836,2097956409,172395272,-351512949,138840854,1963738681,105286408,2081048121,105286632,-1995942261,1451883590,73305086,1468598153,-1933341950,1575324626,1426066114,-326898549,73304850,956843659,58589767,-1962886167,1194921030,-385646842,1194918064,-1962181118,1183384135,172410636,1586167808,138840836,2114340665,8907011,1208371083,-955758967,5244486,1183545835,-263812852,-1995815285,1183575622,1183399948,138841076,1963738681,105286408,-336443767,-230242555,1586167888,-1948003856,-1995542905,1183577670,-96040464,-28931776,16271047,-161576192,51005323,1183386695,-297366020,1183666198,-1924131090,1343682630,16777114,1958742784]},{"sector":11,"data":[242679562,1357792909,-956082456,2630,-1962129665,1178142790,-385646836,-443809924,836189,-1947432107,100729926,100728862,-1073020894,1048783486,2115502114,537315147,-956280832,402661894,507413248,947787776,-1962925919,-1560272362,378077212,686489630,1982083,-954106624,7686,470206208,-2097152000,8766,480317053,504793856,2138880,2233993,-1034033781,-1957363706,106859500,-1962926943,-1996481002,39291143,-1593549173,378208288,126418978,1560434569,1426064578,-326898549,-129594080,-1070903274,431509584,1354256384,-6664192,-2097151745,5694,1996424820,-171251700,-16091393,1996425334,74907398,1357661837,-1946280728,-1962439720,1183384151,-229209616,-16091393,1996425334,74907398,1357399693,-1946306328,-1962439720,1183384151,-162100748,922701906,922681374,1183645724,-555200284,-1948742659,39291655,-1995946359,1996425814,-260636686,2242303,2111231,1356875405,-1946322712,-1962439720,1183384151,106334468,1980159,1849087,-624897,669578358,1975520253,-227082475,-1018113,-16768458,-402644938,-1072956142,1996434292,506920716,473366272,574029568,540475136,-129594112,-38803376,-15960321,1996485238,-159973392,-336300289,209125245,-887041,922742902,922681374,1183645724,1122521320,-2585603,939459191,-887041,922742902,922681374,1183645724,-488091412,-2585604,939459191,1358448269,-172824,1996426358,-193527818,2242303]},{"sector":12,"data":[2111231,1356875405,-1946353432,41418712,1996437503,-193527818,2242303,2111231,1357137549,-1946378008,41418712,1183660031,451432696,-263812099,-1544399221,378077212,1183514654,-162100236,-1996480349,956310038,209055814,1178190475,-1207601678,48955393,614711339,1575324416,1426066114,-326898549,75399942,-2089518080,2135884926,71732078,3409451,245640951,-1577433463,103481400,1183383604,71732220,-1962920797,100924486,950206516,3449088,-1593819997,1084424248,808910592,-26091,922681344,1452938544,-16777187,-1961545674,-654837178,1354771280,1347440720,2068122,808910592,527473173,922681344,-6679248,721420543,1575324608,1426064066,-326898549,808910594,103258645,1183383552,922702078,1318719144,-16777210,28900982,-6664192,-16776961,922746486,922685090,-6680928,-1962934017,-443810234,-1957313699,641631212,527695872,355481343,504596152,-26032,1996423168,327596036,922701854,-2003173338,-1962934242,46292453,-326413056,-1928795005,1343682630,503329976,71732048,580538398,184549406,-1928039232,-397346746,1996426323,-129594106,1150963734,-2097151970,10302,1183659636,-1202710792,1344143420,503596683,510433872,-1073020928,983637620,-96040704,-28931776,1358448269,-15984920,1183647350,-1706027272,65535,-1034033781,-1957363708,183272428,2506371,-1921354752,1343682630,503329976,108461904,-1710983425,7844,410304523,1358448269]},{"sector":13,"data":[-16001304,1183647862,-11528456,-1711266250,7882,2637443,-1925483520,1343682630,503332024,108461904,-1710983425,7953,578076683,-1996473695,-1992230330,1183710790,-1796714248,142016267,385369741,641138512,-26112,1187446784,-352321290,-163133691,1183514625,1575324662,1426065090,-326898549,75399946,-385649408,1048772777,1946157410,10479875,33441479,-163148544,884494358,-1957683712,1344144966,2049946,1958742784,675185431,963903488,-1593418101,1194917954,-13730810,703331398,2637443,-1926794240,1343682118,503332024,105286480,1905938462,184549402,-1592822592,1183383610,1183400184,-28915716,2122514432,930414846,1358317197,-16062744,-1709887434,8087,355481343,-1957642197,787940422,-1924133210,1343682118,385238669,-26032,922681344,-6679248,-1962934017,113401317,-326413056,-1560000885,-1034092502,-1957363710,317490156,721435297,-1996474874,916584006,-230258432,2080654905,-163183864,2130986555,-159481082,721777920,17689024,2637443,-1593281536,1178140734,-2081655804,2080375934,75399942,-1207534056,-320274431,708739840,276037632,-772389237,-2131176968,-1992278044,233567302,32786119,-1962480896,1177154630,-230257678,2080654905,-1962480654,1174533190,-230257678,1005995523,-276954042,15892099,1187448189,-1962934030,1174663750,1588726,414714238,-163173632,-1947056503,103543366,1183383606,-230257682,50345635,983823942,-96024832,1187446784]},{"sector":14,"data":[-1962934024,788002374,1183387302,3711486,3409451,245640951,-2080618871,2080435838,-297366779,1183516139,1004074990,360511046,355481343,385369741,112720,-26032,451477504,808910847,1354771221,-135379317,-1506871336,1183666190,-1924131080,1343682630,2299290,808910592,555522581,-286720000,1575324670,503317186,1430622296,-1910575989,250381272,-1996478303,1178203206,-385649402,45613225,-1070903296,244338768,-16314136,-1709887434,7479,-1979954968,2122576454,1081409542,3979344,434655262,671533053,-16777216,-16764874,-402640330,1048772876,2098790450,3842381,1090012809,-1577302391,1183383604,3711478,-375159,1183707766,720049910,3292803,-14189056,1018753654,-397402624,113769680,65576,3159807,3290879,-16727064,1018753654,-397402624,922743906,1996428592,569285362,62390272,-1070903296,244338768,-1962511128,-310119354,535137026,46812509,-326413056,-1591284605,1178144424,-1954712572,-1465711546,-74192882,1356482185,383665805,106666576,922681344,1996428592,114268890,1183514624,-431619106,-1961974109,-1532762042,327983374,327681579,-1508996199,-1980106994,-1969103802,-2046416109,244029715,-101249372,-1191295351,1364197381,245774079,-152564080,-25755899,-388204801,922681368,-2034756304,-1202708973,-1706033151,9106,-1034033781,-1957363710,317490156,2123191895,3456758,-1515911402,1183557029,3318532,-1559869813,100859952,950206516]},{"sector":15,"data":[675185408,594804736,294531,1325342078,1040631556,-956295168,419447302,3449088,-1593819997,1084424248,-954275072,419446278,1107740416,-1593829120,1017315380,3711232,-956284765,10246,75399936,-955941352,1573958,50611851,-1560267258,406650938,-955286016,402668038,1619968,-1560000981,916521014,-129619200,201213577,-1591575104,1183383606,808910840,1354771221,-134330741,-1506871336,-1070903282,1347440720,1920410,3842304,2113685049,675185455,1853095936,737953419,788002886,1183387302,-1509555208,-62486258,737822347,788002374,1183387302,-163133446,887816192,956316321,1048509510,2637443,725054464,-150981114,-1995528658,100923462,1183387302,-163133444,950075392,872819456,-1506871552,-96040690,355481343,385238669,112720,548837968,1599995904,-1034033781,-1957363708,149717996,1342177976,1347469355,1994919568,-129595132,-371063,-1206570954,1344148358,1949338,327983360,-1508996199,-1543899378,-1969156432,-1543109869,-1952888818,-150035442,246326265,2113949501,5289987,3409411,-1560266589,922681408,-493218512,-1593835488,1151538054,327852288,-1593816925,104398922,394138508,-1558999903,922681418,1152914736,726670848,1385844928,-1593835484,787943088,1185091238,4890880,327943737,-1935599491,4891411,355481343,503334072,112720,575183440,922681344,922685102,-236450128,-92864515,-1191491608,-11534332,1996486774,-401698566,62391217]},{"sector":16,"data":[-1070903296,244338768,-16538392,-401264586,-443865207,-1957313699,585925612,-1207923736,-1706033139,2108,-15816541,1989805174,-1996488675,-11477434,-1710315466,9947,-1207666945,1344148358,2343322,-562626816,383796877,568498768,1996423168,-562626812,2204314,-532247808,-1545058813,1183518374,245670890,-1726772575,245632651,-1588528649,-1952902260,-150034930,1307070713,1575324669,1426064066,1048833163,1946157094,641138441,624007680,-443875328,-1957313699,641631212,158597120,2504447,454554,374784,625646160,-1432158208,-1407809266,571406,-26032,-1599930368,-1575581426,-1405681906,-1439236338,-26098,648216576,1575324416,-326412861,-1956320125,1183386694,172395514,-1946663287,-1992291258,1183579718,71697162,-1912846711,1343659078,385369741,3455056,-1113960418,-1996488667,-1072958394,1048780405,1946157096,-1673097961,1183666198,-1202710792,1344143420,1961882,-196704000,23215747,-385649664,2122514681,57999604,-1593773847,1178140734,-1593150050,1183383610,1183400094,-1673098334,17450539,1183516230,-1673122912,-1929099639,-397370298,1183646799,-11528540,1996425334,75399942,-1962574512,65733702,1342197944,-1992959512,1996486214,-1673097970,922701846,-811991002,-16777187,1996426870,-1636368484,379864717,74907472,16777114,-1639544064,-1962129783,1183423558,-159481078,-949193728,63046,1589920747,105316102,-2146961882,2122519412,729088246,-1995815285]},{"sector":17,"data":[1187486790,-352321034,-159481058,-1961331712,1183386182,242679712,379340429,650353232,1187446784,-1593835274,1174474404,72285962,294531,2122560637,326369526,-1995815285,1996464198,-1673097970,127553558,-1962934242,214064613,-326413056,-15143805,922684022,-2087055704,-16777187,28838518,-1885712384,-16777187,922684022,922685090,-1617293664,-1006632931,-1960442274,1183384135,126559994,-2080881015,960062,-1499396482,48973838,1589952555,1191388678,-28931834,245644931,-1593410048,-347599196,-994039038,52823646,1183384647,-129593860,45213776,384321165,3455056,1183666206,-1706027272,9627,477413387,294531,1996426100,-398029558,-504868842,175570934,384321165,-293279664,2637443,-1590332416,1178140730,959283194,679411270,-1996472671,1117911622,-28931840,294531,1996426100,-129594102,-1511501802,175570934,385369741,-297211824,-1034033781,-1957363704,49054700,3455062,1996443678,74907398,2615962,200313600,-2094828042,10302,1018698868,-11526656,1996424822,-26108,-259325952,108328459,-1996473695,-167049658,1996428148,74907398,-1996305944,1451820102,-346927098,327852298,-1935585216,-1706016749,65535,1575324510,503317698,1430622296,-1910575989,82609112,1024083595,58064906,50439401,-13724736,-2094412377,19518,-1830222987,685611521,1048772608,1962934352,245670256,734147481,178626,-1036781357,-1992244693,922745926,-1070918352]}],[{"sector":1,"data":[-59310256,245774079,16777114,1312719616,57999360,-2097064727,963134,1256784765,808910593,692427285,113704960,65618,5650175,5519103,-369162264,1048772909,1946157132,19130627,4982471,1048772609,1946157136,245670288,1048813035,1962934348,17295619,16777114,1376175872,-956301312,19462,15984896,246550271,1074705057,-420936844,1379828480,57999360,-16720663,-1709887434,7470,5375687,-890699776,-1308164352,-385649650,1048772801,1962934348,12052739,5127811,-385649408,1048772781,1946157138,10742019,355481343,2718362,1376175872,-385875712,113705105,78,113746923,65614,4996739,-2088995840,21054,1048802677,2080378546,808910702,492804629,922681344,922681430,837288020,-1950422018,1419970630,105286400,-2097129821,19518,-380615308,1048837898,1962934352,1342621498,-1207959296,726663173,-1873784640,-26482674,1048782315,1946157136,1342621470,-352321536,-769083678,422113320,1193904937,1512694568,-1574350295,-1591099863,378208340,-310181802,535137026,113921373,-326413056,245776003,-2092139008,959550,1586185598,38243076,-1508996199,66713358,-1996474874,126550599,-1542550631,66713358,-1996475386,105351943,-1508996199,66713358,-1996474874,1200293447,244029700,-101249372,3409411,-1962653815,46292453,-326413056,-1962647925,103481927,787939382,1200164518,721914626,-150981626,-1995529170,105351943,3540523]},{"sector":2,"data":[245772023,-1962522743,103482439,787939380,1200164516,46292228,-326413056,245776003,-2094432768,959550,1183523454,244029702,-101249370,3540483,-1962522999,-1952906170,-150035442,872809465,71731456,-1962654069,-443873706,311901,-1947432107,103482950,787939382,1183387302,71731974,3409451,245640951,-1962654071,-1034090922,-1957363708,245670380,-461309743,71696767,-16353537,-2065169290,71731711,184964745,-955482670,1606,280263,-2093159680,10302,983634036,105265408,1050740853,105285888,1048782315,1946157096,3842317,2080785977,4104453,983632363,105265408,-1991767684,1187448390,-1962913788,1451951174,1575324422,503317698,1430622296,-1910575989,108954584,-2095549440,91710,79171956,922701824,922685374,244322240,-224024,1172833910,49120043,1562371467,182861,-2081649835,53822,922686846,922685376,922685374,-504889134,-771307541,-2097152000,53310,922689918,922685380,-1029632062,258914575,-628309757,922701906,635961552,-804861972,-1962934272,516120037,1430622296,-1910575989,108954584,-14975488,-1206927306,103481368,-1957687360,-654899642,-417339312,264111815,-310181888,535137026,46812509,-1873273344,-326412987,-2082959842,2113930878,-9639909,264255231,721426616,1343209478,-402229505,113764073,4030,-1962742397,1297948645,503317194,1430622296,-1910575989,106859480,-1961902431,-1995456490,39291143,-762526837]},{"sector":3,"data":[-1962742397,1297948645,503317194,1430622296,-1910575989,108954584,-2094892032,2135885438,142508828,-2095678464,2132281470,-16979952,-1962522997,-1096611754,-1072264945,49120015,1562371467,313933,1167087646,518818645,45668494,-1070903296,244338768,-2080681752,-443874579,-884122337,1167087646,518818645,-326903666,-21698556,-1980729112,-397345722,922741200,1996428592,618240764,922681344,-1578627136,309490,-1103691952,-1070137585,-401698801,62454537,-1070903296,244338768,-939852568,54278,-704198912,-2097152000,-443874579,-884122337,1167087646,518818645,-326903666,178210,1354771280,-401698736,1996487373,-565801722,-6664170,-16776961,1183702646,-11528478,1491656822,108462073,383665805,-26032,62390272,-1070903296,244338768,-2080728856,-443874579,-900899553,1478361090,-1957345904,-661774612,-2091193213,1962936446,108954374,-1957661696,1183386694,-1471756374,-11534336,1183688822,-1202710868,-397410223,1183440971,-1404662362,1183666198,-11528532,401122934,108954414,-1928563712,-11490234,-6642058,-2097151745,1946159230,-1404662518,-1502150832,-2096724504,-443874579,-900899553,1478361096,-1957345904,-661774612,-401019773,1996488070,112648,1815543632,1781989121,-401698815,2122579816,1098192648,721435297,-1996474874,117439558,1048772822,2130772182,81157,244322431,-1862366744,-26941426,14026439,585629696,1354771239,1342183608,1358954424,-1785624,-352267258]},{"sector":4,"data":[142508815,-2096530432,2098661502,138870531,-1962522997,-1096611754,-1072264945,-364475121,922701846,-1070918352,-1706012592,65535,125091851,31999687,-955913472,59462,-2081929589,-443874579,-900899553,1478361092,-1957345904,-661774612,-955716477,64070,425603,32047999,-767655167,58654720,-16717591,-15744970,-15745482,-402599370,113764516,210,-1962880791,100861510,1346179006,-1962574080,132843078,721440952,-1995457018,1048836166,1946157262,-801209544,242548736,-1961902431,-1559248874,378081218,-1096740924,258868495,1183535134,-11526648,-202835850,-129594581,264111619,264373803,-352268125,-1070137581,-1103692017,138840847,1996443678,-552474376,33048203,17808902,1177094214,-1103199482,1333677839,15533814,-2095090624,403685438,922687604,922685376,244322238,-1979813912,113769030,4030,113715691,5181374,425603,922688894,922685376,1183518654,138806022,-1202708920,-397410303,1187503795,-2097151994,2113930878,-14161661,13371079,1183514625,49120250,1562371467,313933,1167087646,518818645,-326903666,-311695356,1358710409,503727755,-459085744,355481343,-1694730497,11522,-1962742397,1297948645,503317194,1430622296,-1910575989,264151512,264246923,-1995455837,-955268074,53254,-838416640,-2097151744,-443874579,-884122337,1167087646,518818645,1048828046,2113929424,-1003028707,-1036583153,264413455,504327685,-801702064,-409802752]},{"sector":5,"data":[13633223,113704960,206,-1962742397,1297948645,-1873273141,-326412987,-1948742114,100730438,-310181678,535137026,46812509,-326413056,-1957313699,71759852,997474304,1023690379,661979131,1962933309,-180976,1996433780,1226758,-339727536,108461834,1342181304,1342187448,-2132275568,-15930624,179832438,-692563968,-1947407596,79846885,-326413056,1988843095,108956420,-2096607489,2113931390,1191545355,172360840,1324185024,1600046731,-1017256565,1167087646,518818645,1448597646,-1962379637,-8190338,1443986954,-1181104245,-101253110,-401698736,-259260454,-1181104245,-101253110,-2010070400,-963951084,-310157474,535137026,80366941,-1873273344,-326412987,-2116514274,1459661036,108432214,168328835,922687604,1996427988,1485212936,-1202710785,-1706033072,12772,-2037575445,1343684440,504671416,-26032,-2037579776,1343684440,16777114,-62486272,755517067,305987594,-385649152,-1073544940,-1476448621,922694320,-1957293356,-1903297466,-1056702632,1347605132,721440952,-1705968570,13079,821577415,15132928,721440952,1448148038,-1912832373,1358911619,-2080442648,-521468220,721440952,1448148038,-1912832373,1358911619,-2080448792,1187448516,-385800968,1187446960,-385867272,1187446952,-385866760,1354236064,-2037559296,-1924071592,-397367226,-997982541,5289990,-2037557680,-397344936,-997982557,-96040698,-1473395413,1356396543,1353205389,-386238721,-997982581,-129579258,1592459300]},{"sector":6,"data":[1342197944,-10975603,-1471771312,-26089392,-1207516029,1448083536,-10975603,-27137968,-1996045181,-986973626,-134240211,1183666392,1996443816,-11474438,837825008,837825144,835334640,837300774,837825000,837825070,835334640,839398001,842412664,2122527352,74779144,284774016,-1928694017,385833094,326023248,1996443678,-25864,1599995904,-1962742397,1297948645,1426065098,1996483723,178180,311998544,347623454,748310528,-16777165,62391414,1857572864,-1202708973,-1706033132,13121,-1207666945,-1202716671,1344148740,1342182584,3366810,1975520000,-373282043,1996423476,2406404,350926928,146296862,2023378944,184549427,-1936192,599262326,-122138624,-1202708972,-1706033144,13197,-1207666945,-1202716663,1344148722,1342178744,3383962,74907392,1342179512,504599224,374864,867670608,1996423168,2471940,313571408,146296862,-862302208,-16777165,649593974,-860336128,-1202708974,-1706033144,13281,-1207666945,-1202716666,1344143808,1342210232,3405466,74907392,1342180024,504671416,2668624,873175632,1996423168,1947652,324450384,347623454,546983936,-16777164,515376246,481841152,-1202708971,-1706033132,13372,58048523,-57623,532153462,-1195880448,-1202708974,-1706033132,13393,-1207666945,-1202716668,1344148100,1342182584,3434138,74907392,1342185656,504666296,1357904,880515664,1996423168,2603012,349616208,347623454]},{"sector":7,"data":[-6664192,-1207959297,-443875327,180829,-2081649835,1048773868,1962934636,9955587,16533191,349479168,352454201,922688892,28841266,-1070903296,1347440720,-26032,1183383552,33998844,-2097151979,2080439422,75399975,-15172096,722809398,922702016,1183520002,-11526650,1167721590,-1593835482,100733828,1072370946,355612415,16777114,1812383488,-16777215,-1709887434,14427,201213577,1343059136,1342179512,-1705983957,2297,355481343,-386107649,-692520056,244338706,-1962912792,79846885,-326413056,-1962611581,1344144454,3255706,71697152,1586177259,-2012771586,1547500614,977011828,1191118197,-1961169922,1344144454,519980683,-26032,1183383552,71732222,2013152825,-28931119,-1034033781,1478361090,-1957345904,-661774612,-1957106557,1065354846,1393128448,-1979737368,99350598,-1728559417,1782481682,208928769,1343548088,-1979743512,99351110,-923121977,1816036099,208928769,1343551672,-1979749656,99351622,-922990905,-1471771389,1857572886,-1706025453,12706,380126861,313571408,-23441378,-1929379787,1343662150,519718539,906861136,1183645696,-1957685592,1344207942,3546266,-1471771392,-860336106,-1706025454,13867,380126861,-129594544,-6664162,-16776961,-1927991242,1343662150,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,-62470396,1048772608,1962934632,1849590535,292880385,-16353537,1996425334,565569546,-335788407]},{"sector":8,"data":[-301533641,91490304,-352321096,-318310866,460595200,17464963,1187452286,-352321270,108461838,-1710721281,65535,-244087,2122517070,-377683958,-2080618869,-443874579,-884122337,-2081649835,-2091515156,92222,922685300,1996423534,5629956,-352009085,-301533621,1148520448,15533814,-2093714400,2113996926,138856238,669712385,-1929087233,1343620678,1342177720,401084048,-2081387762,259850750,343275019,1342189752,16777114,-16127232,2122516558,-797114360,1575324510,-326412861,23608963,-1207601920,48955393,1755562027,74907393,425603,-1073019788,28837236,721611520,1704612032,-1962934264,1438866917,-326898549,-1957275902,2123039862,3964934,1325338996,142508808,-1408729600,1023297160,-972589780,-963969019,1183451371,1191545086,1600052203,-1017256565,-1192457387,1344144339,503565496,63682640,1183535134,-11526652,-6683018,-1996488449,-443873722,-1957313699,-1528004116,2668544,-700019376,-3610544,184861827,-955812416,44102,683169771,1183666176,1183666350,1927827670,113542143,-1191295351,-1924136920,1358912646,-385976577,-997982371,-28931834,1342187704,1350846093,-385976577,-997982391,1552321798,-1924131073,1343663686,377767565,1354771280,-26032,1183383552,-1404662868,-1017256565,1167087646,518818645,28891278,49120000,1562371467,182861,-2115204267,-16744212,-694549386,-1996488696,2122579526,57999366,-402609943,849608524,2009074453,74907410]},{"sector":9,"data":[1358954424,-940036120,1606,-16713751,-1206570442,-1202716665,-1202716670,1344144348,1347469355,3720602,-666466048,612155403,355612415,1342180024,504551096,893491792,-1202716672,1344148182,1347469355,3757978,-666466048,14188163,922693500,179836210,-6664192,-1560280833,922686676,1183651122,-1706027300,9422,64767627,-2069633978,-431584493,-351042909,842465149,964336149,1996423168,-663290108,-2080413207,93246,1183655540,244338816,-1946994456,-1962439720,1183384151,-2041149052,1354771282,1342177720,-1873756117,-195368946,23871107,-13143040,-1206570442,726663169,1347440832,1905938512,-956301255,1376774,842465024,768021,1354771280,1347440720,3454618,842465024,888510997,2122514432,359923966,-1191282945,-2091909112,1962935934,1354771202,3792282,105286400,-1017256565,-2081649835,1996423916,889494020,1183383552,1849590782,326369281,721712895,535318720,1958742797,1845938004,-2097151999,93246,1996431732,571646,1354771280,3803802,1354771200,-402360577,-997982618,1812383492,-2097151999,92734,1637489268,-16777213,163118710,-1070903296,890804816,113704960,362,-352321096,-1950340350,516120037,1430622296,-1910575989,142016472,-2096734581,1946160255,-339727612,112643,106859344,-16091137,-6683017,-2097151745,-443874579,-900899553,-1957363708,216826860,16777114,-62486272,-1694607735,15000,-1980479863,1183577686,1347590404]},{"sector":10,"data":[-1727797064,-1298509742,1375731772,-25755824,-1694730497,15551,-129594983,-1694869879,65535,468993579,1446770262,1913550842,-129615099,-6682765,-352321281,1575324642,1426064066,-326898549,1815543558,-28930797,28856342,-811970560,-1996488643,20838982,-2146667264,1947074174,-25263904,-1948617718,-1072956858,20778100,-955157504,326726,1187448299,-1962932228,418118726,821984896,2122377596,-478202370,-1728166262,-1996476371,-471073722,-1017256565,-2081649835,-1923720980,1183427142,-2585604,130481222,-60912831,-956545281,1586189319,-62455812,-1957492794,1191181406,906479356,-237941,130481222,-59310275,-16228725,244327543,-1980384792,-661914554,-956545281,1586176007,-62455812,-1957492794,1191181406,923256572,-237941,130481222,-59310275,-16228725,244327031,-1980398104,-661914554,-956545281,1586176007,-62455812,-1957492794,1191181406,822593276,-237941,130481222,-60912847,-956545281,1586183431,310346504,-16223232,1186528374,-16323840,-927400842,244338688,-1980417560,-661914554,-956545281,1586176007,-62455812,-1958475834,2139293790,74711056,48977072,1586188464,-62455812,1183516552,2491656,-335657335,-92372951,-2147058640,2117728894,-92372974,-2146667476,1948514942,-92372986,-1962183382,1191181406,-96040196,1586169736,-28901378,1183319946,1975519994,-60912696,-956545281,1586171143,509692,-1985329523,1183579718,-62486268,11028167,-1961104640]},{"sector":11,"data":[1065418334,-1961135104,1191181406,-25785348,-1963047169,-16283644,1183557702,-1471792890,1183571326,-443851096,-1957313699,105286636,-1202695527,1385768720,-26032,1347551232,-1727773045,-6664110,1342177535,-1946316824,79846885,-326413056,11988097,-263796906,922681345,1183650668,-1706027276,15646,325859071,-1705983957,15613,325859071,1342177720,4008602,75399936,-13339392,95946358,-1125625856,79987711,325859071,385107597,-26032,922681344,-1070918804,1027054160,922681344,28840812,-6664192,-2130706177,8389758,1996430965,5289990,1250331984,-806858497,113542141,-1912715639,-1979757946,367786566,-1325107573,-1947806974,-1996226940,-2071201210,1183384576,1815543806,-96040173,1996443678,-25858,1183383552,-28931090,1978549817,1586188398,376962822,-1191245848,-397410054,2122448052,1946189828,75399942,-1207470843,-397409554,922746016,1183650668,-2091903332,2102455934,-297366779,1354236907,-6664192,-1996488449,1183575110,-330941970,1183654261,-230258276,-2081665281,2080435326,-228685033,-1947056385,1191180918,939821818,-941263865,61510,1592805003,-1017256565,1167087646,518818645,-326903666,-62470396,1183514631,1958742796,81185,37567348,1029272576,2020868099,1962935357,11725059,1962935613,13363459,1183519211,264938246,17581767,-871971072,-1962934257,1183516766,-1962440196,-857142202,105286400,264898091,2080630845,175570918,-397361109]},{"sector":12,"data":[-997982637,1958742788,205965085,-806682622,721831563,1024444934,-1015281212,-1979964184,-1072956346,1187448692,-352320244,205965234,-1410662397,-2146804085,1962944127,-939079928,-352320497,-939079930,-16744433,922684022,15208392,79987710,225820683,83642055,205965056,1994981376,-62470145,1187446791,-385874932,-890699927,-62486021,209043467,264781443,-955943676,130118,133987971,1256784757,-2083853313,1035326,113710197,69580,-1559869813,1187450826,-385875700,1187512109,-352320004,49120168,1562371467,576077,-2081649835,-1070922516,2130884688,-1706012007,1938,201213577,1342796992,4172954,-62486272,1342433464,-331800,722693174,-258322240,-1207959492,-397408804,1996487388,178180,-45488048,-1207647101,-397408304,1996487368,243716,-46798768,-1207647101,-397410104,2122578612,141820158,-1694730497,65535,-1017256565,1167087646,518818645,-326903666,-330905828,1187497664,-956289554,1111550022,267011783,108461824,1342177720,-2080575768,1570374852,-1996488646,1451880518,1076468466,1183383552,-430536220,-1149185,1996483702,-260636686,4201882,1183422720,-94991880,-1411329,1996482678,-260636686,4225946,1183422720,-162100748,4214170,-465163520,1004951067,1350040150,1178273138,-11963400,28837494,-2065149952,79987708,3827866,-465163520,1004951067,309851734,1178273138,-401902604,1183447637,474620,1996480116,-394854422,-887041]},{"sector":13,"data":[-1936002954,-1728053190,301221377,-1595148714,33324675,1996425589,-22484986,-2096970621,-443874579,-900899553,-1957363710,149717996,-164932009,1586183403,105316102,-1986525302,1187510854,-2097151752,1929967742,-2114024667,-1325399577,-1947741425,-2132225594,-955547676,1183576203,75258,1859252275,-129564678,1325389291,75399940,-1950647040,-1956684090,79846885,-1873273344,-326412987,-2082959842,1085801708,79187970,-994553853,132665344,1975520026,112645,-1070923029,201082505,-2095614784,1946158718,50640913,1085820958,-1202708990,-397410108,1183521278,49120252,1562371467,182861,1167087646,518818645,-327034738,-2033778554,65404,503727755,2122747216,-1202710785,-1706029056,17077,-8747383,1618788363,37750471,1085800448,-994553854,300437504,37790719,-8734977,503464120,12892240,-26032,-1002635264,-1207602176,48955393,-2037792725,-1072955524,28838773,244338688,-335594776,142016272,1342181304,1342185144,-1863840112,2058813423,1125161727,367722496,-1207404801,-11534325,244319862,-940607768,33520774,2092860160,91554047,-352321096,-1547687166,-1098710684,1962999676,112645,-1070923029,-1962742397,1297948645,503317706,1430622296,-1910575989,1849590744,175374337,325859071,-402098433,2122514970,544473094,-2096603509,1962937983,-1908505849,108331027,353908479,922682603,1692930958,-515970849,-16228725,1491604599,140413715,-2095822967,-443874579,-900899553]},{"sector":14,"data":[1478361094,-1957345904,-661774612,22080641,503727755,-26032,-2033778688,65400,-1996337503,-939557754,50296454,105286400,-2037559266,1343684478,1342177976,16777114,1954973952,2092960767,-2037559211,1343684272,1342227640,16777114,12860672,-2037702539,-2037776720,-2033713286,65200,-21985651,12892240,-38606768,-8747461,1996428660,1751048,108461904,1625820816,2022098926,-16776705,-1694534474,65535,1996428779,833544,108461904,1088949904,2022098926,-2097151489,16742590,1085822837,-1924129278,385790086,12892240,402450512,1342177720,-1326969200,808910845,37795861,38707536,-8616391,28837236,721611520,244338880,-1191267096,1344148182,377898637,903912016,-692584448,244338706,-940441624,16868358,2025751296,91554047,-352321096,-2084558078,-443874579,-900899553,-1957363708,172395244,2040672516,108954369,-1957661440,-197326778,1024619775,729087996,1962933821,74907442,-352316488,74907440,1342183352,38026883,-1207602176,65732642,1342185912,2095582864,-15143955,179831926,-2068295680,-1250542,481821814,1991790592,-1948194047,1438866917,-326898549,73304834,68700042,24748593,503412408,67156048,16824400,-26032,1183383552,2092960766,1996443655,1894404,-1946270069,1438866917,2122574987,142344196,-1710983425,65535,-1017256565,-2081649835,2122521324,58523654,-16740887,1183647350,-1706027290,65535,2088550411,-1962647925]},{"sector":15,"data":[1183389255,440896231,-1964423544,1183325255,508005099,-940947832,2029126,33048263,-212959231,541559560,208977931,1946157373,146721,921382516,301221574,334841542,32722560,49499776,-1074567552,-537696640,1317018859,1317028083,1719673075,1719729907,183238131,-1074567552,-537696640,1183706347,-1706027290,65535,-1034033781,1478361092,-1957345904,-661774612,-15960321,1996425846,108461832,16777114,49120000,1562371467,576077,1167087646,518818645,-326903666,-163133684,1048772608,1962934638,10414339,325860995,-385647360,1187446932,-16776972,-15504330,1996425846,108461832,4031130,-163149568,956712587,1333065286,16154243,1183516797,-1982269450,922744390,1183650668,-1706027272,18037,1039419017,326435072,-15960321,-1710003146,18023,16008903,-1608979712,822346328,-16680542,364383350,1991790592,244338689,-2081705240,149566,1996427636,175570700,-16222465,244381302,-2080429080,1946219646,-163133691,1183580159,49120246,1562371467,576077,1167087646,518818645,-326903666,-62470378,1048772608,1962934638,10938627,325860995,-385647360,-476446564,-1996488641,1451881030,1179163380,1183383552,-329872918,-1728049224,1085821010,1030722,2140819538,1375731770,-193527984,-1695385857,16389,-297367143,-1695525239,16366,468338219,1446767702,1916172272,-297387259,922693491,922686768,-6679700,-16776961,-1928106954,1343682118,3990682]},{"sector":16,"data":[16824320,-1980152277,-1072956346,1187455103,-352321284,39362746,2040672516,808910593,1423381,24557648,-401698736,1183574719,49120252,1562371467,-1957311667,1849590764,544473089,325860995,-15107072,-1710003146,65535,1342369464,-818200,-1710003146,65535,-1017256565,-2081649835,1187451116,-16776974,-1432746378,-1996488647,2122576966,57999364,-2097086743,148542,1048584820,1962934886,636955,571472,1198299728,-1073020928,28837237,721611520,-230258240,15892099,-1880554636,37795840,-53483440,-1560099709,-1073015956,922686333,726663768,1996443840,-61675514,-351746941,1144947558,1685323778,40255104,-1201835008,-1202716662,-1706033143,3060,1039550089,343212039,-1207535873,726663184,244338880,1038737128,-680198142,200689291,1024425152,679346177,2080376381,474373,1996427134,1161222,1354771280,-1259860336,1815543785,-58202093,-956119933,127558,15892099,-1058471052,-193528064,1342177720,-1710983425,18403,-1191938305,-11534334,1520043126,-16777207,-2095763402,1946158206,1748927239,980680705,-352321096,505911,440400,1192663632,-1073020928,1048817012,1946157636,1715372049,175374338,1342324920,-2080957976,922682052,317199212,46433276,-1070887189,928225872,2122514432,796131332,355481343,385369741,616667728,922681344,-1483074256,-1996488668,922742854,244323632,-1778200,-15388618,345698422,-16777168,129561718,2122534912]},{"sector":17,"data":[91488260,-352319304,1354771202,3773850,-226589952,-1207601920,48955393,-443826133,311901,-2081649835,1183668460,-1371108944,11028167,1815543552,-1404662509,28856342,-442871808,-1996488632,-1072977338,20799100,-2132642560,1963633790,-1468103716,-14123696,-1961661386,1344187974,1342177720,3854234,-1438217984,880590859,-578895861,-2136056181,460655167,-1929377850,1343664198,503727755,-26032,-1073020928,28840565,-1961891072,1065397854,-5082099,-1377063354,-443826133,311901,-2081649835,2122516716,1131675652,16533191,-28915968,2122514432,1535056126,-1995893016,1451882566,1958874106,-25755826,-1946388737,201717830,-1202695680,-397410224,1589953711,1200170744,-397212150,1191118973,-943199234,65094,419331715,681647487,705039108,-1005292540,637806622,637958143,-402360321,1191118785,-1948390402,46292453,-326413056,-402330493,1183388275,-27883012,393527819,654073540,1342851015,96701184,1347551244,175636262,-1961783832,1452014662,1575324670,-326412861,184829579,158598726,-16353537,-1394080650,1575324434,1426064578,-326898549,574522118,57999364,-16733463,28836982,-1835380736,-1996488630,1996488262,112644,-62485168,1183666198,-1706027270,19162,1023821451,2104950789,781434883,1248241663,-335655169,-28901583,983641323,906373888,-28956416,983638251,906373888,-28966656,1183519979,-28931832,1245449451,1246120513,1247693394,2122533470,125632766]}],[{"sector":1,"data":[16664263,-1962153216,1178204742,-1996259586,1996488262,112644,1254267472,1178271744,-15305474,28836982,1996443648,1620726014,-16777141,300482166,1575324426,-326412861,-16323453,-1070922634,1262918224,1183383552,74907642,-1924087765,1343684166,385631885,1283103312,1183514624,1958742790,81180,37561716,1025864704,745799683,1946158141,343347,-286718348,-95486208,16416387,1183525501,-13767682,-252970426,721434785,687879174,-454297018,721434785,16790534,-655623610,-1995946357,-789841338,972834443,58653254,-375159,-1070922634,1280350800,1178271744,-385649158,1996423325,1354771204,-1191545089,-1706033151,65535,325729923,-1207077888,726663170,-1873784640,-592451570,-386238721,1048826213,1946162026,243725,1354771280,-401698736,883022997,-1408878336,-1593213934,104398904,477893294,325729923,-1203473408,726663170,-1873784640,-596645874,325715655,803930112,1342178488,313276159,722644641,1342451718,1390939792,1782481884,326434835,1342178232,1347469355,1055395472,1778829276,-1962933997,1438866917,1352789131,1443248402,-1592888046,104403534,91558484,-352321096,-1950340350,1438866917,-326898549,574522118,57999364,-2097085207,277054,-85392524,973522688,-1593835260,103481396,1325727800,-62486272,92127243,16533191,74907392,-1705983957,19705,2130462267,-59310320,1342178488,-402360577,-997982641,74907398,-1924087765,1343683142,385762957]},{"sector":2,"data":[1288280656,2122514432,141885690,972834443,326434374,721712895,-11513664,28900470,-308654080,-1593835444,103482418,100859962,-1991770058,-1072956346,1187448189,-16776964,28836982,1183666176,-1924131078,1343684166,16777114,-92372224,-1962380032,1178205254,-15305474,28836982,-1070903296,-59310256,1342177720,16777114,74907392,1342177720,16777114,906922752,806224640,1959279364,74907416,1342177720,50345633,1342451718,1342177720,5108122,973522688,-1962934268,46292453,-1873273344,-326412987,-2082959842,112723180,-1070903296,244338768,-1545936664,378081880,113709658,66594,-397361109,28889671,32002048,1354771209,-2031612272,307405779,1342177720,-1577338392,378209320,614663210,639011076,1958873860,-62470367,516161536,-1960442844,-1960442809,614663767,639011076,-62456060,419200643,849470590,1649924,184823971,-955875904,274438,70295808,-1593559389,950206518,108461828,-385988376,1996477904,603691526,922681344,-773320102,108462033,1342177720,50345633,1342451718,1342177720,5159066,309248,1479999312,1513553682,-401698798,922737185,922686042,1290277464,307798273,-1592611677,100864602,-1365048272,1778829074,-2097151725,-443874579,-900899553,1478361090,-1957345904,-661774612,722136195,307667904,-1559079773,1319309904,-129595118,-386513271,1183436565,1996443900,-159973384,-493825,-1024919946,108462028,-1694730497,20307,721696417]},{"sector":3,"data":[1342451718,-16470808,-402376650,-1070870232,-90118064,-397361109,28837840,149442560,570869713,721420292,1055412416,1513553870,-788338670,721843967,-1202696000,-1706033151,19111,721843967,1347440832,1342177720,5168538,108461824,1342177720,1347469355,1342177720,5020570,-725948416,307377919,48762512,1513553874,-793057262,1342178488,307771135,307902207,585633424,1782481881,225771539,1342178232,1347469355,250089104,49120217,1562371467,182861,-2081649835,1055392492,-28931634,688140449,1177094726,-25755898,-16091393,1996425334,74907398,-3415832,-15388618,1805319798,-1962934200,146955749,-326413056,17051809,1183516230,106334980,-1995287389,-1559079402,378081870,1347555920,-1545056174,1575324671,1426064578,815918219,105251076,-1962654069,1319306838,1343654162,1446444818,1412890386,-397389294,-443809926,311901,-1578333355,-1017314256,1575783253,503317186,1430622296,-1910575989,2062320600,307640063,307508991,307246847,307115775,1351239309,-1949720344,-1962439720,1183384151,-1739159146,307640063,307508991,307246847,307115775,1350977165,-1949746968,-1962439720,1183384151,-94991880,1183432747,-1907979888,-1962661727,-1996215786,1451856454,1975651220,-1715459322,-956227095,61510,1589908459,126559890,39291686,-1986902391,1191154774,-263812112,2140685881,13756901,60180107,1451987526,787860,-1986378103,1589943382,1200301714,-1773786358,653543049]},{"sector":4,"data":[-1960441973,1183384151,-1806268014,972703371,91592774,-336050549,5289987,-1986640341,1183577670,-163169804,1183516029,-1962677258,1183446086,-1773746274,-1073020928,1187448189,-1962934114,26844742,1443991110,105286544,1946699275,-1004344531,1191156318,126494362,1183350564,1975519986,-230242812,106873888,-1979300097,-2010713530,-1638990073,10387075,1183569277,-1740228102,1182999677,1451426446,1183514768,138808070,1589908596,105316102,218613286,-16359797,-970586554,1191119367,-96040040,2140685881,-14358269,184960651,175376454,-16359740,-970586554,1182990343,1451426190,1183514768,-1873376370,-1962742397,1297948645,1426064586,1183575179,105253636,-2132212875,839843584,69771524,69867147,1963349561,71711017,516170869,-1960442840,1468737031,69772034,69867145,1963349561,71710989,-1070921611,-1560008029,1589904424,1200301572,1468737028,532948486,71797030,106400038,637820612,-1960441973,-1004141993,-1993997217,1468605959,73319426,-1962660703,637808150,-1993996407,-1014300073,748929676,773228804,1575324420,1426064578,117435531,681641010,705039108,-1961921276,1451951174,69772038,69867145,1589922283,69771524,69867147,638028070,-1006479479,637806622,637814667,-1006217333,-1993997218,-1993997241,516163159,-1004141528,1183515743,106334980,638028070,-1006479479,637806622,637814665,-1962518647,79846885,-326413056,-1593512829,101385260,192218158,69875455,69744383]},{"sector":5,"data":[-1577130776,378209324,1183384622,-27883012,309641739,70000324,638028582,-1560127605,378078252,1589904430,-1933341700,126428866,39291174,71797030,106400038,1375734789,2013210192,144762890,-1946401141,-443810218,-1957313699,82609132,75400022,-1205764608,103481368,1183383610,71711230,1183516029,-1962677500,1183448646,973472516,552290304,294531,916528509,-1948715264,74856944,1183516030,-1962743036,71731654,3540483,-244087,-1914110858,71732172,1575324510,1426064066,-326898549,-196688116,614531072,637930244,-385649404,2122514791,58458116,-1962898711,-654900154,-1593555319,1178141744,-1994424828,451609670,69476036,71797542,106400550,-1996217181,-16505322,-16502770,2122515534,-528541436,-2096869633,2097153150,17295619,69476036,71797542,106400550,-1996217181,-16505322,721694734,414732480,28856320,-2098704384,-163133505,1996423168,-193527818,-1962662751,84157974,1347551244,69476036,175636262,-340087064,75400107,-385646848,2122514613,327031044,-1962661727,956574230,1963206166,604387688,-10324732,2122515534,58523652,-16740119,-1006358522,637805598,-1960441973,614662743,639011076,1354771204,1342183608,1358954424,-943780632,1570374,-1962662751,-1996216810,1451883590,-96024578,2122514432,830281722,654073540,-1960441973,1183384151,-27883012,-335919361,805765093,72285956,69476036,638028582,-1560127605,378078244,1776878630,-159973377]},{"sector":6,"data":[-1946913025,1452014662,787966,1589923922,2013210364,-1175328758,-385915671,1183434965,770199800,808910786,-126419179,5140634,1446444800,1412890386,1345781522,1312227090,-93788142,-1034033781,-1957363710,116163564,721700491,721434118,-1996214266,-1072955834,-1528233099,1782481664,225706003,1342177976,1347469355,921177744,-25755693,-1979853848,1178205254,688485630,1996488262,-31201026,325729923,-1207077888,726663171,-1873784640,-754194418,50345633,990130182,2131930630,3842317,70256131,313394747,1048779903,1946162026,178244,1354771280,-401698736,113758941,4970,1048784875,1962939242,243731,1354771280,-401698736,113758913,70506,1342178488,313276159,722644641,1342451718,-1494741360,1575324626,1426064066,-326898549,-53352444,-1979955575,-1039401386,922690420,922682430,1183515708,787964,1354256466,1760055296,-60898120,172460326,921195270,1575324668,-326412861,-1593381757,1178141748,-1590198780,1178141748,-397574652,1183445967,-61437446,1081393675,-1577427260,378209324,-1993997266,1468605959,-1933341950,70034370,70129289,70518527,2122566123,410916868,956576929,276628550,184822945,1963208198,574522124,91488260,-352045919,-63576038,-1980086647,-1039401898,-11401356,-1595344266,873398259,-1949701372,46292453,-326413056,-1207636861,-397410279,-1070858389,-1560008029,-443874264,-1957313699,49054700,308035203,-2096729088,1946158206,1547600653]},{"sector":7,"data":[1551171602,294531,-420981132,-28931642,1182056459,294531,-11529356,-16496586,-16497098,-16495562,-352040394,71743518,72005712,-1000937392,-100609,-16497610,-16498122,-16497610,-402374090,922731621,1996428592,1420139262,1183514624,308060932,-1034033781,-1957363710,49054700,956583585,997459014,294531,1048778868,1946158160,112653,-10295216,72353479,-1070923776,1554060267,72393490,108314635,-397361109,28901192,-1070903296,244338768,-1949237016,1319306310,1575324420,1426064066,-326898549,1547600642,561250322,71319171,-15043584,1996425334,-744036346,-1996077431,1347553366,-940036888,278534,1575324416,1426065090,-326898549,1547600644,796131346,71319171,-165121024,1946223686,142016278,-402229505,1183437676,-27883012,-219656110,-15930377,1996425334,74907398,-1946185496,113401317,-326413056,-2096960381,1203262,1190554996,242484228,-16222465,1996424822,-6297596,1996444651,108461832,-1546443800,378081886,79172192,922701824,-1873669538,-801118194,325729923,-1207077632,726663171,-1873784640,-802428914,325715655,1587609601,313303826,51536033,-1560006650,922686126,922686048,1088950878,1074186231,-1962934012,113401317,-326413056,-1961956221,557647430,1023769600,92143656,-638992341,70295810,313394745,-1365175683,805710610,-689418236,-163133446,736821248,84160673,104529944,360649390,722644641,755249158,-397410281,1187510965]},{"sector":8,"data":[-352315402,313434378,70256171,-637303,568915574,3449287,972965513,2098375686,313303301,950081003,-1408878336,-1592820718,100859956,103486124,-1992294344,883031622,-28952320,1996429428,-1004541698,721975039,1996443840,112894,1493342800,1996423168,112648,1242536528,243990528,235077686,-935656400,1996429428,112648,3580240,70256131,112720,1293785680,79167488,922701824,1996427948,-401698570,-1398681839,-230258414,-1980348789,1183577158,-129594894,-1980479861,1048836678,1962939242,243731,1354771280,-401698736,113757925,70506,755385995,121438241,-385649152,-1073544928,-1476448621,916544102,-196728576,-1202667477,-11534334,-2031613834,113542128,16791201,-102108090,3580160,737429033,62410944,-2102528,28838006,1183666176,-1924131074,1343683654,4860058,-59310336,1342178488,-402098433,-997986231,3449094,-1577957751,-1991770054,-1242958778,1354771200,1342178488,-402098433,-997986263,3449094,-1577957751,-538247114,956315297,226489414,1347469355,-402098433,-997986295,-193035514,-8424448,2062283854,1089750667,3802683,-1070919556,112720,142016336,-2081430296,2122516164,1518147572,-336312577,3449173,2146584121,1354771213,142016336,-2081389848,2122516164,980680946,-336441601,-230257867,939932480,722500608,28856512,1996443648,-262281208,-2096708477,2102325886,-230228203,1499336939,1502304637,1512135105,1514232284,79190524]},{"sector":9,"data":[1996443648,-193527822,-1561850224,1782481869,326434835,1342178232,1347469355,-1897394544,1778829261,-1962933997,-1398541754,-196703470,70256131,-15552861,1996485750,-803673870,-1980610935,280556630,-6664192,184549631,-2094170688,278590,1996429173,-126418950,-1982859800,1451882566,726684410,-1058516800,-193527812,-1192069377,-397410303,535559281,71319171,-15174656,1996485750,1354771442,-221464,1996485750,1354771442,-1191437080,-443875327,442973,1458342741,-1070334889,503598731,141986567,-217678197,1073837478,-443851169,442973,1458342741,-1946411433,1992623182,176079878,24373713,530969508,-443851169,705117,1475119957,72256508,-1004527432,-372177282,-206962317,-443850837,442973,1458342741,1183522391,-1036805884,1317782059,2126592774,734104322,142001608,2122516254,343670788,1309046275,-265552245,-1952123907,-215961400,418118826,-268173685,1944703484,-1510759423,548980875,1944703264,-1410094591,-1956749537,146955749,-1864856576,-326412987,-1948742114,12060246,-1205744317,24313857,49120072,1562371467,182861,1458342741,2126782039,108446986,839143051,-670389029,178945828,-1191780160,-478150655,1208055168,-1956749537,180510181,861361664,1479969791,1962281732,-2095281394,2082014335,-1946252486,-1119433,-16493002,-1710990794,1917,-259307293,72627967,73283327,73152255,16777114,-1154620672,-16055208,495649396,478885769,-1912453239,-164429241]},{"sector":10,"data":[20742182,-964491915,-660641,-31062969,-1916630012,183173444,132684374,-768409600,1583333427,-326412861,1183536982,-1946209530,184834102,-1958775562,38222108,-24443276,-269797493,1258577604,20938790,-970577803,478871559,2130989055,-1157133543,-16055208,495649396,-1710880887,65535,1553111638,28311552,-1070398741,-443851169,1912914525,352387840,1744831287,-1023343872,1778385754,-989789440,1795162890,-1543437568,1828717358,-83885312,234946361,100664064,251723592,-419429632,268500738,671089152,201391879,-587201792,285277954,1056965120,218169095,905970432,302055240,1828717312,318832392,1208025856,83886428,-436141312,117440860,-419364096,33554982,-771685632,2080375629,654377728,2097152804,-285211904,520159021,1560347392,251658588,-150928640,150995494,-234814720,16778034,-536804608,285213020,1191248640,100664074,100729600,-1996487927,755041024,-1979710711,-1358888192,486539578,369165056,218104646,184615680,234881862,385942272,-1879047415,-1174338816,301990659,-1610611968,838926134,-855571712,318767875,1191183104,855703354,1006633728,872480582,788529920,889257798,2063663872,369099531,-1879047424,922812229,218104576,939589445,66304,-1728052470,-486472960,553648692,-2063531264,-1711275192,-738131200,-1694497977,-369032448,-1677720823,-285146368,-1660943546,-1660878080,637534776,1241580288,553648968,805372672,855638279,-2130640128,-1560280280]},{"sector":11,"data":[1375798016,-1543503064,-1275002112,754975268,469828352,-1526725848,956367616,620757814,201392896,-1509948631,-1644100864,-1493171416,1661010688,654312237,2113995520,671089453,637600512,687866632,-1761541376,704643848,-1358888192,973078839,1275134720,-1392508097,704709376,889193016,-1509883136,-1375730937,-1878981888,-1342176463,-1056898304,956301830,-167705856,-1325399289,-1711209728,-1291844860,973144832,-1275067611,-1275002112,889193224,-603913472,956302087,1577124608,1107296805,1946223360,1241514305,100729600,1140851257,436273920,1157628453,-654245120,1023410976,-251591936,1174405637,1778451200,1308623157,-771685632,1040188248,-1912536320,1325400386,-570359040,1056965464,-922680576,1073742670,-637467904,1358954817,-1660878080,1090519897,1392575232,1107297096,-855571712,1375732034,-838794496,1140851542,1493238528,1157628735,-1576992000,1442840897,167838464,1459618121,1124139776,1207960347,1979777792,1476395331,-620690688,1342177848,637600512,-939523260,-805305088,16842503,-285146368,1493172533,-335478016,-922746044,1124139776,1375732230,-1241447680,1509949752,1812005632,-905968828,2080441088,-889191611,-855571712,1275069223,-1157561600,-872414392,1426129664,-855637179,-1677655296,1459618340,1409352448,1325400871,1275134720,-822082748,788595456,1358955302,-1778318592,1375732518,-939457792,-771751098,-671022336,-754973882,620758272,201391879,1006634240,218169095,-335478016,1560281656]},{"sector":12,"data":[1862337280,-687865025,-721419776,16842503,1937009920,1167120524,518818645,-326903666,-1957210542,1183385670,-1694551124,65535,243779891,65208649,-1962892055,-486454002,1346273362,477430017,2030456575,9890051,638082756,2133067658,140413251,-395046596,-462154948,-1957670761,-6663996,1476395263,-1997501862,-1761524202,-812908749,22023816,22228618,302120320,1295943657,869793537,-6427649,1199048270,638082756,2133067658,140413251,460464188,393510716,21956106,1202602888,1917910915,1962871559,4122627,-1090556439,1189609757,-1980402944,-972993250,86790,-512419012,22021830,198896385,-402426625,-6684648,-1962934017,1177225286,-2090967124,-443874579,-900899553,1586298888,-1705552978,65535,21562889,-54264013,-1979192429,-1073506108,-1389432789,259506986,-276904902,734004120,1034759920,-1812660223,-503773245,317698,-352126969,-285021438,-973137150,469761799,755455999,1376200958,1526673415,-1544143865,-1861907707,-1358472699,1510292741,-653991419,1208176644,839185912,2097376003,1627692291,-1056698620,1493063941,1644796423,1761829631,1963416316,1997049608,720530947,-553420534,1510335749,-1761126905,33922309,1409681414,1074222343,2097539593,-16387841,1476336639,1526669319,1526670087,1526343687,1510431239,1510431239,923228679,2047371774,-1946272504,1141215493,16968702,-604026877,855592198,-1040295421,1611154697,1644556543,1074129662,553647881,1392990972]},{"sector":13,"data":[1510431239,1006582791,1039154696,621296648,1510292740,-653991419,990205956,-66787323,-519634940,-1660690941,1342464260,1459884031,-855185922,687823363,-385982457,1661264388,218741754,-66758139,33997828,134048777,-737610231,1979675401,-1879083768,1090484744,905969417,-872166394,1963356931,-1962567930,436604421,-872000506,1946405891,-1660520954,335909125,1241915398,-570170882,218064899,301952009,-1577095671,33554185,-1459257346,654116357,-167378426,251597829,1979652358,33554182,-1459255810,771556869,-66713594,352261125,1996429574,50331398,67498239,335917055,-16377089,-352386305,-1040251899,553587717,16776966,117827071,453369855,-16390657,2144511,-26032,-1329397760,-1609241854,35913964,199950604,604040352,-352187391,-805064702,839021544,1944637686,-283756014,973500928,1979772950,402292745,-385822080,-1070398895,1347602054,16777114,1225132288,372949761,192151791,1947794048,449460980,1390210001,1342177720,16777114,-806659584,1947794048,-318310878,58000384,-1174300952,-92254441,856847384,-2145850405,225712378,398121611,-1240667313,-335596977,-1224832508,182094415,-2147125761,611602430,544528954,259316491,851705427,1370367,-1227650469,1376643919,1337379582,1509950952,-13444470,-1031094221,-964014016,-1974419202,-947236669,1355058000,16777114,147096320,-19231805,1928659661,1342078981,1337370998,-914315797,-617350140,1405016454,37530625]},{"sector":14,"data":[-1057093001,251648010,-243334831,-13704239,-872153177,1644391171,-872198141,2030271747,-1979484413,1925579461,1984904196,-10360573,-1705907834,65535,46500547,1022259910,1391097679,15533814,1359443208,16777114,-377071360,118937995,-1330741619,-1426850784,-1712784501,-318310660,91555840,16777114,317282816,1375089153,17557586,-92251814,-385649384,372965125,611451119,15734330,-257941897,-20829696,2009414336,-1227191541,-266958257,-14882560,-1705907834,65535,1375089347,13625426,-92251814,-385649384,372965065,611451119,15734330,-257941897,-20829696,2009414336,-1227191541,-266958257,-18814720,-1705907834,841,1945447107,-370046462,-184418159,166397555,-175452674,1984953984,-347097598,854995582,-1876366391,906688050,158597460,-25112834,-1241352625,1393429071,-33393663,419004617,116787573,1946222829,-1340806376,-318310889,125043200,15666690,973140128,-1979549752,842591185,-283755786,-1979420160,-2147422450,175380730,74634538,41144634,468439434,243988018,-784727824,397476466,1947794048,1926562314,1993423364,869370370,1388742336,-26032,-2134704128,16838158,-299466557,-2134639104,33615374,-299466557,-2134639360,67169806,-299466557,-2134639872,67169550,-316243773,-154928384,134278406,243276917,-1710751507,1081,-318310717,175376384,15541888,72981239,750977024,1023111728,-789088481,-972655640,-2147397882,1326352579,645972737]},{"sector":15,"data":[-1007222546,15601280,645972744,-1008795411,15535744,243319584,-1019215635,15541888,243319743,-1023278868,15476352,243319805,-1023344404,15476352,243319806,-352190227,-316243963,-1058407168,-318310658,393543936,15535744,112641,-26032,414908416,1327020544,-1006817048,15533814,-2145946623,-33493722,21380736,-402426600,-1070334325,105290320,1237516288,-1219933879,47811327,-2020921637,-617412971,-1705815216,65535,167774659,117442560,1949318144,1949514761,1949842456,-561331398,-1081540814,113639670,-972488458,151078150,119471299,838923967,5290432,-420762893,-1409199170,-16775192,2130792718,-1073036298,54316148,-1966875788,-956353826,151058055,22265539,518316,22089471,180614783,1021605056,1017607170,-1011452923,162531102,-13441654,-1081221494,-8322825,158794053,-234860615,2009923246,-135298575,-1965061376,-28579341,-1325594850,853903881,-1914795265,-2130643521,1912665855,5224713,-855724302,-276696713,-544538379,-369298550,1229585953,1229539657,-968275639,16863238,-4728438,-1959863549,-1995996513,-1023324898,154535573,148048078,130352595,129238956,1369507695,33325057,-1073028846,397410933,-855717634,41293372,-1002782670,-58718861,-1274907113,15704855,-1006810392,1006719906,-1012501224,-76277700,1419910956,1395556353,938024705,872190973,506304,-218017345,12161963,20168193,15533814,-1107069948,384303521,-16616455,-617364509]},{"sector":16,"data":[1886656572,796146492,74592316,74856764,21440255,22093323,-1992096395,-1979625186,33641103,48859849,46727881,36711657,1387235560,-1959597311,989942078,-82577953,319618947,1363053051,1386055681,1226500865,1048791369,1962934609,-645248741,-620494921,1772063534,1193183496,1342621185,113705217,132776269,-435725629,-351755256,15573000,101319204,-207486641,-199849728,-207568128,618695168,21996160,645973042,150798573,-1593774842,-2137915148,158472442,15533814,-1979550463,-53483056,1006784447,1007121512,-1088522900,1404961377,1359937281,-65898495,1456012972,-1176532137,266862848,-346136832,1337705448,-1157371134,824967777,158795836,-466436093,-13707261,1941881639,-1107039486,182976999,-16616456,-742407197,1359886338,-384469759,-1212154653,-1089606910,149619397,-352155713,44023555,-16690242,2013352206,-1951597544,-386430002,-242485291,1448602995,-16711495,-346071341,1883030498,235600757,-176881327,-274546637,-267991552,-291367168,-316243968,-324870912,15966720,-1576995677,1336017222,-388877567,-919340019,872221160,-49878839,-386080280,1021901899,16171005,-2097149511,96864455,871948809,-104535854,620817569,101432318,-324861711,-658521344,-352079872,22265381,22089471,-1392766856,-193654980,-1342118209,976902,952363755,1963021070,14401529,-466483280,504133375,-6664105,-1023409921,1375818686,1359937370,1380612097,104639740,283641205,1022225152]},{"sector":17,"data":[-1075219195,78643426,1979699176,29524447,-1731819007,-162395461,808453619,-1269570682,1355056699,-1281834358,99874314,-1202704336,-1957668069,-402083588,-997982304,-1031683320,-1202577376,-1336911589,-386102524,-997982324,-661863676,-1957345904,-661774612,-1070377130,-485863797,80510979,-485994869,1087143939,-486125941,-1560212478,602407153,206474239,-806878237,-2090967042,-443874579,-900899553,825229320,892613426,959985462,757861676,1903165486,1970566002,2037938038,1835814252,1364197486,1431589714,1310414678,1276857627,1142638619,1125859611,1348157979,1281051995,1146832987,1130053979,1348158043,1281051995,1146046555,1129267535,-661896625,-1957345904,-661774612,1459940483,1187446579,243932154,-511639315,1183514628,1021587974,1009283680,740587374,-301533600,225706496,48447411,1585991603,71780347,785943312,176064394,1207583624,1006669033,1010332272,1949595513,1954036774,98780946,1341867718,-1821365177,-1635284434,-1193678070,65227056,-1990701128,62913350,1197271808,1187382755,-1337500677,1019079550,1022391343,-1341885138,1018293119,-1155697363,-481869745,-79247606,1195848795,-1972867909,-318310713,41158656,-1863597174,829563180,762775356,216252419,-166722489,16838150,268698228,-2020921709,1133054630,189220858,-1928432385,1996487238,1464868360,642970,1606912768,-1962742397,1297948645,1049802,48627971,6815747,1572867,2097407,5701635,2162943,13828099]}],[{"sector":1,"data":[2228479,15728643,2294015,53018627,2359551,81002499,2425087,63242243,2490623,69206019,2556159,96206851,2621695,97386499,2687231,77070339,2752767,91881475,2818303,107872259,2883839,109576195,2949375,196935683,3014911,1167087646,518818645,2122569870,125042694,69090947,-2096270336,1962935934,507413285,510918660,425603,1996425844,-26104,149618688,-1710721281,65535,-1559869813,-310180834,535137026,80366941,-1873273344,-326412987,-2082959842,-1070920468,-1097183152,-1996488704,1451882054,1975651320,8907011,1343161016,-159973550,16777114,-196704000,309706763,-1207535873,-1202716662,-1706027880,228,1996448235,18520582,-1073020928,-6664844,-16776961,882570358,-1996488703,1451883078,1958874108,1996444191,-25862,1996423168,24943348,28835840,1996443648,-25868,283836416,-1207535873,-1202716662,-1706033120,65535,98714,-16192768,-6622090,-2097151745,-443874579,-900899553,1478361090,-1957345904,-661774612,-2095256445,93758,1996451700,-26106,-1073020928,28861300,-6664192,-1996488449,-1072961466,-1706013068,65535,-1981528439,-1070864810,-1980742007,1183575622,-364475932,-336832887,-297368824,-262765823,-362888192,652887807,1962950528,808910828,-428409067,-1804545,1996484726,1632494,-1696041217,65535,16777114,49120000,1562371467,182861,-2081649835,-1070918420,2130884688]},{"sector":2,"data":[-1706012007,65535,1358841481,184986,-163149568,16402119,108954368,-385647360,159318288,294531,99156855,-26111,1183383552,-195655182,146842,-297367296,-1192208759,263864896,-11513344,1996485750,-25870,1183383552,6600956,-61961319,1183447543,1975520250,-96024827,1183514625,1446746618,2081193734,71711493,1183516019,-1962677254,1183384646,-62485510,6601113,1183447543,1975520236,-330905820,501940225,150682,-262784256,1178273141,-1710328594,65535,-1980873079,1325396054,-327253012,-1948418304,697956934,1444480070,-95486202,16416387,1089012605,140428543,638076671,1183319946,1946828024,45193956,-1073020928,1996439678,-129594100,28856342,-962965504,184549378,-2094301504,149054,2122366836,-1183511048,16777114,2126514944,209125141,503587000,112720,-26032,-1073020928,1996462975,-25866,-443875328,336249437,-1879047424,419495680,2030109440,251658496,-218037504,285212928,-1425997056,301990144,-973012224,318767360,-1711209728,-1996487936,-385809664,-1979710720,-1560214784,-1962933504,-721353984,218104577,-771685632,-1929379072,-1694498048,771817218,-905903360,234881793,654377728,-1912601855,-301989120,872480513,-2046819584,956366594,1593836288,973143808,939524864,989921024,771752704,1006698240,-1610546432,-1392508159,-1459551488,1157628673,1937009920,1458342741,-16222465,28837494,630870016,-1962934272,931857502,1946580537]},{"sector":3,"data":[142016276,1354771286,22170,73304832,-1996077429,-443851257,442973,-2081649835,-1957297428,2005599326,-1961563390,926483550,1996426356,-1070901754,7182928,-1958346752,2000225374,-1803004,939460214,1342177720,16777114,-443851264,311901,-2115204267,-16744212,1996424822,-2142860028,12079126,-6664191,184549631,-1207601728,48955393,-443826133,1478411101,-1957345904,-661774612,-1157627976,1347616767,-1710852353,207,-1995524957,-1206995434,-4521985,-11513089,-426113418,-1560281088,378080952,-4714822,-17665,1996443730,16620038,-1130168320,-1105819378,-18418,1392508858,108461904,70810,247767808,247862921,-1157627976,1347616767,-1710852353,299,-1995521885,-1206992362,-4521985,-11513089,1117390454,-1560281087,378080968,-4714806,-17665,1996443730,22649350,-794624000,-770275058,-18418,1392508858,108461904,94362,248292096,248387209,-1157627976,1347616767,-1710852353,391,-1995516765,-1206987242,-4521985,-11513089,-6683018,-1560280833,378080984,-310178086,535137026,46812509,-1873273344,-326412987,-2116514274,17828990,28837237,-2128811264,17894526,2122519413,225771786,-15829249,2140801654,-352321534,-2084557855,-443874579,-900899553,1478361098,-1957345904,-661774612,-1962611581,272436294,1024488449,57999633,1023458793,1198784787,-956252695,973830,-569981184,-16777202,-1070920074,13154384,1354771280,-26032]},{"sector":4,"data":[113704960,331490,-1560124767,1996426976,2865166,-533266608,1354771214,16777114,112640,-2130670103,-938549754,-600375552,37795854,-62485168,-566821040,-26098,-593297408,-58817778,-2095156224,1946680446,242679576,-1705983957,65535,-15829249,194706550,-352321533,-502333512,-499219698,-1384185842,249564927,249577091,-1206878976,-1706032576,709,133973703,-943527168,84861446,-8984320,1024083595,74711041,283885611,1342324920,16777114,-62470400,-1645543418,-1962742397,1297948645,503319242,1430622296,-1910575989,205949912,1946226749,17906978,1183518069,81162,37554548,722826240,-15144000,28839542,1452953600,-1207959549,132841473,722368255,-2081494080,-443874579,-900899553,1478361098,-1957345904,-661774612,1024214667,578027792,1963004221,172395277,1946157373,146697,-1070918284,1996429547,112654,-26032,28835840,-16258304,-1070920074,-310120725,535137026,181030237,-326413056,1460333699,-96024746,1183514624,508567048,-26032,1183383552,138806262,-6664162,-1962934017,-2130801680,292829756,1965964416,-8617965,-2096270034,1963128446,-129579257,954925056,1968979072,-129579257,753598465,425603,-1070922636,45614059,-129595136,1929936441,775782423,1183523956,-1957683704,-1706025273,915,-454297461,503399565,-129594544,503596547,126655056,1599995904,-1034033781,1478361094,-1957345904,-661774612,-1962218365,272436294]},{"sector":5,"data":[1023898625,762577169,1996437739,374798,42252368,1788497950,-16777211,-1070920074,-1202696112,726663180,-90550080,-1207959546,-2065104895,172395264,1946157373,146697,-1070896780,1996452843,374798,249870416,-2135404514,-1684385792,-1207959547,726666980,1622692032,-320319488,249870590,-337096674,79987707,309706763,-1207011585,-1202716658,-1706029340,65535,1996465643,1354771214,1343153336,-1705983957,65535,201082505,-7572032,28839542,-16389376,-1070920074,102603344,1994981376,49120255,1562371467,707149,1167087646,518818645,-326903666,205949702,1946226749,17906954,-1070892428,-2097063959,151614,129500532,-1207702784,1755512840,1379828480,91488258,-352318792,636931,-16748893,1756892790,199774208,242679803,1342205624,-327192,196611702,922701824,-1070923164,89758288,1996423168,2799630,1647771472,1354771202,145818,242679552,1342179000,503473848,118200912,28835840,14870784,755648139,154992641,-385649152,-1073479816,-1476448621,1996424767,440334,40286288,515395614,2073710592,-16777209,716705398,1183666176,726669050,-644198208,-1996488699,2122579014,225706234,2080375101,16792840,1654850429,242679554,1342180280,385500813,1354771280,16777114,-62486272,16416387,37555572,1023966208,58523663,-2096995165,117467198,28837237,721611520,38839232,7224963,-1207601910,48955393,1386463275,242679554,1342177720]},{"sector":6,"data":[116634,-11867904,-15829249,1756891766,-16127232,1996426870,7256074,-104535984,-1962987543,-100264699,-100337148,604305924,788931590,-385470714,-310116584,535137026,181030237,-326413056,74877782,1015025899,-2147126230,91569980,-352321096,1015039496,736851200,-443851072,180829,-2115204267,50332798,1996435061,112646,111647312,-11534336,95946358,1486508032,1342177287,1342181048,1347469355,-26032,-1706033152,65535,-1034033781,1478361092,-1957345904,-661774612,17755265,205949782,1946226749,17906952,-1880536204,242679554,503346360,309328,833616,1074837584,-26032,1996423168,374798,8042576,-6664162,-16776961,95948406,364400640,-2135404540,-1070903296,-6664112,-1207959297,1240006657,172395266,1946157373,146715,-269941899,277760,-169278603,343296,518587253,35973378,-1207011585,-1706033151,65535,-26032,-1073020928,199820149,242679554,1342178744,-8616307,-2135404522,-6664192,-1929379585,385807494,2089192784,-1706027265,65535,-17529203,112720,5814352,-70129584,-17529203,-21370800,863289355,-1928431873,385807494,309328,833616,1074837584,157129296,-1073020928,1996428660,374798,-192508592,-1706027266,2757,-1929275927,1358920838,-1202667477,-397410216,-2037515389,-397344900,-1072955797,-1070920844,-26032,1877540864,2089192705,-1706027265,2875,-1928431873,1358920838,16777114]},{"sector":7,"data":[1975520000,22079747,-1207011585,99287041,722368255,-828747584,-385875964,1183514938,81160,37555060,-385649408,669581565,242679553,1342178744,-8616307,-2135404522,1301958656,-16777206,-2037576074,1343684340,1342178488,16777114,1975520000,-11605757,-17529203,-1835380714,-1996488696,-1912637818,385842310,160471632,-2037841920,-259260550,-8617331,-8878455,1065408651,-2147126230,91568703,-352321096,-1983894782,-1912638330,973044870,1996454022,2089192780,-1957685505,520059014,161126992,-2037841920,-661913736,-2037905526,708640498,1060897908,-2033777035,130932,-8872309,-2037905526,1547501298,977011828,-2037663371,1344208760,642458,2022082816,1958642687,343146751,-9009525,-17527155,-762527485,-2037690286,300679032,-9009525,-17527155,-762527485,-2135404462,-1706025472,1022,-97303,-2037576074,1343684340,1342178488,1342180536,1346375864,659354,1975520000,-35067645,-106519,1996426870,-48961528,-2090942421,-443874579,-900899553,-1957363702,82609132,503596683,-1706025392,902,503596547,162634320,1183383552,71732222,1996375609,-1957683669,1344208454,256154,-28931840,126539915,1023166088,1006924892,-1948617414,1344208454,710298,-28931840,-1946270069,46292453,-1873273344,-326412987,-2116514274,1442876140,1024214667,192151824,1963004221,15722755,-16710423,-1070920074,-1202696112,726663180,1201295552,-2147483644,1234494,922689909]},{"sector":8,"data":[129503956,-2037559296,1343684476,1342210232,16777114,2089192704,2022083071,-8590337,213388918,-2037559296,1343684476,1342210232,733338,-62486272,-1165954933,1952251771,2088945168,1191140607,-59339780,-8617274,2022098688,-1206724865,-397405482,-2037776632,-2037514374,-2037776516,-2037645450,-2043019398,242483064,-8872309,-8997237,121111690,-1635045004,1065418614,-1962248960,973044358,1946122374,2022098694,-15542529,95948406,-2037690368,1344208760,275354,112640,-1962861847,520059014,182819408,-2037841920,-2037645448,1344208758,16777114,-1952978176,20777542,1024816128,57999362,1023466473,57999365,721476329,14805440,-1207011585,-1706033151,1690,123640400,-1073020928,1996467060,374798,2089192784,-1202710785,-1706033024,1139,-8616307,-6664170,-1929379585,1358920838,-1202667477,-397410216,-2037516253,1343684476,-2081087000,-1073019708,1996428405,964622,2089192784,-1919266561,-385875957,-2037514409,-1705967748,65535,427081739,-1207011585,-1924136935,1358920838,303258,474368,820577141,242679807,-8616307,-26032,-1073020928,485032821,2089192959,-6663937,-1207959297,1344148182,-8616307,1083854870,-16777207,28839542,-1785049088,-385875955,1996488435,-339727602,242679792,-402098433,-521536862,-310157570,535137026,181030237,-1873273344,-326412987,-2082959842,1183516908,17841420,289213300,-385649407,65601803,1711720193,-1593835505]},{"sector":9,"data":[1688404550,38314255,-1592824669,1789067850,39100687,-2096142173,150590,364381556,-1207702784,-2036137964,1312719616,91488258,-352315720,1554435,-16741213,-1934094730,-672641024,242679795,1342182328,258225919,818586,242679552,1342181816,258619135,822682,242679552,1342182072,258750207,901274,242679552,1342183608,1342444984,1342178232,1347469355,467866,242679552,1342183608,258488063,-1705983957,1350,-1207011585,-397410170,1996485490,1488910,216504912,1183383552,28856568,-6664192,-16777204,397938294,194662400,-1996488691,-2091845562,1281598,28837236,721611520,-1130737472,-16777210,922685046,278528134,-1996488693,-1705969594,65535,837402667,142508801,-385649664,1183514917,77066,1996494397,-1816132633,497549102,242679566,1342183608,385500813,1354771280,372634,258515712,16416387,1419969396,258253058,-1593686365,1218645868,258646274,-2097001821,369134654,28837237,721611520,38708160,8797827,-1207601899,48955393,1285799979,242679554,1342177720,537498,11528448,722368255,-2081363008,1008702,28837237,721611520,258253760,-1207011585,-11534317,-1710267338,15,-2097117975,1010238,28837237,721611520,258646976,-1207011585,-11534319,-351311306,1816036314,91553807,-352321096,-1547687166,1996427116,1226766,1815543632,-4396273,1996426870,8828938,-235870128,1996437995,175570702,-352285512]},{"sector":10,"data":[-1676854801,403511309,403511309,403511309,403511309,403511309,403511309,403511309,-452081907,51225357,302908174,-1207037426,-310181887,535137026,181030237,-326413056,1459809411,74877782,-1996335455,1048772932,1946157636,2078725,548930539,457476352,50676875,755128838,1149829124,591694595,39323139,-1591655287,-1073020324,20777588,-1088588800,65732624,-1996484929,1587612028,81154,37561972,-1089833984,149618715,-352317505,1687526,-1592820599,-1073020320,20778868,-1089506304,233504798,-352314689,1884135,499057643,360483072,-443850914,-1957313699,1988843244,21269252,-2096998749,1964972924,112645,-1070923029,-1962785629,1143677252,39363363,721634443,67437892,39494400,722814091,1621301060,157059842,-787784661,-1836610589,39625472,722427019,-472837796,9996171,-1962778973,-788373474,-1635283997,39887616,1575324510,-1873273149,-326412987,-2082959842,1183517420,17841420,289213812,-385649407,-1070923589,-1207813143,-397410140,-997982505,242679554,1342220216,-1005080,-1380446602,-1612165120,242679792,1342223288,-1010200,-1179120010,-1947709440,242679792,1342226360,-1015320,-977793418,2011713536,242679792,1342180792,10827519,-1705983957,3256,24002179,-11504640,1048776310,1946157636,2144261,532153323,395988992,-1996488688,-1072957370,726665588,664424640,-16777200,1048776310,1962934872,2275333,565707755,-828747776,-1996488692]},{"sector":11,"data":[-1072957370,726665588,-610643776,-1207959540,-2048327679,172395265,1023410477,58064936,67057641,-13724736,-971939417,41990,12533379,-1207601889,48955393,1183432747,242679802,1342180792,385238669,1354771280,870810,-62486272,16154243,1480405364,2132177922,4930882,1849495412,1024095232,91488406,1963011133,-62485743,-2097109597,1946221182,314588426,1187448190,-2097151754,1962997374,242679609,1342183352,16416387,582492276,1025436416,-848034640,1946617917,157302216,-1069694092,1035891730,-1183570560,565758187,1805275136,-385875957,-1531379903,-35106816,46433277,355481343,1342324920,-1705983957,65535,113640939,-16711516,28839542,-811970560,-385875957,1996488465,175570702,-352278600,242679605,-1207273729,720044205,-15829249,-1279784330,-14685440,1996426870,12171274,1996428523,175570702,-352272456,242679561,-1207273729,-397410107,-890638686,101730302,1980724753,1980724751,1980724751,1980724751,1980724751,621770255,621880593,1980724753,1980724751,1980724751,1980724751,806432783,990982161,990984977,1175537169,1360089361,1360089361,437328401,437328401,-384755183,-310116747,535137026,181030237,-1873273344,-326412987,-2585058,722654262,1996443840,808910600,106859285,-472783919,246855679,246724607,16777114,-310142720,535137026,80366941,-1873273344,-326412987,-2585058,722654262,1996443840,808910600,106859285,-472783919,246855679]},{"sector":12,"data":[246724607,16777114,49120000,1562371467,939838029,-33488128,1744831239,1358955008,83951361,973079040,100728577,201327104,117505793,587203072,134283009,-184548864,151060224,2130706944,167837441,-1241447680,1862271750,-1610611968,335609602,1509950208,352386818,-1275067648,402718468,-486538496,419495696,1744830976,369164033,2013266688,436272907,-570424832,385941248,419431168,453050120,-1291844864,469827339,-1577057536,486604555,768,503381777,436273920,167772930,1946223360,201327362,335610624,369099533,-16710912,570426127,-1207893248,855638272,369165056,587203339,755041024,-1342176502,-1895759104,1241514240,151061248,1291845897,-771685632,1308623112,201392896,1325400328,-1023343872,1476395275,-2097085696,1509949704,-1392507648,33619712,-1006631680,50396928,1308624128,83951361,922748160,100728577,150996224,117505793,536872192,134283009,-234879744,151060224,2080376064,167837441,-385809664,1459618577,318833408,1476395793,553714432,1493173010,-285146368,1526727439,-671022336,1543504647,1593901824,1560281864,-805240064,1577059087,1694500096,369164033,-620755712,385941248,1828782848,1593836304,1828782848,1627390732,1895891712,1660945160,-1040121088,1677722375,-1526660352,1694499596,-1342176768,33619712,-956300800,50396928,1937009920,-2081649835,1183515372,-1202708988,1344147406,1346372280,11418,2109737728,71732000,-826781666,-1202708977]},{"sector":13,"data":[-1706029056,99,201213577,1342865088,38298,-339727616,-18429,-1034033781,-1957363710,82609132,-13937065,503596683,265205840,922701854,-6683624,-1962934017,2096499696,-1070901714,45633616,-6664192,1442840831,504385208,372703056,-26108,104529920,57934870,1459617471,16777114,-1090262272,113770490,1046,1600046987,-1034033781,-1957363710,82609132,1988843095,75401990,16533191,-62470400,189726720,-2129298177,267838,-15565822,1911031926,-62486017,91537419,-335788405,1183362077,1975519998,-28916220,371100448,369557252,-28931580,273581960,1600046315,-1034033781,1478361094,-1957345904,-661774612,185222795,1024226496,846462977,1946157629,-14226625,-739768202,68854782,427147275,503481528,138840912,-6664162,-1207959297,1344144004,16777114,68854016,-2068309013,1996443650,108461832,-1543548952,-370473958,1342342328,-335618072,49120224,1562371467,576077,1167087646,518818645,-326903666,1782481670,57999361,-956267287,64070,425603,922687102,28841264,1996443648,108461832,1575489168,-96040449,16416387,922687605,28841264,481841152,45633540,244338688,-1979760664,2122578502,1064567034,23725767,922681344,-6679248,-1996488449,-1202652090,726663177,-6664000,-2097151745,1979644542,808910609,1030165,2078800,42834512,-692584448,-6664174,-2097151745,-443874579,-900899553,1478361092,-1957345904,-661774612]},{"sector":14,"data":[-2091062141,92734,1183670132,-6664028,-1962934017,-1962439720,1183384151,-1437169240,1354771282,112720,-26032,922681344,45618480,-1070903296,244338768,-1979800600,-1072956346,-29547660,-15895041,-1206570954,-1202716657,199950367,355481343,1342182840,1342342328,16777114,49120000,1562371467,838477,33947651,1638655,34537475,1835263,37158915,2162943,38928387,3539199,32440579,10092547,31392003,10289155,1376515,4849665,21561603,5177345,3735811,5308417,7799043,5505025,8782083,5636097,20906243,5767169,0,5,0,0,0,0,0,0,0,1,65536,0,0,0,0,24,25,0,0,65536,0,0,1412311644,19794,1412311644,21592,458752,8,655369,1381248554,774504525,5067348,1381248554,77,1376276,1441792,23,131073,65538,0,131073,0,687875328,234881024,4096,452991232,469762048,7680,536878848,553648128,8704,1,0,0,457912091,993083227,1528521522,1528524336,1848848703,0,23,589824]},{"sector":15,"data":[0,0,0,0,0,0,2304,0,0,0,0,0,0,65536,0,0,0,0,1329790976,16205,16842752,1,65536,65537,65537,78643250,458752,131072,3932160,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16842752,1,65536,65537,65537,78643250,458752,131072,3932160,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16842752,1,65536,65537,65537,78643250,458752,131072,3932160,2]},{"sector":16,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,655392,1769366852,1996514659,1868852841,29559,1413545985,1361064022,1413549360,724238349,1413546027,864328,826823745,1413545997,64884058,65404936,65667075,65929219,66322437,66715653,4,43010,2573,10,0,0,0,0,0,0,0,0,0,0,0,0,4325440,393216,2375,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,50331648,52429592,1953301356,1819506547,257,4194304,524352,-65536,-1,-1,-1,-1,-1,-1,-1,-1056964609,0,16776963,0,16711424,0,16547584,0,16269056,0,16260864,0,16260864]},{"sector":17,"data":[0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16260864,0,16523008,0,16662272,0,16744192,0,-2130706688,0,-1056964863,0,-1056964861,0,-1056964861,0,-2130706685,0,16776961,0,16711424,0,16547584,0,16269056,0,15736576,0,14683904,0,12584704,0,12583680,0,12583680,0,12583680,0,12583680,0,12583680,0,-64768,-1,-1,-1,-1,-1,-1,-1,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1056964608,-1,2130706684,-1,-16776962]}]],[[{"sector":1,"data":[-1,-16776961,-1,-268435201,0,-268435441,0,-268435441,0,-268435441,0,-268435441,-1072942285,-268435441,-1072942285,-268435441,-1072942285,-268435441,-1072942285,-268435441,0,-268435441,0,-268435441,0,-268435441,0,-268435441,3354627,-268435441,3354627,-268435441,3354627,-268435441,3354627,-268435441,0,-268435441,0,-268435441,0,-268435441,0,-268435441,0,-268435441,0,-268435441,0,-268435441,0,-16777201,-1,-16776961,-1,-16776961,-1,2130706687,-1,254,0,0,0,0,0,0,0,0,0,0,0,0,0,117440512,-1,251658464,1020261180,251658480,1020261180,251658480,1020261180,1325400304,1020261180,-218103566,-806142769,-218038212,-806142769,-217874372,-806142769,-217595844,-806142769,-16261060,-1,57599,0,0,0,0,0,0,0,0,0,0,0,0,0,1953300480,1818838544,16777317,2003127808,131072,1852141647,3026478,1392509696,6649441,1392510080,543520353,774796097,1158676526,7629156,1124074752,544829551,843472416,425984,1953718608,1125122149,1920233071]},{"sector":2,"data":[27759,1866661895,1667591790,538976372,3360350,1342179328,1953393010,538976288,877026848,589824,1953521987,543519349,1180573728,167772213,1969311744,538994035,1579163680,13894,-2147483648,1916928014,543908197,538976288,3622494,1952797584,1735289204,184549491,1919243264,1634625901,774778476,786432,1835888451,1667853941,1869182049,774778478,884736,1852794960,774778469,1937009920,1852601207,1784900971,-2143289344,285218310,1258328064,0,327717,524356,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,130946,234881024,134254592,33554176,-2108685824,1836213588,1818324585,2490368,4194338,-65528,1342308353,1919243906,1852795251,808333600,83886129,-2080362752,-16774912,33554943,1866695248,1769109872,544499815,959520937,539768120,1919117645,1718580079,1866670196,3043442,989869312,234889216,16777472,-2142240000,27471,-1874853888,335549446,1342215168,0,131118,786532,8388613,8474755,335545344,939542016,50332672,-2091867392,5701632,3276840,65550,1342373889,1701859200,1459617902,838875648,33558016,50331648,1631813712,1818583918,5111808,3932180,786444,1342308352,33554562,671089152,3072,33554944,1766228560,1634624876,3827053,1937009920,1852601207,-1866465280,335549445,989906944,1409286144]},{"sector":3,"data":[1768780389,543973742,1919249473,167780724,-1275067136,3072,33554688,1699971664,1852404852,1746957159,543520353,1851877475,778331495,655360,11796500,12,1342308353,1986089858,1751326821,1701277281,1700929651,1701998438,1869374240,1735289203,671088703,587211520,16780800,50331904,1700364368,1342177395,587211520,50335232,50331648,1867415632,7864320,2293795,131086,1342373888,1851868032,7103843,1937009920,1852601207,1784900971,1685285995,-1874853888,335549445,805348864,0,983052,786536,8388613,8474755,33557504,201344000,0,-2108685824,1702256979,1952805664,1735289204,1935745139,1342177338,1207960064,201329664,33554944,33360,983160,917539,65537,1400918019,6649441,553678848,234889984,512,-2142240000,1668178243,27749,-1874853888,335549445,805348864,0,983052,786536,8388613,8474755,33557504,201351680,0,-2108685824,1702256979,1668180256,1852403055,1702109287,1763734648,14958,131172,786492,131084,8540162,251688960,234889984,16777472,-2142240000,1702256979,7864320,2293793,131086,1342373888,1851868032,7103843,1937009920,1852601207,1784900971,-1874853888,83887364,872445952,0,327685,786532,0,1099059202,2032166258,1931507055,543519349,1952540788,1970239776,327680,6553618,12]},{"sector":4,"data":[1342308352,1851881346,1869881460,1936286752,1852731235,1064592229,327680,2621473,65550,1342373889,1936021888,4259840,2621473,131086,1342373888,7294592,1937009920,1852601207,1784900971,1685285995,-1874853888,83887365,1090549760,0,327685,786532,0,1417826306,1701995880,544434464,1881173870,1701736296,1836412448,7497058,285213952,201352192,0,-2108685824,1948282473,1344300392,1701736296,1952797472,1735289204,11891,1900549,786532,0,1149390850,1870209135,1635197045,1948284014,1868767343,1852404846,4154741,738198784,234891264,16777472,-2142240000,27471,2883649,917544,2,1132482563,1701015137,1828716652,1937208180,1835757164,1818978915,-1874853888,83887363,755015680,0,327685,786532,0,1468157954,1769236833,1713399662,1629516399,1702327150,14962,327785,786452,43,8540162,335553280,234891264,16777472,-2142240000,1668178243,27749,2004055149,-1874853888,251659534,1845544960,0,327685,786512,0,1417826306,1768780389,543973742,1953785171,1936158313,327680,3604505,12,1342308352,1919243394,1634625901,2035556460,25968,1638465,786462,262165,1451249667,3290452,419462400,201336832,67113984,-2142240768,1230196289,327680,3276840,1245196,1342373890,2003127936,1852394528]},{"sector":5,"data":[1090519141,838871040,301992960,50332160,1867284560,543973731,1869112133,8192000,4587560,1114124,1342373890,1953841536,1918312559,1918988385,1684960623,327680,4587577,12,1342308352,1852394626,1763734373,1967267950,1919247974,1342177338,335558912,402656256,-2097152000,33104,4587525,786482,0,1417826306,544503909,1702521203,4259840,2621510,1441804,1342373892,1918979200,25959,4587645,786472,262167,1400918016,1819042157,4259840,2621530,65550,1342373889,7032704,1509981440,234891264,512,-2142240000,1668178243,27749,-1874853888,251659549,-1862219776,0,327685,786552,0,1132613634,1970105711,1633905006,1852795252,1699946611,1852404852,29543,1310725,786482,0,1115836418,543454561,1702125906,922746938,486544384,218106880,-2097152000,33104,2293765,786482,0,1468157954,543453807,1735288140,26740,2293815,786457,262181,880824323,5242880,1638435,2490380,1342177284,13696,2293865,786457,262183,914378752,8519680,1638435,2621452,1342177284,14208,2293915,786457,262185,947933184,327680,2621490,12,1342308352,1918980226,7959657,838874880,201339392,67115264,-2142240000,1852143173,6881280,3276850,1703948,1342177284,1684295552,10158080,3276850]},{"sector":6,"data":[1769484,1342177284,1852788352,83886181,671105280,3072,33554432,1951629904,1109422191,7566441,1090533120,201339392,67112448,-2142240000,1761607729,838877440,251661312,1024,774996048,-1694498763,838877440,268438528,1024,3309648,1342178560,201336832,0,-2108685824,1684955464,1801545843,922746981,838881280,469765120,50332672,1331200080,1331179374,26214,5242985,786482,262173,1216368640,2003071585,6648417,1342216960,201339392,67116544,-2142240768,1701736270,327680,2621535,12,1342308352,1852785538,1952671086,7237481,1593849600,201339392,67116800,-2142240000,1701080909,1761607789,1006657280,536873984,1024,1866694736,1953853549,29285,7208965,786472,0,1350717442,7631471,1845507840,201336832,67117312,-2142240000,827150147,1761607738,671116800,570428416,1024,1329823824,3813965,2097166080,234891264,16777472,-2142240000,27471,8192115,917544,2,1132482563,1701015137,1828716652,1937208180,1835757164,-1874853888,83887375,2013306880,0,655365,786502,0,1350717442,1701736296,1952797472,1735289204,83886195,838867200,3072,33554432,1866695248,1667591790,1869881460,922746938,1677728000,100666368,-2097119232,33104,2621445,786482,0,1149390850,543973737,1701869908,3932160,1966120,458764]},{"sector":7,"data":[1342373892,1852789888,1593835621,503326720,134220800,1024,1968210000,6648684,922748160,201336832,0,-2108685824,1701146707,1006633060,503330560,150998016,50332672,1817411664,30575,3604575,786462,262154,1182814208,7631713,1174406400,201349632,0,-2108685824,1953063255,1919903264,1852789792,841490533,691351853,1593835578,335561728,184552448,-2097152000,33104,5570565,786532,0,1468157954,544500065,544370534,2004053569,673215077,892480817,3811638,1392535808,201331712,10752,-2125430016,1310720,2621540,65550,1342373889,7032704,1677744640,234891264,512,-2142240000,1668178243,27749,2004055149,1648429056,779384175,671755822,1769238133,1684368500,1700005929,1852403058,1124559969,1701736047,1141732451,1868788585,1667591790,774778484,1380275208,1481911885,1163135060,1412321357,772033874,72176212,1415074862,1953451541,1869505824,543713141,1869440365,1948285298,1125064815,1869508193,1919098996,1702125925,537534522,544501614,1853189990,1631784292,1953459822,1986097952,455096933,544501582,1635131489,543451500,1836213620,1818324585,1818846752,421542501,544501582,1970237029,1679845479,543912809,1667330163,1869881445,1937009952,1852601207,1784900971,544165410,2004053601,539914853,544162848,544567161,1953390967,544175136,1768187250,557804641,1852727619,1663071343,1970105711]},{"sector":8,"data":[1633905006,1998611828,543716457,543516788,1701080941,1631784045,1953459822,1769107488,1125348462,1869508193,1868767348,1667591790,1869881460,1142759482,1870209135,1769414773,1948280947,1634934895,1931502966,1769239653,1064527726,1851867921,544501614,1953067639,1869881445,1125261370,1869508193,1701978228,1713398881,980250482,1699948832,1952671084,1646290021,543454561,1702125938,544434464,544501614,1886418291,1702130287,1868963940,387988082,2032168772,1998615919,543716201,1663070068,1701736047,306148451,1819305298,543515489,1936291941,1735289204,538583098,1679848297,1734438241,757097573,1634692128,1650532452,1702130287,1629498980,1634038380,1696627044,1953720696,538979955,2032168772,1998615919,544501345,1629515636,1852141680,1869881444,1064593696,1936269337,1937072672,1126182521,1869508193,1868767348,1667591790,1225404020,1769236846,2053729377,1632832869,1931502966,1769239653,208889710,1953521987,543519349,1954047348,2004055149,1802398835,1886339849,1702109305,1661498488,1970302319,91383156,1701080941,22020461,538968899,542966875,1342513197,1953393010,0,0,2004055149,1802398835,1802134381,83915017,7473408,1929969671,150996992,589940,167802121,7768320,1953300494,11856131,-1142419824,1312719088,57999364,-1207917079,1344144462,504039096,268613712,259562064,1183383552,2092960764,63879202,985157662,-1202708982,-1705992190,4133]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[48689,43776,0,156041216,1310720,1441814,1441814,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,1886549325,639662440,1819033888,539782757,1818322258,1936879476,825297421,540030265,1752446513,1702248736,776282158,1699946540,1819571297,1461726309,958406721,842084664,168626701,168626701,1346720336,1313428033,541139015,1162694472,1380927008,1279349536,218762565,1970231562,1851876128,1684960544,1953722981,543452769,1952540788,1869116192,1735289207,1746952480,543518063,1763733364,1646293876,544502629,1635148897,1734440046,1634541669,544433515,543516788,1702458722,1635197042,1948284014,1970282607,1634231154,1897948531,1801677173,1629518188,1629512814,543236212,1953785186,1881174629,1701013874,1210064942,543519333,543519329,1701670771,1936028704,543450484,1936746868,544175136,544499059,543516788,1734440051,1868963941,543236210,1718579824,1650553961,1629513068,1696621678,2037150305,1818325792,168636005,1766197773,1886724216,1936615712,778396777,1631723552,544828516,1701077350,1635197028,544435308,1998615151,544109167,1685024631,1802661751,1684369952,543515509,1701867617,539913313,1818579744,1769235301,1881171318]},{"sector":12,"data":[1953392993,543649385,1819044215,1818585120,1870209136,1684086901,543236196,1936028262,1869357160,539913071,1701593888,1998614113,1868852841,1629516663,1965057134,1918987630,543450482,1819042167,1769414771,1663069292,1952540018,543236197,1734963810,539784296,1701144675,1629518194,1634037872,1668178290,168636005,1632438797,1830839659,1919905385,1885696544,1936877921,1142956078,1886415218,543649385,1668637030,544437349,1819042147,1953784096,1769238117,1948282479,1634082927,2037673077,1970040864,1852400237,538979943,544567129,1970235507,1830839404,543517537,1701999987,1819042080,1970040864,1852400237,1936269415,544106784,1685024615,1919907616,1735289195,1685221152,539914853,543574304,544567161,544104803,1920102243,544498533,1818324339,1953046636,745762149,1663066400,1769236850,543973731,1936683632,1952671088,1851876128,1852793632,1953391971,1702125938,544108320,1869242733,1868767346,1684632430,1952543333,1936617321,1277173806,1702063983,1869571104,1852514418,544432751,543452769,1667855475,1735289195,1634886688,1936876919,544370464,1919905636,1633886323,1768169582,1634890867,1948284003,1646290280,1919252853,544432416,1819043191,218762542,1919501834,1763734643,1701998701,1869181811,1629516654,1763730802,1919905901,1953390964,1495277614,1931507055,1819635560,1701519460,1948282981,1814062440,544110433,1835627124,543450477,543452769,1701274725,1663052900,1769237621]},{"sector":13,"data":[1702125942,1869375008,544367991,1935959394,1851858988,1701978212,1702260589,1819042080,1717924384,543519605,1663070831,1953789292,1713402469,544042866,543516788,1685217657,1769152556,1635214692,539781996,543452769,1668444016,779314536,168626701,544567129,1970235507,1881171052,1931508065,1768121712,1629514849,1852142708,1852795252,544175136,543516788,1668573547,544105832,1852139639,1701998624,1769103728,1948280686,1746953576,543518063,544370534,1701601651,1394614318,1768843624,1864394606,1936614774,1634869292,1936025454,1851858988,1885413476,1634298992,1936024430,1818851104,1633886316,543712116,543516788,1702458722,544417650,543521125,543452769,1701536109,1730175264,543453039,1919970665,1769173861,539913839,1701137184,1735289200,1701344288,1970234144,1919251566,1851859059,1769152612,1663069038,1918985580,1629512805,1847616622,544498021,1701536109,1752440947,1768628325,1701340020,1869357166,1931504495,1768120688,779318639,1866670112,1718775660,1663069301,1635021429,544435817,1746955881,1869443681,1998616942,543716457,543516788,1853189987,544367988,1936748404,1684955424,1869375008,544436847,543450209,1701867617,1629514849,1702305907,221146220,1107954954,1919448161,1936551791,1634235424,1886593140,1818980961,1633886309,1700929646,1914724640,543973733,1937075312,1495277614,1931507055,1819635560,1751326820,543908709,543452769,1651863396,1663919468,1801676136]},{"sector":14,"data":[1701344288,168636013,1698826765,1869574756,1629516653,1763730802,1919905901,1953390964,1668245024,1881173089,1953393007,538979955,544567129,1819044215,1852401184,1953046628,1919907616,1948280948,1696621928,1919903334,1869881460,1701145376,1752440944,1847618917,1819566437,1918967929,1735287154,221144165,1124732170,1702063980,1814066036,543911791,1735549292,1998615141,544105832,1953459299,544433512,543519329,1886351984,2037150309,1853188128,1851859047,1752375396,745760111,1952540704,1629498483,1864393838,1919248500,1953653024,1701602153,1918967923,1818304613,1852383340,1634496544,221144419,1393167626,1919508852,1937334647,1701602080,1684370017,543584032,1701470831,544437347,543452769,1953718895,1701602145,1634541683,1763730795,1634017396,1919248755,1919903264,1869770784,1667592307,1948283764,1869881455,1948283509,1746953576,778399087,168626701,1769239617,539784035,1702060386,1953391981,1629498483,1730176110,1734439521,1629516645,1763730802,1919905901,1953390964,1634035232,1701999988,538979955,1914730818,1987013989,543649385,1701736053,1936942435,544830049,1970037536,1919251572,1768453920,1830840419,1746958689,543520353,1969447777,1634497901,744777076,1970239776,1818851104,1768169580,1634496627,1752440953,1969627237,1981836396,1702194273,543584032,1919906931,543516513,543452769,1818850421,544830569,1667330163,168636005,1666386445,1969513832,1931502956,1769434984]},{"sector":15,"data":[544434030,1952540788,1701994784,1852793632,1768842614,544501349,1948282739,544498024,543516788,1701670760,1818851104,1700929644,1701998624,1953391987,1629512805,1953046644,1700929651,539915379,1919242272,1634627443,1851859052,1634082916,2037148013,1769107488,2036556150,1869116192,543452277,1914725730,1701868389,1684370531,218762542,1970231562,1869116192,543452277,1668508004,544437109,543516788,1685285239,1864396143,1851859046,1634541689,544370538,1785688688,544498533,1752459639,1701344288,1634038304,1936007276,1702125940,1701273888,1646294126,1919903333,1919950949,1701143407,1735289188,1293951022,544829025,1735549292,2019893349,1684956528,1920300137,539784037,1970235508,1847617639,1701078373,1830825060,1847621985,1646294127,1667571813,1836019311,1818321769,1931508076,1684960623,1768453920,1948280172,1852406130,1869881447,1818587936,543236204,1701670760,220209198,218762506,218762506,1818304522,1852383340,1634496544,221144419,1393167626,1919508852,1937334647,1701602080,1684370017,543584032,1701470831,544437347,543452769,128,194,13107321,7667712,2381,113,0,0,0,0,0,0,0,0,0,1465662019,2119980879,809717572,775041605,5262676,1828913158,48759378,838004880,1828866625,413733321,-258997626,23690,839731777,1828913436,67109633,788,50331924]},{"sector":16,"data":[128,154,12714104,7864320,196,12976248,-65536,200,14942207,-65536,229,28377087,-65536,434,41222143,-65536,630,61603839,-65536,941,73072639,-65536,1116,95551487,-65536,1459,101253119,-65536,1546,108134399,-65536,335625218,1649,1651,115212287,-65536,1759,121307135,-65536,1852,133234687,-65536,2034,142344191,-65536,2173,155582463,-65536,2375,155844607,-65536,2379,156106751,-65536,2383,95551487,-65536,1459,101253119,-65536,1546,108134399,-65536,251739138,589826,1970225968,1919248754,536872448,1986815304,1677721600,1864396143,1851859046,1634541689,544370538,1785688688,544498533,1752459639,1701344288,1634038304,1936007276,1702125940,1701273888,1646294126,1919903333,1919950949,1701143407,1735289188,1293951022,544829025,1735549292,2019893349,1684956528,1920300137,539784037,1970235508,1847617639,-1995815287,-1073018794,1317738101,105286408,-235417037,1183570059,-1947076860,-1875055661,1317787787,106334984,-788248949,-774254101,198758890,-134973989,871402481,-11513134,1996425846,14477320,1996903995,990409223,58065990,855764611,197561298,-150506241,-2082932774,1583022298,146955615,-326413056,-617392553,184960651,-149783104,72780755]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[543516756,1819045734,1852405615,1852383335,1836216166,1869182049,1752375406,1684829551,543515168,1702129518,1868963940,1752440946,1914729321,1634036837,168650099,1293969007,1869767529,1952870259,1852397344,1937207140,1092624430,544174956,1936617315,544500853,1920298873,1852397344,1937207140,1702057248,225650546,1769293578,1629513060,1948279918,1092642152,1852138596,544044388,1818455653,1684370287,544106784,543516788,1801675120,543516513,544370534,1953658214,225600872,1718511882,1634562671,1852795252,218762542,1342835978,1414416722,541544009,1213483351,542397775,541411412,1330597971,223495500,544491786,1881174889,1769173871,543517794,1881173876,1953393010,1869768224,1851859053,1886413088,1633905004,1852795252,1953068832,1953853288,1769174304,168650606,543516788,1869574227,779249004,1750343712,1830843241,1646295393,1919950949,1919247973,1701601889,1701345056,1970413678,1852403310,1852383335,1948279072,168652663,1886350438,1679849840,1702259058,1852793632,1969711462,1769234802,1629515375,1953046643,1852793632,1987208563,1679848293,543912809,1667330163,168636005,1965059924,1948280179,544434536,1952540006,543519349,1851877475,1948280167,572548456,1869574227,1030907244,577987961,544106784,224749684,1769429770,2003788910,1931500915,1769235301,1864396399,1752440934,1230446693,1313418830,1768300617,1948280172,1701978223,572548193,1869574227,1030907244,774008686]},{"sector":3,"data":[168626701,1702129486,1394614330,1769239653,1394632558,1819242352,1849520741,1769414767,1679846508,1650553705,1881171308,1953393010,543649385,1836020326,1852397344,1937207140,1700006413,1852403058,168651873,168626701,1313756498,541544009,1129595202,774381640,693387586,1279870496,1176523589,541937490,1145981271,223565647,543574282,544567161,544109938,1953701985,1633971809,1629512818,1768714352,1769234787,1713401455,544042866,1633820769,543712116,1701603686,1970239776,1752369677,1684829551,1701995296,543519841,1229987937,1768300614,1713399148,1948283503,1646290280,1751348321,1818846752,538979941,543516756,541477200,1701603686,1752369677,1684829551,1986095136,1752440933,1634934885,1344300397,1864386121,1869182064,1931506542,1629516901,1752440947,1885413477,1667853424,1869182049,168636014,543516756,1869440333,1377859954,1769304421,543450482,543452769,1869440333,1142978930,1919513445,1864393829,1869182064,1713402734,1948283503,168650088,1668571490,1229987944,1768300614,1931502956,1819635560,1818304612,1937334647,543515168,544499059,857763700,539904818,1936287828,225667360,1684957450,1852141669,1953391972,543584032,543516788,1869440365,1914730866,1769304421,1701668210,544437358,544370534,543516788,1819308129,1952539497,778989417,168626701,1668571458,1768300648,544433516,1970235507,1646290028,1970413669,1919295598,1948282223,1293968744,1329868115,2017796179]},{"sector":4,"data":[1953850213,778401385,168626701,1431439885,1313427022,1230446663,1464812622,1381441619,541414473,1092636239,1331123232,1330398752,542724176,1414748499,168643909,1702258003,543973746,1667592816,1769239905,544435823,1970235507,1646290028,1651449957,1987208563,1998611557,544105832,1852404597,1767317607,2003788910,1460276595,1702127986,544108320,2004099169,1818632303,2037411951,1937339168,778921332,1933647904,1936024608,1651077731,1763730533,1870209134,1830842997,1635085921,168635500,544567161,1970235507,1746953324,543520353,1414091351,1480928837,1852776517,1819042080,543584032,1920298873,1668244512,1852140917,1768169588,779316083,1850280461,1685221152,1948283493,1919950959,544501353,1735549292,1868832869,1701672291,745763950,1970239776,2036428064,1852401184,1953046628,1667591712,1634956133,168655218,1881173876,1953393010,1953068832,1953853288,1701344288,1869640480,1919249519,1935745068,1936024608,1651077731,1629512805,1702260578,218762542,1376390410,1229868629,1109411662,1128878913,1145979168,1396785696,541147977,1213483351,1313429280,1398230852,1933642253,1701344288,1684291872,1969516133,1852383341,1633904996,745760116,1701344288,1297040160,1953525536,1936617321,544106784,543516788,541477200,1701603686,1711934835,1109422703,1128878913,1684955424,1396785696,541147977,543519329,779380083,1750343712,1881174889,1702258034,544437358,1718513507,1952672108,1752637555]},{"sector":5,"data":[168652389,1852732786,543649385,1752459639,1836016416,1768846701,1769234787,544435823,1735357040,1936548210,1226842158,1870209126,1868832885,1953459744,1986095136,224469093,1297040138,1919905824,1852383348,1818326131,543450476,2032168553,544372079,1953724787,539782501,544567161,1819044215,1952802592,1830838560,1634956133,168650087,1768189545,1769234787,1948280686,544498024,543516788,541937475,1953656688,1918967923,1853169765,1767994977,1818386796,1752637541,2032168549,168654191,1702130785,544501869,1914728308,1109421685,1128878913,544370464,1230192962,539902275,544166944,1768912481,1752440932,539784041,1953064037,1701344288,1094846989,541280595,1109422703,1128878913,1229987905,1768300614,1998611820,543716457,543516788,541477200,1953064005,1629516399,1679844462,1818588005,225731429,1701344266,1297040160,1953525536,1936617321,218762542,1141509386,1163282770,1327514144,541139022,1196312915,1176520012,1347440460,1498619993,1296389203,1850673677,1931501856,1818717801,1818632293,2037411951,1769104416,1931502966,1702130553,539784045,543516788,1953655158,543973749,1986622052,541204581,1769238639,168652399,1679848297,1650553705,778331500,1850679328,1701344288,1931502963,1702130553,539784045,1701209458,1668179314,1948283749,1919164527,543520361,1769414722,1646292076,1762266469,1919251566,1952805488,1629512805,1919164531,543520361,168635969,168626701,1347241300]},{"sector":6,"data":[1380012623,1229332569,223561036,1836012298,1885413477,1667853424,1869182049,1948283758,544498024,544109938,1701080693,1767317618,2003788910,1769414771,1663069292,1952540018,1702109285,1919905901,226062945,1818846730,539915109,1701336096,1818846752,1835101797,1701257317,1634887022,544828524,1768383842,1998615406,543716457,1769218145,543515756,1918986339,1702126433,2116558962,1628048681,1696621678,1998611566,543716457,543516788,1702131813,1869181806,1412309102,539906125,1970231584,1869116192,543452277,1702258030,1701060722,1702126956,1701344288,168650099,1701603686,1752637555,543517801,1852732786,543649385,1684957527,544438127,1948283745,544826728,544825709,1763730786,1937055854,2036473957,544104736,1819308129,1952539497,778989417,1716062733,1952866592,1897951845,1953786229,543649385,1684957527,544438127,544567161,1684957542,1835365408,1634889584,1713404274,1936026729,543584032,1936287860,1919903264,745824621,1752435213,1830844773,1646295393,1701060709,1702126956,168636004,168626701,1313428048,1196312916,1414092576,1213472840,1230250053,540030264,541347393,540357944,1313428048,1397900628,1750338061,1230250085,808794144,1684955424,892680224,1685024032,2004033637,1751348329,1869116192,543452277,1931502946,1713402981,1679848047,1952866674,1635086624,2037672300,2019914784,168636020,543516756,1986622052,1713402469,1948283503,1411409256,892870729,1919950901]},{"sector":7,"data":[1702129257,1970479218,1919905904,1948283764,1679844712,1969317477,1663071340,1634885992,1919251555,1952805664,1175063854,544501359,1953653091,1734633842,1629516645,1847616882,1931506799,1869639797,1684370546,218762542,1376390410,1229868629,1411401550,1142965576,1126191951,1396984648,1414864971,1414089801,1309281625,1919252069,1853190688,1263026976,541807428,1752459639,1701344288,543567648,1634886000,1702126957,1752637554,543517801,1684957527,544438127,1914729321,1768844917,221144942,1853182474,1735289198,1263026976,541807428,1752459639,544503151,543516788,1881171503,1835102817,1919251557,2036428064,1668180256,1701999215,2037150819,1684957472,1952539497,1812598117,544502639,1937075299,1936876916,1852404512,1864394083,544105840,1701603686,1918967923,1852383333,1886545268,1702126962,1935745124,1768251936,1814062958,779383663,1699154445,1634887022,544828524,1145784387,1931496275,1819635560,1700929636,1853190688,1953853216,1701079411,543584032,1684957527,779319151,2019887629,1684956528,1920300137,539784037,1970235508,1847617639,-1995815287,-1073018794,1317738101,105286408,-235417037,1183570059,-1947076860,-1875055661,1317787787,106334984,-788248949,-774254101,198758890,-134973989,871402481,-11513134,1996425846,14477320,1996903995,990409223,58065990,855764611,197561298,-150506241,-2082932774,1583022298,146955615,-326413056,-617392553,184960651,-149783104,72780755]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[154189,344,32,65535,490209280,0,64,0,0,0,0,0,0,0,0,1024]},{"sector":11,"data":[1409299944,544434536,1735357040,544039282,1970365810,1936028265,1667845408,1869836146,1461744742,1868852841,168653687,-1273033180,-1205744375,567102465,15919962]},{"sector":12,"data":[279886,153355549,191784989,5308422,402665184,65593,5308416,262225,4194799,82969288,84083963,4673,262533,1187250176,33812480,393216,72417603,72479088,165544332,165671280,138412629,138539376,74646239,74772848,145097515,145158512,185729989,185790832,38667398,38793584,142017711,142143856,56558911,56684912,222430585,222556528,27592287,27718000,48629381,48755056,65275580,65401200,16975623,17101168,297862939,297988464,75106369,75231600,57608332,57733488,97454279,97579376,1247548,1306672,140511550,140636464,177801679,177926448,157616765,157741360,193465132,193589552,74714106,74772784,45878350,46002480,168889473,169013552,133238061,133361968,100076987,100200752,132058663,132182320,52498098,52621616,95227629,95351088,109776724,109900080,100405195,100528432,359534642,359592240,25760154,25882928,112923062,113045808,354882084,355004720,13439875,13562160,104666001,104788272,103683064,103805232,257954922,258011440,52237674,52359472,45421982,45478192,8721869,8843568,40703448,40759600,306845190,306901296,73209664,73265456,88020880,88142128,144775147,144896304,35002498,35123504,107813030,107934000,274995486,275116336,68098624,68219184,148576906,148697392,273947427,274067760,188357701,188477744]},{"sector":13,"data":[130882831,131002672,186719631,186773808,60956244,61075760,65609362,65728816,30940894,31060272,60497667,60617008,345186120,345305392,4595885,4714800,23273651,23392560,173875408,173994288,81731977,81850672,163127781,163246384,558375559,558494000,226763964,226816304,80160156,80277808,102966764,103018800,42542679,42594608,399320706,399438128,307767329,307884336,40708464,40759600,8333722,8450352,155527588,155644208,50932291,51048752,2304633,2355504,137374333,462553425,-2147418108,3,721616896,-265289711,492,722731008,-265289711,500,723845120,-265289711,508,-2147352576,2,724959232,1048780,515,738328576,1048601,523,-2147287040,1,739966976,-265289663,529,-2147221504,1,744226816,-265289687,537,-2147155968,20,746913792,-265289719,32769,747503616,-265289716,32770,748290048,-265289715,32772,749142016,-265289712,32773,750190592,-265289720,32774,750714880,-265289719,32775,751304704,-265289720,32776,751828992,-265289712,32777,752877568,-265289715,32778,753729536,-265289720,32779,754253824,-265289718,32780,754909184,-265289709,32781,756154368,-265289721,32782,756613120,-265289715,32783,757465088,-265289715,32784,758317056,-265289715]},{"sector":14,"data":[32785,759169024,-265289715,32786,760020992,-265289689,32787,762576896,-265289709,32788,763822080,-265289710,32789,-2147090432,8,765001728,-265289721,32769,765460480,-265289724,32770,765722624,-265289722,33025,766115840,-265289722,33537,766509056,-265289710,33281,767688704,-265289692,33282,770048000,-265289712,33283,771096576,-265289718,33793,-2146893824,1,771751936,1048579,545,0,1280789767,1397051983,1213680903,1397051977,1397575686,122836291,1414873682,89018196,1380011346,1464665931,1329809759,1464665934,1313164639,1464666197,1128481119,1459962452,1163151698,16777216,201328640,4352,1380272902,55330126,71910471,1380275029,1497713416,1380011842,33554244,1209155533,1070399744,16777228,4276173,1070399744,16787979,1464549325,1070399744,17101131,1579106253,1070399744,17464122,-501202995,1070399744,16943136,-1272954931,1070399749,16777244,2899917,1070399744,16777256,-1658961971,1070399745,16777261,-96124979,1070399760,18031941,-784187443,1070399747,16777245,69025741,1070399747,17105441,-753188915,1070399747,16965384,540621,1070399744,17758795,1078673357,1070399759,17015363,-885375027,1070399497,342821,1392589,1070399488,396821,1543716813,1070399490,110918,-1239138355,1070399488,975909,-751550515,1070399498]},{"sector":15,"data":[258819,19939277,1070399489,966949,352534477,1070399492,117009,1578057677,1070399496,3,84099021,1070399490,20251,402866125,1070399491,357924,1130445,1070399488,83749,2375629,1070399488,247079,2064728013,1070399488,385319,1006714829,1070399489,27651,-536657971,1070399488,43314,1528971213,1070399497,68,977682381,1070399501,1316130,-1509539891,1070399494,540465,1729183693,1070399489,1396514,1075396557,1070399488,155148,3686349,1070399488,34583,-1673969715,1070399493,235523,3489741,1070399488,304407,-1874116659,1070399503,37,-1155186739,1070399506,244500,-2129117235,1070399491,56600,-1441251379,1070399490,101912,1589197,1070399488,78,405094349,1070399508,929317,-1559609395,1070399496,178185,1177960397,1070399491,13827,1778597837,1070399491,741195,692731853,1070399493,125706,-1722859571,1070399490,1226570,2084716493,1070399496,177734,388317133,1070399497,101424,2703309,1070399488,39,-1977925683,1070399489,14596,3162061,1070399488,184833,704856013,1070399489,95235,-516341811,1070399490,126209,-1862058035,1070399494,79,440614861,1070399489,286531,-1589428275,1070399492,268612,2084847565,1070399490,292164,876888013,1070399497,125519,1075986381,1070399508,184086,-1204535347]},{"sector":16,"data":[1070399499,122134,-1759887411,1070399490,26,739327949,1070399490,1052687,-2009120819,1070399492,14,1494106061,1070399488,54,-1036632115,1070399488,131894,523648973,1070399496,274435,-1258078259,1070399495,97289,475085,1070399488,9,-1610006579,1070399488,46862,2310093,1070399488,1040715,-1790558259,1070399494,70,692469709,1070399498,1014562,1311588301,1070399489,346931,-1356709939,1070399496,67,-1844625459,1070399490,289057,1712275405,1070399498,111689,-1038008371,1070399493,195076,167985101,1070399494,324102,-402440243,1070399495,4,-251445299,1070399492,288515,-920567859,1070399492,47108,-1776140339,1070399508,41761,1813725133,1070399491,26913,1090731981,1070399491,13857,-585023539,1070399488,511284,-1038860339,1070399490,231956,1293172685,1070399490,288533,337723341,1070399489,58,-566607923,1070399498,364833,624246733,1070399488,6222,-1794883635,1070399489,494851,3227597,1070399488,166939,-550944819,1070399502,168195,-215334963,1070399490,42,541343693,1070399489,304708,523452365,1070399491,254271,-902283315,1070399488,25,-1471987763,1070399489,367381,285818829,1070399491,192259,-972865587,1070399490,38,2080980941,1070399490,857381,1528119245,1070399498,250369]},{"sector":17,"data":[-1174323251,1070399491,391195,-1689632819,1070399507,181275,-334413875,1070399488,203537,1064909,1070399488,187702,-1223737395,1070399488,188431,100745165,1070399491,444163,999373,1070399488,529672,1327053,1070399488,130569,1798586317,1070399494,503816,923287501,1070399492,285992,-13025331,1070399491,73514,338247629,1070399502,43,-1911603251,1070399493,161039,-150323251,1070399490,364614,-318095411,1070399498,498182,671693,1070399488,19017,370163661,1070399490,68358,2081374157,1070399488,1114127,-16433203,1070399488,6,344013,1070399488,74756,-131121203,1070399490,16431,-786284595,1070399502,1372706,1478836173,1070399491,1079074,-214941747,16745985,2244557,1070399488,33049,990068685,1070399490,68377,388120525,1070399497,742446,691158989,1070399488,112434,3293133,1070399488,70194,-1207353395,1070399489,291355,-1726267443,1070399493,46,737229,1070399488,16693,-1941225523,1070399501,791115,1458125,1070399488,238605,1410154445,1070399491,121357,1023557581,1070399497,199207,18104269,1070399496,510228,3620813,1070399488,484372,977616845,1070399513,1596997,-62570547,1070399511,82999,1547124685,1070399488,53270,2113485,1070399488,31,1867202509,1070399492,75]}],[{"sector":1,"data":[1544175565,1070399496,63,1682063309,1070399488,66,4079565,1070399488,807476,868301,1070399488,21565,1279082445,1070399489,61,3424205,1070399488,441602,5259213,1070399488,51,147405,1070399488,158280,424165325,1070399489,72,-1022738483,1070399495,522261,1896824781,1070399495,478467,-753975347,1070399489,914703,806830029,1070399497,240435,1513701325,1070399495,452153,171458509,1070399499,550200,-583516211,1070399497,397369,540622797,1070399495,496697,1593917389,1070399490,210975,-49463347,1070399490,112416,-1843380275,1070399492,59,3948493,1070399488,763979,-653312051,1070399488,23,-1744420915,1070399490,64,-1875558451,1070399491,688191,-1421918259,1070399492,263487,1393180621,1070399499,137479,1612857293,1070399501,680248,138821581,1070399489,310787,390807501,1070399499,462083,1998274509,1070399495,1358370,1900494797,1070399492,201525,-902807603,1070399492,100423,4669389,1070399488,369188,1800093645,1070399500,77900,-1840562227,1070399498,768527,856637389,1070399501,220976,2131378125,1070399493,424970,-1592836147,1070399504,76,2016821197,1070399495,846095,1785805,1070399488,119811,-149930035,1070399491,30977,-284540979,1070399488,74,927612877,1070399506]},{"sector":2,"data":[68879,1427521485,1070399494,376136,-230146099,1070399490,18,-1140768819,1070399488,54273,-603897907,1070399488,75777,-369016883,1070399491,273153,1766657792,1936683619,544499311,1414091351,184549445,1129467974,1230261839,491083086,1229196800,1196379201,1162297680,1263681869,1175388171,1128613955,1347375179,1163022421,1856579,1095320593,1128746828,1179795784,1095586383,938836,1330790928,1094927425,1279349843,1431192908,234887757,1279347012,1229211471,1230195030,1396303,1095320592,1111969612,1095582785,1313425234,285218643,1279347012,1094928207,1279607630,1313428048,251660372,1162297680,1330007625,1346653783,71520082,1145899776,1314341711,1330794564,218104387,1279347012,1163085647,1195462740,285215301,1279347012,1095780175,1330004306,1413565778,201330515,1279347012,1095976783,1396786518,1141506054,1330397513,1313424967,285217092,1279347012,1431455567,1313427022,1095059527,184554308,1279347012,1380992847,122965577,1296894464,1145984855,1129271888,1376518145,1380273237,1346653783,54742866,1229195776,1196379201,1347175752,1141506061,1330397513,1414481735,268439631,1279347012,1163020111,1229406544,1163149646,1175191561,1398033999,1162173001,424498510,1229195776,1196379201,1313165391,1175191557,1179930191,1162167105,407721294,1229197824,1196379201,1313428048,1397900628,1347769413,1141506060,1330397513,1111577671,218109011,1279347012]},{"sector":3,"data":[1329809231,1380533838,201332301,1279347012,1212368719,1162300993,1108475922,1145130834,1414742339,1279871043,1431192900,6989,-1003791781,-654894733,168180022,907048704,788025,-1556741002,-527761396,-1949609134,1107804182,788464756,-5240896,-1140936517,1352203696,16777114,-26112,-1073020928,113717620,2002,130289289,1392924247,-401698734,-1070399405,-26032,-1705574400,65535,192200715,16777114,-6664192,-1207959297,567102719,-1864856373,-326412987,-1948742114,1996424798,142016266,-16615425,-401698761,1586168432,39291142,-310179959,535137026,113921373,136493824,137296769,-11335309,-1014801633,-873338108,-1207958341,567100416,-1024062862,-2147126144,1074263695,-873694901,567095476,-888678237,131204750,741772070,889239552,512303565,109840326,521013192,-1171980104,567083053,403606326,908256008,135923397,-617358708,371130166,-385649912,-986251494,-1945625082,244698,371130166,-887155192,855643321,-158861605,74711303,567099060,-873274813,1167120524,518818645,1448335502,-1946209449,-1073018810,-671673731,-150579573,500889560,1183383552,106334472,185353867,-149783104,173444055,-621291273,-1996488675,1451822150,1975520010,172919574,856180363,-1947076654,105286616,-745803273,-1953480981,172919768,-1962387829,-338622906,-355345967,-619980591,-235408267,-768348021,1996443730,175570700,300420752,139868929,141690743,1980122683,32408323]},{"sector":4,"data":[-963915213,125107979,-654845193,1593891459,-310158498,535137026,147475805,-1864856576,-326412987,1457032734,-1948568745,-1073018810,-738782595,-150579573,500889560,1183383552,106334472,185353867,-149783104,173444051,-621291273,-1996488675,1451822150,105810698,-125050377,-1962260853,65140720,1727502074,-1946680568,197561303,-150506277,-2082932774,1583284442,-1962742397,1297948645,-1946154806,1430622424,-1910575989,-1957276712,-1073017786,1317738101,138840842,-235417037,1183570059,-1947076858,-1874924589,1586219147,139889418,-788117877,-774123031,198758890,-134974007,871402483,-11513134,1996426358,-401698806,1446707232,1913091848,105265928,-293403786,-1949158655,-2091163962,-443874579,-900899553,-661913592,-1957345904,-661774612,205949782,-150581621,-1948742687,-259323322,-637279753,140965782,-745809917,-2090940789,-443874579,-900899553,-661913592,-1957345904,-661774612,-13412525,185091723,-149783104,106335191,-621291273,-1996488675,1451821126,205949702,276676619,-150317429,500889560,1183383552,173443340,443924491,-1962258805,-768407482,1183576567,-1947076858,198325186,-347638273,-661942196,-1962258805,1183516758,-773074682,-773140007,1977289688,871495668,-11513134,1996426358,-401698806,1446772552,1913091848,105265931,1177224822,206969610,453396011,-16054186,-621344907,-628893449,-2091163904,-443874579,-900899553,1430585352,840887435,-788077587,-489500192,49120250,1562371467]},{"sector":5,"data":[1430637389,840887435,-788077587,-489106966,49120250,1562371467,-661861555,-1957345904,-661774612,1172835984,-401698816,-469042054,2122320500,74776582,-33143098,-971586274,620804103,-1960894003,-486008818,178951,135667455,-1274657141,-1155412660,-75429842,158533678,1528823635,-352009341,784059377,855343368,1393128200,-2091180033,-236256061,50333387,16790785,50331904,50356225,50332928,16800257,50339328,-16748800,50409984,16792065,50354944,-16750336,98048,0,0,0,1167087646,518818645,-326903666,175570756,-1928825089,1343667270,1342193848,16777114,-79247872,1354771200,-1719729480,597315666,-1560281087,-1073017918,-1070922379,-1207782935,-1706033133,440,-1962802013,-1935471034,538687494,156821584,184599715,-1202424640,-397402083,-962393782,1958742784,539080774,154986576,184600739,-1204259648,-397393915,-895284946,1958742784,1073920042,153151568,184598179,-1206094656,-397402078,-1063057134,1958742784,538163214,151316560,184599203,-1201244736,-1706033151,65535,13254275,-16157696,-1711224266,216,12467843,-16157696,-1711227338,232,12598915,-16157696,-1711226826,248,12729987,-16157696,-1711226314,683,-626802645,191931137,31196729,104401269,57999838,-1207844375,-890691555,1354771201,-1719729736,949637202,-1560281087,-1073013940,-1070889612,2130753616,-1706012007,476,185714339]},{"sector":6,"data":[-385649216,922746733,683148940,-1706025471,65535,185744547,-385649216,-323420331,-1202708990,1344143670,503394744,278837328,515395614,-6664192,-1207959297,1344143934,503514296,1354771280,16777114,1975520000,-339727612,112643,-2096498525,1962937470,-1942552759,22276102,58048523,-95255,-1207530442,-1706033141,454,2080383037,833550,-26032,540868608,-1207599872,65732927,-1946073160,-1706011942,65535,185203363,-384141888,1996488393,167426060,178256,-26032,-1073020928,-1293352075,-1942552578,35710982,58048523,-1191271191,1344144140,-16091393,-1070921610,1375784122,1347440720,1342203064,1347469355,1343125247,-26032,-1073020928,1994982261,1346274302,57933825,-1694602007,65535,109721343,16777114,922701824,-6682986,-1929379585,-1705984954,65535,58048523,-2080488215,86078,988349300,-25858,1048772608,1962935970,-30676733,109721343,-1710852353,65535,31065799,1187446784,-2097151492,50238,922683764,-1147535164,-2097151998,50750,922683764,-879099706,-2097151998,51262,922683764,-6684472,-1962934017,485227590,31473283,-1207602176,65740833,1344281528,16777114,-62470400,-1343553536,-1962742397,1297948645,1426066122,-326898549,-431583974,1354771280,1342184120,16777114,-431569152,1187446819,-939524120,-5562,-1996208501,-1202655162,1344143698,16777114,-230258432,-1996399944,1586296902,51165434]},{"sector":7,"data":[-1929623927,1183710814,-1706027290,909,91602955,-907427797,-431584000,1354771280,1342184120,237978,-431569152,1187446824,-939524120,-5562,-1996208501,448327750,-62486269,-1912709492,1343678022,249754,1958742784,-431583809,1354771280,1342184120,255642,-431569152,1187446824,-939524120,-5562,-1996208501,-962465722,-196703983,-1996282184,1586297926,-431583746,345657366,184549380,-385649216,1183711098,-1070903066,1751120,51223120,1187446784,-956292890,-6074,-1423673,71732223,-1578088823,1183388102,53786868,-1929623927,1183710814,-1706027290,65535,58048523,-1191234071,-443875327,180829,-1192457387,-4521985,-11513089,1436157046,-1560281084,378081828,-1039461850,1743324021,-18430,1392508858,74907472,291738,278307584,278402697,58049035,-1207809559,-4521985,-11513089,-1852177290,-1560281084,378080160,-1039463518,736691061,-18430,1392508858,74907472,307098,322347776,322442889,58049035,-1207824919,-4521985,-11513089,-845544330,-1560281084,378081468,-1039462210,-269941899,-18431,1392508858,74907472,322458,295478016,295573129,58049035,-1207840279,-4521985,-11513089,161088630,-1560281083,378082138,-1039461540,-1276574859,-18431,1392508858,74907472,337818,228762368,228857481,58049035,-1207855639,-4521985,-11513089,1167721590,-1560281083,378081824,-1039461854,2011759477,-18431,1392508858]},{"sector":8,"data":[74907472,353178,195339008,195434121,58049035,-1207870999,-4521985,-11513089,-2120612746,-1560281083,378082082,-1039461596,1005126517,-18431,1392508858,74907472,368538,320381696,320476809,58049035,-1207886359,-4521985,-11513089,-1113979786,-1560281083,378080156,-1039463522,-1506443,-18432,1392508858,74907472,383898,277914368,278009481,58049035,-1207901719,-4521985,-11513089,-107346826,-1560281083,378081842,-1039461836,-1008139403,-18432,1392508858,74907472,16777114,263365376,263460489,58049035,-1207917079,-4521985,-11513089,899286134,-1560281082,378081278,-1039462400,-2014772363,-18432,1392508858,74907472,413850,324313856,324408969,1819591179,-1157627976,1347616767,-1710983425,1643,-1995713885,185324566,-1202621246,-4521985,-11513089,-2036726666,-1560281082,378080132,-1039463546,-4704652,-17665,1996443730,111254020,312672256,337021202,1958873874,-18405,1392508858,74907472,276378,323789568,323884681,74826251,65781803,-1962933832,46292453,-1873273344,-326412987,-2082959842,1183517932,109749002,-26032,-1633484800,1975520006,38594819,16139975,-1201673472,1861681278,325846518,-1946925431,-1723795898,113118859,-1031013897,-150962503,325846505,-1980473717,-163149049,113116675,244029768,-101251394,2126103179,99219200,1586172780,38242804,-1946919285,-1991751485,1586171463,71813108,1204289535]},{"sector":9,"data":[-250,-1096681914,-163170042,113744252,325849916,-1711276104,-1995563869,-1559355882,378084222,-6677632,184549631,-385649216,922681786,-1070922102,-26032,1183383552,-1070903044,-1202696112,-1202651137,-1706030848,1982,109852415,1342179256,503971512,16824400,-26032,1996423168,1354771452,503971512,-219105200,16824400,-26032,1656225792,726670849,-1169141568,1347572736,1347440720,1342863103,109852415,345657424,-1560281080,-1073016778,1072235381,1007076865,1823998480,726670849,-1202696000,12189697,726684244,1347440832,175570768,-1942552752,-1706012666,2121,185612451,-385649216,113639690,-1207824323,1344143734,1347469355,-1174402888,1347572736,1347469355,1996443728,922701834,1347421836,554138,242918144,58048523,-1207904791,1344144180,1347469355,1381236922,1347440720,175570768,-1942552752,-1706012666,562,185815203,-385649216,-1706032982,2389,200820361,-385649216,112722074,-677752832,1375731720,-26032,1183383552,1975520250,8448259,1358460671,154522,1975520000,-92864758,16777114,-9835776,28899446,1905938432,-16777207,163117174,-6664192,1375731967,-26032,62390272,-207990784,-1560281080,45617292,1150963712,-1560281088,922685570,45617206,-1070903296,909573968,112658,153524816,922681344,45617208,-1070903296,16758864,112720,-26032,116064256,22021831,-310181887,535137026,113921373,-1873273344]},{"sector":10,"data":[-326412987,1457032734,-1995802997,-1995426762,1443921974,151962,272278272,141934603,22021831,1022033921,272250623,1342177720,16777114,976682752,-1875443952,-1908998394,-26106,922681344,922685498,922683028,-560331118,-16777208,-15713738,-1710844362,2225,49120094,1562371467,445005,-1275051,-16348106,-21494666,-1202708983,-1706032896,1958,74825739,166445099,1342832312,16777114,1575324416,5636802,66519042,262399,70189058,327935,72155138,393471,76087298,459007,83951618,524543,80019458,590079,78053378,655615,81985538,721151,74121218,786687,85917698,852223,93782018,917759,95748098,983295,87883778,1048831,89849858,1114367,91815938,1179903,97714178,1245439,99680258,1310975,12058627,10027263,101646338,1376511,159514883,65538,147521795,131074,103612418,1442047,105381890,1507583,107151362,1573119,108920834,1638655,13107459,1114113,160628995,589826,110690306,1900799,48562179,3014911,126877955,10027011,125436163,10223619,41549827,12386559,114426115,10289155,102170883,3342337,161480963,2949122,32899331,3538945,132055299,2686979,25755907,3735553,42991875,2752515,24576259,3801089,3080451,11337731,53281027,11403267,163840259,11534339,22020355,11599875]},{"sector":11,"data":[149356803,11730947,144113923,11796483,55312643,3735555,1900547,5898495,144572675,4325378,146604291,4521986,151912707,4194307,142868739,4325379,51970053,65791,57737221,131327,56950787,7012607,61669381,196863,66191365,262399,69992453,327935,71958533,393471,75890693,459007,83755013,524543,79822853,590079,77856773,655615,81788933,721151,73924613,786687,40108035,16056575,85721093,852223,38273027,16122111,93585413,917759,95551493,983295,124190723,16187647,87687173,1048831,164954115,16253183,89653253,1114367,91619333,1179903,97517573,1245439,99483653,1310975,101449733,1376511,103415813,1442047,105185285,1507583,106954757,1573119,108724229,1638655,52297730,65791,110493701,1900799,58064898,131327,61997058,196863,1167120524,518818645,1465309326,-1962248565,1317734526,63408902,990322369,50820087,1324942321,-1527513777,-2090967044,-443874579,-900899553,-661913594,-1957345904,-661774612,2126796630,209110280,-1962520949,1002505159,50820087,1324942321,-1527513777,1606585596,49120094,1562371467,707149,1167120524,518818645,1465309326,-1962248565,1317734526,-1949857018,65262041,990322371,1258779639,66257739,-1510736389,-2090967044,-443874579,-900899553,-661913594,-1957345904,-661774612]},{"sector":12,"data":[2126796630,209110280,-1962520949,-774272057,1002636259,1258779639,66257739,-1510736389,1606585596,49120094,1562371467,707149,1167120524,518818645,-1940399986,-1950314792,1183517310,105810696,1605104636,-1962742397,1297948645,-1946155318,1430622424,-1910575989,2126796760,138840842,-66695541,-2090882061,-443874579,-900899553,-661913592,-1957345904,-661774612,-1898410921,176065472,-1962391926,-201587122,-310157398,535137026,113921373,-1864856576,-326412987,1473809950,-1979023676,1317734470,-1426850810,49120095,1562371467,576077,1167120524,518818645,1586223246,197888774,-150832677,172395483,-1072969677,-654900615,856184459,2043808714,-136644862,-775189790,-2084371461,-472842030,-751052534,-201910413,293126155,41535755,-310126345,535137026,113921373,2147465216,-294008565,-353642249,1167120524,518818645,-1957242738,1988823134,973572614,1124889860,1975551046,112884,865076203,-310157632,535137026,80366941,-1864856576,-326412987,1457032734,-1898410921,175541184,-1962377589,-1047853490,66061128,-1493959176,-1958674060,1583348929,-1962742397,1297948645,-1946155318,1430622424,-1910575989,-852708136,106859297,1468600201,49120002,1562371467,182861,1167087646,518818645,1183570062,139889414,2081183289,956661519,141953606,-1962260853,116067414,-1962522997,-310179754,535137026,147475805,-1873273344,-326412987,-1948742114,1451951686,206977288,92016511,1930053177,172395272]},{"sector":13,"data":[-351512949,105286406,-2096605557,-443874579,-900899553,1478361096,-1957345904,-661774612,1988843095,108956424,74708795,49006219,1600046987,-1962742397,1297948645,503317706,1430622296,-1910575989,-1957275688,2123040886,1995913990,-339309820,1590135554,49120095,1562371467,313933,1167087646,518818645,1448597646,-1962379637,-147126658,-963967875,-947191061,-310157474,535137026,80366941,-1873273344,-326412987,1473809950,141986646,990281355,-1962639625,-1962742842,-2090901817,-443874579,-900899553,1478361092,-1957345904,-661774612,1459940483,108432214,-352321089,-2142877951,1962999676,1590135800,49120095,1562371467,182861,1167087646,518818645,1448597646,-1962510709,-1961942498,1488927,-125047049,-1962786421,1599997009,-1962742397,1297948645,503317194,1430622296,-1910575989,-1957275688,512427638,529207074,-150989128,-1946645522,1599998529,-1962742397,1297948645,503317194,1430622296,-1910575989,1040631768,-1207959540,-1873805311,649230,-1962742397,1297948645,-1873273141,-326412987,-1948742114,-2103245242,49120006,1562371467,182861,1167087646,518818645,-326903666,-1957275900,2123040886,-62470394,82509824,-62455993,168134828,-1946847808,1600060486,-1962742397,1297948645,503317706,1430622296,-1910575989,116163544,1988843095,108956424,2122517227,74776826,703316011,-12285370,-1873746902,2811918,1207584393,721372554,244338916,-1996481560,1178205254,-1949076230,1177287238]},{"sector":14,"data":[-2090901764,-443874579,-900899553,1478361092,-1957345904,-661774612,705054346,244338916,184711912,-1979026240,-467007930,-352313339,105286149,-310123478,535137026,46812509,-1873273344,-326412987,-2082959842,-2002709268,-2012807417,1958742791,16115971,33949383,113704961,66050,33832579,-385649664,-1264516948,-230258426,108380171,-1996059999,1048834630,1962934746,-226589878,-12291072,-6622602,184549631,-13077312,1183707766,-1706027276,65535,737691275,731509830,-1980182078,1183575622,-163173382,-775804007,-263812616,-1913489665,1343680070,16777114,725674752,-6664000,-1996488449,-1072960442,-1202701196,-1706033144,1452,-775804007,-297367048,-1192462593,-1706033142,65535,-775804007,-263812616,-11485141,-6624138,-16776961,1996484214,-25872,922681344,-6681662,-1207959297,-1706033151,1523,1342183864,16777114,-62486272,28838379,882528256,-1962934266,1191181382,2092960764,49120237,1562371467,1478413133,-1957345904,-661774612,-2096829309,493630,251619454,1651836808,33949383,113704960,514,-1705983957,65535,33832579,-1962576896,48956998,-1705983957,1491,1342183864,386458,-62486272,33832579,-1961004032,1191181382,2109737980,112669,108567120,-336920576,-1705983957,1500,-244085,-1072956338,-310120835,535137026,46812509,-1873273344,-326412987,1473809950,141986646,-351895925,2088781323,74776831,183222315]},{"sector":15,"data":[-467008374,-311048389,1600046731,-1962742397,1297948645,503317706,1430622296,-1910575989,105286360,-1873746902,3270670,460701707,705054346,244338916,184574696,-2146667072,1962870398,108953606,-1207601697,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2133291490,1918961278,108953606,-2145880454,1927284350,108953606,-2146666762,1928857214,108953611,-1207601154,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2133291490,1916864126,108953606,-2145880486,1925187198,108953606,-2146666794,1926760062,108953611,-1207601186,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2133291490,1915750014,108953611,-1207601351,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-1965519330,-467007930,-401698736,-1072955581,1183451764,769927686,99287072,705054346,49120228,1562371467,182861,1167087646,518818645,-326903666,1187468804,-352321284,-60912851,-1979156853,1357130240,-1310191984,-60912644,-1979025781,1374497288,244379787,1006411752,721712326,-15799360,1183579206,-62506746,28887932,-310157824,535137026,113921373,16973834,198013,16973852,197972,16973857,197955,16973871,198225,16974003,198023,16973890,198079,16973892,198216,16973893,198090,16973894,198254,16973895,132504,80,0,0,0,1167087646,518818645,-326903666,-1942552828]},{"sector":16,"data":[108461830,1074284171,-4698082,1553616896,-1996488704,1586232390,-62486008,-310179960,535137026,80366941,-1873273344,-326412987,-2082959842,1448543468,-1962379637,922683006,-1957230964,-1202708794,-1706032897,65535,66864777,-2090901818,-443874579,-900899553,1478361092,-1957345904,-661774612,1459940483,108432214,253894283,381173643,65992448,105248504,-1961724926,212928069,254077139,91554108,-352321096,1589652226,49120095,1562371467,182861,1167087646,518818645,-326903666,-1957275900,-13957002,327022091,-1962516853,-1962410233,755484376,-654850421,-2092437365,494668542,-1181104501,-101253110,108461904,-1075310960,-1174928385,-963969014,-1946552423,106859506,134154123,-963913589,126365700,1577141645,49120095,1562371467,313933,1167087646,518818645,-326903666,108461834,16777114,-62486272,1342177976,-1711520117,-6664110,-1996488449,-1072957882,-1706022540,65535,-1980217719,-1039402410,1183522420,1380982278,-493825,-6620042,-16776961,-6621578,-1962934017,183236166,-1695123713,65535,-310132693,535137026,46812509,-1873273344,-326412987,-2082959842,1448546540,1183432747,-230258188,-1962248565,-33355650,2131248697,-373282043,-1974533841,1038363141,376700962,1946185277,485181187,1765638223,2123040884,176030472,1187450603,-352321530,-8552441,1325757728,-177014981,-788111733,-1366848541,-62486265,-2142895637,-93052868,1965898880,112645,-1070923029]},{"sector":17,"data":[200296073,1174500544,-12285370,1183441962,3030522,-1947663499,3161344,960334716,-2088337664,2080437374,-385647089,2122448763,1913441522,-9311997,-1728050504,1996443730,-227082252,16777114,-1949791488,808319558,-136672512,-768869274,-753680125,-1980610935,-147065770,1089184370,-12285370,1183441962,3161594,820577149,3751423,686359422,3157503,100427511,-768933883,-150992199,30551025,1444016710,-62485516,-150993659,-62486031,-1066207429,16023171,58593148,-2113997079,2076242558,-320273546,-260144130,-1961921536,1452012102,-2082932748,-621346606,1183515627,207522802,28837769,-2090902016,-443874579,-900899553,1478361096,-1957345904,-661774612,1460202627,175541078,2122579755,443876360,47988355,-1961659388,2025429446,-134613248,1975925737,138856197,1586167813,-1948004088,-1995985273,2122579014,92080646,-974536661,2113276672,207522579,134154123,130472075,-137983187,1206946776,737953419,13154770,-268176905,-768883061,-1979943177,-11470778,244321398,66928104,-129594376,737961719,702704,-259264777,1996244537,702474,1178332919,-1957399812,126553182,-661977089,1194198982,-768883061,-1979943177,1586231366,-16282868,-1965520121,805632070,-1186527352,1183514634,-60360712,-654850517,-768876041,-1979943177,-1072957370,1586172276,-16282868,-1965520121,805632070,-12122232,1586170998,-1847032,-1962433865,-953481658,-401698736,-134021103,1600046987,-1962742397]}],[{"sector":1,"data":[1297948645,503318730,1430622296,-1910575989,116163544,-164932009,-1962254709,-1961825473,1191118942,-2012771832,1958742533,-1958263284,1325336134,2143292166,108954598,-1206813440,-1924134982,-1202651835,-1706033149,65535,-1995809141,1590070079,49120095,1562371467,151439949,1191248640,251658497,-2080308480,285212929,1409352448,301990145,1996555008,318767361,1543504640,738262788,520160000,-1342176512,1862271744,1510014721,889193216,1526791937,1426064128,1845559042,0,1167087646,518818645,-326903666,113726980,3662,401035,-1995290741,96009286,-59836672,-166989685,1200162164,-1962743022,4372678,67156048,7838288,1419968512,-6664165,-2097151745,1946221694,-62485748,401035,-351123575,102664967,306678528,1491603088,1975520007,-373282043,1119355015,12079104,-6664188,-1560280833,-1073013932,-1783044236,-442871807,-1560281088,1950355872,-1475950632,-956300021,64582,-1564992277,-59836672,512487563,922948000,-1979332989,209724420,-16480245,-1465779130,-62506741,-6628228,184549631,-392268608,-1073020430,-1243048076,1958742786,86632592,-1988837365,1342210232,185242,262710016,-385649344,28901239,-310157824,535137026,516640093,1430622296,-1910575989,1525449688,-1505310890,1183514625,-1471772410,-1968677237,-1438218233,225755146,1936990268,1869875516,10897095,-1501658368,-12421888,1996424822,-26106,1346895872,1358055053,16777114,1958742784]},{"sector":2,"data":[-1337553645,108461904,-1705983957,65535,1031127051,31065799,431489024,-6664160,-956301057,16898566,-1404647680,1586200575,509446,11552454,31473283,-2096663296,122430,-1070899340,-16705047,2011801670,-1337553409,1354771280,-1207535873,-1706033105,448,628473867,-1207535873,-1706033094,464,360038411,-1207535873,-1706033060,65535,91602955,-352321096,1354771202,16777114,-1404663552,1954545469,-6664052,-352321281,-1400995437,544505855,295706251,-1564991605,-1402013952,1485566091,-1925710050,-1202671546,-1706033086,65535,1353729677,200602,-62486272,-385649344,1996488552,-59310164,-1705983957,793,1085163145,1374225269,-1367932929,462436095,281163519,16777114,998656,971572085,1354771455,1342177720,16777114,-1400995584,292847615,34735815,-6684671,-956301057,135686,108461824,16777114,118268160,118363787,-1994692445,-1558484458,378084204,480451438,504793360,1879998480,1347551515,16777114,112640,49120094,1562371467,182861,-2081649835,79168748,254452480,-150991943,-6663959,-1560280833,1967132450,-373282043,512426148,126553890,100550281,1183383640,-1962152964,1183055454,130488062,1183514624,-28952068,-4657806,582504575,697978881,1342177283,1342177720,209818,196125440,1350565816,1342251960,215706,28856320,-6664192,-1560280833,113712002,-60870,16777114,19183616,56007248,1956839424]},{"sector":3,"data":[19249179,56793680,-1700593664,19314704,-26032,748879872,-1338080497,58064651,-2080412951,-14974402,1625883509,58015999,-1191224599,-443875327,-1957313699,149717996,604875425,-1558705152,645926314,-2147283543,-133321690,229117568,1376175873,-1593767917,-2145124086,178462220,135168001,144769281,201401345,17343292,17958599,882966768,-119242737,-1560097664,1048776500,1962935018,18737411,111687423,1342180536,1347469355,-129594032,-1936044010,184549380,-14650176,922744950,922683882,916066424,-1560281084,1996427064,-63504390,-2009661687,-13309168,-1207523274,-1706033148,1094,943765584,16693328,72653392,950206464,-1472790769,440326,-26032,-1202716672,-1202702272,-1706032898,1184,-1592838493,104402744,108399082,-1559631199,916524856,-66701041,-1593412087,916654588,-1472790769,899078,1354771280,1183666256,-1706027272,65535,628408331,-493825,-16127434,-1710196682,1203,-15726941,922745462,922683900,-6680440,-352321281,255369493,166331947,111405265,255238416,167511595,2124671185,1354771216,722417825,722470406,1342827014,325786,-62486272,-1588543445,103485238,103485566,-1706030596,65535,-335657335,939968282,-953167857,-535874042,-1983894723,1183448646,276734972,-1206909277,-11532536,-1710225866,1331,-1206959965,-11532536,1318780022,-1962934267,722417678,1074670536,1108248847,94418959,2117533520,90020368]},{"sector":4,"data":[1017315328,94418959,-25755824,358554,906922752,734538511,-1995490290,-1206960626,-11533256,-1710195146,1415,-1206958429,-11533256,-1650786698,-1962934267,722417166,1208912328,118011919,-59310256,373914,940477184,-1983370481,-1206956018,-11533256,-1710195146,65535,-955298141,-15779322,256156159,-2147425152,1151533516,1241958159,-1593651185,1218645816,255238419,-955033437,-16554490,1879492607,-1207956978,-1706033102,135,1074789539,-1070922635,28836843,1575324416,-326412861,-951260029,152178694,-26112,-995950592,-401698805,1187381523,1183645878,-4697930,1347590655,1342179256,16777114,-62486272,1971322685,-373282043,512426219,1207894022,-1608611070,-1995994351,-661915066,17059712,-2131075445,-1962802097,-16775650,-1070923185,-1559085405,2075660706,306225920,722576547,-1583722304,-1560281082,-1070919258,-1506345136,-28930799,112720,112761424,-661979136,1200209963,1342671106,16777114,306356992,-11485141,-1928183242,-1202651578,-1706033151,65535,-1070868341,-1996339319,243719,114727504,-1465712640,243729,99654224,1151533056,-1547687150,-1432153530,296263953,-385649344,1151467343,58015762,-1191229719,-1202713176,-1202712650,-1706033147,1813,1343072440,1342828216,1342178744,468634,1379335936,281851923,899152,-26032,28835840,1575324416,-1873273149,-326412987,-2082959842,-1101656340,1187450492,-352321288,38061841,1183547391]},{"sector":5,"data":[71600632,-2080880897,278988486,-129615598,1386473340,-62470373,233504768,-1946394997,-971275210,1191182080,268083708,2096907833,-1003058197,-163133679,434831360,-16628537,107249791,-163148802,-972798839,-63420,-964430266,458793225,2096514617,394719,1578859683,-1962742397,1297948645,-1873273141,-326412987,-2082959842,113707244,1973080,1347469355,16777114,-96040704,-2080614775,326894586,1077740927,-955484659,1008424966,-502872320,-1593835263,-523166888,268084032,-150992456,1075533870,378273316,129047384,-2143100205,-1039925534,268045963,-18775999,1183432963,4241656,-126419120,546970,194683648,662028299,458753735,113704990,4001786,1074789025,235273764,-129595120,1342193848,-1694992641,58,-2096391517,760382,-1070922635,-1700711445,166241035,-1323607903,65065735,-1559520762,608177050,194683902,-1592032093,100863994,-1700590694,-31178741,-1559520605,28840388,49120000,1562371467,2083661,35717123,9306367,137167107,327681,4391171,458753,54591491,2490623,131399939,1638401,81854467,11206911,35127299,2883839,24051715,3014911,110231555,3473663,117702659,3670271,66519299,2490370,86245379,13238527,22806531,14090495,31522819,5832959,20840451,5964031,103874563,6160639,69730563,5242882,37224451,15401215,44892163,15466751,67829763,7078143,42270723,15532287]},{"sector":6,"data":[41353219,15597823,38862851,15663359,28311555,7274751,40173571,7340287,32440323,15728895,21561347,15794431,12779523,15859967,101842947,15925503,108724227,15991039,113901571,8519935,1167087646,518818645,-326903666,374796,2202192,1183383552,-61437446,1342179512,16777114,-163149568,-1577560439,378209934,1446577808,958100988,376830534,-1962503519,956732438,175503446,1979074105,-373282043,-1070923600,20683344,1183383552,1958743028,1996443884,-92864516,32410,110011136,110106249,-755969,1996486774,-25866,-1834811392,-1810462458,1354771206,-1695254785,377,110114559,109983487,16777114,110535424,393592843,-1705983957,65535,-955869533,-16347642,-1878603777,-2130641146,-16347074,-2095745792,-16347586,113708661,6424216,110757575,602603775,184979105,1963364358,-1744386290,-956284410,432646,-955454720,554080262,-1710831872,-1207898106,-310181887,535137026,516640093,1430622296,-1910575989,82609112,28857943,1347440640,1354771280,-26032,-1734148096,1975520013,-373282043,922681687,-6682998,-1996488449,-1072956346,-1202656396,-1706033142,347,-15848797,1488518262,1788497920,-1560281087,1996426652,5945596,-26032,-1499267072,-1976107251,-59310330,16777114,18921472,-1674117296,94418957,27171408,-1667039232,2076227600,-1674117296,94418957,31693392,1050869760,374803,28678736,45678592]},{"sector":7,"data":[-259305216,114842,1095936,-1694987439,65535,322834059,-821835733,235130411,243863708,-1263005130,922701824,-1598550628,-140881915,-1560281087,146280974,922701831,-1598550628,194662405,-1560281086,-860351646,922701845,-1598550618,530206725,-1560281086,548933826,922701902,-1598550618,865751045,-1560281086,1018696490,922701824,-1598550618,1201295365,-1560281086,1085807504,922701825,-1598550618,1536839685,-1560281086,1018695062,922701824,-1598550618,1872384005,-1560281086,-256374298,922701824,-1598550618,-6664187,-1560280833,244322290,184557032,-385649216,-1070858577,-401698736,28836892,-2090902016,-443874579,-884122337,1167087646,518818645,-327034738,-2033843694,-2097086730,135230,-1410792588,1312719616,57999387,-2097110551,992318,-1746336907,1310624512,-1925710053,1358820998,1342243000,16777114,50116608,-2037559266,1343684086,-17398131,-2037559274,1343684346,1342243000,228250,-91845376,-2037559042,-1924071948,-1873740730,31647758,-34437495,-34568505,-2037710848,-2037776908,-2037645576,-2043019790,58523120,-1962881303,-15784930,-122224841,-25858,-1073020928,-2037707915,-2037776648,-353763852,-122224896,-25858,-2046754816,-2030043400,-1024721424,503508152,49592400,-2037559266,1343684342,-34175347,12079126,-6664191,-1929379585,1358820998,1342188728,16777114,-125400832,1958743038,-293172949,-1928401923,972945030,1996353158,-292618483,-291599363,541032701]},{"sector":8,"data":[-1634997900,130481646,-125400320,1760248062,-34161024,-1204390656,1344144124,1347469355,-17398131,-2037559274,1343684086,1342243000,268698,-155287552,292880637,614711339,262578959,-1206169949,-320274431,50116608,-2037559266,1343684086,-17398131,-2037559274,1343684346,1342243000,194970,-155287552,-931921667,-17135987,-192508592,1183666429,244338940,-1929331736,1358820998,290202,731463680,-1980182078,-1705969082,1148,1075531427,-2037550732,-1957626378,-14987746,-92864713,299930,-59310336,302234,731463680,-1980182078,-1705969082,1195,1074767523,1996437620,-1507947524,-13107441,-493159818,-16777212,-1694632778,1429,-1037330112,1183447249,-6663942,-1560280833,1967132452,-1506345185,79927823,922681344,-6677682,721420543,254059456,-1559255389,367729486,-34294017,254025355,1996437503,-25862,250150912,49120255,1562371467,1478413133,-1957345904,-661774612,1460202627,-62470314,1988820992,1174530826,1948269696,106859514,199964553,1949056128,3964939,-2142894476,-260759492,1962949760,140413710,278792135,33310407,-2140542208,360000572,1174406342,1948269696,3965178,1586225012,-348681976,312906,1015023083,1174828032,1965833344,742162677,-672408971,1191181963,-2146702340,192162877,1946172800,1031816999,-957319904,-1958281211,1191308279,1948269952,1465276410,217754,-644198400,-2147483646,-931856324,-16359797,3061815,59349584]},{"sector":9,"data":[-259325952,359986699,122599510,309328,-26032,-1073020928,80085876,-62485760,-310157474,535137026,113921373,-1873273344,-326412987,-2082959842,1048775404,1962935018,8448259,111687423,1342179512,397466,-96040704,-15697757,-1207523274,-1706033142,332,-1543747959,922685576,112723624,1855606784,721420294,-129594944,-637303,-1928943562,1343682118,1342177976,16777114,-96040192,-1544141269,-1073018390,-654899843,-1962284381,1177286726,167551996,92127243,-56370953,-1472790775,112646,-26032,367722496,-1559912264,-358413828,228368649,-1592756061,-2002580058,3979280,-2009661616,-63504624,25860617,1923284992,49120027,1562371467,1478413133,-1957345904,-661774612,1443556483,16533191,-365001984,1668546562,458112643,-2091092992,1025598,1048794484,1946160932,108954446,-1207405568,-4521985,-1207505921,-4521985,-129594881,-1946528119,-1961908706,-1957683705,-1961144802,-1957683705,-1961941986,726670855,-11513664,-1465649058,1958742790,-368654584,-352321278,48931129,-244087,-1710847434,86,-955864925,190982,-58817792,-1592036352,1183384026,-637089802,-1207959551,-1706024926,65535,-1544141173,244318682,-1862368536,3860494,34735815,28835840,-6664192,-2097151745,991806,512432244,529207074,-150989128,-1961739730,307792880,1736449931,-2090959103,-443874579,-900899553,1478361090,-1957345904,-661774612,1461513347,574522198,57999375]},{"sector":10,"data":[-2096933655,993854,1256784757,-365001981,57999362,-16717847,-1207523274,726663180,1347440832,384190093,141007440,-1073020928,1996431476,-365494298,2016870153,135895568,1183383552,-394854416,167524095,277362431,922694891,79169192,697978880,1342177288,1345863864,1342242488,538522,-263812864,111687423,1342179000,392602,1085820928,-21475272,2073710592,-1996488696,-358486458,-263833335,1183384435,167551472,1944995385,-297367293,111687423,1342180792,1347469355,-431583920,-6664170,184549631,-14125888,922740342,922683882,-1902505864,-1560281080,1996427270,-63504408,-2009661687,110533136,2124611584,-1960187120,103542854,-388953622,-1961883997,103542342,-388953604,1187505387,-953167632,1038151238,2124660779,268870416,722417825,722419718,-1995488762,916584518,1007037199,1040591631,-62486257,722417313,-1995487226,1048834630,1962935018,12708099,-1957642197,103542854,103483882,-1706029050,2327,736773769,1183535296,-66704402,2114333449,-6664176,-1996488449,144829510,169249543,67513095,102112007,2094140167,1023770380,91619330,-352321096,-1983894782,1048835654,1946157586,255893864,989857541,1913652742,-129594561,989857541,879946310,84884641,104529927,678563966,100419211,1178271751,-2095222036,1946220158,256287028,989857541,1913683462,-230257909,989857541,494136390,109721343,268842751,-1411329,-15696330,-1533350794,-956301302,135686]},{"sector":11,"data":[-263812352,722417827,103544902,1117982528,-297366769,722417315,103545926,1050873660,-297366769,-1544403413,1187450696,-1962934022,-1961942498,18147639,1962949763,16705795,818307,-169278603,207391488,1166753675,205859588,-1995553493,1166800966,138750722,-1995815637,1166801990,340077314,-2081274231,135742,-1729559691,-365001984,57999362,-1593798935,1178143664,-385649158,-2103377789,-96061157,1166769012,460044,268830267,1183530866,460280,1927956027,138775348,989857541,1913683462,-62485720,989857541,494070854,16154243,1166755700,460050,276694587,1183517554,460274,1944864315,-1976107216,104267526,-361300208,276707071,-1695779073,65535,34735815,381157376,-93391104,512487563,922947362,-1962124149,-263812289,-1962654327,1160507462,-129619188,-1961998967,1166667334,-297366782,721962283,1166670918,-297366774,-1980611029,1996428357,-25862,1191116800,382108666,957295265,58587718,1593762281,49120095,1562371467,2083661,79298819,458753,102957315,196610,96600067,10551551,54132739,10748159,115802370,10027010,161939459,11075839,150994947,11206911,94044163,2883839,122421251,3014911,6881539,10092546,73728003,3670271,131727619,2490370,115278082,3473410,19267843,3145730,183631875,13107455,65077507,3801089,27918595,11730947,1179907,11796483,124452867,22610175,10289411]},{"sector":12,"data":[4325378,71106563,5964031,104661251,4390914,115605765,10027010,120062211,4325379,9437443,4456451,134938883,5242882,133038083,7078143,95289347,7274751,11272451,5701634,115081477,3473410,72089603,8519935,0,1167087646,518818645,-326903666,108953606,-1593477888,199952160,705054346,244338916,-1996380952,582548550,-59836672,-1995289595,-661915066,98176,28839029,-1070903296,-401698736,1183514638,49120250,1562371467,182861,1167087646,518818645,-326903666,108954418,-950307840,118342,-1979711560,1183437382,-1472790576,5945350,9345616,1183383552,-1472790572,5814278,-26032,1183383552,-666449962,922681345,-1070922072,922701904,922684294,1183648644,1389505486,-26032,1183514624,267690960,-1546500469,-4714492,2122535167,91488264,-343933000,112643,112720,-26032,-1073020928,1183656564,-632911396,1586172395,705137370,-1014279964,244338752,-16748568,-6628746,184549631,-1696369216,65535,1342189752,1342644920,1374162576,142508800,-1203735552,-1202716656,-1873803479,4122638,1342185656,1342648248,837291664,4241408,120961104,-401698736,1354235940,1018712064,244338695,721426408,1203261632,244338695,-2097148952,-443874579,-900899553,1478361092,-1957345904,-661774612,-1979257725,-467007418,-401698736,1183383621,2275580,100429559,1183388236,-2133292038,1962934655,138840611,1996425096]},{"sector":13,"data":[-96040186,548950080,-6664192,-2097151745,467006,1183516285,119579644,-1962742397,1297948645,503317706,1430622296,-1910575989,105286360,-1072962518,272439668,1025340416,343146528,1946169405,4209944,1346181236,-1206356992,384499717,317440043,-352321096,178189,62392555,-1207702784,-310181884,535137026,46812509,-1873273344,-326412987,-1193767394,726667852,-860335936,-6664192,-956301057,-16310266,1354771455,-1878624513,-32446450,-1962742397,1297948645,459466,27983875,2883839,17301507,14549247,11665667,4587522,16711683,14811391,14286851,14876927,8257795,5242882,36634627,7012607,0,0,1167087646,518818645,-326903666,-1957275884,1183385158,-1948742660,81159,233374581,146689,54332276,-385649408,1609105989,242679554,-1878231297,39970830,678739979,638344900,723912587,-11532729,-16122826,-1710192586,65535,-1728050683,-150989639,-96040455,109035531,-385875528,1589903906,1207313932,58001431,-1962895127,1207434334,1962999810,38270476,-2094304128,2130901630,-129579227,2122514432,-864220424,-772252021,-460878877,1358483712,58266,1958742784,-129564835,1586225387,38270716,-1959299968,-523109818,-940161399,62534,66354819,28837245,721611520,-159480896,-12288208,110818934,184549377,-14453568,1183577158,-163184134,1586222827,38270716,-1960545216,-523109818,19372624,-1073020928,-1070918283]},{"sector":14,"data":[-1006535191,-1977217954,103028551,57999932,-37143,-6620554,-385875713,1589903714,2139104780,57933848,654257641,605505418,1963080710,-14620413,-1946388853,958793284,762649415,638076043,1964853049,-1948349660,-1960440714,1200167748,-60912894,638351044,-1994570613,-1070922681,-1979949429,266930759,-60912895,721581963,1589905015,2139825676,-60912869,-1962508501,1194001479,1347590408,721700747,1385760839,138906448,2114209593,178181,62391275,1389505280,29727312,1347551232,137114,-993490176,-1960440738,1586175303,138882044,1385814667,-1950119088,-796193698,491227942,737959563,-628422585,-1957670247,-60912701,-1962387573,1317604446,-230258192,492255526,45614462,-1207702784,-768933885,513429586,1375731714,-26032,-930414592,-628373877,-1986400521,1451879494,-137917458,-939288081,1183570451,-229209104,334251523,-633606570,468255614,990346494,-385649976,1589968402,1200301580,-60912869,-1006483575,-1960440738,1586175303,71797244,-133655,1996426870,-401698804,-1073020897,-471268491,-60912643,16926663,-25237248,-310157474,535137026,248139101,-1873273344,-326412987,-992440802,-2144991650,1962940543,1200236065,1007035415,-1592626174,958795764,242555719,638583969,1964853049,112645,-1070923029,-1962742397,1297948645,503317706,1430622296,-1910575989,820806616,105286486,-1946401143,20939736,915084660,881524992,-461372277,138885503,-1070922377,-1962861335]},{"sector":15,"data":[126614622,276086795,1962934589,14870787,1946158141,17033554,705316490,140772,1006395019,57934407,-1006583063,-1977217954,-467003577,-1962872795,1195113566,-1207601916,48955393,1183432747,-60912646,425859,28837236,721611520,-129594944,872040075,57997382,-956266775,259142,16139975,-1472790784,273058566,85087883,1347551250,303314687,303183615,737429133,-1706011950,65535,16154243,1183667060,-800683566,-1961867637,302322262,-1957670400,507564102,2144336,-26032,512425984,529203456,-461371509,4210047,1586176883,276219088,289704486,126414884,-1865386241,71821326,158711819,196347591,233373697,112895,922692075,1183516328,307661584,1375736325,339148624,305594130,-62485742,1347605035,353946,-60912896,1577731979,-1962742397,1297948645,503320266,1430622296,-1910575989,988578776,-1274624170,-2097151989,65598,-1070922380,-1711168279,65535,1073807523,113707125,256,2122574059,58064650,-1962901015,-1961942498,1488927,-1962250505,306220016,-1946663287,-1960866856,2145681415,4241488,-26032,1183383552,-901345850,-943176055,64070,1586180075,-1959293960,-472778146,-1996341109,-661914554,1996437503,2275528,112433744,1996423168,-401698616,-1073020059,1191126388,-968455174,2096776761,2001865,-1960867071,2145681415,1913144891,16705795,184619240,-15960640,-1711210442,65535,-1946199063,-1962868706,-2146989281]},{"sector":16,"data":[1178304484,-385650168,1048772824,1962935976,1354771208,16777114,108954368,721712128,-1207702592,1183383556,-263796754,1187446784,-956292878,128070,-1995946357,922744390,-1070922072,922701904,922684294,1183648644,1389505518,94673488,1048772608,1962937268,108954506,-1954843648,-1962868706,-2146989281,1178304484,-949259512,62534,111687423,1347469355,193345279,193214207,737035917,-1706011950,1508,196361859,-385649664,512491337,529203456,-461371509,138820479,1187459187,-956300560,62022,111687423,1347469355,193345279,193214207,737035917,-1706011950,928,196361859,-385649664,113770249,4546,1577058744,-1962742397,1297948645,1426065098,-327029621,1186464054,-6664190,83886335,-2037841340,-2033713452,65276,-16990589,-385647611,-2033843963,-1962869046,-1963010914,83819654,-1207465935,1344143934,503465656,-897151664,-1924131074,385810054,16824400,-26032,20774912,-385646848,-2037579571,-397345026,-2037841633,-1202651398,-1706033108,65535,201213577,-16353856,-335610746,-28901477,738084491,1358887558,1342185656,16777114,-796489472,2126515198,-88670242,-679047682,-1224781570,-6619440,-1962934017,-1912680314,67032718,-125400639,-123827202,-124846082,509694,-17260917,1965047680,-795934965,-792820738,-511770114,-19874173,-6783487,244383350,-1996470296,1040110214,443809808,1946165309,3161365,1077743732,1024160768,108265552]},{"sector":17,"data":[-19757369,-2037776384,-2037842222,-2037514538,-1873740074,17819662,57982987,738153705,-1207702592,-443875327,1478411101,-1957345904,-661774612,-955847549,64070,-402229505,1183383611,-2145785082,2000288894,702498,-1963301129,-315950002,808304899,-96040704,-16359797,126486086,1023166088,-1948749008,-310117818,535137026,46812509,-326413056,-1979425141,1038363143,158597129,1946165309,-339506428,71761669,-443816213,180829,1167087646,518818645,-326903666,512448006,529203456,-461371509,-1039778945,721712913,-1959334976,-1962868706,-1038185673,-1948004079,1183384128,-1948742660,-1706016761,1555,-96040640,-237941,108461879,80124496,117374976,28840386,-310157824,535137026,46812509,-1873273344,-326412987,-2585058,-1711210442,1280,16778951,-310181888,535137026,516640093,1430622296,-1910575989,105286616,-122138560,-6664192,184549631,-1962314560,2139096670,91554561,-352321096,3604236,108461825,16777114,49120000,1562371467,268618317,1761608448,-1979646200,1476395776,-1946091772,1258291968,-1543438584,-33553664,738262791,-1778384128,788594436,620757760,1057029893,1510015744,973078790,-1728052480,-889127162,603980544,1476460296,-973077760,1510014723,-335543552,1526791943,553714432,1174405636,-1459617024,-469696768,1409286912,1812004608,-1107295488,1845559041,2013266688,1862336262,0,0,1167087646,518818645,-326903666,-96024826]}]],[[{"sector":1,"data":[28835841,-409317376,-1996488704,1950415942,-60912878,662773643,1586200576,-2145416196,-1954610841,-310117306,535137026,516640093,1430622296,-1910575989,82609112,572427094,-1205892337,1861681174,-1947170040,1183388224,1975520252,-401698780,1183448982,91570428,-352256072,572427039,-1205892337,1861681174,-1947170040,1082784838,-59310318,-1878624513,845838,49120094,1562371467,313933,1167087646,518818645,-326903666,-1957275890,529205342,2130798464,-637241,106859264,1183319946,1086557178,-26032,1183383552,2113010,1187448182,-1962925838,1077998150,1183443153,-6663944,-1996488449,1950415942,108461947,-237941,-126419145,16777114,-60912896,2123046795,116466,-1962385781,-2146989281,-1992261660,-523111354,-1728052475,-120470997,-506231,726665334,-6664000,184549631,-1959955264,-1991707578,1586230854,-1958769912,-1948003880,1099562054,140413698,1183528843,2145681652,-511636341,-1056210944,149619849,-1694730497,750,1593198219,49120095,1562371467,313933,1167087646,518818645,1996478606,108461832,1843924624,16727296,1996427381,108461832,-1569136,16727550,28837236,721611520,49120192,1562371467,313933,1167087646,518818645,-326903666,1187468806,-1962868742,-1961942498,1488927,-1962381577,306220016,201082505,1342993600,-1878624513,1239054,-1946532215,-2090927546,-443874579,-900899553,1478361092,-1957345904,-661774612,1443556483,-1962385781]},{"sector":2,"data":[-1992278009,529267270,-461371509,-129595009,16533191,-1958810880,1346373190,-771989877,-92894237,126556299,-6664128,184549631,-1960872512,126486110,183912072,-1961986880,-472777634,-1946519925,-2011198696,-62485753,1191120619,-129594372,2096907833,16758970,49120094,1562371467,313933,1167087646,518818645,-326903666,142016260,-1878624513,-14358514,1039943305,242548991,-16222465,244319862,-1979868952,1183579206,49120252,1562371467,313933,1167087646,518818645,-326903666,2122536454,963903494,-1962516853,-2146989281,1183416292,-62470150,367722496,-1962516853,-60912841,1895818193,50436610,1191116800,-96039940,2096907833,108462051,16777114,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,-950663956,64582,2125995243,-59836672,-2071203701,254088050,105265920,-1937767051,-60560,-1096680378,-62506746,243326076,-2130764930,-15852530,49120094,1562371467,100846157,1744896768,117440769,989856512,-1543438590,-50330880,939589376,-905968896,1526791936,385876736,-2113863936,788529920,-2097086719,0,0,0,0,1167087646,518818645,-326903666,951604746,1211037440,-2114942205,-1961883450,1177224774,244029704,-101249038,-1308998007,-1981754621,727119942,381178048,2040156160,-16777216,-1206933450,787939378,-2147155128,-1070903296,-26032,-1073020928,1996426868,-25864,1149829120,91570230,-352317512,912034678]},{"sector":3,"data":[-1070909441,-126419120,16777114,-96040448,-2012986232,1183515460,239372552,-2012592502,448267588,-1202708989,1344143536,12238891,1347441236,-11513776,1342605878,109852415,-6664112,-1996488449,-1073009596,1283500660,209715498,537690113,-1710590209,352,-1994636151,715202132,272926995,-16562015,1577273350,-1962742397,1297948645,503318218,1430622296,-1910575989,82609112,269008470,-16708480,-1877853642,172484622,-2012071264,1153828164,1153892384,-973078520,-1593834940,378210060,1755514638,1779861787,460104475,460199561,-1995160439,1149834836,441747736,460328576,-1547687167,19202586,-1948200704,-2145685490,-1056178719,-14978909,-1710081482,65535,-1994636151,-1070916012,-26032,1962868736,893684272,709944362,541362368,112720,27171408,1962868736,876907054,726721578,172263872,112720,-26032,-1070923776,112720,-26032,-6684672,-956301057,133638,-2147158528,-6683276,-16776961,244319862,-955702552,190470,460103936,460199563,-1996319581,1577227798,-1962742397,1297948645,503317194,1430622296,-1910575989,-890469928,209125120,1354122893,1342194360,162458,-146356736,-401698816,1183385009,2147433978,-4716939,13429119,-150953288,512490094,117641632,-1946663287,73892056,-128021625,411591,-128021760,34097095,-1236890368,-92864688,16777114,1958742784,102665157,38272768,-150953288,512490094,117641632,-1946663287,509578200]},{"sector":4,"data":[1996437503,4372492,-26032,2122514432,259391242,-16220541,512428405,1342111750,-1923683582,1358902918,-1202667477,-1706033024,65535,-2131206517,-1962867633,-16775650,-2033778097,-1104019658,-13072697,-2033778688,-1425998022,-1962391925,-2147153322,13796096,-12286327,-12151159,-1912965377,1358902918,1342210232,16777114,-96040192,-1962742397,1297948645,503318730,1430622296,-1910575989,384599000,1187468887,-956301068,60998,15746759,-230242560,1187446784,-2130706182,2147420798,512431220,529207712,-150953288,-259323282,17055990,28837236,721611520,-129594944,15353543,-401698816,1183384245,259277046,-624897,244320886,184753640,-1207536192,166330367,1488898,-1946784009,572427248,-1992883441,2122443894,1954545418,-1608611047,-1205892335,1861681314,-2080863478,1962936441,112645,-1070923029,-1325399771,-1948200188,-511703476,-1983837201,-461371836,281837583,-1962523511,19265606,105679616,201253248,105155009,621168267,179372035,1284235475,-203063290,1149878539,107249670,105286647,58048523,1023468521,57999361,1023490281,57999362,1023486185,57999365,-1207916823,1861681174,572427254,-1996029169,-661918650,-1995946357,1586169927,239585260,1586233343,-96039956,-1962260599,1183575134,206014964,-1947443573,1200221766,-329348336,-1980742005,1586172487,-230257684,-2095822967,1962994302,16771331,-1695123713,65535,57982987,-16715543,-6623114,-16776961]},{"sector":5,"data":[2073752182,-16777212,-1868894602,-1207959548,1861681174,-1948742666,-1961942474,-1708064972,65535,-150989128,-661916050,253900427,13055115,-1159135232,175570942,322970,-297367296,-4164544,1183648374,244338922,-1996234520,1950412870,-13113085,2122426859,1954545418,-125926602,-13601792,916064886,-1996488699,1950413894,175570838,16777114,-297367296,-385649344,1996488573,88578570,1183383552,58015986,-37655,1183648374,244338922,-1996256024,1950412870,-18618109,-939569943,60998,-2114004759,2147420798,1996484980,-26102,1183383552,58015988,-49943,-6681994,-1996488449,1967190598,-193527854,-56343,244381302,-2097143576,1962997886,112645,-1070923029,-1962807645,1600058950,-1962742397,1297948645,503318218,1430622296,-1910575989,216826840,108461910,-1092088176,118268165,118359563,512448884,529207074,-150989128,-259324306,-1995685749,-1072956858,884475253,-1962546417,126614110,-956545399,-970394554,-1962609338,206015448,-1946794359,1194001479,239545100,-1913108855,-11471802,-1070922122,922701904,922683150,-6682868,1577058559,-1962742397,1297948645,503317194,1430622296,-1910575989,149717976,253894283,1183385483,1489144,254422775,-1980217853,1187510854,-352321284,-128021740,1962950531,-62485755,1183005163,1191122680,-96039940,1928873529,574029796,705101583,254451983,-150991943,-1070903063,5413456,-1073020928,251595125,-4714710,-1593512961]},{"sector":6,"data":[-2092429526,-443874579,-884122337,1167087646,518818645,-326903666,548951570,1587171328,-1996488704,1967192134,-373282043,381157657,141489920,253894283,1183385347,-1948742672,931788918,1183384715,263662,-2114828663,2147419774,512432500,529207712,-150953288,-259324306,17055990,-2135423628,721611520,-1982714944,1451881542,108954102,91586559,-342245333,10663961,-1962512649,-1607037992,-1959490799,38832896,468993579,1183446614,-61437446,-940679541,-1962932985,1175190086,-1207601668,65732609,-1962933576,1200221790,-228685054,1200209963,-1962440446,1183576158,-61436934,-1996339319,-1039465385,1586186356,-1946973198,19203140,105810688,-780147328,-1983837215,1586168903,-196703246,-1980344693,1468597831,-228685048,673735,-228685056,-33265792,217204355,-1947050357,1452014150,-1995994628,1586168407,72319474,1586233342,172476402,1586167808,72319218,-262239487,-49911936,1577058744,-1962742397,1297948645,503317706,1430622296,-1910575989,116163544,-62470314,451608576,295706251,-1564991605,-59836672,1082847371,1014965253,-13274101,-1465779130,-62506741,922738300,1371017632,-1473317120,5309707,1354771280,417434,1975520000,2147465221,-1465829141,-1475936501,-62486261,-150953288,512490606,117641632,1358579337,-1202667477,-1706033071,59,-1946526069,88378099,185368612,-1962588280,-2090927034,-443874579,-884122337,1167087646,518818645,-6629234,184549631,-13929280]},{"sector":7,"data":[-1710081482,65535,1350565816,1342222776,16777114,-1070903296,-401698736,983825001,11712530,-401698736,-310118315,535137026,516640093,1430622296,-1910575989,351044568,644762,-163149568,-1962511040,-51775930,10663936,-1962381577,51486750,-129595129,1200347275,-96040682,-16220543,-167349121,1963000903,1354771213,-605548912,-163149568,1586219499,407342072,1006388873,58063430,-16734999,1996425334,-230257158,1354771280,628634,-263812864,-2131591551,-1958382336,-1995994152,1183051334,1187447536,-1962934028,126611550,200033929,-385649216,-12714115,-15829505,1183578694,-96060932,1793670002,-159973377,1089488523,-6664128,1023410431,225771775,-1695123713,2678,-335544392,-196673716,971916939,58520646,-1946206999,1077996614,-336574975,142016422,-1912965377,726725190,-6664000,-1996488449,2122444870,1946190066,-1195512950,-1873805311,1632270,-1946794359,130483806,-18284543,49120254,1562371467,313933,1167087646,518818645,-326903666,-26108,1183383552,108347644,-369342837,1996423324,1354771452,657818,261771264,184549386,-2089323328,1946158718,-59310113,1342189752,663450,630870016,184549386,-10783552,280558710,899305472,1342177290,670618,1958742784,-59310267,1342185656,674714,1369067520,184549386,-13667136,1085865078,1637502976,1342177290,681882,1958742784,-59310311,1342197944,16777114,-6664192,184549631,-385649472]},{"sector":8,"data":[1996488558,74160892,1187446784,-369098756,-310116514,535137026,46812509,-1873273344,-326412987,-2082959842,1183516908,-96040698,-26032,1174601728,1183402234,-96039940,1929135673,-60912880,1183319946,1952201976,1966750724,-62485754,-1961366720,126549086,-1705974742,65535,-1996726645,-61931769,-310129685,535137026,46812509,-1873273344,-326412987,-2082959842,1187464940,-1207304452,-1202716493,-1706030594,2852,-1946401279,1065354846,-1207601920,367723132,-1928956161,-1705985466,2870,1354385037,1558711952,1996443903,-25860,922681344,-21494134,-1706025463,65535,-1962742397,1297948645,503317194,1430622296,-1910575989,485262296,-230242474,1187446786,-1593834756,378210060,1183385358,-262764050,-1961662815,-1995216874,1451881542,321692150,321787531,-1981135223,2122574934,58064646,-1593729815,1178143664,-385649402,-1070923375,-1559009117,512430950,529207074,-150989128,-259324306,-1962786677,748880976,773228819,-1715459309,-1996029789,-1559821802,378078972,144901886,169249031,117744391,117839497,-1996026717,-1996026346,1183447622,321692152,321787531,2130335289,13625603,1178142844,-385649928,1996423365,-92864762,-1694992641,65535,185730806,-385649393,312541357,75019,199771785,-2092337984,1963061886,-230242555,1183514624,1975520252,15722755,1946157373,146712,-2002685579,-1978234085,117744411,117839497,33310407,241344768,241440395,-1996026717]},{"sector":9,"data":[-1559818730,378078984,1206585098,33324675,1187448181,-1962934020,-1072958906,-1494678667,81152,37558388,-1591184128,378215304,-56419446,-32077562,-230242554,1654718465,1679198990,118268686,118363785,-1996029789,-1593376234,378211938,1183387236,-94991880,-1946213655,1452012614,325493750,325588617,-1947580789,748940374,773228819,151451155,125108496,269027062,-1606650878,-467005427,1963345465,118268210,118363787,468600363,1183445078,-430536220,460636683,31737483,285984262,17549334,285985286,17550358,286470662,1578316822,-1962742397,1297948645,2228938,185073667,8913151,181665795,8978687,166920195,9044223,166526979,9109759,145817603,9175295,156958723,9240831,142671875,9306367,141819907,9371903,140967939,9437439,74645763,458753,202899459,2031871,28246019,2097407,33882115,2883839,152109059,3473663,138149891,3735807,23986179,4063487,189006083,2424835,13369347,4718847,11731203,2686979,99811331,5112063,157810691,5767423,178388995,5964031,25559299,4063235,44040195,7012607,27918339,7340287,48562179,8323327,38600707,8388863,29294595,8454399,110034947,8519935,135069699,8585471,83755011,8651007,81723395,8716543,78446595,8782079,73138179,8847615,0,0,0,1167087646,518818645,922736782,-1070918832]},{"sector":10,"data":[-1706012592,65535,324024063,16777114,49120000,1562371467,1478413133,-1957345904,-661774612,8973441,252477059,-521600140,242679552,383665805,-26032,1048772608,1962935996,-1404662413,1354771280,1342190264,16777114,440320,16030288,-523173888,277612075,-1918089591,1343663174,16777114,113025792,58048523,-16743191,-1705976202,65535,292929547,112998143,16777114,-1140406528,-352321530,-562626714,378291853,-26032,-1935605760,-1941558512,1083328003,1177286865,460891026,-2197761,1996481142,-431584284,1357006379,736642699,-1202658234,-256245727,-1706012160,65535,-1193380097,-1706033147,65535,2016870224,28751899,-1706012642,65535,-6664120,-16776961,1183649398,-1706027298,65535,-342245333,209617274,1601503748,58998403,-161974786,1946683974,59160658,-8878455,-8741236,-8616249,-2033713153,-130,-8370489,-2109290497,1187512319,-939524220,-31162,-7846201,-1975072769,922746879,922685492,-2037575622,-1202651268,-11532927,-939558754,230406,-6952192,1996426870,175570700,-16222465,-6683018,-2097151745,-443874579,-900899553,83891722,50414593,50340096,50435841,50359040,50339073,50363392,50336769,33586432,33646593,33559296,33644033,33559552,50416129,50340096,33613825,50339072,33622785,83894528,50417409,50353408,33591297,50343168,50350593,50341632,50403329,50341888]},{"sector":11,"data":[33586433,50346240,50358785,83931904,33645313,50336512,-16710656,83909376,33642753,50336768,33594625,33572096,50418689,50353408,-16752384,50359040,33600001,23808,0,0,1167087646,518818645,-326903666,-1983894778,1183448134,209617402,57803520,-1962861847,138218566,-385649408,58065070,1023457001,896794625,1946158397,474433,-1964440715,11397376,-15829249,1996426358,142016266,-1878624513,20047886,-16731927,1996426870,-401698806,-1561787912,242679552,-16222465,-6683018,-385875713,1996423313,108461838,-16222465,-6681994,-352321281,-25986,-1070923776,-26032,1877671936,25837187,-14912512,-1070921098,922701904,922685454,922685460,922683034,-6682984,-956301057,129606,16533191,-12522752,1996426870,-26102,871038976,-15829249,-6681994,-352321281,1326374,913814132,1946160957,242679708,-15960321,1996425846,108461832,16777114,-96040704,-2080614775,124478,-1070921612,-26032,1183514624,-61436934,322788587,-385649407,4063025,1036153346,58130947,-335606295,209617336,393413632,-15960321,1996425846,108461832,16777114,1975520000,-1952781386,607980614,1023898628,225707045,1996458987,-26102,-342294528,175570836,-1710852353,65535,-310145557,535137026,181030237,-1873273344,-326412987,-2082959842,1048773868,1946157574,-1036583156,-26101,-1427570688,209617152,762642944]},{"sector":12,"data":[33832579,-385649408,379650201,138819856,-962525827,-1592726767,1178144924,-1593475578,65739596,-1995834719,-347014074,172395460,-1560280027,1183515288,533770,-1207788893,-1706033134,65535,92127243,-352321096,-1547687166,2122384028,1963066124,112645,-1070923029,-2130272093,33688702,1048780405,1946157568,-1203862738,661979142,-1710328065,65535,33556167,401276928,35522247,113704960,66048,-16222465,-6683018,-2097151745,-443874579,-900899553,1478361098,-1957345904,-661774612,957382817,1819609158,112737923,-161123328,17827846,1048796789,1946158774,-1241069811,-2097151994,964670,1822509685,1846971163,1779841307,960328987,1964730374,196911415,303433259,269747771,922692221,922688362,922688360,922688362,1048779624,1962938040,112645,-1070923029,-26032,113704960,1718,-1962742397,1297948645,1115338,32768259,6946819,16843011,7012355,38731779,17760511,24641539,17826047,23724035,17891583,21823491,17957119,14614531,18022655,13762563,18088191,8847363,18153727,7536643,18219263,12255491,1900546,36700419,1441795,18219011,4260095,9306115,12779775,27394307,4521987,47316995,16646399,9830403,17039615,1167087646,518818645,-326903666,108954380,-949979903,1052166,335988480,721420304,865751232,-2097152000,438846,28838261,-6664192,-2097151745,123454,1048783989]},{"sector":13,"data":[1946158780,1345781541,-26093,-1202716672,-1706033139,65535,45783632,-1706033152,704,112985799,113704960,67266,-1207870231,-1706033147,132,-1191557495,-1706033146,65535,-1946663287,1174604358,-2113524742,-196703984,50873995,103544902,1183387788,-163133444,1048772608,1946158786,-1472298225,141885446,-1705983957,65535,272119551,-1946913025,-654837690,-2110324912,-129594608,1174659281,28856572,144330752,-16777215,-15714762,-15506890,1183579254,65065466,103483974,103486306,-11530110,-1206875082,-1706033151,291,242890495,-755969,922745974,922685570,28840076,1050300416,-16777215,722686006,1996443840,1647771644,-1942552813,112656,23632464,1048772608,1946158768,109093164,269878827,-163149504,112211711,1347469355,-755969,-1207533514,-1706033151,441,112211711,96922,943128320,25401872,922681344,-1936060362,-16777215,-1710327242,405,324024063,16777114,876512000,494141456,271857407,-11485141,1996486262,-62485516,1358317099,1342177720,16777114,209125120,1347469355,16777114,-1039743232,-2097151994,-443874579,-900899553,1478361096,-1957345904,-661774612,1443425411,55197315,-16157681,-1711060426,65535,268963456,172395265,-1961881949,346228806,-26096,1183383552,-61437446,270407227,109014140,270272059,1048601714,1979715595,-128021667,-1727772789,269164170,78774058,915137491,469962814]},{"sector":14,"data":[-1995379837,1334573150,142052102,-233584637,2096920123,990215985,712440398,31080067,-14453504,721635894,-2103816000,-16777214,1996487798,-25862,922681344,-1070922934,-26032,-2090991616,-443874579,-900899553,1478361096,-1957345904,-661774612,111296131,-2092665856,435262,1048774517,1946158758,-1573454053,-1741226234,-26099,-1706033152,65535,-1499217877,111452934,1342177720,-1705983957,790,111294207,206490,-1576614144,-2097151994,1946158718,-401698811,-310181877,535137026,46812509,-1873273344,-326412987,-2082959842,436286,-1070908044,112720,-26032,1048772608,1946157802,-1472790773,-26106,233504768,109721343,111687423,16777114,-1475950848,-2097151994,-16602050,-6683276,-2097151745,-443874579,-884122337,1167087646,518818645,1048828046,1962935992,-1207515340,-16776954,918030454,-6664162,1342177535,1347469355,16777114,-1203862784,208994318,-1207404801,-1706025418,65535,16777114,49120000,1562371467,313933,1167087646,518818645,1048828046,1946158776,142016293,1344157368,16777114,-26112,113704960,1720,35522247,-1070923776,-26032,-310181888,535137026,80366941,16973849,196977,16973948,197061,16973951,197501,16973834,197565,196620,16712404,196666,16712299,196667,16712310,196668,16712202,196669,16712180,196670,16711868,196671,16711715,196672]},{"sector":15,"data":[16712662,196673,16712642,196674,16712597,196675,16712592,16973892,131162,196653,16712519,16973893,197491,16973993,196728,16974003,196831,16973880,131805,16973892,131168,16973893,196682,16973890,197429,16973892,131156,87,1167087646,518818645,-326903666,105286406,1183441105,4372730,-92864688,15514,-62486272,645251083,-1694861569,136,242532363,1342194360,-1694861569,65535,45616363,-1499836352,-1207959552,-310116353,535137026,46812509,-1873273344,-326412987,-2082959842,1183515884,-1981755128,1996487750,1119375370,-1684385792,184549376,-1207601984,686489601,-1694730497,65535,292864011,-16091393,1119419510,-6664192,-352321281,1073920222,-26032,-1070923776,-1962742397,1297948645,503318218,1430622296,-1910575989,116163544,-1710852353,65535,1090143881,-775804007,244338936,-1979767320,1967193158,-18427,1996428267,-60912890,1996437503,-25862,1183514624,49120252,1562371467,100846157,486605568,83886336,1996555008,100663552,-234880256,738262784,1191183104,771817216,-939523328,1526791936,738198272,-402587904,0,0,0,1167120524,518818645,-1974019954,-796260794,91488316,99338494,-853953392,-1958673375,76023926,973161670,1543652550,-1274820989,-1960719033,477235318,70927950,2088827765,125066495,1180435654,-1962933050,138816454]},{"sector":16,"data":[-1878594752,-150993722,-310157608,535137026,80366941,-1864856576,-326412987,-1260876258,-2094936743,-443874579,-884122337,1167120524,518818645,817158286,-310173235,535137026,-1932833443,1430622424,-1910575989,106335192,-851246920,1942063905,-18429,-1962742397,1297948645,-1946156342,1430622424,-1910575989,106859480,567099060,1912602808,-310165503,535137026,46812509,-1864856576,-326412987,-2082959842,-14794004,-1927412106,-1705984954,65535,-1262725491,1914817857,-18429,-310126345,535137026,46812509,-1864856576,-326412987,-2116514274,1459651820,1996430854,1183653384,-258322244,503316480,503740159,-8747379,19372624,1452081152,-1928913220,-1258325314,1914817878,-18429,1594349815,-1962742397,1297948645,-1946155830,1430622424,-1910575989,207522776,-1962387771,1068762702,41099725,-310126345,535137026,147475805,-1864856576,-326412987,-1948742114,1455754334,105810696,567099572,-654900621,-1962742397,1297948645,-1946154806,1430622424,-1910575989,207522776,-1962258805,1183451222,-851266554,-150637791,-17704,-1962742397,1297948645,503318730,1430622296,-1910575989,149717976,108461910,-1995989784,-12715962,-1207536129,-342228993,-126419084,1347469355,1342177976,-1561850224,-96040449,201086601,-2093974062,863371258,1979710013,108461870,-1995741976,-12715962,1344304383,1347469355,1342177976,1927810704,-96040449,201086601,-1962378030,1452014150,-1960645636,-654837178,-24907637]},{"sector":17,"data":[-2096399341,108993534,191891143,12058625,-6664128,-352321281,-310157690,535137026,46812509,-1873273344,-326412987,-2082959842,1187450092,-1207959302,1861681161,-1006238970,-163149551,-768313,105286655,-336050551,-161576151,721700747,1209760774,-1946401143,1178203206,-1962117124,1183448134,-129594380,-375159,1183053894,1486948854,-129615589,1183567740,49120250,1562371467,182861,1167087646,518818645,-326903666,-2125048032,-16651714,-16092033,-6682506,-352321281,142508819,-1207601920,48955398,-1873756117,-10360818,-1192474999,1861681161,66096108,-955136970,60998,458768011,-2081653205,92144895,-352320328,1002932994,427748934,17188086,2088841332,1954545410,41221929,300420752,1975520007,-293698787,-2095090432,1962934908,142016267,16777114,-330921728,-370260225,1191116933,164004846,-1564955925,141489920,295706251,1183385347,-153580570,1946223687,142508821,-1961921536,1194919494,-955812086,126534,1183535595,-1311626490,-26105,1586167808,-532248090,-1948100983,39291655,467682859,129098326,16777114,-1980200192,-8133506,-1207602431,48955393,1178322827,-1962576146,216788550,1929510787,112645,-947191061,-1947318647,-768932282,-150993735,-162100751,1178190475,688226030,99288646,16139975,-330921216,1223575043,-1174911351,-369688567,906227851,401281476,-16614271,-16092033,889127540,1307053712,-129040639,-1962283389,1178201158,-1948156424]}],[{"sector":1,"data":[1174662726,1183401990,-15799320,1996425334,-401698584,1325334824,105286632,2112374329,142016490,-330921136,-523040847,166200835,-294191280,-1569136,-196703999,-1981004149,163182662,-1947601152,-1003093008,138840849,-1962785655,76088902,461113087,-1994687327,1686111300,2122448390,2097185012,-196703483,-2135424021,2145681408,1284235473,31555846,-1983837440,1153828420,2123104008,-2131787276,2130643712,-339244284,-1983894782,1317794886,1183531270,-503889912,729801856,-97060910,-229209841,503569035,126491524,1183441962,-96024592,451608831,-1980742005,163117638,-261163264,512489611,1099567556,-1981535736,2122444870,1962999792,-92372513,242548991,-1947050357,-1977908162,25753670,163058411,-93391104,512489611,1183453636,138512632,-16365825,-964429754,-296812791,15629955,2122516862,58589428,-1946213655,1174662214,-2090901770,-443874579,-900899553,1478361092,-1957345904,-661774612,1443556483,1090932363,1074284171,-461313545,-137221249,-1995441610,-628360618,461649547,-467009398,-940030327,16776262,-1207915543,1861681161,-1006238728,-163149551,1183570059,38222088,-2132212876,105286400,2037712697,17188854,1996425332,-401698808,2122384496,1962999804,-161576175,-1962391670,915143262,8919940,1586173931,138906358,163104907,-59836672,512487563,1216876996,-161576184,-16627769,-161576065,-33134720,-1577689461,243997564,-506389672,-1054088751,-1962653815,-1181091770,-101253116]},{"sector":2,"data":[108384779,-631157,1586168911,138921718,-129594369,-1946401143,1200289374,-1981535736,2122446918,1946222584,-11802365,49120094,1562371467,313933,1167087646,518818645,-326903666,-1564977644,208598784,295706251,1183385347,-1948742668,39291655,-1980217719,1183578710,-1311626486,144808455,1183383552,-229209616,-1946919285,1982535799,108411146,1988690806,105286406,-523040847,-1946794359,1183577182,407320842,-1070922633,1586198507,71825140,-2095221759,1946160254,32153879,1946961465,172395279,1997162297,-62470393,1038811137,-1946663285,1177287254,-229237776,-1981004151,1187507798,-1962934020,999945798,259845718,1178273151,-1962379540,1183444038,-1961956362,194639430,2080800722,1992297373,209125273,-16091393,1996425334,-59310090,216534672,-310157824,535137026,147475805,-1873273344,-326412987,-2082959842,1996427500,209125134,-1996333592,-1072957370,1996439164,32499726,1358317193,503989899,142016336,-1226305904,-96040455,1963476539,138840838,-1962893079,-654837178,2080379709,-96040157,457038071,-1206288640,384499713,-134723957,1261016,1183517308,1037629432,-411172837,1183432747,243172348,-2096729088,1946158718,138856199,988479488,16285315,2122516092,75301114,65781803,-1980086645,1174664262,-263812854,721962635,1183446086,-1962284046,1191178334,1476904688,-899445,-1072958898,2122575231,108265724,191891143,2122514433,57999372,-1191221527,-1706016768,611]},{"sector":3,"data":[-2080417047,-443874579,-900899553,1478361098,-1957345904,-661774612,1444342915,-150953288,512428654,117641632,-1947056503,-1962439720,1183384151,-61437446,-1728020296,1996443730,-92864516,16777114,-196704000,129094187,242330,8389888,-1996434813,1451882054,108954616,-167152640,1946286662,138870531,-1727510901,-1946792309,1311504478,-60941318,1266670139,-935656324,1996440947,-193528054,-1695267073,2354,-150992455,-1006238743,-263812847,-259270517,621167755,-864026623,105351425,-2131730805,-1962867121,1183576670,-128545802,1468598153,-96040702,-2080614775,1946158718,-96012718,-11766783,1996425846,-25868,163119104,65664768,-1995324410,-661918138,-1996045437,126610526,-461313839,-461356929,-364476033,75649,-1947443573,-523113914,1586169609,105873646,-228685055,-2097084541,1577058903,-1962742397,1297948645,1426065098,-326898549,10663940,-1962643721,51486750,-28931833,1200281739,635709957,1183383679,671228,1996433525,-401698812,-1073019837,12062325,1822052416,-1207959541,451674111,-1963041141,-467008185,-1996456155,112786502,-59836672,-2020878197,-443871620,180829,-2081649835,1996425964,-7084026,-637303,-1964505482,-163149313,1979711293,-280571,1183537899,-1311626492,112892423,1183383552,-94991880,1391884031,1354771280,-2098721136,-62486025,1040078473,594935802,-402229505,1183384397,-49674,-11484300,1996487286,1354771448,1525157520,-62486025]},{"sector":4,"data":[-2080483703,2080439934,-339727612,-62485757,-1034033781,1478361092,-1957345904,-661774612,-2095649661,122430,2122517364,91553798,719962155,-599883007,141819905,956426913,-327940538,16139975,298098944,-369867127,1586168063,105286644,1946306361,15395075,17188854,-504822923,-1995994368,1187507782,-1962934032,129103430,100917459,1183386088,637162,66481911,-1995324410,1191177286,-263782410,167003779,958093473,360576582,-1946919285,1194919494,-1962248958,1174663238,1946631150,-195130407,-771930229,2145681640,-1309649269,65196807,8400322,-939768183,-1466,-16353537,-1209471370,2092960766,108461860,-1979822872,-12717498,1343649023,518669963,-59310256,887623312,-96040458,1962690107,-92372178,-2094826496,1962935934,-569981166,-1207959295,-1706016765,2124,-939586071,16899078,538097664,12119275,-1947735232,1325396038,2126515184,-329348332,166479491,-33134720,1191176683,-196705290,458793225,2113291833,-17372925,-2097151560,-443874579,-900899553,1478361090,-1957345904,-661774612,1460202627,303079766,2131117625,8579331,-335788407,440337,-1946390793,2122827736,-8388850,1183579206,-62506746,279177084,-395842798,1183383665,269418488,303079698,1962427961,440397,303050487,-2071203701,1183387262,2147433978,-1564985228,-93391104,512489611,1057165728,-1979332733,2133129286,-511701622,-2000614784,96897797,-1202712964,1861681158,243009016,243792]},{"sector":5,"data":[-26032,278986752,105265426,1600035196,-1962742397,1297948645,1426064074,-326898549,-129579254,1187446784,-956301062,243072582,-637241,-129579009,921370624,-1946263925,103482439,-1991763118,2139225158,1971322626,303079686,-1946401239,1178203718,-1962117124,1183448134,-129594378,-375159,1183053894,278988542,-129615598,112771708,-93391104,-1082009461,2147421822,1996425332,220437242,1183514624,1575324666,-1873273149,-326412987,-2082959842,-2125069076,2147419774,512436596,529207712,-150953288,-259324306,704987274,8332772,1039943305,192151562,1946159933,-6664186,1577058559,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,16533191,-1608611072,-1995994351,585890374,-1963303285,2133067079,242486076,2326400,1996425332,-401698564,1191116939,-96042500,-1465843550,-62506741,-310126980,535137026,1439386973,-326898549,10663944,-1962643721,51486750,-62486265,1200281739,635709957,1183383679,142574586,-1207601918,48955394,-863977429,-28931672,-402360577,1344144340,100419211,1344143394,-1694599425,3749,1039681161,91619327,-335544392,440338,-1946521865,-129594408,243042185,-1946663285,46292453,-1873273344,-326412987,-2082959842,1448563948,-150953288,-259324306,295706251,1552627459,-2145416418,91553855,-487997397,142377729,-1207601918,48955394,-998195157,-62486232,-2147203850,1182795380,183206141,-2147138314,1182794868,-996145923,-2004933621]},{"sector":6,"data":[37548614,54275954,1182991474,2088964348,561316360,-2147203850,1552620405,-1875378402,-232790002,1039419017,158662655,32786166,1038680948,71628289,-16223104,31983222,-1962546429,126557788,1347607180,505562253,-59310256,16777114,-163149568,1979711293,13363459,-2147203850,1183673717,1150111920,-1070903254,274766416,-1073020928,1183668596,1552634032,-1707606242,65535,1198833675,1353729677,16777114,2147433728,1183660405,1754943664,-1996488688,1950413382,-1608611030,-1205892335,1861681314,-488698,-6676879,-1962934017,-1961779170,10663967,-1962512649,-230257672,-2145500791,-394263476,1183448381,440568,100167415,1183387260,-1948742740,126481990,-1951637877,1200162374,-1403090174,458360575,-1994698079,-1564998585,107935488,512489611,1057165728,-1979332733,2133129286,-511701622,-2000614784,112645,-2097117975,1963067516,71628375,-1605274240,2133068740,779223868,86277251,244328565,1039189736,510984224,-1996367199,113749574,474,1344282552,1045402,-1371108608,-385754461,1153957466,-956301304,64582,-2147203850,-1326906507,-45711106,-22419072,-2147138314,1156978805,309690372,35945603,431492213,-6664160,-385875713,113770018,68464,1593711081,49120095,1562371467,182861,1167087646,518818645,-326903666,1586189894,25133064,-1979157190,216279559,721611648,599281856,726670850,1183666368,-1706027334,65535,225820683,1346371768,637850]},{"sector":7,"data":[-339727616,142016320,1354385037,-1705983957,65535,-1710721281,65535,1090274953,512483188,529207712,-150953288,-259324306,-1979955573,1996430912,-401698810,-1072956057,28884852,-310157824,535137026,80366941,-1873273344,-326412987,-2082959842,-1957296916,-1961779170,10663967,-1962512649,595099888,-1207602176,753598465,295706251,-1564991605,107935488,1082847371,635709957,1183383679,671228,-1706031500,3294,-1878624513,-50206706,49120094,1562371467,182861,1167087646,518818645,-326903666,-1564977656,107935488,295706251,1183385347,108462074,1342210232,-1873756117,-147658738,-1728020296,1586188370,41418746,-1785055233,-1996488696,1996487750,-459649018,-1191182328,-369688567,298059267,-1946663287,-1947169832,19203652,30179328,-1962522743,1333852254,1586168070,-2146991622,39289600,-94467328,1090274955,-1961343095,-2090927034,-443874579,-900899553,-1957363710,49054700,956427425,125109318,1795049159,-2095912190,1962935422,-28915961,99287644,1291732679,-28931326,-1034033781,50336258,-15797504,50368000,17764097,50333440,-15804416,50373632,67188225,50332928,-15747840,50343424,-15648000,50345728,-15969792,50345984,-16528128,50384896,-16118272,50385152,-16553728,50385408,-16581888,50385664,-15708928,50385920,-15644928,50386176,-15669248,50386432,-15809024,50386688,-15801088,50386944,17681409,50350592,17842177]},{"sector":8,"data":[24832,0,0,0,1167087646,518818645,-326903666,1183536724,-62486264,-26032,1111293952,721780224,31910336,1353991821,-2146935157,1966735743,-62487789,705137154,-660975388,754974723,48955456,-1705983957,65535,1039550089,377290755,1979707709,538753033,-26032,113704960,68464,1183692267,1996443828,178186,-401698736,1183515452,-1992278006,1183447622,-1236890120,-2085468535,-1962740114,126549086,1018185352,1006924892,-1961790161,1191181382,-128021508,-956807425,367746055,-5081345,1996486774,-401698570,1183515384,1174489334,-60912648,-1963178241,-1371109369,276086794,208940092,141828156,74722108,510986556,-956801397,1325334535,-60912644,-1963178241,-1404663801,57982986,-385813527,2122318085,1182084782,-237941,126549062,1018054280,1018066012,1017803823,-385649618,1586233085,-62455812,1183319946,1952201902,1949252615,-18355965,-1946661121,2139158622,-2123080449,1006257803,-370313256,29294289,-2144277760,1949085310,-1367441360,-2144701408,1949019774,-1367441372,-2145487863,1952231038,-1367441384,-1961724881,1191181406,-2012771588,-2142851514,1962978942,234783690,-1897331842,-62485506,-11483605,-1873348490,35055630,-2131200511,1966059134,-128021750,1560233926,-2130767127,1946201726,-1367441381,-2146077652,1948298878,-1367441393,-2146864085,1946791550,-17700605,-956801397,-16711865,1586170486,-1847034,721563319,244338880,-385742616]},{"sector":9,"data":[2122383096,58007724,-2130775319,1946791038,-31725309,-1191254295,-2090991615,-443874579,-900899553,1478361094,-1957345904,-661774612,1460464771,175541078,-506169,-335598593,64981836,775913694,-544532107,2139151875,175397889,-570171509,788627328,-947714699,-1960121598,-2132933665,645213759,-570171509,771850112,-544531339,2139151875,175397890,-570171509,788692864,-947713931,142489859,2122952575,142490100,2122911871,106859516,33310347,-373282041,2122907919,138841084,2096907833,12642563,-1963172213,-96040960,57835580,1006671081,1020424737,718174078,3816932,1819748468,1023418925,2071396365,781434883,51947519,-491901,1183559541,-62506508,1183557492,-129594884,2122538475,-1720385028,1352139914,16777114,1958742784,-62485620,138820416,1183548276,1183400188,-129579020,871104511,42795661,55247691,55247691,55247691,42795661,55247501,50397912,1962957629,-11409149,993858423,1023963648,58130495,-48407,1290402886,6045183,1564322676,-385649408,2084437807,-385649408,-471072985,-491901,1183516021,-1962677496,1177286726,540148,1183517822,525812,-369342839,2122579715,91619320,-352321096,138840852,1224230443,2113930045,-129594385,-352320507,-2090901797,-443874579,-900899553,1478361094,-1957345904,-661774612,1443163267,-351897973,173968155,-1979037953,-62486521,-1705974742,65535,-16228725,126355526,189712011,1591637440,-1962742397]},{"sector":10,"data":[1297948645,503318218,1430622296,-1910575989,183272408,1187468887,-16776970,1184500342,-1962934268,1988710128,-129594376,1308624173,360564283,-1979031925,-1947981312,788497400,-1014292619,1183434243,-159480842,-14781184,1996425334,1481226,1174601728,-347060214,1560249112,-8133772,-339839697,108954588,-16026624,1996425334,-25866,1599995904,-1962742397,1297948645,394954,74055683,8913151,3866627,8978687,6160387,3014911,68091907,5964031,49872899,14418175,4718595,14483711,0,1167087646,518818645,-326903666,-2135402996,1347590400,-16091393,-6682506,-1996488449,-2135360954,1347590400,-16091393,1486489718,-1996488702,1996487750,244338700,-1996444184,163117126,-126945536,298059267,-1946925431,-259324322,-788118389,2145681640,-1980086741,-129594617,-523040847,66733571,1577707526,-1962742397,1297948645,503318730,1430622296,-1910575989,183272408,209125206,-1878362369,5826574,-1191426423,1861681161,-1006238724,-96040687,-1962385781,105155568,-461313839,-1962440321,-1014760866,-128022266,19203979,105253632,-1996488411,662763078,-128021506,167134859,-62485753,-523040847,166200835,49120094,1562371467,576077,1167087646,518818645,-326903666,-1957275898,-1958672818,-146798522,2145681633,922210859,-628420614,461651595,770376074,-150992456,-259261330,298071555,956843659,376767044,1178141835,-15764218,-1592034298,1149836156,-62485756]},{"sector":11,"data":[1149901035,-1981535736,-12714938,-3574528,1996425334,-26106,1599995904,-1962742397,1297948645,503317706,1430622296,-1910575989,116163544,-62470314,971702272,-150993224,-661914514,243173259,1039812233,578060287,425603,512431221,529207712,-150953288,-259261842,2324608,1996425333,-401698564,1191117161,303079932,2096907833,-310157633,535137026,46812509,-1873273344,-326412987,-2082959842,512427756,529207712,1468729227,-96040702,-1946397047,60360262,1444149830,33195004,75437948,292995083,1346372536,16777114,-569981184,-352321279,1354771214,-16222465,244319862,-1962929688,1452014150,49120252,1562371467,313933,1167087646,518818645,-326903666,-1564977646,175044352,295706251,1183385347,8435962,-1957670247,2013264478,-1707606270,65535,-369342839,1996423332,-59310326,-1862514945,-25368562,-1191819639,1861681161,-1006238730,-196703983,1200347275,-2132225786,1183416292,8435960,-1946663381,108411376,1183515519,-230258426,-1962379521,129103430,1174659283,-402258952,1996443657,-25870,1586167808,113476596,-1947181431,-2132225785,1174634468,2145681650,-2115090807,-1962933977,1183576158,165728750,-195130617,17190784,-1712175477,33185419,39260423,-1946526069,1200225350,-230257896,688408065,2122516038,58589190,1593791465,-1962742397,1297948645,503318218,1430622296,-1910575989,149717976,440406,84307703,1183387260,-1948742660,1183384135,-1707606022]},{"sector":12,"data":[65535,-150953288,-259261842,295706251,1149908739,209724421,88377354,-939762037,2147418695,49120094,1562371467,100846157,-1241513216,738262786,788529920,922812160,16777984,-738132222,1073742592,-654246141,1442841344,-637468927,452985600,-620691712,0,0,0,0,1167087646,518818645,1996478606,209125134,-16091393,1996425334,-26106,-1073020928,-1070922635,-6678549,-16776961,-1710385098,540,192296703,16777114,49120000,1562371467,707149,1167087646,518818645,-326903666,-1983894770,1183448134,205949946,1962939965,38988035,1072235382,77059,1979716669,42985731,781434883,58894335,-15829249,1996425334,-26106,1048772608,1946157542,1354771208,16777114,-96040192,-369338741,1996424037,57337870,1996480747,-230257394,-6664170,-16776961,-1070921098,1996443728,-126418954,110769919,110638847,16777114,-96024832,1187446785,-352321284,172395437,-351887709,-969474139,-26095,2122514432,192217096,-16091393,-6683018,-2097151745,964670,1822524533,1846971163,1779841307,-385649637,104464244,57940840,-37911,-14980554,-14981066,-14980554,-1206163402,-1706033151,459,-2080419863,1946159742,142508834,-14912256,-1710214090,65535,259309579,271857407,16777114,109748480,-2096712541,1946159742,-33110266,-2097151999,121406,300483444,37651455,57999362,-63511,-6681994,-385875713]},{"sector":13,"data":[2122579708,57933834,-956264727,16907782,444160,-2097151998,214590,922691445,1285162634,-16777214,-14980554,-14981066,-14979530,723217462,-6664000,-956301057,16991750,1354771200,125338,-1304526080,158662662,1342177720,16777114,-499219712,57933825,-2080466967,441406,-1914109067,1345781758,-26093,-1202716672,-1706033139,65535,-26032,-1706033152,65535,112985799,1709768704,-1547686914,-22871860,-1475987199,1342600454,16777114,1178501888,57999363,-112663,-1710847434,65535,54920903,922681344,922688362,922688360,922688366,-890692756,-29457410,276037633,109721343,1342177720,16777114,-32577280,109721343,109590271,16777114,-2012821760,-16777210,721848886,-2298944,-6680970,184549631,-1207601728,48955393,-768884693,-6657557,-1728052993,2122539499,57999370,-1191326743,-1706033151,65535,-1694646295,65535,-131351,1996426870,142016262,-1710590209,65535,-154647,1996426870,108461834,-1710721281,65535,-1946316823,-264435130,-14846734,1996426870,175570700,-16222465,-6683018,-1996488449,1451883078,-43324932,109852415,-1728052040,922701906,922683018,922685986,-6680032,1073742079,1240007540,1073920253,-26032,1038680064,242679805,-16091393,244319862,-385800984,1996487980,175570702,-402229505,501809655,209125373,-16222465,-6683018,-385875713,8453388,50791119,47645447,50790719]},{"sector":14,"data":[50791175,50791175,50791175,10879751,45220507,50791175,57737390,1963004477,-11802365,473770615,-385649408,276299220,1929386557,-12588797,1979718461,-13112924,1946164541,17907100,250151797,-14161409,1963004733,-25040637,1963004989,-9246461,1963005245,-10884861,1963005501,-52303613,1963005757,-52303613,-2080441111,-443874579,-900899553,-1957363702,149717996,-1929087233,1343682630,1342177720,16777114,-1338080512,158597126,112211711,279194,943128320,72063504,922681344,1419382838,-16777212,-1710327242,1117,324024063,290202,876512000,158597136,271857407,111514,74907392,1347469355,16777114,1575324416,503317186,1430622296,-1910575989,142509016,-385649403,-1070923580,-1560232797,2122514972,1937048584,55451275,706758538,105266148,-1511455883,-26112,-4718592,1347590400,-1727641973,748769362,773229331,1310624531,407317251,1377457947,-26032,1347551232,16777114,1310624512,407307011,-1994762477,1468601415,-1706012138,65535,55451275,542663,1310624512,34570243,55195391,16777114,-1958483200,-1073018810,20779380,1024947200,494141442,1946157885,-1205671137,-1706033151,65535,28841963,-6664192,-352321281,-26100,99287040,-352295752,1354771436,-26032,-310181888,535137026,113921373,-326413056,84311683,-1070900108,-1560232797,1183515164,1958742790,81174,37559412,1025668096,661913603,1946158141]},{"sector":15,"data":[-13112532,-1710092746,65535,922692843,-6680050,-352321281,269394209,278660651,-1578833072,103485454,-347074404,71732197,269616683,-26032,-443875328,772194909,2030109440,1761608450,385942272,1795162883,-1291844864,-1878982910,956367616,2080375556,-301989120,-1627324672,2030109440,2130707204,2063598336,704708355,-134216959,721485570,-469761279,738262786,-1996422399,201327362,-805305600,755040002,1241514753,771817219,-939523328,771817218,-1627389183,788594434,-16776447,805371648,-1979710719,822148864,956302081,838926080,654312193,855703296,436208385,872480512,-788462847,486539776,989856512,-1241448701,1560347392,369099521,-520092928,922812164,1442841344,989921029,285213440,1040252677,956302080,1057029890,-654310656,1073807105,-1224670464,553648896,-1728052480,1090584320,-1241513216,1107361540,1342243584,587203329,369165056,754975234,805372672,1157628416,687932160,-1107295484,100729600,1107297026,-1962867968,1191183105,-637533440,1845559044,268501760,1459618306,-973077760,1895890693,-1560280320,1912667909,-1744829696,1929445125,1174405888,1946222341,1056965376,1962999557,872416000,1979776773,-134216960,1996553988,939524864,-33489151,0,0,0,0,1167087646,518818645,-310126450,535137026,13323613,0,0,0,1167087646,518818645,-326903666,-950642912,60998,-1705983957,65535,58048523]},{"sector":16,"data":[-1962795543,529139806,-2013855958,1963721392,23456003,1183432747,-364475924,459945727,459814655,1342178488,161178,-163149568,-502135,-1592640970,378215276,19733358,14320384,922701906,922688362,-1667622040,1375731714,11639376,1654718464,1679198990,-263812850,737302153,1444673094,-96040456,-1577298295,378213164,1446581038,2083094514,-263833339,922690163,1996427834,-260636686,172954,241344768,241440395,468731435,1183445590,-329872918,-1946794357,1174665302,-61467654,334120451,373025878,2071728942,104531583,1937117996,-1947580789,1174531158,-61468166,425603,45626996,922701824,1996427834,-159973384,-231681,-4654474,1385779455,-96040112,771511947,-628948990,726684160,-2036707136,-956301311,1606,-1092583795,118889320,-234879559,976682917,775356178,741801747,-26093,1757347840,-529101541,96012062,-2086276608,1946158718,178217,976682832,-126419182,-624897,1996487798,-18182,1347590480,-231681,-1070859658,32479824,1048772608,1946159984,-25988,-1477902336,459841792,459937419,-1980348791,1347614806,460207871,460076799,16777114,-263812864,737302153,1444673094,-96040456,201086601,-2087684670,1946158718,178210,976682832,-126419182,737572607,-1202696000,726728703,1347440832,-6664112,-1207959297,726665710,1586188480,705137160,-1014279964,-6664128,-352321281,142016307,305805055,-493825,1996486262,-260636686]},{"sector":17,"data":[-1763176816,976682753,-126419182,-624897,1996487798,-59310086,-1694861569,874,-310157474,535137026,80366941,-1873273344,-326412987,1473809950,106859350,1757346699,-1190715877,-1510866939,459945727,459814655,1342178488,16777114,459842304,459937417,305805055,-1961136991,756772374,-628948991,-11513344,-14980554,-1709479882,65535,563761234,-1593835517,378211938,1822625380,1846970651,-2090901989,-443874579,-900899553,1478361090,-1957345904,-661774612,1460595843,460104022,460199563,-1980610935,244053078,512433000,1317608298,-128022026,-753155797,-1980086647,2122579030,1467219974,16777114,321691904,321787531,2146719289,956660806,1064825414,305805055,460207871,460076799,16777114,321691904,321787531,241440313,108994940,241305145,748755318,773229331,-163173613,100161051,-763166719,-96040704,-239991,-15582666,1996486774,-59310090,-362753,1996487798,-25862,1183514624,459849480,119468171,-234879559,-2090901851,-443874579,-900899553,1478361092,-1957345904,-661774612,-16353537,-15582666,-14980554,-14981066,-14979530,-1877251018,780302,-1962742397,1297948645,503317194,1430622296,-1910575989,283935704,-150989128,512429678,117640994,-1947056503,-1995994152,1333852742,1996423430,209125370,-1710590209,1021,-244087,1996487286,108461832,16777114,-129595136,191905411,-1957595904,-16775650,1183515207,-263812612,-150991688,1586232430]}],[{"sector":1,"data":[84345850,1183383556,-2094863370,122430,1586176885,175636470,-1877969153,2615310,-1980342645,1191119431,-163150864,-129594612,2096121401,102665174,38797056,-1962742397,1297948645,503319754,1430622296,-1910575989,-1393786408,-1957275904,126486110,-2037783510,-661913766,45123466,52818059,-431585024,203802251,1552320768,633768959,1183383584,633768956,-2037841792,-963903650,-1996472283,1187505222,-2097151764,1962993278,108461835,339866,-431585024,-10385779,-152025463,1963001926,14084355,-1957642197,-388954042,-780147584,1372138464,-297366192,-26032,1183383552,1183400184,-128021526,-467007606,-1980873079,2122577478,57999606,-1962853143,126544478,1183441962,-1965519878,-1962758009,206328,199771785,-16026176,-6624650,-1996488449,-2037651386,1178206042,-2096663046,16735934,-947184779,956304421,1979669638,633834291,1178140704,-2094433028,1946215550,-96040157,-10844615,-1098706315,1964834650,-362902773,704726922,-330956316,703088267,518778438,486178435,-1098709131,1947860826,-361299989,-1018113,1654319222,-1996488698,1183576134,-364510744,-369736151,1183514456,-1981535735,-1962977146,-388954042,-1996456155,-661915066,45123466,-125049814,556675,-2037699980,-667156646,-1098709131,1962999646,633834267,-2043084788,779485020,539346827,-62506752,2122523772,510918884,972703371,1979669126,1522434830,125115647,-10975605,-940816895,60998,2122527211,125115642]},{"sector":2,"data":[-10830205,-1947438055,1191178334,-96040208,-947189880,-1996487899,37613126,-1962117888,1191178334,1485212400,-16283393,1996424822,-428408848,721453240,-1705972154,65535,109550160,1586167808,-330921232,-2097068288,1962995326,-427916488,-13467902,-2037518218,-11468970,278586998,-2147483641,-16820570,-1963958645,-796974073,1452182240,31555839,-2037858038,-2037645482,-1427505322,-431584512,-2115090943,8449662,1889607038,1418103051,537901311,-26032,-2037710848,1889795924,138840843,-2097118999,122430,1183511413,1619429614,1095935,1619430736,1183535359,-1706016530,65535,91602955,-352283487,1619430742,280514815,1183535104,-1706016530,65535,-1957642197,-31134138,1183400000,28856558,-6664192,-2147483393,-1929312178,1358913670,-1695648001,65535,-657327407,-780147584,139365344,123265,1183432971,9741064,1593801449,49120095,1562371467,313933,1167087646,518818645,-326903666,-129594104,-1946401143,-62455848,-2012723574,-60912889,-2012854646,176063239,-1927383808,-1202653114,-1873805311,-127604722,205391559,62390292,-6664192,-352321281,175570705,-11485141,1996425334,34052860,-310181888,535137026,113921373,-1873273344,-326412987,-2082959842,1187448556,-1929379588,1183448134,-1965519878,126355014,-16091393,1996425334,-401698564,-310181877,535137026,113921373,-1873273344,-326412987,-2082959842,-1070921492,1612368,-1073020928,1183661172,-62486024]},{"sector":3,"data":[1191172235,138840828,1183647624,1996443654,178428,94083664,1183645696,28856568,244338688,-940066328,336346630,243712,128424528,-310181888,535137026,113921373,196629,16712252,196638,16711798,196639,16712445,196640,16711791,196641,16711753,196642,16713658,196643,16711975,196644,16712113,196645,16712082,196646,16712010,196647,16713746,196648,16713810,196649,16713528,196650,16713511,196651,16713782,196652,16713460,196653,16713414,196654,16713308,196655,16712897,196656,16712942,196657,16712684,50,0,1167087646,518818645,-326903666,43950390,1963607609,461938988,462034571,2080921145,956661536,426903110,-1961991519,957244438,226429014,837354365,105265411,703136627,1488899,-1962250505,51323422,-196703993,1200347275,-754274042,206312,-1947187575,1451951686,72825096,-1914109058,956857344,58065479,-1593801751,378213222,1446581096,2135522312,105265413,1996440182,105286410,755521163,-628948991,-1873784320,-10426354,-1961991519,957244438,545196118,1178142076,-1961266426,1200354398,72846082,-2097151483,1654849746,1679198478,43968782,-1559607669,1586168478,38243316,-1559996533,378084232,33889162,13796096,-1995545949,-15834090,244320886,-385712408,512426608,1207894022,-195130622,126558091,1357792905,-1962522997]},{"sector":4,"data":[1183385686,-128546314,-6664110,-1191182081,-369688564,99501571,1183383556,43950572,1963607609,241344794,241440395,1963480633,105265422,1183517045,139889414,-1962894615,1183444038,-228684814,1468729227,-431585022,-1947707767,-388955065,-1988107136,1207364166,1282736388,-1962522741,1183385687,-531199522,65697535,1444148806,-431608840,1390958107,-529072304,-1864468737,77195278,-1981659511,-92019626,1023768063,343212031,-1947842933,1174661206,-464120862,467551787,703324246,-1946794357,1446639702,956658952,125044294,-2131599733,-1962867633,1175184966,-385649432,1721827579,1746307859,461939475,462034569,-1559607669,1586168478,38243316,-1996204149,1451883078,105286652,-1995942261,1451882054,-330920968,-1947056503,126612062,-1996335221,1451872326,206015442,-1995548789,1451873350,71797718,-461313839,-599357057,17057782,-1410792588,105351936,-1995942005,1451871302,-596181042,334906883,1177286742,-766108720,1183535186,-833188916,332678659,1177278038,-766108720,45633618,244338699,-1996129816,1451874374,-359462,-12778123,-1956547329,1452003398,-666500142,735729171,1444662342,241345486,241440393,-1878362369,23193614,-1947050357,1183386183,1958742986,1354771215,1342898872,-1698007297,65535,185351809,1836515568,185337543,-2031550224,-431584512,-1981262197,1451882054,-227638280,-26875636,-1946794357,1446639702,956658952,125044294,-2131599733,-1962867633,1452014150,-698992132]},{"sector":5,"data":[1178147957,85423572,-763166718,241345280,241440393,401035,-385724417,1183579585,-698971180,-1980348791,1183053910,-689369870,205423102,1912725515,201770760,-352198645,185377042,721435653,7911890,-503844361,-1962210141,-16775650,-310181297,535137026,113921373,-1873273344,-326412987,-2082959842,1721830636,1746307859,-1978255085,2136898587,-2012858106,-1588169189,378215304,1183390602,-94991880,-1961991519,-1995545578,1451881542,108462070,-1946663285,19790422,14320384,244338770,-2130953752,-284487130,185738880,-196703248,-1544137077,378080866,1183518308,-94991368,-1994684253,-350516714,1379335961,184727571,768080,72850000,1996423168,-401698810,-310181877,535137026,46812509,-1873273344,-326412987,-2082959842,-1957296916,-1961942498,1488927,-1962512649,339774448,201082505,-1206749760,726666008,448286912,-6664192,-352321281,-60912878,414726143,448286731,-1382395904,1577058308,-1962742397,1297948645,503317194,1430622296,-1910575989,82609112,958105249,1584663110,-1559607669,381164422,175044352,253894283,1183385347,-2082960388,1946160255,207588103,82524159,1343173816,1343075000,1342190520,317082,-1547687168,413340186,-60912878,-1962784885,-962395049,-938047216,229816336,247248976,3389520,-26032,-310181888,535137026,113921373,-1873273344,-326412987,-2082959842,1448545516,705613216,-1913615388,653786948,243994322,-936702272,-150025567,734538726]},{"sector":6,"data":[722389006,-1995516914,1218573902,734079763,-1995519994,-1012860858,-1947981299,-92894736,-134265715,-1962031066,-129594424,103530795,-768930092,-235417973,-8259445,91423440,-352137032,-1547203838,1218514368,230073107,722386593,722387974,-1995520506,1487010886,-62510317,908849291,-25096508,91424160,-351952712,-1547269374,1486949820,229942035,-310157474,535137026,516640093,1430622296,-1910575989,57057752,1963345465,1711720198,-1577058557,1178143592,-955878138,-16029690,43950591,1963345465,-1643723002,-1577058558,1178147718,-955878138,-14973434,460759551,1963345465,241082654,241174027,1048645493,2147420928,1048774517,1962871550,1980155654,-2080375013,-443874579,-900899553,1478361090,-1957345904,-661774612,44041927,-1070923776,-1560106333,-1532820824,44212994,-1962742397,1297948645,-1873273141,-326412987,-2082959842,2122390252,1954545166,105286416,956847755,208997462,1963607609,-18425,26077593,949891,-2002702219,-1978234110,206977282,92218492,1913275961,42508573,42604171,2131252793,956660948,-847837626,-1962768223,-385709546,-1564999337,242153216,295706251,1183385347,-153580548,1946223687,12249347,-1962260853,19729494,14320384,1183416356,-94991880,-1728020296,1996443730,-126418950,16777114,-163149568,-1962522997,1446578262,-385647348,142606195,1997162041,-9836285,-15829249,1325397622,-196702730,1354771280,502426,172919552,66604587,-229733944]},{"sector":7,"data":[-1946663285,1446640214,2131983368,105265413,1183517814,139889414,-1980217719,1183578710,-94991368,2081183289,956661541,511052358,-1947054337,1065415262,-1962314486,1451952710,10086668,17460867,810627,1854001387,-2097118984,-385811874,1996488558,243172110,-1206815488,-11529822,1996426358,-26102,501940224,-1946394997,939465823,-15960321,244320886,-1962752792,-930349986,51136395,1183666369,-1070903056,-26032,1183383552,-532773906,57933825,1358864105,-15960321,1183648374,1183666410,244338918,-1962793752,1452010054,139868652,2095645566,956857598,57804358,-1946258711,1452010054,49120236,1562371467,707149,1167087646,518818645,-326903666,922703388,1996428114,768006,156932688,2122383360,1954545168,276726553,-1592101632,378208904,1446576778,2131655694,205928709,-4716686,-1427531265,10663937,-1961857289,-1607037992,-1994652911,1207368798,57934084,-1962890775,1451953222,-1988090866,1451882566,8435962,-11513191,1996487286,114399992,1183383552,138841078,956978827,-1300296106,1178142076,-5541108,1996427382,-163119114,1358186125,-1705983957,2368,722226827,-939263922,-2114826615,8452166,16406147,-1962391925,1446578774,2131983610,-129615611,1183517814,173443848,-1980217719,1183578710,-94991368,2131646009,956660892,-1787622330,17581699,939651,-893301,1065415238,-1948551926,1451953222,15198478,-2096072961,1962938494,295876625,242679632]},{"sector":8,"data":[-1710459137,1918,1586175467,476023804,1996437503,209125134,786960016,-60912895,1200343179,1354826508,1357923981,-1705983957,1793,-2081667447,122942,922692212,1996428114,3389446,66755152,1586167808,138841084,956978827,57934423,972998633,-385649657,1877737152,-2081655157,76219590,956454027,209456726,1178142079,-2096795124,-353696058,1418396811,-398030590,-1947576695,1183384644,138841070,956978827,58649174,2097054697,-398051064,2045313910,-293698562,-1960938241,1174662726,263660,1088833161,108461904,-1964614005,1357130247,16777114,-398030080,1592415883,-1962742397,1297948645,503319754,1430622296,-1910575989,82609112,242649942,-1962621309,39095044,2081183289,956661516,91359814,-351877501,239504362,989856773,-1962248762,126553694,-352168053,-96171258,-1946397557,126421086,-1962780791,76219998,-1996335989,39291143,1577337995,-1962742397,1297948645,503319242,1430622296,-1910575989,82609112,175541078,16533191,80118528,-1962522997,1413023830,2081193982,-62637819,1191118199,-1947800580,-2090927034,-443874579,-900899553,50333702,-16130816,50342912,-16594944,50344704,-16704768,50344960,-16212992,50345216,-16182272,50345472,-16223744,50345728,-16248320,50345984,-16497920,14592,0,1167087646,518818645,1183570062,50343180,1996492349,-1816132856,-1532494034,-373282048,244318371,-385763608,244318360,-385834520]},{"sector":9,"data":[244318352,-385705752,-6684536,-385875713,-6684544,-352321281,-401698695,1928004507,-1878362369,49342478,1996450027,108461834,16777114,-10753280,1996425846,142016262,16777114,-11801856,1996425846,142016262,16777114,-12850432,1996425846,-26106,787152896,-16222465,1996424822,-26102,518717440,2752546,3801138,5242946,4784157,5898269,8847463,1900692,28835959,49120000,1562371467,576077,1167087646,518818645,-326903666,459841802,459937419,-1980348791,129562710,922701824,-11398598,1822553718,1846971163,-163173605,-1980213733,1451883078,-1202695428,-1722744833,-1070903214,-1706012592,581,1342177976,16777114,-1338573056,976682763,-126419182,-624897,1996487798,39754490,1048772608,1946159984,45193735,434831360,269027062,-167283455,34605318,244319604,-1593830168,144905060,-401698814,-310180629,535137026,516640093,1430622296,-1910575989,149717976,572427094,-1205892337,787939350,-259322960,-1962786677,1183384656,-94991880,863289867,196097791,1347469355,16777114,302446080,527699723,167528134,16598726,1358710413,196097791,1347469355,-362753,-6621066,1577058559,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-493220116,-1207959550,-1706033150,65535,58048523,-1593784343,378215272,1183390570,-128546314,-1961136991,-1994691050,1451881030,375028,976682832,-126419182,-1946781953,1177285190,-128574474]},{"sector":10,"data":[-1980086647,1347615830,1358954424,726684313,1347440832,16777114,-1338573056,976682763,-126419182,-624897,1996487798,-25862,116785152,1963003913,151451143,91488784,-18346352,1883145214,880082955,269027062,-167283455,34605318,244319604,-72472,-15582666,1996486774,-59310090,-1191545089,726695935,1347440832,-26032,99287040,210586,325361920,-956168029,1270790,-401698816,-310180977,535137026,516640093,1430622296,-1910575989,116163544,16533191,-26112,-6684672,-1996488449,104593990,930353280,242532363,52082768,-26032,-1073020928,-6677387,184549631,-2094631744,133182,28837237,721611520,-62486080,244320747,184671976,-16091968,244382838,-352055320,-26102,-6684672,-2097151745,-443874579,-884122337,1167087646,518818645,-326903666,-1338573010,-26101,1183383552,-61437446,1023821451,1618214913,1946157629,212241,-2143473036,-1872530176,14018574,1048796395,1946157576,1354771285,-59310256,-362753,-1928613834,-1705979322,962,1674739331,921380468,34094723,724530176,-11513664,1996487798,-1338572806,-767128309,-26032,2122514432,309617618,16777114,1975520000,538425353,-26032,-310181888,535137026,46812509,-1873273344,-326412987,-2082959842,38974,113726069,1722,196097791,1358954424,1347469355,983191632,-1593835519,87886910,1024097280,92209160,490906,-1774288640,1954545408,-1774780657]},{"sector":11,"data":[-26112,113704960,2147418262,55328387,-16157681,-1711059914,65535,-1962742397,1297948645,-1873273141,-326412987,-2082959842,1187401452,1183645884,-1070903108,129519696,-6664192,-1996488449,-12731834,721712511,-1954944064,-1767654842,922701824,28838832,-6664192,184549631,-16091712,-6636938,-352321281,178394,-1136226992,-26032,1183383552,1347590584,16777114,-1304000256,-1149976565,88054352,1183383552,-1235842636,-1418411509,381437581,1996444240,-1200160844,351898,-1300824320,353946,8435712,-1300824240,468122,112640,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-950642452,47686,276838143,426906,1975520000,-373282043,-2135424735,-6664192,-1996488449,-1072976314,32047989,-6664191,-1996488449,1451864134,1975651250,15657219,-1334378670,381437581,4372560,-26032,1996423168,-25938,1183645696,-1070903108,-6664112,-1996488449,-12732346,-385649281,-1564999492,-1200687360,295706251,1183385347,-2133292116,-1962802097,1207348318,91488516,-352288584,734014210,-1270445614,-4827511,722186294,-1957670720,-1961942498,1488927,196095735,1895821451,40959748,-4688129,1996469878,-1403089996,1468729227,-1270469886,1387681307,44735056,512425984,529207074,-150989128,-1962168274,309395440,16777114,-1200161024,1353205389,16777114,-1438217984,-955943616,43590,253894283,381165451,-1339099392,-1947170037,1082763846,1883144978]},{"sector":12,"data":[91553803,-352321096,-1983894782,882555462,-1879048185,911374,1589266059,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-1957285652,-1961942498,1488927,196095735,1082912907,72387330,-1982839159,922735190,-6680448,184549631,-1878493760,-44439538,-956258839,16816134,-26112,113704960,152,196097791,1347469355,108954,302446080,376705035,-1961991519,957244438,175493718,1976583737,112645,-1070923029,184682659,-955812416,130118,-1070913301,1996443728,-797507630,196097791,1356088973,236698,-729906432,-1207601821,65732610,-1996487752,1183579206,-767161392,28837236,721611520,112894912,393527307,1342210232,-1705983957,1839,737965823,-6664000,-1711275777,65535,49120094,1562371467,1478413133,-1957345904,-661774612,1462168707,-62470314,28835840,-191213568,184549377,-385649216,922681843,1520044976,-1996488701,1451878982,1975651308,31320323,83610,459841792,459937419,460199481,108989820,460064313,-6683274,-1929379585,-289476994,-1190717943,-1510866939,-1961138015,-1994692074,1451882566,-1338572806,1354771211,134060624,116785152,1947208466,-92372119,2137226240,-125926650,-1956940288,-1961942498,1488927,305802999,1216409739,922681606,1183519290,-94991368,-2097151699,1347551450,437658,241344768,241440395,1979340345,-129615611,1187455092,-16776452,-15582666,1996487286,184727800,-26032,1182990336,1451426538]},{"sector":13,"data":[28836076,922701824,1996427834,-126418950,-1280257,-4658570,1385779455,1354771280,412766288,-1207959551,-1706033150,289,305805055,-1711520117,335037955,1347615318,1347469355,196097791,1183535184,1317771772,-329348118,-635713493,-6663853,-2097151745,749630,-1243020428,-129594624,66737803,1444145734,-1202695444,-1706033151,65535,-1981397367,1048832086,1946157576,1044284173,108331532,205391559,2122514471,913571846,450512582,1357792909,1356547725,1342180024,16777114,-632910592,976682832,-92864750,-1946650881,1452013638,-364510214,1391220243,30382672,1996423168,-428408856,-1542401,-6625674,-1090518785,1988954606,-1190715666,-1510866939,269027062,-167283455,34605318,922686836,1996427834,-126418950,-1280257,-6624650,-2097151745,749630,563742068,-956301308,16915462,-2090902016,-443874579,-900899553,50344194,-16269824,50339584,17086721,50335488,17090049,50336256,-16208896,50340352,17099009,50336512,-16231680,50340864,-16167168,50341376,-16295168,50341888,-16229376,50342144,50666753,50366720,50740993,50366976,50764289,50367232,50521857,50367488,-16195328,50342912,50656513,50367744,50671361,50368000,-16524800,50343424,-16651520,50348544,-16528128,50349568,-16322304,50349824,-16291072,50350080,-16565504,50350336,-16578816,50350592,-16581120,50350848,-16390656,50351104]},{"sector":14,"data":[-16511232,50351360,-16186880,50351616,-16736768,50351872,-16740864,50352128,-16744192,50352384,-16748288,50352640,-16752384,50352896,-16760064,50353152,-16762112,50353408,-16279808,50353664,-16381696,50353920,-16384768,50354176,-16420096,50354432,-16457472,50354688,-16470528,50354944,-16474368,50355200,-16477440,50355456,-16485632,50355712,-16496640,50355968,-16502272,50356224,-16170240,50356480,-16182528,50356736,-16217344,50356992,-16243200,25600,1167087646,518818645,-327034738,922681608,-6681680,-1996488449,1451883078,1958874108,-1170308345,91553798,-352321096,876019537,-26096,-1073020928,244335220,-1996470040,-6621114,-2097151745,1962997886,-125399589,397955326,1637503008,1342177280,1344282296,16777114,-1976107264,-125399802,565727486,-6664192,1023410431,-1401683967,-310132693,535137026,516640093,1430622296,-1910575989,1290568664,572427094,-1205892337,787939350,-259322960,-1962786677,1183384656,-61437446,15877831,138314496,108331010,-385744664,-1070923277,1996443728,-92864516,196097791,1355171469,16777114,-1338573056,-465138933,1183437355,-162100748,-1070903214,374864,32676432,45613056,547442688,1183422734,-1000961598,1704611922,-1996488702,-1072959418,2122522997,141820146,-1695385857,298,15761027,1996425332,38771440,-1070923776,-1962835223,1452014150,-162121220,92034943]},{"sector":15,"data":[1945388601,-260636848,107162,-1136228096,197023369,-1581550398,1344147372,63063691,103529542,1347554848,236992255,170650,-260636928,121242,237019392,-196738663,-1946790383,1452014150,-162121220,92230268,1928611385,-964787381,-385649565,1996423356,41261808,1183383552,-1168733768,443859467,-1984412021,1451876422,-700019230,-6664170,-1996488449,-1072958906,1183539061,-1169814600,1038680949,-260636673,149402,-13440768,196097791,-624897,-1070861194,374864,-26032,1183514624,-1069118992,237019472,-1035599463,-3910127,1996473462,178370,58759760,1183383552,1958743024,-15472381,-1983887733,-370544570,-227082242,-3639553,-6632842,-1207959297,-11534334,-1365577098,-16777214,-1566904202,-16777214,463138934,-956301309,61510,45635819,146296832,1347590400,186778,-230258432,58048523,1358864361,236954,-1270445824,196499081,-385649214,1183579788,-867792400,382092941,1996444240,571572,64526928,1996423168,-25870,62390272,1996443648,-25870,28835840,-310157824,535137026,1439386973,-326898549,-1070901734,-1980873079,45673542,28856320,1347590400,16777114,-230258432,1183432747,-129594886,253894283,381165451,-1339099392,-1947170037,1351287360,-62486268,-939633015,61510,15892099,300483444,-226589951,-16223232,-6622602,721420543,24963520,196097791,-362753,-1070860170,-25755824,-1191414017,-1706033144,65535]},{"sector":16,"data":[-1996266335,1187505734,-1593835286,1178141540,-1961918998,-1082070434,1962935680,-1983673545,1183573574,-398030350,-431584432,-330955879,99505683,-763166718,-1202695680,-1706033150,65535,200427145,-1961986624,1183443014,-8525326,-336967937,-227082318,16777114,-196704000,200693385,-385649214,1487011683,1511426819,-27903741,92015231,1945912889,-431030525,503677112,-330921136,-1946925565,1347614294,-1696172289,65535,-1712961909,300697089,1586228822,-193542932,218154534,32261763,15619715,-991142261,-970525578,1191119360,-330923024,-296320255,56140032,56235659,-1980217719,1996487254,76389106,1183514624,-27882500,2147112505,956660783,678688838,196097791,-362753,-6621066,-167771905,269160966,-672595083,241345022,241440395,-1980217719,-957613482,-1695385857,1604,-1980479863,-1039403434,-1595341963,-260144130,-2096597759,-2096960402,-1962873250,1992617054,12986100,-227082496,435610,112640,-227082416,147354,112640,1575324510,-1873273149,-326412987,-2116514274,721534700,-129594944,-1980348791,-2037777850,-2037514518,726728280,683167936,-6664192,-956301057,-385975162,2122761987,-956045058,133126,-1338573056,-18421,1354771280,-1706012592,65535,276838143,12954,1975520000,-373282043,28836786,647647232,-1996488699,201256070,-952339008,-108410,243967,87923280,-2037841920,-1072955668,-2033770635,6553176,1342177976,16777114]},{"sector":17,"data":[-326727424,1975520254,-96024824,887685121,134661891,-2097151742,133182,-303496331,1379335937,-2071556845,230183166,-6664192,-2147483393,285119630,-27228473,-1098711040,1952710232,15526147,-18041089,1342181048,-26704243,-711307242,1023410181,58523662,-2147294487,33452222,-1098905737,1979842161,-323551448,-401698562,-2037840680,-1072955826,-1058471051,-326727422,246960382,-2037559296,1343684200,16777114,-323551488,-25858,-2037841920,-1769341360,-2037776814,-1031012774,-27490679,-2037792725,-2037776796,-2037711262,-466944400,1347537195,-26442101,-1957670247,-1711378810,513429586,1375731718,-26032,-2037841920,-1769341356,45678166,-11382784,-1694608202,263,201082505,-385649216,-1706032747,1657,-25131383,-24996215,58049035,-16678679,-70474,-108874,1392399542,-25118977,16777114,1975651072,23325052,-18041089,437914,1250330880,1284934142,1975651326,33155331,1253506898,1485213182,-1202710786,-1706033144,365,-18041089,95642,1589051136,124033790,-2037841920,-1769341312,-1039401342,-991362187,1589051137,122919678,-2037841920,-1769341356,-2037514666,-1924071848,1358848646,-26966387,-401698736,-1073020342,-353827979,1988544256,-1962923778,-1946266490,-1979820394,-1979811706,201226902,1913485266,-49915,-2037709193,65797716,-1979711560,-2130811258,-2130814834,196097791,1347469355,-27752819,2668624,229161040,1354771280,16777114,1487306752]}],[{"sector":1,"data":[1187479550,-956290826,63558,-1224791573,-6619412,-1996488449,-1979820922,-108906,-1694569290,329,-25131383,-24996215,58049035,-2097082647,16668350,125260914,-28000637,-2092206592,16668350,141693047,-28000639,108200191,-28014965,-4717589,1116113152,1183238142,-2097151746,133182,-1224779659,-1224737150,-1924071808,1358886534,-29063539,-401698736,-2037841669,-1072955838,1187458165,-2097151494,133182,-1679228043,1488880384,57959422,-16741399,-2120549258,-16777208,479919222,-385875967,-1098710905,1946222148,324182326,-1224790549,-1224737150,-2037514624,1343684342,-29182209,582298,1116113664,1003629566,1979602582,1418083086,-1928825346,-1979808634,-113018,-16011210,1996486774,-158953994,-1224781570,-1464271294,-1224781811,966458950,-1962934265,738083462,1418078674,1452677630,-163184130,33052177,-369196922,-1224737023,82574942,-18041089,269978,-356613376,158597374,-18172161,713882,4430336,1048772608,1946157534,-1338573032,-18421,1354771280,-1706012592,1268,16402119,-96040192,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-11139860,1996426870,138840844,1996443678,110926346,1586167808,141986570,-16777018,179832950,-6664192,-1996488449,-1072956346,28837236,721611520,106859456,-1073018999,1183517044,138816508,-16127168,-6682506,1207959807,49120094,1562371467,707149,1167087646,518818645,-326903666,1988843024]},{"sector":2,"data":[-1996190966,922743366,146278056,1603948544,-1996488695,922742854,179832488,1872384000,-1996488695,922745414,79169192,2140819456,-1996488695,922745926,112723624,-6664192,-1996488449,1183578182,474610,-1628896387,539904,-1763114114,41714432,-2096529920,2113930364,8579331,1342178488,1342254264,-362753,-644155274,-1996488695,2089022534,460652546,294019,79172981,750276608,1996443649,-59310096,670874,-2093421824,2097153148,71600903,65788151,-1727773557,1183535186,1347590644,162947,1149962109,-338102526,38046467,-1706012007,65535,-6664110,-1996488449,2122577478,108265718,16023171,-1070910603,1187470571,-16776206,1962930806,-260636926,-1694730497,2640,-637303,1962930806,-92864764,-1694992641,65535,-336312695,-159973439,166344447,276313855,686746,140413696,1996425097,-63504396,-2009661687,-26096,1586167808,-1207465722,-2090991615,-443874579,-900899553,1478361094,-1957345904,-661774612,-954798973,64582,16402119,-364460288,922681344,26873914,-1996488693,-1072956858,2122526581,141820154,-1694861569,2774,15367811,1996425332,191863530,2122514432,141820156,-1694730497,65535,-1846951893,-92864768,-1710852353,2881,-1032536053,272250623,16777114,-364476160,-1300971509,-1207535873,-1924136946,1343679558,366490,1958742784,-294191203,-1192200449,1347420161,1347469355,16777114,-62486272,-2106277877,1357543167]},{"sector":3,"data":[16777114,1975520000,-9246461,736786175,-11513664,1996484214,-92864528,548950096,13416960,-6664110,-16776961,2006645366,-16777205,-6624650,-1962934017,-310117306,535137026,46812509,16973865,67124,196623,16712767,16973855,66066,16973840,67575,16973841,66656,16973842,67567,16973843,67270,16973844,197885,16973961,198806,16973962,197785,16973965,197903,196750,16714259,196663,16713071,16973880,132574,16973986,133991,16973858,131635,16973987,133876,196653,16711893,196679,16711699,16973896,133937,16973872,131519,16973873,133811,196660,16713904,196685,16713757,196698,16714015,16973915,133832,16973892,133265,16973893,132713,196682,16712508,196709,16711922,196710,16711795,196711,16711767,16973928,133455,196688,16713815,196713,16713239,16973930,133913,196690,16712911,196715,16714341,196716,16714167,196717,16714252,196718,16713975,111,0,0,0,1167087646,518818645,-326903666,1048794630,1963918156,12183811,-150980424,-1962718162,884473816,112656,1354771280,1342242744,-1705983957,79,-150980424,-1962718162,884473816,1354771216,909573968,-6664174,-16776961,-275118474,-1996488704,1451883078]},{"sector":4,"data":[1958874108,3717213,55324407,1992611979,76228346,272271241,55326463,1342177720,46746,3717120,55324407,1343227909,653942468,637958143,1208633227,-26032,922681344,-1070922932,42703440,-1070923776,112720,30120528,1996423168,25074182,951582720,1278146304,-942109949,1063559,-310157824,535137026,80366941,-1873273344,-326412987,-2082959842,-11138836,-6683018,-1996488449,1451883078,1975651324,8579331,653942468,637945739,-1996339413,-1072957370,1048777343,1947140940,1278672737,-26109,1458241536,55328387,-15436529,922683510,-6681680,-1560280833,255656780,-1204063232,787939384,-259325108,-1995946357,-1005570940,-1960379810,310675719,-94452720,71797542,269386889,653942468,-1996339317,-1005578620,-1960379810,-2071394745,1996427284,-26106,-2090991616,-443874579,-900899553,1478361092,-1957345904,-661774612,3717206,55324407,1183570059,881277194,-385649648,1048772848,1963918156,15132931,184685544,-385649216,922681564,28836684,-1751494656,-1962934270,-1073018810,-1997995147,81152,-1947663499,146688,-1897331851,212224,-1914109067,277760,-1964440716,3717120,55324407,-4657013,1347590400,-1727641973,748769362,773229331,545532691,580131600,-1706012144,65535,-6664110,50331903,319824004,-1995431276,-1995432828,1376788116,-26032,951582720,1278146304,-940537085,1052804,143425536,922681872,-6683828,-352321281]},{"sector":5,"data":[112674,-26032,401276928,1342177720,16777114,-1710429440,65535,1689781739,-1250560,721636406,1671057600,721420291,28856512,-426094592,-402653182,-2090991192,-443874579,-900899553,1478361094,-1957345904,-661774612,-150980424,-1962718162,172395480,271877945,-1377238156,1279165184,58003203,-402611223,-1073020680,-1712782475,1278672640,112643,57645648,1183514624,1958742792,81174,37559412,1025668096,829685763,1946158141,-11211968,-1710092746,65535,922700267,-6680050,-352321281,3717182,55324407,-2020878197,103485454,-347074404,3717338,55324407,-2020878197,103485454,-347074404,3717329,55324407,1183570059,310848262,-6664176,-16776961,721636406,-6664000,721420543,28856512,-6664192,-402652929,-310181680,535137026,113921373,-1873273344,-326412987,-2082959842,-2091514644,133182,364391541,-62486272,2114340411,106859278,-60913333,638088900,-1207959354,1344143514,-16091393,1996425334,-25860,-2090991616,-443874579,-900899553,-1957363706,951604972,1278146304,-1012989,-1710213964,65535,272270473,443858955,-150980424,-1962718162,985137112,-1774780656,-26106,-1073020928,-1070922635,951597035,1278146304,-2585853,-15713609,-16347082,-1710846410,65535,-150980424,-1962718162,985137112,-1808335088,-1841889530,-26106,28835840,-443851264,-1957313699,951604972,1278146304,-1012989,-15715148,-1710212428,65535]},{"sector":6,"data":[-150980424,-1962718162,981977048,1577058320,-1017256565,16973848,132128,16973825,132154,16973833,65623,16973842,65726,196627,16712231,196663,16711850,196667,16712283,16973886,132094,196653,16712638,196698,16711966,16973919,196660,16973888,197600,16973890,197724,196676,16712224,196718,16711809,196720,16712535,196721,16712471,196722,16712460,196723,16712312,196724,16712305,196725,16712294,196726,16712254,196727,16711987,196728,16711838,121,0,0,1167087646,518818645,-1957242738,1149961846,16792834,20782194,-1961396479,272434244,1024422400,175570961,333975184,112640,-1070923029,49120094,1562371467,182861,1167087646,518818645,280549518,1721389056,184549376,-1207599680,48955393,-1734098901,1161218,-26032,-1073020928,28837245,721611520,43688896,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-1957296916,882968182,1946433808,-18427,1149985259,-62486268,1023558795,125042944,1946223165,-2082018485,170558,2122517364,-646640132,-343798344,-62485702,1946159421,1025081107,594870280,43531907,-1207602176,535527470,-2130950517,401309900,1946160445,7355891,2034042236,-1197310464,65798140,1593591435,-1962742397,1297948645,503317194,1430622296,-1910575989,82609112,141986646,162945]},{"sector":7,"data":[-1593346815,70848564,-1070922380,-1962835223,-864025532,-62486144,43662979,1024357376,-428048351,2139105341,-45711135,-62485759,1954555965,-385647043,574423316,-385646976,557646057,1026260352,997490700,1971329853,9300227,2122560747,225705990,104858,-59310336,16777114,503760640,-385875966,2122514604,-244056058,16777114,-59310336,16777114,-2082280704,1946158718,503760860,-385875710,1048772744,1946157720,108954385,-385649408,-6619292,-385875713,2122579804,-1250689018,1342177720,1343230392,-1157627976,1347616767,16777114,-2086737152,1946158718,112792,269727824,-18352,-335544390,108954593,-2088602624,170046,28840052,280514560,-4698096,-17665,116835563,1963003913,151451143,393478672,197146367,1342181560,1347469355,-26032,28835840,-1704006912,65535,1040137961,58556451,1040111593,58687525,1040129001,58032166,1040134121,58032167,-369161239,608042684,1025212289,58491169,1040127977,58032173,1040148713,58032174,-369153047,624819868,-385649279,641597152,-385649279,658374388,-385649279,675151568,-385649279,2045378276,-310157570,535137026,80366941,16973838,196687,16973930,197178,327791,16712215,196692,16712061,196674,16712260,196681,16712135,131157,16712218,327764,16712186,327802,16712157,196732,16712165,196731,16712097,131197,16712189,196730]},{"sector":8,"data":[16712069,131198,16712160,124,1167087646,518818645,-326903666,43557140,-939899255,62022,622555297,1183383553,833780,45587024,-1073020928,28837245,721611520,503712192,105286402,1971332925,17099011,434701182,-2145174271,607999348,1030255744,58032165,-385813783,1187447342,-956300814,326726,-1961138015,958097942,1964731926,1812347142,-2096532453,1962998398,17492227,16023171,-118946955,460103936,460199563,-956229143,127558,50087623,-2084181248,138814,599264372,244338817,-385751832,916521430,-2095846638,138814,616039796,-1578701951,103485596,1183387666,-330920464,-26032,1347551232,73114,1779841792,993686811,1964730374,325493044,325588619,459937337,108996476,459802169,1048780662,1946157594,-330920680,459841872,459937419,-2097151699,1347551450,16777114,805750528,-939524337,-15781370,-1811494913,-16777200,1996483702,112880,-92864688,16777114,20506880,32655047,507413248,91488258,-352320584,112643,-369342839,624819974,-385649279,658374450,-385649279,-46268635,-385649153,-29491479,-385649153,132775644,459841793,459937419,2122523371,259260658,-1961136991,756772374,-628948991,-1592923392,378215272,17111914,13796096,-1980348791,2122578006,427032818,-1961677663,957558294,511047766,1979074105,-26087,-1209466880,325492992,325588619,1979209273,-163170043,2122573684,745799922,-1961677663]},{"sector":9,"data":[957558294,276625494,1178142079,-1593216266,378213164,971707182,-493825,1996486262,-25860,703266816,-1961662815,957573142,259848278,1178142079,-2096597258,-2097023378,-16713634,1996486774,-59310090,16777114,-163149568,-2080876919,1946221182,-2091888105,1963064446,-339727612,-62485757,-26032,485163008,-493825,1996486262,-159973384,16777114,-226589952,-2147126016,-31756250,35391175,113704961,65724,-1962742397,1297948645,503317194,1430622296,-1910575989,585925592,-1734257065,-62486270,-1995424095,213447750,-6664192,184549631,-1207599680,48955393,101302315,1183515166,-2144846586,1618950772,1954554173,-2145239779,641546868,-2089716352,138814,-38269836,244338943,-369291800,116786712,1946229616,-58817752,-1591577600,378215276,552278894,35536515,-1207602176,-705953794,460326646,-2082179839,1946221694,459842014,459937419,-1980742007,552333910,1031872813,410451975,781434883,54831103,51905270,49677080,49677140,51905364,-887041,1183707254,1048793326,1946160188,-96039675,1991771115,244338702,-2096781080,1946221694,507413303,812974082,1023821451,58032161,1023452905,58032162,1023469033,1265926182,1971333181,14215427,1971398205,9038083,1971398717,13166851,1023821451,58032417,2114244585,85715203,1971331389,18737411,1971331645,34466051,1971332669,42985731,1971333181,56355075,-2096813079,801854,-1667152012,-96061168]},{"sector":10,"data":[104415103,964562550,-1961662815,957573142,763163222,1178142079,-1960413456,1452011590,77298,1375787651,112720,37591632,1347551232,1357792909,1358579341,-353890672,325492996,325588619,270407225,1877541748,470170111,-385649648,1446641510,-385647118,142606174,2012235321,-11212541,15629955,2122386036,1954554118,-12261117,1350640824,585633424,76999166,-1946919285,-297366729,-523041615,1150021635,1141086468,139727622,-1981135223,748809302,773229331,-329893613,199820157,956858367,57928262,-1946222103,1418397252,-229230328,-202833027,956858366,57929798,-1577129495,378213164,1446581038,-385646862,142409434,1928349241,-19863293,-343858248,507413386,57999362,-956253463,-1978,305805055,459945727,459814655,348058,1346274048,913637123,253894283,381165451,976156416,-1946645742,1183387713,-1948742682,440383,55586551,1755437195,1779862299,139540763,1094255989,-16550906,922744902,922686010,922688362,-6677656,-1962934017,-1961942498,1488927,305802999,1099692171,-431585008,55590531,-1961396993,100923462,1183384400,2092960744,-430011639,121184139,-140900225,-385875962,1586168704,-1205892122,1861681158,-1946645528,-1029503935,-26097,1709768704,-26109,113704960,-61648,254936775,113770495,4244,-1947306241,1066136670,-1309778293,-152841468,1963196993,52488451,518635563,507413251,141819906,33048263,-11081472,1342203064]},{"sector":11,"data":[16777114,805750528,-939524337,-15781370,-1811494913,-16777200,1586228854,-1958769676,78769758,1106699219,74712066,65781803,1343125153,1342177720,-1694730497,321,16547459,-806812811,-293698814,-385649664,1822491334,1846971163,504772891,-385649648,104399542,57937948,-1207783959,-1873772504,-63707122,-16604695,721635894,882528448,-1962934265,931918942,-1309784437,65065732,-58817552,-161975296,18575366,1822493044,1846971163,-1593316581,378215272,1413159786,993817864,930416196,-1961662815,957573142,729548884,1144587647,-14387706,-1961739722,1418397252,77064,1375787651,-26032,116785152,1947208466,-2145011706,-1577316631,378213222,1413026664,958952712,594871876,97408,-828760715,-16777215,-15505354,-1928108490,-1924075962,-1873746874,34334734,-2080465943,1946218110,108953866,57966886,-1207855383,-1706033151,65535,55195391,-1705983957,1859,-101399,721635894,-6664000,-1962934017,931918942,-1309784437,65065732,71601136,105120665,-1995942893,1451876422,460104162,460199563,459937337,108812671,459802169,116806003,1946229616,460104010,460199563,1963480121,105134398,748763509,773229331,-497665773,92024191,1944077881,-58817754,-385649408,1150025216,-754667262,266633448,278660611,242615867,2088962419,58589700,-151133207,1946419780,-2144880572,-401698736,2122577958,57934076,-16701975,-15582666,-14980554,-1709479882]},{"sector":12,"data":[1742,185730806,-385649392,113705226,66200,1350576056,-202895728,-25865,-202833920,321691904,321787531,2095207993,956661572,1031200838,-1961138015,958097942,1964731926,1812347142,-1592560613,378213164,372839214,192224110,460064313,-2019949195,-16777211,-15520202,-1928123338,-1924075962,-1511399866,269197566,1212736554,1944995385,108953863,209027368,1342177720,389530,-22484736,-370260225,1187511588,-385875730,195099932,1222912528,200165001,-385646656,512490764,529207358,78772363,346154963,239155472,-169278595,-296812548,-200727,-15505354,-1928108490,-1202655674,971574902,775356414,741801747,1038936851,-1300987614,1954620221,-2128331284,641586548,-385649279,675151221,-85726847,1343125153,1342177720,-1694730497,1580,205260487,1599995905,-1962742397,1297948645,503317194,1430622296,-1910575989,183272408,35274371,-16026368,1996426358,163027466,1996423168,209125128,-1710590209,221,-1980348791,-6621098,-1593835265,378215272,1446583146,962491660,1500842566,-1961136991,958098966,1299516502,1963607609,440304456,1098121218,-1961662815,957573142,897322070,1178142079,-1959889398,1451952710,77068,1375787651,142016336,-1878624513,-9181170,-1962260853,19729494,14320384,-6664110,-352321281,172395338,-1980348885,922745414,1996427834,-159973384,-11485141,-15520202,-1206703050,-1706033144,65535,-11485141,1183709814,-6663940]},{"sector":13,"data":[50331903,-1996265466,1586232390,302394118,-1677327600,-2096658160,-443874579,-900899553,50337032,50341377,50358784,-16622080,50368768,-16641536,50369024,-16186368,50369280,-16169984,50369536,-16408064,50369792,-16449280,50370048,-16126208,50370304,-16173568,50370560,-16257024,50339584,-16507392,50340352,-16355584,50346752,-16722432,50347264,-16167168,50348544,-16249344,50348800,-16232704,50350336,-16617216,50356736,-16130048,50357504,-16406016,50361344,-16220928,50361600,-16308224,30208,0,1167087646,518818645,1183570062,-268425978,1947205693,536886545,4002164,1024554032,292831232,1085805291,-1207047424,149618736,-352316488,1095683,-1962742397,1297948645,503317194,1430622296,-1910575989,520023000,1430622296,-1910575989,-1561558568,1996445184,-401698810,-2037776486,1048837982,1962935988,109748485,-1264516117,-2114942202,1073874558,113710709,66032,31735427,-385649664,113705196,66020,191905411,-385649664,1048772815,1946157530,12970243,-1705983957,416,1023821451,1601445917,322792575,1028551712,1316233243,-1096715029,-62486272,58048523,1342220265,16777114,-129595136,200955529,-385649214,-11403116,-2037516170,1343684450,-1694730497,65535,-26032,1996423168,-25860,1072365568,-352272223,12755388,-996034581,-1582109952,-1377107770,-352270175,13279656,557687787,1039234080]},{"sector":14,"data":[-663478238,1950351933,1074085265,-2037520524,-11468958,748291702,-2097151997,130622,1016729716,184549379,-16288320,-385917258,-1923742338,1358914182,-10569985,434638480,1589543680,108282111,191891143,-2090991615,-443874579,-900899553,1478361090,-1957345904,-661774612,-955847549,64582,-1705983957,777,805731971,2122516084,443879430,191905411,-385649664,113705159,68464,31080067,-385649664,2122514615,628359178,956738721,276040262,956739233,141822534,956738209,225774150,722106111,244338880,-351959832,176063275,-14846976,-6681994,184549631,-15632960,28838518,1905938432,-956301310,130118,-1705983957,634,-1962248449,1344145478,503477944,108461904,16777114,-96040704,687747,-1398725004,172374278,-1365176204,172374278,-1432287116,172374278,1996426869,112650,-401698736,451609877,16547459,1996426100,1354771210,16777114,112640,-26032,1183514624,49120250,1562371467,445005,1167087646,518818645,113760398,66032,1342177720,16777114,-868318464,259325952,1346373048,-1696067952,-871970819,-2097151744,-443874579,-884122337,1167087646,518818645,-327034738,-11140962,244319862,-1979898392,-2080415098,439358,-1969158795,-1593578746,-259324236,425601,-2095680192,122942,113708917,66016,1342177720,204698,1883144960,1282736139,31080067,725972224,-6664000,-1929379585,1358915718,-1710852353,65535]},{"sector":15,"data":[-10189175,33439363,-1710197760,927,125157387,-10307841,1443075560,-9927027,1656160080,-401698561,113770032,68464,49120094,1562371467,182861,1167087646,518818645,-326903666,205949706,-1946794359,1183386182,138841080,-1946532215,1183385158,-163148292,-2095990109,130622,-6680460,184549631,-1207470656,-397410256,922682162,364381836,1347590400,-15829249,-16001994,-1710501322,65535,-1962742397,1297948645,503319242,1430622296,-1910575989,317490136,-1995326815,1183578694,408844,272455284,1023898625,1551106321,-1070901525,35428944,1187446784,-1929378820,1183445062,-297366034,-94467248,-1070909441,702544,-26032,1996423168,-59310322,384845453,-26032,1191116800,-96041988,-58817790,-1194820090,602603521,687747,1183516276,112501518,334217259,17464963,1996486261,1354771214,16777114,-2082936064,-443874579,-900899553,1478361098,-1957345904,-661774612,-1961563005,100861510,1183390552,28353016,2130200121,-373282043,1183514872,1088475640,-1191557495,1861681161,-31178504,1106923147,67035520,-128545855,-489486415,1183433219,-399048708,1085820937,-6664192,184549631,-2096204352,1963001470,-2012821572,-352059391,-129594444,-523040847,-1578350967,608178170,-163149314,1090143883,1183448612,637172,458764023,-1979833280,922743366,1183519172,-196738068,166200835,1343341731,-1695385857,1331,461649663,65816203,-1559631866,-11527292]},{"sector":16,"data":[-6621578,-956301057,61510,-1995324255,837545542,958093473,461172806,-940679541,2147418695,-1578213749,243997564,-506389672,-1054088751,-1962653815,1204219486,1191182088,-297368592,-129594615,2096121401,458793927,-1543879029,-6680582,-1207959297,-310181887,535137026,46812509,-1873273344,-326412987,-2082959842,1048773868,1962941268,4372505,67156048,98343504,1419968512,1975520027,112645,-1070913045,-26032,3997696,-1206226172,-1202716670,-1706032128,65535,201082505,1356494016,16777114,-2084558080,-443874579,-884122337,1167087646,518818645,-326903666,-950642926,62534,425603,1187448693,-352319752,-129579259,1183514624,-230258184,958093473,1702752838,-150992456,100923502,1183388100,-263796754,1183580159,-163149320,1586180587,71797742,461112875,-62486200,972048011,343407686,972310155,209124422,-1979955573,1183576134,-96040458,-2081011969,-1593184698,1178147672,-1194885898,1861681161,-1947169798,-166607842,1963001408,458793243,2113029689,32153914,1963345465,-96040186,-1961987421,669776454,-150992456,-125044114,298065547,184709515,1443394806,16777114,-1949635840,1183445062,-230227980,1593790953,49120095,1562371467,182861,-2081649835,922682092,-6682998,-1996488703,1996488262,-26108,2122514432,225771774,109721343,1342177720,486810,-1976107264,1354771206,1342305464,1347469355,16777114,109617920,1924674283,726670859,1347440832]},{"sector":17,"data":[1342177720,16777114,1958742784,-29457637,343146497,504066744,-26032,1924661248,-1706025461,65535,33439363,-2084080384,1962999422,-1976107252,1354771206,498586,1575324416,503317186,1430622296,-1910575989,112107992,1946699321,-1449504746,184549383,-15960896,-16339402,-1181088138,-1593835513,1178142380,1343648776,16777114,1958742784,-1405681908,108461830,135066,111845632,1946699321,-1952821226,184549383,-15960896,-16340426,-476445066,-16777209,-16348618,161089142,-2097151993,-443874579,-900899553,50339076,50787841,50358272,50803969,50359552,50809345,50360576,50811905,50360832,17151489,50332928,17090305,50333184,17164545,50333440,-16604928,50370816,-16515584,50371072,-16334592,50371328,-16414976,50371584,17156609,50334976,-16490240,50371840,-16507392,50372096,50475265,50331904,16832769,50336256,16844289,50336512,16840705,50336768,50797825,50334208,-16442368,50342912,-16732160,50348288,50845441,50340352,50785025,50340608,50841345,50343680,-16712192,50354688,50418433,50380800,-16693504,50358272,50578433,50353920,50605569,23552,0,1167087646,518818645,-327034738,-1588198528,-2037837382,101055700,-628717312,-695810307,1183514876,408844,-1259797643,605441,-1729559691,17841409,289213300,-385649407,-1746337348,1354771201,16777114,-727807232]}]],[[{"sector":1,"data":[-729381892,1319174908,-1962440421,-2080582498,50123910,-1995463007,-727807225,254059004,-55048311,726670850,-1924116288,385668742,-561607344,-1202710787,-1706032896,278,-2037858262,-2037842212,-2037514531,-2037776930,-1634992676,1065418204,-2091944704,1789502,-236387467,608076544,57999375,-1929320471,1358880390,458104459,512440319,939462436,-16470552,62393974,230182912,-4698108,-2037559041,1343684318,92826,2110917376,11004163,-385875528,-55050077,-1957683710,519953542,-695825072,-1924131076,385669766,16824400,55417424,-2033844224,-2147418663,16571070,-2037554316,-1924072230,1358745734,1358710413,221338,-830043904,-863582212,-352321284,-561607366,-1224781570,-1224737316,736689360,242679556,1342178232,1342439864,-1924087765,385801862,37460560,-1224802304,-879035184,16777218,-208762,-1946366842,972869254,2096942214,-593589316,-595132419,4161789,166265717,737078271,1958742976,112645,-1070923029,-36004213,-1073018999,1996428661,112654,39492176,726663168,1671057600,-1207959550,-1477902335,176063235,-16157696,-1710111178,928,-1813397461,176063235,-1962511360,-1264382394,37651206,-395051006,-1710590209,65535,-2033721621,64722,1024083595,510918657,1962934845,53340419,1962935101,142508995,-1207601919,48955393,-2037792725,1996487890,243726,67745872,1354771280,-1046851504,-1996488702,1090312326,-1635046283,1065614810,-385649408]},{"sector":2,"data":[1996488565,112654,42834512,726663168,-1751494464,-1962934270,-939664738,-385875961,-1098645675,1946221778,-627143891,4162557,1122567028,242679807,1342177720,16777114,28856320,-6664192,-1962934017,-939664738,-385875705,-6619359,-16776961,62393974,179851264,-1224781820,-2037515048,1343684318,16777114,-561607424,2073710846,-1962934269,-578646544,-796489218,-16454660,-1946365810,-2130915170,1965096831,-561607182,-930706946,167688444,1292368,-26032,-1224802304,548994248,-6664192,-1996488449,201115782,-385649216,-1202716527,-1605367297,-467006978,-26032,-1073020928,-1635025548,130481352,50116608,-2037559266,1343684318,-53049715,-2037559274,1343683802,1342243000,16777114,-628716288,-2037559044,-1924072248,-1705968570,65535,-53174645,958090913,1342600199,250010,-561607424,-660975362,1073741827,-775804007,-897152520,-6663940,-1560280833,1967135566,1309067033,-16777189,-1709487050,65535,-16662551,-369309562,-2037514416,-1957626146,-14987746,-893976777,-25860,-1635057664,-1499333420,38222095,-1706031500,65535,-1694730497,65535,-1037330112,-2037778223,-1705968438,1075,1074767523,113707125,4006,1996464619,-1507947524,-13107441,-1694709066,1109,-53174645,957293729,108266567,85629520,-1224802304,1771764944,1073741828,-775804007,-897152520,-1952820996,-1560281085,1967132452,604423945,-385875953,-1224736939,512490704,939462436]},{"sector":3,"data":[-53823745,245402,13547520,-59310256,-58685811,-59310256,364954,-1706014720,1146,374864,93887056,-2037579776,1343683712,16777114,-1031370496,2113020,37557367,-385649408,414776633,-979742688,-385875964,-1224737491,-742851390,-1706025472,65535,-54229367,-54094199,360038923,1344280760,16777114,-1028194560,83794684,-18284544,1278672892,30972443,1996423168,-1028194546,-561607172,-1957685506,519884934,-996212912,1975520252,-1028194548,84581116,-672595968,-1028194308,-25860,-1635057664,-2038170412,-16581420,86678071,-1635057664,-2038170412,-16581420,87398967,-1635057664,939523284,225690,268879616,-352321534,-727807195,-729381892,126550780,-1961144669,-2080582498,50123910,-1499265141,-727807217,-1559786500,1996427044,1354771214,16777114,-61609728,49120094,1562371467,707149,-2081649835,-11140372,1996424822,108461832,378266,-1706014720,1463,-21434229,330846217,-90550272,-1207959550,1448086015,705298080,-879079196,-1962934267,74907632,74907478,95130,-6664192,1442840831,1343266488,16777114,1958742784,-1978799340,1357130244,16777114,1174702080,1962949760,-443851026,403096157,-452984064,-1996423419,436273920,117440772,1224737536,-1711210752,1828717312,-1660879099,-637533440,-1627324668,889193216,-1610547455,570426112,-1593770237,-1493171456,-1576993019,-1493171456,-1560215806,-721419520,-1543438587,1879048960,738262788]},{"sector":4,"data":[-1627389184,771817220,134218496,939589380,-1023343872,570426113,-1342110976,838861060,-1946090752,973078784,587203328,1526791940,-134151424,1191183105,117441280,1862336259,-2063531264,1593835780,-838794496,1610612996,-1174338816,1526727425,-402652416,-2113863933,-385809664,1694499584,0,0,1167087646,518818645,-326903666,1183536722,408844,-924253323,605440,-1394015371,1064192,803799925,17841410,289213300,-385649407,-1545011000,1354771200,218522,572427008,-1205892337,787939350,-259321286,-1995161461,-1072956858,115934069,-1948742910,-330921721,83642055,-329348352,1183385483,1975520234,32237827,-1980742003,1183706694,1996443886,1354771434,1342180024,247962,242679552,-1912834305,1343680582,163994,242679552,100419211,-1957691380,1200286814,1007100930,-1207601917,48955393,-1705983957,658,82593411,-335788289,176063388,-16157696,-1710111178,65535,401195051,176063234,-1962511360,-1264382394,37651206,-395051006,-1710590209,65535,1183571691,77066,1996495421,-1816132653,-1079509202,-1236890366,1354771280,1342184120,16777114,-431584000,-944486775,326726,268205699,-1763114114,-1371108096,242679632,-1694730497,65535,158711819,191891143,317259776,-1367440639,-2096728833,1962978942,-62456059,1183697643,-1337554506,-1951375733,-1304000249,477413387,1957578297,-1371129372,-1957482125,263619,-1270445232,-1705983189,65535]},{"sector":5,"data":[-1951375733,126463558,-1961986305,201718854,-1466281984,184549378,-1341492032,-2096567545,-352014266,738504883,-1962466300,1334489182,-119439358,1200144650,-1198331134,-11534302,722614838,1347440832,-18352,1347590480,726684313,-6664000,-1962934017,-1961942498,1488927,305802999,1082912907,-96040684,611696651,1342184120,16777114,-96040704,-1958382528,-1961942498,1488927,305802999,1183576203,339773946,1354122893,-369013,1751095,-26032,512425984,529207074,-150989128,-1961739730,105414896,-1643723006,-1694499070,65535,722368255,-6664000,-1207959297,-1880555519,-62470400,2122514436,-276885508,-15829249,-558302090,-1706025472,912,-1961986305,201718854,-1070903296,45718096,1191116800,-2888708,1996426870,242679562,-1710590209,65535,91602955,-352321096,1354771202,16777114,296020736,1761761281,-603923454,-603923456,-603923456,-603923456,-603923456,-603923456,-1694328064,-1694328062,-1694328062,-1694328062,-1694328062,-1694328062,-9705214,49120094,1562371467,707149,1167087646,518818645,-326903666,-1957275850,-1961942498,1488927,305802999,1099692171,-263812852,-1980610931,1183575622,408844,1206453109,605441,736691061,17841409,289213300,-385649407,719913295,1354771201,16777114,-260144384,-1207601920,99290932,-1947181429,-2081387769,1962870396,108330795,1357792909,16777114,-956790016,-16715197,62393974,1183666176,-1706027278]},{"sector":6,"data":[937,-1980610931,300674630,-1207011585,-1202716669,1344143583,252314,242679552,1342178232,16777114,-297366272,208994128,-1202667477,-1706033142,65535,-1207011585,-1924136956,1343681094,16777114,-230257408,-1913764215,-1957630394,1143669828,205794062,1354771280,1342180024,271258,242679552,1342178744,384976525,70556240,1183645696,-297367054,1357792909,721974527,179851456,1419399168,-16777212,112725622,1183666176,-1706027278,1125,-1980610931,1183706694,1149980910,172239618,1342719019,-1202667477,-1706033142,141,-1207011585,-1924136953,1343681094,40346,20310272,687747,922683764,-660991546,721420288,55830976,687747,1183516276,112501518,33701507,-1543168,-124122506,-352321536,172395486,1946157373,146698,401146741,-1915950333,-11477946,62393974,28856320,-4698112,28856447,179851264,-6664160,184549631,-955681344,749574,12970240,48905859,-1589873664,1183387654,1354771426,722417825,722470406,1342827014,333466,-465139456,-1995407711,-1070864826,255238480,276694571,167511595,-26032,1183383552,722398184,-398030400,-1981397367,1183441990,-532232222,2122514432,1954350304,-773816693,-767324697,242679632,98584203,-1706033148,65535,58048523,-1946190615,-405675906,1166802179,460242,2111980859,242679614,-1935617,1996481654,-394854426,16777114,242679552,98584203,-1706033148,1647,-1961986305]},{"sector":7,"data":[67493958,-2053484544,1342177286,428954,112640,-16634647,-2031361978,15761027,867711349,379211776,-1996488697,1967190086,33614083,1343173816,-1024373,3389495,37132880,512425984,529207074,-150989128,-1961739730,-263812104,-1962131063,931917918,-1982708083,1150020166,47197444,-1948367223,-1607663036,-632911611,-1947574645,-330921721,2145273403,-364477639,-362902782,1174472587,-565802004,2146190905,-364477659,-362902782,1183385483,-632931348,1182995583,1586168554,17271786,1183575110,-330941990,230179966,-6664160,-956301057,749574,242679552,736773771,3016133,67500241,-1248178176,-16777213,1183518326,96807914,-120520658,1342178309,16777114,-6664192,-385875713,1150025193,-599377658,1149972341,-767149812,1149970293,-767153404,1003767339,427101764,956843147,292935238,721568907,1177278022,172243928,-68615307,1751040,976682832,1354771218,-1202696112,-1722744833,1385779282,1354771280,124826,-262239488,1149974411,-599377658,-1947663499,572427008,1488911,305802999,-661975157,2139871491,1979648784,2144311,34183760,-125108224,-1710721728,65535,-1946256663,38258461,495648778,67527,211885451,236358407,105351431,-1962387575,931917918,-1982052725,1187448388,-1962934064,-1995994339,93048390,-1996487675,317442630,-1949671797,1191173190,-16283172,1183043654,1183516362,-800704050,113763964,-65100,-1962654581,1284100686,734079756]},{"sector":8,"data":[1149883462,38046478,-1982443893,-1054144436,-1982314965,113707588,-58490,152730,572427008,-1205892337,787939350,-125103558,33966464,-1207011585,-1706033151,607,1593691881,49120095,1562371467,420137549,1023410944,-1711210752,-872414464,-1660879097,-117439744,-1644101885,1996489472,-1627324668,-452984064,604045062,-2013265152,-1526661371,2030043904,-1509884157,536871680,637599495,-1392508160,-1493106937,1073742592,-1476329727,2030043904,-1459552507,1275069184,-1442775291,-117439744,-1425998076,-1946156288,738262785,-889191680,-1409220860,1392509696,771817222,-1660878080,369099525,-771751168,939589381,486540032,956366593,-1761541376,1191183108,-1761541376,1526727429,167838464,1543504644,-1073675520,1627390720,-1560214784,1644167937,-1224736000,-2113863931,0,0,1167087646,518818645,-326903666,1183667822,-129594916,-1705983957,65535,58048523,-1929298967,-1705994682,65535,-1961136991,-1994691050,1451874374,1745783770,1780386587,-229734117,737435273,-1982653503,1451883078,321692156,321787531,2094683705,956661579,1148639302,1342177976,305805055,-755969,1996485238,-92864516,1358954424,-1957670247,1452014150,142844,1375787651,1354771280,52634,976682752,775356178,741801747,-26093,703266816,1342177976,305805055,-755969,1996485238,-92864516,1358954424,-11513191,1996487798,1354771450,16777114,-230257920,-1544268149,378084200,1183521642]},{"sector":9,"data":[-631862312,-1994691421,-954503658,37446,43155075,1586191231,-1948003950,9111158,1089881737,1183529076,1958742930,81164,37564788,-348949504,-1807300859,1183645697,1183666422,45633697,-6664192,-1979711233,1183355974,-1605988960,-26032,1191116800,-944903278,234566,1187501291,-352320876,-1773761075,112720,-26032,-2090991616,-443874579,-900899553,1478361090,-1957345904,-661774612,-955978621,167771206,1358710413,-16222465,179832438,-6664192,-1577058049,-310179330,535137026,80366941,-1873273344,-326412987,-2082959842,-1957291284,104664134,-385649408,154992785,1031304192,57999376,1023493353,175374608,1963004221,9758979,-1070894869,-26032,1183645696,-6663960,-956301057,58950,-150993992,-259266962,2088826115,544538864,-1149697,-1878860746,-10033138,-1961986305,50718278,-4698112,-1706025463,65535,-2082060545,2080630398,242679751,1342178232,16777114,112640,-2097093655,1946159742,-969474295,-26095,-1070923776,-2097098775,1946159742,239504134,-2096712541,131646,1996482676,-26102,-555024384,1024083595,175374337,1962934845,9693443,-1028076309,1996443663,243726,1354771280,-1995488607,-1202652602,-1202716654,-1706024949,724,141934603,191891143,-1981087744,264388227,-955812353,64582,-1029633813,-1982269681,-994509754,1996443663,309262,-59310256,-1191545089,-1202716654,-1706024949,758,-1066090485,1343211192]},{"sector":10,"data":[-1207011585,726663173,1996443840,1227002,537638992,-26032,-1073020928,-1028088204,244338703,-198168,28839542,-6664192,-385875713,-2090926313,-443874579,-900899553,50335754,-16656896,50371072,-16576768,50371840,-16676096,50372096,-16630272,50372352,-16740096,50340864,-16635648,50373888,-16735744,50341632,-16771072,50341888,-16700672,50342912,-16608256,50375936,-16654592,50376192,-16688640,50376448,-16696832,50376704,-16766976,50376960,50486785,50349824,50467841,23552,0,0,0,1167087646,518818645,-326903666,-129594104,-15615325,-1207530442,1385758725,-1976107184,943128326,909573907,-26093,-12779520,1025078527,494206977,16777114,976682752,112658,-26032,166395904,1346372280,16777114,49120000,1562371467,1478413133,-1957345904,-661774612,1444080771,-1995326815,1077999174,-1577302391,67441082,-96040704,1024214667,57999366,1023475433,57999369,1023468265,192151824,1963004221,17230083,-16719383,179834486,-491237376,-1706025472,65535,34225795,-1959693312,130545246,1996423175,571406,-1707671728,112653,15112784,1996423168,636942,2050424656,112667,-26032,132841472,-940155253,-956299769,522310,48905859,-14453760,-1207523274,-1202716664,-1924136958,1343682630,1347469355,16777114,1958742784,112645,-1070923029,-1980080501,1958742791,242679575]},{"sector":11,"data":[1342180280,-1577296245,126419446,23501392,367722496,-1207011585,-1706033141,65535,1354771280,16777114,242679552,-631157,112695,46176848,-1070923776,-26032,-2065104896,176063232,-16157696,-1710111178,65535,-1544962005,176063233,-1962511360,-1264382394,37651206,-395051006,-1710590209,65535,1183571691,77066,1996491325,-1816132653,329776942,-161576189,1963409283,112645,-1070923029,200558217,-1923844928,-11472826,146280054,28856320,-4698112,28856447,179851264,463097888,184549378,-955484736,749574,112640,-1929302551,-11473338,163057270,28856320,-4698112,28856447,179851264,-6664160,184549631,-1915718464,-11472314,179834486,28856320,-4698112,28856447,179851264,-1070903264,-6664112,184549631,-1951894336,1065613918,-1962445824,126614622,-1070923029,-1962805597,178517062,1958742786,-263812340,-1962042717,2057563718,-230257893,-16642909,1996426870,-26102,1894318080,142508543,57934592,-69143,246941302,-1070903296,-1706012592,65535,58049035,-1946202391,931919454,1963458179,-12457725,1443788543,-1705983957,725,-1961986305,129562206,1342671104,1342177720,190618,-14817024,-1961986305,939521630,-1705983957,65535,-1961986305,1183577694,-2692342,1996426870,-60912886,1962950531,112645,-1070923029,-1979949429,-1178539257,-2080212223,-2080275455,-603792383,-1996322558,-150895614,-20059902,49120094]},{"sector":12,"data":[1562371467,707149,1167087646,518818645,-326903666,2122536482,376700940,-1962476383,-1996030442,1451882054,117481976,117577355,77665515,102140679,-163149561,-1577560439,378210056,1183385354,-61437446,469124651,-770967466,32047997,1023966978,58130434,-956172311,62022,15222471,-364460288,922681344,-6680006,-1996488449,1451879494,976682990,-126419182,-1695123713,65535,-1593155957,126422456,1979711293,173968135,67527,305805055,-493825,-6621578,-167771905,134943238,1586169205,-1593311478,103484862,-11530234,-15697866,-1710626250,1054,-2081143159,1946160254,230990103,276694571,-2009661616,-63504624,89561609,48955392,1183432747,375024,-1310308727,1356911363,16777114,140413696,1967130505,140413708,1991,1441382443,-93420799,-60914942,-96040192,972838539,58652758,2080424937,-163170040,-1175911566,976682752,-126419182,-624897,1996483190,-327745554,1342177720,16777114,-264338688,-1200291839,971392651,494727750,-16228725,-431586505,-431584507,-523041871,1354771280,16777114,1958742784,140413843,931864459,-899445,78770758,-268181293,-1946794357,76150870,-1962781559,1149889094,-196703484,57148931,-1962523511,100922438,1149829996,-263812342,-1962392439,100921414,1149830004,1681818380,108920835,-1980610933,1487005766,1511426819,-163149565,-1577560439,1183384412,57975274,-370129407,2122579759,1416953868,15236739]},{"sector":13,"data":[1586187902,-1960867064,-398030025,-523041615,50335789,231121392,276694571,-2009661616,-63504624,-26103,1143668736,-498693876,-1981266293,317447750,31606411,1183516740,205783522,-2082582785,2122518766,-394329890,-1962516853,126478406,1586173419,-16267510,140413951,1991,-955883893,-1207959545,-2090991615,-443874579,-900899553,50337800,50503681,50360064,-16683520,50371072,-16612864,50371840,-16678912,50372352,-16523520,50339584,-16651520,50375680,-16756480,50343424,-16532480,50377216,-16628992,50377472,-16759296,50377728,-16762624,50377984,-16766464,50378240,33625345,50341376,50418945,50340352,-16537856,50350080,-16481024,50357504,50438145,50349824,-16515072,50359296,50416641,50354944,50376705,50355200,50385409,50355712,50413057,50356480,-16501504,50364928,-16470784,33536,1167087646,518818645,-326903666,-230257394,-15615325,-1207530442,1385758727,-1976107184,-1640562938,-1674117359,-26095,-12779520,-385649153,20775066,-385649664,1587151003,-2097151998,127038,-1930886284,-130120960,980680705,1343973560,1358186125,1342180024,16777114,2799616,976682832,1354771218,976682832,-26094,1347551232,1358954424,-1722789223,-1070903214,-26032,922681344,-1070919110,-26032,1048772608,1946157560,238977848,829685762,16777114,33200640,1996423168,-193527818,-362753,379254902]},{"sector":14,"data":[-956301310,16915462,-26112,166395904,1346372280,153498,49120000,1562371467,1478413133,-1957345904,-661774612,-1593512829,1183388090,205949948,1946158653,605510,272445044,1023898625,1416888593,-1070910997,-26032,1996423168,243726,-60912816,-1996359519,-6664185,-1207959297,2095775745,687747,922683764,1301942726,721420291,-2090210368,1946159742,239504134,-2096712541,131646,1996482932,64330250,-538247168,1024083595,208928769,1946157629,212246,-873783692,-1207011585,-1706033149,65535,-16648029,1996426870,-26102,-1679097856,-1207011585,-1957691389,1065614430,-1207601920,48955393,1586217003,-8918532,-1962742397,1297948645,503319242,1430622296,-1910575989,149717976,297443670,-506231,-1961739722,73370584,-472709967,881586315,9122955,-1996337013,1451883078,-1202695428,1385758721,1347590480,227994,-26112,1996423168,-92864516,-231681,96008822,697978880,1375731715,53516880,1996423168,-92864516,211866,-264338688,141819905,34473671,1223360513,109852415,-1728050760,922701906,922683018,922685630,-6680388,1073742079,330828661,-6664160,-352321281,-25905,-6684672,-2097151745,127038,1586216565,176129016,-1207601920,48955393,-2090942421,-443874579,-884122337,1167087646,518818645,-326903666,-1957275894,-1961772490,104664134,-385649408,154992920,-385649408,272433297,-385649408,272433448,1026716673,57934097]},{"sector":15,"data":[-1962862871,20777542,-385649408,37552405,-385649408,87884040,1023898624,410255366,2088984043,192217348,197018,112640,-16674071,317391948,956449931,125109316,16777114,-13047040,1552614468,-754667260,-1958966301,-1962833091,1183384145,-61437446,1347571794,1342178744,16777114,-1706012160,952,-231681,-6620554,-2097151745,1962936958,9562371,298202879,16777114,8775936,-1705983957,65535,305805055,-1325245301,-1948003580,-12743876,838795889,-1728052808,1385779282,-26032,1552613376,-1205892346,1828126726,-1946645752,1452014150,67068,-1996434813,1367934529,73173768,-472709967,1032535179,1368064395,-96040702,1392268937,-1706012080,65535,2122547691,108265482,-1559345525,1048774324,1946157570,175570696,16777114,-373282048,1153892519,-16776950,-1207530954,-1706033151,1027,722368255,1234849984,-16777210,721848886,1050300608,-956301306,439302,-969474304,99850769,2088960000,-2123038710,956449931,58000452,-956336407,-15927738,-1961739722,78709852,1015800787,25902475,-2097000053,1367539969,1183383554,-61437446,-6664110,-16776961,-15582666,1996487798,-163148294,112720,1354771280,-1961129823,958106134,57998422,973004265,57997894,-1191258647,-773256446,-2090901762,-443874579,-900899553,1478361098,-1957345904,-661774612,-1593512829,1183388090,976683004,105286418,84432523,-763166719,-1202695680,1385758721,1347590480]},{"sector":16,"data":[361626,11442688,1996423168,108461832,-1962522997,17107030,13796096,-1785049006,-16777211,1996425334,35756550,1048772608,1946157552,235325193,-385875710,922681513,179832460,1347590400,109721343,324810495,324679423,150426,192233472,1344279480,54682,-1697715456,611,16282,-264338688,-1116405759,-2080612725,1962936959,209683288,-14584832,-15582666,1996425334,112646,-1202695527,726695935,1347440832,-26032,837484544,305805055,-1962522997,17107030,13796096,28856402,1347590400,-1706012007,501,-16222465,1996424822,108461832,49050,-60912896,688003,28837237,721611520,49120192,1562371467,313933,1167087646,518818645,-326903666,297443588,-1946401143,104664134,1026388992,343146505,1946161213,17841492,-2014772363,17906944,267072372,687747,922683764,1687818694,721420294,8776128,687747,1183516276,112501518,33701507,-1543168,1520044662,-352321535,172395486,1946157373,146764,71108468,-347311104,-60912694,17450951,-1976107264,112646,106273360,1996423168,1354771214,16777114,-1976107264,1354771206,16777114,-1274624256,-16777210,-1710111178,315,-352321096,-60912876,804807,-1950422272,1204288606,-352321268,49120180,1562371467,470469197,251659008,-1845428478,-369097984,-1744765180,301990656,-1711210751,-1979710720,-1660879103,-1056963840,503381764,301990656,-1627324668,1325400832]},{"sector":17,"data":[520158980,671089408,-1560215803,-1979710720,604045056,-905968896,637599488,1627390720,738262784,553648896,771817221,-1778384128,-1275003136,754975488,-1258225915,704643840,-1241448704,-385875200,-1224671486,-1459617024,-1207894272,-973077760,1107361540,-335478016,570426115,1979712256,1208024832,1644167936,1275133701,-553647360,1644232452,318833408,1191183110,1476395776,1761672963,352387840,1459618565,-150928640,1476395779,654377728,1627390721,2080441088,1644167937,0,1167087646,518818645,1996478606,142016266,721843967,-4697920,28856447,179851264,-1070903264,244338768,-2097092120,-443874579,-900899553,1478361094,-1957345904,-661774612,-15567105,1996427382,209125134,-16091393,1996425334,1354771206,-401698736,-310181706,535137026,248139101,-1873273344,-326412987,-2585058,1996425846,108461832,-1202667477,-1202683905,-1202716671,-1202708468,-11534335,-1878860746,8185870,-1962742397,1297948645,503318218,1430622296,-1910575989,175570904,-16222465,-1070922122,2147465296,1226832,537704528,112720,-600375472,-401698814,-310181822,535137026,113921373,-1873273344,-326412987,-2585058,1996427894,242679568,-15960321,1996425846,108461832,1342177720,47986431,199757456,49120000,1562371467,969293,1167087646,518818645,-326903666,1187468854,-956301102,120390,-15436033,1183650422,-1202710821,-1706033121,65535,-153467256,1946291270,1975519761,375294733]}],[{"sector":1,"data":[-63545,-385875272,1183646132,-733574693,34359030,1190540148,762581004,30426823,-732001536,1946173312,-733544691,1948270464,-800667664,2122514432,225771984,-954835317,-1191182585,1978204176,-616133375,-1965799799,-466953658,1183576203,-1983511596,2122579014,309592072,-1927907585,1448139590,-1710852353,65535,1996428267,-733573866,-59310256,1355957901,-1914171760,-666466047,556675,-1645673612,205977088,-385649400,45613204,375294720,126431223,-150994248,1183387758,178192,-1995542793,2122518086,1920270552,972834443,1786041414,-2133565813,1651846719,-1949022465,1183437894,-96039430,-59310256,-437776752,1958742784,-666450169,1122697217,972834443,745854022,-2133565813,611661119,-1915468033,-11479994,244382838,184597480,-1961790272,134157918,30951111,-700004608,250281992,970213003,108460614,-1980086645,2122568774,443810008,13794947,1586173045,959941398,176099446,2081322553,-700019963,2122542315,74711256,149667883,735331979,2426309,-942913911,2147469894,556675,196609396,-1207702752,1183391752,-662797362,-1962511360,1183386182,343343054,-1206749441,726664193,1451970752,-867791926,-6664110,-16776961,1996428406,-26094,-1706033152,65535,-1697745153,65535,-2090942421,-443874579,-900899553,1478361106,-1957345904,-661774612,-1962480509,126552158,-1946401143,1178142278,-1960741892,126549086,1023035016,1006924848,-16419552,-471073722,-1962385781]},{"sector":2,"data":[126483526,65781803,-2097151560,-443874579,-900899553,1478361092,-1957345904,-661774612,-1961956221,126552670,-940161399,62022,16402119,-196688128,1187446784,-1962934020,130483806,-1830223872,106859264,1946173315,9496835,956843659,57865798,-1962899991,126547550,1183441962,2113016,1191118197,-1956058122,-1072956346,20778100,1025274880,829685762,2122536427,141897208,32655047,-163119360,33310407,-12522752,161151094,184549380,-955812672,195654,1187458539,-352321036,-126419162,16777114,1958742784,702701,66744055,808319046,-96040704,-1703034869,-955883893,-2097151737,1962996862,-10098429,-1962254709,126481990,15892099,1183516532,-338102278,-96040189,-1995678069,-193035513,-1207601920,48955393,-310132693,535137026,147475805,-1873273344,-326412987,-2585058,-1710838730,1169,208977931,111949567,-1710852353,1185,112080639,305818,1958742784,-1372127476,108461830,309914,-1439236352,-26106,-1073020928,922684532,1996424874,-26106,-310181888,535137026,46812509,-1873273344,-326412987,-2082959842,1187448556,-956301060,2147482182,-16222465,28837494,-1070903292,2147465808,-275099566,-2097151998,-443874579,-900899553,1478361092,-1957345904,-661774612,1024214667,829685766,1946159421,17841433,289212276,-348163071,1354771228,1021841040,112895,2122536171,158597130,298202879,388762,-339727616,176063297,-1962511360,-1264382394]},{"sector":3,"data":[37651206,-378273790,-1710590209,65535,1183571947,81162,37602162,1024095744,-1183711226,1996490557,242679732,-1878362369,4122638,-310138901,535137026,181030237,-1873273344,-326412987,-1697083874,65535,-15698177,1996426870,175570700,-16222465,-6683018,-2097151745,-443874579,-900899553,1478361100,-1957345904,-661774612,-15799165,1996425334,-26106,28835840,244338688,-939620632,439302,1278672640,-26085,-310181888,535137026,80366941,196622,16713021,196767,16713116,196771,16712456,16973870,197376,196630,16712128,196793,16712687,16974010,197768,16973858,197752,16973871,197980,16973895,198067,16973911,198102,16973912,197370,16973915,196924,16973917,197875,101,1167087646,518818645,-326903666,-1202301098,1861681208,-2114417910,-1995437881,1166791294,-632911566,-1995815541,1166795334,-733574906,14698183,-398014976,2118025984,92012547,-352321096,-1983894782,1187511366,-1962934042,931870301,-1324857717,65065732,459710960,1963476537,-1878604020,-956301310,-16608762,57188863,-1324358528,-1948200188,-511638964,-1056243697,-1593686903,1149829996,55746826,55842443,-1996077943,1183385684,-564753956,-1962714975,-1996269034,1451882566,-599380998,-1593555831,1149830004,-330921716,-2013047136,1183514948,-94991368,1977505337,-599377655,-5241739,1621099499,-2147186685,-1962868148]},{"sector":4,"data":[-81526204,57675403,123265,-506338863,1149878539,-1946344446,-2130484722,-788528671,-1983837215,2122515012,141885448,-1949147509,65736263,-1979825013,1174656582,239372780,56376963,-1207602176,48955393,19251243,-834238208,604128395,-833188873,-489487439,1149878795,-830569726,-2096598016,-2097022906,-2097087914,-16554434,1996431221,1354771418,-2722049,1996477558,-1707671572,-1741226234,37526022,703135744,-129594617,972707467,141942358,1977370169,9103619,185730806,-385649649,512426112,529207074,-150989128,-1962711506,276333552,-1586793472,104405878,645202790,-1962213727,957022230,444594774,1178142076,-1592559624,378211934,1446579808,2082373626,-129615611,922687351,1183515494,-94991368,-2097151699,1347551450,16777114,241082624,241178251,2145277497,956660761,309845062,57687680,-2096663552,218686,1187382389,1048624104,1962935152,108954374,-14650368,-1070867850,-696844464,278673151,-1280257,-16344522,-1710843850,763,-1710877463,65535,111296131,-1709607680,65535,735737599,1996443840,-733574186,278660651,-16848560,956736673,142595142,956737185,1518267462,111427203,-2096663296,435774,922686324,922683042,-828764776,1342177282,16777114,-733574400,1342612643,-1544796533,-1202714970,1347420161,1347469355,16777114,-834238208,175489035,-1499217877,111452934,922716651,1996424866,-25906,922681344,922683042,-1070919524,-730398896]},{"sector":5,"data":[971798271,1946590214,110665993,110761611,1656227563,16759296,-6664110,-2147483393,221758,1587610996,-1593578749,1183384420,-65106958,-1995994353,1755437126,-498717949,278660611,-196703936,16547459,-1070922636,1923154923,-163149565,15353543,-230257920,2095728185,40691971,-1965531509,-467007417,-1983101303,1200286278,-364510967,972179083,58649158,-1947580791,1177283142,-901346868,1187510411,-1962934032,-422458250,58902145,28116203,-947130298,2143292239,-260144139,-385646848,1183515019,92276172,-3914103,-16554442,-1070868362,-26032,1586167808,71825368,393543424,-1325119605,1021891336,-1593478272,166398438,-150346079,721611736,-330396736,237750315,237699962,1317604954,-1573453842,-159973626,1342177720,279962,-1035548928,501809152,1879504641,1979645955,8579331,63719051,145869382,244048083,-511704222,1992375040,56860781,-259267542,63719051,-125058490,1517813307,-1983756661,-29639098,922689909,1191118498,-159973386,1342177720,317594,-901346560,-1983756757,1183563846,-1609831478,-467008669,-1983101397,1183432774,-1065448510,15746759,-864646400,-776047101,-2100919834,1338477315,259964939,-263847507,1183577067,-1069119030,-2084419959,2113978494,-1000436898,-467007606,1962934589,8710403,1946158397,605567,1586185589,-1948003892,17007239,2122576966,561250556,956530337,427609158,111294207,-1996262751,-1202653626,-1706033151,65535,16533191]},{"sector":6,"data":[-866219264,-2020875311,1177092994,-1001979920,-4174081,-16342474,1996485750,-1002009618,1996443678,93100736,1183514624,-196738576,29378187,1183564870,-1035585078,-655817859,-666467330,-32118518,-136814965,1073742407,1586217332,20938948,116795509,1963003913,151451143,443810320,1342832568,242759423,-1202667477,-1202716664,-1706032897,65535,-4714005,146296841,-4698112,-6664192,-1577058049,922683902,1996424866,-294191116,503971768,167682128,-1705974742,65535,-775135605,-2105046045,-263837437,-3383669,-472789946,58886027,-768511,1325384774,-19142208,263063239,1252065280,172374275,-907476108,-765555967,704989066,-1341768732,-385649397,1048773048,1946157894,28240131,-1961136991,958098966,58646102,2080481257,-599377656,-1779891338,459841793,459937419,2113558073,25618691,1178142847,-385649672,1755382140,1779862299,-564774629,92219004,1927038521,460103967,460199563,2147112505,956660755,209188934,-1996265311,1822536774,9890051,-1961138015,958097942,679475798,1178142076,-1591642120,378215276,1446583150,-385649414,1178140968,-385649416,1048772896,1962934810,18278659,-2197761,922737782,922688362,-6677656,-1996488449,1451863622,-92864592,-493825,-14979530,-1709478858,65535,-1985329527,1183558742,-599381074,-1438217392,1353598507,1353991821,-286781808,-263812863,65173131,-1962709962,-133974914,75431483,49006219,1183434635,-1267299406]},{"sector":7,"data":[199390763,-1962639626,721611718,-1677327424,-465139440,968115851,897495622,971130507,92189766,-340506997,-498693373,2125612601,-498693351,2125743673,-1270445307,1183515627,-1949791262,-1054100922,-1070923029,-337623415,460104029,460199563,459937337,104419445,1249188712,1979340345,-129615611,28837236,721611520,436614080,-952929278,964614,58237184,-1961748829,1174656582,196912108,-1545320821,113707954,67254,971130507,92058694,-352321096,-1983894782,922740294,-1070922078,922701904,1996427420,-1677313556,-1593215994,378209944,116065946,-1174379848,1347551487,94874,-528579840,-15305472,-1070867850,-696844464,-2853121,922741878,-347076958,-629735577,-11485141,1996478070,-327745564,111294207,548950096,13416960,429543506,-16777208,1996479094,-696844316,-2066689,922741878,1996424866,1354771428,-1174402888,1347551283,542874,-461993216,-2066941,-11085194,1183569526,-465163308,1356875307,-1280257,1443275318,-1202667477,-860225504,-1706012160,65535,15105667,244319604,-2146657304,1946216574,1714880304,1354771203,61512272,1996423168,1354771418,64374411,103541830,103482234,-1924133286,1343678534,1342177720,329370,1883144192,242483203,-16091393,1996425334,-26106,1599995904,-1962742397,1297948645,503318218,1430622296,-1910575989,183272408,-2101455273,57188611,-1577302391,1177224030,-163149558,956843659,108918342,-1980348789,-13957050]},{"sector":8,"data":[28116459,961018950,-159446402,-1962516853,126483526,16533191,-335598848,1174514949,2117683196,-1946779896,1600060486,-1962742397,1297948645,503318218,1430622296,-1910575989,82609112,55066243,723877376,1996443840,-401698810,116785189,1963003912,-264338669,208994305,268961526,-1710918528,65535,-1962742397,1297948645,503317194,1430622296,-1910575989,787252184,951604823,141489920,-964562805,1149898760,-1981535741,1150016582,-431584970,-1995553653,83294278,-385649407,2122515393,208928774,887623312,1958742789,61860099,57018055,-6619137,-1962934017,1183387716,38050536,1048772608,1962935970,38836744,-1964441600,88377859,1183441962,1711720434,-150995197,460587524,425603,244321396,184871656,-385649472,-1070922907,-6664112,-956301057,17225734,-498678016,1962868736,410320666,-15305473,-2019945356,-1996488698,1451881542,474254326,-1994500981,1451875910,138709984,737035913,-96040512,-1946401143,1178143812,-2096726792,1962998910,71600682,1183441962,-62485544,2144880185,-428409024,-1311226229,98620163,726663208,-6664000,184549631,-1977453120,1149828166,-26109,113704960,4014,-1577180032,1149834026,306497296,-957808640,71598082,-599356667,2096776761,23128323,425603,2122519156,208994530,619187856,1958742788,22931715,-1947836789,-96040129,-523041615,1166800899,-700020466,16926198,1183535732,-96060932,1183533692,-162100236,2080920889]},{"sector":9,"data":[956661567,946996805,735463051,1183386693,-129614888,1183525500,-700040728,1149962364,-666486510,1183521406,-162100236,1963480377,105199893,1166676085,1004808705,108260934,-369473793,1183580011,-162100236,1946703161,13166851,1946567993,12642563,704726410,-297387036,-1276574860,205818624,2127971897,-129594613,2128102969,10545411,-1980217717,2122568774,561250530,-1962379521,1346960454,1183432747,244338914,-1946909208,1066133086,-1308998005,65065732,71666680,105186201,-1995942637,1451881542,38139638,-1979157496,-467009211,721611584,-297367104,17581451,1183578182,-96060932,1183516789,-666486316,1996435572,-92864760,737953419,-11470266,244372598,-2097051160,1028158,1586170740,-1960866842,334101062,-62485759,33179179,1183571014,1183400188,22145530,425603,2122530676,963969250,-991424880,1958742786,-599356624,2096776761,20441347,-1947836789,-96040129,-523041615,1166800899,205859598,2096645691,18606339,-33397376,-335919361,-227082288,-624897,1996485750,-529072146,-1193380097,-1706033144,65535,32521859,-1582402304,1183384412,56140270,56235659,-1980479863,1956771414,-129629949,-1980217717,1586171972,-1958769690,78772806,-133963565,970737291,58522182,-1962899735,1452012614,139803126,1161395061,-1971948282,-467009211,1978549819,-96040084,-1949153655,1178205254,-1961265670,1160449605,-129615092,1996426879,-92864760,-1191557377,149618689,-16222465]},{"sector":10,"data":[-1070859658,-126419120,1944587920,-1338080512,762576911,-1947836789,-767128801,-523041615,1736497155,2122579458,108265698,-1995553653,1149964356,-398030576,-1995553653,-689309626,142016508,-2130938113,225342,1048777844,1946157916,205818637,2113422905,112645,-1070923029,1357006473,-1276637552,-62455822,1593630953,49120095,1562371467,313933,1167087646,518818645,-326903666,-1202301152,1861681208,-2114942196,-1961883450,126563932,-939768183,1028102,54823424,1177281578,-230258422,704857226,138806244,704924810,1942043629,138840584,-352107518,71600643,704857224,138816484,990529067,91681350,-336443765,54823435,1177281578,172370696,74694667,552321067,704857226,138816484,990529067,91681350,-336443765,54823435,1177281578,172370696,-1947056503,78711422,2114185171,-260142596,722355595,1183386693,105286638,-1980873173,2122578502,1753088242,51005067,1183385670,205818856,-1947580791,-522983354,-1979955709,2122575942,259260424,1183535191,-754732558,-6663968,-1962934017,1183443014,54823670,1178199082,-2094435338,2097216126,-262239471,971654795,108924487,-33396864,1586170347,-96039952,-15841535,1183053382,-840232720,16416387,1183658868,726669024,1183535296,-297387770,1183516029,-1962677266,-11532730,1962870388,-26100,1183645696,-1070903072,-92864688,16777114,-96040192,-310157474,535137026,147475805,-1873273344,-326412987,-338129378,192067708]},{"sector":11,"data":[-26032,-1073020928,1048646005,16845684,1923168117,872823051,-1204914928,1344146290,1347469355,257268304,1923153920,872823051,-1203342320,1344146290,16777114,192067584,1184518174,-352321521,192192816,1946227517,18365721,4002932,-1207602174,854261761,504066744,-26032,1924661248,726670859,1347440832,16777114,192067584,-1070903266,1347440720,16777114,1958742784,-9574141,-310132693,535137026,516640093,1430622296,-1910575989,283935704,1245118294,1354771203,-957870448,142016505,-1710852353,65535,55451275,1946224630,-264338681,-646709247,55451275,-1959370869,-62486265,16008903,1310624512,55020035,1183441962,-196703238,-96060608,1183544701,-96074764,1183447249,-754667022,-62520352,-1947187575,105352152,-1995942005,1451882054,139869176,92039039,1996899899,105286496,956847755,242612310,1979074105,-262239479,98176,1183532917,-196703758,-1946794357,1446639702,966685960,-1720383930,-1947181429,60359751,1460864583,139868936,1178273141,-1954384890,1183517278,-1962440204,78771318,1586226899,104893436,-351776629,-230257914,1593794537,-1962742397,1297948645,503318218,1430622296,-1910575989,753697752,138840918,956978827,175443542,1963738681,112645,-1070923029,-2081405303,214590,1625883508,138840835,956978827,58592854,2080592617,205928712,1223230326,325492995,325588619,2097829433,54126851,1178142847,-385649912,1048773423,1946158784]},{"sector":12,"data":[52816131,325336707,-2093911040,124990,922692212,1996427834,209125134,16777114,302446080,343150603,-1961991519,957244438,141888086,1963476537,49146115,55451275,721831819,-1995400186,1200353862,-196703990,16139975,1310624512,55020035,1178330154,-385648650,1602945731,-1962439882,78771798,-1039932717,-1946401143,38270680,-16419583,-773065146,-1946394997,1468728903,-398030584,-1947576695,1451952198,-363448054,-1997995138,956857346,58124358,-1593671959,378213164,1446581038,-385646870,142344815,1994933817,40233219,-1962391925,1446578774,958100970,376825926,-1962129781,1446579798,-385649654,1178141255,-385649656,1586168383,71797756,-398064743,-1981131245,1451879494,-398029842,971658891,1518276182,1178142076,-1957464308,1452010566,173423086,92227708,1913144889,-60912831,-1325250677,-2132225276,1183387620,38270714,-1960610812,1452010566,173423086,1178146933,957576456,242608726,1978156601,-96040183,-369604983,1586168018,172461052,2122576619,578027760,-1947449717,1446637142,957838606,309660742,35274371,-1962183680,1200356446,-96040694,1183566571,-296317972,2114868793,-18355965,1178142844,-385650164,1996488413,-394854422,-15829249,261753974,-1996488694,1451876934,-294191132,-1280257,1996425846,111188488,1183383552,-531199522,305805055,-1411329,1586227318,21465852,-11475926,-15520202,-1206703050,-1706033144,3160,736249483,-1957631930,1177280070]},{"sector":13,"data":[1183666402,244338938,-1980381976,1183573574,-431619078,-1946663287,-1962717666,126563935,-1309256053,65196804,-62486078,-1946394997,1979910775,-126469644,1183516029,-1962742792,-129594938,972703371,1434384454,972310155,58718278,-1946277655,1200356446,205990670,-1948760439,1982593654,2130054132,-339309820,62925570,-1995400186,1586222662,239569916,-1948498295,1177286726,-1677327372,-632911600,272250623,383141517,-26032,-555155456,-260144131,-385649408,1183579605,-129615366,-890698892,-60912643,-1995552885,922735686,1996427834,-394854422,704726922,922702052,922686254,146281260,-795193344,-1962934254,104007238,1098124984,246955651,-1959430912,1177287238,-1677327372,196256528,735331979,-1560054266,915082172,908788596,909706102,92078968,-352094047,-1547269374,113709590,67254,-370667888,-310157824,535137026,181030237,-1873273344,-326412987,-1193767394,1861681208,268961030,1354771280,321533695,199757456,49120000,1562371467,182861,1167087646,518818645,2122569870,997982214,956712587,863242310,-2146804085,1586168079,138840842,2098218809,273124101,1183515627,173968136,-1961867383,1183517278,306657542,1200292732,173968146,-2095954039,-443874579,-900899553,1478361094,-1957345904,-661774612,721742979,244338880,-939562264,-16554490,49120255,1562371467,1478413133,-1957345904,-661774612,54935171,-14781184,-14980554,-14981066,-14979530,723217462,244338880]},{"sector":14,"data":[-939813656,16991750,49120000,1562371467,1478413133,-1957345904,-661774612,-1203862698,309657614,196884107,269891115,303445561,914949246,922685974,922685498,-1130296398,369502987,45633554,922701824,163058198,5618176,-1248178094,-1207959545,103481345,-1197273416,-310157810,535137026,516640093,1430622296,-1910575989,-1203862568,91488270,-1914171760,49120255,1562371467,2214733,252051715,7077891,258277635,7143427,253296899,7405571,253952259,7471107,32309251,9830655,285016067,2031871,311361539,2162943,65863939,655362,355926275,1900546,239796227,3670271,143196419,2162690,133366019,2228226,140902403,12255487,163708931,12321023,261881859,3932415,162922499,12386559,312868867,12452095,91160579,12517631,89915395,12583167,175243267,12648703,166920195,12714239,162201603,12779775,155975683,12845311,42926339,2949122,144572419,12910847,249692163,12976383,247267331,13041919,45154563,3145730,43319555,4521986,331022339,6619391,246284547,4718595,326762755,5373955,174260227,8585471,0,0,1167087646,518818645,-326903666,-1331603954,105265419,1709769589,1488897,-1962512649,574000088,-2095316209,1586038467,-1324905476,636015372,625475599,1183383567,23560442,-60912881,-738572661,-2096690720,1946221182,19589379,-1710852353,65535,253894283]},{"sector":15,"data":[381165451,107935488,1082912907,-96040690,-16223168,244382326,-1191213592,1861681174,-1948742906,-1961942474,-1708064972,188,-150989128,-661977490,253900427,13055115,512425984,529207074,-150989128,-259324306,-1995947893,-1072956346,-1706031500,218,253894283,381165451,107935488,1082912907,-129595126,108314635,16292432,512425984,529207074,-150989128,-259324306,-1995685749,-1072957882,-1706031500,278,253894283,381165451,107935488,1082912907,-196703980,108314635,-26032,512425984,529207074,-150989128,-259324306,-1995292533,-1072958906,-1706031500,65535,956476577,91555398,16777114,108461824,16777114,305832192,1963345465,973522694,-1577058542,1178147674,-955878138,-14984698,205562367,1946568249,206217480,1963345465,-26107,-2090991616,-443874579,-900899553,50333186,16813057,50333440,-16680448,50341376,-16695040,50349312,-16692992,50382848,-16754688,50383104,-16698368,22528,0,1167087646,518818645,-326903666,108954380,-385649408,1190527125,1970536710,-1957642197,-388954554,-780147584,1372138464,-96039600,-26032,1183383552,-1965519880,-1981535737,-1014236602,-62486208,16416387,1996447102,142016266,-1963172213,-1981535737,-1957628858,-1873788733,5171214,-1963696501,704819335,206308,200689289,-16026176,244382838,-1996164120,1183577670,-96065034,-335788543,175570871,-1979156737,-467007930,2133190865]},{"sector":16,"data":[1183666176,244338695,-2097148952,-443874579,-900899553,1478361094,-1957345904,-661774612,1460857987,106859350,-467007606,-1946532215,-2013919138,1963721392,24701187,687747,-2065104011,173968132,-1946278016,71108678,2118153216,20244739,1946157373,146701,54337908,-383486976,1183515743,394506,-244087,-1202715018,-1706033150,504,-1962653975,67439174,-1947866368,134548038,-1948390656,1183517278,206330,-523040591,210498443,201123200,-385381951,1183515675,656650,1586215659,-1946973430,-266071996,-2114302325,184553441,273123777,-16516375,-1070922170,173968208,-1962522741,120260190,27105872,1586167808,105351434,-1957642197,1200294494,106859268,1342326571,16777114,173968128,-385595511,1586168767,273124106,-1996484827,1200354374,-754667248,75240,-506231,1393775158,1342180280,16777114,-1960187136,1200294494,992528,-1946925431,78712903,19261651,-129595136,1074153099,1183535952,-1706014470,965,-1962254709,272927731,1317793828,266437108,-1983837440,1586171975,-1946973430,-282849212,-2114431349,-1325399582,199414532,-12719678,1962936381,-8984317,1962936637,-15013629,1946159677,736658,99156853,2637311,518587253,51767807,818819,216597365,207522563,-1946278016,338495558,1260800,-118946954,-1816132862,1101528878,207522565,637159051,145817601,-208936749,-444593013,-21501442,-1962123637,19266118,-754339584,-1946973216]},{"sector":17,"data":[-35291124,-1946246935,-208991138,-2147335029,1452015332,31621626,-754405120,-1983771678,-1528233401,207522562,280567,-2094893569,1946221182,38242844,-1202658262,-1873739777,46065678,1586226218,38767372,-352263808,207522602,280567,-2094697217,1962998398,38242847,-1202658262,-1873805311,43182094,1586226218,38767372,184607104,38242753,-1978900853,-466945466,-523040591,1284240267,15040516,1810481419,207522814,637159051,179372095,-208936749,-444593013,-1983837437,207522567,620381835,-754536000,468472,1284240267,-119439356,1586219755,-1946973428,2359876,721047178,-373224467,1586233153,38242828,-2125405142,8452734,1183516796,16788986,1183515627,244338938,704775144,207522788,-2147332213,-840236831,-1962123637,246481479,19261651,-263812864,1392932607,1342180024,16777114,207522560,1150022539,-1075544062,-2114955637,-1325399582,-19142386,-1962123637,246481479,19261651,-263812864,621037451,112263175,395043027,-355267919,4186753,1183433227,38243054,1183441962,71825394,225771264,112720,-401698736,1183383936,229161202,209125200,1342178744,118170,207522560,1150022539,-1075544062,-2114955637,-1325399582,199414542,38242754,-1962123637,1059450438,-754274048,-1946973216,65372172,126468363,-1962123637,-1071321530,-120387919,-1962932443,72125427,200860032,71797185,-1962123637,38046707,1317666852,-18617870,-1962123637,71797559,-1325398235]}],[{"sector":1,"data":[-1948200186,-754273834,1071809002,-1983773952,-125047226,-1979294069,-467009215,-1947318647,1059392606,-1948200192,65372366,126468363,-1962123637,-1071321530,-120387919,-1962932443,72190971,-369565312,1586232906,71797516,-1325398235,-1948200186,-754274025,1071809002,-1983773952,-11473338,244319862,-1996404248,1586228806,4138252,-523040079,210498443,184804736,-1962440255,1183517790,-1312807698,637063942,-208994297,-2147201909,-202770207,-1878885891,-989681918,1778596098,956541955,-536642045,1761962243,1761962245,1761962245,1761962245,-368798715,-2090902012,-443874579,-900899553,1478361096,-1957345904,-661774612,-2147066229,91560511,-352318536,106859274,704726922,-2092941084,-443874579,-900899553,1478361090,-1957345904,-661774612,1443163267,425603,-1863777419,108954368,-951288320,64582,167542403,1586171517,-1948003844,-2026305466,293470436,66877067,-2092038538,176032254,-352319048,-62456057,-963914005,-1946401143,-1948003880,-2026305466,1232863460,-771989877,-460878877,-951981312,64582,184319619,1586171517,-1948003844,-2026305466,243007716,66877067,-167049610,-1070921347,1191118827,-1948652548,-62486074,-472786805,956843659,2113987719,138841015,49120094,1562371467,313933,1167087646,518818645,-326903666,2122536452,125110280,83642055,-2093815040,2098202750,-62470393,636157953,537427587,1187448701,-352321284,142508824,-955810520,195654,2122517483,92090376]},{"sector":2,"data":[66864839,-59340032,-1979294069,-467009216,49120094,1562371467,67422797,-2113928448,-1425998079,469762816,738262785,838861568,822148864,822084352,939589380,0,1167087646,518818645,1048828046,1946159984,12577027,32521859,-955681792,17526790,11528448,185616011,1031017030,-15173889,1996428918,410451732,-15304961,1996428406,276234002,1342177720,-2048389488,410451723,-15304961,1183519862,374770452,319833603,1347555926,786960016,410451725,-15304961,1996428406,276234002,-15829249,1996426358,142016266,-1878624513,46983182,191905411,-12552960,1996429430,343342870,-15567105,1996427382,108461832,-1897394544,273058564,957503115,91555926,1946568249,410451734,-1961605493,1174607446,139858694,244338770,-2097148952,-443874579,-900899553,1478361108,-1957345904,-661774612,572427094,-1205892337,1861681174,-1947170038,1451951686,72366344,1077478773,-13339646,1996425846,108461832,16777114,302446080,527699979,-1961129823,958106134,91555926,1946568249,175570702,-16222465,-6683018,1577058559,-1962742397,1297948645,503318218,1430622296,-1910575989,149717976,173968214,1996437503,108461832,16777114,833792,-259266057,51011211,80118583,-1962522997,69929046,-1996336101,1451883078,1958874108,1150112611,28856332,244338688,-1962904344,1979059184,-18427,1183538667,139889414,1418265737,-129725694,-461313839,-1948200577,-511638452,-1056243711]},{"sector":3,"data":[-1962654583,1418459716,-96074756,-1979951597,1418266180,-29062392,-1962261367,-31194044,-2114433909,184549857,71600577,1586218635,-2096133366,-1054145343,213504555,1592915712,-1962742397,1297948645,503318218,1430622296,-1910575989,216826840,173968214,1183528843,72125704,-768884437,-150991687,-129594895,50742923,1183384132,-1996190726,2122579014,58654726,956336873,1551825478,1342180024,-1711651189,-150993479,-6663943,-1996488449,1996485702,-96040182,-1980479997,112852038,1089074944,-1070903232,53844560,-1073020928,45616757,-6664128,721420543,12380608,-1962254709,833591,-1946652937,71339480,-1962391927,76151878,-1980086645,1996423748,833544,50753271,-1957689274,1177287238,105262072,-150993223,-107327255,-352321534,108954488,-1955431168,1149893190,833538,-1962512649,-936703922,142016337,737822347,112851014,1357510400,16777114,-58817792,-1958314491,-523109818,2113685051,175570748,1342178744,-1711651189,-150993479,-96074759,-26032,76087296,-150993223,1346388193,1342177720,16777114,833536,-1946652937,117639774,-352320507,138840835,49120094,1562371467,445005,1167087646,518818645,-326903666,-1957275882,1451951686,273033992,-1995287013,1451878982,-263796756,381157376,409925376,1049352331,1032523554,1183383947,1996443896,343342870,-1427632496,-96040451,185616011,125112902,16008903,-14882048,1183578230,374770452,319833603,1347555926]},{"sector":4,"data":[-2098721136,-96064515,-2081143159,749630,1508442996,-128021759,1183385483,833774,-1946521865,-293731336,-1995903101,1183579262,138808070,2122543476,813564154,-787593589,72190944,1006559616,-2094959167,1962936957,105220891,50877835,1444090950,453323542,1446707797,990213388,997460550,-150991688,-661916562,-2080612861,1586040003,71797744,1317797412,1004654862,-2090895935,1962936959,172395353,51140235,1444087366,139934472,1195067509,-12356346,1183578230,787964,-196703408,-1873749769,-40900594,-166989685,-1444347019,105286400,1946699275,-260144272,-1961790464,214336478,-1962260853,1200163926,139954438,-17275776,1996444651,-62485512,1342180357,721420728,-1873742778,-45357042,-166989685,1183541364,374770452,1418265737,239504130,-780147584,72125408,123265,1149878539,172395268,-1995680117,1418266180,172279560,1686110208,-964428284,-128021748,213401483,40236800,1099815051,-163149564,199902859,376761414,-964489237,-364475636,32265867,1410462788,-160024074,1600056439,-1962742397,1297948645,503321802,1430622296,-1910575989,686588888,1183536727,274107150,319440387,1183386710,-61437446,-1962522997,1177225302,206969610,-1980479863,381220438,309262080,512487563,922947362,-1946925429,1140979286,72618242,957495969,561320518,-1961677663,957558294,360648790,1178142076,-1961986290,1452012614,738591222,773198099,-196703469,1962296843,105183052,1165298688]},{"sector":5,"data":[1080451,1552629620,-1995994352,-661917626,1183385483,440558,65957623,263619,440400,178256,-294191280,-1961998709,17109078,13796096,1996443730,-193527818,-504885616,44867847,1964131897,191668546,191764107,2131777081,956660790,796331590,-1961998709,1174605910,206967562,191764027,108990332,191628859,-6682762,-352321281,-196703474,32921227,285961222,-955552234,63558,956516513,58521670,-1207786519,1861681208,-2114941960,-1978660666,-467008188,1947354683,29616387,14960327,54823424,-1948236151,1418400836,-431585002,-1578609015,1178141514,-1207601672,65739624,-1994242931,1183571014,-61436934,2082362425,956661592,1366432836,-1946925429,1140979286,508825884,-1946532213,1413086294,2082045722,407124229,1149964919,441748248,2132694073,956660776,561192004,-1946925429,1140979286,441717016,956517025,225835078,-1961343861,1721965140,1746307347,-196703469,1979074059,9693443,-1948492149,1451953734,106379536,-2098658435,956661504,2071069767,-1948492149,1452014150,39270908,75441532,527566649,-1948492149,1452012614,285671926,1586168407,-196703268,32921227,1460732999,-1958155514,1175127622,-15633144,1996427382,112654,-26032,216727552,-1961998709,1174605910,139858694,-1982314871,1586223702,239504348,-1995417973,39291143,-1948492149,1452005446,71797210,-1962518647,126563932,-1948367223,78766150,1174659283,1060318,-1947580791,-1960711176]},{"sector":6,"data":[1452014150,139803132,92235644,1980122425,-196703392,32921227,1427179077,284132104,1994292793,-1958024230,60359749,1427310149,274086664,92021119,1997424187,71666458,105186201,990401811,712314966,1963869755,38139429,-2095090680,186942,1702888564,1252130306,-129615613,1049166965,-276622544,-562153200,2117710198,-16353814,334100550,-633437186,57933826,956370048,2037833342,-1946532213,1446640726,2132507880,-431605499,1183519862,-396981274,334775811,1149892182,374638868,1149911787,736373250,-431619118,1005082131,-1284370346,1178273143,-1951631858,1451953734,105251600,990402067,411035734,1178273148,-1961790490,1451953734,340035856,-954837879,2116,-16642944,1996427382,-26098,1927872512,71666687,105186201,-1979165421,65874445,13796289,1930450491,-11015933,1178273911,-385648882,1702952781,209780226,-2084074751,1178145007,-372608290,1996488505,-26094,1599995904,-1962742397,1297948645,503320266,1430622296,-1910575989,518816728,1048794711,1946159984,43378947,184960651,561317958,-15173889,1996428918,309788436,-1206880513,726695935,1347440832,-401698736,1827272362,572427010,1488911,-1961333001,64523023,-1959293991,-1206967778,1861681174,-1961915634,-1948711976,-62486265,939513995,-15960321,-1399190922,-1996488695,1586230342,-1959264260,1451952710,105251596,755521043,-628948991,-1706012160,353,-2081929591,127038,113707380,68464]},{"sector":7,"data":[-1593703703,1183519290,306580240,1996438900,376897304,-15436033,1996429430,343342870,-15567105,28840054,244338688,-16653336,1996429430,343342870,-1961605493,1174607446,307630864,244338770,-1962701592,1175127622,-14650360,1996429430,343342870,-15829249,1996426358,142016266,721843967,244338880,1442947048,-15304961,244323446,-1980299032,1183578694,306580240,1183516021,1444211706,-1961605493,1174607446,307630864,244338770,-1980308248,1048834630,1946159984,22407427,833622,66744055,263428,-96040112,66209323,1177282630,-1873788684,-142874610,213448843,-194054400,66870923,263431,-2081798519,749630,417923956,-1202237439,-1706033146,2843,-1961605493,92870230,-1962781303,1451952710,-362902772,1461389099,105185538,-1962388207,1451955270,172370710,-1995680229,1451882054,105286648,721966731,1444614214,-498693870,-1947969911,1177282630,-263812620,829734923,99239563,-1924136948,-1202713531,1861681158,-879079184,-352321534,214401806,-1946794357,84015190,-1962781423,1325396038,1975520240,833768,1744247947,96666370,1183383556,-1962152978,1452008006,285540836,-947715499,-293717748,1996483959,376897304,-15436033,1996427894,142016272,-1878624513,-104601586,-1961867637,1446580822,956658952,376702534,-1961330945,1451955270,105251606,1376278035,-401698736,1183577408,138808070,1996431220,410451726,-15304961,1183519862,374770452,319178243,1347553366]},{"sector":8,"data":[-1914171760,-2090902008,-443874579,-900899553,1478361108,-1957345904,-661774612,1444867203,-1962129781,1174605398,173413128,-1980086647,1996487766,242679568,-1710459137,3155,-1961991519,957244438,58588246,2130770665,-96061176,-253164685,572427008,-1205892337,1861681174,-1947170026,1351287360,-498693884,971265673,863310934,1964131897,1958873902,376897322,-1961736565,19731542,14320384,2107265106,-1962934260,1452008006,67044,-1996434813,1451877958,-15275032,1183520374,341216018,-1981397367,1347610710,834714,461938944,462034571,-1981135223,2122574934,208994310,-1962129781,1183387222,-61437446,-1948105077,1446634582,2083028988,-96061179,1996431735,-59310314,-1694861569,273,-1961991519,957244438,427811926,1178142076,-1961724958,1452008006,67044,-1996434813,1451877958,-431584280,736646795,1444670022,-297367060,-1026423,1996428918,-361299988,1347571794,854068880,-310157576,535137026,315247965,-1873273344,-326412987,-2082959842,-950662420,64582,1090274955,1929791035,-62485673,1208370691,1183443153,174520314,1577310347,209095432,1351286923,-163149566,1006130825,276762710,1178273148,-1962314994,-1992230330,-1058276282,-1961998709,1446580310,2131787000,-163170043,1183517046,1183400186,-1952060666,65796678,1593591435,-1962742397,1297948645,503319754,1430622296,-1910575989,183272408,-150989128,512429678,117640994,-1946532215,105379800,527764480,-1995421813]},{"sector":9,"data":[-1072957370,1996428660,209125134,-16091393,1996425334,-6664186,-2097151745,-443874579,-900899553,1478361098,-1957345904,-661774612,343313238,-351242749,309734175,-1962260853,1413024854,2132507650,1912879364,105286421,17323659,39063812,-15841653,-1073017266,-2090936459,-443874579,-900899553,1478361104,-1957345904,-661774612,-1592857469,378215272,1183390570,-128546314,-1961136991,-1994691050,1451881030,-25868,62390272,922701824,1996427834,-159973384,-1947056501,1177285718,-128574474,-1980086647,1347615830,1358954424,726684313,1347440832,1474825872,976682752,-126419182,-624897,1996487798,2147465466,1354771280,-1873784752,-246093810,35391175,113704961,4964,-1962742397,1297948645,-1873273141,-326412987,-2082959842,127038,28837237,721611520,49120192,1562371467,182861,1167087646,518818645,-326903666,-2091493620,1946360958,13953283,957104289,57940550,-2097100311,51134014,1048775284,1946291262,12118275,-1962130783,957105174,376772694,1964394041,-2110324975,-26085,1183383552,-128546314,1183523051,408324886,319964675,372970582,1500843076,205653563,-1070902411,-1980217719,922744390,1996430210,-159973384,1347469355,-15042817,1996429430,343342870,-1877838081,-107223026,205405827,-1961790205,1451954758,1174798612,1209405708,51308812,-1961736565,100734038,370216016,-35058606,1044284162,611648012,-1962130783,51135510,319571462,990660630,276109398]},{"sector":10,"data":[1964394043,306613003,1964262923,48163075,18644611,1084314997,440809740,1048792437,1946225726,1044284167,477430284,-1962130783,51135510,319571462,990660630,729094230,1964394043,-8656602,-1962130783,957105174,393549910,1964394041,205431058,1946157885,343383,155021428,-2090634240,1948851326,8513795,205405827,-1585810135,1178143808,-1586334438,378211394,1446579268,963015960,1635063366,206847619,-10849024,1996428406,1211563794,1178009356,-26100,1185087488,1209436428,36366604,-1962129759,-1559476202,378080336,113708114,134206,113708779,724030,113706731,461886,-1961736565,1185092694,1209436428,178188,306354768,-303497216,440830721,-1962131293,1451955782,205693720,205788809,-1961736565,1185092694,1209436428,273058572,-1962128733,1451953222,206349070,206444169,-1962391925,1352862294,1377208588,105286412,-1962126173,1050876998,1391884,317260670,1326337,99156860,146689,54353012,1027765248,141819909,1946158909,18213123,112868995,-15174656,-14974410,722186294,-11513664,-1710510026,3886,-15865006,-1206156746,726728703,1347440832,-401698736,-521600671,-2110324992,444006171,-15173889,1996428918,309788436,922739691,1996430210,410451738,-15304961,1996425846,-3216632,-14974410,1996429942,376897304,-15436033,244322934,-1207886616,-1679228927,-2110324992,444006171,-15173889,1996428918,309788436,-18346352,1488896]},{"sector":11,"data":[-1961201929,572427248,-1960867057,-16052104,62442868,-149058816,1077936751,-768375,-1961942474,1050054,1488976,461516535,1342181381,-1863026945,25815054,922722795,1996430210,410451738,-15304961,1996425846,-401698808,62390437,1025895168,-2055995366,1962943037,-10491645,1962943805,-13768445,1946167613,2768329,1760101237,178431,-26032,2122514432,1450508058,-150989128,512432750,117640994,-1191557495,787939350,-259318910,1988704003,-94467076,-788117621,75240,1284235473,-35553274,1149878539,-94467322,621168523,1284177921,-18776058,1149878539,478053126,-1962445817,1333852766,1048773126,1946159984,240556549,1599995904,-1962742397,1297948645,503322826,1430622296,-1910575989,216826840,381179479,275707648,381218955,242153216,512489611,529207074,-1995292533,512489030,529207074,1196231,-159973632,16777114,276233984,16777114,276233984,-135786864,276233984,1347469355,253894283,1895767947,40959748,-15829249,1996426358,142016266,-1878624513,-169351154,253900543,-15827325,-4717195,-1962546177,787911,96897872,-1202716660,-1873805261,3270670,253900543,-15827325,-4717195,-1962546177,1312199,96897872,-1202716652,-1873805286,911374,-310157474,535137026,214584669,-1873273344,-326412987,-2082959842,1448543980,-1962248565,1586169982,-1960867060,-96040703,259309579,-26032,1586167808,-954234100,184549377,-1959232266,529206366]},{"sector":12,"data":[1946171523,108461870,16777114,-62486272,-1960807360,529206366,939464843,-237941,108461879,701594,-62485760,-1962123637,1577158943,49120095,1562371467,576077,1167087646,518818645,-326903666,49120006,1562371467,182861,1167087646,518818645,45668494,244338688,200972008,-1592101696,378215276,372841326,226433898,104400508,91429736,-437776752,49120249,1562371467,1478413133,-1957345904,-661774612,19983489,572427094,-1205892337,1861681174,-1947170032,1183388224,1975520216,10545411,-19626297,1187446784,-352321284,-664892588,1586182027,-1948003844,126550616,-19757431,-632910512,2275408,-26032,1996423168,-632910578,-26032,-2037841920,1183579856,-796509700,-16485122,-1946233722,-2037711754,-2104951088,-1098776872,16776912,1191133812,-664892420,126558091,998237312,-1653081018,-19612029,-970361856,654235270,-1948754293,-2012771809,-1912678522,1358878342,-15829249,1996426358,142016266,-1710852353,65535,49120094,1562371467,403491405,-1442774272,117440787,-67108096,520158987,1778385664,553713424,1845494528,570490631,-1442839808,637599506,922747648,654376705,-1375730944,687931152,-1509948672,738262804,-2030042368,771817218,-1962933504,872480521,-452984064,939589395,989856512,1157693190,100664064,-939458807,1073742592,1208024849,-50330880,-922681582,570426112,-905904381,1526727424,-889127166,-687865088,-872349939,-1308622080,-855572716]},{"sector":13,"data":[402653952,1308688149,-184548608,1476460306,-1040186624,1996553992,-922746112,-2113863917,2046821120,-2097086718,0,0,1167087646,518818645,-326903666,106859278,1183385483,263674,-1947056503,1451953222,66830,1375785603,-227082416,1342179000,1342177976,-1946526069,-163149561,-26032,1183383552,440828,1174530551,-228684814,-1962129781,1463357014,2137553924,38222085,1183539574,-129594894,16008903,-1961039104,1183578206,173443848,2130990905,956660761,309789255,116934275,-1946925313,1174666310,-163169292,2122570108,661913844,-493825,1183576694,-163173900,737560203,62520390,1357510400,16777114,106859264,1183522699,-2096657930,-443874579,-900899553,50332172,-16730880,50345984,-16761344,52736,1167087646,518818645,-326903666,2122536458,1500905230,139345537,611680254,-1727127391,139068931,139204115,413255819,-1713730802,209508923,-935656321,1453393522,237019912,-1727127391,277087745,277222929,158711819,17669793,-351376890,1778829062,-1593835506,26807840,285755910,-351777770,172395313,-1559472501,378081412,1183518854,241869576,-1559345525,-1070919484,138847129,138942089,-1995942237,-1559734250,378079324,512428126,529207074,-150989128,-1961835474,277127664,277223051,2130989113,956660801,980877888,236979911,113704960,69022,33965814,703136629,229160962,261929040,374864,15964752,-1464336384,-2001186803,95965195]},{"sector":14,"data":[-90550272,-385875967,547422724,373004558,394201176,104531580,259197014,-1727127391,139855401,139990553,-1207893783,787939350,-661974844,253900427,411776139,1183385483,243172346,-16353793,-351774202,-92864749,277231359,277100287,2028474000,140157698,-150991688,-1962386898,-92929040,-1996175741,1150024822,240421644,277087787,277222939,-1995942237,721967126,1185126848,1209436424,140288776,140383881,-1962523509,69929044,50484251,319849478,-1559198186,378079306,1149962316,-2132225788,1319337956,2147368200,1252089973,237765896,-1961907037,722343990,185092662,721714678,-1962742848,237020102,138847129,138942089,-1995940701,-167223786,1963066950,18278659,1578535321,263632904,261929040,374864,34314832,-1665662976,-2001186801,95965195,-6664192,-385875713,1586168038,172461052,-167226717,1946224198,1312227107,1278672648,1245118216,-129594104,-26032,-1398603776,-129594609,138847129,138942089,33965814,547445108,373004558,377423966,104531580,242419804,-1727127391,140248617,140383769,-1665648149,1183666191,922702070,922683470,922683468,922683466,244320338,-1962817560,-1550191034,378079324,-1665660834,-2001186801,95965195,-1432727552,-2097151996,546878,142544764,139869825,91389951,-343933000,139895043,-166846301,1946224198,373004565,243009608,104531583,108398662,-1559738719,1190530592,410255878,-1727127391,140383803,108990076,140248635]},{"sector":15,"data":[1554056822,237019912,-1559355231,-2090988130,-443874579,-900899553,1478361098,-1957345904,-661774612,-955847549,64582,-15698177,1996426870,-1586173172,378212484,1446580358,2139061258,138819845,1183545462,-62510330,-1577433463,1178144288,-1996259590,1183578694,1317771770,173968136,277089835,277224987,276814395,-935656324,1183517299,-2079970552,-96040688,262944511,-15567105,1671101046,-1962934267,1174534726,-62521070,957227169,511507014,1358954424,726684313,95965376,244338688,-1946396184,1178142278,-385647108,1586233205,-62485740,-310179959,535137026,281693533,-1873273344,-326412987,-2082959842,-1957294356,1200294494,-96040702,16271047,96701184,1183383556,-129594372,-96060608,1183531901,-96074760,1183447249,833782,-1946784009,-59339816,1351286923,-230258430,1005868681,578750550,1178273148,-1961134330,1183446598,-230257672,972314251,-1183512490,1963345465,-129594444,1183516907,-96040458,-2090948629,-443874579,-900899553,1478361094,-1957345904,-661774612,1444342915,-150953288,512429166,117641632,-1946794359,-1962439720,1177223767,173415176,-1980086647,512490582,1207894022,209617666,-1591315200,378208908,1446576782,2132442122,138819845,-1229450382,1996443663,374800,80321104,-370606080,-161576192,17057782,-1092025483,229160960,276234064,1342178744,362394,209125120,818819,1052250485,1996443666,142016266,-51900784,-1960973568,1603008094,-13107430]},{"sector":16,"data":[1996425846,-26104,1586167808,-1949791242,-1056765369,-230257328,1354771280,16777114,-196704000,31473283,-1956612864,80118768,1418396811,173422850,92212348,1913144889,113672965,76278507,-1996335989,1451880006,71601136,1038894729,460652543,99894787,1183383556,-11517704,1586172022,705137400,-6663964,-1962934017,1452011078,138816496,-1995811301,1451883078,-1205867524,-11530840,95948918,-493203456,-1962934272,-208990114,604128395,-1995174912,2122515015,242483206,722499327,1996443840,-26106,2122514432,310116604,2122385279,1988100090,241077001,2147420103,1586170091,-96040178,512427913,1342111750,-310157822,535137026,214584669,-1873273344,-326412987,-2082959842,1586169580,106924810,1183385483,173968378,-1995946101,1183579206,-61931524,578076683,-1946526069,1451951686,39270664,75435644,141952825,-1946526069,199951431,117065347,1586222315,-2081363190,-443874579,-900899553,50333190,-16548096,50342912,-16633344,50344192,-16406016,50344704,-16446208,50345216,-16605440,50345984,-16452096,52992,1167087646,518818645,-326903666,297443688,-1912846711,1183434822,205949894,1962935869,15001859,1962936637,13166851,1962938429,32958723,1946226749,17906955,-454491275,12577024,-1705983957,65535,305805055,1350565816,-1705983957,65535,-1979949429,1975520007,26405123,1996429803,309262,67221584,1354771280,1086736011,-409317346]},{"sector":17,"data":[-16777216,-6633866,184549631,-1914997312,-1705973178,65535,16481920,1183523445,1357435385,1355302541,1342178488,-16458520,95948406,1183666176,-1706027320,782,16285312,837354356,-163149055,-3914103,79171190,230182912,-4698108,1586188543,1074236356,-828747746,-16777214,-1108865418,17230081,687747,922683764,-6680122,721420543,26995136,687747,1183516276,112501518,33701507,-1543168,-6681994,-352321281,172395486,1962934589,19065091,1962934845,15919363,1962935357,17164547,1962935869,21162243,2122562027,494207422,431638214,-792574326,-1153005344,1354385037,-1698662657,550,12601031,242679552,1342178232,1086736011,548950046,-6664192,-1996488449,1586216006,509638,-2080612725,108265535,-389646593,2122515530,58654908,-16742423,-16711626,-6633866,-1996488449,-12732346,-1924565760,-1202677178,-1706020864,65535,-6797687,1183649398,616059034,-6664192,1023410431,611581958,-1207011585,-1706033149,65535,-1207011585,-1706033149,929,-26032,28835840,10742016,305805055,-1698269441,65535,1035486857,376701183,415778502,-2001189238,1183697222,1996443848,-25920,1586167808,4162556,-6683276,-16776961,28839542,-6664192,-352321281,138841013,1962934589,-23336701,1187463403,-1929379392,-11484602,95948406,79187968,2142785536,314068992,163074048,-6664160,-1996488449,-1072972218,-907476108]}],[{"sector":1,"data":[1879492606,-385875957,1183580016,81160,37554292,-373591040,1996488544,23652366,-2080417815,-443874579,-900899553,-1957363702,-1360231956,1485212928,1418103295,74907647,1342178488,1342441912,1347469355,50043472,-2037841920,-1072955526,-1635054979,1204223828,468385793,-1207666945,-1202716668,-11533302,-1946191178,1090475142,597315614,-16777213,62391414,-2037690368,507576148,-26032,1996423168,440324,768080,1354771280,949637200,-16777213,112723062,95965184,-1070903292,-1706012592,882,-8733053,-1925284864,-1979754362,-44410,-1912646474,1358920838,1342185656,-352226584,74907417,1342179000,1342439864,-1957642197,520049286,60136016,-1224802304,-790036654,1975520001,74907612,1342179000,1342180280,1342177720,1347469355,16777114,74907392,1342179000,16777114,-28931840,1354771280,112720,-26032,1996423168,-25858,1996423168,374788,-62485168,-1070903274,-26032,-2037841920,2122579798,645136636,1387724624,309503,27519056,-1207666945,-1202716666,-1202715635,-1957625857,520049286,69442128,-443875328,180829,-2081649835,1187387116,1996423402,440324,67745872,1354771280,1117409360,-1996488700,-1072955834,1996433788,440324,67811408,-25755824,384452237,8362576,1996423168,374788,-364475056,-1130737642,-1962934272,46292453,-1873273344,-326412987,-2082959842,-2091514644,2080638590,108954374,-1207599489,1173028865,957294753]},{"sector":2,"data":[2097802246,-62470342,367722496,-771989877,-1948003869,-1961969098,3737158,1191172468,166502908,2096907833,166510307,83827851,-472783919,247084683,-1996077429,733539072,-310157632,535137026,46812509,-326413056,1443294339,-1559869813,113708730,2540,-1560000885,113708840,3688,49956551,-1472790784,2275334,-26032,1183383552,-1472790532,138840838,-11526592,-15592394,-1928195530,-768869818,-6664110,-956301057,65094,1988827371,-754798082,-1170865178,1446313742,1342178488,-16756504,-324927930,-28952311,-1956716420,113401317,-326413056,-1593643901,104401388,662507112,-15832927,-787585018,65065440,-1995523578,-11469242,-1706032010,1454,98212432,28835840,721611520,1575324608,1426064066,-326898549,-1136227004,-244087,1183647862,-6663940,-1962934017,130481246,-1136227072,-26032,1183383552,108462078,1342185656,721700491,-1705968058,65535,1354516109,721700491,1174666822,1996443654,-25858,-443875328,442973,-2081649835,-11139860,-16711626,-1415969674,-1996488703,-12714938,-1960348672,-1962868706,-772764897,39357414,126492555,1183441962,1958743038,73304845,-1996601718,112647,-1070923029,1575324510,1901250,4718595,10092799,62521603,8126467,61997315,8192003,37683203,10289407,16711683,10420479,31719427,10813695,94306307,10879231,41091075,11272447,91881475,2883839,32899331,1441795]},{"sector":3,"data":[34078723,13435135,91488259,5964031,36896771,14549247,85655811,4587522,23330819,14614783,99811331,14680319,9699331,14745855,8847363,14811391,5767171,14876927,30605315,6750463,18809091,4653059,29360131,6815999,83493123,5242882,96731139,7012607,32506115,5963779,72548611,6029315,25100547,6094851,63832323,6225923,66978051,6619139,0,0,1167120524,518818645,-326903666,-1957210514,19203654,-96040704,12863175,57057536,1964131897,55746852,55842443,1964004921,239483160,1453396853,205928707,-2136929419,105265411,854131573,-661891316,1388298382,47107,-67103047,-950031373,228358,306612992,-1962711389,-2136799674,239504131,-1559210357,378078034,1317733204,1443793164,173423363,92220284,1980253755,1711720228,-1543504125,378078040,113705818,898,-1559352671,-120519820,-1560053597,-890698886,33998603,-16777215,1996427894,242679568,16777114,-129579264,1996426674,276234002,-1710328065,65535,48907975,-362902773,269502455,-14846976,1996427894,242679568,-15960321,1996425846,108461832,16777114,192407808,-689434992,-1572961523,125042694,111689347,-1710721792,65535,-1928635159,-1940404138,-1950314792,47354,-67104583,-950031373,320582,31868615,-92372224,-1591905280,1183386090,167551418,-1577302391,1183387768,277389806,-1578350967,418061170]},{"sector":4,"data":[-1996119880,1183448134,228368826,-1578219895,1183387046,166109676,-1947187575,1200351838,-1035564794,-1961129823,958106134,192221270,1963869753,138906374,-1950202367,1150023798,71772942,-1175042423,-1053066304,1317602166,-1035564042,58114363,1036144265,92078080,1183432755,-163169854,-1992293261,1996486214,-294191166,-1699055873,65535,-1983232375,1755564102,-1032388861,276313855,166344447,120986,-800683776,-624897,1996484214,32611002,1183383552,57582540,-624897,-15697866,-1710626250,514,-1949153655,369486406,-1102673664,16416387,-1465842316,-1593578746,860882594,-1706012480,65535,1183432755,-196703808,-2734393,309788671,-15698177,1996426870,-1207309556,1347485695,1354773328,1342180280,16777114,-1404647680,-1633615872,-1236891379,-545996789,-1995461471,-2069777338,-2045342960,173422864,326912895,1980253753,-92372210,-1958841088,1065399390,1446409484,229162583,-1190426433,-661913595,-947142514,-472786549,-147078397,1263208307,-83627261,-56232963,645946975,-2147284087,-133460954,193595078,-1873375980,-2000791722,-1174762741,-661913595,-947142514,-472786549,-147078397,1263208307,-83627261,-56232963,2122538591,527696122,-1928169729,-1202679738,-1706033149,65535,51491489,-1995327482,-1264457658,-14816495,1183650422,45633680,345657344,-1593835517,100863574,1183387228,240689640,-2084813175,127038,-840367244,-1790511613,-1978305281,-2143513274,1183516787]},{"sector":5,"data":[-398065168,1183516395,-1136262672,11028167,-1136227584,2109752889,-1069119224,27805383,-398030080,2113160761,-196703992,27805383,-1468103936,-1959431168,1979957366,-362902540,1024083851,478019824,-327745712,-1694730497,536,112720,-26032,-125108224,92206907,-337873271,-595687165,722502817,1023627782,58458367,-1996423496,1177268294,-1438217772,16924291,188120576,-1926070336,-1202679738,787939338,512426242,117641212,1342179885,1342179256,16777114,1975520000,-1268872432,1946763136,524255240,-1142357132,242262272,16909881,-1192752523,1975520009,11069699,-150992200,-1962868178,183403504,268181131,1048786691,2113929474,-733574385,-1999092181,1183451460,138709208,-1962228093,-1874424362,-259303594,96074379,-1898411008,-1949856832,65262041,1945582531,55266055,-33881101,1610393075,156008542,-1434549249,-1979351296,938202182,-774613365,-2101181982,-661891325,-91504498,-1962934088,-201545138,1451974571,-2134736428,-661891323,-91504498,1317732528,-1426850646,-1337554081,-1999354231,1183516740,-666465836,16910079,-1961851743,957384214,58591830,2080411625,138819848,-2048326794,-427916544,956986368,343216214,1963869753,-733574385,-1962711901,1183434822,57451470,16416387,77671541,306592001,1586177140,-2138585388,-1531403259,-1070379008,-401698736,1586170078,-733544492,-2021006383,100729730,1183515500,57975772,-1547680117,1183515514,-1069153292,-1962706781,1688458310]},{"sector":6,"data":[56533763,-1962391925,17107542,13796096,-1996269405,-385656298,1183516222,-1236925484,2113994557,16758798,-1982577109,1187493446,-956300860,55878,1083393782,-605486219,-934900479,108461904,-1324502367,636015371,-1706033145,65535,57982987,-2097037847,1962992254,23062787,735725195,50550790,-1559198714,2122515296,57941986,-1198500629,-11534291,244382326,-1962399256,-1996266466,1258511902,92309446,-1981558483,17007239,1183567430,57451470,-1593611613,961020162,511570502,-150992200,-125046162,268181131,1174290179,1578535689,139802627,-2008415118,2122516565,108265722,-1560058719,2122515294,58000612,-1928990999,-11483066,-68565386,-631338235,-1948629249,25867390,-259267542,1965096579,-92372172,-1593478144,65737134,-1995550047,1586214982,-1981558316,17007239,-1365129146,-1371109103,-1949284863,1191171166,-2138585388,1474895877,553550596,-25094532,276627584,296492683,-467009398,1034831497,225771775,112726,-401698736,1183385430,-92372050,-1962576896,619425350,2082537091,-2130804458,-1961853696,-1978773474,-1981535744,-12732346,1443656960,-1873756109,119859214,-1950857591,-472787874,58886025,-1949809151,1174515270,-732001328,-1949022465,-2138601274,771654405,1183527294,-800704046,2122523262,57934050,-1946246679,1346950214,185045992,-385649216,2122384565,2080440276,78375171,15091399,-1959400704,802246,-1545010315,-385647104,154993930,-385649408,171770299]},{"sector":7,"data":[1035172864,58654731,-352088087,-733020247,699942539,1183565894,-800708178,968246923,57989702,-2114008343,16766078,2122551421,57999556,33211625,1183558726,-1408891988,-1270445809,722312865,1183427654,-1001994314,401145856,-733020164,699942539,1183565894,-800708178,1208025761,-1192081783,-1202716627,-1873805311,104654862,1003505155,58643014,-1946207255,1183434822,-732001358,92309446,35514633,-1949020417,1177139270,-1371108408,-1949284823,2057551942,-196738301,-1560054621,1183515512,100899290,370348164,1487081606,1511426307,-730398973,184981480,-385649216,1654718628,-1560170493,2122515298,57934074,-956265751,3057222,866547455,244338880,-1996111384,297312838,-1674643712,-1037330163,-1952843567,-101211570,2097209149,-1207702782,1183383775,-732525660,92324481,-1898410921,-1963291712,1317774918,-1426850652,-732525729,-1031675183,-1940454526,-1950314792,-1572434950,-56340853,-1956664333,1174656070,56533924,111294207,503677112,-1535705264,16777114,57451264,57149127,-1947664384,1577502467,-385875965,113705858,66428,1219249803,1476788633,1511395587,1611056899,-2097151741,1962993278,-565802219,-1948236151,1688458310,-934900989,-1546762615,1183515500,56533972,-1545845109,-1108802700,-733020164,699942539,1183565894,-800708178,970081931,58511430,-2097042199,1962993278,-565802222,-1948236151,1688458310,-934900989,-2083633527,1946477694,-934900467,-965279920,-402229505,1183515434]},{"sector":8,"data":[-1304000056,-3115265,-16127434,-1710196682,944,-341948791,-163149013,1923106361,-1605990141,966674059,343056454,79578755,704792458,468452,-1996487675,652993606,79578755,-1950458229,-1605990137,-915030005,731793035,47233490,-503844361,1183432963,-465123424,1996423172,-294191200,-1699055873,2416,2127054393,-934900989,-2084157815,1963254910,-934901482,-6260993,-15697866,-1710626250,2512,-1949284727,1183434822,-733574198,-942258551,56902,14829255,-431569152,1183514624,56533972,-1547155829,1183515500,57975772,-1547680117,1183515514,-1069153292,-2096924509,1946278526,242262377,16909881,-1662515339,1958742787,702553,16920311,-276563829,-65107190,-2093022449,66110,1183453054,138774744,735331979,1166596166,180847369,1452295821,-1947169961,375295,-1064380276,-645150837,-1023155247,125040443,-217887925,-201458941,1583348901,16910079,179835627,36632320,-2080863487,512428783,1057165308,-1999354230,1300236357,1586233097,-733544492,-774349175,-934900765,-1984805333,-2096921977,343214590,-1090740759,2078867616,-767128581,2127578681,-64034557,-2851199,-385647616,1988754477,-632910878,-1716763133,277087747,277222931,-1996269405,-1962714602,1822672966,-733574397,-1962713437,1956895814,-1069118717,50559651,2024010822,771654403,-24967820,-1961331425,1183440454,-733574176,-1962711901,1183434822,57451470,-2080626199,1962993278,-565802215,-1948236151]},{"sector":9,"data":[-1555508154,1183515492,57451464,-1984412117,-24916410,-2096794614,1685392382,547112647,-1669923072,-1862633729,42526734,-1965793653,-1752654762,-472840833,58754953,15105667,1177226869,1812332984,-733574397,56927048,1946877571,-98637565,16416387,1688274548,56533763,82083459,2062091124,-362902534,620840842,1183383555,212452,1642820724,-941734145,124486,-1946447383,1174657606,100899244,370348164,19730566,14320384,-1996269405,-1962714602,-1555508154,1688404830,-599356669,-1962707805,2057551942,-196738301,-956073821,16998406,-934900992,-1984412117,1822674502,-362902781,620840842,1183383555,1958743012,-934900467,-864616624,-402229505,1183514678,57320396,-1546238325,468386686,1962937661,-83498749,1962942269,-79304445,1962945853,-26351357,1610259433,49120094,1562371467,969293,-2081649835,1465255148,-1962385781,54336583,1028879360,745799681,1946157629,474433,1451962741,39267078,1175353227,56899131,-1132453507,1949173120,736547098,-788299116,-387234066,721835659,-771029417,65602431,-2080714495,58589434,-385830423,1451950326,106375942,2139352555,57999384,-1962875415,1462437462,2144471814,14215427,369170177,1049297772,-141884572,92325761,-964565295,-1957559422,1334548930,-1543899368,-1992293518,1451883590,113662718,1325466481,-1064380276,-17923,-1359863632,65130817,-28931087,201215743,-15174208,-61408178,1015236166,-1946586112,58863046]},{"sector":10,"data":[1593698513,-1962712158,67238982,-92024789,-2095284480,2114001023,1190942307,3965766,-963905164,-788299219,1671585512,-11670781,-1511319473,-1031071999,17057527,1377924352,94419026,-1674117296,167025165,-11534336,-15697866,-1710626250,3498,1510497931,-2096609535,2097155711,1746272518,-1962284285,-472838561,58889985,57415169,-1956749316,113401317,242262272,375193,-1958675977,-63504400,1879442191,1357510414,-1705983949,65535,74825739,132890675,242234881,-1023409736,1167120524,518818645,-326903666,142508804,-2094891232,2099185790,142508812,-2095219703,2131560574,108954391,-1157270528,669716910,-351382853,142508322,142344320,-956539251,334233351,425603,512427636,82514348,240131723,-2146935293,1131806527,108954451,-15174656,-1928943562,1343621190,1342177720,572826,-1341773056,-15275247,-1928945098,1343621190,1342177720,951706,1409690368,-1072997618,-12777604,-2013102848,-1979389177,-2082199033,-443874579,-900899553,-1957363708,-661891092,-2101362546,72256259,-205507588,1073837487,1575324511,-1946156350,1430622424,-1910575989,-264338472,1735720961,111296131,-1957595904,-16560610,-6671753,-1560280833,-1073019230,-1202700684,-1706033151,65535,55451275,-1204652033,-1706033128,65535,1962934845,112645,-1070398741,184982691,-15633216,-16342474,-16346058,-1710845386,65535,111689347,856192256,-6664000,-2097151745,-443874579,-884122337]},{"sector":11,"data":[16973842,134928,196610,16711892,16973855,134980,16973833,131644,196618,16712634,196779,16712713,196653,16711873,196786,16712499,196795,16711960,196796,16715603,16973887,134911,196660,16711933,196837,16712297,196710,16713140,16974054,134944,196688,16715192,16973932,134813,196699,16715264,131,0,0,0,1167087646,518818645,-326903666,138868228,-2095549439,1930036862,-339727612,209125202,1343112845,16777114,-1924863232,-1202713018,-11534296,244319862,-1996442648,1183710278,246960142,1183535104,-62510330,-401698736,1174470696,239504892,2734160,105286480,1358710315,-2048389488,-62521088,-2080618869,-443874579,-900899553,1478361098,-1957345904,-661774612,33877121,-24736426,1996443901,-26104,-2037776384,-466944514,1983508619,-1962577146,48956998,-1072970101,-1070922637,1983450347,-1962577146,48956998,-2037791093,-2037514756,-1957626369,939461214,-33769729,16777114,173968128,-33782133,-2037709055,-2090926596,-443874579,-900899553,1478361094,-1957345904,-661774612,425603,1586173054,-1977644278,126355526,-16097653,112647,-1070923029,-1962742397,1297948645,503318218,1430622296,-1910575989,283935704,173968214,957193889,58462791,-1962827031,172264435,2114471737,26601731,84690827,1183384960,308251638,262944395,-467009398,1039156873]},{"sector":12,"data":[57933825,-167736599,17828102,116796021,1963069449,138868259,-1955171327,1200294494,100899090,370348164,372969606,1635714830,104531580,1500710668,-624897,-15828938,1996424822,173968136,721485752,-1873802169,-28514290,-151763319,1946224710,-96040699,-21476629,-163149559,-1203862704,91619085,-352321096,230203651,108461904,1342177720,-1207279989,1194000639,244338700,-335670808,-159973428,-1962379521,-4715938,205990656,-401698736,1183383789,-196703750,-16097653,1187451463,-956301070,64582,1586174699,705137398,28856548,1973047296,16777218,1191178822,-163119108,972703371,-562234298,-1962254709,1191309894,138868232,-1962380287,1183445574,-952701960,63558,-1962254709,1183386695,-1961300996,-2020934562,-467008128,1354771280,16777114,-129629952,-1946401025,1200294494,-196738292,2147239483,173968346,-1978900597,-2021068730,1586169216,209160970,-787724289,-129594394,58885257,17456779,173968135,1150022539,138885386,1827210111,277127678,277223051,55842361,104401781,91554642,-352321096,-339727602,173968138,1984455,1592650496,-1962742397,1297948645,503318218,1430622296,-1910575989,82609112,1342850701,1342188216,-1878624513,-35723250,-2080618871,-443874579,-900899553,50332678,-16739840,50373120,-16767744,50374144,-16723712,50342912,-16635136,59136,1167087646,518818645,-326903666,108461828,1358710413,1088949904,1958742784,458793227]},{"sector":13,"data":[1039943211,394067983,723212449,255720518,-15107072,244382838,184596456,-15895360,244382838,-1207886104,48955393,-310132693,535137026,46812509,-1873273344,-326412987,-2082959842,1448544492,2122972971,-1003058180,-2129728751,2147418748,-12123787,-964428730,458793225,2096907833,637162,-812912649,-1056710191,129095563,-1039932717,1929922107,163071779,-1947207936,65130959,-1311274047,65196807,138820546,1586227058,725584134,1327688640,-150992456,-774927377,-1950284831,-754470441,1002570722,-411891642,106859335,28852105,-2090902016,-443874579,-900899553,1478361092,-1957345904,-661774612,1443294339,16533191,726133504,-6664000,-1191182081,-369688567,906227851,2088833476,1954545410,105182752,-15698943,-6684044,184549631,721712576,-14488640,889127540,16777114,2080833280,461152539,-16497527,1183579206,-62506746,28881276,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,-1957294356,-1995324362,1187510390,-352321286,41713986,896827391,1962440249,1996445219,637176,34904656,727056384,163074240,-6664192,-956301057,2147418692,-16235322,-1963434357,1200159302,-129596664,164004617,-1577433345,1178147672,-1867088646,7792654,688277131,-1592043514,-523166888,268084032,-1323607903,-1981754617,100922950,-2069689880,636955,458764023,-1979833280,922745926,-2069818940,-100269285,-31178737,1343341731,-1694730497,663,16777114,268083456]},{"sector":14,"data":[66987072,1174664774,-230258180,166213375,4241488,-26032,-2090991616,-443874579,-900899553,1478361090,-1957345904,-661774612,1460202627,-1003058346,636945,458764023,1183434243,-96024580,971702272,-16614271,-1976798081,-467007420,2117728395,-1323535110,65065735,1342826502,-738572661,-402258976,-2135404535,-6664192,-973078273,-63420,-964429242,-59361015,1600045687,-1962742397,1297948645,50333643,16922113,50333184,-16700672,50371328,-16639744,50371584,-16673280,50342912,-16696064,50391296,-16708864,50391552,-16669952,27392,1167087646,518818645,2122438798,1963003916,1354771213,16777114,112640,2122407403,1963004172,176063258,-2096729087,1963068030,242679599,1342177720,16777114,-2082804992,1963330686,176063263,-1962511360,-1264382394,37651206,141819906,-1710590209,65535,401326123,151813763,2122577525,-260833270,298202879,16777114,-2082084096,-443874579,-900899553,50332682,-16771840,50371072,-16762624,50371840,-16747264,50372352,50355201,18176,0,0,1167087646,518818645,-326903666,512448018,529207074,-150989128,-1961739730,205556720,-1913633143,1183445574,205949934,1962935869,9758979,1946159421,1064316,-219610251,17841408,289213044,-385649407,1961558167,-1705983957,65535,15761027,884475253,-1962546417,126611550,-1946401143,109020120,-14715649,1183647351,-6663954,-1962934017]},{"sector":15,"data":[-230504720,242679552,1342178232,384976525,1996426219,243726,17217616,-6664162,-16776961,62393974,-6664192,-1207959297,-1914109951,176063232,-16157696,-1710111178,65535,2062270507,687747,1183516276,112501518,33701507,-1477632,-6681994,-352321281,172395487,1946157373,146695,-789888652,1343210168,-1207011585,-1202716669,-1202716671,-1202683905,-1202716671,-1706024950,65535,141934603,191891143,-1880424448,703073936,1310624512,-2146961917,-6683276,-16776961,28839542,-6664192,-385875713,-2090926227,-443874579,-900899553,1478361098,-1957345904,-661774612,1460726915,572427094,-1205892337,787939350,-125103558,-1995423349,1187509830,184549620,-385649216,-661978999,126558091,-940423543,63558,-1946788213,80118583,972179083,1065220166,957334177,-2093976316,1962996862,-129594596,-230278336,1755386740,1779862299,173291803,92214652,1980253241,38046478,-1996204917,1451883078,-11998212,-964429754,-2084967674,1962996862,-196688121,-1611988991,-150993224,-259263890,-1962479997,923006558,-1593522557,70848450,20824956,-1593215744,378213222,-1142221976,1344276408,16777114,-1958221056,-1962717666,1452014150,340232700,1377195913,-26032,512425984,1204224846,721420296,-1706012480,65535,-231681,96008822,-6664192,-1996488449,1451883078,1380995836,-26032,1599995904,-1962742397,1297948645,50335435,-16755712,50371072,-16696576,50371840]},{"sector":16,"data":[-16728064,50372352,-16625920,50340352,-16733440,50373888,-16745728,50374144,-16707584,50375680,-16640768,50343424,-16629760,50381312,-16699648,50381824,-16622080,50356736,50388737,50349824,-16634368,50362112,50372353,23552,1167087646,518818645,-327034738,1448542800,253894283,381165451,976156416,-1946645742,-388954559,-1996488411,1187510854,-956301068,63046,14567111,-297351424,62390272,-6664192,184549631,-1710721600,802,-16156951,-1206878154,-1706025418,65535,1023821451,58032136,1023445993,58032174,-1593795607,378215272,648223594,672565523,460103955,460199563,-1995408733,957381654,2115725846,11659523,104401276,57809768,-956258583,129606,-1961138015,-1994692074,-1979854202,-142186,1376926262,1354771280,1342177976,16777114,261928960,-695825072,95965437,1134186496,-1711276031,65535,55195391,-1705983957,440,191905411,-382897152,922683507,922688362,922688360,922688362,832183144,-385875967,922746725,922688366,922688364,922688366,-420799636,-36391169,-36522241,-36391169,-36522241,16777114,-695825152,-289910531,95965193,-6664192,-352321281,-26070,62390272,922701824,922686010,922686248,-1070918874,-4698032,1385779455,1354771280,-660975536,-1879048190,140437518,-940816759,214534,-1375287552,-2097151985,749630,-655817868,1958742791,320774451,320870027,-2097143803]},{"sector":17,"data":[1822621906,1846970651,459842331,459937417,55195391,-1705983957,65535,218529409,-955943552,-63930,-1727129439,320734723,320869907,-37452151,-37316983,-1996077429,1187508806,-2097151748,122430,1048774517,1946157552,105301765,1048838143,1962938286,-26107,512425984,931860542,-1323604319,65065732,102665200,38272768,-37058931,-1700704234,-1957674993,1143672388,922701836,346099726,239352080,1149964413,-1710298354,65535,-385464695,346161022,-6664176,-956301057,-16554490,108954623,-385647104,1183515978,-2146943738,1961427829,-2146878207,-18283659,-2146616059,233374581,-2144453371,222127732,-385649278,512427460,1342111750,134211586,-1961679199,957556758,1963699734,-1408878327,-385649397,28837548,922701824,922686010,922686248,-1398729946,-1374254325,637938443,672537363,-1202695661,-1722744833,-1070903214,-1706012592,65535,1342178488,16777114,111143168,-1961138015,-1994692074,-1979859322,-2080522090,1946214014,-532247796,-1098514023,-1063906819,321692157,321787531,-37710279,-2065104003,956727040,1929232006,-25988,512425984,1342111750,-562134270,-15633408,1996482678,-529072154,-955530008,56902,972834443,108981830,-1980873077,2122579014,92013308,15615687,1042189056,-1958769904,-1323604450,-1948003580,1093263430,320774404,320870027,-2097143803,1822621906,1846970651,459842331,459937417,-1947842933,-2037782442,-1769341500,703200710,976682756]}]],[[{"sector":1,"data":[-1061748974,-1095303171,1354771453,1342177720,276634,-1407284480,-2012771825,-939672954,33406086,1947024384,13691139,167870336,-941030540,-1132003584,-1165572355,-1142355203,-997815552,-963212291,77309,-1996432765,-1979859322,-2080522090,1946214014,-532247796,-1098503783,-1063904771,325493245,325588619,-37710279,58527359,973014761,1946009222,-16914173,305805055,-37701889,-37832961,-1202667477,-1706033151,1153,262938251,-2037905526,-2033713734,130492,1282738748,-1961662815,957573142,2097004694,956727103,1996340870,976682807,-1098478830,-1063875587,77309,1375787651,1354771280,1342177720,314266,-1407284480,222265359,-2030104971,-1367081540,-2097021506,16629918,305805055,-37701889,-37832961,16777114,302446080,57937931,-103703,-15582666,-147274,738049718,45633728,-979742720,-2147483648,-1089495258,1343200440,2011696784,-562134266,-1960283136,-1711424378,2145932859,990215224,829941318,-37976437,-2116008447,-2146957698,697901941,1444537926,-1961169944,-1946304890,-1979858794,1451877958,-1132033048,-532248067,31344327,-62470400,-2037710846,1143733694,-1199142650,2109737981,33483011,-38093184,-385649398,-1098907143,1963785658,32499971,43138691,-167152129,1963000388,31451395,49184387,-689372292,102664961,38797056,477082,-1266251520,-1841396739,192282370,-35617139,154265680,-1948105079,-1961869794,459710775,-523041615,512487427,1207894022]},{"sector":2,"data":[-1874951422,545128450,134643329,-15108736,-1979543538,721271430,-1070903068,-26032,-2037841920,1760296392,-38238581,-37976573,-38631799,-38224245,-50075695,35712897,-2037840501,1048837576,2080375442,-1195474115,914096381,956581003,2147332742,-1299805395,65065469,35663301,-4696240,-1299830016,-677752579,-1593835520,-2043084142,276692408,-37976437,43124265,113706731,-64878,16154243,-2037708428,1174535624,-1962087452,-1979856762,1187505222,-2097151498,16626878,512439412,1342111750,-196688126,1083834369,-1996488702,1178333254,-2095811322,1962996862,-70522621,16008903,-263812352,-1946434071,-16775650,1187447367,-2097151754,2113987710,-26050,2122383360,1971324934,-465138924,261752361,-1559258463,1183517618,-897177116,-897151491,1183535357,1356396516,-1705983957,65535,16777114,-465138944,-1948105175,60359748,1410532932,773208840,2131590163,738605830,-1207602669,48955393,-2037792725,2122448310,1954557446,1975520004,-1199142113,263677,2097431611,-498693352,261752363,-37185909,-489487439,91669051,16533191,-1229028608,393478397,705694624,104548580,192289638,17974518,1187448181,-1962933252,-16775650,-6684081,184549631,-385649216,2122578907,57934068,-939797783,128070,417690,-263812864,1946568251,-71440125,971916939,58719302,-1946226455,1183448134,-1845049362,-369099006,512491233,1342111750,899074,-2037559216,-1873740342,70969358]},{"sector":3,"data":[401035,-956151809,656966,401035,-16625665,1996424822,-897151502,244338941,-1996220440,512490566,931860542,-1323604319,65065732,40141040,135168254,1721827600,-364476133,57982987,-167735063,34605062,178266997,736373264,470156242,504763152,-963233008,-385649667,158793889,-37452229,-1763114121,1354771200,-26032,922681344,922685474,922685472,922685470,-6680548,-1962934017,-1961869794,1713277759,-754667237,104958435,-955756151,261190,1187470827,-167769082,17828102,116787829,1963069449,-11998973,19610,102664960,38797056,-939656983,591430,-2080427543,1149964526,1141086468,139727622,-316011382,-763117309,-963233024,1997632253,-997836026,-2146863363,-130460,65792590,-1961834877,-1072956346,-1226243203,81405,-1360460929,146941,-1494678659,212477,71108734,-379948032,714800537,-16777207,244378230,185086184,-2091420480,1946418302,91331124,-1073020928,1183525748,-754667030,1042189280,-1996029168,-1946308474,71797720,105317273,990402323,2132503062,990280741,1998284806,-364475619,244338752,-351803160,162437649,922681344,-1070922934,15243856,922681344,922688362,922688360,922688366,28842860,-6664192,-385875713,648150293,672566035,2081831187,958690576,1964014086,21666334,2122514432,326435066,253894283,381165451,976156416,-2131195118,-939719071,801798,-1203862784,427032582,276838143,1344157368,16777114]},{"sector":4,"data":[-1070903296,-6664112,-352321281,110270981,-1229455360,-289910769,95965193,328880128,-956301306,16915462,-2090902016,-443874579,-900899553,1478361090,-1957345904,-661774612,-1592988541,378215272,1183390570,-61437446,-1995235677,-15523818,1376926262,78223952,-2002714624,-1978234085,-196703973,-1577691511,78711570,19261651,-129595136,166594295,91554304,-352321096,-1547687166,645927452,-1195439631,-1873802770,18409486,236455623,922681344,922686010,922686240,-1070918882,-21475248,-1070903169,548950096,1347590400,16777114,320774400,320870027,-2097143803,-1398603566,-1374254837,-1845049589,738197250,-6664000,-1962934017,-310118330,535137026,1439386973,-326898549,2144262,236455467,-1191557495,-11530708,-1710352330,65535,-1979955575,922746454,922686010,922686240,548934430,1347590400,-11485141,1996488310,236495356,-1706012007,65535,721428664,-1727129594,195823145,195958297,47843015,113704960,4912,305805055,-1727129439,320734723,320869907,1183535186,1347590650,1347469355,16777114,809403136,175374355,321920651,704267915,113706055,66266,-1961136991,-1558483434,378077844,113705622,744,246955651,-1710918400,3402,-1017256565,1167087646,518818645,-326903666,263632902,108461904,1342180024,811930,1958742784,-1608610982,-1960867055,39291655,-1980086647,-1935541162,-1911125246,-61458174,1178142069,-1205308166,-1202712002,-1202712650]},{"sector":5,"data":[-1202713176,-11534326,1996487798,210803450,1183514624,-61436934,-1996321629,-16609770,-1229453706,95965199,-1583722496,-2097151988,-443874579,-900899553,1478361090,-1957345904,-661774612,1466887299,406750038,58466318,-1962789912,-15853538,-1978787834,-2021127610,2122321452,158599690,202014336,-1427569804,-18432,-1560058205,251593374,922684952,513872442,538348307,2098451,1375785603,167680592,2123169792,184729234,867763990,-5901824,-401729530,-1564934583,1183666193,922701970,1183650642,-860335982,1723355152,-6664192,184549631,-2096335424,1155646,-1699216012,-1207702529,-1957691290,-1961779170,-1962439905,-2002582953,-1978234622,-1706012158,65535,1351763597,1343278264,1342190520,638874,976682752,-26094,244318208,-939711512,326726,-2097062935,1186878,-135724171,176062464,-385649397,2122318062,58001674,-2147424791,1964968574,14477571,218791552,-739703947,-1908505856,57933840,-1711224343,2259,705185418,-1070903068,96377424,1183383552,2126515194,108461836,1354771280,442522,976682752,261792016,-1969139648,1510353680,1183666190,-1202711032,-1706033151,65535,42993407,33179275,-1592813050,-1297936486,113613323,211877888,-1710868206,-955745265,261190,-1711228951,3492,1299562507,-1994692959,243988550,-316010485,1925266249,10152195,57018055,2145976319,1042189060,-1960867056,78772342,1487005395,1511426819,407910659,1077478773]},{"sector":6,"data":[-1710328810,3587,1685438475,-352320840,-339727518,-62470306,1525350401,303840899,-2096335872,1084990,79184244,-951784704,-16554490,70052095,-1962716511,956519446,2082171414,956727078,1914398726,56140062,56235659,459937337,108794239,459802169,-359003789,184549384,-1207601728,65732611,-1996488264,1183579206,-2090901764,-443874579,-900899553,-1957363706,82609132,1343106232,1342185656,699546,-62486272,-108919,-15582666,-15523786,722673206,1347440832,-59310254,-1728044872,-660975534,-2097151990,537635846,195958403,-637090048,-956301310,1257478,976682752,503743250,377692179,-16772320,-15523786,722673206,-1202696000,1385758752,185965136,1048772608,1946161968,807308040,71795475,-637090016,-956301054,923654,1575324416,-326412861,-956109693,-16554490,54323455,1342407352,-1207666945,-1706032897,3019,50555553,1343265798,269367039,16777114,-28931840,722673313,50549254,-1559357434,1183515282,1575324670,1426064066,-326898549,-950642920,63558,721700491,-1995565050,60422726,1444087366,538327816,997094675,1964187142,-92372120,-1962246400,103351366,-890696168,403097345,-1593835506,378213158,1446581032,2084077320,105265413,-1070911117,-1979824503,648150086,105261843,-1946663287,1451951686,321299208,321394313,-1995685213,-1962130410,697956422,420195334,-1962168810,697956934,420683270,-351068138,71732040,105251737,721966611]},{"sector":7,"data":[453749766,-1995723242,1451881542,2094140406,184844070,-14649664,-1709473226,65535,-1979955575,1183579734,-129594892,32921227,286292486,-1961853930,1183384646,-129594374,2130331193,-96040177,-1711782357,195823145,195958297,16285315,-337050753,1488896,305802999,1049352331,1032523554,1183383947,-2585614,142016311,-1710852353,65535,-1192737143,1861681164,-1947169816,923005534,-1996175741,1150020214,-2132225788,1183416292,105155564,-1995942773,1451880006,175932400,-1957989120,-1952843706,1552616524,105786126,990404123,2134342874,1925724932,-2110324943,-25755877,737965823,-11513664,1183575158,-262763538,319178243,69929046,1375884315,-129594544,-1706012007,4355,922690539,1996430210,-59310082,1347469355,305805055,-16222465,1183516278,1347590648,16777114,205431040,1946157629,212243,1183521397,100768248,370216006,216730696,-1711782261,206571009,206706193,305805055,-16222465,1183516278,1347590650,1350565816,1347469355,1637503056,1577058314,1575324511,503318210,1430622296,-1910575989,250381272,1042189142,-1959294192,78710342,-268181293,15877831,1711720192,-253,-15582666,1962870900,1354771206,270939903,270808831,1342179512,16777114,108432128,-422378319,-1961834877,51396126,105286455,185502272,1005398544,-163351615,1946223172,56140060,56235659,1963480121,105134352,1149963125,205794062,1962820667,40140833,56140286,56235659]},{"sector":8,"data":[-1996077943,1149962324,205784062,-955366263,127558,1183658219,726669044,922702016,1149964302,205794062,242548560,151450,876019456,-196702960,-6664170,-2097151745,1283461358,922681602,1996424010,1354771206,16777114,-230257920,49120094,1562371467,182861,1458342741,305805055,272506507,512440203,78715750,1895818195,108068616,-11485141,-15718858,-1206901706,-1706033144,4433,305805055,1343207096,1342177720,16777114,-443851264,2802525,244711427,1966335,204603395,2031871,299565315,8323075,137297923,2162943,24051715,2359551,157941763,2490623,4390915,2621695,48300035,2687231,238354435,2752767,161939715,655363,6029571,786435,191692803,2949375,270270467,3408127,248774659,3670271,221511939,2162690,154533891,3866879,306249731,12255487,217317379,4325631,135921667,12714239,219480067,13041919,212467715,13107455,263979011,4718847,140836867,4784383,161284355,11075587,249888771,13304063,278396931,4980991,14417923,5636351,17235971,6422783,280821763,6488319,176357635,4521987,305135619,6619391,61931523,6684927,218234883,15139071,298647811,4718595,123797507,16318719,33685507,16384255,224395267,16449791,189530115,16515327,240844803,16580863,156172291,16646399,195952643,16711935,301006851,16777471]},{"sector":9,"data":[1167087646,518818645,-326903666,-96039674,-26032,1183449088,-1176229123,-503906204,-1961398087,-96040240,-628366294,-1023155721,721178250,-2084502547,-443874579,-884122337,1167087646,518818645,-326903666,-1588177132,1183390566,1042189294,-1995994352,195096646,971254288,578022982,-1309772149,-1649916,-14980554,52127798,-396955530,-1073020406,1149962356,139758342,1988842219,-330905616,195035136,971254288,628354118,459945727,459814655,31516758,58048523,-1962896919,1722018886,105155355,-1995942773,1451882566,269197562,1178199082,-1206422804,-11527322,-14980554,-1709479882,65535,-1980217719,512490070,931860542,-1323604319,65065732,38074096,-2091551742,1795646,1755401854,1779862299,139737371,1144603253,-2093124346,1156976878,829686018,33703158,251603829,1149967206,139758342,-1980217719,1419442774,-2147483647,35352590,35260103,602603521,-2081667329,1240010950,281445375,460326646,-1708559358,867,460334720,436652029,-16777214,-14980554,-14981066,-14979530,-1206162378,-1706033151,65535,305805055,-362753,-1070860170,775356240,741801747,571411,-26032,-1070923776,459841872,1358448171,1343199928,16777114,302394112,1745224464,-1677327613,261792528,-1560053087,1990265314,165716739,57949835,1043986475,92078968,-352094047,-1547203838,1856049990,302818051,305805055,1343207096,1342177720,16777114,1042189056,-1591768304,78715750]},{"sector":10,"data":[-670834477,722356107,-1559633402,1453396106,1543897870,-196703986,-1995548511,116912710,-16773190,-1163845516,1023419407,208896000,688514721,17861126,183235654,17426081,17861126,1996485190,2050424818,39950851,1996423168,1947110388,2047748867,-125087485,16777114,1002898176,2114155526,112645,-1070923029,-955216221,17804806,-2090902016,-443874579,-884122337,1458342741,-167479669,1946223172,105155418,956847243,1333528662,1178142079,-1958186490,60359748,1410532932,139868936,92023935,1996899899,321691941,321787531,1963480633,105265446,1149968757,1141086468,139727622,1963480635,105265938,346099061,239352080,28837247,721611520,-443851072,442973,1167087646,518818645,-326903666,55417358,-1073020928,1924675188,-6664181,-1996488449,-12715450,-2128644865,750654,1023964417,58064892,-1207895575,1344146290,1347469355,-26032,1183514624,17885690,-1209528688,-129594884,16777114,1975520000,-401698631,1177287846,1654264,-6624654,-16776961,-1207743946,-1706033151,65535,459945727,459814655,460207871,460076799,1342177720,96410,62233088,-1073020928,1978205044,-972634113,-16777210,-14980554,-1709479882,65535,-1705983957,65535,256922,1958742784,-11605757,263077507,-1878690560,-59447282,16777114,-1177408768,-235470838,-1862908279,-64952306,-772387189,-1983380503,110818382,184549379,-385649472,1048837912,1962935992,-18427]},{"sector":11,"data":[28857067,-6664192,-1879047937,-68098034,737298057,1178334278,-1697680650,65535,-1980610933,-1024723898,1342927544,-1705983957,65535,-982138869,504066744,1354771280,983191632,-1207959549,1344146290,16777114,-21894912,-1962742397,1297948645,50336715,50610945,50359296,50613505,50360576,-16721920,50369536,-16668416,50370304,-16537600,50370560,-16535552,50372352,-16626176,50375424,-16551936,50346752,-16649984,50379520,-16699648,50348544,50580737,50374912,-16673280,50357504,-16544256,50395904,-16507904,50396160,-16545536,50396672,-16575744,50397440,-16772608,50397696,-16502784,50397952,-16513280,66560,0,0,1167087646,518818645,-326903666,142508816,-11438848,1996427894,242679568,16777114,309788416,1347469355,-1961998709,19730518,14320384,-6664110,1375731967,1354771280,1342177976,109722,261928960,-263811760,374864,13867600,1719664640,1183694835,138840560,-1710721281,65535,-15960321,-6681994,-1996488449,1451883078,108954620,-1202424832,-11529822,922682998,1996428114,281851910,-401698736,-1073019856,1048775796,1946161570,-6637563,1723335659,512446464,529207712,1468729227,42509058,42604169,244338770,-16700184,-860354954,867717136,-6664192,-16776961,1996427894,242679568,1347469355,-59310256,-1946519809,1385761350,-26032,-310181888,535137026,248139101]},{"sector":12,"data":[-1873273344,-326412987,-2082959842,1448572140,-1928113503,-259289986,867763990,-1582960128,1178145338,-165579510,17828102,1183517044,217064604,-166794490,34605318,1183517300,217064604,-1673099001,234636998,184370886,-1091404147,118884846,-234879559,-177831771,175570879,-16222465,1183647350,45633788,1183666176,1183666418,244338828,1593737704,49120095,1562371467,445005,1167087646,518818645,-326903666,-11118834,1996426358,142016266,-1202667477,-1706033150,65535,-1091404147,118885256,-234879559,-177831771,-62470465,-45693427,209125130,-16091393,1183647862,45633788,1183666176,1996443890,-401698810,1600060954,-1962742397,1297948645,503318730,1430622296,-1910575989,250381272,-1070901673,274631504,-1710983169,704,-1309129079,65065735,-1995839482,-1041630650,274631424,-1995946101,1200354374,-230258426,440656,1089750667,-150452343,-1037329943,726726865,-6664000,184549631,-385649216,1586168064,-95974404,-1946396789,440520,1861737099,-1946973196,-226587688,159989131,-1962774135,1200296030,-228685052,-930406517,-150993224,-259263378,721701001,-6664000,-1962934017,1200164958,274631428,1991,-955228533,8061511,687747,1183516797,-1982269686,-1070921146,274631504,-1710983169,65535,-1309129079,65065735,-1995839482,-661915066,-1946388853,1418459716,-1995994628,1586168407,38243088,100288003,1183383556,50826230,67500614,-62486272,-11485141]},{"sector":13,"data":[1183709814,1183666422,1996443900,209125134,-16091393,1996425334,-401698810,-1073020863,-51838091,637182,-1946652937,-1004631056,105414673,274631425,737953419,70122054,-1962440448,1183518814,-96064522,-1996487635,1599996487,-1962742397,1297948645,503319754,1430622296,-1910575989,116163544,176063318,-1961394944,126554206,-1962932731,121311838,1183516790,-1982269686,2122517062,58654730,-2097089559,1969621630,241077043,1474435,1187456372,-2097151494,2098068094,-92894438,-422378831,-2096210293,1962940024,440700165,1191123179,-941560838,1444422,-15829249,1996426358,-26102,1183383552,2126515196,-62456061,-1961730421,-62510329,-1961861493,113345295,1131659579,1474179,-1070922379,-16729111,1996428918,8435732,-26032,1586167808,276204308,1149973643,-61568006,1468598153,308185858,85214859,126419071,-1961861493,67441734,-2096658176,2113993854,274631481,1988829067,-62485742,76219433,756303403,1200160772,308185860,1325342603,-62485764,1996425096,308185870,1346373515,-1694730497,65535,1586173931,-954234096,-64441,1586170859,-1959294192,1149894212,274631428,1183522699,139889414,1468598153,274631426,-1962539133,340142855,-1728052179,-150993223,341740537,-1199618168,-2090991615,-443874579,-900899553,1478361106,-1957345904,-661774612,1443294339,84428427,1183383574,105286652,-1996483067,1586231878,-1959293956,926546526,-167038859,1996429429,108461832]},{"sector":14,"data":[1342203576,251546,1975520000,112665,1586176747,-92894212,1418396811,39270658,121177205,-1070922636,1182993131,1182991612,-1226111750,49120094,1562371467,218417741,486540032,520158976,922747648,553713408,1929380608,704708352,1946157824,738262788,83886848,755040005,1442841344,939589376,-234880256,1275133696,201327360,-721355006,1157628672,1711341312,-1895824640,-201261310,234881792,2130771716,1191183104,-2097086718,1744831232,83951360,1,0,1167087646,518818645,-326903666,-1957275890,1988692086,1979059196,229162499,704791690,-754404892,-162624544,184608128,-163149375,344653860,-355267919,4186753,1183433227,172395510,-1962930395,-511641522,-1983837200,1150023750,-1947676410,2145878520,-2134408960,325391,-2130414334,-134479897,1962999812,-1605372,38074365,74776832,-16783487,17188086,-410975115,1183580031,992760,-427763829,-754667249,-1983771678,1183578182,1958742790,81188,37554804,1024095232,1064632323,16533191,-163148544,-59310256,-2097136152,1946355326,-128021206,-1946919287,-754667257,132415720,-2114828663,-1962930393,1183577182,165729266,-163148537,1354771280,1577061864,49120095,1562371467,445005,-2115204267,1459667180,106859350,-1325250677,636015364,1183385600,1958743038,236757276,236852875,1963087673,1963407657,37128997,-1001994480,-588709887,106859265,-1961132383,958103574,175440471,108332857,228603531]},{"sector":15,"data":[1187504107,-1962934076,-1961673674,1149961822,106203908,1963087673,1963407628,-968440056,-1595342848,959744769,1964194870,-968439842,1996423169,-26106,-259325952,91616779,-352321096,-1983894782,-1072969658,1961427829,106859265,-1325250677,-2132225276,1183387620,-25928,-259325952,1355564685,-1202667477,-1706033102,65535,-1962516853,-754405113,-1176229144,-503906294,-2084813175,1946222206,922701845,922685576,43649532,-150994942,-867792424,1996437483,-1506345028,94418957,36084304,-654901248,-154384759,1954527302,-1203336420,-1191149787,-369688556,-1674117296,94418957,-26032,1183383552,-1203308594,74712064,30820038,12076791,-972786687,-150874298,33601606,-1128790668,-1207702782,1183383952,108462036,16777114,-901347072,12076791,704934920,-166925376,1954592838,-352210940,-1962758142,529255006,1183319818,-1069103139,1586167808,-2145416246,1963131263,-1069089021,-1949671797,-1069153529,1183666240,548950238,-6664192,-1929379585,1343671366,16777114,474253568,141934603,16777114,71559424,-1962516853,39291655,-1996209015,1586169428,1074236362,-26032,1077936128,-775804007,-1102673416,-26032,1183383552,158679226,57383510,183042048,-899773692,1586182143,-13107270,-6635914,-1962934017,1149876806,1010186508,-1957399533,957561886,-1957923785,38046492,-1962784887,76218972,1017186185,-1962637037,-1961673698,1149829703,-1994618110,1552614007,-1992849150,-1961673674]},{"sector":16,"data":[-2092987620,1979647613,75334406,-1961855745,2361413,1981808701,-6662394,-2097151745,1946207358,47704323,-100609,-1897390988,1975520003,58714371,13008515,417923957,-2080470270,2122516679,91488510,-351885151,111321347,1351763593,378947213,-26032,2122514432,57999560,-16672791,-1070886282,-6664112,-1962934017,1149873990,-1837695214,503414968,112720,-26032,1177223168,272927151,-1986509173,1183519812,373590426,-1986509173,1183520836,440699294,28133110,2122385269,2080440224,16758789,1183515627,-1874425440,1344160909,-1198491905,-1706033056,452,-1949671797,4161567,1190541685,863301805,-1198360833,-1924136928,385838214,92379728,1586167808,1074236362,1820757328,-1818603265,184549381,-1962117696,529255006,615335562,-1962440464,1177261638,-1941534308,16678531,-11508108,-16122826,-1710192586,1208,-1728051963,-150992199,-4697863,-879079424,704643076,-754404892,-2146595872,-1056243483,1190528393,628361389,-6260993,-16127434,-1710196682,1256,-1728050683,-150989639,2142785785,-73773056,-352321532,-1983894782,1317047878,938150031,-1198754049,-11532896,-1710381514,491,-1728051963,-150992199,-4697863,-6664192,704643327,-754404892,-2146595872,-1056243483,1187448201,-2130706290,36086910,1317012606,2122318479,74711206,76500608,10976896,1317012596,1190527375,74777005,-2138157440,-2138159477,78712804,1301012691,266436866,-1983837440]},{"sector":17,"data":[1166737989,-1947196414,-511637940,-1056243697,-2097003127,1946222206,1250331954,1216776703,-1472790529,2144262,1216777040,1344159999,16777114,1216776960,-1957674753,126601822,-6664128,184549631,-1976666688,-467008444,-511701621,-1983837440,-25263355,-1988201472,-1961885130,1418396740,236757766,236852873,1343112333,-351163208,1218349948,-1387885825,126414884,620905867,-11534321,-1694545738,65535,-12155255,1962999613,1216777010,-1957674753,1090472070,548950080,1268404224,-1962934266,-956348258,-1962737337,254083653,-1224781824,-6619320,-1996488449,-1962981754,721372806,-2146595868,2028536033,-1607038465,71600909,-1559866229,378084222,1150098304,1354256398,246960142,-1483059200,-1962934270,1418397764,106182922,1144588405,-385649404,1586167973,138709766,-1995811701,39291143,294531,-1897331851,75401984,-1962516853,78709319,-461313837,1116113167,-1995994113,637485190,179372095,227270867,184804736,-1979348543,721371526,38636516,184607104,38111681,-12417397,-788496603,105745376,184672640,105220545,-33135232,-33331840,-50240128,-33462912,-12417289,74711552,16862592,-12417289,74712064,33639808,-12417289,74711296,16993664,-12417290,-2147191680,1577125453,1575324511,1426064578,-326898549,-2091493622,1946158718,-1472298115,91553798,250200107,-1472790783,74907398,481178,1958742784,16312579,111687423,48905859,-1207602176,65732622,1342180792]}],[{"sector":1,"data":[506522,-1449504768,184549383,-2094697024,191038,922684276,-6682968,-352321281,-1976107251,-1472790778,-26106,113704960,1704,179610,-1472298240,-1804271610,-1705983957,65535,1048808171,1946158754,-1573453949,74907398,16777114,1975520000,-1573454053,899078,-26032,-1706033152,2020,492954,-10950400,146798123,1211513104,-2091024893,1946169981,846593873,-1710983425,2046,1115013131,1342180792,549786,-129595136,111294207,136419920,1187446784,-956301062,269022790,2147120697,-161576013,3309443,2013203316,-126419150,471450,-96010496,955664003,-2092507413,-1645528889,1577058744,1575324511,503317698,1430622296,-1910575989,108462040,425603,1048775796,1946157802,964613,230163435,1369067520,1342177287,-2080463640,1946158718,33998612,-956301296,-15852538,503760895,-335544562,-1610168558,-956301299,-14975482,-2147039233,-2080375013,-443874579,-900899553,50338050,-16666112,50399232,-16677376,50399488,-16392192,50399744,33800961,50334208,-16493824,50373632,-16384256,50342912,-16577792,50345984,-16268032,50379776,-16280576,50347776,34062337,50343168,-16477440,50383616,-16378112,50384128,33730817,50346240,-16590336,50354944,34040577,50349056,50821633,50349056,-16506880,50359040,-16482304,50359296,34074881,50353920,33806849,50354944,33833473,50355200,33795585]},{"sector":2,"data":[50355456,-16586240,50364928,-16583168,50398720,-16623360,67328,0,1167087646,518818645,-326903666,1008634628,38243091,1358710409,216534672,-62485760,-1962742397,1297948645,-1873273141,-326412987,-2082959842,1586169580,109019910,-2096728577,1962869887,106859353,-1994635381,-1599997370,1977105165,-339727612,268607755,1963345465,112649,-26032,2122514432,276037882,-1694861569,65535,-955883893,7239,-2096734581,1946160255,209190664,16777114,106859264,-16496697,105367551,-310116353,535137026,46812509,-1873273344,-326412987,-2082959842,1187448556,-352321286,8304706,-1946521865,1921513432,1954545683,112645,-1070923029,201082505,-2096728896,1962935934,-58817780,-2095745792,1946159230,8304655,100298487,-1873800340,-13768690,-1577433345,1178142398,-2085192454,-443874579,-900899553,1478361092,-1957345904,-661774612,1443425411,-1878624513,9431054,-1946401143,-1961673674,1183386692,1958743032,-60912792,1346373515,-1946657141,-1706016761,65535,1366671371,704988298,-754404892,106859488,-511701109,1975597824,38243132,1418457124,-754667258,266764522,-1036262701,1200301941,992514,-2147070837,-1056182047,-1962523511,126486110,1284236330,14778372,1149878539,-339309820,959744778,1964194870,1589652358,-1962742397,1297948645,503317194,1430622296,-1910575989,116163544,106859350,-467007606,-1946532215,-1961942498,108432159,620905611,381222927]},{"sector":3,"data":[-1948125440,306220016,-1946401143,-1960866856,2145681415,2012890683,-96024827,1586167808,-1959293956,-472778146,1577205899,-1962742397,1297948645,262858,9240835,458753,21495811,10748159,6684675,4194559,7602435,4521986,0,0,1167087646,518818645,-326903666,-29457660,477429761,113393283,-2095745792,442430,1218055797,184549377,-1878690368,15329294,504066744,1354771280,-6664112,184549631,-385649216,113705162,476,191891143,922681344,922683018,1924665916,-1706025461,65535,-1519009781,111951491,-15567872,-1207522250,1344146290,37530,1975520000,-1371634804,359923718,112080639,504066744,11442768,-1073020928,1894318964,-1438743553,359923718,111818495,504066744,-26032,-1073020928,1424556916,192067839,-26032,-1073020928,1924674421,-6664181,-1996488449,-12714938,1024357631,158662652,-26032,686358528,192067839,112720,-26032,-1073020928,350815092,192067839,-6664162,-1207959297,1344146290,16777114,-16914176,-1962742397,1297948645,-1873273141,-326412987,-2082959842,113708268,1734,32521859,-1709149184,65535,57982987,721541097,31761344,-1711148893,543,57982987,-1878932503,29878286,1342177720,16777114,134673920,57934096,-1962824727,-1979494882,-467008697,-1946925431,126563935,-1309387125,65196804,1060290,-1695136119,65535,-1980086647,1048837206,1962934812,9103619]},{"sector":4,"data":[12336771,-1589283584,378215276,372841326,108338026,459802169,512438900,1822491470,1846971163,374815003,92021375,1930708793,-161576165,-1727772789,319178499,372967511,1182735210,104531580,1047993192,35274371,-2096598016,-2097022354,-1593770914,378215276,372841326,192224106,459802169,-6683275,-16776961,1996487798,-25862,1822031872,184549378,-385649472,-1070923540,-1560232797,480448026,1174812930,960263171,1963064838,460366134,19261649,35300096,54920903,922681344,922688362,922688360,922688366,28842860,-6664192,-1711275777,644,57982987,-2097111063,99902,244322677,-1711200024,765,57982987,-16742423,1963034638,-18320,-26032,-1070923776,-6664112,-2097151745,359793658,1077740919,-955354611,16900614,-1341733120,-352256255,-502872308,-956301311,1258401798,-18432,-26032,-1331625984,1476802817,-400720613,-1073020381,95950452,-124104704,184549378,-1207339584,-1706033151,65535,16777114,1975520000,1354771217,16777114,1278672640,-26085,-310181888,535137026,516640093,1430622296,-1910575989,216826840,55451275,2916227,922709108,1183647370,-1202710794,-1706033151,857,55451275,-1926465537,1343682118,1342177720,16777114,1958742784,-1069644991,980746246,-1980217717,512488518,1194918734,-1962508786,1183387207,-196703244,2130462265,1312227085,1996443651,-25860,512425984,2013201230,1354771244,-26032]},{"sector":5,"data":[-310181888,535137026,516640093,1430622296,-1910575989,753697752,1310624598,912231171,1149974411,1141086468,139727622,-2097151699,1347551450,1347469355,16777114,-599357184,-2206071,1376926262,-26032,983629824,1980119314,-1591315173,378211934,1446579808,2132442334,-599377659,-22998158,1477386,-564774645,92214908,1927038521,976682767,-562626798,-1864599809,18868238,957495969,1963045894,306749717,25298489,1352731765,-2079966973,-385649407,113705137,4288,-1559086431,1218511284,25338642,-1560063839,512426372,529207074,-150989128,-1962822610,272665584,-2082847095,-16560066,1048777077,1979649464,112645,-1197402389,-1961759987,931912286,-150993224,-1962717138,71338968,-1915206007,-1202659258,-1706033138,65535,719406730,-6663964,-2013265665,1183703366,-1229434655,1183469569,1357130464,16777114,-532248064,-1241127894,-700020479,1191172235,537380566,-1915193601,-1705978298,65535,-959029621,-6684665,1577058559,-1962742397,1297948645,-326412853,1443163267,-150992456,52123694,-1995324410,113770054,33554824,1075533985,28313147,-1070922626,915085547,183177668,-16614271,-2081459073,1983449542,-1192134658,-1956773887,516120037,1430622296,-1910575989,183272408,172395350,-1961134429,-1961942498,1488927,-1962250505,272665584,201082505,-1962314560,-2095084584,494207039,1621344299,241083150,184420039,113770495,2147420928,55576263,-974520321,-60912896]},{"sector":6,"data":[126558091,-1946794359,1451951686,66824,1375785603,-60912816,67438475,112742400,45633536,1996443648,-25866,1352859648,-60912893,112736139,1345255168,-1948742909,1351288384,-129595128,972707465,930875478,1178142079,-1959759354,1452013638,241083386,241178249,253894283,381165451,175044352,1082912907,72387330,-2097151739,-22871854,1476874,-2093225205,217150,211880309,236358407,-1961628921,529267806,-150993224,-1962717138,-1962898448,1587741264,1612089614,-129594610,-1543874933,378079998,251595520,-2090990768,-443874579,-900899553,50340102,-16468224,50366720,-16585984,50400000,-16698368,50400256,50346753,50359296,-16720384,50400512,-16451840,50400768,50396929,50360576,50399489,50360832,-16639488,50370560,50568705,50364160,-16576000,50372352,-16525056,50340096,-16471040,50373120,-16454656,50374144,16962049,50337536,16947713,50337792,16950017,50338048,-16462592,50342912,-16520704,50377216,-16675840,50347264,-16578304,50348288,-16642304,50348544,-16728576,50382336,-16397824,50384384,50356225,50377216,50545665,50380288,-16544256,50362624,50362625,50354688,-16768256,50395904,-16619776,50396672,-16725248,50397440,-16716288,50397952,-16687872,66560,0,0,1167087646,518818645,-326903666,-950642844,59462,14304967,-264338688,242548737]},{"sector":7,"data":[31342211,-2096663296,122942,1183651700,-1070903076,440400,-26032,1187446784,-352320292,151451172,125108496,269027062,-1207602174,65733016,1342278840,1356613261,1342179000,16777114,108432128,1116595921,-666465828,184960651,1025995968,2087976961,1962934845,18016515,1962935101,25225475,1962935357,68872451,1962935613,85190915,1187459563,-955252504,268884550,48905859,-2095418368,992318,512430964,939462436,1343266488,237210,1975520000,-664892666,-1091098752,1183514625,-62486040,970606219,58522694,-16454935,1996425334,-664892420,58013573,721734121,80210368,283657927,-632895728,1822494742,1846971163,1779841307,957117723,1964730374,-664892666,-2080823424,1270846,1586169461,-819494696,112868995,-15371264,-1710510026,65535,1081459211,-2133303669,954988327,276838143,16777114,1958742784,-700004565,183173120,2080375101,212229,1996428670,-25898,1183383552,1975520214,-664892441,-1695078528,65535,205405827,-2096663552,127038,1586169460,-30965544,-385595416,1187512121,-955244312,270850630,16777114,-1979303168,-1961855738,-14978018,30710327,20774912,-2092403712,437310,1048778613,1962935982,1948158736,-1707606245,65535,1946157373,-1405189334,192151558,111949567,185172968,-2095548992,437822,-622263435,-1372127234,158263302,58048523,-1946235671,662755422,-20715011,1088964295,-632895728,1183649868,244338922]},{"sector":8,"data":[-16496408,1102579830,2122338320,192217324,15367811,146277748,721611520,1603948736,-16777214,1119357046,2122338320,192217327,15564419,146277748,721611520,2140819648,-16777214,1136134262,2122338320,192217330,15761027,146277748,721611520,-1617276736,-16777214,1152911478,2122338320,192217333,15957635,146277758,721611520,-1080405824,-16777214,1169688694,2122338320,192217333,15957635,146277757,721611520,-6664000,-1207959297,787939350,1183388218,572427206,-1960867057,307792880,133635979,91586560,-352321096,-1983894782,-1072967098,113725556,3886,305805055,1342178232,1342177720,16777114,1958742784,-800667851,2122514432,326960080,-150986056,906350702,-6664175,184549631,-1706461760,65535,253894283,1988829067,307792838,1333796747,113737729,-61658,-3258681,-163148801,-942389623,53318,63995523,782325629,-800704241,1085806460,-800159232,103932115,1022037798,254674687,-338671873,-830569579,-2144502528,1962997886,2275367,97545975,1183387958,-732001332,1346373515,1087129227,-26032,-1073020928,1183516277,-834238000,-338671873,-125927261,-2091158272,2097204862,775848789,75301647,254674687,1208954529,-1949415799,931910750,2275414,97414903,-1924132554,-1706032828,438,-6664128,-1207959297,1317666880,165729230,-1961941498,-1961942498,-964785377,-1961731701,23560223,-767113345,2122514433,1618215122,13649607,-797015296]},{"sector":9,"data":[-1588232957,1178144558,-1977254448,822399046,-962574712,-970022586,-1205820858,1861681186,288818640,-1555657392,105093712,82509824,10503878,97535627,1183387718,-1640562748,1183666182,-11528544,-2135374730,1570394112,-16777210,-1511272378,-1579655541,119607078,13649607,-797015296,-385647613,1996487749,-800683256,1343243781,969819787,91607110,-352319304,1354771202,319898,-800653568,1187501035,-955219736,277469766,1357530765,149425808,-327254013,-1962576640,65792582,-1979711560,1996463686,276871176,1354771280,326554,142016256,1343259064,10387075,146277749,721611520,362434752,-16777211,-2101868426,2122534928,91554206,-352319304,1354771202,339866,142016256,1343259576,43941507,146277749,721611520,1234849984,-16777211,-2068313994,2122534928,91554718,-352319304,1354771202,354970,142016256,1343260088,15695488,2122386549,1962995949,571397,-1070923029,93035088,1996423168,277264392,-276922288,-2129890048,23653758,146277749,721611520,-1399172928,-16777211,-2017982346,2122338320,208994543,-521306495,-1207601919,48955400,-1705983957,575,-939843351,285272134,98191047,-82581231,1342177720,16777114,-1650432,199883846,-2090901765,-443874579,-900899553,-1957363708,49054700,205405827,-955878144,17203718,-2109832448,108855302,-1560170847,-1365178750,-2113521407,-949980154,141360710,109852415,1342177720,503868600,1685584,-26032]},{"sector":10,"data":[1174470656,-2109832194,259260678,-100609,-1710849482,65535,-1191295351,-11533916,-6619530,-16776961,-1207525834,-1202712560,1344145516,1343230136,1342210232,16777114,109224192,-1962824029,516120037,1430622296,-1910575989,418153432,16533191,-398014720,748748800,773229331,1846950163,2132507675,1812347142,-15501797,28837494,314068992,-1248178176,-385875962,1996423448,1354771206,1342182072,16777114,976682752,1781989138,1748434715,-26085,1822490624,1846971163,1779841307,957773083,1964730374,166639632,108461904,-1207848472,-823588370,1781989120,1748434715,1849098011,1815543579,-401698789,1183384529,-162100748,305805055,459945727,459814655,-1202667477,-1706033150,1899,1343200440,1357530765,1342178744,26010,261928960,108461904,-1593745944,60362272,319849478,990938646,1669330518,1178273148,-10718220,2122573894,1400845032,1358954424,726684313,45633728,-6664192,-1593835265,246484894,19261651,-1948200192,-444535730,-1983837249,1183706182,-1665642262,179851279,-6664192,184549631,-6261568,-1665661322,1183666191,-790081284,-58817791,-2087947002,2117265534,-18880253,1357530765,-402229505,-310181534,535137026,46812509,-1873273344,-326412987,-2082959842,1187474668,-956301164,38470,305805055,459945727,459814655,543386,108461824,-1202667477,-1706033137,2185,1342898872,1352156813,1342190520,470426,-1740206848,108461904,-1593782296]},{"sector":11,"data":[378211938,372837988,1266424686,104400511,1131813740,-2087303425,2134021758,976682810,1681325842,1647771406,113678862,1183645696,45633688,381177867,-1818603520,184549383,-4426560,45614710,1183666187,-722972524,-1803648255,-2086111995,2117244542,108461840,1342177720,1342181304,435098,49120000,1562371467,182861,1475119957,108432214,-1962639733,-754405116,75240,76219785,-388822607,-1996488411,1149961029,-754405118,75240,-1962523255,-754274044,4138472,-1978907255,-467008956,-1961933431,145818692,-1986467629,1599998277,-1034033781,-1957363708,-1957275668,2123040374,-1325102332,636015368,92864515,-1995815797,1149961029,105220358,-1995946869,1149962565,205883652,-443850914,311901,-2081649835,1448543468,-1962510709,1183515774,-1947196162,-2129511922,184553441,-28931647,604259466,-771313401,-1324053536,-2132094198,-1040039966,1317790762,14778620,1183432971,-62484996,-26032,1166606336,-1956684276,79846885,-326413056,1988843095,108956424,162944,76224885,-523040591,-511636085,-1053097728,1153829236,1586168066,-2146959612,1962935676,54823706,-523040335,-511636085,-1053097472,1153829236,1586168069,-2146959612,1962936444,105155355,-523040591,-2130555509,989921505,-972458815,-1962866620,134153310,752768,1149966965,-754405111,72190944,989913472,-972458815,-1962865852,134153310,949376,1149966965,-754274036,-2129818656,1006371041,-972458815,-1962865084]},{"sector":12,"data":[134153310,1145984,1166676853,1004808706,158601028,17908934,-16490869,-1956684281,113401317,-326413056,1988843095,108956424,162944,76224885,-523040591,-511636085,-1053097216,1153829236,1586168066,-2146959612,1962935676,172329745,1946371129,88393225,73304833,2088765439,292880392,956712331,158598724,17319110,-16490869,192708615,-1961790208,1144588357,-972458999,-1962865852,134153310,949376,1166741877,205797636,1153829236,1586168078,1577582340,1575324511,503318210,1430622296,-1910575989,149717464,1183536641,139889414,-1980086647,-2037515178,-1924071688,1358887558,305805055,-1962260853,330838,13796097,1996443730,108461832,16777114,16788736,1375787651,142016336,-1207535873,-1706032896,65535,-1232399381,-1165951240,1965096698,107905812,140411649,-125400320,-124846082,2143292414,-121732127,142409982,-1946532213,116128854,-1962522997,-2090989482,-443874579,-900899553,-1957363704,49054188,27630081,1183383552,71711230,-1202712716,-1705967624,65535,1963214395,74907423,1342179256,-16873843,-4698090,-6664192,184549631,-1207601728,48955393,-443826133,180829,1167087646,518818645,922736782,1996424862,-401698804,1996485682,-401698806,-1073020870,922692468,922683018,1996424862,75544588,201431632,1593769984,-1976107258,-1640562938,209125126,1342439608,16777114,49120000,1562371467,576077,1167087646,518818645,-326903666,-1640562940]},{"sector":13,"data":[108461830,-1705983957,3132,201082505,-15633216,-16343498,-1706031498,1477,65781803,-2097151560,-443874579,-900899553,1478361090,-1957345904,-661774612,-954143613,64582,673527,-385649392,1183515565,267396362,729071627,1962938429,9365763,1962942525,14346499,1962950717,19982595,1962967101,38267139,1962999869,50587907,-1962710551,4000326,1025274896,527699969,1947206205,268647714,71116148,1026061328,1114902533,-1711061527,65535,-1711063575,65535,-1711065623,65535,-1711067671,65535,-1929173527,-1163660218,-1942552815,768006,-11513191,-16348618,-16014794,-385114058,-6683906,-385875713,1183515390,269499658,289217652,1025471504,578031634,1947210557,269761829,356329588,-383028208,-6683942,-385875713,-6683950,-385875713,-6683958,-385875713,-6683966,-385875713,-6683974,-385875713,-6683982,-385875713,2122384042,1947214602,176062732,91492385,903322,172395264,1947213885,270613778,574428532,1025012752,460591139,-1711112727,65535,-1711114775,65535,-1711116823,65535,-16620055,-1207530442,1385758734,-1976107184,-1506345210,-1539899637,38070539,1258978945,-1710918640,65535,1357006477,-1763176816,172395512,1024475181,58064907,50473449,-13724736,722388135,498618560,-1070903296,244882000,266928128,1354771202,1342182584,14974592,2122525813,619380962,-1202667477,-2142240747,1962993534,-444693735]},{"sector":14,"data":[722594560,381178048,2122338304,108331242,15236739,28884085,733604608,397955264,2122338304,108331245,15433347,-425614209,732031753,397955264,2122338304,108331245,15433347,-425620356,-338102519,-339727481,112648,45614059,-1360506880,26011905,-1202667477,-1202716644,183238655,-1202667477,-1202716644,-1706033151,65535,35391175,1743323137,-532247295,-15615325,-1207530442,1385758735,-1976107184,-1640562938,-1674117365,21031179,234687979,237178384,240324155,242290285,243273334,245698188,-1962856983,-2144531898,539920,535364470,-1816132863,-1884815570,1354771215,1342179512,-1705983957,3909,325336707,-385649408,-6684418,-385875713,-1070923530,309328,-339727536,1354771234,1342178488,-352321096,1354771222,1342178488,-352320840,1354771210,1342178488,1342178232,16777114,12642560,-1202667477,-1202716661,384499952,-1202667477,-1202716661,183173480,-1202667477,-1202716661,-1706032672,65535,-16738839,-1207530442,1385758736,-1976107184,-1841889530,-1875443952,-176821488,554636814,957295887,1477397519,1997497359,-1955992817,4000326,1024881681,410259713,1947271741,285424922,71113844,-349211631,-26037,1156251648,16777114,-1707218176,65535,922695403,330827404,1347590400,109721343,263468799,263337727,922687211,347604620,1347590400,109721343,268449535,268318463,16777114,-62486272,-229757,45615477,-6664128,-1711275777,65535]},{"sector":15,"data":[-1962742397,1297948645,1426065610,-326898549,2275332,84176631,1183387958,976683006,-6664174,-1996488449,-1070859194,1620048,-59310256,915098,470206208,-1962934014,46292453,196663,16712778,196744,16714536,196887,16715632,196888,16715520,196889,16715535,196890,16715861,196891,16715168,196892,16715160,196893,16715152,196894,16713713,196639,16715099,196895,16715091,196896,16714513,196641,16715075,196897,16715015,196898,16715121,196771,16714976,196899,16711877,196772,16714968,16974116,199560,196741,16714960,196901,16714952,196902,16715728,196903,16715721,16974120,196941,196745,16715714,16974121,196988,196746,16712683,196652,16713819,196653,16715799,16973870,196970,196752,16715781,196790,16713745,196664,16715059,196792,16711738,16973881,197743,16973977,197801,16973978,199720,16973979,199658,196770,16715804,196803,16711992,196680,16715843,16974029,198174,196784,16712676,16973915,199542,196668,16712488,196830,16712479,196834,16712449,196835,16713500,196710,16713268,196712,16713728,196715,16715083,196730,16715067,16973948,199587,196701,16714090,263]},{"sector":16,"data":[1167087646,518818645,1048828046,1962936006,-401698805,113704975,67270,-1962742397,1297948645,-1873273141,-326412987,-1193767394,-1706029008,65535,-1962742397,1297948645,-1873273141,-326412987,-2082959842,346096876,138819856,1491665788,269918465,2097694265,21883139,1021841040,1958742786,459847715,459061328,374864,-26032,-1070923776,-1560110941,-1599929702,1782481670,1383334675,-16222465,244319862,-1560168984,1996425700,1312227080,-401698813,1183384169,805750780,-939524337,-15781370,-1811494913,-956301296,17220614,1996443648,-466157818,-1741226231,23828994,922681344,-6680524,-385875713,28835981,-1581978880,1178144788,-1207206392,-1706033151,65535,379654635,138819856,28841341,-6664192,-16776961,721635894,949637312,-16777213,922683510,244319054,-1996361496,2122579014,125632518,411335,-1593054464,1178144782,-1996259834,1048774214,1946157724,805750540,-939524337,-15781370,-59310081,-16353537,-2096503754,171070,28837237,721611520,-23441216,-1929379839,-1873803706,35186702,57982987,-1694537495,65535,-16222465,244319862,-16765464,-1710214090,65535,-1961136991,958098966,1964730902,1745238284,-955878117,17217030,49120000,1562371467,313933,1167087646,518818645,-326903666,269787398,2097694265,138840837,346096619,922701840,244319054,-1996410648,-11469754,922682998,1048775140,1962939242,112645,-1070923029,-26032]},{"sector":17,"data":[1788936192,1958742803,81186,37556596,1024685056,326434819,16777114,-1710429440,65535,-6683157,-956301057,190470,460103936,460199563,-1996319581,-956131818,443398,49120000,1562371467,313933,1167087646,518818645,-1667114866,105265424,1048780158,1946157722,243717,1048784107,1946158752,178181,28844267,-2095322368,170558,112723316,-2096108800,434238,79168884,-1207702784,-310181883,535137026,80366941,-1873273344,-326412987,-942109154,1272326,-1673624832,1081344002,43531907,-2096139264,170558,113707125,136042,1048783595,1946157722,-1740733681,141885442,325715655,350945283,43662979,-2096270080,170046,113706613,70506,325729923,-1207602176,48955393,-310132693,535137026,516640093,1430622296,-1910575989,183272408,-167354741,343146759,137216907,951687440,1358558976,-1705983957,65535,-1962516853,1183387207,912231418,1183385483,106859516,704857994,-163149340,16271047,-1960973568,1200356446,-96075508,956843659,92207686,-336050549,-129564912,284968579,972441227,-612566970,49120072,1562371467,313933,1167087646,518818645,-326903666,-330920684,-1070903274,-1202696112,-1706033151,65535,1031061515,1039025803,91357696,1979843133,-330920682,-6664170,-1929379585,1343679558,16777114,-1960318208,1183516254,-1962440206,1183516254,38242804,49184385,-350981118,112653,-26032,-1073020928,28837245]}],[{"sector":1,"data":[721611520,49120192,1562371467,268618317,872481536,1744831232,-167705856,1778385667,-1409219840,1828717315,-956235008,1895826179,-788462848,1912603395,-771751168,-1828651264,-620690688,301990656,-2147417344,318767873,654312192,889257730,536871681,906034946,-1811873023,369099521,419431168,922812162,2046821121,939589376,318767872,989921025,-201325824,1962999552,117441280,1979776769,0,0,0,0,1167087646,518818645,-326903666,-950642836,38470,1352156813,-1202667477,-1706033101,65535,-1207535873,1385758848,10664016,-1962512649,-1606513704,-12743919,838795889,1352156813,16777114,-1367440640,-1201441792,-1706033126,280,1083590281,-175418252,-950866301,56902,1686122987,1686161154,1153842946,1149894659,1007100930,-2147060479,-336067996,38046227,37488420,1149897333,217588738,38045699,-2096839037,-898301892,1353598605,-6922613,1751095,20355664,1183514624,-2090901866,-443874579,-900899553,1478361090,-1957345904,-661774612,1460989059,10664022,-1962512649,-1608610832,-1960867055,-1961779138,495653952,-1995290485,-935592882,-1070922379,-16711703,1996424822,-163148292,1354771280,149146,-96040704,1065605259,-1193315328,-1706033101,613,1090012809,-4716939,13560319,1343173816,-500085,3389495,45390416,1183514624,263674,-899447,-661977482,-16222209,1183647351,-6663946,-1996488449,-661916602,1962950528]},{"sector":2,"data":[9431299,-1946657141,-263812857,1089750667,-260636848,-1963696501,1357130247,221594,-262239488,957298849,779355207,-1996208341,1191308870,-262239484,51279755,-25039242,74842832,65783435,-1962749768,1200222302,-262239474,32392843,1586175047,255238640,1946306361,38218542,32261769,1586168391,175606768,-2115209725,1980080382,-339309820,94418947,-1980735861,1586170439,-330920976,-1961605375,1600059462,-1962742397,1297948645,503317194,1430622296,-1910575989,283935704,-1564977577,107935488,512487563,529207712,295714443,-1961475957,340298525,1005997705,721778120,10021312,-16353537,1183708790,-1070903046,43817552,1183383552,-1948742664,-230258425,-613105653,-150993992,1077998190,1357923977,16777114,-196704000,-1207601856,1558970367,-1946919285,-62486265,1358460671,1089502851,1085811070,-14161152,1191118454,-159973386,1358579341,-1705983957,65535,-62488240,1996423296,-260144132,-1948811456,-1705971642,65535,1089498755,15761027,1586219391,-1960866828,1200222790,-196703486,-310157474,535137026,46812509,-1873273344,-326412987,-2082959842,-1957296404,1065354846,-1207601920,1122729983,16533191,195600640,2113685049,10664174,-1946390793,-1607037992,-1994652911,1200290398,1014965253,-15305717,1602946678,-1875378402,43706382,91602955,-335788405,-62456059,-2090941461,-443874579,-900899553,1478361090,-1957345904,-661774612,13823105,175570774,1354122893,1342194360]},{"sector":3,"data":[16777114,-146356736,-1233223680,-1207536384,1172930559,-1236890366,-401698736,1183448927,2147433978,-1706031500,65535,16777114,-96040704,1954545469,-1236890154,-26032,1183383552,-948682500,-150953288,512490094,117641632,-2080881015,1946158718,-2133292282,-1954544305,1204287582,-1962933752,-208930722,-1995946357,254019140,-523107407,-1963428213,-511703988,-2000614777,1586168903,-62485512,-14792823,-6620554,184549631,-1961265728,-1961779170,10663967,-1946521865,510722032,447386,-11015936,737834751,-2037559104,-1202651338,-1202716544,-1706033151,1783,1962967101,985563403,1974141183,9824515,-2037792725,-2037776588,1178206002,-2093386744,1946486910,537311283,-26032,-1564999680,-93391104,915134603,469963168,-2080874871,-1635187261,662765358,782142336,185565439,-500085,-1997857161,-2131206517,-129945,-6620554,-1996488449,-1979764090,-1946209130,126482526,-2096998519,91619322,1962934077,8435885,-1957670247,-1946209658,100611222,-763166593,-1706012160,1324,-1980211573,-488040377,918454528,1958621695,-9049853,956843659,1962883206,343304,1692992372,-1770093569,-1962445568,-1979755898,1586206278,72319224,-128021759,-12286325,-12151157,1468598153,8435714,-1957670247,-1946205050,100615830,-763166593,-1706012160,65535,-1980211573,1586170439,1216777208,206014975,-1946657141,-1979757946,1586171463,1283886072,273123839,-1946657141,-1979756922,1586172487]},{"sector":4,"data":[1350994936,340232703,-1946657141,-1979755898,1586173511,-1773761544,-2095560823,1946355838,1418104118,-1634053889,-1996488701,1967193158,-20256509,295706251,-1564991605,-93391104,1183576203,541100540,-1862633729,29943822,58048523,-1946245143,-2090927546,-443874579,-900899553,1478361094,-1957345904,-661774612,-351867773,-92372214,721712384,-1959662656,1191118942,705137160,244338916,-1996477208,1586231878,105316102,-467007606,-401698736,1183383577,-96060932,1183566708,-62510086,-1962742397,1297948645,503317706,1430622296,-1910575989,105286360,-1705974742,65535,175423499,705054346,2098660,1183450603,-2082199034,-443874579,-900899553,1478361090,-1957345904,-661774612,9628801,10664022,-1962250505,-1607037992,-1959490799,38832896,-1980217719,1183578710,-2037825528,-2033713290,720756,1342182584,21658,-62486272,-1207536320,-739639297,1921435392,-1962934017,973042822,2097115782,1954972464,-2037708033,-523108492,731504849,-1980182078,-36730,726727798,1704612032,184549383,-16091712,-6620042,-352321281,105286586,-9009607,1996442739,1991704330,2022084095,-2135404289,28856320,-6664192,-1996488449,-1711313274,-881470965,1962967101,-60912698,-1232396405,-422445198,-2037651759,-1769209992,9043834,-16625527,-36218,-369133946,1586233201,-1960866820,-771788106,-1947807258,1452013638,67066,-1996434813,38832384,-1946388737,-771788154,98619872,731447300,1358483906]},{"sector":5,"data":[1342177720,16777114,-62485760,49120094,1562371467,445005,1167087646,518818645,-326903666,-1202301180,1861681314,-1947170042,51486750,108461879,-16091905,244321396,-1979798552,1967193158,-339727612,-1608610971,-1205892335,1861681314,-1946645754,1099562054,10663962,-1962512649,-1608610832,-13171951,1962870390,242548492,1911033488,-62486018,-1961331392,-1961779170,10663967,-1962512649,443678712,266650,-1951470848,-1961779170,10663967,-1962512649,-62485520,-1206108023,1599995905,-1962742397,1297948645,503317194,1430622296,-1910575989,183272408,-163133866,-146356697,108461829,1342189752,545434,1486508032,-2013265912,1996486982,1095686,141007440,-1706033152,2157,-506232,1085802102,2090487808,1342177288,557722,-96040960,-1207535873,-1706033072,2193,144153168,1183318016,108462075,1342185656,16777114,-6664192,-2013265665,1183710278,1996443894,1354771206,572427088,-1205892337,1861681174,-1012986,1895761008,-26110,1048772608,1962934750,112645,-1070923029,49120094,1562371467,352504397,1124074240,167837448,1023410945,-1962868984,-2030042368,-1912537339,-184483072,117440775,2097152768,738262785,1509950208,771817220,1392509696,822148865,83886848,889257729,-939523328,922812164,-1929379072,939589379,-1375730943,939589376,1157628672,956366592,536871681,956366592,738198272,973143812,738198273,989921030,-1828715775,1006698244,-150994175]},{"sector":6,"data":[1023475459,-1107295487,1308688136,-2013265152,1610678019,-1996487936,-2113863930,-956300544,-2097086714,0,0,0,1167087646,518818645,-326903666,1781989166,1748434715,1849098011,1815543579,976682779,-700019438,-26032,1183645696,1183666390,1183666388,-6663982,184549631,722760896,1996443840,-763953196,1342433464,1354771280,-2096274712,-443874579,-884122337,1167087646,518818645,-326903666,-129579238,-1070923773,55044176,58048523,-1929330455,-397346234,1183648882,726669030,1347440832,25270864,-1073020928,1719666293,2011953144,384190093,1354771280,-1684385712,-1962934271,4057158,1024226305,1265893888,1946288445,-2134643867,-1928791986,-397346234,-1801384918,-1878643960,65589512,-1995927546,1183579206,867818,456999028,1028748288,125042725,1946167101,-1584403702,1177093836,-1592202246,1174472396,-2146374662,-1946683290,1452010566,-96040466,-239991,1996486774,-92864516,-385504024,312606560,-1912208624,-1677317368,-4698096,1347440895,201320528,-2096812056,-443874579,-884122337,1167087646,518818645,-326903666,-950642912,63558,31737543,112640,39315536,58048523,-402528023,1183649299,2145931514,-431583989,-1070903274,1347440720,16777114,1975520000,-127500281,19786231,384190093,1354771280,-6664112,-1962934017,4057158,1024619521,57999872,1023459049,57999873,-352231191,-96039492,188016720,150490752,1038763659,57999373,1023494377]},{"sector":7,"data":[57999387,1023506921,930349093,1946166845,2571608,675088244,-345476096,-129594488,1023410981,92012545,2113929789,143827213,-2131081591,-385681330,-861863757,-96075514,-1962890519,52820038,81152,37553532,-1592951296,1183385742,-129072902,9300226,688311457,-2065040826,-129567232,-1593281532,1177093838,-1586041860,1183385748,-129072900,-160765180,1946482758,114204936,-335788543,143958364,-2130950519,-351995826,-127500208,-461470729,-955747328,58438,-1946224919,1452010566,-96040466,-151234935,1963194438,143827226,2096776761,-129073146,-1592988926,1178142862,-2147188742,-167643058,1963259974,143958284,2096907833,-129073148,-129594620,1023410981,343146497,1946157629,-126419168,-231681,-219612554,-23467773,956863137,-377685434,620250763,-352187140,143565071,2147108409,-129594408,17628196,-2080881015,444990,1105724276,143572745,503875262,-1515870969,-4789339,-402089418,1183383616,-1640562718,3598344,-1579137399,100864018,103483534,-1588588388,103483538,-1588590450,103483540,-11532144,1996481142,166193376,1577261032,49120095,1562371467,-1957311667,49054700,-1241219455,-1960283645,-768932794,-150738759,-27883023,1932720771,700615431,787153990,-1224835455,-1205374461,1177224168,-1961038850,-768932794,-150866759,-27883023,1915943555,-1023770152,-1962446335,29502401,1183515718,1575324420,1426064066,-326898549,-1957275808,-1767701434,1245118216,1354771203]},{"sector":8,"data":[16777114,145274880,922701854,922685596,922685462,922685454,-6680556,-16776961,-14980554,-14981066,-14979530,-14980042,-1928185290,-1705981882,38,294531,2122517364,91694822,115982379,-1472790782,2537478,-26032,78118912,-1070909580,-1983494519,922731590,246941352,-1070903296,-1924116400,1343669318,16777114,112640,-742109558,144745440,-1979711048,-522992050,-351755101,112649,-1559714653,2122516640,963994568,1342740664,1342741688,1355302541,-1705983957,65535,144193279,1342433464,-1695779073,1191,-16213853,-1207395274,-11533336,-6623626,-352321281,-934900431,-1035563696,-1069118128,3643984,-1073020928,1407779701,-1032388609,-1705983957,1442,-16213853,-1070874506,96705104,-1667039232,-62485240,-26032,-1073020928,669582197,143046911,-934900400,-59310256,55195391,16777114,143572736,503875262,-1515870969,-402208859,-956301055,565766,-1976107264,-26106,1183383552,1958743038,196628545,1134186496,1342177286,412058,1958742784,-25755859,379602573,-26032,922681344,1996424842,-25858,1183514624,114074538,60835467,731490374,-1543974462,-1159199026,-935427328,292880390,109852415,503763128,-26032,-928841728,976682758,1781989138,1748434715,-26085,922681344,-1070920256,-26032,-1588592640,100864018,103483530,-1706028900,65535,-16207709,722318390,-6664000,-1560280833,922683570,-2034757574]},{"sector":9,"data":[-1706025464,65535,271857407,16777114,143827200,143525419,100919505,1183385742,143958512,143656491,100919505,1183385744,768242,-227082416,-386894081,922681533,2140800712,-1207959546,-1706033151,65535,1577058744,1575324511,1426064066,922741899,-6680518,-1560280833,922683558,45617210,-6664192,1342177535,16777114,976682752,-1472790768,-1439236344,-1405681912,-1372127480,-26104,-443875328,-1957313699,686588908,31983303,-6684672,721420543,-6664000,-956301057,-16665594,-25857,1048772608,1946158794,95610883,144850563,-15829760,-1206896074,1344145542,382106,976682752,-1506345200,-26104,-1070923776,102537808,-6684672,-1962934017,1438866917,-326898549,-1588177060,103483538,-388953970,-1913370999,-1900087170,-1526262264,-156916315,1963198534,12773635,721831563,990416902,2114499078,143696140,145884675,-351910263,-1875473651,1983464968,-1996260090,-1801386378,105265416,-1528233089,74907392,143800063,474010,-1912198400,280514568,-124104704,-1996488697,726723654,798642368,1342177288,1342177720,539034,-297367296,738197432,-295793710,-338492495,1183446007,105286642,143656491,1354771280,500634,28856320,-1399173120,-1996488697,-1599999930,-1540425976,-1949791480,-768872378,1178333687,-13732110,28897910,26890240,1342177288,-1705983957,2059,143656451,-1868492565,105265416,-1801385860,105265416,1183384446,138840838,184550181]},{"sector":10,"data":[1025012928,57999361,1023471593,192151554,1962935101,15984899,-1962899735,103482950,-1202714480,-1706033136,2363,1354771280,16777114,28856320,-627421184,-1996488700,-4659130,-1949160449,61991006,-201856045,-1947842935,103482438,726665358,1570394304,1342177288,1342177720,550554,-364476160,-150429535,-1962367954,-364475448,-235417045,1994802747,-428409060,1342177720,16777114,-1070903296,80517712,100859904,1183385742,145274884,1996443678,74907398,16777114,1958742784,45345027,721988769,-787961850,-465139224,721989281,-787961338,-498693656,14698183,-565786880,-1465843712,71710984,-1930886276,306086656,1685389328,613274,145268992,-385595767,-1465843516,71710984,1048813437,1962938386,-1953240168,1177224262,-1475986444,-2096005880,1053246,1183517301,-1476000780,-8984312,50611851,100922438,103485458,104534172,58656944,-1577098519,1177225392,302394356,-1677327600,-11605744,-149941599,1183535320,1356396516,721700491,1342744582,624538,-2120593408,-352321527,145531210,2114209337,269656389,145491459,145229355,305530427,-442889348,-1593835511,1609107628,305570303,269616683,145491459,145229355,-461963440,721700491,1342745606,373914,-6664192,-1996488449,-1432231866,105265416,195061629,-1947981296,-754667024,1042189286,-2093546736,1988694254,145400284,143656505,1048587901,1979781131,459841831,459937419,1963480121,105134376,1149969269]},{"sector":11,"data":[139758342,1979208761,-163301109,1156974197,225772786,16777114,145400064,-351910263,143696210,145360427,-337754487,145662278,2114340409,1042189118,-1995994352,1048631878,1979781131,-1579644129,378215272,1463360362,958100744,376768071,1146752,1207305844,175440914,716698,145662208,1187491563,-2097151522,1962991742,-562134263,-385649408,312541417,-666466032,-1995929439,2122567750,208928992,14581379,113706612,1734,113917571,-402426880,922681808,922685498,-1231419226,-2097151994,1946214526,-529072376,16777114,-562134272,-1207206400,-1706033151,65535,2122518507,159187166,1342177720,16777114,1245118208,1354771203,250266,-77076480,459945727,459814655,460207871,460076799,305805055,1353205389,264346,-700019456,82221648,-1073020928,-1113978763,-385875960,-2034761396,1183666184,1996443816,1245118422,83991043,1183514624,302394328,-733574896,721979553,1183436870,-129593902,1996443670,-763953196,751002,-733574400,-1962654207,1174524486,-1956975866,52758598,1958742784,81220,37564788,1026847744,896860163,144064131,-1959103232,100922438,1183385742,-129593866,1183535126,-163173628,1354771280,16777114,-1961170176,1183384646,-1962480648,1183384646,138868476,-1962511356,1183385158,143565310,1979205177,143827230,1979467321,143696150,1979336249,143958286,1979598393,138868230,-2095483896,444990,-2048392332,143572736,519599757,-1515870969]},{"sector":12,"data":[7792805,134760182,1996427892,74907398,-16698648,-1710831562,1555,144064131,-1588628480,103483538,-1202714482,-11533336,-1710712778,3100,-1582938487,103483540,-1202714480,-11533336,-1710711754,1172,-1583069559,1178142874,-1593281114,1178142878,-1961921372,-1700551098,-1538880760,-402088285,1599996735,-1034033781,-1957363706,82609132,721982113,1208520198,-1577171319,103483540,-1991767920,922745926,922685498,922683534,1996425360,112894,4831312,1375754938,212048464,922681344,-1834938310,-11515896,-1207398346,-11534335,1236860022,5945856,-979742638,-16777204,-1592772042,1346373774,1208521889,-25755824,1342177720,-1174386248,1347551322,845466,976682752,-1908998384,143696136,28856384,1996443648,4831484,1375754938,-26032,914423808,-63798,-1017256565,-1947432107,1344144454,16777114,876019456,71731984,-6664162,-1962934017,46292453,-326413056,271857407,369378957,-26032,1996423168,108461828,16777114,1575324416,1426064578,-326898549,-18426,-1979955575,1183448646,176063482,-15172608,280496758,1973047296,1342177293,-1705983957,3474,-2080487799,2080376958,142016280,1342181560,16777114,-1070903296,125147728,1183383552,209617916,-15827968,-1070920586,122133072,1183383552,-92864518,-100609,1996487798,74907398,1342177720,-1962932504,180510181,-326413056,1446702211,-1961138015,-1994692074,1451883590,-1576613890,-1711275768]},{"sector":13,"data":[65535,-100609,922745974,922686254,922686252,1183650362,-577089328,-2097151990,1969475710,112645,-1070923029,-1946532215,1183439942,-92371976,-2095418368,2113931390,108954412,-1960411648,1183385670,105286644,-336181623,209617688,-1962509312,1183386694,176063450,-1962509312,1183386182,243172316,-1962509312,1183387206,-293698600,-2147191266,-1920937906,-11481018,-6623626,-1996488449,1451871302,-798588722,976682879,-25755886,-1694730497,65535,818819,2122541437,1669136394,184694411,50390657,33619585,-25098636,1333068032,294531,632828276,922701824,1996427834,-59310082,-1961136991,723217942,454780934,1377528342,-18352,1347590480,726684313,261771456,-1711276017,65535,80365254,13321926,1355433613,16777114,-2094208256,1946158206,2471974,976682832,-25755886,737965823,1996443840,-18194,1347590480,726684313,-6664000,-16776961,-15582666,1996488310,1354771452,1357805311,-3246337,-11481994,-6623626,-2097151745,1946221182,108953863,242680808,16416387,1183528053,-599377416,748760190,773229331,-62510317,100554267,-763166719,-968455936,-3647863,-15582666,1996488310,1380995836,-26032,-1956773888,214064613,-326413056,-956109693,28769862,144324351,1342289592,988286608,-28931840,1191172235,1476904702,-106869,130481734,-1640562897,-25755896,451415696,-28931840,1191172235,1493681918,-956408181,-6684665,-1962934017]},{"sector":14,"data":[516120037,1430622296,-1910575989,116163544,721962635,6601170,-92016137,-2096860622,-1959655354,-768931770,-150738759,-96040463,192266251,-16359797,130418246,-15930576,1183709814,-6664186,-1962934017,1191118430,772261382,721962635,65583570,-1031015945,1689899563,82966272,106859312,-2012854529,106859271,-1962932282,-310180282,535137026,80366941,16973881,196775,16973932,196750,196717,16715723,196878,16715638,196638,16715380,196639,16715472,196640,16715467,196644,16715799,196774,16715355,196650,16713517,16973995,132706,196630,16714037,196655,16715489,16974000,199933,16973841,198109,16973842,198263,16973843,134274,16973853,132659,196638,16714429,16973883,199970,16973852,199947,196637,16712890,16974142,132169,196646,16713354,16974143,133763,196647,16713599,196928,16713553,196929,16713110,196930,16714502,196931,16713411,196675,16714470,16974148,132409,196653,16712836,196933,16715216,196677,16715104,196934,16715243,196679,16715134,196935,16714293,196681,16715095,196810,16715567,16973900,198018,16973997,197922,16973890,197974,16973892,199656,16973893,199981,16973894,198334,16973895,132134,16973904]},{"sector":15,"data":[197611,196680,16714756,16973932,198781,16973900,199465,16973901,132403,196695,16714385,16973937,198313,16973906,132426,196701,16714400,196725,16714417,118,1167087646,518818645,113760398,-64852,44973699,-15764480,-1711100362,65535,44959431,-310181888,535137026,516640093,1430622296,-1910575989,418153432,951604823,141489920,-964562805,1149964296,-230258378,126605451,-1324984693,65196804,-62486078,385107597,1354771280,-1946394997,1194004039,1962889228,242745094,16777114,-666991872,393478150,504506552,-196702896,-6664170,-956301057,448518,1445128960,-1092059507,118886952,-1515870811,304658526,1183666206,-1924131096,1343681606,16777114,-2090902016,-443874579,-900899553,1478361092,-1957345904,-661774612,23784577,3717206,84569847,1183387656,-1948742758,126563935,-1324853621,65196804,-632911422,1200347275,139954950,-1982445943,512481366,529207074,-150989128,-1962711506,37784560,-1996205941,1451882566,-62470150,1187446784,-956301108,56390,14567111,-1705080064,-1993193589,-1070870970,-1981659511,1183440966,175570920,-1878493441,-19142642,425603,-51838092,102664966,38272768,-2590977,1996478070,-126418950,57030399,1352418957,16777114,-1002009344,-1673097904,-629735600,-1878362369,114681870,734545547,1183433798,-901346314,-1983494613,1183573062,474524,138218108,1031110144]},{"sector":16,"data":[1685323875,-6523137,1996463734,571598,30382672,-11534336,79220342,-358985728,1342177281,130458,-767129344,-6523137,1996464246,702670,33004112,-11534336,112774774,-6664192,1342177535,16777114,-800683776,13794947,-1073019788,512431733,1342111750,82372866,-1985067381,1183568454,-800683600,-1697745153,65535,-1554807,28888694,-6664192,-16776961,1285672566,1241921795,721712387,-1593578560,-1957687140,-16560610,2013204087,209190662,162970,-666991872,410320902,-3246337,-15587274,-15586762,-15586250,-1710084554,65535,-1995400031,922742342,-1070920946,45718096,1317732352,-1983370298,1586229326,240073626,1200293501,-263812850,-1952817525,1183385159,272039922,1354771211,16777114,-901381376,-1946925431,1195088478,-1962508788,1183386695,-831062028,-1149185,1183576182,-297391118,-196703408,1357923883,110769919,110638847,16777114,-1705080064,704989066,-1408877596,-1586662142,378211180,1446579054,962688472,1551226438,-1697745153,65535,197936777,1346925760,44971775,16777114,1958742784,-831062214,-3901697,1996473974,-461963274,734820095,961564864,1946590214,1778792718,-1207405557,-1715863450,-1207506176,-860225504,-1706012160,65535,-1862360087,-57612274,16777114,178176,-1099497648,-1698924801,65535,201082505,-385649216,-1070858624,-1981659511,1183572038,64105402,1444140614,-364475944,-1947445623,1452007494,-1101645342]},{"sector":17,"data":[-1779891341,956856064,58178630,-1929344023,-1924082618,1358862982,57030399,-1280257,1996483190,-126418950,-1950595445,1177271894,-497673248,259510795,3999090,-1962380543,1177271366,-1207702560,-1706032896,65535,-1694730497,1147,-23689591,-23554423,58049035,-1912735767,385784454,-532247728,-23689725,1996443730,-25900,1996423168,78420732,1183514624,1174510036,-497675808,-364510823,-370387439,512491357,1342111750,-1669430526,-1207601821,48955393,1183432747,1958743014,-831062170,324762,-867792640,58048523,-16610839,-6620042,-1996488449,1451865670,1975651256,41216259,380389005,-26032,1183383552,1975520222,39905539,1183432747,-1236891208,-1694730497,1875,-1694730497,1883,16533191,-864616704,-1696696577,1311,-1962886423,1178194502,-1962183178,1178193990,-385649180,2122514887,58001308,-2097037591,1963498622,28698883,-1697745153,1432,197936777,-385649216,1996423678,-763953202,-1697614081,65535,199116425,-385649216,1996423654,848974028,184549381,-385649216,1996423638,-1774780468,96770566,-1073020928,-1008139403,-864616703,1347469355,-2984193,922734710,922683034,-241564008,-16777214,1996475510,92379804,1996423168,112844,37198416,1996423168,-59310132,457882,-864616704,1342177720,437402,-264338688,57933825,-1879014679,-93526002,-1697745153,792,198985353,-2089913152,1962993278,-834237693,-159973552]}],[{"sector":1,"data":[-1696303361,65535,184725155,-11373376,-1705976714,809,1165279243,735868671,-11513664,1996486262,-864616476,1996443728,-797507630,-1174396744,1347551436,434074,1975520000,-596181173,465818,-599341312,922681344,932840110,-956301305,175622,-831062272,-3901697,1996473974,-461963274,734820095,-11513664,1996477046,-1677313584,962819078,1584719430,-1174378824,1558904985,-3246337,1996473462,-159973434,-1804545,-1070867338,104419408,225707676,1961248313,6731784,-352282182,2144262,1375784122,56924752,1586167808,88574618,-1398545366,-700019966,-1546103157,378080108,1183517550,191538150,548956907,13416960,-6664110,-352321281,-831062181,-1701021953,65535,-3246337,1996473462,-25914,1183514624,474524,138217332,-350456832,-1635876056,-2095811584,1946198142,-831062258,-6392065,-6643594,-16776961,1996476022,-461963274,16777114,-831062272,-1694730497,65535,15236739,1996426110,-394854450,16777114,-595688704,-16223232,698014838,-2097151993,1946209406,-864616696,16777114,-562134272,-16223232,479911542,-2097152000,1946221694,-427916514,-1961856000,1175172678,-16223048,-6620042,-16776961,-6620042,-2097151745,1946159742,14084355,54935171,-385649664,1048772812,1946157544,12773635,-1697745153,552,-2081929591,448574,1996429429,674693070,708247314,741801746,775356178,129735186,1996423168,-1674117170,1310624528]},{"sector":2,"data":[242745091,-16353281,1570376823,-1593835518,378215276,1446583150,2083880920,-700040955,1755393651,1779862299,-665437925,92217980,1926645305,-1002009829,-1947318647,1183434822,-831062030,384714381,-26032,871038976,-1961138015,958097942,1964731926,1812347174,958428443,460707926,1976976953,-666991850,158662662,957070497,2098342406,-1207515386,-16777202,1996476022,118332136,113704960,67288,31997571,-1593478144,65734344,1343966369,16777114,-310157824,535137026,113921373,-1873273344,-326412987,-2082959842,1448548076,-1207273845,1861681208,268961030,-1947580791,88574680,-1957632982,2013202526,108527368,1911033488,1664910082,2088975221,108265482,818307,1183657845,1183666420,727077104,-6664000,-16776961,-1070861194,155490896,1183383552,-260636678,-1705983957,65535,-336181623,172264228,1358579337,-1705983957,2477,-1946925431,1183386692,-1070903050,152214096,1183383552,140413936,294787,1183519348,268829686,-1070903285,42900048,267059200,-1979162997,-467009209,-523041615,-1996484603,1586231366,239569672,-1980217813,-1667106746,-362902768,1342850859,-1705983957,65535,-1577957751,1183387072,184721916,-388822863,184550181,1024423104,443809793,1946157629,212266,1149961845,-330921720,957024417,595455046,1183524075,-96064516,184944171,185075203,-775804007,-1948324872,1177287750,101067770,-1949111541,1174662214,-297367054,1354771280,16777114]},{"sector":3,"data":[207522560,1174603657,207522804,-1962653815,-74773410,-1980217717,1174602309,105351664,-310157474,535137026,147475805,-1873273344,-326412987,-2082959842,512429292,1200227150,-1981535741,1755445830,1779862299,-163149541,-1946659191,126563935,-939768183,62534,972703371,545125446,-151232885,1963000391,-339727612,-60912847,-1946794357,1463416918,957314312,175441479,972703371,192738374,1191174123,-62487564,-1949963504,1183516254,-1207465476,-310181887,535137026,46812509,-1873273344,-326412987,-2082959842,-1957295892,1602946654,-1995994314,1586232390,88574470,-1957632982,2013264990,108527368,728730,-129579264,334168064,-1309116789,-1947806972,1089928286,292816898,-1946663169,1200227934,1222912515,2012759611,-126448673,-422378319,-1963172213,-467009216,-96040640,-1588571495,378211938,103485028,370875272,1347558282,704726922,1372138468,-26032,1347551232,16777114,-60912896,319178499,-2090989481,-443874579,-900899553,1478361090,-1957345904,-661774612,-16091393,1996425334,-26106,1996423168,142016266,-1710852353,65535,-1962742397,1297948645,2819786,91554051,8060930,66846723,18284799,90046723,196610,58720515,983041,90833155,458754,177012739,2031871,139788291,10420479,78905603,1114113,67371267,1179649,57737219,10682623,70385923,1245185,115540227,786434,112853251,851970,116457731,917506,128057603]},{"sector":4,"data":[1441794,187432963,11665663,95682819,10223618,89325827,1900546,125829379,1966082,108134659,2228226,99418371,2293762,138019075,2555906,150339587,20971775,149159939,21037311,79954179,2949122,146210819,21299455,146931715,21364991,24707075,4653311,147849219,21430527,183566339,21496063,76677379,3211266,84672771,3342338,73990403,3407874,69861379,5898495,100204803,4456450,101122307,4521986,29491459,5242882,7930115,4718595,9371907,4849667,183107587,6947071,30736387,7143679,12124419,5242883,133824771,5373955,0,0,0,1167087646,518818645,-326903666,-950642890,129606,32786119,242679552,1342178488,13722,702720,1183443447,242679778,1342179000,18842,702720,1183443447,242679774,1342178488,22682,-62486272,-1207011585,-1706033146,103,-637303,649596534,-6664192,-1476394753,724857860,-733574720,-2996599,246943350,-1070903296,-1924116400,1343672902,16777114,112640,-741192054,-96040480,-1979711048,-522988466,-2081143159,2113993854,-159481082,-1962180864,-1070861226,-369473909,1996423524,-495517940,-1694730497,213,-1423735,1996425846,-159973410,16777114,-398030592,556675,2122567038,-948043770,15367811,-1072971394,1183563134,1317771528,-1946552342,46564336,-1713224053,-125044233,2113813319,-339244284]},{"sector":5,"data":[-1983476990,1183572038,1317771526,-1946552344,46564336,-1713486197,-125044233,2113813319,-339244284,-1983476990,1183571014,-230258182,-1980479861,-4657594,-330921601,-1947187575,1183447622,11790806,-1980479861,-1712719802,-364475648,-1982435593,1183566918,-126945304,-1714796919,1183535186,1347590408,102554,-1957670400,1385811014,105286480,-1706012007,427,244338770,-1996451608,1183567942,1347590406,-1727510901,-1097183150,1375731713,-901346480,-1957670247,1385811014,46897744,1347551232,1659375248,-834238208,972048011,545247302,971785867,411029062,-1982445941,1183576646,-297367048,-1982839157,1183576134,-330921522,32786059,1183578182,-129615396,1558774653,-96039937,-1948891647,1178198086,-385647146,1452015426,-1950340114,1600057926,-1962742397,1297948645,503319242,1430622296,-1910575989,183272408,-1962260853,-355398570,1317787857,140413702,-640554031,-753680125,-1980086647,1183579222,139889414,1913411129,956659477,242616902,-1962260853,1177226326,139860742,1183517931,139889414,453658155,1183386710,-128546314,200951435,343276614,-1962522997,1446578262,957904140,326437446,854310955,1106804355,125242994,938901121,-1207601527,518718440,-231681,-390530442,1347590403,-493825,1134229110,1375731715,58497616,-310181888,535137026,147475805,-1873273344,-326412987,-2082959842,1187451628,-947912712,64070,32655047,-62470400,2122514433,91553798,-404111317,205949696]},{"sector":6,"data":[1962935357,10086659,-1377238146,81152,-1595341963,146688,54331252,-345017344,-62470185,-1070923766,-59310256,-1727641973,1654280274,-1996488701,1451880006,726684400,1996443840,138841074,-1957670247,1385761350,57252432,1347551232,16777114,-297401600,770725395,-628948991,-1706012160,65535,-1980479863,1183577686,-94991368,1928746553,-385649056,1178206066,-380209420,1187512170,-352295684,-230242415,1187447038,-348634884,-230242427,1187449324,-383315716,1187512184,-352256270,172395505,104671979,2144760832,343304,803858548,474623,669582205,540159,535364479,6503935,401201012,-196703233,-1962742397,1297948645,503318730,1430622296,-1910575989,1089242072,105286486,-1996488411,1996472390,242679568,-16091393,1996425334,-1002009326,-401698736,2122514798,578118596,13532803,2122516084,376766672,1357792909,1357661837,1355040397,-1866434817,29157390,1996430571,-1065943090,-2048389488,-297367294,-3115265,244367478,-1996297240,2122574918,477364416,-1961991519,-1559337962,378078040,113705818,860,-1544796533,1810563956,-1324595573,98620164,1178271776,-1589543188,378211938,1487081060,1511426307,1543948035,-1962934269,865725510,-1178457150,-120389628,-1037319629,189722763,721714678,-1962742848,-754667066,-330396704,243910699,468386676,1073960609,-1593615197,378209106,1487078228,1511426307,1946601219,-1593831421,2023949172,230727939,-1577302391,145820418]},{"sector":7,"data":[52816083,1958742784,81167,37558900,1026847744,108331011,-1983101301,144818758,-1035585269,954939261,-1149185,244367478,-1962811928,-936641458,184946219,185077251,1317665233,-2626622,1996484214,-401698624,1317732798,734538748,-351599090,-1035564059,-1065943216,1843924624,57189121,65947275,-1560057850,1889600364,201335811,57713409,49120094,1562371467,969293,1167087646,518818645,-326903666,1183667716,1996443900,142016262,-15698177,1996426870,175570700,1342187704,16777114,106859264,1954547702,2133295109,1586174187,-1946973434,1200164420,575129376,1586167808,508020486,1586167838,511673094,-955418842,65545287,-955883893,65545799,49120094,1562371467,838221,1167087646,518818645,-326903666,140413718,-1995290741,1200353862,-263812844,-1996339317,1200355910,-129595132,111687423,-887041,1996484726,244338938,-1980123672,1451881542,-364475914,1183433355,-364475396,-1980600585,1183575622,-261163012,-2081667447,1962935934,-294191312,1342177720,-1545073008,-1070903296,-401698736,1183383648,-327745554,1342177720,-1569136,-1070903296,-401698736,1183383740,-294191124,-16228725,-390585225,-996519933,-1996488698,1996484166,140413932,-1205438465,-1706032152,1794,-1947449719,1183517790,-1962440210,1183517278,-2096657940,-443874579,-900899553,1478361096,-1957345904,-661774612,425603,1996427892,2016870152,-365494512,121412105,233504768,-16222465,-1207067594]},{"sector":8,"data":[-347077216,49120236,1562371467,313933,1167087646,518818645,2122569870,309592070,-16222465,-16127434,-1710196682,1910,1996426731,94418952,-1674117296,-2081625331,-443874579,-900899553,1478361092,-1957345904,-661774612,425603,1996427892,-2009661688,-63504624,129014281,233504768,-16222465,-1207065034,-347077216,49120236,1562371467,313933,1167087646,518818645,2122569870,309592070,-16222465,-16122826,-1710192586,196,1996426731,94418952,-1506345136,-2081625331,-443874579,-900899553,50333188,-16399104,50403072,33589505,50341376,-16592384,50415616,33562881,50352128,-16679680,50358784,-16339200,27648,1167087646,518818645,-327034738,1448542360,425603,1048775797,1946157560,112645,-1070923029,-2083502455,127038,-1914109068,-1976107255,1354771206,16777114,1354771200,16777114,-1983894784,245624390,-465138430,-2095990109,1946210430,-26105,1391132672,109852415,425603,112723316,-1207702784,-768933880,922701906,922683018,922684836,-6681182,-1560280833,-1073019214,330830453,1788497952,-956301310,16911878,146860288,-1202667477,-11521595,185814046,-385649216,2122516654,359923718,16777114,112640,-26032,1048772608,1946157802,-797015103,722629888,-977776448,520048689,-1073015988,2078868341,1685512,-1309522295,1356911363,96154,-465139456,-7113664,211880054,236358407,-1471772409,1386894985,-26032]},{"sector":9,"data":[1996423168,-26104,1183383552,-128546314,722320033,1343258118,277362431,167524095,85402,-196704000,722320033,51412486,1343077382,277362431,167524095,91546,-666466048,722321057,1343227398,276313855,166344447,16777114,-62486272,460719815,548995071,-6664192,-1996488449,1967188550,-361300213,16777114,-16586496,-1947574645,38258463,1586167818,-954233878,-1962934009,126610014,-1996487675,-661937082,-1951906165,1200204374,72845570,-1995589471,-12736954,-955943425,108102,-1952162165,126461510,1353598605,1342181048,16777114,-1354331648,-1705974742,65535,-1951447416,-410931586,1137049855,1183654063,-1229434705,1191071745,-1371108690,-1705974742,65535,-150989128,-259323794,253894283,1149974275,-867792624,-1981135221,-1070919612,-1559009117,1178145638,1343256016,1345439160,323755775,58048523,-2096888855,1962935934,15460611,1342177720,1358579341,1356088973,1356613261,164250,1975520000,538163212,-26032,-706150400,1354771203,1355957901,1352812173,1353467533,16777114,1958742784,-1472790564,636934,309328,1312227152,1278672659,1354771219,46373456,1048772608,1946157558,-1472790758,505862,178256,32946256,-1070903266,-157659056,-16777214,-1928951242,1343652678,1342184888,16777114,-2000617984,922714694,179832488,1183469568,1357130370,377702029,1354771280,-26032,1183383552,2109737942,-700019914,1040186157,142016516,781434883]},{"sector":10,"data":[53127167,14042871,-385649344,582484776,-12261088,-383769160,40238910,105251620,52299334,-2096951319,1962987646,1354771218,1345439160,323755775,58048523,-956113431,52806,-1951906165,1183427158,-531199522,14304967,-1505326336,-1961985885,1452013126,-531219976,-1142357122,956857348,57859654,-1962626583,1183446086,2089207680,-2097151745,1946158718,171868947,208928770,958102177,2114877446,76343555,716064394,28706276,-8747383,242759423,-8747379,-26032,-1635057664,130482042,-26112,1187446784,-1962934042,1452013126,-531219976,770245502,956857347,57859654,-2096946199,1962987646,1354771218,1345439160,323755775,58048523,-1962792471,1178202694,-14779162,1183048822,1183517426,-754732558,-1070903072,102472272,-1073020928,65602421,142016258,-2066689,1996480118,-126418982,-1191807233,-1706033151,65535,32521859,-385649664,1654653406,-1981535741,-1072963002,-1561787531,-565802240,-1981786485,-1979746682,-1946191722,-2037786042,1487011700,1511426819,-565802749,-1579133303,1183384412,-797015078,-12291072,-34634,-1694533962,65535,645185547,15761027,-2037699212,-1769209994,1183448952,-531199522,-9140597,-2082847095,-2097023378,-385812386,1048837991,1962934798,59566339,-1962844695,931914846,-1310308725,65065732,-565802000,-1981786485,39094532,-1982183797,-1070922684,-1995684727,1149831748,105154824,-1962874391,931914846,-1310308725,65065732,-565802000]},{"sector":11,"data":[-1981786485,39094532,-1982183797,1183515716,1745224700,105154819,66864779,-1996264442,1183517252,138709376,58738315,-1996262394,-2002711484,-1978234085,-531220197,1178149749,-2095155746,1962990206,241344792,241440395,56235577,104400501,91489112,-352321096,-1983894782,1183518276,1946551168,-666486013,-1008139393,-427916543,-385646848,1654718906,1679198990,1511405838,959214851,1963153414,461938982,462034571,1977636409,-565823221,2122516085,259260634,31882883,1325336958,2089207782,-2097151489,2114053758,-463566053,2123046795,-754667034,-25590809,-16157696,-2033719730,130940,13532803,-1259797644,-362902784,-947699829,-1960867070,-1995964665,994110534,-10191867,92531318,-1190819062,-369688573,726679616,-6664000,184549631,-1203210816,-1706024941,147,425603,922686580,45614760,-1070903296,1347440720,125540944,113704960,66062,253894283,381165451,141489920,1183576203,272665036,-1695910145,389,-1207800343,1861681158,-362902548,67438339,-1538881280,-1947967861,-427914465,-405601103,1368064395,-1537307902,-1996339319,1586168919,242786724,-955807424,-14977530,-797015041,-2093124608,1962992254,-431584469,-1696053623,65535,58048523,-1946288151,1178200134,-1995344666,1183049286,1451426294,-2033778440,130940,55195391,-1705983957,65535,-8601981,-1960872960,931914846,-1310308725,65065732,-1962636304,1183384148,-531199522,-1996209013,2122570310]},{"sector":12,"data":[57999366,-2097115159,133694,-1700720012,2013673741,-1585480690,104405882,1988038264,-9271609,-1070923775,835041360,1277099856,1975520019,-18552542,-1962714975,-1996269034,1451875910,56402400,-1579530615,1174471540,-431554688,-234263,-1207523274,726663171,1347440832,-9795955,-1566945258,-1996488702,-1072966074,2028536701,1887865851,1820735999,-1962246657,973041286,2097113734,112656,-26032,117374976,-1092022664,1925088251,477364479,111687423,1342177720,16777114,112640,158046800,-2033778688,65394,957249697,444070470,-16222465,1996477558,1787203036,26890495,184549384,-385649216,1996488250,-461963512,-1914276097,1358916230,534170,1975520000,-31397629,957249697,58118726,-57367,1996425334,-1401487454,-9795955,-26032,-1073020928,99156852,-34018817,425603,1191120500,34382286,2110670393,-83039997,425603,1048775284,1946157578,-34281213,-150989128,-259323794,253894283,-964479229,33879558,2122535285,913572044,-1947574645,-864122081,93011339,645203769,-1947574645,263431,-866219184,67438475,112742400,-362902784,804724619,-26032,-1073020928,28837237,721611520,75200,210493649,201187712,-2096854591,1946209406,-864616696,580762,-797015296,-1710918400,65535,-1696303361,2294,425603,-2033754252,65384,13926019,1996425332,151296724,2122514432,141820066,-1700628737,1636,34487939,-15436544]},{"sector":13,"data":[-1207523274,726663179,1347440832,1100632144,-2097151991,128574,922688372,129500840,45633536,-2037559296,1343684456,1347469355,410266,-1471771904,-1549117813,378082150,-4713624,460760063,-1711164253,65535,425603,28841588,-1566945280,-1711276025,185,-1705983957,194,109721343,1342177720,14746,112640,4299344,2122514432,192151760,457979647,16777114,-2095322368,438846,922686580,-6682958,-956301057,438790,-401698816,1599996192,-1962742397,1297948645,503317706,1430622296,-1910575989,384599000,-1995326815,1048837190,1946157582,8841475,32521859,-2088798976,2080376446,108953977,1182020037,1048800235,1962934768,-364475066,-1070903274,-1202696112,-1706033151,2815,796180491,112342783,384452237,-26032,-1073020928,1183650933,-1706027286,65535,384452237,185440848,1586167808,176129020,-1951173632,2139356254,125108234,32521859,-1207602176,48955393,245612587,1975520002,112645,-1070923029,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,-1995326815,2122447942,1963004172,176063244,-2096335870,1946225278,209617670,-1962052336,1204288606,-1207959286,535494657,269254273,-2081131519,1963330686,176063248,721712384,-1962677312,-1264382394,-2084558074,-443874579,-900899553,1478361098,-1957345904,-661774612,-350950269,-330920668,-1070903274,1030224,28856400,-6664192,184549631,-1928235840,1343679558,16777114]},{"sector":14,"data":[-264338688,-713818111,-1962742397,1297948645,50341323,-16653312,50366720,50992129,50359552,-16528896,50400768,51000321,50360576,51002881,50360832,17352961,50333440,-16151040,50371072,34061569,50332160,-16147200,50372352,-16211456,50372864,-16656128,50373120,-16754176,50373376,-16531968,50374144,-16198656,50341376,-16163840,50374400,-16644096,50342912,-16373760,50343424,-16708096,50377216,-16325632,50346752,34152193,50341376,-16156672,50347776,-16267776,50348032,50955521,50340352,50517249,50340864,-16706048,50350080,-16622336,50415872,-16158720,50416128,-16336896,50416384,-16477184,50416640,-16259328,50416896,50966273,50345216,-16498688,50357504,-16699136,50359296,50365185,50354432,50996737,50354688,-16715520,50364928,-16507392,33536,0,1167087646,518818645,-326903666,512448010,529207074,-150989128,-259322770,-1962786677,1183384656,-61437446,16271047,9627904,-1202667477,-11521595,185814046,-1957595968,931859038,-1309129077,65065732,106859504,956843147,1736312391,957105291,1602028103,956712075,1467876423,956974219,-11502329,1962871926,-13304062,1996424308,-92864516,1342177720,16777114,-264338688,74711041,1022083115,-1962254709,-129594569,-523041615,1048637443,1946157936,108330765,-1710721793,65535,1962871275,141885190,-16769560]},{"sector":15,"data":[1183578182,-129615608,1676215165,112895,49120094,1562371467,576077,-2081649835,1448551660,58605187,-1207600128,48955393,1183432747,-65106946,-1995994353,2122576966,74711294,65781803,-1996262751,1187511366,-1593835274,1178141540,-385647370,1586168445,138906356,1183441962,-163149326,17385354,1688335942,-163170045,1183384446,-163148810,-1980611029,-125046714,16271047,-227112192,-964565295,82510722,-129629779,189777803,-2081062976,2130770046,26274051,99763851,1183384960,1714880490,-193528061,1342178232,16777114,-195130624,280567,-1961396993,145818695,-2143491885,1923155315,-1593185509,-654894222,-1070923029,721702539,1947075528,2047748867,-1240585469,-95516399,111687423,-1191414017,-1706033151,544,15222471,18737408,57673463,58064640,-1962900759,1174663750,-754404880,1645120480,14778371,1836499259,704865184,-1947169820,1174663750,1006144488,-1957005314,1183443014,1979595748,-1472790751,-62456058,-1191414017,-1706033151,691,737166987,1183443014,-263812122,1671433195,736373251,1183445574,-398030362,-941195637,63558,66221707,-422452106,58902145,189777803,-1391493440,-336050687,-263812109,-1981397367,2122573894,1585316070,-1964351861,1038363143,57999361,1023444201,2138308613,1962936637,-228684987,-2020875311,1174471554,-25263354,-1591643136,1178141566,-15106830,-1593399242,1183384434,28856572,-6664192,-956301057,65094,-772645237]},{"sector":16,"data":[-2105046045,-129619709,-1423617,922740302,1996424872,-92864762,518669963,-428409008,226202,-129594624,-1962523135,1174529606,-263812118,2112374329,-19339005,183780995,-1946283799,1207432286,1950351362,-362902591,1963016064,-230257868,1376125849,1410732803,236337923,2082635527,201734918,-1206226169,-11531777,722368566,28856512,-4698112,-6664192,-352321281,167753745,112720,16758864,-26032,-22937600,-1472790775,108461830,-1191545089,1344145919,705298080,-6663964,-1962934017,-472780194,58886027,-1946663383,1191178846,-1948003854,17007239,1191118406,-431030294,1593757673,1575324511,459970,29884675,655362,48300291,2162690,25231363,12255487,55967747,12517631,54722563,12583167,11534339,21889279,8716291,6619391,0,1167087646,518818645,-327034738,-1957297834,-1961942498,1488927,57028343,1082912907,72387330,-1980348791,1187510358,-956301062,54854,14960327,-1983894784,1183443014,-62486042,-1948023,-16559050,1375949366,-624897,-1929157066,-1705988538,65535,721644705,-1996265466,1956770374,-364476157,16008903,-1371108608,2080376637,539914,1664967038,-11504640,1996467830,2016870320,-1472790768,309254,12229200,-1706033152,192,-2472311,1996467830,-2009661518,-1472790768,440326,-26032,-1706033152,65535,-2082978167,1962990206,44951811,678805515,-1962760471,1183432774,-1035564070]},{"sector":17,"data":[-1193785719,-11534334,1996476534,-25906,1183383552,1975520250,42068255,972179083,141941318,971654795,91543622,-352321096,-1983894782,-873728954,1183432747,-431584792,734807691,1376125906,1410732803,-297367293,-1947183479,1452009030,-799655448,-1779891341,956856064,58183238,-1929344023,-1924079546,1358868102,57030399,-1018113,1996484214,-159973384,-1949415797,1177276502,-397009946,259510795,3999090,-1962380543,1177275974,-1207702554,-1706032896,65535,-1694861569,528,-22378871,-22243703,58049035,-1929258263,385789574,-431584432,-22379005,1996443730,-25888,1996423168,37853946,1183514624,1174510048,-397012506,-297401959,-370125295,922746717,-6682968,-1996488449,2122572358,91579310,-352321096,-1983894782,-1072960442,-1947663499,-1472790784,43162118,1183383552,1975520214,24242435,-1694861569,65535,-1983363447,-1039414698,1558774645,-1102672639,-6664170,-1996488449,-1072962490,1223230325,-1983894783,1183435334,-92864568,246682,-696844544,-1696303361,702,58048523,-16701719,-16340938,1996425334,-227082490,-1411329,-1070868874,1996443728,-663289894,-1174396744,1347551436,16777114,16181504,16023171,-1914109067,-1472790784,-26106,1183383552,1975520214,14543107,111687423,-2459905,-6629258,-1996488449,-1072962490,-991362187,-696844544,-26032,-1073020928,-1259797643,-696844544,1347469355,-2459905,1656281206,16759296,-6664110]}]],[[{"sector":1,"data":[184549631,-385649216,1996423315,-1367932970,201626,1975520000,8513795,-2722049,1989868150,184549379,-9276224,28890742,580538368,-385875965,922746685,1996424872,-25938,922681344,1996424872,108461832,16777114,-1371108608,1946158909,539911,720051572,11566723,2122519924,259260594,111687423,-5212417,-6638986,-16776961,-16340938,1996485238,-25878,922681344,1996424872,-25862,1183383552,-495025156,-15958528,-16340938,-6626698,-2097151745,1946211966,-696844536,16777114,-461470976,-16223232,-6626186,-2097151745,1946221182,-327253218,-1961856000,1175177286,-16223030,-6620554,-16776961,-6620554,-2097151745,1962998910,539277321,-26032,-2090991616,-443874579,-900899553,50338052,33751809,50363136,-16676864,50403072,33747201,50332416,16838145,50335488,17025793,50336000,16879617,50336256,16891393,50336512,33774337,50334720,33763585,50334976,33778177,50335232,-16524800,50343424,33742593,50339072,33676033,50339328,33717505,50340608,33786625,50341632,33704961,50343168,-16753664,50349824,33695489,50344192,33729281,50344704,33684993,50344960,-16665088,50354688,33790209,50349056,33793793,50349312,33593857,50352128,-16736256,27904,0,0,0,1167087646,518818645,-6629234,184549631,-1206291264,-1706033151,125,112868995]},{"sector":2,"data":[-1710394368,65535,74825739,434880555,113247943,1996423169,-26106,-1070923776,-401698736,28836102,49120000,1562371467,182861,1167087646,518818645,-326903666,1354771206,56218,-96040704,324024063,34458,-62486272,1342177720,16777114,-1976107264,-26106,-11534336,-1684342154,-16777216,-15713738,-1365575050,-2097152000,449086,922684532,1996424922,12753658,922681344,-929429866,-16777216,1996487798,14785274,-1706033152,231,113000067,-15174656,230227062,-6664192,1342177535,16777114,-140881920,-2097152000,450622,922683764,127534816,-2097151999,451134,922683764,-6682910,-2097151745,48702,922683764,664404158,-2097151999,49214,922683764,932839616,-2097151999,49726,922683764,-6684480,721420543,-6664000,-2097151745,-443874579,-884122337,1167087646,518818645,-326903666,28857868,-6664192,-956301057,64582,-1564976149,-59836672,295706251,1183385347,-1965519882,2133067079,1047792444,33834998,2122528884,208928774,-14786677,-26057,233504768,-1946788213,939466335,16777114,10663936,-1946390793,-1608610832,-2093546735,76154310,185368612,1191117960,195600892,2096907833,-310157667,535137026,46812509,196621,16711691,196752,16711704,16973977,65815,16973841,196927,196614,16712031,16973889,131215,196653,16712101,196943,16712086,196944,16711716]},{"sector":3,"data":[16974161,196666,16973877,131255,16973893,196721,16973890,131173,87,0,0,0,1167087646,518818645,-327034738,1048772920,1962935986,112645,-1070923029,-1949284727,356321862,1025209344,57999386,1023508457,57999387,1023583465,57999389,-385675799,-6683825,184549631,-385649216,1048772836,1946158810,-633929880,-1875443962,-1908998394,13736454,922681344,922683098,922683028,-493222254,721420288,-11513664,-16346058,-1710845386,65535,-20019575,225820683,1342179256,91034,-830043904,-633929730,-826867962,12163838,-1706033152,302,114964223,110507775,61338,977175296,1316225040,272250623,110114559,109983487,16777114,976682752,-1808335088,-1841889530,17734150,922681344,922685498,681182870,-2097151999,434750,1048778868,1946158748,-1573454063,-1808335098,-1841889530,26122758,1048772608,1946158730,-1976107239,20879878,-11534336,-1710844362,372,24812112,1048772608,1946162000,1345781593,56138259,-2037841920,112787148,-2019930112,1375731713,-26032,-2037841920,-1072955702,79170933,1654280192,-1996488701,-79226,-78666,-1694577994,65535,-26032,-1224802304,163118796,-6664192,1375731967,-26032,1048772608,1962934958,32893187,191512195,-385649664,-6684181,-385875713,1183515107,138808070,1996437876,108461832,382879373,2013264,50829904,1183645696,-55029550]},{"sector":4,"data":[-459649022,184549377,-1928039232,-1202662842,-1706032404,582,57982987,-1593728279,1183390542,262578672,-1577433463,1183387428,-25860,-1073020928,-1326906507,-930691328,-2097151746,1946218622,-92372131,-2091420672,1946221694,1312719697,1249116187,262553219,-2092731392,992318,512441460,939465550,-1024373,39492151,-1073020928,512436341,939462566,-369013,40802871,-1073020928,512431221,939462436,-237941,51878455,-1073020928,1183519092,-930706992,1975520254,302434054,-2097151742,1946218622,-260636920,171930,-92372224,-16223232,-1382352266,-2097151998,1946221694,-59310328,16777114,-927038720,57999614,-352266519,1073920098,-26032,1183514624,458138608,-1543879029,1183518630,254059516,-2097105175,1962987646,11397379,458112643,-385649408,1183514787,138808070,1996433780,108461832,-19888499,12079126,-6664191,-1929379585,1358876806,458104459,-6670337,184549631,-1703774784,65535,-1560280648,-358415854,1354771202,16777114,-1036090624,1433731078,271857407,1347469355,-26032,1173028864,113000067,-14322688,-1710010314,65535,899152,-26032,-1706033152,166,11311696,113704960,1724,28575431,-6619137,-1207959297,-11534335,-6631306,-352321281,49120164,1562371467,352766541,2130707200,234946307,-1862204671,117440770,1644233472,16777728,1174471424,2097152771,1929446144,150995456,-754973952,-1543438591,-1040186624]},{"sector":5,"data":[771817218,-1962933504,973143811,822084352,1057029891,-1493171456,1157693185,1744896768,754975235,536871680,1241579267,33555201,1375796994,1258357505,-1275067647,-2080308480,1023410688,-973077760,1510014721,1375798016,1107296769,1845560064,1157628419,503382784,1107297025,-1795095808,1459618304,1124074240,-167706880,0,0,0,1167087646,518818645,-6629234,-1962934017,-167555554,141852679,-1207750680,166395905,184557288,721974464,-6664000,-16776961,-1709487050,65535,-1962742397,1297948645,-326412853,-1955140477,-1962717666,1183385159,206015428,-1191295351,1344144166,1347469355,1380188346,1347440720,-1976107184,922701830,1347421836,16777114,112239360,963952651,-26032,-626851840,1958742790,-1617276899,-1560281088,-1073019172,922685556,-6682918,-1560280833,-1073019170,922687861,-6682960,-956301057,438278,-26112,-1070923776,-1207794711,1347420161,-1070903216,-6664112,-1560280833,-1073019164,1048825972,1946158816,-600375535,-533266682,18323974,-1073020928,922686837,-289929588,-1706025466,297,185000099,-2086439744,451134,922685812,922683100,1956251362,184549377,-15174208,-1207530442,1344145142,16777114,115516160,58048523,-1912638487,726715462,850940096,-6664192,-1207959297,-11534176,-1207065034,-1706031712,65535,1183439095,-867791412,-6664170,-1996488449,-1072969658,922687092,-1706031398,761,141934603,-1698138369]},{"sector":6,"data":[65535,109067907,-385649664,-1667170077,-1980182259,-120471482,1183447249,-1069118530,1174665425,-1677327424,-1035564784,115357439,1342181048,378160781,37526096,1183514624,163158412,-1980107008,1183553606,109093774,1183432747,-754732644,149554656,-342210935,-1705079993,-1983756661,-1705080057,16926663,-1705080064,26756747,1183564358,71797186,-1952817525,-1992257978,2122516039,108265884,77364867,1183516021,-1962677312,1174519366,-1673068606,144328323,161250947,922727292,246941410,1183666176,-1706027382,65535,-1718860149,-150993479,149464057,-1550956917,922683698,1183647450,-1706027362,65535,731924107,100901958,67438898,-2147090176,1310624518,-2146467837,-1962508127,721636894,-1992290745,922733126,-1070919628,-898171056,-1950058753,1177288262,28856522,-1264955392,-16777214,721858614,-11513664,922731638,-1706031488,65535,112211711,16777114,-633929984,112646,-26032,922681344,922683098,922683024,-6682994,-16776961,-16328138,-16346058,-1710845386,65535,114964223,110507775,207258,1354771200,-1808335024,-1841889530,-26106,1183383552,1975520198,505868,-26032,1183383552,-633929786,-965279994,16777114,-1338573056,112646,-26032,922681344,-6682960,-1207959297,-443875327,-1957313699,-633929748,1354771206,1245118288,-2143879405,-1707671802,-1741226234,63740422,922681344,-1348860240,-956301312,438278,-401698816,512426119]},{"sector":7,"data":[662700878,-1979267201,-16776959,722482230,-11513664,-1592571338,103485460,100864022,1346373248,1342177720,171930,-1979267328,-16777215,722483766,-11513664,-15513034,-15722954,-16344522,-1710843850,1326,109721343,1347469355,16777114,1575324416,-1873273149,-326412987,-2082959842,438334,-1070921100,-1873784752,11528206,-1962742397,1297948645,-1873273141,-326412987,-1579643362,-324860186,108347398,116131527,1048772608,1946158786,115783699,-18352,243792,74160720,652935168,-1202667477,-1873739777,223864846,1342177720,1358954424,1256722064,178189,-18352,-401698736,-1229451971,-4698101,62411007,2073710592,-1207959548,726665396,448286912,-6664192,-2097151745,-443874579,-884122337,1167087646,518818645,1048828046,1946158822,1354771209,-401698736,-310178567,535137026,516640093,1430622296,-1910575989,1659667416,512448087,1200292686,-96040694,687747,1038680948,108954371,-1593084672,1178143028,-385649158,-1667169659,-867792627,114964223,382617229,39623248,-2136932352,839265030,-1991751671,1317793350,-733074480,737431177,-129594943,-2084026743,1946158718,-633929885,1354771206,1245118288,-2143879405,-1707671802,-1741226234,93755910,922681344,922683098,-2136928100,-1706014714,1378,114964223,323630847,1208385697,91396688,922681344,922683098,1996427420,97557230,922681344,922683098,1996428106,98409198,585826304,114964223,-11485141]},{"sector":8,"data":[922732662,1183519562,-934925330,-1707671728,-1741226234,-26106,922681344,-6682918,-1996488449,922742854,922683098,-1070919524,1245118288,-2143879405,-26106,915079168,1982533788,-14816262,1443289654,-1694992641,1545,114964223,-294191274,399002,-864681216,323630649,1183571327,-772222476,-129629704,-1949532463,722508854,451672694,114964223,-126419114,410778,-633929984,1996445190,106011374,1979908096,1245067724,-1948418285,-120458170,1174534353,-864646152,906231505,1982533788,-14816262,1443289654,-1694992641,65535,114964223,-294191274,16777114,-864681216,323630649,1183571327,-772222476,-129629704,-1949532463,-19805066,278672899,-335907285,-633929955,1996445190,88120056,922681344,-11139366,1385885302,50331653,909757558,-578874550,1342178744,16777114,-901347072,278673035,-1325763029,-213481424,-369998200,2122317972,125188595,-957200642,-2144275642,1966142078,112645,-1070923029,-3783031,-1962485194,-230453768,45633558,1355229952,16777114,-1002010368,-1949678077,-1324508138,1006293763,-14385982,-1962485194,-972830138,-931725488,-1950058753,1177284166,922702024,922683034,-2120612200,-16777207,-1962485194,-972830138,-934900912,1356088875,-1916371317,1343681091,721420984,-6663993,50331903,-32662474,909767494,58594122,-39959,-16328138,-6623114,-2097151745,1962935934,10414339,-16192834,-16327626,-1710825418,1947,712359947]},{"sector":9,"data":[109852415,503770808,16554576,-526188544,1958742790,-600375538,110776326,184549384,-1710787136,2355,1187471595,-1962934078,69928004,-4307319,-16328138,41221940,105155408,1342325803,115095295,-138262901,726711918,104419520,141821596,-1174378824,116064409,-1174396744,1347551436,16777114,147227392,-2084419841,2081014398,-600375374,-466157818,155884038,2122514432,57933832,-1962779927,-787945410,278700543,1183434539,323658152,278660651,1183434539,-432110684,209059590,-11485141,-1878594506,157018126,1353336461,16777114,112640,-1350664112,-1207602176,267124735,766330507,-768933648,-150964039,1346388209,786960016,178185,-1400995760,-1207602176,116129791,95045259,-1873805307,152299534,305805055,459945727,459814655,16777114,976682752,1781989138,1748434715,-26085,2122514432,1635057670,956904609,1500904006,51054753,990579206,1963701766,185114956,196609593,-1063173259,101067533,-1173996789,-1103727349,415172788,956664587,-2094369532,57999420,-1979613463,119800389,-1969207672,119800388,-1969338744,1178116166,-2144111458,1946394238,1963146244,323658025,149423619,842465104,112649,-1070903216,-811970480,-1996488704,-1072956346,-1164308363,-385875968,-964493005,80184068,922722283,1996424926,15375100,-1706033152,384,115226367,1347469355,51595937,1342760966,154285823,110902915,-1593216000,378209944,116065946,-1174379848,1347551487]},{"sector":10,"data":[633498,-633929984,1354771206,721846433,1208562182,323658064,149423619,842465104,-1707671799,-1741226234,57055750,144769024,168166155,196518667,-1559557983,-1063187528,306881293,184944171,-955532637,48198,-776184181,-1229455389,-1674117365,94418957,171022928,-125108224,200965675,957644031,259957886,-1950583041,-956061626,1354771280,-16236824,2122562630,-998505540,-2096581442,1962935934,186169423,448288336,-6664192,-352321281,-1502150849,228341503,1342546104,711578,737708800,-15992194,2117673852,-1977712988,119800388,91554620,-352320328,243715,-1471771824,726714115,-521645888,80118535,1183384715,1975520166,-96040008,1577661603,49120095,1562371467,445005,1167087646,518818645,-326903666,1187468866,-956301064,62022,14960327,1354771200,16777114,1975520000,103409923,-16222465,1183647350,1183666416,619204846,-260144378,-385649661,1183514987,-1677317370,872809232,-1598533623,922701829,395971996,-1996488693,1187503686,-2097151774,2097406590,-497120404,-1207966767,1996426166,134801630,1416937483,-1981659509,-661915066,-1207966767,922684342,-1598550628,194662405,-1962934260,-787945458,62991353,722508806,-1995885562,922744390,-1588590886,103483008,1346898226,149436159,154285823,-1174402632,1347551317,466842,15853824,-337492225,-532232306,1187446784,-1962363672,1065609310,-2096204544,2081218686,-26033,1558773760,-396457211,1996437503]},{"sector":11,"data":[125888734,796180491,-1947705717,39291655,-1981135223,1183509590,635710188,67436551,474368,79168885,-1207702784,1183383555,-361299974,-43031,1183047750,-1544878872,1357530765,-1202667477,-1706033150,1074,-402229505,1183385451,-432110614,74776582,48956592,69994416,1317668644,-119439124,1183367434,115778028,-1996487931,-11470266,922741366,-1598550628,-224767995,-1962934260,-787945458,62991353,722508806,-1995885562,-1202653626,-397410303,1187448343,-352321032,-260144364,-385649153,1996424347,-294191120,1458048656,-1338573051,-26106,82378752,-260144383,-385649661,1183514839,-62486266,323618363,1252066686,-1593251053,1178144924,-1996259844,1996487750,113633532,1004947081,1980910086,-92372212,-1593410301,1183388234,-92371994,-2095547389,2080376958,109093243,154273283,2114471483,-427916433,-2090241024,1962996350,-163149033,149425803,-1056704047,108914768,1978025531,9038083,33048263,-226589952,-15960832,1996487286,1354771446,-16425240,1996487286,-1674117146,94418957,22321744,243990528,-103741208,100909355,103485596,1183385908,28856566,820531200,-230242555,1038811136,15892099,1996426357,-159973382,-397361109,1187448087,-352321038,142016292,-1928956161,-1924074426,-397349306,1183515551,-196724240,1996426101,-294191116,1189613200,105286916,-26032,-1073020928,-320273548,-25858,2122514432,57934832,-2097080343,1962996350,-92864756,737572607]},{"sector":12,"data":[-1125625664,-125926652,-1961135104,1183385158,1241922556,-1593475565,367727434,957389985,276692038,1183517675,-401699850,66703624,-62486079,-386107649,1183384967,1241922534,-2096335342,2097412734,306880774,-2082060663,2080635518,142508833,-385647360,-2136932194,839254790,138820361,-1880554625,-427916544,-385649408,1996423302,-428408838,228341503,1342546104,647834,-401700096,737792264,-1677327423,872819472,-1070903287,69331024,66748035,1988831357,-2115579398,-1962166586,70903366,28837236,721611520,109487040,58048523,-1962900503,76146246,1183546603,-364475930,-2081923445,158662719,1357530765,-351976984,-396457115,1996437503,100264166,1450557451,-387418369,-521468675,-2081923445,1182007359,82831443,1996439787,108461832,1358186125,1356613261,-1962785048,1178202182,-15763980,1183577206,-297367076,-401698736,1586168553,-1948003858,-2026246586,91490022,-352321096,-1983894782,2122572870,108265700,15761027,1048777077,1962935942,-2076278006,57999366,-1929253143,-1705982906,65535,-1961677663,957558294,2082172438,956727053,1981508614,178181,-1070923029,244044331,512433004,237706094,505092968,1317608298,-631338536,-635713493,-1983885687,699974238,922701824,922686010,922688362,2122521448,108332016,66748035,1183516797,-631862312,1183516395,-1034515520,-4698030,1385779455,-1032388784,734033663,-6664000,-1962934017,20836422,1024291840,443809794,1946157885]},{"sector":13,"data":[18409762,197019335,7911424,115879671,-371964279,1187447046,-1593834306,86836970,-1947342080,71170630,-385649152,-1073544984,-1476448621,1187451020,-1593834562,103484342,1183386552,13560276,722187937,-1995720698,1183700038,-767129138,1191172235,50841298,1356088973,-1194166529,-1706033150,4280,1355695757,-1705983957,4292,29247175,196649216,1187495147,-1593834818,103486026,-1360327750,109315783,512425984,529207074,-150989128,-1961739730,339774448,198592137,-1205373504,-1706033126,65535,1087784585,-1863777419,572427008,-1205892337,787939350,-259321286,-1982445941,-1263004608,1586188296,-1204289578,-1706033126,2591,253894283,381165451,976156416,-2131719406,-956168632,-16605690,-25857,1022033920,264769462,269750278,113709076,1670,-1982970227,-661925306,-1965930753,126402118,1356088973,-1194166529,-1706033150,65535,1355695757,-1705983957,65535,1355040397,1342177720,16777114,-310157824,535137026,80366941,-326413056,-956109693,65094,-1308735861,98620163,1344145642,-16091393,-6682506,184549631,-1960676160,-1072955834,20807548,1029799424,1971060738,2113930301,343392,138242940,-346063360,-28901532,167673475,-2136884612,839265030,994592777,595528262,-1961845599,-787945458,1002515449,326961222,-787945311,1241908216,138820371,62391678,-1207702784,1586233343,-1962440442,130483294,569114623,-955883893,-352321529,106859280]},{"sector":14,"data":[67527,1586169835,34064134,73304832,-1979824501,1575324423,503318722,1430622296,-1910575989,183272408,138840918,-435822383,-96040698,126605451,972834441,1970538054,114966147,1030124544,762642431,61993099,-964565293,922683626,889128666,-1962773249,69928004,105155408,1342325803,-1174402632,1347551317,1190298,108954368,-1959889665,61933174,-964565293,922683626,889128666,-1962773249,69928004,105155408,1342325803,-1174402632,1347551317,740762,-94467328,-1996077429,-310157817,535137026,80366941,-326413056,-1593643901,103483008,-1991767758,922746438,922683100,2124023522,184549394,-13994560,-1207530442,1344145142,494234,115516160,242532363,115095295,318413392,-1073020928,-1533409419,-352321529,-566821007,108461830,-11485141,-16193482,-16174538,-1962484682,787941446,726665448,1723355328,10074624,-308653998,-16777198,-16328138,1996424822,-399048706,842465032,-566821111,108461830,961593387,141820998,-1174402888,116064307,-1174396744,1347551436,519578,-600375552,-466157818,125344262,-443875328,442973,-2081649835,1183515372,71707398,201213577,-150635072,-28931624,149436159,1342546104,228341503,1268890,1006162176,92208710,-352321096,-1950340350,79846885,-326413056,-1962742653,103482438,100864156,-1202714316,-11532896,-1710384074,3589,-1174518135,755302490,-1949160704,-135006247,1575324641,1426064066,-950604661,17204230]},{"sector":15,"data":[73304832,1150022539,106203908,1468598153,73304834,67389059,1962950531,-443851036,180829,-2081649835,-1957296404,126551134,-1090894199,1139476660,1996436735,11135226,880066571,-1979425141,119800391,-2147332982,-1053161503,126554228,-1996335221,39094532,109315783,28835841,-1070903296,112720,-401698736,1793847477,-2096839037,-1200291780,109315783,-1262616575,959376136,645397062,71601494,146061392,-120469973,369491492,1754943488,-1962934256,126551134,-1996335221,39094532,-964481813,-1996190972,-1072956346,-963917451,-787958739,1039716856,310181900,-1962647925,39291655,1418265737,71616258,-1956773888,46292453,-326413056,-1962742653,1177224774,-28931836,92127243,1183439095,-25263106,-1207599782,48955393,-443826133,923058781,-620690688,16777730,-905903360,33554946,1057030912,2080375555,872416000,-1627324672,-654245120,2130707203,-1509948672,520158984,-335478016,150995458,184550144,-1560215808,1795162880,604045071,-2046819584,-1493106928,-1593834752,671153930,-1895759104,318767622,-2113862912,335544838,-335543552,738262799,-1174338816,369099269,1157628672,-1375666424,-788528384,-1358889200,-335543552,-1325334770,-1795161344,-1308557560,1241580288,301990668,1711342336,318767885,-184483072,486539793,-1627323648,503316997,587203328,939589396,-872414464,956366603,1124139776,553648647,-1224670464,570425874,-2030042368,-1140785390,1593901824,654311943,1526792960]},{"sector":16,"data":[754975250,654377728,805306889,1963000576,687866624,1912603392,1224802059,906035968,704643843,-1895759104,872415744,-1124007168,754975490,1828782848,-1358953710,1661010688,956301825,721421056,1392574208,-1593769215,-1291844858,1509950208,1409351437,167838465,1023410691,1862337280,889193219,-1459551488,939524867,1342243584,1157628425,-134216960,-553582833,-2113862912,1107297024,-1174338816,1375732225,1124074240,1795227393,687866624,1812004627,-16710912,1275069200,436273920,1459618307,-385809664,1526727174,-301923584,1560281604,939524864,-2113863920,0,1167087646,518818645,-21440370,2122534921,91488262,-352320072,440323,-26032,922681344,45614750,-4698095,-1202708983,-1202712318,-1706033024,65535,-1962742397,1297948645,131786,1966083,10617087,3670275,10027011,0,0,1167087646,518818645,-326903666,205949738,1946157629,343411,255682164,1024685056,57999873,1023480041,57999875,-385808151,-6684397,-16776961,1183649398,-1706027306,65535,-1202667477,1347420161,26522,242679552,383141517,-26032,28835840,-1070903296,-6664112,-2097151745,124478,-1070921612,-26032,-1070923776,14281113,-1559869813,-471133366,115097219,-16157696,-1710826442,183,115228291,-14912512,-16327114,-1710385098,209,14129744,922681344,-6682914,-2097151745,449086,922702196,230164186,-476426240,1342177280]},{"sector":17,"data":[59802,43667456,-16777215,721869366,-157658944,1342177280,64666,-633929984,505862,-26032,-1706033152,65535,18848336,922681344,922683056,-6682918,-2097151745,451646,922685300,-6682908,-956301057,451590,-1547687168,-559741220,114991878,-51991,1996425334,-26106,652804096,242679807,-15960321,1996425846,108461832,16777114,49120000,1562371467,202033741,1426129664,1795162881,1979712256,1090584320,-1476328704,754975232,1073808128,654312192,1510015744,671089408,1040188160,1426128641,1291846401,1442905856,855638785,1459683072,-1811873023,1140851200,-1375665408,1157628416,251724544,1140851457,-889126144,1459618304,0,0,0,1167087646,518818645,243325070,-402583543,1048772790,1946159984,153518087,1005321744,109852415,-1728048712,922701906,922683018,922686004,-1684401614,-1560281088,-1073019222,922684276,-1415966668,-352321536,-401698802,45613766,-1147514816,-2097152000,-443874579,-884122337,1167087646,518818645,243325070,-402518007,1048772690,1946159984,153518087,1005321488,109852415,-1728048456,922701906,922683018,922686004,-6680014,-1560280833,-1073019222,922684276,-6680524,-352321281,-401698802,45613666,-6664128,-2097151745,-443874579,-884122337,-2115204267,1459668716,269066326,19260458,-96040704,376750091,-1962476383,-1996030442,1451883590,117481982,117577355,77665515,102140679,-62486265]}],[{"sector":1,"data":[-1577167223,378210056,1183385354,-128546314,-1961878367,-1559224810,378082098,-960556236,459849227,96012062,-1700400640,65535,-1705983957,65535,-1705983957,65535,58048523,-1962861591,1452013126,-27903496,1178167413,-10258948,-1928113610,1358905478,1342190520,16777114,151451136,91488528,-352319816,505859,-1962930395,-2130751346,-1056182047,-11499895,305805055,-100609,-2037515146,-1705967808,65535,191905411,-385649664,922681708,-6680006,-2097151745,-2096957882,-385812394,1183514792,-128545802,-2097151443,-2037841702,-1769341124,1446772542,-385647106,142540940,2013021755,8579331,305805055,-12810613,-12675445,-2097151699,1347551450,-1202667477,-1706033149,65535,236994179,-967082495,1493121670,305805055,-12667137,-12798209,-12941683,112720,229161040,1354771280,16777114,1883144960,57933835,-16720919,-15582666,-49482,-1191232330,1385758721,2147465296,1354771280,-1706012592,65535,191905411,-385649664,922681520,1183647370,-1202710874,-1706033072,65535,1353074317,16777114,118530816,-955747008,462854,-14947584,-2096723402,1946221182,118667269,431490027,1390054407,53910096,1183514624,-27882500,-1995217245,-1559009258,378081312,480448546,504793360,-1957670384,1452013126,142840,1375787651,-26032,748879872,773228819,270836499,270931593,325596927,325465855,325596927,325465855,16777114,1354771200,16777114]},{"sector":2,"data":[470206208,-1711275774,65535,191891143,1599995904,-1017256565,1167087646,518818645,1048828046,1946158864,-1976107232,270437126,503810823,-26032,922681344,-6682864,-956301057,462854,56138240,922681344,-1415966150,-1711276031,300,-1962472287,-1559818730,378082150,547558248,571902224,976682768,-26094,748879872,773228819,270836499,270931593,-1705983957,308,269035136,153518334,849476880,873892627,270312211,270407305,197670655,197539583,197932799,197801727,193946,98867712,113704960,1706,-1962742397,1297948645,-1873273141,-326412987,-2082959842,-950655252,167701574,253894283,381165451,976156416,-1947170030,1183386688,205949942,1962935869,11462915,1962938429,46852355,1946226749,17906955,-1427569803,10676480,-1559345525,922684352,922686010,922688362,-6677656,-956301057,34158086,102664971,38272768,16154243,884475253,-1962546417,126613086,-244087,112725622,312561664,533771,84253264,116785152,1946226697,-330920692,-60912816,-351111169,-330920690,-60912816,721569675,-11529145,-1207772106,-1706033142,65535,-1207011585,-1202716667,1344145918,16777114,102664960,38797056,-385875528,2122515049,108265482,-1559345525,-1070922060,-1962780439,20777542,-385649408,37552648,-385649408,54329856,1026585600,57999364,1023462377,-696975354,-1207011585,-11534330,-1706029450,65535,91602955,-352321096]},{"sector":3,"data":[1354771202,16777114,-1197348096,-1706033151,1496,-1804287989,31999686,-1961136991,958098966,1964730902,1745238283,-1207601893,468388334,305805055,459945727,459814655,-1202667477,-1706033150,508,1343200440,1356744333,1342178744,91546,-514949120,112704,976682832,1781989138,1748434715,1347590427,1358954424,726684313,1347440832,396186,976682752,1781989138,1748434715,-398029541,112720,-565801648,1354771280,141722,470206208,-385875710,748814078,773229331,1711680275,1746279187,-129595117,200955529,-385647150,125828834,58179595,-1191257623,-1706033150,316,58048523,-1694578199,776,1342178232,305805055,325596927,325465855,-362753,-4654986,1385779455,1354771280,-6664112,-16776961,-15582666,-15505354,-15505866,1996487286,2147465464,1354771280,-1706012592,596,-1946256919,1317788742,130122730,1283375419,-1588543445,103485240,103485446,-1706030614,65535,-2472311,922685046,-11530234,-15696330,-6628234,-16776961,95948406,-6664192,-16776961,95948406,-6664192,1342177535,18330,-31397632,-1411329,112725622,-191213568,1342177284,-2031612272,-401698816,922745970,1183649920,-1706027282,65535,276838143,384714381,1354771280,16777114,-1274624256,-16777210,-6680970,-385875713,1183710678,1996443882,374798,-26032,-1073020928,-1075248267,-365001731,-1737228286,-1588543445,103485238,103485566]},{"sector":4,"data":[-1706030596,1616,-153336183,17828102,518587253,276734463,1593777129,-1962742397,1297948645,503319242,1430622296,-1910575989,317490136,269066326,19260458,-129595136,158646283,-1962476383,-351863274,117743879,117839499,-1980742007,512488022,529207074,-150989128,-1961739730,205556720,737822345,-1684385600,184549384,-385649216,2122514674,963969274,1342190520,16777114,-96040704,-385649344,884474074,1586188303,-1204289542,-1706033101,1369,253894283,381165451,976156416,-1947170030,1082784326,-94467316,1183385483,-125926404,-1962249216,138841048,-351123575,-60912882,1150022539,138816258,-954972279,454214,425603,1182991476,2122516718,57999608,-1161473,-15582666,-15505354,-1592564170,378213164,19731246,14320384,865751122,1375731720,147167824,922681344,922686254,922686252,922685028,-761655710,-1560281086,378082092,1721832238,1746307859,459842323,459937417,-1961677663,-1559024106,378084204,1187388270,1183451636,-179926802,1358186125,-1705983957,2602,49120094,1562371467,313933,1167087646,518818645,-327034738,1448542342,184960651,58001478,721533673,278548672,184549381,-385649216,2123170219,459849454,96012054,-1952058880,1451952710,-364476148,-1288567,1347554934,601242,172395264,51140235,1444087366,1645120264,1679723278,-431060722,1005084297,-385647149,125763737,57917755,-1962897175,1452009030,77288,-1996432765]},{"sector":5,"data":[1451876422,242679778,-1070903214,112720,88644176,512425984,1065357228,-385649652,1996423386,-327745778,-1695910145,2489,-8733043,369820350,3389703,1996465650,-532247794,98719371,-763166718,-1202695680,1385758721,2147465296,1354771280,-1706012592,1580,-15829249,1996481142,2055638496,-1734717185,-2097151999,749630,-1097180812,-956301309,451654,269027062,-16550910,1183573062,206998282,-1994692445,52128278,1444087366,460104456,460199561,305805055,-2097151699,1347551450,650138,321691904,321787531,241440313,109001596,241305145,28849014,-2093946112,17581574,206050947,242679552,-1280257,798681718,-1593835516,378211938,1183387236,-396981786,-1947842933,-1259739050,-1983894530,-1072956346,109251188,-2097016020,1256982,167265990,-1998305654,1183709510,-1070903048,-26032,2122514432,175374588,321662595,773751554,1996423187,-294191120,460207871,460076799,244122,-2090902016,-443874579,-900899553,50341130,-16615168,50368000,16989953,50333440,50774273,50363648,-16478208,50372096,-16245248,50339584,-16561664,50339840,-16247040,50340096,-16416512,50340864,-16354560,50373888,-16154880,50341376,-16289024,50341888,-16357632,50374912,-16326144,50375168,-16317440,50375424,-16754944,50343424,50758913,50337280,-16276480,50345984,-16544768,50347520,50769921,50340096,50491393,50340864]},{"sector":6,"data":[50504193,50341120,-16550400,50350080,-16162816,50351104,50777857,50345216,-16559360,50419712,-16225280,50388736,-16102144,50356736,-16157952,50357248,-16182784,50357760,-16408320,50358528,50345729,50354432,50757377,50354944,50635009,50355200,50618881,50356480,50763521,50356736,-16283392,50364928,-16581376,66560,0,0,1167087646,518818645,-326903666,-11118832,721635894,-6664000,-1929379585,-11471290,1996425334,-26106,1183383552,-94991880,305805055,512446546,1602945870,-1960867018,78771782,-670834477,704726922,922702052,922686254,146281260,-6664192,721420543,1183535296,1376135942,1183666179,-6663948,50331903,-1996265466,512490566,1200292686,-196703990,721844107,-1995400138,1178202742,-1959952900,-8171522,-1962640056,-1207702585,1178140744,721714684,-2091258944,75319551,65783691,-1962915656,-62485560,1156301099,66340491,1178333766,-1958576132,-2091912578,75319551,65783691,50350264,104594502,92148542,-351060319,1224704783,-947190659,1220019179,-62520576,1982591115,-167033102,-963926660,1358186027,233311888,-2090902016,-443874579,-900899553,1478361092,-1957345904,-661774612,-2096436093,1946158718,1310624624,779616003,708069258,1200312548,105251594,112720,-26032,-6684672,-1929379585,1343682118,278673151,-1957642197,-16560610,2013202039,-26100,1183645696,1183535350]},{"sector":7,"data":[1356396294,-1873756117,2942990,55195391,16777114,1310624512,105286403,-1962260735,-167555554,91521031,16777114,49120000,1562371467,182861,1167087646,518818645,-326903666,-1957275872,2122517110,125632520,-150452597,-1962677288,1183385670,108954604,-1962443520,-654899642,1183515627,-364476154,556675,2122516852,57933830,721528553,889147584,140442,-498693888,-1962642177,-16560610,-125106569,145562,-1983436032,-1072961978,2095645567,1310624513,242745091,-1711115009,65535,-1816951,512427636,2013201230,-1694987508,65535,1183434539,2143292392,21883139,1357006477,1357792909,1342179512,157338,-498692864,-163148464,571472,-26032,512425984,1200292686,-532248270,971785867,58713670,-1962870039,1178200646,-385646616,-6684433,184549631,-1587186496,101386068,410322774,-1157627976,1347616767,109852415,16777114,122987264,123082377,123090687,122959615,1344194187,16777114,-1338080512,745799695,55451275,-13862913,1996425334,516328198,-1706025392,65535,25822919,-6684671,-956301057,100870,10348800,556675,1183517556,-96040468,-336443863,-364475639,704398985,2122576966,243073032,32261771,1183572550,-163184142,2122526443,142475272,32261771,552332870,425603,1183518333,-465174038,32786059,216791110,425603,1183532926,-263847446,-2066689,1996484214,-227082256,-755969,1996480630,-461963294,-1174396744]},{"sector":8,"data":[1347551436,16777114,-529072384,-624897,1996486774,-59310086,110769919,110638847,16777114,-2090902016,-443874579,-900899553,1478361094,-1957345904,-661774612,-15012733,-256374154,-6663937,-150994689,1971323074,112646,-16740887,1183648374,-1706027278,65535,-1980610933,1183573574,-398030348,-1980348789,1183578694,-62486024,55451275,-1926465537,1343678022,264858,1310624512,746061571,385500813,-26032,1183514624,-230258202,-1981266293,1183577158,-163149318,-1979955573,1183709254,-1924131094,1343681094,-16222465,-6683018,-1929379585,1343679046,16777114,1958742784,-9049853,263194311,-1070923775,-1962742397,1297948645,503318218,1430622296,-1910575989,915101400,512430646,1999307598,108411146,-963967874,1183515627,105285894,142524427,-401698736,99351692,315802,-310157824,535137026,46812509,-1873273344,-326412987,-1948742114,-1962717666,1194919494,-1962574582,65735239,-1996077429,-1073019322,-654898562,-401698736,99351628,16777114,49120000,1562371467,453167693,637534976,-1811874048,1862271744,-1761542400,-1610612224,469827330,-1224670464,-2030042365,-184548608,-1425998079,1426064128,738262786,150995712,788594434,-1862204672,486539779,1963000576,570425859,385876736,989921024,-117374208,486540035,-2130705664,1040252673,-805240064,536871683,1258291968,1107361537,-352320768,-1023344894,-1459551488,855638274,-1728052480,-1006567679,-1862270208,1224802052]},{"sector":9,"data":[-1962867968,872416002,-1056898304,905970434,-536804608,1023410946,1174471424,1040188161,1526727424,1694564096,1711342336,1207960321,1090585344,1258291972,922813184,1325400836,-1660943104,469827330,0,0,1167087646,518818645,-326903666,512448014,1200292686,-163149514,704857994,-230258204,-523041615,66477707,1060103,-1946663287,-196703993,-1946657141,-1962717642,1194921028,-1961984498,-667159482,1854080886,1325338872,1310624754,105286403,956847755,58594903,2080408297,340211973,1586199415,71797752,105317273,-1995942125,1451883078,139869180,92234620,1913013819,-96040100,972838539,242550870,1963345465,-128021751,134367222,922698612,1996427834,108461832,16777114,302446080,1551110155,-1961136991,958098966,1964730902,1745238351,-1958120165,1755444318,1779862299,139933979,1194932853,-2143980282,1979711871,1310624559,105286403,-1995942261,1468601415,-1873784298,137947150,55451275,542663,655341568,-230257840,-1873741615,59959310,49120094,1562371467,313933,1167087646,518818645,-326903666,512448014,1200292686,-129595082,-1961080949,1194008151,441916184,-1980086647,-1039401898,1187448693,-352321290,-128021642,1207312267,292815874,55451275,1963001846,-6663416,-352321281,1310624522,340232963,-1995024501,1451881030,-59310092,-1191545089,1385758975,-230257840,-1946921333,721636894,1461393479,-1706012134,65535,-1946530165,-70124450,-1056712239]},{"sector":10,"data":[1347605267,16777114,-2114942208,2113994750,16758789,-963968277,-1946794359,-1979494882,-467001273,1962296891,813170455,1345669002,-1997126006,-1202708409,-1706033151,65535,49120094,1562371467,1478413133,-1957345904,-661774612,-2096698237,1946159230,142016356,55451275,704857994,-6663964,-1996488449,664406086,-16777213,721635894,1996443840,1310624520,239569667,1342588419,16777114,1310624512,912231171,1183385483,-96024580,250281984,-2080612725,-2146370490,-130457,1183578694,-96061176,512486012,260047694,49120001,1562371467,313933,1167087646,518818645,-326903666,922703376,-1070922934,-26032,512425984,1200227150,-1947981309,-24949008,-1207602431,48955393,1178322571,-1962576378,216729158,1929510531,112645,-963968277,-1962522999,-1962717666,126563935,-1324984693,65196804,1060290,-335788407,-60912862,-1727772789,319178499,372967511,360452910,104531583,225841964,284978819,-2096738561,2130708094,108954584,-385646848,1486946550,1241921799,-1878297597,95807502,-1560065375,-6682792,-1962934017,1200356446,1191418116,139924230,55451275,-1995159671,1586173527,38270716,-1979157496,-467009209,721611584,1310624704,138905859,55451275,-1963166069,38242308,55451275,-1959370869,-62486265,44056195,-1955564288,105352152,-1995942005,1451880518,21465842,1183441962,206015478,-1946663287,-1979494882,-467008953,-336312695,-60912835,-1727772789,319178499]},{"sector":11,"data":[1183385687,-229209616,134367222,1200228468,1088694785,-1070923029,-1946794359,126549086,1183441962,-62487564,-60912880,-1995683957,1183709254,244338928,-1962673176,1325336134,1975520006,1310624688,17793027,535301776,73964285,99287040,287130,-310157824,535137026,46812509,-1873273344,-326412987,-2082959842,1187448556,-1962931974,-1962717666,126563935,-1946401143,38270680,-1962511359,1183386695,1310624762,206015235,722356011,-1202652602,-1873795313,4909070,125157387,299162,-1710888192,1175,-1962742397,1297948645,-1873273141,-326412987,-1193767394,-11524337,244319862,184556520,-1710787136,65535,-6683157,-2097151745,-443874579,-900899553,1478361090,-1957345904,-661774612,23391361,1310624598,912231171,915087243,1149961038,374639380,1963480889,105330949,512429940,1602945870,-165704906,1963000391,112645,-1070923029,-1947187575,-1962717666,1468732487,-196703978,-1946790263,1183385671,-96024590,1187446784,-956301064,64582,-1946343552,-2147267042,1486946575,1241921799,-1878297597,61728782,-1560065375,1048774488,1962934944,-62456061,44056195,-385647103,-2033778193,65186,-22509881,1721827328,1746307859,-162121453,92031103,2012497465,-226589887,-2093255424,1946218622,-92864757,-1862764801,-58529778,55451275,-1961662815,-1995216874,1468601415,1310624534,138921731,512425984,1204159310,244318210,-369393176,2122514675,92143868,-335786241,-226589933]},{"sector":12,"data":[-16417280,149680718,32796291,16146051,-624897,244380790,-1996279320,1451879494,976682990,-159973614,-1695254785,173,-1961129823,958106134,478146134,1178142076,-1592428564,378215304,1183390602,-296318484,-22378809,116064256,-22378809,1183514911,-296317972,-22772087,-22636919,-23034169,1183514624,-162100236,-22636999,108997756,-22772167,1183523954,-162100236,-22636999,-1125579916,-1534707456,-385649410,1183514803,-1601816078,-385646850,-1098710873,1965096610,-1467562228,-956300802,16687750,976682752,-1497956590,-1531510786,-1598619650,775356414,741801747,571411,-26032,1048772608,1946157552,-96040186,-1962852375,-89466,-1174494586,-369688566,-2104627061,-2037776724,-661913954,-22772085,-22636917,1468598153,-1633776894,-1601795074,105351678,-23159157,-1996262239,-1635055545,-2037645666,1200225962,56664324,-22378871,-1962714975,-1996269034,-1979800442,-1577146730,-2037841060,568983200,-1400467969,-1224781570,244383394,-2097071128,16689342,179837812,-1565591808,-1913615362,1358867586,721428664,1358865030,434638480,702465,44314359,-1995682811,-2080465786,16949310,-661973387,1468729227,-196703998,-1946790263,1183385159,-35853838,956843659,142473286,956712587,1132264006,15761027,1996426100,-126418950,2112360080,1310624762,-1665758461,-1962636290,1200161364,374835476,55451275,-23284085,-1996077941,512428103,-1232403634,1149959836,38242308,-136215]},{"sector":13,"data":[-2096978930,173118,113706623,2097828,44044031,-1191557377,787939338,-661978460,206866315,-369605119,-2090926249,-443874579,-900899553,1478361092,-1957345904,-661774612,117397079,1048773280,2116027040,-1576599787,-1572961534,108339202,44172999,251592704,-1532951904,-1543045374,2112770,113706613,66212,-150992200,-1962761170,105286616,206356365,119468171,-234879559,-2090901851,-443874579,-900899553,1478361090,-1957345904,-661774612,1459940483,702550,50753271,1183385670,2144508,44041771,1983508619,-1962574586,48956998,1183434379,-1610219258,-1539407102,913637378,44304071,787152928,-16604511,184721934,-955877952,520266246,702464,44183287,1854134411,1183517436,1455394300,519080716,375047,1183557106,105840390,-931807221,-310157474,535137026,80366941,-1873273344,-326412987,-942109154,172038,-1547687168,-1465711958,44344066,-2096979293,-443874579,-884122337,1167087646,518818645,-1465788274,-1441363198,139868418,92213372,1913013817,44605705,44701323,1721829355,1746307859,49120019,1562371467,313933,1167087646,518818645,-326903666,-1201935610,787939338,-661978460,206342027,206477195,-1980086647,251657302,108331684,44304071,1183514656,139889414,2147243577,956660781,645134918,-150992200,-1962761170,1283951576,1318554380,44606220,44701321,-1560108383,113705636,672,-1600056853,-1609629950,81154,244357503,-2080430360]},{"sector":14,"data":[-443874579,-900899553,50334724,-16393216,50339584,-16665344,50345728,-16608768,50346752,-16514560,50413312,-16637184,50348544,-16512768,50350336,-16639232,50383616,-16630528,50420224,-16684288,50420480,50457601,50347520,-16348672,50357504,-16670720,28160,0,-2081649835,1048778476,1979650618,31189251,460594827,563755007,1207959554,200427145,-1207142976,-1706029055,218,-402539287,1996426720,223930610,58048523,-1593725719,1183384296,1958743028,-1774780649,-1808335102,775356162,741801747,48732691,132841472,-1961677663,-1995231722,1451883078,460104188,460199563,-1980348791,1183578198,-61436934,2146981433,956660751,142079558,-1946532213,132906070,-1961677663,-1995231722,1451878982,-126418964,-624897,1996483702,740199402,-1875378417,181725198,-1980873079,-92016554,-385649409,-12779370,-385649409,1048772750,1946158938,268679192,18192976,113704960,1882,48760519,-169279488,43294976,43390603,1978422841,-364496575,2122529909,913572084,48774787,-1207602176,65736704,1343226296,16777114,-398556416,57999362,-956252183,190470,460103936,460199563,-1996319581,-385706474,1721827487,1746307859,-163149549,-1577560439,378208916,1183384214,-329872918,32786119,-12195584,-1947318645,17166422,13796096,-6664110,-1996488449,1451882054,-260636680,-1578207489,378215308,1177230222,-262792210,244338770,185531368]},{"sector":15,"data":[-385649216,1048837899,1962935016,-297366765,-1544530293,378077844,113705622,66280,-1018113,28896886,-6664192,1375731967,-1908998320,-1942552805,-26085,922681344,922688362,-1008198808,112663,-1560232797,922681884,1805258540,-1962934270,1438866917,-326898549,-392079800,-498693886,-3782969,1354771455,16777114,1975520000,158722307,305806979,-385649153,512428395,939465588,150170,1183401984,1975520218,268548102,-402431255,1996426204,190114010,58048523,-1962327319,-15689186,46373431,1183383552,731463930,-1980182078,-1705976762,650,1074929315,922684533,-1717956820,-385875966,512428307,939462810,303963787,1996437503,-25862,1996423168,-25892,-928841728,259342353,254555903,176794,506920704,-3675374,-1259799946,1975520011,741801743,-26097,922681344,-588574264,303963787,-6670337,1207959807,-941996407,115782,14843523,922687348,922682006,922682004,922686254,-6679764,-352321281,321691911,321787531,-1980742007,1755443798,1779862299,-465139429,-1981393271,1451873862,108954584,-2096728832,1962935422,460103945,460199563,1183523307,-229209104,2145801785,956660751,141812806,-1947187573,132903510,-1961677663,-1995231722,1451866182,460104122,460199563,-1984149879,2122563158,292814854,-1950857589,1183431254,-229209616,31606471,-26112,922681344,1369051706,-1996488700,1451868230,-1101645374,92216188,1992050233,243732]},{"sector":16,"data":[976682832,1354771218,-1032388784,-339708161,243740,976682832,-428409070,-1947961601,1451998278,-465163330,1390827035,-18352,1347590480,1347469355,79272528,1048772608,1946159984,124053763,-1947974005,1183442518,-363427352,-1411329,1996482678,-1200160838,254549643,244332543,-1995992600,1451872838,-359468,-639040652,-49919,-773258380,-263812351,972183179,192264790,1975010873,-495025402,-2096466688,481854,-1863777419,741801729,71277071,922681344,1218056648,-16777212,-1710088650,1809,305805055,470170,-1069119232,-2084415863,1962935934,-998341879,-385649408,1183514808,-1034515520,2092848697,956661531,343325766,1342177720,305805055,1347469355,-4032769,485212278,1342177720,305805055,-1673473,1183573110,-1101624388,467945003,1347610198,1358954424,726684313,1347440832,434074,1883144960,57933835,-955877911,302792198,112640,-26032,1996423168,-461963290,1342177720,343962,-2091888128,1946158718,-465138936,-337226101,-1136227578,1388205707,91069008,1183514624,35431174,2037694475,48760519,1822490624,1846971163,43295515,43390601,2122540011,1567948806,-2851197,2122522485,427163602,-1673473,28894326,1587171328,1375731717,-1099497648,-339970305,-998341857,-14781184,1996477558,112850,29071952,1347551232,462305023,462173951,117402,1781989120,1748434715,337700891,-1560280648,480444604,1514046210,309592071,123340487]},{"sector":17,"data":[62390272,144330768,-385875961,2122515943,57999556,-2096767255,1946158718,268613637,1048830955,1962935016,-59643645,-351272776,325493204,325588619,-1981266295,1183574614,-229209104,-1984412023,1187494486,-385875486,1183579650,-732525614,-2097151739,1347551442,93082,-398030592,-1419639,1996477558,462201298,462296715,466765355,1347605590,1978142352,1975520010,-37164797,425603,-924253324,-700019968,970479243,427152470,1976714809,462201108,462296715,1975408185,-1136248568,-1528233099,75399936,-1954647040,1452003910,-465139244,-1981393271,1451878470,-700020246,-1579657591,378215308,1183390606,-1101624900,12863175,112640,976682832,-428409070,-1947961601,1177271366,-430564380,-4698030,1385779455,1354771280,-6664112,-2097151745,749630,-1880554636,-398556412,57933826,-1946322199,1452003910,43295700,43390601,48760519,1692991489,-1001994243,1183514625,-665416746,-1981528439,1183573590,-1101624388,-1984412023,1156168278,-1001994243,1048772608,1962934768,-566328566,57999361,-1207920407,-1706016766,40,254555903,465562,506920704,119773714,922681344,-409333304,-16777215,-1710081482,65535,-1983887735,1446625878,2132507834,-1203357435,28841078,922701824,-1070919110,1996443728,-1065943102,28843243,922701824,1996427834,-461963290,-1950595445,1177271894,-430564380,-4698030,1385779455,1354771280,-1483059120,-2097151991,749630,1855588468,-385875965]}],[{"sector":1,"data":[113705971,1182782,-16520471,-15582666,1996477558,1354771410,1342177976,16777114,261928960,-934900400,374864,-26032,1719664640,1187495883,-2097151752,188478,1996430197,-763953196,-1961128799,723226134,1444663878,-397389100,1183385597,-968455176,1962427961,-129594579,276086795,1962934589,12183811,1962934845,14870787,303963787,512440319,939463112,1088046731,147823184,922681344,1996427834,-763953196,16777114,-968455424,1979205177,263632945,-934900400,702544,140679760,-1073020928,1048779893,1946157798,281851966,184727632,6731856,-26032,-1073020928,1183656308,-6663992,-1962934017,-15611874,-629735625,16777114,-565802752,-2082449783,190014,1347552628,-15269144,-15582666,1996477558,1354771410,1996443728,-562626592,-1713748341,1587171410,-2097151991,749630,2146002804,505318146,-1959264494,-15611874,-632911049,-2103816128,-1962934270,-1961746914,705137183,228217060,-1962934263,-1961768930,-385382369,1187512116,-1962934018,1178196550,-385647362,1586233124,506891262,-1976268014,1357130240,16777114,-27358464,298333835,8926347,-335657217,-129594414,-1580841335,378213164,1183388462,-162100748,305805055,-1713748341,332547587,1347605590,-1961128799,723226134,1444663878,-1202695468,726695935,1347440832,-26032,1183514624,-162100236,321652267,321787419,-1981004151,1048833622,1946159984,29157635,425603,28850293,922701824,1996427834]},{"sector":2,"data":[-763953196,-1713748341,-4698030,1385779455,1354771280,-895856560,-2097151997,749630,-2014772364,112641,80910928,1183514624,1177262554,-296346644,297289217,1183562326,1177262554,-296346644,462161409,462296593,-1713748341,468469291,1174531670,-229240336,462305023,462173951,724634,-398030592,-2081794423,1946158718,-1203336436,-1984276853,1451867206,108954558,-385649664,2122578374,57999364,-390423,1996483190,-1166606360,-1950845185,-15782882,-401698761,1183383886,-732526126,1962932867,11790595,1962934077,11266307,-1947187573,1446638166,957052346,108378182,14843523,1048774517,1946158938,-1001994387,1996423168,-461963290,1342177720,319898,-11513344,-14971338,-1709470666,1278,459945727,459814655,-1592853016,378215308,1183390606,-1101624900,123354755,-1207602176,65736707,1343226040,366490,1510393600,-956301305,190470,460103936,460199563,-1996319581,-385706474,1721891155,1746307859,-398030573,-1947576695,1452011590,-1203336718,-944089463,123462,-1946212119,1452003910,67028,1375785603,99719760,1183383552,-363427352,-2853121,-1935551882,-1911125221,-767153381,1389647387,-401698736,-1073019560,-286719115,-76420610,254555903,739994,-935919872,190028305,922681344,916066846,-1711276028,1931,425603,1048781684,1946158940,154837276,154932875,-1994692445,-1592038890,378210622,1822624064,1846970651,-443851237,311901,1167087646]},{"sector":3,"data":[518818645,-326903666,1187468816,-956301060,61510,15877831,105286400,-15507805,-15582666,1996426870,1354771212,1342178744,820890,237019392,-2079980647,-2045373680,-163149552,-940026231,189446,-262239488,324941451,1962948736,-465665219,91488258,-352321096,734014210,-1949791278,-628360122,465644441,-2079980589,-2045373680,462201616,462296713,737953419,60420678,319849478,-384793066,1183514974,100899324,370348164,1446711430,2132900874,138820357,1048779378,1946157796,-260666584,324935307,161920,1183521653,-1377068548,957227169,1149041734,185514472,-955419456,17259014,-18432,17885593,305805055,-493825,-1070860682,374864,224172624,547422208,100899086,370348164,1183387782,-128546314,16533191,-12982016,-237941,915143750,9047980,-2081143160,1127486,1048796277,1962935008,1916877864,2002402314,-196706298,-2145719520,1919022206,-193036282,-1978763654,-466947002,232036944,1183318016,-262239244,324941451,955532938,-16419584,216789062,234126976,2122319476,125116404,33179335,-954471680,64070,1183454443,1357130484,1357923981,1342177720,-1995412504,2122578502,108265722,-369998081,1183579815,-62510606,16547459,922695037,1183519290,100899324,370348164,1347555462,-1202667477,-1706033147,1965,-1727127391,277087747,277222931,-1980348791,1187510358,-956301060,61510,15877831,-27662080,49120094,1562371467,707149]},{"sector":4,"data":[-2081649835,1183515884,-1723842556,-120470997,39623248,748879872,74792975,1558954027,48250499,-1958972160,-1961135074,-28931833,254549643,1183385483,-1961300996,126549598,-1705974742,65535,-1996726645,-28901625,-1946401025,1065418334,-1948224256,130481246,-1961432320,-14978018,740199223,-1959264497,1346372678,532122,112640,-1034033781,-1957363710,82609132,460594827,1183385483,-1977488388,-466944442,1946165309,2964751,1060964980,1023767552,141885534,288622279,367722497,-237941,126549062,184436360,-942639680,1127430,1575324416,-326412861,1443556483,303963787,1183385483,-28915716,113704960,742,-1946263925,9108598,184174216,-385649216,-467009197,1962936893,12249347,1946181181,-28901627,1988877035,-60912642,704725130,2964964,-1947663499,6569216,-1981217931,7224576,1883076724,-385649408,1933377666,1029665792,1618215028,108381242,1593329350,1988824299,-60912642,-2013183862,2122381382,410258168,67008139,1150155894,-1957277695,1177224262,-1706014466,3977,184057472,113709685,66278,-106869,1988886086,218154748,-1946263925,1183513718,-385840904,1187446639,-1226071816,167265990,1187426539,-1427436552,536364742,1187423467,-1628762888,184043206,2122553579,208929022,-1946257781,2021719134,1953762815,1074022027,-1037330112,-1705969455,3490,1089881737,-1070922635,512452331,939463198,-631157,-25755849,1029274,-161576192]},{"sector":5,"data":[1988829067,218154750,-1946270069,51519006,1586188295,50826230,1346436678,721700491,-1705968058,3589,303970047,1224602,-163149056,-1961746781,-1995994152,1191181382,-28901628,48629447,-1125580799,112894,1575324510,1426064066,-326898549,922703362,1996427834,142016266,-1202667477,-1706033147,4184,262938251,-467007606,-26032,-1073020928,-1070922635,1187473899,-1962933762,60423750,319849478,-1961851370,1586169934,72221450,990273043,2135260378,1992833796,237019455,2097038905,-18406,1347590480,-1202667477,-1706033147,3009,16664263,-1950553344,1191181918,-1405711362,704678415,-6663964,184549631,-1197181760,65732609,1577059000,-1034033781,1478361096,-1957345904,-661774612,305805055,-15960321,765069942,-167772152,269160966,-1070922636,1048779755,1946157794,209125137,-16091393,1996425334,185657350,28836843,49120000,1562371467,576077,-2081649835,1586168556,-1995994364,130547270,113704960,1716,-1694599425,65535,-1034033781,1478361090,-1957345904,-661774612,17493121,16533191,242679552,1342177720,16777114,-125400832,205949950,1962935869,9824515,1962938429,30402819,1946226749,17906955,-1595341963,10021120,-1207011585,-11534331,-1711087050,4444,-1207011585,-11534330,-1711087562,4663,460594827,-2037565441,-1705967878,65535,201082505,-15829568,738130102,-6664000,-352321281,242679582,1342179256,-17135987]},{"sector":6,"data":[-1986375658,-16777198,129502838,-6664192,-956301057,190470,460103936,460199563,-1996319581,-1207790058,1575550977,176063233,-1962511360,-1264382394,37651206,141819906,-1710590209,65535,1038729259,172395265,1023410477,-260636666,781434883,319399935,556673,-943688445,190470,460103936,460199563,-1996319581,-16607722,-1224800650,-6619400,-352321281,242679710,-16091393,1996426870,314743306,-1073020928,28837237,721611520,-6664000,-385875713,-1224736903,-6619400,184549631,-385649216,1996488553,505870,-91845296,28856574,-991408127,1958742797,242679592,1342179256,1345323448,1024324072,57933825,-49943,129502838,-2037559296,1343684346,16777114,-91845376,-6663938,-1996488449,1090451078,384369525,1620223,-401698736,922684941,1100618612,-1962934261,-1543571834,1996430196,440334,-26032,-526188544,242679554,1342178744,1469338,48407296,111949567,-1705983957,4848,-1238552,-1207522250,-1706033151,5769,-1873756117,230418446,-1191266071,-397408596,-1360396850,-15581442,-669919214,420616465,-384700398,-310116707,535137026,181030237,-1873273344,-326412987,-2116514274,-956232468,63558,-1207011585,-1706033151,5085,-17529207,1024214667,57999366,1023485929,57999376,1023683305,192151824,1963004221,22604035,-972992279,16709254,-1207011585,-11534331,-1711087050,5004,-1207011585,-11534330,-1711087562,4428]},{"sector":7,"data":[460594827,-2037565441,-1705967882,5152,-506231,129502838,-2037559296,1343684342,1324442,-125926656,-15827456,129502838,-1617276928,-352321519,-189333685,1354771454,1304218,242679552,1342179768,1307290,-1070903296,335256144,1996423168,243726,336042576,726663168,278548672,-16777196,79171190,110776320,1342177301,-1705983957,5391,278535819,-2037565441,-1705967882,4460,-506231,146280054,-2037559296,1343684342,1430426,1141294848,-956301303,190470,242679552,-1961136991,958098966,1964730902,1745238283,-1207601893,48955393,-397361109,1822491465,1846971163,43295515,43390601,-385875528,2122515242,745799690,-1559345525,-1588590924,378215276,372841326,108338026,459802169,1048774516,1946157800,112645,-1070923029,50587728,33701507,-16223232,-728102282,721420305,48556480,755648139,138215425,66090752,-13724736,-2129162329,50333822,113762677,744,-1961136991,-1558483434,378077844,1996423830,-189333754,303274750,-1073020928,1996440181,636942,354130512,726663168,614092992,-16777195,62393974,815419392,1342177301,-1705983957,5433,-1207011585,-1706033148,5448,1354771280,1397402,-13309696,-1207011585,-1706033143,5470,112720,359176784,1996423168,243726,359963216,-1202716672,-1706033151,4479,-1207011585,-1706033148,4373,112720,-1224754709,1134231284,184549394,-385649216,1048837862]},{"sector":8,"data":[2097152842,-19076861,-1207011585,-1924136953,1358886534,1342243256,185236200,-14125888,129502838,28856320,-1477947344,81162,-1343683724,242679806,1342179256,-17398131,630870038,-1929379818,1358886534,1453978,-62486272,-385649344,1996488330,571406,-158954160,28856574,686313473,1958742794,242679592,1342179512,1345323448,1024087528,57933825,-107031,146280054,-2037559296,1343684342,1151898,-158954240,-1818603266,-1996488686,1967192646,-29824765,1342183608,1927810704,1949761290,374970907,1183514624,460628988,278542079,1031578,-96040192,-15689053,112725622,2056933376,-1560281066,1996423904,374798,304519760,-492634112,-1372127486,1354771206,16777114,172395264,1946157373,212241,71117940,1027437568,578027529,1474823147,-1372127255,112646,316709456,1996423168,-398556402,2037645314,-385875528,-1070923637,176063312,-1207601911,48955393,-397361109,-840176875,16777114,1144947456,1047855113,123471559,1755381761,1779862299,154837787,154932873,-1961136991,-1558483434,378079550,1721829696,1746307859,459842323,459937417,-1961677663,-1559024106,378084204,28842862,-1070903296,-356521904,123471559,1894318080,460104191,460199563,459937337,104401269,58006376,738161129,1525174464,1354771200,1525157520,-48961271,-15829249,1996425846,175570702,1233306,1975520000,112645,-1070923029,326933072,-269942784,112113916,-112662448,2130503145]},{"sector":9,"data":[-1911061227,1612025365,-753442793,-1911244012,-53417707,-1962742397,1297948645,1426066122,-326898549,155492632,1963214393,-398029511,75400016,-1207602176,65732621,1342180536,16777114,108461824,1342178488,384321165,330406480,2122514432,91553796,-352321096,-1547687166,-443872956,311901,1167087646,518818645,922736782,1234831020,184549401,-13797952,-1207530442,1385758732,-1976107184,607584006,574029587,426285587,-1398603776,1975520006,1073920032,427334224,367722496,111949567,1342179000,1342177720,1347469355,1625242,49120000,1562371467,1478413133,-1957345904,-661774612,1460071555,875989846,-26096,-125108224,111951491,-2096663296,437822,915098740,-167049556,-147123084,-1202246540,-1705967624,6324,111937083,915086452,-167049554,-147117964,-1202253708,-1705967624,65535,112068155,-1202318219,-1202716399,726663169,-1706012480,6443,414717163,244338688,-402137880,-1070864606,-401698736,922683345,93982772,184549401,-15895104,-1206897610,-1706033151,6422,109721343,1409946,1975520000,-1976107251,112646,332503632,922681344,112723594,28856320,-1070903296,-1885712304,1577058329,49120095,1562371467,1478413133,-1957345904,-661774612,112080639,16777114,1975520000,-1942552787,899078,-11513191,-16348618,-15525322,-1710024650,65535,184987299,-1205832256,-1706016766,2749,922686955,112723630,28856320,-1070903296,-6664112]},{"sector":10,"data":[-2097151745,-443874579,-884122337,-2081649835,1448545516,55195391,-1705983957,65535,113524355,721712128,-1207702592,512425985,1334444878,736963075,-162625080,58706187,-1962851863,126563935,78762379,-1039932717,-1996484563,512489542,1183515470,106334980,2132170553,956660799,947328071,-1946657141,60359751,1460864583,-96040696,1006392969,544998998,1178273151,-1961266684,1452014150,106314236,1178161269,-1957989116,1207367774,1114900482,55451275,-1962654069,1200162390,374835476,-6664110,-1962934017,-956084706,2119,55451275,722225035,-120517049,178256,-26032,922681344,77202250,-385875941,512426142,1200292686,-1037330164,1183447249,-1705815810,65535,-1309391223,-1948200188,-1962717666,117651039,-1946663287,71797720,105317273,990402323,310314582,1178273148,-2096400636,2080502910,-196703431,1586182123,-28931080,2114864953,112645,-1070923029,-1946657141,1988822094,972589830,209651831,1329137020,-1207601402,48955393,-947535829,28843636,-6664192,-16776961,-1711060426,65535,55195391,-1705983957,6572,-443850914,311901,-2081649835,1448548588,112475779,-1593478144,65734324,-1996059999,1183709766,726669032,12079296,129519617,-1070903295,-26032,-1073020928,2123070068,-122136600,-1734717185,989855768,91552326,1979350585,-398029469,-1202237418,-1202716416,-1706032889,7071,15367809,-1959693055,-24908682,-2096794597,611648510]},{"sector":11,"data":[384321165,12080976,129519617,-6664191,-2130706177,16902782,1983506037,-1193183764,451608577,82476673,-2129563135,17295998,1183648375,-1706027288,65535,1600045099,-1017256565,-2081649835,-1957294356,1175128134,-385649398,922681492,1183519290,173443848,-2097151699,1347551450,-1202667477,-1706033147,7236,16664263,-1407284480,705137167,1603948772,-1996488676,547486790,100899086,370348164,1446711430,2082766602,138820357,922688887,1996427834,142016266,-1202667477,-1706033147,7396,16664263,-16520448,1586232902,-1405711362,704678415,177885412,-1996488675,1178335814,-2096138756,1946221694,1958742793,-373282043,1183514897,173443848,319047171,19727958,14320384,-1980610935,-1039403946,-269941899,237019392,-2079980647,-2045373680,-195675376,92215932,1995589179,277127443,277223051,2146719289,956660786,729018950,305805055,-1962391925,1174604374,106304260,-2097151699,1347551450,-1202667477,-1706033147,7501,16664263,-1961956608,1174602822,-2079970552,1183402000,-27358210,262944395,-467009398,493853264,1183383552,237019638,-2079980647,-2045373680,139365136,51011211,1578304590,2094676742,990150443,-14323000,-1961739722,1451952198,71697162,1376146963,1354771280,1342178744,1048730,-28915968,65732608,-2080487681,925758,1586177652,-1405711362,704678415,-6663964,-1996488449,1178335302,-2096269834,1946220158,1958742791,-17962749,1577058744,-1034033781]},{"sector":12,"data":[-1957363704,149717996,106859350,1183385483,-1948742658,-1978442186,-1981535744,1187510342,-956301060,64070,48250499,-2096073472,2084636798,142508810,-2096857254,-2095052730,1962935422,-25263333,-1961525760,512491126,2021659486,141909759,1593329351,-28377344,1039681163,829685792,1946168637,4144456,1581078132,963605504,712247366,218660483,1994982261,142508801,-385649377,113705325,740,1709817899,142508801,-2130217952,10487934,2122573941,57999364,-1207877143,1055457281,142508801,-2081721299,1948190846,142508517,-588578643,218660483,719913845,142508801,-385649377,2122514721,-965476100,1057521283,2122563307,108265724,1577614979,1988866795,1579060222,21006867,1183441962,75400184,-16550912,1187511878,-1962933764,1849555014,-385649408,58589342,1023455721,57999405,1023449577,57999460,-385836567,1187512110,-385873160,1187512102,-385873416,1183579934,605448,222105468,1029275136,1416888352,1946198077,-465665201,57999362,-2080429079,1946158206,-28901609,-1946263925,-2146214346,292880440,-1962516853,2045509190,-2080485633,2080439934,106859503,-1979824501,-469317881,-1962934270,915144286,9048926,1183441962,-21435912,48498375,1273692161,-1594341689,-22484736,200820423,-23009024,536364743,-23533312,217597639,-24057600,1962963005,-10819325,1946186557,7618003,1441334133,7814655,1441334133,-26154497,67108792,1586232902,-1207465722,-1956773887]},{"sector":13,"data":[113401317,-326413056,-955716477,64070,1177247979,1183400190,1174510072,106303748,-1191557631,-1202712158,-11531518,1343443510,1343278264,16777114,1958742784,-1572961524,91488273,-335570248,6731779,71732048,-1559865717,378077832,1347551882,16777114,184727552,281851984,3389520,129931856,1183514624,-937522182,-1996029167,-1202651578,-1706033142,65535,201082505,-1954318912,79846885,-326413056,1443032195,-16091393,1183516790,-11526650,-6683530,-1996488449,1988886086,106859268,16662726,1208239755,-28951736,28837245,721611520,-443851072,574045,-2081649835,1183661292,1996443844,556571140,1996423168,108461832,1261722,-6664192,-16776961,1996425334,67221510,1354771280,-1174339656,1347583999,16777114,142016256,1355040397,1342194104,16777114,1575324416,503318210,1430622296,-1910575989,1257014232,-894023993,108954385,-16091904,-1207530954,-350350902,-1976107169,-1236890874,1119375390,-6664192,-16776961,396015222,50331648,-1991723450,149666374,-2135269749,192159807,-4569461,1178319438,-1214538,1183692406,1183535292,-1236915270,-1203336896,251697744,-1202716672,-1706033128,6097,109721343,381437581,-26032,-310181888,535137026,46812509,196672,16716700,196744,16713951,16973961,203640,16973932,203594,196717,16717277,16973966,202833,16973935,203720,16973938,71242,196615,16715935]},{"sector":14,"data":[196639,16714369,196642,16713599,196644,16716739,16973989,203611,196741,16714584,196646,16712197,196648,16714170,196649,16713853,196650,16720162,196652,16713798,196653,16717882,16973870,204931,196630,16719870,196664,16715790,196923,16718608,196667,16711770,196798,16718447,16973886,203004,196642,16718438,16974018,202987,16973859,205031,16973860,205114,196645,16712567,196680,16713903,16973900,202763,16973871,200944,196661,16720111,196699,16714233,16974172,202866,196668,16714978,196957,16717046,196958,16715891,196959,16717490,196960,16717533,196961,16714384,196706,16718867,196962,16718472,196963,16719813,196964,16718848,16973926,201911,196679,16720045,196711,16719986,196712,16719892,196719,16718587,196725,16718407,16973943,202794,16973913,204925,16973915,202722,16973916,204859,196701,16719853,16974079,202622,196705,16715628,16973954,202605,196706,16713839,16974085,204957,101,0,1167087646,518818645,-326903666,321691916,321787531,2081052217,956661521,175245382,-1961677663,-384618986,1721827539,1746307859,173422867,92017791,1929922105,325493005]},{"sector":15,"data":[325588619,-1995946359,1183517270,408838,-1073543049,-1476448621,1183514863,173443848,-16737559,-15582666,1996425846,22649352,748748800,773229331,1679178003,2131262478,1644575135,-1583778034,378211938,1844121188,-16091393,244320374,83914216,-763166719,-1923421440,-11471802,1996425846,42441224,1183514624,-754667020,1042189280,-1996029168,-661915066,-1727772789,319178499,1347553367,321795839,321664767,16777114,-14750976,1996425846,108461832,16777114,1510927104,-553611264,1661001472,536912640,49120000,1562371467,445005,1167087646,518818645,748804238,773229331,139868435,92213372,1913013817,321691913,321787531,1721858283,1746307859,139868435,92017791,1929791033,325493005,325588619,-1996077431,922683478,1996427834,108461832,132762,302446080,259264523,-1961991519,755917846,-628948991,-13374720,-15582666,1996425334,1354771206,1342178744,157594,-1407284480,222265359,1183518325,139889414,-2097151739,116064466,-1962522997,-310179754,535137026,80366941,-1873273344,-326412987,-2116514274,-1593802516,378213222,1446581096,2081521418,138819845,1721830007,1746307859,13625619,-1961677663,957558294,326896214,1178142079,-1962118648,-1073019322,20776316,-14713344,-15582666,1996425846,-26104,1183514624,408838,-1073540489,-1476448621,748749469,773229331,8907027,-1962391925,2146110038,-1961129823,-350516714,302446198,-260763637,-16091393]},{"sector":16,"data":[28838006,1347590400,16777114,77056,-1996432765,1451852358,976682884,726684178,95965376,-6664192,-1962934017,-2146456546,-1334506177,-1954396533,803963990,1350583949,-16091393,-6682506,-352321281,175570718,-16222465,-6683018,-352321281,889332750,-1929212670,2080517122,-2097032702,-443874579,-900899553,1478361094,-1957345904,-661774612,-1592988541,378215272,1183390570,-94991880,-1961136991,-1994691050,1451881542,105286646,956847755,326896726,1178142079,-1962117622,1451951686,172394760,-955492727,137734,1178501888,57933827,-1962816279,1452013638,206977530,-1578564738,956857344,57805382,-1962895383,1452013638,139868666,58527103,956342249,58132038,-16738327,1996426358,-92864758,-1191676161,-1706033151,917,-1946925429,1446639190,2081914632,105265413,1996427379,108461832,-624897,-1070861194,1183523307,-162100236,2080921145,956661532,360056390,-624897,1996485750,108461832,1342177720,16777114,-196703488,972445323,57997910,956379369,57997382,-16701207,1996487286,-380611848,1183514901,206998282,2130073145,11725059,1178142844,-385648908,1183514792,-162100236,1979340345,-129615606,28837237,721611520,-62486080,-1559020895,1183515162,-94991368,1963742777,172374325,1183527029,-162100236,1963480633,105265445,2122522741,443810044,246955651,-1592560640,35986288,974031616,1004654867,-385649215,983629989,75027,244048081,-511698064]},{"sector":17,"data":[-1547629571,2122521456,91488508,16777114,209125120,-16091393,1996425334,112646,79665744,2122514432,1802830076,-362753,1996486774,-193527818,1183536619,139889414,2146850361,956660760,292811846,-624897,1996485750,108461832,-352321096,105286432,956847755,461174358,1178142079,-15436044,1996425334,-159973626,737441535,-744861504,-16777212,1996487286,209125368,722106111,1285181632,-1962934269,1451952710,459842316,459937417,-1962522997,1822623830,1846970651,321691931,321787531,1963742777,172374277,28837236,721611520,75200,460328587,201253248,460366785,-1962522997,1446578262,958625036,510986822,-15960321,244320886,-956277272,190470,105286400,-1559734645,378077844,-1070923114,-1559020893,1721963364,205300494,305805055,459945727,459814655,375706,302446080,427036683,-1961991519,957244438,1964731926,1812347148,-955878117,18048006,49120000,1562371467,576077,1167087646,518818645,1721882766,1746307859,773208339,956921107,1964190726,12577027,305805055,-16222465,-426113418,-1593835515,378213164,372839214,628431754,461899321,922689397,-2002709958,-1978234085,77083,1375787651,7248464,116785152,1963985682,302446206,2004160523,305805055,462042879,461911807,-1962522997,19728470,14320384,1234849874,1375731714,1354771280,1342177976,99738,261928960,166639696,374864,108829264,116850688,1073745822,116861556]}],[{"sector":1,"data":[-16773216,645931636,-1610610189,-467006992,112720,-26032,-467009536,166727307,184607104,166765505,166798976,-1206129729,-1202713176,-1202714130,-1706033147,65535,604631201,-1558967296,-310179344,535137026,80366941,-1873273344,-326412987,-2082959842,1822498540,1846971163,1779841307,957052187,1964730374,112645,-1070923029,-1578482039,378215272,1183390570,-229209616,-1961136991,-1994691050,1451879494,460366318,-1996488411,2122577990,91554054,411335,325492992,325588619,-2097151699,1446576346,956658954,326371398,-1961677663,957558294,259787350,1178142079,-1710721528,65535,-1207762967,-1986396161,1451876934,-431584796,-1981262199,1451881542,-96040458,-1946397047,1452011590,173423090,-806812802,956857344,58067014,-1962883607,1452010566,173423086,1178142837,-385649400,2122515128,1349779704,15367811,1996442229,-327745554,-887041,1996484726,-401698810,1347614842,55706,460104448,460199561,-1980086647,1996487766,142016266,-1878624513,-100014066,-1981397367,1183574102,-296317972,-1980479863,1005319766,15367811,1755386740,1779862299,-96040677,-1979951479,1451881542,175570934,-1207404801,-1873805311,-103946226,-1981397367,1446635606,956855794,58060870,-2147342359,-31756250,-1947187573,1183445590,-464090654,-1947842933,1755572310,1779861787,26274075,-1947449717,1446637142,-385647350,142541064,1929922105,16705795,-1947187573,1446638166,956855562,58001478]},{"sector":2,"data":[-2097030167,1962997886,-360807578,-10455808,1996485238,108954608,-1962380032,1452010566,-1962087442,1452010566,77294,1375787651,108461904,954732176,-1706011911,1555,-1994692445,-1994692074,1451881542,175570934,-16222465,244319862,-1980275224,1451876934,-263812124,-1980606837,1451883078,-2093814788,1946217086,459841811,459937419,-1980086647,1183448150,-162100748,-1962391925,1183386198,-464090654,1978553913,-330942200,1038680949,1879998465,1183514907,-296317972,-1981397367,1183574102,-464090142,-1994691421,-1961136618,1452010566,-464111122,-1679228044,-498714368,-1813445772,-162121472,1178142837,-385649164,1187446918,-939524126,-7098,2122545899,997458168,-1962391925,1183386198,-61437446,-1961136991,958098966,141950038,1979336249,13297923,-1946532213,1822686294,1846970651,-330921189,-1980868981,1451881542,-1959138314,1451952198,-196703990,-1577691511,378215272,1446583146,956855798,58061894,-1962897431,1452012614,459842550,459937417,-1947187573,1183445590,-61437446,-1542401,1996482166,-495517724,1342177720,642458,-59310336,-362753,1996486262,1354771444,287386,460103936,460199563,459937337,104400501,91495272,282010,976682752,1781989138,1748434715,186423835,116785152,1947208466,241344792,241440395,460199481,104401781,91560812,-352321096,-1547687166,-310176924,535137026,113921373,-1873273344,-326412987,-2082959842,1448549612,722508961,-1995435514]},{"sector":3,"data":[1187505222,-16776970,721635894,-6664000,-1962934017,2116749950,2113866724,-339727612,-1983411454,211814982,-1947981296,2117685240,-1962641908,-1962677305,1183386694,1042189068,-1321759984,65065732,105155568,-1995942773,1451882566,321692154,321787531,2096780857,956661527,275970118,-1961677663,-1995231722,1451882566,27257338,67257590,1149970804,-754667262,266633448,1997162043,142508818,-385649659,2122514817,57933834,-956204823,128582,-2097057559,2080639102,23587075,305805055,-362753,1149958262,1357130241,321795839,321664767,1342179512,16777114,976682752,-92864750,-1694992641,1377,272506507,1183528843,-754667252,-2131754016,221758,1386285684,1410763523,-9443069,-1325251445,-2132225276,1183387620,57188860,1962690105,30796035,972834443,142543430,15222471,15722752,956974219,528222790,721639585,-1991706554,1487005766,1511426819,77059,-1996432765,1451882566,-1955337222,1183448134,-398014490,1486946304,-129619197,-336443767,172395287,2112243257,-396457193,-773306625,-2105046045,-431619837,972179083,-511907770,32013955,1325335420,-398029848,-129629799,-371183,-15582666,1996487286,167156472,1586167808,-1948003864,-1727823225,-120470997,990529027,1535043142,17333891,1183536501,-94991368,-2097151739,372965586,947195492,241305147,116798069,1963985682,-1807842517,242548752,254951043,-2095221249,-15781826,1048778357,1979649842,809403162]},{"sector":4,"data":[326500111,278136519,199950337,-2081929473,-2097022906,-16713130,1996487286,142016504,1290276496,-297367051,-1026423,1996487286,142016504,-2014835056,-364475917,-2081663351,1963001982,38073968,-2096729084,1946220158,-297366772,-1980737909,1451878982,842957804,1366687503,254819971,-1958054401,60359748,1410532932,-95012088,1178282357,-1591446024,378213164,1446581038,2081980410,-129615611,1156977015,192218114,33703158,28837237,721611520,322610112,-1947318645,816050262,840337679,108954383,-165579776,18575366,1183516788,-329872406,1183516395,-262763538,1996443730,-401698808,300677499,-1018113,1996484214,-361299988,-1981280624,-2090901771,-443874579,-900899553,1478361096,-1957345904,-661774612,460326646,-1591118847,378215276,19733358,14320384,28856402,244338688,1391742696,1781989200,1748434715,142383643,132841472,-1961138015,-2095355370,-443874579,-884122337,196622,16711854,196756,16714722,196639,16715118,196641,16713266,196664,16714319,196667,16713609,196798,16714213,196674,16713496,196681,16712343,196965,16714509,196709,16713249,196710,16711913,196966,16713302,196967,16714169,254,0,0,1167087646,518818645,-326903666,922703372,1996427834,142016266,119706,302446080,175378443,-1961991519,-384932842,922681678,1996427834,142016266,-1202667477,-1706033147]},{"sector":5,"data":[192,1586092843,-1405711364,704678415,-129594908,-401698736,1183384599,-125926410,-1592756979,378212484,33886342,13796096,-2097083927,1946876030,-125926638,-2096335860,1946941566,-125926650,-1593019127,378212484,17109126,-2083067136,1962997374,108954432,-12946173,-15582666,1996425846,178184,-26032,1347551232,-1202667477,-1706033147,247,1586092843,-1405711364,704678415,-129594908,-401698736,1183384471,-62455818,957227169,729611334,1358954424,726684313,28856512,-6664192,-1593835265,378213164,372839214,108335238,277087801,1187475060,-2097151748,1963132542,-129594596,1946165565,3030282,1060963700,-955616000,132678,49694407,-60912896,262944395,-467009398,1039681161,92012553,2113932605,108954403,-7703294,244381814,-1996286232,1178203206,-385649162,1183448951,1975520246,-9574141,-1711520117,277087747,277222931,49120094,1562371467,445005,1167087646,518818645,-326903666,748770938,773229331,173422867,92214908,1913144889,321691919,321787531,-1995946359,250284630,-1962391925,1182992982,1451426056,1183383562,-2007594618,305805055,1855606866,-1593835517,378215304,1446583178,956659080,125077062,185730806,-1593150448,378215304,1827216266,108954370,-1207601918,65732618,-1996462920,999921222,461310550,1178273148,-1961594104,-1952868794,-1948611640,1451952198,465644298,721677267,1183422912,-1806268014,1358710413,1352156813,305805055]},{"sector":6,"data":[-1837695150,-16091393,1996425334,55351958,1325334528,-59339780,714621578,-1941534236,-401698736,1183384075,-62485622,-1840905319,194270739,721843650,-387343936,-1937865983,-1961134838,2055273590,309661079,60409483,1444123206,77204,-385820029,2122514887,410258060,227311235,2122519156,208931980,193756803,2122516084,225773964,-1711520117,328353283,-1662413738,-1971420415,-1961724671,60423238,1444123206,-1907979884,-342862199,-1907964150,1187512319,-2080374896,1962998910,325493087,325588619,1972655673,-1840891640,1625883509,-1773761791,-1806287975,92019583,1938966075,-1773761772,-1949791335,-1840870438,731141771,-338486335,-1715459325,-1986902391,1183683670,1183666428,922701976,-11398598,1996460662,142016266,-1701415169,65535,-1946398977,1116404854,-1981535592,922717254,-963964358,-1840905319,1385453075,-26032,2122514432,427035276,210534019,2122519412,225708940,160202371,116787060,1947208466,-62485741,-1840905319,93607443,-763166719,12708096,33980035,2122524277,309592202,-1869842689,12183566,1971996219,-13899517,1996476395,-401698676,1183383719,-14947958,1032603275,594804769,1946168893,4144414,1996429684,-401698676,-1073020793,20796276,1025274880,796131330,-2080444183,1979682942,-1904311546,-1948551937,1451986502,-1957237872,60423238,1444123206,-1907979884,-946841975,100934,-1946237719,-1072985530,20777844,-385649408,-1293287783,-1975072770,-1427570686]},{"sector":7,"data":[-1971420162,-1961462526,60423238,1444123206,66964,-1996434813,1451855430,-1975072880,-2031550464,-310157570,535137026,113921373,-1873273344,-326412987,-1948742114,524092998,2134340608,605459,222107772,722697984,-1205146688,636157954,1946165309,10501618,1996483956,-26106,-1073020928,1996426357,-26106,-1073020928,28891508,49120000,1562371467,100846157,1308623616,385941250,419431169,520158976,-1308622080,570490624,-1308622080,-1174339836,-1509948672,-603914492,1073742592,1711341312,0,0,1167087646,518818645,-326903666,-2091493512,67757118,1048774516,1963264484,976682836,1781989138,1748434715,-26085,45613056,1183666187,196104342,-1735047544,-26032,1187381248,922684052,922688350,922688348,922688354,-1181082784,-1929379840,-1202678714,-1706033151,251,205391559,-1796669408,976682752,1354771218,459841872,459937419,-2097151699,1347551450,16777114,726684160,45633728,-6664192,-1929379585,-1665234818,-1190717937,-1510866939,459159295,459028223,459421439,459290367,152730,166641408,512259725,375047,1621206514,1645644571,1578514715,956724507,1947950086,166639665,-1790538416,702544,-26032,1187381248,1183652500,28856468,-6664192,-956301057,520896006,243712,39688784,1599995904,-1962742397,1297948645,-1873273141,-326412987,-2082959842,1187451116,-1593835272,378215264,372841314,158669662,459015737,552141685]},{"sector":8,"data":[112641,42965584,-1073020928,132711285,459841793,459937419,-1980742007,1621226070,1645644571,1544456987,1579059995,-95516389,737959561,-1982653503,1451881542,34380534,922681344,922688386,1996427834,-92864516,-624897,1335555190,-2097151997,749630,-1125579916,-263811840,-159973552,-1191938305,-11534335,-1877853642,50784270,628473867,1342177720,305805055,-887041,1996484726,-193527818,1358954424,726684313,1347440832,16777114,976682752,-227082478,737179391,-11513664,1343980086,-159973552,-1695254785,951,191905411,-1710787584,65535,1721847787,1746307859,-229230317,92224124,1928349241,-263812301,66213515,1444148294,773209078,2082570003,738605830,-15108333,1996485238,-263812112,66213515,1444148294,-1706011914,65535,1342177976,189850,49120000,1562371467,1478413133,-1957345904,-661774612,-1592857469,378215264,372841314,108338014,459015737,28860276,-6664192,184549631,-1588431680,378215272,1183390570,-195655182,-1961140063,-1961139690,-1961141234,-1994695138,1586100814,465644540,-163149357,-502135,1393703478,-11513263,-1928185290,-1202654650,-1873805311,1501198,158646283,1342177976,16777114,49120000,1562371467,1478413133,-1957345904,-661774612,-1962087293,1183516766,307661584,2080528185,956596014,-1960283641,1451954246,205914898,-1961994733,1463486558,2132048898,1980185348,537966606,-26032,-1070923776,-16679703,-14974410]},{"sector":9,"data":[1996428406,276234002,-15829249,-6681482,-2097151745,749630,1996479605,242679560,722237183,1996443840,-401698806,-1073020588,1586175092,273058568,957503115,243204695,121177212,1182992503,1451426320,748748818,773229331,-96040685,-239991,1586170486,41418504,-1070909441,922701904,1347427202,-15829249,-6681482,-1962934017,126552158,-1996335221,1451882054,340167672,1963607609,273058618,957503115,478148694,1178142076,-1592429578,378213164,1177228078,-61465606,286279169,334172758,-1961677663,722677270,1444674118,-163173892,-502247,1996428406,276234002,-15829249,-4715402,-1070903169,1347440720,16777114,1883144960,141819915,97946,-16848640,957495969,1182075462,-1961662815,957573142,981268566,1178142079,-1959562506,1452013126,205915128,990795283,2131963414,990280737,1997745158,-126419175,-1946781953,1452013126,205915128,1376671251,5741136,2122514432,678690822,1342178488,305805055,-15567105,1996427382,209125134,305805055,-493825,-1070860682,-1706012592,1423,-2097151560,-443874579,-900899553,1478361104,-1957345904,-661774612,-1962480509,126553694,-1996335221,1451883078,-2110324740,1354771227,85039696,116785152,1947208466,-58817701,2136308736,-92372218,-11700736,1183516278,-61436934,-2097151699,1347551450,10906,-96040192,100423307,-763166719,1679178496,992572686,1963876870,321691939,321787531,241440313,108795519,241305145]},{"sector":10,"data":[1586171507,17269518,153475,1659617323,-1961991519,957244438,91618390,1962559033,142509035,-1205046272,-11534335,1996424822,-92864516,-1962260853,33885270,13796096,-4698030,1385779455,1354771280,-509980592,-16777215,1996424822,-92864516,1342898872,16777114,241076992,-2097019005,-1207958953,-310181887,535137026,181030237,-1873273344,-326412987,-1579643362,104401994,1249184832,-1962128223,957107734,2131510294,956726297,1930183174,205955345,206050955,206308905,206444057,1285629163,1310100236,1142307084,2132245516,1107704070,-1592822260,378211398,100731976,370216002,-310178748,535137026,281759069,-436206848,520158980,-1996487936,553713408,-1342176512,604045060,822084352,637599492,1174405888,671153921,167772928,687931137,-369097984,738262784,838861568,771817219,1040188160,939589376,620757760,1275133700,-1761606912,1291910913,1677722368,-553582848,-2113928448,1644232452,768,1661009666,-1593834752,1677786885,-1761606912,1711341312,0,0,0,1167087646,518818645,-326903666,298098950,-939899255,64582,1586175979,41910778,242515967,17188854,2013202548,-26110,1191116800,-96041988,458793225,2096907833,49120217,1562371467,1478413133,-1957345904,-661774612,1444736131,-16351615,-385649281,244318534,-1191208472,1861681314,-1608611066,-1996029167,-661917114,-16615425,458793271,-523040847,-1706012007,65535,200558217]},{"sector":11,"data":[-385649216,1048772882,1946157534,12079117,-6664189,-1996488449,1996485702,1354771206,166213375,1358198527,16777114,-364476160,-1036805816,129614379,871944960,1086467010,-1947711863,1452010054,-754470424,96611298,1183383680,458793456,-939768183,60998,163073003,-294717696,298059267,-1947842935,105286616,-1962784887,1183573598,-1962440210,1325393502,-62485508,-1962653815,1736500830,1586232838,-1946973210,19203652,30179328,-1962522743,1204217438,1191182088,-398029842,2095990329,637101,-1947701513,-1003093008,65962769,-2131736949,-523141148,-511636341,-1056243711,1183515785,-297367064,163064299,-294717696,298059267,-1947974007,-61931560,-1979955573,1586168903,107446500,-463565826,-16234554,-1578219777,1178147672,1221557486,-1877246813,845838,49120094,1562371467,182861,1167087646,518818645,-326903666,-1202301168,787939337,100866904,1183388100,-96024588,233504768,-1946526069,-971275202,1191182081,268083706,2096776761,-230242325,915079168,2129334724,-16614271,-1955498881,1149976844,-503889918,729801856,-97060910,-162100977,1049352843,25828228,1183441962,-62470152,451608831,-1980217717,163118150,-126945536,512489611,1099567556,-1981535736,2122446918,1962999800,-58818081,242548991,-1946788213,-1977908162,25752134,163058411,-59836672,512489611,1183453636,138512626,-16136573,1983509062,-385648908,1600061306,-1962742397,1297948645,50332875,-16765440]},{"sector":12,"data":[50371328,-16735488,50343680,-16729856,50412032,-16742400,48640,0,1167087646,518818645,-327034738,1448542490,-1996365663,-257836986,-1236891391,-1928694017,-1202668474,-1706033086,826,16598726,1889779755,31499019,-1560158557,-257752612,702465,37657168,1048772608,1946161064,-1472790769,31365647,113704960,4008,44828359,1048838143,1946157742,-1372127473,-26110,113704960,686,461518591,1358954424,1347469355,-6664112,-1711275777,65535,-150989128,-1961739730,572427248,54496015,113738750,621168267,61931521,227270867,200794496,-1962571327,-1961942498,104920607,-385649407,2122514749,57933832,-1929300759,-1924088762,1358918790,-17922419,45390416,-2037579776,-1202651276,1385824255,505936,48470608,-2037841920,-12714260,-385649281,1183646003,1996443836,814124294,244338943,-1995505176,1048820294,1946159984,21227779,205978,-326726912,32285694,976682832,1354771218,-320336240,1958742787,1954975030,1183666431,-2019929924,-1996488703,201255558,1024818624,91619325,-350217032,1073788931,63347280,1441464320,305805055,-219672944,-2092242156,1946204798,814124347,1183666431,1637503164,184549379,-1926660928,-1705984954,877,-18315639,1954545469,10663959,-18305289,915134603,469963168,-18440567,-50043008,-18041089,235162,1488896,305802999,512487563,529207074,-49913728,253894283,1895767947,-26104]},{"sector":13,"data":[1183645696,-6664004,-1996488449,-1946193274,-1961942498,1488927,305802999,-2037647221,1099562866,-13767928,-1961739722,-1961942498,1488927,305802999,1082912907,-754274042,206312,-1136226992,142016336,-1878624513,4253710,16777114,636928,-26032,113704960,2147418604,-1548335477,850919920,1211037440,5113091,-26032,-1465712640,-1203336433,1577181347,49120095,1562371467,445005,1167087646,518818645,-327034738,1448542426,-9271609,2122514432,74778380,65781803,-1995684213,-2080409978,1963396222,-1169766906,-15602944,1183648374,-2037559110,-1705967826,65535,1354385037,556675,512431732,529207074,-150989128,-259322258,-1962786677,82510928,-1711276104,129519698,-6664192,-1996488449,1040151686,108363775,-377487432,-2037710298,-324796556,196124929,1947092537,175570723,-1928956161,1358919814,65539728,1921419533,1883145215,57933835,-1711146519,65535,118259331,1183649909,1996443834,4372490,-26032,-1224802304,1996488564,142016270,-588771696,1975520001,1925088076,963903743,-8878451,175570768,240538,2092960512,175570728,16777114,747014400,2147433983,-1564993676,749664000,-1948742657,51486774,715032860,73892095,1958150141,-25857,1407778816,209617919,-1926597625,-11486650,-6681994,-1996488449,201271430,1024884160,91619325,-350217032,1073788931,-26032,602472448,196125183,1963869753,-1608611051,-1205892335,-1359544158]},{"sector":14,"data":[-259260556,33835136,1996425451,-401698802,512430709,381161250,242153216,-661975157,939514115,278938,242679552,-9128193,16777114,1488896,-1961988361,572427248,54496015,113738750,621299339,227213313,201253248,-1962571327,-1961942498,141623071,22170,175570688,124826,-62486272,253894283,-150989128,260771438,-654059381,-1979955573,2122516551,1534328840,-1710328065,65535,253894283,-150989128,260771438,-654059381,-1710065665,65535,-9128193,-9402739,-26032,512425984,-930410718,-150989128,-1957687698,646351111,-661956353,-14246397,-15577207,244321910,722621160,-6664000,-16776961,244977270,-956301307,-16605690,1883145215,410320907,28458627,-1592691456,1178143664,-16157682,-1862306634,139913230,556675,-1331618188,239483147,1996425332,-26098,1996423168,-26098,113704960,-64866,-9140597,-310157474,535137026,181030237,-1873273344,-326412987,-2116514274,1459790060,42387286,-1962934017,-358413754,-1070903295,-26032,1923284992,572427022,-1205892337,1861681174,-1947170040,1351287360,-96040700,-2080614775,1962935934,126085379,721975039,-1706012480,1671,-1961991519,957244438,1367342166,1178142076,-1588956166,1178143664,-1958579192,-1961942498,1488927,-1962381577,343442416,-13732864,1996425334,-92864516,16777114,-1643723008,-1946157310,-1961942498,1488927,-1962381577,37784560,-1996205941,1451883078,142016508]},{"sector":15,"data":[1347469355,-1202667477,-1706033147,1713,-1961851743,957384214,763165782,1178142079,-2094631174,121918,1048780661,1962934752,175570712,262944511,236992255,16777114,-18432,-346908336,-599882822,57933825,-2096736279,122942,1307116404,175570694,1342210232,-1705983957,65535,-150953288,-259323282,295706251,1149974275,172263704,-8878393,-2033778560,65402,16205510,-8616307,-15956343,-1980283251,-135546,-1070921610,-6664112,-16776961,-2037577610,-1924071678,1358820486,-1981280624,1975520015,99019011,721975039,1347440832,1342177976,490138,142016256,-16599297,1343200440,-34306419,-401698736,-1073017202,-1175911563,261928965,-158954160,95965438,1738166272,-1593835513,378212484,1446580358,-385647108,142540971,2012890681,10610947,31211139,-385649664,1048772759,1946157536,9300227,1343200440,-17398131,702544,-26032,-1073020928,1996440948,2022083850,-2037559041,-1924071954,1358892166,-17398131,229161040,702544,277127504,277223051,-2097119227,1347551442,16777114,261928960,-158954160,95965438,-6664192,-1207959297,-1722744833,-1070903214,178256,-26032,1996423168,45547272,261929215,-192508592,244338941,185452008,-385649472,-303431863,-599883004,57933825,-2096831511,122942,-639040652,175570692,-8878451,-293171888,-2037559043,-1924071668,1358886534,1343072440,1342180024,-1946532213,-2147091370,13796096,-1483059118]},{"sector":16,"data":[-16777208,-2037577098,-1202651272,-1706033024,2405,31211139,-385649664,1048773772,1946157536,75688195,-150953288,-259323282,295706251,1149974275,205818136,-8878393,-2033778560,65402,16205510,-8616307,-15956343,-1980283251,-135546,-1070921610,-258322352,-167772152,252383750,512437108,529207074,-150989128,-125106066,-1962124917,-390690505,205818877,185075201,721699979,1143671876,101056782,175570699,-8878451,-293171888,-2037559043,-1202651380,-11531518,-1206693322,-1588592538,378211938,-2147152284,13796096,1436176466,-1207959545,-1924134142,1358893702,1342190520,647834,241344768,241440395,2113689145,9234691,1178142847,-385649670,1048772738,1962934748,-532774021,1953824769,-16222465,-15834058,-1710333386,1404,185730806,-1960086513,-1961942498,1488927,-1962381577,207195128,-1232521333,1150025190,134611212,71600907,722224171,100732484,1996425990,2022083850,-2037559041,-1924071954,1358892166,1342898872,324155135,310807888,-6663937,184549631,-385649216,-1699152063,-12654081,-1928694017,1358919814,1342210232,652186,-599883008,57933825,-2096949271,122942,233374580,10663939,-1962250505,-1608610832,-1959329007,1149835332,10663950,-1962250505,-1608610832,-1959329007,1149835332,-1311626480,-26105,-2037841920,-1769341470,512490980,529207074,-150989128,-125106066,-1995685493,201263238,-969444160,1727888006,939513995,-42236275,3389520]},{"sector":17,"data":[115317328,1996423168,2055638282,1740132605,-1600499712,-16777206,-2135422346,-1070903296,179280464,1048772608,1946157532,41609475,31473283,-385649664,-1564999056,175044352,512487563,922948000,-1994898293,-1098706364,1946222344,178302,-43743607,-43874679,253894283,381165451,141489920,1099692171,72452866,-43612535,-43477367,-2097151739,-2037841710,-1769341584,1183579506,1787201802,-494498819,-459895811,1820756477,1855359485,1954990077,-947912707,-166266,2022098943,-3,-2037577098,-1202651806,-1706033128,2815,-1207273729,726663296,244994240,-2097151989,121918,-840367244,-532774143,57933825,-1207843863,1861681314,-1947170038,51486750,407145271,-15448951,244320374,-1995990808,201262214,-1960348480,-13136936,-1202320778,754384899,67494097,496652288,-16777210,-2135422346,-1070903296,189897296,1048772608,1946157532,24045827,31473283,-385649664,-1564999324,175044352,512487563,922948000,-1994898293,1996428868,45547274,-401698561,1996425509,8435722,1354771280,411802,-599883008,57933825,-2097075223,122942,568918900,175570689,-1924087765,-1202653114,-1706033151,65535,-34961783,-150953288,-661976466,295714443,-1635181309,1200357126,-358708468,306678269,-34955637,-16335221,-1995553397,-1635052473,-1098121750,1166802694,373786896,-34955637,-16335221,-1995291253,-1635051449,-1098121750,1166802694,440895764,-34955637,-16335221,-1995029109]}]],[[{"sector":1,"data":[-1635050425,-1098121750,1166802694,1615300888,-34955637,-16335221,-1946532213,-2147091370,13796096,1435043209,239569154,-1961863287,-1961942498,1488927,-1962381577,104986616,1718946816,1342660280,809114,1619429632,1131692285,-43999605,-1957283957,100526726,1448083486,16777114,681201664,-1962934272,100526726,-1706033122,3734,-44005751,295706251,-1564991605,175044352,-2037647221,1099562336,-1961628896,-1961779170,10663967,-1962250505,541116400,113704960,2147418602,-16599297,297114,-599883008,125108225,31473283,-955747328,16715910,-15930624,580520566,-1996488691,-1191243642,-1706033151,3375,-15679869,-15960832,244320886,721847784,-10032192,-6681994,184549631,-1957202496,-1961779170,10663967,-1962250505,73433328,-12325890,1996425846,-26104,113704960,2147418602,31211139,-2096663296,122942,-2033776524,65296,1996426475,-26102,-2037841920,28901136,-6664192,-2097151745,16715966,28873076,-2090902016,-443874579,-900899553,1478361094,-1957345904,-661774612,14347393,512448087,126553890,-940161399,64070,-1331615509,-96061173,1586174324,4162550,1207308660,192152070,958104225,57997894,-2097013015,-15272378,715258438,-96061169,381210748,-1339099392,572427019,-1996029169,-661916090,294787,58593148,-2130578711,33555071,-387382410,-161576191,294787,108998012,163715,922690934,-1070920784,1134186576,-16777208]},{"sector":2,"data":[-1207193546,-1924136953,-1202670522,726663169,244338880,-2081128984,749630,-1461124236,-1608611071,-1995994351,-661915578,-1994897525,-1070878138,-401698736,2122383772,1971322630,12708099,295706251,2088777611,57933859,-1962888471,-2037834172,529268588,-150953288,-125106578,-1960945269,-2012771809,-37242,-1348860298,184549390,-385649216,-2037776249,-466944146,-1202683892,1344143907,-1924087765,385839238,-26032,-1073020928,-2037553292,-1924071640,1358917766,-1705983957,65535,-14121331,71932496,-2037841920,1950416746,-1608611004,-1995994351,738141830,-644198208,184549390,-1962183488,-37730,-26057,-1635057664,-2037645530,1200226154,647924510,73892095,108461951,16777114,1354771200,16777114,-128021760,-1984805237,113645639,721420304,42640320,-1560115037,-1935474034,-128021758,1149891467,306678036,-1980211573,1586171975,239569400,-1980211573,1586170951,172460536,-1559085405,2075660706,306225920,722576547,1570394304,-1560281073,-1070919258,-1506345136,-62485231,112720,259299920,-661979136,1200209963,1342671106,16777114,306356992,-11485141,-1928183242,-1202652090,-1706033151,2936,-1070868341,-1996339319,306619143,-1206801757,-1202713176,-1202712650,-1706033147,4005,324155135,1343278264,1342180792,571802,-2090902016,-443874579,-900899553,1478361090,-1957345904,-661774612,1460202627,10664022,-1962512649,-1606513704,-1994587375,-1070859170,-1996339319,-60912889]},{"sector":3,"data":[-1994897527,915143238,401281476,956712587,158663236,-33135488,17196161,-96010496,-1593194877,1178147672,1591835898,49120095,1562371467,182861,1167087646,518818645,-327034738,-950664804,63558,-9402681,-1070923776,175570768,-85455216,1975520001,10348803,-16091393,1119356534,1268404224,-16777204,951584374,28856322,-6664192,-16776961,1996425846,-26106,-2037841920,1586233198,-2012771834,2122576966,125042696,-9519485,-2089520128,16740542,-2033769099,130928,720651914,599281892,726670850,-2037559104,1343684396,1101978,1975520000,-943199435,16740486,-196703744,-2146638806,35895376,-1070903266,747015504,-1706027265,3702,242597899,1346371768,91802,-373282048,1996423493,747015430,-1070903041,244095568,1187446784,-16776712,530187894,-1996488687,-12716474,-15698817,-1070922122,-360280752,244338942,-66072,1234831990,-1996488686,-12716474,1343124607,832410,-159973632,1241242,108461824,1189018,1958742784,175570703,-1710852353,331,1736294411,-9388413,-385649664,1996488476,205888010,1174601728,-2037823478,1183579752,1753626890,-15632642,-1946261362,-2130810722,-361407425,-26704129,-26691841,-26573171,539211856,-26032,-1706033152,65535,276838143,-26573171,539211856,-26032,-1706033152,65535,-2113984791,2147481214,512448628,529207712,-150953288,-259262866,-1709281025,4920,-1710852353,3113]},{"sector":4,"data":[-26966391,-150953288,512489070,117641632,-26835319,-2037655413,1200225892,1721666334,-129594626,-523239132,1284174731,-35553276,1200144650,112644,2122519019,-176881656,-1710852353,3774,1593751273,-1962742397,1297948645,503318218,1430622296,-1910575989,-2098429480,108461824,103578,2147433728,1183520629,-1924129274,385842822,1073789008,-26032,1950351360,112645,-1070923029,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,1488982,-1962512649,574000088,-1994652913,1207434334,1946943494,-339727612,-60912890,1578125195,-1962742397,1297948645,503317194,1430622296,-1910575989,250381272,10664022,-1962512649,-1608610832,-1959329007,1183391300,440699900,-1947056503,1183390788,102665208,38272768,-1710852353,65535,16402119,-15799552,1996424822,-25862,1191116800,407145466,1929004601,73695466,458269181,-1977727863,-2145123004,1149766412,102664965,38797056,958091425,141884486,-1694730497,4928,-1695385857,4936,-1694992641,1029,49120094,1562371467,182861,1167087646,518818645,-326903666,-62470394,-996081664,-96040687,1586173675,105286650,1963083577,107446276,-62455810,167396995,958093473,-495125434,-1962742397,1297948645,503317194,1430622296,-1910575989,183272408,32153942,1946568249,10152195,242368131,-1203995136,787939337,100863602,1183388100,-1948742666,1183446855,-1961497608,1191179870,-129594376,326436665]},{"sector":5,"data":[167134851,242353919,-1946788213,1194919494,-2067454,-1592888818,-120513704,242353919,242353723,113706623,3698,-150992456,-1961987538,-1004631056,461152529,-1996210133,1190657094,1954545916,1087436549,1183515627,-62486020,1929381437,1354771216,1332634,-96040704,-351374685,242393363,1486949355,1358483739,16777114,-96040704,1593460363,-1962742397,1297948645,503317194,1430622296,-1910575989,351044568,-330905770,1187446912,-939524108,64582,-1962516853,-163149561,126605451,-1988107136,1996484678,-263811832,178256,350984784,1187446784,-956268820,63558,1988851435,-1947807240,1485567582,-1995994366,1346432582,1523866,1183399936,263666,-1946532215,1178201158,-14385414,1183647862,45633780,261771264,-16777195,-2135422858,-1070903296,167942736,1187446784,-16744212,1183647862,45633778,496652288,-16777195,1996425334,-227082258,1394842,-230257920,1177108544,-129564692,-1946788213,2145681415,1995982395,-8722173,-1928825089,-1202652090,-1706033150,2032,49120094,1562371467,313933,1167087646,518818645,-326903666,1586189866,71797512,-1325398235,-1948200186,-754274025,1071809002,-1983773952,-661923770,-1979287925,-1981535744,-12724666,-1957661440,-1961942498,1488927,-1962119433,307792880,1586182027,-1948003880,126550616,1356482185,1356613261,1342186168,1068954,175570688,-1696958721,65535,1037452937,74776831,1122746411,-1948754293,1183450742]},{"sector":6,"data":[-1962899242,1183516766,4138454,-523040079,210498443,184804736,-1962440255,1183516766,-1312807722,637063942,-208994297,-2147201909,-1056179999,-1207679095,-2090991615,-443874579,-900899553,1478361096,-1957345904,-661774612,-1207535873,1347420415,16777114,-26112,1586167808,1074235656,28837237,721611520,1975520192,112645,-1070923029,-1962742397,1297948645,503318218,1430622296,-1910575989,-1229433128,512446465,529207074,-150989128,-259324306,-16486145,703070832,28706048,1554512,295082576,-661979136,-956299322,-16665594,-25857,-2090991616,-443874579,-900899553,-1957363710,49054700,16664263,108954368,2134277120,75399942,-13733366,179832950,1347590400,-16353537,-6683530,1375731967,-3217328,33441417,179832902,1347590400,1342457485,16777114,140413696,67389066,-1962440656,-1958674874,113401317,-1873273344,-326412987,-2082959842,1996445420,374790,112720,-26032,-1073020928,-1897331851,-632910592,-1196800375,-1706032570,4450,-1996340219,1187490886,-16776964,-6641034,184549631,-1956416320,1346415174,1353598605,1084901003,348756560,-1706033152,5565,-666465976,1191172235,738707160,-1968546165,1357130247,1356351117,16777114,-664892672,-1962932282,1183493214,-2010053380,37664775,1186484254,-1924129278,1343663686,16777114,-62456064,100433539,-6647428,-2097151745,-443874579,-900899553,50348802,-15623168,50366464,-15319552,50367488]},{"sector":7,"data":[-15349760,50367744,-15606784,50368000,-15292928,50400768,17945601,50333440,-15651584,50371328,-15869184,50339584,-16740352,50341376,-15233792,50374144,-16402176,50341632,-15402496,50342656,-15241216,50342912,-16310784,50343168,-15672064,50343424,-15774208,50345216,-15278336,50345728,-15756288,50345984,-15802112,50412800,-15941632,50348288,-16463104,50382848,-16486400,50383104,18329857,50346752,-16741632,50351360,-15647488,50417408,-16143872,50385152,-16430592,50386176,-16476672,50353920,-15666688,50386688,-15663360,50386944,-15952640,50354176,-16465152,50419968,17981953,50350592,-15242752,50354944,-16663296,50355200,33583617,50349312,-16714240,50355712,-15220992,50388480,-15248640,50389504,-15259136,50389760,-16169216,50422784,-16389120,50357760,-15617024,50358016,-15643648,50423808,-15297024,50358272,-16702208,50424064,-15531520,50391296,-16719360,50424320,-15450880,50391552,-16759296,50424576,-15320832,50359040,-16632576,50424832,-16261376,50425088,-16448000,50425344,-16510720,50425600,-15838464,50425856,17869057,50356480,-15925760,50426112,-15934720,50426368,-15649536,50426624,-15780096,50394112,-15618560,50426880,-15701504,50427136,-15704320,50427392,-15271680,50427648,-15424000,50364160]},{"sector":8,"data":[-16623104,33280,0,0,1167087646,518818645,113760398,66022,-1705983957,777,-991424880,1958742799,-1942552793,112646,-11513191,-16348618,-15587786,-1710087114,65535,-1207339712,-1706016766,531,31852231,-310181888,535137026,516640093,1430622296,-1910575989,1458340824,205949782,1946158653,605542,272452980,1023898625,1953759505,-1070903061,-26032,1996423168,309262,123844688,-1415950306,-16777215,79171190,-6664192,-16776961,1639452278,-1202708985,-1202716667,-1202716669,-1706016752,393,-2096913943,1946159742,-969474295,50436625,-1070923776,-2096918295,1946159742,239504134,-2096712541,131646,1996482676,-26102,-555024384,1024083595,443809793,1962934845,31844611,1962935357,54126851,1962935613,36432131,1996471531,112654,-26032,-1706033152,65535,58048523,-956090903,2147462214,16777114,242679552,1342178488,503925432,4372560,56597072,1253572608,1183666185,-1701162820,-1929379839,-1202668474,-397410303,1048776665,1962937200,-1136226999,275179600,1047838731,-1928431873,1343667270,1342178744,1342178232,1346375864,16777114,1958742784,-1136227039,155891792,-26032,1996423168,309262,155891792,-6664162,-385875713,1253572938,-1070903287,260040784,191905411,-1207208704,-397407926,-1073016820,113707380,2928,-2147408407,608830,1183658100,1253593276,-1070903287,-26032,-1073020928]},{"sector":9,"data":[1183652980,1183666364,-6664004,1207959807,-1371108016,-26032,-1073020928,246942581,-6664160,-352321281,-1136226891,1354771280,1342786232,1342189496,146074,1975520000,155891751,3848272,38509136,-1073020928,1253578357,1555582985,-6664192,184549631,-1207601728,48955393,-1705983957,65535,1034700425,58032127,-16741911,-1207530954,1344145255,16777114,-1401487616,16777114,-1608611072,-1205892335,1861681314,-1947169876,939466328,1354516109,1342194360,16777114,-1136227072,-26032,1183383552,477380786,-5474561,-1070878090,-26032,1183383552,1282752688,-1699580161,65535,253894283,381165451,976156416,-1947170030,939460696,16777114,242679552,1342177720,16777114,23914752,1889779755,31499019,298202879,16777114,1354771200,16777114,22079744,305805055,16777114,-1337554176,-1206764893,-1706030774,65535,34735815,-6684671,-956301057,135686,-1951732992,20777030,1024160768,57999362,-385829399,1996423442,309262,-1136226992,1119375382,-6664192,-16776961,1253576310,-1202708983,-1706033147,65535,1970585611,503925432,59480656,1183383552,-1136226890,-6664170,-1996488449,-259278266,-1984150899,1187493958,-1929379660,1178188870,-13928776,1586214990,-2012771656,708618822,1060897908,1187448181,-1962933836,126531678,1017792136,1006924892,-3115718,2122561606,91488436,-340232449,123844612,-1236890800,1342786053,86938,242679552]},{"sector":10,"data":[1342178488,503925432,70425168,1626013696,491418,242679552,503925432,374864,243792,1074837584,12098128,-1073020928,-1914109067,242679805,1342178488,503925432,100833872,922681344,-6680122,-352321530,142508319,57934592,-228375,1996424822,112654,112237136,-1873805312,112715790,1577058744,-1962742397,1297948645,503319242,1430622296,-1910575989,-435763240,721420545,345657536,-2097152000,1791038,922685300,-929424556,-956301310,1790982,-401698816,922684406,45614732,1347590400,109721343,278411007,278279935,14490,343162880,1342194360,1342439608,16777114,458531584,158711819,1346372280,17562,-26112,113704960,486,-1962742397,1297948645,-1873273141,-326412987,-2116514274,1442988780,1024214667,57999366,1023540713,57999369,1023533545,192151824,1963004221,33941763,-956178199,63558,16533191,-1236890368,125286480,1354771280,503450,1975520000,13756675,1354122893,352922,-1991751680,37615686,-1962508800,-1237137680,-1236890368,33266256,1183383552,1326588,-2065104001,-1236890368,-360280752,1996443902,98867964,-2037579776,-1202651414,-1706033060,553,747014464,-59339777,-18316659,-13728119,-1635054101,1065418542,-15829924,-1946210674,973024902,1996434566,750190569,3062015,243792,-26032,-2038235136,-16515284,-53578,-1946211146,-1238631306,-2104623314,-1705967894,1669,-1207011585,-1924136957]},{"sector":11,"data":[-335615354,242679562,1342178232,381044365,103127632,2122514432,494797816,-956795253,-346245566,-1236875756,242679552,1342178232,1347469355,431770,572427008,-1205892337,787939350,-259321286,-1962387317,-1270445817,1065408651,-1956875264,-16775650,1996423751,814124468,-2037559041,-1873739918,70445070,1354122893,-13597043,-26032,-1073020928,-2037578123,65798002,1353991819,1342803640,1342194360,171418,242679552,1342178488,503942840,9673296,512425984,1342111750,-971314430,626182,-1207011585,-1706033151,1879,1354771280,16777114,32416000,-1593227613,-1935472136,242679561,1342178744,32388863,451994,242679552,1342179000,167261951,16777114,1354771200,33434,20310272,687747,922683764,-895872570,721420288,49998272,687747,1183516276,112501518,33701507,-1543168,-359003530,-352321536,172395486,1946157373,146722,1592329077,277762,-1545010315,343298,1575551861,408834,1944650613,-4920574,28839542,446320640,1342177281,73882,1975520000,12708099,253894283,381165451,976156416,-1947170030,-2037839808,832241384,-16777215,79171190,-2037559296,1343684260,1342194360,83610,-1531019264,1265893630,-31553907,-1534685872,-1070903042,32152144,-1073020928,-2037566092,-1924071906,1358831238,681114,-2037823488,-1924071774,1358882438,132762,1958742784,512134418,783831294,-845524992,184549386,-12290624,79171190]},{"sector":12,"data":[-1617276928,-16777216,79171190,-174436352,1342177289,16777114,537835520,81369680,113704960,2928,298202879,277402,1354771200,295834,112640,-1207839767,787939350,512430650,117640994,-31684983,-31553907,1619430736,244338942,-1962299672,-151118690,1947207239,512134424,1602965758,-1707606264,2171,91602955,-350216008,160348315,-1534685872,2124042494,184549385,728331456,-2037559104,-1705968098,65535,1484046347,-37714291,1488976,175348304,-2037841920,-2037514818,-11469216,-1862418762,138799118,-37845503,-37839221,-37845249,-1958803514,-956449122,1996423175,-1064923890,616059133,-2070261759,1023410186,57933830,-51735,-1710505418,65535,-1207011585,-1706033147,2307,-16650589,112725622,-6664192,-1560280833,1052248568,-1202708990,1344144132,167263875,-1207602176,65734520,-1945666888,-1706011942,65535,-31553907,-297893040,91553793,-352321096,1354771202,167261951,16777114,-599883008,57933825,-2080456727,122430,-1243020428,-532773890,796196865,-31553907,572427088,-1205892337,787939350,-259321286,-16230261,107649591,-1073020928,-1981217932,1619430910,-509980418,-16777214,28839542,-308654080,-385875966,1048837767,1962936646,112645,-1070923029,-16169309,95948406,922701824,418056518,160185987,-1207601920,48955393,-1935425493,242679561,1342863103,447898,-28710656,556673,-385649661,1996487961,242679558]},{"sector":13,"data":[1342177720,284314,244338688,-385804056,-2090926553,-443874579,-900899553,1478361098,-1957345904,-661774612,12250241,572427094,-1205892337,787939350,-259321286,-1995947893,-1946204538,-2145416232,259326015,1342340280,1351239309,722842,-1961563392,-47458,1216777527,1183666431,244338826,-1929366552,-1705997754,1353,1116598411,448286857,-6664160,-16776961,-1928298442,-1202681274,-1706033117,65535,49120094,1562371467,1478413133,-1957345904,-661774612,1443294339,-972530037,1586167815,509446,-2146804085,292880447,-1207404801,726665084,966414528,-352321531,175570758,1342189240,363674,-96040704,-1946530049,1065417310,-690852,1183578694,172370938,-244087,1996425846,2124042248,-1962934267,1988885598,50696,-362753,-375781770,1577058307,-1962742397,1297948645,503318218,1430622296,-1910575989,82609112,142016342,1342181048,1347469355,-26032,-259325952,1443264255,440730,1590070016,-1962742397,1297948645,503317706,1430622296,-1910575989,82609112,-62470314,1996423168,-26106,-1073020928,1996432244,-26106,512425984,529207712,-150953288,-259324306,-14788469,-401698761,1183383578,108462076,16777114,-62485760,49120094,1562371467,182861,1167087646,518818645,-326903666,-129579256,1996423168,215849478,1183383552,1958743034,69515307,-92864688,1347469355,-401698736,1183384217,1958743036,108461835,16777114,-129595136,-1694861569]},{"sector":14,"data":[3345,16285315,2122516093,91619064,-352321096,-2084558078,-443874579,-900899553,1478361090,-1957345904,-661774612,-11998077,-1617295754,-1996488691,1451883078,1958874108,1996444204,-1203335686,1119375382,-711307264,-16777203,1536820854,-1929379826,-1705985978,3197,1954545469,-339727612,112643,-1962742397,1297948645,503317194,1430622296,-1910575989,283935704,142016342,914330,-96040704,1954545469,1721389082,184549387,-12553024,-6620554,-16776961,1922759286,-1962934261,1065355358,-385649408,-1070923568,-1936043184,184549384,-385649216,1996423360,108461832,16777114,-230258432,159236107,-1207915031,-1477836801,142016256,847002,-129595136,896843787,-1710852353,65535,200689289,-1205963584,-11533275,-1070860170,-159973552,1358954424,1726484112,-159973631,858522,-126419200,16777114,-92372736,1517584383,295706251,-1564991605,-93391104,1895821451,239049246,1996423168,235248134,1183383552,10664188,-1946521865,51486750,-263812857,1183570059,508004860,-1962510593,705032262,1996443648,130128390,-1202716672,-1706033086,65535,237607504,-1070923776,49120094,1562371467,313933,1167087646,518818645,-327034738,-11140974,-1264973706,-1996488691,1451883078,1975651324,12052739,-1710852353,65535,-1980348791,-1039402922,-1696005259,-59310336,-1912965377,1343664198,1342194360,912026,-126419200,-1913227521,385838726,4372560,-26032,1183645696]},{"sector":15,"data":[-6664016,-1996488449,-12717498,-1923582849,1358917254,173722,-196704000,-1924631488,1358917254,-150953288,512488046,117641632,1342188037,1342194360,717722,-1608611072,-1205892335,1861681314,-1012750,-1818616208,-1962934268,-1961779170,10663967,-1947046153,-196703248,-14794615,1671038582,-16777202,-6682506,1577058559,-1962742397,1297948645,503317706,1430622296,-1910575989,239504344,-1962288477,-727511994,138840841,-1559603573,378079696,1183517138,165061382,165152455,2124546047,-2147087609,-1204783865,-4521985,-11513089,-1710846922,3792,-1995997533,-1207468010,-4521985,-11513089,-1710846922,65535,-1995996509,-16284650,-16285642,721911350,-1706012480,65535,-2096506719,-443874579,-900899553,1478361098,-1957345904,-661774612,956730017,645139014,-1207273729,-1873804532,7923726,376750091,-16091393,-16284618,721912374,-1706012480,65535,28836843,49120000,1562371467,445005,1167087646,518818645,1996478606,52082698,-401698736,-1073020870,1996432500,-633929974,-734593271,-768147703,-801702135,187865609,-660406272,165060873,165152313,28837236,721611520,49120192,1562371467,445005,1167087646,518818645,-326903666,1996445228,-733573880,683167766,-6664192,1073742079,1039943305,461242369,1120333963,1183645907,1996443860,140810758,-1073020928,28837237,721611520,-310157632,535137026,80366941,-1873273344,-326412987,-2082959842,381158636]},{"sector":16,"data":[976156416,572427026,-1996029169,-661914554,33966070,-2081881227,-401698816,37616128,1028551680,125042694,1946158909,-1958548625,1603009630,-2145416440,410255423,-151232885,1947207239,539015216,294623824,113704960,2928,652742288,1489140,305802999,253894283,1183385347,-153580548,1946289735,-339727580,-60912854,-16228469,-297893065,91553793,-352321096,1354771202,167261951,607642,1883144960,-713752565,-2097151560,-443874579,-884122337,1167087646,518818645,-4663154,-17665,-1197846446,-1207959536,-4521985,-1706011905,4293,-1157627976,1347616767,1102490,-18432,1392508858,283089488,-4718592,-17665,-325431214,-1207959536,-4521985,-1706011905,65535,-1962742397,1297948645,-1873273141,-326412987,-2082959842,1448543468,-1962379637,1187448446,-352321284,1191134980,1149912828,1357130495,16777114,168134656,-1947568704,1600060486,-1962742397,1297948645,1426064586,-326898549,-950642934,64070,-1710852353,4478,-163149496,1979969675,-24424954,1949973632,775716880,2088775541,695545599,1962934845,-129579228,1183514624,123733496,302946896,1174601728,4341238,246953086,244994080,-352321528,1547468857,1187448693,-352321032,75400149,721712128,-1207702592,1183383554,108935672,1031848051,1326674990,1183577067,123733496,21269840,172333648,1599995904,-1034033781,-1957363708,1988843244,-2146374908,91499068,1967078528,112645,-2142893845]},{"sector":17,"data":[-344653764,-1956724693,46292453,-1873273344,-326412987,-2082959842,1996424940,225090056,1174601728,1183401992,-96040452,1586170859,1547665660,1325337460,138841084,2013021753,-62485523,1996443712,-96040186,1358710315,883354,108461824,-397361109,-310116627,535137026,80366941,196690,16716234,196744,16716065,196745,16715070,196750,16712469,16973967,200558,16973935,66761,16973829,68918,196615,16713453,196762,16714903,196763,16714139,131229,16715439,196634,16713757,131231,16715463,16973851,68592,16973841,68643,196626,16712705,16973987,68679,196627,16715718,196772,16713715,196773,16716353,196652,16715834,327726,16715978,196685,16712889,16974006,198661,327702,16715952,327893,16715991,196823,16713765,16973889,199485,16973858,198493,196643,16712926,16974019,69304,16973875,197237,327717,16715965,16973918,67880,196667,16715124,196811,16714725,131408,16715981,327757,16715939,16974185,200424,196662,16714431,16974039,200492,196663,16714832,196824,16712284,131161,16715955,196821,16714815,16973914,200619,196666,16716108,131163,16715994,196823,16714645,327776,16716004,131449,16715968]}],[{"sector":1,"data":[16973918,198888,16973893,198431,196679,16713943,196711,16713886,16973928,66430,196698,16712378,196843,16713158,196715,16714127,16974061,69803,131165,16715942,196969,16712495,196846,16713699,196719,16712317,196848,16714891,196976,16713681,196849,16714911,196979,16712484,196984,16714686,196856,16715905,196985,16714931,16974202,198655,196699,16714949,16974203,197626,16973916,198549,131165,16716007,16974201,199129,16973921,198900,327778,16715436,16973850,197488,327779,16715460,16973851,197658,100,0,1167087646,518818645,-326903666,1721849368,1746307859,-230258413,-1577822583,378213164,1183388462,-262764050,253894283,381165451,107935488,1082912907,72387330,-1980086647,-1070859178,-1559009117,1183519590,321692666,321787529,1183432747,-163149320,-1946532213,1446640726,-385646856,142344352,1928742457,9890051,-16353537,1996486774,-25866,1654718464,1679198990,-364476146,-152283511,269160966,1183518324,-329872406,-1980348791,-1192495018,-1947580789,1446636630,2095546360,-163170043,748806259,773229331,-128567021,92066943,1945519673,108462029,-493825,-1070860682,374864,-26032,922681344,1183518240,-163173398,-26032,1183383552,142016488,262944511,-26032,1183514624]},{"sector":2,"data":[1174510056,-128577034,1183554283,-195654670,-1995217245,-1961662442,1452011078,321692656,321787529,49120094,1562371467,313933,1167087646,518818645,-326903666,512448016,1207894022,-1608611070,-1995994351,1187508806,-1962934020,-1961942498,-196703993,1191118827,-196705284,-195130602,1946173315,-1960866831,263431,-940161399,129606,99763851,1183383714,13232632,-1963434357,2133067079,58002236,-167728151,1963066439,10676483,67389430,-1712782476,254451968,2113685049,-161576142,-788248693,2145681640,1039156873,1534427135,-1577302273,1178144554,-2096333316,-1961429946,1065612382,-1578535936,1178144554,-1959953156,-16775650,1996423759,-25862,512425984,1207894022,-1608611070,-1995994351,-1564937658,-93391104,-1980611069,971765830,-1946919285,84380447,1183383556,-1953305610,1178204742,958559472,259977286,-150953288,-259264402,-2131599733,-2096888760,-385026490,1586233191,73892088,-96010245,-1560787327,195600640,2113553977,-13833981,401035,1577209855,-1962742397,1297948645,50333131,-16744960,50339584,-16717312,50343680,-16650752,50355200,-16721408,50357760,-16713216,32512,0,0,1167087646,518818645,-326903666,1187468806,-352321286,702535,-1946521865,51276830,-62486265,529258635,1996437387,-1705617914,65535,5610064,179830784,-93391104,241966731,1183385347,108462076,1342178821,1342178488,28826,-96010496,957229217]},{"sector":3,"data":[-1317209530,-1207535873,-1202714746,-1706033151,65535,49120094,1562371467,33737293,805307136,1526791936,905970432,2130771712,0,0,0,0,1167087646,518818645,244373646,-2097149464,-443874579,-884122337,1167087646,518818645,-326903666,-1705617628,65535,16777114,205431040,770590345,691863553,-385649152,-1073543023,-1476448621,-2031548615,-2110324984,1077346075,1144454924,1110900492,1211563788,1178009356,23370252,922681344,922684480,922684484,922684482,922684488,-4715450,-1070903169,1347440720,120730,-1983894784,1183440966,-293698594,-1207601905,65732611,-1560277320,28838974,10113024,-2097151999,1948708478,114682115,16777114,114157824,205534975,205797119,205666047,1347469355,461518591,1184976976,1209436940,-565802740,1390433929,20552272,2122514432,91557614,-352321096,1030147,-1207157085,-1706033151,328,-2096724247,440894,-504822923,1077346048,1144454924,1110900492,1354771212,-1338572976,-11513845,-1710510026,349,-1981921655,1347608662,143514,1040631552,-1207958004,-1706033151,401,196097791,461518591,1347469355,461518591,98714,-1706012160,392,122010,102623488,461518591,196097791,1347469355,196097791,131226,-1706012160,436,1342177720,152986,1040631552,-16775924,-16011210,-15974346,-15973322,-15973834,-15972298,-1710471626,588,205534975,205797119]},{"sector":4,"data":[205666047,206059263,205928191,1350565816,1347469355,-1684385712,-1711276030,65535,1183432747,-565802528,-2096782615,440894,113707381,68464,-16411927,-1710510026,581,-1981921655,922738774,1117850688,1142328076,1174799116,1209406220,726684172,-11513664,1342943286,-529072304,-1696696577,65535,196097791,461518591,1347469355,461518591,16777114,-1706012160,632,1342177720,16777114,1040631552,-16775156,-14974410,-15974346,-15973322,-15973834,-15972298,-1710471626,65535,205534975,205797119,205666047,206059263,205928191,1350565816,1347469355,-6664112,-1962934017,1452006982,205956064,206050953,-83479,-1709473226,761,-1981921655,922738774,1117850688,1142328076,1174799116,1209406220,726684172,-11513664,1343980086,-529072304,-1696696577,975,461518591,196097791,1347469355,196097791,329882,-1706012160,102,1342177720,307610,1040631552,-16775412,-385109962,922746697,922684490,922684494,922684492,922684488,922684486,1119358016,-1070903284,-26032,-1073020928,-1897331851,205955333,206050955,-1981921655,1117904982,1142328076,-498693876,-1578871159,378211404,1117981774,1142327564,-498693364,-1545316725,378080332,1084296270,-431585012,-1559475551,1183517760,206218214,16777114,66709760,636386947,1352730996,1377209100,-1593316596,378211398,1183386696,-531199522,461518591,-1070903214,922701904,922684480]},{"sector":5,"data":[922684484,922684482,922684488,-157676474,-16777213,-15974346,-15973322,-15973834,-15972298,-15972810,723223094,-11513664,1996480630,87595742,922681344,-1070916734,1996443728,-562626592,1350565816,1347469355,-1986375600,-2097152000,1948642942,205955355,206050955,-1995681629,-1962126826,1452006982,205956064,206050953,636386947,512440437,529207074,-150989128,-1962131410,37784560,721703051,453788166,-1995684842,1451875910,1077346272,1144454924,1110900492,1380995596,-26032,2122514432,141895662,205391559,686489640,686718595,113707125,2559038,2122521323,141886190,205391559,216727568,284065411,113706613,134206,1342177720,43930,1781989120,1748434715,112667,-26032,1347551232,460207871,460076799,16777114,-1706012160,65535,-16601367,-1928576970,-397348794,-1073019916,-1662450827,-2110324990,-163148517,65202256,58048523,-16610583,-1710473162,1303,-1981921655,922738774,748297090,-1996488703,1451878470,-2110324758,726684187,-11513664,1342980150,-529072304,-1696696577,230,205534975,1347469355,-2066689,922738294,1347427202,-1411329,2023417974,-16777210,723223094,-11513664,1996483190,2147465448,1354771280,-1706012592,1728,253894283,381165451,1076819712,-1947170036,1183387712,1958743036,-946188282,-1962934267,-1961942498,1488927,205532919,1183576203,272665078,253894283,381165451,-2110851328,-1947170021,1183387712]},{"sector":6,"data":[1958743036,-6664186,-1962934017,-1961942498,1488927,461516535,1183576203,272665072,460719815,-1528168449,1488897,205532919,253894283,1183385347,1489132,461516535,1183385347,-329348110,-1995683957,1988885062,205818866,-1962129527,1183576670,206014970,-1947443573,1183387719,-227111952,-1995422581,1586171975,-263812110,-1206892663,-1706033151,1842,-1543503944,1990394292,461808411,-367127,-14974410,-15969738,722227254,-11513664,-15974346,-15973322,-15973834,-15972298,-1710471626,1697,205534975,205797119,205666047,206059263,205928191,461518591,1347469355,206714623,206583551,189594,-2110324992,1354771227,1379336016,1345781516,2147465228,1354771280,-1706012592,1043,-1962129759,-1995683818,1451875910,206610912,206706315,-1995684189,-1962129386,1452006982,206611424,206706313,721420728,-1559473146,381160532,1076819712,572427020,-1996029169,381217862,-2110851328,-1996029157,1586229830,340233196,-1946925431,1150022262,340232468,-1947050357,1200223302,112660,50960976,2145976320,-1811919367,436256771,1879115523,-1358828799,-754396414,-754396408,-1073163512,-1811919616,-1811361021,-1811704829,-1811704829,-1811704829,-385641469,-1811704827,-1811704829,-1811704829,-167537661,-1811704826,1292080131,-1811704832,-553233661,1883144964,91488267,16777114,1488896,205532919,512487563,922947362,-1192462711,787939350,-125101182,2122923779,105155570,19261649]},{"sector":7,"data":[-129595136,-788118133,75240,1284235473,-35553274,1149878539,-129594618,-788528859,105745376,201187712,105220545,621167755,1183383553,105155576,1301020196,31555846,-1983837440,1183516228,75256,-2147070581,-1056178463,-2096740983,1963257470,11790595,586055299,-1427569803,-293698816,-385649382,2122514593,58010094,-2097112855,-15582658,-1897331851,305832192,205522489,-2098658444,325492992,325588619,205788729,109016444,205653561,1183542642,-531199010,205653507,205788691,321787451,108812671,321652283,2122535287,678766062,205797119,205666047,205797119,205666047,1342178488,16777114,-1706012160,2249,325322439,501940225,205797119,205666047,-1948367221,100917334,370347074,1347554372,317594,470206208,1577058562,49120095,1562371467,-1957311667,82609132,572427094,-1205892337,1861681174,-1947170042,1183387712,1975520254,73304841,1991,62404331,-27358464,1878466443,-1992278014,-1705968570,65535,-1996202357,74792967,401326123,-106869,73304887,939466635,-1694730497,65535,1577058744,-1034033781,50336772,-16212736,50369024,17142529,50333440,-16485888,50339328,-16465408,50340352,-16280320,50341376,-16729856,50374400,-16367616,50342144,-16173056,50345984,-16765696,50348544,-16600064,50350080,-16419840,50351104,-16580608,50351360,-16461568,50420736,-16766976,50422016,-16210944,50356736]},{"sector":8,"data":[-16427264,50356992,-16684800,50428928,-16544512,50429184,-16565760,50429440,-16181248,33280,0,0,1167087646,518818645,-326903666,-2091493628,251873854,-1070917260,-26032,512425984,2139947854,459849250,96012062,-2086276608,2097154174,20637955,-1559738741,951649098,-1947601152,147030488,1310624016,88574467,983819306,742886162,-1961852765,-1961942498,1488927,305802999,1082912907,-62486256,158646283,529258635,1962950531,305832224,723220131,241214400,-955359581,-16056826,444415,-947912949,-16560122,1310624767,537886723,55451275,-1927583553,119415415,-234879559,55353765,1963476537,-1547687154,1721963368,-1338573037,-10228981,-1710081482,65535,55451275,16861174,-56550028,-32077050,325493510,325588617,-1962475359,755434006,-628948990,-1959204096,-167555554,1946288455,117743895,117839499,-1995217245,-1592563690,378210056,-672463094,-1962472287,-1559818730,378082150,922686312,1989808698,-1560281086,378082092,1347556142,325596927,325465855,16777114,321692416,321787529,55451275,-1961662815,-1995216874,1468602439,1310624538,321691907,321787531,-1994635383,113712727,3686,459947651,-1587643392,378215276,372841326,477436778,459802169,-1331620235,973486347,-15895534,-14980554,-1709479882,65535,305805055,459945727,459814655,16777114,302446080,410259467,-1961991519,957244438,1964731926,1812347147]},{"sector":9,"data":[-1207601893,48955393,1688453163,-2090901997,-443874579,-900899553,1478361092,-1957345904,-661774612,1443294339,55066243,-1207534590,-1997996017,55091456,-1174649207,-369688520,-964562805,727060488,381178048,1167740928,-1979711486,1149765190,5289989,-26032,1149829120,-948682698,-13214581,1354771255,1342197944,16777114,-2012565504,1149764676,138840835,-1993587575,1149841476,876922414,893699584,17596417,-2145383296,-1979635124,-467008188,-26032,1149829120,508856604,-1995232607,117379140,1183515464,-310157572,535137026,80366941,-1873273344,-326412987,1473809950,108432214,1366619659,-150980424,-2585618,-1710211401,65535,55326265,113706613,983884,55054079,55064121,951593854,-1947273472,272631288,96963408,-1588588536,-970259640,-150980423,-6663959,956301567,2114145334,1276051204,-2090902013,-443874579,-900899553,50334210,16955393,50333440,-16770560,50370816,-16665344,50339584,-16694016,50340096,-16584960,50342912,-16638208,50346240,-16699648,50350080,-16723968,50419712,-16669696,50392064,-16634368,33280,0,1167087646,518818645,-6629234,-16776961,-6683018,-2097151745,-310181180,535137026,46878045,318767872,-2080309504,184550145,-2063532288,1,0,0,0,5]},{"sector":10,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147418112,1381433344,541414473,1836216134,1702130785,1700012132,29816,1459617792,1702127986,2108704,0,0,0,0,1680736256,1140881010,1128879685,1146047813,822083653,3211264,1048588,1572884,2621472,3932208,6291528,1953724755,28005,0,3276799,0,0,0,0,0,0,0,0,1633646445,1651794787,1852788224,1968046181,1867541612,1828746354,1919904887,1828746085,1919510647,29541,2003632128,1868786015,2003632238,1852140895,1666383989,1819045746,7496002,1869767507,1631743084,1666383986,1819045746,7496002,-65504,65535,1,4128831,268369935,2032127,4128784,268369927,1835519,1393106976,1933910120,-65437,128,1632698367,824206695,0,0,0,0,0,0,0,65536,0,0,0,2147418112,32767,0,0,0,0,0,0,0,1,1,0,0,0,1143865344,17231,1397507886,35782656]},{"sector":11,"data":[35652136,35652128,1262567982,1397555200,1953067607,1866858597,7894126,1953067607,1866735717,1701672291,29806,1953067607,1917853797,1634887535,1918304365,543519849,1702256979,1918304256,6648937,1953387816,1701606505,10596,0,0,-65536,0,0,-65536,0,32,0,65535,-1482184960,-1499159130,-1480291610,623224743,-978934747,-2105376126,-2101312894,-2105376126,-2105376126,49830,65700,65536,0,0,65536,1684957559,7567215,1769366852,25955,1769366884,7562595,1801675074,28789,1381454669,1598379081,1431192909,1397555200,1414091351,1329880901,1397555267,1414091351,1431461701,5391692,1381454669,1598379081,1162297680,1330007625,0,983040,268959759,65535,0,0,0,0,0,0,0,0,0,0,0,0,1478426622,-1957345904,-661774612,1461513347,108432214,880805099,1015039507,-559872,1183648886,-1957685514,536807518,-2131073408,-2130942336,-1946532213,-772156984,-1949266951,-754732583,-1982200838,-1020531106,-1947056503,-930350010,-103679535,737169033,-196703807,-1962248449,1344144966,1358954424,384714381,1161296,140413776,-1962647553,-120456634,-1947449719,-120456122,736773769,-336098305,175570773,736904843,-1957211962,1610549342,175570696,-364475562,-1957640445]},{"sector":12,"data":[1610549342,175570700,65816203,-1957211962,1610549342,175570696,737822347,1183535302,1355219946,-16228725,1183517791,-754535942,-1947204616,-120325050,1983510531,1587969516,49120095,1562371467,576077,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2105164800,1617198199,2053194803,2066970215,1899192434,863860342,1719427441,862419828,1781759079,1899193980,2085696362,1362313073,859795836,1919574353,1345535869,1346271867,2104911483,2104636223,1917006711,103]},{"sector":13,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,-65536,-1,65535,16711778,0,0,0,0,0,0,0,0,1048576,0,0,0,262152,1668509040,29301,1,0,0,-65536,-1,1651638272,1869902965,1836187758,7041633,0,0,0,0,0,1162346496,1380271169,1330595328,5391700,1867382783,1852990820,1836012032,1392537185,1936943479,1919111936,7630953,1868784964,1769234802,1392534902,1936943479,1680736256,30322,0,15,0,1143876188,1275085647,1768186223,1713399662,778398825,11822,3145777,0,0,0,2228224,7168800,808546336,829431808,1881145394,1814036596,126484585,126879628,127534997,94373790,9437751,1310840,774766832,46,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,0,-65536,-65536,-65536,-65536]},{"sector":14,"data":[196612,16713762,196992,16713766,196993,16713770,196994,16713774,387,0,0,0,2031875,2097152,262176,-65536,-769,-1793,-1793,-3841,-3841,-7937,-7937,-16129,-16129,-32513,-32513,-65281,-65281,-65282,-65282,-65284,-65284,-65284,-65281,-63233,-63233,-61953,-61441,-57346,-57346,-57346,-57346,-49154,-49154,-32770,-1,65535,0,512,512,1536,1536,3584,3584,7680,7680,15872,15872,32256,32256,65024,65024,65025,65025,30208,30208,25088,25088,24576,24576,49152,49152,49152,49152,32768,32768,0,0,0,2031875,2097152,262176,-65536,-769,-1793,-3841,-7937,-16129,-32513,-65281,-65282,-65284,-65288,-65296,-65281,-65281,-59138,-58114,-49412,-49156,-32776,-32776,-4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,512,1536,3584,7680,15872,32256,65024,65025,65027,32256,28160]},{"sector":15,"data":[26112,49664,49152,32769,32769,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,524547,2097160,262176,0,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,65343,-193,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65535,0,-12648448,-12648448,-12648448,-12648448,-12648448,-12648448,2130706432,2130706432,2134769664,2134769664,2134769664,2134769664,2134769664,2134769664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33026,3932592,16842806,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},{"sector":16,"data":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481]},{"sector":17,"data":[268435455,-16,-1044481,268435455,61680,-252702961,268369920,65520,-1044481,252641280,61680,-1044721,268435455,-16,-1044481,268435455,-16,-252702721,252641280,61680,-1044481,268369920,65520,-252702961,252641280,-16,-1044481,268435455,-16,-1044481,268435455,61680,-252702961,268369920,65520,-1044481,252641280,61680,-1044721,268435455,-16,-1044481,268435455,-16,-252702721,252641280,61680,-1044481,268369920,65520,-252702961,252641280,16580592,-1044673,268386300,-16,-252702721,252641280,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,255787260,1073545200,-1044481,268435455,61680,-1044721,268435455,-16,-1044481,268435455,-16,-1044481,268435455,16580592,-1044673,268386300,-16,-252702721,252641280,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,255787260,1073545200,-1044481,268435455,61680,-1044721,268435455,-16,-1044481,268435455,-16,-1044481,268435455,1073545200,-1044481,255802620,61680,-1044721,268435455,-16,-252702721,252641280,61680,-252702961,252641280,61680,-1044721,268386300,1023213552,-252702913,252641280,-16,-1044481,268435455,61680]}],[{"sector":1,"data":[-252702961,252641280,61680,-252702961,252641280,1073545200,-1044481,255802620,61680,-1044721,268435455,-16,-252702721,252641280,61680,-252702961,252641280,61680,-1044721,268386300,1023213552,-252702913,252641280,-16,-1044481,268435455,61680,-252702961,252641280,61680,-252702961,252641280,1073545200,-1044481,268386300,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268386300,1073545200,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,1073545200,-1044481,268386300,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268386300,1073545200,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,1073545200,-1044481,268386300,61680,-252702961,252641280,61680,-252702961,268373760,267452400,-1044481,252641520,61680,-1044721,268386300,1073545200,-252702721,252641280,61680,-252702961,252641280,251719920,-1044481,268374000,15794160,-252702961,252641280,1073545200,-1044481,268386300,61680,-252702961,252641280,61680,-252702961,268373760,267452400,-1044481,252641520,61680,-1044721,268386300]},{"sector":2,"data":[1073545200,-252702721,252641280,61680,-252702961,252641280,251719920,-1044481,268374000,15794160,-252702961,252641280,1048378608,-51376321,255803004,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-51376129,255802428,1010629872,-1044673,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,941423856,-51376321,255801372,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-17821697,259993612,806158064,-1044609,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,537198576,-1044481,268378116,61680,-1044721,268435455,-16,-252702721,252641280,61680,-252702961,252641280,61680,-1044721,268370304,25231344,-252702721,252641280,-16,-1044481,268435455,61680,-252702961,252641280,61680,-252702961,252641280,62980080,-1044481,268370880,61680,-1044721,268435455,-16,-252702721,252641280,61680,-252702961,252641280,61680,-1044721,268371936,132186096,-252702721,252641280,-16,-1044481,268435455,61680,-252702961,252641280,61680,-252702961,252641280,267452400,-1044481,268374000,-16,-252702721,252641280,-16,-1044481]},{"sector":3,"data":[268435455,-16,-1044481,268435455,-16,-1044481,268378104,536412144,-1044481,268435455,61680,-1044721,268435455,-16,-1044481,268435455,-16,-1044481,268435455,1073545200,-1044481,268386300,-16,-252702721,252641280,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268402686,2147418096,-1044481,268435455,61680,-1044721,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,61680,-252702961,268369920,65520,-1044481,252641280,61680,-1044721,268435455,-16,-1044481,268435455,-16,-252702721,252641280,61680,-1044481,268369920,65520,-252702961,252641280,-16,-1044481,268435455,-16,-1044481,268435455,61680,-252702961,268369920,65520,-1044481,252641280,61680,-1044721,268435455,-16,-1044481,268435455,-16,-252702721,252641280,61680,-1044481,268369920,65520,-252702961,252641280,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16]},{"sector":4,"data":[-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,-16,-1044481,268435455,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,240,15732480,251658240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},{"sector":5,"data":[-1,-1,-1,-1,-1,-1,0,0,33026,1572984,16842768,0,-1,-805306381,62980095,16761855,-1,-1879048207,62980095,16761855,-1,268435440,62980095,16761855,-1,268337136,62980095,16761855,-1,268189680,-3932161,12829695,-1,267919344,-3932161,12829695,-1,267390960,-3932161,12829695,-1,266340336,-3932161,12829695,-3841,264242160,-3932161,16761855,-3841,260047344,-3932161,16761855,-3841,251658480,-3932161,16761855,-3841,251658480,-3932161,16761855,-3841,251658480,-473708545,14926791,-3841,251658480,-1010580481,12829635,-3841,260047344,-2084322817,8635329,-3841,264242160,130277631,508896,-1,266340336,256045311,1000176,-1,267390960,520157439,2031864,-1,267919344,1057029375,4129020,-1,268189680,2130771711,8323326,-1,268337136,-16711681,16711935,-1,268435440,-8257537,16744959,-1,-1879048207,-3932161,16761855,-1,-805306381,-1572865,16771071,257,4194331,524352,-65536,16711679,-65536,16580607,-65536,16318463,-65536,15794175,-65536,14745599,-65536,12648447,-65536,8454143,-65536,65535,-65536]},{"sector":6,"data":[65279,-65536,64767,-65536,63743,-65536,61695,-65536,57599,-65536,49407,-65536,33023,-65536,255,-65536,254,-65536,252,-65536,252,-65536,252,-65536,248,-65536,240,-65536,14745585,-65536,15794163,-65280,16318435,-64768,16580583,-63744,16711623,-61696,16777167,-57600,-2130706545,-49408,-2130706529,-33024,-2130706529,-256,-1056964801,-255,-1056964801,-16777469,-520093889,-16777465,-520093825,-50331889,-520093825,-50331873,-520093697,-117440705,-1056964609,-100663297,-2080374785,-234881025,-1879048193,-201326593,536805375,-469762049,2147024895,-402653185,-917505,-1006632961,-3670017,-1056964609,-14680193,-2130706433,-8389569,-2130706433,-1761,16777215,-3297,16777215,-14577,16711679,-57593,16711679,-33020,16580607,-255,16580607,-255,16318463,-253,16318463,-249,15794175,-241,15794175,-129,31522815,-1,132186111,-1,264306687,-1,532742143,-1,65535,50331648,65535,0,65343,0,65343,1056964608,65507,2130706432,65475,-16777216,65415,-16711680,65295,-33357824,65311,-66650112,65087,-133234688,64639,-266403840,63743]},{"sector":7,"data":[-515964928,61695,-1015087104,57855,-2013331456,50175,268370176,34815,536740608,4095,1073481472,8190,2146963200,16380,-1040640,32760,-2015488,65520,-3965184,65505,-7864576,65475,-15728895,65415,-14680575,65295,-32571392,65055,-66650112,64575,-134021120,63615,-268369920,61695,-520093696,57599,1124073472,49407,117440512,33023,251658240,255,520093696,254,251658240,252,117440512,248,117440512,240,117440512,224,117440512,192,50331648,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1818838544,101,2003127824,268500992,1852141647,3026478,1393558016,778401377,11822,0,1917849603,779382377,11822,1749225476,1701277281,1769099296]},{"sector":8,"data":[1919251566,3026478,1376781696,1734439013,1952542313,774778469,1682247680,29801,1851068432,1393127268,1933910120,99,285212672,1953841936,1818575881,269615104,2037411651,3294729,1343230720,1702130529,1936607497,0,269746176,1702260557,1667846176,1701999988,269844480,1702521171,1667846176,1701999988,1699942400,1751347809,270532608,1684957510,3026478,1376788736,1634037861,1632378996,1176532083,157576809,13126,1749225506,1701277281,3026478,0,1192240000,1867784303,1734430752,774778469,3425801,1634222864,1952670066,29285,1867386944,1818324338,3491337,0,1108361472,157576303,13894,1950945346,1667853409,3622409,1427129088,1919247470,1701734764,3687945,1393574912,1919250549,1769104243,29808,1968377925,1919120226,7630953,0,1066496,1066752,1067008,0,1376798976,1668637797,1866866789,1175024750,1241514041,1819165968,1701278305,1852786208,826673524,48,1266679808,1852786192,774796148,1343225902,1734439521,1752195442,276824064,1836216142,27745,0,1699483777,29798,1698893954,1919251566,25701,1766985859,7628903,1242596352,1769239413,1684367718,0,277151744,1735289171,1394632044,1701011824,277217280,791748657,1884495922,6644577,1141933824,1818391919,1884495973,6644577,0,1225820288,1852138606,774796148,1150287918,1836409711]},{"sector":9,"data":[7630437,1209073664,1701077349,774778482,285278208,1953460038,774795877,46,33554432,1819628049,1327526501,50331758,1650545681,774778483,0,285507584,1701273936,2036419616,779384175,11822,-2143289344,671096326,1593876480,0,458754,786472,196607,1182945282,1852140649,979725665,3014656,7208965,262156,1350631552,67108993,1174411520,83902464,-1593834752,33616,1638478,786508,65539,8540162,738221824,234893824,16777472,-2142240000,1852141647,6225920,3276866,131086,1342373888,1851868032,7103843,0,0,-2143289344,671096327,889246208,0,327685,655470,65535,1401049090,543520353,1920103747,544501349,1969450820,1953391981,980631840,327680,7995409,262156,1350631552,-2130706303,1275069696,50334720,256,33360,2293765,786484,131077,1417695235,544503909,2037149263,4587520,3932195,393228,1342373890,1801538944,1631723621,1886743395,10158080,3276817,65550,1342373889,1986089856,-1694498715,838869504,33558016,50331648,1631813712,1818583918,0,-2143289344,335552006,1342215680,0,327680,524438,131071,1300385794,1869767529,1952870259,1852397344,1937207140,589824,23,-65536,1342177283,1601662338,1852793705,0,9830414,-65528,1342308353,1769101186,25972]},{"sector":10,"data":[2228259,524368,131071,1451380738,1769173605,824209007,3158062,788529152,134256128,33554176,-2108685824,2037411651,1751607666,547954804,892877105,1766662188,1936683619,544499311,1886547779,922746926,671104000,16780800,50331904,1800372304,0,0,0,0,-2143289344,838865163,1291878912,0,458757,786462,65535,1132613634,1701408879,14963,327715,786462,8388618,8474753,335545600,201345536,33557248,-2142240000,1717662276,1968250996,1953066081,83886201,838870272,-16774144,33554687,1632666192,1377854823,1701277281,167772218,838872832,100666368,50332672,1816232016,167772268,503331840,117443584,1024,1917222992,3829103,1023420672,201334272,-2147481600,-2125430016,5111808,786495,-65524,1342308352,980374658,6029312,1966141,589836,1350762624,1426063489,671089920,16780800,50331904,1800372304,5570560,2621465,131086,1342373888,1851868032,7103843,0,-1865940992,838864643,872449536,1342177280,1953393010,6778473,327685,524416,65535,1468157954,1702127986,544434464,1684956531,543649385,1920298873,1668244512,1852140917,83886196,-2147480064,-16775168,33554687,1869906512,1701344288,1769107488,1919251566,788529198,671096320,33558016,50331904,1631813712,1818583918,0,-2143289344,1677744644,755014400]},{"sector":11,"data":[327685,786512,65535,1384271874,1734439013,1952542313,1866735717,1701672291,29806,1638405,786532,131075,1132482563,1768320623,1344302450,543516513,1634038338,29547,327790,917544,65537,1333809155,1845493867,671095040,33558016,50331648,1631813712,1818583918,0,0,0,0,-1865940992,838864643,838884864,1375731712,1734439013,1952542313,6778473,327685,524372,65535,1468157954,1702127986,544434464,1634755954,1634625895,1735289204,327680,3407886,-65528,1342308352,1970239874,1868832882,1701672291,29806,1835035,917544,65538,1132482563,1701015137,108,0,0,-2134376448,2013288968,838909952,1375731712,1734439013,1952542313,6778473,327685,524380,65535,1434603522,1965057395,1851859056,1868832868,1646292599,1869902965,29550,917509,524360,65535,1954697218,1869422703,1881171318,543516513,1634038370,83886187,872421120,-16775168,33554687,1718190672,1667591712,1634956133,2914674,536872192,134231040,16776960,-2108685824,1852139636,1852793632,1836214630,1711276078,671090688,83889664,50331648,1884651600,6684672,2621468,393230,1342373888,2003780736,-1828716434,671090688,16780800,50331904,1866694736,1919510126,-1828716435,671095808,33558016,50331648,1631813712,1818583918]},{"sector":12,"data":[-2134376448,1677744646,973113088,1375731712,1734439013,1952542313,6778473,327685,0,262143,-8237056,503348994,1543505664,-16774144,33554687,1868005968,543452277,544567161,1701538156,544175136,1885693291,1966080,6553619,-65524,1342308352,1768453250,2019893363,1769239401,1881171822,543516513,1634038370,16235,2293767,917539,2,1132482563,1701015137,822083692,587211520,16780800,50331904,1699446864,28773,2293851,917539,4,1384140803,1987013989,101,0,0,0,-1874853888,671096324,1342225920,0,327685,786502,65535,1401049090,1667591269,543236212,1852404304,980575604,327680,8650772,196664,1352859651,1818579843,544498533,1917853793,1702129257,14962,1310865,917544,65537,1333809155,-1862270869,671101440,33558016,50331648,1631813712,1818583918,0,-1865940992,-1526716411,922798080,1174405120,6581865,458757,786477,65535,1182945282,543452777,1952540759,838860858,-1946155776,117443584,-2130673664,33104,1310725,786492,131077,1468026883,1701605224,1919899424,1677721700,1593840640,100666368,50332160,1632469072,543712116,1701867605,1867263858,1668441463,6648673,587220480,234896384,16777472,-2142240000,1684957510,2019905056,116,0,-1865940992,-1778369526,1174468864,1124073472]},{"sector":13,"data":[1735287144,327781,2949127,-65524,1342308352,1852393090,1750540388,3830881,83898880,201364992,-2147481856,-2125430528,327680,2949142,-65524,1342308352,1634222978,543516526,3829588,335557120,201364992,-2147481600,-2125430528,327680,3932195,327692,1342373890,1869109120,1461740908,6582895,587228160,201376512,33555968,-2142240000,1668571469,1884627048,796026224,1702326092,1935762290,83886181,738210304,16780800,50331904,1766228048,1310745710,7632997,838874624,234900480,2304,-2142240000,1851877443,539780455,1852139636,1852392992,-2030043036,536883712,50335232,50331648,1749254224,1701277281,11272192,4718642,262158,1342373888,538976384,1851877443,1092642151,538995820,32,0,0,0,-2143289344,1056986884,671112960,0,458757,786482,65535,1350717442,543516513,1651340622,3830373,83900416,201334272,-2147482880,-2125430528,327680,2621462,65550,1342373889,7032704,369111552,234891264,512,-2142240000,1668178243,27749,0,0,-2134376448,604000265,1476441088,1174405120,1937010287,83887360,201338112,16776960,-2108685824,1953394502,1835093536,14949,1048581,786557,8388611,8474753,587203840,805333248,50332672,-2091867904,7536640,1572907,393256,1352728579,-1879048061,268448000,-16774656,33554687]},{"sector":14,"data":[1866891856,29806,3866768,786452,65535,1401049090,979729001,9437184,1966151,327692,1350631552,-2030043007,671089920,16780800,50331904,1800372304,8847360,2621465,131086,1342373888,1851868032,7103843,0,0,-2134376448,603986952,872453632,1224736768,1852138606,50361204,805308160,-16774144,33554687,1699512912,1226863718,1852138606,14964,327736,786472,8388611,8474753,369099520,201337856,16776960,-2108685824,1936877894,1766596724,3827054,335558656,201336832,-2147482624,-2125430528,196608,3407909,-65524,1342308352,1734955650,1226863720,1852138606,14964,2293816,786472,8388613,8474753,134244608,234891264,16777472,-2142240000,27471,1769577,917544,2,1132482563,1701015137,108,0,-1865940992,1845514246,704701440,1342177280,543516513,1684104520,83915365,1275070208,-16774144,33554687,1766097488,1851880563,1713399139,544042866,980447060,1342177312,503317760,83889152,-2130673664,33104,327813,786522,131078,1350586371,1953393010,544108320,1936877894,1632641140,25959,1441804,917568,3,1233145859,1919251310,1632641140,589325671,5767168,1966102,262158,1342373888,1701593984,29281,1441922,917589,65537,1384140803,1920300133,1869881454,1668236320,1852140917,116]},{"sector":15,"data":[-1865940992,1845514246,704701440,1342177280,543516513,1953460038,83915365,1476396800,-16774144,33554687,1766097488,1851880563,1713399139,544042866,1953787714,540700015,5898240,1966085,327692,1350631552,-2063597439,1509950720,100666368,50332160,1917878352,544501353,1176530543,1953722985,1734430752,201326693,1073747456,50335232,50331648,1850310736,1953654131,1734430752,2302053,369121280,234888704,1024,-2142240000,1634036803,-2113929102,1426068992,16780800,50331904,1699905616,1852994932,544175136,1969450820,1953391981,0,-2134376448,687878687,1627448832,1409286144,7561825,458755,786472,65535,1350717442,1953067887,1936617321,50331706,671099392,-16774144,33554687,1867547216,1769236851,980643439,196608,2621462,-65524,1342308352,1667581058,1818324329,50331706,671103232,-16774144,33554687,1698988624,1634560355,14956,327725,786462,8388612,8474755,335557376,201331200,33558528,-2142240000,1258291246,503317760,83889152,-2097119232,33104,1310801,786450,131089,780161027,6881280,1966085,393228,1350762624,1862271105,301995008,301992960,50332160,3047504,83920640,201334272,-2147481856,-2125430016,9240576,1179668,1245196,1342373890,11904,327845,786462,8388616,8474755,335588096,201331200,33559552,-2142240000,-1023410130,503317760]},{"sector":16,"data":[150998016,-2097119232,33104,1310921,786450,131093,780161027,2949120,1966120,655372,1350762624,855638145,302003968,369101824,50332160,3047504,671107840,201334272,-2147480832,-2125430016,5308416,1179703,1507340,1342373890,11904,2621545,786462,8388620,8474755,922775296,201331200,33560576,-2142240000,-2030043090,503326720,218106880,-2097119232,33104,3604621,786450,131097,780161027,10813440,1966120,917516,1350762624,-1426063231,302003968,436210688,50332160,3047504,671138560,201334272,-2147479808,-2125430016,13172736,1179703,1769484,1342373890,11904,4915220,917554,65537,1333809155,1509949547,838880000,33558016,50331648,1631813712,1818583918,10485760,3276875,196622,1342373888,1701593984,1092645473,27756,0,0,0,-2143289344,671095309,1342223360,0,458757,786520,65535,1401049090,1953653108,1734430752,1968054373,1919246957,1950425203,1593835578,503317760,50334720,-2130673664,33104,2162693,786472,65535,1300385794,1768387169,3830638,805309440,201331712,16776960,-2108685824,1952867660,587202618,503328256,67111936,-2130673664,33104,3145813,786462,65535,1384271874,1952999273,1962934330,503328256,83889152,-2130673664,33104,4259852,786452,65535,1417826306]},{"sector":17,"data":[3829871,1056973568,201334272,-2147482112,-2125430528,5570560,1966145,-65524,1342308352,1953448578,980250484,7667712,1966143,458764,1350631552,-2030043007,671089920,16780800,50331904,1800372304,8847360,2621463,131086,1342373888,1851868032,7103843,0,0,-2134900736,335557131,1090579200,1459617792,1702127986,83887360,0,67108608,-2108686336,8324095,327710,786632,65535,1132613634,1701999221,1881175150,1953393010,1663070821,1869508193,1919950964,544501353,1937012079,543515753,1936025716,1634541669,1852401522,503316595,335548672,-16774144,33554687,1699512912,3830886,285228032,201336832,768,-2108685824,8519680,1572881,-65524,1342308352,1734955650,3830888,285255680,201336832,1024,-2108685824,1966080,1048605,-65524,1342308352,1886344322,1006633018,671096064,83889152,33554432,33360,1900674,786460,65535,1115836418,1869902959,14957,1900712,786472,6,8540162,738222336,234891264,16777472,-2142240512,27471,0,1851065600,119566180,1953064005,174550633,1836216134,1769239649,1409705838,1852403833,1968310375,544367980,1376349775,1919249525,1717980960,1868710152,774796405,46,1230133001,1210991956,1125142604,1735287144,1699946597,1952671084,175009641,1851877443,1092642151,1879338092,6645601]}],[{"sector":1,"data":[67108864,544108320,1376845824,1634496613,1159751011,1953720696,543649385,1749229575,779317857,1634030348,1768448882,774793070,46,0,0,0,1634030352,543712114,1886220131,1702126956,1699943982,1751347809,2019914784,1869488244,1868963956,778333813,544165397,1851877475,544433511,1701995895,1684106528,1393569381,1668440421,1633886312,1818583918,3040357,0,0,0,0,1684291857,1852794400,1869881460,1936288800,1396391796,1852404340,1936269415,1869575200,1852795936,538979943,1668248144,543450469,1752459639,1701344288,1919510048,840987763,1663055157,1634885992,1919251555,16243,0,0,0,0,0,1310392320,1629516911,1818326560,1461740649,1702127986,1668244512,1852140917,1309486708,1970479215,1881172067,778397537,1953451539,1981833504,1684630625,1836412448,779248994,1852786213,1769152628,544433530,1953723757,543515168,2004116834,544105829,1851858996,842080356,1311911479,1700949365,1970086002,1646294131,543236197,1819240567,1970151525,1919246957,1952801312,1852138871,1629499680,857760878,926299954,1867388974,543236212,1768710518,1701650532,1920299873,1852140901,1294282356,1970495845,1701668210,1830843502,544502645,1814062434,1701278305,1752440946,2048945761,779055717,1918979345,544106855,544173940,1735549292,1310010981,1629516911,1818326560,1713398889,1852140649]},{"sector":2,"data":[778399073,1919895063,1953784173,543649385,544173940,1886220131,779642220,0,1851867938,544501614,1702260589,2019914784,1869881460,1634235424,1869619316,1769236851,808349295,543516756,1886152040,1818846752,1381441637,776295497,542133320,1763734377,1919902574,1952671090,544370464,1936943469,778530409,1936278584,1936269419,1819633184,538979948,1634036816,1931502963,543520353,1969450852,1953391981,544108320,1768169569,1919247974,544501349,1802725732,1850291758,1717990771,1701405545,1830843502,1919905125,1869881465,1885696544,1852401505,795178081,1852404336,1752440948,1679848297,1836409711,779382373,1766078976,1763732339,1920409715,543519849,1953460848,1702126437,538979940,1634036816,1914725747,1987013989,1920409701,543519849,1953460848,544498533,778199412,1936278581,1768169579,1952671090,544830063,1713402729,778857589,1817190432,1702060389,1702065440,1679843616,1701209705,1953391986,1936286752,1126641259,1651534188,1685217647,1869575200,1734959648,1919903264,1635148064,1650551913,1830839660,1919905125,1343041145,1953393010,1696625253,1919906418,1851867925,544501614,1684957542,1668244512,1852140917,539242100,544432488,1851877475,778331495,1632837664,1663067510,1701999221,1663071342,1735287144,524252005,544501582,1970237029,1830840423,1919905125,1869881465,1853190688,1769101088,422471028,1701996868,1919906915,1868832889,1847620453,1696625775,1953720696]},{"sector":3,"data":[1867391790,1852121204,1751610735,1936286752,1886593131,543515489,1914728308,1461743221,1702127986,538973230,1668507972,543453793,1885957187,1918988130,1175863140,543517801,1847620457,1629516911,1818845558,1701601889,46,0,0,0,1634030132,1852779876,1713404268,543517801,1953723757,543515168,1702257011,1853169764,544367972,1768169569,1919247974,544501349,1701667182,1631793966,1953459822,1853190688,1769101088,539911540,1634620704,543517794,1663070068,1952540018,1702109285,1919905901,544830049,1701603686,1851068206,1701601889,544175136,1852404336,1851069044,1701601889,544175136,1819305330,543515489,1920091439,1998615151,1701603688,1769107488,1852404846,1768956007,1920300131,538979941,1952672080,543519349,1869506409,778331506,1936607535,1768318581,1852139875,1768169588,1931504499,1701011824,544175136,1852404336,1752440948,1679848297,1836409711,779382373,0,0,0,0,0,1936278547,1919230059,544370546,1713401455,778398825,1867260672,1852776567,1835363616,779711087,1632837664,2032166262,544372079,1969450852,1953391981,1699948334,1869181811,1869881454,1869357167,539912046,1986089760,1869488229,1948265591,544105832,1953068401,1277952046,1864398703,1701650542,2037542765,1344282670,1935762796,1818435685,543519599,1629515361,1768714352,1769234787,3042927]},{"sector":4,"data":[302018817,7471376,1929449505,17834752,272629876,1090548993,7733520,1996558402,17842944,273219704,1241545089,16,578142219,-1577130775,378209112,1183384410,-531199522,-1996268383,1956764230,-2142895869,-370784513,922745964,62391976,-1070903296,-1924116400,385837702,44210768,1183383552,2109737942,-75962109,-9402741,-9664967,-2037708163,-2043019410,276627306,1342177720,16777114,2013724416,-71374578,-9257341,-14912512,-1207523274,-1706033151,65535,1342177720,617370,1921435392,-1593835265,1178144376,-15042566,1996425334,-596181036,-9795955,134322768,-1073020928,988349301,142016510,-1804545,-2037520778,-1705967766,2086,58048523,-1577180951,1178144376,-385648942,1996488479,-1569259768,-1918077185,1358916230,16777114,1958742784,-16389885,-2080507671,1946158718,-834207986,956435617,58576454,-2080699159,1946158718,171868938,57933826,-1191316247,1861681174,-1947170040,51323422,113673015,1963066614,-864124079,-1959365632,529263198,-1949532533,956664637,-1960413945,126610014,1342178309,-1949540725,263431,440400,-1947574645,1345320735,16777114,1975520000,112645,-1070923029,-788528859,-2146661408,-1056178719,2122515593,141820108,-1697876225,2268,13663875,-6683275,-16776961,-157621130,-2097151992,1946158718,1753663327,-2097151745,1946211454,-730398968,591002,-1568767232,-16223232,1687855734,-2097151994,134718,922686581]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]],[[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}],[{"sector":1,"data":[]},{"sector":2,"data":[]},{"sector":3,"data":[]},{"sector":4,"data":[]},{"sector":5,"data":[]},{"sector":6,"data":[]},{"sector":7,"data":[]},{"sector":8,"data":[]},{"sector":9,"data":[]},{"sector":10,"data":[]},{"sector":11,"data":[]},{"sector":12,"data":[]},{"sector":13,"data":[]},{"sector":14,"data":[]},{"sector":15,"data":[]},{"sector":16,"data":[]},{"sector":17,"data":[]}]]]
      • 1981-04-24.json
        [53,55,48,48,48,53,49,32,67,79,80,82,46,32,73,66,77,32,49,57,56,49,216,224,237,225,185,0,64,252,139,217,184,255,255,186,85,
        170,43,255,243,170,79,253,139,247,139,203,172,50,196,117,37,228,98,36,192,176,0,117,29,128,252,0,116,3,138,194,170,226,233,
        128,252,0,116,14,138,224,134,242,252,71,116,216,79,186,1,0,235,208,195,250,180,213,158,115,78,117,76,123,74,121,72,159,177,
        5,210,236,115,65,176,64,208,224,113,59,50,228,158,114,54,116,52,120,50,122,48,159,177,5,210,236,114,41,208,228,112,37,184,
        255,255,249,142,216,140,219,142,195,140,193,142,209,140,210,139,226,139,236,139,245,139,254,115,7,51,199,117,7,248,115,227,
        11,199,116,1,244,176,0,230,160,230,131,176,153,230,99,176,252,230,97,42,192,186,216,3,238,254,192,186,184,3,238,184,0,240,
        142,208,187,0,224,188,22,224,233,51,1,117,213,176,4,230,8,176,84,230,67,43,201,138,217,138,193,230,65,176,64,230,67,228,65,
        10,216,128,251,255,116,4,226,241,235,180,138,195,43,201,230,65,176,64,230,67,228,65,34,216,116,4,226,244,235,160,176,84,230,
        67,176,18,230,65,230,13,176,255,138,216,138,248,185,8,0,186,0,0,238,238,184,1,1,236,138,224,236,59,216,116,3,233,122,255,
        66,226,237,246,208,116,223,176,255,230,1,230,1,176,88,230,11,176,0,230,8,230,10,176,65,230,11,176,66,230,11,176,67,230,11,
        184,64,0,142,216,139,30,114,0,43,192,142,192,142,216,43,255,228,96,36,12,4,4,177,12,211,224,139,200,138,224,252,170,226,253,
        228,98,36,15,116,24,186,0,16,138,224,176,0,142,194,185,0,128,43,255,243,170,129,194,0,8,254,204,117,239,176,19,230,32,176,
        8,230,33,176,9,230,33,43,192,142,192,190,64,0,142,222,137,30,114,0,129,62,114,0,52,18,116,56,142,216,188,240,63,142,208,139,
        248,187,36,0,199,7,182,226,67,67,140,15,232,183,4,128,251,101,117,14,178,255,232,186,4,138,195,170,254,202,117,246,205,62,
        14,23,250,188,24,224,233,45,254,116,3,233,189,254,184,48,0,142,208,188,0,1,38,199,6,8,0,195,226,38,199,6,10,0,0,240,233,42,
        0,185,0,32,50,192,46,2,7,67,226,250,10,192,195,80,65,82,73,84,89,32,67,72,69,67,75,32,50,80,65,82,73,84,89,32,67,72,69,67,
        75,32,49,43,192,142,192,38,199,6,20,0,84,255,38,199,6,22,0,0,240,250,176,0,230,33,228,33,10,192,117,43,176,255,230,33,228,
        33,4,1,117,33,252,185,8,0,191,32,0,184,182,226,171,184,0,240,171,131,195,4,226,243,50,228,251,43,201,226,254,226,254,10,228,
        116,8,186,1,1,232,173,3,250,244,180,0,50,237,176,254,230,33,176,16,230,67,177,22,138,193,230,64,246,196,255,117,4,226,249,
        235,221,177,18,176,255,230,64,180,0,176,254,230,33,246,196,255,117,204,226,249,233,54,0,180,1,80,176,255,230,33,176,32,230,
        32,88,207,80,228,98,168,64,116,8,190,25,226,185,14,0,235,10,168,128,116,16,190,39,226,185,14,0,184,0,0,205,16,232,230,3,250,
        244,88,207,32,50,48,49,252,191,64,0,14,31,190,19,255,185,32,0,243,165,176,255,230,33,176,54,230,67,176,0,230,64,230,64,184,
        64,0,142,216,232,120,3,128,251,170,116,38,176,60,230,97,144,144,228,96,36,255,117,22,254,6,18,0,38,199,6,32,0,178,230,38,
        199,6,34,0,0,240,176,254,230,33,176,204,230,97,178,4,187,0,96,232,200,254,117,7,254,202,117,247,235,7,144,186,1,1,232,222,
        2,228,96,180,0,163,16,0,36,48,117,3,233,152,0,134,224,128,252,48,116,9,254,192,128,252,32,117,2,176,3,80,42,228,205,16,88,
        80,187,0,176,186,184,3,185,0,16,176,1,128,252,48,116,11,187,0,184,186,216,3,185,0,64,254,200,238,142,195,184,64,0,142,216,
        129,62,114,0,52,18,116,13,142,219,232,118,252,116,6,186,2,1,232,129,2,88,80,180,0,205,16,184,32,112,43,255,185,40,0,252,243,
        171,88,80,128,252,48,186,186,3,116,3,186,218,3,180,8,43,201,236,34,196,117,4,226,249,235,19,43,201,236,34,196,116,4,226,249,
        235,8,177,3,210,236,117,228,235,6,186,2,1,232,61,2,88,180,0,205,16,184,64,0,142,216,138,38,16,0,128,228,12,176,4,246,228,
        4,16,139,208,139,216,228,98,36,15,180,32,246,228,163,21,0,131,251,64,116,2,43,192,3,195,163,19,0,129,62,114,0,52,18,116,77,
        187,0,4,185,16,0,59,209,118,70,142,219,142,195,131,193,16,129,195,0,4,81,83,82,232,210,251,90,91,89,116,230,140,218,138,232,
        138,198,177,4,210,232,232,62,0,138,198,36,15,232,55,0,138,197,177,4,210,232,232,46,0,138,197,36,15,232,39,0,190,232,226,185,
        4,0,232,80,2,233,74,0,184,64,0,142,216,139,22,21,0,11,210,116,240,185,0,0,129,251,0,16,119,231,187,0,16,235,155,30,14,31,
        187,183,228,215,180,14,183,0,205,16,31,195,32,51,48,49,49,51,49,54,48,49,188,3,120,3,120,2,48,49,50,51,52,53,54,55,56,57,
        65,66,67,68,69,70,184,64,0,142,216,128,62,18,0,1,116,57,232,178,1,227,43,176,77,230,97,128,251,170,117,34,176,204,230,97,
        176,76,230,97,43,201,226,254,228,96,60,0,116,25,138,232,177,4,210,232,232,156,255,138,197,36,15,232,149,255,190,167,228,185,
        4,0,232,190,1,43,192,142,192,185,48,0,14,31,190,243,254,191,32,0,252,243,165,184,64,0,142,216,176,77,230,97,176,255,230,33,
        176,182,230,67,184,211,4,230,66,138,196,230,66,228,98,36,16,162,107,0,232,62,20,232,59,20,227,12,129,251,64,5,115,6,129,251,
        16,4,115,9,190,171,228,185,3,0,232,110,1,176,252,230,33,160,16,0,168,1,117,3,233,185,0,176,188,230,33,180,0,205,19,246,196,
        255,117,32,186,242,3,176,28,238,43,201,226,254,226,254,51,210,181,1,136,22,62,0,232,243,8,114,7,181,34,232,236,8,115,9,190,
        174,228,185,3,0,232,42,1,176,12,186,242,3,238,199,6,26,0,30,0,199,6,28,0,30,0,189,177,228,190,0,0,46,139,86,0,176,170,238,
        42,192,236,60,170,117,6,137,148,8,0,70,70,69,69,129,253,183,228,117,228,187,0,0,186,250,3,236,168,248,117,8,199,135,0,0,248,
        3,67,67,186,250,2,236,168,248,117,8,199,135,0,0,248,2,67,67,139,198,177,3,210,200,10,195,162,17,0,186,1,2,236,168,15,117,
        5,128,14,17,0,16,176,128,230,160,128,62,18,0,1,116,6,186,1,0,232,16,0,233,207,0,128,62,18,0,1,117,3,233,46,250,233,118,255,
        156,250,30,184,64,0,142,216,10,246,116,24,179,6,232,37,0,226,254,254,206,117,245,128,62,18,0,1,117,6,176,205,230,97,235,232,
        179,1,232,13,0,226,254,254,202,117,245,226,254,226,254,31,157,195,176,182,230,67,184,51,5,230,66,138,196,230,66,228,97,138,
        224,12,3,230,97,43,201,226,254,254,203,117,250,138,196,230,97,195,176,12,230,97,185,86,41,226,254,176,204,230,97,176,76,230,
        97,176,253,230,33,251,180,0,43,201,246,196,255,117,2,226,249,228,96,138,216,176,204,230,97,195,251,81,80,228,97,36,191,230,
        97,43,201,226,254,12,64,230,97,176,32,230,32,88,89,207,184,64,0,142,216,128,62,18,0,1,117,5,182,1,233,85,255,46,138,4,70,
        183,0,180,14,205,16,226,244,184,13,14,205,16,184,10,14,205,16,195,251,184,64,0,142,216,161,16,0,168,1,116,35,185,4,0,81,180,
        0,205,19,114,20,180,2,187,0,0,142,195,187,0,124,186,0,0,185,1,0,176,1,205,19,89,115,4,226,224,205,24,234,0,124,0,0,23,4,0,
        3,128,1,192,0,96,0,48,0,24,0,12,0,251,30,82,86,87,81,139,242,209,230,186,64,0,142,218,139,148,0,0,11,210,116,22,10,228,116,
        24,254,204,116,78,254,204,117,3,233,137,0,254,204,117,3,233,185,0,89,95,94,90,31,207,138,224,131,194,3,176,128,238,138,212,
        208,194,208,194,208,194,208,194,129,226,14,0,191,41,231,3,250,139,148,0,0,66,46,138,69,1,238,74,46,138,5,238,131,194,3,138,
        196,36,31,238,131,234,2,176,0,238,235,121,80,131,194,4,176,3,238,51,201,131,194,2,236,168,32,117,8,226,249,88,128,204,80,
        235,167,43,201,236,168,16,117,8,226,249,88,128,204,128,235,152,74,43,201,236,168,32,117,8,226,249,88,128,204,128,235,136,
        131,234,5,89,138,193,238,233,126,255,128,38,113,0,127,131,194,4,176,1,238,131,194,2,43,201,236,168,32,117,7,226,249,180,128,
        233,98,255,74,236,168,1,117,9,246,6,113,0,128,116,244,235,236,36,30,138,224,139,148,0,0,236,233,71,255,139,148,0,0,131,194,
        5,236,138,224,66,236,233,56,255,251,30,83,187,64,0,142,219,10,228,116,11,254,204,116,32,254,204,116,45,91,31,207,251,144,
        250,139,30,26,0,59,30,28,0,116,243,139,7,232,30,0,137,30,26,0,91,31,207,250,139,30,26,0,59,30,28,0,139,7,251,91,31,202,2,
        0,160,23,0,91,31,207,131,195,2,129,251,62,0,117,3,187,30,0,195,82,58,69,70,56,29,42,54,128,64,32,16,8,4,2,1,27,255,0,255,
        255,255,30,255,255,255,255,31,255,127,255,17,23,5,18,20,25,21,9,15,16,27,29,10,255,1,19,4,6,7,8,10,11,12,255,255,255,255,
        28,26,24,3,22,2,14,13,255,255,255,255,255,255,32,255,94,95,96,97,98,99,100,101,102,103,255,255,119,255,132,255,115,255,116,
        255,117,255,118,255,255,27,49,50,51,52,53,54,55,56,57,48,45,61,8,9,113,119,101,114,116,121,117,105,111,112,91,93,13,255,97,
        115,100,102,103,104,106,107,108,59,39,96,255,92,122,120,99,118,98,110,109,44,46,47,255,42,255,32,255,27,33,64,35,36,37,94,
        38,42,40,41,95,43,8,0,81,87,69,82,84,89,85,73,79,80,123,125,13,255,65,83,68,70,71,72,74,75,76,58,34,126,255,124,90,88,67,
        86,66,78,77,60,62,63,255,0,255,32,255,84,85,86,87,88,89,90,91,92,93,104,105,106,107,108,109,110,111,112,113,55,56,57,45,52,
        53,54,43,49,50,51,48,46,71,72,73,255,75,255,77,255,79,80,81,82,83,251,80,83,81,82,86,87,30,6,252,184,64,0,142,216,228,96,
        80,228,97,138,224,12,128,230,97,134,224,230,97,88,138,224,60,255,117,3,233,117,2,36,127,14,7,191,130,232,185,8,0,242,174,
        138,196,116,3,233,136,0,129,239,131,232,46,138,165,138,232,168,128,117,84,128,252,16,115,7,8,38,23,0,233,131,0,246,6,23,0,
        4,117,104,60,82,117,37,246,6,23,0,8,116,3,235,91,144,246,6,23,0,32,117,13,246,6,23,0,3,116,13,184,48,82,233,216,1,246,6,23,
        0,3,116,243,132,38,24,0,117,77,8,38,24,0,48,38,23,0,60,82,117,65,184,0,82,233,185,1,128,252,16,115,26,246,212,32,38,23,0,
        60,184,117,44,160,25,0,180,0,136,38,25,0,60,0,116,31,233,163,1,246,212,32,38,24,0,235,20,60,128,115,16,246,6,24,0,8,116,23,
        60,69,116,5,128,38,24,0,247,250,176,32,230,32,7,31,95,94,90,89,91,88,207,246,6,23,0,8,117,3,233,143,0,246,6,23,0,4,116,49,
        60,83,117,45,199,6,114,0,52,18,233,209,245,82,79,80,81,75,76,77,71,72,73,16,17,18,19,20,21,22,23,24,25,30,31,32,33,34,35,
        36,37,38,44,45,46,47,48,49,50,60,57,117,5,176,32,233,37,1,191,138,234,185,10,0,242,174,117,18,129,239,139,234,160,25,0,180,
        10,246,228,3,199,162,25,0,235,139,198,6,25,0,0,185,26,0,242,174,117,5,176,0,233,248,0,60,2,114,12,60,14,115,8,128,196,118,
        176,0,233,232,0,60,59,115,3,233,99,255,60,71,115,249,187,99,233,233,37,1,246,6,23,0,4,116,91,60,70,117,24,187,30,0,137,30,
        26,0,137,30,28,0,198,6,113,0,128,205,27,184,0,0,233,180,0,60,69,117,33,128,14,24,0,8,176,32,230,32,128,62,73,0,7,116,7,186,
        216,3,160,101,0,238,246,6,24,0,8,117,249,233,22,255,60,55,117,6,184,0,114,233,133,0,187,146,232,60,59,115,3,235,120,144,187,
        204,232,233,195,0,60,71,115,45,246,6,23,0,3,116,91,60,15,117,6,184,0,15,235,97,144,60,55,117,9,176,32,230,32,205,5,233,218,
        254,60,59,114,6,187,89,233,233,151,0,187,31,233,235,64,246,6,23,0,32,117,32,246,6,23,0,3,117,32,60,74,116,11,60,78,116,12,
        44,71,187,122,233,235,119,184,45,74,235,34,184,43,78,235,29,246,6,23,0,3,117,224,44,70,187,109,233,235,11,60,59,114,4,176,
        0,235,7,187,229,232,254,200,46,215,60,255,116,31,128,252,255,116,26,246,6,23,0,64,116,32,246,6,23,0,3,116,15,60,65,114,21,
        60,90,119,17,4,32,235,13,233,92,254,60,97,114,6,60,122,119,2,44,32,139,30,28,0,139,243,232,96,252,59,30,26,0,116,9,137,4,
        137,30,28,0,233,58,254,232,13,0,233,52,254,44,59,46,215,138,224,176,0,235,168,80,83,81,187,192,0,228,97,80,36,252,230,97,
        185,72,0,226,254,12,2,230,97,185,72,0,226,254,75,117,235,88,230,97,89,91,88,195,251,83,81,30,86,87,85,82,139,236,190,64,0,
        142,222,232,28,0,187,4,0,232,255,1,136,38,64,0,138,38,65,0,128,252,1,245,90,93,95,94,31,89,91,202,2,0,138,240,128,38,63,0,
        127,10,228,116,39,254,204,116,116,198,6,65,0,0,128,250,4,115,19,254,204,116,106,254,204,117,3,233,150,0,254,204,116,104,254,
        204,116,104,198,6,65,0,1,195,186,242,3,250,160,63,0,177,4,210,224,168,32,117,12,168,64,117,6,168,128,116,6,254,192,254,192,
        254,192,12,8,238,198,6,62,0,0,198,6,65,0,0,12,4,238,251,232,40,2,160,66,0,60,192,116,7,128,14,65,0,32,235,17,180,3,232,71,
        1,187,1,0,232,109,1,187,3,0,232,103,1,195,160,65,0,195,176,70,232,185,1,180,102,235,54,176,66,235,245,128,14,63,0,128,176,
        74,232,167,1,180,77,235,36,187,7,0,232,65,1,187,9,0,232,59,1,187,15,0,232,53,1,187,17,0,233,171,0,128,14,63,0,128,176,74,
        232,129,1,180,69,115,8,198,6,65,0,9,176,0,195,80,81,138,202,176,1,210,224,250,198,6,64,0,255,132,6,63,0,117,49,128,38,63,
        0,240,8,6,63,0,251,176,16,210,224,10,194,12,12,82,186,242,3,238,90,246,6,63,0,128,116,18,187,20,0,232,224,0,10,228,116,8,
        43,201,226,254,254,204,235,246,251,89,232,224,0,88,138,252,182,0,114,75,190,243,237,144,86,232,148,0,138,102,1,208,228,208,
        228,128,228,4,10,226,232,133,0,128,255,77,117,3,233,98,255,138,229,232,120,0,138,102,1,232,114,0,138,225,232,109,0,187,7,
        0,232,147,0,187,9,0,232,141,0,187,11,0,232,135,0,187,13,0,232,129,0,94,232,64,1,114,69,232,115,1,114,63,252,190,66,0,172,
        36,192,116,59,60,64,117,41,172,208,224,180,4,114,36,208,224,208,224,180,16,114,28,208,224,180,8,114,22,208,224,208,224,180,
        4,114,14,208,224,180,3,114,8,208,224,180,2,114,2,180,32,8,38,65,0,232,119,1,195,232,46,1,195,232,111,1,50,228,195,82,81,186,
        244,3,51,201,236,168,64,116,12,226,249,128,14,65,0,128,89,90,88,249,195,51,201,236,168,128,117,4,226,249,235,235,138,196,
        186,245,3,238,89,90,195,30,43,192,142,216,197,54,120,0,209,235,138,32,31,114,196,195,176,1,81,138,202,210,192,89,132,6,62,
        0,117,19,8,6,62,0,180,7,232,172,255,138,226,232,167,255,232,114,0,114,41,180,15,232,157,255,138,226,232,152,255,138,229,232,
        147,255,232,94,0,156,187,18,0,232,181,255,81,185,38,2,10,228,116,6,226,254,254,204,235,243,89,157,195,81,230,12,230,11,140,
        192,177,4,211,192,138,232,36,240,3,195,115,2,254,197,80,230,4,138,196,230,4,138,197,36,15,230,129,138,230,42,192,209,232,
        80,187,6,0,232,117,255,138,204,88,211,224,72,80,230,5,138,196,230,5,89,88,3,193,89,176,2,230,10,195,232,30,0,114,20,180,8,
        232,40,255,232,76,0,114,10,160,66,0,36,96,60,96,116,2,248,195,128,14,65,0,64,249,195,251,83,81,179,2,51,201,246,6,62,0,128,
        117,12,226,247,254,203,117,243,128,14,65,0,128,249,156,128,38,62,0,127,157,89,91,195,251,30,80,184,64,0,142,216,128,14,62,
        0,128,176,32,230,32,88,31,207,252,191,66,0,81,82,83,179,7,51,201,186,244,3,236,168,128,117,12,226,249,128,14,65,0,128,249,
        91,90,89,195,236,168,64,117,7,128,14,65,0,32,235,239,66,236,136,5,71,185,10,0,226,254,74,236,168,16,116,6,254,203,117,202,
        235,227,91,90,89,195,160,69,0,58,197,160,71,0,116,10,187,8,0,232,176,254,138,196,254,192,42,193,195,207,2,37,2,8,42,255,80,
        246,25,4,251,30,82,86,81,83,190,64,0,142,222,139,242,209,230,139,148,8,0,11,210,116,12,10,228,116,14,254,204,116,66,254,204,
        116,42,91,89,94,90,31,207,80,179,10,51,201,238,66,236,138,224,168,128,117,14,226,247,254,203,117,243,128,204,1,128,228,249,
        235,20,176,13,66,238,176,12,238,88,80,139,148,8,0,66,236,138,224,128,228,248,90,138,194,128,244,72,235,194,80,131,194,2,176,
        8,238,184,232,3,72,117,253,176,12,238,235,219,252,240,207,241,240,241,26,242,169,247,48,242,156,242,65,243,125,243,195,243,
        246,243,84,242,56,244,39,244,34,247,122,242,251,252,6,30,82,81,83,86,87,80,138,196,50,228,209,224,139,240,61,32,0,114,4,88,
        233,71,1,184,64,0,142,216,184,0,184,139,62,16,0,129,231,48,0,131,255,48,117,3,184,0,176,142,192,88,138,38,73,0,46,255,164,
        69,240,56,40,45,10,31,6,25,28,2,7,6,7,0,0,0,0,113,80,90,10,31,6,25,28,2,7,6,7,0,0,0,0,56,40,45,10,127,6,100,112,2,1,6,7,0,
        0,0,0,97,80,82,15,25,6,25,25,2,13,11,12,0,0,0,0,0,8,0,16,0,64,0,64,40,40,80,80,40,40,80,80,44,40,45,41,42,46,30,41,186,212,
        3,179,0,131,255,48,117,7,176,7,186,180,3,254,195,138,224,162,73,0,137,22,99,0,30,80,82,131,194,4,138,195,238,90,43,192,142,
        216,197,30,116,0,88,185,16,0,128,252,2,114,16,3,217,128,252,4,114,9,3,217,128,252,7,114,2,3,217,80,50,228,138,196,238,66,
        254,196,138,7,238,67,74,226,243,88,31,51,255,137,62,78,0,198,6,98,0,0,185,0,32,128,252,4,114,12,128,252,7,116,4,51,192,235,
        6,185,0,8,184,32,7,243,171,199,6,96,0,103,0,160,73,0,50,228,139,240,139,22,99,0,131,194,4,46,138,132,244,240,238,162,101,
        0,46,138,132,236,240,50,228,163,74,0,129,230,14,0,46,139,140,228,240,137,14,76,0,185,8,0,191,80,0,30,7,51,192,243,171,66,
        176,48,128,62,73,0,6,117,2,176,63,238,162,102,0,95,94,91,89,90,31,7,207,180,10,137,14,96,0,232,2,0,235,237,139,22,99,0,138,
        196,238,66,138,197,238,74,138,196,254,192,238,66,138,193,238,195,138,207,50,237,209,225,139,241,137,148,80,0,56,62,98,0,117,
        5,139,194,232,2,0,235,190,232,127,0,139,200,3,14,78,0,209,249,180,14,232,193,255,195,138,223,50,255,209,227,139,151,80,0,
        139,14,96,0,95,94,91,88,88,31,7,207,162,98,0,139,14,76,0,152,80,247,225,163,78,0,139,200,209,249,180,12,232,147,255,91,209,
        227,139,135,80,0,232,184,255,233,115,255,139,22,99,0,131,194,5,160,102,0,10,255,117,14,36,224,128,227,31,10,195,238,162,102,
        0,233,87,255,36,223,208,235,115,243,12,32,235,239,138,38,74,0,160,73,0,138,62,98,0,95,94,89,233,63,255,83,139,216,138,196,
        246,38,74,0,50,255,3,195,209,224,91,195,138,216,128,252,4,114,8,128,252,7,116,3,233,243,1,83,139,193,232,57,0,116,51,3,240,
        138,230,42,227,232,117,0,3,245,3,253,254,204,117,245,88,176,32,232,112,0,3,253,254,203,117,247,184,64,0,142,216,128,62,73,
        0,7,116,7,160,101,0,186,216,3,238,233,225,254,138,222,235,218,128,62,73,0,2,114,25,128,62,73,0,3,119,18,82,186,218,3,80,236,
        168,8,116,251,176,37,186,216,3,238,88,90,232,126,255,3,6,78,0,139,248,139,240,43,209,254,198,254,194,50,237,139,46,74,0,3,
        237,138,195,246,38,74,0,3,192,6,31,128,251,0,195,138,202,86,87,243,165,95,94,195,138,202,87,243,171,95,195,253,138,216,128,
        252,4,114,8,128,252,7,116,3,233,166,1,83,139,194,232,147,255,116,32,43,240,138,230,42,227,232,207,255,43,245,43,253,254,204,
        117,245,88,176,32,232,202,255,43,253,254,203,117,247,233,87,255,138,222,235,237,128,252,4,114,8,128,252,7,116,3,233,169,2,
        232,26,0,139,243,139,22,99,0,131,194,6,6,31,236,168,1,117,251,250,236,168,1,116,251,173,233,32,254,138,207,50,237,139,241,
        209,230,139,132,80,0,51,219,227,6,3,30,76,0,226,250,232,203,254,3,216,195,128,252,4,114,8,128,252,7,116,3,233,177,1,138,227,
        80,81,232,208,255,139,251,89,91,139,22,99,0,131,194,6,236,168,1,117,251,250,236,168,1,116,251,139,195,171,251,226,232,233,
        209,253,128,252,4,114,8,128,252,7,116,3,233,126,1,80,81,232,159,255,139,251,89,91,139,22,99,0,131,194,6,236,168,1,117,251,
        250,236,168,1,116,251,138,195,170,71,226,232,233,160,253,232,49,0,38,138,4,34,196,210,224,138,206,210,192,233,143,253,80,
        80,232,30,0,210,232,34,196,38,138,12,91,246,195,128,117,13,246,212,34,204,10,193,38,136,4,88,233,112,253,50,193,235,245,83,
        80,176,40,82,128,226,254,246,226,90,246,194,1,116,3,5,0,32,139,240,88,139,209,187,192,2,185,2,3,128,62,73,0,6,114,6,187,128,
        1,185,3,7,34,234,211,234,3,242,138,247,42,201,208,200,2,205,254,207,117,248,138,227,210,236,91,195,138,216,139,193,232,106,
        2,139,248,43,209,129,194,1,1,208,230,208,230,128,62,73,0,6,115,4,208,226,209,231,6,31,42,237,208,227,208,227,116,45,138,195,
        180,80,246,228,139,247,3,240,138,230,42,227,232,128,0,129,238,176,31,129,239,176,31,254,204,117,241,138,199,232,136,0,129,
        239,176,31,254,203,117,245,233,212,252,138,222,235,236,253,138,216,139,194,232,16,2,139,248,43,209,129,194,1,1,208,230,208,
        230,128,62,73,0,6,115,5,208,226,209,231,71,6,31,42,237,129,199,240,0,208,227,208,227,116,46,138,195,180,80,246,228,139,247,
        43,240,138,230,42,227,232,33,0,129,238,80,32,129,239,80,32,254,204,117,241,138,199,232,41,0,129,239,80,32,254,203,117,245,
        252,233,116,252,138,222,235,235,138,202,86,87,243,164,95,94,129,198,0,32,129,199,0,32,86,87,138,202,243,164,95,94,195,138,
        202,87,243,170,95,129,199,0,32,87,138,202,243,170,95,195,180,0,80,232,133,1,139,248,88,60,128,115,6,190,110,250,14,235,15,
        44,128,30,43,246,142,222,197,54,124,0,140,218,31,82,209,224,209,224,209,224,3,240,128,62,73,0,6,31,114,44,87,86,182,4,172,
        246,195,128,117,22,170,172,38,136,133,255,31,131,199,79,254,206,117,236,94,95,71,226,227,233,244,251,38,50,5,170,172,38,50,
        133,255,31,235,224,138,211,209,231,232,209,0,87,86,182,4,172,232,222,0,35,195,246,194,128,116,7,38,50,37,38,50,69,1,38,136,
        37,38,136,69,1,172,232,197,0,35,195,246,194,128,116,10,38,50,165,0,32,38,50,133,1,32,38,136,165,0,32,38,136,133,1,32,131,
        199,80,254,206,117,193,94,95,131,199,2,226,182,233,148,251,232,214,0,139,240,131,236,8,139,236,128,62,73,0,6,6,31,114,26,
        182,4,138,4,136,70,0,69,138,132,0,32,136,70,0,69,131,198,80,254,206,117,235,235,23,144,209,230,182,4,232,136,0,129,198,0,
        32,232,129,0,129,238,176,31,254,206,117,238,191,110,250,14,7,131,237,8,139,245,252,176,0,22,31,186,128,0,86,87,185,8,0,243,
        166,95,94,116,30,254,192,131,199,8,74,117,237,60,0,116,18,43,192,142,216,196,62,124,0,140,192,11,199,116,4,176,128,235,210,
        131,196,8,233,16,251,128,227,3,138,195,81,185,3,0,208,224,208,224,10,216,226,248,138,251,89,195,82,81,83,186,0,0,185,1,0,
        139,216,35,217,11,211,209,224,209,225,139,216,35,217,11,211,209,225,115,236,139,194,91,89,90,195,138,36,138,68,1,185,0,192,
        178,0,133,193,248,116,1,249,208,210,209,233,209,233,115,242,136,86,0,69,195,161,80,0,83,139,216,138,196,246,38,74,0,209,224,
        209,224,42,255,3,195,91,195,80,80,180,3,205,16,88,60,8,116,89,60,13,116,94,60,10,116,94,60,7,116,97,138,62,98,0,180,10,185,
        1,0,205,16,254,194,58,22,74,0,117,54,178,0,128,254,24,117,45,180,2,183,0,205,16,160,73,0,60,4,114,6,60,7,183,0,117,6,180,
        8,205,16,138,252,184,1,6,185,0,0,182,24,138,22,74,0,254,202,205,16,88,233,71,250,254,198,180,2,235,244,128,250,0,116,247,
        254,202,235,243,178,0,235,239,128,254,24,117,232,235,185,179,2,232,199,238,235,219,3,3,5,5,3,3,3,4,180,0,139,22,99,0,131,
        194,6,236,168,4,117,120,168,2,116,126,180,16,139,22,99,0,138,196,238,66,236,138,232,74,254,196,138,196,238,66,236,138,229,
        138,30,73,0,42,255,46,138,159,161,247,43,195,43,6,78,0,121,3,184,0,0,177,3,128,62,73,0,4,114,42,128,62,73,0,7,116,35,178,
        40,246,242,138,232,2,237,138,220,42,255,128,62,73,0,6,117,4,177,4,208,228,211,227,138,212,138,240,208,238,208,238,235,18,
        246,54,74,0,138,240,138,212,210,224,138,232,138,220,50,255,211,227,180,1,82,139,22,99,0,131,194,7,238,90,95,94,31,31,31,31,
        7,207,251,30,184,64,0,142,216,161,19,0,31,207,251,30,184,64,0,142,216,161,16,0,31,207,251,30,80,184,64,0,142,216,128,38,113,
        0,127,88,232,4,0,31,202,2,0,10,228,116,19,254,204,116,24,254,204,116,26,254,204,117,3,233,39,1,180,128,249,195,228,97,36,
        247,230,97,42,228,195,228,97,12,8,235,245,83,81,86,190,7,0,232,194,1,228,98,36,16,162,107,0,186,122,63,246,6,113,0,128,116,
        3,233,138,0,74,117,3,233,132,0,232,198,0,227,235,186,120,3,185,0,2,228,33,12,1,230,33,246,6,113,0,128,117,108,81,232,173,
        0,11,201,89,116,197,59,211,227,4,115,191,226,232,114,230,232,155,0,232,106,0,60,22,117,73,94,89,91,81,199,6,105,0,255,255,
        186,0,1,246,6,113,0,128,117,35,232,79,0,114,30,227,5,38,136,7,67,73,74,127,234,232,64,0,232,61,0,42,228,129,62,105,0,15,29,
        117,6,227,6,235,205,180,1,254,196,90,43,209,80,246,196,3,117,19,232,31,0,235,14,78,116,3,233,98,255,94,89,91,43,210,180,4,
        80,228,33,36,254,230,33,232,66,255,88,128,252,1,245,195,83,81,177,8,81,232,38,0,227,32,83,232,32,0,88,227,25,3,216,129,251,
        240,6,245,159,89,208,213,158,232,217,0,254,201,117,224,138,197,248,89,91,195,89,249,235,249,185,100,0,138,38,107,0,228,98,
        36,16,58,196,225,248,162,107,0,176,0,230,67,228,64,138,224,228,64,134,196,139,30,103,0,43,216,163,103,0,195,83,81,228,97,
        36,253,12,1,230,97,176,182,230,67,232,166,0,184,160,4,232,133,0,185,0,8,249,232,104,0,226,250,248,232,98,0,89,91,176,22,232,
        68,0,199,6,105,0,255,255,186,0,1,38,138,7,232,53,0,227,2,67,73,74,127,243,161,105,0,247,208,80,134,224,232,35,0,88,232,31,
        0,11,201,117,215,81,185,32,0,249,232,42,0,226,250,89,176,176,230,67,184,1,0,232,51,0,232,122,254,43,192,195,81,80,138,232,
        177,8,208,213,156,232,11,0,157,232,36,0,254,201,117,242,88,89,195,184,160,4,114,3,184,80,2,80,228,98,36,32,116,250,228,98,
        36,32,117,250,88,230,66,138,196,230,66,195,161,105,0,209,216,209,208,248,113,4,53,16,8,249,209,208,163,105,0,195,232,35,254,
        179,66,185,0,7,226,254,254,203,117,247,195,0,0,0,0,0,0,0,0,126,129,165,129,189,153,129,126,126,255,219,255,195,231,255,126,
        108,254,254,254,124,56,16,0,16,56,124,254,124,56,16,8,56,124,56,254,254,124,56,124,16,16,56,124,254,124,56,124,0,0,24,60,
        60,24,0,0,255,255,231,195,195,231,255,255,0,60,102,66,66,102,60,0,255,195,153,189,189,153,195,255,15,7,15,125,204,204,204,
        120,60,102,102,102,60,24,126,24,63,51,63,48,48,112,240,224,127,99,127,99,99,103,230,192,153,90,60,231,231,60,90,153,128,224,
        248,254,248,224,128,0,2,14,62,254,62,14,2,0,24,60,126,24,24,126,60,24,102,102,102,102,102,0,102,0,127,219,219,123,27,27,27,
        0,62,99,56,108,108,56,204,120,0,0,0,0,126,126,126,0,24,60,126,24,126,60,24,255,24,60,126,24,24,24,24,0,24,24,24,24,126,60,
        24,0,0,24,12,254,12,24,0,0,0,48,96,254,96,48,0,0,0,0,192,192,192,254,0,0,0,36,102,255,102,36,0,0,0,24,60,126,255,255,0,0,
        0,255,255,126,60,24,0,0,0,0,0,0,0,0,0,0,48,120,120,48,48,0,48,0,108,108,108,0,0,0,0,0,108,108,254,108,254,108,108,0,48,124,
        192,120,12,248,48,0,0,198,204,24,48,102,198,0,56,108,56,118,220,204,118,0,96,96,192,0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,
        24,24,24,48,96,0,0,102,60,255,60,102,0,0,0,48,48,252,48,48,0,0,0,0,0,0,0,48,48,96,0,0,0,252,0,0,0,0,0,0,0,0,0,48,48,0,6,12,
        24,48,96,192,128,0,124,198,206,222,246,230,124,0,48,112,48,48,48,48,252,0,120,204,12,56,96,204,252,0,120,204,12,56,12,204,
        120,0,28,60,108,204,254,12,30,0,252,192,248,12,12,204,120,0,56,96,192,248,204,204,120,0,252,204,12,24,48,48,48,0,120,204,
        204,120,204,204,120,0,120,204,204,124,12,24,112,0,0,48,48,0,0,48,48,0,0,48,48,0,0,48,48,96,24,48,96,192,96,48,24,0,0,0,252,
        0,0,252,0,0,96,48,24,12,24,48,96,0,120,204,12,24,48,0,48,0,124,198,222,222,222,192,120,0,48,120,204,204,252,204,204,0,252,
        102,102,124,102,102,252,0,60,102,192,192,192,102,60,0,248,108,102,102,102,108,248,0,254,98,104,120,104,98,254,0,254,98,104,
        120,104,96,240,0,60,102,192,192,206,102,62,0,204,204,204,252,204,204,204,0,120,48,48,48,48,48,120,0,30,12,12,12,204,204,120,
        0,230,102,108,120,108,102,230,0,240,96,96,96,98,102,254,0,198,238,254,254,214,198,198,0,198,230,246,222,206,198,198,0,56,
        108,198,198,198,108,56,0,252,102,102,124,96,96,240,0,120,204,204,204,220,120,28,0,252,102,102,124,108,102,230,0,120,204,224,
        112,28,204,120,0,252,180,48,48,48,48,120,0,204,204,204,204,204,204,252,0,204,204,204,204,204,120,48,0,198,198,198,214,254,
        238,198,0,198,198,108,56,56,108,198,0,204,204,204,120,48,48,120,0,254,198,140,24,50,102,254,0,120,96,96,96,96,96,120,0,192,
        96,48,24,12,6,2,0,120,24,24,24,24,24,120,0,16,56,108,198,0,0,0,0,0,0,0,0,0,0,0,255,48,48,24,0,0,0,0,0,0,0,120,12,124,204,
        118,0,224,96,96,124,102,102,220,0,0,0,120,204,192,204,120,0,28,12,12,124,204,204,118,0,0,0,120,204,252,192,120,0,56,108,96,
        240,96,96,240,0,0,0,118,204,204,124,12,248,224,96,108,118,102,102,230,0,48,0,112,48,48,48,120,0,12,0,12,12,12,204,204,120,
        224,96,102,108,120,108,230,0,112,48,48,48,48,48,120,0,0,0,204,254,254,214,198,0,0,0,248,204,204,204,204,0,0,0,120,204,204,
        204,120,0,0,0,220,102,102,124,96,240,0,0,118,204,204,124,12,30,0,0,220,118,102,96,240,0,0,0,124,192,120,12,248,0,16,48,124,
        48,48,52,24,0,0,0,204,204,204,204,118,0,0,0,204,204,204,120,48,0,0,0,198,214,254,254,108,0,0,0,198,108,56,108,198,0,0,0,204,
        204,204,124,12,248,0,0,252,152,48,100,252,0,28,48,48,224,48,48,28,0,24,24,24,0,24,24,24,0,224,48,48,28,48,48,224,0,118,220,
        0,0,0,0,0,0,0,16,56,108,198,198,254,0,251,30,80,184,64,0,142,216,88,10,228,116,7,254,204,116,22,251,31,207,250,160,112,0,
        198,6,112,0,0,139,14,110,0,139,22,108,0,235,234,250,137,22,108,0,137,14,110,0,198,6,112,0,0,235,218,251,30,80,82,184,64,0,
        142,216,255,6,108,0,117,4,255,6,110,0,131,62,110,0,24,117,25,129,62,108,0,176,0,117,17,199,6,110,0,0,0,199,6,108,0,0,0,198,
        6,112,0,1,254,14,64,0,117,11,128,38,63,0,240,176,12,186,242,3,238,205,28,176,32,230,32,90,88,31,207,165,254,0,240,135,233,
        0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,239,0,240,0,0,0,0,101,240,0,240,77,248,0,240,65,248,0,240,89,236,0,240,57,231,0,
        240,89,248,0,240,46,232,0,240,210,239,0,240,0,0,0,246,242,230,0,240,110,254,0,240,83,255,0,240,83,255,0,240,164,240,0,240,
        199,239,0,240,0,0,0,0,207,251,30,80,83,81,82,184,80,0,142,216,128,62,0,0,1,116,95,198,6,0,0,1,180,15,205,16,138,204,181,25,
        232,85,0,81,180,3,205,16,89,82,51,210,180,2,205,16,180,8,205,16,10,192,117,2,176,32,82,51,210,50,228,205,23,90,246,196,37,
        117,33,254,194,58,202,117,223,50,210,138,226,82,232,35,0,90,254,198,58,238,117,208,90,180,2,205,16,198,6,0,0,0,235,10,90,
        180,2,205,16,198,6,0,0,255,90,89,91,88,31,207,51,210,50,228,176,10,205,23,50,228,176,13,205,23,195,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,234,91,224,0,240,48,52,47,50,52,47,56,49,255,255,235] 
        
      • 1982-11-08.json
        [49,53,48,49,53,49,50,32,67,79,80,82,46,32,73,66,77,32,49,57,56,49,215,224,126,225,32,75,66,32,79,75,13,232,19,26,138,251,
        232,14,26,138,235,138,207,252,250,191,0,5,176,253,230,33,176,10,230,32,186,97,0,187,204,76,180,2,138,195,238,138,199,238,
        74,228,32,34,196,116,250,236,170,66,226,238,234,0,5,0,0,255,255,250,180,213,158,115,76,117,74,123,72,121,70,159,177,5,210,
        236,115,63,176,64,208,224,113,57,50,228,158,118,52,120,50,122,48,159,177,5,210,236,114,41,208,228,112,37,184,255,255,249,
        142,216,140,219,142,195,140,193,142,209,140,210,139,226,139,236,139,245,139,254,115,7,51,199,117,7,248,235,227,11,199,116,
        1,244,230,160,230,131,186,216,3,238,254,192,178,184,238,176,137,230,99,176,165,230,97,176,1,230,96,140,200,142,208,142,216,
        252,187,0,224,188,22,224,233,27,24,117,212,176,2,230,96,176,4,230,8,176,84,230,67,138,193,230,65,176,64,230,67,128,251,255,
        116,7,228,65,10,216,226,241,244,138,195,43,201,230,65,176,64,230,67,144,144,228,65,34,216,116,3,226,242,244,176,3,230,96,
        230,13,176,255,138,216,138,248,185,8,0,186,0,0,238,80,238,176,1,236,138,224,236,59,216,116,1,244,66,226,239,254,192,116,225,
        142,219,142,195,176,255,230,1,80,230,1,176,88,230,11,176,0,138,232,230,8,80,230,10,176,18,230,65,176,65,230,11,80,228,8,36,
        16,116,1,244,176,66,230,11,176,67,230,11,186,19,2,176,1,238,139,30,114,4,185,0,32,129,251,52,18,116,22,188,24,224,233,241,
        4,116,18,138,216,176,4,230,96,43,201,226,254,134,216,235,246,43,192,243,171,137,30,114,4,186,0,4,187,16,0,142,194,43,255,
        184,85,170,139,200,38,137,5,176,15,38,139,5,51,193,117,17,185,0,32,243,171,129,194,0,4,131,195,16,128,254,160,117,218,137,
        30,19,4,184,48,0,142,208,188,0,1,176,19,230,32,176,8,230,33,176,9,230,33,176,255,230,33,30,185,32,0,43,255,142,199,184,35,
        255,171,140,200,171,226,247,191,64,0,14,31,140,216,190,3,255,144,185,16,0,165,71,71,226,251,31,30,228,98,36,15,138,224,176,
        173,230,97,144,228,98,177,4,210,192,36,240,10,196,42,228,163,16,4,176,153,230,99,232,5,24,128,251,170,116,24,128,251,101,
        117,3,233,239,253,176,56,230,97,144,144,228,96,36,255,117,4,254,6,18,4,161,16,4,80,176,48,163,16,4,42,228,205,16,176,32,163,
        16,4,42,228,205,16,88,163,16,4,36,48,117,10,191,64,0,199,5,75,255,233,160,0,60,48,116,8,254,196,60,32,117,2,180,3,134,224,
        80,42,228,205,16,88,80,187,0,176,186,184,3,185,0,8,176,1,128,252,48,116,9,183,184,186,216,3,181,32,254,200,238,129,62,114,
        4,52,18,142,195,116,7,142,219,232,199,3,117,70,88,80,180,0,205,16,184,32,112,235,17,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,233,153,21,43,255,185,40,0,243,171,88,80,128,252,48,186,186,3,116,3,186,218,3,180,8,43,201,236,34,196,117,
        4,226,249,235,9,43,201,236,34,196,116,17,226,249,31,30,198,6,21,0,6,186,2,1,232,219,22,235,6,177,3,210,236,117,215,88,180,
        0,205,16,186,0,192,142,218,43,219,139,7,83,91,61,85,170,117,5,232,54,22,235,4,129,194,128,0,129,250,0,200,124,228,31,198,
        6,21,4,5,176,0,230,33,228,33,10,192,117,27,176,255,230,33,228,33,4,1,117,17,162,107,4,251,43,201,226,254,226,254,128,62,107,
        4,0,116,9,190,255,248,144,232,78,22,250,244,198,6,21,4,2,176,254,230,33,176,16,230,67,185,22,0,138,193,230,64,246,6,107,4,
        1,117,4,226,247,235,216,177,12,176,255,230,64,198,6,107,4,0,176,254,230,33,246,6,107,4,1,117,194,226,247,176,255,230,33,176,
        54,230,67,176,0,230,64,230,64,176,153,230,99,160,16,4,36,1,116,49,128,62,18,4,1,116,42,232,115,22,227,30,176,73,230,97,128,
        251,170,117,21,176,200,230,97,176,72,230,97,43,201,226,254,228,96,60,0,116,10,232,180,21,190,76,236,144,232,203,21,30,43,
        192,142,192,185,8,0,14,31,190,243,254,144,191,32,0,165,71,71,226,251,31,199,6,8,0,95,248,199,6,20,0,84,255,199,6,98,0,0,246,
        128,62,18,4,1,117,10,199,6,112,0,60,249,176,254,230,33,186,16,2,184,85,85,238,176,1,236,58,196,117,68,247,208,238,176,1,236,
        58,196,117,58,187,1,0,186,21,2,185,16,0,46,136,7,144,236,58,199,117,33,66,236,58,195,117,27,74,209,227,226,236,185,8,0,176,
        1,74,138,224,238,176,1,236,58,196,117,6,208,224,226,242,235,7,190,15,249,144,232,63,21,232,236,21,30,129,62,114,0,52,18,117,
        3,233,159,0,184,16,0,235,40,139,30,19,0,131,235,16,177,4,211,235,139,203,187,0,4,142,219,142,195,129,195,0,4,82,81,83,80,
        185,0,32,232,207,1,117,76,88,5,16,0,80,187,10,0,185,3,0,51,210,247,243,128,202,48,82,226,246,185,3,0,88,232,222,20,226,250,
        185,7,0,190,26,224,46,138,4,70,232,207,20,226,247,88,61,16,0,116,169,91,89,90,226,180,176,10,232,189,20,228,8,36,1,117,51,
        31,198,6,21,0,3,233,102,254,138,232,176,13,232,167,20,176,10,232,162,20,88,131,196,6,140,218,31,30,163,19,0,136,54,21,0,232,
        206,26,138,197,232,122,20,190,4,249,144,232,145,20,186,0,200,142,218,43,219,139,7,83,91,61,85,170,117,6,232,40,20,235,5,144,
        129,194,128,0,129,250,0,246,124,227,235,1,144,180,4,43,219,142,218,232,174,19,116,3,232,130,1,129,194,0,2,254,204,117,236,
        31,160,16,0,36,1,116,62,228,33,36,191,230,33,180,0,138,212,205,19,246,196,255,117,32,186,242,3,176,28,238,43,201,226,254,
        226,254,51,210,181,1,136,22,62,0,232,252,8,114,7,181,34,232,245,8,115,7,190,82,236,144,232,24,20,176,12,186,242,3,238,198,
        6,107,0,0,190,30,0,137,54,26,0,137,54,28,0,137,54,128,0,131,198,32,137,54,130,0,191,120,0,30,7,184,20,20,171,171,184,1,1,
        171,171,228,33,36,252,230,33,131,253,0,116,25,186,2,0,232,6,20,190,9,232,144,232,241,19,180,0,205,22,128,252,59,117,247,235,
        14,144,128,62,18,0,1,116,6,186,1,0,232,230,19,160,16,0,36,1,117,3,233,95,250,42,228,160,73,0,205,16,189,163,249,144,190,0,
        0,46,139,86,0,176,170,238,30,236,31,60,170,117,5,137,84,8,70,70,69,69,129,253,169,249,117,229,187,0,0,186,250,3,236,168,248,
        117,6,199,7,248,3,67,67,186,250,2,236,168,248,117,6,199,7,248,2,67,67,139,198,177,3,210,200,10,195,162,17,0,186,1,2,236,144,
        144,144,168,15,117,5,128,14,17,0,16,228,97,12,48,230,97,36,207,230,97,176,128,230,160,205,25,252,43,255,43,192,136,5,138,
        5,50,196,117,77,254,196,138,196,117,242,139,217,209,227,184,170,170,186,85,255,243,171,228,97,12,48,230,97,144,36,207,230,
        97,79,253,139,247,139,203,172,50,196,117,37,138,194,170,226,246,34,228,116,22,138,224,134,242,34,228,117,4,138,212,235,224,
        252,71,116,222,79,186,1,0,235,214,228,98,36,192,176,0,252,195,82,80,140,218,38,136,54,21,0,129,250,0,200,124,13,232,253,24,
        190,10,249,144,232,197,18,88,90,195,186,2,1,232,235,18,235,245,255,255,255,251,43,192,142,216,199,6,120,0,199,239,140,14,
        122,0,185,4,0,81,180,0,205,19,114,15,184,1,2,43,210,142,194,187,0,124,185,1,0,205,19,89,115,4,226,229,205,24,234,0,124,0,
        0,255,255,255,23,4,0,3,128,1,192,0,96,0,48,0,24,0,12,0,251,30,82,86,87,81,83,139,242,139,250,209,230,232,16,19,139,20,11,
        210,116,19,10,228,116,22,254,204,116,69,254,204,116,106,254,204,117,3,233,131,0,91,89,95,94,90,31,207,138,224,131,194,3,176,
        128,238,138,212,177,4,210,194,129,226,14,0,191,41,231,3,250,139,20,66,46,138,69,1,238,74,46,138,5,238,131,194,3,138,196,36,
        31,238,74,74,176,0,238,235,73,80,131,194,4,176,3,238,66,66,183,48,232,72,0,116,8,89,138,193,128,204,128,235,174,74,183,32,
        232,56,0,117,240,131,234,5,89,138,193,238,235,157,131,194,4,176,1,238,66,66,183,32,232,32,0,117,219,74,183,1,232,24,0,117,
        211,128,228,30,139,20,236,233,125,255,139,20,131,194,5,236,138,224,66,236,233,112,255,138,93,124,43,201,236,138,224,34,199,
        58,199,116,8,226,245,254,203,117,239,10,255,195,69,82,82,79,82,46,32,40,82,69,83,85,77,69,32,61,32,34,70,49,34,32,75,69,89,
        41,13,10,255,255,255,255,255,255,255,255,255,251,30,83,232,37,18,10,228,116,10,254,204,116,30,254,204,116,43,235,44,251,144,
        250,139,30,26,0,59,30,28,0,116,243,139,7,232,29,0,137,30,26,0,235,20,250,139,30,26,0,59,30,28,0,139,7,251,91,31,202,2,0,160,
        23,0,91,31,207,67,67,59,30,130,0,117,4,139,30,128,0,195,82,58,69,70,56,29,42,54,128,64,32,16,8,4,2,1,27,255,0,255,255,255,
        30,255,255,255,255,31,255,127,255,17,23,5,18,20,25,21,9,15,16,27,29,10,255,1,19,4,6,7,8,10,11,12,255,255,255,255,28,26,24,
        3,22,2,14,13,255,255,255,255,255,255,32,255,94,95,96,97,98,99,100,101,102,103,255,255,119,255,132,255,115,255,116,255,117,
        255,118,255,255,27,49,50,51,52,53,54,55,56,57,48,45,61,8,9,113,119,101,114,116,121,117,105,111,112,91,93,13,255,97,115,100,
        102,103,104,106,107,108,59,39,96,255,92,122,120,99,118,98,110,109,44,46,47,255,42,255,32,255,27,33,64,35,36,37,94,38,42,40,
        41,95,43,8,0,81,87,69,82,84,89,85,73,79,80,123,125,13,255,65,83,68,70,71,72,74,75,76,58,34,126,255,124,90,88,67,86,66,78,
        77,60,62,63,255,0,255,32,255,84,85,86,87,88,89,90,91,92,93,104,105,106,107,108,109,110,111,112,113,55,56,57,45,52,53,54,43,
        49,50,51,48,46,71,72,73,255,75,255,77,255,79,80,81,82,83,255,255,255,255,251,80,83,81,82,86,87,30,6,252,232,197,16,228,96,
        80,228,97,138,224,12,128,230,97,134,224,230,97,88,138,224,60,255,117,3,233,122,2,36,127,14,7,191,126,232,185,8,0,242,174,
        138,196,116,3,233,133,0,129,239,127,232,46,138,165,134,232,168,128,117,81,128,252,16,115,7,8,38,23,0,233,128,0,246,6,23,0,
        4,117,101,60,82,117,34,246,6,23,0,8,117,90,246,6,23,0,32,117,13,246,6,23,0,3,116,13,184,48,82,233,214,1,246,6,23,0,3,116,
        243,132,38,24,0,117,77,8,38,24,0,48,38,23,0,60,82,117,65,184,0,82,233,183,1,128,252,16,115,26,246,212,32,38,23,0,60,184,117,
        44,160,25,0,180,0,136,38,25,0,60,0,116,31,233,161,1,246,212,32,38,24,0,235,20,60,128,115,16,246,6,24,0,8,116,23,60,69,116,
        5,128,38,24,0,247,250,176,32,230,32,7,31,95,94,90,89,91,88,207,246,6,23,0,8,117,3,233,145,0,246,6,23,0,4,116,51,60,83,117,
        47,199,6,114,0,52,18,234,91,224,0,240,82,79,80,81,75,76,77,71,72,73,16,17,18,19,20,21,22,23,24,25,30,31,32,33,34,35,36,37,
        38,44,45,46,47,48,49,50,60,57,117,5,176,32,233,33,1,191,135,234,185,10,0,242,174,117,18,129,239,136,234,160,25,0,180,10,246,
        228,3,199,162,25,0,235,137,198,6,25,0,0,185,26,0,242,174,117,5,176,0,233,244,0,60,2,114,12,60,14,115,8,128,196,118,176,0,
        233,228,0,60,59,115,3,233,97,255,60,71,115,249,187,95,233,233,27,1,246,6,23,0,4,116,88,60,70,117,24,139,30,128,0,137,30,26,
        0,137,30,28,0,198,6,113,0,128,205,27,43,192,233,176,0,60,69,117,33,128,14,24,0,8,176,32,230,32,128,62,73,0,7,116,7,186,216,
        3,160,101,0,238,246,6,24,0,8,117,249,233,20,255,60,55,117,6,184,0,114,233,129,0,187,142,232,60,59,114,118,187,200,232,233,
        188,0,60,71,115,44,246,6,23,0,3,116,90,60,15,117,5,184,0,15,235,96,60,55,117,9,176,32,230,32,205,5,233,220,254,60,59,114,
        6,187,85,233,233,145,0,187,27,233,235,64,246,6,23,0,32,117,32,246,6,23,0,3,117,32,60,74,116,11,60,78,116,12,44,71,187,118,
        233,235,113,184,45,74,235,34,184,43,78,235,29,246,6,23,0,3,117,224,44,70,187,105,233,235,11,60,59,114,4,176,0,235,7,187,225,
        232,254,200,46,215,60,255,116,31,128,252,255,116,26,246,6,23,0,64,116,32,246,6,23,0,3,116,15,60,65,114,21,60,90,119,17,4,
        32,235,13,233,94,254,60,97,114,6,60,122,119,2,44,32,139,30,28,0,139,243,232,99,252,59,30,26,0,116,19,137,4,137,30,28,0,233,
        60,254,44,59,46,215,138,224,176,0,235,174,176,32,230,32,187,128,0,228,97,80,36,252,230,97,185,72,0,226,254,12,2,230,97,185,
        72,0,226,254,75,117,235,88,230,97,233,18,254,32,51,48,49,13,10,54,48,49,13,10,255,255,251,83,81,30,86,87,85,82,139,236,232,
        243,13,232,28,0,187,4,0,232,253,1,136,38,64,0,138,38,65,0,128,252,1,245,90,93,95,94,31,89,91,202,2,0,138,240,128,38,63,0,
        127,10,228,116,39,254,204,116,115,198,6,65,0,0,128,250,4,115,19,254,204,116,105,254,204,117,3,233,149,0,254,204,116,103,254,
        204,116,103,198,6,65,0,1,195,186,242,3,250,160,63,0,177,4,210,224,168,32,117,12,168,64,117,6,168,128,116,6,254,192,254,192,
        254,192,12,8,238,198,6,62,0,0,198,6,65,0,0,12,4,238,251,232,42,2,160,66,0,60,192,116,6,128,14,65,0,32,195,180,3,232,71,1,
        187,1,0,232,108,1,187,3,0,232,102,1,195,160,65,0,195,176,70,232,184,1,180,230,235,54,176,66,235,245,128,14,63,0,128,176,74,
        232,166,1,180,77,235,36,187,7,0,232,64,1,187,9,0,232,58,1,187,15,0,232,52,1,187,17,0,233,171,0,128,14,63,0,128,176,74,232,
        128,1,180,197,115,8,198,6,65,0,9,176,0,195,80,81,138,202,176,1,210,224,250,198,6,64,0,255,132,6,63,0,117,49,128,38,63,0,240,
        8,6,63,0,251,176,16,210,224,10,194,12,12,82,186,242,3,238,90,246,6,63,0,128,116,18,187,20,0,232,223,0,10,228,116,8,43,201,
        226,254,254,204,235,246,251,89,232,223,0,88,138,252,182,0,114,75,190,240,237,144,86,232,148,0,138,102,1,208,228,208,228,128,
        228,4,10,226,232,133,0,128,255,77,117,3,233,98,255,138,229,232,120,0,138,102,1,232,114,0,138,225,232,109,0,187,7,0,232,146,
        0,187,9,0,232,140,0,187,11,0,232,134,0,187,13,0,232,128,0,94,232,67,1,114,69,232,116,1,114,63,252,190,66,0,172,36,192,116,
        59,60,64,117,41,172,208,224,180,4,114,36,208,224,208,224,180,16,114,28,208,224,180,8,114,22,208,224,208,224,180,4,114,14,
        208,224,180,3,114,8,208,224,180,2,114,2,180,32,8,38,65,0,232,120,1,195,232,47,1,195,232,112,1,50,228,195,82,81,186,244,3,
        51,201,236,168,64,116,12,226,249,128,14,65,0,128,89,90,88,249,195,51,201,236,168,128,117,4,226,249,235,235,138,196,178,245,
        238,89,90,195,30,43,192,142,216,197,54,120,0,209,235,138,32,31,114,197,195,176,1,81,138,202,210,192,89,132,6,62,0,117,19,
        8,6,62,0,180,7,232,173,255,138,226,232,168,255,232,118,0,114,41,180,15,232,158,255,138,226,232,153,255,138,229,232,148,255,
        232,98,0,156,187,18,0,232,181,255,81,185,38,2,10,228,116,6,226,254,254,204,235,243,89,157,195,81,250,230,12,80,88,230,11,
        140,192,177,4,211,192,138,232,36,240,3,195,115,2,254,197,80,230,4,138,196,230,4,138,197,36,15,230,129,138,230,42,192,209,
        232,80,187,6,0,232,114,255,138,204,88,211,224,72,80,230,5,138,196,230,5,251,89,88,3,193,89,176,2,230,10,195,232,30,0,114,
        20,180,8,232,37,255,232,74,0,114,10,160,66,0,36,96,60,96,116,2,248,195,128,14,65,0,64,249,195,251,83,81,179,2,51,201,246,
        6,62,0,128,117,12,226,247,254,203,117,243,128,14,65,0,128,249,156,128,38,62,0,127,157,89,91,195,251,30,80,232,252,10,128,
        14,62,0,128,176,32,230,32,88,31,207,252,191,66,0,81,82,83,179,7,51,201,186,244,3,236,168,128,117,12,226,249,128,14,65,0,128,
        249,91,90,89,195,236,168,64,117,7,128,14,65,0,32,235,239,66,236,136,5,71,185,10,0,226,254,74,236,168,16,116,6,254,203,117,
        202,235,227,91,90,89,195,160,69,0,58,197,160,71,0,116,10,187,8,0,232,174,254,138,196,254,192,42,193,195,255,255,207,2,37,
        2,8,42,255,80,246,25,4,251,30,82,86,81,83,232,126,10,139,242,138,92,120,209,230,139,84,8,11,210,116,12,10,228,116,14,254,
        204,116,63,254,204,116,40,91,89,94,90,31,207,80,238,66,43,201,236,138,224,168,128,117,14,226,247,254,203,117,241,128,204,
        1,128,228,249,235,19,176,13,66,238,176,12,238,88,80,139,84,8,66,236,138,224,128,228,248,90,138,194,128,244,72,235,197,80,
        66,66,176,8,238,184,232,3,72,117,253,176,12,238,235,221,255,255,255,255,252,240,205,241,238,241,57,242,156,247,23,242,150,
        242,56,243,116,243,185,243,236,243,78,242,47,244,30,244,24,247,116,242,251,252,6,30,82,81,83,86,87,80,138,196,50,228,209,
        224,139,240,61,32,0,114,4,88,233,69,1,232,214,9,184,0,184,139,62,16,0,129,231,48,0,131,255,48,117,2,180,176,142,192,88,138,
        38,73,0,46,255,164,69,240,255,255,255,56,40,45,10,31,6,25,28,2,7,6,7,0,0,0,0,113,80,90,10,31,6,25,28,2,7,6,7,0,0,0,0,56,40,
        45,10,127,6,100,112,2,1,6,7,0,0,0,0,97,80,82,15,25,6,25,25,2,13,11,12,0,0,0,0,0,8,0,16,0,64,0,64,40,40,80,80,40,40,80,80,
        44,40,45,41,42,46,30,41,186,212,3,179,0,131,255,48,117,6,176,7,178,180,254,195,138,224,162,73,0,137,22,99,0,30,80,82,131,
        194,4,138,195,238,90,43,192,142,216,197,30,116,0,88,185,16,0,128,252,2,114,16,3,217,128,252,4,114,9,3,217,128,252,7,114,2,
        3,217,80,50,228,138,196,238,66,254,196,138,7,238,67,74,226,243,88,31,51,255,137,62,78,0,198,6,98,0,0,185,0,32,128,252,4,114,
        11,128,252,7,116,4,51,192,235,5,181,8,184,32,7,243,171,199,6,96,0,7,6,160,73,0,50,228,139,240,139,22,99,0,131,194,4,46,138,
        132,244,240,238,162,101,0,46,138,132,236,240,50,228,163,74,0,129,230,14,0,46,139,140,228,240,137,14,76,0,185,8,0,191,80,0,
        30,7,51,192,243,171,66,176,48,128,62,73,0,6,117,2,176,63,238,162,102,0,95,94,91,89,90,31,7,207,180,10,137,14,96,0,232,2,0,
        235,237,139,22,99,0,138,196,238,66,138,197,238,74,138,196,254,192,238,66,138,193,238,195,138,207,50,237,209,225,139,241,137,
        84,80,56,62,98,0,117,5,139,194,232,2,0,235,191,232,124,0,139,200,3,14,78,0,209,249,180,14,232,194,255,195,162,98,0,139,14,
        76,0,152,80,247,225,163,78,0,139,200,209,249,180,12,232,170,255,91,209,227,139,71,80,232,207,255,235,140,138,223,50,255,209,
        227,139,87,80,139,14,96,0,95,94,91,88,88,31,7,207,139,22,99,0,131,194,5,160,102,0,10,255,117,14,36,224,128,227,31,10,195,
        238,162,102,0,233,91,255,36,223,208,235,115,243,12,32,235,239,138,38,74,0,160,73,0,138,62,98,0,95,94,89,233,67,255,83,139,
        216,138,196,246,38,74,0,50,255,3,195,209,224,91,195,138,216,128,252,4,114,8,128,252,7,116,3,233,240,1,83,139,193,232,55,0,
        116,49,3,240,138,230,42,227,232,114,0,3,245,3,253,254,204,117,245,88,176,32,232,109,0,3,253,254,203,117,247,232,140,7,128,
        62,73,0,7,116,7,160,101,0,186,216,3,238,233,231,254,138,222,235,220,128,62,73,0,2,114,24,128,62,73,0,3,119,17,82,186,218,
        3,80,236,168,8,116,251,176,37,178,216,238,88,90,232,129,255,3,6,78,0,139,248,139,240,43,209,254,198,254,194,50,237,139,46,
        74,0,3,237,138,195,246,38,74,0,3,192,6,31,128,251,0,195,138,202,86,87,243,165,95,94,195,138,202,87,243,171,95,195,253,138,
        216,128,252,4,114,8,128,252,7,116,3,233,166,1,83,139,194,232,148,255,116,32,43,240,138,230,42,227,232,207,255,43,245,43,253,
        254,204,117,245,88,176,32,232,202,255,43,253,254,203,117,247,233,90,255,138,222,235,237,128,252,4,114,8,128,252,7,116,3,233,
        168,2,232,26,0,139,243,139,22,99,0,131,194,6,6,31,236,168,1,117,251,250,236,168,1,116,251,173,233,39,254,138,207,50,237,139,
        241,209,230,139,68,80,51,219,227,6,3,30,76,0,226,250,232,207,254,3,216,195,128,252,4,114,8,128,252,7,116,3,233,178,1,138,
        227,80,81,232,209,255,139,251,89,91,139,22,99,0,131,194,6,236,168,1,117,251,250,236,168,1,116,251,139,195,171,251,226,232,
        233,217,253,128,252,4,114,8,128,252,7,116,3,233,127,1,80,81,232,160,255,139,251,89,91,139,22,99,0,131,194,6,236,168,1,117,
        251,250,236,168,1,116,251,138,195,170,251,71,226,231,233,167,253,232,49,0,38,138,4,34,196,210,224,138,206,210,192,233,150,
        253,80,80,232,30,0,210,232,34,196,38,138,12,91,246,195,128,117,13,246,212,34,204,10,193,38,136,4,88,233,119,253,50,193,235,
        245,83,80,176,40,82,128,226,254,246,226,90,246,194,1,116,3,5,0,32,139,240,88,139,209,187,192,2,185,2,3,128,62,73,0,6,114,
        6,187,128,1,185,3,7,34,234,211,234,3,242,138,247,42,201,208,200,2,205,254,207,117,248,138,227,210,236,91,195,138,216,139,
        193,232,105,2,139,248,43,209,129,194,1,1,208,230,208,230,128,62,73,0,6,115,4,208,226,209,231,6,31,42,237,208,227,208,227,
        116,45,138,195,180,80,246,228,139,247,3,240,138,230,42,227,232,128,0,129,238,176,31,129,239,176,31,254,204,117,241,138,199,
        232,136,0,129,239,176,31,254,203,117,245,233,219,252,138,222,235,236,253,138,216,139,194,232,15,2,139,248,43,209,129,194,
        1,1,208,230,208,230,128,62,73,0,6,115,5,208,226,209,231,71,6,31,42,237,129,199,240,0,208,227,208,227,116,46,138,195,180,80,
        246,228,139,247,43,240,138,230,42,227,232,33,0,129,238,80,32,129,239,80,32,254,204,117,241,138,199,232,41,0,129,239,80,32,
        254,203,117,245,252,233,123,252,138,222,235,235,138,202,86,87,243,164,95,94,129,198,0,32,129,199,0,32,86,87,138,202,243,164,
        95,94,195,138,202,87,243,170,95,129,199,0,32,87,138,202,243,170,95,195,180,0,80,232,132,1,139,248,88,60,128,115,6,190,110,
        250,14,235,15,44,128,30,43,246,142,222,197,54,124,0,140,218,31,82,209,224,209,224,209,224,3,240,128,62,73,0,6,31,114,44,87,
        86,182,4,172,246,195,128,117,22,170,172,38,136,133,255,31,131,199,79,254,206,117,236,94,95,71,226,227,233,251,251,38,50,5,
        170,172,38,50,133,255,31,235,224,138,211,209,231,232,209,0,87,86,182,4,172,232,222,0,35,195,246,194,128,116,7,38,50,37,38,
        50,69,1,38,136,37,38,136,69,1,172,232,197,0,35,195,246,194,128,116,10,38,50,165,0,32,38,50,133,1,32,38,136,165,0,32,38,136,
        133,1,32,131,199,80,254,206,117,193,94,95,71,71,226,183,233,156,251,232,214,0,139,240,131,236,8,139,236,128,62,73,0,6,6,31,
        114,26,182,4,138,4,136,70,0,69,138,132,0,32,136,70,0,69,131,198,80,254,206,117,235,235,23,144,209,230,182,4,232,136,0,129,
        198,0,32,232,129,0,129,238,176,31,254,206,117,238,191,110,250,144,14,7,131,237,8,139,245,252,176,0,22,31,186,128,0,86,87,
        185,8,0,243,166,95,94,116,30,254,192,131,199,8,74,117,237,60,0,116,18,43,192,142,216,196,62,124,0,140,192,11,199,116,4,176,
        128,235,210,131,196,8,233,23,251,128,227,3,138,195,81,185,3,0,208,224,208,224,10,216,226,248,138,251,89,195,82,81,83,43,210,
        185,1,0,139,216,35,217,11,211,209,224,209,225,139,216,35,217,11,211,209,225,115,236,139,194,91,89,90,195,138,36,138,68,1,
        185,0,192,178,0,133,193,248,116,1,249,208,210,209,233,209,233,115,242,136,86,0,69,195,161,80,0,83,139,216,138,196,246,38,
        74,0,209,224,209,224,42,255,3,195,91,195,80,80,180,3,138,62,98,0,205,16,88,60,8,116,82,60,13,116,87,60,10,116,87,60,7,116,
        90,180,10,185,1,0,205,16,254,194,58,22,74,0,117,51,178,0,128,254,24,117,42,180,2,205,16,160,73,0,60,4,114,6,60,7,183,0,117,
        6,180,8,205,16,138,252,184,1,6,43,201,182,24,138,22,74,0,254,202,205,16,88,233,82,250,254,198,180,2,235,244,128,250,0,116,
        247,254,202,235,243,178,0,235,239,128,254,24,117,232,235,188,179,2,232,118,2,235,219,3,3,5,5,3,3,3,4,180,0,139,22,99,0,131,
        194,6,236,168,4,117,126,168,2,117,3,233,129,0,180,16,139,22,99,0,138,196,238,66,236,138,232,74,254,196,138,196,238,66,236,
        138,229,138,30,73,0,42,255,46,138,159,148,247,43,195,139,30,78,0,209,235,43,195,121,2,43,192,177,3,128,62,73,0,4,114,42,128,
        62,73,0,7,116,35,178,40,246,242,138,232,2,237,138,220,42,255,128,62,73,0,6,117,4,177,4,208,228,211,227,138,212,138,240,208,
        238,208,238,235,18,246,54,74,0,138,240,138,212,210,224,138,232,138,220,50,255,211,227,180,1,82,139,22,99,0,131,194,7,238,
        90,95,94,31,31,31,31,7,207,255,255,255,255,255,255,255,251,30,232,19,2,161,19,0,31,207,255,255,251,30,232,7,2,161,16,0,31,
        207,255,255,249,180,134,202,2,0,80,228,98,168,192,117,3,233,135,0,186,64,0,142,218,190,21,249,144,168,64,117,4,190,37,249,
        144,180,0,160,73,0,205,16,232,70,1,176,0,230,160,228,97,12,48,230,97,36,207,230,97,139,30,19,0,252,43,210,142,218,142,194,
        185,0,64,43,246,243,172,228,98,36,192,117,18,129,194,0,4,131,235,16,117,230,190,53,249,144,232,16,1,250,244,140,218,232,25,
        7,186,19,2,176,0,238,176,40,232,208,0,184,90,165,139,200,43,219,137,7,144,144,139,7,59,193,116,7,176,69,232,186,0,235,5,176,
        83,232,179,0,176,41,232,174,0,250,244,88,207,185,0,32,50,192,2,7,67,226,251,10,192,195,49,48,49,13,10,32,50,48,49,13,10,82,
        79,77,13,10,49,56,48,49,13,10,80,65,82,73,84,89,32,67,72,69,67,75,32,50,13,10,80,65,82,73,84,89,32,67,72,69,67,75,32,49,13,
        10,63,63,63,63,63,13,10,251,80,228,97,138,224,246,208,36,64,128,228,191,10,196,230,97,176,32,230,32,88,207,184,64,0,142,192,
        42,228,138,71,2,177,9,211,224,139,200,81,185,4,0,211,232,3,208,89,232,134,255,116,6,232,87,237,235,20,144,82,38,199,6,103,
        0,3,0,38,140,30,105,0,38,255,30,103,0,90,195,80,177,4,210,232,232,3,0,88,36,15,4,144,39,20,64,39,180,14,183,0,205,16,195,
        188,3,120,3,120,2,139,238,232,28,0,30,232,167,0,160,16,0,36,1,117,15,250,176,137,230,99,176,133,230,97,160,21,0,230,96,244,
        31,195,46,138,4,70,80,232,202,255,88,60,10,117,243,195,156,250,30,232,123,0,10,246,116,20,179,6,232,33,0,226,254,254,206,
        117,245,128,62,18,0,1,117,2,235,195,179,1,232,13,0,226,254,254,202,117,245,226,254,226,254,31,157,195,176,182,230,67,184,
        51,5,230,66,138,196,230,66,228,97,138,224,12,3,230,97,43,201,226,254,254,203,117,250,138,196,230,97,195,176,8,230,97,185,
        86,41,226,254,176,200,230,97,176,72,230,97,176,253,230,33,198,6,107,4,0,251,43,201,246,6,107,4,2,117,2,226,247,228,96,138,
        216,176,200,230,97,195,80,184,64,0,142,216,88,195,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,126,
        129,165,129,189,153,129,126,126,255,219,255,195,231,255,126,108,254,254,254,124,56,16,0,16,56,124,254,124,56,16,0,56,124,
        56,254,254,124,56,124,16,16,56,124,254,124,56,124,0,0,24,60,60,24,0,0,255,255,231,195,195,231,255,255,0,60,102,66,66,102,
        60,0,255,195,153,189,189,153,195,255,15,7,15,125,204,204,204,120,60,102,102,102,60,24,126,24,63,51,63,48,48,112,240,224,127,
        99,127,99,99,103,230,192,153,90,60,231,231,60,90,153,128,224,248,254,248,224,128,0,2,14,62,254,62,14,2,0,24,60,126,24,24,
        126,60,24,102,102,102,102,102,0,102,0,127,219,219,123,27,27,27,0,62,99,56,108,108,56,204,120,0,0,0,0,126,126,126,0,24,60,
        126,24,126,60,24,255,24,60,126,24,24,24,24,0,24,24,24,24,126,60,24,0,0,24,12,254,12,24,0,0,0,48,96,254,96,48,0,0,0,0,192,
        192,192,254,0,0,0,36,102,255,102,36,0,0,0,24,60,126,255,255,0,0,0,255,255,126,60,24,0,0,0,0,0,0,0,0,0,0,48,120,120,48,48,
        0,48,0,108,108,108,0,0,0,0,0,108,108,254,108,254,108,108,0,48,124,192,120,12,248,48,0,0,198,204,24,48,102,198,0,56,108,56,
        118,220,204,118,0,96,96,192,0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0,0,102,60,255,60,102,0,0,0,48,48,252,48,
        48,0,0,0,0,0,0,0,48,48,96,0,0,0,252,0,0,0,0,0,0,0,0,0,48,48,0,6,12,24,48,96,192,128,0,124,198,206,222,246,230,124,0,48,112,
        48,48,48,48,252,0,120,204,12,56,96,204,252,0,120,204,12,56,12,204,120,0,28,60,108,204,254,12,30,0,252,192,248,12,12,204,120,
        0,56,96,192,248,204,204,120,0,252,204,12,24,48,48,48,0,120,204,204,120,204,204,120,0,120,204,204,124,12,24,112,0,0,48,48,
        0,0,48,48,0,0,48,48,0,0,48,48,96,24,48,96,192,96,48,24,0,0,0,252,0,0,252,0,0,96,48,24,12,24,48,96,0,120,204,12,24,48,0,48,
        0,124,198,222,222,222,192,120,0,48,120,204,204,252,204,204,0,252,102,102,124,102,102,252,0,60,102,192,192,192,102,60,0,248,
        108,102,102,102,108,248,0,254,98,104,120,104,98,254,0,254,98,104,120,104,96,240,0,60,102,192,192,206,102,62,0,204,204,204,
        252,204,204,204,0,120,48,48,48,48,48,120,0,30,12,12,12,204,204,120,0,230,102,108,120,108,102,230,0,240,96,96,96,98,102,254,
        0,198,238,254,254,214,198,198,0,198,230,246,222,206,198,198,0,56,108,198,198,198,108,56,0,252,102,102,124,96,96,240,0,120,
        204,204,204,220,120,28,0,252,102,102,124,108,102,230,0,120,204,224,112,28,204,120,0,252,180,48,48,48,48,120,0,204,204,204,
        204,204,204,252,0,204,204,204,204,204,120,48,0,198,198,198,214,254,238,198,0,198,198,108,56,56,108,198,0,204,204,204,120,
        48,48,120,0,254,198,140,24,50,102,254,0,120,96,96,96,96,96,120,0,192,96,48,24,12,6,2,0,120,24,24,24,24,24,120,0,16,56,108,
        198,0,0,0,0,0,0,0,0,0,0,0,255,48,48,24,0,0,0,0,0,0,0,120,12,124,204,118,0,224,96,96,124,102,102,220,0,0,0,120,204,192,204,
        120,0,28,12,12,124,204,204,118,0,0,0,120,204,252,192,120,0,56,108,96,240,96,96,240,0,0,0,118,204,204,124,12,248,224,96,108,
        118,102,102,230,0,48,0,112,48,48,48,120,0,12,0,12,12,12,204,204,120,224,96,102,108,120,108,230,0,112,48,48,48,48,48,120,0,
        0,0,204,254,254,214,198,0,0,0,248,204,204,204,204,0,0,0,120,204,204,204,120,0,0,0,220,102,102,124,96,240,0,0,118,204,204,
        124,12,30,0,0,220,118,102,96,240,0,0,0,124,192,120,12,248,0,16,48,124,48,48,52,24,0,0,0,204,204,204,204,118,0,0,0,204,204,
        204,120,48,0,0,0,198,214,254,254,108,0,0,0,198,108,56,108,198,0,0,0,204,204,204,124,12,248,0,0,252,152,48,100,252,0,28,48,
        48,224,48,48,28,0,24,24,24,0,24,24,24,0,224,48,48,28,48,48,224,0,118,220,0,0,0,0,0,0,0,16,56,108,198,198,254,0,251,30,232,
        230,251,10,228,116,7,254,204,116,22,251,31,207,250,160,112,0,198,6,112,0,0,139,14,110,0,139,22,108,0,235,234,250,137,22,108,
        0,137,14,110,0,198,6,112,0,0,235,218,255,255,255,255,251,30,80,82,232,173,251,255,6,108,0,117,4,255,6,110,0,131,62,110,0,
        24,117,21,129,62,108,0,176,0,117,13,43,192,163,110,0,163,108,0,198,6,112,0,1,254,14,64,0,117,11,128,38,63,0,240,176,12,186,
        242,3,238,205,28,176,32,230,32,90,88,31,207,255,255,255,255,255,255,165,254,135,233,35,255,35,255,35,255,35,255,87,239,35,
        255,101,240,77,248,65,248,89,236,57,231,89,248,46,232,210,239,0,0,242,230,110,254,75,255,75,255,164,240,199,239,0,0,30,82,
        80,232,48,251,176,11,230,32,144,228,32,138,224,10,196,117,4,180,255,235,10,228,33,10,196,230,33,176,32,230,32,136,38,107,
        0,88,90,31,207,255,255,255,255,255,255,255,207,251,30,80,83,81,82,184,80,0,142,216,128,62,0,0,1,116,95,198,6,0,0,1,180,15,
        205,16,138,204,181,25,232,85,0,81,180,3,205,16,89,82,51,210,180,2,205,16,180,8,205,16,10,192,117,2,176,32,82,51,210,50,228,
        205,23,90,246,196,37,117,33,254,194,58,202,117,223,50,210,138,226,82,232,35,0,90,254,198,58,238,117,208,90,180,2,205,16,198,
        6,0,0,0,235,10,90,180,2,205,16,198,6,0,0,255,90,89,91,88,31,207,51,210,50,228,176,10,205,23,50,228,176,13,205,23,195,138,
        198,232,172,249,138,194,232,167,249,176,48,232,179,249,176,32,232,174,249,195,255,234,91,224,0,240,49,49,47,48,56,47,56,50,
        255,254,40] 
        
      • MSDOS320-DISK1.json
        [[[{"sector":1,"length":512,"data":[1301296363,1397703763,3288627,66050,-805277694,195842,131081,0,0,0,0,251658240,0,872022017,-1127182656,118914048,906000571,1444820933,733958934,768380,-2144948996,57933885,-1442477530,-236796790,1200168710,721929986,378207100,332234237,278947442,653760636,100891670,100891676,1067678734,2084021116,-150986568,-1954803418,58460958,-201897789,2083980801,-1593507653,-1796703169,-402542592,426901673,196737931,2111159808,225814259,-1105166451,196705760,1957098240,2104933912,838885864,1578552804,-1895526625,432865860,-344080450,85762539,922210867,-1057063925,-1585693534,1034124343,117488508,-394512479,413204543,990259836,-397393796,1918369869,1007036623,17593980,-142854394,58460966,-1965429800,-1971579602,-1954677482,-360956642,7340032,1958742700,-1290882015,-351220225,-137219085,-25421770,991332546,-137219204,-2005132746,-1552143850,-1262257095,957778690,-789935492,-2133929778,243974374,-511673285,-1966208449,-1971574218,-847381226,168674067,762212174,1953724755,1679846757,543912809,1679848047,543912809,1869771365,1376390514,1634496613,1629513059,1931502702,1802072692,1851859045,1701519481,1752637561,1914728037,2036621669,218106381,1936278538,1866604651,1713402991,1970039137,168650098,542066944,538976288,1398362912,1329877837,538976339,5462355,0,0,0,0,-1437270016]},{"sector":2,"length":512,"pattern":0,"data":[67108861,1610940480,8390400,184590345,-536018752,16781056,335540241,1611989312,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-265485632,-1036289,872411185,1614151664,58734339,990093369,-268500032,67124995,1124343873,1615135808,76545796,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,101711621,-16375711,1617233487,110100230,1795600383,-529725760,117468934,1929850879,1618345968,125859591,2064097401,-528676928,134250247,-16244607,1619331151,142640904,-1962368887,-527628096,151031560,-1828118383,1620443120,159422217,-16146279,-526579249,167812873,-1559617375,-257619392,176203775,-1425366871,-525530432,185597706,-1291116367,1622477632,192984843,-1156865863,-524419088,201375499,-1022615359,1878985792,-997620,-15949623,-254997297,218157055,-754110465,1624637424,227540749,-603983655,-522383936,234938125,-485613343,1625624128,-989426,-351358977,-521335104,251719438,-201330447,1626672960,260110095,-82857985,-251850816,268500991,-15720191,1878986831,276891408,185639177,-519237439,286261008,319889681,65521]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[67108861,1610940480,8390400,184590345,-536018752,16781056,335540241,1611989312,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-265485632,-1036289,872411185,1614151664,58734339,990093369,-268500032,67124995,1124343873,1615135808,76545796,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,101711621,-16375711,1617233487,110100230,1795600383,-529725760,117468934,1929850879,1618345968,125859591,2064097401,-528676928,134250247,-16244607,1619331151,142640904,-1962368887,-527628096,151031560,-1828118383,1620443120,159422217,-16146279,-526579249,167812873,-1559617375,-257619392,176203775,-1425366871,-525530432,185597706,-1291116367,1622477632,192984843,-1156865863,-524419088,201375499,-1022615359,1878985792,-997620,-15949623,-254997297,218157055,-754110465,1624637424,227540749,-603983655,-522383936,234938125,-485613343,1625624128,-989426,-351358977,-521335104,251719438,-201330447,1626672960,260110095,-82857985,-251850816,268500991,-15720191,1878986831,276891408,185639177,-519237439,286261008,319889681,65521]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"data":[538988361,538976288,659773779,0,0,1610612736,134375,16138,1329877837,538976339,659773779,0,0,1610612736,1182951,28480,1230196289,538976288,542333267,0,0,1610612736,3017959,1651,1162891329,538985550,541937475,0,0,1610612736,3149031,1725,1230197569,538988103,541937475,0,0,1610612736,3280103,1523,1381258305,538985033,541415493,0,0,1610612736,3411175,8234,1145784387,538987347,541415493,0,0,1610612736,4000999,9680,1296912195,541347393,541937475,0,0,1610612736,4656359,23612,1263749444,1347243843,541415493,0,0,1610612736,6229223,3808,1263749444,1498435395,541415493,0,0,1610612736,6491367,4096,1447645764,538989125,542333267,0,0,1610612736,6753511,1102,1229734981,538976334,541415493,0,0,1610612736,6884583,7356,843405381,542001474,541415493,0,0,1610612736,7408871,3050,538985286,538976288,541415493,0,0,1610612736,7605479,14558,1397310534,538976331,541415493,0,0,1610612736,8588519,16830,1145981254,538976288,541415493,0,0,1610612736,9702631,6403]},{"sector":7,"length":512,"data":[1297239878,538989633,541415493,0,0,1610612736,10161383,11005,1178686023,1279410516,541415493,0,0,1610612736,10882279,8210,1346458183,1396918600,541415493,0,0,1610612736,11472103,13170,1313427274,538976288,541415493,0,0,1610612736,12324071,9012,1113146699,538990148,541415493,0,0,1610612736,12913895,2886,1113146699,538989126,541415493,0,0,1610612736,13110503,2948,1113146699,538989127,541415493,0,0,1610612736,13307111,2940,1113146699,538989641,541415493,0,0,1610612736,13503719,2892,1113146699,538988627,541415493,0,0,1610612736,13700327,2983,1113146699,538987349,541415493,0,0,1610612736,13896935,2886,1161969996,538976332,541415493,0,0,1610612736,14093543,2750,1162104653,538976288,541415493,0,0,1610612736,14290151,13928,1163022157,538976288,541937475,0,0,1610612736,15207655,282,1313428048,538976340,541415493,0,0,1610612736,15273191,8824,1145913682,1163282770,542333267,0,0,1610612736,15863015,6462,1329808722,542262614,541415493,0,0,1610612736,16321767,4145]},{"sector":8,"length":512,"pattern":0,"data":[1280329042,541410113,541415493,0,0,1610612736,16649447,4852,1414680403,538976288,541415493,0,0,1610612736,16977127,1898,1396856147,538976340,541415493,0,0,1610612736,17108199,9898,542333267,538976288,541937475,0,0,1610612736,17763559,4607]},{"sector":9,"length":512,"pattern":0,"data":[]}],[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"data":[2630633,0,0,0,0,402653184,257302581,21958648,21697798,23462246,350950644,23462246,570818895,348135951,23462246,436666726,23462246,501088614,1711939074,1711367681,-989769983,1712058379,1259090945,1712081676,23464449,23462246,211157327,23465150,218041591,216075519,1711367689,1325491713,1259257345,1711367681,1427002625,23468046,23462246,22872399,23462219,225706342,227413364,23462246,23462246,230556006,23462246,23465474,23462246,21954895,0,-1993474048,771801118,12715660,1253988043,1447029504,-339725744,-1336912380,6405633,1347826155,384548915,-1070444458,250282420,28332118,116064948,45109334,-1916927052,646458880,199953779,7913046,-1101658901,1364197399,508909394,-1574022394,-986840892,-1979662306,1737097543,307202829,-1760274549,771901322,326566970,65065368,2143590384,-65073650,-1274977025,-1340478717,516238851,1328087232,-343821294,-1071725301,-1983892736,28578375,-1071725266,55019776,1562314587,1482250847,1448135518,246699351,281872307,1482579805,378220239,12779716,0,0,-1761607680,-687745279,1,1659129856,108298408,788475480,106234273,-1727623634,780873217,28311967,4621862,1114964028,-1624341714,-1993996287,-1943666074,-980745130,107907878,4602150,-1064553099,-443821938,520040092,-326434399,7244582,72781350,40274726,4638246]},{"sector":5,"length":512,"data":[780742144,1560740255,20762456,-2044328844,-1008205754,783805190,26947131,-393481102,4638246,15461123,1342177280,-1909586347,771856646,27209355,-2044329552,3932230,-2094120331,134324014,40274214,72780838,-1960393333,958793326,896860230,-795950964,782034315,36118271,-1960383349,-1910112146,-1960442794,-970587546,771752006,27209353,-816292601,74711356,4621862,-351909400,775630519,-193855077,-970528629,-352124858,235,-1878791424,1431306384,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962761954,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130,-1209334326,-1691469010,-1946914303,1187391208,-336919808,0,772166992,26805902,-1624339666,637644801,1006651014,776107264,27209347,1720264200,1452025346,650480388,637955723,1962952249,-1899983819,-1662678064,538902318,653036291,637562507,637818510,637691531,18118,-1624340178,1482491649,1946238159,1183196676,89188352,992917483,1912707886,652774388,50349766,60395,1431306240,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962698210,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130]},{"sector":6,"length":512,"data":[-1209334570,-1691469010,-1946914303,1187391208,-336919808,0,772166992,26805902,-1624339666,637644801,1006651014,776107264,27209347,1720264200,1452025346,650480388,637955723,1962952249,-1899983819,-1662678064,337575726,653036292,637562507,637818510,637691531,18118,-1624340178,1482491649,1946238159,1183196676,73197568,992917483,1912707886,652774388,50349766,60395,1431306240,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962635746,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130,-1209334814,-1691469010,-1946914303,1187391208,-336919808,0,772166992,26805902,-1624339666,637644801,1006651014,776107264,27209347,1720264200,1452025346,650480388,637955723,1962952249,-1899983819,-1662678064,136249134,653036293,637562507,637818510,637691531,18118,-1624340178,1482491649,1946238159,1183196676,57206784,992917483,1912707886,652774388,50349766,60395,1431306240,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962573282,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130,-1209335058,-1691469010,-1946914303,1187391208,-336919808,0]},{"sector":7,"length":512,"data":[772166992,26805902,-1624339666,637644801,1006651014,776107264,27209347,1720264200,1452025346,650480388,637955723,1962952249,-1899983819,-1662678064,-65077458,653036293,637562507,637818510,637691531,18118,-1624340178,1482491649,1946238159,1183196676,41216000,992917483,1912707886,652774388,50349766,60395,1431306240,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962510818,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130,-1209335302,-1691469010,-1946914303,1187391208,-336919808,0,772166992,26805902,-1624339666,637644801,1006651014,776107264,27209347,1720264200,1452025346,650480388,637955723,1962952249,-1899983819,-1662678064,-266404050,653036294,637562507,637818510,637691531,18118,-1624340178,1482491649,1946238159,1183196676,25225216,992917483,1912707886,652774388,50349766,60395,1431306240,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962448354,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130,-1209335546,-1691469010,-1946914303,1187391208,-336919808,0,772166992,26805902,-1624339666,637644801,1006651014,776107264]},{"sector":8,"length":512,"data":[27209347,1720264200,1452025346,650480388,637955723,1962952249,-1899983819,-1662678064,-467730642,653036295,637562507,637818510,637691531,18118,-1624340178,1482491649,1946238159,1183196676,9234432,992917483,1912707886,652774388,50349766,60395,1431306240,109981190,-1959919207,-1342070994,1183196673,1962949632,780348994,638058911,637691529,-1962649972,1854613189,1178150406,-1942653696,-1949266240,-13722395,-1962385890,1854613228,1452156416,1720395268,1187390978,-1993474048,117546798,1020221533,637826049,-402635130,-1209335790,-1691469010,-1946914303,1187391208,-336919808,-1657894098,2122327553,309657600,-2044329552,3932230,20714612,-2010774412,992870470,1946262318,149783302,-1329341461,-93133305,568786864,-829644314,616488590,607955977,129173620,281874100,-18091029,168626701,1413563911,540691521,1702129225,1818324594,1635013408,1176529763,1970039137,539780466,1953724755,1210084709,1702128737,168636004,262230052,-1851576832,1155329,26583854,771756961,-1593731165,-1557266411,102629785,1465012563,-930327210,-1959864178,771856174,26947209,771754168,26283659,-989601289,26452782,-343680885,1049308674,-1590820461,-503905899,12109963,109981184,-201588327,244002474,-970587759,637534278,83654,38192934,-953810944,1094,-1793195218,1586046465,797517318,-502741629,149783513,-1657894610,780742145,128975263,-1191546138,-661782528,-1962932034]},{"sector":9,"length":512,"data":[-1583141372,38046465,27501358,27591879,-1207808884,-661782528,-1962925890,665005572,38046466,36283182,36373703,-1207808884,-661782528,-1962924866,-1583141372,38046466,44278574,44369095,-1207808884,-661782528,-1962923842,547565060,38046467,52601646,52692167,-1207808884,-661782528,-1962922818,-1700581884,38046467,60597038,60687559,-1207808884,-661782528,-1962921794,346238468,38046468,68592430,68682951,-1207808884,-661782528,-1962920770,-1901908476,38046468,76587822,76678343,-1207808884,-661782528,-1962919746,144911876,38046469,84583214,84673735,-1207808884,-661782528,-1962819394,-2103235068,38046469,92578606,92669127,-1207808884,-661782528,-1962817346,-56414716,38046469,100573998,100664519,-1207808884,-661782528,-1962816322,1990405636,38046470,108569390,108659911,-1207808884,-661782528,-1962815298,-257741308,38046470,116564782,116655303,-1207808884,-661782528,-1962814274,1789079044,38046471,124560174,124650695,-1207808884,-661782528,-1962813250,-459067900,38046471,132555566,132646087,-1207808884,-661782528,-1962812226,1587752452,38046472,140550958,140641479,-1342026612,-76356057,-661731188,524683006,1516199517,520575833,207539032,-2146238352,13697222,542003011,538976288,-402201856,-492175354,-174659078,109494323,-1073083452,382539125,-260784117,1970405437,168865794,-2012973632,-1022639066,168543392,-1271827008,1964428545,624853020]}]],[[{"sector":1,"length":512,"data":[762576911,12590789,215031,-1205701628,-617463552,434836941,1975520144,-350827260,1912618447,279970421,12590789,-351451256,-182982244,-352320792,-1006188810,28573707,108271309,382592050,-473697045,92940002,-500576953,786492408,197396166,220450563,-2147483536,14090438,542659905,538976288,7343413,13008896,1329791191,538980685,-57312,-2147483536,14483654,843927363,538976288,300089344,855670504,168265408,-402426432,-492175355,-391451654,45413595,-990505779,-1341754354,-1796646133,1491649524,168266240,-401312320,-990511067,-1475382271,-401902560,1089011669,-385382400,1793720138,780532,1948304630,1948297461,-390403087,62190743,-389868339,130416671,-470881536,92939944,-192812985,348979636,1954596086,-351621116,-336928091,-194123548,-1014900085,1103301780,1073770510,-436156768,1314017280,538976288,1879918368,-962576384,1275128832,540103760,1495277600,1073770509,-201275744,1414548480,538976306,1879867936,-962576384,1275132928,540234832,1344282656,1342197760,20480,45813475,92939776,2091079,-220068491,1341382633,-370248373,183038915,-151489280,-327843644,-1259097879,839052034,-203036444,-990505011,-1341754104,29685250,-167137085,91562180,-990508368,102679304,1375177503,786117459,225648266,-1959861295,1527606159,1979696360,-2134575588,1952052961,-1159156715,-502303233,-986832934,687915038,1911099983,773806579,12590789,-384676055]},{"sector":2,"length":512,"data":[1053094743,-2144993088,1946488189,-213915389,239438374,327009318,512416563,-472838797,225152907,-1869585092,1161562996,-579497840,9276198,1804568832,-1920391667,636026880,1880036083,-964687872,1124142080,1262702412,2105380,93005312,1300964944,1435182594,911364,-855526150,1392938778,-169215218,-163794702,50378213,393263553,-503850357,1689307275,-939268106,-1224682877,-2083847424,-628424494,196723083,-1948125207,-136672317,-2084371487,-1957297966,868387824,375250,-661917193,-235420021,-796144757,-466435234,-628417843,96059787,-1948125440,-1144812600,-470351867,196727043,-1947076631,-138398760,-1177318415,-235470648,1919220352,1693089795,-774206731,-788483376,3979730,-91557385,-997789194,1403072080,-1420252402,-374619253,208728660,138412144,17957062,1880325124,65280,0,65280,512,25344,589824,0,0,0,1082132560,67504144,100794371,135201796,2011696128,114181,2704887,-2129169407,-16832155,688309806,1173880591,1946157353,-16884,1173824491,1962934569,-386518244,1752306333,1964247784,698363408,71645711,350750069,855829248,516173558,-1993998144,-167047561,-1175897480,114417,449700914,91537418,1392967470,1297427214,1968131355,1976699677,117321236,-2144465112,84879422,-30536334,-351328242,620397317,-1018297994,772996840,254346950,-243865089,-385373976,-118754973,-400192986,-160299822]},{"sector":3,"length":512,"pattern":0,"data":[1912610024,330033393,772196227,12590788,224888870,310348070,341806118,-135182359,338245,1371734388,-397212078,2104623248,1962998659,14542854,-393192981,1836187901,-2146258456,1963075709,-100892644,-1212455819,-1979249136,-1962934137,-1962933361,-1962932841,-352321121,-2134078930,-108988191,-1337756168,1074313985,-1174323015,-990510847,-33065726,-2084307264,-990500671,50885633,-26167351,-2000486714,2106067061,239962380,-2012191352,1569198405,357926931,1499072347,116123843,129038059,66186233,94400521,28901890,-386518528,1282539655,-2144412877,1762753598,-2144462732,-384730050,-2144464780,-351175618,-2144456843,-1877901762,-2127681675,1427339838,-1306561366,-1944700924,-1307148527,-1944700927,-1592886255,-1065021049,-14350476,-352160511,-1007140095,240590531,294108959,177546,441738,560523,697738,755082,892298,1021322,1354964831,838861497,649462,777520498,1505961866,62739907,1435108864,293387012,28837646,1930677506,199813128,-1292241803,555124991,689342479,1282246671,104589468,-1017313379]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7345101,33554432,33554943,23593024,150995456,256,0,1310740302,541412673,2105376,671096835,0,0,0,0,0,0,0,0,-1,1880366847,256,130818,1744846850,131073,65545,0,542068224,1162690894,538976288,2097920,40,0]},{"sector":5,"length":512,"data":[0,0,0,0,0,0,-256,342884351,131184,33489408,4194816,33554792,16779520,0,1330511872,1296125472,538976325,537067552,10240,0,0,0,0,0,0,0,-65536,-1,50360575,-16646144,1073872897,92160,589826,1,1308622848,1095639119,538985805,50339872,2621472,0,0,0,0,0,0,0,-16777216,-1,-150991384,76101,-1712782475,-327423508,-1960898989,940514622,225707333,-1962779253,-2082763203,-277479425,784555001,254609095,132841731,755418926,-402652401,57802903,-370383895,-2031555509,1358162688,693996371,1963049974,281278313,-144477184,1962942659,71666269,521033502,-1961943617,1032520285,-8135794,944403711,-277543867,-165061237,-411819837,-1994329216,526330205,-880747725,693963040,658407470,578027791,608075822,393544207,-1974446306,-527825595,-544276685,84149894,1599660090,-402426849,1482361722,526383555,145815787,263242745,771797225,254609094,-388003070,-361562314,772818314,-485544798,646524644,-225767617,1426321667,242563863,1390989431,243871487,1173819183,1962934569,211937286,-1962923544,-137219134,-1023536267,991332398,357403407,-235417037,1008109614,1034104335,799092239,8644623,-1023388696,73239123,689866798,-645113073]},{"sector":6,"length":512,"data":[-661733325,7878341,926320942,512503311,-1607594183,1149767478,172263940,254976558,650219014,36208000,78644597,118113414,1149632944,866266633,1963015183,-1911574526,883044057,1173865231,1962934569,23324709,786074704,772748192,254944906,926336302,71616015,155486217,33768646,-1911921528,197351642,-1963232064,-1040313523,990784046,1005400591,-1962773567,-1957605176,714945,-1054123943,-117251632,96328171,646589952,776998701,255661707,-825176368,993397294,-1947040241,915025610,1435111228,692451076,1953824769,253836928,-2146798337,141820668,1946483840,-1873417469,1912648424,692451177,141885441,555124782,1282246671,759071022,1946223375,-511682488,786707007,254740009,-2010200062,974076686,511054669,990299694,-1976696561,-32555978,360004294,-164493454,1023868718,914894351,-1007153348,555104814,973436175,-1602990995,-352308248,-1269802850,4843524,1625862003,100722699,-58717836,1476686976,-385922071,-970063807,-15783674,789482286,646655503,-471331009,1344193534,255107118,926336302,155486223,216538968,-986833408,-972081354,520161604,424015555,-855411328,-1258700013,1375398784,-997587186,256746030,-1090516807,-1359868090,121997870,1355020633,19482103,841184512,169528804,772109504,240322303,1968002363,1330461445,-970060684,993286,-1991420535,1492668237,195,0,400925486,100434076,-953283979,1074735622,190769153,-518062290]},{"sector":7,"length":512,"data":[-905743849,-2137260030,1198787068,1947335808,46832900,-1590780672,20715493,-466483851,1392509642,-408801711,-442421737,-402542569,781977133,400629503,-58718861,772764945,401018622,-1040316300,-939603970,1532615659,1476395722,400924974,50102523,-58695054,-2143980540,1114899964,1364350583,-1957343149,-775779092,-773664286,65196514,-4029997,-1979354367,1441466742,-2135626032,-533010902,-1863830670,11528454,118379270,-1676575557,-518062290,-905487593,1392902146,102651734,-1960900850,293388275,520511976,-588554657,-517013714,-997568489,-1979488630,1424492918,1484026374,33711656,50070220,1720341500,66879491,102638965,101603158,2092893983,-208972015,1527129576,28335711,-402106742,552076637,1914636038,103213886,-1157165485,28316028,-402106742,149423429,1913084678,1465261606,-74768626,-401507138,1583285742,-947889377,1183465730,-922814462,1451886964,85714952,-1962549528,1532714469,46815833,440599040,472456270,1461354242,1787932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251658240]},{"sector":8,"length":512,"data":[-16777216,788529151,12590788,653967848,135102336,-1977210251,1371409991,1965074457,425246211,976097060,-1743423740,54976721,1606690544,352267795,703136626,-417732121,-1964569367,-2010765243,1166737735,206121,38242598,640370059,839141257,1200105152,762678534,17298982,-1628959884,-173020934,1972178034,125799686,-218098759,-2117863260,20982093,34076198,1911227252,1200236176,675645441,71797542,640370057,771901323,253902464,620983552,52822013,692947712,-728703,1166655755,1200236073,27405830,692945178,1461584000,-165260538,393543943,69813751,-2130152448,-317083,-1181738773,2106392607,-1190728915,2106392595,125275398,520560134,1072211187,1594317571,1334519327,243871270,1702959615,654309161,1946421238,692945157,-108855288,-483821784,-1014803675,1639929640,-1960423399,92810759,38243110,771864552,-2097068664,-947714877,1491591172,-1007133857,-1007088464,17298982,-2144437900,18481726,-970036108,1704454,-164757072,17769990,1444830324,-661733325,7878341,926320942,512503311,1579093817,-1960098421,-461368499,-791883773,-2032071988,-1966568480,414450773,332224262,-1070390158,918935694,-1993473928,773456694,436543116,7880329,7997068,33998382,-1070464742,45089515,-2010773665,-2134640633,1946495101,106372696,19720275,653866216,771966859,638534307,771837835,255921800,-1084759670,-1959913121,-484835570,92876296,-536557693,96034808]},{"sector":9,"length":512,"data":[-1590800128,95689215,1606092558,23848985,1508380275,-371042047,1543209192,-1021354233,1594317657,124959,113651395,637800237,771966859,638533027,771835787,856636578,244002496,-617408001,870892430,-970013952,34548998,781191915,254609094,-1878922493,55020326,255697710,21465894,255631918,88574758,122653478,157271078,-1023409688,1059490094,-125573105,37650478,125042970,1609060688,-1101506055,-523167393,-268181295,-150994502,534853,-779681164,1179013713,772049454,772750242,100746378,-1003597738,638531382,-1962720120,-2010770617,1582826564,2287623,784501584,-401657949,56162748,-497460520,-111220537,-461323272,1019513351,738358532,-1974353151,8435912,-1017519917,34010670,997523738,-2144778761,-2127268864,-8443547,1141294638,2105561103,74777128,418055344,2105541040,276103464,2105786622,141889299,-970014466,1410286598,1435113396,-1978413820,-2010246299,-1022409434,-2147475480,410452474,19482103,504460544,4242259,-1866736754,-958791168,526082311,844153677,1477692900,554092078,516161295,777389655,254150390,1346204929,-1900006626,2016855512,914959872,-1943138505,521091358,918826502,1435176759,1418208787,268075780,-1976694412,638534670,-2147005304,1963075709,1153836549,1476854794,772035978,255932042,1108249390,-791818225,-840333619,1594318355,-269958369,71666422,-1959911666,940514622,125109317,539575799,-1962314496,1032520285,-336864370]}],[{"sector":1,"length":512,"data":[-873980437,113651446,-402583769,-970000643,993030,-1014047949,-2010710095,839189518,692451273,91488272,-33206902,516239041,1334313152,-483464959,784347728,436340358,427081738,772152918,436418245,-1064386509,2016839974,512501248,520552570,1358452830,777461331,253953734,-389903871,-970000798,992006,1173839730,1946157353,324897624,1059373450,-1019485134,-201962634,74834954,-922819702,180412800,1088697036,-729758206,356858624,861025654,358452178,-770968585,-745863307,24428555,1526368840,-141897730,-410977910,-2046381249,49009355,-757329208,182028003,526383311,-1966909349,-338755856,1881167348,335314944,-13761164,773775654,400635647,-482934994,922693143,-13754562,773799990,400627337,-484537298,512306711,-1943134402,119488518,-816177317,16824657,1504048124,139889347,-1073028046,1720323956,242679555,-518062290,1183816727,49934,0,855638016,785944256,524172996,4996745,5113484,1178501166,57999391,771802089,27344580,540297,657036,658424878,540969218,570854400,1053044224,1049166497,109838372,-1003618266,-1996283842,-1946146754,771762694,60440260,2899593,3016332,339657774,809404676,839289856,1053044224,1049166990,109838388,-1003618250,-1996158914,-1946142658,771766790,92421828,29376137,29492876,-62995410,-935425787,-905540607,1053044225,1049167478,109838796,-1003617842,-1996033986,-1946038210,771871238]},{"sector":2,"length":512,"pattern":0,"data":[124403396,30686857,30803596,-465648594,-666990329,-637105151,1053044225,1049167966,109838812,-1003617826,-1994440130,-1946131394,-855611898,-1977676263,-1089528794,-890691519,-753696017,1964254227,-1155438060,33,0,150765568,-13761164,1008749870,-821988616,58048522,1020264368,-402361087,785317902,12590729,-1039758290,-527243008,490128430,-2091514353,947191806,637814154,1963213880,-1277480160,693963024,693897510,-209641293,1562509311,1552623145,48463913,1560936242,106650409,1552623190,881534466,-1007959154,-661911714,38045990,-952334042,-1006633211,861347408,-1075867905,92995772,541958958,771900811,-98545757,518325703,-83735156,-883417249,67454346,1034038849,521018913,1394680254,-402650392,-466425045,526063309,-1073042237,245168756,-337617944,1225395700,1919251310,1768169588,1952803699,1713399156,1679848047,1702259058,540688672,543452769,1769108595,168650091,544829025,544826731,1852139639,1634038304,168655204,-2147483638,7405567,33571712,33554689,16,504,0,0,1310740302,541412673,2105376,671096835,0,0,0,0,0,0,0,0,-1,1895825407,4489472,65538,2,63488,0,0,542068224,1162690894,538976288,2097920,40]},{"sector":3,"length":512,"data":[-256,-941031425,440795122,-388016151,2105799358,57933850,-384152065,2105794376,-389873638,-164367643,1946249960,22669357,1380985205,380948618,1482298317,29236594,512372224,1563954985,1343190020,1558729297,1482250989,57996811,-389810637,-93131327,1929392104,-181147403,-5052221,-389873291,-93060841,1928177896,1501199,-167049358,1223224441,-183244800,-389849351,-167050747,1005064312,-401968639,-167050782,-286784395,-970013952,-15783674,117211331,1843983221,-387025665,309521769,1929367784,2029390601,-389855998,-369557497,-1914047347,1364664052,771870952,12590789,-1944682615,1599674439,-116411361,29092035,-1071725266,260016384,-1022277748,36259319,-2145618944,1946298493,-100892650,128979317,-1176498245,45746528,46433025,-1007846167,0,0,-1892810752,774052870,589170319,537300782,-13722589,1914902558,788475397,-2137251044,108267260,788475549,-771087588,-953223560,1074735622,190464,1381231339,-1959863670,839854614,1461604607,490652974,-31985,1563955572,151221508,1166747989,-1908569342,1609231320,1532647455,692451267,-2117926848,-4249243,692451267,1321402370,1095639119,538985805,1308631072,1095639119,538985805,1375739936,-2234288,-396948108,1918828562,11003914,-117454616,1522752088,50010,1397838342,240590416,-1088483833,-1682037849,833827,526361843,-1962195574,-503967411,772359427,-1960587613,78711877,-930354989]},{"sector":4,"length":512,"data":[-828297647,323848995,-235417037,868911682,360052690,-393547126,1928147688,1096010,-2144991056,1014235199,-448823258,-2077881996,292883271,-501169277,-13739543,-500969978,-336186433,-208971496,520509214,-1480653042,768291,-1070422797,1609970602,1543002143,-1022928295,1591405401,519367518,1364592215,-67096344,1582933235,-1021354233,1359370014,-67100440,12494579,-1107069952,123338751,1354964831,-1607535053,1161432876,1308718096,1354979576,521013022,-2094815298,213458119,-2134681600,175276282,1946352768,184320010,-13761164,1394556462,509039185,1085820934,-958886400,29702,981459584,1912632598,1946600967,585826560,-1044345773,-1023212309,-2124693362,-1711271965,7349728,1347947634,-1174397976,-387054602,-1973944211,-117410778,24503306,1595869176,-899983014,1134690306,1208403456,-58712064,-972721150,570443782,1059373450,-2013248350,-1979693778,115916993,-1962916190,81838274,168813696,-1566569276,1392902215,1881520282,1200301568,48808197,637551266,1527269258,1982237191,-1058766848,646504458,-1950154634,633379579,930414704,1881524378,-1188006656,-256245504,-201655295,116849517,1946288200,634427921,393347184,-1174403911,-201719312,-660931732,1962962981,1125056006,-1010207488,-352361112,-268423282,-352361112,-268423650,-352361112,-268423553,-352361112,-268423454,-352361112,-268423432,-352361112,-268423319,0,110042894,110044648,-392354326,-1980104685,-82947274]},{"sector":5,"length":512,"data":[-100613400,449642932,-399572997,1381060645,449700914,1347967322,-950906541,19387398,-855329792,-385649894,780664971,243804088,914892729,378021818,113715131,141268,1912687848,-737753232,-402652377,1701970154,668206791,-1528299520,666476544,-1203863400,58004519,755000325,78708816,-594873866,95795608,-727457289,-1732015577,192200715,-150901319,-737803807,-2146964697,36158014,117376118,243935188,-315480133,-737279671,-1173452249,1240281639,-1128341039,-1947139289,-737804028,-734622937,1532582439,-919354536,954978867,-855460720,-1997311462,-2010662866,-2010662642,-970474954,2603782,1912647912,9627869,350804082,-1204909568,-1190229465,-1170830809,-1156150745,-411703257,666411203,-1577050136,-1180686408,1501223,-1608009310,233318330,666542592,-400049248,-1147011068,-527776985,-1963978971,853575384,-754667036,-167071256,-1010629919,666386048,1949660960,-1203863538,745675047,666451584,-2145029504,-1725449922,1048583799,1997678522,-1170309097,276168743,666582656,-2146863311,2603838,-1007156618,1048626169,1998858168,-1187086320,158816551,666517120,-134056103,-1178338877,-1195704316,-1979217369,-267442720,376900156,-321852208,-321852208,-2146442112,108464892,-512407229,-1007041544,0,2031616,5898299,9896056,13893813,17891571,21889328,0,0,0,0,131072,16385,17301504,28674,35651584,65540,58697728]},{"sector":6,"length":512,"data":[131080,83885824,262160,58697728,131080,50331392,1073872900,791752704,942616625,872022068,-1579643200,-1557266356,-1557258434,1319180257,1084435968,-475845089,1275512599,-1944590336,-1593815538,-1557266332,1721835330,1151544832,1678165791,-1944107264,-83859954,-1071312435,-771313408,1019281128,772243201,254019326,-930430722,1971372790,868233986,-762381614,-83427140,512306769,-443930663,-18352,-1608073074,-1574043634,548415458,-2101468954,113698828,-401837890,1505625792,112519181,-401782850,901645998,111732749,-628174285,-1070349682,-1425722177,-943158101,1459645446,7250700,10749639,-1499266694,311040,-1827906117,-2085907541,-1416428345,-1416385645,378121107,378078464,915080452,512622712,582942842,768261,520529139,7866055,512492834,-2144468870,-47717826,113707900,34538795,86116038,-1324167713,1507906310,-686913234,378228775,-164463594,-568948434,95506727,727311059,-526176574,1840928807,-941978109,-1308620026,219057163,1549056,243843582,-893911015,11567,-788525307,-773271080,99144168,1879376128,369408,57522256,-1070350194,1050794126,104539648,91619351,1978662973,1007077130,-1945346816,1476410894,118365966,80213555,844636515,254911204,-787538782,541179872,1237252099,-1297767136,-855067520,-2012974573,841048598,-1088483630,372903709,57806620,855680233,-1237480503,-1272401152,1913900309,50102346,-914340491,570869250]},{"sector":7,"length":512,"data":[113639695,504303414,105992791,332204212,-956429198,914933246,243804131,-1047844892,1599756551,1917891359,618433044,1947155519,1946762252,-351816188,-352143866,-2147371518,-91610935,254033536,-33196798,552698063,-476004301,1011190055,-1993874272,1300838981,678791209,-2012916344,1569195133,608075819,309657871,254019270,281641218,692914432,-1023525493,-1023493653,-1191226391,92930047,263836210,-854018992,-2147126509,108265980,637978158,1048576271,2113937762,-1082084787,512368996,-253227215,-32607487,-2145295858,2187838,854267519,-172693360,560086656,-1978043902,-32558818,565559235,-924286542,-33131775,-350133746,-174790653,169960096,34043072,-1576062714,-1202712804,1048585704,1962682338,1090566206,365756595,1931990968,615757915,253902464,-1201113856,1048584710,1979785570,-1870861565,1965143480,-1871385853,-2145295688,992318,1944781684,560117904,-2138018325,2187838,12502900,-1094283536,-172021731,1973878015,-8617800,-940083968,-1290280698,-485585884,-1877415145,113647184,855707429,-1193767232,-1331485204,-1307669503,1347952385,-1900006626,5022168,588817198,771772065,-954000733,570444806,1309576227,1347952384,34550176,-1574870522,-1168634084,-628227219,83886125,-657391601,-388896559,161736913,109139968,7340041,1381048078,-919343821,45404723,-108848435,-2095942400,225771770,1946287491,12141843,-335617472,417879777,915012346,1593511507,253902464]},{"sector":8,"length":512,"data":[-402426624,-677313630,-389748697,-387706648,-13434780,-1576695258,-677304360,-391059417,-2011603574,-1977098978,1166739533,-653907689,518861351,-544276685,87694987,801814559,83886125,-657391601,-388896559,387281,7341313,-1427586930,714754,-555163790,59905,116786029,1967138781,-134512379,-75250929,-13384713,-1962933830,-1591222770,-1064425504,-383264863,-1061623547,-1145008633,28836352,-1175047678,332201985,-2128213646,1426325054,-117345110,508778435,-2012914296,-1070398379,1158217996,675661353,-586758651,-1269694425,-32256760,360024262,-2145160614,1300774881,-5052397,-1027925902,1065362947,638809089,1946435456,281248525,67304321,-369497227,642908453,637814667,637949835,638076675,1946834707,-586252283,643465255,-1996208245,-1960437947,1077741639,-1982631424,1380978245,857163147,-1963029806,-201911459,-1040266614,358451865,-858721289,-461321008,-1966339392,-225814296,28889226,-841272574,2104645651,54427942,1967278336,1048651292,541917189,-2128211083,838862910,638416174,671360,-351963856,-1873351906,138314022,1965961984,1048585972,1966080010,638118658,671360,652375346,1207964577,370576166,290818304,-1037311279,286690086,206932224,-355269455,-1977171413,-2013262578,-768407475,-235409782,1913648701,-586252283,1139490855,671989392,91620411,-351746429,105679607,668798472,-1962783605,1435042900,141395980,668796662,858289472,1272810203,-338438141]},{"sector":9,"length":512,"data":[-18644925,-338562165,-1014899197,-271580673,-1978565240,-2010653410,536353117,-1312596133,736809732,45304002,856194442,-2084371502,19726546,14320384,1166668791,869591825,1053044443,-8188131,-352094721,1460047956,677218854,1963326336,1166747172,-1960423410,-148499131,-930409627,-137219240,1959922673,-1993981951,520497989,-351898227,-2145448434,510920699,-37821487,-1926198482,330902909,-1527541760,-1960442017,-1960443299,-339505603,-768359515,-1960098421,-470336419,-147169909,893749731,33798984,-770968585,-1992294028,-789891003,16908800,7340544,50135760,33556736,0,65794,1610670082,522505,131087,33554432,33554690,94371952,150995961,512,-684801024,1362029102,-619804329,1220774695,65140552,-1960322810,2484432,-24906965,17200639,-349709554,-677293072,-619803865,-429922265,-610181285,-773814745,1509426144,-1957486909,-165158858,1076354310,-561112715,-288230517,141760651,-338564143,-338564143,268428161,-1899815074,-1948003874,-1021354465,397541815,-1548024341,773108224,797447816,222595630,-1952960212,-842822704,705303,200579,200768,200709,202181,661318,202738,4068,118359582,-1967251698,-930370257,-1951594013,-208621320,-1074598998,1723334706,128690945,49951,0,63721,0,0,150994944,32768,16777216,-65536,83887112,0,6044225,5242882,0]}]],[[{"sector":1,"length":512,"data":[0,0,0,0,0,0,0,57475112,57475097,57475144,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-67108864,-24381901,386829102,-1899459584,255506648,721961192,-1178497336,-372175045,-1207523853,-883949280,368942,-1590765426,-1064435703,-24381901,-212860743,918892197,-1959919605,-100657386,-795948916,-83801924,119471926,109852160,-1992949755,637535038,908084618,-1946125662,1125832,2138934,-400617954,-1709244112,7348436,-879952645,-1911493757,-1946799165,8436222,-1943624205,-1275054586,505531728,-1111875826,623163404,-4513331,-850873089,-850873311,6464289,520117923,420907574,1959922176,-1261765114,-400438002,521011546,838868128,868781028,-851528485,178977,567099060,-1158028733,45092052,-839303756,-402296031,334170765,113488,567099060,-1260876968,-1272853179,-1172189883,45092056,-1173711384,28314844,-1106604568,119406633,-5112181,-1431518722,-126500854,-1441943473,2625160,1376578746,-1258291269,-1272853176]},{"sector":2,"length":512,"data":[1914817864,-1262449084,-1960719031,387877867,734563328,298025944,762506027,-113442632,1114776013,-919349109,45666867,567146818,251999346,13796096,-388823887,-489485135,268812811,1925528320,158329091,567099060,-1157165478,1334575178,139430916,856444812,-112479040,-876994099,165144590,1053097707,-1977221117,-315482035,558729254,1370800522,-1696013066,540445446,-1980749056,637542966,-1961331319,1170679494,637534230,-1064421947,-1590231245,917176356,-1426053471,604438070,1371550464,-218087495,-97366,-1070397067,-1410137167,1494149977,-1421868872,-1934899573,1959111640,-18408,-1196708949,-492109822,113653441,-1019150300,12066574,-2011050697,-1174394602,12061920,567146813,300483442,2138370,234889891,143583263,738204832,843019781,1545505764,1578535680,54445312,75351296,1435049353,-1004597758,637557822,-64057,71665958,-470403661,100780171,112722012,1543897344,139388928,-1070335997,521054963,-1610071064,-466485219,6037131,6166155,212677,-1994760823,-1976689579,838868510,509446655,1053040398,-953810852,654311173,-1291565687,-154629323,1543897571,440320,6030849,50855912,1363259640,-67095111,-953767181,52037,-532297946,-953810944,57925,-2082151847,-16770498,113731701,131098,-1003610544,637535022,234909380,1586112031,-1195115008,567100424,930463755,-1977165005,-1006763938,-1207088198,1622754317,1914817800,1511951138,223518989]},{"sector":3,"length":512,"data":[12177971,-135137534,1976699875,47201541,113707382,196634,646975211,-15171965,-1004140940,-1377101714,1843943455,251606535,846463002,1053046302,-986316708,-1962933474,-1993993657,340232965,38111526,-1944944759,-953805753,16712773,521166731,907068291,6036993,837338347,1053046279,-1977221117,976625741,1929387790,243938821,-315490273,558729254,6201654,407210278,6070582,373655846,1370800522,-2098666250,100742660,-169344930,902112774,377340966,-1191316504,-661721088,104529328,712310782,1554063118,1286912,-1560256863,146276373,285606656,252611328,-387844352,100729925,-1175977890,156867078,521011312,-1962496024,-1593811426,-1064435614,1253365803,-1945755187,-1064417088,17221414,117442560,242334403,-385395480,-661979001,-768358093,-851311944,5808929,12112435,-1943941822,5808586,721678568,300581840,2102921,922563560,2102923,-1030825330,-1959341517,-1275045874,567146815,1364676764,-91546960,-1359870493,-1336999563,179350029,922364842,5783177,240672601,1052004383,-1655168563,-935656334,-524678796,113240076,-386041111,1994917182,-1963625981,57665760,1894320755,-400617729,-303364670,1967324288,106424338,1681720692,-385650176,446955351,-2132612352,57951228,1016080619,-400526001,460456765,175459900,28324788,567136394,1178387435,652740981,1006924291,-370052026,-58654941,-385649596,-880016937,915004302,109838454,-1645739912,-1547685115]},{"sector":4,"length":512,"data":[1587609607,631552,100688035,-1898542305,1023457472,1914818041,1389923146,-768358093,-113114440,141763021,567099060,871102810,-2097148155,78708946,212986067,-1039408429,-939277940,992872306,1912611342,90958083,-851528614,-1899262943,6208451,1270088624,505531897,1931415047,98297862,117385961,478815830,57989898,653716294,102761670,-1157165482,1038614534,572165,1577400296,312863,1956716302,386284288,1577349632,-976819449,-1962932458,80118770,54445102,-1459320064,544505856,-1459302936,141819905,206932262,241011750,1946159273,1435051528,1569465864,12445962,7446574,108380170,-369098824,-1952972588,653560520,-1977592438,-2132802846,175512316,532291342,90433551,-2081890581,1157637636,100675104,-986840966,771782174,208580,273058598,991923027,242440967,-1732638882,244693774,-385540376,-1004077465,-2094661522,1962875006,1858348550,787737368,637557921,773342857,637558433,773473929,6041284,1543930670,971513856,1187456516,654311192,-15251770,1128478603,5671206,567104436,1377698027,118932782,1451828736,1586243090,1109350932,-2082289922,-639099122,1053044474,-1960443901,-1960435123,-986831787,637536054,639792521,-1960551028,128134660,-1995667200,123601492,-385649600,-722862419,1375502589,854071925,-1962118140,956283096,-838860870,-1173982431,-2098721057,-38409980,1967586432,68413462,1912603965,16792843,480380531,-39982848,-2130900247]},{"sector":5,"length":512,"data":[360008956,1630281740,-1057092494,108468796,-385867870,-253100669,1358725372,1156059253,-386698751,619184389,-370445823,-58655381,-969116341,738216198,-972831512,18694,1912604733,4209959,262349431,11790336,-353887630,-386501630,275907493,1912610877,33570059,295896695,-47322880,-2130928919,58021884,-2130930967,58016252,-2130933015,729109500,2688710,216907520,-385923704,-1073086351,540826484,92800370,-957289657,1592262661,1963604992,5761027,-2130911511,980769020,4785862,54781996,4785862,1026061312,594739456,-402645598,460455989,1946316008,52947190,4002162,973894401,1996496134,2007558,-369316119,417987611,378620,-402642497,540803081,92840306,1375005511,5770891,915084003,-1977221030,1477377796,1510407936,-1017513984,100396025,-657391601,-388896559,516155601,1381061456,512416563,-1006760425,1270488846,-1337674739,-1324829427,1512164672,525884249,1325844419,-973058035,34425862,223151815,113704960,3608,521019075,578030908,1047792188,276176956,57945916,-399381511,512294970,124915224,1929346280,-337777915,116887583,265752,-336002187,236495123,-1560280283,113708365,3441,10479864,117424927,251592792,-689242022,1929332968,1021256785,1011577409,105346906,243926798,11865705,-233936193,913639342,-754974280,404655072,-1948775666,8169928,384311412,1008562943,-400984774,777256717,4785862,33548320]},{"sector":6,"length":512,"data":[1225180718,-396689408,-1007157242,-1007036109,236457605,-1040764043,91488260,-351397982,1086453544,-1576700928,501943628,427081739,573943,1336083828,-150017267,1946161345,236299013,329450475,113506318,-617412850,223092362,1962998656,2668807,223284873,1505682385,-1087337714,532221266,-1527514112,403109639,1946161166,236298502,-150118493,537794566,-1589742592,1638075923,-20411635,224043465,-522979119,1520642930,33128461,45150387,512366455,292818268,780796336,-41939636,-1291553792,-33362960,1545504971,223650317,-1007041544,1477348142,-386407680,-164429669,1508441739,1914715136,1465274873,-1102188917,11865337,210435467,-217128122,-251420762,-260723554,-346464673,1499356933,-391488848,921174052,-386370304,-391512028,1017774104,1022916384,649819146,16729542,-1442838552,-126547396,652455147,1174702630,518243145,1174702630,256073,1019475060,1023112224,1022850057,1022587965,1022325804,777634619,5783177,-1993411021,-1023387082,1929224424,1963605242,-40376073,508973507,-164421882,1918975148,2004499465,-2011157499,-253558972,-1017553377,1956720208,1587752448,1923165696,1554198016,777017344,-402629471,19856765,771776006,6031047,-1590820864,992870494,1929388550,-1161603070,521015032,-385834776,-1909524826,771754270,466435,-13760629,771753782,-1157625949,-13762460,771753758,460431,113651395,855638089,751040960,1007055408,-134056183,868481475]},{"sector":7,"length":512,"data":[-1054501,1402200946,-150992197,-1023255581,1912657024,-353856556,774075132,4785722,792466036,208965776,141822524,74714428,-847921142,1476853550,251604480,-1014300582,247709707,-1158509817,-1782903111,-1273033202,639749385,-771091318,45352820,-347725363,-1261204494,-1021194999,1929387240,215005703,-1023404824,-1070344053,567100596,1971372790,-851528462,-1259934943,567146813,113542083,1515805528,526212958,431247367,-816307763,5002574,5132099,5788993,5132880,1313817436,776423750,5462355,1297040220,1145979213,1297040174,1430390528,1380271686,1107640915,1262568786,1162085955,1162037590,1229325636,1179862348,1111705092,1275680851,1146377025,1163282770,1380190284,1095784009,89148754,1128354899,1124551499,1414419791,89217362,1279608915,21324,1342177282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33554432,2304,33554432,33554690,47186032,150995709,512,0]},{"sector":8,"length":512,"pattern":0,"data":[65794,1610670082,522505,131087,0,16908800,7340544,66651552,33556736,0,789453312,1141785614,1141785614,1141785614,1212548878,1128551507,1426722126,1667592814,1768843119,543450490,1835888483,543452769,1126198889,1229344335,1498623559,604638547,1699940877,1919906915,2053731104,1869881445,1634476143,543516530,1713401449,543517801,1107954980,1864393825,1768759410,1852404595,1126441063,1634561391,1226859630,1919251566,1952805488,218133093,1986939146,1684630625,1970234144,2037544046,1685021472,604638565,1866664461,1734960750,1952543349,544108393,544173940,1735549292,1868963941,1701650546,2037542765,220465677,1869566986,1851878688,1816273017,543908719,1769366852,225666403,9226]},{"sector":9,"length":512,"pattern":0,"data":[7065321,1430388736,8263,0,0,-1,201841,-65535,65535,0,9961472,0,0,8388608,0,0,0,0,0,348553220,1431180492,538976332,-1879039968,5720,5724,5724,5720,5720,5720,5720,5720,5724,5720,5720,5720,5724,5720,5720,-1,5]}],[{"sector":1,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,788725760,536936448,538976288,538976288,538976288,-65003488,203228188,1905693,36864,255,0,8388608,0,0,0,0,0,0,0,-1879048192,0,65535,1,0,0,0,0,0,0,0,0,0,0,0,0,917504,5,0,0,862,1,0,253361920]},{"sector":2,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1779863086,646655492,-1527577496,378087164,915079900,-1943666650,637544454,2885260,4591242,-1943605966,-970581436,-2080434364,-220061498,639692419,-15055673,-541128961,-773861013,-772812305,62950639,868257479,973507839,943622400,1170679296,637599492,-64057,38127398,101187583,-231306430,376629250,-559862265,-559733246,113649154,1207960400,2401062,-958886370,1509949446,67271,723910656,-150801914,61032664,-1631641856,243712,2539435,203,0,0,0,0,0,0,0,0,0,-65536]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1496837117,-1513577016,471836104,505355807,522067743,20455198,50542850,70911234,84017936,50463291,33752124,87885060,67895811,100744709,84279871,84279872,33751873,100811269,50610945,1141178626,17633029,38077702,38142982,21431302,117590031,117590280,117656073,139134985,67240195,84412939,33751886,302075666,51446870,39257346,22544646,50616833,1527055362,33771525,73139460,556007686,67568127,50856703,50856706,67175426,50529537,67569407,84346625,67176453,67569925,67570181,50924293,67570689,67702017,50859777,50532354,51187970,50860546,51138562,34217986,34218242,67195906,50550527,67195393,50934274,51139843,50943747,67982081,67183617,-251,118166527,84153346,117773569,84154111,67835649,84154370,17111297,118168066,67836674,117578754,67443972,67444479,67969023,34218239,34218242,118170114,50934274,67576579,67183617,84803333,353637375,421009174,488381210,522133278,912532514,-719336354,-1541372129,1059105312,471821087]},{"sector":7,"length":512,"data":[1243430429,-937378275,-1424314592,1881650457,1210627105,-1608446679,-2044156632,-1239296472,-1692817899,974796825,-1240091110,-1239777771,-1356289515,-182378200,1612303648,-1775723749,-98947800,924260118,-317241321,-820410600,-2141332968,1712537626,1545190682,-199629543,-987005672,2099970346,929611369,-1100518809,-1016475801,-1586918809,-1704429013,-1138066840,-1252009634,307861599,-1151758754,875172649,1913862675,-400889574,-182758888,-110613655,1478101599,-580241302,-2141185942,-681440926,974501478,1729476115,-1122604269,378742286,433731192,1342314128,1381965783,925325189,1803049265,874066992,1464604559,1466259321,477895768,1478564976,1635670282,348152640,1727357677,415569968,473307172,1632330286,367027927,479937978,100801674,525324,268583040,18350852,603979776,0,3014700,3801133,-1778384384,738197526,2889728,10223617,738197504,754986496,14848,378929410,2883584,16789784,5063680,3014656,3014700,33554478,1480193,402668288,65569,70,738205696,973090560,16909056,5782,571998267,-1644166912,0,2883630,3801135,-1778318845,989855766,2562048,1766588417,771763828,788540416,16792064,378929408,3866624,33566232,1262834432,3014656,2949164,33685550,1485825,402668288,65597,36,771763200,973090048,16908288,5782,756547628,1140850944,21067,2883630,3014703]},{"sector":8,"length":512,"data":[-1291779581,989855766,2693120,1917190145,738197504,771763712,33566208,378929410,2883584,16789272,5393152,3014656,3080236,33685550,1487617,402668288,65567,159,738209280,973090048,16908288,5782,538443835,1174405376,0,2883616,3801135,-1778318845,989855766,23468032,1263337473,536870912,754985984,50346496,378929410,3866624,17026072,39168,2883584,3080238,33685562,1485569,402664448,131074,36,738205696,973090048,16909056,5845,286785595,603980035,0,2883630,3801135,-1426062589,989855766,23009280,2359297,771751936,788540416,67123712,381944066,3866624,24,9216,2883584,2949166,33554490,1480192,-16765952,1766066701,1701079414,1702260512,1869375090,319425911,-1650680576,-1583309154,-1515936862,-1431787609,1095080576,-2138095218,1229276485,-1886500535,1335005840,1431654297,-1684367015,-1616994916,1431259457,-1482250843,-1886348672,-2138664562,-1953330807,-1886480244,-1936551536,-1651070567,-1684366952,-1616994916,-1767928954,1163215781,-2042543807,1162167619,1099778377,1162167695,1430865231,1431279701,1431674011,-1566465889,-1499093853,1788327,1396395328,1027423804,1381124927,495272257,522722975,506470184,505224980,517545638,516890284,514924209,83894064,84103250,370021920,-2045898995,-2029681148,-2046130424,-167410169,-151587082,-151587082]},{"sector":9,"length":512,"data":[-151587088,-151587082,-151587082,-151587082,-151587082,-118032650,-2305,-1,-185270273,-590081,-1,-1,-185273089,-2828,-1,-1,-1,-1,-1,-1,-151584769,-10,-1,-1,-1,-1,-1,-1,-184549377,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,16777215,0,0,0,0,0,0,0,0,1259543808,1622412128,1619222604,1620402318,1626693788,1629053209,1629970713,-568424146,-1959866622,-821895650,108380170,-451507666,37539586,192157303,31621202,-451508178,-2133894654,-2043805214,-821893866,785383344,-821426526,619380916,1489961136,110046808,-90438370,922693200,976094494,1997401358,-337540377,641347079,-596177426,1951530112,1660715169,-58680204,-2137951152,-1737214980,1952775296,16640186,2115931182,512306693,-880016004,117365646,-1070398769,-1593644381,-391970082,85893378,-1593473885,-2103245536,-1991223291,-1945821658,-1912266730,-1996300770,-1946145242,771764246,84739782,-1899262976,117882067,-1899262725]}]],[[{"sector":1,"length":512,"data":[-1996541221,-972881090,16974854,49823368,49692296,-472785782,1961102076,1509720086,-58704524,-2146666740,183870,112996725,-1557337334,113640166,-973012271,183814,47187654,-2102112001,-967300403,197638,-167213380,-16587514,-397408908,777534385,233807755,92020359,92151438,2081881910,-30475771,771936014,85989006,505842478,-1997763835,-1590820794,-1557265020,-1590819554,-1557265022,31982880,-1892757760,1476755462,1582979419,119496031,-2144927954,110046725,503711104,1381390165,777016145,92284671,506905902,-2128166139,16778063,117323467,-50658609,-400615906,1931411602,-1342000123,-953761023,-57786,374363678,56671775,75498632,21284673,12058682,718141443,1914658392,-952712447,839045638,788185856,85989004,505841966,-1139339771,-402257786,443744171,1948778728,118359573,112845874,252362496,74821362,90540582,-100140793,-821101002,378418690,-1959918304,-83550682,-1943078197,772087830,85862025,-2034493682,1760036360,-388533505,-1142216728,1912669264,1299834883,-996773288,637876782,4409079,-955747200,839045638,650377472,-1991938364,-1945820114,-1023072762,-2113985048,-125340,-466480661,-402625048,333971483,374112767,-1980170239,-1070415100,920924867,-402468189,-5242877,431904451,1048589837,1946157814,113718794,5440210,-401794626,-1017249790,374558750,-769750241,-12801022,-1019606668,-964491916,-1376589053,1962933376,-735672316]},{"sector":2,"length":512,"data":[1962884098,47555075,1962884268,47292931,-1021355941,1397839390,-761061610,210681346,512424074,1017971431,973894911,-2046004029,65286880,-1963987984,-1978930233,-1393741108,41207610,-466421278,526276955,112835,-788085202,-1007091454,-872418584,-2130981896,175444476,57982986,-889199896,-58720254,-2131659760,24384252,922693327,-13758791,1343142710,-1947432107,-396554682,-655686105,-1329389810,-2143501313,1019937139,739014567,-1152180608,521015612,-887137321,-428506564,1019973808,1021276827,753956777,-1152180581,-487911123,-478698436,-546144196,1394507820,-351181637,1921006801,2007514322,511716558,294239059,870891755,1460580614,-233720641,-506372178,-1493177973,521540034,-1593788440,512426750,-1209531652,106727933,-1995981819,-1607072700,-1329396990,-1125547521,-2080935417,309819385,-294324726,-361442806,1997340288,-400615931,381878539,8054815,-1979874840,1284048468,-1010814460,-41877584,-2131201256,-210551559,1933377152,1694138606,1381099891,1488658198,440579,-1031024077,832038995,775341342,829155328,-1108845793,1543933745,1510379267,775341315,827844608,381927474,-402239201,-804847584,-773730079,-773729823,183423201,-1580102706,78709501,-523116334,-66712999,1398194946,-1190963013,-768409594,1122550411,918887985,384303150,1583030065,-1962714975,-1962714610,990075926,1946353670,-1422508588,10698099,1381062147,-1246113229,-772671739,-773795360,-1094153248,602410106]},{"sector":3,"length":512,"data":[1944703232,-926777084,2418688,-2101476943,1107980,50138760,-65632190,9627650,-1017226918,1001128116,737702608,-152354352,50204296,-1341931018,-33393380,209953472,-988989,-2118400374,-1036331252,-260898896,-1979720216,-788333546,-1192635927,-628423243,243982839,-511704322,209370627,-506343285,-1979690264,209895119,4843593,55167882,10719953,1347638787,-1190963013,-768409594,-397163893,-987877263,-402641354,1528770629,-1892640792,503535622,3028677,523252968,10575451,-1177406717,1077936135,378073591,-1070464254,-486492989,-805065477,381942754,1411287839,1376684803,209232131,-1979981336,1284047452,-1023112956,44933174,906044611,-1023234654,74776380,-13444982,1599211294,-8184042,189166847,-1962117669,-1962715594,1284177500,-400430083,477298695,-2115435856,253148924,1979661484,-1966868222,-667177528,-315426700,-320081661,-212341454,-1943642204,2078807117,39619067,1273611147,-3020548,45089907,914999531,-320142506,-1031135466,1917422312,454289432,-143469689,1340662834,106203643,-1996206967,76087900,-401624893,-4654025,921168895,47849099,-603026634,-80943102,-1996333943,918753356,47847049,-601977802,-1607023870,-1966931228,-390005054,74598692,48538166,4694070,1763523,-400571354,1552546554,272927746,714947,394864378,39816230,-617364485,-661994610,-472783919,1008670403,1946907137,1912814607,-1340705776,378192895,132842159,45029000]},{"sector":4,"length":512,"data":[-385895741,1418328762,521585414,-1006447967,-1962748354,-1979526114,-402468562,2089417378,272927754,-1996333943,1810433100,884336891,-91428778,-1022868337,521535666,-1394031990,1913630792,439609374,646510450,817825072,-387698171,1284110954,106727684,-1945994103,-373092788,1474886483,38062074,1418461903,1273545488,38062074,1418461222,11715344,-1031135466,1917347560,977191971,1173825029,1971322947,40167447,-398801944,208798310,-1980097048,1150026348,-1010814450,381943728,-385896417,585630278,-17602,2104969,1973897,3684037,-1994326088,885326916,158659387,-989576055,1978874676,35973358,-1191182408,801968416,-2080535613,-1414724921,-22228853,-1057051960,27845682,-989985163,-152311600,-1968520054,-1431525928,-1414662006,-355269199,-1950219448,-137219126,1204325361,648848711,-1391049080,652736170,-1425652221,-1993948925,723913542,-654897850,-388772982,1183393344,1187456525,637534236,-14793017,-970013697,-16560122,-568422866,183195138,-1896260120,922686556,-1030881278,-24381901,-218070855,116797093,1962869584,857673291,1358299,1172105222,628293552,88471334,494211072,40208934,-2131696512,292843772,87441033,87557772,-401146648,-1977203299,-2010773755,-498919353,-568423477,512304642,109838358,-611450146,1342621230,861405187,-1898344759,8961730,-1191179585,-1510801402,172838,-12729813,-1207732721,271388671,834304,78764075,-628170541,-1996487005]},{"sector":5,"length":512,"data":[-956299234,-855638010,84330016,113744384,567083088,5375686,872859595,-1946150912,-956287458,335557126,939968256,-939524352,-16762362,1465304063,870886480,868411392,-1977163638,669533957,867624960,74833978,-445267958,-1017225384,334015568,866314240,1975519914,1354979572,-1073042772,-1017578891,24338748,2004499651,-1008729086,-4632489,-222285057,1490155438,132694879,-1251328,-1023409688,119473694,918812551,84739830,1375172095,470715190,1359536896,-18691789,1509483097,-326412861,106859347,941591086,393413726,839147146,1139003903,772169219,1586044811,-2091033850,1539507396,442973,977191982,-31995,-148502156,-2147466427,-171769483,1173825219,-1015021563,-2147370813,-1017632051,-2130593597,-1017632051,-2147305277,-1017632051,-2130528061,-1017632051,-1998039522,907244851,168181376,-1274710784,705423365,718111924,-466425621,1579811048,-225721569,1948531884,42985720,-796068117,-225722226,179170610,-1964608320,989694684,-2147125565,41159992,-796205686,-1482672566,-1465764351,-1447078399,780678657,-41286380,-1679231606,1963605247,-7018493,-109836740,-1291437514,1011053585,1010201727,1009939464,1016107031,1016107029,1009939469,910455818,296879674,-231052428,-22406797,45541574,339640374,-1049296891,-1116472518,-339214778,-1335759944,33810439,233418731,-85415175,1971871489,516357887,-1106829562,-829816407,-389831437,-1846869693,-1921714678,-352306200,3598583]},{"sector":6,"length":512,"data":[376763914,-12219866,242364476,-311019204,1631330316,2050753650,1760158582,-396578561,-396492363,-1607073521,568852904,-12982014,-385874968,-167051441,1357386100,92939776,124985404,326371644,905987560,85212800,177960192,-23628545,1472417487,-829751985,-1286397776,-1374756089,-2144990858,1946747261,-489947639,506083058,-567672408,-511653118,1599863815,132695412,-335814144,1338965694,1122502832,-400510975,145752381,906049769,-384715872,-880083188,132894506,-352307992,906080514,85198534,1962031616,1962621455,-391468021,-939654740,-404568322,989771497,-17206021,-1393998137,518398,-117247741,-385965335,976682550,1964094214,-30611450,-1970266389,1959733963,343165207,1460084230,-230162805,1963417518,47314439,-1009833269,-26089123,-1092075344,106389248,-20715490,-1973549281,-17045026,337049142,-27924219,2112428720,-401755906,179306653,-1979672343,1979661506,1053046338,-617413346,1914505960,-402541378,192227301,640757736,1075203456,650362930,-1089051264,1395728360,-387392717,-294495460,-1024982604,-1274645209,-349516412,-387697945,1405298613,-402652741,460463307,-2130355061,-2122284829,1962967291,1556422160,71824903,91496208,1542990285,518339,-1528235797,1358262812,-840432661,-402410448,-160159879,-402475944,-1007147151,1358777832,1476396264,1019382467,1012888096,906327167,27723518,-29993442,906145286,44967552,1342534915,1479586536,1593806056,116799007]},{"sector":7,"length":512,"data":[1962869420,1444828111,-402652741,611458123,-150643573,1971323075,-2134640869,-1156221952,887619588,-150113764,134219076,-969537164,175110,-352287767,222072958,138158196,154937460,-1607033227,-133430873,-1974347530,-486492728,-400510969,-102563971,-969489575,108294,-369132055,-29950099,-385767666,540868466,154988915,-1336873612,-11016098,-398455720,-389808303,62599199,466216960,65795186,-1271925784,648013825,-466422156,-1020880664,244563,-1152187157,-1031143420,804644944,-397009320,526319352,-387398821,1946202159,-1006695176,-617393584,1914407656,-402344955,1482303077,20766858,104600436,121376628,138152820,171706228,11535220,82442947,85256435,-1996167960,1418207556,243041059,-2013039808,-1444338572,56672244,1916948968,-400615927,41028980,-1729499925,82372852,503537855,1111025750,-294510754,521557534,1578152168,-1948028385,-1949856813,-620032420,-2135227531,-1946645760,-137219134,-947171085,-896797705,84337498,-763166719,558139648,170087560,-2001636106,-1393875852,-1746354126,-1979485180,-1573454012,15205638,-387223036,141904358,84320310,71665702,638862475,-1961933431,-1993992636,1149963589,1166616080,306481937,323324198,88965414,521551872,-1005272600,-1677380034,-16386266,1342666239,-622309968,1939691522,1946565793,-385699683,870904803,76173828,-1089419645,889127904,76043806,2011747979,-1893769663,443701764,1245088566,914961925,1623131468]},{"sector":8,"length":512,"data":[1096869891,300419186,-385650162,-1007946840,910083126,-86120443,-1960437388,1149836613,643237402,-1994818108,1150033020,-1291362530,-397481088,57952566,646988523,-2147138057,640120064,-1994570357,-1977213628,1149771589,1166747167,457476363,-1960443725,-1071381179,38079014,-350600056,-1960407016,1149830981,1166747162,474253577,-555007821,-2078343370,1166747136,171910149,423921859,922371469,4195883,-201968205,907560072,1073746081,356878630,364578421,387072,1090358,-2147436349,-1003596026,637550654,-1929097845,690357885,637761281,-947715703,1609818677,25765383,312553155,-1993981952,108336965,-402647109,-1557200949,-389873646,-1959857729,855655470,16614336,-1152560524,-208928769,1077855278,1300964864,108891396,4031270,-2094659980,91619133,1793849227,1173825168,1971322885,1212475397,-1960439692,-801433771,-751105934,-628423565,-947652725,-2083659211,141885438,-352237683,1894513068,-1946157125,1053044467,-1960443840,2106393677,1173825030,1971322885,1208281093,958793332,208803653,358431014,-141883789,358452006,-499791997,-97316,-24394892,910068014,109850117,-148503240,-2147482299,-806877835,370701383,910083103,1032005125,-401837056,-277671222,-344717764,839248889,15198400,787536872,87441092,-1329397390,1149944611,1954588697,1201203228,12061045,170904849,772568256,-2147293535,57938172,-117323032,1199368387,-152507019,653619966,33703367,-1740692352]},{"sector":9,"length":512,"data":[-1975517171,-376825268,180413824,266436805,38635558,88443174,48800046,826640678,1460033054,-423688426,571652,1072213062,-102585608,113647382,-401210106,123675004,426909534,92112934,71681574,918892032,-1993997006,-1943664779,-339539619,1166747278,4138245,-1343728098,1971922493,1569465863,1914658313,491031526,491096358,639321227,638272905,-1977924215,-2010767548,-14278843,24415493,-1189053043,-391380981,-492111918,1472461049,-218090055,-953786454,637534213,1394119,1170679296,-1006633193,1077855278,1161307648,-1287359996,-1914440139,-134019459,48800046,826620198,-2094648971,729022525,-1474739062,1346532480,-1069760476,773748056,8920831,116069746,190659366,1059327349,90540582,977265792,-105876256,440699843,491076390,1150023029,1161504284,-1947437799,992353860,-478864571,1967171779,492604223,492649254,1552602485,1564091935,-1966312161,-1977214372,-80607875,1975576448,1563567806,266567682,1448588661,-1927250547,196673908,1587999488,-1952156321,-1930749092,639261835,1963416891,475827094,157104934,2112458101,-1974251265,870848580,777542655,87441033,939953198,-401640699,770240275,-285546242,47358254,-1003584910,772093502,48772863,826642214,2341059,-150550994,-1003616254,-1090182098,-812974079,190221094,-114547736,558140355,-2094836597,41042171,-1966868942,1418403908,-773795828,-1965502230,852921058,1381024758,2133117067,-2145368952,-506363679]}],[{"sector":1,"length":512,"data":[-980757807,1149887114,-1017619956,1015083659,-2096925185,-231012410,240946115,-126493941,-1996455749,1438846556,-326898549,-330921964,16729798,-151005720,1963519046,112899,-386052471,-790036583,-144799233,49039094,2095580020,-112817665,-386181495,1183580052,-1947994117,-112817160,-687610889,-1980545399,1183577430,-1981548547,53932358,-2096965114,427032786,50284230,47882550,24500471,-137219256,-45708813,1183441911,-1982123023,1580855134,-167348751,1963130694,-19797916,82317171,-314128401,1187381248,-555154945,272927488,289769766,638731403,-1961671287,1452012358,1166616309,1434920469,1317753367,966115313,82593526,448725877,1444828475,-671146218,1918705502,-280065607,653988328,639059343,-1995356789,-1960439740,1149834053,-280589550,1995952691,-314144265,-2080815615,989920086,309656902,82593526,-148502411,8389957,1187382389,-771030529,1183000180,1451426297,1190527227,410256620,-957528321,-1962672314,-903088306,-1003044814,50518590,-1426854018,-1946462581,1190590790,108266220,149702390,2045248372,-330893570,-1995475960,1418207556,243041059,-2013039808,1190536308,192218348,-268965858,340035871,-166308727,1946741830,-313619703,-1980951064,1183450188,1575324671,178371,506678457,-1085255342,-1612184736,1515804731,-385649889,1005121003,-82319106,-953800078,-2147483067,-1957472738,-14739727,526277590,910083126,1343779589,-1360506192,71129340,1023767552,91553828]},{"sector":2,"length":512,"data":[-38672304,650439512,65537535,-87693062,88471334,158662784,-790100854,-2000617926,239388420,-1960443776,1149832517,1166747158,340035855,289770278,638600329,-1995225717,-1070394812,906773641,4210372,73763366,1947747386,1676169223,158554364,-1002782466,-1070403979,407144643,906362662,637538465,370492809,910083103,234825221,-1337778200,-65017789,-1195778837,-390057166,57998718,-369146742,179371813,-1325560599,-41424626,-2098658128,-385830659,112262525,-1325565719,-42735358,1041664310,512505349,-225770176,1979661440,130450179,118895871,-402431809,74660498,-320738981,922689302,922682074,113705692,73401050,47980172,-1895043608,-1895638010,1929566726,-638887165,-1006346050,-167428546,-16447738,-947715212,-620078329,512362101,-1006763292,1203996332,-218101063,-1430026587,47857348,84346614,-1341229825,-1057051905,-218102343,84451498,-1430025558,-218099527,-328275547,1041664310,512505349,-969538240,329734,117884470,118882309,-1962647361,-12812046,-964489867,-1573475322,-30014200,-1408956658,340036176,702890,521577971,47855359,47986431,47843015,512492640,-353893668,-603549941,-637104382,-385650174,1053097814,116786494,1962870023,130515715,495461979,-1947468055,243807986,1623131400,973400067,61867379,384553961,-633929953,-600375550,-637090046,-1945870334,-402465762,110037750,110035676,41091802,1623120619,-633420796,1423618,-1974033165]},{"sector":3,"length":512,"data":[-2086007996,-1515907386,-1515895226,3532894,384533993,73449223,-633944778,1423618,521577715,47855359,47986431,47843015,512492640,1256719068,-603549941,-637104382,-340823294,571819,-2144951053,1965096829,-2092871929,-227407623,538983553,2088765045,309600258,-1180029264,-1527578621,-8552410,1325626656,-1070336277,2145960874,-389903630,141768788,-1326285336,-350820081,-986819042,-150652362,-2147466428,-970063755,194566,-402431809,1460018082,123674462,-964438414,1333003008,1968979072,-1427618303,-390057231,-739642814,-1960946966,56672242,956622935,520516447,-352079782,1048590000,1979647253,839325202,945350848,1239945074,-33262351,536013760,-351227814,-1101389858,2145990852,56672000,-1075252597,-1341885640,-2132219133,-16444098,1053095285,-8190662,-387156737,-378401417,87703236,1128658726,628367360,-397322490,2089544074,240946694,-2029821762,1472213751,1580764648,87703236,1229309734,1599733759,-1960897017,1359301174,-2081346584,2002338809,1173825190,1971322947,1300833800,977192009,-252712955,468303922,934788842,1443061951,1072231051,91446840,300483504,1048590058,1979647253,-14739725,-336629034,383683801,1996700703,901310578,112199027,1021964265,1011380994,1166681600,169767941,-1341688586,-370545907,-2136473319,113703284,-2147220783,-2010742582,-1142356651,-788085015,-466484734,225738920,47253190,2110006788,1703552519,-388986107,1418324166,651946758]},{"sector":4,"length":512,"data":[-2147138057,-385649408,113639641,637797073,839351748,25029083,-33458711,1019805384,1022719491,-1273007354,1946430465,1342419970,1477453544,1978205043,452978943,-5185398,-1057095051,125089771,158664492,-385819927,-1897332583,1976106496,8710403,1869924606,192203006,510970110,-428408260,-402532631,1953641714,345591,-966232704,67293446,125682726,113643499,-2147351855,1400178941,1963038184,1173825102,1946173444,-967375290,386081798,52823750,622757907,825133059,839813123,859212035,893290755,924223747,959875331,52738819,526255894,906036457,1838729,192205323,437684534,-390534912,-1342137367,-390403839,-385956887,-210435782,71694118,-344717312,637978166,229641987,-1556683894,-1070398684,52929334,-141877498,616236822,-397009405,526261193,52928822,-1325268955,-337063159,-389838156,1232221631,637585128,-1979427445,1053046488,-148503238,-2147466427,-897514380,521539584,-2147262274,478691779,973161671,50378752,1932185080,13271300,1173825026,1947205699,13271300,-414390144,-351906679,-384847698,-471275484,-1341885645,653585158,-351971957,-11277852,1962972648,1173825272,1950351364,-20381968,-972589880,201532934,113640939,-1341979866,-1545369066,-1070398684,-1576851549,243860273,378078006,914948914,520487732,118945675,-402447173,-147449075,206598,906392960,-352110943,1049310866,-410975449,-947191553,774228456,-352136543,-1014345588,1916071656]},{"sector":5,"length":512,"data":[-958713307,50516230,87703236,1128658726,-1004109824,225789309,47253190,1569334786,2110006785,-1017579502,1929367272,-1000929777,637876798,4408823,-1022926976,-12981928,-335634199,-2037600,-148441483,4195397,-922816908,113641332,-350747866,637978117,229644035,614720394,-1547685117,520487719,118945675,503522491,443017302,-147447970,206598,918320512,-385669728,1340663562,-1207536658,801968403,168216259,1541931013,403097582,-1947926523,-1408939466,-76169206,-2130383229,1965959740,41713670,-2095090646,-24704530,1069025046,309567,477474803,1034813063,343228206,1061109165,144707189,1008673797,-972720865,334086,49809094,346023937,208999283,141871370,-117439816,-1007812120,-352320584,-2146667018,334142,95946100,183036672,-2131265308,17107470,421956126,1950270725,116798981,1963001094,189265417,520320001,1961371371,520319744,1300242155,663240709,-2145444725,268765710,1912798083,1580934667,-402295027,1265770313,86257348,1913890280,317057090,784641395,-1977219804,1659371590,-164597207,268765702,116793972,1946682630,1460031511,87703236,-2145023450,646463980,-1041757689,1476878117,-1007853080,84543222,-385649407,1642725198,1347886847,118904403,1245612854,921930501,91627150,-1014767733,-323950590,-386333879,-397986339,1532951151,521557587,9445119,87563916,87426759,-466483503,-1004821016,637875774,268584391,96937472,-1561853951]},{"sector":6,"length":512,"data":[-1005751749,637875774,1479,-130314264,86257348,1599626078,-1008155873,-1207536660,801968401,-788085053,915079682,1049298250,76154188,537732490,1959016992,1161221,922731513,922682076,512492250,113705692,92668634,84608710,-324999168,1929674216,1195285,45613941,110098688,110035674,-1880620324,95994860,188645376,-378208251,-964430965,-14030822,548930931,-1948521728,-1996141514,-955954634,-16429562,403097599,-387580155,594678509,-469105548,95957113,1352464640,-402320992,-2141706207,194110,-342031499,62412965,1973349120,-163676149,74776578,108382474,-117439560,118918379,-1106971969,196674790,-1583025408,-6093480,-1157163516,-423688805,83017220,-1409283143,41238332,1135216522,113702370,-971635450,-16443386,1930732520,-14775403,607044612,303818757,-437745550,-2138868976,194110,-6215051,-1794753788,-1605143547,279446950,111286901,941526021,114408965,87438985,33703111,-389467392,57874636,1409241065,87441092,1530542056,91504324,88965158,-2080666816,-1497494585,1423621,1323869427,-1958186496,1980141307,-1427787771,1055396843,-1959235072,1980141307,82230789,-218100807,1950256036,1300243973,-2017574907,-347281403,85460678,68675584,2005733746,-34478054,548931187,-18159360,-117496087,-1946229783,-1006267106,-402316242,24318309,330950851,-402287711,-389869271,108260086,-854519880,132694831,-133773589,-1863843582,1964208913]},{"sector":7,"length":512,"data":[1959332364,178184,-352786183,243907,-469043477,-1910575240,-1962576354,-1948568589,374115323,840455307,189041380,108335272,-1961067381,-132178340,-659959829,-971737857,16961798,47515334,-737753593,95945730,-389809920,141814410,286177360,-1017434163,1357552104,49809094,287434753,-346356877,2044988046,-1947707386,1489300458,1945973480,2144261,1053040107,-2144991884,651692903,638273288,1074089344,-402320992,57878077,-402652488,784591454,87441092,1978287848,363784195,-1023017178,-2136415182,145230965,145752692,1353195532,95947380,-788085248,1055588610,87441092,976667654,-97531,1342638453,-854517576,650337071,4408567,141821824,286767184,-1017434163,38633766,-135790590,385411305,113643123,-385938937,-558110222,-1007036655,-1476065120,-1005095928,637876798,-327146102,119965761,-372447222,-400413720,45672910,910083072,-1809907963,-373233664,-1275014423,-9508607,49809094,16443392,-993853069,839202366,1166550756,918816258,-24967878,118060543,286701648,-1017434163,1128593190,1946648576,381177864,1529859345,-378214205,1930429160,168588568,-1207405367,-386334718,-1195120278,-152371197,-352320072,184120561,-1908377372,637892102,-1475655798,-1461095160,506491905,909559126,38570757,-2147433993,-779482507,-2131697024,158691578,-990847,-352170871,266436620,1946220928,-350265852,-400597321,243996582,-397344742,1935226749,-392173550,1053095138]},{"sector":8,"length":512,"data":[736625974,-387484928,-1195120390,1053032451,520029494,-337117036,910083304,339929093,38139686,-495681536,637722273,-1020181111,38139686,209027072,38636070,-2131697280,91554041,1932997096,2144486,161661945,-662023419,-2131696768,-16446146,-75496075,-2147126160,225919227,-478095222,50036751,-128253065,833731,-389809829,108259426,-854520648,113689391,-402521391,-840374162,-1153338848,1458044930,-986090977,-1979354058,521539684,223251238,508988198,1962932867,1926314756,1238512419,1914647784,1107391767,1274405443,1183458891,650182148,637685387,-132229495,-1008194072,-387196533,87703236,1979711363,286898182,650325965,4408823,-1207536512,801968411,-402593597,49809094,243918849,208999283,141871370,-117435720,-1008209432,-352320584,2044988150,-200882422,-16777470,-1006302458,-1962747330,-1408939466,-995475412,1191369278,-1543182658,-8552410,637891845,-436255290,-218101063,84320420,-190754646,1486990082,-947672315,-469084156,1048777592,1979647348,1170679304,-335544328,1981714075,-1175221499,-1527578592,-386392298,-993794174,637721150,-2136472182,481822324,-1020277487,47253190,-413079550,87688903,244057237,1074005308,1915519976,977191990,1841571333,-539498427,4622886,-955969118,333830,-133773595,918880514,380371674,82231047,-218100807,-1573475164,195888390,-385648192,-1387200730,521590923,86257348,1930251496,-336898045,1477418728,1913458920]},{"sector":9,"length":512,"data":[206432482,-466428558,922691817,48105102,839813926,1373211392,823912523,385278553,287160351,520040397,-1003093908,637550654,-486257269,108891415,48800054,826620198,-953809547,-2097151995,-253610553,-397157581,1935354668,-2094611711,427032637,48800054,826620198,-1590292619,958792426,91565893,378662,-689224960,87441092,90016550,-2147433481,112723572,-1020277487,-387551768,-1830289149,1344214528,889382995,-145729445,1962983619,9234545,1802634672,1955419735,-438245344,-401868568,1600054746,-24441996,521537310,-352145159,1837770318,71600651,84320822,1963906792,1300244197,1149968395,1166616075,289704730,474319142,638796939,-1960950391,-1993994428,1149966405,1166616077,1333798422,1444823045,295706390,567011333,95422303,-386399886,-1671884465,637760841,-538440311,-1664901659,1208322854,642253173,-1013119609,47253190,643237378,1377654155,1511918056,-1070455438,49743558,551610392,526260594,1950270518,1300243973,-544537595,-1341096563,526710304,1606678531,1053082375,-1960442570,-1007221411,-243990336,-2147433481,129500788,-1020277487,-387616280,-4718585,-16062209,-1060898877,-134646528,1967128771,-397192973,-1993941015,-1993994427,-1070396075,9707263,-389851045,343139622,-854522952,95994671,1005123840,938001381,-79500827,-1931138584,-955959274,-536529402,319211267,-1342177276,303622160,54386802,-992775168,-989518802,721777726,1979668215,-14739962]}]],[[{"sector":1,"length":512,"data":[855988278,89695168,1913736936,184543328,1053055858,-2144991884,-2092956339,783814855,1477872416,297068549,1512976056,-1005474328,-972741586,402847494,-390057382,1450319858,89659019,91504325,67456384,-1980300450,-1982713068,1418265172,88965124,639571520,-402635126,95953013,-459741184,-1000711485,-972741586,402847494,-1276592078,-988319201,-2147126210,1577321805,-293341437,-452671974,-369113368,-346095828,-465245958,95946355,-1020277487,-958114328,194566,84412102,182052886,1912603576,-1959103225,-133867506,-1008451096,1944328680,285325318,-389861427,113697834,-973077768,369428486,1913302760,-1961724660,184899646,-351439361,243720,1493095145,-20256424,91504325,-11280597,521537141,-423688426,-1187008508,-1426915317,-391462862,-202896253,-1898417655,-1962576354,775794163,-2083752672,1034755782,-1015730642,113712918,131828,1913246184,101107382,-521660923,-2136182008,194110,784639349,512427300,1323828568,1519940117,49743558,-390057448,-1938678070,91504325,67456384,-958463141,-521542393,50775806,113442819,50775639,1053032707,1049167158,109839736,123667834,910083267,1166681605,1007625218,-385649407,-202898120,-401874173,141878087,-854521672,-1007107281,88471334,259326080,47253190,-483071998,-402340888,-960240842,67293446,90016294,47857348,1950401526,79951367,-1070463628,-167722775,141893827,1946272758,15329609,-544530682,-796147661]},{"sector":2,"length":512,"data":[504300776,909559094,248834053,-2034968693,155093814,13104899,-400984960,-91547722,276086794,57934652,1607461663,910083126,78178565,922389343,51920387,-1064523029,-544483186,-1031024077,112977,1494137064,909559094,125093125,-401230616,-1269363067,1049310854,-940113143,393510912,1595368936,403097398,1006633219,1021146113,850228227,1595075520,406750006,527761667,512636446,92930838,117388831,-952761580,198918,440157952,222037364,-348082464,1017818143,-972851955,171706884,125170656,384366131,369167589,-21895137,2242185,1049173782,158664016,87441092,90538022,81455295,-23336765,2242187,-1049233909,36257408,-955878272,-2147342074,1460031999,-402511430,123724360,36421209,1964653696,-1441091424,-401952689,-164371263,1053075947,-1977219786,254018117,57999420,637776873,148983,638022784,17057270,1609100917,-508172286,163055220,-1020277487,88471334,1416953984,47253190,-509286398,-402354456,868475302,232188096,918894110,1944585526,-1260942579,1049310855,-940113143,343179264,-1961470488,1958742746,1946369035,-739565821,-23336616,413212504,910083075,-389510395,-1950153666,9562577,47253190,1300243972,-1977204731,-1070398115,-1977688093,-635517501,872123138,1948297426,-1466373374,-1469025022,-1949272828,440369346,-1185821836,1575485441,-986294003,-989514186,652740468,217573396,914863191,50937483,-2147432457,-672655756,-952738027]},{"sector":3,"length":512,"data":[16979974,1946237952,1958742749,-31725300,1048786527,1946157848,-13221348,1191384070,512636446,1031799574,158605082,151439158,-503316477,532843441,520051433,1055399702,-208986115,440183889,-1964505740,1492574947,-400572117,1021967651,116799231,1979646723,102700562,620554327,-963901838,-141828466,-2084370593,-378076677,2016855350,868481029,1480491986,74776581,-1878135918,572969098,-1977220010,-388823730,84809352,-494221173,89527947,-696200190,1411287808,1847494917,-400956667,-965601479,568909703,-503155945,1847495154,-1965585659,287566044,49743558,-390057448,-1502471334,918902302,1283458420,526255109,113653443,-1961360649,1317676793,1183458824,-1964756465,1347506924,652791691,1952012288,-489684192,-812950799,1946163432,113653459,-402651888,20709479,54324852,-117344776,1371757251,375818790,21400102,-756545965,-1876301045,1962940392,-969489663,17108998,1006648040,1022194689,24508419,642892793,639002250,1392592522,198895622,505403788,309773630,-1911850776,911935449,51908235,-137417889,161560281,-2147440381,1963932867,911613459,52180677,-669086666,914961922,526254806,-1022076952,125158694,639536182,-1994451451,-1962597322,-1996301794,-972730338,331526,356879142,391482150,90314377,637886627,-2147138057,104232320,86257348,6195750,85008008,39750438,913560379,1520694263,1578535173,651201285,-1576778206,-1047853810,89033254,378137299]},{"sector":4,"length":512,"data":[-1962474156,63015880,1929566726,47882508,24500471,-473396408,856146692,-1007133751,-1962582367,1958743001,1177232910,735639298,50623448,-1545915453,-1014299292,-148450765,1755513462,1712752901,1679166213,1037071621,-881524735,38177574,-1996134749,-1023055850,84936390,1173825024,1971322882,-1977200370,-511704499,16351472,-402295463,-546100024,565758259,-960235264,17108998,-1960388629,-1960439483,103486301,505087328,812778850,-1073018251,-1053087116,-930413965,71693862,-399805176,108211323,1946133992,784647151,1541932324,1410239487,228517893,359975179,-385763863,-504823609,1532582144,-919396586,-117439048,1377208771,1411287301,1681818373,91488261,1913514728,1748927459,-747372539,1913543656,252102353,378142981,243991822,512427368,1994917204,1472295438,113660752,-1908931849,1375919134,-35592111,-1452123557,-1977165309,333971526,88965144,71645728,1429815669,960262662,930285149,1074087414,1347956340,1428902487,-1948584186,-1946645513,1317742274,65140482,276073976,906422737,47974030,24356339,1599735716,4622886,-401082648,-1317726241,1499012886,-401677477,645076044,117375154,2045314386,90612223,376750091,-402299741,242355636,90048199,753401856,-385649907,1053097762,243991862,237700432,-148503846,8389957,1419841141,1166616069,89301275,423987494,19270115,-2094656179,-134211755,1173759683,57935876,1358995689,58050827,-385876039,1935223603]},{"sector":5,"length":512,"data":[-24909815,-373038221,-2128215658,-1078000283,86257348,-1577186840,378209632,-404552350,-763117309,1586177536,1943223042,-1946945701,1976699864,-1977202687,-388823730,-1006218672,637875774,638666123,118707595,41350950,-770979701,-1556086412,-1070398116,-1559924573,727188850,1950118617,-1815442643,40302374,-628899541,-2084371712,552272082,166250635,-401743092,141757818,1053083955,-1007155914,-376419861,-1037369081,-768407178,-1996132189,1476751894,89394827,1913372648,1411287526,1377208581,1958882053,1371661090,1072220299,-999139315,378259595,1229063506,-1175976588,-1983876597,-1996139490,-2096803306,353342,512428404,820512084,-1582796276,-1073019544,100757108,1709704538,-963087860,17108742,84809354,89398923,90705547,1913422056,1380996994,1183458899,64588544,372041946,537218432,1963214138,106248466,1564020082,-955747578,553583685,-401195288,-529197529,-1909040549,906157086,49743558,-68622280,521558873,149112690,117375154,-1393883822,184903329,-1559006016,-236452508,-953257461,351750,195160064,1053041522,1889600822,1913555717,1975520005,638575362,638665985,-1206694639,520028161,568918164,-46339586,-905197429,19745140,14320384,41350950,89033254,-930354989,1913303016,-400104480,510790718,87441092,637886625,-1592703607,-1993996958,45617989,-1809907968,-372690176,-1544946182,-17666,1913437928,869657550,1053034203,-1993997002,-1993991843,-2027545763]},{"sector":6,"length":512,"data":[185011037,-402295589,-546173795,-1998014741,84320259,138190372,1374159733,15525889,-2014772365,512630272,663356790,745858058,421935670,-165317627,1946684231,117323269,-695466730,-208943474,-402331969,678690913,607044639,6744069,1357630323,-200373473,1779317506,-1996197115,973433358,1946491174,1812892128,887879941,-1977668470,-2147154394,1955438308,147191311,-990508684,853570568,-2146309148,-680261380,1946358504,403109383,-881524987,86257348,6720038,-1178401002,-1494024181,-2144991372,1950351229,-190725131,1812347650,1076196357,991977357,-1977650470,-33223138,303971011,-1961332219,-402297314,141758716,1912798083,-1876628733,-190594055,-2000422910,-1559949794,-987888908,-1962576834,524420693,872007144,-1876497445,-1560087391,95486708,-796147501,-2113937371,637542370,-2147328373,-201858845,-397157749,1918630225,1947634625,281182981,52877827,197329494,-1993640741,637884446,-33274230,85107392,278653014,-1017249165,89407113,-617426037,84811400,1577748712,89527945,-1070349320,-1576707933,-1555561202,-1960442540,-1960441018,-1037365162,-1996156254,-133868010,403097539,-958070779,33739014,91489991,1049362431,2105607498,1952201217,63406906,2028533643,-1607568896,111281416,-788085243,118882562,-1962613058,-1962587586,571863,540846764,-678755724,-91490590,-402651706,-1057095108,-1946227773,-2096804298,58064894,-972851827,369427974,87703236,654311352,-1958126197]},{"sector":7,"length":512,"data":[990203446,990147824,-1961986600,-1929033162,784597876,1105921316,607044752,-14686203,1189806962,-104254832,-1929933885,-1077440809,163120358,194111488,242495036,1946928104,1958742535,-303912443,-1048329223,-215961598,-1898935126,23259352,-15537981,1962949760,84451337,839190178,1443283940,244055691,1048773976,1962870094,1312701198,-1006078715,637876798,-1941353079,-1077899568,548930790,-1414813152,-1079268437,-466483994,1949187244,1958742546,1952201764,1967078432,30179331,-1075188822,179045614,1007580352,1007318108,-2147257025,-341179956,-863351059,1602275712,1979136775,10414339,168069718,-1979157056,-2012936130,100992574,-840431850,192022272,57982986,1577092073,1476311273,233328902,1594317309,-2115435661,1950270720,189265413,912749584,49823360,-1961790464,383356119,1031823135,1466070016,-644941173,-550824821,1347680043,1979666774,383421190,-33560545,-972393894,402847494,-471285710,1482578194,1594192731,518780811,-1946714648,50689086,1608451063,-1073085046,-1958273164,177400055,-169278603,-919449858,375330795,168135199,-1962642240,-32838665,-1973500992,183995140,84451520,-117111134,607044803,-1547685115,379716340,1789085701,91005701,-1607053117,-789183226,371508514,1465303896,922701905,1048577254,1963263206,-435763707,116843780,1963459846,4767266,279799,-1961790336,180782022,-1190861121,-1477246972,359985291,-24955707,-102664705,-644951668,82183823]},{"sector":8,"length":512,"data":[1583307096,512505539,2089420084,-1060143100,920643456,87176841,548986603,82755360,1085319851,-1178586198,-1410138102,-1076797208,-1416493828,-141841518,-1425722719,-1425722207,-423893110,-1010814460,-2081649835,2122909420,918894334,1988691258,-60912390,-136929816,-2147466428,-1981217932,919745024,49813126,-219674858,-25785387,-739762410,-2011228641,-1006438378,1426405950,1561252840,918905970,2088961338,1282801481,-13236458,990202422,192281206,922648203,88751753,383105256,137821983,-521644795,-1889837583,-2012919290,-989525986,259258998,976652598,512505349,-919403204,-956085112,-46780,976667958,1229752581,922386116,87703177,1007062070,266926085,-92355370,-1017256565,-24422825,-35126134,1175942408,538971565,1969579069,537701415,544568892,149350572,1444813429,-2146928152,1979252796,-400615931,526319244,-1962773665,-1007329289,922086393,53745292,839305014,906190339,53872327,-1556742143,1157038942,1971322885,88405870,1735655552,-1932703000,-1898738470,868454107,100434139,-880737163,512295936,-617413849,53550728,-1484071798,-472837659,300650379,-2013059909,-2013060058,-1912396242,21293274,658410294,13104899,-1943898752,-2133291312,108332541,-1576848992,646579038,-722074840,-402463616,-1590244136,-339541154,-387872233,20711942,-974649739,-10229300,673611830,-940835581,594863114,91540734,292867326,359989187,-401115905,1150222353,356814615,1829059]},{"sector":9,"length":512,"data":[-386721816,-389873592,-1998061551,-389477391,-1607073732,-294321314,918756016,51906191,919374568,47855359,-600375498,512505346,521536824,87438985,53743243,47976073,53612171,47845001,53874315,110039019,110035736,110035676,1038615258,654259916,1223164696,-351424308,-868095995,-2065166672,845772244,1173825252,637566981,1963425220,585689104,-1977198988,-1977220763,2110006797,1173825042,1946681348,-1960901053,-1090054409,-544537850,-1441943472,-1428126120,648732806,1479,2877520,58690342,-2147432457,1157044596,1954545668,-343493628,-1262384636,151054342,57999676,1489169240,-1010058264,-402164539,1150014502,547567110,512505347,-13237470,-1962729442,-1556740028,-13237472,-402448354,1472451598,78729297,118888112,-1442642241,-1974425000,-1070355775,147293099,-1428126120,-1957641082,-661869629,-1420273237,-2020496494,112943057,1364706051,906539344,44895746,1788987115,-49915,-1007156620,89669251,-117279488,1478396867,1960512261,91219973,28963442,76867584,378268274,-771029672,-957870731,-941788423,-16583674,1394011135,89398923,1527403496,512296050,-745863852,1458101042,1317676548,851574276,113660397,-1340603657,243591423,-1017576845,38701862,1950270470,1300243973,-2091449339,-1070395193,-1410078255,1604977011,88965158,1113130816,-190723102,-1007140862,309675,-215998280,280013483,180847530,87438987,-1425193845,-1425062773,866894475,-1012159552]}],[{"sector":1,"length":512,"data":[85460679,-967776769,194566,-402323294,-779421311,1935198347,-2147125993,108298490,-466484048,1053082617,-1070398154,-1873024007,61884532,84281078,171668760,169507053,1373599204,91621006,191859238,1963050486,-77993948,840922457,1357132480,-387610031,1053032754,1398146358,1931557096,1499355984,-351883176,95443373,28354795,-1957649173,7006401,-1331793064,-236403966,-151358721,268764678,1397814133,554166358,1935170398,1053053160,-970586764,-2144934649,-1002437299,637871150,-402635126,-346550751,910083252,-390057211,-2027498954,106385413,550430876,643762077,736626063,1499356114,-6363048,1397794674,-1159160746,1532927264,784647000,376636708,49692288,-243926784,1929267176,-133437204,250341234,-469056519,-2081881223,16508928,116847474,1946682630,373194759,-462094331,91621006,-423691381,375044,-1599822349,-1314257658,-205507835,-867178325,-1416451182,-1420312525,915123115,-2144991884,-1002437300,637871150,1342195338,-1000929709,637875774,-2147138057,505050368,605996371,1569269253,651922439,1527340425,-52238305,168298182,-402170111,-1041756847,1582848768,-2139955062,1053095050,-947714762,180367876,-1912112906,-1979353570,866782023,214338240,-987845824,-167110073,-986315400,-1425726458,-1423976308,-293362346,-1381653242,-1379365971,75101706,-930365389,-1416516719,-1414807501,477689354,440896427,915093163,1149961588,-1014256890,722519683,-165629498,65776369]},{"sector":2,"length":512,"data":[-1962424445,768499,375301363,516159519,91504325,1435176075,-108847354,640512514,1997360699,1407134503,-388396206,1935278713,-960275710,402847494,-202850254,-227386613,66098664,-1962576866,449217523,-1622096904,168312448,-972000256,657414,1053054726,82314550,-1643683844,-1006189736,637875774,639327627,186209675,723875035,50885578,651310026,118185355,1659376867,-1023315193,-388002989,1935345480,1121945349,-1007096606,-129351417,1410763715,236882437,-150551035,988297218,192473089,113699442,-1962867441,-1962586058,1678674942,-1980169467,-1006284738,637891646,134565248,51412365,-133865922,12060355,-4331520,-351861901,-1899787223,-1912415226,-771848229,-1543408663,906470899,91504325,722492813,175761651,41302822,-756546702,521598986,89825731,89826112,89916987,41353648,-402210766,-1166868617,47980174,24373713,128316324,1948173622,89096197,276270400,-141820373,887683979,1983587850,-402427390,385354381,116835103,1962870031,84844582,975618302,410387526,89398923,1929799656,108259348,1049169778,117376340,11535698,-133886302,1388575171,1183458899,-1967063548,-1950209312,47569,1913015528,-2134375881,-902102827,-997575821,1962621763,512314347,-785709740,650218322,-1962776841,50679862,89170886,-634693032,89267713,1566811,-1007100277,-117128061,717892547,-1999831327,-1962602970,1372056522,89033254,-489469366,52876042,-1017574570]},{"sector":3,"length":512,"data":[-388287661,1049167337,1918567726,-1957473806,1586177747,50037532,-953808521,138310,1124073915,224279334,-1024960649,1966043653,1586046706,29004316,100460544,-2094653326,1962876542,1325344260,-628649442,-404176245,-1827966459,-874327157,-385876038,1499137498,-1964466830,-392662523,-1821245395,-15999097,-1006203531,637875774,638279049,119233929,2122524355,-1837825508,-17829,1476401896,48808235,1405352192,-617392302,86906507,1594201576,868440922,88336594,-160106382,-397228149,1918502274,1976699885,2122524171,74776350,507969318,1950931083,84863193,-389819022,-93190887,-388002989,1935344896,-337671183,113653486,838861562,1963108562,96871940,146360064,-1828411392,74719408,-919340797,61975283,1946731510,871957252,-1851067447,-276583509,29619728,1944586612,13035520,-398064523,-1662517142,-2146011648,292895292,1983917126,-1712828409,41113619,1185611698,-1186509233,333971464,775716864,-1186592907,233308163,-1010660864,-1018234621,1979737832,1625837303,1965257216,116798988,1962869498,1965046809,1240195861,74787388,-1426899024,1967078570,30048477,548460779,-1018254605,6219948,-1018234252,-100219338,118882562,1459939007,-1189076808,-206962683,-1967115605,-396383536,-2143879283,-452663746,-969483915,84207110,1631366339,2050754162,539755127,512439891,772670294,1343379455,772929467,1476503767,1397801819,772929467,1526900951,1397801816,772929467,1527032023]},{"sector":4,"length":512,"data":[792511320,1547437686,-1017335613,918813556,47136384,-1023314943,508757585,369561174,1007076895,113640707,-955382982,212230,54180608,3290821,922265832,54331127,141820416,526303282,-1017575589,55025718,-227212484,1007076918,-969538557,369310214,1192134710,113718787,829,1275512630,-402652925,526317677,-380041381,272367793,54265204,-373096076,916193423,50595574,907310335,47056630,906786303,50607871,-1892276019,-1660746746,-10229565,-388287661,1918626727,-402541325,-831195519,-1099623620,1994974258,910945270,44832502,310099,1542162152,1460064882,-24443106,88471334,410257408,287750224,1935159245,113653263,1342177964,-854514504,283858991,-1405190090,91553794,-336108824,-145299453,-389871777,28639096,1962288360,-617393162,1542142696,-466424718,1022760168,1016886288,-1327532797,-817960957,382598888,54427679,57933827,-85444888,85989006,85862027,784550888,47122118,113651200,771752654,48244361,-98316808,48669486,992893084,1963122726,-425644537,-1038751486,-1459436413,-244056063,776732856,49874630,-1091900417,-1959915240,-1945031906,-1127182648,48760582,383904512,-971041273,134429702,54134470,1023854358,-1996488701,-1157411810,914948922,918881096,518520882,113716983,56492872,1275512622,-1023409917,909692032,49751688,470191158,780744197,-2125069030,-1946091545,6613213,-2120760482,-2097086489,175440127,1183458896]},{"sector":5,"length":512,"data":[-794675712,-1054124030,642961411,1510106871,-466429949,106314534,-989980046,274086694,-953808781,-57786,-989984021,190200614,-989986190,171369680,906301478,49751562,4622886,470191158,780744197,-1004141286,-980675978,-2097060376,58068223,905972927,47070848,-1341819904,-1873614077,572950838,906434053,88227459,504132863,918894166,80086342,-98607361,-838402506,251540994,-1909062961,637870102,85862027,-1993988915,637869606,85989004,-712063604,572951350,117323269,-969538865,183814,784611067,20710682,1047803506,1148519228,-150538698,1014237186,-30014544,906163718,47187654,1048786687,1979647298,1444856577,1117861456,918894085,76023110,-1021354408,-150538698,-797695998,-164178453,268629766,-873740684,1048583958,1946157827,-430053373,50661110,-961448449,33888006,-51789774,-2102125046,-969528627,-16579322,-854515016,-400379857,106546811,512439891,-611450146,989861537,991458499,1343518169,389972022,108266245,-401932824,-1892228443,235068934,-385896417,1726531978,-913512443,-84356120,47122118,-804862464,113704706,-1895824635,-1895491066,-1912267770,-1912414690,-1962921962,-402641370,-1557217032,1482163486,-234702760,922693200,-13761252,772086326,-821748063,233683024,990764333,1942457336,-2054541817,-466481699,47358766,-1916905896,-1039865843,-2128166050,267783550,-75430541,-2084368392,650377467,1997364795,12249126,1032527474,-1960440203]},{"sector":6,"length":512,"data":[-25096842,208801782,216792843,-271454255,-271454255,268429185,650321686,-14793017,-2001448705,-150550986,-4257790,-32446449,1979188028,-1017579263,1912633320,1949666267,78729484,-2124815661,-352317466,2122393108,1930425869,15106314,-1932816,855829263,-1980625930,918894133,1283458420,-2143928315,332606,-1082908906,-1588505776,512623912,-964491914,371492880,378228767,29230378,-390057472,1918370716,1950270739,88965125,281510720,2114135631,-133855230,1532567318,113689432,1342178579,-1957539501,267827651,223230246,-388955533,-1960393981,-108985778,1920270848,-494808949,-997588481,647555280,1225147907,-1957604784,-1094700336,1105723393,1515739395,918899570,2089616756,1006109456,-1976863295,-31517179,-1576725754,378078504,843187498,114368,1912805352,1949746468,276598021,521536906,-1090180702,1499071784,650130267,-166887807,-1962773745,1476503747,1532582595,-768359592,-1813253641,124634150,4622886,-402320990,2045296693,1460060928,1164821542,4622886,-402320990,1709752353,1913085696,859338216,-1977726784,838878990,1975854829,1053046341,-148504516,-2147466427,1460017013,1165870118,1594001128,638219527,1950958981,1166616068,1372029769,-1004544798,-133880786,1187456707,-2113929442,-973013017,402847494,295705268,-59185147,86257348,41222972,521585657,-1977217104,111346022,134661635,113705219,777,373721638,100864930,50772766,309773606,-219944953]},{"sector":7,"length":512,"data":[-1962467562,-150795970,1971323079,652489384,-1609079162,104334609,141888007,168232646,9300479,51652106,1592460153,-130190192,643106499,638742212,280311,1946639624,374808102,-150551009,-1006233598,-1945955010,117626886,47595145,-973074504,17108998,1610321896,1946369055,-9770730,3686085,1963214138,88471054,369652800,381941791,-977012449,-31939,-953751947,-57786,-2147436056,975177037,276104261,1074087414,-1913978252,-16497209,13494304,1962981096,2126849762,71694098,276111360,45817622,-47454208,1053145458,250283380,-986295034,-402638786,123535963,-947656078,512505360,521536278,51658377,-1977215312,111346022,134661635,113705475,777,373721638,100864930,1996432926,1996432916,50772754,-402186402,369619405,155093791,13104899,640054656,-988395894,637737014,1853127,-1011488768,339658038,1183458819,1720329736,-129660657,-1070457066,-26613309,943637814,-542093312,-989510368,-31939,911799925,3686085,-31805,1173813876,91561989,1476463696,-348273213,902039276,100665064,134122271,-1121589053,-108851772,-1941211905,906436293,3684037,1962968808,243873292,-1992949704,-352306642,-1948742636,-399194658,-176881553,-208938866,1820920969,-1948742654,-2093693474,-176816130,1065998478,637683596,-64057,38127398,-1108803585,75333820,-392071681,-389873663,119454915,943113526,3008512,-1993988236,1569465909,1049179650]},{"sector":8,"length":512,"data":[-1942618056,-1946142202,-975270952,1173556,-661719691,-63545,-16627769,-1132795649,1979136963,-1940762117,1002605785,-1017554230,748942899,1183458821,507430144,-32000,1429933172,973567238,41223237,-986286613,989870142,91555413,1946436922,-2093103791,-277479425,943637814,1431459328,12707846,1582980359,-466460046,738653750,511049477,-1190109811,1465253889,1962281810,-464132089,99287732,-1260096024,1583307264,1435056754,174950662,638338444,-1996470646,28836933,1962281728,1183458824,1720329736,138774799,922665704,91627148,538872886,1049179648,-1992948364,-134209986,-1262280938,943638015,2549760,71666256,-804898250,1477735426,-8176187,384464383,-163676129,24444930,-943457853,16712773,1698227691,989033476,973501664,1979188293,88471273,1357083712,-402360833,1918369803,-1075544058,1476674953,16758979,1006912903,-151685889,-260816700,-804898250,-991333374,1569524333,106269456,-1979167349,-1964166459,113653477,-166198537,1946682693,243283462,1461715703,1364721459,112976,-400666029,1512039358,1599690843,54985074,199746256,-117344769,-1070349473,-502888650,-1140791038,-2081649835,54270700,-969535882,16961798,-443874896,-1141708451,-294387140,-1929617783,1183383110,-96024837,-430536448,-1947705716,-1027675918,854216329,-370649664,-764257010,-1946663287,-390057256,124965311,1954595574,-385699830,179306703,-956249367,60998,15877831,-79235584]},{"sector":9,"length":512,"data":[-984058622,76282998,259375115,-568422858,2924802,200427145,-1908378432,-1174457408,-1070432257,-965366030,-1362922935,-1923615115,1577259357,-754667030,2145912555,1935220484,-1871385853,1183432846,-1946799118,-1197149186,-978649087,1317791350,379909098,1751327,101908410,53143582,1332872991,1265942539,1962940989,185005849,1979711251,-96025084,318743039,1952075069,1297759496,1709769588,319004929,-523041359,319227435,-151763319,1946352454,-58801109,-1996125402,-1960383418,1183384133,-1334383626,-1341986040,-128021749,-402465048,1431355966,1561095400,-19207848,-17584,65333278,268785695,301695744,-1019488910,1190580599,410386426,319358467,-1019493006,103530871,100864777,74584843,41337659,-1960918133,-262239784,520334824,1183425906,1050094,-375050,1174604148,-196727824,-1996484563,1183446598,118918124,78729747,-1319574829,-1947675892,-128021560,-390057442,1931414653,-9311997,-2114691445,1913651451,266386179,1408523817,-472709967,-1910584437,-768349090,36104273,1215438681,1952172091,-2117588216,1929511161,-329383621,-768265,-1949993473,228718158,-1547631853,262214393,318219027,320014020,-1944912989,-1547631680,-919399683,320280203,519593611,250134579,57876236,-1946222359,1376978198,-1190960966,-400686716,1510408648,1639574130,56672000,200701579,638940370,-661905979,-661731837,-947702015,-337491452,-806674682,-385839895,1190592193,208929531,-1375963451]}]],[[{"sector":1,"length":512,"data":[-1192474999,753663999,-385876037,-620035410,1586094452,-1545055248,1183406850,1050094,871122569,16482752,-1962511600,-754667069,16788960,-128021680,-779368141,-2098675661,1586387211,1372730348,1577142248,1793655667,1959148542,-79235426,-1960545022,271445062,-39635456,113718802,16782075,16696961,-147420874,-106744302,-942109166,-1962934268,485029982,-1360505599,552099082,-79235583,-1962511358,-1483291,-296318024,-1962933826,-1072958906,-1907882636,-1961588264,-1907823034,1377077720,66090635,-1097406222,-227082406,738627366,-59325184,1959089694,833798,6078289,-1527571318,-1414807501,505372249,175424854,-1527563126,526298027,-2147322683,-108298039,-906058509,-13449334,1929762792,-1963357694,-388287805,41092556,-1343694454,343211959,-15567617,1962873972,110044690,-1893335030,855641094,-1881633088,-1895790586,906004998,47843015,-1909063552,906157598,47980172,33244918,-986306700,-1005390026,-1943602050,1313738845,-1993991031,-986313099,638778118,638868876,-1961736823,669605349,918894264,-1003089157,-1944914114,-969475392,184070,-410267506,-1906958597,-1948610878,216583107,-128021760,164554837,911453,12276675,-1084954624,1526730984,-1959898173,-402465250,1273495557,-1664918593,-230257840,-1962931736,65596998,-1013098496,-76234741,-661774776,73353,911262495,85395142,109983235,-92077346,-1174179066,-628424698,-1058535853,1918574337,64523271,172995]},{"sector":2,"length":512,"data":[-1205408936,-1031589632,-1311059697,-370486525,-466438789,-114915786,920914434,85395142,906392576,85395142,-1231755263,-566821066,340037378,-1070462741,386319926,-1976172539,906303270,-402464093,1552856694,-1900006636,704192,-1526691649,-1515870811,-187831899,905969855,-402643807,24313888,958334659,1962934558,20875524,1513979904,48819828,-1930958080,50725848,-1064419328,1295876134,-2144937356,-730572227,1031848953,-386239398,-177012767,20855078,653161728,200331,51249473,227157504,-555020920,868105704,922258368,906161315,906161827,1342369955,2400566,1929360360,958334482,1946157374,1513979945,-1696067980,1492022271,-1329719832,-1230051065,-331447498,1802829826,1538638312,-402498423,145800702,-1914116117,-1948486913,1509950222,41339451,995283339,918714329,49036931,906327296,49028748,-297893066,242483202,109983238,958792430,117441294,-1942616714,906161694,49290892,-1909025813,-1962741730,721421070,1960479947,-1898904763,-645445182,915417067,45104768,920614657,49028750,-1909062286,-1962742242,721421070,-1948742453,52131024,-1064419133,52332873,243869184,1303576579,-2010767994,1049175581,-628228095,48144694,-1946156637,-396672808,-471220910,-1119557451,-1946156865,-907523904,-385649666,-661717210,1929301992,51284982,-650424064,602514806,-1121916673,-1946156865,-1511503680,638219006,81545,-339929624,-1122965311,-1444345424,1912683701,907179020]},{"sector":3,"length":512,"data":[47253190,-352210939,-1331677459,-337366526,512243422,-135593296,74581820,309725500,1552675467,512308754,1552614122,512308756,-13237528,907221814,320419583,-1133123504,-788085194,28311810,-1011525655,521591603,1404873192,1912678376,1032005155,639202304,1962884483,1173825043,1971322885,910067979,939953157,-688461819,-672447653,1539081704,917837289,7347967,-185925006,-13190421,-352294882,520042227,-320143252,-2145452234,-387354112,1552528410,175933698,-1995422580,-689241012,-397009320,123712518,1455150568,-218102087,-1522055259,76242597,-1962779509,1418396748,175934214,-15842162,1552812148,-1942594036,906329630,92020361,218547766,82444037,-1090054477,163119822,48675338,-684994773,-779884079,-387854080,1150071730,142379278,-351906679,632836246,1529859345,-1897201038,-1951106071,-761055740,172264194,47620918,906904715,-1962747741,-1556741564,1149960916,646460932,784532177,48105102,840842022,-1341885952,650377478,3423940,-1007092989,1929372904,1031808762,-1341884929,1407642374,840796710,190719,-1003568293,637545022,1912888635,1563108879,1036264964,1979711363,233568750,3520592,-133962762,113738584,-617364488,1929355496,1031808521,1124431103,78705387,1406874563,1543487464,78644595,646988523,1946172803,1032005153,1394111999,-367097034,1564026370,906720559,48766603,828193062,1130038644,-128725525,-16398554,512440063,-1993997590,-1959383203]},{"sector":4,"length":512,"data":[637724702,1529961865,515395779,1529859345,-2081881230,-1282741837,641123638,-97536,70912628,-977075851,-236251020,984925177,910175312,4589112,1053046360,-953809606,17221,-1993983630,1555582981,1166616064,-2128193534,1073759053,1329973030,-953810942,18757,1262864166,508559360,-398381994,141754278,1165330726,1197313062,-1017634978,1476471888,779358578,1031144764,-788085194,28311810,515050473,922389255,921227,-1984815640,521536588,-1191005250,-1527578609,-374685645,-1992903966,-1962930674,-1090054414,-30014797,-352144890,532173026,1513082129,-1058340237,350805483,514093568,918894166,1157039418,1579155523,-107711457,1975519939,-459262458,-20906494,911613640,47253190,116798978,1962870029,1460031521,973522742,906269957,87821964,300433668,1173825279,1598029891,242505735,333976555,-150507008,1073759044,-969537675,16961798,-1021354247,1191590454,-117280256,911233987,3946181,-470396493,-1992888317,906312246,87826060,-1007133864,-2081649835,118886380,2123192070,113653489,905970951,84412102,-1030952960,1149898100,144848639,113653253,-1392573177,1929337576,57993260,-1190004805,-1403650037,145282854,-136176780,-388002978,123717271,1988960022,4161777,-397080716,1935474702,61929731,-1017256565,49004594,-1573453904,-5242120,84714038,352765494,-1992884475,906316350,88999623,118947839,8826253,218560054,896859909,-402457880,712179439]},{"sector":5,"length":512,"data":[-1929180696,921174365,381448705,1245088543,201782789,57999109,369243624,977191967,-1193744379,-386844696,61913306,113718979,-64198,-854514760,-399936721,-1957690697,-339810300,-1175920506,975140331,1478194656,468233381,1958742712,-341383154,1974132619,14412016,-1430053098,-2141652245,74776636,-1007091024,-2081925808,1935171042,113653276,-385940211,-969474457,331014,-1342013976,-1008162257,521599159,-29693757,-126745680,1460033054,1608622568,-1340121593,518615555,918894166,-544537286,-1924178941,-402618707,-1336952923,1161307740,-1442745089,-400597425,292880595,276086794,-391316597,-93000924,1958742606,-1436766205,1912624360,-1960896853,-989509058,-402310602,343212570,-385923958,208988928,4030502,910624372,89013897,915087126,-919403190,84674294,-402426625,521535790,87703236,1128658726,24412160,-401873981,636008390,-1211569936,-1396505680,1978318824,1945975559,-202659303,952120142,639268100,989822336,1555039605,-1429960022,-924269576,1946398721,-117264382,5433539,-2094597518,141831741,775782694,1326150958,-1342165784,-337284605,-117207037,1962940136,1843965137,1001747946,-1429769219,-362616660,-347145612,168069800,-389974848,1002695252,1326150395,-402290138,-210376120,61916152,-326908935,106307086,-326412969,-1431556428,410371130,1962921704,984263691,-396921404,1383464899,-1985298382,1206584950,-402229621,1983637930,910128134,84739830,-2146404865]},{"sector":6,"length":512,"data":[3539426,2131039510,168064301,-1993378606,521537142,-1929058626,-396948866,-396377049,55162458,1312490062,-1962183936,41862391,-122276632,-386331669,45089011,-1325857931,123690243,-2086723746,803737284,-1013036618,1510405686,1786052352,976682806,922695173,1444807996,-1070397601,1929172456,-138346933,536888132,-396889484,57933978,652864351,1962950016,116798984,1979646712,116886511,2045271839,1319187968,2025851653,734462728,1319319238,3964933,1555039093,-1246238550,-2147171197,216728009,1007062838,110048773,-919403206,976667958,1165804549,608078134,109852165,516097318,-1084815786,-404225184,1577541628,-385649889,1623109304,-400615933,-1544964747,-2134887762,-629931972,973175936,212718709,1969237024,-1006653235,1074053374,-1012188492,1236628456,-143284493,-12285360,1961418728,92939782,1493073128,1994960067,-386238978,-389814068,728891758,1049173782,109839670,-2094660296,175374653,38111782,1883041828,-219674764,96872185,-820451073,1051985266,-374459927,-1782665672,-103028679,-1977218958,19982341,-336919949,910068022,109852165,-13236936,906156598,47986431,-1320035701,1508627204,-1023158132,-494806898,-1992949745,906156566,47980172,-687923434,47974031,47842959,-1047805838,448702187,-391451845,-1301151518,175505980,-788085194,28311810,20751595,460786290,357892902,390927142,647152011,638928265,-401123959,1418308814,650504966,345591,638219648]},{"sector":7,"length":512,"data":[638670083,-351056621,1173825243,1971322882,1166747374,15738114,1946173501,3161349,565763445,1932512529,1017768894,906654210,47253190,-352210943,7137520,-1073051534,653923701,638406027,-82881141,-1985187352,1418265676,-392238330,-1993952094,-1993994931,-1070395563,-1809907914,1702962688,654294789,347521,-1265833920,-1014244373,1928931304,1582761495,535335711,-401772032,-1159149026,495593208,-521462648,1364434411,-1763124853,-396862466,-672401243,1945680360,911262465,637725345,1479492923,112259956,381010937,-1191048472,-466472116,-1271863216,-386340120,343061554,1109297462,1049179653,-1942616778,-402311162,57931968,906004201,88489609,1208388662,512308741,-1959393980,637878814,-225763960,1359175871,1543159272,909559094,906654213,85278336,-1341819649,-1874597118,-2117520552,1966296315,1954588681,-1182850043,1153896448,-956301310,13124,-11460842,918903251,460457270,66759,906316809,906314913,9182975,1107740470,-369099003,-950293450,905969668,88487621,-335608634,911866626,88213191,636092415,-1195814484,113653298,-385481464,1623195455,-1957605373,-96933646,863131737,1048583958,1979647253,134661674,19666437,376703858,47253190,-352210943,-936384315,65540978,71600555,-1047814677,1925739496,-1326060796,1373956867,1623192203,-101390333,921727577,85278336,370046463,-402213601,-1578630941,-352030012,-352079656,1377718744,-141877498,-402399041]},{"sector":8,"length":512,"data":[-13174326,906316342,88868495,1918443358,1048590010,1979647253,1623151064,-106108925,384594521,356417567,-982319355,-1662511435,-974723072,-1209287310,860338513,-1174453527,-1320091644,1354814212,805572388,41302332,1487537924,-1007951271,-2081649835,-1040774420,91553752,-352320072,-162625192,-1929881975,1586297438,-1962467586,-137393158,-222284839,-1977200722,2045312837,-1341950747,2122951260,1428100860,1571626984,-1946386748,-6297407,-1696021877,-1430244609,-1946659131,-397019570,1935540102,-761186803,1951415298,1946500308,-443811376,-385650083,-706106674,116799146,1979647245,919439874,84414088,1996569795,2145933068,1594913782,-1243019600,113653418,-1342111023,183757569,494164160,88471334,158629888,285980752,-346345523,520041989,41091192,2146033643,1173825194,1954545669,179851273,1529859345,-13178645,-352291810,438209505,520049408,1918566524,1525203713,-243971151,102679545,565727575,-150551040,784603138,29295908,651135744,-401910133,1599727248,20717319,-1007035532,-1321304018,-3997694,-1023385570,-967375330,331782,49743558,607044632,114437,-1960390773,1575489622,520576998,-613154500,520078329,1371734116,1707659,87441092,-1993949133,-397331643,1935278013,-1327503350,-1209472286,1507947519,195,0,0,788331215,49419913,1747355950,378285572,-930347926,884789390,512505455,-1992949686,503334966,-661733325,-1553215304,-930348888]},{"sector":9,"length":512,"data":[520137379,1442973160,-1631647986,243712,-1412890965,-1330986958,-963925053,-1411871573,-1414807501,-1414838101,-2085901504,-964491321,309514,61974003,-1426906960,72122462,914961923,-1942618062,-989842402,29157428,134497526,-1992886924,905981494,3153548,-982567235,-97484,-1612158860,71628545,-277512192,319719990,-1997721085,-1976169908,838878742,234895094,1444806726,404669750,1127713539,1451763267,1988634112,1381061377,648955624,906118795,3540539,-1556741002,1499070518,1591250011,1988699679,1586243090,-27910636,-1899823418,549815256,526304226,521048555,780926347,-793247690,96797547,648216592,-2117039360,-1955868438,-2115042326,1426286317,-2089863489,243931335,-315490234,-1426055163,-501299325,552567799,-1409286216,-787495549,-754732579,63605997,1031125,49417867,243912076,-980548878,1241943078,-1900006653,-1077899560,-980746110,1735,44257675,1161472,-947672077,2865414,-2134922253,326285312,-1426060871,-503134333,80184314,-1426057543,-503134333,-943354886,1577106438,-1073297898,113764864,326303937,-956251229,1811972102,-2079930605,-955020032,34822,-1978234623,-1811495168,-954921472,1358993414,-1677277419,241042176,-1090056673,-930348964,-2097147975,-492109113,56146170,-1325396219,-1930898684,1207436255,48119433,-224308651,-388527358,521055733,855644351,-1330992192,1161727,118401779,2891404,-1101439654,1049325366,-819265498,125238843]}],[{"sector":1,"length":512,"pattern":0,"data":[66650953,-1896005135,-1772033595,101107254,-969532925,198406,134661686,-952762365,198918,1347618304,235079355,-625743865,-1022928040]},{"sector":2,"length":512,"data":[-1,10649619,1329791149,538976334,103751712,14549214,33554648,14549634,48366278,14549730,994115806,71516676,1141123907,172491830,76040708,1376034891,174458065,81291268,1829033068,-1267858344,82735108,1963214963,1104,-16709888,33031176,125894405,-2012712712,16260608,537196575,-132054280,33038854,604370979,-131791880,9381895,708874025,-1892999025,277818464,777031469,-1892732785,65392,-1993474048,771792414,10487436,1364219595,508909394,-986819834,-1962893794,1200230991,314480642,66061056,1997225200,243254283,620699406,149619636,-2118909008,28574443,-1642150610,55019776,1562314587,1482250847,-970011810,50402310,67162000,50586368,79,0,453336832,993013851,223490096,1792,1006633144,-972589811,65798,171729387,121391732,512429173,-478150379,-854674425,138199824,1048579445,1946157313,17759988,-1958941951,-1191111394,162791425,117313741,27263233,408065,-2145094143,64062,251528564,-960298751,65798,16910078,16924288,-972525031,402719238,-1979706904,-1979645386,-1979645674,-1274997186,-1022309118,1006698400,1007186946,-1341885437,-1970803958,-1291774658,5291296,50403233,-1912530682,869830336,10534655,-66617159,389972270,1958215681,-1952058613,-204633149,-1021374805,-847248712,64666154,1946724588,-1171934981,-202505256,-1950119003,-1330908211,64535081,-2130528018,-706008371]},{"sector":3,"length":512,"data":[-397342493,-1437007865,-773195550,-2034224130,167842822,-2144242240,67646,-466478219,1038620365,1226142976,172180297,1224897984,135170115,152996097,911361,-680214517,74825738,18097800,152996803,-33060095,1124141070,91602954,135200323,152996097,1606140673,839879173,1959332845,1975519762,21445381,1194984427,50754561,199683033,346080219,1975519745,138313776,141819905,17374859,569051018,382534068,-1073011340,11798133,-622127411,1979693032,38242828,98176,1200227189,-1642150653,222791680,-369222679,113704462,-973078252,67590,-1897057506,436651741,113647108,522060828,-589046037,1191545382,-503312920,-70128649,-400617954,-820051966,1381061456,1426478934,18286279,-1198082048,-661782464,-33535583,-6082868,1963408384,113716743,-1342177001,771777184,-1744759134,-661929981,777013131,-1593769565,78708814,521070803,-1778312797,1560283624,1516134151,-1017619623,-16712258,1952136228,9169155,56886471,512351027,149618949,209009468,17172222,855758568,-1022916160,309473340,242694460,738313960,-1274575312,15005194,1027392263,1060901748,574361460,658244724,80159349,94503842,104514305,158662917,17174270,56886471,26339523,80152456,-1393884254,-2097141829,1065354179,941978624,-1946913529,1606091079,503530245,394920187,-896797134,24496395,1021378369,-955943653,-1023192828,-939709208,-486474490,658031363,117441652,378271970]},{"sector":4,"length":512,"pattern":0,"data":[-617414399,281871028,-108993045,-1594919143,1871315200,1961691649,986578434,-1979549755,-20085016,17729997,-1965823231,-1342111706,16890625,-4669205,-1191777536,45809919,-1196168447,-152365055,-1560215135,-1360330493,-1560214623,-1494548223,243714355,-454557434,126501120,6011731,-1014814838,-229373,-533065868,1200353909,352723198,354813953,-498902271,-8984099,243910963,431358209,16782986,18169482,-855244616,-10557168,16846475,-387189366,-1057092942,-218700750,-1020252155,-402586976,228851694,16883713,-1543510552,113639696,-955711224,184617222,-14948095,48955825,-1031091917,-243857604,243795570,-370474758,281870516,-768351253,17176198,1290289730,-402158848,460717412,237632395,113639675,-1962934008,-1175387145,-836041177,118359804,-402152205,-92274649,-2011729405,369229655,-637337349,16465537,108134600,371841579,1204158715,113705215,65208573,-81884221,503530240,-75431674,108134608,17174270,-1014895637,79889759,1077760]},{"sector":5,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,-855638016,1009787921,-955878096,71430,1997552816,-16333302,113639424,858194176,-1143238949,130482284,1334575346,10795778,49219527,771903372,10362565,789465031,273648646,16411625]},{"sector":6,"length":512,"pattern":0,"data":[352489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6029312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1543503872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1428031064,1364350551,1491140435,1582979419,119496031,-970006273,130822,-637077714,1946288129,251538971,-2127691265,-16655834,-30489603,1963065094,243346951,33554908,777212099,30940811,175495947,-843579208,512306735,-620035624,-75295116,1460761608,-1039681530,-855637573,117321258,1594294785,1354979419,784347731,33621638,-260784118,-1144911688,718077953,59115,0,0,0,1162891329,993870926]},{"sector":7,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,3997696,1024095415,141866753,-298909906,-805326847,-1547761906,-970010878,-16646650,1482184792,1582979419,119496031,1048587983,1950024355,1039958031,-58716300,-2146798577,91497468,-164692178,-526176767,-20584447,-100233426,110046721,-1892810244,-402531834,-13697400,771873334,32907007,110046876,-1557265956,782172642,31538816,-1641974467,37487731,-1092084108,-25499394,31629614,-600375506,922693121,-13762052,-821953994,-495583428,788409832,32251532,-367621842,-1899459583,-390033704,646513123,378274278,-795999768,-402198852,266863168,50775810,-2147310847,1023533374,-1645714059,1474886657,-1339460607,508996188,230284174,-1073042432,-503155542,-1168236552,115867909,19785729,326306420,-713817540,-780926148,-402527256,-1142423022,-401413375,132645344,31367426,-1593713501,-492633628,-401175039,-433681663,-39065599,-1593880599,-538443261,-959583488,-16653306,-365509346,33799937,-12812036,-964492427,1153868807,-1273036545,520068121,44171766,22527490,1202978994,-165740644,12183553,-1075265164,-1145277440,41091164,94444937,989626369,1093411957,-8269686,41222407,246685065,-165740644,-1303923711,26787328,-165740644,8513537,96085110,-1673808895,32907007,-367606498,4450305,104759327,175454721,-1274964038,520068155]},{"sector":8,"length":512,"data":[378143222,246678018,-165740644,-1170492415,-6553258,-402524642,1048576067,1962869220,33792133,91602954,-33422688,1894592,788468969,771874977,31078143,-165740754,-1892770815,771874310,-1023286109,-364985338,1031808513,-2096925185,128583623,11555011,33425030,-1017593602,96425724,53906177,1962281729,-1396100301,276052796,175423498,21495681,1101721975,-164368917,100630863,-1978961407,1949252613,1952201971,-968361745,914948101,-1025310461,519881566,32126661,179101323,1007711424,1007187036,1006924847,-1947241158,-1947472930,534482163,1364414659,1504970327,-6497485,-1560152546,512295714,243860260,378077990,914948904,1049166634,512492332,109839150,1594295088,-1017619623,-1168307528,-6552798,-1023281634,891598854,-165740644,-232879871,-200897535,616040193,55228965,-165740644,-987839743,-1207832042,781985060,32907007,12108575,-13722573,771880478,33560200,-1305280072,-13722624,-1023281634,775094712,33560202,520040092,-54328842,567095476,171827334,-1173785853,162793328,550314445,1996690493,2925042,125091851,-1262449146,-1205744311,567096609,32906889,33031820,-852152392,-299988703,-268006399,12060417,1009765815,125148415,-843644488,-1207112913,801965568,913686538,1459790783,3598586,58023931,-1660915736,1286866549,-85253683,-1191223320,851060015,-1205744381,1572480289,-400438013,12124006,7322161,-1564597811,6285319,-919350037]},{"sector":9,"length":512,"pattern":0,"data":[-1409252930,125159691,1912610792,-386632683,242614296,108159292,41384508,1101668396,-921968149,11535220,540853162,154930548,1027344756,222037364,-1007156620,-2144943111,259275581,-1927346658,166263157,-1161945344,-1107039481,29034376,-1157371136,28901378,-1395225856,125091850,567099572,-1007359166,1868787273,1667592818,1329864820,1700143187,1869181810,604638574,1629515598,1852141680,543450468,1701996900,1919906915,225666409,1346437130,1145980240,1092628256,1195987795,1866670158,1768711790,168653923]}]],[[{"sector":1,"length":512,"data":[17061097,84148994,151521030,218893066,286265102,353637138,421009174,26,0,0,0,0,0,0,37225013,37225016,37225016,37225016,37225016,37225016,37028408,37684328,37683775,37683775,37683775,37683775,72811061,37028405,37028586,37028405,37683765,37683775,37028415,37683765,37028415,37028405,37028405,37028405,37028405,37028586,37028405,37028586,43647541,43647642,43647642,37028405,43647541,43647541,37028650,48890421,37028405,58851893,37028405,37028506,37028405,37028405,37028405,37028847,37028405,43647642,37028405,37028405,37028767,37028405,906413870,1342308353,1677492307,-997578121,-1948200552,-1476448552,283640120,146296832,1479200128,146297027,1479200129,146297027,1479200137,-661309,-13739941,-1962859986,1007127258,-2096794113,126486467,74825738,18718766,788513768,-402579806,126354040,522094894,777542401,20055695,872845102,37152769,572456750,1105763329,777211906,18816651,18784302,1482360712,876019502,922693121,-1930952398,-628371457,973176704,126522997,788493288,-402579806,126353994,522094894,777542401,20055695,872845102,31909889,572456750,-236413951,777211905,18816651,18784302,1482360712,876019502,922693121,1021837618,-771043329,-1031128716,788473832,-402579806,-796261924,-1892788133]},{"sector":2,"length":512,"data":[771830278,20186767,771858408,19013375,27977884,504793646,922693121,-13762252,-402574794,-372244737,1482424078,71127888,1024422980,175391749,1950615613,1141456133,-620020363,-1014351500,788451304,-402579806,-662044284,-1892788136,771830278,20186767,771835880,19013375,22210716,505317934,922693121,-13762252,-402574794,-372244825,1482423990,-1073065136,-628419979,973176704,126486389,-2013175320,-23271161,-1946223639,25133278,-1963821766,-26286073,18784814,-2013182488,512306695,1482359071,839290670,110046721,-504889036,520039936,-392429278,1397752044,522095406,513814017,1527220225,922693208,-13762252,-402574794,-1949303241,-402158630,-1573978588,-1993473762,-2147410146,91568892,-2013203992,93005319,18981422,1966800000,14739462,1527089190,110046808,-1892810446,-402574330,-13762432,-1677647330,1342213096,564145747,92808705,522095406,513814017,1527220225,922693208,-13762252,-402574794,-389022257,158597341,-1607575461,-922877667,-36640305,-1031120805,-1444364034,513945341,6219777,-796210946,18981422,520040092,-1269825246,-13722599,771826206,18749066,976145150,1963008262,513814024,497167873,2095601665,1431359485,1183575179,102837766,1719730486,1576926982,1431356248,-1590760309,1174995254,-1017619194,57983230,-33553432,440189896,3939703,-1607595915,-1574043363,1364394270,-1147605878,-670891774,-1979217362,-1017423387,359809340,141974076]},{"sector":3,"length":512,"pattern":0,"data":[225599804,158825020,1613504524,83871720,-1209482432,788475647,-1343749850,788475647,-58719958,772109318,19803903,74580284,118359157,1456471984,-1070378672,448393355,-2071319040,994443523,-503024186,1505768436,12803672,-1275068416,-2044605136,51658208,-608564365,-855002106,-850611167,51658017,748810359,1958742784,-1064434168,567101876,-850217977,1394510113,1426492421,-66642427,-1409253186,829734922,1947024556,13297708,-521603468,45848576,-1395129599,91491644,1946204136,16509187,1947024556,11200760,-1058474380,-351827968,-1338657585,-1994273499,-1946081762,-1274992634,-853102539,706644257,738626561,-1338657791,-1994273489,-1946079714,-1274990586,-853430219,572426529,604408833,100710401,-1073074227,431235444,-1202708019,801965569,-1962867778,1751550,-73075718,-854674342,-850611167,-1258624223,-31339239,18719424,-16867352,-1261401400,-1172189938,632292626,567092660,-1341842758,-853167066,86161953,632565680,12198349,-1272860670,-1172189915,833880150,540811725,171710068,725357172,993791604,154929780,742131316,1027342964,3598531,661799212,-1001368826,637883166,1931560762,1606690330,1370706710,56353782,1207379672,1950351427,123426822,-1161576194,162793161,1286873549,1631330765,2050754162,539755127,1986939331,1684630625,1918988320,1952804193,1227125349,1919902574,1952671090,1397703712,1919252000,1852795251,2361869]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[2775629,262161,12976160,36241407,681052160,2244,30,13500417,147128762,406454272,411828224]},{"sector":6,"length":512,"data":[-1957363712,309484,-16219416,-706214794,46433034,1962934845,73304859,-1979431169,-62486521,-1979425141,1094555655,1024029696,410255442,636207155,553535175,-58818560,-1961855701,101318214,250282100,33441479,-1947538688,101318214,-4718474,1575324671,-326412861,-402632520,1586169891,357037574,-1207602175,65732728,1342208696,-2096507672,1586168516,357037574,-1207602144,65732732,1342209976,-2096513816,1183646404,1996443824,87746564,-1929067389,-397365178,-998045915,-1337553662,8566864,160950352,-1017256565,-1192457387,-991428592,106859271,134247584,1586173255,7774470,1193332983,-213465579,-230242749,106859265,-1743435894,-1946794359,1183384646,-230257160,-230257328,161605712,-2096839549,1979776638,17020938,61401168,-1962752893,1438866917,314109067,124643328,-175417769,-971837821,1445986628,158459990,-1341864829,-1977289116,-316014260,1183432963,7381502,2097038905,7512328,2130593337,12695562,56682576,-16595837,1182991438,1187447302,-352321282,-27358445,2123097041,-399376634,-998046115,-28901630,956581515,-444793274,359972875,1946157373,146714,54351476,-385649408,-370605936,10795008,51701840,-1962752893,939460190,-2080484376,-1073085756,-1531442572,-68661248,46433026,1342202296,-1957642189,939460190,-2097100824,-1073019196,-675804811,-605532160,856091394,-1528278848,46433032,-16359797,-32315337,167953539,-1207274048,-397410058,-998047046]},{"sector":7,"length":512,"data":[12630018,1354773328,-16359797,-2048392585,113541888,158711819,1342232504,-352151064,1354773254,-2096602392,1586168516,-398983418,-997982768,1975519746,16168970,41478224,-1962752893,2013202014,-38344702,167953539,-1207274048,-397410058,-998047138,12630018,1354773328,-16359797,703071351,113541888,158711819,1342232504,-352174616,1354773254,-2096625944,-1531444540,736645120,46433026,-443850914,-1957313699,19839212,1443229416,1356088973,-16353537,736625782,113541890,74760203,1860943923,-19757427,74907472,-2097125144,-2037578556,-397345070,-998045672,-1913615614,1358877314,-402360577,-998047576,-762934012,-35106562,46433031,-2104627061,1183448786,-230257404,74907472,-2096782616,1183646916,1183666186,-2037559084,-11469102,-998045610,-733573882,34400336,184730755,-1194167104,-1956708353,1438866917,45673611,89778176,8894550,74907472,-2097009176,1183384772,-2585602,1065418310,-1962511104,1183384646,74907646,-402229505,-998046397,-27358460,-1962648021,12977782,108461824,-2096663576,-1073020220,28837236,855829248,-443851072,-1957313699,309484,1443167976,1342212536,-402360577,-998047278,-1982297340,1065418334,1074033664,-1962654071,-1991769018,-1950810554,1183535104,1183400190,-1410838276,79987457,1586092171,4161790,1996481653,108461828,-2096837912,1586169028,73280508,-972654965,1996423168,117106694,184730755,-1207601984,48955393,-1956724685,1438866917]},{"sector":8,"length":512,"data":[1387850891,75884544,73304918,973176704,126487413,4205976,-335657335,-28915963,1996423168,-1371107842,24242256,1074054275,-4717195,-1924142081,-397365690,-998046040,212226,1183661684,1996443822,3926020,184861827,-13798208,-1981283210,46433030,1586229387,-8880124,1405580380,-2096728088,-259325244,-1733410166,201213577,1035171008,-1368129444,-1956724685,1438866917,-1070338933,-16516376,1307051126,46433030,108461904,-402360577,-998046810,1975520006,112645,-1070398741,-1017256565,871140181,63826112,-1207666945,-397410160,-998046327,112644,95807568,-1017256565,-1192457387,-1394081778,-213465597,138840858,-1913108855,-1924074938,-397348282,-998046293,-213465596,105286478,-1946794359,1183384646,-230257160,-230257328,93186128,-2096839549,1946222206,-18427,-1070398741,-1017256565,-1192457387,1558708238,-213465597,71731994,-1913108855,-1924074938,-397348282,-998046373,-213465596,-230257329,-230257328,88729680,-2096839549,1946222206,-18427,-1070398741,-1017256565,-1192457387,417857538,108461827,-402360577,-998047105,-28931836,242597899,-402360577,-998046376,71697154,1183515627,1575324670,-326412861,-402649416,1586168551,71761668,-967047226,-1974996154,1183319622,71732216,-1912977783,-1924074938,-397348282,-998046505,-25263356,-1207602176,49020927,-443826125,-1957313699,833772,1459791592,25421910,-62486120,-2147197301,443809855,973176704,126489717]},{"sector":9,"length":512,"data":[-1897377640,46433025,-1996472019,1183054918,1586168324,-62486010,126370052,-972661109,-1959132857,1065354334,1393325404,1074153099,1827164224,-1958221054,1346436166,1074153099,1491619904,79987711,108314635,-369098824,1586168087,4161540,1996430196,75950086,1023591555,226361347,1342215352,-402229505,-998046579,74907396,-402229505,-998046591,108432132,-1962887959,9877758,21335376,23717968,-1962621821,1979059184,108461838,-2096872472,-259325244,-1979288061,-28932092,74800188,1560168134,-1207958330,-1924136808,-397409979,-998046616,1975520004,-28931567,1465255048,-2097034520,-141884220,-1699193365,1166888960,1172852737,79987460,1182121995,-1996601718,-2012902908,96927302,105286400,-129595064,1342217656,1090012811,1358579337,-2080482840,-661977916,-2131206519,-462094273,-1996601718,105286405,1979336249,-14882557,1341816459,1183489259,-2147186434,57933884,-47895,-1645738378,46433027,1962934845,10467341,108461904,-2096913176,1996424388,7333894,855819395,-1956684096,1438866917,247000203,18212864,435373766,1358055053,1358055053,-2096948504,1183450308,-1947981070,1438866917,247000203,15853568,10632832,-954305280,939586118,-1996029768,1183709254,1183666418,-387428110,79987458,10618566,339148799,305594119,74907399,-1962908952,1438866917,45673611,11659264,74877782,76156651,-397351894,-997982295,1174702082,1962949760,71732205,1575324510,-326412861]}],[{"sector":1,"length":512,"data":[-402652488,-346685305,108432153,1586171115,121154564,-1014299531,1015026411,-1084160,1586168902,4161540,-1070342283,1575324510,-326412861,168052363,1007515108,1007055457,738359162,106888992,-1017256565,1475119957,-1962467754,803407950,2123094411,871860996,-17984,-146690318,1993030617,-1949594878,108432382,1149937395,986264575,91750213,-348060300,-1949174014,1566531265,-594847293,175298603,17964603,-477428622,-1947606529,-326413055,119428695,-1962508661,-1178586121,-1359806465,-1948649663,-678755202,-1031035661,-1017290914,-1962822209,721420854,16679415,-1107070448,-1896214528,784630231,57932551,-2130621975,922746596,18622089,438733110,-1312388351,1222693636,18391862,567095476,25076534,712180284,1354773278,381296398,-855002103,1329908513,775037011,1919885360,1952541728,1914729061,1769304421,224683378,-150789110,145033,-567557236,1253366775,-1942609459,-1962838498,503327798,889239574,-1992941107,906040350,18220684,12066574,172341797,-1959386675,-486354930,113587746,-628358446,-13182157,1929563678,13428995,-704199370,-1143305214,-13238269,117624350,-624952289,120633602,-1070346453,370584307,-1343742201,310020,-851181384,-167087583,91521218,27037568,-327595200,-402476568,-625278450,-621051646,1393062658,1130043391,-1175262397,-517275642,-1962835778,-217639172,25094308,787017011,-1662496521,1393167616,1801675124,1702260512,1869375090,218762615]},{"sector":2,"length":512,"data":[1986610186,543515753,1869771365,218762610,1869366794,1852404833,1869619303,544501353,544501614,1684107116,168649829,-306572623,250425865,178975,567099572,-4710634,-404205568,-1173311231,-437581313,263855537,1440672522,-326898549,-1101637882,-397016620,-998046958,-1913091326,-11532730,-397015946,-998046691,-96040698,2045269846,79987459,1593460363,1575324511,-326412861,24919683,-16485376,-16679914,-1880619914,1575324417,-326412861,2123060823,-1962571004,1300955741,106269444,-1962379893,567085693,108956503,1569260937,72190210,-1996073591,1167001717,855929354,-402068490,29231763,-1996125440,1599999093,-1957313699,119429100,855932555,-17984,-1047810318,-654884800,1438866783,1448602763,2123040542,869763844,-17984,-1957712142,108956663,-4595829,1101984511,-24389129,-1527516277,1600045707,-1957313699,-1957275668,2123039862,-1962467834,-1178586145,-1359806465,-1948649663,-1968770053,-919339196,1929332026,1090876421,-772341013,1600045451,-1957313699,149717996,915101271,401277316,1342180536,1342290616,-806865665,113542140,141869067,-2096970109,-462094276,1946172547,-2093184199,1187450055,-1979711234,-1986509051,485227078,1033373066,74776831,49004594,1586169226,-28901378,27035528,1207586559,16416387,80207477,1599995904,-1017256565,29886095,24518286,-1047803597,-108271221,741772105,1962281728,-221868536,1974355374,1083655674,-41157084,-989600303,-1930944746]},{"sector":3,"length":512,"data":[-1949332484,-1946352644,-1912138004,1240871902,2122911203,-1404746496,1975519914,-1980505350,521535566,25437833,29894399,-1142125739,-75431206,141755098,1528299347,-219462845,167907816,-2146798364,1962935422,71747076,382017278,12058900,522308901,47189643,45811683,-836829440,71731970,567102644,30017167,24518286,-2135029994,865643520,1048585938,1912799614,109989989,-1070399444,-772290421,-1359808373,1963276326,63407097,-772290421,-1977157749,977356549,1007973600,1007186978,1006924809,1491825952,-2118252778,1328278272,-15991253,-812912268,-1014277310,50708739,-121600,-57941973,371131934,-1331367161,-880039392,8502815,-930410773,-31194108,-57941973,-1423948872,-1047812877,385125290,-594849761,-1431503221,1031061514,527770172,-2147025066,-1073042431,574369396,2105542517,74800383,-303322545,-12204473,-388633856,-797704137,-12167602,-1409187834,1958742698,2484232,-504629899,1274317738,1945320267,126332168,-335657847,199003122,-16615982,-2111403769,-903414015,1946762241,-1021297662,1458342741,-2130413941,1963054334,105182780,-1976142580,-1952970940,-152841768,16936071,1153902453,-1979514876,-1952970940,-958148136,16936071,24905415,1153898342,-1962803198,76088388,-352321096,-318865100,-164858623,1963722308,121932326,-774337640,1820849891,393543938,1342308536,-2096510488,1149829828,1958742788,105676806,867822344,-443851072,-1957313699,1988843244,75399942]},{"sector":4,"length":512,"data":[-2125696000,1963054334,121932325,-890744680,46433032,376750091,148891734,-1979530109,-1952970940,-958148136,158855,-25093397,460653036,147056726,-16595837,1508377716,46433033,-150576000,76136499,1577337993,-1017256565,1458342741,901379635,-52153856,-488623444,1442087163,3477246,646448757,300613684,225764362,-1157613894,431554562,-851397632,-1564462559,-1956773835,1438866917,1656286347,-101324799,1988843095,-1568240378,48669694,-1560000885,1183515358,48407304,-190595021,49455874,1962949760,21620995,1948597376,17492227,49022663,-1070399487,-1560089949,-291306790,48276226,-1560091485,-123534628,49980162,48760519,854261792,1965898880,-100204794,-2144867582,209005372,48891647,47974087,384499712,1965046912,-365001971,175439874,47974143,117376235,-1975123208,-397371388,-998046201,1975520002,-256354625,-1863823358,79987461,1015083147,-15567570,1174594566,49068118,91875408,-1962621821,1815904496,113706869,131808,3964998,-1595341963,-1744532992,-23165303,1946174781,4668682,1480394100,-16157440,-2096965114,553557638,-23165301,1023435565,1047986197,781434883,265725951,49153791,49809095,179830784,-2014818304,46433024,146297067,-1192039680,-303366128,-397361101,-370474592,-352321096,-1632174091,35580158,-24388629,264520171,264834976,264835017,265424850,265424850,265424850,263327698,265424850,263983058,261885906,265424850]},{"sector":5,"length":512,"data":[1048776631,1946157812,49455365,-381280021,1031863974,1191605285,1962950016,734497781,-396996410,-998046946,-369652988,1600061066,-1017256565,-1192457387,1357381656,-2091493384,1946813566,-301531388,-532774142,376700930,48373387,1468729227,-129595134,-2080745847,67297798,1048783339,1946157806,-501314800,-1995994366,1187510342,-352321286,-501314803,-1727558910,-1980217719,109312598,-2097020190,194622,1183518068,-96072712,1183516020,855829252,49718208,48641675,49168003,-2094369536,2097216126,75399972,-971541238,-1958335228,1452013638,-2082932742,-621346606,-1980217719,1187510870,-352321034,-163133691,-41222144,-15143037,-11074442,1996487286,81783032,-2096577405,189502,-396943244,-997983772,-334591230,-1983370494,82574926,1177552070,-113013,-1072955826,92992127,1048773768,1946157786,2086747143,539787267,2105558854,-428539649,49168003,-1592494848,101384938,192152284,16154243,28837237,855829248,1441288384,46433026,-443850914,-1957313699,571628,1475814120,-402208938,-2097143806,1946158206,114192,-2096962911,33743366,-335788407,-501314765,-1995994366,109313094,184681186,-955943488,43449414,-386107649,-997983936,-2081387774,189502,104401524,74646252,49034891,49299083,1048837675,1962935034,250107655,46433025,-59310250,-2097058328,1048773828,1946157818,-152545529,46433024,-443850914,-1957313699,178412,-1577675032,1183384290,-465665026]},{"sector":6,"length":512,"data":[108331010,49022663,922681350,922682074,1996423916,-432603388,-25755902,-2096921880,2122517188,108291844,1191476867,1048778869,1962935032,-331447535,175374338,48641791,-2096928536,1048773316,1946157816,-331447535,175439874,48641791,-2096932120,109249220,-955776286,194054,48931072,47973899,1996427892,55699710,184730755,-1207601984,48955393,-397361101,-443875036,-1957313699,-390056980,-2091452937,193598,512440437,1342112478,41911042,-1978565632,512427078,931857118,76023807,233563178,48117503,-402360577,-998046955,108347396,49547007,117376235,-1956773134,1438866917,45673611,-173414400,1048794711,1962935028,74877777,1249834507,512439275,1342112478,41911042,-1609466880,512426728,1066074846,92801023,250340394,48117503,48772863,-2096972568,1967129796,-200868092,1321634562,-964706293,49561219,-1962445568,100729926,1599996658,-1017256565,-1192457387,1088946178,-1957275659,2123039862,-197229818,1282736130,512439787,1342112478,41911042,-1978500096,-568423676,-15758590,-1999009017,-337368569,-566821106,-1744532990,39053392,1074054275,117376117,-1958345996,-1073000505,1048822901,1962935028,105286407,49415681,-443850914,-1957313699,702700,1475663592,-432633002,-1983892734,1183448134,-264336392,434656770,46433271,737822345,75377656,-1325205855,737727235,-96566280,359989250,1965898880,-398556400,158674946,-397371220,-997982572,-398556414]},{"sector":7,"length":512,"data":[192163842,125763339,49954435,-2095483904,1946158206,-129564922,-2097127704,194110,1191118452,7334140,49954435,1462138112,-2080462616,2122515140,158597124,16285315,887620469,-163675392,158597122,16547459,1122501493,-92864768,-18290602,-2096839549,195134,113708404,2097896,-26482601,1577239683,1575324511,-326412861,216580147,-365001740,74711042,48966576,1352147120,-1946289176,1438866917,-1070338933,-1191973144,-397410256,-997982744,-163675390,359993346,47857283,-1341885440,-1341985960,-397371272,-997982772,1575324418,-326412861,-402652488,1448604603,-2147060085,242559548,48373387,48367235,1178569474,-13419797,2083536000,960266291,1043934847,192217828,1966095488,-402209018,-1409273854,-774927464,65130977,65130959,820609992,1015085451,-2147124176,-478267076,-1996202357,1590070079,1575324511,-326412861,-402652488,-1101597869,233505437,1178076298,-1207601916,149618689,3964998,-1070338443,1575324510,856191683,1575324608,-402230333,-4718579,1575324671,-387697981,-1564278783,-469106298,1048585077,1912799614,1931623437,1914715149,-351948795,322736135,330302070,-687693125,24683416,-339440957,-326412809,-1946901016,1438866917,-1679233909,1575324660,-326412861,-1946906136,1438866917,-2014778229,1575324660,-326412861,-1946911256,1438866917,11791499,1426284777,-326898549,-1957275900,1149896310,-2086037498,-167349248,1950352964,-18426,-167716119,1946224196]},{"sector":8,"length":512,"data":[105676806,-2131825888,-2147350964,871302756,38046144,2122971275,105182974,-1978698488,-1952970940,-152841768,16936071,1015754868,184843307,1460829951,-1979419393,1352140612,-2096933400,1183385284,71601150,-956004032,33489476,-1979425653,126354502,1156999915,1316291590,30736001,1149906293,-397371385,-998047639,1975520002,2080818997,-954767871,50332740,-1744354166,-472786805,40667078,17090305,-1195840765,-397409792,-998047478,71600386,108314635,134630528,1283496939,29295622,1183667968,1149915140,-397371385,-998047018,-28931834,1962835513,-13506301,704923274,-1956684060,1438866917,1586228363,352027396,-75296387,-166953984,1073847431,28837236,855829248,1438866880,-326898549,-1957275900,-13433738,56617046,-1979530109,52692548,1014301244,134628598,1149898613,-661940217,-2013862959,1946223212,721718055,1183384644,2126515196,1962889243,121932292,1407733912,113541890,1962690107,105676807,-16608,-1996209013,38061828,-947191808,-443850914,-1957313699,82609132,-859941289,-335596799,105155095,8628632,-397014156,-997982343,24395778,147227463,43267641,-947133581,-443850914,-1957313699,73305068,33443712,-1017256565,1458342741,45529943,1962950531,-1207493079,1609039877,855995649,619420096,-1543625664,-1197276490,80188930,-964493311,-29047036,915013630,1317733052,-1898411004,649408,-443851169,-873872547,-285637888,-2143160205,2005663457,-1951532030]},{"sector":9,"length":512,"data":[1946265854,-1053079486,-796191373,-1464995837,53769217,132546,1149892491,-1947800578,51148030,-28538375,-1991720661,50719493,-28508423,-628308341,28703361,-1943665292,-1996307426,650314367,46663366,-115454,-24435340,-1464995837,-1947044863,-1053079298,-796148365,-1464995837,65172481,132546,1149892491,-1947800578,-1073018809,-661781388,-31058965,1946339342,1037601808,91488693,-1071739354,-348681470,108497853,1508425779,1959148288,1073816589,1307088960,-32672768,199818829,-1778027520,-1695855026,-1013333965,-28996783,57934248,1095354411,2147465793,-971621594,-788236798,-1946847766,1925579713,1925317397,601028365,-389665854,141885452,-355347721,-1070340747,1364378457,1946164712,-24422632,-234622837,-16890681,108497407,-684992885,-27948726,-1017489064,-768389037,1347572254,1342177720,1256726278,147096321,536869507,41179994,1472451083,172919638,-1962654069,2123040342,119428872,-1073048580,-108850316,185496842,-1341490734,-604526035,-150941053,-1829270566,-1072967117,-235470220,-1829636205,805622663,41302332,-1951783164,1975716802,1325762786,-2012903764,995098436,1492480759,-1017290914,-1947432107,-2013920162,1948254620,1107474446,-779368141,57876941,-151277847,-2147378041,-2115435659,139365120,503731851,-54512889,-259303849,1709439627,-230683976,1362261422,-903098485,-854531255,-268198879,-1274776675,189393673,1177515200,-1174404423,1085539018,74654157,887818676]}]],[[{"sector":1,"length":512,"data":[443858955,-338195623,-812953147,567134763,-1645214820,162792563,-1073014037,-2013915531,1950351772,106859275,1964654464,82573315,470333689,-1962773927,-379625786,1317796643,106334984,567099572,162792563,-337383957,-411713525,27035638,-1962249152,440369370,-336067723,146340310,1439755036,1586228363,107446276,1438866895,1465314443,142508806,-1086819072,1451950364,71731974,-402164408,661782611,915097835,1950876012,1962359569,38046477,1443645065,1577073384,-964480909,1828618500,184840961,-1207536174,-342228993,-2082829539,-607055933,-338492495,567101620,-1986860686,39094532,23869065,1594343475,1575324510,206474179,1278867339,-2096335870,-25099066,-227212948,-1958745095,1914438618,-1898738887,1979136961,404633862,-2094632191,-607055933,-338564143,-147067951,-654112395,721516193,-1262448936,1914817866,1979136781,404130052,75993601,12833163,0,0,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,690169920,1920234593,1663984233,538976288,858665248,791951392,808399409,5242934,20971840,0,2097234,536887584,621346848,973081203,1543518720,14895,684837,6029404,774766638,1543527424,0,1635151433,543451500,1651340654]},{"sector":2,"length":512,"data":[1864397413,1634738278,1701667186,1936876916,1668172032,1701999215,1142977635,1981829967,1769173605,1224765039,1818326638,1881171049,543716449,1713402479,543517801,544501614,1853189990,2035482724,2019652718,1920099616,1090548335,1936024419,1701060723,1684367726,130416640,0,0,28639232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,284,0,0,0,0,0,0,0,0,0,0,0,25264513,1,0,0,0,0,0,1127940096,1279870559,1313431365,20294,0,1280,66816,0,16908288,0,33947648,0,58982400,0,67239936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1848115812,694971509,539831040,369098787,219677186,202116105,-63481]},{"sector":3,"length":512,"pattern":0,"data":[302846719,65282,0,0,0,536870912,168624128]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[30431821,393235,32,32833535,-1952710122,0,30,94240769,100728832,136708096,137297920,317128704,320798720]},{"sector":6,"length":512,"data":[68073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1919243776,808334112,16842800,-852446128,1038124577,91357972,1979913277,400538126,162799374,856039885,1489719488,-1946160965,771752470,521606793,-785659508,268434049,79234931,-1948069120,386857690,1358685067,567086516,1979661400,403814957,-1041752306,-1337150458,1377947135,1511041512,540864235,154928756,171704948,1949056195,1950039048,1950170116,118407936,-1090495298,549000134,-1197149440,567097088,-401176530,804945939,-970060683,1544808710,805750318,-2118231020,487112448,-391329485,-92995660,1962916584,1947024629,104476241,242488296,108159292,41384508,1101717284,-391324437,-92995696,1962907368,1963801845,-350179323,537694219,343176764,393504316,495690286,-1172371938]},{"sector":7,"length":512,"data":[501749320,-1360322810,621215278,782756628,337905406,520528107,495455881,96874467,49906432,146675826,-58675939,202339642,1918975008,2004499462,-385225982,117374747,166401034,1946172588,168230404,-853953516,484876833,-989929334,331759242,108330762,-527775862,646498558,646452092,646452048,100668321,-729148060,-1193637294,567100425,-1023995022,1952059904,397523468,-1157706263,-941025315,113726206,977345937,496174791,-889323428,496047616,-1849794380,496353053,1918509517,-680155514,16743552,-169147788,567095988,108396348,-384298566,-889258354,567086772,-467760074,-1994453476,-31661538,338804418,567101364,-852155464,-568424159,-536441828,623097884,-854434630,891598881,512303565,109845722,616045788,306690597,118366669,-1273763398,-1172189893,-1418586070,523966091,486741641,567089844,-1273804358,1008848145,-402426625,516227651,1200299234,-391956990,71797276,-1573469954,1200299239,-324848115,267926812,-30010510,907290118,338101959,-952696840,-149673722,-1556723457,1200233706,-1947979249,653735624,20323560,907870982,907871137,485230083,905970181,907871651,484967939,905974789,-1960896093,15696380,1928870657,-1963357366,1468729423,-1960899066,-1608565986,-922872964,-813235788,1347899730,111289805,1064523796,407045831,1347949907,-466434938,-1172814429,1105729601,1599690756,63241818,-388767017,192220867,-1140897815,521017748,-32627735,-954365434]},{"sector":8,"length":512,"data":[1662611974,427080469,1477317609,-1957144488,-1407239370,259258428,192213052,-401232966,57937649,-1953486613,-1961032898,1092414478,-1426866126,-1273804358,857853210,-397389632,-387447534,221243402,-402399768,1038615296,843887629,-1088303680,-141878008,495455883,-1605371645,-218295319,242547886,-2145580865,1966735741,46629691,-12110101,-148154571,-554234508,1963130499,-8552441,1191277882,-1174403642,1001659656,-1889590835,-401837307,2092565382,58386456,-33506071,1192495878,-960497781,326934547,914968490,45093862,567093684,1946172544,-16398845,-1274848792,51809050,-2081780963,567090117,-960884300,169987347,860976576,7769024,990401512,1930700606,-147110364,-1992294028,-1961033922,138340599,486475519,486489659,-336919947,338116155,-348126349,1958743010,168216087,-1556086252,915085513,-398058237,-977663630,49211416,-1494543692,1964113024,-432633073,157607955,-401041478,233505496,336215680,-1173982206,-907536143,188645378,125042708,-1273745222,-1021194949,484589253,-1962586742,-750105901,64228066,521014101,521910979,-851967816,993430305,147227423,-1189244481,-1527578613,-1174403642,-1705894781,34996285,-1391606141,-1580168362,-1073012965,1950884980,522625080,-400715358,914948309,-1008198470,-1103722240,11921436,482489993,-350439238,-2014801876,10872832,480786057,-1996443416,-1172526538,367729828,9562256,479409801,-402626072,914948249,-1850073961,1033523740]},{"sector":9,"length":512,"data":[1577195008,-1375943037,-141821813,-288158799,2090625,522993280,-2095680256,175246590,338626246,-2096925584,-167047954,213779317,-784955136,522756124,-1960996446,-754601481,1072071150,-717846272,742293532,91488287,338626246,483375616,-1023293464,95535755,254142675,-930396160,-1056710447,51678142,496091120,-218102855,378532,-2114810941,-1023402010,95548043,-427692333,-1950154737,-754339342,2145812974,-1127841536,-722943225,-2145618681,1935934,113706613,334109139,433133193,-400962118,113639784,-1023402614,337985152,-1995279360,-400960746,-1598421072,-1979253221,-3741667,-2046709565,1007945734,-1106479872,-1779952662,444054023,-1006653464,571729,-2144951053,1965096829,-2092871929,-227407623,538983553,2088765045,309600258,-1180029264,-1527578621,-8552410,1325626656,-1070401813,1371756970,-850177456,335979046,1482316632,-1106742439,2095584603,-1008176117,376780425,-1173835288,-706210189,-358497536,377076508,-1962892312,185865486,-1593215799,-1447357417,9627670,336400011,158648587,-1156313183,-2115496252,286165760,1959332628,336830729,-401154373,463536240,1958742804,385334036,337919616,-1157401344,243996424,1441273463,337223936,108314635,-401173829,-358547384,252062492,319171348,386280212,419834644,453389076,486943508,390380308,-402642968,396427346,1096223,1589371639,2680855,-1944119391,283804618,280674859,-1142753536,333977459,-1952201984,484941853]}],[{"sector":1,"length":512,"data":[653780018,-768402037,484976375,-1994947933,-1994947562,-1994946034,-1172864994,31987584,-1705852160,34996285,1377276346,369114522,-340081918,-851725293,-2142190815,1320254,-1796733579,-1106449410,837293038,446282246,872303592,-397061184,1432159633,1977957760,334544435,-218100807,279990436,180847530,-1425404184,-1951677813,866846278,1487645632,337839814,608075777,427032596,-402652743,300678805,486278910,337985152,-1173982208,-102229238,1482382845,-384611906,-2142240357,1320254,552076661,-1106449410,-1108864021,446282245,-1191323672,1431502849,1560616168,-448954283,-71419275,768275,-1336892173,-947672560,161081354,-1413313621,-1425783157,-1414807501,587646552,1048576276,1946162212,112902,1576935656,1237211227,28305683,-2141693091,1320254,-2101727884,-1877546213,337985152,-402295552,468450735,-401347906,1002046796,-754530533,-31717607,-971142650,-15432442,-386050072,117374696,-1746330372,23849217,486278854,134661888,1426063380,-326898549,421935916,-1157204193,-1377232492,624853000,326369300,337788544,-1106479872,602412010,408205829,-1090611224,-57994379,2931031,-1956993805,-854477606,108954401,179205120,-399805248,594675004,-401347906,113706230,459807185,433260231,-843441145,-2063153639,1508441876,-26810114,-385803799,1371471694,334544659,-218100807,-402099034,-931986172,-1090628631,1149899593,1964025875,-289516014,465156627,1593624040,269700224]},{"sector":2,"length":512,"data":[-1962688280,1178280516,1444180998,-1173098818,-1410851916,1183538940,574916870,-1962695448,-1073011644,1149962101,1958742822,-289516010,465811987,1593608680,1149878323,642025764,-1962704664,-854412077,1958742561,-27334397,-1089252930,196678651,1973875456,323600112,-1475132278,1444050192,-1173099586,1340611513,1283481340,1256722451,1149982211,71711522,-339864716,464828947,1593587176,-1996208501,786965060,608471811,125157387,187057291,1444312256,-1173099586,333978563,-1070375172,-1994111863,182986308,-1261204733,169987346,-2094304064,1946158718,334215711,567098292,1048581747,1946162213,334151180,-1174167576,-1175971294,-45422341,-1034033781,1237188612,323286547,-2142735088,1319486,82314612,-2135495935,1320254,-1957490828,59500766,-401055302,-208929524,-394153893,1156972824,108333075,34817270,117377652,234951701,-2048191465,336660223,336793089,-2130740503,1319486,-1125644940,-1340151040,15132802,336398079,336530945,486358656,-2146798592,-386985116,1357447773,137822207,1149981460,1996443682,147227398,1461513919,-76486576,-1072997800,1001664116,309469645,1543357928,336070287,486293120,-383290112,-997982437,-386757880,783942360,-2063153636,1911095060,-16389636,-1962359677,46328050,-400918598,1048640220,1962939426,367770344,337985152,-1174178560,988288529,1440118023,340233043,-1962800920,323600375,147293015,-218095431,-1957273948,1474830964,1566268933,-1994111863]},{"sector":3,"length":512,"data":[1525229140,18778623,-1948349667,384311927,1393718528,1526803432,909899655,2087916583,1946158312,-1954747410,52233022,-165311746,-373092156,113639639,-973071107,1900038,486612617,-919347573,-2094893173,-479067394,485242427,-397157001,1952121064,45410518,2133082485,14346323,-142130853,338114107,-24950413,990278146,1981606966,-396930783,1337590283,-99162086,268417630,338050688,-1174178816,-397148161,1499136213,1944591851,-20876286,-2145583610,1319486,914951540,-420996111,468564481,-151296024,1963987783,-29458363,1047855132,337788544,-1606978304,-466477849,484976375,-1948125360,737184762,1461396551,185233958,1510372818,376619579,-1991157166,2139694199,12052518,-1174303000,-1712842010,-208971271,486612619,1962281923,447527455,24504402,-108861350,2005530163,611813666,-400132215,117309577,-1947525891,-2095388998,1962943615,645891035,-371886848,512491385,-24436933,338050688,-788040704,188320743,-271465473,965475843,116471,-271513484,-271454255,-410914863,-960294913,18091014,337839814,991857409,-24422881,338050688,-787975168,-1980562458,-775725548,66257902,-1947217417,-787582148,-773664286,-2115841566,-352317465,15171844,-1980101648,1455644220,-208973485,486612619,1493173480,-960274853,18096902,337919616,1442018304,-1957276077,317199431,-964469248,2144520,-1040276237,1593393384,247684443,106859295,338107963,-1464138126,69396761,-523041615]},{"sector":4,"length":512,"data":[-523120077,244044497,-511697688,200407008,-163810085,-1977817290,-470994232,-386692341,-142082272,-561251870,-147003310,486874763,-32277344,1397903560,-855637575,335979045,1482316632,1760036211,1609200644,1388575491,484589253,1426313355,-350286320,-2046709553,169084678,-2146601536,1319998,1253705333,-105977831,-1709885,337788544,-186072320,-972655361,1937670,1894595,-1709885,113640820,-402645615,-1950154751,147227635,1461513919,1593330152,496090966,68385952,984656448,334078122,-1963488342,-1273791466,-1407070905,-76169206,1593740110,1946172544,334077969,1962886456,179087873,-1442614080,11598059,-356596822,-4397037,-1088581186,1622417041,443687373,512900737,309681210,513031808,-1609861888,104471953,41164433,-1007041544,486751883,629865987,1951458314,-3896824,202645510,1476757520,53906371,-1169799651,243990530,179051754,-2027784768,-33625870,427094663,338247227,117377909,1153831961,166397183,453443472,-12270060,-689815032,337327755,57996811,-1023409688,-385946904,-941033294,-2063141129,259325716,109494323,-397405148,-1571291127,-389868508,-1161625599,2062030285,-385649405,915079390,1179000067,-1962933574,-1407391218,192153768,861074055,-38278958,1123190618,-1070338590,337315463,-2145625927,1319998,1522075253,337486620,-1608676445,-466477849,495658743,653775411,1386421480,1410763036,1443793180,475052572,-1007146008,486749835,45762118]},{"sector":5,"length":512,"data":[-368145664,145271836,27812980,1364615285,209735250,1996947329,-386757866,-142082780,338114107,-2091432589,309461758,485242427,-147125129,-286783372,147126011,-1168239755,1048580095,1946162214,-17917,-335732504,-2134575590,629148276,1997471615,199974678,1963050230,17662169,1521544031,-498966951,50068,0,0,484589253,235490699,53906207,-1085913571,-1561853951,-1957210624,-1950338057,1343649558,-1118416303,1189613682,1031823101,-2147126043,1752498237,337839814,608075777,1232338964,1343911305,229921618,-1581637171,-854608877,1975519777,6940677,-1564543509,768275,1558750451,-1178586368,-1426915317,-1425959192,-1951677813,1464289077,1593858536,-1413313621,-1185392037,585629697,1482250998,189423199,-400526126,1465253921,65795979,1079531866,1482167010,376903209,-971385414,1937670,-1007325208,1358915817,-1992538196,-336300968,-1447143690,-2147156461,108935484,1311769798,-1017187349,-768360397,24507915,-68753213,994113415,1930700598,50234117,512421747,-13493017,653779959,-1950147352,185868342,-401705738,117372582,-1070394334,-941076400,-2143894537,1313854,-2143917708,1319998,-986291852,-1977818594,-315486385,1334507915,106400520,780672782,512433415,2090868539,-1261896173,-813215487,1347899730,111290061,426989588,486999806,407045831,1347949915,-466434938,-1172814429,971511873,1599690998,63241818,1506796247,487001658,-1175976587,-1264618496]},{"sector":6,"length":512,"data":[-1172189939,1001657392,1048584653,1963004938,-230430717,-434730442,-854674404,1857733409,512308761,-2143938192,1935934,-952760459,-1038519802,-169154535,-434730442,-854674404,-1337150431,-1675506177,-635502802,1963080732,-1075250422,-1337150209,-819868161,382021371,616045786,773967141,484316869,-853204040,-971043295,1313286,-1258322712,-838881204,-852708319,-790507487,-773729823,-790507039,-1949431058,716460753,-377413171,-1047853124,-523107151,78759434,-523116333,-1839545846,357809859,1539179499,1364414485,-1610197166,205263878,212861558,-125049806,-1785993263,378082479,914953597,2075792767,-180164587,1377147578,369114522,201439234,-397401651,207156534,-2012857824,974091284,1947502854,-1979303413,-371624684,-1073021074,1499094791,1455642715,363402889,1377150906,369114522,343194114,567085748,-1091240472,2088768630,-462159617,975178924,1947502086,-2029635062,-352160748,1589643987,65475,134217728,1061109504,1061109567,1061109567,0,0,0,0,0,0,65280,503316480,1061109504,1061109567,1061109567,0,0,0,0,0,0,1229324288,808469836,1212362800,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,771764013,3014702,538976302,538976288,773857312,538976302]},{"sector":7,"length":512,"data":[538976288,8224,0,0,0,0,0,0,0,-134217728,1046287,1627389952,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1853423616,1247900265,1699114593,1918979426,1299345473,1967815009,1819626094,1399289153,1666150501,1987006068,-916232892,-535505132,-166401516,185924372,487919637,924134933,1310016277,1769101077,1881171316,1702129522,1107326051,1965057121,7629166,544501582,1684104562,1631715449,1868767332,1851878765,1631846500,1107321204,1663067233,543976545,1836216166,1392538721,7038309,762212174,542330692,1802725732,1667584768,544370548,544501614,1853189990,1867382884,1885433888,1459647077,1702127986,1969317408,1375761516,543449445,1819631974,1766064244,1912630131,1768186213,1996515182,1769236850,536897390,620768833,1919230067,544370546,1679848229,1702259058,1728082725,21,1091920640,1953656674,1699881004,746156660,1852262688,1063613039,360906784,673215269,692989785,-1677713345,1342177301,1633841010,543517794,762212206,542330692,1802725732,1124732206,1769238127,543520110,1852785408,1953654134,1936682016,1751326836,1936615777,544175136,1701603686,536879219,1851072544,1868785010,1634887030,543517794,1869771365]},{"sector":8,"length":512,"data":[1852383346,1919509536,1869898597,221149554,538976266,1986948931,544502373,1701996900,1919906915,1869881465,1818846752,620765285,543368547,1635151433,543451500,1634886000,1702126957,658802,333977135,1680153995,1936682016,1818435700,1702130549,1713402738,1684960623,544106784,1663067173,1852399976,1308634739,22,1815684352,1931812964,1953461280,1679846497,543912809,1667330163,958726245,622879852,1931812979,1684103712,1667592992,1936879476,1815684352,1931812964,544417056,1746953253,1701078121,1768300654,7562604,1684814117,544417056,622883621,1768169572,1952671090,1701409391,958726259,622879852,1931812979,543434016,1919251317,1818846752,620786533,543452217,622883621,1680154739,7546144,1684814117,544417056,1819635575,1700929636,225649952,538976266,538976288,543434016,1644196645,1936028793,7235840,1868785010,1701995894,1768300644,7562604,1684814117,544417056,1767994977,1818386796,1852776549,1936286752,958726251,622879852,1869881459,543973748,1869440365,620788082,543452217,1713402661,6645106,0,388694016,5937,168630068,1125617152,1869508193,1212358772,1263748171,1310744864,1870099557,1679846258,1702259058,1125618432,1869508193,1212358772,1263748171,1394630944,1414742613,1864393829,1396777074,1313294675,1679844453,1702259058,1226289920,1919902574,1952671090,1397703712,1919252000,1852795251,1986939172,1684630625,1769104416]},{"sector":9,"length":512,"data":[1931502966,1768121712,1633904998,1852795252,1125643520,1869508193,1212358772,542263620,1914728308,225734511,403898378,1802725700,1920099616,622883439,1095114867,1680154708,1584128,1140850688,1667592809,2037542772,7546144,496048199,538976288,1931812896,-1860675584,225649949,538976266,1752457552,1953459744,1970234912,3040366,487069797,168653605,1176510496,543517801,544501614,1853189990,-2147471772,622694680,537529715,1866670112,1767994478,622883694,1869488228,1868770670,1734964334,1937076085,1869373984,779316067,-1860658432,1090519069,1931504748,1768121712,1684367718,1818846752,695412837,1701994784,1852793632,1969711476,779318639,219728640,1920091402,544436847,1853189990,1176513636,1918988320,1952804193,1847620197,1931506799,1768121712,1684367718,1124732206,1701999215,1869182051,1998615406,543976553,544501614,1998611810,1953786226,1948282469,1768169583,221145971,418578442,1668248144,1769173861,1663068014,1869508193,1868767348,1852404846,221144437,628303114,424411251,0,1701603654,1819042080,1952539503,544108393,1818386804,1633820773,1919164516,6649449,1970499145,1667851878,1953391977,1835363616,7959151,1635151433,543451500,1920103779,544501349,1701996900,1919906915,3014777,168653605,1931834149,-1860582400,29,1936607488,1768318581,1852139875,1869750388,1763732847,1869750382,1679848559,1667592809,2037542772,1158286638,1702060402]}]],[[{"sector":1,"length":512,"data":[1818846752,1763734373,1869750382,1629516911,1914725486,1634037861,1212358772,1263748171,538968110,1145586464,773870153,1634082862,1684368489,1920213036,1735289209,1953259808,1634628197,1830839668,1869116517,536882788,1632116768,1852383347,1768710518,1818435684,1702130549,1713384562,543517801,1853190772,1702125923,536882788,1850286112,1768710518,1970479204,1768172898,1952671090,544830063,1920233061,168636025,538976256,1936027460,1953459744,1769497888,3044467,1176510496,1953722985,1970037536,1919251571,1836412448,544367970,1763734377,1818326638,221013097,538976266,1953391904,1948285298,1668183410,1684370529,538968110,1819033888,1952539503,544108393,1869771365,1931488370,543521385,1969906785,1684370547,538968110,1851867936,544501614,1868785010,544367990,1852121134,746156660,1869770784,1936942435,543649385,1953394531,1702194793,536882788,1766072352,1952671090,544830063,1948283753,1818326127,1696627052,2037674093,1869488172,1864379936,774774898,658732,1142956064,1667592809,2037542772,544434464,1852403562,221013093,538968074,1851867936,544501614,1868785010,544367990,1696607790,2037544046,658732,1159733280,2037544046,1935763488,1646289184,2122849,1802398060,1953784064,1969383794,1929405812,6650473,168653605,1226842144,1919098995,544437103,1802398060,1864393829,1818435694,1702130549,1680154738,-1860450304,1124073501,1869508193,1212358772,542263620]},{"sector":2,"length":512,"pattern":0,"data":[622882676,537529715,1920213024,1881171301,544502625,1936287860,1768910880,1847620718,1881175151,1701015410,1684370291,468910126,958733713,1646290028,1936028793,1936286752,1886593131,627401569,1701996147,3040357,7218,0,168624160,538976288,538976288,1870077984,543452277,2123106,1970040662,622880109,1919098995,1702125925,1879056484,622694684,1931812964,543434016,1869568,1937664,544417024,539780133,2122789,496049305,0,1663394853,1663394853,2122789,7340,7569,7569,1663394853,1681010725,-1006607579,-1862270948,788529181,20]},{"sector":3,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-805306368,35]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964]},{"sector":5,"length":512,"pattern":0,"data":[1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568,329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"data":[-1173627415,87886320,-1172605952,37554645,-1173130240,138217883,-1173654528,188549511,-1174178816,521013624,-351950360,1914817804,-850545454,-89969119,21817610,1527182894,208929035,1527182894,57934347,-820950039,1527182894,292815883,1912732800,217874674,-997986953,46856454,243281408,-83621029,27336462,1975520011,229920774,-145219123,-16079098,186742015,-400722496,988283445,-1911393533,-1274370298,-954086071,698118,-64040960,37808138,-393494477,-1576335710,484969223,17185024,-955878389,-16056058,1529250047,104397579,58002169,-117365271,-1070378805,1543931438,1958742539,785395205,-1017640196,235536570,82372639,184565376,-2096073728,721214,465176949,81061898,-1157698565,-873985472,4096004,443875339,772447393,-1593829725,-1557263714,-1600061430,212020746,1275115520,521019853,184616647,109969408,1236536357,512434637,1353976474,-90103347,-113344502,41222154,113688627,-16708871,772445742,177604239,-1744400594,118380554,-1191149377,-1510801344,567103924,-1709274834,-1940868086,773967307,184616647,-970063743,17496326,-113344466,1685323786,-1258291269,-400437944,537198602,1943550720,-12523253,-1320612936,-1008151804,567101620,-970002574,719110,203793198,99614757,326242304,622234414,1003684620,721974992,16417232,772043536,772548001,772544419,51127713,512306904,-1209529611,785918975,183443081,-795948916,-1912119876,9431256]},{"sector":8,"length":512,"data":[-4657869,50759679,-49909,783549556,1048781261,1979648769,-17962749,989950952,1946875670,-1509505514,384303370,23259137,183965243,1374160244,-1192039679,567097088,202970760,1966078592,-2007191290,-972285426,697862,-1089727554,109985329,-1174664465,-836039641,-173955853,172810,183316223,-889191960,-661957808,-851179336,184840993,621145024,-789118975,-389851045,-389349375,-617414374,184356491,1578635,141871674,567099060,1576584,1961769539,-851528696,422479905,79921920,-1275064391,1126288702,516159970,1370771539,-611442227,3415749,-1557264501,-1607595356,-527826918,1532495753,535347999,-15931136,-1269804258,-1591620271,-611448156,3415749,1532495753,62571295,-35395319,-401935200,-227147926,151255681,-1075313803,152812034,-1962755608,-1962219242,-972362954,-400293564,1153827498,767164417,44099593,-1023409688,-854849608,201373729,1170416077,-1207260742,567098624,71110771,-1173981952,-1897330242,-5707523,-661920277,856965306,1107343561,275915213,508034233,183443086,-1275002694,522308927,1052004508,-1655168563,-1053096846,62568564,-9115639,-1910590997,-1106579682,-1665597184,-372114374,61723187,13796304,-1021314846,-1207793478,378086690,512491530,567083020,-33473350,-1172189760,-1057094421,-1161616947,65538394,-1191677438,567086081,1596256626,203949626,985858421,1963730694,-71042590,1364657694,-1948414384,-2010250172,235463974,147046151]},{"sector":9,"length":512,"pattern":0,"data":[-2097149767,-1527575866,-396404392,521076405,29222994,-1572797350,-990508873,-167086976,-2146900730,-1729559691,144227841,1946273014,144752131,204226185,1381389598,1504990033,1499144653,526212698,177290889,177407628,-125049806,1930686339,835331,177538758,285180672,-8190604,-972720879,17470726,178405001,1980891011,-1191670979,801965312,628490044,95733643,494022605,504010146,-678748410,855637945,-961613120,-400228539,1170604338,-350289665,-1794718184,1049296906,1049168940,-405730654,123780491,334035591,-1791066111,91488266,-352254232,145275438,-1962868248,16574678,149227254,-1173785472,162793659,334176717,-402083654,1048576230,1946159782,-34543610,-2080512023,252355134,508632181,-1858681593,-1967171830,768264,1604645884,-1168564474,162793591,-826662451,11593736,184878838,-1274710785,8907011,-854851144,10086433,11804684,204146234,-989956748,204015162,-989958796,204080698,116828533,1946225499,4096026,141819915,-401972550,-18153362,-1559585631,-4718570,-165556916,-16059898,113640820,-1979643149,-401908714,-771032245,1048776052,1946159873,17221382,-2080375029,696894,1048774516,1963068066,117884434,1048772619,1946159873,17221382,-1962934517,-388527164,520617258,149338831,-1174401560,132647088,-352145408,146324202,-133581744,-1017634355]}],[{"sector":1,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127010692,128255899,129435570,130811847,132777945,134154227,135923722,138086444,140445775,1953067607,1919950949,1667593327,1631724660,1853169764,1311011945,1914729583,2036621669,1684095524,1836016416,1684955501,1631855648,1109680500,1663067233,543976545,1836216166,1394898017,611018085,762212174,542330692,1802725732,1667584804,544370548,544501614,1853189990,1867392100,1885433888,1462006373,1702127986,1969317408,1378120812,543449445,1819631974,1699161204,1634887022,1631985772,1920298089,1750279269,1852404321,1767252071,1952541807,611217257,1801678668,1869174304,1769234796,1227124335,1818326638,1142973545,543912809,1851877443,1176790375,1965048387,1635148142,1650551913,1394894188,1769103720,1646290798,1701209717,2019893362,1684366691,1344562277,1935762796,1850286181,1953654131,1936286752,8299,0,0,604638464,1684104562,610758249,1953067639,610758249,1920099616,606106223,1769104416,1092642166,539232781,1769366884,2123107,0,218103808,1648436234,745828975,1952797216,539785586,1869506377,541025650,168624164,1701603654,1819042080,1952539503,544108393,1818386804,1633820773]},{"sector":2,"length":512,"data":[220474468,1986939146,1684630625,1297040160,1145979213,1297040174,1227098637,1919251310,1768169588,1998613363,543716457,1852383268,1769104416,538994038,1851853325,1953701988,1701538162,2037276960,2036689696,1701345056,1701978222,226059361,168633354,1836213588,1952542313,1633820773,543712116,543321962,1311725864,606093097,1128618053,1767990816,1701999980,1159989773,1919906418,544106784,541415493,1701603686,1344539149,1919381362,1948282209,1646292847,1948280681,1768300655,1852383348,1835363616,226062959,168633354,1713401678,543516018,1701603686,1851877408,1936026724,1684095524,1836008224,1684955501,544370464,1701603686,1835101728,604638565,1701012289,1679848307,1701408357,604638564,1699547661,2037542765,1819042080,1952539503,544108393,1869771365,220471410,1851867914,544501614,1684107116,1297040160,1145979213,2037588012,1835365491,1818322976,610559348,1631783437,1953459822,1635021600,1126200434,1095585103,539771982,1953069157,224882281,168633354,544239444,1702258028,1919950956,1936024431,1650532467,1702130287,1663052900,1869508193,1868767348,1852404846,539911541,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76800,0,0,256,1]},{"sector":3,"length":512,"data":[-16777216,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16777216,979304448,1600061487,1600085855,1600073311,979304543,1600061487,1600085855,1600073311,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1846238720,-2147483637,1543503872,1811939328,-1962934272,3,758066432,1879048193,3,1493172224,1767993934,0,0,0,0,0,1213481296,1329791037,1162892109,1127169347,1095585103,1127105614,19791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1274585668,-2044605136,51658208,339543410,-1173195261,162796454,-1064558131,369506598]},{"sector":4,"length":512,"data":[-838962176,1483040,-1593140061,-1633484790,827658,-1207263069,78712047,-913512237,631488771,-268425972,1930428421,203792643,-1593043037,512491522,512494621,512494625,-173863915,872859402,-956284140,169095686,1225505280,-355269455,-274480597,2924810,108314635,337446654,1085803499,-754667252,64654568,201696194,12107918,-2011050697,973871382,1964256022,338468881,-2146176350,1318206,-1574566795,431226894,-1057087027,-1609894750,-1073086372,984884852,67826850,1048640832,1962939421,520494611,-1107255361,-1866923875,530903808,959270,335586300,-1091118616,-1968439168,65876680,218416881,-486506050,984369480,1947479302,1946762486,419838706,-385649652,836960480,537701449,125134396,184878790,987294719,1964256774,458271,-1643722997,-1945991158,-2146787298,-15462338,113687925,-352316400,26536374,338626106,113641333,-352250864,805714598,-1995344620,-972357322,720902,336594630,24176897,-1955240644,-1404466717,-2022360516,-1014244557,-1404486173,343027772,276248892,-745852884,-489561391,-472786429,-454305789,338495034,104471412,359926809,-1404485661,338495034,104466036,-260764647,770392398,-952021360,1323526,16482568,-954304640,169095686,-1594130176,-2095943168,-338620477,-338564143,512355281,149623858,331266704,567085492,-369160983,1095631082,1448203915,104483244,158602285,91490620,-253033757,-12270010,1023588352,1181884877,12114059]},{"sector":5,"length":512,"data":[-165556924,125141186,567099060,848311531,63602934,-851181128,1540590369,62476635,-1260702976,1126288702,-628360734,567100852,567100852,567100852,567099060,-379460775,113704609,-1207954403,78711872,-628299565,94618115,-1597993460,1149768749,-1957077249,-1407967682,755382857,1007252500,-1442483191,-269810973,-1105309354,247010290,1166681600,43903231,1229324917,378250483,520492062,-851640136,225582881,1052039307,1582899661,1055466211,322747134,1025554664,57999425,-401377862,-222428578,507415315,964884,-622091021,184565376,103707648,-611561292,567133070,-1207956801,-1934949752,1018735576,-661869823,82557099,-1411871573,1449612,-1207806022,567092526,1483015,-1945461597,-1593829858,-39649256,152996874,220105740,287214604,178896652,337524363,337460864,114854912,1958776351,-1105261028,1460016160,-1962802200,1595868919,-1962249465,-2129387978,235684038,1049175583,2088766185,108345857,-385449178,-1431567862,-92946422,-348223194,251602442,-1977218325,-2146765786,-2010758972,235484966,205372191,-338492239,567102132,183568070,1086195201,48916,183436942,1363737785,-972832373,-388823887,64588864,-284804159,91379978,-336357144,1324417802,-45090557,133997811,-1980508184,-1156909290,1219821567,512303565,-75426764,124915712,-1995440197,-1273744354,-1910387384,906757406,-1911814749,-1946799168,512440062,-472837068,-472783919,-1992891439,1259615262,-320286157]},{"sector":6,"length":512,"data":[33129216,-651490188,-347995021,-1527541755,-1070338837,186584746,-1173981998,-202894428,873368320,-2083837164,-372174655,-372119087,238807505,74585138,338824841,338828939,567102132,336608896,-385649664,62587018,-850873344,-1552846303,113642151,-1912403204,-1325452352,-1070355968,-4674645,702975,1048620019,1962939392,-853953525,822477345,335585812,-1189871426,-1510801400,-1206648646,567098624,-661976974,567099060,-397391893,463667286,520050708,1094521881,-1173981952,1609044871,-1492742656,-850807798,-1492728031,-973078518,17497094,-1558329672,-274656239,336831242,336666367,184630915,-1173981952,803738385,1527170560,-1679228917,-919382288,-1073069652,-1017185675,-2146766943,17494334,-1940713100,339785931,-388896559,-388896559,-1017396477,-2037680,-15460445,1477711134,378163907,372773931,74714137,74760762,338429498,99140442,-349277696,-386101183,109969448,-13431803,-1403562415,1191197928,-12240346,-203292043,1952013919,585650444,-2144970496,-529203139,119456761,-396886389,82509836,780375,-2013713575,681624569,839052052,16824768,985902834,1913923846,705051144,738359060,-997997792,-225749498,83143,13590029,0,0,168626701,1919117645,1718580079,693250164,760433952,676548420,538978642,1936876886,544108393,808594995,538970637,538976288,538976288,673194016,1866672451,1769109872,544499815,1919117645,1718580079,1866670196]},{"sector":7,"length":512,"pattern":0,"data":[824209522,758200377,909654321,168626701,1393733632,1768121712,1684367718,1297040160,1145979213,1634038560,543712114,1701996900,1919906915,1633820793,658788,1884492563,1718182757,543450473,1296912195,541347393,1918985587,1679845475,1667592809,2037542772,1684103712,1667457312,544437093,1768842596,168649829,1091780096,1936024419,1701060723,1684367726,1996491277,1953845011,543584032,1769369189,1835954034,544501349,1667330163,658789,1850282889,1920102243,544498533,542330692,1936876918,225341289,1850287114,1768710518,1852121188,1869769078,1852140910,1769152628,1931502970,1768121712,1684367718,790891021,794182980,5132099,0,1127153664,1095585103,1127105614,19791,1096563200,1162826837,776160600,5521730,255,3269888,1853952,917504,1397575491,1027818832,796549437,1685069916,16739]},{"sector":8,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567086772,857640494,-18370,184747655,1962934077,-852577276,520039969,-315408847,184630915,235238911,316139807,-87520004,-1195585394,-1064371384,857640502,113653310,914373647,1016202950,1961692032,113718793,218184720,1048582123,1946159871,113647120,234883839,1024834079,567098292,1564377119,175374347,190594688,-402426624,113646321,-1946154247,1356369608,-1203193670,567097344,889596760,280711998,1541666560,57987595,1040187320,58065408,-1543634907,512638548,116801075,1946225404,445835279,116787826,1979648860,358475779,567089588,1044881974,190580470,-385649409,116792119,1946225404,443213832,-488111246,117896719,57999115,906529257,1037960902,184993280,113639435,-973075702,722438,178718455,108331007,-352153624,1048809550,1946159873,-16867,184628871,859608255,1101704393,-109769412,-2011230647,-348351730,163090474,-1205744291,28466440,521019853,-1271132230,-1977496310,842796814,63013869,-1086582850,-1527563118,-401292568,108271446,-384151831,1877475578,235631390,886815263,-382765592,116850310,1963082091,691962862,-546045884,1097744003,-1093110784,-1379976044,687978558,512434637,2139111785,477444609,-494921846,1746283231,1962884155,1816038156,4030529,1072236149]},{"sector":9,"length":512,"data":[366012926,1403127178,-1189040066,-230227959,705212590,1051566785,1442873791,-398682946,-391375792,175379540,108268860,1043793466,860811381,1017818313,1341841421,-772345973,8392328,1883147102,1245612353,1949731646,1979059009,-1074427134,28835932,-1574843095,1049312840,1049182587,915095116,-167034497,-175439243,-1207931713,567093505,-1958852190,-1992194498,-1958851010,-146706370,725492695,1346275652,1051566142,1045632650,91607562,954845438,364898581,1043537550,184630915,-385649409,-1360396718,1465255677,-1202499503,-1064374272,-29458394,141884927,1498962936,-1022927265,-1900019528,654259136,-1437254271,-2147153292,-268419840,-521409166,39684646,-472776910,-1014766639,-2132573825,442367,1192069670,-921965262,-1023212427,-225716245,1957098310,-2080832761,-454360121,1950301312,540835845,-1943081099,775956998,1076379273,-1147474951,1219821567,1219764685,1347625421,505750200,857640494,20036158,-628350515,1512030862,567104948,-2135238002,-853888000,94447137,2925324,64654427,35031507,1255836672,-1992107378,-1912602346,16482778,855798288,-754667045,-1898279709,870550482,-789098304,708247342,922693184,-1030864856,96725195,-2117926542,1949646330,520039955,393494077,-402100248,111287360,880720395,235050216,762439711,519862761,1609047822,256045,-1194661089,567086088,-854851400,116835105,1979648755,-234437112,-1326972662,1016381439,512678028,922684071,922681345]}]],[[{"sector":1,"length":512,"data":[-661782525,1006931688,1952078138,-1492715737,1962934026,512630318,378079911,243859457,-1205927933,567099904,-670644434,872415048,-1877939255,-402597400,116851275,-62809,-389827979,-2126446017,1929412857,1948597292,222079538,-276697739,-947176299,1016308262,-402513176,116786413,234949372,-1160547297,1323842708,300804114,1947024579,9496579,-388764758,624689663,222087028,808239988,154941042,-1952959881,115593688,178718350,91720486,-97529,-1910597260,1225434910,1947024556,-108969713,57868416,854715306,-1242882112,-8656609,-1363192034,-1439693762,-1442729240,326438204,-12204506,1051639296,-400617889,525271446,1023370985,-1327401691,1166550589,1051639551,-397336818,106499978,-1962471905,74604535,1325494760,-13375201,178718455,24510463,23718083,-260764356,109971139,-1910096333,-1274272506,119655753,109971139,-4506061,-850873089,1219777313,643506637,-1559485021,-796180925,1963982629,633506567,594931712,2474635,268436976,-1960437390,51127574,1926249427,1003195406,721973976,16482776,637825808,638330273,-1559488605,-661963211,-1020540788,1096531,190571511,-1207733038,4063231,620983810,1420033536,-389871810,109974772,1978154547,440854534,654273256,604699808,-1763160063,1029422592,-1961521432,-1195146791,78729472,1219816403,-1557782067,1424493223,637950719,178718350,443942,-1070399488,107302,238374,376648,179953547,-1951665408]},{"sector":2,"length":512,"data":[-1096485942,179911828,275179520,494144828,-1993996573,46367551,274655404,1017775988,-351636467,-1441943309,-347480093,-1430244644,-1324393075,-1259613436,119655754,1048780550,1979648769,17221382,1493168139,184297168,184288776,1358556649,109981190,-1591329229,-1073018201,-1912204428,-850807616,-1070397663,178758438,-64040922,-1017641206,178957392,1492809152,508646339,183699190,-144804353,-16079098,106329343,178718350,17204006,-2094661376,790,-1899459577,-669086760,-294072,-625336971,-1710322872,1428065083,-851463103,-473396447,-99710688,-1982123192,-1974937570,1128848007,1224351291,-4521102,-669087233,1964653640,857640492,-9967554,-1342021400,-217647603,113704714,1946159859,1016381191,233556275,184630915,-955877904,-16056058,1532567551,79321283,299297081,1044776646,-1257847040,-1107296185,1105723521,1947024399,-1074885659,11876943,227210635,-348658873,-1408207614,1193642534,91538490,975228032,-1611734332,495712515,1973307207,222080219,300463220,-388926193,-469823740,1044780790,1203046143,861320427,222080201,-169306252,1090745358,1027404779,222037876,-341014668,1027386613,-706207627,1947024398,-1493999847,-2142365836,-1200353988,1947024556,247916723,-5179787,1558789099,-1175933697,854226190,-1406211136,1963896808,1059896058,-853933896,178977,1203052035,-398366280,394991976,-1207957831,567102976,-1070463630,-1332739093,1174861567,41221950,-1073032970]},{"sector":3,"length":512,"data":[1072235380,241887480,-377368949,237502593,243925120,243794048,-1799406445,-1527514052,514461104,1043537550,184944326,1927880703,-8656391,-617477449,1947024556,238741748,808193140,-403258490,-1014578430,-1910576405,-1975635170,520813094,-482688974,-922839181,512660459,-1482605005,1975520010,-1064385791,96458894,41258240,-218101319,-12745819,898362228,-64057,1963801772,3965179,898227060,-1492715581,1962934026,-35264502,1947064296,-104597264,857640643,-1492715714,1962934026,517092339,178724494,71305,202377,-86382561,-1191158337,548405259,24489714,199852865,-1993418249,-398513138,477298611,594819644,1023253224,-402033398,208863139,326384188,178718455,-394919937,234901736,955496991,-401609751,-260898937,771775935,1059851915,-397343253,207224167,87696928,132842101,975577132,1204385029,1357441250,1048784637,2097692460,1998601220,1947024567,-46274553,-109769412,-386058520,784531457,1096097419,1912994691,-851528700,-234437087,516096010,178724494,-1207952966,567098624,378215538,243990529,773783555,-1958652509,1107343576,-953278003,-12003322,-628374529,-399196486,126489033,-115392468,42133699,857640494,20873534,1979645963,17221382,-369098997,-437520758,-1911879519,-1161785640,12060107,-2094936806,345406,117376116,512427335,507184455,-629209783,-402653000,1334515556,-166229245,1963196999,775392022,943418784,192282436,943370305]},{"sector":4,"length":512,"data":[57999684,721600899,1161724874,410255365,33703926,1334511221,-1876825339,-1194773679,567102976,-1878594727,-850460488,-18399,12059506,88449792,-1888108533,1270822795,-2086341883,345406,-373421195,3964933,1973683060,-1430244616,-772290253,-1799365837,1142852156,1261865477,-1207497210,-639107072,158829334,1174702662,343221564,276116536,1270765126,178957317,1341841600,-437559743,222054826,-772350091,-1827764178,512634428,116801075,234949372,639202335,16729542,1074661063,1606040724,645785652,-12204506,-153294579,-386474775,1072234844,-62199551,1043531406,121536550,-344653813,1564377126,57933835,856738024,17492178,624746354,-393487499,1975519916,16443604,-551170190,1896233951,-1396280005,376750090,997000762,126073717,155681538,91194114,-12285182,-773323285,983986688,1966828806,16548000,641340020,58014574,-104727,89128711,-1877808314,1912647656,1862679428,-385452741,-974520753,63605755,-293403273,997105667,125043768,1912639464,-1947407383,313082,997131835,-397999756,-697171844,1004527397,1966830342,-1073042227,1776863349,1354985984,1465012563,-1998039722,9103609,-402585413,647764106,-401930077,1570634119,1499094878,1014126683,922691078,1225198344,243869263,-1993996985,637880638,88348296,1158072102,-1946157307,646457029,637994571,185009918,20874022,125173515,17221414,-1006698485,-382126406,994184448,2101618966,-1193637107]},{"sector":5,"length":512,"data":[1172849001,-1388868843,-1007041544,857640478,958315070,184630913,108396288,184616647,-383778817,105909456,856067630,144778814,1958742795,-1064434168,567101876,113714695,2824,117884454,1476853771,1097447619,872415162,1005990857,1933846798,-388396225,1997214952,-54069497,-167217793,1946223175,-1171854584,2112435907,1976109836,92242709,-2095680509,1199768327,1199768329,1870856963,-92077307,-1948486145,-1142210093,1045051017,-2084556206,276103162,1066130059,973176192,92931701,1613504524,-402629470,1068499968,-1191158337,-1426915317,-1556198751,113721214,15946,1065748166,-1342068713,-1342016511,1046127109,-952215134,4086534,1059895808,567089844,6035082,1527334120,1962933123,-1273525483,1914817870,1090975247,141836351,1045038791,2079064062,1001658251,1936925133,990082955,843674838,-1274247479,-2044605125,-1975684340,-857145532,-1978370807,-991363516,-2044824567,1001717580,1283858893,-1256098817,-9684422,260770677,-835989881,1946352003,939702799,67258358,414843765,193390901,774782081,2088766581,108331010,1045038847,1556025835,688830464,1015030221,-16485376,1396591118,-1174126872,378093356,-1950728155,595978296,-294053,1048778612,1946173002,-402031600,45746142,188410168,-351808024,1426507433,113704704,-1274019749,5618193,-397401651,-27785282,-385649216,117375186,884883035,17623103,1065223926,-385649663,116785288,1947221823,932821512,-350012696]},{"sector":6,"length":512,"data":[1343654678,169249087,1377209152,202803519,878099008,-1591532824,-1073004724,1572822132,548950078,-1957123296,2041304,-1014247286,-388823631,-259387612,-372191350,-1048318670,1694072912,-377486478,250210404,1061817995,548935907,-372135136,-372119087,-372184624,1221140106,-394212480,-1070395286,1046330026,1074665097,-399220806,251536063,544554585,-1572971872,-588759463,-2045837817,-166234817,37715462,113643636,-401129594,116064377,-399219270,313795219,-855616070,-14161631,1046152951,58064895,-1593921559,104480346,57949785,-1173905688,915093039,914964059,1692942359,-1976126430,-855614442,-49887,-138215051,-1545340959,378093593,1169834011,575007030,-1187095105,-1527578616,-1180032848,-1527578621,1386922035,-1992401478,-1170207210,619197535,-1161602526,484980397,-189274078,-1022934296,-1103496774,179044480,-399674176,222037824,1448224372,-1405806406,1946631144,1963801604,2132819190,1448762899,1929889768,742293518,125042752,939702878,-1173776407,-1336330984,1560688672,-2081328128,-247790655,984614773,1962820664,353888739,-398853702,222037744,-1914120588,970504711,158584436,1076641408,-352160768,-2110354497,114485311,-105247428,-1337363399,918796858,1946240056,7126847,-852950600,941666337,1946184966,129674287,121497654,397682292,-855614278,1979661345,96139530,193456181,1358934098,1476768232,24428798,1139301059,-262870751,-1022819351,-402619970,222037624,-105249163]},{"sector":7,"length":512,"data":[150137145,-167114264,37761030,129631860,149088566,-851640136,-1173195999,37565720,-1160940544,-386319912,-907474119,-1224292856,-661979065,1043668622,-2144415181,4699966,-1959877003,-1270983666,-1960719041,514122696,1358902023,-1359865168,4034904,-2147060480,1964703613,1237854986,-164755698,1397208854,-1275067973,1528941888,-1053095310,994688116,-1023314495,-1207959109,567100416,1971372790,106424818,-402619970,646579672,113639516,1006633052,-2011728883,-1409262554,1966750892,96397319,108268860,-382309958,-1528297416,-1090052603,-5242795,-1413467222,145795755,196691882,-213929984,1059895978,567089844,-1275046470,-383660783,2028475623,256005,-1274711319,1344392496,497280050,-528066496,530834482,934525504,505425641,-402252018,108135283,4030502,1927809653,-398544896,988479578,1191545382,846512138,996935226,1206388084,653126400,-1152973430,-1073071580,-1014817676,63891459,125044538,1962950528,114420721,-16314793,123666775,520603371,975223491,-1340091671,-1341002947,-1609700581,149633899,-348427616,996777987,1460084230,1075953490,935115434,1512025832,-1262287009,35769625,-398759930,851705826,1059897042,1201733259,-1270807490,950053690,-142104002,1074675337,567101364,1932812218,915192323,-1021348120,-1174401304,378093356,1606041614,526772276,1544981187,79858176,1967144000,1191576070,1354825278,-1270927426,1931595079,-383840763,750716382,1490520895,-1599391052]},{"sector":8,"length":512,"data":[-1012253128,-402490904,712247418,-402501656,-1058536734,141355010,376716092,1947024556,49473553,91503420,1946439656,49997829,-1070339349,82363307,69855232,1031808707,-1173719808,118372503,-320266482,-2095118818,-141883921,-2130528280,1946222585,-1090056474,12205960,-2016335103,-1163594799,521024579,-1155610903,12058625,-165556924,1282703554,1947255542,891926599,-1031003699,-852156232,1002474529,-1271564336,1007734031,1007252995,-1274711033,-1022309120,-617411660,263459021,-729149235,414632702,-930365389,-1274609477,856739078,-1275021358,-1022309118,-1405476162,-315438966,-1968437580,-501101104,803783673,-2142351865,58014268,-1207958330,567098626,-661974926,-851181384,-2134706655,1051987317,-541449779,506587192,848308715,63602934,-851181128,62477089,-1260702976,1126288702,-1269040670,-1272853179,-1272853179,-1272853179,-1910387394,507392798,-1560274783,-189265155,-1899278334,641610502,638229665,637540003,638230177,637536931,638230689,100666531,1044579982,567101876,642561031,-854918496,15722529,1442938344,1577151464,-389873291,1642594643,1340823041,-402608151,-126615208,-1403593933,259263804,-143311556,1015071742,-17795827,1592585159,108317694,-382139206,-397212348,-27590480,-389843761,-544538314,1442910952,-1514217593,309560,91596787,1097336518,1593543425,222080086,1239942516,1593240321,1097350784,-392989696,109970052,-1447084493,-1260418294,-2145268455,1966735740]},{"sector":9,"length":512,"data":[-402355702,1093402896,637716355,183058057,-1574518530,1074006772,154640934,-391316597,125043288,57937212,854846378,113683136,1325416808,-348223194,512672522,512638515,-164426747,1946172544,1065926560,-1073042772,1136327285,520494644,521981672,-1715542293,-1107039432,508967070,1912612328,-386430192,-142147428,721485032,-216070450,-1017241692,-348612162,949927427,1912604136,-1870926862,3008764,1043531406,84315686,1375679244,-391358634,642187376,1979663674,1609818626,-881567394,5695569,1031808601,-102730496,-1962467645,1105745918,1459940096,1493188584,-108529365,222068931,-391316876,1239941176,1966947328,-2134981648,-1073042432,-2115438732,-1022542847,1043531406,84315686,654258956,1946172800,452846,1035007467,-1070464277,-234815303,104514478,141704058,997918266,539755127,-903938258,1397867336,-1962916632,48989145,846396219,-397192880,-2091126813,-75431229,74612736,-1878332423,-338492239,-850742205,-1912169439,-398576890,-1660424237,108222553,-382372166,648676236,1479,113465691,1220578384,-1591295858,78708739,-930357037,516097880,1043537550,184499840,-227270912,-1271065158,841076027,101050560,1045078467,1045431819,1966523322,8502835,1006682088,1175417869,1966750892,-1310173680,222060032,-68679819,10086651,71362755,1076889334,-1274645246,1931595067,939703023,-1021620760,1912607464,-851856372,-1158384863,1860712481,456714245,8502979,1006662632]}],[{"sector":1,"length":512,"data":[-1960938483,1911074006,1007252480,-956926707,-1023344828,16729286,5695574,1947024478,972667634,-1007042509,1929367272,-1274645234,1931595066,945470194,-402315032,-1077732622,-1031127787,1077690372,100796021,-1057079737,942049962,-1422217154,-141877498,567101364,521067634,448418499,521018938,521849576,-391330982,-93061116,540853070,1027406708,742193012,993850228,154988404,171764596,571843,1948269740,-119363071,1948269740,-1595897325,-2035664000,45198020,1948269740,-119363069,-1012219854,-2130938458,1946222460,1358294006,1464929712,-4588917,119408383,1170648818,-1996029697,-1170207210,1491612767,-12204518,1594126861,247683161,856067615,895072830,1547599910,108265483,-1173816344,-236373666,800346113,1043801656,792462452,1547436660,378192728,585629788,49342719,1076889334,-1273596670,1914817851,74704912,1572814768,768256,-1070421261,-2110354493,1149914687,-4331265,-231005068,76164212,1962914536,-219460093,998285392,1476478008,1149897844,1949973759,-6690799,-1007091083,-1275067194,1931595067,76202775,-100694296,-617416843,-1274979194,1914817851,22841580,1174671592,1076770441,-1207935809,567093506,868455363,-20256549,1043793466,-880675979,-398032896,222101180,-398006412,-1782579880,375099,1974399632,112649,-670310189,-773073941,-382309958,-1964441316,1958742528,980140025,-1363228365,1192069694,238742755,108347053,1065488009,60794611,-1576695047]},{"sector":2,"length":512,"data":[-1958265275,-1639495907,-1847010187,1158084098,192151870,171853984,1010714886,-1095404289,1307065492,-2110389250,8503103,-1431516877,57937212,-1997018303,-167739378,37635334,233311093,-1173981952,-1444333885,-371982592,-1084758030,-2135031679,-930436096,933293362,-234865602,-960274514,4081158,1045632650,1051530888,1076299462,-1380298240,-365303746,-33066150,-348117242,1539280897,378429,1076313728,-352095232,-1008168938,1958742792,277771,132842364,-319034992,-393198613,109969900,1236549187,109978061,-31048141,638253318,184485574,6078208,1387919243,-1163529472,96157019,1258338316,1076299510,-385649409,-1047729587,1572655502,959381255,-1172369858,937964763,-414652136,110020915,-1799471565,-1392604356,74785340,-135543298,-210432708,1017968523,-32475870,-2012449587,-1040300283,1965178028,986578678,1966828294,1963210808,-31020026,-401929722,222100788,96865653,113714701,592651,1459656937,-1962210369,1017906911,-395807731,1668611356,1043793466,-341156492,1778793197,-1960872645,-50403106,192220476,-955447866,155049478,1466231552,-1958879553,118359775,-527775509,1954348160,1764112902,641692987,190594688,637891840,184297168,1543962150,-54335477,175377724,108297276,996738618,520494197,-2046685975,725266656,-293921,942016372,24510277,-1430244785,629694215,234651719,-1040317068,654258153,190594688,-1089178624,-1993995392,-1106543042,1978154132,1017818364]},{"sector":3,"length":512,"data":[-1996851955,641504014,190594688,-1022947840,-1409253186,-2136742862,-2110355137,805750335,113639488,-1962917844,-1958772170,-1958772722,1363010518,-43259818,1530889379,56221227,-472478773,-391362261,74841275,1076627198,91569980,1076891264,1963342338,-2147125957,37761038,1962677224,923154950,1322546494,75939890,1963801670,-1996191742,-1992326602,-1019248626,-1409253186,-143343606,1006633960,-391331059,74841060,-160089284,1377747790,777081680,1043537550,190594688,-166890240,-16054778,166200949,5564416,1515739993,-2144419041,4054590,236910452,1038006815,-1958936392,522309080,-661976206,1200029616,1614360,-400617789,1094516857,-2146929664,108281343,-382366022,414907900,146741,1035662708,343349,733670772,-35198667,185286272,-2143456256,723518,196747124,1023522827,1528941904,-768406158,-661927629,-851311944,1024846625,1962475525,185318056,1018480947,1528941904,-661939342,1200029616,1679896,-919383869,172076284,737834432,1942182129,1364434173,106256214,-1269673954,1495387481,893237851,1946173757,-1950119164,1560747985,1532583519,-689388643,773770239,1043537550,184630915,-2130283520,-16056002,-1329389585,512630273,-6144461,516103946,512634450,1589263923,-851332085,191805985,567099828,70445146,190645958,-1161617664,-622315260,-383840513,-392364772,1381040005,-398893382,521076681,1511343592,1094557016,-385649408,1273625856,857640676,1560739390]},{"sector":4,"length":512,"data":[-853953525,100806177,1856125800,190757643,-466483320,190916232,191964808,-919350389,567106228,-661932942,567099060,-1274319174,1914817882,-1260876891,-400437954,915144324,1048775550,1979648769,17221382,-336592885,-64585680,915144202,1017908094,772437116,996738618,-1981217932,18254592,1023457292,57876941,-1946197015,-2030063400,413276231,1016381184,1015073075,-385649395,-1607532735,70794089,1015084404,-1393527684,1947024554,2084323647,976095092,1966827782,1170613998,776539647,1016270472,2117503310,51809035,-919383796,-851705672,-1502455519,-5187445,-1575467130,377946137,378080257,233507843,-1827764178,914968124,602409854,-383840514,-1159142212,20873726,1978662923,17221382,-369098997,-1943084226,104739614,-1899459554,-1160212800,12077240,-954086088,218136838,-1845049856,113737788,218184851,-402625304,119472492,-1948677173,-1295348797,-2030897564,280466116,189315233,1209365696,12001908,-402638360,585629739,2484224,-1023399960,-402646808,501743643,1435648,-1023402520,-402648088,48758795,-1964053760,39315653,1220780227,-1047870550,-1023259416,-1073035638,1122501492,-389903870,-1094516163,-773324671,1947024632,-1874203901,-399049542,1575490443,923843080,-1206680856,1555707904,-1960719104,532327922,142100535,1949773498,926792195,-1273796888,1016248842,-402652487,567083532,99141939,-125966334,-2143513410,-1435235012,189315233,1210741952,1525170292,-399871488]},{"sector":5,"length":512,"data":[628228233,1912619752,8382496,1088953202,-1401982464,1786055996,567094196,1651884042,2484419,1659395186,-396922368,1383202851,1912625384,2091085,350803947,-398233088,1047658569,-352320792,23849189,-192228750,23324867,-389819254,-93191843,-402166599,1318846505,-2146143075,259263804,-1973111981,1541666500,1055443083,-1965329919,50377924,-373636152,313649206,-1392564503,-244043972,998245946,104524660,-445367434,-2118204423,-137435136,2087980348,-399623493,-1947664146,-852708352,235296545,1046331143,333971891,-1430244608,-1992401478,-1170207210,1760048223,-1017182446,-1007237750,-1223527041,1913404513,1953543942,168569858,-1342016064,280449804,-402594584,-1047920599,1526783208,-2134641069,11998069,-1979705112,13363398,-1438072416,-1024933238,-1007265024,-1967622785,-1597789497,-1012250427,-399023430,-2065165809,-1161219073,82327415,-2078373102,4450363,930276724,-768357749,1947024556,1958951462,1975990788,6547494,-192274062,1947024556,-1056556526,-401312440,259129425,1017959562,-1274514163,169987373,-1163103040,-1125632177,-1263604975,1016248842,-402652487,567083104,1508428083,-154015744,-2143513410,-2022437572,1912609000,-1393259902,158647098,91539258,11728974,256195,-389819254,-93192176,166256778,-721128960,216041994,76202753,-109957076,1928661564,-725399820,230983178,809250864,-953548171,-1012203337,512672682,645938739,150801243,235625230,1344193311,857640494]},{"sector":6,"length":512,"data":[-2034224578,168516614,-805014336,1477114926,49951,0,0,0,1381061456,-962832809,4199942,1194264263,-1070333953,-1090173767,-1426898583,1185744583,113722413,17451,1143539399,-1799487488,512630332,1048591923,520096519,767496309,-1964166586,-29584626,-1096485951,-1346419155,-1994345658,860303670,1728497389,-236453823,251914485,-318043789,468193652,-972231936,37754374,1929384424,-1660621862,-1660752904,1516199673,-1017619623,1465012563,1726520406,691962624,1333608516,512489354,117392425,1773683753,8579137,477127,89098496,-1962772600,-1991856842,1463157559,-1980290239,915080055,2005485361,-1946711287,54963518,754942457,722828613,-1527513863,-1985347408,-1656312514,-1207243784,65732609,-1660943688,1516199673,1354980185,-1671999149,1946273782,792625948,460652359,1194270347,-398366280,1862860824,724437255,-335962812,1143578888,-1656279133,1532583928,-1974418600,-167005245,-1023190045,50067,0,0,1448235347,-157526697,54618886,-1008139404,20768768,-1203293254,567089664,-218044410,1197344396,1197489801,1197620873,8436487,-398632002,-697171381,113759883,912869299,184648680,-1955892032,1029423080,1097414283,1097600651,984927787,1912797571,23345157,1201670260,-1421802434,-1414724117,201517443,-2133816800,1688232170,-108811705,-1408601599,1678129737,1092514887,-141863346,-850984776,1593740065,-2142804832,158597181,1946172800]},{"sector":7,"length":512,"data":[-118798589,1963210922,-481737214,-375065854,116785289,1963213163,-1959020773,725707798,-2126419690,-398631998,-393543526,1978469279,-210526713,1894498355,-1958913089,-1958256114,105340982,1197356799,2088773127,880094722,76162641,-1977219704,1166541124,1197776897,1442989448,-2146137562,-360701750,-2080928928,12059590,-400437945,-251397925,1593740110,1493419651,516827911,1197356799,-1527514081,1688227615,-12240313,-1096154764,-919386266,-1073042772,-980682123,1583308189,-1017423526,-399527856,125105231,1688362160,-1564256185,-1017624732,1465012563,-471294890,1185923071,1197618827,1197487753,1580662558,179052359,973567168,-1442614073,-1994394389,-1975033290,-2118110248,1950789631,1197776925,1962886458,-225727999,-1073042772,-1346700683,-1291401402,-398930873,-620101616,-123927436,-107150613,1499094878,1381090139,1385977431,1941895819,-2133707961,1966735741,-2146072056,-360652830,1191229504,1918509517,1292607,-850526024,-969117151,4678918,1197868742,3729408,1197803066,1705120638,1196539463,-1186502977,-201588723,1946696868,1292554,-850460488,-1596296415,183191397,1202919051,-1207063832,1587347456,-1017554337,12080727,1196539648,-67105351,913682162,-1106907261,-947176567,-1492617817,146277749,-1960580352,999145208,-1492617817,79168885,-1961628928,999407352,-1492617817,45614453,-1207702784,1599995904,1364414659,-1672063150,1097406091,1097612939,1946172800,63605550,725708302,783303119]},{"sector":8,"length":512,"data":[-1951468804,-2083902513,-885324565,-24439425,-201526645,-1331015772,-1431655873,-1649803088,-1660752904,1516199673,-1017619623,1465012563,-2120460970,-1325050941,-1192504572,567101440,-393526158,-1178563066,-13433532,-213816898,688819108,-1094700220,2085175657,-388396252,-1752433432,-701808279,-1961391834,725707927,1468606166,1922534147,651569985,-351709303,-980744231,-107150101,-123927829,1516199517,-1178379431,1572732939,1060940800,-102628747,1962998147,932035120,-1106473240,-695533440,7865543,-854848840,-469062367,-1310136460,975178993,1966835718,104514305,-392414329,1973285267,-1173113648,567083100,74760446,-1007635992,1555700404,-1272853248,1344392465,1492165096,-30074694,-1170377536,-169265859,9758963,512627314,108346931,184290944,645972737,-1006761220,1946165480,8567305,-370040600,512684351,512376371,521014012,-1174281344,787167659,-1091322903,837288065,-1022542607,-1207938584,208810753,28444021,851648973,-1021194798,1979703528,-843042085,-1160082911,-790087277,968538635,58055434,-382094406,535301059,771864576,58002034,-20766259,-1021194808,1979691240,-850086741,-1160213983,-823445088,-402619970,222097620,229452404,1866276896,1024488558,477455983,1008733356,202732902,839052134,-661938240,1022406632,-1962576627,-1007116605,-113740358,1554010307,1010828288,-1610123968,100810311,614611816,-507881408,1975519799,1046331159,-574695541,-528160713,1060421199,-218100807]},{"sector":9,"length":512,"data":[-1430244444,1075975817,-382216262,1460013851,-2000746738,-852839361,266901537,-149428224,-1163214798,283653187,-1017182453,-422449013,-964562941,-645187899,-218102855,-1440698204,-1547684925,1168326672,1083286337,-1556196702,1319321174,1096262462,-1572852061,765607507,1083220544,-1572851550,1201815699,1076666945,-1572827230,1235369237,1044816449,-1556026461,1403208017,1089315393,-1556001374,1235369552,1095737918,-1572779358,1537425742,1095476030,-1572976478,-1918680948,1089381184,-1556074077,1923301524,1059889983,-1572935261,-1555545776,1487028360,1082892862,-1103090526,512360577,117324663,113656167,855719958,1089388525,-1677155096,1095763710,1954596854,1325843973,-940179135,151876609,155078190,-1656860626,-672451726,-164728163,74809543,1044973310,1096261974,725675710,1077002182,782485251,755927104,-1527561920,1076903560,1045300935,-346161152,1329496230,343212353,1044987520,-2146601727,37834814,-1262877067,94431541,-1572778080,-523223480,1201856720,972667457,171854240,1006924992,-385649150,750645640,1963015232,1044881442,996673026,1187396276,834601473,113748800,15950,33834694,18118,-2146992664,1963065726,943370262,1967141382,72253454,1077133058,18118,-1962450456,1031799422,-1172998912,984627202,1979598136,4638374,72253442,121956358,-1590246470,-475447728,-1450150529,343146512,567104692,857640478,-1545326018,-1205925117,567094785,-2118193869,1998490112,1089388347]}]],[[{"sector":1,"length":512,"data":[-167279384,-176881209,1045310985,574967,1048579189,1946173000,1309066757,-1588198335,-289521321,-1077531840,-956088172,-2009034333,1094750222,1049142515,-1956757357,82831557,-386965272,1625818345,10742016,-1174228504,915093022,914964059,-588759024,-672863992,1044921984,-1168149248,378093716,1304051720,147187764,-382396230,-1588198282,-289521321,-1077531840,-956088172,-2009034333,1094750222,1049142515,-1956757357,76802245,-386988824,1048577165,1962950216,-1564462325,1453538898,1045668414,1095054985,-1120070209,2011709583,-1858696443,1048625984,1962950991,-8591101,915139891,512377157,-289457289,111667264,-940119182,-152669056,-294321721,-1073771544,12058716,-2145268439,376766524,-2143251295,41171708,537673904,1554145324,-401492992,-392429305,1956506737,-12261117,109494322,-1073070504,213453684,1064484608,-213963586,-1564462428,1049313609,767443089,-313399233,1044921984,-167283456,37786374,-1799745420,236357952,878688832,-402137368,-907481849,1212055552,175439934,1912706536,1376175621,1048576062,1946173000,41412620,1082918646,-352160513,8775692,113663861,-352305581,-1942060896,225771328,1095054987,1082996361,1082918598,-1947388929,-1975433930,-1086621922,-756530962,-2134379003,-940166540,-386894591,-1024917832,1051574251,-852950856,1064549153,-1958826306,-398421698,1048577069,1946173000,1225180677,1474887745,-19207681,855708136,1045603008,-1572972893,915095123,914964621]},{"sector":2,"length":512,"data":[149438789,-385649664,434765381,-166546177,37786374,-469105803,448024771,-851497798,1555716129,169987328,113689536,-1174389178,12075156,1931595069,-249042927,4275612,1035601525,116516917,-661929059,1089150601,-849936200,1360431393,1393461569,1140897857,-494919219,-317290368,-2146601920,4278846,-2017851788,41478457,1089150603,1045696139,1045829259,242600491,-2147391256,4279614,244016501,-1910620588,-1270991586,522308927,-930392718,1048596963,1962950893,1312718855,460587073,1049350539,447757910,889622022,128905790,117310837,725696070,63605713,-1992403442,993941006,1916687374,18081804,1095581312,-351243008,-314670961,125042752,1044790912,-1954450432,-1270813922,-1021194946,1045642880,-1594329856,585645646,-1959496702,993941022,1967019038,13297673,-1007091084,-1910580429,-952224482,520100359,1045825279,1095304902,1095475456,1045825027,20776306,-401968128,-696975200,1095450243,-1954712576,-1958705122,-1958653170,-2143203050,4278078,750006644,-506453555,-506338864,-506338863,-838144304,-852839343,-1125547743,-773224953,-790179615,-790179610,-2132356890,-703987499,-2091256438,712900859,-849935944,1107474465,-896806349,-804576819,1140897948,-1269685811,1512164670,-150243939,1962967234,2025477,117376235,117325403,-1007141293,1082662539,-385892120,113704968,15963,834333931,-851332032,1218495265,115888190,104486912,-960283064,4279558,1045577344,-385649664]},{"sector":3,"length":512,"data":[1156055171,53012481,1048581749,1962950893,1212055567,-1262878658,-966888395,21055750,-2143485512,4278590,1018430581,834324787,-1172189888,719861134,-1556188433,113655944,-1962852782,1140898008,378020301,-1024049014,-1607306112,203701838,1319111029,1241909825,2048422977,1946724384,1140963356,-897518030,-1978234848,-350106304,-965350644,71388678,1095175808,1228832772,494207041,1963106792,-314671080,292880448,-399122246,113706139,15958,1095567102,-2011264061,-2016857280,-482454002,1258749939,1228832833,1517617217,-1910582733,-1270991586,522308928,1916099002,1959275295,-1979255085,343179328,1082787574,-2146798304,4278078,1950989941,974502587,1045628670,-2147204376,4084286,512432500,-75284344,-1274774016,-1172189890,1102331953,113648077,-385860014,-768345294,28889479,-2145268414,4081214,1085587828,616767949,1343257100,1252132900,69490753,138497698,-1606334714,-1073069746,742293699,209059648,-1120070209,-538427348,-399775744,109494322,-1073069941,-1964440715,775326464,1055506240,-852950856,3964961,1170605172,832666625,989626432,1085276788,1095634570,1613504524,-1606489694,646594608,35995795,1958742530,1975794195,1329496079,141819969,1082918654,116113458,-1004404172,101378256,1218593103,-790572994,1095213792,1095384704,-1574669056,-922074802,-1073078923,243997044,333659734,856038064,889622271,128905790,-1991309963,-1153542594,1048592173,1946173000,1064549123]},{"sector":4,"length":512,"data":[-1958810946,-1186976194,1017905160,-1979550401,1948269575,-498882047,-1341935119,1946433568,998285331,1060940970,126485109,24387644,-236829782,-1012219854,33834742,-712301963,-1207582077,567098624,-661973390,-851181384,-851528671,-2134706655,1190544757,1064567812,-2147133813,41171710,-897564494,1625980960,-1947742232,96633813,-2147189110,-8386841,-1961396986,984810102,1979604024,4638214,-972690686,1308688454,-8363285,-972720894,-1023410106,-1259537176,1914817851,872057635,1237879744,-1605390606,1187397176,1161429504,-1442482945,16795334,100945536,-1023392280,18118,-167477622,-210500409,33572550,-2147322229,678690876,998252170,544480312,1547188915,-972720898,1308688454,478599986,988586216,141885276,567098292,-1082975098,-532354567,-2147320183,-1593048762,146357121,-2035617024,-997807420,-1426914383,-1012219854,-1799466927,1077002048,1044844170,984672650,1963017272,103460103,-930464920,1161312944,-1979026175,709314309,-1975818234,1978219240,-413865949,1149967988,-11695105,1489052240,104469109,74791808,149677066,998247994,-318111115,868440408,1463716288,1096458817,-1975428190,861379832,-571953975,1007908326,1022784544,-2030930935,172055302,-370510656,1048576291,1963016214,-447027197,91603770,-343879808,1963801812,17099011,1043793466,65602421,943370753,-401378028,-391380672,1049166140,113656151,-385859239,1049165989,113656151,-2147466919,20977214,82321269]},{"sector":5,"length":512,"data":[1343911399,37636000,-398759930,984613136,1476463592,1096236681,1096353478,-2147075584,-32934597,-968795642,-12494586,58015548,973262720,1966830854,47153201,1097285248,-351963904,8382757,1048577972,1946173786,-1342000126,1495673407,-2031455679,-2046172191,12249313,-136126074,-1729568378,-2145290778,1048577231,1946173799,46659077,1049186165,117391703,113656151,-956350119,4282886,-1409250328,1075199616,-402426623,-639048584,1009939685,976122893,1950234374,1958951464,1966750756,373194767,91554368,-352296984,300631762,-1157671191,703150552,-561452568,-107126962,1072385731,-2130587776,-394264371,1011279248,-1341557491,-847140352,-521453568,-402641944,1460069408,-1090056623,96025493,13467904,1974399552,-1736437,112831,-401874733,-1341694119,-1654674944,1101710328,1096353534,1173699,911563,-1008388376,-1459173586,-352320965,113716743,80809,-1957342468,1347637740,503731799,-1413544178,40799035,7768894,855819651,33155291,1948597420,1958742550,25749509,-1947667733,1577524993,1499158623,784554589,1000343238,624733184,976151412,1950053894,104476232,-411813001,2013674030,776107067,997787194,809253748,960249714,809253751,-2094133387,3908670,817104757,-1473869778,-1590800325,179911588,1524758272,-360647118,784466736,-348412765,113651372,-352240736,243281572,-352240735,786375836,998180410,976100212,1950055430,104476189,527711101,2114337326]},{"sector":6,"length":512,"data":[-400133061,1474888019,113716991,1063846,-953258773,171681286,-396104960,-1031143122,-402599448,938017075,535320319,787647233,1000607371,192203019,-1606516690,57999419,1442850792,1958742700,11069445,777975531,1000357504,772568064,1000607371,57985291,1577060328,-385813784,-768344330,-1073042346,-347995276,-903127304,1743258486,-873938176,868387584,1048587986,1946172321,12380163,-1959897517,775661110,1000607371,1577061352,4253787,-385830168,1347026614,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,3907646,333972341,184254464,-1014824078,-2020987386,-397331408,-1017577454,192858379,1000906798,321617,-1007033767,268403114,-1023314884,-2026132551,1959734223,-1959898122,507226398,-1413865714,-851397573,-401968351,104720457,-349539328,1959279364,64654116,440369368,1528765300,856067630,895072830,1543960102,108330763,-1158891544,-1377224354,-1017438235,-2081191082,-1958870333,1578404658,784348099,775659682,775659938,-1338268509,-1465766368,49979,858927408,926299444,1111570744,1178944579,1073763109,-2009839820,542319935,137644288,1815684416,877723748,1074544650,1543525157,155192884,221537024,1952530954,1713399907,543517801,1936943469,224882281,879165450,1850280461,1953654131,1936286752,1769414763,1646291060,1751348321,1818846752,1628048741,1881171054,1936942450,2037276960,2036689696,1701345056,1701978222,226059361,880803850]},{"sector":7,"length":512,"data":[543449410,1835888483,543452769,1713402479,543517801,1701667182,-1073739251,1886733364,1633905004,1713399156,543517801,1701667182,544370464,1701603654,1953459744,1970234912,168649838,1177869568,543517801,544501614,1853189990,658788,1632646407,1847617652,1713402991,1684960623,436210189,1667449141,544437093,1768842596,168649829,1228221696,1718973294,1768122726,544501349,1802725732,1634759456,168650083,1328889600,1864397941,1852121190,1869769078,1852140910,1886593140,224748385,895156234,1701603654,1701995296,1869182049,1919230062,225603442,897056778,1701603654,1851876128,544501614,1663067490,1701408879,1852776548,1763733364,1818588020,658790,1866675600,1852142702,1718558836,1936024608,1634625908,1852795252,1936682016,1700929652,1701998438,1886348064,658809,1850291638,1768710518,1768300644,1634624876,1864394093,1768300658,1847616876,1713402991,1684960623,-503313907,1681466677,1818838560,695412837,1886348064,224683369,906559498,958742544,1766203492,1932027244,570433577,624957238,543452217,1702132066,1919295603,168650085,422982400,1228938048,1818326638,1679844457,1702259058,1701868320,1768319331,1769234787,168652399,1127631616,1701999221,1679848558,1702259058,544434464,1814065006,1701277295,1635131506,6580588,1951610475,1701538162,1797284128,1998616933,544105832,1684104562,539893881,539893806,1228312064,1818326638,1881171049,1835102817,1919251557]},{"sector":8,"length":512,"data":[-1358951923,1853182774,1416523597,1700226421,1969771620,1399419462,168653921,1635151433,543451500,1702125924,1127668224,1701999221,1679848558,543519841,2126697,168638187,1702129221,1701716082,1633951863,2123124,1831352062,1684286829,695826733,301998138,1684285495,762146093,975796601,924909600,762935592,1680698733,540682596,221720576,1986939146,1684630625,1835627552,1056972901,1920287543,1953391986,1835627552,1936269413,928055328,1850018317,544367988,544695662,1701669236,1677729850,1701986615,1970239776,1920299808,1495801957,1059671599,540506368,1380533308,538976318,1295486720,1329868115,1700143187,1869181810,824516718,807743076,-1694473166,524295479,4400448,1075918777,1819235872,543518069,1679847017,1702259058,543368480,-1073712347,574628919,544434496,1935763456,544173600,1700946284,1850277996,1768710518,1768169572,1952671090,226062959,938344458,1650552405,1948280172,1919098991,1702125925,1919509536,1869898597,168655218,1228407808,1818326638,1881171049,745043041,1953459744,1919509536,1869898597,221018482,544370442,1701996900,1919906915,1869488249,1835343988,226063472,941817866,1953723725,1701868320,2036754787,542002976,1327526511,168642118,540564480,1701996868,1919906915,1718558841,1394941984,1996491277,1312826680,1632641135,-1895798668,1413566520,1380990280,1414548815,1297040189,1128616019,1986939197,1684630625,1769104416,1763730806,1702043758]},{"sector":9,"length":512,"data":[1751347809,1952542752,658792,1850292397,1768710518,1701060708,1701013878,-838858227,1650543672,1847618661,1713402991,1684960623,-520091123,1853444920,544760180,1869771365,658802,1175271669,1663062607,1869508193,1700929652,1936027168,224683380,956694538,1970499145,1667851878,1953391977,1835363616,226062959,958398474,1702129225,1684368754,1702125929,1818846752,1919230053,544370546,1769108836,1881171822,224751721,959971338,1852727619,1679848559,1768038511,2037539182,1634038304,1713402724,544042866,1701060705,1701013878,1610615309,1163018809,1763724097,-1996480397,1380275769,542721609,2126697,1128610197,1763725128,-1577049997,1717989177,-1392506355,225341241,968163338,1635151433,543451500,1752457584,544370464,1701603686,1835101728,658789,1850292668,1768710518,1970151524,1919246957,543584032,1634886000,1702126957,168653682,1161419264,1919906418,1769109280,1735289204,544175136,1769366884,168650083,221903616,974585866,532488,453261852,1112158811,-834399687,304825638,1209151303,877400609,307187218,1360157520,1901335079,296965663,605496671,50336316,810831694,1380256264,1280462674,1279612485,1157957876,1414744408,50333831,55724356,1376128269,1296125509,272367941,1313165827,84950017,1396789829,266600773,1279607811,68150273,1162893652,51426305,38618450,1124335876,56184911,1342514945,1163089217,68146946,1163149636,69098242,1162692948]}],[{"sector":1,"length":512,"pattern":0,"data":[52387328,5391702,1443041706,1409371215,1145242129,85352705,1229211715,375456082,21253378,1292179108,1380533323,35038209,-402570158,1297220886,22169924,1107629800,1262568786,103154688,1230128470,905992518,1163068198,340460116,1330794502,39080013,1342444593,38294593,1157894852,5523800,1124340739,56185940,1157895070,38750275,1191454145,38753359,1392839017,1413892424,34152962,-536721847,1329988359,193987154,1397506819,1258240,1044151361,690563108,1145981184,724380239,2053205068,1481851716,741228334,2037395002,1329802862,1480928845,1094856261,1094866516,2119504]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[14703181,131080,4849696,16318463,-1344011776,2555904,30,851969,79822887,39]},{"sector":2,"length":512,"data":[1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568]},{"sector":3,"length":512,"data":[329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,-829665028,1525210766,1913046790,-16705526,638218758,-1560280415,350751348,-401772027,141690321,-1111487656,57935857,-402360855,-1326971675,55109635,-353832334,-803304957,-388285943,1048577050,1962871258,-786527737,67954697,-1174300952,512363216,149424592,-2143718909,-16131522,1622806900,-786527733,49670153,-1830279566,-399084284,-773324165,178102528,177800763,1956724339,-1408881910,-1475986678,-399412726,-437583374,-2130115656,1946865914,151631875,-1173703517,82511710,114342544,-1174138904,166201712,69068804,178456262,-1873614077,-1593766936,-1331492240,-2030063606,1007327238,-1173261057,512363360,-2065167919,-390761982,-982186975,990556321,1930079238,17033221,1889661675,179086090,990551457,1930074374,13297670,-2080410903,696638,468190069,2091008,434701173,42658047,-1976368712,-854991850,178495521,567102644,-402028870,-1161624692,-1847064241,59697155,-402428184,-392428234,1922892676,-1168981014,-1717499503,179610378,-1559585887,-1499395402,179872522,1510169576,-1269673021,79923712,165520192,1023429352,1979252757,145209875,179570375,971508189,55437315]},{"sector":4,"length":512,"data":[-134194456,1405311834,121158226,179570375,568855005,118667779,-1559577695,-1113519436,179741450,-402456856,552076056,-1559837181,1532625674,1398387907,106386001,567139123,1499094791,1048626011,1946159578,-1758035953,512425738,2011695568,124930,-1169010493,-773322448,76081154,-1581033382,-1365046670,-2030063606,1007330566,-1173981953,-722990240,-1547685120,-1616835909,180200202,512385457,-1162212911,-1506899190,179216650,-401947229,141754912,1946105576,-10753808,-401954143,326369324,-2147311640,697150,113640821,-16708957,17473798,17477638,-16077306,957004550,1913305902,-1626931264,1364247306,109977094,512625328,-13432146,-523110517,-523116335,531100561,-1017620217,164634250,109510576,-12842332,-793115020,4581386,-1146896333,178102538,-1324696157,-803304863,180009481,178663051,-1559581535,-1847063867,-401837311,-260833625,-78616,-1593138938,100731562,117377708,775490235,-663614789,178063103,-956658749,-1683946491,642091274,-1324695133,22734912,181903811,-754667111,573160,175507190,-1962642048,-1995774922,-150299850,178955238,-167771714,17462790,915080309,914950886,-420017498,-1861572445,175251083,179183241,512350467,512297584,1956711084,1925393162,-137219302,326387953,856350625,-466159662,-137219318,-1559566794,-1111291239,1005127460,-1956597503,17155834,1929437160,-34215931,-392368269,-1013120842,-1190399814,512360450,-91551280,1358955974]},{"sector":5,"length":512,"data":[-1108844367,359815424,-2130667032,-1979674430,-502673122,-620298523,-1245841399,251577094,544541147,-1190399814,512360450,-91551280,1359218118,-1981267791,-1031710464,512360592,-354285103,-803325245,-1979354103,-1022766306,164765322,-803304509,1141815305,-930471475,247004038,-1977496252,989562600,168326395,974091457,-972327447,-16131578,1049164682,-922089007,-880147851,41282826,243855242,780667346,868420051,177717184,722202809,-1012206641,121998161,684163927,-1157621063,-1416429567,-498881645,-1957076999,1166611525,-1269578970,-1257394108,-8787960,-1017437747,280646227,151238665,163054452,1086554121,-1264385865,-1241069814,-1995842294,-402006754,1532624964,113651395,-1946023261,-1898017074,-57808442,108159292,41384508,-13754324,-1022719714,-1559837138,-712309750,-402647064,1827209259,378089212,-1169028430,-1705899342,61,166249306,-387427840,32004863,1381024512,-402214726,1482358747,-1279634749,-3020794,1381024602,772214714,179570375,-1590819074,-1557263685,-1590818122,-1557263713,-1041757512,-2758401,-1077716902,1740507863,2078987,-1195137293,-2051398365,-1205744380,567096064,-602503122,855750665,567083442,-1338460989,175618560,520495565,-2134982605,-393106432,91357198,1912627688,-1899066368,-1010397474,-1949158575,170897662,-122752320,984630133,963948274,-24424103,800063667,829796082,49971266,93005687,561393708,494340156,-755382134,-151844141,292912838]},{"sector":6,"length":512,"data":[1949301888,553418757,1170671479,-350215937,127516103,914894585,-1017574794,1017961267,1008235533,-386435552,192020498,-796424146,-75480311,-102271486,-1022912067,754894312,426922048,360127036,553548928,76222327,1966750790,553418760,-128449673,-1715644221,-1262225145,-31339239,-803304512,1977289225,164667907,58064650,-1979067998,-402010082,124911626,164699786,-1023409688,145769652,-1073012275,1152661621,567085488,-1023987598,628429312,-2147433737,-725738891,-2134144503,210256065,-1274421825,-1608397472,104466909,242485716,-351768899,138591496,-239270933,-1262225145,-2044605136,51002848,339543666,-1023314173,2126121396,102878471,-883696845,-854851144,12079137,1478610188,788399592,164038202,976095860,-116799482,-1073085835,195,0,0,0,117443085,1447379968,541410121,1886418259,544502383,544501582,1936028240,7630437,1986622020,2037653605,544433520,1679848047,1701540713,543519860,1701869940,1846152563,1663071343,1634757999,1818388852,1866661989,1918988397,1919230053,544370546,620785263,1769152627,622880100,1948265572,1801675122,6563104,1970499145,1667851878,1953391977,1835363616,7959151,1701998165,1702260579,1818386802,1701978213,1696621665,1919906418,544108320,1986622052,1126506597,1931804730,1936286752,1953785195,1633820773,1919885412,1668180256,1634757999,1818388852,168624229,1868787273,1667592818,1329864820,1702240339]},{"sector":7,"length":512,"data":[1869181810,118099310,1986939172,1684630625,1918988320,1952804193,168653413,1866729997,1953459744,1701868320,2036754787,1818846752,1835101797,695412837,1866664461,1851878765,1868963940,1952542066,1229201466,1329810259,1679839309,979640378,1563504475,1563963227,1986939136,1684630625,1769104416,1931502966,1768121712,1633904998,1852795252,1884490253,1718182757,543450473,1986622052,1868832869,1847620453,1696625775,1953720696,1919879693,544434464,762212206,1869440370,1818386806,1631780965,1953459822,1397310496,1297040203,1869881424,544370464,1836020326,543230477,2004116846,543912559,1986622052,1631780965,1953459822,1397310496,1297040203,1869881424,544370464,1836020326,1851853325,1397965088,1699628873,1919885412,1112888096,1684362323,1769104416,1140876662,1702259058,541271328,544501614,1684104562,1292504441,543517537,1701999987,1679843616,1701540713,543519860,1763734377,1919251310,543450484,1869901417,1752435213,1919164517,543520361,543452769,543516788,1919905636,544434464,1936682083,1174430821,1414746697,1128616704,4476495,1702063689,622883954,1768169587,1952803699,1763730804,1919164526,543520361,3818277,1936028240,1851859059,1701519481,1752637561,1914728037,2036621669,773860896,1124085280,1634757999,1629513074,1752461166,1679848037,1701540713,543519860,1311725864,4137001,1886220099,543519329,1668248176,544437093,1701080677,1866661988,1918988397,1263476837]},{"sector":8,"length":512,"pattern":0,"data":[1836008192,1769103728,622880622,1920213092,1936417633,1680149005,1667592992,1936879476,1919250464,1634890784,539781987,1931502629,677733481,1493182835,78,0,0,1329805824,78,1701336064,1667845408,1869836146,1344304230,1869836901,543973742,1886220099,1919251573,1397310496,1297040203,1951735888,1953066089,1700143225,1869181810,775102574,673198129,1126181187,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1667845152,1702063717,1632444516,1769104756,757099617,1869762592,1835102823,1869762592,1953654128,1718558841,1667845408,1869836146,29798]},{"sector":9,"length":512,"pattern":0,"data":[23117,131080,4915232,17563647,120324608,2555904,30,851969,84213799,39]}],[{"sector":1,"length":512,"data":[1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568]},{"sector":2,"length":512,"data":[329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,-829665028,32038542,-1878604025,-16700661,638291974,-1560280415,-1142420590,-401772027,141690488,-1111487656,57936020,-402343191,1706886541,65529863,887681650,-387091965,512361503,-616953152,-2147200792,-16070082,512362356,1122503361,30140420,-1978924870,-401948642,1198654196,181026432,-1172343553,512363664,1622215361,96926347,68085760,1023623400,108331008,-385384259,1843922011,13953026,990624929,1930147846,194158903,197789227,197527099,-454546830,-941233407,-351547386,134658569,-2135292949,71952391,-401975878,1290273843,72673284,197134022,-1872499965,-1593755160,-861729904,-2030063605,1007400710,-1172540161,512363664,1776814785,-402165246,192152627,-164380437,887684747,-1581813244,104532940,91425738,-352246040,194028018,-1593062749,104532924,108202936,-385815064,1048641390,1946160064,162052617,-402401560,417858538,-385649408,1541996289,855750658,194320010,-1063247411,-850611189,171489825,-402407704,-1662516293,97576963,61991068,-1008045411,176274002,-1559512927,-1163850800,198353675,-1559509855,-1998058540,1405311491,-1979665326,-1556085565,1860700922]},{"sector":3,"length":512,"data":[1391872,1946766266,1260809,-1173129735,113707464,184159184,-402432280,1994916722,1532688384,-122357309,-1202564781,512428027,243993559,192023513,-1962409800,-1962154978,-1173625330,-794621993,-771307765,-401933813,-1313209561,-803305209,-770799349,50980875,-402447640,113640234,1510017984,-1262265511,1381061465,-617413033,1594302925,-1017423526,181026432,-2146470912,-16009674,180362890,-402491160,1354956801,169458258,-402466072,1482294526,-2030063421,1007403782,-1173850881,78646416,855679464,-466187786,-1103197429,-432109301,-1975406325,-1173700322,780864483,-861860924,200188683,1929520104,-15472627,-1058475917,-387222782,-928907459,-872021749,914966027,775490532,-697168924,197003007,-1071740221,-2030063606,1007403526,-1173850881,78646272,855654888,198681536,-1559511903,1638992857,180362890,-1962158406,-1593064402,-509408310,29812747,-1226307469,-386894850,-928907549,-905576181,-687407349,-684836597,-2330101,-1022641146,92863115,-1995720031,-576510395,199926539,-1847050063,128041729,78747916,915138771,914951188,-420017222,-1106523997,116785153,1963002772,372673284,-1003058932,-1545144565,-1953428538,-1995730914,-1593062882,-1020589166,-768402830,1950937591,202350867,922210867,-768406508,202782455,-1022642013,-385367107,1622213007,96926347,19589121,451413363,-1662028802,-1660878872,220248771,-1979710791,-1962229730,378618,-396316335,1918435592,14870546,9486977]},{"sector":4,"length":512,"data":[180428426,117368290,-1007154485,181079806,549068917,178445,180362890,96926347,1085362436,1493227496,9486977,180428426,1455680226,202678615,212082315,202450570,211893898,175499066,779469626,-335544392,915247147,1015220968,991917056,-2096794620,-219478842,-2096989045,242483261,74718523,-202684601,-335544392,-1070362621,985882207,1946861598,-920745467,512410378,-1950151992,-1207255010,567100430,-75052918,-851177800,-2031580639,1962621691,1958808072,1978219023,-905525749,-74776822,180436616,41273610,-318059638,-276168075,180883080,180956808,-1077922877,548998070,-204526835,1364444074,1460094347,-1188509821,29032474,-1817472256,-102612053,340101983,1495680393,-1202470053,146097165,-838895384,1405311777,167361106,1946807224,166901763,181026432,-1979419137,-2146779106,12009667,-955527005,-99888634,-98662134,4319242,-1933354150,-1898017074,-1073297722,1709769227,1918975228,2004499462,773860354,195567359,-1073297725,-712309749,-402647320,1172897834,-837383684,-826650101,1033523723,1509949440,649411,-1447854,125018,-1169010493,-588773536,-1017619713,123976274,1526715112,201834435,-1190357058,-1494024161,1448235459,-2030063529,1007403270,963967487,-1962918936,722188302,914969039,1049168881,1118899187,-401870662,1935277872,-65017849,367781747,-1003078842,870216203,-639481866,-1341353798,-43194364,1516134392,1465303897,-401971014,549388159,-1866039027]},{"sector":5,"length":512,"data":[210812672,-218101831,201834148,-218095687,210812836,-974596213,196649470,211027515,113640820,-1342108522,-47388667,-1195155873,-876993245,-1205744380,567096064,194320008,-1305280072,-1021195007,11548852,-854878534,857671201,8437440,250122668,-402296320,7471201,-561066356,1371784846,-24391117,-1073074256,1979231986,-231034813,1496937646,-1140946095,800063616,813018866,49971266,93005431,544616492,477562940,-472659830,-956893430,-2146339458,91500540,1998650496,-12204281,-940892128,-116899395,-1808365522,868440331,222080219,540809332,317257590,772502016,180389768,50036803,-1107695754,-389871551,1076690531,1008300624,-2146076902,1998651004,1174702863,141900348,1998650496,-1007134717,138526040,431277049,-1057087027,180362891,58055434,168476834,-1576831489,512363201,182979264,-1979223552,-401948386,-1262288895,-855068604,1975520033,-1337674696,1914817801,12777264,-148540142,1971323074,180534810,-1048523894,-1089697728,1622412026,-90168883,-1039779318,-1123126262,149621010,-351738179,143965443,817153017,-528080435,1912801853,51657990,-1262288521,136755721,856039885,13325275,0,0,-854851144,12079137,1478610188,788372200,179373626,976095860,-116739578,-1073085835,195,0,0,0,117443085,1447379968,541410121,1886418259,544502383,544501582,1936028240,7630437,1986622020,2037653605,544433520,1679848047]},{"sector":6,"length":512,"data":[1701540713,543519860,1701869940,1846152563,1663071343,1634757999,1818388852,1931804773,1684632352,1680154725,1920213036,543908705,1224762405,1718973294,1768122726,544501349,1869440365,1426094450,1667592814,1919252079,1701601889,544417056,1869771365,1852776562,1769104416,622880118,1912617539,6578533,1953067639,1931804773,1936286752,1953785195,1633820773,1919885412,1668180256,1634757999,1818388852,168624229,1868787273,1667592818,1329864820,1702240339,1869181810,118099310,1986939172,1684630625,1918988320,1952804193,168653413,1847619396,1931506799,1768121712,1713404262,1852140649,677735777,168634739,1835888451,543452769,1836216134,540701793,1263749444,1498435395,540697632,1528838756,6107439,1635151433,543451500,1986622052,1886593125,1718182757,1952539497,225341289,1701860106,1768319331,1679844453,1702259058,1701798944,1869488243,2019893364,745829225,1919879693,544434464,762212206,1869440370,1818386806,1631780965,1953459822,1397310496,1347371851,1869881433,544370464,1836020326,543230477,2004116846,543912559,1986622052,1631780965,1953459822,1397310496,1347371851,1869881433,544370464,1836020326,1851853325,1397965088,1699628873,1919885412,1112888096,1684362323,1769104416,1140876662,1702259058,977478944,1953459744,1634038304,168655204,1701536077,1920299808,543236197,1802725732,1702130789,544434464,1702063721,1684370546,1953392928,1946815855,1679844712,1702259058]},{"sector":7,"length":512,"data":[1684955424,1701344288,1869571104,1936269426,1869374240,6579571,1735549268,1679848549,1701540713,543519860,544825709,1965057378,1634956654,6646882,1735549268,1679848549,1701540713,543519860,1998615401,1702127986,1869770784,1952671092,1392534629,1129469263,1096024133,1413826386,1936607488,544502373,1679848229,1701540713,543519860,1679847017,1702259058,977478944,1701990400,1629516659,1797290350,1998616933,544105832,1684104562,539893881,3022894,2037411651,1869504800,1919248500,1936286752,1953785195,1495801957,1059671599,1886339840,1919950969,1936024431,1852121203,6579556,1836216134,1769239649,1998612334,1701603688,1886348064,1735289209,1886339840,1735289209,543434016,1667330676,168653675,1394631717,1869898597,1412395890,1801675122,1680154668,1684624160,695412837,5134592,0,0,0,973078528,5132099,0,-16188407,-116392695,-16252928,-116392695,-49741824,63759,63759,181206536,181861385,182386440,182779145,1750335488,1766662245,1936683619,544499311,1936876880,1818324591,1836008224,1702131056,1229201522,1329810259,1428183376,1768712564,1444968820,1769173605,857763439,540029230,539575080,2037411651,1751607666,1766662260,1936683619,544499311,1886547779,943272224,1766596661,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1766662246,1936683619,7628399,0]},{"sector":8,"length":512,"data":[-1,985152,65562,771751936,728713,218532910,1392954112,516173392,-2144993269,1962934911,10545411,9805870,21465126,-855113032,-2091148241,-1655504188,-888710312,-1,33555201,33554943,23593024,150995456,256,0,1310740302,541412673,2105376,1342185474,33685504,1879179265,-117071872,589827,2,0,0,0,-1,4849919,1153376014,-2118860032,28574443,186565934,55019776,1516199199,-346138535,5244299,151126018,50331648,236867604,-855002081,-1017635039,1381060694,773739863,728773,-1979627638,1334512999,341281554,235831236,817167391,104473037,108331199,12592698,-541456012,-4069373,-1198492437,801966080,1786117948,728773,-1961724021,-661777337,-1090494488,118358084,1912627688,516238929,1200226315,1166550550,-1784533499,776012800,-402371934,913441132,28313780,1153376014,774884608,728773,-2010250828,-2013263322,-1766322841,239569152,-955232372,9835079,1377062796,-402381638,-379912369,-369492180,1743322916,792505344,-1018233995,106307159,-1409263128,309604156,611585340,544475708,477364284,-100663624,2112372203,512306688,-596442947,-100663491,-21484172,669776383,-1123616978,1962935296,28987918,-17176572,-149414,-401544199,-1590755642,52756669,692390144,133742643,-1017176226,1948269740,1946762491,1405308663,868234066,-1395510309,544354364,477575484]},{"sector":9,"length":512,"data":[1402155052,-150992197,-1023255581,-1828662144,-92076686,-1193249792,65798143,1515111307,615301979,1916878047,2002402369,243936829,11862999,1460080134,-234628929,1963417518,112681,-1959862061,184597790,-1446474792,326369404,1966750892,-7804913,1040158952,74776575,-1023408408,-335947469,521019130,12390021,-1040764299,91488260,-352275038,1086453543,-1576832000,3997882,-149326848,1946159297,11969285,-1040773397,91488272,-352273501,12100355,118407967,-404169933,512372477,1569194170,677218856,1963326336,239438625,356879184,-1961662985,-768386872,-770969097,775946612,-1962887517,113673207,-75492117,-1190628096,-1993474008,-788482546,63422179,-947703669,1292589,-1527513968,-1962913560,-120507067,-29602421,1927336905,893749569,-1291716224,1996665072,679313438,-1978108921,-109037731,-1341099007,678267393,1946221952,-336547068,-1999897086,1569206085,725977911,-147038837,979209187,1166664695,-389810123,-147915454,67157254,774796288,-2013219424,-1590819771,1166606518,116862507,1048765,-1590818956,1166606523,116862522,2097341,-1590818956,1166606520,33604412,33554690,47186032,150995709,512,16908288,-536739839,-116826112,983047,2,16908800,7340544,66651552,33556736,-1912602624,-1274830589,-1274825725,-1274825725,117683203,1414744134,172901188,1381123341,757092943,1668172064,1701999215,1142977635,1981829967,1769173605,218787439]}]],[[{"sector":1,"length":512,"pattern":0,"data":[168626724,1381123341,757092943,544165408,1986622020,1884495973,1718182757,174351721,604834317,1684107084,1159750757,1919251576,543973742,1802725700,1769096224,544367990,544370534,1986622020,172040293,9229]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[12343885,196623,32,22020095,1050149226,2555904,30,393217,112656423,239861799,39]},{"sector":4,"length":512,"data":[1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568]},{"sector":5,"length":512,"data":[329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,-1705898517,61,278837955,772342249,389095052,-1610168786,1790705685,817123329,-528080435,1946358845,273005070,162799374,856039885,1489719488,108314634,-384794950,12060878,-2145268425,108343290,1040631342,118370063,-402619970,-1385034141,1040595502,1316320271,638952127,1962950016,-53922956,1948269740,1946762266,1946827798,1947024402,104476174,125046590,-1441906456,1323428673,378406,-1185851817,-141885436,-1090195837,236850994,531034911,1969184345,13560067,504734394,243867406,1035212322,567083696,774664735,-401202013,57871859,771798505,255723066,-1947532684,-286741252,1950497805,280279558,772286953,255657670,1037626113,1853095939,1946158141,343407,236852853,1124120607,-854220102,-146050527,1946157505,-1874203835,1962934845,521018941,12139700,362985984,1914642893,-1260877022,505531710,1102323470,-854220102,443686689,1124517422,-969998576,-15711738,1040153833,309657605,-384738118,-491124806,129296656,-384775494,2126120878,128510224,-384763206,-2144467038,1065278,521067125,-351477784,985305150,126675217,1048583950,1946161218,297908742]},{"sector":6,"length":512,"data":[-1090621464,243996066,-1085204958,-1527572954,1507298127,-218288464,-1962773330,-1991770886,-1105811394,96014135,-1163595008,-919398874,567098548,-1499223950,512630294,243996465,-812908542,-108933333,58068992,-787480647,-773729823,534893025,-99710647,407682835,272762614,-2128775681,-786936599,-775844887,252611049,-1949826284,1287815633,286689560,407681556,436586236,335036041,337315526,-1660500352,113704724,-955640417,1276376582,-200882408,-956301037,18084358,-368654592,-150995181,-15711738,113642869,-402582112,113640753,-1140845152,599261546,239450661,1606033869,-40179696,-1273750598,-954086134,487855878,309639700,-939685912,1305606,-301545728,-956301293,1306630,1007076864,113639439,-1962929150,-1122756810,-13429782,1040223976,-947711095,-230782718,-231812845,6416403,-395039684,201451598,141901628,335677126,200665343,41312060,-658546908,1030403,1974399632,-638615217,-1579185405,-1073015828,104531572,1014109162,337065609,-1744837679,915080167,-1058532329,1947024395,1947876369,1966816260,-1991358975,-384559306,1122631529,-1528279297,1048822539,1946162156,-333562888,1525839379,-401492806,652868820,193587455,1963392899,1007076869,775684367,591150452,725370484,758932596,12218228,1006678272,1008628272,-2128971975,1931057658,738308551,-774206672,65196514,-1729965613,-340996093,16351454,-770990220,-2134660492,17775678,378228596,-1012132876,255606400]},{"sector":7,"length":512,"data":[-1170050047,179306497,407682903,335023755,132370219,58044146,1610083138,1048626092,1946226492,-8787936,334763523,1010729155,292815119,-1946195224,722727966,-1157400614,-745865215,-11474493,1128348429,1279870276,1381060685,1096242259,-2096414453,1241782535,1090978314,185273350,-703944956,-670491122,-1861907191,-14620408,-2080431895,51638846,113701749,-352250064,-230784244,-445512941,389023430,-299988224,-1160049901,-663481794,334110347,192273163,334765707,-1979786264,-401348066,-1116403862,335298185,334241419,141941515,334765707,334241417,1963413992,-333542492,1206403859,-29456121,-367621357,-334087405,-385649133,378273454,372970478,158733290,334239291,-1679228041,-32601090,-66180333,319719699,353274132,334536980,225755147,336799479,-770979701,-35060876,319719688,335061268,335167115,-113510357,-370605197,-299988216,115664915,335560329,335033995,-819212661,67013441,-1995173058,-49022914,-1946376973,991166494,1997798430,320768780,-65142508,-31588077,-266433773,4098835,353274644,-63534316,-2086341869,-243334677,389037696,-1959758848,-1961624514,-1961624010,722728974,-1527513906,436586022,335036041,334372491,334110267,503516530,506139626,-1991568404,-1961628130,-401347042,1049167454,512300022,-1950149644,-1961625586,1104096241,-201459061,-50886748,-1980855481,-1995180482,-1995181026,-1022101458,1962934845,296008198,-1157782295,-1628893058,-230784003]},{"sector":8,"length":512,"data":[57934099,-386035223,-1085404893,-919398742,540847356,154931060,222038900,993789812,-341179532,378604,389450062,380287508,1035206832,-1267588659,-1206441309,-1447418589,-1960719098,185854494,-1962445349,-401345506,-873923272,-1948611835,-401343978,378273645,243995638,237704184,-1957620746,-1273550306,1512164671,-784611189,1807355006,-101521390,334892683,235081195,-242543626,440183886,-1958149771,-130642951,244008467,-836037638,1336210241,335036041,388636299,567099060,-230784061,58065171,-1191387671,-1329978077,-1960719098,185854494,-1962445349,-401345506,1273560248,-1948611835,-401343978,-18284819,91089150,-1273717318,-400438006,-1614936128,440172564,-219659660,-11761145,-678756171,1926300481,990147590,-402230571,233373742,-1331367161,-347887094,407681733,567089844,-661731188,1337507982,-1127182847,-386203286,65537907,-64034560,-1023409688,335031947,334904971,-1958283893,722729486,1336210381,335036041,-1171971144,567086661,-368654397,-939524333,18084358,8906752,334104263,1048772608,1946227698,-65214205,334118531,-956926720,18194438,-385876037,116785569,1962872899,-132740152,112915,379985547,567099572,371465867,567099060,379985547,567099060,380124811,-1525730626,-1564826459,371638037,567105204,380124811,-1525729346,649766053,362987286,567105204,-1070445388,8653,0,0,0,-2097092887,18084414,-1679228044,1124529915]},{"sector":9,"length":512,"data":[-327811312,335025803,334118531,990344448,1913917718,-91503871,335154827,58051115,-1962542103,-1961625578,-1995037666,-1273549810,992070975,1343780040,28954627,-851463168,15649,-972589736,17842950,-1958739477,-236432952,-972720891,17842950,512479795,-620030998,-947186315,104579331,192287761,336674443,-819214197,-402652741,1161298885,-2145094401,17843006,96866677,21349901,46629642,46236505,1326246737,335154827,-55643395,1498040135,1705415,1049087787,-117238792,393543435,512447314,-678750684,-4597001,-1274957569,1528941890,990999130,-971147814,1065734,302037699,-1007184920,-1089400390,1040389538,11540002,9497002,272828150,-152930817,-15359994,501866869,-230784251,58065171,-1946513943,185854494,-1961069093,-1961619698,722729022,-2118093063,1981304063,-1143852102,384303105,1124395779,-2147291672,1065278,-396950155,-1956706932,407681743,-1753953749,379985547,567099572,-1053088910,-141877387,-1994896193,-1961626050,722728974,-201571890,1049186212,113710072,70644,-1507947581,-851528682,293059105,-303554802,-1258311434,-383660724,1048772878,1979847666,-100603645,388957894,-972690687,1519366,362874566,52619264,915135861,1927812107,51784452,84839188,-2117008620,1979776762,-1870861565,336141963,42068050,118393690,188123924,1238248212,-401132609,-1101660071,243994561,1323832325,906190336,-896855037,-402472573,-1070464959,406370986]}],[{"sector":1,"length":512,"data":[-386502680,712312187,-1962895128,1326712638,-1961901634,-1961622762,1226048782,336006657,371804737,108205069,336398023,-398327808,786957239,-1023314941,-469797911,1252699141,-1161561118,1475023338,334642819,-385649150,113703238,-352250065,788973061,113639447,-402582111,880083560,336141963,336279179,-1962804760,-1961621698,-1340863218,-1359807478,1049172597,1049170951,243864587,117380109,-320334839,-401443836,-864812343,-401485894,-1950091824,-351008482,152996613,1877494548,-199849727,-163673837,1048822547,1996624882,-367097005,1977289491,-199324920,-367097581,-333542637,1977289491,-367097080,-333543149,-367097069,-123541485,1963013608,-1957211188,1125379102,-1962858008,110059511,1049170932,243995638,-836037640,-62846350,-1991269133,-1022101442,-2080865815,34861630,-617351561,-1996423704,-1961617130,185854494,-1962248741,-2095844322,24379899,421411651,-1023314412,334239371,91607563,-1031548021,372982294,74847257,337188491,-478883013,938017655,-1957473544,-1209512998,-163673856,-199849709,-1410835693,1610058496,837548843,334642819,-385649150,512489490,-620030998,512429173,-343731212,-1157400821,-2081947647,-1952418560,-331445257,-81049837,398394231,12576768,-230784061,57803283,-533015,-1961617650,185854494,-1962379813,1125381150,-386417688,-141885362,334763657,334902921,1002635636,1947465782,37742841,335746697,334902923,-402621976,179568731,-854286918,45017121]},{"sector":2,"length":512,"data":[345902730,-689766219,335746699,-401301570,1049297625,-790031370,1,0,334763659,334904971,24500795,185497539,-1173719845,1287585793,1960459032,-133264401,-1328600301,-473953782,1118761479,-143271365,407157443,407248521,407504582,-199345366,-972721133,538462726,-1007417368,-1962933825,722728974,-1946913586,-397258281,1499135955,-1407765569,405929857,540810099,171710067,222040692,154930804,1588857460,-997834740,-1878856789,-536200022,-8552230,-2146667510,1947074429,-1441943549,-961934672,-1169031163,-1377298376,98786035,-1384822205,1086309195,772195855,-622329577,-473953792,1964653808,772195845,243859479,-919399421,125046076,362888832,1308718080,337065609,-401620545,1048576177,1962939809,1963801609,914968065,243864599,512431109,-620030998,1048581237,1962940207,113413,512427499,-398257164,-337054120,121539070,188647700,152471828,-333542636,33260307,-385885309,-812908846,336006699,115605260,335744571,-1983708813,-1609298674,243994432,1049302029,-16051193,-361386254,-544484981,335744651,255966793,-1493974982,-74724725,243917941,-812968947,336019081,336281227,179359531,336139915,-220230846,1257862318,336139913,336273033,868466738,373075145,-391379339,82510177,141826620,74714428,-370458198,141871371,-1996936361,-1017118899,388906624,-2012974079,-1966866611,-117178547,1959410627,1364678190,-234621045,-123602685,63056659,-100254783]},{"sector":3,"length":512,"pattern":0,"data":[-2028244205,-1961625594,1003367368,50690039,-34012175,-56298687,-211919015,-1850031196,-229709807,-1074487063,-4647777,-17920,1011002028,-1996890099,1947508246,1011002592,1341814029,1048626090,1946160957,739130142,839217687,-1010762048,56036323,1031819257,24469274,-390057399,1472397340,186298449,-234392375,-1627163218,-108290495,-819224743,32006046,477479680,-117221476,1291813199,-2147126248,175376957,218187206,38127169,-1654701814,1891259075,-238622702,1958396762,-239146990,-1899459389,-1195340072,-795999921,-83793220,-369107224,113701885,-1962864575,-1105811394,-1515909326,-1170099036,567088678,380124811,-1525729346,1371776165,-24422825,855592074,-65621779,-1359863325,1464933749,-402290096,92799001,1341623128,1604645697,1224860505,-11731362,1591602006,1354979679,1023467557,1968701504,2041091,154971331,171768692,540866420,1019474804,1007055457,604143482,1048822751,1946227698,-196548349,334118531,-1158253312,367530517,-855526159,975178785,1947223046,-12982013,379985547,567099060,-1273616710,-1272853183,-843042228,34010657,-1116405996,-401483590,28635364,-397401651,1012465423,212497421,1141258784,1110360848,771771201,2368548,2949120]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1668172153,1701999215,1142977635,1981829967,1769173605,168652399,1560291876,1986939152,1684630625,1769104416,1864394102,1768300658,1847616876,224750945,274792458,1701603654,1835101728,1970085989,1646294131,1886593125,1718182757,224683369,276824074,1635151433,543451500,1634885968,1702126957,658802,1766199456,1763730796,1163010163,1328366657,223956046,280363018,1701603654,1701987104,1869182049,1917132910,225603442,281804810,544173908,2037277037,1818846752,1864397669,225338736,283377674,1684104530,1920099616,1763734127,168639086,168645413,-1575945216,1851867925,544501614,1953064037,1094856224,1768300619,757949804,1634624882,1713399149,224750697,286588938,1914728270,544042863,1679847017,1667592809,2037542772,1919903264,1818846752,658789,1766068540,1713400691,778857589,1768178976,1814066036,779383663,1577060877,1225395473,1718973294,1768122726,544501349,1869440365,168655218]},{"sector":5,"length":512,"pattern":0,"data":[1175550208,543517801,544501614,1853189990,658788,1850020243,544830068,1869771365,658802,1699615142,1768300663,168650092,1309783552,1713402991,1684960623,-1023407603,1261326097,2113326,1766592977,1948280174,1814065007,224882287,299499530,543452741,1763731055,1953853550,1818846752,658789,1648431596,544502383,1953064037,794372128,541010254,1293025792,544502645,1667592307,544826985,1953719652,1952542313,544108393,1701734764,1836412448,225600866,303497226,544501582,1970237029,1914726503,544042863,1830842228,1701278309,1701344288,1953391904,543519337,1701603686,1073744397,658706,660077,4722]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5448960,389224501,1681401120,6497594,6204,6218]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[32135757,327686,65568,6422527,1170604394,0,30,1048577,2359296,35389440,59572224,60162048]},{"sector":2,"length":512,"data":[1354773278,567095476,339599494,-1156484093,-611450823,-1274979142,102878473,-883900365,-1157594690,-1014104007,138891,1929456616,-1172371960,1793655185,1687297,19785900,-1960433548,1006638614,1006924892,638350650,6700681,1711734566,1020408576,-1962707666,-1993979177,-1442834922,642700011,-402651706,494076136,440303654,309672448,1679654,6988582,-1224278234,117384704,2045444279,6995856,973175936,-2144988044,973085246,642780277,-1426056799,-1220638426,-391358464,427032763,405178918,1968978944,1021587970,-1274907346,646457087,-341180392,96872161,-1172655104,520487099,1320427981,-1191155014,567148543,-165278862,268488710,938151285,2105550480,796211967,-1332738837,-970544548,6150,-1220638426,-1960901120,-1962908106,-1962887362,1107301910,141881915,1946172588,-185882109,100664774,373195551,158662656,-1107289665,317194252,406749184,1299513088,-1107268929,48758801,-2143098112,57933885,-1392972985,1975519914,-1392720902,91491644,1946159848,222056182,-117344776,1963801795,540852993,154991476,742193012,993850228,725413748,171764596,1027401588,1686211,-851640136,-1559858655,367722600,26327696,-402541080,-1161100829,-135593561,-352193862,21150450,1392515769,6823563,567099316,1111392603,1968852225,21668323,1023418117,-747433984,-1308631003,1390465796,-1957474223,-1328991280,1746832128,-851266560,1498962721,-775649702,1175882728,-2117063935,1929412858]},{"sector":3,"length":512,"data":[-772634970,21275106,108314635,33614465,378130435,-1031601850,-1108684017,-721223521,-2089299141,-1593707846,101384528,101384530,57934168,-1577092887,-1073020586,4007796,1391424769,-1168945071,-919404288,512426416,1119092840,1482367437,103373401,1048772934,1962934600,-2082786355,84030,448414580,18802690,1002048180,-1172189951,300417567,20823553,16729286,749528180,1008497200,604795402,1007103071,1007710730,-787713264,-773598749,182702563,-2132808744,1963851644,-1948416067,-1274984946,1049319231,-1910636440,1406284763,567140235,1935613787,41204230,-2080452375,84030,1520518516,1347506689,869305171,-1962889015,-1275041762,1528941890,-1168484008,1119486274,309505,-1957478476,-855611362,57891617,-1946246679,-1593753026,-1023213244,19316878,1208942381,-1260948223,6994492,567134515,-1180477838,1175358208,1463858177,12140171,870026782,-544517166,526066125,-1274318241,512447294,567083193,-675624101,-28579583,-1664941710,1465274707,1344144981,-849759150,-1168418527,1094517120,-1962642432,533826499,1583308039,-1013097639,-402539078,451542994,1201296126,-1174374656,-1705901537,7798855,875442883,1163412782,1229073920,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1638400,0,0]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1778384896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83886080,0,0,0,0,0,0,0,0,1868787273,1667592818,1329864820,1702240339,1869181810,1665213550,1936942435,1852138528,6579561,1766195570,1847616876,1713402991,1684960623,1224835584,1718973294,1768122726,544501349,1869440365,-1828685454,1818838529,1919098981,1769234789,1696624239,1919906418,1224845568,1718973294,1768122726,544501349,1802725732,1634759456,-1090493085,1818838529,1633886309,1953459822,543515168,1986948963,1702130277,30998628,762865990,544436341,1684366702,757097573,1935761952,1702043749,1852140903,1747460212,975796325,32768032,469764621,1380013826,1196312910,1377840416,543449445,1869771365,1852776562,1163412768,1818846752,168636005,538976288,538976288,1832984608,1953396079,1634038304,1701584996,1948283763,544104808,1702521203,544106784,1684104552]},{"sector":5,"length":512,"data":[3043941,545,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,825237504,892613426,959985462,1145258561,1650542149,1717920867,0,0,0,0,0,0,1426068736,1347637586,503731799,118418571,-1962921793,-1958865298,-617414538,-1409156376,812918076,91537418,-352207384,31058162,1599997727,1515805528,110046813,-1892810708,1476406790,775356206,922693120]},{"sector":6,"length":512,"pattern":0,"data":[-389349332,-873791082,1948597420,1949121782,1948990527,1951153223,1953250366,1915763770,2000239677,1966095417,1048784398,1962934289,113651206,1345323029,771754680,1124087,1155886,753152600,100740656,216727569,201784878,772139776,853758,1480370923,1631331956,2050754162,-551288193,309614652,510936124,695485244,544494396,-385790232,-969998511,100667142,319211310,-352317440,-953249669,167777030,-1871582464,268893742,-208972288,1040368515,771912331,1064576,-1408600832,997457980,-352263704,244002358,-922025967,-2144465548,3134,-397015691,1449001000,1946172588,12642309,777975531,802432,772568064,1117835,57985291,-402651160,-379715369,-768344359,1958742700,-118799869,58116651,-1023376920,-2081191082,-1958870333,-2144468414,3390,-208991372,1040368515,-352169333,1406284546,322341678,244002304,199753745,5302272,1526763240,-24123042,-1031057335,-151530957,-145172341,1356498934,1951973899,-404204793,199973887,205422638,57999360,-1962925592,1913273539,1048587789,1962934286,100806149,381353999,521018880,-397336617,-1017577454,192858379,1417262,321617,-1007033767,1157595562,-1023314944,1392514233,169773870,521018880,-1275055942,522308928,3194715,822051267,-2115996672,-1962921745,-2365233,784348099,771755170,771755426,771755938,771756451,1377990,279064096,49920]},{"sector":7,"length":512,"pattern":0,"data":[14572109,262173,14024736,63176703,533268480,5841,30,100270081,382862052,440139776,445513728]},{"sector":8,"length":512,"data":[-1957363712,11319532,1443765480,705037472,-754404892,84839136,65874438,1552320961,51002879,339543410,-1207011837,-1202716671,-397409992,-998046958,302434052,-955252978,16733318,1518782208,-385875457,-1635057189,-472776870,-1962510709,792690712,1857583988,-1635037184,-472776870,854077695,79987468,-10582391,1014284299,126539915,-11106680,-1962932282,-771794274,108432355,-2037698305,-2030043308,1354366804,-1947601152,1619168752,602427647,79987476,-10576245,-11106678,636159880,-10838389,1988879313,-1959723258,-43898,-1174449018,-369688496,-2104627061,-397344928,-998042638,1485227780,-1962934017,-771794274,108432355,115880191,46433048,-10975685,753468287,1520339713,-1948003841,411764342,-10963317,1966028928,1520339835,-1948003841,814417526,-10969461,704725130,-51883804,46433034,1128129578,1986491392,14149891,1946173757,4341066,1891127668,-1635037184,-472776870,-1962510709,1485177600,-397393665,-998044557,-2133292284,57933887,-1207920407,-1957691382,-771794274,108432355,-2046623605,1346436952,-2096231448,2091058372,-972690688,-16744442,-10975489,-956346135,-16744186,113701611,-352321404,-2063153429,-454295808,-10838389,1988879313,-1959752954,-1962977122,-467008960,174450768,1006814339,-1205701310,-1957691382,-771794274,108432355,-2046623605,50724696,-1444392960,79987469,-352289117,-2113485149,-1662255360,8586950,-946476033,-1811017210,-1198658791,860880897]},{"sector":9,"length":512,"data":[1139298496,79987457,1040154089,-1804337076,1946177085,5520855,1463671156,-385649408,434765691,1518796799,71732223,-10844615,434701181,1421771774,225706751,1342177720,-397361101,-998047486,2084471556,125107968,8521414,-955847681,33586182,2118025984,108396288,8259271,1048576100,1962934401,-2109833128,1366622208,1342902968,-10451315,260696144,-955988861,16734854,-1205736704,-1957688558,-771794274,-2034761757,139520000,184861827,-972720704,-16744186,-10844417,-10838389,-1081875503,1962934406,-2126610222,91553792,8521414,-2126610177,477364224,8535680,-2146994944,33598,28839540,582504448,1609060353,79987456,8732288,-2145946624,33854,113707124,189073680,113712619,195430672,1048581611,1946157188,268879624,-350658551,268879622,-2146766839,33086,1183649396,-2037559120,-397344928,216727623,1353729677,-10451315,34531408,1577370755,-1017256565,871140181,181921984,294531,1996427124,9746436,352381008,-352009085,21936138,351594576,-16595837,568854134,1575324437,-326412861,-402649416,1448544933,-637242,1342217400,-402360577,-998043685,-28931836,594919435,1342923752,-1207666945,-1202716264,-397407470,-998043248,112648,185776208,-7542704,-1207647101,-11534177,-1528297866,79987471,201082505,-400329280,-11531476,-1732770186,314068993,1508397067,147096337,1342177720,1342902968,-2080418328,-1070398268,-1980479863,1586229830]}],[{"sector":1,"length":512,"data":[38797310,163715,1586171772,-16282626,-1965520121,-337368569,-25755895,-2096139032,-259325244,-1957661632,1342176350,41911042,-1961919488,126614622,-661977089,-467007606,1996425707,256633084,-1962752893,527712504,58062651,-973044247,1459680838,-193527978,-1192069377,-397410142,-998042634,-9573622,1996424822,-1958089980,1342176350,41911042,-1961919488,126614622,-661977089,-467007606,1996425707,251390204,-1962752893,443891960,16154240,-1070397324,29276240,28846059,-504868864,46433043,1996432107,108461828,1342287032,1342902968,-2096073752,28838084,314068992,1877495819,79987710,32654979,16012931,1442781161,-1070338933,1460222184,108432214,-2096464245,1946160254,205949764,1178322435,-1959100668,-956101562,2131248699,205949744,185356031,-1960151872,45696967,65664769,1074664966,-963948480,65664838,1074664454,385830976,-998045424,1958742788,-339725360,-18429,-443850914,-1957313699,1882348,-972500760,-1191188922,-11534156,149423222,79987470,200296073,-400329280,-11531888,-1732770698,314068993,-1108848629,147096335,1342177720,1342902968,-2080523800,-1212676924,1996443648,231860230,-1996176253,-1072960442,1508385653,1996443657,26785798,185776208,260499536,-1207384957,-1202716671,-397407470,-997982846,16955396,8269559,323414096,-1560099709,-1073017324,45618548,2117007105,837308416,46433043,185472675,-1207274048,-397409831,-997982898,-1983892734]},{"sector":2,"length":512,"data":[1183443526,-129594898,-1912715639,-1588527546,1177223294,1996443886,16955632,65957623,1343099910,-2096935960,1174472900,-129593874,8298832,1357530667,-1192462593,1861681410,369492970,703090702,147096323,-2081798655,1962995326,-360807649,-2145815296,1962993278,51046659,-1202667469,-397409858,-997983014,49998084,-1411329,1944645238,79987464,-941341047,59462,971261579,494790726,1342177720,-1542401,1996483190,-294191128,-2080488216,-1073083708,1424556916,-465138943,1961379385,1354773265,1223181963,136243280,-1996176253,1996482630,-294191128,236205823,-2096936728,1183385284,-394854418,-1411329,-401729994,-998046923,-364476154,15629955,-1073019019,317260661,-28930561,8298832,1357792811,-1192200449,1861681410,335938542,1575505934,147096322,-1913764351,-1588529082,1177223294,1996443882,16955628,65695479,1343100422,-2097005592,1174472900,-2000669974,1183381062,112892,-1980086647,1183441990,-196703758,736773771,-1957629370,1177284166,-1947709212,79987463,-1554807,1342209078,-2096661016,1183384772,1996443880,-361299982,-1804545,1592323702,180651005,2004140042,15091398,-1207666945,-397410118,-998043454,-461963516,-11485133,-401730506,-998047060,108461830,1342227640,-2096060952,1996424388,1354773490,236336895,-2096984088,-826800444,-1947709440,46433040,-1804545,922742390,921177620,113541890,-1161591,1996485238,372703210,35907598,-1996045181,183102022]},{"sector":3,"length":512,"data":[-398000130,-1946254871,1177283142,1183535354,-196727826,114878544,-1996176253,922740806,-397410180,-998046006,-398030588,-92864688,-1411329,1996485750,-55842578,168477827,-966691648,-16718266,-692583306,266883072,79987472,871659263,922702016,-102232556,113541889,-1207535873,-397410080,-998043662,-92864764,-11485133,-401729994,-998047268,15382534,265873488,-16595837,1996485750,339148782,25421838,-1996045181,1996484166,-11867654,-1946925313,1178199110,-954761484,128070,-1947973889,1178201670,-1995997980,1187439686,1191182332,-96039950,2129806905,-230242534,1191116801,-364475398,2096776761,-297366774,-956676471,-2130708922,1962998910,-27203325,16154240,1474888565,-431569154,8298752,2112767545,-364496635,-390590852,-222801919,1206407168,79987471,-1207666945,-397410059,-998043846,-297366780,-1070378936,339148624,19064846,-16333693,-4716938,468209664,79987471,1223313035,1354773328,236336895,-2097085464,163055300,-1552383,46433038,1342177720,-2096157720,-443874620,-1957313699,178412,1443146984,16664263,8579328,-1207535873,-1957691136,1077937222,303497040,113541902,2004140043,236076673,359995796,1074022027,1189630016,46433039,1586229387,21022212,-2059501568,460587008,1342247352,1074022027,2028490816,79987457,125157387,-972792181,-1962933689,1077937222,252700752,184730755,-2146994752,34110,1586173045,175540996,76219647,1182861193]},{"sector":4,"length":512,"data":[-16711164,1183579718,139394824,57982987,-1946193431,-1956708794,1438866917,-1070338933,-1962670872,1178142790,855932678,-1960318016,1177224774,16955656,-1957631497,1344144454,1861730699,71697160,-521646050,180650756,721831563,-443873210,-1957313699,-390056980,1048576965,1946157184,138840908,1023821355,1098776578,-150928712,1174603374,1088966660,46433024,1342247608,-2096245272,45613764,141489921,1342457347,-2097142040,501940932,-16365941,45680198,65664769,-397409210,-998047729,138840834,2114340409,1575324643,-326412861,1592311859,-2093055997,259260416,-16490869,18331703,226814032,-1962621821,1077937222,18790480,225765456,-1017256565,-1192457387,786956294,106859267,-1979300097,1357130247,-2097079576,1183318724,73305084,-1979431169,1374497295,-386251127,-998047485,-28932094,1962559034,-62486003,1996375608,112653,-1073083413,-1070350475,-4717589,1575324671,-326412861,-622280653,65754626,-1962653953,529138782,-2013855958,1963460261,-16520209,1586169414,706710022,-1517816065,-277542906,-1962647925,76154486,292882232,-2147203329,74776639,367771699,-351910145,73305026,-467007606,-1979294069,736963087,-443851071,-1957313699,178412,-352159512,71761667,-1979425141,-151049697,134653319,65793909,-1962522881,529139294,-2013855958,1963460261,106859503,-467007606,4319312,-1962752893,260703326,-1991119574,820575814,46433024,1979598394,73304852,-2147203329]},{"sector":5,"length":512,"data":[74776639,367771699,-351910145,73304999,-467007606,-1979294069,736963087,1575324609,-326412861,-402649416,1048576509,1962934809,-230242530,481835008,-129595122,1358055053,1358055053,-2096338968,113640644,-64999,-15847370,-15847882,-571997066,1575324416,-326412861,-402652488,-1957297731,585827446,-467008374,7399504,184730755,-2096794432,250282694,-467008374,-6952880,-2013084541,1015039492,-1948683008,-1956772794,1438866917,45673611,25159680,-1976636586,1357130247,-2097138200,-1073020220,1182991988,434831876,-351897973,73304844,1963407532,-339506428,3964946,1191178101,73304836,1962950528,1589654474,-1017256565,-1192457387,921174034,-297351423,1048579608,1962934812,35299610,-955377501,924166,-294191360,-2097133848,113640132,-64996,-15853002,-1978787786,-467008442,5105744,184992899,-1207601984,49020927,-443826125,-1957313699,71732204,225829898,108159292,41384508,1593778220,1575324422,-326412861,1586190166,104303364,1660991518,-1992941107,1603024439,1594302210,1575324510,-326412861,-2046540149,-987867424,179046006,974222528,-1408403516,-227024838,536870840,-1878594722,-352321352,1575324662,-326412861,1996445526,189261830,1073923203,1988876427,-1951597564,108956619,-160059662,1610564749,1575324510,-326412861,1996445526,186640390,1073923203,1988876427,179108868,-1962314560,108956619,-227234062,1610564749,1575324510,-326412861,-1946396842,2123039862]},{"sector":6,"length":512,"data":[40811270,-142092372,-676536182,-533006457,-469104267,-4657547,168225791,871855332,-1956749376,1505975781,-668214133,507185778,74580510,-503323765,-385874968,-1957361157,1431787244,1484057867,771913355,-386040704,1150099573,6351101,-402511942,-963968951,-29097170,-1174384152,988283454,7244544,-2127637781,1459617148,1150098549,3729661,-402509894,-1976696799,-392626364,1002045482,1304578,-963915285,-1174397464,-236256736,-1956749475,1455644133,-1951534453,-1144484906,1085538305,-1017241139,1153369886,309506,309585,1348059347,67112741,1983462448,-1442380798,-1159077288,-890764734,-1957313537,71732204,2131117627,105286403,-1017256565,-1947432107,1178272838,-1962705914,-443873722,-1957313699,-390056980,1048837917,2080376318,99787017,100533817,1220019580,-1962218750,-788136418,-1467511837,1575324421,-326412861,503732054,-485732725,142525485,-66816315,1178327180,991458570,-1961593865,1002843079,-1962118207,-134002495,-201461757,-788010076,1940255721,536650753,-1956749561,1438866917,106425483,75416828,-1962391926,-1426912690,-443851001,-1957313699,440556,1476303080,108954454,-2096727038,2114979454,-18427,-164407317,16533190,-16490869,126485574,200838040,-166234881,17212805,1166869876,-1962743008,-151483449,-2147048059,2122320501,-915144452,569099915,2134507395,821003013,-276626453,108935511,1183573118,65992454,-957314105,-335545274,-1956684113,1438866917]},{"sector":7,"length":512,"data":[79228043,-31463424,1325356631,75401990,425603,1586180212,38797064,163715,1586171772,-16282872,-1965520121,-337368569,142016265,-2096931608,-259325244,1962933891,184451845,96866933,-97536,2117666165,-1203145724,1189806081,1947074179,167674803,-963966348,-12122744,-1528101298,-1962510593,71707591,754976549,-654901240,-26154928,-1962621821,548951792,-947171328,-555200482,147096574,1982463491,-9115386,1600045107,-1017256565,871140181,-42211136,-16222465,28837494,1996443648,81258500,990430339,292881990,-1207404801,-397409706,-998046691,1958742788,112645,-1070398741,-1017256565,-1192457387,1055391876,-62470147,-2037579776,1183448956,1996443902,12642310,184861827,-15698496,1996488310,11593732,184861827,-2147191616,-16188338,-689373578,46433031,-113151,1996488310,30730246,184861827,-15698496,1996488310,29681668,184861827,-2147191616,-16450482,-1494679946,46433031,-113151,1996488310,18081798,184861827,-15698496,1996488310,17033220,184861827,-2147191616,-16581554,1994980982,46433031,-113151,1996488310,8513542,184861827,-15698496,1996488310,7464964,184861827,-2147191616,-1929249714,1358920838,-402098433,-998046954,-62485756,-1017256565,-1192457387,1659371522,1522030332,1996443650,-70129660,-1962621821,2088781552,57999615,-16484725,1996424310,48293894,-1962621821,1579877982,50692,-402229505,-998045959,1958742786]},{"sector":8,"length":512,"data":[112645,-1070398741,1575324510,-326412861,-402651976,1448606737,-1207667061,-1957690788,1086819326,-75896752,-1962621821,3965168,1589176693,-396931070,-997983385,-2133292284,91553855,1949187456,1476299522,-402229505,-998047114,108461828,-2096719640,-1073020220,28837236,855829248,-1956684096,1438866917,79228043,-72357888,1988843095,1656245764,-24424446,417879879,79987707,1015083147,-1192528640,1464861286,-2080700696,-259324732,108461911,-2097012248,1586169028,735970054,509663,-402229505,-998046151,1958742786,112645,-1070398741,-443850914,-1957313699,-390056980,1996487505,74907398,-2080403224,1996424388,101443590,16958595,1996424774,74907398,-2080434456,-1070398268,-1017256565,-1192457387,518520836,-1202300933,-11533720,-1930951562,79987706,1015083147,-1928956928,1183383876,74877700,40548430,1207864144,-93460393,-1962621821,3965168,1996483445,108461828,-2097053208,1586169028,73280262,-16776762,-1696070026,46433029,91537419,-352321096,1589654274,1575324511,-326412861,1443032195,-1962308376,1962281968,1996445199,74907398,-2096268312,48957124,-1956724685,1438866917,-1957237621,1149895798,-2086037498,-167349248,1950352964,-18426,-167732503,1946289732,105676806,-2131825888,-167705012,1963722308,121932329,-774337640,1653077731,443875592,1342308536,-2096807960,1149829828,1958742788,-351752188,134524930,2088961604,208994308,-1744354166,1661329617,71600392]},{"sector":9,"length":512,"data":[-1996209013,105182724,-1207602172,65732609,1342308536,-1979419393,1352140612,-2096619800,1149830852,2143292162,1958742805,-350179324,135311362,1153893956,-385875966,1291845483,-14906622,705137156,-443851036,-1957313699,49054700,1988843095,179972,578090507,1946172544,-1964485091,1357316868,-555198634,113541898,-1202665589,1464862100,-2096443160,-224327996,-33146619,-2095874811,392766,512429180,-472840706,94930827,-1749548053,1458604805,-2096870168,1448084164,178251863,-1207516029,-1202716671,1464862117,-2096459544,1599997636,-1017256565,1475119957,-1962467754,-141883778,-4603853,1101984511,2123094519,-203977980,1589808036,1438866783,-326898549,-11118842,-85457802,46433027,1996486795,186574854,-1962752893,108462064,112727,74907472,-2097120024,1183385796,108462076,192997462,956613763,158727294,-1979425141,-342294719,-18429,-443850914,-1957313699,216826860,-41200041,-972361853,-1958607291,1166607430,-955938556,2147418693,1342719629,1460041471,-2096292632,-259324220,-2097000961,2080375421,-1950338548,-2012872931,-337368569,-1070377206,95807568,-1962621821,-1956684090,1438866917,-326898549,-1957275898,2123039862,105286410,-1995938057,1183447622,1958743036,105248315,-1975618292,-1952970939,-152841768,17326727,1308569461,41779970,-1978893312,-14841084,705136645,1460399076,1352139914,-2096801048,1173750980,91496454,-622215117,1325352448,105248508,-1978501880,-1952970939]}]],[[{"sector":1,"length":512,"data":[-152841768,17326727,-1545010315,-58817792,-385649408,1183514761,38091260,1448090738,-756533761,113541899,704398987,1183515205,-955973124,64582,2105791467,561250306,1443001855,-1360513537,113541899,16926091,38112005,66864681,1170670197,-352321534,38666156,163203,76156028,100605323,-467007608,-1974006805,-397371388,-998046529,105248260,1176007968,-369340673,-1973944449,-397371388,-998046553,105248260,-1962052576,1177287238,-137221124,535496310,-61931706,16547459,1308617076,41779970,-1966113792,-14841084,705136645,1590619108,1575324511,48218051,145035,-25037013,57806848,-99614530,-998123634,1945833022,21620995,-72575,1210485046,646526470,-963967418,-523041615,1151546952,-852446202,77805089,1929526278,-1070391766,-1172369840,162797347,1154163149,840979279,1864380462,1634476146,544367988,1970365810,1684370025,52693517,37128695,734235648,-1260652578,908184906,100408972,2897547,12064286,908184885,104865417,1107725366,-1205924346,1387930880,908184856,149163659,-986307869,-1945573882,920335322,149036799,-857144461,113587712,-628356886,905970619,149036799,-1073996025,1085868270,869214990,380302272,-400619754,79366806,1140897792,175251917,1954595574,579829765,2034974726,109045996,-1157243672,-75429650,141756654,1528299347,-219462845,721422009,101105377,118946955,1290314995,-387108091,-397350900,168624284,1667331155]},{"sector":2,"length":512,"data":[1986994283,1818653285,168654703,1766066701,1701079414,1920099616,168653423,1816529421,1769234799,1881171822,1953393007,1953459744,1634692128,224683364,-1173180150,-315484166,45817614,-851397632,-1205922271,-397410049,280036789,-350745414,-1172459035,-555018212,-2081649835,1448543980,1443351230,-2096647192,-125107516,1342588557,1443133183,-2096495384,1183385284,-396929286,-998045670,-96040188,-443850914,-1957313699,37651436,74711046,100800255,-402360577,-443873955,-1957313699,-1957275668,92996734,-1962779253,1435173965,141921030,-854950517,2123061025,-1996125946,1300824669,106268932,-1895271031,74582597,149681715,-1106216216,92995585,1577874825,1438866783,509078667,75401991,-4603853,-1951468801,-146784063,-1017290792,-1947432107,1333789790,-443874818,-1957313699,-1151904020,1065551514,506033408,374791,1963061224,-1715457275,608183531,110797822,-1777951581,66759,-955988349,-65980,111163017,-1945874805,-390033704,1583284377,-1017256565,1475119957,74877782,503742091,870288135,-17984,-146690318,-201618471,-12285274,1161480499,1946514175,48972037,-1047801353,-1017290914,-2081649835,1448543468,-1962379637,2122515582,712310790,-397012245,-997983771,-28931838,956921152,242549886,720093235,-1996601718,171722501,96864373,71731968,1325340907,-822266,2088960588,-897843198,83827851,-467007606,1600047083,-1017256565,-2097099799,-126619911,-18775999,-66947189]},{"sector":3,"length":512,"data":[-1459713107,1212314625,359907643,-268185461,1946265773,96600884,-141885438,-335657847,1962839014,-1980169460,-1054081460,-351958712,-17235195,-963903924,-92153204,91488991,-1440838618,41912583,113649347,1023543214,628424702,-268173685,1946265773,1224641522,-1116487365,-268185461,1946265773,96601058,-141885438,-335657847,138906598,74760203,334223502,-1374749146,-1945078777,48184792,-1910110860,-1962432994,-1950487753,-1070397833,989878760,604861638,-1740619775,1946177000,-28443123,1946160104,1313773061,-1070359829,-1957575783,27852357,-936705164,-1170128567,992378879,1980214294,1978323204,63015925,51737286,-150113598,734143442,846022,-755562379,-445257007,-1017528269,501764434,1461220352,-259260789,1153954307,-1979711746,-695531913,-1991583957,1499004501,1347666778,1377751603,28856402,520507392,-2096127768,-92075836,1532633087,-771030412,-326412861,1459940483,108432214,-1744419702,1946190761,105182726,-1207536576,-622198785,105182720,-2147060735,-350222772,105677038,107249666,-1983892497,-125107644,-151093623,1963460164,121932303,-774337640,1653077731,812908808,2083208331,2130643716,1962891026,121932292,-1427615592,113541891,-1946270071,-1992293308,38061828,1552613887,71731716,1793787784,67519734,-25080203,762644426,-1744354166,234612816,184730755,-952797760,-1694105082,71616298,1149896978,-661940217,-2017008687,-956233630,-351726844,33601720,-48568240]},{"sector":4,"length":512,"data":[-1996307325,-1073019836,1283458676,-1679095802,67521664,1459618239,1342457485,-1744354166,53209168,-1996045181,2117729862,-385649410,1183514417,1592011268,1575324511,-326412861,-167485813,17174151,-1070398092,-1962080535,1451952206,-851463162,-1274776799,-167056631,-2147081593,65536884,216656128,-1946396842,-1946514446,-1273240632,-1002787827,440145780,-2017065099,-352254450,1191544837,-947131422,1583333931,33129411,1015023476,-336759798,579335912,427048966,-851181384,549648161,-1928694528,-1274564586,1914817855,-351620907,-1341733329,378339335,1068763056,-1032707635,443858955,17333891,-4644748,-1194226689,567099905,-2147483207,168276030,229640052,-351906165,106335124,1048613611,1963591600,1438313433,-326898549,-1027713534,105155079,8628632,-1070393995,-2013117303,1149830724,-972781308,-1946220732,-1962021946,147227590,143263291,-1070344331,1575324510,-326412861,1460202627,171346774,-1206392058,-1202716660,-11532366,211281972,184992899,-2096597824,1015218886,-2082179840,963903548,-947700597,-28915956,92930048,1183422535,-1977816070,-12740603,839152896,-1979520064,-27358459,-1996601601,-16375161,-2092434866,1962998398,313310,-1956684288,-1883021851,-1912094714,856030238,-1950250039,1241091049,2897547,141882891,-1359821170,-92950971,608212805,-771912706,382010341,-263460833,-57946229,-326370045,-561117418,-481692109,8292621,-1431550651,-92946422,1317663714,-1994451456]},{"sector":5,"length":512,"data":[-16381402,1426571302,-289674101,-285507320,1393062664,1130043391,-386733245,-469105622,2122320500,74776580,-33274170,1075234078,620804102,-1960894003,-485956594,178951,149036799,-1274788213,-1893610164,-1912042490,369490974,8437255,-768370516,71204902,1701970694,738627152,-1950338304,-1949173816,648999672,-109771464,-1962686589,-1949173816,92940023,-533053113,574362740,154929268,540804212,374926197,8502791,726608875,1962871806,1120898033,63146843,198081,738197029,519867360,118890246,548447475,533433258,-352288322,80251662,738075652,-1191408672,-206888893,-1430156380,521598091,-1948480688,178957566,1010660544,1444902178,101058303,1958742700,1965177902,-8552441,1325692252,1206774698,16729542,938005995,1322284032,117392982,-1431566842,141869066,1962943976,-1428034571,1263269003,141816635,-1995995219,-219414972,-770974581,134152821,101197449,143402751,41158972,1438851132,1586228363,579335684,242491398,859964088,-841905207,-385649887,-2013918741,1971324450,8513795,-1962389877,119408214,1476182067,-1947169962,-1201282054,-1359855606,-1957612939,1237986255,567087331,-1645214820,162792563,-1073002005,-1186582668,-1900412926,-851397624,-1274776799,188017417,1494906048,-974399605,735021905,-1675506230,1939730435,-351685628,1975520026,579335702,192167942,-2147066229,58006079,-117117960,1495009464,-963968398,1625907038,139365129,-1274653045,1931595072]},{"sector":6,"length":512,"data":[-351685628,200008685,-152603200,1074143879,-628422028,1964654464,-689178621,470333689,-1957310229,1988843244,-889290492,-163810041,1963722308,121932342,-774337640,1653077731,661979400,302269639,121932297,-774337640,1653065443,113705224,714802690,148679,71600898,28837001,-2127238400,1963451134,105182764,-1977191156,-1952970940,-152841768,17326727,12064629,-1914155006,46433272,184829065,-2147060544,-351795636,1589654457,-1017256565,1458342741,-2096728437,1946158206,-889290420,-1977256697,1352140612,-2096557848,-1073020220,-397011340,-998045338,121932290,-774337640,1653065443,451608584,132316801,-397010059,-998045366,74776322,-2080891416,1686110916,-1070336250,1149830281,-443851260,-1957313699,116163564,1988843095,106859272,1033373578,1114898529,1946186301,7814408,-2031537804,-28915968,1191116801,106859270,1965768576,-28409849,105316104,637421195,20774919,1025143808,880017410,1946158141,-955192524,196166,1187500267,-352320258,-134270007,589382,-813627276,-410976254,1586233342,1950318598,-813625227,384516096,-352124481,17416158,1586223595,1648328710,-813628299,-1531412480,-11055103,-219675530,113541897,200951433,855932352,-146609216,589382,1153828468,300646406,117327607,-972655616,-352188860,105170436,33998593,841652998,-94467136,-2021071919,-1986525086,-1070398908,1149830281,-96040444,-1962457976,-1956684090,1438866917,1448602763,2123040542]},{"sector":7,"length":512,"data":[108432132,1317787531,1996372744,63343380,1945648065,66126604,-45134087,-335764237,197626657,1944637894,868715274,1927860678,-1958107925,-202780199,1944834469,637831685,-1031076472,-1017290914,1458342741,901379635,-52153856,-488623444,1442087163,3477246,646448757,300613684,225764362,-1157613894,431554562,-851397632,-1564462559,-1956773835,1438866917,1656286347,-342104063,1988843095,-1568240378,150643710,-1560000885,1183516914,150381320,144949299,151429897,1962949760,21620995,1948597376,17492227,150996679,-1070399487,-1559691613,44239086,150250249,-1559693149,212011248,151954185,150734535,854261792,1965898880,235339526,-2144867575,209005372,150865663,149948103,384499712,1965046912,-29457651,175439880,149948159,117376235,-1975121652,-397371388,-998046201,1975520002,79189695,-1863823351,79987461,1015083147,-15567570,1174992902,151042134,91875408,-1962621821,1815904496,113706869,133364,3964998,-1595341963,-1744532992,-23165303,1946174781,4668682,1480394100,-16157440,-2096566778,553557638,-23165301,1023435565,1047986197,781434883,600483839,151127807,151783111,179830784,-2014818304,46433024,146297067,-1192039680,-303366128,-397361101,-370474592,-352321096,-1632174091,35580158,-24388629,599278059,599597972,599598013,600187846,600187846,600187846,598090694,600187846,598746054,596648902,600187846,1048781739,1946159368,151429381]},{"sector":8,"length":512,"data":[-381280021,1031863974,1191605285,1962950016,734497781,-396996410,-998046946,-369652988,1600061066,-1017256565,-1192457387,-152567784,-2091493399,1946813566,34012932,-197229815,376700936,150347403,1468729227,-129595134,-2080745847,67696134,1048783339,1946159362,-165770480,-1995994360,1187510342,-352321286,-165770483,-1727558904,-1980217719,109312598,-2097018634,592958,1183518068,-96072712,1183516020,855829252,151692224,150615691,151142019,-2094369536,2097216126,75399972,-971541238,-1958335228,1452013638,-2082932742,-621346606,-1980217719,1187510870,-352321034,-163133691,-41222144,-15143037,-11074442,1996487286,81783032,-2096577405,587838,-396943244,-997985283,953090,-1983370487,82574926,1177552070,-113013,-1072955826,92992127,1048773768,1946159342,2086747143,539787267,2105558854,-428539649,151142019,-1592494848,101386494,192153840,16154243,28837237,855829248,1441288384,46433026,-443850914,-1957313699,571628,1474873576,-66664618,-2097143800,1946158206,114192,-2096564575,34141702,-335788407,-165770445,-1995994360,109313094,184682742,-955943488,143719494,-386107649,-997985447,-2081387774,587838,104401524,74647808,151008907,151273099,1048837675,1962936590,250107655,46433025,-59310250,-2097058328,1048773828,1946159374,-152545529,46433024,-443850914,-1957313699,178412,-1578615576,1183385846,-130120706,108331016,150996679,922681350]},{"sector":9,"length":512,"data":[922683630,1996425472,-97059068,-25755896,-2096921880,2122517188,108291844,1191476867,1048778869,1962936588,4096785,175374345,150615807,-2096928536,1048773316,1946159372,4096785,175439881,150615807,-2096932120,109249220,-955774730,592390,150905088,149947915,1996427892,55699710,184730755,-1207601984,48955393,-397361101,-443875036,-1957313699,-390056980,-2091456611,591934,512440437,1342114034,41911042,-1978565632,512427078,931858674,76023807,233563178,150091519,-402360577,-997985149,108347396,151521023,117376235,-1956771578,1438866917,45673611,-414193664,1048794711,1962936584,74877777,1249834507,512439275,1342114034,41911042,-1609466880,512428284,1066076402,92801023,250340394,150091519,150746879,-2081150232,1967129796,134676228,1321634569,-964706293,151535235,-1962445568,100729926,1599998214,-1017256565,-1192457387,-421003262,-1957275674,2123039862,138314502,1282736137,512439787,1342114034,41911042,-1978500096,-232879356,-15758584,-1999009017,-337368569,-231276786,-1744532984,-205395888,1074054275,117376117,-1958344440,-1073000505,1048822901,1962936584,105286407,151389697,-443850914,-1957313699,702700,1474723048,-97088682,-1983892728,1183448134,71207928,854087177,46433265,737822345,75377656,-1324807519,737727235,238978040,359989257,1965898880,-63012080,158674952,-397371220,-997982572,-63012094,192163848,125763339,151928451]}],[{"sector":1,"length":512,"data":[-2095483904,1946158206,-129564922,-2097127704,592446,1191118452,7334140,151928451,1462138112,-2080462616,2122515140,158597124,16285315,887620469,171868928,158597129,16547459,1122501493,-92864768,-18290602,-2096839549,593470,113708404,2099452,-26482601,1577239683,1575324511,-326412861,-1293369293,-29457435,74711048,48966576,1352147120,-1946289176,1438866917,-1070338933,-1192913688,-397410256,-997982744,171868930,359993353,149831299,-1341885440,-1341985960,-397371272,-997982772,1575324418,-326412861,-402652488,1448600929,-2147060085,242559548,150347403,150341251,1178569474,-13419797,2083536000,960266291,1043934847,192219384,1966095488,-66664698,-1409273848,-774927464,65130977,65130959,820609992,1015085451,-2147124176,-478267076,-1996202357,1590070079,1575324511,-326412861,-402652488,-1101601543,233506967,1178076298,-1207601916,149618689,3964998,-1070338443,1575324510,856191683,1575324608,-402230333,-4718579,1575324671,-387697981,-1564278783,-469105140,1048585077,1912800772,1931623437,1914715149,-351948795,322736135,330302070,-687301445,100574104,-339440957,-326412809,-1947287832,1438866917,-1259803509,1575324654,-326412861,-1947292952,1438866917,-1595347829,1575324654,-326412861,-1947298072,1438866917,11791499,1426266601,1586228363,352027396,-75296387,-166953984,1074143879,28837236,855829248,1438866880,1448602763,1317734174,-1959795960,75402201]},{"sector":2,"length":512,"data":[-1070336117,-218103879,-638107218,41339707,-24392821,-217680245,-12285274,1161480499,1946515455,48972037,-1047801353,-1017290914,-2081649835,1448543468,855930507,-1897376001,46433027,604390538,1963080707,105182780,-1978698488,-1952970940,-152841768,17326727,76228468,-1996209109,-1072956346,-11527298,1149895796,-397371385,-997985067,-62506234,1283458932,-4251642,71601151,1153893513,-1962934270,-1956684089,1438866917,-326898549,-1101637884,-13432894,1149900779,-2086037498,1443591168,-2080409112,1950352068,-964475135,-1976157944,-1948028152,-1956684089,1438866917,1465314443,142508806,-1086819072,1451951688,71731974,-402164408,661782611,915097835,1950877336,1962359569,38046477,1443645065,1577073384,-964480909,-1728151292,184840966,-1207536174,-342228993,-2082829539,-607055933,-338492495,567101620,-1986860686,39094532,110638729,1594343475,1575324510,206474179,1278867339,-2096335870,-25099066,-227211624,-1958745095,1914438618,-1898738887,1979136961,1142831366,-2094632186,-607055933,-338564143,-147067951,-654112395,721812641,-1262448936,1914817866,1979136781,1142327556,75993606,1438896523,-13439861,148651656,839272075,567789,548733556,148582024,1023410981,91553795,17200769,145799680,567089844,-1962924103,1320420438,57876941,-1962894359,-930412986,1023737893,125109504,-116324936,-956468503,17358086,33597841,1451953012,1124120580,-1595334195,239872,11097972]},{"sector":3,"length":512,"data":[-162368128,-2146902266,45108085,148637194,-1274784117,1914817853,12096455,-165556924,762675394,-1946157127,1107474641,-638115379,-1274498886,186764607,-2146011968,436777022,-638120075,45666699,857853250,-851397431,-851528671,105286177,101319460,1451952348,-851594236,-381980127,1190592760,1962999814,178182,-956339991,580870,-402098433,-1990655696,-315488178,148637430,-150505985,132678,-511704203,72780798,567098548,-1326906509,-603523332,125173512,33965815,-1825409792,567099060,604391050,-603583997,72780552,567098804,116840562,1963002077,138868500,225705985,-1828599424,-1207675253,567100161,8055187,1317754455,71731978,-1962518901,509020286,177470471,-2095876928,242551545,175755787,-139842128,13796315,-141829385,198325138,-150833984,-235432975,80971666,1983462448,-1440283646,-1022639477,92856949,92712015,1342129288,-177014981,1566531160,-326412861,148571846,108461824,1493196776,-1962520951,-315489194,567098548,-661959310,-1207675253,567100160,115191,-919468939,280036075,411383,-150047424,-2147482042,116787829,1971325151,-2134278141,148573706,-1207842432,567100416,-1024015477,-2147257216,-1886895927,-2017065438,-385874418,-1957299293,100704748,1586221303,-2117917948,-1463811869,-2147256960,1586037195,1438866692,1586228363,107446276,12803535,0,0,0,0,0,0,0,1766596675,1918988898]},{"sector":4,"length":512,"data":[539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,1163412782,1112485376,1278083146,771768905,5066563,1313423918,1498623488,3080275,858927408,926299444,14648,-1,0,5243135,5898325,6553695,105,540697446,684837,1912627826,807731298,978873400,842016032,807739480,677938,1912627826,707395682,539634218,684837,707406378,1931812906,707395594,170535466,707395594,539634218,684837,707406378,1931812906,707395594,170535466,1931804682,707406336,622864938,704645747,707406378,175318304,707406336,168438314,774766592,620759598,540697653,1931804704,1850277898,1886220131,1651078241,1931502956,1668573559,7562600,1868787273,1667592818,1329864820,1702240339,1869181810,1937047662,979724129,543385120,1566650203,1647270688,794501213,1528847715,542993455,1651257179,542985806,1568091995,1949260576,794501213,1528847726,1313754671,1713397070,828730473,1818846752,668261,1852727651,1864397935,544105840,757101349,7546144,1814065957,1701277295,1752440946,622882401,1869480051,1718182944,1701995878,1936024430,1668179232,1953396079,1684370021,1953853184,543584032,1869440365,686450,2037605714,1713398638,1701603681,538979940,1701603654,1918967923,1869881445,1768169583,1919247974,1551134309]},{"sector":5,"length":512,"data":[-1618935698,64736,34734080,248905728,1059061765,104808255,1094918144,169888844,1094918144,1528843340,19615810,154880,264717,0,1852534389,544110447,1869771365,168624242,3801088,794558510,794558522,3014714,794558522,16777274,84148994,151521030,218893066,286265102,353637138,421009174,488381210,555753246,623125282,690497318,757869354,825241390,892613426,959985462,1027357498,1631600446,1701077858,1768449894,1835821930,1903193966,1970566002,2037938038,1566333818,1633705822,1701077858,1768449894,1835821930,1903193966,1970566002,2037938038,2105310074,-2122285186,-2054913150,-1987541114,-1920169078,-1852797042,-1785425006,-1718052970,-1650680934,-1583308898,-1515936862,-1448564826,-1381192790,-1313820754,-1246448718,-1179076682,-1111704646,-1044332610,-976960574,-909588538,-842216502,-774844466,-707472430,-640100394,-572728358,-505356322,-437984286,-370612250,-303240214,-235868178,-168496142,-101124106,-33752070,16842750,84148994,151521030,218893066,286265102,353637138,421009174,488381210,555753246,623125282,690497318,757869354,825241390,892613426,959985462,1027357498,1094729534,1162101570,1229473606,1296845642,1364217678,1431589714,1498961750,1566333786,1096834910,1162101570,1229473606,1296845642,1364217678,1431589714,1498961750,2105310042,-2122285186,-2054913150,-1987541114,-1920169078,-1852797042,-1785425006,-1718052970,-1650680934,-1583308898]},{"sector":6,"length":512,"pattern":0,"data":[-1515936862,-1448564826,-1381192790,-1313820754,-1246448718,-1179076682,-1111704646,-1044332610,-976960574,-909588538,-842216502,-774844466,-707472430,-640100394,-572728358,-505356322,-437984286,-370612250,-303240214,-235868178,-168496142,-101124106,-33752070,1917190142,544370546,1308622896,1970479215,1713399907,543517801,1679848047,1667592809,2037542772,0,1735540992,1936288800,1869881460,1869357167,1157654382,543384952,1836216166,1696625761,1919906418,1684095488,1818846752,1970151525,1919246957,1308622848,1696625775,1735749486,1868767336,1342203250,1768780389,1869181811,1701060718,1684367726,0,1701603654,1769497888,7566451,1936683587,1701064051,1701013878,1852402720,107,1986939136,1684630625,1735549216,1852140917,1409286260,1830842223,544829025,1852141679,1818846752,29541,1867382784,1634759456,1814062435,544499301,1679847023,1667855973,101,1632436224,1629513844,1836410738,7630437,1970496850,1948284012,1814065007,1701278305,1699872768,1920298867,1679844707,1818517861,543908719,1819635575,1668227172,7501155,1426071610,1869507438,1696624247,1919906418,2560,74843246,76612727,76743826,76874900,79234215,80348361,81462475,82707693,82838767,84804860,84935951,86115601,87491875,87622968,89261370,89392467,89523541,91555172,2426230]},{"sector":7,"length":512,"pattern":0,"data":[0,0,0,0,-2122252288,65921,0,0,0,0,0,0,0,0,48168960,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1608,0,0,538976256,538976288,673718304,539502632,538976288,538976288,538976288,538976288,269502496,269488144,269488144,269488144,-2071690224,-2071690108,277120132,269488144,-2122248176,-2122219135,16843009,16843009,16843009,16843009,16843009,269488144,-2105405424,-2105376126,33686018,33686018,33686018,33686018,33686018,269488144,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8192,1127940096,1279870559,1313431365,20294,202506240,202506240,1,0,258,0,518,0,900,0,1026]},{"sector":8,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,0,0,0,0,0,0,0,140115968,168624128,1819635240,721430892,2301997,33691136,201919768,134679564,318767103,-16641523]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[29252173,262177,15007776,73465855,-526776320,7408,30,243531777,485556985,739835904,745209856]},{"sector":2,"length":512,"data":[-1957363712,309484,-954471192,65094,-1609602584,-467006014,-523040591,230887050,-1056707286,1039943305,91357962,1979913277,168755005,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2095416600,-1866988348,-186101750,46433032,1342177720,-2095140632,1996423876,162195710,-1996307325,1048837702,1962940068,168754997,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2095437080,-55049020,-1528279030,46433032,2122516203,175440126,1342177720,-2095163160,-222821692,-1998041081,46433032,-385976577,-998047710,-28931838,191577728,1342665728,-2096547864,1048576708,1946159978,237824003,-1017256565,-1192457387,-152567804,-62470630,75399936,-385646848,1048772895,2114000548,185907210,138012752,-1207778173,-397408254,-998045649,-1539407102,175374614,1342728888,-2096619800,2058879684,350769160,46433032,1342177720,169797712,-1996176253,-12714426,1027765503,678690817,1946157629,212290,71123572,1027765248,1114898437,16678531,2122538876,1501497854,100550283,1424687152,-402360577,-998046984,1958742786,379887884,1963214393,-62470652,197715969,-402619927,-169148274,-351898136,138340592,1048833003,2114000548,74907575,-2096603160,1183384260,1975520004,1374179540,46433032,-352041335,2144456,178305104,-1640562864,441706506,-16333693,-2096231922,920126,128979068,235413131,235407103,-467007608]},{"sector":3,"length":512,"data":[146280171,129519630,-991408128,79987480,1342861496,-2096677144,-1732771132,887640074,46433031,16547456,-655817867,71732222,-1017256565,-1192457387,-1159200756,-62470631,-196688128,1187446784,-402652934,-88601830,15224840,46433031,379862659,-1207271935,-397407468,-998045969,268888066,1342913208,-2096700696,1187447492,-352321030,-161576169,-472709967,308199296,-1962510976,1183447622,-96010252,-386238721,-998041938,-163149566,-646070261,-2080747777,1962998398,168754998,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2095579416,-625474364,2028490760,46433030,-2097047319,1963063934,-193035468,-13730304,-2096231922,920126,128979068,235413131,235407103,-467007608,146280171,129519630,-1125625856,79987479,-351739208,-193035332,-385646848,1996423500,143833332,-1875443888,419686408,-1207516029,787024010,149600257,101836880,-1207778173,-1202716671,-397344769,-998045672,-28931836,-385649344,1996423456,367323390,-1996307325,-1072957370,2122538877,243007742,167673475,1183516799,3147262,548930539,-1598533632,922701834,-1494742370,113541912,235540223,235552387,-1341096960,136219399,134676238,705136654,-1206981660,-1202713080,-397410297,-998041833,175159300,93448272,-1207778173,-1628894568,-128021760,-472709967,308461440,-13732353,-2096231922,920126,128979068,235413131,235407103,-467007608,146280171,129519630,-790081536]},{"sector":4,"length":512,"data":[79987478,-351763784,-62470558,-163133695,1586167808,-754667018,1585956579,1191116818,-159480842,-1947501564,-472647586,308185030,1795606144,803733771,150648841,85321808,-2096970621,18261054,347605630,82333707,46433029,-15852568,-1061618058,922701832,-756545346,113541911,1342748856,-2096830744,2122318532,57999612,-385957143,-443869685,-1957313699,702700,-971543320,-956238266,64582,16402119,-92864768,-2095944216,-1073020220,1191125620,-94467076,-472709967,308461440,-1962183679,-472647074,308449080,1187384437,116064758,-1980086645,1191180358,-92371974,-2084406268,1962998910,143190135,1342824120,-2096861464,1048773316,2114000548,185907210,73263184,-1207778173,-397407430,-998046637,166115330,71952464,-1207778173,-397410303,-998043390,-28931838,1962934845,14543107,1962934589,74907435,346175231,-1202667469,-397410301,-998043148,1975520008,12445955,311297734,1778828928,28836107,11528448,-1207430680,-397407778,-998046729,-1539407102,176029974,1342903480,-2096896280,-35126588,188397580,64612432,-2147302269,1946220158,168754997,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2095765784,-2034760508,-1595387895,46433027,2122532075,779420924,235540223,235552387,-1341096960,136219399,134676238,705136654,-1206981660,-1202713080,-397410297,-998042389,159299588,1996473323,-126419196,-2097147672,-1073019708,-1998060684]},{"sector":5,"length":512,"data":[-1950338284,1438866917,280554635,367519744,16271046,-768313,-263796737,1187446784,-939524100,130630,1586197739,-754667018,1636272867,1357130258,-738828661,1619495651,635981842,79987476,1006388779,712962118,-1309254005,-1964780796,705847687,1586188516,-1964780554,1343381639,-2095841304,1177224388,-263812612,-1979955573,1586230342,-754667018,1703381731,1357130258,-738828661,1686604515,-706195438,79987475,-244087,1996488262,312797438,-1996307325,-12716474,-385646849,-1566441608,-62510316,2129675835,346202384,1090274859,-1947187575,1183448134,-196673548,-2081403137,1962995838,168754991,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2095852824,2125989060,17230089,-1192200449,-11531866,-402023370,-998042335,-193528058,1342817464,161756927,-2095771416,-1766324540,619204617,46433026,-386894081,-998044494,-96040702,58048523,-1207905303,-397407632,-998047225,165066754,33417296,-1207778173,-11534332,99153014,79987460,1039287945,58064895,-16734231,-397346186,-998045503,1975520004,168755024,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2095895832,1996424388,155760890,1043791696,343926793,-16333693,1857614454,922701833,1860700486,113541908,-351717192,-129579513,175159297,24766544,-2147302269,1962997886,-11736829,-1962510593,1174663750,-11515654,1996485238,254994436,185123971]},{"sector":6,"length":512,"data":[-971541312,17525254,-1207277592,-397407998,-998047421,112642,-1070398741,-1017256565,-1192457387,-823656446,87877651,1342840504,-2097077528,1048773316,2114000548,185907210,17950800,-402471805,985139752,82333707,46433025,16664263,-25263360,-14254844,-1477902730,46433038,980729867,-1308729717,-2132552956,17982143,1586170740,954455038,1964139151,-25263327,-13339388,-2096231922,920126,128980348,235413131,235407103,-467007608,1191121899,-1196495874,-1202713080,-397410297,-998043109,167688196,-16742167,-2096231922,920126,128979068,235413131,235407103,-467007608,146280171,129519630,-320319488,79987473,1342834360,-2097125656,-1070398780,220260432,1023591555,1366622209,1342181560,1343661752,-1308735861,98620164,-397405602,-998042209,1778828806,113639691,-402584725,515376194,686313482,46433024,379862659,-1207271935,-397407468,-998047721,154068994,1342830264,-2097149208,954729156,1575324433,-326412861,-402652488,-950660455,65094,1988836331,-754732546,73305062,-1962774273,-472646050,-16484725,86763568,-1962621821,61996662,1586226899,74514180,-738298229,108068838,-2096846872,1191118020,-27358210,-472710223,-2096859509,-1233321928,-738298229,73305062,-1962774273,-472646050,-1962641781,1356396288,-2096832280,1988822212,-754732546,73305062,-1962643201,-422314378,-402231041,-998046628,-443851260,-1957313699,-390056980,1877479937,174635011,-11147184]},{"sector":7,"length":512,"data":[-2096970621,18261054,347605630,1156075531,46433279,-402105368,-443871121,-1957313699,178412,-955133720,130630,191577728,-2141490176,748094,-1763179660,278968322,74907472,-2097004312,-1073019708,251609205,1048776202,2080378378,-1962430448,-15857634,-2012346362,-337368569,235452430,505936,274589776,-1207647101,-397407632,-997982505,185382914,-20060080,-402471805,113643515,-16774293,1996424262,40691716,-1593654141,1178146468,855997956,12249536,1343267000,-402360577,-998043937,-28931836,1467334667,-16603672,481821814,922701835,1726483226,113541905,1342903480,-2080474392,251593412,1048776202,2080378378,-1962430448,-15857634,-2012346362,-337368569,235452430,505936,265152592,-1207647101,-397407484,-997982649,259385346,-2096999960,1962999422,-9180925,312360577,393521749,1342308536,1342943928,1343267000,-2095874328,113641156,-16708757,481821814,922701835,-353891558,113541904,1075094177,171358288,741801808,282585098,-1962490749,-443874234,-1957313699,2144492,1443923176,16533190,335969923,1187448190,-1929374714,-1924079546,-397345210,-998047008,-58818556,-12094208,1996480630,51112190,-2096839549,2080375934,74907411,1342206136,1357006477,-2096070424,149620420,551700166,14894790,-1928956161,-397352378,-998045516,1958742788,-129579239,1187446783,1891107324,1894273034,46433277,-369604981,1187446932,-973078280,-956171194,64070,-2131069301]},{"sector":8,"length":512,"data":[1946215034,-498955636,-153580648,68102023,764941940,-930414544,-150992200,-939263890,-504183,-722732474,-1963297141,1352196674,1342873784,178140927,-2096104216,251594436,1048776202,2080378378,-1962430448,-15857634,-2012346362,-337368569,235452430,505936,242083920,-1207647101,-397407632,-997983001,177780738,-52565936,-972897149,-385811386,-1956708593,1438866917,45673611,258467840,16664263,-25263360,-13468411,28837494,-1070379008,71732048,1342209797,-2096935960,-1073018684,1183519348,8324356,42854480,-16595837,-840171962,-352321096,-1950338302,1438866917,481881227,253487104,193805952,-970885888,-970595002,-1205607354,1183386508,-230257174,-465138352,305653840,-972766077,17534214,-1017256565,-1192457387,-421003236,-448346610,71731720,1183350532,-230257174,-465138352,1292368,310372432,-2147040125,1946219390,-1543059704,-352321514,-129594841,-1532763094,-112817642,-1978359646,-1974405306,-397347258,-998044396,346202884,620119690,346137151,-1017256565,-1192457387,-2031615972,-448346610,-230257393,-465138352,1095760,304605264,-972635005,-972626618,-973020090,-955783354,59462,418072262,-1997322614,1183705670,1183666418,280514788,-85438464,1575324433,-326412861,-402644808,2122321465,846530564,1356875405,1358841485,-2097111064,2122515652,1719534048,-2076929,1996480630,13101310,-16464765,548931190,-991408128,79987711,1187396843,1183451619,-498694140]},{"sector":9,"length":512,"data":[-2012854646,1187439686,1187447013,-1929379354,-1924075450,-1202658746,-397410288,-998043251,-532247290,-28930736,4384848,-16464765,1996480582,-25755680,-2097123096,-443874108,-1957313699,178412,1443736808,300676659,-1962510593,9045086,1491619992,79987711,73304902,1962948736,-443851033,-1957313699,1882348,-972193560,-972823226,-1929320634,-1924074938,-1202658234,-397410288,-998043363,73304838,720979594,126435556,-1979294069,-466945978,-1962440384,1438866917,481881227,222554112,48580294,15156934,-33274230,-347699000,-33143158,-364476216,1358055053,1357137549,1342181560,-1961832216,1438866917,481881227,219146240,31737543,71731714,-1964358008,1183319622,138841067,-1947711863,1183386182,-230257178,-465138352,1292368,278390864,-1979267965,-466947258,-1017256565,-1192457387,-823656416,-62470388,1187512304,-386924290,1387855410,417878027,46433274,-401619992,1593835042,1575324668,-326412861,-402645832,1187450017,-1979711260,1183319110,-230257174,-465138352,1292368,272361552,-1979267965,-466947258,-1017256565,-1192457387,1927807004,-448346612,-465123835,-230257408,-465138352,1095760,269477968,-972635005,-1928338106,-1924074938,-1202658234,-397410288,-998043655,-230258170,71164970,1024226304,225705989,1946158653,-971838706,-352197562,-465123822,-972231936,-352132026,-230258170,-958118264,-1929321146,-1924074938,-1202658234,-397410288,-443871307,-1957313699,1882348]}],[{"sector":1,"length":512,"data":[-955517720,50455622,-2012985718,1183509062,-347699194,-1995946357,1183574086,-431585014,1358055053,1357137549,1342182328,-2096136984,1183450820,-1947981069,1438866917,79228043,196339712,33441479,-25755904,-2096563736,1183384260,2109737980,15788291,78764171,-2020940845,-467004831,-60912816,-2020940845,-397405600,-998045196,71711492,1586179196,-754667012,1636272867,1357130258,-738435445,1619495651,-773304302,79987465,50613899,994641486,-385647416,1586167960,-754667012,1703381731,1357130258,-738435445,1686604515,-1511501806,79987465,2080654907,-60912855,-472709967,308643722,-1957632982,-472646562,308578186,159574096,-1962621821,1308820558,-935638778,1586187389,-754667012,1636272867,1357130258,-738435445,1619495651,1508397074,79987465,2130986555,-60912851,-472709967,308643722,-1957632982,-472646562,308578186,154593360,-1962621821,1308820558,-935638778,-1070398337,1191125739,-16913922,294531,1183576188,105251588,-1576649912,-2082242796,2113930878,112861,-1017256565,-1192457387,-2098724852,74907402,-2096640536,1183384260,91570422,-437665741,-161576192,-472709967,308447114,54387754,-385649152,37552280,-385650176,20775041,-385649664,1187446933,-1962425096,78771806,-2020940845,-467004831,-161576112,-2020940845,-397405600,-998045540,-96040700,-1309254005,-1964780796,705848711,1586188516,-1964780554,1343382663,-2096595992,1183384772,-196702722,-62485168,-59840432]},{"sector":2,"length":512,"data":[-1962621821,1177288262,-11517702,1996488310,-126418950,-1309254005,-2132552956,-2146279745,-341825163,-953685241,132315206,1187481067,-385364232,71171965,-385649408,-12714128,-940870656,131659846,-1593874199,1352140780,-1207666945,-397408354,-998044635,-193528050,1090274955,-62658480,-1207647101,-443875327,-1957313699,178412,-1207337752,-397407648,-997984557,170309634,-154539952,-956119933,130630,-385976577,-997982510,1958742786,-28901623,83787395,2122574462,175440382,1342855352,-2080989464,-443874620,-1957313699,-390056980,1996425521,108461832,-2080645912,1996424388,175570692,1342942904,-2096389912,1183516356,172360456,1996443720,-71571450,-1017256565,-1192457387,-85458932,-96024824,-1600061441,1357130260,1343529376,346175231,-2096705816,1183385284,-27883012,16271047,-128021760,-472709967,308709259,308844427,-1980479863,1996486230,64022776,184730755,-1959234368,1452014662,-162121218,92024191,1945388601,73304870,-1946925429,1463416406,2081980162,1929853188,-129594606,-1946532215,1452012614,-62486026,-108919,2122577990,-1652816648,-1962647925,1452014662,-1995994626,1183515223,1575324666,-326412861,-402652488,1642596437,-28932085,74760202,880083772,67010176,1307050868,168754955,171868942,276561934,512427952,117378568,126357000,-823401430,1343097016,1342179256,-2096696600,-1091894076,-1728166262,-1017256565,-1192457387,48758786,160348168,-178657200,-1207778173]},{"sector":3,"length":512,"data":[-11534332,1642595446,79987703,1040074377,74842111,1726726195,33455747,1183516796,-28952316,251610238,1048776202,2080378378,-1962430448,-15857634,-2012346362,-337368569,235452430,505936,109439056,-16464765,314113654,922701833,-622327536,113541895,1342769848,-2081100056,2122515140,-2055470594,956581515,58654278,-1946191127,-443810234,-1957313699,833772,1443327208,16008903,-28915968,1996423170,182249476,990037123,108922438,-369099080,2122514793,91553798,1592377395,-163148543,-96039600,-105977776,-1207647101,-1605369841,1352140781,-2080839960,1183515844,105251830,1996443712,-104077062,-1207647101,-1605369841,1352140782,-2080848152,1996424388,-163149050,1996443712,74907642,-2080523288,-1863841596,-62486274,1517555004,2095599768,46433034,50232963,-1226243212,-195130624,-972786037,1996423168,-163149050,1996443712,74907642,-2080537624,1491601604,-62486274,540056,222111604,1025209344,259260443,956712587,1786573894,16271047,-950473984,130630,1187491563,-352321282,-193035353,-16417280,-1662258098,235540223,235552387,-1341096960,136219399,134676238,705136654,-1199445020,-1202713080,-397410297,-998046417,-9377532,-1946650997,1082786910,-1948349695,8914038,-1946663169,1178203206,-1737480,1586230350,-196673548,-1979418997,8977478,-48663,1996486262,-120854278,-1207647101,-1202716665,-397410272,-997984313,-163149052,1074152963,-92864688,-2080854808]},{"sector":4,"length":512,"data":[129500356,548950016,-1461170176,79987703,1593722507,-1017256565,-1192457387,-689438712,-79247867,-129594112,-62485168,-130095024,-2096839549,1963000958,133144584,-335919480,75399951,-1610255104,-253032464,553273030,1342177720,1358579341,-2080495640,-1073019708,1891111028,-320319478,46433266,-385875272,1183449238,-661939974,254248950,738489346,-1979454688,1183382086,133210366,1979598392,175159310,-222435248,855819395,-1603671104,1178077167,-1206946306,-397407632,-997985625,112642,251613931,1048776202,2080378378,-1962430448,-15857634,-2012346362,-337368569,235452430,505936,66447440,-1979399037,1352202822,1342886584,181417727,-2096805656,-893909308,1558728714,46433266,-493825,-1494680458,-14095881,-1017256565,871140181,82045120,1342181560,1343661752,-1325119861,98620164,-397405602,-443874079,-1957313699,702700,-1962622744,78709830,1577443539,-28931822,425603,28312693,-1070464277,-1996595573,1996423495,-27358454,704726922,1996443876,19851270,184992899,-385649472,1996423340,112646,-28931248,1342178053,1090406027,-1142403008,147096322,-1593942389,1200100512,142016261,705995168,1183535332,460286,-28931248,1342178821,-2096982552,1586170052,21465854,-1202658262,-11534335,484968054,113541890,-1980086647,-1600062378,1357130260,1343529376,-402098433,-998047229,-96064762,-1979951589,1451882054,-27358216,-2097151739,1200160978,240617740,-1946263925]},{"sector":5,"length":512,"data":[1452014150,138906108,-2096474231,2080438398,-2130215061,-2147420546,78668406,1183539435,-1924120322,-397408698,-998047496,138840836,2131117625,-14751485,1342865592,-2081351960,2125988548,216551433,46433265,235540223,235552387,-1341096960,136219399,134676238,705136654,-1206981660,-1202713080,-397410297,-998047137,34727940,384548915,1586168240,71796990,-956408181,113639431,-1207891093,-443875327,-1957313699,67811564,-1962714904,2131036230,138840320,33048263,346136576,1178199082,-10651656,1996424310,-163148296,-96039600,24963152,-1979136893,-466946490,-523040591,721047178,-1983839251,-2037515194,-11469834,1996487798,142016262,-2081034008,1183385796,1975520254,-158954213,1996443899,108462076,-402098433,-997984528,-28931832,91537419,-335657333,-129564923,-443838485,-1957313699,-390056980,1586168525,346071046,121234474,130484594,1586167808,-1962677500,134153822,-1017256565,-1192457387,-1494745080,-62470398,1187512319,-2080374786,2130969726,75399942,-1207599360,636223486,33048263,-1928074496,-397345722,-997983878,-96040702,-16026560,1183578182,-129615612,1183573374,1575324666,-326412861,-402652488,1187447385,-2097151746,2097544830,108461874,1342177720,-1957642189,2131035206,585650176,147096565,309641227,84166283,-397410177,-997984897,-28901630,28888555,855829248,1575324608,-326412861,-402651976,1448542733,705994912,-919912220,-1583329199,1373907476,71732048]},{"sector":6,"length":512,"data":[-397389159,1347551878,-1962817816,105286600,-1952851317,346136816,-125049814,-1995946357,1451883638,-1947731970,-1950250000,-2084174893,1174601938,-27913220,-2097151699,1599996122,-1017256565,871140181,28043456,-1979294069,126356038,-1962647925,2427462,-772222717,138808056,-443873400,-1957313699,-390056980,1183449477,635709956,-523173696,1317724369,200092166,1575324609,-326412861,1726529587,188397569,-289544112,-352140157,168754985,171868942,276561934,512427952,117378568,126357000,250340394,1343097016,1342179256,-2097148184,-790100796,1964719352,1575324624,-326412861,1459940483,108432214,-1744419702,1946190761,105182726,-1207536576,-622198785,105182720,-2147060735,-350222772,105677038,107249666,-1983892497,-125107644,-151093623,1963460164,121932303,-774337640,-1601702173,812908814,2083208331,2130643716,1962891026,121932292,1088966808,113541895,-1946270071,-1992293308,38061828,1552613887,71731716,1793787784,67519734,-25080203,762646024,-1744354166,78374992,184730755,-952797760,1091420166,71616289,1149899424,-661940217,-2017008687,-956232032,-351100668,33601720,262924368,-1996307325,-1073019836,1283458676,-1679095802,67521664,1459618239,1342457485,-1744354166,113371216,-1996045181,2117729862,-385649410,1183514417,1592011268,1575324511,-326412861,172395350,-150712693,-1948742687,-259323834,-637279753,107411350,-745809917,1566492299,1493174466,-668214133,507185778]},{"sector":7,"length":512,"data":[74583550,-503323765,1426214377,1448602763,-485994869,-1962467812,1988822142,866579206,-12285239,-12240346,58656628,-150803647,1589742545,1438866783,-326898549,-1957275892,183469053,1107707334,-1996208501,92865605,-16628281,138841471,108461904,134735959,-1962490749,38666224,163203,-1070461828,100605323,-467007608,861342443,1357402304,79987710,1600046731,-1017256565,1475119957,-1948568746,-1073019322,-738782595,-150710645,500889560,1183383552,72780038,185222795,-149783104,139889619,-621291273,-1996488675,1451821638,72256264,-125050377,-1962391925,65140720,1727502074,-1946680570,197561303,-150506277,-2082932774,1599996122,574045,-1962740545,721420854,16679415,-1107070448,-1896214528,-1094417961,57932566,-2130621975,922746596,248653449,-802780874,-1312388338,1222693636,248423222,567095476,230859574,712180284,1354773278,1119493902,-855002083,1329908513,775037011,1919885360,1952541728,1914729061,1769304421,224683378,-150789110,145033,-567557236,1253366775,-1942609459,-1962034658,503327798,889239574,-1992941107,906938910,248252044,12066574,510769701,-1959386675,-485460978,113587746,-628354954,-13182157,1930457630,13428995,2047264054,-1143305200,-13238269,118518302,2126511135,381729040,-1070346453,370584307,1541938951,310022,-851181384,-167087583,91521218,232820608,-327595200,-402421016,2126185139,2130411792,1393062672,1130043391,-1175262397]},{"sector":8,"length":512,"data":[-517275642,-1962031938,-217639172,35907748,-303502029,48779489,1393167617,1801675124,1702260512,1869375090,218762615,1986610186,543515753,1869771365,218762610,1869366794,1852404833,1869619303,544501353,544501614,1684107116,168649829,431624881,250425886,178975,567099572,-4710634,-1930932224,-1173311230,-437576149,1002053041,1440672542,-326898549,-1101637882,-397013496,-998046530,-1913091326,-11532730,-397015946,-998046263,-96040698,635983702,79987461,1593460363,1575324511,-326412861,119428695,-1962639733,-678754698,990400139,-1961593090,1002505158,51147768,1324942321,-1527513777,-1960711172,-775550009,-1962249240,-775539769,-1528073496,-774272183,-777653271,-1979354133,92808708,1600045707,614515549,1958742543,-1998310905,-1022417882,567085236,1438901298,1048833163,1946160576,-1072234748,74907405,-1962815768,1438866917,1448602763,-1962639733,39684869,-1962652277,1972045397,175999752,-1957223987,92866174,-1996333687,1435042893,141920518,1913275791,-336186620,204335112,-1962933826,209029381,-1017290914,1475119957,2123040542,-1178586364,-1359806465,1077985675,1566562551,-326412861,168764576,-1979025984,614597702,-337366513,-138398972,1438866896,1448602763,-972493693,-1949435834,1183319110,-96024839,-162100021,-1980217715,2123101254,-1962571002,1300955741,106269444,-1962379893,-2091578755,1593773293,-1957208832,92866686,-1996333687,1435042893,141920518,1913275791,-336186620]},{"sector":9,"length":512,"data":[194373640,-1962933826,209029381,1577632899,1438866783,1586228363,352027396,-75296387,-166953984,1074651271,28837236,855829248,1438866880,-326898549,-1957275896,-351418314,833559,271104080,-399179952,-998044410,1958742790,46564104,1962949763,3965924,1015757172,-955463805,65094,-1740175990,-335919479,-1744467428,1962999613,-339725820,-1962571262,1191181918,-527988482,-95486195,-92372153,-941722368,1577058308,1575324511,906399683,-1172402672,-1949748467,-1947628607,915098105,-167051220,-963770252,-1371164942,-1757021579,-1946278848,65393149,-400615739,-812909787,-50070389,118942859,-164372850,-1995578551,1162150014,-1073042772,-203228555,369118857,-936998625,908525325,-326413040,-2129625413,1930460923,402608904,-347913381,51964146,175432714,294528,1187382389,-987824636,-1206990314,567092480,1947110175,-1157111024,520028162,1183518834,-850611196,-326413023,1459940483,234929750,401342259,-1744419702,1946190761,954750475,46433036,1191277632,956876419,1930348598,1590135779,1575324511,939954115,-1172402672,-1106831859,-1733558144,-2144939469,51233342,-1907333774,855649286,-137851968,-218592303,87565998,-947652235,-137852157,653757393,1095173514,343203898,141828668,74713404,-344645572,-1106831784,736821377,201206607,-1947110145,-1956953393,96535491,-31129597,-1948242945,520494844,-1527576810,-1951784784,-2118246453,-1961956608,604243144,-1948242946,541309180]}]],[[{"sector":1,"length":512,"data":[-1952123989,-192173375,-1957683434,-1392604196,1958742698,1965177917,117397023,179047876,1009677504,-2146994910,1969028989,-341160188,1170622445,-706019073,1946171368,1180061392,230950655,-1073042772,635963508,-336235264,-192173343,-214217909,-2018703245,-29062905,-594808085,41275915,646514687,654249414,154931256,540803700,-326412861,-167485813,537780359,45616756,-1949748414,1931595217,150595843,232818678,-385649280,1317732481,106334984,-1070397666,-1957275652,-470119440,1074444389,846573298,735021905,283331018,60563917,74685936,1240140212,796180491,178502,-1274004806,1931595072,-351685628,1958742836,-678733542,-1957575189,-842388529,-268198879,-1274776675,186313481,-166300224,1074651271,1586170740,440369158,-336067723,146340100,41048348,1600046731,-1962381591,1451952206,-851397626,-1274776799,-470947063,1975520235,-527960345,175390733,1065409163,-133991142,-1191586069,-789898232,1458342741,-2130413941,1963854078,105182780,-1976142580,-1952970940,-152841768,17735815,1153902453,-1978490876,-1952970940,-958148136,17735815,230688455,1153900865,-1962803198,76088388,-352321096,553550132,-164858610,1963722308,121932326,-774337640,-1601702173,393543950,1342308536,-2096658200,1149829828,1958742788,105676806,867822344,-443851072,-1957313699,1988843244,75399942,-2125696000,1963854078,121932325,719868056,46433276,376750091,161605718,-1979530109,-1952970940,-958148136]},{"sector":2,"length":512,"data":[958599,-25093397,460656160,159770710,-16595837,417858676,46433031,-150576000,76136499,1577337993,-1017256565,1458342741,901379635,-52153856,-488623444,1442087163,3477246,646448757,300613684,225764362,-1157613894,431554562,-851397632,-1564462559,-1956773835,1438866917,1656286347,-142088191,1988843095,-1568240378,277521406,-1560000885,1183518850,277259016,-1734098893,278307600,1962949760,21620995,1948597376,17492227,277874375,-1070399487,-1559195997,-1834807170,277127952,-1559197533,-1667035008,278831888,277612231,854261792,1965898880,-1643708666,-2144867568,209005372,277743359,276825799,384499712,1965046912,-1908505843,175439888,276825855,117376235,-1975119716,-397371388,-998046201,1975520002,-1799858497,-1863823344,79987461,1015083147,-15567570,1175488518,277919830,91875408,-1962621821,1815904496,113706869,135300,3964998,-1595341963,-1744532992,-23165303,1946174781,4668682,1480394100,-16157440,-2096071162,553557638,-23165301,1023435565,1047986197,781434883,632203263,278005503,278660807,179830784,-2014818304,46433024,146297067,-1192039680,-303366128,-397361101,-370474592,-352321096,-1632174091,35580158,-24388629,630997483,631317880,631317921,631907754,631907754,631907754,629810602,631907754,630465962,628368810,631907754,1048782223,1946161304,278307077,-381280021,1031863974,1191605285,1962950016,734497781,-396996410,-998046946]},{"sector":3,"length":512,"data":[-369652988,1600061066,-1017256565,-1192457387,-488112104,-2091493387,1946813566,-1845035260,-2076278000,376700944,277225099,1468729227,-129595134,-2080745847,68191750,1048783339,1946161298,-2044818672,-1995994352,1187510342,-352321286,-2044818675,-1727558896,-1980217719,109312598,-2097016698,1088574,1183518068,-96072712,1183516020,855829252,278569920,277493387,278019715,-2094369536,2097216126,75399972,-971541238,-1958335228,1452013638,-2082932742,-621346606,-1980217719,1187510870,-352321034,-163133691,-41222144,-15143037,-11074442,1996487286,109111544,-2096577405,1083454,-396943244,-997984098,-1878095102,-1983370480,82574926,1177552070,-113013,-1072955826,92992127,1048773768,1946161278,2086747143,539787267,2105558854,-428539649,278019715,-1592494848,101388430,192155776,16154243,28837237,855829248,1441288384,46433026,-443850914,-1957313699,571628,1475654888,-1945712810,-2097143792,1946158206,114192,-2096068959,34637318,-335788407,-2044818637,-1995994352,109313094,184684678,-955943488,272432198,-386107649,-997984262,-2081387774,1083454,104401524,74649744,277886603,278150795,1048837675,1962938526,250107655,46433025,-59310250,-2097058328,1048773828,1946161310,-152545529,46433024,-443850914,-1957313699,178412,-1577834264,1183387782,-2009168898,108331024,277874375,922681350,922685566,1996427408,-1976107260,-25755888,-2096815128,2122517188,108291844]},{"sector":4,"length":512,"data":[1191476867,1048778869,1962938524,-1874951407,175374352,277493503,-2096821784,1048773316,1946161308,-1874951407,175439888,277493503,-2096825368,109249220,-955772794,1088006,277782784,276825611,1996427892,83028222,184730755,-1207601984,48955393,-397361101,-443875036,-1957313699,-390056980,-2091453559,1087550,512440437,1342115970,41911042,-1978565632,512427078,931860610,76023807,233563178,276969215,-402360577,-997985741,108347396,278398719,117376235,-1956769642,1438866917,45673611,-214177792,1048794711,1962938520,74877777,1249834507,512439275,1342115970,41911042,-1609466880,512430220,1066078338,92801023,250340394,276969215,277624575,-2081301784,1967129796,-1744371964,1321634576,-964706293,278412931,-1962445568,100729926,1600000150,-1017256565,-1192457387,-756547582,-1957275662,2123039862,-1740733690,1282736144,512439787,1342115970,41911042,-1978500096,-2111927548,-15758576,-1999009017,-337368569,-2110324978,-1744532976,-244193200,1074054275,117376117,-1958342504,-1073000505,1048822901,1962938520,105286407,278267393,-443850914,-1957313699,702700,1475504360,-1976136874,-1983892720,1183448134,-1807840264,-739748336,46433269,737822345,75377656,-1324311903,737727235,-1640070152,359989264,1965898880,-1942060272,158674960,-397371220,-997982572,-1942060286,192163856,125763339,278806147,-2095483904,1946158206,-129564922,-2097127704,1088062,1191118452,7334140]},{"sector":5,"length":512,"data":[278806147,1462138112,-2080462616,2122515140,158597124,16285315,887620469,-1707179264,158597136,16547459,1122501493,-92864768,-18290602,-2096839549,1089086,113708404,2101388,-26482601,1577239683,1575324511,-326412861,-1628913613,-1908505615,74711056,48966576,1352147120,-1946289176,1438866917,-1070338933,-1192132376,-397410256,-997982744,-1707179262,359993360,276708995,-1341885440,-1341985960,-397371272,-997982772,1575324418,-326412861,-402652488,1448603981,-2147060085,242559548,277225099,277218947,1178569474,-13419797,2083536000,960266291,1043934847,192221320,1966095488,-1945712890,-1409273840,-774927464,65130977,65130959,820609992,1015085451,-2147124176,-478267076,-1996202357,1590070079,1575324511,-326412861,-402652488,-1101598491,233508931,1178076298,-1207601916,149618689,3964998,-1070338443,1575324510,-326412861,-2147197301,-1962803633,1438866917,1465314443,-2096084805,695533631,95946526,27781120,-1070398091,1076161433,1218706980,273326864,17090454,80118528,-16890681,1312197119,72256272,-1064380276,1593856488,1575324510,856191683,1575324608,-402230333,-4718579,1575324671,-387697981,-1564278783,-469103158,1048585077,1912802754,1931623437,1914715149,-351948795,322736135,330302070,-686796101,230466456,-339440957,13363703,1945041283,-511688200,41389054,-24400388,1114898856,1942043464,63998741,27831792,-1039977356,-1962933755,-29062665,-24385813]},{"sector":6,"length":512,"data":[-117240716,738086025,92883137,-117242389,-1946268418,-2116383546,1946350842,512501253,2139689066,-970538238,34631174,1962933821,67013413,27831792,-24382860,1942043464,63998909,27831792,-1039932812,-1962933755,-29062665,1200350955,1958742792,-338129404,251536915,276041838,-197273460,637891586,275127950,-1108658293,856061835,5892288,225756731,1077936420,5105816,1308495220,780542,1318454644,865790798,1371773376,-1459731061,721646593,1094797768,645922746,275519035,-355400586,-1047792267,359843331,225624579,-1037839625,216581675,-150440704,1978323410,1505768421,-397323581,410255389,-1946252457,-940440592,-65980,-1962510455,1255615446,1493063049,1405311577,517092176,-1202695598,105906177,22931487,-2096577405,1512046586,184710235,-1957313582,-245831444,-1017256565,-387151019,-443813554,-1957313699,-247142164,-1017256565,-387151019,-443813574,-1957313699,-248452884,-1017256565,-1276343467,11331840,1475119957,-1962467754,803407950,2123094411,871860996,-17984,-146690318,1993030617,-1949594878,108432382,1149937395,986264575,91750213,-348060300,-1949174014,1566531265,-326412861,1459940483,74877782,-396951757,-998047561,105155074,37487396,1156988021,259328006,-1744354166,-472786805,245401590,-1960348671,71576324,201082505,1343979200,-1979419393,1352140612,-2081121560,1178273476,-2146994948,-1088420276,1150025727,-956004092,580,1600046987,-1017256565]},{"sector":7,"length":512,"data":[1317754455,71731978,-1962518901,509020286,177470471,-2095876928,242551545,175755787,-139842128,13796315,-141829385,198325138,-150833984,-235432975,80971666,1983462448,-1440283646,-1022639477,92856949,92712015,1342129288,-177014981,1566531160,-326412861,-2147197301,1573848679,-326412861,-2096736426,1962936446,248692536,-1962518901,1967653958,5498887,1223370610,253900427,990999624,-1962052361,1183384132,988304908,812867072,-2130393469,1930371838,1976699652,-18426,-1960973415,264471514,61987793,1219816403,-378396211,-1996191342,914948692,-1070395614,-1956749561,-1950130715,-141882290,1946307641,80118540,253951617,-335941003,64654143,-1959169508,1002540755,956724727,1930350110,264471334,-338568239,-338564143,158725947,-1163798269,-1898435827,-850742080,990736929,-1996196361,-1844523498,-779418489,195,0,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,690169920,1936286822,543370859,538976288,825110816,792016928,825177136,5242929,25637,690169920,1633969254,1663983988,538976288,825110816,792016928,825177136,1766195249,543450488,1802725700,1952797472,1344303221,1919381362,1444965729,1769173605,807431791,3289134,1126777640,1920561263]},{"sector":8,"length":512,"data":[1952999273,1667845408,1869836146,539784294,892877105,1145438254,541807433,1769238607,7564911,1869572163,1864394099,1864394094,1752440934,1868963941,2003790956,979857001,3027200,1634038339,1142973812,1344295759,1769239137,1852795252,3027456,1851877443,1092642151,1986622563,1632641125,1953068146,7237481,1140862515,1952803941,1329864805,1632641107,1953068146,7237481,1140862516,1819308905,1344305505,1769239137,1852795252,1952531488,1917845601,544437093,1129530624,1869881344,1952805408,544109173,1142976372,889213775,1699938350,1952671084,2019905056,1766203508,543450488,1802725700,1769096224,1157653878,1919251566,1869112096,979723113,1701336064,1650553888,1881171308,1769239137,1852795252,1851876128,1646294055,1634541669,1629513060,1986622563,1750335589,1969430629,1852142194,1667309684,1702259060,1918988320,1769236852,1763733103,773857395,1918980096,1769236852,538996335,1634541600,1629513060,1986622563,2105445,1881173838,1769239137,1852795252,1869881459,1801547040,1667309669,1702259060,1918980096,1769236852,824209007,544434464,1701997665,544826465,1769235297,1157653878,1919251566,1701344288,1836412448,544367970,1948280431,1881171304,1769239137,1852795252,1970239776,1851873024,1869881460,1801547040,1667309669,1702259060,774778414,774778414,774778414,774778414,1749221434,1701277281,1952661792,543520361,1953653072,1869182057,1329856622,1634738259,1953068146]},{"sector":9,"length":512,"data":[544108393,1634038371,6579572,1931505486,1701011824,1919903264,538992928,1663049760,1852402809,544367972,1953653104,1869182057,1308634734,1886593135,543515489,544370534,538976353,2036539424,1684957548,1881174629,1769239137,1852795252,1952514080,1819894560,1701080681,538976370,539893792,538976288,538976288,538976288,538976288,1308631072,1886593135,543515489,1663070068,1952540018,543236197,542330692,1953653104,1869182057,1174417006,1684371561,1936286752,1818304619,1684104562,1634214009,543236211,542330692,1953653104,1869182057,1157639790,1919251566,1918988320,1769236852,1931505263,778402409,774778414,774778414,976105006,2019642624,1836412265,1635148064,1650551913,1931502956,1701011824,544434464,538976288,2036531232,1684957548,544436837,538997857,538976288,1850015790,544367988,1918989427,1735289204,1819894560,1701080681,1970151538,1919246957,3812910,1634038339,1142973812,1344295759,1769239137,1852795252,544162816,544567161,1752394103,544175136,543519605,543516788,1769238117,1713399154,1684371561,1936286720,1868963947,1329864818,1495801939,774458927,774778414,774778414,774778414,1140866862,1881166671,1769239137,1852795252,1818584096,1684370533,544165376,542330692,1953653104,1869182057,1869881454,1818584096,778400869,1918981888,1735289198,1631854625,1763729780,1752440942,1329864805,1634738259,1953068146,7237481,1819044215,543515168,1953722220]}],[{"sector":1,"length":512,"data":[1142956078,1870209135,1769414773,1948280947,1660952687,1769238127,778401134,774778414,774778414,774778414,774778414,774778414,1059991086,1698955296,1702126956,1397703712,1918980128,1769236852,1409314415,1818326127,1936286752,1886593131,543515489,538997609,538976288,1819894560,1701080681,3044210,544165376,1953653104,1869182057,1679848302,1852401253,539911269,538976288,538976288,538976288,538976288,1632632864,1953068146,544108393,1952543827,538997621,1701869908,1394614304,1953653108,1850023968,1767055460,1140876666,1819308905,1344305505,1769239137,1852795252,1718503712,1634562671,1852795252,538976256,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538968096,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,536879136,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538968096,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,1668172032,1701999215,1142977635,1981829967,1769173605,536899183,544434464,544501614,1751326817,1701013871,1817190446,1702060389,1953391904,1629516389,1869112096,6644585,1936269344,1953459744,1663066400,1667854184,1344286309,1935762796,1852121189,544367988,1919885401,3034656,1713401678,1684371561]},{"sector":2,"length":512,"data":[1936286752,1881174891,1702061426,1157657710,1919906418,1634038304,1735289188,2020173344,1679844453,7041897,1869771333,1920409714,1852404841,1768300647,543450488,1802725732,1920287488,1953391986,2020165152,1142973541,543912809,1986622020,538983013,1701990400,2126707,4412229,544175136,1970562418,1948282482,1145446511,541807433,1769238607,7564911,1953724755,1998613861,543976553,544698222,1953719666,7631457,1702063689,1142977650,1679840079,1701540713,543519860,1679847017,1702259058,3817760,1936028240,1851859059,1701519481,1752637561,1914728037,2036621669,539897390,8224,538968180,1680154656,538976288,622862368,538976355,538997541,1681073440,858071072,622862436,25651,1142956064,538989391,538968064,1818386772,8293,1852796448,1397703725,538968064,1229866328,1090527320,1499290446,65614,458753,-130926,458753,327864,983041,590038,458753,721124,983044,721153,458760,786692,983044,786713,458760,852252,983044,852276,458760,917815,983044,917836,458760,1638735,458753,1638758,983047,-1638035,458762,983409,983044,-982653,458760,-1113722,458753,-1441373,983041,-1048143,458753,1750335962,1969430629,1852142194,1667309684,1702259060,1918988320,1769236852,1763733103,824516723,11876,131050,33357839]},{"sector":3,"length":512,"data":[1953653072,1869182057,1680154734,1684106528,1667309669,1702259060,-1245184,983041,-1244648,983041,1245749,458753,-1310125,458753,-327047,983041,-1441122,983041,-1441098,983041,1867383500,1634759456,1713399139,1629516399,543434016,1768716643,1919247470,1918988320,1769236852,3042927,65558,49479695,131049,52035599,1931505486,1701011824,1919903264,622879008,2036539492,1684957548,1881174629,1769239137,1852795252,1952514048,1819894560,1701080681,1680154738,-1245138,983041,-1244353,983041,-1244317,458753,1049483,458753,-1113171,458753,1632437198,1970104696,1986076781,1634494817,543517794,1667330163,1936269413,6563104,1768716643,1919247470,1952522355,778315040,-1310720,458753,-326686,983041,590852,458753,-654311,458753,-1244099,983041,-1244065,983041,1246325,983041,1311889,983041,-1375052,983041,-326445,983041,984310,458753,-654069,458753,1867777328,543973748,1802725732,1634759456,1763730787,1680154739,1819894560,1701080681,3044210,131063,87097351,131063,89784327,131067,92471311,65558,94437383,131049,97124359,65555,99811335,131052,102891527,131071,105971727,131050,107413519,1763730213,1869488243,543236212,1768908899,539911523,1634036816,1696621939,1919251566]},{"sector":4,"length":512,"pattern":0,"data":[1663066400,1667854184,-1441691,983041,1663370896,544434464,544501614,1751326817,1701013871,1817190446,1702060389,1953391904,1495298661,544370464,11854,131071,112721935,131050,114229263,131050,115867663,131065,117506055,1920103747,544501349,1702390086,1766072420,1142975347,1702259058,1680154682,1638400,458753,1640221,983047,-1636572,458762,984872,983041,1115972,458753,-1177764,458753,1916,690169920,1869374566,543370871,538976288,825110816,792016928,825177136,191627313,675283151,1684416803,778204531,538976355,824188960,941633838,875573045,3223855,707070862,-1191575437,-796000208,-83820356,47356,-1064380274,-1082392386,12156416,-1197083902,-1018135006,-1149333314,-919372354,1971339136,1976109832,-338982067,4161541,-1014807435,-17071856,199588989,-855476791,-1948677352,2005533263,-1149193727,96435200,47104,28840909,1930677506,-243314936,-344020802,2127019537,-29458138,1974097277,2080434693,-617414656,281871083,179048116,-67668544,1850343147,1768710518,1634738276,1953068146,544108393,1818386804,1917124709,544370546,1684107116,543649385,1919250543,1852404833,2037588071,1835365491,1936280832,1735289203,1701867296,1769234802,1931503470,1702130553,109]},{"sector":5,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43605,0,0,0,0,0,0,0,0,0,0,0,25264513,1,0,0,0,0,0,391512064,5284,70820,0,16908288,0,33947648,0,58982400,0,67239936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]},{"sector":6,"length":512,"pattern":0,"data":[0,0,3736,0,0,756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248643584,536870912,538976288,538976288,673720360,538976296,538976288,538976288,538976288,1210064928,269488144,269488144,269488144,-2079322096,-2071690108,-2071690108,269488260,269488144,-2122219135,16875905,16843009,16843009,16843009,16843009,269484289,269488144,-2105376126,33718914,33686018,33686018,33686018,33686018,269484546,2101264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1180648251,1598377033,1330007625,0,168624128,1819635240,721430892,2301997,0,0,369098752,219677186,202116105,-63481,302846719,65282,0,8192]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[16996941,13,4980768,24248319,-1159461720,20,30,1]},{"sector":9,"length":512,"data":[5972026,0,0,0,0,567095476,339599494,235828227,373340703,567085492,1354773254,-1106833717,-1847066495,1960512258,374913552,2081327662,51570710,2045313712,-1338526718,1377946880,1948269740,1947024466,-1036363040,-1403890827,1131683900,-780923588,-1157431832,1446772747,1128014452,1312564084,-1574034316,-608561421,243936790,-840427788,374782466,-402652487,-1125449020,-352321345,114440,46072811,29763072,1319758847,184687592,-341740325,1965177992,91602698,1017956659,-1173326579,-1976691075,-401174258,45089420,1006760937,-1407945438,259269180,243869262,-922024589,28313973,-1442718743,-389027007,-620035624,521013364,-352321352,-639070117,100122369,1017956659,1007186976,-1442548723,1324608321,378406,-1993990570,235271438,100121119,11550132,57876941,1342264297,773256634,386010762,-320279246,100121089,99946123,-2147360024,-16774082,1455032692,178454,1476514536,951769227,268482822,567099316,-85392525,1975520000,205422617,58064640,-2097057560,57999611,-1274984983,-383660738,1364656434,-1946514682,-1898410808,-65359680,24489714,734497615,1599670210,-915095541,104381779,-1329034416,-218264822,-125085522,-12778123,-1961853169,-8814371,-972524534,-968422143,1464273409,1930857301,65751557,1569748715,-1957036661,-485838631,1974399731,-1957211665,-1949488177,-2144974375,1963851389,117393665,669188114,1975451019,-1359827963]}]],[[{"sector":1,"length":512,"pattern":0,"data":[-902095499,1364662642,149146251,74753779,-420782247,1048598616,1979645963,-2135626999,-16774338,1048620405,1979645964,268893958,1386277632,867968,-402426369,-712310578,-521614453,-1947510272,190567307,-150113070,-17958,1119093168,57811405,-2080442391,1551106299,567099060,773243834,383192714,-1174349080,-1976690984,-350823922,87920692,-1172802304,-1976691029,-401162482,-1125646128,381729280,-1039234514,-1172903146,-1976691054,-401168626,-1528299336,380156416,-1441887698,11200534,233332255,1977289472,-29693693,1286865072,872161741,540847323,222100340,-661978507,-970538162,4102,302433830,1405288448,1946221443,47625,-402652487,278986803,245504,-1174392088,619184131,374782464,-402652487,-1017446373,312562259,245504,-973072664,1094802693,-402652486,1532624899,113603,567099572,703427,994167091,856322755,-2131494958,-346935102,1345324273,-1437017717,-880018206,100121283,99946123,236849387,190495,-315440353,-1275067717,-1021194944,108159292,41908796,12836644]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]},{"sector":9,"length":512,"pattern":0,"data":[]}],[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1868787273,1667592818,1329864820,1702240339,1869181810,168633454,1145981254,1850286138,1768710518,1970151524,1919246957,543584032,1634886000,1702126957,168653682,1313424932,1394620996,1635020409,1919230072,225603442,1229329418,540689486,1701603654,1953459744,1970234912,354444398,1174538765,977555017,1667449120,544437093,1768842596,337667173,1174538765,977555017,1634030112,1919230052,544370546,337669737,1174538765,977555017,1986939168,1684630625,1918980128,1952804193,2126437,755633433,757935405,757935405,860205]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[16603725,720918,65568,23920639,-375258646,0,30,1376257,2293760,2949120,5636096,15728640,16711680,17694720,18546688,89653248,90963968,94896128]},{"sector":5,"length":512,"data":[-852446128,1038124577,91357972,1979913277,105560593,-1912501320,-855001896,-1070397919,-1950823600,1489014273,259391292,-1912501320,-669610536,90499078,-1274809623,69324057,1084368449,1252140553,1117922825,6077954,1975519916,25933839,378394766,1005061673,63564037,1554172158,195175936,641795075,637734050,43196044,-2118198477,76539904,1949252780,1963801643,8513795,1017962634,643593530,28982912,643069184,28968702,-2145334144,975593964,1946356518,-8590896,1916877996,652157954,157552266,796182794,1707016373,1974399497,112678,-670310189,816433291,-1398377472,326449724,-397323348,1532560440,1377700210,1510244584,-1198593249,-661782133,116790925,-385572376,-1950874833,-1915187711,-402156010,552141970,25933827,512350350,109970069,-1866792301,-1826739454,-850742270,623097889,503666618,567090958,186550815,-1195115005,567100425,-1023995790,175378944,110302861,-385592856,-1023999265,511016960,51060362,41885184,503480254,42385159,567107764,41885322,42343994,378342004,602408442,45213956,1930002920,622234890,68478983,-150822167,16946438,-1153993728,1219821567,-620027443,512297588,1219756481,57876941,-1543547927,113705407,526,35653319,113704960,562,1929663720,42264581,501802219,-1793684726,-1760130814,839304962,-956301309,209926,671532800,-956301309,207366,-1173961216,113639425,-1962933835,-1996318954,-402483946]},{"sector":6,"length":512,"data":[292752021,119871117,-972844568,67220742,-352188184,188934336,4057714,-385649408,507183380,158531990,124196493,-352096792,44278739,43321079,1483997185,28982912,-30575360,-402540026,378208642,681640746,773228803,53256963,-402555672,378208644,748749614,-801704189,-1777990912,44147457,44113467,113647223,-1929117259,-402176746,645989146,-130411,53085895,113704960,808,26615339,235129739,-1958149469,869413827,-769750309,-1946945792,868322264,-617393198,13770378,-1956908041,1103834056,855819139,13803712,13641463,317253771,17462272,1929589294,872873732,-287161597,1358901993,-2142088877,-16671682,-138796940,268417039,-288230517,906228483,-1007222376,410255361,-523041615,-489487183,-138801429,-18177,26752651,-217844989,-1710846458,210445825,-789067741,637804838,-784657399,1532582407,116900696,66197,1048579700,1962934714,-1173946873,7792641,1930090472,1729531149,38070279,536783337,-1977682965,-33354986,-852314942,1962884129,474466286,1204224000,536870686,43321079,661913601,-402453600,-1410856140,-1927974141,-402176746,113705482,810,52954823,132841472,56366733,-402524696,-18349586,-854739967,183494689,1273561971,191424766,-385852184,132709907,1042432,-1023404056,-1962798943,-402517482,-1581055977,378208802,216531492,883016448,907447042,124930,922178499,-771030832,1346371956,-617360845,13770378]},{"sector":7,"length":512,"data":[190378999,721843410,64681939,-802752574,671482112,706089219,-2134680829,83937854,-1142419340,-401903094,1810432366,-1257847295,116786177,1962868736,17221132,378340352,887619585,28680200,567102644,567089588,-1006708598,228737284,4974595,1102061427,-1576858206,1252133184,37921289,-402652741,158531637,107091597,-352247320,51224752,904413484,51809546,18409475,-401965336,-1597832954,568853259,-82408182,17098754,-401970456,1354957042,-851179336,-1206881503,567100425,-1023995534,192221184,-1450178837,57999361,-104638216,1048626008,1962869163,-901873608,460653824,49747597,-402602520,141756945,28640966,-12130043,-402609688,-1597833050,-1041759477,-82408183,10807298,-401995032,-1880620910,-1425619456,-1396506623,-76275652,-143390404,-617364658,-402650439,594673705,65140627,-1826852157,1948269740,1949056017,1949252621,1947024392,1975519748,-1014280482,868466699,751040960,1007055408,-134056183,-1195116093,-661782133,57742989,-973063704,50443526,-1157707799,-628227701,43323013,-1040768651,410320912,2146807,4048244,1024488448,58064936,-1543806743,65733031,-1023301213,54662797,28513929,28513933,4037202,-138215099,33723654,-134056704,1465274819,-1610146298,-1057094901,-1929226078,-402348522,1089011666,-3610615,-1962949144,167945742,842495177,44547821,-117178741,-1342174279,-1179978976,1505689605,-1532628222,-1274916422,169987350,-1928760128]},{"sector":8,"length":512,"data":[-402214122,-1276379242,-1274916422,-400438000,1594359686,-389850786,24314702,-989411645,512425985,-1079967220,63998721,-1560166122,243991064,-1056767474,813089339,29689542,-1053390079,-385928447,-1910635381,-402515938,1914635277,-1949158639,1107409098,346235341,370575618,-392366078,-1013120092,29689542,272024578,516393986,35135118,520347880,512484466,715325982,1958886146,537824217,1002504962,-2144504126,67224846,36312619,-13372789,503590632,36314766,520335592,-768363406,28887691,-1558065854,378077734,-1578434008,29691520,574014472,516393986,36314766,520325352,512461938,1017315888,1958886146,839814017,1002504962,-2144438590,268551438,37492267,-13372789,503568104,37494414,520313064,-768356750,28887691,-1558065854,378077752,1223230010,-988905217,918822913,-947125708,1008635422,53471234,-13440737,-1174403143,918817088,-947125744,1929453288,512344833,116785603,1963065797,339133464,-1983411198,-1996375242,-1123959490,1374159372,-337743359,272024591,516393986,35135118,520287720,29564555,35393163,35264139,-1191111192,1253703687,574014473,-389575678,-1385037621,29564553,29689590,-1120766712,116785694,1963196869,637978387,-956301310,141318,19195904,619415410,36058820,914999180,1049166267,-437780035,-337022464,574014479,516393986,36314766,520260072,29564555,36572811,36443787,-1191138840,1119485952,876004354,-389575678]},{"sector":9,"length":512,"data":[-848166817,29564553,29689590,-1120766688,116785712,1963983301,939968275,-956301310,145926,12118016,619436146,37238468,914999180,1049166267,2045247933,-337022464,876004367,516393986,37494414,520232424,29564555,37752459,37623435,-134201880,-2454589,51159095,1018431368,126820813,426956939,-695480437,-851312456,-1261882591,857853248,-1194226743,567099904,277955,378403445,65537661,-74323459,-849935944,-851528671,228639521,201734659,-1274579709,-400438003,512490461,915079619,1049297339,1042153917,-401842546,1914634658,1187266264,1178287624,-1945537276,1178287808,-1023314682,567086516,1040301985,-1609808247,104465165,125109004,567086516,-386182680,-193855382,6196030,139904062,-1195275182,567099904,1992572506,734497796,1475943410,264667990,-402598013,-963968583,104554334,158728641,29439627,-1662451917,-1154053887,-1119975167,512630273,384303551,91430657,-335734808,-1949158493,1107409098,-1992416819,-1992423354,31984214,-12654083,-1170407240,567085376,417858931,-1547437569,-661978612,-2097107224,134718,104403060,175374862,512442036,567083532,245620715,272009474,306088194,437684482,470714626,1023457282,-855029062,-402296031,-722731305,-1962795357,7203032,35667587,957379584,1946296326,-1958824950,-855499234,-1548358879,914948640,1049166370,378077732,243860012,12059182,37927485,91431373,-335636760,36742100,753457291]}]],[[{"sector":1,"length":512,"data":[842957568,276037634,36832825,1051986548,36707979,-1242881587,-1996344669,-1996344266,-1996343746,-1996341738,-134070258,1107474627,-779368141,-259317299,252050059,13796096,1041025,-489485135,-388823887,-1202666997,-919387648,567136651,-849936200,1354979361,12408146,911423,-1017619875,1073790293,1560281832,-1949158461,-1961892914,1914817989,1003488243,-387091007,-1946681249,-1958353969,1914817989,1003488223,-388401727,-812974005,197145425,-1189841710,-903151600,567133579,-805101198,460702011,-1191170328,-936640513,567133579,-805106318,125157691,1493179112,1498533602,309699,-674109743,-1178338590,-271515644,-85795119,-783265085,-773139990,-1930767894,-1899887656,-2124785448,-1023406110,13178509,13174470,24963072,378342003,-1880620281,-116004358,13186701,81549,503367865,-945491193,9990,443904,113705216,239,1912882664,-281115710,443875328,14487179,15666825,-1962933832,-1929326562,-1426001602,1083419539,512489954,-1014824752,-773074673,-773074453,-850873109,-1551076831,-1070399056,-1593725277,653721808,251986139,-773271296,-773271064,-1260876824,1914817864,26911708,-1734098893,387073,-134206488,14066115,-150986565,-804912157,-768391168,13645559,-1560171357,-610205290,-718866944,-754580736,-1777991424,-660487423,-1777980672,869413633,-769750309,1039398656,91361270,27002566,-509492225,-2083376384,55358,378209397,100860131,-763166499]},{"sector":2,"length":512,"data":[-628930560,-586249472,1240594176,243911211,-768409179,14628599,-1996382301,-1593729770,-768409384,125157387,-1962875487,-150935786,-1560224458,243990947,1053032656,-1070399058,-794711309,-1143852288,-201916384,516212875,-1070464594,43321079,41156612,-2010716752,549683975,-660473630,-1777980672,-802752767,52601600,52696713,1141749955,51060362,1085916158,-1021195000,-1975251528,-33354978,140556739,113451469,26754756,-150938719,-1962880986,-205507640,-1740731478,14327809,-1196687436,116785407,1962869148,-18429,116852651,524949,113666421,-1929051959,-402601706,116916131,3146389,113651828,-1207893615,512377869,-1006763253,-1928838471,-855535338,-1858174943,309461249,378340983,82511626,116790925,-369585688,-1175914721,27107831,-1593732445,-1801256545,-1559327999,243878145,-1964506719,7071744,-1763177358,-957123840,111110,-1326922760,-386240000,259130427,-385982744,-397345148,1492713116,-956349207,16888326,116900856,524949,116795765,1962869170,-1308178936,334168065,5499024,988288370,1828864,1827206003,-388599296,-576650975,-1916536832,-402426602,12122122,-1195116544,512377869,-1006763253,-1928838471,-855535338,-1259637983,-841272487,-1580992223,312672660,26386691,-1929178973,-402452970,-2084309026,106814,251600244,117375393,-1834942062,-553239807,-955616768,102918,-1811480832,-104597503,1523139,456990836,1025209344,376700957,1946164797]},{"sector":3,"length":512,"data":[2047249,322767988,1024029696,225706005,-1007107079,130029197,-101219864,-468283965,-143071225,2078852089,868315651,-720467255,-753497344,-1605218048,243991307,-987889445,-855533538,1914656806,369318476,-497483557,14393828,653709875,378208469,-805109549,28053131,195056209,112899,-1373715170,1478937857,1512403487,1493287555,113764066,39,67270,18255108,-35002368,567086516,-870937149,-1876169979,98571917,-393206549,-1581055192,103481763,-146275935,-1962877658,-1524759592,-1974418687,-1195114792,567100431,-397229224,-396691762,1558836942,245,0,0,0,70456973,-386484760,544407561,-1477960076,-387060746,74776599,199999538,201500576,1074149920,973435907,-117227258,201373891,-1514528307,-854936574,201373729,1048584653,-1023409498,52434573,-2080998936,206910,1048774517,1946157866,52869638,-2081004056,209470,1048774517,1946157876,806784263,-162469885,52563595,52698763,53612075,53747227,52956715,53091867,54005385,54140553,53876365,-386520600,12842522,43321079,378339340,91490038,-101315096,1964412355,-1794705656,1946288130,-1794705656,1962935042,-1794705433,1946222594,-1794705640,1962946562,-1794705449,1946157570,-1794705656,1946157314,-1794705465,1946169346,-1794705656,1962983426,-402209097,1048576013,1963262154,-402209193,116883469,-261483,378341748,-1477965679,1355020789,508711251,-1190982752]},{"sector":4,"length":512,"data":[-768409599,233512589,1935156685,1512044807,-1017619623,1024453025,1512024661,-128427175,-389873292,-138214474,-66939642,-1913162497,-402098922,-1007028890,13254272,-2145422329,16828990,376824183,43321079,695533696,43321079,108265536,141891213,646043115,-8453483,14630531,-150046975,169222,-2130283519,-1090349786,-1794705409,1979710466,16247043,43321079,359923760,13254272,-2140638207,33606206,1048600948,1946616010,-901873574,192217344,13567686,-855193855,-2130696192,-2147314418,-138398976,169222,-2130283518,169230,-1794705663,1946173442,66819,43321079,158597376,-2130705915,67278094,2079488,915268599,-268236433,13647501,503324601,-140185081,805475590,-143100928,537040134,-1593281536,-576519769,-1593382144,-1482489635,-1794705663,1946161154,27894024,-352268893,13476102,-1593726557,512426407,-470417185,27862775,91607563,-352266077,15049487,15144585,-1982713006,1510004758,512416563,-201916206,-150993989,179171,-768347145,-150863685,-610057997,-821639680,113639424,-118488870,306086851,510984195,51396227,-2145946367,16828990,113643639,-2113994325,1073911054,-35592192,-1007041544,13645453,200687245,503324601,-1599802873,28902155,-1915604224,-854856930,24270886,102141379,-204412920,116900857,33555093,1407714676,-135695872,169222,-402295807,-596508515,13254272,-730466299,-1023343384,548413198,415113446,179081216]},{"sector":5,"length":512,"data":[-1258523456,506638,-219475763,762212174,1953724755,1679846757,543912809,1679848047,543912809,1869771365,658802,-1576858464,-106819601,440591,267327117,567098548,12179595,521018928,301209229,567099572,-851528673,440609,267982477,567098548,12179595,-199848594,-851397615,-851528671,-1194183903,1961389568,-1194183695,1827155968,-1597769487,28902155,244224,233512589,1935156685,488017161,-218044408,512607225,1204162027,-1014823413,189253152,51093510,113048,-1929378886,-854725858,158554150,98571917,-101526040,-1794705469,1962934530,51093681,166443928,14630531,-955943935,16974663,855638457,1478938066,378377331,-1477965818,-1195116046,12255232,47360,166401677,1929404904,-149517047,-225646584,1048691705,-1437266967,512574837,-75428951,997395433,17072000,2139097972,91489284,-351222909,71812841,-1673625596,74776577,17057734,-1157627720,12124160,-350843648,2091017,378377843,1072171287,-1916536334,-402080490,-1007029706,157027977,-402103879,-1983709172,-1190568946,31983681,1487127296,1511950601,1612089609,1646169097,1577502473,-1979711223,-33354978,1141749955,156702349,-1262280243,-1574843111,246681606,297017805,268899981,-1269816883,102140430,1478610192,41205770,800375801,-208985651,101238403,-1189148898,-1527578613,-1007149306,272776845,51058314,-1912619800,-401609962,485028278,-240850693,44449408,-2146929408,1065534]},{"sector":6,"length":512,"data":[516112757,768263,512416563,1049428646,-83688793,-1426906960,44437130,915270962,76153511,141713724,74938940,76029996,-1175461306,915210251,1049428647,-1494020030,-1916599947,-402114794,-1007029934,0,1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250]},{"sector":7,"length":512,"pattern":0,"data":[-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568,329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478]},{"sector":8,"length":512,"pattern":0,"data":[]},{"sector":9,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16777216,16777215,0,0,973078528,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,978845696,1297040220,1145979213,1297040174,65280,134217728,538976256,538976288,538976288,8,0,0,0,0,0,1090519040,1313817402,977338368,92,0,0,0,0,0,0,20480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-738197504,-1794962429,-2063397885,1224936452,1308822788,199685,54884472,0,0,0,0,1237,83099648,0,0,1297,86900736,0,51118997,168652409,1634027520,622869092,2034442340]}],[{"sector":1,"length":512,"data":[1684957548,540701285,877605,1953724755,1948282213,1936613746,1920099686,168649829,168430848,1919895040,544498029,1886220131,1702126956,538976288,538976288,538976288,168632352,1936607488,544502373,544695662,1802725732,1702130789,1919903264,1769104416,622880118,168639075,543452769,1769108595,1159751019,1380275278,1701345056,1701978222,7955553,1096223245,1313427026,1092627527,1142967372,541152321,1310740047,1378700879,1448037701,1162625601,1397310496,1141509451,1163282770,979576096,1279874848,1161961548,1397705760,168632660,1668248144,543450469,1752459639,1919895072,544498029,1311725864,1174421289,1634562671,1851859060,1701344367,1495801970,1059671599,1936607488,544502373,542330692,1802725732,544106784,1986622052,1663377509,1628048698,1931502702,1802072692,1313153125,542262612,1852139639,1634038304,168655204,761614848,1702063721,1679848562,1701540713,543519860,544370534,1986622052,1663377509,1867907130,1701672300,1650551840,673213541,1663054129,1634885992,1919251555,1159736435,1380275278,1919903264,1852796448,541010277,829170944,1646289968,1936028793,1953461280,1679846497,543912809,1667330163,658789,808545317,2036473956,544433524,1684370293,544825888,1953724787,168652133,829170944,1646289968,1936028793,544106784,543449442,1952671091,225669743,1814364170,543436849,1702132066,1986076787,1634494817,543517794,1679847023,225145705,1866858506]},{"sector":2,"length":512,"data":[1952542066,1953459744,1886745376,1953656688,1864393829,1919164526,543520361,221930277,1850277898,1768710518,1701060708,1701013878,1918988320,1952804193,544436837,1836020326,1986356256,543515497,1986622052,168653413,1920091392,1763734127,1330192494,541873219,1819042147,1308625421,1629516911,1869373984,1679846243,1667855973,658789,1869771333,1920409714,1852404841,1095114855,658772,1869771333,1920409714,1852404841,1768169575,1952671090,226062959,1631780874,1953459822,1919903264,544498029,1092644449,1195987795,543450446,1394635375,1414742613,1679844453,1702259058,168632366,1769096192,1814062454,1702130789,1970086002,1646294131,1886593125,1718182757,224683369,1850277898,1920102243,544498533,542330692,1936876918,225341289,1631790090,1953459822,1852401184,2035490916,1835365491,1818838560,168653669,1869566976,1851878688,1886331001,1713401445,1936026729,1124076045,1869508193,1329995892,1413565778,1310744864,1870099557,1679846258,1702259058,1224739341,1818326638,1663067241,1634885992,1919251555,1852383347,1819244064,543518069,1700946284,658796,1635151433,543451500,1986622052,1886593125,1718182757,1952539497,225341289,1850277898,1768710518,1634738276,1701667186,225600884,1632632842,1701667186,1936876916,1953459744,1886745376,1953656688,168649829,1919895040,544498029,1818845542,543519349,538976288,538976288,538976288,168632352,1936278528,1853169771,1953068403]},{"sector":3,"length":512,"data":[1701601889,1919903264,1937339168,544040308,1802725732,1224739341,1818326638,1830839401,1634296933,544370464,1667330644,540024939,543449442,1768169517,1965058931,1634956654,224750690,1850277898,1717990771,1701405545,1830843502,1919905125,1868963961,2037588082,1835365491,1634890784,1701213038,658802,1702130753,1702129773,1920409700,761623657,1953460848,544498533,1819240822,1869182049,658798,1986622020,1869488229,1701978228,544826465,538976288,538976288,538976288,220209184,1851064330,1701601889,544175136,1953067639,1329733733,168645711,1920091392,1914729071,1768186213,1679845230,1667592809,2037542772,1224739341,1818326638,1444963433,1836412015,1145643109,1157630477,1919251566,1920295712,1953391986,1819235872,543518069,1700946252,1868963948,1919164530,543520361,540697381,1918980096,1952804193,544436837,544501614,1886220131,1651078241,168650092,1918980096,1952804193,544436837,544501614,1886220131,1651078241,1998611820,543716457,1702390118,1768169572,168651635,1684095488,1918980128,1769236852,1411411567,1701601889,1342179853,1835102817,1919251557,1869488243,1968382068,1919905904,543450484,1142978914,1702259058,1157630477,1919906418,1634038304,1735289188,1918988320,1769236852,1948282479,1701601889,1157630477,1919906418,1769109280,1735289204,1918988320,1769236852,1948282479,1701601889,2573,0,0,1230781048,1498623567,980942931,1146309980]},{"sector":4,"length":512,"pattern":0,"data":[1395544911,21337,0,0,0,876102154,1129598513,5461583,66050,-805277694,195842,131081,0,0,0,33554432,33554689,23593024,150995708,256,0,0,0,33685504,1879179265,-16613376,524289,2,0,0,0,16843264,4194816,33423680,16779264,0,0,0,0,1866596352,824210543,30766]},{"sector":5,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-352321536,1397592116,861097796,33567278,33554696,1359151616,285214968,16778240,0,0,0,0,983040,16777216,-1070335488,12374158,-1157163396,-986316680,374742583,2083241811,-67105863,1031808684,637760512,-1968568950,116515524,38242591,2083194823,-48854277,1913900413,2081464422,371652504,470156156,235275132,2084545404,-1199818845,653721632,512457745,-1023181813,32765768,-1149487354,1067517184,9758844,-1444413008,-1961266688,768507,-209857090,-1928497754,-524410753,768381,410298099,-394430786,-466485151,526259917,1150223503,-1105605374,-336888385,855973025,188151762,-1564410244,933329980,2084414332,-1593376581,1072200759,2081988864,2084242986,1307070528,-814589952,2084308520,100732022,653753399,-670860277,780851691,378174485,512458237,15367229,-1409257472,561299466,-5042508,-202698547,922210867,-1023509480,2084247176,922210867,378043418,967015466,45400956,2084116107,-825169270,-427766064,990808768]},{"sector":6,"length":512,"pattern":0,"data":[1071743100,915066378,378174506,332234237,1309281731,1395486319,1702130553,1768169581,1864395635,1768169586,1696623475,1919906418,1699875341,1667329136,1851859045,1953701988,1701538162,2037276960,2036689696,1701345056,1701978222,226059361,168624138,1802725700,1869562400,1634082932,1920298089,658789,538988361,538976288,1297307987,1397703763,1394614304,21337,0,0,0,0,11162880]},{"sector":7,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1258291200,2013465608,1869175866,1937339182,1547335680,1868854125,2037591667,-16777101,0,1056966656,1061109567,1061109567,16191]},{"sector":8,"length":512,"pattern":0,"data":[1202765,393233,12648480,35782849,-632289280,2096,30,131073,121897397,32899072,137429429,413204480,418578432]},{"sector":9,"length":512,"data":[1917255680,1635018337,1715235938,205284960,1711291398,1717986816,917567,1618896444,-1015152580,1715340860,6684735,1715340860,7340095,1715340860,404226111,1715340860,63,1012949052,-1015145466,1618896444,6684732,1618896444,7340092,1618896444,6684732,404232248,-964952004,404232248,7340092,404232248,476250172,1669292854,404226147,2120629248,917606,809250942,126,-864088961,908001407,1717993318,1715208295,1717976064,1711276092,1717976064,1879048252,1717976064,1715208252,1717986816,1879048255,1717986816,1711276095,1046898176,415464454,1013343804,6684696,1717986918,404226108,2126561406,907810840,1932556338,1717960830,2115534396,-856156136,-809043252,453953478,404241432,946392,1715340860,1835071,404232248,234881084,1717976064,234881084,1717986816,2080374847,1717992448,8257638,1853781606,1815871590,2113945196,1815609344,2080389228,1572864,1717579800,60,1616936448,0,101088768,-960299008,1714675404,-960294964,1865931724,404227023,404232192,855638040,862375014,-872415232,-865717402,-2011037696,-2011002846,-1437235166,-1437226411,2010884693,2010902235,404287195,404232216,404232216,418912280,404232216,418912504,909514776,922105398,13878,922615808,13878,418912504,909514776,922093302,909522486,909522486,13878,922093310,909522486,16647926,909508608,16660022,404226048,16259320]}]],[[{"sector":1,"length":512,"data":[0,418906112,404232216,2037784,404226048,16717848,0,419364864,404232216,404690968,6168,16711680,404226048,419371032,404232216,404690975,909514776,909588022,909522486,4141111,0,909586495,909522486,16711927,0,922157311,909522486,909586487,13878,16711935,909508608,922157303,404239926,16711935,909508608,16725558,0,419365119,6168,922681344,909522486,4142646,404226048,2037791,0,404690975,6168,910098432,909522486,922695222,404239926,419371263,404232216,16259096,0,404684800,-59368,-1,65535,-65536,-252641281,-252645136,252702960,252645135,-61681,65535,0,1852075579,1006633019,2087091302,2113953888,1616928870,2130706528,909522486,1719533622,1714427952,126,1819044927,855638072,1043542835,989880368,202116206,410910732,1013343804,907836952,912490339,907804700,909534051,403570807,1717976588,60,2128337790,201719808,2128337790,1612496992,1623260352,1715208220,1717986918,2113929318,2113961472,404226048,1579134,405799038,3151884,403439742,792624,453902462,404232219,404232216,-669509608,404254936,402685440,1979711512,-596246308,1815609344,14444,0,1579008,0,1572864,202309632,1827408908,1819810876,7105644,409993216,7888944,0,1010580540]},{"sector":2,"length":512,"data":[0,0,-1957363712,73840876,1459841000,20357206,145876010,243982547,-316014281,1183432963,51002874,339543410,-1207011837,-1202716671,-397410164,-998047079,75399940,-385646847,1586168059,41418502,1352418957,-2096941080,1958216900,1183666176,-1847045988,79987458,-73759095,846577675,1342207928,1352418957,-2096776472,2092434628,1183666176,1843941532,79987458,-73759095,242597899,1342177976,1342244024,-2097006360,-1224801084,28900250,-2101850112,1810386944,46433029,-1668903600,-1477947141,147096325,-1192606071,-397410174,-998046382,-2101850110,-2037559296,-397345892,-998046934,1958742790,178190,15382608,32237648,-16464765,-1191470410,-1202716544,-1924136952,1358666886,-2096799256,1183385796,8404458,45616765,79187968,-1092071423,79987457,15353543,-361329920,-73629046,918871691,-2010775472,-364445952,15367809,-1672188,-386164042,-998046143,-314128894,-330906059,-498692833,-330920624,-330920624,29419600,-1962490749,-1070865834,-2081536509,1183383762,-27883012,15353543,-360808192,360514560,-991273333,637554742,1992556682,3679996,-1997995147,-360808192,242549760,1342177720,1342219960,-2097072920,1187448004,-1207959318,-397410174,-998046614,-364496126,-2101862786,1541951488,46433028,736779915,-59325224,-1964343669,637567621,1198784568,1342274232,1342229688,-2097033496,-2101869372,803753984,46433028,1978287675,-364460241,2122383360,2080637162]},{"sector":3,"length":512,"data":[12904707,-991273333,637554742,1992556682,8922876,-336967937,-364445727,-43287,-2014582202,15353543,-1205802240,-397410174,-998046742,-362902782,918870059,2123038800,-2105177366,8922624,-1192605953,-397410174,-998046774,-364496126,1187434879,378227181,-1070923474,-2097140731,-1030881070,-1960388469,-498693881,1357006477,1357661837,1357661837,-2097112600,1187382980,1187390957,1352736748,-230258432,-1996467551,1183705158,1183666402,1183666412,1944604908,113541888,837633734,15484614,-1996467039,1183707718,1183666412,317214956,79987459,-397361101,-998046991,-1956684286,1438866917,-1070338933,-1207919640,-11533950,-924318602,79987456,-402229505,-443874611,-1957313699,49054700,92923990,-166989685,-11137164,1996424822,155379716,-351878013,1589654274,-1017256565,1475119957,2123046486,-1962571004,1300955741,106269444,-16222837,2123041397,-1912238584,-849410467,-1088530655,-544341584,-1945600373,105221893,-1996063093,39684357,-1996206711,1971914325,172330760,-164428686,-773322517,114187,1971914123,1600003852,-1957051555,1926769628,605960970,-1962642943,-371064861,-1957363190,508975084,108956423,-1070336117,-218103879,-638107218,-1962639733,-1952123945,1566531266,-326412861,1460071555,74907478,-2096996888,-125107516,-402229505,-998045784,-1012990,-1202256266,-11534335,1793590390,147096329,-244087,-397015434,-998045686,-58836732,1586170229,-12482044,-1207702632,1600061439]},{"sector":4,"length":512,"data":[-1017256565,1475119957,139365206,119413987,-1962639733,-1494022538,1149946163,1161438975,2131195135,48972035,-1047801353,-1017290914,-1962823489,721420854,16679415,-1107070448,-1896214528,516194775,57932551,-2130621975,922746596,38020745,1109821750,-1312388350,1222693636,37790518,567095476,20357942,712180284,1354773278,-2101731570,-855002104,1329908513,775037011,1919885360,1952541728,1914729061,1769304421,224683378,-150789110,145033,-567557236,1253366775,-1942609459,-1962856930,503327798,889239574,-1992941107,906116126,37619340,12066574,162642469,-1959386675,-486340594,113587746,-628358390,-13182157,1929578014,13428995,235324726,-1143305213,-13238269,117638686,314571807,119585027,-1070346453,370584307,-974643449,310025,-851181384,-167087583,91521218,22318976,-327595200,-402320920,314246254,318472451,1393062659,1130043391,-1175262397,-517275642,-1962854210,-217639172,64940196,-1243026125,1726501114,1393167616,1801675124,1702260512,1869375090,218762615,1986610186,543515753,1869771365,218762610,1869366794,1852404833,1869619303,544501353,544501614,1684107116,168649829,1505366705,250425865,178975,567099572,-4710634,1206407168,-1173311228,-437581461,2075794865,1440672521,1048833163,1946157364,873922308,74907393,-1962662424,1438866917,1448602763,-1962639733,39684869,-1962652277,1972045397,175999752,-1957223987,92866174,-1996333687,1435042893]},{"sector":5,"length":512,"data":[141920518,1913275791,-336186620,154069000,-1962933826,209029381,-1017290914,1475119957,2123040542,-1178586364,-1359806465,1077985675,1566562551,-326412861,119428695,-1962639733,-1178586153,-1359806465,-1946711217,-544536962,-218103879,-638107218,-208929141,-1031035661,-1017290914,-2081649835,1448543980,-1962248565,1727465030,-96040696,-15992693,-51838091,105182720,-1975487220,-1952970940,-152841768,16913031,1291792757,41714434,-1962247168,-1979384036,-337368569,568874503,46433025,1090406025,-1070398091,-1962884375,1191117918,-28931580,-162592888,1963460164,121932306,-774337640,310900451,57999618,184584169,963343615,359793276,-13303977,-1796733834,113541895,16940073,-335596740,41714658,-14453760,889127540,-402360577,-998045833,38046470,2083193857,38046466,-956021247,580,-396969493,-998047580,-28931838,-1961135040,1191117918,-28931580,-347142264,-1981262178,46433024,1090406025,1183517813,734473210,108459986,1586177003,71761668,-1996601718,-16036089,1291838580,41714434,-1949402112,-1979384036,-337368569,-1956684085,1438866917,-326898549,-1957275902,-4258698,105155327,8628632,1156982900,578109446,18868310,-1962752893,-1813489928,46433027,-1744354166,123332688,184730755,-1090290240,1153892351,-947191802,-443850914,-1957313699,1988843244,105155076,8628632,1156974196,108281862,-369098824,1156972698,108265990,537283712,1283518187,1156972806,695536646]},{"sector":6,"length":512,"data":[-1744354166,-472786805,34768886,-1206225663,-397409792,-998045032,71600386,74760203,48957616,1141376176,75268870,-1978895104,-778565820,34801120,-1962654583,76088388,67519734,28837236,-1207702784,-11533824,1149895796,-397371385,-998045672,38045958,360693771,74760203,48963760,1141379248,38061830,1810432000,38600703,83827851,-467007606,1575324510,-326412861,1443032195,-1979616578,-1449654716,359989379,1149878323,105154562,-1996209015,121947652,-339309569,-2084140275,104532166,-680197574,-1956724685,1438866917,-326898549,-1957275900,-13433738,169928790,-1979530109,52692548,1014301244,134628598,1149898613,-661940217,-2013862959,1946223122,721718055,1183384644,2126515196,1962889243,121932292,-1058516840,113541896,1962690107,105676807,-16608,-1996209013,38061828,-947191808,-443850914,-1957313699,149717996,915101271,401277244,1342180536,1342346936,266876159,113541896,141869067,-2096970109,-462094276,1946172547,-2093184199,1187450055,-1979711234,-1986509051,485227078,1033373066,74776831,49004594,1586169226,-28901378,22316936,1207586559,16416387,80207477,1599995904,-1017256565,44304015,19799694,-1047803597,-108271221,741772105,1962281728,-221868536,1974355374,1083655674,-41157084,-989600303,-1377296618,-1949332487,-1946352644,-1912138004,1240871902,2122911203,-1404746496,1975519914,-1980505350,521535566,20719241,44312319,-1142125739,-75431150]},{"sector":7,"length":512,"data":[141755154,1528299347,-219462845,168085480,-2146798364,1962935422,71747076,382017278,12059196,522308901,50859659,45811683,102694656,71731971,567102644,44435087,19799694,-2135029994,865643520,1048585938,1912799542,109989989,-1070399444,-772290421,-1359808373,1963276326,63407097,-772290421,-1977157749,977356549,1007973600,1007186978,1006924809,1491825952,-2118252778,1328278272,-15991253,-812912268,-1014277310,50708739,-121600,-57941973,371131934,-1331367161,-880039392,8502815,-930410773,-31194108,-57941973,-1423948872,-1047812877,385125290,-594849761,-1431503221,1031061514,527770172,939982678,-1073042431,574369396,2105542517,74800383,-303322545,-12204473,-388633856,-797704137,-12167602,-1409206266,1958742698,2484232,-504629899,1274317738,1945320267,126332168,-335657847,199003122,-16615982,975603975,-1507393791,1946762242,-1021297662,1458342741,-1979418997,-1449654716,494141571,134628598,1962874740,121956356,-2147302269,871827044,-1996191296,1149830212,-443851262,-1957313699,1988843244,2063499524,-163810047,1963722308,121932342,-774337640,310900451,661979394,537150663,121932291,-774337640,310888163,113705218,362348852,148679,71600898,28837001,-2127238400,1963037438,105182764,-1977191156,-1952970940,-152841768,16913031,12064629,-773304318,46433030,184829065,-2147060544,-351795636,1589654457,-1017256565,1458342741,-2096728437,1946158206]},{"sector":8,"length":512,"data":[2063499596,-1977256703,1352140612,-2096813592,-1073020220,-397011340,-997983063,121932290,-774337640,310888163,451608578,26410625,-397010059,-997983091,74776322,-2096733720,1686110916,-1070336250,1149830281,-443851260,-1957313699,116163564,1988843095,106859272,1033373578,1114898529,1946186301,7814408,-2031537804,-28915968,1191116801,106859270,1965768576,-28409849,105316104,637421195,20774919,1025143808,880017410,1946158141,-955192524,196166,1187500267,-352320258,-134270007,589382,-813627276,-410976254,1586233342,1950318598,-813625227,384516096,-352124481,17416158,1586223595,1648328710,-813628299,-1531412480,-11055103,266863734,113541894,200951433,855932352,-146609216,589382,1153828468,300646406,117327607,-972655616,-352188860,105170436,872859393,840276225,-94467136,-2021071919,-1986526702,-1070398908,1149830281,-96040444,-1962457976,-1956684090,1438866917,-326898549,-1957275898,2123039862,105286410,-1995938057,1183447622,1958743036,105248315,-1975618292,-1952970939,-152841768,16913031,1308569461,41779970,-1978893312,-14841084,705136645,1460399076,1352139914,-2097030168,1173750980,91496454,-622215117,1325352448,105248508,-1978501880,-1952970939,-152841768,16913031,-1545010315,-58817792,-385649408,1183514761,38091260,1448090738,-1394067969,113541888,704398987,1183515205,-955973124,64582,2105791467,561250306,1443001855,-1998047745,113541888]},{"sector":9,"length":512,"data":[16926091,38112005,66864681,1170670197,-352321534,38666156,163203,76156028,100605323,-467007608,-1974006805,-397371388,-998047424,105248260,1176007968,-369340673,-1973944449,-397371388,-998047448,105248260,-1962052576,1177287238,-137221124,535496310,-61931706,16547459,1308617076,41779970,-1966113792,-14841084,705136645,1590619108,1575324511,-326412861,119428695,-1962639733,-678754698,990400139,-1961593090,1002505158,51147768,1324942321,-1527513777,-1960711172,-775550009,-1962249240,-775539769,-1528073496,-774272183,-777653271,-1979354133,92808708,1600045707,-1957313699,-164407572,838874553,850197732,-2130976032,251549172,108331061,3417736,-469102101,918162804,178944,-1275061831,841076032,3515072,1575324510,-326412861,-1274782069,1914817854,1418184202,-2017067007,-385875648,141688832,-443826125,108249949,-1207955992,-443809793,-466435235,-1023409688,167853730,-2145159708,50411070,574360946,540806515,95421810,1016072171,-1342015981,44612371,816027863,-997539071,-1957300245,82609132,1988843095,105155078,8628632,1156974196,108281862,-369098824,1156972762,108265734,537283712,1283518187,1686110726,-1070338298,-1962785655,-25261576,134628598,1149898613,-661940217,-2013862959,1946223122,725388080,-16055172,-11070850,1149895796,-397371385,-998047245,-28931834,1074021515,1153893513,-1962803454,1183450204,-351827964,105182826,-2125564668,1963031294]}],[{"sector":1,"length":512,"data":[121932333,803754136,46433025,896909323,20186823,1153897881,-1979506684,-1952970940,-958148136,16913031,52495559,12105963,2045267970,46433026,184829065,-2147060544,-351795636,105676955,114436,71732567,121932368,1961382040,113541889,972965513,57998974,-1962987031,-467008442,-443850914,-1957313699,73305068,21006326,855995393,-22091328,-1962389877,1068762710,74654157,183175604,22317046,-402426752,-1847001085,-61384962,-91491701,467912843,984354228,1008170180,-972589798,16859271,92800491,-1947475385,1606560711,-108805282,-2146995199,-311162308,-2013861653,1950351700,1140897817,-1023991347,175439904,45880973,567099316,179361138,113651691,-1929379140,-1274889194,1914817855,1958742978,142508826,-1189055487,-779354113,-851312200,112929,45891200,-1341688822,106334989,1451988203,-2137855226,167951422,-1158948491,-1947432107,-75299746,-2096005868,209453307,22317046,-1207602112,48955393,-1017266125,1475119957,-1962467754,803407950,2123094411,871860996,-17984,-146690318,1993030617,-1949594878,108432382,1149937395,986264575,91750213,-348060300,-1949174014,1566531265,-326412861,1459940483,24297046,401342259,-1744419702,1946190761,250107403,46433271,1191277632,956876419,1929525814,1590135779,1575324511,-326412861,-167485813,536958087,45616756,-1949748414,1931595217,-45422333,22317046,-385649280,1317732481,106334984,-1070397666,-1957275652]},{"sector":2,"length":512,"data":[-470119440,1074444389,846573298,735021905,283331018,60563917,74685936,1240140212,796180491,178502,-1274888518,1931595072,-351685628,1958742836,-678733542,-1957575189,-842388529,-268198879,-1274776675,186313481,-166300224,1073828999,1586170740,440369158,-336067723,146340100,41048348,1600046731,-1946370071,1451952206,-851397626,-1274776799,-470947063,1975520235,1418196711,175390721,1065409163,-133991142,-1191586069,-789898232,-1947432107,1333789790,-443874818,-1957313699,-1151904020,1065550528,506033408,374791,1963114728,-1715457275,608183531,46179326,-1778203997,66759,-955988349,-65980,46544521,-1945874805,-390033704,1583284586,-1017256565,-1947432107,1736442974,-1017262330,854362965,-163673857,105286402,145354034,-1258130432,-181499872,206082,1962935101,108429573,-893779967,-853887998,2603297,-1274784117,1931595086,10217731,-1962522997,83895752,1963262013,285587463,-69015047,49743558,11112705,-1962183678,12059734,-383660733,61407392,-1453886464,1383432192,50530038,-1337232000,-167376382,72780546,567098804,-1198274702,567100416,1971372790,-18131,45666699,-148779710,46840537,567099316,376750091,46808704,-149981926,-1194226727,567099906,1085589811,1051992525,1183457741,167977990,-1962740218,1035207766,997335501,-150869783,16778822,45614709,-9901824,49743558,142016256,1493311720,839405193,-167315731,125173506,33965815]},{"sector":3,"length":512,"data":[-2147257088,1452015329,-851659772,-385649887,116849440,1979646710,105314055,846528514,-851528557,105286177,101319460,1451950838,-851594236,-153587167,16971526,1190597749,1946157320,29982733,72780691,-851246664,1793692449,13363457,1945041283,-511688200,41389054,-24400388,1114898856,1942043464,63998741,27831792,-1039977356,-1962933755,-29062665,-24385813,-117240716,738086025,92883137,-117242389,-1946268418,-2116383546,1946267898,512501253,2139685628,-970538238,33751046,1962933821,67013413,27831792,-24382860,1942043464,63998909,27831792,-1039932812,-1962933755,-29062665,1200350955,1958742792,-338129404,251536915,276038400,-1338124148,637891585,49815182,-1108658293,856061835,5892288,225756731,1077936420,5105816,1308495220,780542,1318454644,865790798,1371773376,-1459731061,721646593,1094797768,645922746,50206267,-355400586,-1047792267,359843331,225624579,-1037839625,216581675,-150440704,1978323410,1505768421,-397323581,410255389,-1946252457,-940440592,-65980,-1962510455,1255615446,1493063049,1405311577,517092176,-1202695598,105906177,10020895,-2096577405,1512046586,184710235,-1957313582,-184105236,1996423170,6285318,105810265,839145099,-851659539,-1957858783,72780760,-851246920,29488929,839152896,-1325208631,105314064,242565120,411383,-167086720,-2147286266,-914357387,-183629184,29982722,-851181384,-154957023,57966786]},{"sector":4,"length":512,"data":[-2009020032,-972991345,82055,1442391017,849472651,-1949239551,-1021115298,-1073683583,58032296,-1996371072,-1017314210,1458342741,2122516055,947191816,-1962785601,1183516246,125126660,1912624104,-1958155481,1208128566,-147123852,1149963636,205949186,3860566,-2093976738,-25099066,74646164,108384779,-1711276104,-628417045,-787496061,-754732581,-850873109,-1830194655,1418265737,-1808365310,130036482,-443851169,1317782365,972524300,208929356,-2130393469,1963103486,1072429554,470014603,-745850510,-147078770,507053685,645071424,-787496061,-773074469,1005310443,50951671,19833305,-1064380373,567102132,-147124878,378078325,-2020474304,-1009677564,0,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,10,675283026,1919363363,1635018337,1663986786,824188960,941633838,825241398,3354671,771777138,6452327,25202,1917255766,1635018337,27746,1868787273,1667592818,1329864820,1702240339,1869181810,168632430,1917255680,1768452193,1751326819,1667330657,1936876916,1919705376,2036621669,1634692128,543450468,2573,1885434439,543385960,1918986339,1702126433,1814066034,1701077359,168632420,1850277888,1768710518,1919361124,1635018337,1713400930,543517801]},{"sector":5,"length":512,"data":[2573,1869771333,1701978226,1852400737,1919361127,1635018337,1713400930,543517801,2573,1974,0,0,0,0,0,0,0,0,0,0,0,25264513,1,0,0,0,0,0,85983232,85983232,1,0,258,0,518,0,900,0,1026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,0,0,0,0,0,0,0,34209792,0,0,28311552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1127940676,1279870559,1313431365,20294,0,33691136,201919768,134679564,318767103,-16641523,168624128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,536870912]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[24271437,1572890,12648480,56099009,-72415232,5264,30,19136513,23330816,58523648,106692608,109248512,110034944,111804416,114360320,115146752,118161408,118751232,120979456,131072,16515610,16122394,15729178,15335962,14942746,14549530,326697498,234094592,345047578,394788864,400162816]},{"sector":9,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1917255680,1768452193,1358656355,1465012563,-1205971626,-661782448,-2031091277,-1207959522,-661782528,1946286976,102230102,1048577906,1946158913,5290018,512284814,1562312704,1499094878,1431328859,1183575179,1570590728,-13698472,-1946090962,-1996386794,-1207858138,-796000256,-402586948,-1863843723,-1911124479,-1943631103,5289985,113694862,520093696,1516199517,-816293031,0,-1911124434,646655489,1354236300,-958886400,-16777210,1600019743,1482381658,207,0,0,0,0,0,0,0,0,0,0,0,0,1342177280,243946065,-109051443,-1978501888,-2147007986,158662905,990330017,2081019142]}]],[[{"sector":1,"length":512,"data":[121544973,104595377,41683413,103514859,-654898731,922210867,2040728038,-801210362,108331009,108594887,-109051904,-1587645184,-1247606980,165323009,28812104,-1560280904,12059065,29074176,-1559806815,1050739133,29336327,-1560280904,28836289,29598464,165691008,-1207143424,-1046282239,47105,-1593719901,-979170852,47105,-1207842909,-912064512,165323009,-352203869,121413986,165283371,28681024,-1559806303,1017184695,28943111,-1560280904,1017184699,29205255,-1559806303,-4718145,29467647,-1560280904,1048576451,1946159584,47116,-1207844445,-1012727807,47105,-1593719389,-945616420,165323009,-912008969,47105,-1207841885,243924993,-906098217,-777789229,1482250753,58190019,-1560169055,-1214185043,28287745,-1560168031,-1147076175,28549889,-402627864,1048772678,1946157513,28156186,29951491,-1593725533,100860337,-1314717239,-1123665151,-2094958847,117566,-1348349324,-888798463,28287745,50443169,-1560163578,104530355,-1200225857,-1023205144,-855526320,-1273990122,1008127232,-386763493,-1863711987,1476395009,1381060803,-402652744,108199959,-402421272,-523173784,30475835,954789246,1482250755,-1391555645,-1357477119,2549761,1048781682,1946157509,-988927222,-1123140863,-2096007423,116542,371975028,372965831,-646577729,1398195192,-259304879,165158539,-2063304472,722433478,721535246,-33438954,-118655541,-1946615317,1532582598,1397801822,-985758896]},{"sector":2,"length":512,"data":[125042689,721531297,-1593447487,-1037368909,2097152061,-1948715262,41412824,-1324446888,-1290368255,1173505,29691395,29824515,-386763445,1482359443,1364416195,871402322,68413659,11585059,-1057095052,30640008,29429251,29562371,507233278,-512620072,-402650392,-963968389,1583044954,1381062339,-66989122,165625472,50754816,1309268022,-670135299,-1395510519,-757995312,243988962,-1031075362,1499119827,50014,0,0,842084384,909456435,1094268983,1162101570,1667391814,6710628,1426063360,1347637586,503731799,118418571,1041657483,-67078517,-1014244557,1958742700,1220936470,2078865547,2012691201,624733194,1508387188,536013569,1482644999,1566202203,-1157198034,110046724,777520317,79509247,-1154023634,904448772,1003416321,-1395099657,-227269316,1064578364,1198795580,1047809084,980708412,1030893628,964114748,242561084,-1606515922,108331012,-1543059922,-1202704380,-147980278,772055078,1476698275,808248370,-1610219218,772598532,77334270,-30538261,-352019194,1951939750,1918975010,2138717190,1021256706,1007580248,1008366660,-400526269,1424556242,113651455,772146335,77727431,585826320,113716880,656546,1452284139,-1014762613,1921728002,-1847022590,-402593024,-379715422,-1957232861,46367731,41061182,-2144467829,302398,1418397044,855829250,-1959898158,772055606,77598347,-402650136,1877475406,-379692288,1347026671,-768359797,-661915913]},{"sector":3,"length":512,"data":[-2013857960,-1039445798,1392997464,1543497704,-2144465941,302142,535298933,1019448064,772633098,77479552,772109568,77530626,503621051,534191886,-1023406104,159303947,77897774,-503315480,777176059,77207179,399369266,1948894454,26274309,-1017511936,-1573994445,-1574042468,-1574042467,-1557265249,-970062688,537175046,1342177475,1342826936,311194,1354979328,1342827448,311194,1354979328,-482443183,74711049,108594691,-1207305309,-1706030611,1215,165887616,-2095877120,424254,-459207564,2030996233,1959942,1482292194,-206024509,-1080406007,1476395012,-172470077,-1080406007,1476395012,-666991677,125700105,115917958,-389773824,1354956801,-2146829405,647486,104468340,158665186,1342830520,311194,167229440,79665744,-1017643008,-1072999600,-617407884,1944637763,-685884677,1259175689,-1014897711,-1705833987,1215,12802139,0,16777216,1342177536,263475795,1000476877,252066311,-385650166,-466485000,-150991941,64523243,-1962275554,123177735,-1555502345,1200293692,156732162,-1555502345,1200228158,121676292,-1576712310,1200228161,121807366,-1559804021,1200293699,122004233,-1559622239,113707261,155781375,121650816,-385649661,-1205993315,-661782464,520119968,168828555,846536872,563083,151328393,694155,151459465,1087371,151590537,1218443,151721609,1611659,151852681,1742731,151983753,-1752485653,378077196,-1752495867]},{"sector":4,"length":512,"data":[378077198,-1752495865,378077204,-1752495863,378077206,-1752495861,378077244,-1752495859,378077246,1048578319,1946157519,992521,-523116335,395040771,151066249,-1996335221,-955710698,17366278,-16333047,-133617400,1526268395,1405311067,121376315,-1729559690,1041644288,-385649145,1381040271,-768359797,121976567,868322128,1127675858,1523092231,281873844,1048598874,1946157518,1975519761,121675781,104466667,41224000,1048625202,1963001664,-339736060,853051933,-773598721,-2132553245,17422142,834340212,50653961,-402063586,-2137259957,17422142,1048585076,1946486587,993951772,359925255,-13444982,-472783919,150806019,1124234397,-351827133,91528458,-352321096,1539322626,195,0,0,0,0,1381061376,516481,516737,529193475,-1007227950,1532582401,195,0,-1437226496,-1437226411,-608773291,-608773194,-74,-1,255,0,34816,34816,37376,-1845493614,579338240,579347080,613556872,613557394,9577618,9568402,1227096210,1227114788,-1437251292,-1437226411,1437248085,1437226410,-1227139670,-1227114789,-9586981,-9568403,-613548179,-613557395,-579347603,-579347081,-9577097,-37377,2013265773,2013265919,-1,-1,1207959551,1752195442,24339305,17022976,524296,-16777215,-16777216,131072,67174400,805374465,285225216,369168897,12289,70912]},{"sector":5,"length":512,"data":[0,0,0,2030061312,2621632,-65511,16777472,419440640,16776960,65537,1638480,16842751,1342177536,-16770816,65791,20971521,196808,33555200,-939442176,768,131075,13107840,33488897,1342177792,-16770816,65791,10485761,983240,33555456,-939442176,3840,131076,13107840,50266115,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50331904,85472027,857422875,1276839460,1663394597,168624640,1663369728,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1426063360,1448144011,-1205991849,36506571,18810112,-388896559,-388896559,-1962912605,-1064434106,637556384,-1610494558,-1574567849,1486881230,-811457024]},{"sector":6,"length":512,"data":[5873665,30450214,637557409,-66807133,-989213761,12126326,648344322,84535713,-1557788213,-1591342615,-888862229,-341629431,-308206071,164300041,166568742,166699302,638176005,638185379,84537761,-1557788213,-1591342607,-888862221,-207411703,-173988343,164300041,167093030,167223590,638176005,638187427,84539809,-1557788213,-1591342599,-888862211,-39639543,-6216183,164300041,167748390,167878950,638176005,638189987,84542369,-1557788213,-1591342589,-888862203,94578185,128001546,164300042,168272678,168403238,638176005,638192035,84544417,-1557788213,-1591342581,-888862195,228795913,278996490,164300042,168862502,1583286047,1575324504,-326412861,-402574664,1448543921,-1996397384,1586296390,-1539407624,242418190,1342177720,18233087,-2096970008,1187448004,-973078300,-973015994,-385810874,548929711,146296833,-2037559296,-1924071656,-397351866,-998047042,1958742792,81185,37561204,1025864704,661913603,1946158141,415137833,1333068031,-768314,113669099,-335609769,1476839020,1709965056,5637830,-966857729,-16754426,-2037557269,-397345000,-998045953,5939970,-15169910,-153580648,68084103,1048774516,2114125914,112692,473366352,-2146505983,1946222206,112656,439811920,35514369,-352009085,411471124,-2037559041,-397345074,-998046227,-28916220,-193036033,-385649408,2122383176,1534329086,14960327,21930240,2112112185,440347,-1947963657]},{"sector":7,"length":512,"data":[716701656,-830042879,-1360506626,79987460,544587787,956386977,494789702,-150993224,-661920658,19695499,19830667,-1980348791,334231638,-337361153,178360,439811920,27125761,-972766077,-969545914,-1928993210,1358893190,1357268621,1357268621,-2096827672,-1769273660,-1070858480,-2081929725,1183383762,-61437446,14960327,22067200,139323472,990037123,511108166,1342263480,-2096611608,1586168516,-992465948,2123102838,1350929124,3679745,1354245236,552095745,46433032,1977894459,-126419174,-624897,1996487798,-49813254,-385301373,1191117064,-945099804,58438,1354244331,-253210623,46433031,736386699,1345766616,-461468928,22054282,-16742362,1354294342,-790081535,46433031,2011448891,-414791983,-1676244151,96480014,-763166676,-1950183936,126559960,-15694199,-15694195,-431583920,-431583920,69331024,-1207516029,-397409968,-998045805,1343130370,1377733376,-2084033792,1317602537,-497120800,-1948229948,1452014150,126428924,39291174,-493825,922744438,922681426,1525153872,147096572,887113415,-498678016,1589903440,5546464,-523041615,637603885,1187383177,1187390951,1352730086,-330921728,-1996467551,-1912662394,1358893190,1357268621,1357268621,-2096914712,1187382980,1187394023,1419837670,-330921728,1357268621,1357268621,-2096711192,-1070398268,110684240,1577239683,1575324511,-326412861,-957824973,226539523,74907472,-2096892952,1996424388,108324870,-1017256565]},{"sector":8,"length":512,"data":[-1192457387,-1494745062,1048598019,1962934626,-314128868,-330906057,-330920704,-330920624,107276368,-1979399037,1654846022,-1676244223,96480014,-763166592,-62486272,-989964663,-1977156514,1586206727,2097625348,22722591,-1962410160,-59325409,-1744795098,35907664,184861827,-1948748352,268371038,654073540,-1952970870,121177182,1586171004,509446,-369099080,1586168312,-1962410236,-59325409,-1962898906,126355038,23201338,2028536692,-364460287,1122697216,1342266040,1586182027,1082795772,-397371391,-998047287,1975520004,73304887,1589917579,23240956,20985894,1586177652,-1962410236,-59325409,-1962898906,1191176798,108432362,1589903496,126494460,73304984,-1334048967,-1947574645,12977782,-96024832,1183514624,-96061176,-756481156,-94467328,1988879313,-2145875190,443824703,-772120949,-13565981,-1897396618,79987457,57982987,-385820695,1586167977,-1948003846,9112182,1996443712,24111110,184861827,-385649472,1589903544,126494460,73304984,528287545,1342266040,529205247,654079684,1352138890,-2097083160,-1073019708,1586223221,-955252988,59462,1522025195,931876865,654073483,-1744748406,15198288,184861827,-1959299648,931857502,-1594073404,942014818,645136704,-16490869,-1004565753,-1977156490,-396457216,-1947711745,8914550,654073540,-1952970870,121177182,1586212988,108432360,-1962934074,1178142790,-14058246,-588773770,46433028,1996443712,105286406,518541376]},{"sector":9,"length":512,"data":[113541892,-1610195317,126353762,1191144939,-17634822,-335919477,-431569051,1139474432,1342266040,1586182027,1082795772,-397371391,-998047663,1975520004,73304888,1589917579,23240956,20985894,1586177908,-1962410236,-59325409,-1962898906,1191175798,106859494,-1006550904,-1977156514,1586206727,2080848132,-428438609,-972661109,-1207959232,-1956708353,1438866917,45673611,19130368,1988843095,23240710,1946437176,-335596774,71731727,3727243,28837237,1191897856,947969931,871003392,-1956684096,1438866917,112782475,15460352,-402360577,-998046640,-62486270,-402229505,-998046652,-96040702,16547459,-1073019788,-1070398347,1996437227,3467516,-16595837,736688758,46433024,-362753,-504824714,79987459,-113015,686357622,46433025,-386238721,-998047457,-28931326,-1017256565,1458342741,-1962641781,-1318996522,-1975405446,-1965282595,1958742532,1925528079,2009152008,-2000475644,-336902652,1566491275,-326412861,-1960946089,92996734,-1962779253,1435173965,141921030,-1962248705,93194366,1594252686,509026765,-1912465985,142511071,1167000972,108956422,1569260937,72190210,-1996073591,1167001717,855929354,-402068490,29231547,-1996125440,1579093109,1505975647,-668214133,507185778,74583396,-503323765,1426208233,1448602763,2123040542,871860998,-17984,-146690318,75402201,-1527523445,1600045707,-1957313699,116163564,1996445271,47835140,-1962752893,108462072,-2096718616]}],[{"sector":1,"length":512,"data":[-259325244,1460041471,1342177720,-402360577,-998045847,-62486264,1443264255,-2096693528,2117665988,-1962314244,1099564126,65771775,1593835448,1575324511,-326412861,-2147197301,-1962803633,1438866917,1465314443,-2096273733,695533631,95946526,68085760,-1070398091,1076161433,1722023460,224961293,17090454,80118528,-16890681,1815513599,72256269,-1064380276,1594013928,1575324510,140831171,-1962797633,721420854,16679415,-1107070448,-1896214528,784630231,57932564,-2130621975,922746596,239216265,1076267318,-1312388338,1222693636,238986038,567095476,245670710,712180284,1354773278,-491118834,-855002092,1329908513,775037011,1919885360,1952541728,1914729061,1769304421,224683378,-150789110,145033,-567557236,1253366775,-1942609459,-1961976802,503327798,889239574,-1992941107,906902046,238814860,12066574,370260517,-1959386675,-485484530,113587746,-628355046,-13182157,1930434078,13428995,503760182,-1143305200,-13238269,118494750,583007263,338737424,-1070346453,370584307,1223171847,310023,-851181384,-167087583,91521218,247631744,-327595200,-402387736,582681449,586907920,1393062672,1130043391,-1175262397,-517275642,-1961974082,-217639172,47835300,1089006899,-1209511689,1393167616,1801675124,1702260512,1869375090,218762615,1986610186,543515753,1869771365,218762610,1869366794,1852404833,1869619303,544501353,544501614,1684107116,168649829,-1178987855,250425877]},{"sector":2,"length":512,"data":[178975,567099572,-4710634,1122521088,-1173311229,-437578293,-608559695,1440672533,1448602763,2123040542,108432132,1317787531,1996372744,63343380,1945648065,66126604,-45134087,-335764237,197626657,1944637894,868715274,1927860678,-1958107925,-202780199,1944834469,637831685,-1031076472,-1017290914,-2081649835,959038,385811572,1996426914,47179780,-1017256565,1475119957,75402070,1569392011,72190722,-1962519157,2106263669,1461832970,-1996063093,39684357,-1996206711,1971914325,172330760,-164428686,-1662514965,114182,1971914123,1566531084,-326412861,-1962467753,-1070398338,-218103879,1086426030,1608054592,-1957313699,-1957275668,2123039862,-1962467834,-1178586145,-1359806465,-1948649663,-1968770053,-919339196,1929332026,1090876421,-772341013,1600045451,-1957313699,2123061228,-1461168380,-397393665,190577949,1526953408,-397408277,-997983091,-1017291004,-2097099799,-126619911,-18775999,-66947189,-1459713107,1212314625,359907643,-268185461,1946265773,96600884,-141885438,-335657847,1962839014,-1980169460,-1054081460,-351958712,-17235195,-963903924,-92153204,91488789,-434205658,41912591,113649347,1023545322,628424702,-268173685,1946265773,1224641522,-1116487365,-268185461,1946265773,96601058,-141885438,-335657847,138906598,74760203,334223502,-368116186,-1945078769,34946520,-1910110860,-1961893346,-1950487753,-1070397833,989878760,604861638,-1740619775,1946177000,-28443123]},{"sector":3,"length":512,"data":[1946160104,1313773061,-1070359829,-1957575783,27852357,-936705164,-1170128567,992378879,1980753942,1978323204,63015925,51737286,-150113598,734143442,846022,-755562379,-445257007,-1017528269,501764434,1461220352,-259260789,1153954307,-1979711746,-695531913,-1991583957,1499004501,1347666778,1377751603,28856402,520507392,-2096687384,-92075836,1532633087,-771030412,-326412861,1460202627,-1439265962,-1206392050,-1202716660,-11530260,101574708,184992899,-2096597824,1015218886,-2082179840,963903548,-947700597,-28915956,92930048,1183422535,-1977816070,-12740603,839152896,-1979520064,-27358459,-1996601601,-15809913,-2092434866,1962998398,313310,-1956684288,-1883021851,-1911555578,856595486,-1950250039,1241091049,2897547,141882891,-1359821170,-92950971,608212805,-771912706,382010341,-91756513,-57946229,-326370045,-561117418,-481692109,8292621,-1431550651,-92946422,1317663714,-1994451456,-15816154,1427110438,582741131,586907920,1393062672,1130043391,-386733245,-469105841,2122320500,74776580,-33274170,974570782,620804110,-1960894003,-485484530,178951,269885183,-1274788213,-1893610164,-1911555066,370056222,8437255,-768370516,-1539407834,1701970702,738627152,-1950338304,-1949173816,648999672,-109771464,-1962686589,-1949173816,92940023,-533053113,574362740,154929268,540804212,374926197,8502791,726608875,1962871806,1120898033,63146843,198081,738197029]},{"sector":4,"length":512,"data":[519867360,118890246,548447475,533433258,-352288322,80251662,738075652,-1191408672,-206888893,-1430156380,521598091,-1948480688,178957566,1010660544,1444902178,245761791,1958742700,1965177902,-8552441,1325692252,1206774698,16729542,938005995,1322284032,117392982,-1431564634,141869066,1962943976,-1428034571,1263269003,141816635,-1995995219,-219414972,-770974581,134152821,245900937,268183295,41158972,1438851132,-1957237621,-25099146,1014304120,201737462,1149908597,-661940217,-2013862959,1963003408,71616295,1149898800,-661940217,-2017008687,-956232176,1561240070,38061855,1149960704,-1207662332,887816193,227606145,1156983925,645204998,-1744354166,-472786805,235964406,-1206422271,-397409792,-997983935,71600386,108314635,134630528,-1070351893,1575324510,-326412861,108432214,294531,-25080716,628428152,-1744354166,56223824,184730755,1444312256,-2096910360,1149895364,-661940217,-2017008687,-352317936,-1862368998,1444640013,-2096917528,1962869444,-120461308,-2147302269,871827044,-1996191296,-1956772796,1438866917,-326898549,-1957275898,2123039862,105286410,-1995938057,1183447622,1958743036,105248315,-1975618292,-1952970939,-152841768,17698951,1308569461,41779970,-1978893312,-14841084,705136645,1460399076,1352139914,-2097035544,1173750980,91496454,-622215117,1325352448,105248508,-1978501880,-1952970939,-152841768,17698951,-1545010315,-58817792,-385649408,1183514761]},{"sector":5,"length":512,"data":[38091260,1448090738,317208063,113542138,704398987,1183515205,-955973124,64582,2105791467,561250306,1443001855,-286771713,113542137,16926091,38112005,66864681,1170670197,-352321534,38666156,163203,76156028,100605323,-467007608,-1974006805,-397371388,-998047445,105248260,1176007968,-369340673,-1973944449,-397371388,-998047469,105248260,-1962052576,1177287238,-137221124,535496310,-61931706,16547459,1308617076,41779970,-1966113792,-14841084,705136645,1590619108,1575324511,-326412861,-1175047338,-466485195,-533549828,-192873502,890175061,-2012842752,-352308186,1961101841,3586573,-1191181637,1085538329,-1070456371,1577072034,-1017256565,1458342741,74877783,-1715457028,1017961099,1023112224,1022850057,74751021,24455996,2000239788,1915759647,-773598949,-1949594670,-773598726,-773598766,332989394,-2082995241,-588578606,125148563,-763111177,1608185600,1575324510,856191683,1575324608,-402230333,-4718579,1575324671,-387697981,-1564278783,-469102932,1048585077,1912802980,1931623437,1914715149,-351948795,322736135,330302070,-686817605,245277592,-339440957,-326412809,1459940483,108432214,-1744419702,1946190761,105182726,-1207536576,-622198785,105182720,-2147060735,-350222772,105677038,107249666,-1983892497,-125107644,-151093623,1963460164,121932303,-774337640,277346019,812908814,2083208331,2130643716,1962891026,121932292,1558728856,113541890,-1946270071]},{"sector":6,"length":512,"data":[-1992293308,38061828,1552613887,71731716,1793787784,67519734,-25080203,762645880,-1744354166,6940752,184730755,-952797760,1561240070,71616287,1149898800,-661940217,-2017008687,-956232176,-351260412,33601720,-168564656,-1996307325,-1073019836,1283458676,-1679095802,67521664,1459618239,1342457485,-1744354166,31320144,-1996045181,2117729862,-385649410,1183514417,1592011268,1575324511,-326412861,-2096865653,293410043,2080439171,-1031277044,91504654,-352321096,1572877058,-326412861,119428695,-485994869,-1948677329,-141884290,-4603853,1101984511,-885270025,-880082314,1988886155,-1968770298,-919339196,2013218106,1090876421,-772341013,1600045451,-1957313699,82609132,1988843095,1459565316,-2097011224,1149895364,1006838790,-163810046,1963460164,121932303,-774337640,277346019,661913870,1143669899,-62486268,461291531,74776400,-1744354166,18475088,990299267,125107270,537283712,-1946157121,76088388,148679,1590135552,1575324511,-326412861,1459940483,225492566,401342259,-1744419702,1946190761,2045269515,46433279,1191277632,956876419,1930311734,1590135779,1575324511,-326412861,-2096736426,1962936446,239255352,-1962518901,1967653958,5498887,1223370610,244463243,990999624,-1962052361,1183384132,988304908,812867072,-2130393469,1930334974,1976699652,-18426,-1960973415,264471514,61987793,1219816403,-378396211,-1996191342,914948692,-1070395758,-1956749561,-1950130715]},{"sector":7,"length":512,"data":[-141882290,1946307641,80118540,244514433,-335941003,64654143,-1959169508,1002540755,956724727,1930313246,264471334,-338568239,-338564143,158725947,-1667114749,-1898435826,-850742080,990736929,-1996196361,-1844560362,-779418489,-326412861,-167485813,537838215,45616756,-1949748414,1931595217,-52303613,247629814,-385649280,1317732481,106334984,-1070397666,-1957275652,-470119440,1074444389,846573298,735021905,283331018,60563917,74685936,1240140212,796180491,178502,-1274015046,1931595072,-351685628,1958742836,-678733542,-1957575189,-842388529,-268198879,-1274776675,186313481,-166300224,1074709127,1586170740,440369158,-336067723,146340100,41048348,1600046731,-1946396951,1451952206,-851397626,-1274776799,-470947063,1975520235,-1031276825,175390734,1065409163,-133991142,-1191586069,-789898232,-1947432107,1736442974,-1017262330,0,0,0,0,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,270,0,0,1868787273,1667592818,1329864820,1702240339,1869181810,168632430,1953451520,1730175264,1752195442,544433001,1852404336,544367988,1701603686,658720,1701998165,1852272483,1684372073,1769107488,1919251566,658720,1701998165]},{"sector":8,"length":512,"pattern":0,"data":[1852272483,1684372073,1769107488,1919251566,1919905824,168632436,1818838528,1701978213,1696621665,1919906418,658720,4325458,4390982,1124094010,1380928591,5522762,1346458183,1396918600,1280262912,3232335,1330401091,1124086866,1380928591,1329791032,1128353869,6029396,9699445,13172908,14549212,14811360,15139044,34933604,23331056,16318997,34932068,123994368,17236501,34933092,56885518,393749,1885434439,1935894888,153092096,1027279373,43,1885434439,1935894888,62914561,134219777,256,255,33554687,16777216,17432836,3211312,17957137,3146006,18153472,0,0,0,4653056,671137803,-16770816,65791,2621441,-65511,16777472,419450880,16776960,65537,1638480,16842751,1073742080,50382849,196608,20971522,196808,33555200,-939360256,-16776960,262145,1638480,16842751,-1610612480,251709440,262144,20971522,983240,33555456,-939360256,-16776448,131074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,406002435,456923909,453387315,627254604,218234979,620888074,99]},{"sector":9,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1885434439,1935894888,31457281,134219777,256,255,33554687,16777216,17301763,3211312,17826063,3146004,18022400,0,0,0,4653056,671137803,-16770816,65791,2621441,-65511,16777472,419450880,16776960,65537,1638480,16842751,1073742080,50382849,196608,20971522,196808,33555200,-939360256,-16776960,131073,1638480,16842751,-1610612480,251709440,262144,20971522,983240,33555456,-939360256,-16776448,131074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,70327042,840645659,625679110,6497635,658690,6497538]}]],[[{"sector":1,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1885434439,1935894888,145227777,134219777,256,255,33554687,16777216,17694982,3211312,18219285,3146012,18415616,0,0,0,4653056,671137803,-16770816,65791,2621441,-65511,16777472,419450880,16776960,65537,1638480,16842751,1073742080,50382849,196608,20971522,196808,33555200,-939360256,-16776960,262145,1638480,16842751,-1610612480,251709440,262144,20971522,983240,33555456,-939360256,-16776448,131074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,524296,238230277,453446157,355670844,453394203,627254604,218234979,1645937162,6497538]},{"sector":2,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1885434439,1935894888,145227777,134219780,256,255,33554687,16842496,17694982,3211312,18284821,3146022,18481152,18874653,291,0,4653056,671137803,-16770816,65791,2621441,-65511,16777472,419450880,16776960,65537,1638480,16842751,1073742080,50382849,196608,20971522,196808,33555200,-939360256,-16776960,262145,1638480,16842751,-1610612480,251709440,262144,20971522,983240,33555456,-939360256,-16776448,131074,0,262148,131074,262148,65537,65537,262148,524296,0,262148,131074,262148,65537,65537,131074,524296,238230277,453446157,355670844,453394203,627254604,34406755,453118477,1830486649,40049410,620913179,99]},{"sector":3,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1885434439,1935894888,145227777,134219780,256,255,33554687,16842496,17694982,3211312,18284821,3146022,18481152,18874653,291,0,4653056,671137803,-16770816,65791,2621441,-65511,16777472,419450880,16776960,65537,1638480,16842751,1073742080,50382849,196608,20971522,196808,33555200,-939360256,-16776960,262145,1638480,16842751,-1610612480,251709440,262144,20971522,983240,33555456,-939360256,-16776448,131074,0,393222,327685,262148,196611,131074,655370,0,524296,262148,327685,262148,196611,131074,65537,524296,238230277,453446157,355670844,453394203,627254604,34406755,453118477,1830486649,40049410,620913179,99]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1885434439,1935894888,52428801,134219783,256,255,33554687,16842496,17301765,3211312,17891599,3146059,18415616,19333408,20250926,21168444,4653379,671137803,-16770816,65791,2621441,-65511,16777472,419450880,16776960,65537,1638480,16842751,1073742080,50382849,131072,20971522,196808,33554944,-939360256,-16776960,262145,1638480,16842751,-1610612480,251709440,262144,20971522,983240,33555456,-939360256,-16776448,131074,0,65537,524296,1048592,131074,262148,131104,0,4194304,262145,524288,1048576,131072,262144,2097184,4194368,221256452,840630794,625679110,23274851,453838605,87387,1528497672,16777549,1297816326,100794369,21846811,453378816,85339,1528497668,83886413,1297816326,101056513,21846811,33554432]},{"sector":5,"length":512,"pattern":0,"data":[25381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5318,0,0,4656,70192,0,16908288,0,33947648,0,58982400,0,67239936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3592,0,0,533,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239206400]},{"sector":6,"length":512,"pattern":0,"data":[0,0,0,0,-2122252288,65921,0,0,0,0,0,0,538976256,538976288,673718304,539502632,538976288,538976288,538976288,538976288,269502496,269488144,269488144,269488144,-2071690224,-2071690108,277120132,269488144,-2122248176,-2122219135,16843009,16843009,16843009,16843009,16843009,269488144,-2105405424,-2105376126,33686018,33686018,33686018,33686018,33686018,269488144,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8192,1180648251,1598377033,1330007625,0,369098752,219677186,202116105,-63481,302846719,168689410]},{"sector":7,"length":512,"pattern":0,"data":[20208205,327698,13172768,39649279,589694976,2988,30,184418305,13107200,195887595,457834496,463208448]},{"sector":8,"length":512,"data":[-1957363712,15382764,1460366056,-2114614442,-956241170,43078,805389510,1760056918,79987469,620127408,704728202,-1983839251,1587651654,-1538901760,1621166204,-1538901760,-172488066,-1696051200,46433028,-2096869633,-956168634,42054,1586172907,-1948003932,838796926,-2096504344,1191117508,71732132,2091140665,117487845,121825360,-2096970621,2114061438,11581450,72869968,-2096970621,1962935422,55502854,-1962722071,529204830,764938122,1183383617,106859428,2139103115,359938561,17071747,-1330117259,-1207702784,-397410097,-998046691,646352130,1996443903,126937252,168084611,-1207274048,-397410097,-998046719,106859266,-504875009,46433036,1034307209,1014235138,-1962516853,41910303,-1207274449,-397410128,-998046759,-1501658366,-2095746044,1963000958,13613061,-1330117653,-1092071424,46433027,-16359797,106859271,132843519,-2096869633,-1962801594,529204830,1966030720,106859292,2139103115,125125633,-5749049,-1207243777,-397410097,-998046843,-1468103934,-385649409,-2030632823,536936297,-810022283,1793609728,46433027,-14252403,44492880,184730755,-1207274304,-397410097,-998046895,-1538881022,-2037890812,-2033778906,-969212121,1560225926,-14055738,1971767040,-1610611969,966264608,142386246,-9861433,116064256,-9861433,12075008,-303542265,46433029,120852222,1342636216,-2096745752,-2037579068,-11469018,-840391562,79987462,-1207835415,-1957691345,939460190,-2096359448]},{"sector":9,"length":512,"data":[-1073019708,-1330115980,-689418240,46433026,-9861385,175382528,1342230456,-2096970520,1183646404,1586188464,-398983418,-998046757,-1337553660,135325776,-402471805,1178273116,-1926204252,-397365178,-998047264,1975520002,5290018,-1287221936,54257744,-1962621821,4161752,1996426613,111470756,184730755,-13732416,-51862410,46433030,225820683,-391874817,-998045899,1958742786,8566794,38791248,-1207778173,-397410097,-998047163,-1337554430,4271512,113895504,184730755,-1978501696,764981318,-397410239,-998046025,1958742786,8566794,35121232,-1979530109,764981318,1183383617,-1538901590,-810022283,-18329600,46433025,1353729677,-2096639256,1950352068,10807555,-8878451,1095760,-1337553584,33286224,1074185347,1190528628,175444109,1342230456,-2097035032,1183646404,-1444392784,46433034,1133377675,-1404663376,1342198712,-391350529,-998045011,2022083844,381178111,1183666176,-1226288976,113541889,-340900215,5814331,-1773761200,182380624,184861827,-1206750016,-1924136870,-397371834,-998044980,1975520004,2022083853,-756526849,46433025,-507983125,1458065408,46433025,-5341565,1586216821,509612,1353729677,-14252403,132245584,-955988861,16738694,646352224,1996443903,83814564,-1207647101,-397408512,-998046728,872873474,117487623,71166032,855819395,-1796714304,46433033,-443850914,-1957313699,5552364,-955808024,65094,1190600683,1948254447,-1404662507]}],[{"sector":1,"length":512,"data":[-28931248,1342193925,1342202552,-2096550680,1191118532,-1404662274,-25755824,-2096871960,-1073085244,-443821963,-1957313699,5421292,1443316456,-2147197301,1966735743,-1744336373,-1996472275,99352134,16664263,-25755904,1353598605,-2097057304,1967129796,-18427,1183666155,1709723822,46433033,1946157885,-1371108034,74907472,-2097136664,-1073019708,1996434804,155641860,-1962752893,73305072,1560246400,-397162636,-998045388,-1963947262,-1986482622,-1072955834,1547547508,867070976,-443851072,-1957313699,-390056980,1996424887,151709700,1342358659,-16353537,1676149878,113541894,91602955,-352321096,-1950338302,1438866917,-1070338933,-16348440,1857553526,1189629952,79987464,1342177720,-1962380568,1438866917,247000203,107603968,452150982,-1995946357,1183709254,1183666418,1760055538,79987464,1324566214,-1996077429,1183577670,-129595132,1358055053,1358055053,-2096608536,2122515652,91488510,-335544392,-1950338302,1438866917,247000203,102361088,452150982,-1996208501,1183709254,1183666418,417878258,79987464,1341343430,1358055053,1358055053,-2096625944,2122515652,91488510,-335544392,-1950338302,1438866917,45673611,97904640,-16353537,-907541386,79987460,201213577,-15829568,367527030,46433032,-352041469,-28931325,-1017256565,-1192457387,-1528299506,73304837,-972798209,1187404807,1183467507,-129595386,-1996208501,1183709766,1183666418,-1796714254,79987463,16678531,-4717196]},{"sector":2,"length":512,"data":[855829503,1575324608,-326412861,-402649928,1448543587,-1744731160,-1946401143,1065354334,-2145750016,1966735743,-1744336364,64546896,755156099,1183383617,71730172,106859266,83641994,-1962440639,1204160094,1586182657,1547665412,-1957491595,1077937734,86632528,1183533035,-1957674756,1077937734,-10950576,184861827,-1207536448,401211391,73304833,1946173312,108461851,-2096675864,54330052,-1207075328,-11534222,1256719990,79987463,-16484609,1055393398,79987463,-385452405,-24444748,1342207160,1342260621,-2096909336,-259324732,242611723,-402229505,-998045952,66095874,76154486,1023297160,-972786340,-966984122,1991770116,1166888960,1307070465,79987463,292929547,-1996601718,-396929532,-998046585,-336098556,7911517,21335376,120252496,184861827,-1975093824,76086854,1183319434,378622,1208370827,-1191688567,-1957691269,-1992230842,-397346234,-997982631,-1982297340,1065416798,-1964739328,92864070,956712587,58063430,-1946215191,-347080066,-28931428,1015022728,-385649664,1996488516,106620934,1023591555,225771522,1342209464,-402229505,-998046111,108461828,-2096973336,-1070398780,-443850914,-1957313699,964844,-972827928,-1927679162,-1924074938,-397348282,-998046249,-230258172,-443816918,-1957313699,2013420,1459859176,-2081060010,1153834734,1183666689,1448497400,-2096956440,1451951812,62925816,-763166140,-230258432,-940288375,63046,-990486901,-1977159042,75401985]},{"sector":3,"length":512,"data":[1191117192,-159480842,1592360501,1575324511,-326412861,-402645320,1448543067,-293341813,21284382,-129594030,-396994992,-998047064,-128546042,1141096491,13796098,-1980610935,1187509334,-1962934026,2123101790,-1006532092,-2010713474,-163119359,905346691,1600055678,-1017256565,-1192457387,149422086,2122536451,1065091076,-1744363104,2097432121,5355574,-1727762697,118883843,119019027,-1979955575,1187511894,-1962934022,1992620638,9053948,-2012842357,-96010496,1375370883,-4658818,855829503,-443851072,-1957313699,440556,1443017448,294531,564150140,1178179591,-1204388604,1861681233,100899076,370345750,1183385368,-27883012,16402119,-94467328,-1979287925,-59325440,-16742362,2122578502,-377597446,-335544392,1589654274,-1017256565,-1192457387,1558708348,1183667714,-96040488,1350846093,-402360577,-997982406,1958742532,-951650499,913682432,-1949743477,1183435606,-27883012,14042823,-698447104,654079684,1988821130,-16742150,2122569286,-377609770,-1730656630,1963214395,112645,-1070398741,1575324510,-326412861,-402627912,-1957297673,1659798517,1353598605,-402360577,-997982506,1958742532,151308063,71732036,38046016,-454535594,79987459,15812343,-1207602048,48955393,-1956724685,1438866917,1656286347,28436480,-2081060010,1183671022,1996443822,-24057852,168084611,-953781056,-1958475516,-1992293306,1448477252,-2096914712,1190593732,1971323121,105182983,91488768,-352321096]},{"sector":4,"length":512,"data":[1589654274,-1017256565,-1192457387,1692925966,-2143387647,510984192,15877831,121026616,-1913108855,-1924074938,-397348282,-998046885,-2147039740,922746624,922683210,1996425032,6481924,-1017256565,-1192457387,619184130,1988843009,-1978733820,1357130244,-2080396824,76022468,3964998,1183575413,-443851260,-1957313699,178412,1442904808,1988827627,-1962087674,950797406,-1962642169,-2146243645,-277544900,-1962653953,1065354334,870282496,-443851072,-1957313699,71732204,225829898,108159292,41384508,1593778220,1575324422,-348539709,-348474362,1429976066,1452010635,-383660796,-1957362788,508975084,-1962639733,39684869,-1962652277,1972045397,175505160,-1912045941,106794501,1461833055,31899422,2123095950,-1895461880,2123040325,-1996125946,1300824669,106268932,-1895271031,74582597,149681715,-1107075096,92995585,520910217,-1017290914,1475119957,-1962467754,803407950,2123094411,871860996,-17984,-146690318,1993030617,-1949594878,108432382,1149937395,986264575,91750213,-348060300,-1949174014,1566531265,-594847293,175298603,17571387,-477428622,-1947606529,-326413055,119428695,-1962508661,-1178586121,-1359806465,-1948649663,-678755202,-1031035661,-1017290914,-1962809665,721420854,16679415,-1107070448,-1896214528,1589936599,57932551,-2130621975,922746596,18228873,338069814,-1312388351,1222693636,17998646,567095476,24683318,712180284,1354773278,-21356786,-855002101,1329908513]},{"sector":5,"length":512,"data":[775037011,1919885360,1952541728,1914729061,1769304421,224683378,-150789110,145033,-567557236,1253366775,-1942609459,-1962840034,503327798,889239574,-1992941107,906038814,17827468,12066574,221100581,-1959386675,-486356466,113587746,-628358452,-13182157,1929562142,13428995,-804862666,-1143305214,-13238269,117622814,-725615585,123779330,-1070346453,370584307,535305991,310021,-851181384,-167087583,91521218,26644352,-327595200,-402447896,-725941634,-721714942,1393062658,1130043391,-1175262397,-517275642,-1962837314,-217639172,32434340,837348659,-1662496525,1393167616,1801675124,1702260512,1869375090,218762615,1986610186,543515753,1869771365,218762610,1869366794,1852404833,1869619303,544501353,544501614,1684107116,168649829,-709225807,250425868,178975,567099572,-4710634,1474842624,-1173311230,-437580569,-138797647,1440672524,-326898549,-1101637882,-397016606,-998046846,-1913091326,-11532730,-397015946,-998046579,-96040698,-370649258,79987459,1593460363,1575324511,-326412861,24526467,-16485376,-16681450,-1571722,1575324417,-326412861,2123060823,-1962571004,1300955741,106269444,-1962379893,567085693,108956503,1569260937,72190210,-1996073591,1167001717,855929354,-402068490,29229252,-1996125440,1599999093,-1957313699,119429100,855932555,-17984,-1047810318,-654884800,1438866783,1448602763,2123040542,869763844,-17984,-1957712142,108956663]},{"sector":6,"length":512,"data":[-4595829,1101984511,-24389129,-1527516277,1600045707,-1957313699,2123061228,-1962467836,-1178586145,-1359806465,-1965426879,-74774970,944746226,855798789,1606913023,-1957313699,-1957275668,2123039862,-1962467834,-1178586145,-1359806465,-1948649663,-1968770053,-919339196,1929332026,1090876421,-772341013,1600045451,141738845,-443826125,108249949,-1207955992,-443809793,-466435235,-1023409688,167870626,-2145159708,50427966,574360946,540806515,95421810,1016072171,-1342015981,28621587,1923324119,-997539071,-1957300245,149717996,915101271,401277310,1342180536,1342294200,1609053439,113542140,141869067,-2096970109,-462094276,1946172547,-2093184199,1187450055,-1979711234,-1986509051,485227078,1033373066,74776831,49004594,1586169226,-28901378,26642312,1207586559,16416387,80207477,1599995904,-1017256565,30803599,24125070,-1047803597,-108271221,741772105,1962281728,-221868536,1974355374,1083655674,-41157084,-989600303,484974358,-1949332484,-1946352644,-1912138004,1240871902,2122911203,-1404746496,1975519914,-1980505350,521535566,25044617,30811903,-1142125739,-75431212,141755092,1528299347,-219462845,167907816,-2146798364,1962935422,71747076,382017278,12058894,522308901,46796427,45811683,-937492736,71731970,567102644,30934671,24125070,-2135029994,865643520,1048585938,1912799608,109989989,-1070399444,-772290421,-1359808373,1963276326,63407097,-772290421,-1977157749]},{"sector":7,"length":512,"data":[977356549,1007973600,1007186978,1006924809,1491825952,-2118252778,1328278272,-15991253,-812912268,-1014277310,50708739,-121600,-57941973,371131934,-1331367161,-880039392,8502815,-930410773,-31194108,-57941973,-1423948872,-1047812877,385125290,-594849761,-1431503221,1031061514,527770172,2047278934,-1073042431,574369396,2105542517,74800383,-303322545,-12204473,-388633856,-797704137,-12167602,-1409189370,1958742698,2484232,-504629899,1274317738,1945320267,126332168,-335657847,199003122,-16615982,2082900231,-668532991,1946762241,-1021297662,1458342741,-2130413941,1963057918,105182780,-1976142580,-1952970940,-152841768,16939655,1153902453,-1979514876,-1952970940,-958148136,16939655,24512199,1153899126,-1962803198,76088388,-352321096,-83984076,-164858623,1963722308,121932326,-774337640,2055730915,393543938,1342308536,-2096528920,1149829828,1958742788,105676806,867822344,-443851072,-1957313699,1988843244,75399942,-2125696000,1963057918,121932325,-2098704232,46433032,376750091,144173142,-1979530109,-1952970940,-958148136,162439,-25093397,460653050,142338134,-16595837,300418164,46433033,-150576000,76136499,1577337993,-1017256565,1458342741,901379635,-52153856,-488623444,1442087163,3477246,646448757,300613684,225764362,-1157613894,431554562,-851397632,-1564462559,-1956773835,1438866917,1656286347,-108664831,1988843095,-1568240378,48276478,-1560000885]},{"sector":8,"length":512,"data":[1183515352,48014088,-291258317,49062658,1962949760,21620995,1948597376,17492227,48629447,-1070399487,-1560091485,-391970092,47883010,-1560093021,-224197930,49586946,48367303,854261792,1965898880,-200868090,-2144867582,209005372,48498431,47580871,384499712,1965046912,-465665267,175439874,47580927,117376235,-1975123214,-397371388,-998046201,1975520002,-357017921,-1863823358,79987461,1015083147,-15567570,1174593030,48674902,91875408,-1962621821,1815904496,113706869,131802,3964998,-1595341963,-1744532992,-23165303,1946174781,4668682,1480394100,-16157440,-2096966650,553557638,-23165301,1023435565,1047986197,781434883,321824767,48760575,49415879,179830784,-2014818304,46433024,146297067,-1192039680,-303366128,-397361101,-370474592,-352321096,-1632174091,35580158,-24388629,320618987,320934648,320934689,321524522,321524522,321524522,319427370,321524522,320082730,317985578,321524522,1048777487,1946157806,49062149,-381280021,1031863974,1191605285,1962950016,734497781,-396996410,-998046946,-369652988,1600061066,-1017256565,-1192457387,-521666536,-2091493385,1946813566,-402194684,-633437438,376700930,47980171,1468729227,-129595134,-2080745847,67296262,1048783339,1946157800,-601978096,-1995994366,1187510342,-352321286,-601978099,-1727558910,-1980217719,109312598,-2097020196,193086,1183518068,-96072712,1183516020,855829252,49324992]},{"sector":9,"length":512,"data":[48248459,48774787,-2094369536,2097216126,75399972,-971541238,-1958335228,1452013638,-2082932742,-621346606,-1980217719,1187510870,-352321034,-163133691,-41222144,-15143037,-11074442,1996487286,77064440,-2096577405,187966,-396943244,-997983884,-435254526,-1983370494,82574926,1177552070,-113013,-1072955826,92992127,1048773768,1946157780,2086747143,539787267,2105558854,-428539649,48774787,-1592494848,101384932,192152278,16154243,28837237,855829248,1441288384,46433026,-443850914,-1957313699,571628,1475785448,-502872234,-2097143806,1946158206,114192,-2096964447,33741830,-335788407,-601978061,-1995994366,109313094,184681180,-955943488,44366918,-386107649,-997984048,-2081387774,187966,104401524,74646246,48641675,48905867,1048837675,1962935028,250107655,46433025,-59310250,-2097058328,1048773828,1946157812,-152545529,46433024,-443850914,-1957313699,178412,-1577703704,1183384284,-566328322,108331010,48629447,922681350,922682068,1996423910,-533266684,-25755902,-2096940312,2122517188,108291844,1191476867,1048778869,1962935026,-432110831,175374338,48248575,-2096946968,1048773316,1946157810,-432110831,175439874,48248575,-2096950552,109249220,-955776292,192518,48537856,47580683,1996427892,50981118,184730755,-1207601984,48955393,-397361101,-443875036,-1957313699,-390056980,-2091453049,192062,512440437,1342112472,41911042]}]],[[{"sector":1,"length":512,"data":[-1978565632,512427078,931857112,76023807,233563178,47724287,-402360577,-998047027,108347396,49153791,117376235,-1956773140,1438866917,45673611,-180754432,1048794711,1962935022,74877777,1249834507,512439275,1342112472,41911042,-1609466880,512426722,1066074840,92801023,250340394,47724287,48379647,-2096991000,1967129796,-301531388,1321634562,-964706293,49168003,-1962445568,100729926,1599996652,-1017256565,-1192457387,-790102014,-1957275660,2123039862,-297893114,1282736130,512439787,1342112472,41911042,-1978500096,-669086972,-15758590,-1999009017,-337368569,-667484402,-1744532990,34334800,1074054275,117376117,-1958346002,-1073000505,1048822901,1962935022,105286407,49022465,-443850914,-1957313699,702700,1475634920,-533296298,-1983892734,1183448134,-364999688,-1444391422,46433270,737822345,75377656,-1325207391,737727235,-197229576,359989250,1965898880,-499219696,158674946,-397371220,-997982572,-499219710,192163842,125763339,49561219,-2095483904,1946158206,-129564922,-2097127704,192574,1191118452,7334140,49561219,1462138112,-2080462616,2122515140,158597124,16285315,887620469,-264338688,158597122,16547459,1122501493,-92864768,-18290602,-2096839549,193598,113708404,2097890,-26482601,1577239683,1575324511,-326412861,-1662468045,-465665037,74711042,48966576,1352147120,-1946289176,1438866917,-1070338933,-1192001816,-397410256,-997982744]},{"sector":2,"length":512,"data":[-264338686,359993346,47464067,-1341885440,-1341985960,-397371272,-997982772,1575324418,-326412861,-402652488,1448604491,-2147060085,242559548,47980171,47974019,1178569474,-13419797,2083536000,960266291,1043934847,192217822,1966095488,-502872314,-1409273854,-774927464,65130977,65130959,820609992,1015085451,-2147124176,-478267076,-1996202357,1590070079,1575324511,-326412861,-402652488,-1101597981,233505451,1178076298,-1207601916,149618689,3964998,-1070338443,1575324510,-326412861,-1946911256,1438866917,1944644747,1575324660,-326412861,-1946916376,1438866917,1609100427,1575324660,-326412861,-1946921496,1438866917,11791499,1426284777,-326898549,-1957275900,1149896310,-2086037498,-167349248,1950352964,-18426,-167716119,1946224196,105676806,-2131825888,-2147350964,871302756,38046144,2122971275,105182974,-1978698488,-1952970940,-152841768,16939655,1015754868,184843307,1460829951,-1979419393,1352140612,-2096933400,1183385284,71601150,-956004032,33489476,-1979425653,126354502,1156999915,1316291590,31653505,1149906293,-397371385,-998047639,1975520002,1980155701,-954567167,50332740,-1744354166,-472786805,41584582,17090305,-1195840765,-397409792,-998047478,71600386,108314635,134630528,1283496939,29295622,1183667968,1149915140,-397371385,-998047018,-28931834,1962835513,-13506301,704923274,-1956684060,1438866917,1586228363,352027396,-75296387,-166953984,1073845895]},{"sector":3,"length":512,"data":[28837236,855829248,1438866880,-326898549,-1957275900,-13433738,56617046,-1979530109,52692548,1014301244,134628598,1149898613,-661940217,-2013862959,1946223226,721718055,1183384644,2126515196,1962889243,121932292,1407733912,113541890,1962690107,105676807,-16608,-1996209013,38061828,-947191808,-443850914,-1957313699,82609132,-625060265,-335596799,105155095,8628632,-397014156,-997982343,24395778,147227463,44185145,-947133581,-443850914,-1957313699,73305068,33443712,-1017256565,1458342741,45136727,1962950531,-1207493079,1609039877,855995649,619420096,-1543625664,-1297939792,80188930,-964493311,-29047036,915013630,1317733046,-1898411004,649408,-443851169,-873872547,-285637888,-2143160205,2005663457,-1951532030,1946265854,-1053079486,-796191373,-1464995837,53769217,132546,1149892491,-1947800578,51148030,-28538375,-1991720661,50719493,-28508423,-628308341,31914625,-1943665292,-1996308962,650314367,46270150,-115454,-24435340,-1464995837,-1947044863,-1053079298,-796148365,-1464995837,65172481,132546,1149892491,-1947800578,-1073018809,-661781388,-31058965,1946337806,1037601808,91488742,-1172402650,-348681470,108497853,1508425779,1959148288,1073816589,1307088960,-32672768,199818829,-1778027520,-1695855026,-1013333965,-28996783,57934248,1095354411,2147465793,-1072284890,-788236798,-1946847766,1925579713,1925317397,601028365,-389665854,141885452]},{"sector":4,"length":512,"data":[-355347721,-1070340747,1364378457,1946164712,-24422632,-234622837,-16890681,108497407,-684992885,-27948726,-1017489064,-768389037,1347572254,1342177720,1256726278,147096321,536869507,41179994,1472451083,172919638,-1962654069,2123040342,119428872,-1073048580,-108850316,185496842,-1341490734,-604526035,-150941053,-1829270566,-1072967117,-235470220,-1829636205,805622663,41302332,-1951783164,1975716802,1325762786,-2012903764,995098436,1492480759,-1017290914,-1947432107,-2013920162,1948254614,1107474446,-779368141,57876941,-151930903,-2147379577,-2115435659,139365120,503731851,-54512889,-259303849,1709439627,-230683976,1362261422,-903098485,-854531255,-268198879,-1274776675,189393673,1177515200,-1174404423,1085539012,74654157,887818676,443858955,-338195623,-812953147,567134763,-1645214820,162792563,-1073014037,-2013915531,1950351766,106859275,1964654464,82573315,470333689,-1962773927,-379625786,1317794092,106334984,567099572,162792563,-337383957,-411713525,26642422,-1962249152,440369370,-336067723,146340310,1439755036,1586228363,107446276,1438866895,1465314443,142508806,-1086819072,1451950358,71731974,-402164408,661782611,915097835,1950876006,1962359569,38046477,1443645065,1577073384,-964480909,1727955204,184840961,-1207536174,-342228993,-2082829539,-607055933,-338492495,567101620,-1986860686,39094532,23475849,1594343475,1575324510,206474179,1278867339,-2096335870]},{"sector":5,"length":512,"data":[-25099066,-227212954,-1958745095,1914438618,-1898738887,1979136961,303970566,-2094632191,-607055933,-338564143,-147067951,-654112395,721514657,-1262448936,1914817866,1979136781,303466756,75993601,12833163,0,0,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,1543527471,2764330,774766638,20971520,1663369536,1044193338,175318304,1931804672,6029322,3014748,1543515694,23552,1631780864,1953459822,1229933088,543236174,2004116846,543912559,1986622052,1867382885,1852121204,1751610735,1835363616,7959151,1868787273,1667592818,1970151540,1919246957,543584032,1634886000,1702126957,1224766322,1818326638,1881171049,1835102817,1919251557,1919501312,1869898597,1847622002,1696625775,2037674093,1668172032,1701999215,1142977635,1981829967,1769173605,28271,2038,0,0,486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18219008,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0]},{"sector":6,"length":512,"pattern":0,"data":[0,0,0,0,0,33691136,201919768,134679564,318767103,-16641523,1180648251,1598377033,1330007625,0,83886080,83886080,1,0,258,0,518,0,900,0,1026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,0,0,0,0,0,0,0,41025536,1819635240,721430892,2301997,0,0,0,0,8192,2573]},{"sector":7,"length":512,"pattern":0,"data":[21387853,6,32,1,2033057792,2136,30,1]},{"sector":8,"length":512,"data":[115408896,60300059,61808945,61816882,61809459,61809716,61809973,61824566,61810231,61811256,61810745,61810992,61832027,64367421,60325640,61145097,61153831,61160492,61161006,56840304,56842617,56837734,56837991,56836963,56840818,56839276,61161263,61177181,60295693,78248708,56836449,56840047,56837477,56841589,56838505,56837220,56838248,56841332,56839790,56841075,61169453,61177440,78249218,61176924,61159995,56840561,56838762,56839019,56842360,56836706,56839533,56842103,56841846,56842874,78249473,95056426,76674824,96673824,74891072,90767617,90767874,90768131,90768388,90768645,90768902,90769159,90769416,90769673,90767360,73064224,70840080,81147648,81147905,81148162,81145091,81146884,81147141,81147398,81144583,81146120,81146377,81146634,81145867,79375884,102891520,0,0,17104968,115408896,60300059,61808945,61816882,61809459,61809716,61809973,61824566,61810231,61811256,61810745,61810992,61824813,61811517,60325640,61145097,56840561,56842103,56837477,56840818,56841332,56842617,56841589,56838505,56840047,56840304,61176667,61177181,60295693,78248708,56836449,56841075,56837220,56837734,56837991,56838248,56838762,56839019,56839276,61159995]},{"sector":9,"length":512,"data":[61153831,61177440,78249218,61176924,56842874,56842360,56836963,56841846,56836706,56839790,56839533,61160492,61161006,61161263,78249473,95056426,76674824,96673824,74891072,90767617,90767874,90768131,90768388,90768645,90768902,90769159,90769416,90769673,90767360,73064224,70840080,81147648,81147905,81148162,81145091,81146884,81147141,81147398,81144583,81146120,81146377,81146634,81145867,79375884,102891520,-16185337,-16382716,197121,-2063632385,1962898431,1996453375,807337983,554836014,605496098,825370149,319822104,789976095,739585297,1397816571,1465274961,1085802014,-388461056,-527825784,58064700,-1962680599,2145616344,1425768448,-622263426,-773598973,-2134575389,-2127677579,1610699838,-164727807,67114758,116795252,1946681367,1404981280,-25082367,343081300,1965308462,1424916980,1422295297,-1976674303,50587908,918826584,-1960443564,-1967027704,637540118,-402497281,-1024064674,-1744079864,-1976641533,-385716825,-1024064805,738554884,47442272,-1024000206,-2147257341,-896909105,843112832,-1979550471,45869509,-167566104,41157826,-1360411254,51898370,1946469110,-398791915,-1024064750,-2147060728,-1796639036,79885826,-1024055435,-1979550717,42461637,-167579416,1282671810,-337112085,146994690,-998242700,40757622,1946469110,66879543,1625883509,133988354,514851957,-58704917,-1341885158]}],[{"sector":1,"length":512,"data":[-2144146661,74783740,703274416,1965816960,-350441468,1965898784,-350244860,46917912,-1024000206,-2147257341,-896909105,843112832,-1979550471,35383749,1971373302,79885886,-2136916108,1745664,-973071197,-2147454714,-855457560,-373279973,-990510599,-165907072,494142658,1576576,43116552,1574646,-369527544,-990510467,537293952,-352315346,585140791,1962940422,405145647,-338415104,-2134575581,-1070457740,1640070,242532362,1519136,-1427512270,-2134575615,-719190924,-804650261,1513096,-402509591,-1024065018,-162958328,1098122434,7472839,-4713932,-1070378753,-58668208,-2147125806,2130712614,1646218,-167649304,544475330,-645211341,-1265661394,-425982,179309172,1648374,49004802,430096435,31451392,-1024065360,856388612,786008795,46245770,-58704917,-2145881014,326389500,-1024009421,-2147257341,-896917297,841015680,-1979419399,-2145981499,292901628,1574646,-2146798208,-2147477706,1576576,1975519872,-229366,-58718092,-385649588,-2098659091,22603777,1947190006,432308278,1946993398,180650030,1946731254,180650022,1946469110,23116574,1953037440,1778155528,12259701,-1993410048,771839006,22417036,-385792791,317194407,79885825,-443939724,-1024003605,-391613437,97321279,-402575127,-1024065282,-167218172,57936066,-352249623,-337080194,-661940224,-773598901,146994915,-1959917708,-352232825,79885874,-1959917708,-352233337,63108646,-2010246796]},{"sector":2,"length":512,"data":[771840302,22448011,22717230,771808489,771840418,22316939,22717230,-352269079,-990474190,-166431360,67115014,-1159134348,403603456,12059648,-2146899067,-83879898,1350894008,551952560,1476446440,-1561782835,771796992,22625920,776565760,22617738,-13448194,1497270318,786682113,22329227,976111182,773485572,1962949760,12052724,-1590765429,-790101670,1019448064,-350718944,1021587987,772633600,22329131,1421280046,76164609,771797736,22560384,-96700932,551952560,-1207935768,365793538,-158321173,443877570,-990510925,-166496896,134223878,645924724,-336134120,421431301,-346504448,548469258,1323835622,-100275456,551952560,-100654872,1583292167,1482381658,-434065201,1042464,4800128,-1610124281,-658898843,784592387,22560384,-100043268,-1342099736,-77273426,1048587971,1979449688,485030409,-424824831,1355021156,-1959898797,-469672418,-64728991,1642463796,1544457006,1274995201,-430378379,1482381665,-49725,-1946541196,-1962927050,994461438,1912635958,-2143909116,439761664,1476687104,-1979750679,473336069,-2144419072,-67020738,1625559412,-1973295981,-427815712,-421493151,-389835935,-386203769,1625555115,1979596027,243333642,1528823959,1023359209,-99977734,9899648,719936272,125183,-1963306813,-2147477722,-992972572,-992951088,-1751071536,973546496,-164203296,1073780486,243281781,-1337982825,-1340021216,2418925,9897718,-1978305152,1632452]},{"sector":3,"length":512,"pattern":0,"data":[9897718,-2146863744,-134179034,9905672,9905792,-1006938049,62148944,-1759084294,-397390080,-430440409,12188512,-1761151456,242561024,-855705630,243327605,-343932777,116822024,1965031575,1482291949,-919383613,44590308,-1017513248,567095476,171827334,1023767043,225837844,783949582,-855002103,-840682975,109979169,1236533292,236855757,48806431,-853210696,4241441,1048828046,1962934400,515439124,8430336,-1560274269,113704988,4063362,113716987,340,1443793966,113651201,-1207959207,-661721088,788528800,520181922,772330938,22560384,776828412,22808263,-953286450,-2113839610,-1532940800,109522432,-1557266260,-1590820700,-2027028314,771796486,-1107253597,-2126118573,1929467134,1015033368,772175147,-349633338,1015033581,786920745,-349502266,157858529,60033,-355269455,-1070452300,1850286541,1920102243,544498533,542330692,1936876918,175009641,9229]},{"sector":4,"length":512,"pattern":0,"data":[25451085,6,32,1,-1473380352,2198,30,1]},{"sector":5,"length":512,"data":[119472128,64363291,68432166,68432514,68432674,68432935,68433192,68433429,68433802,68433953,68434311,68432005,68483113,68443949,64388872,65208329,60899681,60906106,60900709,60904050,60904564,60905849,60904821,60901737,60903279,60903536,101974529,65219108,64358925,82311940,60903793,60904307,60900452,60900966,60901223,60901480,60901994,60902251,60902508,60902765,65217943,65248486,82312450,65224252,60905335,60905592,60900195,60905078,60899938,60903022,65224492,65220155,65220410,65219389,82312705,99119658,80738056,100737056,78954304,94830849,94831106,94831363,94831620,94831877,94832134,94832391,94832648,94832905,94830592,77127456,74903312,85210880,85211137,85211394,85208323,85210116,85210373,85210630,85207815,85209352,85209609,85209866,85209099,83439116,106954752,436667395,591407899,1549622110,24052072,25166201,1869178209,1627398261,1970235749,1431257465,-1937210624,6198931,-1802794620,-1718708095,442368154,437983998,65535,0,4718592,261,454756127,556860374,1077019629,590545901,607388653,624231405,1580598253,641139693,708314093,674825197,691012589,1596785645,725418989,2131231725,590806,1366361059,1467417505,1164247969,1383203745,1416889249,1501103009,1433732001,1231618977,1332675489]},{"sector":6,"length":512,"data":[1349518241,2069562273,2103247843,168625123,-83622954,1096877287,1400046497,1147405217,1181090721,1197933473,1214776225,1248461729,1265304481,1282147233,976946081,572982243,2120221667,-50199581,2086405351,1517945827,1484260257,1130562465,1450574753,1113719713,1315832737,1298989985,1009517473,1043203043,1060045795,-33487901,1915356391,-150469144,538969295,-1086323199,16843956,33686951,50529703,67372455,84215207,101057959,117900711,134743463,151586215,1447,-551549529,-284162920,922748022,939590932,956433684,755172628,872678676,889521428,906364180,721880340,822609172,839451924,856294676,806028564,772539668,1273,134678112,84213513,33685254,2013200387,1946125567,1979675903,-35073,539897886,589439250,639968279,421015858,337580816,756100886,-50648043,1381061456,102651734,-1912586056,76081368,-12787574,-555154571,-2116515069,-2147450909,58610939,-788276503,-152841757,930447556,-1841397458,1946263041,386332206,661914624,1509110,1344304136,1174492094,22740609,976098419,-2114685660,-2130619154,1476483782,-385578450,777519875,26359492,-1979151578,387353281,1627334144,56551426,1946731254,-670853109,-1415083474,47966466,1946469110,-379573243,-13499693,1946403574,1087340547,-511653238,1962488384,-372930046,619184827,79885827,-980811148,-402477335,-1024064745,-350915580,51570746,1946731254,1992589318,-167602967,661980354]},{"sector":7,"length":512,"data":[1946403574,-372930046,-253230457,79885826,334187636,-167580696,108267714,-378092416,-1024064915,-2143849468,58000380,-2147327767,74778620,1005264560,1964702848,-350507004,469532722,498074741,-58709525,-1341885141,1008790300,-1341885139,-384242913,-13499701,1946403574,1087340547,-511653238,1962488384,-372930046,-990510565,-163678848,1064568002,-1560248159,480444442,1896269312,-1058504704,857459970,33155520,1971373302,79885852,243277172,-402128872,116785809,1963458584,41806329,1954596086,405676038,-1976046848,403055328,137327872,838866982,-165418028,477397188,109494322,-1073086439,773852788,-466485225,-167662871,74744004,49009954,378064906,820576279,34007042,1946731254,79885897,113721716,305397874,1358954424,-883900365,1976761472,405176325,512392960,-538443751,146994689,-617406348,-1976641142,-2147290481,175439865,653658800,-1056833511,-1070398741,-385869406,11534815,1946469110,-1965346037,-1484116263,1005257471,1951071360,1325170712,-617409676,1946403574,550469635,-511653238,1962488352,-339375612,1392279574,116789621,1971322904,389447690,243302400,176160792,-2146798144,141885436,1951202432,15591683,-402554135,-1024065192,-2143914993,-1024058940,-2144439284,-1024062780,-2144963576,-1024062780,-1155632124,-58719842,-2146929560,292907516,-100663109,-1843492562,244067841,1156120980,11004161,-167701784,74712258,-236198518,1946403574,20965544,820577741]},{"sector":8,"length":512,"data":[16705537,1946469110,146994696,417923956,-1870730495,-1744770072,-783558517,-152841757,125044930,-1870165202,-164435199,125043906,-1903719634,-165221631,292815810,-1758558162,-2020921855,-1557266036,-588709480,-1750979072,-2020921855,-1557266038,-857144936,-1875711232,1971373302,403109396,57934848,-2147435799,67115022,-343605064,405176328,28900096,548425861,-924311322,365778944,-1342135575,1048587776,1946157463,512372297,-872545897,-2010185934,-788424898,-1215615261,1179517280,1946434094,1015033370,-386632448,-661978953,26779950,-1962880792,1948269763,840166168,1946172644,-1221906931,53346656,771843255,-1293417334,1048587776,1979449750,548469308,1558716646,-1862092800,904598989,146994832,11737717,1971373302,403109395,125044736,1582720,-2012877833,-1023403746,-99947688,551952560,-352301336,548469253,552083686,520616448,1499094623,-1328588709,-400497120,1048576015,1946615881,6660103,-301737798,1048587971,1979449750,787020297,-424759295,784595812,26623616,-100043268,-1342104344,-77273427,1364414659,-1675719890,1348592641,37026852,-1959894554,-503211506,-227193858,1499588184,1036212315,594870271,473336826,1191086848,-2110375098,-1962642944,989888566,1962940982,1726568452,-1996125697,-1023402954,-1774288850,292879361,-460103452,216042081,-2040404352,-1822300448,-7870269,11266298,1023107300,-99977730,9899648,954817312,1979333887,243333642,1527775383,-385930519]},{"sector":9,"length":512,"pattern":0,"data":[1354956801,388401914,1894023168,-992951088,-992951088,604018592,1960851975,-1761151434,796213248,9899648,-434065344,-387076064,116785188,1971323031,-389772779,116785176,1971323031,-1759084535,638121984,645922967,1480523927,1364247547,-2131098700,1325438758,2615376,-77535656,-165674823,805345030,-136180107,-495596290,9899648,-1878463616,9897718,-85101280,1371756633,1692715315,-85982552,817152857,-528080435,1912801853,51657989,521014646,-1274450758,841075977,639749604,2885262,567101876,-1172369890,163054374,-1205744347,-661782464,8404611,-99322624,-1560273224,446890112,1876736,8521415,788201534,26347207,-1943142400,771855374,26674886,-268388352,-23013234,-1767756033,330964737,1048587785,1979449750,113716813,13500826,-1677277394,771785217,771794081,11273863,10789678,10920238,-1375303890,-1499255296,22265344,1526628678,773354241,1965767808,80096774,787344169,1965636736,80096999,-1159599317,-360642138,78708736,833940179,567132210,1868787273,1667592818,1329864820,1702240339,1869181810,604834414]}]],[[{"sector":1,"length":512,"pattern":0,"data":[24926797,6,32,1,1403060224,2190,30,1]},{"sector":2,"length":512,"data":[118947840,63839003,65347889,65348146,65344819,65348660,65348917,65349174,65351479,65349688,65349945,65355056,65355745,101450241,63864584,64684041,60379505,60381047,60376421,60379762,60380276,60381818,60380533,60377449,60378991,60379248,67279489,64694827,63834637,81787652,60375393,60380019,60376164,60376678,60376935,60377192,60377706,60377963,60378220,67279252,67276420,64708131,81788162,64699964,60381561,60381304,60375907,60380790,60375650,60378734,60378477,64699180,64698926,64708397,81788417,98595370,80213768,100212768,78430016,94306561,94306818,94307075,94307332,94307589,94307846,94308103,94308360,94308617,94306304,76603168,74379024,84686592,84686849,84687106,84684035,84685828,84686085,84686342,84683527,84685064,84685321,84685578,84684811,82914828,106430464,723196419,1549622080,23855460,24838515,1869178209,2114933,1869178209,-1610604427,-1549622910,-2063587440,-1751806582,220659808,-62112,33536,0,4718592,261,454756119,556860366,1077019621,590545893,607388645,624231397,1580598245,641139685,708314085,674825189,691012581,1596785637,725418981,2131231717,590798,1366361051,1467417497,1164247961,1383203737,1416889241,1501103001,1433731993,1231618969,1332675481,1349518233,2069562265]},{"sector":3,"length":512,"data":[2103247835,168625115,-83622962,1096877279,1400046489,1147405209,1181090713,1197933465,1214776217,1248461721,1265304473,1282147225,976946073,572982235,2120221659,-50199589,2086405343,1517945819,1484260249,1130562457,1450574745,1113719705,1315832729,1298989977,1009517465,1043203035,1060045787,-33487909,1915356383,-150469152,538969287,-1086323207,16843948,33686943,50529695,67372447,84215199,101057951,117900703,134743455,151586207,1439,-551549537,-284162928,922748014,939590924,956433676,755172620,872678668,889521420,906364172,721880332,822609164,839451916,856294668,806028556,772539660,1265,134678104,84213513,33685254,2013200387,1946125567,1979675903,-35073,539897886,589439250,639968279,421015858,337580816,756100886,-50648043,1381061456,102651734,-1912586056,76081368,-12787574,-555154571,-2116515069,-2147450909,58610939,-788276503,-152841757,930447556,-1975615186,1946260993,386332206,661914624,1509110,1344304136,1174492094,22609537,976098419,-2114685660,-2130619154,1476483270,-385578450,777519875,25835204,-1979151578,387353281,1627334144,56551426,1946731254,-670853109,-1549301202,47966466,1946469110,-379573243,-13499693,1946403574,1087340547,-511653238,1962488384,-372930046,619184827,79885827,-980811148,-402477335,-1024064745,-350915580,51570746,1946731254,1992589318,-167602967,661980354,1946403574,-372930046]},{"sector":4,"length":512,"data":[-253230457,79885826,334187636,-167580696,108267714,-378092416,-1024064915,-2143849468,58000380,-2147327767,74778620,1005264560,1964702848,-350507004,469532722,498074741,-58709525,-1341885141,1008790300,-1341885139,-384242913,-13499701,1946403574,1087340547,-511653238,1962488384,-372930046,-990510565,-163678848,1064568002,-1560248159,480444442,1896269312,-1058504704,857459970,33155520,1971373302,79885852,243277172,-402128872,116785809,1963458584,41806329,1954596086,405676038,-1976046848,403055328,137327872,838866982,-165418028,477397188,109494322,-1073086439,773852788,-466485225,-167662871,74744004,49009954,378064906,820576279,34007042,1946731254,79885897,113721716,305397874,1358954424,-883900365,1976761472,405176325,512392960,-538443751,146994689,-617406348,-1976641142,-2147292529,175439865,653658800,-1056833511,-1070398741,-385869406,11534815,1946469110,-1965346037,-1484116263,1005257463,1951071360,1325170712,-617409676,1946403574,550469635,-511653238,1962488352,-339375612,1392279574,116789621,1971322904,389447690,243302400,176160792,-2146798144,141885436,1951202432,15591683,-402554135,-1024065192,-2143914993,-1024058940,-2144439284,-1024062780,-2144963576,-1024062780,-1155632124,-58719850,-2146929560,292907516,-100663109,-1977710290,244067841,1156120972,11004161,-167701784,74712258,-236198518,1946403574,20965544,820577741,16705537,1946469110]},{"sector":5,"length":512,"data":[146994696,417923956,-1870730495,-1744770072,-783558517,-152841757,125044930,-2004382930,-164435199,125043906,-2037937362,-165221631,292815810,-1892775890,-2020921855,-1557266044,-588709488,-1885196800,-2020921855,-1557266046,-857144944,-1875711232,1971373302,403109396,57934848,-2147435799,67115022,-343605064,405176328,28900096,548425861,-924311322,365778944,-1342135575,1048587776,1946157455,512372297,-872545905,-2010185934,-788426946,-1215615261,1179517276,1946434094,1015033370,-386632448,-661978953,26255662,-1962880792,1948269763,840166168,1946172644,-1221906931,53346652,771842231,-1293417334,1048587776,1979449742,548469308,1558716646,-1862092800,904598989,146994832,11737717,1971373302,403109395,125044736,1582720,-2012877833,-1023403746,-99947688,551952560,-352301336,548469253,552083686,520616448,1499094623,-1328588709,-400497120,1048576015,1946615881,6660103,-301737798,1048587971,1979449742,787020297,-424759295,784595812,26099328,-100043268,-1342104344,-77273427,1364414659,-1809937618,1348592641,37026852,-1959894554,-503213554,-227193858,1499588184,1036212315,594870271,473336826,1191086848,-2110375098,-1962642944,989888566,1962940982,1726568452,-1996125697,-1023402954,-1908506578,292879361,-460103452,216042081,-2040404352,-1822300448,-7870269,11266298,1023107300,-99977730,9899648,954817312,1979333887,243333642,1527775383,-385930519,1354956801,388401914]},{"sector":6,"length":512,"pattern":0,"data":[1894023168,-992951088,-992951088,604018592,1960851975,-1761151434,796213248,9899648,-434065344,-387076064,116785188,1971323031,-389772779,116785176,1971323031,-1759084535,638121984,645922967,1480523927,1364247547,-2131098700,1325438758,2615376,-77535656,-165674823,805345030,-136180107,-495596290,9899648,-1878463616,9897718,-85101280,1371756633,1692715315,-85982552,817152857,-528080435,1912801853,51657989,521014646,-1274452806,841075977,639749604,2885262,567101876,-1172369890,163054366,-1205744347,-661782464,8404611,-99322624,-1560273224,446890112,1876736,8521415,788201534,25822919,-1943142400,771853326,26150598,-268388352,-23013234,-1901973761,196747009,1048587785,1979449742,113716813,13500818,-1811495122,771785217,771794081,11273863,10789678,10920238,-1375303890,-1499255296,22265344,1493074246,773354241,1965767808,80096774,787344169,1965636736,80096999,-1159599317,-360642146,78708736,833940179,567132210,1868787273,1667592818,1329864820,1702240339,1869181810,604834414]},{"sector":7,"length":512,"pattern":0,"data":[21781069,6,32,1,-1475346432,2142,30,1]},{"sector":8,"length":512,"data":[115802112,60693275,62202161,62202418,62233651,62202932,62203189,62203446,62205751,62203960,62204217,62209328,62209831,62217869,60718856,61538313,57233777,57235319,57230693,57234034,57234548,57235833,57234805,57231721,57233263,57233520,61571722,61549099,60688909,78641924,57229665,57234291,57230436,57230950,57231207,57231464,57231978,57232235,57232492,61554837,61547397,61543831,78642434,61554236,57236090,57235576,57230179,57235062,57229922,57233006,57232749,61553452,61553198,61562669,78642689,95449642,77068040,97067040,75284288,91160833,91161090,91161347,91161604,91161861,91162118,91162375,91162632,91162889,91160576,73457440,71233296,81540864,81541121,81541378,81538307,81540100,81540357,81540614,81537799,81539336,81539593,81539850,81539083,79769100,103284736,1529551642,23645,0,4718592,261,454756071,556860318,1077019573,590545845,607388597,624231349,1580598197,641139637,708314037,674825141,691012533,1596785589,725418933,2131231669,590750,1366361003,1467417449,1164247913,1383203689,1416889193,1501102953,1433731945,1231618921,1332675433,1349518185,2069562217,2103247787,168625067,-83623010,1096877231,1400046441,1147405161,1181090665,1197933417,1214776169,1248461673,1265304425,1282147177]},{"sector":9,"length":512,"data":[976946025,572982187,2120221611,-50199637,2086405295,1517945771,1484260201,1130562409,1450574697,1113719657,1315832681,1298989929,1009517417,1043202987,1060045739,-33487957,1915356335,-150469200,538969239,-1086323255,16843900,33686895,50529647,67372399,84215151,101057903,117900655,134743407,151586159,1391,-551549585,-284162976,922747966,939590876,956433628,755172572,872678620,889521372,906364124,721880284,822609116,839451868,856294620,806028508,772539612,1217,134678056,84213513,33685254,2013200387,1946125567,1979675903,-35073,539897886,589439250,639968279,421015858,337580816,756100886,-50648043,1381061456,102651734,-1912586056,76081368,-12787574,-555154571,-2116515069,-2147450909,58610939,-788276503,-152841757,930447556,1514045742,1946248705,386332206,661914624,1509110,1344304136,1174492094,22544001,976098419,-2114685660,-2130619154,1476483014,-385578450,777519875,22689476,-1979151578,387353281,1627334144,56551426,1946731254,-670853109,1940359726,47966466,1946469110,-379573243,-13499693,1946403574,1087340547,-511653238,1962488384,-372930046,619184827,79885827,-980811148,-402477335,-1024064745,-350915580,51570746,1946731254,1992589318,-167602967,661980354,1946403574,-372930046,-253230457,79885826,334187636,-167580696,108267714,-378092416,-1024064915,-2143849468,58000380,-2147327767,74778620,1005264560]}],[{"sector":1,"length":512,"data":[1964702848,-350507004,469532722,498074741,-58709525,-1341885141,1008790300,-1341885139,-384242913,-13499701,1946403574,1087340547,-511653238,1962488384,-372930046,-990510565,-163678848,1064568002,-1560248159,480444442,1896269312,-1058504704,857459970,33155520,1971373302,79885852,243277172,-402128872,116785809,1963458584,41806329,1954596086,405676038,-1976046848,403055328,137327872,838866982,-165418028,477397188,109494322,-1073086439,773852788,-466485225,-167662871,74744004,49009954,378064906,820576279,34007042,1946731254,79885897,113721716,305397874,1358954424,-883900365,1976761472,405176325,512392960,-538443751,146994689,-617406348,-1976641142,-2147304817,175439865,653658800,-1056833511,-1070398741,-385869406,11534815,1946469110,-1965346037,-1484116263,1005257415,1951071360,1325170712,-617409676,1946403574,550469635,-511653238,1962488352,-339375612,1392279574,116789621,1971322904,389447690,243302400,176160792,-2146798144,141885436,1951202432,15591683,-402554135,-1024065192,-2143914993,-1024058940,-2144439284,-1024062780,-2144963576,-1024062780,-1155632124,-58719898,-2146929560,292907516,-100663109,1511950638,244067841,1156120924,11004161,-167701784,74712258,-236198518,1946403574,20965544,820577741,16705537,1946469110,146994696,417923956,-1870730495,-1744770072,-783558517,-152841757,125044930,1619495726,-164435199,125043906,1585941294,-165221631]},{"sector":2,"length":512,"data":[292815810,1596885038,-2020921855,-1557266084,-588709536,1604464128,-2020921855,-1557266086,-857144992,-1875711232,1971373302,403109396,57934848,-2147435799,67115022,-343605064,405176328,28900096,548425861,-924311322,365778944,-1342135575,1048587776,1946157407,512372297,-872545953,-2010185934,-788439234,-1215615261,1179517274,1946434094,1015033370,-386632448,-661978953,23109934,-1962880792,1948269763,840166168,1946172644,-1221906931,53346650,771840695,-1293417334,1048587776,1979449694,548469308,1558716646,-1862092800,904598989,146994832,11737717,1971373302,403109395,125044736,1582720,-2012877833,-1023403746,-99947688,551952560,-352301336,548469253,552083686,520616448,1499094623,-1328588709,-400497120,1048576015,1946615881,6660103,-301737798,1048587971,1979449694,787020297,-424759295,784595812,22953600,-100043268,-1342104344,-77273427,1364414659,1679723310,1348592641,37026852,-1959894554,-503225842,-227193858,1499588184,1036212315,594870271,473336826,1191086848,-2110375098,-1962642944,989888566,1962940982,1726568452,-1996125697,-1023402954,1581154350,292879361,-460103452,216042081,-2040404352,-1822300448,-7870269,11266298,1023107300,-99977730,9899648,954817312,1979333887,243333642,1527775383,-385930519,1354956801,388401914,1894023168,-992951088,-992951088,604018592,1960851975,-1761151434,796213248,9899648,-434065344,-387076064,116785188,1971323031]},{"sector":3,"length":512,"pattern":0,"data":[-389772779,116785176,1971323031,-1759084535,638121984,645922967,1480523927,1364247547,-2131098700,1325438758,2615376,-77535656,-165674823,805345030,-136180107,-495596290,9899648,-1878463616,9897718,-85101280,1371756633,1692715315,-85982552,817152857,-528080435,1912801853,51657989,521014646,-1274465094,841075977,639749604,2885262,567101876,-1172369890,163054318,-1205744347,-661782464,8404611,-99322624,-1560273224,446890112,1876736,8521415,788201534,22677191,-1943142400,771841038,23004870,-268388352,-23013234,1587687167,-608559359,1048587784,1979449694,113716813,13500770,1678165806,771785217,771794081,11273863,10789678,10920238,-1375303890,-1499255296,22265344,1476297030,773354241,1965767808,80096774,787344169,1965636736,80096999,-1159599317,-360642194,78708736,833940179,567132210,1868787273,1667592818,1329864820,1702240339,1869181810,604834414]},{"sector":4,"length":512,"pattern":0,"data":[27744845,6,32,1,-789512192,2233,30,1]},{"sector":5,"length":512,"data":[121765888,66657051,68201777,68200498,68166451,68166708,68166965,68169526,68167223,68168248,68167737,68167984,68181805,68168509,66682632,67502089,63197553,63199095,63194469,63197810,63198324,63199609,63198581,63195497,63197039,63197296,104268289,104268803,66652685,84605700,63193441,63198067,63194212,63194726,63194983,63195240,63195754,63196011,63196268,70100388,67516987,70090887,84606210,67518012,63199866,63199352,63193955,63198838,63193698,63196782,63196525,67518252,67510574,67510823,84606465,101413470,83031816,103030816,81248064,97124609,97124866,97125123,97125380,97125637,97125894,97126151,97126408,97126665,97124352,79421216,77197072,87504640,87504897,87505154,87502083,87503876,87504133,87504390,87501575,87503112,87503369,87503626,87502859,85732876,109248512,723196419,1549622080,24379756,25035134,26018181,27132311,1869178209,2114933,1869178209,1329690997,1700855893,544567145,-1585274880,663790498,-1953922048,-1902607980,-2063557991,-1751806582,-2004680608,1586926476,-31840512,-15066342,1578852607,-15000293,255,0,83904512,1107296257,-115664121,270610691,272642564,270742276,270808068,270873860,274609668,270939908,271202308,271071492,271134724,274672900,271269124,-109115388,100665603]},{"sector":6,"length":512,"data":[-1001295612,-1000900861,-1002085117,-1001229821,-1001098237,-1000769277,-1001032445,-1001821949,-1001427197,-1001361405,108747523,108879108,-116781820,184222723,-1002348283,-1001164029,-1002150909,-1002019325,-1001953533,-1001887741,-1001756157,-1001690365,-1001624573,104479491,102901508,108945412,184353284,108813317,-1000703484,-1000835069,-1002216701,-1000966653,-1002282493,-1001492989,-1001558781,104606723,104738308,104804100,184418564,192031237,-218691578,606085124,-675332090,-905903868,-905838075,-905772283,-905706491,-905640699,-905574907,-905509115,-905443323,-905377531,-905969659,-1143005179,-1712386044,926351364,926417157,926482949,925696773,926155781,926221573,926287365,925566725,925960197,926025989,926091781,925895429,472779781,-2097151995,151521030,100992255,50463231,-8913152,-9175164,-9044108,520093558,304098864,388178465,841360676,270080049,370417427,355275055,1358756652,1448235347,-1207558569,-661782464,-1979414296,1979661536,64940291,-478029685,-75497345,-385647020,-472841254,-990452783,775386496,28655233,779354561,1509110,-165186556,134223622,-1102045068,-2126118573,1929468158,607792660,-293473163,-964624044,777519448,65602698,-1003595773,637646134,-1047918453,1513098,39911206,-167551256,192153794,785908632,47097738,-167584791,91489474,-739680212,-151047678,57934786,-1975464064,1088520394,41220402,-1142307446,52750338,1946469110]},{"sector":7,"length":512,"data":[-372930046,401081006,79885827,988484980,-167570712,108267714,-378092416,-1024064876,-165186300,41157570,-2014722678,49342466,1946469110,-401347764,-1024064789,-2147060728,1844016836,79885826,-58706060,-385649405,-58719648,-1341885177,-2143556834,74783484,854268848,1964768384,-350375932,737968169,481297525,758915307,531629173,-873916181,-151047678,57934786,-1975464064,1088520394,41220402,468305290,-2134575614,-1024049547,-1589677052,446890112,1876736,7407302,46196864,-1070392371,-167642647,477462724,1946469110,403603485,-1847064576,403109378,-109770752,-167608855,108298436,1584672,-527812629,1574434,638070645,-734920680,-990501909,840725632,419858112,1958742528,388898830,-370920960,-990510678,570717312,167963605,387352784,36759808,-167639320,1232341186,1946469110,1913046849,-1206766592,860946431,-2134159168,91607804,1582720,421431935,31451136,1946731254,-1965346016,-1886769447,-109051115,-1341491969,421983754,-339672576,-1564462334,-538378215,-167727103,192152770,-645211341,581405230,-2143556861,410274556,1951333504,-153406701,57934786,-1977561216,551649482,74774834,384550282,1968372864,403109393,175472640,1521280,403603584,-1073053696,-58717579,-2146929409,57953532,-385815063,1491599746,264435201,-998230412,214103577,-998232460,146994698,-998234508,79885834,-1044701580,1761378305,-58718092,-1156483735,788135936,28647049]},{"sector":8,"length":512,"data":[-1223783378,21293313,-402610199,-1024065262,-1979419644,-151917595,-1468791870,-855556120,19982597,-167706904,141821122,1946731254,18409731,-393183509,-1952972565,-472822824,-1024007215,772240392,28018571,-1024052501,772240388,27887499,-1024055573,772895747,28978824,-1484289234,-1146933759,14477569,29008430,-1517843666,-1146933759,13428993,-158321941,343244996,1574646,-385649660,243269818,-1207697384,149652736,1582720,-2063484677,-434065328,13166624,-384447144,11534498,-1170309074,1232338945,-1172403666,852229633,1049112319,-472841798,1555532590,776359425,443810874,3964974,-1209469835,785943296,-402539615,-1014300464,410263612,-466480149,225706044,1555508014,-1224528383,-1976696476,11724804,-1187086290,1014365185,-434065158,6088736,-846134600,-1875514603,1963508470,-167726310,326467780,1574646,-2146995192,-150988762,512230891,1489174553,-1325790485,-400497120,99287118,-434065158,2156576,1595869178,1532582494,548458328,266871014,1228832768,125044480,-1174379104,-1007811624,-1187086290,158727169,19851514,1692839600,-2144418821,-66995906,-386266763,-1380974308,-1006934810,777081680,29302411,609247716,-436062980,244002401,-18742851,1492284747,1532584422,-12729512,-98339585,1848971,1179057803,8533563,915080306,909836416,74776602,-10032808,914949513,784531484,28917376,-468617988,1642369888,-2146639734,-528064026,-1013751322,-83916824]},{"sector":9,"length":512,"pattern":0,"data":[-469718040,-29557920,-2131096971,536909582,-13047461,175503932,-1760657158,-379908096,32046890,-95370496,1517194,-797907840,-792407868,-1597714236,119799959,913629242,9897718,-2144373440,1073780494,551952560,619244976,-1761151488,360022016,417907850,-1761151488,158695424,9905792,-1759115016,-1759084544,-78102784,-1269739325,645986819,1347354775,1476405224,-1174707994,116793344,1966080151,-17309170,-2132642356,-2147444978,-158332693,536909574,1509617013,860996440,-1469782839,1509613570,-852446013,1038124577,91357962,1979913277,-1172369907,162793871,-466476595,-1910103603,-1275057146,505531721,1236934414,621393923,1085809101,-2082959872,32830,-1191570315,-2136801250,1745664,-956293981,1040220678,-953222400,111878,244067840,-970063433,113158,-1896873800,-89896,28942894,154581535,-1187086290,1299577857,-1123629266,771804673,29296327,-1590820734,-2027028316,771795974,771794083,771794593,11404935,10920750,1174492094,22609537,-2144462733,108342076,688178734,-2144408085,-411752132,721733166,-910499349,15368457,-754667264,842118378,1226952128,1919902574,1952671090,1397703712,1919252000,1852795251,2362634]}]],[[{"sector":1,"length":512,"pattern":0,"data":[21387853,6,32,1,9568256,2136,30,1]},{"sector":2,"length":512,"data":[115408896,60300059,61808945,61809202,61840435,61809716,61809973,61824566,61810231,61811256,61810745,61810992,61824813,61811517,60325640,61145097,56840561,56842103,56837477,56840818,56841332,56842617,56841589,56838505,56840047,56840304,61176667,61177181,60295693,78248708,56836449,56841075,56837220,56837734,56837991,56838248,56838762,56839019,56839276,61159995,61161511,61177379,78249218,61176924,56842874,56842360,56836963,56841846,56836706,56839790,56839533,61160492,61161006,61161263,78249473,95056426,76674824,96673824,74891072,90767617,90767874,90768131,90768388,90768645,90768902,90769159,90769416,90769673,90767360,73064224,70840080,81147648,81147905,81148162,81145091,81146884,81147141,81147398,81144583,81146120,81146377,81146634,81145867,79375884,102891520,0,0,17104968,115408896,60300059,61808945,61816882,61809459,61809716,61809973,61824566,61810231,61811256,61810745,61810992,61824813,61811517,60325640,61145097,56840561,56842103,56837477,56840818,56841332,56842617,56841589,56838505,56840047,56840304,61176667,61177181,60295693,78248708,56836449,56841075,56837220,56837734,56837991,56838248,56838762,56839019,56839276,61159995]},{"sector":3,"length":512,"data":[61153831,61177440,78249218,61176924,56842874,56842360,56836963,56841846,56836706,56839790,56839533,61160492,61161006,61161263,78249473,95056426,76674824,96673824,74891072,90767617,90767874,90768131,90768388,90768645,90768902,90769159,90769416,90769673,90767360,73064224,70840080,81147648,81147905,81148162,81145091,81146884,81147141,81147398,81144583,81146120,81146377,81146634,81145867,79375884,102891520,-16185337,-16382716,197121,-2063632385,1962898431,1996453375,807337983,554836014,605496098,825370149,319822104,789976095,739585297,1397816571,1465274961,1085802014,-388461056,-527825784,58064700,-1962680599,2145616344,1425768448,-622263426,-773598973,-2134575389,-2127677579,1610699838,-164727807,67114758,116795252,1946681367,1404981280,-25082367,343081300,1965308462,1424916980,1422295297,-1976674303,50587908,918826584,-1960443564,-1967027704,637540118,-402497281,-1024064674,-1744079864,-1976641533,-385716825,-1024064805,738554884,47442272,-1024000206,-2147257341,-896909105,843112832,-1979550471,45869509,-167566104,41157826,-1360411254,51898370,1946469110,-398791915,-1024064750,-2147060728,-1796639036,79885826,-1024055435,-1979550717,42461637,-167579416,1282671810,-337112085,146994690,-998242700,40757622,1946469110,66879543,1625883509,133988354,514851957,-58704917,-1341885158]},{"sector":4,"length":512,"data":[-2144146661,74783740,703274416,1965816960,-350441468,1965898784,-350244860,46917912,-1024000206,-2147257341,-896909105,843112832,-1979550471,35383749,1971373302,79885886,-2136916108,1745664,-973071197,-2147454714,-855457560,-373279973,-990510599,-165907072,494142658,1576576,43116552,1574646,-369527544,-990510467,537293952,-352315346,585140791,1962940422,405145647,-338415104,-2134575581,-1070457740,1640070,242532362,1519136,-1427512270,-2134575615,-719190924,-804650261,1513096,-402509591,-1024065018,-162958328,1098122434,7472839,-4713932,-1070378753,-58668208,-2147125806,2130712614,1646218,-167649304,544475330,-645211341,-1265661394,-425982,179309172,1648374,49004802,430096435,31451392,-1024065360,856388612,786008795,46245770,-58704917,-2145881014,326389500,-1024009421,-2147257341,-896917297,841015680,-1979419399,-2145981499,292901628,1574646,-2146798208,-2147477706,1576576,1975519872,-229366,-58718092,-385649588,-2098659091,22603777,1947190006,432308278,1946993398,180650030,1946731254,180650022,1946469110,23116574,1953037440,1778155528,12259701,-1993410048,771839006,22417036,-385792791,317194407,79885825,-443939724,-1024003605,-391613437,97321279,-402575127,-1024065282,-167218172,57936066,-352249623,-337080194,-661940224,-773598901,146994915,-1959917708,-352232825,79885874,-1959917708,-352233337,63108646,-2010246796]},{"sector":5,"length":512,"data":[771840302,22448011,22717230,771808489,771840418,22316939,22717230,-352269079,-990474190,-166431360,67115014,-1159134348,403603456,12059648,-2146899067,-83879898,1350894008,551952560,1476446440,-1561782835,771796992,22625920,776565760,22617738,-13448194,1497270318,786682113,22329227,976111182,773485572,1962949760,12052724,-1590765429,-790101670,1019448064,-350718944,1021587987,772633600,22329131,1421280046,76164609,771797736,22560384,-96700932,551952560,-1207935768,365793538,-158321173,443877570,-990510925,-166496896,134223878,645924724,-336134120,421431301,-346504448,548469258,1323835622,-100275456,551952560,-100654872,1583292167,1482381658,-434065201,1042464,4800128,-1610124281,-658898843,784592387,22560384,-100043268,-1342099736,-77273426,1048587971,1979449688,485030409,-424824831,1355021156,-1959898797,-469672418,-64728991,1642463796,1544457006,1274995201,-430378379,1482381665,-49725,-1946541196,-1962927050,994461438,1912635958,-2143909116,439761664,1476687104,-1979750679,473336069,-2144419072,-67020738,1625559412,-1973295981,-427815712,-421493151,-389835935,-386203769,1625555115,1979596027,243333642,1528823959,1023359209,-99977734,9899648,719936272,125183,-1963306813,-2147477722,-992972572,-992951088,-1751071536,973546496,-164203296,1073780486,243281781,-1337982825,-1340021216,2418925,9897718,-1978305152,1632452]},{"sector":6,"length":512,"pattern":0,"data":[9897718,-2146863744,-134179034,9905672,9905792,-1006938049,62148944,-1759084294,-397390080,-430440409,12188512,-1761151456,242561024,-855705630,243327605,-343932777,116822024,1965031575,1482291949,-919383613,44590308,-1017513248,567095476,171827334,1023767043,225837844,783949582,-855002103,-840682975,109979169,1236533292,236855757,48806431,-853210696,4241441,1048828046,1962934400,515439124,8430336,-1560274269,113704988,4063362,113716987,340,1443793966,113651201,-1207959207,-661721088,788528800,520181922,772330938,22560384,776828412,22808263,-953286450,-2113839610,-1532940800,109522432,-1557266260,-1590820700,-2027028314,771796486,-1107253597,-2126118573,1929467134,1015033368,772175147,-349633338,1015033581,786920745,-349502266,157858529,60033,-355269455,-1070452300,1850286541,1920102243,544498533,542330692,1936876918,175009641,9229]},{"sector":7,"length":512,"pattern":0,"data":[12474957,458758,32,2621439,1819279488,3080605,30,25231361,26607663,43122735,43712559,46989359,59310127,59899951,47]},{"sector":8,"length":512,"data":[1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568]},{"sector":9,"length":512,"pattern":0,"data":[329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,538968076,538976288,538976288,538976288,538976288,538976288,65312,134217728,1061109504,1061109567,1061109567,0,0,0,0,0,0,0,0,0,0,0,1547321600,591544652,1076256292,1111575598,65280,134217728,0,0,0,0,0,0,0,0,0,0,0,65280,134217728]}],[{"sector":1,"length":512,"data":[0,0,0,0,0,977338368,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1363521024,1033523717,1509949440,1948269763,1946762246,-1022739454,-1705894130,61,-850591816,1294658337,1329868115,1095508051,541869378,1735357008,544039282,1936876886,544108393,842018353,858731552,892874544,-852446208,786466337,1023410339,91357962,1979913277,71154190,162799374,856039885,-1261743936,-1105081075,-1968439168,-470994232,-1998017497,-502958593,-1877087240,49906510,2088772466,494221825,-377272762,752821250,-387698112,317391233,2062073907,117321217,585826306,-390057072,118358381,-486537537,1011789036,-387549664,-512426173,301957548,-1442614528,521074402,-424016114,-853888000,1948193,567087540,544538428,-1090457922,196674996,-1096486144,-1447100178,768256,117351667,113704963,95421867,147072,-1166642176,-1705900633,61,1376069818,15770,309760,567085748,-1963011352,167773454,839939273,442349,196737283,-215961600,-2143097942,830,1354378100,1033523717,-1174405120,179568644,-1595399731,84839166,1959332352,434405,2033983500,1849429364,-1494624139,-24778752,-1174363927,330563745,-1763106355,441856,-2147453505,830,-1178664076]},{"sector":2,"length":512,"data":[768256,775727788,-119382668,212608,-1170705152,-919404451,567098548,1908018803,277765,-1933966475,-27989755,1052039307,1572479437,-851332096,7191073,567088820,594870076,567087284,-1097843221,196673721,1060940800,708579700,-169734796,-1275027014,1008848151,-2145356289,574,117312885,-1480982526,1033523717,-1174405120,-1705900811,61,-385942039,12123615,1394724172,1465274960,-1073019362,431229045,-1057087027,-527768526,-1573991170,-1574043612,-1574043532,3014824,771775782,95233536,640024622,785943041,16001,1165099776,-851179080,-149786079,1947336898,75151895,-1157783063,-1679227734,998909,-843446667,-40834812,118365966,650010804,19578625,-361618995,-2133035610,1962999676,1595869175,1532516958,-1261139261,-1977496295,-854674192,-853953503,1975663137,-1261008187,-350106354,1225395676,1919902574,1952671090,1397703712,1919252000,1852795251,604441101,1631783437,1953459822,1111575584,1629506629,1952796192,1802661751,1769104416,168650102,72876039,1631783437,1953459822,1111575584,1629506629,1112888096,1684362323,544370464,1230197569,1684360775,1769104416,168650102,75235335,1850280461,1768710518,1919164516,543520361,1667592307,1667851881,1869182049,118099310,218409984,1850279690,1768710518,1751326820,1667330657,1936876916,544106784,1970040694,1814062445,1818583649,218418944,1819235850,543518069,1700946284,824713324,1751326769,1667330657]},{"sector":3,"length":512,"pattern":0,"data":[1936876916,1313153068,542262612,544370534,1701736302,2113321,168625399,1701602628,1663067508,1701999221,1981838446,1836412015,1634476133,543974754,1311725864,2113321,168625450,1914728270,544042863,1914728041,544501615,1701996900,1919906915,118099321,218452480,1869566986,1851878688,1768300665,544433516,1852141679,461325,168625523,1970040662,1763730797,1919164526,543520361,1931830053,-1912600051,-1073369851,94650629,544434464,538976288,538976288,2105376,1935763488,544173600,1700946284,108]},{"sector":4,"length":512,"pattern":0,"data":[6838861,3735580,12845088,59441151,-1475147776,7351,30,159776769,157614080,275513344,328269824,332791808,411435008,410451968,408813568,407830528,406192128,405209088,403570688,401801216,400031744,398262272,396492800,393019392,390856704,388235264,385941504,382337024,380895232,379256832,377487360,375848960,374013952,372178944,370409472,368640000,366804992,365166592,363331584,361693184,358219776,356450304,354222080,352321536,441712640,440074240,438304768,436666368,434831360,433192960,430964736,429522944,427884544,423821312,422051840,420151296,417660928,414515200,413073408,457244672,71434240,481821432,760741888,766115840]},{"sector":5,"length":512,"data":[-1957363712,1443256300,1381061406,-986833328,-1006557410,-1189147073,1556021250,19906048,561293043,-1090517831,733877020,531034881,1286873461,157558408,-947142004,756227117,-706150396,364388096,-320319488,46433040,771803113,19349188,378662,1301030400,12066306,-1077899536,653983742,1979268480,896317498,-1993465395,773092894,343410316,1824005902,343259685,364388813,773967157,342957705,1929808942,622180372,-854298438,-954327263,2047172614,-955847916,1879400454,891140116,520495565,118420363,-1189859137,-1527578560,347610894,773967157,326835849,2097581102,622114835,-854362694,890746913,-1993465395,773046302,331482764,-1171974216,567088053,-852158024,512306721,-1943137428,-1206686202,549070105,522308883,646459828,244058468,-1070398110,1532742284,1579113305,-1946460409,818109925,1291845637,-163232689,-326412862,508954199,1347572051,516238878,1069809959,45686542,6078208,-218026050,-1189448538,482279428,19643923,1965008627,-1950184423,320613831,-352320467,364388269,-991408128,46433039,-1070358293,1532744243,1579113305,-1946460409,1438866917,45673611,445638656,704873120,-754404892,-2096198944,65874435,-28931647,1912801853,51657989,280496758,-2132258816,46433039,33965699,-1962651905,529204830,537659274,695561276,1342193080,-16359797,262662199,184861827,-16026432,1996424822,222750724,1996443115,74907398,-352302872,243778,5290064]},{"sector":6,"length":512,"data":[106859344,1860712447,113541913,393527307,1342178232,1342198968,-16359797,425191479,184992899,-16026176,1996424822,143058948,1996425707,74907398,-1962656024,1438866917,918088843,433842177,-863582634,-2033843970,-973013134,16707718,16402119,1988544256,-956301057,16741510,-129579264,1586167808,-1977644282,1008733191,-1960938132,134153822,126492555,1882988556,1586171765,-1962410234,201820703,1953774624,112650,244967504,-1962752893,134153822,126492555,-2037895124,20774638,54264946,28838518,2028490752,46433038,-16359797,-2145416441,91568703,-16359797,106859271,1065361291,-1956088788,939460190,-2095467800,-2037841212,1346240374,1027568640,141820036,-9009465,401276928,-17791350,-17791234,-259267542,268190406,-1996274015,-1946236282,529204830,1946173312,106859302,1065361291,-1961069524,134153822,-2037717525,-2030108944,-466944272,1120333963,1151406844,-1949504765,529204830,1962950528,9955587,-1962516853,742359071,179833460,-722972672,46433037,-16359797,106859271,1065361291,-1957268436,529204830,764938122,1183383600,-259618054,-259588354,-1947981058,-62732560,-96040165,1946158653,539994,1187452532,-33554182,-1963003762,721350790,-1997501468,283901026,-17791350,-17791234,-259267542,821838534,-16359797,106859271,1065361291,-1961593856,529204830,1949056896,702504,223471696,-1979530109,83816070,6005296,-1979656983,-16846714,721350790]},{"sector":7,"length":512,"data":[-957314076,-348980158,106859455,1586169855,-1977644282,1008733191,-960072336,33475718,-1098855957,1946222450,11135235,-19364153,1183538946,-628717064,2022084094,-528053761,-226062850,-494499330,-427389442,-420982530,46433047,-18053493,-18446711,-18446707,-662270640,-2037559042,-397345064,-998041941,-662271226,1954974206,-625049345,1215628286,-17908096,-1206029055,-1924136866,1358919814,-2095597592,-1073019708,28312693,-1070464277,-9271672,-9257344,-1206029056,-1924136872,1358919814,-2095606808,-1073019708,28312693,-1070464277,-9271672,-2080880897,16741566,1307116405,1925087487,1249116415,-17777024,-951880192,50256006,-129594530,-628717240,-259618050,1222912766,-19102071,-1979955571,-1912676218,1358882438,-2095633176,-2037579068,-1924071706,1358878854,-19364211,427092048,-385432445,149422291,-796489220,-761886210,1958874110,1678165611,-11383799,872337590,-1202696000,-1903558655,-315949330,1356911433,-2096142360,1491602116,-1073732340,-388821327,-19495287,-17922422,-2042895318,813104854,-1974419405,721350278,1340625124,79987467,477413387,-1996269919,-1946235258,-293172520,-2010118914,-1224801465,-1444348210,46433048,-19626298,-968299776,16701830,-19614069,16770689,-1996733814,-1963009914,721350278,-2037823260,-2037514530,-1924071720,1358878854,1342183352,-2095512856,-2030696764,1972436697,178186,189917264,-33373053,-1963010938,956231814,1929303174,-255950674,779485438]},{"sector":8,"length":512,"data":[-8995197,-1961397248,-1963013474,83816070,55019568,-20269313,-2095567896,2122515140,175374586,55064319,-2095571992,-1098906940,1946222284,1678165567,-2037691383,-2046034224,192282322,-1980122136,-1979789178,-77162,-77130,872337590,-2037755712,-466944308,112720,-17920374,-750129878,1239961824,180650766,1575324510,-326412861,-402639688,1187386785,1187409628,1187409634,1187446732,1586168014,-2145416442,58010687,-1962837015,126551646,-1981397367,-661919162,1033373578,57999427,2113977833,20769027,1946170429,3685645,1111314804,-379423744,45613380,1656246272,1996443648,345762026,-1996045181,1187440710,2122514636,175374568,1342180024,-2096478488,1586168516,-2145416442,57999423,-1962862615,529204830,1965834112,17492227,-16359797,-1193284857,-1202716670,-11534235,1390996086,113541908,-337099127,-362902720,-1960833152,1333848670,79175681,1756909568,1996443648,338684138,-1996045181,-1072961466,79204468,1840795648,1996443648,337111274,-1996045181,-1072961466,2045313908,-867776769,-9246462,-2132124021,1586176015,21987562,309280,7518288,-361300144,-2095847192,1183385284,1975520232,-867777017,-12130047,1342178488,1342207928,-387287297,-998042679,-398030586,57982987,-956355607,-385627066,1586233124,537886954,-2132124021,-1960836785,1333848670,1586176002,55541994,309280,8173648,-361300144,-2095870744,1183385284,-867776792,-17897209,1946176829,6438341]},{"sector":9,"length":512,"data":[686359413,6503935,1743324021,7159295,1187491956,-369098776,1586233036,-2145416442,1249116223,-1962516853,742359071,1586173557,-1962410234,201820703,-599357408,242512444,175402044,1342180024,-2096566552,1586168516,-1962410234,4161567,1586173044,-2145416442,1433676863,1342180024,-2096574744,2122318532,477495244,267208390,1357661837,1357661837,1342181560,-2095688984,1183450820,-867792660,-1731443062,155773008,184730755,-1207274048,-397410294,-998045549,-595689470,-971016850,-973014458,-352263098,106859350,529205247,537659274,-1670024132,30295750,1048617195,1962934365,1030154,140372048,-2147302269,1946274942,-864124922,-955812608,315974,1187448299,-2147481390,1970068606,-96025078,-465123839,-972494078,-956302778,-2130779066,1970199678,25225475,-1980307480,1451875910,-314128672,-330906059,-733573859,-330920624,-330920624,300017744,-1962490749,-1070869418,-2081536509,1183383762,-27883012,1178190475,-970361632,-970592954,-1960973242,1183440966,338737370,-1996488518,1183707718,1183666388,1183666412,-1595387668,113541905,-1948367221,817487958,47892,-763117309,-62486272,-989964663,-1977156514,1183318599,16312784,1859944064,-118946955,-96040448,-2133834240,2080493694,-797016058,-1206616525,-397410175,-998042492,-599341566,-834222482,-1002116352,1183513694,1200105168,-60898302,652494474,-1005435136,1183513694,1191192314,-60898270,652494474,-969783552,-1979650746,1183370310]}]],[[{"sector":1,"length":512,"data":[-330920468,-330920624,1095760,348776528,-2147040125,1946275454,8775939,15222471,-1207047424,-397410138,-998042596,-398000382,970081931,-344135610,1342222776,-2095839256,1187381956,2122326242,1282701794,1860337280,2122335860,108360412,55588607,922682603,-504888498,46433043,1342422712,-2096018968,1187381956,1183647725,1183666412,333992172,79987476,216811146,-498694112,1342223288,-2095860760,-1360330044,1860337280,-1506443,-529072130,870217471,-1202696000,-397410272,-443872760,-1957313699,2799852,1443980520,14173894,131745479,-599341312,1187381249,1187407332,1586174716,-1977644282,1008733191,-1960938141,134153822,126492555,1866211340,1586171765,-1962410234,201820703,1953315872,112650,103934032,-1962752893,134153822,126492555,3157400,1040074377,259260417,1946157629,112650,101574736,-16595837,-588710282,46433029,175489035,1342177720,-2096761112,1586168516,-1962410234,977240095,1586169204,-1961885946,134153822,954742783,46433041,1038239369,57999480,2113971689,16902403,1962940477,10938627,-873921666,736512,205328500,-385649408,255656070,-380341248,1187446994,-1979683102,522517574,620512904,-2013000453,1187511366,-1207958820,-1924136950,-11475386,-538385802,113541904,-1981397363,1586228294,-2145416442,57999423,-1962875159,529204830,1965834112,14280963,-16359797,-941626617,9888326,620512906,-2011165665,-1209271226,753026759,-62486015]},{"sector":2,"length":512,"data":[1074536228,1187507691,-1979557662,522517574,-538222580,-1327348025,-62486012,-2146689244,1187500523,-1979096862,522517574,-1007968244,-1058912569,-62485998,-1072947420,1187493355,-1977253662,522517574,-1477713908,1946164797,3161511,1010686580,1034646528,-562823072,1962962493,-13375229,1342179000,-2096837912,988349124,39337471,478122356,1962972733,-9901821,1946218557,19676569,1827210101,31473151,-789865868,1946402877,78658977,1961427829,157302271,2062091125,314588671,-2143452300,-343116763,106859439,1065361291,-385649408,1586168190,-2145416442,175385663,1342180024,-2096864536,1586168516,-1962410234,742359071,1586181492,-1977644282,-2011165689,1033430086,2104754277,1946185277,7290129,179858036,820531200,46433028,1183451371,-1998117636,1586232390,-1962410234,529204830,1962950528,18671875,-1962516853,742359071,179833460,15224832,46433028,-16359797,-2145416441,1165241407,-1962516853,-1744336353,-1996476371,121494086,1025733632,2121531400,1342180024,-2096901400,485163716,620512906,-351793945,-62485858,403498788,1183487467,217851132,-62486526,-16359797,106859271,1065361291,-385649408,1586167978,-2145416442,175385663,1342180024,-2096918808,1586168516,-1962410234,742359071,1586182772,-1977644282,808294407,-599357184,1946157373,146714,179855220,1625837568,46433027,1183453675,217851132,-1969296637,-81462202,-1946401144,134153822,-1962516853,4161567,1586185844]},{"sector":3,"length":512,"data":[-2145416442,175385663,1342180024,-2096944408,1586168516,-1962410234,742359071,1586177652,-1977644282,1008733191,-972065424,-352200634,-62485997,67959588,179876587,-118992896,46433026,15681222,-1996732790,1183575622,1183402238,-297366028,-297366192,1357904,276162640,-1593391997,1183384396,-1965519914,805633606,-2130491512,78701182,62391677,-1207702784,1183383556,-1961563166,1579931230,-327775262,-1964226817,172460036,-2082320641,2130764414,-698446874,-1998305654,1586170695,-632911146,1200107524,-698447091,81544842,256346160,-1980601624,1451875910,-662798112,186676224,-402033214,1183445288,-531199522,-959029621,-9432761,-402437066,-998043816,-1961432318,1204213342,922689552,1172833100,46433039,157550278,-754732724,1183579750,-532280354,1996429172,-562626592,-1974419405,1352194118,-385976577,-998046320,-443851254,-1957313699,1751276,-1962088216,529204830,537659274,511011900,-16359797,-1977644281,1008733191,-1961921168,134153822,126492555,1950097420,28838516,-857190400,46433025,-16359797,-1977644281,808294407,-62486272,2080375101,212229,28838526,-1461170176,46433025,-16359797,-2145416441,91503167,-16359797,106859279,529205247,1950171008,702474,25290832,-1962752893,134153822,126492555,1664884748,1586175605,-1962410234,201820703,1970224160,106859279,529205247,537659274,175402300,1342177720,-2097067288,1586168516,-1962410234,-1744336353,-1996476371]},{"sector":4,"length":512,"data":[20840006,1024422912,175374338,1342177720,-2097076504,-1729625404,234890497,199902857,-1207274048,-397410286,-998047473,-25755902,-2097094936,-1073020220,330828405,-118992896,46433024,1342177720,-386107649,-998047618,-273750012,-1981397367,1183574102,1317771772,-396456986,-636237821,-1173114184,-939327488,-2097097853,-612171287,-1950118400,-28931367,-2010724098,55877895,-1947449719,-62485800,1200107524,-329348349,83773066,390563888,-387156225,-998044256,112642,1241271947,1183441107,-394854404,-1192855809,860880897,1996443840,66251004,-1017256565,1475119957,1053044230,1183518989,65065220,108954616,638809089,-1207878269,460652544,378662,16758784,-2094657045,12058685,638088448,67015,117505976,1575324511,263875,-326413056,-1003616681,-1961806530,-783809466,653788128,-1207943805,57999615,117440696,1575324511,262339,-326413056,-488062925,73304842,-1207966767,-102235330,46433036,-1962071576,1438866917,-1070338933,-2096446232,1946158206,1513553670,-15602941,-402433994,-998044460,56271106,1342179333,-1962096664,1438866917,-1070338933,-351627032,105286154,192153400,-1962653953,1065354334,-1947306752,1065354334,-1962642432,855829443,1575324608,-326412861,-402649416,1183648361,297292018,-1243066368,79987458,1946157481,1161228,-10098608,-352140157,-230257917,-1017256565,-1192457387,988282908,-398014710,1187447824,-956301078,64582,117735040,1187457653]},{"sector":5,"length":512,"data":[-956301084,-1342118330,652500676,-968161338,-1001914810,-2144934818,1937066815,33310407,1560724992,1743454208,14960327,-431569152,1589952512,1065428708,712354389,317540038,284051142,1357661837,1357661837,1342181560,-2096331032,2122319556,175440110,33310407,1560724992,2122514432,594870524,14960327,-431569152,1589950464,130426596,-28916149,-463551417,1262452774,1187448181,-2097151492,1963064446,71731823,2092960664,81172,37557886,1024097280,1568538627,1946158909,-96024737,99287040,284837575,-396442624,621251366,1175191503,126428922,-1744550262,-1913895287,-1924076474,-1202656186,-397410288,-998044681,-314128890,-297351678,-230242560,1183645696,1183666412,280514796,-655863808,113541899,-335788405,-96024818,-1377107936,821708487,-1951995136,12803557,1162104653,622115066,2065089838,-1205744365,-986831593,-854343658,622704673,1880540462,-1205744365,-661721088,-115072,-1206618631,-986831595,-854298346,627882017,1981203758,-1205744364,-986831591,-854365162,332266273,0,-268373852,12776960,15335659,1342177280,860888732,-2133291328,2130997542,2056920920,1342177299,-1900006626,1896281816,1478459396,-990508939,1476818048,-863971861,-817609600,0,12776960,-1024065301,-369038592,0,1344183376,-661733325,74524288,-1709221761,5055,-1070391728,116840590,528483441,-167217832,108265924,-2133464232,1145307596,33325263,-1867250827,1347572687]},{"sector":6,"length":512,"data":[51622587,394931930,1946352768,-855526389,-2134575596,216732276,348980148,-2141133696,74735868,48961972,-1973710668,-816096573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,59904,-1957363712,-1957210388,-1574042554,1854608544,4623110,-1962778997,1451951182,141986566,1426751115,-855577608,1183407360,39749888,-1996206455,1988691542,176064776,1583306908,-1957313699,2275564,1443324136,117196487,-28915964,1183449088,71145476,2115335168,92924163,2097152317,93776131,2113929789,93251843,556672,1187389812,1183514630,206998282,-1156337479,-1056768000,-1912548733,651725762,1175062410,-1960842492,1451952710,330348812,50331835,13796289,-661929330,-1979217370,-772406194,1183367458,172395500,-1190373749,12260272,-2084502784,-1030881070,1183504523,126363372,-1962260853,-1195832234,47891,-763117309,66816,-1912548733,-1193767998,-2010775493,-330921465,474520,350815094,-1816132863,-509083858,172395286,-1190373749,12260279,-2084502784,-1030881070,-970532725,1183515399,206998282,-1156335431,-1056768000,-1912548733,651725762,-378271802,1183514935,206998282,-1156335687,-1056768000,-1912548733,651725762,-1962866746,1451952710,330873100,50331835,13796289,-661929330,1963443750,-1962867991,1451952710,330807564,50331835,13796289]},{"sector":7,"length":512,"data":[-661929330,34063910,1183552747,206998282,-1156335687,-1056768000,-1912548733,651725762,-352188474,172395438,-1190373749,12260279,-2084502784,-1030881070,-970532725,1575551239,172395519,-1190373749,12260279,-2084502784,-1030881070,-970532725,1994982151,172395519,-1190373749,12260279,-2084502784,-1030881070,-970532725,1183514631,206998282,-1156335431,-1056768000,-1912548733,651725762,-336918586,172395360,-1190373749,12260279,-2084502784,-1030881070,-970532725,1183514631,206998282,-1156335431,-1056768000,-1912548733,651725762,-1947531322,1451952710,47884,-763117309,66816,-1912548733,651725762,-352319546,-2062118640,-283788779,622201365,1561739542,108953622,-1960610816,1451952710,330348812,50331835,13796289,-2097151739,-1030881070,-1977165685,71698439,1183525099,206998282,-1156337479,-1056768000,83939971,-763166719,-1950183936,126494424,-167489910,-2000608559,1183515718,206998282,-1156337479,-1056768000,83939971,-763166719,-1950183936,71731928,-1962440666,1451952710,331200780,50331835,13796289,-2097151739,-1030881070,96000139,126363136,-1744550262,1979713341,15526147,781434883,414885887,-1962260853,-1128723370,47891,-763117309,-1950183936,130426584,-1955927293,1451952710,331135244,50331835,13796289,-661929330,17286694,1183545323,206998282,-1156334407,-1056768000,-1912548733,651725762,-352188474,172395316,-1190373749,12260284,-2084502784,-1030881070,-970532725]},{"sector":8,"length":512,"data":[1105920519,-1962260853,-1128723370,47891,-763117309,-1950183936,130426584,172395265,-1190373749,12260285,29485312,-1962260853,-1128723370,47891,-763117309,-1950183936,130426584,172395267,-1190373749,12260285,30337280,-1962260853,-1128723370,47891,-763117309,-1950183936,130426584,172395264,-1190373749,12260285,31123712,-1962260853,-1128723370,47891,-763117309,-1950183936,130426584,172395264,-1190373749,12260285,-2084502784,-1030881070,-970532725,1183574791,206998282,-385875781,410779896,397612952,401151950,405542916,-1209460652,108953601,-1977322496,-1315437498,-1946627325,1586170446,326416908,50331838,13861834,-645151858,168790566,-1977291832,-1315437498,-134687997,172919760,-1173594485,12456820,-2083912960,-1014103853,-1977165429,-2000150001,1183515726,206998282,-1156352839,-1056768000,-1912548733,-1965519934,-2010774458,172395271,-1190373749,12260216,-2084502784,17105106,13796096,-661929330,637535672,1183451016,-1072982012,20780404,1029796864,57999362,1023446761,57999363,-1962886423,1451952710,326613260,50331835,13796289,-661929330,509478,-1962260853,2025393238,47891,-763117309,-1950183936,130426584,172395499,-1156819317,-1056768000,83939971,-763166719,-1950183936,130426584,12380416,-1962260853,2008616022,47891,-763117309,-1950183936,130426584,172395265,-1190373749,12260216,-2084502784,-1030881070,-970532725,-2014743545,172395264]},{"sector":9,"length":512,"data":[-1190373749,12260215,-2084502784,-1030881070,-970532725,1183514887,206998282,-1156351815,-1056768000,-1912548733,651725762,-344651834,172395347,-1190373749,12260215,-2084502784,-1030881070,-970532725,1183514631,206998282,-1156351815,-1056768000,-1912548733,651725762,-336918586,539935,1625883509,1064446,1491665781,2113022,347605620,-1192734720,46433270,157564544,-385649615,1654718598,205928709,347605620,-1662496768,46433270,-1962581855,120261214,-1996372864,-1181095354,-101253104,74764811,283788931,-1962929991,-140907962,-364475911,54408959,-2096924696,2057372356,-532248317,752764615,-280574464,-564214711,-1995994330,1183703622,1183666402,1183666414,552095982,113541888,837764806,-1981135221,1183708230,1183666414,-2081926930,79987459,1575324510,-326412861,-1960946089,92996734,-1962779253,1435173965,141921030,-1962248705,93194366,1594252686,509026765,-1912409153,142511071,1167000972,108956422,1569260937,72190210,-1996073591,1167001717,855929354,-402068490,29233011,-1996125440,1579093109,1438866783,1448602763,1317734174,-1959795960,75402201,-1070336117,-218103879,-638107218,41339707,-24392821,-217680245,-12285274,1161480499,1946515455,48972037,-1047801353,-1017290914,-2081649835,1448543468,855930507,-1159178497,46433030,604390538,1963080707,105182780,-1978698488,-1952970940,-152841768,17063559,76228468,-1996209109,-1072956346,-11527298,1149895796,-397371385]}],[{"sector":1,"length":512,"data":[-998046290,-62506234,1283458932,-4251642,71601151,1153893513,-1962934270,-1956684089,1505975781,-668214133,507185778,74580848,-503323765,1426188521,1586228363,106925060,1334577036,72846338,-1957313699,-1957275668,2123039862,-1224270330,-1252347071,-1964037535,168135204,169899236,1176270016,1927756359,2011380230,988086786,973501127,33716163,1977629381,987294470,1913287904,112645,-4717589,1566531327,232319427,1475119957,-1962822826,1183516750,-2083376380,24447737,108956569,-1090320663,915079923,-148176894,268500609,12452722,-678495728,158254209,-385649669,-461307575,-1992884226,906268710,76424841,78759563,910745811,-1274770269,908184880,1006863011,506098434,240173107,487176735,567085492,1397703883,808333856,544370464,1702125932,1701978226,1919513969,168649829,-1980300508,-1946156490,-136434749,-850742053,512505377,915080058,371064876,-852164424,512308769,-1942616952,235178502,620804127,-853657414,244004385,585303342,805750070,869960709,520042203,57869612,906022121,87295685,62642828,520041984,520553772,87605244,722038969,-205507633,118888106,98035743,-1207958341,567100416,-1024062862,-2147126144,1073979535,-387155637,1474822906,87603970,87620481,-11335565,1128487703,112849643,-1092539648,-57998460,-1527576810,855730920,-475010835,10283088,1951599117,543908705,1919252079,2003790950,168626701,1769367876,1696621924,1919906418]},{"sector":2,"length":512,"data":[168626701,1634692166,1735289204,1768910880,1847620718,1814066287,1701077359,-1324741276,501266962,521071922,-1275067717,371313984,16758815,36759632,-222687055,-1310332131,503495197,-1957306645,116163564,-960604585,988304899,46433028,1183709323,1996443654,1172854276,113541893,1459242633,77719639,-1962621821,1600059974,-1017256565,-2081649835,229438,385811572,1996424064,30992388,-1017256565,1475119957,75402070,1569392011,72190722,-1962519157,2106263669,1461832970,-1996063093,39684357,-1996206711,1971914325,172330760,-164428686,283642091,114188,1971914123,1566531084,-326412861,-326937001,-129579512,71732173,-956742008,-1932789178,1183708758,-196703752,-1962508661,39684869,-1962652277,1972045397,175999752,216892245,1560305407,142510935,1569260937,72190210,-1996073591,1167001717,855929354,-402068490,29232043,-1996125440,-998044555,1566531080,-326412861,1460202627,-2009691306,-1206392061,-1202716660,-11533086,-65279948,184992899,-2096597824,1015218886,-2082179840,963903548,-947700597,-28915956,92930048,1183422535,-1977816070,-12740603,839152896,-1979520064,-27358459,-1996601601,-16539513,-2092434866,1962998398,313310,-1956684288,1472421349,172919638,-1962654069,2123040342,119428872,-1073048580,-108850316,185496842,-1341490734,-604526035,-150941053,-1829270566,-1072967117,-235470220,-1829636205,805622663,41302332,-1951783164,1975716802,1325762786,-2012903764]},{"sector":3,"length":512,"data":[995098436,1492480759,-1017290914,82839183,58334862,-1047803597,-108271221,741772105,1962281728,-221868536,1974355374,1083655674,-41157084,-989600303,-420995306,-1949332485,-1946352644,-1912138004,1240871902,2122911203,-1404746496,1975519914,-1980505350,521535566,59254409,82847487,-1142125739,-75430600,141755704,1528299347,-219462845,167964904,-2146798364,1962935422,71747076,382017278,12059784,522308901,86904459,45811683,740228864,71731973,567102644,82970255,58334862,-2135029994,865643520,1048585938,1912800130,109989989,-1070399444,-772290421,-1359808373,1963276326,63407097,-772290421,-1977157749,977356549,1007973600,1007186978,1006924809,1491825952,-2118252778,1328278272,-15991253,-812912268,-1014277310,50708739,-121600,-57941973,371131934,-1331367161,-880039392,8502815,-930410773,-31194108,-57941973,-1423948872,-1047812877,385125290,-594849761,-1431503221,1031061514,527770172,-2079916202,-1073042429,574369396,2105542517,74800383,-303322545,-12204473,-388633856,-797704137,-12167602,-1409055738,1958742698,2484232,-504629899,1274317738,1945320267,126332168,-335657847,199003122,-16615982,-2044294905,-232325373,1946762244,-1021297662,-1947432107,-2013920162,1948255136,1107474446,-779368141,57876941,-167180567,-2147245945,-2115435659,139365120,503731851,-54512889,-259303849,1709439627,-230683976,1362261422,-903098485,-854531255,-268198879,-1274776675]},{"sector":4,"length":512,"data":[189393673,1177515200,-1174404423,1085539572,74654157,887818676,443858955,-338195623,-812953147,567134763,-1645214820,162792563,-1073014037,-2013915531,1950352288,106859275,1964654464,82573315,470333689,-1962773927,-379625786,1317734523,106334984,567099572,162792563,-337383957,-411713525,60852214,-1962249152,440369370,-336067723,146340310,1439755036,1586228363,107446276,1438866895,-1957237621,-25099146,1014301638,201737462,1149908597,-661940217,-2013862959,1963000926,71616295,1149896036,-661940217,-2017008687,-956234658,1795391494,38061868,1149960704,-1207662332,887816193,64945793,1156983925,645204998,-1744354166,-472786805,73304054,-1206422271,-397409792,-998045261,71600386,108314635,134630528,-1070351893,1575324510,-326412861,108432214,294531,-25080716,628425670,-1744354166,153086032,184730755,1444312256,-2080865816,1149895364,-661940217,-2017008687,-352320418,-553746150,1444640003,-2080872984,1962869444,155445252,-2147302269,871827044,-1996191296,-1956772796,1438866917,861334667,3521014,-1392712654,-69017550,-27921280,1962947854,874940422,168946432,-1173523228,45809718,1685760,567099572,899858482,-443851264,-1957313699,23247084,1475899624,108432214,-22903155,-1962589021,1017316422,138840837,855982243,89301952,-2147135325,57999420,-2147399191,57943356,-956232983,17123846,-1547685120,950207816,88908549,-1559937373,983762242,89563909]},{"sector":5,"length":512,"data":[-955950941,537216518,-2144146688,108342588,89655039,1015031787,-15960789,-955955194,342534,-2145981696,225779772,88620675,-16091904,-351979002,1443299076,76170757,132665496,46433030,-1082802165,89045078,93382736,-1962621821,775717104,117379701,1447429442,1342524088,-2096793112,-259324732,1970027648,1040631559,1174405637,1962949760,10545411,-1986526070,1040096902,175374405,1946175293,5782789,117377397,-2038233800,-1960771938,771661446,356319331,54425344,-13724736,-14356057,-955954170,349702,702464,8906832,-352140157,571472,280556267,871230208,-1595387712,-1192629503,-169148415,-23152897,-352182552,-335639589,-1155211455,-467344348,-316349404,-316347100,-316347100,-316347100,-316355292,-316347100,-316352732,-316360924,-769331932,1379828516,91488261,-351973215,-1494661600,624787710,-2142828940,-176881603,-970209397,518542928,79987459,-1964378229,-1956684034,1438866917,414772363,-154408960,2122536535,74713604,88868607,87965315,-1961462784,-1962590178,39291655,-1980217719,109312598,-352058048,1279165225,276037637,88088203,1183385483,-96024584,233504768,88088203,-1986459765,1451882566,1074168826,1048773125,1946158422,-129594611,1962558987,71731973,-1070398741,-1962584925,-2096806858,347198,2122525301,612172026,168066691,80090997,1183532589,-94991368,-763111177,-1982138624,1451882566,-163133446,99287041,16139975,-2080535808]},{"sector":6,"length":512,"data":[1996429551,1996445444,-126418950,-2096810776,1048774852,1946158402,-689416416,46433030,88739467,1317652523,-972755970,-1958334460,1325399622,2143292414,-2012902670,943620868,125042693,58483004,1176513664,-8552377,-2082048768,347198,1218516085,973474565,-2096401403,1962997374,112645,-1070398741,39184464,1577239683,1575324511,-326412861,-402650952,1448605085,88475335,2122514464,276037636,-1593835074,109249856,-1996356288,871103558,88088203,1183385483,1074168828,-1073020411,1187448181,-16451844,854129782,46433030,1048834187,1946158402,1241921802,-1962642683,-1962587594,721767998,1480492030,125108229,17754199,1443021955,-386107649,-998047379,1480491780,125042693,16181335,1577239683,1575324511,-326412861,-402652488,1084355857,-28931835,88227459,-955878144,101009926,943128320,1245118213,74907397,88356607,-385976577,-998046761,75399946,-2096728985,1967588478,1446937368,292880389,88751747,-16092160,-402308042,-998046787,1446937346,292814853,88751747,-16091904,-402308042,-998046801,1074168578,113707013,1364,184895649,1946499590,-25755886,-2096912664,-1073020220,28837236,855829248,619204800,1575324417,-326412861,1927856179,1048794868,1962935634,1008634680,38797061,163715,1183453564,1008634628,-13137147,704940039,-15864860,-16434122,1793590390,79987459,-16353984,-351972858,1342635780,-443851259,-1957313699,178412,1475618024]},{"sector":7,"length":512,"data":[1379828566,1366622213,184841867,-347439370,1008634675,38797061,163715,1184895356,1008634629,-12612859,705005575,-15799324,-16434122,-402307530,-998046959,74792964,89261823,189712011,-2084143168,348734,1183516533,1342570756,-1956684283,1438866917,45673611,-205789184,1988843095,108956420,89276035,-347310848,1008634677,38797061,163715,76157564,87826059,134156171,126409099,250340394,87832319,1352139914,-2096977688,1967129796,1376190212,-947173883,1975520079,1379828676,125108229,17188491,1577406470,1575324511,-326412861,-402650440,1448604497,88356491,1183432755,-129594884,89013899,67889238,-1996307325,-131335610,-1593541077,61932884,-131335981,89669251,-2146077440,276114748,88489603,-1408666320,-1796714344,46433278,88489603,185300016,-2096660737,350270,2122520948,108265476,-386382081,1048772702,1946158420,-62456058,-2097123352,350270,-396941707,-997982552,75399938,-2096532480,1962997886,3467267,89407107,-2096532480,1962998910,4384771,1459255039,-2080446232,1048773828,1946158424,1174849293,1459625989,-2080478232,1599996612,-1017256565,871140181,-225974080,88620675,-1341885440,-1341986005,-397371360,-443810309,-1957313699,-390056980,817427049,-387428352,46433277,89407107,-2095745776,342078,1487930484,2024801003,-857190248,46433277,-1017256565,-1192457387,921174018,-1957275662,1015023222,-1961986774,-2096807906,33898502]},{"sector":8,"length":512,"data":[-347717749,-2130758854,863776828,2134457472,1111374126,-2146732795,108343356,88475335,-1733558224,-506343541,-821829167,-939269679,-1959728765,809271545,1015022972,-1948025287,1065944158,1600046731,-1017256565,-1192457387,-823656446,-37857551,-1978799356,71710724,28837237,1174989568,1962949760,1589654510,-1017256565,1458342741,74877783,-1715457028,1017961099,1023112224,1022850057,74751021,24455996,2000239788,1915759647,-773598949,-1949594670,-773598726,-773598766,332989394,-2082995241,-588578606,125148563,-763111177,1608185600,1575324510,856191683,1575324608,-402230333,-4718579,1575324671,-387697981,-1564278783,-469105782,1048585077,1912800130,1931623437,1914715149,-351948795,322736135,330302070,-687537477,58499992,-339440957,-326412809,-1946998552,1438866917,518581387,1575324659,-326412861,-1947003672,1438866917,183037067,1575324659,-326412861,-1947008792,1438866917,11791499,1442079977,-326898549,-1957275900,1149896310,-2086037498,-167349248,1950352964,-18426,-167716119,1946224196,105676806,-2131825888,-2147350964,871302756,38046144,2122971275,105182974,-1978698488,-1952970940,-152841768,17063559,1015754868,184843307,1460829951,-1979419393,1352140612,-2081030680,1183385284,71601150,-956004032,33489476,-1979425653,126354502,1156999915,1316291590,63372929,1149906293,-397371385,-998047639,1975520002,-2147039435,-953390333,90440772,-1744354166,-472786805,73304006]},{"sector":9,"length":512,"data":[1694811905,-1195840763,-397409792,-998047585,71600386,108314635,134630528,1283496939,29295622,1183667968,1149915140,-397371385,-997984898,-28931834,1962835513,-13506301,704923274,-1956684060,1438866917,1586228363,352027396,-75296387,-166953984,1073979527,28837236,855829248,1438866880,-326898549,-1101637884,-13433922,1149900779,-2086037498,1443591168,-2081476120,1950352068,-964475135,-2043266808,-1948028156,-1956684089,1438866917,1586228363,-28344316,1575324417,-326412861,381376342,4162309,119417205,-402651720,91554168,-342245325,-31178716,-1559947613,-946469608,-2097151740,1153893574,-1979711746,-1962599370,-661912498,585678990,-1956749568,1438866917,509078667,75401991,-4603853,-1951468801,-146784063,-1017290792,-2097099799,-126619911,-18775999,-66947189,-1459713107,1212314625,359907643,-268185461,1946265773,96600884,-141885438,-335657847,1962839014,-1980169460,-1054081460,-351958712,-17235195,-963903924,-92153204,91489011,605981734,41912581,113649347,1023542568,628424702,-268173685,1946265773,1224641522,-1116487365,-268185461,1946265773,96601058,-141885438,-335657847,138906598,74760203,334223502,672071206,-1945078779,49495512,-1910110860,-1962598370,-1950487753,-1070397833,989878760,604861638,-1740619775,1946177000,-28443123,1946160104,1313773061,-1070359829,-1957575783,27852357,-936705164,-1170128567,992378879,1980048918,1978323204,63015925,51737286]}]],[[{"sector":1,"length":512,"data":[-150113598,734143442,846022,-755562379,-445257007,-1017528269,501764434,1461220352,-259260789,1153954307,-1979711746,-695531913,-1991583957,1499004501,1347666778,1377751603,28856402,520507392,-2097148184,-92075836,1532633087,-771030412,-326412861,-2096736426,1962936446,76595000,-1962518901,1967653958,5498887,1223370610,81802891,990999624,-1962052361,1183384132,988304908,812867072,-2130393469,1929699582,1976699652,-18426,-1960973415,264471514,61987793,1219816403,-378396211,-1996191342,914948692,-1070398240,-1956749561,-1950130715,-141882290,1946307641,80118540,81854081,-335941003,64654143,-1959169508,1002540755,956724727,1929677854,264471334,-338568239,-338564143,158725947,2057427203,-1898435837,-850742080,990736929,-1996196361,-1845195754,-779418489,195,0,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804,7171939,5066563,592728140,1380974848,808714318,3160064,808744802,947347968,1868759088,1660956724,3160175,1869508461,1902465536,1953719669,1394631781,1701147235,1750278254,544499305,544503151,1914725999,1701277281,825229322,892613426,959985462,218106368,808714240,3160064,808744802,947347968,1868759088,1660956724,3160175]},{"sector":2,"length":512,"data":[1869508461,1936019968,1852138601,1869619316,1869182066,1718558830,1146047776,1869357125,1684366433,1816723466,1634166124,1701060716,1701013878,1835101728,1342179941,1953393010,1696625253,1919906418,1347158026,540680276,544499059,544370534,667704,542396492,1702043706,1868963956,858857586,1342179890,1953393010,1814065765,1936027241,1919250464,1668180256,1702043752,1224739444,1818326638,1646290025,543454561,1702125938,1701868320,1768319331,681061,541937475,538976314,1697390624,824981292,666924,2032168772,1931507055,1948280165,1914725736,1952999273,1953722221,541014304,1311725864,2105385,2032168772,1931507055,1948280165,1814062440,1836344933,544502639,673201968,692989785,1224744992,1818326638,1881171049,1835102817,1919251557,1275071091,975197264,1684369952,1667592809,543450484,1126199156,975195471,1347158026,540680276,544501614,1768187250,1952671090,681061,1224765262,1852401262,543519849,1920230770,1852776569,1918988320,1701604449,1919950956,1702129257,1769218162,1970234733,167774836,1650552405,1948280172,1752375407,544499305,1701995347,683621,1868787273,1667592818,1329864820,1702240339,1869181810,1392511598,1702130553,1631985773,1920298089,1308625509,1329799279,1881160269,1937011311,1329790986,1869619277,1679848562,544433519,544501614,1936291941,1224739444,1380275278,541868366,1330795077,1852383314,1146047776,1885413445,1667853424,1869182049]},{"sector":3,"length":512,"pattern":0,"data":[1224739438,1919902574,1952671090,1919243808,1852795251,543584032,1162104653,2592,1919117645,1718580079,1867325556,1444963684,1769173605,857763439,539767342,539575080,2037411651,1751607666,1766662260,1936683619,544499311,1886547779,943272224,2613,12124342,12648636,13304006,13959376,17498358,19661082,22741311,25952632,30605744,33685991,35324440,39846471,42402423,45023894,49218259,49283072,2566,0,0,0,0,0,0,0,0,0,0,0,25264513,1,0,0,0,0,0,123994112,123994112,1,0,258,0,518,0,900,0,1026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536,0,0,0,0,0,0,0,0,0,72744960,0,0,49479680]},{"sector":4,"length":512,"pattern":0,"data":[0,0,0,0,1127941264,1279870559,1313431365,20294,0,1848117773,694971509,539831040,369098787,219677186,202116105,-63481,302846719,65282,0,0,0,536870912]},{"sector":5,"length":512,"pattern":0,"data":[567095476,339599494,-1173785597,162791932,550314445,31917766,-854608871,-400127984,35109377,567085492,1169480499,-393535027,567099060,-1275067717,-64893627,-1191044422,-578088960,567099316,41271307,-930406195,1017967243,1022719002,-972589811,16902662,171724011,117311093,1122697705,225773628,32128640,-29920255,-352196082,1963539505,-366573038,130318337,-17243008,-366573372,1008462593,-32017401,-1979586042,973204006,1979836454,-385417719,-368654847,-796262143,567083700,32056970,31925818,-256237454,-855002111,-1341344735,-1172189951,162791959,113648077,-973012502,16902406,1950957902,-9508605,419386601,65872,0,539831565,1701998413,606940448,1163022157,1850286138,1920102243,544498533,542330692,1936876918,225341289,9226]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[7887437,983058,32,33292287,48955592,17956864,30,62455809,283639808,284426240,285736960,24444928,41091346,43647250,46399762,49545490,52494610,80347410,88736018,90898706,93585682,106889490,274]},{"sector":8,"length":512,"pattern":0,"data":[168626701,707406378,707406378,168634922,1919229988,544370546,1684104562,543649385,1701603686,220465677,1176766220,543517801,544501614,1853189990,604638564,168626701,1701603654,1663050784,1701015137,543450476,1864399202,1634887024,611479412,168626701,543976513,1701603686,1633886323,1818583918,1646290021,1886331001,1952543333,1462006383,1702127986,1869770784,1952671092,1684095524,1768846624,1867392116,1701978228,611935329,543449410,1835888483,610561633,1635017028,1684095524,1818321696,1868963948,1952542066,1701139236,1867392107,1329868142,1768169555,1394895731,1869898597,1869488242,1868963956,610561653,1881173838,1919250529,1769101092,1713399156,1953264993,1634030116,1634082916,611609717,1802725700,1818838564,1818304613,1633906540,1852795252,1650553888,1646290284,1679844449,1702259058,221135136,1766597642,1864397939,1970304117,1936269428,1953459744,1936941344,1701734249,1869881444,1679843616,1667855973,688524645,1936019968,1852138601,1634738292,1864397938,1380982886,542395977,1953721961,1701604449,571084132,0,539634218,1919117645,1718580079,861286260,706752561,10794]},{"sector":9,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-939524096,3,0,0,134217728,167838216,264306688,0,0,0,0,0,0,0,-256,255]}],[{"sector":1,"length":512,"data":[0,0,33554432,141623296,154471207,147720429,8325350,9830541,11272352,12648625,13828294,15532260,17039609,1358430208,-846790472,1354979370,-846790216,784554026,63112902,772205567,63112902,-2168832,1995113331,117321360,-30538811,771999238,63389312,772240384,63377150,-2144445973,243262,-1336913547,-350165493,551849985,1968766500,777395778,62338757,16743555,863313758,-1241055698,113651203,771752901,63309510,-164693248,-16530682,-1336932747,1478551072,-100615704,-929026480,-945672701,-30517245,-402409970,-164692115,-16530682,-13761163,-821839058,1929335784,1048587823,1962935222,117321252,-30538826,-83639290,-100631064,-1006189010,776994819,771999904,1476642722,-1240531410,-13899773,-718340306,3,0,0,0,0,771751936,63178486,-1272154625,114747481,85566254,454986030,243871237,-1993472739,772087574,86062729,591300910,512503301,-1943141083,-1023072506,-1006176722,192282371,240978616,85572127,-1022977048,-365002706,24444931,1048587971,1946223601,-1943121673,772005142,64956041,-1896167284,62307536,1428031227,1448235347,-400617897,512491397,507184107,175244300,-1660879895,-385837079,512426306,507184107,-260897780,63192704,1342928128,939772320,1476642054,904453747,1048615943,1946158058,343186898,63192704,1348695296,939772576,1476642310,-1024763789,440141706]},{"sector":2,"length":512,"data":[222083444,113640821,1006633961,-1977780983,-2147227378,-638125879,602139954,117317808,-397343767,-497481959,-1877677069,74778684,65605374,74588220,65603326,-16318232,-972821754,247302,63192704,-385649408,434700140,-15931392,1499094623,119496027,378416890,-1959918627,-83632346,-2144418984,263742,1397757044,119442222,-397364220,1482360208,101107246,784531460,67518080,1394504960,-397298608,-1993472648,-1945893090,283870155,1776832692,777738245,67503814,-118963455,151438848,512425988,243991533,378209290,1068762064,-1677377304,-2147417880,264510,-346553228,1922928684,15651,512433780,-74775600,512358403,243991531,-936705014,118360035,-201581904,-11343446,988286128,10872838,67700422,-316765185,-398543869,-1226308363,-368654848,113704963,-64531,-1560015711,-1092090901,6154245,-2146451010,829685820,-973049112,264454,12113547,79947837,8644764,67714688,-1660718080,1939724267,1107973,-308031509,-368654845,1088946435,-18421499,235223784,48647,-1106970648,-236453845,264355332,-1106976280,-437780441,90171396,-1090056509,29233089,-871462128,-53597437,-828267277,4205827,-1962684765,313072,1381172931,900998320,772037608,65209996,-518092498,132299267,632562864,1510229992,516097883,-986820016,-1341923050,-400182236,1482294324,-2144419041,264510,1408980341,1448563281,236848725,462367,-1107220218,1843920896]},{"sector":3,"length":512,"data":[-2134575612,-410960779,-8191745,-1090292212,1049165836,-405732398,68861323,1307113355,1162756,-1107015704,937955265,2604548,-33276952,520358150,1600019719,844847450,113758144,16712658,-402585154,-471137248,1979841664,788475397,-130284583,-2143482253,-385649408,-469042207,28312437,1975519951,-805326845,-1237417938,225705987,1426065848,1317137547,1560281350,1038365391,91619333,-352321096,117321450,117113782,-971043298,258310,-125050671,68064767,236849010,73328671,-1243046881,788176381,62263038,-1150154977,-2115204267,-129434,113692509,-402586639,-1957362628,72256748,264355421,241768075,113689592,-134216719,-365002557,24444931,-316765245,-21895165,67700422,-398543871,-957873403,-368654594,113704963,-64531,-1560015711,-1044511765,-835286769,312835,-402629442,666764100,54454272,-133973784,-365002557,24444931,-326412861,1560567438,-970062066,259078,-184105426,-1044709373,22013967,-225707125,87697068,937953396,87696897,-2144990859,1349779517,787082055,66272896,1009415425,640054591,1949187456,1031808533,-1394641664,-76267716,-143380932,225820682,179054315,1007056064,-336104146,1086555077,4161574,-2144425355,17036606,521012597,-1207920151,-1007091710,113647374,-2130639883,1963966971,-197230513,1215627267,66324166,512447233,-857209875,151439101,1051984132,-402513688,113704417,-956300310,-16519930,67936767,1526983587]},{"sector":4,"length":512,"data":[3980883,-1962776600,39381235,-402635074,666763868,39249920,47179867,-208929909,994100867,1963183670,378373,243993067,-836041780,-1583025156,1076691918,63873792,80146571,4161536,-1957361036,73305836,-16455331,65879683,-1103137281,1015025601,-399019008,113704263,-1962933239,1023457494,-1677616920,-2130880280,264510,-392362380,-672400117,-402099299,15269090,-1546851331,113640429,-402586646,-1007156721,108159292,41384508,784539692,66258630,-51213568,1975519916,-1392685317,108341820,-217659858,1060897027,-970062219,17036038,-234472914,-52136701,-214007762,24379651,-1085913405,-1185479690,548405260,1605039100,687913046,1577130216,521013022,-1090614522,146342903,540847104,-492174476,67092216,1948269696,-1439780850,-1409285191,57942076,653845162,520095174,-1950152946,990105150,1912851518,571397,-1957313543,73305836,-1962471843,3965170,1959073909,4241665,-11736916,1958742698,250995214,833567,28886009,247724288,-835286241,-964471293,-835286720,312835,-956549400,264454,1023457370,-1677686552,-62396334,1366531418,787647312,973175936,-346553484,-400968652,776994925,-897575798,1642758176,1592266420,-400968704,-1036386215,-1269167243,5236750,-338261160,246700556,1476412648,-1962930248,-835286058,1089372931,63846025,-117439290,-365002557,343146499,-991373173,151439099,1051984132,-402646808,-1007092775,-1593578077,-341638132]},{"sector":5,"length":512,"data":[-368654845,-1595408125,-389810176,32045693,-2144419072,897854,1394483572,-1273051858,1527250445,1894431,686301645,-1672274432,-1273051858,-1659896307,-389865637,567083014,-1023405336,45634128,-841862605,378023457,1482294228,-1202564925,-1976683774,-855387114,-1017619935,1946172588,911375,1017968363,-402295772,-152371197,-1779936317,-2130021376,537815358,-351963314,11790577,50011,369098752,0,0,0,822784,256,1352422144,378220114,-92077073,-1207274241,801964547,-855506504,1677834287,1482301901,65539507,-1017406208,-986819042,-150739658,134218820,521013876,210962118,6416397,1405296478,-401689700,1381040094,-283735250,-359677,45615732,-1204826878,801964548,-849084232,-1655154143,-11287717,-1290901242,-1828272630,686296332,-1777928448,1954545676,-1777434362,-150863860,824838,-955878142,944390,-1564255488,145951886,210962118,512230934,-880014187,113755022,3222,212141767,1444806657,-114825136,-989031493,-1962678986,-1557264828,-13759345,-1962111202,-1557264316,-13759345,1477218078,-1022943394,0,781979045,62260990,922693134,-13759092,772639286,227030783,-30499637,-1660701170,714,0,0,1965096064,1996569629,772830233,229836542,-1273067218,109850125,785321398,229836486,-13709568,896814,0,0,-2144468992,17686334,-2144461963,256574,992875380,1963845654]},{"sector":6,"length":512,"data":[1048587788,1962935222,-1581974780,788475599,3556,0,-549552082,645202445,-365002706,510918659,370555694,773289230,62275200,-82873088,91546634,1979907200,-1275023358,-13709440,772674094,232734336,772896001,65683072,772371456,233324163,-821988096,-533790930,134217741,542003792,538976288,1347160064,538980692,134225952,844386380,538976288,1347160065,538981204,139296,1481982216,538976288,1124597792,540101967,2105376,1297040136,538976306,1342177568,538988114,-1272963040,-45356974,2005737222,-1090056670,1157041843,1954545668,-2091428338,146344646,1604776704,-989105058,-97484,521069685,-1943092231,772575518,65478284,-449410770,-954266109,-16519418,-1123610881,-175436109,-1961989185,1192069877,-1494016797,-1963392097,1973307165,-1979763986,-1995577314,-972820706,17686278,-1799411733,-1963619570,417548045,60794611,1193118457,854488478,371100159,-553204210,99287565,232720070,-87820288,801971982,-85261453,117321411,-30538826,-402406394,-986777217,-1207707370,567092527,-1156135634,622639107,364388813,382021157,567086511,774182840,233051845,95953357,382021157,567086560,774182072,236066501,616047053,382021157,567084001,-1089026770,622442499,-839179827,783941657,1460570881,113409,567099572,-849084232,1291827233,8653,-50724864,212012684,1929303272,81836761,900999344,109846989,512295895,682623957,567092660]},{"sector":7,"length":512,"data":[-1341632326,-852118481,-620327903,-652310269,-1271943165,-1339962075,-852118509,-1979282399,-2011264755,227457549,632558512,363864525,567096756,229705356,229580425,-1341278022,-853167083,-1273515999,-1943941835,-1995577850,-1173494754,397413866,567092660,900994224,109846989,512298516,414846482,-1273712626,-1339962075,-852118523,-502887391,-534869747,239843853,632554928,884220365,109846989,512295865,481297335,567096756,62719628,62594697,900995504,109846989,512295873,12059583,1009765816,-150572032,1962984643,72333842,632560816,1471816141,-1273384945,-1172189915,243990873,29032827,-851397632,88913953,-1206920541,100859904,-593296332,-1195340273,-661782254,-1961928519,-33977359,-1929599757,769167040,-762576622,-762392573,-634454226,15,0,0,-852445956,1038124577,91357972,1979913277,-1172369906,162794957,856039885,-1580511040,-1073020884,-1912207244,-850807616,521013025,12060430,170904833,-1200785984,567096616,166004364,165879433,-852152392,-385446879,-417429239,890484745,109846989,512297457,364382703,-1943941835,-1995835130,-1207306466,567096599,167577228,167452297,-852159304,-184120287,-216102647,889567241,109846989,512297453,481823211,-1943941835,-1995833082,235536158,-1876038905,259260732,194709190,-400430334,-4716806,-1172189876,-202699562,801984600,154995315,-2081065984,-1007091004,-1023228797,-402261528,12060166,-2011050697]},{"sector":8,"length":512,"data":[-2146837482,91565562,165480134,8502831,-401890113,57804129,-2147439639,760638,-1897331851,17086464,-2113947928,1912986874,521018890,-401722182,-400619882,1015021616,-1086557184,236850472,233224735,-1173977112,1049169186,1153371430,108324877,1086751519,-2147480600,236847164,1491367199,1448548843,-1408484673,57982986,-1426527318,247684958,219658783,-1207547416,1424490757,-1690402561,443875595,-1912602440,-1176816680,1051983877,-498916915,873892857,822130692,12067277,-383660724,861274927,-1073042231,-348060812,-373072136,20775875,-385649408,37552919,-385649408,71106937,-2142014208,537633806,195313280,-385649310,1048576264,1952713636,-1539407662,58029323,-2138014229,1829479486,-1712782475,-1539407872,58028811,-2147436055,1896588350,115934069,-1539407871,510947339,195313280,-2144766877,1946919998,-356895628,94169100,194723456,-384666368,1048641176,1962937243,43903235,194774726,-20715264,194723456,-385649408,113640075,-385807460,1048641201,1962937243,41543939,17021014,1593732840,-385964823,-1301150723,1962934845,-1690402643,-1502281717,1912827624,1977879201,12197533,-1562735104,-383843382,-689373579,1025667587,494206978,194723456,-401181440,292684615,225829898,47646,-912074098,1323900675,-10032642,1912843496,146936,1048638325,1962937243,52291820,-469047438,-1172380811,-628228096,-1576810334,-383843385,-2098659807,1029009923,1349844994,194723456]},{"sector":9,"length":512,"data":[-397839104,1148322547,1912733757,1073757503,-1172424073,-628228096,520358563,-386009879,678560597,1962934845,-1690402781,477429771,1912784616,277783,540873330,504198912,-1912602438,63677146,-37230305,-2130780183,760638,-1930886283,113703937,1442843549,-356518005,24936459,-1273990086,-1977496295,79888080,984656449,-1978799190,40822788,376848428,-1532702582,940170656,-1440517116,-1258845354,1931595079,-219587068,-1073042432,-1957758091,1593740231,326420283,-1442194016,-1957294613,-850938633,57892385,-1191128855,-947191744,722201133,-1190956088,-1431568383,74721852,91569980,194840262,1958742529,1340858890,199638665,1325455337,199638665,195346270,1023574248,561315844,195300992,-1539407840,125133579,194774726,-2146243839,1879811134,113641333,-352318564,-466187516,1048598027,1963002780,10545411,194854528,-402098943,326304243,-1174371607,12061674,1914817853,-1260876977,-1172189890,378080234,512494047,-558233119,16889865,1945928424,539929,1048581237,1946225567,-1626946030,12189963,56158221,113640939,-2147480673,17538366,-857209483,1589670657,-1157856791,837488019,-1676844102,1465274707,1344144981,-849759150,-1168418527,1094520181,-1962642432,533826499,1583308039,-342008999,224639496,-1430649877,50915341,-62592674,-1207178566,216531202,1577349884,1039939049,7602178,-351417926,-585725216,47113,-2010726258,-2147225066,17538622,1387937652,47638542]}]],[[{"sector":1,"length":512,"data":[-972315462,151757830,195364550,-854936576,233224737,-1979531288,168535310,840594633,195477229,1443804095,-2142310141,24459836,-391356855,-492175176,-1205926151,653656128,-1056635957,63742735,64004928,67765763,-1560015709,328683,1049857,-388896559,-388896559,-368823133,4062,623098107,-855169094,623163425,-855182150,-1694054879,915079435,-2014770204,12066555,1060096,531421326,57948732,-402265266,57868505,-2130932759,760638,37615221,1458664704,-1191736489,-1064435712,-1291401434,639639566,246744774,246660896,-2142310141,24459836,150569801,146342774,-1403625984,-1442836504,1583348194,113641230,-385807458,1631386405,2050754162,539755127,861361859,-1174959141,1017905162,-1407224518,343195658,376582204,309803324,-466472916,65140627,-403991613,1606650872,-335953058,-1172654856,567086218,-1190401350,1320419328,24322509,-432632893,984415499,1963580678,1179057401,199767689,-134212120,-1172654909,567086218,567103412,-389873293,-1007157246,199769739,-66279234,-1073042772,-1664877963,-466187986,12066315,1060096,861395086,5236937,158666044,1308623288,-107143329,378154691,-1036383780,921177973,1947024384,4319463,-352320328,3794976,1948269740,1946762260,1947024400,1949056012,1950170120,1975663108,45633252,11554816,526342314,-1396442979,-76275652,-143390404,-210490308,-277594820,-1019106621,891598854,512303565,109841312,-1022948446]},{"sector":2,"length":512,"data":[-1171971144,567084839,-1171970888,567084788,460483,-13758820,772206902,195180287,-1607008466,37538571,-30532491,235336454,-1139339745,1048578969,1946291099,2877443,-5223244,785326541,116604544,-821988352,-217645522,236916230,194624535,194723456,-1193642750,2028470533,-86643719,505751736,165877445,-1205919283,-987880145,-854989034,330833697,382017061,567085551,622180383,-149502690,522308873,505747384,167450309,-1205919283,-987880172,-854985962,95952673,382017061,567085547,622639135,-15284962,522308873,50171,0,0,-1174404120,1431440870,1464882001,-1960966570,-402190612,-544472583,-147077492,-1074527884,1854606964,1988836880,-1394920704,460596540,91537418,-352212760,29550834,1599997727,1566137176,-1763130534,-1394545919,-160160452,1064578364,1198795580,1047809084,980708412,1030893628,964114748,242561084,1497269038,108331022,1560725038,-1202704370,-147980278,772692262,1477335459,808248370,1493565742,772598542,240387838,-30538261,-351382266,1951939754,1918975014,2138717190,1021256706,1007842392,1008628804,1009349699,-400526253,1726546253,113651455,772148823,240846535,2078998544,113716880,659035,781218283,240649982,-2081191082,-1958870333,-2144468366,940094,1017907829,-398756864,921370849,1494125358,1959332622,1048587789,1962937940,686315013,-1403625984,91488316,-352272152,-2144444682,939070,-1959916428,185489678]},{"sector":3,"length":512,"pattern":0,"data":[-402426679,-689438713,-286695936,-1395510274,57982986,737733442,-402426166,1455620225,-1014762613,1116421634,1048587778,1946160725,-2081191157,-1958870333,48955986,777245235,240858763,1494125358,780302,-402632472,1583022221,1241425129,868387664,-1946748974,-151562024,189848199,125065410,-1578925,772533083,240402048,-402426624,-1014300639,225577532,1446936622,91553806,1460011566,241089294,-685830626,317215007,197351680,772505289,1359895968,1493173480,-1429997086,243859329,-1178402444,-1152188396,236847105,242530847,567099572,1958697759,-8273138,24448628,1961853379,-389051634,868483036,1419914944,1436691982,1470246414,1503866382,113651214,773852765,-1022469982,23552]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1851867904,544501614,543519605,1313428048,539828308,543519573,542393678,1313428048,213188692,1635151433,543451500]},{"sector":5,"length":512,"pattern":0,"data":[1634886000,1702126957,215482482,1313428048,1970348116,543520101,1713402729,7105653,1380977900,542395977,1969583473,1936269413,1886217504,33585524,538976269,628303136,219742323,3130,544434464,1920103779,1819569765,1700929657,543649385,1852404336,6579572,544434464,1897950825,1702192501,544417024,1701603654,1953459744,1970234912,1358980206,1091299853,1936024419,1701060723,1684367726,1225615104,1818326638,1679844457,1702259058,1701868320,1768319331,1769234787,1996516975,544417037,1752457552,1701667182,1869575200,1852795936,227868775,1931807722,1818838560,1869488229,1852383348,1230131232,1897944142,1702192501,-368202240,1668172043,1701999215,1142977635,1981829967,1769173605,220491375,232980490,1869771333,1864397682,1768693870,1679848563,1667855973,1852383333,1633904996,1948280180,544498024,168653929,544825709,1864394082,1814914662,778399337,1701597216,543519585,1667590243,1953046635,658734,1632505320,1864394093,1768693862,1679848563,1667855973,1348149349,979193426,238420000,0,0,825237504,892613426,959985462,1145258561,1650542149,1717920867,0,0,0,0,0,5376]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"data":[-1,11536384,251723963,17826897,15335706,16515373,16515324,20447544,16515324,16515324,19398908,1385176555,824202820,-2143866578,65536,16385,129024,65537,-351928320,1094795774,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,1094795585,0,-1407284946,109850112,1456144558,1465012560,1392909909,-1407269586,307202816,-1978378357,-1976696249,973081382,-1106282556,60293132,-990903312,521014911,61875455,-986838293,-956257250,4679,48988596,-986840652,-1996444642,123405127,1516199199,-883009447,11280069,17713094,516285163,1204224172,-1946142958,-722791345,-352124744,-385928495,41025550,-1226062101,-202702409,-1007089488,4134459,-1031014797,104579331,-327745473,243974539,-523042742,12059507,-1949791360,925300674,-1878660352,1048576,23594499,23729683,376766218,-2013070685,-1996293098,-956109762,190982,51166720,212014315,236357635,-365000445,-335100158,-1107296254,-1064566022,-1946113816,48538576,-402454850,646512797,780337904,-1274936592,7137503,1189806709,-1007091024,8435793,118413454,1589638707,3389698,-1510737156,119473694,-994115789,3389698,84911603,-1064393229,521076531,-1191027010,-1510801357,-368672261]},{"sector":8,"length":512,"data":[-2130575358,191494,350443778,49678023,-377421568,-1334640384,49679873,-1460942541,-1274543943,321757,-1007093280,1370362,-776990603,199779558,-1979222784,-396302652,-1006960638,-456576175,-536730524,1388534266,1096017,76145143,1493324936,50010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32243712,0,0,0,0,0,0,128,-32256,-2113929216,65535,-32256,-2113929216,65535,0,-16723968,136,0,-16728064,3606528,-1,-1,1625562704,276124476,-661733325,-167503968,1963763920,3467267,-13740001,-402444242,508559402,-661733325,53256494,6595578,53387566,771778211,-1560072031,-1590820828,648217394,777527040,53227263,235282016,-569981153,-956044798,199686,235324928,113709059,748,48891591,113705024,6226678,-1945961794,-23074624,-459026292,50773506,-1979804440,-1274875866,-26679073,-1191676422,-661782400,-164428018,-1191027009,-84148173,102671859,-13433057,-1191000898,-1510801357,100074767,359923713,132599,2105739892,74776834,-187007]},{"sector":9,"length":512,"data":[-502610045,868257509,-1105260801,867762782,-1264192768,-32184099,133723642,46358815,64,257,207872,0,-1273033186,522308873,702915,-235417037,91537419,-923566,818053210,567083700,722373827,755928068,817167364,-528080435,1912733757,50347274,4000626,-1172540924,115938295,69632257,-956825856,184552198,339543751,113641997,-987491265,-1979667402,3020356,-1173075450,-1813507045,309642751,1948269740,1946762491,1949056247,-385356813,-823590657,222080000,171767156,540864884,154930548,742132084,3933556,179103605,1021080768,1020818445,1020556298,1022325792,1022063625,1021801516,1019704367,1009545776,1311274809,771935208,69484160,1948022531,1048587848,1946289188,284918549,-75428494,125243392,538872110,-346690812,112234587,8452993,-1057089420,16841601,-1057091468,33618817,-1057093516,67173249,-1993459083,771766046,-352302430,50037543,-75421070,611779584,926845742,-754601728,868453359,200800210,721712338,786367482,4005513,604438062,-11081468,-401371974,-1070334286,-1342044183,109457151,-1073085402,1017965173,1006924869,772371813,69142214,-13702912,74727740,-797613764,520537646,501809412,-1608577281,-1073085409,-1410857611,-32707832,-402295352,65734943,1930113768,-2135954686,271678,2011759477,69247233,-150732615,926349281,4170496,-1325384287,870372101,926349266,1959922432,665010177,132356]}],[{"sector":1,"length":512,"data":[4130363,113715570,1048637,12112435,926349058,1959922432,665010177,132356,4130363,-1310193294,329955845,-1577104151,103481407,243925050,-315490244,4326955,103545570,29033511,267795712,45816690,535575808,79369074,1071136000,146475890,2142256384,280691570,-137219328,-775386125,1090614249,50708739,-137219328,184563510,1073837266,4327047,3743366,3743290,104570229,-1753939902,70205056,-1203276800,100859905,100859970,653722663,100859959,370344296,251986282,13796096,-150990663,-1931965455,-2116408374,1929483515,97029125,-1064435308,-24381901,-65454407,-1207524109,105907942,118410015,28955187,2932480,-1108868681,1052721664,-1178586347,-201588224,356433835,637534649,-522809,38127142,10414335,96937538,-970588160,-1962933691,1224753678,-1185870877,-2048393215,-497466880,113141,-401269057,-1958608776,1225008910,1052708579,28922133,6744064,-169715390,-401322054,547486938,-52566012,-401317958,933362894,-53352448,-401312582,966851778,-387698176,-1833239357,-55252972,-402637407,-1262814025,-56039404,-986840656,-2013221858,-1959916217,-1996216050,-1959915953,-1996215538,1204228175,771959314,70061707,-384544887,1460074826,1397903646,1543079400,1595890010,-617364729,1915759788,1997093903,-1164732405,-487129078,-320088061,1229833038,1397707331,542393935,541936965,1280463939,1380275744,1313818963,808333600,1329799216,1330795598]},{"sector":2,"length":512,"pattern":0,"data":[1279402060,541803343,538976288,0,3,1049600]},{"sector":3,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1095914049,1380012626,1048592722,1963000863,672566031,-851069949,-2097381273,1475081076,70205056,-1588562688,378210324,2951190]},{"sector":4,"length":512,"data":[14320388,-1996396381,838953494,5826815,1052718450,-2080929003,-4505401,6273535,67063,100078452,141819906,16940419,-544537995,-502610045,-293913,662767988,28835837,503325160,53221061,-12724084,990148095,-1206946622,567092505,806798638,621393923,-1021369907,-1031024077,235012281,356433671,-185276386,-13450465,-1157633560,577901514,1912633576,1460050969,-672661065,332053247,110038386,110035304,1956446570,-2084308982,-2014837052,851704311,-4658945,1913899706,-1090056463,750654782,768256,1973875708,348619576,-1189820797,-1494024095,1048587125,1946289189,357154340,923155373,-1105562368,1001198927,1962949894,621200912,935264260,357154304,-218098503,247724196,356433671,-1190667586,-201588686,-2128906842,-2130459450,-1190935353,-1494024182,1052707957,69378325,843397960,1052710772,-625060075,33601799,-1587567117,-1991769054,1166619205,-1092930764,-24439490,-1186936957,100073567,57999361,-2097116183,1963000445,33945461,-395414272,1166737605,33129224,104552054,1349780512,-2091442318,100076231,1952382977,69247237,103496171,1140917280,69247284,-351779447,-947693782,17168138,611671808,3439747,103489140,-654900192,1932805161,876872456,3425479,138739968,-972536437,33826054,-2130435933,-1006632435,-1070398339,-947698749,-1173822966,1407718314,-373032458,1150025580,1064244,1055452530,537279232,-1593608700,547554336,876882180,-955759223]},{"sector":5,"length":512,"data":[66117,198087,183468887,-1006090869,-947125155,-150732615,331547617,1166630871,106268932,855932356,197345472,1345877467,-1207545006,567096601,53223049,53347980,-1207741510,567092505,-852162120,807307553,839289859,53787139,-853210696,688310049,117710596,-1017619877,-1895825480,1048585920,1962672142,321632776,-101337624,-2013218621,1673139661,1958742803,329956079,1912607037,69379047,961271947,1979981854,538872068,637603588,17760970,251862542,51512833,-402448706,314441750,1107971,48631436,-1945960258,-209196856,-1006784536,-16485121,889127540,-1895545713,38047492,1296909763,1482184792,-1106833872,1757351918,29538561,-423713549,58769168,-218062919,895989924,180298189,249413120,-218101575,-1173850970,468193990,-1178338827,1085571072,-58693683,-2146798592,-220101892,-351077958,-851331867,-2097381273,-58656908,-940739328,92166,1780386048,-851266559,-2097381273,-58656908,-1948945152,325302978,-1233862645,185838266,-139496229,1978663107,309519,507110355,74843168,69213833,69213835,79283083,-1444162816,208928783,79254339,-1981558016,1526997022,1741505460,1954741376,16548087,-58715276,-2146732922,108168700,-384587078,1944715104,672565759,-388287741,113770093,59966505,1945953512,-66131963,1048626169,1962935333,4170007,3614455,-150732615,537279473,-972721148,33826054,50168,1380974592,52958859,1741506484,393536522]},{"sector":6,"length":512,"data":[1954741376,-1336255761,-1929609214,-58718348,-1342015603,1522792716,1408054104,1073789265,-225709577,-338567541,-654093991,-494808181,229711871,-770970669,-1958542988,-2082960437,125175033,1481239179,-1957641685,-1207752682,1481655296,-850242736,173759079,1131312612,1354825304,1499000290,-469086120,1460014452,526319243,1778814510,-1912280319,-218011106,1978469285,1358452772,378220188,1219756840,-469080115,-58716044,-2131856254,108302076,212884058,1486734329,378220227,12059432,-850242748,173759079,1478260196,1961101904,-335596796,-1946799358,-341445683,-2097381192,-998014604,-2146899194,-764116228,-1341995901,-1544816382,1380974592,672566062,-851069949,-2097381273,1482355316,195,-1106833920,1757352529,29538561,2059314419,58769170,-218062919,-1324167772,-1948200186,284795864,-1610548351,1642360179,32186380,862054032,-1896379393,-388264253,158662896,-1993420237,-351208674,113210,-79789266,796131344,771804648,284892715,-754972999,301695979,-1964440718,-1870730496,-141820109,-611400818,1962981352,1959922438,197257990,-2084145966,-75415357,-529358848,771790312,284900995,247493888,788987423,621200900,750256644,984323,-388823887,-1039938932,1096016,1755570679,1779861761,378230785,-1023998944,561380352,-489486671,426951171,284759691,201386625,-1036316814,113707895,1065,-133944413,329956035,250758632,247724319,572426527,507071236,74843168,69213833]},{"sector":7,"length":512,"data":[-1190069343,-503906288,-1996396381,83978774,-763165696,135570176,135665289,-1007002648,-551263772,-426769941,-139607199,990218704,-149064443,1161538512,-1391102466,1095894471,-1869574000,1095908737,-1179974027,-1510800898,195,1745224448,1779831553,280580353,1509029632,208994058,-141877498,-91504498,-1007114765,-225716082,1465317099,1381061456,521012766,-1962841951,755067414,-628947968,1095936,-661720585,-24382837,-1186936957,100073567,359923713,132599,2105739892,74776834,-187007,-502610045,1511983077,1599626073,1095943006,1769096269,540697974,1987011137,1866604645,543453793,1869440333,1293973874,1734438497,1847620197,1881175151,1702061426,168653934,1296126500,1986622020,1092631141,1702260578,1634681376,1293968498,1919905125,1951604857,1937077345,1869116192,1696625527,1919906418,1378093581,1917078849,979727977,1836008224,1702131056,1970086002,1646294131,1129324645,743719213,544370464,1093485392,1868767316,1952542829,1701601897,1378093581,1917078849,979727977,544165408,1702131813,1684366446,1835363616,544830063,1767994977,1818386796,604638565,1145913682,1702259058,1850286138,1768710518,1634738276,1701667186,225600884,1095902218,1769096269,540697974,1970499145,1667851878,1953391977,1835363616,226062959,1095902218,1769096269,540697974,542060361,1869771365,1667309682,1936942435,543649385,1986622052,1701650533,2037542765,220465677,1296126474,1986622020]},{"sector":8,"length":512,"pattern":0,"data":[1226848869,1919902574,1952671090,1397703712,1919252000,1852795251,220465677,1667845386,1869836146,1377858662,1917078849,543520361,1936876918,544108393,925969969,1919514144,1818326388,1936286752,977346667,539232781,1142956064,543912809,1702521203,1797529658,538970637,1699946528,1919906915,2053731104,606091877,1954112032,168653669,538976288,1869376577,1769234787,1965059695,980707694,1931486240,1869898597,168653682,538976288,1701996868,1919906915,1852121209,1701409396,606091891,1378093581,1917078849,543520361,1629516649,1634890784,1634559332,1864395634,1766662246,1936683619,544499311,1886547779,1952543343,778989417,1936287828,1869770784,1835102823,544434464,543516788,1886351984,2037674597,543584032,1919117645,1718580079,1866670196,1919905906,1869182049,1397567086,1296126509,1447645764,2117,0,0,180994048]},{"sector":9,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[3234381,131081,32,12517375,-569179670,2555904,30,31457281,32047143,39]},{"sector":4,"length":512,"data":[1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568]},{"sector":5,"length":512,"data":[329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,1442979049,544436837,808463922,0,0,788541184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2129936197,-133449154,-1962315249,-1947204624,-1877546216,-772764848,-268198664,1939675275,-754667260,266830059,-1341224104,-1061436661,-1170308853,1913649163,66095881,-351237648,1381011489,-120459125,-1947204708,158571776,-1325396187,-337456380,-268425981,9028107,-1195157414,567086088,-854851400,1048625953,1962934284,201770744,236847360,143374879,520128232,788520168,1006638240,504002305,-1912581957,303835,378258207,-1616901214,194945547,-1962928992,-1156866034,-389870656,266928104]},{"sector":6,"length":512,"data":[-1707179259,74776587,194647689,-16679037,-788273036,194907902,378266741,-771028070,-337061516,-1108819196,1364414719,80078930,1482381658,251580675,-311096418,-1172423741,-2146994677,41220091,-1007107079,4037202,1270480896,1033523720,-1023410176,-1974329586,-1275063530,1512164622,-1325407768,71100927,408783398,1397817138,567104180,444580902,1527152013,3520594,-133962761,1354979418,567095476,339599494,1023767043,242615060,1136271118,-855002105,-1070397919,-1207514288,567096612,220105006,109850112,-1274609649,773967129,1476400034,410320700,-1409253186,225755146,1948269740,1946762491,1963801847,18606342,-1275018007,-1155412723,126484572,-12793602,-1607596939,1397751827,-19363246,1141487811,242360781,302039799,521013364,-385261382,1532690246,346173016,100675072,3016847,-1106796026,118358108,-1190430017,-1527578592,-852033352,804945953,-970060683,1543509254,386319918,-2118231040,6078208,1017956659,1023112201,1022850080,-385649395,1101660317,1948269740,1946762248,1963801604,378609,-1608577457,-218300395,57998510,-477073429,977108997,113640821,1191247889,1470759088,1181382,2048297473,1959922187,-1261765104,1008848142,-1173981697,-1410791122,-33101570,11683764,-855631682,289308705,364511488,-1174178816,1001652316,783950285,-385649911,599326342,104315429,616047053,107264549,118366669,192593758,-852950600,192592673,536969088,1065357429,235631872]},{"sector":7,"length":512,"data":[154057247,-369211928,-1377303907,378150653,-1023541228,567095988,-478871748,1342326667,839143306,-1993457171,-150231538,-1331482911,191859467,-1961863285,1334445687,226462479,-1962381430,525863263,195698313,195180169,195833481,195958409,195038856,196886153,196755081,194981512,-503845582,197002753,197017227,-1310333512,-1948003580,-391384117,2059140473,25133067,-385649632,1049297150,113707966,134052,-401890143,-1662452562,-385649923,113705127,2998,196609735,378208256,-1465709638,-1240596213,-1206484213,45613067,-58398720,195567163,-1465711243,1088875275,-310984133,194774783,957065889,1997249542,190955128,1015022846,-972652999,-347197436,-852839181,-1125547743,49676807,49677046,-789183754,-1997403439,-2012515786,-1274318066,-803091156,46727918,-792132919,-792132907,-792132907,-1997468971,-2012516298,-1593085650,1990396854,196649227,-1593083741,1956842408,190496267,-218095431,-1543045212,195338507,196740667,1055460727,-1676738561,145930763,-1594038808,378208276,243993518,-903148628,197009035,-1174308120,915081417,914951068,-1008203573,18147836,-1274316102,-31339249,-1173785152,-1343747777,16837116,196871879,2059337729,272993035,-1559513437,1166740402,196649746,101430435,-55515049,189106982,-1532819617,1975520011,12839171,195305099,1929144040,-1508996108,195338507,-503887800,195823107,512479371,346033086,1596312832,1930132159,195338612,-2080682520]},{"sector":8,"length":512,"data":[17546302,887625589,855798780,1398212315,1543265768,190679334,166397791,-1579971696,1441270716,195338747,-385878086,-1331561652,-1270971637,158662667,196216377,-1298070665,-396950005,690420778,-2094657211,687870813,-2096385530,766494,90538278,123731903,-2096085719,-1593830819,501943228,196125072,196216361,196353667,856191744,196256704,-1593068381,-1130165340,-88020981,195305097,-1157677591,280234874,-1243078195,14870779,567086516,-386170904,-1070465018,567102644,1195648,-1206750208,382018852,567083021,398073614,-851725312,320244257,-854674432,108446497,-13758820,772170294,997119,221708078,37538560,521013621,-1258307096,-819868340,1364414464,-1574515374,1145308804,1482381658,-1698821773,2091015,-1007097996,1381061456,-2069748275,1514423302,1935170393,127057646,1946158312,1355020519,1465012563,109355014,41290812,-466482000,-405669749,123442571,126621321,126760585,-402158918,1186659066,-84023288,-854851144,-236433375,537680122,121636410,104468340,192153409,121767482,787078261,130026239,1532582495,-356859048,276138760,149698185,-1995276917,-1962348994,-1995721162,-1962348490,-1995720642,-402066882,12843686,0,0,1231123049,1919902574,1952671090,1397703712,1919252000,1852795251,-1541142003,-1157123577,-771242745,-418916601,-116921337,319293959,705175304,544417032,1869771365,1931812978,1769104416,622880118,125108323,0]},{"sector":9,"length":512,"pattern":0,"data":[1701971874,1852400737,1920401511,1852404841,4259943,1953067607,1919950949,1667593327,1631715444,1853169764,1308652649,1914729583,2036621669,1684095488,1836016416,1684955501,1631846432,1107321204,1663067233,543976545,1836216166,1392538721,7038309,762212174,542330692,1802725732,1667584768,544370548,544501614,1853189990,1867382884,1885433888,1459647077,1702127986,1969317408,1375761516,543449445,1819631974,1766064244,1090546547,1953656674,1699881004,746156660,1852262688,1063613039,137297952,1207962125,1342835976,1936942450,2037276960,2036689696,544175136,1768383842,1701978222,1702260579,1864399218,1752440934,1711934821,677735529,1864378739,1919164526,543520361,1291875109,1091079944,168632378,218106381,1918981898,1735289198,1679830304,1667592809,2037542772,1819633184,144113772,1713398821,677735529,1914710387,1987011429,1684370021,570368,621415680,1864393836,1814372454,2036473956,544433524,1868785010,1701995894,147652708,0,0,1635151433,543451500,1651340654,1864397413,1634738278,1701667186,1936876916,1225323520,1818326638,1679844457,1702259058,544370464,1701603686,1835101728,152240229,1701603654,1953459744,1970234912,805332078,1851867913,544501614,1329808722,542262614,1699618913,1919907700,1919164523,6649449,2369]}],[{"sector":1,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1229324288,808469836,1163014192,67]},{"sector":2,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,197132288]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[16013901,196618,8650784,17891327,251267120,2555904,30,29491201,73072679,78774311,39]},{"sector":5,"length":512,"data":[1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365,1019448064,772633098,278144,772109568]},{"sector":6,"length":512,"data":[329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,-1899066116,26208478,190711436,-695286130,-1172922180,-1645737802,15591428,200541942,-402426872,-54655707,81258507,1001707147,930292173,-1274985752,1931595067,-116996340,-1173619701,48826722,-217153532,717161483,201113101,1325710056,1560247680,-967900043,1049165829,686296442,-1172343545,-54654484,76081163,-1578567801,205700612,-956001560,-66324218,-385699829,-54656063,74704907,1337605044,-2145268468,-83102938,84792481,-657391601,-388896559,244050129,-939323946,232525449,231874187,745986347,268499841,12256114,-754667248,512314339,-1833038374,70248460,1001707147,326312397,200869575,1656360082,56879369,985270448,-2131301623,135000846,200218367,-440779852,-2145268468,-150211802,1072234672,1579060739,8437259,-1190265153,-1527578496,719855382,-217153536,-558235381,939571213,31990221,8710145,-167726872,17560582,113708148,137825263,200345287,-1262286033,-31339239,195666624,1203032202,-854873154,378192673,-889320535,567086772,-1274303814,-1021194949,-1962699544,1405256662,567098292,-1923655997,2078819964,1390956035,1447468035,1577289448,24485198]},{"sector":7,"length":512,"data":[312902,-1262264737,-2044605136,51002848,339543666,-1023314173,1136265652,102878475,-883696845,1577487878,44115467,-761067776,26458893,232136329,4047659,-1207733744,-1320677376,-1545547004,-1329394216,154843656,100821225,-852155208,-836859615,-804877299,616040205,34585125,599269837,33798693,-71097907,-1509505482,28376843,906115561,195444352,-1676380928,-836829386,1979792397,-1573455092,531631014,-1342038551,-21049598,-1070377459,-473396308,23128106,1577160936,2615366,200619659,1912631528,3976210,-397477001,914948197,-1078326279,-402164983,-1161625574,28314071,-402530071,-210632627,-133432133,-1996467736,-1022626506,200619659,1442855144,1944589682,-29062398,1952201277,1560051722,-972786184,1577123652,-401829189,2092892198,210943501,1325557480,1560247680,-967900043,1049165829,-1396503092,108268860,-143343606,-1007041714,200881801,-2065130415,1785896192,-1929150579,179062351,1012888768,1309176924,334034823,-2131261694,1567906876,31516758,-1929378618,-1671560876,775750795,-352160512,774782248,2088770677,376766466,989756800,-142134412,29091918,24508295,378439,-236451861,31844353,-225731249,1560233158,1153873267,-113573633,1498284915,162642627,48825264,-115439359,157465099,-152501328,195665920,2088766066,74791425,1076643500,-1261401514,1417121095,1560233158,225583565,-402423923,-2141322857,394805442,79858371,-1086671808,-961868290,1330577413]},{"sector":8,"length":512,"data":[200883849,-1341550406,11528463,-1957603498,468233470,-1085188352,45680939,1504637440,-1342016161,-371021312,-1425211208,-1017225383,108159292,41384508,520036396,-389870096,326369380,-1409274904,192154940,-277561334,963981116,-152507570,51115014,175768180,200541942,2046981153,29016833,-352210934,-1084780470,112789797,1974399488,-2082867440,-1287059775,149148161,1594618910,163560131,-1274151233,-1411348945,-956299834,-32769786,-352210931,1017942038,1007449101,-1393068753,16663751,-1010824704,-117314568,-745616500,-1911119684,1354993371,12261747,-1014102528,443942,1659372032,4909056,443942,-167313152,17560326,116792692,1946684403,210943494,-151198232,67891974,-54655372,-52893685,1492960232,195430134,-402426369,1286865029,378085837,-1169028105,-1705899017,61,132694874,-1382400,-1023409688,918180432,-2168823,1388533850,-402049862,-1017446444,-117314568,1945934928,1017969921,168064092,1324840384,1174565789,1482439750,-469040012,2088813561,-1007142145,1975519916,1354977019,-2146137518,246694378,1482301901,-1431547709,-92946422,-2144943272,1952251773,96871941,1354975068,200351371,-166909791,17560582,-1073020811,-1559996533,108334073,-1946187544,1843921495,-389850881,915144562,344656881,-385921048,1676149583,-10426113,-326434621,-1959990141,448026068,-359980595,201000646,205699662,113690931,-401601627,208797776,1508430731,-387288574,-437583694]},{"sector":9,"length":512,"data":[200541942,-969444350,1309408006,-1190580806,113639440,-402650203,577896488,-2030024472,-851725094,1440384801,1577035752,-1274465862,-400437957,-712310713,567089844,-1956786453,1337246693,201008774,443687373,-2078980470,1963697414,1959332589,1958839300,509513189,1949187968,1455683805,-1556182185,-386692341,216596248,1049186303,1583287203,-1957210429,1309385526,-956383000,914948100,1583287203,-2141825085,108265532,-117934938,1031802859,158660864,-128172672,-469040267,-1017159943,-571976111,16443392,717117298,226279181,200883849,1979697896,169589256,-353827408,-1261007875,-853495747,-1957989855,226278128,116836659,1947208692,17098755,567098548,846395531,-1207930136,-561293568,1051992525,28844493,-840987817,-851528671,671547169,-1017553395,-1174388504,498076024,199756779,3401728,65537003,-40900352,1504976662,517682003,119655686,11819807,200869575,1320815996,1946500105,156154381,108268604,-1173620317,381880899,-1269673953,-1172189890,1102318972,1482301901,517092291,232529550,-636581066,-1958759411,1914818014,-1665057879,-1958693743,1914818015,1925266333,-529228409,-225721569,226115211,-386011160,1623129571,-868316405,-36050931,-35723185,-790039925,113755133,226233337,200357515,-167769925,67892230,112919413,1964018432,-44636152,1726487787,-46208771,-1677653016,-1644342808,1979314290,106203914,-386061336,-1007092414,-851246920,1124186145,-18775727,1495387647]}]],[[{"sector":1,"length":512,"data":[234797763,567089844,113699467,860752891,-1526282551,1119490059,-31004660,283643250,-1158909184,145754426,-2080599831,763710,109971139,1049300438,-208990764,-1929356568,-1515907466,232013449,232275513,195495679,-225721593,-401736001,-21102529,-1492219123,109970955,-13431338,-1957210543,899551,1583326963,1494318477,427159264,200541942,-1928367072,1988956031,1923611928,-1492748539,-336067725,134019329,230248899,178957312,-201662272,-1262265942,234797594,567143051,195497611,401143347,234797568,-959892655,1309408006,1509784552,-471334029,-1008213251,234798929,-702640610,899341,1587868502,521237645,1381024601,243317334,-854848840,201373729,-225762867,-1073042106,-1978239751,-80942908,1543911982,772437003,190645818,167933433,1482317504,28856515,-1205744372,567086080,1163051864,1128352848,1700143173,1869181810,775102574,673198130,1126181187,1920561263,1952999273,1667845408,1869836146,1126200422,779121263,943272224,824192053,3553337,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351984,2037674597,543584032,1919117645,1718580079,1347633524,155472471,707668512,3026432,168624135,1850277888,1717990771,1701405545,1830843502,1919905125,1665204345,1936942435,1852138528,543450473,1931814688,1632632871,1847617652,1176532079,1684960623,623321120,2579571,1970499145,1667851878,1953391977,1936286752,1886593131,6644577]},{"sector":2,"length":512,"pattern":0,"data":[1635151433,543451500,1986622052,1886593125,1718182757,1952539497,544108393,661857575,1952534528,1869881448,1869357167,1224763246,1818326638,1881171049,1835102817,1919251557,623321120,1392519027,1668445551,1634738277,1914726516,1769304421,6579570,1713401678,1936026729,1970234912,538993774,661857575,1918980096,1952804193,544436837,544501614,1886220131,1651078241,1174431084,543517801,1852727651,1646294127,1868767333,1684367728,1953394464,1953046639,1718379891,623321120,1426073459,1886938478,1702126437,1329864804,1917132883,544370546,1342202917,1936942450,2037276960,2036689696,544175136,1768383842,1684086894,1735289188,1818846752,695412837,1867382816,1818846752,1629516645,1684366436,543433984,1701603654,539587368,1701078113,1092616292,1852400740,1931812967,1681989632,1931812964,1495801919,539577903,1701990400,1629516659,1797290350,1948285285,1700929647,544106855,1819305330,1852400481,1768300647,1932027244,1308631081,1768300655,544433516,1819305330,1684366177,543433984,1701603654,539587368,1819305330,1684366177,1699880960,1667329136,543649385,536900389,1819305298,543515489,541029157,1311725864,1526734889,-1861582326,-1391812086,-418726646,218822922,1225464587,1919902574,1952671090,1397703712,1919243808,1852795251,604441101,20057]},{"sector":3,"length":512,"pattern":0,"data":[0,0,0,0,1610612736,11,6029312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1644167168,735493,0,0,6044160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,973078528,92]},{"sector":4,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2]},{"sector":5,"length":512,"pattern":0,"data":[23747149,4,65568,3801089,1595277770,3,30,1]},{"sector":6,"length":512,"data":[-1271988224,-2044605136,51658208,565842036,-1273033214,102878473,3604270,11586304,567097268,35031086,8437248,-1396100100,1223215242,104476160,-160104446,1006649064,202732587,1970420768,113651209,-1871576664,2109661419,8382722,444206,-402653184,808189979,154979442,-1952921481,702680,2553646,784532224,-352321373,1224991714,777569196,1667,1048784386,1946288128,251604485,12255232,-850873328,185037601,-336169509,-661745617,78758030,-2135301165,539015168,-218103617,16956075,-377369717,-617414398,567099316,-936652797,-1073019276,401338485,235028414,-930370273,45864587,-851397632,-1274957791,-1960719028,-2117432358,-1342110999,16957210,24489714,-2082919605,1065419499,141822477,939705219,1124168711,-952177781,70,-1090453317,229638402,-819212917,1974399553,171802629,-947128459,-1020571576,1197148041,-487914781,1991,-1090359411,-544538368,1065612171,-385649408,872611997,-1073019765,1465275508,724499339,1996488710,48646,-1962868552,371928597,108462080,-1174404929,-930414336,41075259,53398155,771751998,13827,-1833217965,-684807166,-1977163638,-684833019,-236855238,1583307608,-1036320139,-561272717,-208952085,913635131,1465259147,734891005,1324714959,-100401525,1610392819,-234662050,-204829866,1465867940,-905720437,-784216533,67013609,1604711410,-28915906,1023606784,-1073784855,227213568,227277059,168625607,1962998147]},{"sector":7,"length":512,"pattern":0,"data":[16956147,-903098997,-1275067973,1914817856,1958820612,39632390,855555305,-850611008,1380930337,1226848852,1919902574,1952671090,1397703712,1919252000,1852795251,455346701,1380930304,1226848852,1718973294,1768122726,544501349,1869440365,168655218,1330839583,540693586,1970499145,1667851878,1953391977,1936286752,1886593131,224748385,1224741642,1818326638,1881171049,1835102817,1919251557,16779789,84148994,151521030,218893066,286265102,353637138,421009174,488381210,555753246,623125282,690497318,757869354,825241390,892613426,959985462,1027357498,1094729534,1162101570,1229473606,1296845642,1364217678,1431589714,1498961750,1566333786,1096834910,1162101570,1229473606,1296845642,1364217678,1431589714,1498961750,2105310042,1430486910,1094795589,1162167105,1229539653,1095057729,1330597697,1331254613,606348373,1229005860,1313756495,-1455446106,564964266,-1313856990,-1246448718,-1179076682,-1111704646,-1044332610,-976960574,-909588538,-842216502,-774844466,-707472430,-640100394,-572728358,1407246302,-437984286,-370612250,-303240214,-235868178,-168496142,-101124106,-33752070,65534]},{"sector":8,"length":512,"pattern":0,"data":[]},{"sector":9,"length":512,"pattern":0,"data":[11164237,327700,13172768,43253759,-2105604096,3705,30,207028225,15466496,242876960,299827200,305201152]}],[{"sector":1,"length":512,"data":[-1957363712,1751276,1460454376,-129579178,-175439872,-971313533,1445986628,272033878,-1341864829,-1977289116,-316014260,1183432963,5284342,2096514617,5415176,2130069049,14465034,93775952,-16595837,1182991438,1187447302,-352321290,-161576173,2123097041,-399376634,-998044963,-163119358,956581515,-444795322,1342644408,-2096611608,2122515140,108331012,-385595160,2122514661,1920205316,1342189496,-16359797,273147959,-1996176253,-1072956858,-1414002059,837308416,46433029,-1962516853,792690719,-1414002059,501764096,46433029,-2131075445,1950613887,13285386,84600912,-2096970621,1963000958,-92864754,-2096121624,37552836,-1207274496,-397410133,-998046484,-94467326,-956299322,-1978,1586176235,38243078,-1946532215,792690904,2139099253,-478919679,1342229176,-2096840728,2122515140,460718072,-16359797,12904503,167953539,-1204259392,-397410102,-998046560,-1205015806,-1957691345,2013202014,261351426,184861827,-1207274304,-397410133,-998046592,106859266,-16615425,22210615,1577370755,1575324511,-326412861,-402651976,1183517520,1183401988,5552380,-62485680,-28931776,83814480,-1962621821,-60913192,1962950528,-27358236,1946173312,74907460,-2096173848,1077936836,258074704,-1996307325,-1072955834,-1715991435,367546368,46433028,1996431339,-25755900,-2096428056,1454900420,1996443648,248572158,-1962621821,1183448646,71731972,-1017256565,-1192457387,-773324716,74907402]},{"sector":2,"length":512,"data":[-2096195352,37552836,-1962314496,2139096158,91503105,-1578516429,74907392,-2080418072,1183384260,-1965520124,-397371385,-998045483,4271362,-1918089591,-11489722,518564982,79987463,259309578,15812343,-402099184,1178273347,-1207274068,-397410102,-998046848,5814274,-1371108016,175564880,-1979399037,1174449222,-45693010,1084227586,1178179591,855932076,-1207702592,1183399936,121676017,-1404683880,-1070398084,-16127079,468233334,46433033,-1980545399,1183708502,1996443822,117565612,-1207647101,-443809793,-1957313699,10926316,1443497960,1353467533,-402229505,-998046670,74907396,-2096250648,37552836,-1962314496,2139096158,175389185,1342229176,-2096960536,1996423876,228583430,1023591555,326434818,-2147066229,1966735743,13285386,46852176,-1929198461,-397366202,-998044291,212226,2122323573,108346029,1554939520,-893908364,-1511501824,46433026,1350566072,1353467533,-2096505368,1950352580,13285381,-1070394389,-1404662448,162130000,1074054275,-222819723,1978159104,46433026,-402360577,-997982717,71731458,1353467533,-2080508184,1183384260,74907398,-2096645912,1996423876,128968710,-1962752893,126485598,4271512,-1946401143,126486110,4271512,-113015,-1142358922,46433030,175423499,1342209208,-2097013784,1996423876,111470846,184730755,-1207274304,-397410180,-998047228,-58817790,-1604748288,966264641,1350433862,16678531,966281852,1149107782,-402229505,-998044515]},{"sector":3,"length":512,"data":[4406530,1183528573,-62506498,-2037567884,-11468966,1189674102,79987461,477413386,990147304,343211078,10307319,-15895120,-689373578,46433029,175489035,1342229176,-2097046552,1996423876,206563334,1023591555,309592067,-402229505,-998044607,-1947170046,1086719582,1996423423,1518767366,1911050495,79987464,-10844531,203417680,-1996307325,54372678,-16550656,1187490126,-11534179,669580918,46433031,-1986050423,-92036778,1024423423,175505407,1342229176,-2097074200,1187447492,-939524189,-23226,-10844531,-59310256,-2096828696,-1956772668,1438866917,1421405323,133621760,-28915882,803930112,15681271,-2094697456,1963129726,-79233277,-956598645,-1929335742,-1957647290,1090911814,1555582976,-1552384,113541898,-1912715521,-11490234,1189674614,79987460,-1066024950,1575324510,-326412861,-402632008,-1957296224,2139096158,192231937,764938122,1183383616,-955913218,65094,-1912703233,-397365690,-998047375,91570180,-335544392,-1371108017,188213328,1023591555,1047789571,1353598605,-402360577,-998047685,1958742788,74907437,-2096424728,-259325244,-2147197301,1952251768,115889095,46433035,1116401803,1183422638,1958743038,6045107,-1070354828,1575324510,-326412861,367575091,74907399,-2096440088,-11533628,1996424822,113371140,184992899,-1207601728,48955393,-443826125,-1957313699,-390056980,1996424936,6862852,169404496,-1207647101,-397410303,-443872700,-1957313699]},{"sector":4,"length":512,"data":[964844,-972634136,-1961168058,1183385670,-230257160,-230257328,171632720,-972766077,-1957760186,1183385158,71732214,-1913108855,-1924074938,-397348282,-998045156,-25263356,-1207602176,49020927,-443826125,-1957313699,964844,-972654616,-1961168058,1183384646,-230257160,-230257328,166389840,-972766077,-1924140218,-1924074938,-397348282,-998045224,-25263356,-1207602176,49020927,-443826125,-1957313699,178412,-16370712,1996424822,80340996,-1996176253,-1072955834,1996426869,166193156,50513027,65733702,-1946270069,1438866917,247000203,100853760,-16490869,130417734,-213465508,105286215,-1946663288,1183384646,-230257158,-230257328,157739088,-2096839549,1946222206,-18427,-1070398741,-1017256565,-1192457387,-1041760244,-396994811,-1986526845,1586232390,4161540,2139101812,343226881,1352140682,-2096899864,1093468868,-62486272,33834627,-1979294069,1090845766,1586169736,21480966,73304890,1968979840,1183535884,1346387974,-351959064,-62485689,1183535168,1346387974,-2080417560,-1073019708,-4716940,18344447,-2147197301,460587071,-402229505,-998045419,212226,1824001406,1996443648,152889350,-16464765,1996424310,152102918,-1962621821,-1259796874,-1191277824,-1924136850,-397409979,-998046797,200313604,-15829514,-756545930,46433032,1979969675,-2012968442,1547501126,1187382389,80108798,7387136,21335376,158591056,184861827,-1978567232,76086854,-437758122,79987460]},{"sector":5,"length":512,"data":[1575745419,1342206648,1342260621,-2096541464,-1073019708,1183467125,-1979414274,-28932091,-1962932794,-1991768506,1975056454,1183535104,1183400184,1508397306,79987710,1586092171,4161784,1183507573,-1962571522,1178142278,-385649158,2123104028,-1662300166,-1996601718,3964932,1156121460,108462079,-2096616216,37552836,-1207077632,-11534217,870844022,79987464,-402229505,-998047047,1589654274,1575324511,-326412861,-402649416,1187382320,1183652339,1183666418,-1444392718,79987463,720520842,1575324644,-326412861,-402645320,1448543244,-293341813,21284382,-129594030,-396994992,-998046887,-128546042,1141096491,13796098,-1980610935,1187509334,-1962934026,2126837342,25831154,-2012971381,-163119359,905346691,1600055678,-1017256565,-1192457387,-1175977954,-1957275901,518947829,1375814854,1358448269,115889750,113541891,737695371,38011840,-1996434813,1451881030,-163133452,1586167808,75402230,2126774666,25700082,-2081011969,2117465726,-1956684055,1438866917,112782475,57075712,75400022,-1606452224,966264641,914162758,-150974024,60359790,319239686,-1996015594,1451883590,-96024578,1586167808,-59325190,-1962898906,8914550,-2080749825,2119301758,-18199,-1070398741,1575324510,-326412861,-402651464,-2091515120,2080375934,121741375,71711128,1371027069,74381056,906363801,940970759,-62486265,-939633015,64070,-1946526069,9045622,654079684,1191116936,-92371974,-1192657327]},{"sector":6,"length":512,"data":[49020927,-1956724685,1438866917,2092493963,45803520,-666464938,-1912977783,-11500474,988284022,79987711,1031061514,13059831,-1959365200,1452001606,-62486069,-939633015,54854,-992584053,-1977156490,-92894464,1191116936,-696351786,-1964409311,999872582,91554886,-352321096,1589654274,-1017256565,-1192457387,1441267810,-175417854,-1922896253,-11489722,-689437578,79987710,527745034,1141441735,1074022027,1442989193,95873110,-150682493,-2147421882,28837236,855829248,-443851072,-1957313699,6469868,1442975720,-293341813,-1371107998,74907472,-2080468760,-1073085244,80160372,1183532041,1149845508,-396995070,-998046352,-247007484,125140992,410871,-1207602174,48955393,-1956724685,1438866917,247000203,29550592,8011392,-954305280,939586118,-1996007752,1183709254,1183666418,770199794,79987461,7997126,1781989375,1748434695,74907399,-1962908952,1438866917,45673611,25356288,74877782,76156651,-397351894,-997982295,1174702082,1962949760,71732205,1575324510,-326412861,-402652488,-346685096,108432153,1586171115,121154564,-1014299531,1015026411,-1084160,1586168902,4161540,-1070342283,1575324510,-326412861,168052363,1007515108,1007055457,738359162,106888992,-1017256565,-1192457387,166199338,1183667713,-96040488,-1962467167,-1996021226,1451880518,-62486030,-956410231,-335554490,-263812298,-1207536320,-342228993,-263812295,-1980606837,1451883590,-700004354]},{"sector":7,"length":512,"data":[2122514432,327098838,-992584053,-1977156490,-92894464,1191116936,-1964512298,999872582,-1049295802,-1946401141,-1956708778,1438866917,1448602763,75402014,1569392011,72190722,-1962519157,1979648117,142510858,1569588622,567107334,465509975,-1948283390,93063294,-1962523249,92866174,-1996333687,1435042893,141920518,1913275791,-336186620,108324872,-1962933826,209029381,1566531103,-326412861,119428695,-485994869,-1948677329,-141884290,-4603853,1101984511,-885270025,-880082314,1988886155,-1968770298,-919339196,2013218106,1090876421,-772341013,1600045451,-1957051555,1926769628,35535626,-1962642943,-371064861,-1957362945,508975084,108956423,-1070336117,-218103879,-638107218,-1962639733,-1952123945,1566531266,-326412861,-1207675253,567100160,1190530930,158597638,1946272246,218478596,96266745,854362965,809404671,105286401,145354034,-1258130432,791578656,206081,1962935101,108429573,79298561,-853887999,2603297,-1274784117,1931595086,10217731,-1962522997,83895752,1963262013,285587463,91548153,19990214,11112705,-1962183678,12059734,-383660733,61407392,-1453886464,1383432192,32311030,-1337232000,805702146,72780545,567098804,-1198274702,567100416,1971372790,-18131,45666699,-148779710,17087193,567099316,376750091,17055360,-149981926,-1194226727,567099906,1085589811,1051992525,1183457741,167977990,-1962856442,1035207766,997335501,-150512407,16778822]},{"sector":8,"length":512,"data":[45614709,-9901824,19990214,142016256,1493669096,839405193,805762797,125173505,33965815,-2147257088,1452015329,-851659772,-385649887,116786354,1979646256,105314055,846528514,-851528557,105286177,101319460,1451950384,-851594236,-153587167,16855302,1190597749,1946157320,29982733,72780691,-851246664,-555117791,35372806,145035,-25037013,57806848,-99614530,-998123634,1945831294,21620995,-72575,975604022,646526465,-963968712,-523041615,916665928,-852446207,-1331481055,1929526273,-1070391766,-1172369840,162795211,1154163149,840979279,1864380462,1634476146,544367988,1970365810,1684370025,52693517,37128695,734235648,-1260652578,908184906,27795084,2897547,12064286,908184885,20061833,872844342,-1205924351,-88464128,908184847,49286795,-986307869,-1945964026,920335322,49159935,-857144461,113587712,-628358410,905970619,49159935,-1073996025,-2135358726,869214983,380302272,-400619754,79365962,1140897792,175251917,1954595574,-829456379,2034974721,79882476,-1157357592,-75431174,141755130,1528299347,-219462845,721422009,28491489,118946955,-1880578829,-387108093,-397348764,168624284,1667331155,1986994283,1818653285,168654703,1766066701,1701079414,1920099616,168653423,1816529421,1769234799,1881171822,1953393007,1953459744,1634692128,224683364,-1173180150,-315486302,45817614,-851397632,-1205922271,-397410049,280036344,-351292230]},{"sector":9,"length":512,"data":[-1172459035,-555020348,-2081649835,1448543980,1442979006,-2096779800,-125107516,1342588557,1443133183,-2096711448,1183385284,-396929286,-998046188,-96040188,-443850914,-1957313699,-1371634708,74711041,28186367,-402360577,-443874400,-1957313699,-1957275668,92996734,-1962779253,1435173965,141921030,-854950517,2123061025,-1996125946,1300824669,106268932,-1895271031,74582597,149681715,-1107139096,92995585,1577874825,1438866783,509078667,75401991,-4603853,-1951468801,-146784063,-1017290792,1475119957,-1962467754,-678755202,-4603853,1336865535,2123102091,-1176532218,-1359806465,-1948649663,-202142722,1589808036,1438866783,-1957172085,119407742,-1070342261,-218103879,-638107218,-1962522998,1336865531,41157944,-947126477,1438866783,1586228363,-28344316,1575324417,-326412861,-1933879466,4162305,119417205,-402651720,91554195,-342245325,-31178716,-1560179549,-946470514,-2097151740,1153893574,-1979711746,-1962831306,-661912498,1038663822,-1956749568,1438866917,1448602763,-1962641781,119408254,-1070342261,-218103879,-638107218,-1493959797,872367242,-12240183,91489650,-150803647,1589742545,-373072545,-108855093,1106801646,-1946230400,-1375993225,27852427,994591348,-1961528383,-1376779312,880017832,33931779,-1980265728,-420741564,208993931,1284110595,1220619262,99288457,1291778307,-1933145090,469402074,637891586,26877580,-1023246455,-1643723226,-29556223,-1960479489,-1376779266,-227278424]}]],[[{"sector":1,"length":512,"data":[994639499,-1950518335,-1376779312,-495713880,33931779,-1980265728,-420741564,185091979,-1912310592,638839768,27135742,-661909388,1946295101,512632325,931856790,2005646827,-390057210,-969211815,19139956,-392675264,225706061,-385987074,91488267,-347189610,-1715457126,1166758339,1946265854,1237854979,-4570815,372975231,74842524,-176821551,-972832373,-1039985294,-755561102,-970210781,1962937576,-774703352,870675946,1388534208,1960017,-1957226380,66096126,-29046798,2005532670,735480582,1435060951,1515804926,860902339,1381113554,112720,-400619952,-998044464,-359672,1952143903,-1009644798,-1070397326,-1017256565,233309811,-18432,-1017256565,32039986,-1197292800,1977879041,-1338081245,225575681,225649212,91365436,132842928,1980972176,-1156337662,-1730739730,-1023300957,-135543670,-2081649835,1448544492,28718731,213391339,45633536,889147394,-2080814360,-1073019196,-964491148,3965698,1015276661,-1959169024,214401852,16664263,1191545344,-96040552,92937451,16727448,-1070463883,92930795,-106869,-2021065146,1325334990,2122532858,-562757382,1223,-443850914,110084957,512623120,-919404120,-376716917,-1958086261,184560694,-1912048394,1169093318,1174042030,-31178601,-439222901,521585923,-1946613784,66882511,384601085,870223367,232999414,1157660297,178957381,-486902336,5147123,646520598,654246326,-1957363184,49986540,50002817,-11335565]},{"sector":2,"length":512,"data":[1128487703,-1679232277,1961101826,75399178,-972786432,519963718,20059845,-853213000,243998497,132317936,-16776517,-1962742242,1286865990,110043597,512623122,118882728,-1409253186,651309976,28327552,1348825603,2885262,-930365389,-125054473,942059250,-2080803579,-930413625,-141831689,1191545382,1960852033,1948400660,1946762248,1965046788,118905067,-352288322,-30716117,-243990773,1531105163,-1056717941,620757765,-533987330,102694027,-217639393,-1440698204,-1105212533,250282113,67422347,-533987804,1136196747,-1527534816,-1951743605,1344214772,-24388469,-1073042772,574373236,-11133067,-1409175034,779403274,125116988,1560247680,-1437662091,-968364565,-352256187,3664085,1448005748,-1308164282,178957313,-402099008,-176881627,-1951735317,994790388,-1391954957,1149831047,-1947014146,1976699868,-1995964670,-16665562,1006768678,1006793737,-1957313760,788973292,1996423169,6285318,105810265,839145099,-851659539,-1957858783,72780760,-851246920,29488929,839152896,-1325208631,105314064,242565120,411383,-167086720,-2147357434,-914357387,789449344,29982721,-851181384,-154957023,57966786,-2009020032,-972960113,113287,1442660841,-1398674293,-1949239551,-1021115298,-1073683583,58032296,-1996371072,-1017314210,1458342741,-2130413941,1963072766,105182780,-1976142580,-1952970940,-152841768,16954503,1153902453,-1979506684,-1952970940,-958148136,16954503,28182215,1153900398]},{"sector":3,"length":512,"data":[-1962803198,76088388,-352321096,889094452,-164858622,1963722308,121932326,-774337640,-1266157853,393543938,1342308536,-2080707864,1149829828,1958742788,105676806,867822344,-443851072,-1957313699,1988843244,75399942,-2125696000,1963072766,121932325,-2098704232,46433032,376750091,144173142,-1979530109,-1952970940,-958148136,177287,-25093397,460653108,142338134,-16595837,2062025844,46433274,-150576000,76136499,1577337993,-1017256565,1458342741,901379635,-52153856,-488623444,1442087163,3477246,646448757,300613684,225764362,-1157613894,431554562,-851397632,-1564462559,-1956773835,1438866917,1656286347,-169416703,1988843095,-1568240378,50766846,-1560000885,1183515390,50504456,346275891,51553027,1962949760,21620995,1948597376,17492227,51119815,-1070399487,-1560081757,245564154,50373379,-1560083293,413336316,52077315,50857671,854261792,1965898880,436666118,-2144867581,209005372,50988799,50071239,384499712,1965046912,171868941,175439875,50071295,117376235,-1975123176,-397371388,-998046201,1975520002,280516287,-1863823357,79987461,1015083147,-15567570,1174602758,51165270,91875408,-1962621821,1815904496,113706869,131840,3964998,-1595341963,-1744532992,-23165303,1946174781,4668682,1480394100,-16157440,-2096956922,553557638,-23165301,1023435565,1047986197,781434883,405186559,51250943,51906247,179830784,-2014818304,46433024]},{"sector":4,"length":512,"data":[146297067,-1192039680,-303366128,-397361101,-370474592,-352321096,-1632174091,35580158,-24388629,403980779,404297712,404297753,404887586,404887586,404887586,402790434,404887586,403445794,401348642,404887586,1048778759,1946157844,51552517,-381280021,1031863974,1191605285,1962950016,734497781,-396996410,-998046946,-369652988,1600061066,-1017256565,-1192457387,1105723416,-2091493388,1946813566,235339524,4096771,376700931,50470539,1468729227,-129595134,-2080745847,67305990,1048783339,1946157838,35556112,-1995994365,1187510342,-352321286,35556109,-1727558909,-1980217719,109312598,-2097020158,202814,1183518068,-96072712,1183516020,855829252,51815360,50738827,51265155,-2094369536,2097216126,75399972,-971541238,-1958335228,1452013638,-2082932742,-621346606,-1980217719,1187510870,-352321034,-163133691,-41222144,-15143037,-11074442,1996487286,77064440,-2096577405,197694,-396943244,-997984439,202279682,-1983370493,82574926,1177552070,-113013,-1072955826,92992127,1048773768,1946157818,2086747143,539787267,2105558854,-428539649,51265155,-1592494848,101384970,192152316,16154243,28837237,855829248,1441288384,46433026,-443850914,-1957313699,571628,1475548136,134661974,-2097143805,1946158206,114192,-2096954719,33751558,-335788407,35556147,-1995994365,109313094,184681218,-955943488,48168006,-386107649,-997984603,-2081387774,197694]},{"sector":5,"length":512,"data":[104401524,74646284,51132043,51396235,1048837675,1962935066,250107655,46433025,-59310250,-2097058328,1048773828,1946157850,-152545529,46433024,-443850914,-1957313699,178412,-1577941016,1183384322,71205886,108331011,51119815,922681350,922682106,1996423948,104267524,-25755901,-2096940312,2122517188,108291844,1191476867,1048778869,1962935064,205423377,175374339,50738943,-2096946968,1048773316,1946157848,205423377,175439875,50738943,-2096950552,109249220,-955776254,202246,51028224,50071051,1996427892,50981118,184730755,-1207601984,48955393,-397361101,-443875036,-1957313699,-390056980,-2091453976,201790,512440437,1342112510,41911042,-1978565632,512427078,931857150,76023807,233563178,50214655,-402360577,-998047027,108347396,51644159,117376235,-1956773102,1438866917,45673611,-241506304,1048794711,1962935060,74877777,1249834507,512439275,1342112510,41911042,-1609466880,512426760,1066074878,92801023,250340394,50214655,50870015,-2096991000,1967129796,336002820,1321634563,-964706293,51658371,-1962445568,100729926,1599996690,-1017256565,-1192457387,837287938,-1957275663,2123039862,339641094,1282736131,512439787,1342112510,41911042,-1978500096,-31552764,-15758590,-1999009017,-337368569,-29950194,-1744532990,34334800,1074054275,117376117,-1958345964,-1073000505,1048822901,1962935060,105286407,51512833,-443850914,-1957313699]},{"sector":6,"length":512,"data":[702700,1475397608,104237910,-1983892733,1183448134,272534520,2129155587,46433268,737822345,75377656,-1325197663,737727235,440304632,359989251,1965898880,138314512,158674947,-397371220,-997982572,138314498,192163843,125763339,52051587,-2095483904,1946158206,-129564922,-2097127704,202302,1191118452,7334140,52051587,1462138112,-2080462616,2122515140,158597124,16285315,887620469,373195520,158597123,16547459,1122501493,-92864768,-18290602,-2096839549,203326,113708404,2097928,-26482601,1577239683,1575324511,-326412861,-35078093,171869167,74711043,48966576,1352147120,-1946289176,1438866917,-1070338933,-1192239128,-397410256,-997982744,373195522,359993347,49954435,-1341885440,-1341985960,-397371272,-997982772,1575324418,-326412861,-402652488,1448603564,-2147060085,242559548,50470539,50464387,1178569474,-13419797,2083536000,960266291,1043934847,192217860,1966095488,134661894,-1409273853,-774927464,65130977,65130959,820609992,1015085451,-2147124176,-478267076,-1996202357,1590070079,1575324511,-326412861,-402652488,-1101598908,233505509,1178076298,-1207601916,149618689,3964998,-1070338443,1575324510,-326412861,-1947053336,1438866917,1223224459,1575324658,-326412861,-1947058456,1438866917,887680139,1575324658,-326412861,-1947063576,1438866917,11791499,1426228201,-326898549,-1957275900,1149896310,-2086037498,-167349248,1950352964,-18426]},{"sector":7,"length":512,"data":[-167716119,1946224196,105676806,-2131825888,-2147350964,871302756,38046144,2122971275,105182974,-1978698488,-1952970940,-152841768,16954503,1015754868,184843307,1460829951,-1979419393,1352140612,-2096989976,1183385284,71601150,-956004032,33489476,-1979425653,126354502,1156999915,1316291590,35454593,1149906293,-397371385,-998047639,1975520002,-1375287499,-954241535,52429892,-1744354166,-472786805,45385670,553961217,-1195840765,-397409792,-997985677,71600386,108314635,134630528,1283496939,29295622,1183667968,1149915140,-397371385,-998047239,-28931834,1962835513,-13506301,704923274,-1956684060,1438866917,1586228363,352027396,-75296387,-166953984,1073860231,28837236,855829248,1438866880,-326898549,-1957275900,-13433738,42133590,-1979530109,52692548,1014301244,134628598,1149898613,-661940217,-2013862959,1946223284,721718055,1183384644,2126515196,1962889243,121932292,1994936472,113541889,1962690107,105676807,-16608,-1996209013,38061828,-947191808,-443850914,-1957313699,82609132,348018263,-335596798,105155095,8628632,-397014156,-997982343,24395778,147227463,47986233,-947133581,-443850914,-1957313699,106387180,556675,985610357,106334977,1208239755,1407715189,-349736448,-1976136888,292833281,225769275,-1996340085,-397013946,1935540282,80118576,25886337,-771029901,-4716939,501979647,-1014769013,-1310994161,-1259613437,1914817864,76124905]},{"sector":8,"length":512,"data":[-1996335991,855738934,1583286208,-1017256565,-1962127733,38550007,-964490124,-1963032316,-101550847,-628408341,963779587,-1047604341,108394299,20323897,-1014815117,-774123249,-773074453,1979137003,-1579613431,-668270168,1253359758,225583565,74839867,20321929,-1962637422,1448592337,-1962258805,1451951174,142510854,-66642345,1958742675,184124179,-771027339,766511737,-2082736214,-621346606,865269643,1958742994,-1812859134,-2020412937,1009779923,67270201,-1031034329,-495598837,-1404107384,1149764998,-147107841,1582888306,1438866783,1586228363,-829950460,242491393,859964088,-841905207,-385649887,-2013859318,1971323342,8513795,-1962389877,119408214,1476182067,-1947169962,-1201282054,-1359855606,-1957612939,1237986255,567087331,-1645214820,162792563,-1073002005,-1186582668,-356909054,-851397630,-1274776799,188017417,1494906048,-974399605,735021905,-1675506230,1939730435,-351685628,1975520026,-829950442,192167937,-2147066229,58006079,-117117960,1495009464,-963968398,2146000734,139365361,-1274653045,1931595072,-351685628,200008685,-152603200,1073860231,-628422028,1964654464,-689178621,470333689,-1957310229,73305068,-821663872,50013,0,0,0,0,0,1766596675,1918988898,539828345,1126777640,1920561263,1952999273,1667845408,1869836146,1126200422,544240239,892877105,1968046336,1881173100,1953393007,1629516389,1734964083,1852140910,658804]},{"sector":9,"length":512,"pattern":0,"data":[20971840,6029404,6044225,540697381,622870077,2675,684837,6029404,774766638,1543527424,0,1852727619,1394635887,1414742613,1847615776,1870099557,1679846258,1702259058,1953451520,1869505824,543713141,1869440365,1224767858,1919902574,1952671090,1836412448,544367970,1881171567,1835102817,1919251557,1850278003,1768710518,1634738276,1701667186,7497076,1868787273,1667592818,1329864820,1702240339,1869181810,1632632942,1847617652,1713402991,1684960623,135659520,0,0,0,0,0,0,0,0,0,0,0,0,0,0,539,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20578304,0,0,0,0,8192,0,0,0,0,0,0,0,0,0,0,0,-2122252288,65921,0,0,0,0,0,0,369098752,219677186,202116105,-63481,302846719,1128005378,1279870559,1313431365,20294,0,1312,66848,0,16908288,0,33947648,0,58982400,0,67239936]}],[{"sector":1,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1848115884,694971509,539831040,168624163]},{"sector":2,"length":512,"pattern":0,"data":[1125222889,1702260335,1684370546,0,24402509,524297,32,9961471,1992294806,2555904,30,6291457,7733287,17039399,49283111,49938471,50528295,64946215,77266983,39]},{"sector":3,"length":512,"data":[0,0,0,0,1,0,536870912,858927408,926299444,1111570744,1178944579,1684234849,26213,0,0,0,0,0,352321536,1364350208,1448562771,-326427130,650053390,376343296,7768894,-85402829,624733185,-1073074060,-1108867724,-386733311,119472601,1532518238,777869913,2229903,604409646,-13740032,771761206,2242303,26667211,1017957355,1022784549,1010791469,1011315755,1010725964,1010463852,1010659888,1010399033,772699440,474755,772175104,722630,179851312,653733376,-1557266425,844627975,774909156,460289,-30536469,-352321018,117321221,-1427439613,645158972,108159292,41908796,1480384292,1144787572,1128013428,1396451700,1323835508,-11409151,84330030,-953285120,268437766,-1870927104,151439150,-352318976,-30502799,1442842118,-1014762613,1921728002,1048587778,1962934278,3976202,-504874124,775351040,462475,225757451,37650478,91553792,2680918,1017927262,-402295808,-152371008,1048587870,1946157058,244002316,-922025977,132645748,14149632,-19273378,179098163,1107522752,-903087893,-2115501194,-1957248256,46367731,37915454,54427694,192151552,-1014762613,1384857090,855829250,-1959898158,771754294,462475,-402650136,-1897398192,-379692288,1347026575,-768359797,-661915913,-2013857960,-1039445798,1392997464,1543497704,-2144465941,574,568853365]},{"sector":4,"length":512,"data":[1019448064,772633098,278144,772109568,329218,503319739,534191886,1239121,-921975975,-1607595138,-397344757,-497483772,-2119515143,1946172159,347718401,-1959898368,503316510,649731854,-851397632,-1084547295,-2117926874,1946167039,653230560,-389051648,868483035,44183232,60960256,94514688,128134656,113651200,773849099,-1023408478,163580651,542333267,808594995,-852446128,1038124577,443876116,-1106833832,-21036964,2144520,521053427,-1274464582,-350106342,521048140,-1274710342,102878473,-883900365,-385499462,-1430650192,44755205,567089588,-1006708598,1929660392,104380942,4037202,28835840,-1608397492,1074006166,-1173979998,-1705900424,61,839127016,-754530624,113639432,-973076268,17356038,148244166,-12681215,-1468719096,-1435173060,150879872,-1264356352,-31339239,144089792,150865464,-1974430604,-1207370210,567100425,-1023996814,108270080,-385518406,1347945004,567086516,-32964960,218414024,-1962933830,1478872522,-2146340264,-133364674,1048584819,1961889028,45082907,150904912,-979222524,113359366,4037202,-2115502080,-1075095549,874416976,61728777,67698336,144155200,-1274501726,144161358,-855636295,-33066463,-402074618,1320420285,-855071302,874416929,-165448951,17355782,116794229,1963002067,115523100,1149956867,2025851404,214139664,154410633,117353451,-2031613741,-32077309,506639368,1468735949,-23060720,-1144455672,28904708]},{"sector":5,"length":512,"data":[1478872320,1156252531,218414736,1946172544,1015086127,-1089571611,196675881,1973875456,-703660519,220511752,1946172544,-449019885,515837556,768265,2104862451,148180734,-1593610008,102959315,1836386517,-1572862888,-1012791117,-1279591416,148356872,1929484520,-26679037,-1089944646,-1964504857,-1947045375,82411980,-1240561393,18016265,-23010446,-1572862968,-1516107625,150446600,-1576488030,1320421571,-1190594630,567083030,1320423283,-1190594630,567083016,1994988402,144161281,-1275066439,1931595086,23587075,-1274501702,1914817870,144161524,-1207959367,567100161,-1207396422,567099648,-1190615622,28835840,-1172189885,12060837,-1172189887,129566899,-851659776,-1556319711,-1011218203,-851659768,-1557106143,-1273100043,-32077262,-954086136,7239,17950751,-308209294,-385479928,-586806520,-653915384,-401509368,-445448096,-369255959,45744365,-1875121402,148967051,149100171,149233291,-849935944,-851528671,-250705119,-216626424,-182547704,1459730440,1051992525,-169336371,102349312,4037202,-1070465024,-1705897493,61,1376176826,15770,-1258311680,1495387468,244040697,512428470,79300823,1048793357,1996490973,-653379318,-1962641656,-1274488562,1914817855,1975598042,-1982856234,688502806,-2096572154,580894,-1949815975,-2096568546,585022,238619255,74909929,149491339,567099316,-1053054094,-805067147,163190409,149489193,149757571,-1195116544,567098624,-1951664014]},{"sector":6,"length":512,"data":[1107474648,-768358093,-1414848051,-1414806901,12112435,-1205744318,567105280,-1951678069,-1161581630,1307117031,218413823,163057291,242534955,149233291,567099572,-1053039502,378215029,243993016,-903149126,512480372,1085540597,-898489907,-965426885,666420217,-1596420608,-922875650,-402652998,242352272,251805313,108374613,-351465026,850694231,150869642,1200234957,740232726,-661939976,-1215568943,-167048256,512366709,-1397094146,-1337674749,-1324829427,-1960719008,125275610,-24951226,-2092600065,410386174,378156724,567085310,-470295925,204473915,1913399998,202948099,-843118818,1227017,-2136673284,-133573314,113640821,-1602221123,-922875650,856277179,1103793106,7546573,-1185889448,79364097,1478872333,146326360,-1205744372,567086080,1376176826,15770,-1202666752,567100424,163057779,1914817860,12777233,-351570672,27889670,-133991168,1492763480,1464947651,512490582,-490862284,-1074593018,-947713897,768259,-272718605,-1074593018,-947713883,768259,1600038131,1455643481,-490843305,874416902,-1074593015,333973801,116375040,154410635,515896067,321545,-1017225381,1017956659,-1442548690,-1325929663,150569760,1101661309,62518763,1235921920,1455684469,-859942569,145997574,-1190934653,-1527578612,-1090070594,-947713853,833795,1599710451,1631830878,1953459822,1398362912,544175136,1699618913,1919907700,1919164523,6649449,1850279254,1920102243,544498533]},{"sector":7,"length":512,"pattern":0,"data":[542330692,1936876918,225341289,1850287114,1768710518,1919164516,543520361,1667592307,1667851881,1869182049,93192302,1635151433,543451500,1634886000,1702126957,95158386,1914728270,544042863,544370534,1953724787,1864396133,1701060718,1852404851,1869182049,1768169582,-1073714317,1668172037,1634757999,1818388852,2037588069,1835365491,2053731104,99156069,1953724755,1948282213,1936613746,1920099686,168649829,1309017088,2037588079,1835365491,544108320,1634100580,544500853,1986622052,658789,1850279451,1953654131,1937339168,544040308,1802725732,544106784,1986622052,1663377509,1851853325,1953701988,1701538162,2037276960,2036689696,1701345056,1701978222,7955553,108791354,1850277953,1953654131,1936024608,1634625908,1852795252,1936286752,1852383339,1769104416,622880118,1628048739,1931502702,1802072692,1851859045,1701519481,1752637561,1914728037,2036621669,-989430272,218120710,113704970,1395543881,21337,1291845632,1397703763,1398362926,1330184192,1398362926,0,1308557312,1397703763,1398362926,-16777216]},{"sector":8,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1090519040,1330207802,1398362926,0,1547321600,1329877837,1498623571,1090519123,23610,0,0,1090519040,23610,0,0,0,65792,0,0,0,0,0,0,0,1090519040,774528058,42,0,0,0,0,0,0,0,1397555200,542330692,1498619936,542067027,538976288,1398362912]},{"sector":9,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7340032,1301296363,1397703763,3288627,67586,50462722,587857,262161,1,0,0,0,251658240,0,872022017,-1127182656,118914048,906000571,1444820933,733958934,768380,-2144948996,57933885,-1442477530,-236796790,1200168710,721929986,378207100,332234237,278947442,653760636,100891670,100891676,1067678734,2084021116,-150986568,-1954803418,58460958,-201897789,2083980801,-1593507653,-1796703169,-402542592,426901673,196737931,2111159808,225814259,-1105166451,196705760,1957098240,2104933912,838885864,1578552804,-1895526625,432865860,-344080450,85762539,922210867,-1057063925,-1585693534,1034124343,117488508,-394512479,413204543,990259836,-397393796,1918369869,1007036623,17593980,-142854394,58460966,-1965429800,-1971579602,-1954677482,-360956642,7340032,1958742700,-1290882015,-351220225,-137219085,-25421770,991332546,-137219204,-2005132746,-1552143850,-1262257095,957778690,-789935492,-2133929778,243974374,-511673285,-1966208449,-1971574218,-847381226,168674067,762212174,1953724755,1679846757,543912809,1679848047,543912809,1869771365,1376390514,1634496613,1629513059,1931502702,1802072692,1851859045,1701519481,1752637561,1914728037,2036621669,218106381]}]],[[{"sector":1,"length":512,"data":[1936278538,1866604651,1713402991,1970039137,168650098,542066944,538976288,1398362912,1329877837,538976339,5462355,0,0,0,0,-1437270016,-131072,-1,201722868,199363536,33554689,20971584,134218238,256,16908288,7340544,33489536,33556480,0,33554689,23593024,150995708,256,16908288,7340544,50135760,33556736,0,33554689,157286624,251660281,512,16908288,7340544,66651552,33556736,0,1280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1526726888,96504912,243990544,-939327202,-1946464375,50406926,-145782328,18878091,-1946595447,-1996413938,1049359695,378208552,78709016,244048595,451084566,280347942,80184065,52878732,-2097080274,-402456123,67231118,521070306,-1962868545,281444850,734759681,1487205326,-78147846,-67541109,16084991]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}],[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]},{"sector":9,"length":512,"pattern":-151587082,"data":[]}]]]
      • PCDOS100.json
        [[[{"sector":1,"length":512,"pattern":0,"data":[1322987,6291456,1294808864,942504289,49,0,0,0,0,0,0,0,-930285056,12245134,-1127051776,-1577354240,-661750778,12238990,-842888448,-398364141,-76414888,34507566,12276092,-1177406720,29229064,28333568,332202676,1482564210,721479656,-32213818,-1107185211,-969211896,-259324813,1452671467,786295632,2080648959,-1199749954,844135746,2133110015,-1269429388,506638,-346156851,12305392,309504,-855506504,879894035,-661731188,-1191182145,-2144993269,-2144985075,536879245,-1074535865,1992163328,768381,1973875708,2146063,-1182956866,-1494024181,-1021377931,-394462786,11861925,-115403059,1309281731,1395486319,1702130553,1768169581,1864395635,1768169586,1696623475,-227577230,1699875341,1667329136,1851859045,1953701988,1701538162,2037276960,2036689696,1701345056,1701978222,234447969,416088074,1766066701,1109420915,544501615,1818845542,233140853,1380974602,12568203,65533698,-1017619752,1700949842,1327527026,1634030119,1651056754,1869177453,1868767264,1651093613,1936680045,1868767264,13217901]},{"sector":2,"length":512,"pattern":0,"data":[67108862,-268107712,8390655,184590345,-536018752,16781056,-16703471,1611989327,25171713,469757977,-534969920,34602753,603975713,1613103088,42991362,738193449,-265485632,-1,872411185,1614086976,59768579,990093369,-532872256,67124995,-16506815,1615135823,75515652,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,100687621,1661345889,1617233472,109078278,1795596393,-529725760,117468934,1929846897,1618282304,125859591,2064097401,-528676928,134250247,-2096619391,1619331136,142640904,-1962368887,-527628096,151031560,-1828118383,1620379968,-1009911,-1693867879,-526579264,167812873,-1559617375,1621428800,176203530,-1425366871,-257094976,184594431,-1291116367,1622477632,192984843,-1156865863,-524481600,201375499,-1022615359,1623526464,209766156,-888364855,-254997312,218157055,-738201391,1624575296,227540749,-619863847,-522383936,234938125,-485613343,1625686000,244317966,-351358977,-521335104,251719438,-217108481,1626672960,260110095,-67112711,-520286272,268500751,51392511,-251265039,-980993,201322761,-250740751,-978945,335540497,1879048177,293672721,454143999,-249753151,302063615,603975969,-249228735,310454271,722641193,-517139775,1048338]},{"sector":3,"length":512,"pattern":0,"data":[67108862,-268107712,8390655,184590345,-536018752,16781056,-16703471,1611989327,25171713,469757977,-534969920,34602753,603975713,1613103088,42991362,738193449,-265485632,-1,872411185,1614086976,59768579,990093369,-532872256,67124995,-16506815,1615135823,75515652,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,100687621,1661345889,1617233472,109078278,1795596393,-529725760,117468934,1929846897,1618282304,125859591,2064097401,-528676928,134250247,-2096619391,1619331136,142640904,-1962368887,-527628096,151031560,-1828118383,1620379968,-1009911,-1693867879,-526579264,167812873,-1559617375,1621428800,176203530,-1425366871,-257094976,184594431,-1291116367,1622477632,192984843,-1156865863,-524481600,201375499,-1022615359,1623526464,209766156,-888364855,-254997312,218157055,-738201391,1624575296,227540749,-619863847,-522383936,234938125,-485613343,1625686000,244317966,-351358977,-521335104,251719438,-217108481,1626672960,260110095,-67112711,-520286272,268500751,51392511,-251265039,-980993,201322761,-250740751,-978945,335540497,1879048177,293672721,454143999,-249753151,302063615,603975969,-249228735,310454271,722641193,-517139775,1048338]},{"sector":4,"length":512,"data":[1112359497,538988361,105729859,0,0,0,131831,1920,1145913929,538989391,105729859,0,0,0,393997,6400,1296912195,541347393,5066563,0,0,0,1245956,3231,1297239878,538989633,5066563,0,0,0,1704708,2560,1145784387,538987347,5066563,0,0,0,2032388,1395,542333267,538976288,5066563,0,0,0,2228996,896,1263749444,1498435395,5066563,0,0,0,2360068,1216,1263749444,1347243843,5066563,0,0,0,2556676,1124,1347243843,538976288,5066563,0,0,0,2753284,1620,1163149636,538976288,5066563,0,0,0,3015428,252,1162692948,538976288,5066563,0,0,0,3080964,250,1162104653,538976288,5066563,0,0,0,3146500,860,1229734981,538976334,5066563,0,0,0,3277572,2392,1430406468,538976327,5066563,0,0,0,3605252,6049,1263421772,538976288,4544581,0,0,0,4391684,43264,1230192962,538976323,5066563,0,0,0,9962244,10880]},{"sector":5,"length":512,"data":[1230192962,538984771,5066563,0,0,0,11404036,16256,542396993,538976288,5456194,0,0,0,13501188,1920,1347240275,542328140,5456194,0,0,0,13763332,2432,1414680397,1162297671,5456194,0,0,0,14091012,6272,1330401091,1380008530,5456194,0,0,0,14942980,1536,541545794,538976288,5456194,0,0,0,15139588,640,1162625347,1380009038,5456194,0,0,0,15270660,3840,1230198093,538976323,5456194,0,0,0,15794948,4224,1263423300,538990917,5456194,0,0,0,16384772,3584,1163217986,538976288,5456194,0,0,0,16843524,1152,1330468168,538976338,5456194,0,0,0,17040132,640,542134096,538976288,5456194,0,0,0,17171204,768,1414680390,538976345,5456194,0,0,0,17302276,768,1145979204,538976345,5456194,0,0,0,17433348,640,1129464141,538976328,5456194,0,0,0,17564420,768,1380013139,538976339,5456194,0,0,0,17695492,768]},{"sector":6,"length":512,"pattern":-151587082,"data":[542392648,538976288,5456194,0,0,0,17826564,768,1279345491,538989381,5456194,0,0,0,17957636,640,1430995283,538984786,5456194,0,0,0,18088708,512,1129466179,538985804,5456194,0,0,0,18154244,1664,1128614224,1414676808,5456194,0,0,0,18416388,2304,1128353875,538976325,5456194,0,0,0,18744068,1920,1280065858,538976288,5456194,0,0,0,19006212,2048,1296912195,538976288,5456194,0,0,0,19268356,4352,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099]},{"sector":7,"length":512,"pattern":-151587082,"data":[-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587082,-151587099]},{"sector":8,"length":512,"data":[-385785111,-1293352851,14215424,-385816343,988348708,55699713,-385658135,11600196,1229062178,1444959055,1769173605,824209007,-1607454674,1244475954,942500981,168624177,544503119,1881171567,-228233119,218106381,1769099274,1919251566,1969317408,168686700,1091177728,1226864757,1696616239,-227577230,771754509,167995040,1377072576,-855526254,1024029718,74805760,-1073082192,-883235190,1711719982,-70319357,-1514515888,8710144,600660058,1141509583,1684633193,1986994277,1818653285,168687471,-1336241664,109456896,-1073085594,-1840112267,382533812,-378224629,1970405437,1007726594,772109568,57026184,-883235190,1448300629,772715607,-855636037,1532911376,1355504984,113651282,-1174404251,11796480,1052383181,549778944,1337593973,96794112,-2144466060,16999734,65593717,-883402240,-1406209401,125075236,1610671258,-2014057728,1347601394,-1275068230,-1173041918,-990511007,-402426866,-1973747750,1355504358,-1174293422,348979200,1954596086,6404804,11844843,-930284853,-795944818,-83663428,332260402,349021104,399311284,-1071312435,375040,33941715,402688,37494644,-523171979,57149126,45529857,130537475,-2017001472,2,-1247614767,12066306,-1193767424,1856176224,1812383488,-956264448,-1761607674,172800,-1996446533,-1560280034,512294918,245563404,270436608,1221376,-1912581960,444376,100663296,-1912557128,327727552,14727420,-13379442,-1510738037]}]],[[{"sector":1,"length":512,"data":[-1245831417,39426,-1157955407,448004352,243999181,-377421818,-611581696,-661731188,-1274910278,169987343,-952732224,166406,-1945712896,-956301310,16938758,-853036032,1008657185,-1910868735,-1899786533,4242643,-1957642189,-1275035626,1394724122,1342243000,42908363,2063515112,1329791486,1312902477,1329799236,205,0,0,0,0,0,168624128,543449410,1830842991,1769173865,1126197102,1634561391,1226859630,1919251566,1952805488,168686181,46269440,46269122,706,33554432,33554689,20971584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-352144384,100905986,235347486,-47806177,-64583676,1748926468,863305987,-1896467682,-2032104738,520422438,561300538,-1572797358,-1480981309,-41621500,-1897057506,436651741,113647108,522060828,382533812,-1845448614,-151648074,-997800706,83862417,-947126090,-405674031,-405674031,-947782909,460456447,-271523961,-416644940,-533012597,-527826314,-389772720,710410317,-29068092,1409044680,-63012858,460587524]},{"sector":2,"length":512,"pattern":0,"data":[-1185811573,520487168,1707017998,-203453695,521034149,117469672,-1156191397,118358373,-1962908184,-1956968461,12145147,1504047873,1476577152,520094952,181139463,-1268288320,987834889,-1979549984,-997568288,1476410344,-456080342,-471073790,-855591785,175394323,-58669173,1476621440,118368235,-997537909,-1090516295,-1359870744,624010,83824267,83699339,-872872161,96338352,-64583168,332222468,676905586,33881862,150569160,-973208458,230883761,1936607498,544502373,1802725732,1702130789,1919903264,1769104416,1101030774,1851859002,1953701988,-445945486,1851853325,1701519481,1752637561,1914728037,-110861979,657933,270549120,50595849,100794626,67896332,202113032,2]},{"sector":3,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541406240,874524980,153100356,923353668,1163010604,1162690894,537529634,538976288,538981684,538976288,538976288,538976288,220209184,1094201354,859316280,540356640,538976288,538976288,538976288,1464076576,1313165833,222645569,1094201354,909123649,540357664,874525237,859119665,540357664,1111755040,573322761,1396789829,168632901]},{"sector":4,"length":512,"data":[51679209,1396395264,1077755452,1095912255,-352275391,771523102,11540854,777541839,363529871,777058972,363542271,1998911874,115444457,1448563998,1347637586,-1423537874,378285589,-863234643,-725822322,-2010186986,-1978303194,-788482084,-58524445,-1140621812,-13756460,-100630121,-1423537362,378416661,-326429267,1476413064,1582979419,119496031,604365775,202399761,1308693761,1108423441,1527852305,403606801,201383953,1494119694,251916035,1326282765,772154882,-2130403066,1493228802,-586296818,-587145971,-587145984,1040243968,-1861859834,504259085,1309814802,1913017862,571672081,-1106023149,-1023365101,-1014047949,436651558,-970580476,503585798,20766858,104600436,121376628,138152820,171706228,11535220,-12654141,-1710259736,6291471,1354926787,1477408232,1610617498,1580974848,-1927776500,-1947479752,-787909831,-772812305,-101723665,-410922031,1354960895,-4226892,69789711,-74726568,-570168367,-271458557,242433931,-489561391,-489561391,1042305,-410974997,-99880960,-1094500471,112399391,-1189771585,-1494024188,-251459468,-260715522,79283193,-215961600,-1963625042,339131331,-1210545449,1676198911,1392144897,583710,-389849337,-93191850,-661731188,1946139880,30992625,1912616936,-448823063,-208989580,-1189771585,-1494024181,2105674868,-160153601,1929401064,646628324,-722070127,-964484062,115638287,116846452,1962874282,2124530659,1178288149,-1555074296,78714238]},{"sector":5,"length":512,"data":[-768352045,-757997359,-2147393909,-201858845,1720375947,1493580544,1392866324,1526922984,51893434,22414298,2118028227,2117814037,-1994951928,-2095743426,-633659197,-1057093006,47835218,399817562,1692976120,-389809917,-5177515,-130353038,113702004,-956361659,478930183,185759373,990409947,58133598,-401966104,-495714494,-402528024,-1070464205,8186051,-964462734,361938693,1912643560,-15144852,-8231054,-1100843777,-1648421498,440597,-2034260493,361938453,-1409283143,41238332,1135216522,96925154,-22026234,922695795,113710462,-60034,1493101032,652748915,-1090810881,196679046,-962268416,-15448826,-1089102402,112792966,-391777536,-1301020986,839039720,-1259813952,-1006653438,-1442396626,-930349035,-2034253682,-1393390827,363438638,-12844876,-1031599499,113672967,-1392548726,-1859745746,1959957,1015206258,-881526496,-402650183,91557544,1979260988,1914715326,-270357830,104345283,-126741434,-439249512,341552779,-29431613,-8216718,-1977191169,-1057095610,197624746,-1196703693,-1381302144,-1515859829,-1409792885,-1424654687,-1414806901,-1431584717,1569269443,-1010814442,360580807,1183514623,1808896,1183449184,291899904,-855765896,28632436,341116475,104521076,208999509,340985543,113704960,16716885,341378759,-1192689665,-806858752,175265793,1946633770,-371657034,-812973947,-922824445,-1662457995,21358848,-1950154576,-12745990,-947715211,394101255,-152210177]},{"sector":6,"length":512,"data":[1962876485,-402289945,678625087,-1275050358,104541697,427103317,521018962,341182150,1360956160,112916,340989579,520197352,-43587494,2124499058,1161504277,641692950,-1994895989,1435182604,39094544,307596070,637817993,-1995156085,1541996116,293503489,-971475711,-402648762,1364328475,1390956627,1499158529,-19856550,-1326484024,1187431168,-5242863,122063555,-1978507635,11865678,-1023060341,256246680,-725888885,112919,-27465533,-2034291854,768277,-1359855696,-970055820,18196998,-270000558,-401247236,770244302,-448823043,1558718324,536245245,-1006653350,-8193675,-1958972161,991093516,225905742,-1915122861,31986294,-9181176,-1090811045,96015750,-1510759424,-1441427040,112312371,-1847022605,-1070355699,-217665193,-1545055318,-128034048,1072258823,-1863823106,-1974446080,1503854694,-9902060,1476395752,7137475,-969999757,1422598,1006634472,-1007782911,62991255,1727484624,-670868991,1446707380,-32345595,253115332,-32869888,169229252,-33394176,786747588,364193290,1426081418,-1356429010,-1909523947,773172502,363538059,-1993464627,773172006,363665036,-728839028,-1356428498,1012792085,-1017482238,1426081418,-1705881261,6291477,1566269274,1158084291,-126550252,340068038,341417984,-1963011608,1398079558,412766801,1509974016,1935498079,113651419,-402582091,20774758,784589172,363542213,856972430,-1094676800,-2000748534,-1515870976,-1899459419,-390033704]},{"sector":7,"length":512,"data":[-1070397409,-1391030534,-1423537387,-1093104107,-2134966136,1487250709,1582979419,119496031,788475643,820516224,50915334,686294763,73656326,17122787,13796096,1458060779,49342464,1323836907,72083456,1239948779,48293888,1105725163,71034880,363542213,-486257527,66822,637588099,639714697,170087816,637826294,-1960544888,645866696,-2145368696,-506363679,-980757807,-1993940342,-1607594939,-1178397262,-91553791,1979661698,130515715,-1960753781,868426581,-1308178743,-1017445355,-1962571184,-167047563,-2135030155,242583808,-1014047860,-611398772,1492941544,-24913550,-1241353664,-1106343680,364552981,364648073,364265097,340336267,364387977,363988678,-1291401728,-628424683,-895228169,-1014279659,56354551,13796291,-861710731,-1580168427,1586173386,1943223041,-1544292537,378082756,-796191288,-1576843742,-1047849551,-754692470,-1038710294,-1947797739,1225130952,13796116,1235294836,1977153300,-768391167,-1096550665,-957941995,34976262,199477387,-1022200179,363988678,1539912449,365470147,-1072965237,1177226612,735639297,50623448,-1545915453,-1014295090,1995952691,366125825,365958793,1569400515,1435182618,1960512284,1942629149,868877064,1569400530,-387587304,-8259216,-596439048,-498926713,1245823986,-1038709821,-1323398635,75425813,991278242,1964266262,341155848,1946175034,1443296832,376766228,780883282,512431191,28906577,1393986304,-36968428,116808285,1979651508]},{"sector":8,"length":512,"data":[1360956172,112916,-47847342,1393985882,4622868,1436745908,1462667540,-1291401708,1049297173,-141879880,365825675,915009795,915084728,906171473,851645896,-8263488,1258720774,1944703252,-1510759423,-996031737,-995934187,-972670187,1996599317,-402608126,-142082209,118359582,340467342,24373713,128316324,1443284511,-154992364,-15355130,-1314904204,985726485,443941702,365043339,267975553,1988957555,-125376494,365051529,364906239,-1314783056,-104597483,1017818307,-972851955,171706884,192279520,856138728,1976110070,-1996420025,-1995159754,118863934,1049299317,-2144987722,-377481651,-1006239523,169101630,-32607013,-387942965,1017837598,-336011238,-1960898858,185878326,-2136050186,-2146108610,113706612,-8383237,-1168701871,2028475643,1493655301,-2112553538,-1921705412,-1331029328,121301002,-1679034829,1340721459,15198465,654147048,-2112463477,-1636499457,272993062,308120358,365561387,365698587,175495794,-730546165,41140539,216582283,-1039234050,-30545899,-1066022645,364910217,365043337,365837955,-402426880,1048837821,1946162642,-17569620,113652082,-1979640397,-1961512682,-1961504242,-401227234,1347879507,1260293662,-74848236,-480552673,-117735058,-1308069105,-1073283328,-1948194027,-1592412618,-125102664,340330027,-1960390093,-235467188,364774971,113648244,184620466,-971410222,51753478,-1912157653,-1827386618,-372129741,-206962317,1074238379,-24393589,638960289]}]],[[{"sector":1,"length":512,"data":[-1592113783,-1993992768,-1163846587,-1139373291,1225253653,-763117309,-1581039360,-1073015344,-828139148,-28055531,113742194,5576,-335673112,918888070,-478145463,1960512127,1959525918,1976303120,440183840,-1565836,-336141818,-1092047852,-535151370,-1408570376,91494972,-502924312,243998710,1049302462,-1762978378,921225355,-401153027,292749819,363988678,364552449,364648075,364265099,8186307,-973010199,-402579899,-102171626,1166616071,1569400340,-32234,-1125611660,365601276,365696651,55171811,13796289,-1979615497,-388823986,1166747216,1435182608,24573714,24433163,365339456,-1039234216,-55449579,365043337,364910217,544522795,-1957592349,25290952,-1954188712,-1072264248,1950958101,-56104957,365043337,364910217,365837955,-1962445824,-401227234,-761135824,1958742805,-1006239438,-45094891,364054214,-1323922943,-1038185707,-770798827,11659285,-1910615977,-401323234,1495267961,-1308040357,-1073283328,-1578702059,-1073015344,-828174476,-48764907,365430471,-504889344,364421628,340330027,365561347,365696651,-1962880381,-1237414966,1161504277,1293624848,638087698,638600585,-1961732727,-384451058,-538313122,197692414,758871242,-628948991,24573696,-754692470,-389510168,451148763,1912650472,-1237414947,365601045,272992550,638962849,856835465,-4537399,18147343,17909446,-617357333,408782630,-713762037,-352256024,-1974250773,-1057094842,-1037377398,1989005707]},{"sector":2,"length":512,"data":[47378,49617896,13992648,745785915,994296970,1273853179,365043337,-1957506773,23525313,364394123,-1197226493,727341077,-1071775270,300440341,-1008825600,-517289429,646499582,-896854607,-1974350101,1246364750,-754261293,1493849603,-2097509437,58064701,-1190672509,1166671873,206932768,-355344176,-494217008,11982474,1379205059,-1014279343,994300811,696126558,2130706749,-4564183,6088719,1522608984,54658191,56003266,-146669386,734563298,1997912590,-104254718,-194058045,2118650996,1709741001,-1828489996,-746077973,-2115452277,-489124876,268417715,-957057048,1526796614,1172855385,-2029744140,1979649019,-1237414965,1569269269,-768359656,1962160104,-389575688,-130157488,1926793999,501793773,-117472780,-1946782961,-386667553,963835016,1962934146,360620349,373655846,1053094795,-4713399,-1459209728,-1425443563,-1414807298,-1441427040,-33536374,-1180390720,-1510801403,179945523,-1532628224,1170679491,-1325400554,-1993948161,1053038173,-1070394295,82740138,548971941,244000,866823155,702912,-1012225037,-1946843672,1389327098,373656350,2124619534,-198383595,-2115412217,-200873729,-546111568,639747971,200101259,-1190955575,-1070399360,-8203725,1175745791,38046534,-1387204105,-770969097,1074033754,-1421737611,-1330986357,1090093824,-2010732173,-1993424091,773081366,340467340,-1899459389,1529777112,-173086700,-1978507635,-1057094842,1242322571,17909446,-989770101,-1995068618]},{"sector":3,"length":512,"data":[1418265180,72124678,-1022473076,1260293166,-1899459564,1225181144,-1593802732,1537414237,341156116,460645386,-774337640,1571785699,1443284500,378208276,1371214931,112916,-1963491096,-1256962546,341687808,-1957277267,-167122712,-186492578,780873411,1183454299,-186072320,558205437,-2094836344,1933577853,611682544,-1962887485,-1608577318,-667282362,-472780173,341677963,341513865,-1899459389,-1242395712,-1073042176,-594873740,-1019544182,948045174,-1979550707,1255181021,339583022,339714606,343654230,-41228918,1827206538,1954495490,1946696758,1947024434,1946827845,1947745381,1947941990,1946172514,1945254432,-956388845,167864040,986936804,1188000763,-890517506,1994917808,-339481855,36563025,-1089687209,-1359871995,-773223585,-1493225755,-391507915,-2007039668,-956366987,-611531380,-577846386,-1978369090,-1012599858,837291440,-385175551,-202899156,-1333531649,19064924,-1513378,339714094,-385766168,-167051426,1323831668,92939776,124985404,292817212,167789544,168261092,-33327873,1307135695,-45131777,548458122,-486034605,158772750,25002534,-32934903,787669707,339680810,-889004502,-66592384,-948674725,-503314456,-20911109,145772494,-1342130200,11724832,-1377236816,-385830912,-880083165,132894506,-352309016,-1274957566,1962031616,1962621455,-391468021,-939655049,-337459458,989781993,-17206021,-706132281,518398,-117247741,-385954839,-880148169,393531178,102003785]},{"sector":4,"length":512,"data":[-1957230818,-1359853570,125110111,-889007626,1573113642,-1325488151,4646976,503732063,536803816,-561357305,-151054615,-24188460,-1461118288,-1257324802,1309682447,806360847,-384845296,-552615921,-988822257,1931492367,1946762257,1588613133,1476397032,48971788,540852874,2134670706,-30538380,1343503622,1476402664,1610615194,116796928,1962873920,826001,1019412576,1008038928,-1022266365,1610613658,1022915584,-1695779565,6291462,1610614426,1947220992,1963146289,2107649762,1946827797,1963539460,-396578808,1810431908,-1909523714,773172502,363538059,1515805528,526212958,-383529721,-2144407749,18104374,1019461682,1008759821,1009087496,773747977,202653088,1373173496,11913354,548407267,-486580248,784554489,339543750,-10491648,1024392750,-11015916,1610613658,1946202112,-1006695195,1342179048,1493121000,-9377597,-1966867596,1979661506,236047,11534432,110817396,-1023385600,1610615194,-1031093504,-12785584,825944,-1950154656,607956210,-35063692,787934206,1948531884,-17635091,11728363,108314634,1946183656,11554555,1914715266,24936983,-401509062,1076625492,976095094,1981040134,1191162370,571818,-2113922072,24456764,244038,771756008,363536069,856192905,-1968460864,568902594,1008301056,1008039456,-1341754070,-1426896577,1060940353,-897580171,1189339649,-1426906960,615301966,1918975103,2004499462,1008741378,1022260256,1021998141,1021735980,1021473851]},{"sector":5,"length":512,"data":[1021211694,1020949562,1020687394,1020425259,1020163119,1019901019,1019638877,-617364727,-661994610,-472783919,639076646,-1023254644,-986791282,-1911182538,-164424612,-2135294325,866513664,-1898344759,8961730,-1526723905,782607781,340594315,34507046,-2117457152,1980760057,268417283,721423547,-773729831,-773729823,-1982165279,-1996487154,-956299234,-855638010,84330016,-775710208,-773336601,-773336601,-773336601,1381090279,1435731,-1587979685,-523234238,-523181872,-523116336,339805706,-855591741,1958742554,1090913015,339845652,1117839498,318356244,1994402519,1093044451,339910676,1117962494,1980513300,1107740371,1134559508,-1564410348,52696131,41229488,-73219842,471843602,505355807,522067743,521019166,-1577080088,512431171,918885441,1552487851,129762566,839140489,-5192768,129821057,-108791950,183662455,183399670,-2098563886,-445182722,-25026802,-2113047294,-646504966,-1040838030,-1022528509,-105134454,-1036331246,-210567248,11817298,-396879155,110100357,-1070459839,-400617789,-1047789757,-489563509,-489565743,-754724399,-1181564653,-235411189,-1070344053,-745803273,-150943559,1694139121,-360578190,-628427420,11718865,1018811089,-1963854080,-2030962950,-1422473788,106727701,839140489,-5192768,1931017602,1022984952,-24972429,-2098302148,-378313478,-436847440,-1056767819,-1961398087,-1948125222,-161173304,-2084043801,11993298,-763114749,-1148087808,-470292213,-141374841]},{"sector":6,"length":512,"data":[-2084502557,-1148059438,-201981947,11913354,-1835481974,-796134409,449642932,1355006002,1277185618,1093751888,1126193237,1127304527,1310740047,52448341,33620224,2,0,0,32768,0,0,65280,16776960,0,0,0,0,0,0,0,0,0,0,0,-215613440,-1293353820,-50672643,234991080,-1574523897,1572541510,376618772,-1958770394,641942511,-1441369952,-259303763,-796152915,1325808422,637826580,-1407955037,1957349630,-989947895,-92931888,-1515535222,-1031035484,-388823631,642304139,856180227,-1410205742,1435857,1906517504,28353814,1375732154,1510021864,242532922,-225786310,-277491574,206503718,648733931,638019318,-1425717757,172360486,172394790,637599720,-1207153015,648675583,638469770,50423543,-1608098056,-1057089936,376480294,1174813222,-385649900,648937306,340729483,51893432,1369646787,-83667180,-947782909,78709105,-276041773,-661733325,-2134916978,1161216,-959935317,-369049594,12650183,-1012727779,637184,113748979,1376388,9176775,113704988,1835152,-1426057800,-1426038600,113748907,1573016,-628176244,113759491,8393801,340465289,-1558946399,315429979,-523041103,340632366,-644953805,8914631,378077440,521011338,378078990,-1587675133,-523168689,1946247685,341688101,16781241,-498645243,-1093760006,-836037006]},{"sector":7,"length":512,"pattern":0,"data":[-33294197,125353995,66650953,-369278479,2045378168,1727407870,1174611463,100869637,723916401,-654898106,72256038,-1958680365,-796180280,-1038882095,24546086,860407299,-1007224878,-617392610,-2134916210,-1105261051,2025395826,-1079708928,525534594,1442860222,-218102599,96952228,1569260928,-1021354494,334168064,0,0,0,0,-2113929216,91489276,-2110849234,1448169477,-33153449,247530184,92978951,918888206,196673656,-1527514112,-1901977842,7905541,-1593473373,-2002583430,2013710085,-1945794048,117471758,1499356959,-13722536,-1677360610,521018960,-1559918943,-2002714504,8037125,-895657953,2]},{"sector":8,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541406240,874524980,153100356,923353668,1163010604,1162690894,537529634,538976288,538981684,538976288,538976288,538976288,220209184,1094201354,859316280,540356640,538976288,538976288,538976288,1464076576,1313165833,222645569,1094201354,909123649,540357664,874525237,859119665,540357664,1111755040,573322761,1396789829,168632901]}]],[[{"sector":1,"length":512,"data":[220649,-1946157056,-1898410296,16825552,25487611,567089588,229953674,246686157,116793805,1962869812,64797211,567085492,-854851144,1012868129,1007252558,-957713063,275462,-1896167284,16825552,-388460805,736624966,1578515201,-971607036,17037830,-402599192,372965658,91489374,-352252696,-100219150,62783491,156417793,73139854,-5921284,-2096866770,78712770,19851987,855704342,-2584896,-83853266,1377766942,1509984488,681722116,-2134575613,163470965,29685251,247333748,446934275,480488707,-1605373,218071808,213844854,-1212314880,-1260943614,-1172189943,567083795,66731650,-1170639616,162792236,28844493,-400438004,537657401,1765540020,-989983628,108294716,1631372542,-997532299,-819996789,-1274854470,-1172189943,567083809,-820051280,-1274838854,-1205744375,567086087,-1157686807,-1269824727,1478610185,1545506499,16824836,567089844,901390094,-854608892,1958742561,58767886,567085492,-854849608,-941954271,-855353850,1476839172,-956301308,17056518,131119360,-1274792518,169987367,-1162251072,-789904544,512634620,12452956,131119361,-768349743,-489684051,-1021374725,-1207876422,567092514,-1207892038,567092515,-1342071878,-1172189916,665846151,-977067571,-587017470,-419241470,67303426,1769101059,1881171316,1702129522,1311011939,1914729583,2036621669,1952531492,1699947617,1394895717,1869898597,1869488242,1868963956,610561653,1953067607,1634082917]},{"sector":2,"length":512,"data":[611609717,1802725700,1634038308,1920410724,539260009,1869771365,1920409714,1852404841,1919164519,543520361,604638529,1919902273,1377840244,2037544037,1732845612,1701998446,220471359,1818838538,1818304613,1633906540,1852795252,1650553888,1646290284,606889057,1850280461,1768710518,1329799268,1312902477,1329802820,1852383309,1769104416,1092642166,1850280461,1953654131,1397703712,1936286752,1852383339,1769104416,1092642166,1851853325,1953701988,1701538162,2037276960,2036689696,1701345056,1701978222,226059361,168633354,1702063689,1679848562,543912809,1752459639,1952539168,1713399907,610626665,1700006413,1852403058,543519841,1668571490,1869226088,1495801954,1059671599,16786464,1330926913,1128618053,5521730,0,0,0,0,0,0,-1,-1,-1,-1,-1,1329791233,1312902477,1329799236,77,0,0,0,0,0,16777216,0,-1174339396,78711403,44165843,-1547556096,244057180,1874329861,-1930898684,-1547566134,333971715,-38934274,-1979845144,-1174118890,263455739,113713613,66569,259309578,70518470,8841216,-1274758982,-1306407671,-854674432,-54925023,1750338061,1112088677,1699749965,1852797810,1126198369,1970302319,544367988,223563588,1919243786,1852795251,808333600,1126703152,1886339881,1734963833,1226863720,1126190402,544240239,825768241]},{"sector":3,"length":512,"data":[1277430285,1852138345,543450483,1702125901,1818323314,1344285984,1919381362,1344302433,1701867378,544830578,1226860143,-1581626046,-855002107,-1173703647,567084478,-1090720536,1055393216,-386627072,921174059,-388724224,786956323,124565760,1947024514,-161173495,-389510172,-997588963,-939327308,567094196,175489034,792505539,758970996,-21170572,-391386368,-160301042,132702346,-706383360,-1008694774,808191114,171768178,1190425333,1953383875,1948283493,2036425839,1679848231,543519841,1680698664,975796525,795680,0,0,0,-854674432,1555888673,-930284534,-1064382322,-1929652082,1376136136,1096201,-770972937,-4717708,157066239,-1274573126,-1272853239,-1574843111,1090783575,-796261708,1051861453,567083700,156507790,70518518,240088575,147831327,567085748,-402620183,624690598,222060148,808213108,154947442,-1952953481,-1947807248,-2096881484,1031077886,1017905844,-1439271923,567136394,162854123,-855392582,60602913,28844493,-383660788,-71631001,-854608893,1975519777,151439329,-1174404860,448006593,-776003123,88664072,-1686887108,-1261401430,-2111714046,-311095814,148041601,-1574516853,736626896,-1306587643,-855460854,147963425,-1207344961,567093505,2138308924,1316290364,1537344906,-1189040119,-230227959,705278126,157328065,-1191149121,-1403650048,-536003414,-1999505670,1577091086,-1342153537,-1574843135,1824459096,-855527424,156869153,-1979096928]},{"sector":4,"length":512,"data":[168385302,-29723182,-385255992,1622867693,20179208,-1257727042,157335296,669191306,60794611,1974312689,-1596945424,101321048,-12842663,-754984844,-369191191,-1930886906,-20250882,-1594395448,1621231963,1762051849,-967884023,1292462854,-1274453830,-1574843121,-1073084074,113736564,1480919401,158009030,169987397,-949324608,1107912966,1795606081,567104521,-1284128758,156501646,-1207689025,179961855,-1096027392,12519633,69253888,1006913768,639333389,1128480649,71559340,1017775988,-351570931,-1441943309,70581121,1623121522,66830089,-218099527,113259429,68985631,1074011811,-1576793693,-253164492,2000585469,1551171337,-2119974861,159621897,158245696,156374667,649386635,116793805,1979648342,-628220343,-1275002694,522308890,157027979,16836993,-1274453830,-31339225,138394312,243999093,-611448484,-1896168562,-69104685,16836993,-1202667469,1347617024,-888943384,-1274579270,-383660791,-1027932797,-853887991,1751329,-1274453830,-1591620313,520423882,-754601728,159491048,158205639,-1014824448,-971601136,-1982846199,-754334186,63081442,1003064531,138394321,1048820087,1962871246,-1949816060,518753241,-768353394,567089844,-972125409,157334025,567093172,163974697,27791476,-1014954379,-605351968,-385365574,-626917503,159490825,158205639,-1027997695,-853887991,-935427295,578027529,1622812596,309513,-1073077811,1049350773,-996079166,-1899691255,755050176,164105983]},{"sector":5,"length":512,"data":[-794698123,-87751927,646697102,33229266,-1593190354,243992914,-1064433316,-286730098,788475394,116853206,-63138,-1162213771,-15472377,1564377795,175448064,1572814768,768256,-1665488141,-853887991,1577502497,-1275068407,6076945,-1057087027,117426292,-1648490146,571657,-1275044632,-853495294,-1188967135,1323827203,-1187607808,-1153529079,5105673,567091378,512434637,-620033611,-1014289804,-388823631,-1830285532,-852643328,616794657,8906783,567094706,-388970614,1006653445,738357860,7596132,-1274573126,-1272853239,-1265702126,-796218366,-102620723,-1950338109,-1175942184,-422510560,-392833071,-1818951614,-1828700696,-287178732,-400879431,-1014300665,-1962933528,-729132859,1509949928,-355405174,-355407152,48818896,-2133423616,41160674,-838991695,-897528542,-1261360592,-1021195006,-2044215278,666899140,-725367674,-1261401334,-2099870206,567095490,-1031612790,-1021194960,-1162144844,1564377607,183181312,-1548019788,1832813063,-1850073088,-1173654521,567083100,-613039874,-622210165,1377734397,-1261292791,237096218,6076959,567087028,-1162166262,870544647,8233920,1073774499,-1912575325,-1173794298,243990620,666110300,-1612504627,-1406732749,-1753998788,-796261708,-220061235,1824449003,158121728,160546724,1965046914,6143491,375204,113747443,2398,-1274438470,-1272853222,6076945,-1073077811,915083636,-13432482,-1157700888,162793519,-1144839731,1841236381,160546313]},{"sector":6,"length":512,"data":[-1409283143,41238332,1135216522,1822488034,1975519753,156737541,104513790,276105628,-1089901122,196675997,-1163463936,1853097995,-1274438470,-970863345,612870,156376718,448057907,521019853,-1113341901,163554057,-1559655005,-1556084337,-1665529430,1544456969,-853036023,-1338055903,1510376961,1975519753,158120468,567088820,168293818,-954239552,17398278,158120448,567093428,-898318326,-1274450758,-1272853232,-1172189933,162793435,1105797581,1510405887,292880137,-1559646047,1824131456,-854543351,1577516833,1480491529,-562757367,-1665525068,-1272853239,-15865582,-1274807366,112935,132325837,1007272352,-1341688550,872859149,-1396506620,1946158312,1019432698,1023112224,1022850109,1022587948,2092614409,-855002104,201439265,-2134695475,111276257,-1983829248,-1325398514,33084164,-1174403066,448004224,-1590812211,-919402152,-164703861,-16501754,-1959865228,-1173793778,1120076795,1663067233,1634561391,1864393838,1768300658,1847616876,224750945,1766663178,1852404595,1768300647,1847616876,610626913,1819309380,1952539497,1768300645,1847616876,543518049,1176531567,543517801,544501614,1853189990,1917133924,544370546,1159753321,1713390936,610626665,1970499145,1667851878,1953391977,1936286752,1886593131,224748385,1766204426,1663067500,1952540018,544108393,1869771365,604638578,1701603654,1851876128,544501614,1663067490,1701408879,1852776548,1763733364,1818588020,604638566,1818838560]},{"sector":7,"length":512,"data":[695412837,1886348064,610559337,1735357008,544039282,544173940,543648098,1713401716,1763734633,1701650542,2037542765,1986939172,1684630625,1769104416,1931502966,1768121712,1633904998,1852795252,1920226084,543517545,1701519457,1752637561,1914728037,2036621669,773860896,606088736,1380533252,1376191592,1296125509,101024581,1396789829,84244293,1162893652,1375995296,17059141,1347371781,101050713,1398096208,472389,873267584,876950581,876885041,808663093,875966517,875705653,875771185,808924981,892678197,892941620,1094005808,221264176,1093745162,892879920,892350512,842347568,1144272180,825242672,859059504,808797748,960837941,909129008,825503797,859125045,892548404,808466224,825241656,910509104,809110029,808464432,808464432,436866352,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,541406240,874524980,153100356,923353668,1163010604,1162690894,537529634,538976288,538981684,538976288,538976288,538976288,220209184,1094201354,859316280,540356640,538976288,538976288,538976288,1464076576,1313165833,222645569,1094201354,909123649,540357664,874525237,859119665,540357664,1111755040,573322761,1396789829,168632901]},{"sector":8,"length":512,"data":[142607083,1007002556,-1173785089,-840432570,12118272,567089588,-1106951518,-961806244,344326,91602954,-33209696,-1563885888,-1360527268,6070272,-928890620,61520387,-1174365208,-1779956789,15001600,503340192,-1912581957,303835,1547108127,14936064,6030991,-35099790,1061060612,57933829,-1174130456,-2135228416,112904,1553990068,1931922688,5171459,66763421,-2147463192,17121598,-2065167243,109438981,-402383942,-1863843780,190464,99126251,-383946240,-2014838653,70302208,-1207950360,567086081,1497161508,1312556404,-1007032203,-855611672,65780256,179962859,190468,162799821,-1597824563,537657437,376730428,158605372,-402365766,-739639320,7184639,1933320204,113644661,-402586303,91423917,-352319256,97118454,-1262225806,69324057,76522049,-402361158,-876937288,-5052413,-1023409688,-854851144,321569,-1023409688,-402384710,-842793060,12592401,113640821,1375731804,-402431046,1364918152,-1157617479,-108329706,-503316026,113662457,-1341979502,112904,6035082,332202164,-1394080141,-1316608,76678854,1074185731,780795909,398132544,-2096582651,797443307,-143275778,378205746,146276444,1930677509,8251398,-956310551,50631174,28379312,88092298,332203188,1692927603,-1251072,76678854,1076791811,-2000290299,-2147139538,-1368053507,1347572675,88096384,-1173523200,162792633,-998039091,-22091514,88161920,-2146011903,67452990]}]],[[{"sector":1,"length":512,"data":[-709226637,-855002108,-13572063,88147654,85441280,88088066,88016582,14123009,1493108678,-1612096678,66879743,1958352501,-22353917,-385939992,-997982462,1543933700,-34477824,1971387520,60340741,11854827,-17296435,-2147184114,299582,-380042123,230948731,1919895050,1953784173,778530409,-1339806162,1950419469,1886217588,543450484,1953067639,1919954277,1667593327,1769349236,1952541807,611217257,1917061645,543520361,544501614,1684104562,1850287225,1953654131,2003136032,1936286752,1953785195,1868963941,1919164530,543520361,220478072,1684955402,1920234272,543517545,544829025,544826731,1852139639,1634038304,1176795492,1634562671,1634082932,1920298089,1866867813,1952542066,1836016416,1952803952,168633445,1953067607,1919230053,611479410,220465677,1937330954,544040308,1851880052,1919247987,610559346,1836216134,1629516897,1752461166,673215077,692989785,1850287167,1768710518,1919164516,543520361,1667592307,1667851881,1869182049,1850287214,1768710518,1634738276,1701667186,611476852,1850280461,1953654131,1397703712,1936286752,1852383339,1769104416,2015389046,9274,1296912195,541347393,13455171,0,0,0,0,0,0,1410140672,1801675122,1646276640,1680696417,543912809,1937075829,1701601889,1141705252,543912809,1970499189,1650553961,1713399148,1931506287,1702130553,1768169581,2386803,131328,131584]},{"sector":2,"length":512,"data":[131840,132096,132352,132608,132864,133120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1157627904,62458496,113152,-855614304,-4547291,-1124027121,666830103,-12877824,109126261,268437090,117376115,145819236,-472785013,-472783919,-343680765,3926022,-320679029,-1093241521,-2134963584,16824588,-2134923789,1094615054,57999621,-1184839805,1186856976,1612089606,-1146752250,62458496,113152,-855614304,1405328678,-772568238,-2134670869,-773979382,1933020142,-773664498,-773664286,266764770,-2130384128,200278246,1513589234,1633862491,1634890852,538995555,1056,0,0,0,0,-2134966272,47114,-1191181637,-1410137856,-1191676597,-2136735746,209756938,176301704,209856136,-1207009089,79427318,16824576,1967893491,-1176129288,-2134966208,-947672562,-1141186017,28969600,440576,-855614304,-1262248666,125549071,-1073077811,-1007091084,-1559783775,263456729,-855135814,1975519777,130327021,-1274553437,377535002,-1070390835,-1559780445,-777844827,131310343,-1560280648,-1096611952,-1171803129,12126075]},{"sector":3,"length":512,"data":[-1994273524,-1274566898,578861594,666116557,-1190680134,567091200,131403401,6070467,-1331511042,126001671,-1273593670,-1591620326,-677181479,125549319,-1593829656,-677181477,578861575,567089844,-402150981,-842858493,-1983892704,-1996478329,-1962923385,-854149933,361219873,-1275068160,747604776,-1591620352,-2021062697,280231963,-3989043,0,1224738304,1229081922,1126178895,314703,0,0,0,0,0,0,65280,100663296,1296189696,542330692,-850443488,4,0,0,0,0,0,0,0,1115732480,141629065,567089844,-1274768454,169987343,-948144704,308230,-1241069824,-956301308,17080582,268482816,-1559976031,666110069,1541611981,141758089,74711868,1333068092,6070467,-1818050306,76790276,567088820,997572618,141629067,567089844,78907079,113704960,1206,77661895,-1816526847,-1960266748,-855084274,1975519777,141926674,-1174100061,280233107,-1073077811,-104660619,195,822083584,1967795509,825765228,1322987,6291456,1294808864,942504289,49,0,0,0,0,0,0,0,-930285056,12245134,-1127051776,-1577354240,-661750778,12238990,-842888448,-398364141,-76414888,34507566,12276092,-1177406720,29229064,28333568,332202676,1482564210,721479656,-32213818,-1107185211,-969211896]},{"sector":4,"length":512,"pattern":0,"data":[-259324813,1452671467,786295632,2080648959,-1199749954,844135746,2133110015,-1269429388,506638,-346156851,12305392,309504,-855506504,879894035,-661731188,-1191182145,-2144993269,-2144985075,536879245,-1074535865,1992163328,768381,1973875708,2146063,-1182956866,-1494024181,-1021377931,-394462786,11861925,-115403059,1309281731,1395486319,1702130553,1768169581,1864395635,1768169586,1696623475,-227577230,1699875341,1667329136,1851859045,1953701988,1701538162,2037276960,2036689696,1701345056,1701978222,234447969,416088074,1766066701,1109420915,544501615,1818845542,233140853,1380974602,12568203,65533698,-1017619752,1700949842,1327527026,1634030119,1651056754,1869177453,1868767264,1651093613,1936680045,1868767264,13217901]},{"sector":5,"length":512,"data":[168264380,-2111801920,536894782,431235701,-2120080947,1544980998,1959922176,-32590807,975293898,-1172211774,162792754,550314445,-351973702,-1899459339,-1978747688,-855211754,97368609,-796203797,108140168,378061566,-889322235,-2147313944,-646578625,-1994455522,-1996068074,-1274647282,107979520,-2101359989,-205507833,-1547138133,2007172731,109028102,780791691,-678754695,567089844,-21360204,-31339260,58001344,1090607337,-1959999613,-853887785,-1173179359,567084286,-344604418,108465801,-1962933831,1107716886,108861065,857916803,7769024,108869179,1996848063,1962281768,-772175080,2126284774,200200455,1078490623,1946296808,-117472918,998208271,1996913982,-336098466,1183404252,71731458,750436747,-487110656,369348747,330565241,1360929229,30795856,169826648,-385649472,117440275,2075788927,-1171068155,-1269824106,-1960719095,43772103,-1274729798,-1960719095,42985665,-1274648390,1478610185,108725761,-1174367255,-873984001,90225153,-855002032,-389969119,1757020781,-855002106,100751393,-259324293,-1962785141,-1957624746,1225158414,-763117309,-372162304,-355400078,-152315695,107820791,24433163,1959148352,-1946209464,-402231538,1988690348,142510342,-360458869,-854608862,1958742561,-25564925,-1996067423,12186438,-852970496,-854543327,484974113,-1296425215,-855002107,-397387743,1757020661,-855002106,-981247711,238764332,58132087,872337641,126008768,-1962933570,-150574322]},{"sector":6,"length":512,"data":[-65466,-1569931,856060928,18147538,1178944832,-1072961054,-407173516,20768773,-2129229266,-854674426,2000063265,2134256390,-1140903162,854066691,107716865,-402255429,1805713690,2064001798,103529222,-1593766424,280625154,-1948059904,-1141208080,182978119,172289,-1037317492,-150990662,-1947169822,106806266,-402590488,-1976696821,-1274642154,-853422834,517508128,-1070350194,-1866540914,108248832,-67108167,615556595,-1145428556,567090947,567086516,-1900006650,-1866466112,108248576,-218103111,-71104603,16770945,-58583179,772961539,108135992,-2110911627,17199422,-1070464140,-259313969,-2129229230,-854674426,-963945951,1932459822,378154502,246679154,464789965,1347559885,-2129229266,-854674426,-1017489375,-271450485,-1960378877,29816633,-787975168,-772812305,-2114989585,-1022361625,108070598,-24422911,-217846063,-271452413,1933347622,-773664498,-773664286,266830306,-2130384128,200278247,1015621370,-372128930,-422446222,-152315951,107816695,107941515,-91492213,1409279976,-661929933,549054603,-773402368,1273533911,-392981248,345178182,-1175526912,283646736,-389838080,-980746229,1509951208,567085492,-729132861,1509949928,-355405174,-355407152,48818896,-2133423616,41160674,-838991695,-897528542,-1261360592,-1021195006,-2044215278,666899140,1371784326,2931016,-259268105,108606979,-1190607229,45350920,-1308619800,-1323184864,190467,-1968389287,-501101104,16761849]},{"sector":7,"length":512,"data":[0,1061093382,1061109567,1061109567,63,0,0,0,0,0,538968064,543452769,1850287136,1768710518,1919164516,543520361,1667592307,1667851881,1869182049,1850287214,1768710518,1634738276,1701667186,611476852,1869376577,1769234787,1696624239,1919906418,1919903264,1818846752,1143218277,1667592809,2037542772,1920099616,1714254447,543517801,538976314,1766204448,544433516,1936683619,1768697203,1684368238,168632378,538976288,1766204448,1931502956,543521385,1869771365,1868963954,1768300658,538994028,1936278564,1953785195,1869488229,1852383348,1634301033,1702521196,539238500,1702132066,1768169587,1931504499,1701011824,1701996064,168649829,539232781,1802725732,1818846752,168653669,2036473892,544433524,1635020660,1768169580,1931504499,1701011824,539232781,1702132066,1701978227,1852399981,1635148064,1650551913,168650092,539232781,1702132066,1869881459,543973748,1869440365,168655218,2036473892,544433524,1701147238,2361869,0,973078528,808464432,808464432,168636464,220209220,538976266,1093672992,540291616,538976288,538976288,538976288,805965088,541209142,908079154,959914034,540292896,924857654,1176510515,1347634514,1141455427,539101506,1702132066,1701978227,1852399981,1635148064,1650551913,740451692,824980273,858860592,741355820,220341282,538976266,808591392,540161824,908080438,825630788]},{"sector":8,"length":512,"data":[1555699179,12839170,-385713222,892403901,1819626029,-1137625043,-12843921,1048634484,1965031517,-1173375773,567083789,91537418,-352255256,52994544,-1274844253,54245903,-1073077811,1453451893,57516803,1874467508,857853188,53846976,-1560070237,1705182051,112643,-1560075613,666108752,-1190982214,567086080,54070921,1874467508,-1272853232,54245927,-853540679,1729005857,6070275,-1576844638,230359828,3532803,-402441285,1874460719,-853887996,57385249,-1157404253,1290273549,57516288,-1174181469,448008303,1002119629,3794947,-1274883398,-853422839,-1960594400,169987539,-1957661248,-1962923897,-1459606377,57934335,620888069,-1023934976,74711551,33604225,-33496447,813023803,-1983892541,-1996478329,-1962923385,-854608685,361219873,-1275068160,747604776,-1591620352,-2021063831,280231963,-1161616947,-1679097174,-352153414,-1173310314,567083789,-855426118,48675361,567085492,-854851144,-1308445663,-1306407667,-1306407670,-1021194998,1635151433,543451500,1986622052,1886593125,1718182757,1952539497,225341289,1227098634,1818326638,1881171049,1835102817,1919251557,604637709,1868787273,1952542829,1701601897,1937339168,544040308,1702521203,1867427876,1869574688,1868963949,2037588082,1835365491,544108320,1953719652,1952542313,544108393,1802725732,2035527716,1835365491,1634890784,1701213038,1684370034,1850322980,1953654131,1937339168,544040308,1802725732,1684955424,1920234272]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[543517545,544829025,611935595,65456,100663296,1296189696,542067010,-850443488,4,0,0,0,0,0,-16777216,0,1224738304,1329876290,1126178899,314703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-922746880,0,0,0,0]},{"sector":2,"length":512,"data":[1409324265,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1936278560,1953785195,1866670181,1919248752,1919243808,1852795251,808333600,1126703152,1886339881,1734963833,1226863720,1126190402,544240239,825768241,1667845152,1702063717,1632444516,1769104756,757099617,1869762592,1835102823,1869762592,1953654128,1718558841,1296189728,1953841440,544370536,1631854637,543451510,1953786188,-64983441,855703740,-536194350,1962933378,95009352,6110850,-2109639392,536898878,646593141,646447212,298647645,-388888911,-1057094876,431282314,-1057087027,1963064194,1543947788,113639680,-352255907,1543960095,242614016,-352297822,63683081,567085492,116793549,1979646045,6136323,134241440,-33288698,6070984,1570824330,872810496,-1563886076,-1002831779,243271029,-1593769017,-611581950,-2144484565,-1156926208,-1019540992,146088051,990380219,-1256754237,67156740,242467643,12255925,1942174466,93370885,780704491,-323353659,-855002109,-955845087,192151811,-855361350,6547489,-402652183,1642594385,-955845120,57934083,-402635544,1048707230,1965556676,72858151,567085492,-1274710086,-1205744375,567086081,1849434124,550306421,-394954436,63178438,-5838592,63375094,-390368255,-1243021309,65846015,-1174404119,162792466,951722445,-1272853244,-855527412,113689377,-1979710520,838884374,-1979600394,33801262,-2013018834,704890414,-1157380818,146277824,1913900290]},{"sector":3,"length":512,"data":[-2117730803,974127299,1963181614,-1070349331,117314509,1048708040,1963328456,1773820610,-9639676,63506118,-905525760,378142723,-164495267,780796337,-1061485628,50903045,527569869,-1014905346,775557120,-311098426,-2113914648,248382,646632565,646448070,-2101148732,225772540,-1274727750,-400438007,-1175847071,-843041793,-922288621,-918650365,-1435171325,78363226,-1962998295,838884630,-1979600394,-1207712722,332203016,-973205902,63319610,113701237,-1023409206,332251187,63571710,63585922,-1023314938,-289777062,-20125436,0,218103808,1986939146,1684630625,1769104416,1931502966,1768121712,1633904998,1852795252,604638471,1850280461,1953654131,1970238240,543515506,1802725732,1702130789,544106784,1986622052,222306405,168633354,1702063689,1948284018,1701278305,1768169588,1952803699,1763730804,1919164526,543520361,604638528,1951599117,1701538162,2037276960,2036689696,1701345056,1701978222,125396065,220465677,1886339850,1868767353,1701605485,168650100,1426722084,1667592814,1919252079,1701601889,1634038304,1919230052,544370546,1931505263,1668445551,1409944933,1701278305,1768169588,1952803699,1965057396,1634956654,124087394,220465677,1919833354,1987011429,1650553445,1998611820,1702127986,1920099616,1864397423,1635000430,1952802674,1632897549,1952802674,1936286752,1953785195,1853169765,1650553717,218588524,168633354,1701998165,1702260579,1818386802,1702240357]},{"sector":4,"length":512,"pattern":-151587082,"data":[2036754802,1920099616,1864397423,1635000430,1952802674,1632897549,1952802674,1936286752,1953785195,1853169765,1650553717,218588524,168633354,1735549268,1679848549,1701540713,543519860,1953067639,1919950949,1667593327,224683380,1124732170,1701999215,539784291,1852139636,1920234272,543517545,544829025,125396331,220465677,1886339850,1851859065,1701344367,673202034,692989785,604638471,1850280461,1717990771,1701405545,1830843502,1919905125,168626041,1225395492,1818326638,1881171049,1835102817,1919251557,604638471,-46421504,-276102538,-907284766,-1274898502,-853422839,44481056,-2130689047,1963387134,1008848137,-1103858687,1017905896,-1020038118,-1979703064,1829080,-472849456,-472849456,751026954,1023111728,738619914,1022587399,-389810928,-353828923,-1158188033,162792049,922689997,113705072,1329791077,6751942,6077005,567088820,695582730,2107883571,8364800,6988608,102683187,-853887969,-846520543,1555703988,-1893610240,-1275039738,-853422832,47168032,1224697065,1329813573,1920091469,1763734127,1162354798,1768300632,757949804,1986948963,1769173605,1629515375,1953656674,1176790117,543517801,544501614,1853189990,1681990756,1936028260,1970217075,1718558836,1851879968,757949799,1986948963,1769173605,1629515375,1953656674,1143235685,543912809,1701996900,1919906915,1969627257,-165385108]},{"sector":5,"length":512,"data":[1409326569,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1936278560,1953785195,1866670181,1918988397,1951735909,1953066089,1700143225,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,1766596657,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,1967202381,1919903860,1142959392,1684633185,1953057824,544108404,520537852,113639428,-1124137951,-768409344,-2099246510,1215627260,-2113581638,536894782,1048723829,1965031533,1814465082,1562806272,-1324233472,619237894,-1967063549,-853953320,-2101281247,208994811,6031046,1560724993,535494912,6031094,-1576110593,166395996,-1274797382,-853422839,1560737312,58064640,-1610588766,101187676,-922876828,-1979687774,6136032,76154376,1570949374,1975794176,521043973,44105988,735808512,8404419,-2144524426,-1157253888,-1019540992,78979187,990380219,-1256754237,67156738,242467643,12255669,1942174466,87341573,780703211,-745864163,-489561391,378135249,-1031732198,378078564,1136264216,-855002108,520549921,192151812,-855339334,13297697,-402652183,1689977016,1544980997,12707840,69142262,-166365944,17047302,-1645739148,404654848,1561758212,10872832,-1962580802,-1962665922,-486270450,1957098249,15067141,646641131,646448158,1048708124,1965556764,520549944,125109252,-1274761798,-1172189943,162792721]},{"sector":6,"length":512,"data":[28844493,203541772,1970158624,1008782594,-957844103,269318,69150336,554092035,1642725124,520550143,141821956,69150336,-9508361,69144192,404654856,1561758212,2746368,69142262,-385649407,65601364,-11605760,-385596486,1757020163,-855002108,76462625,213131725,567083440,537315011,512294916,512427030,-164494314,780796337,771884060,780665885,774505502,146277405,1913900290,-2117730803,974127299,1963204142,-1070349331,117314509,1048708128,1963328544,-2134704443,378028234,-1168505622,921240774,521044223,-695532540,1693090122,212947205,39447251,973347862,1963204886,378061569,867173409,-92135756,-1340704995,-2112572366,225907706,179581360,1997142658,-1271877628,84648448,-897526742,202803248,82819589,567085492,195,0,0,168624128,1635151433,543451500,1986622052,1886593125,1718182757,1952539497,124677993,220465677,1936607498,544502373,1936877926,1768169588,1952803699,1763730804,1919164526,543520361,604638528,1850280461,1953654131,1667592992,543452783,1802725732,1702130789,544106784,1986622052,222306405,168633354,1769108563,1629513067,1797290350,1998616933,544105832,1684104562,168626041,1141509412,1701540713,1936028788,1836016416,1701994864,225144608,168633354,1701998165,1702260579,1818386802,1701978213,1696621665,1919906418,544108320,1986622052,121643109,220465677,1836008202,1701994864,1920099616,1932030575]},{"sector":7,"length":512,"data":[1852776489,1634890784,2124643,168625920,1124732196,1634757999,1830839666,543519343,1802725732,1702130789,673202035,692989785,604638471,1850280461,1717990771,1701405545,1830843502,1919905125,168626041,1225395492,1818326638,1881171049,1835102817,1919251557,604638471,876033334,892744759,1177760567,942813234,1177696565,959595828,1144010544,875708720,168641331,809578810,808727349,809775152,909718593,926103365,909522485,909719094,909719091,927282741,909128244,909456964,927348292,809056050,809775159,808727105,221724996,909195786,1161049392,1093677104,1161181492,825636407,959857462,808596534,825634871,825635383,892748854,892744759,925905463,1093682224,859911218,809110029,808464432,808464432,436866352,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,437918234,538976288,924862006,959914034,540487712,807420976,220209217,538976266,875700256,538976288,538976288,538976288,538976288,805965088,541340725,807420976,959717441,541406752,908080695,1646272561,1852204129,1650729018,741552416,573321265,1635151433,543451500,1634886000,1702126957,925639282,741552428,573321265,168632868,538976288]},{"sector":8,"length":512,"data":[1409325545,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1818838560,1866670181,1918988397,1951735909,1953066089,1700143225,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,1766596657,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,1967202381,1919903860,1142959392,1684633185,1953057824,544108404,16825596,-58531830,-401443329,113640100,-970981283,536898822,7079622,605146368,1975519936,1729003525,1824391429,87539456,-218100551,10533028,136843,-752100468,8448641,167836289,-355399053,-355341615,-1031017775,-1325047901,-1948200185,122947056,-2113576541,536894782,-2051403915,6077190,1006768616,-336366337,943620842,678764549,87506562,-1172933376,935003885,32827397,-210436292,90848898,-337742579,6143722,-1190840129,-1527578613,567089588,1048756478,1962934364,6070787,87506562,-1576831744,1555957047,87539456,-218100551,-1173981786,-1930885358,1728509441,359923973,-1912581958,69634778,-1899328512,985988826,1962957862,113555981,567085492,28314804,1555702221,1778829056,-402620416,512295346,448005475,-855157574,6076961,-1174276888,113706295,8389957,-1107192344,1203699820,309509,1316267763,-385403462,1048772903,1946158435,1728509466,141820421,90646144,2484733,90640000,34662402,-167765271,134571782,-68680844]}]],[[{"sector":1,"length":512,"data":[103725569,90638070,-385649404,-253165329,122993152,567089844,-402629446,116785549,1963066727,31254531,90508939,-1962453826,-486186690,1973875460,2048822040,92053765,90506755,-1996434557,-1559922146,-2048326276,1729003775,1330512901,79299722,28895238,314181002,28370950,91889291,1412286091,2080768775,13861637,92216969,-2034612410,26535941,-1880570742,92250369,-1979610648,25487556,45406603,-1996481863,-1106944714,-1968437794,-501101104,92258041,-2147481415,2131060518,1728509612,141918213,74788924,199488226,567136394,90640000,-152706432,-2147129594,816972917,-880074291,89994891,-122025548,-1172189947,567084552,92145406,92159618,-385649654,-2017788103,-855002107,1730576417,113639685,-956299906,358918,2080818944,-956301307,341766,-35198688,90769094,-855002112,90749473,567085748,90848898,-2130152179,1946499067,-1105146608,-74775190,-852950600,1962884129,-1380269311,-855002107,-1006653407,834007691,1952250499,-1271745278,169987363,-1960872512,-620027556,263463796,-1069932083,1153902197,-956301280,8772,2376903,-2007317760,-1173992914,1760101955,780688127,1505363552,-10622714,-2144434086,107723270,-1946201367,956653326,1929732878,1661897476,-853036027,90415393,1671676203,-1312716027,-1545547001,1048773989,1962935651,8400308,7085707,8381313,58055435,50364603,1696500184,1405321477,440369671,243307380,-1022884505,-1274669382]},{"sector":2,"length":512,"data":[-1021194999,90248843,567089844,-1274726470,1594788647,-1021195003,-1157276254,199755214,90021888,-388962096,-388962096,-2015949020,-2029549357,12798675,0,0,0,0,0,0,0,0,0,0,0,131072,16,0,0,0,0,0,0,218103808,540029194,1836280141,1751348321,757101413,1868718368,1852404850,1868767335,1918988397,168626021,1225395492,1818326638,1679844457,1702259058,1701868320,1768319331,1769234787,218590831,825238538,892613426,959985462,1145258561,168642117,1886220099,543519329,1869771365,1952522354,1717989152,544499059,1766197773,824206700,538983712,604638496,1701603654,1025520160,220209184,168633354,543584069,1802658157,1953459744,1970234912,218588270,168633354,1701603654,1868767347,1918988397,1802444901,220465677,1818838538,544743525,544501614,1853189990,168626020,1175063844,543517801,1835343992,125400176,220465677,1701859082,1919230062,544370546,1713401455,543517801,168626040,1158286628,1919251566,1769107488,2037539181,1818846752,1634607205,168650093,1917782541,1920234272,543517545,543516788,1163152965,1701519442,1869881465,1684956448,604638471,1867319821,544501365,1802725732,1702130789,539587368,543452769,1769108595,1629513067,1797290350,168655205,1158286628,1919251566,1684943392,1818846752,1634607205]},{"sector":3,"length":512,"data":[1864394093,1919164530,543520361,218588265,168633354,1852727619,1663071343,1634757999,1713399154,543517801,1763733364,1818588020,168626022,1175063844,1936026729,1701994784,1718182944,1701995878,1931506798,1936030313,604638471,909456449,909391685,221529141,1093745162,860239408,842477616,842215474,875971894,909520946,1127627062,808596790,825640246,892748854,1177956402,808596023,842478646,909588790,808596790,842086710,825887245,808923201,909127748,808923188,843132996,809775156,909325377,910505521,927348293,909128244,910571059,909129540,909260593,909128245,909719094,1161115203,973737282,925909297,808466226,876032050,808601142,876034358,892744503,909525814,1144010544,875708720,1093682224,959854132,892748598,808596279,842477878,808596790,168640820,808661306,808530999,909391408,909522489,926234166,909456946,842282821,909326128,910243641,808662837,809775159,892613185,973737285,808464432,808464432,168636464,437918234,437918234,437918234,437918234,437918234,437918234,437918234,1701540713,677737588,1629497715,1931502702,1802072692,1851859045,1701519481,824975993,808528947,572793388,538970637,924852256,808591412,540292640,924858678,1110843443,168632352,538976288,540358176,924857399,892739636,540553760,538981175,538970637,840966176,808591417,540096032,908084534,808591412,168632352,538976288,540227360]},{"sector":4,"length":512,"data":[-1174239044,162791893,716448205,-964025907,-1342136600,10872877,-1796685174,-399659008,-377421669,-108853396,-2096926108,-1047894807,-1174372632,162791910,179577293,-855508550,33275425,1947024514,4712498,753464458,4188160,619238538,3663872,-2113442631,158600508,-453614416,652789899,-1262188032,-1261960448,169987371,-854886976,792505376,758915444,-960881292,-855002111,42515489,-385900311,-294518770,132702346,-721128960,-1008694774,808191114,171768178,1190425333,-2046110525,808455620,-1979710744,-1269787964,1478610178,168674194,1635151433,543451500,1702125924,1920287524,1953391986,1952539680,1936269413,168633376,1702129221,1701716082,1633951863,540697972,3108,437918234,168636727,809578810,808990257,1128413232,842548536,942682166,1110721345,808464436,1110983475,1128411700,808530500,925909825,1128411189,1093677636,843264835,842282822,222705969,1093745162,842543408,1127428144,876037170,1094861873,825243203,959460418,825377859,943211330,960836144,1179004993,1160788037,842477616,1094206789,944058437,809711408,825887245,959524929,808464451,808597296,808797236,1161902145,942883632,842281025,925905731,859391538,1178677315,1177696053,1127625780,808731699,1127626817,960770100,973737267,825246001,808465986,808661043,842020933,1094201392,842609731,876752949,1145254448,943010098,860041785,1093682224,1161181492,825636407,959857462]},{"sector":5,"length":512,"data":[-1174239556,162791891,750002637,-980803123,-1342137112,10741818,-1830239862,-398807040,-964034407,-1342142232,9431086,2129183370,31767040,567085492,-138802508,-1105081087,-919404039,984863283,1946170600,-387151325,343146541,783535242,1946166504,-1275819509,1828877,-729152908,567094708,41271306,-994434867,-855002111,42384417,-385895703,-294518756,-527820940,1979716584,-1979001596,222069472,984352116,215446979,76203007,-109834948,-177065940,1928661564,-725399824,230983178,48771120,-1832613376,-855460784,-1013819359,1850280461,1768710518,1769218148,1126458733,1701999221,1948284014,543518057,606106473,1850018317,544367988,544695662,1701669236,203694138,437911552,437918234,168638259,809578810,808990257,842285616,843334468,1128345649,808793904,843334450,1128350256,1110519860,1127821364,1110520388,808859715,1111049522,1162233394,809709880,221525808,1093745162,842543408,842477616,876037445,1094203185,944058437,808465201,875574839,1093678404,809845048,1127428664,876037168,1128346928,860045619,927216951,1110459184,825887245,959524929,1177563203,942883654,859058241,927215683,842614324,925905731,859129394,1178677315,1177696053,1127625776,808731699,1127626817,860106804,875574064,973737269,825246001,808465986,842020933,1094201392,842609731,876752949,1145254448,943010098,860041785,1093682224,1161181492,825636407,959857462,808596534]},{"sector":6,"length":512,"data":[1409327849,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1685015840,1868767333,1851878765,1700143204,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,1766596657,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,1967202381,1919903860,539828339,543974733,1819042120,1634562661,1851859054,1867653220,1699225710,2036690537,16825376,-1185754573,12451852,1552205312,-498728956,47608,8392330,-2118303261,73186048,1006651018,1007514656,-2012318676,-75414777,712246374,-336993723,1732149797,510919172,73875074,-972393471,17065734,-352033605,1728497379,1706754564,-371594492,243270023,-2111830948,1812225086,65733236,-1124003351,-1880619940,251705345,1721897165,687571460,645926773,-1275001754,73834496,300486861,1358660096,11799669,73797248,73834498,243273933,-2111830940,1912890430,1048717428,1953236068,19785987,-1610574104,17039506,-1610575198,33816738,-1610571102,17039538,-385830238,2028470299,9609216,-1834876628,10657792,-1566440916,11706368,-1298005716,-1899459584,251705560,1721897165,-855591932,1695449104,1048715268,1953760357,14018819,73797248,1715372545,91488516,-352319303,309507,-1274804550,-501101303,1681818359,91517444,-352054854,70760963,567085492,-854851144,1008733217,-385649554,1374224535,47359,512481422]},{"sector":7,"length":512,"data":[-75300746,-1088719808,1085800592,-1950315008,-1996458954,-1946127298,-1912572410,4241883,1085842931,-1009218048,73416322,-385649606,1639776349,73375748,11809068,1810419851,1358660096,313722229,-2147481623,343246075,414715827,4253696,-75366220,-1979354112,3467459,73678466,-2111671296,906257470,850593141,-2113926679,939811902,817041269,-402646088,11796498,199803786,-1172255488,162792406,550314445,-461367347,16548521,-289797772,-855002109,-1021260511,2122449075,208928770,738215562,-735644112,1171784195,738215562,-718866896,1171784195,738215562,-1009253840,168626788,1701604425,543973735,1769366852,1310745955,224750945,168633354,1852404304,544367988,1869771333,538976370,220209184,825238538,892613426,959985462,1141509412,1870209135,1702043765,1752440933,1769087077,1836345447,544502639,673201977,692989785,220464928,544162826,544567161,543516019,543516788,1952867692,1953722221,541012000,1311725864,604446761,1093745162,843461424,959852592,876037430,842478902,892612658,842478135,842483254,808595506,808595506,808595506,1093682224,808662066,842215731,875770675,1110914355,825887245,808726593,858796099,859255606,842609464,809775156,909390913,925905478,927348281,925905461,909456947,925905461,909653556,925905461,909719090,808990263,973737269,875577649,808465970,1144402999,859260470,808596535,1177762099,942813234,1177696565]},{"sector":8,"length":512,"data":[168656875,543516756,541934153,1936876880,1818324591,1836008224,1702131056,1145380978,1380930633,1700137485,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,604638513,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,-1169341879,-68613796,2131150338,1220280330,1564377613,-344711168,1102757898,-1092127479,1707018558,243968,1114941171,1555697588,-1574843136,-1073083778,62523252,-855002102,6077985,-1190504257,-1527578615,-1526120770,-1173113692,567085656,1639916720,-1431655926,567088820,208977930,-385246278,2025456278,43051273,2107883571,8364800,-1559594589,-1556084101,1721958506,222935562,448068235,243999181,-1991704570,-167077874,-16089594,-377411979,-372175543,-372129397,177475209,-779368445,222937729,177608329,-1275044678,-400437977,-117243616,436586236,177880713,177997510,503760512,113704716,-955642552,1225429510,-1878604019,-956301046,17465350,2114385408,58064650,-1140785688,599264584,153991717,716186061,-1173970456,179571356,179315149,-955869720,688646,2097595904,-1631715318,5892106,176166537,1006650344,1174500652,4843598,176297609,1006646248,-1576635073,686295677,1985952768,-1084283902,179897152,1974399488,-1579578594,-1073018238,104531572,259132032,-1744837679,-1964440758,540847359,-1161561228,162793973,2062098893,-1185537,896806460]}]],[[{"sector":1,"length":512,"data":[930358076,-1325399878,1915763712,2000239646,-1711636198,-1311214823,-1959777279,-773664294,-774700062,-805070622,-2099319892,-1099693831,-1149971957,-1877570621,-1161581558,-1012072450,1396791121,1229734994,126160197,135661773,122553614,103220630,68617072,1364658342,-1359865168,-1621493365,1604243243,9365955,176031478,-1946782209,-2096457194,688190,372967029,-462222698,448068235,243999181,-903148904,1555725940,-853036032,176071201,-4528047,113640821,855706238,-2145481774,1977289482,63408917,-1777976383,-1962183158,-1962240450,-1144050744,-672661503,-12240896,1341983860,177737355,1195880178,-950404022,721426949,-1707178033,704185098,-2097119938,32542,242604603,176031430,834323200,-855002102,116835105,1979648638,2131162865,-243925238,-1962674711,185237534,-1961069093,-1962241010,722115134,-2116389127,1980582399,-1143852076,1810366465,1124395776,-1962916888,222935759,-1116419541,567089844,-1274390342,169987368,-1960938048,222937079,177356425,177868427,-213791189,1049186212,113707674,68240,-854543165,163166753,567085492,378216653,1049299600,-633664878,242738804,175430411,-1090518598,-633664183,244045428,-819262822,-1073083728,-1359820061,1977236290,-1336687625,74246176,-1342172184,73721914,995830448,1946849310,-383733758,-1070398378,280613002,316920064,-997840960,-2044215278,-489549116,-1844399120,-1979705624,190662,-259341686,-388962096,-388962096,-1979710744]},{"sector":2,"length":512,"data":[1947149510,67154690,-373085648,512427030,-620033408,512429173,-343733616,-1157400821,1575485441,-1953860097,-2109830153,-81049846,398395511,-1090262272,243990529,-836040038,780874100,-397342064,-1403388056,359866428,292817468,225709372,158599484,-396447664,207094722,62711872,-538965444,1329792483,-1018440587,-1190387521,-4587265,1118481663,-102757060,203363976,1118628212,-92992196,-373052849,-35127095,-1946651392,-401961930,371982290,243993220,-788329850,16710273,512454775,-397276534,-1956970760,-1962244082,722111542,1340623310,-1631693312,-2045867253,4515850,-2076834978,-2083878134,937951937,9496576,2129144437,-2009167104,-1631695094,-2078897397,-2045867254,234965258,1245776520,177083945,113706611,2702,29878338,1962990824,-8132340,-391378973,-498466042,565887993,-398726390,863305836,176823947,176961163,-385941272,729022522,176701067,177081995,-1359869264,1049171317,1049168520,243862156,117377678,-1830286710,-1160940544,162793998,-1581047347,-1834808692,176857354,-1022717789,175965942,-1158122241,162794010,28582349,-397401651,1012400787,1021604877,1021342809,515883897,10741771,-169623542,176426633,222087475,-1631648140,9431051,176557705,176168587,-2097022077,-1041760045,-2009167363,-1942058742,-1978234614,-2111927542,33260298,-385885309,-812909144,176688683,-1310458100,176426539,-1992184974,-1609921010,243993374,1049299598,-16053624,-1787449614]},{"sector":3,"length":512,"data":[-544484981,176426635,186629705,-1493974982,-74724725,243917941,-812971378,176701065,176963211,179359531,176821899,-220230846,1257862318,176821897,176955017,868466738,440184009,222099572,1101722740,512488427,-620033408,512427125,635964048,1407153661,-2111927465,1977289482,1138395906,-1946348568,-685023273,110038134,1049168528,-919401838,1793676779,-2145481733,1977289482,-1877046523,-303545590,-1980265476,-1995796458,1963627062,-1707721827,-392727542,378142154,915081860,-2098722158,-50665219,515508916,-1339962100,23128074,203361930,1071841461,176428683,-1962139458,990548542,1445885130,-141864617,-117181949,722115233,1002505154,1930074118,-1710848229,734563082,2012691406,66126597,-213778951,1599732900,-1012599970,-1274421830,-383660791,599325277,142457381,512434637,-620033408,512427125,1441270416,-1710322692,737250058,1049313743,-201520488,-50427996,-1947301049,-1841395238,-1877047030,-1708226294,-60889078,-1274274118,-400438006,549322948,440173068,1284121972,-1962887681,1120994262,-1737239237,-1331387149,-347887094,-1899459384,-1899983144,222870736,-1962896664,-1962239442,-1962241474,244008693,-852817256,-1991269133,-385181122,1169881549,-855002102,-855526367,1012868129,-1167690407,280234584,330572237,550314445,176162503,-1545011201,2131150586,-4521718,-77338369,176031478,-1947896577,-1274373610,-1188967142,1488584705,-852970486,-854543327,6077985,-1961853811,637398]},{"sector":4,"length":512,"data":[1052681459,-1264278263,-1105081065,1757347932,440586,1488627187,-853422838,-401756128,179306498,45388370,1519526349,-1899459389,-1899983144,222870736,-369106200,1094908213,1986939211,1684630625,1769104416,1864394102,1768300658,1847616876,610626913,1701603654,1835101728,1970085989,1646294131,1886593125,1718182757,610559337,1852727619,1696625775,544500068,1262567982,1818846752,1915563365,1835101797,1768300645,1311008108,1869750383,1763732847,1768169582,1952671090,544830063,544370534,1701603686,1936278564,1969627243,757951596,1701603686,1769109280,1847616884,1663071343,1819307375,1684370533,1225395492,1718973294,1768122726,544501349,1869440365,168655218,1953383716,1696627058,1919906418,1310984717,1713403749,224750697,1867392010,1868963956,224685685,776938506,541011531,1852394532,1869881445,1869357167,168650606,1684948260,543584032,1970302569,1768300660,168650092,1868710180,1696625778,544500068,1311725864,606093097,168641075,808464442,808464432,221261872,437918218,437918234,437918234,437918234,437918234,437918234,875835957,843462213,909260592,910571078,221590596,1093745162,843135280,808595504,1161181494,875966514,842479926,859190582,1177957431,959918647,909520946,842483254,909520946,1127627062,875705654,959853620,876950327,825887245,1111044161,909127747,909128258,909457206,843265603,910438980,909719094,842348099,926365488,926496306]},{"sector":5,"length":512,"data":[-1575487300,582490215,33536549,598745549,-855505734,-1161262047,-1031595397,-253591537,78768779,-805049645,567092916,146784907,-1414792168,1940106155,410493720,-1560215368,1973622897,-1898279400,8436418,567089844,8390343,1556024576,-1442795520,-1341176440,768288,-947672333,768261,111258355,1037601536,521076720,111216499,734330368,402695109,-1557738242,-668270586,-338492239,136184102,1564377600,141828096,409470662,141092865,-930284804,-1064380274,-121843570,263518999,113643725,-972613476,68722438,412944071,-58589120,-955223000,-2145870586,-1677277696,113643288,-1341646689,16508973,-402639384,-1133248376,1916873900,1998142479,-1730097141,-1744884077,-1460993295,-1174214679,65738253,-1944704326,-86470968,-121843570,162855703,-1930747443,347736756,-1105081064,-1514203114,1631366168,2050754162,-536608137,1947024554,1948400662,1965505540,-1394570520,1947024554,1975794182,-1092949002,229644453,-1342142232,8644874,773245630,8120492,-143400752,452803,1965833346,-1404025331,-76275652,-143390404,1015175246,79282957,31582208,79297163,31057920,1375883752,719902467,5236736,1509969128,-678692309,-352314136,-388330327,984612885,-1962922776,-1945310250,518338,518535856,-1965585664,190662,-527777142,-771444399,48781800,616860160,663749647,1344749588,-1837161390,567083700,-1329375142,-386864352,-69009415,-435886397,1980510724,302336003,2114512900]},{"sector":6,"length":512,"data":[-435639294,-1912281596,855894793,-435635191,-1627389948,-1241238266,-435389945,-435579644,-435886588,137267972,2030487320,-402620392,1380975047,-1962987800,1951153156,2031520535,21162008,79238514,18475008,727370379,-1017626166,309574,-1962865944,-1017619766,1962869480,2030995722,-3938280,-1962839575,-796152329,780911533,243996680,1975457949,-2299880,-225716082,1459559144,-385918744,-391315627,1230700336,-963962252,-1677294546,1376547864,-411760728,786967984,-387716097,-722796542,-1949922479,-1950209038,65065432,3389891,585680939,-1395946497,2134671140,540804212,783286899,-486604568,-1993975314,639137078,410459788,-385981463,1347551031,17164370,1577118184,-1906574709,1505791707,-1021575621,55117682,-34012175,-213277631,283689892,1380995583,1593882600,-650422009,-484923970,736523010,1473873867,-1956731661,-350288181,-17962792,-397258671,1598750868,-886351609,-1407670850,1979572398,-880323644,-1951993001,1968922571,1458065160,-303544322,-340859907,-33691425,434688563,-1971817984,-397850928,-1720582128,-489591325,-489561391,-804592943,76213227,-2056114132,1945438780,744432768,1913273351,-183485437,-37361469,1929372648,178443,-1996506392,-1007140073,658244746,574359156,-1007091084,-1404641142,578030908,91604026,-495639494,1124567110,-1514410517,-3807208,-343803021,125048997,1979550696,-2125544702,-1961319186,-33822514,-401161794,-1410728603,-43390724,1006716042]},{"sector":7,"length":512,"data":[-1189645229,1558708228,-2100982785,-713737668,79251026,-11671552,76202840,-1190840385,-1359871996,1179042165,-645144111,403224575,1966750850,1138420658,-398178989,123731860,-1961318978,-1012599861,403189387,1358932712,-48568238,123725173,-386049816,-2031551095,92940029,-1325572120,-42997714,-1174404423,2062024704,-387937792,-528023794,-225834638,-287124342,1006659816,1008825352,1008235647,1011840045,1012036621,-1338805216,-46405624,-469977624,-1328813089,-47192056,1946352002,-1966997834,-386561322,-1226048354,1946352002,78729483,173663954,361244374,-337067193,-398376449,-947127019,-2055928028,-369332248,-672596106,-347123713,-3086093,-1258528791,-1021195007,413140678,361872909,-1256720197,-1626437120,-1609684968,34173720,-971464690,1613830,-2113848088,1613886,770180468,-388174852,1743322305,-64821247,-1558703967,-1588586391,1805850638,113725464,-59262,-1895394584,-1894223098,-1592233722,-12838782,-58572940,-2046659329,-661940028,-2020875311,1994919923,-389773572,984677489,-1946391320,-401051882,1035009097,-1946394392,504727967,-628416626,-165734517,-15172090,786957940,-71636484,770228874,-72160772,-385919511,-126551101,-1975118710,234783284,-398043020,-24969682,-1085311968,244454801,964871,1014345714,108382475,-1959899313,183041605,-389772548,250149893,-1928913156,-1962777187,-69474281,-1325701144,-68163526,-386192920,192215932,-402651975,-471270034,-1021867523]},{"sector":8,"length":512,"data":[-380484936,-92143502,-386566842,766509186,-386152216,1441331970,-1948568581,-1390931434,1651772732,1947073666,363708258,234889401,1974465031,-2132178346,28839905,-2050960640,187659715,-154137640,41226437,350801971,785181691,-75241299,2129183882,-398610181,395049849,1458062147,-75765509,-486835992,1152959458,976966,-1963237144,-77862716,-384384322,378142061,-1195173870,-437565886,-1189761602,378208272,-1389488110,74638033,507808558,192200715,-1963249432,-81008444,-486853400,401130469,-89528319,-1157838872,108134401,-402651975,378141851,266868899,-1593391107,-2147483624,18354958,-1900006626,201770968,-1945620224,-956297714,939525126,101616648,113768960,137101452,9309836,402177055,1515805528,1600019805,-1961425145,-15204314,-15199690,-15200714,-1911025610,-820508642,-386258968,-1511260726,-351878013,-1276153,-326696882,2525486,378285592,-863234036,213701774,1461585432,1280070998,1347637586,646651670,378411008,110041100,110041104,-2141710322,312737508,2525464,503782936,402177047,-1900006626,-1945712680,-1946024960,520130062,251657467,-1804265309,-1961298498,-484925170,1019479562,-1543190909,-402130718,1273559464,-117904899,-402651975,736689075,233368828,-107812358,-402651975,-1185743965,-1662517246,-65738501,-1007789422,403582603,-2097574168,-210420420,-65411002,-1994912093,-1021833194,872408552,418758619,1962504936,237931291,-67246056,1166611849]}]],[[{"sector":1,"length":512,"data":[96961282,201032515,1119413877,-26678960,413212297,316918667,504952255,-2093628122,-962329401,-489881788,113713139,71843,-1895912983,1444417030,-1409252929,1963801770,-2098232838,650611456,1577091234,-1207935809,567093505,-1575487326,28317799,-855610177,402235937,118365958,-1962910530,440830,-1161583117,-1897327123,1732150008,-210436328,6635137,-361413304,6766210,113689432,-352249752,1745274373,780861464,-840427506,-395741960,-974587053,1349612792,28957323,-89004032,309586,1392159464,-402652231,468253347,1523223547,-1976688808,1343776806,74769418,48965069,1499145933,2008723315,1975519766,377272835,118365966,-2008956542,-1105813746,-1849747805,1978468886,380091907,162833829,-1967513139,-134485738,-1172828511,1692926208,856323583,23783890,1962892008,-1982123016,-1996456674,-2130673890,1157653822,-2113440424,1157654334,-1910612620,-853887784,1555701537,1745286656,544538392,567087028,309706762,6948551,-4653055,-853035777,-66156255,767214359,-140777194,567088820,1052426494,-940411882,16804358,-66155776,-1171737577,567083100,1522188298,-1260751594,6076944,-1161616947,116791012,1962874984,422034120,567089844,-1174398279,263454812,113713613,65642,-1435123702,567093172,85536673,95485983,2107893971,1778829056,-1962803200,-2095577058,378212547,-802481877,422254217,-1031019821,244044547,-784662526,1997974458,859734837,74776345,-645150677]},{"sector":2,"length":512,"data":[-1910576245,-1261292581,522308890,422252171,-1275044678,690081063,1947806478,1963042832,-524058362,-1159992561,-622258484,423600630,-956269149,16804358,422033920,567089844,422395523,-1272810496,6076967,-855636807,1975519777,658410450,422158617,-1064385277,-13827802,1964584206,422945246,212059395,423076120,-1592262493,-989652675,-1592258909,279124283,378127128,-457566097,1745286678,-1770717416,2075836558,-853887976,-1173375967,567083100,767213578,-385649642,113704828,-956301188,27142,-1173048318,-315424676,-400917570,977010734,1156118901,-1245148672,-398859520,-125173701,-1979697432,1864238040,-386168040,686293035,-46421504,-276102538,-806619934,444333697,567085429,208929084,-1407681602,74717756,74825738,402402953,1108163,199809162,-790376448,-790376221,-1010627869,-385888792,-143394722,-384381766,-253168171,1380995574,-386351384,-1956710238,532713210,32000345,-1494007552,-397486732,-1830226349,-158340874,-160765780,-386496280,642774661,1575486858,-159651594,-386500376,-397937087,-1070402088,780914923,1908348942,-1659991272,-773205736,-153818903,409540233,-1994888285,-401052402,-1310195653,1829173237,1979711256,-987839502,-1407686346,1765181727,300437528,1832291318,1962281752,914968069,117315693,-1017636741,-1576980504,-396683133,2045247555,918888181,-924313495,115875829,2064041718,-2067857384,-1189040104,-1426915305,-392165946,11861936,19191947,-1978106206]},{"sector":3,"length":512,"data":[-773598781,-71073309,-1994945777,-1088914410,1476335748,409583106,-1525124673,2066123429,-1327234536,-1731974642,-171972463,410793611,-1326110488,-173807607,-384269122,1709765917,618695423,411017735,-321852208,-997528368,-2136864988,-789786600,-1997745940,-1021804250,-401253957,82313769,-401937662,-152305712,1911078962,-1439911936,410912502,-401902081,367787812,-1342176280,434678316,-388986113,-259326188,-1979710744,-790590782,-790048536,-387395352,-997588990,-1878782172,658510887,-236403798,1963605246,1505477600,30402581,-1342067992,-571954644,-796157698,733012106,75097098,-587846224,-339440982,4778172,-1599460176,-742516608,2118025743,57999640,-1743789122,-268177405,-388971611,-388962096,-205651164,619506447,-958010617,18382342,-1342171672,-2136954324,-387585256,-538378464,2114373375,283836696,-335604760,2114373134,166199576,-5510913,-2102776656,51937598,1947762592,-958712927,51937798,1197147590,125109820,411123330,-1974176768,1979792592,1946631251,1979923535,1963342852,35556109,-2113485288,1119355416,-92099760,-1341951228,-92100053,-2146602234,829686242,403054083,-1421261640,169378208,1007252672,-401771518,-637272284,-1985323600,-1021808866,-391500880,-286523688,402267787,-346537288,69075900,1230223384,-571945493,100899069,-1970136983,-20584250,-1058422134,-37033730,-974598006,66095869,-350721770,-402184986,749797122,-373280086,-1070399750,-1325470744,1538304556]},{"sector":4,"length":512,"data":[-958712918,51937798,-385899287,749797360,-373280086,113704656,-352315266,2114373125,119800088,-1325511703,-1195136436,-374657972,96927320,119849779,32034954,-790441730,182636770,-28186430,411123330,-972524541,18382342,-1325473303,2141235756,-385407976,96992823,-1144825788,585635145,-2126609920,225706776,-164871496,-15172090,1471152756,-21501525,-1325408024,96971308,-389854141,-796197460,65065368,-1559786536,-1031137156,359250883,184543464,1007449280,851341828,-30218048,-369196567,2042363308,-3151851,-1452146116,141755964,74711464,-1423160136,1107192041,1145848652,1095516748,1145586504,1095254600,1146635096,1398293080,1397768784,1162429513,1397965651,-44874669,-49423085,-49423085,-49401325,-49401325,-49450989,-334663661,-452068844,202242580,202235156,202235156,202256916,202256916,202207252,-334663660,-452068844,915988,908564,908564,930324,930324,880660,-334663660,-452068844,101579284,101571860,101571860,101593620,101593620,101543956,-334663660,-452068844,235797012,235789588,235789588,235811348,235811348,235761684,1124954132,1091356693,51292948,51240212,51240212,51261972,51261972,51212308,1124954132,1141688341,151956244,151903508,151903508,151925268,151925268,151875604,1124954132,386713621,286173972,286121236,286121236,286142996,286142996,286093332,1124954132,537708565,1628351252,1628309268]},{"sector":5,"length":512,"data":[1628309268,1628309268,1628309268,1628309268,1628309268,1628309268,1192101652,1192101652,1192101652,1192101652,1192101652,1192101652,1192101652,1192101652,-334625004,-334625004,-334625004,-334625004,-334625004,-334625004,-334625004,-334625004,-452065516,-452065516,-452065516,-452065516,-452065516,-452065516,-452065516,-452065516,-82966764,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-82994925,-1660053229,-1710307820,1947125268,1896793620,2098120212,-1945188844,1980679700,1863239188,-1626421740,-1760639468,-1894857196,-1844525548,-2079406572,-2129738220,-2045852140,2131674644,968212,876544,876544,876544,856537600,856568341,990786069,990786069,336474645,336452884,336452884,336474644,336474644,-1475474668,336473364,-452060396,-686938092,990817044,990832917,990832917,990832917,990832917,990832917,990832917,655288597,1041148692,588163860,923632660,-267474155,-401691884,219065108,-1592874219,336505620,336524820,336524820,336530196,-921761004,-854676716,906930964,974039828,856599316,856518677,722300949,789490453,-1307661547,-1240552684,336505620,403614485,336505621,336533012,336533012,336533012,336533012,336533012,336533012,336533012,336533012,336534804,336534804,336534804,336534804,336534804,336534804,336534804,-82895596,-82994925]},{"sector":6,"length":512,"data":[68000019,67996181,-1425102059,-1525797612,336473364,336423700,-83006700,-82994925,68000019,68102933,1678714645,1678717460,1728937748,1796123412,961300,1009408,1009408,1016832,487556096,437105172,-82988524,1057855763,1292806933,1292842516,1292842516,1292842516,1292842516,1292842516,1292842516,1292842516,-1022413292,-1106328044,-1173436908,2031011348,1527694868,1577942804,-586318060,-519209196,588087060,-1995515628,-1995515628,-1794276332,1527694868,1578066452,-586194412,-519085548,-1374723564,-83046892,-15886061,-83046892,1343016468,856599316,961300,1024256,705667328,571386644,806267669,672049940,755936021,621718292,961301,1030656,1141881344,-1002159678,1405305921,1112785493,-766551870,1312936527,-800242748,1104564045,1094828353,-851361340,1137918273,1137462337,1279514434,-1001634877,1137265731,1296286541,1296286288,1464063824,-1052687164,1154695492,1229243205,-1017952810,1238649928,1238780228,1238127949,1313456718,-1018279465,1238650441,1238324302,1255425362,-1035056447,1112195658,1480805061,1255819994,-985183545,1279970378,-800240955,1255820874,1347077456,1255164623,1313526606,1255099087,1212239059,-750498618,1287734604,1330434885,1330432835,1330430532,1330435908,1330434127,1289375823,1313886031,1448037850,1448037826,-866824745,1321682254,1330565199,1414877140,1414877122,-800108329,-967815344,-934062768,1213420880,-868003130,1389511506,1390039109]},{"sector":7,"length":512,"data":[-632401851,1389643090,1330826319,1212240850,-767470650,-1035910317,-683588781,1405896787,1414779464,-1001106493,1405703251,1405243220,1423396692,1473532741,1490307393,1489455171,1406419276,1061144389,169150399,-132844267,521477140,286606869,202636565,101974036,51645972,286525716,1175794452,-736830955,1460982036,1393838612,1192517908,588522260,-1995142892,1175776276,236456469,135793688,1113080088,1146635096,1112560472,1145656144,1163084873,1129534291,1347438931,67,0,1146507008,4801870,1514622464,1090519122,1342177347,1124073541,89,0,1431719424,4801616,1313624064,1308622938,1342177345,1308622927,1225395523,1818326638,1679844457,1702259058,1701868320,1768319331,1769234787,168652399,1342836004,1919381362,1948282209,1768780389,1702125934,1869488228,1818324338,168655212,1818838564,1869488229,1868963956,224685685,1867392010,1869574688,1852383341,1936286752,1768169579,1952671090,226062959,1850287114,1717990771,1701405545,1931506798,1701011824,544108320,1802725732,1143212557,611021673,1953067607,1919950949,1667593327,1696605300,1919906418,1634038304,1735289188,1769104416,1092642166,1914964493,2003067237,1232365938,1718973294,1768122726,544501349,1869440365,168655218,1159749156,1919906418,-2011133427,1869771333,1852383346,1163412768,1480935471,1818846752,604638565,793073733,542655816,1701603686,1851876128,544501614,1998611810,1953786226]},{"sector":8,"length":512,"data":[168652389,1701336100,1296189728,1919242272,1634627443,1866670188,1953853549,1142977125,1196769861,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,540096569,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,5063241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,0,0,0,256,852304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67125255,808469773,842283316,808600628,1177957172,808923703,825438258,942881075,808595763,959857460,892744502,859260214,875967798,1144270898,876032310,168638776,826356026,808990007,926234160,909719090,843265585,843330096,925906224,910571058,909260599]}]],[[{"sector":1,"length":512,"data":[285261,34013269,160,0,-1287123968,70189062,28,70189060,70189099,70189253,70189265,70189280,70189079,70189084,70189089,71237647,71237675,71237702,71237735,71237777,71237824,71237879,71237884,71237917,71237951,71237984,71238040,71238045,71238059,71238067,71238075,71238083,71238091,71238099,71238181,71238245,71238303,71238568,71238623,71238638,71238663,71238707,71238721,71238729,71238737,71238747,71238778,71238818,71238834,71238843,71238870,71238919,71238952,71238975,71238984,71239004,71239038,71239114,71239139,71239150,71239160,71239169,71239174,71239179,71239205,71239229,71239252,71239272,71239299,71239321,71239362,71239465,71239482,71239525,71239533,71239567,71239581,71239607,71239621,71239659,71239671,71239690,79691798,79692052,79692066,79692098,79692206,79692237,79692276,79692339,79692502,79692524,79692553,79692572,79692647,79692688,83755049,83755054,83755068,83755076,83755084,83755092,83755100,83755108,83755190,83755225,83755249,83755277,83755294,83755474,83755489,83755514,83755557,83755567,83755593,83755617,83755640,83755660,83755692,83755724,83755816,83755866,83755897,83756058,83756153,83756161,83756203,83756224]},{"sector":2,"length":512,"data":[83756235,83756257,83756301,83756312,83756317,83756322,83756362,83756375,83756388,83756410,83756418,83756426,83756445,83756453,83756464,83756485,83756496,83756549,83756557,83756572,83756608,83756634,83756667,83756700,83756712,83756724,83756743,90832929,90832989,90832995,90833007,90833030,90833042,90833075,90833087,90833208,90833220,90833324,90833336,90833354,90833380,90833403,90833446,90833469,90833477,90833554,90833577,90833612,93782434,93782510,93782930,93782965,93782986,93783007,93783012,93783039,93783051,93783180,93783350,93783376,93783559,93783750,93783778,93783844,93783897,93783913,93783934,93784176,93784214,93784290,93784349,93784378,93784521,93784543,93784562,93784597,93784656,93784745,93784876,93785050,93785067,106299408,106299416,106299445,106299457,106299636,106299645,61866718,107413575,107413611,107413628,107413653,107413757,107413789,107413816,107413828,107413833,107413842,107413847,107413858,107413897,107413925,107414003,107414030,107414058,107414080,107414135,107414202,107414455,107414521,111869968,111869988,111870037,111870045,111870061,111870109,111870129,111870138,111870150,111870155,111870168,111870392,111870415,111870420,111870429,111870453,111870458,111870474]},{"sector":3,"length":512,"data":[111870482,111870502,111870534,111870595,111870721,111870765,111870784,111870807,111871250,111871335,111871364,111871396,111871408,61866844,61866848,61866852,118030382,118030397,118030415,118030423,118030449,118030457,118030466,118030474,118030500,118030513,118030541,118030546,118030562,118030574,118030585,118030596,118030605,118030619,118030624,118030642,118030653,118030680,118030714,118030736,118030750,118030764,118030785,118030799,118030814,118030849,118030870,118030878,118030907,118030968,118031035,118031089,118031119,118031132,118031141,118031146,118031158,118031185,118031216,118031246,118031259,118031268,118031273,118031283,118031333,118031350,118031367,118031405,118031417,118031426,118031434,118031443,118031457,118031482,118031487,118031501,118031511,118031516,118031521,118031558,118031582,118031590,118031616,118031653,118031680,118031701,118031711,118031727,118031741,118031746,118031751,118031763,118031772,118031781,118031790,118031808,118031816,61867302,124059710,124059757,124059786,124059817,124060174,124060206,124060231,124060310,124060386,124060442,124060669,124061094,124061289,61867382,61867386,130809897,130809962,130810056,130810125,130810136,130810144,130810155,130810186,130810196,130810201,130810314,130810442,130810507,130810567,130810685]},{"sector":4,"length":512,"data":[130810723,130810822,130810847,130810947,130810979,130811020,130811032,130811044,130811053,130811109,130811121,130811130,130811144,130811153,130811169,130811210,130811233,130811249,130811254,130811311,130811327,130811346,130811360,130811375,130811389,130811408,130811422,137232407,137232600,137232650,137232669,137232997,137233023,137233047,137233076,137233152,137233230,137233254,137233274,140902462,140902483,140902507,140902575,140902685,140902730,140902753,140902808,140902840,140902973,140902986,140903089,140903156,140903180,140903235,140903249,140903597,140903613,140903632,140903833,140903916,140903929,140903943,140904086,140904109,140904133,140904164,140904178,140904305,140904434,140904506,140904619,140904637,140904716,140904903,140904938,61800450,12594042,151781540,151781558,151781570,152568301,152568338,152568364,152568381,152568388,152568494,152568636,152568682,152568793,156631060,156631090,156631181,156631230,156631270,156631323,156631370,156631477,156631592,156631634,156631721,156631783,156631873,156631936,156632080,156632160,156632262,156632377,156632419,156632506,156632520,156632598,156632740,156632820,156632846,164036624,164036640,164036661,164036677,164036698,164036719,164036742,164036768,164036789,164036805,164036824,164036850,164036873,164036896]},{"sector":5,"length":512,"pattern":0,"data":[164036914,164036935,164036958,164036981,164037004,164037027,164037045,164037066,164037092,164037115,164037138,164037161,164037187,164037210]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,5063241]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"pattern":0,"data":[]},{"sector":4,"length":512,"pattern":0,"data":[]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-198132480]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61800452,0,128,0,1380402182,5264719,544173908,2037277037,1734701856,1953391981,1919885427,1634493216,1936028531,67111437,1162104643,544173908,2037277037,1734701856,1953391981,658803,1835492691,544501349,1702521203,1668834592,1935959397,1261712928,1409288717,1830842223,544829025,1970238055,168653680,1869566976,1851878688,1970282617,1667853410,1836675872,1936486242,544106784,543518319,1969516397,168650092,1836667648,543977314,1768318308,543450478,1701998445,1634235424,1852776558,540697955,1852383232,1818846752,1291853925,1095770195,1279345491,1414680390,541999442,1850292023,1768710518,1651449956,1952671082,1685024032,224750709,251854858,184944143,50725636,1651341651,1948281967,1701601889]},{"sector":4,"length":512,"data":[1885430560,1953063777,2019893369,1684366691,25701,544173908,2037277037,1734701856,1953391981,658803,544173908,2037277037,1869768480,225669237,1867776010,1634541679,1696627054,1919251576,543973742,1651341683,544435311,1864396393,1830839662,1819632751,658789,1766590989,1847616878,1700949365,1713402738,1210085999,1850286112,1768710518,1651449956,1952671082,1685024032,224750709,1850277898,1768710518,1651449956,1952671082,1685024032,224750709,1968111626,1718558836,1634759456,1864394083,1768693870,1713402995,224750697,218234890,1297481738,1347245102,1852727619,1864397935,544105840,1886217588,1918988911,1768300665,168650092,776820224,542133588,544432488,1852138850,1701995296,1684370529,1141509422,1869488239,1751326836,1701277281,1936286752,1953785195,1852383333,1769104416,2123126,658746,544503119,1931503215,1701011824,544108320,1412320598,168644685,1953775872,1953525093,544175136,1701012321,1679848307,543257697,1937012079,224748649,543584010,1835492723,544501349,1853189986,168653668,1701729536,1667592312,543450484,761556581,1714251375,543517801,1444965999,1297362509,658768,1735357008,544039282,1702521203,1668834592,1935959397,1885430560,1953063777,1718558841,1852394528,658795,542135620,1868785010,1948279922,1663070063,1819307375,2127973,107413948,1852727619,1713402991,543452777,1919052140,544830049,1953383680,1847620197,1679849317]},{"sector":5,"length":512,"data":[1702259058,1952803872,980575604,32,1917848077,1634887535,1852121197,544830068,1852403568,1952522356,3801120,544106784,1701715968,2126433,1970825542,1718558832,1952805734,1668834592,1935959397,1701406240,1998611564,1752458345,121634816,98370623,68617470,1631979273,543973748,1869771333,220215922,1850277898,544503152,1701603654,536879162,980643696,1377828896,1919902565,2035556452,540697968,1851867904,544501614,1852141679,1818846752,1224745061,1818326638,1713398889,1634562671,1768300660,2123116,1849753600,1953392928,1634628197,1634082924,1920298089,1634213989,1668227187,1701999971,168636004,1851867904,544501614,1684957542,1651076128,2037539186,168624160,1702129221,1701716082,1919164535,543520361,1953785196,540701285,1851867904,544501614,1684957542,1818846752,218112101,1634231050,543516526,1802725732,1702130789,1768438816,1851859060,1701519481,536886905,1713401449,677735529,540682611,538970637,538976288,1224744992,1344294210,1869836901,543973742,1886220099,1919251573,1852394528,225600875,1919243786,1852795251,808333600,1126703152,1866670121,1769109872,544499815,541934153,1886547779,943272224,658737,1648427008,544503151,1730178932,1919250021,543519841,1163412782,1818846752,658789,1634222848,543516526,1802725732,1748770931,1629516905,1797290350,4094309,658688,1851066893,1869833586,1684371052,1954039072,1634628197,221934444]},{"sector":6,"length":512,"data":[218106378,1701336074,1998611826,6648421,1920099616,544436847,1702126948,1684370531,2573,124060133,544173908,2037277037,1112887328,541280588,1651341683,7564399,544173908,2037277037,1112887328,541280588,1651341683,7564399,1852989783,979857001,544165408,1128354899,1702043723,1852140903,658804,124059716,124059662,538986504,544432705,541591584,538976288,168632352,1635013408,538997874,1886352467,1277173792,1952935525,1310728296,543518049,538976288,538976288,538976288,538976288,1816338464,225669985,1207962122,541589536,538986496,168627200,1681989664,1936028260,538976371,538976288,1968185376,1667853410,2036473971,1835093536,218762597,218890250,1092624394,1701995620,538997619,538976288,1344282656,1768710773,1646293859,1633034361,224753004,658698,544503119,1931503215,1701011824,544108320,544109938,1701603686,2573,1412320598,1297502285,1347245102,544434464,1763733089,1734700140,1713400929,543517801,1701667182,1851853325,1634213988,1700929651,1763733093,1919905383,168649829,1224736768,1818326638,1495295081,1311732581,1634738287,1701667186,779249012,1124076045,1869508193,1886330996,1814064741,1701539433,1701978226,1852797043,1713399155,778398825,1325402637,1667590754,1867325556,1701606756,2112115,1245859630,544109906,1701603654,771760186,1279612997,544502633,1701603654,771775264,1565540685,771766816,5259597,1919052108]},{"sector":7,"length":512,"data":[1701409377,542842995,540680285,1869566976,1851878688,1768693881,1918988898,544433513,1667592307,1701406313,658788,1818391888,544433001,1567575643,1275076666,543518313,1651340622,544436837,1567575643,1392517178,1801675124,2053731104,1331372133,1667590754,1768300660,1931502956,1801675124,2112093,1224739341,1818326638,1847616617,1919249781,1881170793,1835102817,1919251557,658734,1970365778,1702130533,1953701988,543908705,1702521203,1668834592,1935959397,1261712928,658734,1684107084,2003782688,1700354848,540695923,1095975936,1668246636,1869182049,1314594926,540695919,977341440,1129529680,1278102593,1329807945,1347166286,1092628820,2119765,788198448,267918,-1949761348,-81848596,167772314,2464265,1738146863,-83425020,-326412812,-1760889190,-1577013243,1839395692,-1560234765,1048831260,1997137180,471763728,998754021,109248748,1929504028,436652009,-1593835291,-29498086,-1994688768,-2013220413,-773112689,-1996442141,-1982132081,-2082136433,31791622,113696115,-1325405384,-348806656,-1259514206,-619797760,-1561503838,1537403702,-348675347,-1544796766,446946054,-485841943,-1561109342,77851444,436651995,-956300827,31792134,-485711104,-1562177885,10152762,-1341865984,515395586,1973047296,-1207593206,-1336870912,-5222394,37460560,815989952,-451108407,-919593333,-1593620600,1000531228,470220779,1439391205,-967709557,15415302,-883037047,1374456661,1778503322]},{"sector":8,"length":512,"data":[-12154875,620709514,1946172544,-11105770,-1317019008,1390596616,1778503322,-1056810747,-1962981752,11861830,-883037047,-2115204267,-1711209236,90833358,-16742776,-16728448,-970427392,16711046,-16742774,-2043098882,393740029,1778503322,-40990203,-1996442114,25331918,-41484545,-1596099074,-789128459,1265817808,-11533904,-1327822794,1436176639,-1996122360,-1946222970,-2080440674,1962936703,8817198,-1996442369,25347782,-2030165505,-2037514496,-1336869120,-5222400,37460560,815989952,-350182967,-16867701,-1995880567,1439391212,-327029621,1048772866,1996610306,9431299,-451658111,225575167,1358432440,1342185656,151115162,30317063,-2037906070,-1098842368,1946222336,-7944664,-2037776130,-922812672,-16808392,-828762249,-1979356671,-1241579634,-1999730432,-16842366,1979645830,8818141,11555071,1358934096,-1073595494,-919559420,-451666293,547480529,377981419,8818147,666390783,-5222152,3775056,-657455936,547423859,-384130069,-451672321,-1979750423,1439391212,-326898549,440303886,1929445349,406749448,1912668133,-131287027,658683984,30775888,-828766455,-2012911103,2122380870,276103414,1778564506,-129595131,1778503322,-146372603,1778564506,-28931835,1056966810,-179927036,1056966810,-196704252,1056966810,-146372604,-1309260150,-1998007803,2122379846,544473334,477364540,410255932,343147324,276038716,-451404149,-245528634,403111680,31058405,620119690,1946172444]}]],[[{"sector":1,"length":512,"data":[-178353544,-472842057,-485050369,-1336933968,-1181069057,-1996177407,1570831430,-791611661,-1975946280,12055646,1988879313,172264444,-485062853,24510384,2088783936,-5242878,1497366901,-657407710,28316275,-1338704048,1436176384,-1996122360,-940835770,-2130944373,1946223231,1560725039,1586167795,-788482059,381157347,-352210717,1560725010,1586167795,-788482059,381157347,1342353635,-1073663846,-62486268,-789357152,-1589808168,1586226458,122128636,-451273077,513926097,512199147,-195130651,-472842057,-485062773,-1979949429,1183451719,-60912650,-1593030776,1586223880,222792188,-451279105,-1963172213,1183319879,-163149069,339483684,1183452277,-212032781,32655046,1183458027,1008477430,-1961265896,1200356446,-96040701,214983,-96040192,1946043961,-28931837,49446528,1586170997,55020540,-121536,2122329835,242549746,-1946394997,-1065155769,-1039089,2122324715,242550002,-1946394997,-16448697,-67099389,1586169579,55020540,-1946532215,1200290910,-771378932,-230278936,1200230262,-1977867252,-489491882,1200144906,-159481844,-1960610816,1174665798,-60912642,1929594683,-129976307,2209872,30775888,1183516425,-28965894,1183515627,-60912648,-1979496567,12055390,1183572945,277318138,-213480741,-451404149,-245528696,-451410177,-685885697,-1761549926,1575782661,-326412861,-1710822269,71237640,-1963178360,12057694,-1207966767,112255766,1358934096,-1073628774,-28931836,-789357152]},{"sector":2,"length":512,"data":[-1592953896,1586226460,55019774,-451148033,-1963041141,1183318855,37651450,1618346459,1778503322,-45709307,-164224,-828761484,-2012911103,-828703418,-2012911103,-828703418,-2012911103,-773063354,1056966810,-79263740,-1974468176,12057438,-245522550,-472842057,-450971649,-1705967696,93784149,-1946270071,2139160158,-1586167800,-1996863862,-1712650169,-451133821,-1207077366,-1202653093,-1706033118,118030805,-1017254775,-2115204267,-1711207700,71237640,-17201528,1056966810,-142178300,939569406,1979643782,-158955499,-1996442370,-1694565754,90833597,-17201528,-1635115797,12058359,-245522550,-783089481,277318627,-91846181,-2037884674,1048837878,1996610306,17623299,1778503322,8816645,12484863,678691071,-17267002,8817152,952696575,2013198470,30317079,-1903557270,11927288,-2104963447,-2030108927,-579469576,1778564506,-24737531,563966,-2037906369,-2037514503,-1336869120,11554824,37460560,-2037840704,-1098645764,1946222332,1560724999,351010803,-16742771,1342419024,-1705967696,79692347,-17004919,-789357152,-1973652520,-1946224762,-1998252514,-772645753,-24736797,478644734,-56718361,38258430,-91845885,-24771586,-56718338,71797246,-17398134,-16998773,-16562296,-1697178058,93782241,1088755361,1038423715,896663807,1358458296,1342186424,151115162,-1205409017,-1705969515,118030482,-16742771,10000976,-1246231190,1218072824,-1710921216,118030661,1778499738,-18159355]},{"sector":3,"length":512,"data":[-1017254775,-2115204267,-2097085204,31130174,-828741258,-2012911103,-956366714,16710790,-17004918,-16742854,-828762253,-1979356671,-1241580402,-1999730432,-16842366,-335610746,563935,-2037906369,-2037514499,-1336869120,11554819,37460560,-2037840704,-1098645762,1962999550,8818086,145772799,1358934096,-1073595494,-24737532,-1986991106,1439391212,-327029621,-1113980670,-1996133886,44170822,1183402203,16727550,1187448182,-973012994,16711302,-16873846,1178271924,-1709739010,90833358,-16871798,-829882187,-16809336,-16873730,-1232216341,1049493247,163182783,-66642432,115593611,-126572813,-2092248789,460652538,-16796019,-121094515,-1962931527,-217652271,737703078,-92058927,-971213313,-3592442,-153422432,1943589072,-193683442,-657403658,-660994701,-2096601591,31130174,44108406,-1706014501,90833520,-883037047,1374456661,-1560280648,379839768,-451632155,1554120880,-212098319,-1563873630,117426479,-828716756,-1576703487,-1113920719,-1559926270,1048632066,1972955953,-100931579,1048604651,1954605873,826179605,125143275,1057394586,-2141525244,-2098515650,1016727413,-352043264,826179660,91593451,-335791384,826179648,125144299,1057363098,-2144146684,-1762971330,-744880267,-352043264,826179620,91590891,-335751704,826179608,125083883,-349094272,-1591118710,1346951938,1778544794,37651205,192217563,1778503322,-12154875,-1191222295,-1202652974,-1706033115,118030805,-883037047]},{"sector":4,"length":512,"data":[1374456661,-349698361,28311553,-1202716492,-1706033032,93784693,16664263,-25263872,293011711,-771858805,478660579,-2097151767,1929510470,1575782888,-326412853,173968209,1586169738,1963407880,173968184,1183319946,-8486657,-1976667136,-922812602,-1258338680,-1949923072,1217006174,140413697,1946241082,105286368,158587088,838942858,1948269761,-352276272,-1979731966,113925612,-326413056,1586188625,-2012771836,1183383366,-8486658,-1977387520,-922812602,-1962981752,45219398,1317718226,-1996442113,73305038,-2147399542,-1053679415,1183503595,-1996442370,46292460,-326413056,681660753,33555947,-33544888,-1577171319,1174661928,-28951804,1183516278,-349658114,-1981077343,1174666310,-349658364,-388822607,1920530563,-118179827,47184,30775888,28313353,-59310256,-1705967696,93784149,-1949749085,-326501306,180829,-2081649835,28313324,142016336,-1706032976,93784149,-1593948535,1183373086,106859258,-2020998985,11860202,-9050032,-1578426717,1183435056,-79247620,106859008,-2020998985,-922814230,2012956216,-79263214,-964099916,-956539253,1191051264,-1965132293,1586169414,38242556,-1946263925,1586168647,-1593341444,1586227998,55020030,-1694861569,93782241,-1979955573,80371180,-326413056,172395345,-1309990749,-1336913663,1436176384,-1559914744,512486172,1200352028,-350313725,-212007226,-805195776,-1337035816,922701825,11594526,139827792,1183384983,-27358210,973227914]},{"sector":5,"length":512,"data":[74778694,770431113,-1946263925,-350313721,163712,1183501173,-791611898,-1207602216,300613632,-212007226,540475391,142016491,-1073663846,1575782660,1426065098,1364323467,-401967361,1183448647,-60912644,-2020875311,547612956,1560725227,1048772851,1962994464,105286270,-657403658,113668210,-1946160291,126487134,-1057094396,-397410124,547618387,-919559701,-1947525981,-472777634,-384004213,260686729,-350478709,149446,-1947524959,-1981080546,1586168647,-32536054,473861057,92114411,-561446731,-218364130,-60912732,547480529,478644715,142508265,1342927872,-1710721281,79692080,12079851,-1337070848,922701825,11594528,139827792,480445847,175570923,-350478709,1342523277,117997184,24510384,966414400,-804995072,-15633448,-1368010,1996425334,28940806,216728768,-350478709,547555211,-13702677,-899814263,-1957363706,283935724,16664263,-25263872,58065151,-1962894615,-472777122,-384006261,-2080881015,1946220670,1342287999,-1325893889,1342223360,-1761061478,-96040699,-1030458,-1946526069,-196703993,-1996273781,28374598,1316214992,-11533904,11597430,139827792,1183384983,-60912644,1183385483,38243058,955336328,108267078,425600,1996428661,-59310086,-493825,1183512182,1342223600,-2146935041,1946218878,-263797239,-230257920,1183558123,-8853004,33441411,1558774642,1575782911,1738,-2081649835,1048645356,16770330,1048643699,16770328,347606386]},{"sector":6,"length":512,"data":[1119375609,-711307225,-1710814975,90833358,-2131343736,1962997374,45980176,1183384938,30317304,1183319402,45980407,1183384938,563966,1183319103,563957,1183319103,563956,1183319103,-163149065,-388889167,-2131605880,1946220158,1946303520,1946237980,1946369048,1946434580,404654864,1569179365,117375217,1005184280,-163149311,3939364,1586117492,-788482059,381157347,1342288099,-1706032976,79692217,-1963178359,12055646,1988879313,172264444,-485062853,28328820,-1338704048,1436176384,-351955192,-178353445,-472842057,-485050369,-1336933712,-1181069312,-1996177407,1586232390,222792700,-620231109,28315508,-1338507440,1436176384,-351955192,-58817566,-1207339776,-1706023066,118030897,-1963172213,1183319879,-163149069,339483684,1200294005,-28955901,1183463659,1008477430,-1973980136,12055390,1988879313,88378364,-619673853,-2131081591,1963127422,-31113210,-2144080897,1963192958,-96040174,621789315,1586167792,-788482061,-2145653789,1963258494,-96040181,621018885,-420742144,-1208787318,-1948004096,-2021000634,1183570704,-60912642,-1979365495,512488262,-2021071592,2122379613,326435062,-1014431564,-348348534,-472842057,-1980217717,-2289529,-1763322,-1697178058,93782241,-1017254775,-2081649835,144312044,-2012987648,1586166854,-788482052,381157347,1342615779,-1706032976,79692217,-1946270071,1200291422,-96040957,-349561205,-211908728,706644291,184255467,683150706,1807241465]},{"sector":7,"length":512,"data":[-711307225,-1593374463,1346951938,1778544794,1575782661,-326412861,17099905,-620609917,-385648895,-828768025,-2012911103,-956366714,16710790,-17004918,-16742854,-828762253,-1979356671,-1241580402,-1999730432,-16842366,-335610746,563935,-2037906369,-2037514499,-1336869120,11554819,37460560,-2037840704,-1098645762,1962999550,1443284570,-2037514259,-1336869120,-5222392,37460560,-2037840704,-1634992386,2139356926,108331011,-619837697,922685675,145812256,19962448,-2037840704,144834302,-23163941,55020030,-451535221,-2016943151,59164,-451535221,-228816954,-1960908032,-773515746,-21591069,71601150,-417560695,1200288649,371100419,1552386277,-451501582,-451501248,1912667965,-113592307,4241488,30775888,266929929,1575782911,-326412861,-2096567165,1962935422,106859346,11798410,1140475529,1342594697,-312958893,-11533308,-1696395210,93784632,65213089,1183385158,-2134669050,259260479,-312985857,-485476609,1234843647,-1962497279,103482950,1183441682,-96040186,-485489151,-2096740863,1979712638,106859321,1183385483,46367740,-1962516855,-28931833,33965699,16547459,1996427638,-25755898,-1979746584,1325398086,-1947603972,1183447110,72285958,1183564267,1575782662,1426064578,1364323467,954939040,1978488838,-788483052,-1950119456,971182094,1994329743,244287748,1463714015,628465901,-313063738,305594112,-312690461,-312958896,-11533308,-1696395210,93784632,31658657]},{"sector":8,"length":512,"data":[-337440762,-62470365,113700188,-16716457,28900470,-118992896,-62486018,-485355893,-312688255,-411909829,954939040,1978488838,-788483045,-1950119456,736301070,-1981870449,-1892024754,74703116,-519270519,-1017254775,-2081649835,144314092,-2012987648,144373062,-1996210432,1569163971,-196704015,-1208721782,1015515648,-213481237,-348905926,-1880554635,876511232,91488491,1778499738,-100233979,-1924129062,519660550,1292368,108698192,1183385942,-159973386,1778388634,1342287877,-1208721782,-1847040,-1327161673,1436176384,-1996122360,1586231878,41910522,-1341688832,939479041,109962731,1344199418,-1912971637,1344144967,-1274722422,2056933376,-1995876858,1996486214,957174,-1063647894,-1710921215,90833344,-1561049462,113765172,56068,-620609917,-385648895,1048772767,1912920836,67553035,-1711275813,90833344,1358841485,1342177976,1778517146,-62485243,178256,33856080,1586103658,-788482060,277318627,-62520869,-1694599425,90833228,-1706024784,90833015,-1695123713,90832910,-1208787318,-1847040,-1327689545,-946188284,-1341822464,2006601786,-16422400,78707830,13081168,109905258,1344199418,-109640051,62410782,2056933376,-1995876858,1996486214,957174,117376362,1474943748,1575782911,-326412861,112721,-1545267037,715384086,-451632149,1470234800,-245587219,-1561109598,117426479,-828716756,-1576703487,-1113920719,-1559926270,1048632066,1973218097,89233927,350946987]}]],[[{"sector":1,"length":512,"data":[-313049472,-402426880,1048640941,1972955953,-103487483,1048605931,1971907377,110074375,1726678079,-349094272,-402295398,1525414794,-349094272,-1710787178,71237843,1048595691,1972169521,-70391803,1048592619,1956703025,826179591,125149931,1442842266,-2144605434,-1796525762,866126965,1943589099,-35592173,1048582379,1972038449,563719,703268523,1222312609,40933968,1048773994,1963055874,30317067,1183319402,-12129793,1358527160,1342194104,151115162,1575782663,-1957363509,108954604,-1207143424,-11470422,-711326090,1560742145,1426064074,2123099275,-1338143482,2147465472,-1946417378,-234429487,737703342,-796308783,182877,1374456661,-621148531,1586188318,503811334,664425296,1342532096,1443265178,-620715255,-620742913,1778388634,1575782661,1426064074,109964427,1344199418,-1710852353,156632485,-2424669,-1696923594,90832910,182877,1374456661,-100233903,-1957683494,1200424542,-1974460927,1342223367,1443265178,-620715255,-620742913,1778388634,1575782661,1426064074,-326898549,-129579512,108953604,-1975159296,-922814394,-1946663288,254085190,-112818176,1859323057,-109150200,-1979223286,805632326,1183451115,742458617,-129070582,-829882187,-2080750968,1962936446,108953606,-33196284,-1242888626,-621148531,1183469598,-1996442376,-95777338,78729502,11913258,108698193,10684758,3604443,957147,-326564502,313949,-2081649835,1187449580,-954195721,539031878,100026054]},{"sector":2,"length":512,"data":[16154240,1183462518,-2000093450,1183577670,702726,-235417039,-134330743,105810913,-1048328149,-163149264,-964099916,-1946727800,1183448646,16286470,109954677,1344199418,519521933,374864,108698192,10684758,3604443,957147,-326564502,182877,-1192457387,-1705969210,90833048,-1957311651,251613676,109959938,1344199416,520046221,43686480,10684758,4096987,225706203,1358533304,-620742913,151115162,-12154361,-883037047,-2081649835,2122516204,1517682694,-621279603,1996443678,-62485242,1183666206,-1706025222,156631858,-2082799453,14352446,-1833431692,922702073,-711271680,-16316159,10094710,-1995895808,1992558303,-95515652,1183712798,-218357768,-1957093468,1174534726,33958152,105261531,-326524693,313949,-2081649835,2122516204,997588998,-621279603,1996443678,-62485242,1183666206,-1706025222,156631858,-2082799453,14352446,-1833431692,922702073,-711271680,-1962473215,103414342,1177148162,-1983911162,46816748,-326413056,-28930735,178256,33856080,1183516010,1575782910,-1957363509,-1957604884,1317668422,65110024,1183369426,1962949884,-62470652,105810689,254337,-771209590,-62520640,1183383732,-25263618,91357585,-1845596543,-27358463,-669022326,1023231624,-1978632705,-657456058,-662109069,-4706837,-1977029633,12057950,-685734006,1963476538,-1948004080,1003042439,91555398,-335657333,-62486006,1174470836,-1985025026,113401324,-326413056]},{"sector":3,"length":512,"data":[-5222063,-669041011,503419321,-1426916345,16598726,1222048929,-1241690486,2009611008,-1966372564,-1999167353,3996742,-783279500,918028259,1358934217,-1979761688,1183514182,-27358211,-669022328,1979533054,1575782855,-326412861,-1224319350,-1333279232,-899809319,-1957363710,149717996,-112953,-687955457,-2131147128,1979775358,-112817613,1183369470,-1996442375,549421251,91554007,-338223454,-111244773,-472842057,-874608757,2013152827,-28931630,-1560721782,-940845282,-685891958,-1082130249,1946212128,-28915851,-56492033,-112817962,-1963434360,11860294,-687995333,-922865546,-1258731896,-2134669056,14098623,1183319413,-1977881608,12056926,-2020875311,1178323934,-1982826498,1183514182,-129595143,1586152939,-1979664392,-791039865,-1709607976,93782626,-1208459638,-1333294592,1943589081,28332807,25290832,987176608,58062918,-956267031,64070,-688122229,-1258797430,1255156480,-489486927,-687335933,-1963174263,-1210638818,-1847040,-1697958729,151781376,-1006182775,12188286,-1910613503,-1510802214,505317919,-1979664425,-1965612921,12056670,-685734008,-685891958,-472842057,-1258797430,-1948200704,-1983302001,915179974,-561017911,-561215029,505318091,-1979664425,-1965444985,12056670,-642742392,-685891958,-2017066825,-973023456,14266503,-1593953560,-326510818,-1957313699,116163564,-1999176543,1187446086,1187447036,-2147483394,-1342112386,1073838079,-1963043189,11926606,-2091855613,-5238534]},{"sector":4,"length":512,"data":[1497366898,-657407710,-1981217934,-45708800,1183369470,-1996442371,546278083,-78739241,1946220928,-788482777,-1981558303,1823771598,915377109,-772734007,1824293862,209059791,-2020949111,-789128784,494131408,16547456,1996425588,-59310086,-1979691288,11861062,-956414463,-352256954,-58818545,-1979288320,1183382854,-62456070,2147253888,1996428661,-59310086,-1979702552,11861062,-956414463,-385811386,2122383185,158597372,-362753,82377846,1575782656,-326412853,-1608717181,-657402081,-890698894,520537600,2122318039,175513092,-1274788214,-687824128,113706731,2021120,-1311309663,-1981230329,10613830,-754339369,-230258208,-104200563,-1929886071,11926110,519458441,1187270992,-1706031374,152568212,-2081405303,1946218622,-260144889,376766688,-919337331,1187270686,-11532552,-962922890,-1995892733,2122575942,208929008,1358549176,-1695516929,118030805,-1982137695,113763910,56058,1358556600,1778403482,27892229,1090783687,1183383732,-100233744,-1924129062,1344204870,1342177720,1443265178,-263812855,1358571704,1778403482,-431584507,-1965360477,11994718,-685727862,-472842057,-1274657142,-1948200704,-1982501729,914656198,-775748663,-1950119456,-1982894969,-125567930,-385649409,44105892,-62486057,-1258008950,-1547631872,104584962,1047975680,1003946145,1943470598,426759,-253026601,-1311309663,-1981754615,10613318,-754470441,-196703768,-919324929,116541124,4889168,1183385942]},{"sector":5,"length":512,"data":[-260144144,-385649664,1183449255,-1996442620,1183514182,-448362490,-1979955573,2122575430,913703166,-1209704822,547326464,-788482089,-448361757,-523173708,-714301557,-2071214455,-1023162058,-1014374191,-1980871029,-19960689,1191175502,-28377106,1183565035,-754339332,-230258208,-1308866933,-1981230329,1187509318,-1962934040,-1965622250,11798086,-1320497109,65196805,-1982396394,922741334,1187301684,-1974466840,11797574,-150863687,1187270881,-1706031374,156632250,-2081405303,1946218622,1812383249,750256371,1996443898,30776048,2122319625,309723140,-1224319350,-1333279232,1325269209,72285702,-326506261,311901,-2081649835,512367340,12048158,-685734006,1963607610,-1948004072,1003042439,225773638,-804895094,-385649704,-1494678882,175570690,-1341622529,1575505920,-96040454,-360829,-1024916619,-94467328,-669022326,-1259911544,-33146112,-385649706,-523173724,244040585,-1886791930,434686942,-685858053,-688122229,-1259911542,1255156480,-489486927,-687335933,-940943735,59462,-685891958,-472842057,-885737473,201326746,115312905,-1175947580,102629632,535053966,530969340,175570777,-1341622529,-571977728,-96040455,-1948836192,-2021066146,11851807,1317716873,546277386,-1948003881,-2021062586,1586153782,-1979664409,-1965444985,-1210638818,-1333295104,-413234471,-2017066825,-973023456,14266503,1183450859,-685858073,-402585111,513997432,175570903,-1341622529,2112377087,-96040455,-1948836192]},{"sector":6,"length":512,"data":[-2021066146,11851807,1317716873,546277386,-1948003881,-2021062586,-109000394,-1253477385,-1981689600,-595117109,-1207078195,-1202652603,-1706033122,118030805,-1224057206,-1948004096,-1982501753,-125568954,-1207339521,-1706023129,118030897,66608779,-472840098,-814970997,-1577826679,350996788,-1995946357,1586164806,-135561206,-472842057,-624785525,-2081667447,1979708542,505317918,-788482089,884473827,39627,-544667380,-1191182152,-218365696,-1957827669,162657350,1183441107,-196703248,-388823119,-899447,512420982,12048158,-1207966767,10144564,101256192,33601619,-263797680,-1449504762,-1995876863,2122575430,208929006,1358592440,-1695648001,118030805,1087833761,-2083060061,57934072,-956263447,-954,15156934,1222048929,-1243132278,2009611008,-2134144740,14098623,-472838540,-874608757,1945912891,-62486269,1978091262,-58818089,91455488,16533191,-414792064,-688086784,-414283192,-935657291,-880196489,-685719680,-784960512,-561542173,-62506037,-2016999309,52190,1586106091,-788482073,-62485533,-874608855,-1209573750,-1948004096,1003216519,1926694406,111362052,-414777641,512405365,12048158,111272913,-561542697,105286347,192141520,-685891958,-2017066825,-1962944080,-1210638818,-1948004096,-1983171449,113925612,-326413056,621299339,-11533825,1183517302,-754339576,1996443880,91265542,56165783,113925569,-326413056,-1224057206,-1948004096,-1546294137,-125577452,-1207339521]},{"sector":7,"length":512,"data":[-1706023129,118030897,425603,1642660727,175570689,-1341622529,1342223360,-1544071192,1048827664,1962923792,270437197,528976599,-1962887976,735509526,95505104,369353427,378132232,113760028,55066,-1710459137,151781376,-1006182519,-1177085386,102629632,536757902,530969340,205947225,1191117312,105840392,1586139883,-788482294,138841059,-841185477,632818038,832196647,-1962473214,64427038,-472840098,-814970997,-2083056989,544604152,-1710459137,151781376,12115849,16824576,-5508356,1325336646,205947142,-1326775808,-1311305055,-1545546999,312596236,-754470441,-686906392,-687208761,1325334529,138870534,425603,24641456,337546048,140379095,244048849,1346492178,-814969031,24444848,-1054713536,594794704,-16091393,11536502,-397410124,-125569444,-15698433,-2684410,1191118414,302448392,-4854825,-3591114,10095734,101256192,-687169197,-150863687,113529057,1342625548,1442949530,-686251255,-686276989,-16157696,-1697179594,118030897,-1177089375,-503905792,-385071615,-899809642,-1957363704,209125356,-16091393,1436157558,-1559914744,1183566128,33498378,721551545,839813576,139344841,1183516278,-919428344,576093,-2081649835,1979714686,142016304,-16353537,-5239690,168204880,849413527,205924809,-1996077567,175541185,-919585141,-218364130,-919428700,-351648255,147480010,-326413056,-1224188278,-1948004096,-2021063098,77712860,1820821975,105251797]},{"sector":8,"length":512,"data":[-2133392221,1945569406,50347269,-1665659530,834162938,-711307264,1560742145,1426064586,-967709557,-1593770170,-1974937860,11927374,695715899,-2020947063,1178261280,-1978043130,-791039865,1359442904,-397409872,1586165851,-973031425,14098567,1979664126,-174200630,-899814263,-1957363710,250381292,-688126265,12058624,33566141,-956414327,-2113932474,-2687938,-1956154624,-958989282,14098567,1342308536,519456397,2005584,1183385868,-92371974,-1958251264,144963654,-65106985,-1333279018,-472842023,-874608697,1183449088,1943589107,-28931298,-885749879,1087831201,-2116616541,33619582,-125631118,-972786347,-16714938,-2116617210,33619566,-4681237,1816038911,50379215,-218364130,47275,-841204083,503367865,-1410139129,-1912602696,-1177195458,119406792,-1196690692,77791232,-687430697,-1546183006,113694466,-385886433,-326503221,-1957311651,530600428,-791611689,-14715944,-1698089930,152568352,-2080487799,1946222206,-25755896,151138714,520537607,-326500393,-1957311651,149717484,563712,1183319103,45980411,1183384938,33983486,1183402203,16286204,-385648892,1773666313,832196647,-1207498494,-11473572,77266038,-1979356670,12057438,-245528694,-1996929400,-2131928826,57999608,-1979703063,-152356850,-1996442415,1015515843,889600747,2013245675,-1054719999,57858256,-973074711,15554566,-313063738,1575782656,-111244597,-472842057,66995851,-1982132089,-1964830714,12056926]}]],[[{"sector":1,"length":512,"data":[-348354678,-312998264,-1979955573,-1964830202,-1997852410,-957524218,-973014458,-1979647930,-152356858,1926811856,4909315,-313049472,-385649502,109772864,-1065229550,109702492,1048697590,33612562,384369527,-87771136,9607760,922683145,-979705072,-1996051711,-1949606420,-1914498498,-2014487419,-1329493561,-66642432,-326522126,-1957311651,183271916,108954369,-1962511360,130418270,205964288,-17398135,-17267060,-1995815285,-1946223994,-472840098,-624783475,-1006218978,106892358,175570768,402900634,-28931831,16678531,2122521460,141819910,-972661109,1542192903,-17398131,-25755824,151120538,138840839,1342240517,1342177464,91265616,815990167,807308233,-264273719,-2037576332,-11469066,-358941066,-1962473215,-1949749218,162595655,1468786899,-754470651,-1950219294,-422508426,-622689143,-1996011637,-1982147964,181034476,-326413056,-972493693,-2428410,-625983869,-385648896,113639645,-1593779468,-1974936912,-1243941874,1992833792,13101315,-783285840,-3438111,-1327844681,1436176384,-1996122360,1586231878,105352698,1200246814,1342223365,-1260718944,1183666176,177885433,-2147064064,1946220926,-621108921,-939637111,14350854,-85936128,4758096,1586169194,88575482,10000976,-1063647894,-1207604735,-1705968907,90832968,-956300134,-94467319,-1710864504,90833344,-1543616885,-1762927878,-790957408,-970886184,14349062,-621672762,-603536384,-1336932614,848973832,-1610301437,-789128461]},{"sector":2,"length":512,"data":[-663496496,-621535606,-472842057,-624785523,-828747746,-2012654080,117373254,57989876,-956356375,14349574,-883037047,-2115204267,-973011732,-2428410,-1978769781,-1040317105,-1257932915,-21066496,-66642178,-2037537550,-11469058,-1915030474,-1924071866,1358888070,1728206746,1943588870,1342287960,-621535606,-472842057,-625821697,-1706032976,93784149,-1961998711,1200426590,246960133,1996443899,-621502210,-1706032972,140902414,-1544871775,1856101130,-620190732,-211024186,121674495,113640511,-973016212,-2428154,-621541690,1575782656,1426066122,-326898549,173967882,-472842057,-624785525,-113015,1183452278,1342223370,1728236442,-62486266,-229757,1183531380,140413948,1183516553,106859518,1183516553,-754339332,-129594912,-1308866933,-1981230329,1183578694,-621239298,-621279603,1187270686,-1706031368,156632053,-1326037367,-1341985793,1575782656,1426065610,-326898549,106859296,-2020875311,1183439570,140413924,1183319946,-1995469342,11855950,1317652483,47334,-1980742007,1183444038,-364475922,14843520,1586189430,201820904,-515471328,-1964614005,550076431,-1948234104,45215814,1451933907,855684833,-263812670,-739490165,-530675008,-1020067657,-1947449719,-925635002,1183433523,-364475410,-1036793645,-18200951,1191174734,-431030296,1183557355,-137219600,1451877494,-297366530,822093241,-1980631086,1183578710,-137219604,1451877494,-364475396,-235417039,-2080876919,1962998910,-62470395]},{"sector":3,"length":512,"data":[2122514433,91554040,33048263,105286400,1342240517,-788111733,-28931101,-622688509,1342222416,-1761251174,-163149563,14894790,635666048,1586193523,-92894218,1962948736,629112843,-1202490113,1709965311,-1946788213,9108086,-523173708,-1056764019,1358055049,-1341622529,966414591,-804995072,-1961593896,126486622,1174601908,1183400178,-1950119436,-30479609,1183572806,-96074760,-2080749943,-1670240776,637169283,1183553259,-28965892,1006519945,108192838,702826123,1558838854,1575782911,1226,1374456661,30317137,1183319402,-45708547,3948580,-1394015371,30317056,1183319402,-45708547,3934244,1586105972,65241341,-2020998985,669773125,620578442,1962949760,-45708783,1346138148,-828766092,-2012911103,-828703418,-1274713599,-1966896896,-1997447801,-1113916346,-1979356670,12057694,-2029788207,1183439632,926843134,1232404715,-1208197494,1015515648,-348675349,-1543616885,280550150,1218072827,-1979356672,-1209321698,-1847040,-1327689545,-946188284,-1207604736,-1705968854,90832968,-620349697,-1706031952,90833095,1778499738,1575782661,-326412853,563793,1183319103,138840831,-388889935,1183318820,140935422,1962949635,-10581493,-2020998985,367784285,33455744,1586106997,-1979664385,-1208787297,998738432,-12154644,-804895094,-1978305576,1586167366,-2013219064,-1964159609,-2021064890,334228817,-1963047286,11995230,-313948280,-1996536182,-1980938873,80371180,-326413056,-1610158973]},{"sector":4,"length":512,"data":[-657396934,1436552051,889586413,-339149077,-313155577,-348846590,-1963243896,104465990,91679541,1996179002,1463713862,309699309,721974923,-1964830666,512427590,8968950,1586114027,-788482294,277318627,-28931619,-1995946357,79232070,1183666176,45109500,171376464,171481827,109249943,-1996168438,113925612,-326413056,1358638264,1778403482,21338629,834144009,1218072827,-1979356672,-1209181922,-1948004096,-2027223482,-1336878320,-946188284,-1710921216,90833344,182877,-1192457387,-1705968840,118030482,-1710983425,111870405,180829,-2081649835,1187456748,-1711275782,90833358,1183383732,138841086,-523040591,-1979824637,244053062,-939269360,-1694740855,90833358,-1948432760,1543894086,-163149331,14304966,618481290,1946172544,-582579690,-388889423,1183318820,-1996442402,1369410243,-1975915539,1076157766,1148518460,1056966810,-498693884,618481290,1963998320,-497120497,-211902582,-1618345801,283896891,618481290,1962949744,-497120494,-245522550,-2020998985,1183378236,-1962021920,-1618288034,-320081316,14698182,618481290,1946172424,-582579676,1183318820,-1996442401,1237287107,108331757,-314204278,1586110443,-1979664417,-336771705,-582579629,3932708,144319348,-2012987648,1586158406,-1979664421,-1997382521,-472785850,-417560693,-956676471,-335553978,-582579670,3932452,144315252,-1996210432,1587514051,-1979664397,-336839801,563723,-1014430657,-245528694,-1965275512,69524806]},{"sector":5,"length":512,"data":[175439932,1778564506,-129595131,1187448299,-2147483400,15554622,1586116980,-1979664420,-1997849465,-75439802,-2144635648,1963133566,-193035495,-1961069055,-1991707066,-1014368698,1973043072,-871905778,2122320363,57934346,-385812759,2122318245,1215561952,-1209966966,-1964781312,11853894,-1886658351,-1014375152,-586117333,-1981395319,-754667064,-398030368,-1980086781,2122441798,1930428646,-96060667,1996424819,-31921924,-1981528437,1183513158,-515471136,-153467254,1943589072,-597784030,-472842057,-619673717,-1980086781,1178330182,-16354310,-404161418,-465138691,-1963309431,-657455546,2122347379,225706208,-312992118,-472842057,-337623414,1478396427,-788482067,-515470621,-523173708,-586117237,-1892957303,1317657872,-431584282,-523041615,-2115484023,268494462,1174603891,-62505988,1996424819,-41096964,17464960,1183518837,-62520344,737824395,48858056,1183517931,-62520344,737824395,1317620168,-96039942,66477707,-129629433,-1946532215,346291270,-312958749,-1964155998,1520568902,-1996442387,786682307,88319999,-1946532213,126416478,16416385,-2122812927,-8324482,1183451506,-791611898,-9931816,401144950,-1956582403,1586231878,-351827466,-513897898,-472842057,-586119285,-1980342645,1479999239,-59310099,-1696499969,111870281,1183528427,-161575942,1183516553,46171126,-1963571575,12050782,-1886657583,-1014375152,922685321,1183575384,46171132,-993399984,-184227068,-1996155388,113925612]},{"sector":6,"length":512,"data":[-326413056,1048596817,1946217270,37651273,1198916059,1778503322,-12154875,1183510507,1343169791,149618864,620709514,-5222385,13736528,518719147,-1963100417,11861062,-335564720,-42533109,-1258535286,11554816,35166800,1048774315,1979833090,30317114,1183319402,-12154113,-388888911,-1963047288,45219654,52750546,-1963112824,52756294,-1963178360,12058206,-13704239,1845878695,-2012907515,-1996122875,13327852,1374456661,-621148473,-326565888,-1957311651,1839223276,1943589107,-66679538,-1706025254,156631246,-2130819447,15414334,-1063647884,-1610257919,-657396944,109907571,1344199418,1442893466,-28931831,-1760835942,1575782661,-326412853,-349134767,242473168,-621148531,-828747746,-1995876864,211484230,-1207498496,-1705968794,90832968,-1710852353,90832968,-899814263,-1957363710,117395948,1048632078,1946217268,29399562,113640810,-16717004,1218053750,-1996133888,46816748,-326413056,-1610158973,-657394836,1991793779,1218072827,-1710921216,118030661,-621279603,1183666206,-1706025220,156631347,-1191557495,-1705968765,90832968,-1325500673,-946188033,-16422400,78707830,13081168,-1967651478,1218072827,-1610257920,11856689,1342353488,1778435994,29399557,815793514,1943589099,-100233970,-1706025254,156631246,-375159,-1332083594,-1995895808,46292460,-326413056,-1341723517,922701825,11590408,139827792,1183384983,-27358210,-1995880565,1586231878,41910526,-1340967936]},{"sector":7,"length":512,"data":[939479041,-1706032976,93784149,-335657335,-28931099,-1979955575,88575427,10000976,2122515818,963903738,-1706022736,90833015,-11533904,11598454,139827792,1183384983,-60912644,-1962586114,1200487518,-1734717435,-1962579456,1207893086,1344843781,1778415514,1575782661,-326412853,-1710721281,118030429,-402229505,-899809581,-1957363708,-2091822612,1946222206,-73811963,-1414003733,1570394363,-1928918784,519815174,140413776,1342572484,-1710983169,156632698,-1694611831,90833344,-211024186,108461824,-1979805976,80371180,-326413056,1358676664,151018906,108461831,1576957672,1426064074,-326898549,1812383260,113770483,51500,-1982136671,1183575110,16286700,-1545010315,-620190975,1347486129,11796656,139827792,1183384983,-27358210,-1996273781,1200352326,-230258425,-1325401981,1073837567,-1947974008,1183384903,155683824,-1947318647,2139160158,376700930,178456459,1359065563,1342222416,-1761061478,-28931835,1183572459,-350444546,16402119,-465139200,2054412496,-772645237,-1031303709,-1957683494,-1913971682,1344144967,-1274722422,1419399168,-1995892734,2122578502,1148453114,-1982137695,113763910,56058,1358685624,1778403482,471763717,88575467,10000976,-88603286,1218072827,-1710921216,164036612,-350478709,-1710864504,90833344,-1545189749,-1796482310,-772645237,-1031304221,-621239334,-1449496597,-1274427648,-96040704,-621279603,512446494,1200483100,-1974460922,11797831,39098960]},{"sector":8,"length":512,"data":[1183385880,-92371974,-1589480448,1183439610,-100218906,-1207959334,-1705968619,90832968,-350478709,1342523277,1778423962,-64505851,4758096,77202794,-1274427648,-96040704,1778499738,-431584507,-337970525,-260144229,-1960348672,162656326,1183441107,-263812120,-388823119,-1914026359,517666822,-398015408,-174436346,-1995876861,1593834054,-133788412,-1706025254,156631246,-2080749943,1946221182,-92864760,151138714,-28120825,-211024186,1575782656,1426064578,1586228363,58688268,-1975487488,-657455546,-1063642509,-1962579455,1200426590,-1734717435,-1207604736,-1705968569,90832968,-1706024784,90833015,-211142913,1778388634,207522565,-1560066165,1167776520,1560742145,1426066122,-326898549,-100219126,-1207959334,-1705968545,90832968,1711453850,1510392840,-397408517,-1046807107,-972658944,15554310,1694635674,64068103,-73791540,-1006358784,117136902,-40114096,-789286240,-1923976232,519874566,-1442411184,-1202708740,-1706033123,156632698,-1912715639,519882502,-922317488,-1202708740,-1706033126,156632698,-1694611831,164036612,1183383732,-486109698,-1924129028,519890182,178256,108698192,1183385942,1862700542,-163149325,-1963434356,-1242337778,-95516416,1364205137,-51968371,-1801826274,-1995892735,-1923482042,517667846,1862700368,-1605361933,11858798,39098960,1183385880,-25263106,-1928563712,-11471290,-358941066,-972617471,-824058,771834010,-313090040,477354192,1358751928,1778403482]}]],[[{"sector":1,"length":512,"data":[1644610565,-1336932613,848973832,-1710964733,90833344,151001754,238977799,896794843,150998170,-50087929,4758096,922682730,1285217038,-1207604735,-1705968368,90832968,-789892960,-1928432680,517667334,13539920,1183385942,10394366,-326563572,-1957311651,105286380,678680784,-349423989,1183573713,773753608,-1593800213,-1556026580,4057900,-1207078396,-1202651864,-1706033152,118030805,707165,-1947432107,-773116874,172395494,-349299061,748748937,748896491,67124715,1085803890,12079357,-711307264,1560742145,1426066122,-326898549,1342287898,-1324857717,1357435657,-1706032976,93783408,-2130162037,50462689,-28931647,-1957690960,162596422,-1336874797,1889161216,-1962567931,-511637938,-1056767489,-2130950519,15951934,-1259797643,-27358464,-1224515702,1015515648,-398030613,-1963172213,11993951,-348352630,988237448,-1961593407,1200356958,-60912892,1996769083,15329539,-1979662103,12052574,-2020875311,1183440144,-413234442,-472842057,-586117237,-1309389175,-1981230324,1183576134,-1981230092,1183575110,-754667018,-27358240,-1996208381,1183576646,13665264,-1996484827,1183576134,-1948199948,1191443550,-297367292,-2081667445,254083280,-330921728,1978680889,-230257906,2012104251,-230257838,1978549819,-163148944,-336312773,-27358363,-1996077171,1988885062,105156092,-1963440503,1194853700,-1962510587,1200291422,-381253627,15302272,1586180214,201820922,-347699168,-1963434357,550076431]},{"sector":2,"length":512,"data":[988434056,-1341884735,-1977291777,1178266438,-15043862,1191180870,-380698888,1586219755,88574718,989617803,317261127,-1996443393,80371180,-326413056,207522641,-2013050998,3997510,1586109044,-788482049,277318627,207522779,-16496895,-1697178058,93782241,-899814263,-1957363702,451707884,15288006,-212058496,-1207208704,-1705968296,118030482,28325355,1545505360,-788482061,515375075,1358934245,-1761061478,-196703995,-586269053,-1962183424,1200354398,-586243325,245434859,-195130403,-972863607,-1593708730,-1974934246,11923278,58116155,-1996443927,1019183307,57934059,-1342137623,-472821759,-450971649,-1706032976,93784149,-1963702647,-1057034426,-1947384184,2139157598,1970536460,-18139744,-348806464,-1209049462,1015515136,-195130389,-1995815029,1183512134,989902061,1944394246,1359065424,-1014374191,-450971649,-1706032976,93784149,-1946925431,1200354398,-163169526,1586113141,-2147436563,15416511,1988828789,209486068,-1609206784,-1057035467,-1997851230,-1360761,-1697178058,93782241,-336771330,-280559963,1122567028,1426507519,1187381485,446759407,1317685477,989902319,-1994491960,1019183307,276103403,-313194754,-18139744,-348806464,-348354680,1978615550,-348479275,510908624,-1998251359,117368902,899738965,-1564410133,1183378229,-396457241,-2021130057,899738428,-1312751893,-1981680126,1048638022,1962994485,16823557,1187443278,1183449323,889600747,-1272743957,-1981755136,47555]},{"sector":3,"length":512,"data":[-586117239,-552693879,-519270519,-1209311606,1183811584,-347668756,1436603509,889596141,-280574229,-451239679,-280065464,-935657291,283706230,-1966372607,-1997849465,28371782,-1846960,-1327161673,1436176639,-1996122360,1586230342,209682676,-1978567424,12053342,1988879313,54823924,-586119287,-1963696501,1183320135,1946172652,-1996442566,1002406083,259260652,-331636854,-2020998985,1178266428,-1978894613,1586163526,-2013218836,-1964229753,104524870,192277307,988497546,58124614,-1964423544,12053342,-2020875311,1183441164,-195130376,-1324595318,-388870139,1492010632,339483684,1187382389,1183450094,-346125586,-2026241865,74902598,-330922104,49184384,1183517045,-31112968,-2145326081,1963191934,-129594613,621789315,267124720,82738816,1183517813,67044856,-1979973595,1586165830,-788482065,-129594397,-619673719,66346635,1586103111,-788482069,210209251,-280559903,-521600140,-619929090,-939637111,64582,32196294,988497546,1995126022,13428995,-1014431564,-330922102,1022248584,-1962314494,625015878,636223486,65961600,1183517557,264274940,-335548379,-293699564,-1962183420,-16384954,-67099389,1183515627,-96040452,-18129270,-788482101,210209763,-95515679,1177272579,210209276,-61961759,1980758403,-59866361,-28901616,-1209311606,-1948004096,-2020999610,1183571216,243763708,-347698465,-1957690364,-2029781946,385292,162613250,-1705973549,93784693,-1209311606,-1948004096]},{"sector":4,"length":512,"data":[-1310651257,-388804604,-1979824637,626589254,1174601743,-62486020,1980758147,-28901625,284978819,1961576190,-14096125,-789890400,-1974963240,12052830,-2020875311,-2029788916,-1065099506,-754667249,277283816,-263812643,-1964489078,-1209320674,998737920,-263812116,-1978662867,12052318,-2021006383,1586158864,-788482072,277333987,-1610612517,1168304949,-280574228,-451239679,-280065464,-935657291,-880206985,-348348534,-472842057,-2020875823,-880156914,-619673855,1978615550,604423384,-1336932611,848973827,-1996177405,13327852,-2115204267,-956230932,62022,1005733515,57804358,-1325315351,-523153151,1586218633,-1338966264,1436176384,-1996122360,1586232390,41910524,-1341688832,939479041,1183573483,-28931588,1334494089,-225540091,108498430,-17580403,119406773,-1331367172,1586188289,58195966,-1706032976,93784149,-1946401143,2139159646,125043458,-11533904,-1947866313,1200290910,-259618813,-1996442370,1016040131,-292648725,-59339778,-1996204917,3996246,11886708,-829824559,-586118005,-1963438455,989785734,2011903238,1342287950,-1207966767,11592990,139827792,1183384983,-60912644,954940320,796198983,-1014431564,-331636854,-1618345801,12053308,-2020875311,1183440144,-128545802,78762027,1442964179,-129594886,1187448299,-1342177032,2006601760,-16422400,78706806,13081168,984614250,7838288,1996424554,1342484730,1778435994,-255950843,175374590,-17922422,-348846534,2092434806]},{"sector":5,"length":512,"data":[-1207702531,-1705968251,90833048,-17660275,10000976,-1063647894,-16422399,-1410731450,1575782910,1426064586,-326898549,-28915900,1183514624,1183401990,-1119435012,-62485760,-2080487893,57804536,-2097114903,1962999422,-58817783,-385649664,1183514753,1183400190,-163148810,2013021755,1183402060,-160003084,1586226897,-1996453112,1988881990,-1947807244,822020190,-1695648001,124059763,309582032,-772508021,140413926,1082720395,-196149502,1988876523,-1947807244,1586228806,37783816,-336181505,-1115782996,-385649408,1183449549,-2000093507,11844934,-964042543,-1982444917,1116470862,-62486082,-1946197271,1174666310,-1981230594,-523111866,1586218633,-1996453112,1183575622,-96040450,-1979955573,-523110330,822068873,-1695648001,124059763,729012432,-771983733,-226587674,1586227153,-1996453112,-59340031,1183573713,140413934,1988821129,-1947807246,9111646,-1161591,1988882038,-1947807234,822020190,1694528410,1943588871,-25785497,2123097809,-1947741710,9111646,1988821385,-1947807234,1586228806,-1962899192,-422448522,-1962385781,-297367296,-771983733,1345388518,1694528410,1943588871,-59339989,2123097809,-1947741710,9111646,1988821385,-1947807236,1586228806,-1962899192,-422448522,-1962385781,-297367296,-772245877,140413926,1183383691,-96039952,2012759611,-1948200610,-422446986,1586218889,-1996387576,-92894464,1183573713,140413936,1325334665,-126448648,1586226897,-13566200,1939533430,-804821760]},{"sector":6,"length":512,"data":[-1947766056,-422446986,-1962385781,-263812864,-375041,1988882038,-1947807238,822020190,1694528410,1943588871,-1947866212,1177286726,-61961218,1006259755,-1977781311,11844934,-964042543,-1980084597,1183569482,-1102935556,-1980217717,468450374,-1262664054,-1981755136,-28406842,-1948890487,1116338246,-96040002,-1963047287,-1057047226,1019037320,-1207340532,-1706023055,118030897,-1979862295,80371180,-326413056,135457921,1358794424,1778403482,-242825723,-2037775881,104527857,58125109,-1274963991,-1981755136,277318595,1342484957,-2037784365,-1319569414,-1981230324,-956827514,33025926,1222974113,-135295350,-935657291,1558774646,-1966372607,988494983,1962406278,21293315,-783285840,515375075,1342222565,-1761061478,-28931835,-1543616885,512477488,2139146544,259260418,-11533904,1342222391,-1761061478,-1964709115,-1208488034,-1948004096,66583174,-1982132089,-1946683770,-2080900986,-2037841712,548468724,7838288,-1224800918,28375028,13081168,-1224800918,78706678,13081168,-944241302,1218072829,-1962579456,2139356766,141885443,-135100729,199950336,-1946263925,-1991769273,-1946684794,33026694,-1946683770,-2080902010,-2037841712,-1336870924,-946188287,-16422400,-1325926730,-946188284,-1207604736,-1705968182,90832968,-106869,78644087,13081168,-843578006,1218072829,-1962579456,-1916194786,1183384903,-1734717188,-1962579456,1065417822,-972589546,33026182,397413355,721182347,-259618809,-255950601]},{"sector":7,"length":512,"data":[242614519,-1706024784,90833015,-135229698,28371947,-27358384,-1341491201,1436176384,-1559914744,512477488,1200474416,-1734717435,-1710921216,90833344,-135297282,-1813445772,-242811138,-385649417,966852188,-791611669,-385649704,113705098,60204,-134445427,-991220061,117273606,1342419024,-1073532262,742294276,1752432875,1358811576,1778403482,1745274373,-2037579533,-11470852,-1695863754,130810215,-134445427,741801808,39659,113706956,60204,1358822072,1778403482,2013709317,-1336932611,848973827,-972767229,-825338,-134445427,741801808,23567083,-2037577780,-11470852,-1695863754,130809856,-883037047,-2081649835,1946158206,-31148020,74907472,151115162,46292231,-326413056,105286225,376690896,-1005826305,-1977218978,-1325353977,31511304,-1367546,1183516742,-1981230836,2122579526,326500606,638082756,100730763,1183050530,1325335048,-1947735042,-657454010,1589906547,126494216,100729012,-326505694,576093,-2081649835,1183518956,-754339574,-163149336,-1995815285,1719795270,-2097021174,1996491902,10414339,51005067,4000838,-955812344,134281286,1183517163,205914890,-1946663287,391238,12142594,-137219838,-196703759,-1928962421,1996443919,-159973618,142187088,1586169239,175540998,1183383693,-60912390,737691275,-129594938,673479,138840576,276027600,-990349569,1344207430,-1694599425,137232413,-621017459,1187270686,-11532550,2056976502,-1995876858]},{"sector":8,"length":512,"data":[1996484678,-19076880,33048203,1177157190,-196703476,-369736191,-326500519,707165,-2115204267,-1207422228,581107712,-349003541,-657403658,1810432882,1882113,-942258551,1515053638,-348709238,-472842057,-586117237,-1577562487,1183439622,-465123338,211877892,-330921501,-1981608287,178384454,309731,-235417039,-1964489079,-1208787938,1015515648,-830043925,-788482825,-1950119456,-1982001009,245493838,243729373,-230258209,16008903,-96024832,178323484,482378723,635324041,12124671,-1983370494,1183572046,33490398,-388822607,-1311226231,-1981754619,1183439942,-632895510,-2033844224,-1979582513,989319046,2011903238,-788482999,-1950119456,-1895572914,1317658892,-1312257574,65590025,1183438918,-632910888,-1996357851,-2037720506,104527823,343272517,14319235,1187448948,-16776998,1183569990,-431584808,-137394434,1187491189,-1929379588,517667846,-498692784,481841182,2056933376,-1995876858,1996488262,-40572674,1342184632,518145677,1342222416,771759514,1342353416,-485869825,1342177464,-1924071504,1358419078,771782810,-528580344,611582464,14712451,109911670,1344199420,11796656,94739024,1183385942,-25755650,-178712,-588521394,-1310964085,-1981230331,1187502150,-973078310,33017734,-137394550,-348846534,67388535,-811693488,-788482057,213385187,246939617,1358934239,-137066867,7903824,-1635121106,12056527,1183572945,210174938,-632911391,-388822607,-2116532735,33544806]}]],[[{"sector":1,"length":512,"data":[-137394434,849392245,-791611669,-146639912,-940891626,318230662,-762919168,-1929379593,517667846,-796474288,-1706031369,156632053,-1912715639,517667846,570854736,-1202708757,-1706033150,156632698,-113015,-1813447050,-66679300,-1706025254,156631246,-113015,2145975926,1829160700,-326565645,-1957311651,149717996,-1928561013,915210621,112852544,-66642432,115593611,-126572813,-1991585493,-92014506,-1207208449,-1705968058,90832968,1187478507,-16776966,95423606,1358934096,-1073595494,-28931836,-151822944,1943589072,540475151,1342550251,-1073663846,-28931836,-1946532213,1200225886,138840841,-1979818357,1183515975,-27358458,-1593358455,1183446126,-350313988,-2081132893,14351934,-22870667,-1340412966,1996443649,1358934268,-1761061478,-28931835,-1946915167,1200225886,1575782659,1426065610,-326898549,-193617912,57858256,-956249367,130118,16664263,-112802304,73319424,-1274574298,-62506752,24313776,2122338368,-5239303,1497366901,-2091859678,-1342112130,1073837311,-792649127,-1926794280,519335942,-112816816,-1701162978,-1995876862,1183579718,1183400188,-1966700036,1589967182,143140356,2122361835,376770041,-193984883,1183666206,-1706025223,156631706,-113015,2122579022,326369534,-193984883,-828747746,-1995876864,113704518,-1962871691,-1001849786,-2010774434,1973420359,1943589108,2097581344,-1001382146,1200424030,-1907358206,-1977219514,11796807,108698192,1183385942,73319678]},{"sector":2,"length":512,"data":[41910310,-1609993156,-789121931,175364304,100949700,9411155,12061127,-96040704,637820612,1979795256,-62486205,637820612,-33470582,956347592,813169734,654079627,-2013118326,540866886,1631329396,2050754674,1853883511,1183457529,73319673,653948555,-16629624,1183054406,-1066204676,-990230901,-2010774434,1589903687,2139104772,91562242,-193591610,1575782911,1426064578,1990257803,-791611660,-13929512,1218054262,-1006278144,1392903262,-1694597912,90833344,637820612,16875392,-2144990091,1965097599,1980155397,1589968884,2139104772,91642370,40861734,73319456,25133094,-1607764992,-657394570,1589912690,2139104772,158682626,638213828,-352319546,73319441,41910310,-1005882023,-970585506,-1034027257,2142765066,1218072830,-385521152,-1957298312,485261804,-266419197,1204037367,-393836284,-360280835,650349053,1979793280,1963378235,244187124,1360983152,100814733,-360280495,126494461,11847934,39098960,-2037839592,-1098645768,1946222328,-23349228,-122224816,30776062,99288841,-193657146,-1577013248,1923282036,-1560234764,-2033788166,-1962935068,-788732794,-385649960,-2033843836,-973013788,-203386,1358872504,1778403482,-444166907,-397402372,-1063584395,-2147128831,16574142,1508442997,-426866175,-406942212,-1342130692,-66642394,115593611,-126505230,-1991585493,-2080510314,125108218,-52132154,-1978995713,-1258494330,-293172992,-290026499,46564349,-52067642,-290026708]},{"sector":3,"length":512,"data":[-1165998339,1965882597,-292618490,-1947276291,1090383494,-52001144,-34699577,-2033778688,65268,-52001142,-2043084620,410254830,-34687349,-2147301757,754771386,-2030107531,-2030043404,-588513810,-17398073,-2033778688,65004,-17398133,-17529285,652804978,-323580929,-410874371,-96040452,-1963172212,-1241717106,-1982977280,506245319,-779355129,-1359870237,-785647499,-292124342,-27883011,-1980628154,-2080510794,1936982266,-34699637,-17135992,-989966709,-1097991562,102694651,-65075426,-971004686,16643206,-17133942,-17056115,783286453,-1946417378,-234429487,737703342,-1769387311,-92013074,-1927711233,-1963000898,-1258358138,-1174928640,-792854524,-2136673538,83819142,-17135987,-192508592,12079357,-4698112,244994303,-16226816,-369166714,-726073538,1218072830,-972723712,-203386,-52066675,-152547298,29399803,-1098906262,1946221798,-410612259,-96040452,-1963172212,-1258494330,-28931840,-1980072252,-63983423,115593611,-126505230,-1991585493,-2080510314,410320890,-1996242301,-440762154,209015036,-193853754,-293172225,-28931587,-989966709,1049492086,102691695,-65075426,-1960860430,1856175686,1866370547,-1329493517,-66642386,115593611,-126505230,-1991585493,-2080510314,125173754,-1979824501,-1946292602,-2114064706,-1175228473,-541196284,-66642178,1183556850,-1065135874,-210853372,-193591610,-92879872,-17056115,503717465,-218358009,-474472540,1218072830,-1962579456,-1097990578]},{"sector":4,"length":512,"data":[783351547,-1946417378,-234429487,737703342,-1769387311,-92013074,-1962445313,-2037776826,-1097990674,-1107034373,79298030,-17842688,-218364130,-100233820,-1924129062,520027014,-293172400,79725565,108698192,-2037839530,-205979912,1218072830,-1929025024,519890310,-88086448,1778499738,-423723003,628359420,-151751008,1943589072,-426866148,-407466500,-71397892,503363070,-1527579641,-52001142,1183383732,-28406786,-17056115,119418544,-472806404,1974399494,1255222264,-34695543,1962932867,-28931323,-1098049301,2114191099,309758,520026046,-1527579641,-2080487797,-2037840704,-2037514770,1183448827,-60912390,-34699637,-989968759,1359411790,-83456688,-1706025218,152568212,-17267063,-34568563,1187270686,-11532550,1419443830,-1995892734,-2080442234,16709822,1183649140,-1224781574,-358940936,-972617471,-1363962,-151751008,1926811856,26274051,-52066618,-16992001,4758096,-2037578390,1344208101,-1694903064,90833344,-51986816,-1602259968,-657394570,1676215155,-427390463,-1262420228,-2134472448,754771386,-2037771404,33881318,-964099916,-52067642,-427360724,-192493572,-956301058,16641670,-427390464,956347644,1946021510,-290026728,46564349,-52053376,-16485076,-68474,-335679866,-1341732900,-2097151782,100594878,230165878,12079359,-711307264,-1207498495,-2043084800,58064628,-1996428823,-1979847546,-1946225018,1224668294,-17398215,-739703946,-323581184,46564349,-52067699]},{"sector":5,"length":512,"data":[-1929754999,-1903494050,11926758,-34828757,749782921,-1946417378,-234429487,737703342,-1769387311,1451884014,16417790,-2132212875,-91830784,1317732606,-92355330,-1946404176,-234429487,737703342,-92058927,-1709869569,164037033,-2037890812,-2033778949,-969212164,50264710,-989966709,-2037712266,11861754,-1148336247,102694651,-65075426,-1977637646,-1258358138,-28966144,-17135992,-17135987,1342550096,-1705967696,79692347,-35223927,-625992053,547480529,-1299740181,-1341718566,-326726694,-2046607107,-2037776914,-2038170132,1912733430,-14685949,-193788218,956745216,109904107,1344203577,1358900408,-52066675,-1494724578,856082169,109904107,1344203571,1358904248,-52066675,-1897377762,-193552135,695392464,1358909368,1778403482,-444166907,-397402372,1891170317,1218072831,-2147128832,16574142,1990199156,1943589108,235325193,-385875747,113705109,56590,-34699577,-2037776384,11861222,-34699719,-1232377741,-964428306,-444429822,-444167940,1915763965,1983462404,-9193461,4758096,-1796536982,-586269055,494344601,-586269055,-5236327,1346371956,-35275136,2013245493,576274433,1943589057,-7292923,245485291,702941,-1903500809,11927013,-394018557,-586243280,-34699521,1048808683,1979768078,238977294,1929511133,235325190,-972947235,-138106,-35354995,-1262989282,-2037559041,1344208101,-940005144,14879750,-460944896,1943589117,235325192,-335544349,235325190,-973078301]},{"sector":6,"length":512,"data":[15415814,-348518771,-977776610,-2037559041,1344208101,-1594329880,-657394571,109907827,1344205936,1442893466,-125400823,-259617794,-621108227,-883037047,1374456661,-2508719,1342550096,-1705967696,79692347,-1946270071,-774197218,-350182941,-625834103,-625998081,-348518714,1946601215,-326500364,52061,1391233877,1720340766,139904268,-855224693,1512003873,576093,-1964209323,1451886694,1562496262,1226,0,0,-1930654891,-2080902138,284685318,-134609268,-134347124,637534910,512302219,-883034122,1374456661,429393,-62486083,-1946263924,1183385158,-60898052,-899814263,-1957363710,2013709548,1589905140,126428678,1468606042,106873858,638207627,443746105,621789315,19333104,172395271,-1324367741,-991374588,690357854,1589903943,172395270,-1006163674,-1960442274,-754667257,1191257832,106873858,254247206,106873856,38243110,-135258428,1929853734,16758789,1589907691,130295302,-1930135389,-1191937530,-899874816,-1957363706,113482476,516163926,-14223376,-883095457,-1695773867,151781534,182877,-1695773867,151781534,182877,1374456661,638213828,-973076538,-2147418298,1997012862,-12154348,-964099916,638213828,536953030,1979664126,-12138778,-8486912,-1978370302,11861830,1589954185,1086727690,1191059465,-957975041,-1979646138,1178271558,1929359364,1317683201,-1996442113,106874062,947922512,1962913824,576274433,1943589057,-12124667,1183503851]},{"sector":7,"length":512,"data":[985726719,913507398,-1258338678,-993621760,-2144991650,1966735736,947922469,637826650,-1977603968,11861830,1589954185,9053702,-1057078996,638213828,1182795656,1187382015,2122318078,-5240578,-1975516814,978386766,-5241778,1514144114,11911714,1589956233,-2144972794,-5231048,1514144117,-657407454,-1977214605,-28407296,-829882187,638213828,-33472376,1191116358,-1967657985,1178271558,1929359364,1317683201,-1996442113,106874062,947922512,1979691054,576274433,1943589057,-12124667,1183503851,71711487,11817075,1589954185,947922438,-29133522,1187446598,2122318078,-5241858,-1975516814,978386766,-5241778,1514144114,-657407454,11870323,1589956233,9053702,-1241624950,-993097472,-2010772898,1191053632,-12124418,-326515477,705117,-2081649835,1187383532,2122318073,410453241,-1309063542,-1981679956,-1568175421,-791611660,-32869672,-495584954,-352256072,-112817575,-503927631,-2020752503,1183446140,-27357956,119456649,1187271430,-11532788,602409590,-60898050,2073711366,-1274427647,-96040704,16416387,1589910901,1204168444,1589903397,1204168444,1183711014,-1706025220,156631246,-1946532215,-326501818,707165,1374456661,503727757,13539920,1183385942,-25263106,-15436544,10094198,101256192,20355667,11798983,-1946270071,-326500794,182877,-2081649835,1187383532,2122318073,410453241,-1309063542,-1981679956,-1568175421,-791611660,-32804136,-495584954,-385810504]},{"sector":8,"length":512,"data":[1183449406,-156454407,-1916565023,-1980466041,1586297926,516131326,-1001191929,1342572614,-402229505,1589968226,-1705834756,164036833,1183383732,-58800902,-1929282163,-1174411722,-1946419196,-217652271,737703078,-4699439,1959803903,2126775870,25005564,-1427827,-1962932807,-217652271,737703078,-801420591,102790233,-1912832316,915210621,-1185808401,-779419644,-1494022429,-785647500,1506818890,-1005947559,-970523554,-352311481,-60898296,659015206,-92371969,-1962511360,-1880491450,-60898304,103303053,28940880,1589905863,1204233980,-1006632927,-953746338,8392263,654073540,11044807,1589903360,1200236284,1943588903,-1705834954,164037075,1183383732,-92371974,-2094763008,1946417790,-112802274,-109150208,-1978370177,11860294,1589954185,1086727932,1191051304,-1192856071,1589903360,-2021054724,1589903530,1200105212,-60898267,642237990,-60898049,1589907341,260646412,-899814263,-1957363702,205964524,1187270662,-11532792,1419380342,1560877058,2762,1374456661,16664263,73319424,103303053,28940880,1589905863,1200236036,1943588901,-2020923872,-1993998168,1589911879,-1705835004,164037098,1183383732,73319678,625460774,-28931328,-1034031991,-1957363708,116163564,687747,12060021,-1955730688,-2147154362,1178290176,-16551162,1183516742,8389894,105285960,-1324988789,-1947675897,162596950,-1039932717,-16365943,10095222,-1995895808,1183644254,-94452484,1676169990,-1996442369]}]],[[{"sector":1,"length":512,"data":[2122579526,494207230,-1006221685,-1993934242,1589911879,-1202518278,-1706033152,164037193,1183383732,-28931074,-899814263,-1957363706,116163564,637951684,1946173315,106873886,-1707606234,151781376,-1929617783,1589968454,1200236284,-791611866,-1207602216,770375680,117202628,-17242029,1183383732,-92371974,-1005095680,1392966750,-956237670,-1996442615,1589967430,1204168444,1183514662,1575782906,1426064586,1364323467,638213828,1946173315,173982815,-1707606234,151781376,-1929617783,1589968454,-2020923652,162594984,1589962963,1200170502,-60898302,-1467512026,-754470656,106874080,-1006139098,-1960442274,-59325433,-2080168368,995688618,-1912114239,-14284730,1589903943,-2020923652,1589903530,117515782,-1996488520,147480044,-326413056,-15930237,10096758,-1995895808,1183644766,-60898050,1005081350,-1996442370,2122578502,57934074,-1962885399,129041990,1452009683,-754339576,-1983773726,1183577670,-754470648,-60898072,591890726,654073540,11175879,1183514752,8435978,-235417039,-1946663287,78711878,1174530259,208044302,2122514447,1903558904,101467844,28940880,1183517127,-60898058,558336294,-768313,33536001,1995982395,-129594618,-990624119,1392966750,-1695254785,164037170,1183383732,-92371974,-2096729088,1963195006,-193035476,-1951435264,-1992231354,-125569466,-1006144256,-14222242,1325343559,-1316966152,-1259810300,239468800,-336310529,-96039980,-899814263,-1957363700,116163564]},{"sector":2,"length":512,"data":[638213828,10106879,-1995895808,1183644766,-60898050,-1430290138,1962967040,-397212080,11861310,-2080749943,1946221182,-96040187,1589926635,-2020923652,641728680,-1004451959,1392966750,-956181606,-1996442615,1183578694,16286714,-125631116,-1003391741,-14222242,-1006589817,-953746338,43655,-59325440,-1430484186,653494528,-1003994742,-2010773922,-60898297,-1433927898,47104,-899814263,-1957363704,116163564,638607044,10106879,-1995895808,1183644766,-60898050,-1430290138,1962967040,-397212079,11861158,-2080749943,1946221182,-96040186,-1006598935,-1960379298,1073784967,558336294,117202628,30644819,11798983,-1946532215,-125568442,-2096794624,1534395384,654073540,11044863,654073540,11175879,1183514624,106873870,-1207465690,1589903488,-2027215108,1992556714,70854150,-1993997450,-59325436,-1430484186,-1913419520,-1006229439,-1993995682,-1993975289,1589903959,126559750,654073540,11175681,-1996488520,248143340,-326413056,-1005917053,-2094658978,57999423,-1006589207,-14284194,39479,1586039052,-28930820,117202628,-69146541,1183383732,-92371974,-1962511360,-2081818042,105286400,-388823119,-1324853621,65196809,-163149374,654073540,11044745,654073540,11044747,558336294,117202628,30644819,11798983,-1191557495,1178140672,1979691258,-657440767,2122525043,-5242630,-801111691,-954436648,63558,2146991747,1589907831,-126448644,675333670,-129596672,-1947634943]},{"sector":3,"length":512,"data":[-2135357882,-137219840,-60898063,-1432909530,47104,-899814263,-1957363704,216826860,-1710196993,151781376,-1929617783,1589968454,-397211908,11860778,-2080749943,1946221182,12118275,-1324988789,-1947675897,162596950,-1039932717,-1946794359,129042502,1589962963,1200170748,-60898269,-1433942234,-1962901504,-2135356858,-137219840,-129594895,-1324595573,32035588,1719733830,-2097148148,1979775102,205964395,-1181069306,-1962293503,1589966406,1200170748,-196688095,-4718081,-129615103,1183516278,-196703752,117202628,-193527981,-956151398,-1996442615,2122578502,745865466,16023171,1183561078,1183400182,16286710,1589905269,1207903996,-129040605,78741680,11856082,-15841791,-722734002,-1980086645,214588908,-326413056,-1006048125,-2094659490,192217151,-1710852353,164036628,-1006587159,-14284706,39479,1586039052,-28930820,654073540,11190145,1953824896,535319302,-1996442374,2122578502,108265722,-369473909,1589903490,-2013321476,1589903528,-2020923652,-1993998168,1589911879,1200236284,1943588903,-1705834994,164037075,1183383732,-955913222,16775750,16416387,1187454068,-2097151752,2004875390,-60898287,653817483,2638022,33048195,1589963123,-2016991492,170,654079684,11189387,1183511433,1099441670,-60898264,-1433927898,-60898304,625460774,47359,-899814263,-1957363706,-2091822612,1946158718,-28915915,1183514624,1178159110,-1004046338,1342573638,-1962385724,-14221706]},{"sector":4,"length":512,"data":[94738992,1183385942,-58817540,-1962576896,166460486,33441411,12111987,1575782656,1426066122,-326898549,-28915962,1183514624,83395582,-1397151369,-1981679872,-1567126845,1943720180,2089258260,-62486028,519849613,13539920,1183385942,-28933126,-1982893311,1439391212,1183706251,-1706025466,156631246,182877,-1326675115,11554817,1612368,-883095289,-1326675115,1996443650,1612294,-660469497,46816759,-326413056,-1336933456,412766208,1560872704,-326412853,-11533136,412747382,-1576466688,-899811367,-1957363710,1342550252,-1710852353,151453720,1576524450,1426064074,112258187,108461904,117446810,46816521,-326413056,-1001387600,1342572102,-1706032976,151453696,1576524706,1426064586,179367051,105301072,11554822,39504,-593360633,80371191,-326413056,-1336931408,412766208,1560872704,-326412853,-1336930896,412766208,-1576466688,-883034147,-1326675115,1996443662,1612294,-559806201,46816759,-326413056,-1001386064,1342572102,-1706032976,151453696,313949,-1326675115,1187270672,-1336932858,10113024,1560872704,1426064586,296807563,105301072,11554822,39504,-899872505,-1957363708,1343402220,-1706032976,151453720,-1957311651,1343467756,101074628,1342222416,117440666,80370953,-326413056,-1001384784,1342572102,-1706032976,151453696,313949,-1326675115,1187270677,-1336932858,10113024,1560872704,1426064586,380693643,105301072,11554822,39504,-899872505]},{"sector":5,"length":512,"data":[-1957363708,1343729900,101074628,1342222416,117440666,80370953,-326413056,-1336927824,412766208,1560872704,-326412853,-1001383248,1342572102,-1706032976,151453696,1576525730,1426064586,565243019,105301072,11554822,39504,-899872505,-1957363708,1344450796,101074628,1342222416,117440666,80370953,-326413056,-1001380944,1342572102,-1706032976,151453696,313949,-1326675115,1187270692,-1336932858,10113024,-1576466688,-899811360,-1957363708,1344778476,101205700,108461904,117440666,113925385,-326413056,-1001379664,1342572614,-1710852353,151453696,445021,0,0,0,0,0,0,0,0,0,0,0,0,179367051,105301072,11554822,39504,-593360633,80371191,-326413056,-1336931408,412766208,1560872704,-326412853,-1336930896,412766208,-1576466688,-883034147,-1326675115,1996443662,1612294,-559806201,46816759,-326413056,-1001386064,1342572102,-1706032976,151453696,313949,-1326675115,1187270672,-1336932858,10113024,1560872704,1426064586,296807563,105301072,11554822,39504,-899872505,-1957363708,1343402220,-1706032976,151453720,-1957311651,1343467756,101074628,1342222416,117440666,80370953,-326413056,-1001384784,1342572102,-1706032976,151453696,313949,-1326675115,1187270677,-1336932858,10113024,1560872704,1426064586,380693643,105301072,11554822,39504,-899872505]},{"sector":6,"length":512,"data":[-98017559,-150858567,-16310778,-1190955777,-896794015,243911171,857604944,-1982165294,520425486,-164380274,244055691,-201588688,-1899983708,-1949266216,-83874778,-402269976,512428684,-2017066960,-1962868737,-167562466,57999111,-385275159,-389085099,222038007,-152566923,126496263,1975519811,950060014,1208367623,-1274776576,-1156526848,1357381638,565901831,403500032,12263150,-1948545536,-1996154338,-1962897378,-1996153826,-1962896866,-1996155362,-1962906594,-1996154850,-1962906082,-1996156386,-1962905570,-1996155874,520122910,241091579,1285209686,-167723434,-1882499754,-1106837498,-253014891,-1101656482,1431719066,-2011323453,1159548948,68487195,1293777173,1577864716,823302429,655119119,235212301,235212293,251989509,353571347,-149752813,1192426002,1224886274,1895982850,2097312258,-2113765118,-2080210174,-1912436478,-1610441982,-1375559422,-1191006462,-972898302,-939342078,-905787134,183042,1229015040,-917074738,47404545,1325646934,-833663667,-1865592949,1279480393,1090556357,-1918614188,-1831386798,1162412032,1233306700,-2116860596,-1982577408,0,-2016654263,-733654272,1229652101,1397425316,1145767332,1090520740,8701261,-1999350528,-733066943,-650031985,1392509075,1166464069,-1965800109,1414748416,8637765,-1538962103,142,0,604474063,-83104897,-176882372,-260702660,1599997834,38189981,1085401226,-1975270914,785615607,-1073084534,1134555764,787773854,-986052726]},{"sector":7,"length":512,"data":[-628627339,1499120010,1587597450,-1329591804,73310975,548408692,1101724043,58052350,-1979158551,772205506,-1975318646,-1954601776,-29250823,-385649202,-1039529896,1130097017,-83342615,1532582233,770198355,34847493,-1073594068,11913354,-1959864061,-397190377,-930478824,-1406209397,58031908,1124612073,930464058,-1406209397,2042628674,787647458,83290284,57945660,-1341850392,-385650176,-1957165036,179056370,2035964352,256259,1358528524,1900208,1527248617,-1406209397,2042628674,-1494531337,1007149545,-821988227,1134387038,-2127820918,-1073549710,-259267534,187283801,-1258344879,-1209466399,232693763,-1341392763,-1694495737,-1174401612,985203677,452615,-1190926406,-225769522,-2127778770,-1966931597,50378712,1121518555,-1406209397,1111689096,-1406209397,-347994232,981792733,1979711239,1600114433,700012957,-1258335989,1609107258,-135034109,-16265596,-821987841,1503485791,1359724473,130987263,-29557821,-46398092,1137645172,-1925445750,1978205045,1972255752,151513347,-821589429,1134387038,-2127820918,-1060110155,-397293430,1692926742,-561553916,197114454,-1576947630,-208993112,129302318,1140900610,1667855973,1851072613,1767994977,1818386796,1866661989,1853189485,1952539497,544108393,1717990754,1864397413,1718773110,7827308,1802725700,1769101088,1344300404,1702129522,1684370531,1936278528,1869488235,1699881076,7955553,1802725700,1684360480,1159749993,1919906418,1986281728]},{"sector":8,"length":512,"data":[1701015137,1699094628,1920300129,1236402277,-83462679,1144832650,1590624627,1245486430,1760167282,754319368,76987203,-1976643446,-1073069305,-889259915,686355573,1193184252,144239107,-1946421760,348423111,1186072351,141869066,37504946,1219625588,-83482135,-397192624,-880082034,-1974314405,275114178,1590646874,1381670239,1347835804,154977930,-816315790,34400331,-471332748,-538378495,-346516991,1591440330,-2041012897,1582931652,-1974380969,1406175986,50343609,509657,117416025,-323223804,-561553915,-152481450,-880018667,1525155722,-82056430,-420951157,-1654694382,-1996488517,1527048478,183197275,-389313541,1600000784,1448566429,-880018485,-351070232,-1654694159,-1631287720,1583045209,937973335,-386151661,57802776,-1325440023,321447949,602409648,-1654694381,844519262,-655832128,-1023314685,512446803,783877353,1507394304,154929034,1600045915,1499159197,-396994722,1590367297,1482399071,-551286902,527581228,460528444,-256294077,-1426486524,851639873,-104792384,1355056799,196527238,-385532439,1599996777,-1070442339,1600052459,126507933,1465827338,57854806,1593762793,-1638359713,-1978501988,170667015,-401967680,-873987854,-107130368,-1070424932,1390936498,-1071997694,17614884,-1660602718,-1564468580,1973224687,216721667,839189480,37611712,-401841175,1925383101,-23664381,1486708574,1359686073,11331659,552076917,216459520,738229736,158683196,-402613784,233373711]}]],[[{"sector":1,"length":512,"data":[7137297,387137,1911144498,839037444,-402606400,-1329397267,87466751,-393560014,-806828662,509441,-33235040,1942301381,-1564462353,1589839158,15310175,-397346037,1918435040,-30742269,-392339618,343020345,276040252,1599996907,-383874147,2799876,134142211,1946412521,-33101565,-1021974807,-50623650,-1957255634,-1979025953,1916419079,401195777,68479232,1006828448,-20382200,-1010237752,1007127107,-1023315398,-193716164,809240690,-20906251,-1073036344,188545908,507277170,10502005,-1010824701,10634064,1931226115,1945447482,1979595783,1124567579,50208393,-662044489,50470537,27394736,310019,-1010824616,1128466314,50208393,-348157365,1963998433,-31552573,-23663870,-1564421952,1364329217,-2029845830,-387413286,-628686255,512318041,-1151859970,-1073086460,1913208003,-9639677,-17485764,-1010237760,1006829728,1008300815,-1961528819,1963131422,1128481546,-1975314550,-388331721,-1444216601,-1576861280,138150651,512430708,512295682,512427171,512295684,-1913977691,-402455877,-2048196339,-1631287720,126534491,-109944516,-176981188,-389849308,-93126646,-160288708,-1007338948,-76398276,-1007330500,54206091,-1558279741,-1576882172,1405289211,50994827,-654114635,-604514045,1916453763,1927021321,190723,-320224421,-118036224,-347067715,1350352376,2042491883,-1108415668,-370456744,-350283331,432061924,1505615851,-1109726420,-706011686,-348150339,596164048,683527147]},{"sector":2,"length":512,"data":[-1111037119,-1041547027,-346500163,1073200572,-1581402133,-1112347804,-1377103791,-345752643,1328332200,-692214805,-1113658586,-1712642498,-350806851,1682226580,-1430417429,-1114969310,-2048187723,-351667267,942325120,-1107790871,1843994396,732282360,-1107793943,1642671224,965721592,-1107797015,1441339896,983678456,-1107800087,1240008599,461618680,-1107803159,1038705816,128368120,-1107806231,837362741,755285496,-1107809303,636037286,128564728,-1107812375,434702951,274316792,-1107815447,233375926,754236920,-1107818519,32061294,649772536,-1107821591,-169269681,461356535,-1107824663,-370591641,127188471,-1107827735,-571930726,642563575,-1107830807,-773247887,1950399991,-1107833879,-974564144,802602487,-1107836951,-1175910478,128171511,-1107840023,-1377233113,288407031,-1107843095,-1578539826,126795255,-1107846167,-1779863352,522173943,-1107849239,-1981208810,291225079,-1107852311,2112447824,633257463,-1107855383,1911121161,577224183,-1107858455,1709773976,275496439,-1107861527,1508467889,128957943,-1107864599,1307117484,1390919159,-1107867671,1105798692,1097448951,-1107870743,904476778,1130020343,-1107873815,703153913,1185463799,-1107876887,501817098,1199291895,-1107879959,300508130,1698479607,-1107883031,99174810,1686814199,-1107886103,-102145107,1800519158,-1107889175,-303469651,1680981494,-1107892247,-504798399,1663614454,-1107895319,-706131961,1197981174,-1107898391,-907457868,1058258422,-1107901463]},{"sector":3,"length":512,"data":[-1108787434,433569270,-1107904535,-1310111437,1215413750,-1107907607,-1511438239,1211088374,-1107910679,-1712764849,250145526,-1075120640,-352976882,-167767827,1110250,301918966,1508570624,-352976875,-167766823,4577258,1052371702,-890571264,-352976866,-167764242,4117226,1095625462,216724992,-352976795,-167762291,487146,148105974,904590848,-352976865,-167770223,514282,535292662,-1378816,-352976858,-167760642,507626,198765302,1072363008,-352976883,-167761641,4145130,127986422,-571804160,-352976833,-167765547,5628650,1459284726,498988544,-168040147,-382912579,-1329728011,-168826579,-385402691,1656616425,-169613046,-385208899,649983453,-170399388,883047212,-390177273,126506510,1023359977,1393194373,754681320,120889915,-390177189,126506510,-67163927,-1098781557,866713606,1355743604,120850166,-971540993,-16305146,973101728,1946167558,-1564410359,-380108713,-346490468,-1070461475,-402016023,-387450086,-397148747,260767033,1912732032,28805960,-388396544,-192282558,-402641944,-729153478,-402643992,1824063538,1960512007,-161173495,-389510172,-997588958,-939327308,567094196,292929546,-620051621,-872543372,1949252780,1949121559,-50730733,1912606440,-387937544,74579975,-527824171,180587203,-1963363109,1915759620,-183878413,-872485262,1340654406,-1336720638,-62134262,-852839342,-964011231,-1342165784,3401773,585679498,-399659008,-377421783,-109050004]},{"sector":4,"length":512,"data":[1913894244,1693024261,-980761090,-1979709208,256193,-721528599,230983178,48771120,-2000385536,-389856505,-387450298,-397148959,260766821,1912732032,28805939,-388396544,-326434962,-402646552,-863305882,-402648600,-192217250,766771378,-1073077811,-1017442699,125098762,1017957374,-1023314630,-386123031,1396900278,-1293416272,750015227,-92266035,-32214478,1023312070,11930994,-109002242,-1325108676,1539702272,2062075274,-398806785,-1047855231,-1325436696,-8918982,1726531210,-38016513,1023178472,-385650172,512424939,-1073086365,-922873228,512364148,-922876112,512362100,-922876111,-1662467074,110085115,-390199524,591156750,1776878453,-65017603,1962513896,-43783933,-1963129624,181466822,-385648192,-796197981,-110827438,-79697876,83525722,192143494,-799911088,1343534306,1593654761,119289599,-72330416,-523188694,-491061068,785908494,347801483,785908480,-10811509,-1974207520,1042674,977013108,115871604,1542945024,-1966090614,-889306361,717654723,1019805378,1022128642,1508406021,-927247534,-1963881714,1458080456,-58710902,-2146930079,57900028,773909632,1178797962,393593914,-462042626,168266286,1527544256,1600019035,1448566429,181125130,787052736,172165002,-1963427392,-1976672563,1975519751,1524534202,-808023462,827150147,1297040379,1347222066,1291399508,-130919344,861163596,521011447,523902756,526786384,-1974447109,-2147471705,41287164,-58656332,-2147126537]},{"sector":5,"length":512,"data":[57867516,-1328587944,46410491,-1560234816,-491059420,785908494,-1218771061,785908480,-396687477,-520159230,110059358,-6486244,-1564462362,1721893989,-1173911036,-1036386115,1705116789,-397720828,-1394018230,12276731,1813940480,-397714684,1970599994,754455016,309603388,1408936168,-1980115736,1527016478,-132061109,-135767180,-1447416585,1958885888,-135469026,-135731135,-135993268,-385649332,-605552196,-1036374793,-1506444,-1665135877,-402364766,1139341294,-555200004,1364875769,512350603,-353893271,-1978960903,-1982625033,1527015198,57858619,-1644568855,2112422772,773753601,512447232,1128988720,172165002,-385649401,-1958543150,378094359,-1545076690,1958742775,1949973734,1979596021,126501643,973114298,1258976450,-386430488,-347342293,-142546723,-1336681612,54108673,1962521832,214272612,854100608,-113907520,966918320,-1979091709,1965571079,1777048844,675022730,1692992373,-1964483591,1976699897,214272541,-1159165312,-1169026973,-1605236089,-259390725,200861417,-385649198,-1974208193,-1144354066,1230180503,1236070795,-126304246,212660619,-1426486400,54108867,675022730,-2023835787,1229543134,1543494888,-151459765,1357448053,1965571327,-152246260,704038376,1089012597,-155391745,-10557140,773753179,1511426816,1478396675,1960459011,260723544,126501699,614252554,1124567167,-1242000664,-1646722304,1373796441,-1962930200,50551326,1511950810,1541048067,-628633621,56368779,-225715653]},{"sector":6,"length":512,"data":[-1426486356,-1617018209,-260727231,-1020608118,-980758390,-259340518,-645183158,56368777,1544981443,1960459011,1128485669,-1073084534,-2004933476,887636743,1125092088,54734730,2019139033,-1377283616,1541048319,512481259,378209112,-633666726,126491764,1346585411,1492650728,91554620,838878440,-1227846976,-338033920,378231261,-633666724,126509428,1129333571,-1963464984,797590287,55793731,1963146457,824084960,260725507,-654114635,-1958487805,990064918,-1177848614,-1974398557,395002631,-1073069245,1405288821,56106635,1918622267,512447477,-633667536,1407939419,1397443403,1543021800,-2031615051,-389850120,512489553,-880082084,56104587,56237707,512350763,512427086,512295727,451413088,1272548344,53419657,168060576,-1961331520,-1962645218,1730055115,-130684924,56237705,56368777,-1325982232,74162689,1705046154,-1962857468,1258303518,1810481178,-1564462348,1705116779,1478396676,-1949594877,50613790,1511950809,790530819,-628669693,73408139,53419657,-225715653,-1426486356,-1617018209,-260727231,-1982231735,-1962714082,-1962644458,1258303518,58053131,-386359575,57866005,1240957673,-1863722613,-140645896,591135153,1371734388,1509956072,125092410,57934908,-386455831,-1976765254,-1982756107,-1023088362,-187635637,58008380,-386610712,1558771521,-1596945673,-1036385057,48825203,1392555767,81796747,-637281789,-1975316598,-1393456337,-1017397238,-1330052432,145799428,-168826800]},{"sector":7,"length":512,"data":[-165156776,53288587,1509296104,-1325899543,61913345,1342681273,1492548840,57804602,-17398039,50045632,-400585917,-1228671407,-373280255,1323829350,-385649913,-29558725,1688339829,-33035516,-385649472,512426106,652738608,1478396171,73703427,57982986,-386699032,1128527326,56106633,855139816,87466688,-1594521624,-1073085333,-1125579916,82813182,58048522,-369744663,-957810789,-177542922,-386595351,417986612,-1897375242,-269988865,-402230029,-269877276,-1564462345,-756546321,-385649914,-1057032257,417923957,1975582454,-166598397,82386571,50342585,-385351975,552138659,-184555275,1541996464,1477872389,807308035,1960459008,1124567713,88664146,1408428890,1945249768,-386027461,512427322,635962192,-397190400,512426016,727320324,1501402,-1910580601,-1979494370,401088263,189416197,-370182702,-1014304328,-1979381272,84208071,1408605929,1945232360,94693623,-260702916,-1979343384,93907152,-1813450614,-388462075,-125172338,-1979348504,92596424,1621158026,1959329280,1343654662,-397190397,-1910635150,520587482,-980793021,-277495542,-245438119,1979594216,-179312381,57934892,-2013969687,11779034,529258755,73277065,-1996488517,-1979248098,-1160083513,-628686660,-393553661,126540423,24390716,-397323581,-397347814,-398331226,-397151582,1206449385,1582913780,-1974018425,-1957473592,-1257827810,-1982266624,-2029579746,1579060186,1943681796,-176690941,-628663717,-1992093816]},{"sector":8,"length":512,"data":[-1360307433,32178188,-1360487175,-200480524,-199432110,-561553831,-397323434,797635705,1457424222,-930478198,1134318417,-1073080437,512453748,-633667536,512440691,-633666728,-779472526,512426166,-637336740,512481927,-633666769,-1969397134,-204805951,-2023859877,1364350686,1509175528,-561553830,1129533782,-1659401828,395002715,-1958519975,985762335,-1979550779,-1966789912,57843144,-33547288,1959657157,-1962440178,1111730938,1499067371,1935235417,190467,548455259,-906051074,-91490444,-152354134,1582914461,-2024350073,1359640026,1659422090,-173807373,-561553831,-346861226,1946434690,-397688063,-1168969290,91488384,-214964143,512447321,-633665767,-1259797645,11779059,394909955,-1296027069,126370567,-109720834,-1564255653,-1343748328,1946434812,-205395709,784028497,-1965489408,1913207815,-1604626159,-2036398312,-997830460,-385568687,-1212418789,-1948712192,1581400855,-1974018425,1965833223,-221517821,-247142325,1206453108,-561553675,1976699734,-214046461,1243056459,1364416859,50379451,-2000669991,126370567,50377659,-2027975719,-1152167206,-633667456,-1174047397,736821248,-470302069,-1974282101,-1971379005,1493219024,-544554102,-620496502,15270771,1943064819,-980794623,57982986,-1980566807,1527190046,-1128574119,-1982266624,-1157164002,-654114765,512350723,1398474518,721453243,995252954,-1979419942,-1596290306,-1073084648,-2135278220,1943681792,1407734533,-1957602560,370576331,337545991]}]],[[{"sector":1,"length":512,"data":[8316935,118759049,-779422326,3663961,118627979,303991107,-634692857,12245771,-1552592128,1405311835,1526734312,-1949594799,-1962470378,-402188770,-628686776,118759049,-779422326,231336793,966967346,1397903623,118625931,50378171,529224665,1541028674,1134499720,1966573726,121217031,242532362,1394048699,683365201,-371653888,1515913763,-1974353063,-1426420985,-1974910397,1975585477,1489197554,1386136710,-1957650607,6416587,1374170228,12303104,-637282045,126393944,716918943,-1965489408,509495,141823292,-963977212,126353428,1515822680,-1628847269,719868658,-386436096,-1145372644,64553728,168266458,1499159232,11779011,-1162148885,-1948712192,-1153252585,-654114630,-1950148727,-1382197,-1972142,995809927,512345050,-454556869,-226367248,-1041695056,-227284741,1022392809,-385649406,700182959,-1965489408,1958742535,-1393456341,611583036,168266307,1359574464,-404170357,-555001599,120225968,11913354,-1186735869,-654114808,439093130,-1072037588,-1963858711,1121028853,50342331,-1070444071,-68679800,121020417,1007008744,-385649153,-922816029,-152501387,1976106738,-1070441969,-1314194805,1760051728,-243144217,58048766,1509016297,50341819,1125616601,1261930562,1371740040,-1968377461,1121028853,1963080786,416398106,-645180589,-1964434768,2734848,126540035,57982986,1526697448,-1325297176,-417470448,842249817,-1426486336,1976499777,71091192,1962944699,12106499]},{"sector":2,"length":512,"data":[126540035,-383808949,297529455,-2015821056,77511642,1124075462,1189610677,1127188721,-2008862840,130433839,-1576488776,-1070464261,-402348126,1539567803,-1631287720,-997810349,-1950054832,-1979389666,1963015175,-282793725,58000444,1493056745,1386136710,-1614050479,-2041527162,2734788,126540291,1968406588,-17569789,-1979187621,1124119823,-1631287720,146428063,-1965423872,-2012398537,67662895,315001568,50825413,1503549657,1527220314,-2008331581,931676951,-2146974141,-2146974141,-561553829,1405848406,50340539,1125616089,509507,121217115,91602954,1526751720,-23861053,-260052645,-1971276463,-91536633,-838974806,-1017514635,512447313,126485737,58000444,-1174545687,-654114774,-1073084534,-1974790028,268321543,-930478294,146397443,-1965489408,1539312135,-1974746279,1958742535,583685,1543095413,-1021661095,82386571,-1963488686,666452691,-1965489408,797590287,260590401,1127188547,834360131,-1311112448,130433920,1976172032,1632504,-402180704,-1073085480,41222320,-2007269200,126372615,-1017462774,-1152167343,-637337550,447863431,1541767912,-389850790,-93126818,-168224196,1397879925,82386571,50342329,509657,509507,-1017553927,1408197864,-1964054296,1975519751,-288495357,394937244,-1975547325,1020299994,-1978764798,126501647,977062654,-28637068,-1023521854,-889306959,-1047894924,1076682532,456940658,-256288653,-1426486524,1124841025,58313470,-1979697687,1965964295]},{"sector":3,"length":512,"data":[1501192,-342034019,-1426486294,-822197439,-1070407051,-1660617566,-963984549,578030396,510788412,548467572,1101724043,-353644802,-822163714,548461684,1101724043,-160051458,1089065195,-10426130,82885203,-1259860047,1975582436,-300160765,-1174072645,213189872,-2001931637,-29211897,1542813133,1105986024,1407974888,1409233384,-1325076294,-460986353,57983230,-1158775575,599459057,-401885947,397536977,-402320710,-1017387925,-397225846,57997103,1525572329,-68660655,1364810494,-389641572,-1986135521,1912814366,180521498,-1156287040,126485753,192225340,1128400838,1128335302,1532168134,-1991194998,1392830750,82885187,-225768271,1107789996,1976172099,-2000669963,1358343,126409219,1124567107,-2008873080,126370567,-398306726,1482423910,138171216,-1293417611,1963080706,-1427615208,-401362686,-1319443489,-472258538,58048766,-336709911,-401624798,-1057037365,1482299765,125110332,1380975280,1356655426,1946434642,-316675837,1523641154,-1426420904,1030994,130472451,130433920,2603776,-1070409213,-2008873080,126370567,1527220291,71042954,138154868,20717684,266929012,-40048404,54206091,3389891,-2135828221,-29151352,-369527351,512486390,-1957493527,2276299,-628631293,1162066,-1336682237,-32506364,1125020935,-176830210,-967091621,-873922041,126508011,1352630052,-791672950,-1979468477,-1949249529,1111730938,-210383362,-791674704,1487600267,-402426466,803733562,-396796931]},{"sector":4,"length":512,"data":[11665458,1929175528,1947876360,-339542519,-402607373,512426014,-880081687,-1157494842,-654114777,126402610,1124567107,-2008868984,-345446137,82386571,582732683,-1244069120,-33060348,1958742543,-29113599,-1007520307,954793333,-468260627,-370369304,-277486942,-316020653,-1662510671,229724386,1491244776,246534282,1541574376,-47388477,82885203,-401624750,-1057037697,-1315155366,-402426864,1520296563,-622263435,19917035,1692930993,1975737314,-256158962,509444,-401886909,1952120959,-51320829,-56442830,-239381756,-402083580,-105185179,-402411260,314179677,-400903931,-256187857,-401493756,-12787161,-1897331851,85179371,126487473,-345642941,71090570,126487413,41164860,1424502448,1976172267,-350623515,-259387644,973089184,-1341820218,-348264416,-823655565,82885355,-521661775,1979661537,-1966908484,1965702151,1057474297,1976172099,-1974287368,-991407672,1348098529,50340283,1963458266,134103816,-29162635,1019316743,1477997858,-646660086,58000700,1022100201,1946267651,-1010762036,1489223730,-126614724,-2017214454,3926234,82386571,3455315,1273551107,-1185199365,-654114783,585631742,447828480,-1948162328,1124395294,347200135,182541032,-898278464,-2135172473,-2015755520,-1948521510,-1190973666,-654049494,-1301030341,-1946891031,-1073042190,803735157,-1426420992,1342496672,-202250158,-645194892,-633650342,-1252912012,-1393390836,1963407938,-838974712,216658805,-27763989]},{"sector":5,"length":512,"data":[-1009223224,-400969390,-1057038085,560186202,596779867,606217207,607986730,162079821,624632930,593174883,603399058,606741538,609035325,610404777,541730107,162073445,162078809,162073001,162073001,544213417,191176823,545655209,162073001,162073001,162073001,547627165,162073445,162078899,162073001,162073001,550111657,309131,994444426,1962936503,179800836,79137024,42991360,-1215577344,76021766,146225990,-1962642176,-1996485961,-16775497,-1023409529,50798779,-1962466274,-1752579297,-1886846968,-1886846972,-1886846970,-2017001462,2,1583044803,119289599,-2041001130,1515822788,1525738331,-336897701,6201427,360038654,3022475,54992521,-1021130870,91537662,916635698,-1950131451,-1962719962,-385662178,1152576279,-2132053527,41255162,-1950154062,-2096830178,-2084359229,126496451,-1312567050,-1841152,-806851152,-383874072,851673860,-383874109,797411844,780845824,-555220894,6529279,2028537736,-2041554689,256196,-1140885527,-397205405,1673199755,6416640,-1564178856,-1966931870,-402181586,815857585,-385382393,1348009803,65586310,-11867904,1394643131,-1157602328,887686960,-997828608,-1022938462,120794762,-1593867032,126355249,1493114601,-389773744,501809155,549305343,3926099,-385404485,-2041053177,120824516,1947024579,1393032724,1543464680,326418686,121161982,229639794,509635,1223165834,1527220479,47811,28969195,-1174148352]},{"sector":6,"length":512,"data":[1402732546,-855591856,549778967,-990507403,-166890236,225706436,116070578,48962482,1676220850,1011898602,-1341819635,-2955254,-1013097640,12276510,605946628,47623,395041422,84942478,119936649,-1144840357,503514920,529205028,120372163,119807491,1405296523,-151107096,-16777081,-1729559692,-1075293464,63079423,1257160754,-1070404022,755592,821128,886664,952200,1017798,277333763,1392706304,-1190855749,-2142568439,-85909441,509507,-1190858565,-2142174848,58007615,-2147435031,578038847,21620825,402227537,1393193476,-2130845208,67113359,4161627,-1679228043,742359040,-398248331,11921044,796151356,1329332661,62204276,594822460,527707196,1295779253,129309044,326390588,-2143088917,125042751,1965834112,-1007074557,1407675113,-1258450456,296165892,61954816,1946148840,-2146465247,-462277399,1929771392,-3217185,663359603,-30348160,50102476,-456077709,1609098448,263162109,-1966765568,1963009257,1959332358,-2133983561,-1334639363,108326154,41205770,-334836226,1085321,-1946339864,-1962933873,-402652265,837353161,-47912707,364427,497547,-385957144,378273056,-1031600346,-293556221,1493363331,1257162122,-387006070,-1349845762,61931535,-2020940334,-989200367,-301743485,-301223870,-919387582,1979521512,-392107773,1009788140,-502827984,-384257297,-1070405466,99255131,-957477968,16777351,162499162,-1342131968,-92251288,-1962380028]},{"sector":7,"length":512,"data":[-1996023498,-402607177,-991304194,-414324484,589937491,-1959902397,188957455,990475465,787576273,-1017442421,1273387753,1845886976,-1778116864,738394112,1476493313,-1342128126,134242308,1610629127,-1073729527,-2147477486,3109,1611,-402653184,-118948394,-58398467,-2013852044,-65534,300479349,-403576576,42452986,-402653184,-369426428,843250821,-1031541056,602467843,8882428,244040448,-745863399,1263620699,1961096680,-473110498,-443357140,-771010215,995692916,-1960414518,-397717046,57992154,1508367849,1364416606,50379963,182486750,-401771072,126353564,-336010685,-439490293,-398260342,-119406335,119082635,1959406426,509446,1543168579,-2082053911,1347957443,-488061818,1947020288,1393032728,1543255784,259309822,121161982,229640562,838912232,-385382208,1240005560,-373290496,585694137,44010493,16759296,41081403,770300551,-49288985,169867,40843,501865003,-50337561,165771,19710986,-1969700838,-371684412,-397154552,-1886848182,-379912181,1397876446,-151306776,-16774009,-2017064588,-1308622836,-165745851,-16773753,-2017064588,-1308622835,-166794439,-16773497,-2017064332,-1308622834,-421205735,755594,-2017017846,1962934283,-80418791,1323893621,-57415429,167819,-311113461,-386222616,1499136003,-85923645,1089418,-1976696649,572841663,521126855,1375698751,-941076397,243791610,-1435107584,-1946392856,-402653041,58063598,1006307561]},{"sector":8,"length":512,"data":[1946157711,-64165646,856081027,807726281,91500604,-991299614,-90904323,-2013857192,1979645962,-2017002739,-2080440310,1542325994,619234137,-94443268,1492446203,-397163386,-2021066130,-1017446391,1364414715,1465261650,-1912602438,270438106,607584005,604423943,-402653177,113704987,132900,-1895820568,-1173937146,548405280,526278638,1482381658,-72292145,276091403,-1460911550,839480577,787516388,630830335,-635045949,-1591369179,199803685,63079418,1947870444,226985988,99255040,-1763128437,12553211,45583104,1004111616,839677175,210208960,-645141504,-319175703,821190,2095629057,-138398981,-16776569,1242068223,-107943862,-385896210,-2021066306,-2084372470,619447490,-402033376,-922814034,952200,113703619,-1946155237,-1106836978,-138477440,5290241,-1935346692,172505,-12730069,-1207730673,78712831,1212735699,-1962734941,-167724832,-1900429170,47872,637967038,126354570,-136296893,-1064380276,-1274908184,-1575957233,950141000,1009300487,-1274187262,1963408464,185383175,6819465,2696840,119408327,-1929772800,1344178651,-768401917,512350862,512427280,512295056,512427290,512295058,512427292,512295020,512427286,512295022,512427288,512295024,512427282,512295026,1186661652,-1877047035,-1844540416,625523456,3153545,2891401,3280524,3018380,-1991428933,-1157600226,512317252,113705072,-167772050,7472839,-1088424448,1874396986,-54512896]}]],[[{"sector":1,"length":512,"data":[-773280781,906413793,178323717,2925315,-68892696,-1142726936,1223173923,-590616358,1409439465,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1935753760,234840937,1936876886,544108393,808333636,1866670128,1769109872,544499815,541934153,1886547779,959520814,234828088,758390784,761754945,1766601016,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,872859213,1353776903,-1576586590,113706803,1840,-1962934086,7661770,985532021,6219807,1107296953,1962960360,525385222,-1191161880,-398327804,108331094,-400595266,113705024,1828,-400617794,113704995,132900,-400612162,937951255,1976699897,605456655,-114497529,74830347,119412361,503773123,1962934023,401101577,1976699897,196696872,80162304,-964485102,-1007230462,50596030,12132081,-1948676608,-922018036,28575348,-922019891,-1070447933,915102190,512427806,-1886845148,-1048508640,-1886846958,-838662360,835969,120360841,9224577,-119150511,-2016949365,8388608,-1946627864,12028371,214073600,214008064,-148838400,34758,159892992,-1752563968,-1886846975,-1048510459,-704446336,235401,495497,-1274599520,1946369263,1963080710,-1158171639,585891873,-1017385276,855775419,-1178497335,-1943666582,637534863,22677447,-536558717,688111345,-1073042386,-466480012,-1073496061,-1389438837,638028070,167820,-661854485]},{"sector":2,"length":512,"data":[-1815887730,-744291517,62625026,-1627114080,496436301,239446020,-1408862549,-324467129,109766926,-553268256,2128348565,114813446,-334235669,988025915,100000518,-435830296,-303626784,90168581,-570030410,937100659,121495815,-2029562142,1737032979,203404295,-2117432320,-1274890302,-1910387418,-1899852070,-1564462382,-1863777180,-1574129412,-1212481034,973587968,-1994251845,839333150,49914560,-1577056606,1705116779,2662916,-1996455749,-1157162722,512295694,2059076364,-501315325,-1576816637,112919775,857639168,33012483,-1073084534,53681801,-1293352075,1127188992,-2008348790,-29146361,1274377677,-1996486714,-1157418210,-1410858506,1975519965,9431299,393490236,570934859,53681801,1949252675,-577705974,-176832502,-973048599,-2081947641,-563681059,1198805820,1400128316,1956400444,1950759943,-512431869,-388142616,-398795454,1956503349,180783639,-385649472,-1031086229,57806908,-1562418455,132842719,50992777,1258757026,1960656360,-585832410,-390927569,199810354,-18335011,420907486,-387650809,-68625118,-286770468,504793566,1272244999,50994827,169773387,-1605154045,414909663,81764872,-397360898,1398340871,81796745,11980938,-637281789,11778394,394910343,-628669629,-1957439229,-1190717154,-654114628,-27538549,1139111368,3153545,54861449,616729178,1406175984,168237984,-1156024896,513870400,1958742791,91273987,57924099,1275068347,1541048139,-31145334,-1031090038]},{"sector":3,"length":512,"pattern":-151587082,"data":[-661994710,-954546550,57931914,-1310808343,-1964256509,1912749255,33602307,-1020607862,-963979126,-125122790,-1997995149,169773534,-1982167293,-1996477410,-1996280034,-1962719970,-2030030818,790510042,-385649917,-634658743,1532185419,-1143019288,149433187,-561256234,550871273,1702132034,1919295603,-385850011,0,0,0,0,1128400838,1127352262,-399505466,-1070399713,-385808990,1162148620,808594755,2003780640,1852402798,1869881451,1668235808,1632772193,544108404,808465243,1936745005,538976349,1093482784,942502512,168430897,59648,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":4,"length":512,"data":[-96668183,-150776135,-16310778,-1190955777,-896793693,243911171,857604944,-1982165294,520425486,-164380274,244055691,-201588688,-1899983708,-1949266216,-83874778,-402238744,512428806,-2017066960,-1962868737,-167562466,57999111,-385243927,-389084977,222038129,1894253429,126496264,1975519811,950060014,1208367623,-1274776576,-1156526848,-890765306,317515783,2210554,-300413716,47902,512482190,512296218,512426128,512296220,512426130,512296214,512426092,512296216,512426094,512296210,512426096,512296212,512426098,512295868,512426020,512295870,-81854426,1443782339,1447860926,1458962622,110086997,-1782708480,1592847180,-1698802162,-1017817524,682373575,795423092,690497836,215429533,830606552,592783037,231148787,385161099,486676748,657657428,658057014,656090904,39462686,39584347,42205818,42992261,43319956,43451030,44106396,45286062,46203572,46924482,47776467,47907546,48038620,734,-834059960,29972108,1443025750,1297023940,-1949413555,1234226511,-984857774,1413546129,1385014341,9623361,1279609088,1279886020,8508229,9032773,1224736768,8899660,-2049686189,-1538700544,-1538045180,-1539028219,1296105478,33989,1099486293,-1881911735,-1814478516,1163067392,1397065428,9098309,1163154265,1224770509,-1901836979,0,-822083584,2133067658,1023085547,1022719229,-1963952642,-1654694393,-1979557445,-29314584,-141933631]},{"sector":5,"length":512,"data":[-1976642678,1958742535,-1639735310,-1976634247,1975859719,-1965389848,-1973855551,73310416,-5193718,1946443426,-1960792051,-29250823,-385649202,-1031141162,-1976695061,-796245241,-108298460,-822197846,-1075248267,2042759688,-381461527,1509623985,1398495577,93644875,738338491,-1967127999,50378184,394997465,2145932123,-1949791739,615263986,-385649281,977471646,-1959299647,1118580466,-495337462,-1406209397,1006984680,-402426834,11535715,2078868338,-225748984,-1073042386,58284633,201327593,-1336870528,-385868546,-1956968355,1118580466,-143015926,-374936766,2101086280,2117867892,-1975315339,1973435399,322627843,58040892,1259557609,1590656688,-1975280289,1921068039,851444438,1508936676,1359717305,-189464786,67561729,-1911132727,244127274,360748310,-988802620,1436553225,208831761,819632,1125275,-1190917958,115869498,69515776,-1962422599,749481714,-1023315071,12048522,-654058749,787647298,1124567212,787647298,1107789996,-2064130581,-63686,1607401845,-1185309345,-11465821,-385402188,-208993380,130974967,24510463,-1654693937,205109593,-826998959,1023132423,1006990590,-820611843,1007127107,-385649267,-1908668200,1793655669,126503689,-1654694193,738691651,-805259903,1372097216,-402435096,-2023881567,968513246,28332556,-1962628958,-1258344717,12780058,1769366852,1428186467,1635148142,1650551913,1124099436,1970105711,1633905006,1852795252,1718968864,544367974,1919252079]},{"sector":6,"length":512,"data":[2003790950,1936278528,1918312555,543519849,1953460816,1702126437,1766064228,1847618419,1377858671,2036621669,1936278528,1699553387,543254884,1869771333,1681981554,1668178294,1176527973,1970561381,-1308596878,112388425,1019382523,-821988540,1016946270,-368741814,-167770008,-742702292,785418756,172165002,-17271360,-386632246,512490475,-1729494201,-67764216,-997996661,-1308156140,1958742598,1011331592,-1308462078,107407688,132666363,97118221,839829992,139109056,-1576515166,61868107,-1340413208,138453508,-1341636958,138388088,-1594110117,-1073084328,1335888500,1975519747,223340547,1381039055,59697235,1515965323,-389903790,1482302479,-1654694193,1469862490,-964013994,41027900,-397684904,141820428,-16653336,-1845370904,1942678360,-1654694181,-1631287720,1448566361,-1963816367,783897552,-958856448,-1604780025,-16513281,1577477819,1364647559,-81157911,126536587,-349829912,-880018661,1579585768,12295519,-383874816,1583045380,-1946481941,649783499,1587371870,-70560169,-1041708149,1592912678,-2041012897,1515822788,1448566363,-886644248,1632507,1676215154,-401755905,179316434,1579601384,1465818463,-876596650,1963186408,1364443905,82386571,50343609,126507481,-1017444036,1520263006,1465801051,669771862,-1654694197,126507099,1076682532,456925042,1128471411,-1962610503,-29250823,-20958526,-2036336192,-997830460,1038683062,57272581,1486708574,-588529614,1537040222,-1073084534]},{"sector":7,"length":512,"data":[-883533986,-471268494,-1654694146,1956421208,738691602,1975519788,15919114,1375783912,-1667434083,28491826,-1660792088,-937115622,916586764,446471429,82813632,-385649251,65544340,-390057467,233374269,62777376,-385649981,1600061078,-1548134243,-397717237,108331180,-385867544,2112364688,1346120704,-1712846475,1042432,-400246807,-398393236,-1070465019,-1308331543,-1228918270,32368640,-1560301373,-1070463690,-980752246,-972959768,-543162361,717618692,854553541,87466688,-1654694205,-81876247,-18814896,-385650088,1600060970,652470429,171709554,65736820,-1952620706,-1190860514,-654114774,-437712898,-385649661,-1863713274,-1956723927,-1506870021,1977584470,1007127050,-1023315398,-385869847,-73399276,-33014782,-20382008,-1975270456,1916419079,540852993,141751412,-17485764,-1010237760,-76234742,1869744956,1064640060,167968928,1129366464,738394274,742028060,1007121397,-1977911810,512312071,11993854,512350346,45089538,-1157430878,173539332,126534592,512312131,-1974795522,1021438783,-1950124784,-352125410,-792658282,50438848,45764946,-1965390077,38922472,1515838087,50208393,310104,1019461642,-385650167,809303916,-20906251,10535880,1930378243,1913469977,35556117,1124758787,394937155,-2026403261,15198426,27306475,50045443,309594172,50470539,77799049,50601611,77930121,45845995,17688579,-2041018901,-1017405756,1631324042,2067593586,1596257651]},{"sector":8,"length":512,"data":[714947,809302643,977073778,1094501365,1530723186,512476149,-1983708357,-1341873378,50045442,512447427,11862794,-654059261,-1014768649,50950714,-385649956,-1017446398,-385815319,717093007,-1107760304,-202682244,-347309635,1196998126,431876587,-1109071073,-538240576,-349414979,500874714,-1514285589,-1110381761,-873782392,-348051267,1089322438,-742538773,-1111692456,-1209319433,-345726531,273792434,1002286571,-1113003164,-1544859860,-349776195,641645982,482187755,-1114313961,-1880398780,-350049603,582335882,-71465493,-1115624695,216610858,521977336,-1107818775,15281061,746110456,-1107821847,-186041969,435731959,-1107824919,-387368287,127385079,-1107827991,-588702845,1687731703,-1107831063,-790034522,607501815,-1107834135,-991351548,682016247,-1107837207,-1192687703,174570999,-1107840279,-1394012071,146193911,-1107843351,-1595331340,930004471,-1107846423,-1796659526,642760183,-1107849495,-1997988993,946322935,-1107852567,2095646612,127581687,-1107855639,1894327884,745651703,-1107858711,1693021248,1422966263,-1107861783,1491677142,129154551,-1107864855,1290340259,388480503,-1107867927,1089016112,1691270647,-1107870999,887687054,1892204023,-1107874071,686366495,655801847,-1107877143,485036379,1699790327,-1107880215,283715006,1695137271,-1107883287,82387559,345554423,-1107886359,-118943637,1689370102,-1107889431,-320272465,128761334,-1107892503,-521579801,639942134,-1107895575,-722910871]}]],[[{"sector":1,"length":512,"data":[946519542,-1107898647,-924236966,1190772214,-1107901719,-1125562712,520797686,-1107904791,-1326889093,1675804150,-1107907863,-1528208068,1234877942,-1107910935,-1729534838,1672330742,-1107914007,-1930859695,1806548470,-1107917079,-2132188111,1665252854,-1107920151,1961452328,1208466934,-1107923223,1760118631,1253359094,-1107926295,1558789907,1058455030,-1107929367,1357453783,1228127734,-1107932439,1156139121,1214365174,-1107935511,954812463,1213185526,-352963863,-167768344,966634,284027638,-253037056,-352976880,-167767554,1399274,349825782,-672467456,-352976827,-167756103,2018026,518974198,-756353536,-352976834,-167755443,6622442,646834934,1860892160,-352976889,-167769901,2045418,127003382,-655690240,-352976889,-167763993,2555882,754903798,-1091897856,-352976889,-167769128,868330,689433334,1072363008,-352976833,-167770208,4185578,433449718,-487918080,-352976811,-167749894,-382919235,935196052,-175183571,-382881603,951973256,-175970041,-385195331,767423868,-176756470,-379312451,992802160,1577530530,1443817662,1005127562,1971666175,-2048371958,-1573180165,1583023924,1443817662,686360458,-326370305,441985,292828073,208996156,-397323696,1515783003,-106108584,116805839,1979647796,872859159,1520500487,688273920,-32934912,5743296,-108205736,232647512,1263583282,1023094760,1007187008,1006925007,1476687144,1477356521,-400737047,-387450124,-397148785,260766995]},{"sector":2,"length":512,"data":[1912732032,28805960,-388396544,-192282558,-402641944,-729153478,-402643992,1824063538,1960512007,-161173495,-389510172,-997588958,-939327308,567094196,292929546,-620051621,-872543372,1949252780,1949121559,-53221101,1912606440,-387937544,74579975,-527824171,180587203,-1963363109,1915759620,-183878413,-872485262,652788550,-1336720635,-64624630,-852839342,-964011231,-1342165784,3401773,585679498,-399659008,-377421783,-109050004,1913894244,1693024261,-980761090,-1979709208,256193,-721538327,230983178,48771120,-2000385536,-389856505,-387450336,-397148997,260766783,1912732032,28805939,-388396544,-326434962,-402646552,-863305882,-402648600,-192217250,766771378,-1073077811,-1017442699,125098762,1017957374,-1023314630,-386132759,1396901005,-1930950480,750015227,-92266035,-32214478,1023312070,11930994,-109002242,-1325108676,1539702272,2062075274,-398806785,-1047855231,-1325436696,-8918982,1726531210,-40506881,-384935238,-633270251,249184782,1141824067,-633008422,249185806,1292819015,-1144123465,246402830,-737239088,-2050224491,530798606,-2142211328,1265844730,1198838282,138417800,553287875,378027378,1942161471,-2134297802,796082682,242536970,1929417705,133857318,378020211,1942161470,180521498,1010922688,-1743752363,-166940088,-1963947278,46202564,-382604352,-377423031,-389479872,326373397,292823868,225717052,91499836,-351262744,-20316670,-1144943927,-684847134]},{"sector":3,"length":512,"data":[-747061238,138294922,1084248656,138519048,1947198696,271116304,1933703808,1959922362,1091995652,-1739040248,-619980661,-1959915916,-1324355681,-741463546,13861867,378194827,1067452481,1373828616,45795467,570472448,190444023,1364686016,261875792,775690356,-1185410699,-503906301,-355342127,-394997237,-386223895,1498943396,863291659,138559104,1345090561,1108249169,244488,1946352000,506627,-388766729,24494091,250108224,243947520,-388822974,-1072969421,-1950154379,10938832,-386241303,28380983,494160956,1396490750,-1040312460,292834876,1178388786,-906099084,-596295108,138612360,1108248771,336773896,50272278,168297988,269356287,1393580562,1913805585,-736847341,-2145968107,-2145782504,-568515813,52476190,-352288582,-83498935,1915091587,-840412613,1760046327,518542330,78035963,1979647990,-379954427,1065354302,-2145553519,1065354503,-955485551,2147483527,-41433200,-390856449,-745801365,116087131,-369505047,-1746394159,-226077952,1976109906,-352144124,1227276,-147530568,-2033677327,512446953,-1886713785,-1947729920,1003779107,1946157711,-94873099,-1977406488,589752516,568902027,-389772765,116794140,1962870851,1711732488,1979711232,-1070397884,331006094,378086932,-1943666656,117449230,-1207942982,-1964111872,116846276,1979646053,4438541,-1158760784,216793185,954789379,4372992,-289109266,6688393,6620870,-1017382144,138610422,1394439679,138878603]},{"sector":4,"length":512,"data":[165879,-126484481,1711732571,1962934016,1694942727,-236192000,579135683,2145970314,-389510622,-527818118,-400394775,71104889,-286719118,1662946040,1958742528,1959329298,807307790,1959329287,824084998,-20382201,-123737917,470192067,250134023,1965243478,-93525757,-386325784,57996952,-386242839,-963970553,-1073032970,-1494678663,1389398776,754345960,1526219496,-2046494080,1342927840,-489663917,-380627788,-10552768,1342643254,721137747,-1260334906,307870464,-1959864317,1358599,-1959864317,-520135929,-225815557,1946161128,1949973513,452623,-1973684359,126537686,-1010106813,-1037384054,37538046,87878770,1381623923,306166611,-930418293,-1974015862,1643937828,-58718094,-2147257477,-1976688404,977683207,-32016956,786724297,-1073084534,1532693625,-1654694310,173430622,-1073034304,-1976637064,-1073069305,-846530439,126496350,-1166688246,1515904651,1137694346,-80655025,843927363,1414548730,1347221809,1291334228,-147631024,1211314688,1949523507,-80508365,-1484107693,-58720210,-1274907139,-134446855,-58718862,1476621052,-72298661,-1073560534,614662324,307870471,-1959864317,12016391,-1959864317,48782087,1591803648,470191967,-419455737,-1190635077,130416698,-85835008,139988616,126548675,17564708,126355258,69469300,-1006944139,-972584198,166395911,1342671610,126353932,1946498136,-87819462,86247306,126355258,-1006955147,-1475900678,202404867,1946630660,-1475901430]},{"sector":5,"length":512,"data":[872707330,-83659771,117373635,-1006958504,604474106,-2012792317,-1609927673,19662936,1487012722,1405352712,3022475,1960512323,140163865,-1979706439,1943588871,1926811656,1926811652,63144711,-1017385502,26708817,1506937600,1397944180,-385894936,78774134,1509278440,-998024358,922702600,-1269759954,-628404083,54730377,-386388503,133562372,1522254593,-167529464,-1009253404,1381191931,-1898826978,270438106,773753605,-620018944,1622821492,993848320,992756338,527567420,946998588,179363978,-1057090188,1947270272,-2134835698,125047548,-58670850,69039381,-5773309,401086068,-1964227841,-293597984,-1158757238,548405280,32242158,1532633080,-855477672,1358680047,-768388578,512678542,1810367760,-1564462592,-922877846,1509973666,1355765791,-768401838,512678542,116851984,-65434,251595124,57999462,-33547288,-2146941938,520635430,1511982709,-806302376,-1342168902,1512042016,1398198104,1193184081,42465032,1962934016,-54663118,-301972806,-1980840822,-973052402,25862,-1017226407,-967748778,25862,138747531,364427,497547,138878603,-165719064,-16751354,1639590517,-64689152,-1070391570,512481422,-1980103744,-1962926050,-1996242402,520102430,-301973318,1711720430,-83886080,-1017226407,508974933,-628174285,84942478,3409654,-402426625,116785167,1962868805,5695491,1566531103,1381061583,281871540,1961101904,975079692,1009682432,1058441472,916477952]},{"sector":6,"length":512,"data":[1959014912,-1998321107,1946170918,924748069,959350784,1024887040,-402477056,225771101,-134361624,-16776825,-352160513,889636357,1499135744,1364443995,-167754053,91619079,250089653,133579520,-1257933313,256064,1405311833,167779304,-1340902199,285048849,-1057095052,1962808552,-41621499,-2007250638,-1168981233,585892353,-1731658043,-1017459574,-1324436141,1959345155,-29605082,126487669,11600565,393515068,-12823829,126504565,1006633657,-1256098656,1007792386,1362982306,1493191400,-109000450,1007056145,839021569,1942305472,1273530930,-230496175,-1913512984,200606952,-402098990,-779356538,1478194011,-389807533,-1992032868,-1017226473,-390177189,126506510,-369770263,-1830161367,-233903884,686942184,1358152424,703717352,78758744,-386723096,1398404289,3028735,1359501753,-1185903180,-380563736,512357768,-4848837,-1946802200,1159629283,1972190211,133585707,-402426879,1532624029,512480135,-397737157,125104572,1443817662,-1980411159,-2030031346,195280602,-196351658,-1779891278,1948794101,-221059068,-7804733,175423498,238864638,61959539,126499563,-243079088,-1791208616,-1875112588,-583266700,-859875211,-1089934574,65737401,-1189948225,1464926222,-1056832592,-1161901826,-380152298,1499462856,-1017385758,1347497866,1978746856,1398364201,-1310146302,-570588932,-41939084,-2146470768,309695997,1543231208,-68884285,-404176037,-373072901,568980273,1965571317,-16455431,37538046]},{"sector":7,"length":512,"data":[11660659,614578923,1958742791,79756802,-60299264,-672660620,-2098674693,-252778245,-1312804269,-6756350,-1874886565,-571996299,1860787952,99175412,-77338379,1022414824,-398166744,173276858,-33131328,1929526472,296833182,1493133800,-1791000485,-466482315,50349758,-349927184,-583040994,-1336733067,-66590703,1968960395,59045383,125042944,1592822760,1274289385,-386615063,1381102553,-1594634520,-796260618,-260904885,1239943028,619195632,-389903630,57871026,1525839081,283661145,144238597,-402652742,393478424,19261523,-2015755430,-390057254,28311797,-1342115608,1529539457,472967363,1256784757,137469980,259309578,137502347,807308115,512447240,1515391028,-1047897255,-1979199768,138191557,-814432254,-402295982,65734599,1510467560,-1108811406,853308416,137470656,-1979660568,183995091,1260287168,46631499,-1995017536,-402115562,512296843,815925298,138190856,832753910,975080200,-2015755512,6285530,137174667,-402116704,512427887,378210360,-634714054,544360052,1709759111,171799552,-2014874432,756976602,137338888,1017170058,-387413496,-756350912,1263262711,-1073559670,1396906610,1258784232,-126493941,137863258,141869066,-167232352,1304784,-1593891095,-930478026,168310688,-1023314495,-1979171680,117303528,-2023831414,1381062366,-385699501,938012751,941000970,975079688,-1965356280,137863873,114944195,512446547,799017005,114681864,512318296,799148077]},{"sector":8,"length":512,"data":[166127624,-1047864565,-1022871902,-386770712,-399708456,-2024541693,924748250,-268703739,-1175314200,-205881291,-232134652,-1980622104,839393822,136880832,1527260834,-1309531416,47617,1375855592,-4554575,31123711,1457424222,-628637646,74701371,-628635394,-1995954270,-1995956202,1527258654,-291575733,-397212043,619382655,753823720,1408305896,-386809624,141885960,648200446,-238295032,-1979406661,-2012740601,-240261113,136584841,-1996488518,-1962403818,50673438,442296539,1994982261,-792557030,1377202904,-338607277,-387264190,1532624963,57858619,-2013394711,-1949594662,1124603934,-637281789,-1073559670,-2024665486,64588762,-628667429,1514789419,135798409,-347940469,283660980,648043265,1975519752,-628636927,437684675,12276488,471763200,-1972216,136912521,1406830427,-1979722008,1510484758,585685751,-1957539072,-1995955682,-1962402786,721951254,438208986,689867528,-1982073080,1510484254,-1327827109,1381191684,378229331,512428060,-620558302,512350723,512428060,-637335526,512481927,-633665504,175316596,136191627,192207419,664806259,1975519752,-1608389849,-1073608664,132849267,-804771680,1511355352,5957723,-352303896,136814619,74760202,283859802,1172855642,101312512,-1813510541,91547653,-27763878,-1023314488,689343314,-1982138616,-2029508322,-1957471526,-2029507810,723421658,1541076744,-1946195223,-1996145378,-1962592482,-1996145890,-385533666,-1957498741,50674966]}]],[[{"sector":1,"length":512,"data":[1523289050,87760523,-628631037,605981635,180587016,168261056,-2014218809,-466435110,-225778953,-1979678715,-397687852,-109777696,753711080,-244044740,-280106927,1457424222,-268441517,77970265,-1073084534,233374584,-2004933632,136887047,-1056307318,582551432,-108807554,-386928920,57999396,-387009303,512487674,-620558302,-620504317,-387080984,1515843521,-386937112,-2024083521,12174298,47745,-17843992,1369621448,-957853688,18999535,1958742616,8644867,-353616920,1793610321,17688815,-397190822,57929695,1139789544,117251721,1945095400,-272898045,-81884861,75032582,16050267,1381061203,-1962596888,-1157170410,-637337600,-92944130,129682315,-2015755520,-773140006,-1947545110,1359412510,787008395,79387119,1524237056,-628631037,1943681883,-301471485,1125091419,-1958531192,-1996030698,172180247,1400302528,1526996456,1375771112,-338499509,477365685,753641448,29088391,121253405,-28636812,-2013891123,-2017240358,-340596518,-980759042,1457424222,1125616464,-2024582589,77129946,-889270134,82379637,-336867072,378227701,-637336265,-880078734,1125616475,-1957473725,1241856286,57924099,-2014476055,619207642,1482250752,1676169977,-1605215740,-1073084335,-1276639883,-402396412,1239942438,189422083,1541895634,-118991933,-385650173,-1017385643,753604584,966918576,-312875005,1122567028,54108909,-2015786157,1406796762,44888459,-1210545472,-654098176,1532615303,-940642365]},{"sector":2,"length":512,"data":[230355142,-1564462563,1659439178,490460417,-870498876,1154620738,492653853,-971157051,1472666957,491505693,1109262785,-212984329,530798621,-752983357,-150987251,47578,-621328405,12241547,-146871552,-339047462,-137721032,-147657766,-339047462,26339574,725352629,758908532,-973208972,-397359734,-1226309208,2028491265,1949056001,-324802301,1493281000,1975519832,10283078,-388920494,-628686698,139173978,678680784,-397192624,-880147629,1398463111,1493214952,-628665765,50331835,1976434394,-1796713478,-637314304,1490745178,74701008,-621290505,-1594020888,-1073608630,1364199794,-49551278,39344474,-1995803968,-1962591466,1025411545,-1564462587,-1329395638,-1341985984,139115392,126355210,-1979026493,1929657538,139174404,-385649981,-963974127,57982986,-1964242711,1975519938,-335550205,-1022867038,168315296,-1141345088,-637337600,-92944130,-963978617,1939652610,-355382783,1939729105,214338270,1123060416,46566083,-1157205056,-145547334,-373191974,-1452016463,954778250,-385649918,-1983648843,-402108650,-1168905197,1347551232,-387214616,-1974342487,-1571270458,190515278,-385649189,512295046,1592264780,48985088,-1949791552,772296478,-1073608822,1994982261,1958820587,1128481541,-1766199829,-1976676066,46696967,170423232,-1965502272,-397192760,28966953,-385649408,-454557679,-385650176,1307049990,99350784,167785448,1129929664,-14709970,256227,1405334132,-1979167045,1958742535]},{"sector":3,"length":512,"data":[-1961886185,-1979167714,512312071,540805196,1614603892,539755122,-1152138405,134088782,139206283,1277069643,-389850360,1027407811,725379188,758969716,-1162213771,-336899553,-1258291014,1949056004,1950039249,1933196509,1915763913,-1965389115,64685054,64619483,-1976554277,50378448,-388331558,-1166737527,-780808706,2028477931,33012479,-399985326,259129403,1118501515,175389500,-16817432,-370051635,-379852147,-639046683,-341186305,-389817721,1319174096,1277070088,-561553912,45174870,-370577688,-621281598,1916878019,-178570237,-216101949,116760582,-216102461,116761094,-216101949,1358660358,-1007090061,116596363,1914765184,552566792,116596361,-1329364541,-216102625,512475910,-75430157,108150512,512476153,-8386829,-2130087392,-1994411797,-1022954722,-1994340480,-1022954722,243974538,114425941,-930478347,-3997326,-1022954738,12568204,-1949856072,637989662,103942026,102893302,807798517,-1010397689,-355341941,-1311077473,65196802,-754667053,74686178,536920705,116594313,-896871029,5572342,-1340836863,-1329061369,-1561800064,61933301,369224403,-1329395981,46670339,-759123767,116761320,-355269967,116594177,1929657539,1426519567,208929024,-654966492,-133761374,-378803773,-503949903,-133761374,5611715,-311115766,611904778,-1476230981,-788368127,-1614070805,-1958018190,2029390539,-923107060,-1174113792,-1631387449,-1009634365,-341849805,14007272,-167693382,16798982]},{"sector":4,"length":512,"data":[-338623116,-1009646781,-1023388256,139730569,117116553,-1600137078,-13498635,74637520,-118765570,139607688,839742366,786105343,557424523,139861641,1327585987,1159807777,-165584607,87172816,807847202,-154974459,-154858795,85993173,-987577529,1191512102,650453699,-1018755792,14018566,-511649290,1961462279,652489238,1246168458,-788975240,1976434396,583586550,-1948480800,132284906,-772943616,653119981,1296500106,48765304,854911744,180933604,-1979414333,-758954276,-1966857528,-2044400680,-754993967,-753428,326421130,-259341278,-388775886,-963970934,184537320,172913919,-2008386359,1173046812,6154246,-304939083,-175445365,-305009199,225766865,-1258275352,-126530049,1946673792,-1194686934,-321716480,-896871178,-125114157,-688460766,468250122,1962871296,-1964013048,1444347843,1412860168,-2134702328,-292880394,-336858252,-740019540,-1966929208,1445396444,-82408696,-1207910650,1049347982,915080947,243927124,-617412526,-1006834382,116797066,-1560396056,780666941,-1966930186,583152327,-1978960699,583414471,853019333,-1966867976,-771730162,642216901,384318856,642752256,-1013039734,5574282,846450130,1195214886,-146961882,1962938311,-1312322779,-1963750652,619238396,266829839,-955061040,37871243,1914256577,1947806722,1942039044,-1077676550,-946948096,116604555,116731530,138221194,116799114,-1977165006,-1123630275,-555155457,-1964489217,-402296065,-177012879,654284264]},{"sector":5,"length":512,"data":[1049181576,780666611,-880146699,-1022894709,-387282170,1391001529,1292727039,1944586100,871592959,602625517,137182857,137309832,-336776363,-13375483,-398128781,-176947370,-1979761432,-2012810434,1510405422,-1975678938,131959755,-1564462397,1721893989,-1173911036,-1036386115,1705116789,-397720828,48817312,12276712,1813940480,-397714684,1970594960,753166312,309603388,1407647464,-1981404440,1527016478,-461969333,1307073396,-1447416604,1958885888,-465377250,-465639359,-465901492,-385649332,837288380,-1036374812,1441334132,-1665135896,-402364766,-1712790460,887640552,1364875750,512350603,1088947305,-1978960922,-1982625033,1527015198,57858619,-1645857559,2112422772,773753601,512447232,1128988720,172165002,-385649401,-1958543150,378094359,-102236114,1958742755,1949973734,1979596021,126501643,973114298,1258976450,-387719192,-347347327,-472454947,-1336681612,54108673,1961233128,214272612,854100608,-443815744,966918320,-1979091709,1965571079,1777048844,675022730,-1159134347,-521643035,1976699877,214272541,-1159165312,-1169021817,-1605235967,-259390725,199572713,-385649198,-1974213227,-1144354066,1230185659,1236070795,-126304246,212660619,-1426486400,54108867,675022730,-2023835787,1229543134,1543494888,-481367989,1357448053,1965571327,-482154484,702749672,1089012597,-485299969,-10557140,773753179,1511426816,1478396675,1960459011,260723544,126501699,614252554,1124567167,-1243289368]},{"sector":6,"length":512,"data":[-1646722304,1373796441,-1962930200,50551326,1511950810,1541048067,-628633621,56368779,-225715653,-1426486356,-1617018209,-260727231,-1020608118,-980758390,-259340518,-645183158,56368777,1544981443,1960459011,1128485669,-1073084534,-2004933476,-1964489977,1125092068,54734730,2019139033,-1377283616,1541048319,512481259,378209112,-633666726,126491764,1346585411,1491362024,91554620,838878440,-1227846976,-338033920,378231261,-633666724,126509428,1129333571,-1964753688,797590287,55793731,1963146457,824084960,260725507,-654114635,-1958487805,990064918,-1177848614,-1974393401,395002631,-1073069245,1405288821,56106635,1918622267,512447477,-633667536,1407939419,1397443403,1541733096,-588774475,-389850140,512484519,-880082084,56104587,56237707,512350763,512427086,512295727,1894253664,1272548324,53419657,168060576,-1961331520,-1962645218,1730055115,-460593148,56237705,56368777,-1327270936,74162689,1705046154,-1962857468,1258303518,-1041645542,-1564462368,1705116779,1478396676,-1949594877,50613790,1511950809,790530819,-628669693,73408139,53419657,-225715653,-1426486356,-1617018209,-260727231,-1982231735,-1962714082,-1962644458,1258303518,58053131,-387648279,57860971,1239668969,-420882037,-470554140,591135153,1371734388,1509956072,125092410,57934908,-387744535,-1976770288,-1982756107,-1023088362,-517543861,58008380,-387899416,-1293360233,-1596945693,-1036385057,1491665779]},{"sector":7,"length":512,"data":[1392555747,81796747,-637281789,-1975316598,-1393456337,-1017397238,-1330052432,145799428,-498735024,-495065000,53288587,1508007400,-1327188247,61913345,1342681273,1491260136,57804602,-18686743,50045632,-400585917,-1228676441,-373280255,1323829350,-385649913,-29563759,1688339829,-33035516,-385649472,512426106,652738608,1478396171,73703427,57982986,-387987736,1128522292,56106633,853851112,87466688,-1595810328,-1073085333,-1125579916,82813182,58048522,-371033367,485024753,-507451165,-387884055,1860822154,-1897375262,1172851711,-402230048,1172963300,-1564462364,-756546321,-385649914,-1057037291,1860764533,1975582434,-496506621,82386571,50342585,-385351975,1994974201,-514463519,1541996464,1477872389,807308035,1960459008,1124567713,88664146,1408428890,1943961064,-386027461,512427322,635962192,-397190400,512426016,727320324,1501402,-1910580601,-1979494370,401088263,189416197,-370182702,-1014309362,-1979381272,84208071,1407317225,1943943656,94693623,-260702916,-1979343384,93907152,-1813450614,-388462075,-125172338,-1979348504,92596424,1621158026,1959329280,1343654662,-397190397,-1910635150,520587482,-980793021,-277495542,-575346343,1979594216,-509220605,57934892,-2015258391,11779034,529258755,73277065,-1996488517,-1979248098,-1160083513,-628686660,-393553661,126540423,24390716,-397323581,-397352848,-398336260,-397156616,-1645682369,1582913760,-1974018425]},{"sector":8,"length":512,"data":[-1957473592,-1257827810,-1982266624,-2029579746,1579060186,1943681796,-506599165,-628663717,-1992093816,-1360307433,32178188,82353401,-530388767,-529340334,-561553831,-397323434,797630671,1457424222,-930478198,1134318417,-1073080437,512453748,-633667536,512440691,-633666728,-779472526,512426166,-637336740,512481927,-633666769,-1969397134,-534714175,-2023859877,1364350686,1507886824,-561553830,1129533782,-1659401828,395002715,-1958519975,985762335,-1979550779,-1966789912,57843144,-33547288,1959657157,-1962440178,1111730938,1499067371,1935235417,190467,548455259,-906051074,-91490444,-152354134,1582914461,-2024350073,1359640026,-1192704630,-503715617,-561553831,-346861226,1946434690,-397688063,-1168974324,91488384,-544872367,512447321,-633665767,183042931,11779040,394909955,-1296027069,126370567,-109720834,-1564255653,-1343748328,1946434812,-535303933,784028497,-1965489408,1913207815,-1604626159,-2036398312,-997830460,-385568687,-1212423823,-1948712192,1581400855,-1974018425,1965833223,-551426045,-577050549,-1645673612,-561553695,1976699734,-543954685,1243056459,1364416859,50379451,-2000669991,126370567,50377659,-2027975719,-1152167206,-633667456,-1174047397,736821248,-470302069,-1974282101,-1971379005,1493219024,-544554102,-620496502,1458111347,1943064799,-980794623,57982986,-1981855511,1527190046,-1128574119,-1982266624,-1157164002,-654114765,512350723,1398474518,721453243,995252954]}]],[[{"sector":1,"length":512,"data":[-1979419942,-1596290306,-1073084648,-2135278220,1943681792,1407734533,-1957602560,370576331,337545991,8316935,118759049,-779422326,3663961,118627979,303991107,-634692857,12245771,-1552592128,1405311835,1526734312,-1949594799,-1962470378,-402188770,-628686776,118759049,-779422326,231336793,966967346,1397903623,118625931,50378171,529224665,1541028674,1134499720,1966573726,121217031,242532362,1395368635,683365201,-371653888,1515913763,-1974353063,-1426420985,-1974910397,1975585477,1489197554,1386136710,-1957650607,6416587,1374170228,12303104,-637282045,126393944,716918943,-1965489408,509495,141823292,-963977212,126353428,1515822680,-186006693,719868638,-386436096,-1145372644,64553728,168266458,1499159232,11779011,-1162148885,-1948712192,-1153252585,-654114630,-1950148727,-1382197,-1972142,995809927,512345050,988283707,-556275491,-1041695056,-557192965,1021104105,-385649406,700177925,-1965489408,1958742535,-1393456341,611583036,168266307,1359574464,-404170357,-555001599,120225968,11913354,-1186735869,-654114808,439093130,-1072037588,-1965147415,1121028853,50342331,-1070444071,-68679800,121020417,1007008744,-385649153,-922821063,1290339189,1976106719,-1070441969,-1314194805,1156071952,-573052461,58048766,1507727593,50341819,1125616601,1261930562,1371740040,-1968377461,1121028853,1963080786,754301722,-645180589,-1964434768,2734848,126540035,57982986]},{"sector":2,"length":512,"data":[1526697448,-1325297176,-755374064,842249817,-1426486336,1976499777,71091192,1962944699,12106499,126540035,-383808949,297524421,-2015821056,77511642,1124075462,-1662516043,1127188701,-2008862840,130433839,-1576488776,-1070464261,-402348126,1539562769,-1631287720,-997810349,-1950054832,-1979389666,1963015175,-612701949,58000444,1493056745,1386136710,-1614050479,-2041527162,2734788,126540291,1968406588,-17569789,-1979187621,1124119823,-1631287720,146428063,-1965423872,-2012398537,67662895,315001568,50825413,1503549657,1527220314,-2008331581,931676951,-2146974141,-2146974141,-561553829,1405848406,50340539,1125616089,509507,121217115,91602954,1526751720,-23861053,-589960869,-1971276463,-91536633,-838974806,-1017514635,512447313,126485737,58000444,-1174545687,-654114774,-1073084534,-1974790028,268321543,-930478294,146397443,-1965489408,1539312135,-1974746279,1958742535,583685,1543095413,-1021661095,82386571,-1963488686,666452691,-1965489408,797590287,260590401,1127188547,834360131,-1311112448,130433920,1976172032,1632504,-402180704,-1073085480,41222320,-2007269200,126372615,-1017462774,-1152167343,-637337550,447863431,1540447976,-389850790,-93126818,-168224196,1397879925,82386571,50342329,509657,509507,-1017553927,1406909160,-1965343000,1975519751,-618403581,394937244,-1975547325,1020299994,-1978764798,126501647,977062654,-28637068,-1023521854,-889306959]},{"sector":3,"length":512,"data":[-1047894924,1076682532,456940658,-256288653,-1426486524,1124841025,58313470,-1979697687,1965964295,1501192,-342034019,-1426486294,-822197439,-1070407051,-1660617566,-963984549,578030396,510788412,548467572,1101724043,-353644802,-822163714,548461684,1101724043,-160051458,-1763061525,-10426150,82885203,-1863839823,1975582416,-630068989,-1174072645,213189872,-2001931637,-29211897,1542813133,1104697320,1406686184,1409233384,-1325076294,-798889969,57983230,-1160064279,599459057,-401885947,397531943,-402320710,-1017393081,-397225846,57997103,1524283625,-68660655,1364810494,-389641572,-1986135521,1912814366,180521498,-1156287040,126485753,192225340,1128400838,1128335302,1532168134,-1991194998,1392830750,82885187,-225768271,1107789996,1976172099,-2000669963,1358343,126409219,1124567107,-2008873080,126370567,-398306726,1482423910,138171216,-1293417611,1963080706,-1427615208,-401362686,-1319448645,-810162154,58048766,-337998615,-401624798,-1057042521,1482299765,125110332,1380975280,1356655426,1946434642,-646584061,1523641154,-1426420904,1030994,130472451,130433920,2603776,-1070409213,-2008873080,126370567,1527220291,71042954,138154868,20717684,1709769588,-40048424,54206091,3389891,-2135828221,-29151352,-369527351,512481356,-1957493527,2276299,-628631293,1162066,-1336682237,-32506364,1125020935,-176830210,-967091621,568918535,126507992,1352630052,-791672950]},{"sector":4,"length":512,"data":[-1979468477,-1949249529,1111730938,-210383362,-791674704,1487600267,-402426466,803733562,-396796931,11665458,1929175528,1947876360,-339542519,-402607373,512426014,-880081687,-1157494842,-654114777,126402610,1124567107,-2008868984,-675354361,82386571,582732683,-1244069120,-33060348,1958742543,-29113599,-1007520307,-1897333387,-806164263,-371658008,-277492098,-645928877,2028476849,229724366,1489924840,246534282,1540254440,-47388477,82885203,-401624750,-1057042853,-1315155366,-402426864,1520291407,820577141,19917016,1088951217,1975737294,-256158962,509444,-401886909,1952120959,-51320829,-56442830,-239381756,-402083580,-105185179,-402411260,314179677,-400903931,-256193013,-401493756,-12792317,-454491275,85179351,126487473,-675551165,71090570,126487413,41164860,-1427624272,1976172247,-680531739,-259387644,973089184,-1341820218,-678172640,619185011,82885336,-1125641551,1979661517,-1966908484,1965702151,1057474297,1976172099,-1974287368,-1595387448,1348098509,50340283,1963458266,134103816,-29162635,1019316743,1477997858,-646660086,58000700,1020811497,1946267651,-1010762036,1489223730,-126614724,-2017214454,3926234,82386571,3455315,1273551107,-1185199365,-654114783,585631742,447828480,-1949482264,1124395294,347200135,181221096,-898278464,-2135172473,-2015755520,-1948521510,-1190973666,-654049494,-1301030341,-1946891031,-1073042190,803735157,-1426420992,1342496672]},{"sector":5,"length":512,"data":[-202250158,-645194892,-633650342,-1252912012,-1393390836,1963407938,-838974712,1659499381,-27764009,-1009223224,-400969390,-1057043241,898089818,934688639,944125979,945895502,170080369,962541702,931083655,941307830,944650310,946944097,948308515,879638879,170068959,170079357,170068515,170068515,882117155,199177371,883558947,170068515,170068515,170068515,885535937,170068959,170079447,170068515,170068515,888015395,309131,994444426,1962936503,179800836,79137024,42991360,-1215577344,76021766,146225990,-1962642176,-1996485961,-16775497,-1023409529,50798779,-1962466274,-1752579297,-1886846968,-1886846972,-1886846970,-2017001462,2,1583044803,119289599,-2041001130,1515822788,1525738331,-336897701,6201427,360038654,3022475,54992521,-1021130870,91537662,916635698,-1950131451,-1962719962,-385662178,1152571245,-2133342231,41255162,-1950154062,-2096830178,-2084359229,126496451,-1312567050,-1841152,635989424,-383874091,851673860,-383874109,797411844,780845824,-555220894,6529279,2028537736,-2041554689,256196,-1140885527,-397200249,1673199755,6416640,-1564178856,-1966931870,-402181586,815857585,-385382393,1348009803,65586310,-11867904,1395963067,-1157602328,887686960,-997828608,-1022938462,120794762,-1593867032,126355249,1493114601,-389773744,501809155,887208959,3926099,-385404485,-2041053177,120824516,1947024579,1393032724,1543464680]},{"sector":6,"length":512,"data":[326418686,121161982,229639794,509635,1223165834,1527220479,47811,28969195,-1174148352,1402732546,-855591856,549778967,-990507403,-166890236,225706436,116070578,48962482,-1175905870,1011898582,-1341819635,-2955254,-1013097640,12276510,605946628,47623,395041422,84942478,119936649,-1144840357,503514920,529205028,120372163,119807491,1405296523,-151107096,-16777081,-286719116,-1075293484,63079423,1257160754,-1070404022,755592,821128,886664,952200,1017798,277333763,1392706304,-1190855749,-2142568439,-85909441,509507,-1190858565,-2142174848,58007615,-2147435031,578038847,21620825,402227537,1393193476,-2130845208,67113359,4161627,-1679228043,742359040,-398248331,11916010,796151356,1329332661,62204276,594822460,527707196,1295779253,129309044,326390588,-2143088917,125042751,1965834112,-1007074557,1406386409,-1258450456,296165892,61954816,1946148840,-2146465247,-462277399,1929771392,-3217185,663359603,-30348160,50102476,-456077709,1609098448,263162109,-1966765568,1963009257,1959332358,-2133983561,-1334639363,108326154,41205770,-334836226,1085321,-1946339864,-1962933873,-402652265,837353161,-47912707,364427,497547,-385957144,378273056,-1031600346,-293556221,1493363331,1257162122,-387006070,-1349845762,61931535,-2020940334,-989200367,-301743485,-301223870,-919387582,1979521512,-722015997,1009788140,-502827984]},{"sector":7,"length":512,"data":[-384257297,-1070410500,99255131,-957477968,16777351,162499162,-1342131968,-92251288,-1962380028,-1996023498,-402607177,-991309228,-744232708,927841107,-1959902397,188957455,990475465,787576273,-1017442421,1272099049,1845886976,-1778116864,738394112,1476493313,-1342128126,134242308,1610629127,-1073729527,-2147477486,3109,1611,-402653184,-118948394,-58398467,-2013852044,-65534,300479349,-733484800,42452986,-402653184,-369426428,843250821,-1031541056,602467843,8882428,244040448,-745863399,1263620699,1959807976,-803018722,-773265364,-771010215,995692916,-1960414518,-397717046,57987120,1507079145,1364416606,50379963,182486750,-401771072,126353564,-336010685,-769398517,-398260342,-119406335,119082635,1959406426,509446,1543168579,-2083342615,1347957443,-488061818,1947020288,1393032728,1543255784,259309822,121161982,229640562,838912232,-385382208,1240005560,-373290496,585694137,44010493,16759296,41081403,-2081826169,-49289005,169867,40843,1944705579,-50337581,165771,19710986,-1969700838,-371684412,-397159586,-1886848182,-379912181,1397871412,-151306776,-16774009,-2017064588,-1308622836,-165745851,-16773753,-2017064588,-1308622835,-166794439,-16773497,-2017064332,-1308622834,-751113959,755594,-2017017846,1962934283,-80418791,1323893621,-57415429,167819,-311113461,-386222616,1499136003,-85923645,1089418,-1976696649,574161599]},{"sector":8,"length":512,"data":[521126855,1375698751,-941076397,243791610,-1435107584,-1946392856,-402653041,58063598,1006307561,1946157711,-64165646,856081027,807726281,91500604,-991299614,-90904323,-2013857192,1979645962,-2017002739,-2080440310,1542325994,619234137,-94443268,1492446203,-397163386,-2021066130,-1017446391,1364414715,1465261650,-1912602438,270438106,607584005,604423943,-402653177,113704987,132900,-1895820568,-1173937146,548405280,526278638,1482381658,-72292145,276091403,-1460911550,839480577,787516388,968733951,20586179,-986069446,199803705,63079418,1947870444,226985988,99255040,-1763128437,12553211,45583104,1004111616,839873783,210208960,-645141504,-369507352,-957555444,16780423,-75896637,-2013806542,-65534,1246365812,-285635096,-1142358096,176654585,-1031552256,539290628,-1410856587,-2000093447,-1023406457,453428986,244056071,-2135030014,33013504,-67088199,-645094157,721420961,268385729,-4717698,-754667249,-1555543840,-527760630,-1896480584,9353664,-1107296069,-1977219430,1124567044,-1929912250,-390033704,263455451,1218580685,121152000,37497012,1353977202,125110076,-1995764551,-2013239282,-956290778,466438,-611517951,55582345,-1898826978,270436826,-1877046523,438208768,-1843492091,471763200,1813940997,371099904,1847495429,404654336,1881049861,303991040,1914604293,337545472,605981445,-1138849536,639535875,-1105295104,327990019,2367113,2494092]}]],[[{"sector":1,"length":512,"data":[-1996127301,-1946120162,-1157590514,512309612,512294960,244056108,244056114,-155516882,1813940499,1846447104,348175104,7347849,7474828,2104971,62922377,2236043,63053449,121290527,855666617,-1410073408,-959578648,17118726,-1560081759,-202899412,-1964442672,997309391,-389678360,-1612068678,1701336066,1296189728,1919242272,1634627443,1866670188,1953853549,1109422693,1667855201,1700138495,1869181810,826351726,540028974,2037411651,1751607666,1112088692,1866670157,539914354,825768241,536874495,1967205684,825765223,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,-968015287,541446,138544838,1159629059,314802440,1193183488,-2117367032,1358990529,34759,-880082816,138747531,835969,364425,-1031679605,-1752629120,512425991,-1377302457,113662967,-1325463756,120758864,-955829342,471046,47616,1961413259,-1106873088,1592275806,178432,6678594,1958610549,5236787,1107297465,1962956520,864730630,-956284696,467974,858963456,-956292120,34022406,860405248,-402647064,-770967350,378081141,-1075312860,1976699896,504793348,116900615,-63714,-397211276,-770967382,-1185208203,-953286645,-2093730300,-152960314,67681987,-1189154557,-645005312,186584203,-1274645303,186109185,843236297,-1957040448,-1962467786,-1996020706,-2130239345,-1996483903,50800783,214008270,747604224,-1933475577]},{"sector":2,"length":512,"data":[2028491008,-942961672,-2147483513,-127670272,-1215704181,-1031733248,-1048510452,-1276641268,8898294,-2017067008,-1979777015,-1996488297,-2130705009,50364609,60262870,126847232,120037376,54325172,37488244,-139196043,-335535686,1542374434,35175363,-1047606989,637561529,167820,1510459174,79921921,-1799425568,179056189,840201408,62915556,785943488,126428845,42961958,-1931023616,-1010790696,-1560062317,-829095194,96900611,-1610244945,-1969290126,73045764,-1424900952,-1045690640,308521222,-536410903,266274373,116972550,-351841814,1609312283,112518184,-402231325,1525024315,107472646,-1241130531,-304216448,129096453,-502810655,1351026640,132221189,825780,-1031681396,649331713,-628219443,-762396018,1688387634,-64952060,-157143888,12040961,-1153824826,512303649,-1070463179,-1576863326,1805778950,73769476,-1157617502,512295040,247138073,203327747,58374915,65150601,-543030352,441092,53681801,-1979582533,-1983903225,1963143966,11725059,-1975308406,126372615,-838974653,-968100491,512294919,-155516109,-913381375,58048522,1006669801,1259828271,-1994258490,1124283166,175386428,180974568,-369789504,130416756,-916002816,1019890152,1011315795,1012102211,125082701,57951804,-389195799,636012876,417872585,393518539,-1073035638,1323893620,1019382475,-385650160,-542979259,-1995969788,-1576859114,-397736165,645187872,801699816,367571691,-923866935,-891164614]},{"sector":3,"length":512,"pattern":-151587082,"data":[119084681,99149035,-924915511,-892213190,119412361,-1957964565,1258490398,50994825,-543141045,143899396,-33235038,-1092071232,-1991026436,-1979391970,50378448,1524237274,-2029997127,1125616090,64653123,512447449,-1128724711,-1948712192,-922854453,-1992039051,-1996476386,1510163742,-266026358,-1605119862,-1073084645,-1329915787,119447818,57982987,50716859,-1157401638,1263271935,-1973691769,-1963055934,717392592,-1965520189,-1966662970,-385649672,61983369,-947196973,57803324,-1979580229,-1966921022,449219288,1945668295,-898897661,50994825,512350855,512294956,512295727,512426821,-628686800,53419577,753468275,1272589260,-396668085,-88356149,-1049499585,-372609304,1109442825,1936028793,1701996064,15269989,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"sector":4,"length":512,"data":[-1408455425,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1953644832,-1240671744,1444974339,1769173605,824209007,540028974,1126777640,1920561263,1952999273,1296189728,1919894304,959520880,201339192,-1895579635,1667845152,1702063717,1632444516,1769104756,757099617,1869762592,1835102823,1869762592,1953654128,1718558841,1296189728,-905105408,1092652803,1869116533,539828338,1852140615,1951604846,1953653109,1918977056,1801677156,-821214464,1394644739,540690245,253794336,1125482,64228695,1347240275,609437004,572581664,2248526,64884065,-233955191,225837059,1095959528,1162629197,-417323949,1163469344,-1560272301,-922488307,-935666400,304877856,253804346,739322895,547371537,-1069930481,371247674,974327596,1226973329,2248002,66850246,739778762,288099343,572559674,1936876880,1818324591,1836008224,1702131056,-218094990,-1090255347,738856736,550124049,439093775,-1858465492,680984352,-383134449,353315030,701304620,680984553,2734095,68161064,185540810,288102956,-14642886,-1290852202,539158825,538976288,538976288,542396993,538976288,538976288,-1761613534,699600680,437145088,253807108,739912716,546388497,254318335,-689362509,739577640,-383180785,254318335,-2097141325,-905698290,739053344,974203930,-1761664879,699600680,538977001,1700143136,1869181810,774971502,538980400,572530720,680984553,2732815,70127273]},{"sector":5,"length":512,"data":[235872458,288102956,-14642886,-737204074,685173033,254547215,-1496627,-1106302826,249364521,549389368,288100111,253807162,739781649,546388497,692267042,1886339872,1734963833,1226863720,1126190402,544240239,825768241,252772386,549389378,288099855,253807162,739781655,546388497,1701990434,1931506547,1701011824,1918984736,544175136,1953394531,1702194793,254083106,545981516,585558238,550314018,1275994249,254935044,1296237654,-417323964,1241570848,-1962647537,1145914144,552017956,-853532126,237013280,1711277142,-1962644977,1145914144,552017956,254318335,-853530341,237013280,2130707962,-1962642417,1145914144,552017956,539107362,545857741,296974,75370377,1443766409,261423108,546768008,-414759597,263716881,545981586,681049896,688132108,203484704,-399966160,3149030,-1994339040,85200416,-1676687104,253796356,985676368,739516618,265945106,546374822,1280264226,1414078532,385884705,-1861963760,1331241504,1163011925,1414483488,1230198048,1411401550,1126188360,1380928591,1095911215,1128876112,1330454611,1330923854,1145118802,1163153473,2236754,79302741,1411522705,542329160,1196380752,541933906,1397052245,1095911200,1128876112,1312890963,1163010116,1380537681,1411404613,542392648,1346454593,777143636,276693026,546374852,1163022370,1411404627,1394623816,1162035536,1380008480,542069792,1414418243,1163218505,-2013257170,-1761292784,1195725600]},{"sector":6,"length":512,"data":[-670000128,-568292604,572712680,-1994339040,81268256,-502224640,1145914116,552017956,281084126,545981676,608456003,572581664,550314018,-502390647,282918916,545981686,608456003,-14620896,453978262,550314025,-99737463,284557317,545981696,608456003,572581664,-853532128,237013280,1530,-1996158447,81923616,336660992,1394644741,402671429,-1794829039,-1994348768,85462560,370222080,546569733,577137954,387001856,237013253,939525401,-1476061167,85528096,420562432,-1491036923,237013280,1476395008,-939188719,288100896,421576506,-1069936340,672231936,673230853,689056786,1075587306,-938529791,739453993,-1912584638,-1341836783,504309792,689835820,572270826,-1441846271,739322921,-1543485886,-1341834223,504309792,689835820,739387626,304883986,1175567616,673230853,738271772,-366404081,20978728,740889132,299106322,548406608,740167464,-366368241,254546472,304884168,1511124480,673230853,738271772,-366368241,20978728,700976940,150999596,-1341823982,1678714912,699600684,-670095126,700518188,1110184236,303366214,550110574,254547983,304676880,546375023,1750343714,1766006885,572553588,305397819,550110576,168766483,2014466816,572559621,1936028272,1397039219,1701519427,1869881465,1769497888,3875444,92410468,-416196535,267094271,588245498,-1944947456,844646661,-343343129,266992143,311492643,1481180566,552017970,827869480,844646890]},{"sector":7,"length":512,"data":[538242089,1481187561,312606770,1497957792,-1996495055,-378662933,-1392494833,1225107986,266809945,315687077,548406708,827869480,827935020,1227418153,1227633240,740897369,334203135,1110184681,317653062,548406718,827869480,827935020,1227418153,1227633240,740897369,4336657,96998165,1227366576,317272408,827935020,-366406935,844646696,1227625194,317338201,739322921,322306114,1095304658,-14620896,1227368582,1240084824,-349621672,827935016,844712426,1392519465,1225120787,552018003,805313832,1240109070,485239105,-383778456,2428704,98964318,1397301444,1728058156,1258680339,14608164,99750781,608903307,572581664,550314018,-2113003383,329187333,545981940,-400546741,-1761664794,689639208,-1742680800,745148192,545864209,360974,100275151,739320008,545995282,1347240275,609437004,572581664,575882585,-31404768,1394745484,1280331073,740447045,256028,100930527,739778751,974203921,8469184,437911552,14608164,99750781,608903307,572581664,550314018,-2113003383,329187333,545981940,-400546741,303366214,550110574,254547983,304676880,546375023,1750343714,1766006885,572553588,305397819,550110576,168766483,2014466816,572559621,1936028272,1397039219,1701519427,1869881465,1769497888,3875444,92410468,-416196535,267094271,588245498,-1944947456,844646661,-343343129,266992143,311492643,1481180566,552017970,827869480,844646890]},{"sector":8,"length":512,"data":[168603903,1411419904,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1835094816,1936026736,336387584,1444974336,1769173605,824209007,540028974,1126777640,1920561263,1952999273,1296189728,1919894304,959520880,268448056,-1895817715,1667845152,1702063717,1632444516,1769104756,757099617,1869762592,1835102823,1869762592,1953654128,1718558841,1296189728,671953920,1092652800,1869116533,539828338,1852140615,1951604846,1953653109,1918977056,1801677156,839737600,-585053952,287361082,-1086713300,739184416,974203921,672080032,-902119366,254547488,546388499,1296189730,226754594,550109244,202320920,-1858465492,1699750432,1852797810,1126198369,1970302319,577922420,1175302400,253804288,974203914,168763594,288102956,-14642886,-720426858,685173033,254547215,-1496627,-1206966122,233177129,550109264,439094031,-1858465492,680984352,-383143153,538976290,538976288,1347240275,542328140,538976288,-383639520,254318335,201337267,-905946610,738987808,974203930,-1761664879,699600680,254334697,537865237,-1761613527,699600680,1678655744,253807104,739912717,546388497,254318335,585705907,538976288,1936876886,544108393,808463921,538976288,-1498592,-1290852202,241631273,550109294,439094799,-1858465492,680984352,-383134705,353315030,701304620,680984553,2735631,7868059,252649663,-902164180,739315488,974203928,673325201,1126181187,1920561263]}]],[[{"sector":1,"length":512,"data":[1952999273,1296189728,1919894304,959520880,2240824,8523471,235872447,-902164180,739708704,974203928,1344413841,1936942450,1634759456,1646290275,1948283489,1868767343,1852404846,2254197,9178863,1779376280,975180076,1279515023,542261573,1145198923,1179992608,5391686,9834236,608456003,-568269024,-1609625088,1126206208,-417053619,-853532126,237013280,771752086,-1962890737,1145914144,552017956,254318335,-853530341,237013280,1191182696,-1962888177,1145914144,552017956,539107362,545857741,51214,12455761,-1945231223,260046848,549978312,974269457,252649663,288100652,-902119366,338433568,572559674,1347240275,1344292172,1380405074,575884609,-770726912,404802048,288101420,539005242,757088546,1398099232,538985289,858267680,573139762,-602941696,421579264,288101420,539005242,757088802,1414676768,538976288,858267680,1127050034,1919904879,1634879279,1667852400,2238835,15077371,739909834,974203924,572530833,539828291,1414680397,1162297671,942942240,2238827,15732785,168763594,288101420,572559674,539828292,1129466179,538985804,1094854688,1094928723,1819231021,1194291823,1752195442,695427945,275185698,550109434,338430735,-1858465492,541401632,1329864749,1497713486,673194016,1230192962,1127039299,1919904879,1634879279,1667852400,2238835,16453789,202318026,288101420,572559674,539828294,1128614224,1414676808,1094854688]},{"sector":2,"length":512,"data":[1094928723,1819231021,1194291823,1752195442,695427945,282263586,550109436,338431247,-1858465492,541532704,1094852653,538987596,673194016,1230192962,1127039299,1919904879,1634879279,1667852400,2238835,16584951,235872458,288101420,572559674,539828296,1330401091,1380008530,842213408,2238827,16650523,252649674,288101420,572559674,539828297,1162625347,1380009038,842213408,2238827,16716113,269426890,288101420,572559674,539828298,1128353875,538976325,1094854688,1094928723,1819231021,1194291823,1752195442,695427945,292618274,550109440,338432271,-1858465492,1397039648,1162551363,539828313,1414092869,295305250,550109444,338432783,-1858465492,1313153568,542262612,1414808908,1327518277,1380982854,1095911247,-889183667,-905902575,739577632,974203924,1310859409,977622095,1819033888,543584032,543516788,1987011169,1919950949,1634887535,2257773,17240574,370090186,288101420,572559674,538976288,1701978144,1919513969,942940261,1718165611,1769174304,1109419886,1128878913,503325249,-1744761326,745148192,-1892016111,1162626009,1260409409,541344345,1179014466,1006654021,1258360850,552017956,545995486,-400546741,572661990,-1994339040,17698336,319969536,539249409,987635943,608903307,572581664,550314018,319692937,310444033,545980696,1260946431,739388452,-417322734,574693920,-31404768,1294082188,1128878933,-400806878,312934403,545980706]},{"sector":3,"length":512,"data":[1260946431,739388452,-417322734,574759456,-31404768,1092755596,740447314,256028,19665618,-2080431989,740576040,689056786,572581664,-853532093,546111008,1380928802,1195460436,472654405,-83885080,-1962854894,679739168,304882763,539562540,1143087335,550314018,572558590,1129466179,740443468,256028,20386596,-2080431989,740576040,689056786,572581664,-853532091,546111008,1313817634,576275787,65543212,940789504,-14644479,608905347,304878124,552017961,539117090,-1929502515,1229988384,1095254853,740447314,256028,20517750,-2080431989,740576040,689056786,572581664,-853532089,546111008,1279345186,472654412,-1593834520,-1962853869,679739168,304882763,539562540,1210196199,550314018,572558590,1330401091,1380008530,-400806878,332136451,545980731,1260946431,739388452,-417322734,575218208,-31404768,1126310028,1313164353,575816004,65543212,1007940608,-14644479,608905347,304878124,552017961,539118114,-1929502515,1347625504,574964545,65543212,1041505280,-14644479,608905347,304878124,552017961,539124002,-1929502515,1431118368,574835027,65543212,1058292224,-14644479,608905347,304878124,552017961,539124258,-1929502515,1380000288,472654420,1828717544,-1962852332,679739168,304882763,539562540,1663181031,550314018,572558590,1414680397,1162297671,-400806878,345374723,545980737,1260946431,739388452,-417322734,576987680,-31404768]},{"sector":4,"length":512,"data":[1126310028,1279480393,472654405,-1090518040,-1962851820,679739168,304882763,539562540,1696735463,550314018,572558590,1263423300,740448581,256028,21173482,-2080431989,740576040,689056786,572581664,-853532058,546111008,1162432546,1380010051,472654420,285213672,-1962851307,679739168,304882763,539562540,1730289895,550314018,572558590,1280065858,-400806878,356253699,545980741,1260946431,739388452,-417322734,577249824,-31404768,1126310028,1380928591,575816002,65543212,1175807744,-14644479,608905347,304878124,552017961,539126050,-1929502515,1094918688,1145980236,740446785,256028,21435791,-2080431989,740576040,689056786,572581664,-853532054,546111008,1095783202,740443459,256028,22287793,-2080431989,740576040,689056786,-14620896,453978262,550314025,1745756297,364576769,545849694,51214,23598543,739320008,549403154,974203928,8469184,65541593,-938598263,0,1145969178,740446785,256028,21435791,-2080431989,740576040,689056786,572581664,-853532054,546111008,1095783202,539124002,-1929502515,1431118368,574835027,65543212,1058292224,-14644479,608905347,304878124,552017961,539124258,-1929502515,1380000288,472654420,1828717544,-1962852332,679739168,304882763,539562540,1663181031,550314018,572558590,1414680397,1162297671,-400806878,345374723,545980737,1260946431,739388452,-417322734,576987680,-31404768]},{"sector":5,"length":512,"data":[-1408454145,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1919896864,1734436724,215941221,546243510,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,3225657,62917905,1766596751,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,221577293,546243530,1752462657,757101167,1701594912,1394634350,1918989684,1631854708,1667851378,222756971,546767823,977749331,253794336,1125482,64228697,1347240275,609437004,1330520807,224591906,545850334,258574,65539446,1347240275,609437004,1163469543,-1560272301,-922488307,-935666400,304877856,253804346,739322895,547371537,-1069930481,371247674,974327596,1226973329,2248002,66850246,739778762,288099343,572559674,1936876880,1818324591,1836008224,1702131056,-218094990,-1090255347,738856736,550124049,439093775,-1858465492,680984352,-383134449,353315030,701304620,680984553,2734095,68161064,185540810,288102956,-14642886,-1290852202,539158825,538976288,1380928800,1195460436,538976325,538976288,-1761613534,699600680,437145088,253807108,739912716,546388497,254318335,-689362509,739577640,-383180785,254318335,-2097141325,-905698290,739053344,974203930,-1761664879,699600680,538977001,1700143136,1869181810,774971502,538980400,572530720,680984553,2732815,70127273]},{"sector":6,"length":512,"data":[235872458,288102956,-14642886,-737204074,685173033,254547215,-1496627,-1106302826,249364521,549389368,288100111,253807162,739781649,546388497,692267042,1886339872,1734963833,1226863720,1126190402,544240239,825768241,252772386,549389378,288099855,253807162,739781655,546388497,1701990434,1931506547,1701011824,1918984736,544175136,1953394531,1702194793,254214178,545981516,-420994850,539107872,545857741,281614,72748852,608456003,-568269024,1611615488,1126206212,539247693,539107559,550314018,2114855049,258473988,545981546,608456003,-1761614048,689639208,-1994339040,79302176,1947169280,237013252,-1778383786,-1090224625,739184416,985676305,978329775,1296113798,676614735,738325532,-935712493,-1577053920,-1761312241,1195725600,-838856217,-1962638577,-1744885728,68160552,552476713,687878156,806151912,550313984,1397509955,337700640,237013306,-570424186,-1610316785,978325280,1397509955,-402646553,-1761311217,1195725600,-2012220928,237014276,134218968,-1962634736,680918816,-416734135,-853533937,79302176,-1676663552,-14644476,608774275,304878124,841148201,550314018,-636608375,272760839,545981606,1227391999,739388452,585574674,-853532111,237013280,1275069906,-1996181488,76025376,-1173328896,1394641668,1280331073,539251525,572581608,575882585,-1994339040,79957536,-1089437440,546110980,1296126754,1397050448,-400806878,277544963,546112708]},{"sector":7,"length":512,"data":[376334,80613521,279576705,546243800,1095573549,1327517257,1330205776,1162682446,-721398450,-1090199024,739184416,985676305,739319999,546388504,1330454562,1095193682,1092633927,1498169678,542329171,284491810,549389548,288100111,337693242,-1858465236,1347363360,1313818964,539828307,287244322,546374902,757084450,1380928800,1195460436,1095770181,1313164633,1329799252,1380012109,1313821513,2236499,83890497,841097361,1293954336,1196708431,541411137,1380928833,1096436052,1313818964,290979874,546374922,1129530658,1497713440,1159736608,575949144,336683520,572559621,-1929371104,-1861935599,1347363360,1313818964,1297436192,542262594,841756968,1380917292,1129530656,1027416105,1044200765,297336866,546374952,1414483490,1344289349,1397966162,1162368032,1414415648,1260409413,1461737797,542000456,1162760004,297992226,546374962,2236450,87822798,252649663,-285208276,-1861925359,680984352,-383133169,621750486,680984364,690603023,680984553,2735887,89133611,-1761664879,699600680,538977001,1414680397,1162297671,1497452576,1414415693,1297040160,1230127440,1397641043,538976288,572530720,680984553,2732815,89789031,-1761664879,699600680,538977001,539828256,541414229,1397311572,1414549280,542003017,1126190932,1095781711,538985810,572530720,680984553,2732815,90444451,-1761664879,699600680,538977001,538976288,541411412,1414418253,542723144]},{"sector":8,"length":512,"data":[1297695056,1398033989,541478688,538976288,572530720,680984553,2732815,91099871,-1761664879,699600680,538977001,538976288,1414680397,1162297671,1413554259,1380013600,1398099785,1413567008,538989381,572530720,680984553,2732815,91755291,-1761664879,699600680,538977001,538976288,541347393,1313428048,1095780675,1296113740,1414419791,538979923,538976288,572530720,680984553,2732815,92410711,-1761664879,699600680,538977001,1414680397,1162297671,1330463008,1514755154,1330205761,538976334,538976288,538976288,572530720,680984553,2732815,93066131,-1761664879,699600680,538977001,539828256,541414229,1397311572,1414549280,542003017,1126190932,1430473793,1163149644,572530720,680984553,2732815,93721551,-1761664879,699600680,538977001,538976288,541411412,1313428048,1095780675,1312890956,1313415236,1163019604,538989651,572530720,680984553,2732815,94376971,-1761664879,699600680,538977001,538976288,1145651536,1163284256,1312890962,842080345,1313819936,1344292948,1330205253,572534340,680984553,2732815,95032364,-1761664879,700452648,254334697,-1761661915,700714792,-1761613527,702091048,-1273738752,287358725,-902162388,254548256,546388517,975314978,739844298,1811948815,1225110804,987686692,608772235,539108071,-1257365299,-1590026235,1226871072,-1908786396,-1105954048,253804293,974203919,8469184,96998586,-417315248,-347717344]}]],[[{"sector":1,"length":512,"data":[-330935768,7976,0,686457088,31,0,673770625,31,0,1179838849,1179577641,690563369,-687829446,-1895443948,1830825248,1735684719,543516513,1886220131,1936290401,7564911,98309396,252649663,-1069936340,287358778,-1858463700,1293951520,1196708431,541411137,1297695056,542395973,1347243843,1397314113,1344294479,1380405074,572542273,-434821632,253807109,974269450,252649663,1191186732,-1861881835,680984352,-383133169,621750486,680984364,690603023,680984553,2735887,100275587,-1761664879,699600680,538977001,1414680397,1162297671,1497452576,1414415693,1297040160,1230127440,1397641043,538976288,572530720,680984553,2732815,100931007,-1761664879,699600680,538977001,539828256,541414229,1397311572,1414549280,542003017,1126190932,1095781711,538985810,572530720,680984553,2732815,101586427,-1761664879,699600680,538977001,538976288,541411412,1414418253,542723144,1297695056,1398033989,541478688,538976288,572530720,680984553,2732815,102241847,-1761664879,699600680,538977001,538976288,1414680397,1162297671,1413554259,1380013600,1398099785,1413567008,538989381,572530720,680984553,2732815,102897267,-1761664879,699600680,538977001,538976288,541347393,1313428048,1095780675,1296113740,1414419791,538979923,538976288,572530720,680984553,2732815,103552687,-1761664879,699600680,538977001,538976288]},{"sector":2,"length":512,"data":[538976288,538976288,538976288,538976288,538976288,538976288,538976288,572530720,680984553,2732815,104208107,-1761664879,699600680,538977001,1163153230,1330913338,1279611680,542393157,1096163393,541414732,1092637263,1314213709,572530772,680984553,2732815,104863527,-1761664879,699600680,538977001,538976288,1163152965,1213472850,1346445381,1347375696,1413564754,1096163397,541414732,572530720,680984553,2732815,105518947,-1761664879,699600680,538977001,538976288,541347393,1397051984,1213472851,1313153093,542262612,777602379,538976288,572530720,680984553,2732815,106174340,-1761664879,700452648,254334697,-1761661915,700714792,-1761613527,702091048,1578612736,337693190,-1338371540,572556576,1163152965,1094852690,1293960531,1196708431,541411137,1431260481,1025528910,540949821,608254754,1746393088,-417316602,680853280,975774785,541139083,287369192,-1994339040,104861216,1914169088,1313423622,552017987,512028,108795897,739582154,546388498,690360274,404357179,550110854,974269462,673325201,1330913329,540357408,1129465168,693390917,1325415202,-905539560,304878880,-2061455302,1313153568,542262612,1163084098,1414416672,1397051973,1095901268,1025525076,1027423549,992092222,2380361,110762103,-417312183,680853280,690246217,1226869562,588244562,1226895136,538110034,545857741,424974,111417494,552018002,485249609,1379534000]},{"sector":3,"length":512,"data":[541281865,169681127,-327670825,-1476391921,-905531880,304879136,-769617606,992552463,-1206335744,388024838,-1858465236,824713760,542069792,1495282995,1397899589,3875369,113383675,739647690,548420114,1159864453,1380275278,1297436192,542262594,1495287375,1397899589,542001440,541545549,572538429,2382139,114039050,552018009,1495831807,419440932,1309070873,1495328544,253815584,421789708,1179518688,1310779168,-367443968,1310755590,-1541609914,552542209,317212238,-1994339040,112070176,-199670272,2063646726,-1090060775,405541152,572559674,1313819936,1498171476,1380928800,1195460436,1095770181,1313164633,1329799252,1380012109,1313821513,2236499,117971377,252649663,-902164180,254546976,546388490,585704537,1095063853,1330454610,1095193682,1277183303,541999439,1431260481,575886414,432799803,550110994,974334998,1377968273,1397052481,-1086702814,405541152,471457536,1226867207,287368992,1126222880,5459023,119937544,739582154,-347477734,546388505,975771858,739582154,-347477734,546388505,-347477695,1129204033,807014400,1226867463,974790912,1226867207,287368992,253807648,440074254,550111044,743041303,546388498,975771858,-384360246,1256521,122559085,550969489,774054690,992092963,673744383,686379560,1230170953,690570062,1610620395,-383151766,29,267135360,443875428,545458008,444596297,549390178,288100111,1813680384,1226867207]},{"sector":4,"length":512,"data":[287368992,253807648,447610894,1179780982,1377888032,1391151593,977489481,317146689,237014330,-1056963128,-2113437670,-417314272,-870313696,1280262944,451870803,542115722,1179656423,-381605653,1229056842,975782734,552018000,673744383,203286864,695804887,694423531,6557676,126819116,-430956405,539430940,550117581,304879119,572559674,1297695056,1398033989,1330598944,1380011040,1411401031,1229201487,1095520339,-1992678823,129764896,-1810150144,388024839,439110121,434850537,-685731526,589505056,590226211,1346052643,458555451,545458078,459079754,545458088,459735113,546375602,2236450,129768332,1344413841,1397966162,1095783200,1109411139,1411404353,1329799247,1313428558,992101717,-971267328,-568292601,552003616,539107362,545857741,509454,131079085,-2012340087,466288644,546244570,1869422637,1634169970,1629513063,1953656685,1952545385,7237481,132389845,739778751,467337233,12584942,133700581,739319999,468647960,550111234,1190930,135011351,539107473,1414680397,1162297671,1330463008,1514755154,1330205761,1380982862,1095911247,2236493,135666729,168763594,-1086713300,739184416,474611729,546375712,254318335,-689362470,740626216,254318335,-383178300,254318335,-2046809665,-1861735908,680984352,-383143153,1293951010,1196708431,541411137,1380928833,1096436052,1313818964,538976288,538976288,538976288,-383639520,254318335,-1040176717]},{"sector":5,"length":512,"data":[-1861733348,680984352,-383143153,538976290,1428172064,1411401043,542329160,1230262351,1411403343,1094918223,1280656204,541414465,-383639520,254318335,-33543757,-1861730788,680984352,-383143153,538976290,1411391520,1344292168,1129204050,1279348809,1145979168,1414416672,1397051973,538976340,-383639520,254318335,973089203,-1861728227,680984352,-383143153,538976290,1344282656,541346113,1380275791,1498300704,540160288,1414418253,1162879048,1146046802,-383639506,254318335,1979722163,-1861725667,680984352,-383143153,538976290,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,-383639520,254318335,-1308612173,-1861723107,680984352,-383143153,1310728226,977622095,542069792,1162626387,1092637763,1279350304,1327514965,1296113746,1414419791,-383639520,254318335,-301979213,-1861720547,680984352,-383143153,538976290,1159733280,1380275278,1162368032,1347436832,1380994898,1163149641,1279350304,538985813,-383639520,254318335,704653747,-1861717986,680984352,-383143153,538976290,1092624416,1344291918,1397966162,1162368032,1414415648,1260409413,539908421,538976288,-383639520,254318335,1258301875,-1861715426,680984352,-383139825,621750486,680984364,690603023,680984553,2742543,142876245,739516618,511574034,548407438,1159864453,1380275278,1380928800,1195460436,1296113733,1414419791,1027423520,992092222,-1912593343,1091082270,552017990]},{"sector":6,"length":512,"data":[1093178623,-1744819932,-905403874,304878880,-1407268864,572559624,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,992092192,-1239494144,371247624,-318762452,-1861697506,824713760,542069792,1344288051,1162039877,573133902,519503931,550111434,1190933,148119329,545595568,1414415650,1226854981,1380275278,542397253,1163149650,1027423520,540949821,1380530978,523370532,1380518110,-14620896,1380526228,1174415652,-1962350561,-430814944,-853531889,237013280,1493174434,-1962348001,-397260512,550314002,-1576132471,526974984,1179781372,1226893088,-1340281774,527630340,550111494,1190934,152051619,539107473,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,3875360,152706989,739713226,533069842,546375972,540092450,857755476,1163468853,693326401,-805291230,-905368033,304879136,941619456,-2061455351,1313153568,542262612,1112364366,1327518277,1163468870,542331457,1044200765,1497047584,537395236,542705986,-1795219225,690247976,1277171712,541478409,542712039,202318059,1444949248,1310755593,-1541609914,550313985,101589129,541065225,545982816,317212238,-1994339040,151391776,1780500992,237014281,1744831944,1342796832,552017990,673744383,501827152,2032391948,1678764841,1678765097,2116062720,572559625,1414418253,542723144,1297695056,1398033989,1163018528,1027423520]},{"sector":7,"length":512,"data":[992099901,-1728035248,-1089895648,739708704,549060625,546376072,1279345442,1095521603,1196312916,1330463008,1514755154,1330205761,-989846962,-1089893088,739184416,551092241,545982866,266749518,550314020,-1509023607,552534025,545393052,552017993,550248466,973334556,4792451,161882371,1380928833,739321940,-417322734,4604192,162537748,541663362,538058983,1179525324,-1172224256,1330462985,1227379794,539562796,-2046877465,1296115752,676614735,739437129,1391143186,203286854,695804887,694423531,6557676,163848563,1380928833,742991956,-417322734,1330463008,1227379794,304878314,1179707945,1330463209,1227379794,2691884,164503931,4792451,165159326,541663362,538452199,420421836,1226885690,-1858465236,655348256,-2093335767,-1476376288,-905321951,304880160,-333332736,572559625,824192288,575624224,680787945,2704974,167125473,539107473,540024877,1159745364,1092633678,1414680397,1413569097,575557449,569049147,550111744,1190936,168436242,1159864465,1380275278,1195721248,1229868617,1344292686,1162697025,1310741582,1161973077,1073750610,-1341516766,572556576,824198735,1330454578,541611086,1230128464,1025524815,1027423549,572538429,1380274235,608456521,505566208,-414953462,680853280,1230128464,690242639,673344000,1344310026,-420995004,-853536480,237013280,-2030040516,-1962266078,1380274208,608456521,552003616,539111458,545857741,655374]},{"sector":8,"length":512,"data":[171713178,1146101899,-853536281,237013280,-1375730552,-1962260958,-431730656,-853522866,237013280,-1056962048,-1962258398,-398176224,550314001,925833,583729162,550111834,1190936,174334678,265429137,-520083161,-1861587422,655348256,585826345,550111864,1190938,176300825,1344413841,1414417753,1230131232,1346978638,538987585,1414416672,1397051973,538976340,1279345184,1162038849,589692962,1230244492,-417311666,989860128,-2113235421,-417314528,541347872,1146101964,724969,177677135,-431415157,541478432,545857741,704014,178266988,1414416724,1411442464,542395977,1296113897,676614735,689122377,-1440514560,-685731574,589505056,992092195,-1207944375,-1861569501,572577568,589504544,589505315,572728110,-364490693,1380928833,742991956,1094396179,1414680397,321669416,1296120617,676614735,689056841,-1104953344,1226867466,-937178624,572559626,-318758368,-1861561821,1313415712,1163019604,1176523859,824201807,1162879026,1146046802,574431315,604438587,546376412,589439191,589505315,589508131,1413161504,5525065,182854674,420421834,922751532,-1861554140,1380983328,542331717,1128353875,1094852677,1330913362,1313817376,1431193940,3875397,184165441,741089482,609681425,545983236,-420994850,539107872,545857741,721934,185476196,608456003,-568269024,405044480,1126206219,539247693,539107559,550314018,-670162807,613941257,545983266,608456003]}]],[[{"sector":1,"length":512,"data":[-1761614048,689639208,-1994339040,79302176,740598272,237013259,2830,1092229632,1330913362,1313817376,1431193940,3875397,184165441,741089482,609681425,545983236,-420994850,539107872,545857741,721934,185476196,608456003,-568269024,405044480,1126206219,539247693,539107559,550314018,-670162807,613941257,545983266,608456003,1397051973,538976340,1279345184,1162038849,589692962,1230244492,-417311666,989860128,-2113235421,-417314528,541347872,1146101964,724969,177677135,-431415157,541478432,545857741,704014,178266988,1414416724,1411442464,542395977,1296113897,676614735,689122377,-1440514560,-685731574,589505056,992092195,-1207944375,-1861569501,572577568,589504544,589505315,572728110,-364490693,1380928833,742991956,1094396179,1414680397,321669416,1296120617,676614735,689056841,-1104953344,1226867466,-937178624,572559626,-318758368,-1861561821,1313415712,1163019604,1176523859,824201807,1162879026,1146046802,574431315,604438587,546376412,589439191,589505315,589508131,1413161504,5525065,182854674,420421834,922751532,-1861554140,1380983328,542331717,1128353875,1094852677,1330913362,1313817376,1431193940,3875397,184165441,741089482,609681425,545983236,-420994850,539107872,545857741,721934,185476196,608456003,-568269024,405044480,1126206219,539247693,539107559,550314018,-670162807,613941257,545983266,608456003]},{"sector":2,"length":512,"data":[-1408454145,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1819231008,1633841775,215941234,546243510,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,3225657,62917905,1766596751,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,221577293,546243530,1752462657,757101167,1701594912,1394634350,1918989684,1631854708,1667851378,222756971,546767823,977749331,253794336,1125482,64228696,1347240275,-417053364,575622690,-569548288,237013251,1946158066,1392764941,1280331073,585573445,575882585,-233988352,-585053949,287361082,-1086713300,739184416,547371537,-1069930481,371247674,974327596,1226973329,2248002,66850242,739778762,288099343,572559674,1936876880,1818324591,1836008224,1702131056,-285203854,-1090255347,738856736,550124049,439093775,-1858465492,680984352,-383134449,353315030,701304620,680984553,2734095,68161060,185540810,288102956,-14642886,-1290852202,539158825,538976288,1329799200,1112690508,538989121,538976288,-1761613534,699600680,437144064,253807108,739912716,546388497,254318335,-689362509,739577640,-383180785,254318335,2130717107,-905698290,739053344,974203930,-1761664879,699600680,538977001,1700143136,1869181810,774971502,538980400,572530720,680984553,2732815,70127269,235872458]},{"sector":3,"length":512,"pattern":538976288,"data":[288102956,-14642886,-737204074,685173033,254547215,-1496627,-1106302826,249102377,549389368,288100111,253807162,739781649,546388497,692267042,1886339872,1734963833,1226863720,1126190402,544240239,825768241,252510242,549389378,288099855,253807162,739781655,546388497,1701990434,1931506547,1701011824,1918984736,544175136,1953394531,1702194793,253952034,545981516,-420994850,539107872,545857741,281614,72748848,608456003,-568269024,1611614464,1126206212,539247693,539107559,550314018,2114855049,258277380,545981546,608456003,-14620896,453978262,550314025,-770826103,258932741,545850484,284174,75370363,739778751,12597777,76025731,14491849,76681101,739320008,261488658,547357852,-1610602481,-1090214385,288100640,-1341151744,-1241464828,-2113619441,-417314528,-870313696,-989849568,-2113616881,333924896,253807648,265486347,550110414,-347526070,1239318,81268725,742990015,546388553,254318335,-12899877,-619763562,-1761658071,702222120,268238907,545457378,268763210,545457388,269484105,550110454,304876559,1055488,253804293,1125391,84545612,1646403729,538995564,1702194274,1852991264,2036539424,1914728033,538993765,543646061,1852989984,1768453920,992109940,336615168,253807109,1190925,85856354,252649663,-1828712148,-1861933040,538976800]},{"sector":4,"length":512,"data":[538976288,538976288,3875360,87167139,541663362,537993447,1581260,87822515,-414572414,-870314481,1445664,88477889,743055562,-384373943,283574290,549389648,739895625,974776649,-1761664879,702222120,680984379,992598799,254318335,3877339,89788655,4857987,90444023,4792451,91099394,386867402,218108460,-1090160623,739184416,289210385,546375042,1918985250,1735139435,1814066280,544499815,1952999276,1751608352,1735139444,2032170088,538995813,578055785,290062395,550110604,304879631,1426067756,-1090152943,739184416,293994513,546375072,1701996322,1818370169,1730176373,538996338,1851881827,1684369952,1634541600,538976359,1998594080,1702127976,-1879033054,-905598447,304878112,-1273909504,572559621,1936028240,1397039219,1701519427,1869881465,1769497888,3875444,96342470,-388095861,680984550,-852944113,237013280,-738196034,973457425,1162140047,1163150668,-770581504,287361029,-602806784,404799237,-335539924,-1073355247,-267250944,1394641669,1280331073,585573445,575882585,-31404768,1394745484,1280331073,740447045,256028,437911552,1936028240,1397039219,1701519427,1869881465,1769497888,3875444,96342470,-388095861,680984550,-852944113,237013280,-738196034,973457425,1162140047,1163150668,-770581504,287361029,-602806784,404799237,-335539924,-1073355247,-267250944,1394641669,1280331073,585573445,575882585,-31404768,1394745484]},{"sector":5,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1277307954,1967333473,1634885987,543254627,1699553325,1633905016,1866866798,1394633580,577203823,808651277,1142960180,541152321,824980020,824979500,741487660,741354545,842279985,808202540,875311404,741420087,741682224,824979765,858533932,741487660,741354545,842279985,808202540,168636716,808792115,1413563424,842276929,808202540,875311404,741420087,741682224,824979765,892088364,741356332,741354545,808660017,808202540,858534188,741420085,741551152,824981300,824979500,808651277,1142960182,541152321,824981300,824979500,741749804,741354545,909388849,808202540,875311404,741420084,741420080,824980532,824979500,741487660,741354552,842279986,808202540,168636716,808923187,1413563424,842276929,808202540,875311404,741420082,741420080,824981044,892088364,741946412,741354545,842279987,808202540,875311404,741420082,741420080,824980020,824979500,808651277,1142960184,541152321,824981044]},{"sector":6,"length":512,"data":[892088364,741946412,741354545,926100533,808202540,858534188,741420087,741420080,824979507,858533932,741618988,909454386,892088876,741485620,841757237,808651277,1142960185,541152321,841756981,741946412,926166066,168638508,808464691,1413563424,825040961,221326636,824973834,824979500,808651277,1142960184,541152321,824981044,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1277307954,1967333473,1634885987,543254627,1699553325,1633905016,1866866798,1394633580,577203823,808651277,1142960180,541152321,824980020,824979500,741487660,741354545,842279985,808202540,875311404,741420087,741682224,824979765,858533932,741487660,741354545,842279985,808202540,168636716,808792115,1413563424,842276929,808202540,875311404,741420087,741682224,824979765,892088364,741356332,741354545,808660017,808202540,858534188,741420085,741551152,824981300,824979500,808651277,1142960182,541152321,824981300,824979500,741749804,741354545,909388849,808202540,875311404,741420084,741420080,824980532,824979500,741487660,741354552,842279986,808202540,168636716,808923187,1413563424,842276929,808202540,875311404,741420082,741420080,824981044,892088364,741946412,741354545,842279987,808202540,875311404,741420082,741420080,824980020,824979500,808651277,1142960184,541152321,824981044]},{"sector":7,"length":512,"data":[-1408454145,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1818313504,1633971813,215941234,546243510,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,3225657,62917905,1766596751,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,220397645,546767823,977749331,253794336,1125482,64228661,1347240275,609437004,1330520807,222232610,545850334,258574,65539412,1347240275,609437004,572581664,575882585,-233996032,-585053949,287361082,-1086713300,739184416,974203921,672080032,-902119366,254547488,546388499,1296189730,228851746,550110204,202320920,-1858465492,1699750432,1852797810,1126198369,1970302319,577922420,101568768,253804292,974203914,168763594,288102956,-14642886,-720426858,685173033,254547215,-1496627,-1206966122,235274281,550110224,439094031,-1858465492,680984352,-383143153,538976290,1126178848,1313164353,542261572,538976288,-383639520,254318335,738208179,-905700850,738987808,974203930,-1761664879,699600680,254334697,537865237,-1761613527,699600680,604922112,253807108,739912717,546388497,254318335,585705907,538976288,1936876886,544108393,808463921,538976288,-1498592,-1290852202,243728425,550110254,439094799,-1858465492,680984352,-383134705,353315030,701304620,680984553,2735631]},{"sector":8,"length":512,"data":[70782651,252649663,-902164180,739315488,974203928,673325201,1126181187,1920561263,1952999273,1296189728,1919894304,959520880,2240824,71438063,235872447,-902164180,739708704,974203928,1344413841,1936942450,1634759456,1646290275,1948283489,1868767343,1852404846,2254197,72093445,551428235,572581608,550314018,1275994249,252837892,1296237654,-417323964,721477152,-1962647537,1145914144,552017956,539107362,545857741,294414,74059591,1296244875,-417323964,680984352,539564815,545857741,586254,74714961,1443766409,257818628,549389438,288100111,-1946107846,-2046523377,673467680,740889359,1414418253,321397832,689114924,1095650604,673465677,740887567,1398358340,688656168,-1508916736,1095650564,673465677,-417322734,1243619872,1096109633,572545362,1293957664,1162690894,689121316,572581664,1380074822,1498562901,-134208992,1292155407,1162690894,689186852,572581664,1095573536,541606738,975184416,1095650592,673465677,-417322731,538976800,1230131265,572530764,-837800448,1095650564,673465677,-417322730,538976800,1497451808,572530720,1293957664,1162690894,689383460,572581664,1430921248,538985806,1677730336,1292165648,1162690894,689448996,572581664,1430921248,538990924,975184416,1095650592,673465677,-417322727,1092624928,1398097749,572530772,-166684160,1095650564,673465677,-417322726,1163076128,1296389200,575817026,1293957664,1162690894]}]],[[{"sector":1,"length":512,"data":[168765476,572581673,1413697312,1380270671,-805297632,1292175888,1162690894,185542692,572581673,1448037920,1161973061,975184466,1095650592,673465677,-416740337,1162093088,1112360259,572543557,672208384,1497449477,539500627,-417322734,538906400,1094983738,673207129,539562784,470753511,1142962720,542333249,689184808,253814560,540680223,1398358340,354428960,552017961,1543511567,1141193745,542333249,689315880,253814560,540680223,1398358340,387983392,552017961,975183375,1497449504,539500627,-417322728,538906400,1094983738,673207129,539564320,521085159,1343332864,1497449477,539500627,-417322726,538840864,1094983738,673207129,539560463,521085159,1142962720,542333249,688590632,253814560,540680222,1398358340,202319904,552017961,-1308614897,-2046467055,1095063840,254301010,-134207212,1493528081,1397899589,304097312,552017961,540680213,1380009305,539500627,-417322733,975181344,1095063840,673207122,539563040,538386663,1163468858,542331457,689250344,287368992,-2112733696,1095063813,673207122,539563552,538124519,1163468858,542331457,689381416,337700640,1495284256,1397899589,404760608,552017961,540680213,1380009305,539500627,-417322727,1358960160,1493538322,1397899589,438315040,552017961,309133329,609027488,539562536,-1761664793,700452648,254334697,-804312029,313786409,609486250,572581664,538976288,-1761613534,701108008,1293957664]},{"sector":2,"length":512,"data":[689121316,680984551,-383137265,1424565332,609544484,-383494935,1424565332,609544484,673467706,1306994964,689121316,-938283008,539251717,685121767,-804312043,-1761613527,702156584,1293957664,689252388,680984551,-383137265,1424565332,609544484,-383494935,1424565332,609544484,-602729216,1226867205,371255072,253807648,609040915,539576616,609034471,350898472,545471017,320798793,550110711,1190932,100143926,1159864465,1380275278,1411395616,1313153103,1358963268,-1861879533,1213473312,1380982853,1095911247,975318605,739385546,326828050,548406778,1159864453,1380275278,1095063840,824713298,758200377,959985969,1027416105,992092222,2380377,100930457,1381572747,807593764,538976290,539020576,538976288,-233955191,330760200,545981966,-417050023,943272226,-853532111,-414033632,545864210,442894,102241237,1381572747,824370980,573716537,1495321888,974382930,-1039261559,334692358,545981986,-417050023,943272226,-853532109,-414033632,545864212,442894,103552017,1381572747,824370980,573847609,1495321888,974514002,-1039261559,338624518,545982006,-417050023,943272226,-853532107,-414033632,545864214,442894,104862797,1381572747,824370980,573978681,1495321888,974645074,-1039261559,342556678,545982026,-417050023,943272226,-853532105,-414033632,545864216,442894,106173577,1381572747,824370980,574109753,1495321888,974776146,-1039261559]},{"sector":3,"length":512,"data":[346488838,545982046,-417050023,943272226,-853532103,-414033632,545864218,442894,107484336,572661905,1913966080,572559622,1380009305,1398099232,1161961556,1310736672,1161973077,-385867182,-1861845996,1380327968,824200527,540096569,824201044,775501881,351404066,546375302,151003682,-1861840875,1313153568,542262612,1330913328,1145980192,354287650,546375322,1162368034,1330794528,1296126535,654320174,-1861835755,2236960,112071984,572661905,-1206568448,237013254,1275069946,1493615125,1495328544,1397899589,693262632,-871012352,1495304966,552018002,537378844,1094983885,321409881,487581481,-703233024,1495304966,552018002,537379868,1094983885,321409881,487581481,-367686400,572559622,364380194,546375412,1397706786,1330205769,1095770190,542262608,541347393,1397051984,1347625043,541410113,575816002,-32121088,572559622,1313163351,1162368032,1296189728,1380274208,1095651155,1329799244,1414877261,2249285,117970424,1344413841,1414416722,1226854981,1163010131,576275521,303431936,572559623,369754146,546375452,536879650,-1962465770,-400499168,572661990,-1994339040,119934496,806759680,1145914119,552017956,373686494,545982266,608456003,572581664,-853532128,237013280,1644169048,-1962458090,1145914144,552017956,254318335,-853530341,237013280,1811941618,-1996009962,120589856,1477876992,572559623,1313428048,1196312916,1279345440,1094995525,1329995858]},{"sector":4,"length":512,"data":[1213472850,1163468869,539775553,1381579554,740440868,381681698,546375522,1163022370,1411404627,1159742792,1260405587,1411406149,1480925263,573461577,1813434368,1344307719,287368992,320916512,1981210112,-14639865,252651670,285227817,-1660452841,538976800,538976288,1126703136,1329799209,1230133584,542394439,541934153,1347571523,1413567055,542003017,825768241,387907618,547161994,254318335,3877138,127145787,1263739010,317149257,304139296,572693818,1394639674,5261643,127801175,-1761664867,688787240,680984379,992549647,254318335,3877189,128456582,539107485,1411391520,1226851656,1344294210,1330860613,541868366,1347243843,1380275285,1279345440,1094995525,-1577049518,-1660440041,680984352,992546319,254318335,-12900069,1158621334,-1006617815,-1660437481,538976800,538976288,538976288,538976288,538976288,-1139000542,1381624071,-971513856,1394639367,-414168757,550248466,580729363,545471010,1346980691,-803733504,1293976071,673244960,-347018990,-870307563,-384554976,689302352,320917280,-635954176,1394639367,-414168757,550248466,580729363,545471010,1346980691,-468174848,-14639865,235874454,-1761658071,689639208,680984379,992560399,-300389632,572562695,538976288,572530720,1095650619,673465677,574302541,538976288,538976288,992092192,1296125517,1294476357,2691817,133699712,-1761664867,689639208,680984379,992560655,35164416,1226867208]},{"sector":5,"length":512,"data":[304146208,253807648,413728787,1330448396,608719950,1227625000,552017961,1227367501,415301673,1330448406,608719950,1227625256,552017961,1227367501,415825961,545458208,417661001,545392682,1346980691,-870313241,-1657138656,-2093342174,1229673248,419102800,545392692,552017994,550248466,1398358340,2706728,138287393,552017995,1256806696,539562730,974659827,552017996,673744383,-364189351,418130194,424607785,-2080438200,1313819944,673466452,-384619502,689236812,1273565996,539563755,-2080431897,680787752,321661258,2691884,139598167,4857987,140253557,552018009,686381352,1398358340,539577640,689447155,552804393,428671000,545392742,552017994,550248466,1398358340,317279528,431161385,541788272,1495802087,317344489,552804393,541866520,-2046877465,-380032984,689105482,2693356,142219745,1294500863,1213484623,739452964,-347281133,321661204,384519145,552017961,-14121985,692725907,321655596,434700329,545458308,436797514,542705806,1495802087,1094985961,1294488409,539562729,689447155,552804393,442499096,547162264,538976290,1394614304,538988117,542003021,1163220000,1163337760,1411391556,538989896,541676102,1413567264,538976288,1431511072,1293951054,538988111,541414740,1145394976,1213472800,1176510549,538986834,575947091,-1575315456,1226867208,304146208,253807648,547174931,538976290,1295720992,1213484623,739387428,574302537]},{"sector":6,"length":512,"data":[572530720,1313819963,673466452,692661267,-1239764736,-568292600,-14620896,453978262,550314025,-233955191,448331784,545458368,450560073,545392842,1346980691,-870313241,-1657137888,-2093342174,1229673248,540680272,5054595,148773629,1263739010,317149257,354470944,572693818,1394639674,542132555,545464378,455540816,545982706,1347240275,609437004,572581664,575882585,-31404768,1394745484,1280331073,740447045,256028,150739767,974201032,739778751,12597777,437911552,545392842,1346980691,-870313241,-1657137888,-2093342174,1229673248,540680272,5054595,148773629,1263739010,317149257,354470944,572693818,1394639674,542132555,545464378,455540816,545982706,1347240275,317279528,431161385,541788272,1495802087,317344489,552804393,541866520,-2046877465,-380032984,689105482,2693356,142219745,1294500863,1213484623,739452964,-347281133,321661204,384519145,552017961,-14121985,692725907,321655596,434700329,545458308,436797514,542705806,1495802087,1094985961,1294488409,539562729,689447155,552804393,442499096,547162264,538976290,1394614304,538988117,542003021,1163220000,1163337760,1411391556,538989896,541676102,1413567264,538976288,1431511072,1293951054,538988111,541414740,1145394976,1213472800,1176510549,538986834,575947091,-1575315456,1226867208,304146208,253807648,547174931,538976290,1295720992,1213484623,739387428,574302537]},{"sector":7,"length":512,"data":[-1408382977,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1937067296,-184523927,-1895582195,1919243808,1852795251,808333600,1126703152,1886339881,1734963833,1226863720,1126190402,544240239,825768241,-1072814336,1277202179,1852138345,543450483,1702125901,1818323314,1344285984,1919381362,1344302433,1701867378,544830578,1226860143,956321090,-1761358066,1195725600,546840634,288123407,-737260288,1296126723,1397050448,552017956,575622690,-569485568,237013251,1811940338,1392764942,1280331073,539251525,1495408871,2249541,66195097,987570377,739320008,549403154,288100111,-1606807252,975703840,550124224,319761430,572559674,575488585,-66143232,404802051,738987820,546388497,1919242274,1634627443,1866670188,1953853549,2257509,67505897,168763583,-902164180,738856736,974203930,-1761664879,701828904,254334697,-854643691,-1761613527,699928360,269426176,253807108,739912715,546388497,254318335,585705907,538976288,538976288,1230198093,538976323,538976288,-1498592,-1290852202,256114729,550110234,439094287,-1858465492,680984352,-383143153,353315030,689966892,680984553,2732815,69472121,219095242,288102956,-14642886,-1290852202,539158825,1444945952,1769173605,824209007,540028974,538976288,-1761613534,699600680,772775680,253807108,739912718,546388497,254318335,-689362476,739577640,-383136497,254318335,-754964034]},{"sector":8,"length":512,"data":[-1090242545,739184416,550124049,405541135,-1858465492,1126703648,1866670121,1769109872,544499815,541934153,1886547779,943272224,117449265,-1090239984,739118880,550124049,405542671,-1858465492,1917854240,544437093,1667330163,1633820773,1869881458,1852793632,1970170228,486548069,-1962652656,-400499168,572661990,-1994339040,72093216,1443899904,1145914116,552017956,272761054,545981536,608456003,572581664,550314018,1443766409,274595844,545981546,608456003,-14620896,453978262,550314025,974004361,276299783,545981556,608456003,552003616,539107362,545857741,284174,74780806,547823765,2081300617,278003716,-1812069258,1718428192,278659106,545850487,294158,75239590,2098077864,280231940,546636925,545857703,14,75370702,739320008,547371538,-1086707697,739184416,974269458,284885184,550110344,405540623,-1858465492,757080608,757935405,1931488557,1667591269,1852795252,757932147,757935405,671097389,-905670127,739249952,974203928,539107473,1095576897,541606738,1210926368,1380928853,759767072,1430995283,2244946,77336917,286204106,288102444,572559674,1395474976,1397899604,759570464,541545794,1243619360,1431061037,572530757,-1508802048,253807108,739781650,546388497,759373858,1414680390,1193287769,1347375149,538976288,1129524555,1397050433,296943650,550110375,405541647,-1858465492,1142956576,1413564461,538976288,1094987080]}]],[[{"sector":1,"length":512,"data":[542721102,1129530656,1497713440,1230521645,-1107287468,-1090211823,739184416,299302929,545391802,538044233,252649676,1243644474,-870313497,-100656864,-905657327,1256789536,1240012332,288101355,-14642886,-619763562,-1761658071,702353192,302383163,545457358,545471050,304021577,545391832,538044233,202318028,1243644474,-870313497,1140856096,-1962614254,333924640,1226895136,-283109401,451365152,1226895136,537726951,545857741,325134,82580069,-384425782,-384226230,974383945,-1761664879,689966888,680984379,992599567,-166563584,1243644676,1226867514,1212160,1243644421,-870313497,-1426056672,-905639406,1256789280,-1086712532,288101664,-14642886,-586209130,-902153431,1256789280,975441708,252649663,-922742484,-1861938158,680984352,992599311,354467642,-1858465236,680984352,992599311,504549632,1243644677,672325888,354467589,-902163924,355210528,840105472,1226867205,-870313497,975179552,-1761664879,702222120,545471035,320012361,546374972,254318335,976955869,219095242,805311788,-2113583597,300370208,253807648,546388512,254318335,976955867,4792451,89133916,-1761664879,702353192,549403195,974662673,743252141,743386190,545667664,1477388365,676277289,2704911,89789326,-414637950,550248472,1295669263,539576616,488644839,-2045562061,-317511445,267129384,-316069620,401230120,545471017,329973833,545391972,538044233,974594252,692660301]},{"sector":2,"length":512,"data":[471918368,-2093318145,-1207940832,1325755923,539562280,1122535,91755484,655304783,974579497,672081999,974710569,688859215,974776105,705636431,1763113,92410884,722413647,168814377,254299962,266807596,676280843,-416731889,1329204495,690884392,921575,93066284,789522511,252700457,254299962,266807600,676280848,-416730865,1329205519,691146536,1183719,93721684,856631375,319809321,254299962,266807604,676280853,-416729841,1329206799,691408680,1511399,94377084,923740239,403695401,254299962,266807608,676280857,-416728817,1329208079,691670824,1839079,95032484,990849103,487581481,254299962,266807612,676280862,-416727793,1329209103,691932968,2101223,95687884,1057957967,554690345,254299962,266807616,676280867,-416726769,1329210383,692195112,2428903,96343284,1125066831,638576425,254299962,266807620,676280871,-416725745,1329211407,692457256,2756583,96998654,1577984137,352845830,545719762,4926538,98309415,608456003,-568269024,1126206266,-417053619,-853532126,237013280,1023411716,-1962547691,1145914144,-1761614044,689639208,-1910452960,-267040768,253794309,1125482,100275534,358613135,545981956,552017994,538972906,9314509,101586285,552018001,692725839,404064000,1243646726,541069286,-397795089,-853530865,237013280,-1107294666,-1962532331,371771424,-399945428,538972134,549396685,974662673]},{"sector":3,"length":512,"data":[185540810,-1858449108,680984352,992546319,253804346,974203919,906895497,366936070,549389868,288100111,404802106,-1858449108,680984352,992546319,287358778,452991020,-1006225898,1244155168,978005033,-414572405,552476689,538109771,545857741,973488142,1406766906,542132555,1415071054,1380927008,1096045344,1413563203,654331732,-1006224618,2147425312,1090523692,-1962524650,266750496,552542272,655353930,-1994339040,97652256,1242984960,-937391354,1361843752,552017961,-853532657,253804320,974203919,739778762,546388561,254318335,976955680,-770826103,378798085,549389908,288100111,253807162,978398219,-1761664879,702222120,545864251,381454,106829509,353312970,-1858464212,538976800,538976288,538976288,538976288,538976288,538976288,538976288,538976288,992092192,1746331904,253807110,974531605,1159864465,1380275278,1279611680,1230259013,1025527375,992099901,1914109696,-568292602,552003616,-853532126,237013280,469763698,1124498455,-417053619,545995486,608456003,539108071,545857741,424974,109451063,1296244875,-1629116,453978262,-853532631,237013280,1526728506,-1962504169,1145914144,1092806436,550314018,552019027,1380011298,572540995,237013306,2130708202,-1962503913,1145914144,1629677348,550314018,552019027,1380011298,572540995,237013306,-1560279318,-1962501609,1145914144,1109583652,550314018,552019027,1096045346,572543826,237013306]},{"sector":4,"length":512,"data":[-956299542,-1962501353,1145914144,1646454564,550314018,552019027,1096045346,572543826,237013306,-352319766,-1962499049,1145914144,1126360868,550314018,552019027,1380927010,572545364,237013306,251660010,-1962498792,1145914144,1663231780,550314018,552019027,1380927010,572545364,237013306,855639786,-1962496488,1145914144,1143138084,550314018,552019027,1413564450,572530720,237013306,1459619562,-1962496232,1145914144,1680008996,550314018,552019027,1413564450,572530720,237013306,2063599338,-1962493928,1145914144,1159915300,550314018,552019027,1297434658,572543567,237013306,-1627388182,-1962493672,1145914144,1696786212,550314018,552019027,1297434658,572543567,237013306,-1023408406,-1962491368,1145914144,1176692516,550314018,552019027,1196769826,572530720,237013306,-419428630,-1962491112,1145914144,1713563428,550314018,552019027,1196769826,572530720,237013306,184551146,-1962488807,1145914144,1193469732,550314018,552019027,1347375138,572530720,237013306,788530922,-1962488551,1145914144,1730340644,550314018,552019027,1347375138,572530720,237013306,1392510698,-1962486247,1145914144,1210246948,550314018,552019027,1312900130,572545348,237013306,1996490474,-1962485991,1145914144,1747117860,550314018,552019027,1312900130,572545348,237013306,-1694497046,-1962484967,1145914144,1227024164,550314018,552019027,1262572322,574706261,237013306,-1090517270,-1962484711]},{"sector":5,"length":512,"data":[1145914144,1763895076,550314018,552019027,1262572322,574706261,237013306,-486537494,-1962484455,1145914144,1243801380,550314018,552019027,1431061026,572530757,237013306,117442282,-1962484198,1145914144,1780672292,550314018,552019027,1431061026,572530757,237013306,721422058,-1962483430,1145914144,1260578596,550314018,552019027,1094931234,575882572,237013306,1325401834,-1962483174,1145914144,1797449508,550314018,552019027,1094931234,575882572,237013306,1493173994,-1996035814,107482656,-367362304,572559622,1127948832,992232525,992095522,-29744045,549265548,472654931,1093404404,-1996469172,-1945701350,1142982458,-31809792,1142983430,334161640,-1944007392,237013306,-1073740014,-2029582310,975459104,386867402,686363180,570425373,-1828722042,690246440,1305641,118299351,252649663,-1858464468,992236320,287358778,-520087508,-1928916454,97652256,471534080,-417049849,655304918,572531244,550124073,304879375,354467642,-1858465236,975459104,739319999,454295576,545851174,417294,120593178,457310337,545982266,1347240275,609437004,1163469543,-853532077,546111008,1296126754,1397050448,-400806878,458752003,549979972,974269457,739778751,974203921,8469184,196615045,1750343823,1112088677,1699749965,1852797810,1126198369,1970302319,544367988,1769174349,1666392163,1819045746,-1038372096,1444974347,1769173605,824209007,540028974,1126777640,1920561263]},{"sector":6,"length":512,"data":[1952999273,1296189728,1919894304,959520880,-452972232,-1895052261,1667845152,1702063717,1632444516,1769104756,757099617,1869762592,1835102823,1869762592,1953654128,1718558841,1296189728,-702802176,757105675,1176644658,1380273749,1293962305,1212371521,541478688,1095573569,1313818962,1163154501,1193291040,1330533711,1660953156,-2079596516,741815072,741354545,808660018,808202540,875312428,741551154,858534452,741422124,959654963,875311916,741551153,741551152,858534452,741618732,741354547,926100531,808202540,-1342164436,-2079593956,741356320,741354545,842279989,875311916,741551154,858534196,741946156,825502771,808203052,875311916,741551154,858534964,858533932,741815084,842279987,808203052,875311916,3353653,200547578,959717508,875312684,741551159,858535220,858533932,741946412,842345523,892089900,741551152,858536244,858533932,741553452,909454387,892089900,741551156,858534709,741356844,490995763,545524734,858536244,741815340,892611635,875311916,741551156,824979507,892088364,741487660,842279987,875311916,741551153,858536243,741422124,741354547,842279987,875311916,3353652,201858443,741351556,926100531,808202540,858534444,741420080,741682224,858534452,741487660,825502771,858534700,741551161,858534196,858533932,741487660,875834419,808203052,-788516052,-2079583715,741815072,892611635,808203052,875311916]},{"sector":7,"length":512,"data":[741551161,908866101,741356844,959720499,875311916,741551159,858535220,741553196,926166067,892089132,741551152,858534452,471727360,874546188,741551153,858534452,741618732,741354547,892611635,808202540,875311660,741944372,824980020,639502592,757105676,825044017,436207616,-2079583718,741815072,892611635,808203052,875311916,741354545,808660018,808202540,875312428,741551154,858534452,741422124,959654963,875311916,741551153,741551152,858534452,741618732,741354547,926100531,808202540,-1342164436,-2079593956,741356320,741354545,842279989,875311916,741551154,858534196,741946156,825502771,808203052,875311916,741551154,858534964,858533932,741815084,842279987,808203052,875311916,3353653,200547578,959717508,875312684,741551159,858535220,858533932,741946412,842345523,892089900,741551152,858536244,858533932,741553452,909454387,892089900,741551156,858534709,741356844,490995763,545524734,858536244,741815340,892611635,875311916,741551156,824979507,892088364,741487660,842279987,875311916,741551153,858536243,741422124,741354547,842279987,875311916,3353652,201858443,741351556,926100531,808202540,858534444,741420080,741682224,858534452,741487660,825502771,858534700,741551161,858534196,858533932,741487660,875834419,808203052,-788516052,-2079583715,741815072,892611635,808203052,875311916]},{"sector":8,"length":512,"data":[-1408382721,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1852785696,7955819,62262774,1700143247,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,237502513,546243520,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,5063241,63901242,1163075735,-1742718393,745148192,239861777,1095959508,1162629197,585573459,2248526,64884310,-233955191,241762307,1095959528,1162629197,585573459,575882585,-233925120,-585053949,287361082,-1086713300,739184416,974203921,672080032,-902119366,254547488,546388499,1296189730,247005218,550110204,202320920,-1858465492,1699750432,1852797810,1126198369,1970302319,577922420,101639680,253804292,974203914,168763594,288102956,-14642886,-720426858,685173033,254547215,-1496627,-1206966122,253427753,550110224,439094031,-1858465492,680984352,-383143153,538976290,538976288,1263423300,538990917,538976288,-383639520,254318335,1090529715,-905700849,738987808,974203930,-1761664879,699600680,254334697,537865237,-1761613527,699600680,604993024,253807108,739912717,546388497,254318335,585705907,538976288,1936876886,544108393,808463921,538976288,-1498592,-1290852202,261881897,550110254,439094799,-1858465492,680984352,-383134705,353315030,701304620,680984553,2735631,70782928]}]],[[{"sector":1,"length":512,"data":[252649663,-902164180,739315488,974203928,673325201,1126181187,1920561263,1952999273,1296189728,1919894304,959520880,2240824,71438340,235872447,-902164180,739708704,974203928,1344413841,1936942450,1634759456,1646290275,1948283489,1868767343,1852404846,2254197,72093720,-388095861,539108070,545857741,281614,72749093,608456003,-568269024,1611676928,1126206212,539247693,572661991,-1994339040,72748576,1779456256,1126206212,539247693,-1761664793,689639208,-1994339040,85069344,1947234816,1126206212,539247693,539107559,550314018,-2012340087,276561924,545850494,284174,76025992,1163075735,1173319,76681393,-14147445,269232279,-299882236,3148832,216459305,-853540816,1394644768,-1992669371,84610592,-1676623360,253796356,985676368,739516618,282263570,546374822,1280264226,1414078532,268444193,-1861963759,1331241504,1163011925,1414483488,1230198048,1411401550,1126188360,1380928591,1095911215,1128876112,1330454611,1330923854,1145118802,1163153473,2236754,79302990,1411522705,542329160,1196380752,541933906,1397052245,1095911200,1128876112,1312890963,1163010116,1380537681,1411404613,542392648,1346454593,777143636,293011490,546374852,1163022370,1411404627,1394623816,1162035536,1380008480,542069792,1414418243,1163218505,-2130697682,-1761292783,1195725600,-669936384,-568292604,572712680,-1994339040,81268256,-502160896,1145914116,552017956]},{"sector":2,"length":512,"data":[297402590,545981676,608456003,572581664,550314018,-502390647,299237380,545981686,608456003,-14620896,453978262,550314025,302915721,300875781,545981696,608456003,572581664,-853532128,237013280,-117439214,-1996158447,81923616,185729280,-585053947,202510080,-1491036923,237013280,469763343,-33223406,1881284755,2242097,84808230,336470153,305332229,549389583,288104207,-1778380500,-1861939182,1213473312,1344295753,1380405074,1377848641,1230328133,542328146,1096172609,1145389902,1396785696,757089097,1398087725,1329799237,1312902477,1109860420,1128878913,975316801,252649663,288100652,1226867258,-870313241,589831200,540705594,302915752,312737797,546637074,545857703,14,85136096,739320008,545995282,1347240275,609437004,1163469543,-853532077,579665440,1886216563,577987948,65543212,547437088,739778751,974203921,8469184,85201638,317587599,549389698,318242833,548210060,5892673,94376712,739385544,549403153,1190937,95032086,626073734,32775208,322699305,545654196,673526084,740922895,673526340,740922895,673526083,740935695,673526339,2738191,96342860,1313087622,472393035,2687276,96998230,-1811013491,325058567,546112978,455694,98308966,326369472,545654246,472393026,2687276,99619732,-414637950,550248467,973155356,1227367746,485156649,266944512,8600256,100275113,287843650,974382889]},{"sector":3,"length":512,"data":[304620866,-1055922391,68398848,-1157591290,1124470291,1846536024,-754925510,-1341770221,739321888,686434577,738275612,740935439,-335527380,-1341767661,739715104,686434583,254566671,304884163,4604460,105518087,254288048,689384631,823929066,-1022415871,739388457,469780034,-905554924,371987488,572559674,1802399556,2259301,106828850,739516618,-1858462449,1917067808,1919252073,340787234,550110815,254546703,579942937,1936028240,1884495987,543515489,3875360,106959982,336535754,974720812,1631724177,1869881458,1769435936,577266548,344719419,550110817,254547215,579942937,1701732716,538976371,538976288,3875360,107156650,386867402,974720812,1917854353,544437093,541283141,572530720,348651579,550110820,254547983,579942937,1696624500,544500088,538976288,3875360,107484400,-413589374,550248469,-819935473,974393120,-1945163600,-366388948,747376424,168814937,8600105,108139776,266819907,1480800873,6885351,108795173,254288048,688991332,1678715114,700911404,254324794,688991412,-1274074902,700911404,-2045427712,371247622,-1858463956,977556256,739647690,-1858461937,5067552,110105946,1139235139,974514777,1497571467,540807144,-1240588083,359661576,-1996618086,1480796192,693715756,1380008748,13052965,111416710,266819652,705685865,679870443,334203135,362872873,545392302,-14096551,367717256,538569513,2081366220,388026144]},{"sector":4,"length":512,"data":[-1206539008,471909382,304893472,-1038737920,-417054458,545995486,-1629119,453978262,550314025,537203214,-1742692038,745148192,545995281,1093178111,300296484,-1340027616,1480796192,693715756,1480796394,740036585,266950979,288106796,977682988,266819651,1480846076,545848890,743981864,740907331,626147651,-1002780884,751308576,373030930,545982156,350676825,-31404768,1143480456,693709912,1263420460,12987429,114693721,1480794251,542655719,-380034834,-404350705,-853518013,135007776,-535399424,1495304966,337702432,-31404768,254288008,689384588,2441772,116004506,548420227,743982120,-366380017,-380091352,254550031,288106901,977682988,-2045894519,379584518,12584692,117315246,572560126,860043347,383189026,-1828845816,827146786,1915825202,824929587,845427500,1145975122,1915843890,1815372850,1815180594,-67100111,-33091050,929309330,1684943186,1915909426,1815503923,1815246131,1832084529,824979757,2241388,119281446,1830982398,757870893,1815311665,1815241777,1916171571,1848796211,829567588,829175669,845951332,389808162,-1828845786,1916040482,1848730674,827470436,2241109,120592203,1294111486,757870891,1795170867,-33080809,1145184914,843329585,844444498,741420365,827076909,741420365,-1996479951,-33078249,1145184914,1378960435,1278301489,844251697,826552658,827666764,1310173696,580058631,1110590530,826552908,827666770,1380069708]},{"sector":5,"length":512,"data":[1144082994,1429294129,399179825,-1828845736,843334178,1144147010,1429295665,1110527025,827470418,827076932,-520081067,-1341693417,288100648,254339625,1007627304,1110191145,1813507584,546307591,304878120,402522153,545654646,626147651,58989608,404160553,-1979840640,304878120,254339625,755969053,1094921257,486548818,-1912108520,-1810357504,788578311,-33055208,810754706,1073750584,-33052648,1109532818,741617997,2242609,129112164,1294111486,757871147,1295536692,757870891,1295078705,724316459,841698609,3222828,129767559,1294111486,824979757,741419853,825052467,760033580,841821233,741420365,-1358945742,-33044968,860103314,861221196,741420365,1278362673,1278367025,1278362675,1295144241,757870893,-989846991,-33042408,860103314,894775628,741485901,573658419,-635906560,546307591,739577640,740888079,418250772,549914596,740626216,975768079,254288071,168766504,419823657,549914606,740626216,975768335,254288071,185543720,421593129,-1979840520,219097120,-366407380,741150504,740890895,625692228,35202816,1140887048,1393036313,1146349380,-902163735,739118880,546388503,1330594338,2236749,135666019,673221118,1496078404,1143532073,269478232,266950956,1143744793,2113938737,1141383193,1156012081,826554968,978970457,-413650364,266950724,429916177,-1979840470,1480861728,739315689,686434649,266950724,-380031969,740890895,2437700]},{"sector":6,"length":512,"data":[137632193,673221118,1126979651,686434649,266950723,1497574414,690753513,623985452,1041884416,545914376,-380091608,1126960911,686434649,266950723,1497574428,690753513,624050988,1209663744,1479623432,978863079,-413585085,1127897411,1139234866,252701016,1377445120,1344307720,-870311961,-819982048,974318112,-334305446,1357714216,827996713,1525289703,1545226752,545848840,1479623464,1496400684,826485801,-1996604891,1479689000,1496400684,843263017,443482149,-1996617626,826550304,826551384,1143744857,-29743823,843327624,826551384,1143744857,-1711266510,1124626458,1139234865,828042072,1496400954,1525373415,843266609,843310936,472443224,1139409187,-349611982,449773658,826542202,1480910680,976313067,-413585085,-380030653,-358936792,693711171,1144675051,1156012082,686381106,-369023460,693645892,-201303317,-32996326,1126703240,1126979633,740907313,975515971,1126729982,1126979634,740907313,2437699,143530777,673220862,743977284,693711172,623985708,680066618,743977540,693711172,624051244,-1743049728,253805576,-1996494555,751308779,8600085,144841534,-413589374,550248466,973590556,457834627,985663660,68034697,460259334,1297287350,-380808217,550124050,420424728,572559674,1802399556,1814067557,1936028527,-2130697695,-2113355749,317151520,471911456,-2093349912,-904164096,-1992638456,100929056,436207616,693711130,624051244,-1743049728,253805576]},{"sector":7,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1109535794,543520108,1970168132,1461740898,2054450273,544825888,777203274,1634890835,577991541,808651277,1142960180,541152321,875311668,741749804,959720500,875312172,741616697,741616688,841756982,841756716,741422636,741354546,943008822,808202796,892088876,741485624,741747760,875311668,741487660,856296756,540030256,1096040772,741749792,959720500,168637484,808857651,1413563424,959717441,808203308,908866604,741485617,741485616,841756982,908865580,741946668,741354546,959786034,808202796,875312684,741616689,875311412,741618732,825568308,892089388,221522993,925905674,1094983728,807420244,908866604,741485619,741485616,841757494,908865580,741946668,741354546,856296754,540031024,1096040772,741946656,741354546,825502774,875312172,741616689,875312180,741422380,825568308,808203308,908866604,741485619,741485616,841757494,908865580,741881132,741354546,943008818,168636972,809054259]},{"sector":8,"length":512,"data":[1413563424,741351489,842279990,168637484,808464691,1413563424,842276929,875312172,741616694,875313460,741618988,741354548,909519924,808202796,908866092,741485622,741747760,841756982,841756716,741422636,741354546,842279990,168637484,808530227,1413563424,842276929,875312172,741616694,875313460,741618988,741354548,909519924,808202796,168636972,808595763,1413563424,909516865,808202796,908867116,741485619,741485616,841757494,908865580,741618732,875834420,875312172,741616695,841756981,841756716,741422380,808203313,875311660,221523000,858862346,1094983728,874529108,741616697,824981557,856296758,540030001,1096040772,741618976,909388852,875312172,741878838,875312180,741422380,959720504,875312172,741616690,741485616,841757236,741487660,741354548,959720504,808202796,875311660,221391927,892416778,1094983728,807420244,875312684,741485625,221391920,909193994,1094983728,874529108,741485623,741747760,875313460,741881132,892089905,741616694,841759028,841756716,741749804,741354546,959720502,808202796,875311660,741485622,741747760,875313460,825428493,1142960183,541152321,824981045,875899958,875312172,741485625,741485616,841758516,908865580,741946412,741354546,926166066,808202796,875312684,741616697,824981557,856296758,540031025,1096040772,741750048,959720500,892089388,741616692,875312693]}]],[[{"sector":1,"length":512,"data":[741881132,825633844,892090412,741616697,841758773,741881132,943008818,892089388,741485622,741485616,875312181,942420012,825428493,1142960185,541152321,757870893,436866353,741946412,741354546,926166066,808202796,875312684,741616697,824981557,856296758,540031025,1096040772,741750048,959720500,892089388,741616692,875312693,808202796,168636972,808595763,1413563424,909516865,808202796,908867116,741485619,741485616,841757494,908865580,741618732,875834420,875312172,741616695,841756981,841756716,741422380,808203313,875311660,221523000,858862346,1094983728,874529108,741616697,824981557,856296758,540030001,1096040772,741618976,909388852,875312172,741878838,875312180,741422380,959720504,875312172,741616690,741485616,841757236,741487660,741354548,959720504,808202796,875311660,221391927,892416778,1094983728,807420244,875312684,741485625,221391920,909193994,1094983728,874529108,741485623,741747760,875313460,741881132,892089905,741616694,841759028,841756716,741749804,741354546,959720502,808202796,875311660,741485622,741747760,875313460,825428493,1142960183,541152321,824981045,875899958,875312172,741485625,741485616,841758516,908865580,741946412,741354546,926166066,808202796,875312684,741616697,824981557,856296758,540031025,1096040772,741750048,959720500,892089388,741616692,875312693]},{"sector":2,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1210199090,1919905141,1970369381,2036473957,1870021664,577462642,808651277,1142960180,541152321,858535732,841756716,741946412,926166065,808203052,875311660,741420089,858534197,841756716,741618988,909454385,808203052,892088876,221326388,892351242,1094983728,891306324,741551161,741485616,824981557,741422636,741354547,959786034,892088620,741551160,741485616,824979766,741946668,741354547,909454386,168636716,808857651,1413563424,875896897,808203052,892088876,741420084,858535477,841756716,741618988,959786033,808203052,892088876,741420086,858534965,841756716,741422380,856296753,540030768,1096040772,741946400,875312178,741551159,741485616,824981812,741815340,741354547,959720498,892088620,741551153,741485616,824980533,741750060,741354547,875899954,168636716,808988723,1413563424,909451329,808203052,892088876,741420088,858534198,841756716,741946668,943008817,808203052,908866092]},{"sector":3,"length":512,"data":[741420081,858536245,841756716,741750060,856296753,540031280,1096040772,741618976,741354547,875899954,892088620,741551161,741485616,824981300,741946412,875899958,875312684,942746679,825428493,1142960176,541152321,757870893,436866353,808203052,892088876,741420088,858534198,841756716,741946668,943008817,808203052,908866092,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1210199090,1919905141,1970369381,2036473957,1870021664,577462642,808651277,1142960180,541152321,858535732,841756716,741946412,926166065,808203052,875311660,741420089,858534197,841756716,741618988,909454385,808203052,892088876,221326388,892351242,1094983728,891306324,741551161,741485616,824981557,741422636,741354547,959786034,892088620,741551160,741485616,824979766,741946668,741354547,909454386,168636716,808857651,1413563424,875896897,808203052,892088876,741420084,858535477,841756716,741618988,959786033,808203052,892088876,741420086,858534965,841756716,741422380,856296753,540030768,1096040772,741946400,875312178,741551159,741485616,824981812,741815340,741354547,959720498,892088620,741551153,741485616,824980533,741750060,741354547,875899954,168636716,808988723,1413563424,909451329,808203052,892088876,741420088,858534198,841756716,741946668,943008817,808203052,908866092]},{"sector":4,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1344416818,539062383,1936027463,1701344288,1634031392,543517811,1849761837,1836674671,577992047,808651277,1142960180,541152321,841758516,841756716,741815340,959720498,808202796,875311660,741485625,841756981,741618988,825568306,875311660,741485623,741485616,841757236,808651277,1142960181,541152321,841758516,841756716,741815340,959720498,808202796,875311660,741485625,908865845,741815340,741354546,842279986,875311660,741485623,741485616,841758516,741946412,856296754,540030512,1096040772,841756704,741946412,825568306,892088876,741485620,841756981,741815340,741354546,909454388,808202796,875312172,741485625,741485616,841757237,741422380,926166070,168636972,808923187,1413563424,741351489,959786036,808202796,892088876,741485625,841758261,841756716,741946668,943008818,908866092,741485617,841758773,741618988,741354546,959786036,808202796,168636972,808988723,1413563424,959782977]},{"sector":5,"length":512,"data":[892088876,741485622,741485616,841759029,741881132,875899958,808202796,892088876,741485617,841757237,841756716,741422380,842345522,808202796,892088876,221391924,959460106,1094983728,891306324,741485622,741485616,841758773,741946668,741354546,909454388,808202796,875312172,741485625,741485616,841757237,741422380,926166070,168636972,808464691,1413563424,825040961,221326636,875895306,808202796,892088876,741485617,841757237,841756716,741422380,842345522,808202796,892088876,221391924,959460106,1094983728,891306324,741485622,741485616,841758773,741946668,741354546,909454388,808202796,875312172,741485625,741485616,841757237,741422380,926166070,741485623,741485616,841757236,808651277,1142960181,541152321,841758516,841756716,741815340,959720498,808202796,875311660,741485625,908865845,741815340,741354546,842279986,875311660,741485623,741485616,841758516,741946412,856296754,540030512,1096040772,841756704,741946412,825568306,892088876,741485620,841756981,741815340,741354546,909454388,808202796,875312172,741485625,741485616,841757237,741422380,926166070,168636972,808923187,1413563424,741351489,959786036,808202796,892088876,741485625,841758261,841756716,741946668,943008818,908866092,741485617,841758773,741618988,741354546,959786036,808202796,168636972,808988723,1413563424,959782977]},{"sector":6,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,538976304,1413563424,841818177,2035491372,1869115501,589330798,1646276660,1867325561,1953653114,856296738,540030000,1096040772,741684512,875899954,892088876,741616692,841758005,741618988,875899954,892089388,741485621,841757749,741618988,842411060,808203308,168637484,808792115,1413563424,842408001,908866092,741485617,875313461,741946668,926231602,892088876,741616693,841758005,741618988,856296754,540030512,1096040772,741487904,842345524,808203308,892089388,741485620,841757237,741487916,875899956,892088876,741485618,875311669,741618988,842345522,168636972,808923187,1413563424,842342465,908866604,741616689,741616688,841756982,741946668,943008818,892089388,741485624,841758005,741618988,875899956,892088876,221391922,942682890,1094983728,891306324,741616688,875311157,875311148,741488172,825633842,908866092,741616689,875312182,741881132,825633844,168637484,809054259,1413563424,959782977,892089388]},{"sector":7,"length":512,"data":[741616692,741616688,841757238,741422636,825633842,908866604,741616692,875313205,741422636,856296756,540028977,1096040772,741946656,842411060,908866604,741485617,841759029,741815596,892677170,892088876,741616692,875312692,741815340,959720500,168637484,808530227,1413563424,808788033,892089388,741485618,841756725,741946412,926166068,892089388,741616692,741616688,942421046,825428493,1142960178,541152321,841758006,908865580,741619244,892742712,808202796,908867116,221785140,858862346,1094983728,908083540,741616693,875312182,741684780,875965492,908866604,221522997,875639562,1094983728,757088596,825044017,890898957,741485618,841756725,741946412,168637484,808792115,1413563424,842408001,908866092,741485617,875313461,741946668,926231602,892088876,741616693,841758005,741618988,856296754,540030512,1096040772,741487904,842345524,808203308,892089388,741485620,841757237,741487916,875899956,892088876,741485618,875311669,741618988,842345522,168636972,808923187,1413563424,842342465,908866604,741616689,741616688,841756982,741946668,943008818,892089388,741485624,841758005,741618988,875899956,892088876,221391922,942682890,1094983728,891306324,741616688,875311157,875311148,741488172,825633842,908866092,741616689,875312182,741881132,825633844,168637484,809054259,1413563424,959782977,892089388]},{"sector":8,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1495411762,1701539425,1866735717,1701602415,1092627744,2037280622,1937076077,168632864,808726579,1413563424,808788033,892089132,741551152,858534453,741618988,808791091,892089132,741551156,858534453,741684268,808791091,892089132,741551152,858534453,741618988,808791091,168637996,808792115,1413563424,959717441,808203052,168637228,808857651,1413563424,808788033,892089132,741551152,858534453,741618988,892677171,892089132,741551156,858534453,741356844,959720499,875311916,741551157,858535732,741946412,808791091,168637996,808923187,1413563424,808788033,808203052,168637228,808988723,1413563424,926163009,875312428,741420089,858535732,741684268,926166067,875311916,741551161,858533941,858533932,741684268,926166069,875311404,741551157,858534708,741487660,856296758,540031280,1096040772,741684256,741354547,856296755,540028977,1096040772,741815328,959720501,875311404,741551159,858535220]}]],[[{"sector":1,"length":512,"data":[741815340,959720499,892089132,741551152,858535732,741684268,808791091,875311916,741551161,858534453,741356844,856296758,540029233,1096040772,741356832,856296758,540029489,1096040772,741420320,168636717,540031258,1096040772,741684256,741354547,856296755,540028977,1096040772,741815328,959720501,875311404,741551159,858535220,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1495411762,1701539425,1866735717,1701602415,1092627744,2037280622,1937076077,168632864,808726579,1413563424,808788033,892089132,741551152,858534453,741618988,808791091,892089132,741551156,858534453,741684268,808791091,892089132,741551152,858534453,741618988,808791091,168637996,808792115,1413563424,959717441,808203052,168637228,808857651,1413563424,808788033,892089132,741551152,858534453,741618988,892677171,892089132,741551156,858534453,741356844,959720499,875311916,741551157,858535732,741946412,808791091,168637996,808923187,1413563424,808788033,808203052,168637228,808988723,1413563424,926163009,875312428,741420089,858535732,741684268,926166067,875311916,741551161,858533941,858533932,741684268,926166069,875311404,741551157,858534708,741487660,856296758,540031280,1096040772,741684256,741354547,856296755,540028977,1096040772,741815328,959720501,875311404,741551159,858535220]},{"sector":2,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1176644658,1380273749,1293962305,1212371521,541478688,1095573569,1313818962,1163154501,1193291040,1330533711,168632900,808726579,1413563424,926097473,808202540,858534444,741420080,741682224,858534452,741487660,825502771,858534700,741551161,858534196,858533932,741487660,875834419,808203052,858534700,741420087,221391920,892351242,1094983728,857751892,741420080,741682224,858534452,741487660,825502771,858534700,741551161,858534196,858533932,741487660,875834419,808203052,858534700,741551159,858534452,858533932,741684268,856296755,540030512,1096040772,741946400,926166070,875311916,741551157,741551152,858536244,741487916,808791094,875311916,741551161,741551152,858534709,741750060,875899958,892089132,741551155,858533941,808651277,1142960183,541152321,858536244,741815340,892611635,875311916,741551156,824979507,892088364,741487660,842279987,875311916,741551153,858536243,741422124]},{"sector":3,"length":512,"data":[741354547,842279987,875311916,221457460,942682890,1094983728,807420244,858534700,741420087,741485616,824979507,892088364,741487660,842279987,875311916,741551153,858536243,741422124,741354547,842279987,875311916,741551156,221457456,959460106,1094983728,857751892,741551159,858535220,858533932,741946412,842345523,892089900,741551152,858536244,741815340,892611635,875311916,741551155,858535732,741356844,842279987,168637228,808464691,1413563424,825499713,875311916,741551154,858534964,858533932,741684268,741354545,875834418,875313452,221326386,825307914,1094983728,757088596,825044017,739904013,858535220,858533932,741946412,842345523,892089900,858534196,858533932,741487660,875834419,808203052,858534700,741420087,221391920,892351242,1094983728,857751892,741420080,741682224,858534452,741487660,825502771,858534700,741551161,858534196,858533932,741487660,875834419,808203052,858534700,741551159,858534452,858533932,741684268,856296755,540030512,1096040772,741946400,926166070,875311916,741551157,741551152,858536244,741487916,808791094,875311916,741551161,741551152,858534709,741750060,875899958,892089132,741551155,858533941,808651277,1142960183,541152321,858536244,741815340,892611635,875311916,741551156,824979507,892088364,741487660,842279987,875311916,741551153,858536243,741422124]},{"sector":4,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1394748466,1397899604,1145979168,1381258016,1397051465,1380927008,1380275781,1394617632,1095980367,168632864,808726579,1413563424,875896897,892089900,741747764,858534453,741422380,825568307,892089900,741551152,858534197,741422380,808203825,892088876,221457456,892351242,1094983728,891306324,741551153,908865845,741356844,825568307,168637228,808857651,1413563424,875896897,892089900,741551153,858534965,741487916,875311665,741747769,741551152,858536244,741946412,942943286,875311916,221457465,925905674,1094983728,874529108,741747769,858535988,741946412,856296755,540031024,1096040772,741487904,808203825,892088876,741551153,858536244,741422380,875899955,892090668,741944374,858535477,741946412,808203825,892088876,221654068,959460106,1094983728,891306324,741747764,858534453,741422380,825568307,892089900,741551152,858534197,741422380,808203825,892088876,741551152,858534197,741422380]},{"sector":5,"length":512,"data":[808791094,740307756,858534197,825428493,1142960176,541152321,858534453,741422380,959720499,875312428,741420086,824981812,926166066,808203820,875311916,741551159,908867380,741749804,926166067,892089132,741747760,858536244,741815340,856296755,540029233,1096040772,741946656,808203569,875311916,741551159,858536244,741422380,875899955,808202540,875311660,741551159,858536244,741422380,875899955,808202540,875311660,741551154,892089396,825428493,1142960178,541152321,824979765,741946412,875311665,221326391,858862346,1094983728,757088596,825044017,739904013,856296755,540029233,1096040772,741946656,808203569,875311916,741551159,858536244,741422380,892088876,221457456,892351242,1094983728,891306324,741551153,908865845,741356844,825568307,168637228,808857651,1413563424,875896897,892089900,741551153,858534965,741487916,875311665,741747769,741551152,858536244,741946412,942943286,875311916,221457465,925905674,1094983728,874529108,741747769,858535988,741946412,856296755,540031024,1096040772,741487904,808203825,892088876,741551153,858536244,741422380,875899955,892090668,741944374,858535477,741946412,808203825,892088876,221654068,959460106,1094983728,891306324,741747764,858534453,741422380,825568307,892089900,741551152,858534197,741422380,808203825,892088876,741551152,858534197,741422380]},{"sector":6,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1294085170,1667856485,1210084961,1142977633,1701015137,1411394848,1768186226,1852795252,572550241,808651277,1142960180,541152321,841757237,741815596,741354546,842345522,892088876,741485623,741485616,841757237,741815596,741354550,842345524,892088876,741485623,841759029,741815596,909454386,168637484,808792115,1413563424,926228545,892088876,741485625,741878832,841757237,741750060,741354546,842345522,892088876,741485622,741485616,841757237,741750060,741354550,842345524,168636972,808857651,1413563424,909451329,892088876,741485623,841758261,741618988,909454388,892088876,741485623,741747760,841757750,741553708,875965490,908866092,741485617,841756726,741422636,856296754,540030768,1096040772,741815584,909454386,892088876,741485623,841757237,875311148,741946412,808791090,892088876,741485618,841757749,741750060,926231602,892088876,741485625,841756982,808651277,1142960184,541152321]},{"sector":7,"length":512,"data":[841757238,741946668,741354546,842411060,908866092,741485617,841757238,741946668,943008818,892088876,741485625,841758261,741684524,909454386,892088876,221391922,959460106,1094983728,807420244,908866604,741485620,841757494,741619244,909519922,908866092,741485620,841757238,741422636,959786034,892088876,221391927,808530698,1094983728,757088596,825044017,840567309,908866092,741485617,841757238,741946668,943008818,892088876,741485625,841758261,741684524,909454386,892088876,221391922,959460106,1094983728,807420244,908866604,741485620,841757494,741619244,909519922,908866092,741485620,841757238,741422636,959786034,892088876,221391927,808530698,892088876,741485623,841759029,741815596,909454386,168637484,808792115,1413563424,926228545,892088876,741485625,741878832,841757237,741750060,741354546,842345522,892088876,741485622,741485616,841757237,741750060,741354550,842345524,168636972,808857651,1413563424,909451329,892088876,741485623,841758261,741618988,909454388,892088876,741485623,741747760,841757750,741553708,875965490,908866092,741485617,841756726,741422636,856296754,540030768,1096040772,741815584,909454386,892088876,741485623,841757237,875311148,741946412,808791090,892088876,741485618,841757749,741750060,926231602,892088876,741485625,841756982,808651277,1142960184,541152321]},{"sector":8,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1394748466,1162625347,538976339,538976288,538976288,538976288,538976288,538976288,572530720,808651277,1142960180,541152321,824981555,741946156,808725553,875311404,741420081,824980020,741553196,875834417,875311404,741420085,824981044,741815340,856296753,540030256,1096040772,741880864,959720497,892088620,741420080,824979765,741487916,859122737,892088620,741420084,824980789,741750060,856296753,540030512,1096040772,741815584,943008817,892088620,741420089,824979510,741422636,842411057,908865836,741420083,824980534,741684780,741354552,856296756,540030768,1096040772,741684768,875965496,908865836,741420083,824980022,741422636,808856625,892088620,741420089,824981557,741815596,856296753,540031024,1096040772,741750048,892677169,892088620,741420084,824980277,741487916,825568305,892088620,741420080,824981812,741880876,856296753,540031280,1096040772,741815328,909388849,875311404]}]],[[{"sector":1,"length":512,"data":[741420085,824980532,741553196,842279985,875311404,741420081,824979508,741946156,942877745,168638508,808464691,1413563424,825040961,221326636,1096030730,741750048,892677169,892088620,741420084,824980277,741487916,825568305,892088620,741420080,824981812,741880876,856296753,540031280,1096040772,741815328,909388849,875311404,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1394748466,1162625347,538976339,538976288,538976288,538976288,538976288,538976288,572530720,808651277,1142960180,541152321,824981555,741946156,808725553,875311404,741420081,824980020,741553196,875834417,875311404,741420085,824981044,741815340,856296753,540030256,1096040772,741880864,959720497,892088620,741420080,824979765,741487916,859122737,892088620,741420084,824980789,741750060,856296753,540030512,1096040772,741815584,943008817,892088620,741420089,824979510,741422636,842411057,908865836,741420083,824980534,741684780,741354552,856296756,540030768,1096040772,741684768,875965496,908865836,741420083,824980022,741422636,808856625,892088620,741420089,824981557,741815596,856296753,540031024,1096040772,741750048,892677169,892088620,741420084,824980277,741487916,825568305,892088620,741420080,824981812,741880876,856296753,540031280,1096040772,741815328,909388849,875311404]},{"sector":2,"length":512,"data":[808464435,1296388640,1701336096,1296189728,1919242272,1634627443,1866670188,1953853549,1293972069,1667855221,1919111968,225209455,825242378,1163010096,1700143181,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,856296753,540029488,541934930,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,223167049,858796810,1094983728,757088596,1394748466,1920297825,539828321,1634754890,1702061422,1819231776,1699553387,2036625260,168632864,808726579,1413563424,959717441,875313196,741878841,824979765,741354546,959720500,875313196,741878841,824979765,741354546,959720500,892090412,741878833,942420533,741422380,856296760,540030256,1096040772,741946400,825568312,875312172,741616697,824980788,875834422,875313196,741878832,942421044,741684268,856296760,540030512,1096040772,741618720,875834424,875312172,741616688,824981811,959720502,875313196,741878841,824979765,741354546,959720500,875313196,741878841,824979765,741354546,856296756,540030768,1096040772,741356576,875834424,875313196,741878837,942422324,741422380,959720500,875312172,741878837,824980532,856296758,540031024,1096040772,741420320,168636717,875834394,875312172,741616688,824981811,959720502,875313196,741878841,824979765,741354546,959720500,875313196,741878841]},{"sector":3,"length":512,"data":[-1408454657,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1919501088,6646883,62262493,1700143247,1869181810,774971502,673198128,1866672451,1769109872,544499815,541934153,1886547779,943272224,219086897,546243520,1701013836,1684370286,1952533792,1634300517,539828332,1735357008,544039282,1886351952,2037674597,543584032,5063241,63900961,1163075735,-1742718393,745148192,221904913,747766740,524295212,1296126778,1397050448,1310910244,1140859471,-1996235251,66194976,-401777152,741118467,975126556,1347240275,609437004,1163469543,-1962925485,-922488307,-935666400,304877856,253804346,739322895,547371537,-1069930481,371247674,974327596,1226973329,2248002,66850222,739778762,288099343,572559674,1936876880,1818324591,1836008224,1702131056,-620748174,-1090255347,738856736,550124049,439093775,-1858465492,680984352,-383134449,353315030,701304620,680984553,2734095,68161040,185540810,288102956,-14642886,-1290852202,539158825,538976288,1229135904,1162625874,538976288,538976288,-1761613534,699600680,437138944,253807108,739912716,546388497,254318335,-689362509,739577640,-383180785,254318335,1795172787,-905698290,739053344,974203930,-1761664879,699600680,538977001,1700143136,1869181810,774971502,538980400,572530720,680984553,2732815,70127249,235872458,288102956,-14642886,-737204074,685173033,254547215]},{"sector":4,"length":512,"data":[-1496627,-1106302826,247791657,549389368,288100111,253807162,739781649,546388497,692267042,1886339872,1734963833,1226863720,1126190402,544240239,825768241,251199522,549389378,288099855,253807162,739781655,546388497,1701990434,1931506547,1701011824,1918984736,544175136,1953394531,1702194793,252510242,545981516,585558238,550314018,1275994249,253362180,1296237654,-417323964,838917664,-1962647537,1145914144,552017956,-853532126,237013280,1308623958,-1962644977,1145914144,552017956,254318335,-853530341,237013280,1728054560,-1962642417,1145914144,552017956,539107362,545857741,296974,75370353,1443766409,259850244,546768008,-414759597,262537233,545981586,681049896,688132108,203484704,-399966160,3149030,-1759458016,1195725600,237013306,-1224735468,-1610310641,978325280,550124224,1190932,77991880,1210196113,541346895,572609609,-1341127424,572559620,659902297,1310737746,1428182095,1196312915,1162368032,1280262944,1194283599,1213219154,542327625,1229868877,542265172,1346454593,559039828,272826402,546374842,1229476898,1380982867,1095911247,1398087757,1193300805,1213219154,542327625,541347393,1431389522,1397051977,1095259168,1145118804,1163153473,2240082,79958124,1344413841,1397966162,1162368032,1095783200,1109411139,1411404353,1329799247,1313428558,573457749,-837782016,1394644740,-1979693243,-1962616816,-420946400,-853532126,237013280]},{"sector":5,"length":512,"data":[-1761606440,1124393488,539247693,14557415,82579631,1296244875,-417323964,539107872,545857741,320014,83235019,1296244875,-417323964,680984352,539564815,545857741,335886,83890404,1296244875,-417323964,572531232,-1994339040,85986848,168881664,237013253,-167770910,-922414064,67165472,-1794829039,-1994348768,85855776,370217216,546569733,909209634,286982178,545850647,337934,85856552,521085119,288100652,521243392,572559621,1397311572,1330794528,1296126535,1363497504,1163020629,1145118803,1129202006,1109410885,1128878913,539831584,541414229,1296912195,541347393,1396785703,658588489,549403170,288100111,-2110123732,317147424,471911456,-2093341912,547889210,335886,85987737,547823765,925833,298188800,549979425,974269457,1095966859,1162629197,585573459,575882585,-31404768,1634935436,1701605485,472654451,-704642072,-1090182639,288102432,-1069936340,-603946694,-1895487471,1007807488,304138245,-1086713556,288102688,1175586304,-416197883,29,-1996494464,1396315883,-1996495054,201331691,-1073393646,1427254272,253807109,974269465,1917854353,544437093,541283141,1696624500,578054520,1511145216,1377862149,-870312217,543428384,1253583,90444388,1105670721,976311273,843128971,-171827738,-853507256,-416136928,501887553,-2092370494,1846705920,680656389,254582799,1378625892,1093407532,741490988,1567766,91755168,-381556927]},{"sector":6,"length":512,"data":[-1959120301,501629216,-2092370494,1092668704,501891559,-2092370494,-2112707072,-1207926011,-33190894,-1609619313,694423340,321655852,-1777153536,1226867205,-870313497,65543200,-452951238,1090885394,987686692,608247947,680984551,539564815,554574029,317652997,545850784,345614,437911552,1093407532,741490988,1567766,91755168,-381556927,546569733,909209634,286982178,545850647,337934,85856552,521085119,288100652,521243392,572559621,1397311572,1330794528,1296126535,1363497504,1163020629,1145118803,1129202006,1109410885,1128878913,539831584,541414229,1296912195,541347393,1396785703,658588489,549403170,288100111,-2110123732,317147424,471911456,-2093341912,547889210,335886,85987737,547823765,925833,298188800,549979425,974269457,1095966859,1162629197,585573459,575882585,-31404768,1634935436,1701605485,472654451,-704642072,-1090182639,288102432,-1069936340,-603946694,-1895487471,1007807488,304138245,-1086713556,288102688,1175586304,-416197883,29,-1996494464,1396315883,-1996495054,201331691,-1073393646,1427254272,253807109,974269465,1917854353,544437093,541283141,1696624500,578054520,1511145216,1377862149,-870312217,543428384,1253583,90444388,1105670721,976311273,843128971,-171827738,-853507256,-416136928,501887553,-2092370494,1846705920,680656389,254582799,1378625892,1093407532,741490988,1567766,91755168,-381556927]},{"sector":7,"length":512,"data":[-1408454145,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1701400608,1918986339,215941236,546243510,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,3225657,62917905,1766596751,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,220397645,546767823,977749331,253794336,1125482,64228661,1347240275,609437004,1330520807,222232610,545850334,258574,65539410,1347240275,609437004,1163469543,2130715219,-922488307,-935666400,304877856,253804346,739322895,547371537,-1069930481,371247674,974327596,1226973329,2248002,66850210,739778762,288099343,572559674,1936876880,1818324591,1836008224,1702131056,-822074766,-1090255347,738856736,550124049,439093775,-1858465492,680984352,-383134449,353315030,701304620,680984553,2734095,68161028,185540810,288102956,-14642886,-1290852202,539158825,538976288,1162432544,1380010051,538976340,538976288,-1761613534,699600680,437135872,253807108,739912716,546388497,254318335,-689362509,739577640,-383180785,254318335,1593846195,-905698290,739053344,974203930,-1761664879,699600680,538977001,1700143136,1869181810,774971502,538980400,572530720,680984553,2732815,70127237,235872458,288102956,-14642886,-737204074,685173033,254547215,-1496627,-1106302826,247005225]},{"sector":8,"length":512,"data":[549389368,288100111,253807162,739781649,546388497,692267042,1886339872,1734963833,1226863720,1126190402,544240239,825768241,250413090,549389378,288099855,253807162,739781655,546388497,1701990434,1931506547,1701011824,1918984736,544175136,1953394531,1702194793,251723810,545981516,585558238,550314018,1275994249,252575748,1296237654,-417323964,637591072,-1962647537,1145914144,552017956,-853532126,237013280,1107297366,-1962644977,1145914144,552017956,254318335,-853530341,237013280,1526727954,-1962642417,1145914144,552017956,539107362,545857741,296974,75370341,1443766409,259063812,546768008,-414759597,261750801,545981586,681049896,688132108,203484704,-399966160,3149030,-1759458016,1195725600,237013306,-1426062069,-1610310641,978325280,550124224,1190932,77991868,1210196113,541346895,572609609,-1341130496,572559620,659902297,1310737746,1428182095,1196312915,1162368032,1280262944,1194283599,1213219154,542327625,1229868877,542265172,1346454593,559039828,272039970,546374842,1229476898,1380982867,1095911247,1398087757,1193300805,1213219154,542327625,541347393,1431389522,1397051977,1095259168,1145118804,1163153473,2240082,79958112,1344413841,1397966162,1162368032,1095783200,1109411139,1411404353,1329799247,1313428558,573457749,-837785088,1394644740,2113947461,-1962616816,-420946400,-853532126,237013280,-1962933032,1124393488,539247693]}]],[[{"sector":1,"length":512,"data":[14557415,82579619,1296244875,-417323964,539107872,545857741,320014,83235007,1296244875,-417323964,680984352,539564815,545857741,332302,83890392,1296244875,-417323964,572531232,-1994339040,85069344,168878592,237013253,-369097502,-922416368,-134161120,-1794831344,-1994348768,84872736,219219200,546569733,909209634,286195746,545850638,332814,84873500,521085119,288100652,269582080,572559621,1397311572,1330794528,1296126535,1363497504,1163020629,1145118803,1129202006,1109410885,1128878913,539831584,541414229,1296912195,541347393,1396785703,658588489,549403170,288100111,-2110123732,317147424,471911456,-2093341912,547889210,332302,85070221,547823765,925833,298385408,549979411,974269457,1095966859,1162629197,585573459,575882585,-31404768,1634935436,1701605485,472654451,975176680,549396641,739322904,985676305,299630721,545654036,1678714962,608250921,694423336,2014437888,-234831867,-939160559,288100896,421576506,33558828,1275437074,839903058,-414035142,469773327,-2063226350,1769218592,543517812,1663067759,1953653096,609499938,-1273872896,572556549,544698216,2037277037,1702127904,1763734381,1751326830,578056801,1174425147,1392885266,1409290727,-2113550318,317147424,1310772256,-770540800,572556549,1701672302,543385970,1970037110,1848385637,577072481,1227379259,608250921,2705704,98308744,-380377261,692660306]},{"sector":2,"length":512,"data":[-434991616,-1442807035,-2113540078,317147424,1310772256,1227379258,676521769,1407985993,-1291812038,1090910738,1173298,100930233,315752640,550110734,336538643,680722410,-332848044,546388499,251667540,-1341777901,-350672864,7464,-1407716,609495186,689171497,405543402,422111785,1911019,-377152512,1411945215,334244132,740302889,740888591,4336660,102896413,-415031166,550248466,322830414,826345004,976372199,1105670721,676522290,334178627,-1035001877,265971862,1325433417,1090926099,1093199681,843180337,1305641,104862568,266819651,-1929385568,692142376,1380722923,693261290,1242792192,-413580538,-1416177,1094789257,1277750057,1381231186,329711657,-1845623212,1480796192,693715756,743592748,1105865746,1864231473,745997074,741491178,1567766,106828766,673222654,-1484733,1094789260,-853677271,-343913268,1126978131,-1979717031,692142376,-858972693,1407942732,1126967634,354480928,402657836,1275488276,1480845144,680329193,-349617855,-384823512,-366390701,-1828721899,673464616,975776067,1139235148,-1979717031,692142376,1381181675,688918505,1913927936,304138758,1498163433,740891124,1277749522,689566808,1092653370,692267044,343736379,548406908,1481386024,-349627916,-350671847,1498163240,-383182348,-366401262,1481386024,-349627916,-350623463,1093178111,692267044,-350671831,1498163240,-383182348,740894994,344260626,545457798,344981571]},{"sector":3,"length":512,"data":[550110864,304879375,-1542148096,1092784390,1752461166,1126199909,1953653096,1495801919,544370464,992094542,-1374370048,-417054458,545995486,585573441,550314018,437774,113382627,608247947,575546087,1092677408,1847781156,550314018,332302,114038015,608247947,576266983,1092677408,2032330532,550314018,358414,114693385,-1878122359,6,304880154,-1542148096,1092784390,1752461166,1126199909,1953653096,1495801919,544370464,992094542,-1374370048,-417054458,545995486,585573441,550314018,437774,113382627,608247947,575546087,1092677408,1847781156,550314018,332302,114038015,608247947,576266983,1092677408,2032330532,550314018,358414,114693385,-1878122359,1480796192,693715756,743592748,1105865746,1864231473,745997074,741491178,1567766,106828766,673222654,-1484733,1094789260,-853677271,-343913268,1126978131,-1979717031,692142376,-858972693,1407942732,1126967634,354480928,402657836,1275488276,1480845144,680329193,-349617855,-384823512,-366390701,-1828721899,673464616,975776067,1139235148,-1979717031,692142376,1381181675,688918505,1913927936,304138758,1498163433,740891124,1277749522,689566808,1092653370,692267044,343736379,548406908,1481386024,-349627916,-350671847,1498163240,-383182348,-366401262,1481386024,-349627916,-350623463,1093178111,692267044,-350671831,1498163240,-383182348,740894994,344260626,545457798,344981571]},{"sector":4,"length":512,"data":[-1408382977,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1634751264,-184523421,-1895582195,1919243808,1852795251,808333600,1126703152,1886339881,1734963833,1226863720,1126190402,544240239,825768241,-1072814336,1277202179,1852138345,543450483,1702125901,1818323314,1344285984,1919381362,1344302433,1701867378,544830578,1226860143,1325419842,-1895577074,1953841440,544370536,777134125,1768245280,544826734,776806438,1818314784,1836213612,1627418209,-1761358066,1195725600,546840634,288123407,-737250560,1296126723,1397050448,1310910244,2097160783,-1996235250,66194976,-401698816,1296126723,1397050448,1495459620,2249541,66195133,987570377,739320008,549403154,288100111,-1606807252,975703840,550124224,319761430,572559674,575488585,-66134016,404802051,738987820,546388497,1919242274,1634627443,1866670188,1953853549,2257509,67505933,168763583,-902164180,738856736,974203930,-1761664879,701828904,254334697,-854643691,-1761613527,699928360,269435392,253807108,739912715,546388497,254318335,585705907,538976288,1394614304,1162035536,538976288,538976288,-1498592,-1290852202,258474025,550110234,439094287,-1858465492,680984352,-383143153,353315030,689966892,680984553,2732815,69472157,219095242,288102956,-14642886,-1290852202,539158825,1444945952,1769173605,824209007,540028974,538976288,-1761613534,699600680,772784896]},{"sector":5,"length":512,"data":[253807108,739912718,546388497,254318335,-689362476,739577640,-383136497,254318335,-150984258,-1090242545,739184416,550124049,405541135,-1858465492,1126703648,1866670121,1769109872,544499815,541934153,1886547779,943272224,721429041,-1090239984,739118880,550124049,405542671,-1858465492,1917854240,544437093,1667330163,1633820773,1869881458,1852793632,1970170228,1056973413,-1962652656,-420946400,-853532126,237013280,1275069516,1124357648,539247693,14557415,73404516,1296244875,-417323964,539107872,545857741,284174,74059904,1296244875,-417323964,680984352,539564815,545857741,332302,74715289,1296244875,-417323964,572531232,-1994339040,76025376,2115019520,237013252,-1358953386,-1761310704,1195725600,-671084057,-1962634736,-1744885728,68160552,552476713,687878156,806151912,550313984,1163075735,545864263,330510,77336809,1343168672,-902119366,304878624,-1508836864,572559620,1145851720,559171872,288817186,546374832,1431263522,541413927,542396238,1313428309,1213472839,1329799237,793923404,1346458183,1396918600,1313819936,1380930633,1094992160,1380275280,1962943009,-1861961199,1213473312,1344295753,1380405074,1428180289,542328147,1346458183,1396918600,1145979168,1363497504,1163020629,1213472851,1092637761,1414545732,573461061,-1005478400,572559620,1397051984,1213472851,1347625029,541410113,542261570,1126190932,1230261839,776295758,296222754]},{"sector":6,"length":512,"data":[546768078,4670803,81269180,-388095861,539108070,545857741,317454,81924553,608456003,-568269024,-334372608,1126206212,539247693,572661991,-1994339040,81923616,-166593280,1126206212,539247693,-1761664793,689639208,-1994339040,85069344,1185280,1126206213,539247693,539107559,550314018,302915721,304087045,545850634,320014,84611624,14491849,84677174,547823765,252584073,306380805,-1812069107,829432352,1291854390,-1996157422,85200416,252860928,253804293,739322911,314376209,546374928,1229476898,1380982867,1095911247,1163010125,1380537681,1092637509,1312904772,541345091,1230192962,757932099,1163089184,1297040160,1145979213,1094854432,1094928723,-1086709209,739184416,974203921,-414637950,550248466,975382556,-1474282877,85069344,303221504,-1491036923,237013280,117440512,-939191533,304877856,1394641722,1280331073,-417049787,1397053730,550314018,1931644158,1819307361,740455269,537126940,-1088380614,288102432,-1069936340,218136890,-1895492589,2014516480,-585053947,-2112673792,1226878213,-2042999062,472402208,2687776,93066040,739385544,549403153,1125401,93721512,-1845609792,748687144,740910095,304881167,489434156,2137417318,680525370,254582799,304884068,-29748692,1835147922,741357105,1697656881,1835151411,741357105,1747988529,975319091,254288048,1678716034,254339625,1678716094,974335017,254315006,1175399554,254339625]},{"sector":7,"length":512,"data":[-2112934722,4795433,94376940,287842480,-366407380,744754984,740935439,1178741777,254324794,688991333,-938530582,700911404,1110184748,682637894,288147727,472443433,254542124,338438599,4604460,95032327,386867402,540676908,1917854353,544437093,541283141,503331618,-905595884,739774240,579942931,1696624500,578054520,341573691,545392062,538175306,974594252,-414637950,550248466,-1812055533,1651319328,1949578860,1865758002,1664838205,1684284259,1717986595,593979171,1646485857,8600098,96998559,-1625781,52226952,843790849,-343343129,-29718001,827009160,691161900,-265533140,1226867258,538109745,-1777393460,-29719750,827009160,691161900,-265533140,-1174371526,1090900500,987686692,608247947,680984551,539564815,302915789,349896709,546833884,288123407,1092651834,585558052,550314018,537252366,237019450,1470,85596672,-1625781,52226952,843790849,-343343129,-29718001,827009160,691161900,-265533140,1226867258,538109745,-1777393460,-29719750,827009160,691161900,-265533140,-1174371526,472402208,2687776,93066040,739385544,549403153,1125401,93721512,-1845609792,748687144,740910095,304881167,489434156,2137417318,680525370,254582799,304884068,-29748692,1835147922,741357105,1697656881,1835151411,741357105,1747988529,975319091,254288048,1678716034,254339625,1678716094,974335017,254315006,1175399554,254339625]},{"sector":8,"length":512,"data":[-1408383233,1411419907,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1818313248,234094700,546243510,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,3225657,62918182,1766596751,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,238551117,546767823,977749331,253794336,1125482,64228938,1347240275,609437004,1330520807,240386082,545850334,258574,65539687,1347240275,609437004,1163469543,-1811930541,-922488306,-935666400,304877856,253804346,739322895,547371537,-1069930481,371247674,974327596,1226973329,2248002,66850487,739778762,288099343,572559674,1936876880,1818324591,1836008224,1702131056,-469753230,-1090255346,738856736,550124049,439093775,-1858465492,680984352,-383134449,353315030,701304620,680984553,2734095,68161305,185540810,288102956,-14642886,-1290852202,539158825,538976288,1109401632,541871169,538976288,538976288,-1761613534,699600680,437206784,253807108,739912716,546388497,254318335,-689362509,739577640,-383180785,254318335,1946167731,-905698289,739053344,974203930,-1761664879,699600680,538977001,1700143136,1869181810,774971502,538980400,572530720,680984553,2732815,70127514,235872458,288102956,-14642886,-737204074,685173033,254547215,-1496627,-1106302826,265158697,549389368]}]],[[{"sector":1,"length":512,"data":[288100111,253807162,739781649,546388497,692267042,1886339872,1734963833,1226863720,1126190402,544240239,825768241,268566562,549389378,288099855,253807162,739781655,546388497,1701990434,1931506547,1701011824,1918984736,544175136,1953394531,1702194793,269877282,545981516,585558238,550314018,1275994249,270729220,1296237654,-417323964,989912608,-1962647536,1145914144,552017956,-853532126,237013280,1459618902,-1962644976,1145914144,552017956,254318335,-853530341,237013280,1879049490,-1962642416,1145914144,552017956,539107362,545857741,296974,75370618,1443766409,277217284,546768008,-414759597,279904273,545981586,681049896,688132108,203484704,-399966160,3149030,-1759458016,1195725600,237013306,-1073740533,-1610310640,978325280,550124224,1190932,77992145,1210196113,541346895,572609609,-1341059584,572559620,659902297,1310737746,1428182095,1196312915,1162368032,1280262944,1194283599,1213219154,542327625,1229868877,542265172,1346454593,559039828,290193442,546374842,1229476898,1380982867,1095911247,1398087757,1193300805,1213219154,542327625,541347393,1431389522,1397051977,1095259168,1145118804,1163153473,2240082,79958389,1344413841,1397966162,1162368032,1095783200,1109411139,1411404353,1329799247,1313428558,573457749,-837714176,1394644740,-1828698299,-1962616815,-420946400,-853532126,237013280,-1610611496,1124393489,539247693,14557415]},{"sector":2,"length":512,"data":[82579896,1296244875,-417323964,539107872,545857741,320014,83235284,1296244875,-417323964,680984352,539564815,545857741,332302,83890669,1296244875,-417323964,572531232,-1994339040,85069344,168949504,237013253,-16775966,-922416367,218160416,-1794831342,-1994348768,84872736,219290112,546569733,909209634,304349218,545850638,332814,84873777,521085119,288100652,269652992,572559621,1397311572,1330794528,1296126535,1363497504,1163020629,1145118803,1129202006,1109410885,1128878913,539831584,541414229,1296912195,541347393,1396785703,658588489,549403170,288100111,-2110123732,317147424,471911456,-2093341912,547889210,332302,85070498,547823765,925833,316538880,549979411,974269457,1095966859,1162629197,585573459,575882585,-31404768,1634935436,1701605485,472654451,975176680,549396641,739322904,985676305,316932225,9372948,92410615,572560382,862742125,909145138,335553079,-1392145389,1525301536,545660986,404498498,540682497,675356806,2725391,93721386,549993152,974203922,739844287,550058513,322830557,-1845623392,-1609619424,694423340,738856748,324075539,-1879177814,-1609619424,694423340,321655596,-1273796096,545914373,748031784,-366388721,749342504,740912655,327483457,985662910,254288048,688991251,723265770,-1324405759,1110191145,-938238464,673230853,304878607,472443433,254542124,741091762,331481154]},{"sector":3,"length":512,"data":[550110674,254547983,579942923,1701990432,1159754611,1948271443,2019893359,572552297,332857403,545392092,336586584,471911456,-819986152,-83880672,1107682835,-416720856,-1401073,-2030098276,680132392,2048781144,696066265,-198616853,218114323,-2096762860,-414441414,1495284248,-1777342670,-99342592,673230853,338485007,254339625,-1357959939,739519529,1090537026,-1341783020,-1089525728,-366406612,752750376,740929295,1178741779,236215040,673230854,338468879,254339625,-1357960002,739388457,1761625666,-2113529836,300368928,304139296,571769856,266818310,-347805420,973145116,404547397,-347805183,66588,103552154,-413654910,550248531,550445125,-350623211,349765700,-413596106,693643330,-414310342,-357953752,-198626727,-1812055530,1028399648,844381004,1312503093,574311997,545988666,550314054,673220862,1496068696,1093413170,1075117312,545848838,1496078376,977349673,-416131040,1495284312,978970418,-353941984,-2095039982,1242894336,686246918,689498444,253817632,8600128,105846059,-555277247,1092651834,-1761614044,689639208,237030688,1308624146,-1744415723,745148192,545995281,-420993983,-853532126,105844256,547437088,403579017,6,1496062490,1093413170,1075117312,545848838,1496078376,977349673,-416131040,1495284312,978970418,-353941984,-2095039982,1242894336,686246918,689498444,253817632,8600128,105846059,-555277247,1092651834,-1761614044]},{"sector":4,"length":512,"data":[17717247,1411419904,1226859880,1344294210,1869836901,543973742,1886220099,1919251573,1836008224,243597421,546242562,1936876886,544108393,808463921,692267040,2037411651,1751607666,1112088692,1866670157,824209522,3225657,200375,1766596751,1936614755,1293968485,1919251553,543973737,1917853741,1634887535,1917853805,1919250543,1864399220,1112088678,248643661,546242564,1752462657,757101167,539905312,1377840707,1935764079,168753152,-585053952,549986362,974203921,253796384,-1088407000,288102432,985669690,1779376280,268439852,-2113926385,317147424,253807648,550058506,572664905,1694532410,-1157624817,548216890,979036737,1279346208,300369235,1381244986,-739818155,1279346208,540689747,1179012952,-1761614044,689114920,1331175482,-1629106,286206102,546650665,545857703,973196302,974251860,608715589,2237159,987050,1163075735,974251847,673221408,203986943,539558928,806101230,216475904,-853540816,253796384,-413910448,1295651855,608519247,576856807,1394644794,-1992669371,1969696,269468160,1226867200,-870313241,973737760,742990025,-2093342174,286259968,253807104,168766489,334255337,1176670522,540876849,1126182964,1297435727,538976334,538976288,843456544,941636896,1329799216,1313690956,268763170,546766866,4670803,1970204,1663180960,976317807,-15782878,1394644794,1140868933,-905959408,540676896,265166993,693430538,1329799712]},{"sector":5,"length":512,"data":[1314213197,1413563209,1397641033,1313164576,1912611413,-905956848,338433824,540693737,1126310033,1936682856,1852776549,1718558821,1701344288,1819239968,1769434988,574252910,1007721728,438356480,-385216724,-1860158892,540090912,1668506948,1953524082,544108393,1881171567,1919381362,2256225,4591815,265166993,693430538,540156448,544698180,1701736266,1699622771,1377858423,1769108581,1818326629,284033058,546373712,-385216562,572533076,1112088627,1699749965,1852797810,1126198369,1970302319,577922420,1511065600,-836726528,1424558607,874651689,1919243040,796091753,603988529,-1862245359,168807968,539579625,1411396898,1394623816,1129469263,1124082245,-1862242799,168807968,539579625,1327511074,1919248500,1919251232,1701013878,291504162,546373747,-385216562,572533076,1850023991,1919950948,1634887535,-1929371027,-905938927,974262048,-14642912,672082072,975787241,253807136,-384553966,974269524,1663180945,1667854184,3875429,7999908,-555277247,1092651834,572712740,237030688,-989855622,-1962902767,680722208,-416734143,550314002,-1616820,608250004,545864233,33294,8131042,1330454667,-417053372,539124258,1414275277,-1992683033,8523296,2098328576,-417054208,1093174271,739453988,1207970066,-1962901998,680918816,-416734142,-853525745,253796384,-413910488,985676305,286138505,-1590026240,-14644448,608315541,1007675177,-1608463072,978325280,336586580]},{"sector":6,"length":512,"data":[-1992638406,1117728,547437088,300373068,237013306,1375731842,-1996456174,7999008,-2112683520,1277201152,538502996,985669837,-836726496,1424558607,757211177,1297040160,1229870413,1230258499,1159745103,1145390158,975318304,975208736,545988769,-413905880,552542227,367481932,1277226784,689366868,237030688,975175910,545988769,317150284,-1927230176,34737696,237013306,976879626,545988769,-397128664,552542226,417748044,550314025,317148230,982589498,-836726496,693430548,1850286624,1768710518,1751326820,1701013871,1920213036,1734418553,577661281,-1944896512,1176537856,538109772,545398989,538109769,-1004789556,-2095039991,550117434,540676879,-1728110447,-383250648,1178216788,974251852,237013280,-1728053128,-1073704685,550117434,168766482,540693737,1428299921,542262611,1229342020,541345102,1263421772,545995298,350704716,-903820000,-384553952,-1860158892,1330913824,1330528544,1380272212,1296189728,1380274208,1095651155,1329799244,1414877261,2249285,9835464,739582154,743762196,546388498,1430340130,1095901252,572540244,546126395,973197582,1162892064,-417053627,-184540094,-905928685,338433568,304895209,572559674,1230127440,572545364,546126395,973197582,1380012064,609834057,2376423,11146293,739713226,743762196,546388498,1297436194,542262594,1109411407,542331977,542262608,1380010051,1163150145,992092242,237014330,1111097809,609440841]},{"sector":7,"length":512,"data":[2376423,11801708,739778762,743762196,546388498,1297436194,542262594,1394624079,542134100,1398032706,976953888,-787603315,1394620929,-417050540,-1325390782,-905922284,338434336,304895209,572559674,1380010051,1163150145,1159746386,1162823747,1330913348,1380143904,542000453,1311725864,992092201,237014330,540672465,608715589,2376423,12457201,168763594,1424561196,540676652,1143087249,543257697,1702129253,543450482,1920102243,1819566949,1495801977,539577903,-1925563614,30477856,609370938,2376423,13112600,1380130955,1310910244,552542242,-417050045,539127330,-1861345075,-1590026240,237014304,1493172704,-905915883,739577632,1329805844,1279870541,1126360868,976309583,1347676450,608453957,573317865,1380012265,609834057,573317865,1414087401,585704531,1407787564,2379860,14423405,1329799354,1279870541,1396776996,1188640,15078823,1414275211,-853535257,609046048,1699947239,1936025970,975319343,-703717235,549075457,1836016418,808663601,744827952,573713463,542327072,367984689,545980656,333927500,1310772512,585573453,544698180,1701736266,1699618931,1378841463,1769108581,1818326629,546126370,973198862,1663180986,976317807,741355571,574041189,542327072,371785777,545980666,384259148,1310772512,585573453,541411412,1381322579,975324483,-703717235,549075457,1836016418,808663601,744827952,1092624951,3219539,17045062,1394745530]},{"sector":8,"length":512,"data":[978211395,545398818,1347704143,1092637781,321069139,236343296,740346369,1778389548,1342248982,1163089217,1279346407,-1791343277,-1994348768,30150176,571900160,-417054207,545995486,585573442,550314018,81934,19666660,-1828773749,690242088,-853536026,-14644448,-2080429931,740573736,689056787,1141892905,237030688,975176130,1074667681,-1590026239,1109429024,-1761614044,539564328,550117581,680656684,317335825,-1858465236,572531232,550124091,680656684,317335825,301994540,-1862191593,739386144,976954434,1159760672,-417052605,539121954,1128603887,585573448,-853532039,321098016,992231980,1075258368,-14644479,689055907,237030688,1258291490,-1962849769,681901856,266742034,550314112,1398096208,1381295941,-1858452139,1479283235,608585295,392101947,608239956,673482215,304653567,304294953,393347113,545390952,538109769,-1828773684,690241832,1914157824,673221377,-14117377,608249987,304892204,266873129,552476703,1093174271,742992932,-420992750,254318335,539568397,-2080431889,740573480,689056841,680984551,539590415,-1710350131,400818177,545980796,1093174271,742992932,-1627886,168765590,550314025,1093174271,742992932,585574674,-167763424,-1862168553,679739168,1227629633,992547372,-1709703680,1226867457,-1541926400,-14644479,689055908,-853536282,19009056,-1374145024,1344310017,1163089217,1344326944,1163089217,1279346407,-1858452141,1479283235]}]],[[{"sector":1,"length":512,"data":[992235087,-1206370304,237013249,1610613026,-1744715240,745148192,-1155515887,546644026,545857703,973078542,237013280,-905969654,-1962816488,266851616,550314052,-903857472,738987808,978643225,572559648,1397311572,1330794528,1296126535,1363497504,1163020629,1213472851,-1858461115,-384512480,572533076,1314476865,1330792515,1398099790,1297040160,1229870413,1230258499,542330447,1346454593,777143636,-2128594398,-853975808,-719287551,538447847,985669837,253807136,304884748,572559674,1162092609,1162037590,1296651296,1414876997,1381123360,1210077775,1327518529,1381319491,776226130,546388514,1262570786,1431511109,1411401042,1210074440,1464095297,541413953,1126191945,1163022927,1498174531,546388514,1413829410,743462176,1162368032,1380982862,542331717,1163152965,992095826,237014330,540672465,11025088,30284131,428409000,608240081,975315687,585573442,1380137506,572712740,-374267846,-400277216,680984550,2690319,30546468,-555277247,545988666,585573441,550314018,536990222,-1960795846,680722208,-433511359,550314002,-1778442101,679739176,321659969,690557484,541331431,-1039261491,-1590026239,30543392,-1590026182,1092651808,-1644508,689514646,-1860121312,992231712,-1590026182,740346400,287871487,739437097,546388498,992092194,740346426,287871487,739437097,608320018,679739367,304882754,680722220,-366402494,1275078930,-1962814694,-400277216,680984550]},{"sector":2,"length":512,"data":[539561231,608248046,-1761614104,539564328,608313549,-383499545,1409295425,-1308503014,1828752954,-1073621478,550117434,202320914,540693737,1296965777,9517604,31464097,982596241,349053073,539579625,1344285986,1701011820,1970239776,1633886322,539782252,543452769,1702063721,1948284018,2254184,32119507,349053073,539579625,1881153570,1701736296,1667592736,1702259045,1852383346,1948282740,1830839656,1835361391,1919885356,453312546,546374127,1424561358,539107369,1769435936,543712116,1920298873,1952539680,1702043745,1919295604,1948282223,543911009,2256756,32774975,349053073,539579625,1679826978,778138721,1701336096,1919950958,544437093,1163152965,1869881426,1734697504,539913833,975314976,540709152,459866257,546374142,1424561358,757211177,1163022368,1176523603,1411395633,1330061391,542069792,1431192909,9517602,33561459,-787603315,460914689,9306627,34741146,-903857472,254546464,978643215,572559648,1129530692,1414547794,575557449,471584256,354470402,1424561196,546381882,544096546,1853453153,1869768803,1937076078,1836016416,1768846701,1769234787,1814064751,577465961,639368192,-836726526,693430548,1769415200,1646292076,1936007269,1818386804,1701344105,1700929636,1701148532,1752440942,587211365,-1862127588,-384512480,572533076,1701602675,1684370531,1919251232,1701013878,1684955424,1701344288,475267106,546374202,1424561358,1226973225]},{"sector":3,"length":512,"data":[1344294210,1330860613,541868366,1347243843,1380275285,1935745068,1819239968,1937207148,2063606330,-905821156,338434592,540693737,1109532817,543454561,1702125938,265173794,693430541,808465186,479854626,546374222,1424561358,1344413737,1953067617,-834985351,1424559631,574956073,1478278144,-836726526,693430548,1631855136,1646289268,577991785,235916859,992564457,-167758046,-1862114788,-384512480,572533076,1886352467,1953063456,-834985357,1424559631,824326953,1866735648,1867128951,745760110,1162368032,1431261984,574964562,1813844224,-836726526,1424559631,841097257,1699946528,1936025970,2240815,41295175,252649674,1424561196,546381882,1953517346,1936617321,1629500192,908092526,1819042080,1713403759,1948283503,1629513064,1702260578,494338082,546374272,1424561358,1663180841,1634885992,1919251555,1769239401,1948283747,1700929647,1886745376,1701407856,2036473956,497549346,546374282,1424561358,1948393513,1965057384,544367987,1679847284,1852401253,543236197,1835888483,1667853941,1869182049,-620748178,-1862101987,-384512480,572533076,1802398060,544175136,1701344367,1702043762,1667855986,1864397669,1868767346,1953853549,779317861,502333474,545981077,1162104653,1646454564,550314018,171534,43589159,336535754,1424561196,546381882,1970231586,1851876128,1818587936,544498533,1663053876,1836412015,1768169582,1634496627,1919885433,509149218,546374298,1424561358]},{"sector":4,"length":512,"data":[941760553,1868767280,1852667244,1936286752,2036427888,544825888,1936028272,1735289203,540100128,2257519,43720328,349053073,539579625,540165666,1868981602,1931502962,1667591269,1735289204,1852140832,1751326837,1701013871,-1224728018,-905798114,739774240,978643220,572559648,1397051984,1312890963,1162551385,1330913369,542066464,1293963092,576015941,517275707,1380123295,987686692,1380130955,572712740,237030688,975176351,9314465,437911552,43720328,349053073,539579625,540165666,1868981602,1931502962,1667591269,1735289204,1852140832,1751326837,1701013871,-1224728018,-905798114,739774240,978643220,572559648,1397051984,1312890963,1162551385,1330913369,542066464,1293963092,1819042080,1713403759,1948283503,1629513064,1702260578,494338082,546374272,1424561358,1663180841,1634885992,1919251555,1769239401,1948283747,1700929647,1886745376,1701407856,2036473956,497549346,546374282,1424561358,1948393513,1965057384,544367987,1679847284,1852401253,543236197,1835888483,1667853941,1869182049,-620748178,-1862101987,-384512480,572533076,1802398060,544175136,1701344367,1702043762,1667855986,1864397669,1868767346,1953853549,779317861,502333474,545981077,1162104653,1646454564,550314018,171534,43589159,336535754,1424561196,546381882,1970231586,1851876128,1818587936,544498533,1663053876,1836412015,1768169582,1634496627,1919885433,509149218,546374298,1424561358]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]}]],[[{"sector":1,"length":512,"pattern":-151587082,"data":[]},{"sector":2,"length":512,"pattern":-151587082,"data":[]},{"sector":3,"length":512,"pattern":-151587082,"data":[]},{"sector":4,"length":512,"pattern":-151587082,"data":[]},{"sector":5,"length":512,"pattern":-151587082,"data":[]},{"sector":6,"length":512,"pattern":-151587082,"data":[]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]}]]]
      • components.xsl
        <?xml version="1.0" encoding="UTF-8"?>
        <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
        <!DOCTYPE xsl:stylesheet [
        ]>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        	<xsl:param name="rootDir" select="''"/>
        	<xsl:param name="generator" select="'client'"/>
        
        	<xsl:variable name="MACHINECLASS">pc</xsl:variable>
        	<xsl:variable name="APPCLASS">pcjs</xsl:variable>
        	<xsl:variable name="APPVERSION">1.18.3</xsl:variable>
        	<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
        
        	<xsl:template name="componentStyles">
        		<link rel="stylesheet" type="text/css" href="components.css"/>
        	</xsl:template>
        
        	<xsl:template name="componentScripts">
        		<xsl:param name="component"/>
        		<script type="text/javascript" src="{$component}.js"> </script>
        	</xsl:template>
        
        	<xsl:template name="componentIncludes">
        		<xsl:param name="component"/>
        		<xsl:call-template name="componentScripts"><xsl:with-param name="component" select="$component"/></xsl:call-template>
        	</xsl:template>
        
        	<xsl:template name="machine">
        		<xsl:param name="href">/devices/pc/machine/5150/mda/64kb/machine.xml</xsl:param>
        		<xsl:param name="state" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="$href"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/machine">
        			<xsl:with-param name="machineState" select="$state"/>
        		</xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="machine[@ref]">
        		<xsl:param name="machineState" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/machine">
        			<xsl:with-param name="machine" select="@id"/>
        			<xsl:with-param name="machineState">
        				<xsl:choose>
        					<xsl:when test="$machineState != ''"><xsl:value-of select="$machineState"/></xsl:when>
        					<xsl:otherwise><xsl:value-of select="@state"/></xsl:otherwise>
        				</xsl:choose>
        			</xsl:with-param>
        		</xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="machine[not(@ref)]">
        		<xsl:param name="machine"><xsl:value-of select="@id"/></xsl:param>
        		<xsl:param name="machineState" select="''"/>
        		<xsl:variable name="machineStyle">
        			<xsl:if test="@float">float:<xsl:value-of select="@float"/></xsl:if>
        		</xsl:variable>
        		<div id="{$machine}" class="machine {@class}js" style="{$machineStyle}">
        			<xsl:call-template name="component">
        				<xsl:with-param name="machine" select="$machine"/>
        				<xsl:with-param name="machineState">
        					<xsl:choose>
        						<xsl:when test="$machineState != ''"><xsl:value-of select="$machineState"/></xsl:when>
        						<xsl:otherwise><xsl:value-of select="@state"/></xsl:otherwise>
        					</xsl:choose>
        				</xsl:with-param>
        				<xsl:with-param name="component" select="'machine'"/>
        				<xsl:with-param name="class"><xsl:value-of select="@class"/>js</xsl:with-param>
        				<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
        				<xsl:with-param name="url"><xsl:value-of select="@url"/></xsl:with-param>
        			</xsl:call-template>
        		</div>
        	</xsl:template>
        
        	<xsl:template match="component[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/component">
        			<xsl:with-param name="machine" select="$machine"/>
        		</xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="component[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class" select="@class"/>
        			<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template name="component">
        		<xsl:param name="machine" select="''"/>
        		<xsl:param name="machineState" select="''"/>
        		<xsl:param name="component" select="name(.)"/>
        		<xsl:param name="class" select="''"/>
        		<xsl:param name="parms" select="''"/>
        		<xsl:param name="url" select="''"/>
        		<xsl:variable name="id">
        			<xsl:choose>
        				<xsl:when test="$component = 'machine'"><xsl:value-of select="$machine"/>.machine</xsl:when>
        				<xsl:when test="$machine != '' and @id"><xsl:value-of select="$machine"/>.<xsl:value-of select="@id"/></xsl:when>
        				<xsl:when test="$machine != ''"><xsl:value-of select="$machine"/>.<xsl:value-of select="$component"/></xsl:when>
        				<xsl:when test="@id"><xsl:value-of select="@id"/></xsl:when>
        				<xsl:otherwise><xsl:value-of select="$component"/></xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="componentURL">
        			<xsl:choose>
        				<xsl:when test="$component = 'machine'">url:'<xsl:value-of select="$url"/>'</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="name">
        			<xsl:choose>
        				<xsl:when test="name"><xsl:value-of select="name"/></xsl:when>
        				<xsl:when test="@name"><xsl:value-of select="@name"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="comment">
        			<xsl:choose>
        				<xsl:when test="@comment">,comment:'<xsl:value-of select="@comment"/>'</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="border">
        			<xsl:choose>
        				<xsl:when test="@border = '1'">border:1px solid black;border-radius:15px;</xsl:when>
        				<xsl:when test="@border">border:<xsl:value-of select="@border"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="left">
        			<xsl:choose>
        				<xsl:when test="@left">left:<xsl:value-of select="@left"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="top">
        			<xsl:choose>
        				<xsl:when test="@top">top:<xsl:value-of select="@top"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="width">
        			<xsl:choose>
        				<xsl:when test="@width">
        					<xsl:choose>
        						<xsl:when test="$left != '' or $top != ''">width:<xsl:value-of select="@width"/>;</xsl:when>
        						<xsl:otherwise>width:auto;max-width:<xsl:value-of select="@width"/>;</xsl:otherwise>
        					</xsl:choose>
        				</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="height">
        			<xsl:choose>
        				<xsl:when test="@height">height:<xsl:value-of select="@height"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="padding">
        			<xsl:choose>
        				<xsl:when test="@padding">padding:<xsl:value-of select="@padding"/>;</xsl:when>
        				<xsl:otherwise>
        					<xsl:if test="@padtop">padding-top:<xsl:value-of select="@padtop"/>;</xsl:if>
        					<xsl:if test="@padright">padding-right:<xsl:value-of select="@padright"/>;</xsl:if>
        					<xsl:if test="@padbottom">padding-bottom:<xsl:value-of select="@padbottom"/>;</xsl:if>
        					<xsl:if test="@padleft">padding-left:<xsl:value-of select="@padleft"/>;</xsl:if>
        				</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="pos">
        			<xsl:choose>
        				<xsl:when test="@pos = 'left'">float:left;</xsl:when>
        				<xsl:when test="@pos = 'right'">float:right;</xsl:when>
        				<xsl:when test="@pos = 'center'">margin:0 auto;</xsl:when>
        				<xsl:when test="@pos">position:<xsl:value-of select="@pos"/>;</xsl:when>
        				<xsl:when test="$left != '' or $top != ''">position:relative;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="style">
        			<xsl:if test="$component = 'machine'">overflow:auto;width:100%;</xsl:if>
        			<xsl:if test="@background">background-color:<xsl:value-of select="@background"/>;</xsl:if>
        			<xsl:if test="@style"><xsl:value-of select="@style"/></xsl:if>
        		</xsl:variable>
        		<xsl:variable name="componentClass">
        			<xsl:value-of select="$APPCLASS"/><xsl:text>-</xsl:text><xsl:value-of select="$component"/><xsl:text> </xsl:text><xsl:value-of select="$APPCLASS"/><xsl:text>-component</xsl:text>
        		</xsl:variable>
        		<div id="{$id}" class="{$componentClass}" style="{$width}{$height}{$pos}{$left}{$top}{$padding}" data-value="{$componentURL}">
        			<xsl:if test="$component = 'machine'">
        				<xsl:apply-templates select="name" mode="machine"/>
        			</xsl:if>
        			<xsl:if test="$component != 'machine'">
        				<xsl:apply-templates select="name" mode="component"/>
        			</xsl:if>
        			<div class="{$APPCLASS}-container" style="{$border}{$style}">
        				<xsl:if test="$component = 'machine'">
        					<xsl:apply-templates select="menu" mode="machine"/>
        				</xsl:if>
        				<xsl:if test="$component != 'machine'">
        					<xsl:apply-templates select="menu" mode="component"/>
        				</xsl:if>
        				<xsl:if test="$class != '' and $component != 'machine'">
        					<div class="{$APPCLASS}-{$class}-object" data-value="id:'{$id}',name:'{$name}'{$comment}{$parms}"> </div>
        				</xsl:if>
        				<xsl:if test="control">
        					<div class="{$APPCLASS}-controls">
        						<xsl:apply-templates select="control" mode="component"/>
        					</div>
        				</xsl:if>
        				<xsl:apply-templates>
        					<xsl:with-param name="machine" select="$machine"/>
        					<xsl:with-param name="machineState" select="$machineState"/>
        				</xsl:apply-templates>
        			</div>
        			<xsl:if test="$component = 'machine'">
        				<xsl:choose>
        					<xsl:when test="$url != ''"><div class="{$APPCLASS}-reference">[<a href="{$url}">XML</a>]</div></xsl:when>
        					<xsl:otherwise/>
        				</xsl:choose>
        				<div class="{$APPCLASS}-copyright">
        					<a href="http://{$SITEHOST}" target="_blank">PCjs</a> v<xsl:value-of select="$APPVERSION"/> © 2012-2015 by <a href="http://twitter.com/jeffpar" target="_blank">@jeffpar</a>
        				</div>
        				<div style="clear:both"> </div>
        			</xsl:if>
        		</div>
        	</xsl:template>
        
        	<xsl:template match="name" mode="machine">
        		<xsl:variable name="pos">
        			<xsl:choose>
        				<xsl:when test="@pos = 'center'">text-align:center;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<h2 style="{$pos}"><xsl:apply-templates/></h2>
        	</xsl:template>
        
        	<xsl:template match="name" mode="component">
        		<div class="{$APPCLASS}-name"><xsl:apply-templates/></div>
        	</xsl:template>
        
        	<xsl:template match="menu" mode="component">
        		<xsl:apply-templates mode="component"/>
        	</xsl:template>
        
        	<xsl:template match="title" mode="component">
        		<div class="{$APPCLASS}-menu"><xsl:apply-templates/></div>
        	</xsl:template>
        
        	<xsl:template match="control" mode="component">
        		<xsl:variable name="type">
        			<xsl:text>type:'</xsl:text><xsl:value-of select="@type"/><xsl:text>'</xsl:text>
        		</xsl:variable>
        		<xsl:variable name="binding">
        			<xsl:text>binding:'</xsl:text><xsl:value-of select="@binding"/><xsl:text>'</xsl:text>
        		</xsl:variable>
        		<xsl:variable name="border">
        			<xsl:choose>
        				<xsl:when test="@border = '1'">border:1px solid black;</xsl:when>
        				<xsl:when test="@border">border:<xsl:value-of select="@border"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="width">
        			<xsl:choose>
        				<xsl:when test="@width">width:<xsl:value-of select="@width"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="height">
        			<xsl:choose>
        				<xsl:when test="@height">height:<xsl:value-of select="@height"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="left">
        			<xsl:choose>
        				<xsl:when test="@left">left:<xsl:value-of select="@left"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="top">
        			<xsl:choose>
        				<xsl:when test="@top">top:<xsl:value-of select="@top"/>;</xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="padding">
        			<xsl:choose>
        				<xsl:when test="@padding">padding:<xsl:value-of select="@padding"/>;</xsl:when>
        				<xsl:otherwise>
        					<xsl:if test="@padtop">padding-top:<xsl:value-of select="@padtop"/>;</xsl:if>
        					<xsl:if test="@padright">padding-right:<xsl:value-of select="@padright"/>;</xsl:if>
        					<xsl:if test="@padbottom">padding-bottom:<xsl:value-of select="@padbottom"/>;</xsl:if>
        					<xsl:if test="@padleft">padding-left:<xsl:value-of select="@padleft"/>;</xsl:if>
        				</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="pos">
        			<xsl:choose>
        				<xsl:when test="@pos = 'left'">float:left;</xsl:when>
        				<xsl:when test="@pos = 'right'">float:right;</xsl:when>
        				<xsl:when test="@pos = 'center'">margin:0 auto;</xsl:when>
        				<xsl:when test="@pos">position:<xsl:value-of select="@pos"/>;</xsl:when>
        				<xsl:when test="$left != '' or $top != ''">position:relative;</xsl:when>
        				<xsl:otherwise><xsl:if test="$left = ''">float:left;</xsl:if></xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="style">
        			<xsl:choose>
        				<xsl:when test="@style"><xsl:value-of select="@style"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="containerClass">
        			<xsl:if test="@type = 'container' and @class"><xsl:text> </xsl:text><xsl:value-of select="@class"/></xsl:if>
        		</xsl:variable>
        		<xsl:variable name="containerStyle">
        			<xsl:value-of select="$pos"/><xsl:value-of select="$left"/><xsl:value-of select="$top"/><xsl:value-of select="$padding"/>
        			<xsl:choose>
        				<xsl:when test="@type = 'container'"><xsl:value-of select="$border"/><xsl:value-of select="$width"/><xsl:value-of select="$height"/><xsl:value-of select="$style"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<div class="{$APPCLASS}-control{$containerClass}" style="{$containerStyle}">
        			<xsl:variable name="fontsize">
        				<xsl:choose>
        					<xsl:when test="@size = 'large' or @size = 'small'">font-size:<xsl:value-of select="@size"/>;</xsl:when>
        					<xsl:otherwise/>
        				</xsl:choose>
        			</xsl:variable>
        			<xsl:variable name="subClass">
        				<xsl:if test="@label"><xsl:text> </xsl:text><xsl:value-of select="$APPCLASS"/><xsl:text>-label</xsl:text></xsl:if>
        			</xsl:variable>
        			<xsl:variable name="labelWidth">
        				<xsl:if test="@labelwidth">width:<xsl:value-of select="@labelwidth"/>;</xsl:if>
        			</xsl:variable>
        			<xsl:variable name="labelStyle">
        				<xsl:choose>
        					<xsl:when test="@labelstyle"><xsl:value-of select="@labelstyle"/></xsl:when>
        					<xsl:otherwise>text-align:right;</xsl:otherwise>
        				</xsl:choose>
        			</xsl:variable>
        			<xsl:if test="@label">
        				<xsl:if test="not(@labelpos) or @labelpos = 'left'">
        					<div class="{$APPCLASS}-label" style="{$labelWidth}{$labelStyle}"><xsl:value-of select="@label"/></div>
        				</xsl:if>
        			</xsl:if>
        			<xsl:choose>
        				<xsl:when test="@type = 'canvas'">
        					<canvas class="{$APPCLASS}-binding {$APPCLASS}-canvas" width="{@width}" height="{@height}" style="-webkit-user-select:none;{$border}{$fontsize}{$style}" data-value="{$type},{$binding}"><xsl:apply-templates/></canvas>
        				</xsl:when>
        				<xsl:when test="@type = 'button'">
        					<button class="{$APPCLASS}-binding" style="-webkit-user-select:none;{$border}{$width}{$height}{$fontsize}{$style}" data-value="{$type},{$binding}"><xsl:apply-templates/></button>
        				</xsl:when>
        				<xsl:when test="@type = 'list'">
        					<select class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$fontsize}{$style}" data-value="{$type},{$binding}">
        						<xsl:apply-templates select="disk|app|manifest" mode="component"/>
        					</select>
        				</xsl:when>
        				<xsl:when test="@type = 'text'">
        					<input class="{$APPCLASS}-binding" type="text" style="{$border}{$width}{$height}{$style}" data-value="{$type},{$binding}" value="{.}" autocapitalize="off" autocorrect="off"/>
        				</xsl:when>
        				<xsl:when test="@type = 'submit'">
        					<input class="{$APPCLASS}-binding" type="submit" style="{$border}{$fontsize}{$style}" data-value="{$type},{$binding}" value="{.}"/>
        				</xsl:when>
        				<xsl:when test="@type = 'textarea'">
        					<textarea class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$style}" data-value="{$type},{$binding}" readonly="readonly"> </textarea>
        				</xsl:when>
        				<xsl:when test="@type = 'heading'">
        					<div><xsl:value-of select="."/></div>
        				</xsl:when>
        				<xsl:when test="@type = 'file'">
        					<form class="{$APPCLASS}-binding" data-value="{$type},{$binding}">
        						<fieldset class="{$APPCLASS}-fieldset">
        							<input type="file"/>
        							<input type="submit" value="Mount" disabled="true"/>
        						</fieldset>
        					</form>
        				</xsl:when>
        				<xsl:when test="@type = 'led'">
        					<div class="{$APPCLASS}-binding {$APPCLASS}-{@type}" data-value="{$type},{$binding}"><xsl:value-of select="."/></div>
        				</xsl:when>
        				<xsl:when test="@type = 'separator'">
        					<hr/>
        				</xsl:when>
        				<xsl:when test="@type = 'container'">
        					<xsl:apply-templates mode="component"/>
        				</xsl:when>
        				<xsl:when test="not(@type)">
        					<div style="clear:both"> </div>
        				</xsl:when>
        				<xsl:otherwise>
        					<div class="{$APPCLASS}-binding{$subClass} {$APPCLASS}-{@type}" style="-webkit-user-select:none;{$border}{$width}{$height}{$fontsize}{$style}" data-value="{$type},{$binding}"><xsl:apply-templates/></div>
        				</xsl:otherwise>
        			</xsl:choose>
        			<xsl:if test="@label">
        				<xsl:if test="@labelpos = 'right'">
        					<div class="{$APPCLASS}-label" style="{$labelWidth}{$labelStyle}"><xsl:value-of select="@label"/></div>
        				</xsl:if>
        				<div style="clear:both"> </div>
        			</xsl:if>
        		</div>
        	</xsl:template>
        
        	<xsl:template match="disk[@ref]" mode="component">
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/disk" mode="component"/>
        	</xsl:template>
        
        	<xsl:template match="disk[not(@ref)]" mode="component">
        		<xsl:variable name="desc">
        			<xsl:if test="@desc">
        				<xsl:text>desc:'</xsl:text><xsl:value-of select="@desc"/><xsl:text>'</xsl:text>
        				<xsl:if test="@href">
        					<xsl:text>,href:'</xsl:text><xsl:value-of select="@href"/><xsl:text>'</xsl:text>
        				</xsl:if>
        			</xsl:if>
        		</xsl:variable>
        		<option value="{@path}" data-value="{$desc}"><xsl:if test="name"><xsl:value-of select="name"/></xsl:if><xsl:if test="not(name)"><xsl:value-of select="."/></xsl:if></option>
        	</xsl:template>
        
        	<xsl:template match="app[@ref]" mode="component">
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/app" mode="component"/>
        	</xsl:template>
        
        	<xsl:template match="app[not(@ref)]" mode="component">
        		<xsl:variable name="desc">
        			<xsl:if test="@desc">
        				<xsl:text>desc:'</xsl:text><xsl:value-of select="@desc"/><xsl:text>'</xsl:text>
        				<xsl:if test="@href">
        					<xsl:text>,href:'</xsl:text><xsl:value-of select="@href"/><xsl:text>'</xsl:text>
        				</xsl:if>
        			</xsl:if>
        		</xsl:variable>
        		<xsl:variable name="path">
        			<xsl:if test="@path"><xsl:value-of select="@path"/></xsl:if>
        		</xsl:variable>
        		<xsl:variable name="files">
        			<xsl:for-each select="file"><xsl:if test="position() = 1"><xsl:value-of select="$path"/></xsl:if><xsl:value-of select="@name"/><xsl:if test="position() != last()">;</xsl:if></xsl:for-each>
        		</xsl:variable>
        		<option value="{$files}" data-value="{$desc}"><xsl:value-of select="@name"/></option>
        	</xsl:template>
        
        	<xsl:template match="manifest[@ref]" mode="component">
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/manifest" mode="component">
        			<xsl:with-param name="disk"><xsl:value-of select="@disk"/></xsl:with-param>
        		</xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="manifest[not(@ref)]" mode="component">
        		<xsl:param name="disk"><xsl:value-of select="@disk"/></xsl:param>
        		<xsl:if test="$disk != ''">
        			<xsl:variable name="prefix">
        				<xsl:if test="title/@prefix"><xsl:value-of select="title/@prefix"/><xsl:text>: </xsl:text></xsl:if>
        			</xsl:variable>
        			<xsl:for-each select="disk">
        				<xsl:if test="$disk = @id or $disk = '*'">
        					<xsl:variable name="name">
        						<xsl:choose>
        							<xsl:when test="name"><xsl:value-of select="$prefix"/><xsl:value-of select="name"/></xsl:when>
        							<xsl:when test="normalize-space(./text()) != ''">
        								<xsl:value-of select="$prefix"/><xsl:value-of select="normalize-space(./text())"/>
        							</xsl:when>
        							<xsl:otherwise>
        								<xsl:value-of select="../title"/><xsl:if test="../version != ''"><xsl:text> </xsl:text><xsl:value-of select="../version"/></xsl:if>
        							</xsl:otherwise>
        						</xsl:choose>
        					</xsl:variable>
        					<xsl:variable name="link">
        						<xsl:if test="link">
        							<xsl:text>desc:'</xsl:text><xsl:value-of select="link"/><xsl:text>'</xsl:text>
        							<xsl:if test="link/@href">
        								<xsl:text>,href:'</xsl:text><xsl:value-of select="link/@href"/><xsl:text>'</xsl:text>
        							</xsl:if>
        						</xsl:if>
        					</xsl:variable>
        					<xsl:if test="@href">
        						<option value="{@href}" data-value="{$link}"><xsl:value-of select="$name"/></option>
        					</xsl:if>
        					<xsl:if test="not(@href)">
        						<xsl:variable name="dir">
        							<xsl:if test="@dir"><xsl:value-of select="@dir"/></xsl:if>
        						</xsl:variable>
        						<xsl:variable name="files">
        							<xsl:for-each select="file"><xsl:if test="position() = 1"><xsl:value-of select="$dir"/></xsl:if><xsl:value-of select="@dir"/><xsl:value-of select="."/><xsl:if test="position() != last()">;</xsl:if></xsl:for-each>
        						</xsl:variable>
        						<option value="{$files}" data-value="{$link}"><xsl:value-of select="$name"/></option>
        					</xsl:if>
        				</xsl:if>
        			</xsl:for-each>
        		</xsl:if>
        	</xsl:template>
        
        	<xsl:template match="name">
        	</xsl:template>
        
        	<xsl:template match="title">
        	</xsl:template>
        
        	<xsl:template match="control">
        	</xsl:template>
        
        	<xsl:template match="cpu[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/cpu"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="cpu[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="model">
        			<xsl:choose>
        				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
        				<xsl:otherwise>8088</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="cycles">
        			<xsl:choose>
        				<xsl:when test="@cycles"><xsl:value-of select="@cycles"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="multiplier">
        			<xsl:choose>
        				<xsl:when test="@multiplier"><xsl:value-of select="@multiplier"/></xsl:when>
        				<xsl:otherwise>1</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="autoStart">
        			<xsl:choose>
        				<xsl:when test="@autostart"><xsl:value-of select="@autostart"/></xsl:when>
        				<xsl:otherwise>null</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="csStart">
        			<xsl:choose>
        				<xsl:when test="@csstart"><xsl:value-of select="@csstart"/></xsl:when>
        				<xsl:otherwise>-1</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="csInterval">
        			<xsl:choose>
        				<xsl:when test="@csinterval"><xsl:value-of select="@csinterval"/></xsl:when>
        				<xsl:otherwise>-1</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="csStop">
        			<xsl:choose>
        				<xsl:when test="@csstop"><xsl:value-of select="@csstop"/></xsl:when>
        				<xsl:otherwise>-1</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class" select="'cpu'"/>
        			<xsl:with-param name="parms">,model:<xsl:value-of select="$model"/>,cycles:<xsl:value-of select="$cycles"/>,multiplier:<xsl:value-of select="$multiplier"/>,autoStart:<xsl:value-of select="$autoStart"/>,csStart:<xsl:value-of select="$csStart"/>,csInterval:<xsl:value-of select="$csInterval"/>,csStop:<xsl:value-of select="$csStop"/></xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="chipset[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/chipset"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="chipset[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="model">
        			<xsl:choose>
        				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
        				<xsl:otherwise>5150</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="sw1">
        			<xsl:choose>
        				<xsl:when test="@sw1"><xsl:value-of select="@sw1"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="sw2">
        			<xsl:choose>
        				<xsl:when test="@sw2"><xsl:value-of select="@sw2"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="sound">
        			<xsl:choose>
        				<xsl:when test="@sound"><xsl:value-of select="@sound"/></xsl:when>
        				<xsl:otherwise>true</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="scaletimers">
        			<xsl:choose>
        				<xsl:when test="@scaletimers"><xsl:value-of select="@scaletimers"/></xsl:when>
        				<xsl:otherwise>false</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="floppies">
        			<xsl:choose>
        				<xsl:when test="@floppies"><xsl:value-of select="@floppies"/></xsl:when>
        				<xsl:otherwise>{}</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="monitor">
        			<xsl:choose>
        				<xsl:when test="@monitor"><xsl:value-of select="@monitor"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="rtcdate">
        			<xsl:choose>
        				<xsl:when test="@rtcdate"><xsl:value-of select="@rtcdate"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">chipset</xsl:with-param>
        			<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',scaleTimers:<xsl:value-of select="$scaletimers"/>,sw1:'<xsl:value-of select="$sw1"/>',sw2:'<xsl:value-of select="$sw2"/>',sound:<xsl:value-of select="$sound"/>,floppies:<xsl:value-of select="$floppies"/>,monitor:'<xsl:value-of select="$monitor"/>',rtcDate:'<xsl:value-of select="$rtcdate"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="keyboard[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/keyboard"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="keyboard[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="model">
        			<xsl:choose>
        				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">keyboard</xsl:with-param>
        			<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="serial[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/serial"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="serial[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="adapter">
        			<xsl:choose>
        				<xsl:when test="@adapter"><xsl:value-of select="@adapter"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="binding">
        			<xsl:choose>
        				<xsl:when test="@binding"><xsl:value-of select="@binding"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">serial</xsl:with-param>
        			<xsl:with-param name="parms">,adapter:<xsl:value-of select="$adapter"/>,binding:'<xsl:value-of select="$binding"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="mouse[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/mouse"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="mouse[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="serial">
        			<xsl:choose>
        				<xsl:when test="@serial"><xsl:value-of select="@serial"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">mouse</xsl:with-param>
        			<xsl:with-param name="parms">,serial:'<xsl:value-of select="$serial"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="fdc[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/fdc">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="mount" select="@automount"/>
        		</xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="fdc[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:param name="mount" select="''"/>
        		<xsl:variable name="automount">
        			<xsl:choose>
        				<xsl:when test="$mount != ''"><xsl:value-of select="$mount"/></xsl:when>
        				<xsl:otherwise><xsl:value-of select="@automount"/></xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">fdc</xsl:with-param>
        			<xsl:with-param name="parms">,autoMount:'<xsl:value-of select="$automount"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="hdc[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/hdc"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="hdc[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="drives">
        			<xsl:choose>
        				<xsl:when test="@drives"><xsl:value-of select="@drives"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="type">
        			<xsl:choose>
        				<xsl:when test="@type"><xsl:value-of select="@type"/></xsl:when>
        				<xsl:otherwise>xt</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">hdc</xsl:with-param>
        			<xsl:with-param name="parms">,drives:'<xsl:value-of select="$drives"/>',type:'<xsl:value-of select="$type"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="rom[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/rom"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="rom[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="addr">
        			<xsl:choose>
        				<xsl:when test="@addr"><xsl:value-of select="@addr"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="size">
        			<xsl:choose>
        				<xsl:when test="@size"><xsl:value-of select="@size"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="alias">
        			<xsl:choose>
        				<xsl:when test="@alias"><xsl:value-of select="@alias"/></xsl:when>
        				<xsl:otherwise>null</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="file">
        			<xsl:choose>
        				<xsl:when test="@file"><xsl:value-of select="@file"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="notify">
        			<xsl:choose>
        				<xsl:when test="@notify"><xsl:value-of select="@notify"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">rom</xsl:with-param>
        			<xsl:with-param name="parms">,addr:<xsl:value-of select="$addr"/>,size:<xsl:value-of select="$size"/>,alias:<xsl:value-of select="$alias"/>,file:'<xsl:value-of select="$file"/>',notify:'<xsl:value-of select="$notify"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="ram[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/ram"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="ram[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="addr">
        			<xsl:choose>
        				<xsl:when test="@addr"><xsl:value-of select="@addr"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="size">
        			<xsl:choose>
        				<xsl:when test="@size"><xsl:value-of select="@size"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="test">
        			<xsl:choose>
        				<xsl:when test="@test"><xsl:value-of select="@test"/></xsl:when>
        				<xsl:otherwise>true</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">ram</xsl:with-param>
        			<xsl:with-param name="parms">,addr:<xsl:value-of select="$addr"/>,size:<xsl:value-of select="$size"/>,test:<xsl:value-of select="$test"/></xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="video[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/video"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="video[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="model">
        			<xsl:choose>
        				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="mode">
        			<xsl:choose>
        				<xsl:when test="@mode"><xsl:value-of select="@mode"/></xsl:when>
        				<xsl:otherwise>7</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="screenWidth">
        			<xsl:choose>
        				<xsl:when test="@screenwidth"><xsl:value-of select="@screenwidth"/></xsl:when>
        				<xsl:otherwise>256</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="screenHeight">
        			<xsl:choose>
        				<xsl:when test="@screenheight"><xsl:value-of select="@screenheight"/></xsl:when>
        				<xsl:otherwise>224</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="memory">
        			<xsl:choose>
        				<xsl:when test="@memory"><xsl:value-of select="@memory"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="switches">
        			<xsl:choose>
        				<xsl:when test="@switches"><xsl:value-of select="@switches"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="scale">
        			<xsl:choose>
        				<xsl:when test="@scale"><xsl:value-of select="@scale"/></xsl:when>
        				<xsl:otherwise>false</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="charCols">
        			<xsl:choose>
        				<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
        				<xsl:otherwise>80</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="charRows">
        			<xsl:choose>
        				<xsl:when test="@rows"><xsl:value-of select="@rows"/></xsl:when>
        				<xsl:otherwise>25</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="fontROM">
        			<xsl:choose>
        				<xsl:when test="@charset"><xsl:value-of select="@charset"/></xsl:when>
        				<xsl:when test="@fontrom"><xsl:value-of select="@fontrom"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="screenColor">
        			<xsl:choose>
        				<xsl:when test="@screencolor"><xsl:value-of select="@screencolor"/></xsl:when>
        				<xsl:otherwise>black</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="touchScreen">
        			<xsl:choose>
        				<xsl:when test="@touchscreen"><xsl:value-of select="@touchscreen"/></xsl:when>
        				<xsl:otherwise>false</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="autoLock">
        			<xsl:choose>
        				<xsl:when test="@autolock"><xsl:value-of select="@autolock"/></xsl:when>
        				<xsl:otherwise>false</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">video</xsl:with-param>
        			<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',screenColor:'<xsl:value-of select="$screenColor"/>',touchScreen:<xsl:value-of select="$touchScreen"/>,autoLock:<xsl:value-of select="$autoLock"/></xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="debugger[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/debugger"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="debugger[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="commands">
        			<xsl:choose>
        				<xsl:when test="@commands"><xsl:value-of select="@commands"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="messages">
        			<xsl:choose>
        				<xsl:when test="@messages"><xsl:value-of select="@messages"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">debugger</xsl:with-param>
        			<xsl:with-param name="parms">,commands:'<xsl:value-of select="$commands"/>',messages:'<xsl:value-of select="$messages"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="panel[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/panel"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="panel[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">panel</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        	<xsl:template match="computer[@ref]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:param name="machineState" select="''"/>
        		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
        		<xsl:apply-templates select="document($componentFile)/computer">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="machineState" select="$machineState"/>
        		</xsl:apply-templates>
        	</xsl:template>
        
        	<xsl:template match="computer[not(@ref)]">
        		<xsl:param name="machine" select="''"/>
        		<xsl:param name="machineState" select="''"/>
        		<xsl:variable name="busWidth">
        			<xsl:choose>
        				<xsl:when test="@buswidth"><xsl:value-of select="@buswidth"/></xsl:when>
        				<xsl:otherwise>20</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="resume">
        			<xsl:choose>
        				<xsl:when test="@resume and $machineState = ''"><xsl:value-of select="@resume"/></xsl:when>
        				<xsl:otherwise>0</xsl:otherwise>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:variable name="state">
        			<xsl:choose>
        				<xsl:when test="$machineState != ''"><xsl:value-of select="$machineState"/></xsl:when>
        				<xsl:when test="@state"><xsl:value-of select="@state"/></xsl:when>
        				<xsl:otherwise/>
        			</xsl:choose>
        		</xsl:variable>
        		<xsl:call-template name="component">
        			<xsl:with-param name="machine" select="$machine"/>
        			<xsl:with-param name="class">computer</xsl:with-param>
        			<xsl:with-param name="parms">,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
        		</xsl:call-template>
        	</xsl:template>
        
        </xsl:stylesheet>
        
      • fd1.json
        [[[{"sector":1,"length":512,"data":[1183861995,1147495794,2118479,66050,1073770498,130305,65544,0,0,2686976,536870912,538976288,538976288,1095114784,540160340,6299680,65543,196608,655360,-50724864,-795951055,12441742,-530150020,612270331,-2013039105,-524802986,-1983869409,-1175483922,-1510801152,-528713238,-1898410465,14215376,1701147206,5459780,-1958328693,2123057238,-941936320,6307398,-398571890,946995394,196738865,2113125888,1604776791,440765222,-947713164,1031808544,1927771392,-1746382737,1095114752,1183711316,-1948569282,1183520382,1146522434,1476430312,102650482,12519199,-964056288,-972950015,1940778705,-754667260,266633448,1913649213,-1413467672,1474830094,1699422208,1818586738,1044811264,12507953,-1073107680,1212689268,-2129822069,-150929433,1246102503,-397650413,-445448138,218114536,1330594314,1919230036,805314930,-854143516,1370137,558843680,1586102304,59940,-617545632,281874100,1012313182,-1007454976,1397772886,-1430568524,609651285,829739652,762450893,-1437209727,-372168843,915219315,1552514461,240945420,1381652571,138709328,-1995811703,1150026844,-347950074,16781357,1515739904,-1970188206,1727404102,-235433702,410449554,-964111991,-909055610,1183500752,-18864104,-1193211708,1451885057,1930677540,-840683512,-346400749,190710664,-1064564877,-1911503744,-2091231040,-763166272,-411742464,1271095032,1162760773,1394614348,-1437248679]},{"sector":2,"length":512,"pattern":0,"data":[16777213,1610940480,8390400,184590345,-536018752,16781056,318840849,1611989312,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-533921088,50343682,855842865,1614086976,58734339,990093369,-532872256,67124995,1124343873,1615135808,75515652,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,100687621,1661345889,1617233472,109078278,1795596393,-529725760,117468934,1929846897,1618282304,125859591,2064097401,-528676928,134250247,-2096619391,1619331136,142640904,-1962368887,-527628096,151031560,-1828118383,1620379968,159422217,-1693867879,65520]},{"sector":3,"length":512,"pattern":0,"data":[16777213,1610940480,8390400,184590345,-536018752,16781056,318840849,1611989312,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-533921088,50343682,855842865,1614086976,58734339,990093369,-532872256,67124995,1124343873,1615135808,75515652,1258594377,-531823424,83906308,1392844881,1616184640,92296965,1527095385,-530774592,100687621,1661345889,1617233472,109078278,1795596393,-529725760,117468934,1929846897,1618282304,125859591,2064097401,-528676928,134250247,-2096619391,1619331136,142640904,-1962368887,-527628096,151031560,-1828118383,1620379968,159422217,-1693867879,65520]},{"sector":4,"length":512,"pattern":0,"data":[1112692052,538976335,541415493,225968128,1179731537,225968128,214609,156321,1296912357,541347393,5066563,1671188736,11851,-1297874944,2829677,87396,1162037733,541414222,5527636,1671189248,11851,1079771136,8464599,18427,1330927077,1128618053,5521730,1671188224,11851,-1417347072,9645642,67]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"data":[1329798123,1195984462,16777235,1962999810,1702065518,101124196,33752069,-1612519167,-1102067527,-141975666,-2135578338,84265100,98078208,-1064434136,-56232963,309100590,-1830325488,235842991,119473678,376086,1434472379,1481659851,50531105,1261724426,816337475,16669587,-570384684,-939523841,1124985855,1229344335,392007,33685760,-1672261505,-15846984,-855576389,1482398992,1997859511,45579,2077204264,2013259776,-840250624,-50219626,-369070360,131203406,1582354278,-218427540,1324601174,1190322732,-1778320666,913918270,783783783,874686215,-2020165338,-1647501659,1784878745,1392770996,1730084654,-872719616,-185924428,218066191,776996606,7937678,-2046425893,312557174,104539903,678756368,-234747284,69061394,313660476,789972687,-1217684985,-1007999232,520575231,1048653507,1968993895,1762191625,1342665918,502232474,61919064,-486482825,921220870,-83893590,822246633,-7983424,134275078,-854166080,-1073146113,4058996,41285490,2064650416,646458885,-1605608679,-619372957,1948254644,1965169335,-351834620,-14237206,-1658927826,222791682,36891135,-402504727,-385811197,-970063319,771772630,-466614723,-1007407905,-14229533,-850983542,-369565143,1864305075,1465274503,-1269606913,-1291798770,1532500743,1583308269,-915775331,-255387875,30992641,1397222272,-351945801,-1308349352,1275644754,-1307831956,1074842438,984749100,741611723,-886132196,606873632]},{"sector":4,"length":512,"data":[684401330,-1305727972,271633174,179450924,788805835,-11403204,-930341296,-425600882,104530431,712376808,-1982660724,-367620384,647334657,-459203649,1862674689,-1610638328,-100555529,1484130561,-316633510,-670687292,-1324036261,1344207625,1124090040,1896775807,-648511488,-508113121,-1089697490,-1626960850,1459604226,-351908674,173037127,92657353,1019228385,118418294,-1274957570,1745283842,-1100816894,-904198556,-1318386697,317454111,216788765,-568237541,-1732378601,1208304347,1887128163,-1784458671,-963361150,1887727266,83242623,-618498944,973621130,1719076095,31510936,513276870,-1796896429,1489402726,1425980924,-346466047,18997046,-32675958,-1961734261,-1047063465,-331902162,755924932,-1962842947,-1988252586,-1682697657,57739531,11838299,1482250877,-1928975522,1670507117,1282353431,-152337996,378220252,1858336907,-1058124018,-396947730,1515953157,91104922,60087302,793908400,-94790570,-619302837,657195230,1352487420,1834294866,280168028,922706206,-1660658397,-587047114,-675008855,1181886041,1576824839,-94873057,-1099337413,13344091,-385760944,1807423459,-1163510206,-1223658041,-619858858,-16381660,-370548153,1967914828,1625941757,-1089345281,162592784,552453366,-1157303947,-12184704,-11325321,-2011693107,1009788128,183349296,-2062020492,1958568233,34461220,-985867731,-1994434281,1397882623,-1976640719,-779154658,-1884363849,-386109448,1977483203,-85899746,393501174]},{"sector":5,"length":512,"data":[10574413,23658802,71368800,704905215,128,0,34,553320449,92786,13238272,12853385,12460169,12066953,11673737,11280521,10887305,10494089,10100873,9707657,9314441,8921225,8528009,8134793,7741577,7348361,6955145,6561929,39854217,57933824,2818048,4722427,5181179,7474939,9178875,10161915,11341563,12717819,15994619,21040891,22155003,25890555,28708603,31461115,33296123,35655419,38473467,39849723,41422587,47320827,53284603,55906043,58134267,63049467,66916091,67768059,68685563,72552187,74387195,77926139,78974715,83693307,87953147,90640123,93327099,106237691,107347968,76939264,110370953,117964800,119537664,138215424,142606336,175505408,183762944,220069888,222101504,227672064,241762304,242614272,257556480,315883520,357564416,365690880,366280704,368902144,11665408,24710996,30216020,31985492,33296212,33951572,36835156,37818196,1576788,2494329,5902201,398659449,417136640,416743424,415236096,407699456,406847488,405733376,405078016,435224576,506986496,502464512,494206976,492568576,490471424,489160704,485163008,482148352,480706560,479330304,476381184,475463680,474218496,464060416,446758912,540934144,534118400,559087616,556007424,638779392,633995264,633077760,626982912]},{"sector":6,"length":512,"data":[601358336,598278144,597164032,593100800,587988992,587137024,584843264,583925760,582811648,576847872,575668224,573374464,657522688,640352256,740950016,731643904,725745664,711065600,829423616,810483712,790757376,789708800,786563072,780992512,875233280,874905600,854392832,853803008,844103680,908263424,904200192,974127104,972947456,962920448,962265088,980287488,1087635456,463208448,455614601,455352457,454434953,454172809,453255305,452993161,452731017,452468873,452206729,451944585,443752585,443490441,443097225,442835081,442441865,442179721,441786505,441524361,441131145,440869001,440475785,440213641,439820425,439558281,438116489,437592201,1154687113,1153236992,1145962496,1132003328,1130954752,1123090432,1115160576,1112342528,1101660160,1168637952,1246101504,1273364480,1349320704,1346043904,1341849600,1340407808,1339097088,1333854208,1330708480,1329397760,1328611328,1326252032,1313275904,1303576576,1291714560,1289355264,1286733824,1374486528,1367998464,1366818816,1364656128,1350500352,1471217664,1465253888,1462566912,1460011008,1457258496,1450508288,1445527552,1444085760,1442578432,1440874496,1638596608,1688207360,1687224320,1741881344,1740242944,1728905216,1727135744,1724055552,1820852224,-2100690944,-2106195968,-2106851328,-2119761920,-2125594624,-2128871424,2145845248,-2044198912,-2073493504,-2075852800,-2077032448,-2079981568,-1969094656]},{"sector":7,"length":512,"pattern":0,"data":[-1969815552,-1970470912,-1823277056,-1824129024,-1818230784,-1641480192,-1646723072,-1651638272,-1672806400,-1691222016,-1693450240,-1401225216,-1403781120,-1406140416,-1407057920,-1435566080,-1438384128,-1451425792,-1388773376,-1389232128,-1316225024,-1301086208,-1235746816,-1240465408,-1241513984,-1248067584,-1252589568,-1253441536,-1137311744,-1145438208,-1147797504,-1069613056,-1074069504,-1076953088,-1085734912,-1088946176,-1106116608,-1115160576,-1118437376,-1121452032,-1122500608,-1011482624,-1012203520,-1016791040,-1022820352,-1023606784,-1029177344,-1029963776,-1035534336,-1041432576,-1047330816,-1048117248,-1052704768,-1065156608,-962985984,-887816192,-906297344,-913047552,-914554880,-948830208,-799539200,-801832960,1441792,2494337,4394881,8261505,9244545,16453505,18157441,252514177,265359233,265686913,267390849,294457217,-1482289279,-1481830527,-1481371775,-1480913023,-1478881407,-1477701759,-1475604607,-1474359423,-1472524415,-1472065663,-1471475839,-1468592255,-1467609215,-1464725631,-1464266879,-1463808127,-1462038655,-1460007039,-1458958463,7212929,7937185,40508577,41229473,73014433,73735329,4529313,6298983,8002919,8461671,16522599,17833327,18554223,11869551,12590465,22289793,23272833,699538817,700063135,-707650145]},{"sector":8,"length":512,"pattern":-1869574000,"data":[773884346,36443785,567095476,142987,2891403,748935822,705072128,639535360,1009682688,608093184,-1949857024,2147465688,1524870898,87565891,-847186315,-1982204032,-1191173106,-472711167,-2096577661,512358627,-628359128,1049356843,-8307716,124977408,-1996422977,-2126775234,1922539719,608043809,-1323601408,1206899460,309522235,1006386819,-1089571584,-281341952,-41220233,-2048326677,64981761,874416602,941525248,-85470464,-410266994,784348155,36439694,-1185672513,-819226720,1508420339,-431888155,2242303,2111231,1980159,1355669224,786763496,36445838,1286925451,-855488886,1431567137,-1962480501,1585906782,140412678,-1996333433,1589904478,105316102,-1222669786,-136064768,-1618268453,1585906188,-1654847740,-1869573949]}]],[[{"sector":1,"length":512,"data":[-1869574000,-1869574000,-1869574000,1085575312,-855637317,515490593,12226560,512634368,-370671060,243967,-22812592,11796480,-1023257952,45361357,-466479411,61374244,51118708,-855460669,684573462,382534068,-1073018508,-4716683,855829503,-1205943360,-661774199,201319400,-972524352,153350,-402599959,104005566,141886034,39257798,12511488,192155816,-968490824,268588806,-1476349975,-1207208928,113657088,-383778217,1084752032,12061556,1460061754,-1846984702,1946724352,1376187946,427100162,39272064,-401968120,1403191422,1427540226,8579074,1912602808,939571203,39257798,-1469846776,-164989948,67260934,1048582517,1946419799,5302282,-1996336221,-402500330,12058708,-1207733760,113646848,-352058793,1946396725,1376187947,427098882,39272064,-401968125,1403191330,1427540226,2549762,1912602808,704690179,39257798,-1878529277,38929968,-1021329357,-1900006626,74228184,74323595,-269958369,1427520511,-1559727358,378077779,734200405,453137158,755127574,-628948974,-1205943552,-661774199,201253864,536442048,-1120061,39261834,38934064,39257798,704658688,4007028,1025471517,443824128,1950679101,973094165,4001908,839611462,186043876,-1207732800,-842792961,-855526360,839283734,-350827036,-1957313550,1988843244,1381191684,50657030,-1960020992,-1031574700,-1702562300,276054016,-336718672,-1308512256,15462110,149623984,611140746,15462135]},{"sector":2,"length":512,"data":[554704580,117934118,1582848858,180829,1458342741,1342469771,-150580653,1946157828,1800702757,-167460221,1073781380,28313972,-336666958,-1965510144,135032132,-1006572562,639701022,1510410120,1566464091,-301989182,-528088853,15461954,-1018503034,116841267,1946313652,-1205976319,-661741568,-66060103,1960512420,-119362559,1465303839,-1207710022,-890764796,-1274611969,108331619,-402651720,243335101,-1006345292,857808958,-4396810,1672742646,-1107069950,-1343733760,-1017225217,-617413090,1672742646,1124168706,-1610565626,12173454,-1526980848,24435467,133751466,1465303839,-1207712582,1927808002,-989907969,-400482250,116850634,1946313652,1073790723,-1191199256,1458048770,-1017225217,-1964209323,11797574,-1006539032,639702046,1568614272,1426064066,1586162827,1862645764,-1006545176,639702046,1568614272,1426064066,-1957237621,-1937111946,76218522,10134656,33597823,-397342860,-1863712819,1878272,-2064251019,1946419361,-1545055993,-1870730241,470041847,-1006078976,639702046,-1962406016,-1047893164,-1040810204,-1274514048,16377856,-1953473557,1086453516,1007514624,-1157008113,-661912980,485212302,553918148,1008714790,-2096008702,71045315,-1014822286,1963408400,281248515,4243959,213386612,-1207702784,-930414576,108462074,-1325530136,663365120,-25171901,-169688834,-29824938,-1034068229,-1957363708,-1185458452,2126774288,-625279996,-1062015997,-922828406,1107356654,-1442780180,-625808158]},{"sector":3,"length":512,"data":[-1329548564,15461905,15461442,-321211734,548454578,1593895918,79846750,-326413056,-1006628679,-625343394,-1062015997,-922828406,637594606,-297597046,-253624085,-336719440,126494208,-1342116882,15461920,311901,508581718,-1910470216,1040631768,520094036,1344392536,545896478,113760398,21566,1583306783,-1990764853,-850128338,305040144,-1017225388,707013156,167782948,1162084608,4674882,270473,0,791644,0,2364517,0,4199610,0,4986641,0,333572,0,0,0,0,0,-1957363712,-61384980,110403886,-1064380274,147461772,147334793,147205769,1023986849,58064895,1342475425,76166911,146978846,304912976,-1432154239,-1407809272,1975651080,140568592,33965767,820877824,1659568128,136177808,-1945612824,-1077899560,12124792,-1143436287,12190584,26077185,33980035,-1365125260,-1308228856,146055944,145628868,147592843,145886859,76166795,-402241909,275972511,147334795,147205771,-4538317,20376063,146030219,147588750,-393214288,1048773602,1946159292,-1371618288,1031808520,-402230068,401082938,113716737,1738,-871971282,-970063866,1515014,76194192,-1593256285,-660405108,191162376,-401842712,-1969157235,-1944679676,206473988,2126784995,2105550344,443809797,1963277094,-1910110699,109838917,1508378978,130255875,-751075726,-947684748,-388308474,1802699857]},{"sector":4,"length":512,"data":[-1593835079,104531082,443877590,990153889,1963513862,-704198895,-248,1225034246,33980035,113723252,-63274,-1942552751,-1976107260,-1028121084,748310536,1494188306,-636757877,-1554964876,378079402,-186120020,-1365157626,-1979303160,-1593215740,104532144,1031013516,76156417,1979658985,-13768427,157431551,76166911,146978846,304912976,-1432154239,-1407809272,112846856,990424737,1963231750,145793289,76285499,-1964440716,125233406,-1593637912,378210474,1583286444,576093,145637060,637897254,-993262138,-1442267586,146540231,12779520,149070592,148905609,149167753,149423815,-637337600,149298825,148520585,148637324,-523124341,-523116335,-787947869,-205507607,152085419,147563054,-569492541,-385649144,-157089483,-333543160,-301560824,-266958584,-1983184120,-955715058,593414,113651200,-1577121588,-358414106,-197752568,32172040,150740617,150869641,150998665,150746763,148637326,638123681,1819608197,150224523,149816974,-1996037656,-1995897842,-1945565634,-1559689210,915081474,109971708,-23000868,1477384,67708425,1967841489,112654,-2097147718,109249222,-503183108,150905832,151000713,1024000673,1031012357,151914183,-1071448064,77673333,-200933111,150249736,150079035,-2064973197,149567115,149304891,109974900,-1960441636,-368671948,113705480,2318,-117484823,-2082960445,-472809501,152086527,1810367920,-1447302399,1282670720,1609042096]},{"sector":5,"length":512,"data":[-2084443391,50922046,915081076,619251974,104238079,17754121,148637326,1964475686,-65107169,150905096,1963402022,-366050339,1049297416,1044056298,124913892,-1425471839,-385912855,-1007091356,990447777,1963519494,149987605,-1593243485,104532230,108136684,150079035,922721650,922683656,-1205991162,-1706030838,260117036,-2139831797,1053034160,-471332602,37651200,678691593,-2080426519,593470,113707893,67854,-1075313488,-15800064,425603,-2136384395,-1341623296,11331591,-989922327,638125630,16001,292896717,21334822,-365068250,-1960442764,111346245,151560457,149816891,-257882507,151560968,151533311,151402239,151697438,304912976,-1039462527,112200820,151666372,-385849880,61931180,-385853976,11599524,-385856024,28376732,-385858072,45153940,-385860120,908852876,-561313556,-338492239,503571409,-427620134,-773402353,580160486,613190409,-2128166135,-855637954,638416191,1064579,638022656,1050254,-1007041544,150224523,149816974,1946185960,-467760333,106401032,149558843,-1910626441,-1995906530,38243391,-402307192,175308732,-2012902874,-970587065,-2095068155,101245958,149423871,452803,-385584152,244054974,719522024,-533281506,-398670840,208863116,-868384730,1149896309,92808708,-502872445,-526311448,149201672,149423815,113442816,-1950184418,-485955570,-533281518,1966881544,39074565,-964483468,536011270,206474014,1992628195]},{"sector":6,"length":512,"data":[92045320,990475264,990213436,141820500,-502872445,29982956,-1950152929,-1912014794,638116358,501759172,639857407,1976319360,71600669,-402290650,915080602,109971704,1019480290,-2012902874,-970587068,-1950102523,-485955570,-532772073,-502886904,76194056,76289675,-2096663377,-119405369,637977593,-773323378,130256126,-751047310,-1960384139,157459205,-1996296317,638122046,-1744484982,-1962345821,1946631384,1946696733,637935129,-1578617404,119473918,1015024498,637957580,-2012985974,-472834300,157591551,-1946198808,990153782,1963519542,-1976136891,-331990268,993751560,1929966134,-28645323,148637326,1964475686,-1976136953,-62658556,-389824462,451673897,144836295,-672661503,-1576614140,-2097151992,1963001470,105301765,922681344,922683746,-1205992310,-1706030838,260117036,150617731,-1962511097,1960446936,-397258661,1482358392,-636757877,-308672139,855638064,-1009634368,1342473889,150486667,-501314018,-399129592,-2144928272,108383292,637814154,1478427784,1912623165,-1610597089,3999090,840266432,-2036218944,-1610597116,1346226547,-1580961280,-1075116920,152059523,-1708231424,12525,152045255,243990529,-987887384,-2146901962,1996752252,641516558,1976319360,71600646,-2096789466,-404617530,-1010814433,149425803,-987883037,-1006051274,1031808572,-1979288116,-2010774460,113672965,-1021317662,1458342741,106335063,-904491270,-936998136,780925704,-1909585722,1376162846,-402266904]},{"sector":7,"length":512,"data":[367527280,-39655422,844808243,1048588022,1946158796,1221626627,1442485225,1465314443,512634398,1183516308,75931910,-2130405213,298510,650153474,1443470,775341094,-835286784,-804877304,-871971064,-939524344,565766,109981184,-1070397804,-164374386,-1190880065,-1510800896,-1910470216,507415512,-773336831,545896679,717150350,-1664646818,-1096440572,146756675,783002885,-1392066397,-1029493077,1413135878,-1526388545,1580121765,-1526387521,86032293,772115238,637977763,771900811,-1207515485,-1934944481,1595911112,46816606,116796928,1954547404,773769985,110370446,157419148,1776861836,1958743036,-1542550716,505209608,145110725,1963086907,641501964,1149765002,96871940,113673164,-1960842526,-485955570,918887964,1413155040,-1962117886,92939836,637813896,-2083781178,-354285882,-1572961505,326369288,-1977156725,654258717,-1983117882,-1945592258,-1995923450,520657950,-1405681717,-1439236344,-1363665400,-1205972984,-1706030926,260116987,292864011,145753742,147588748,1929108456,-1341748220,-1010824440,0,146540231,1317732352,-1542551284,-999955704,512297054,109840550,1397819560,126559750,259302190,38243110,259433262,259301678,76154427,772161653,259393166,-1929670680,846333888,76285499,-1070453643,33980035,1048787829,1962936508,1398474548,-1140406522,-1929379576,-1096612793,-1073312760,1053044232,367726452,-1003607061,101676094,1929072616,629810695,-872036826]},{"sector":8,"length":512,"data":[-1946046457,643499970,637880200,1493460872,1225180035,2045313908,1317782527,505733900,-2146928955,1946158460,-1908634860,367526468,1031808763,-1979288116,-2010774460,113672965,-1021320734,378130995,-1960441020,158776861,-1392489031,71025443,-964490380,-1175133692,-1070399487,38570691,1149955378,585380355,50560713,896844746,-242496002,-964567305,-13758331,-820990684,-317661168,1964012816,571548432,-1945009903,454137617,202446097,-1575941871,-1039029999,-1374619887,92939793,641483335,775688308,641467508,113740917,-62652,113738987,461636,-1946190871,1166681816,-1919707135,45679225,-1010171136,22907686,-1190954611,-905773053,2110006979,375041,1204013571,1569334850,-253526015,1965095808,-905756156,384518083,33945126,-347991947,100017677,1107784962,17167910,591528308,-1959496256,587940878,640449737,-2147394166,594788603,-1056242461,-478142997,117145799,-478145164,50036743,-75494028,-2146929661,57935611,637535757,-2147394166,45729763,-1057259520,79238259,-2131001344,-75494285,1225225222,1933638528,-905754367,178627,17167910,-1019149964,637534905,1963066870,-1178386175,-165281790,24381445,129549121,1103792896,113091,62456811,189047040,1946158909,57950441,50333368,1151452106,474379,1950406772,571605,-1019098485,-402287128,-1326972924,1053082373,-1977219958,1959541765,1959738419,1956396084,1956461653,1959607401,-1911652063,771817476]}]],[[{"sector":1,"length":512,"data":[113784575,-939079890,-402652922,-1892810222,-16332794,-385578490,1575682217,76154623,-1845063997,-1877046524,126559748,38767398,72846118,-1996191069,-1996190706,-2096853482,100962310,780369387,-1962802032,-1912303586,-1593535994,-1993997170,-1979252985,512475908,109970576,-1960442734,-16833273,-2096853341,33853446,76154623,1569334979,-771804671,-2082221597,33851910,76557955,-1874949370,-1845064188,76194052,76325291,76456363,-1014948181,-164756324,-2147038202,-1070397324,-343811954,126551196,520247179,-1996191069,-1006334954,637831742,16001,175390669,310745606,1654853505,-164707575,-2147038202,-2128199307,1950338365,1031808534,-1942718998,638149126,-1560197692,109839498,-389872500,535299211,18409472,-402634520,1048773726,1962870940,-1640053746,1031808520,-1610320436,-1012266852,567103924,77209225,-828259442,782444040,147890432,3187494,77078155,567103668,2812154,771780584,113772231,-389873661,434634893,113716736,1736,-850283269,-1742829279,-1709274364,-850349052,-1070349535,-327033717,-461175807,-1948741890,-1962469648,33602044,781231603,110370446,-1912300354,-1174893632,-1510800896,521598091,772054207,110364302,-217972551,512634533,-1909586284,-1962503162,236897251,-1900006625,110542528,-1106343122,-125063930,-1996125402,1166747140,38045954,-1526413693,-492058484,-1950146584,503617566,-628176244,-1064386509,772183742,113118859,653822893,1963087163]},{"sector":2,"length":512,"data":[71600912,1963277094,1185260808,535421510,1564026563,-1896713726,113673178,-1021322526,189146761,189273740,189410953,-1962641221,72321799,-1962518645,2139818615,141527820,-99596402,-1961207922,-321433,2013206135,309853972,-1912447093,-821787106,-935427282,175374598,1048784591,1946355400,1394528001,-1809936850,75021062,1200555913,72321282,-1996073079,2139687543,141527308,-1945221233,1200558151,340234002,-1944696945,1737038423,378468888,646646600,-1946481850,-2129966546,-16837017,76156671,1461634044,-544276685,-16749377,41287477,67487738,38636565,520040092,-1879439704,93258309,-851541970,359923718,74524288,113651327,1342179021,-466463149,1532892877,773807960,114034422,-818645759,-871464914,-164757242,-2113483770,-970057099,17222918,512634398,113706644,67754,145491655,-820051968,-871464914,-13729786,772194350,114036352,1048784386,1962936010,777199294,114034422,-1156156032,-611442551,1551122048,772436992,114034374,-350266494,512634526,2025522836,-1895331580,1334379079,106400004,-1995802743,1871252607,239570696,-1894758516,1200558663,373788436,-1994762356,-1896212377,-1962358250,-83310554,147205771,-871958994,1802862598,-871971282,-386170362,132708964,-1442396168,-956301048,568326,-1942552832,310745604,-861728895,1603948552,185565458,-1592625728,-397409140,1968701563,-1945748686,-336366588,-868810792,-1976107256,-1028121084,748310536,-1961918190]},{"sector":3,"length":512,"data":[1977224152,76325150,5367888,990410072,1946455046,-139531304,772320286,114034374,-1558385920,378079402,417859756,145662457,76154427,-1331572875,-1945748728,-1262062332,-1994273455,-1962633186,-1274766818,-400437936,501808529,519568381,1256786090,-1975612430,-1945727484,1031874052,1333010893,-851607258,642282515,281886081,-13745804,772196406,113772231,1441267713,110046971,1048643272,347735178,-164755596,17222662,1003195587,1963232286,922693361,-953284920,17221638,-43194368,-939094226,786164486,113903303,1195835393,637897254,1355548102,-13740282,772196406,113772231,1139277827,110046973,123668168,373015180,-529202036,76168763,643357301,-953285240,444934,116796928,-1023342900,-905511122,-13722618,-351881186,117386791,781977290,112205567,771758827,387858048,774468864,113903359,1951136896,782039076,113516287,1357679445,107382943,-13738664,772196878,114034422,-820349695,-1003552978,117321222,781981470,113516287,251539100,-342026466,-36967985,-1090517826,1555564184,-617406956,118414222,-1910528603,-58946109,-930305030,119471019,311235,-1207527234,857609308,650350299,108332347,-1510334706,505412517,-1957313785,509040364,-1962387829,-661976506,1452001931,105286404,15307418,-50040064,-66917383,206474232,1586370275,108432132,-1962391922,108202622,-117182205,-1527558322,1583292412,113754973,-43982,1412433607,-1950089217,-1588317674]},{"sector":4,"length":512,"data":[1439388720,-1205932917,508585635,-402229505,-899841071,-1957363710,820806636,1183651414,-241545008,370080513,1356088973,-83750502,108461838,-1341884673,-1070379008,60660304,-259322117,-2984193,295358582,185531138,-1173916426,-1031012353,1183523307,-263844882,1183519860,-1949158420,-1950338096,-919344546,-787234045,-4586005,1589808127,-1034033781,-1957363708,108462060,-8919026,108314635,-9967602,-14809109,2045249142,46816767,-326413056,1443032195,108956503,621037195,1183449087,1996431102,178184,80255568,-259322117,-1072970101,1317737854,-1193833474,-561293567,413850,177886720,1594817285,1575324510,1426065090,-14750581,635962486,840337919,1412473684,180829,-2081649835,1183649004,1239961848,1183668690,1441288436,1183537618,-129759752,33515137,8332799,1175052497,-79262977,-26836584,254148127,375040,1175052499,-96040194,-26836584,522584032,-28964608,-1258994038,-43613952,522583815,-773795584,165728736,1183513926,-2130660108,-132121498,-1191166171,-523042811,-1963178487,-388958394,1719730356,637526268,1174994975,-27882500,-1979955573,-1554763242,-443853776,-1957313699,82609132,108432214,-956014965,-352321273,1015039489,-2131069920,-176944836,16664263,-62470400,1290469376,-1711374719,1968142105,-58818297,1182243225,-1711374719,-2129890023,-1717961602,1015022965,-1959559371,1183579734,-1144441860,-1281753078,1375731945,-1744532912,56187801,-2083908648]},{"sector":5,"length":512,"data":[-779890493,-28407297,1190944393,2083536000,960266245,1015065214,-1962445824,130483294,1451950080,-62485506,1575324510,1426064578,-326898549,108461828,-402360577,1451884376,-62486018,242405899,-12778121,-1962445057,130483294,1183514624,1575324668,1426064578,-1957237621,-149021386,1979645956,71731980,989921061,-351177724,990153479,141820998,-2096904573,-545980356,-1744681846,46292318,-326413056,503871231,-16353537,580519030,990837509,544474182,1343457720,1412708095,-1200087064,-1588592639,347741312,98760448,-397386190,-443821327,442973,-2081649835,-1957276436,-1923742090,-11490234,1592263798,1346394575,-21784,1183646838,1810387116,190405071,1447065024,1353467533,1342179256,-1191211288,-1924136750,-397366202,1499057998,594919435,-28930730,178256,-9312176,637421195,378273536,-494855752,-1036255488,28837237,-1207047424,-11529308,-397134794,-1070368880,1575324510,1426064578,-1957237621,300614774,-14351221,105266047,-963967883,-964490517,-12811514,-1070339467,79846750,-326413056,1443556483,-62470313,1183514624,1412735752,478152447,-1172537183,-487129068,1348350469,1506928360,57982987,503367913,856192767,-929410880,-1961952508,2113866744,221558797,142016336,-378071064,-11075411,132646006,1975520255,9824515,-1172537183,-487129068,1348350469,1506910952,57982987,1459651817,1358317197,1342178488,-2080464152,1962931838,-159973529,-402229505,-259260595]},{"sector":6,"length":512,"data":[-1072970101,11551348,38046544,1358579337,-1996209013,-397345210,-997994857,-129594618,1945781819,-96040701,-25755817,-386238721,-1957167521,1177286726,1389507578,112720,91527760,-1679094021,-129594537,1347605043,1342177720,-83528550,-7870194,33310407,177886976,-15795451,-1961066482,1583348806,-1034033781,-1957363706,861361900,74907638,1506655464,-12060533,-14809482,-1705573258,251331915,745916219,503740159,1342231224,1342179256,-83539046,474382,1996428917,-1195893242,45633561,1268404224,1024391941,57933826,-1962933826,1566465990,1426064578,-326898549,-1957210622,-13433226,-1559738741,1344164916,1342178232,-83572582,-28931826,243122187,1343472056,1412708095,-378154008,1996423285,74907646,-1946194968,-1958482952,-359660,-1023998348,779452416,519993087,309334,88840784,71110395,-15436544,-14745994,1962869876,88840706,1144721147,-1090161662,48955393,1015283507,-2096663297,-16054586,1996470644,84581118,-16052485,-810018444,922701843,1709724724,922689141,1956271156,856619777,-1207702592,1583284225,-1034033781,-1880621050,-1256813655,473858915,478025985,1360631,-1023994252,141819908,18613959,250282027,18613959,116064306,18613959,1438842905,-950604661,220285446,-18432,908650576,-1207666945,-1202716384,-397410242,-259260679,20825739,-1206487808,-397410016,950206858,1742190676,74907472,10438042,1590070016,180829,1458342741]},{"sector":7,"length":512,"data":[558499527,-4718577,-471314177,74907445,1342251192,1342193336,-1946331416,1036422128,376766465,1342251192,-1560197656,-675785672,1996443751,-1622828540,-963969024,46292318,-326413056,1988843350,1979058948,-1958837494,57999403,184580329,-401967882,-1073008966,-1226237323,-1270971648,276103195,-1959637016,197626872,-1962574400,11594183,1333065227,1342314168,1660106495,184625384,-1203735360,-397384971,-1072995525,113718645,12721241,-1202667469,-1202713760,-1202711348,-1202713731,-1202716662,-1202716652,-397410300,-998018460,1968782350,35043414,10807376,-2090667101,2854206,548951156,922701825,-756526024,1958742784,1742190661,-20191152,980795403,475596487,-1070399293,190888016,350468176,192788560,702544,1357904,309328,1913579600,1007600771,-1207602087,216793087,1342251192,-1560262168,-1070377928,-1034068385,-1957363710,146691820,71731712,104005812,916673590,-149034156,22296070,-1592953856,-388934602,-1551629259,149640246,-783010143,1412867048,189712011,1591506368,180829,-2081649835,1465254636,-956008821,5518854,-1960776960,1149960828,-28931836,1586170859,-28901378,-1712834561,1338477567,-294273013,-2096707965,-613023940,1599354529,1575324510,1426064066,1996483723,-4921338,1946437179,112645,-1070398741,311901,-2081649835,-1705618708,251331184,-2130753912,6532926,-1348463244,-12174749,113641333,-352296017,1672454150,-956348792,-1607553466,1183326466]},{"sector":8,"length":512,"data":[-1371108433,1666909755,1572343669,1538805859,2028490851,-346465846,-1475228330,-1324715007,619237894,-339673597,67153922,-12174783,922697079,-1927912529,-1705988538,251331348,1353598605,1506408680,-964431733,1538807550,1183666275,-1847045968,113542093,259375115,1527105163,1538805859,552095843,1582913994,-1017256565,-2081649835,1465254636,1348710328,1506393320,-1202194293,-397384878,1599719857,-1202194429,-397384790,1599719845,1538848771,-1696051101,1183406537,63409150,1178336838,-1958511100,-953482170,738096779,1606844912,-1962087581,939476702,175711720,-2147125824,-277544900,-1207570813,-1957684806,-397393722,1499056555,-2011102560,76022852,1666955350,-912660400,1583307097,-1034033781,-1957363710,142016492,-394394904,1996488386,-10164220,-402229505,-1034060271,1397751814,503730769,-1118480554,-577888119,1413365379,-1223658496,-402410496,-822155969,45351095,1575302888,119496287,1482381658,1364414671,1444808274,-1984080553,870157856,-1145008448,-2144992143,113737511,87105,526278493,1532582407,12111704,-1977496269,1413522114,1413547719,28835840,-855592397,1816609,-900994992,1159104857,1413718868,558479374,1816656,-901126064,-1207516029,-397410269,-1990604243,-1554760682,-1207020486,-1202708198,-397410269,-997995989,922731270,922702917,465065027,417878016,113542090,1413232383,1413101311,1342186424,-2083911960,28837572,1075218995,-1021194924,558499527,113704961,2890841]}]],[[{"sector":1,"length":512,"data":[624082408,54329599,-2096663552,5521726,1458048628,1090963251,-1207959468,48955393,1355006003,106058067,1431787038,-1910470211,1583308253,1499072287,1439651931,-326898549,-164407804,12066795,870222660,105945801,28835840,870222660,1087013321,-1695141376,1616,100565830,280550524,1793609728,1451841993,-62486018,572766222,1095760,-915806128,-1274624893,-14562037,1996488310,1095932,-917116848,1577501827,-1017256565,-2081649835,1465274604,2117730099,-385646844,-1927937837,-11489210,-1399192458,1376747792,1948772432,-1929333271,-1705988026,6147,242597899,-1337553642,64199248,-1073017093,-1927923596,-11489210,-286783882,1979648801,9562371,1353729677,1353729677,10438042,74907392,-1337553642,281320016,1996427137,-1337553660,52226128,29322219,1493616384,-1207909348,-1924133460,-1202671546,1347420165,1342197944,1342187704,-1955747864,197561328,-2143978304,1962979454,74907413,-16573720,-1927936906,-1705988026,260116676,1183655915,1183666352,-1070378832,224049232,472639568,-963907445,75350027,216778379,11566720,1122567028,100710655,-443851169,311901,1458342741,279485015,-125104255,-352321090,1996430872,-1399171580,1376747792,2016667728,74760203,132892299,2130131782,1606431716,46292318,-326413056,16837761,8817942,1996443903,396466694,1347555201,-1586295576,-1432147230,8818021,1183535359,1241918214,-11517868,-325057418,-1979665366,-1238701546]},{"sector":2,"length":512,"data":[1220684544,-1874204592,-1034033781,1465253892,1665664711,1520500736,1443248980,-1593409964,1520653398,1415225684,1414137403,1252197245,1245610836,108331092,1414137543,1252065281,1409680212,1510357844,-1592623276,100881482,378229844,-802466726,1242956098,1245088596,114516,995497195,1968462390,178181,-1070398741,-11671472,1044072262,-427928492,1438867039,113765515,25416,855930623,820531392,46292479,1415225600,1414137403,1252068732,1409680212,1510357844,-402292908,200015708,1415198463,1342177976,-1006696728,-2081649835,1465255148,1415200395,-1990964575,-1070334906,-1989982045,113770054,1057098,475596487,922681541,922702934,1522029652,1253593172,-253210540,-1578071185,1178293322,-402295556,434896648,995383969,1460040903,-335580952,-28931319,1665664571,2028471156,1414177279,-1946401143,-1588307394,1183408968,-97282,-25095300,225707264,1946484355,100565768,-4287371,1606847487,1575324510,-1084795197,29229068,1444080384,-2129157734,-397389297,-952405655,-125107586,1446394694,-2081915308,75442431,49006475,378153136,-802542868,-1996635520,-1607800298,-695522581,-308100606,1980775466,-318323195,-308277206,-1979665366,-1238701290,1220684544,1599362211,-1957313698,-4303124,336108287,28839809,1415226112,-1705751901,260118429,-397125981,117440383,-2136925056,1358364,839246583,-1729605538,-1072997945,-4323980,-1204884481,-397410288,28871100,1944604672,-32577361]},{"sector":3,"length":512,"data":[-1946239512,1036422128,292880388,1415198463,-2129142886,73304847,1468598153,-2146500862,1095708,-1976899504,-2129307238,1590070031,180829,1458342741,1421786711,-352315969,105155358,1963345467,74907410,168150667,954748928,1448696260,1325442792,190760579,1608414719,79846750,-326413056,-1094822058,1425236,1149965803,71711494,1153894773,-956301310,1325400068,190760579,1609004543,46292318,-326413056,-1094822058,1425236,1586179819,138906374,1963476027,75399967,-1961265920,656838,96701264,-397410294,1499055002,74825739,183223947,1590068047,-831127797,1583333427,311901,1458342741,-2096859509,1815614,1149961844,71600392,856192255,-1276620608,1514440989,46292318,-326413056,1443032195,-2096859509,1946159228,96897834,-397410294,1149893750,1958742790,141885206,503739647,1183651414,-73772802,185565457,855930304,-1207702592,-1956773887,46292453,-326413056,1443163267,75402071,-1993729887,-1094779322,-62470316,-1226244075,142377728,-385649408,-397016921,-1072955501,-1662450828,1979648768,-963961250,1342179845,-402098945,243342677,33561324,857596648,501764288,403097480,-955493078,-971220730,1354773248,1342991544,1343007160,632082152,145882880,-1605310253,1519917799,-1605185533,1352145638,1342178488,-2090248216,-1952969532,-28931080,-1960175453,309703,774368955,108267323,-136166589,-13752341,1771623,4522051,671875145,670967814,-397006846]},{"sector":4,"length":512,"data":[-13434836,-397014037,99287076,-340078408,-61931755,-2090940797,1946221694,-12457725,-1560280648,1583305800,-1034033781,-1957363710,1342222572,1342201528,-402360577,-443825549,1415057151,180829,-1094756522,1424980,-947189013,1348388739,1325388776,-227150325,1218691123,1415095124,432015047,15204353,-1017225443,-1070167210,1480491801,1685323860,1415069315,-1961853183,6208198,-661921033,1416150915,1176597760,104580747,1148459456,2081881731,114179,1589298827,-1948059904,1757381592,-546045868,432027273,-1161393378,-487128994,1347709445,-397361101,-963961843,-150970694,-1948742686,-1554728313,-1075307750,479062102,-1957313698,1659667436,1187469142,-1962933856,-1339418562,1589137408,1183666176,-1394061150,113542081,454702847,-1994672408,-1548178874,1183666278,1894273196,-2091296319,40740926,1183648373,-722972510,-1605989891,1352812173,-397361101,-259261093,-1072970101,-397015180,-1041629464,-1602321664,863204608,-437759808,403097479,-401844950,-796153057,11847306,451387472,-805086568,-1268494176,-129792,259838011,451677825,-253230592,1354773275,-947508248,-954443514,1354773248,1342925752,1343008696,1342930360,631955176,145882880,-1605310253,1519917799,-1605185533,1352145638,1342178488,-2090375192,1497108164,1048791925,2098549848,1421786679,362694343,-2094667008,1962936444,6207513,1183667792,216551586,113542081,-51320746,1415055103,1325340907,1590068126,10387075,183227765]},{"sector":5,"length":512,"data":[1343012280,-397361101,1072195784,406751515,-1956749526,1438866917,-1957237621,401278070,-2096472437,-1962538426,126550615,1963480635,105265925,189662580,-1947896330,-1034068282,-1957363704,82609132,1623086934,71732052,872302217,-963961089,1342179845,-1710852865,260116652,-2098704302,-1796712852,1212056572,259326036,-397361101,-1072956213,-793246337,-952112198,1506374,2088972523,611581960,503609087,101041803,-396931072,-1072955527,1418400373,-1962636542,1468661342,-2096658174,1191640646,-2080616705,2122538694,-898301700,1583335307,-1034033781,-1070399486,-1558582621,-593290776,433759001,-1558589789,28842444,434152192,-1021721437,1458342741,-16484725,1458047092,108330934,1414674175,168150667,-963948544,1342180357,-397361101,1566466125,1426064066,-326898549,1577502466,-1962934188,-2145794018,1299447871,1414545027,508785920,922689107,-1205986858,-1202695076,-1706033151,260117850,-385923448,2122319292,443810047,-1258338678,-861714432,-1547685095,-995943968,1415488281,-384181597,28835964,1414570752,-346792285,-702641395,509465,1415317191,2122514432,1651834884,1415331459,507278336,434386687,-701038818,365795865,1183321985,90368255,16744064,1183455604,1208005887,857335971,434152384,-1558592349,45619674,-953488640,5529094,-1205867776,-11529103,-400959946,1499053751,-526139341,432317209,-1558586717,-1070392884,-4717589,1575324671,1426064066,-327029621,1465254662,16664263]},{"sector":6,"length":512,"data":[-91845376,432579580,-17135987,-1927686493,-1543636346,28842468,434283264,857327267,1414570944,-1705746781,260117512,-1272250976,-82408960,721466922,-195134,-1202433373,-1202716655,-1202716626,-1202716669,-1605348270,11807486,721163914,-1037369162,-1070378936,1668212816,-1912846711,1358756486,-1333240088,-91846656,-91846403,245502,-350626113,-963948946,-150993990,1120963554,721133634,50659508,-56602624,50377770,-39825214,1208005674,721199184,-1039990604,-1605353408,11807487,-216102064,21465642,-1974468428,11797319,112720,-85438384,138774964,1342185656,-5767448,-216102091,-1274574294,-1276620800,112820,-1467684784,185528195,-393316874,780402132,-1962650542,965318,-125050121,432195457,2013257611,-1271142392,-397361101,-963926060,208977931,1946157373,146721,887827060,475596487,1048772808,1946180983,1292293,314049515,558539520,113711851,13179993,558499527,216727572,475596487,113705162,1384778,-16353793,-1202433482,-1957691137,656839,96963408,-1957691380,1346388167,-402360833,1183407926,-1002535942,108331033,1414530759,1183514624,375290,774743995,125044539,-136166589,771799785,681983,67109120,553656320,791562496,791526190,-1959900882,1958742982,81164,37560692,-348687360,1342621515,-1207959468,-397410303,-1072956103,512440957,130423268,-2094339328,5529150,-2037568908,-1924071686,1358822022,1505530600,179801]},{"sector":7,"length":512,"data":[-1070395413,-49551280,176013323,33441479,-55121920,-259325205,1343865528,-1191392792,-397403696,-558302014,-1142403047,-1959859204,965318,-1039801609,-1410838503,-963950852,2080375613,-336186600,-1161393388,-487129074,1343865349,1325175272,46007165,-92372224,-385647616,-1027604843,-15930599,-622327691,-1537677134,-2129737853,1981406975,1161454,-2117146544,-386107649,1503310529,-2096135915,1946222206,-18422,1264838736,-1954838808,1583348294,-1017256565,-1094756522,-1472298156,863306349,1551122051,-402426880,2062060928,1425139,1170673131,-956301310,-2097151995,189685447,871331318,1414046656,-1705751389,257163784,1595312872,-1957313698,82609132,100712022,1840658175,1349003192,1505464040,-1241069735,-9951379,-9584586,-1704083914,260116620,-1979820407,-804520890,-1706018444,260116652,-1741100976,-25038709,510985728,1840527103,872314623,1877496000,-1205972971,-397383641,113710174,72319,-25092885,376770048,-1577058370,-200970828,475636481,1349003192,-397361101,-963943576,1575324510,-326412861,10546305,12539734,106334982,-1996208501,-1554756074,-12757940,184841727,-2094762798,1946158206,1279165214,142409812,-145470303,1414308824,1414413955,-1593279232,-654879666,-967553373,855683142,74856950,1605911925,1183666189,-1552208,-2091296327,1979647614,114195,1343058872,1353729677,1505356264,10742105,11552454,-1559869813,-1096738370,-1073345683,-385649299,-1477967731]},{"sector":8,"length":512,"data":[-18421506,-2097094935,2080375934,8120579,1343063736,1353729677,1505341928,108954457,-1106084096,-1833435135,1183666189,-1679273808,-346465863,229095510,-1337553584,-1181947824,-1927915175,1358913670,1414280959,-2129613670,-397389297,-2037553515,-1924071584,1358913670,1353729677,1505351912,189708368,-1177556912,-805086631,721439928,-2115481406,1619430896,1183666431,1139298480,-2141627975,1946202238,1354773290,1342918328,1353729677,1342929848,1342178744,1342180024,91551243,-352320072,309251,1617619024,-2129738621,1963327743,1312227085,1278672724,-237705132,2122578059,208928772,294531,2122516861,58654726,-1946303000,-1956749369,79846885,171868928,292880444,556678787,-2096466688,2855742,803734388,1048824694,1946165550,1969612803,-326412861,8973441,2022083926,568873215,-2114941959,1975177470,-1160726516,-1979824503,-2048263098,171868928,125108284,192329960,-1206880832,-397384779,1488498620,1827164260,-2096436370,36410174,-672660619,432662645,1458594792,2022083862,1996443903,114727428,1451819008,-62486018,-386926616,-790095425,775848729,91488289,-344659224,842957078,1969510433,1683535889,-1351948208,1348711864,-395437336,11569579,6207568,1415624784,-1191319472,-402209661,1452003841,-62485506,1575324510,1426064066,-1957237621,-131267514,409087,-661966729,-13704239,20045735,-147719118,-231602639,-315488719,245087793,1119754219,-1106056435,233508527,-351373378]}]],[[{"sector":1,"length":512,"data":[243842568,1639842795,-1070377458,1623386192,46292318,-326413056,10808449,1007304323,-1609927680,11822086,-338408728,-1472298224,108266093,556795591,-135790591,289388660,1821829200,-386957336,-739755393,21731892,-2065166508,978970676,-2081482776,3934782,-2037561484,-397344932,-2037666148,104595292,745890904,1342219192,1348753592,-10713459,-1200756656,-2096708477,40740926,-1548217740,-38252544,1488474212,1424511076,113542072,1342177720,-344656920,1942611996,1839742595,-1206750206,-1202716509,-1202690819,-397384616,-998000593,1575324422,-326412861,-1472298154,158597741,-402456088,-1075279555,1996430984,629252,-14807212,1872365174,-1961929728,197561328,-401900352,1055457051,-2007897873,-397015829,1048837825,1946316200,-2003507194,1586047976,311901,-2081649835,-1101658900,1996488703,-35002364,-1979820407,-801244090,1376416954,-63313840,-387387253,1590070134,-1034033781,-1957363710,82609132,1623086934,-1809922988,1606690308,-28931054,-1073979767,334168086,-1962781557,-27903228,1178273141,1325954300,190760579,-1947634177,-1956749369,1438866917,1465314443,-1207667061,-397384029,-125046786,-1072969845,-1548209548,1790464102,-387428268,-10921546,-400877002,1755517207,1715374420,1415624788,-213522352,443924491,1343101624,-397361101,199974664,1343109816,1348903864,-1101071384,-963966715,-1034068385,-1957363710,116163564,2123061078,-16892,16664263,1354773248,199902952,-385647168]},{"sector":2,"length":512,"data":[113705253,-58946,872062440,1347440832,261154896,1551122051,-402426880,-1205958663,-1706020632,257163273,-2129731174,-61437681,1039812233,1400242175,1979710083,33521989,-2096663287,5527614,113716852,13311065,-1202667469,-1202713749,-1202713088,-1202713731,-1202716667,-1202716662,-397410300,-998024012,1952005134,10217731,33441479,151109376,1996425707,-46143236,-16737559,-1259798922,-1160757774,2062091125,50299136,1460040969,-1946230552,-23140104,57982987,-1962342977,151072199,1996489789,-774337693,-1476448541,890778818,891041048,885798092,16416387,2122520182,276168956,-231681,-1863779722,-386888710,938177855,475596487,-1070399284,191608912,232110160,192788560,374864,702544,309328,1545005136,1007600771,-402295719,233568658,65795979,-939524162,18952198,1606847232,1575324510,1426064066,-326898549,-1957210622,-4324226,1036487679,41158915,1609041643,8579577,1839742595,-2096008190,6881086,2078802804,-1472298240,393544045,-1986547480,457047622,1029665792,125042777,1839742595,1460171778,-1953020952,-1202983952,-397344769,-947174330,1024000301,980877316,-472786805,-1649934546,-1489653707,-1154101707,1463139125,1040046312,510920965,1342177976,-1946328600,-2129400848,1963525375,-339725564,112643,-45291440,-963907445,-443851169,180829,1839742595,-401902592,1738209478,-401637104,1438872635,-326898549,-2147025072,478191900,-150989638,1580336610]},{"sector":3,"length":512,"data":[-1216747440,1975520089,1183651404,-1205972816,-397406631,1348056420,375443688,1353729677,-83635302,1975520014,220444685,-1337553584,1553918032,-2136924181,1358364,839246583,954749022,-1072997961,1183648629,1605914800,1961381899,-2146500612,1575324444,-326412861,1445260419,142510935,990791307,58460742,-2147446039,92044861,-352321096,-1983892734,-1924661690,1187503222,-352321288,537183758,-2012461430,1191117124,-2092546312,2081355902,-562655764,92933611,1183450248,21268492,-2142878137,-294322115,16678531,44043636,-1979414495,1149766726,-1958328831,1177226822,2130155782,-138245372,1079801382,-1946532215,1177226822,2130155782,1183399940,-92864516,-96040112,1342180613,-1912834305,860937286,1390956736,-1956749414,214064613,-1084795392,1166682629,-1962888182,138775280,-265617228,-1144616114,-140967922,1552065531,-487074933,1522961232,-140918229,-1554218434,-1023189896,-1973651805,11799365,-1240902262,1220684544,1552033527,-396589917,1048812375,1962958038,112654,599281744,1357402125,-1959662674,-346260938,495670816,-16549889,-1956850122,65262046,-10715106,2050424631,-2110324900,-20322212,1551540550,1552156163,-713046469,1438867039,-326898549,-1101572526,1149905413,-1979665398,11929684,-1991720405,1790508614,1183666188,-991407954,-1202103886,-397386618,-1957055891,994527224,561970814,-2046441589,-28955812,1342178053,1343876280,1353598605,1504827880,-739749799,-346465871,1552332813]},{"sector":4,"length":512,"data":[-1371108016,-1312495536,1790466393,1183666188,-1209511762,-1923524175,-1957646778,-1274574308,1944604672,-633437271,1182007388,-1554219871,934829270,1183666196,1357402286,-1923524174,1577299550,509694,-1274329974,-1963422976,11798852,28899371,-1923657728,-397365690,1348055517,-1371108009,112720,-1729632176,1149898219,1342223372,1342242744,-392556056,1583349387,-1017256565,1458342741,74877783,-351895925,708608018,1015027572,-1979288513,1963211269,-2142877923,91488317,1962949760,708608228,92934260,76173464,-805086568,-1070398348,28836843,1566465792,1426064578,-326898549,1996430864,1354773252,-263811760,-96039600,1591535696,1962934953,435075104,-96039600,-1315575728,-14788263,-1070398346,1183666256,1183666416,854085882,-263811743,1666365520,-9377712,74825739,199999539,1358579341,1348709048,-1946198552,46292453,-326413056,8711297,-1927915690,1358921350,1348710328,1348688824,1343877304,1343877816,375450856,1355826829,-83758694,1183651342,295325908,-1341195518,2105968640,2124650751,1557570396,-369983859,-2033844118,-167641219,1947265350,1023773473,1483997230,1965960765,-817445370,-972756097,-1585524922,104553686,326392956,-396943381,-1072955611,-694077836,2080783196,-16353956,-346237434,2114387786,-817445284,1557569917,-150991174,66096098,-10691530,-1973627386,76074822,-396994746,1499050155,995940001,2002549766,-2037574118,-11468930,-1191215690,-1706033136,251331485]},{"sector":5,"length":512,"pattern":-667035587,"data":[58048523,-35863,1996477046,34708176,1583288059,-1017256565,-2081649835,-145338132,542957062,-1205963520,860883886,-1578610496,-1547685032,2057526488,1551803228,-1554196829,-1209443110,1672460288,1666955344,1621354576,1558056577,-2034761704,-890744740,75400036,-1338215424,-1927917568,-1705988026,251331348,1353729677,1504692456,-1202261877,-1924113274,-397365178,-998001820,1958742790,-339725564,96897794,-11510650,-253229962,-396797521,-694026609,2080783196,-1207601572,48955393,-626802637,1958742876,1551671558,-2091067741,6084158,-164418690,-963963157,-150991174,-603585566,-773944484,-2145516573,1174899036,1557542459,922739836,922705110,99114112,-1547685029,2057526488,112732,1575324510,1426064066,2122574987,460587012,2114485888,1183519090,-754405112,105265896,28837237,855829248,-2145784896,1971128446,138840849,-388822863,1963345466,112645,-1070398741,442973,-2081649835,1465256172,100157127,1551540522,-375159,-1956849610,529266782,-16615425,-1956850122,-782444514,-2145516573,-13107364,-10716618,-396590538,915143391,113728728,270666,475596487,-622329813,-28931815,-557324208,922744971,1586191576,-14709768,922682231,512449750,-472818472,1551900163,922695679,922705018,-1662493566,768052218,557711339,-385649152,-661978614,-13704239,456906663,-667035588]},{"sector":6,"length":512,"data":[607981117,-96671427,-700654532,-667035588,-1153574851,1295893565,-12746435,-954433530,-853780218,340178944,1552332880,-128021680,-1274525814,328960,155683408,50659508,1354256384,683167744,-1779937280,200837972,-1586987777,347741312,98760448,-397386190,190427419,-1195870784,-11510650,-1070397834,74907472,-1553935640,556096734,2112768,512436597,529226880,-1199765562,-1202691158,-1957665966,-1956872162,-397393913,1499049455,-1389828016,-164406951,-16635159,1743259766,1975520253,-9967357,-333592,-1961066482,1036422135,58523647,-2097038103,57994239,-385744151,-4260023,33155583,1557544579,-385647104,-1628896785,-666991871,58654812,-16673559,-379791346,-660536947,104546396,58481878,-16678679,-379791354,-660536967,-2113520804,-385647268,-2103377555,-670684836,23325020,22839969,-1587750906,104553688,58547414,-1593749271,100883578,104553604,-696427306,22839969,-346260986,1557701069,1552156203,-346236765,1552064775,1557661185,1557675651,-1577944064,103373956,1048796282,2080398458,17819907,1551500999,115933184,-700546303,57999452,-1593770775,100752516,2057395416,-2079980708,-704234660,-1592754852,100752516,132865146,693928609,-1587750906,104553688,-260219690,-956248855,6084614,12839168,1557544579,-385646848,-694091591,-660387748,11528540,2113929091,-1946711262,-49722,-320273539,-16454912,-1587750898,100883578,104553604,-276931368,-2130671383]},{"sector":7,"length":512,"data":[16776806,201213579,-385649216,-397410183,-1990610833,753466950,206276,-1946401143,65262046,-1956872162,-13107425,-397345162,-1072956207,-660535692,48971868,-259276749,1031075339,-472785269,1551900163,939466635,-100609,-1427571594,1975520252,-336186588,-773944544,-2145516573,-14709924,-25755849,-386107649,-1072956275,914949748,132865240,-701088954,-1579516836,104553688,92101754,-346260829,1551540507,1552156163,1557661243,-660533633,-2079970468,-2113535140,1551541084,995916449,58063430,-1711498007,1552039671,1551504937,995916449,58063430,-386103063,2095708219,1606847484,1575324510,1426065090,1465314443,-16222465,1996424822,-61544444,-166989685,-1696005251,-773944576,-2145516573,-2145416356,1568439871,-472785269,1551900163,2139168651,1965960705,1666955297,-1423972272,1341688665,1666959233,-2127025,1522591799,-193675254,83398,45621227,-561295327,503571409,126573696,1538805824,2078822499,1348032938,1504343528,142016345,-386221592,2146039873,-2034753793,-1346875300,1538805859,-1070378909,-957853616,-773944486,-2145516573,1074236252,1552332880,-1438586800,79190361,-1962743040,1566465990,1426065090,-326898549,-950577564,65094,117440307,-2136925056,1358364,839246583,-1058516898,-1072997971,-4323724,22145535,294531,-14799756,-1070398346,1183666256,1183666414,-471314184,1558094679,1946158249,-297366266,-134330743,39640582,-1929153536,2122578046,192151560]},{"sector":8,"length":512,"data":[-16222465,-2065167754,-10921558,1996425846,-25755898,1563551831,-10690909,-2034759050,1760055388,-1587979862,556096734,2112768,79562357,14805248,103531659,-1207631824,-754667024,1551672296,-729030447,-494153685,-2136750965,1551671644,-150991174,735349730,-1948087344,1557963716,-1172537183,-487129068,1348350469,1504511720,175489035,-402098433,-1072957034,-4323723,8579583,1342178232,-1200676888,-397410303,115905750,478192119,-150989638,1580336610,-1395529648,1958742873,-16891,1996444139,108461832,-31463337,-963907445,1962935357,1342222398,-1639543530,51681872,1183649531,1659392158,1183406505,-2034741092,1183666268,-35106658,113542060,74760203,65781811,94127755,-11510650,-1998058890,-1202103895,-397410301,2090954564,-754667172,-1950088224,-2146500640,1606847260,1575324510,-2097149758,2855230,113642612,-972933666,37084934,-627044117,-1576860631,-610257442,-1576926167,1455633887,558499527,65732609,-401337112,-259320986,-12728693,200373503,-1207601674,49020927,-882981237,1241958230,-402652895,-259320847,-12728693,-940280577,505174278,1590070016,-326412853,116873046,8395500,29230452,-15013120,-1205991818,-1706009376,250347676,1348264120,1504218344,-964431733,702324745,-125108044,-1272325472,737684224,1048795134,1946168209,178181,-1070398741,519570271,1348264120,445331199,445200127,1342194872,-2091569688,1736510,-189266572,-1207702783,1174602528]}]],[[{"sector":1,"length":512,"data":[475636486,1558218182,1558231040,-1473255344,-336557223,-528169466,994451548,-1191805705,-628335392,-883073441,1458342741,-67352,1996424822,5289988,1370351696,113766539,1973337,2113928835,1989826055,1495113518,1979711107,-18427,1996425451,1413801988,1566490675,1426064578,-1957237621,-14809482,1996425334,80255492,-259322117,478154495,260044299,1343610808,-402098433,-4698044,-1962742785,-1034068282,-1957363706,1357677548,1493616470,-1207906788,-1202711057,-397386457,-1072955530,117393269,-2136925056,1358364,839246583,-1259843490,-1072997974,1183656821,666390704,-1070378915,224049232,-54794160,-963907445,2113929021,-2146500853,1989826076,1495113518,1979711107,-2146500855,-18404,1183648747,861294768,1525174464,-443851009,-1957311651,1357677548,1493616470,-1207906532,-1202711034,-397386457,-1072955650,117399669,-2136925056,1358364,839246583,1021857886,-1072997974,1183663221,666390704,-1070378915,224049232,-62658480,-963907445,2113929021,-2146500853,1989826076,1495113518,1962933891,1183651353,-744861520,185531139,-1928039232,-397365178,-1073000411,251595125,-4711296,-1928532993,1448128582,1342178232,1593755880,-883038837,-2081649835,1946159742,172395311,-1961196637,-2120021946,73319450,445318796,445193865,452992652,452855495,-324986239,-10541798,-1560133619,283843308,452992652,452855495,645995141,-48293140,444532423,-1034092544,-1957298168,-1976970698,161612612]},{"sector":2,"length":512,"data":[71600666,-1978004830,195166788,88377882,-1961227102,-1973048290,437101063,-1576974454,112728590,62410752,163074074,-1058516966,113542054,1342179000,1343880632,1343883704,-2086228248,-1205991740,-1706026270,496970993,-1017226919,435750598,1683005520,-1592132958,-358390777,-1858174182,527695915,-408813392,451322394,-31852128,451453640,451348166,435855361,-375194108,-1608455398,-1057084966,-1608849758,-1057084965,-1608849502,-922867236,-1608849246,-922867235,-1021646430,-1275051,1996424310,-491250170,-157659110,-1960992980,79846885,-326413056,503609087,1343939256,-1624441958,1575324445,1426064066,-326898549,-164407728,-397359477,1996450896,108461832,1722005534,1458301008,813023243,-1337553642,142016336,-402229505,1183666657,-85438288,1975520010,2001940,-33110245,-2128968422,521858086,-339725315,33603100,855930623,2011713728,454730751,150999528,-400888778,28850782,-443851264,442973,451683969,-943456289,18592774,470218496,1946159131,472285455,-2113931493,-15012826,125167,-2561853,-397361101,-1072992852,-4715148,2062045439,1343991860,-1023165976,-2081649835,1465255148,-1107001717,1048794302,1946178636,1278672677,279747156,1347555201,1722005534,1369827408,242597899,1414412031,-397361101,92929770,96929003,1170669566,-947714814,1480491779,1500774484,50218695,-62470400,1206583318,556163,-1548208268,-963948442,1342179845,1503946216,1975520089,1518109476]},{"sector":3,"length":512,"data":[1443329535,-387918360,1150025538,-972715686,-2096889275,1183450055,1564772606,-335657217,1564788228,-61931776,-2090940797,1962998910,-16398413,-1956749313,46292453,-326413056,2123061078,-1961039100,63341559,76221931,74777915,-129849,-2096904573,-294256836,-2096904317,-545915075,-1034068385,-1957363710,49054700,-1094822058,1279165268,192151636,-16490869,-29497289,-11252061,-1394080650,1490943,2088778731,829685853,-1268956022,62539776,-1948059904,73270232,-2080481655,108396095,-512300970,1586172907,-398983170,1149894147,-27358456,1149831051,-964472998,1979648862,-1956749375,46292453,-326413056,-1962385781,105265927,1183516022,1560740100,1426065090,-326898549,-1957210546,2123039862,-1203335928,-1577171319,103488270,-969204968,1152913267,-1070378986,1270278224,-1276526541,-1203335936,-26941360,453648068,1183637251,-1268872778,1404466943,-1950984565,1388708803,454598992,1346422571,508520424,-16353537,1996469878,1508398772,406192463,456833051,-396994736,1018756983,1448562715,-1191219480,1464867610,-10098602,11683527,-1961760000,-523128250,1343962629,1357403735,-1303969793,78806659,243394930,531228,451683969,-68620321,-15930569,1448607350,-2080428312,-1962672570,1065614942,-1913883137,-397363130,938016428,-16332847,-956300952,1815558,112640,-443851169,442973,-1094822058,1490772,2088769003,192151645,-10861369,71601151,1325941897,190760579,1609004543]},{"sector":4,"length":512,"data":[1465303902,-1084965186,283836438,6126720,1149961844,71600392,1590068047,-327811317,1438867039,1183509643,1342223364,1504072424,108461904,-1952329240,1958743013,112645,-1070398741,311901,-2081649835,-1957296404,-1956808394,169788614,-1932000485,1586101830,-79247620,1187416832,454559291,1187382898,854262010,-237884,-1977156538,-96040953,75309116,553273030,553287296,2122319477,175382779,-16497013,-1073019826,1183451252,-79263494,1183498219,-443851014,180829,-2081649835,1465256684,454702731,516212363,-670885110,-1979824500,552336478,-61931698,654073540,1183319946,108462071,-386435329,-1072955583,-12188043,82574406,-596249077,1568224905,1586233139,-1945690616,1586100806,-1004016648,-1977156514,-146372601,1190938367,-16353537,183039862,1958743039,-146372072,653811396,1191118728,909854712,91429656,1912897083,-128006962,509478,-443851169,442973,-2081649835,1465272044,1354385037,-1929627160,-1916563757,109886046,512301876,2122324786,141892356,450823879,485228288,-16482688,1183460468,-542926844,-1643722982,-1979711461,-1449655226,141885184,463341255,317390850,-16496906,113708148,72606,1187382507,117381892,516168832,503520010,-970581224,-2136925689,1358364,-661921033,1580763079,-1947664385,512401914,-150973766,-1948742686,-1553985145,297278234,968380416,-1969139685,1161758,2013651703,15224927,113542049,-1172403551,-487129082,-2020878197]},{"sector":5,"length":512,"data":[378216092,-494855444,-1039400977,-15012701,-399911370,-125069515,-397361101,28871372,-1612165120,770199690,454730123,454559291,413206134,454730523,475596487,-1205993442,-1706026270,496970988,-259303079,142407179,-472785269,486848395,451683969,116915647,72476,1183655540,32002234,472285692,-939524581,1815558,-16333056,-402652824,1048825466,1946180724,-347281405,-1590357528,347741312,98760448,-397386190,190423775,-385649472,2122383108,1333009156,-12728693,1027962111,125042689,1946157629,-1203967190,-1202692611,-1202711012,-397410272,45678050,-890744832,-2031595497,-1947169841,-49722,-974584964,-401282050,-259294597,-12728693,-385647361,65797812,855965886,-1008185152,1374179465,1122523018,1354773398,-7742488,-954433522,1782790,839304960,-1962934245,-1956749370,46292453,-2091428352,1812030,1219758196,1568675467,1583310797,-2091428157,1812030,1202980980,1568675467,1583310797,-2091428157,1812030,1049303412,-164422744,-561312277,1152697226,1568675467,994469837,1609528055,1465303902,463879811,-1274514432,-2146006203,1600638301,-1957313698,149717996,-1430300842,445489435,-1980086647,1048836166,1946164134,-1898237144,27179971,-1106801114,48955402,-24950970,638022418,87688330,-24907148,-955550702,1811974,-129579264,1048772608,1946164134,-851266486,868453223,-1710313006,60735,-1979820407,1452014662,71731974,1929270843,990213907,209124422]},{"sector":6,"length":512,"data":[-1946265973,1451883590,71731462,871909003,106314706,91688306,1979991611,71731974,-386382199,-930385964,1006257803,-1996261695,1183578702,-129614854,-1918694538,-1509505254,-352321509,-129594577,-1961194077,246500312,-1270617133,-1989685949,-1994676194,-396525546,-320274725,-851331842,869501799,2098629056,1568383837,-443851169,311901,-1275051,1996424822,1354773252,1354623056,1560692363,1426064578,-326898549,-1957210544,1606289022,140413707,1946173312,-336360700,-1705566630,251331539,74760203,1273755531,743390848,505246720,-1337553577,-1648236464,-1202693799,-397398961,-1705967706,251331539,611696651,1732460160,505443328,-1337553577,-1650595760,-1202693799,-397383869,-1705967742,251331539,57982987,1454405261,-402360577,1499045247,-443851169,442973,114262,464797315,-950242048,-803448570,1354773248,1342925752,1343285176,1348903864,1358954424,1342930360,1342178744,1342180024,1342178488,-2092706840,1033376452,628359195,1946177085,5848344,468386420,1023629288,91553793,-352321090,-336186622,-136583158,-335912472,-1946799358,1438867142,1465314443,855932555,-7804682,58048523,-956263191,-15001082,470206463,-402653157,1031850568,-385649408,1461584076,-83635302,1975520014,10479875,558499527,-4718582,669536511,-2147025146,478191900,-150989638,1580336610,-1616779184,1958742873,-2146500857,9627932,857411233,1779842002,1967027970,1745238790,-952731902,-786671354]},{"sector":7,"length":512,"data":[1354773248,1342925752,1343605176,-18345,192788560,374864,702544,309328,1124001872,1007862915,-1207536551,-1897267201,-11067904,505089590,1343953080,453785343,453654271,-83835494,-2081387762,6059070,-2081946764,-2146500633,-1107039460,-24969215,-955747071,1775622,-2093749504,242549502,1343602360,-397361101,-1070381992,245449195,1003631387,1996646934,990278929,1996646406,453943561,-1543504379,-396944616,-164378039,516166123,-2144986358,108337720,454571657,994445291,1914378294,-112793367,1593835960,46292318,-326413056,-402229505,-960999365,-1430761457,-1259843485,-1733733,1189610614,79846736,-326413056,1448275075,74877783,558499527,-4718583,-202878721,3964932,-1598093707,9562379,-929409506,-1458636031,108265473,-385089601,1048772735,1946168207,1183667742,-1662496592,1183651583,1956270256,370080513,1353729677,-1650829794,504298241,454598998,922701888,922688268,312089354,-1995506943,20819526,-1090161408,971705289,44990083,-574683787,-2094077173,1963175550,200195845,1048781803,1962941364,-73771507,1375731735,-921049008,-397015829,266914137,-171972560,-352321096,-1070377207,1127409744,1583333427,-1034033781,-1957363710,1988843244,1174530820,1948269696,3965178,28837237,1447291648,-1454423320,343212046,714749183,185531138,-1207601984,48955394,652984371,-1717938658,185531138,-2146142784,343146556,973175936,889130613,-83744102,-1207571698]},{"sector":8,"length":512,"data":[48955394,1566490675,1426064066,-326898549,1996445264,-43259900,-963907445,1979711293,-373279995,-167051119,113716341,6936,374341808,1353729677,-83684198,223655950,-1337553584,-1719343024,1183668569,-722972496,114223,1996426475,-1337553660,-1708267440,-1548199591,1183666278,1167741104,503316639,1348903864,451950335,451819263,-1624341862,147096349,-1204811544,-397344769,-1070388879,1347440720,-2114777624,-551883738,1354773503,191005672,-1341623104,-1746382821,856091640,-2048372544,1590070112,-1034033781,-1957363710,1357677548,1722005590,1312680016,1343993528,1348686520,1503233512,1958742873,11528451,1343052472,1348709048,1503228392,1958742873,10217731,1348903864,1353729677,1503235816,1493616473,-1207905764,-1924131586,-1202671546,-1202716665,-1202716669,-1202716592,-397410264,-259309632,-1072970101,1183651708,-1070378832,1522028624,1659392013,-1947169810,2109737926,-97522,-1070398347,-963968277,369141481,1353729677,-83635302,1958742798,-1337553648,1112008784,91602955,-1997946829,-1337553664,-1337553584,-1622828464,-1927938048,-11489210,-15011786,-1709511114,496971394,-16202621,-400888266,-1072956081,922698612,-1548215570,-1209511834,190405016,505246912,1348903864,451950335,451819263,-1203425048,-1202690397,-397383949,1499044039,-1204894488,-397344769,-1662507010,-164960013,-352321096,-1548214760,922701926,922688240,-2103829778,-2095210706,-4716348,-443851009,-1957313699,1357677548]}]],[[{"sector":1,"length":512,"data":[353286230,1007466576,5290064,1104799824,-963907445,1065140235,1346112696,-1924889112,-1202671546,860896268,1522028736,1793609741,-1947169811,2092960710,-1337553634,-36968368,91602955,-335544386,-217659890,-1070399386,1592191056,-1962540866,-443851066,-1957313699,-1561558548,-1957210624,297403974,-1948059904,-759198760,54889001,-2037841740,1996488542,1619430660,82333951,-1990633064,-1224801210,-1070334114,2139220048,1358954424,-402360577,1499043686,-166989685,1996425589,-1862604796,-973046807,-12189692,-303561610,-1744532848,343368,-661957001,-13704239,-615329881,-263002798,106101586,-1974267565,-1996442619,-335585658,21334601,-2037841740,1055653726,-1274919542,1585875200,-1976308737,11797317,-10582391,1166682347,-1996442620,-335585658,88443421,-2037841740,317456222,1954546934,-1744532979,1342209829,-397361101,-963935899,71731520,175437323,1065408651,-385649664,1583349580,-1034033781,-1957363708,-11053332,-399885258,-125071883,1342179768,622576289,-397410240,146300246,-1029615616,2106651,1565059152,1342179256,622576289,-397410288,512449850,1200237112,1342223363,-397361101,484998791,440447,74907472,-1946239000,-1976944610,11797575,163115147,32002048,112732,-541568944,-396996589,146313225,-303542272,112731,-424128432,-396996589,129535989,-639086592,112731,-323465136,-396996589,-396914719,1583320417,180829,1458342741,-968982441,57999387,-402618391]},{"sector":2,"length":512,"data":[-259281364,465712691,465712689,7390967,113706612,-58434,465569479,116850688,203714,113706612,72640,465700599,108265476,465569479,116850690,531394,113706612,203712,558505611,-472783919,-1063132207,65065243,1287621592,-1103217887,-2130217701,65471614,1048779893,1946164164,465871109,-544535317,465444489,-2020875311,-397401580,1583349444,180829,-2081649835,1819710,1183517301,465871620,-22353840,180829,-1947432107,-945617850,46292251,915101184,113712071,7111,-1017198965,-4696234,669536511,-1039743233,1048772701,1946164167,466067718,-402616855,-125063808,-1072969845,2112422773,1927829248,-2131719227,1820222,-24951180,-2096794373,494271230,-2085716248,74841086,65781811,1342177720,-1962046232,1355254776,-335574552,-16874679,1558714997,321513646,-947128181,-986716080,41861131,-396886221,720109418,1947205251,301892377,-24963980,-2096139248,175379710,1947467395,318669573,619187317,1459565486,-369193496,-947126411,-389849505,-1072955566,1048836468,1946164167,-13244411,113707499,7108,-1012008216,-2081649835,1589904620,1468737028,126559746,-2113929435,-1996423198,1183448662,9724,1106561,326422539,-1946265973,916550,13271296,-27883009,-1946401143,1183579734,1575324668,1426064578,922741899,1996430297,74907398,-1705983949,251331956,311901,-1275051,-14952138,1996424822,112644,91527760,-1034088709]},{"sector":3,"length":512,"data":[-1957363708,-650706964,1996430875,74907398,-83549542,79846670,-650707200,-675799525,62410845,580538368,185531141,-1207601984,48955393,1438892083,861334667,-400233482,-1072955433,-677371532,1178310749,-1106938620,48955393,-166988237,-660534923,1347590493,201295336,-1948748554,-1034068282,922681346,177871833,-1022428411,871140181,1320702144,1996443659,-18428,108461904,1342929848,1342180024,1342182584,1342180792,-1959099416,79846885,-326413056,1443163267,74877783,1573731979,1183434635,-28931588,1342922680,-823634346,3965173,297273973,-396996596,1499042747,-1070377442,80255568,-643625221,2143292187,220444683,-1947707824,11397631,467220223,-59310306,1342970808,1502822632,-1706016704,251331874,1342970808,-386107649,1499042634,662028299,467220223,-25755874,1343998648,1502812392,580538432,-1206977787,-11527222,602472054,190405011,-1207274304,1448088565,-335597080,-650707116,-1202250213,-1706033150,251331874,1946434944,336115722,333993552,859237375,-890744640,1958743038,1574746156,-667484336,-24713123,1342178744,201241832,-1206487872,-11510296,-396502986,28900976,-1628942336,1975520254,-339725564,-650707140,616046107,45633630,580538368,856619781,-397389632,378142254,547577378,1579458910,-150993990,64107490,324935686,-1990319594,-1554122474,28859895,-1956749568,46292453,-326413056,1443032195,-1173993845,-487129079,906227851,1149918671,21244418]},{"sector":4,"length":512,"data":[1183367422,21269247,76173464,1183666328,1183469823,-1325353980,232837896,-397410296,-1956738091,79846885,-326413056,467345035,512440319,2013224488,-5642236,-1962651905,512427078,126426075,673090384,41418590,1577030376,1426064066,1586228363,20414724,17299200,-1962183680,529204830,254019466,1586172395,-16282874,-1965520121,-771444473,1561273592,1426064578,1465314443,-1962639733,1048774262,1946164315,1527709449,1573167132,1465283051,-1560301336,255614404,1465259637,1358931176,-1628940458,-771444225,1490062048,1340850698,1573142144,1446933774,-7870377,1537425560,-396929508,-995950723,1963932765,-396929511,1448148849,-9705385,-523107151,173592714,1573167810,-996140565,-661940131,1575585674,-346176350,1573167114,-1965519976,1599990151,79846750,-326413056,175541078,721962635,-1960938298,-567605154,-972792317,-459276281,-972842915,1183535168,-11517946,2028471414,-1034068340,-1957363704,82609132,-164407466,1579038265,909708148,91512358,-351000386,507413270,91488350,-350997826,641630986,57933918,-1961611842,-1977886946,11799623,-1977644208,11796807,2030102608,729085451,-1738677600,-1605896053,-1986503197,1444871750,-1958926104,-802423210,1392268937,-28931241,1448562760,1342177720,1601673448,1575324510,-326412861,1448799363,-1505310889,1187446784,855638184,-1435072010,-1585917208,112860245,-1948059904,-541589544,-575144165,-69474277,-253208,-10629834,-396502986]},{"sector":5,"length":512,"data":[-845022208,-28931747,1183659499,1183666430,1927827626,-1387886338,1958742936,-15078654,-1957255050,1191159366,1183666342,-387428178,-1980353538,132884598,-2001910134,-1958302142,103546438,104553933,-1099145768,475741827,-4754176,-11097994,1183688310,-1192734546,-71964418,-744243149,1579590493,-1201791325,-1202692578,-397410302,649657224,45633630,2112376832,1574156539,112720,-76355504,1574125187,-1962248960,-954475746,-335544569,-852033725,1574150493,-150992454,1374179554,-335596549,512448268,2013224488,-47847420,-750896313,-1947304867,-2095326434,74841919,1991,467345035,512440319,2013224488,-50206718,1610507240,1575324510,-326412861,-1962518901,1347552326,-1172548191,-487129082,1515772043,467638153,467502985,-1172548191,-487129082,-1558454011,-661972005,-63545,1576968936,1426064578,1048833163,2080382037,475373863,-150993222,-1948742686,-1961107561,991681927,276105302,1963345467,75399179,-399739904,669777519,475348611,-1206684397,-1202716558,-1202709539,-397403165,-443838589,117376235,1996430421,108461832,1577021160,-2097150270,1856830,251598206,1436621909,440860,-519707913,467378971,-1006754072,-2081649835,-1957296916,-167050122,909855612,1165844004,62572171,870512384,537265106,571872094,-397389218,-440862203,62410845,770199552,-440918278,-1410838435,-27883015,-2080618871,91619322,1962934077,-25263348,-2094828033,1979645054,571902749,1579196766]},{"sector":6,"length":512,"data":[-2097075195,1347551442,-1191590680,-1202692635,-397410301,-1205929492,-397386267,-1956710038,46292453,-326413056,-402229505,1347616626,-402360577,-1034027279,-1957363708,1525449708,-912173226,-989447331,-1995738275,-979261370,-1404663459,-979301141,-1471772323,-1990342239,-878597050,-955892899,-1995738275,-945706426,-1371109027,-945746709,-1438217891,-1990341727,922725958,-1024972296,454730116,-1952037239,1575725694,1470658303,1470920447,1353729677,1342177720,-1955332632,1982573686,-1438217304,1957578299,1308748557,108197387,548436608,994506100,376680062,1183702667,-958921808,-1958343417,-1337553442,130471939,1996441098,-1337553498,182998608,1958743018,-1502215927,-1367459001,446799478,457614107,-1549384053,243342152,1055468,-1205692952,-397410302,1583305536,-1017256565,-2115204267,1442881260,142510935,990267019,158534214,-1995802997,1988692550,71731974,57853755,-1962899479,-1980199945,2112423030,175570688,108461911,1686539607,-1070378753,1934157904,1223423539,-472785269,-10189171,126605315,-1979776987,-1308663162,636015364,-1769271552,78774114,-1039408429,-10320247,-472785269,-10189171,126605315,184614693,-1946197370,-1914449442,67069078,1174899162,721831563,-969209274,1996467827,1996445450,-2037557498,860946276,-1830268736,2117814131,-385648892,1583349627,-1034033781,1465253896,-945569741,1573233501,-1560280648,-912040501,922701917,-1561829941,112758,1993140304,2002446416,1573207683]},{"sector":7,"length":512,"data":[-1207602176,65732632,-1560275016,1525162314,-1946645513,16721351,-1872369584,4341081,1048786293,1946181061,-986251501,-952696995,-919142563,-885588131,-19077027,-1554134623,-878617147,1573364573,1573205759,-919142576,-1008185251,1470491646,-1950612248,100566000,1048783221,1946181061,-986251501,-952696995,-919142563,-885588131,-23271331,-397361101,-397380030,-1070369072,-2097046807,92143614,-1863727221,1036421889,58064900,-1946198551,786682328,1588111359,1605590885,1593859762,1048797208,1996578249,-12523261,1573207683,-1592364032,104553929,225861061,-952697008,922701917,1072192971,-921763842,1573495133,-885588144,1974200413,1573207683,-385649408,-912130294,-989447331,-385650083,1340866302,-1738677344,1573455419,-269941897,-985758722,376701021,996002209,1935525126,922701837,-11510329,-396506314,117439982,-912171575,922701917,1525177803,-985758859,57999453,-1577141783,104553929,58154437,-86551,-10630858,-10631370,-10630858,-396506314,-1746272842,-885095426,58130781,-2080469527,6145342,-878635404,-955892899,-15894947,1348322614,1573467903,-41097136,1573467903,1573588735,1348324257,-2089486104,6145342,1474888565,1573626366,1573324347,1273561970,-1605374978,999841250,2002635526,-29562621,1573207683,-1592364032,104553931,225664455,1573205759,-919142576,1005080669,-919142403,-888733859,1573626205,1957161040,1573207683,-385649408,-878576122,-955892899,-385648803]},{"sector":8,"length":512,"data":[922746362,922705349,922705355,922705353,65560011,-35329539,1573207683,-385649408,12123610,-1017225218,-2081649835,1465255148,558499527,854065158,-1947169803,16721350,-1908545456,4406617,1470182773,-28931812,475465415,512425986,1200233431,1342223372,1200234379,1342223361,-395172376,-259261080,-1543616885,-25093033,410320384,1459145704,-1950753560,100631544,-1070398091,-2097092887,92143615,-588659061,201294592,1048779125,1962958366,-7804669,1579038463,1392177640,-96868272,-2080409111,427101439,1579564675,-385649408,922746730,-739746266,-397389062,1542060571,-750877697,57999453,-1946201623,-1961108706,637447,100918007,1183407567,1036487676,58064906,-1946208791,786682328,1627695103,1631871286,1630036250,1613783398,1613783088,1632788528,1586192732,55020284,82333848,-16193033,-1963172213,1352139847,-369690904,1586233082,88574716,-387428200,-18028042,-1963172213,1352140359,-369698072,28901086,-790081536,-19600906,1574123263,-369703192,1586233034,125304828,-397361101,-1142293837,-1956749314,-1581031963,104553941,695557585,1574241991,-626982912,-83477667,-1593477539,65756667,-1554130271,922705361,-14804007,1348324662,-83549542,-636551410,1574281565,1574242047,503568523,126508493,-326412861,1443032195,74877783,-1728074520,-947128181,-120388175,50333477,-2114942010,-352313369,-7084026,-1958345592,-1073000505,80147317,-8132608,-385988984,1183383421]}]],[[{"sector":1,"length":512,"data":[-28931073,-443851169,180829,-2081649835,-967433492,855694918,1574020032,-144845405,73260038,-1207470848,-397386243,922694774,922705401,-1763156489,-203560717,-1554130783,921198042,-28931841,-1996541720,451673926,1356744333,-1946195224,1576909040,-565801648,-2013730736,-1072998055,1183517309,-28377090,-596262901,1348337080,1356744333,1502076392,1958742873,2996237,112720,-107616176,-1202321173,-397410303,-1956710005,1438866917,-326898549,-1957210540,-164428674,-1557531487,909729320,594811991,475479683,-385647103,-8191676,-402230015,971634873,6600705,112720,-112334768,-1593758743,1183392074,202488062,-1404662448,-2019432368,-1477944999,-62486163,103531659,-2012938192,1576772602,103531659,-527737349,-844905333,1573888861,478152447,-1172537183,-487129068,1348350469,1502239464,91537419,-1796606413,1460061952,-1929379300,-397366202,-1072958613,-2132212875,1460061952,-1610612452,-1147642397,-140967934,707244795,-685863984,139954203,34097034,-27401466,172460224,-1738677600,-1728052549,213056503,512479274,1468537815,155683337,1575093762,1200144638,178187,1277356112,1342177720,-2089690648,91554559,-335647256,1962871579,1430160135,225836828,475608831,1342177720,-336040216,-167122941,-1946392088,63212528,-1956775162,-650214432,58589211,-877592,-2128838642,1962803454,178185,1282336848,28837867,921194496,-59310209,-1954719512,1252261446,-18399,-269424560]},{"sector":2,"length":512,"data":[475465415,-963969024,-443851169,180829,1458342741,108432215,1586233139,17286916,3964928,1065944949,1256966027,540835910,1015085684,-336235511,-1744532965,475969616,-2050693040,1580030297,-1311274212,65196804,1190693826,2083536000,960266245,1015077758,-2147124159,-780253636,1946172544,73304839,1991,1583335307,311901,-2081649835,1586173164,38243078,1183651408,-879079188,-1961956352,939460190,-163148522,13343312,1183649516,1874350326,1183666204,1996443884,-2049316860,-397387431,1499038994,-2062751664,-443852455,311901,-2081649835,1465259756,1996488499,-364475130,-2051938224,985160025,1183666176,535318762,-1957078651,197561328,-1929022016,418114166,1174406342,1357530765,-402360577,-125042934,-2096865653,175374399,74907478,-1979778584,-678691258,1610499723,1575324510,1426064578,516222091,-2128207608,1052791,-1744550262,116906123,33579957,95946100,-1962742929,-1591088957,180829,1348711864,-1602506776,1336042502,1443793508,-1257834652,1946157667,284786703,-109050508,-972720864,40129798,1683304074,1682904714,1679963786,11846282,1946157629,212257,121445492,-350784512,-1241271808,1978468905,-351817212,50167817,45220981,378023350,914908239,11559970,-1268506718,1678484224,-949738590,1348732678,171868928,678690876,1673084547,-2094959616,1864254,1048584309,1963418703,243717,129500139,18260736,477234887,116064257,1007290055,1048641536]},{"sector":3,"length":512,"data":[16711958,1048791412,1963393302,-1157171446,1946157411,-147985606,23312134,-1609140992,1336017174,-2097041308,33625662,45089397,-345746014,-1187085542,326369379,1673201399,192217089,18233087,872340712,-1207702592,-1195180031,-397384451,-202868052,1958743038,-1257834503,1946162275,1396605192,1962985572,-770801659,1455620395,1683333207,-1073020748,20778100,1024947200,175374338,767432427,692502315,1354632939,697089835,180225771,687914795,-118991018,-1017225378,-1579309592,-492610179,445489434,505078947,1343939256,-1624469350,-950445795,1775622,169788416,130426395,-585177062,922703555,-85458658,378100100,715349548,-336186530,-773944557,47331,-2128166770,-1878978881,1174893968,8453761,-25041028,310182016,1342177464,1342234040,18757375,-2088447256,-1017248060,1579955967,1579824895,18757375,-2088452376,-2084370748,3934782,111151220,-402607004,113745715,74032,-398464536,-655868869,-467474205,-390434840,-1008204433,-1957313537,116163564,2123061078,-831723516,-1954961176,-2147039248,201326364,184841727,186217718,-402098954,113658256,-402646074,532168197,-1070378987,725280848,1342177720,-390683928,-166985839,-16055179,1236810100,703090709,-1927915721,-1705969082,250347700,1358579341,-1204348952,-397404841,374748944,1358579341,-335498086,-96039666,922675280,1344042168,1463220200,1501427432,-443851169,180829,-2081649835,1963000958,222476319,920315984]},{"sector":4,"length":512,"data":[1344042168,-399059992,-1125598788,-15669244,1342177720,1501415144,-402360577,-1034027200,-1957363710,1996445420,-2112624636,-904492455,-1962887638,-938046734,721466922,-265599246,-11079983,1996424822,2104616964,79846750,-2091428352,-13974466,-1070398092,-1207923479,-397410290,45631308,1706577920,-1310175211,309503,17283152,-5838768,1342178744,1343582904,-1191207960,-1202716666,-397404786,28901264,-672641024,1463716716,1036487452,108331009,475465415,113704962,74058,475596487,-1293418495,-1947169812,1958742982,-1696049419,2047409,129502581,867717120,1307070476,1037298687,41746431,247002675,1843941376,1463716167,1606847260,-1957313698,1357677548,83934806,1007042179,-1206946816,-1924121588,-397365178,1499038083,-4715541,1183666431,-655863632,-1333886954,-1206946560,-1924133548,-397365178,1499038051,12452843,-1337553658,1354773328,224049232,-698619824,343785483,2113929021,-1192195326,-1924133548,-397365178,1499038007,1353729677,-1947816728,-443851066,1048822621,1962949636,1742190626,477542480,1742190672,-484972464,1742159488,-1207602176,48955393,77840435,-1206195396,860907479,-1202696000,-397403013,547959723,-955878144,3933190,71205632,175374396,1348982712,-1548466712,1048787972,1962949636,477542413,1742190672,-2134775728,-2084349607,1812030,1048654709,268442253,-1070398349,922692331,-722986355,2098628945,1568383837,359972875,721424568,693992198,-954561274]},{"sector":5,"length":512,"data":[6126342,2097610496,112733,-326412861,1443163267,-1218779049,-402483480,1458109493,-12392196,-396580888,1451839874,-62486018,190623976,-1207470656,-397410303,-924254798,1958742838,1051912199,125157387,1342177720,-156184,1996488310,-517019396,201289960,-1207470656,-397410303,-1511457402,-1290344390,-1576985440,116876368,1860533,480249972,-1560345599,-320314303,10729531,1683535952,1694349392,-2141591472,-402209661,446823438,730964737,-1203916056,-397402566,1038620516,-1946645506,83901895,1048784501,1962949636,138314535,544538684,-1947601432,197561328,-1206553152,860894683,-1863823168,-42866673,-963907445,-373495728,-1351358378,-12717941,-402031105,-1072960907,-24444300,1583335307,-1017256565,-2081649835,1465254636,856194699,-1004934154,-1977220002,-12154873,-2147203329,1948319614,-12154356,1179059592,2080964227,378594,-443851169,442973,478191958,-150989638,-2114941982,-2090978618,-14909378,2088964212,175439622,1342177720,-2108168106,-1017226919,-2081649835,1465281260,-1980742003,1989016134,478192032,-150989638,1580336610,-134330743,-2147482042,1183724148,173968136,-1986509172,-165243298,1954547015,-263811816,-1739158704,168149899,-397389312,1187512150,-352317692,71747352,300613646,294531,2122516092,92146692,218384071,73304832,-1081351215,887823490,1033373066,477364260,1946173501,-1977619710,1090782790,-347732856,-94467302,76023690,1190807295,-2131075445]},{"sector":6,"length":512,"data":[-311099329,92931563,1195771016,1962950016,313031,-1952996120,1678050374,-1706653440,478166659,-1207601665,116129791,-1946263925,1183385159,1958743036,475505003,-946059639,35411718,1354773248,1342931384,1352681101,1342938296,1342182584,768080,616753232,-1743862653,-1952561527,1470340166,-1635876068,-2094238638,-14909378,1586169972,105367550,-2068316160,247175680,1048776577,1962876032,-62485741,-1979818357,-1612183993,-1207571458,132841473,-392530177,1599700928,1575324510,2406595,2133059664,806783321,1580114782,1349215416,1501523944,808910787,775356254,2406494,2132142160,-1022966653,-1947432107,-14350778,4261120,-402241911,113743565,13835353,-1202667469,-1924132097,-1202715066,-1202712218,-1202709342,1347420180,1342178488,-1960570904,1964719333,-31397881,65781811,1560281528,-2097151286,1974334,512429940,2139102752,91554052,-352321096,-1547685118,1438850610,-1957237621,2088764534,275927053,67978378,189016241,67978378,222570673,1705909956,692554278,1997423674,239372828,693602854,-1057045974,-1978907608,-1977217468,-1037424297,1143521534,-1034068466,-1957363710,317490156,1988843350,-1983892732,1183446086,-297367048,-1962872855,196800070,65206016,1183387972,-1948742660,1183385415,-398983170,-1957069699,-193053704,2122908542,-163133452,1586167808,88574716,37552308,1023898624,225705987,1586174187,38243326,-336443767,-27358446,-1274001526,-230258432,1187448299]},{"sector":7,"length":512,"data":[-2097151758,1946219134,-263796902,1240137728,-2130944373,1963066751,-262239463,-1957436463,56163934,-661978041,317208575,-125085316,1183522027,768752,-661921033,-27358381,289866584,939513995,1501295848,2117859467,-1996259594,1191179902,-263812112,2096252475,-1960449105,1200290910,1023456261,175439876,-1946263925,-163149561,104664811,-1962314496,1200356958,-163149562,1005995659,58652742,-506231,1149955654,989901840,58650182,-1962998551,1140984900,-2000617968,2122518084,92143864,-352320840,-1950338302,1443099734,1086456824,-96040640,1946172547,-399180014,-1957069971,994527224,58653310,-1963295095,1174539076,-2000617734,1183452484,-2013068044,-397013180,1583349325,-1034033781,-1957363710,82609132,512448342,2139102752,57933828,-402603799,-1073017973,28837236,855829248,-28931648,505421451,17516486,17582022,1343047622,-788642166,-2000617760,113708615,286462,1793848883,196789899,-1948059904,538872824,293536542,-488098305,1183406458,-773944324,-24671261,-62520482,-1962933243,-472824866,1593739145,490883,-561302668,-2020940847,1174560510,123571198,-1962195064,-1977737186,1451888199,-4030210,1569440298,206014471,-402164225,1569455588,38258183,512443905,1200234016,989901840,-1953923130,-523108794,721440954,-773944368,-23623197,-16258210,-400678858,1583349172,-1017256565,-2081649835,1465254636,-955877749,65094,505421451,-1274001526,-336033024,74842933]},{"sector":8,"length":512,"data":[-952383861,-164428676,-167049237,-141884547,-1161393330,-487129077,-1957439349,1478369310,-1961801981,105379544,-1962642175,-15864890,1183579718,2093431806,-18236,-443851169,311901,-2081649835,1962869886,74907398,-955590936,18755590,46292224,-326413056,1988843350,-97532,512434036,1200234016,989901840,-1961722170,-954325954,-14801914,-1528277249,608078090,805750558,1593835550,46292318,-326413056,505689855,-16664,1996424822,-13047804,-1960958813,-1994514402,-397408953,-1034027122,512425988,1200299552,507028233,1887692880,-397361101,-873962334,538872589,55035422,113754881,7732,505941759,505548543,505945739,-472783919,1596491659,186523811,-1962380096,88574936,-1021434717,505421451,229248,2013206132,1882712073,-1956530712,-954327010,-63161,214982,-2080394264,1974334,512431732,2139299360,208994057,-1559672949,-397402568,116092937,506988231,-3932161,-400678858,512430505,2139102752,125108226,16926662,-1946313752,-2095177698,1979647359,-18416,112720,-26679216,-350346077,538872595,88574750,28856392,1407733760,505717758,-1960958815,-1994514402,2139292999,58064649,-1962329368,-2145509346,1962935167,-16062459,512428779,2013208096,1871702025,-326412861,74877782,505939711,505945739,-472783919,1596503945,141948427,505546439,82509824,505546495,505427593,46292318,-326413056,-1959138474,-786552802,-2082221597,6236351]}]],[[{"sector":1,"length":512,"data":[-706205835,570869758,-1962934242,-350345162,-773944558,-2082221597,6236351,117378676,189668898,-336955914,-19339261,505953923,-1962249216,1325335622,1975520004,-1034068298,1048772610,1963007522,538872663,75464734,-1587645184,196746788,-1948059904,512447448,56106528,-661974713,67520502,922699381,-387441116,-398595075,1048837770,1946164768,505717043,-150991942,1406700514,505421451,289866584,1207359627,74712070,401326131,505560707,-1949270271,-2145509346,1946158207,-28251971,-1023409736,-2081649835,1465255148,-1172429663,-487129077,512489611,2130910752,121998097,-1946401143,-1959293992,38243288,-151107959,1947207237,-1979384304,989901828,310181446,-352320314,-1962606835,-28951804,80151676,922681344,484974116,-1956749560,1438866917,-327029621,1465254022,614596403,71711518,-397404812,1183579443,505717508,505421451,1342523273,-1946351128,196740166,-1948059904,538872816,293012254,-1962720117,-786552802,-1981558301,-1973475705,11797828,1979713085,24832259,-472786805,1906835246,-495745677,2138327156,-495657101,-948679052,18756614,125600512,-385649408,512426321,1200234016,1073787915,2055637312,876512255,175374366,-1274067062,-2046736384,512491386,1200234016,50377740,1075717126,2089191744,121932799,-2095177565,1979454,-661970828,-1961664629,505717511,268846326,645990004,16719396,-1960958815,-1994514402,922682695,-924312032,538872829,75464734,-2143652606]},{"sector":2,"length":512,"data":[1946157695,2055637528,190286591,1191232042,2089191949,207063807,1191232042,2055637518,538872831,189237278,-8616310,-2146678904,1946157695,182997764,-118757127,872221928,-2115481408,10152202,-369201688,1149960337,2122746119,-2585601,1183646327,753422464,-1957078666,-33122,41418551,505421451,-1274329206,-1974452224,11799623,505677315,-1635037120,2013265790,71797508,-397350703,-125100976,-1072969845,-8185475,855799295,-2142859777,2124319568,41418751,1500897000,-164631719,1963460164,2124319498,41418751,857858536,105182975,-1928039040,-1957658554,-33122,-2081947017,190404981,-1962707776,-947190916,-443851169,180829,1458342741,75400023,860058624,-1959597066,768710,-125050121,505421451,-15630589,1894253686,-1974445703,1519911493,276156475,17188342,1166740085,475636489,300664459,538872646,273123870,-969211724,-4669057,1566466047,1426064066,-326898549,861361670,20048383,558499527,614531072,768542,-661921033,538872659,1191401502,-1948742895,1503856967,-537401316,637421193,-397410049,1183448942,-49668,48825204,-25755903,-1985687320,-12714938,-1559659009,-55042506,15460863,505421451,-1274787958,-1947170048,171834438,-385649152,-661978933,-13704239,1064681383,-160018314,1870010229,-2122941834,-2122940042,-378153610,538872693,273123870,-1202716492,-397410303,-1729496401,1354773248,1358954424,-369450264,-24969077,185299969,-2096138762]},{"sector":3,"length":512,"data":[1978942,1187448948,-369099014,-167051161,1827210100,-2094208256,192152062,242611723,506609283,-955812864,-132538,-167032853,922701685,28843556,1491619840,188935162,-12684042,-1205984202,-397344769,837548615,-562694645,-1172429663,-487129077,-1957439349,1478369310,-1961801981,125797336,-1592626176,1183391268,114682,1187448811,-335544326,1979649012,-20387581,1610237579,1575324510,-164407613,-561302037,-472783919,1596491659,186523811,-1960610624,159351768,-1962183169,55035608,-90970111,512430315,2013208096,1787291657,-397361101,994467360,2115905590,-336186427,-773944527,-1948003869,-1554044793,-1073013216,-661971084,-402032641,-1070372259,1585244240,505421451,-1559935093,28843556,-1041739776,909854215,-914481624,-1554271768,-1017242056,-2081649835,6245950,683163508,649613312,1354256479,-991408033,-1578792077,547561002,506241310,-1591860573,614669870,1593614622,-14800733,922682486,484974128,1593483523,-954324829,6245894,46292224,-326413056,1443425411,74907479,-2080397848,1976382,1183538812,505848580,1204213899,1005060101,939932507,-402295778,1038876419,871102003,-472785269,-2020875311,547577640,1958742814,674642721,-1962380258,159351768,-1961658881,-1960959970,614663495,-108271586,-397361101,994445056,2115905590,540967879,108331038,-369098824,1256718796,-129579019,-437714944,-44308480,-947128181,1040186413,58064899,-1962901783,786682328,2013308927]},{"sector":4,"length":512,"data":[2014935108,2013820953,-1980090392,384366662,-96024587,-1310064641,538872576,75464734,-402426623,922745054,-8184284,-1207601667,65732609,1358954424,-1946704408,-756525064,8841722,33048263,506896640,-1577433463,196746788,-1948059904,512447448,56106528,-661974713,-1962719349,-786552802,-1981558301,-346085753,-1696049323,-129594886,1249165323,-1172429663,-487129077,505421451,-1995356413,1183579718,-96040456,506740355,-1960086528,1183388487,-27358212,268847094,614468212,-60912866,149620616,-1960958815,126483550,-507416,-400677834,2122515039,57999608,872354537,-1960842250,673055710,572402462,-472825058,-2020875311,-561291482,503571409,1200168486,580994568,-969193442,581032317,639535902,105351454,505421451,-1962195062,-2011290082,512426823,1200234016,604373516,-1950286306,-2011290082,-16055225,1183520637,572427258,65261854,-1994512866,512428103,1207901734,-50363642,669735284,-1172429663,-487129077,505421451,-1995356413,-661914042,67520502,512431221,2139102752,175374340,-2080927256,1974334,1048826485,1946164768,-27358430,67520502,512432501,2139102752,259325956,505689855,-1946762520,-971102690,-1962867385,1583348294,-1034033781,1048772610,1946164768,538872602,159351582,-15698689,-2031613577,538872679,91750174,-1007251736,1458342741,75402071,505558667,125697803,359986699,990309198,721584126,-51882249,-31753,-1243085963,1566466047,1426064066]},{"sector":5,"length":512,"data":[-2091455349,6245950,683171445,1354256384,649613407,-655863713,113542000,-1558304607,547446522,506110750,-1558306143,614538796,506372894,505951883,-561308949,-472783919,1596491659,186523811,-1962380096,159351768,1308980735,-495061493,1593587337,-402360577,113770350,89934,46292318,-326413056,1183536982,505848582,505427595,505691787,-2080633112,1962935422,-14489597,505427593,505691785,-1034068385,113704964,24398,538872771,71797278,-1073020748,20778100,1024553984,393478146,512434411,126492198,418054324,505814667,-1274984566,-1962022144,-1977735650,11797063,-1070398741,538872771,189237790,-1974468428,11799623,222792272,-1974468428,11800135,-5904304,538872656,123702046,-1274984566,512446464,1602952736,55020039,860881076,28856512,-1494724608,538872678,155683102,-326412861,17886337,512448342,1200299552,-599357177,-1174124917,-487129077,2130966667,121998097,-1948367223,104531014,343219748,-1965269365,1183318599,-481916702,-2013050998,1189863750,84245888,1586172277,21465820,-387823992,1183448867,-164631568,1946224197,92110871,-1961790463,1200282718,-515471356,-1998371192,317448774,-1965269365,1183318855,-498693919,-2012919926,2105598790,158662917,126492043,-337623416,92110876,-1961724667,-472780706,-472783919,428115850,-337623416,-532232700,1446349600,1500404968,-1947580791,-2145509346,1962935423,75400019,-954960896,63558,-788242805]},{"sector":6,"length":512,"data":[-24671261,1183400030,-1961759758,-472841122,1593739147,-940030327,127558,-1980217717,1174665798,1183402218,73305084,-1948004029,-1990263161,1187509318,721420790,-1992232378,1156316742,84245888,28837236,855829248,-230258240,505421451,-1274198134,190286336,-1037369162,-1980611029,1183577158,1183399940,-129579018,1187446784,-1962933766,1177285702,1183400178,-62486018,14960327,-1976177920,1586225222,-1914449436,67039382,-1962440486,1178330182,990215416,92208198,-337557878,-498693629,-773562741,-241791517,-1998978050,-465109241,1004816011,-1015218618,84245888,1586179445,-773598736,-1964781085,-2011593081,-1946226554,-472780706,-472783919,428312458,-772514165,-258568733,-1998978050,-1958221049,1183447622,-330905628,904593408,1586168970,-1914449436,67039382,-2096658214,1962994814,973376028,359989829,32261831,-481916416,-773562741,-241791517,-1998978050,1191134727,3965156,512476789,1200234016,-1996442609,1200284742,-1979665395,11930455,-49954261,-431584769,1166734899,1208005637,277832,-1897331850,-774337792,-1476448541,2106097022,2112257461,2113109507,-1948361077,-297367289,268846582,-661976460,11798410,99342475,-1947312501,1407439135,1490968203,-1962653949,-348681256,-564229298,-1995225205,1173810758,141824006,126539915,99287220,-1947312501,768519,-661921033,-564229293,289866584,931911819,1586175467,41389022,1183385483,-1961825302,1200348766,-364476154,57982987]},{"sector":7,"length":512,"data":[-167610485,1948255813,-51882478,1527170592,1183645795,250106000,-166597855,1950352965,1183667726,1996443792,-1563236118,194016909,-162892554,1946289733,48780855,512448876,1468669472,-1962887665,-634657186,-1992042453,-619976610,-1014293890,-337361407,-1962636781,-472783778,-17787251,126409219,-465109178,1946172544,-465138936,2129020475,-227082272,-624897,1996485750,-259617290,-1070378754,1388570704,-443851169,180829,538872662,125274910,1358691048,-1274985334,-538423296,538872659,4162334,939461236,11797642,1658120272,-1957313698,2122536684,376700932,505421451,-1979228277,11797319,1354773328,-397199640,-164364362,-397015573,-1958282181,-1977737186,11800647,-293616069,46292318,-326413056,1443163267,548388695,301942470,16533191,-1958941952,-472777634,512395147,-150973766,-2114941982,-2141187130,695468092,-1204420778,-397410254,-544497212,939476807,1500183784,-1224780150,1992440576,-12154877,-2080618753,2081029246,-62455874,856622791,362807297,-12189133,396493572,857120819,-17021438,857252544,-1560525174,1583297306,-1017256565,-336819371,106859273,-16775226,1183516230,72285956,-311050229,311901,454730070,512401744,-150973766,1490586594,1611761545,1342181816,-1172403551,-487129071,1348433925,1343961528,-2090129688,-1969158460,440862,-259267849,513590913,622521505,76087312,1571738,72648960,1577206921,-326412861,-1962522881,154994246,-1962378240]},{"sector":8,"length":512,"data":[130417758,-1961170176,-472840610,512395147,-150973766,1611859426,74907472,-1955959064,79846885,-326413056,-164407466,-561305877,-2020875311,1387929226,-1948059904,331842040,4030560,-11070604,266863734,190404970,1174828224,2081029763,1962871765,378412,-472785269,512399243,-561310997,-1948004029,-1960932729,-1981558306,1176406663,2080964227,-773944343,-1969780253,1566465822,1426064066,-326898549,861361672,-1960317962,-1948003874,-1172403577,-487129006,-947783541,1031823379,504656896,1348903864,652760862,1975520027,-24951290,-2083226615,91490814,1962950016,112645,-1070398741,-2080881015,24447486,-773944498,-1970828317,-96040674,1348903864,1771694167,317413721,-783556981,-1970828317,-773944546,-1970828829,-167031266,1183574645,512402426,451065886,753375824,1499012511,16285315,645993076,-1107220,454690503,1810366464,9693694,-1172403551,-487129082,-1994482683,1078001222,-1694742903,6139,1006395019,1282736727,1215629115,-1172403551,-487129006,-2020878197,446914577,1161243,456767568,512401744,-150990406,1601701346,1768810576,-1593391997,112860810,-1948059904,-1668838440,-334066914,-270368486,-1547564033,669719276,1571738,-60912896,-1996335223,-27358457,1991,-1172403551,-487129071,1348433925,1342181816,1610463720,1575324510,-326412861,114262,-2147197301,494141503,558499527,-4718580,65556735,74907602,1342314168,1342233016,-1952787224,1962281968]}]],[[{"sector":1,"length":512,"data":[35043338,-1654069168,-1956449373,-1034068282,-1957363710,1357677548,1996445526,549697540,-1337553584,-898897840,-1337553642,-172482992,-1360506782,1958742809,11856131,1342314168,1660106495,194866408,-1207470912,-397384971,113770367,25331,11566720,-1880554635,-1337553664,-1337553584,-1622828464,-1927938048,-1705988026,251331539,225820683,1353729677,201281256,-345738048,1241958227,-1207955935,-397344769,1183699290,381178032,-642232318,-857190400,1958742936,-336186558,-773944544,-1970828317,5421598,-125050121,1611908993,1946172800,-1705566707,251331301,167674694,381213564,-1746382846,1660134300,1353729677,1348662712,1499965160,-972690599,6485254,1593835960,1575324510,1426064066,2122443915,1966279172,-67508221,180829,-2081649835,1465254636,-972783989,6693894,17104769,-8312196,612303117,-83507317,616059134,-1125625754,608076028,91488358,-352251457,16891659,-543030096,903782965,19777419,1129729,-1863777418,-774337791,-1476448541,-2088336542,-2065071160,-2065070871,-2065070871,-2065070871,-2065070871,-2065070871,-2087812127,-2085911458,1911063768,-370111538,616038750,1555583078,-1070378948,550418512,-1141118896,-963907445,58572811,-1207877143,-397384156,-259273639,-1072970101,803799935,-217659903,12451942,19196166,-1949502488,197561328,-385649216,-24968938,-385647105,-320274162,1713682432,1736947792,1354773328,1343052472,-1950635800,197561328,-385647168,-1205993234]},{"sector":2,"length":512,"data":[-1706007004,251331539,242532363,1348871352,185571560,-385649216,616038610,-991408026,1975520202,12904707,1348903864,1348871352,10438042,-1548214784,922701926,922688240,-2103829778,-2095210706,1122502852,-217659652,-4718490,2011713791,-1055528715,11562987,616046160,345657446,-1206977789,-397384156,-1990629939,54394438,-1962443264,596100824,934805606,616058895,1152929894,1491619840,-1947170033,277958,616052853,65556582,1713682450,-889001904,1946157373,146720,216728180,1343178680,-397361101,753602068,1348871352,1349035960,1499841256,-1720743,-167044373,300619390,-397361101,-259286685,-1072970101,48760444,-16719,91551243,1963261571,-16893,1583335051,-1034033781,-1957363710,1183536876,50605316,1979714365,34728195,-472786805,497549102,-544918139,629613957,629613959,629613959,193406343,1351034247,1713682566,828946512,1354773328,1344328120,-1950722840,197561328,-385647168,1048773078,1946168205,18921501,943128400,-1706039212,242532363,1348982712,194529512,-385649216,616038834,2145931366,1958742936,-217659826,-4718490,1139298559,-1720588,-1600654360,11822160,18613819,446762612,730964737,-397361101,317399536,992711073,1946229254,18522377,-399797853,985148660,1307070494,1975520252,22866179,-1207894807,-1202708267,-397383721,1499030707,-1207875095,-1202690089,-397384156,1499030691,1343189176,1348871352,1342197944,-1962021144,197561328]},{"sector":3,"length":512,"data":[-385647168,616038690,-1070378906,-776449968,-2031595488,-1947169863,2109737926,17361155,1713682462,64199248,-1073017093,616042100,1994936422,1975520013,15526147,1348871352,-1198033688,-397344769,-440470650,14215679,1344158392,1348871352,1499738856,608075865,225771622,1344331448,1348871352,1499733736,261404761,1713682512,5290064,225044560,-963907445,58572811,-1207919127,-397384156,1048580114,1946183204,1713682458,1354773328,551467088,-1191974832,-963907445,58572811,-1207929367,-397384156,-1072956584,616065652,985157734,-991408098,-1202103965,-1202651137,-397384156,1048639771,1962960420,223655949,1713682512,1671817296,-1205970599,508585508,1348903864,185920744,-1204980288,-397344769,616100605,48779366,-1205998647,-1202709704,-1202705428,-1202716670,-397410288,-1073017872,1290273652,-16706,92075531,-335544392,1590070018,180829,-1964209323,104465478,242508880,-1274788214,18653952,-397361101,12066888,46292229,-326413056,-16810,-1190902133,2042298376,121319047,1128466292,-1343621150,1744776704,-268442608,-50333441,33817087,67371780,-1719149564,-829966201,159892359,-1719136632,171869063,57933884,-402619927,-1024974962,-1293397811,-386888814,-4317501,7137791,-148139615,1086331864,-1590980189,446901137,719775745,-4696341,-68660993,705947889,1223422091,1006780033,91555328,-352254530,37650747,1963393084,4096819,91553852,-352321096,1354773250]},{"sector":4,"length":512,"data":[-1959589912,-349574858,1685531,116855019,287669,733480308,-1207702784,-397410254,-259260650,1566492299,1426064066,-326898549,-1101572606,512427264,-472834520,-1081351215,1183538984,-2347772,1979719997,23390467,-472786805,1504182062,-1651921272,-1651920504,-1651991160,-1651991160,1216929672,-1853254007,2022273929,-2021052023,2106163849,-544633719,1770614408,-1266043767,227107977,1082714761,-1266098295,-1266043767,1602805641,-18295,-248715184,84166283,-878510045,768565,100918007,1183397335,-2082960386,1962936191,-1948742905,199951223,1345706936,1342177720,-1947100440,2013265502,-387848185,-16722455,1961362550,-370111490,-8322870,108344074,-385548104,-8322880,125055890,1358945720,-1191237400,-397410224,-1477850214,184516864,-1207470797,-397410303,-8263469,125055890,1358945720,-1191246616,-397410228,-2081830026,-18432,-258414512,-1952270104,7662064,1006780033,1819608320,1358954424,-1578073624,297417726,-1948059904,-659059752,-1101665495,1357580288,-352255298,167886411,113133291,-1102976246,1022036993,-351533634,151305783,96350955,-1104286967,686491906,-351731266,151240227,1048780523,1946316200,-16891,-4713749,669536511,184663792,-1981282581,100712146,1583335051,-1034033781,-1957363710,71732204,1024196909,1467416582,-472786805,-710410450,-259398775,126487689,294262410,-1333126262,903848453,-399122782,921379254,1342177720,187248616,-2094500672,3932222]},{"sector":5,"length":512,"data":[-18341515,-400561375,401286189,-350064664,-1640699883,-840430101,-402396258,12099158,-1207702778,-1034027009,-1957363710,82609132,-16810,755254923,54332161,-385649152,-661979008,-13704239,1401572263,-1970636918,-1920303478,-397345722,-259286184,71157387,-15895296,1996488310,-1741362948,1391194251,2097151619,-401675443,-259284615,28853483,367546368,-1720803,144324843,504332564,1349079480,-2129255270,-27883249,-1694742903,260117849,16547459,-457700235,-1070378993,136243280,1996426475,-59310082,-1097342488,-963967488,1575324510,855638722,1776832704,1342222374,-1010930200,1458342741,75402071,-427690101,-25035008,125108480,-132323241,-2130681111,1963524350,854087430,-2125010006,1963589886,937973510,-2125796545,1963065598,1006954501,-25083925,108331776,-102569897,-25086997,108332032,-64100265,-25090069,108333824,-17635241,-25093141,108334080,-25499561,-25096213,108396288,-52697001,12059627,1566465797,1426064066,-327029621,1465254146,-16089461,-756544394,-259303074,2096577350,106859283,-695531637,-1036265685,-963967362,126469931,75400014,-2129497088,1963000062,1220971269,-963968277,-1995940213,140413703,1586169739,2097625862,140413706,1586169739,-1962440442,126552158,-1962516853,1255605015,226279995,-1962385781,1086794503,-1996071285,1354773255,1346955752,-1203144728,1347420161,-2096734581,91488319,-350164808,552253443,1506142288,1665539723,-1274853494]},{"sector":6,"length":512,"data":[-24737536,75400190,-1979223040,11797063,-2037709589,860946174,-51883840,209125189,-16742771,1583736912,1586190681,50825990,1036487672,92078336,-16743482,106859264,-1769142389,-1039925504,1465837648,-16861441,-397361101,-147110461,-759684227,-2037559284,-397345024,1499029031,-567550069,-16742771,130471939,8817920,770199807,2130131799,552384517,-357039125,501764128,140413783,1077938059,721837707,28856327,-219656192,112711,1209854032,1219160144,-443851169,705117,-2081649835,1465258732,-955613557,63558,1183433867,276234226,1499295976,1089488521,-802433909,-997465461,-113015,-397406090,1499028903,558505611,-772514167,-773598749,1351060451,-163149535,558505611,-472783919,-2016943151,270672,-15698177,-11071882,1586169974,-398983418,199884349,-196703486,-400471389,1183434817,786977018,-297367155,2113929021,33155331,1962935101,990219088,243134534,1451951499,-1036301812,100598909,1048787947,1946180983,-399114444,-1986479386,540932678,-2095811328,259260477,1577262475,-8421360,-16485088,-2082542843,1946221182,-297351412,1586233343,509702,-96040192,-1996423387,2122579014,1299447812,1912610877,106859336,1946173315,-1983892718,92926022,-1995940213,274631431,-1962932282,994577478,58716230,-1962843671,276169525,100599179,-1947187457,-802426794,1086753618,216553040,113541981,-1996732790,-297366780,1979719997,18082051,-472786805,27787054]},{"sector":7,"length":512,"data":[-393287538,193880718,-1097930609,1871645582,1166972814,-930198386,193923982,193923983,193923983,193923983,193923983,193923983,193923983,193923983,193899407,193923983,-393287537,378766,12577024,1208764043,1178273161,-385646608,1183514801,-385512976,1031995561,-385649408,234815649,-2097111831,1962935422,9693443,1178273163,-385647376,898302089,-1961855485,1448100038,1499201256,-263258279,-2097122071,1946158206,4031342,234842484,1979921803,-2082673904,1946158206,274631514,-956299322,61510,1187454955,-939524114,129094,-100609,-1125642122,-10921637,1726484598,1183406427,-1983892496,140413701,602605449,-401574145,-1957078191,276169712,1308748622,1980790331,540835845,-968428172,1187446788,-2097151496,2097147518,-125926629,-15371008,1996427382,1996445454,-1950338296,126420574,-63969200,16285315,-320273547,-163148803,-1980473717,-786347490,-773598749,1351059939,-18399,-996087728,-351242613,1015039489,1006269472,158601334,276234070,1499145960,276234073,1499123944,1979969675,82529808,1308624070,1913681467,540835845,113767028,23927,-1947048309,1583345222,-1034033781,-1957363698,49054700,1996445526,1519904772,-28931751,855932555,-2146964490,24510269,1031817030,-1946913536,-1948200506,-28931088,1583334955,-1034033781,-1957363710,116163564,1183536982,1161742,-259267849,701679233,294531,1183516276,38045956,-402492161,-1957078459,-1949856776]},{"sector":8,"length":512,"data":[121309278,1065943678,51005067,-1992292794,1586232390,50825992,50662470,-96040704,2080395325,-2080863467,2116661703,209594874,1187448957,-16777204,1352727622,1208005732,2147239483,1683005459,-33226572,-58815489,2116679723,-58840822,-2012461430,1183451204,155486218,-1996863862,1183451716,189040892,-1992284696,1996488262,523692046,1342177976,1342177720,-1203499800,-397410303,76236002,-1956428125,1583349318,-1034033781,-1957363700,116163564,-1983892650,1183448134,-28915718,1996423169,108461832,-1929087233,-1924072890,-1924072378,-1202651578,-397410303,-259261466,92075531,1963261571,1590070233,-1034033781,-1957363706,-1202235668,-11534326,1996425846,71732488,112720,242679632,-1946233880,209125368,-16484609,-1847064970,-1192195073,-397410294,-396943556,-963948495,-1034068385,-1957363700,-554925588,-950577664,64582,-13990202,209095936,2122526443,460718074,-13990259,1492641872,714509657,-1983773697,76283462,1190938249,-15865018,-2037515658,-397344982,1499027558,1183384715,189155066,-2084080192,1946221694,-60912808,1946173312,713461072,300437759,5029886,1996486699,-1438216708,1709725520,-1438216817,1486874704,-1913091239,-1946211706,-802423210,721453240,1355230146,66995851,1996443847,1496443134,1460061315,-1912703233,-397366714,-998024925,-968982522,896794651,-13990259,-38082480,-14383479,-16484609,1996424822,612797704,28856575,-1070379008,-36247472,-14514551]}]],[[{"sector":1,"length":512,"data":[-1929087233,1358899846,-339717144,713461007,-974630657,208320524,213837904,687747,11535733,-1593793047,-2037833398,1048837926,1963072599,1241958152,-352317151,1816606,175570768,1498923496,1958742873,1241958152,-352319711,1241958150,-402651103,-14302451,484986880,-2037884580,-1098842327,1946222377,696683197,-11495169,-1947727242,190404951,-1951697728,-1543559546,-4710070,1609060607,-968982335,259260443,-402360577,-1224794700,-1494679774,-2145260722,553593278,548406397,-2037775125,-2037842135,-2033713366,720683,-13990259,202565712,-14055798,-443851169,-1957313699,-1957210388,-4324226,1979649023,190824197,-1070336117,189708368,-11118768,2075657846,179851275,347623424,95965184,501764096,314868734,-1034068385,-1957363708,283935724,-1928825089,-397348282,1183418129,105266160,1178277234,-2096072956,1946219134,-263812598,-2012586357,-10753273,-1927936394,-1705970618,250347676,369391359,1358579341,-335504230,1354773262,1342918328,1358579341,1344335544,1358186125,1343521720,1342929848,-1271537760,-559919104,1073787957,374864,-39917488,-1961573245,126487134,1183383732,-230242320,1996423168,1996431088,10263048,1183518444,1575324658,1426065602,-1070338933,191608912,74907472,1358954424,1343528120,1342930360,-1271537760,-559919104,1073787957,309328,-45422512,1497163147,28837237,855829248,46292416,-326413056,-16222465,-559937930,1073787957,903848016,-11534156]},{"sector":2,"length":512,"data":[1183515766,178948,1358690201,1576850408,-2097150270,23284798,251593854,-1581030580,104555340,75326288,1665926911,1279165379,511574371,694373025,2137214470,1309067014,-1593835165,103375690,109011788,1665926855,-1581055999,104555340,1333617488,1666059915,1665797635,1666190907,243860599,1319199566,1241908067,104548451,427713360,996364449,2103659014,112645,1352730859,1241918307,1319321699,1276021603,1242432355,1343109987,-1962641821,-1989980146,-1016902642,1665941123,-955875839,23284742,1285669632,1342585699,-1593410205,1285776208,1048822627,1946182472,1208942340,117424995,-943496376,6506502,113754880,16802632,-326412861,-16810,197119464,-385649216,1860698268,1592283328,-2081387643,1962936958,9103619,-1559607669,1183540048,1665835784,-1962516853,1665966855,-1962647925,1666097927,238929547,-1957202176,786682328,-1791449089,-1789160106,-1786538626,-1786342010,-1786342010,-1787521658,-1788832391,-1788177051,-1159162513,-399774722,653000385,-335623448,-18094047,1072176363,-401085441,317456200,-335584024,-10033139,1239943403,-402396161,1285685072,106859363,1319176073,73304931,-963967095,146955614,-326413056,1443032195,75402071,-351897973,-1274770893,-1679273984,1183340888,-1274705154,-1880600576,1183340888,-28931329,1996441146,112645,1183456491,-12174594,-1070398349,1195774187,1946172544,4030469,76202869,1583284404,-1034033781,-1957363708,82609132,29251414]},{"sector":3,"length":512,"data":[-1161393408,-487129085,1005620032,-243399050,1988714475,-1957499908,-472777634,-1962648061,-28931833,737967755,-1960186882,65262047,939459678,-385976577,-1072955549,-544531852,1577313233,-1962439932,-773979169,73270243,-30734455,-746717429,-1946270069,-773979169,73270243,1191118729,-62485508,2080785979,-1144616026,-140967933,200313851,1603502070,1575324510,1426064578,-1957237621,32179830,-1744532922,1474947152,168069209,1592882624,182877,-1275051,-401734538,-1034027047,-1957363710,74907628,-1962510593,-11532218,1183517302,-504868852,1575324544,1426066114,861334667,1174531062,-16490812,-2144992186,-210436033,1566492299,1426064578,-326898549,140428292,-1979824500,1589967966,71761668,-1006138842,1191118942,126363144,-361381878,-1946265973,-443810746,574045,-2081649835,-1000995604,1183582814,-60913154,-963905997,71711558,1589909107,105316102,-1006138842,1191119454,126363146,-495599606,-1946265973,-1956709306,180510181,-326413056,638082756,1589905290,663365124,276086794,208987146,141935674,-16234753,-521468858,11846698,574045,1458342741,108956503,185104011,-349473546,792559644,1031800180,-1610255012,48963842,76023178,1205832518,1946173312,71731978,184831743,-958761536,1583284228,442973,-2081649835,1465276652,-1985198451,-13370298,1946844729,173968134,-2097150010,1946159230,140413702,-2097150010,1946158718,106859270,-2097150010,1946158206,73304838]},{"sector":4,"length":512,"data":[-1962932282,1175129158,-385452786,1191117237,207537164,541032486,1187443828,1187446954,-352321282,207537262,654204419,-930478198,1702150154,1914763648,-1262384622,-222801920,-1008185312,190404945,-2092600128,2158654,1860764532,1354773249,1342918328,1344339384,-1438216938,242679632,-401836289,-1202651523,-1202708227,-1202711126,-1202713733,-1202716662,-1202716652,-397410299,-997984104,20179220,-2080487681,2085682814,1183651468,1996443819,209125134,-1912716056,-397366458,-1957080687,-1438216720,1988751363,-1744532824,-1157625927,992909521,1124496391,-336076221,1744776770,704643086,788540928,1056979456,100686848,-308737127,43582104,43584409,47153561,74907392,309334,-24582064,1308624070,-410971925,1988886526,-2130187352,1308623311,76195819,440728,781789883,108267323,-136166589,-13744661,3175,3080234,4128826,-1723400100,-1723360921,-1721263806,1983617351,1176794620,1946172544,80707844,108461824,571478,-30873520,1308624070,1962949760,-2124616951,1308623311,1983620331,-1959365892,1015086198,1177449786,1065410187,-2130414592,-16774961,-1202321290,-397410239,80150002,282034432,175570688,1353401997,1342177976,-335684120,142016282,1353401997,1342194104,-1946300952,1065355358,-2130414592,-1962932017,-1956749369,214064613,-326413056,1191117803,73304838,-1979431169,106873863,168265766,-1947503168,-1014298538,442973,-2131981483,1952187518,75399174,-1207601873]},{"sector":5,"length":512,"data":[48955393,-1034043341,-1957363710,1988843244,1962281732,3964962,2088967540,393492993,1344006230,-1047719,-1008140428,1975519999,553820166,-1962636904,1566442566,1426064066,-326898549,-1957210620,1988823166,207537162,-1979824500,-166986658,1015031412,-14584832,1448345206,-1979750680,1183448662,-60898052,1065363019,-1962314694,130426584,-62456006,812973835,1946172800,-25755861,1476163327,-1979761944,1183448662,-60898052,126494283,-11737008,209043466,-1004469600,-2010710946,-62456057,425603,1996427892,-59310082,-402229505,1451884295,-62486018,294531,1996427892,-59310082,-402360577,1451884271,-62486018,654073540,1593837510,1575324510,1426066626,-327029621,1465254020,-8604019,-8616250,106859264,1962950528,40933898,1586171643,-1962440698,126485598,594828348,527707964,-16359797,-2037574089,-1705967748,251331348,-8485235,2089192784,1290293503,-10921649,-2037578634,-397344900,1499025022,1174434793,32243339,168135239,1007187136,1006924892,-1963887313,-12154875,-2147482170,1265970748,167855243,-1978567232,92864326,-963948969,1325787216,988502361,1962946109,-12154315,-347208312,1006930442,1007645788,1309373487,-1769093493,-1036255364,-2037519501,-969146500,1448546423,1498338024,-1979192487,92864326,1015084939,-385649664,-2037514363,-11468932,-1259862922,1599691086,1575324510,1426064578,-327029621,-11140948,1996425846,1418104072,-2037559041,-1924071588,-1924079546]},{"sector":6,"length":512,"data":[-397347770,1996487614,74907398,-10975603,-1639543472,-364475056,-96039600,-73078704,1357530765,1356875405,1498296808,1958742873,17295619,1358579341,1358186125,1498291688,1958742873,15984899,-83726182,-12154866,-11223424,-2146994944,16734398,-1098891404,1962999636,-12154349,-11237752,-11172154,1451673146,418054399,-10961280,-1978567424,-2037842106,-2033778856,-969212071,16734854,-11237750,-10975686,-1628896396,1555988480,158662911,10387072,-1830222987,-1639543552,1552321872,-1545056001,190404941,-385649216,-1224802179,669581148,1996443901,-48174946,844681354,-259286846,-10699136,186020864,-1206749706,-1924136914,1358912646,1498225128,1958742873,1418104077,-2037559041,-397344932,2122382833,359923870,292943371,1342189240,1352550029,1498214888,1958742873,1485212940,1183666431,-890744674,-1639543299,1552321872,669536511,190404941,855930048,-1207702592,-1956773887,146955749,-326413056,9759873,2123061078,-642296,-1591967738,347741312,98760448,-397386190,190402579,855995584,21490166,-1928694017,1358916742,1498222312,535318617,-2037573895,-1705967764,251331636,208977931,-9664883,-59840432,2150017,-9664883,23193680,-956829557,1316290584,1249181451,1946172800,1183668037,-857190212,-1923524276,-397362106,1183710272,-739749700,1183651576,882528444,185531140,-385649216,-1927937831,-1202668474,-1202691153,860906331,-397389632,405141966,2100480,-956829685]},{"sector":7,"length":512,"data":[779354136,2148087,1538795637,-1346875293,1183666275,1961382076,1348032844,1498131944,1183651417,882528444,185531140,-385649216,-830406519,-956891104,1098186756,425603,1996426868,1666365446,1279387728,116087129,1666320071,1048576042,1946182482,80642315,1666365440,-130226096,1344339896,1348686520,1498394856,1958742873,30310660,46593792,-13470464,-1430780810,15224931,-2141628084,6531646,-830403724,-1430781950,65556579,553629944,74907472,1498380520,1958742873,30310660,175570688,-16749336,-1961066482,-1956749370,146955749,-326413056,-1274788214,-402148594,-1034066017,-1957363710,1988843244,-2145588476,74841916,334186054,1963605120,1343074310,-1946168600,939476702,-2130720024,-545980356,46292318,-326413056,74907422,1348710328,1348688824,1348686520,1348709048,1576575464,1426064066,-14750581,-1346894730,1538805859,1387810915,-1430761373,-18329501,46292474,-326413056,-402229505,-1346830405,1538805859,-1696051101,142016507,1577044200,-1207958326,567097088,-1297956214,1949252707,33998341,1438854945,-326898549,1988843010,1782876676,1183383732,17102846,-1979157248,95747654,-1956192536,-472777122,1468784131,-25261480,-857210188,-1668510874,-402541568,914974403,-1956765390,46292453,-326413056,74877782,-1005042549,639698974,504383369,1359333003,378228736,-1014292214,1375750405,2013264,-154474416,96897822,-1957691252,-1591670250,-2080038648,-1202695680,-397410292]},{"sector":8,"length":512,"data":[-396953936,1566506865,1426064066,-1957237621,1996424310,317216262,-1702589851,1979923456,1946631175,8513795,10194058,516166795,-1977212664,-33520505,1958820544,348321587,-2144504832,527768057,10388619,855644603,1022621650,1007711240,-1341885170,1007348497,-1341754096,-1341986028,-1290685422,1711663104,606405771,277760,516173685,-2144984824,402687167,516164213,-2144984812,434896423,554966724,17793062,-1335143285,-1337790956,313847303,-857202509,-1034068379,-1957363708,-1528004116,1988843008,1552321796,1172852991,-118991296,-163149058,2133131444,-1701541376,-2130659840,989888482,-1978567230,973118340,141948742,995247243,242527814,10128512,1552321920,-396996353,-396951791,-396951943,-1956757500,46292453,861361664,-1946252298,1694213063,1007289913,-1511455884,1672847616,1207967525,1979715389,9890051,-472786805,900202286,1570854305,1923203745,-1029586271,-1449016671,-1029586271,-1029586271,-1029586271,-1851669855,-83441759,-351297436,-83441907,-1106272156,906559490,113713448,8492,113725675,450913531,556416643,-2143259648,6575422,1186871668,672039169,-352320479,-83441874,-2145435548,6575422,582885748,672039168,-352317407,-83441898,-2146459548,6575422,46008692,672039168,-1090516959,904404992,-82408678,64422756,-1765637674,1942108952,-339725564,412530763,433973328,1706301065,-2090487133,6617918,922685044,-924293893,504793369,555524897,192214539]}]],[[{"sector":1,"length":512,"data":[431614038,556144265,-2094979933,2174014,-16052364,-396948620,378083747,547561762,112673,1438867039,-326898549,915101188,908271912,-956865448,108331010,575223,516173172,-1977212636,-1262319081,-2116515072,-1325391645,-2114202875,-1275002677,1679157259,11846282,-478029685,196345887,-144439576,1946158278,605996059,549683489,-28931071,-1946394999,-28931117,45662350,1676011536,1099511,922684276,922689830,2095587620,-443851165,-1957248163,589375542,-144418762,1962934982,147257094,-1005620224,639698974,-999929974,639706142,-956889208,578027524,555228868,639616038,637958143,-1962641409,-1591663082,537207076,-1202695679,-397410287,-956828736,192151568,556152575,556021503,1583537128,-326412861,-150672253,35727366,-150440704,136390662,-1003588608,639706142,-1979623542,-1962887998,551780824,-754601728,13337083,-401886207,-1031118021,-661978956,2089857,753404852,671545187,1946158113,605996061,834896161,-28931071,-1946394999,-28931117,45662350,1661593616,116856811,1057064,378212212,614539558,1115425,-1729605550,1575324514,671545283,1946158113,605996063,-1752488415,-1960443580,-1006550393,639703070,637687689,113706889,8488,-326412861,1443163267,555228868,39291686,-1006138586,639706142,21272457,1116178726,404669441,532948513,71797542,105319206,516177269,-14278376,-14286217,641138487,607584033,2144289,-222894000,556144267]},{"sector":2,"length":512,"data":[86058145,516161568,-1993989852,-1993996713,-1014299577,555228868,39291174,856131878,404669686,532948513,73384998,-1979824500,200014942,654073540,-16775226,-2092499898,-260304386,1348795832,-2143503384,-2140825842,1348795832,1348795832,-1191464728,-397384451,-38208747,-1645719452,-990497988,639703070,-1004134460,1183581279,-60913154,1589906923,-62455812,4161574,-2092562827,-293858818,1964113539,-17700861,1575324510,671545283,1946157601,136234000,1200236065,605996134,1200104993,671545089,1946159137,136234000,1200236065,605996134,1200104993,671545089,1946158113,-19273691,555228868,639616038,637958143,-1962641409,-1591663082,822419748,-1202695679,-397410287,116912568,1057064,378212212,614539558,1115425,-840413102,-1957313696,82609132,171869014,661979196,516224563,1183588636,-60913154,1589906923,130492156,1182992160,-1589247236,-388930309,-361249221,1593792232,-1017256565,1672742646,-402426876,-1966907524,-1973114610,-1956321490,-2090575850,2174014,-109041548,-2145160691,511120377,1884919,-1023993740,259260420,1969276406,268009482,243271026,-402431052,1438867176,-327029621,-2037579612,-397344932,1988770660,-1370060041,-1224343368,-389467385,-443850557,-1957313699,317490156,1048794966,1946172426,11004163,103531659,327728,-62486020,-802433909,1451877003,1463714042,125042788,1348711864,-1956782104,862255926,-1956385793,-1956360938,-195655225,-1947056503]},{"sector":3,"length":512,"data":[-128546361,-990493047,52501534,-263811873,1005477513,74710134,65783435,-1979955573,-265552314,1996486659,-227082252,-92864738,-260118448,-1018113,1996484214,-159973384,-385976577,-14749588,1996487286,-294191120,-385976577,-166989732,-997484171,-1946401277,1463714016,125042788,1348711864,1599971816,1575324510,645945027,-386374732,-259325575,1348753592,188383208,-402164234,-1073020567,300421748,-20977412,1348711864,-386265112,132906083,1348711864,-386329880,113770248,8494,465962694,-1581031935,104555608,1316316413,1690633974,-1606781694,104490226,829777303,979694496,1969592326,1688903976,1699677755,1048584053,1962960066,1689297176,-388822863,1693648442,-1331688589,989901924,1919199750,1683535903,1694349392,-117708720,362812139,203342949,126363169,-1268429152,1599203328,1704529547,1223164340,805750623,-1023410143,556940929,125133749,1348711864,-398867480,-1360462224,1958742784,1683535887,-111482800,-386009624,132905677,1348753592,-940025112,18951686,-972634624,1048772635,1946165552,-12326909,-1070377277,-766449584,1342177720,868902632,1443228662,1174979560,2081619587,159312118,-1957313698,-1528004116,-18432,-765990832,-1593848088,1352794396,1326350436,2122547300,729022468,-10713459,960686160,1348711864,-1913130264,1358912646,1348711864,-1191693080,-397384779,-1246169191,568873059,-1207440583,-397384779,1760098496,1575324416,-1593834814,104555445,91579480]},{"sector":4,"length":512,"data":[-352321096,-1010814206,18364159,-399669016,-1073009237,11535477,-5242133,-1608909662,-16489392,-1574275422,1705126516,711172650,-1574284126,1134701138,708944426,1342179000,-1207472152,-397410297,146278248,1642614784,636935,123398224,144107715,872393192,1491620032,902215881,-917378992,1345706936,-397361101,112775671,28856320,1005080576,65517576,-1419188144,-1022744600,-2081649835,-1000994580,56991774,-1939495906,1586100806,-92864520,1996430931,-297801724,-362753,451475574,100745454,117400996,516187558,-1014930016,-1499396144,736153957,-28930856,-1946394999,-350143946,-60898290,38243110,-2096658138,1308818502,1183575925,-60898056,1577552166,-1034033781,-35127294,131087634,-1070398349,-793241365,-1326952441,-1575581422,1705026405,1344355512,-1191218712,1438842881,516222091,-1014930016,-1499396144,736153957,71732184,65065288,126559960,1705121419,180829,-2115204267,1442906860,-1962641781,104531526,91383206,-352320314,-11133382,-1159199114,-397389057,1444867457,-24736490,-1927917314,860945990,1520062656,-401637099,1035503492,-396996575,1499021378,-16873843,937973328,1582913856,-1034033781,-1957363708,82608620,-1957210622,-1232271746,28900860,1911050240,1958742793,4096868,1567948860,703018751,-1992850200,1044119110,209002810,1705522943,1085663318,99309913,1676170839,702783999,1449503395,103532427,1346380086,17071747,1048775541,1963025830,-339725564]},{"sector":5,"length":512,"data":[71731971,703438928,378142900,11938283,1346945579,-16106776,787021430,-1956749513,79846885,-326413056,33746049,557072003,-1928891136,-1543635322,1048798632,1962949632,336108080,922685313,922689850,-202873432,-1506344962,976682853,876019489,557234209,557365328,-1449215920,149547088,-2129307238,1575324431,-326412861,74877782,1080403617,-793059119,63974151,1002867698,1936040966,-336186620,-1539953916,142016357,-1207535873,-1202716662,-1202716665,-1202716416,-397410271,-1072962000,585826941,-402229505,190398337,-1207601728,317456383,208848443,1343644600,-397361101,-1041504260,1566490675,1426065090,-326898549,-11053558,-400475594,1451884081,-129594886,-689418158,1207471083,1705262633,871909003,-1610208302,14320485,-1577695607,1177249188,1992297462,-94991592,66602635,1380995783,-1577552129,1177249188,-2115481354,-1608596245,-826048155,-28931065,-1946394999,-345659850,-60898269,990350118,58128454,993995046,2099329590,-60898294,638028582,1308772233,50097795,-646580725,1705381631,996517537,2099329542,1958742796,-1207702782,983760897,910066465,310247713,51323624,1210136070,1705379387,251593854,1583292726,-1017256565,-2115204267,-1929314068,1358889094,-955704600,-1608754938,2000585472,91488349,-352315720,112643,-1205777757,-1924131200,1358889094,-397361101,-1072955749,535495293,-16742771,-56301488,-397361101,-1073017060,820511605,-18178,-841684912,-1946163784]},{"sector":6,"length":512,"data":[-1581031963,104538426,108881318,-385953560,-4653549,-1957313537,1208403948,-1711275933,260117512,855930623,1911050432,358193917,-1034088575,983629826,906378017,-1592951775,100868406,104538424,92217658,-335685912,336108076,922685313,922689850,-471308888,976683004,876512033,91488289,-352320840,112643,-47781808,-2129307238,-1957313777,49054188,876512002,125108257,-33651059,375761059,-33651059,976682832,-58726367,1189630034,1493616618,-956257508,18958854,378320896,-24736432,983650557,-1509541087,-1928430235,1358823046,1497199848,-352320763,1354773250,201170664,-352158272,557490478,1705379387,-152563587,-24736259,-1679273731,-12392197,-2037576725,-397345282,619248526,-18179,-859248560,-1946163784,1438866917,113765515,25416,-1560000885,-1073012428,-1070394252,232974416,1342177720,-1711010840,260117512,1503266283,-401637099,-1034027272,-1957363710,116163052,-1923656190,-1543635322,1049322920,916529466,-91846367,1665704445,-33782135,1342177720,872391912,1407733952,-504868825,1241958183,-956300511,-1323542266,-1506345216,943128421,557496353,557234256,-413800368,-963907445,2113929021,9038083,992032417,1962801798,-59119611,983639531,1959213857,1575507721,-25499394,-2037705237,104594940,192176968,557463295,1342177976,-1577333784,-2037833418,1049361914,1218519354,-58291869,-1178170371,-54853627,121319085,1128466036,703330274,174587694,393220]},{"sector":7,"length":512,"data":[1835015,-1374683107,-1373721065,-1374179810,-1946260504,-401937424,-259261046,-488111125,-97283,1290339196,1354773503,-1946230552,-1956749370,-943497755,18954758,-402396416,1048837277,2130797990,-69605130,-326412861,74877782,187882984,856061120,-35106624,2096499640,318669573,-963966594,1342228485,1589177320,180829,1458342741,75402071,-1274264182,-2081387776,2855230,2105544052,125042704,-1274198646,-1947170048,1566465990,1426064066,-326898549,75399940,-2096663552,2855230,1048779636,1962949630,-62470646,-28916011,-970593352,-958727098,-339739066,71731995,1006503483,1187383925,1187432188,149665278,-1006876986,-1258404154,1347469363,1183666256,28856572,1525174272,5224482,1354773328,1342197688,-1924087757,-1202651578,-397410303,-443866559,180829,-2081649835,1465256172,-1962641781,1161926,-125050121,701679489,-15341482,-1996339829,-1072956858,-396924812,-1072955598,1979670644,838592516,200820361,-2096794378,74777086,-12326826,-1274264182,-773795584,98619872,1183390084,-1965519876,-12154873,909843851,192232446,-1962520694,130481246,-1979520051,-92864753,11846026,838920272,-1946204534,126418014,-386369793,-397004379,1583349411,-1034033781,-1957363710,49054700,2123061078,-1161327868,-487129071,-964562805,-396940846,2089025151,141885188,-402361089,1810575729,175439627,1946288003,112645,-1070398741,-1962981752,11798596,1149915200,1073787913,172264016]},{"sector":8,"length":512,"data":[1346371764,-1274329974,1448099840,1358850536,1200233611,1342223361,1200233611,1342223363,-1743829878,-12154288,-1696051048,71600433,16744064,-396950412,1149959906,1342223374,1462014696,-1946286360,1583285316,-1034033781,-1957363710,-1957210388,-947190658,-150990406,-2114941982,1462358726,-2080513304,1962869884,74776338,-399452952,1153901138,1476394756,1610468072,46292318,-326413056,2123061078,-1161327868,-487129071,-964562805,-396940846,-396952149,-1957626414,21465628,-397410124,-396942882,1583349143,180829,1458342741,-1173993845,-487129071,-1207969653,2062035414,-2081387728,1946158206,112649,613476432,28837867,988303360,1592284722,-1034068432,922681348,922707380,-1766300238,314069016,-1205972992,-1202710144,-397410296,378085944,-1365023312,861324133,1443228662,1191130088,2081619587,112886,841738320,1706034887,113704960,26030,-1957313698,-164407572,993787553,678691910,-1560000885,909720574,141831057,-1107207192,350945281,1358954424,-1194812184,-397410303,-1070334542,-38999984,1006515967,872299496,1843941568,1590070051,180829,451065886,754031184,1499012511,451683969,1048637407,1946183331,1343991816,-342384152,1354773257,-386005016,1438851331,-1957237621,-4717450,1122521343,-236431672,1354773501,-2094814744,2855230,-167050124,-397014924,-396951885,-166986430,-1545075339,-402396161,1566443867,-2097151294,3931710,28837237,855829248,1006543808,730939011]}]],[[{"sector":1,"length":512,"data":[-402295808,350945452,1342177720,872222184,132665536,-29949955,-40441797,-1170473311,-487129071,-2020878197,1455630808,-1858174121,309592107,703334086,1683005441,-291308028,702390825,1760043755,1343654408,-1962887580,-141864966,-1957760981,-1560345402,-576574996,80186153,703505151,512879080,1343939256,-1624444518,1599691037,-1957313698,1988843244,770201092,1354773501,1445127656,1459485416,1593608680,180829,-1979645767,-2140909514,378207686,-1031773177,-1207453697,-991427072,1994965843,127002879,-397361101,28900756,-1914155008,586541309,57982987,-2080388632,2855230,113643124,-16766498,-398721482,871104205,702416582,-18431,-955258800,-397361101,28901252,2112376832,-24844033,-2096611608,3931710,922684789,-1578615810,1354773500,-1591618584,297417726,-1948059904,-662205480,-1957313751,71732204,-150990406,-2082960414,-14035265,28837236,855829248,46292416,1354773248,215136336,2275408,816048208,-326412861,1443425411,141986647,-955482485,702806086,1342177720,201308136,-385649216,113705171,25416,-1963434357,11799367,-1240901750,1220684544,-1996071285,119400455,990273163,-2096270329,41812284,233311487,10611199,949891,1586178421,74973176,-1993501464,1586232902,-1977644040,11797319,1354773328,-400666904,1996431075,762833150,989885161,58592894,-1961984373,2126985988,-2093184766,74776636,66759,1586168971,990315270,-1962180665,-1962474748]},{"sector":2,"length":512,"data":[1120938967,-4713471,-219655937,-1996190779,1187510854,-352321028,-92864730,1006257803,-2096073273,1946159742,178181,28836843,855829248,1459572928,-96010492,-1946401025,126551646,2113685051,-1956749360,214064613,-326413056,2123061078,175540996,-396996785,-1957087779,1993292744,-338744572,-1580649726,-1053072568,243860598,906191688,2122539848,158663174,1705647755,-352170102,-1440838905,55544421,11846026,1354773328,-1206027544,-11534335,1178142838,-1207601914,65741120,1344357048,1446053608,1445916648,1496678632,58181435,1610514152,146955614,-326413056,74877782,-2097150778,3931710,-1202318219,-1202711010,-397410049,113742790,89463,1048780011,1963015166,4096789,242548796,922703390,384311610,-397389068,1566499293,1426064066,-326898549,1996445198,-230257400,1695279184,-963907445,1913013819,74857234,2122517879,125042930,-1995809141,-11408585,-1927936394,-1705970618,250347676,369391359,1358579341,-335504230,1354773262,1342918328,1358579341,1344357560,1358186125,1343521720,1342929848,-1271537760,-559919104,1073787957,374864,-610604976,-954940285,62022,-16097653,1996430903,10263048,1183518444,-443851022,574045,-2081649835,1996431084,-498692852,1675552848,-1981393271,1446765638,1966043658,138820357,1451960434,-465138714,1996903995,990213405,376898630,14843523,1451954292,-465138714,-1995546997,126419543,1996445675,142016266,-398029546,8690256]},{"sector":3,"length":512,"data":[1996426988,74907398,-196702954,8690256,-1070395668,189708368,-196702896,558151760,-398029488,344176720,192657488,903848016,-1605369676,11810270,95965248,-504868864,348423130,14829255,241076992,-16615425,1996430903,8690188,1183518444,1575324642,1426066626,-326898549,1996445196,-163148538,-1375147952,-1928825089,-1202653626,-397410294,-259269273,1358317197,199236072,-1924104970,-1924073914,-397347770,1586212398,39291142,2122516361,729088244,-1202667469,-1202713778,-1202711385,-1605366917,11810271,903782480,1346371764,1342178744,-2082842648,-4321596,-1928532993,-11471290,-1326971786,-1957078733,-443851066,442973,558251651,-955745024,2180614,-1961825536,1248111126,992036513,-1996196158,-1021229546,558382723,-955745024,2181126,-1609307392,11822323,-1588932469,-1036312248,378078326,1438851400,-327029621,1465254220,1688800906,1007304323,-2146798336,192021753,1946679680,459663366,855761641,-149820426,1946157510,-351817724,-2011123710,1191100546,10550913,-1432229518,1210513252,1174799137,65065249,-1989890554,-939607418,1325315206,-1441887488,1175333732,-1266250975,1992375294,-336491772,-1263105276,-775517186,-1132033568,-1858173954,242483243,-1268494176,-260864,-21592439,-291499285,-1979665367,-1238766570,1220684544,-21592439,-1268452448,734563072,-1960753138,1006548614,-352160063,-1232172284,-1198618114,114686,-1962883863,1006549638,1935997702,-1132067990,-83477506]},{"sector":4,"length":512,"data":[-1961068700,-1591665130,-2046615268,1347616442,1619430678,-1224781569,-1779892548,-1956910114,-1591665130,-2046615268,1347616442,1619430678,-73314049,-1165612188,-1098479106,1911050494,-266957858,-1165587612,508580606,-10451315,-21068285,-1132033200,-1098503170,1374179582,-1961366562,-1956319210,1392425606,-2037574064,-11468960,-385958730,28892728,1448562688,1619430743,-1070378753,416016464,-21723509,360105531,1346422411,-1263075497,-2037557250,860946112,-1360506688,1688903960,-2046697263,994574010,2013182142,-13375229,28841707,-11055104,1476310198,-20937075,1354773328,1192789224,-21578181,-1029643146,-1962888092,-1948003880,-1973112689,-1962887999,1177955312,-1262122463,1208363776,-1199142623,1928727550,1925188368,-1263125748,990278654,1929295494,1354773260,1343991272,-350471192,-197722348,473098340,1346422411,-21461365,1659392064,-1956749541,1438866917,1465314443,730939011,-1609796608,11822160,-964431733,-1609438213,11807214,-324996981,721466409,-20544528,-1272320608,-1594324224,11807211,-1957693397,389874758,-385649152,-661979000,-13704239,-222723161,-1111885639,45728697,45744826,45744826,-1279664454,-323361095,45744825,45744826,45744826,45744826,-860224838,-1581656903,-953457494,-350140765,1175387970,-16454879,-400472570,871103774,558368455,183173120,-1268452448,-1547293952,113713480,8518,908663275,283844936,558380545,251595499,82518344,558368511,-386070040]},{"sector":5,"length":512,"data":[1583349033,180829,-18346,-1077876656,1342177720,-940104728,521951494,1241958144,-402652639,-397370555,-259301323,2097151619,-1455521772,124912740,1688813184,1457026311,-335612696,1590070226,-326412861,-1610421117,11822274,-472786805,1689290635,-1963047287,93912646,1185152947,2109737761,1174849286,-2097151967,2855230,1352666228,-1962888092,-54426680,-291500053,-1962888151,703373512,-936705868,-12154295,-779468648,-1037369162,186730659,-955875904,2181126,1575324416,-1373715261,1334453861,-4095959,730939011,-1979091968,83932353,1038876669,11846026,18097911,-1728046917,-936707081,1006648963,-2094893824,23438910,28640373,780797931,-981441114,986024703,168457153,-1979419411,-1325208627,-1262384639,-1957313792,71732204,1006634555,10689908,1975520060,320976901,699925483,702915347,1342177720,200800232,855930304,-402199616,28899192,46292224,4096768,91553852,-336667928,-69474301,28858051,-840413184,1958743031,4096803,477430076,1006515851,1358954424,-1195470616,-397410303,-790039492,-72357634,-197990314,-1957313698,705072876,73304832,2760235,-1706426184,1616,180829,1840133887,-1006641176,1840264959,-1006643224,728608929,862331398,-1710968366,60735,-326412861,1988843350,-754667260,71759854,24379407,1840292166,1713505835,108250683,-1031024077,1049301739,906061346,581002786,1840161638,-1070344309,-1034068385,-1343750142,2144472063]},{"sector":6,"length":512,"data":[184843274,855929792,-1190401088,-770965506,-937229707,-2084322933,1812030,580978804,1840161638,512432107,-919397608,453777035,-1709503839,59703,-1374254782,581026669,1840161638,-326412861,1342177720,1342180280,-1962641665,-1976918498,11797063,661121104,180829,-1206498584,-1202716667,-1202716666,-397404427,95955271,146296832,280514560,954748951,380090409,-4593584,-4696381,1005080831,1006543293,-150990406,-1948742686,-1557538681,213400578,99110912,-1421966349,91488307,-350755906,402112003,-1642165418,-1274574294,-806858752,-6756316,1342177976,382842960,686155856,1342177976,1342178232,1343675576,-1205283096,-1202716651,-1202716667,-397404441,113715399,21569,1342177720,1578659304,-326412861,-401806205,-1072995098,1874331764,247175680,1586171777,41418502,-196702954,10263120,95948524,1183666219,-1746382604,-1202104020,-1202716642,-1924136954,-397347770,922691703,922709454,-1927909940,-1705970618,250347652,1344996792,1358186125,1496082920,1423449,440400,-196702896,675932240,728615073,-1318205946,1357435654,-196702954,10263120,-1715990804,1183666198,937971956,-1202104020,-397404400,89730209,-1202716666,-1924136952,-397347770,-443865073,182877,-1275051,-776469386,-857190299,-1733844,-1229454218,448286821,770199552,899171,178256,1706473552,668854352,1343017656,1562756072,1426064066,1465314443,-1962508661,2105739381,309657614,1708243030]},{"sector":7,"length":512,"data":[744024144,-1072998055,-397015948,-1705574490,6147,661962763,-521279402,1348709048,1348686520,1343659448,1348843192,1496080104,-1746382759,1348032811,1496027624,1443687257,1348843192,1342184120,-1201490968,-1202716659,-1202716669,-397384266,-759683229,1239961612,-401713371,1583349407,182877,230643542,-1270971624,343146605,1840529025,209518848,1840529027,-1106938769,65734144,-2080374850,1869460542,1048776308,1962962356,71204954,1400176683,1840529027,-1090095761,12458017,-1863821554,1358077,768080,388216912,-1642165424,38242858,-2146631500,-152547328,138314532,91488316,-351797058,1241958170,-956301023,740055302,-1770002432,1534060624,2113929021,-2131719422,7185982,113706612,26879,1342180536,-1947121688,-1017225274,-4503372,105945855,-1014300672,-326412861,10939521,-4237482,1030399,-259856304,1343715000,-10713459,726788176,11557209,1183651408,345657516,-1928398077,-397366202,-1990645011,1040145030,142475267,61562509,509656,1353467533,-10713459,710731856,62413145,45633536,-2037559296,-397344932,-1950865861,-2037559273,-397344932,1499015935,1348903864,-1193315608,-397410262,1183670486,-2098704212,-1404662305,1552321872,468209919,-1202104022,1347420163,-10713459,637397072,857413793,374362834,1353467533,-335510374,-1404662514,396408912,1552321872,-1394061057,1348032810,1495918056,453943641,872414725,374362834,1353467533,-335510374,192526350]},{"sector":8,"length":512,"data":[-1404662448,399161424,1552321872,-1142402817,1348032809,1495905768,-1343729575,-1202104023,-1202716669,-1924136956,1358912646,-1591374104,78715816,374399187,1353467533,-335504230,379172878,-1404662448,397785168,1552321872,954749183,1348032810,1495888360,1810387033,-1202104023,-1202716669,-1924136955,1358912646,-14333208,-9581002,376294454,1353467533,-335510374,-1404662514,399685712,1552321872,-118992641,1348032809,1495871976,243801,505936,1552321872,283660543,406173733,1552321872,-722972417,-2091296471,7186494,1606288757,-2096108789,20163390,1304298869,-1107039464,-1923737514,1358912646,1495854568,1839767897,1996489533,-774337757,-1476448541,-1057308430,-1056653057,985579785,-1106384104,149624929,-350719042,411090435,1552321878,-1209511681,-1202104024,-1202716669,-1924136951,1358912646,-970680600,-2097107898,-15090114,-1096740492,1389507353,1183651408,-2070261588,-1592857600,101412286,91516352,-350664264,425703427,1552321872,820531455,-1923524311,-1924092858,1358917766,1495868136,243801,702544,1552321872,1088966911,1841471780,78762547,15548314,374362624,1353467533,-335510374,413120526,1552321872,-320319233,-1923524312,-1924092858,-397366202,-1168562031,-802488289,-10713459,-397225981,1499015375,1343789240,-10713459,671148112,62413145,213405696,-2037559296,-397344932,-996072481,1389507437,1183651408,-2070261588,-1206981632,-1924130623,1358912646,1495831272,-1404662439]}]],[[{"sector":1,"length":512,"data":[-1404662448,674752592,2079321,-2037526485,-805044388,678815826,-1732748967,-2037559272,-397344932,1499015078,1342178232,1342180792,-10713459,595978320,862857889,374362834,1353467533,-335510374,417576974,1552321872,954749183,-1923524312,-1924092858,-397366202,-1168562211,-802488289,-10713459,-397225981,1499015195,1343789240,-10713459,659351632,62413145,246960128,-2037559296,-397344932,748757803,-1311624338,-314598908,1347551232,-1404662506,8690256,95948524,-2037559271,-397344932,1499015127,1353467533,1353467533,1495760104,721428410,1552322000,1389364223,1495775976,412661849,1552321872,-337096449,-1202104026,-1202716669,-1924136945,1358912646,-1591555352,-768381394,1067058353,1375731949,1183651408,-2070261588,-1206981632,-1924130521,1358912646,1495758568,-1404662439,-1404662448,656140368,2079321,-2037526485,-805044388,660203602,-1732748967,-2037559272,-397344932,1499014794,1342178232,1342181560,-10713459,577366096,1839742595,-401312510,-768345166,1067058353,-1996488467,1183448662,-399709188,1347614778,463879811,-2146994944,4001598,-1070398348,245434347,403057435,1540502299,332923737,-28407350,872177289,67156178,1996443730,-59310082,15506586,-1927917568,-1705989050,250347676,1343658424,1353467533,1495665128,-1404662439,386971728,1552321872,-1192734465,1348032806,1495658984,243801,1226832,1552321872,-790081281,112673,1292368,389593168,-1642165424,38242858]},{"sector":2,"length":512,"data":[-397410124,28843969,1676169216,1241958161,-956301023,-669230842,-1857034240,1447028816,263780491,703090688,2097089516,-16637,1583335307,-1017256565,-2115204267,1442874092,997113687,1346099896,-402360577,1499014719,163203,495658101,1946173315,1004386309,-524811285,1979666491,74907396,1495621096,1474842713,-380020443,2105737437,410321666,1346102200,-402360577,1213801909,1342457347,1495661288,12577113,33717635,-558360715,905924667,-402360577,1499014434,622651472,-1561765543,41779968,-385649663,-340262765,1996443707,628615172,1174620249,-1125625852,-10921691,-2142859979,632416336,-259303079,1962949760,7334147,-2142871317,292814908,1352139914,1346105272,1495600616,1975520089,2125892073,1174531071,1946172544,-1744532975,1005566032,619767888,-1072998055,1015081332,-972721152,32178180,1005303886,2125922128,1005762815,74907472,1495568872,-1947709351,1348032804,1495565800,1015039577,-342067968,41779974,-2096729084,-202832185,-1956749314,46292453,-326413056,67169409,-67074419,-20649904,-1924087757,1358692486,-67074419,616294480,1793609817,-1547684991,1017322266,456827675,-400868958,12106246,1575324422,-326412861,1988843350,108956420,902643337,117819275,848208640,-1556843357,346240363,872915765,-1959552605,918983,-1557183581,1101213395,819634988,-1556992861,-947178735,-1560275707,27470814,884122418,1057343115,715039488,-1960128093,3212742,-1557483613]},{"sector":3,"length":512,"data":[665004685,96897834,2091057194,720610090,117819019,702784256,352700043,717267712,-1960175965,3671494,-1557527133,914959074,-963958318,-1560277499,-963958284,-1560273915,1805855288,710583082,-1960162909,2295238,1600498851,79846750,-326413056,10546305,607554390,1619445358,-2037579521,-1202651296,-1924130443,1358913670,-2138695448,16736446,1974996597,-2037559271,-397344928,1499014143,-10451315,-1704057693,260115318,1840529027,-1205701632,-11531158,-1922189770,-397365178,1499014107,588572752,1183668569,922702000,233336356,607553996,-443851154,883016541,1713545984,1207975073,-1586646877,-1556060638,-1581027922,-1398603734,-1547685011,-1432130124,-1982712979,-1553084906,113667532,-956076510,-1553062906,-905525402,-399527571,-1365115061,1713546093,-1023409736,1345249720,1345252280,1342439608,1358950584,-1192367896,-1202704669,860892915,-11513664,-13702858,-399579338,-407310746,-71806930,922701870,922693349,179973859,1388327680,-296949680,-1006633032,-2081649835,1465254636,-1107001717,-1705572864,6147,57982987,-2097121559,1815614,113726069,14031961,-1202667469,-1202713749,1464864976,1358954424,1343276728,1342930360,1342180024,309328,-914954160,-2011904893,2122383174,192240127,193528808,-1961525312,-2146309136,1968111486,2106058760,-343929368,234929667,100728449,-776464523,-206024603,-1461170074,1465473314,193470696,-1962770496,1606847472,1575324510,1426064066,-1957237621]},{"sector":4,"length":512,"data":[-1070398346,-382539696,1840529025,58458368,-2097118487,1869460542,2028536693,-1237909760,1747433581,577103952,1048795481,1946185144,1023391777,-1204355248,1023195245,1747433552,562620496,-397387431,1499013506,561834064,1048795481,1946185146,-1172403406,142081901,-1946223128,1036422128,695535104,1840527103,1840914059,-745863285,722518659,71762882,666377808,468209768,-1207243909,860907559,1038635200,1979059146,-18427,-963968277,46292318,793878784,100917457,378220373,-489607341,-1039932719,794629771,-489487183,378257923,95498071,-1039932717,794760843,-489486671,378257923,129052513,-1039932717,795154059,-489486159,378257923,162606951,-1039932717,795022987,-489485647,378257923,196161371,-1039932717,794367627,-489485135,1438892547,1465314443,478152447,-1172537183,-487129068,1348350469,1495552744,125091851,478154495,-402597143,1183476894,1847763460,1840514759,116785152,1946316322,272531466,57933885,872219368,-1983738926,-1553088490,-1130140226,-12720019,-1955714909,-1590762218,251997923,13796096,1587152049,-1560280851,378236460,-408867095,984366,-1325346173,-312567292,782434304,786538862,862857891,1841603520,862831267,-837383726,1842127725,-861464,-395434954,266917199,607584086,-714872722,1847867135,-2131498520,4001598,1048775797,1962941350,112645,-1070398741,190608547,-402295616,116126253,-1553587551,113733038,73968,-2130630758,-267991281]},{"sector":5,"length":512,"data":[-2097151968,6059070,837288820,-2146500622,1566465820,1426064066,1048636555,1946172588,75399436,91490817,-348345160,-214007793,91488358,-345574472,1722005507,180829,-2081649835,1465256172,-1107001717,-947126273,1024066093,58064902,-1962810135,786682328,-899373057,-868234056,-881406921,-868234177,-105330062,-1095217136,-340242323,-488091544,2109737963,36890883,1358954424,-2085666328,7186494,1048774516,1946183935,-1105279891,-28930963,1476157065,1358916840,1348871352,1495259880,1847894873,-801920096,1354825440,-989966104,109902942,512323008,1048800702,1962962356,-1472298233,561315949,-1946972696,-1270971408,57999469,-2130588183,1963852030,29681923,-50075562,-1142296437,833537,-447813552,1761543879,922681344,922709440,-1936036418,-1995472624,1183447638,1959791608,-92864699,1467541584,-963907445,1946550333,25487619,451677825,582484096,666390545,1223184488,-950445793,18513670,16824320,439811920,666377755,1206407272,-334593672,-385843174,-440532654,285849855,1354773328,-372809752,-1397227198,-1024962500,-1072998114,-1397223564,616058940,15224934,-346466017,1023522829,1713682512,519170128,-1212655271,616058895,1354256486,1021857792,-1947169848,2109737926,16836867,1713651328,-1206225920,860907044,-1202696000,-397406886,-259296307,-1072970101,-538377347,-1405190144,410320956,1713651328,504460288,1348903864,1713682462,-806361008,695517195,1713651328,504460544]},{"sector":6,"length":512,"data":[1348903864,1017952286,-807933872,292864011,1017952286,616046160,-957853594,1975520207,1773463555,1348871352,1346153656,1495162600,83934809,-402619927,-259263773,1459649001,1358812392,1348871352,1495155432,1847894873,20825995,1024226314,343149062,1946814269,-1607800036,-523226197,-397360898,418118821,-801920096,1343030496,-335767320,866885643,84205776,-57939888,-1947082264,-1270971408,208928877,234946177,-397015436,-259261603,1839611520,-1206815744,-397344769,-1202651799,-397383423,1499012567,1583335051,-1034033781,-1957363710,1048598252,1946185126,-1472298212,947126893,1358954424,1358773480,1349059000,1495103976,1958742873,67552803,112722219,1273516042,-1947169795,-49722,113641844,-1962923260,-972297274,2819078,-402360577,1566467792,1442841282,-2097131842,6881086,113721204,14097497,-1202667469,-1202713749,-1202712629,-1202713731,-1202716667,-1202716662,-397410300,-997997604,-259287026,1497220747,-402426624,-24942462,-955878373,6881030,1590070016,-1472298045,74777197,48990384,-777911888,-1472298188,75366509,48990384,-593362512,903591988,-1445599152,-326412861,74877782,2130706051,37128452,-2147025092,478191900,-150989638,1580336610,533588048,1958742873,83934723,1962933891,16679174,-1962642162,-2126773706,1963262206,-6952924,1048637579,1946170848,1006543120,-150990406,-1948742686,-349579129,83933187,-348388701,-1398347577,79283851,-838092032,1946630958]},{"sector":7,"length":512,"data":[-498908410,778497015,550911,458758,453574664,1607351502,-1194446642,-397344769,-1494701138,-940536900,3932678,-7804666,1342767544,-1946252312,-8590864,1358954424,-2085909016,3932222,-169343115,-336557090,-340465659,113766539,117455874,-1191224855,-397410303,-1073000485,1223232637,1743279871,-370111556,1566506818,1426064066,1465314443,-1274784118,1596050690,46292318,-326413056,1586170859,71761668,-555206657,73305087,1962950528,46292461,-326413056,1444605059,108956503,-392682776,29282473,13166848,-472785269,126491019,1672611386,-1696005260,-773944576,-1978037277,1352139079,1495245544,1023427117,58064910,-1962894103,786682328,-822827009,-819802342,-813183141,-813183097,-813183097,-813183097,-820850809,-813183097,113758051,80904,113733099,146440,-1205967381,508585943,-472785269,1077936523,-944248752,1742159488,1175942400,1178322571,504331524,1348982712,-773944546,-399376413,-677328999,77830247,-953357508,20711942,-953881856,18950662,505211648,1346112696,-773944546,-399376413,213436273,602427452,101107655,1174405436,2097444411,-13571837,1065360779,-14584832,1732491317,451799120,1136154969,1625837671,-1577013041,1386374058,1732491363,-814749616,-1952820504,138314736,57999420,-1207910423,-397406501,1048806590,1962941350,-1405190130,125042748,1342247352,-1582093848,84229128,1407733770,-1757157126,1840529027,-385649408,1048641686,16805300]},{"sector":8,"length":512,"data":[-1947663492,-1270971648,58027885,-2097118743,7191102,512438132,2013228474,-26351608,-397399888,512491093,2013228474,1183651330,-1667608346,-1928401920,-397351354,129564239,1223184445,288930046,-29235120,1840527103,-431583978,10263120,1183649516,753422566,1023981822,-31070128,1349003192,-1325523224,115888174,1343074558,-1325530904,-85438454,112893,-397013781,-1070334717,-1755256752,1583333427,-1017256565,1913203432,41219,-1022801688,10546305,-402056472,57872083,-1979671831,-1979666802,-1979667282,-1979667818,-2147440458,1946158207,105351952,-153553328,138871516,-351705342,-20316651,-20250931,1342671822,-587802378,33703682,39322471,47186632,-1946942740,-2147440962,42174,1988961652,1381373442,1355123281,-1979034904,853594305,1374684132,-1390471650,985792170,536377034,-1977554087,-773573951,64550880,1380976327,1355123281,-1979046168,-20895038,-773573952,-17300512,1995324101,144435374,10536065,-2130703166,-402611988,552077415,-385649906,-1903558487,-1366687570,-1769340756,-1232469846,2139095208,276037636,1342588811,-587802378,34096898,367724903,-838940162,-822162690,-162527349,48035544,1728184903,-939370493,-335359998,-1232342014,2123169958,-1531019262,829685760,1364350742,-397359734,1464928671,118883870,-792622561,65286880,-28859144,1992964801,1499406328,1364350726,-397359734,569051519,851544720,-136261148,113640408,-1974382000,1760055493,717392393]}]],[[{"sector":1,"length":512,"data":[851508929,65065444,986054384,-392202514,-998176807,214040736,-1595113216,128313344,2013208946,-1501132277,189237248,10796672,-401771520,192023883,2123171606,911362,-387698088,-998176859,79823008,22514176,1334507058,736965123,105988554,41418583,-397264897,-1974007557,-1964756473,-315489713,-784218069,-1963457568,1191224966,1610408618,2013222662,1379401474,1107876584,-1010048423,-402181400,326241515,-2012854646,1183450183,1962884100,88573955,-402014232,79824701,118614016,1913441000,209250307,-1022939928,1913062120,172291,-1022943000,1913059048,821789465,113707125,458756,233311467,35556096,-1547465984,-18350080,2139144966,158663200,288816979,271050752,176547931,185761675,-1958841089,1730807879,717553159,-1057094073,-141826826,-268177405,396939,119459371,-523131661,394793,-1961732213,-2097146338,225718523,1913804601,306653443,-350986357,-327040018,2028470435,-385650170,1342570785,11648708,-1324365949,-1930439932,1539769280,-1803056850,-942108967,1030,136218880,101107456,-1006632960,-1996445250,-1946145730,-1979699706,-1577015418,-1945698261,-1962931706,-1962889338,-2097106498,91492327,50335789,3227079,113707379,262148,-1560231703,-2037776370,715260077,1183651328,115888130,38177538,-1962925405,614690118,-1534686720,-1545565696,1183449126,-1650029996,2663168,10126987,-1207956317,-1903558622,-1040318291,-503906123,1207972101,-1560274269]},{"sector":2,"length":512,"data":[104529926,158466062,263879,1676345348,3193744,856396008,1876928,-33546589,2138816,1200209971,273123602,1200162697,2662662,-855717634,-1996339319,1204160583,1204158468,1183516427,206014810,10389131,-972142711,-1342037945,1090048,-1342172766,-1383167488,-2097105664,1200104131,-1929846240,-390056998,-998177419,247595171,88467456,-1276637838,705661701,-20895003,-390005052,-389872295,645006639,-1979300214,394986598,74760202,-805123842,74769418,-201143042,990664585,1962934814,-389903611,719850515,311813,1912930024,71731718,-402289176,46269721,82700288,2013203058,71731984,1477461897,-1039858456,-655884286,-402230780,-706215900,83093512,1392509634,1212291,1602947956,821789460,-336006539,67553031,-117437696,1465303899,989868222,1946162206,343903026,-1995028597,-969206203,1049168245,2089353238,-1962546412,343706096,1324683,-1995154295,817829495,343902464,1318537,1595301257,1827193694,-1961922044,1200161862,35535630,-402426624,2129136500,180740,1912885992,545226780,-2146011903,1962935422,1354773000,-351736344,168683528,-2115501198,72869897,-402652478,426902571,167782049,-1978501916,-75496354,-2012843006,-352311778,640059396,-387698176,46269489,67495936,648021362,-387698176,1438843937,-974590837,545896451,2126829710,37349380,642974880,10585480,642974369,-1593424503,-1993977088,-23002555,1166616146,1392288004,184912166]},{"sector":3,"length":512,"data":[-402295616,1173029239,-1929378631,-61687242,-1379892052,1364592244,1582944511,1558770146,26273793,-402541848,-1960443388,1392288517,71666470,642973347,-1560132213,-1960422656,44238405,-2054543789,77725857,35448915,1560498408,1442841794,-2144979571,57933884,637826445,-1993997175,-1017249188,-853933896,1964653584,-1211397283,1961691648,-774010342,-1948003869,642942599,-1962654327,642943111,-1979300471,-788482087,-1948003869,642942599,-2020932215,-1993977208,11534917,-1571635038,-1012772163,639470930,67575,1569524341,133637636,175374337,509734,-1022966272,113704786,-1023388998,313790643,-75493171,-1205570544,512557060,-511618438,-654114562,1659379595,29620223,-972589824,5423110,113640939,-973057341,5422342,64273091,1912623336,178185,-402652485,113704761,-1023388992,-402410310,829554745,-385876039,551748139,-1964197198,1893826760,-1157545544,-109051900,-1206684592,-109051711,-1207405552,65732673,-1157627464,-85458943,-1022966018,-1329397678,-331158001,1722867850,16824814,-2031288606,-58659104,-117345178,2105747139,796131332,1803386918,638219444,16926199,-350194688,1173825032,1962934530,93005334,71665446,637896998,637683083,637945223,-1023261303,75334438,-1172474880,-148503628,67141,-726006923,-6821885,-1070396813,71665958,105220390,-400716349,1569521671,124932,133637827,242483204,1388709517,-1207872792,427032608,-148497685,1946161159]},{"sector":4,"length":512,"data":[12079891,-2129605265,-1202309125,1968898560,118040067,509040323,-561056205,-1929117506,-1866921859,-51785472,1595909619,106414942,1389706948,503679526,-650212089,571730,-1924157710,726849798,-1947741704,1012064645,1007776784,1343058992,1391527565,1476454120,279970421,-2010751225,-1023368827,119473694,100080048,812908572,106256208,-1223610184,-838880768,1599932176,1958936152,1354926619,-927342090,1992375040,22984970,58114363,-1996386119,1476435597,10192264,11077003,-1207471102,281898756,547959531,-1977650176,71061829,121373810,-1115679627,1965817996,-2129654782,8671869,537662069,1166675691,-142662575,1946173445,4712451,10126728,12255412,1803387056,-1223789388,1006810296,1007055872,-1274907646,-1599764479,-1734506240,-150949888,1946157573,-1585056247,41226240,-2054619216,1166737570,-401241240,-2054617159,-1195179876,-1064435648,6660134,263193256,128975477,106387139,1036318859,-964431733,3964932,1957036916,1583286264,-1162193213,871467779,-2136412965,326499296,-319107445,-511662013,-1962380038,-1471943474,-67444608,707052382,707013156,17236481,1296976215,16797249,1381040128,102651734,-1979812097,1506016862,-1979818357,520617550,1499094623,119428035,1526726888,-642258047,-1801482706,1539541977,-1957340989,509040364,-521601968,-661892865,58048523,-972100615,50340102,2098942,7819,-1664919304,198741072,-29592384,1962942478,473858870,125108224]},{"sector":5,"length":512,"data":[1982083,-30903296,1392517126,1448432209,-16376233,117447710,1566465823,-27567782,-956293106,7174,503760640,1476395008,1595890077,-1018077858,138811,1200293236,-402199796,1200162406,507233036,91488258,-351385717,107210758,-1022474359,-2134341039,141885689,234873832,971710464,-2130704456,-1275059138,-1341426429,691961869,41163008,-109049936,-1977715710,-2134049056,419440958,116855668,262178,116853620,2097186,12059509,-2117904122,1426125036,-437719925,39291646,-1023535318,2123171606,-1274574254,65065216,71797496,2828022,741786910,-1963982080,-1977678780,-896924313,-1410137931,-189348578,-1928915456,503710334,1475839751,-4652880,1336865535,734497625,-2013688895,-1073018889,-930407820,1917909379,5290243,-1527529077,41308220,-1036365648,-1031142794,172460063,518244491,-1040000778,117631185,2123227345,519570258,1988960022,-125400574,-492133376,-1927929860,-11513274,939459191,-402163713,1256718351,-998154754,113377520,-352210944,-2097106942,-1957361428,-31004436,-1979431288,1177161798,-2000617970,2139097158,141885728,-402108790,1508573285,-1978906998,1317670486,13363208,168187528,1378186688,-1274132854,-991899392,-956099970,1996443654,209125134,17071744,31982964,-401282300,267060289,-503962959,-1962921979,105810648,-1979704088,1317668422,2127047176,139364360,-351386112,-38016857,147096413,-1610609982,1183318049,-1979665150,1193937990,139954695]},{"sector":6,"length":512,"data":[-33138902,-1964837182,1462373974,50378246,-1948200510,-268234121,-787589494,310297826,2122381827,108265732,102692743,1190528799,175374594,33703670,-1510798220,417861355,-85810176,-391903509,-85852145,17071744,-142145932,119473694,75399363,1191343105,-1966913853,-1342130479,-327040256,-1957363552,-48043796,1006913418,-385649408,653656302,100859947,-259325908,773754398,38046208,520316042,105876048,1476451048,1334494346,13756424,-1979548019,50378263,-1963326470,11862607,507628075,3022478,520373386,369452938,-1918110969,1343619654,-16222209,2013202039,-24254455,773754398,-1979414016,1344209252,-402239606,-1973944181,139430596,-1979677976,260702791,705326986,717291201,48812229,-18283832,38178253,-906080234,108527441,-402163713,1183710795,-11528702,-973207433,-11416186,954730359,22514430,773754398,91523584,56048159,-964022665,-402239606,1334444079,2746376,369247885,105351760,-397258672,1183710731,-1974462974,1347422279,-33691566,-840187138,1576809704,10536065,41848259,-506396491,1737160963,92878341,-326412861,-1090778136,2000224304,-1962183402,379786311,340035840,2139818475,340232982,-2095823479,1966085247,373787403,-1996483421,166401604,-1961590901,1166612039,541574678,-69474304,-1957248163,-1962933730,-2097146826,192164094,35683456,1955267956,1005644566,-400853794,-823591858,239569154,512351883,1200291842,47573004,-401717365]},{"sector":7,"length":512,"data":[-1017249060,10677377,-387151019,1334508424,-1979665144,11929175,-1958622677,1200231031,38176775,973227658,1064765767,369378957,142081872,41353042,-1946343704,734145478,-11526462,-11401097,417858166,75402749,-100402685,371128199,1464928031,1499375091,-251453690,1191112963,-390468862,-2124547275,-1023368508,-387151019,1468726044,-1979664888,11863631,-1975332565,653657927,-1056767960,-125050671,788110,705253258,-1040316593,681574581,-788483072,309824480,294528,1204168564,-167050976,-1957343628,-2097143506,1364198605,1048627851,1459617830,1593932264,56449113,-337911048,541574703,1962281730,119408167,1442285343,556698406,147686144,-896839344,641630246,-397017088,1499332938,-268214952,520544738,-385957912,-1034028395,2139095042,175374880,35669958,-385948184,-2134638936,1946230911,-19339254,18892742,-1006725144,10546305,-387151019,548469336,-1190434934,118882384,1459781261,-1973441549,1468662607,-20305407,369145281,41418583,-397264897,-1023476737,126611938,990660489,1962934814,22669315,1576675560,10536065,-2146209085,1963008127,310346509,-955812608,184550406,1925445888,310346509,-955812608,184550406,-1983645440,-1996488162,-1996483554,-1996483042,-1996488674,1602819167,1280099094,1374456661,102651734,-485601653,2203691,1183384588,201756162,105286144,2631414,-2146941438,-523173676,1048639627,-989855706,1854605942,5302274,1583292167,1145331033]},{"sector":8,"length":512,"data":[1275071170,-326412980,509040209,240028422,564145123,-1995961344,2126774854,105286154,2631414,-2146941438,-523173676,1048637579,-1912602586,-1962931170,199754350,1595868928,1146968414,705092,-149916334,1946157509,46528313,-214535168,-1169167451,-973667366,829685761,181751,-319148428,-76363568,1942540524,-486824453,-147854351,1946159301,-973650431,24379396,-286735545,-353852161,-335879425,-1841131,-925831942,-789775502,-1527024696,-2889477,-1017450782,-1269673645,-855591165,1522699024,1405311833,62149201,281870519,378257803,451412002,1532582400,-1957538877,-1224559408,1511050496,-1957575845,-855526200,-138192624,1946157506,101137674,213390197,-150017269,1946157762,6765832,129500021,-1125596410,71732216,-1159180282,-120067852,-402652478,192149675,-1072965492,28837237,-1593185536,113704964,4,-1007109912,1945669352,198741003,-1207601728,65732609,-402651999,-389810015,1114830967,184829579,-1207732800,-661979088,1912614973,436615956,755921664,582549552,-137219328,1959922673,67553032,-352319744,545226773,-955747072,83887110,-1593316608,512294912,1458044928,180984,-386389272,561184227,294784,113707125,589828,1183454187,1979661316,88574467,108956496,-420980986,-131602184,-402651966,108263419,-369098821,1317667145,-1966473708,-838987154,-32483702,242649802,681692926,1942501888,1944861218,1926314526,1943026202,1928673814,1945385490]}]],[[{"sector":1,"length":512,"data":[209616910,974418944,973370570,-955484690,50332678,-17664,1359020265,2756234,817561781,583238400,2129792,-169734284,67553113,-1157627392,-555089921,75399168,1496019968,717392465,-1967063359,-18535706,-773523772,235834336,101591808,1942502144,113727757,262148,-369098821,-919404371,294528,243992692,100728838,1334378502,-1983892718,1183453255,71796748,-2012592502,1183450439,189237256,105875801,-2146936951,1946158207,-20840952,-20250939,-1995470386,1049297495,2139684884,340248342,1048772656,1966080022,371099912,1142851840,822051584,1569260404,2001172,337545472,1176406272,541574656,172475905,75399168,-2145881088,1946158207,92241929,-402426625,2139158892,57999115,-1946407448,206014727,-1979863832,1183452743,-146479098,-1961998455,-154408765,-402648382,695400095,1966144387,67553032,-352319744,545226780,-2146011902,1962935422,1342287880,-335860248,-62003192,-756546702,-157816581,-402652478,1064498795,1318539,1949367171,545226780,1393390850,7817,1128191,1543482600,2115526,-350855285,-64755489,-1560274271,2122317830,192151556,532107,-1803040978,-1593835303,113704964,4,-1024047896,417857538,-70129418,2013204338,71731984,-1070379002,-1645719472,-165156864,-402652478,-1259801093,-1977453829,-1040838577,-2147126260,65734857,-1978873472,-1957624722,1342572102,-16222465,1843923574,-168302592,-402650942,-2065107509,-15633669]},{"sector":2,"length":512,"data":[1183515766,-11532794,1996425334,5171210,-1024075544,1200226312,105265154,527863952,1948304118,105285646,1187483792,-1879048190,-1976898672,105285639,1191088272,-1970237436,1178075975,1989185540,281212436,1200228980,71731201,99324048,-1878767992,-327040112,-1957363540,-181475092,12097163,11845316,1963246326,146994693,-1185473419,-1070399489,-1957122318,1237855183,11046537,11175561,11306636,-1977216277,1206727181,11046537,11189897,11306636,1963508470,79885835,-897579403,192383500,-1024016334,-1342016508,146994689,34341492,-167763550,57934530,-385949056,1720251746,105285636,-2037772405,-1073086286,-922876044,1183368450,-1333360124,1958742528,46726663,105285825,973358730,58065735,973358728,-2013039675,1183450182,38222342,1183318902,1942043142,105285635,11044491,-1962785143,-1073020346,1542128501,38767248,839274026,-935640595,-930413962,-1228595631,118882474,-1979154803,-466483642,-133963567,1946469110,-1024023551,-1979485176,-253580602,11187849,-1927915233,-1974466490,-1056831930,-11482882,1996424822,-169482236,688279040,-1914174898,-157488130,192152002,-1979431170,105285639,-151094296,309658306,-1979300214,1200161894,35535628,-402426624,-286721249,-998154765,180486316,-200939520,1928969960,276299537,100943499,108461904,-402098433,317259400,443124,-326412861,512428779,-472820978,-1755932673,-11333983,189992462,-1346112,-11336170,-11335658]},{"sector":3,"length":512,"data":[-11335146,-957873034,-1017292518,0,-1892810752,786828294,-435282292,705072892,8437248,-1406737358,-2017096640,915117014,-964493276,112898,2899584,-1911459325,-1962924538,847229438,-475073856,2146533494,-1207767933,-1023213567,-31080189,737971199,-1956613384,-1899983641,-1898935080,-213298752,-1430244700,-225976946,-1014244985,-398208885,125239321,317210738,1022981888,1007186976,1006924813,854095113,199551936,1107784896,1975519914,-528071935,-470171598,743025685,68121634,1968978978,574390279,1236009589,-373033461,56171344,512634570,512353806,54722590,-1946907685,1928014828,-1981445146,-486531026,7768334,906151299,-524285268,871396602,4622784,203882286,604933094,1206407424,-125085439,611631115,-1912136162,855647774,-1527513866,116951839,2635519,-2097075736,-661978428,2269959,58048523,857400297,-17984,-1014808695,648999426,-193657544,1438844809,1048833163,1965052686,112645,1183520235,236882692,-1981558445,-6859129,861081094,1560341440,-326412861,2123061078,105220868,999790755,-955746873,9934854,-1961825536,512427125,2005505944,-1751604988,1594246281,1438866782,1465314443,-1962639733,86574662,-150784629,1074153099,2089354377,-1751736062,108382011,-1751763319,-24442645,-1996063229,-963968395,-352320507,1566465792,-326412861,71732054,-14298573,14844415,-397389312,1499005177,-24907637,855930367,-1592202304,1149867926,71731970]},{"sector":4,"length":512,"data":[-1996191424,-1583901130,67475350,1577118464,-1957313699,1183536876,634532612,-494796801,1347551232,1493220584,-2081387687,74842110,367771699,-1751501175,-1751763319,1074022027,-963967863,-352320507,-1017291264,1458342741,75402071,91553547,1995767683,-339725564,96963418,-131792885,-2080863233,9935422,-396949643,-346423396,-1741255870,197561239,-1959693120,-2083026172,-1036310334,1448544626,1509886184,-1960514727,1925659396,-857188850,83843582,67487371,-1961825536,909837940,-814377064,-14817193,1593895769,1438866782,1183575179,-2116777212,989921514,-1559792702,-1070399440,113708011,524334,-335544392,1438866688,1183575179,106334980,3147267,-1962880381,12681672,13796097,175493643,108252219,3147399,113708011,524334,-335544392,1438866688,1996483723,-6297596,1560341337,-326412861,-1727773045,-1293397934,-337277953,197352704,-150110775,-2083391533,-779943485,-1876038912,74695427,268485249,78768522,-184359470,-388765558,-980758525,-889188571,209570059,-772287497,-2097036413,-722796335,74695467,268495489,78772618,-617420846,-393555157,-805050157,254133642,-1974351104,-754667032,-1966079000,-740062523,-888972821,254139530,266568448,41275707,1456194363,-1064988010,-470351244,1958774161,65468164,-470313272,-882978557,1458342741,2123103319,-1962467836,-1178586409,-1359806465,-1946192499,-4651394,-139529473,-2013713455,29816823,-1543343104,-202780343,-1543408731]},{"sector":5,"length":512,"data":[15450763,-1017291169,1458342741,-1979418997,-956889506,158597121,1958951596,1958748697,-1019564783,-1071509132,-482736012,-467531660,-1070338187,-1924790549,15466052,1438866782,1465314443,-1946417378,-1070463874,-218103879,-138310738,15419600,-1017291169,1458342741,-1898410921,-1070334784,2123094155,855083782,-17984,-772296974,1988886155,-1968770300,1569390404,-339530753,1566465792,-326412861,119428950,108956668,-1070401653,-218103879,-1949173842,-1527577474,-352041333,1566465792,-326412861,119428950,-1962639733,1183450702,-52393464,116727,165872756,-372160086,24357875,1566465962,-326412861,-16353537,1996425334,-3545084,1183573387,1560341252,-326412861,119428950,990135947,108201542,112893,872154091,74877888,-1962508661,-1073018802,-251459980,1341719374,116727,300090484,-265598556,-372115413,91465203,-133959677,1583348900,-1957313699,142016492,-16484609,-1461189002,-1947890689,15402054,-1957313699,-852839188,73304865,1586171785,39291140,-1957313699,-852708116,73304865,1586171785,39291140,-1957313699,49054700,2123061078,185015812,-1340443393,-1188722176,-218300417,1238497198,1049299828,-16056286,1979612809,-339725557,-28933332,-25261310,-16040565,92991348,-378224630,-378150854,964745611,-1948093123,-1494023050,-646591609,-339244217,-1956749568,1438866917,901049483,-855357814,-1933341919,1560341442,-326412861,1183458740,1455758852,522308870,1397801821]},{"sector":6,"length":512,"data":[503730769,777344854,36445838,-997462901,-6840669,1996424310,276233984,620906123,-11534081,-1952998378,273058277,526278493,1532582407,-1957310632,71732204,244817059,1357643448,1342186680,-1946180888,1438866917,1465314443,-1962654069,1570217510,119496287,1146837338,1583337284,-1957313699,861361900,-1070378816,5552208,37152848,-1962490749,780862534,-981231714,-2132440294,1526797390,1600019033,-821616803,-1017291169,233556275,-352321095,178440,62456811,1465275648,-108270453,-1962260853,1586170966,273582862,141936907,1769263627,1702157067,116727,-771023755,-621344135,-628893449,214926080,175753483,-604513801,-2097096317,-376765193,1459626169,-164364493,-757997359,-674113839,192085307,-214236041,-215284366,-499057381,-1007199257,108265474,-678705525,-1007162415,125042692,-654845193,1593891459,147479902,-135006464,1946157767,868387586,-2131956782,275976441,-522987381,-638131501,-753876608,-875361301,-1961825920,-742378544,-108999710,-1961856240,-739716134,-2133199126,-472706879,-2134129909,-1031073559,-388771277,-326412853,119428950,-812924276,-66814325,-1425783155,-1666461556,-930305192,38177707,4623275,-1413379157,-1951677813,-661869626,868388523,1593895872,1438866782,1465314443,-2096734581,-746388997,74877696,344894972,-1381113717,-1387221680,-393499312,-1376220243,-1901215602,-1947170020,1583337411,-1957313699,-1940433172,-54489384,-1962508661,138841079,501467275]},{"sector":7,"length":512,"data":[-1070409589,-651448590,-24392821,-217811317,-12285274,855596426,737970916,1593895875,1438866782,1465314443,-352026997,108432150,92933099,74777658,283887499,3964998,-2142769035,-445317059,15450163,-1017291169,-2081649835,1979647102,-18427,1183457771,-1962888188,294123224,208929875,-1274788214,2098432,132844011,-1274788214,1560341248,-326412861,-16482685,-4717195,-1977488385,11797574,-2013865845,1946702609,71731724,-536543052,-351671297,71731719,15401140,-1957313699,-1973987604,1183450214,106334984,15409613,-1017291169,-13371853,989858491,-150572077,-336427021,2144539,-757997359,-674113839,74841989,108196667,-545000661,-387825664,-970523453,-315424763,-636757877,-396947596,-2090860606,-1993985850,-347781323,1978469355,96937479,1162281008,-81011317,638184267,-2044328566,1263249921,197391743,638548434,1194132934,-789064969,-2097151739,-1309998894,1458342741,1187257943,-993883126,-1595406722,1583292415,576093,1458342741,-768401833,-1962508604,-1998058938,1583292415,445021,1458342741,2126782039,172395270,-5511015,1566465823,1426065098,1465314443,2126838814,175016710,-1325398854,-1949969660,266568669,39356298,-277525846,531234992,-899850657,-1957363706,1381061612,102651734,-1054535219,81152,1183532661,1958742532,989626431,431229300,413850,604302080,1010904287,858355457,650546934,84158090,477421626,-1202696186,-661774199,7134362]},{"sector":8,"length":512,"data":[1488980736,637957127,-351992670,32241923,1595869176,1532582494,180829,-1706819400,1616,1971372790,1071808526,-1237204352,-2115481030,-134091777,105945795,745668608,-1957538992,1140898008,413850,-2134706688,-1023994252,276037643,1352285876,1509949446,95967323,82573568,-128427174,-1707166525,1616,-326412861,505304918,-15704379,-13440969,-745862286,-398655304,1931476907,112645,-661969429,504254091,-1274652987,170559,1931415417,-4069368,-352320840,176080138,-1259862647,532689919,-899850657,-1957363698,509040364,207537438,-437766145,-1962118402,-1261882413,-10622916,-1207602401,971702273,1317787787,106349834,43663540,1913616640,1959275284,225790232,-1706819400,1616,1971372790,-10360824,-352320840,-10885108,62391667,855829248,1583292352,707165,1458342741,1589976663,-398983418,192085636,1102369675,413850,-1207602432,48955393,1595916339,80371038,-326413056,-987867306,2126775894,905913866,1929271272,-1705593847,1616,28837235,855829248,1583292352,576093,1458342741,1589976663,-398983418,208862768,12112779,105945667,74645504,49004595,1595916683,80371038,-326413056,-1273079978,105945647,-1014300672,106874142,1200359305,1595875074,80371038,-326413056,505304918,-1274652987,105945626,522125312,-899850657,-1957363708,509040364,-2147068278,57827834,-1239356800,1106935866,481567858,1089110098,413850,-12822016]}]],[[{"sector":1,"length":512,"data":[-397273996,242417072,-1270748544,105945614,-1070399488,-239598613,1583292415,182877,-1273079978,105945625,1090781184,-883007713,-1962467753,-1070400264,-218103879,-947171410,1547486047,792461940,-326412861,-987867306,-397408698,1213923290,-96733045,92933494,1979703272,-8552442,1191277882,96865674,-2454784,-46208969,1912603064,-1707363315,1616,-1070398350,-654900501,1595870600,80371038,-326413056,-987867306,126486110,427081738,1979685864,553820165,1631324907,2050754674,539755639,-347928696,1583292385,313949,1458342741,2126782039,96871942,172395008,158711818,1352276404,67108870,-1261401535,-840413126,112892,915232370,372923778,309616066,1573000840,1089110098,1352288180,1509949446,-947701134,-1392748797,1958742698,1610148610,-2013007997,21350165,1461607482,-83696230,-389575922,-125042942,-385923702,12123916,-1609862144,11804930,48956809,1595922679,113925470,-326413056,-987867306,1720322654,1977879048,-398983414,28900436,-1961659904,105810899,-1706113920,1616,-1070398350,-654900501,1566465823,1426065610,1465314443,-1547685090,1789067880,106874114,501757951,-1958710532,1023457491,1929156328,-1193768138,1352287232,-167772154,91521218,-335759640,545896482,45668494,868823874,105945810,124911616,-1996330845,-402494954,28900503,855829248,1583292352,313949,1430580355,1465314443,1247724830,-1041745921,-1955237125,989626375,431229812]},{"sector":2,"length":512,"data":[413850,-1270807552,-1994451398,1187381830,1988975620,-2133816827,1202995434,413850,-985042432,-1031058858,1224607208,1065408651,-1976273862,-32839673,-633664907,2139105652,594819839,126498815,1979578344,509443,1352285108,-1895825402,370242055,39226655,1352285108,-1207959546,48955393,1595916339,-998023842,313924,1458342741,1589976663,-398983416,28900144,-1960414720,105286355,208929596,-1595392588,1025012731,292880386,425600,-919401612,1352285364,1929379846,534312706,-899850657,-1957363706,509040364,-402235765,57867094,536584936,-899850657,-1957363710,509040364,-401842549,-71763138,-1961790721,1455752782,-1707101176,259588098,-654900621,1566465823,1426065610,1465314443,207522590,-1191504408,292749307,-989442421,1085540438,2030043802,-150834417,1583292376,576093,1458342741,1586175575,-85137396,1451954290,172919560,-1274657142,105945666,1595867136,147479902,-326413056,-1910614186,-1090508282,1992622209,-53923066,1958742700,-348018172,-1441943305,-2146531290,-1105263104,1556021377,687978496,1824465357,687978496,1595875789,80371038,705072640,782312960,1412211456,3186982,-1017893213,2754190,643050657,-1593823581,-1557769170,1438842928,1465314443,508826811,-1946449145,-67098090,-1426053471,-1426030408,-1196703093,-1951727524,1824041922,-1031034112,775356331,808910592,707168512,1378257748,106349885,-850722376,545896993,-1896162674,707169234,1352465236]},{"sector":3,"length":512,"data":[567095476,171820166,-1911390974,-1593824762,-1557790674,815857710,815998464,-1885513728,-1895813114,1912614406,-10622968,-352321352,-21458414,49971455,-55572108,1946745472,1610264578,80371038,-326413056,1187272534,1411818250,1411909260,-1559869756,109859874,646534180,646665258,1451965778,242649872,567104948,-1961867634,-1557787066,646643714,82334762,1566466047,1426066634,1370773334,132653517,707168767,378468948,646665252,-990161886,106178054,-1898213808,168216515,-1946060800,-889189362,-1910470216,-795936040,1412048523,-850545413,1566465825,1465275851,567103924,189537929,76824260,-1178586116,-1410138105,-1414806645,-1420548447,-1420547935,-1582606180,-1582607326,-1901374428,113714883,31916042,202279974,463098624,-1962934258,-1275057634,-954086064,40740870,189571328,1593839621,-1194631842,-661774199,-1949266182,-79867354,567102900,270441040,-1070395519,-1710535517,3552,-1957210539,185289758,-399149861,646577734,-1014082518,168216358,637677824,790156,567103668,-850657096,545896481,-1896163186,707169232,513473364,856654096,189572032,1839728327,1583284227,-58668195,-2147126209,158679292,1037601872,1935187968,105945606,1439367168,503732054,-1662219438,545897212,512678542,378208298,-360644606,-628224000,855670468,-2131678218,91504636,-352310808,-372158199,-207355533,-768386651,-1700933333,1616,2126838940,737555200,583921,119495325,-883073441]},{"sector":4,"length":512,"data":[-372158128,-1977218701,1149805573,638182399,-1985673845,-136118716,1388533849,-1202577914,-1706033149,251331784,190449660,-1020363584,-1705900462,6147,190449660,-955616064,6922758,8435712,503730883,1354773330,-83572582,1510472718,24952843,1030595,1962933821,899347,1962933309,9615627,1962933053,964867,1256833419,-2131001074,-1274711040,-64893634,-1705900349,6274,-2117924868,1962967291,-73791991,-67108841,12108551,-64893609,-2117877365,1962967291,1772266244,-1949660221,1107343568,-1006886451,-75415069,779419776,454565515,1772232235,-885313162,-880082314,102651734,-1030817653,-982932831,52103734,-205419536,1595869092,-1576664738,-1910586519,-1261401126,-64893633,855798559,1460061120,12446618,-1022886912,721426408,1030333446,225574917,1772357121,94000902,-67108675,-628309241,-1912586056,7119320,1455676046,-1380385705,223733761,856388584,1839637184,-1553094493,-828150324,1842652013,-1553082717,-56398352,1845404525,-1553071965,144928262,1846190702,-1553068381,648244752,1848156526,-1200770397,-492595970,1843700589,1843398343,113734592,-2084540846,1843791559,1709731776,1077837824,1434255470,1847723766,-1337035775,570881537,41222766,-1499331920,-1475950739,-352321171,-1270971589,343175021,1843543691,-1795227775,1049168500,512454074,495545942,-2086371352,7210558,-692451724,-1541347218,1846034051,-1173982208,333999910,177334436,1594668776,82365278]},{"sector":5,"length":512,"data":[-1547685109,1084386870,1849860718,-1553049437,1554214490,1851695982,-1553047389,1688432226,1840423278,-1586616157,1419996754,1007076974,113641070,-1341690306,605457156,638976878,-1568413586,1847858827,-392098328,922722672,-492737052,1843700589,-392464920,116824320,1965059618,977174540,91506542,-352316696,7923715,-1553092959,110063046,1474915812,1074185889,1035009902,1972926184,-1781798872,-402599704,229677256,1972922088,-402542575,313563289,1956141800,-401690380,347117709,-342325016,1024704267,-1394079970,10741909,-402589720,-236446813,50915330,-393217048,2045254598,81127427,-1469177184,-1475578879,-402295806,65767140,-1014633496,1849689798,-397955071,1659410501,6809749,-1332191256,-1741166572,854078128,11462808,-400860440,1721827855,1848943470,1849689798,-399527934,-1779918823,41609216,-2145698072,510540350,-2048391819,-1341789438,-1744836569,-402483736,1407750024,44886043,-1610415128,52719138,58000188,864366056,1848288192,-1553060701,-1195151826,-1226309568,2144521,-1410088909,171870502,1049175552,1085800486,-1806112768,1852194500,138316070,571392,647260136,1493321670,1848655497,866893964,-1414812736,644732577,-1946155869,-1200761338,1857748996,158591086,-1409286216,243385259,-2147455448,1852311182,1848116983,108267520,672039718,-1960443392,637536318,-1224516214,1099638272,1848812298,1849048707,-2146274048,40779838,465505140,-402186691,1558746223,-397824000]},{"sector":6,"length":512,"data":[1973196543,-1806440432,-402632984,313562960,1956048616,6678768,1852311182,-402411544,1973223556,-401297403,110008081,-1960415640,637536318,-1224516214,1848811776,172067110,1849048707,638219520,638089611,-1224516214,1099638272,1849205508,571587,647206888,1493321670,1848653451,73173286,1848655497,1848784523,108366118,1848778377,1745260227,77669998,1842782976,-1912001048,-1586599930,-1557762604,109838340,244018644,378236358,719875528,244040448,378236360,518548934,1745260032,77669998,1842651904,-1911999000,-1586599930,-1557762602,109838340,868445654,1842782683,-1593817624,1072197076,-1878618624,-335596690,221849103,-1993997451,1569334805,58297602,1854815803,-1899762827,1049306816,-1977221112,958792541,74777673,72452390,142183206,-361365749,303398,-613040117,3008707,1712243998,915089006,-836042742,-768349743,63099309,200925904,1241609682,540299,-1224516214,106006784,2877471,-919381309,1852311182,138316582,1569334784,-1929332989,-14285703,-953788619,1090519045,75336486,-445251829,1524825937,-1893310631,-335355,-1878618398,868234094,-335596581,92874250,39684646,990083469,1970179646,110019568,-1960415640,637536830,67437963,124512256,641632550,-1070349568,-395449181,109980835,-1557762448,1990262786,10692206,544270592,1849310848,-1962052335,997057086,1970136126,-81860343,-385851720,179833053,148367616,627976353,3998464,504984835]},{"sector":7,"length":512,"data":[1852317326,669323,2506379,-1048376181,-217637372,334176164,1852311182,2531622,644769443,637536929,-1912592733,644769798,671371,-787641562,882983401,-1958262930,529213151,-109848517,-501380826,1721877488,1845887854,53047918,1919841798,2114323235,52261486,1919845894,-1912208617,51475054,1919849990,-1643773173,1023767150,108199920,-385844296,-51902395,1715389694,1049175662,-987889652,862875150,-1644435210,1049175583,-987889650,862877198,-1645483786,1049175583,-987889648,862879246,-1646532362,1049175583,-987889646,862881294,-1647580938,1049175583,-987889644,862883342,-1648629514,1049175583,-987889642,862885390,-1649678090,1049175583,-987889640,862887438,-1650726666,1715374367,9693294,-1374763746,8448110,1857069855,-1240546018,7661678,1857594143,-1106328290,6875246,1858118431,-972110562,6088814,1858642719,1841694348,1852311182,444198,642798592,132807,1721841237,446899822,1856938240,1876774,644789921,-1593827677,-1557762370,-962527200,581117550,1851302144,2401062,91139745,78708751,-1029445421,1851302253,1857422851,-1016216413,-13371853,-1510741551,-1952185997,-2082867249,-1070395423,-1064523021,-271383375,-946931709,1745260227,1857069422,3318566,644790433,-1593822045,-1557762368,-928972746,950216302,-1960393984,637536318,-1224516214,650284032,637817225,185104779,104232191,63406935,637546472,540299,56461862,-1960443721,-1031010751]},{"sector":8,"length":512,"data":[-1977219233,11993949,105483046,108382475,104958246,-1053047317,-947666572,-1957313789,-353598996,-1233744640,-1583606040,79392214,-1233744640,1946253800,1842651427,-1929378629,1810413174,639661313,540299,56461862,-2094661449,-1207957895,57933892,-1929296151,119453310,-1593420055,112946602,-1233744640,1963015656,1842651431,303910,1842611852,-1191228440,-680198074,644732577,263815,-1938959197,862836230,16443903,-1917421939,-385915202,-1070359604,116838539,1946447394,67221530,-10054003,-1986251288,-1769081274,-991363226,67063,-1996434813,1451883590,1975651326,1723239758,381586943,-1685985025,-1920826440,-385935722,-1769104378,-1729560810,1086465015,-1232267915,-1097990298,1625882390,75741339,-15296883,-1919162904,-385935690,1988952256,19720374,1962849256,4634714,-1912652567,-1912641866,-385935682,-2085053645,378965378,-1682380545,1847723766,-1925155832,-385935722,17168195,13796096,-1980217719,1177287254,-27911172,-1232263822,1911095062,-1233744640,-1962877464,1452013638,15919354,1508379253,-402295298,334168422,-1962854168,-1769081274,-1511456922,-1233744639,-1929333272,-385935690,109969790,-1993970218,855650366,782444224,-499217664,-144381843,-1017256565,477413387,-1960394610,-2097149890,210371527,-1958613710,-1951992874,637957362,-521468021,-1957313720,1156350956,-1946257783,-162469674,-1912846711,-628310970,-1962917703,-806814626,4210166,2122401141,1968198844,-1099005634]}]],[[{"sector":1,"length":512,"data":[930428501,-388610421,-1014103333,-1946140488,-699495486,1586219051,-156964612,867989133,4241919,1586210035,-162404100,644732065,-1946155869,-1955736570,-1195155995,1451950152,75753982,138316582,63406848,-315487094,-1494002111,-1023314594,-1962916424,-385409282,-1957362597,1424786412,-1979955575,-1960378794,637539902,-1224254070,142183680,406731558,103838720,130515799,-391350643,123705820,-1339717082,-1403613952,-1919265304,-387404714,67061,989909635,-948765098,1178273143,-1950320900,-1950130715,-1955739634,-395459050,110033421,-1591317048,-727515132,446768749,984320,-388823887,-1056718452,-1016215389,520082664,-972648954,-164421779,244055859,-1561853926,-1591337063,251985946,-754667264,63016168,1841734593,644732577,-1946155869,-1016211962,1843412619,-2089746559,-396948873,1049205055,-1017156128,-385871176,703071133,1848025856,1847858825,1847725696,-155260893,-1912591384,644732422,83892897,78708751,-1047729965,-962346749,780387181,-1190367800,582877364,-1895877778,-210909178,-1262894172,-1074384128,119434786,1841831566,520529139,1841825411,1465303820,204323068,-402454808,-1070399196,-1553095006,-1432130136,1842783085,-1553067869,1048604216,1962949904,16824336,-1996418840,-1586623458,-1365021242,605457261,-194189202,-397158261,-2141457207,4001854,480448373,504793454,-972125330,537823597,470170478,994866542,1970150934,1847632198,-395458909,-2065169860,1048651508,1347682304]},{"sector":2,"length":512,"data":[-2128203403,1426063934,-1943505610,3926211,644721313,-1946155357,-1905415674,-971097149,-2133428883,4001854,512296053,1491627438,-1207047424,378208328,-1964413404,-1709512702,1024460486,40495104,650862175,-402646367,-1993998291,637547038,-402645855,-1993998303,637547550,-402645343,-1993998315,637548062,-402644831,-1993998327,637548574,83894945,78708751,-670832429,1839899075,-1107294533,468204827,47357,-1557785227,-1960443900,637536318,-1224516214,1099703808,-1547662332,950234582,-1365130386,1841734509,-1553092447,96693704,78708751,512485587,-670863930,1841831483,28837494,32499968,1841700489,-522987477,984515,-388823887,1841831563,507238443,108228038,-385875528,512295373,-523014712,1025687235,510551743,-1413467385,-1418869087,-1515470797,1859583873,-1144787083,65760870,-999371077,1925645119,990349576,125240391,105352131,1023512809,-176685072,1465274961,33601542,326567739,4055249,1005941280,84440839,-143450112,738193592,78709831,378267859,371944904,-1036292666,-1031074442,1191436499,1913076484,29526837,-1955740154,31642576,-745864105,-2089888069,-633665301,-987883916,64982031,868716280,-385928202,18847481,-471137721,1516134151,28885849,18082048,-1553045343,-692359738,-938046610,149652333,251987851,-1039104,-1325119607,736678660,264576720,-164380018,-1159135437,1468604310,1727758594,-1982433938,-1016215530,-1318137183,65590020,-1553018874]},{"sector":3,"length":512,"data":[1723559368,-971601042,264576621,-164380018,-2098659533,1468604310,84380418,78708751,-805050157,-2130132093,1970198267,-971601444,110019437,-928944698,-971601043,1958882157,268451113,-4717710,-754667249,868781024,-397323328,89191018,78708751,100788435,1498967494,1958820699,28885965,-1872958720,1847867019,1349441215,1486218984,-395389254,-692414866,-241964946,-1016199517,512219955,-387355130,1024566257,-1264336845,1840685933,-1553090397,-1990693446,-1989291994,-9579986,285657056,-1023410115,510621375,1870052871,-397355381,-1990683228,-1955743722,-482537202,-802780385,-768701587,-1554968979,-930386508,-482232642,-1073042425,-102565003,1840658057,-61385013,1839611520,-1207339776,-105185281,19393023,-2147354904,40740414,512435060,2062052782,1864808449,1872384030,185553920,-385649216,-397410115,-1202060959,-85327873,671545088,1946189934,268879365,512426301,-1014796758,-754667249,69075947,203293550,281248622,728608929,990278339,1936600070,-18423,-369099590,104530113,58093102,57552545,384324568,44113409,201720686,1049966,-13385586,-1582579661,-661754408,855639201,504269814,874417664,195359488,535524800,204930907,109990766,-1591317032,100859946,268791308,-1960423424,637537342,637683083,52837771,637537854,-1588591357,100888068,268791308,922701824,161115690,-1710271487,257163661,57544867,-1553071610,516189716,-953782766,247792711,105367334]},{"sector":4,"length":512,"data":[-694091776,1958742893,650153491,637540513,1705531,-1591341963,-370475004,-338654392,110006282,-13406762,1594075112,-466433186,-395463517,516161621,-1960415726,-771026345,1169425524,516188109,-1960415726,-1960432569,-1096602025,-1072264851,1958873965,1037155865,1958742700,-1274660339,-1408797587,-76169206,915009259,1456172470,-1070334889,-1553095006,279145896,-66983826,-1949606305,-1586647010,-668242516,1253359758,-1006886451,1458342741,5367895,-1962522997,-1073018794,-397934220,1583284903,313949,-881979743,-1959338869,-472841121,-1896052853,58048523,-1942122824,183002,1458342741,1586232407,15919114,637959876,1946172800,173968134,1593884904,113925470,238977792,24379502,-1547684925,113733134,1958778110,-345123167,650153564,1457803,-617365453,21334310,123570726,638089613,1588795,-1960382859,-352317890,1032005165,639923455,637957515,1586691,-1960437390,52822620,637539870,98179,1465256309,1501190,-2090967289,992348359,1962938430,77670092,1975520000,-1957313632,1357677548,1846413055,644746913,637618057,11544458,125799760,-391088499,-1923575076,1541976150,-1336504941,1167741522,-1962934113,-1922167266,119451774,-1962933016,868441573,-29979712,-1359052396,1443919758,1586666216,-1073042346,915012469,-782723842,-58226205,-472792178,-1081606349,-16019716,-141874060,1975519916,734432251,-1948808249,731184654,-217637170,-29455964,-1895908460,1846414987]},{"sector":5,"length":512,"data":[41359163,1128466217,1438906082,1465314443,-1961998709,-1360523178,52261376,-999419882,-1993995650,1435051525,108971010,-1207072474,1583349759,838237,-152321997,1458342741,172395351,-1005824373,-1993996674,1435051525,269888258,16902254,-661975182,-1081875503,1962970876,-1950338300,1566466000,-1962932022,1602959068,270412548,1842782574,309641227,992395406,1946167838,77669894,-1192367360,46858239,920423168,855918478,1048651456,1070399488,-1064558988,1846681284,240093990,-1047653661,268843814,638022656,1314443,-1064505621,-1962933558,-345123298,868453924,1049306843,-1960443882,637540366,1946240315,1569334806,142183687,-277481157,69110566,1977289472,-1950090792,103491271,-1960443882,637537854,1056395,-12745946,-1960435852,52823669,1912608822,1144727060,-1961986814,1277896394,637956614,1913146427,147292937,-730465477,-1960393735,1543710237,180781828,-991426589,-489159936,12445945,-102512501,-1960393845,-134206954,-702641213,-1910707347,372975299,242548778,772160294,639005184,2885179,-1960439950,184550430,870348251,-103773248,1049306819,-2094661618,108330813,38087462,-947714702,653257480,637682947,637957515,1586691,723965298,-814611388,1418405462,180781830,1290324107,-936689152,1581971571,39619366,371065638,1200301568,52871937,637537342,52829579,1912606238,1065559587,639464703,637951883,1580547,-1960439182,52822647,637539894,637617291]},{"sector":6,"length":512,"data":[-1022994549,-796147661,179054275,-1744668480,-1971379005,-1012128032,1458342741,570869335,113721454,8416734,1849427654,1040631302,113706862,1874882022,1843529415,-1070361344,-1553055070,-257724902,1275476845,-401509365,208797728,104631078,9300055,116066143,1842742926,109903667,1049194088,1583312384,1053084509,-1960442732,-1960439227,988288085,269888256,-19797906,105918578,637897510,-1006353405,637834302,638731579,638076299,639131019,1964656014,642468615,-1014298743,-1938942301,124655622,-993789864,644747806,618860427,1846545923,-784612978,992349812,1946161174,244000273,-420806642,141934603,172326,-1031011605,-326412861,637856899,50342561,-1989275642,379715142,-62486162,-1946401141,-1318184386,-1981295869,-1936654667,-1986985851,-1986985323,-7273339,-2123490810,-2140267970,641627136,-16040821,-1977206924,11993949,71928358,-1896063349,644749318,1183385483,1200301820,-27882750,1946272246,1468737034,-10229756,1224627849,1846548011,1946023656,1575324571,-1957311549,-61384980,-401230664,2126838047,16967696,-392883009,401091316,20178945,-401842492,-1070398615,189546115,-2145160192,1962935933,155579933,-1005095552,1065362973,-166759929,76877318,1048774773,1962972432,1589921793,126428680,283885619,1840658059,-401834300,1453428373,1941908846,1610144488,248143198,-326413056,1444211843,163118167,-123082730,-401965372,2123169932,712960236,-1006583576,-152566178]},{"sector":7,"length":512,"data":[1676404738,-392883010,1290297222,1049094205,921237383,-339725567,-1237939440,108971117,-1584512792,-1087541674,-125441933,-443851169,576093,-2081649835,1465259244,375372028,-386379032,2126838447,3336198,-387154291,1726491172,639484928,1963474816,1670375442,-1962261109,371919957,-320311792,855960572,-388985920,1583347771,-899816053,-1061289980,3574131,1446414741,-1915885458,1842757251,-385649664,-1967618872,-131077888,-1794242874,268879616,-956301163,194318854,977174528,108335726,-402648344,-2134670172,7223870,-1195179659,48824454,3574776,7399573,809239690,960239986,837293431,-145263984,-1554812198,1474860304,168069632,-398297920,1421577540,637245,611583802,-119389373,846546492,3729478,1922040808,1926952745,146725,305995890,-1558481152,149656850,134301578,1184173574,-1979705880,1975519748,3574206,914998165,-2017956266,-141825792,1958742700,1981824004,-993833225,126494237,1148390460,1081346108,1014238012,192219708,-1928903286,1843923548,1009642385,639071497,-1962784885,260704860,994176306,-1960675640,126372040,-957867029,173837161,-315438966,-466434934,166451203,-1960436284,1552745039,-1957210614,176014579,1583326451,1847239107,-326412853,-956541098,1080959494,1843791559,113668032,-956263154,194318854,108956416,-405601359,-1862875263,510902459,3401735,-1938571080,1566466010,1426064074,1465314443,-1324974453,-2115513597,-1953433913,499385429]},{"sector":8,"length":512,"data":[39815974,371065638,1200301568,1566465793,1426064074,-326898549,417118230,-1962860312,1183385157,641582334,-16040565,-1960440203,-1929377730,468190045,11593989,56461862,-165281609,1947206721,1502291475,1602954759,63144722,-1341850136,99477550,-402432627,-1977219854,11993949,-402359923,1174473982,1300965118,-1334451437,97380392,1360381827,-1977219497,-1960442811,-1960443299,126756413,-1930789239,-397349818,693636432,1586232910,403083006,1963239534,1959922436,532948483,-1981120883,1166805597,639484940,1946238848,105235984,1200236032,121997313,-352285464,1036761862,117734376,1950964063,-399724534,-947714713,-1332155643,90040361,-1795014972,-1951743950,1438866917,-326898549,599283476,3926041,2123233163,-1190715668,-1510801398,-2131984755,1962935933,235337239,91489429,-352295192,269388558,-402267243,65732822,-1006622488,848626238,-1956664640,-1547477531,113743112,16684294,-1795023223,-1794898292,170297688,204376469,-991887467,529147421,-472776910,1504182062,-1206136039,689580313,-652551910,790353690,1377557019,1612472348,-383984356,119339804,269388573,1976109973,639484934,-1006481525,116787805,1948357902,63039753,-400510909,1364395167,-167278042,1117064710,-466483084,72345753,-919403029,1493460456,-1008868773,-1960436284,-1960441737,-1910109601,1284187655,1277896200,499400964,74943270,106924838,-1995993562,38112309,21269030,-1341700728,72214568,-1342175768]}]],[[{"sector":1,"length":512,"data":[71690537,209059665,-16091649,1979647605,-399114494,93323077,-1895676529,1167001157,205885194,283330905,484977840,639484932,16926603,-857011643,-399986493,-919403509,637941188,1090942207,54296614,-1960439435,-620033444,-1960441484,-1910110092,-1947997433,1435175493,1591423756,1962281735,2088773132,91574786,-352319000,-1326652688,63564073,189813585,-1341229861,235337260,41160853,-1259848784,235337219,192155797,-402432883,984613554,1476633320,56396326,1888288951,1448235012,1141057030,172329217,638342537,637885579,638022795,495518862,637683084,-2013182070,1170605893,2129133574,1516111870,643390296,1124299915,-399986493,1573127003,1200301578,1032829698,1960292397,1033288474,-1156287416,1950891420,1034140430,-1157073848,1038630287,-400299262,749732408,-1341969688,52815911,638213572,170936202,-402230080,-347929833,-400051982,699400975,-402453783,1538285229,-1006435608,2005607965,1602954756,126756358,-1995809397,38112309,33965510,34031046,804295,868233984,-2080262702,-402295761,116064273,-2084188096,-1073086253,1571876213,184730345,1342665938,-1192743760,1166628866,3794954,-2084188096,-1073086253,797191540,-259315340,-2084188096,-1073086253,797181044,1213264501,990528905,1949085894,-399593465,783286915,-402489624,1113063427,1364414659,108396370,-1879211800,1499072069,-960276389,-402520507,48779294,235337310,1500842133,185222539,1265896517,-398611269]},{"sector":2,"length":512,"data":[1166737744,1279165196,527695883,76822212,641577403,1947485243,1035385625,239352614,-1145368460,1144727101,856126490,31189202,501744619,-399724543,1166737935,-388877558,699400649,-1157496087,99171752,205884161,-857159373,-398807039,1166737903,-372690166,-1964506689,173902685,-315486326,15984963,-1587708696,37590290,1023767040,58064914,-1929376840,-1229059491,-1954420625,-770979701,766510452,855749352,-33979438,238749308,75404562,1245825671,343918859,-1729613648,-399593471,316866963,-1930940240,-152354559,-503308312,-399593221,367526271,3964928,-770967435,-1329397387,23980101,-375799157,179044580,1308849600,1558786224,1560274945,-1962261109,-957805483,1559488512,-2143436613,1946159741,1036434179,-393197333,1569545441,112906,-393196053,1166761173,206932746,-1960436284,-1960440713,-1910108577,1976699655,1144727070,-1961330936,415663048,11996131,56396326,-502501235,56397303,-342882581,119443573,839879206,-1977203731,15329287,516159458,860611335,126494418,-1794242826,1008760065,186413856,-402426670,1364394039,598757458,1476444904,-392567758,1499070513,186116955,-402426414,-1073086437,548405877,1006675688,-402426585,-498925409,1976699836,15254276,665866240,1476431592,-154938633,1083510278,-661959563,259904011,-755510281,-2097036413,766509266,-1107267864,163134822,39074560,158795378,91429947,-503003517,800080368,472629502,1929532443,320603127]},{"sector":3,"length":512,"data":[-964492716,4319236,-154933022,43322886,-1336888203,3270692,506200,125074,-389773678,-997851134,-790048688,-790048536,256232,-485546920,1975519752,868436226,1009779913,67269178,-1000929785,-1433075138,-1795015031,-1794765057,123667316,170298307,204376981,136773525,1848156565,-1150427485,1642602094,772175228,-352233473,50906092,538915380,927276879,551373344,740441148,1008804412,574366242,-1006631745,-1200722410,149684223,1946499878,80184072,-193594821,2106271427,1745260034,1870052974,56461862,-1977220937,-1024064431,1460958224,125405990,310217510,-402405501,1153861008,-2090914049,-2048392249,3913861,1946731254,3061763,-378571078,1048637393,1963093562,-633437884,1962993261,1874239804,1874335371,829805067,763150347,2133266237,310056,180341043,1981712384,-134768273,-2010070400,-26249577,1271530186,-506400907,1849953928,1849296582,434684673,-5314436,-402652488,-970557281,-1336999353,2074732562,347138932,1434180841,-326898549,2079778836,-1792538938,-390057216,330332283,1971030760,163074918,-308287488,113661702,-400921026,113641300,-150507970,7219206,638219280,16940419,1424491380,906413670,-1230962283,1577462638,-1791515794,-1553039711,113677625,-402549464,1000542200,1024887189,-400904043,434666353,1527209744,38258214,-1791574446,-218101319,105638820,-402149293,2123201365,546564332,-970586277,-1924136377,1036257909,-1190819290,205258756]},{"sector":4,"length":512,"data":[138155379,179376500,192154172,548484235,57935676,-398390134,1347555228,50332856,-319035199,-1420252328,347120883,-2139419416,24001086,887686005,675184895,57933973,-1962525208,-389849627,113736468,38186,-402651976,1465087895,-402149370,1743289053,109832192,118444008,-970564769,-1420754361,-1330920821,2059659284,1849310848,-1949207551,194325054,-1908771585,644769798,-1912177269,-395401210,149452755,1009218937,639858001,637689227,-1910096501,252372999,-1792393589,1852311182,71665446,106268966,-342545757,330875838,-302978816,1013856928,1007252536,1006990396,-1023314900,38258214,-1000929702,-395418050,123670224,-1413313621,2054088899,-1792538938,7923712,1055396784,9300090,-51897424,-399411847,1387296651,1970926312,1178518546,245295214,-1986709597,-1332397802,-399447280,966987947,-401362795,-1595377139,-1791515888,468386736,191758497,-1559792448,45126969,-2036265493,-1791384722,-1792538938,-1577013247,1239979318,-401297408,1048607197,1946250810,675184784,57933973,-1023065624,-1553045855,-1070361296,-1198181725,1827143689,839319414,-401428331,-277579401,89057475,38112038,-392874845,1000541724,1024887189,378258325,1049335092,110007600,-141857176,38127142,1569334866,-1929332989,916456569,1962949781,1851302181,1848116983,192155648,1946286723,880033798,67108389,-1557302590,-1037341096,1852048939,37506539,-324983691,-1037350803,-149589440,7219206,-2096598000]},{"sector":5,"length":512,"data":[57934330,-1543504347,736849388,-385851208,138210489,512435317,-1993960146,54889783,-1953157469,644742174,637683595,1929533185,1488902,-1544776471,918459703,637333,251634931,57972018,-1006672919,2031020112,-394917656,-930449402,-2140506792,729043961,1968306560,898311750,39684902,638029350,1963146368,-437759946,-401493896,-622298947,2007820405,1396455797,-2141702795,24002622,-1960435340,-1912209035,644771846,134167683,-1175973515,11659384,1006709737,1007318049,-1207536606,317259780,9681132,-1192489751,115933334,1948335340,1948400880,196628716,1966073856,38258214,2021845075,-1506345128,1460032366,1594425064,-1336255737,2018240532,216543664,102004088,449112151,-2144991393,-1993997811,347078989,645411049,-402303607,10552085,1166616174,1975520003,-399265774,192247775,67993638,250090672,-2146178184,24002622,116852852,2125278,-2144992140,1048576269,1946250816,-399790065,57964467,-1342143511,2011425044,640464067,1015171,565449333,537261606,582224501,1074132518,1018430069,1484112954,1849310848,-2146995187,325990974,922699125,1460039334,139847763,1599862667,-1960945913,-1989253618,728655414,197624782,-1494016250,1969119007,102651683,1856376459,1856386697,-1960391125,109970813,520515240,520595187,-1341819553,2003560724,-385842248,1048832757,1962962432,-399986668,225802015,135102502,88459046,-2031550464,-331940096,-29950099,3604333,1849098094]},{"sector":6,"length":512,"data":[2001262,-29456018,226502253,1166747264,-1792236795,644769441,-1207614071,-1209532412,5826675,-386252056,109973051,1049325160,-2144965122,-1960411355,109969789,-1993970064,1990263365,92874350,1593965032,-1896198936,-1955698682,-1888616898,-1888616442,-1888616954,-1586631674,2453032,50347267,-1070397068,88442662,-1334942045,1992288532,-2081649835,109970156,1049325160,-538415618,-28931840,-1560219928,922709484,-1960405716,-947711155,1366614805,-1977198842,-1960442811,-1960443299,-1791581635,-1791279479,-1791156599,-402158042,1311310120,-28931074,410309131,728624289,671545282,1947205742,33194760,-31128716,1844225023,-1584056413,967011840,742296469,-1475965291,1936844910,-1792262519,-402650696,-970558732,-1101921721,163157302,1604645632,-947693305,-1953701371,644742718,1947207158,906413626,113706645,431415,-1553071967,-1960405703,2112357245,-1791253750,-1791158647,507587263,1931601927,-402650696,-970558808,-1101921721,163157302,-1583025408,104568108,1968729766,1856414467,-1017256565,637547752,1963197942,263435,17167910,1077936756,650130371,185687435,102200539,2106271319,126756367,155025446,-1960442252,-654900667,868419423,2105747136,309592067,-165281104,175378437,-165280592,41181189,-1960442192,635638605,365396823,1460031569,71666214,39684902,641567526,233310094,1476878080,-2091269885,-522058297,78168927,-1977209739,1300964869,1930050562,1946762279,1946696727]},{"sector":7,"length":512,"data":[1946631199,33129231,-108849548,-2096008190,208930041,79286667,79282944,-1009634560,-18775231,113496627,79188823,1852750592,1541862632,-4663413,-1014256641,638017451,-1023322743,-1157625672,-622301578,-1413467162,728673953,-1418830842,728678049,-1418829818,997087905,1970183686,-18429,1856938411,-1586602845,1621323454,1855889774,-1016178013,-1201704216,2126184456,-425990034,-1582579661,103509686,-1582600610,103509702,-1582600606,-1582600708,1587769014,1858511214,-1016175965,-1157625672,1860726406,-1413467162,1080973473,-31123852,1851302911,1852048939,-1413467221,1851302315,-1016175453,-385851208,113764333,38186,100668136,-107747241,-2134702241,946747966,350815093,-398741502,-1796705277,654556017,1970524136,1744776708,1423361,283621609,661082371,1042774045,571811813,767378221,1076721961,1208823013,734411822,36423212,-732942636,785646638,1429132291,-734581036,1900931118,1849310848,-1607961510,-2034274758,1950563328,6733575,125118780,1849165454,-395053079,1048604971,1951493690,833542,-991472407,644761150,637689227,-1910096501,1943464199,-1334586392,1940645903,-397293261,106498041,313540951,1953719016,279990769,-1334602520,1938810937,1509903080,638059496,1593990539,1347571975,138775334,71641894,-148343744,-1960545565,132573400,213405778,112896,638045928,638076303,638207375,637814159,1493583247,-1195130142,-689373162,708247526,775356309,808910741]},{"sector":8,"length":512,"data":[842465173,571541,45734707,127526912,1845247625,644769441,637814153,411079,105221376,110440099,309335,-1200641560,417867582,856121088,1845273536,-1791883633,-1792014705,-1792145777,-1792407921,-326412861,-2011763581,-488047002,1849335922,1962821178,-400576393,208958107,-1342146584,1922164756,1693181812,-395320088,158691623,91574588,-344794136,5957635,-1360512592,1745260146,-63009938,1435182701,650283778,1342326151,-1923676590,-689378690,-401428457,-210472365,-2031610960,235780210,1610584808,643324423,1979860283,1166616068,-401297406,141914675,980302496,-1049231802,-385988982,-443846051,-1947679907,-401362696,922710609,-1070371332,-395445085,110098583,113667580,856200502,-1791384640,-1191666711,-1092026346,708247525,4096917,1098186862,1399997416,855643320,244187,637960936,-1995291249,-1334969282,1909319693,1460023157,654185704,1963146624,-401690594,-1960414731,-1960443299,-1960440755,1642598517,-351838458,9746455,-1192923927,1726546067,868234213,870003666,-16695,39684390,138774822,173377830,206407974,239453990,-1993932801,1721831541,1166616174,1170679300,-1929379834,782435909,-1202256235,870842372,1042542,1776813919,-1547685119,110063100,-1597795030,1010593338,742136948,557586548,574362740,658247796,300427124,-401297153,-546016981,983571435,1950104686,1949056015,1948335115,1965177860,17885192,1946159080,-383274779,-1957334719,149717996]}]],[[{"sector":1,"length":512,"data":[1901783120,-395422488,477458514,309678908,104579212,343240296,54889254,1845233211,79170165,-459020032,-946929869,-1929871735,196672070,1842079744,-1989073944,1183644798,1204168446,-56536318,1166616173,1856413955,88443174,-1792133493,-1927509722,914950517,-1024944850,833902843,141828412,574378420,297009780,-400193498,2126774635,1962871800,2105747004,896794631,-1360522064,-397692816,-1977192279,-58801147,1963276838,-58815145,-2080868723,75696901,687728651,763577973,187466507,653819588,-351844981,-401297369,745893951,954747824,855929968,-1004409920,-165217154,578101253,637543912,638338443,67913091,654081732,-1341700727,1880221716,-1017256565,-385842248,-1749490735,-473175808,1852311182,1845247627,209552166,637957376,67913159,-2094611712,1962937469,-2094611711,1979650173,1166747149,1166616066,1166222864,-1960443390,-654900667,1356396368,79223947,1520363520,-1960421288,70061125,729314304,116689888,113849175,108396326,1569400385,1960512266,2106271241,126756360,123726315,-1977209621,-13499555,41779238,637957458,-351831669,75074841,123570982,175430411,21334822,-1929625463,-1960378816,-16053891,-891105163,-1960442017,-372175795,1363798481,-1378317395,858783929,1515514066,-402651976,-497460675,-1578726422,-1993970050,1460014661,1610264040,-2048343289,-1506345105,387182,1856374415,179851459,310016,-401799495,-1070398537,71665958,105220390,138774822]},{"sector":2,"length":512,"data":[-51901008,101741934,3467351,-1993996449,246417477,1483678952,494218300,451417008,-396949905,-2144928983,242354237,1594066920,1166616071,1435051524,582533894,-494147328,-2081649835,1187448556,-973078278,-956105146,64582,-1461171536,-972786322,-402194874,1191116923,-401428228,-210473321,83773174,109973108,1656712760,977174528,443880302,-1226304592,-88217490,83773174,-2144990091,1131676733,87916582,434650484,-1202695677,1727463429,-529012484,1586125400,-61961218,637896998,637687177,-2096865912,-253622841,33310347,347142726,1970157288,-8656637,-1946532213,-1195155995,-286719874,1803282657,-1972406594,1073787908,-1497642869,-533206930,1776919795,1852237934,1055406512,42985582,71666470,140348198,544597770,-388824143,-668210221,43968579,146296914,506112,637699816,637814159,-1022999153,-385869896,703127961,1849335918,1006667455,-1087736765,691798118,922690420,-1863815514,571647,-1191181125,1357384968,-1792368382,71665958,105221926,-1792393591,939953859,38201454,146296914,310016,-401798983,-1893334485,-1893333947,-706148795,1842538605,1894267312,-399739539,-1977157277,1946369029,1946434602,1946500134,34531362,146296914,8436480,-402651975,-1893334541,-1893333947,-1899821499,-1083295738,-1195179930,-18284520,1838082272,753405872,-1911655315,-1083295738,-1195179898,-420937703,65661152,-210382325,-277486582,-344670198,15122256,1849165454,1375844328]},{"sector":3,"length":512,"data":[1095760,-1191181893,-1662516724,1167009281,1167009292,-1070376178,71665958,105220390,140347686,172329254,25880643,381636690,939953665,25094254,213405778,637184,637626088,637814159,637945231,638076303,-1341504113,1826875664,-1200815128,-617414640,-402649159,1460011331,637619176,638338441,1376671113,571472,-1191173957,686292999,643455745,637820297,-1190767223,1396834303,146297425,1767237632,38258214,1532582480,-1951677557,-1047811134,-1413467221,1357386416,-1327795092,1820583950,-768360053,-1157408536,78118913,1598226804,1166550535,1569269249,650130178,637814153,637945225,638078345,-1022737015,-2081649835,2123180268,294643948,205488166,465045107,-540022528,988288944,-662794900,991000808,125168734,1178321036,-1207536402,-1293352934,-498693153,736384651,1444673094,-1207534088,-1628897252,-163148833,-386378101,-930479391,-1948105077,-689380266,-387872254,29033227,1946462208,145244935,1128465012,653033156,-393605750,1375754216,1095760,-1962917144,-1993935290,1183515717,1166616312,-498693370,138774822,652494475,638207369,638338447,-1961998961,-389849627,1692954143,1031808759,638087692,33717635,-1195179657,585695261,1927828447,-1993974819,1569269261,-947141886,1465107084,1746832926,138316654,-337956096,142183175,259325707,990076298,-243989423,520376717,532896607,-385840968,-1977164059,-771804643,-1476448541,805449698,813969416,805449860,805449730]},{"sector":4,"length":512,"data":[831009087,831009127,831009160,831009160,1673015688,-558634752,-2081649835,2122908908,-28930820,-386105715,594889116,1849310848,-400788467,126484925,-1002183630,992410750,91554373,-346711064,6600775,-1327596311,1793583117,654081732,638213515,638090635,-1960441970,723912781,2126775373,1569400572,2106271238,126756356,-396949935,123731816,125323609,-1293413712,-1326584982,1789650958,-1017256565,-2081649835,2122909420,-28930820,16402119,1031808512,639988995,818563,922689140,-1960415562,100732997,-1064538442,241011494,869269689,1430579410,1857422991,1726483888,977174634,1366560366,654079684,1963146368,1149969938,-96060656,45615477,-96075520,-397080344,1198876982,1131762236,644504552,989939083,1031141958,719852464,1569400426,2106271239,126756357,38112038,-386251263,347143872,1953093352,-401690449,2126801417,1166747388,-96064766,-1957379864,-1195155995,-2098659284,6666461,1440578793,-326898549,-1923676652,585690238,-386626801,123412983,-1974474520,67056348,-466422178,-1957400600,650337765,1208108427,7596112,839354970,1992440804,-2000516348,1087384327,1414457426,1416096088,-2081649835,1460016364,-387154291,-192213287,-398203416,-420994645,638017314,1963605376,1166681610,-161575679,645338088,-1929230965,367588958,1575324500,-326412861,-1928008573,-1561793410,1065362958,-1962248948,1435175493,1575324428,2013379,1440536809,-326898549,-327250668,-401702680]},{"sector":5,"length":512,"data":[499402587,155156518,1569392501,1575324426,6731971,199013609,1964734674,2028210710,168457487,839088320,45138880,-1023102781,-1329396048,-92028148,-2146208257,125173756,58310666,180552112,-1341949468,229688069,1942239939,-154892798,141820356,41157288,17621200,-326412861,-972362621,23988742,-1560280392,-1410830862,1844224474,862842531,1844749248,-1553074525,1049335104,1166765538,1845011202,-395445597,1183383758,674693116,89450606,-1879423351,-395452922,1183383738,71624950,1844192899,1745260286,-29455506,1979648877,12380174,-385988983,1183383869,639691768,1946420726,61204494,-385988983,1183384555,-401806344,1183383882,44099838,-1946663287,2095643718,-28931247,-1957610008,938015302,-163675311,695468141,-189011024,1368975469,-395446597,109990344,1049325160,-1960415746,-1960443011,128979029,-1202803736,-722992612,1844755281,-1957582872,887682630,-129594543,-1588529688,103509678,-397382052,-794733854,1841734510,-828129229,1859298158,1483606690,-1017256565,1848116983,292815104,1843543691,990004619,1953364486,1845142276,-1010814013,1849704064,-1201373952,2028470276,1842782545,-148455282,16787462,638219520,184550561,-336759360,34650129,1848116983,58000384,-402516808,-919383729,1842742926,-1064431637,203328294,1065559552,1090680063,77669894,1975520000,-1340808215,1353377946,870003544,12145106,1362618416,-1326652839,1352067157,-387610184,-324972383,1958742893]},{"sector":6,"length":512,"data":[-1294403833,1318250732,-1202696727,-1964446583,-396513200,1048596596,2080403008,-389304312,870928488,-1070483376,-1202687768,-655884276,1344596304,-2081649835,1437598956,-1202697240,1458103689,-569968816,1946158189,-334066927,-1327827091,1300424704,-402599752,-324972373,1958742893,-1294403833,1311697132,1852311182,1845378699,-1980697112,82378310,-62486031,323848998,-485111933,106385692,71666214,39684902,641567526,954730382,1499399936,-502937725,1745260260,-29455506,100017773,639333408,637760907,-1341107061,1293608967,-402515784,1957711939,-395447109,-2014818338,1575324495,-388461629,1311371536,-61462018,1979841155,671545100,1947205742,-60390652,79951614,-2144980619,729088829,209552166,1378120704,201213579,-1962707758,52886598,-944107451,1305405446,-1960394612,12127837,-388877360,190468121,-1023314478,-1157740917,-1310179644,1460058189,-1957732120,-1917125562,1302521918,-396945736,-1977200815,1963539461,1166747149,333989890,3192908,121384939,-544535947,-1202978072,569049180,326435644,209552166,638350336,-401586805,548948974,638249730,-402504309,280513506,1333389568,1852311182,1845378699,537261606,-994569356,1324869702,-504887632,-1030965170,-347149080,100017689,638809152,637760907,-1341107061,1276569607,-402514760,-1960423617,-620031651,-1960419212,-1910108291,92939783,762514492,695470140,544475964,1182075452,637983162,-167684854,41157314,-1960431946,-654900667]},{"sector":7,"length":512,"data":[-397616152,720062385,-348756034,912375319,21362214,-1106414328,-165267875,1963196741,911851011,839682606,-1976678675,1314580484,-1984366622,1315170540,1307073968,1745260110,-29455506,-279189395,-1011824501,17167910,-877657484,-922874397,-1957810200,1312549057,-397543959,-269922780,1183449933,1183515647,1187251710,163745020,-1946532213,1452014686,1397799166,-1202842392,250106449,1465301070,-1202845464,48760350,-397037490,-1984410132,1308092645,191753377,-150506304,-387140904,-1196405784,-1588735000,-617386392,866123961,1316743378,-388460872,-1947644463,-326518707,-1337079576,1303570525,-400619592,1605914045,1303898206,-396797256,1538805169,1303111768,-1779904592,1298196813,1077316382,1745260181,-803303826,-1961366674,-1977220484,11993949,71404326,208977931,-1962785655,-167050124,-1021319819,5421087,-385628285,681695119,1843307374,-387465240,1656447323,1670834231,602418037,922702076,922709486,-13734298,110035287,110063206,190475758,-1844742958,-1840442648,-397617688,28527854,868234179,51758043,1396676178,1163149206,937958997,1278755374,423573691,963193401,1295717407,1714240659,933449533,1446878257,-1773054651,1066812223,1430230569,-1776795754,1066817599,-398515881,1053057153,-29659578,-2094649742,779419709,-401735898,330326932,107179240,-10819497,243792,-1328199192,-544495092,638017368,1407720841,1282206028,-385855304,1371068121,-690755328,1428627128,-327029621]},{"sector":8,"length":512,"data":[1720189058,1664346367,-8485177,501743616,-27358977,-8479091,-1605640984,1178234426,1007252735,-400788204,-487890124,-8479091,-397678872,1021901618,1276962892,-1956438040,-1195155995,2122317909,57999614,-385846856,-1957308807,451707884,-949812248,59462,15091399,-327250688,-1207420184,-890765244,-21305246,-1326823799,1652942886,-1377302923,-398030338,49446528,1183518325,-159481622,-1959496448,803989574,-386906485,1183533982,1268312298,15236739,-340785036,-387555699,1586318330,1277880568,-387430773,1586318206,1277094118,-1957981720,1438866917,-326898549,1653270550,15353543,-327250688,-1207449880,1458044964,-28907422,49446528,2122321781,74776822,770424883,16271047,1262282752,1586359216,1269098730,1347112424,-387293555,1183534032,1260710128,1260447832,-386376051,870861760,1575324491,-326412861,-1206457213,-957855681,-364475906,-387154291,2122319719,477430514,-2132130165,1962997374,-129579224,-340787200,-386376051,-68662446,-263812790,-386376051,1183533948,1255205098,-386906485,-471315766,1575324490,-326412861,-394335101,1187471836,-1929379710,-1125585794,639484946,1913405312,155579916,-167349245,1948256581,6404102,-1193990935,-1897398250,-662794911,-1157559832,501758728,-1207536543,183042106,-2040624683,-1922983960,-269958018,-562135040,-2147060478,1946339966,-662794978,-1337304856,1185212416,-2142606616,1946339966,-998339318,-969100056,-1207957435,1055391780,-47257503]}]],[[{"sector":1,"length":512,"data":[-1920711031,1988997246,10873048,-1920434547,-1662466954,-1333883648,-1953991027,-1976662434,-1545076409,-1669427968,-387156339,2123169923,-998863480,-1929348376,1988992126,-401887096,2123169926,-663319160,-1929353496,1989012606,1081206920,45514368,2122321781,74711226,1240186931,12207815,-934900992,-1958097432,-941040570,-1270445239,-1958100504,-1142362042,-1913933751,602440286,-1503752886,-397782040,1586298965,1246423170,-393984373,1183533470,1234757792,-390439283,-1410840008,1575324489,702915,-1510799586,-1007661687,-1929005080,-1796674442,433056024,-2144216856,1946289789,1231284245,-1928772214,-806876579,207457609,-381026328,-1916581525,1988881534,122025606,-1308003064,1955213054,1212868866,771752376,-402434934,1166231475,-1070398966,72649262,-2092456216,-1023276435,205915394,621805568,405276685,-2115204267,-402607380,-1070374864,-1979824503,1183448134,1317439994,-495022593,640703464,638351243,638476171,1988691854,-129594122,134694390,1290273652,1222109209,602407088,1223747653,-11624819,-1337423640,1606936633,-402615576,-1634907938,1994981198,-72685496,-11624819,-1337430808,1601300500,1048583797,1948741178,977174551,276047470,1586359216,1225058554,-386113907,-991213260,1290282672,-1339001505,-94466581,-1924600344,501808222,1217456201,-11624819,-397924120,-1634862244,518586190,977174600,125052782,1458050224,-1326912673,1599072295,-11624819,-1924651288,1183578718,1221257468,-386244979]},{"sector":2,"length":512,"data":[1407731936,1575324488,-144906045,-397908248,1957822542,-387442768,-1340508834,-159468932,1946347846,-1301106684,1586319990,1216145660,1509961192,-924314960,-1978632866,-27357758,-1924634136,-1712784290,-1966806200,-1929300798,1474886750,-27357880,-1337423896,1591470355,-389120371,1580925977,-1943243274,-129614912,1183458677,124095209,989189864,494266694,192152744,31997360,172329800,-1337455383,174426684,-1203239703,787021898,7387346,1439836393,-326898549,1588783190,-1989283679,1187511878,-1929379670,-1930892674,639484943,1946304384,1065362956,-1207536637,-85393333,250381265,-257821557,205818221,1844459145,-1945609079,1166674500,1946396681,1965074462,17090074,-1962851192,1149831749,205884162,-1962654583,1149832773,-1203705082,15204356,33867332,302073030,855786633,71600576,-402242423,-1159182575,-1984278465,38046526,1480963048,168201402,38046704,-402652667,333989284,-1436644025,-1337545496,1571940370,1659437941,-400248577,-773300767,-1436643847,-1958308632,-257687994,-1436643987,-398021912,-443857178,-437730467,-512038819,-1336207640,1572333647,-1956990744,997083670,-1206422826,-1880621048,146298831,-1031033877,109533355,-374631104,1354254002,-786437888,-10637336,-395418058,753401866,1711705857,1184426350,-2081649835,922683628,113667686,-1340510660,1567090701,686295472,1946267741,-401952757,11558175,-5242252,-386316664,1048599207,1968336442,1178518598,100017774,638415888]},{"sector":3,"length":512,"data":[637754763,637631883,-303364210,-1476031962,-2145618686,1946220926,67314716,-112818174,54889254,-1929623927,-242292542,654202505,-352238197,6928440,-2133815063,1399732798,1053053813,-2094633402,1946161021,100017736,-398297984,-1960384746,-1960439971,-1910107779,1065362949,637957129,-150845557,-96040488,16350848,1187382397,-504888839,1550903388,393527306,-213260208,83460185,-654900619,-335919615,-214308858,-1963309431,-12781242,11537781,16481920,28312180,-1963374968,46235848,41026108,-315488335,1592312203,-109670962,431006963,1968977640,-16455421,1849427654,-401690618,-1000383391,728655374,1575324623,-338754621,-1977200317,1946172421,1946238001,-1879000799,57934396,651165881,637885835,-1960441973,-1960443043,786956629,130515782,-1960438293,2129133893,63406917,-1977218581,1642594629,1497843525,-1183450821,-326412861,-399840125,918838308,-424645050,-2013003226,263257670,-1923354392,1575545470,358541356,-488107856,-401166245,2123193309,743106774,33441526,1172833652,-402396395,1988957486,108822762,-2145815294,1962937212,1152641043,-1572688,-28931520,-401972086,199968009,-1975472920,135069254,-398136344,-443857738,-1957313699,686588908,-387154291,499387604,1007127078,1011577856,1011315716,1011053573,-2145815290,1946551933,2139301390,208994308,1849310848,-402295786,535498854,1458050736,-662794917,-387156339,1988952094,899475692,-401382680,-142142307,-1959082264]},{"sector":4,"length":512,"data":[-443874235,733528925,-826283776,-2144985916,259262015,-1377241209,1962379065,5695503,-398885655,45681915,155379969,4646998,1065363038,-2143390455,1963067005,-1239512264,640992367,973227147,640316679,-1996400758,38112309,1124554120,-951760408,1093,411078,542150,-2079767098,-1995811447,1166609501,1592312590,899934208,-2134696508,-2140265970,-2147462936,2137924134,-2144985660,275909695,242715430,207588134,-1996190170,38112285,3139779,-2144985660,561319231,33979776,-1494738316,1132193845,873022858,207457537,-1924930072,367528541,1132587332,2668739,-389155607,-1682243361,1509353537,2045258357,1200238170,351044353,1464923275,-991363445,1610058496,732424280,-1022049149,-385865288,448318917,-843060992,-253218640,-2081655463,-192211732,-385971369,-823656293,1610058552,-2144985916,-730527937,72321830,106924838,-1962439130,1200301785,1602954764,394995214,992353732,-1166734265,241142566,1964456742,949479601,-399194904,2105545538,561316358,33979520,1569397621,-754732790,173802475,1300891530,132218890,19196114,-348913944,1038084130,-152504441,993847350,-1746339961,6338626,-398233880,1170621107,1974472456,-2093773592,113448132,134874882,168560907,202246925,3336207,-398338885,527784212,777623528,-2097068150,-192211732,-24422576,-1962928152,-396861449,-998036795,-1009128684,197124,138019076,954730830,1107933952,1968758760,1499654175,21465646]},{"sector":5,"length":512,"data":[-1961563005,-1957211916,1960190,1482684299,-2094362392,-638905148,84019139,588252674,470037763,1107640583,1535502342,-1151965464,-1578614137,777287000,-1006544897,1065362973,-166431482,1080959494,-2094647179,1946158207,233891852,-401637400,-546043111,108888259,640578822,552945654,-672651404,1103620109,-389019208,-655867355,138790465,-378163185,45691569,115795968,-1205240343,988348458,9418956,315372777,1119834627,1397039618,1398097333,1173228897,71639632,-83671557,1187133253,1363619382,1245923146,1196042567,1447557903,1276666195,1257068617,-397697193,-1981281957,1177994328,1552623214,1955276293,76424711,1166810505,1200236034,121997313,411078,542150,1850095300,-1476097498,638415888,637754507,637629579,-320141426,192153768,637593320,16860299,-154990011,1080959494,-1960419467,1435042132,1006838794,1009546240,1008890881,-1340771326,1418405382,1050077187,-389640520,1170620753,501942281,55872294,-352253208,155567636,-972756159,637602117,-1996274549,1166806085,83240462,-1173392380,-689424188,155567679,172345128,-857145344,146008128,52742282,326369340,175374652,779354684,22856742,280707819,-1157371136,-1960443886,-1960443580,52822900,478881335,1962933123,-1579678914,100888080,-1064407550,-1960437013,1364197700,57969446,56396326,1888288951,15984644,-670869415,1946468854,532948483,1166655539,155551748,-1945477751,-1195176891,-823590773,570881738]},{"sector":6,"length":512,"data":[1165312110,1850482315,175495947,863945913,6285522,1170614251,1200226310,155551745,-1996339317,1200294469,205883652,-1996077173,1065356869,-1173392383,317208772,155567679,172345128,149487616,133163072,-1075292666,8120320,106939430,-1945477751,123604037,155567811,1456914,-1023314578,571033030,108956601,1745260118,-29979794,83240557,640972048,1946375227,-1194459602,786988683,1955276288,1552557571,-1929332989,917505136,641722344,1963984118,1413162510,-1207405565,183008651,-1948587264,256193,-389871778,78659545,17102374,112198260,641711081,637623435,794115,639601446,925187,105351974,403047206,-1094546432,244027646,384003610,225772603,1963086907,106728200,1847068302,147227587,-1950815518,-910432000,1852311182,1845507723,-1977216021,-13499556,637825165,1963984118,1955276296,1979058947,1048626153,1946316346,1177994312,478881390,41192230,-1996190170,-1938957794,644733958,918816650,-964465082,1946762244,1963408393,2144549,-1977219349,1106063884,1088995723,-1239512737,-74754193,119473694,520529139,1874247263,-2091448546,102632135,96012063,111538944,516185887,495545818,-956152436,1093,33965510,542150,21465638,205488166,1166739826,206932746,-1997776664,-1712781499,107341909,280007,138790400,1177994240,83240558,-402426864,11599391,-1995716989,38112309,101074374,-1593358968,1166634574,1850777872,-384678519,229660000]},{"sector":7,"length":512,"data":[-397068056,246479569,-397070103,-397388574,1012464663,-1023314940,-1003236120,126494237,1349848124,33979776,95436148,-402168438,334031903,1040181304,1273495728,-654854086,134694390,-138929292,1045424336,-388827208,95960649,1044637697,-394067784,-759677379,1043851264,859695849,735196096,1427835461,738912524,645204540,33979776,-420997772,833153072,-398610200,901265203,1040967904,-2093105431,1946161789,326467588,188531584,116861557,8416734,-1964452747,-402608067,146290514,1038346432,-402426696,-2135409187,1037560054,-1041727312,1032186173,-385865288,-1981233159,-78518188,-1003285272,1065362973,638350349,1946959744,2734114,-2134385431,1946289789,795338769,17397120,-2029369973,1166609477,1971569418,-2134703862,1946289789,1025763366,1877475504,-789137351,67585526,-138932364,122025680,-402230264,-138920595,1030219986,-146990359,1442253397,501793548,105236052,-1983892734,1170605125,1166544135,172329224,-385071735,-396942162,-544481295,1065363039,-1341688573,1402333201,1392927092,-957870672,-117512109,-1092088144,126494291,39291686,495519579,-2147334772,1962935933,155579928,185759104,637957330,1963087675,1200236040,121997313,1930181827,1963473924,1065362968,637956876,1963474816,1200236044,719867905,2145998898,4044854,-389612311,1170670683,-973078524,-1207957435,-1766191103,977174528,510984558,-1957211568,1379985651,-141834102,1968724575,1408860173,-2077882251]},{"sector":8,"length":512,"data":[-385649628,-1031012902,1439088873,-327029621,1239941324,-1070377133,-1979955575,-2037776826,2123235124,-1190715724,-1410138096,-790097744,-1592887982,1187475000,-1996458244,-1846935994,-394359552,-1342123800,1387653143,2123182453,12839124,49184384,2122321525,141886170,-1947056501,585883222,-387416435,-1557559,-729903818,-398737176,-1464322314,-2143819008,1963126398,-230257883,-802434933,-259312270,-288160847,-511653750,-771641337,-1270740768,-696008496,-176600576,2123176427,998762728,-1204371992,1357381796,1000138812,-13328755,-1338297112,1379526674,1961427829,-401559297,548950633,-389510400,1988975575,519801780,1604645639,-1979943228,38112309,280007,105235968,138790402,173902080,-13320573,-401574912,786968399,882806075,990505215,-1959051544,-389849627,-756538748,-58817744,-1005161216,1200301597,1602954764,529212942,-1996484603,1586101318,639485182,638338955,638476171,268771211,-62506240,1580927093,-385649154,448269130,-982521600,-402469144,-1125625348,178435,-385874968,2105549466,359925254,-2144985660,225773119,1962998144,172327684,-404110590,570881536,-160087954,101088640,-1628934284,139296826,16351233,1173764468,611651593,537478646,-1196422539,-398796824,451623417,17384950,2105740917,141885450,-386365000,116079313,-402616902,-109037187,-2145487614,-1207695283,1173805196,208994569,-155153224,1963460933,-796084221,-1494687486,978970682,17188294,218580422]}]],[[{"sector":1,"length":512,"data":[607686,641057987,-1460321142,-1470401278,-167349232,1946224453,1961691729,1964288015,1946265673,2088969797,1047855352,17319366,1946220928,-390549474,-1940833712,1552623296,268483062,-152513997,-109029062,-2136574718,-1341913011,-390004040,-1064551888,-161707226,857735353,987228370,-1883730965,-1000609536,101088640,1166739572,206932746,-1159174933,-164248575,1963001669,1552623146,1960512508,1955276322,1149970168,175490064,-1960382461,1846583604,1845626371,-1960394610,1351296512,640674562,49628406,-1960428171,52885108,637537334,637682827,52835467,637537846,-92072821,52458751,269913026,369305198,-109051862,-1845398272,33965510,218580422,-1995815543,-1195176875,-823590773,-326412861,-399971197,1441268007,1177994320,478881390,41192230,-1996190170,38112285,21465638,1460094344,317198256,-327250608,-400523288,2112368317,-401362935,2123190273,544139480,-399594264,279972204,-162533144,1080959494,2123186293,954198252,736624816,-397365195,2123184424,953149656,468191152,-402149323,-396412648,1183463643,-532280588,1166544676,155567624,-1983892696,1166608965,239438092,861869547,71666112,-1962326648,1166664262,-163149046,-972274295,-1962932667,1438866917,-326898549,6809602,-1001413656,-1334950346,67249892,-1325513080,1332733967,-400564248,279972064,-2142280472,1963067005,172329745,175498250,1183506570,951052542,1189613803,-402477000,1183462546,-402125570,1357396108]},{"sector":2,"length":512,"data":[122013240,-28903934,-972786687,-972683451,-2147416507,-973010867,-1962931899,-154968603,-1066524154,-1195179659,-1628897147,570881730,24477806,8763587,-2084400919,7213118,-1195179660,-2098659189,16312514,101088640,116790901,1967156770,639484967,294787,-538437516,91154435,1946224872,108888287,-166890240,1971325253,-1883716857,-1035212544,-385844552,1048625733,1968401978,1177994340,2088969838,1500774415,-2147158490,-1108847756,1242991438,-138811282,-1075251321,-1980266536,-1960441275,-1960439972,-1910107788,-1944221436,-1977220539,1166541127,105235975,138790400,1200301568,651753218,1963540352,952416780,-969511704,858261829,172329408,-348691736,5302275,101088640,499388277,75465510,-401116160,-840432834,6809604,2105599604,125108230,-2146875914,-1195179659,-1427570566,2156737,-2144985660,292816447,1946174696,108888307,-167283456,1971325253,2058928897,-1048057600,-1152692504,-1981264567,772044109,-1207867393,1927872532,1375930561,-1252834625,1196052805,692537923,1398097738,1257068641,-1605809128,255618618,289148788,356255092,-373095308,602472911,-326413054,-1004606333,1065362973,637957121,1963540352,108888076,-167348992,1954548037,7976966,-389997335,499404204,138906406,174033702,-1962439130,1200301784,-398030588,-1931321719,-1923619770,-1578570626,739764466,-387811699,113640827,-402362814,113641137,-1962906046,499408887,71797542,106924838,-1962439130,-1944221224]},{"sector":3,"length":512,"data":[-1977220539,1166541127,1200301575,-431585022,33979520,1149964149,-398054646,31876855,-1578563003,-398030080,702965495,1183517253,11790566,-152416632,1965033797,2093550112,-386431204,128988657,-2026750488,-364475657,1329577558,1577102056,-348791576,-386431142,11548117,-2026757656,-364475657,175947786,1329184342,1577093864,1300239851,-1162869752,-1959393304,317253190,-487081930,-1976169240,-142145467,-2026823192,899410167,-142147408,-2026812440,-125060873,537478646,62391156,157551352,-399121176,1149908375,135209992,1300236357,902045705,20742182,-2144991628,175442236,686297776,-385649332,280035028,-1957930776,197352933,-1324124992,408848,-919400844,1944637761,-1073001989,-5176716,1913666755,76230170,775262440,-402504565,-1959905911,897837060,71600942,1010138345,-2146208254,-1979578291,-391008032,-1959905939,-385741820,20723045,108269170,-402355410,-1959905959,894691588,-1948200509,-775552016,66554855,641058046,1946303616,1015031302,-398625533,1048595448,1963028026,-1075292359,1610058570,1379676277,-1960435339,1157693764,1552623114,1955276293,76424711,1166810505,1200236034,121997313,-1337211927,-163518208,-385844808,750305061,-1088427776,-2144985660,108267583,-385844808,1894301457,1268705532,108497702,73370406,-1996190170,38112285,21465638,-402176632,-1070399485,570881731,1232420974,-2144055064,1962935933,952416776,-348955416,108888082,-1206749951,-1696020599]},{"sector":4,"length":512,"data":[-1030834124,859084008,-349654336,-1962495981,-974648235,-963725263,-1959493400,145885765,411078,-1995876984,619252293,108888116,-1005816830,-1004139939,173902111,-972274292,-1023408571,425344,1173769332,1484062983,-2094654012,1946221695,178255,-1006515480,14084149,604587402,863234063,-59441370,-126579930,272927526,-398619718,116863592,159198,616040052,880666626,503298648,-382577688,45626299,26077184,-1171023640,-1427629825,866773298,2662694,-1962837272,641058014,83182838,-165276555,1946350916,1284187667,-74754058,1609439976,1924688363,-1107826432,-180029914,-402295792,468385884,-128677082,326423051,1845499451,1437599605,-348940312,1996470534,653490408,32851190,-1064557964,1852311099,-1699736204,-1942783000,1552623296,805353974,115921459,-1340544204,862382094,1642653872,650153011,-1175036789,-768409600,-382465816,-165268713,1948316996,122025504,103445761,1038661808,274580531,-1960394612,12127839,-388877360,-351849503,1156982294,343163125,-151015240,1963198277,-1070483453,-1338825496,856614992,17253878,1173757813,225772039,-399332120,101460821,115955636,-1070483405,-1204616984,-85372848,-397015502,678753130,56396582,-1961867893,1223168597,1578726692,2126821639,-1293364685,155567858,172345128,112721920,852224343,-385839176,499432693,108497702,73370406,-1996190170,38112285,252200390,205488166,-2144990093,108267583,188710950,-1977216907]},{"sector":5,"length":512,"data":[1170604359,1166541062,155567623,-2144943360,158665279,84297158,34031046,16824515,-399566616,686371345,-326413006,10153089,-1960430140,-964491188,-147004662,7200262,855799048,-96040512,-10058041,229638144,1464396008,-402237871,1577517089,96895833,-1341688759,1221847058,-1335891221,1221322766,-10051955,-1959681304,650337765,637813898,637688971,-1910098805,-59340537,-1912715636,78177918,1988977013,-311367428,-386107763,-1259855122,32499712,-1977213500,1930181639,1946696733,1946565657,1946631189,1946762262,1946827807,1946893352,701556777,-1763152779,-395646164,1860707757,-396397568,1525359991,-400166168,1383333985,-349825560,708765773,-353874965,-398005462,1589967183,126494460,913571900,292817212,594871100,-1030962293,-387441212,-349998046,-569968880,1962938477,639484942,1946763136,1751057,1002151145,-1930005219,38091712,-1880559755,71666473,-10051955,-147803927,195142,2105543284,74712326,67716598,639485123,482609034,1963407910,853051918,786682367,1399429119,-1195179659,1391001626,-1940681541,-1940681645,-1940681645,-732718765,-1990974381,-1991014061,-1991014061,1783859539,-1010814124,70976907,1166739061,38025986,509040323,885341636,-1491503705,401086069,-1391364864,-1861388881,199756515,-1509591808,-152960395,-1017225441,-1391430233,1193118502,1958742855,529212934,-1022936173,-2094654012,1946158207,1334519356,1602954756,126756358,-1960388213,-1960440761]},{"sector":6,"length":512,"data":[-1960440225,639419415,294787,-1960437132,-1960442801,-1910110625,651791111,1963738939,1602954759,389752334,-1996190781,38046469,-1023261303,70976907,1166739829,38025986,-993853067,1200301596,1602954756,126756358,-2094606197,1946157695,639484960,637814667,637951883,-661977202,41911078,-1962248960,-1962571516,1166606916,499434242,206015270,241142566,-1005090010,1195058716,638022924,638476171,-993847493,1065362972,-1021086964,-1912555845,-345098234,13024025,1849165454,-692383509,939953664,-1157108882,109969638,2105568824,880083462,-1962261109,992349269,142542423,992354428,443679815,173488934,310315132,138885926,-1977217929,101318983,1166569026,1287176967,-1177556736,1843267319,1182007298,-14265594,-14284169,-14284681,-14285193,-594869129,-402650952,1397764230,-401756078,250095906,-402608081,-1078973606,1513052136,12146779,805562448,-402600776,216543175,147096367,-1977219237,101318983,-202805694,1174857768,1850089156,-2128639194,775946211,1432323979,1571290926,5724245,-329376512,-396485376,140473344,73364481,5756161,-1873232384,-1806123520,5825792,5847296,5979136,677110272,744219137,6078721,6092032,6110720,6120960,206961920,5648384,5779968,5800192,6065408,5682944,5703168,5721856,5867520,5910784,5952256,-1738860544,-1671751679,-1604642815,-1537451519,-1470342655,5659137,676747776,1281203464,1348312321]},{"sector":7,"length":512,"data":[5995521,139853056,5651200,-326413056,1343548547,1964405736,-327250666,-401240088,1961426576,772794390,1541931184,-1207506134,1726529585,-790079442,773646382,-1017256565,-189011024,778365037,-1909584407,-1955698682,644742718,1948255734,-1142181877,1273523702,771025198,-385836360,-1957316511,686588908,371255376,-387154291,499447247,205488166,2123186034,369617112,1170675060,-973078524,-956168635,68165,804295,-402003200,1183454476,664856819,1511386856,-1913880947,652793974,-386430168,1166802397,1575324420,6863043,1438123241,-326898549,365226044,-387154291,-974646200,-662794987,-401289240,-2098659888,364308520,-389775731,-1343744848,678684925,-1961516312,1072230470,-599356627,-1959970328,870893638,24164397,-399639832,-443863738,-1957313699,1022133228,-1927973400,-102175618,360114195,-388465011,1843926000,-998339307,-401311768,719912312,358213672,-386906485,1183526134,753985756,-389527925,-2135413526,766633985,-1959985688,-1195155995,-1528299248,753985837,-2081649835,602417388,-327250667,-1928073752,317249662,354019328,2123233163,591259884,-1962654325,113466853,2005608019,1602954758,76424708,54493222,313531765,1967348456,-1983892714,1166541893,537049096,-402614086,-2014777305,638643192,-402503797,-2001196634,759031808,-1892908312,38113029,17188294,218580422,252200390,607686,-326412861,-399971197,2123175078,327346412,108497702,73370406,637832742]},{"sector":8,"length":512,"data":[1963147136,-401428452,360006391,-857189626,-1207477257,-1715847164,-272242688,-336058904,2013210135,739239938,1478968808,-1205256728,-722993012,739895340,-1961599256,-443874235,-1957313699,686588908,-1928050200,334031998,340453395,-388465011,1441272660,339339516,-399780632,-2001197302,748546048,-970202392,-973011387,-972224699,-972093371,-402650811,-141880442,-387154291,1166746171,1575324420,-326412861,-399971197,2123174906,316074220,-1928070168,99145854,-66656237,-1928074520,-2098664322,649652267,-388465011,-1343739015,9222182,-399752472,-443864178,-1957313699,351044588,331147344,-387154291,-337112442,330688547,-386906485,-396874926,1743268891,1575324459,-326412861,-398660477,2123174806,316008684,-1928095768,820566142,328132626,-389775731,-1863839080,642509051,-1961657624,401141830,-599356629,-1003810328,-1960388514,-397934009,1183524918,721479880,-402632520,333982663,1575324459,-326412861,-398660477,2123174722,300280044,-1928117272,1307105406,-79304686,-400162584,2123174708,306112708,-386189592,552084977,-263812333,-1960133144,-1209476026,-934900950,-1205161496,2028470356,717547563,-1017256565,-2081649835,-202878740,-327250670,638719976,205260682,116867700,8416734,-1360519820,510715933,-1193771379,-2031615977,-998339321,-385876040,-1934096515,-399250559,115875258,-662794972,-402648648,2123171689,-18236,-1207475992,384500196,-386217752,2123179377,-390057000,1187448653]}]],[[{"sector":1,"length":512,"data":[-1207959352,-397409916,2123174548,288221360,-1961720088,602468422,-599356630,-1960174104,401131590,-1270445270,-1003875864,-1960398754,-397934009,-396875978,468200143,1575324458,-326412861,-398660477,2123174474,294250732,-1928180760,-253175682,300869873,1006733498,-1173064692,171737488,-390460044,1946893313,6797318,1353995497,304277586,-389775731,350752971,-327250670,-1960203032,-1410807738,1961383977,700049450,1946958936,1946893342,105235981,122013189,292743170,1170611435,1170604294,1894253575,-972035311,-973011387,-972224699,-402650811,1170608490,1988955912,448587992,-2013675288,535423223,-1962654325,1438866917,-326898549,296282152,-387154291,-1410854724,611313913,-1928223768,1021892734,295036944,-386906485,1183525170,690809052,651714244,1208108939,-1205448216,-387448428,691333161,-1017256565,-2081649835,-397404948,2123174242,279046380,-401514776,-396875527,921184711,688973841,-1017256565,-2081649835,1072179436,-327250671,-401617688,2123174208,276162776,-1961807128,-806817722,-599356632,-1205286424,1589903652,1065363180,-1207733244,-2065170156,684779561,-1017256565,-2081649835,-1557268,-327250672,638553320,1963278208,284878923,-388465011,2123173748,283109572,-102233227,-117774321,-349983512,1200301578,631826434,-399996184,1183518927,678226160,-388217205,1183524966,677439688,-402543432,-1763170009,678488080,-1017256565,-385859656,-1957317927,686588908,278456400,-387154291]},{"sector":2,"length":512,"data":[2123173669,71682008,-2144993280,829687103,75465510,-401378048,-2135420811,-400788224,-1914171508,591390968,-1960437781,-1960442809,-1910110625,651725575,-402503797,283649326,274065448,-386906485,1183524850,669837532,-329333672,71270438,-268106892,682223871,-401598232,-443865102,-1957313699,351044588,270592080,-387154291,-2144989523,393545023,-1961879832,-1276579770,2095601703,267118632,-1960327704,-1195155995,787021887,-326412878,-401281917,2123173870,243001580,71270438,-454551179,-263812337,-1205370392,1223164268,263710760,-1960341016,-1195155995,-85393345,-326412879,-401281917,2123173818,239593708,-1961904408,1407774790,19970087,653024964,1946435456,18921475,-400027928,1474826109,1575324455,-326412861,-399971197,2123173766,236185836,71270438,-2115490187,-662794993,-401699864,1055455125,258861090,-386906485,1183524618,654633180,-402565960,988293067,655681551,-1017256565,-385859656,-1957318275,351044588,-1928380952,-890704770,255453197,-386906485,884483798,664659969,-401666840,-443865370,-1957313699,686588908,-1928391192,-1561793410,253159437,-388465011,149425739,-263812337,-1960401432,-1612129210,20494374,-400070936,-1343746347,1575324454,-326412861,1347480707,-1928405528,1793649790,1065362957,644117764,294787,-773300875,-662794994,-401781784,2123173576,231925956,-386477080,2123178373,245885104,834146676,648800448,-397389640,1491609253,-402396378,-1729622705]},{"sector":3,"length":512,"data":[-263812338,-1960430104,803789894,-934900954,-1960433176,602453062,-320317402,240904230,-1960430104,-1195155995,-1628897217,-326412880,12643457,-939637111,64582,-12548409,1172832256,-385649650,2123170074,-500766488,-2144985660,108266559,88047654,1810376309,71666462,-2144985660,108266559,-369342839,1317732583,15776510,-385729560,2123170050,-504174360,-954525464,50246,-1977213500,1963539463,440264724,-1927400984,-1070345090,-1207785240,-1880555304,1946827776,1963670532,-569968830,1946189933,413919261,-1927713304,397988990,42199040,-1195344243,2062090239,-2133542910,-1209507093,520349720,-1194033523,1726480401,-1065448190,-385876040,-591920547,1011215105,-401378036,1793652161,-729903840,1189658675,14465026,222047979,1458049141,-729903840,854114355,14727170,238820075,1122504821,-729903840,518570035,14989314,1085802219,-1349261056,-330921136,-1960509976,-135735226,-1002009820,1478816232,-400180504,-1634917114,-1628897472,221505572,501810037,221636863,-1157871989,-236453632,1084132620,614852863,-385988981,-18340465,618194956,-1017256565,-2115204267,-1996444436,1187511878,-956301060,16733318,216983552,-169278604,-394359552,-991124760,1065362973,637957124,1963278208,487909414,-1006353013,1065362973,-1996065788,-1024852922,-28407040,-402584390,-571932444,-394359552,-387158296,154930284,-404218763,609216540,-1960436284,-397934009,-122150534,621930496,-383492632,2123169926]},{"sector":4,"length":512,"data":[1963605204,-1643788527,105235968,122013189,-2131445758,188501483,96932213,1170604194,1170604294,-524811257,1010363137,-954895092,-973019643,-973011387,-972224699,-1207957179,535494908,359992892,18220487,17188294,34031046,607686,-352255816,4241414,-391223063,-387439453,1849205027,-972929655,-1928394683,401139830,-199497707,1156118407,71666458,-11231603,-400331544,58002433,-385924375,1183517699,47868,-1928609816,-385919842,1183523699,610134270,-401879832,-443866202,-1957313699,-1662221844,-28931840,-2114169207,1946223865,-386301578,644903936,294787,-1960416908,-1960442809,-1960442273,-129595105,-939893111,16737414,196012032,-387678579,1580927528,-1941277192,-95011902,854082421,-62485725,-400294168,-1634917558,-488046748,192407586,2095634036,-28931317,-1927079448,-385915746,-2085084433,594274500,1441268912,188999715,-1960632856,-1195155995,-2031550401,1751213,1353548009,-1326967888,158685241,-401975320,183104335,537716766,-1004343575,644761118,-1007214709,125140992,1847723766,-148998784,1967128771,570881543,292896878,1073734529,775541736,1636665227,-1951924434,8763489,1068314857,-1946156952,-1946076054,-1946075030,-1946074006,-671004566,-671000470,2130795626,-1895825308,1056964706,-1090518941,-1083958429,795092323,1610612836,1761607780,637534308,2046820453,2046885733,-1728053147,-1721600155,-1721599131,-1721598107,-513637531,822083685,828530535,828528487]},{"sector":5,"length":512,"data":[828531559,828532583,828535655,828533607,1835167591,1835159399,1533170535,1533183848,1096977256,1342177385,-1828716439,-402653079,1577058409,822133866,-681419929,587202663,1157628010,-1224687510,-1040187292,-100663196,-1442840476,2046820455,1811939941,1677721702,1744949376,1812059264,1677847680,1879175297,1946285184,2013395072,-2147353472,-2080243584,2080507008,-1946023808,-1946151736,-1946153256,-1996481840,-1744824096,-1670839808,-395764480,1256720722,639484951,1963736960,108888158,-1337691134,124094981,-389048600,1173756810,494209031,-1339985688,498919424,-390067784,2042110409,566487042,-388433992,1894326717,559147041,-1612185424,2406429,-400418072,1170612575,-2084368632,2030046333,868233997,172305362,-385067749,650317684,1963605888,108888096,-401247230,266867789,555214869,-1206215960,1927864629,556132641,2131977600,-569968701,1962967149,553380062,-1008205648,-427771878,-1339992856,557770879,-400489751,-2144991070,1031081023,1703544240,-823007225,-166009368,1963460421,550234134,401080496,-386418659,-400481048,1300242647,-389872632,11542709,-1206058520,2095579176,549578785,252200390,-569968701,1946189933,331868190,-401307160,350757009,-1070221286,-400495384,985143819,551807177,-400517399,1994920914,-402608096,-659023298,557705217,1344307945,-402124824,-2141317607,1946289789,542632000,-1545076560,122025500,-166038264,1963198277,1149971978,547612673,773871337,-402439030]},{"sector":6,"length":512,"data":[1290346632,1149972000,546301956,105155374,773884136,-402111349,887693441,76164640,1157863832,206902026,17716201,88129790,-763166719,-922812672,77128,-402597245,-1427634263,122013205,108888064,-401181694,11542501,-1206111768,1055451344,535947296,-823561552,174424848,207979265,131066112,-402165784,-1142356089,124774407,-1341686040,432334850,-949077855,-1996417531,-389873083,-504887294,1065363163,-400132850,-1570821,449046767,-1205890840,1558708584,530704416,17188294,34031046,252200390,607686,6994115,-391510807,820512545,-385699833,384309622,119924743,-2146102040,1946289789,-402214881,1170610530,2105541127,74776582,-1022736897,-1205911320,-1628905336,525461791,839599498,-372100124,-555217548,350218246,33979776,112203380,-401003032,11542297,-1206163992,1927857286,522578207,-2046147189,-372100156,-1957360312,351044588,1460098536,-387154291,-1494743448,-278468588,122611807,-402236440,1508381849,121497839,-2131986803,1963067005,108822542,-1962380030,1166608964,-401806580,-655877427,138709534,-972536568,-401799355,-443873662,-397360291,-1863842042,-397321753,15262680,37509127,112199796,-384260632,1609107086,-152007930,1080959494,-1959912331,518252548,-971073816,-973011387,-972683451,-973010875,-385873595,1793590886,71682022,1170604032,1170604550,516161544,53347476,-1960443300,-388877561,1139346576,111208454,-1607295256,1362914874,1128029812]},{"sector":7,"length":512,"data":[691821172,1088968308,639485158,1963147136,2139301458,1265893388,273124134,-167099135,1080959494,250094709,948681246,-1206050584,1726481803,505014302,17188294,101139910,17321344,607686,-286774037,173917413,-1910535386,644748294,199952267,-1058019241,643817355,855787403,72714706,33965510,-402107000,552078344,96004358,-402254360,1048588819,1951493690,-440539089,-1763172924,1200301568,172294416,1847723766,-401705664,1170611605,11535879,-350626328,-443815887,638213572,1441466251,-1064048553,-396370037,116785253,1967156770,-1196403920,1528675304,-1960394612,12127839,-388877360,-1934090655,498591962,-971150616,-973011387,-2146629819,-972748723,-352319163,-448796632,241142566,270402342,126559744,1962934077,337021742,71681902,1170604032,1170604550,1575485448,91613195,637854185,1963147136,2139301384,24379404,9681091,-1196977943,-1964441461,-1343729497,116874756,8416734,-13758092,260302900,-401600280,-622325550,772991772,-402492161,669519810,483125264,-1813512016,-1796712426,484042781,252200390,1944604867,309061636,108888158,-400722686,-1070395575,1649409665,-1925185164,-1729623459,-1962439872,-639106473,76343562,-956326936,-973011387,-972224699,-385873595,1170670714,-973078524,-972945851,-972945595,-956299195,-1036711355,1745634759,239453985,1170725538,-943124720,1073746501,-402376727,729089184,-402407448,-1108867929,393210092,-1206108952,149422452]},{"sector":8,"length":512,"data":[474867741,17188294,101139910,252200390,607686,-150725143,-2140283386,-1206356736,-454557172,472508444,17188294,67585478,252200390,-1207700759,-857177736,470935580,84297158,34031046,252200390,-402403351,-396950462,-544489735,1065363039,-402230008,887746349,2209796,-1767481111,1847723766,773616960,-1863842677,467003420,17188294,218580422,252200390,607686,-402414103,-1959861335,333972084,71681792,1170604032,1170604550,-706215928,59304201,1053105751,1166765586,508922652,259375115,1965049131,1959922449,12747054,722660112,41099333,-1320107981,65590020,254105808,441789184,1160449394,84701976,-360513520,855929601,-976079936,99294333,-947661057,1979648776,-754667017,-2083877950,-494669599,532744975,1426309983,39136006,1023689987,74579984,1107300397,74646827,1241518085,106793923,990010667,-1961266470,220922957,-1048378253,-633648368,141690487,74631227,-745815669,54585539,-402509848,-1595407553,264431874,-2081649835,736629996,40757251,53405783,-387154291,552075875,-1159176445,-263812326,-1206208024,-2132279232,449177627,17188294,84362694,252200390,607686,-1962764824,1438866917,-326898549,48818216,1459759848,-1929188376,-169284482,-353507327,-401233688,2123170524,31910104,-387260696,-924314215,12082946,392423425,-1961206552,1541992518,-599356646,-1206233624,484966456,442624027,252200390,-1017256565,-2081649835,-1813506836]}]],[[{"sector":1,"length":512,"data":[25356290,-401672472,544539269,-327250601,1593951976,-1961221912,535359558,3979290,-400890136,1170610731,-605352184,-1962775832,-389849627,1894252981,355199210,-402587464,-219670791,24950809,-400900376,1170610691,-1092022520,447866881,-971376920,-973011387,-972748987,-972093371,-385873595,116785606,1967156770,-2234360,17319366,-507778877,1846681284,877103910,71681945,1170604032,1170604550,-437780472,26798343,32172112,-1070396812,-402652998,434831796,637565160,1946500992,1211979786,-1205373695,-397409952,1927807447,1088968729,28305434,-971406616,-973011387,-973076667,-972093371,-385873595,1069023581,-1545344768,27846736,637548776,1963212672,27387939,1478049000,-400946456,1290273145,105235993,122013185,138790413,155567631,18671872,-385859656,686334893,296282337,-389866044,-2144927756,108266559,88047654,-1195179659,-1897332659,-2168669,155156518,-1195179659,2129199170,-3217245,205488166,-2094659467,1963065983,1656275713,-1553471232,-991894808,1065362973,-1023314680,-385859144,-35085483,1065363156,-1023314680,-385855816,-303520955,231860436,-1005711128,1065362973,-1023314679,-385858632,-706174163,1065363156,-1023315444,-385865800,-974609635,1065363156,-1023314676,-385866056,-1243045107,639485140,205260682,188483700,171705460,-1195179659,-219611057,-5576542,-385026328,-1343745814,-4790272,-402608407,-1108868954,10873343,-402612760,-1662386236,108888064]},{"sector":2,"length":512,"data":[-2147191552,-1015019187,-949077855,-1996456443,-1581055419,96955960,1166606470,950125314,-1643788434,38111488,1849205187,10618311,-1023261303,-949077855,-1996429819,-1581055419,96955960,1166606590,499434242,1007127078,-150309621,-2140283386,-1342016512,-1072970998,-1078978955,-1592253464,-617386440,-393215815,515381453,405006679,-149437975,23977478,-1207536640,-2132213560,229688088,-1339133207,778955026,-1561784912,-384913362,313536157,-1574004503,1189647682,217311245,1055455111,216786957,499447687,-1006138842,121251356,646581877,205362498,1024422928,1081409550,-2029221144,210102519,2105603975,410321414,33979520,-286780811,175892489,-420939897,175368201,418117511,1843267319,-428539776,-401988120,-142144886,-401990168,-142144894,-991541528,260711965,-754974280,1109297888,-771804523,-2021314845,460614973,-13444726,-472783919,33979776,2088765557,41222662,-13745341,-1200791641,2129199145,-2141290335,1867804,1048592,1048592,3145776,-2130739152,16646399,-2130804482,1835262,0,0,0,0,0,0,-1627389952,1399724653,2138167665,1148123758,695209839,1399859568,-512632463,1399970160,1399970161,-2140022415,177553982,-1662515853,-402396406,-142144827,-2029338392,1111392503,41226133,-253167737,374925326,-1790833014,1963981184,-1191737598,-109051732,-1204259840,-109051728,-1204784127,-109051724,-1205308414,-109051720,-2146929654]},{"sector":3,"length":512,"data":[57936889,-402604872,1156060927,138790422,-2139836401,194331198,1974469237,-402189079,753407719,138790422,1465303823,-1962249077,119409277,-1610608455,3970370,20723316,37501556,171720820,188486772,255594612,-142146955,-1358623827,-119404939,-1477246229,41222320,1048576432,1963693378,1593914370,118352222,-1425732691,283900642,600897453,-119362811,598542059,-85808379,-2134679969,9781822,1692933749,-386431222,-142144969,-401727768,1018697094,375252992,-971660568,-1022425019,33979520,1552615541,4161546,2105545076,527761926,-2146804341,393543743,-402247192,-1070396852,-1996012408,1149831748,73066508,-401249559,-142145045,-2029394200,231598327,-1206569496,216531012,357689366,252200390,-378193477,1448543778,-1962246773,119409268,-1790820736,-2029358080,895478007,820600670,-1979348474,1929642704,855617538,-398438172,1398289787,-1947389354,-1426355209,-213464438,-930455900,-213464534,1600019364,-1022730871,-2029490456,141158647,1117845383,1009825429,-1240173552,1930050584,1006679566,-1240960000,1946237984,-2146912766,1946486397,108822549,-166956027,1963067205,121959945,-402426878,1156972667,527696391,1375761128,-2029483544,142928119,-2028699160,235792631,-1043562408,-488097104,1377102612,-402100760,-1302719382,122948312,1307113351,-1594390765,272405826,171717236,45624946,288483328,1054718544,-401410072,1079512525,-400127302,-1632627980,-401304600,28316759,134759434]},{"sector":4,"length":512,"data":[968558661,86305141,134759562,1089013829,-269987308,-956933628,-2147257312,-1916598026,1284311645,-1790795766,175245884,108269628,-382226456,1760101663,-569968841,1946189933,119793677,518584199,-369654009,1117847302,1947221141,1930050587,1946172424,1963080708,142376975,-2146864128,1962936445,76867587,556160,-1092086155,-402608109,-142144122,-1340885784,226289665,736884615,-1494681721,-402608109,-142144146,-397192520,1353716733,-401348632,11539345,-1207084568,-639106983,1600043027,-1609308952,272405826,171709300,-927461518,339863553,-1156348184,1542026553,28883460,292814908,1006746810,-1173720063,37487040,-994442380,-389903615,1625887771,-569968877,1962950765,1111392352,125044885,-1790820736,-397249273,-142146219,-2029694744,321120503,-1928772214,1301088861,1111392268,74713237,-645463756,-1961655832,330492121,48822151,-386431213,1149899543,138741768,-1962254963,2112358980,207457555,-401849205,1149899636,155551753,79947971,-1092028537,-1963489532,1686767429,-1058674681,-1790820736,-1475841273,604271876,1342442497,-2029205016,-1008183049,-386431220,1048576826,1913296194,122025488,-402295544,1139474852,-352171288,122025534,-1341492216,245819397,-344751685,-2147110888,60113470,1048578420,1946457410,-402542590,2075856524,-1790795662,-523115470,-670834479,39291694,-13699193,-386431209,1149899375,138741768,1111392451,460458645,-1962261109,1143671893,206838538,-2147433855]},{"sector":5,"length":512,"data":[-2147419519,-1073020299,-402437399,1860894723,1109297808,-771804523,-1208013085,1166766619,206932746,-1962259317,801311836,963785842,1064451186,1399998322,1685217138,57829746,-1009577023,-753155797,875162051,-399227415,-1047841726,-2084318325,108273633,-757997359,-2084308254,108273633,-657331503,600046306,-1009572927,-754204405,868299715,1166656467,206932234,-2000711448,-1547499707,-1556086670,-1220007822,-668403854,154728306,288946035,299946355,-1259810445,-1275060110,-1275066254,-2147471246,1963067005,175997707,-1979353855,298248646,-2146470423,1963067005,172329774,661962763,-784217805,1241215976,460701707,-1173729911,971759825,34031094,834144372,296216786,-1716517397,-2146332696,1963067005,28332551,1510834664,34031094,-427818124,272361719,67652992,-3348285,1776915120,108888081,-2096401150,1963002493,-373126395,-1336798871,223406081,-385741736,2105545053,326434822,33979520,-353890955,172264208,1692940466,-1339299057,217507841,33979520,2088966005,292880394,-155186760,1963198277,-1073170429,-351197976,-1292400887,247261240,1069283207,122025589,-1157401598,-1679198919,7579905,678668560,343130136,410238976,410241536,544456704,477347840,544450816,141797632,812886272,2145931776,178190,1510813928,91551242,-1729505654,246212878,-402542510,-380105550,-202895057,-930498305,-1206863640,-1293297015,-1547685104,1168348483,108822677,-1956219646,1141574212,-1606912756]},{"sector":6,"length":512,"data":[171742530,188482676,2105552245,477429766,-2146425624,-1325987995,225372160,34227587,-402650950,1300237846,1407910152,-1206908696,1726533641,-2142704880,1962935933,267905056,34227587,-1307818869,242083896,-2097134616,-1962800531,951192132,-351379736,-402280414,-142144528,-402652488,951192713,-401738008,-21495776,209447167,-1075300174,-1141405939,-1477937863,-1790729984,-1593162359,1166644549,512410380,-13462206,-1959861295,175412359,1342731456,-392870981,-1973940222,1958742724,-1790592250,-1022364183,7697664,2138864767,2138864767,1016414880,1007973130,1007711232,1007449090,1007186951,1006924808,-2145094391,1946289788,108888094,-2145815550,1946159228,142442514,-2146601984,1947142268,142442502,-1023314929,-1962931527,-1996126460,46629636,-503134589,351241202,-1609240957,272405826,205261172,914359666,-1023306430,747979424,-958976502,-972880315,-2013264059,-1070397115,-1995815543,-152499131,2004186358,1953919858,2105311093,512401278,-13462206,-472783919,1966195585,-6422096,-350849821,-351111918,-351373554,-351636982,-351898874,-1342015998,-963012608,-1996486843,1435044421,-156243700,-1977213756,1946762247,1946827793,1946893328,1946369042,1946696724,-1326857443,19392515,-402541335,-672595598,-1933341951,639485122,1946369920,-1960393941,-1960442809,-1910110625,651725575,1963147136,-993883101,1065362973,639202568,637816715,637951883,-645199986,1962937064,-1994603513,38112285,1065363139]},{"sector":7,"length":512,"data":[991655171,-1945733672,1959410625,1334519313,1602954760,638051082,-645199986,-2134645269,1963132541,235923513,-1928772214,2078804573,207457550,-1206998040,1592262832,49002510,-1928439576,-1712846243,28358670,-401715992,1170607615,1300234502,1170604296,-2134704119,1946355325,231729217,425344,-2135290507,215738424,300466226,-2145850610,1946224253,-1968132084,317196901,139296782,-1073170431,-401733400,1170607547,1170604806,-1070369527,-1995815543,-389870523,11537805,-1207313944,1173749761,158598151,122025536,1073902600,172877888,411078,302597574,-1341504119,168093696,-1005749527,1065362973,-2142735092,1963067005,173903112,-349095704,108888115,-166365952,1963460421,122025495,-1173785596,1173749983,192152071,1005063600,-6821881,-402596934,31984929,221636620,84297158,34031046,-1007355927,-2144985660,913640511,33979776,1569524597,820504586,-349090072,-401756130,-286783742,-402608116,-860354246,230025217,-972227864,-973011387,-972093371,-385611963,-993790781,1065362973,-400526069,11537605,-1207530008,-1930919504,215083021,84297158,34031046,252200390,-1007382551,-2144985660,745867839,33979776,1569523829,820635658,-2081941525,210495488,-394152776,-1662513833,105235980,138790401,122013199,-194647804,108888259,-1923058430,1200294493,2147427592,20784756,1026519612,712459262,134154231,-2126699403,1025012287,326582398,98179,2139295093,125108227,79233200]},{"sector":8,"length":512,"data":[-1341330688,571652,45090283,-2013263175,-397342907,-396873536,1170607498,1170604038,1435075593,207456522,-1022474871,84311424,-1863835020,201320703,-167716422,1946289989,170440194,-773322923,201713674,84297158,34031046,-2134887485,1963067005,173902633,855642297,1125583826,200991299,-1206422062,-957874144,10532872,-401830168,1170607059,-1195176184,2105540640,477430278,2144336,-401973877,1170607374,1170604038,1435075593,207456522,1477330313,425344,499394165,38222630,333979252,2144260,-402096920,499387253,-1207393560,1021837400,193062924,252200390,16824515,33979776,1569398389,839354890,-397393692,1170607290,1170604038,1435075593,207456522,1477330313,16824515,84311424,-397403276,-1075249205,719869955,186902536,-402641736,887622639,138790411,2105590543,779354118,33979776,1569394549,839354890,-388877340,-135661244,184019186,-402169928,149424981,105235979,155567616,172345128,1170604032,-672595449,639485170,1963868032,108888121,-1206422270,1088946178,-1979600853,126421605,-972399223,-385874107,-488050031,16824325,-402149144,1220020905,192276480,-972375320,-384890811,-389811595,561315876,52750416,-402587464,-2031614067,-1209509878,5027847,-401912088,1170606739,1323896584,499434482,20938790,-1960435595,-1960442809,-1910110625,651725575,1963868032,639484941,1023559563,41353471,-154943429,1080959494,-2134703755,1962935933,105236217]}]],[[{"sector":1,"length":512,"data":[639484930,205260682,-1612183182,121997824,1006908905,-385649400,188481682,-1947726731,173903104,-382838808,171766260,2078805877,121997824,-401973875,-504811917,1963539697,173917205,839354918,-930397980,-399875352,1569259619,121422602,-219664267,-1194292474,1290272800,509040170,1975846686,-1963226358,854405838,-1968507968,-1314589750,717892128,531297230,1569283679,20759306,904403061,-1961658881,417874120,1125091370,1258297064,-385196663,-1984368275,-1809848064,-1960436284,1569522255,509040138,1975846686,-201618678,1583292324,639485123,-13492342,-13704239,-210058329,-210046086,-210050182,528151418,528194939,-142886789,528226427,528162683,-998563973,35698717,274172710,209683238,-2028636928,26536183,-1880557689,-1004506111,1095709,39291686,-142126512,-402545944,-142145270,105179224,165537880,-2146884887,1963067004,172264278,1963738123,122025518,-400002044,834144497,156231872,-1461190480,122025478,-2096270328,-1342043579,110749696,34237827,17321344,-402069783,1149962441,112388106,134694390,1166216820,1149960714,111339532,34237827,-2029467927,145221879,-402111350,-142146526,-2029478680,-390057225,-142146484,-402045814,-1528232658,-386431224,216595665,141879297,499447687,-1207588120,1156055132,143255817,33979520,1552619893,4161546,1592267125,13023752,839348456,145156288,-2029491479,-51779337,-402599192,-142145478,-1960436284,-397934009,817366382]},{"sector":2,"length":512,"data":[151382016,-2029499671,-64952073,-2029511192,416922359,34031094,951452276,-402172662,-1830287624,136964353,33979520,115875701,172264200,-2096762904,-1962800571,-437777340,172327685,239373058,-351937560,-386431160,11536357,-2029933080,142442743,-1207208960,921195346,-397365240,-890763232,142442503,-1341426688,135456856,-396731464,11536413,-2096793880,-1342043579,91088899,34227587,1692926640,174949125,129362180,-1960436284,20775495,1024160768,192151554,1946158141,1170653963,-960299001,-1023146171,201803206,583875,65599367,-1007188224,425344,1659375733,780295,1471415820,-385368856,-154990737,1947208005,948812296,-351903512,155579938,-166431712,1963002181,175997702,-1206881280,-1830238335,-1341789433,125495487,-1979278104,414189925,1963050230,-166678512,158663364,-990510928,-1342016248,2105590536,779420166,-1977213756,1569521991,-1779937270,180049963,1946303488,1007203080,-1291684608,-1957999868,-397211071,190514194,-369986085,2105542383,460652550,-1006156406,1194993180,638416129,-402501749,-68680003,114419971,-386225688,482608817,38243110,166259890,-477513723,-402193176,1018167331,-1207505944,482615129,21432870,41157288,-353878092,256006,-1207526679,-555139635,387078,-974533200,-569968890,1946189933,512630284,243494504,520159272,7649475,-393155351,65537621,107604224,425344,112789109,59042048,199753904,1397929984,-1341743896]},{"sector":3,"length":512,"data":[109504848,17202560,-930473868,-402587464,62390293,1042438,-402193736,1170604041,1170604294,180555528,-1979550519,56289476,425344,1166214517,-1950154230,1166609477,239438602,-1022605943,-1979232886,108888296,-1960282878,1435175493,80082444,-157808523,41157317,-973675470,-1727499000,1946338806,-1982713086,1435044421,860744460,-153996352,259261637,1963246070,-157765622,57934529,-152817480,326371525,1963508214,139296782,-157699580,57934529,-1949158982,1960446936,1347571991,-1341816600,30205952,845912,583768,1493535464,-1022923384,175423499,57992202,-385497879,-2134702672,1963067004,89385025,134694390,2088965237,242549002,818307,-21886859,-385594392,1149961555,-1259843062,1173772803,326371335,34227587,-1978907509,281706710,-2096914712,-385742227,-2024667857,84928759,-402111350,-142147446,-2029714200,-390057225,-142147404,-1966175654,-422573708,-422517040,-102175094,122025475,-2096008184,-1962800571,281706961,65464336,34237827,-402330903,65537229,81914112,425344,1173758581,578028551,134694390,1166216820,-4586998,63170608,34237827,-399441990,468386745,17202560,11535732,-167713304,1946683205,-397234171,1353712860,-972761112,-1023146427,134694390,27791989,78125172,44570996,145234548,-1595204748,108266920,208931496,11572971,-1342133783,10807554,-1612119632,-385634304,2105540762,1316291590,17188294,134694390,1488202613]},{"sector":4,"length":512,"data":[-2080374343,-1273531199,33864026,242532740,45701556,1958839297,-1185172475,1292370696,158173192,1642710154,375044,1488503172,-1190759334,1505231114,139266139,-385258104,-1329396647,714753,45152135,-2030028312,1149551607,-401574648,11535325,-2030032408,64219383,1355020167,1342719242,-957810809,1139300355,-386430977,11535293,-2030040600,1776834807,-1007187969,1173801098,913573895,425344,-994960267,-523181872,-259333936,-1342001944,-2132702580,-864025916,65792192,-706211605,178176,-1979696920,-402520895,95420616,-1041758741,-771641344,105236192,138741761,-1022800504,485017738,122025473,-2096139256,-1979577787,-402520895,1837302027,-2134703606,1962935933,172294404,108888259,292097,-1950152379,1166477893,172329228,-1579643965,-1020563986,1843267319,141824000,1946286979,-121597,-1955729757,191753246,990147803,-1560054845,-389845524,-1917124653,27453502,-396945736,1170604881,650315014,637683594,637816715,637951883,-645199986,73894438,-321780815,-1840957,11587723,-1342150680,51571024,-787854079,174949353,822065666,-503199512,2105590772,544538630,678756412,805914102,1166680693,37742601,1173791152,41223175,-571957072,33548546,17202560,1161433973,-1023314679,-523203918,-523181872,2112483466,122025473,201880836,174426800,-1962752791,-771028395,-1207170444,-1962760216,45345218,-536166220,-523181872,-536158000,-1561775696,1962949634,155579932]},{"sector":5,"length":512,"data":[-1978239696,-689436347,-157044735,1963198277,-391991294,-1763114380,-796347903,-790572832,-370111776,-930414304,-402602310,-1047854824,67585526,1659437940,38725890,33979776,-1031136395,67585526,84675444,-1962787864,1189677637,-1979446270,1055459941,46825474,-504760782,108888064,-1962314494,-897578427,-1876431934,-1241265536,13887760,33979776,-897576843,-1327330622,34596993,-385202805,-897580535,-384780797,-930414411,1975597976,-1327330804,32761987,-571883126,-1327330815,31975553,-487997045,-1966568703,-159337742,1946421061,-1736199663,175425595,2129166770,-373191936,1994916293,-373192192,-397409876,-2141652261,-829774614,-2146967168,158598905,91602955,-1561738613,-1731687679,225820987,-1958687104,26470594,2112471434,-2133950463,-2031566197,-373191935,1173750145,141824265,-2131059992,1055630570,-1325755672,22734908,1173782704,175440393,1173749936,41224201,-802013008,1173758187,57934855,-2147366272,1963001469,158665227,-1950298496,20703682,-402045558,1166671993,1964025865,114196505,913580200,-1476135296,-2094238459,1962936957,-373126385,-830471915,1948297222,100040707,-1744157301,1963607355,1087275022,-85409141,172329728,-2147425303,-1031044914,-167711512,1963264325,172329734,1359012073,-1961998965,1435176029,1342224650,67716598,12127349,155580112,-1190955712,1659408384,-1463592703,-1273793263,1963108406,-1473858552,-1274907384,-372995538,-2084372332,141835839,50464643]},{"sector":6,"length":512,"data":[-1022916321,283660371,803756032,4777984,34064219,38242560,-787510333,-2096335639,126550723,1370195,-1007361445,-2030040856,256247,868480903,71665600,276086795,-1202694394,-605552637,-1442795384,123710296,321731,-1023130231,728625825,1953418758,-1202256365,-1142423551,-1442664312,109561739,123694578,1958742979,1347880464,-402652232,313559202,1605064874,1460060935,178256,-1333227032,-1437029884,113444703,62410839,-2004817920,1487537840,-1022926933,1858999947,1460017031,571472,-1333237272,-1437029880,1605091979,395035399,58053131,516097929,1859133070,1468783243,1976699650,38242807,126599967,-1073019095,113443189,62410839,-2010060800,1487539376,-1960388469,-1993997753,-1073020289,123728501,-2147440189,-1259862412,2147427832,-392515504,-1587806352,12152376,114438960,854086487,-1194849536,-202899449,-1441746809,1487651211,-1413313621,113444703,384324439,-1194849536,-672661497,-1441877881,1487651211,-1413313621,-1899821217,862883846,-337955841,87762444,-1977206924,2039284317,-1908524285,1374582126,-1907351978,915089088,-964493304,76162563,-1958739788,132552,-395407685,1465419665,-203911509,1579114404,-1010332839,-1000974586,-1955680746,728652862,1926245335,-1946973426,-1494001720,1192391775,-1947043510,-1141666872,1525182126,-1527556217,1852350815,1853234827,371971979,1600024156,1460060935,-1949791402,1857469427,-209241880,123690660,112835,1857422981,1472397685]},{"sector":7,"length":512,"data":[-1144485114,518549174,-205507705,-1017182294,-397191418,-938737851,-1157625672,115896006,-1413379193,-1031034024,1857462699,1851655723,-1022926933,1848116983,242483456,-402652232,313558754,1845141930,28879680,-2032867328,-391506768,-1612185592,-370182912,857604297,-1949158455,-1955680706,-1905397194,-1402023906,-13444982,1772617518,-2054783098,-1937340282,-1400466298,-1148799866,-779696506,-1383672186,-336557226,-672440614,-739555514,-2096970109,-873790777,-1996260215,-695532204,113673132,1006880643,-2085063445,-1276443961,-2096642429,-1410661689,-964477815,-2086343934,-947714362,146899714,-964453909,80184070,-351747709,46564238,-1994421781,-1986704882,731204630,-1989235138,-1013626818,-1949748450,-1902818250,-345059298,22842138,1143670667,8469763,-2109928833,-972718849,1091239748,184906891,534935030,1438894347,-326898549,116858380,16805416,-90093196,-133813395,98619757,-1631911924,-2048923538,-143785823,7219206,855799042,512469952,1200319970,-1365136626,-196703890,1851524651,1845010859,-1409923447,728627873,1080948742,-125924949,-1577433460,-1363438264,-2053117842,1252087558,1857993621,-1987734296,1183644798,-1962450946,-1955701738,-1905397194,-1402023906,-13444982,-1582825682,-1115179129,-1014513529,-477641081,-142085497,797446791,-1383571064,-336557226,-672440614,-1512772700,1017958891,872772843,-1425820671,-1381307984,126605451,36554539,-964449536,-1531647228,-1948742739,1221012231,80118698]},{"sector":8,"length":512,"data":[-964450837,-1952388350,-1950209081,-993817393,-1515848578,2122951589,-1896248324,-1413467197,-947157525,-812924373,2126824332,-1515870724,-58816085,-1014040181,-1414807501,-1375770391,1311492235,-1993902346,-947128762,-1980479957,1460073598,1039695556,124911744,-2146646906,-1429961046,-213270478,-125924950,921241439,116858879,16805416,1183516276,1855890424,-1017256565,-1904424216,644769798,276223,-1557741517,-2085093372,-2049644414,1852315275,728614561,1025471682,57806848,1343225784,-754667182,868781024,102665152,494987374,-805087142,-1008149781,1745260165,110044782,-1494745084,1105773436,42461186,-1593813016,44264902,10283118,-1593491480,-1064407594,-402285848,-1591343700,-1073020924,-694030219,203328365,281248622,690405518,637544990,184550561,703690176,695075358,-1586625506,-660378154,255754349,57999421,-1585227032,-1365021242,-1070349459,-1586642269,-1064407594,238979878,378217984,-1070399472,3056422,-1993995541,1157834245,147292930,-227149253,3318054,2794278,1876262,2925350,-1325396219,32035588,644727302,184550561,-1011124800,-1107295557,283639824,1228288,-1996485912,-2089958370,678949115,1842782659,-1960394610,1418405436,638380802,52829577,275907165,990431107,653293050,184550561,-1008896576,-385863240,1307084033,205422593,57999421,-402551576,-1070398934,1842742926,3056422,1849165454,3056422,862836385,650153673,3817091,1360294912,1841706751]}]],[[{"sector":1,"length":512,"data":[-402652737,1172832631,-972648702,641816941,184550561,198866368,869365193,-1790008384,-946511709,479549958,50587648,-1550496095,-1511494142,66250755,-2096885528,9789502,-2034756236,-2077693822,-1941884744,309722,1845894795,857467368,-1788959808,-1788737849,1688403972,1443284885,-1593828203,-1064407594,1841706751,82378547,748758529,104539648,74645550,3055910,-1987954456,-392866786,401081339,1048782341,1962934318,90105861,-337113877,98494470,-402196504,-806877630,65988614,-402322968,110036313,-1591317050,-1073020924,-303519627,1614709510,57933973,-1903969816,644732422,-1560268127,1048604102,1946172686,-1789877999,-1789782389,1846025867,-394938136,-617405034,1846025863,-2139783448,4001086,484967284,255754272,57999421,-1585350935,-1365021242,-694041747,650153581,1318539,-1591857685,-661754410,538251,-1929132413,210371199,-213843787,-1592888154,-1073020924,-1205869451,2129199240,-1993990269,652184327,1449531,-1591292811,-1073020924,-1581008011,-1064407594,283705139,113714688,48,303398,-361381877,378218179,-771030992,-1477942924,651725684,83892897,-266010609,198325247,638612735,1838731,637553640,1969803,1392526312,1534393576,-2105612282,-1938503960,-16054333,-1993992075,637547038,-402645855,-1993998288,637547550,-402645343,-1993998300,637548062,-402644831,-1993998312,-1962919906,-378674626,-1048349406,-253656305,-763117309,252035840,-754667264]},{"sector":2,"length":512,"data":[-1009253400,-1905404255,650130368,637549219,637549731,1207975587,238979878,378217984,82509844,113738667,-126485957,303398,-747257845,1852311182,205425446,1032529408,238945062,100607488,973537062,109888256,-1591306906,-1960443850,637537854,1054347,637543656,3933697,3711270,272534310,378217984,250085394,100738560,-2094661570,14910,-1547449227,-1070361240,552334899,4031270,-14281867,251602437,1448214586,283641431,1583286016,1963140698,147292932,-596248005,1435182787,-338296060,1745260141,210445973,41716518,-1788475762,-478029429,52826111,637539358,-1040775282,24387584,12711744,-148933504,1947205825,12711738,638350656,1195523,17155878,640215808,1064451,-1040772117,141901824,205390630,1032529408,238945062,1032005120,638088703,-14285313,-2097137146,-231012154,-1581019275,-1064407594,647319201,855648931,1049306816,-1960443890,-352317418,1032005136,638022911,52823433,-947715515,1979333384,512435948,-2094661572,11838,-1557777548,251985966,-754667264,130253800,-338492495,104579843,58103136,647323811,637537953,788011,-338569077,-1023153199,855646213,748889819,984320,-388823887,-1790048767,1042154278,-773598976,1511916003,-2095484267,-258647490,-1591340425,-1073020924,1709769588,-1790008833,-1016216925,-385848392,45842673,1097216,-1996483352,-1097507810,182976530,-1004631808,-251952275,-1581044105,-1064407594,641501990]},{"sector":3,"length":512,"data":[-352168821,1032005138,638153983,52829577,275907165,990431107,652899834,184550561,-1009289792,-385863240,110002337,-1960415688,637538366,312673675,1841602926,-1325396219,65590020,-1553071610,-1581027836,1927845210,1478396286,-1789091435,-1988204312,-1955720162,-1083300810,-118984922,-2105362411,-395368774,649729662,1906567279,-1586624349,252024154,-1039104,512479795,518614536,916530802,512435712,-1960443854,637537854,1054347,-1591340053,-1960443848,637547550,1064587,303467302,1711705088,-1788304491,-1788076407,-164373709,-1960433685,-49915,1856181364,1780386197,1448235925,367527511,1583286016,52845402,52822621,-947714955,1979333384,643154901,50621835,11004398,-1788344690,647081254,-1389980755,-1834146158,-1788475762,-410912373,52826111,637539390,-1040775794,578060288,1073791479,52825717,637538846,512427779,1223388674,270402342,117646848,1845632651,-1040762133,661995520,775848742,326369280,805356023,-1014297228,-338564143,537248515,638905088,794115,38208294,639601446,925187,637993766,2760331,-1788199228,-1040713213,242552832,536920567,369299317,-1037331090,-139769784,1948254401,1001100034,-385649419,-1017249966,3318054,-1789649269,238979878,378217984,317390864,3449126,1846812299,272534310,378217984,-164429806,-2094652437,376766269,102651734,38636326,-1908569306,-389837096,520557737,52846175,-947715467,1979333384,-1591295015]},{"sector":4,"length":512,"data":[-1960443850,637544990,933515,269912870,638774016,-1962919775,644743710,1064587,303467302,-1788304640,418117171,-12745946,1448217460,283641431,1583286016,1963140698,147292932,-462030277,227223235,72715046,1049351683,636196182,-1788344690,325414,639071264,50742411,83306177,41160704,109985856,-1951689384,-964449341,1978809096,1446939095,-1591295083,1755512886,870003605,1049306870,-1960443890,-352317418,1032005144,1376482559,-402237610,1594294288,52845150,-947714955,1979333384,-1960393756,1435182605,-1948908796,-1910313989,647325702,536872183,-1960438668,-1056766396,325414,1073902608,1409715776,-964449387,1978809096,-1008759846,1580662558,1681325973,1647771541,109971093,857707860,1070446847,-1413467221,-1420252328,-1426051423,-788513631,245476320,201730816,-773271296,-1420252184,855640249,-1951665216,-1207956426,-1381285939,-2085758837,225771515,925187,-75292789,50492671,-1413248040,1001046066,1962937910,520560346,3055910,-1788738047,-1788602749,1017193984,31510784,-2087362042,9790486,2793766,-1013621085,-1789651317,739150630,136219392,345500014,378257459,-1960405676,-1962922482,-378665442,-1070394210,-1789651317,1007586086,-1948135168,-378665442,1053037706,-617386478,-1591768794,-1993960098,-1788829435,38111526,244040332,512464220,1323855368,338880532,-1986703197,-1902816746,647321606,1735,1520523853,984469,-388823887,566054,1845626371]},{"sector":5,"length":512,"data":[-1789124981,-1324366973,65786628,634948547,78708767,-1557733165,-1014824958,-754601697,512304875,1520500740,1846677,-388896559,434982,93674657,78708751,100919507,512454146,-1014796758,-754667249,69075947,1612579694,-1579668587,-1023185364,-4717709,178464511,1848549632,57918211,654311352,-1593832285,-1557762556,715194382,279127662,113714688,1835032,302434086,-1912602624,644769798,802443,38112038,641567526,933379,-1912274138,647321606,637539491,1443527,-953810944,6662,-1950184448,-1953146354,-378664930,109974365,-13406568,1855340091,-1977209228,130515717,443876668,1859567191,-15629336,-395458506,1609039901,-939094272,109993837,-1977192808,1088696837,-856950781,1859566275,-1199850263,-692452096,299690094,-395389254,1956867350,-388461675,-771026196,-264428171,-1558153217,-1259825808,1914603897,-1950338155,1880001491,1948158869,1836902549,-1787552117,-1200803095,-1242890195,2023931955,-1787190635,-1567262046,2124584315,-1786797419,-946500446,-1500154362,1852350825,1358031080,-1556086771,223909244,-2136768512,-1896467563,999649798,1939173430,-1465113050,740324609,1008497280,-1978108126,654258904,1220936621,781550755,-1817602049,-1786497397,-1194005690,1290338351,-493624577,-493624685,-845946221,-493548141,-493580653,-476847469,-493598573,-493452141,848691859,2067693718,57933973,-2137891352,9797438,-1075313804,-20752238,647329798,1963211948,2015791696]},{"sector":6,"length":512,"data":[1015096981,209014595,41713958,74794308,-1787156856,1128038694,638350675,1157790849,-2012973753,647330342,1094990977,-2128212875,1096024700,646448245,-2128177794,1968391228,2088838668,1967604994,2116454404,65286805,-2076820496,-1013157227,-1787230466,-1951586746,-1968429360,982874406,1972730374,2066122770,-1144878187,-1360499026,1913032312,974187413,1972731398,2133231626,1477837205,1175024238,-2076820666,-1010732395,-385863240,-1406730649,1702215690,104508454,1567987067,637718760,1347815085,1946344424,94431265,1362907509,-1960424075,2106271285,93201922,54296614,-1108853387,89712642,2145911787,1009808645,640447827,1946682870,2106271270,1879477761,1853268334,1074104102,643306869,1577207177,909854215,-1535994492,3389635,-1191315735,1049296947,110007686,-1595304590,39839865,1843942918,-399281150,544539767,477450556,641043238,637697419,-2144991858,208995132,-402501656,74777834,1534350140,-1962920776,-1902803394,-376081914,-1981253277,-396528896,-394984385,1064588092,-529182148,268826150,-1960440460,-1960443043,-1910111875,653126407,52692362,1015021753,-1190693888,20758528,1460058741,-1024933748,185032687,1569400513,1435182595,638970625,1963066870,-1940453729,-274208576,-1960442017,-768409251,-1787412853,1873215361,92871284,-1996333687,109249621,1577489782,909854215,57906564,-1006682391,-385862216,1048640799,1963356022,1093975578,2009007902,-1176597649,-1494024186,2005732212]},{"sector":7,"length":512,"data":[2097053960,-102009535,-796152381,-1946157128,113689560,637572492,2064005804,639792533,-1786600531,1851539083,244054019,-836004476,109970974,-216043856,520560292,-1785985338,113689345,637572492,2064005804,638875029,-1786600531,1851539083,132708355,-2076820736,-1007193451,1448127782,-1072976602,-397407628,1213792242,317454453,-930436058,102690098,1857029774,514126623,-695525625,1967675486,-1007514667,-1785971072,645100544,618695340,1020408828,-1172999036,-1002696704,12193396,1959279648,805353991,1383451708,-14308314,-2113535229,653822869,-154629460,1047890369,1967178230,179054087,1174501824,-466441178,108642314,-527794396,-661935066,-1040793549,637695236,52320173,-1905370050,57585694,-1839259899,989859304,1922401334,951632782,-68032256,1963114998,2065578528,185234837,-1953137658,-345082338,2132687401,189429141,-1953136634,-345078242,-1948004071,65262027,-1601762343,-1533607063,-1566602391,-49815,1398217332,571472,-395395397,-1420266039,-1031034024,-1901373269,-1013616122,1547567902,-1340174738,521505134,3717315,-1980004631,647333430,-2009691732,65286805,-1976137232,106414997,-919348429,-1786112373,-1786233205,-1787689330,494205499,1191545382,359940156,108159292,41384508,-2008866772,-26249593,-339213624,-2000092449,-2005961186,-1989262322,999655486,-1017182214,-523122549,-402652667,-1047825091,-1411329720,-1410088909,7071939,-385874968,-397409432,1968702050,309254]},{"sector":8,"length":512,"data":[1349957097,1870007946,88146101,-1056767997,-394982168,512360481,589721156,39357724,638028582,-544522359,-1430244437,-210798914,-212379228,-1899798614,-1955698682,191757366,-1961986570,191757878,638285302,669323,1955276483,-1960393980,-2134702732,24001086,-1195179659,1659437058,1870052982,-2010805722,843466532,92939995,108159292,41384508,76029996,-922859961,-855713790,-620566667,1849958024,977174723,997523822,1847723766,1446737216,16377943,1497116277,-1377298315,-401494014,-1561853307,93202175,171871014,28436480,983700085,1243515246,1178503534,1208388718,-1017225362,-385875016,1465284077,1946273000,12183586,-694084236,650153581,2506379,1946255080,77669902,1975520000,243948,-394935063,1497104495,-2098720139,642872576,2506379,1963023080,5892324,594891068,641043238,637697419,-2144991858,812974908,1962958056,16050219,501793653,1968389122,1007348511,639202643,1964115446,4188179,-1960440203,417858941,-392006399,-471138281,-1953132383,-1989287394,32434183,-1567256672,1583312442,-1785748797,1850351241,1850097289,1850214028,1851137675,-1785717111,-2147365911,292436542,-1041758603,-21239551,-264860733,-1005589651,-2081945484,-1956088832,-1955705802,914951284,-167023028,110029173,915107432,518745600,56396326,1888288951,1139299844,1031036416,1852311182,268760614,-1960441739,-167050380,-1960386955,637536310,-1224516470,74484992,637832742,671371]}]],[[{"sector":1,"length":512,"data":[7465046,-1911655330,644769798,184972427,1323070966,-1007275069,92048166,5630038,638088286,1963984118,-1007285501,57969446,1850619529,1850738316,75270950,3532886,639136862,1963146368,1552623122,1960512266,1955276297,126756360,-1018437909,1852311182,1845245579,-931793397,1845376651,-1468664309,171871014,1142852096,488842862,39422758,477420299,-1972406600,-1234209258,2139963904,-1947170045,1957098442,529212937,-294266101,-1977171125,-1144847801,-694063242,-1239971219,-1064418816,138316582,63406848,-208942453,175417075,303398,-428490741,1504756552,136219430,-1976646912,1139618319,840403502,983581686,121253486,-637336204,-1018562590,1013856928,1007121412,839087107,1592509376,973486736,-1023314834,26236139,505630466,606414628,842414386,792282167,341067593,307630933,240651607,442107737,257627738,291311708,912201566,982862712,1970158086,-1877218557,-1181025349,-1959919592,1958885911,-498908410,-1979336971,-370920762,1397781357,1465274961,570881542,125124718,1843543691,-395993624,914948771,76246614,578076682,645017660,360069436,477249852,141974076,309485884,846690876,-352293400,11528218,11539947,439095787,556534316,-13444982,-13706493,-1566850921,1049325114,898199010,1594343475,1532582494,95994712,1929111808,-1682269254,-1669751659,-1682269254,-1658479467,-1657430735,-1656906439,-1656382143,-1654809256,-1653760663,-1652187776,-1651401798,-1682268779]},{"sector":2,"length":512,"data":[-1650614887,-1682269192,862942911,1006930633,1008955952,1007580729,604664927,1916878047,2002402325,-109033967,1206023231,92848638,-402470658,243849195,-318607498,1849962120,245963967,753423879,41180926,-1950154320,126567390,74592316,-176801476,1007146984,1007580229,-2145225426,494153468,1948908672,1874246424,1913355496,10401798,-1996444951,-1200728522,1122566150,175761522,-1230828174,-1206482577,15120495,-1996452119,-1200728522,652804103,8435826,-1995962648,1131394590,76204339,578103100,168069702,1007776960,1174893863,658244746,126412917,-387235517,1851143817,-385873736,1581019633,-1975118987,122873860,-395001846,-2009058234,-348044537,1965243585,1364411924,1493830376,-1980992677,-1200728522,-1024917497,-434206351,-1239512211,-1206941585,1967718534,21465616,-1550195662,378105782,381185976,1843045121,-1553057631,45116892,-2146586429,58011388,1178996656,1175367875,1174778051,1174646979,1175630019,1174712515,-2145931069,158609148,-58715728,-1341950679,-1018804720,1181629600,-2146193213,58015228,1178998448,1175761091,-2146914109,158613244,-58717520,-1341950659,-1018804724,1181630112,-2146848573,58015228,1178995632,1176023235,1175433411,1175498947,1175826627,977174723,393549166,1049319254,898330082,-18749362,-1955710302,-1989287362,-1017225419,-402648391,58001840,-1107289927,1386299772,66620270,-2017444415,1386423159,-217637266,-902394972,68479085,1946172544,59172879]},{"sector":3,"length":512,"data":[1859534464,-401837056,-370474467,8370371,-1200572183,-1293352830,-499217552,-1405777043,510967818,-143253444,570881614,712327278,2067530891,675087988,1176466730,1828934,116841963,1967156770,74246160,1049350517,898199010,-351960600,-1564258624,1015059854,-385649628,-398065107,1014104797,1485277998,1958742946,634424110,1015054335,151418155,-345102330,758939659,-789112459,1848116769,-2147425663,1848120867,-2142892427,-965465028,771879145,-1568626689,-385871432,-1108840419,24373250,-1962812183,-2089950658,37053,-396947596,-51904051,74735361,9473535,8435907,-1955597079,-2089950658,37053,-1912666252,-1427570544,8435713,-395322135,-1628962110,-499217663,-1992980115,-1200728522,-692453375,99149934,-692452432,95938670,50378832,-395389254,-1168636458,937979606,77260804,1843543691,-389859957,1021837888,1592283137,1049319425,-2046857758,-1073020784,-396948619,1952383359,-1869742332,501793536,18475010,-638856969,-402476568,544342505,1485277998,1958742946,2147427607,1848120971,1948990592,758939655,-755562891,-1309949405,-385931799,79168046,1859566080,-1341824536,1859566085,87025750,16247134,1912759272,1976699700,67124528,-264426638,-1557760001,837316138,1025405442,427270144,-395432797,292684324,1848378939,4000626,-1559857248,-1091998162,-19863296,1849704064,-165184256,40772102,-2048383372,-692365823,-88414098,-148496267,33564678,639464448,3016391]},{"sector":4,"length":512,"data":[-379650049,297271437,1858070784,-385839688,62418617,1857284352,-385838920,1307078317,2942977,-393187861,-1073020861,-1101653131,210398934,-1589514958,-125079982,-1069694717,-1559791737,-1527550382,2142815070,1853614336,184556264,1444246720,850196363,-1947204636,728650254,-1985678386,1584288318,1049319107,119434836,1044103219,359951954,-315486838,-1101573823,-1493995818,74733919,-420742909,-2134679992,2073398846,179048821,1006990528,-1007192707,1963069928,840231921,-1394570524,108314634,1965697341,-68631564,-1192463103,115933194,852636270,168070134,1007973568,169702439,1007252982,1025143931,343157288,1390865222,1510068712,-2118591115,1843128576,-320088330,-1901967802,607944853,1380331893,1509967080,-1014355598,1006698681,1955631114,33536288,-1869607876,28907380,-1877853184,1007580304,1955631124,-1877591032,855798928,-397258295,1499135837,74771722,74764810,-2081697534,-1983657718,-395422154,314507320,856100514,227157723,283372850,-692169151,1587999598,-117241996,-370457789,-1679244295,1446414592,977006,1859534464,-1023314944,-385875272,-617386683,1597768842,-551286156,460472636,393697852,-2021113018,-75272490,-1978895297,1915763716,1983462406,-1998853141,-1016146402,-1996466712,862869046,1006930651,1008563744,1008301098,1008039037,1007055457,738359162,-695760864,-2092743058,-579514373,1859553222,434684672,85357056,-763166705,-1190235648,-355401724,-85796655,24433163]},{"sector":5,"length":512,"data":[132695033,1446414592,83487086,-1073085302,540807028,742131830,993789044,-347733131,1090634731,1140933121,1178944518,21319241,1279591493,1157973331,1179206734,1224820225,1145456901,1225147973,1162104390,1179190598,22302799,21823820,21954894,89325906,1162104405,5636422,4231168,33024,33792,2097152,1,0,33280,-2013233024,262146,1048576,-1634165096,-1633771880,-1633182056,-1634165049,-1625579809,-1622630594,-1618174093,-1614242152,-1634165096,-1634164722,1843535499,-1727248501,285492993,-2135357865,-1949158656,-1922176970,119410815,1844059787,745861947,540820140,-492170638,1189629939,1049186048,196636246,1809312000,-529265348,863242812,-663437302,-562750916,669731406,-1497869743,-1176859543,-936677978,1843535499,-401973365,1499094434,-1956010306,-1982331938,191752734,850228672,512469696,1468624354,1959922444,38272781,1842087555,-837385471,914948205,2005757416,1446414608,-1009644690,1846165120,-1957464832,-2123505090,1955053823,-487620273,239438080,-1913484457,-402615619,-396427033,1166630066,-1836741366,138774784,-1995422323,1851171589,1166655539,71665922,-1996077687,1166543941,-1870296816,1843962624,-1989285213,-378674626,1991794004,1796466944,-385873480,1049324301,1569418722,1556867082,-1911661173,644782086,637749129,-1023060087,1846165120,-1957989120,997057086,1953358910,-1866628287,1081409536,-1956834328,-2065167779,-490241700,-499218176]},{"sector":6,"length":512,"data":[-16809619,-1960676204,1851171589,-1962654325,1157826133,13796108,-401973877,-1070375795,-1553078109,-571904534,179880796,1788602624,-385842760,1631349397,2050754162,539755127,256195,-2030040600,520494839,119456519,-930436436,-1527517902,-1316669,-352320280,-1408819482,1975519914,-622279686,321791,119461355,852003500,849671149,-1396462912,1193642534,-868562806,-863370634,82046258,41264883,-775699398,1940255721,-37510143,-117182205,-372158642,1319371123,-56233137,-434205757,1036190573,125203392,-1061436629,-1547500689,1354984934,179106443,-1946454592,-1949684786,460225,-395405637,1465411657,-1413467222,-1974883413,-225727807,-1017600781,-2115204267,1442882284,1451820631,516983806,1959922183,-25785538,179100467,1007449280,1022719068,-1946979026,200272862,-167283493,527728834,-24382581,-1439780785,-2143185730,-889319454,179046260,-335841856,178957557,-1963297344,266567902,-768408203,-1224691479,-1948004096,-2143180105,-294387652,1971373814,-27882671,593175272,-562741054,1946172544,1589546457,852636671,-1394570524,141869066,91503420,-236240214,989626446,-58717836,-1341885348,1447209564,-1392609653,1975519914,-1923981574,-385917290,-1037870369,-1133225408,-1098041109,-768344226,-527768526,1958742700,-347952636,989626613,-58717836,-1341885348,-1958565284,-25785377,-1073042772,977013876,1547437172,-74714507,-1232212245,2123104094,5224958,1958742700,-119363069,-1951743950]},{"sector":7,"length":512,"data":[1583286210,-1017256565,567099828,-919354372,45666867,-64893630,-919383982,12112435,-64893630,1371757144,-1030879657,-638060149,856678787,128644032,-1048356513,-253656305,-1910631965,-1261401126,-64893632,990212639,-1023314495,-385871688,-1910609807,-1150440418,2139095045,91553560,567099060,-75283460,535786772,-1957210429,-134575120,-1957539615,-1947994170,-137917480,1523092449,64160600,-1017225263,-1957341354,1961561065,-1663366302,-772339079,-1048325129,13861633,2040320523,-137300214,67026,-1962880381,872123377,-1109707831,-774832095,-835988527,74702619,-552350205,-774843915,-361411118,-149980771,-2083260463,-746389055,91856128,2040335851,-137300214,67026,1560334979,-1195155873,-957808578,607944807,-347732875,-1070362561,-561262029,-315487094,-2143622784,645073601,-268385545,-783211403,1389548000,-773795504,-773795374,-1056745006,1506874201,-763117309,1174894592,-214184213,-1007091337,-768360397,210427531,1919023488,552173571,-2143622784,192023233,-2145916544,343082689,-1257586304,-773795580,-32673070,183924173,-756332863,24638267,-472136711,1406874451,1071242379,1258296507,-2124677771,-2129707037,1526939643,508757699,1011949139,1007645696,1007842305,-1709870078,480314435,614077419,-350445310,37657100,99294369,-1593681766,123468828,621299595,-12746753,-1023314817,-385839944,503736041,-1705959853,487194633,-2147219460,113475644,508960339,760403,1543249263]},{"sector":8,"length":512,"data":[-1947204857,-14350265,-523157377,1381172931,1394529419,508698192,825942,1526472065,113444699,41418579,1394489343,1107388826,123468829,-1073084733,508762996,-1469794221,1207324686,125075465,-1593688422,-1710888164,480313892,1394496347,1107363738,-1990460387,39291143,175366865,108380683,-385856328,-1022925223,0,-2147483648,1392918526,1394496286,1577059994,123468829,508757699,-1705828781,492699722,-1962451972,38216455,1074022179,-1195179660,518586444,1946303590,508757540,1012080211,1007383552,-1710328828,490864640,194645227,-350409216,7903749,1543249198,37536519,1392922996,1394496286,594804796,796132412,1107328666,123468829,-788117621,187986912,38210311,1963214603,5027882,-1704606487,487653477,-1962451972,-2135293369,-1710298241,487653680,-1962451972,-256244153,1002578815,-1009355582,-1425276898,-1434080559,-1425692042,-1432966489,-1436898641,-1434670484,-1442403618,-1427330330,43589,1095763515,1145391939,121438208,1196380752,5062994,1225666304,1162629197,1414415693,1330205761,849957710,1414416649,1095127621,17731,1314194503,21577,1313409331,1381123412,5525589,1091050240,1280267074,4543573,1158162432,1380275288,4997454,1174874880,1096241743,-1452129198,1398080585,-1449962683,1095501108,4998466,1191456000,5198927,1225142528,1313426510,581548869,1397048330,1129665108,-1303228588,1124802985,1414745679,1413698898,21071,1230374731]}]],[[{"sector":1,"length":512,"data":[1096111186,950618188,1245859590,-1017887931,1392722089,-1448455099,1229325353,-1446165172,1313407536,55443456,5394264,1392722432,-1451601336,1213399873,889192524,1146047747,52668906,810961220,1308833450,-1449178039,1330512695,973078612,928141058,1090722986,-1452981170,1230439501,-1437448108,1094911007,-1443543725,1414727235,1196312914,104770047,1329808722,17490,1179583033,85830171,1095914049,547962457,1313817349,-1438755757,1498678341,-1441512112,1096155978,631901778,1464812550,-1655745458,1157899946,-2025499828,1426409641,1279874126,104835547,1162888530,-1436396479,1329857060,88910370,1279871063,1185595973,-934325246,1174612650,-1430760881,1213465668,-1440133563,1179189806,137144974,1129207110,1313818964,154970699,1129271888,1381319749,665507653,1145980163,85895928,1229407554,222199886,24444989,2144963,-2097125400,1049168071,109876626,378115476,1726518678,-1785552639,-1325396219,32035588,-395459066,-2051538523,1662314626,971559475,-1740732160,-1710846827,149586837,-1784932727,-2147348504,37555518,-488107918,222199810,57803581,-402446616,-1024981992,81455108,-1587349016,-962357868,512476013,-1014075962,728615073,722826947,-1173260606,-12714000,-1324977393,-1948200188,-1006685232,-385875528,1379689225,-1030992523,-1977251290,1007625412,-163809535,242487492,57510694,25004838,4623910,20767467,-1960441996,-352316882,780871173,52822032,-1960443027,-12779450]},{"sector":2,"length":512,"data":[638350591,-1912519421,35032002,-1909527698,642837442,37488010,-1960425100,637537326,637627651,933515,8258342,1023773478,796196863,38142758,706120486,-1841394944,-1774306411,-1207537003,2129199105,-1899656094,-1416260602,-1951677813,-980702266,-1841395285,-1010463083,203328294,1066083840,1979711363,-1960393983,-1960443321,637537822,-1960443645,-1962923498,999658046,1922405950,112646,-1939719959,-1811509563,-1031033963,1353496747,-1411871573,-1785577847,1438893454,1842749067,-1343700082,512435967,-1960443894,1105842447,-1960426685,1962281783,642139685,-1958345590,344598270,-100403662,1917992007,2001943559,-18946045,637791875,-167037813,-790439051,69110566,1977289472,516119991,-1785577787,989857982,-2096728841,48761071,1438850816,1465314443,-544484813,-763109885,-773140224,-119307301,1468729227,39074050,74582903,91423801,-351746429,39139824,74910578,91620665,-351735933,2012691440,309528,495393931,-964486007,46629634,-276565278,1995914000,-25282108,1988561267,-6297346,972977803,108461174,-386105717,-443809903,-890715299,-1157161470,1072189440,46131202,-1593656088,-1064407594,708741926,244000256,-1960443860,-2097149922,800719811,1189611088,-1591343360,-1073020924,119463029,1845640843,1841565323,-1957677893,2877651,1845771915,1848249995,-1957676613,1829075,91105953,78708751,100919507,-125080060,1069271347,-388789424,-1329397759,39512096,-488061045]},{"sector":3,"length":512,"data":[508757505,1346681607,855753192,-1962679333,-1014281255,-388896559,-388896559,-1024932093,-389838079,1220215327,27322448,-1293368949,1347205889,1526830568,260711943,-1947669198,-400510975,-377290224,-150375662,-400510759,-102628860,-628422882,-402558488,-389873167,119407085,-397389893,-488111774,-1811509759,573077,-1342056216,31123488,-796152538,1592306982,-398807039,-1031077428,-1191095064,548405255,-503201816,-1951586567,112010968,669565070,909838081,-932014702,1842782659,-4603762,378218239,-1960443880,-352317890,1972053565,-97530,-234671756,-2095215834,661979131,38046502,91537723,770230411,642928896,-485995381,1543710224,1418405380,180781830,-503290904,-2091296005,992348359,1962938430,77670076,1975520000,1055441827,20703233,503730515,1349696263,117485032,136219430,63144704,-1342135832,19327016,52843355,-2097146338,-1880619069,119408128,-397376325,637993094,532107,-402406525,-85458822,861624576,-1977170963,-1073068540,-1073084552,-342345100,-1971379192,76162784,-318025658,-689437835,1388481280,-402651462,-1336278904,13559840,2793766,-1342155544,12773434,1256768395,-444381952,-670869501,-1427586238,11003904,-1883568354,1894480,1842742926,205425446,915088896,52822030,76228149,38077222,-1023403800,-1977200301,-339146225,-1977203959,8054791,-176829954,113466201,1381061463,-1185943365,-796195836,-1785184572,-1031093549,-1428746460,-193606146]},{"sector":4,"length":512,"data":[-1785184631,1599822170,1364443911,-661957038,-1107294791,473649126,-964491917,737665538,-2029291823,-400510774,-102629332,800115335,472629502,470022771,-402471293,-287178728,1532582494,-256158781,-686873521,-1341658277,190477,1460013744,-1785184572,-1740731990,-1673643115,1929863061,1397801729,244011601,333682072,-1785198905,378208256,-1070361190,1845894795,1526053352,-1017619623,1841706751,-400509208,1994916445,260171779,-1895470360,-1016216058,1458342741,63408983,-1519162,-1953029098,-16731938,1956063254,-202684925,28368779,-1758980353,-347143308,2012691443,639041290,995051159,970487543,158596734,-385976697,1988886462,-59360770,2123040374,-5183236,-1017256565,-1189193898,-503906295,-257822581,-1898410347,-201378880,1583292324,-1185458493,-963969015,-259268105,-503855221,-1910572917,-392826850,1579090198,1008634719,512630423,1465292578,-422448341,-405669077,92734603,1599997065,50381599,33751297,1444807427,-164409257,-1962931783,-1948125245,-266432776,-1073063787,-142146955,-1968096581,119801925,-527771858,604521610,987180551,1999532740,1962949680,105155348,1913013563,-1960675552,1161495620,-350850556,1963015192,71600906,2130986299,-1962218744,-351978748,-352210936,167817218,526278592,509040323,-150991687,-1578071071,-661744054,-13385586,1595909363,1465303902,-1962931015,-1948125242,-137917456,519605217,-1773527410,520114664,512450398,508270354,-1759764850,-215263402]},{"sector":5,"length":512,"data":[-422451503,-405669077,76277713,76088711,-1021354146,1347900958,213513779,-138179840,-1896313887,1486244382,41271306,1150023559,138754824,41025968,-1073086288,-1021354401,92669066,1195771016,-1262225694,-64893630,-1195179662,1927872528,-971076772,-1581019539,-1020564024,-1037363850,-256241290,268385791,78710387,-796139309,-1195114701,1256783873,252006748,13796096,-788527943,-489106966,-971600902,-938570899,1003105133,17201089,1500366342,112835,1398546665,-1962518703,-1950183720,-425525,-1190955505,-783216641,-773729823,868234209,1504441343,-1056718708,-651444082,1594350967,-1950131367,-1992293308,-503902132,-1729624206,240421375,8108227,-1101276951,163157474,-2103296,-1181350210,-689438714,-1776763137,-402651975,1019150285,833942,-1090534168,146380384,-4462592,-1181317954,-1293418491,-1768505601,-402650183,-1463877719,178582,-1090543384,79271610,-6821888,-1181299522,-1897398264,-1774149121,571712,-1787633161,-1979767064,-1583932394,378246914,146380548,-2112976640,-2084502634,216531154,-13375233,-1769990519,-946412895,26668550,-768393216,-1979779352,-1583944682,113743604,104192,-388877504,378142435,1319212798,-1779129450,-1198118237,77791248,-167327850,-788528491,-388877344,378142403,213423618,-1774542080,-1775499577,-523173886,-1394027981,941001214,1095830,-946446685,43405318,870371584,-23729966,-1772349815,1692979763,570854654,-1981099625,-1902691818]},{"sector":6,"length":512,"data":[-1080655866,-1279393784,8436048,-1329355277,136219393,868823918,-30414638,-1986670941,-1953116138,-2082960438,-779931453,-1774288128,108265622,-2096053373,512295121,243897832,-492726806,-232327275,332923797,-98661942,-66156139,-1779129963,-1778112777,-904669181,-1777590647,-1777463671,-141162847,60167718,-1983245352,-1986650594,-1583996914,653760024,-670853592,512346643,243897904,715232818,975632278,332923798,1109297610,1141803414,-1774411370,-1773394185,-904669181,-1772872055,-1772745079,-141144415,60186150,-1983245352,-1986632162,-1583978482,653760096,-670853520,512346643,243897976,503551610,236164866,512333572,243897994,-2069784948,-1809385578,332923798,-1675720246,-1643214442,-1768513130,-1767495945,-904669181,-1766973815,-1766846839,-141121375,60209190,-1983245352,-1986609122,-1583955442,653760186,-670853430,512346643,243898066,-861825324,-601426026,332923798,-165770806,-133265002,-1762614890,-1761597705,-904669181,-1763434871,-1763307895,-16729661,125293067,2013200445,1355320066,-1949988014,-255006505,-1054123942,-788473213,-773205527,65655273,197823481,-1009617464,1224887435,-1336858762,136219392,139234158,-402238325,-1957036887,-503902140,285623297,-1957361580,2089488492,-5904370,-490814627,-3348331,-392825666,113180614,-4134762,-392816450,717160378,-4921194,-392807234,1321140142,-5707626,-392798018,-2067857502,-6494058,-392774978,-859897962,-7280490,-392761154]},{"sector":7,"length":512,"data":[-557908086,-8066922,-1962889021,-1955723234,-1953116146,-392835562,1048837169,1946195606,-871971066,-1191178091,-628359120,-392847688,1048834062,1946195606,1095947,-759637364,-268638059,-1325435928,136219392,2047773550,2014743446,-67901290,-1953037663,1435960342,-1962932035,-392789954,-1767768333,-1734131562,-1768505706,-1577118232,-1556048216,-1463904598,-16193386,1448199005,-964485545,653079043,-1958343542,1100406846,-1763701247,-1763176959,-1763043709,168230656,-1912190569,529984518,-1070422797,520560298,-1017553313,1614118,436615974,643265536,1457803,-1977202197,1946369029,1963211780,-1777819342,-1776933129,178385035,512630423,76125716,54889254,637682825,-1996143221,-1960901564,80118775,-31768,-6942714,848693254,1300899565,-947699449,653853447,1588795,1388556402,-1771921066,-1771034889,581038219,512630422,1143707246,105154820,1778843423,1644625814,-1017487722,1654740562,1881601942,-1578071146,378246690,-1910598146,-1986630114,344523844,1166747167,651725570,1443331,1465274707,-947652469,653079047,-1958277750,-1953017290,-1953017826,513204246,-1762910578,-1494001839,309614943,1928477507,-337956092,-8617970,1189704704,1015085035,535393536,-164376013,494197515,135674690,855929494,-2095911982,-1910634810,999691294,-394977508,-1756097021,1499357002,512630363,1418303086,1516117762,1381061571,-1776639658,-1775753481,-768354165,139299622,-1960426781,1963140660,1837835780]},{"sector":8,"length":512,"data":[180847366,639536670,92939926,2025851463,149657603,-527794396,1191545382,1946157117,-1993373429,-2092825993,-268237629,534438469,-1776151039,-1776675327,1532582494,915089091,-1960443890,-1157623786,-230948865,-1960433037,-8190340,52196607,1015228153,638874879,1946311995,-294133,-1293417612,-19601154,-2080411928,-756348730,1962933123,-23074557,-1771396669,-1772210549,1545506334,205818262,-1777295073,-1778108789,35556894,138709398,-1760911073,-1583918941,1386452704,-1777294953,-392735581,-1960378874,637540366,1707579,2028471156,512435967,-1960443862,184561166,637892041,2887307,1543933446,1581157270,-1778474602,-1413248085,-1951678413,244034497,237737534,165910288,60182177,-342422522,-22986492,-1047811179,1645120427,82004374,65750855,-1951678413,1049340865,-947677692,33984002,-1274892138,244034308,378246936,-903112938,48480307,-1951677813,244034497,-481716728,-347650300,-1413467389,-1951678069,513170998,-1772347762,-1961997173,-1424028604,128696715,205425446,868233984,361440969,1962932867,512435734,-637337586,638028582,50484619,1334519490,113912578,-661925493,-1774567797,-1774713202,-1760162165,-1760293333,65257523,-1416162143,1202438539,-18361,-1413248085,128696971,-326412861,1443032195,-1758027433,654198409,-372174965,378218049,1128464422,188189478,-1960282890,63407102,-1977162702,1207436037,-1756875205,1048579702,1946261318,1995586308,270002179,187992870]}]],[[{"sector":1,"length":512,"data":[-489130506,-1780178483,-1757673941,-1712782473,973486848,-1207535977,-1360461701,868780884,-13433152,-1759377778,1988865011,906923006,-473027689,-963948254,-150992711,519605217,-1759764850,520373643,-1759902165,-125050671,1185662603,-941694375,26682886,671532977,-944684393,-392748026,1010207664,-465663081,803753877,470191862,439782295,-1948349545,731245582,-1960647730,-772068354,512630503,93034274,1958742815,573197,-125048841,-1962621053,-498684986,1583286238,-1017256565,1431393879,654216019,638670219,-401652341,-259322957,-2145481186,572310,-661920777,212929139,-645078317,-628174589,1334511498,534378243,1006633661,-1122798333,-1293418493,-2084009110,-165280575,41156869,106643777,-1779431794,-1080695647,-403242999,-1014237045,-1413051477,866894219,-980702272,117376938,117413348,1499305452,868441950,-1756847168,88357158,958806644,880022340,-967354797,26692102,323783462,91523878,-2093743322,914949318,-24406200,839108483,92940004,-397936637,-141881683,-502675837,1532911589,243992259,-481716764,-268005825,638869,-1779681653,-1780206037,1569400390,109970946,146314880,-1947994368,1359770584,-489485135,-788282996,643416718,1965899648,2005476868,-947714292,-773700087,1048822535,1963038518,1185006337,-1760648298,-1550434655,28874514,906377984,-385650025,-1185939257,-503906296,-1910581109,-1953031138,2005598847,1465261830,204901158,1963140608,1049306625,52822030]},{"sector":2,"length":512,"data":[-1910614212,-1953031138,1200292943,522160898,-1583922013,653760062,-125069748,-1936331615,1243516634,-1996125802,1300825181,-1960420602,1141057031,138774786,38767398,38546214,-165258402,41158660,1300875571,-2454006,-392827850,113704661,-1593796790,1017353700,-1779654249,194452131,-402426661,-1070334398,89951014,225762059,60180129,-1550430714,887658306,-324969987,515976085,-1773527410,520242569,-1774319873,-1773795585,820592728,236358655,1175358359,1319192982,63439766,1993423824,11004163,-1555512693,-1031039170,-1760426453,110575779,725701201,-1077769270,109969412,1202427676,-85835705,-1759115577,113750470,-1308322008,-1759246649,915124653,1049335570,-397437378,1499132842,-1759770994,79610507,2009152256,1015752213,-1757528533,-405674031,-1425881213,1074054787,-1031018517,103536779,653760320,-125069748,-1912289405,-1953084922,-886357551,990219046,991589059,722892738,-778617338,-1948200480,512630512,1149998876,-1993990398,214401797,-955786526,26686982,1141294848,-1023410025,-141148511,-1953084378,651310072,184835211,-1957530405,63341555,-1977160398,1190200076,41714470,115635200,1459915558,-1912601921,-1953030650,-225030642,1341116847,-1906325621,-1416214010,-1951678413,-21451838,-1070355457,-1962431573,60182038,-6928874,-6930938,-342473210,977177510,512630422,1435080248,-1950146812,-476670450,109971016,197105316,1166681600,1962949642,-1960421582,15621,-1912200076]},{"sector":3,"length":512,"data":[-1147750906,-470351870,-1960380277,768773,-125049865,2105550343,41222154,-1977165589,643762757,-2096478840,-1042150457,244040455,-108816746,-385649408,-1912209221,-1080646650,46006283,1032005120,641496064,-1912207989,-1164541946,-487129080,1946221187,268483343,-138245296,63147235,1489211096,-1960388469,109969735,-1993959754,46564100,-6903135,127314438,637896998,101074315,-1769994610,-150992710,16417762,12259188,-1031057392,-1014176777,-1014048765,651725656,117524363,105220390,-502544509,179852,-1767240053,103932745,-1766455666,117738278,1358957503,-1768550773,105199910,-947714700,-1577721333,-1054108010,109971008,-1993959754,-2091317500,-807271738,915129095,178361860,512630423,76125698,915088927,2045247496,-1778474505,-2087239005,-315489338,51153446,1273513713,-1773755906,-1583936349,279156286,-1779654249,-1550379869,-459172070,-1757633643,1252180019,-1758813545,-963163997,26691078,169773862,772196096,-1593835369,816027296,-94771049,-1768538493,103969792,-1765276018,-150993736,-1953055706,775848920,141820055,647442593,99288969,509734,-1758551808,38242598,-1765538049,-1766062337,-1779654393,-1550379357,-459172070,-1757633643,-1757018426,512435712,113704998,38702,169753382,-1593216000,816027296,-101586793,-1768538493,104690688,-1764096370,-150992712,-1953051098,650130392,-1993996407,1048773191,1946195758,-1758420727,71797030,-953809173,1095,647442081]},{"sector":4,"length":512,"data":[-16365687,-6892026,127323654,-1550455647,117348120,-1578592470,-78255877,112835,-1550455645,279156222,-1776114794,-1550432605,2091095658,-1769036906,-1550409565,-995912014,-1764318314,-1550391133,-89942262,1260816534,1141294999,-2013265769,-1953026778,-1905404386,112835,-1550371165,446928356,-1777818730,-1550434653,-2036099486,-1768381546,-1550407005,-828139844,-1763662954,647426723,540299,637781891,-134019702,876513607,-27858793,-532760,647364102,269963,125098763,-184096685,-391582885,585694580,-1090052355,-71789154,1048816466,1946195606,34191365,146277355,-392058110,-367621226,77206,-1426007421,-1582579061,-1421306102,-1953037663,-1181285354,-235470840,-1769692757,-1780309589,-1589164117,1202427470,1007027015,413248406,111258518,1319218070,1621207958,-1070355562,1048619947,1946261319,-1431590139,-1582626581,-1330942462,-1582585342,-2085906704,9868862,-1085859980,-1767795246,-1465799786,-947672170,-1766153980,-1764974165,171754411,-58710923,-1341885184,-2142049522,74777340,1240142000,1963261056,-351293436,117211200,363869557,205273067,-58708619,-1341885183,-2144670974,74777340,569051312,1963326592,-352014332,117211160,179307637,-58716181,-1341885171,1392962310,-682502725,-1008455077,141934603,74830347,-1023409736,-1960387961,1004177183,1953380374,178841605,509022323,-628164469,1703544202,-396419327,650379120,637949323,-402373237,-259324801,173378342,138775334]},{"sector":5,"length":512,"data":[503608040,-1979949371,1200162423,1166747144,55019778,-987839713,-1960379298,1200161349,1200113667,516103941,108888870,855930112,-1962677258,1590030966,1166747388,55019778,520517513,654311355,-2096728693,57999614,-1962888727,63407102,-1977162702,1207436037,641007398,1392671872,637930357,-695532401,-351582835,1435182600,1166747143,66447365,-1996189914,-2144929210,1951597180,1166747181,-294143,-1019534220,1344151671,-1896593781,-1147760098,-470351867,130472075,1200183360,55035649,-14745600,642839622,1392671872,-1960442251,82512205,55413542,513215137,-196703408,-1768808818,-150993477,-1948742685,1200224838,1200183299,197145089,-1342016055,520587392,-196673701,-1946973208,1962281969,-11540221,-1960436029,-1960441259,1692928069,650676995,425347,-164428683,1988821995,-1767857678,-1767495945,-1532897141,-2082959722,158597625,1204227977,-352321278,509705,38258432,2005467136,38177540,637945737,-1995422325,1204160583,-1960900598,-6905802,-6907898,513187846,654073541,-1996339829,2005467975,-4514042,1972053759,16679686,-1226243211,-2080470272,-466484281,50694694,-14268424,2088773172,192238338,76490246,1166923403,638118667,638014859,-402307701,-1893334333,-96040700,2088773200,477451010,272465958,113643644,-1560176851,1122539307,755418630,-1960443753,82512205,55413542,513215137,-196703408,-1768808818,-150993477,-1948742685,1200224838,1200183299,197145089]},{"sector":6,"length":512,"data":[-1342016055,100017792,639464464,490883,1275855988,1208746731,537261606,1108083316,1074132518,1091306100,1528760200,-386644225,-242486700,57996811,-46359,-1013502458,-1756690746,29681665,650284038,-386382453,642779182,637685131,637814155,-402238069,-165216934,1946285381,-351948284,-1006521854,-970523554,-1993986809,-2010774705,-1993996969,-953809337,268439111,21481254,643301376,117983113,1435182787,1166747142,30795780,-1977159541,1371847429,1589976791,108497404,38112038,520308617,-466477373,-682502725,-1979943227,-1960442300,1149829701,1166747139,138709252,105220902,638207113,-1995946613,-1960440764,1149831749,516103950,-939755835,394820,71666470,638076041,-1996071541,-1960441252,1149831237,1166747148,239372554,38112038,1006847113,-1341885180,1008528134,-166890238,74727623,267060656,199952816,1950402550,-352014332,-2012696574,1472405252,240487206,205884198,1963349563,71711493,552085364,-129595135,-2145481186,572310,-661920777,212929139,-645078317,-628174589,520898443,-336181623,-129579174,1183514634,-163149326,139299622,415728449,-24381557,839108483,92940004,508033027,-1760944501,-253564845,-1896593781,-1097428450,-420020219,-1990659957,-1960443580,1149830213,312835,1963063683,-2147170813,-196673761,-964429941,1606148616,-59325154,640222406,-1996339829,-1960443068,1149830213,1166747144,172263686,138775334,638207113,-1995815541,1183517764]},{"sector":7,"length":512,"data":[105155064,-1980348789,-1021375420,-1756676480,-971803391,9915142,-1758839168,-2144635647,1083657230,113648875,503682892,-956539195,1204229639,-956301311,262983,1073890955,-2096740471,1586038979,639508476,637949323,-402373237,-1605305498,1590007628,587712252,83911,88573952,38112038,1476609929,520505225,1975520195,1976699656,112644,-2024779069,529213146,373021319,91516472,1929768424,-1957210076,-628220168,41713702,638219603,2081439104,-351227900,-1979348478,1595867493,1526375400,-1064546109,91541563,79987544,1431328963,-326898549,1364612879,2088773203,209015554,272465958,1187382908,300617969,-1957212154,-1030880130,-2012902874,1482682694,75401991,-2147054074,572310,-661920777,212929139,-1047731501,-1030827773,-1979824500,-1977156514,130190343,57982986,637573609,1392671872,-2036263052,-196703850,-1986621791,1302458950,-2046426729,-1912209002,-247035242,-1960910710,1371847627,-1897888041,-1999008806,20717351,-1897396875,1012788218,-402295550,1424751297,91554620,-335833368,1963342923,-23795707,272384747,-1075313291,1010428924,1007186952,1006924804,-402295545,686554371,91556156,-335905816,1963736095,-45619195,222041835,238814324,149423477,1007283197,-402295537,15465861,1600018779,1482548619,-1023097725,134608422,1183516277,-196703750,-1756690746,873892609,189107607,-1979804952,650377286,1963081088,-1960393983,637537310,637623555,637687691,52830091]},{"sector":8,"length":512,"data":[637537822,-12777589,-1023314433,-2081649835,1392905708,1573135952,-967309809,184611654,-972786472,1476522822,1187448667,50331892,-62486078,2793766,855525001,100017856,-1342016248,-163149816,-1986590047,1048640070,1946261293,-298915837,40143398,604342822,1963211839,-129579253,1187381280,1961597175,963969084,32734848,113642101,-402548916,535560006,519587527,708739072,74776983,49835651,326992678,-972524544,26692614,-1325452824,-163182064,-336116088,-209813449,-972393215,93801478,-335606296,-129579233,1048576031,1963038506,-126975228,2105746946,141819923,-1756625210,-17242107,1175064752,-146372362,-812924020,-1779431794,-1080695647,-403242999,1183578251,1048620026,1963038509,-1758748411,1183515627,1183558648,1183558652,1183493118,110013175,916559644,573335,-125048841,-1416150367,-1582579317,-1951689236,-5508026,-1953024506,-3961095,-6953978,-1953108986,-1581031963,1183421924,-469303298,-335085675,-1760910955,-386120055,1452010792,-163148808,-1979904280,-1912145338,-1953107962,163577414,-1947732224,-62485512,-96040021,-1413379157,-1968454773,128643398,1963343043,-1009634557,24379964,-1957474109,63144922,-1977162702,1138230023,-1757143493,-768408459,1460020203,470191697,-1758027369,146786443,-1947732224,149914616,39664422,-1960380448,1599669333,-1017619705,1448235344,-2080470185,-1363278905,653079120,-1494020726,-1031004299,93799585,-2014838773,109970946,146445952]}]],[[{"sector":1,"length":512,"data":[-1948059904,-1759862280,172329254,1516134151,1438865497,-326898549,1381061391,-1977199017,-58719644,1999794768,-4181453,-392758730,1918436542,-247019996,1166747141,-129595134,-1996125402,-617351610,-1761997253,-1960441739,-1960442275,-286784435,11725310,1968307328,-247019963,1166747142,-129595134,-1996125402,-617351610,-823604941,-96039938,1996496957,9103619,-2147054074,573334,-125048841,212929139,-1047731501,-1030827773,654067339,117523849,-58693397,-396659374,1584530587,-1757135229,-1962052608,647447582,2081439616,-15407101,1460062347,-1476031962,638415888,637754763,637631883,-320141426,-1140936984,1607946725,1245609991,41222551,1183320076,651856881,-1996012149,-1960380346,1183384901,-29103882,-58717973,-402426029,1600060633,-1956947622,1371758053,-1927391402,-315489163,1091340838,-1762509173,-1762521599,-1761997311,-33124858,-1527570538,1595868958,1371756894,-1927391402,179897461,-230782208,-233963114,-99745386,109971094,-216033538,520560292,-1017553313,100787250,-964454940,76162563,100778238,-293366048,-569966845,-1960393834,637540406,1717819,-1960432012,838866494,1166681828,650182151,1912814976,1031808530,-15960316,26664454,-6889466,93718534,-134021113,-646775237,512435907,992346136,1962940958,1364443905,238455590,378217984,-4653040,1945254911,2089494060,-31994,-83681676,-12811482,-1960438156,100730949,-1960405478,-1053097403,117376628,-930376094]},{"sector":2,"length":512,"data":[-351746429,-1017423408,37584934,1405288821,-1960422831,637537310,637623555,52830091,637537822,1962884995,-402542509,117440310,-1960405442,-92073643,638612736,1024411019,125108224,326992678,-1960414208,-1919470570,28379973,100688616,-1004122029,1476792157,1532549131,638219271,1963460086,-469303548,1569400469,1960512261,58779651,-1017423526,1913555793,186704790,184841664,504919250,538873430,972436375,956658948,175374932,-502741373,1495228146,1284228089,71600902,-1994432776,1503087886,2088773315,175461122,272465958,280298620,372968427,74815284,24626747,-1030991165,1526703592,-1957300621,1464881900,-2091691690,-2144992020,1968374396,1031808522,-1257997296,-1258099952,-1770872576,-1757936069,28837490,1103096064,-150992710,-1980199966,-1945701818,537300674,-62485609,-1413313621,-1761339765,-1147731295,-201916408,-1070355648,117376939,2123077234,-2132528388,125108477,-1979348442,-1979520024,1370733509,33948119,68584343,-544538473,20759946,-1960436363,-1960442281,844170311,-11933495,173509414,138906406,1509900008,1006724841,1008694274,-15174397,647403526,688003,-2094659723,1946159231,-1442382071,-385619050,-4521822,1972053759,16679686,887686005,-263796991,1191116800,-390057232,-24379994,839108483,92940004,1363671043,641007398,1392671872,-2144987019,92016701,-1243065420,-1893333503,-1915319548,28379973,-1960441109,-1960442027,-919468731,654229224,643368079]},{"sector":3,"length":512,"data":[1392671872,-1960439692,-75300539,990344447,-16549949,-661917626,41713702,637957459,-351701621,1972053508,1979058947,109971081,2123077408,-263812110,105220390,-2046426873,10611094,74712636,1349849148,1946286464,-226587870,101238659,-1759508850,-1414807501,-1962431573,1913061371,33981334,377686167,637572868,637949323,1359234443,-905197429,-919468684,654193384,-2096607861,41156857,-346487829,-569507504,1240160662,141822012,74712124,292882236,106400550,71797542,-389467567,-346423805,1963932716,1468737064,1200301582,-27903220,1178278773,639006204,1074284427,-1769601535,537300486,-228684905,105351462,79987463,1600018779,-1017256565,642995974,637689227,-1910096501,629810695,-2147000485,1064438268,-1073080713,-1977217676,-466484155,-234487488,-399840362,636222457,1997274240,1958742544,-234454265,367725206,-335803160,268206096,158666103,91537418,535347250,-104597252,106125251,-1476031962,638415888,637754763,637631883,-320141426,611778876,-1960441996,-352316898,512435717,52822032,-1960443043,-49913,52826996,378208581,116092418,21349414,-336018804,1527249153,1364443999,-58698153,2002285136,-11737064,28332402,654031336,637687179,-919468661,-335740184,1375502398,28316533,654025192,637687179,-919468661,-335746328,1392279590,1894259061,-1340312833,-75175935,123046694,88443686,-857159374,-2146898948,58151932,1593577960,-1017423521,-1960421801]},{"sector":4,"length":512,"data":[1105842447,-1960426685,1962281783,-2080470241,-466484281,50694694,-1977202696,914948708,1911068466,881534719,-512362997,1600050914,76228291,-1773257077,-1030953007,-1759639922,-1912239834,653669058,184841355,-2095680266,-1977220154,1190265620,41714470,-1543168,-342475258,-459160606,-502922859,-435799147,-1560055147,144807398,101056918,168180630,-1560055146,446797322,403046806,470170518,-1560055146,1050777116,1007026582,1074150294,-1560055146,1654756928,1611006358,1678130070,-1560055146,-2036230556,-2079981162,-2012857450,-1560055146,-1734240632,-1777991274,-1710882410,-1767202410,-1767373311,-1767111167,26655905,999733766,1922481670,-1765891325,26660513,999738374,1922486278,-1764711677,26665121,-2087254522,9898006,-1763572165,-492633230,-1762483818,-1762654719,-1762392517,-190643342,-1070349418,-1550457693,446928392,-1774279786,-1550425437,-1734109562,-1767201898,-1550402397,-526149938,-1762483306,-1898410813,-1194183744,753402880,504793569,-768407913,-1931412760,-1953030138,-1177406526,-235470840,127350947,-1631600589,23378325,113748723,16815874,-1550383965,144938758,-1756913001,1842749067,117425038,117413454,117413562,-2115463476,1048782591,1946157102,1191626245,-1960443497,-402651082,-964429394,652489219,-268237686,875989318,-26613609,639535910,-30611456,-386290712,-1914111517,512435966,-620036092,1923198581,571798,252043767,-754667264,538348520,-1982856297,-2089957866,9868862]},{"sector":5,"length":512,"data":[-1070397323,-1550402909,12818124,0,118904662,-1174613461,-1510801404,-773795411,-1410805294,1583328146,-326412853,637820612,-16220287,-1003653761,-2128214946,-2147481985,1589910901,1065559556,-1005292288,-2094660514,1962934911,73319434,75465510,-1207602176,48955393,15450163,311901,-2081649835,1465260780,175555870,-1696039283,480313344,-1928956219,10155134,521969920,-1914145139,1183511678,-28954098,855525000,1183380038,-263812338,1039949451,712212479,2147482497,-1019537805,1317670003,-229734146,-1812963703,-619972729,854279799,1183577995,-263812612,-1979824501,1183576646,-62506000,1183521909,-28951566,1187452020,-1207959310,12255232,47360,-373292870,-1959395068,1552627204,1284191746,1418409476,15919366,1077789483,-1998094592,-1959336378,1569404421,1300968962,1435186692,-414792186,-428965888,-2011595768,-997529786,-544545910,-846530166,-695539062,1853882550,-411236122,132540032,-355397516,-607004207,1590745297,-431030553,-13897611,949888,53879157,1544762884,1276327426,1410545156,-781683962,-774254118,-791096869,1191176030,-2141656080,906097270,456524843,456524380,456524876,410191444,32667264,-772287753,-789064713,-169386250,-552351981,-686567661,167788734,1311013110,1724913268,-774843929,332517843,-2081392174,1979793646,-1878201360,15746759,-230242816,-803214592,-954996890,-820781293,91477779,1191172817,-260144656,510885887,15761027,2126782324]},{"sector":6,"length":512,"data":[-1817445366,-1834249813,-263812181,1175118033,-1412902414,1187452651,-343932944,-263796987,-1070923776,-930359157,-756297589,-443851169,707165,-1326675115,1996443648,175570700,-16222465,-401734026,-899809758,-1957363704,1342288108,-15960321,1996425846,108461832,-32970738,576093,-2081649835,1465260268,175555870,-1696039283,480313344,-1928956219,10155134,521969920,821972618,1586229838,-263812100,1937768253,-294609,995718015,-1828621629,309641227,-30555389,-351571393,-4222859,-2147435905,-13957653,721420474,-1948742720,23980488,16547459,-1927934860,-397350842,-1072956077,1122697844,638213828,-16226431,-230230145,158597375,638213828,554881,22276480,15761027,-1927934860,-397347770,-1072956125,317391476,-1954545729,1586230342,-129070090,-369469813,12189975,2147467200,1183422955,-1946211344,-151548977,1954608966,-397505786,-152406389,1954605894,-196214001,334919187,-146344193,1325495424,1183570731,-328796172,-233584637,-1962879101,-1072957370,1727469428,331875304,14124018,-134723957,-268178842,-746325485,-196703488,65955575,-2080762896,1183514835,-328796170,-99356669,-1962880125,-1072956858,1727466100,334496744,13861882,-1957246677,-163148815,65955575,-2082860040,1183514833,1958743032,-328796393,-636225533,-1962880637,1727526982,332923886,14058442,200951435,-148605760,-133961114,-779888109,14058240,-134592885,-670831514,-696006125,-96040192,65955575]},{"sector":7,"length":512,"data":[-1947069496,-1956735018,-770969474,-783348872,-774843930,-774778413,367448530,-746389504,13730560,1929433731,1205522691,2147483521,2112422770,-990409730,-1409545602,-1416516717,-778654830,-230290720,1605093585,1575324510,1426065610,-326898549,-950577624,64582,175555870,-1697087859,480313344,-1928956219,10151038,521969920,853689994,1183379014,-327775238,-2116008309,1937768446,2147433769,-167037325,-1073017228,-33214860,1925589823,-1874728171,-1098907718,-1072988160,-4583051,-1073693057,-768931349,-12716501,737113215,-1948742720,29747656,638213828,-16226431,-96012417,158597375,638213828,554881,29223296,737691273,-564753463,1005221515,721647602,1183531478,368506844,-854458367,-1979756920,-1957628346,1586226246,-1961761818,1177151574,-631367208,433870361,-220012938,-1981352098,-1819083706,-670832905,1183566355,65468392,13796296,1727501970,-2084174870,1579876562,-632415272,467420699,1586093654,-632387112,-1948498295,-151524746,737605521,-1038878254,-802436589,435443337,1585509966,-1957691137,1586226246,-1961761818,1177151574,-664921604,433739289,-220013450,-1830357154,65468307,-1949690920,-419960762,-763115517,-141127168,-972821914,721474179,1310456926,-632939560,-1982048741,1317665886,-632911400,-135629173,-151547402,335139371,-1983245374,1308750406,-162131468,-1761651184,-1830398325,-471310709,-62510837,433610265,-169682346,-1819089161,-670832905,1183566355,65468394]},{"sector":8,"length":512,"data":[13796289,469524011,1444665414,-60913190,-1948760439,-167516042,-2081786229,74645718,300669575,-791551023,-151530799,-772343917,-791096853,-17954,-779423349,-789064713,368434934,1578303488,-196209678,318141971,-355401898,-556724877,-607004207,-556738351,737691391,334889727,333386695,-2131291185,1451950290,-1107004168,-2126348288,1920991226,-31397629,2147482241,401146738,176080126,-1416385540,-1416189039,182505874,-925763002,-1956749397,147480037,-326413056,-987867306,2126776950,138709766,139823910,-523117781,-489563184,-930357296,786680331,1031790394,-1036307844,829893234,637944971,1963345211,71600925,71645990,1149965429,1161504258,-1962183422,87762436,-1070922635,158798571,158718730,-335544392,1977289223,112887,-350240757,1566465792,1426065610,509013131,-1962510651,1418396740,3965702,2088963957,158662658,91586472,1946273014,-2134900198,-763166508,-787451136,-2567718,-4519868,140256127,-1340968893,-1982125312,39618844,-1996209015,-350288300,-1161811193,-403996672,80371038,-326413056,1443556483,1992629847,-159478518,96012054,-1510736896,1183651359,-401714954,1586233221,-788483586,-774778653,-294421,-2128382849,2126545091,-294609,-1977451264,1183579518,-788822277,-773205789,108971227,-1416385540,1586108651,-1209806595,-339727361,-16729112,-504643541,-1070867669,1583340523,-899816053,-1957363704,509040364,-1962510651,62259524,873132066,145228917]}]],[[{"sector":1,"length":512,"data":[67444340,723088128,56365531,268786705,208865116,-1089977089,2082701311,191907592,80148516,21268736,-1995445473,39618844,-956015479,-2147482044,1583345387,313949,-2081649835,1465256684,175555870,385253005,375047,530969596,-163148522,-1981280688,-146371585,-1946583413,1451948878,-27358211,2147476353,2147482497,-1014936204,1115603968,134216577,-489665155,-623842351,-209008886,-271458421,-623781679,-607004207,-657330223,-640558383,1725029329,-788523778,-774319633,-774254118,108971227,-1416385540,-1416451183,12198379,-2096108800,-355368990,-897324335,-1174148128,1725038560,735760894,-1948677175,1607658433,1575324510,1426065610,1465314443,175555836,637831974,721573003,-773664266,47918046,-2144176930,578093054,-109057149,-225781040,-393554806,2126774449,-1413469434,-1834249813,-16411733,-1413084353,-661969685,-604513782,-348127045,197823447,-2096204600,-355434517,-770523133,-347355016,-1073628169,1583333611,576093,1458342741,1992629847,108971018,721835147,-773664320,2106457560,92874248,-355269199,-92184204,1148454911,-360640333,93455359,187056127,1418439429,266764293,1284240138,22842115,11543690,-741220143,-758001199,-741220143,-758001199,-741220143,-758001199,-1416516718,-1416451181,-1873286369,-2096735094,1544228835,39586564,12196875,-1280347072,-1968444656,-477952420,73141007,184704011,-1174047460,-1762934783,-2147134325,1284181990,22842115,78652554]},{"sector":2,"length":512,"data":[-456079106,-774777903,-193342957,366672,84616764,11557035,1583324907,576093,1458342741,1992629847,-1962636534,1284178524,106203908,48927,310170123,-922016385,-620027531,-1073013387,-164947595,-755548693,-738733577,-2081040137,-779943725,13796096,-1107295809,-771030976,-779679115,-2087466105,-219475730,55446392,333124544,2043810761,-20545035,199676223,-993078793,-1409546626,-1416516717,-1416189038,-899850657,-1957363704,509040364,-1089833275,2082701311,-17858296,1073709887,-16054145,-768929923,12190699,-1950340224,-339178536,106203977,-1962652533,76218972,1999695747,-1950119152,734694361,281510866,-410782850,1960834831,281510670,-640554287,-657335343,-151683249,1954548036,-134862063,-137234478,-170330157,-837558765,2126829075,-1817445370,-1834249813,149914539,1566465823,1426065610,-326898549,142016264,369522431,1358448269,-10295282,-1711651189,1979471419,-27903221,-1953364363,99350598,12238891,1575324544,1426064586,-326898549,142016264,369522431,1358448269,-13703154,-1946663285,1317796438,-28439556,-4717196,-1949266945,80371173,-326413056,-1962349437,1183386182,205949944,-1711651191,-1979951479,-1927872938,-11470778,1996425334,1877478918,1575324670,1426065610,-326898549,172395272,-1946663287,1183386694,-1983894534,1183448134,1183651582,1996443896,108461832,-29300722,-899816053,-1957363704,-1000909076,-1960441218,182135573,-1962379822,-1949594637,639036371]},{"sector":3,"length":512,"data":[637695371,-1979429493,-2131391746,-1031700250,-847233154,108971136,-1413469188,-1416189037,-1416451183,-899850657,-1957363704,509040364,-66423099,-1382830675,-1382896239,637045535,2116911103,169637439,-1978436124,-2132553497,-779943724,13796096,-1057091213,-4715147,721611775,-1949791296,-788075568,-773336606,108971226,-1834249813,1566465963,1426065610,-326898549,-1957210614,-167048586,41510260,-25043209,58069895,-1156347970,-568131577,-472783919,1374471041,-16615425,-163148489,-1751494634,-1323482623,-1074867453,-167030260,-288287372,1183648883,508565238,39361111,-947708767,-991433974,1342572102,385238669,176063312,-1710786304,480314435,1486489067,1595711746,1575324510,1426065098,-326898549,509040140,-66423099,-678691021,-544485493,-1980465527,1017968254,1013412400,744716089,-619997136,-922017419,-771021963,-1164501131,-487129078,-763103229,13730560,-1962880125,1174533702,-2117080076,1930218747,-405712852,-774778159,1364448209,-405711022,-774778159,-405679151,-774778159,56153041,-804038408,1489507160,-346499053,-163148869,-196738752,775722219,2122517365,91554038,-336179457,-125924987,-1980082551,1586101326,-193033218,74728764,913663292,-1968383181,1949121736,1948990497,1915763741,2000239644,-386170600,739406595,-472803280,-472788085,-637279279,-340994045,771326176,-604568971,-1927283965,1343682630,101074628,39504,12066114,2113420272,1358441229,101074628,1022544]},{"sector":4,"length":512,"data":[-1000923801,1342572102,1728057242,726177309,15403590,-443851169,576093,-2081649835,1465259244,-2088763208,2130710142,1226758,-1995553145,2126835270,-226588410,519325324,-1928300859,118945406,375292,-1960860173,-919863738,-774774575,638222020,-388952695,-12776844,-1173196161,48988159,2126828075,-1430246906,1944699531,1073687809,2097158973,2092960524,-330905848,1189806088,1292941968,-1265374473,-45708723,-453582640,-763116797,-2082932992,1451819218,-296338452,146718332,-1192088832,-264564736,-265613956,-163148464,261771286,1444767488,385238669,1022544,1720261991,2013680,738086442,-160003109,-1946648949,1452014150,284787708,-561311886,-125044853,-768884085,1947265411,-315927276,-657331503,-556671023,-573449263,-846466334,2123192157,-1861806346,-1767140437,-1196730197,-1851047938,-991142261,1988883070,655407366,179958263,-168390044,989197970,705327813,-1336917051,5892145,3663960,-1980998007,1183707774,-2142234890,2013330814,374347277,39504,1854086466,109920510,1344164464,-1593681766,-1950340324,-25263664,-1536016385,-385920279,-1970143231,190700,-157760118,808453617,-1979710744,1966095556,1962818308,1325378054,990542862,92204638,-1142308021,-261714946,-160104901,736035663,1031808734,991392565,1340568830,809336870,334230900,100542031,960331814,-29685386,-970526091,641937669,83398,15451019,-443851169,969309,-91491445,-201586914,-1948349532]},{"sector":5,"length":512,"data":[1448199127,-208992681,119470731,-56298499,-678699381,1499356935,-1224280125,-1023409918,45549303,-138215422,134395654,116900608,67109559,-286783372,-402426625,-138149918,177926,-2120432888,268613390,-1664901888,48695031,91553801,1509062,-418479872,-2130704126,6414,-389833471,468196319,-1767783676,9675522,45162123,43392649,-1560110175,-1281294187,43754242,243974955,-1053162827,-1047920010,-1593732189,-813038964,-360000973,-503842166,-1023163645,-1023243613,346210355,48896,503324089,-1426850809,1949504,-218103367,-18262,-1191174465,-1426915325,-1090480200,112787490,-1330908416,3063552,-218081351,587646890,-956293629,503530502,51749376,51775174,772195850,113640192,-951123917,218206470,-1962889206,-788351730,-1342129439,43531904,-1610255353,-1196031103,-1996321118,-1996321778,-1023244266,-1560095327,329450257,50963203,-1560081501,262341389,2269955,-1560271197,94568490,419874563,-973078528,197638,2361031,645988503,-268500297,-18237,503760464,1609105152,-17569790,-1591912472,-1767702381,9806082,-402482269,512435436,130417379,282650650,48569993,-2061071528,646562560,512426117,-1957494043,-956112098,-955642617,-1476359418,-1224280284,1946165250,-21829626,-967709861,-16771322,45549303,91557888,1509062,-1223786240,-972029950,16784646,1543409640,45549303,443875840,2373375,50607871,1528650216,50601608,605981019]},{"sector":6,"length":512,"data":[498526208,-672657685,-1224280305,1946173442,260368387,8726155,2367115,1979662208,-1896120053,-402296063,-387246405,-400844824,645995008,-9502695,-402548248,243335758,2097847,1912652264,2025477,-998979861,1392649403,2734930,-1191170630,-1578565624,19261693,-399798296,-488105124,1948269821,1946762249,854085637,512448512,-75431900,611516815,1962775272,-689418235,126375952,1963801667,473622537,-383871256,-1763173592,605980958,487778560,-148505111,6406,-2125171711,-16770778,-42800898,-1964488332,2400527,41075515,-1749362549,1004177152,-1978370854,1948269575,1946762251,1979661316,537380358,-1159140541,-634716009,915069575,-700841213,130421106,-889306359,-822212236,130477172,-1007490049,-399840280,2134645432,540804211,784025971,17286656,235374659,-1094823161,-402606815,173736159,1395750336,-1256002370,13756417,1975519835,-550058973,11883266,1526776552,343146812,91619132,401195403,3121406,57876540,-1007042510,208980222,52697275,651756505,-1007085685,-1677715736,-399867928,117316172,-2008874962,58039559,-352320792,710928534,861131125,371099867,244115456,-1979699525,1958742535,-1975300078,369524743,132645376,-922855424,-1017385099,1982080,-402426880,540811960,1441334130,-1336913906,240052318,-398457768,-1017639352,1640183,745865217,-343221453,1445514,-109042973,-972720637,5894,-2146553368,7742,-1981283468,-400510942]},{"sector":7,"length":512,"data":[-69071336,1445512,1375711683,1392520891,-1977198245,-1073068540,-393583756,616621440,1371668031,1125091923,74694954,1407961090,126505119,-1869610948,-847247755,-1876432096,1965082102,1086715422,1631329396,2101085810,539755127,1954596342,1916877837,2002729990,-2143278078,975626213,1175680260,1976172099,1537104065,-1342130855,-1342016257,39371521,-1245148479,-336526592,13101447,1640183,192151553,1648257,1323892734,-134515671,537048838,-402295808,-780850879,-2145265688,-16771266,113693556,-1140916201,512294912,512229386,1541931032,248965133,-398786373,1122504018,-418973940,1946159362,956349192,705502440,100711168,1275925736,543518313,285260544,1124927720,2124911,1962613480,419478285,1225586920,1919251310,266862708,-1156745989,-420995072,1684949260,7630437,1962607848,654359306,1410127080,-402627999,192215804,-399834949,1766198469,-402625428,259324669,-399507269,1851067573,1701080681,-150965138,537048838,-402295808,1987389581,33752224,-33549562,403061440,-1575652352,12255256,212658197,-1977545752,-1342130216,7333891,671371,141885195,2244155,175260788,788167,1049296897,1223164629,571378448,735195904,504198351,1359654919,2484311,510941535,792065,-401932101,-1041757086,203328288,-402280448,512426021,512294946,283705354,-1359807472,172102773,-134777390,537048838,-386960384,-378263555,1355006011,300417205,-989702144,-393606284]},{"sector":8,"length":512,"data":[367534256,1976434188,-75250695,1949347840,655407665,-1174399512,266863592,6601216,-1174402584,65536010,113152,-634666958,-1057094542,-637273877,809250820,-318110603,-838940812,-972303383,-16739834,973845480,-628424672,-1975258485,509495,-352014013,503760424,1397882880,-56825770,-967156898,-16769530,141917043,-402640992,-504689591,9578122,9569990,1019316736,-972786432,1019412487,-1978895102,-969277116,1157546867,1014164225,-1978501884,-969277116,126530420,1140654568,-352238338,1963146478,7071751,-1645479051,158678588,9578120,-349755416,1948400672,1948466188,1946237960,1963080708,4712454,-2130740503,302001982,1894365556,-1841397505,209059584,3139664,113703797,1476395154,1149948042,1912879617,-11409149,-2013182722,1124567575,-1963157016,-969277116,1021903731,24414975,-1962985751,-1073086140,1291720564,1065372417,-402427104,-1041760256,136316938,184528896,183026624,3270656,51709638,-396694784,-1511519408,1852392970,599392356,-18880253,-401915160,1699875476,1667329136,1769414757,-1174378380,-957807804,187295998,1326087144,1869182064,-1174375570,-1293417706,-1824617730,-385830143,-1226306938,-3872513,-956310808,-2147281658,-655883285,387901691,-1995786776,-956297186,6918,-485586176,952578,-720467200,34507010,51886848,-318099574,2129331061,126501776,343357756,275918892,179327128,1781495,-1547566246,1592459291,1008541416,-2147125929]}]],[[{"sector":1,"length":512,"data":[16979214,91575612,51711616,1968061444,353271813,1195115011,243272309,-2146958571,-553446106,91570748,51711616,1967930384,353271836,645931011,1375142677,51580555,3721,51449483,134793,1968389209,353271813,-838975485,1048806261,1996554267,453428998,-1962934016,-1610612194,279446293,512427124,-2136473600,682101876,512427125,512294928,988282896,-164990430,-2147281658,1676151924,352777728,41166851,251651307,41156635,-1957438229,-402649058,-396683614,1609111198,3336441,-166291992,-2147281658,116787060,1965556501,165603561,1393113576,1668440421,1953701992,1735289202,1953459744,1970234912,-385850258,378210596,-68681003,-484537591,167045378,619702355,116787828,1946288917,-1871713533,270437203,373352448,373090395,-166519832,33756422,-1930930059,476571657,1819305298,543515489,-835725016,2112041,-1190350104,-1360527356,-1155238620,-397344668,-497476018,251706353,-1190603288,-1763180540,-1156811484,-397344668,-497476042,-388895759,1592272016,464381961,108288316,1534348860,1508425451,-153884651,54857354,1398472885,52731985,-930430678,41111711,116837886,1963983637,270437124,1402886144,-1159199884,-1973855738,1958808261,54967046,-386514456,854071163,-402033372,645993480,-196583,51709686,1527018768,1539562119,-326412861,509040209,75416582,-66554171,520595187,1566137951,-1308620606,-1308431615,-571976961,141879316,-1000670325,-1945934538]},{"sector":2,"length":512,"data":[1959136192,210445885,1179007203,3288712,-1964506955,-1340705536,-964471295,-1947706620,529212928,1949615142,-338654692,80118552,1962962152,1459597320,-351998333,80118752,-806763541,7792887,-50071438,92992739,70919753,1048589428,1946157106,121251565,-92215179,-2029423615,8186078,-629804153,-317995778,-100464008,1925851983,-890551867,-1099773397,1207577409,-92225301,-402295807,-1233846186,-629814018,-1276584053,648276756,637695231,1461597439,-1006688536,41418534,641204006,637695231,350762239,-1031093249,-1259828328,1020365569,722435840,-812955654,47517227,-117632654,-100463125,48434827,57855787,-1007136959,1443256094,-521612921,-1010137090,-402454082,-1589442735,-1019543516,-1014300042,-1094515575,-336919797,-352121410,51363558,512483819,-571998174,-1962642681,-1996299490,-1107094754,-890765306,-183047937,-1593157911,295895074,310787,-1847005973,572427027,287213824,128903171,512427123,512295651,-303561965,308996340,-2129276183,268613430,169994496,-1961662488,-385677026,1575490526,186551059,332720387,-1961667608,-385676002,1239946186,253659923,331409667,-1961672728,-385674978,904401846,320768787,330098947,45549303,443809808,1124506856,512480139,300417028,512447232,166199302,-1019521024,-1007091086,-75381768,192348559,41343547,-397223285,-1017510243,1929364968,50063610,1509062,576514048,-1946157251,-352095016,1354993666,112322566,1049320199]},{"sector":3,"length":512,"data":[915079953,76153619,80107088,734956314,83592143,-2025782922,495577338,242416263,57985067,1577547081,-385578920,102692326,495511583,6503711,-873927299,1936278533,1969627243,-402625428,-605354556,-402639942,901511669,4161536,386320067,-639107072,-49887,24500363,-488090685,40888563,48434827,32883073,47779371,-2028041391,-622266112,-1956947965,-1962899690,-1983370294,721457166,486926538,488237212,-400395363,149422165,90236934,1869771333,1701978226,1852400737,1768300647,-402627220,1407780176,1958820853,-91516604,447743774,-234494980,1325495726,1138723663,51584649,512481927,512295047,512426769,-634716016,1441319819,12511475,-1946870295,-1962899690,721457182,-2016703526,1458174163,-1316861,-402393623,-1779953216,82503685,1852404304,1735289204,-1224280320,1946161154,319720204,287214339,1926839043,-719418616,-485586174,1003631106,-1975749671,-1023524089,645079100,222087934,154934900,548412533,-31767832,-1031122238,378142900,-218758397,1510014080,-806623115,686346802,-402099685,-1015799695,-1021282328,990053793,1912803590,320768780,1942174467,85887236,20834307,-1293408141,24963314,8855179,51451531,51453577,512350467,-746126573,44558584,51453579,-384724504,-389871673,-93126385,-386759448,512426318,512295047,-654114031,51584649,-401466904,-1528229916,283830279,-1961894936,-402643938,507184261,1550975761,51584571,1323849335]},{"sector":4,"length":512,"data":[503760626,512425984,-1779956975,51618048,2229817,1347955315,141869066,-972733208,183181319,9960321,-397736844,243336531,16777241,-1961845784,-402644450,-898431812,277801048,1967814,486983423,1072169216,316533245,1374208856,61663236,1330795077,1327512146,1864397941,1886593126,6644577,-972842007,-16769530,-2113938456,-50325210,258599167,1902278,572427009,281077760,-384655640,548467582,-11933360,-380632912,995295043,1946342686,-12088822,57936444,-1980699829,-402644450,-1749348557,203548672,130420085,-75414752,-244186737,-1996449861,1509958686,-1224280125,1962938370,-389810174,-1958542487,-402643946,-169343991,605981455,58976256,8855177,286690131,-633650685,51582603,-633665422,-1073085325,512429291,-634715375,8986249,-1017394293,-1962852120,-150959858,-2028565543,287214336,-1008185085,-389850640,116854684,1049271,250142068,287214577,49080323,2236041,2498187,51451531,1926904642,320244496,1943681795,572427016,639535360,320768768,286690051,1943677699,-880033023,1364448135,276359324,-396666467,512426201,512294946,512295697,837288723,99739918,2228997,2752550,131072,51577617,393220,51053321,51315469,1448170320,-1195654773,440591,-2127066322,1996590908,1913927942,1124335874,1592648259,-1017619623,-1464117158,964879,959941422,688420356,1929656596,-2096854782,-320732477,46735044,1962933123,-721016025]},{"sector":5,"length":512,"data":[-485586174,-720491774,1065559554,638940415,192284473,639052070,57870137,-2096658138,-437582653,-46742522,197233666,53376206,637719814,-108852085,-2094893825,359988985,75026955,225757243,158517307,-935605717,-21429389,210315007,-352074109,1405290454,-352095663,378245169,1380057827,735741778,1539541978,1926835024,8972547,-397225077,1499070519,-1991622309,1107485462,57985291,-370184216,55836482,378229721,1111622371,-634660217,1515965323,74762507,1257194984,-485062326,535380482,-652309505,-634696958,-205962638,1943612161,-2133261510,7742,-397201036,-1252326953,19720192,1314013527,977751625,568852512,18671861,1954112032,695412837,1717922848,-320339852,420380932,-1023409920,-385874968,1048637706,1962868766,-44046077,-990035991,-66930378,-1073042394,-389873291,887624691,-391371244,-24439761,-4603854,-1359807233,92939855,1952201807,1949252616,1946041092,1190628336,342354246,1659438878,22210580,704687592,1310730794,1917132911,1936879474,1970226720,-402627474,-1612119908,224061680,721482216,-1006447330,-2096969418,-847970306,-12811482,-2094610572,1576993916,-436269708,654301928,1962884227,637594548,503520395,-14286123,803734132,16181248,-1224280232,1962967042,4778003,1869771333,-402644878,-1561848822,2112019,-400796696,-437775169,420380947,-1023409920,5302355,-805202784,1342797032,1476473832,-143275778,50667145,1527723752,-401780247]},{"sector":6,"length":512,"data":[-2115502046,325576980,-384529688,-387443871,319875093,-385649944,1048578611,1979645982,322562322,1982080,-1828162560,-402485342,-1013770668,-719439029,-1979026942,1963801607,11987187,-719418429,1358555906,-1883351471,16365825,540847357,-12843404,154927732,1962734561,-561297919,-1017620130,1140841704,2365067,-1090488856,-745865065,-896805077,-5239581,-234414340,1241740718,512489451,-637337566,-484557885,1007448834,1124758797,171706250,977469813,-1595358272,386319881,12255232,-9639936,-401359896,12255460,-10426368,1007927273,1006990357,-1021676517,-385886232,707460914,1313415210,1381123412,1163153493,635961412,-282531329,41081403,1002689415,-2029882406,1464976339,48434827,-819201141,-661907338,-1325612914,1974399501,1006995981,1191277834,1610145675,1610203993,507233113,964035285,1023362954,1258386698,1023362954,1258779917,47521339,229644150,1962886968,507202313,-193527083,126486507,24447548,-719439037,-1962642686,-134032098,1405352387,1224839097,-242484853,1993026382,-49865202,28943603,1121159936,1543255528,-4631613,-1143763969,-634715761,-398324364,-1958020062,1138396107,-957589016,536973062,780845915,-118947437,-1090052599,855376358,-1949791260,26452208,-1073561346,-299112309,1364389419,-1979544415,855805710,-135623982,56252897,-1976695832,-27933950,-3544896,-402294711,65732707,1560342504,507412675,-445251840,190549,-1818180771,-390005247]},{"sector":7,"length":512,"data":[2018115495,-2133708181,197694,484981620,1007127049,1129935885,48438843,-1023520141,1640183,410320900,343214396,-1979665328,51808962,-20839933,-151849272,1490062050,50599482,24430706,419886923,1946158080,-152546527,2400765,41337659,-1992042357,1526730270,990430952,1929383454,12249467,378169579,-1259863292,990349832,1929569054,1947024473,540820309,154944371,548413557,43656842,1354956459,-1262319022,51808768,-2131560957,1482293500,786688736,1074055403,44318336,-2146667519,7742,-974650508,-2146768111,7742,-1444412556,1937783825,-1708750311,-1023497470,126524642,1962784488,507200267,-227147037,-437583125,-1341622207,-1708750304,-2136214782,7742,-829740172,-1962809666,-2012836099,-1908506622,57999106,-1161583117,-1951595558,-657396504,-319095950,-76293936,-486823019,15254509,236862216,-1967557632,-12827897,540813684,154937203,1074012532,44318336,-2146667519,7742,837288820,-2146768111,7742,367526772,-1341986031,-1708750304,-1092441342,-335577623,-402606092,-1749352329,420380928,-402652160,646053483,-327655,-1709885,-401890583,512428352,-1209466141,9943817,2367113,-401991703,-2126250843,1912705019,26131203,2367113,-972422167,5894,45561473,-960299007,5894,45561473,-960299006,5894,45561473,-2117926904,177974,914473732,134218423,322865859,303991296,-63903488,2236043,1929183208,148039877]},{"sector":8,"length":512,"data":[2236043,-386075672,-1175977979,1405351943,2236041,2033350,352765440,-672596224,352765449,-1017446400,2236043,1929180136,-1645718639,-806659320,990053793,1946342662,143583329,512477491,507183138,108266245,1107087336,512226539,-1801453534,973220865,-402426424,-1957430084,-402644450,-1628898124,-42342145,-393155749,922683480,512426018,-919403771,26480266,1843972606,-1661213956,-1644200728,1004434011,1929577758,-61151016,-1950100501,990053662,1946165790,568873973,-1041540344,-1962402840,855835934,-1810986295,48857089,-486788120,-391451653,-1801451516,-1966539263,-1949791512,-402455266,-838927332,512358773,512426757,233308194,-1979981060,-402644450,954730754,-706166006,26517511,-393557762,512477322,367526661,1976434428,85887481,572427011,-66656256,-806618142,50667147,47519371,57989691,-401997080,512427936,512295637,512294946,-1209531643,109242376,-1996449861,-385866722,-745863060,-840414646,990212859,-118262822,9943235,-402643805,611516392,2236041,-1157202200,-1111621481,161998884,922686067,113705099,616366219,-1895698968,-134182138,-393615165,1609060725,-1152814338,-2081947497,1259173096,-1879342781,-394562815,-193723593,2367113,-402126871,512485529,-1006764014,-402592792,233309700,572427015,-80812032,2236041,-402614341,283639969,420381182,-1023344640,-386023192,443869242,1258330043,605961027,-402164736,-193723669,-1662514965,-4986627]}]],[[{"sector":1,"length":512,"data":[-1360488981,-401020673,512431988,1038614562,616414975,1929971944,-401872888,-689372043,312525569,512446464,512294948,113639432,-402653154,512427676,-397213662,110100255,-1571291102,-1528299502,503760389,512491264,378208292,-634716152,-746076298,-83629998,1512048582,-193606914,-402233368,243336575,16777241,-1979909399,-402643938,2011694908,88271111,-1947744024,-402648546,512360476,-1006764014,-1947664590,572427257,-94705664,-2114237720,6414,-397163775,-1142421980,780537,-110303141,-401753112,1405292311,-83463,1542953192,168626119,512475971,-2125791196,1912641531,-12615436,512357492,-706150364,605981446,-75414784,-294518385,98494659,2760331,-1980155416,-1962925538,-385864674,1810431857,4188160,2367115,1913129192,-75414777,-193855089,2367113,-386796568,183042085,572427250,-101521408,-397197966,-1990523492,-973069794,7942,-402213400,48759936,-1961038855,1258300446,9960321,-1024928910,1274311175,9960321,-1226308238,1140093703,2367113,-1157215255,-185925481,-1946626840,605981635,-1329382656,-33393920,9282240,-75414709,829555087,2236043,1928946664,87484495,2236043,-1980147736,-973069794,7942,-402241048,-1749351404,605980928,123725824,-102118798,123201541,-2126265485,1912705019,-1925283827,-1133182976,1140356328,1055428331,-337153529,572427143,-113580032,-429659965,1961244904,-402018298,-389814156,-328007705,1342182048]},{"sector":2,"length":512,"data":[2367115,532105,1967814,79882240,2236043,-46733229,2236041,-16527640,-956265674,-1124037882,-11999196,9111183,2229903,1221208,-972836120,-16769530,1977997032,-81139453,2367115,530059,-1804150229,-397225081,130480393,-889300448,1843983477,59107332,-386201879,-1958479907,605981643,1993026304,-439097331,-117315503,-386276775,-389871951,-1749293627,605980928,86435840,-385887000,512427064,1397948450,1526224872,-634713998,1968950155,-379862238,770179860,572427012,-130095104,99156851,28920579,1007127040,1258452234,-390067647,-1578568307,215476235,-402549600,-437714478,1007127042,1007055904,1006793737,1592312831,-145233691,2365067,-746071493,-521620366,-401574657,57869845,-402588183,183040115,-369593594,512426229,99090466,-385649672,65536229,-92542725,585680107,-149165851,512476043,-667221980,-1041648525,-451942400,2367115,1977940200,10152195,9960321,-1847000203,-1998040320,-401902081,-1014237459,-667200677,-2125788046,1912641531,-9312248,-346295180,512318321,113639432,-402653154,312476496,922701824,512426018,-857210846,-1962052869,-1962925026,989857814,-118787110,2229903,1221208,1088986195,503760386,512491264,1486684168,1263545458,9960321,-1125644942,1509223415,9955713,1363348451,1509396712,-501217338,512312309,243335204,16777241,-2125784085,1929418747,-14227197,1979662208,-141957115,512355563,-2132279260]},{"sector":3,"length":512,"data":[62318839,-1023069976,1408726760,-1946796824,-667198525,-924259469,-387549698,-152307869,-385875272,28894534,-448730880,-385875016,-1259805382,2353401,45549303,91488288,1964091624,3598341,-1662390669,-107353863,-402650904,-76349400,-1963356439,838868238,85887981,125061379,1928761320,-1007033853,48438923,-159192893,512427123,497025763,-1811531264,-30968063,973085958,1946161670,42967780,48438843,1357383027,-2134640393,7742,-840432780,-151590903,-1007041544,-389510576,-346488919,1364414680,-1006217386,-1945961162,1959136192,119408203,116853424,262169,512427124,-1946353630,734759931,1090704654,1202647631,-1957168057,-485585925,-473224446,1336865283,-1960442023,-49916,-29552012,990409983,990147265,-2096598329,-420805690,638577656,-1576909686,-1866792284,-1700604158,1594358018,1482381662,-7739197,-138215053,268613382,-2146732800,7742,837288820,-145702135,67115270,991458560,1912803614,320748352,-2143653117,7742,1172833140,-1590105335,-1891827708,-1591970303,104529954,494011153,1023411873,292946319,989864609,1996690182,1003547404,-351898920,1926773735,507412678,57933824,1476974568,507412675,292814848,-1974119856,-390005051,-397806089,1516107574,29082456,-194713600,-385305624,-140768791,33560838,1343255808,-397258413,57868311,1526175464,-1655153831,-496244541,1929381608,-142219261,646010307,-16842727,1642113,113704962,142]},{"sector":4,"length":512,"data":[-1560079967,329318404,434947,2242187,-88681934,503355327,-1229063161,440591,-1959901883,926613598,108394208,48447369,1017966315,1010398221,-1341819393,-502273921,-3998038,-33518074,1011971278,-1966377719,51284674,-20905469,-167725880,717881073,-1330154292,-1023497473,812961534,-1427376158,-919396176,-1426862454,2367115,-2147402776,7998,2033350,-1609665025,-922877923,1181242,1576534898,-68421181,-386659352,1766650726,1948280174,1814065007,543649391,1380130861,1936615712,1702130277,1307050084,26196979,-386682648,552139253,39971071,-689387541,-210507549,419886915,1962934784,-1830239487,244011763,-903151474,2236043,1793590243,421954033,1509948672,1049303267,-1749155806,-66642432,1962884268,1964653819,-1440698366,854127330,-745847821,263765333,771753657,-1962903925,-1879342820,990869249,-1962772774,-397258278,1499132733,1162157193,-1587682846,295895044,434435,-1023208541,-8460205,48438923,-1158489624,-754777863,378209395,-396688679,378270594,-2098724139,-1075293197,572426738,-886351616,7923793,1509835752,-486500421,1124567561,-109772996,512358370,585826340,1357132432,-13440941,-225384357,2236041,-1748795045,605980928,452608,-385859096,-1749352948,-1827763712,-1965413631,67513027,975073795,706114241,46202561,-1576860666,-1818230012,-1563886079,-1528233965,1286901,67502787,50635267,1246918,-174987008,1982080,-1947634688]},{"sector":5,"length":512,"data":[-1593637602,-1019542827,94569846,-1176990973,507052033,57999394,1996531433,572406594,-402229760,-347999492,85887476,302433795,113639680,872349727,26517696,477282619,49906505,29038199,-237443072,103213137,-502824216,-108832264,-1023314175,989909737,1929388574,-225253368,-348038286,1978469106,-1810462123,717326849,-17790270,-29199674,-2146798130,-16771778,1693123445,-2134442352,846660350,779338282,704650656,-1574471994,512426013,-292945147,-229709742,-49616813,1976434267,85887476,-889300477,1185416,302942403,512475904,-1605827835,36438420,-1047867254,-930430422,-838991245,-487449624,85887483,4843523,2033350,-16193025,-1593849880,-922877923,104467828,125043092,57985278,-1962926686,-402455266,512356844,-1511521531,26517756,-1946446359,-1979675850,76164647,141836604,57984058,-101520570,486983363,1405288704,-2130667589,1946259451,-12615668,954729589,-347911182,9944046,1065353649,-1976666871,51808961,-20839933,-167725880,-20804878,180628168,1343648960,-235935663,-968664999,-1040253177,1945827712,1976106508,1136787178,1929050496,-195434299,704746400,-1962929402,-2130697186,67115278,-231282688,1648257,-1017380869,218169644,38469634,150784,1946157683,38273026,-16691200,196353,1358955081,38207490,151296,1962934903,42205186,-16681472,-16646399,-16646399,-16646399,-16646399,-16646399,22151170,33489407,50266623]},{"sector":6,"length":512,"pattern":0,"data":[134304512,-16646399,-16646399,-16646399,-16646399,-16646399,-16646399,-16646399,197328641,-1023475439,297928977,33489172,33489407,33489407,33489407,33489407,33489407,33489407,33489407,33489407,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19660800,331419073,29426881,96536257,398530753,314645185,297927617,68272659,-1039855166,297932817,51495442,-4063295,-1055452734,34718463,-1039461950,297930769,823247408,-1036906046,381760273,432082625,-1055321662,-1056456428,34325119,-1039463486,197268491,806076936,-1036973118,197276171,51102259,-1038742590,197269771,386646546,197328833,67879440,264374721,336577033,-4063295,-4063295,-1039396414,297928209,-1056128767,319537680,-1038413374,12721425,252691038,-1039790142,197268751,353092105]},{"sector":7,"length":512,"data":[0,0,417208221,425400565,372775300,373822980,386537095,363402971,380835251,389027524,76354975,296223885,195036301,419498922,193071992,194382732,412358087,444275351,456792830,188947277,420875046,184814447,186387223,231934753,256052624,200019049,220136589,435749241,366941651,76350605,76350605,123346417,129894318,472908401,167709179,473701430,368186859,246156966,1529626172,724184669,1027223341,2105223464,660349790,167714875,1094795585,1094795585,1701013836,1684370286,1952533792,1634300517,1344286316,1919381362,1344302433,1701867378,544830578,1109419631,1095520847,-953269170,-821912314,-1626945754,-953748478,654483718,-1559837145,2124480258,2133232131,16854275,-1610441821,646579068,-1767701635,50128898,1918975171,2004499462,-1021301758,771770600,1701990432,1008759667,1044599621,1501184,-109765828,1364414659,-11118766,1577229590,1532582495,1364443992,-11118766,1577230102,1532582495,1364414659,1347835730,44111615,1499094878,1438865499,1585966219,777034754,172165002,-402295616,-202637349,1476550279,1438866845,1585966219,781996034,172165002,1008039104,-402295936,132841700,604033000,-387419009,-471072849,1585928349,1354980610,623491923,1397753323,-64625733,-1073042394,-738261132,-335573272,-1017619470,-388877486,-1017511934,-1090103466,119407269,-1962929688,-2955017,-1017225465,-388877486,-1017511934,1381061456,102651734]},{"sector":8,"length":512,"data":[-661971186,-919339951,-1272550722,-20958713,454831040,-143457708,1410538499,80118530,74828030,74762507,1101672452,-579482370,74828043,1101672624,1487585331,-1054138618,1329663862,-133957749,-1952123907,-215961400,1595869098,1532582494,1111540568,-2036334577,655360001,65536000,6553600,655360,65536,1048576000,1946157732,-1543059960,1692991490,1048625921,1946223268,-1543059720,1273561346,-1539407871,-378273022,44304070,-1818210301,43688450,1048626008,1946288804,-1543059756,-1605369342,-1700658542,-2134681598,-16604354,410386352,119408158,60038798,-1054933210,1025443586,11599871,-922877324,-1023409883,1962825448,44278011,44238534,1979661567,503717407,-1809936889,520037891,520553157,209043466,44246664,-469106512,61866613,1489232946,1381322842,1476449256,108334396,43390602,171729131,-956429707,43791930,1038832758,175441980,43390522,-889304972,121390315,246679669,281935666,-1269678357,-1174457847,512360449,281871002,985857626,1979882262,-1776907743,986119682,1979882550,1389297173,-1979317832,-1962763714,-1962764786,-855467242,45373968,281935666,-661929123,24464195,57581763,-1073486798,-1073496061,-725601712,1967675402,1407642615,-397061551,112459836,1049231792,-292945254,43388554,43718283,41283130,281919538,1532582493,1381061571,1501269,-655685708,43098192,1476565666,-1868541757,43688450,62178136,281935666,1381061571,-858027]}]],[[{"sector":1,"length":512,"data":[-1979318088,-1962763714,-1693021494,1561382146,-1017423526,58761301,74841916,281874356,43386566,-1761163776,121372674,11751351,1946387134,59686432,376701500,41026620,-5045328,225706812,20719543,-1070463116,-2000813901,43557379,43589256,43728520,-1868364661,38046466,-1962765661,-1801255868,-854608894,-1744422384,-1610124286,-466484584,-379776819,1397817187,-729131694,369356934,45351574,281935666,1482381917,-1974316861,-855264048,-1017619935,134005992,1397801728,1465274961,1030406,1558710155,989626620,1128465525,431229163,1090789837,-1993983308,172443397,-2144045587,796154943,1949253504,96871978,1202997084,-360656758,519539520,567090950,638874143,1946172800,1031808526,1191408640,-970524693,-1975034875,-66459641,410132540,1459620537,103368895,-218364146,1952384942,-2010758393,-538228987,378406,1516134151,-1017619623,992750370,1530805564,-1910604707,-10032934,-1023314657,-1006238178,520320822,321692,-1021376611,116064690,48956082,-919350734,-1073085046,-2142824332,-193723654,41233980,1547489163,792462452,-919345547,-921967893,-771094668,-108327307,76162639,1195771272,-176832502,-1707100989,259588098,-1707035453,259588098,99287666,-117439768,1052004547,-1017634355,-851332016,163797025,151587081,151587081,151587081,151587081,151587081,151587081,151587081,-2012673783,134744072,134744072,134744072,1191708680,1195853639,1195853639,134744135]},{"sector":2,"length":512,"data":[134744072,858927408,808595760,875704880,825242933,858928688,842019120,134754864,134744072,319951120,269619472,336728592,286266645,319952400,303042832,134746640,151521288,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,101255433,1448235344,119428439,-1962728258,-167768002,268637446,378212212,-1119223806,995098623,-351438854,1477457,113920,1182005819,-466965252,1172555915,613076483,1946287232,839223824,1960814788,1006437128,-336431622,116807461,1967129365,352777740,175440899,-352289816,13690888,-1595407381,1596421120,-96731901,-1946565003,-352317410,352777817,125075459,54869632,17069312,-1962930130,-134213602,116801771,1950417685,4078375,-1977519360,788474397,701728758,1539339600,507202387,208797698,-14016630,-746064338,-1418375127,1050255,116842379,1947206421,270437124,1599993856,1482250846,1364247303,-836020654,-685043340,192399931,1957098492,-8617978,1593209857,-1017620134,788487562,701728758,973304848,17613760,1448300739,1006578428,991786225,-1407748870,1946238023,-12242190,-542577292,1569327733,-3348225,17621364,-1017619618,1431720784]},{"sector":3,"length":512,"data":[-247726294,-96771980,-1392747916,1946238023,-12242418,-542635660,-1545057163,-1153075713,-359978541,1001128118,772569073,1947149527,1959148277,1003522801,-1977649923,-684833019,-210497756,-277559750,326627643,33520768,-1036385164,-259387275,-247739157,1330054774,49004603,-712310516,1482382941,606741699,36316202,1157694731,1330923844,82,1429012666,1465314443,-975664098,76416630,-1912173522,44941100,100727784,60072735,84084641,614662295,47554816,-1962871576,-11204026,-1588568622,-654900523,-1593776920,-1758658524,50832128,-1106870588,-974650707,1595889664,-1161077410,-1477759672,-349351238,760658594,1840946667,-1164383443,-1813303921,918882078,1153893083,-1943946232,1807682124,1095939,648344572,57620165,-1190954049,-1527578599,113712902,60162773,47652492,48826055,512491566,-1348402453,-643610622,-139204606,-1009550872,48694983,-270008320,1508426707,119456724,57620165,-1190954049,-201588711,-400619868,-1326843206,516983763,-717321465,209584898,48434827,179359531,74730236,-109793550,103532427,-1950154027,-717356040,-1962467838,856338632,-230490670,-1946454866,1448199106,12499287,1604645884,29579614,16966406,16978182,16978694,16963846,16975110,16966918,16976134,16976646,16977158,-1006432506,-1945961162,1960709059,478881301,1962933123,-17071347,19268468,63341316,-2084312085,223550,1223164789,1048822775,1962935145,-145823739]},{"sector":4,"length":512,"data":[106374123,45956804,-16414170,1946380558,1360942610,57216651,-141877498,-1527514042,123608921,505332575,-1809936889,-14266365,-1912419042,1492159426,505332511,-1809936889,520037891,-1021377811,-1912136162,637768734,49356543,1448461087,-1909580201,-13857250,1583292370,-1957313699,105286636,24951389,-1957305109,1465261804,-1962508604,1451952734,512634380,-1175966578,526278650,52061,1869505089,1818324338,1869770784,1835102823,1919251488,1634625901,1852795252,2573,0,0,0,0,38816,0,0,1968439296,544170610,1668505936,1126198369,1768320623,1634891111,1852795252,1818838560,1712229,6423040,73865,496968124,451674114,204937,545856312,722075652,336009,545859840,18087942,467081,545849622,18350088,598153,545856678,18874378,729225,545857836,724369420,860297,545860432,692453390,991369,545859980,445448208,1122441,545856422,0,218169344,436279058,1920291840,1344302946,1633907553,1766858860,1277193059,544502633,1701603654,436214304,606741504,36316202,1225065732,536888644,1936876886,544108393,3485237,16711696,2,1572889,131073,142219,730791938,131075,274257,793968642,131077,405333,794624002,131079,536415,794886146,131081,667479,795148290,131083,799659,1024196609,131085,929505]},{"sector":5,"length":512,"pattern":0,"data":[786628612,262159,1060583,1024262145,65554,1252152,730660866,131092,1376540,18481154,131094,1518483,1024327681,131096,1650535,795017218,131098,1781595,1024393217,131100,19672921,747831364,8388909,19803351,760676480,8388911,19934679,820510848,524593,20066027,787677192,524595,20197115,1017905232,8388917,20328369,736886788,5243191,20454970,743374916,196607,65783,1611727586,1179650,204426,1601699993,3538948,6561436,457900044,65637,6691671,458817568,2097255,6822778,1562837072,196607,247,0,858927408,926299444,1111570744,1178944579,0,120466741,1465320027,770]},{"sector":6,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,545850488]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166723584,172493303,177146532,185993998,68382,131088,262159,524302,1048589,2097164,4194315,8388618,16777225,33554440,67108871,134217734,268435461,536870916,1073741827,-2147483646,1,226692420,227020150,217320840]}]],[[{"sector":1,"length":512,"data":[216993038,16518332,15990920,9175293,16646388,15990918,12845310,16646388,15990916,13631740,12845300,15990784,6422783,16253172,15991000,9240831,956236020,16003327,9386239,821952756,15991038,553001214,821952756,15995126,285159679,822052084,-2097929985,8388860,12976360,15728644,11010302,16253168,65680,2556135,16711681,65751,13107455,16711684,65737,885914879,-50395676,98842829,1020133375,-64036,84032973,13435135,16712962,65740,13500671,16711681,65691,15401215,15729406,66977904,14680316,16712702,50069737,15204607,16712956,49938666,10092799,15140090,38,15859966,16187392,16842947,12714231,16711939,16842959,181731326,16646146,14811244,7209214,16646368,14549158,10748158,16646366,14680236,11403518,16646370,14811306,101711871,-956366846,98319,6291710,16646145,65788,15991038,16646145,65688,15466748,16515073,131300,16253180,16515073,65692,5243120,15728641,65600,10486012,15073498,65542,12583166,956170482,15335622,16136446,16580842,15073385,-1357905921,16580836,15597672,11534576,16711916,240,14156024,244,65536,0,0,539885568,1701990432,-14650509,1129530627,3015935,1126178862,1769238127,1063613806,67053600]},{"sector":2,"length":512,"data":[788856665,-11664385,452995332,458119424,538979840,-11402241,1920230660,1919885433,1090780960,1868694783,4158578,1786194,1713401678,543517801,1701667182,1850277934,1768710518,1919164516,543520361,1679848047,1667592809,2037542772,1818838528,1919098981,1769234789,1696624239,1919906418,1818838528,1920409701,543519849,1869771365,1766195314,1663067500,1702063980,1920099616,1174434415,543517801,1914729321,543449445,2037149295,1381323776,1210994498,1409306700,1329746517,1396789280,541868355,1347175752,1279870496,1107308101,1212227705,1196433452,1464672300,1111695404,1245978668,1263542316,1851858988,1464279140,538451968,1635151433,543451500,1634038338,1768910955,2126958,1224998688,1852245247,744845935,1157889824,1634862335,539780467,-12385281,1634036740,1818304626,1633820780,-14668700,83841795,544237931,543976545,778330466,1162037504,1224743763,1919251310,1851859060,2036430713,1869566976,1851878688,1919033465,1886085477,1953393007,538968179,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,1124081696,1948741217,1852401184,1768300644,2123116,661545283,1667309684,1936942435,1867382816,1852121204,1751610735,1835363616,7959151,1095651150,1345209677,536892225,1735357008,544039282,1836213620,1952542313]},{"sector":3,"length":512,"data":[738223205,1852402720,1869881445,1868767343,1701605485,1428160632,544367987,1634038370,539754603,1735357040,544039282,1836213620,1952542313,536896613,2125417,1851867936,1713402919,543452777,1920298867,1713399139,744844393,1953391904,1847620197,1847621477,543518049,544165376,1969382756,1852383335,1629515622,1919950964,1634887535,1953701997,745828961,1853182496,2037276960,7954807,1679847246,1735746149,1718511904,1377840239,1629515381,1635219822,1867382905,1685021472,1701257317,1634887022,543450484,544370534,1936287860,1852402720,1917845605,1634887535,1868832877,1847620453,1663071343,1635020399,1713401449,543517801,1297040128,1128616019,1397703680,1920099616,1864397423,2019893358,1953850213,1124085349,1948741217,1853190688,1965056288,7629166,544173908,2037277037,1818846752,1835101797,1124103013,1948741217,1852401184,1480925284,1768300613,1124099436,1948741217,1634692128,1480925284,1768300613,1375757676,1140869376,1442858496,1275085312,1325420032,1291863296,536887552,1869903169,1769300512,1763730540,1919950958,1701996399,757101427,1124335392,762081908,537198403,-14650769,1920221955,1916939628,-9739931,1869881348,1769497888,1310720116,1310750565,543518049,1850023936,544367988,1701603654,1835093536,536879205,544695630,1701996868,1919906915,1342185593,543716449,544501614,1853189990,1126170724,1634561391,1277191278,543518313,1634885968,1702126957,2126706]},{"sector":4,"length":512,"data":[1852785440,543648102,1701603654,1226833952,1970037614,1142973796,1667592809,1769107316,2126693,1667846176,1766203499,1310745964,543518049,1682251776,1919906921,1650545696,2053722912,536879205,1835627088,544830049,1701603654,1110310944,1392528193,1668445551,1869422693,1768319332,539780197,1969382770,6581353,1651341651,1847618671,1713402991,1684960623,1698963456,1701734758,2035490916,1819239021,536879219,1702129221,1919950962,1684366191,543519349,1701667182,1394606112,1801675124,2053731104,1852383333,1954103840,2126693,1852394784,1836412265,1634027552,1767055472,1763730810,2034376814,544433524,1632444416,1970104696,1699225709,1394634849,543521385,1109421673,1936028793,1159725088,1969448312,1818386804,1766072421,1952671090,544830063,1649352704,1952671082,1919501344,1869898597,1936025970,1428160544,544500078,1701996868,1919906915,544433513,1968447488,544170610,1668505936,1142975585,1667592809,2037542772,1917124640,544370546,2125417,1969365036,1969430644,1852142194,1684349044,1713402985,543517801,544501614,1702257011,538979940,1702256979,1917132800,544370546,1919181889,544437093,1918981120,544499047,1919181921,544437093,544501614,1853189990,1411383396,1701278305,1684086900,1936028260,1868963955,6581877,1869771333,1409294450,543518841,1414092869,544175136,1970562418,1948282482,1968447599,544170610,1668505936,774794337,1850277934,1953654131,1936286752]},{"sector":5,"length":512,"data":[1953785195,1852383333,1769104416,2123126,1802725700,544434464,1953067639,1919954277,1667593327,543450484,1679847017,1702259058,1426079776,1869507438,1965059703,544500078,1679847023,1702259058,1140867104,543912809,1847620457,1914729583,2036621669,544106784,1986622052,4202597,1953067587,1818321769,1936286752,1919230059,544370546,1679847023,1702259058,1140867104,543257697,1702129257,1953067623,1919230073,544370546,1679847023,1702259058,1392525344,543909221,1869771365,1852776562,1769104416,1075864950,1802392832,1853321070,1684368672,1948279145,543518841,1679847017,1702259058,1392525344,1869898597,1869488242,1868963956,543452789,1679847023,1702259058,1342193696,1953393010,1864397413,1864397941,1634738278,7497072,1953067607,1634082917,544500853,1679847023,1702259058,1375748128,543449445,1819631974,1852776564,1769104416,1075864950,1918978048,1918990180,1634082917,1920298089,1852776549,1769104416,1075864950,1684095488,1835363616,544830063,1734438249,1718558821,1413563936,1952801824,1702126437,1917124708,544370546,1701012321,1852404595,539238503,1769366884,973104483,1684955424,1701998624,-14650509,1953383683,83849829,1701345056,1701978222,779707489,1633099776,543712116,1968119808,1953853556,1159725088,544500068,1699225600,2125932,1919243808,544826985,1917132800,544370546,1917001728,1667855465,1159752801,1919906418,1126170656,1768975727,1735289196,1226833952]},{"sector":6,"length":512,"data":[1919903342,1769234797,2125423,1818313504,1951604844,543908705,1701729536,1667592312,543450484,543452773,1713399407,543517801,2125423,1635151433,543451500,1718513507,1920296809,1869182049,1768300654,540697964,1851867904,1663071271,1952540018,1124081765,1948741217,1769109280,1948280180,536879215,1397768515,1310720032,2116949,1380143904,541871183,1986939136,1684630625,1818585120,1768300656,2123116,1868787273,1667592818,1702240372,1869181810,1718558830,1818585120,1768300656,2123116,1884645200,1147621423,1733296238,1409314901,1830842223,544829025,1701603686,1310720115,1830844261,543912801,1984241664,1635085409,2123124,2003127840,1818326560,2123125,1936020000,544500853,1851867904,1646294055,1869422693,1768319332,1107321957,1981834337,1702194273,1277173806,1818322789,1851879968,2123111,1919252047,1953067639,1107304549,1981834337,1702194273,1277173806,1818322789,1919903264,544498029,2021160994,2037987960,2259321,1869771333,1634934898,1735289206,1667854368,1768693867,1157657715,1919906418,1986097952,543649385,1718513507,1920296809,1869182049,1377828974,1835101797,1330520165,1162690894,1277165600,543449455,1701603654,1835093536,1224745061,1919251566,543973742,1869771333,539828338,1634036816,1914725747,1919905893,1869881460,1919894048,1684955500,1769497856,1919230068,544370546,738205757,1852405536,1869771365,540876914,1920291840,1344302946,1633907553]},{"sector":7,"length":512,"pattern":538976288,"data":[1866661996,1769109872,544499815,539583272,859322673,959520812,1646278968,1866596473,1851878514,1850286180,1852990836,1869182049,745300334,1668172064,1816723502,1634166124,1768300652,1847616876,979725665,1699872800,1696621665,1919906418,1869881344,1634476143,778397554,1918115872,1633906293,1426089332,1818386798,1869881445,1701867296,536879214,1684104530,1869365792,1176529763,544042866,1701603654,1461714976,1702127986,1869365792,1411410787,1766203503,2123116,1111565358,1178944579,1246316615,1313688651,1381060687,1448432723,1515804759,858927408,926299444,6240568,544501582,1970237029,1914726503,544042863,1763733364,1919251310,1702109300,1308652664,1696625775,1735749486,1869750376,1948282223,1684086895,1635197028,6841204,1684291872,1952536352,2123875,1768178976,1633099892,543712116,538987264,1229210880,542265172,536879130,538976288,538976288,1950556192,1110273138,1801545074,544175136,1953068401,538976288,538976288,538976288,1767984384,1768300654,3827052,1886220099,1852402793,1409301095,1818326127,538976288,1701603654,1852394496,1663071077,1768975727,979658092,538980384,538976288,3153952,1767994945,1818386796,1701650533,2037542765,536879162,1344282656,1936942450,2037276960,2036689696,2105376,538976288,538976288,538976288,538976288,538976288,538976288,1936028240,1851859059,1701519481,538976377]},{"sector":8,"length":512,"data":[538976288,1967325216,1852142194,1768169588,1952671090,544830063,1124081722,1701999221,1713402990,543517801,538976288,2112032,1701603654,2053731104,538976357,538976288,540680224,1397572864,1634956576,538994023,538976288,975183904,673185824,980967757,1766588448,544433518,1886220131,1684368489,536879162,1886220099,1852402793,1869881447,1936278560,536879211,1886220099,1852402793,1869881447,1835355424,544830063,1394614272,1701012341,538997619,538976288,975183904,1126178816,762081908,1634038338,538976363,975183904,1685013248,1763704933,1869488243,1986076788,1634494817,778398818,1852776448,1936286752,1763704939,1701650542,2037542765,1936269312,1634038304,1948285284,1970413679,536882798,1914729321,1768844917,3041134,1935763488,1836016416,1952803952,1914725477,1768844917,3041134,1954112032,1124103013,543515759,1702521203,538976288,538976288,538976288,538976288,538976288,538976288,1952531456,1769152609,538994042,538976288,538976288,538976288,538976288,538976288,1392517152,1801675124,2053731104,538976357,538976288,538976288,538976288,538976288,538976288,1852394752,1836412265,1634035744,1769152624,538994042,538976288,538976288,538976288,1291853856,1835628641,1746955637,544235877,1702521203,538976288,538976288,538976288,538976288,1853182464,1835627565,1919230053,544370546,1701080931,1342185504,1919381362,1696623969,544500088,1701080931]}]],[[{"sector":1,"length":512,"pattern":0,"data":[538976288,1381323776,1412321090,19536,0,0,-641679398,-1262242876,-641678654,-1262242876,-641678653,-1262242876,-641682238,-1262242876,-1127695415,-1177765171,-641682237,-1262242876,774766850,-65490,340852737,0,0,0,5224,0,0,341573632,0,0,0,3026478,707657770,65536,-15118336,255,0,0,0,0,-167419648,2132249,-1610612736,673220891,2069715753,574504061,673654562,19474986,-1994776831,-1994776544,553713952,572557594,18909466,-1994775807,-1994775520,620822816,639666458,18909466,-1994774784,-1994774496,687866144,706775322,35686682,-1994773760,-1994773216,32,0,0,16777216,-256,255,16776704,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16777216,5199,445582339,450830473,1095442569,1097859072,444923904,1099767945,0,0,0,545856015,545856678,-65536,0,1117388800,1125253120,0,0,0,0,8]},{"sector":2,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,439287808,8329,1396789294,65536,1296367616,1482184781,12376,1330511873,1162690894,-65536,0,0,707002368,639642148,606479910,-201317334,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16776960,256,825229312,892613426,959985462,1145258561,973096517,0,1431568394,776946258,20564,293666815,297472419,301404632,303501784,306909741,310121063,313070227,314905048,453841638,131072,-16776449,37486594,196352,1073742399,37552130,142592,1124074093,40894466,148480,771752467,35717122,137216,1560281706,40632322,139264,1107296833,39911426,156928,805306942,40108034,157184,1610613343,16646146,131063,196596,-196616,-131083,-983068,-524303,-2031649,-1966115,-65546,-1900561,-1245203,-1441814,-1835029,-1114136,-1638425,1208025052,1280,402739200,1258291456,33559298,67325184,852736,83892996,17385216,1325402368,167773706,302729472]},{"sector":3,"length":512,"data":[1358957312,201327372,885760,527990,106037256,117920512,1640192,486542876,1190400,939528989,256180244,1132032,593978,554631200,1441791,-2080369033,393543702,1537536,1023475293,-197394187,16531456,1057023085,-264044296,15822848,1778448196,-295304970,15416832,1610671967,-362741530,15548672,1677782082,-379256600,16464640,1812003432,-585039633,14553600,771809043,-518520608,14888960,788587040,521601054,16592128,56574,1917695,0,0,65535,0,0,0,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131073,262147,393221,524295,-65536,65535,-1,-65536,65535,-1,-65536,65535,-1,-65536,65535,-1,-65536,757137407,1869357101,1713398881,543517801,2108717,0,0,0,0,0,0,0,0,757932032,1634692128,1768300644,757097836,8237,0,0,0,0,0,0,0,0,539831584,1684107116,1818846752,757932133,32,0,0,0,0,0,0,0,536870912,1814048045]},{"sector":4,"length":512,"data":[543449455,1701603686,539831584,0,0,0,0,0,0,0,0,757071872,1869357101,1713398881,543517801,2108717,0,0,0,0,0,0,0,0,757932032,1634692128,1768300644,757097836,8237,0,0,0,0,0,0,0,0,539831584,1684107116,1818846752,757932133,32,0,0,0,0,0,0,0,536870912,1814048045,543449455,1701603686,539831584,0,0,0,0,0,0,0,0,757071872,1869357101,1713398881,543517801,2108717,0,0,0,0,0,0,0,0,757932032,1634692128,1768300644,757097836,-771743699,941557022,-1642108129,69194015,1780496160,1409286176,1329746517,1262702638,707657728,1347694080,1381323776,1412321090,1431568464,776946258,4932432,2097169,2949136,742064128,1044130621,1566253692,1056973312,6029354,116,1024,1040,1125,1159,1192,0,0,0,0,1,1672806400,65536,65536,2112000,2097159,45,720896,0,131073,0,131072,1310740,131091,1179666,131073,327685]},{"sector":5,"length":512,"data":[393217,458759,393223,524296,393224,589833,589833,655370,655370,720907,720907,786444,786444,851981,851981,917518,917518,983055,983055,1048592,1048592,1114129,1114129,1376277,393217,1441814,1441814,1507351,1507351,1572888,1572888,1638425,1638425,1703962,1703962,1769499,1769499,1835036,1835036,1900573,1900573,581902928,591930107,599663460,606348302,591930417,613688356,581837998,618734793,622535938,631579965,643180008,646456149,658974431,669984666,681912415,1174667040,755302193,1886152008,67051552,83834182,1869568557,-14671763,-13220349,2001939716,1751348329,67051552,83834694,1634882605,538994019,944112639,1395459327,544236916,1174667040,755302201,1701536077,67051552,-13618874,1699556612,536900974,1398670335,1278018815,544499301,1577320224,755302212,1751607634,-14671756,-12231165,1884630276,67051552,83843166,2003780653,-14671762,-12493309,1867001092,538994029,1180566527,1160578303,536896622,980708417,1174667040,755302193,1953718604,1818585120,-14671760,-13416957,1766862084,538995555,910558207,1395459327,544235895,1174667040,755302201,1886220099,543517801,1476656928,1160578303,7629176,1174667040,755302193,1886152008,67051552,-10259643,1648438532,7631471,1577320224,755302227,1952867660]},{"sector":6,"length":512,"data":[67051552,83838046,1734955565,538997864,1197343743,1143801087,538995813,1214120959,1110246655,1936417633,1701011824,67051552,83843422,1818575917,1852402720,-14671771,-11379197,1699884292,1919906931,-14679963,-13548029,1699228932,538996844,877003775,1311573247,1830844261,543912801,402915104,-15001063,1749232900,1702063983,-14671840,-641451005,1395459327,1667591269,-14671756,1668498691,1093469439,1953656674,-14680032,1953251587,-13547987,1632382212,1746957427,7367781,1174667040,755302193,1886152008,67051520,83833158,1818576941,1852383344,544761188,402915104,-15066343,1766862084,1948281699,1667854447,67051552,-2505668,1866935556,544175136,1768976244,-14671773,1668498691,1160578303,544500088,1886152008,67051552,755302211,544503107,1632641062,6648947,1986089760,543649385,1953064005,1176531567,543517801,539893806,1277165614,1768186223,1159751534,1869900132,1766203506,773875052,773860896,1632837632,1735289206,1667846176,1766203499,773875052,773860896,1632837632,1735289206,1852785440,1969711462,1769234802,1176530543,543517801,539893806,1277165614,1768186223,1344300910,543908713,1701603654,773860896,536882720,1684107084,543649385,1718513475,1920296809,1869182049,1766203502,773875052,773860896,67051520,83833158,1818576941,-14671760,-13285885,1868180740,538996079,910558207,1395459327,1668573559,-14671768,808535555,1294796031]},{"sector":7,"length":512,"data":[544566885,1224998688,83850094,1684291885,67051552,-9673404,1698966788,1702126956,67051552,-2505668,1682255108,1998615657,1751348321,67051520,83838302,1851871277,544240928,1577320224,755302232,544104784,1853321060,67051552,83841886,1851871277,1717922848,-14671756,-12296701,1632644356,1769087086,7628903,1174667040,755302193,1886152008,67051552,83834182,1869568557,-14671763,-13220349,2001939716,1751348329,67051552,83834694,1634882605,538994019,944112639,1395459327,544236916,1174667040,755302201,1701536077,67051552,-13618874,1699556612,538998126,421004287,83827227,1851871277,-14680032,-13548029,1699228932,538996844,421004287,83827482,1919111981,543976559,67051552,-2505668,1767255300,1663072101,7105633,1174667040,755302193,1886152008,67051552,83834694,1634882605,538994019,944112639,1395459327,544236916,1174667040,83832881,1852132653,-14671755,1111577603,1127023871,1701602169,67051552,-2505668,1984244996,1635085409,536896884,826672127,1210909951,544238693,1174667040,755302199,1667330644,-14671771,-13089277,1951608068,538996837,826672127,755302192,1970169165,67051552,-12435116,2034445572,543517795,1006894880,83876292,1635140909,1952544108,-14671771,83827203,1919896877,1702109285,536900728,826672127,1210909951,544238693,1174667040,755302199,1667330644,-14671771,-13089277,1951608068,538996837]},{"sector":8,"length":512,"data":[826672127,755302192,1970169165,67051552,-12435116,2034445572,543517795,1006894880,83876292,1886339885,-14679943,-13548029,1699228932,538996844,927335423,1412236543,1701011826,67051552,83834950,1702122285,-14671760,808535555,1294796031,544566885,1409548064,83837505,1668891437,538994028,-1002699777,755302361,1768189773,536901990,826672127,1210909951,544238693,1174667040,755302197,1836019546,67051552,83834438,1769427757,543712116,1174667040,755302199,1667330644,-14671771,-13089277,1951608068,538996837,960889855,1294796031,543517537,1174667040,83832881,1852132653,-14671755,83827203,1919896877,1702109285,536900728,421004287,83827227,1987005741,1969430629,1919906674,67051552,-10259643,2017799428,1126200425,639661173,1935757344,1830839668,543515759,1107558176,1110246655,1852401509,1953850144,67051520,437983512,1294796031,543520367,1936880995,538997359,1933902847,755302243,1953069125,1953841952,1344284192,1702130529,1685024032,-14671771,83837443,1734689325,1663069801,538997877,-1002699777,755302361,1953718608,1702109285,29816,510727959,387927575,2132770583,1886396238,7434255,1887403776,28784,1886650368,1325400095,48,1886388224,28687,1313296128,7631951,1880060016,1879048192,7348080,117899264,1879508848,1879508751,259002119,124784399,251658255,117903119,7,7341839,7343872,0]}]],[[{"sector":1,"length":512,"data":[124784399,251658240,462607,1886388224,28687,1886416896,7,259000071,118452239,252145671,252645135,462704,252645120,7,118423552,251658352,112,252641280,1904,118427392,15,124784399,251658240,1011727,687865856,-60622,16778752,69711,117506336,-15523543,459007,102190864,16785409,322513166,83951615,356517135,1,2701312,16776960,1191708933,536871186,689242112,-60608,169739520,331050,822083584,-15513303,503644415,84748810,0,10524,83951615,407836672,2097152,2694144,16776960,1326991365,536870936,689700864,-65536,407110912,6216,469762080,-16777175,1057292543,1590296,8192,10538,83951615,6203,18874369,1361654016,16776979,657925,536872192,691994624,-60574,118751231,332603,822083616,-15513303,184549375,83886090,8192,10517,-1,255526675,1049861,1848196864,-237,1191381503,536872215,0,-60548,54853631,16848462,32,-16777216,16777215,17446656,8193,538976256,32,1946185743,258998272,7633008,1880060016,1879078008,2020609904,1886388340,1954050063,1879048192,983047,124782336,117444367,252145671,117440527,252643184,1879506944,986887,2013724672,671117312,2021132152,2021130352,1886943239,125304832,7370872,2013755392]},{"sector":2,"length":512,"pattern":0,"data":[-150966152,-30016715,305530677,506861878,758523446,1144404790,3557686,16777216,16777216,36408064,-1926532352,1929380395,36409131,-1859423488,1929380395,37555755,254505728,1929380413,973086251,-184541666,842419810,1026,9109504,53753438,4,35584,33554432,65535,65535,33554432,11201,56,736890789,131076,239285873,-1694236157,-2113894613,50545974,731186178,915472518,33753922,-2060738300,1412865536,67502861,8989680,22689447,-1492909564,-1275033045,51139382,735511552,139,-16646144,-16776961,255,-133824512,43]},{"sector":3,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1392508928,1143754512,1845501440,1143771920,2113936896,-2144545009,-1711268352,-2144512240,-2063589888,-2144479472,-1073734144,50746422,777454598,919928869,100862277,-1909563644,1228335616,67502858,9383527,123025151,1862534659,335581230,50876215,779551750,925434001,67309392,-1842628348,3619072,1090781184,11197,0,16776962,16776960,0,3047175,4194304,0,822086144,876098358,805306368,0,905969664,909325621,503316528,137292560,872416768,137294608,1358956032,137296656,1275069952,34820919,788726790,928448641,100799820,-2110846204,1211590400,67502612,8597267,0,16776962,16776960,0,3087107,16777216,256,256,256,16777216,16777472,36655360,1395356416]},{"sector":4,"length":512,"data":[1929380399,36656427,1462465280,1929380399,36657451,1529579264,1929380399,36658475,1596686080,-2097151441,36659499,1663792896,1929380399,36660523,1730900736,1929380399,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1324354304,251691055,1379366656,67240452,7679849,39008134,1862533634,-1795131857,33900855,796197890,933363831,33687366,2049932036,1329050112,67240461,12267399,138491843,-2130443774,-838805201,33969719,797770754,937558139,33687874,2083492612,1312290048,67240460,8204185,239417352,-1627127294,302037551,35406904,799343618,941883512,34276940,-1204835580,1127756288,201720323,8335409,189610054,1006895106,32815,33554432,65535,65535,234881024,12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1347694122,0]},{"sector":5,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,820514646,128,828903280,80,146700,905390971,136783,-1308622832,1396200192,268435991,11730944,407910492,1048578,1677767680,35210296,4096,181,-16646144,-16776961,255,-838598656,1832717617,35278136,838472707,947257526,33688140,2117191700,0,-65024,-65536,0,839844352,948043776,135235,1932579588,1278774016,67109403,12005925,289749138,973340674,-1644133332,51397688,785122304,950665255,100798288,-1791903732,1396225280,67109637,2686976,72497346,-1065089533,10289,16777216,65535,65535,117440512,12858,67116754,1,83888384,17104927,0,523763721,67072,150994944,2059008,263,589824,134225822,1,-788526848,17367071,0,537133065,68096,150994944,2111232,267,589824,201334890,1,-1660942080,17629216,0,953352201,131072,-16777216,255,-1677656064,436207666,1348962063,620756992,1346133007,-503316480,16862264,1024,955187211,66384,154339844,1312357376,67109137,786432,39008512,262145,218107136,17717049,857703430,957743119,100732740,305342340]},{"sector":6,"length":512,"data":[1127817216,67109136,1245184,307181867,1,872420352,-175815,1024,21,-16711680,-16776961,255,789118976,234881075,3976192,36940544,1093368576,167854905,0,961609833,656973,1778384896,1111056640,2567,7077888,38025575,-1392246262,1929407795,168314425,1024,964558958,67765584,1882433316,1194953728,2564,7405568,0,16776961,16776960,0,3388167,1094292736,67111937,10485760,38025648,12,-1124029952,201540921,1024,969408683,787538,-1409286144,3537408,17104896,0,89405915,12,-167731968,201737017,0,973865119,788310,-1392508928,0,-65280,-65536,0,873793536,268894208,5269841,975241216,139086,-1090519040,1396319744,544,12582912,557922860,2,49408,33554432,65535,65535,50331648,731067530,38091315,11,1224776192,184632122,0,979304601,101385030,-1540062580,1228566016,335675934,12397491,491993731,-1391197694,-1744782293,184894522,883622915,984154288,722002,-1358954496,0,-65280,-65536,0,884999936,985202688,590162,-1526726656,1346031360,2307,11010048,38222565,9,-83843328,151278650,0,990970011,591187,-1677721600,1429939968,1028,12451840,0,16776961,16776960]},{"sector":7,"length":512,"data":[0,3482118,1178287360,256,668562,4537154,6,1191185920,151015995,895746048,994771047,655427,1748238336,1329287936,512,7484039,4471643,218103819,1627428405,201343547,879558656,174,-16777216,-16776961,255,2030501888,53,257,0,0,0,0,0,1325400064,1325426278,1867710574,1635218534,939550066,792148016,942813240,1699545143,2037542765,1936278528,1699872875,1702388076,1951596644,1952672114,1869107968,1126200434,1969451625,1124103273,1819307375,6648933,1702132034,1919899392,892469348,1852402720,1768169573,1634496627,859046009,540030255,1701734764,1936286752,2036427888,1852785408,543648102,1869903201,1986097952,1682243685,1629516905,544175221,1702257011,1667318272,544241003,1701603686,1632895091,1769152610,1509975418,544042863,1684957559,7567215,1701995347,1931505253,6650473,1651668308,538976367,1768169504,1952671090,981037679,1163412736,1411393056,1679840592,1667592809,2037542772,1850277946,1685417059,1768169573,1952671090,1701409391,1426078323,544500078,1679826976,1667592809,1769107316,3830629,1701470799,538997859,1701996900,1919906915,980641129,1667846144,1768300651,1847616876,979725665,1920287488,1953391986,1667854368,1768300651,3827052,1667331155,1769152619,1275094394,538998639,1885431144,1835625504,1207989353,543713129,1885431144]},{"sector":8,"length":512,"data":[1835625504,1375761513,1701277281,1701339936,1852402531,1951596647,543908705,1667590243,1735289195,1328498944,1701339936,1852402531,1866858599,543515506,544366950,1819042147,1984888947,1634497125,1629516665,2003790956,1090544741,1852270956,1952539680,1633026145,1953705330,1735289202,1701339936,1852402531,1866596455,1634036847,1986338926,1635085409,1852795252,1836404224,1667854949,1869770784,1936942435,6778473,1819635013,1869182049,1698955374,543651170,1868983913,1952542066,7237481,1633906508,2037588076,1819239021,1866662003,1953064046,1634627433,1701060716,1701734758,1699545203,2037542765,2053731104,1392538469,1701668709,7566446,1818391888,7562089,1635018052,1684368489,1885424896,1818846752,1766588517,1646291822,1701209717,1866662002,1818849389,1275097701,1701539433,1850015858,1869769078,1852140910,1766064244,1952671090,1701409391,1632632947,1701667186,1936876916,1986089728,1886330981,1852795252,1699872883,1701409396,1864394102,1869182064,536900462,1701012818,1713402990,1936026729,1867251744,538993761,538976288,1342190406,543908713,1953251616,3360301,7824718,1702256979,538976288,843456544,1769101056,1948280180,1766064239,1952671090,7959151,1851877443,1679844711,1325429353,1752375379,7105637,1953068369,1092624416,1479373932,1836008192,1701603696,1816207392,960900468,1801538816,538976357,538976288,960897056,1769292288,1140876396,1769239397,1769234798]}]],[[{"sector":1,"length":512,"data":[1174433391,543452777,1869771365,1917845618,1918987625,1768300665,3827052,544499015,1868983913,1684291840,1952544544,538994787,538976288,538976288,1819440195,3622445,1701602628,1998611828,1751348321,1768178944,1635197044,6841204,1869440338,1629513078,1998613612,1751348321,1409315685,1818716015,1919033445,1886085477,1953393007,1950556192,1177382002,1816330296,544366949,543976545,1634038370,1768910955,7566446,2003134806,2019913248,1919033460,1886085477,1953393007,1852788224,1834156133,7631457,1635216449,1157657465,1970037110,543519841,538976288,1920221984,877014380,1818313472,1953701996,543908705,1126178848,762081908,1174418246,543452777,1668248176,1920296037,1850277989,1919378804,1684370529,1650811936,1768384373,1392535406,1684955508,1852796001,1701060709,1734833506,6778473,1886611780,544825708,1885435763,1735289200,1717916160,1752393074,1936286752,2036427888,1853182464,538976288,538976288,1126178848,762081908,1342191942,1919381362,1914727777,1952805733,1920221984,843459948,544163584,1663070068,1869836917,538976370,538976288,1409299526,1701011826,1953392928,538976367,538976288,927342624,1702122240,1986994288,538997349,538976288,538976288,1426077766,544367987,1701995379,538996325,1816207392,893791604,1818838528,1682243685,1375761513,1124101749,1768975727,1325426028,1869182064,1140880238,1735746149,1701986816,1999596385,1751348321,794361856]},{"sector":2,"length":512,"data":[249102336,12127,1024331469,247922688,12131,794234581,248053760,12117,795283141,248446976,12129,794496721,248709120,12113,793972419,224198656,12125,3787,248971267,143083,787677184,2,143099,800129024,1,262144,612040704,2894592,2097163309,612043277,2097160269,536873485,612040763,1229342020,2114894,8192,83886080,0,0,1095773738,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2764330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,687876128,1345202688,687887169,8250,16777216,117440512,1196380752,105726290,1414748499,8080709,8061051,8061051,8061051,8061051,3211312,3211312,707002492,707013156,84216321,1347243843,1380273225,-1795293184,38011203,72171592,273811536,1079517267,-905953244,-520078438,-1769994763]},{"sector":3,"length":512,"data":[1111490712,-2036334577,655360001,65536000,6553600,655360,65536,100663296,1397705795,1225081925,1414877262,1414876934,72635728,1313165391,1279872515,1381257220,1396900904,1141131077,71779667,1195725651,1279346181,1409566035,88429906,774778408,1850278185,1768710518,1329864804,1969627219,1769235310,1663069807,6644847,1818838530,1869488229,1868963956,6581877,1952534531,1869488232,1868963956,6581877,1869566980,1851878688,1886331001,1713401445,1936026729,1766196480,1629513068,1936024419,1701060723,1684367726,1850279424,1768710518,1768300644,1746953580,1818521185,1309147237,1696625775,1735749486,1701650536,2037542765,1850280960,1768710518,1768300644,1629513068,1936024419,1868767347,251684196,1635151433,543451500,1986622052,1970151525,1919246957,1631784960,1953459822,1835364896,543520367,1920103779,544501349,1701996900,1919906915,1125187705,1869508193,1701978228,1701667182,1919115552,544437103,1986622052,1677751141,1802725700,1634038304,1919230052,7499634,1936278629,1920409707,543519849,1869771365,1181089906,543517801,544501614,1769173857,1684368999,1766221568,1847616876,1864397935,7234928,1818838632,1869488229,1886330996,1713401445,1763734127,1953853550,1766222080,1847616876,1864397935,544105840,544370534,1886680431,1778414709,1635151433,543451500,1701672302,543385970,1836216166,-1778355103,1802725700,544434464,1953067639,1919954277,1667593327]},{"sector":4,"length":512,"data":[6579572,1769096344,1847616886,1914729583,2036621669,1380162048,1919230019,544370546,1679847017,6386785,1936278684,1702043755,1696623461,1919906418,1699978752,1919906915,1953459744,1970234912,-1627364242,1852404304,544367988,544503151,1881171567,1919250529,1698996224,1701013878,1769109280,1713399156,1953264993,1698996480,1701013878,1634038304,1634082916,7629941,1918978210,1918990180,1634082917,1920298089,1153957989,1936291433,544108393,2048948578,7303781,1851871945,1663067495,1801676136,1920099616,-905940369,1667331155,1986994283,1818653285,1696626543,1919906418,1699269376,1864396897,1718773110,544698220,1869771365,1238106226,1818326638,1881171049,1953393007,1864397413,1634887024,1852795252,1816579328,1769234799,1881171822,1953393007,1702260512,1869375090,1187905655,1952542572,543649385,1852403568,1853169780,1718773092,7827308,1986939343,1684630625,1869375008,1852404833,1869619303,544501353,1919250543,1869182049,1339031662,1819436406,1830844769,1734438497,1847620197,1763734639,1635021678,1684368492,1984942336,1634497125,1768300665,1914725740,543449445,1869771365,1339162738,1667590754,1869488244,1852383348,1634301033,1702521196,1375731812,1769238133,1696621933,1919906418,1392771072,4607045,1448038484,1380206918,1546801489,1380010310,-30256815,1380141382,238178641,1380272454,372396369,1381189958,103960913,1381452102,-1573039791,1380010566,1073762641,1380141638]},{"sector":5,"length":512,"data":[-1073721007,1381190214,-2147462831,1380275717,1292186933,1397703763,1431323397,1124415032,926438736,5456208,4544581,5591124,4866639,5259597,5396047,747842639,760687831,1632906711,1952802674,1684300064,1936942450,1970234912,1325425774,1864397941,1701650534,2037542765,1701071104,1718187118,544367977,1701869669,1684370531,1802392832,1853321070,1701079328,1718187118,7497065,1819309380,1952539497,1684611173,1769238117,1919248742,1853444864,544760180,1869771365,1917124722,544370546,1914728041,543973733,1936617315,1953390964,1920091392,1763734127,1852383342,1701274996,1868767346,1635021678,1392538734,1852404340,1868767335,1635021678,1696625774,1701143416,1814066020,6647401,544173908,2037277037,1936027168,543450484,1701603686,1851064435,1701869669,1684370531,1684956448,543584032,1701603686,1852394496,1869881445,1869357167,1409312622,543518841,1852138601,1768319348,1696625253,1667592312,6579572,544173908,2037277037,1701867296,1768300654,7562604,1635151433,543451500,1701603686,1701667182,1818838528,1869488229,1868963956,6581877,1802725700,1819633184,1850277996,1768710518,1868767332,1818849389,1679848037,1667592809,1702259060,1869566976,1851878688,1768300665,7562604,1701080661,1701734758,2037653604,1763730800,1869619310,1702129257,1701060722,1768843622,1852795252,1918981632,1818386793,1684611173,1769238117,1919248742,1886938400,1702126437,1917124708]},{"sector":6,"length":512,"data":[544370546,1948282473,6647929,1970435155,1920300131,1869881445,1634476143,6645618,544499027,1702060386,1887007776,1970217061,1718558836,1851879968,1174431079,543517801,1886220131,1852141167,1830843252,1847621985,1646294127,1768300645,544433516,1864397423,1667590754,1224766324,1818326638,1931502697,1852404340,1701584999,1752459118,1886999552,1768759397,1952542067,1224763491,1818326638,1931502697,1634886261,543516526,1702060386,1887007776,1867251813,544367991,1853189986,1919361124,1702125925,1752440946,1965059681,1919250544,1970233888,1325425774,1852400754,1948281953,543518841,1701869669,1684370531,1953384704,1919248229,1852793632,1851880563,2019893364,1952671088,1124099173,1953721967,544501345,1701869669,1684370531,1953384704,1919248229,544370464,1818322290,1852793632,1851880563,2019893364,1952671088,1342202981,1953393007,1948283493,543518841,1852138601,1768319348,1696625253,1667592312,6579572,1635151433,543451500,1668183398,1852795252,1936028192,544500853,1701869940,1650543616,1763732581,1953391972,1701406313,2019893362,1952671088,1107321957,1313425221,1886938400,1702126437,1313144932,2019893316,1952671088,1224762469,1734702190,1696625253,1701998712,1869181811,2019893358,1952671088,1325425765,1852400754,1696623713,1701998712,1869181811,2019893358,1952671088,1107321957,1701605231,1696624225,1701998712,1869181811,2019893358,1952671088,1325425765,1634887024,1948279918]},{"sector":7,"length":512,"data":[1936027769,544171040,544501614,1668571501,1886330984,1952543333,1157657199,1919906418,544106784,1919973477,1769173861,1224765039,1734700140,1629514849,1734964083,1852140910,1766195316,543452261,1852138601,1768319348,1696625253,1667592312,6579572,1701470799,1713402979,543517801,544173940,1735549292,1851064421,1768318308,543450478,1702131813,1818324594,1986939136,1684630625,1784835872,544498533,1701603686,1667592736,6582895,1701080899,1734701856,1953391981,1869575200,1918987296,1140876647,543257697,1835492723,544501349,544173940,1735549292,1329856613,1886938400,1702126437,1850277988,1768710518,1431314532,1128877122,1717920800,1953066601,7237481,1635151433,543451500,1381259333,1701060686,1768843622,1852795252,1869566976,1851878688,1480925305,542003796,1768318308,1769236846,7564911,1696613967,1667592312,6579572,1163152969,1128351314,2019893317,1952671088,1224762469,1818326638,1914725481,1668246629,1650553953,1914725740,1919247973,1701015141,1162368000,2019893326,1952671088,1409311845,1919885391,1464812576,542069838,1701869669,1684370531,1684952320,1852401253,1713398885,1635218031,25714,1635151433,543451500,1701869940,1935762208,1766064244,1769171318,1646292591,1702502521,1224765298,1818326638,1713398889,543517801,1701869940,1851867904,544501614,1684104530,544370464,1953067607,1635131493,1650551154,544433516,1948280431,544434536,1701869940,1768902656]},{"sector":8,"length":512,"data":[1919251566,1918989856,1818386793,2019893349,1952671088,1392534629,1852404340,1635131495,1650551154,1696621932,1667592312,6579572,1769108563,1696622446,1701998712,1869181811,2019893358,1952671088,1124099173,1969451625,544366956,1953066613,1717924384,1852142181,1426089315,544500078,1701667182,1936289056,1668571501,1851064424,1981838441,1769173605,1830841967,1634562921,6841204,1768838400,1768300660,1713399148,1634562671,1919230068,7499634,1280331081,1313164613,1230258516,1696616015,1667592312,6579572,1936617283,1953390964,1684955424,1396785952,2037653573,544433520,1847619428,1830843503,1751348321,1667584512,543453807,1769103734,1701601889,1886938400,1702126437,1866661988,1635021678,1864397934,1864397941,1634869350,6645614,1701603654,1918989856,1818386793,2019893349,1952671088,1342202981,1953393007,1696625253,1701998712,1869181811,2019893358,1952671088,1224762469,1734702190,1864397413,1701978226,1696623713,1701998712,1869181811,2019893358,1952671088,1275094117,1818583649,1953459744,1953068832,544106856,1920103779,544501349,1668246626,1632370795,543974754,1701997665,544826465,1768318308,6579566,1701080661,1701734758,1634476132,543974754,1881173609,1701012850,1735289188,1635021600,1701668212,1881175150,7631457,1635151433,543451500,1918967872,1701672295,1426093166,542394702,1701869669,1684370531,574300672,1886938400,1702126437,975306852,2019893282,1952671088]}]],[[{"sector":1,"length":512,"data":[570451045,1696604716,1667592312,6579572,539109410,1701869669,1684370531,573121024,1886938400,1702126437,1025638500,2019893282,1952671088,570451045,539114810,1701869669,1684370531,576397824,544370464,573450274,1886938400,1702126437,1562509412,1919885346,690889248,2019893282,1952671088,570451045,1696604718,1667592312,6579572,573451810,1886938400,1702126437,1867776100,1634541679,1981839726,1634300513,1936026722,1986939136,1684630625,1380927008,1852793632,1819243124,1918989856,1818386793,1850277989,1701274996,1635131506,1650551154,1696621932,1667592312,6579572,1701603654,1684955424,1869770784,1969513827,1948280178,1936027769,1701994784,1953459744,1819042080,1684371311,1919248416,1951596645,1735289202,1852140576,543716455,1836280173,1751348321,1986939136,1684630625,1685221152,1852404325,1718558823,1701406240,7562348,1769108563,1663068014,1953721967,544501345,1701869669,1684370531,1953384704,1919248229,544370464,1818322290,1918989856,1818386793,2019893349,1952671088,1325425765,1852400754,1981836385,1634300513,543517794,1701869669,1684370531,1280198912,541412937,1869771365,1749221490,1667330657,544367988,1919973477,1769173861,1696624239,1667592312,6579572,544173908,2037277037,1818587680,1952539503,544108393,1835365481,115,1836008192,1634494832,1852795252,1868718368,1684370546,1396785920,1868767301,1635021678,1864397934,1864397941,1634869350,6645614]},{"sector":2,"length":512,"data":[1869771333,1852383346,1635021600,1701668212,1124103278,1869508193,1633886324,1629514860,1852383342,1920099700,544501877,1668248176,1920296037,1291845733,544502645,1763730786,808984686,1830827832,543515759,1663070068,1768975727,1948280172,7563624,1735549268,1629516901,1701995620,1847620467,1713402991,1684960623,1668172032,1701082476,1818846752,1629516645,1847616882,1629516911,2003790956,1746953317,6648421,1279872512,1886938400,1702126437,1850277988,1768710518,1970348132,1718185057,7497065,1635151433,543451500,1769103734,1701601889,1717924384,1852142181,1409312099,1830842223,544829025,1651341683,7564399,1952543827,1852140901,1634738292,1948284018,1814065007,1701278305,1766195200,544433516,1953723757,543515168,544366966,1634886000,1702126957,1409315698,1830842223,544829025,1684959075,1869182057,543973742,1651341683,7564399,1886611789,1701011820,1868767332,1953064046,1634627433,1768169580,1952671090,6649449,1229213253,1768169542,1952671090,543520361,1936943469,6778473,1869771333,1852383346,1768843552,1818323316,1852793632,1769236836,1818324591,1717920800,1936027241,1634027520,544367972,1936027492,1953459744,1952541984,1881172067,1769366898,544437615,1768318308,1769236846,1124101743,1769236850,543973731,1802725732,1920099616,1124102767,1869508193,1986338932,1635085409,1948280180,544434536,1919973477,1769173861,1157656175,1701998712,1869181811,1852383342]},{"sector":3,"length":512,"data":[1920102243,1819566949,1702109305,1852403058,1684370529,1986939136,1684630625,1919903264,544498029,1667592307,1701406313,1850278002,1768710518,1852383332,1701996900,1914729571,1919247973,1701015141,1920226048,1970561909,543450482,1769103734,1701601889,1918967923,1869488229,1818304628,1702326124,1701322852,1124099442,1869508193,1986338932,1635085409,1998611828,1869116521,1394635893,1702130553,1853169773,1124103273,1869508193,1667309684,1936942435,1768453152,2037588083,1819239021,1986939136,1684630625,1869375008,1852404833,1869619303,544501353,1919250543,1869182049,1631780974,1953459822,1836016416,1701603696,1702260512,2036427890,1869881459,1835363616,7959151,1668248144,1920296037,1919885413,1853187616,1869182051,1635131502,1650551154,1696621932,1667592312,6579572,1635151433,543451500,1668248176,1920296037,1919885413,1853187616,1869182051,1701978222,1701995878,6644590,1852727619,1864397935,1819436406,1948285281,544434536,1953066613,1869566976,1851878688,1701716089,1684370547,1868788512,7562608,1701603654,1667457312,544437093,1768842596,1325425765,1667590754,2037653620,1696621936,1667592312,6579572,1633906508,1651449964,1952671082,1887007776,1629516645,1847616882,1629516911,2003790956,1442866277,1431589449,1696615489,1667592312,6579572,1752458573,1763730543,1953391972,1701406313,2019893362,1952671088,1442866277,1970565737,1663069281,1953721967,1952675186,544436847]},{"sector":4,"length":512,"data":[543519329,544501614,1869376609,6579575,1936617283,1668641396,544370548,1852138601,1768319348,1696625253,1667592312,6579572,1953719620,1952675186,1763734127,1953391972,1701406313,2019893362,1952671088,1174430821,543975777,2037149295,1819042080,1684371311,1953068832,544106856,1936617315,1668641396,1936879476,655360000,6554600,65546,858927408,926299444,1111570744,1178944579,1951604782,544502369,1869894432,538976368,1735288140,1310746740,543518049,538976288,538976288,538976288,1816338464,74675041,1162104643,1413563396,1414726977,72041281,1346454856,541601795,807421955,572540930,1681989664,1936028260,538976371,538976288,1968185376,1667853410,2036473971,1818318368,1276208501,543518313,1651340654,544436837,544370534,1931487498,1701668709,471889006,1735357008,544039282,1920233061,1869619321,544501353,807433313,976236592,1392787457,4607045,0,67108864,65536,-2147483648,2147483647,83886080,131072,0,-128,100663423,262144,0,-8388608,142606335,65536,0,-16777216,150994944,131072,0,-16777216,167772415,262144,0,-16777216,234881023,262144,251658240,524288,268435456,655360,234881024,393216,671088640,65536,201326592,65536,0,-16777216,117440512,524288,184549376,524288,721420288,655360,637534208,16777216]},{"sector":5,"length":512,"data":[654311424,8388608,369099008,262144,50331904,16777216,587202815,262144,587202881,262144,587202885,262144,587202817,262144,587202821,0,134217991,134744080,134744072,268961800,269488136,773725184,623060519,235733782,688662533,16843053,18356481,18553345,319947025,33554433,50331649,1,10,100,1000,10000,100000,1000000,10000000,0,-1094967296,16409,-910228480,1077186075,728806814,-1647989336,-1495973783,524943311,1087619704,-2132177696,-1816508471,-561102424,-335831559,1129425534,-1508994617,-484859730,202852003,1971749237,1296615798,-985834011,-1635042467,-1751426414,1375898144,1965409376,0,-1094967296,147481,65540,262146,1,65536,131073,2,262144,262148,1,1048576,1048585,16,524288,524292,524297,1812004880,-690486826,30870785,3200804,924893184,959590710,808596789,16776704,-33619984,-124113412,33554688,134218752,805310464,16384,16771584,1297040368,5325136,0,0,-438566912,-438508068,0,538976256,538976288,555819040,539042081,538976288,538976288,538976288,538976288,1077936416,1077952576,1077952576,1077952576,33686080,33686018,1073873410,1077952576,336871488,336860180,67372036,67372036,67372036,67372036,67372036,1077952576]},{"sector":6,"length":512,"pattern":0,"data":[404242496,404232216,134744072,134744072,134744072,134744072,134744072,1077952576,32]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]}]]]
      • fd2.json
        [[[{"sector":1,"length":512,"data":[1183861995,1147495794,2118479,66050,1073770498,130305,65544,0,0,2686976,536870912,538976288,538976288,1095114784,540160340,6299680,65543,196608,655360,-50724864,-795951055,12441742,-530150020,612270331,-2013039105,-524802986,-1983869409,-1175483922,-1510801152,-528713238,-1898410465,14215376,1701147206,5459780,-1958328693,2123057238,-941936320,6307398,-398571890,946995394,196738865,2113125888,1604776791,440765222,-947713164,1031808544,1927771392,-1746382737,1095114752,1183711316,-1948569282,1183520382,1146522434,1476430312,102650482,12519199,-964056288,-972950015,1940778705,-754667260,266633448,1913649213,-1413467672,1474830094,1699422208,1818586738,1044811264,12507953,-1073107680,1212689268,-2129822069,-150929433,1246102503,-397650413,-445448138,218114536,1330594314,1919230036,805314930,-854143516,1370137,558843680,1586102304,59940,-617545632,281874100,1012313182,-1007454976,1397772886,-1430568524,609651285,829739652,762450893,-1437209727,-372168843,915219315,1552514461,240945420,1381652571,138709328,-1995811703,1150026844,-347950074,16781357,1515739904,-1970188206,1727404102,-235433702,410449554,-964111991,-909055610,1183500752,-18864104,-1193211708,1451885057,1930677540,-840683512,-346400749,190710664,-1064564877,-1911503744,-2091231040,-763166272,-411742464,1271095032,1162760773,1394614348,-1437248679]},{"sector":2,"length":512,"pattern":0,"data":[16777213,1610940480,8390400,184590345,-536018752,16781056,318840849,1611989312,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-533921088,1048322]},{"sector":3,"length":512,"pattern":0,"data":[16777213,1610940480,8390400,184590345,-536018752,16781056,318840849,1611989312,25171713,453091353,-534969920,33562369,587341857,1613038144,41953026,721592361,-533921088,1048322]},{"sector":4,"length":512,"pattern":0,"data":[1112692052,538976335,541872212,229507072,1179731537,229507072,214609,44352,1296912357,541347393,5066563,1671188736,11851,-1297874944,2829677,87396,1162037733,541414222,5527636,1671189248,11851,1079771136,8464599,18427,1330927077,1128618053,5521730,1671188224,11851,-1417347072,9645642,67]},{"sector":5,"length":512,"pattern":0,"data":[]},{"sector":6,"length":512,"pattern":0,"data":[]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"pattern":0,"data":[]}]],[[{"sector":1,"length":512,"pattern":0,"data":[]},{"sector":2,"length":512,"pattern":0,"data":[]},{"sector":3,"length":512,"data":[1329798123,1195984462,16777235,1962999810,1702065518,101124196,33752069,-1612519167,-1102067527,-141975666,-2135578338,84265100,98078208,-1064434136,-56232963,309100590,-1830325488,235842991,119473678,376086,1434472379,1481659851,50531105,1261724426,816337475,16669587,-570384684,-939523841,1124985855,1229344335,392007,33685760,-1672261505,-15846984,-855576389,1482398992,1997859511,45579,2077204264,2013259776,-840250624,-50219626,-369070360,131203406,1582354278,-218427540,1324601174,1190322732,-1778320666,913918270,783783783,874686215,-2020165338,-1647501659,1784878745,1392770996,1730084654,-872719616,-185924428,218066191,776996606,7937678,-2046425893,312557174,104539903,678756368,-234747284,69061394,313660476,789972687,-1217684985,-1007999232,520575231,1048653507,1968993895,1762191625,1342665918,502232474,61919064,-486482825,921220870,-83893590,822246633,-7983424,134275078,-854166080,-1073146113,4058996,41285490,2064650416,646458885,-1605608679,-619372957,1948254644,1965169335,-351834620,-14237206,-1658927826,222791682,36891135,-402504727,-385811197,-970063319,771772630,-466614723,-1007407905,-14229533,-850983542,-369565143,1864305075,1465274503,-1269606913,-1291798770,1532500743,1583308269,-915775331,-255387875,30992641,1397222272,-351945801,-1308349352,1275644754,-1307831956,1074842438,984749100,741611723,-886132196,606873632]},{"sector":4,"length":512,"data":[684401330,-1305727972,271633174,179450924,788805835,-11403204,-930341296,-425600882,104530431,712376808,-1982660724,-367620384,647334657,-459203649,1862674689,-1610638328,-100555529,1484130561,-316633510,-670687292,-1324036261,1344207625,1124090040,1896775807,-648511488,-508113121,-1089697490,-1626960850,1459604226,-351908674,173037127,92657353,1019228385,118418294,-1274957570,1745283842,-1100816894,-904198556,-1318386697,317454111,216788765,-568237541,-1732378601,1208304347,1887128163,-1784458671,-963361150,1887727266,83242623,-618498944,973621130,1719076095,31510936,513276870,-1796896429,1489402726,1425980924,-346466047,18997046,-32675958,-1961734261,-1047063465,-331902162,755924932,-1962842947,-1988252586,-1682697657,57739531,11838299,1482250877,-1928975522,1670507117,1282353431,-152337996,378220252,1858336907,-1058124018,-396947730,1515953157,91104922,60087302,793908400,-94790570,-619302837,657195230,1352487420,1834294866,280168028,922706206,-1660658397,-587047114,-675008855,1181886041,1576824839,-94873057,-1099337413,13344091,-385760944,1807423459,-1163510206,-1223658041,-619858858,-16381660,-370548153,1967914828,1625941757,-1089345281,162592784,552453366,-1157303947,-12184704,-11325321,-2011693107,1009788128,183349296,-2062020492,1958568233,34461220,-985867731,-1994434281,1397882623,-1976640719,-779154658,-1884363849,-386109448,1977483203,-85899746,393501174]},{"sector":5,"length":512,"data":[911560788,0,4195903,211028480,232000972,241503836,283578599,3953819,4320,4194908,0,0,0,0,0,0,101842974,113707124,144705674,159123814,162007442,164891070,154798372,135268842,2106,262144,128,327680,18219264,460361,32,218628096,6422532,591433,18219264,11929161,656969,67764228,101318664,34209800,67829770,17563654,-8388607,8388607,15073280,34342473,1,16711680,15073280,84674121,-2147483646,2147483647,15073280,101451337,2,-65536,15073280,218891849,4,-32768,15106047,460361,11927584,853577,1,65536,16646144,460361,16646176,34473545,1,16711680,18219008,460361,18219040,1609,1111556949,12591187,1090802944,-1135459260,1409286208,1347436806,2084851269,1426140672,1129464070,1817067860,1409286144,1397965062,676218697,1409286144,1330397705,1163021123,9192513,173277184,1129270338,1230133067,9454932,122748928,1280266050,-28425915,411904,1107579136,-1236970407,411904,1124356352,374489416,411905,1124422656,1380533320,27197552,1212351317,12597330,1124422656,1163087692,52,1329792081,10113101,21038665,1329792597,1413563214,20381844,1329792085,9460048,55902678,1750290243,1426154752,1163084548,-2076161977]},{"sector":6,"length":512,"data":[1141068801,8930117,106168320,1162626372,2377044,122945939,1347635524,340087631,1359063808,1431258118,-1773843390,1493584128,1141134593,1279739219,1426186816,1179600131,28704784,1329923157,806476,89391562,1396789829,15429,1157911552,1213483352,1426211328,1347962115,33489012,1480919121,1145980244,10372165,1609,1095107668,10243145,89129559,1397506374,1224801861,6,1426213888,1279870471,1397706821,21823508,1229326421,1230193996,1590618,139723272,1280067910,1380010051,45088856,1279657300,-2142743723,1426225664,1095910916,1627429955,1174885378,1296385362,5262661,106168938,1146373447,7098953,106169056,1297368391,5000517,72614433,1414283592,36634692,1229455957,37339312,1313407828,33588291,1225151491,1380275022,-922738604,1224955138,6313038,122749706,1163152969,-967686841,319179008,1225282819,1397051983,-1739305899,1426158656,1313164294,-2008525753,1426268096,1884179458,1426254848,-1404089342,1358954688,1313819655,1414416711,105447654,72614696,1263681869,43319320,1095567445,1096171864,1082412105,105907066,1230520653,15094862,2147419721,57671680,1095567952,1313819736,1414416711,105447654,2147483647,56099653,-1236449971,1627801856,1292391683,1447120197,-2142484159,1476631104,1296387332,1224795724,1476520966,1296387332,1224791639,1409537286,1145785605,7623241,72614562,1163284301,63504476,1162740566,-1157627817]},{"sector":7,"length":512,"data":[1325618435,-1070578620,55902968,1079199311,1426317632,1146244867,34914356,1095764565,1129136466,1414419791,68223144,1095764053,1397571922,10768980,39126006,12077392,122749651,1313427280,2119320916,-1090107136,1342461697,5526095,89588792,1414680400,53936471,1330643797,1476430931,1342461188,742671698,1426320576,1381257219,59293756,1095894613,1297040462,68812960,1095895380,1297040462,1615157833,1409503488,1095062020,-1979708348,1376146436,1279541573,-1560276914,1376014596,-1572060859,1074153728,1376211972,1095060549,1852755,106169386,1095648594,4212045,89391605,1163085138,2113940564,1376211972,1230133061,3163476,89391961,1229213010,1962965074,1376081156,1145984335,74170492,1431439444,1381123406,9982543,72614911,1262830931,81723448,1163069269,1329941317,-738195386,1393054980,1162560837,72240207,1426305024,1195725571,84951108,1163070036,1480938580,1179992660,83296404,1213401169,1230262863,10900558,84018761,1230177109,889218126,1392922885,1279741513,1224774213,1426373382,1514754822,1481002821,1426327744,1414550276,1312838738,1392727301,2380369,72680068,1414680915,86442076,1397949525,1079002949,55838100,1683117139,1426420992,1129665284,1589651523,1392792837,-1269808809,1359237056,1480938500,1224765012,1342531334,1431458820,1224801861,262,1426438912,1431458821,-1065860274,139724190,1314214484,1163149635,96796756,1498678869]},{"sector":8,"length":512,"data":[1179600208,85606592,1347749461,1163084099,78577692,1096155988,-1728026548,1459900676,-700165553,-1475983104,1459966981,1163151698,99352580,1381435220,1279611977,1644169294,1392924932,1163154265,1627390029,233,1376094976,1381388043,1162104643,1414744396,1,1224791552,1376092422,1381388043,1346454856,1163544915,513,1224791552,1376054278,1381388043,1430406468,1381257287,1025,1224769024,1376145670,1381388042,1346454856,21451343,8,105447638,173147642,1213355599,1347436869,167858772,-704643072,-939112192,1326076420,1162367574,1313165377,786756,14024704,102434377,1448020818,1095715922,1397312580,917844,14024704,46007881,1448021074,1397703762,1145979208,268518732,-704643072,-788117248,1326207493,1296388694,1312901203,21318724,18,105447638,122816063,1346454856,21451343,20,105447550,122816246,1346454856,22172752,24,105447550,122816176,1162170950,22172752,28,105447550,122816296,1162170950,21907789,32,105447638,156370788,1346454856,1330795077,2228562,8257536,103220809,1480919122,1380996169,637616975,2113929216,1007044864,1158173191,1129597272,21316687,42,105447622,156370703,1330795077,1145323858,2883922,8257536,87950921,1380976978,1481197125,21448019,48,105447638,173147654,1128354899,1296649291,838947913,-704643072,1342589184,1225282055]}]],[[{"sector":1,"length":512,"data":[1414877006,22234450,52,105447622,139593266,1145979218,1145390419,13825,1224795648,1376232198,1279870472,1146047813,3801413,11927552,125306441,1163135058,808997971,989935416,-1241513984,-469350144,1225085447,1414877262,0,1224764928,1376276230,1414876934,5526864,256,105447534,156370939,1163280723,810831433,33554480,8257536,110691913,1095960914,1313424726,3289172,516,105447550,156370894,1163280723,827608649,34078786,8257536,126748233,1095960914,1313424726,3355220,524,105447550,156370401,1163280723,844385865,34603060,8257536,115213897,1095960914,1313424726,3421012,532,105447550,156370561,1163280723,861163081,35127349,8257536,95487561,1095960914,1313424726,3552084,540,105447550,156371041,1163280723,861163081,35651639,8257536,129500745,1095960914,1313424726,3683156,548,105447550,156370981,1163280723,861163081,36175929,8257536,107546185,1095960914,1313424726,4272980,556,105447550,156371126,1163280723,861163081,36700226,8257536,147588681,1095960914,1313424726,4404052,564,105447550,156371170,1163280723,861163081,37224516,8257536,150472265,1095960914,1313424726,4535124,572,105447550,156371214,1163280723,861163081,37748806,8257536,156239433,1095960914,1313424726,3487572,580,105447550]},{"sector":2,"length":512,"data":[-1,0,13697024,14155776,16,262168,2031640,9240600,10027032,10813464,24,40,1703976,4063272,4980776,9240616,12124200,17104936,19922984,21102632,22872104,28377128,48,9306160,11403312,40108112,42008656,42991696,46006352,46268496,46596176,46923856,47251536,47579216,32,1572896,3276832,4718624,6488096,10944544,2752560,3735600,5898288,13566000,15401008,17367088,19202096,20709424,5177592,8,458760,1376264,3997704,6029512,3670184,5767352,176,1966240,13435032,15466648,15335640,200,168,184,160,10748056,15466648,14876888,8847448,144,7340176,7667856,13172880,216,3014872,3604696,11469016,232,1507560,208,262352,524496,786640,18415832,18874584,25231576,224,1507552,3277024,44302416,264,9634008,2294000,88,3342424,248,240,120,4915320,136,5898376,256,5308672,9568512,10944768,7995536,12910736,4522128,32702544,35455056,64,393280,1179712,1572928,2228288,2490432,2752576,3276864,786496,5898432,192,128,6488192,2621512,7929928,9240648,16580680,15335496]},{"sector":3,"length":512,"data":[25690184,36765768,47448136,1441880,272,280,304,4194608,6881584,9175344,262200,56,13041720,30146616,37945400,40697912,44826680,96,7995488,104,25362536,10092656,39059568,152,2359448,4194456,6553752,26476544,14417920,786512,9633872,551551264,498073888,48890152,57278760,15990816,28246048,34013184,-65144,5636096,-65480,1572864,-65536,11796480,-65528,50397184,-65160,34013184,-65536,22675456,-65536,50855936,-65536,4980736,-65448,74514432,-65168,47906816,-65176,9699328,-65464,17956864,-65528,54984704,-65488,57802752,-65456,8126464,-65520,9830400,-65520,9371648,-65520,41877504,-65472,17956864,-65472,4915200,-65496,7733248,-65496,3276800,-65512,10551296,-65464,12255232,-65464,11796480,-65464,4587520,-65520,28377088,-65456,9175040,-65512,6684672,-65520,3604480,-65536,8912896,-65520,15073280,-65520,1245184,-65536,1835008,-65480,3932160,-65480,640679936,-64128,68616192,-65296,10223616,-65496,3932160,0,38273024,0,0,0,0,0,0,0,1310720,0,0]},{"sector":4,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1392902144,1163154265,1101,309955693,1398362890,776815956,89342288,0,1292369920,776882497,88752719,0,1158152192,776163922,88752719,0,1443364864,776491585,88752719,0,1275592704,776425039,88752719,0,1208483840,777011525,88752719,0,1393033216,776491604,88752719,0,1393033216,776492101,88752719,0,1174929408,775435344,88752719,0,1174929408,776484916,88752719,0,1174929408,776353844,88752719,0,1174929408,776484664,88752719,0,1376256000,776228417,88752719,0,1141374976,777277001,88752719,0,1141374976,775435334,88752719,0,1141374976,775370822,88752719,0,1393033216,777277001,88752719,0,1393033216,775435334,88752719,0,1393033216,775370822,88752719,0,1409810432,776754243,88752719,0,1409810432,776163399,88752719,0,1409810432,777144387,88752719,0,1409810432,777147475,88752719,0,1409810432,776752962,88752719,0,1409810432,777277001,88752719,0,1409810432]},{"sector":5,"length":512,"data":[775435334,88752719,0,1409810432,775370822,88752719,0,1409810432,776885574,88752719,0,1174929408,776754243,88752719,0,1174929408,776885574,88752719,0,1174929408,777144644,88752719,0,1292369920,776490309,88752719,0,1342701568,777212481,88752719,0,1141374976,776491593,88752719,0,1124597760,777142600,88752719,0,1158152192,775305289,88752719,0,1158152192,775370825,88752719,0,1158152192,775305293,88752719,0,1158152192,775370829,88752719,0,1325924352,776489538,4866639,0,0,-1912602438,429274,-1947389184,1246660,-388823887,-1039936884,-1560280925,100859904,10682368,172800,637534883,754975393,44240896,48896,-1191060034,-57671662,901033006,495526349,-2097003124,-253623097,-1172369890,12058830,-1172189915,599261397,-1172189915,616038557,-1172189915,1069023430,522308901,503316664,-1202708912,1343095302,59406,59406,503316664,-1202708912,1343095302,59406,59406,-997983285,-410822650,-1765310177,972849152,-4258957,1421105151,-326426163,18239104,1515805528,526212958,-793194745,113541888,-927464469,-346334976,16758791,-617363149,-1912602438,10746842,197233408,-1591774013,-1073020928,-1064431244,270416678,637957120,-352316255,734235885,-2097151970,243863787,512294912]},{"sector":6,"length":512,"data":[516161538,-1064566784,326419211,10731571,172800,-1207959389,1343095058,-1194634490,1344143360,59406,503316664,15208016,48896,-1191060034,-57671662,632597550,-854211298,-947708127,-1577983484,101384192,695468034,-402526277,10551338,3336192,-402522437,44105758,4253696,1441282736,41216,-1157614104,132645379,41216,567102644,168266286,-402230080,-347930568,1689371635,-1325398040,190474,-466483989,805630454,2025552,-1010529704,-389772720,1347944449,-388889423,1476396008,805572388,41040444,-796260604,567084724,453116099,892609571,959985462,1027357498,1383415614,1769238133,1696621933,1919906418,1629487136,771760244,855640589,427968,1048824576,1962934272,10603265,59648,-1909001077,992346692,125764181,992351356,638546437,2080789819,638025480,1996768571,-910636287,59648,-265554805,-293532302,124912128,13883,-1194655374,15270090,-1931703552,2009413338,2143565322,1334523398,-1527514108,181066382,-1949791488,-1947169830,1356986362,-137983150,-1948742685,-1948125241,56122056,-875494445,199854933,190870763,175742171,-738733577,-2097036925,-771030829,-150308452,97712080,-763166719,-1947104512,868824059,2211291,-741223983,-551825877,-838663053,-772415725,1305661904,2040392309,-137234673,29459411,-1660890237,233506169,-150308451,97712080,-763166719,1573608704,-385824584,-511508480,-788106209,-489106966,-511456262]},{"sector":7,"length":512,"data":[-788106209,-489500192,-770978822,-789116291,17158903,13796096,920423371,-402372725,124911851,-745815669,-1207958838,15270091,920423168,906250123,-1945743420,25749699,113902450,13416448,-1962934039,2143565532,41220,-1593472730,-1993998334,80347717,920423168,637829060,10683787,1166747136,172802,10731571,313856,-1962789400,-992506938,721420350,721420822,1929379846,1049895,639757130,637949187,637687083,1023689987,74579984,1107300397,1929718566,1049860,147293002,-613023989,-889041688,-1962806808,-992506938,721420350,721420822,1929379846,1049904,640346954,637951371,990010667,639333082,637816203,74648875,1259389315,108517947,-935655310,-1047853966,-947661941,1979648776,33548498,-320319285,4113409,638577408,637951371,990010667,-2090896422,-16054073,-2014777995,-1949398271,35531743,928512,-2096860416,994775233,1913026522,1925724962,953118,35556096,64160512,1064385,271385714,10699264,35031296,1482484480,3723,134667,1347441780,7935,1256413329,-1953598135,-1960393767,723911757,-2096860403,994775233,1913026522,1925725070,227223178,39684902,-1056713981,1912606781,1060100,92874306,39160102,106248998,992348533,58000453,1476451560,-1007041544,863289355,50409192,1036059603,74579984,1107300397,138811,108469362,3643,372970610,242679810,104531570,108462080,16068,-1007071253]},{"sector":8,"length":512,"data":[39664422,91692658,1913469734,1564157463,1916237574,1295721990,640644868,-1960440437,233505373,39140134,91693170,1912945446,1429939737,1913681670,1161504262,638088964,637814155,-402238069,-947716011,1979648776,35011503,990868736,1962934278,952585,35555584,317244160,638546432,-1993994871,-1993997731,-1993997243,-1950153131,-2097151938,427034863,-288229493,-288231727,906227409,909836290,91619330,16009,-1950090813,-67108810,-1524194010,-1524194010,-1995903101,-1023410122,16011,292945675,15915,-164424843,147083,268486529,4074435,855798528,-2080928769,-271511578,-271454255,1040445393,1044054018,276234242,909837938,141754368,13963,147083,634424259,-355401713,-355341615,-1312560431,-1950166268,-253656118,185590403,-1946369087,920292572,906526660,-1408993339,852003498,-1901792275,314074,-1931703300,2009413338,2143565322,1334523398,-1053119484,-1047920010,852003498,-1901792275,707290,-1003037557,-1977219969,-891014651,-1946419196,920292572,906788804,-1979156539,920924676,184962955,-1190953015,-251461631,326287659,1334523456,2110327556,1003041538,-1962510655,855829441,-930370880,-628185869,-67106614,-628302709,142591030,74958134,839748134,2534637,638087941,-1962998330,64026305,-930461703,-628185869,-67107638,907992203,906524613,637829060,-315486838,-1404622365,695337276,-223606665,1327265198,-466477077,-802434677,-1958604430]}]],[[{"sector":1,"length":512,"data":[1957098440,63449870,1207501809,871396682,722004928,919047160,520374059,-67106614,-628302709,142066998,75482166,629810860,986221127,-1979550004,1959332556,-202558970,973239718,-891646268,-1946419192,2143565532,-1442729978,71797302,182954,-1931703300,2143565530,2009413130,1200305670,-930371068,-628185869,1426065098,-327029621,-1098055168,1461124864,101351108,112727,105286480,-401715128,2126839504,240584206,-1912665880,385745086,176079959,1996445446,16758790,-1310192048,-286781698,176080126,1996445446,1877478920,1575324670,1426066634,-327029621,2122514944,1132331014,-16728435,2126796566,-1202256374,-1957691391,1346897990,-25761778,-33505651,2126796566,-1957231094,1174603846,-4698106,-401715200,-401670564,2126839449,-1202256374,240124159,-1946281496,147480037,-594805760,-1003038068,-986314113,-1959393673,-813038497,-1070404302,-880104717,548513011,-819279062,-628184333,-67107126,-1003037557,280560767,-205507840,-594818133,109036598,71797302,-13444982,-338492495,-511653750,-771641337,17311456,-1962933558,2143565532,1200240136,1468675590,1926244868,-1966932449,-1308675368,-1964256509,132219080,-523107920,-805238746,13861824,-193606914,-67107638,-628302709,175621430,109036598,73370422,-315437174,-880086781,-628185869,-1962931510,2143565532,1200240132,853051912,-754732545,-2134340885,28313569,-2077826862,444929,-1931703300,2143565530,2009413128,1095940]},{"sector":2,"length":512,"data":[84616877,-1896226133,314074,-1931703300,2143565530,2009413128,1095940,651229101,-492108509,-891646217,-1946419196,920292572,906526660,-1190889531,648871952,-492108509,-891646215,-1946419196,920292572,906526660,-1190889531,-1477246960,147511950,-594805760,-1003038068,-986314625,280560759,187084032,41266949,-628164638,-2130704182,176161015,175862985,980972736,-1861912895,-678961529,-654917334,1735600188,1347797382,-461314422,870878080,-1331930937,-2133950464,-2147430527,1913190784,-1966831087,-1965061405,852921082,149520630,-922031381,-355399052,-657335343,-160052738,53967005,333321153,1573751767,-623834509,-657335343,544522750,-2097119227,-763166509,-1978699264,2145812673,-1950092022,-1948349503,-623787049,-344604162,-1054096391,-686039525,1935527307,-137169136,-170330157,-2097097853,-176160558,200969088,1962413051,2029390541,-773795401,-19738157,-369986103,-1073086210,-922027660,-1957300876,-2116602902,-2038431518,315687632,-2117563664,-2122317619,1384120527,74834954,225762059,678817034,611710475,-2015459439,-1966765073,-1947863356,-138048552,-2082995226,-896859950,-403192437,-763117309,-1870861568,1431393879,-326414253,1183500595,124188161,-108269429,1183570315,140965632,-99356669,1183570195,107411202,-99356669,-242493165,-150976885,-134018458,-250357229,-150845813,-134018970,-250357229,-150714741,-134019482,-250357229,1183578507,174520066,-233580541,1183578387,140965636]},{"sector":3,"length":512,"data":[-233580541,1183578387,174520068,-686569981,-1827879805,-167092903,-523171976,-758000687,-2115403447,8390016,-2097097853,57868498,-163456303,141902021,851544641,-1007824651,-661929933,180605067,1442149568,-684463477,-2147430527,-2147431039,-2147425663,-785726842,-1336741862,113154,108392251,41279035,108193082,-568597206,-757993701,-456126094,-707669039,-450174349,-283386341,-18093064,1376417992,1962934714,-348081435,-1312650271,1541460742,-144877222,-2083260464,125370354,-741224239,-2125868335,-377454399,861077351,91839191,1523765586,-2134444349,82315124,-183208960,1975597763,1958742542,1977039626,1977498374,-1008387582,-636757877,-292931468,175755787,-755511049,-2097151739,-661978926,184590520,-2029226542,177254611,-2046528010,193507570,-32999214,333120456,184056274,-2147256083,-1815904282,-886399055,-109031822,-28608737,-2130801983,-109018930,-1962446319,-2133707838,-109047575,-1978961399,-1964864828,-2131348778,-355399447,-906045231,208926837,141880586,-2097151739,276299986,175767306,-755511049,-2097151739,-1007157038,-1070349319,-389819853,997326848,59595,-1949616782,-1946973240,59642,181086578,-399870775,527564800,59595,59595,-402606645,158466048,-402541109,24248320,13613259,-1207959319,15270093,13154304,1459618025,15225174,1600018688,1364613059,1493172456,1472421726,15225174,1600018688,1364613059,1493172456,1019436894,-1958120536,-1946973240]},{"sector":4,"length":512,"data":[870593274,-2133707813,964067561,1913715072,-1947760116,-17702,-351213184,150569199,-477491854,-91562102,-4794742,168356224,-116689719,-607003951,-906044208,-685509259,-450699741,-876596533,240145234,-1946179352,-1946973240,1515935994,-889192216,-2081649835,-930412308,-91491445,1014284298,1971373814,-129595071,-1980080503,-1048511402,-2131111808,-1047887679,1183323180,-129594370,-1946526069,1491663958,-13113089,1397934334,59472,1509836346,-512532642,-561266293,-443820149,-1201812643,15270095,562149632,-1076190530,15255823,1958742528,-2131329021,1551002684,-1105099847,264231586,-427797943,59519,-401575334,1448607495,1541934673,1600018943,-151064344,57966790,-16853784,59593,-402427236,-906035501,1912602856,-2134770168,15237326,1919695872,22986505,-402651207,1922892470,1958742535,-2131329021,966613195,1624719263,-1842307773,1068132144,1859596840,-283301194,-804424648,2060455168,-2004318072,-1431601656,178956970,-167414592,108298438,-385822792,-2119106560,-1974419158,-75449919,-1074580546,15217924,-1949791488,-1191539725,-617414527,1189663283,1347638014,855671224,-2147435813,1493172456,15228766,34455296,-402651463,-1057095118,-1093500999,1925126135,59441,1347637849,-1718042230,-1191182104,-138489216,829603607,1493172456,15228766,1936145408,868233990,-875416613,-660764035,-377676407,976128930,954437245,1233019790,306783378,-858993282,-1417720628,715827882]},{"sector":5,"length":512,"data":[-1669282058,-1182800256,-138489216,829603607,1006633192,1381331848,-1057075117,15269813,1600018688,15225168,-1073063680,-922877324,-2015459439,59607,-1191009089,-1326972920,-372156159,-1185870221,868154241,889503731,1493172456,343064834,-1961855843,-1946973240,8501498,-768353485,-889192216,13482072,1828716777,1611734318,742813745,1954539006,-2071364554,1012102945,2049885183,-1789166126,-1205502947,2120439878,-34604010,-137199499,1429303831,-326898549,1975519750,13691139,-956905165,1090811008,1367336576,855671225,-385928202,208797696,-2015459439,59607,1363231065,-1102414151,1874848142,59404,-303561357,-1082660096,45679541,777474304,-1959916149,-1959918987,15205501,1918459648,315065096,-276568094,113738502,-1980086647,1451883614,-1959897090,1972055565,2106273282,-55187452,-1957670062,1586231878,-27882500,-1191182104,-164429695,15269683,-1949791488,1492814835,15227483,8841216,113738591,772639534,771913099,-402358901,-161939456,343147201,-1949791407,-1191539725,-1564794495,1225767642,1493172456,1946272246,-2133950461,-883038837,-858790017,-159427565,154182388,-1849595265,-1249901046,1148160670,975995520,1786778573,101355969,129,562036736,1225775778,-1952257923,-1904362962,1670265059,613566846,-847343031,1288490188,-1431655553,-440423766,375043,1364218706,-1949791401,-386233357,1499398144,1493173992,15294302,-326413056,-1996034941,1586100806,-27883012]},{"sector":6,"length":512,"data":[772115246,771906955,1359238539,1360063319,227225175,41257774,75336494,-1962934040,1988885070,-25261060,1593835752,113738585,-2118525470,871772928,59647,-1017256565,7999,0,2147450880,855638715,429823,109979136,-4653012,-1960379265,1958742533,926432539,-1960439691,1027342917,-461371275,1509720287,-1070391829,-562778382,-253312973,126477275,347684825,-1946230272,255796487,-1174192323,11539248,1481911669,28361787,-610589323,-388391965,-1678845541,-644089378,-522609728,-1680220517,-1952759843,45129223,851051892,-1576816621,378077184,516096000,884481806,702757,567137931,-1946426816,-1172189737,45088971,-1078320691,-847925248,936189729,775278051,1355481088,-253312974,-1595531088,1347952870,47134,1048631438,1962934272,909495559,99287046,407257,434331,102945014,142082056,2031516,-816308480,1950198011,-482882241,3028429,1499027712,16482651,1493398784,27810649,-927328907,1963239424,13482513,175442088,-1476342086,-1174178544,-376307505,-987889664,-1694494690,-1021341552,958803,-478095222,-1057259328,941884532,-997849332,-670300380,20489006,1946671421,131939664,-616739980,1028027439,1148458968,1947720765,534265151,-599967116,1026913311,225720280,1949817917,-488924408,-335566872,780217875,805241144,-385901592,-610598873,-102851614,37674395,44079872,134612992,1173504,-2132616293,-50329562,103209371,1478449920]},{"sector":7,"length":512,"data":[-438723633,37674395,44145408,1157671168,11080052,-1457818560,376701952,-1680286309,-1681658151,36625198,-908485888,-1678190181,180607453,841118912,-1964209463,-2132508442,-2143322619,1381007566,-919383725,-841184431,-852534468,180650813,-298463797,183272395,1020124299,1036861275,1493353603,-1957143973,2147427832,1983872557,1977879066,-790263263,13926625,-2097097853,242352338,-405675311,868997841,870003648,-1057043502,-843518347,59648,104740301,-1724068608,-855637970,138807,103691725,172288,267915,506973643,1036845058,-1962933599,-889191402,104740301,-1724068608,-855637970,902691893,-889190866,104740301,-1724068608,-855637970,902676533,-382022148,103691725,902679296,1053674490,-842297108,-879694274,-1863172403,-197210677,1053674384,-389312262,-1070399412,-1959338869,-620034977,-141425548,46830323,3598336,8435859,-167763783,175472838,-757996591,-203241218,-427769806,434686847,-1623405312,-855618298,1591,-840878643,969801013,-885142055,10616801,35556096,784894720,8726263,-506338863,-385687087,-754724605,-472783919,-217918717,-472709711,17167106,13796096,-1996488541,-1023409642,750027781,243868109,378077184,1472921602,198740988,-150110766,-2083325997,-763166269,-1439846400,-1325378882,1413164553,1996976642,473640460,-964491405,1976172036,-1329463572,784399919,456006699,-177012140,773587758,-2096999405,-22412090,-1947961911,-819241009]},{"sector":8,"length":512,"data":[-1698037565,-169803717,-1734967291,256000000,25600000,2560000,256000,25600,2560,256,868233984,-470404142,1031808601,638022699,1965899136,1229407749,-2144974621,1148462141,-2145547738,-1015006485,-148344054,1978663106,-523152591,1347605201,-757997359,-757997359,1539507035,844878611,-2084371457,309854418,1322115655,-789116299,17158903,13796096,-1007041544,-85767865,-2145547738,57827835,-2145326208,-1015006485,-2146733558,-1015015445,-2133822714,79104707,-757997359,-805383054,-1022691723,-338566585,-326412870,1460989059,2114713987,768259,2113272195,-673533,-1996599671,1460075638,384597645,13756423,1317603167,-25785350,209253899,1190819331,1187383417,787153132,-24912137,-1107070452,2055208971,1120286188,443678956,-32540594,2055269442,242629100,15483590,1187507947,-16764436,-164365754,-27882500,897110539,-2130950410,766509940,-95515734,91867403,-341167952,6154247,-109491798,1282724363,1101672112,816842356,-143308118,-398624694,-341180349,-165629705,1954610246,-1439846398,-1442827544,-1341492158,686336558,1967303168,-1438273287,1451961264,2043808762,-148000764,-1031034150,-84538702,-1422905339,727699339,1575324623,-331183421,1975519814,1311813635,1975519939,440589,-63950664,-1070421005,-427768918,-2144579457,-319402572,-1979710203,-930375484,-637959336,1363214709,-388368553,1499398468,74678588,1224853480,-2133950383,-936737615,175374512]}]],[[{"sector":1,"length":512,"data":[-606999855,-906045231,213841525,-1309767168,-2131897852,-2010763067,266764333,-783264942,-774647328,-773795374,1506988499,324649219,-787260967,-741220143,1313329873,-970535051,-1017577467,-2081649835,-1070397204,-1980217719,1183447622,643949564,1183319434,1948269822,1948990472,1965898756,-397850878,1215430786,175430411,400808755,775782438,954405237,775782438,1229402741,1912628712,-472123605,92939818,74728764,527787324,-397194937,1918566400,-1948777709,-230974990,1077742197,1023769856,58720192,1362226169,-1949595049,1586231366,-61436934,2111633792,-592359158,1493195752,-400244352,1499398228,-1073082766,2122320500,1979198974,-2133950461,-1017256565,971234099,738560550,1930036282,1229407024,-1739108013,59545,-208942965,1183578763,-94467080,-386115957,208797856,-1996488472,1586100294,-61437446,1935366495,-109001787,-2142667558,1149183737,173036370,41524425,-645211658,-1963138176,49008891,-1912655137,771931583,-1959918197,-1959919011,-511703979,-402164733,-906100652,-930350731,-91491445,1515935901,15270776,59648,8504313,0,142,10165312,1052516352,-1525677912,79063252,236702143,-339366717,-841994888,1405230030,964229598,736821567,499494312,-830748168,-1073069929,1448167796,-1971270016,1388327624,-355381165,-657335343,-606999855,56547537,-569155898,1943409502,-774188789,-2133274149,426901953,-2097119227,-763166509,-788040960,29458650,-427817102]},{"sector":2,"length":512,"data":[79792767,-1017553405,1,10,100,1000,10000,100000,1000000,10000000,0,-1094967296,16409,-910228480,1077186075,728806814,-1647989336,-1495973783,524943311,1087619704,-2132177696,-1816508471,-561102424,-335831559,1129425534,-1508994617,-484859730,202852003,1971749237,1296615798,-985834011,-1635042467,-1751426414,1375898144,1965409376,1983905792,-569676998,16442,0,2147450880,-1957358785,686588908,-25283123,781794509,936181912,-2091389826,58594041,-2097147207,58584825,-1979715911,-839058866,-196703427,636896905,695500799,1971322685,-226590419,175407104,-1421783368,-374714704,2122514768,58261750,-1196806736,-1330950583,1038723654,-129595135,-371702136,1183383729,1849150964,1073688044,-145944390,-128546326,721424824,32696514,-839109171,-2077320388,-650851072,-58836531,1190608333,1950417148,-1707291383,-16776138,1003354182,1586359414,-1106988584,1036845065,-1964293494,-2132225312,805638116,126432816,1968063299,931739371,16416387,2122517372,92022008,-285587769,-92894209,209253899,1190688259,1187383417,736821464,-24912137,-2145094894,-969549702,1912657986,259542554,-2133310722,1983502458,-666712562,-940643584,3266630,871909119,-94991370,897110539,16154243,766509945,-129070166,91867403,-341167952,7661575,-109491798,1517605387,1101672112,816842356,-143308118,-397707190,-341180326,-2095009545,2030106238]},{"sector":3,"length":512,"data":[-1439846398,-1442821656,-1341492158,1072212526,1967303168,-1438273287,1451961264,2043808760,-148000764,179874522,-151612828,-157748086,808453618,-1731818837,805696246,-812930256,-842060961,902685239,1036910190,-1017256565,1188577930,58048522,-1018285904,-2081649835,902629100,936246910,-1724068382,-855599058,1944317493,-2012902874,540867398,725354612,758908020,1229390453,6940753,249813811,1006996006,1191671086,5892169,995679223,-482052927,92939815,74728764,477455676,-397194937,1918566400,-1712157906,662041147,2098431805,-327598814,-670884482,1172882315,-75595776,-855411411,969793589,1036909694,167528183,-117345280,-840812595,-838963659,1575324477,-472173629,92939804,168049196,1020072819,265882,-62486120,-62506291,-347519165,4047842,-854819312,2049874748,-918893312,1024458797,209580032,781925581,986513530,268436985,-1072965493,41499508,-259270409,-788011389,-840511002,8690492,-773271296,-1092038168,250282016,125036753,748371149,-2083964211,-1073018170,-619975051,986514552,986563529,-1957313543,552371180,-1961998709,2123173974,-402188576,-1960968192,-1004595465,1451952254,205949702,41861691,-902053237,-896859522,41795899,-1426275957,141869355,-1329034415,1504375584,-1960860429,214588901,-326413056,638222020,-315486838,638182215,1965047168,-136165629,1912602856,-1962286334,172895183,-768360397,637959876,-899871351,-1957363704,1089242092,-1961867637]},{"sector":4,"length":512,"data":[1451954782,206474004,242862347,721422009,-108851634,-1190953218,2123235326,-402188608,-1960968192,-1004595465,1451952254,239504134,41861691,-902053237,-896859522,41795899,-1426275957,141869355,-1329034415,1504375584,-1960860429,281697765,-326413056,638222020,-315486838,638182215,1965047168,-136165629,1912602856,-1962155262,172895183,-617365453,2126828083,227091974,576093,-2081649835,1317748972,2043218700,571662,-2096214485,58654457,-1912602951,118931582,503316712,521598859,-1962377532,1183516246,2126658318,1002605314,-1962770742,2109815754,-54424830,1958816682,-930393848,-1426906960,530903897,-899816053,-1957363702,176080108,839748134,165890029,540901414,-498662539,59639,232981106,1311494027,-667300598,-840026675,108971069,1561168166,-1962932022,-1003086116,-986314625,872154231,-1330074688,-2135381033,-1070355712,-1918129237,-1934920635,364424128,-930305279,-1178586197,-1410138098,1984904364,-1974489086,-202558776,-1430244700,576031,-1003037557,-1959392641,-1993997241,-1959394235,-1993996729,-1959392187,-1993996217,-1070395835,138774822,172329254,-1174402358,149673905,-338185542,-676087293,-1003037557,-1960442753,-1321401787,1024619735,225761202,1960292413,444176,-352295424,1460032036,2418702,650130266,637687177,638076297,-1156954743,1256718352,637957120,-1342028345,314071,48955568,-594869840,75482166,41779494,410310577,41779494,141875122,1735]},{"sector":5,"length":512,"data":[418054247,1358672,1476400360,208977930,-402645829,-953810935,-676330939,100664522,643237463,-1073014273,10683252,-1022927104,907992203,855932869,-1207072311,2105621760,1960292610,-16601075,41779461,41211827,2105556148,158597168,-852470387,-1991282143,32618501,-645150413,-1325236863,-1960217385,1140897821,1186472397,-1933014270,-2134706485,2105610613,1977070338,2549763,855777720,-942044215,-676199867,-1944828535,1300829773,442337560,1713128903,508398594,-903888845,-768409596,495700275,-851311944,8400161,1929435779,868233988,-1949660206,-1206023216,567099904,8426893,-1962901319,-851463139,855798561,1004221376,-2145356584,436240569,-347929740,735284210,-17968,45620619,857853250,-1273132087,-1021194944,907992203,637829060,638342597,637816203,1068768651,275915213,172329254,-953761741,2117,313887,172345126,-286588928,907992203,637829060,856446405,1300702921,495658504,567099572,-1054144654,1706558324,80355072,517769984,75482166,206947622,-2027501261,-1960441779,-851397603,855798305,80355264,920423168,637829060,-75293301,-1274644988,1914817854,-893373694,1048772612,1962934272,2105615880,1977069826,1569400333,1435182600,2110006794,113754892,6815744,-633607189,-1977219724,-1950091263,2110011132,4057090,-633614197,447802485,1048822777,1962934272,2105615880,1977070082,1569400333,1435182600,2110006788,113754892,6881280,-2010715157]},{"sector":6,"length":512,"data":[-633650431,-1950154380,2110011132,508973314,-1912602438,1569269466,106366472,1577002583,1958742804,41731,-1960442017,-1960441275,-1960441763,-1004141483,1579093117,-594820263,75482166,1374181126,-401312257,440205168,1011027316,-386632435,171769700,1598226805,1569269255,-1960449272,2143565532,-396950012,175505256,-2048389712,-401952513,123731840,140347686,-594868501,75482166,444433190,-905743104,1048772612,1962934272,643237622,186146303,-1544784704,-404029440,-1003037557,1460012159,1962934504,59405,1598226802,1569269255,447793928,-594807317,142591030,105351734,72321846,15226630,1225749760,-1332344450,59424,-392758814,123666432,140347686,1426064586,-1004606325,1460014206,-989855512,12126326,-401246976,222035968,440143476,1094912628,990152774,-344652210,210301227,-1993996449,1562314845,1426065098,-1004606325,1460014206,1962934504,142001445,-66695541,736375468,-1341358392,59424,1149958626,-1947979009,-66591800,59564,123730402,140347686,113925407,920423168,906655743,-1207404545,-2143944665,1962935935,2930691,-13217778,-401734537,-998047744,313860,1431458820,1095107909,1430606668,-326898549,108971040,15226630,48640,15212917,1947876352,1998601242,-219462909,1006633192,1124890144,1948319363,-532510477,1609427782,1569269255,-473003256,-528577262,15206166,-486379008,444170,855665152,-1949267008,1439391205,-326898549,138840864]},{"sector":7,"length":512,"data":[-1928702325,118939774,-1006632728,1460014206,1962934504,105286431,226410795,-930352757,15212720,-1946557952,-529101362,-391366916,-119406592,-1993996449,-443873187,445021,-2081649835,2126790892,-396950010,12451840,-400460544,440139776,540809844,-347929737,59634,209068092,1090421571,1116271476,-303348032,-1993996449,-829749155,2123174627,-402188608,41025536,113708259,6946816,-661929933,-443821941,-1957311651,1089242092,-1962260853,1451953246,105810702,242862347,721422009,-108853170,-1190953218,2123235326,-402188608,2126774272,-396950000,527761408,721962635,-1962049855,-1329034255,59424,-829687326,-54495603,15248438,1610146304,1569269255,1575324424,1426066122,-326898549,108971072,15226630,48640,15212917,1947876352,1998601242,-219462909,1006633192,1124890144,1950416515,-1069381389,1609427782,1569269255,-473003256,-1065448171,15206166,-486379008,444174,-855610880,902682681,-1958883858,1439391205,-326898549,105810752,242862347,721422521,-108853170,-1190953218,2123235326,-402188608,2126774272,-396950006,527761408,721962635,-1962049855,-1329034255,59424,-829687326,-54495603,15248438,1610146304,1569269255,1575324424,-1325398838,-1324684541,-1324946686,-1325208831,920423168,100958148,59479,15211637,1947876352,29488665,222037108,-1040838540,1007121410,1124300576,11592939,28312299,-1993996449,80349277,517769984,142591030,74958134]},{"sector":8,"length":512,"data":[-1413467140,-1411927880,381272115,-1398017280,41307964,-930459728,-1527517902,531284018,-1610610486,1035206656,116118067,-1170472776,-1957363711,142525676,41779494,443865008,41779494,141875123,1735,887816294,1460032080,5040142,-2144970662,1946169469,1435311634,857671216,522309065,10684019,-1844319488,38127398,-1993943117,105286405,71665958,445021,-1003037557,954729599,856585472,495658697,567099572,10683251,313856,-1003037557,484967551,639071488,-75293301,-1274448380,1931595070,41731,38127398,80402352,2105615872,1960293122,444166,-1023383808,1689927604,-1274680576,6666816,-991130795,-588772738,505116159,106349906,72190758,-853701850,1914657313,1958820614,-1547531515,-899874816,1068695556,-352295751,-1186942203,-1957363611,276743404,1979688680,172395327,477413387,-148483810,-930413467,-1978902843,495658723,525935053,-768401550,74839846,-1945731388,1960250306,92874245,1178279147,-1994951670,-352321522,41745,-1945731388,1960250306,650130181,-899873399,-1957363698,176080108,1979665128,138840865,73791270,1183565963,1710695942,-1949695228,495658704,-851312456,-1560055007,-899874816,1156055048,638546432,-2096870005,108265977,-401679565,80347136,3008512,-1047850126,-1960389749,-108854195,856060929,15208155,313856,1912607464,465644299,-1341820205,313857,80396338,920423168,637960132,-1291682431,858486231,651310025]}]],[[{"sector":1,"length":512,"data":[28843403,1377946946,868823888,495658706,-851311944,1381587745,651397968,12066187,1495387458,113754971,6750208,-768360397,-594820103,1472542238,818053892,567099828,-1560055009,80347136,-326413056,508619907,-1928956219,118927486,1329376508,1336935030,-315438966,-1070422797,173458858,-1926184317,1454682238,1931420109,41733,-1927408405,521580662,-2096464188,-1392758585,1975519914,-443867142,576093,-628302709,175621430,109036598,72321846,1945582588,66126599,-45134087,-628185869,-1962931510,2143565532,1334523400,1200240134,-1426850812,1426065610,1452010635,1959922438,4843525,817115371,54272461,1912602808,429605,109979136,-13434836,87697148,-4651148,-340856065,63407092,12187531,-1850805759,102682870,142525471,-208557316,-899866716,-768409598,-1828715800,429771,8437504,839748134,-617396243,-2144990749,58138685,-1946688953,638182391,1981824384,-136165629,-970209397,1245906036,1438899829,-327029621,-1927413632,521568374,168576650,-1274645056,-31339239,80775872,1174702144,1547306183,1202996806,57876941,-1929378618,2126807158,105810696,-1392714957,108314634,25699907,-2010712606,-443867363,576093,-2115204267,-402620180,1183514721,1958742656,989626410,-551280523,-796245716,567086772,567089588,141869626,1735,199950351,8552064,1001653620,-1962914840,80371173,-326413056,8449153,-1275059992,3598393,-899816053,-1957363708]},{"sector":2,"length":512,"data":[-2131983892,780288,568867508,1575324416,503317706,-1928956219,118915198,2134682876,2142241394,-204960872,-1430244700,-1927363809,521568342,1931420109,41731,920423363,1006913418,1007055457,738359162,182816,-1107296024,12517376,1975519744,444172,-1107237376,12517376,59648,167772392,-1106676544,12517376,59648,-402645829,-4718592,59648,1701672270,543385970,1882025827,1701015410,1919906675,1902473760,1701996917,658788,201384583,1009787928,1818252360,-1668250504,46248,0,98304,314048512,-26940672,1271733130,47487608,-1207959552,1407909923,1545072827,-1196803287,1,-352308040,1757558082,265986593,713,4569088,-140955157,-1702560817,-26080,1454899200,-1407128832,-137244807,11629079,-1207959552,267059303,0,0,49153,503347384,-644953716,112852118,-2086276352,529927407,726685635,-1414792000,-1420252245,11846026,-1245487189,491644929,-54514857,-1263817813,28879808,28879680,-1017140480,1049319254,-276627240,-666990324,119408128,440828,1594336755,1465303902,14171787,-1995640957,503371838,235347462,112851999,128316160,-1017225441,915101526,-1174667048,-1510801402,14169737,1455644255,-667514025,-193164032,14171785,119408380,-218102087,1583286181,-1957210429,-1962878922,503774462,440583,205883309,133817003,650337887,-919927669,184549562,2131197120,-1073628407,-654896917]},{"sector":3,"length":512,"data":[-617938510,-372161647,48486609,1435105259,140347658,-1996077687,1300825165,-1022523134,-2096608117,176099577,-1073612415,-1070920065,146110955,-1206096152,1877704704,721837195,16352192,-338623363,1418451665,16352004,-489617282,-791555119,336328930,167924747,-1311110434,-686939636,217677824,-109038988,35746816,-109049268,-2145029116,544475641,1432567,-2145617664,1963002492,-2147467867,267100277,-803077710,-1014900214,-487882753,-2132808712,1963002492,651753218,1455621513,112852055,1604711168,-1913157794,1015089268,259964929,1073822849,218040957,-939582232,-1023409916,-1073675065,218645959,122013184,1441852288,1465314443,-2096608117,142544889,243255563,485212203,-1461188427,2147465243,1149962987,-2133199354,-388820799,17464448,-654900619,-2130162293,2126512633,33128725,51346752,-1073660479,20780670,-1995997888,1583286341,146129757,-1206162712,149635073,1625821365,-1073629157,-335677720,478881509,39095078,12173355,2043808512,-137169143,-2456613,1300824497,1095946,74830347,11655815,208982539,-773140159,-338112037,-1073628685,1300888547,106793224,-1996208759,361300565,139234243,2132867459,2110327603,33128764,-1290568000,-685891060,173801984,1946549120,150700043,-768932236,451658379,28889643,100368384,-654897035,183227127,-790099787,-2147436006,-1377189845,39619328,1544166410,71600897,-2147068789,276238569,-955596022,-768896365,2115027328,266436851]},{"sector":4,"length":512,"data":[-1101652509,-1026293761,-422330157,-937177461,-232537805,-972302797,-653598966,-1319174774,-686939636,217677824,-109031308,34829312,-109049268,-2143063036,1047792121,208854007,28379883,-653604830,2147468161,-2097151979,695795922,17464448,-92205451,141918208,1962934333,-1877546237,-1962973719,851562702,-1040840116,-385453055,-336003242,175931599,-150506239,-2082932782,-1993932838,1435051525,1448461058,637831974,637688971,637815947,-1123658613,-771031040,645862268,578144523,511040267,443924491,-339738178,-137169101,-137103407,-746326568,13730560,-1124019581,1086193665,1976699648,-2016311542,-293366837,2029185808,-1073525237,-921445613,-176565741,-1995805303,1435043957,72190214,-1996333687,-1017291259,1284200277,1073316616,-922011265,-108968323,327073793,505547955,1543635159,100368394,-75495052,721712136,723577837,-1193964563,-75497471,1977453317,-136775912,-137168941,-1257313323,425322504,729809085,-1948611630,9562563,-1962513269,1552614484,725388034,820609216,-1005971849,-955580236,-628360309,-315894389,2115027328,266436845,292870646,168870272,-772943420,-774123046,-488845089,571257330,-2147428594,812911865,1946220928,172753429,1946483072,167346211,-654893452,418057586,28413419,-1056256221,-1182793979,-116195328,-787228397,-394729197,175931543,-149785343,-137168939,-170330157,-2097097853,-712834862,-1817485568,-1783917909,149914539,1448461149,-1947302057,-108853170]},{"sector":5,"length":512,"data":[187465024,-2126152247,2126512633,571257107,33609486,-109049266,-2146667515,125044985,29285163,-1106121792,12255233,1946807168,-400509672,300619887,1183432747,38177024,-1996208503,1988691550,11593992,587217086,-775015439,-772877842,-2082539538,-24967226,-1274645241,-352155136,721586946,1342082011,453641852,-135578744,-2147418182,-355268639,591919755,168064464,-1250855717,404088864,212976179,14093858,1947007360,16351256,1308761716,83460106,-109048972,168195081,-349997606,-2147317689,1962936190,-10426049,209050378,141936517,-683945469,116123510,-683945469,-293347470,50953223,121800903,267115766,1116325635,2135311879,122847238,1945596416,1590819079,138870534,-1017291169,-1962654581,1552614996,172788232,1962949763,41714447,-1475775232,-167414401,259260868,-729759742,13796096,-623835789,-2092705583,847150787,16776065,-489613443,-607065648,-997532975,-695541110,-1834224758,82805675,142377411,159203329,1223166133,735193879,16759744,2088883435,2126512392,-401558267,-617933005,-1014246517,1465303275,-1960379386,1418405380,-772396286,735498722,1960706779,-98256,-343728012,-623838850,-729091446,11659402,-1070921954,-1416516693,-1416385646,1594338198,-661929122,-604513782,-348126789,197823448,-2096204600,-355434773,-770457597,-347354504,-1073628169,-1957182741,2089484612,88902403,-1962453878,62261340,873132066,145228917,67441012,14123776,-2147430013]},{"sector":6,"length":512,"data":[57868498,-2126259504,2114191043,-294590,608861447,-773664520,182112491,-1946973497,-772812321,-774188584,-774123047,-774319633,-774254118,172231387,-657330223,-640558383,-60826671,-1851026517,-2085907797,-1161623313,2088828928,2126512392,-351226605,142377228,360529921,-1241521990,372893704,-787852278,-1949750326,-339637287,134200265,-1940417045,-1899787048,-1950314789,-1070922156,-791551279,176000509,-754601557,-2124385046,1946681338,-2129611964,-1845231894,89426859,168814208,55348211,-1979622261,-788484060,-774647328,-774712879,-774647328,-774712879,-774647328,-1831677487,-1817472597,-1934912853,-1899787048,1606455003,106728131,185590659,1544225884,-1172567294,-880787455,-1968379120,-477952420,73141007,184704011,-1174047460,-1746157567,-2147134325,1284181990,22842115,78652554,-456079106,-774777903,-193342957,755020880,1487602686,-1679097680,-1510189226,-1381653083,20778123,84901184,259801086,-372121391,1605097681,-4668578,737274751,1458432960,-1945756073,-1899787048,-35942720,-1928825715,-1817376131,-472793045,-777269039,-2129627925,-1824522517,-1515870805,520617125,-1195155873,732676097,-1414812736,1391389611,106203990,2147476097,1410012171,72616706,-75292299,-2129103617,1073809535,1468731772,-1933050,186059647,1460339287,-129665788,-2084349346,1047855099,17334145,-1959297984,-494860713,386629631,184702731,645137495,990270603,511116887,1418402418,72825604,275911799]},{"sector":7,"length":512,"data":[990008459,175571543,344655474,41359163,-1252527221,344844289,-67107143,1610196467,28420843,11600619,-1913877675,1465317990,-1962379637,-1047918978,839533874,1183320644,138710010,1023958411,964509697,1073871745,-1019522947,1295124605,-142109942,1284113387,-78739446,-1995944821,-75367346,125747201,1077789483,-1957331456,39619332,-1962652533,719914580,-1957211391,75402207,1610550504,-2127138213,2084569595,-96040419,594919434,-4516629,172329727,-141835982,-402358645,359857897,1149895659,-79263734,33310407,-1951077568,-1964505986,16181750,-1946204536,39684869,-1962652277,1187382869,1853882622,427559167,-1963047288,-1964799292,-1963357473,-1964340531,-2147436842,2097741678,-10059545,-787450873,-774254102,-791096869,1325334110,737179135,-92372737,52262144,39588612,319048723,1735591508,-640558383,-657335343,-106800,1475083334,33257088,1545274411,72096514,1929794587,-76120040,-137169151,-137103407,-27330864,331813877,332338143,4243159,662238730,-803900338,-791544218,-774777903,-260451821,21032579,267123830,-411708917,33310407,-79247680,-803149056,-954991002,-820781293,91477779,1191172817,-58818052,578633729,33324673,-64717120,-1425768821,-1416516717,1183558546,1183493116,1583327995,-1034033781,146079750,33310407,-1257772224,-62470384,-924270591,-79247854,-1950340352,-1949791272,1438968784,1720577163,-61384962,-1962379637,1284114046,172831242]},{"sector":8,"length":512,"data":[-1946268024,1149962333,1073822984,-75421571,930955265,24953659,-1073660525,-1023208578,1073823048,1027621757,1350549505,1961365685,-1073629166,-1957217301,75402207,1610439912,2105620594,2126512392,1445194520,-1946157125,75402231,1593656552,2088837234,2143289608,75401997,-336270104,-402082461,28840503,75402048,-385986934,1357640903,-185800624,-404162681,5040372,14157443,-771006696,-783348872,-774843930,-774778413,367448530,-746389504,13730560,1929433731,1205522691,1073872769,-1309998468,2123102091,-1416385788,-1416451183,1183493014,-1426017026,-443851169,442973,780883797,-13958952,-141832309,-2146482442,1317734004,41323264,-2147268874,1308823412,242619148,1190592275,24412175,-1948570801,1727466566,331875076,14124018,185616011,-149457728,-939327386,-679218669,273058560,50489079,-2080762896,1183514835,107411212,-99356669,-1962880125,1727467078,334496516,13861882,185747083,-150309696,-268238746,-746325485,1456024320,1183576459,107411214,-636225533,-1962880637,-1073016762,1727469428,335020804,13730778,-149928309,-670890394,-696006125,306612992,611631115,50489079,-2082860040,-696057647,306612992,50620151,-2083908648,1183514838,107411218,-233584637,1587009163,1438866783,1720577163,140413944,-16353281,2013201527,725090050,1465274560,108956668,839534474,1183320645,141921277,-2130163829,2101346814,1073823038,-25079939,528400385,2126512445,1036397329]}]],[[{"sector":1,"length":512,"data":[259866625,2143289661,-401558201,28840087,-1257444416,-1258099960,277473284,-1975516744,2123103566,-216406012,-1962813975,75402231,1929079016,142574067,-763609087,-336390936,-1141666841,2123104255,-78649340,-856958350,738084489,-162100279,990279051,721647602,1183531478,368506868,-854458367,-1979953528,-1957627322,39684869,1435177443,-263837436,435314201,1981412438,1592976118,1183442679,-141323538,332923878,71666634,-939268361,-1845439869,107345814,-763116029,-262264064,468864539,1444672582,-262239754,-1980608887,1972106310,-1846085882,-768870665,331486201,-1982846006,1310324822,-60915462,93016064,-486384245,72715025,435045929,1444540510,-193586702,-144772382,-141323546,332923878,71666634,-939268361,-1845439869,107345814,-763116029,-295818496,468733467,1444672070,-295794188,-1980739959,1972105798,-1846085882,-768870665,331486201,-163149366,301485569,1443953238,1435211516,1569427970,688644868,1578757702,-229238288,-419957278,-419982446,-904669181,-150583925,-2084502554,1579876562,-263840786,-1980606949,1183444574,74812400,1972106755,14058246,-628685709,-472837653,-758001455,-141297929,-773074442,-1176579880,-242483201,-738733686,-554249993,5621,334913043,1981020238,-61467910,225700560,-640557359,-657335343,1191173840,50277374,331813878,332338143,13795575,1962825355,-2147435004,33194306,-385647552,2123103790,-1817445372,-1767140949,-1968467285,-1416037050]},{"sector":2,"length":512,"data":[-443851169,442973,1458342741,138709847,2126512445,1073823017,2088773757,745865226,-386840088,1049296951,1465254104,-41162666,-396994985,1291844080,-670661880,1583287296,-4471971,-385971201,-219416239,1424490933,-385971442,1170731222,-348126968,-1957210399,-1962878914,1435175005,71666438,-788378229,1124561915,-657331503,-92022319,1394439166,-1949660335,-101545000,-151527727,1995455310,-268220910,-779362607,-286538869,-774188551,1175972824,24375355,-1856284266,-768870665,-556666621,-1038886703,737990163,-1414819383,-1416451183,12102547,1583328000,1073873091,1090715970,-326412989,-1928694273,1465317990,1569392011,72190722,-955886197,64582,721976715,410847356,1200640747,2085567979,-60370438,-741220143,-770453039,-294053006,1996903483,1005023764,225903692,1547427954,1913026306,1912880089,-62455851,1545274411,72096514,184964123,197361663,1947039954,-523153596,-774777903,-176565741,1460173827,-1409909109,-1416516717,-1420252270,-1728166262,-718896981,130006016,-62485760,33455744,-654900619,-1976633309,135275925,1593890070,1575324510,-2016311357,-276589621,1976699664,-2016311382,284132299,-276573817,1976699664,-1073627238,-919875029,-1070867669,1418437099,-1933050,185863039,1410007636,-1254853628,216131585,-381353800,1435173009,-1933050,185928575,1426784853,-337349372,-326413028,1988843350,75401990,-1962392437,20777053,-2118419136,2101346811,1003523025,-1962770493]},{"sector":3,"length":512,"data":[33194451,-1975812416,1295649356,2135522314,2093169469,-1958969548,1161496132,-1255639802,-684842493,-1958841344,1161495620,-1961331452,1161495108,-2146405118,1265894141,87753867,12060021,1997859648,16351242,12061301,-2146899199,-160104199,-2013265736,1593890086,79846750,723290880,39619357,-1962779365,1562051676,-150374652,-2132573221,-907295628,1954603907,-1949504579,1998400284,-2133068023,-1368064793,-410995733,-341347076,1073789110,17333377,-2129428800,1073809532,12063101,175931393,-1207733247,646447104,-1950154539,-494860716,336297983,184701963,-562822060,-790101579,1157675019,12116203,142377280,327073793,17333377,-1206813376,2088764416,57999626,-2013134835,-1023355610,-1962606408,-494860716,336297983,184701963,-562822060,-352255816,1465275865,14167691,-1962916213,1317732958,106334980,1988886315,33456392,-2094959424,226488574,-1014237045,-896804469,-964439509,209667600,-640554287,-657335343,-236199983,12576721,331813632,332338143,4622807,-1996333431,1451820110,-1948284154,-151548977,1954546502,6195978,-788377973,-1949183517,1727463494,332923652,66524106,332010456,-1948677129,-1946801202,1727464006,332923652,66524106,332010456,4623351,50751223,332010456,332923895,-772336694,332338147,-1948677129,-1946801202,-520682426,-904669181,1183577875,40302342,-904669181,-670828781,-149698029,-150583669,-939326362,-15470061,-233584637,-1962879101,-520681914]},{"sector":4,"length":512,"data":[-99356669,-1996464503,1988690510,108955908,673478,542407,1566465792,-326412861,102651734,1727401136,797958,74843030,-1947380760,105840382,-1957200258,-1979656130,1160779333,-124983286,1569260937,72190210,1594250633,1426911107,14167691,773688110,771902859,772035979,772175243,973751690,880020038,453008939,1444610638,108403460,-688450445,-772287753,-2081039369,-763166511,14058240,1586037044,38701312,-1996204407,1183319670,-1913955062,285236737,1443955278,108400900,-8525475,14169739,-1382830596,-1382896239,-1985106537,-2029987786,1023355895,-149850879,-137168938,-170133551,-686567661,317454099,-773926407,-774254118,333386715,332862415,-660518921,-1416390912,-1416451183,-1416385642,-1426063176,1583292167,311901,8,0,0,-1430913024,-1431655766,10922,604176385,572662306,546,-458031104,13634816,13,141426689,775669579,0,1086717952,7051542,0,1158414337,45202,0,1171587072,214,0,524289,0,0,0,-120,2147483647,65536,-1431659866,178956970,0,1527047807,5965232,65536,26945263,106522,0,-1814245859,1183,65536,-146034417,8,0,209442819,0,65536,-387213848,-13697733,-1206622154,-397405078,922746423,1448476888,-2081030936,201381894,-48371517,-902365394,348960788]},{"sector":5,"length":512,"data":[-31856560,-345708349,-386069784,-907482199,-1775361,1757558211,265986593,457,2048,0,0,1459617792,1431655765,87381,-1107296000,858993458,819,2097152000,613566750,9,-1140850432,477218558,0,1543503872,6100735,0,-671088384,80571,0,167772160,1036,0,256,0,-35192832,-1124073217,-293874012,-5022620,-1258290945,1962690437,10555696,0,0,25165824,-1677721600,-1297062662,-18479331,-1677721345,-1297062662,-1702115,-184549121,1174686651,11306326,-436207616,-1121986194,-18220535,-1929379585,1539126651,-598652,2130706687,-620612139,13398912,1426063360,1720577163,1448564478,-1293396393,-28915722,-608239616,-25263339,-2027851005,-362092297,-11075961,-402597834,109312695,1024196824,141885440,-2080487681,-638907193,16678531,1843922293,-1956254976,776732254,171914,-2114036087,-1961480253,-386430981,-24647124,-666989738,1166890752,14197748,-222894000,-396994730,1374221433,1448499177,-873496,1442895926,-164108202,14157443,2287640,-2114027893,-2028598329,-370218761,922746503,1448476888,-2081258520,201381894,-443851169,1465303901,-2081834520,2145388668,-385971449,585886182,14171787,50873731,788220648,360265471,1343585208,1476151016,250107478,-670661644,1583287296,3523,0,0,50331648,0,4194304,-1459617792]},{"sector":6,"length":512,"data":[-1431655766,699050,2013265920,1431655765,87381,637534208,572662307,8738,469762048,763549739,728,-67108864,54539257,52,335544320,1077150546,3,503316480,775669612,0,1275068416,38783408,0,-1862270976,1762830,0,1358954496,73590,0,-989855744,2860,0,1426063360,780883798,2123170008,-666990092,-393746432,-396994985,780792657,2089484504,-520125688,76240766,-1962779509,1418396748,394086150,-640554287,-657335343,368409671,-746389504,13730560,-2097098109,201381934,-666989572,-1416385792,-1416451183,-1414807509,772599683,389887743,1343700920,-1577373976,1448083672,-218896298,14157443,1566465804,401652675,-1438963364,440,2304,0,0,1744830464,1431655765,349525,-1174405120,858993460,13107,-1493172224,613566659,585,1291845632,1908875869,28,603979776,1952246614,1,956301312,330427565,0,-50331648,17793238,0,-1258291200,1107066,0,1426063360,1979706507,-1957210616,39684869,-1962652277,-92207531,276280581,-741220143,-758001199,-16777026,367787598,-772287753,-654846985,13861877,-2097098365,29229266,201272064,-1827047982,-276589935,-1056996592,780398975,-1962147624,-402597826,770434902,-783348872,-774647328,2043810769,1381455605,-1957670063,8120564,-401057346,915138448,-997523240,-396996522]},{"sector":7,"length":512,"data":[-997985815,-25785076,14167683,-666989812,-405280768,1443657101,166221655,1996445680,-59310084,-2081307416,402708486,-443851169,-1957313699,-1957210388,-416225033,14169739,-1107285784,1038620761,-667513881,1955419648,-396995060,-11079275,1996488310,-242489090,14157443,-1956749544,1438866917,1465314443,-1073185661,780355198,-1962147624,-402597826,1174398532,1465341448,1458543592,719869783,-417077005,14163595,34097027,788035304,409286399,1343776696,-429336,1459673142,-247994282,-2096610049,402708486,-443851169,11649885,45156075,78709483,-326383730,14171787,1359637898,142443344,-2146730016,58000121,-370810904,2105737402,192823304,-941203224,2164293,-973035031,-1929377211,915010677,-24706856,-2014974232,141329406,-171841534,1183319844,-27358468,1946483584,-60947909,-2012748928,-338559906,-24702605,-2014984472,141329406,1465341442,-1980832792,-1962878914,-62458121,-402294269,65796775,-1963294232,-338625442,1022094288,33310454,-142143116,-2014997784,141329399,1465341442,-1980846104,-1962878914,-91625225,-1946911603,-62458170,-2029880829,1347852279,-232003497,-788767094,31686891,50232960,1580335988,173902079,14171785,-1899764341,-667513913,-193164032,14171785,-1947923480,20777028,1027112256,780058625,-561315663,-402162616,-544479745,11862449,1359638406,1509629160,1963063680,283660558,139329509,-396994985,-2007372240,914950764,-1950154536,175439870]},{"sector":8,"length":512,"data":[-1880819992,1291782724,-1897141496,-667513913,-193164032,14171785,-337313560,-1949856222,-1929324490,1049228412,-1712848680,-1911493660,-667513913,-193164032,14171785,-387658776,2105599375,427098122,1023952267,226410497,2101346621,-47978484,14169737,-352012861,-402541310,28836415,-1308718272,-456005632,1085859563,-1911624960,-667513913,-193164032,800595179,-1949856256,-1929324490,1049228412,-788594472,-396994730,915009361,-326434600,1342177464,1023952011,1316945932,2130690109,-452728742,-16235009,-2147428810,-218048730,14093952,-386430204,110094636,-1957691178,-447944452,-1928835841,1448545404,-314382249,1945686360,-2063284435,38061924,1153956318,-940363004,-1258027452,-24433685,-1528297291,1073854465,954728625,-1958679580,-474552066,80165355,1153892352,-956301310,1092,410823,1149845632,172279304,-1912698112,1323830389,1448564475,1458483432,-437758377,-25263892,-2147191551,-1996420492,-1962878922,-946945051,-1256685939,-1326871808,65140234,12631800,-2096304509,-873985297,-192983573,237751947,-293404456,12500738,1961480701,1202057986,-666990265,-946945280,-376766283,12048778,44010030,-667514112,738102016,-666990085,12630272,91541035,-202780164,410422693,-2081707800,-964490041,-192983798,-669086781,2005750528,-964471284,-1961563380,1392564254,1443657613,915081707,-1923743528,-1907159972,-201987897,14169737,-1021942136,14100096,-2147095556,-33499354,512477070]}]],[[{"sector":1,"length":512,"data":[-1923940136,-397013897,243332051,-2096955177,914951366,1720189144,-946945258,14169739,-1997243672,-1899817370,-667513913,-190126080,-1022474615,484580522,491724104,489102617,494869874,438180378,453188130,460659555,466230151,467278799,1347615995,1465275731,-1960947450,780744428,1992622302,1988734226,-1898476526,-1731425569,-587497325,-13755022,907915415,14171777,376897728,-567899338,123281152,1532845663,-1244702120,387073,-338892053,508645607,-727703786,-703690240,1071742976,171962752,585140933,-153079071,41158852,-1048305652,-2146693260,570479778,1965046977,1482235661,-1568725821,1495204052,45663064,908184885,13639305,-771322826,646657536,1495204062,1566465799,911890523,13643519,-1320005293,638235908,-947250037,-436803374,-685633614,-436813310,570486970,65721299,702914,-477896201,1522729743,1438866265,1465314443,155486758,-805273563,172329408,-1977219919,-523040700,181790930,-148434753,1955435495,-5707770,-703413501,-403187061,-137720941,315098087,49185750,67080680,13730755,-1957243374,-1847068710,-403180917,-134576237,333317090,-293380360,-9377790,-636239613,280951315,-1813579993,-419968373,-134576234,332268514,13796344,-385976693,-670826674,-2097098365,-763166505,4241408,225825291,1946161197,-2015918292,-338982919,1208711407,-774773807,-770451503,1988883833,-1994618372,2089353804,106203396,1594377353,1575324510,-1073628989,1364255979]},{"sector":2,"length":512,"data":[78734512,-1963788654,-771042092,-1830810908,-455996716,-427113462,-1017620053,1458342741,1150024791,-1961063672,1418396236,74746630,2080374845,3943736,863969148,-569640319,729225074,1799028353,595005298,1983904129,460785522,2012281731,738243606,2131756036,-1947760112,-1949398055,-338547726,-345510928,2098211950,-773140210,-774254114,-19083045,49446080,13861860,-2097098365,-763166506,280925696,-1846085849,-141297929,-10557194,-141438421,-151546890,-386467951,-745799856,-1846085743,1172895479,-137262081,-12654346,78711508,-1005919022,-25785430,-804633462,1583327944,11584349,-218101319,-1242895446,-37623800,-252995152,557916471,559227211,560341343,560800132,629089546,635905509,44369618,21170134,572269077,572727846,573317677,573841973,44369618,21170134,49088088,24643378,581378733,584131396,585179830,583082663,581378801,598221586,599073658,597369727,1491599797,91089405,-990501769,1123120416,-544422774,242532388,-678657988,2123040882,-1962707196,-1406790530,119857286,154940139,-953808523,-460718780,-385533207,14744924,1347615995,1465275731,-1960947450,780744428,1992556766,11685394,875343142,-1468856260,583010235,-1845746980,1942028160,1090486375,343151223,-75448277,638612742,309758381,1709956748,65776934,-1986483162,11997814,-13704239,52445351,1174604870,-337736696,205914952,-1945745917,54455262,1174604358,-338260984,172360500]},{"sector":3,"length":512,"data":[-1945745917,53144534,-561248186,1174610923,-337736698,205914908,367779468,-1944947063,-1898410288,29488832,401290100,-1945483773,-92236074,-1761512191,-796082034,-1040787314,-2145750015,57917693,-167732759,58007749,-1157482519,-652083194,1353187118,3717152,-388905694,-2137659183,712229117,14171787,-1995640957,-1157572546,-652083194,1486356270,-1898869728,835265,9297803,280613003,-1493225946,12001376,44010030,14196992,-1040787453,1959824132,735283970,46266102,213779316,638630144,1621557038,1381191712,-412948143,1364349776,-2081873687,1397755078,-284563119,1381191827,-414783151,1381191827,-354948783,587204285,549844713,-973716875,-166038256,1416956101,14171787,67105976,14328824,1344670648,1889992494,-666989792,-151550208,158664901,1344673208,2024210222,-637090016,-1207956480,777004555,544777983,570427576,-1192752187,-162519531,91558085,-2136539346,787973920,546350847,-1258066199,-78518271,637841859,-1560132469,-1960443692,14066436,1021903029,-666989573,217023232,-2082398232,201381934,-666989629,217023232,-2080657176,201381934,-666989629,217023232,-2082091800,201381934,8841411,-1207924504,103481536,212992216,-4590858,-922512897,732686547,-1414812736,-588725333,-667513857,1837835776,1439531510,-401609899,-964434582,180847372,-439228975,-277278348,-1070920725,-218102343,-773467733,-1007454747,637583551,-2096862069,-847162170,-305048235,192146897]},{"sector":4,"length":512,"data":[185265795,-336366099,-2081566449,1323830511,183403493,-244126255,14171785,-369310077,-694026445,-1581012224,-1070792488,-166940416,-1324931847,-1948200445,-2147429362,-401946651,-1950110831,-402597834,109306042,-1022623528,14169739,-2080651800,201381894,-667513917,-455809024,14157443,604095244,605365332,609952783,609952852,609166427,611066964,611787895,611787860,12002423,44010030,-667514112,-1275919616,-2132991464,-653654303,440828,-1029177554,-668040413,1049299968,-1510801192,-1090386199,82509836,49040,11861633,-24702860,-1321205320,-596514816,14169601,-947694101,-1948808436,-670159922,370045952,49185543,-50282817,-1510741551,-669646340,-164304128,796133317,-1528299083,-1960252423,-1962878914,-1425766651,-503134589,27912694,915144331,-1510801192,-1962828055,-667513858,-1985613056,-385820618,67371407,67372036,1028,0,134480896,67504134,134873090,168035332,619054084,620242155,301278456,620237362,1975544,4194351,6422609,8650867,400237816,358422739,619714131,620242168,271394040,257956234,89007352,620233275,1954555128,-960298742,-1023407548,317216598,-1017225251,15270325,622707705,623912276,626795839,532358511,786244096,612796298,-472803432,-22675666,-666989788,217023232,-1499988178,-666990300,15067392,14169739,364445323,-13742042,-1960532313,-1962878922,217023486,-1499988178,-666990300,12708096,14157443]},{"sector":5,"length":512,"data":[12183820,14171787,772568461,614897663,14169737,-1962891543,-1929324482,364383349,-13742042,-2145081689,-41934875,-1085639421,1049166016,28836056,-402607808,1972230915,49251082,1626113021,-218091335,-737753179,-952041472,1057019398,-637090045,-956301312,-1073686522,-536426752,-949132032,1962992134,-469317753,-352321280,50167825,113641333,-352321324,-402541307,837548059,-151590000,-243982395,755030177,212926656,119863798,-523107407,13897355,180872576,240028136,915409899,14300811,-667549386,1048655360,12583128,-1959391369,520150566,1583286105,1515739997,-286536497,560513589,-921707870,-1036697602,-626908824,1073727759,-4177408,-4175872,-4175360,1056964608,-102865787,-1257966797,16383,11632512,45156075,78709483,1441126811,1720577163,2128452606,1720359934,259170047,-109040011,-1694075646,-644097827,1948183528,-1693680882,781965533,1312473,-337323621,-639722740,114896539,-644153324,11004388,-1679697509,3070766,-908485888,-1241982565,-789831166,2128452589,1720359934,-780493057,-1004403792,-456071984,-66793264,-108998448,33846530,604026305,1946265607,-371287291,-577043477,-220619815,1946483072,2047060009,-908485885,-1681794661,-644101928,-925328439,-1681793381,-388957479,-986519344,-644152460,-102851616,-527814165,-461312816,1961177601,-522609917,477758376,-1681270373,-576985895,-157548930,1950416710,-639722741,114896539,65732654,-1946558821]},{"sector":6,"length":512,"data":[-1681695259,-1957304871,-26833428,-25240165,-10057061,74617246,1290476661,1216039540,-1680286309,170842926,-1690965248,781965790,11995,-644142357,-388391967,-1680746341,-1677820195,-1627429238,57926004,-1681270373,208925657,786116251,-560267254,49643753,1946338806,-522609917,-1017256565,-337061477,-321283320,-644152341,-908485651,-1678996651,1720575449,2128452598,1720359926,208838391,-990509708,-1692961790,82565341,159058804,-1680286309,403101998,-455501056,-644143893,2128321472,2122423286,1967128574,-58818286,192249856,-1679238757,-644093474,-1694241799,-443813415,-644103331,-352210454,-339137781,-371614969,15401393,-644152349,-438723639,-1913877675,-576980378,65272446,-1681270373,-1627691382,1964012179,-656565466,-577043485,-388391976,-486496279,-656565501,159058804,-1680286309,470210862,-455501056,-486502423,-908158205,-1679697509,538368046,2128452352,1190566906,192168443,-1678714469,-560207655,-1688147007,-644093735,2128190401,-36070406,268127872,-93398629,-2130912869,-1678509210,-1678086439,-1677961509,-644101671,-908485664,-1677862501,-560211491,-25263127,-1684963584,-644091687,-1042375704,1945923281,-617702647,-1694489554,-543438370,-644088762,-36070455,-153494117,108266183,-1679238757,-443813410,-1957313699,508973292,34031350,-973405836,1149960822,1010052351,-2096336120,75563758,1988731854,1998842626,549778982,-293392779,41322754,1184564422,-1071266678,-790048761]},{"sector":7,"length":512,"data":[887673064,-668596968,1579091081,1020222808,-2096531703,80151278,-957637744,59567339,61932448,65864630,67699711,3277838,3801142,27132203,26804628,33882622,-50658807,1426478672,1992617099,-1985141240,-600045450,-259323534,-13724008,1560504980,-816292345,243059966,-453637456,2061212566,183403278,-1013188739,-855706069,-610596484,-964489622,-1678513398,-352276285,28348419,-326414251,8313243,7768987,-67017088,-1694415352,-1694470439,-593760551,-1042375702,-1694468471,-1694470439,-576988706,1486553214,208046173,-639722557,-1693620598,-1693679907,-1995618678,-1681716154,-320087592,-338569061,-455500825,-644095253,2128452581,-1950115066,-24966538,-1005489663,-1064565154,158647051,673479,831071744,1443138507,59479,309485151,-1022639733,1317662324,140413190,-645151858,-443818005,13351005,-2097151767,1946159742,106873873,-1959687386,-1932817660,59587,-1070397070,-1996077431,-1949628346,-860332571,59648,-991130795,1586169982,652149510,-259324021,-628355957,-66292027,-628185869,1560774950,-1962931510,50782989,24445517,13809867,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131072,0,565248,65536,53248,458800,53248,1638408,53248,1835018,53248,2097154,53248,2293772]},{"sector":8,"length":512,"data":[53248,2490390,53248,2687002,53248,3342366,36864,3539456,36864,7667712,18087936,8519680,18350080,8781824,36864,8978688,18087936,9830400,18612224,10092544,565248,14483456,53248,14876714,53248,15466510,53248,17104944,53248,17563692,53248,17825838,20480,3736029,20480,5505230,20480,6029525,20480,6553757,20480,7078086,20480,8126982,20480,9437702,20480,21299677,20480,23396847,20480,24183294,20480,25690627,53248,18087974,53248,18808870,53248,19005480,53248,19202100,20480,19398930,36864,19922944,18874368,20316160,36864,20513024,18874368,20905984,36864,21103104,53248,22806572,53248,23068718,53248,23789610,53248,24576046,53248,25296940,53248,26083370,53248,262196,53248,589876,53248,1048628,524288,1245184,524288,3866624,53248,4915250,524288,5505024,524288,9109504,524288,1441792,524288,3145728,53248,3735576,53248,4128794,53248,5373976,53248,5832730,53248,6160412,53248,7077916,53248,7340058,53248,7602200,53248,11534364,53248,11796506,53248,12058648]}]],[[{"sector":1,"length":512,"data":[53248,16384028,53248,18481178,53248,18743320,53248,20054040,53248,20316186,53248,21364760,53248,21626906,53248,22085666,53248,22347812,53248,22872098,53248,29687830,53248,30212116,53248,30605338,53248,31129624,53248,31522844,53248,37355546,53248,37748760,53248,38141976,53248,38404122,53248,40108060,53248,41353246,53248,41615386,53248,42008604,53248,42467356,53248,43515932,53248,43843612,53248,44367904,53248,44892190,53248,45482016,53248,46858270,53248,47120410,53248,47644696,53248,48037912,53248,48300058,36175872,65536,36438016,458752,36700160,1245184,36962304,1900544,37224448,2293760,37486592,2555904,37748736,2949120,37748736,3473408,524288,4063232,524288,4456448,524288,4849664,36175872,262144,36438016,917504,36700160,1572864,36962304,2228224,36438016,9043968,36438016,13565952,524288,15204352,36175872,15990784,37224448,17760256,37224448,19857408,37224448,20578304,36175872,21233664,524288,26542080,36700160,27787264,36175872,29753344,36962304,30146560,36175872,31653888,37486592,32374784,36700160,33161216]},{"sector":2,"length":512,"data":[36175872,33554432,36962304,37879808,37748736,38797312,4739072,21692766,4739072,30343693,4739072,40501924,4739072,51970997,37486592,39321600,36438016,40304640,36700160,42074112,36962304,43646976,524288,44171264,37224448,49610752,36962304,50266112,37224448,51314688,37224448,53215232,36700160,56754176,36175872,57409536,36962304,58195968,36175872,59572224,36438016,61210624,4739072,67372005,36700160,68485120,36700160,69206016,36175872,72220672,36700160,73007104,36175872,74121216,5263360,11010251,5263360,11468991,2134016,851970,53248,1245232,53248,9175099,2134016,9437184,2134016,12320768,2138112,13500416,53248,13893691,2134016,14417926,2134016,14811142,2134016,15073286,2134016,15466504,36864,15925764,2134016,16973824,5267456,17498112,40894464,19922944,2134016,20250640,2134016,20840462,5263360,22413624,5263360,26214712,2134016,27459586,2134016,27721730,2134016,27983880,2134016,28639240,2134016,29032454,2134016,29818882,2134016,30081026,5263360,31916034,524288,39976960,2134016,40304646,5263360,40697856,2134016,41025538,2134016,41353222,2134016,41549826,2134016,41811972,2134016,42205186]},{"sector":3,"length":512,"data":[2134016,42532866,2134016,42795012,2134016,43188230,5263360,43581440,2134016,44105734,2134016,44498950,5263360,44892160,2134016,45809670,5787648,3801165,5787648,5963909,53248,4128822,53248,5242934,53248,5505080,53248,8257590,53248,8519736,53248,9240630,53248,9502776,6311936,1441874,6836224,42992317,38273024,31391744,37486592,38076416,36175872,39583744,36700160,45481984,36962304,45678592,7360512,11010200,7360512,19071108,7360512,20512772,7360512,40173720,38273024,44826624,7360512,50200580,7360512,51839098,7360512,52953210,7360512,54984704,7360512,55574560,38010880,1179648,38273024,6488064,38535168,2752512,38797312,8060928,39059456,2162688,39321600,7471104,53248,9961524,53248,14876724,53248,17825844,9457664,2359573,9457664,21430769,9457664,22807110,9457664,24248865,9457664,25952870,53248,131124,53248,1966132,53248,4325428,53248,6160436,3710976,7798784,53248,9175092,53248,16646196,53248,17694772,39583744,589824,39845888,917504,40108032,3080192,40370176,3801088,40370176,4194304,39583744,655360,39845888,1376256,40108032,4325376]},{"sector":4,"length":512,"data":[40370176,5701632,40370176,6750208,11554816,720935,11554816,1376300,14155776,2031616,39583744,786432,39845888,1310720,39845888,2228224,38273024,4456448,53248,4980788,38010880,6946816,40108032,7471104,40370176,8650752,40370176,9502720,39583744,786432,39845888,1310720,39845888,2228224,38797312,4456448,53248,4980788,38535168,8650752,40108032,9175040,40370176,10354688,40370176,11206656,39583744,786432,39845888,1310720,39845888,2228224,39321600,4456448,53248,4980788,39059456,8192000,40108032,8716288,40370176,9895936,40370176,10747904,39583744,1507328,39845888,1835008,53248,3080250,53248,5570612,53248,7995444,53248,11141172,53248,13172788,53248,14549044,53248,18022452,53248,23593012,53248,23920692,53248,27983924,1572864,1179648,1572864,2949120,53248,8519732,53248,1179700,53248,4718644,53248,1835056,53248,5767216,53248,8060980,53248,14876724,41156608,65536,42209280,262144,42471424,458752,53248,983090,41684992,1310720,41947136,1507328,41418752,1703936,18370560,1114140,41156608,65536,42209280,524288,42471424,720896]},{"sector":5,"length":512,"data":[41418752,917504,40632320,1310720,786432,1703936,18894848,2031634,18894848,3145763,18894848,4259892,18894848,5374021,18894848,6488150,18894848,7602279,18894848,8716408,18894848,282136613,18894848,355800168,18894848,355996778,18894848,357766346,18894848,357962956,18894848,375854555,18894848,379715586,18894848,380180015,18894848,384374283,18894848,388371833,18894848,388568443,18894848,406722365,18894848,406918975,18894848,424220761,18894848,429660249,18894848,435820645,18894848,436017255,18894848,466288704,18894848,467337263,18894848,485425154,18894848,495721642,18894848,495852770,18894848,495983944,18894848,496115023,18894848,496246041,18894848,496377127,18894848,496508274,18894848,496639359,18894848,496769562,18894848,496900638,18894848,497031714,18894848,497163011,18894848,497294179,18894848,497425269,18894848,497556359,18894848,497687498,18894848,497818575,18894848,497949658,18894848,500768176,18894848,541073719,18894848,541204801,18894848,541335883,18894848,541466965,18894848,541598047,18894848,541729126,18894848,541860228,18894848,541991277,18894848,542123274,18894848,542254463,18894848,542385637,18894848,542516711,18894848,543171093,18894848,543302172,18894848,543433254]},{"sector":6,"length":512,"data":[18894848,543564323,18894848,543695405,18894848,543826476,18894848,543957557,18894848,544088628,18894848,545268397,18894848,545399463,18894848,542639826,18894848,542769829,18894848,542902230,18894848,543031619,18894848,544212690,18894848,544342693,18894848,544475094,18894848,544604483,18894848,544736856,18894848,544867053,18894848,544999218,18894848,545128824,18894848,557129792,18894848,565387344,18894848,567746648,18894848,569122912,18894848,569573378,18894848,571678816,18894848,576921712,18894848,578232440,18894848,579215480,18894848,580591744,18894848,581050512,18894848,545530692,18894848,545661649,18894848,545792694,18894848,545923809,18894848,546054823,18894848,546185921,18894848,546317041,18894848,546448039,18894848,546579218,18894848,546710440,18894848,546841466,18894848,546972597,18894848,547103615,18894848,547234715,18894848,568796688,18894848,571352592,18894848,576529931,18894848,577840661,18894848,578823691,18894848,579872277,18894848,602341378,18894848,603923394,18894848,599925761,18894848,600056916,18894848,600187925,18894848,600318991,18894848,600450139,18894848,600581204,18894848,600712283,18894848,600843355,18894848,600974415,18894848,601105492,18894848,601236588,18894848,601367671]},{"sector":7,"length":512,"data":[18894848,601498743,18894848,601629780,18894848,601760887,18894848,601891959,18894848,615387637,18894848,615518770,18894848,615907358,18894848,616038447,18894848,616169536,18894848,616300625,18894848,616431714,18894848,616562803,18894848,616693892,18894848,616962011,18894848,617093331,18894848,617223517,18894848,617354835,18894848,618008621,18894848,618142090,18894848,618270560,18894848,618530126,18894848,618660411,18894848,621945990,18894848,622535934,18894848,623322278,18894848,624764070,18894848,614868198,18894848,614999275,18894848,615130360,18894848,615261432,18894848,615654648,18894848,615785720,18894848,616834296,18894848,617489648,18894848,617620728,18894848,617751800,18894848,617882872,18894848,618407160,18894848,618800376,18894848,618931448,18894848,620635421,18894848,620766548,18894848,620897584,18894848,621028671,18894848,621159772,18894848,621290863,18894848,624371221,18894848,628565525,18894848,625681574,18894848,627451046,18894848,628958374,19419136,54920076,19419136,55051168,19419136,55182257,19419136,55313334,19419136,55444461,19419136,55575551,19419136,55706633,19419136,55837710,19419136,6946836,19419136,7864340,19419136,8847360,19419136,18874414,19419136,21954570]},{"sector":8,"length":512,"data":[19419136,22675456,19419136,25165834,19419136,30343192,19419136,38731804,19419136,40042528,19419136,46727204,19419136,55967794,19419136,56098870,19419136,56229946,19419136,56361259,19419136,56492446,19419136,56623508,19419136,56754585,19419136,56885758,19419136,57016837,19419136,57147913,19419136,59048810,42729472,2031616,524288,4063232,42991616,5439488,524288,6750208,524288,10092544,911560788,0,4194498,54723359,57344859,60162947,63898575,919348,864,4194314,0,0,0,0,0,0,126,0,23724032,37879808,0,0,15138816,388,314,0,28508160,0,0,268,194,0,213,47644672,35454976,33947648,0,0,652,44957696,50003968,460,31719424,0,613,248,0,0,0,1448019801,1095520837,1644167257,-721365633,1493172224,1398362886,5064020,15294720,0,1325748224,1263489622,14614758,0,139460608,1163023951,1380930130,14614758,-1,189792256,1314018895,1330009167,-431731115,-33497344,16777215,1326141440,1330532950,1330464077,15096146,-196385,65535,1448020560,1162824018,1380930130,14614758,-4]}]],[[{"sector":1,"length":512,"data":[240123904,1314018895,1397572943,1447645764,15094341,-327457,65535,1448021584,1162825298,1162695501,1498566477,14614758,-6,156368896,1381127759,1280660293,340,12976128,223,1448021074,1095914578,1431257936,33641550,-704643072,57088,1326207488,1330401878,1329808449,22302293,4,14614742,189923328,1179801167,1296387145,21316687,6,14614710,189857792,1381127759,1178878277,-146583979,100715777,-973077491,16834304,-553593344,512,1448020562,1095062098,1179992644,0,-855509248,1392508928,1381388039,1414090313,1033,0,100663296,1037,16777216,-553613824,512,1448020563,1229867346,1397572948,2057,0,100663296,1037,0,1392594944,1381388041,1112819027,201934421,0,0,67962368,0,-436207360,33611520,156434842,1196578383,1430410309,1050950,0,0,265478,14614758,0,1448020819,1413829458,1381254482,1313113,0,0,265478,0,15073281,587333855,1326142209,1162302038,1413829204,403265874,0,0,67962368,-553589248,0,1326142208,1279480406,1112686917,470369877,0,0,67962368,0,-16777216,150994943,268436736,134219776,134319104,134341632,134344448,134348800,132864,0,134221568,16776960,1074088192]},{"sector":2,"length":512,"data":[16776962,402775040,16776961,2048,0,1536,0,1024,0,0,0,1536,0,1498613248,1296389203,1325858816,1280460118,284993,1968577792,1448020754,1095520837,1095773785,1363,0,1163284235,1497451602,1245859630,5,184549376,1380275791,777211205,4866639,-1192916651,10092753,-1996488704,1354980844,1028150337,-2115204267,-67075348,16003,-1608551424,1183318016,10676478,-1444406925,-401313024,259195103,-369099080,1051984007,-4709939,-1954616321,20768984,-1070337934,2122437171,1968852472,-62485720,-150863686,-95515678,-511583753,-1054146049,1375787651,-1949660336,1107343568,199762381,1918523393,-125926979,-1233825708,1341816449,-1984989866,-1560281058,378077184,113704962,39452672,134796,184549537,1962934790,444170,-1945970944,503317006,235067578,624932895,857678285,41920,-899816053,-1927413756,385842878,9824263,817152799,54272461,-1910623630,-1912602594,855649310,-1073042186,179108725,-1376356928,-8470899,-544536810,-1073042772,1547438196,-544475531,-74714389,520116968,512630467,512622592,-164429780,234881215,375047,225748723,-1073042354,70974325,-115348875,3965123,-1097992076,118947710,-527777742,1958742700,1950039047,-219436540,989626446,-58718092,-1341950884,1444850268,1577060072,533623327,108447171,852003500,849671149,-1769100608,521600894]},{"sector":3,"length":512,"data":[-1258404214,-1021194947,-128545506,112795414,-851463168,41033505,868467003,408512,994472960,1962934278,172352,132651,1547,-594857099,71812150,-1897348468,408320,52589056,1912602630,429601,104539648,376897538,-1560280925,44236802,-1547685120,80347136,-18432,-38210069,-1578046465,103481344,1609039872,-594818304,71812150,1189659276,41728,-1593834294,1206386688,-1957311744,4097004,712245248,-1560280927,10551296,-1911297280,37546176,-1557741517,-1557790704,-1591345134,-1073020908,10742133,41728,-4666531,-1309217793,-739716348,14844362,-1010693136,-1059912527,-265957237,266503167,920423363,503596942,7819,16011,638633859,267915,101616422,1442560,34476800,1107343360,-1910103603,855642142,244000466,1068761096,1047667149,930267451,-1325396219,652792580,1050115,-768354162,168725286,-1273175296,1914817855,1925266205,870961430,109979382,-1375993840,19323019,871948863,-1207702592,-903937948,1439367170,1397812363,1465274961,12060190,-69693952,637689540,1854093311,91554306,-352308504,113607448,-2030025077,1183447622,2222080,-2030025077,1183447622,-1591321856,20774930,-4187392,117440542,1516134175,1566071641,458703,1048782336,1946157072,113714697,65554,117402091,-402259968,-1960443402,-2097149418,78712770,-805049645,-352204056,2112377396,429568,346105344,41728,306086694,259325952]},{"sector":4,"length":512,"data":[637594088,1050311,-1075314688,638446337,1183487,-402585368,-1070399155,2010131290,10553288,279127552,-16382464,117440542,863354891,-402575128,-402259844,109969779,-1960443904,-486534130,408348,1360425728,1048782416,1962934290,9496579,1493265896,-339672313,-373094435,10551296,1958742784,650153534,1054347,5691,-919390349,-1064415167,1351974,-193609717,-1593835357,10682368,-1588525312,-1557790720,109838356,669515776,403713,7596032,-1578704295,10682368,-2144943360,-369090498,-1960432268,-486538738,278996489,-389903360,-1960443719,637538334,790155,-67100481,39160614,-1951733072,-1014256702,-1007557973,540966950,712297728,-1960394612,855642134,8906953,34507046,244000256,549388300,-1960379392,-843579051,-1031034049,-1430244693,-1580994334,-1960443904,637538326,637538467,528011,870961473,-1036256010,-242547086,-35204786,102694539,-1064379762,520594931,540966950,309644544,637549800,790155,-67099713,63407019,-389809438,100728930,-1155661824,126550016,125091851,347854990,-1930171648,346236423,-389865728,-620036087,-2026503052,868418127,65754587,184577675,990934253,-193657770,184829577,-1947372069,1575611357,41411,208977931,-1591295858,103481360,124977152,721420449,-1023410170,565542,-1325396219,-1008151804,1481461061,811096152,104579123,57999360,-397415608,91488356,-335545416,7399493,-88603277,-398726145]},{"sector":5,"length":512,"data":[225640613,5771,1741505972,-335545160,2001705,-851528704,444193,-1946060544,-1006632434,-1560281082,109838338,113704964,6684672,134796,10731571,378260224,1169424384,113534925,10682370,33983488,1740163840,-1188967115,12451848,704256,-65073634,-1021335821,1741504948,7817,859832248,2001874,1966848,281248512,52872078,-2097149946,-1960443694,184552990,-1142524453,-201900032,1135925387,-456103987,378078322,1438842880,378268811,1202978816,10577869,63517440,83886086,-1064435696,-1591328432,-1073020914,-617353867,1359478579,637534369,637538467,1449609,406751526,106386176,2031366,1532954368,268879654,-150994944,-402099496,57802771,-1664097703,5771,1741506740,1575324573,378218179,-164429816,259391243,1477458,1140897792,-799381555,-1188465948,-819249152,41077307,-785659253,109970974,512622592,-201588736,-2128672860,1967128831,-13417725,-998911477,920423363,-1962653810,-1275068394,644336967,1449611,135695142,915088896,-13434856,725614777,1925856206,734694146,378229457,12058624,1516752196,393602058,512624158,-1910112256,-67104762,520594675,200684355,-1966246446,1357132484,5771,1741506740,182872,0,0,0,0,0,0,0,536576,458752,36873,9240576,544777,9372250,53248,10485764,544777,10617559,544777,11141848]},{"sector":6,"length":512,"data":[53248,983040,53257,1376262,53248,8519696,577545,8716290,577545,8978436,36873,9633794,53248,9830404,53248,10092550,53248,10878982,53257,11993088,53248,14024752,53248,17367088,544777,17956864,53248,26214416,53248,26607630,53248,26935318,53248,27197466,53248,27459608,53248,28573698,53248,28966920,53248,29360176,53248,30015500,53248,30212118,53248,30408730,53257,30736384,53248,31784972,53248,32047112,577545,33226752,577545,33619968,53248,34340880,53248,34734088,53248,34930698,53248,35127310,53248,36962318,53257,37158912,53248,40042512,53248,40304688,577545,41418754,577545,41680900,565257,48496640,53248,52297732,53257,53215234,53257,54591492,53248,56623118,53248,57081870,53248,60030986,36873,60686336,53248,61931534,577545,62652416,2097161,64552960,53248,64749582,53248,65732618,53248,66977806,53248,67174412,53248,67371018,53248,67698702,53248,68222990,53248,68681738,53248,69271560,53248,69468170,53248,76611594,53248,81592330,53248,81854478,53248,86179854]},{"sector":7,"length":512,"data":[53248,87097354,53248,87425036,53248,87687178,36873,4390912,1069065,4522361,53248,5767206,1069065,5898342,53248,786448,53248,3014674,53248,3866640,36873,4784130,53248,5046310,1085449,5242882,1085449,5505028,53248,6160424,53257,6488064,53248,6815762,1085449,7340034,53248,7536678,53248,7798824,1069065,8585216,1085449,9830400,53248,10420224,53248,10682416,53248,13369362,53248,13893650,53248,14352384,53248,14745648,53248,16318472,36873,17760256,53248,19529746,53248,21168146,1085449,23068672,53248,23330824,53248,25231378,53248,27787282,1085449,28835840,53248,30539794,911560788,0,4194498,107742740,108791420,110823052,112789177,1555,672,4194324,0,0,0,0,0,0,126,0,97584248,0,0,0,1206,90833978,806,64881466,0,40763392,27657501,36503552,48627712,0,1524,62391625,68222976,12714830,22348494,95289942,25494161,0,45678592,15925248,0,81134453,51445760,674,41944310,60293379,0,1380123481,-905969580,-788475490]},{"sector":8,"length":512,"data":[1493172224,1398362886,5064020,15294720,0,1107578880,-433048489,56064,0,1124356096,-433048497,16833280,0,1107578880,-433047465,33610496,0,1124356096,-433047473,50387712,0,1292128256,-431010225,117496576,0,1174884352,945049167,15087704,16777435,0,876806992,-620698064,256,1342177280,808993539,14352614,3,89128960,1128352834,-620698037,0,1342260736,1431060996,-620698043,256,1342177280,1163020037,15093317,131291,0,1497564240,15093313,196827,23330816,1163002704,-620698044,1024,1342247680,1195461895,1096044101,14352614,5,89128960,1464816194,-620698034,1536,1342177280,1195985929,1380406344,15096129,458971,0,1094977616,1380404050,15096129,524507,0,1229719888,1112819783,-431663796,151051008,-788529152,1275744256,1414022985,1162170951,-620698034,2560,1342177280,1195985929,1497584712,15093313,721115,0,1229719632,1381255239,15090757,786651,0,1229720656,1297369159,1313163073,15090004,852187,0,1163462224,1464814668,14352614,14,89128960,1414088791,-620698043,3840,1342177280,1229734405,15092558,8388827,14876672,1212353106,1112228677,1262568786,0,-620691968,1375731712,1162363656,1329941315,65606,16646144,26607835]}]],[[{"sector":1,"length":512,"data":[1229196114,1413694802,1162103126,131151,16646144,219,1212352850,1397441349,5721934,3,14352638,139591680,1414742348,1162104653,1024,-620702208,1375810304,1480938504,1414807892,393298,11927552,219,1230440274,1229800526,524366,14024704,50069723,1230440274,1095582798,655448,14024704,219,1396771155,1313294675,156521027,4,0,218497024,4,65536,14352494,1392583430,1497713418,1397051984,155469139,8,0,218497024,16646148,219,122880000,1145128274,156845387,12,0,218497024,18219012,219,139657689,1415071060,1162104653,4105,0,100663296,1037,16777216,-620706304,512,1230440019,1464812622,5129,0,100663296,1037,67108864,-620710400,11928064,-1241382693,33610496,14352566,1392604418,1414481670,156850255,24,0,218497024,4,131072,14352566,-620710398,32375296,1213662803,1480938053,7177,0,100663296,-1241512947,56064,1392508928,1162368774,156845394,32,0,218497024,11927556,219,106103240,1397902403,604590659,0,0,67962368,0,0,1124487936,1329943116,2623820,0,0,265478,0,37879808,1313408851,1313426515,2885957,0,0,265478]},{"sector":2,"length":512,"data":[0,28639232,1162086227,1313426508,3148101,0,0,265478,0,77004800,1163135315,1329812568,156389196,52,0,218497024,4,65536,14352566,1392640514,1480938510,1128350292,1330792267,155471445,56,0,218497024,4,65536,14352566,1392508930,1464814600,1162103126,3934543,0,0,265478,0,72941568,1229457747,1230391367,156190020,64,0,218497024,4,0,156434432,1297239886,1162103126,4458831,0,0,265478,0,93061120,1162085715,156844364,72,0,218497024,4,65536,14352598,1392508930,1431261957,1275675726,0,0,67962368,0,-704642816,33610496,122880535,1330859854,155471445,80,0,218497024,4,0,0,50200584,46792712,47972360,20774920,22151176,31784968,34668552,35454984,26345480,28049416,29360136,29687816,36241416,37945352,39518216,39911432,40304648,40763400,43384840,46333960,8,3145728,-65464,98762752,-64936,786432,0,524288,0,1124270080,21586,1398362886,72172884,-1981087744,1124536569,1345213522,348993,0,1380124416,1112485460,74,0,-387610283,12517376,240590336,-1090518808]},{"sector":3,"length":512,"data":[1461583872,154,48896,-401713378,12517376,-1705566720,0,-883037047,-739766348,1946631173,1979923466,243718,-402630936,146014369,-1142358222,616860165,303743,855638178,41664,-1577056862,-1572863994,1085800448,-1077899776,-1977221012,87696901,-1977156748,-18171,-1207812120,-141492169,-137219120,41969,-1172369890,465043711,522308901,4242115,-2144943474,-33519834,108267324,41026620,-1269824592,89450496,1961101912,286439469,1206386867,288405509,11665591,-2147140120,376777466,-2029092826,12058880,100710657,-1274730008,-400510190,-1262287582,85780495,288405584,11665591,1476727272,-771096399,414320757,41354044,-225836623,-889269110,-25165644,-1274907112,41729,136841,3720,1734,-1547685119,378077184,1354956800,47134,1048631438,1946157056,101107205,1478426880,104759503,24444928,101107395,28573696,108271309,382533812,1588655339,-1341974296,51636291,-855438872,920423203,-402372725,1860763427,303359,-905969502,-594870270,173509174,142051894,105876022,74418742,662163770,595064122,528009982,460902142,238733822,326565890,775605758,192348163,5769,3721,-905757208,12058632,4098566,953088,1477376,70576128,5771,-888987160,-1207757080,1049232896,-896860160,5770,-888923672,-351862344,100775939,49932368,4098648,952832,-1947301376,973078550,839022062]},{"sector":4,"length":512,"data":[66382016,920423371,906385290,-33261686,1442506,974615040,1996488726,47119889,1912602934,20331017,-402426112,80347838,45213696,103465610,-1057095680,44427467,103466634,-1057095679,920423371,-1476114550,604271856,-2139091953,1879048230,1544,-1962933558,1200240348,-1324932092,-2132749820,-1895825370,1544,-2147482934,-150994906,950475,-1597306880,10616836,-594818304,72846134,326423051,-946929869,-1962571226,-1962934242,452811,-889686710,975568898,-503155451,-594820103,73370422,-1170940488,-751108078,-201909645,1642387595,141886376,1642464012,1139193520,1122419594,1122420618,-469761334,-419683231,1048628065,1962934277,-855526392,1946202134,-889081854,-973077088,1286,309706762,382592050,175489034,337544,41280522,417858480,-594818050,2143630878,38127364,1170724784,-1929347068,-1996455803,1569459269,273008398,1301021481,809879058,80355072,517769984,75482422,-1157406280,-880081857,-1325236863,-955616041,-676199867,-1962668360,340101592,-1995027060,1301026909,474843418,857623948,80355264,-326413056,637959876,1241798027,1972053578,2110006792,-958713076,1286,-10688498,1006633401,1010070536,1009808403,1229222916,661920572,594805052,930350652,1182014012,1333005628,-814604228,-881534405,1124173862,989894888,-1950320930,196930547,-1330088741,8906760,-2098716496,-402083840,-498401155,1000664042,648049886,540803466,1793628530]},{"sector":5,"length":512,"data":[-270384384,1048613355,1946157056,25699978,-401937597,-953810866,1124732161,108971075,-1993949133,-1993996219,-899872163,-594870268,75482166,139299622,139274534,-1004135965,1048579197,1962934272,92939787,1191189736,65796066,-402613016,-1070334757,855639242,314048,48762288,1393209344,1342591569,1476424424,712247100,762579004,863243580,896797244,512362932,-13500416,1375732153,1510041064,372949758,544604160,5770,246683627,-352235032,1456659,-32672768,-1979061302,-352321514,583683,117452264,-1017423526,909821694,410386433,1381093118,-1979317832,-1962934210,-1962934258,-402653162,1499070742,839103683,17623551,-13499724,503383529,-1912586056,1343654872,-628416768,-1977157749,1946631173,1946696737,1946827820,1947024437,-1023523015,5690,1877490806,-6232064,5770,1676160235,-1202564864,-1008202233,-346465792,5564444,5690,-889318540,1206390763,-8853504,1072170987,1477120,-141867264,-1495082357,503329256,-1912586056,1343654360,-154760704,838879782,-1950219274,1662421960,-301027328,-980811541,15461954,-300961718,-1047920405,-1021317566,1668609851,509039185,735021830,1477326,3574272,4241408,-947201906,4859638,-1023148238,-125050671,378264203,-1031602077,-1207912442,4800128,-1274907385,-1910569296,-620036928,-1968433548,27847896,-319095947,-76283480,-72629365,116124898,-1414731894,520617186,-1017554337,106256214,1560744141]},{"sector":6,"length":512,"data":[12803679,0,0,0,5505024,262144,36870,458752,262144,851968,36870,1048576,18362374,1376256,36870,1704192,262144,2097152,36870,2294016,18624518,2621440,561152,2228228,36864,2424838,36864,2752513,561152,2949125,561152,3145734,36864,3407872,561152,5898240,36864,15073284,561152,15335426,36864,15597571,36864,15859714,36864,16252936,36864,16515082,565248,16908288,36864,17301504,561152,17760262,561152,18284550,561152,18808838,561152,21626884,36864,21823494,561152,24641538,561152,25165827,36864,25559048,36864,25821194,36864,26673158,36864,26935304,36864,27197450,36864,27656200,36864,28573702,36864,28966922,36864,30343174,36864,30605320,36864,30998538,36864,32702472,36864,33095690,36864,33619977,36864,34013195,36864,35127304,36864,35913737,36864,37289990,36864,37617670,36864,38862854,36864,39190534,36864,39649286,544768,6291711,544768,52167465,544768,53543777,544768,53740607,544768,54854670,36864,40042502,561152,40370180,36864,40566790,561152,42008576]},{"sector":7,"length":512,"data":[561152,46923781,561152,48037893,561152,48300037,561152,49414149,561152,58261509,36864,65536001,36864,69468162,36864,73924614,36864,74973194,36864,75366408,36864,76218376,36864,76873736,36864,78118923,36864,78970886,36864,79233032,36864,79495178,36864,83492874,36864,84279304,36864,85852168,36864,87228424,36864,92209155,36864,92471302,911560788,0,4194498,232590677,242552437,248254141,269160459,1593,144,4194310,2,0,0,0,0,0,126,134613072,3377,190187994,148244155,0,213453157,2684,0,41943040,151650986,198770688,184745984,2727,218957082,167772636,193004117,3103,47513794,28772945,133237545,216793088,195887104,0,205914879,19857728,17302579,3178,162728051,2089,24904197,0,3220,1329857369,-251658157,-788475634,1493172224,1398362886,5064020,15294720,0,1174818816,1381122371,-620698023,256,1342177280,1095779847,1498696018,14352614,4,173015040,1481982278,1095322697,15096146,1048795,14876672,1514538320,-431009211,1073797888,0,1174753280,1313294675,14352614,128,156237824,1163284294,1330398802,-620698025]},{"sector":8,"length":512,"data":[524288,1342177280,1129137672,1163087692,-620698044,14135296,1342177280,1229800967,1414877262,14352614,55217,139460608,1431260486,1414877268,14352614,55218,122683392,1313426758,-430680753,-1291789568,215,1376276480,1329873221,-430355378,16833280,0,1208373248,1162101833,-620698034,512,1342240000,1398362887,1162627398,14352614,4,139460608,1431064406,1145652557,14352614,8,156237824,1163020612,1380930627,-620698023,4096,1342177280,1129464071,1163282760,14352614,32,122683678,1180257857,-431666103,1057020672,0,1124487424,1414745423,-922597038,16911360,0,32512,-620698112,-2147481344,-620685824,-922601216,1359008000,1413566471,1381258056,13173364,66060,0,79,14352614,5242889,14352662,13173348,105972267,1397901636,43930196,34341065,1,4390912,15073280,590043,18219076,42860763,201,1095632721,1414743373,-922564270,16911360,0,2048,-620698112,150997248,-620685824,-922568448,1358954496,1415070982,-212708269,201378050,258,67108864,-436207616,151051008,369100032,-486483199,51458,1376342272,1397311301,1397900628,13173520,1310722,52560664,65536006,69469190,970,1480655442,822083592,-620702205,1375731712,140001794,54525954,14352598,38928384,67655747,-704426240,56064]}]],[[{"sector":1,"length":512,"data":[1141002752,395352,14025566,53543131,1346503250,1828718600,-620702205,1375948544,139023106,58458122,14352598,38929186,201869636,-704410880,1073797888,1141002755,919635,14025626,57475291,1397031506,-1459613688,-620702205,1375952384,1095517701,302535495,-704398592,2080430848,1090671107,2124,11928522,62587099,1212219986,-654311160,-620710397,1375971584,139215362,65536002,14352566,38929369,50874434,-1241254144,-1962878208,1124225539,264268,11928582,66519259,1212351058,352322824,-620710396,1375967744,139215874,69468166,14352566,38929429,117983300,-1241513984,56064,1174884608,1380273225,71451461,131273,71958656,394324,82642060,1144,106037248,1145979208,542028,-704354560,56064,1292128768,138757199,74973186,14352598,122815572,1396917586,138762825,76283908,14352598,122814464,1447645776,138761281,79429638,13173936,65548,1,26,14352614,1703937,14352566,13173920,139592807,1380275029,1096040772,-318758904,-922427132,16780288,256,4096,-620698112,268435712,-620710400,-922431232,1376041984,1296125444,3147845,84803584,786633,1,5177344,15073280,65755,18219088,83755227,26214601,1163134801,1430410328,-922404538,16780288,0,32512,-620698112,-2147483392,-620685824,-922408704,1359071488,1480938503,1128616532]},{"sector":2,"length":512,"data":[13174100,16777218,90572124,111673350,101189243,0,1095239250,1162626126,2030043144,-620702203,1375731712,1146047748,133189,14026122,91816155,1430390610,1514754886,264261,14026142,219,1380976466,1413568073,395333,14026162,92930267,1430390354,1397706822,-989853688,-620702203,1376085504,1179992582,138694213,98041866,14352598,106038706,1346786626,201871956,-351931648,134269189,956302349,-989804283,1325945349,1179534672,138628693,101187600,14352510,156370419,1431260745,1314211412,1312835,8259102,98042075,1279658322,1179145045,138628693,104071192,14352510,156370462,1397705795,1314211397,1837123,8259146,104071387,1398081618,1094996549,537411924,1862695680,201378054,16777472,268435456,-436207616,16833280,-1241509888,1593891584,1241565446,1308905990,138759489,111673392,13174428,65548,0,79,14352614,5242881,14352662,13174412,106038686,1179014466,-2146938299,956301312,51461,1393119488,1129464133,1128616520,13174476,2818050,115214036,6,1854,1837,1229325394,543820,-16315648,201378054,16777472,352321536,-436207616,16833280,-1241508608,-285156608,-570373882,1090802182,139613268,119275541,14352566,72484619,1162692948,754980360,-620698105,1376197632,1514754820,1706053,15075134,219,1095631954,503858509,1593835520,201378055]},{"sector":3,"length":512,"data":[258,201326592,-436207616,151051008,369102080,1325456129,1426114823,1141395713,1413829697,2068139337,33605895,-2097148928,101158151,-788012800,-1341669369,1375731719,1095063812,2130,14026654,126681307,1330447698,138957902,128974850,14352598,55705600,140067140,130023428,14352598,72482816,1381322568,-788527608,-620702201,1376230912,1313426691,-520091640,-620702201,1375731712,1128616707,2568,-620702208,1375731712,1397703688,1330795077,82,12976128,219,1329859155,1380275795,1313818963,1033,0,100663296,-704642035,56064,1392508928,1414416644,526674,0,0,265478,0,11927554,268566747,100714755,89326104,1329877837,788819,0,0,265478,0,51380225,393417,1191662336,1094997061,269043028,0,0,67962368,0,-704642048,100719360,14352598,-620702202,14026240,393435,1392988928,1094997061,336151892,0,0,67962368,0,-704642304,33610496,14352598,-620702206,512,1162282835,1296651348,1575237,0,0,265478,0,14024708,-704249637,100719360,14352598,-620702202,1536,1163069267,1296651348,1837381,0,0,265478,0,14024708,-704511781,33610496,14352598,-620702206,512,1162283347,1380074324,155926853,32]},{"sector":4,"length":512,"data":[0,218497024,4,65536,14352638,1392508934,1413829385,1163018819,604588865,0,0,67962368,0,-33554176,33610496,156434928,1448363335,1179210309,2623833,0,0,265478,0,16646145,393435,1393120000,1163285573,1497778514,11273,0,100663296,1037,16777216,-620691968,124453376,1229195347,1380338515,805913925,0,0,67962368,-620698112,-1241513728,33610496,139657216,1263749444,1163544915,13321,0,100663296,-436206579,16833280,-620710400,512,1162283091,1413563988,940134996,0,0,67962368,0,1644167680,100719360,14352598,1392508934,1413829384,1414807878,3934546,0,0,265478,0,6422530,-704249637,33610496,139657216,1179927879,1162692948,16393,0,100663296,1037,33554432,-620731904,15074816,637927643,1393054474,1413895237,155536713,68,0,218497024,4,131072,14352482,-620698106,512,1229326675,1229341774,156521298,72,0,218497024,4,196608,13173364,-620702206,114033152,1158021321,1174950661,1313099337,156522565,76,0,218497024,4,65536,13174476,1392508934,1347310858,1414218561,155536713,80,0,218497024,4,131072,14352614]},{"sector":5,"length":512,"data":[-922256638,1536,1095764051,1230261059,1409893709,0,0,67962368,0,2063598080,100714759,14352614,1393218054,1413826313,1448365641,1477002053,0,0,67962368,0,-1241513472,33610496,14352510,1393134598,1413829385,1448365641,1544110917,0,0,67962368,0,-1241513472,33610496,14352510,1392616194,1096241931,1128617552,1397903188,24585,0,100663296,1037,0,1392508928,1162169092,6555984,0,0,265478,0,14024705,-50200357,1157911307,155403608,104,0,218497024,4,131072,13173364,-922597118,512,1329859411,1230521683,1146045268,7080261,0,0,265478,14352598,0,1397098323,1129464133,7342408,0,0,265478,13173364,41156610,-2046689079,33610496,122882366,1347962182,155471425,116,0,218497024,41156612,65737,13173364,1392508930,1347634694,156518732,120,0,218497024,4,262144,13173364,-922575358,46728704,-217710391,100714754,139657216,1129729605,1414419791,31753,0,100663296,-973077491,56064,1392601344,1447970054,156390483,128,0,218497024,8781828,65755,14352582,1393075970,1413826310,156651077,132,0,218497024,8781828,65755]},{"sector":6,"length":512,"data":[14352518,-254,255,184551424,2048,4096,570429440,905973760,1526730752,6144,301996032,8192,251666432,10240,419440640,12288,603992064,14336,654325760,16384,1040203776,18432,1140869120,20480,402673664,22528,24576,26624,-1811912704,28672,30720,32768,34816,151029760,36864,83886080,-16777216,1811939583,-16775168,1912602879,-16777216,553648383,-16777216,486539519,-16777216,872415487,-16777216,1107296511,-16773120,1174405375,-16773120,2063597823,-16775168,2080375039,-16777216,721420543,-16777216,939524351,-16773120,436207871,-16775168,-1728052993,-16762880,1761607935,-16777216,-922746625,-16777216,1677721855,-16777216,1258291455,-16775168,1845494015,-16775168,33554687,0,0,0,0,0,0,0,0,0,0,0,67108864,0,0,0,0,0,50331648,5459780,1498613248,1296389203,-150994940,118659448,777211716,89342288,0,1443364864,777212485,88752719,0,1225261056,777147470,88752719,0,1409810432,776293705,88752719,0,1124597760,776688194,88752719,0,1443364864,776360517,88752719,0,1141374976,776688457,88752719,0,1174929408,777147457,88752719,0]},{"sector":7,"length":512,"data":[1174929408,776816980,88752719,0,1174929408,776228425,88752719,0,1342701568,776816980,88752719,0,1443364864,777274181,88752719,0,1393033216,777011543,88752719,0,1258815488,777012549,88752719,0,1158152192,776160600,88752719,0,1393033216,776487762,88752719,0,1158152192,776884312,88752719,0,1393033216,777276496,88752719,0,1158152192,777213518,88752719,0,1158152192,777410126,4866639,0,567095476,1499094731,1344385115,1448235347,-326427051,4570012,-617393394,1586158478,-773598964,505398755,142001491,-1387221508,-1951541109,-796152376,-1377268819,-125063856,-1901244243,1482563520,110939130,-326412969,-66027836,-1413248085,-1951678069,-1420252222,1487652491,-1411871573,-1420252328,113925407,-326413056,567093940,2126832690,-1031099642,-1425375548,2126825098,-997086450,1571492478,1426067658,1317792907,141986314,-1274653046,1562496299,1426065098,750054539,-466476595,2126824074,-963990778,-1425375548,2126823818,-980767986,-1424851260,1100381,-1964209323,1317669998,141986314,-1274653046,1562496301,1426065610,12119179,-1004417741,-2010773890,80370965,-326413056,-1207544182,567096065,182877,-1259566251,-1004417708,1571423870,1426064586,1183509643,-852577274,46816545,-326413056,-1274653046,-1960719050,-49712,-503905164,-899816457,-1957363710,106334956]},{"sector":8,"length":512,"data":[567097012,-796140917,1962934077,-136186108,46816739,-326413056,173458718,-1204764029,567100160,855929631,855829449,41920,-1861845308,147479979,-326413056,139904286,-1959738749,28837454,522308931,-1070398862,1560281251,1426065098,2126834827,495658506,-849936200,856060705,-338545719,-1547685118,2126774272,-1416496122,-899830894,-1957363704,176080108,-1960998106,1451951694,1459730440,41034189,10731571,147479808,-326413056,508619907,-1928563003,118927486,1329376508,1336935026,-1527541352,-978665422,448005718,1452089805,-1960896848,1320421966,-1004592691,552076926,1575324416,1426066122,-987829109,448005718,-1273028147,-1004417713,82314878,80370944,-2095222272,102637255,-1178586593,-218365696,-1965951314,-141865023,-1527513778,-1070391382,-1023410013,-991130795,-1946417538,162597958,-1140463405,1183558407,-754601716,992744,205949867,-1426055387,-1324726645,-1410804981,-1324726645,636015365,-1951727553,522521158,-1411329792,576093,518818645,-66423099,129772973,-523040335,95530386,-805052205,-1378876499,-523039823,95530387,-670834477,65589677,2126782403,-1416451322,576093,-1964209323,900991558,-1064558131,-66683196,-1416385645,445021,518818645,-1979296059,632556102,1562321357,-1090517302,649986048,1227008,-1406206832,567096756,-987868410,-853167083,93265697,-2097003121,-421395257,453116107,892609571,959985462,1027357498,1433747262,10611851,650153472]}]],[[{"sector":1,"length":512,"data":[136843,1183502379,-852380666,46816545,-326413056,9865,136844,16706689,7822,-1996477279,118944326,175556092,-1400734067,41045820,-1852289104,-1070422797,108447146,-16597363,1920875692,-1434537982,-1527541352,380243376,45518111,-193558017,1190551180,-1981645171,1183643774,687978746,2123178445,-58816046,-1191295348,567093505,-1920838003,12120670,1914817867,-1161809150,-628228096,2526202,35032576,10746624,147479808,-850545664,-1957311711,-973332756,-1968437642,67056344,243188958,-987867577,-1968436618,-202558776,-1430244700,1124120655,1108235973,1579098573,-1040775566,628359192,1192132292,494203707,-527777742,1950039212,-214193659,-58657675,-2134739910,-1116447492,-341156688,-993555528,-953479554,1562356296,1426065610,-65082229,-1408862523,-315438966,2126827011,1001211658,-2146338831,209009404,309485884,242711100,183181356,431246926,1090789837,1001077428,-2147126031,678714428,-796245972,1454005424,-1958235106,-853604617,1918770977,1031808531,1359836160,855637945,1336865472,1504337072,-1527525845,-978665422,-1958344074,179066878,1007776960,1007514716,1007055457,738359162,-353654240,1560182145,1325692206,-2128811185,774831741,2105546101,259349757,-2147225725,1950023549,1031819014,184186204,-2133690944,1966800765,-1436766205,727697291,531255239,313949,518818645,309773820,852527788,198872054,-2146470693,1952251768,-8880119,1258517562,1136193909]},{"sector":2,"length":512,"pattern":0,"data":[243188736,855648232,-2147030053,91500088,1977236291,571638,-401965372,-628424688,-1006631752,99092094,-899866880,-752156656,41075515,-1951743093,-203553848,-1007449180,686346803,-654863872,-326412853,106335006,-1962927384,840894199,16824768,-772362510,-1979154748,-1527534911,46816543,429568,109979136,-13434836,650130172,175375674,-1190693814,-1359806465,1438904299,-326898549,-973332960,2123171446,-1408821536,41295676,-1952964688,-796180280,1017908963,1007055457,738359162,-220026336,531250608,2002462,740199936,-2131348736,292814908,-1948221811,1957098442,179064328,-335841856,519998442,-1178586617,-1359871744,2126828022,-1430156790,-1960860429,80371173,0,0,544768,1114181,36864,1638400,36864,3932160,36864,1638400,36864,4194304,36864,7864320,36870,66048,5787648,262182,53254,262192,3182592,327680,3182592,589826,53254,1114160,3186688,8323072,3182592,8781824,3182592,9043970,36864,9306112,53254,3080240,53254,3407920,911560788,0,4194498,16449783,16974083,18743563,19988785,56,48,4194560,0,0,0,0,0,0,126]},{"sector":3,"length":512,"pattern":0,"data":[0,0,0,194,213,0,0,0,0,0,0,0,15138816,0,0,0,0,0,0,0,0,1380976473,1163152969,1543503954,-721365565,1493172224,1398362886,5064020,15294720,0,1275286016,21587,1845493760,57088,1280,805320704,16776960,65536,0,1380976384,1163152969,100663378,1414748499,281925,1263706624,1380977425,1163152969,1095773778,83,0,0,0,1414548484,-443984591,503316671,48983,10114830,-1090519040,1461583872,154,2001664,1140897792,-897572403,-1207912928,567100417,-883037047,0,0,36864,589824,20480,917504,18100234,1245184,36864,1572864,18624522,1900544,36864,2293760]},{"sector":4,"length":512,"data":[-352321096,-1010814206,18364159,-399669016,-1073009237,11535477,-5242133,-1608909662,-16489392,-1574275422,1705126516,711172650,-1574284126,1134701138,708944426,1342179000,-1207472152,-397410297,146278248,1642614784,636935,123398224,144107715,872393192,1491620032,902215881,-917378992,1345706936,-397361101,112775671,28856320,1005080576,65517576,-1419188144,-1022744600,-2081649835,-1000994580,56991774,-1939495906,1586100806,-92864520,1996430931,-297801724,-362753,451475574,100745454,117400996,516187558,-1014930016,-1499396144,736153957,-28930856,-1946394999,-350143946,-60898290,38243110,-2096658138,1308818502,1183575925,-60898056,1577552166,-1034033781,-35127294,131087634,-1070398349,-793241365,-1326952441,-1575581422,1705026405,1344355512,-1191218712,1438842881,516222091,-1014930016,-1499396144,736153957,71732184,65065288,126559960,1705121419,180829,-2115204267,1442906860,-1962641781,104531526,91383206,-352320314,-11133382,-1159199114,-397389057,1444867457,-24736490,-1927917314,860945990,1520062656,-401637099,1035503492,-396996575,1499021378,-16873843,937973328,1582913856,-1034033781,-1957363708,82608620,-1957210622,-1232271746,28900860,1911050240,1958742793,4096868,1567948860,703018751,-1992850200,1044119110,209002810,1705522943,1085663318,99309913,1676170839,702783999,1449503395,103532427,1346380086,17071747,1048775541,1963025830,-339725564]},{"sector":5,"length":512,"data":[71731971,703438928,378142900,11938283,1346945579,-16106776,787021430,-1956749513,79846885,-326413056,33746049,557072003,-1928891136,-1543635322,1048798632,1962949632,336108080,922685313,922689850,-202873432,-1506344962,976682853,876019489,557234209,557365328,-1449215920,149547088,-2129307238,1575324431,-326412861,74877782,1080403617,-793059119,63974151,1002867698,1936040966,-336186620,-1539953916,142016357,-1207535873,-1202716662,-1202716665,-1202716416,-397410271,-1072962000,585826941,-402229505,190398337,-1207601728,317456383,208848443,1343644600,-397361101,-1041504260,1566490675,1426065090,-326898549,-11053558,-400475594,1451884081,-129594886,-689418158,1207471083,1705262633,871909003,-1610208302,14320485,-1577695607,1177249188,1992297462,-94991592,66602635,1380995783,-1577552129,1177249188,-2115481354,-1608596245,-826048155,-28931065,-1946394999,-345659850,-60898269,990350118,58128454,993995046,2099329590,-60898294,638028582,1308772233,50097795,-646580725,1705381631,996517537,2099329542,1958742796,-1207702782,983760897,910066465,310247713,51323624,1210136070,1705379387,251593854,1583292726,-1017256565,-2115204267,-1929314068,1358889094,-955704600,-1608754938,2000585472,91488349,-352315720,112643,-1205777757,-1924131200,1358889094,-397361101,-1072955749,535495293,-16742771,-56301488,-397361101,-1073017060,820511605,-18178,-841684912,-1946163784]},{"sector":6,"length":512,"data":[-1581031963,104538426,108881318,-385953560,-4653549,-1957313537,1208403948,-1711275933,260117512,855930623,1911050432,358193917,-1034088575,983629826,906378017,-1592951775,100868406,104538424,92217658,-335685912,336108076,922685313,922689850,-471308888,976683004,876512033,91488289,-352320840,112643,-47781808,-2129307238,-1957313777,49054188,876512002,125108257,-33651059,375761059,-33651059,976682832,-58726367,1189630034,1493616618,-956257508,18958854,378320896,-24736432,983650557,-1509541087,-1928430235,1358823046,1497199848,-352320763,1354773250,201170664,-352158272,557490478,1705379387,-152563587,-24736259,-1679273731,-12392197,-2037576725,-397345282,619248526,-18179,-859248560,-1946163784,1438866917,113765515,25416,-1560000885,-1073012428,-1070394252,232974416,1342177720,-1711010840,260117512,1503266283,-401637099,-1034027272,-1957363710,116163052,-1923656190,-1543635322,1049322920,916529466,-91846367,1665704445,-33782135,1342177720,872391912,1407733952,-504868825,1241958183,-956300511,-1323542266,-1506345216,943128421,557496353,557234256,-413800368,-963907445,2113929021,9038083,992032417,1962801798,-59119611,983639531,1959213857,1575507721,-25499394,-2037705237,104594940,192176968,557463295,1342177976,-1577333784,-2037833418,1049361914,1218519354,-58291869,-1178170371,-54853627,121319085,1128466036,703330274,174587694,393220]},{"sector":7,"length":512,"data":[1835015,-1374683107,-1373721065,-1374179810,-1946260504,-401937424,-259261046,-488111125,-97283,1290339196,1354773503,-1946230552,-1956749370,-943497755,18954758,-402396416,1048837277,2130797990,-69605130,-326412861,74877782,187882984,856061120,-35106624,2096499640,318669573,-963966594,1342228485,1589177320,180829,1458342741,75402071,-1274264182,-2081387776,2855230,2105544052,125042704,-1274198646,-1947170048,1566465990,1426064066,-326898549,75399940,-2096663552,2855230,1048779636,1962949630,-62470646,-28916011,-970593352,-958727098,-339739066,71731995,1006503483,1187383925,1187432188,149665278,-1006876986,-1258404154,1347469363,1183666256,28856572,1525174272,5224482,1354773328,1342197688,-1924087757,-1202651578,-397410303,-443866559,180829,-2081649835,1465256172,-1962641781,1161926,-125050121,701679489,-15341482,-1996339829,-1072956858,-396924812,-1072955598,1979670644,838592516,200820361,-2096794378,74777086,-12326826,-1274264182,-773795584,98619872,1183390084,-1965519876,-12154873,909843851,192232446,-1962520694,130481246,-1979520051,-92864753,11846026,838920272,-1946204534,126418014,-386369793,-397004379,1583349411,-1034033781,-1957363710,49054700,2123061078,-1161327868,-487129071,-964562805,-396940846,2089025151,141885188,-402361089,1810575729,175439627,1946288003,112645,-1070398741,-1962981752,11798596,1149915200,1073787913,172264016]},{"sector":8,"length":512,"data":[1346371764,-1274329974,1448099840,1358850536,1200233611,1342223361,1200233611,1342223363,-1743829878,-12154288,-1696051048,71600433,16744064,-396950412,1149959906,1342223374,1462014696,-1946286360,1583285316,-1034033781,-1957363710,-1957210388,-947190658,-150990406,-2114941982,1462358726,-2080513304,1962869884,74776338,-399452952,1153901138,1476394756,1610468072,46292318,-326413056,2123061078,-1161327868,-487129071,-964562805,-396940846,-396952149,-1957626414,21465628,-397410124,-396942882,1583349143,180829,1458342741,-1173993845,-487129071,-1207969653,2062035414,-2081387728,1946158206,112649,613476432,28837867,988303360,1592284722,-1034068432,922681348,922707380,-1766300238,314069016,-1205972992,-1202710144,-397410296,378085944,-1365023312,861324133,1443228662,1191130088,2081619587,112886,841738320,1706034887,113704960,26030,-1957313698,-164407572,993787553,678691910,-1560000885,909720574,141831057,-1107207192,350945281,1358954424,-1194812184,-397410303,-1070334542,-38999984,1006515967,872299496,1843941568,1590070051,180829,451065886,754031184,1499012511,451683969,1048637407,1946183331,1343991816,-342384152,1354773257,-386005016,1438851331,-1957237621,-4717450,1122521343,-236431672,1354773501,-2094814744,2855230,-167050124,-397014924,-396951885,-166986430,-1545075339,-402396161,1566443867,-2097151294,3931710,28837237,855829248,1006543808,730939011]}]],[[{"sector":1,"length":512,"data":[-402295808,350945452,1342177720,872222184,132665536,-29949955,-40441797,-1170473311,-487129071,-2020878197,1455630808,-1858174121,309592107,703334086,1683005441,-291308028,702390825,1760043755,1343654408,-1962887580,-141864966,-1957760981,-1560345402,-576574996,80186153,703505151,512879080,1343939256,-1624444518,1599691037,-1957313698,1988843244,770201092,1354773501,1445127656,1459485416,1593608680,180829,-1979645767,-2140909514,378207686,-1031773177,-1207453697,-991427072,1994965843,127002879,-397361101,28900756,-1914155008,586541309,57982987,-2080388632,2855230,113643124,-16766498,-398721482,871104205,702416582,-18431,-955258800,-397361101,28901252,2112376832,-24844033,-2096611608,3931710,922684789,-1578615810,1354773500,-1591618584,297417726,-1948059904,-662205480,-1957313751,71732204,-150990406,-2082960414,-14035265,28837236,855829248,46292416,1354773248,215136336,2275408,816048208,-326412861,1443425411,141986647,-955482485,702806086,1342177720,201308136,-385649216,113705171,25416,-1963434357,11799367,-1240901750,1220684544,-1996071285,119400455,990273163,-2096270329,41812284,233311487,10611199,949891,1586178421,74973176,-1993501464,1586232902,-1977644040,11797319,1354773328,-400666904,1996431075,762833150,989885161,58592894,-1961984373,2126985988,-2093184766,74776636,66759,1586168971,990315270,-1962180665,-1962474748]},{"sector":2,"length":512,"data":[1120938967,-4713471,-219655937,-1996190779,1187510854,-352321028,-92864730,1006257803,-2096073273,1946159742,178181,28836843,855829248,1459572928,-96010492,-1946401025,126551646,2113685051,-1956749360,214064613,-326413056,2123061078,175540996,-396996785,-1957087779,1993292744,-338744572,-1580649726,-1053072568,243860598,906191688,2122539848,158663174,1705647755,-352170102,-1440838905,55544421,11846026,1354773328,-1206027544,-11534335,1178142838,-1207601914,65741120,1344357048,1446053608,1445916648,1496678632,58181435,1610514152,146955614,-326413056,74877782,-2097150778,3931710,-1202318219,-1202711010,-397410049,113742790,89463,1048780011,1963015166,4096789,242548796,922703390,384311610,-397389068,1566499293,1426064066,-326898549,1996445198,-230257400,1695279184,-963907445,1913013819,74857234,2122517879,125042930,-1995809141,-11408585,-1927936394,-1705970618,250347676,369391359,1358579341,-335504230,1354773262,1342918328,1358579341,1344357560,1358186125,1343521720,1342929848,-1271537760,-559919104,1073787957,374864,-610604976,-954940285,62022,-16097653,1996430903,10263048,1183518444,-443851022,574045,-2081649835,1996431084,-498692852,1675552848,-1981393271,1446765638,1966043658,138820357,1451960434,-465138714,1996903995,990213405,376898630,14843523,1451954292,-465138714,-1995546997,126419543,1996445675,142016266,-398029546,8690256]},{"sector":3,"length":512,"data":[1996426988,74907398,-196702954,8690256,-1070395668,189708368,-196702896,558151760,-398029488,344176720,192657488,903848016,-1605369676,11810270,95965248,-504868864,348423130,14829255,241076992,-16615425,1996430903,8690188,1183518444,1575324642,1426066626,-326898549,1996445196,-163148538,-1375147952,-1928825089,-1202653626,-397410294,-259269273,1358317197,199236072,-1924104970,-1924073914,-397347770,1586212398,39291142,2122516361,729088244,-1202667469,-1202713778,-1202711385,-1605366917,11810271,903782480,1346371764,1342178744,-2082842648,-4321596,-1928532993,-11471290,-1326971786,-1957078733,-443851066,442973,558251651,-955745024,2180614,-1961825536,1248111126,992036513,-1996196158,-1021229546,558382723,-955745024,2181126,-1609307392,11822323,-1588932469,-1036312248,378078326,1438851400,-327029621,1465254220,1688800906,1007304323,-2146798336,192021753,1946679680,459663366,855761641,-149820426,1946157510,-351817724,-2011123710,1191100546,10550913,-1432229518,1210513252,1174799137,65065249,-1989890554,-939607418,1325315206,-1441887488,1175333732,-1266250975,1992375294,-336491772,-1263105276,-775517186,-1132033568,-1858173954,242483243,-1268494176,-260864,-21592439,-291499285,-1979665367,-1238766570,1220684544,-21592439,-1268452448,734563072,-1960753138,1006548614,-352160063,-1232172284,-1198618114,114686,-1962883863,1006549638,1935997702,-1132067990,-83477506]},{"sector":4,"length":512,"data":[-1961068700,-1591665130,-2046615268,1347616442,1619430678,-1224781569,-1779892548,-1956910114,-1591665130,-2046615268,1347616442,1619430678,-73314049,-1165612188,-1098479106,1911050494,-266957858,-1165587612,508580606,-10451315,-21068285,-1132033200,-1098503170,1374179582,-1961366562,-1956319210,1392425606,-2037574064,-11468960,-385958730,28892728,1448562688,1619430743,-1070378753,416016464,-21723509,360105531,1346422411,-1263075497,-2037557250,860946112,-1360506688,1688903960,-2046697263,994574010,2013182142,-13375229,28841707,-11055104,1476310198,-20937075,1354773328,1192789224,-21578181,-1029643146,-1962888092,-1948003880,-1973112689,-1962887999,1177955312,-1262122463,1208363776,-1199142623,1928727550,1925188368,-1263125748,990278654,1929295494,1354773260,1343991272,-350471192,-197722348,473098340,1346422411,-21461365,1659392064,-1956749541,1438866917,1465314443,730939011,-1609796608,11822160,-964431733,-1609438213,11807214,-324996981,721466409,-20544528,-1272320608,-1594324224,11807211,-1957693397,389874758,-385649152,-661979000,-13704239,-222723161,-1111885639,45728697,45744826,45744826,-1279664454,-323361095,45744825,45744826,45744826,45744826,-860224838,-1581656903,-953457494,-350140765,1175387970,-16454879,-400472570,871103774,558368455,183173120,-1268452448,-1547293952,113713480,8518,908663275,283844936,558380545,251595499,82518344,558368511,-386070040]},{"sector":5,"length":512,"data":[1583349033,180829,-18346,-1077876656,1342177720,-940104728,521951494,1241958144,-402652639,-397370555,-259301323,2097151619,-1455521772,124912740,1688813184,1457026311,-335612696,1590070226,-326412861,-1610421117,11822274,-472786805,1689290635,-1963047287,93912646,1185152947,2109737761,1174849286,-2097151967,2855230,1352666228,-1962888092,-54426680,-291500053,-1962888151,703373512,-936705868,-12154295,-779468648,-1037369162,186730659,-955875904,2181126,1575324416,-1373715261,1334453861,-4095959,730939011,-1979091968,83932353,1038876669,11846026,18097911,-1728046917,-936707081,1006648963,-2094893824,23438910,28640373,780797931,-981441114,986024703,168457153,-1979419411,-1325208627,-1262384639,-1957313792,71732204,1006634555,10689908,1975520060,320976901,699925483,702915347,1342177720,200800232,855930304,-402199616,28899192,46292224,4096768,91553852,-336667928,-69474301,28858051,-840413184,1958743031,4096803,477430076,1006515851,1358954424,-1195470616,-397410303,-790039492,-72357634,-197990314,-1957313698,705072876,73304832,2760235,-1706426184,1616,180829,1840133887,-1006641176,1840264959,-1006643224,728608929,862331398,-1710968366,60735,-326412861,1988843350,-754667260,71759854,24379407,1840292166,1713505835,108250683,-1031024077,1049301739,906061346,581002786,1840161638,-1070344309,-1034068385,-1343750142,2144472063]},{"sector":6,"length":512,"data":[184843274,855929792,-1190401088,-770965506,-937229707,-2084322933,1812030,580978804,1840161638,512432107,-919397608,453777035,-1709503839,59703,-1374254782,581026669,1840161638,-326412861,1342177720,1342180280,-1962641665,-1976918498,11797063,661121104,180829,-1206498584,-1202716667,-1202716666,-397404427,95955271,146296832,280514560,954748951,380090409,-4593584,-4696381,1005080831,1006543293,-150990406,-1948742686,-1557538681,213400578,99110912,-1421966349,91488307,-350755906,402112003,-1642165418,-1274574294,-806858752,-6756316,1342177976,382842960,686155856,1342177976,1342178232,1343675576,-1205283096,-1202716651,-1202716667,-397404441,113715399,21569,1342177720,1578659304,-326412861,-401806205,-1072995098,1874331764,247175680,1586171777,41418502,-196702954,10263120,95948524,1183666219,-1746382604,-1202104020,-1202716642,-1924136954,-397347770,922691703,922709454,-1927909940,-1705970618,250347652,1344996792,1358186125,1496082920,1423449,440400,-196702896,675932240,728615073,-1318205946,1357435654,-196702954,10263120,-1715990804,1183666198,937971956,-1202104020,-397404400,89730209,-1202716666,-1924136952,-397347770,-443865073,182877,-1275051,-776469386,-857190299,-1733844,-1229454218,448286821,770199552,899171,178256,1706473552,668854352,1343017656,1562756072,1426064066,1465314443,-1962508661,2105739381,309657614,1708243030]},{"sector":7,"length":512,"data":[744024144,-1072998055,-397015948,-1705574490,6147,661962763,-521279402,1348709048,1348686520,1343659448,1348843192,1496080104,-1746382759,1348032811,1496027624,1443687257,1348843192,1342184120,-1201490968,-1202716659,-1202716669,-397384266,-759683229,1239961612,-401713371,1583349407,182877,230643542,-1270971624,343146605,1840529025,209518848,1840529027,-1106938769,65734144,-2080374850,1869460542,1048776308,1962962356,71204954,1400176683,1840529027,-1090095761,12458017,-1863821554,1358077,768080,388216912,-1642165424,38242858,-2146631500,-152547328,138314532,91488316,-351797058,1241958170,-956301023,740055302,-1770002432,1534060624,2113929021,-2131719422,7185982,113706612,26879,1342180536,-1947121688,-1017225274,-4503372,105945855,-1014300672,-326412861,10939521,-4237482,1030399,-259856304,1343715000,-10713459,726788176,11557209,1183651408,345657516,-1928398077,-397366202,-1990645011,1040145030,142475267,61562509,509656,1353467533,-10713459,710731856,62413145,45633536,-2037559296,-397344932,-1950865861,-2037559273,-397344932,1499015935,1348903864,-1193315608,-397410262,1183670486,-2098704212,-1404662305,1552321872,468209919,-1202104022,1347420163,-10713459,637397072,857413793,374362834,1353467533,-335510374,-1404662514,396408912,1552321872,-1394061057,1348032810,1495918056,453943641,872414725,374362834,1353467533,-335510374,192526350]},{"sector":8,"length":512,"data":[-1404662448,399161424,1552321872,-1142402817,1348032809,1495905768,-1343729575,-1202104023,-1202716669,-1924136956,1358912646,-1591374104,78715816,374399187,1353467533,-335504230,379172878,-1404662448,397785168,1552321872,954749183,1348032810,1495888360,1810387033,-1202104023,-1202716669,-1924136955,1358912646,-14333208,-9581002,376294454,1353467533,-335510374,-1404662514,399685712,1552321872,-118992641,1348032809,1495871976,243801,505936,1552321872,283660543,406173733,1552321872,-722972417,-2091296471,7186494,1606288757,-2096108789,20163390,1304298869,-1107039464,-1923737514,1358912646,1495854568,1839767897,1996489533,-774337757,-1476448541,-1057308430,-1056653057,985579785,-1106384104,149624929,-350719042,411090435,1552321878,-1209511681,-1202104024,-1202716669,-1924136951,1358912646,-970680600,-2097107898,-15090114,-1096740492,1389507353,1183651408,-2070261588,-1592857600,101412286,91516352,-350664264,425703427,1552321872,820531455,-1923524311,-1924092858,1358917766,1495868136,243801,702544,1552321872,1088966911,1841471780,78762547,15548314,374362624,1353467533,-335510374,413120526,1552321872,-320319233,-1923524312,-1924092858,-397366202,-1168562031,-802488289,-10713459,-397225981,1499015375,1343789240,-10713459,671148112,62413145,213405696,-2037559296,-397344932,-996072481,1389507437,1183651408,-2070261588,-1206981632,-1924130623,1358912646,1495831272,-1404662439]}]],[[{"sector":1,"length":512,"data":[-1404662448,674752592,2079321,-2037526485,-805044388,678815826,-1732748967,-2037559272,-397344932,1499015078,1342178232,1342180792,-10713459,595978320,862857889,374362834,1353467533,-335510374,417576974,1552321872,954749183,-1923524312,-1924092858,-397366202,-1168562211,-802488289,-10713459,-397225981,1499015195,1343789240,-10713459,659351632,62413145,246960128,-2037559296,-397344932,748757803,-1311624338,-314598908,1347551232,-1404662506,8690256,95948524,-2037559271,-397344932,1499015127,1353467533,1353467533,1495760104,721428410,1552322000,1389364223,1495775976,412661849,1552321872,-337096449,-1202104026,-1202716669,-1924136945,1358912646,-1591555352,-768381394,1067058353,1375731949,1183651408,-2070261588,-1206981632,-1924130521,1358912646,1495758568,-1404662439,-1404662448,656140368,2079321,-2037526485,-805044388,660203602,-1732748967,-2037559272,-397344932,1499014794,1342178232,1342181560,-10713459,577366096,1839742595,-401312510,-768345166,1067058353,-1996488467,1183448662,-399709188,1347614778,463879811,-2146994944,4001598,-1070398348,245434347,403057435,1540502299,332923737,-28407350,872177289,67156178,1996443730,-59310082,15506586,-1927917568,-1705989050,250347676,1343658424,1353467533,1495665128,-1404662439,386971728,1552321872,-1192734465,1348032806,1495658984,243801,1226832,1552321872,-790081281,112673,1292368,389593168,-1642165424,38242858]},{"sector":2,"length":512,"data":[-397410124,28843969,1676169216,1241958161,-956301023,-669230842,-1857034240,1447028816,263780491,703090688,2097089516,-16637,1583335307,-1017256565,-2115204267,1442874092,997113687,1346099896,-402360577,1499014719,163203,495658101,1946173315,1004386309,-524811285,1979666491,74907396,1495621096,1474842713,-380020443,2105737437,410321666,1346102200,-402360577,1213801909,1342457347,1495661288,12577113,33717635,-558360715,905924667,-402360577,1499014434,622651472,-1561765543,41779968,-385649663,-340262765,1996443707,628615172,1174620249,-1125625852,-10921691,-2142859979,632416336,-259303079,1962949760,7334147,-2142871317,292814908,1352139914,1346105272,1495600616,1975520089,2125892073,1174531071,1946172544,-1744532975,1005566032,619767888,-1072998055,1015081332,-972721152,32178180,1005303886,2125922128,1005762815,74907472,1495568872,-1947709351,1348032804,1495565800,1015039577,-342067968,41779974,-2096729084,-202832185,-1956749314,46292453,-326413056,67169409,-67074419,-20649904,-1924087757,1358692486,-67074419,616294480,1793609817,-1547684991,1017322266,456827675,-400868958,12106246,1575324422,-326412861,1988843350,108956420,902643337,117819275,848208640,-1556843357,346240363,872915765,-1959552605,918983,-1557183581,1101213395,819634988,-1556992861,-947178735,-1560275707,27470814,884122418,1057343115,715039488,-1960128093,3212742,-1557483613]},{"sector":3,"length":512,"data":[665004685,96897834,2091057194,720610090,117819019,702784256,352700043,717267712,-1960175965,3671494,-1557527133,914959074,-963958318,-1560277499,-963958284,-1560273915,1805855288,710583082,-1960162909,2295238,1600498851,79846750,-326413056,10546305,607554390,1619445358,-2037579521,-1202651296,-1924130443,1358913670,-2138695448,16736446,1974996597,-2037559271,-397344928,1499014143,-10451315,-1704057693,260115318,1840529027,-1205701632,-11531158,-1922189770,-397365178,1499014107,588572752,1183668569,922702000,233336356,607553996,-443851154,883016541,1713545984,1207975073,-1586646877,-1556060638,-1581027922,-1398603734,-1547685011,-1432130124,-1982712979,-1553084906,113667532,-956076510,-1553062906,-905525402,-399527571,-1365115061,1713546093,-1023409736,1345249720,1345252280,1342439608,1358950584,-1192367896,-1202704669,860892915,-11513664,-13702858,-399579338,-407310746,-71806930,922701870,922693349,179973859,1388327680,-296949680,-1006633032,-2081649835,1465254636,-1107001717,-1705572864,6147,57982987,-2097121559,1815614,113726069,14031961,-1202667469,-1202713749,1464864976,1358954424,1343276728,1342930360,1342180024,309328,-914954160,-2011904893,2122383174,192240127,193528808,-1961525312,-2146309136,1968111486,2106058760,-343929368,234929667,100728449,-776464523,-206024603,-1461170074,1465473314,193470696,-1962770496,1606847472,1575324510,1426064066,-1957237621]},{"sector":4,"length":512,"data":[-1070398346,-382539696,1840529025,58458368,-2097118487,1869460542,2028536693,-1237909760,1747433581,577103952,1048795481,1946185144,1023391777,-1204355248,1023195245,1747433552,562620496,-397387431,1499013506,561834064,1048795481,1946185146,-1172403406,142081901,-1946223128,1036422128,695535104,1840527103,1840914059,-745863285,722518659,71762882,666377808,468209768,-1207243909,860907559,1038635200,1979059146,-18427,-963968277,46292318,793878784,100917457,378220373,-489607341,-1039932719,794629771,-489487183,378257923,95498071,-1039932717,794760843,-489486671,378257923,129052513,-1039932717,795154059,-489486159,378257923,162606951,-1039932717,795022987,-489485647,378257923,196161371,-1039932717,794367627,-489485135,1438892547,1465314443,478152447,-1172537183,-487129068,1348350469,1495552744,125091851,478154495,-402597143,1183476894,1847763460,1840514759,116785152,1946316322,272531466,57933885,872219368,-1983738926,-1553088490,-1130140226,-12720019,-1955714909,-1590762218,251997923,13796096,1587152049,-1560280851,378236460,-408867095,984366,-1325346173,-312567292,782434304,786538862,862857891,1841603520,862831267,-837383726,1842127725,-861464,-395434954,266917199,607584086,-714872722,1847867135,-2131498520,4001598,1048775797,1962941350,112645,-1070398741,190608547,-402295616,116126253,-1553587551,113733038,73968,-2130630758,-267991281]},{"sector":5,"length":512,"data":[-2097151968,6059070,837288820,-2146500622,1566465820,1426064066,1048636555,1946172588,75399436,91490817,-348345160,-214007793,91488358,-345574472,1722005507,180829,-2081649835,1465256172,-1107001717,-947126273,1024066093,58064902,-1962810135,786682328,-899373057,-868234056,-881406921,-868234177,-105330062,-1095217136,-340242323,-488091544,2109737963,36890883,1358954424,-2085666328,7186494,1048774516,1946183935,-1105279891,-28930963,1476157065,1358916840,1348871352,1495259880,1847894873,-801920096,1354825440,-989966104,109902942,512323008,1048800702,1962962356,-1472298233,561315949,-1946972696,-1270971408,57999469,-2130588183,1963852030,29681923,-50075562,-1142296437,833537,-447813552,1761543879,922681344,922709440,-1936036418,-1995472624,1183447638,1959791608,-92864699,1467541584,-963907445,1946550333,25487619,451677825,582484096,666390545,1223184488,-950445793,18513670,16824320,439811920,666377755,1206407272,-334593672,-385843174,-440532654,285849855,1354773328,-372809752,-1397227198,-1024962500,-1072998114,-1397223564,616058940,15224934,-346466017,1023522829,1713682512,519170128,-1212655271,616058895,1354256486,1021857792,-1947169848,2109737926,16836867,1713651328,-1206225920,860907044,-1202696000,-397406886,-259296307,-1072970101,-538377347,-1405190144,410320956,1713651328,504460288,1348903864,1713682462,-806361008,695517195,1713651328,504460544]},{"sector":6,"length":512,"data":[1348903864,1017952286,-807933872,292864011,1017952286,616046160,-957853594,1975520207,1773463555,1348871352,1346153656,1495162600,83934809,-402619927,-259263773,1459649001,1358812392,1348871352,1495155432,1847894873,20825995,1024226314,343149062,1946814269,-1607800036,-523226197,-397360898,418118821,-801920096,1343030496,-335767320,866885643,84205776,-57939888,-1947082264,-1270971408,208928877,234946177,-397015436,-259261603,1839611520,-1206815744,-397344769,-1202651799,-397383423,1499012567,1583335051,-1034033781,-1957363710,1048598252,1946185126,-1472298212,947126893,1358954424,1358773480,1349059000,1495103976,1958742873,67552803,112722219,1273516042,-1947169795,-49722,113641844,-1962923260,-972297274,2819078,-402360577,1566467792,1442841282,-2097131842,6881086,113721204,14097497,-1202667469,-1202713749,-1202712629,-1202713731,-1202716667,-1202716662,-397410300,-997997604,-259287026,1497220747,-402426624,-24942462,-955878373,6881030,1590070016,-1472298045,74777197,48990384,-777911888,-1472298188,75366509,48990384,-593362512,903591988,-1445599152,-326412861,74877782,2130706051,37128452,-2147025092,478191900,-150989638,1580336610,533588048,1958742873,83934723,1962933891,16679174,-1962642162,-2126773706,1963262206,-6952924,1048637579,1946170848,1006543120,-150990406,-1948742686,-349579129,83933187,-348388701,-1398347577,79283851,-838092032,1946630958]},{"sector":7,"length":512,"data":[-498908410,778497015,550911,458758,453574664,1607351502,-1194446642,-397344769,-1494701138,-940536900,3932678,-7804666,1342767544,-1946252312,-8590864,1358954424,-2085909016,3932222,-169343115,-336557090,-340465659,113766539,117455874,-1191224855,-397410303,-1073000485,1223232637,1743279871,-370111556,1566506818,1426064066,1465314443,-1274784118,1596050690,46292318,-326413056,1586170859,71761668,-555206657,73305087,1962950528,46292461,-326413056,1444605059,108956503,-392682776,29282473,13166848,-472785269,126491019,1672611386,-1696005260,-773944576,-1978037277,1352139079,1495245544,1023427117,58064910,-1962894103,786682328,-822827009,-819802342,-813183141,-813183097,-813183097,-813183097,-820850809,-813183097,113758051,80904,113733099,146440,-1205967381,508585943,-472785269,1077936523,-944248752,1742159488,1175942400,1178322571,504331524,1348982712,-773944546,-399376413,-677328999,77830247,-953357508,20711942,-953881856,18950662,505211648,1346112696,-773944546,-399376413,213436273,602427452,101107655,1174405436,2097444411,-13571837,1065360779,-14584832,1732491317,451799120,1136154969,1625837671,-1577013041,1386374058,1732491363,-814749616,-1952820504,138314736,57999420,-1207910423,-397406501,1048806590,1962941350,-1405190130,125042748,1342247352,-1582093848,84229128,1407733770,-1757157126,1840529027,-385649408,1048641686,16805300]},{"sector":8,"length":512,"data":[-1947663492,-1270971648,58027885,-2097118743,7191102,512438132,2013228474,-26351608,-397399888,512491093,2013228474,1183651330,-1667608346,-1928401920,-397351354,129564239,1223184445,288930046,-29235120,1840527103,-431583978,10263120,1183649516,753422566,1023981822,-31070128,1349003192,-1325523224,115888174,1343074558,-1325530904,-85438454,112893,-397013781,-1070334717,-1755256752,1583333427,-1017256565,1913203432,41219,-1022801688,10546305,-402056472,57872083,-1979671831,-1979666802,-1979667282,-1979667818,-2147440458,1946158207,105351952,-153553328,138871516,-351705342,-20316651,-20250931,1342671822,-587802378,33703682,39322471,47186632,-1946942740,-2147440962,42174,1988961652,1381373442,1355123281,-1979034904,853594305,1374684132,-1390471650,985792170,536377034,-1977554087,-773573951,64550880,1380976327,1355123281,-1979046168,-20895038,-773573952,-17300512,1995324101,144435374,10536065,-2130703166,-402611988,552077415,-385649906,-1903558487,-1366687570,-1769340756,-1232469846,2139095208,276037636,1342588811,-587802378,34096898,367724903,-838940162,-822162690,-162527349,48035544,1728184903,-939370493,-335359998,-1232342014,2123169958,-1531019262,829685760,1364350742,-397359734,1464928671,118883870,-792622561,65286880,-28859144,1992964801,1499406328,1364350726,-397359734,569051519,851544720,-136261148,113640408,-1974382000,1760055493,717392393]}]],[[{"sector":1,"length":512,"data":[851508929,65065444,986054384,-392202514,-998176807,214040736,-1595113216,128313344,2013208946,-1501132277,189237248,10796672,-401771520,192023883,2123171606,911362,-387698088,-998176859,79823008,22514176,1334507058,736965123,105988554,41418583,-397264897,-1974007557,-1964756473,-315489713,-784218069,-1963457568,1191224966,1610408618,2013222662,1379401474,1107876584,-1010048423,-402181400,326241515,-2012854646,1183450183,1962884100,88573955,-402014232,79824701,118614016,1913441000,209250307,-1022939928,1913062120,172291,-1022943000,1913059048,821789465,113707125,458756,233311467,35556096,-1547465984,-18350080,2139144966,158663200,288816979,271050752,176547931,185761675,-1958841089,1730807879,717553159,-1057094073,-141826826,-268177405,396939,119459371,-523131661,394793,-1961732213,-2097146338,225718523,1913804601,306653443,-350986357,-327040018,2028470435,-385650170,1342570785,11648708,-1324365949,-1930439932,1539769280,-1803056850,-942108967,1030,136218880,101107456,-1006632960,-1996445250,-1946145730,-1979699706,-1577015418,-1945698261,-1962931706,-1962889338,-2097106498,91492327,50335789,3227079,113707379,262148,-1560231703,-2037776370,715260077,1183651328,115888130,38177538,-1962925405,614690118,-1534686720,-1545565696,1183449126,-1650029996,2663168,10126987,-1207956317,-1903558622,-1040318291,-503906123,1207972101,-1560274269]},{"sector":2,"length":512,"data":[104529926,158466062,263879,1676345348,3193744,856396008,1876928,-33546589,2138816,1200209971,273123602,1200162697,2662662,-855717634,-1996339319,1204160583,1204158468,1183516427,206014810,10389131,-972142711,-1342037945,1090048,-1342172766,-1383167488,-2097105664,1200104131,-1929846240,-390056998,-998177419,247595171,88467456,-1276637838,705661701,-20895003,-390005052,-389872295,645006639,-1979300214,394986598,74760202,-805123842,74769418,-201143042,990664585,1962934814,-389903611,719850515,311813,1912930024,71731718,-402289176,46269721,82700288,2013203058,71731984,1477461897,-1039858456,-655884286,-402230780,-706215900,83093512,1392509634,1212291,1602947956,821789460,-336006539,67553031,-117437696,1465303899,989868222,1946162206,343903026,-1995028597,-969206203,1049168245,2089353238,-1962546412,343706096,1324683,-1995154295,817829495,343902464,1318537,1595301257,1827193694,-1961922044,1200161862,35535630,-402426624,2129136500,180740,1912885992,545226780,-2146011903,1962935422,1354773000,-351736344,168683528,-2115501198,72869897,-402652478,426902571,167782049,-1978501916,-75496354,-2012843006,-352311778,640059396,-387698176,46269489,67495936,648021362,-387698176,1438843937,-974590837,545896451,2126829710,37349380,642974880,10585480,642974369,-1593424503,-1993977088,-23002555,1166616146,1392288004,184912166]},{"sector":3,"length":512,"data":[-402295616,1173029239,-1929378631,-61687242,-1379892052,1364592244,1582944511,1558770146,26273793,-402541848,-1960443388,1392288517,71666470,642973347,-1560132213,-1960422656,44238405,-2054543789,77725857,35448915,1560498408,1442841794,-2144979571,57933884,637826445,-1993997175,-1017249188,-853933896,1964653584,-1211397283,1961691648,-774010342,-1948003869,642942599,-1962654327,642943111,-1979300471,-788482087,-1948003869,642942599,-2020932215,-1993977208,11534917,-1571635038,-1012772163,639470930,67575,1569524341,133637636,175374337,509734,-1022966272,113704786,-1023388998,313790643,-75493171,-1205570544,512557060,-511618438,-654114562,1659379595,29620223,-972589824,5423110,113640939,-973057341,5422342,64273091,1912623336,178185,-402652485,113704761,-1023388992,-402410310,829554745,-385876039,551748139,-1964197198,1893826760,-1157545544,-109051900,-1206684592,-109051711,-1207405552,65732673,-1157627464,-85458943,-1022966018,-1329397678,-331158001,1722867850,16824814,-2031288606,-58659104,-117345178,2105747139,796131332,1803386918,638219444,16926199,-350194688,1173825032,1962934530,93005334,71665446,637896998,637683083,637945223,-1023261303,75334438,-1172474880,-148503628,67141,-726006923,-6821885,-1070396813,71665958,105220390,-400716349,1569521671,124932,133637827,242483204,1388709517,-1207872792,427032608,-148497685,1946161159]},{"sector":4,"length":512,"data":[12079891,-2129605265,-1202309125,1968898560,118040067,509040323,-561056205,-1929117506,-1866921859,-51785472,1595909619,106414942,1389706948,503679526,-650212089,571730,-1924157710,726849798,-1947741704,1012064645,1007776784,1343058992,1391527565,1476454120,279970421,-2010751225,-1023368827,119473694,100080048,812908572,106256208,-1223610184,-838880768,1599932176,1958936152,1354926619,-927342090,1992375040,22984970,58114363,-1996386119,1476435597,10192264,11077003,-1207471102,281898756,547959531,-1977650176,71061829,121373810,-1115679627,1965817996,-2129654782,8671869,537662069,1166675691,-142662575,1946173445,4712451,10126728,12255412,1803387056,-1223789388,1006810296,1007055872,-1274907646,-1599764479,-1734506240,-150949888,1946157573,-1585056247,41226240,-2054619216,1166737570,-401241240,-2054617159,-1195179876,-1064435648,6660134,263193256,128975477,106387139,1036318859,-964431733,3964932,1957036916,1583286264,-1162193213,871467779,-2136412965,326499296,-319107445,-511662013,-1962380038,-1471943474,-67444608,707052382,707013156,17236481,1296976215,16797249,1381040128,102651734,-1979812097,1506016862,-1979818357,520617550,1499094623,119428035,1526726888,-642258047,-1801482706,1539541977,-1957340989,509040364,-521601968,-661892865,58048523,-972100615,50340102,2098942,7819,-1664919304,198741072,-29592384,1962942478,473858870,125108224]},{"sector":5,"length":512,"data":[1982083,-30903296,1392517126,1448432209,-16376233,117447710,1566465823,-27567782,-956293106,7174,503760640,1476395008,1595890077,-1018077858,138811,1200293236,-402199796,1200162406,507233036,91488258,-351385717,107210758,-1022474359,-2134341039,141885689,234873832,971710464,-2130704456,-1275059138,-1341426429,691961869,41163008,-109049936,-1977715710,-2134049056,419440958,116855668,262178,116853620,2097186,12059509,-2117904122,1426125036,-437719925,39291646,-1023535318,2123171606,-1274574254,65065216,71797496,2828022,741786910,-1963982080,-1977678780,-896924313,-1410137931,-189348578,-1928915456,503710334,1475839751,-4652880,1336865535,734497625,-2013688895,-1073018889,-930407820,1917909379,5290243,-1527529077,41308220,-1036365648,-1031142794,172460063,518244491,-1040000778,117631185,2123227345,519570258,1988960022,-125400574,-492133376,-1927929860,-11513274,939459191,-402163713,1256718351,-998154754,113377520,-352210944,-2097106942,-1957361428,-31004436,-1979431288,1177161798,-2000617970,2139097158,141885728,-402108790,1508573285,-1978906998,1317670486,13363208,168187528,1378186688,-1274132854,-991899392,-956099970,1996443654,209125134,17071744,31982964,-401282300,267060289,-503962959,-1962921979,105810648,-1979704088,1317668422,2127047176,139364360,-351386112,-38016857,147096413,-1610609982,1183318049,-1979665150,1193937990,139954695]},{"sector":6,"length":512,"data":[-33138902,-1964837182,1462373974,50378246,-1948200510,-268234121,-787589494,310297826,2122381827,108265732,102692743,1190528799,175374594,33703670,-1510798220,417861355,-85810176,-391903509,-85852145,17071744,-142145932,119473694,75399363,1191343105,-1966913853,-1342130479,-327040256,-1957363552,-48043796,1006913418,-385649408,653656302,100859947,-259325908,773754398,38046208,520316042,105876048,1476451048,1334494346,13756424,-1979548019,50378263,-1963326470,11862607,507628075,3022478,520373386,369452938,-1918110969,1343619654,-16222209,2013202039,-24254455,773754398,-1979414016,1344209252,-402239606,-1973944181,139430596,-1979677976,260702791,705326986,717291201,48812229,-18283832,38178253,-906080234,108527441,-402163713,1183710795,-11528702,-973207433,-11416186,954730359,22514430,773754398,91523584,56048159,-964022665,-402239606,1334444079,2746376,369247885,105351760,-397258672,1183710731,-1974462974,1347422279,-33691566,-840187138,1576809704,10536065,41848259,-506396491,1737160963,92878341,-326412861,-1090778136,2000224304,-1962183402,379786311,340035840,2139818475,340232982,-2095823479,1966085247,373787403,-1996483421,166401604,-1961590901,1166612039,541574678,-69474304,-1957248163,-1962933730,-2097146826,192164094,35683456,1955267956,1005644566,-400853794,-823591858,239569154,512351883,1200291842,47573004,-401717365]},{"sector":7,"length":512,"data":[-1017249060,10677377,-387151019,1334508424,-1979665144,11929175,-1958622677,1200231031,38176775,973227658,1064765767,369378957,142081872,41353042,-1946343704,734145478,-11526462,-11401097,417858166,75402749,-100402685,371128199,1464928031,1499375091,-251453690,1191112963,-390468862,-2124547275,-1023368508,-387151019,1468726044,-1979664888,11863631,-1975332565,653657927,-1056767960,-125050671,788110,705253258,-1040316593,681574581,-788483072,309824480,294528,1204168564,-167050976,-1957343628,-2097143506,1364198605,1048627851,1459617830,1593932264,56449113,-337911048,541574703,1962281730,119408167,1442285343,556698406,147686144,-896839344,641630246,-397017088,1499332938,-268214952,520544738,-385957912,-1034028395,2139095042,175374880,35669958,-385948184,-2134638936,1946230911,-19339254,18892742,-1006725144,10546305,-387151019,548469336,-1190434934,118882384,1459781261,-1973441549,1468662607,-20305407,369145281,41418583,-397264897,-1023476737,126611938,990660489,1962934814,22669315,1576675560,10536065,-2146209085,1963008127,310346509,-955812608,184550406,1925445888,310346509,-955812608,184550406,-1983645440,-1996488162,-1996483554,-1996483042,-1996488674,1602819167,1280099094,1374456661,102651734,-485601653,2203691,1183384588,201756162,105286144,2631414,-2146941438,-523173676,1048639627,-989855706,1854605942,5302274,1583292167,1145331033]},{"sector":8,"length":512,"data":[1275071170,-326412980,509040209,240028422,564145123,-1995961344,2126774854,105286154,2631414,-2146941438,-523173676,1048637579,-1912602586,-1962931170,199754350,1595868928,1146968414,705092,-149916334,1946157509,46528313,-214535168,-1169167451,-973667366,829685761,181751,-319148428,-76363568,1942540524,-486824453,-147854351,1946159301,-973650431,24379396,-286735545,-353852161,-335879425,-1841131,-925831942,-789775502,-1527024696,-2889477,-1017450782,-1269673645,-855591165,1522699024,1405311833,62149201,281870519,378257803,451412002,1532582400,-1957538877,-1224559408,1511050496,-1957575845,-855526200,-138192624,1946157506,101137674,213390197,-150017269,1946157762,6765832,129500021,-1125596410,71732216,-1159180282,-120067852,-402652478,192149675,-1072965492,28837237,-1593185536,113704964,4,-1007109912,1945669352,198741003,-1207601728,65732609,-402651999,-389810015,1114830967,184829579,-1207732800,-661979088,1912614973,436615956,755921664,582549552,-137219328,1959922673,67553032,-352319744,545226773,-955747072,83887110,-1593316608,512294912,1458044928,180984,-386389272,561184227,294784,113707125,589828,1183454187,1979661316,88574467,108956496,-420980986,-131602184,-402651966,108263419,-369098821,1317667145,-1966473708,-838987154,-32483702,242649802,681692926,1942501888,1944861218,1926314526,1943026202,1928673814,1945385490]}]],[[{"sector":1,"length":512,"data":[209616910,974418944,973370570,-955484690,50332678,-17664,1359020265,2756234,817561781,583238400,2129792,-169734284,67553113,-1157627392,-555089921,75399168,1496019968,717392465,-1967063359,-18535706,-773523772,235834336,101591808,1942502144,113727757,262148,-369098821,-919404371,294528,243992692,100728838,1334378502,-1983892718,1183453255,71796748,-2012592502,1183450439,189237256,105875801,-2146936951,1946158207,-20840952,-20250939,-1995470386,1049297495,2139684884,340248342,1048772656,1966080022,371099912,1142851840,822051584,1569260404,2001172,337545472,1176406272,541574656,172475905,75399168,-2145881088,1946158207,92241929,-402426625,2139158892,57999115,-1946407448,206014727,-1979863832,1183452743,-146479098,-1961998455,-154408765,-402648382,695400095,1966144387,67553032,-352319744,545226780,-2146011902,1962935422,1342287880,-335860248,-62003192,-756546702,-157816581,-402652478,1064498795,1318539,1949367171,545226780,1393390850,7817,1128191,1543482600,2115526,-350855285,-64755489,-1560274271,2122317830,192151556,532107,-1803040978,-1593835303,113704964,4,-1024047896,417857538,-70129418,2013204338,71731984,-1070379002,-1645719472,-165156864,-402652478,-1259801093,-1977453829,-1040838577,-2147126260,65734857,-1978873472,-1957624722,1342572102,-16222465,1843923574,-168302592,-402650942,-2065107509,-15633669]},{"sector":2,"length":512,"data":[1183515766,-11532794,1996425334,5171210,-1024075544,1200226312,105265154,527863952,1948304118,105285646,1187483792,-1879048190,-1976898672,105285639,1191088272,-1970237436,1178075975,1989185540,281212436,1200228980,71731201,99324048,-1878767992,-327040112,-1957363540,-181475092,12097163,11845316,1963246326,146994693,-1185473419,-1070399489,-1957122318,1237855183,11046537,11175561,11306636,-1977216277,1206727181,11046537,11189897,11306636,1963508470,79885835,-897579403,192383500,-1024016334,-1342016508,146994689,34341492,-167763550,57934530,-385949056,1720251746,105285636,-2037772405,-1073086286,-922876044,1183368450,-1333360124,1958742528,46726663,105285825,973358730,58065735,973358728,-2013039675,1183450182,38222342,1183318902,1942043142,105285635,11044491,-1962785143,-1073020346,1542128501,38767248,839274026,-935640595,-930413962,-1228595631,118882474,-1979154803,-466483642,-133963567,1946469110,-1024023551,-1979485176,-253580602,11187849,-1927915233,-1974466490,-1056831930,-11482882,1996424822,-169482236,688279040,-1914174898,-157488130,192152002,-1979431170,105285639,-151094296,309658306,-1979300214,1200161894,35535628,-402426624,-286721249,-998154765,180486316,-200939520,1928969960,276299537,100943499,108461904,-402098433,317259400,443124,-326412861,512428779,-472820978,-1755932673,-11333983,189992462,-1346112,-11336170,-11335658]},{"sector":3,"length":512,"data":[-11335146,-957873034,-1017292518,0,-1892810752,786828294,-435282292,705072892,8437248,-1406737358,-2017096640,915117014,-964493276,112898,2899584,-1911459325,-1962924538,847229438,-475073856,2146533494,-1207767933,-1023213567,-31080189,737971199,-1956613384,-1899983641,-1898935080,-213298752,-1430244700,-225976946,-1014244985,-398208885,125239321,317210738,1022981888,1007186976,1006924813,854095113,199551936,1107784896,1975519914,-528071935,-470171598,743025685,68121634,1968978978,574390279,1236009589,-373033461,56171344,512634570,512353806,54722590,-1946907685,1928014828,-1981445146,-486531026,7768334,906151299,-524285268,871396602,4622784,203882286,604933094,1206407424,-125085439,611631115,-1912136162,855647774,-1527513866,116951839,2635519,-2097075736,-661978428,2269959,58048523,857400297,-17984,-1014808695,648999426,-193657544,1438844809,1048833163,1965052686,112645,1183520235,236882692,-1981558445,-6859129,861081094,1560341440,-326412861,2123061078,105220868,999790755,-955746873,9934854,-1961825536,512427125,2005505944,-1751604988,1594246281,1438866782,1465314443,-1962639733,86574662,-150784629,1074153099,2089354377,-1751736062,108382011,-1751763319,-24442645,-1996063229,-963968395,-352320507,1566465792,-326412861,71732054,-14298573,14844415,-397389312,1499005177,-24907637,855930367,-1592202304,1149867926,71731970]},{"sector":4,"length":512,"data":[-1996191424,-1583901130,67475350,1577118464,-1957313699,1183536876,634532612,-494796801,1347551232,1493220584,-2081387687,74842110,367771699,-1751501175,-1751763319,1074022027,-963967863,-352320507,-1017291264,1458342741,75402071,91553547,1995767683,-339725564,96963418,-131792885,-2080863233,9935422,-396949643,-346423396,-1741255870,197561239,-1959693120,-2083026172,-1036310334,1448544626,1509886184,-1960514727,1925659396,-857188850,83843582,67487371,-1961825536,909837940,-814377064,-14817193,1593895769,1438866782,1183575179,-2116777212,989921514,-1559792702,-1070399440,113708011,524334,-335544392,1438866688,1183575179,106334980,3147267,-1962880381,12681672,13796097,175493643,108252219,3147399,113708011,524334,-335544392,1438866688,1996483723,-6297596,1560341337,-326412861,-1727773045,-1293397934,-337277953,197352704,-150110775,-2083391533,-779943485,-1876038912,74695427,268485249,78768522,-184359470,-388765558,-980758525,-889188571,209570059,-772287497,-2097036413,-722796335,74695467,268495489,78772618,-617420846,-393555157,-805050157,254133642,-1974351104,-754667032,-1966079000,-740062523,-888972821,254139530,266568448,41275707,1456194363,-1064988010,-470351244,1958774161,65468164,-470313272,-882978557,1458342741,2123103319,-1962467836,-1178586409,-1359806465,-1946192499,-4651394,-139529473,-2013713455,29816823,-1543343104,-202780343,-1543408731]},{"sector":5,"length":512,"data":[15450763,-1017291169,1458342741,-1979418997,-956889506,158597121,1958951596,1958748697,-1019564783,-1071509132,-482736012,-467531660,-1070338187,-1924790549,15466052,1438866782,1465314443,-1946417378,-1070463874,-218103879,-138310738,15419600,-1017291169,1458342741,-1898410921,-1070334784,2123094155,855083782,-17984,-772296974,1988886155,-1968770300,1569390404,-339530753,1566465792,-326412861,119428950,108956668,-1070401653,-218103879,-1949173842,-1527577474,-352041333,1566465792,-326412861,119428950,-1962639733,1183450702,-52393464,116727,165872756,-372160086,24357875,1566465962,-326412861,-16353537,1996425334,-3545084,1183573387,1560341252,-326412861,119428950,990135947,108201542,112893,872154091,74877888,-1962508661,-1073018802,-251459980,1341719374,116727,300090484,-265598556,-372115413,91465203,-133959677,1583348900,-1957313699,142016492,-16484609,-1461189002,-1947890689,15402054,-1957313699,-852839188,73304865,1586171785,39291140,-1957313699,-852708116,73304865,1586171785,39291140,-1957313699,49054700,2123061078,185015812,-1340443393,-1188722176,-218300417,1238497198,1049299828,-16056286,1979612809,-339725557,-28933332,-25261310,-16040565,92991348,-378224630,-378150854,964745611,-1948093123,-1494023050,-646591609,-339244217,-1956749568,1438866917,901049483,-855357814,-1933341919,1560341442,-326412861,1183458740,1455758852,522308870,1397801821]},{"sector":6,"length":512,"data":[503730769,777344854,36445838,-997462901,-6840669,1996424310,276233984,620906123,-11534081,-1952998378,273058277,526278493,1532582407,-1957310632,71732204,244817059,1357643448,1342186680,-1946180888,1438866917,1465314443,-1962654069,1570217510,119496287,1146837338,1583337284,-1957313699,861361900,-1070378816,5552208,37152848,-1962490749,780862534,-981231714,-2132440294,1526797390,1600019033,-821616803,-1017291169,233556275,-352321095,178440,62456811,1465275648,-108270453,-1962260853,1586170966,273582862,141936907,1769263627,1702157067,116727,-771023755,-621344135,-628893449,214926080,175753483,-604513801,-2097096317,-376765193,1459626169,-164364493,-757997359,-674113839,192085307,-214236041,-215284366,-499057381,-1007199257,108265474,-678705525,-1007162415,125042692,-654845193,1593891459,147479902,-135006464,1946157767,868387586,-2131956782,275976441,-522987381,-638131501,-753876608,-875361301,-1961825920,-742378544,-108999710,-1961856240,-739716134,-2133199126,-472706879,-2134129909,-1031073559,-388771277,-326412853,119428950,-812924276,-66814325,-1425783155,-1666461556,-930305192,38177707,4623275,-1413379157,-1951677813,-661869626,868388523,1593895872,1438866782,1465314443,-2096734581,-746388997,74877696,344894972,-1381113717,-1387221680,-393499312,-1376220243,-1901215602,-1947170020,1583337411,-1957313699,-1940433172,-54489384,-1962508661,138841079,501467275]},{"sector":7,"length":512,"data":[-1070409589,-651448590,-24392821,-217811317,-12285274,855596426,737970916,1593895875,1438866782,1465314443,-352026997,108432150,92933099,74777658,283887499,3964998,-2142769035,-445317059,15450163,-1017291169,-2081649835,1979647102,-18427,1183457771,-1962888188,294123224,208929875,-1274788214,2098432,132844011,-1274788214,1560341248,-326412861,-16482685,-4717195,-1977488385,11797574,-2013865845,1946702609,71731724,-536543052,-351671297,71731719,15401140,-1957313699,-1973987604,1183450214,106334984,15409613,-1017291169,-13371853,989858491,-150572077,-336427021,2144539,-757997359,-674113839,74841989,108196667,-545000661,-387825664,-970523453,-315424763,-636757877,-396947596,-2090860606,-1993985850,-347781323,1978469355,96937479,1162281008,-81011317,638184267,-2044328566,1263249921,197391743,638548434,1194132934,-789064969,-2097151739,-1309998894,1458342741,1187257943,-993883126,-1595406722,1583292415,576093,1458342741,-768401833,-1962508604,-1998058938,1583292415,445021,1458342741,2126782039,172395270,-5511015,1566465823,1426065098,1465314443,2126838814,175016710,-1325398854,-1949969660,266568669,39356298,-277525846,531234992,-899850657,-1957363706,1381061612,102651734,-1054535219,81152,1183532661,1958742532,989626431,431229300,413850,604302080,1010904287,858355457,650546934,84158090,477421626,-1202696186,-661774199,7134362]},{"sector":8,"length":512,"data":[1488980736,637957127,-351992670,32241923,1595869176,1532582494,180829,-1706819400,1616,1971372790,1071808526,-1237204352,-2115481030,-134091777,105945795,745668608,-1957538992,1140898008,413850,-2134706688,-1023994252,276037643,1352285876,1509949446,95967323,82573568,-128427174,-1707166525,1616,-326412861,505304918,-15704379,-13440969,-745862286,-398655304,1931476907,112645,-661969429,504254091,-1274652987,170559,1931415417,-4069368,-352320840,176080138,-1259862647,532689919,-899850657,-1957363698,509040364,207537438,-437766145,-1962118402,-1261882413,-10622916,-1207602401,971702273,1317787787,106349834,43663540,1913616640,1959275284,225790232,-1706819400,1616,1971372790,-10360824,-352320840,-10885108,62391667,855829248,1583292352,707165,1458342741,1589976663,-398983418,192085636,1102369675,413850,-1207602432,48955393,1595916339,80371038,-326413056,-987867306,2126775894,905913866,1929271272,-1705593847,1616,28837235,855829248,1583292352,576093,1458342741,1589976663,-398983418,208862768,12112779,105945667,74645504,49004595,1595916683,80371038,-326413056,-1273079978,105945647,-1014300672,106874142,1200359305,1595875074,80371038,-326413056,505304918,-1274652987,105945626,522125312,-899850657,-1957363708,509040364,-2147068278,57827834,-1239356800,1106935866,481567858,1089110098,413850,-12822016]}]],[[{"sector":1,"length":512,"data":[-397273996,242417072,-1270748544,105945614,-1070399488,-239598613,1583292415,182877,-1273079978,105945625,1090781184,-883007713,-1962467753,-1070400264,-218103879,-947171410,1547486047,792461940,-326412861,-987867306,-397408698,1213923290,-96733045,92933494,1979703272,-8552442,1191277882,96865674,-2454784,-46208969,1912603064,-1707363315,1616,-1070398350,-654900501,1595870600,80371038,-326413056,-987867306,126486110,427081738,1979685864,553820165,1631324907,2050754674,539755639,-347928696,1583292385,313949,1458342741,2126782039,96871942,172395008,158711818,1352276404,67108870,-1261401535,-840413126,112892,915232370,372923778,309616066,1573000840,1089110098,1352288180,1509949446,-947701134,-1392748797,1958742698,1610148610,-2013007997,21350165,1461607482,-83696230,-389575922,-125042942,-385923702,12123916,-1609862144,11804930,48956809,1595922679,113925470,-326413056,-987867306,1720322654,1977879048,-398983414,28900436,-1961659904,105810899,-1706113920,1616,-1070398350,-654900501,1566465823,1426065610,1465314443,-1547685090,1789067880,106874114,501757951,-1958710532,1023457491,1929156328,-1193768138,1352287232,-167772154,91521218,-335759640,545896482,45668494,868823874,105945810,124911616,-1996330845,-402494954,28900503,855829248,1583292352,313949,1430580355,1465314443,1247724830,-1041745921,-1955237125,989626375,431229812]},{"sector":2,"length":512,"data":[413850,-1270807552,-1994451398,1187381830,1988975620,-2133816827,1202995434,413850,-985042432,-1031058858,1224607208,1065408651,-1976273862,-32839673,-633664907,2139105652,594819839,126498815,1979578344,509443,1352285108,-1895825402,370242055,39226655,1352285108,-1207959546,48955393,1595916339,-998023842,313924,1458342741,1589976663,-398983416,28900144,-1960414720,105286355,208929596,-1595392588,1025012731,292880386,425600,-919401612,1352285364,1929379846,534312706,-899850657,-1957363706,509040364,-402235765,57867094,536584936,-899850657,-1957363710,509040364,-401842549,-71763138,-1961790721,1455752782,-1707101176,259588098,-654900621,1566465823,1426065610,1465314443,207522590,-1191504408,292749307,-989442421,1085540438,2030043802,-150834417,1583292376,576093,1458342741,1586175575,-85137396,1451954290,172919560,-1274657142,105945666,1595867136,147479902,-326413056,-1910614186,-1090508282,1992622209,-53923066,1958742700,-348018172,-1441943305,-2146531290,-1105263104,1556021377,687978496,1824465357,687978496,1595875789,80371038,705072640,782312960,1412211456,3186982,-1017893213,2754190,643050657,-1593823581,-1557769170,1438842928,1465314443,508826811,-1946449145,-67098090,-1426053471,-1426030408,-1196703093,-1951727524,1824041922,-1031034112,775356331,808910592,707168512,1378257748,106349885,-850722376,545896993,-1896162674,707169234,1352465236]},{"sector":3,"length":512,"data":[567095476,171820166,-1911390974,-1593824762,-1557790674,815857710,815998464,-1885513728,-1895813114,1912614406,-10622968,-352321352,-21458414,49971455,-55572108,1946745472,1610264578,80371038,-326413056,1187272534,1411818250,1411909260,-1559869756,109859874,646534180,646665258,1451965778,242649872,567104948,-1961867634,-1557787066,646643714,82334762,1566466047,1426066634,1370773334,132653517,707168767,378468948,646665252,-990161886,106178054,-1898213808,168216515,-1946060800,-889189362,-1910470216,-795936040,1412048523,-850545413,1566465825,1465275851,567103924,189537929,76824260,-1178586116,-1410138105,-1414806645,-1420548447,-1420547935,-1582606180,-1582607326,-1901374428,113714883,31916042,202279974,463098624,-1962934258,-1275057634,-954086064,40740870,189571328,1593839621,-1194631842,-661774199,-1949266182,-79867354,567102900,270441040,-1070395519,-1710535517,3552,-1957210539,185289758,-399149861,646577734,-1014082518,168216358,637677824,790156,567103668,-850657096,545896481,-1896163186,707169232,513473364,856654096,189572032,1839728327,1583284227,-58668195,-2147126209,158679292,1037601872,1935187968,105945606,1439367168,503732054,-1662219438,545897212,512678542,378208298,-360644606,-628224000,855670468,-2131678218,91504636,-352310808,-372158199,-207355533,-768386651,-1700933333,1616,2126838940,737555200,583921,119495325,-883073441]},{"sector":4,"length":512,"data":[-372158128,-1977218701,1149805573,638182399,-1985673845,-136118716,1388533849,-1202577914,-1706033149,251331784,190449660,-1020363584,-1705900462,6147,190449660,-955616064,6922758,8435712,503730883,1354773330,-83572582,1510472718,24952843,1030595,1962933821,899347,1962933309,9615627,1962933053,964867,1256833419,-2131001074,-1274711040,-64893634,-1705900349,6274,-2117924868,1962967291,-73791991,-67108841,12108551,-64893609,-2117877365,1962967291,1772266244,-1949660221,1107343568,-1006886451,-75415069,779419776,454565515,1772232235,-885313162,-880082314,102651734,-1030817653,-982932831,52103734,-205419536,1595869092,-1576664738,-1910586519,-1261401126,-64893633,855798559,1460061120,12446618,-1022886912,721426408,1030333446,225574917,1772357121,94000902,-67108675,-628309241,-1912586056,7119320,1455676046,-1380385705,223733761,856388584,1839637184,-1553094493,-828150324,1842652013,-1553082717,-56398352,1845404525,-1553071965,144928262,1846190702,-1553068381,648244752,1848156526,-1200770397,-492595970,1843700589,1843398343,113734592,-2084540846,1843791559,1709731776,1077837824,1434255470,1847723766,-1337035775,570881537,41222766,-1499331920,-1475950739,-352321171,-1270971589,343175021,1843543691,-1795227775,1049168500,512454074,495545942,-2086371352,7210558,-692451724,-1541347218,1846034051,-1173982208,333999910,177334436,1594668776,82365278]},{"sector":5,"length":512,"data":[-1547685109,1084386870,1849860718,-1553049437,1554214490,1851695982,-1553047389,1688432226,1840423278,-1586616157,1419996754,1007076974,113641070,-1341690306,605457156,638976878,-1568413586,1847858827,-392098328,922722672,-492737052,1843700589,-392464920,116824320,1965059618,977174540,91506542,-352316696,7923715,-1553092959,110063046,1474915812,1074185889,1035009902,1972926184,-1781798872,-402599704,229677256,1972922088,-402542575,313563289,1956141800,-401690380,347117709,-342325016,1024704267,-1394079970,10741909,-402589720,-236446813,50915330,-393217048,2045254598,81127427,-1469177184,-1475578879,-402295806,65767140,-1014633496,1849689798,-397955071,1659410501,6809749,-1332191256,-1741166572,854078128,11462808,-400860440,1721827855,1848943470,1849689798,-399527934,-1779918823,41609216,-2145698072,510540350,-2048391819,-1341789438,-1744836569,-402483736,1407750024,44886043,-1610415128,52719138,58000188,864366056,1848288192,-1553060701,-1195151826,-1226309568,2144521,-1410088909,171870502,1049175552,1085800486,-1806112768,1852194500,138316070,571392,647260136,1493321670,1848655497,866893964,-1414812736,644732577,-1946155869,-1200761338,1857748996,158591086,-1409286216,243385259,-2147455448,1852311182,1848116983,108267520,672039718,-1960443392,637536318,-1224516214,1099638272,1848812298,1849048707,-2146274048,40779838,465505140,-402186691,1558746223,-397824000]},{"sector":6,"length":512,"data":[1973196543,-1806440432,-402632984,313562960,1956048616,6678768,1852311182,-402411544,1973223556,-401297403,110008081,-1960415640,637536318,-1224516214,1848811776,172067110,1849048707,638219520,638089611,-1224516214,1099638272,1849205508,571587,647206888,1493321670,1848653451,73173286,1848655497,1848784523,108366118,1848778377,1745260227,77669998,1842782976,-1912001048,-1586599930,-1557762604,109838340,244018644,378236358,719875528,244040448,378236360,518548934,1745260032,77669998,1842651904,-1911999000,-1586599930,-1557762602,109838340,868445654,1842782683,-1593817624,1072197076,-1878618624,-335596690,221849103,-1993997451,1569334805,58297602,1854815803,-1899762827,1049306816,-1977221112,958792541,74777673,72452390,142183206,-361365749,303398,-613040117,3008707,1712243998,915089006,-836042742,-768349743,63099309,200925904,1241609682,540299,-1224516214,106006784,2877471,-919381309,1852311182,138316582,1569334784,-1929332989,-14285703,-953788619,1090519045,75336486,-445251829,1524825937,-1893310631,-335355,-1878618398,868234094,-335596581,92874250,39684646,990083469,1970179646,110019568,-1960415640,637536830,67437963,124512256,641632550,-1070349568,-395449181,109980835,-1557762448,1990262786,10692206,544270592,1849310848,-1962052335,997057086,1970136126,-81860343,-385851720,179833053,148367616,627976353,3998464,504984835]},{"sector":7,"length":512,"data":[1852317326,669323,2506379,-1048376181,-217637372,334176164,1852311182,2531622,644769443,637536929,-1912592733,644769798,671371,-787641562,882983401,-1958262930,529213151,-109848517,-501380826,1721877488,1845887854,53047918,1919841798,2114323235,52261486,1919845894,-1912208617,51475054,1919849990,-1643773173,1023767150,108199920,-385844296,-51902395,1715389694,1049175662,-987889652,862875150,-1644435210,1049175583,-987889650,862877198,-1645483786,1049175583,-987889648,862879246,-1646532362,1049175583,-987889646,862881294,-1647580938,1049175583,-987889644,862883342,-1648629514,1049175583,-987889642,862885390,-1649678090,1049175583,-987889640,862887438,-1650726666,1715374367,9693294,-1374763746,8448110,1857069855,-1240546018,7661678,1857594143,-1106328290,6875246,1858118431,-972110562,6088814,1858642719,1841694348,1852311182,444198,642798592,132807,1721841237,446899822,1856938240,1876774,644789921,-1593827677,-1557762370,-962527200,581117550,1851302144,2401062,91139745,78708751,-1029445421,1851302253,1857422851,-1016216413,-13371853,-1510741551,-1952185997,-2082867249,-1070395423,-1064523021,-271383375,-946931709,1745260227,1857069422,3318566,644790433,-1593822045,-1557762368,-928972746,950216302,-1960393984,637536318,-1224516214,650284032,637817225,185104779,104232191,63406935,637546472,540299,56461862,-1960443721,-1031010751]},{"sector":8,"length":512,"data":[-1977219233,11993949,105483046,108382475,104958246,-1053047317,-947666572,-1957313789,-353598996,-1233744640,-1583606040,79392214,-1233744640,1946253800,1842651427,-1929378629,1810413174,639661313,540299,56461862,-2094661449,-1207957895,57933892,-1929296151,119453310,-1593420055,112946602,-1233744640,1963015656,1842651431,303910,1842611852,-1191228440,-680198074,644732577,263815,-1938959197,862836230,16443903,-1917421939,-385915202,-1070359604,116838539,1946447394,67221530,-10054003,-1986251288,-1769081274,-991363226,67063,-1996434813,1451883590,1975651326,1723239758,381586943,-1685985025,-1920826440,-385935722,-1769104378,-1729560810,1086465015,-1232267915,-1097990298,1625882390,75741339,-15296883,-1919162904,-385935690,1988952256,19720374,1962849256,4634714,-1912652567,-1912641866,-385935682,-2085053645,378965378,-1682380545,1847723766,-1925155832,-385935722,17168195,13796096,-1980217719,1177287254,-27911172,-1232263822,1911095062,-1233744640,-1962877464,1452013638,15919354,1508379253,-402295298,334168422,-1962854168,-1769081274,-1511456922,-1233744639,-1929333272,-385935690,109969790,-1993970218,855650366,782444224,-499217664,-144381843,-1017256565,477413387,-1960394610,-2097149890,210371527,-1958613710,-1951992874,637957362,-521468021,-1957313720,1156350956,-1946257783,-162469674,-1912846711,-628310970,-1962917703,-806814626,4210166,2122401141,1968198844,-1099005634]}]],[[{"sector":1,"length":512,"data":[930428501,-388610421,-1014103333,-1946140488,-699495486,1586219051,-156964612,867989133,4241919,1586210035,-162404100,644732065,-1946155869,-1955736570,-1195155995,1451950152,75753982,138316582,63406848,-315487094,-1494002111,-1023314594,-1962916424,-385409282,-1957362597,1424786412,-1979955575,-1960378794,637539902,-1224254070,142183680,406731558,103838720,130515799,-391350643,123705820,-1339717082,-1403613952,-1919265304,-387404714,67061,989909635,-948765098,1178273143,-1950320900,-1950130715,-1955739634,-395459050,110033421,-1591317048,-727515132,446768749,984320,-388823887,-1056718452,-1016215389,520082664,-972648954,-164421779,244055859,-1561853926,-1591337063,251985946,-754667264,63016168,1841734593,644732577,-1946155869,-1016211962,1843412619,-2089746559,-396948873,1049205055,-1017156128,-385871176,703071133,1848025856,1847858825,1847725696,-155260893,-1912591384,644732422,83892897,78708751,-1047729965,-962346749,780387181,-1190367800,582877364,-1895877778,-210909178,-1262894172,-1074384128,119434786,1841831566,520529139,1841825411,1465303820,204323068,-402454808,-1070399196,-1553095006,-1432130136,1842783085,-1553067869,1048604216,1962949904,16824336,-1996418840,-1586623458,-1365021242,605457261,-194189202,-397158261,-2141457207,4001854,480448373,504793454,-972125330,537823597,470170478,994866542,1970150934,1847632198,-395458909,-2065169860,1048651508,1347682304]},{"sector":2,"length":512,"data":[-2128203403,1426063934,-1943505610,3926211,644721313,-1946155357,-1905415674,-971097149,-2133428883,4001854,512296053,1491627438,-1207047424,378208328,-1964413404,-1709512702,1024460486,40495104,650862175,-402646367,-1993998291,637547038,-402645855,-1993998303,637547550,-402645343,-1993998315,637548062,-402644831,-1993998327,637548574,83894945,78708751,-670832429,1839899075,-1107294533,468204827,47357,-1557785227,-1960443900,637536318,-1224516214,1099703808,-1547662332,950234582,-1365130386,1841734509,-1553092447,96693704,78708751,512485587,-670863930,1841831483,28837494,32499968,1841700489,-522987477,984515,-388823887,1841831563,507238443,108228038,-385875528,512295373,-523014712,1025687235,510551743,-1413467385,-1418869087,-1515470797,1859583873,-1144787083,65760870,-999371077,1925645119,990349576,125240391,105352131,1023512809,-176685072,1465274961,33601542,326567739,4055249,1005941280,84440839,-143450112,738193592,78709831,378267859,371944904,-1036292666,-1031074442,1191436499,1913076484,29526837,-1955740154,31642576,-745864105,-2089888069,-633665301,-987883916,64982031,868716280,-385928202,18847481,-471137721,1516134151,28885849,18082048,-1553045343,-692359738,-938046610,149652333,251987851,-1039104,-1325119607,736678660,264576720,-164380018,-1159135437,1468604310,1727758594,-1982433938,-1016215530,-1318137183,65590020,-1553018874]},{"sector":3,"length":512,"data":[1723559368,-971601042,264576621,-164380018,-2098659533,1468604310,84380418,78708751,-805050157,-2130132093,1970198267,-971601444,110019437,-928944698,-971601043,1958882157,268451113,-4717710,-754667249,868781024,-397323328,89191018,78708751,100788435,1498967494,1958820699,28885965,-1872958720,1847867019,1349441215,1486218984,-395389254,-692414866,-241964946,-1016199517,512219955,-387355130,1024566257,-1264336845,1840685933,-1553090397,-1990693446,-1989291994,-9579986,285657056,-1023410115,510621375,1870052871,-397355381,-1990683228,-1955743722,-482537202,-802780385,-768701587,-1554968979,-930386508,-482232642,-1073042425,-102565003,1840658057,-61385013,1839611520,-1207339776,-105185281,19393023,-2147354904,40740414,512435060,2062052782,1864808449,1872384030,185553920,-385649216,-397410115,-1202060959,-85327873,671545088,1946189934,268879365,512426301,-1014796758,-754667249,69075947,203293550,281248622,728608929,990278339,1936600070,-18423,-369099590,104530113,58093102,57552545,384324568,44113409,201720686,1049966,-13385586,-1582579661,-661754408,855639201,504269814,874417664,195359488,535524800,204930907,109990766,-1591317032,100859946,268791308,-1960423424,637537342,637683083,52837771,637537854,-1588591357,100888068,268791308,922701824,161115690,-1710271487,257163661,57544867,-1553071610,516189716,-953782766,247792711,105367334]},{"sector":4,"length":512,"data":[-694091776,1958742893,650153491,637540513,1705531,-1591341963,-370475004,-338654392,110006282,-13406762,1594075112,-466433186,-395463517,516161621,-1960415726,-771026345,1169425524,516188109,-1960415726,-1960432569,-1096602025,-1072264851,1958873965,1037155865,1958742700,-1274660339,-1408797587,-76169206,915009259,1456172470,-1070334889,-1553095006,279145896,-66983826,-1949606305,-1586647010,-668242516,1253359758,-1006886451,1458342741,5367895,-1962522997,-1073018794,-397934220,1583284903,313949,-881979743,-1959338869,-472841121,-1896052853,58048523,-1942122824,183002,1458342741,1586232407,15919114,637959876,1946172800,173968134,1593884904,113925470,238977792,24379502,-1547684925,113733134,1958778110,-345123167,650153564,1457803,-617365453,21334310,123570726,638089613,1588795,-1960382859,-352317890,1032005165,639923455,637957515,1586691,-1960437390,52822620,637539870,98179,1465256309,1501190,-2090967289,992348359,1962938430,77670092,1975520000,-1957313632,1357677548,1846413055,644746913,637618057,11544458,125799760,-391088499,-1923575076,1541976150,-1336504941,1167741522,-1962934113,-1922167266,119451774,-1962933016,868441573,-29979712,-1359052396,1443919758,1586666216,-1073042346,915012469,-782723842,-58226205,-472792178,-1081606349,-16019716,-141874060,1975519916,734432251,-1948808249,731184654,-217637170,-29455964,-1895908460,1846414987]},{"sector":5,"length":512,"data":[41359163,1128466217,1438906082,1465314443,-1961998709,-1360523178,52261376,-999419882,-1993995650,1435051525,108971010,-1207072474,1583349759,838237,-152321997,1458342741,172395351,-1005824373,-1993996674,1435051525,269888258,16902254,-661975182,-1081875503,1962970876,-1950338300,1566466000,-1962932022,1602959068,270412548,1842782574,309641227,992395406,1946167838,77669894,-1192367360,46858239,920423168,855918478,1048651456,1070399488,-1064558988,1846681284,240093990,-1047653661,268843814,638022656,1314443,-1064505621,-1962933558,-345123298,868453924,1049306843,-1960443882,637540366,1946240315,1569334806,142183687,-277481157,69110566,1977289472,-1950090792,103491271,-1960443882,637537854,1056395,-12745946,-1960435852,52823669,1912608822,1144727060,-1961986814,1277896394,637956614,1913146427,147292937,-730465477,-1960393735,1543710237,180781828,-991426589,-489159936,12445945,-102512501,-1960393845,-134206954,-702641213,-1910707347,372975299,242548778,772160294,639005184,2885179,-1960439950,184550430,870348251,-103773248,1049306819,-2094661618,108330813,38087462,-947714702,653257480,637682947,637957515,1586691,723965298,-814611388,1418405462,180781830,1290324107,-936689152,1581971571,39619366,371065638,1200301568,52871937,637537342,52829579,1912606238,1065559587,639464703,637951883,1580547,-1960439182,52822647,637539894,637617291]},{"sector":6,"length":512,"data":[-1022994549,-796147661,179054275,-1744668480,-1971379005,-1012128032,1458342741,570869335,113721454,8416734,1849427654,1040631302,113706862,1874882022,1843529415,-1070361344,-1553055070,-257724902,1275476845,-401509365,208797728,104631078,9300055,116066143,1842742926,109903667,1049194088,1583312384,1053084509,-1960442732,-1960439227,988288085,269888256,-19797906,105918578,637897510,-1006353405,637834302,638731579,638076299,639131019,1964656014,642468615,-1014298743,-1938942301,124655622,-993789864,644747806,618860427,1846545923,-784612978,992349812,1946161174,244000273,-420806642,141934603,172326,-1031011605,-326412861,637856899,50342561,-1989275642,379715142,-62486162,-1946401141,-1318184386,-1981295869,-1936654667,-1986985851,-1986985323,-7273339,-2123490810,-2140267970,641627136,-16040821,-1977206924,11993949,71928358,-1896063349,644749318,1183385483,1200301820,-27882750,1946272246,1468737034,-10229756,1224627849,1846548011,1946023656,1575324571,-1957311549,-61384980,-401230664,2126838047,16967696,-392883009,401091316,20178945,-401842492,-1070398615,189546115,-2145160192,1962935933,155579933,-1005095552,1065362973,-166759929,76877318,1048774773,1962972432,1589921793,126428680,283885619,1840658059,-401834300,1453428373,1941908846,1610144488,248143198,-326413056,1444211843,163118167,-123082730,-401965372,2123169932,712960236,-1006583576,-152566178]},{"sector":7,"length":512,"data":[1676404738,-392883010,1290297222,1049094205,921237383,-339725567,-1237939440,108971117,-1584512792,-1087541674,-125441933,-443851169,576093,-2081649835,1465259244,375372028,-386379032,2126838447,3336198,-387154291,1726491172,639484928,1963474816,1670375442,-1962261109,371919957,-320311792,855960572,-388985920,1583347771,-899816053,-1061289980,3574131,1446414741,-1915885458,1842757251,-385649664,-1967618872,-131077888,-1794242874,268879616,-956301163,194318854,977174528,108335726,-402648344,-2134670172,7223870,-1195179659,48824454,3574776,7399573,809239690,960239986,837293431,-145263984,-1554812198,1474860304,168069632,-398297920,1421577540,637245,611583802,-119389373,846546492,3729478,1922040808,1926952745,146725,305995890,-1558481152,149656850,134301578,1184173574,-1979705880,1975519748,3574206,914998165,-2017956266,-141825792,1958742700,1981824004,-993833225,126494237,1148390460,1081346108,1014238012,192219708,-1928903286,1843923548,1009642385,639071497,-1962784885,260704860,994176306,-1960675640,126372040,-957867029,173837161,-315438966,-466434934,166451203,-1960436284,1552745039,-1957210614,176014579,1583326451,1847239107,-326412853,-956541098,1080959494,1843791559,113668032,-956263154,194318854,108956416,-405601359,-1862875263,510902459,3401735,-1938571080,1566466010,1426064074,1465314443,-1324974453,-2115513597,-1953433913,499385429]},{"sector":8,"length":512,"data":[39815974,371065638,1200301568,1566465793,1426064074,-326898549,417118230,-1962860312,1183385157,641582334,-16040565,-1960440203,-1929377730,468190045,11593989,56461862,-165281609,1947206721,1502291475,1602954759,63144722,-1341850136,99477550,-402432627,-1977219854,11993949,-402359923,1174473982,1300965118,-1334451437,97380392,1360381827,-1977219497,-1960442811,-1960443299,126756413,-1930789239,-397349818,693636432,1586232910,403083006,1963239534,1959922436,532948483,-1981120883,1166805597,639484940,1946238848,105235984,1200236032,121997313,-352285464,1036761862,117734376,1950964063,-399724534,-947714713,-1332155643,90040361,-1795014972,-1951743950,1438866917,-326898549,599283476,3926041,2123233163,-1190715668,-1510801398,-2131984755,1962935933,235337239,91489429,-352295192,269388558,-402267243,65732822,-1006622488,848626238,-1956664640,-1547477531,113743112,16684294,-1795023223,-1794898292,170297688,204376469,-991887467,529147421,-472776910,1504182062,-1206136039,689580313,-652551910,790353690,1377557019,1612472348,-383984356,119339804,269388573,1976109973,639484934,-1006481525,116787805,1948357902,63039753,-400510909,1364395167,-167278042,1117064710,-466483084,72345753,-919403029,1493460456,-1008868773,-1960436284,-1960441737,-1910109601,1284187655,1277896200,499400964,74943270,106924838,-1995993562,38112309,21269030,-1341700728,72214568,-1342175768]}]],[[{"sector":1,"length":512,"data":[71690537,209059665,-16091649,1979647605,-399114494,93323077,-1895676529,1167001157,205885194,283330905,484977840,639484932,16926603,-857011643,-399986493,-919403509,637941188,1090942207,54296614,-1960439435,-620033444,-1960441484,-1910110092,-1947997433,1435175493,1591423756,1962281735,2088773132,91574786,-352319000,-1326652688,63564073,189813585,-1341229861,235337260,41160853,-1259848784,235337219,192155797,-402432883,984613554,1476633320,56396326,1888288951,1448235012,1141057030,172329217,638342537,637885579,638022795,495518862,637683084,-2013182070,1170605893,2129133574,1516111870,643390296,1124299915,-399986493,1573127003,1200301578,1032829698,1960292397,1033288474,-1156287416,1950891420,1034140430,-1157073848,1038630287,-400299262,749732408,-1341969688,52815911,638213572,170936202,-402230080,-347929833,-400051982,699400975,-402453783,1538285229,-1006435608,2005607965,1602954756,126756358,-1995809397,38112309,33965510,34031046,804295,868233984,-2080262702,-402295761,116064273,-2084188096,-1073086253,1571876213,184730345,1342665938,-1192743760,1166628866,3794954,-2084188096,-1073086253,797191540,-259315340,-2084188096,-1073086253,797181044,1213264501,990528905,1949085894,-399593465,783286915,-402489624,1113063427,1364414659,108396370,-1879211800,1499072069,-960276389,-402520507,48779294,235337310,1500842133,185222539,1265896517,-398611269]},{"sector":2,"length":512,"data":[1166737744,1279165196,527695883,76822212,641577403,1947485243,1035385625,239352614,-1145368460,1144727101,856126490,31189202,501744619,-399724543,1166737935,-388877558,699400649,-1157496087,99171752,205884161,-857159373,-398807039,1166737903,-372690166,-1964506689,173902685,-315486326,15984963,-1587708696,37590290,1023767040,58064914,-1929376840,-1229059491,-1954420625,-770979701,766510452,855749352,-33979438,238749308,75404562,1245825671,343918859,-1729613648,-399593471,316866963,-1930940240,-152354559,-503308312,-399593221,367526271,3964928,-770967435,-1329397387,23980101,-375799157,179044580,1308849600,1558786224,1560274945,-1962261109,-957805483,1559488512,-2143436613,1946159741,1036434179,-393197333,1569545441,112906,-393196053,1166761173,206932746,-1960436284,-1960440713,-1910108577,1976699655,1144727070,-1961330936,415663048,11996131,56396326,-502501235,56397303,-342882581,119443573,839879206,-1977203731,15329287,516159458,860611335,126494418,-1794242826,1008760065,186413856,-402426670,1364394039,598757458,1476444904,-392567758,1499070513,186116955,-402426414,-1073086437,548405877,1006675688,-402426585,-498925409,1976699836,15254276,665866240,1476431592,-154938633,1083510278,-661959563,259904011,-755510281,-2097036413,766509266,-1107267864,163134822,39074560,158795378,91429947,-503003517,800080368,472629502,1929532443,320603127]},{"sector":3,"length":512,"data":[-964492716,4319236,-154933022,43322886,-1336888203,3270692,506200,125074,-389773678,-997851134,-790048688,-790048536,256232,-485546920,1975519752,868436226,1009779913,67269178,-1000929785,-1433075138,-1795015031,-1794765057,123667316,170298307,204376981,136773525,1848156565,-1150427485,1642602094,772175228,-352233473,50906092,538915380,927276879,551373344,740441148,1008804412,574366242,-1006631745,-1200722410,149684223,1946499878,80184072,-193594821,2106271427,1745260034,1870052974,56461862,-1977220937,-1024064431,1460958224,125405990,310217510,-402405501,1153861008,-2090914049,-2048392249,3913861,1946731254,3061763,-378571078,1048637393,1963093562,-633437884,1962993261,1874239804,1874335371,829805067,763150347,2133266237,310056,180341043,1981712384,-134768273,-2010070400,-26249577,1271530186,-506400907,1849953928,1849296582,434684673,-5314436,-402652488,-970557281,-1336999353,2074732562,347138932,1434180841,-326898549,2079778836,-1792538938,-390057216,330332283,1971030760,163074918,-308287488,113661702,-400921026,113641300,-150507970,7219206,638219280,16940419,1424491380,906413670,-1230962283,1577462638,-1791515794,-1553039711,113677625,-402549464,1000542200,1024887189,-400904043,434666353,1527209744,38258214,-1791574446,-218101319,105638820,-402149293,2123201365,546564332,-970586277,-1924136377,1036257909,-1190819290,205258756]},{"sector":4,"length":512,"data":[138155379,179376500,192154172,548484235,57935676,-398390134,1347555228,50332856,-319035199,-1420252328,347120883,-2139419416,24001086,887686005,675184895,57933973,-1962525208,-389849627,113736468,38186,-402651976,1465087895,-402149370,1743289053,109832192,118444008,-970564769,-1420754361,-1330920821,2059659284,1849310848,-1949207551,194325054,-1908771585,644769798,-1912177269,-395401210,149452755,1009218937,639858001,637689227,-1910096501,252372999,-1792393589,1852311182,71665446,106268966,-342545757,330875838,-302978816,1013856928,1007252536,1006990396,-1023314900,38258214,-1000929702,-395418050,123670224,-1413313621,2054088899,-1792538938,7923712,1055396784,9300090,-51897424,-399411847,1387296651,1970926312,1178518546,245295214,-1986709597,-1332397802,-399447280,966987947,-401362795,-1595377139,-1791515888,468386736,191758497,-1559792448,45126969,-2036265493,-1791384722,-1792538938,-1577013247,1239979318,-401297408,1048607197,1946250810,675184784,57933973,-1023065624,-1553045855,-1070361296,-1198181725,1827143689,839319414,-401428331,-277579401,89057475,38112038,-392874845,1000541724,1024887189,378258325,1049335092,110007600,-141857176,38127142,1569334866,-1929332989,916456569,1962949781,1851302181,1848116983,192155648,1946286723,880033798,67108389,-1557302590,-1037341096,1852048939,37506539,-324983691,-1037350803,-149589440,7219206,-2096598000]},{"sector":5,"length":512,"data":[57934330,-1543504347,736849388,-385851208,138210489,512435317,-1993960146,54889783,-1953157469,644742174,637683595,1929533185,1488902,-1544776471,918459703,637333,251634931,57972018,-1006672919,2031020112,-394917656,-930449402,-2140506792,729043961,1968306560,898311750,39684902,638029350,1963146368,-437759946,-401493896,-622298947,2007820405,1396455797,-2141702795,24002622,-1960435340,-1912209035,644771846,134167683,-1175973515,11659384,1006709737,1007318049,-1207536606,317259780,9681132,-1192489751,115933334,1948335340,1948400880,196628716,1966073856,38258214,2021845075,-1506345128,1460032366,1594425064,-1336255737,2018240532,216543664,102004088,449112151,-2144991393,-1993997811,347078989,645411049,-402303607,10552085,1166616174,1975520003,-399265774,192247775,67993638,250090672,-2146178184,24002622,116852852,2125278,-2144992140,1048576269,1946250816,-399790065,57964467,-1342143511,2011425044,640464067,1015171,565449333,537261606,582224501,1074132518,1018430069,1484112954,1849310848,-2146995187,325990974,922699125,1460039334,139847763,1599862667,-1960945913,-1989253618,728655414,197624782,-1494016250,1969119007,102651683,1856376459,1856386697,-1960391125,109970813,520515240,520595187,-1341819553,2003560724,-385842248,1048832757,1962962432,-399986668,225802015,135102502,88459046,-2031550464,-331940096,-29950099,3604333,1849098094]},{"sector":6,"length":512,"data":[2001262,-29456018,226502253,1166747264,-1792236795,644769441,-1207614071,-1209532412,5826675,-386252056,109973051,1049325160,-2144965122,-1960411355,109969789,-1993970064,1990263365,92874350,1593965032,-1896198936,-1955698682,-1888616898,-1888616442,-1888616954,-1586631674,2453032,50347267,-1070397068,88442662,-1334942045,1992288532,-2081649835,109970156,1049325160,-538415618,-28931840,-1560219928,922709484,-1960405716,-947711155,1366614805,-1977198842,-1960442811,-1960443299,-1791581635,-1791279479,-1791156599,-402158042,1311310120,-28931074,410309131,728624289,671545282,1947205742,33194760,-31128716,1844225023,-1584056413,967011840,742296469,-1475965291,1936844910,-1792262519,-402650696,-970558732,-1101921721,163157302,1604645632,-947693305,-1953701371,644742718,1947207158,906413626,113706645,431415,-1553071967,-1960405703,2112357245,-1791253750,-1791158647,507587263,1931601927,-402650696,-970558808,-1101921721,163157302,-1583025408,104568108,1968729766,1856414467,-1017256565,637547752,1963197942,263435,17167910,1077936756,650130371,185687435,102200539,2106271319,126756367,155025446,-1960442252,-654900667,868419423,2105747136,309592067,-165281104,175378437,-165280592,41181189,-1960442192,635638605,365396823,1460031569,71666214,39684902,641567526,233310094,1476878080,-2091269885,-522058297,78168927,-1977209739,1300964869,1930050562,1946762279,1946696727]},{"sector":7,"length":512,"data":[1946631199,33129231,-108849548,-2096008190,208930041,79286667,79282944,-1009634560,-18775231,113496627,79188823,1852750592,1541862632,-4663413,-1014256641,638017451,-1023322743,-1157625672,-622301578,-1413467162,728673953,-1418830842,728678049,-1418829818,997087905,1970183686,-18429,1856938411,-1586602845,1621323454,1855889774,-1016178013,-1201704216,2126184456,-425990034,-1582579661,103509686,-1582600610,103509702,-1582600606,-1582600708,1587769014,1858511214,-1016175965,-1157625672,1860726406,-1413467162,1080973473,-31123852,1851302911,1852048939,-1413467221,1851302315,-1016175453,-385851208,113764333,38186,100668136,-107747241,-2134702241,946747966,350815093,-398741502,-1796705277,654556017,1970524136,1744776708,1423361,283621609,661082371,1042774045,571811813,767378221,1076721961,1208823013,734411822,36423212,-732942636,785646638,1429132291,-734581036,1900931118,1849310848,-1607961510,-2034274758,1950563328,6733575,125118780,1849165454,-395053079,1048604971,1951493690,833542,-991472407,644761150,637689227,-1910096501,1943464199,-1334586392,1940645903,-397293261,106498041,313540951,1953719016,279990769,-1334602520,1938810937,1509903080,638059496,1593990539,1347571975,138775334,71641894,-148343744,-1960545565,132573400,213405778,112896,638045928,638076303,638207375,637814159,1493583247,-1195130142,-689373162,708247526,775356309,808910741]},{"sector":8,"length":512,"data":[842465173,571541,45734707,127526912,1845247625,644769441,637814153,411079,105221376,110440099,309335,-1200641560,417867582,856121088,1845273536,-1791883633,-1792014705,-1792145777,-1792407921,-326412861,-2011763581,-488047002,1849335922,1962821178,-400576393,208958107,-1342146584,1922164756,1693181812,-395320088,158691623,91574588,-344794136,5957635,-1360512592,1745260146,-63009938,1435182701,650283778,1342326151,-1923676590,-689378690,-401428457,-210472365,-2031610960,235780210,1610584808,643324423,1979860283,1166616068,-401297406,141914675,980302496,-1049231802,-385988982,-443846051,-1947679907,-401362696,922710609,-1070371332,-395445085,110098583,113667580,856200502,-1791384640,-1191666711,-1092026346,708247525,4096917,1098186862,1399997416,855643320,244187,637960936,-1995291249,-1334969282,1909319693,1460023157,654185704,1963146624,-401690594,-1960414731,-1960443299,-1960440755,1642598517,-351838458,9746455,-1192923927,1726546067,868234213,870003666,-16695,39684390,138774822,173377830,206407974,239453990,-1993932801,1721831541,1166616174,1170679300,-1929379834,782435909,-1202256235,870842372,1042542,1776813919,-1547685119,110063100,-1597795030,1010593338,742136948,557586548,574362740,658247796,300427124,-401297153,-546016981,983571435,1950104686,1949056015,1948335115,1965177860,17885192,1946159080,-383274779,-1957334719,149717996]}]],[[{"sector":1,"length":512,"data":[1901783120,-395422488,477458514,309678908,104579212,343240296,54889254,1845233211,79170165,-459020032,-946929869,-1929871735,196672070,1842079744,-1989073944,1183644798,1204168446,-56536318,1166616173,1856413955,88443174,-1792133493,-1927509722,914950517,-1024944850,833902843,141828412,574378420,297009780,-400193498,2126774635,1962871800,2105747004,896794631,-1360522064,-397692816,-1977192279,-58801147,1963276838,-58815145,-2080868723,75696901,687728651,763577973,187466507,653819588,-351844981,-401297369,745893951,954747824,855929968,-1004409920,-165217154,578101253,637543912,638338443,67913091,654081732,-1341700727,1880221716,-1017256565,-385842248,-1749490735,-473175808,1852311182,1845247627,209552166,637957376,67913159,-2094611712,1962937469,-2094611711,1979650173,1166747149,1166616066,1166222864,-1960443390,-654900667,1356396368,79223947,1520363520,-1960421288,70061125,729314304,116689888,113849175,108396326,1569400385,1960512266,2106271241,126756360,123726315,-1977209621,-13499555,41779238,637957458,-351831669,75074841,123570982,175430411,21334822,-1929625463,-1960378816,-16053891,-891105163,-1960442017,-372175795,1363798481,-1378317395,858783929,1515514066,-402651976,-497460675,-1578726422,-1993970050,1460014661,1610264040,-2048343289,-1506345105,387182,1856374415,179851459,310016,-401799495,-1070398537,71665958,105220390,138774822]},{"sector":2,"length":512,"data":[-51901008,101741934,3467351,-1993996449,246417477,1483678952,494218300,451417008,-396949905,-2144928983,242354237,1594066920,1166616071,1435051524,582533894,-494147328,-2081649835,1187448556,-973078278,-956105146,64582,-1461171536,-972786322,-402194874,1191116923,-401428228,-210473321,83773174,109973108,1656712760,977174528,443880302,-1226304592,-88217490,83773174,-2144990091,1131676733,87916582,434650484,-1202695677,1727463429,-529012484,1586125400,-61961218,637896998,637687177,-2096865912,-253622841,33310347,347142726,1970157288,-8656637,-1946532213,-1195155995,-286719874,1803282657,-1972406594,1073787908,-1497642869,-533206930,1776919795,1852237934,1055406512,42985582,71666470,140348198,544597770,-388824143,-668210221,43968579,146296914,506112,637699816,637814159,-1022999153,-385869896,703127961,1849335918,1006667455,-1087736765,691798118,922690420,-1863815514,571647,-1191181125,1357384968,-1792368382,71665958,105221926,-1792393591,939953859,38201454,146296914,310016,-401798983,-1893334485,-1893333947,-706148795,1842538605,1894267312,-399739539,-1977157277,1946369029,1946434602,1946500134,34531362,146296914,8436480,-402651975,-1893334541,-1893333947,-1899821499,-1083295738,-1195179930,-18284520,1838082272,753405872,-1911655315,-1083295738,-1195179898,-420937703,65661152,-210382325,-277486582,-344670198,15122256,1849165454,1375844328]},{"sector":3,"length":512,"data":[1095760,-1191181893,-1662516724,1167009281,1167009292,-1070376178,71665958,105220390,140347686,172329254,25880643,381636690,939953665,25094254,213405778,637184,637626088,637814159,637945231,638076303,-1341504113,1826875664,-1200815128,-617414640,-402649159,1460011331,637619176,638338441,1376671113,571472,-1191173957,686292999,643455745,637820297,-1190767223,1396834303,146297425,1767237632,38258214,1532582480,-1951677557,-1047811134,-1413467221,1357386416,-1327795092,1820583950,-768360053,-1157408536,78118913,1598226804,1166550535,1569269249,650130178,637814153,637945225,638078345,-1022737015,-2081649835,2123180268,294643948,205488166,465045107,-540022528,988288944,-662794900,991000808,125168734,1178321036,-1207536402,-1293352934,-498693153,736384651,1444673094,-1207534088,-1628897252,-163148833,-386378101,-930479391,-1948105077,-689380266,-387872254,29033227,1946462208,145244935,1128465012,653033156,-393605750,1375754216,1095760,-1962917144,-1993935290,1183515717,1166616312,-498693370,138774822,652494475,638207369,638338447,-1961998961,-389849627,1692954143,1031808759,638087692,33717635,-1195179657,585695261,1927828447,-1993974819,1569269261,-947141886,1465107084,1746832926,138316654,-337956096,142183175,259325707,990076298,-243989423,520376717,532896607,-385840968,-1977164059,-771804643,-1476448541,805449698,813969416,805449860,805449730]},{"sector":4,"length":512,"data":[831009087,831009127,831009160,831009160,1673015688,-558634752,-2081649835,2122908908,-28930820,-386105715,594889116,1849310848,-400788467,126484925,-1002183630,992410750,91554373,-346711064,6600775,-1327596311,1793583117,654081732,638213515,638090635,-1960441970,723912781,2126775373,1569400572,2106271238,126756356,-396949935,123731816,125323609,-1293413712,-1326584982,1789650958,-1017256565,-2081649835,2122909420,-28930820,16402119,1031808512,639988995,818563,922689140,-1960415562,100732997,-1064538442,241011494,869269689,1430579410,1857422991,1726483888,977174634,1366560366,654079684,1963146368,1149969938,-96060656,45615477,-96075520,-397080344,1198876982,1131762236,644504552,989939083,1031141958,719852464,1569400426,2106271239,126756357,38112038,-386251263,347143872,1953093352,-401690449,2126801417,1166747388,-96064766,-1957379864,-1195155995,-2098659284,6666461,1440578793,-326898549,-1923676652,585690238,-386626801,123412983,-1974474520,67056348,-466422178,-1957400600,650337765,1208108427,7596112,839354970,1992440804,-2000516348,1087384327,1414457426,1416096088,-2081649835,1460016364,-387154291,-192213287,-398203416,-420994645,638017314,1963605376,1166681610,-161575679,645338088,-1929230965,367588958,1575324500,-326412861,-1928008573,-1561793410,1065362958,-1962248948,1435175493,1575324428,2013379,1440536809,-326898549,-327250668,-401702680]},{"sector":5,"length":512,"data":[499402587,155156518,1569392501,1575324426,6731971,199013609,1964734674,2028210710,168457487,839088320,45138880,-1023102781,-1329396048,-92028148,-2146208257,125173756,58310666,180552112,-1341949468,229688069,1942239939,-154892798,141820356,41157288,17621200,-326412861,-972362621,23988742,-1560280392,-1410830862,1844224474,862842531,1844749248,-1553074525,1049335104,1166765538,1845011202,-395445597,1183383758,674693116,89450606,-1879423351,-395452922,1183383738,71624950,1844192899,1745260286,-29455506,1979648877,12380174,-385988983,1183383869,639691768,1946420726,61204494,-385988983,1183384555,-401806344,1183383882,44099838,-1946663287,2095643718,-28931247,-1957610008,938015302,-163675311,695468141,-189011024,1368975469,-395446597,109990344,1049325160,-1960415746,-1960443011,128979029,-1202803736,-722992612,1844755281,-1957582872,887682630,-129594543,-1588529688,103509678,-397382052,-794733854,1841734510,-828129229,1859298158,1483606690,-1017256565,1848116983,292815104,1843543691,990004619,1953364486,1845142276,-1010814013,1849704064,-1201373952,2028470276,1842782545,-148455282,16787462,638219520,184550561,-336759360,34650129,1848116983,58000384,-402516808,-919383729,1842742926,-1064431637,203328294,1065559552,1090680063,77669894,1975520000,-1340808215,1353377946,870003544,12145106,1362618416,-1326652839,1352067157,-387610184,-324972383,1958742893]},{"sector":6,"length":512,"data":[-1294403833,1318250732,-1202696727,-1964446583,-396513200,1048596596,2080403008,-389304312,870928488,-1070483376,-1202687768,-655884276,1344596304,-2081649835,1437598956,-1202697240,1458103689,-569968816,1946158189,-334066927,-1327827091,1300424704,-402599752,-324972373,1958742893,-1294403833,1311697132,1852311182,1845378699,-1980697112,82378310,-62486031,323848998,-485111933,106385692,71666214,39684902,641567526,954730382,1499399936,-502937725,1745260260,-29455506,100017773,639333408,637760907,-1341107061,1293608967,-402515784,1957711939,-395447109,-2014818338,1575324495,-388461629,1311371536,-61462018,1979841155,671545100,1947205742,-60390652,79951614,-2144980619,729088829,209552166,1378120704,201213579,-1962707758,52886598,-944107451,1305405446,-1960394612,12127837,-388877360,190468121,-1023314478,-1157740917,-1310179644,1460058189,-1957732120,-1917125562,1302521918,-396945736,-1977200815,1963539461,1166747149,333989890,3192908,121384939,-544535947,-1202978072,569049180,326435644,209552166,638350336,-401586805,548948974,638249730,-402504309,280513506,1333389568,1852311182,1845378699,537261606,-994569356,1324869702,-504887632,-1030965170,-347149080,100017689,638809152,637760907,-1341107061,1276569607,-402514760,-1960423617,-620031651,-1960419212,-1910108291,92939783,762514492,695470140,544475964,1182075452,637983162,-167684854,41157314,-1960431946,-654900667]},{"sector":7,"length":512,"data":[-397616152,720062385,-348756034,912375319,21362214,-1106414328,-165267875,1963196741,911851011,839682606,-1976678675,1314580484,-1984366622,1315170540,1307073968,1745260110,-29455506,-279189395,-1011824501,17167910,-877657484,-922874397,-1957810200,1312549057,-397543959,-269922780,1183449933,1183515647,1187251710,163745020,-1946532213,1452014686,1397799166,-1202842392,250106449,1465301070,-1202845464,48760350,-397037490,-1984410132,1308092645,191753377,-150506304,-387140904,-1196405784,-1588735000,-617386392,866123961,1316743378,-388460872,-1947644463,-326518707,-1337079576,1303570525,-400619592,1605914045,1303898206,-396797256,1538805169,1303111768,-1779904592,1298196813,1077316382,1745260181,-803303826,-1961366674,-1977220484,11993949,71404326,208977931,-1962785655,-167050124,-1021319819,5421087,-385628285,681695119,1843307374,-387465240,1656447323,1670834231,602418037,922702076,922709486,-13734298,110035287,110063206,190475758,-1844742958,-1840442648,-397617688,28527854,868234179,51758043,1396676178,1163149206,937958997,1278755374,423573691,963193401,1295717407,1714240659,933449533,1446878257,-1773054651,1066812223,1430230569,-1776795754,1066817599,-398515881,1053057153,-29659578,-2094649742,779419709,-401735898,330326932,107179240,-10819497,243792,-1328199192,-544495092,638017368,1407720841,1282206028,-385855304,1371068121,-690755328,1428627128,-327029621]},{"sector":8,"length":512,"data":[1720189058,1664346367,-8485177,501743616,-27358977,-8479091,-1605640984,1178234426,1007252735,-400788204,-487890124,-8479091,-397678872,1021901618,1276962892,-1956438040,-1195155995,2122317909,57999614,-385846856,-1957308807,451707884,-949812248,59462,15091399,-327250688,-1207420184,-890765244,-21305246,-1326823799,1652942886,-1377302923,-398030338,49446528,1183518325,-159481622,-1959496448,803989574,-386906485,1183533982,1268312298,15236739,-340785036,-387555699,1586318330,1277880568,-387430773,1586318206,1277094118,-1957981720,1438866917,-326898549,1653270550,15353543,-327250688,-1207449880,1458044964,-28907422,49446528,2122321781,74776822,770424883,16271047,1262282752,1586359216,1269098730,1347112424,-387293555,1183534032,1260710128,1260447832,-386376051,870861760,1575324491,-326412861,-1206457213,-957855681,-364475906,-387154291,2122319719,477430514,-2132130165,1962997374,-129579224,-340787200,-386376051,-68662446,-263812790,-386376051,1183533948,1255205098,-386906485,-471315766,1575324490,-326412861,-394335101,1187471836,-1929379710,-1125585794,639484946,1913405312,155579916,-167349245,1948256581,6404102,-1193990935,-1897398250,-662794911,-1157559832,501758728,-1207536543,183042106,-2040624683,-1922983960,-269958018,-562135040,-2147060478,1946339966,-662794978,-1337304856,1185212416,-2142606616,1946339966,-998339318,-969100056,-1207957435,1055391780,-47257503]}]],[[{"sector":1,"length":512,"data":[-1920711031,1988997246,10873048,-1920434547,-1662466954,-1333883648,-1953991027,-1976662434,-1545076409,-1669427968,-387156339,2123169923,-998863480,-1929348376,1988992126,-401887096,2123169926,-663319160,-1929353496,1989012606,1081206920,45514368,2122321781,74711226,1240186931,12207815,-934900992,-1958097432,-941040570,-1270445239,-1958100504,-1142362042,-1913933751,602440286,-1503752886,-397782040,1586298965,1246423170,-393984373,1183533470,1234757792,-390439283,-1410840008,1575324489,702915,-1510799586,-1007661687,-1929005080,-1796674442,433056024,-2144216856,1946289789,1231284245,-1928772214,-806876579,207457609,-381026328,-1916581525,1988881534,122025606,-1308003064,1955213054,1212868866,771752376,-402434934,1166231475,-1070398966,72649262,-2092456216,-1023276435,205915394,621805568,405276685,-2115204267,-402607380,-1070374864,-1979824503,1183448134,1317439994,-495022593,640703464,638351243,638476171,1988691854,-129594122,134694390,1290273652,1222109209,602407088,1223747653,-11624819,-1337423640,1606936633,-402615576,-1634907938,1994981198,-72685496,-11624819,-1337430808,1601300500,1048583797,1948741178,977174551,276047470,1586359216,1225058554,-386113907,-991213260,1290282672,-1339001505,-94466581,-1924600344,501808222,1217456201,-11624819,-397924120,-1634862244,518586190,977174600,125052782,1458050224,-1326912673,1599072295,-11624819,-1924651288,1183578718,1221257468,-386244979]},{"sector":2,"length":512,"data":[1407731936,1575324488,-144906045,-397908248,1957822542,-387442768,-1340508834,-159468932,1946347846,-1301106684,1586319990,1216145660,1509961192,-924314960,-1978632866,-27357758,-1924634136,-1712784290,-1966806200,-1929300798,1474886750,-27357880,-1337423896,1591470355,-389120371,1580925977,-1943243274,-129614912,1183458677,124095209,989189864,494266694,192152744,31997360,172329800,-1337455383,174426684,-1203239703,787021898,7387346,1439836393,-326898549,1588783190,-1989283679,1187511878,-1929379670,-1930892674,639484943,1946304384,1065362956,-1207536637,-85393333,250381265,-257821557,205818221,1844459145,-1945609079,1166674500,1946396681,1965074462,17090074,-1962851192,1149831749,205884162,-1962654583,1149832773,-1203705082,15204356,33867332,302073030,855786633,71600576,-402242423,-1159182575,-1984278465,38046526,1480963048,168201402,38046704,-402652667,333989284,-1436644025,-1337545496,1571940370,1659437941,-400248577,-773300767,-1436643847,-1958308632,-257687994,-1436643987,-398021912,-443857178,-437730467,-512038819,-1336207640,1572333647,-1956990744,997083670,-1206422826,-1880621048,146298831,-1031033877,109533355,-374631104,1354254002,-786437888,-10637336,-395418058,753401866,1711705857,1184426350,-2081649835,922683628,113667686,-1340510660,1567090701,686295472,1946267741,-401952757,11558175,-5242252,-386316664,1048599207,1968336442,1178518598,100017774,638415888]},{"sector":3,"length":512,"data":[637754763,637631883,-303364210,-1476031962,-2145618686,1946220926,67314716,-112818174,54889254,-1929623927,-242292542,654202505,-352238197,6928440,-2133815063,1399732798,1053053813,-2094633402,1946161021,100017736,-398297984,-1960384746,-1960439971,-1910107779,1065362949,637957129,-150845557,-96040488,16350848,1187382397,-504888839,1550903388,393527306,-213260208,83460185,-654900619,-335919615,-214308858,-1963309431,-12781242,11537781,16481920,28312180,-1963374968,46235848,41026108,-315488335,1592312203,-109670962,431006963,1968977640,-16455421,1849427654,-401690618,-1000383391,728655374,1575324623,-338754621,-1977200317,1946172421,1946238001,-1879000799,57934396,651165881,637885835,-1960441973,-1960443043,786956629,130515782,-1960438293,2129133893,63406917,-1977218581,1642594629,1497843525,-1183450821,-326412861,-399840125,918838308,-424645050,-2013003226,263257670,-1923354392,1575545470,358541356,-488107856,-401166245,2123193309,743106774,33441526,1172833652,-402396395,1988957486,108822762,-2145815294,1962937212,1152641043,-1572688,-28931520,-401972086,199968009,-1975472920,135069254,-398136344,-443857738,-1957313699,686588908,-387154291,499387604,1007127078,1011577856,1011315716,1011053573,-2145815290,1946551933,2139301390,208994308,1849310848,-402295786,535498854,1458050736,-662794917,-387156339,1988952094,899475692,-401382680,-142142307,-1959082264]},{"sector":4,"length":512,"data":[-443874235,733528925,-826283776,-2144985916,259262015,-1377241209,1962379065,5695503,-398885655,45681915,155379969,4646998,1065363038,-2143390455,1963067005,-1239512264,640992367,973227147,640316679,-1996400758,38112309,1124554120,-951760408,1093,411078,542150,-2079767098,-1995811447,1166609501,1592312590,899934208,-2134696508,-2140265970,-2147462936,2137924134,-2144985660,275909695,242715430,207588134,-1996190170,38112285,3139779,-2144985660,561319231,33979776,-1494738316,1132193845,873022858,207457537,-1924930072,367528541,1132587332,2668739,-389155607,-1682243361,1509353537,2045258357,1200238170,351044353,1464923275,-991363445,1610058496,732424280,-1022049149,-385865288,448318917,-843060992,-253218640,-2081655463,-192211732,-385971369,-823656293,1610058552,-2144985916,-730527937,72321830,106924838,-1962439130,1200301785,1602954764,394995214,992353732,-1166734265,241142566,1964456742,949479601,-399194904,2105545538,561316358,33979520,1569397621,-754732790,173802475,1300891530,132218890,19196114,-348913944,1038084130,-152504441,993847350,-1746339961,6338626,-398233880,1170621107,1974472456,-2093773592,113448132,134874882,168560907,202246925,3336207,-398338885,527784212,777623528,-2097068150,-192211732,-24422576,-1962928152,-396861449,-998036795,-1009128684,197124,138019076,954730830,1107933952,1968758760,1499654175,21465646]},{"sector":5,"length":512,"data":[-1961563005,-1957211916,1960190,1482684299,-2094362392,-638905148,84019139,588252674,470037763,1107640583,1535502342,-1151965464,-1578614137,777287000,-1006544897,1065362973,-166431482,1080959494,-2094647179,1946158207,233891852,-401637400,-546043111,108888259,640578822,552945654,-672651404,1103620109,-389019208,-655867355,138790465,-378163185,45691569,115795968,-1205240343,988348458,9418956,315372777,1119834627,1397039618,1398097333,1173228897,71639632,-83671557,1187133253,1363619382,1245923146,1196042567,1447557903,1276666195,1257068617,-397697193,-1981281957,1177994328,1552623214,1955276293,76424711,1166810505,1200236034,121997313,411078,542150,1850095300,-1476097498,638415888,637754507,637629579,-320141426,192153768,637593320,16860299,-154990011,1080959494,-1960419467,1435042132,1006838794,1009546240,1008890881,-1340771326,1418405382,1050077187,-389640520,1170620753,501942281,55872294,-352253208,155567636,-972756159,637602117,-1996274549,1166806085,83240462,-1173392380,-689424188,155567679,172345128,-857145344,146008128,52742282,326369340,175374652,779354684,22856742,280707819,-1157371136,-1960443886,-1960443580,52822900,478881335,1962933123,-1579678914,100888080,-1064407550,-1960437013,1364197700,57969446,56396326,1888288951,15984644,-670869415,1946468854,532948483,1166655539,155551748,-1945477751,-1195176891,-823590773,570881738]},{"sector":6,"length":512,"data":[1165312110,1850482315,175495947,863945913,6285522,1170614251,1200226310,155551745,-1996339317,1200294469,205883652,-1996077173,1065356869,-1173392383,317208772,155567679,172345128,149487616,133163072,-1075292666,8120320,106939430,-1945477751,123604037,155567811,1456914,-1023314578,571033030,108956601,1745260118,-29979794,83240557,640972048,1946375227,-1194459602,786988683,1955276288,1552557571,-1929332989,917505136,641722344,1963984118,1413162510,-1207405565,183008651,-1948587264,256193,-389871778,78659545,17102374,112198260,641711081,637623435,794115,639601446,925187,105351974,403047206,-1094546432,244027646,384003610,225772603,1963086907,106728200,1847068302,147227587,-1950815518,-910432000,1852311182,1845507723,-1977216021,-13499556,637825165,1963984118,1955276296,1979058947,1048626153,1946316346,1177994312,478881390,41192230,-1996190170,-1938957794,644733958,918816650,-964465082,1946762244,1963408393,2144549,-1977219349,1106063884,1088995723,-1239512737,-74754193,119473694,520529139,1874247263,-2091448546,102632135,96012063,111538944,516185887,495545818,-956152436,1093,33965510,542150,21465638,205488166,1166739826,206932746,-1997776664,-1712781499,107341909,280007,138790400,1177994240,83240558,-402426864,11599391,-1995716989,38112309,101074374,-1593358968,1166634574,1850777872,-384678519,229660000]},{"sector":7,"length":512,"data":[-397068056,246479569,-397070103,-397388574,1012464663,-1023314940,-1003236120,126494237,1349848124,33979776,95436148,-402168438,334031903,1040181304,1273495728,-654854086,134694390,-138929292,1045424336,-388827208,95960649,1044637697,-394067784,-759677379,1043851264,859695849,735196096,1427835461,738912524,645204540,33979776,-420997772,833153072,-398610200,901265203,1040967904,-2093105431,1946161789,326467588,188531584,116861557,8416734,-1964452747,-402608067,146290514,1038346432,-402426696,-2135409187,1037560054,-1041727312,1032186173,-385865288,-1981233159,-78518188,-1003285272,1065362973,638350349,1946959744,2734114,-2134385431,1946289789,795338769,17397120,-2029369973,1166609477,1971569418,-2134703862,1946289789,1025763366,1877475504,-789137351,67585526,-138932364,122025680,-402230264,-138920595,1030219986,-146990359,1442253397,501793548,105236052,-1983892734,1170605125,1166544135,172329224,-385071735,-396942162,-544481295,1065363039,-1341688573,1402333201,1392927092,-957870672,-117512109,-1092088144,126494291,39291686,495519579,-2147334772,1962935933,155579928,185759104,637957330,1963087675,1200236040,121997313,1930181827,1963473924,1065362968,637956876,1963474816,1200236044,719867905,2145998898,4044854,-389612311,1170670683,-973078524,-1207957435,-1766191103,977174528,510984558,-1957211568,1379985651,-141834102,1968724575,1408860173,-2077882251]},{"sector":8,"length":512,"data":[-385649628,-1031012902,1439088873,-327029621,1239941324,-1070377133,-1979955575,-2037776826,2123235124,-1190715724,-1410138096,-790097744,-1592887982,1187475000,-1996458244,-1846935994,-394359552,-1342123800,1387653143,2123182453,12839124,49184384,2122321525,141886170,-1947056501,585883222,-387416435,-1557559,-729903818,-398737176,-1464322314,-2143819008,1963126398,-230257883,-802434933,-259312270,-288160847,-511653750,-771641337,-1270740768,-696008496,-176600576,2123176427,998762728,-1204371992,1357381796,1000138812,-13328755,-1338297112,1379526674,1961427829,-401559297,548950633,-389510400,1988975575,519801780,1604645639,-1979943228,38112309,280007,105235968,138790402,173902080,-13320573,-401574912,786968399,882806075,990505215,-1959051544,-389849627,-756538748,-58817744,-1005161216,1200301597,1602954764,529212942,-1996484603,1586101318,639485182,638338955,638476171,268771211,-62506240,1580927093,-385649154,448269130,-982521600,-402469144,-1125625348,178435,-385874968,2105549466,359925254,-2144985660,225773119,1962998144,172327684,-404110590,570881536,-160087954,101088640,-1628934284,139296826,16351233,1173764468,611651593,537478646,-1196422539,-398796824,451623417,17384950,2105740917,141885450,-386365000,116079313,-402616902,-109037187,-2145487614,-1207695283,1173805196,208994569,-155153224,1963460933,-796084221,-1494687486,978970682,17188294,218580422]}]],[[{"sector":1,"length":512,"data":[607686,641057987,-1460321142,-1470401278,-167349232,1946224453,1961691729,1964288015,1946265673,2088969797,1047855352,17319366,1946220928,-390549474,-1940833712,1552623296,268483062,-152513997,-109029062,-2136574718,-1341913011,-390004040,-1064551888,-161707226,857735353,987228370,-1883730965,-1000609536,101088640,1166739572,206932746,-1159174933,-164248575,1963001669,1552623146,1960512508,1955276322,1149970168,175490064,-1960382461,1846583604,1845626371,-1960394610,1351296512,640674562,49628406,-1960428171,52885108,637537334,637682827,52835467,637537846,-92072821,52458751,269913026,369305198,-109051862,-1845398272,33965510,218580422,-1995815543,-1195176875,-823590773,-326412861,-399971197,1441268007,1177994320,478881390,41192230,-1996190170,38112285,21465638,1460094344,317198256,-327250608,-400523288,2112368317,-401362935,2123190273,544139480,-399594264,279972204,-162533144,1080959494,2123186293,954198252,736624816,-397365195,2123184424,953149656,468191152,-402149323,-396412648,1183463643,-532280588,1166544676,155567624,-1983892696,1166608965,239438092,861869547,71666112,-1962326648,1166664262,-163149046,-972274295,-1962932667,1438866917,-326898549,6809602,-1001413656,-1334950346,67249892,-1325513080,1332733967,-400564248,279972064,-2142280472,1963067005,172329745,175498250,1183506570,951052542,1189613803,-402477000,1183462546,-402125570,1357396108]},{"sector":2,"length":512,"data":[122013240,-28903934,-972786687,-972683451,-2147416507,-973010867,-1962931899,-154968603,-1066524154,-1195179659,-1628897147,570881730,24477806,8763587,-2084400919,7213118,-1195179660,-2098659189,16312514,101088640,116790901,1967156770,639484967,294787,-538437516,91154435,1946224872,108888287,-166890240,1971325253,-1883716857,-1035212544,-385844552,1048625733,1968401978,1177994340,2088969838,1500774415,-2147158490,-1108847756,1242991438,-138811282,-1075251321,-1980266536,-1960441275,-1960439972,-1910107788,-1944221436,-1977220539,1166541127,105235975,138790400,1200301568,651753218,1963540352,952416780,-969511704,858261829,172329408,-348691736,5302275,101088640,499388277,75465510,-401116160,-840432834,6809604,2105599604,125108230,-2146875914,-1195179659,-1427570566,2156737,-2144985660,292816447,1946174696,108888307,-167283456,1971325253,2058928897,-1048057600,-1152692504,-1981264567,772044109,-1207867393,1927872532,1375930561,-1252834625,1196052805,692537923,1398097738,1257068641,-1605809128,255618618,289148788,356255092,-373095308,602472911,-326413054,-1004606333,1065362973,637957121,1963540352,108888076,-167348992,1954548037,7976966,-389997335,499404204,138906406,174033702,-1962439130,1200301784,-398030588,-1931321719,-1923619770,-1578570626,739764466,-387811699,113640827,-402362814,113641137,-1962906046,499408887,71797542,106924838,-1962439130,-1944221224]},{"sector":3,"length":512,"data":[-1977220539,1166541127,1200301575,-431585022,33979520,1149964149,-398054646,31876855,-1578563003,-398030080,702965495,1183517253,11790566,-152416632,1965033797,2093550112,-386431204,128988657,-2026750488,-364475657,1329577558,1577102056,-348791576,-386431142,11548117,-2026757656,-364475657,175947786,1329184342,1577093864,1300239851,-1162869752,-1959393304,317253190,-487081930,-1976169240,-142145467,-2026823192,899410167,-142147408,-2026812440,-125060873,537478646,62391156,157551352,-399121176,1149908375,135209992,1300236357,902045705,20742182,-2144991628,175442236,686297776,-385649332,280035028,-1957930776,197352933,-1324124992,408848,-919400844,1944637761,-1073001989,-5176716,1913666755,76230170,775262440,-402504565,-1959905911,897837060,71600942,1010138345,-2146208254,-1979578291,-391008032,-1959905939,-385741820,20723045,108269170,-402355410,-1959905959,894691588,-1948200509,-775552016,66554855,641058046,1946303616,1015031302,-398625533,1048595448,1963028026,-1075292359,1610058570,1379676277,-1960435339,1157693764,1552623114,1955276293,76424711,1166810505,1200236034,121997313,-1337211927,-163518208,-385844808,750305061,-1088427776,-2144985660,108267583,-385844808,1894301457,1268705532,108497702,73370406,-1996190170,38112285,21465638,-402176632,-1070399485,570881731,1232420974,-2144055064,1962935933,952416776,-348955416,108888082,-1206749951,-1696020599]},{"sector":4,"length":512,"data":[-1030834124,859084008,-349654336,-1962495981,-974648235,-963725263,-1959493400,145885765,411078,-1995876984,619252293,108888116,-1005816830,-1004139939,173902111,-972274292,-1023408571,425344,1173769332,1484062983,-2094654012,1946221695,178255,-1006515480,14084149,604587402,863234063,-59441370,-126579930,272927526,-398619718,116863592,159198,616040052,880666626,503298648,-382577688,45626299,26077184,-1171023640,-1427629825,866773298,2662694,-1962837272,641058014,83182838,-165276555,1946350916,1284187667,-74754058,1609439976,1924688363,-1107826432,-180029914,-402295792,468385884,-128677082,326423051,1845499451,1437599605,-348940312,1996470534,653490408,32851190,-1064557964,1852311099,-1699736204,-1942783000,1552623296,805353974,115921459,-1340544204,862382094,1642653872,650153011,-1175036789,-768409600,-382465816,-165268713,1948316996,122025504,103445761,1038661808,274580531,-1960394612,12127839,-388877360,-351849503,1156982294,343163125,-151015240,1963198277,-1070483453,-1338825496,856614992,17253878,1173757813,225772039,-399332120,101460821,115955636,-1070483405,-1204616984,-85372848,-397015502,678753130,56396582,-1961867893,1223168597,1578726692,2126821639,-1293364685,155567858,172345128,112721920,852224343,-385839176,499432693,108497702,73370406,-1996190170,38112285,252200390,205488166,-2144990093,108267583,188710950,-1977216907]},{"sector":5,"length":512,"data":[1170604359,1166541062,155567623,-2144943360,158665279,84297158,34031046,16824515,-399566616,686371345,-326413006,10153089,-1960430140,-964491188,-147004662,7200262,855799048,-96040512,-10058041,229638144,1464396008,-402237871,1577517089,96895833,-1341688759,1221847058,-1335891221,1221322766,-10051955,-1959681304,650337765,637813898,637688971,-1910098805,-59340537,-1912715636,78177918,1988977013,-311367428,-386107763,-1259855122,32499712,-1977213500,1930181639,1946696733,1946565657,1946631189,1946762262,1946827807,1946893352,701556777,-1763152779,-395646164,1860707757,-396397568,1525359991,-400166168,1383333985,-349825560,708765773,-353874965,-398005462,1589967183,126494460,913571900,292817212,594871100,-1030962293,-387441212,-349998046,-569968880,1962938477,639484942,1946763136,1751057,1002151145,-1930005219,38091712,-1880559755,71666473,-10051955,-147803927,195142,2105543284,74712326,67716598,639485123,482609034,1963407910,853051918,786682367,1399429119,-1195179659,1391001626,-1940681541,-1940681645,-1940681645,-732718765,-1990974381,-1991014061,-1991014061,1783859539,-1010814124,70976907,1166739061,38025986,509040323,885341636,-1491503705,401086069,-1391364864,-1861388881,199756515,-1509591808,-152960395,-1017225441,-1391430233,1193118502,1958742855,529212934,-1022936173,-2094654012,1946158207,1334519356,1602954756,126756358,-1960388213,-1960440761]},{"sector":6,"length":512,"data":[-1960440225,639419415,294787,-1960437132,-1960442801,-1910110625,651791111,1963738939,1602954759,389752334,-1996190781,38046469,-1023261303,70976907,1166739829,38025986,-993853067,1200301596,1602954756,126756358,-2094606197,1946157695,639484960,637814667,637951883,-661977202,41911078,-1962248960,-1962571516,1166606916,499434242,206015270,241142566,-1005090010,1195058716,638022924,638476171,-993847493,1065362972,-1021086964,-1912555845,-345098234,13024025,1849165454,-692383509,939953664,-1157108882,109969638,2105568824,880083462,-1962261109,992349269,142542423,992354428,443679815,173488934,310315132,138885926,-1977217929,101318983,1166569026,1287176967,-1177556736,1843267319,1182007298,-14265594,-14284169,-14284681,-14285193,-594869129,-402650952,1397764230,-401756078,250095906,-402608081,-1078973606,1513052136,12146779,805562448,-402600776,216543175,147096367,-1977219237,101318983,-202805694,1174857768,1850089156,-2128639194,775946211,1432323979,1571290926,5724245,-329376512,-396485376,140473344,73364481,5756161,-1873232384,-1806123520,5825792,5847296,5979136,677110272,744219137,6078721,6092032,6110720,6120960,206961920,5648384,5779968,5800192,6065408,5682944,5703168,5721856,5867520,5910784,5952256,-1738860544,-1671751679,-1604642815,-1537451519,-1470342655,5659137,676747776,1281203464,1348312321]},{"sector":7,"length":512,"data":[5995521,139853056,5651200,-326413056,1343548547,1964405736,-327250666,-401240088,1961426576,772794390,1541931184,-1207506134,1726529585,-790079442,773646382,-1017256565,-189011024,778365037,-1909584407,-1955698682,644742718,1948255734,-1142181877,1273523702,771025198,-385836360,-1957316511,686588908,371255376,-387154291,499447247,205488166,2123186034,369617112,1170675060,-973078524,-956168635,68165,804295,-402003200,1183454476,664856819,1511386856,-1913880947,652793974,-386430168,1166802397,1575324420,6863043,1438123241,-326898549,365226044,-387154291,-974646200,-662794987,-401289240,-2098659888,364308520,-389775731,-1343744848,678684925,-1961516312,1072230470,-599356627,-1959970328,870893638,24164397,-399639832,-443863738,-1957313699,1022133228,-1927973400,-102175618,360114195,-388465011,1843926000,-998339307,-401311768,719912312,358213672,-386906485,1183526134,753985756,-389527925,-2135413526,766633985,-1959985688,-1195155995,-1528299248,753985837,-2081649835,602417388,-327250667,-1928073752,317249662,354019328,2123233163,591259884,-1962654325,113466853,2005608019,1602954758,76424708,54493222,313531765,1967348456,-1983892714,1166541893,537049096,-402614086,-2014777305,638643192,-402503797,-2001196634,759031808,-1892908312,38113029,17188294,218580422,252200390,607686,-326412861,-399971197,2123175078,327346412,108497702,73370406,637832742]},{"sector":8,"length":512,"data":[1963147136,-401428452,360006391,-857189626,-1207477257,-1715847164,-272242688,-336058904,2013210135,739239938,1478968808,-1205256728,-722993012,739895340,-1961599256,-443874235,-1957313699,686588908,-1928050200,334031998,340453395,-388465011,1441272660,339339516,-399780632,-2001197302,748546048,-970202392,-973011387,-972224699,-972093371,-402650811,-141880442,-387154291,1166746171,1575324420,-326412861,-399971197,2123174906,316074220,-1928070168,99145854,-66656237,-1928074520,-2098664322,649652267,-388465011,-1343739015,9222182,-399752472,-443864178,-1957313699,351044588,331147344,-387154291,-337112442,330688547,-386906485,-396874926,1743268891,1575324459,-326412861,-398660477,2123174806,316008684,-1928095768,820566142,328132626,-389775731,-1863839080,642509051,-1961657624,401141830,-599356629,-1003810328,-1960388514,-397934009,1183524918,721479880,-402632520,333982663,1575324459,-326412861,-398660477,2123174722,300280044,-1928117272,1307105406,-79304686,-400162584,2123174708,306112708,-386189592,552084977,-263812333,-1960133144,-1209476026,-934900950,-1205161496,2028470356,717547563,-1017256565,-2081649835,-202878740,-327250670,638719976,205260682,116867700,8416734,-1360519820,510715933,-1193771379,-2031615977,-998339321,-385876040,-1934096515,-399250559,115875258,-662794972,-402648648,2123171689,-18236,-1207475992,384500196,-386217752,2123179377,-390057000,1187448653]}]],[[{"sector":1,"length":512,"data":[-1207959352,-397409916,2123174548,288221360,-1961720088,602468422,-599356630,-1960174104,401131590,-1270445270,-1003875864,-1960398754,-397934009,-396875978,468200143,1575324458,-326412861,-398660477,2123174474,294250732,-1928180760,-253175682,300869873,1006733498,-1173064692,171737488,-390460044,1946893313,6797318,1353995497,304277586,-389775731,350752971,-327250670,-1960203032,-1410807738,1961383977,700049450,1946958936,1946893342,105235981,122013189,292743170,1170611435,1170604294,1894253575,-972035311,-973011387,-972224699,-402650811,1170608490,1988955912,448587992,-2013675288,535423223,-1962654325,1438866917,-326898549,296282152,-387154291,-1410854724,611313913,-1928223768,1021892734,295036944,-386906485,1183525170,690809052,651714244,1208108939,-1205448216,-387448428,691333161,-1017256565,-2081649835,-397404948,2123174242,279046380,-401514776,-396875527,921184711,688973841,-1017256565,-2081649835,1072179436,-327250671,-401617688,2123174208,276162776,-1961807128,-806817722,-599356632,-1205286424,1589903652,1065363180,-1207733244,-2065170156,684779561,-1017256565,-2081649835,-1557268,-327250672,638553320,1963278208,284878923,-388465011,2123173748,283109572,-102233227,-117774321,-349983512,1200301578,631826434,-399996184,1183518927,678226160,-388217205,1183524966,677439688,-402543432,-1763170009,678488080,-1017256565,-385859656,-1957317927,686588908,278456400,-387154291]},{"sector":2,"length":512,"data":[2123173669,71682008,-2144993280,829687103,75465510,-401378048,-2135420811,-400788224,-1914171508,591390968,-1960437781,-1960442809,-1910110625,651725575,-402503797,283649326,274065448,-386906485,1183524850,669837532,-329333672,71270438,-268106892,682223871,-401598232,-443865102,-1957313699,351044588,270592080,-387154291,-2144989523,393545023,-1961879832,-1276579770,2095601703,267118632,-1960327704,-1195155995,787021887,-326412878,-401281917,2123173870,243001580,71270438,-454551179,-263812337,-1205370392,1223164268,263710760,-1960341016,-1195155995,-85393345,-326412879,-401281917,2123173818,239593708,-1961904408,1407774790,19970087,653024964,1946435456,18921475,-400027928,1474826109,1575324455,-326412861,-399971197,2123173766,236185836,71270438,-2115490187,-662794993,-401699864,1055455125,258861090,-386906485,1183524618,654633180,-402565960,988293067,655681551,-1017256565,-385859656,-1957318275,351044588,-1928380952,-890704770,255453197,-386906485,884483798,664659969,-401666840,-443865370,-1957313699,686588908,-1928391192,-1561793410,253159437,-388465011,149425739,-263812337,-1960401432,-1612129210,20494374,-400070936,-1343746347,1575324454,-326412861,1347480707,-1928405528,1793649790,1065362957,644117764,294787,-773300875,-662794994,-401781784,2123173576,231925956,-386477080,2123178373,245885104,834146676,648800448,-397389640,1491609253,-402396378,-1729622705]},{"sector":3,"length":512,"data":[-263812338,-1960430104,803789894,-934900954,-1960433176,602453062,-320317402,240904230,-1960430104,-1195155995,-1628897217,-326412880,12643457,-939637111,64582,-12548409,1172832256,-385649650,2123170074,-500766488,-2144985660,108266559,88047654,1810376309,71666462,-2144985660,108266559,-369342839,1317732583,15776510,-385729560,2123170050,-504174360,-954525464,50246,-1977213500,1963539463,440264724,-1927400984,-1070345090,-1207785240,-1880555304,1946827776,1963670532,-569968830,1946189933,413919261,-1927713304,397988990,42199040,-1195344243,2062090239,-2133542910,-1209507093,520349720,-1194033523,1726480401,-1065448190,-385876040,-591920547,1011215105,-401378036,1793652161,-729903840,1189658675,14465026,222047979,1458049141,-729903840,854114355,14727170,238820075,1122504821,-729903840,518570035,14989314,1085802219,-1349261056,-330921136,-1960509976,-135735226,-1002009820,1478816232,-400180504,-1634917114,-1628897472,221505572,501810037,221636863,-1157871989,-236453632,1084132620,614852863,-385988981,-18340465,618194956,-1017256565,-2115204267,-1996444436,1187511878,-956301060,16733318,216983552,-169278604,-394359552,-991124760,1065362973,637957124,1963278208,487909414,-1006353013,1065362973,-1996065788,-1024852922,-28407040,-402584390,-571932444,-394359552,-387158296,154930284,-404218763,609216540,-1960436284,-397934009,-122150534,621930496,-383492632,2123169926]},{"sector":4,"length":512,"data":[1963605204,-1643788527,105235968,122013189,-2131445758,188501483,96932213,1170604194,1170604294,-524811257,1010363137,-954895092,-973019643,-973011387,-972224699,-1207957179,535494908,359992892,18220487,17188294,34031046,607686,-352255816,4241414,-391223063,-387439453,1849205027,-972929655,-1928394683,401139830,-199497707,1156118407,71666458,-11231603,-400331544,58002433,-385924375,1183517699,47868,-1928609816,-385919842,1183523699,610134270,-401879832,-443866202,-1957313699,-1662221844,-28931840,-2114169207,1946223865,-386301578,644903936,294787,-1960416908,-1960442809,-1960442273,-129595105,-939893111,16737414,196012032,-387678579,1580927528,-1941277192,-95011902,854082421,-62485725,-400294168,-1634917558,-488046748,192407586,2095634036,-28931317,-1927079448,-385915746,-2085084433,594274500,1441268912,188999715,-1960632856,-1195155995,-2031550401,1751213,1353548009,-1326967888,158685241,-401975320,183104335,537716766,-1004343575,644761118,-1007214709,125140992,1847723766,-148998784,1967128771,570881543,292896878,1073734529,775541736,1636665227,-1951924434,8763489,1068314857,-1946156952,-1946076054,-1946075030,-1946074006,-671004566,-671000470,2130795626,-1895825308,1056964706,-1090518941,-1083958429,795092323,1610612836,1761607780,637534308,2046820453,2046885733,-1728053147,-1721600155,-1721599131,-1721598107,-513637531,822083685,828530535,828528487]},{"sector":5,"length":512,"data":[828531559,828532583,828535655,828533607,1835167591,1835159399,1533170535,1533183848,1096977256,1342177385,-1828716439,-402653079,1577058409,822133866,-681419929,587202663,1157628010,-1224687510,-1040187292,-100663196,-1442840476,2046820455,1811939941,1677721702,1744949376,1812059264,1677847680,1879175297,1946285184,2013395072,-2147353472,-2080243584,2080507008,-1946023808,-1946151736,-1946153256,-1996481840,-1744824096,-1670839808,-395764480,1256720722,639484951,1963736960,108888158,-1337691134,124094981,-389048600,1173756810,494209031,-1339985688,498919424,-390067784,2042110409,566487042,-388433992,1894326717,559147041,-1612185424,2406429,-400418072,1170612575,-2084368632,2030046333,868233997,172305362,-385067749,650317684,1963605888,108888096,-401247230,266867789,555214869,-1206215960,1927864629,556132641,2131977600,-569968701,1962967149,553380062,-1008205648,-427771878,-1339992856,557770879,-400489751,-2144991070,1031081023,1703544240,-823007225,-166009368,1963460421,550234134,401080496,-386418659,-400481048,1300242647,-389872632,11542709,-1206058520,2095579176,549578785,252200390,-569968701,1946189933,331868190,-401307160,350757009,-1070221286,-400495384,985143819,551807177,-400517399,1994920914,-402608096,-659023298,557705217,1344307945,-402124824,-2141317607,1946289789,542632000,-1545076560,122025500,-166038264,1963198277,1149971978,547612673,773871337,-402439030]},{"sector":6,"length":512,"data":[1290346632,1149972000,546301956,105155374,773884136,-402111349,887693441,76164640,1157863832,206902026,17716201,88129790,-763166719,-922812672,77128,-402597245,-1427634263,122013205,108888064,-401181694,11542501,-1206111768,1055451344,535947296,-823561552,174424848,207979265,131066112,-402165784,-1142356089,124774407,-1341686040,432334850,-949077855,-1996417531,-389873083,-504887294,1065363163,-400132850,-1570821,449046767,-1205890840,1558708584,530704416,17188294,34031046,252200390,607686,6994115,-391510807,820512545,-385699833,384309622,119924743,-2146102040,1946289789,-402214881,1170610530,2105541127,74776582,-1022736897,-1205911320,-1628905336,525461791,839599498,-372100124,-555217548,350218246,33979776,112203380,-401003032,11542297,-1206163992,1927857286,522578207,-2046147189,-372100156,-1957360312,351044588,1460098536,-387154291,-1494743448,-278468588,122611807,-402236440,1508381849,121497839,-2131986803,1963067005,108822542,-1962380030,1166608964,-401806580,-655877427,138709534,-972536568,-401799355,-443873662,-397360291,-1863842042,-397321753,15262680,37509127,112199796,-384260632,1609107086,-152007930,1080959494,-1959912331,518252548,-971073816,-973011387,-972683451,-973010875,-385873595,1793590886,71682022,1170604032,1170604550,516161544,53347476,-1960443300,-388877561,1139346576,111208454,-1607295256,1362914874,1128029812]},{"sector":7,"length":512,"data":[691821172,1088968308,639485158,1963147136,2139301458,1265893388,273124134,-167099135,1080959494,250094709,948681246,-1206050584,1726481803,505014302,17188294,101139910,17321344,607686,-286774037,173917413,-1910535386,644748294,199952267,-1058019241,643817355,855787403,72714706,33965510,-402107000,552078344,96004358,-402254360,1048588819,1951493690,-440539089,-1763172924,1200301568,172294416,1847723766,-401705664,1170611605,11535879,-350626328,-443815887,638213572,1441466251,-1064048553,-396370037,116785253,1967156770,-1196403920,1528675304,-1960394612,12127839,-388877360,-1934090655,498591962,-971150616,-973011387,-2146629819,-972748723,-352319163,-448796632,241142566,270402342,126559744,1962934077,337021742,71681902,1170604032,1170604550,1575485448,91613195,637854185,1963147136,2139301384,24379404,9681091,-1196977943,-1964441461,-1343729497,116874756,8416734,-13758092,260302900,-401600280,-622325550,772991772,-402492161,669519810,483125264,-1813512016,-1796712426,484042781,252200390,1944604867,309061636,108888158,-400722686,-1070395575,1649409665,-1925185164,-1729623459,-1962439872,-639106473,76343562,-956326936,-973011387,-972224699,-385873595,1170670714,-973078524,-972945851,-972945595,-956299195,-1036711355,1745634759,239453985,1170725538,-943124720,1073746501,-402376727,729089184,-402407448,-1108867929,393210092,-1206108952,149422452]},{"sector":8,"length":512,"data":[474867741,17188294,101139910,252200390,607686,-150725143,-2140283386,-1206356736,-454557172,472508444,17188294,67585478,252200390,-1207700759,-857177736,470935580,84297158,34031046,252200390,-402403351,-396950462,-544489735,1065363039,-402230008,887746349,2209796,-1767481111,1847723766,773616960,-1863842677,467003420,17188294,218580422,252200390,607686,-402414103,-1959861335,333972084,71681792,1170604032,1170604550,-706215928,59304201,1053105751,1166765586,508922652,259375115,1965049131,1959922449,12747054,722660112,41099333,-1320107981,65590020,254105808,441789184,1160449394,84701976,-360513520,855929601,-976079936,99294333,-947661057,1979648776,-754667017,-2083877950,-494669599,532744975,1426309983,39136006,1023689987,74579984,1107300397,74646827,1241518085,106793923,990010667,-1961266470,220922957,-1048378253,-633648368,141690487,74631227,-745815669,54585539,-402509848,-1595407553,264431874,-2081649835,736629996,40757251,53405783,-387154291,552075875,-1159176445,-263812326,-1206208024,-2132279232,449177627,17188294,84362694,252200390,607686,-1962764824,1438866917,-326898549,48818216,1459759848,-1929188376,-169284482,-353507327,-401233688,2123170524,31910104,-387260696,-924314215,12082946,392423425,-1961206552,1541992518,-599356646,-1206233624,484966456,442624027,252200390,-1017256565,-2081649835,-1813506836]}]],[[{"sector":1,"length":512,"data":[25356290,-401672472,544539269,-327250601,1593951976,-1961221912,535359558,3979290,-400890136,1170610731,-605352184,-1962775832,-389849627,1894252981,355199210,-402587464,-219670791,24950809,-400900376,1170610691,-1092022520,447866881,-971376920,-973011387,-972748987,-972093371,-385873595,116785606,1967156770,-2234360,17319366,-507778877,1846681284,877103910,71681945,1170604032,1170604550,-437780472,26798343,32172112,-1070396812,-402652998,434831796,637565160,1946500992,1211979786,-1205373695,-397409952,1927807447,1088968729,28305434,-971406616,-973011387,-973076667,-972093371,-385873595,1069023581,-1545344768,27846736,637548776,1963212672,27387939,1478049000,-400946456,1290273145,105235993,122013185,138790413,155567631,18671872,-385859656,686334893,296282337,-389866044,-2144927756,108266559,88047654,-1195179659,-1897332659,-2168669,155156518,-1195179659,2129199170,-3217245,205488166,-2094659467,1963065983,1656275713,-1553471232,-991894808,1065362973,-1023314680,-385859144,-35085483,1065363156,-1023314680,-385855816,-303520955,231860436,-1005711128,1065362973,-1023314679,-385858632,-706174163,1065363156,-1023315444,-385865800,-974609635,1065363156,-1023314676,-385866056,-1243045107,639485140,205260682,188483700,171705460,-1195179659,-219611057,-5576542,-385026328,-1343745814,-4790272,-402608407,-1108868954,10873343,-402612760,-1662386236,108888064]},{"sector":2,"length":512,"data":[-2147191552,-1015019187,-949077855,-1996456443,-1581055419,96955960,1166606470,950125314,-1643788434,38111488,1849205187,10618311,-1023261303,-949077855,-1996429819,-1581055419,96955960,1166606590,499434242,1007127078,-150309621,-2140283386,-1342016512,-1072970998,-1078978955,-1592253464,-617386440,-393215815,515381453,405006679,-149437975,23977478,-1207536640,-2132213560,229688088,-1339133207,778955026,-1561784912,-384913362,313536157,-1574004503,1189647682,217311245,1055455111,216786957,499447687,-1006138842,121251356,646581877,205362498,1024422928,1081409550,-2029221144,210102519,2105603975,410321414,33979520,-286780811,175892489,-420939897,175368201,418117511,1843267319,-428539776,-401988120,-142144886,-401990168,-142144894,-991541528,260711965,-754974280,1109297888,-771804523,-2021314845,460614973,-13444726,-472783919,33979776,2088765557,41222662,-13745341,-1200791641,2129199145,-2141290335,1867804,1048592,1048592,3145776,-2130739152,16646399,-2130804482,1835262,0,0,0,0,0,0,-1627389952,1399724653,2138167665,1148123758,695209839,1399859568,-512632463,1399970160,1399970161,-2140022415,177553982,-1662515853,-402396406,-142144827,-2029338392,1111392503,41226133,-253167737,374925326,-1790833014,1963981184,-1191737598,-109051732,-1204259840,-109051728,-1204784127,-109051724,-1205308414,-109051720,-2146929654]},{"sector":3,"length":512,"data":[57936889,-402604872,1156060927,138790422,-2139836401,194331198,1974469237,-402189079,753407719,138790422,1465303823,-1962249077,119409277,-1610608455,3970370,20723316,37501556,171720820,188486772,255594612,-142146955,-1358623827,-119404939,-1477246229,41222320,1048576432,1963693378,1593914370,118352222,-1425732691,283900642,600897453,-119362811,598542059,-85808379,-2134679969,9781822,1692933749,-386431222,-142144969,-401727768,1018697094,375252992,-971660568,-1022425019,33979520,1552615541,4161546,2105545076,527761926,-2146804341,393543743,-402247192,-1070396852,-1996012408,1149831748,73066508,-401249559,-142145045,-2029394200,231598327,-1206569496,216531012,357689366,252200390,-378193477,1448543778,-1962246773,119409268,-1790820736,-2029358080,895478007,820600670,-1979348474,1929642704,855617538,-398438172,1398289787,-1947389354,-1426355209,-213464438,-930455900,-213464534,1600019364,-1022730871,-2029490456,141158647,1117845383,1009825429,-1240173552,1930050584,1006679566,-1240960000,1946237984,-2146912766,1946486397,108822549,-166956027,1963067205,121959945,-402426878,1156972667,527696391,1375761128,-2029483544,142928119,-2028699160,235792631,-1043562408,-488097104,1377102612,-402100760,-1302719382,122948312,1307113351,-1594390765,272405826,171717236,45624946,288483328,1054718544,-401410072,1079512525,-400127302,-1632627980,-401304600,28316759,134759434]},{"sector":4,"length":512,"data":[968558661,86305141,134759562,1089013829,-269987308,-956933628,-2147257312,-1916598026,1284311645,-1790795766,175245884,108269628,-382226456,1760101663,-569968841,1946189933,119793677,518584199,-369654009,1117847302,1947221141,1930050587,1946172424,1963080708,142376975,-2146864128,1962936445,76867587,556160,-1092086155,-402608109,-142144122,-1340885784,226289665,736884615,-1494681721,-402608109,-142144146,-397192520,1353716733,-401348632,11539345,-1207084568,-639106983,1600043027,-1609308952,272405826,171709300,-927461518,339863553,-1156348184,1542026553,28883460,292814908,1006746810,-1173720063,37487040,-994442380,-389903615,1625887771,-569968877,1962950765,1111392352,125044885,-1790820736,-397249273,-142146219,-2029694744,321120503,-1928772214,1301088861,1111392268,74713237,-645463756,-1961655832,330492121,48822151,-386431213,1149899543,138741768,-1962254963,2112358980,207457555,-401849205,1149899636,155551753,79947971,-1092028537,-1963489532,1686767429,-1058674681,-1790820736,-1475841273,604271876,1342442497,-2029205016,-1008183049,-386431220,1048576826,1913296194,122025488,-402295544,1139474852,-352171288,122025534,-1341492216,245819397,-344751685,-2147110888,60113470,1048578420,1946457410,-402542590,2075856524,-1790795662,-523115470,-670834479,39291694,-13699193,-386431209,1149899375,138741768,1111392451,460458645,-1962261109,1143671893,206838538,-2147433855]},{"sector":5,"length":512,"data":[-2147419519,-1073020299,-402437399,1860894723,1109297808,-771804523,-1208013085,1166766619,206932746,-1962259317,801311836,963785842,1064451186,1399998322,1685217138,57829746,-1009577023,-753155797,875162051,-399227415,-1047841726,-2084318325,108273633,-757997359,-2084308254,108273633,-657331503,600046306,-1009572927,-754204405,868299715,1166656467,206932234,-2000711448,-1547499707,-1556086670,-1220007822,-668403854,154728306,288946035,299946355,-1259810445,-1275060110,-1275066254,-2147471246,1963067005,175997707,-1979353855,298248646,-2146470423,1963067005,172329774,661962763,-784217805,1241215976,460701707,-1173729911,971759825,34031094,834144372,296216786,-1716517397,-2146332696,1963067005,28332551,1510834664,34031094,-427818124,272361719,67652992,-3348285,1776915120,108888081,-2096401150,1963002493,-373126395,-1336798871,223406081,-385741736,2105545053,326434822,33979520,-353890955,172264208,1692940466,-1339299057,217507841,33979520,2088966005,292880394,-155186760,1963198277,-1073170429,-351197976,-1292400887,247261240,1069283207,122025589,-1157401598,-1679198919,7579905,678668560,343130136,410238976,410241536,544456704,477347840,544450816,141797632,812886272,2145931776,178190,1510813928,91551242,-1729505654,246212878,-402542510,-380105550,-202895057,-930498305,-1206863640,-1293297015,-1547685104,1168348483,108822677,-1956219646,1141574212,-1606912756]},{"sector":6,"length":512,"data":[171742530,188482676,2105552245,477429766,-2146425624,-1325987995,225372160,34227587,-402650950,1300237846,1407910152,-1206908696,1726533641,-2142704880,1962935933,267905056,34227587,-1307818869,242083896,-2097134616,-1962800531,951192132,-351379736,-402280414,-142144528,-402652488,951192713,-401738008,-21495776,209447167,-1075300174,-1141405939,-1477937863,-1790729984,-1593162359,1166644549,512410380,-13462206,-1959861295,175412359,1342731456,-392870981,-1973940222,1958742724,-1790592250,-1022364183,7697664,2138864767,2138864767,1016414880,1007973130,1007711232,1007449090,1007186951,1006924808,-2145094391,1946289788,108888094,-2145815550,1946159228,142442514,-2146601984,1947142268,142442502,-1023314929,-1962931527,-1996126460,46629636,-503134589,351241202,-1609240957,272405826,205261172,914359666,-1023306430,747979424,-958976502,-972880315,-2013264059,-1070397115,-1995815543,-152499131,2004186358,1953919858,2105311093,512401278,-13462206,-472783919,1966195585,-6422096,-350849821,-351111918,-351373554,-351636982,-351898874,-1342015998,-963012608,-1996486843,1435044421,-156243700,-1977213756,1946762247,1946827793,1946893328,1946369042,1946696724,-1326857443,19392515,-402541335,-672595598,-1933341951,639485122,1946369920,-1960393941,-1960442809,-1910110625,651725575,1963147136,-993883101,1065362973,639202568,637816715,637951883,-645199986,1962937064,-1994603513,38112285,1065363139]},{"sector":7,"length":512,"data":[991655171,-1945733672,1959410625,1334519313,1602954760,638051082,-645199986,-2134645269,1963132541,235923513,-1928772214,2078804573,207457550,-1206998040,1592262832,49002510,-1928439576,-1712846243,28358670,-401715992,1170607615,1300234502,1170604296,-2134704119,1946355325,231729217,425344,-2135290507,215738424,300466226,-2145850610,1946224253,-1968132084,317196901,139296782,-1073170431,-401733400,1170607547,1170604806,-1070369527,-1995815543,-389870523,11537805,-1207313944,1173749761,158598151,122025536,1073902600,172877888,411078,302597574,-1341504119,168093696,-1005749527,1065362973,-2142735092,1963067005,173903112,-349095704,108888115,-166365952,1963460421,122025495,-1173785596,1173749983,192152071,1005063600,-6821881,-402596934,31984929,221636620,84297158,34031046,-1007355927,-2144985660,913640511,33979776,1569524597,820504586,-349090072,-401756130,-286783742,-402608116,-860354246,230025217,-972227864,-973011387,-972093371,-385611963,-993790781,1065362973,-400526069,11537605,-1207530008,-1930919504,215083021,84297158,34031046,252200390,-1007382551,-2144985660,745867839,33979776,1569523829,820635658,-2081941525,210495488,-394152776,-1662513833,105235980,138790401,122013199,-194647804,108888259,-1923058430,1200294493,2147427592,20784756,1026519612,712459262,134154231,-2126699403,1025012287,326582398,98179,2139295093,125108227,79233200]},{"sector":8,"length":512,"data":[-1341330688,571652,45090283,-2013263175,-397342907,-396873536,1170607498,1170604038,1435075593,207456522,-1022474871,84311424,-1863835020,201320703,-167716422,1946289989,170440194,-773322923,201713674,84297158,34031046,-2134887485,1963067005,173902633,855642297,1125583826,200991299,-1206422062,-957874144,10532872,-401830168,1170607059,-1195176184,2105540640,477430278,2144336,-401973877,1170607374,1170604038,1435075593,207456522,1477330313,425344,499394165,38222630,333979252,2144260,-402096920,499387253,-1207393560,1021837400,193062924,252200390,16824515,33979776,1569398389,839354890,-397393692,1170607290,1170604038,1435075593,207456522,1477330313,16824515,84311424,-397403276,-1075249205,719869955,186902536,-402641736,887622639,138790411,2105590543,779354118,33979776,1569394549,839354890,-388877340,-135661244,184019186,-402169928,149424981,105235979,155567616,172345128,1170604032,-672595449,639485170,1963868032,108888121,-1206422270,1088946178,-1979600853,126421605,-972399223,-385874107,-488050031,16824325,-402149144,1220020905,192276480,-972375320,-384890811,-389811595,561315876,52750416,-402587464,-2031614067,-1209509878,5027847,-401912088,1170606739,1323896584,499434482,20938790,-1960435595,-1960442809,-1910110625,651725575,1963868032,639484941,1023559563,41353471,-154943429,1080959494,-2134703755,1962935933,105236217]}]],[[{"sector":1,"length":512,"data":[639484930,205260682,-1612183182,121997824,1006908905,-385649400,188481682,-1947726731,173903104,-382838808,171766260,2078805877,121997824,-401973875,-504811917,1963539697,173917205,839354918,-930397980,-399875352,1569259619,121422602,-219664267,-1194292474,1290272800,509040170,1975846686,-1963226358,854405838,-1968507968,-1314589750,717892128,531297230,1569283679,20759306,904403061,-1961658881,417874120,1125091370,1258297064,-385196663,-1984368275,-1809848064,-1960436284,1569522255,509040138,1975846686,-201618678,1583292324,639485123,-13492342,-13704239,-210058329,-210046086,-210050182,528151418,528194939,-142886789,528226427,528162683,-998563973,35698717,274172710,209683238,-2028636928,26536183,-1880557689,-1004506111,1095709,39291686,-142126512,-402545944,-142145270,105179224,165537880,-2146884887,1963067004,172264278,1963738123,122025518,-400002044,834144497,156231872,-1461190480,122025478,-2096270328,-1342043579,110749696,34237827,17321344,-402069783,1149962441,112388106,134694390,1166216820,1149960714,111339532,34237827,-2029467927,145221879,-402111350,-142146526,-2029478680,-390057225,-142146484,-402045814,-1528232658,-386431224,216595665,141879297,499447687,-1207588120,1156055132,143255817,33979520,1552619893,4161546,1592267125,13023752,839348456,145156288,-2029491479,-51779337,-402599192,-142145478,-1960436284,-397934009,817366382]},{"sector":2,"length":512,"data":[151382016,-2029499671,-64952073,-2029511192,416922359,34031094,951452276,-402172662,-1830287624,136964353,33979520,115875701,172264200,-2096762904,-1962800571,-437777340,172327685,239373058,-351937560,-386431160,11536357,-2029933080,142442743,-1207208960,921195346,-397365240,-890763232,142442503,-1341426688,135456856,-396731464,11536413,-2096793880,-1342043579,91088899,34227587,1692926640,174949125,129362180,-1960436284,20775495,1024160768,192151554,1946158141,1170653963,-960299001,-1023146171,201803206,583875,65599367,-1007188224,425344,1659375733,780295,1471415820,-385368856,-154990737,1947208005,948812296,-351903512,155579938,-166431712,1963002181,175997702,-1206881280,-1830238335,-1341789433,125495487,-1979278104,414189925,1963050230,-166678512,158663364,-990510928,-1342016248,2105590536,779420166,-1977213756,1569521991,-1779937270,180049963,1946303488,1007203080,-1291684608,-1957999868,-397211071,190514194,-369986085,2105542383,460652550,-1006156406,1194993180,638416129,-402501749,-68680003,114419971,-386225688,482608817,38243110,166259890,-477513723,-402193176,1018167331,-1207505944,482615129,21432870,41157288,-353878092,256006,-1207526679,-555139635,387078,-974533200,-569968890,1946189933,512630284,243494504,520159272,7649475,-393155351,65537621,107604224,425344,112789109,59042048,199753904,1397929984,-1341743896]},{"sector":3,"length":512,"data":[109504848,17202560,-930473868,-402587464,62390293,1042438,-402193736,1170604041,1170604294,180555528,-1979550519,56289476,425344,1166214517,-1950154230,1166609477,239438602,-1022605943,-1979232886,108888296,-1960282878,1435175493,80082444,-157808523,41157317,-973675470,-1727499000,1946338806,-1982713086,1435044421,860744460,-153996352,259261637,1963246070,-157765622,57934529,-152817480,326371525,1963508214,139296782,-157699580,57934529,-1949158982,1960446936,1347571991,-1341816600,30205952,845912,583768,1493535464,-1022923384,175423499,57992202,-385497879,-2134702672,1963067004,89385025,134694390,2088965237,242549002,818307,-21886859,-385594392,1149961555,-1259843062,1173772803,326371335,34227587,-1978907509,281706710,-2096914712,-385742227,-2024667857,84928759,-402111350,-142147446,-2029714200,-390057225,-142147404,-1966175654,-422573708,-422517040,-102175094,122025475,-2096008184,-1962800571,281706961,65464336,34237827,-402330903,65537229,81914112,425344,1173758581,578028551,134694390,1166216820,-4586998,63170608,34237827,-399441990,468386745,17202560,11535732,-167713304,1946683205,-397234171,1353712860,-972761112,-1023146427,134694390,27791989,78125172,44570996,145234548,-1595204748,108266920,208931496,11572971,-1342133783,10807554,-1612119632,-385634304,2105540762,1316291590,17188294,134694390,1488202613]},{"sector":4,"length":512,"data":[-2080374343,-1273531199,33864026,242532740,45701556,1958839297,-1185172475,1292370696,158173192,1642710154,375044,1488503172,-1190759334,1505231114,139266139,-385258104,-1329396647,714753,45152135,-2030028312,1149551607,-401574648,11535325,-2030032408,64219383,1355020167,1342719242,-957810809,1139300355,-386430977,11535293,-2030040600,1776834807,-1007187969,1173801098,913573895,425344,-994960267,-523181872,-259333936,-1342001944,-2132702580,-864025916,65792192,-706211605,178176,-1979696920,-402520895,95420616,-1041758741,-771641344,105236192,138741761,-1022800504,485017738,122025473,-2096139256,-1979577787,-402520895,1837302027,-2134703606,1962935933,172294404,108888259,292097,-1950152379,1166477893,172329228,-1579643965,-1020563986,1843267319,141824000,1946286979,-121597,-1955729757,191753246,990147803,-1560054845,-389845524,-1917124653,27453502,-396945736,1170604881,650315014,637683594,637816715,637951883,-645199986,73894438,-321780815,-1840957,11587723,-1342150680,51571024,-787854079,174949353,822065666,-503199512,2105590772,544538630,678756412,805914102,1166680693,37742601,1173791152,41223175,-571957072,33548546,17202560,1161433973,-1023314679,-523203918,-523181872,2112483466,122025473,201880836,174426800,-1962752791,-771028395,-1207170444,-1962760216,45345218,-536166220,-523181872,-536158000,-1561775696,1962949634,155579932]},{"sector":5,"length":512,"data":[-1978239696,-689436347,-157044735,1963198277,-391991294,-1763114380,-796347903,-790572832,-370111776,-930414304,-402602310,-1047854824,67585526,1659437940,38725890,33979776,-1031136395,67585526,84675444,-1962787864,1189677637,-1979446270,1055459941,46825474,-504760782,108888064,-1962314494,-897578427,-1876431934,-1241265536,13887760,33979776,-897576843,-1327330622,34596993,-385202805,-897580535,-384780797,-930414411,1975597976,-1327330804,32761987,-571883126,-1327330815,31975553,-487997045,-1966568703,-159337742,1946421061,-1736199663,175425595,2129166770,-373191936,1994916293,-373192192,-397409876,-2141652261,-829774614,-2146967168,158598905,91602955,-1561738613,-1731687679,225820987,-1958687104,26470594,2112471434,-2133950463,-2031566197,-373191935,1173750145,141824265,-2131059992,1055630570,-1325755672,22734908,1173782704,175440393,1173749936,41224201,-802013008,1173758187,57934855,-2147366272,1963001469,158665227,-1950298496,20703682,-402045558,1166671993,1964025865,114196505,913580200,-1476135296,-2094238459,1962936957,-373126385,-830471915,1948297222,100040707,-1744157301,1963607355,1087275022,-85409141,172329728,-2147425303,-1031044914,-167711512,1963264325,172329734,1359012073,-1961998965,1435176029,1342224650,67716598,12127349,155580112,-1190955712,1659408384,-1463592703,-1273793263,1963108406,-1473858552,-1274907384,-372995538,-2084372332,141835839,50464643]},{"sector":6,"length":512,"data":[-1022916321,283660371,803756032,4777984,34064219,38242560,-787510333,-2096335639,126550723,1370195,-1007361445,-2030040856,256247,868480903,71665600,276086795,-1202694394,-605552637,-1442795384,123710296,321731,-1023130231,728625825,1953418758,-1202256365,-1142423551,-1442664312,109561739,123694578,1958742979,1347880464,-402652232,313559202,1605064874,1460060935,178256,-1333227032,-1437029884,113444703,62410839,-2004817920,1487537840,-1022926933,1858999947,1460017031,571472,-1333237272,-1437029880,1605091979,395035399,58053131,516097929,1859133070,1468783243,1976699650,38242807,126599967,-1073019095,113443189,62410839,-2010060800,1487539376,-1960388469,-1993997753,-1073020289,123728501,-2147440189,-1259862412,2147427832,-392515504,-1587806352,12152376,114438960,854086487,-1194849536,-202899449,-1441746809,1487651211,-1413313621,113444703,384324439,-1194849536,-672661497,-1441877881,1487651211,-1413313621,-1899821217,862883846,-337955841,87762444,-1977206924,2039284317,-1908524285,1374582126,-1907351978,915089088,-964493304,76162563,-1958739788,132552,-395407685,1465419665,-203911509,1579114404,-1010332839,-1000974586,-1955680746,728652862,1926245335,-1946973426,-1494001720,1192391775,-1947043510,-1141666872,1525182126,-1527556217,1852350815,1853234827,371971979,1600024156,1460060935,-1949791402,1857469427,-209241880,123690660,112835,1857422981,1472397685]},{"sector":7,"length":512,"data":[-1144485114,518549174,-205507705,-1017182294,-397191418,-938737851,-1157625672,115896006,-1413379193,-1031034024,1857462699,1851655723,-1022926933,1848116983,242483456,-402652232,313558754,1845141930,28879680,-2032867328,-391506768,-1612185592,-370182912,857604297,-1949158455,-1955680706,-1905397194,-1402023906,-13444982,1772617518,-2054783098,-1937340282,-1400466298,-1148799866,-779696506,-1383672186,-336557226,-672440614,-739555514,-2096970109,-873790777,-1996260215,-695532204,113673132,1006880643,-2085063445,-1276443961,-2096642429,-1410661689,-964477815,-2086343934,-947714362,146899714,-964453909,80184070,-351747709,46564238,-1994421781,-1986704882,731204630,-1989235138,-1013626818,-1949748450,-1902818250,-345059298,22842138,1143670667,8469763,-2109928833,-972718849,1091239748,184906891,534935030,1438894347,-326898549,116858380,16805416,-90093196,-133813395,98619757,-1631911924,-2048923538,-143785823,7219206,855799042,512469952,1200319970,-1365136626,-196703890,1851524651,1845010859,-1409923447,728627873,1080948742,-125924949,-1577433460,-1363438264,-2053117842,1252087558,1857993621,-1987734296,1183644798,-1962450946,-1955701738,-1905397194,-1402023906,-13444982,-1582825682,-1115179129,-1014513529,-477641081,-142085497,797446791,-1383571064,-336557226,-672440614,-1512772700,1017958891,872772843,-1425820671,-1381307984,126605451,36554539,-964449536,-1531647228,-1948742739,1221012231,80118698]},{"sector":8,"length":512,"data":[-964450837,-1952388350,-1950209081,-993817393,-1515848578,2122951589,-1896248324,-1413467197,-947157525,-812924373,2126824332,-1515870724,-58816085,-1014040181,-1414807501,-1375770391,1311492235,-1993902346,-947128762,-1980479957,1460073598,1039695556,124911744,-2146646906,-1429961046,-213270478,-125924950,921241439,116858879,16805416,1183516276,1855890424,-1017256565,-1904424216,644769798,276223,-1557741517,-2085093372,-2049644414,1852315275,728614561,1025471682,57806848,1343225784,-754667182,868781024,102665152,494987374,-805087142,-1008149781,1745260165,110044782,-1494745084,1105773436,42461186,-1593813016,44264902,10283118,-1593491480,-1064407594,-402285848,-1591343700,-1073020924,-694030219,203328365,281248622,690405518,637544990,184550561,703690176,695075358,-1586625506,-660378154,255754349,57999421,-1585227032,-1365021242,-1070349459,-1586642269,-1064407594,238979878,378217984,-1070399472,3056422,-1993995541,1157834245,147292930,-227149253,3318054,2794278,1876262,2925350,-1325396219,32035588,644727302,184550561,-1011124800,-1107295557,283639824,1228288,-1996485912,-2089958370,678949115,1842782659,-1960394610,1418405436,638380802,52829577,275907165,990431107,653293050,184550561,-1008896576,-385863240,1307084033,205422593,57999421,-402551576,-1070398934,1842742926,3056422,1849165454,3056422,862836385,650153673,3817091,1360294912,1841706751]}]],[[{"sector":1,"length":512,"data":[-402652737,1172832631,-972648702,641816941,184550561,198866368,869365193,-1790008384,-946511709,479549958,50587648,-1550496095,-1511494142,66250755,-2096885528,9789502,-2034756236,-2077693822,-1941884744,309722,1845894795,857467368,-1788959808,-1788737849,1688403972,1443284885,-1593828203,-1064407594,1841706751,82378547,748758529,104539648,74645550,3055910,-1987954456,-392866786,401081339,1048782341,1962934318,90105861,-337113877,98494470,-402196504,-806877630,65988614,-402322968,110036313,-1591317050,-1073020924,-303519627,1614709510,57933973,-1903969816,644732422,-1560268127,1048604102,1946172686,-1789877999,-1789782389,1846025867,-394938136,-617405034,1846025863,-2139783448,4001086,484967284,255754272,57999421,-1585350935,-1365021242,-694041747,650153581,1318539,-1591857685,-661754410,538251,-1929132413,210371199,-213843787,-1592888154,-1073020924,-1205869451,2129199240,-1993990269,652184327,1449531,-1591292811,-1073020924,-1581008011,-1064407594,283705139,113714688,48,303398,-361381877,378218179,-771030992,-1477942924,651725684,83892897,-266010609,198325247,638612735,1838731,637553640,1969803,1392526312,1534393576,-2105612282,-1938503960,-16054333,-1993992075,637547038,-402645855,-1993998288,637547550,-402645343,-1993998300,637548062,-402644831,-1993998312,-1962919906,-378674626,-1048349406,-253656305,-763117309,252035840,-754667264]},{"sector":2,"length":512,"data":[-1009253400,-1905404255,650130368,637549219,637549731,1207975587,238979878,378217984,82509844,113738667,-126485957,303398,-747257845,1852311182,205425446,1032529408,238945062,100607488,973537062,109888256,-1591306906,-1960443850,637537854,1054347,637543656,3933697,3711270,272534310,378217984,250085394,100738560,-2094661570,14910,-1547449227,-1070361240,552334899,4031270,-14281867,251602437,1448214586,283641431,1583286016,1963140698,147292932,-596248005,1435182787,-338296060,1745260141,210445973,41716518,-1788475762,-478029429,52826111,637539358,-1040775282,24387584,12711744,-148933504,1947205825,12711738,638350656,1195523,17155878,640215808,1064451,-1040772117,141901824,205390630,1032529408,238945062,1032005120,638088703,-14285313,-2097137146,-231012154,-1581019275,-1064407594,647319201,855648931,1049306816,-1960443890,-352317418,1032005136,638022911,52823433,-947715515,1979333384,512435948,-2094661572,11838,-1557777548,251985966,-754667264,130253800,-338492495,104579843,58103136,647323811,637537953,788011,-338569077,-1023153199,855646213,748889819,984320,-388823887,-1790048767,1042154278,-773598976,1511916003,-2095484267,-258647490,-1591340425,-1073020924,1709769588,-1790008833,-1016216925,-385848392,45842673,1097216,-1996483352,-1097507810,182976530,-1004631808,-251952275,-1581044105,-1064407594,641501990]},{"sector":3,"length":512,"data":[-352168821,1032005138,638153983,52829577,275907165,990431107,652899834,184550561,-1009289792,-385863240,110002337,-1960415688,637538366,312673675,1841602926,-1325396219,65590020,-1553071610,-1581027836,1927845210,1478396286,-1789091435,-1988204312,-1955720162,-1083300810,-118984922,-2105362411,-395368774,649729662,1906567279,-1586624349,252024154,-1039104,512479795,518614536,916530802,512435712,-1960443854,637537854,1054347,-1591340053,-1960443848,637547550,1064587,303467302,1711705088,-1788304491,-1788076407,-164373709,-1960433685,-49915,1856181364,1780386197,1448235925,367527511,1583286016,52845402,52822621,-947714955,1979333384,643154901,50621835,11004398,-1788344690,647081254,-1389980755,-1834146158,-1788475762,-410912373,52826111,637539390,-1040775794,578060288,1073791479,52825717,637538846,512427779,1223388674,270402342,117646848,1845632651,-1040762133,661995520,775848742,326369280,805356023,-1014297228,-338564143,537248515,638905088,794115,38208294,639601446,925187,637993766,2760331,-1788199228,-1040713213,242552832,536920567,369299317,-1037331090,-139769784,1948254401,1001100034,-385649419,-1017249966,3318054,-1789649269,238979878,378217984,317390864,3449126,1846812299,272534310,378217984,-164429806,-2094652437,376766269,102651734,38636326,-1908569306,-389837096,520557737,52846175,-947715467,1979333384,-1591295015]},{"sector":4,"length":512,"data":[-1960443850,637544990,933515,269912870,638774016,-1962919775,644743710,1064587,303467302,-1788304640,418117171,-12745946,1448217460,283641431,1583286016,1963140698,147292932,-462030277,227223235,72715046,1049351683,636196182,-1788344690,325414,639071264,50742411,83306177,41160704,109985856,-1951689384,-964449341,1978809096,1446939095,-1591295083,1755512886,870003605,1049306870,-1960443890,-352317418,1032005144,1376482559,-402237610,1594294288,52845150,-947714955,1979333384,-1960393756,1435182605,-1948908796,-1910313989,647325702,536872183,-1960438668,-1056766396,325414,1073902608,1409715776,-964449387,1978809096,-1008759846,1580662558,1681325973,1647771541,109971093,857707860,1070446847,-1413467221,-1420252328,-1426051423,-788513631,245476320,201730816,-773271296,-1420252184,855640249,-1951665216,-1207956426,-1381285939,-2085758837,225771515,925187,-75292789,50492671,-1413248040,1001046066,1962937910,520560346,3055910,-1788738047,-1788602749,1017193984,31510784,-2087362042,9790486,2793766,-1013621085,-1789651317,739150630,136219392,345500014,378257459,-1960405676,-1962922482,-378665442,-1070394210,-1789651317,1007586086,-1948135168,-378665442,1053037706,-617386478,-1591768794,-1993960098,-1788829435,38111526,244040332,512464220,1323855368,338880532,-1986703197,-1902816746,647321606,1735,1520523853,984469,-388823887,566054,1845626371]},{"sector":5,"length":512,"data":[-1789124981,-1324366973,65786628,634948547,78708767,-1557733165,-1014824958,-754601697,512304875,1520500740,1846677,-388896559,434982,93674657,78708751,100919507,512454146,-1014796758,-754667249,69075947,1612579694,-1579668587,-1023185364,-4717709,178464511,1848549632,57918211,654311352,-1593832285,-1557762556,715194382,279127662,113714688,1835032,302434086,-1912602624,644769798,802443,38112038,641567526,933379,-1912274138,647321606,637539491,1443527,-953810944,6662,-1950184448,-1953146354,-378664930,109974365,-13406568,1855340091,-1977209228,130515717,443876668,1859567191,-15629336,-395458506,1609039901,-939094272,109993837,-1977192808,1088696837,-856950781,1859566275,-1199850263,-692452096,299690094,-395389254,1956867350,-388461675,-771026196,-264428171,-1558153217,-1259825808,1914603897,-1950338155,1880001491,1948158869,1836902549,-1787552117,-1200803095,-1242890195,2023931955,-1787190635,-1567262046,2124584315,-1786797419,-946500446,-1500154362,1852350825,1358031080,-1556086771,223909244,-2136768512,-1896467563,999649798,1939173430,-1465113050,740324609,1008497280,-1978108126,654258904,1220936621,781550755,-1817602049,-1786497397,-1194005690,1290338351,-493624577,-493624685,-845946221,-493548141,-493580653,-476847469,-493598573,-493452141,848691859,2067693718,57933973,-2137891352,9797438,-1075313804,-20752238,647329798,1963211948,2015791696]},{"sector":6,"length":512,"data":[1015096981,209014595,41713958,74794308,-1787156856,1128038694,638350675,1157790849,-2012973753,647330342,1094990977,-2128212875,1096024700,646448245,-2128177794,1968391228,2088838668,1967604994,2116454404,65286805,-2076820496,-1013157227,-1787230466,-1951586746,-1968429360,982874406,1972730374,2066122770,-1144878187,-1360499026,1913032312,974187413,1972731398,2133231626,1477837205,1175024238,-2076820666,-1010732395,-385863240,-1406730649,1702215690,104508454,1567987067,637718760,1347815085,1946344424,94431265,1362907509,-1960424075,2106271285,93201922,54296614,-1108853387,89712642,2145911787,1009808645,640447827,1946682870,2106271270,1879477761,1853268334,1074104102,643306869,1577207177,909854215,-1535994492,3389635,-1191315735,1049296947,110007686,-1595304590,39839865,1843942918,-399281150,544539767,477450556,641043238,637697419,-2144991858,208995132,-402501656,74777834,1534350140,-1962920776,-1902803394,-376081914,-1981253277,-396528896,-394984385,1064588092,-529182148,268826150,-1960440460,-1960443043,-1910111875,653126407,52692362,1015021753,-1190693888,20758528,1460058741,-1024933748,185032687,1569400513,1435182595,638970625,1963066870,-1940453729,-274208576,-1960442017,-768409251,-1787412853,1873215361,92871284,-1996333687,109249621,1577489782,909854215,57906564,-1006682391,-385862216,1048640799,1963356022,1093975578,2009007902,-1176597649,-1494024186,2005732212]},{"sector":7,"length":512,"data":[2097053960,-102009535,-796152381,-1946157128,113689560,637572492,2064005804,639792533,-1786600531,1851539083,244054019,-836004476,109970974,-216043856,520560292,-1785985338,113689345,637572492,2064005804,638875029,-1786600531,1851539083,132708355,-2076820736,-1007193451,1448127782,-1072976602,-397407628,1213792242,317454453,-930436058,102690098,1857029774,514126623,-695525625,1967675486,-1007514667,-1785971072,645100544,618695340,1020408828,-1172999036,-1002696704,12193396,1959279648,805353991,1383451708,-14308314,-2113535229,653822869,-154629460,1047890369,1967178230,179054087,1174501824,-466441178,108642314,-527794396,-661935066,-1040793549,637695236,52320173,-1905370050,57585694,-1839259899,989859304,1922401334,951632782,-68032256,1963114998,2065578528,185234837,-1953137658,-345082338,2132687401,189429141,-1953136634,-345078242,-1948004071,65262027,-1601762343,-1533607063,-1566602391,-49815,1398217332,571472,-395395397,-1420266039,-1031034024,-1901373269,-1013616122,1547567902,-1340174738,521505134,3717315,-1980004631,647333430,-2009691732,65286805,-1976137232,106414997,-919348429,-1786112373,-1786233205,-1787689330,494205499,1191545382,359940156,108159292,41384508,-2008866772,-26249593,-339213624,-2000092449,-2005961186,-1989262322,999655486,-1017182214,-523122549,-402652667,-1047825091,-1411329720,-1410088909,7071939,-385874968,-397409432,1968702050,309254]},{"sector":8,"length":512,"data":[1349957097,1870007946,88146101,-1056767997,-394982168,512360481,589721156,39357724,638028582,-544522359,-1430244437,-210798914,-212379228,-1899798614,-1955698682,191757366,-1961986570,191757878,638285302,669323,1955276483,-1960393980,-2134702732,24001086,-1195179659,1659437058,1870052982,-2010805722,843466532,92939995,108159292,41384508,76029996,-922859961,-855713790,-620566667,1849958024,977174723,997523822,1847723766,1446737216,16377943,1497116277,-1377298315,-401494014,-1561853307,93202175,171871014,28436480,983700085,1243515246,1178503534,1208388718,-1017225362,-385875016,1465284077,1946273000,12183586,-694084236,650153581,2506379,1946255080,77669902,1975520000,243948,-394935063,1497104495,-2098720139,642872576,2506379,1963023080,5892324,594891068,641043238,637697419,-2144991858,812974908,1962958056,16050219,501793653,1968389122,1007348511,639202643,1964115446,4188179,-1960440203,417858941,-392006399,-471138281,-1953132383,-1989287394,32434183,-1567256672,1583312442,-1785748797,1850351241,1850097289,1850214028,1851137675,-1785717111,-2147365911,292436542,-1041758603,-21239551,-264860733,-1005589651,-2081945484,-1956088832,-1955705802,914951284,-167023028,110029173,915107432,518745600,56396326,1888288951,1139299844,1031036416,1852311182,268760614,-1960441739,-167050380,-1960386955,637536310,-1224516470,74484992,637832742,671371]}]],[[{"sector":1,"length":512,"data":[7465046,-1911655330,644769798,184972427,1323070966,-1007275069,92048166,5630038,638088286,1963984118,-1007285501,57969446,1850619529,1850738316,75270950,3532886,639136862,1963146368,1552623122,1960512266,1955276297,126756360,-1018437909,1852311182,1845245579,-931793397,1845376651,-1468664309,171871014,1142852096,488842862,39422758,477420299,-1972406600,-1234209258,2139963904,-1947170045,1957098442,529212937,-294266101,-1977171125,-1144847801,-694063242,-1239971219,-1064418816,138316582,63406848,-208942453,175417075,303398,-428490741,1504756552,136219430,-1976646912,1139618319,840403502,983581686,121253486,-637336204,-1018562590,1013856928,1007121412,839087107,1592509376,973486736,-1023314834,26236139,505630466,606414628,842414386,792282167,341067593,307630933,240651607,442107737,257627738,291311708,912201566,982862712,1970158086,-1877218557,-1181025349,-1959919592,1958885911,-498908410,-1979336971,-370920762,1397781357,1465274961,570881542,125124718,1843543691,-395993624,914948771,76246614,578076682,645017660,360069436,477249852,141974076,309485884,846690876,-352293400,11528218,11539947,439095787,556534316,-13444982,-13706493,-1566850921,1049325114,898199010,1594343475,1532582494,95994712,1929111808,-1682269254,-1669751659,-1682269254,-1658479467,-1657430735,-1656906439,-1656382143,-1654809256,-1653760663,-1652187776,-1651401798,-1682268779]},{"sector":2,"length":512,"data":[-1650614887,-1682269192,862942911,1006930633,1008955952,1007580729,604664927,1916878047,2002402325,-109033967,1206023231,92848638,-402470658,243849195,-318607498,1849962120,245963967,753423879,41180926,-1950154320,126567390,74592316,-176801476,1007146984,1007580229,-2145225426,494153468,1948908672,1874246424,1913355496,10401798,-1996444951,-1200728522,1122566150,175761522,-1230828174,-1206482577,15120495,-1996452119,-1200728522,652804103,8435826,-1995962648,1131394590,76204339,578103100,168069702,1007776960,1174893863,658244746,126412917,-387235517,1851143817,-385873736,1581019633,-1975118987,122873860,-395001846,-2009058234,-348044537,1965243585,1364411924,1493830376,-1980992677,-1200728522,-1024917497,-434206351,-1239512211,-1206941585,1967718534,21465616,-1550195662,378105782,381185976,1843045121,-1553057631,45116892,-2146586429,58011388,1178996656,1175367875,1174778051,1174646979,1175630019,1174712515,-2145931069,158609148,-58715728,-1341950679,-1018804720,1181629600,-2146193213,58015228,1178998448,1175761091,-2146914109,158613244,-58717520,-1341950659,-1018804724,1181630112,-2146848573,58015228,1178995632,1176023235,1175433411,1175498947,1175826627,977174723,393549166,1049319254,898330082,-18749362,-1955710302,-1989287362,-1017225419,-402648391,58001840,-1107289927,1386299772,66620270,-2017444415,1386423159,-217637266,-902394972,68479085,1946172544,59172879]},{"sector":3,"length":512,"data":[1859534464,-401837056,-370474467,8370371,-1200572183,-1293352830,-499217552,-1405777043,510967818,-143253444,570881614,712327278,2067530891,675087988,1176466730,1828934,116841963,1967156770,74246160,1049350517,898199010,-351960600,-1564258624,1015059854,-385649628,-398065107,1014104797,1485277998,1958742946,634424110,1015054335,151418155,-345102330,758939659,-789112459,1848116769,-2147425663,1848120867,-2142892427,-965465028,771879145,-1568626689,-385871432,-1108840419,24373250,-1962812183,-2089950658,37053,-396947596,-51904051,74735361,9473535,8435907,-1955597079,-2089950658,37053,-1912666252,-1427570544,8435713,-395322135,-1628962110,-499217663,-1992980115,-1200728522,-692453375,99149934,-692452432,95938670,50378832,-395389254,-1168636458,937979606,77260804,1843543691,-389859957,1021837888,1592283137,1049319425,-2046857758,-1073020784,-396948619,1952383359,-1869742332,501793536,18475010,-638856969,-402476568,544342505,1485277998,1958742946,2147427607,1848120971,1948990592,758939655,-755562891,-1309949405,-385931799,79168046,1859566080,-1341824536,1859566085,87025750,16247134,1912759272,1976699700,67124528,-264426638,-1557760001,837316138,1025405442,427270144,-395432797,292684324,1848378939,4000626,-1559857248,-1091998162,-19863296,1849704064,-165184256,40772102,-2048383372,-692365823,-88414098,-148496267,33564678,639464448,3016391]},{"sector":4,"length":512,"data":[-379650049,297271437,1858070784,-385839688,62418617,1857284352,-385838920,1307078317,2942977,-393187861,-1073020861,-1101653131,210398934,-1589514958,-125079982,-1069694717,-1559791737,-1527550382,2142815070,1853614336,184556264,1444246720,850196363,-1947204636,728650254,-1985678386,1584288318,1049319107,119434836,1044103219,359951954,-315486838,-1101573823,-1493995818,74733919,-420742909,-2134679992,2073398846,179048821,1006990528,-1007192707,1963069928,840231921,-1394570524,108314634,1965697341,-68631564,-1192463103,115933194,852636270,168070134,1007973568,169702439,1007252982,1025143931,343157288,1390865222,1510068712,-2118591115,1843128576,-320088330,-1901967802,607944853,1380331893,1509967080,-1014355598,1006698681,1955631114,33536288,-1869607876,28907380,-1877853184,1007580304,1955631124,-1877591032,855798928,-397258295,1499135837,74771722,74764810,-2081697534,-1983657718,-395422154,314507320,856100514,227157723,283372850,-692169151,1587999598,-117241996,-370457789,-1679244295,1446414592,977006,1859534464,-1023314944,-385875272,-617386683,1597768842,-551286156,460472636,393697852,-2021113018,-75272490,-1978895297,1915763716,1983462406,-1998853141,-1016146402,-1996466712,862869046,1006930651,1008563744,1008301098,1008039037,1007055457,738359162,-695760864,-2092743058,-579514373,1859553222,434684672,85357056,-763166705,-1190235648,-355401724,-85796655,24433163]},{"sector":5,"length":512,"data":[132695033,1446414592,83487086,-1073085302,540807028,742131830,993789044,-347733131,1090634731,1140933121,1178944518,21319241,1279591493,1157973331,1179206734,1224820225,1145456901,1225147973,1162104390,1179190598,22302799,21823820,21954894,89325906,1162104405,5636422,4231168,33024,33792,2097152,1,0,33280,-2013233024,262146,1048576,-1634165096,-1633771880,-1633182056,-1634165049,-1625579809,-1622630594,-1618174093,-1614242152,-1634165096,-1634164722,1843535499,-1727248501,285492993,-2135357865,-1949158656,-1922176970,119410815,1844059787,745861947,540820140,-492170638,1189629939,1049186048,196636246,1809312000,-529265348,863242812,-663437302,-562750916,669731406,-1497869743,-1176859543,-936677978,1843535499,-401973365,1499094434,-1956010306,-1982331938,191752734,850228672,512469696,1468624354,1959922444,38272781,1842087555,-837385471,914948205,2005757416,1446414608,-1009644690,1846165120,-1957464832,-2123505090,1955053823,-487620273,239438080,-1913484457,-402615619,-396427033,1166630066,-1836741366,138774784,-1995422323,1851171589,1166655539,71665922,-1996077687,1166543941,-1870296816,1843962624,-1989285213,-378674626,1991794004,1796466944,-385873480,1049324301,1569418722,1556867082,-1911661173,644782086,637749129,-1023060087,1846165120,-1957989120,997057086,1953358910,-1866628287,1081409536,-1956834328,-2065167779,-490241700,-499218176]},{"sector":6,"length":512,"data":[-16809619,-1960676204,1851171589,-1962654325,1157826133,13796108,-401973877,-1070375795,-1553078109,-571904534,179880796,1788602624,-385842760,1631349397,2050754162,539755127,256195,-2030040600,520494839,119456519,-930436436,-1527517902,-1316669,-352320280,-1408819482,1975519914,-622279686,321791,119461355,852003500,849671149,-1396462912,1193642534,-868562806,-863370634,82046258,41264883,-775699398,1940255721,-37510143,-117182205,-372158642,1319371123,-56233137,-434205757,1036190573,125203392,-1061436629,-1547500689,1354984934,179106443,-1946454592,-1949684786,460225,-395405637,1465411657,-1413467222,-1974883413,-225727807,-1017600781,-2115204267,1442882284,1451820631,516983806,1959922183,-25785538,179100467,1007449280,1022719068,-1946979026,200272862,-167283493,527728834,-24382581,-1439780785,-2143185730,-889319454,179046260,-335841856,178957557,-1963297344,266567902,-768408203,-1224691479,-1948004096,-2143180105,-294387652,1971373814,-27882671,593175272,-562741054,1946172544,1589546457,852636671,-1394570524,141869066,91503420,-236240214,989626446,-58717836,-1341885348,1447209564,-1392609653,1975519914,-1923981574,-385917290,-1037870369,-1133225408,-1098041109,-768344226,-527768526,1958742700,-347952636,989626613,-58717836,-1341885348,-1958565284,-25785377,-1073042772,977013876,1547437172,-74714507,-1232212245,2123104094,5224958,1958742700,-119363069,-1951743950]},{"sector":7,"length":512,"data":[1583286210,-1017256565,567099828,-919354372,45666867,-64893630,-919383982,12112435,-64893630,1371757144,-1030879657,-638060149,856678787,128644032,-1048356513,-253656305,-1910631965,-1261401126,-64893632,990212639,-1023314495,-385871688,-1910609807,-1150440418,2139095045,91553560,567099060,-75283460,535786772,-1957210429,-134575120,-1957539615,-1947994170,-137917480,1523092449,64160600,-1017225263,-1957341354,1961561065,-1663366302,-772339079,-1048325129,13861633,2040320523,-137300214,67026,-1962880381,872123377,-1109707831,-774832095,-835988527,74702619,-552350205,-774843915,-361411118,-149980771,-2083260463,-746389055,91856128,2040335851,-137300214,67026,1560334979,-1195155873,-957808578,607944807,-347732875,-1070362561,-561262029,-315487094,-2143622784,645073601,-268385545,-783211403,1389548000,-773795504,-773795374,-1056745006,1506874201,-763117309,1174894592,-214184213,-1007091337,-768360397,210427531,1919023488,552173571,-2143622784,192023233,-2145916544,343082689,-1257586304,-773795580,-32673070,183924173,-756332863,24638267,-472136711,1406874451,1071242379,1258296507,-2124677771,-2129707037,1526939643,508757699,1011949139,1007645696,1007842305,-1709870078,480314435,614077419,-350445310,37657100,99294369,-1593681766,123468828,621299595,-12746753,-1023314817,-385839944,503736041,-1705959853,487194633,-2147219460,113475644,508960339,760403,1543249263]},{"sector":8,"length":512,"data":[-1947204857,-14350265,-523157377,1381172931,1394529419,508698192,825942,1526472065,113444699,41418579,1394489343,1107388826,123468829,-1073084733,508762996,-1469794221,1207324686,125075465,-1593688422,-1710888164,480313892,1394496347,1107363738,-1990460387,39291143,175366865,108380683,-385856328,-1022925223,0,-2147483648,1392918526,1394496286,1577059994,123468829,508757699,-1705828781,492699722,-1962451972,38216455,1074022179,-1195179660,518586444,1946303590,508757540,1012080211,1007383552,-1710328828,490864640,194645227,-350409216,7903749,1543249198,37536519,1392922996,1394496286,594804796,796132412,1107328666,123468829,-788117621,187986912,38210311,1963214603,5027882,-1704606487,487653477,-1962451972,-2135293369,-1710298241,487653680,-1962451972,-256244153,1002578815,-1009355582,-1425276898,-1434080559,-1425692042,-1432966489,-1436898641,-1434670484,-1442403618,-1427330330,43589,1095763515,1145391939,121438208,1196380752,5062994,1225666304,1162629197,1414415693,1330205761,849957710,1414416649,1095127621,17731,1314194503,21577,1313409331,1381123412,5525589,1091050240,1280267074,4543573,1158162432,1380275288,4997454,1174874880,1096241743,-1452129198,1398080585,-1449962683,1095501108,4998466,1191456000,5198927,1225142528,1313426510,581548869,1397048330,1129665108,-1303228588,1124802985,1414745679,1413698898,21071,1230374731]}]],[[{"sector":1,"length":512,"data":[1096111186,950618188,1245859590,-1017887931,1392722089,-1448455099,1229325353,-1446165172,1313407536,55443456,5394264,1392722432,-1451601336,1213399873,889192524,1146047747,52668906,810961220,1308833450,-1449178039,1330512695,973078612,928141058,1090722986,-1452981170,1230439501,-1437448108,1094911007,-1443543725,1414727235,1196312914,104770047,1329808722,17490,1179583033,85830171,1095914049,547962457,1313817349,-1438755757,1498678341,-1441512112,1096155978,631901778,1464812550,-1655745458,1157899946,-2025499828,1426409641,1279874126,104835547,1162888530,-1436396479,1329857060,88910370,1279871063,1185595973,-934325246,1174612650,-1430760881,1213465668,-1440133563,1179189806,137144974,1129207110,1313818964,154970699,1129271888,1381319749,665507653,1145980163,85895928,1229407554,222199886,24444989,2144963,-2097125400,1049168071,109876626,378115476,1726518678,-1785552639,-1325396219,32035588,-395459066,-2051538523,1662314626,971559475,-1740732160,-1710846827,149586837,-1784932727,-2147348504,37555518,-488107918,222199810,57803581,-402446616,-1024981992,81455108,-1587349016,-962357868,512476013,-1014075962,728615073,722826947,-1173260606,-12714000,-1324977393,-1948200188,-1006685232,-385875528,1379689225,-1030992523,-1977251290,1007625412,-163809535,242487492,57510694,25004838,4623910,20767467,-1960441996,-352316882,780871173,52822032,-1960443027,-12779450]},{"sector":2,"length":512,"data":[638350591,-1912519421,35032002,-1909527698,642837442,37488010,-1960425100,637537326,637627651,933515,8258342,1023773478,796196863,38142758,706120486,-1841394944,-1774306411,-1207537003,2129199105,-1899656094,-1416260602,-1951677813,-980702266,-1841395285,-1010463083,203328294,1066083840,1979711363,-1960393983,-1960443321,637537822,-1960443645,-1962923498,999658046,1922405950,112646,-1939719959,-1811509563,-1031033963,1353496747,-1411871573,-1785577847,1438893454,1842749067,-1343700082,512435967,-1960443894,1105842447,-1960426685,1962281783,642139685,-1958345590,344598270,-100403662,1917992007,2001943559,-18946045,637791875,-167037813,-790439051,69110566,1977289472,516119991,-1785577787,989857982,-2096728841,48761071,1438850816,1465314443,-544484813,-763109885,-773140224,-119307301,1468729227,39074050,74582903,91423801,-351746429,39139824,74910578,91620665,-351735933,2012691440,309528,495393931,-964486007,46629634,-276565278,1995914000,-25282108,1988561267,-6297346,972977803,108461174,-386105717,-443809903,-890715299,-1157161470,1072189440,46131202,-1593656088,-1064407594,708741926,244000256,-1960443860,-2097149922,800719811,1189611088,-1591343360,-1073020924,119463029,1845640843,1841565323,-1957677893,2877651,1845771915,1848249995,-1957676613,1829075,91105953,78708751,100919507,-125080060,1069271347,-388789424,-1329397759,39512096,-488061045]},{"sector":3,"length":512,"data":[508757505,1346681607,855753192,-1962679333,-1014281255,-388896559,-388896559,-1024932093,-389838079,1220215327,27322448,-1293368949,1347205889,1526830568,260711943,-1947669198,-400510975,-377290224,-150375662,-400510759,-102628860,-628422882,-402558488,-389873167,119407085,-397389893,-488111774,-1811509759,573077,-1342056216,31123488,-796152538,1592306982,-398807039,-1031077428,-1191095064,548405255,-503201816,-1951586567,112010968,669565070,909838081,-932014702,1842782659,-4603762,378218239,-1960443880,-352317890,1972053565,-97530,-234671756,-2095215834,661979131,38046502,91537723,770230411,642928896,-485995381,1543710224,1418405380,180781830,-503290904,-2091296005,992348359,1962938430,77670076,1975520000,1055441827,20703233,503730515,1349696263,117485032,136219430,63144704,-1342135832,19327016,52843355,-2097146338,-1880619069,119408128,-397376325,637993094,532107,-402406525,-85458822,861624576,-1977170963,-1073068540,-1073084552,-342345100,-1971379192,76162784,-318025658,-689437835,1388481280,-402651462,-1336278904,13559840,2793766,-1342155544,12773434,1256768395,-444381952,-670869501,-1427586238,11003904,-1883568354,1894480,1842742926,205425446,915088896,52822030,76228149,38077222,-1023403800,-1977200301,-339146225,-1977203959,8054791,-176829954,113466201,1381061463,-1185943365,-796195836,-1785184572,-1031093549,-1428746460,-193606146]},{"sector":4,"length":512,"data":[-1785184631,1599822170,1364443911,-661957038,-1107294791,473649126,-964491917,737665538,-2029291823,-400510774,-102629332,800115335,472629502,470022771,-402471293,-287178728,1532582494,-256158781,-686873521,-1341658277,190477,1460013744,-1785184572,-1740731990,-1673643115,1929863061,1397801729,244011601,333682072,-1785198905,378208256,-1070361190,1845894795,1526053352,-1017619623,1841706751,-400509208,1994916445,260171779,-1895470360,-1016216058,1458342741,63408983,-1519162,-1953029098,-16731938,1956063254,-202684925,28368779,-1758980353,-347143308,2012691443,639041290,995051159,970487543,158596734,-385976697,1988886462,-59360770,2123040374,-5183236,-1017256565,-1189193898,-503906295,-257822581,-1898410347,-201378880,1583292324,-1185458493,-963969015,-259268105,-503855221,-1910572917,-392826850,1579090198,1008634719,512630423,1465292578,-422448341,-405669077,92734603,1599997065,50381599,33751297,1444807427,-164409257,-1962931783,-1948125245,-266432776,-1073063787,-142146955,-1968096581,119801925,-527771858,604521610,987180551,1999532740,1962949680,105155348,1913013563,-1960675552,1161495620,-350850556,1963015192,71600906,2130986299,-1962218744,-351978748,-352210936,167817218,526278592,509040323,-150991687,-1578071071,-661744054,-13385586,1595909363,1465303902,-1962931015,-1948125242,-137917456,519605217,-1773527410,520114664,512450398,508270354,-1759764850,-215263402]},{"sector":5,"length":512,"data":[-422451503,-405669077,76277713,76088711,-1021354146,1347900958,213513779,-138179840,-1896313887,1486244382,41271306,1150023559,138754824,41025968,-1073086288,-1021354401,92669066,1195771016,-1262225694,-64893630,-1195179662,1927872528,-971076772,-1581019539,-1020564024,-1037363850,-256241290,268385791,78710387,-796139309,-1195114701,1256783873,252006748,13796096,-788527943,-489106966,-971600902,-938570899,1003105133,17201089,1500366342,112835,1398546665,-1962518703,-1950183720,-425525,-1190955505,-783216641,-773729823,868234209,1504441343,-1056718708,-651444082,1594350967,-1950131367,-1992293308,-503902132,-1729624206,240421375,8108227,-1101276951,163157474,-2103296,-1181350210,-689438714,-1776763137,-402651975,1019150285,833942,-1090534168,146380384,-4462592,-1181317954,-1293418491,-1768505601,-402650183,-1463877719,178582,-1090543384,79271610,-6821888,-1181299522,-1897398264,-1774149121,571712,-1787633161,-1979767064,-1583932394,378246914,146380548,-2112976640,-2084502634,216531154,-13375233,-1769990519,-946412895,26668550,-768393216,-1979779352,-1583944682,113743604,104192,-388877504,378142435,1319212798,-1779129450,-1198118237,77791248,-167327850,-788528491,-388877344,378142403,213423618,-1774542080,-1775499577,-523173886,-1394027981,941001214,1095830,-946446685,43405318,870371584,-23729966,-1772349815,1692979763,570854654,-1981099625,-1902691818]},{"sector":6,"length":512,"data":[-1080655866,-1279393784,8436048,-1329355277,136219393,868823918,-30414638,-1986670941,-1953116138,-2082960438,-779931453,-1774288128,108265622,-2096053373,512295121,243897832,-492726806,-232327275,332923797,-98661942,-66156139,-1779129963,-1778112777,-904669181,-1777590647,-1777463671,-141162847,60167718,-1983245352,-1986650594,-1583996914,653760024,-670853592,512346643,243897904,715232818,975632278,332923798,1109297610,1141803414,-1774411370,-1773394185,-904669181,-1772872055,-1772745079,-141144415,60186150,-1983245352,-1986632162,-1583978482,653760096,-670853520,512346643,243897976,503551610,236164866,512333572,243897994,-2069784948,-1809385578,332923798,-1675720246,-1643214442,-1768513130,-1767495945,-904669181,-1766973815,-1766846839,-141121375,60209190,-1983245352,-1986609122,-1583955442,653760186,-670853430,512346643,243898066,-861825324,-601426026,332923798,-165770806,-133265002,-1762614890,-1761597705,-904669181,-1763434871,-1763307895,-16729661,125293067,2013200445,1355320066,-1949988014,-255006505,-1054123942,-788473213,-773205527,65655273,197823481,-1009617464,1224887435,-1336858762,136219392,139234158,-402238325,-1957036887,-503902140,285623297,-1957361580,2089488492,-5904370,-490814627,-3348331,-392825666,113180614,-4134762,-392816450,717160378,-4921194,-392807234,1321140142,-5707626,-392798018,-2067857502,-6494058,-392774978,-859897962,-7280490,-392761154]},{"sector":7,"length":512,"data":[-557908086,-8066922,-1962889021,-1955723234,-1953116146,-392835562,1048837169,1946195606,-871971066,-1191178091,-628359120,-392847688,1048834062,1946195606,1095947,-759637364,-268638059,-1325435928,136219392,2047773550,2014743446,-67901290,-1953037663,1435960342,-1962932035,-392789954,-1767768333,-1734131562,-1768505706,-1577118232,-1556048216,-1463904598,-16193386,1448199005,-964485545,653079043,-1958343542,1100406846,-1763701247,-1763176959,-1763043709,168230656,-1912190569,529984518,-1070422797,520560298,-1017553313,1614118,436615974,643265536,1457803,-1977202197,1946369029,1963211780,-1777819342,-1776933129,178385035,512630423,76125716,54889254,637682825,-1996143221,-1960901564,80118775,-31768,-6942714,848693254,1300899565,-947699449,653853447,1588795,1388556402,-1771921066,-1771034889,581038219,512630422,1143707246,105154820,1778843423,1644625814,-1017487722,1654740562,1881601942,-1578071146,378246690,-1910598146,-1986630114,344523844,1166747167,651725570,1443331,1465274707,-947652469,653079047,-1958277750,-1953017290,-1953017826,513204246,-1762910578,-1494001839,309614943,1928477507,-337956092,-8617970,1189704704,1015085035,535393536,-164376013,494197515,135674690,855929494,-2095911982,-1910634810,999691294,-394977508,-1756097021,1499357002,512630363,1418303086,1516117762,1381061571,-1776639658,-1775753481,-768354165,139299622,-1960426781,1963140660,1837835780]},{"sector":8,"length":512,"data":[180847366,639536670,92939926,2025851463,149657603,-527794396,1191545382,1946157117,-1993373429,-2092825993,-268237629,534438469,-1776151039,-1776675327,1532582494,915089091,-1960443890,-1157623786,-230948865,-1960433037,-8190340,52196607,1015228153,638874879,1946311995,-294133,-1293417612,-19601154,-2080411928,-756348730,1962933123,-23074557,-1771396669,-1772210549,1545506334,205818262,-1777295073,-1778108789,35556894,138709398,-1760911073,-1583918941,1386452704,-1777294953,-392735581,-1960378874,637540366,1707579,2028471156,512435967,-1960443862,184561166,637892041,2887307,1543933446,1581157270,-1778474602,-1413248085,-1951678413,244034497,237737534,165910288,60182177,-342422522,-22986492,-1047811179,1645120427,82004374,65750855,-1951678413,1049340865,-947677692,33984002,-1274892138,244034308,378246936,-903112938,48480307,-1951677813,244034497,-481716728,-347650300,-1413467389,-1951678069,513170998,-1772347762,-1961997173,-1424028604,128696715,205425446,868233984,361440969,1962932867,512435734,-637337586,638028582,50484619,1334519490,113912578,-661925493,-1774567797,-1774713202,-1760162165,-1760293333,65257523,-1416162143,1202438539,-18361,-1413248085,128696971,-326412861,1443032195,-1758027433,654198409,-372174965,378218049,1128464422,188189478,-1960282890,63407102,-1977162702,1207436037,-1756875205,1048579702,1946261318,1995586308,270002179,187992870]}]],[[{"sector":1,"length":512,"data":[-489130506,-1780178483,-1757673941,-1712782473,973486848,-1207535977,-1360461701,868780884,-13433152,-1759377778,1988865011,906923006,-473027689,-963948254,-150992711,519605217,-1759764850,520373643,-1759902165,-125050671,1185662603,-941694375,26682886,671532977,-944684393,-392748026,1010207664,-465663081,803753877,470191862,439782295,-1948349545,731245582,-1960647730,-772068354,512630503,93034274,1958742815,573197,-125048841,-1962621053,-498684986,1583286238,-1017256565,1431393879,654216019,638670219,-401652341,-259322957,-2145481186,572310,-661920777,212929139,-645078317,-628174589,1334511498,534378243,1006633661,-1122798333,-1293418493,-2084009110,-165280575,41156869,106643777,-1779431794,-1080695647,-403242999,-1014237045,-1413051477,866894219,-980702272,117376938,117413348,1499305452,868441950,-1756847168,88357158,958806644,880022340,-967354797,26692102,323783462,91523878,-2093743322,914949318,-24406200,839108483,92940004,-397936637,-141881683,-502675837,1532911589,243992259,-481716764,-268005825,638869,-1779681653,-1780206037,1569400390,109970946,146314880,-1947994368,1359770584,-489485135,-788282996,643416718,1965899648,2005476868,-947714292,-773700087,1048822535,1963038518,1185006337,-1760648298,-1550434655,28874514,906377984,-385650025,-1185939257,-503906296,-1910581109,-1953031138,2005598847,1465261830,204901158,1963140608,1049306625,52822030]},{"sector":2,"length":512,"data":[-1910614212,-1953031138,1200292943,522160898,-1583922013,653760062,-125069748,-1936331615,1243516634,-1996125802,1300825181,-1960420602,1141057031,138774786,38767398,38546214,-165258402,41158660,1300875571,-2454006,-392827850,113704661,-1593796790,1017353700,-1779654249,194452131,-402426661,-1070334398,89951014,225762059,60180129,-1550430714,887658306,-324969987,515976085,-1773527410,520242569,-1774319873,-1773795585,820592728,236358655,1175358359,1319192982,63439766,1993423824,11004163,-1555512693,-1031039170,-1760426453,110575779,725701201,-1077769270,109969412,1202427676,-85835705,-1759115577,113750470,-1308322008,-1759246649,915124653,1049335570,-397437378,1499132842,-1759770994,79610507,2009152256,1015752213,-1757528533,-405674031,-1425881213,1074054787,-1031018517,103536779,653760320,-125069748,-1912289405,-1953084922,-886357551,990219046,991589059,722892738,-778617338,-1948200480,512630512,1149998876,-1993990398,214401797,-955786526,26686982,1141294848,-1023410025,-141148511,-1953084378,651310072,184835211,-1957530405,63341555,-1977160398,1190200076,41714470,115635200,1459915558,-1912601921,-1953030650,-225030642,1341116847,-1906325621,-1416214010,-1951678413,-21451838,-1070355457,-1962431573,60182038,-6928874,-6930938,-342473210,977177510,512630422,1435080248,-1950146812,-476670450,109971016,197105316,1166681600,1962949642,-1960421582,15621,-1912200076]},{"sector":3,"length":512,"data":[-1147750906,-470351870,-1960380277,768773,-125049865,2105550343,41222154,-1977165589,643762757,-2096478840,-1042150457,244040455,-108816746,-385649408,-1912209221,-1080646650,46006283,1032005120,641496064,-1912207989,-1164541946,-487129080,1946221187,268483343,-138245296,63147235,1489211096,-1960388469,109969735,-1993959754,46564100,-6903135,127314438,637896998,101074315,-1769994610,-150992710,16417762,12259188,-1031057392,-1014176777,-1014048765,651725656,117524363,105220390,-502544509,179852,-1767240053,103932745,-1766455666,117738278,1358957503,-1768550773,105199910,-947714700,-1577721333,-1054108010,109971008,-1993959754,-2091317500,-807271738,915129095,178361860,512630423,76125698,915088927,2045247496,-1778474505,-2087239005,-315489338,51153446,1273513713,-1773755906,-1583936349,279156286,-1779654249,-1550379869,-459172070,-1757633643,1252180019,-1758813545,-963163997,26691078,169773862,772196096,-1593835369,816027296,-94771049,-1768538493,103969792,-1765276018,-150993736,-1953055706,775848920,141820055,647442593,99288969,509734,-1758551808,38242598,-1765538049,-1766062337,-1779654393,-1550379357,-459172070,-1757633643,-1757018426,512435712,113704998,38702,169753382,-1593216000,816027296,-101586793,-1768538493,104690688,-1764096370,-150992712,-1953051098,650130392,-1993996407,1048773191,1946195758,-1758420727,71797030,-953809173,1095,647442081]},{"sector":4,"length":512,"data":[-16365687,-6892026,127323654,-1550455647,117348120,-1578592470,-78255877,112835,-1550455645,279156222,-1776114794,-1550432605,2091095658,-1769036906,-1550409565,-995912014,-1764318314,-1550391133,-89942262,1260816534,1141294999,-2013265769,-1953026778,-1905404386,112835,-1550371165,446928356,-1777818730,-1550434653,-2036099486,-1768381546,-1550407005,-828139844,-1763662954,647426723,540299,637781891,-134019702,876513607,-27858793,-532760,647364102,269963,125098763,-184096685,-391582885,585694580,-1090052355,-71789154,1048816466,1946195606,34191365,146277355,-392058110,-367621226,77206,-1426007421,-1582579061,-1421306102,-1953037663,-1181285354,-235470840,-1769692757,-1780309589,-1589164117,1202427470,1007027015,413248406,111258518,1319218070,1621207958,-1070355562,1048619947,1946261319,-1431590139,-1582626581,-1330942462,-1582585342,-2085906704,9868862,-1085859980,-1767795246,-1465799786,-947672170,-1766153980,-1764974165,171754411,-58710923,-1341885184,-2142049522,74777340,1240142000,1963261056,-351293436,117211200,363869557,205273067,-58708619,-1341885183,-2144670974,74777340,569051312,1963326592,-352014332,117211160,179307637,-58716181,-1341885171,1392962310,-682502725,-1008455077,141934603,74830347,-1023409736,-1960387961,1004177183,1953380374,178841605,509022323,-628164469,1703544202,-396419327,650379120,637949323,-402373237,-259324801,173378342,138775334]},{"sector":5,"length":512,"data":[503608040,-1979949371,1200162423,1166747144,55019778,-987839713,-1960379298,1200161349,1200113667,516103941,108888870,855930112,-1962677258,1590030966,1166747388,55019778,520517513,654311355,-2096728693,57999614,-1962888727,63407102,-1977162702,1207436037,641007398,1392671872,637930357,-695532401,-351582835,1435182600,1166747143,66447365,-1996189914,-2144929210,1951597180,1166747181,-294143,-1019534220,1344151671,-1896593781,-1147760098,-470351867,130472075,1200183360,55035649,-14745600,642839622,1392671872,-1960442251,82512205,55413542,513215137,-196703408,-1768808818,-150993477,-1948742685,1200224838,1200183299,197145089,-1342016055,520587392,-196673701,-1946973208,1962281969,-11540221,-1960436029,-1960441259,1692928069,650676995,425347,-164428683,1988821995,-1767857678,-1767495945,-1532897141,-2082959722,158597625,1204227977,-352321278,509705,38258432,2005467136,38177540,637945737,-1995422325,1204160583,-1960900598,-6905802,-6907898,513187846,654073541,-1996339829,2005467975,-4514042,1972053759,16679686,-1226243211,-2080470272,-466484281,50694694,-14268424,2088773172,192238338,76490246,1166923403,638118667,638014859,-402307701,-1893334333,-96040700,2088773200,477451010,272465958,113643644,-1560176851,1122539307,755418630,-1960443753,82512205,55413542,513215137,-196703408,-1768808818,-150993477,-1948742685,1200224838,1200183299,197145089]},{"sector":6,"length":512,"data":[-1342016055,100017792,639464464,490883,1275855988,1208746731,537261606,1108083316,1074132518,1091306100,1528760200,-386644225,-242486700,57996811,-46359,-1013502458,-1756690746,29681665,650284038,-386382453,642779182,637685131,637814155,-402238069,-165216934,1946285381,-351948284,-1006521854,-970523554,-1993986809,-2010774705,-1993996969,-953809337,268439111,21481254,643301376,117983113,1435182787,1166747142,30795780,-1977159541,1371847429,1589976791,108497404,38112038,520308617,-466477373,-682502725,-1979943227,-1960442300,1149829701,1166747139,138709252,105220902,638207113,-1995946613,-1960440764,1149831749,516103950,-939755835,394820,71666470,638076041,-1996071541,-1960441252,1149831237,1166747148,239372554,38112038,1006847113,-1341885180,1008528134,-166890238,74727623,267060656,199952816,1950402550,-352014332,-2012696574,1472405252,240487206,205884198,1963349563,71711493,552085364,-129595135,-2145481186,572310,-661920777,212929139,-645078317,-628174589,520898443,-336181623,-129579174,1183514634,-163149326,139299622,415728449,-24381557,839108483,92940004,508033027,-1760944501,-253564845,-1896593781,-1097428450,-420020219,-1990659957,-1960443580,1149830213,312835,1963063683,-2147170813,-196673761,-964429941,1606148616,-59325154,640222406,-1996339829,-1960443068,1149830213,1166747144,172263686,138775334,638207113,-1995815541,1183517764]},{"sector":7,"length":512,"data":[105155064,-1980348789,-1021375420,-1756676480,-971803391,9915142,-1758839168,-2144635647,1083657230,113648875,503682892,-956539195,1204229639,-956301311,262983,1073890955,-2096740471,1586038979,639508476,637949323,-402373237,-1605305498,1590007628,587712252,83911,88573952,38112038,1476609929,520505225,1975520195,1976699656,112644,-2024779069,529213146,373021319,91516472,1929768424,-1957210076,-628220168,41713702,638219603,2081439104,-351227900,-1979348478,1595867493,1526375400,-1064546109,91541563,79987544,1431328963,-326898549,1364612879,2088773203,209015554,272465958,1187382908,300617969,-1957212154,-1030880130,-2012902874,1482682694,75401991,-2147054074,572310,-661920777,212929139,-1047731501,-1030827773,-1979824500,-1977156514,130190343,57982986,637573609,1392671872,-2036263052,-196703850,-1986621791,1302458950,-2046426729,-1912209002,-247035242,-1960910710,1371847627,-1897888041,-1999008806,20717351,-1897396875,1012788218,-402295550,1424751297,91554620,-335833368,1963342923,-23795707,272384747,-1075313291,1010428924,1007186952,1006924804,-402295545,686554371,91556156,-335905816,1963736095,-45619195,222041835,238814324,149423477,1007283197,-402295537,15465861,1600018779,1482548619,-1023097725,134608422,1183516277,-196703750,-1756690746,873892609,189107607,-1979804952,650377286,1963081088,-1960393983,637537310,637623555,637687691,52830091]},{"sector":8,"length":512,"data":[637537822,-12777589,-1023314433,-2081649835,1392905708,1573135952,-967309809,184611654,-972786472,1476522822,1187448667,50331892,-62486078,2793766,855525001,100017856,-1342016248,-163149816,-1986590047,1048640070,1946261293,-298915837,40143398,604342822,1963211839,-129579253,1187381280,1961597175,963969084,32734848,113642101,-402548916,535560006,519587527,708739072,74776983,49835651,326992678,-972524544,26692614,-1325452824,-163182064,-336116088,-209813449,-972393215,93801478,-335606296,-129579233,1048576031,1963038506,-126975228,2105746946,141819923,-1756625210,-17242107,1175064752,-146372362,-812924020,-1779431794,-1080695647,-403242999,1183578251,1048620026,1963038509,-1758748411,1183515627,1183558648,1183558652,1183493118,110013175,916559644,573335,-125048841,-1416150367,-1582579317,-1951689236,-5508026,-1953024506,-3961095,-6953978,-1953108986,-1581031963,1183421924,-469303298,-335085675,-1760910955,-386120055,1452010792,-163148808,-1979904280,-1912145338,-1953107962,163577414,-1947732224,-62485512,-96040021,-1413379157,-1968454773,128643398,1963343043,-1009634557,24379964,-1957474109,63144922,-1977162702,1138230023,-1757143493,-768408459,1460020203,470191697,-1758027369,146786443,-1947732224,149914616,39664422,-1960380448,1599669333,-1017619705,1448235344,-2080470185,-1363278905,653079120,-1494020726,-1031004299,93799585,-2014838773,109970946,146445952]}]],[[{"sector":1,"length":512,"data":[-1948059904,-1759862280,172329254,1516134151,1438865497,-326898549,1381061391,-1977199017,-58719644,1999794768,-4181453,-392758730,1918436542,-247019996,1166747141,-129595134,-1996125402,-617351610,-1761997253,-1960441739,-1960442275,-286784435,11725310,1968307328,-247019963,1166747142,-129595134,-1996125402,-617351610,-823604941,-96039938,1996496957,9103619,-2147054074,573334,-125048841,212929139,-1047731501,-1030827773,654067339,117523849,-58693397,-396659374,1584530587,-1757135229,-1962052608,647447582,2081439616,-15407101,1460062347,-1476031962,638415888,637754763,637631883,-320141426,-1140936984,1607946725,1245609991,41222551,1183320076,651856881,-1996012149,-1960380346,1183384901,-29103882,-58717973,-402426029,1600060633,-1956947622,1371758053,-1927391402,-315489163,1091340838,-1762509173,-1762521599,-1761997311,-33124858,-1527570538,1595868958,1371756894,-1927391402,179897461,-230782208,-233963114,-99745386,109971094,-216033538,520560292,-1017553313,100787250,-964454940,76162563,100778238,-293366048,-569966845,-1960393834,637540406,1717819,-1960432012,838866494,1166681828,650182151,1912814976,1031808530,-15960316,26664454,-6889466,93718534,-134021113,-646775237,512435907,992346136,1962940958,1364443905,238455590,378217984,-4653040,1945254911,2089494060,-31994,-83681676,-12811482,-1960438156,100730949,-1960405478,-1053097403,117376628,-930376094]},{"sector":2,"length":512,"data":[-351746429,-1017423408,37584934,1405288821,-1960422831,637537310,637623555,52830091,637537822,1962884995,-402542509,117440310,-1960405442,-92073643,638612736,1024411019,125108224,326992678,-1960414208,-1919470570,28379973,100688616,-1004122029,1476792157,1532549131,638219271,1963460086,-469303548,1569400469,1960512261,58779651,-1017423526,1913555793,186704790,184841664,504919250,538873430,972436375,956658948,175374932,-502741373,1495228146,1284228089,71600902,-1994432776,1503087886,2088773315,175461122,272465958,280298620,372968427,74815284,24626747,-1030991165,1526703592,-1957300621,1464881900,-2091691690,-2144992020,1968374396,1031808522,-1257997296,-1258099952,-1770872576,-1757936069,28837490,1103096064,-150992710,-1980199966,-1945701818,537300674,-62485609,-1413313621,-1761339765,-1147731295,-201916408,-1070355648,117376939,2123077234,-2132528388,125108477,-1979348442,-1979520024,1370733509,33948119,68584343,-544538473,20759946,-1960436363,-1960442281,844170311,-11933495,173509414,138906406,1509900008,1006724841,1008694274,-15174397,647403526,688003,-2094659723,1946159231,-1442382071,-385619050,-4521822,1972053759,16679686,887686005,-263796991,1191116800,-390057232,-24379994,839108483,92940004,1363671043,641007398,1392671872,-2144987019,92016701,-1243065420,-1893333503,-1915319548,28379973,-1960441109,-1960442027,-919468731,654229224,643368079]},{"sector":3,"length":512,"data":[1392671872,-1960439692,-75300539,990344447,-16549949,-661917626,41713702,637957459,-351701621,1972053508,1979058947,109971081,2123077408,-263812110,105220390,-2046426873,10611094,74712636,1349849148,1946286464,-226587870,101238659,-1759508850,-1414807501,-1962431573,1913061371,33981334,377686167,637572868,637949323,1359234443,-905197429,-919468684,654193384,-2096607861,41156857,-346487829,-569507504,1240160662,141822012,74712124,292882236,106400550,71797542,-389467567,-346423805,1963932716,1468737064,1200301582,-27903220,1178278773,639006204,1074284427,-1769601535,537300486,-228684905,105351462,79987463,1600018779,-1017256565,642995974,637689227,-1910096501,629810695,-2147000485,1064438268,-1073080713,-1977217676,-466484155,-234487488,-399840362,636222457,1997274240,1958742544,-234454265,367725206,-335803160,268206096,158666103,91537418,535347250,-104597252,106125251,-1476031962,638415888,637754763,637631883,-320141426,611778876,-1960441996,-352316898,512435717,52822032,-1960443043,-49913,52826996,378208581,116092418,21349414,-336018804,1527249153,1364443999,-58698153,2002285136,-11737064,28332402,654031336,637687179,-919468661,-335740184,1375502398,28316533,654025192,637687179,-919468661,-335746328,1392279590,1894259061,-1340312833,-75175935,123046694,88443686,-857159374,-2146898948,58151932,1593577960,-1017423521,-1960421801]},{"sector":4,"length":512,"data":[1105842447,-1960426685,1962281783,-2080470241,-466484281,50694694,-1977202696,914948708,1911068466,881534719,-512362997,1600050914,76228291,-1773257077,-1030953007,-1759639922,-1912239834,653669058,184841355,-2095680266,-1977220154,1190265620,41714470,-1543168,-342475258,-459160606,-502922859,-435799147,-1560055147,144807398,101056918,168180630,-1560055146,446797322,403046806,470170518,-1560055146,1050777116,1007026582,1074150294,-1560055146,1654756928,1611006358,1678130070,-1560055146,-2036230556,-2079981162,-2012857450,-1560055146,-1734240632,-1777991274,-1710882410,-1767202410,-1767373311,-1767111167,26655905,999733766,1922481670,-1765891325,26660513,999738374,1922486278,-1764711677,26665121,-2087254522,9898006,-1763572165,-492633230,-1762483818,-1762654719,-1762392517,-190643342,-1070349418,-1550457693,446928392,-1774279786,-1550425437,-1734109562,-1767201898,-1550402397,-526149938,-1762483306,-1898410813,-1194183744,753402880,504793569,-768407913,-1931412760,-1953030138,-1177406526,-235470840,127350947,-1631600589,23378325,113748723,16815874,-1550383965,144938758,-1756913001,1842749067,117425038,117413454,117413562,-2115463476,1048782591,1946157102,1191626245,-1960443497,-402651082,-964429394,652489219,-268237686,875989318,-26613609,639535910,-30611456,-386290712,-1914111517,512435966,-620036092,1923198581,571798,252043767,-754667264,538348520,-1982856297,-2089957866,9868862]},{"sector":5,"length":512,"data":[-1070397323,-1550402909,12818124,0,118904662,-1174613461,-1510801404,-773795411,-1410805294,1583328146,-326412853,637820612,-16220287,-1003653761,-2128214946,-2147481985,1589910901,1065559556,-1005292288,-2094660514,1962934911,73319434,75465510,-1207602176,48955393,15450163,311901,-2081649835,1465260780,175555870,-1696039283,480313344,-1928956219,10155134,521969920,-1914145139,1183511678,-28954098,855525000,1183380038,-263812338,1039949451,712212479,2147482497,-1019537805,1317670003,-229734146,-1812963703,-619972729,854279799,1183577995,-263812612,-1979824501,1183576646,-62506000,1183521909,-28951566,1187452020,-1207959310,12255232,47360,-373292870,-1959395068,1552627204,1284191746,1418409476,15919366,1077789483,-1998094592,-1959336378,1569404421,1300968962,1435186692,-414792186,-428965888,-2011595768,-997529786,-544545910,-846530166,-695539062,1853882550,-411236122,132540032,-355397516,-607004207,1590745297,-431030553,-13897611,949888,53879157,1544762884,1276327426,1410545156,-781683962,-774254118,-791096869,1191176030,-2141656080,906097270,456524843,456524380,456524876,410191444,32667264,-772287753,-789064713,-169386250,-552351981,-686567661,167788734,1311013110,1724913268,-774843929,332517843,-2081392174,1979793646,-1878201360,15746759,-230242816,-803214592,-954996890,-820781293,91477779,1191172817,-260144656,510885887,15761027,2126782324]},{"sector":6,"length":512,"data":[-1817445366,-1834249813,-263812181,1175118033,-1412902414,1187452651,-343932944,-263796987,-1070923776,-930359157,-756297589,-443851169,707165,-1326675115,1996443648,175570700,-16222465,-401734026,-899809758,-1957363704,1342288108,-15960321,1996425846,108461832,-32970738,576093,-2081649835,1465260268,175555870,-1696039283,480313344,-1928956219,10155134,521969920,821972618,1586229838,-263812100,1937768253,-294609,995718015,-1828621629,309641227,-30555389,-351571393,-4222859,-2147435905,-13957653,721420474,-1948742720,23980488,16547459,-1927934860,-397350842,-1072956077,1122697844,638213828,-16226431,-230230145,158597375,638213828,554881,22276480,15761027,-1927934860,-397347770,-1072956125,317391476,-1954545729,1586230342,-129070090,-369469813,12189975,2147467200,1183422955,-1946211344,-151548977,1954608966,-397505786,-152406389,1954605894,-196214001,334919187,-146344193,1325495424,1183570731,-328796172,-233584637,-1962879101,-1072957370,1727469428,331875304,14124018,-134723957,-268178842,-746325485,-196703488,65955575,-2080762896,1183514835,-328796170,-99356669,-1962880125,-1072956858,1727466100,334496744,13861882,-1957246677,-163148815,65955575,-2082860040,1183514833,1958743032,-328796393,-636225533,-1962880637,1727526982,332923886,14058442,200951435,-148605760,-133961114,-779888109,14058240,-134592885,-670831514,-696006125,-96040192,65955575]},{"sector":7,"length":512,"data":[-1947069496,-1956735018,-770969474,-783348872,-774843930,-774778413,367448530,-746389504,13730560,1929433731,1205522691,2147483521,2112422770,-990409730,-1409545602,-1416516717,-778654830,-230290720,1605093585,1575324510,1426065610,-326898549,-950577624,64582,175555870,-1697087859,480313344,-1928956219,10151038,521969920,853689994,1183379014,-327775238,-2116008309,1937768446,2147433769,-167037325,-1073017228,-33214860,1925589823,-1874728171,-1098907718,-1072988160,-4583051,-1073693057,-768931349,-12716501,737113215,-1948742720,29747656,638213828,-16226431,-96012417,158597375,638213828,554881,29223296,737691273,-564753463,1005221515,721647602,1183531478,368506844,-854458367,-1979756920,-1957628346,1586226246,-1961761818,1177151574,-631367208,433870361,-220012938,-1981352098,-1819083706,-670832905,1183566355,65468392,13796296,1727501970,-2084174870,1579876562,-632415272,467420699,1586093654,-632387112,-1948498295,-151524746,737605521,-1038878254,-802436589,435443337,1585509966,-1957691137,1586226246,-1961761818,1177151574,-664921604,433739289,-220013450,-1830357154,65468307,-1949690920,-419960762,-763115517,-141127168,-972821914,721474179,1310456926,-632939560,-1982048741,1317665886,-632911400,-135629173,-151547402,335139371,-1983245374,1308750406,-162131468,-1761651184,-1830398325,-471310709,-62510837,433610265,-169682346,-1819089161,-670832905,1183566355,65468394]},{"sector":8,"length":512,"data":[13796289,469524011,1444665414,-60913190,-1948760439,-167516042,-2081786229,74645718,300669575,-791551023,-151530799,-772343917,-791096853,-17954,-779423349,-789064713,368434934,1578303488,-196209678,318141971,-355401898,-556724877,-607004207,-556738351,737691391,334889727,333386695,-2131291185,1451950290,-1107004168,-2126348288,1920991226,-31397629,2147482241,401146738,176080126,-1416385540,-1416189039,182505874,-925763002,-1956749397,147480037,-326413056,-987867306,2126776950,138709766,139823910,-523117781,-489563184,-930357296,786680331,1031790394,-1036307844,829893234,637944971,1963345211,71600925,71645990,1149965429,1161504258,-1962183422,87762436,-1070922635,158798571,158718730,-335544392,1977289223,112887,-350240757,1566465792,1426065610,509013131,-1962510651,1418396740,3965702,2088963957,158662658,91586472,1946273014,-2134900198,-763166508,-787451136,-2567718,-4519868,140256127,-1340968893,-1982125312,39618844,-1996209015,-350288300,-1161811193,-403996672,80371038,-326413056,1443556483,1992629847,-159478518,96012054,-1510736896,1183651359,-401714954,1586233221,-788483586,-774778653,-294421,-2128382849,2126545091,-294609,-1977451264,1183579518,-788822277,-773205789,108971227,-1416385540,1586108651,-1209806595,-339727361,-16729112,-504643541,-1070867669,1583340523,-899816053,-1957363704,509040364,-1962510651,62259524,873132066,145228917]}]],[[{"sector":1,"length":512,"data":[67444340,723088128,56365531,268786705,208865116,-1089977089,2082701311,191907592,80148516,21268736,-1995445473,39618844,-956015479,-2147482044,1583345387,313949,-2081649835,1465256684,175555870,385253005,375047,530969596,-163148522,-1981280688,-146371585,-1946583413,1451948878,-27358211,2147476353,2147482497,-1014936204,1115603968,134216577,-489665155,-623842351,-209008886,-271458421,-623781679,-607004207,-657330223,-640558383,1725029329,-788523778,-774319633,-774254118,108971227,-1416385540,-1416451183,12198379,-2096108800,-355368990,-897324335,-1174148128,1725038560,735760894,-1948677175,1607658433,1575324510,1426065610,1465314443,175555836,637831974,721573003,-773664266,47918046,-2144176930,578093054,-109057149,-225781040,-393554806,2126774449,-1413469434,-1834249813,-16411733,-1413084353,-661969685,-604513782,-348127045,197823447,-2096204600,-355434517,-770523133,-347355016,-1073628169,1583333611,576093,1458342741,1992629847,108971018,721835147,-773664320,2106457560,92874248,-355269199,-92184204,1148454911,-360640333,93455359,187056127,1418439429,266764293,1284240138,22842115,11543690,-741220143,-758001199,-741220143,-758001199,-741220143,-758001199,-1416516718,-1416451181,-1873286369,-2096735094,1544228835,39586564,12196875,-1280347072,-1968444656,-477952420,73141007,184704011,-1174047460,-1762934783,-2147134325,1284181990,22842115,78652554]},{"sector":2,"length":512,"data":[-456079106,-774777903,-193342957,366672,84616764,11557035,1583324907,576093,1458342741,1992629847,-1962636534,1284178524,106203908,48927,310170123,-922016385,-620027531,-1073013387,-164947595,-755548693,-738733577,-2081040137,-779943725,13796096,-1107295809,-771030976,-779679115,-2087466105,-219475730,55446392,333124544,2043810761,-20545035,199676223,-993078793,-1409546626,-1416516717,-1416189038,-899850657,-1957363704,509040364,-1089833275,2082701311,-17858296,1073709887,-16054145,-768929923,12190699,-1950340224,-339178536,106203977,-1962652533,76218972,1999695747,-1950119152,734694361,281510866,-410782850,1960834831,281510670,-640554287,-657335343,-151683249,1954548036,-134862063,-137234478,-170330157,-837558765,2126829075,-1817445370,-1834249813,149914539,1566465823,1426065610,-326898549,142016264,369522431,1358448269,-10295282,-1711651189,1979471419,-27903221,-1953364363,99350598,12238891,1575324544,1426064586,-326898549,142016264,369522431,1358448269,-13703154,-1946663285,1317796438,-28439556,-4717196,-1949266945,80371173,-326413056,-1962349437,1183386182,205949944,-1711651191,-1979951479,-1927872938,-11470778,1996425334,1877478918,1575324670,1426065610,-326898549,172395272,-1946663287,1183386694,-1983894534,1183448134,1183651582,1996443896,108461832,-29300722,-899816053,-1957363704,-1000909076,-1960441218,182135573,-1962379822,-1949594637,639036371]},{"sector":3,"length":512,"data":[637695371,-1979429493,-2131391746,-1031700250,-847233154,108971136,-1413469188,-1416189037,-1416451183,-899850657,-1957363704,509040364,-66423099,-1382830675,-1382896239,637045535,2116911103,169637439,-1978436124,-2132553497,-779943724,13796096,-1057091213,-4715147,721611775,-1949791296,-788075568,-773336606,108971226,-1834249813,1566465963,1426065610,-326898549,-1957210614,-167048586,41510260,-25043209,58069895,-1156347970,-568131577,-472783919,1374471041,-16615425,-163148489,-1751494634,-1323482623,-1074867453,-167030260,-288287372,1183648883,508565238,39361111,-947708767,-991433974,1342572102,385238669,176063312,-1710786304,480314435,1486489067,1595711746,1575324510,1426065098,-326898549,509040140,-66423099,-678691021,-544485493,-1980465527,1017968254,1013412400,744716089,-619997136,-922017419,-771021963,-1164501131,-487129078,-763103229,13730560,-1962880125,1174533702,-2117080076,1930218747,-405712852,-774778159,1364448209,-405711022,-774778159,-405679151,-774778159,56153041,-804038408,1489507160,-346499053,-163148869,-196738752,775722219,2122517365,91554038,-336179457,-125924987,-1980082551,1586101326,-193033218,74728764,913663292,-1968383181,1949121736,1948990497,1915763741,2000239644,-386170600,739406595,-472803280,-472788085,-637279279,-340994045,771326176,-604568971,-1927283965,1343682630,101074628,39504,12066114,2113420272,1358441229,101074628,1022544]},{"sector":4,"length":512,"data":[-1000923801,1342572102,1728057242,726177309,15403590,-443851169,576093,-2081649835,1465259244,-2088763208,2130710142,1226758,-1995553145,2126835270,-226588410,519325324,-1928300859,118945406,375292,-1960860173,-919863738,-774774575,638222020,-388952695,-12776844,-1173196161,48988159,2126828075,-1430246906,1944699531,1073687809,2097158973,2092960524,-330905848,1189806088,1292941968,-1265374473,-45708723,-453582640,-763116797,-2082932992,1451819218,-296338452,146718332,-1192088832,-264564736,-265613956,-163148464,261771286,1444767488,385238669,1022544,1720261991,2013680,738086442,-160003109,-1946648949,1452014150,284787708,-561311886,-125044853,-768884085,1947265411,-315927276,-657331503,-556671023,-573449263,-846466334,2123192157,-1861806346,-1767140437,-1196730197,-1851047938,-991142261,1988883070,655407366,179958263,-168390044,989197970,705327813,-1336917051,5892145,3663960,-1980998007,1183707774,-2142234890,2013330814,374347277,39504,1854086466,109920510,1344164464,-1593681766,-1950340324,-25263664,-1536016385,-385920279,-1970143231,190700,-157760118,808453617,-1979710744,1966095556,1962818308,1325378054,990542862,92204638,-1142308021,-261714946,-160104901,736035663,1031808734,991392565,1340568830,809336870,334230900,100542031,960331814,-29685386,-970526091,641937669,83398,15451019,-443851169,969309,-91491445,-201586914,-1948349532]},{"sector":5,"length":512,"data":[1448199127,-208992681,119470731,-56298499,-678699381,1499356935,-1224280125,-1023409918,45549303,-138215422,134395654,116900608,67109559,-286783372,-402426625,-138149918,177926,-2120432888,268613390,-1664901888,48695031,91553801,1509062,-418479872,-2130704126,6414,-389833471,468196319,-1767783676,9675522,45162123,43392649,-1560110175,-1281294187,43754242,243974955,-1053162827,-1047920010,-1593732189,-813038964,-360000973,-503842166,-1023163645,-1023243613,346210355,48896,503324089,-1426850809,1949504,-218103367,-18262,-1191174465,-1426915325,-1090480200,112787490,-1330908416,3063552,-218081351,587646890,-956293629,503530502,51749376,51775174,772195850,113640192,-951123917,218206470,-1962889206,-788351730,-1342129439,43531904,-1610255353,-1196031103,-1996321118,-1996321778,-1023244266,-1560095327,329450257,50963203,-1560081501,262341389,2269955,-1560271197,94568490,419874563,-973078528,197638,2361031,645988503,-268500297,-18237,503760464,1609105152,-17569790,-1591912472,-1767702381,9806082,-402482269,512435436,130417379,282650650,48569993,-2061071528,646562560,512426117,-1957494043,-956112098,-955642617,-1476359418,-1224280284,1946165250,-21829626,-967709861,-16771322,45549303,91557888,1509062,-1223786240,-972029950,16784646,1543409640,45549303,443875840,2373375,50607871,1528650216,50601608,605981019]},{"sector":6,"length":512,"data":[498526208,-672657685,-1224280305,1946173442,260368387,8726155,2367115,1979662208,-1896120053,-402296063,-387246405,-400844824,645995008,-9502695,-402548248,243335758,2097847,1912652264,2025477,-998979861,1392649403,2734930,-1191170630,-1578565624,19261693,-399798296,-488105124,1948269821,1946762249,854085637,512448512,-75431900,611516815,1962775272,-689418235,126375952,1963801667,473622537,-383871256,-1763173592,605980958,487778560,-148505111,6406,-2125171711,-16770778,-42800898,-1964488332,2400527,41075515,-1749362549,1004177152,-1978370854,1948269575,1946762251,1979661316,537380358,-1159140541,-634716009,915069575,-700841213,130421106,-889306359,-822212236,130477172,-1007490049,-399840280,2134645432,540804211,784025971,17286656,235374659,-1094823161,-402606815,173736159,1395750336,-1256002370,13756417,1975519835,-550058973,11883266,1526776552,343146812,91619132,401195403,3121406,57876540,-1007042510,208980222,52697275,651756505,-1007085685,-1677715736,-399867928,117316172,-2008874962,58039559,-352320792,710928534,861131125,371099867,244115456,-1979699525,1958742535,-1975300078,369524743,132645376,-922855424,-1017385099,1982080,-402426880,540811960,1441334130,-1336913906,240052318,-398457768,-1017639352,1640183,745865217,-343221453,1445514,-109042973,-972720637,5894,-2146553368,7742,-1981283468,-400510942]},{"sector":7,"length":512,"data":[-69071336,1445512,1375711683,1392520891,-1977198245,-1073068540,-393583756,616621440,1371668031,1125091923,74694954,1407961090,126505119,-1869610948,-847247755,-1876432096,1965082102,1086715422,1631329396,2101085810,539755127,1954596342,1916877837,2002729990,-2143278078,975626213,1175680260,1976172099,1537104065,-1342130855,-1342016257,39371521,-1245148479,-336526592,13101447,1640183,192151553,1648257,1323892734,-134515671,537048838,-402295808,-780850879,-2145265688,-16771266,113693556,-1140916201,512294912,512229386,1541931032,248965133,-398786373,1122504018,-418973940,1946159362,956349192,705502440,100711168,1275925736,543518313,285260544,1124927720,2124911,1962613480,419478285,1225586920,1919251310,266862708,-1156745989,-420995072,1684949260,7630437,1962607848,654359306,1410127080,-402627999,192215804,-399834949,1766198469,-402625428,259324669,-399507269,1851067573,1701080681,-150965138,537048838,-402295808,1987389581,33752224,-33549562,403061440,-1575652352,12255256,212658197,-1977545752,-1342130216,7333891,671371,141885195,2244155,175260788,788167,1049296897,1223164629,571378448,735195904,504198351,1359654919,2484311,510941535,792065,-401932101,-1041757086,203328288,-402280448,512426021,512294946,283705354,-1359807472,172102773,-134777390,537048838,-386960384,-378263555,1355006011,300417205,-989702144,-393606284]},{"sector":8,"length":512,"data":[367534256,1976434188,-75250695,1949347840,655407665,-1174399512,266863592,6601216,-1174402584,65536010,113152,-634666958,-1057094542,-637273877,809250820,-318110603,-838940812,-972303383,-16739834,973845480,-628424672,-1975258485,509495,-352014013,503760424,1397882880,-56825770,-967156898,-16769530,141917043,-402640992,-504689591,9578122,9569990,1019316736,-972786432,1019412487,-1978895102,-969277116,1157546867,1014164225,-1978501884,-969277116,126530420,1140654568,-352238338,1963146478,7071751,-1645479051,158678588,9578120,-349755416,1948400672,1948466188,1946237960,1963080708,4712454,-2130740503,302001982,1894365556,-1841397505,209059584,3139664,113703797,1476395154,1149948042,1912879617,-11409149,-2013182722,1124567575,-1963157016,-969277116,1021903731,24414975,-1962985751,-1073086140,1291720564,1065372417,-402427104,-1041760256,136316938,184528896,183026624,3270656,51709638,-396694784,-1511519408,1852392970,599392356,-18880253,-401915160,1699875476,1667329136,1769414757,-1174378380,-957807804,187295998,1326087144,1869182064,-1174375570,-1293417706,-1824617730,-385830143,-1226306938,-3872513,-956310808,-2147281658,-655883285,387901691,-1995786776,-956297186,6918,-485586176,952578,-720467200,34507010,51886848,-318099574,2129331061,126501776,343357756,275918892,179327128,1781495,-1547566246,1592459291,1008541416,-2147125929]}]],[[{"sector":1,"length":512,"data":[16979214,91575612,51711616,1968061444,353271813,1195115011,243272309,-2146958571,-553446106,91570748,51711616,1967930384,353271836,645931011,1375142677,51580555,3721,51449483,134793,1968389209,353271813,-838975485,1048806261,1996554267,453428998,-1962934016,-1610612194,279446293,512427124,-2136473600,682101876,512427125,512294928,988282896,-164990430,-2147281658,1676151924,352777728,41166851,251651307,41156635,-1957438229,-402649058,-396683614,1609111198,3336441,-166291992,-2147281658,116787060,1965556501,165603561,1393113576,1668440421,1953701992,1735289202,1953459744,1970234912,-385850258,378210596,-68681003,-484537591,167045378,619702355,116787828,1946288917,-1871713533,270437203,373352448,373090395,-166519832,33756422,-1930930059,476571657,1819305298,543515489,-835725016,2112041,-1190350104,-1360527356,-1155238620,-397344668,-497476018,251706353,-1190603288,-1763180540,-1156811484,-397344668,-497476042,-388895759,1592272016,464381961,108288316,1534348860,1508425451,-153884651,54857354,1398472885,52731985,-930430678,41111711,116837886,1963983637,270437124,1402886144,-1159199884,-1973855738,1958808261,54967046,-386514456,854071163,-402033372,645993480,-196583,51709686,1527018768,1539562119,-326412861,509040209,75416582,-66554171,520595187,1566137951,-1308620606,-1308431615,-571976961,141879316,-1000670325,-1945934538]},{"sector":2,"length":512,"data":[1959136192,210445885,1179007203,3288712,-1964506955,-1340705536,-964471295,-1947706620,529212928,1949615142,-338654692,80118552,1962962152,1459597320,-351998333,80118752,-806763541,7792887,-50071438,92992739,70919753,1048589428,1946157106,121251565,-92215179,-2029423615,8186078,-629804153,-317995778,-100464008,1925851983,-890551867,-1099773397,1207577409,-92225301,-402295807,-1233846186,-629814018,-1276584053,648276756,637695231,1461597439,-1006688536,41418534,641204006,637695231,350762239,-1031093249,-1259828328,1020365569,722435840,-812955654,47517227,-117632654,-100463125,48434827,57855787,-1007136959,1443256094,-521612921,-1010137090,-402454082,-1589442735,-1019543516,-1014300042,-1094515575,-336919797,-352121410,51363558,512483819,-571998174,-1962642681,-1996299490,-1107094754,-890765306,-183047937,-1593157911,295895074,310787,-1847005973,572427027,287213824,128903171,512427123,512295651,-303561965,308996340,-2129276183,268613430,169994496,-1961662488,-385677026,1575490526,186551059,332720387,-1961667608,-385676002,1239946186,253659923,331409667,-1961672728,-385674978,904401846,320768787,330098947,45549303,443809808,1124506856,512480139,300417028,512447232,166199302,-1019521024,-1007091086,-75381768,192348559,41343547,-397223285,-1017510243,1929364968,50063610,1509062,576514048,-1946157251,-352095016,1354993666,112322566,1049320199]},{"sector":3,"length":512,"data":[915079953,76153619,80107088,734956314,83592143,-2025782922,495577338,242416263,57985067,1577547081,-385578920,102692326,495511583,6503711,-873927299,1936278533,1969627243,-402625428,-605354556,-402639942,901511669,4161536,386320067,-639107072,-49887,24500363,-488090685,40888563,48434827,32883073,47779371,-2028041391,-622266112,-1956947965,-1962899690,-1983370294,721457166,486926538,488237212,-400395363,149422165,90236934,1869771333,1701978226,1852400737,1768300647,-402627220,1407780176,1958820853,-91516604,447743774,-234494980,1325495726,1138723663,51584649,512481927,512295047,512426769,-634716016,1441319819,12511475,-1946870295,-1962899690,721457182,-2016703526,1458174163,-1316861,-402393623,-1779953216,82503685,1852404304,1735289204,-1224280320,1946161154,319720204,287214339,1926839043,-719418616,-485586174,1003631106,-1975749671,-1023524089,645079100,222087934,154934900,548412533,-31767832,-1031122238,378142900,-218758397,1510014080,-806623115,686346802,-402099685,-1015799695,-1021282328,990053793,1912803590,320768780,1942174467,85887236,20834307,-1293408141,24963314,8855179,51451531,51453577,512350467,-746126573,44558584,51453579,-384724504,-389871673,-93126385,-386759448,512426318,512295047,-654114031,51584649,-401466904,-1528229916,283830279,-1961894936,-402643938,507184261,1550975761,51584571,1323849335]},{"sector":4,"length":512,"data":[503760626,512425984,-1779956975,51618048,2229817,1347955315,141869066,-972733208,183181319,9960321,-397736844,243336531,16777241,-1961845784,-402644450,-898431812,277801048,1967814,486983423,1072169216,316533245,1374208856,61663236,1330795077,1327512146,1864397941,1886593126,6644577,-972842007,-16769530,-2113938456,-50325210,258599167,1902278,572427009,281077760,-384655640,548467582,-11933360,-380632912,995295043,1946342686,-12088822,57936444,-1980699829,-402644450,-1749348557,203548672,130420085,-75414752,-244186737,-1996449861,1509958686,-1224280125,1962938370,-389810174,-1958542487,-402643946,-169343991,605981455,58976256,8855177,286690131,-633650685,51582603,-633665422,-1073085325,512429291,-634715375,8986249,-1017394293,-1962852120,-150959858,-2028565543,287214336,-1008185085,-389850640,116854684,1049271,250142068,287214577,49080323,2236041,2498187,51451531,1926904642,320244496,1943681795,572427016,639535360,320768768,286690051,1943677699,-880033023,1364448135,276359324,-396666467,512426201,512294946,512295697,837288723,99739918,2228997,2752550,131072,51577617,393220,51053321,51315469,1448170320,-1195654773,440591,-2127066322,1996590908,1913927942,1124335874,1592648259,-1017619623,-1464117158,964879,959941422,688420356,1929656596,-2096854782,-320732477,46735044,1962933123,-721016025]},{"sector":5,"length":512,"data":[-485586174,-720491774,1065559554,638940415,192284473,639052070,57870137,-2096658138,-437582653,-46742522,197233666,53376206,637719814,-108852085,-2094893825,359988985,75026955,225757243,158517307,-935605717,-21429389,210315007,-352074109,1405290454,-352095663,378245169,1380057827,735741778,1539541978,1926835024,8972547,-397225077,1499070519,-1991622309,1107485462,57985291,-370184216,55836482,378229721,1111622371,-634660217,1515965323,74762507,1257194984,-485062326,535380482,-652309505,-634696958,-205962638,1943612161,-2133261510,7742,-397201036,-1252326953,19720192,1314013527,977751625,568852512,18671861,1954112032,695412837,1717922848,-320339852,420380932,-1023409920,-385874968,1048637706,1962868766,-44046077,-990035991,-66930378,-1073042394,-389873291,887624691,-391371244,-24439761,-4603854,-1359807233,92939855,1952201807,1949252616,1946041092,1190628336,342354246,1659438878,22210580,704687592,1310730794,1917132911,1936879474,1970226720,-402627474,-1612119908,224061680,721482216,-1006447330,-2096969418,-847970306,-12811482,-2094610572,1576993916,-436269708,654301928,1962884227,637594548,503520395,-14286123,803734132,16181248,-1224280232,1962967042,4778003,1869771333,-402644878,-1561848822,2112019,-400796696,-437775169,420380947,-1023409920,5302355,-805202784,1342797032,1476473832,-143275778,50667145,1527723752,-401780247]},{"sector":6,"length":512,"data":[-2115502046,325576980,-384529688,-387443871,319875093,-385649944,1048578611,1979645982,322562322,1982080,-1828162560,-402485342,-1013770668,-719439029,-1979026942,1963801607,11987187,-719418429,1358555906,-1883351471,16365825,540847357,-12843404,154927732,1962734561,-561297919,-1017620130,1140841704,2365067,-1090488856,-745865065,-896805077,-5239581,-234414340,1241740718,512489451,-637337566,-484557885,1007448834,1124758797,171706250,977469813,-1595358272,386319881,12255232,-9639936,-401359896,12255460,-10426368,1007927273,1006990357,-1021676517,-385886232,707460914,1313415210,1381123412,1163153493,635961412,-282531329,41081403,1002689415,-2029882406,1464976339,48434827,-819201141,-661907338,-1325612914,1974399501,1006995981,1191277834,1610145675,1610203993,507233113,964035285,1023362954,1258386698,1023362954,1258779917,47521339,229644150,1962886968,507202313,-193527083,126486507,24447548,-719439037,-1962642686,-134032098,1405352387,1224839097,-242484853,1993026382,-49865202,28943603,1121159936,1543255528,-4631613,-1143763969,-634715761,-398324364,-1958020062,1138396107,-957589016,536973062,780845915,-118947437,-1090052599,855376358,-1949791260,26452208,-1073561346,-299112309,1364389419,-1979544415,855805710,-135623982,56252897,-1976695832,-27933950,-3544896,-402294711,65732707,1560342504,507412675,-445251840,190549,-1818180771,-390005247]},{"sector":7,"length":512,"data":[2018115495,-2133708181,197694,484981620,1007127049,1129935885,48438843,-1023520141,1640183,410320900,343214396,-1979665328,51808962,-20839933,-151849272,1490062050,50599482,24430706,419886923,1946158080,-152546527,2400765,41337659,-1992042357,1526730270,990430952,1929383454,12249467,378169579,-1259863292,990349832,1929569054,1947024473,540820309,154944371,548413557,43656842,1354956459,-1262319022,51808768,-2131560957,1482293500,786688736,1074055403,44318336,-2146667519,7742,-974650508,-2146768111,7742,-1444412556,1937783825,-1708750311,-1023497470,126524642,1962784488,507200267,-227147037,-437583125,-1341622207,-1708750304,-2136214782,7742,-829740172,-1962809666,-2012836099,-1908506622,57999106,-1161583117,-1951595558,-657396504,-319095950,-76293936,-486823019,15254509,236862216,-1967557632,-12827897,540813684,154937203,1074012532,44318336,-2146667519,7742,837288820,-2146768111,7742,367526772,-1341986031,-1708750304,-1092441342,-335577623,-402606092,-1749352329,420380928,-402652160,646053483,-327655,-1709885,-401890583,512428352,-1209466141,9943817,2367113,-401991703,-2126250843,1912705019,26131203,2367113,-972422167,5894,45561473,-960299007,5894,45561473,-960299006,5894,45561473,-2117926904,177974,914473732,134218423,322865859,303991296,-63903488,2236043,1929183208,148039877]},{"sector":8,"length":512,"data":[2236043,-386075672,-1175977979,1405351943,2236041,2033350,352765440,-672596224,352765449,-1017446400,2236043,1929180136,-1645718639,-806659320,990053793,1946342662,143583329,512477491,507183138,108266245,1107087336,512226539,-1801453534,973220865,-402426424,-1957430084,-402644450,-1628898124,-42342145,-393155749,922683480,512426018,-919403771,26480266,1843972606,-1661213956,-1644200728,1004434011,1929577758,-61151016,-1950100501,990053662,1946165790,568873973,-1041540344,-1962402840,855835934,-1810986295,48857089,-486788120,-391451653,-1801451516,-1966539263,-1949791512,-402455266,-838927332,512358773,512426757,233308194,-1979981060,-402644450,954730754,-706166006,26517511,-393557762,512477322,367526661,1976434428,85887481,572427011,-66656256,-806618142,50667147,47519371,57989691,-401997080,512427936,512295637,512294946,-1209531643,109242376,-1996449861,-385866722,-745863060,-840414646,990212859,-118262822,9943235,-402643805,611516392,2236041,-1157202200,-1111621481,161998884,922686067,113705099,616366219,-1895698968,-134182138,-393615165,1609060725,-1152814338,-2081947497,1259173096,-1879342781,-394562815,-193723593,2367113,-402126871,512485529,-1006764014,-402592792,233309700,572427015,-80812032,2236041,-402614341,283639969,420381182,-1023344640,-386023192,443869242,1258330043,605961027,-402164736,-193723669,-1662514965,-4986627]}]],[[{"sector":1,"length":512,"data":[-1360488981,-401020673,512431988,1038614562,616414975,1929971944,-401872888,-689372043,312525569,512446464,512294948,113639432,-402653154,512427676,-397213662,110100255,-1571291102,-1528299502,503760389,512491264,378208292,-634716152,-746076298,-83629998,1512048582,-193606914,-402233368,243336575,16777241,-1979909399,-402643938,2011694908,88271111,-1947744024,-402648546,512360476,-1006764014,-1947664590,572427257,-94705664,-2114237720,6414,-397163775,-1142421980,780537,-110303141,-401753112,1405292311,-83463,1542953192,168626119,512475971,-2125791196,1912641531,-12615436,512357492,-706150364,605981446,-75414784,-294518385,98494659,2760331,-1980155416,-1962925538,-385864674,1810431857,4188160,2367115,1913129192,-75414777,-193855089,2367113,-386796568,183042085,572427250,-101521408,-397197966,-1990523492,-973069794,7942,-402213400,48759936,-1961038855,1258300446,9960321,-1024928910,1274311175,9960321,-1226308238,1140093703,2367113,-1157215255,-185925481,-1946626840,605981635,-1329382656,-33393920,9282240,-75414709,829555087,2236043,1928946664,87484495,2236043,-1980147736,-973069794,7942,-402241048,-1749351404,605980928,123725824,-102118798,123201541,-2126265485,1912705019,-1925283827,-1133182976,1140356328,1055428331,-337153529,572427143,-113580032,-429659965,1961244904,-402018298,-389814156,-328007705,1342182048]},{"sector":2,"length":512,"data":[2367115,532105,1967814,79882240,2236043,-46733229,2236041,-16527640,-956265674,-1124037882,-11999196,9111183,2229903,1221208,-972836120,-16769530,1977997032,-81139453,2367115,530059,-1804150229,-397225081,130480393,-889300448,1843983477,59107332,-386201879,-1958479907,605981643,1993026304,-439097331,-117315503,-386276775,-389871951,-1749293627,605980928,86435840,-385887000,512427064,1397948450,1526224872,-634713998,1968950155,-379862238,770179860,572427012,-130095104,99156851,28920579,1007127040,1258452234,-390067647,-1578568307,215476235,-402549600,-437714478,1007127042,1007055904,1006793737,1592312831,-145233691,2365067,-746071493,-521620366,-401574657,57869845,-402588183,183040115,-369593594,512426229,99090466,-385649672,65536229,-92542725,585680107,-149165851,512476043,-667221980,-1041648525,-451942400,2367115,1977940200,10152195,9960321,-1847000203,-1998040320,-401902081,-1014237459,-667200677,-2125788046,1912641531,-9312248,-346295180,512318321,113639432,-402653154,312476496,922701824,512426018,-857210846,-1962052869,-1962925026,989857814,-118787110,2229903,1221208,1088986195,503760386,512491264,1486684168,1263545458,9960321,-1125644942,1509223415,9955713,1363348451,1509396712,-501217338,512312309,243335204,16777241,-2125784085,1929418747,-14227197,1979662208,-141957115,512355563,-2132279260]},{"sector":3,"length":512,"data":[62318839,-1023069976,1408726760,-1946796824,-667198525,-924259469,-387549698,-152307869,-385875272,28894534,-448730880,-385875016,-1259805382,2353401,45549303,91488288,1964091624,3598341,-1662390669,-107353863,-402650904,-76349400,-1963356439,838868238,85887981,125061379,1928761320,-1007033853,48438923,-159192893,512427123,497025763,-1811531264,-30968063,973085958,1946161670,42967780,48438843,1357383027,-2134640393,7742,-840432780,-151590903,-1007041544,-389510576,-346488919,1364414680,-1006217386,-1945961162,1959136192,119408203,116853424,262169,512427124,-1946353630,734759931,1090704654,1202647631,-1957168057,-485585925,-473224446,1336865283,-1960442023,-49916,-29552012,990409983,990147265,-2096598329,-420805690,638577656,-1576909686,-1866792284,-1700604158,1594358018,1482381662,-7739197,-138215053,268613382,-2146732800,7742,837288820,-145702135,67115270,991458560,1912803614,320748352,-2143653117,7742,1172833140,-1590105335,-1891827708,-1591970303,104529954,494011153,1023411873,292946319,989864609,1996690182,1003547404,-351898920,1926773735,507412678,57933824,1476974568,507412675,292814848,-1974119856,-390005051,-397806089,1516107574,29082456,-194713600,-385305624,-140768791,33560838,1343255808,-397258413,57868311,1526175464,-1655153831,-496244541,1929381608,-142219261,646010307,-16842727,1642113,113704962,142]},{"sector":4,"length":512,"data":[-1560079967,329318404,434947,2242187,-88681934,503355327,-1229063161,440591,-1959901883,926613598,108394208,48447369,1017966315,1010398221,-1341819393,-502273921,-3998038,-33518074,1011971278,-1966377719,51284674,-20905469,-167725880,717881073,-1330154292,-1023497473,812961534,-1427376158,-919396176,-1426862454,2367115,-2147402776,7998,2033350,-1609665025,-922877923,1181242,1576534898,-68421181,-386659352,1766650726,1948280174,1814065007,543649391,1380130861,1936615712,1702130277,1307050084,26196979,-386682648,552139253,39971071,-689387541,-210507549,419886915,1962934784,-1830239487,244011763,-903151474,2236043,1793590243,421954033,1509948672,1049303267,-1749155806,-66642432,1962884268,1964653819,-1440698366,854127330,-745847821,263765333,771753657,-1962903925,-1879342820,990869249,-1962772774,-397258278,1499132733,1162157193,-1587682846,295895044,434435,-1023208541,-8460205,48438923,-1158489624,-754777863,378209395,-396688679,378270594,-2098724139,-1075293197,572426738,-886351616,7923793,1509835752,-486500421,1124567561,-109772996,512358370,585826340,1357132432,-13440941,-225384357,2236041,-1748795045,605980928,452608,-385859096,-1749352948,-1827763712,-1965413631,67513027,975073795,706114241,46202561,-1576860666,-1818230012,-1563886079,-1528233965,1286901,67502787,50635267,1246918,-174987008,1982080,-1947634688]},{"sector":5,"length":512,"data":[-1593637602,-1019542827,94569846,-1176990973,507052033,57999394,1996531433,572406594,-402229760,-347999492,85887476,302433795,113639680,872349727,26517696,477282619,49906505,29038199,-237443072,103213137,-502824216,-108832264,-1023314175,989909737,1929388574,-225253368,-348038286,1978469106,-1810462123,717326849,-17790270,-29199674,-2146798130,-16771778,1693123445,-2134442352,846660350,779338282,704650656,-1574471994,512426013,-292945147,-229709742,-49616813,1976434267,85887476,-889300477,1185416,302942403,512475904,-1605827835,36438420,-1047867254,-930430422,-838991245,-487449624,85887483,4843523,2033350,-16193025,-1593849880,-922877923,104467828,125043092,57985278,-1962926686,-402455266,512356844,-1511521531,26517756,-1946446359,-1979675850,76164647,141836604,57984058,-101520570,486983363,1405288704,-2130667589,1946259451,-12615668,954729589,-347911182,9944046,1065353649,-1976666871,51808961,-20839933,-167725880,-20804878,180628168,1343648960,-235935663,-968664999,-1040253177,1945827712,1976106508,1136787178,1929050496,-195434299,704746400,-1962929402,-2130697186,67115278,-231282688,1648257,-1017380869,218169644,38469634,150784,1946157683,38273026,-16691200,196353,1358955081,38207490,151296,1962934903,42205186,-16681472,-16646399,-16646399,-16646399,-16646399,-16646399,22151170,33489407,50266623]},{"sector":6,"length":512,"pattern":0,"data":[134304512,-16646399,-16646399,-16646399,-16646399,-16646399,-16646399,-16646399,197328641,-1023475439,297928977,33489172,33489407,33489407,33489407,33489407,33489407,33489407,33489407,33489407,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19660800,331419073,29426881,96536257,398530753,314645185,297927617,68272659,-1039855166,297932817,51495442,-4063295,-1055452734,34718463,-1039461950,297930769,823247408,-1036906046,381760273,432082625,-1055321662,-1056456428,34325119,-1039463486,197268491,806076936,-1036973118,197276171,51102259,-1038742590,197269771,386646546,197328833,67879440,264374721,336577033,-4063295,-4063295,-1039396414,297928209,-1056128767,319537680,-1038413374,12721425,252691038,-1039790142,197268751,353092105]},{"sector":7,"length":512,"data":[0,0,417208221,425400565,372775300,373822980,386537095,363402971,380835251,389027524,76354975,296223885,195036301,419498922,193071992,194382732,412358087,444275351,456792830,188947277,420875046,184814447,186387223,231934753,256052624,200019049,220136589,435749241,366941651,76350605,76350605,123346417,129894318,472908401,167709179,473701430,368186859,246156966,1529626172,724184669,1027223341,2105223464,660349790,167714875,1094795585,1094795585,1701013836,1684370286,1952533792,1634300517,1344286316,1919381362,1344302433,1701867378,544830578,1109419631,1095520847,-953269170,-821912314,-1626945754,-953748478,654483718,-1559837145,2124480258,2133232131,16854275,-1610441821,646579068,-1767701635,50128898,1918975171,2004499462,-1021301758,771770600,1701990432,1008759667,1044599621,1501184,-109765828,1364414659,-11118766,1577229590,1532582495,1364443992,-11118766,1577230102,1532582495,1364414659,1347835730,44111615,1499094878,1438865499,1585966219,777034754,172165002,-402295616,-202637349,1476550279,1438866845,1585966219,781996034,172165002,1008039104,-402295936,132841700,604033000,-387419009,-471072849,1585928349,1354980610,623491923,1397753323,-64625733,-1073042394,-738261132,-335573272,-1017619470,-388877486,-1017511934,-1090103466,119407269,-1962929688,-2955017,-1017225465,-388877486,-1017511934,1381061456,102651734]},{"sector":8,"length":512,"data":[-661971186,-919339951,-1272550722,-20958713,454831040,-143457708,1410538499,80118530,74828030,74762507,1101672452,-579482370,74828043,1101672624,1487585331,-1054138618,1329663862,-133957749,-1952123907,-215961400,1595869098,1532582494,1111540568,-2036334577,655360001,65536000,6553600,655360,65536,1048576000,1946157732,-1543059960,1692991490,1048625921,1946223268,-1543059720,1273561346,-1539407871,-378273022,44304070,-1818210301,43688450,1048626008,1946288804,-1543059756,-1605369342,-1700658542,-2134681598,-16604354,410386352,119408158,60038798,-1054933210,1025443586,11599871,-922877324,-1023409883,1962825448,44278011,44238534,1979661567,503717407,-1809936889,520037891,520553157,209043466,44246664,-469106512,61866613,1489232946,1381322842,1476449256,108334396,43390602,171729131,-956429707,43791930,1038832758,175441980,43390522,-889304972,121390315,246679669,281935666,-1269678357,-1174457847,512360449,281871002,985857626,1979882262,-1776907743,986119682,1979882550,1389297173,-1979317832,-1962763714,-1962764786,-855467242,45373968,281935666,-661929123,24464195,57581763,-1073486798,-1073496061,-725601712,1967675402,1407642615,-397061551,112459836,1049231792,-292945254,43388554,43718283,41283130,281919538,1532582493,1381061571,1501269,-655685708,43098192,1476565666,-1868541757,43688450,62178136,281935666,1381061571,-858027]}]],[[{"sector":1,"length":512,"data":[-1979318088,-1962763714,-1693021494,1561382146,-1017423526,58761301,74841916,281874356,43386566,-1761163776,121372674,11751351,1946387134,59686432,376701500,41026620,-5045328,225706812,20719543,-1070463116,-2000813901,43557379,43589256,43728520,-1868364661,38046466,-1962765661,-1801255868,-854608894,-1744422384,-1610124286,-466484584,-379776819,1397817187,-729131694,369356934,45351574,281935666,1482381917,-1974316861,-855264048,-1017619935,134005992,1397801728,1465274961,1030406,1558710155,989626620,1128465525,431229163,1090789837,-1993983308,172443397,-2144045587,796154943,1949253504,96871978,1202997084,-360656758,519539520,567090950,638874143,1946172800,1031808526,1191408640,-970524693,-1975034875,-66459641,410132540,1459620537,103368895,-218364146,1952384942,-2010758393,-538228987,378406,1516134151,-1017619623,992750370,1530805564,-1910604707,-10032934,-1023314657,-1006238178,520320822,321692,-1021376611,116064690,48956082,-919350734,-1073085046,-2142824332,-193723654,41233980,1547489163,792462452,-919345547,-921967893,-771094668,-108327307,76162639,1195771272,-176832502,-1707100989,259588098,-1707035453,259588098,99287666,-117439768,1052004547,-1017634355,-851332016,163797025,151587081,151587081,151587081,151587081,151587081,151587081,151587081,-2012673783,134744072,134744072,134744072,1191708680,1195853639,1195853639,134744135]},{"sector":2,"length":512,"data":[134744072,858927408,808595760,875704880,825242933,858928688,842019120,134754864,134744072,319951120,269619472,336728592,286266645,319952400,303042832,134746640,151521288,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,151587081,101255433,1448235344,119428439,-1962728258,-167768002,268637446,378212212,-1119223806,995098623,-351438854,1477457,113920,1182005819,-466965252,1172555915,613076483,1946287232,839223824,1960814788,1006437128,-336431622,116807461,1967129365,352777740,175440899,-352289816,13690888,-1595407381,1596421120,-96731901,-1946565003,-352317410,352777817,125075459,54869632,17069312,-1962930130,-134213602,116801771,1950417685,4078375,-1977519360,788474397,701728758,1539339600,507202387,208797698,-14016630,-746064338,-1418375127,1050255,116842379,1947206421,270437124,1599993856,1482250846,1364247303,-836020654,-685043340,192399931,1957098492,-8617978,1593209857,-1017620134,788487562,701728758,973304848,17613760,1448300739,1006578428,991786225,-1407748870,1946238023,-12242190,-542577292,1569327733,-3348225,17621364,-1017619618,1431720784]},{"sector":3,"length":512,"data":[-247726294,-96771980,-1392747916,1946238023,-12242418,-542635660,-1545057163,-1153075713,-359978541,1001128118,772569073,1947149527,1959148277,1003522801,-1977649923,-684833019,-210497756,-277559750,326627643,33520768,-1036385164,-259387275,-247739157,1330054774,49004603,-712310516,1482382941,606741699,36316202,1157694731,1330923844,82,1429012666,1465314443,-975664098,76416630,-1912173522,44941100,100727784,60072735,84084641,614662295,47554816,-1962871576,-11204026,-1588568622,-654900523,-1593776920,-1758658524,50832128,-1106870588,-974650707,1595889664,-1161077410,-1477759672,-349351238,760658594,1840946667,-1164383443,-1813303921,918882078,1153893083,-1943946232,1807682124,1095939,648344572,57620165,-1190954049,-1527578599,113712902,60162773,47652492,48826055,512491566,-1348402453,-643610622,-139204606,-1009550872,48694983,-270008320,1508426707,119456724,57620165,-1190954049,-201588711,-400619868,-1326843206,516983763,-717321465,209584898,48434827,179359531,74730236,-109793550,103532427,-1950154027,-717356040,-1962467838,856338632,-230490670,-1946454866,1448199106,12499287,1604645884,29579614,16966406,16978182,16978694,16963846,16975110,16966918,16976134,16976646,16977158,-1006432506,-1945961162,1960709059,478881301,1962933123,-17071347,19268468,63341316,-2084312085,223550,1223164789,1048822775,1962935145,-145823739]},{"sector":4,"length":512,"data":[106374123,45956804,-16414170,1946380558,1360942610,57216651,-141877498,-1527514042,123608921,505332575,-1809936889,-14266365,-1912419042,1492159426,505332511,-1809936889,520037891,-1021377811,-1912136162,637768734,49356543,1448461087,-1909580201,-13857250,1583292370,-1957313699,105286636,24951389,-1957305109,1465261804,-1962508604,1451952734,512634380,-1175966578,526278650,52061,1869505089,1818324338,1869770784,1835102823,1919251488,1634625901,1852795252,2573,0,0,0,0,38816,0,0,1968439296,544170610,1668505936,1126198369,1768320623,1634891111,1852795252,1818838560,1712229,6423040,73865,496968124,451674114,204937,545856312,722075652,336009,545859840,18087942,467081,545849622,18350088,598153,545856678,18874378,729225,545857836,724369420,860297,545860432,692453390,991369,545859980,445448208,1122441,545856422,0,218169344,436279058,1920291840,1344302946,1633907553,1766858860,1277193059,544502633,1701603654,436214304,606741504,36316202,1225065732,536888644,1936876886,544108393,3485237,16711696,2,1572889,131073,142219,730791938,131075,274257,793968642,131077,405333,794624002,131079,536415,794886146,131081,667479,795148290,131083,799659,1024196609,131085,929505]},{"sector":5,"length":512,"pattern":0,"data":[786628612,262159,1060583,1024262145,65554,1252152,730660866,131092,1376540,18481154,131094,1518483,1024327681,131096,1650535,795017218,131098,1781595,1024393217,131100,19672921,747831364,8388909,19803351,760676480,8388911,19934679,820510848,524593,20066027,787677192,524595,20197115,1017905232,8388917,20328369,736886788,5243191,20454970,743374916,196607,65783,1611727586,1179650,204426,1601699993,3538948,6561436,457900044,65637,6691671,458817568,2097255,6822778,1562837072,196607,247,0,858927408,926299444,1111570744,1178944579,0,120466741,1465320027,770]},{"sector":6,"length":512,"pattern":0,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,545850488]},{"sector":7,"length":512,"pattern":0,"data":[]},{"sector":8,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166723584,172493303,177146532,185993998,68382,131088,262159,524302,1048589,2097164,4194315,8388618,16777225,33554440,67108871,134217734,268435461,536870916,1073741827,-2147483646,1,226692420,227020150,217320840]}]],[[{"sector":1,"length":512,"data":[216993038,16518332,15990920,9175293,16646388,15990918,12845310,16646388,15990916,13631740,12845300,15990784,6422783,16253172,15991000,9240831,956236020,16003327,9386239,821952756,15991038,553001214,821952756,15995126,285159679,822052084,-2097929985,8388860,12976360,15728644,11010302,16253168,65680,2556135,16711681,65751,13107455,16711684,65737,885914879,-50395676,98842829,1020133375,-64036,84032973,13435135,16712962,65740,13500671,16711681,65691,15401215,15729406,66977904,14680316,16712702,50069737,15204607,16712956,49938666,10092799,15140090,38,15859966,16187392,16842947,12714231,16711939,16842959,181731326,16646146,14811244,7209214,16646368,14549158,10748158,16646366,14680236,11403518,16646370,14811306,101711871,-956366846,98319,6291710,16646145,65788,15991038,16646145,65688,15466748,16515073,131300,16253180,16515073,65692,5243120,15728641,65600,10486012,15073498,65542,12583166,956170482,15335622,16136446,16580842,15073385,-1357905921,16580836,15597672,11534576,16711916,240,14156024,244,65536,0,0,539885568,1701990432,-14650509,1129530627,3015935,1126178862,1769238127,1063613806,67053600]},{"sector":2,"length":512,"data":[788856665,-11664385,452995332,458119424,538979840,-11402241,1920230660,1919885433,1090780960,1868694783,4158578,1786194,1713401678,543517801,1701667182,1850277934,1768710518,1919164516,543520361,1679848047,1667592809,2037542772,1818838528,1919098981,1769234789,1696624239,1919906418,1818838528,1920409701,543519849,1869771365,1766195314,1663067500,1702063980,1920099616,1174434415,543517801,1914729321,543449445,2037149295,1381323776,1210994498,1409306700,1329746517,1396789280,541868355,1347175752,1279870496,1107308101,1212227705,1196433452,1464672300,1111695404,1245978668,1263542316,1851858988,1464279140,538451968,1635151433,543451500,1634038338,1768910955,2126958,1224998688,1852245247,744845935,1157889824,1634862335,539780467,-12385281,1634036740,1818304626,1633820780,-14668700,83841795,544237931,543976545,778330466,1162037504,1224743763,1919251310,1851859060,2036430713,1869566976,1851878688,1919033465,1886085477,1953393007,538968179,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,538976288,1124081696,1948741217,1852401184,1768300644,2123116,661545283,1667309684,1936942435,1867382816,1852121204,1751610735,1835363616,7959151,1095651150,1345209677,536892225,1735357008,544039282,1836213620,1952542313]},{"sector":3,"length":512,"data":[738223205,1852402720,1869881445,1868767343,1701605485,1428160632,544367987,1634038370,539754603,1735357040,544039282,1836213620,1952542313,536896613,2125417,1851867936,1713402919,543452777,1920298867,1713399139,744844393,1953391904,1847620197,1847621477,543518049,544165376,1969382756,1852383335,1629515622,1919950964,1634887535,1953701997,745828961,1853182496,2037276960,7954807,1679847246,1735746149,1718511904,1377840239,1629515381,1635219822,1867382905,1685021472,1701257317,1634887022,543450484,544370534,1936287860,1852402720,1917845605,1634887535,1868832877,1847620453,1663071343,1635020399,1713401449,543517801,1297040128,1128616019,1397703680,1920099616,1864397423,2019893358,1953850213,1124085349,1948741217,1853190688,1965056288,7629166,544173908,2037277037,1818846752,1835101797,1124103013,1948741217,1852401184,1480925284,1768300613,1124099436,1948741217,1634692128,1480925284,1768300613,1375757676,1140869376,1442858496,1275085312,1325420032,1291863296,536887552,1869903169,1769300512,1763730540,1919950958,1701996399,757101427,1124335392,762081908,537198403,-14650769,1920221955,1916939628,-9739931,1869881348,1769497888,1310720116,1310750565,543518049,1850023936,544367988,1701603654,1835093536,536879205,544695630,1701996868,1919906915,1342185593,543716449,544501614,1853189990,1126170724,1634561391,1277191278,543518313,1634885968,1702126957,2126706]},{"sector":4,"length":512,"data":[1852785440,543648102,1701603654,1226833952,1970037614,1142973796,1667592809,1769107316,2126693,1667846176,1766203499,1310745964,543518049,1682251776,1919906921,1650545696,2053722912,536879205,1835627088,544830049,1701603654,1110310944,1392528193,1668445551,1869422693,1768319332,539780197,1969382770,6581353,1651341651,1847618671,1713402991,1684960623,1698963456,1701734758,2035490916,1819239021,536879219,1702129221,1919950962,1684366191,543519349,1701667182,1394606112,1801675124,2053731104,1852383333,1954103840,2126693,1852394784,1836412265,1634027552,1767055472,1763730810,2034376814,544433524,1632444416,1970104696,1699225709,1394634849,543521385,1109421673,1936028793,1159725088,1969448312,1818386804,1766072421,1952671090,544830063,1649352704,1952671082,1919501344,1869898597,1936025970,1428160544,544500078,1701996868,1919906915,544433513,1968447488,544170610,1668505936,1142975585,1667592809,2037542772,1917124640,544370546,2125417,1969365036,1969430644,1852142194,1684349044,1713402985,543517801,544501614,1702257011,538979940,1702256979,1917132800,544370546,1919181889,544437093,1918981120,544499047,1919181921,544437093,544501614,1853189990,1411383396,1701278305,1684086900,1936028260,1868963955,6581877,1869771333,1409294450,543518841,1414092869,544175136,1970562418,1948282482,1968447599,544170610,1668505936,774794337,1850277934,1953654131,1936286752]},{"sector":5,"length":512,"data":[1953785195,1852383333,1769104416,2123126,1802725700,544434464,1953067639,1919954277,1667593327,543450484,1679847017,1702259058,1426079776,1869507438,1965059703,544500078,1679847023,1702259058,1140867104,543912809,1847620457,1914729583,2036621669,544106784,1986622052,4202597,1953067587,1818321769,1936286752,1919230059,544370546,1679847023,1702259058,1140867104,543257697,1702129257,1953067623,1919230073,544370546,1679847023,1702259058,1392525344,543909221,1869771365,1852776562,1769104416,1075864950,1802392832,1853321070,1684368672,1948279145,543518841,1679847017,1702259058,1392525344,1869898597,1869488242,1868963956,543452789,1679847023,1702259058,1342193696,1953393010,1864397413,1864397941,1634738278,7497072,1953067607,1634082917,544500853,1679847023,1702259058,1375748128,543449445,1819631974,1852776564,1769104416,1075864950,1918978048,1918990180,1634082917,1920298089,1852776549,1769104416,1075864950,1684095488,1835363616,544830063,1734438249,1718558821,1413563936,1952801824,1702126437,1917124708,544370546,1701012321,1852404595,539238503,1769366884,973104483,1684955424,1701998624,-14650509,1953383683,83849829,1701345056,1701978222,779707489,1633099776,543712116,1968119808,1953853556,1159725088,544500068,1699225600,2125932,1919243808,544826985,1917132800,544370546,1917001728,1667855465,1159752801,1919906418,1126170656,1768975727,1735289196,1226833952]},{"sector":6,"length":512,"data":[1919903342,1769234797,2125423,1818313504,1951604844,543908705,1701729536,1667592312,543450484,543452773,1713399407,543517801,2125423,1635151433,543451500,1718513507,1920296809,1869182049,1768300654,540697964,1851867904,1663071271,1952540018,1124081765,1948741217,1769109280,1948280180,536879215,1397768515,1310720032,2116949,1380143904,541871183,1986939136,1684630625,1818585120,1768300656,2123116,1868787273,1667592818,1702240372,1869181810,1718558830,1818585120,1768300656,2123116,1884645200,1147621423,1733296238,1409314901,1830842223,544829025,1701603686,1310720115,1830844261,543912801,1984241664,1635085409,2123124,2003127840,1818326560,2123125,1936020000,544500853,1851867904,1646294055,1869422693,1768319332,1107321957,1981834337,1702194273,1277173806,1818322789,1851879968,2123111,1919252047,1953067639,1107304549,1981834337,1702194273,1277173806,1818322789,1919903264,544498029,2021160994,2037987960,2259321,1869771333,1634934898,1735289206,1667854368,1768693867,1157657715,1919906418,1986097952,543649385,1718513507,1920296809,1869182049,1377828974,1835101797,1330520165,1162690894,1277165600,543449455,1701603654,1835093536,1224745061,1919251566,543973742,1869771333,539828338,1634036816,1914725747,1919905893,1869881460,1919894048,1684955500,1769497856,1919230068,544370546,738205757,1852405536,1869771365,540876914,1920291840,1344302946,1633907553]},{"sector":7,"length":512,"pattern":538976288,"data":[1866661996,1769109872,544499815,539583272,859322673,959520812,1646278968,1866596473,1851878514,1850286180,1852990836,1869182049,745300334,1668172064,1816723502,1634166124,1768300652,1847616876,979725665,1699872800,1696621665,1919906418,1869881344,1634476143,778397554,1918115872,1633906293,1426089332,1818386798,1869881445,1701867296,536879214,1684104530,1869365792,1176529763,544042866,1701603654,1461714976,1702127986,1869365792,1411410787,1766203503,2123116,1111565358,1178944579,1246316615,1313688651,1381060687,1448432723,1515804759,858927408,926299444,6240568,544501582,1970237029,1914726503,544042863,1763733364,1919251310,1702109300,1308652664,1696625775,1735749486,1869750376,1948282223,1684086895,1635197028,6841204,1684291872,1952536352,2123875,1768178976,1633099892,543712116,538987264,1229210880,542265172,536879130,538976288,538976288,1950556192,1110273138,1801545074,544175136,1953068401,538976288,538976288,538976288,1767984384,1768300654,3827052,1886220099,1852402793,1409301095,1818326127,538976288,1701603654,1852394496,1663071077,1768975727,979658092,538980384,538976288,3153952,1767994945,1818386796,1701650533,2037542765,536879162,1344282656,1936942450,2037276960,2036689696,2105376,538976288,538976288,538976288,538976288,538976288,538976288,1936028240,1851859059,1701519481,538976377]},{"sector":8,"length":512,"data":[538976288,1967325216,1852142194,1768169588,1952671090,544830063,1124081722,1701999221,1713402990,543517801,538976288,2112032,1701603654,2053731104,538976357,538976288,540680224,1397572864,1634956576,538994023,538976288,975183904,673185824,980967757,1766588448,544433518,1886220131,1684368489,536879162,1886220099,1852402793,1869881447,1936278560,536879211,1886220099,1852402793,1869881447,1835355424,544830063,1394614272,1701012341,538997619,538976288,975183904,1126178816,762081908,1634038338,538976363,975183904,1685013248,1763704933,1869488243,1986076788,1634494817,778398818,1852776448,1936286752,1763704939,1701650542,2037542765,1936269312,1634038304,1948285284,1970413679,536882798,1914729321,1768844917,3041134,1935763488,1836016416,1952803952,1914725477,1768844917,3041134,1954112032,1124103013,543515759,1702521203,538976288,538976288,538976288,538976288,538976288,538976288,1952531456,1769152609,538994042,538976288,538976288,538976288,538976288,538976288,1392517152,1801675124,2053731104,538976357,538976288,538976288,538976288,538976288,538976288,1852394752,1836412265,1634035744,1769152624,538994042,538976288,538976288,538976288,1291853856,1835628641,1746955637,544235877,1702521203,538976288,538976288,538976288,538976288,1853182464,1835627565,1919230053,544370546,1701080931,1342185504,1919381362,1696623969,544500088,1701080931]}]],[[{"sector":1,"length":512,"pattern":0,"data":[538976288,1381323776,1412321090,19536,0,0,-641679398,-1262242876,-641678654,-1262242876,-641678653,-1262242876,-641682238,-1262242876,-1127695415,-1177765171,-641682237,-1262242876,774766850,-65490,340852737,0,0,0,5224,0,0,341573632,0,0,0,3026478,707657770,65536,-15118336,255,0,0,0,0,-167419648,2132249,-1610612736,673220891,2069715753,574504061,673654562,19474986,-1994776831,-1994776544,553713952,572557594,18909466,-1994775807,-1994775520,620822816,639666458,18909466,-1994774784,-1994774496,687866144,706775322,35686682,-1994773760,-1994773216,32,0,0,16777216,-256,255,16776704,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16777216,5199,445582339,450830473,1095442569,1097859072,444923904,1099767945,0,0,0,545856015,545856678,-65536,0,1117388800,1125253120,0,0,0,0,8]},{"sector":2,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,439287808,8329,1396789294,65536,1296367616,1482184781,12376,1330511873,1162690894,-65536,0,0,707002368,639642148,606479910,-201317334,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16776960,256,825229312,892613426,959985462,1145258561,973096517,0,1431568394,776946258,20564,293666815,297472419,301404632,303501784,306909741,310121063,313070227,314905048,453841638,131072,-16776449,37486594,196352,1073742399,37552130,142592,1124074093,40894466,148480,771752467,35717122,137216,1560281706,40632322,139264,1107296833,39911426,156928,805306942,40108034,157184,1610613343,16646146,131063,196596,-196616,-131083,-983068,-524303,-2031649,-1966115,-65546,-1900561,-1245203,-1441814,-1835029,-1114136,-1638425,1208025052,1280,402739200,1258291456,33559298,67325184,852736,83892996,17385216,1325402368,167773706,302729472]},{"sector":3,"length":512,"data":[1358957312,201327372,885760,527990,106037256,117920512,1640192,486542876,1190400,939528989,256180244,1132032,593978,554631200,1441791,-2080369033,393543702,1537536,1023475293,-197394187,16531456,1057023085,-264044296,15822848,1778448196,-295304970,15416832,1610671967,-362741530,15548672,1677782082,-379256600,16464640,1812003432,-585039633,14553600,771809043,-518520608,14888960,788587040,521601054,16592128,56574,1917695,0,0,65535,0,0,0,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131073,262147,393221,524295,-65536,65535,-1,-65536,65535,-1,-65536,65535,-1,-65536,65535,-1,-65536,757137407,1869357101,1713398881,543517801,2108717,0,0,0,0,0,0,0,0,757932032,1634692128,1768300644,757097836,8237,0,0,0,0,0,0,0,0,539831584,1684107116,1818846752,757932133,32,0,0,0,0,0,0,0,536870912,1814048045]},{"sector":4,"length":512,"data":[543449455,1701603686,539831584,0,0,0,0,0,0,0,0,757071872,1869357101,1713398881,543517801,2108717,0,0,0,0,0,0,0,0,757932032,1634692128,1768300644,757097836,8237,0,0,0,0,0,0,0,0,539831584,1684107116,1818846752,757932133,32,0,0,0,0,0,0,0,536870912,1814048045,543449455,1701603686,539831584,0,0,0,0,0,0,0,0,757071872,1869357101,1713398881,543517801,2108717,0,0,0,0,0,0,0,0,757932032,1634692128,1768300644,757097836,-771743699,941557022,-1642108129,69194015,1780496160,1409286176,1329746517,1262702638,707657728,1347694080,1381323776,1412321090,1431568464,776946258,4932432,2097169,2949136,742064128,1044130621,1566253692,1056973312,6029354,116,1024,1040,1125,1159,1192,0,0,0,0,1,1672806400,65536,65536,2112000,2097159,45,720896,0,131073,0,131072,1310740,131091,1179666,131073,327685]},{"sector":5,"length":512,"data":[393217,458759,393223,524296,393224,589833,589833,655370,655370,720907,720907,786444,786444,851981,851981,917518,917518,983055,983055,1048592,1048592,1114129,1114129,1376277,393217,1441814,1441814,1507351,1507351,1572888,1572888,1638425,1638425,1703962,1703962,1769499,1769499,1835036,1835036,1900573,1900573,581902928,591930107,599663460,606348302,591930417,613688356,581837998,618734793,622535938,631579965,643180008,646456149,658974431,669984666,681912415,1174667040,755302193,1886152008,67051552,83834182,1869568557,-14671763,-13220349,2001939716,1751348329,67051552,83834694,1634882605,538994019,944112639,1395459327,544236916,1174667040,755302201,1701536077,67051552,-13618874,1699556612,536900974,1398670335,1278018815,544499301,1577320224,755302212,1751607634,-14671756,-12231165,1884630276,67051552,83843166,2003780653,-14671762,-12493309,1867001092,538994029,1180566527,1160578303,536896622,980708417,1174667040,755302193,1953718604,1818585120,-14671760,-13416957,1766862084,538995555,910558207,1395459327,544235895,1174667040,755302201,1886220099,543517801,1476656928,1160578303,7629176,1174667040,755302193,1886152008,67051552,-10259643,1648438532,7631471,1577320224,755302227,1952867660]},{"sector":6,"length":512,"data":[67051552,83838046,1734955565,538997864,1197343743,1143801087,538995813,1214120959,1110246655,1936417633,1701011824,67051552,83843422,1818575917,1852402720,-14671771,-11379197,1699884292,1919906931,-14679963,-13548029,1699228932,538996844,877003775,1311573247,1830844261,543912801,402915104,-15001063,1749232900,1702063983,-14671840,-641451005,1395459327,1667591269,-14671756,1668498691,1093469439,1953656674,-14680032,1953251587,-13547987,1632382212,1746957427,7367781,1174667040,755302193,1886152008,67051520,83833158,1818576941,1852383344,544761188,402915104,-15066343,1766862084,1948281699,1667854447,67051552,-2505668,1866935556,544175136,1768976244,-14671773,1668498691,1160578303,544500088,1886152008,67051552,755302211,544503107,1632641062,6648947,1986089760,543649385,1953064005,1176531567,543517801,539893806,1277165614,1768186223,1159751534,1869900132,1766203506,773875052,773860896,1632837632,1735289206,1667846176,1766203499,773875052,773860896,1632837632,1735289206,1852785440,1969711462,1769234802,1176530543,543517801,539893806,1277165614,1768186223,1344300910,543908713,1701603654,773860896,536882720,1684107084,543649385,1718513475,1920296809,1869182049,1766203502,773875052,773860896,67051520,83833158,1818576941,-14671760,-13285885,1868180740,538996079,910558207,1395459327,1668573559,-14671768,808535555,1294796031]},{"sector":7,"length":512,"data":[544566885,1224998688,83850094,1684291885,67051552,-9673404,1698966788,1702126956,67051552,-2505668,1682255108,1998615657,1751348321,67051520,83838302,1851871277,544240928,1577320224,755302232,544104784,1853321060,67051552,83841886,1851871277,1717922848,-14671756,-12296701,1632644356,1769087086,7628903,1174667040,755302193,1886152008,67051552,83834182,1869568557,-14671763,-13220349,2001939716,1751348329,67051552,83834694,1634882605,538994019,944112639,1395459327,544236916,1174667040,755302201,1701536077,67051552,-13618874,1699556612,538998126,421004287,83827227,1851871277,-14680032,-13548029,1699228932,538996844,421004287,83827482,1919111981,543976559,67051552,-2505668,1767255300,1663072101,7105633,1174667040,755302193,1886152008,67051552,83834694,1634882605,538994019,944112639,1395459327,544236916,1174667040,83832881,1852132653,-14671755,1111577603,1127023871,1701602169,67051552,-2505668,1984244996,1635085409,536896884,826672127,1210909951,544238693,1174667040,755302199,1667330644,-14671771,-13089277,1951608068,538996837,826672127,755302192,1970169165,67051552,-12435116,2034445572,543517795,1006894880,83876292,1635140909,1952544108,-14671771,83827203,1919896877,1702109285,536900728,826672127,1210909951,544238693,1174667040,755302199,1667330644,-14671771,-13089277,1951608068,538996837]},{"sector":8,"length":512,"data":[826672127,755302192,1970169165,67051552,-12435116,2034445572,543517795,1006894880,83876292,1886339885,-14679943,-13548029,1699228932,538996844,927335423,1412236543,1701011826,67051552,83834950,1702122285,-14671760,808535555,1294796031,544566885,1409548064,83837505,1668891437,538994028,-1002699777,755302361,1768189773,536901990,826672127,1210909951,544238693,1174667040,755302197,1836019546,67051552,83834438,1769427757,543712116,1174667040,755302199,1667330644,-14671771,-13089277,1951608068,538996837,960889855,1294796031,543517537,1174667040,83832881,1852132653,-14671755,83827203,1919896877,1702109285,536900728,421004287,83827227,1987005741,1969430629,1919906674,67051552,-10259643,2017799428,1126200425,639661173,1935757344,1830839668,543515759,1107558176,1110246655,1852401509,1953850144,67051520,437983512,1294796031,543520367,1936880995,538997359,1933902847,755302243,1953069125,1953841952,1344284192,1702130529,1685024032,-14671771,83837443,1734689325,1663069801,538997877,-1002699777,755302361,1953718608,1702109285,29816,510727959,387927575,2132770583,1886396238,7434255,1887403776,28784,1886650368,1325400095,48,1886388224,28687,1313296128,7631951,1880060016,1879048192,7348080,117899264,1879508848,1879508751,259002119,124784399,251658255,117903119,7,7341839,7343872,0]}]],[[{"sector":1,"length":512,"data":[124784399,251658240,462607,1886388224,28687,1886416896,7,259000071,118452239,252145671,252645135,462704,252645120,7,118423552,251658352,112,252641280,1904,118427392,15,124784399,251658240,1011727,687865856,-60622,16778752,69711,117506336,-15523543,459007,102190864,16785409,322513166,83951615,356517135,1,2701312,16776960,1191708933,536871186,689242112,-60608,169739520,331050,822083584,-15513303,503644415,84748810,0,10524,83951615,407836672,2097152,2694144,16776960,1326991365,536870936,689700864,-65536,407110912,6216,469762080,-16777175,1057292543,1590296,8192,10538,83951615,6203,18874369,1361654016,16776979,657925,536872192,691994624,-60574,118751231,332603,822083616,-15513303,184549375,83886090,8192,10517,-1,255526675,1049861,1848196864,-237,1191381503,536872215,0,-60548,54853631,16848462,32,-16777216,16777215,17446656,8193,538976256,32,1946185743,258998272,7633008,1880060016,1879078008,2020609904,1886388340,1954050063,1879048192,983047,124782336,117444367,252145671,117440527,252643184,1879506944,986887,2013724672,671117312,2021132152,2021130352,1886943239,125304832,7370872,2013755392]},{"sector":2,"length":512,"pattern":0,"data":[-150966152,-30016715,305530677,506861878,758523446,1144404790,3557686,16777216,16777216,36408064,-1926532352,1929380395,36409131,-1859423488,1929380395,37555755,254505728,1929380413,973086251,-184541666,842419810,1026,9109504,53753438,4,35584,33554432,65535,65535,33554432,11201,56,736890789,131076,239285873,-1694236157,-2113894613,50545974,731186178,915472518,33753922,-2060738300,1412865536,67502861,8989680,22689447,-1492909564,-1275033045,51139382,735511552,139,-16646144,-16776961,255,-133824512,43]},{"sector":3,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1392508928,1143754512,1845501440,1143771920,2113936896,-2144545009,-1711268352,-2144512240,-2063589888,-2144479472,-1073734144,50746422,777454598,919928869,100862277,-1909563644,1228335616,67502858,9383527,123025151,1862534659,335581230,50876215,779551750,925434001,67309392,-1842628348,3619072,1090781184,11197,0,16776962,16776960,0,3047175,4194304,0,822086144,876098358,805306368,0,905969664,909325621,503316528,137292560,872416768,137294608,1358956032,137296656,1275069952,34820919,788726790,928448641,100799820,-2110846204,1211590400,67502612,8597267,0,16776962,16776960,0,3087107,16777216,256,256,256,16777216,16777472,36655360,1395356416]},{"sector":4,"length":512,"data":[1929380399,36656427,1462465280,1929380399,36657451,1529579264,1929380399,36658475,1596686080,-2097151441,36659499,1663792896,1929380399,36660523,1730900736,1929380399,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1324354304,251691055,1379366656,67240452,7679849,39008134,1862533634,-1795131857,33900855,796197890,933363831,33687366,2049932036,1329050112,67240461,12267399,138491843,-2130443774,-838805201,33969719,797770754,937558139,33687874,2083492612,1312290048,67240460,8204185,239417352,-1627127294,302037551,35406904,799343618,941883512,34276940,-1204835580,1127756288,201720323,8335409,189610054,1006895106,32815,33554432,65535,65535,234881024,12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1347694122,0]},{"sector":5,"length":512,"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,820514646,128,828903280,80,146700,905390971,136783,-1308622832,1396200192,268435991,11730944,407910492,1048578,1677767680,35210296,4096,181,-16646144,-16776961,255,-838598656,1832717617,35278136,838472707,947257526,33688140,2117191700,0,-65024,-65536,0,839844352,948043776,135235,1932579588,1278774016,67109403,12005925,289749138,973340674,-1644133332,51397688,785122304,950665255,100798288,-1791903732,1396225280,67109637,2686976,72497346,-1065089533,10289,16777216,65535,65535,117440512,12858,67116754,1,83888384,17104927,0,523763721,67072,150994944,2059008,263,589824,134225822,1,-788526848,17367071,0,537133065,68096,150994944,2111232,267,589824,201334890,1,-1660942080,17629216,0,953352201,131072,-16777216,255,-1677656064,436207666,1348962063,620756992,1346133007,-503316480,16862264,1024,955187211,66384,154339844,1312357376,67109137,786432,39008512,262145,218107136,17717049,857703430,957743119,100732740,305342340]},{"sector":6,"length":512,"data":[1127817216,67109136,1245184,307181867,1,872420352,-175815,1024,21,-16711680,-16776961,255,789118976,234881075,3976192,36940544,1093368576,167854905,0,961609833,656973,1778384896,1111056640,2567,7077888,38025575,-1392246262,1929407795,168314425,1024,964558958,67765584,1882433316,1194953728,2564,7405568,0,16776961,16776960,0,3388167,1094292736,67111937,10485760,38025648,12,-1124029952,201540921,1024,969408683,787538,-1409286144,3537408,17104896,0,89405915,12,-167731968,201737017,0,973865119,788310,-1392508928,0,-65280,-65536,0,873793536,268894208,5269841,975241216,139086,-1090519040,1396319744,544,12582912,557922860,2,49408,33554432,65535,65535,50331648,731067530,38091315,11,1224776192,184632122,0,979304601,101385030,-1540062580,1228566016,335675934,12397491,491993731,-1391197694,-1744782293,184894522,883622915,984154288,722002,-1358954496,0,-65280,-65536,0,884999936,985202688,590162,-1526726656,1346031360,2307,11010048,38222565,9,-83843328,151278650,0,990970011,591187,-1677721600,1429939968,1028,12451840,0,16776961,16776960]},{"sector":7,"length":512,"data":[0,3482118,1178287360,256,668562,4537154,6,1191185920,151015995,895746048,994771047,655427,1748238336,1329287936,512,7484039,4471643,218103819,1627428405,201343547,879558656,174,-16777216,-16776961,255,2030501888,53,257,0,0,0,0,0,1325400064,1325426278,1867710574,1635218534,939550066,792148016,942813240,1699545143,2037542765,1936278528,1699872875,1702388076,1951596644,1952672114,1869107968,1126200434,1969451625,1124103273,1819307375,6648933,1702132034,1919899392,892469348,1852402720,1768169573,1634496627,859046009,540030255,1701734764,1936286752,2036427888,1852785408,543648102,1869903201,1986097952,1682243685,1629516905,544175221,1702257011,1667318272,544241003,1701603686,1632895091,1769152610,1509975418,544042863,1684957559,7567215,1701995347,1931505253,6650473,1651668308,538976367,1768169504,1952671090,981037679,1163412736,1411393056,1679840592,1667592809,2037542772,1850277946,1685417059,1768169573,1952671090,1701409391,1426078323,544500078,1679826976,1667592809,1769107316,3830629,1701470799,538997859,1701996900,1919906915,980641129,1667846144,1768300651,1847616876,979725665,1920287488,1953391986,1667854368,1768300651,3827052,1667331155,1769152619,1275094394,538998639,1885431144,1835625504,1207989353,543713129,1885431144]},{"sector":8,"length":512,"data":[1835625504,1375761513,1701277281,1701339936,1852402531,1951596647,543908705,1667590243,1735289195,1328498944,1701339936,1852402531,1866858599,543515506,544366950,1819042147,1984888947,1634497125,1629516665,2003790956,1090544741,1852270956,1952539680,1633026145,1953705330,1735289202,1701339936,1852402531,1866596455,1634036847,1986338926,1635085409,1852795252,1836404224,1667854949,1869770784,1936942435,6778473,1819635013,1869182049,1698955374,543651170,1868983913,1952542066,7237481,1633906508,2037588076,1819239021,1866662003,1953064046,1634627433,1701060716,1701734758,1699545203,2037542765,2053731104,1392538469,1701668709,7566446,1818391888,7562089,1635018052,1684368489,1885424896,1818846752,1766588517,1646291822,1701209717,1866662002,1818849389,1275097701,1701539433,1850015858,1869769078,1852140910,1766064244,1952671090,1701409391,1632632947,1701667186,1936876916,1986089728,1886330981,1852795252,1699872883,1701409396,1864394102,1869182064,536900462,1701012818,1713402990,1936026729,1867251744,538993761,538976288,1342190406,543908713,1953251616,3360301,7824718,1702256979,538976288,843456544,1769101056,1948280180,1766064239,1952671090,7959151,1851877443,1679844711,1325429353,1752375379,7105637,1953068369,1092624416,1479373932,1836008192,1701603696,1816207392,960900468,1801538816,538976357,538976288,960897056,1769292288,1140876396,1769239397,1769234798]}]],[[{"sector":1,"length":512,"data":[1174433391,543452777,1869771365,1917845618,1918987625,1768300665,3827052,544499015,1868983913,1684291840,1952544544,538994787,538976288,538976288,1819440195,3622445,1701602628,1998611828,1751348321,1768178944,1635197044,6841204,1869440338,1629513078,1998613612,1751348321,1409315685,1818716015,1919033445,1886085477,1953393007,1950556192,1177382002,1816330296,544366949,543976545,1634038370,1768910955,7566446,2003134806,2019913248,1919033460,1886085477,1953393007,1852788224,1834156133,7631457,1635216449,1157657465,1970037110,543519841,538976288,1920221984,877014380,1818313472,1953701996,543908705,1126178848,762081908,1174418246,543452777,1668248176,1920296037,1850277989,1919378804,1684370529,1650811936,1768384373,1392535406,1684955508,1852796001,1701060709,1734833506,6778473,1886611780,544825708,1885435763,1735289200,1717916160,1752393074,1936286752,2036427888,1853182464,538976288,538976288,1126178848,762081908,1342191942,1919381362,1914727777,1952805733,1920221984,843459948,544163584,1663070068,1869836917,538976370,538976288,1409299526,1701011826,1953392928,538976367,538976288,927342624,1702122240,1986994288,538997349,538976288,538976288,1426077766,544367987,1701995379,538996325,1816207392,893791604,1818838528,1682243685,1375761513,1124101749,1768975727,1325426028,1869182064,1140880238,1735746149,1701986816,1999596385,1751348321,794361856]},{"sector":2,"length":512,"data":[249102336,12127,1024331469,247922688,12131,794234581,248053760,12117,795283141,248446976,12129,794496721,248709120,12113,793972419,224198656,12125,3787,248971267,143083,787677184,2,143099,800129024,1,262144,612040704,2894592,2097163309,612043277,2097160269,536873485,612040763,1229342020,2114894,8192,83886080,0,0,1095773738,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2764330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,687876128,1345202688,687887169,8250,16777216,117440512,1196380752,105726290,1414748499,8080709,8061051,8061051,8061051,8061051,3211312,3211312,707002492,707013156,84216321,1347243843,1380273225,-1795293184,38011203,72171592,273811536,1079517267,-905953244,-520078438,-1769994763]},{"sector":3,"length":512,"data":[1111490712,-2036334577,655360001,65536000,6553600,655360,65536,100663296,1397705795,1225081925,1414877262,1414876934,72635728,1313165391,1279872515,1381257220,1396900904,1141131077,71779667,1195725651,1279346181,1409566035,88429906,774778408,1850278185,1768710518,1329864804,1969627219,1769235310,1663069807,6644847,1818838530,1869488229,1868963956,6581877,1952534531,1869488232,1868963956,6581877,1869566980,1851878688,1886331001,1713401445,1936026729,1766196480,1629513068,1936024419,1701060723,1684367726,1850279424,1768710518,1768300644,1746953580,1818521185,1309147237,1696625775,1735749486,1701650536,2037542765,1850280960,1768710518,1768300644,1629513068,1936024419,1868767347,251684196,1635151433,543451500,1986622052,1970151525,1919246957,1631784960,1953459822,1835364896,543520367,1920103779,544501349,1701996900,1919906915,1125187705,1869508193,1701978228,1701667182,1919115552,544437103,1986622052,1677751141,1802725700,1634038304,1919230052,7499634,1936278629,1920409707,543519849,1869771365,1181089906,543517801,544501614,1769173857,1684368999,1766221568,1847616876,1864397935,7234928,1818838632,1869488229,1886330996,1713401445,1763734127,1953853550,1766222080,1847616876,1864397935,544105840,544370534,1886680431,1778414709,1635151433,543451500,1701672302,543385970,1836216166,-1778355103,1802725700,544434464,1953067639,1919954277,1667593327]},{"sector":4,"length":512,"data":[6579572,1769096344,1847616886,1914729583,2036621669,1380162048,1919230019,544370546,1679847017,6386785,1936278684,1702043755,1696623461,1919906418,1699978752,1919906915,1953459744,1970234912,-1627364242,1852404304,544367988,544503151,1881171567,1919250529,1698996224,1701013878,1769109280,1713399156,1953264993,1698996480,1701013878,1634038304,1634082916,7629941,1918978210,1918990180,1634082917,1920298089,1153957989,1936291433,544108393,2048948578,7303781,1851871945,1663067495,1801676136,1920099616,-905940369,1667331155,1986994283,1818653285,1696626543,1919906418,1699269376,1864396897,1718773110,544698220,1869771365,1238106226,1818326638,1881171049,1953393007,1864397413,1634887024,1852795252,1816579328,1769234799,1881171822,1953393007,1702260512,1869375090,1187905655,1952542572,543649385,1852403568,1853169780,1718773092,7827308,1986939343,1684630625,1869375008,1852404833,1869619303,544501353,1919250543,1869182049,1339031662,1819436406,1830844769,1734438497,1847620197,1763734639,1635021678,1684368492,1984942336,1634497125,1768300665,1914725740,543449445,1869771365,1339162738,1667590754,1869488244,1852383348,1634301033,1702521196,1375731812,1769238133,1696621933,1919906418,1392771072,4607045,1448038484,1380206918,1546801489,1380010310,-30256815,1380141382,238178641,1380272454,372396369,1381189958,103960913,1381452102,-1573039791,1380010566,1073762641,1380141638]},{"sector":5,"length":512,"data":[-1073721007,1381190214,-2147462831,1380275717,1292186933,1397703763,1431323397,1124415032,926438736,5456208,4544581,5591124,4866639,5259597,5396047,747842639,760687831,1632906711,1952802674,1684300064,1936942450,1970234912,1325425774,1864397941,1701650534,2037542765,1701071104,1718187118,544367977,1701869669,1684370531,1802392832,1853321070,1701079328,1718187118,7497065,1819309380,1952539497,1684611173,1769238117,1919248742,1853444864,544760180,1869771365,1917124722,544370546,1914728041,543973733,1936617315,1953390964,1920091392,1763734127,1852383342,1701274996,1868767346,1635021678,1392538734,1852404340,1868767335,1635021678,1696625774,1701143416,1814066020,6647401,544173908,2037277037,1936027168,543450484,1701603686,1851064435,1701869669,1684370531,1684956448,543584032,1701603686,1852394496,1869881445,1869357167,1409312622,543518841,1852138601,1768319348,1696625253,1667592312,6579572,544173908,2037277037,1701867296,1768300654,7562604,1635151433,543451500,1701603686,1701667182,1818838528,1869488229,1868963956,6581877,1802725700,1819633184,1850277996,1768710518,1868767332,1818849389,1679848037,1667592809,1702259060,1869566976,1851878688,1768300665,7562604,1701080661,1701734758,2037653604,1763730800,1869619310,1702129257,1701060722,1768843622,1852795252,1918981632,1818386793,1684611173,1769238117,1919248742,1886938400,1702126437,1917124708]},{"sector":6,"length":512,"data":[544370546,1948282473,6647929,1970435155,1920300131,1869881445,1634476143,6645618,544499027,1702060386,1887007776,1970217061,1718558836,1851879968,1174431079,543517801,1886220131,1852141167,1830843252,1847621985,1646294127,1768300645,544433516,1864397423,1667590754,1224766324,1818326638,1931502697,1852404340,1701584999,1752459118,1886999552,1768759397,1952542067,1224763491,1818326638,1931502697,1634886261,543516526,1702060386,1887007776,1867251813,544367991,1853189986,1919361124,1702125925,1752440946,1965059681,1919250544,1970233888,1325425774,1852400754,1948281953,543518841,1701869669,1684370531,1953384704,1919248229,1852793632,1851880563,2019893364,1952671088,1124099173,1953721967,544501345,1701869669,1684370531,1953384704,1919248229,544370464,1818322290,1852793632,1851880563,2019893364,1952671088,1342202981,1953393007,1948283493,543518841,1852138601,1768319348,1696625253,1667592312,6579572,1635151433,543451500,1668183398,1852795252,1936028192,544500853,1701869940,1650543616,1763732581,1953391972,1701406313,2019893362,1952671088,1107321957,1313425221,1886938400,1702126437,1313144932,2019893316,1952671088,1224762469,1734702190,1696625253,1701998712,1869181811,2019893358,1952671088,1325425765,1852400754,1696623713,1701998712,1869181811,2019893358,1952671088,1107321957,1701605231,1696624225,1701998712,1869181811,2019893358,1952671088,1325425765,1634887024,1948279918]},{"sector":7,"length":512,"data":[1936027769,544171040,544501614,1668571501,1886330984,1952543333,1157657199,1919906418,544106784,1919973477,1769173861,1224765039,1734700140,1629514849,1734964083,1852140910,1766195316,543452261,1852138601,1768319348,1696625253,1667592312,6579572,1701470799,1713402979,543517801,544173940,1735549292,1851064421,1768318308,543450478,1702131813,1818324594,1986939136,1684630625,1784835872,544498533,1701603686,1667592736,6582895,1701080899,1734701856,1953391981,1869575200,1918987296,1140876647,543257697,1835492723,544501349,544173940,1735549292,1329856613,1886938400,1702126437,1850277988,1768710518,1431314532,1128877122,1717920800,1953066601,7237481,1635151433,543451500,1381259333,1701060686,1768843622,1852795252,1869566976,1851878688,1480925305,542003796,1768318308,1769236846,7564911,1696613967,1667592312,6579572,1163152969,1128351314,2019893317,1952671088,1224762469,1818326638,1914725481,1668246629,1650553953,1914725740,1919247973,1701015141,1162368000,2019893326,1952671088,1409311845,1919885391,1464812576,542069838,1701869669,1684370531,1684952320,1852401253,1713398885,1635218031,25714,1635151433,543451500,1701869940,1935762208,1766064244,1769171318,1646292591,1702502521,1224765298,1818326638,1713398889,543517801,1701869940,1851867904,544501614,1684104530,544370464,1953067607,1635131493,1650551154,544433516,1948280431,544434536,1701869940,1768902656]},{"sector":8,"length":512,"data":[1919251566,1918989856,1818386793,2019893349,1952671088,1392534629,1852404340,1635131495,1650551154,1696621932,1667592312,6579572,1769108563,1696622446,1701998712,1869181811,2019893358,1952671088,1124099173,1969451625,544366956,1953066613,1717924384,1852142181,1426089315,544500078,1701667182,1936289056,1668571501,1851064424,1981838441,1769173605,1830841967,1634562921,6841204,1768838400,1768300660,1713399148,1634562671,1919230068,7499634,1280331081,1313164613,1230258516,1696616015,1667592312,6579572,1936617283,1953390964,1684955424,1396785952,2037653573,544433520,1847619428,1830843503,1751348321,1667584512,543453807,1769103734,1701601889,1886938400,1702126437,1866661988,1635021678,1864397934,1864397941,1634869350,6645614,1701603654,1918989856,1818386793,2019893349,1952671088,1342202981,1953393007,1696625253,1701998712,1869181811,2019893358,1952671088,1224762469,1734702190,1864397413,1701978226,1696623713,1701998712,1869181811,2019893358,1952671088,1275094117,1818583649,1953459744,1953068832,544106856,1920103779,544501349,1668246626,1632370795,543974754,1701997665,544826465,1768318308,6579566,1701080661,1701734758,1634476132,543974754,1881173609,1701012850,1735289188,1635021600,1701668212,1881175150,7631457,1635151433,543451500,1918967872,1701672295,1426093166,542394702,1701869669,1684370531,574300672,1886938400,1702126437,975306852,2019893282,1952671088]}]],[[{"sector":1,"length":512,"data":[570451045,1696604716,1667592312,6579572,539109410,1701869669,1684370531,573121024,1886938400,1702126437,1025638500,2019893282,1952671088,570451045,539114810,1701869669,1684370531,576397824,544370464,573450274,1886938400,1702126437,1562509412,1919885346,690889248,2019893282,1952671088,570451045,1696604718,1667592312,6579572,573451810,1886938400,1702126437,1867776100,1634541679,1981839726,1634300513,1936026722,1986939136,1684630625,1380927008,1852793632,1819243124,1918989856,1818386793,1850277989,1701274996,1635131506,1650551154,1696621932,1667592312,6579572,1701603654,1684955424,1869770784,1969513827,1948280178,1936027769,1701994784,1953459744,1819042080,1684371311,1919248416,1951596645,1735289202,1852140576,543716455,1836280173,1751348321,1986939136,1684630625,1685221152,1852404325,1718558823,1701406240,7562348,1769108563,1663068014,1953721967,544501345,1701869669,1684370531,1953384704,1919248229,544370464,1818322290,1918989856,1818386793,2019893349,1952671088,1325425765,1852400754,1981836385,1634300513,543517794,1701869669,1684370531,1280198912,541412937,1869771365,1749221490,1667330657,544367988,1919973477,1769173861,1696624239,1667592312,6579572,544173908,2037277037,1818587680,1952539503,544108393,1835365481,115,1836008192,1634494832,1852795252,1868718368,1684370546,1396785920,1868767301,1635021678,1864397934,1864397941,1634869350,6645614]},{"sector":2,"length":512,"data":[1869771333,1852383346,1635021600,1701668212,1124103278,1869508193,1633886324,1629514860,1852383342,1920099700,544501877,1668248176,1920296037,1291845733,544502645,1763730786,808984686,1830827832,543515759,1663070068,1768975727,1948280172,7563624,1735549268,1629516901,1701995620,1847620467,1713402991,1684960623,1668172032,1701082476,1818846752,1629516645,1847616882,1629516911,2003790956,1746953317,6648421,1279872512,1886938400,1702126437,1850277988,1768710518,1970348132,1718185057,7497065,1635151433,543451500,1769103734,1701601889,1717924384,1852142181,1409312099,1830842223,544829025,1651341683,7564399,1952543827,1852140901,1634738292,1948284018,1814065007,1701278305,1766195200,544433516,1953723757,543515168,544366966,1634886000,1702126957,1409315698,1830842223,544829025,1684959075,1869182057,543973742,1651341683,7564399,1886611789,1701011820,1868767332,1953064046,1634627433,1768169580,1952671090,6649449,1229213253,1768169542,1952671090,543520361,1936943469,6778473,1869771333,1852383346,1768843552,1818323316,1852793632,1769236836,1818324591,1717920800,1936027241,1634027520,544367972,1936027492,1953459744,1952541984,1881172067,1769366898,544437615,1768318308,1769236846,1124101743,1769236850,543973731,1802725732,1920099616,1124102767,1869508193,1986338932,1635085409,1948280180,544434536,1919973477,1769173861,1157656175,1701998712,1869181811,1852383342]},{"sector":3,"length":512,"data":[1920102243,1819566949,1702109305,1852403058,1684370529,1986939136,1684630625,1919903264,544498029,1667592307,1701406313,1850278002,1768710518,1852383332,1701996900,1914729571,1919247973,1701015141,1920226048,1970561909,543450482,1769103734,1701601889,1918967923,1869488229,1818304628,1702326124,1701322852,1124099442,1869508193,1986338932,1635085409,1998611828,1869116521,1394635893,1702130553,1853169773,1124103273,1869508193,1667309684,1936942435,1768453152,2037588083,1819239021,1986939136,1684630625,1869375008,1852404833,1869619303,544501353,1919250543,1869182049,1631780974,1953459822,1836016416,1701603696,1702260512,2036427890,1869881459,1835363616,7959151,1668248144,1920296037,1919885413,1853187616,1869182051,1635131502,1650551154,1696621932,1667592312,6579572,1635151433,543451500,1668248176,1920296037,1919885413,1853187616,1869182051,1701978222,1701995878,6644590,1852727619,1864397935,1819436406,1948285281,544434536,1953066613,1869566976,1851878688,1701716089,1684370547,1868788512,7562608,1701603654,1667457312,544437093,1768842596,1325425765,1667590754,2037653620,1696621936,1667592312,6579572,1633906508,1651449964,1952671082,1887007776,1629516645,1847616882,1629516911,2003790956,1442866277,1431589449,1696615489,1667592312,6579572,1752458573,1763730543,1953391972,1701406313,2019893362,1952671088,1442866277,1970565737,1663069281,1953721967,1952675186,544436847]},{"sector":4,"length":512,"data":[543519329,544501614,1869376609,6579575,1936617283,1668641396,544370548,1852138601,1768319348,1696625253,1667592312,6579572,1953719620,1952675186,1763734127,1953391972,1701406313,2019893362,1952671088,1174430821,543975777,2037149295,1819042080,1684371311,1953068832,544106856,1936617315,1668641396,1936879476,655360000,6554600,65546,858927408,926299444,1111570744,1178944579,1951604782,544502369,1869894432,538976368,1735288140,1310746740,543518049,538976288,538976288,538976288,1816338464,74675041,1162104643,1413563396,1414726977,72041281,1346454856,541601795,807421955,572540930,1681989664,1936028260,538976371,538976288,1968185376,1667853410,2036473971,1818318368,1276208501,543518313,1651340654,544436837,544370534,1931487498,1701668709,471889006,1735357008,544039282,1920233061,1869619321,544501353,807433313,976236592,1392787457,4607045,0,67108864,65536,-2147483648,2147483647,83886080,131072,0,-128,100663423,262144,0,-8388608,142606335,65536,0,-16777216,150994944,131072,0,-16777216,167772415,262144,0,-16777216,234881023,262144,251658240,524288,268435456,655360,234881024,393216,671088640,65536,201326592,65536,0,-16777216,117440512,524288,184549376,524288,721420288,655360,637534208,16777216]},{"sector":5,"length":512,"data":[654311424,8388608,369099008,262144,50331904,16777216,587202815,262144,587202881,262144,587202885,262144,587202817,262144,587202821,0,134217991,134744080,134744072,268961800,269488136,773725184,623060519,235733782,688662533,16843053,18356481,18553345,319947025,33554433,50331649,1,10,100,1000,10000,100000,1000000,10000000,0,-1094967296,16409,-910228480,1077186075,728806814,-1647989336,-1495973783,524943311,1087619704,-2132177696,-1816508471,-561102424,-335831559,1129425534,-1508994617,-484859730,202852003,1971749237,1296615798,-985834011,-1635042467,-1751426414,1375898144,1965409376,0,-1094967296,147481,65540,262146,1,65536,131073,2,262144,262148,1,1048576,1048585,16,524288,524292,524297,1812004880,-690486826,30870785,3200804,924893184,959590710,808596789,16776704,-33619984,-124113412,33554688,134218752,805310464,16384,16771584,1297040368,5325136,0,0,-438566912,-438508068,0,538976256,538976288,555819040,539042081,538976288,538976288,538976288,538976288,1077936416,1077952576,1077952576,1077952576,33686080,33686018,1073873410,1077952576,336871488,336860180,67372036,67372036,67372036,67372036,67372036,1077952576]},{"sector":6,"length":512,"pattern":0,"data":[404242496,404232216,134744072,134744072,134744072,134744072,134744072,1077952576,32]},{"sector":7,"length":512,"pattern":-151587082,"data":[]},{"sector":8,"length":512,"pattern":-151587082,"data":[]}]]]
      • ibm-basic-1.00.json
        [233,143,126,232,167,107,203,232,2,101,203,193,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,46,148,13,104,115,91,17,
        89,21,102,55,62,22,143,17,237,16,182,16,248,18,12,46,206,16,53,17,95,17,45,46,72,19,80,47,53,31,27,45,254,17,88,30,240,27,
        145,34,133,46,190,7,190,7,83,30,67,19,46,31,0,0,138,30,95,17,156,46,157,46,163,46,243,46,223,54,169,18,88,18,57,34,184,18,
        216,34,251,15,254,15,1,16,4,16,217,20,4,61,48,61,160,93,0,0,0,0,0,0,169,61,63,36,158,36,4,64,82,67,108,65,109,65,206,65,47,
        83,231,82,38,93,19,70,51,70,41,88,13,88,209,71,205,71,147,81,42,80,23,84,104,41,165,41,177,41,28,101,128,126,150,125,241,
        112,135,120,14,122,12,115,132,98,244,121,173,122,205,122,140,43,61,30,122,27,232,40,23,38,233,41,248,40,11,41,128,34,71,41,
        13,38,18,38,117,27,173,107,81,107,130,107,156,101,250,85,152,86,18,87,192,68,152,68,172,68,55,1,72,1,87,1,139,1,180,1,217,
        1,229,1,244,1,249,1,21,2,22,2,26,2,80,2,98,2,109,2,134,2,169,2,170,2,223,2,35,3,58,3,67,3,77,3,101,3,105,3,106,3,85,84,207,
        170,78,196,238,66,211,6,84,206,14,83,195,21,0,83,65,86,197,194,76,79,65,196,195,69,69,208,197,0,79,76,79,210,191,76,79,83,
        197,187,79,78,212,153,76,69,65,210,146,83,82,76,73,206,219,73,78,212,28,83,78,199,29,68,66,204,30,79,211,12,72,82,164,22,
        65,76,204,179,76,211,192,0,69,76,69,84,197,169,65,84,193,132,73,205,134,69,70,83,84,210,172,69,70,73,78,212,173,69,70,83,
        78,199,174,69,70,68,66,204,175,69,198,151,0,76,83,197,161,78,196,129,82,65,83,197,165,68,73,212,166,82,82,79,210,167,82,204,
        212,82,210,213,88,208,11,79,198,35,81,214,241,0,79,210,130,206,209,82,197,15,73,216,31,0,79,84,207,137,79,32,84,207,137,79,
        83,85,194,141,0,69,88,164,26,0,78,80,85,212,133,198,139,78,83,84,210,216,78,212,5,78,208,16,77,208,242,78,75,69,89,164,222,
        0,0,69,217,201,0,79,67,65,84,197,202,80,82,73,78,212,157,76,73,83,212,158,80,79,211,27,69,212,136,73,78,197,176,79,65,196,
        188,73,83,212,147,79,199,10,79,195,36,69,206,18,69,70,84,164,1,79,198,37,0,79,84,79,210,193,69,82,71,197,189,79,196,243,73,
        68,164,3,0,69,88,212,131,69,215,148,79,212,211,0,80,69,206,186,85,212,156,206,149,210,239,67,84,164,25,80,84,73,79,206,184,
        70,198,221,0,82,73,78,212,145,79,75,197,152,79,211,17,69,69,203,23,83,69,212,198,82,69,83,69,212,199,79,73,78,212,220,69,
        206,32,0,0,85,206,138,69,84,85,82,206,142,69,65,196,135,69,83,84,79,82,197,140,69,205,143,69,83,85,77,197,168,73,71,72,84,
        164,2,78,196,8,69,78,85,205,171,65,78,68,79,77,73,90,197,185,0,67,82,69,69,206,200,84,79,208,144,87,65,208,164,65,86,197,
        190,80,67,168,210,84,69,208,207,71,206,4,81,210,7,73,206,9,84,82,164,19,84,82,73,78,71,164,214,80,65,67,69,164,24,79,85,78,
        196,196,84,73,67,203,33,84,82,73,199,34,0,72,69,206,205,82,79,206,162,82,79,70,198,163,65,66,168,206,207,204,65,206,13,0,
        83,73,78,199,215,83,210,208,0,65,204,20,65,82,80,84,210,218,0,73,68,84,200,160,65,73,212,150,72,73,76,197,177,69,78,196,178,
        82,73,84,197,183,0,79,210,240,0,0,0,171,233,173,234,170,235,175,236,222,237,220,244,167,217,190,230,189,231,188,232,0,121,
        121,124,124,127,80,70,60,50,40,122,123,130,107,0,0,173,107,59,100,81,107,168,102,3,99,83,108,32,99,116,101,18,99,25,99,65,
        99,40,99,49,100,106,99,79,99,137,99,215,24,180,101,0,78,69,88,84,32,119,105,116,104,111,117,116,32,70,79,82,0,83,121,110,
        116,97,120,32,101,114,114,111,114,0,82,69,84,85,82,78,32,119,105,116,104,111,117,116,32,71,79,83,85,66,0,79,117,116,32,111,
        102,32,68,65,84,65,0,73,108,108,101,103,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,0,79,118,101,114,102,108,
        111,119,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,85,110,100,101,102,105,110,101,100,32,108,105,110,101,32,110,
        117,109,98,101,114,0,83,117,98,115,99,114,105,112,116,32,111,117,116,32,111,102,32,114,97,110,103,101,0,68,117,112,108,105,
        99,97,116,101,32,68,101,102,105,110,105,116,105,111,110,0,68,105,118,105,115,105,111,110,32,98,121,32,122,101,114,111,0,73,
        108,108,101,103,97,108,32,100,105,114,101,99,116,0,84,121,112,101,32,109,105,115,109,97,116,99,104,0,79,117,116,32,111,102,
        32,115,116,114,105,110,103,32,115,112,97,99,101,0,83,116,114,105,110,103,32,116,111,111,32,108,111,110,103,0,83,116,114,105,
        110,103,32,102,111,114,109,117,108,97,32,116,111,111,32,99,111,109,112,108,101,120,0,67,97,110,39,116,32,99,111,110,116,105,
        110,117,101,0,85,110,100,101,102,105,110,101,100,32,117,115,101,114,32,102,117,110,99,116,105,111,110,0,78,111,32,82,69,83,
        85,77,69,0,82,69,83,85,77,69,32,119,105,116,104,111,117,116,32,101,114,114,111,114,0,85,110,112,114,105,110,116,97,98,108,
        101,32,101,114,114,111,114,0,77,105,115,115,105,110,103,32,111,112,101,114,97,110,100,0,76,105,110,101,32,98,117,102,102,
        101,114,32,111,118,101,114,102,108,111,119,0,68,101,118,105,99,101,32,84,105,109,101,111,117,116,0,68,101,118,105,99,101,
        32,70,97,117,108,116,0,70,79,82,32,87,105,116,104,111,117,116,32,78,69,88,84,0,79,117,116,32,111,102,32,80,97,112,101,114,
        0,63,0,87,72,73,76,69,32,119,105,116,104,111,117,116,32,87,69,78,68,0,87,69,78,68,32,119,105,116,104,111,117,116,32,87,72,
        73,76,69,0,70,73,69,76,68,32,111,118,101,114,102,108,111,119,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,0,66,
        97,100,32,102,105,108,101,32,110,117,109,98,101,114,0,70,105,108,101,32,110,111,116,32,102,111,117,110,100,0,66,97,100,32,
        102,105,108,101,32,109,111,100,101,0,70,105,108,101,32,97,108,114,101,97,100,121,32,111,112,101,110,0,63,0,68,101,118,105,
        99,101,32,73,47,79,32,69,114,114,111,114,0,70,105,108,101,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,0,63,0,
        63,0,68,105,115,107,32,102,117,108,108,0,73,110,112,117,116,32,112,97,115,116,32,101,110,100,0,66,97,100,32,114,101,99,111,
        114,100,32,110,117,109,98,101,114,0,66,97,100,32,102,105,108,101,32,110,97,109,101,0,63,0,68,105,114,101,99,116,32,115,116,
        97,116,101,109,101,110,116,32,105,110,32,102,105,108,101,0,84,111,111,32,109,97,110,121,32,102,105,108,101,115,0,0,0,0,195,
        30,16,0,82,199,79,128,82,199,79,128,228,0,203,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,1,0,0,80,56,0,114,7,254,255,15,7,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,7,7,32,0,0,0,0,0,0,0,0,0,0,
        1,24,24,0,0,0,0,80,0,1,0,0,0,7,7,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,32,105,110,32,0,
        79,107,255,13,0,66,114,101,97,107,0,187,4,0,3,220,67,138,7,67,60,177,117,7,185,6,0,3,217,235,241,60,130,116,1,195,138,15,
        67,138,47,67,83,139,217,11,210,135,218,116,4,135,218,59,218,185,16,0,91,116,230,3,217,235,207,185,181,8,233,145,0,205,134,
        139,30,46,0,138,199,34,195,254,192,116,9,160,79,3,10,192,178,19,117,77,233,189,38,178,61,185,178,57,185,178,54,185,178,53,
        185,178,52,185,178,51,185,178,62,185,178,55,185,178,64,185,178,63,185,178,50,185,178,67,185,178,58,235,34,139,30,55,3,137,
        30,46,0,178,2,185,178,11,185,178,1,185,178,10,185,178,18,185,178,20,185,178,6,185,178,22,185,178,13,50,192,162,54,5,162,95,
        0,162,98,4,162,96,0,139,30,46,0,137,30,71,3,50,192,162,101,4,162,107,4,138,199,34,195,254,192,116,4,137,30,73,3,185,12,8,
        139,30,69,3,233,177,37,89,138,194,138,202,162,40,0,139,30,67,3,137,30,75,3,135,218,139,30,71,3,138,199,34,195,254,192,116,
        10,137,30,84,3,135,218,137,30,86,3,139,30,77,3,11,219,135,218,187,79,3,116,11,34,7,117,7,254,15,135,218,233,115,6,50,192,
        136,7,138,209,232,8,36,187,180,3,205,135,138,194,60,68,115,8,60,50,115,6,60,31,114,6,176,40,44,19,138,208,46,138,7,67,10,
        192,117,248,75,67,254,202,117,242,83,139,30,71,3,94,135,222,86,205,136,46,138,7,60,63,117,6,91,187,180,3,235,212,232,190,
        114,91,186,254,255,59,218,205,137,117,3,233,238,117,138,199,34,195,254,192,116,3,232,153,92,176,255,232,241,34,176,89,205,
        138,50,192,162,111,0,232,59,60,232,154,35,187,45,7,232,140,114,160,40,0,44,2,117,3,232,238,45,205,139,187,255,255,137,30,
        46,0,160,62,3,10,192,116,73,139,30,63,3,83,232,101,92,90,82,232,119,1,176,42,114,2,176,32,232,172,34,232,132,40,90,115,14,
        50,192,162,62,3,235,176,50,192,162,62,3,235,21,139,30,65,3,3,218,114,241,82,186,249,255,59,218,90,115,232,137,30,63,3,160,
        247,1,10,192,116,170,233,168,45,232,81,40,114,162,232,233,5,254,192,254,200,116,153,156,232,45,7,115,8,232,147,38,117,3,233,
        118,254,232,56,4,138,7,60,32,117,3,232,240,91,82,232,49,1,90,157,137,30,67,3,205,140,114,3,233,111,59,82,81,232,238,61,232,
        176,5,10,192,156,137,22,73,3,232,240,0,114,9,157,156,117,3,233,176,7,10,192,81,156,83,232,173,26,91,157,89,81,115,3,232,214,
        24,90,157,82,116,71,90,160,107,4,10,192,117,8,139,30,10,3,137,30,47,3,139,30,88,3,94,135,222,86,89,83,3,217,83,232,21,91,
        91,137,30,88,3,135,218,136,63,89,90,83,67,67,137,23,67,67,186,184,0,73,73,73,73,139,242,172,136,7,67,66,73,138,193,10,197,
        117,242,205,141,90,232,30,0,139,30,233,4,137,30,82,3,232,73,35,205,142,139,30,82,3,137,30,233,4,233,216,254,139,30,48,0,135,
        218,138,254,138,218,138,7,67,10,7,117,1,195,67,67,67,138,7,10,192,116,16,60,32,115,245,60,11,114,241,232,253,4,232,249,4,
        235,236,67,135,218,137,23,235,212,186,0,0,82,116,23,60,44,116,19,90,232,35,6,82,116,29,60,44,116,25,232,175,35,234,116,2,
        60,44,186,250,255,116,3,232,12,6,116,7,60,44,116,3,233,99,253,137,30,59,3,135,218,90,94,135,222,86,83,139,30,48,0,139,203,
        138,7,67,10,7,159,75,158,116,149,67,67,139,31,59,218,139,217,139,31,245,116,136,245,115,133,235,226,50,192,162,253,2,162,
        252,2,205,143,185,59,1,186,184,0,138,7,10,192,117,32,187,64,1,138,195,42,193,138,200,138,199,26,197,138,232,187,183,0,50,
        192,139,250,170,66,139,250,170,66,139,250,170,195,60,34,117,3,233,51,0,60,32,116,9,160,252,2,10,192,138,7,116,47,67,80,232,
        84,2,88,44,58,116,6,60,74,117,8,176,1,162,252,2,162,253,2,44,85,117,172,80,138,7,10,192,88,116,170,58,7,116,218,80,138,7,
        67,232,44,2,235,236,67,10,192,120,146,75,60,63,176,145,82,81,117,3,233,226,0,186,107,3,232,210,14,232,41,36,115,3,233,46,
        1,83,186,94,11,232,32,0,117,62,232,240,3,186,98,11,232,21,0,176,137,117,3,233,8,0,186,101,11,232,8,0,117,38,176,141,89,233,
        173,0,139,242,46,172,10,192,117,1,195,138,200,232,149,14,58,193,117,246,67,66,235,234,71,79,32,0,84,79,0,85,66,0,91,232,127,
        14,83,205,144,187,3,1,44,65,2,192,138,200,181,0,3,217,46,139,23,91,67,83,232,102,14,138,200,139,242,46,172,36,127,117,3,233,
        171,1,67,58,193,117,80,139,242,46,172,66,10,192,121,226,138,193,60,40,116,29,139,242,46,172,60,209,116,21,60,208,116,17,232,
        54,14,60,46,116,3,232,199,21,176,0,114,3,233,122,1,88,139,242,46,172,205,145,10,192,121,3,233,35,0,89,90,12,128,80,176,255,
        232,81,1,50,192,162,253,2,88,232,72,1,233,178,254,91,139,242,46,172,66,10,192,121,247,66,235,141,75,80,205,146,186,12,12,
        138,200,139,242,46,172,10,192,116,23,66,58,193,117,243,235,20,140,170,171,169,166,168,212,161,138,147,158,137,142,205,141,
        0,50,192,235,2,176,1,162,253,2,88,89,90,60,161,80,117,3,232,250,0,88,60,177,117,5,232,244,0,176,233,60,217,116,3,233,198,
        0,80,232,229,0,176,143,232,226,0,88,80,233,173,254,138,7,60,46,116,14,60,58,114,3,233,144,0,60,48,115,3,233,137,0,160,253,
        2,10,192,138,7,89,90,121,3,233,98,254,116,39,60,46,117,3,233,89,254,176,14,232,173,0,82,232,232,3,232,253,0,94,135,222,86,
        135,218,138,195,232,155,0,138,199,91,232,149,0,233,255,253,82,81,138,7,232,31,93,232,223,0,89,90,83,160,251,2,60,2,117,26,
        139,30,163,4,138,199,10,192,176,2,117,14,138,195,138,251,179,15,60,10,115,200,4,17,235,203,80,208,200,4,27,232,92,0,187,163,
        4,232,79,14,114,3,187,159,4,88,80,138,7,232,74,0,88,67,254,200,117,244,91,233,173,253,186,106,3,66,139,242,46,172,36,127,
        117,3,233,107,0,66,58,7,139,242,46,172,117,235,233,111,0,60,38,116,3,233,197,253,83,232,11,2,91,232,215,12,60,72,176,11,117,
        2,176,12,232,11,0,82,81,232,217,12,89,233,92,255,176,58,139,250,170,66,73,138,193,10,197,116,1,195,178,23,233,155,250,205,
        147,91,75,254,200,162,253,2,89,90,232,160,12,232,222,255,67,232,153,12,232,240,33,115,244,60,58,115,8,60,48,115,236,60,46,
        116,232,233,51,253,138,7,60,32,115,10,60,9,116,6,60,10,116,2,176,32,80,160,253,2,254,192,116,2,254,200,233,159,254,75,138,
        7,60,32,116,249,60,9,116,245,60,10,116,241,67,195,176,100,162,57,3,232,210,41,232,85,32,231,82,137,22,59,3,160,251,2,80,232,
        123,9,88,83,232,41,16,187,86,4,232,69,86,91,90,89,83,232,157,3,137,30,53,3,187,2,0,3,220,232,115,249,117,30,3,217,82,75,138,
        55,75,138,23,67,67,83,139,30,53,3,59,218,91,90,117,229,90,139,227,137,30,69,3,177,90,135,218,177,8,232,227,30,83,139,30,53,
        3,94,135,222,86,83,139,30,46,0,94,135,222,86,232,237,31,204,232,26,13,117,3,233,198,249,114,3,233,193,249,156,232,14,9,157,
        83,120,3,233,28,0,232,138,93,94,135,222,86,186,1,0,138,7,60,207,117,3,232,212,16,82,83,135,218,232,198,86,235,39,232,18,93,
        232,177,85,91,81,82,185,0,129,138,241,138,214,205,148,138,7,60,207,176,1,117,14,232,207,8,83,232,244,92,232,147,85,232,18,
        109,91,81,82,138,200,232,186,12,138,232,81,75,232,171,0,116,3,233,71,249,232,129,22,232,160,0,83,83,139,30,90,4,137,30,46,
        0,139,30,59,3,94,135,222,86,181,130,81,159,134,196,80,134,196,159,134,196,80,134,196,233,207,100,181,130,81,235,66,233,203,
        248,233,18,249,195,232,117,0,235,80,205,149,233,99,15,233,213,2,10,192,117,235,67,138,7,67,10,7,116,224,67,139,23,67,137,
        22,46,0,246,6,118,4,255,116,38,83,176,91,232,202,28,135,218,232,112,86,176,93,232,192,28,91,235,19,205,150,232,155,29,137,
        38,69,3,137,30,67,3,138,7,60,58,117,191,67,138,7,60,58,114,171,186,232,14,82,116,164,44,129,114,171,60,74,115,162,50,228,
        2,192,139,240,205,151,46,255,180,37,0,67,138,7,60,58,114,1,195,60,32,116,244,114,8,60,48,245,254,192,254,200,195,10,192,116,
        251,60,11,114,114,60,30,117,6,160,0,3,10,192,195,60,16,116,60,80,67,162,0,3,44,28,115,57,44,245,115,7,60,254,117,27,138,7,
        67,137,30,254,2,183,0,138,216,137,30,2,3,176,2,162,1,3,187,4,0,88,10,192,195,138,7,67,67,137,30,254,2,75,138,63,235,225,232,
        55,0,139,30,254,2,235,147,254,192,208,192,162,1,3,82,81,186,2,3,135,218,138,232,232,19,85,135,218,89,90,137,30,254,2,88,187,
        4,0,10,192,195,60,9,114,3,233,105,255,60,48,245,254,192,254,200,195,160,0,3,60,15,115,23,60,13,114,19,139,30,2,3,117,10,67,
        67,67,138,23,67,138,55,135,218,233,106,84,160,1,3,162,251,2,60,8,116,17,139,30,2,3,137,30,163,4,139,30,4,3,137,30,165,4,195,
        187,2,3,233,157,84,178,3,185,178,2,185,178,4,185,178,8,232,58,31,185,190,7,81,114,229,44,65,138,200,138,232,232,5,255,60,
        234,117,15,232,254,254,232,33,31,114,208,44,65,138,232,232,242,254,138,197,42,193,114,195,254,192,94,135,222,86,187,96,3,
        181,0,3,217,136,23,67,254,200,117,249,91,138,7,60,44,117,168,232,206,254,235,181,232,201,254,232,179,14,121,155,178,5,233,
        122,247,138,7,60,46,139,22,73,3,117,3,233,178,254,75,232,174,254,60,14,116,2,60,13,139,22,2,3,117,3,233,159,254,50,192,162,
        0,3,75,186,0,0,232,147,254,114,1,195,83,159,80,187,152,25,59,218,114,27,138,254,138,218,3,218,3,219,3,218,3,219,88,158,44,
        48,138,208,182,0,3,218,135,218,91,235,213,88,158,91,195,117,3,233,124,28,60,14,116,7,60,13,116,3,233,163,48,232,117,28,185,
        232,14,235,30,177,3,232,2,28,232,149,255,89,83,83,139,30,46,0,94,135,222,86,176,141,159,134,196,80,134,196,81,235,4,81,232,
        123,255,160,0,3,60,13,135,218,116,188,60,14,116,3,233,190,246,135,218,83,139,30,254,2,94,135,222,86,232,81,0,67,83,139,30,
        46,0,59,218,91,115,3,232,79,249,114,3,232,70,249,115,13,73,176,13,162,61,3,91,232,252,18,139,217,195,178,8,233,163,246,205,
        152,117,246,182,255,232,250,245,139,227,137,30,69,3,60,141,178,3,116,3,233,139,246,91,137,30,46,0,187,232,14,94,135,222,86,
        176,91,177,58,235,2,177,0,181,0,138,193,138,205,138,232,75,232,176,253,10,192,116,190,58,197,116,186,67,60,34,116,233,254,
        192,116,236,44,140,117,231,58,197,18,198,138,240,235,223,88,4,3,235,20,232,220,37,232,95,28,231,137,22,59,3,82,160,251,2,
        80,232,133,5,88,94,135,222,86,138,232,160,251,2,58,197,138,197,116,6,232,37,12,160,251,2,186,163,4,60,5,114,3,186,159,4,83,
        60,3,117,49,139,30,163,4,83,67,139,23,139,30,48,0,59,218,115,17,139,30,92,3,59,218,90,115,17,187,44,3,59,218,115,10,176,90,
        232,230,22,135,218,232,51,20,232,222,22,94,135,222,86,232,190,82,90,91,195,60,167,117,50,232,24,253,232,236,27,137,232,95,
        254,11,210,116,13,232,79,248,138,245,138,209,91,114,3,233,19,255,137,22,77,3,114,218,160,79,3,10,192,138,194,116,209,160,
        40,0,138,208,233,206,245,232,229,12,138,7,138,232,60,141,116,5,232,178,27,137,75,138,202,254,201,138,197,117,3,233,185,252,
        232,26,254,60,44,117,167,235,238,186,79,3,139,242,172,10,192,117,3,233,104,245,254,192,162,40,0,139,250,170,138,7,60,131,
        116,16,232,245,253,117,133,11,210,116,3,233,113,254,254,192,235,6,232,151,252,116,1,195,139,30,75,3,135,218,139,30,71,3,137,
        30,46,0,135,218,117,237,138,7,10,192,117,4,67,67,67,67,67,233,178,254,232,112,12,117,218,10,192,117,3,233,164,253,233,32,
        245,186,10,0,82,116,31,232,157,253,135,218,94,135,222,86,116,22,135,218,232,38,27,44,139,22,65,3,116,8,232,147,253,116,3,
        233,225,244,135,218,138,199,10,195,117,3,233,113,253,137,30,65,3,162,62,3,91,137,30,63,3,89,233,219,245,232,44,4,138,7,60,
        44,117,3,232,25,252,60,137,116,5,232,233,26,205,75,83,232,210,81,91,116,25,232,6,252,117,1,195,60,14,117,3,233,204,253,60,
        13,116,3,233,224,251,139,30,2,3,195,182,1,232,41,254,10,192,116,246,232,228,251,60,161,117,242,254,206,117,238,235,209,232,
        106,1,235,3,232,155,49,75,232,206,251,117,3,232,29,25,117,3,233,63,1,60,215,117,3,233,107,39,60,206,117,3,233,171,0,60,210,
        117,3,233,164,0,83,60,44,116,109,60,59,117,3,233,23,1,89,232,169,3,83,232,163,7,116,15,232,65,93,232,194,18,198,7,32,139,
        30,163,4,254,7,205,153,139,30,163,4,83,232,57,28,116,13,232,49,1,120,3,233,49,0,232,129,69,235,3,160,41,0,138,232,254,192,
        116,35,232,30,28,116,7,232,102,69,138,7,235,3,232,104,59,91,83,10,192,116,14,2,7,245,115,4,254,200,58,197,114,3,232,153,24,
        91,232,222,18,91,233,107,255,205,154,185,50,0,139,30,233,4,3,217,232,232,27,138,7,117,24,160,42,0,138,232,232,50,59,60,255,
        116,12,58,197,114,3,232,108,24,114,3,233,135,0,44,14,115,252,246,208,235,114,80,232,7,251,232,241,10,88,80,60,210,116,1,74,
        138,198,10,192,120,3,233,3,0,186,0,0,83,232,166,27,116,13,232,158,0,120,3,233,21,0,232,238,68,235,3,160,41,0,138,216,254,
        192,116,7,183,0,232,124,81,135,218,91,232,161,25,41,75,88,44,210,83,116,19,185,50,0,139,30,233,4,3,217,232,111,27,138,7,117,
        3,232,190,58,246,208,2,194,114,16,254,192,116,25,232,246,23,138,194,254,200,121,3,233,13,0,254,192,138,232,176,32,232,24,
        23,254,205,117,249,91,232,136,250,233,188,254,205,155,50,192,83,82,81,232,134,44,89,90,50,192,138,248,138,216,137,30,233,
        4,91,195,83,50,192,159,134,196,80,134,196,232,233,42,116,3,233,226,242,83,185,46,0,178,2,182,253,3,217,136,55,176,0,91,233,
        230,41,232,51,46,10,192,195,60,133,116,3,233,162,51,232,17,25,133,60,35,117,3,233,40,48,232,48,29,232,115,0,232,122,34,232,
        68,79,82,83,232,167,28,90,89,115,3,233,69,25,81,82,181,0,232,69,17,91,176,3,233,147,252,63,82,101,100,111,32,102,114,111,
        109,32,115,116,97,114,116,13,0,67,138,7,10,192,117,3,233,146,242,60,34,117,242,233,155,0,91,91,235,12,205,156,160,58,3,10,
        192,116,3,233,115,242,89,187,16,21,232,11,102,139,30,67,3,195,232,148,47,83,187,246,1,233,224,0,60,35,116,242,232,190,28,
        185,140,21,81,60,34,176,0,176,255,162,95,4,117,223,232,219,16,138,7,60,44,117,10,50,192,162,95,4,232,157,249,235,4,232,111,
        24,59,83,232,48,17,91,195,83,160,95,4,10,192,116,10,176,63,232,12,22,176,32,232,7,22,232,2,28,89,115,3,233,161,24,81,50,192,
        162,58,3,198,7,44,135,218,91,83,82,82,75,176,128,162,57,3,232,94,249,232,165,34,138,7,75,60,40,117,32,67,181,0,254,197,232,
        76,249,117,3,233,232,241,60,34,117,3,233,69,255,60,40,116,235,60,41,117,233,254,205,117,229,232,49,249,116,7,60,44,116,3,
        233,201,241,94,135,222,86,138,7,60,44,116,3,233,49,255,176,1,162,169,4,232,98,0,160,169,4,254,200,116,3,233,31,255,83,232,
        13,5,117,3,232,140,18,91,75,232,251,248,94,135,222,86,138,7,60,44,116,139,91,75,232,236,248,10,192,91,116,3,233,10,255,198,
        7,44,235,6,83,139,30,94,3,13,50,192,162,58,3,94,135,222,86,235,4,232,162,23,44,232,24,33,94,135,222,86,82,138,7,60,44,116,
        10,160,58,3,10,192,116,3,233,139,0,13,50,192,162,82,4,232,98,25,116,3,233,139,46,232,169,4,80,117,56,232,155,248,138,240,
        138,232,60,34,116,14,160,58,3,10,192,138,240,116,2,182,58,181,44,75,232,182,15,88,4,3,138,200,160,82,4,10,192,117,1,195,138,
        193,135,218,187,202,22,94,135,222,86,82,233,240,250,232,99,248,88,80,60,5,185,155,22,81,115,3,233,249,82,233,253,82,75,232,
        79,248,116,7,60,44,116,3,233,96,254,94,135,222,86,75,232,62,248,116,3,233,107,255,90,160,58,3,10,192,135,218,116,3,233,53,
        23,82,91,233,162,253,232,98,250,10,192,117,21,67,138,7,67,10,7,178,4,117,3,233,206,240,67,139,23,67,137,22,55,3,232,8,248,
        60,132,117,221,233,79,255,232,213,22,231,233,4,0,232,206,22,40,75,182,0,82,177,1,232,165,21,205,157,232,178,1,50,192,162,
        168,4,137,30,82,3,139,30,82,3,89,138,7,137,30,49,3,60,230,115,1,195,60,233,114,117,44,233,138,208,117,12,160,251,2,60,3,138,
        194,117,3,233,214,16,60,12,115,229,187,128,3,182,0,3,218,138,197,46,138,55,58,198,115,213,81,185,62,23,81,138,198,205,158,
        60,127,116,100,60,81,114,109,36,254,60,122,116,103,160,251,2,44,3,117,3,233,61,240,10,192,255,54,163,4,121,3,233,17,0,255,
        54,165,4,122,3,233,8,0,255,54,159,4,255,54,161,4,4,3,138,202,138,232,81,185,35,24,81,139,30,49,3,233,99,255,182,0,44,230,
        114,52,60,3,115,48,60,1,208,208,50,198,58,198,138,240,115,3,233,222,239,137,30,49,3,232,54,247,235,224,232,101,83,232,55,
        76,185,41,101,182,127,235,201,82,232,179,83,90,83,185,49,27,235,190,138,197,60,100,114,1,195,81,82,186,4,100,187,3,27,83,
        232,17,3,116,3,233,118,255,139,30,163,4,83,185,200,37,235,156,89,138,193,162,252,2,160,251,2,58,197,117,13,60,2,116,40,60,
        4,117,3,233,127,0,115,57,138,240,138,197,60,8,116,46,138,198,60,8,116,87,138,197,60,4,116,102,138,198,60,3,117,3,233,124,
        239,115,101,187,170,3,181,0,3,217,3,217,46,138,15,67,46,138,47,90,139,30,163,4,81,195,232,12,83,232,37,76,91,137,30,161,4,
        91,137,30,159,4,89,90,232,90,75,232,247,82,187,150,3,160,252,2,208,192,2,195,138,216,18,199,42,195,138,248,46,139,31,255,
        227,138,197,80,232,246,75,88,162,251,2,60,4,116,211,91,137,30,163,4,235,209,232,151,82,89,90,187,160,3,235,205,91,232,97,
        75,232,101,74,232,40,75,91,137,30,165,4,91,137,30,163,4,235,229,83,135,218,232,80,74,91,232,69,75,232,73,74,233,59,76,232,
        51,246,117,3,233,228,238,115,3,233,204,80,232,78,22,114,3,233,219,0,60,32,115,3,233,127,246,205,159,254,192,117,3,233,106,
        1,254,200,60,233,116,213,60,234,117,3,233,175,0,60,34,117,3,233,45,13,60,211,117,3,233,236,1,60,38,117,3,233,209,0,60,213,
        117,12,232,232,245,160,40,0,83,232,67,2,91,195,60,212,117,13,232,216,245,83,139,30,71,3,232,247,74,91,195,60,218,117,46,232,
        199,245,232,155,20,40,60,35,117,13,232,184,5,83,232,64,38,135,218,91,233,3,0,232,249,30,232,131,20,41,83,135,218,11,219,117,
        3,233,221,246,232,141,75,91,195,60,208,117,3,233,0,2,60,216,117,3,233,139,16,60,200,117,3,233,208,59,60,220,117,3,233,76,
        46,60,222,117,3,233,249,18,60,214,117,3,233,112,15,60,133,117,3,233,56,42,60,219,117,3,233,164,59,60,209,117,3,233,126,2,
        232,96,253,232,46,20,41,195,182,125,232,93,253,139,30,82,3,83,232,214,99,91,195,232,148,29,83,135,218,137,30,163,4,232,65,
        1,116,3,232,175,74,91,195,138,7,60,97,114,249,60,123,115,245,36,95,195,60,38,116,3,233,108,246,186,0,0,232,24,245,232,229,
        255,60,79,116,57,60,72,117,52,181,5,67,138,7,232,213,255,232,42,21,135,218,115,10,60,58,115,77,44,48,114,73,235,6,60,71,115,
        67,44,55,3,219,3,219,3,219,3,219,10,195,138,216,135,218,254,205,117,209,233,140,237,75,232,213,244,135,218,115,36,60,56,114,
        3,233,107,237,185,208,7,81,3,219,114,156,3,219,114,152,3,219,114,148,89,181,0,44,48,138,200,3,217,135,218,235,213,232,153,
        74,135,218,195,67,138,7,44,129,60,7,117,14,83,232,154,244,60,40,91,116,3,233,224,73,176,7,181,0,208,192,138,200,81,232,134,
        244,138,193,60,5,115,34,232,131,252,232,81,19,44,232,148,73,135,218,139,30,163,4,94,135,222,86,83,135,218,232,101,4,135,218,
        94,135,222,86,235,33,232,254,254,94,135,222,86,138,195,60,12,114,11,60,27,205,161,83,115,3,232,123,80,91,186,213,25,82,176,
        1,162,168,4,185,185,0,205,160,3,217,46,255,39,254,206,60,234,116,133,60,45,116,129,254,198,60,43,117,1,195,60,233,116,251,
        159,75,158,195,254,192,18,192,89,34,197,4,255,26,192,232,248,73,235,15,182,90,232,18,252,232,146,80,247,211,137,30,163,4,
        89,233,25,252,160,251,2,60,8,254,200,254,200,254,200,195,138,197,80,232,118,80,88,90,60,122,117,3,233,137,74,60,123,117,3,
        233,102,72,185,12,101,81,60,70,117,3,11,218,195,60,80,117,3,35,218,195,60,60,117,3,51,218,195,60,50,117,5,51,218,247,211,
        195,247,211,35,218,247,211,195,43,218,233,207,72,160,99,0,235,3,232,175,51,254,192,138,216,50,192,138,248,233,132,73,232,
        46,0,82,232,49,254,94,135,222,86,139,23,128,250,255,117,3,233,188,244,14,187,7,101,83,255,54,80,3,82,160,251,2,80,60,3,117,
        3,232,247,12,88,135,218,187,163,4,203,232,97,243,185,0,0,60,27,115,16,60,17,114,12,232,83,243,160,2,3,10,192,208,208,138,
        200,135,218,187,18,0,3,217,135,218,195,232,217,255,82,232,16,18,231,232,194,6,94,135,222,86,137,23,91,195,60,208,116,233,
        60,209,116,28,232,249,17,83,232,245,17,69,232,241,17,71,140,218,116,7,232,233,17,231,232,155,6,137,22,80,3,195,232,243,1,
        232,224,1,135,218,137,23,135,218,138,7,60,40,116,3,233,50,245,232,241,242,232,63,27,138,7,60,41,117,3,233,35,245,232,185,
        17,44,235,238,232,201,1,160,251,2,10,192,80,137,30,82,3,135,218,139,31,11,219,117,3,233,116,235,138,7,60,40,116,3,233,206,
        0,232,187,242,137,30,49,3,135,218,139,30,82,3,232,133,17,40,50,192,80,83,135,218,176,128,162,57,3,232,240,26,135,218,94,135,
        222,86,160,251,2,80,82,232,155,250,137,30,82,3,91,137,30,49,3,88,232,65,1,177,4,232,55,16,187,248,255,3,220,139,227,232,249,
        71,160,251,2,80,139,30,82,3,138,7,60,41,116,19,232,59,17,44,83,139,30,49,3,232,50,17,44,235,177,88,162,228,3,88,10,192,116,
        78,162,251,2,187,0,0,3,220,232,191,71,187,8,0,3,220,139,227,90,179,3,254,195,74,139,242,172,10,192,120,246,74,74,74,160,251,
        2,2,195,138,232,160,228,3,138,200,2,197,60,100,114,3,233,84,243,80,138,195,181,0,187,230,3,3,217,138,200,232,223,0,185,197,
        28,81,81,233,153,244,139,30,82,3,232,250,241,83,139,30,49,3,232,201,16,41,176,82,137,30,49,3,160,124,3,4,4,80,208,200,138,
        200,232,150,15,88,138,200,246,208,254,192,138,216,183,255,3,220,139,227,83,186,122,3,232,158,0,91,137,30,122,3,139,30,228,
        3,137,30,124,3,139,203,187,126,3,186,230,3,232,134,0,138,248,138,216,137,30,228,3,139,30,80,4,67,137,30,80,4,138,199,10,195,
        162,77,4,139,30,49,3,232,144,249,75,232,141,241,116,3,233,41,234,232,141,253,117,17,186,44,3,139,30,163,4,59,218,114,6,232,
        124,8,232,230,8,139,30,122,3,138,247,138,211,67,67,138,15,67,138,47,65,65,65,65,187,122,3,232,47,0,135,218,139,227,139,30,
        80,4,75,137,30,80,4,138,199,10,195,162,77,4,91,88,83,36,7,187,140,3,138,200,181,0,3,217,232,252,252,91,195,139,242,172,136,
        7,67,66,73,138,197,10,193,117,242,195,83,139,30,46,0,67,11,219,91,117,244,178,12,233,206,233,232,231,15,209,176,128,162,57,
        3,10,7,138,200,233,91,25,60,126,116,3,233,157,233,67,138,7,67,60,131,117,3,233,164,12,60,160,117,3,233,175,55,60,162,117,
        3,233,192,56,233,129,233,232,117,4,135,218,236,233,57,253,232,97,4,82,232,167,15,44,232,203,0,90,195,232,240,255,238,195,
        232,235,255,82,80,178,0,75,232,186,240,116,7,232,140,15,44,232,176,0,88,138,240,94,135,222,86,160,94,0,10,192,117,11,135,
        218,236,135,218,50,194,34,198,116,238,91,195,233,52,233,60,35,116,60,232,150,248,232,145,252,117,88,232,125,32,138,198,182,
        0,246,208,10,192,121,3,233,179,241,138,208,82,232,72,15,44,232,108,0,90,159,134,196,80,134,196,83,82,138,194,2,192,138,208,
        176,20,159,134,196,80,134,196,233,8,32,232,80,240,232,76,0,80,232,32,15,44,232,68,0,88,83,82,232,199,32,232,50,58,10,192,
        121,3,233,113,241,67,90,136,23,91,195,232,46,0,232,184,51,162,41,0,44,14,115,252,4,28,246,208,254,192,2,194,162,42,0,195,
        232,19,240,232,26,248,83,232,156,76,135,218,91,138,198,10,192,195,232,1,240,232,8,248,232,235,255,116,3,233,50,241,75,232,
        242,239,138,194,195,232,127,245,75,232,232,239,205,162,89,232,242,234,81,232,25,40,139,30,59,3,75,232,214,239,116,14,232,
        168,14,44,232,195,31,178,2,50,192,232,150,33,187,255,255,137,30,46,0,232,117,16,117,5,176,1,162,111,0,91,90,138,15,67,138,
        47,67,138,197,10,193,117,3,233,61,233,232,90,16,117,3,232,7,13,81,138,15,67,138,47,67,81,94,135,222,86,135,218,59,218,89,
        115,3,233,30,233,94,135,222,86,83,81,135,218,137,30,73,3,232,170,69,91,138,7,60,9,116,5,176,32,232,243,11,232,24,0,187,247,
        1,232,5,0,232,179,12,235,151,138,7,10,192,117,1,195,232,105,23,67,235,243,185,247,1,182,255,50,192,162,252,2,50,192,162,94,
        4,232,121,39,235,6,65,67,254,206,116,223,138,7,10,192,139,249,170,116,214,60,11,114,40,60,32,138,208,114,56,60,34,117,10,
        160,252,2,52,1,162,252,2,176,34,60,58,117,16,160,252,2,208,216,114,7,208,208,36,253,162,252,2,176,58,10,192,121,3,233,60,
        0,138,208,60,46,116,9,232,87,1,115,4,50,192,235,24,160,94,4,10,192,116,15,254,192,117,11,176,32,139,249,170,65,254,206,117,
        1,195,176,1,162,94,4,138,194,60,11,114,7,60,32,115,3,233,55,1,139,249,170,235,130,160,252,2,208,216,114,67,208,216,208,216,
        115,82,138,7,60,217,83,81,187,165,32,83,117,207,73,139,241,172,60,77,117,199,73,139,241,172,60,69,117,191,73,139,241,172,
        60,82,117,183,73,139,241,172,60,58,117,175,88,88,91,254,198,254,198,254,198,254,198,235,45,89,91,138,7,233,53,255,160,252,
        2,12,2,162,252,2,50,192,195,160,252,2,12,4,235,243,208,208,114,231,138,7,60,132,117,3,232,225,255,60,143,117,3,232,229,255,
        138,7,254,192,138,7,117,5,67,138,7,36,127,67,60,161,117,3,232,248,67,60,177,117,10,138,7,67,60,233,176,177,116,1,75,83,81,
        82,205,163,187,54,1,138,232,177,64,254,193,67,138,247,138,211,46,138,7,10,192,116,242,159,67,158,121,244,46,138,7,58,197,
        117,232,135,218,60,208,116,2,60,209,138,193,90,89,138,208,117,12,160,94,4,10,192,176,0,162,94,4,235,21,60,91,117,7,50,192,
        162,94,4,235,29,160,94,4,10,192,176,255,162,94,4,116,13,176,32,139,249,170,65,254,206,117,3,233,164,5,138,194,235,6,46,138,
        7,67,138,208,36,127,139,249,170,65,254,206,117,3,233,141,5,10,194,121,233,60,168,117,5,50,192,162,94,4,91,233,100,254,232,
        191,13,114,1,195,60,48,114,251,60,58,245,195,75,232,136,237,82,81,80,232,33,238,88,185,181,33,81,60,11,117,3,233,96,66,60,
        12,117,3,233,99,66,139,30,2,3,233,19,79,89,90,160,0,3,178,79,60,11,116,6,60,12,178,72,117,20,176,38,139,249,170,65,254,206,
        116,192,138,194,139,249,170,65,254,206,116,182,160,1,3,60,4,178,0,114,6,178,33,116,2,178,35,138,7,60,32,117,3,232,82,67,138,
        7,67,10,192,116,42,139,249,170,65,254,206,116,143,160,1,3,60,4,114,234,159,73,158,139,241,172,159,65,158,117,4,60,46,116,
        8,60,68,116,4,60,69,117,211,178,0,235,207,138,194,10,192,116,9,139,249,170,65,254,206,117,1,195,139,30,254,2,233,174,253,
        232,241,231,81,232,245,1,89,90,81,81,232,32,232,115,11,138,247,138,211,94,135,222,86,83,59,218,114,3,233,0,238,187,45,7,232,
        246,88,89,187,221,9,94,135,222,86,135,218,139,30,88,3,139,242,172,139,249,170,65,66,59,218,117,244,139,217,137,30,88,3,195,
        232,50,0,232,195,36,30,142,30,80,3,138,7,31,233,238,248,232,22,0,82,232,177,36,232,89,11,44,232,125,252,90,6,142,6,80,3,139,
        250,170,7,195,232,122,244,83,232,4,0,135,218,91,195,185,173,107,81,232,105,248,120,246,205,164,160,166,4,60,144,117,237,232,
        171,88,120,232,232,130,72,185,128,145,186,0,0,233,58,64,185,10,0,81,138,245,138,213,116,53,60,44,116,11,82,232,116,237,138,
        238,138,202,90,116,38,232,0,11,44,232,102,237,116,29,88,232,246,10,44,82,232,104,237,116,3,233,182,228,11,210,117,3,233,74,
        237,135,218,94,135,222,86,135,218,81,232,76,231,90,82,81,232,70,231,139,217,90,59,218,135,218,115,3,233,44,237,90,89,88,83,
        82,235,21,3,217,115,3,233,30,237,135,218,83,187,249,255,59,218,91,115,3,233,16,237,82,139,23,11,210,135,218,90,116,12,138,
        7,67,10,7,159,75,158,135,218,117,213,81,232,36,0,89,90,91,82,139,23,67,11,210,116,20,135,218,94,135,222,86,135,218,67,137,
        23,135,218,3,217,135,218,91,235,228,185,181,8,81,60,13,50,192,162,61,3,139,30,48,0,75,67,138,7,67,10,7,117,1,195,67,139,23,
        67,232,123,235,10,192,116,236,138,200,160,61,3,10,192,138,193,116,91,205,165,60,167,117,24,232,99,235,60,137,117,228,232,
        92,235,60,14,117,221,82,232,172,236,11,210,117,10,235,41,60,14,117,204,82,232,158,236,83,232,140,230,159,73,158,176,13,114,
        63,232,120,8,187,252,35,82,232,105,87,91,232,96,65,89,91,83,81,232,81,65,91,90,75,235,163,85,110,100,101,102,105,110,101,
        100,32,108,105,110,101,32,0,60,13,117,234,82,232,97,236,83,135,218,67,67,67,138,15,67,138,47,176,14,187,247,35,83,139,30,
        254,2,83,75,136,47,75,136,15,75,136,7,91,195,160,61,3,10,192,116,248,233,73,255,232,178,9,66,232,174,9,65,232,170,9,83,232,
        166,9,69,160,93,4,10,192,116,3,233,110,227,83,139,30,90,3,135,218,139,30,92,3,59,218,116,3,233,92,227,91,138,7,44,48,115,
        3,233,73,227,60,2,114,3,233,66,227,162,92,4,254,192,162,93,4,232,150,234,195,46,138,7,10,192,116,248,232,3,0,67,235,243,159,
        134,196,80,134,196,233,25,7,116,9,232,132,242,83,232,6,71,235,32,83,187,210,36,232,165,86,232,225,12,90,115,3,233,143,9,82,
        67,138,7,232,0,69,138,7,10,192,117,228,232,228,70,137,30,12,0,232,158,63,91,195,82,97,110,100,111,109,32,110,117,109,98,101,
        114,32,115,101,101,100,32,40,45,51,50,55,54,56,32,116,111,32,51,50,55,54,55,41,0,177,29,235,2,177,26,181,0,135,218,139,30,
        46,0,137,30,90,4,135,218,254,197,75,232,12,234,116,23,60,34,117,11,232,3,234,10,192,116,12,60,34,117,245,60,161,116,29,60,
        205,117,228,10,192,117,21,67,138,7,67,10,7,138,209,117,3,233,157,226,67,139,23,67,137,22,90,4,232,215,233,60,143,117,7,81,
        232,17,236,89,235,217,60,132,117,7,81,232,2,236,89,235,206,138,193,60,26,138,7,116,13,60,177,116,163,60,178,117,161,254,205,
        117,157,195,60,130,116,150,60,131,117,148,254,205,116,243,232,157,233,116,168,135,218,139,30,46,0,83,139,30,90,4,137,30,46,
        0,135,218,81,232,215,17,89,75,232,129,233,186,42,37,116,8,232,80,8,44,75,186,121,37,94,135,222,86,137,30,46,0,91,82,195,159,
        80,160,168,4,162,169,4,88,158,159,80,50,192,162,168,4,88,158,195,232,219,2,138,7,67,138,15,67,138,47,90,81,80,232,214,2,88,
        138,240,138,23,67,138,15,67,138,47,91,138,194,10,198,117,1,195,138,198,44,1,114,249,50,192,58,194,254,192,115,241,254,206,
        254,202,139,241,172,65,58,7,159,67,158,116,220,245,233,114,63,232,247,61,235,8,232,252,61,235,3,232,174,74,232,47,0,232,137,
        2,185,23,41,81,138,7,67,83,232,171,0,91,138,15,67,138,47,232,13,0,83,138,216,232,91,2,90,195,176,1,232,149,0,187,44,3,83,
        136,7,67,137,23,91,195,75,181,34,138,245,83,177,255,67,138,7,254,193,10,192,116,8,58,198,116,4,58,197,117,239,60,34,117,3,
        232,177,232,83,138,197,60,44,117,13,254,193,254,201,116,7,75,138,7,60,32,116,245,91,94,135,222,86,67,135,218,138,193,232,
        180,255,186,44,3,176,82,139,30,12,3,137,30,163,4,176,3,162,251,2,232,23,62,186,47,3,59,218,137,30,12,3,91,138,7,117,155,186,
        16,0,233,34,225,67,232,146,255,232,236,1,232,124,62,254,198,254,206,116,133,139,241,172,232,217,4,60,13,117,3,232,165,5,65,
        235,236,10,192,235,2,88,158,159,80,139,30,92,3,135,218,139,30,47,3,246,208,138,200,181,255,3,217,67,59,218,114,15,137,30,
        47,3,67,135,218,88,158,195,88,134,196,158,195,88,158,186,14,0,117,3,233,202,224,58,192,159,80,185,218,38,81,139,30,10,3,137,
        30,47,3,187,0,0,83,139,30,92,3,83,187,14,3,139,22,12,3,59,218,185,42,39,116,3,233,156,0,187,226,3,137,30,78,4,139,30,90,3,
        137,30,75,4,139,30,88,3,139,22,75,4,59,218,116,27,138,7,67,67,67,80,232,69,19,88,60,3,117,5,232,113,0,50,192,138,208,182,
        0,3,218,235,221,139,30,78,4,139,23,11,210,139,30,90,3,116,25,135,218,137,30,78,4,67,67,139,23,67,67,135,218,3,218,137,30,
        75,4,135,218,235,183,89,139,22,92,3,59,218,117,3,233,108,0,138,7,67,80,67,67,232,248,18,138,15,67,138,47,67,88,83,3,217,60,
        3,117,221,137,30,51,3,91,138,15,181,0,3,217,3,217,67,135,218,139,30,51,3,135,218,59,218,116,196,185,197,39,81,50,192,10,7,
        159,67,158,138,23,159,67,158,138,55,159,67,158,117,1,195,139,203,139,30,47,3,59,218,139,217,114,243,91,94,135,222,86,59,218,
        94,135,222,86,83,139,217,115,227,89,88,88,83,82,81,195,90,91,11,219,116,249,75,138,47,75,138,15,83,75,138,31,183,0,3,217,
        138,245,138,209,75,139,203,139,30,47,3,232,160,60,91,136,15,67,136,47,139,217,75,233,224,254,81,83,139,30,163,4,94,135,222,
        86,232,160,240,94,135,222,86,232,237,59,138,7,83,139,30,163,4,83,2,7,186,15,0,115,3,233,120,223,232,219,253,90,232,72,0,94,
        135,222,86,232,63,0,83,139,30,45,3,135,218,232,14,0,232,11,0,187,58,23,94,135,222,86,83,233,7,254,91,94,135,222,86,138,7,
        67,138,15,67,138,47,138,216,254,195,254,203,117,1,195,139,241,172,139,250,170,65,66,235,241,232,146,59,139,30,163,4,135,218,
        232,32,0,135,218,117,229,82,138,245,138,209,74,138,15,139,30,47,3,59,218,117,10,50,192,138,232,3,217,137,30,47,3,91,195,205,
        238,139,30,12,3,75,138,47,75,138,15,75,59,218,117,238,137,30,12,3,195,185,127,27,81,232,183,255,50,192,138,240,138,7,10,192,
        195,185,127,27,81,232,237,255,117,3,233,85,231,67,139,23,139,242,172,195,232,46,253,232,14,246,139,30,45,3,136,23,89,233,
        114,253,232,255,229,232,211,4,40,232,247,245,82,232,203,4,44,232,250,237,232,196,4,41,94,135,222,86,83,232,236,241,116,5,
        232,225,245,235,3,232,185,255,90,232,5,0,232,213,245,176,32,80,138,194,232,236,252,138,232,88,254,197,254,205,116,188,139,
        30,45,3,136,7,67,254,205,117,249,235,175,232,163,0,50,192,94,135,222,86,138,200,176,83,83,138,7,58,197,114,3,138,197,186,
        177,0,81,232,81,253,89,91,83,67,138,47,67,138,63,138,221,181,0,3,217,139,203,232,168,252,138,216,232,247,254,90,232,13,255,
        233,232,252,232,102,0,90,82,139,242,172,42,197,235,188,135,218,138,7,232,92,0,254,197,254,205,117,3,233,152,230,81,232,181,
        1,88,134,196,158,94,135,222,86,185,117,41,81,254,200,58,7,181,0,114,1,195,138,200,138,7,42,193,58,194,138,232,114,243,138,
        234,195,232,0,255,117,3,233,142,241,138,208,67,139,31,83,3,218,138,47,136,55,94,135,222,86,81,75,232,23,229,232,190,63,89,
        91,136,47,195,135,218,232,225,3,41,89,90,81,138,234,195,232,0,229,232,3,237,232,2,241,176,1,80,116,22,88,232,243,244,10,192,
        117,3,233,38,230,80,232,189,3,44,232,236,236,232,253,57,232,179,3,44,83,139,30,163,4,94,135,222,86,232,217,236,232,163,3,
        41,83,232,80,254,135,218,89,91,88,81,185,7,101,81,185,127,27,81,80,82,232,68,254,90,88,138,232,254,200,138,200,58,7,176,0,
        115,162,139,242,172,10,192,138,197,116,153,138,7,67,138,47,67,138,63,138,221,181,0,3,217,42,193,138,232,81,82,94,135,222,
        86,138,15,67,139,23,91,83,82,81,139,242,172,58,7,117,30,66,254,201,116,12,67,254,205,117,239,90,90,89,90,50,192,195,91,90,
        90,89,138,197,42,199,2,193,254,192,195,89,90,91,67,254,205,117,208,235,229,232,33,3,40,232,151,12,232,97,57,83,82,135,218,
        67,139,23,139,30,92,3,59,218,114,18,139,30,48,0,59,218,115,10,91,83,232,46,251,91,83,232,190,57,91,94,135,222,86,232,241,
        2,44,232,21,244,10,192,117,3,233,75,229,80,138,7,232,102,0,82,232,4,236,83,232,138,253,135,218,91,89,88,138,232,94,135,222,
        86,83,187,7,101,94,135,222,86,138,193,10,192,116,144,138,7,42,197,115,3,233,27,229,254,192,58,193,114,2,138,193,138,205,254,
        201,181,0,82,67,138,23,67,138,63,138,218,3,217,138,232,90,135,218,138,15,67,139,31,135,218,138,193,10,192,117,1,195,139,242,
        172,136,7,66,67,254,201,116,244,254,205,117,241,195,178,255,60,41,116,7,232,113,2,44,232,149,243,232,106,2,41,195,232,150,
        239,116,3,233,6,0,232,18,253,232,124,251,139,22,92,3,139,30,47,3,233,203,239,205,180,159,134,196,80,134,196,83,232,37,4,116,
        3,233,221,23,91,88,134,196,158,81,159,80,60,8,117,16,232,103,35,10,192,116,25,254,200,232,99,35,176,8,235,56,60,9,117,16,
        176,32,232,202,255,232,78,35,36,7,117,244,88,158,89,195,60,32,114,32,160,41,0,138,232,232,58,35,254,197,116,11,254,205,58,
        197,117,3,232,114,0,116,9,60,255,116,5,254,192,232,39,35,88,158,89,159,80,88,158,232,124,34,195,205,181,232,188,3,116,61,
        232,182,23,115,243,81,82,83,160,54,5,36,200,162,54,5,232,204,24,91,90,89,160,107,4,10,192,116,3,233,10,49,160,239,4,10,192,
        116,7,187,232,14,83,233,237,0,83,81,82,187,45,7,232,2,79,90,89,176,13,91,195,232,18,33,195,232,204,34,10,192,116,248,235,
        11,198,7,0,232,106,3,187,246,1,117,7,205,182,176,13,232,45,255,232,91,3,116,3,50,192,195,50,192,232,172,34,50,192,195,205,
        183,160,94,0,10,192,117,1,195,232,196,255,117,3,232,220,1,233,144,1,232,125,226,83,232,175,32,116,33,232,176,255,10,192,117,
        16,80,176,2,232,139,249,139,30,45,3,90,137,23,233,208,249,80,232,123,249,88,138,208,232,74,252,187,6,0,137,30,163,4,176,3,
        162,251,2,91,195,83,139,30,10,3,181,0,3,217,3,217,176,38,42,195,138,216,176,255,26,199,138,248,114,6,3,220,91,115,1,195,139,
        30,44,0,75,75,137,30,69,3,186,7,0,233,212,218,57,30,47,3,115,233,81,82,83,232,6,250,91,90,89,57,30,47,3,115,218,235,227,117,
        214,139,30,48,0,232,121,1,162,100,4,162,62,3,162,61,3,136,7,67,136,7,67,137,30,88,3,205,174,139,30,48,0,75,205,175,137,30,
        59,3,160,101,4,10,192,117,23,50,192,162,93,4,162,92,4,181,26,187,96,3,205,176,198,7,4,67,254,205,117,248,186,7,0,187,11,0,
        232,198,55,50,192,162,79,3,138,216,138,248,137,30,77,3,137,30,86,3,139,30,10,3,160,107,4,10,192,117,4,137,30,47,3,50,192,
        232,124,0,139,30,88,3,137,30,90,3,137,30,92,3,160,101,4,10,192,117,3,232,180,21,160,54,5,36,1,117,3,162,54,5,89,139,30,44,
        0,75,75,137,30,69,3,67,67,205,177,139,227,187,14,3,137,30,12,3,232,243,247,232,202,230,50,192,138,248,138,216,137,30,124,
        3,162,77,4,137,30,228,3,137,30,80,4,137,30,122,3,162,57,3,83,81,139,30,59,3,195,59,218,195,94,139,251,252,46,166,86,139,223,
        117,10,138,7,60,58,114,1,195,233,28,225,233,178,217,135,218,139,30,48,0,116,17,135,218,232,82,226,83,232,74,220,139,217,90,
        114,3,233,11,227,75,137,30,94,3,135,218,195,117,253,254,192,235,9,117,247,156,117,3,232,31,21,157,137,30,67,3,187,14,3,137,
        30,12,3,187,12,255,89,139,30,46,0,83,156,138,195,34,199,254,192,116,12,137,30,84,3,139,30,67,3,137,30,86,3,232,245,253,157,
        187,50,7,116,3,233,20,218,233,65,218,176,15,80,176,94,232,41,253,88,4,64,232,35,253,233,236,253,139,30,86,3,11,219,186,17,
        0,117,3,233,69,217,139,22,84,3,137,22,46,0,195,184,50,192,162,118,4,195,232,200,8,82,83,187,110,4,232,11,54,139,30,90,3,94,
        135,222,86,232,108,236,80,232,55,255,44,232,173,8,88,138,232,232,94,236,58,197,116,3,233,8,217,94,135,222,86,135,218,83,139,
        30,90,3,59,218,117,19,90,91,94,135,222,86,82,232,210,53,91,186,110,4,232,203,53,91,195,233,102,225,176,1,162,57,3,232,115,
        8,117,243,83,162,57,3,138,253,138,217,73,73,73,139,241,172,73,10,192,120,248,73,73,3,218,135,218,139,30,92,3,59,218,139,242,
        172,139,249,170,159,66,158,159,65,158,117,240,73,139,217,137,30,92,3,91,138,7,60,44,117,183,232,226,223,235,182,88,134,196,
        158,91,195,138,7,60,65,114,249,60,91,245,195,233,238,253,116,251,60,44,116,9,232,251,224,75,232,192,223,116,238,232,146,254,
        44,116,232,139,22,44,0,60,44,116,3,232,71,0,75,232,169,223,82,116,78,232,122,254,44,116,72,232,55,0,75,232,153,223,116,3,
        233,53,216,94,135,222,86,83,187,238,0,59,218,115,45,91,232,54,0,114,39,83,139,30,88,3,185,20,0,3,217,59,218,115,25,135,218,
        137,30,10,3,91,137,30,44,0,91,235,150,232,240,242,11,210,117,3,233,152,224,195,233,47,253,139,22,44,0,43,22,10,3,235,186,
        139,195,43,194,139,208,195,205,178,83,139,30,233,4,11,219,91,195,1,48,78,48,225,48,253,47,241,47,91,48,48,48,27,48,139,30,
        86,0,232,74,0,116,1,195,235,4,176,1,235,2,176,255,162,112,0,254,192,232,101,1,183,1,232,11,0,117,232,232,11,31,232,94,0,50,
        192,195,160,92,0,58,195,116,248,115,7,138,216,50,192,233,245,30,254,195,233,240,30,160,91,0,58,195,116,227,176,1,58,195,116,
        221,254,203,233,222,30,160,41,0,58,199,116,209,254,199,233,210,30,139,30,91,0,183,1,137,30,88,0,233,197,30,139,30,86,0,232,
        9,0,117,182,160,41,0,138,248,235,197,176,1,58,199,116,169,254,207,233,170,30,160,91,0,138,248,160,92,0,138,216,42,199,114,
        150,254,192,80,232,153,0,160,88,0,254,195,58,195,254,203,115,13,58,199,114,9,117,2,176,1,254,200,162,88,0,88,254,200,117,
        3,233,3,0,232,222,30,195,160,91,0,138,216,160,92,0,138,248,42,195,114,241,254,192,80,232,127,0,160,88,0,58,195,114,16,58,
        199,120,3,233,9,0,117,2,176,255,254,192,162,88,0,88,254,200,116,207,233,187,30,139,30,91,0,160,93,0,138,232,138,197,58,195,
        115,2,138,216,58,199,115,2,138,248,138,199,183,0,42,195,254,192,186,114,0,80,135,218,3,218,136,7,67,136,7,67,254,200,117,
        249,135,218,88,50,192,162,88,0,162,89,0,162,90,0,233,43,255,80,232,55,0,181,1,138,200,138,197,139,250,170,74,139,242,172,
        138,233,138,200,88,254,200,117,1,195,80,235,234,80,181,1,232,23,0,138,200,138,197,139,250,170,66,139,242,172,138,233,138,
        200,88,254,200,116,226,80,235,235,83,186,116,0,183,0,254,203,3,218,138,7,135,218,91,34,192,195,83,186,116,0,183,0,254,203,
        3,218,136,7,135,218,91,195,205,166,232,65,1,139,30,86,0,137,30,88,0,160,41,0,254,192,235,30,176,63,232,12,250,176,32,232,
        7,250,50,192,162,39,0,205,167,232,30,1,139,30,86,0,137,30,88,0,138,199,162,90,0,232,225,4,254,203,116,5,176,1,232,175,255,
        232,12,35,232,65,35,232,164,27,232,8,35,232,56,35,60,27,117,2,176,21,10,192,117,3,232,113,28,80,139,30,88,0,135,218,139,30,
        86,0,138,195,58,194,117,22,138,199,58,198,115,4,137,30,88,0,160,90,0,58,199,115,5,138,199,162,90,0,88,232,41,0,114,10,116,
        181,232,253,1,232,147,249,235,173,60,3,249,116,1,245,187,246,1,195,60,59,117,251,233,248,220,75,67,254,201,120,242,46,58,
        7,117,246,195,187,148,50,177,14,232,236,255,121,3,233,7,0,80,50,192,162,114,0,88,187,162,50,177,12,232,216,255,121,3,233,
        32,0,80,138,193,10,192,208,192,138,200,50,192,138,232,187,174,50,3,217,46,138,23,67,46,138,55,88,82,139,30,86,0,195,60,32,
        114,3,34,192,195,60,7,116,249,60,9,116,245,60,11,116,241,60,12,116,237,60,28,114,4,60,32,114,229,50,192,195,13,2,6,5,3,11,
        12,28,29,30,31,14,127,21,9,10,8,18,2,6,5,3,13,14,127,21,255,52,86,52,202,52,57,51,175,51,7,53,37,53,77,53,1,52,119,52,243,
        50,193,51,232,13,253,116,200,88,181,254,187,247,1,232,65,249,136,7,60,13,116,17,60,10,117,6,138,197,60,254,116,237,67,254,
        205,117,232,254,205,50,192,136,7,187,246,1,195,160,114,0,10,192,116,58,232,97,254,80,135,218,198,7,0,135,218,254,195,232,
        41,3,160,41,0,42,199,116,11,254,192,80,232,245,0,88,254,200,117,247,139,30,86,0,232,59,254,88,138,200,50,192,139,250,170,
        66,138,193,139,250,170,50,192,195,176,10,10,192,195,232,90,2,186,247,1,181,254,160,88,0,58,195,183,1,160,41,0,117,19,139,
        30,88,0,82,232,9,254,90,160,41,0,116,5,160,90,0,254,200,162,90,0,232,60,2,138,197,34,192,116,16,82,232,238,253,90,117,9,183,
        1,254,195,160,41,0,235,228,135,218,176,254,42,198,138,240,75,138,7,60,32,116,8,10,192,117,7,254,206,116,3,75,235,239,67,198,
        7,0,135,218,176,13,80,183,1,232,124,27,176,13,232,252,247,187,246,1,88,249,195,50,192,162,247,1,232,167,253,117,4,254,195,
        235,247,176,3,235,221,138,199,254,200,36,248,4,8,254,192,138,232,160,41,0,58,197,115,2,138,232,138,197,160,114,0,10,192,138,
        197,117,12,58,199,116,5,138,248,232,54,27,50,192,195,42,199,116,251,80,160,80,0,232,20,0,232,170,247,88,254,200,117,241,195,
        160,114,0,246,208,162,114,0,50,192,195,83,139,30,86,0,80,160,114,0,10,192,116,3,232,3,0,88,91,195,160,88,0,58,195,117,16,
        83,187,90,0,254,7,160,41,0,58,7,115,2,136,7,91,160,80,0,138,200,232,143,1,114,16,116,220,80,50,192,232,40,253,254,195,232,
        230,1,88,254,203,254,195,183,1,235,227,83,160,41,0,58,199,117,11,183,0,160,93,0,58,195,117,0,254,195,254,199,232,9,0,91,83,
        232,173,26,50,192,91,195,176,1,58,199,116,4,254,207,235,20,83,254,203,116,14,160,41,0,138,248,232,208,252,117,4,94,135,222,
        86,91,232,136,26,160,88,0,58,195,117,10,160,90,0,254,200,116,3,162,90,0,232,66,1,83,232,174,252,117,17,254,195,183,1,232,
        5,2,94,135,222,86,232,251,1,91,235,230,91,232,85,26,50,192,195,232,145,252,117,11,160,91,0,58,195,116,4,254,195,235,240,160,
        41,0,138,248,160,80,0,138,200,81,232,34,26,89,254,207,116,10,10,192,116,243,58,193,116,239,254,199,254,199,232,36,26,50,192,
        195,232,148,0,183,1,232,25,26,83,160,80,0,232,173,1,91,254,199,160,41,0,254,192,58,199,117,237,232,65,252,117,165,183,1,254,
        195,235,226,50,192,162,112,0,235,8,232,229,25,232,74,1,114,15,232,64,0,116,197,235,241,232,214,25,232,59,1,115,7,232,49,0,
        116,182,235,241,50,192,195,50,192,162,112,0,235,8,232,189,25,232,34,1,115,15,232,38,0,116,235,235,241,232,174,25,232,19,1,
        114,7,232,23,0,116,220,235,241,232,2,0,235,211,139,30,86,0,232,196,250,117,204,183,1,233,150,250,139,30,86,0,232,223,250,
        117,190,160,41,0,138,248,233,154,250,254,203,116,5,232,193,251,116,247,254,195,195,81,160,90,0,58,199,114,26,232,103,25,232,
        22,0,139,250,170,66,94,135,222,86,254,207,94,135,222,86,116,4,254,199,235,223,89,195,10,192,117,2,176,32,195,232,69,0,80,
        232,138,251,116,21,88,34,192,116,241,60,32,116,237,160,80,0,58,193,116,230,138,193,34,192,195,88,249,195,160,41,0,58,199,
        116,25,254,199,232,196,0,83,254,207,232,187,0,91,254,199,160,41,0,254,192,58,199,117,235,254,207,160,80,0,232,167,0,195,83,
        81,232,164,0,89,80,138,193,232,154,0,88,138,200,160,41,0,254,192,254,199,58,199,117,231,138,193,91,195,83,160,92,0,42,195,
        114,47,116,34,139,30,91,0,94,135,222,86,83,138,195,162,91,0,160,93,0,162,92,0,232,90,250,91,94,135,222,86,137,30,91,0,91,
        83,183,1,232,249,24,91,176,1,233,6,251,139,30,86,0,254,203,116,3,232,171,24,232,254,249,91,254,203,195,60,48,114,251,60,58,
        114,18,60,65,114,243,60,91,114,10,60,97,114,235,60,123,114,2,249,195,34,192,195,83,183,1,160,41,0,138,232,81,232,101,24,89,
        60,255,116,8,254,199,254,205,117,241,91,195,91,83,183,1,232,164,24,91,195,233,67,24,233,73,24,162,40,0,139,30,71,3,10,199,
        34,195,254,192,135,218,116,232,235,19,187,246,1,116,225,249,156,67,233,117,210,232,124,217,116,3,233,114,217,91,137,22,73,
        3,232,120,211,114,3,233,60,218,139,217,67,67,139,23,67,67,83,135,218,232,78,46,91,138,7,60,9,116,5,176,32,232,151,244,232,
        188,232,187,247,1,232,169,232,232,87,245,139,30,86,0,254,203,116,9,254,203,116,5,232,53,250,116,247,254,195,232,240,23,233,
        160,209,60,10,116,3,233,107,244,83,139,30,233,4,138,199,10,195,91,176,10,117,8,80,176,13,232,87,244,88,195,232,82,244,176,
        13,232,77,244,176,10,195,75,232,190,215,117,1,195,232,143,246,44,185,91,55,81,176,200,235,2,50,192,162,250,2,138,15,205,179,
        232,201,247,115,3,233,63,208,50,192,138,232,162,142,0,67,138,7,60,46,114,66,116,13,60,58,115,4,60,48,115,5,232,171,247,114,
        51,138,232,81,181,255,186,142,0,12,128,254,197,139,250,170,66,67,138,7,60,58,115,4,60,48,115,237,232,139,247,115,232,60,46,
        116,228,138,197,60,39,114,3,233,245,207,89,162,142,0,138,7,60,38,115,30,186,3,56,82,182,2,60,37,116,132,254,198,60,36,117,
        1,195,254,198,60,33,116,249,182,8,60,35,116,243,88,138,193,36,127,138,208,182,0,83,187,31,3,3,218,138,55,91,75,138,198,162,
        251,2,232,18,215,160,57,3,254,200,117,3,233,122,1,120,3,233,16,0,138,7,44,40,117,3,233,205,0,44,51,117,3,233,198,0,50,192,
        162,57,3,83,160,77,4,10,192,162,74,4,116,30,139,30,124,3,186,126,3,3,218,137,30,75,4,135,218,233,247,45,160,74,4,10,192,116,
        36,50,192,162,74,4,139,30,90,3,137,30,75,4,139,30,88,3,233,220,45,232,4,255,195,50,192,138,240,138,208,89,94,135,222,86,195,
        91,94,135,222,86,82,186,106,56,59,218,116,231,186,218,25,59,218,90,116,73,94,135,222,86,83,81,160,251,2,138,232,160,142,0,
        2,197,254,192,138,200,81,181,0,65,65,65,139,30,92,3,83,3,217,89,83,232,25,44,91,137,30,92,3,139,217,137,30,90,3,75,198,7,
        0,59,218,117,248,90,136,55,67,90,137,23,67,232,221,1,135,218,66,91,195,50,192,162,166,4,138,248,138,216,137,30,163,4,232,
        64,226,117,7,187,6,0,137,30,163,4,91,195,83,139,30,250,2,94,135,222,86,138,240,82,81,186,142,0,139,242,172,10,192,116,61,
        135,218,4,2,208,216,138,200,232,195,243,138,193,138,15,67,138,47,67,81,254,200,117,245,83,160,142,0,80,135,218,232,40,215,
        88,137,30,181,0,91,4,2,208,216,89,75,136,47,75,136,15,254,200,117,245,139,30,181,0,235,8,232,10,215,50,192,162,142,0,160,
        92,4,10,192,116,8,11,210,117,3,233,95,0,74,89,88,134,196,158,135,218,94,135,222,86,83,135,218,254,192,138,240,138,7,60,44,
        116,136,60,41,116,7,60,93,116,3,233,64,206,232,156,213,137,30,82,3,91,137,30,250,2,178,0,82,235,7,83,159,134,196,80,134,196,
        139,30,90,3,233,175,44,160,250,2,10,192,116,3,233,32,206,88,134,196,158,139,203,117,3,233,85,43,42,7,117,3,233,152,0,186,
        9,0,233,25,206,160,251,2,136,7,67,138,208,182,0,88,134,196,158,117,3,233,202,0,136,15,67,136,47,232,211,0,67,138,200,232,
        245,242,67,67,137,30,49,3,136,15,67,160,250,2,208,208,138,193,114,15,159,80,160,92,4,52,11,138,200,181,0,88,158,115,4,89,
        159,65,158,136,15,159,80,67,136,47,67,232,122,42,88,158,254,200,117,218,159,80,138,238,138,202,135,218,3,218,115,3,233,207,
        242,232,220,242,137,30,92,3,75,198,7,0,59,218,117,248,50,192,65,138,240,139,30,49,3,138,23,135,218,3,219,3,217,135,218,75,
        75,137,23,67,67,88,158,114,70,138,232,138,200,138,7,67,182,91,139,23,67,67,94,135,222,86,80,59,218,114,3,233,79,255,232,29,
        42,3,218,88,254,200,139,203,117,227,160,251,2,139,203,3,219,44,4,114,8,3,219,10,192,116,11,3,219,10,192,122,3,233,2,0,3,217,
        89,3,217,135,218,139,30,82,3,195,249,26,192,91,195,138,7,67,81,181,0,138,200,3,217,89,195,81,82,159,80,186,142,0,139,242,
        172,138,232,254,197,139,242,172,66,67,136,7,254,205,117,245,88,158,90,89,195,232,90,220,232,106,41,232,32,243,59,135,218,
        139,30,163,4,235,10,160,58,3,10,192,116,17,90,135,218,83,50,192,162,58,3,254,192,156,82,138,47,10,197,117,3,233,95,213,67,
        139,31,235,36,138,213,83,177,2,138,7,67,60,92,117,3,233,157,1,60,32,117,6,254,193,254,205,117,236,91,138,234,176,92,232,214,
        1,232,130,240,50,192,138,208,138,240,232,202,1,138,240,138,7,67,60,33,117,3,233,111,1,60,35,116,82,60,38,117,3,233,96,1,254,
        205,117,3,233,46,1,60,43,176,8,116,217,75,138,7,67,60,46,116,85,60,95,117,3,233,55,1,60,92,116,156,58,7,117,182,60,36,116,
        24,60,42,117,174,138,197,67,60,2,114,4,138,7,60,36,176,32,117,10,254,205,254,194,190,50,192,4,16,67,254,194,2,198,138,240,
        254,194,177,0,254,205,116,97,138,7,67,60,46,116,30,60,35,116,237,60,44,117,35,138,198,12,64,138,240,235,225,138,7,60,35,176,
        46,116,3,233,101,255,177,1,67,254,193,254,205,116,54,138,7,67,60,35,116,243,82,186,244,59,82,138,247,138,211,60,94,116,1,
        195,58,7,117,251,67,58,7,117,246,67,58,7,117,241,67,138,197,44,4,114,234,90,90,138,232,254,198,67,235,3,135,218,90,138,198,
        75,254,194,36,8,117,28,254,202,138,197,10,192,116,20,138,7,44,45,116,6,60,254,117,10,176,8,4,4,2,198,138,240,254,205,91,157,
        116,101,81,82,232,2,219,90,89,81,83,138,234,138,197,2,193,60,25,114,3,233,35,212,138,198,12,128,232,92,59,232,119,234,91,
        75,232,216,210,249,116,17,162,58,3,60,59,116,7,60,44,116,3,233,104,203,232,196,210,89,135,218,91,83,156,82,138,7,42,197,67,
        182,0,138,208,139,31,3,218,138,197,10,192,116,3,233,173,254,235,6,232,123,0,232,39,239,91,157,116,3,233,88,254,115,3,232,
        231,239,94,135,222,86,232,28,236,91,233,3,216,195,232,93,0,254,205,138,7,67,232,4,239,235,202,177,0,235,5,177,1,235,1,88,
        254,205,232,69,0,91,157,116,208,81,232,110,218,232,127,39,89,81,83,139,30,163,4,138,233,177,0,138,197,80,138,197,10,192,116,
        3,232,161,236,232,228,233,139,30,163,4,88,10,192,117,3,233,94,255,42,7,138,232,176,32,254,197,254,205,117,3,233,79,255,232,
        177,238,235,244,80,138,198,10,192,176,43,116,3,232,163,238,88,195,137,30,53,3,232,236,231,232,15,210,135,218,232,102,0,159,
        68,158,159,68,158,117,8,3,217,139,227,137,30,69,3,139,30,46,0,83,139,30,53,3,83,82,235,40,116,3,233,137,202,135,218,232,63,
        0,117,103,139,227,137,30,69,3,139,22,46,0,137,22,90,4,67,67,139,23,67,67,139,31,137,30,46,0,135,218,232,204,217,83,232,132,
        39,91,116,9,185,177,0,138,233,81,233,125,209,139,30,90,4,137,30,46,0,91,89,89,233,111,209,187,4,0,3,220,67,138,7,67,185,130,
        0,58,193,117,7,185,16,0,3,217,235,238,185,177,0,58,193,116,1,195,57,23,185,6,0,116,248,3,217,235,219,186,30,0,233,47,202,
        232,58,7,75,232,109,209,116,85,232,114,217,83,232,108,221,116,61,232,10,51,232,139,232,139,30,163,4,67,138,23,67,138,55,139,
        242,172,60,32,117,9,66,136,55,75,136,23,75,254,15,232,220,232,91,75,232,58,209,116,34,60,59,116,5,232,8,240,44,75,232,44,
        209,176,44,232,175,237,235,186,176,34,232,168,237,232,186,232,176,34,232,160,237,235,215,232,103,238,233,139,214,205,168,
        83,138,242,232,135,1,116,9,60,58,116,15,232,126,1,121,247,138,214,91,50,192,176,252,205,171,195,138,198,42,194,254,200,60,
        2,115,5,205,172,233,97,201,60,5,114,3,233,90,201,89,82,81,138,200,138,232,186,156,62,94,135,222,86,83,138,7,60,97,114,6,60,
        123,115,2,44,32,81,138,232,139,242,46,172,67,66,58,197,89,117,21,254,201,117,226,139,242,46,172,10,192,120,3,233,6,0,91,91,
        90,10,192,195,10,192,120,235,139,242,46,172,10,192,159,66,158,121,245,138,205,91,83,139,242,46,172,10,192,117,182,233,254,
        200,75,89,66,68,255,83,67,82,78,254,76,80,84,49,253,67,65,83,49,252,0,123,88,145,88,167,88,189,88,205,169,83,82,159,134,196,
        80,134,196,186,46,0,3,218,176,255,42,7,2,192,138,208,205,170,182,0,187,177,62,3,218,46,138,23,67,46,138,55,88,134,196,158,
        138,216,183,0,3,218,46,138,23,67,46,138,55,135,218,90,94,135,222,86,195,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,232,17,216,83,232,140,233,138,7,10,192,116,79,67,138,23,67,138,63,138,218,138,208,50,192,162,255,6,232,219,254,159,134,
        196,80,134,196,185,240,4,182,11,254,194,254,202,116,77,138,7,60,32,114,38,60,46,116,40,139,249,170,65,67,254,206,117,233,
        88,134,196,158,159,134,196,80,134,196,138,240,160,240,4,254,192,116,6,88,134,196,158,91,195,233,40,200,67,235,202,176,1,162,
        255,6,138,198,60,11,116,239,60,3,114,235,116,236,176,32,139,249,170,65,254,206,235,234,176,32,139,249,170,65,254,206,117,
        246,235,186,138,7,67,254,202,195,232,122,223,138,216,160,223,4,58,195,115,3,233,233,199,183,0,3,219,135,218,139,30,224,4,
        3,218,139,31,160,54,5,254,192,116,219,138,7,10,192,116,213,83,186,46,0,3,218,138,7,60,9,115,5,205,220,233,192,199,91,138,
        7,10,192,249,195,75,232,53,207,60,35,117,3,232,46,207,232,42,223,94,135,222,86,83,232,171,255,117,3,233,155,199,137,30,233,
        4,195,185,152,20,81,232,28,215,138,7,60,44,117,89,83,232,145,232,138,7,10,192,117,3,233,124,199,67,139,31,138,7,36,223,178,
        1,60,73,116,21,178,2,60,79,116,15,178,4,60,82,116,9,178,8,60,65,116,3,233,84,199,91,82,232,175,237,44,60,35,117,3,232,208,
        206,232,204,222,232,161,237,44,138,194,10,192,117,3,233,61,199,80,232,178,254,88,89,138,209,205,221,233,131,0,232,169,254,
        138,7,60,130,178,4,117,89,232,165,206,60,133,178,1,116,77,60,79,116,32,60,73,116,55,232,107,237,65,232,103,237,80,232,99,
        237,80,232,95,237,69,232,91,237,78,232,87,237,68,178,8,235,44,232,120,206,232,76,237,85,232,72,237,84,232,68,237,80,232,64,
        237,85,232,60,237,84,178,2,235,17,232,93,206,232,49,237,66,232,45,237,77,178,32,75,232,79,206,232,35,237,65,232,31,237,83,
        82,138,7,60,35,117,3,232,61,206,232,57,222,10,192,117,3,233,176,198,205,222,180,82,75,138,208,232,41,206,116,3,233,197,198,
        94,135,222,86,138,194,159,134,196,80,134,196,83,232,156,254,116,3,233,149,198,90,138,198,60,9,205,223,115,3,233,131,198,83,
        185,46,0,3,217,136,55,176,0,91,233,145,253,83,10,192,117,10,160,54,5,36,1,116,3,233,70,3,232,107,254,116,21,137,30,233,4,
        83,176,2,115,3,233,113,253,205,224,233,80,198,232,36,3,91,83,186,49,0,3,218,136,7,138,248,138,216,137,30,233,4,91,2,7,198,
        7,0,91,195,249,235,3,13,50,192,159,80,232,159,253,205,233,88,158,159,80,116,20,138,7,44,44,10,192,117,12,232,150,205,232,
        106,236,82,88,158,249,159,80,159,80,50,192,178,1,232,84,255,139,30,233,4,185,49,0,3,217,88,158,26,192,36,128,12,1,162,54,
        5,88,158,159,80,26,192,162,239,4,138,7,10,192,121,3,233,216,0,88,158,116,3,232,87,235,50,192,232,44,254,233,5,199,232,66,
        253,205,234,75,232,70,205,178,128,249,117,3,232,121,5,116,24,232,16,236,44,60,80,178,146,117,6,232,47,205,249,235,8,232,0,
        236,65,10,192,178,2,159,80,138,194,36,16,162,98,4,88,158,159,80,254,192,162,95,0,50,192,232,221,254,88,158,83,139,30,233,
        4,138,7,91,36,128,117,3,233,20,221,83,232,99,225,160,98,4,10,192,116,3,232,121,4,139,30,88,3,137,30,4,7,139,30,48,0,83,139,
        30,233,4,232,198,0,10,192,121,3,233,22,0,233,77,197,160,98,4,10,192,116,3,232,162,4,91,50,192,162,98,4,233,200,254,91,232,
        2,0,235,231,232,160,0,60,252,117,3,233,13,26,205,235,233,31,197,139,30,48,0,10,192,232,3,0,233,70,0,159,80,232,131,0,60,252,
        117,3,233,54,26,88,158,205,236,233,0,197,88,158,195,36,32,162,99,4,88,158,117,3,233,241,196,232,119,234,160,99,4,162,100,
        4,232,171,0,50,192,232,241,252,198,7,128,137,30,233,4,232,75,0,10,192,120,179,205,237,233,211,196,160,100,4,10,192,116,3,
        232,40,4,232,39,199,67,67,137,30,88,3,232,90,234,50,192,162,54,5,232,67,254,160,239,4,10,192,116,3,233,249,203,233,196,197,
        135,218,139,30,47,3,135,218,59,218,114,152,232,28,234,50,192,162,54,5,233,235,233,83,82,139,30,233,4,186,46,0,3,218,138,7,
        90,91,195,117,30,83,81,80,186,38,67,82,81,10,192,195,88,89,254,200,121,240,91,195,89,91,138,7,60,44,117,247,232,228,203,81,
        138,7,60,35,117,3,232,218,203,232,214,219,94,135,222,86,83,186,46,67,82,249,255,227,185,40,65,160,223,4,235,191,160,54,5,
        10,192,120,204,185,40,65,50,192,160,223,4,235,174,50,192,138,232,138,197,232,49,252,198,7,0,160,223,4,254,197,42,197,115,
        239,50,192,162,54,5,232,149,233,139,30,48,0,75,198,7,0,233,219,195,91,88,134,196,158,83,82,81,159,134,196,80,134,196,139,
        30,233,4,176,6,232,5,0,205,227,233,235,195,159,134,196,80,134,196,82,135,218,187,46,0,3,218,138,7,135,218,90,60,9,115,3,233,
        202,0,88,134,196,158,94,135,222,86,91,233,228,250,81,83,82,139,30,233,4,176,8,232,206,255,205,228,233,180,195,90,91,89,195,
        232,48,203,232,4,234,36,232,0,234,40,83,139,30,233,4,83,187,0,0,137,30,233,4,91,94,135,222,86,232,18,219,82,138,7,60,44,117,
        11,232,9,203,232,205,251,91,50,192,138,7,159,80,232,211,233,41,88,158,94,135,222,86,159,80,138,195,10,192,117,3,233,38,204,
        83,232,7,226,135,218,89,88,158,159,80,116,40,232,22,232,60,3,116,19,136,7,67,254,201,117,236,88,158,89,91,137,30,233,4,81,
        233,51,226,88,158,139,30,46,0,137,30,71,3,91,233,6,195,232,106,255,115,3,233,48,195,235,213,205,229,232,18,0,83,181,1,232,
        2,0,91,195,50,192,136,7,67,254,205,117,249,195,139,30,233,4,186,51,0,3,218,195,88,134,196,158,195,232,7,251,117,3,233,250,
        194,176,10,115,3,233,18,250,205,230,233,238,194,232,243,250,117,3,233,230,194,176,12,115,3,233,254,249,205,231,233,218,194,
        232,223,250,117,3,233,210,194,176,14,115,3,233,234,249,205,232,233,198,194,232,255,234,117,3,233,31,202,50,192,232,71,252,
        178,66,233,242,194,60,35,117,173,232,44,218,232,4,233,44,138,194,83,232,0,251,91,138,7,195,185,236,45,81,50,192,233,36,252,
        232,30,214,185,155,22,186,32,44,117,27,138,214,235,23,185,152,20,81,232,204,255,232,81,242,232,27,31,82,185,138,17,50,192,
        138,240,138,208,80,81,83,232,165,254,115,3,233,107,194,60,32,117,6,254,198,254,206,117,238,60,34,117,19,138,232,138,194,60,
        44,138,197,117,9,138,245,138,213,232,129,254,114,83,187,247,1,181,255,138,200,138,198,60,34,138,193,116,46,60,13,83,116,89,
        91,60,10,117,36,138,200,138,194,60,44,138,193,116,3,232,137,0,83,232,85,254,91,114,38,60,13,117,12,138,194,60,32,116,21,60,
        44,176,13,116,15,10,192,116,11,58,198,116,14,58,194,116,10,232,99,0,83,232,47,254,91,115,178,83,60,34,116,4,60,32,117,37,
        232,32,254,114,32,60,32,116,247,60,44,116,24,60,13,117,4,205,225,116,16,139,30,233,4,138,200,176,18,232,221,253,205,226,233,
        195,193,91,198,7,0,187,246,1,138,194,44,32,116,7,181,0,232,102,224,91,195,232,55,213,159,80,232,42,201,88,158,159,80,115,
        3,232,196,35,88,158,114,3,232,196,35,91,195,10,192,116,251,136,7,67,254,205,117,244,89,235,197,232,70,0,162,96,0,254,192,
        116,3,233,158,193,83,81,178,2,232,198,250,91,232,59,252,50,192,162,96,0,233,26,252,232,38,0,10,192,116,7,254,192,117,3,233,
        125,193,254,200,162,96,0,83,81,50,192,178,1,232,158,250,91,232,46,252,50,192,162,96,0,91,233,204,250,232,180,248,82,75,232,
        185,200,90,117,3,176,1,195,82,232,134,231,44,232,43,0,82,75,232,166,200,117,5,89,90,50,192,195,232,115,231,44,232,24,0,89,
        135,218,3,217,137,30,4,7,135,218,75,232,137,200,116,3,233,37,193,90,176,255,195,232,135,208,83,232,17,220,90,135,218,195,
        185,11,13,139,30,48,0,135,218,139,30,88,3,59,218,117,1,195,187,23,98,138,195,2,193,138,216,138,199,20,0,138,248,139,242,172,
        42,197,46,50,7,80,187,118,97,138,195,2,197,138,216,138,199,20,0,138,248,88,46,50,7,2,193,139,250,170,66,254,201,117,2,177,
        11,254,205,117,188,181,13,235,184,185,11,13,139,30,48,0,135,218,139,30,88,3,59,218,116,175,187,118,97,138,195,2,197,138,216,
        138,199,20,0,138,248,139,242,172,42,193,46,50,7,80,187,23,98,138,195,2,193,138,216,138,199,20,0,138,248,88,46,50,7,2,197,
        139,250,170,66,254,201,117,2,177,11,254,205,117,189,181,13,235,185,83,139,30,46,0,138,199,34,195,91,254,192,116,1,195,159,
        80,160,100,4,10,192,116,3,233,245,200,88,158,195,138,7,60,64,117,3,232,173,199,185,0,0,138,245,138,209,60,234,116,31,138,
        7,60,207,156,117,3,232,152,199,232,108,230,40,232,126,215,82,232,100,230,44,232,118,215,232,93,230,41,89,157,83,139,30,61,
        5,116,3,187,0,0,159,3,217,209,222,158,209,214,137,30,61,5,137,30,55,5,139,203,139,30,59,5,116,3,187,0,0,3,218,137,30,59,5,
        137,30,57,5,135,218,91,195,50,192,235,2,176,3,80,232,164,255,88,232,46,0,83,232,40,3,115,6,232,127,2,232,85,2,91,195,232,
        49,199,232,140,255,83,232,20,3,187,255,255,115,10,232,104,2,232,27,2,138,216,183,0,232,7,29,91,195,176,3,81,82,138,208,75,
        232,12,199,116,11,232,222,229,44,60,44,116,3,232,254,214,138,194,83,232,193,2,115,3,233,48,200,91,90,89,233,239,198,139,30,
        55,5,138,195,42,193,138,216,138,199,26,197,138,248,115,197,50,192,42,195,138,216,26,199,42,195,138,248,249,195,139,30,57,
        5,138,195,42,194,138,216,138,199,26,198,138,248,235,222,83,139,30,57,5,135,218,137,30,57,5,91,195,232,240,255,83,81,139,30,
        55,5,94,135,222,86,137,30,55,5,89,91,195,232,226,254,81,82,232,106,229,234,232,237,254,232,118,255,90,89,116,83,232,92,229,
        44,232,88,229,66,117,3,233,96,0,232,79,229,70,83,232,93,2,232,193,255,232,87,2,232,156,255,115,3,232,169,255,67,83,232,114,
        255,115,3,232,175,255,67,83,232,156,1,90,89,82,81,232,219,0,80,83,135,218,232,105,2,91,88,232,215,0,232,248,0,89,90,73,138,
        197,10,193,117,227,91,195,81,82,83,232,69,0,139,30,61,5,137,30,55,5,139,30,59,5,137,30,57,5,91,90,89,195,83,139,30,57,5,83,
        82,135,218,232,218,255,91,137,30,57,5,135,218,232,208,255,91,137,30,57,5,139,30,55,5,81,139,203,232,193,255,91,137,30,55,
        5,139,203,232,183,255,91,195,205,184,232,207,1,232,51,255,232,201,1,232,14,255,115,3,232,40,255,82,83,232,228,254,135,218,
        187,241,73,115,3,187,5,74,94,135,222,86,59,218,115,20,137,30,253,6,91,137,30,247,6,187,213,73,137,30,249,6,135,218,235,22,
        94,135,222,86,137,30,249,6,187,213,73,137,30,247,6,135,218,137,30,253,6,91,90,83,137,30,251,6,232,211,0,90,82,232,5,0,89,
        65,233,32,2,138,198,10,192,208,216,138,240,138,194,208,216,138,208,195,139,30,243,6,160,245,6,195,137,30,243,6,162,245,6,
        195,139,30,243,6,129,251,0,32,114,9,129,235,0,32,137,30,243,6,195,129,195,80,32,137,30,243,6,195,139,30,243,6,129,251,0,32,
        114,9,129,235,176,31,137,30,243,6,195,129,195,0,32,137,30,243,6,195,138,193,138,14,85,0,210,14,245,6,138,200,114,1,195,255,
        6,243,6,195,138,193,138,14,85,0,210,6,245,6,138,200,114,1,195,255,14,243,6,195,140,198,191,0,184,142,199,139,30,243,6,38,
        138,7,138,22,245,6,34,194,138,14,85,0,210,234,114,4,210,232,235,248,142,198,195,140,198,191,0,184,142,199,139,30,243,6,139,
        233,160,245,6,246,208,38,34,7,138,14,246,6,34,14,245,6,10,193,38,136,7,139,205,142,198,195,139,233,209,234,159,139,218,177,
        2,211,226,3,211,177,4,211,226,158,115,4,129,194,0,32,137,22,243,6,139,213,138,202,246,6,85,0,1,116,20,176,7,34,200,176,128,
        210,232,162,245,6,177,3,211,234,1,22,243,6,195,176,3,34,200,2,201,176,192,210,232,162,245,6,177,2,211,234,1,22,243,6,195,
        160,72,0,199,6,59,5,100,0,60,6,116,18,115,28,60,4,114,24,198,6,85,0,2,199,6,61,5,160,0,195,198,6,85,0,1,199,6,61,5,64,1,195,
        198,6,85,0,0,195,60,4,115,15,246,6,85,0,1,116,12,36,1,246,216,162,246,6,248,195,233,93,197,36,3,177,85,246,225,162,246,6,
        248,195,160,85,0,10,192,116,235,10,237,120,39,187,128,2,132,6,1,0,116,3,187,64,1,59,203,159,114,3,75,139,203,10,246,120,12,
        129,250,200,0,114,4,186,199,0,195,158,195,51,210,195,51,201,159,235,232,140,198,191,0,184,142,199,139,211,11,210,116,108,
        139,30,243,6,38,138,47,160,245,6,138,224,246,208,138,14,85,0,138,30,246,6,34,232,138,252,34,251,10,239,74,116,64,210,200,
        210,204,115,239,139,30,243,6,38,136,47,255,6,243,6,136,38,245,6,139,202,209,233,209,233,246,6,85,0,1,117,6,129,226,3,0,235,
        6,129,226,7,0,209,233,227,171,252,160,246,6,139,62,243,6,243,170,137,62,243,6,235,155,139,30,243,6,38,136,47,136,38,245,6,
        142,198,195,232,127,254,3,22,253,6,59,22,251,6,114,9,43,22,251,6,62,255,22,249,6,62,255,22,247,6,226,227,195,83,232,163,207,
        91,195,83,232,39,25,91,195,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,15,205,16,162,72,0,180,40,60,2,114,13,
        180,80,60,7,117,7,185,12,11,137,14,104,0,136,38,41,0,250,140,219,137,30,80,3,30,186,0,0,142,218,137,30,16,5,187,52,77,137,
        30,108,0,187,68,87,137,30,112,0,140,14,110,0,140,14,114,0,31,232,50,0,187,24,2,185,0,0,142,193,185,122,0,38,140,143,2,0,38,
        199,7,148,76,131,195,4,224,241,140,219,142,195,232,72,225,251,180,1,205,23,232,119,6,187,155,76,232,223,46,233,99,50,190,
        237,76,187,83,6,185,10,0,83,252,46,172,136,7,67,10,192,117,246,91,131,195,16,224,239,195,207,62,255,46,0,7,203,84,104,101,
        32,73,66,77,32,80,101,114,115,111,110,97,108,32,67,111,109,112,117,116,101,114,32,66,97,115,105,99,255,13,86,101,114,115,
        105,111,110,32,67,49,46,48,48,32,67,111,112,121,114,105,103,104,116,32,73,66,77,32,67,111,114,112,32,49,57,56,49,255,13,0,
        50,53,45,65,112,114,45,56,49,76,73,83,84,32,0,82,85,78,13,0,76,79,65,68,34,0,83,65,86,69,34,0,67,79,78,84,13,0,44,34,76,80,
        84,49,58,34,13,0,84,82,79,78,13,0,84,82,79,70,70,13,0,75,69,89,32,0,83,67,82,69,69,78,32,48,44,48,44,48,13,0,156,80,30,82,
        186,0,0,142,218,142,30,16,5,232,58,10,136,22,106,0,254,202,136,22,94,0,90,31,88,157,207,86,160,94,0,10,192,117,17,160,106,
        0,10,192,117,10,180,1,205,22,176,0,116,2,254,200,94,195,160,94,0,10,192,116,8,50,192,162,94,0,176,3,195,86,87,160,106,0,10,
        192,117,116,180,0,205,22,10,192,116,3,95,94,195,83,128,252,59,114,5,128,252,69,114,60,139,30,46,0,67,11,219,117,19,187,52,
        78,177,26,46,58,39,116,12,67,254,192,254,201,117,244,50,192,91,235,211,50,228,208,224,139,216,46,139,159,3,1,137,30,107,0,
        254,14,106,0,208,232,4,65,140,14,109,0,235,224,80,134,196,44,59,179,16,246,227,187,83,6,3,216,246,7,255,88,116,204,137,30,
        107,0,140,30,109,0,254,14,106,0,235,12,83,254,200,117,7,162,106,0,176,32,235,178,30,197,30,107,0,138,7,31,255,6,107,0,10,
        192,116,2,121,160,180,1,140,203,138,30,110,0,58,223,115,2,254,204,136,38,106,0,36,127,117,138,91,95,94,233,58,255,30,48,46,
        32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,83,81,86,190,108,78,177,14,252,46,172,58,224,116,9,70,
        254,201,117,244,50,192,235,2,46,172,94,89,91,195,71,11,72,30,75,29,77,28,80,31,28,10,116,6,115,2,118,1,82,18,83,127,79,14,
        117,5,119,12,31,30,29,28,13,12,11,10,156,83,81,82,80,60,7,116,77,60,13,117,10,246,6,111,0,255,116,3,232,139,0,232,44,2,116,
        4,60,255,116,57,60,12,116,34,187,135,78,185,8,0,67,254,201,120,28,46,58,7,117,246,208,225,139,217,185,233,78,81,46,255,183,
        225,47,139,30,86,0,195,232,14,4,235,14,232,62,0,232,14,0,232,13,225,235,3,232,36,9,88,90,89,91,157,195,80,138,62,73,0,138,
        30,78,0,185,1,0,180,9,205,16,88,195,83,232,113,0,232,231,255,91,195,83,232,104,0,180,8,205,16,91,195,232,243,255,138,232,
        138,204,195,139,30,86,0,137,30,86,0,156,83,232,77,0,91,157,195,160,87,0,254,200,195,80,138,14,41,0,42,14,87,0,254,193,181,
        0,138,62,73,0,138,30,79,0,176,32,180,9,205,16,139,22,86,0,134,242,254,206,254,202,180,2,205,16,88,195,83,232,21,0,138,62,
        73,0,138,30,79,0,138,14,41,0,181,0,176,32,180,9,205,16,91,80,82,139,211,134,242,254,206,254,202,138,62,73,0,180,2,205,16,
        90,88,195,83,82,177,0,138,239,138,243,232,27,0,180,6,205,16,235,15,83,82,177,0,138,235,138,247,232,10,0,180,7,205,16,232,
        28,0,90,91,195,232,17,0,138,22,41,0,254,202,254,206,254,205,176,1,138,62,79,0,195,160,73,0,235,3,160,74,0,232,6,1,117,32,
        138,38,72,0,128,252,7,116,23,82,186,0,8,128,252,2,114,2,208,230,50,228,247,226,30,142,218,163,78,4,31,90,195,156,83,82,80,
        186,0,0,180,0,205,23,246,196,32,117,14,246,196,4,117,13,246,196,1,116,13,178,24,235,6,178,27,235,2,178,25,233,190,183,88,
        80,60,13,117,5,176,10,232,206,255,88,90,91,157,195,60,147,116,96,60,149,116,70,60,221,116,70,232,227,206,10,192,116,56,254,
        200,60,10,115,50,186,16,0,246,226,138,208,129,194,83,6,82,232,162,221,44,232,209,198,83,232,76,216,138,15,128,249,15,114,
        2,177,15,67,139,55,91,95,83,181,0,252,243,164,136,45,232,117,0,91,195,233,225,191,176,255,235,2,176,0,58,6,113,0,162,113,
        0,116,3,232,94,0,232,144,190,195,83,190,83,6,185,10,0,254,197,86,176,70,232,8,219,81,138,221,183,0,232,171,20,176,32,232,
        251,218,89,94,86,81,252,172,10,192,116,5,232,19,0,235,245,176,13,232,231,218,89,94,131,198,16,254,201,117,206,91,235,192,
        86,60,13,117,2,176,27,232,209,218,94,195,80,160,72,0,60,7,116,4,60,4,115,2,50,192,10,192,88,195,83,205,173,182,24,178,0,138,
        62,73,0,180,2,205,16,160,113,0,10,192,117,19,138,30,79,0,138,14,41,0,181,0,180,9,205,16,232,13,254,91,195,179,7,232,192,255,
        117,9,160,76,0,10,192,117,2,179,112,190,83,6,181,5,160,41,0,60,40,176,49,116,2,181,10,80,83,138,30,78,0,232,55,0,91,86,177,
        6,81,252,172,10,192,156,86,117,2,50,192,232,37,0,94,157,117,1,78,89,254,201,117,232,232,22,0,94,131,198,16,88,254,192,60,
        58,114,2,176,48,254,205,117,199,232,175,253,91,195,50,192,83,10,192,117,6,176,32,138,30,79,0,60,13,117,2,176,27,81,185,1,
        0,180,9,205,16,254,194,180,2,205,16,89,91,195,138,14,73,0,181,0,138,38,72,0,246,196,1,116,3,128,205,128,128,252,4,114,9,254,
        197,128,252,6,114,2,254,197,81,60,44,116,12,232,97,205,89,138,232,81,232,92,189,116,64,232,45,220,44,60,44,116,21,232,77,
        205,10,192,116,2,176,128,89,128,229,3,10,232,81,232,63,189,116,35,232,16,220,44,60,44,116,12,232,48,205,89,138,200,81,232,
        43,189,116,15,232,252,219,44,232,32,205,138,240,89,235,6,233,85,190,89,138,241,138,38,41,0,138,197,36,127,10,192,116,10,50,
        210,10,214,10,209,117,230,235,27,128,252,40,116,12,128,254,4,115,218,128,249,4,114,12,235,211,128,254,8,115,206,128,249,8,
        115,201,138,209,10,192,116,32,128,62,72,0,7,116,92,177,6,60,2,180,80,116,42,180,40,254,201,254,200,117,172,246,197,128,117,
        29,254,201,235,25,177,2,128,252,40,116,9,246,197,128,116,13,254,193,235,9,254,201,246,197,128,117,2,254,201,136,38,41,0,161,
        72,0,136,14,72,0,137,22,73,0,58,193,116,26,184,7,0,163,75,0,134,196,163,77,0,136,38,79,0,232,58,254,116,3,162,79,0,232,110,
        0,160,74,0,180,5,205,16,195,58,6,41,0,116,52,138,38,72,0,60,80,116,7,60,40,116,3,233,152,189,128,252,7,117,4,176,80,235,28,
        128,244,2,128,252,7,117,2,254,204,80,162,41,0,136,38,72,0,199,6,73,0,0,0,232,45,0,88,195,83,232,218,252,178,39,128,62,41,
        0,40,116,2,178,79,182,24,138,62,79,0,185,0,0,138,193,180,6,205,16,186,0,0,138,62,73,0,180,2,205,16,235,15,83,185,0,0,137,
        14,73,0,160,72,0,180,0,205,16,232,189,221,232,193,253,232,138,247,232,157,252,91,195,232,164,253,116,91,177,0,190,81,0,128,
        62,72,0,6,117,3,233,22,189,138,44,86,81,232,212,187,116,64,60,44,116,7,232,201,203,89,138,232,81,89,81,83,138,249,138,221,
        128,255,0,117,8,128,251,8,114,3,128,203,16,180,11,205,16,91,232,171,187,116,3,232,165,187,89,94,136,44,116,8,70,254,193,128,
        249,4,114,189,198,6,79,0,0,195,89,94,195,255,54,77,0,255,54,75,0,60,44,116,16,232,126,203,60,32,115,24,89,138,200,81,232,
        117,187,116,44,232,70,218,44,60,44,116,19,232,102,203,60,16,114,3,233,156,188,89,138,232,81,232,90,187,116,17,232,43,218,
        44,232,79,203,60,16,115,233,89,90,138,208,82,81,89,90,138,241,128,230,15,137,14,75,0,138,197,208,224,36,16,10,194,128,229,
        7,208,229,208,229,208,229,208,229,246,193,16,116,3,128,205,128,10,238,83,138,216,183,0,36,15,162,77,0,136,46,78,0,136,46,
        79,0,180,11,205,16,91,195,255,54,86,0,60,44,116,32,232,250,202,10,192,116,91,60,26,115,87,138,38,113,0,10,228,116,4,60,25,
        115,75,90,138,208,82,232,225,186,116,123,232,178,217,44,60,44,116,24,232,210,202,10,192,116,51,138,38,41,0,58,224,114,43,
        90,138,240,82,232,193,186,116,91,255,54,104,0,232,142,217,44,60,44,116,25,232,174,202,10,192,176,0,117,2,176,32,89,10,232,
        81,232,161,186,116,45,235,3,233,213,187,232,109,217,44,232,145,202,60,32,115,242,89,128,229,32,10,232,138,200,81,232,131,
        186,116,15,232,84,217,44,232,120,202,60,32,115,217,89,138,200,81,89,81,128,229,15,137,14,104,0,89,180,1,205,16,90,137,22,
        86,0,134,242,254,206,254,202,83,138,62,73,0,180,2,205,16,91,195,80,176,0,235,3,80,176,32,156,81,83,80,232,61,250,88,91,139,
        14,104,0,246,6,114,0,255,116,2,181,4,10,232,180,1,205,16,89,157,88,195,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,
        255,80,156,232,201,251,116,75,83,81,82,140,198,191,0,0,142,199,38,255,54,124,0,38,255,54,126,0,38,199,6,124,0,248,84,38,140,
        14,126,0,142,198,176,129,2,6,114,0,179,131,138,62,73,0,185,1,0,180,9,205,16,140,198,191,0,0,142,199,38,143,6,126,0,38,143,
        6,124,0,142,198,90,89,91,157,88,195,232,189,185,160,86,0,233,114,246,232,180,185,232,101,0,10,238,117,86,10,234,10,233,116,
        80,138,38,41,0,58,226,114,72,128,249,26,115,67,160,113,0,10,192,116,5,128,249,25,115,55,83,138,241,254,206,254,202,138,62,
        73,0,180,2,205,16,180,8,205,16,91,80,232,119,185,60,44,116,4,176,0,235,7,232,66,216,44,232,102,201,80,232,58,216,41,88,10,
        192,88,116,2,138,196,233,18,246,233,144,186,232,5,0,232,37,216,41,195,232,32,216,40,232,50,201,82,232,24,216,44,232,42,201,
        89,195,232,56,185,60,149,116,8,232,8,216,221,50,192,235,5,232,41,185,176,255,162,52,0,195,160,52,0,10,192,116,48,232,27,201,
        60,10,115,41,83,86,186,26,86,82,50,228,209,224,139,240,46,255,180,29,86,195,94,91,195,52,86,63,86,70,86,76,86,107,86,114,
        86,120,86,128,86,136,86,144,86,233,37,186,187,53,0,138,7,198,7,0,233,159,245,139,30,55,0,233,198,14,160,57,0,233,140,245,
        180,4,205,16,80,10,228,116,12,137,30,58,0,136,46,60,0,137,22,63,0,88,138,196,254,200,246,208,233,115,245,139,30,58,0,233,
        154,14,160,60,0,233,96,245,160,62,0,254,192,233,88,245,160,61,0,254,192,233,80,245,160,64,0,254,192,233,72,245,160,63,0,254,
        192,233,64,245,232,132,200,10,192,116,18,60,4,115,84,180,0,83,187,65,0,3,216,138,7,91,233,39,245,83,186,1,2,185,1,1,187,15,
        0,250,238,236,36,15,58,195,225,249,227,11,50,195,138,225,80,254,199,50,216,235,236,10,255,116,26,138,215,187,65,0,185,4,0,
        88,246,212,2,226,208,232,115,2,136,39,67,226,247,254,202,117,232,251,91,160,65,0,233,225,244,233,95,185,232,32,184,60,149,
        116,8,232,240,214,221,50,192,235,5,232,17,184,176,255,162,69,0,195,160,69,0,10,192,116,222,232,3,200,60,4,115,215,168,1,116,
        14,180,16,254,200,116,2,180,64,232,208,0,233,172,244,83,187,70,0,10,192,116,1,67,138,7,198,7,0,91,233,154,244,156,80,85,86,
        87,30,186,0,0,142,218,142,30,16,5,161,102,0,10,196,116,9,255,14,102,0,117,3,232,39,0,160,52,0,10,192,116,3,232,54,0,160,69,
        0,10,192,116,3,232,105,0,31,95,94,93,88,157,207,198,6,101,0,0,161,102,0,11,192,116,24,82,250,246,6,101,0,255,117,7,186,97,
        0,236,36,252,238,199,6,102,0,0,0,251,90,195,83,81,82,180,4,205,16,80,10,228,116,12,137,30,58,0,136,46,60,0,137,22,63,0,88,
        160,54,0,50,196,116,25,10,228,136,38,54,0,116,17,137,30,55,0,136,46,57,0,137,22,61,0,176,255,162,53,0,90,89,91,195,83,187,
        70,0,128,63,0,117,7,180,16,232,17,0,136,7,67,128,63,0,117,7,180,64,232,4,0,136,7,91,195,82,186,1,2,236,34,196,254,200,152,
        138,196,90,195,232,9,0,184,211,5,186,4,0,82,235,56,139,22,102,0,10,242,116,7,198,6,101,0,255,235,241,195,232,222,198,131,
        250,37,114,18,82,232,191,213,44,232,113,202,89,82,11,210,117,7,90,233,59,255,233,19,184,232,208,255,186,18,0,184,220,52,247,
        241,246,6,101,0,255,117,8,80,186,67,0,176,182,238,88,186,66,0,238,138,196,238,117,7,186,97,0,236,12,3,238,90,137,22,102,0,
        198,6,101,0,0,195,10,90,77,65,89,16,89,16,25,90,89,16,89,16,89,16,89,16,45,90,89,16,52,90,77,65,89,16,69,90,89,16,89,16,89,
        16,89,16,89,16,89,16,93,90,99,90,77,65,89,16,124,90,89,16,89,16,89,16,89,16,89,16,89,16,170,90,177,90,110,91,89,16,171,91,
        240,91,89,16,89,16,108,92,89,16,118,92,89,16,34,194,117,34,156,80,83,137,30,233,4,136,23,131,195,45,198,7,0,67,67,136,47,
        67,198,7,0,67,136,15,67,198,7,0,91,88,157,195,233,152,174,88,91,195,128,250,128,117,2,178,2,195,88,134,196,158,89,90,91,195,
        90,91,89,195,131,195,46,138,7,246,208,195,139,30,233,4,131,195,43,195,139,30,233,4,131,195,50,195,139,30,233,4,138,135,47,
        0,195,86,87,81,198,6,63,5,165,190,240,4,191,64,5,185,8,0,252,164,226,253,89,95,94,195,83,81,187,64,5,177,8,128,63,32,117,
        13,67,254,201,117,246,190,92,5,191,72,5,235,16,190,84,5,191,64,5,177,8,252,166,117,39,254,201,117,249,138,5,58,4,116,9,10,
        192,117,25,246,4,1,117,20,138,4,139,30,233,4,136,135,49,0,187,244,89,232,14,0,50,192,235,7,187,254,89,232,4,0,249,89,91,195,
        83,139,30,46,0,67,11,219,116,2,91,195,187,83,5,83,67,177,8,138,7,232,213,244,67,254,201,117,246,176,46,232,203,244,91,131,
        195,9,176,68,246,7,225,116,23,176,80,246,7,32,117,16,176,66,246,7,128,117,9,176,65,246,7,64,117,2,176,77,91,232,165,244,46,
        138,7,67,10,192,117,245,195,32,70,111,117,110,100,46,255,13,0,32,83,107,105,112,112,101,100,46,255,13,0,185,0,0,136,14,82,
        5,176,234,232,189,254,233,227,254,187,82,5,138,7,198,7,0,10,192,117,5,232,70,243,10,192,233,226,254,136,14,82,5,233,163,235,
        232,200,254,138,46,41,0,177,0,176,237,232,145,254,233,183,254,88,80,134,196,232,68,244,138,14,87,0,254,201,139,30,233,4,136,
        143,50,0,233,170,254,88,134,196,233,73,248,138,46,98,0,177,0,232,147,254,176,109,232,98,254,232,175,254,160,99,0,136,7,233,
        128,254,88,80,134,196,232,3,0,233,129,254,232,106,245,187,99,0,60,13,116,15,254,7,83,232,149,254,91,56,7,114,7,176,13,235,
        231,198,7,0,138,7,232,124,254,136,7,195,88,134,196,162,98,0,195,160,97,0,10,192,116,3,233,232,172,128,226,251,117,2,178,1,
        162,81,5,254,192,162,80,5,138,202,128,225,128,128,233,1,245,26,201,128,225,128,246,194,16,116,3,128,201,32,160,96,0,10,192,
        116,2,177,1,10,201,117,9,246,6,95,0,255,116,2,177,64,136,14,72,5,181,255,176,104,232,210,253,138,39,232,46,254,246,196,1,
        117,12,246,193,129,117,3,232,47,0,176,255,235,31,232,51,0,232,48,254,114,248,139,30,233,4,246,135,49,0,129,117,10,232,17,
        1,115,5,198,6,80,5,0,176,1,162,97,0,232,231,253,198,7,1,233,186,253,187,63,5,185,17,0,180,3,205,21,195,187,83,5,185,17,0,
        83,180,2,205,21,115,3,233,2,1,91,160,94,0,10,192,117,6,128,63,165,117,230,195,233,41,172,160,97,0,254,192,116,11,50,192,162,
        97,0,162,96,0,233,205,229,139,30,233,4,246,135,49,0,129,117,234,232,59,0,232,31,1,235,226,83,187,97,0,56,39,117,13,139,30,
        233,4,246,135,49,0,129,91,117,1,195,233,233,171,180,255,232,227,255,88,80,134,196,232,3,0,233,77,253,232,38,0,136,7,254,193,
        116,11,232,93,253,136,15,195,232,87,253,138,15,187,83,5,181,0,254,201,65,136,15,180,3,205,21,232,68,253,198,7,1,195,232,61,
        253,138,15,181,0,187,83,5,3,217,195,180,1,232,158,255,232,3,0,233,20,253,160,80,5,44,1,115,1,195,187,81,5,138,7,198,7,0,10,
        192,116,1,195,232,10,0,115,7,198,6,80,5,0,10,192,195,232,195,255,138,7,254,193,232,252,252,136,15,232,239,252,58,15,116,3,
        10,192,195,128,63,0,117,221,80,232,2,0,88,195,187,83,5,185,0,1,180,2,205,21,114,21,160,83,5,232,203,252,136,7,232,206,252,
        198,7,1,254,200,249,116,1,248,195,128,252,4,117,5,178,24,233,111,171,233,37,171,160,80,5,44,1,26,192,233,147,8,136,14,81,
        5,233,90,233,198,6,95,0,0,83,137,30,77,5,139,22,80,3,137,22,75,5,139,14,4,7,43,203,137,14,73,5,81,82,232,164,254,90,89,91,
        160,96,0,10,192,6,116,2,142,194,180,3,205,21,7,232,137,0,186,5,0,185,0,0,73,117,253,74,117,250,232,118,0,195,190,83,5,139,
        140,10,0,160,96,0,10,192,156,81,117,13,80,83,81,86,3,217,232,22,230,94,89,91,88,60,1,117,4,139,156,14,0,6,10,192,116,14,139,
        148,12,0,254,200,116,4,139,22,80,3,142,194,180,2,205,21,7,114,18,89,157,117,11,139,30,48,0,3,217,67,137,30,88,3,233,128,229,
        80,232,5,208,88,128,252,4,117,5,178,24,233,181,170,233,107,170,75,232,243,177,117,5,160,100,0,235,3,232,232,193,10,192,117,
        4,176,1,235,2,176,0,162,100,0,138,224,205,21,195,205,219,249,235,1,248,139,243,156,139,14,165,4,138,195,50,193,162,167,4,
        138,199,50,228,138,221,50,255,157,115,7,3,195,45,1,1,235,2,43,195,10,228,120,13,61,128,0,114,21,139,222,131,196,2,233,93,
        23,5,128,0,121,11,139,222,131,196,2,233,223,29,5,128,0,162,166,4,187,165,4,128,15,128,139,222,50,255,128,203,128,195,198,
        6,57,3,128,232,198,217,83,139,218,232,234,6,232,4,197,137,30,94,4,177,32,232,27,207,91,232,96,177,116,23,232,49,208,40,232,
        167,217,82,138,7,60,44,117,5,232,76,177,235,241,232,30,208,41,137,30,59,3,14,184,233,93,80,255,54,80,3,255,54,94,4,203,139,
        30,59,3,195,83,232,14,5,60,108,116,10,60,76,116,6,60,113,116,2,60,81,91,195,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
        38,38,38,38,38,38,38,38,38,38,37,37,37,36,36,36,35,35,35,34,34,34,34,33,33,33,32,32,32,31,31,31,31,30,30,30,29,29,29,29,28,
        28,28,27,27,27,26,26,26,25,25,25,25,24,24,24,23,23,23,23,22,22,22,22,21,21,21,20,20,20,19,19,19,19,18,18,18,17,17,17,16,16,
        16,16,15,15,15,14,14,14,13,13,13,13,12,12,12,11,11,11,10,10,10,10,9,9,9,8,8,8,7,7,7,6,6,6,6,5,5,5,4,4,4,3,3,3,3,2,2,2,1,1,
        1,0,0,0,0,255,255,255,254,254,254,253,253,253,253,252,252,252,251,251,251,250,250,250,250,249,249,249,248,248,248,247,247,
        247,247,246,246,246,245,245,245,244,244,244,244,243,243,243,242,242,242,241,241,241,241,240,240,240,239,239,239,238,238,238,
        238,237,237,237,236,236,236,235,235,235,235,234,234,234,233,233,233,232,232,232,231,231,231,231,230,230,230,229,229,229,228,
        228,228,228,227,227,227,226,226,226,225,225,225,225,224,35,199,83,237,220,199,89,2,118,92,84,20,234,28,8,6,147,115,105,153,
        36,36,42,9,120,208,195,191,45,173,84,12,75,98,218,151,60,236,4,16,222,250,208,189,75,39,38,19,149,57,69,173,30,177,79,22,
        253,67,75,44,179,206,1,26,253,20,94,247,95,66,34,29,60,154,53,245,247,210,74,32,203,0,131,242,181,135,125,35,127,224,145,
        183,209,116,30,39,158,88,118,37,6,18,70,42,198,238,211,174,135,150,119,45,60,117,68,205,20,190,26,49,139,146,149,0,154,109,
        65,52,45,247,186,128,0,201,113,55,124,218,116,80,160,29,23,59,27,17,146,100,8,229,60,62,98,149,182,125,74,30,108,65,94,29,
        146,142,238,146,19,69,181,164,54,50,170,119,56,72,226,77,196,190,148,149,102,75,173,176,58,247,124,29,16,79,217,92,9,53,220,
        36,52,82,15,180,75,66,19,46,97,85,137,80,111,9,204,188,12,89,172,36,203,11,255,235,47,92,214,237,189,206,254,230,91,95,166,
        180,54,65,95,112,9,99,207,97,132,17,119,204,43,102,67,122,229,213,148,191,86,105,106,108,175,5,189,55,6,109,133,71,27,71,
        172,197,39,112,102,25,226,88,23,183,81,115,224,79,141,151,110,18,3,119,216,163,112,61,10,215,35,122,205,204,204,204,204,204,
        76,125,0,0,0,0,0,0,0,129,0,0,0,0,0,0,32,132,0,0,0,0,0,0,72,135,0,0,0,0,0,0,122,138,0,0,0,0,0,64,28,142,0,0,0,0,0,80,67,145,
        0,0,0,0,0,36,116,148,0,0,0,0,128,150,24,152,0,0,0,0,32,188,62,155,0,0,0,0,40,107,110,158,0,0,0,0,249,2,21,162,0,0,0,64,183,
        67,58,165,0,0,0,16,165,212,104,168,0,0,0,42,231,132,17,172,0,0,128,244,32,230,53,175,0,0,160,49,169,95,99,178,0,0,4,191,201,
        27,14,182,0,0,197,46,188,162,49,185,0,64,118,58,107,11,94,188,0,232,137,4,35,199,10,192,0,98,172,197,235,120,45,195,128,122,
        23,183,38,215,88,198,144,172,110,50,120,134,7,202,181,87,10,63,22,104,41,205,162,237,204,206,27,194,83,208,133,20,64,97,81,
        89,4,212,166,25,144,185,165,111,37,215,16,32,244,39,143,203,78,218,10,148,248,120,57,63,1,222,12,185,54,215,7,143,33,225,
        79,103,4,205,201,242,73,228,35,129,69,64,124,111,124,231,182,112,43,168,173,197,29,235,228,76,54,18,25,55,69,238,28,224,195,
        86,223,132,118,241,18,108,58,150,11,19,26,245,22,7,201,123,206,151,64,248,220,72,187,26,194,189,112,251,137,13,181,80,153,
        118,22,255,0,0,0,0,0,0,0,128,241,4,53,128,4,154,247,25,131,36,99,67,131,117,205,141,132,169,127,131,130,4,0,0,0,129,226,176,
        77,131,10,114,17,131,244,4,53,127,24,114,49,128,46,101,69,37,35,33,68,100,44,48,0,128,198,164,126,141,3,0,64,122,16,243,90,
        0,0,160,114,78,24,9,0,0,16,165,212,232,0,0,0,232,118,72,23,0,0,0,228,11,84,2,0,0,0,202,154,59,0,0,0,0,225,245,5,0,0,0,128,
        150,152,0,0,0,0,64,66,15,0,0,0,0,64,66,15,160,134,1,16,39,0,16,39,232,3,100,0,10,0,1,0,0,0,128,144,255,255,255,255,255,255,
        127,255,255,255,255,255,255,255,255,255,59,170,56,129,7,124,136,89,116,224,151,38,119,196,29,30,122,94,80,99,124,26,254,117,
        126,24,114,49,128,0,0,0,129,5,251,215,30,134,101,38,153,135,88,52,35,135,225,93,165,134,219,15,73,131,2,215,179,93,129,0,
        0,128,129,4,98,53,131,126,80,36,76,126,121,169,170,127,0,0,0,129,11,68,78,110,131,249,34,126,253,67,3,195,158,38,1,0,0,48,
        49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,186,59,170,187,56,129,232,114,10,160,166,4,60,136,114,10,128,38,165,4,128,116,
        71,233,205,24,60,104,114,82,160,165,4,10,192,121,9,36,127,162,165,4,187,235,98,83,255,54,163,4,255,54,165,4,232,70,16,138,
        226,128,196,129,116,27,80,50,228,232,212,17,88,91,90,80,232,150,4,187,23,98,232,123,18,91,51,210,138,218,233,32,10,131,196,
        4,50,228,136,38,167,4,233,241,17,186,0,0,187,0,129,233,234,5,191,163,4,51,192,252,171,199,5,0,129,195,233,26,172,205,185,
        128,54,165,4,128,128,54,177,4,128,233,138,3,205,186,135,217,233,90,4,205,187,135,217,233,71,4,205,188,232,51,25,233,27,5,
        135,217,233,177,5,205,189,137,30,163,4,233,107,8,205,190,82,152,139,208,232,238,8,90,195,205,191,135,217,233,183,9,205,192,
        135,217,233,237,13,129,251,0,128,117,19,205,193,232,211,8,51,210,187,128,144,232,5,4,232,75,26,233,69,8,247,219,83,3,218,
        112,4,88,233,153,1,205,194,232,181,8,90,255,54,163,4,255,54,165,4,232,169,8,91,90,233,234,3,139,195,82,247,234,90,114,5,139,
        216,233,118,1,205,195,83,232,145,8,90,255,54,163,4,255,54,165,4,232,133,8,91,90,233,82,9,11,219,117,12,136,54,167,4,198,6,
        251,2,4,233,45,17,137,30,163,4,184,0,0,163,165,4,146,11,192,121,3,186,255,255,11,219,121,6,199,6,165,4,255,255,247,62,163,
        4,139,216,233,42,1,135,217,232,215,24,135,217,195,83,232,69,26,91,131,195,4,195,139,22,163,4,139,14,165,4,195,156,83,232,
        25,26,91,131,195,4,157,195,232,171,190,137,30,163,4,233,103,10,232,161,190,137,30,163,4,233,101,10,205,196,139,23,139,159,
        2,0,233,77,3,94,255,54,163,4,255,54,165,4,255,230,205,197,135,217,232,160,24,135,217,195,232,100,23,116,3,233,147,163,195,
        135,218,232,205,0,50,192,181,152,205,198,187,166,4,138,200,136,47,181,0,67,136,47,208,208,205,199,115,3,232,32,1,138,229,
        138,217,233,51,16,232,146,254,83,51,219,137,30,163,4,183,129,137,30,165,4,198,6,251,2,4,232,4,20,91,198,6,251,2,4,195,139,
        193,247,226,146,115,3,233,37,213,195,187,171,4,186,183,100,233,6,0,187,171,4,186,185,100,82,186,163,4,232,247,22,114,3,186,
        159,4,195,138,205,50,237,235,8,135,218,160,251,2,152,139,200,252,139,242,139,251,243,164,139,214,139,223,195,232,54,200,139,
        241,139,251,253,43,202,65,243,164,139,218,139,207,65,252,195,156,73,157,195,232,188,22,117,3,233,235,162,205,200,120,3,233,
        131,22,161,163,4,11,192,116,6,176,1,121,2,176,255,195,51,192,11,219,117,243,195,91,195,152,139,216,198,6,251,2,2,137,30,163,
        4,195,198,6,251,2,4,195,232,196,255,233,231,255,205,201,91,90,233,181,3,232,37,6,91,90,233,11,12,185,4,0,233,136,255,156,
        138,23,67,157,156,138,55,67,139,15,67,157,156,67,157,195,83,187,40,7,232,6,22,91,185,182,38,81,232,181,255,50,192,205,202,
        162,49,3,187,180,4,198,7,32,10,7,67,198,7,48,233,106,11,205,203,160,165,4,235,9,205,204,232,229,23,116,8,246,208,208,224,
        26,192,116,61,195,205,205,128,54,167,4,128,51,219,246,221,139,195,27,194,139,208,138,195,26,193,138,200,195,232,3,22,120,
        250,205,206,232,207,21,120,3,233,213,24,232,2,24,232,207,24,233,252,23,139,195,43,194,116,14,112,7,120,7,50,192,254,192,195,
        120,249,249,26,192,195,59,218,117,5,51,219,233,38,0,139,194,137,30,163,4,11,219,199,6,165,4,0,0,121,6,199,6,165,4,255,255,
        11,192,186,0,0,121,3,186,255,255,247,62,163,4,139,218,137,30,163,4,195,173,58,225,116,17,70,2,4,254,192,152,3,240,59,245,
        117,239,139,214,233,57,210,58,6,251,2,117,233,58,44,117,229,70,138,208,172,58,6,142,0,116,4,2,194,235,220,10,192,116,16,152,
        145,191,143,0,243,166,145,116,6,3,240,138,194,235,200,139,214,91,195,139,243,139,46,75,4,252,235,190,139,243,139,46,92,3,
        252,233,13,0,173,58,225,116,17,70,172,152,3,240,173,3,240,59,238,117,239,139,222,233,83,211,58,6,251,2,117,233,58,44,117,
        229,70,172,58,6,142,0,117,223,10,192,116,14,152,145,191,143,0,243,166,145,116,4,3,240,235,208,173,139,208,139,222,233,5,211,
        232,24,22,195,161,165,4,10,228,116,245,128,54,165,4,128,205,215,176,0,162,158,4,162,170,4,160,178,4,10,192,116,226,161,165,
        4,10,228,116,216,139,30,177,4,128,14,165,4,128,128,14,177,4,128,138,204,42,207,162,167,4,116,34,115,18,134,195,246,217,162,
        167,4,136,62,166,4,80,81,232,111,21,89,88,128,249,56,115,95,83,248,232,33,21,160,167,4,91,50,195,187,158,4,190,170,4,185,
        4,0,248,252,120,30,173,17,7,67,67,226,249,115,18,187,166,4,254,7,116,52,75,75,185,4,0,209,31,75,75,226,250,233,233,17,173,
        25,7,67,67,226,249,115,26,246,151,1,0,185,4,0,75,75,247,23,226,250,185,4,0,255,7,117,6,67,67,226,248,116,200,233,244,12,233,
        141,13,160,167,4,36,128,128,38,165,4,127,8,6,165,4,195,137,30,165,4,137,22,163,4,195,161,165,4,10,228,116,240,128,54,165,
        4,128,10,255,116,239,161,165,4,10,228,116,224,51,201,139,54,163,4,162,167,4,138,204,42,207,115,13,246,217,134,223,137,30,
        166,4,134,223,147,135,214,138,224,50,227,156,180,128,10,196,10,220,50,228,138,252,11,201,116,70,131,249,25,114,18,157,137,
        54,163,4,138,38,167,4,37,127,128,10,196,162,165,4,195,128,249,8,114,28,138,226,138,214,138,243,50,219,128,233,8,246,196,31,
        116,208,128,204,32,235,203,128,204,32,226,3,235,14,248,208,219,209,218,208,220,246,196,16,117,237,226,243,157,121,37,42,204,
        138,225,27,242,139,214,26,195,138,216,115,47,246,22,167,4,246,212,247,210,246,211,254,196,117,33,66,117,30,254,195,117,26,
        235,6,3,214,18,216,115,12,254,6,166,4,116,9,208,219,209,218,208,220,233,36,17,233,169,12,233,104,12,232,37,19,195,160,177,
        4,162,167,4,233,167,12,246,6,166,4,255,116,240,246,6,178,4,255,116,229,139,30,177,4,232,243,244,137,30,177,4,187,164,4,248,
        232,161,19,187,176,4,248,232,154,19,255,54,166,4,232,94,21,143,6,166,4,185,64,0,81,235,8,81,248,187,170,4,232,119,19,139,
        252,131,236,8,131,239,2,190,176,4,185,4,0,253,243,165,190,120,4,185,4,0,187,170,4,248,252,173,25,7,67,67,226,249,115,16,185,
        4,0,139,244,191,170,4,252,243,165,139,230,248,235,4,131,196,8,249,187,158,4,232,56,19,89,226,182,246,6,165,4,128,116,9,255,
        6,166,4,117,9,233,7,12,187,158,4,232,31,19,233,49,16,232,148,18,117,7,136,30,167,4,233,0,12,10,255,117,3,233,122,18,232,87,
        244,139,250,51,210,138,254,139,243,138,223,185,32,0,85,139,46,163,4,160,165,4,138,231,235,5,248,209,215,209,214,86,87,43,
        253,27,240,115,4,95,94,235,4,131,196,4,248,245,209,210,209,211,226,228,11,219,121,10,254,6,166,4,117,8,93,233,165,11,209,
        210,209,211,138,226,138,214,138,243,138,223,93,233,13,16,19,249,83,87,81,44,48,80,232,80,18,88,152,121,30,139,30,163,4,129,
        251,205,12,115,25,139,203,209,227,209,227,3,217,209,227,3,216,120,11,137,30,163,4,235,72,80,114,8,235,51,80,232,36,2,235,
        20,199,6,124,4,0,36,199,6,126,4,116,148,187,126,4,232,131,19,121,22,232,60,18,90,255,54,163,4,255,54,165,4,232,139,2,91,90,
        232,204,253,235,19,232,231,1,232,35,18,232,238,18,90,232,119,2,232,218,1,232,238,252,89,95,91,195,205,217,50,192,233,9,0,
        205,218,176,1,198,6,251,2,8,198,6,168,4,1,190,180,37,86,51,255,139,207,139,247,247,209,80,232,134,17,88,10,192,117,5,198,
        6,251,2,2,138,7,60,38,117,3,233,7,176,60,45,156,116,5,60,43,116,1,75,232,251,248,115,6,232,61,255,233,245,255,189,163,97,
        51,210,139,242,46,58,134,0,0,116,10,129,253,156,97,116,36,77,233,239,255,129,237,156,97,209,229,46,255,166,48,106,75,106,
        95,106,95,106,103,106,109,106,115,106,64,106,64,106,50,192,232,156,0,232,65,0,233,45,0,65,117,247,232,81,17,121,175,81,83,
        87,232,72,1,95,91,89,233,163,255,232,140,243,116,225,233,219,255,232,221,0,233,11,0,232,188,0,233,5,0,50,192,232,182,0,157,
        117,13,232,45,19,232,33,17,122,5,83,232,237,18,91,195,11,246,121,2,247,218,43,215,112,75,116,72,120,8,131,250,39,114,29,233,
        61,10,82,131,194,38,90,121,19,82,186,176,106,82,186,2,95,235,18,90,131,194,38,131,250,218,120,37,185,3,0,211,226,129,194,
        50,96,135,218,82,232,218,16,114,8,232,187,17,232,133,1,235,10,121,5,83,232,201,0,91,232,5,17,91,195,233,138,16,159,128,62,
        251,2,8,117,4,158,233,8,0,158,83,87,232,92,0,95,91,51,246,139,214,232,4,248,114,19,60,45,117,4,247,214,235,5,60,43,116,1,
        195,232,242,247,114,1,195,129,250,204,12,114,5,186,255,127,235,239,80,184,10,0,247,226,90,128,234,48,50,246,3,208,235,223,
        12,1,156,83,87,232,78,0,95,91,51,246,139,214,232,76,255,157,117,5,83,232,13,0,91,67,195,232,88,16,120,249,233,111,156,116,
        49,232,78,16,123,86,117,3,233,123,156,205,207,121,5,232,63,0,235,72,176,4,162,251,2,138,30,165,4,136,30,167,4,139,22,163,
        4,138,38,162,4,128,204,64,128,203,128,233,213,13,232,29,16,115,37,117,3,233,74,156,205,208,121,3,232,14,0,176,8,162,251,2,
        51,192,163,159,4,163,161,4,195,82,86,139,22,163,4,232,131,0,94,90,195,232,242,15,121,5,139,30,163,4,195,205,209,117,3,233,
        24,156,160,166,4,60,144,114,49,116,3,233,6,156,160,165,4,10,192,120,3,233,252,155,186,0,0,187,0,128,232,138,251,232,203,6,
        232,205,17,186,0,0,187,128,144,232,236,16,116,3,233,223,155,187,0,128,235,45,160,165,4,10,192,156,121,5,36,127,162,165,4,
        186,0,0,187,0,128,232,103,251,160,166,4,60,144,117,6,157,120,219,233,183,155,232,231,6,139,218,157,121,2,247,219,137,30,163,
        4,198,6,251,2,2,195,51,219,50,228,190,167,4,198,132,255,255,144,198,4,0,11,210,121,5,247,218,198,4,128,138,222,138,242,138,
        215,198,6,251,2,4,233,75,8,205,214,160,166,4,10,192,116,10,160,178,4,10,192,117,4,233,248,14,195,139,30,177,4,232,218,240,
        255,54,166,4,137,30,177,4,232,86,17,139,240,163,166,4,187,120,4,163,178,4,189,171,4,139,0,11,192,116,44,191,0,0,139,207,139,
        0,247,35,83,139,222,3,223,129,195,151,4,3,7,115,1,66,3,193,115,1,66,137,7,139,202,91,131,255,6,116,4,71,71,235,219,139,193,
        83,187,159,4,137,0,91,131,254,6,116,4,70,70,235,190,190,157,4,253,185,7,0,172,10,192,225,251,116,5,128,14,158,4,32,160,165,
        4,10,192,143,6,166,4,120,15,187,158,4,185,4,0,209,23,67,67,226,250,233,25,12,254,6,166,4,117,247,233,221,7,232,115,14,116,
        4,10,255,117,3,233,96,14,232,58,240,139,14,165,4,50,237,161,163,4,138,253,83,81,82,81,80,247,226,139,202,88,247,227,3,200,
        115,1,66,139,218,90,88,247,226,3,200,115,1,66,3,218,90,88,246,226,3,216,115,13,209,219,209,217,254,6,166,4,117,3,233,144,
        7,10,255,121,9,254,6,166,4,117,7,233,131,7,209,209,209,211,138,213,138,243,138,223,138,225,233,236,11,195,83,176,8,114,2,
        176,17,138,232,138,200,81,156,232,72,2,10,192,116,2,121,12,157,89,80,123,11,4,16,88,121,26,235,9,157,89,235,38,4,7,88,121,
        15,80,232,246,11,88,138,224,2,225,126,22,2,232,235,12,2,197,254,197,58,232,181,3,114,12,138,232,254,197,176,2,235,4,2,197,
        181,3,254,200,254,200,91,80,156,50,201,232,77,0,198,7,48,117,1,67,232,232,0,75,128,63,48,116,250,128,63,46,116,1,67,157,88,
        116,43,156,80,232,191,13,180,69,123,2,180,68,136,39,67,88,157,198,7,43,121,5,198,7,45,246,216,180,47,254,196,44,10,115,250,
        4,58,67,134,196,137,7,67,67,198,7,0,135,217,187,180,4,195,254,205,121,22,137,30,82,3,198,7,46,67,198,7,48,254,197,117,248,
        67,51,201,235,26,254,205,117,12,198,7,46,137,30,82,3,67,51,201,235,10,254,201,117,6,198,7,44,67,177,3,137,14,129,4,195,180,
        5,189,245,97,232,217,255,46,139,150,0,0,69,69,139,54,163,4,176,47,254,192,43,242,115,250,3,242,136,7,67,137,54,163,4,254,
        204,117,221,232,182,255,198,7,0,195,185,1,3,190,6,0,235,6,185,4,4,190,4,0,191,179,4,252,187,116,98,139,22,163,4,86,138,198,
        50,228,211,224,134,224,46,215,170,211,226,138,205,78,117,238,198,5,0,187,179,4,89,254,201,128,63,48,117,3,67,226,248,195,
        232,233,12,123,119,81,83,190,159,4,191,171,4,185,4,0,252,243,165,232,117,3,83,187,177,4,232,253,13,91,190,171,4,191,159,4,
        185,4,0,252,243,165,116,3,232,206,12,138,14,166,4,128,233,184,246,217,248,232,90,3,91,89,190,166,97,176,9,232,46,255,80,176,
        47,80,88,254,192,80,232,148,0,115,247,232,163,0,88,60,58,117,9,198,7,49,67,198,7,48,235,2,136,7,67,88,254,200,117,215,81,
        190,159,4,191,163,4,185,2,0,252,243,165,89,235,41,83,81,232,24,15,232,113,3,90,91,232,153,13,116,11,137,30,165,4,137,22,163,
        4,232,115,12,176,1,232,178,3,137,30,165,4,137,22,163,4,89,91,176,3,186,236,97,232,199,254,80,83,82,232,94,13,93,176,47,80,
        88,254,192,80,232,23,14,115,247,46,3,150,0,0,46,18,158,2,0,69,69,69,232,56,13,88,135,213,91,136,7,67,88,254,200,117,206,66,
        66,139,234,180,4,233,179,254,81,86,185,7,0,191,159,4,248,252,46,172,24,5,71,226,249,94,89,195,81,185,7,0,191,159,4,248,252,
        46,172,16,5,71,226,249,89,195,83,81,51,255,87,187,2,94,160,166,4,46,215,10,192,116,35,95,152,43,248,87,139,216,209,227,209,
        227,209,227,129,195,50,96,232,188,11,115,5,232,246,11,235,217,232,152,12,232,98,252,235,209,187,102,96,232,113,12,232,22,
        13,115,6,232,207,11,95,79,87,232,153,11,114,14,187,122,96,232,119,12,232,65,252,88,44,9,235,1,88,89,91,10,192,195,187,180,
        4,138,47,177,32,138,38,131,4,246,196,32,116,13,58,233,177,42,117,7,246,196,4,117,2,138,233,136,15,232,191,242,116,50,189,
        165,97,46,58,134,0,0,116,9,129,253,156,97,116,38,77,235,240,129,237,156,97,209,229,46,255,166,97,112,117,112,117,112,121,
        112,121,112,121,112,121,112,117,112,121,112,60,112,60,112,75,198,7,48,138,38,131,4,246,196,16,116,4,75,198,7,36,246,196,4,
        117,5,75,136,47,50,237,195,10,192,235,6,198,7,48,67,254,200,117,248,195,232,137,253,198,7,48,67,254,200,117,245,195,187,180,
        4,198,7,32,83,232,193,10,91,156,121,10,198,7,45,83,232,236,12,91,12,1,67,198,7,48,157,195,205,216,232,221,255,117,8,67,198,
        7,0,187,180,4,195,232,200,10,121,18,185,0,7,51,192,163,131,4,137,14,129,4,232,94,253,233,49,255,233,120,252,232,129,10,121,
        3,233,96,159,117,1,195,160,166,4,208,232,80,198,6,166,4,64,208,22,166,4,187,171,4,232,9,13,185,4,0,81,232,55,13,139,22,171,
        4,139,30,173,4,232,187,247,90,91,232,75,246,254,14,166,4,89,116,10,226,227,88,4,192,0,6,166,4,195,233,47,10,191,190,37,87,
        191,168,4,198,5,1,232,44,10,117,3,233,54,241,121,7,10,255,117,10,233,147,3,10,255,117,3,233,13,10,10,219,121,36,128,255,153,
        114,3,233,239,158,82,83,255,54,163,4,255,54,165,4,232,52,1,91,90,232,92,11,232,63,11,91,90,116,3,233,211,158,160,165,4,10,
        192,121,9,191,195,113,87,36,127,162,165,4,83,82,128,203,127,156,255,54,165,4,255,54,163,4,232,4,1,90,91,232,44,11,117,30,
        82,83,186,0,0,187,0,144,232,31,11,91,90,121,15,157,90,91,233,60,0,186,0,0,187,0,129,233,18,247,157,121,14,83,82,232,47,1,
        138,194,232,197,2,90,91,208,216,143,6,163,4,143,6,165,4,159,128,38,165,4,127,158,115,4,191,176,125,87,83,82,232,21,1,90,91,
        232,3,251,233,133,240,83,82,232,255,0,137,22,178,4,199,6,163,4,0,0,199,6,165,4,0,129,209,46,178,4,115,7,90,91,83,82,232,222,
        250,247,6,178,4,255,255,116,21,90,91,232,33,12,232,141,10,232,203,250,90,91,232,22,12,232,130,10,235,214,90,91,195,138,14,
        166,4,128,233,184,115,57,246,217,156,187,164,4,138,135,1,0,136,135,3,0,10,192,156,12,128,136,135,1,0,198,135,2,0,184,157,
        156,121,3,232,34,0,50,237,232,18,0,157,121,3,232,38,0,198,6,158,4,0,157,115,3,233,189,1,195,81,83,248,232,122,9,91,89,226,
        246,195,83,187,159,4,131,47,1,115,4,67,67,235,247,91,195,83,187,159,4,254,7,117,3,67,235,249,91,195,138,14,166,4,128,233,
        152,115,65,246,217,156,139,22,163,4,139,30,165,4,10,219,156,136,30,167,4,198,6,166,4,152,128,203,128,157,156,121,6,131,234,
        1,128,219,0,50,237,10,201,116,6,208,235,209,218,226,250,157,159,121,5,66,117,2,254,195,157,115,5,50,228,233,169,1,158,121,
        10,247,210,246,211,131,194,1,128,211,0,195,177,152,42,14,166,4,248,235,170,232,102,8,126,81,186,0,0,187,0,129,232,190,9,117,
        9,137,22,163,4,137,22,165,4,195,160,166,4,44,128,152,80,198,6,166,4,128,232,27,11,187,118,97,232,24,2,90,91,232,16,11,232,
        124,9,187,135,97,232,10,2,90,91,232,145,245,90,232,254,10,232,217,248,90,91,232,26,244,187,49,128,186,24,114,233,157,249,
        233,244,156,233,92,148,159,134,224,80,176,1,235,2,50,192,162,85,4,88,134,196,158,186,0,0,137,30,83,4,116,3,232,233,195,137,
        30,59,3,232,172,147,117,215,139,227,139,54,83,4,57,55,117,205,82,138,167,2,0,80,82,131,195,4,246,135,255,255,128,120,65,185,
        2,0,252,139,243,191,163,4,243,165,91,86,83,246,6,85,4,255,117,15,190,86,4,131,239,4,185,2,0,243,165,50,192,116,3,232,75,240,
        95,190,163,4,185,2,0,252,243,165,94,139,20,139,140,2,0,131,198,4,86,232,73,240,235,39,131,195,4,139,15,67,67,94,139,20,246,
        6,85,4,255,117,6,139,22,86,4,235,4,3,209,112,53,137,20,82,139,23,67,67,88,83,232,165,241,91,89,42,197,232,31,241,116,11,137,
        22,46,0,139,209,135,211,233,124,154,139,227,137,30,69,3,139,30,59,3,128,63,44,117,9,232,230,154,232,66,255,233,147,147,233,
        168,154,81,83,86,87,82,178,56,187,158,4,191,165,4,190,166,4,235,25,83,185,4,0,248,209,23,67,67,226,250,91,246,7,64,117,41,
        254,12,116,42,254,202,116,38,246,5,255,120,33,117,224,128,44,8,118,26,128,234,8,118,21,190,164,4,185,7,0,253,243,164,128,
        38,158,4,32,235,190,128,15,32,235,210,90,95,94,91,89,118,3,233,116,4,233,192,6,138,62,166,4,185,3,0,10,219,120,44,117,18,
        128,239,8,114,29,138,222,138,242,138,212,128,228,32,226,234,116,16,248,208,212,209,210,208,211,246,196,64,117,7,254,207,117,
        216,233,155,6,128,204,32,235,244,136,62,166,4,233,120,4,83,232,2,0,91,195,232,45,0,187,10,4,235,12,83,232,2,0,91,195,232,
        31,0,187,99,4,128,62,168,4,1,120,7,117,18,198,6,168,4,2,232,129,175,176,13,232,137,175,176,10,232,132,175,195,252,10,255,
        190,3,98,116,10,246,6,167,4,128,121,3,190,11,98,232,123,6,114,8,191,159,4,185,4,0,235,9,131,198,4,191,163,4,185,2,0,46,165,
        226,252,195,232,13,9,83,232,129,7,232,182,247,91,232,5,0,90,91,233,173,247,46,138,7,152,232,246,8,80,67,46,139,7,163,163,
        4,131,195,2,46,139,7,163,165,4,131,195,2,88,90,89,72,116,28,81,82,80,83,135,217,232,131,247,91,83,46,139,23,46,139,159,2,
        0,232,234,241,91,131,195,4,235,222,195,83,208,232,115,3,233,9,1,187,178,96,232,214,6,232,47,7,114,9,91,232,35,251,75,198,
        7,37,195,232,243,5,181,16,115,2,181,7,232,189,5,116,3,232,4,250,91,120,63,138,208,2,197,42,6,130,4,121,5,246,216,232,194,
        250,50,201,232,177,0,255,54,129,4,82,232,218,248,90,143,6,129,4,255,54,129,4,50,192,10,194,116,6,232,179,250,232,57,248,143,
        6,129,4,255,54,129,4,160,129,4,233,114,2,138,208,160,129,4,10,192,116,2,254,200,138,240,2,194,138,200,120,4,50,192,138,200,
        121,17,80,81,82,83,232,169,5,91,90,89,88,254,192,120,241,138,225,138,194,42,193,2,197,121,23,160,130,4,232,90,250,198,7,46,
        67,50,201,50,192,42,194,42,197,232,75,250,235,22,160,130,4,82,255,54,129,4,42,197,42,194,2,193,120,3,232,54,250,232,39,0,
        255,54,129,4,232,81,248,160,130,4,143,6,129,4,10,192,88,90,117,7,139,30,82,3,233,103,1,2,194,254,200,120,3,232,15,250,233,
        91,1,138,197,2,194,42,193,254,192,138,232,44,3,127,252,4,3,138,200,160,131,4,36,64,117,2,138,200,195,232,254,4,180,7,114,
        2,180,16,232,200,4,91,249,116,9,83,80,232,11,249,90,91,138,230,156,80,139,22,129,4,10,246,156,10,210,116,2,254,202,2,242,
        157,116,9,246,6,131,4,4,117,2,254,206,42,244,138,230,80,120,3,233,78,0,83,80,80,232,225,4,88,254,196,117,247,232,191,4,232,
        142,7,88,80,185,3,0,210,228,232,166,4,114,16,138,196,152,187,178,96,3,216,232,107,5,232,85,6,235,14,187,110,96,138,196,152,
        3,216,232,83,5,232,248,5,88,91,120,17,88,89,254,193,81,80,83,80,232,157,4,88,91,235,2,50,228,246,220,160,130,4,2,224,254,
        196,10,192,116,9,246,6,131,4,4,117,2,254,204,138,236,50,201,88,255,54,129,4,80,136,46,130,4,232,94,247,88,10,228,126,5,138,
        196,232,63,249,88,163,129,4,10,192,117,12,75,138,7,60,46,116,1,67,137,30,82,3,88,157,114,21,2,196,138,38,130,4,42,196,10,
        228,116,9,246,6,131,4,4,117,2,254,192,10,192,232,74,246,139,217,233,71,0,138,224,246,196,64,180,3,117,2,50,228,163,131,4,
        137,14,129,4,138,224,187,180,4,198,7,32,246,196,8,116,3,198,7,43,83,232,182,3,91,121,8,198,7,45,83,232,226,5,91,67,198,7,
        48,232,209,3,161,131,4,139,14,129,4,120,3,233,179,253,233,104,0,83,232,59,248,91,116,3,136,47,67,198,7,0,187,179,4,67,139,
        62,82,3,139,22,129,4,160,130,4,50,228,43,251,43,248,116,67,138,7,60,32,116,230,60,42,116,226,180,1,75,83,80,232,234,234,50,
        228,60,45,116,246,60,43,116,242,60,36,116,238,60,48,117,22,67,232,212,234,115,16,75,235,3,75,136,7,88,10,228,116,248,131,
        196,2,235,179,88,10,228,116,251,91,198,7,37,195,161,131,4,138,204,181,6,208,232,139,22,129,4,115,11,83,82,232,69,243,50,192,
        90,233,63,254,138,198,44,5,120,3,232,38,248,82,232,218,245,88,80,10,192,117,1,75,254,200,120,6,232,20,248,198,7,0,143,6,129,
        4,233,89,255,232,235,2,116,109,121,12,161,163,4,163,11,0,160,165,4,162,13,0,161,11,0,46,247,38,107,98,139,248,138,202,160,
        109,98,50,228,247,38,11,0,2,200,50,228,160,13,0,46,247,38,107,98,2,200,50,228,46,139,22,110,98,3,215,46,138,30,111,98,18,
        217,136,38,167,4,176,128,162,166,4,137,22,11,0,136,30,13,0,176,4,162,251,2,233,184,251,187,179,4,185,32,0,3,7,67,67,226,250,
        36,254,163,11,0,235,161,139,22,11,0,138,30,13,0,51,192,176,128,162,166,4,136,38,167,4,233,143,251,83,81,187,158,4,129,7,128,
        0,185,3,0,115,14,67,67,255,7,117,8,226,248,254,6,166,4,209,31,89,116,32,246,6,158,4,255,117,5,128,38,159,4,254,187,165,4,
        138,7,138,167,2,0,36,127,128,228,128,10,224,136,39,91,195,131,196,4,233,136,251,128,228,224,128,196,128,115,28,156,66,117,
        18,157,254,195,117,19,249,208,219,254,6,166,4,117,10,88,233,106,251,157,117,3,128,226,254,86,190,163,4,137,20,70,70,138,62,
        167,4,129,227,127,128,10,223,136,28,94,195,139,241,232,180,4,139,206,81,232,9,2,114,9,128,62,166,4,184,121,15,235,7,128,62,
        166,4,152,121,6,232,0,2,232,207,4,187,134,4,232,81,4,89,81,191,142,4,187,134,4,232,53,4,187,134,4,232,93,4,232,253,1,232,
        178,4,187,134,4,232,52,4,232,251,1,187,148,4,232,197,1,115,3,131,235,4,232,87,4,89,117,4,254,193,235,204,139,233,232,117,
        4,139,205,195,128,38,165,4,127,232,143,0,186,219,15,187,73,131,232,250,242,186,219,15,187,73,129,232,101,237,161,165,4,128,
        252,119,115,1,195,10,192,121,9,36,127,162,165,4,184,176,125,80,232,100,0,160,166,4,60,116,115,9,186,219,15,187,73,131,233,
        200,242,51,210,187,128,127,128,227,127,232,150,2,120,42,128,203,128,232,41,237,232,40,1,156,120,16,51,210,187,128,128,232,
        27,237,232,26,1,120,3,232,80,3,51,210,187,0,127,232,11,237,157,120,3,232,66,3,187,165,4,50,192,10,7,156,121,3,128,55,128,
        187,52,98,232,190,250,157,121,6,187,165,4,128,55,128,195,187,99,98,232,247,1,232,255,240,232,190,241,232,173,3,232,164,247,
        232,0,2,232,195,3,232,246,235,232,7,3,232,184,240,195,255,54,165,4,255,54,163,4,232,86,255,90,91,255,54,163,4,255,54,165,
        4,232,249,1,232,44,255,91,90,233,17,238,161,165,4,10,192,121,9,191,176,125,87,36,127,162,165,4,128,252,129,114,12,191,57,
        123,87,51,210,187,0,129,232,240,237,186,162,48,187,9,127,232,225,1,120,58,191,66,123,87,255,54,163,4,255,54,165,4,186,215,
        179,187,93,129,232,101,236,91,90,255,54,163,4,255,54,165,4,232,163,1,187,73,98,232,49,250,91,90,255,54,163,4,255,54,165,4,
        232,144,1,91,90,232,171,237,187,82,98,233,6,250,186,219,15,187,73,129,233,37,236,186,146,10,187,6,128,233,40,236,232,87,176,
        60,13,117,3,232,35,177,46,138,7,67,10,192,117,238,195,191,159,4,185,4,0,184,0,0,252,243,171,195,184,0,0,163,163,4,163,165,
        4,195,232,42,0,121,14,161,163,4,11,192,116,32,176,1,121,28,246,216,195,205,212,160,166,4,10,192,116,16,160,165,4,10,192,116,
        7,176,1,121,5,246,216,195,12,1,195,160,251,2,60,8,254,200,254,200,254,200,195,232,241,255,114,12,83,187,106,97,232,206,0,
        232,237,234,91,195,51,210,187,0,128,232,172,235,195,232,215,255,187,42,96,114,17,235,8,232,205,255,187,58,96,114,7,232,171,
        0,232,117,240,195,255,54,165,4,255,54,163,4,198,6,251,2,8,232,156,0,232,112,239,90,91,232,6,241,195,185,4,0,209,23,67,67,
        226,250,195,185,4,0,209,31,75,75,226,250,195,128,143,2,0,32,226,1,195,187,176,4,128,249,8,114,38,81,185,7,0,187,170,4,138,
        39,138,135,1,0,136,7,67,226,247,50,192,136,7,89,128,233,8,128,228,32,116,217,8,38,170,4,233,210,255,10,201,116,15,81,248,
        232,183,255,89,246,135,2,0,16,117,185,226,191,195,190,159,4,191,171,4,252,185,4,0,139,5,165,137,132,254,255,226,247,195,191,
        124,4,185,2,0,235,6,191,120,4,185,4,0,252,46,139,7,171,67,67,226,248,139,223,75,75,195,191,171,4,235,234,191,159,4,235,229,
        191,171,4,185,4,0,135,222,252,243,165,135,222,195,81,83,87,187,159,4,191,171,4,185,4,0,232,233,255,95,91,89,195,81,83,87,
        187,171,4,191,159,4,235,235,137,22,163,4,137,30,165,4,195,139,22,163,4,139,30,165,4,195,232,207,254,114,63,233,137,0,83,87,
        138,195,50,6,165,4,120,63,10,219,120,22,161,165,4,43,195,114,66,117,58,161,163,4,43,194,114,57,117,49,50,192,235,95,139,195,
        43,6,165,4,114,43,117,35,139,194,43,6,163,4,114,33,117,25,50,192,235,71,83,87,191,165,4,139,7,50,6,165,4,121,19,138,38,165,
        4,10,228,120,6,176,1,10,192,235,44,176,255,249,235,39,81,185,2,0,135,222,160,165,4,10,192,121,2,135,247,253,167,117,6,226,
        251,176,0,235,13,115,6,176,1,10,192,235,5,176,255,10,192,249,89,95,91,195,187,177,4,83,87,191,165,4,138,5,50,7,121,2,235,
        179,81,185,4,0,235,196,187,255,97,232,242,254,232,151,255,117,11,198,6,251,2,2,199,6,163,4,0,128,195,46,43,150,0,0,46,26,
        158,2,0,195,232,9,254,120,8,160,165,4,10,192,120,14,195,161,163,4,11,192,120,17,195,232,244,253,120,8,205,210,128,54,165,
        4,128,195,161,163,4,61,0,128,117,10,205,211,83,232,219,237,91,233,230,255,247,30,163,4,195,187,121,4,232,51,0,191,151,4,185,
        8,0,184,0,0,252,243,171,162,120,4,162,170,4,195,232,183,253,114,3,233,162,254,139,23,139,159,2,0,195,185,4,0,232,165,253,
        114,3,233,150,254,185,2,0,233,144,254,185,4,0,135,251,187,159,4,232,143,253,114,3,233,128,254,135,223,185,2,0,191,163,4,135,
        251,233,115,254,185,4,0,191,159,4,232,116,253,114,3,233,101,254,185,2,0,191,163,4,233,92,254,232,99,253,114,3,233,29,255,
        233,205,254,232,88,253,185,4,0,115,3,185,2,0,93,191,165,4,255,53,79,79,226,250,85,195,191,171,4,185,4,0,235,17,232,57,253,
        191,159,4,185,4,0,115,6,191,163,4,185,2,0,88,143,5,71,71,226,250,80,195,232,31,253,121,1,195,205,213,114,3,233,180,243,233,
        27,244,0,0,250,186,96,0,142,218,142,194,142,210,50,192,162,100,4,181,145,187,0,0,186,154,6,139,242,46,172,136,7,67,66,254,
        205,117,244,188,14,7,205,18,250,187,64,0,247,227,140,219,43,195,187,0,0,246,196,240,117,6,177,4,211,224,139,216,75,137,30,
        44,0,139,227,233,34,205,176,44,162,246,1,187,183,0,198,7,58,50,192,162,249,2,162,6,0,162,107,4,162,101,4,162,40,0,187,14,
        3,137,30,12,3,187,122,3,137,30,226,3,139,30,44,0,75,137,30,10,3,75,83,187,14,7,176,4,162,223,4,83,137,30,224,4,160,223,4,
        254,192,2,192,138,208,182,0,3,218,90,135,218,139,30,224,4,136,23,67,136,55,67,160,223,4,185,52,0,10,192,116,14,135,218,3,
        217,135,218,137,23,67,67,254,200,117,242,135,218,3,217,67,83,254,200,162,54,5,139,30,224,4,139,23,187,51,0,3,218,137,30,228,
        4,91,67,137,30,48,0,137,30,69,3,90,138,194,36,254,138,208,138,194,42,195,138,216,138,198,26,199,138,248,115,3,233,104,173,
        177,3,211,235,138,199,60,2,114,3,187,0,2,138,194,42,195,138,216,138,198,26,199,138,248,115,3,233,74,173,137,30,10,3,135,218,
        137,30,44,0,137,30,47,3,139,227,137,30,69,3,139,30,48,0,135,218,232,61,173,43,218,75,75,83,91,232,128,229,187,220,127,232,
        127,251,232,152,172,233,143,195,32,66,121,116,101,115,32,102,114,101,101,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0] 
        
      • ibm-basic-1.10.json
        [233,143,126,232,167,107,203,232,2,101,203,93,232,199,47,116,13,139,54,233,4,138,68,46,60,254,116,2,60,253,195,0,0,0,0,0,0,
        51,46,148,13,104,115,91,17,89,21,102,55,62,22,143,17,237,16,182,16,248,18,12,46,206,16,53,17,95,17,45,46,72,19,80,47,53,31,
        27,45,254,17,88,30,240,27,145,34,133,46,190,7,190,7,83,30,67,19,46,31,0,0,138,30,95,17,156,46,157,46,163,46,243,46,223,54,
        169,18,88,18,57,34,184,18,216,34,251,15,254,15,1,16,4,16,217,20,4,61,48,61,160,93,0,0,0,0,0,0,169,61,63,36,158,36,4,64,82,
        67,108,65,109,65,206,65,47,83,231,82,38,93,19,70,51,70,41,88,13,88,209,71,205,71,147,81,42,80,23,84,104,41,165,41,177,41,
        28,101,128,126,150,125,241,112,135,120,14,122,12,115,132,98,244,121,173,122,205,122,140,43,61,30,122,27,232,40,23,38,233,
        41,248,40,11,41,128,34,71,41,13,38,18,38,117,27,173,107,81,107,130,107,156,101,250,85,152,86,18,87,192,68,152,68,172,68,55,
        1,72,1,87,1,139,1,180,1,217,1,229,1,244,1,249,1,21,2,22,2,26,2,80,2,98,2,109,2,134,2,169,2,170,2,223,2,35,3,58,3,67,3,77,
        3,101,3,105,3,106,3,85,84,207,170,78,196,238,66,211,6,84,206,14,83,195,21,0,83,65,86,197,194,76,79,65,196,195,69,69,208,197,
        0,79,76,79,210,191,76,79,83,197,187,79,78,212,153,76,69,65,210,146,83,82,76,73,206,219,73,78,212,28,83,78,199,29,68,66,204,
        30,79,211,12,72,82,164,22,65,76,204,179,76,211,192,0,69,76,69,84,197,169,65,84,193,132,73,205,134,69,70,83,84,210,172,69,
        70,73,78,212,173,69,70,83,78,199,174,69,70,68,66,204,175,69,198,151,0,76,83,197,161,78,196,129,82,65,83,197,165,68,73,212,
        166,82,82,79,210,167,82,204,212,82,210,213,88,208,11,79,198,35,81,214,241,0,79,210,130,206,209,82,197,15,73,216,31,0,79,84,
        207,137,79,32,84,207,137,79,83,85,194,141,0,69,88,164,26,0,78,80,85,212,133,198,139,78,83,84,210,216,78,212,5,78,208,16,77,
        208,242,78,75,69,89,164,222,0,0,69,217,201,0,79,67,65,84,197,202,80,82,73,78,212,157,76,73,83,212,158,80,79,211,27,69,212,
        136,73,78,197,176,79,65,196,188,73,83,212,147,79,199,10,79,195,36,69,206,18,69,70,84,164,1,79,198,37,0,79,84,79,210,193,69,
        82,71,197,189,79,196,243,73,68,164,3,0,69,88,212,131,69,215,148,79,212,211,0,80,69,206,186,85,212,156,206,149,210,239,67,
        84,164,25,80,84,73,79,206,184,70,198,221,0,82,73,78,212,145,79,75,197,152,79,211,17,69,69,203,23,83,69,212,198,82,69,83,69,
        212,199,79,73,78,212,220,69,206,32,0,0,85,206,138,69,84,85,82,206,142,69,65,196,135,69,83,84,79,82,197,140,69,205,143,69,
        83,85,77,197,168,73,71,72,84,164,2,78,196,8,69,78,85,205,171,65,78,68,79,77,73,90,197,185,0,67,82,69,69,206,200,84,79,208,
        144,87,65,208,164,65,86,197,190,80,67,168,210,84,69,208,207,71,206,4,81,210,7,73,206,9,84,82,164,19,84,82,73,78,71,164,214,
        80,65,67,69,164,24,79,85,78,196,196,84,73,67,203,33,84,82,73,199,34,0,72,69,206,205,82,79,206,162,82,79,70,198,163,65,66,
        168,206,207,204,65,206,13,0,83,73,78,199,215,83,210,208,0,65,204,20,65,82,80,84,210,218,0,73,68,84,200,160,65,73,212,150,
        72,73,76,197,177,69,78,196,178,82,73,84,197,183,0,79,210,240,0,0,0,171,233,173,234,170,235,175,236,222,237,220,244,167,217,
        190,230,189,231,188,232,0,121,121,124,124,127,80,70,60,50,40,122,123,130,107,0,0,173,107,59,100,81,107,168,102,3,99,83,108,
        32,99,116,101,18,99,25,99,65,99,40,99,49,100,106,99,79,99,137,99,215,24,180,101,0,78,69,88,84,32,119,105,116,104,111,117,
        116,32,70,79,82,0,83,121,110,116,97,120,32,101,114,114,111,114,0,82,69,84,85,82,78,32,119,105,116,104,111,117,116,32,71,79,
        83,85,66,0,79,117,116,32,111,102,32,68,65,84,65,0,73,108,108,101,103,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,
        108,0,79,118,101,114,102,108,111,119,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,85,110,100,101,102,105,110,101,
        100,32,108,105,110,101,32,110,117,109,98,101,114,0,83,117,98,115,99,114,105,112,116,32,111,117,116,32,111,102,32,114,97,110,
        103,101,0,68,117,112,108,105,99,97,116,101,32,68,101,102,105,110,105,116,105,111,110,0,68,105,118,105,115,105,111,110,32,
        98,121,32,122,101,114,111,0,73,108,108,101,103,97,108,32,100,105,114,101,99,116,0,84,121,112,101,32,109,105,115,109,97,116,
        99,104,0,79,117,116,32,111,102,32,115,116,114,105,110,103,32,115,112,97,99,101,0,83,116,114,105,110,103,32,116,111,111,32,
        108,111,110,103,0,83,116,114,105,110,103,32,102,111,114,109,117,108,97,32,116,111,111,32,99,111,109,112,108,101,120,0,67,
        97,110,39,116,32,99,111,110,116,105,110,117,101,0,85,110,100,101,102,105,110,101,100,32,117,115,101,114,32,102,117,110,99,
        116,105,111,110,0,78,111,32,82,69,83,85,77,69,0,82,69,83,85,77,69,32,119,105,116,104,111,117,116,32,101,114,114,111,114,0,
        85,110,112,114,105,110,116,97,98,108,101,32,101,114,114,111,114,0,77,105,115,115,105,110,103,32,111,112,101,114,97,110,100,
        0,76,105,110,101,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,0,68,101,118,105,99,101,32,84,105,109,101,111,
        117,116,0,68,101,118,105,99,101,32,70,97,117,108,116,0,70,79,82,32,87,105,116,104,111,117,116,32,78,69,88,84,0,79,117,116,
        32,111,102,32,80,97,112,101,114,0,63,0,87,72,73,76,69,32,119,105,116,104,111,117,116,32,87,69,78,68,0,87,69,78,68,32,119,
        105,116,104,111,117,116,32,87,72,73,76,69,0,70,73,69,76,68,32,111,118,101,114,102,108,111,119,0,73,110,116,101,114,110,97,
        108,32,101,114,114,111,114,0,66,97,100,32,102,105,108,101,32,110,117,109,98,101,114,0,70,105,108,101,32,110,111,116,32,102,
        111,117,110,100,0,66,97,100,32,102,105,108,101,32,109,111,100,101,0,70,105,108,101,32,97,108,114,101,97,100,121,32,111,112,
        101,110,0,63,0,68,101,118,105,99,101,32,73,47,79,32,69,114,114,111,114,0,70,105,108,101,32,97,108,114,101,97,100,121,32,101,
        120,105,115,116,115,0,63,0,63,0,68,105,115,107,32,102,117,108,108,0,73,110,112,117,116,32,112,97,115,116,32,101,110,100,0,
        66,97,100,32,114,101,99,111,114,100,32,110,117,109,98,101,114,0,66,97,100,32,102,105,108,101,32,110,97,109,101,0,63,0,68,
        105,114,101,99,116,32,115,116,97,116,101,109,101,110,116,32,105,110,32,102,105,108,101,0,84,111,111,32,109,97,110,121,32,
        102,105,108,101,115,0,0,0,0,195,30,16,0,82,199,79,128,82,199,79,128,228,0,203,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,1,0,0,80,56,0,114,7,254,255,15,7,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,
        0,0,7,7,32,0,0,0,0,0,0,0,0,0,0,1,24,24,0,0,0,0,80,0,1,0,0,0,7,7,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,32,105,110,32,0,79,107,255,13,0,66,114,101,97,107,0,187,4,0,3,220,67,138,7,67,60,177,117,7,185,6,0,3,217,235,
        241,60,130,116,1,195,138,15,67,138,47,67,83,139,217,11,210,135,218,116,4,135,218,59,218,185,16,0,91,116,230,3,217,235,207,
        185,181,8,233,145,0,205,134,139,30,46,0,138,199,34,195,254,192,116,9,160,79,3,10,192,178,19,117,77,233,189,38,178,61,185,
        178,57,185,178,54,185,178,53,185,178,52,185,178,51,185,178,62,185,178,55,185,178,64,185,178,63,185,178,50,185,178,67,185,
        178,58,235,34,139,30,55,3,137,30,46,0,178,2,185,178,11,185,178,1,185,178,10,185,178,18,185,178,20,185,178,6,185,178,22,185,
        178,13,50,192,162,54,5,162,95,0,162,98,4,162,96,0,139,30,46,0,137,30,71,3,50,192,162,101,4,162,107,4,138,199,34,195,254,192,
        116,4,137,30,73,3,185,12,8,139,30,69,3,233,177,37,89,138,194,138,202,162,40,0,139,30,67,3,137,30,75,3,135,218,139,30,71,3,
        138,199,34,195,254,192,116,10,137,30,84,3,135,218,137,30,86,3,139,30,77,3,11,219,135,218,187,79,3,116,11,34,7,117,7,254,15,
        135,218,233,115,6,50,192,136,7,138,209,232,8,36,187,180,3,205,135,138,194,60,68,115,8,60,50,115,6,60,31,114,6,176,40,44,19,
        138,208,46,138,7,67,10,192,117,248,75,67,254,202,117,242,83,139,30,71,3,94,135,222,86,205,136,46,138,7,60,63,117,6,91,187,
        180,3,235,212,232,190,114,91,186,254,255,59,218,205,137,117,3,233,238,117,138,199,34,195,254,192,116,3,232,153,92,176,255,
        232,241,34,176,89,205,138,50,192,162,111,0,232,59,60,232,154,35,187,45,7,232,140,114,160,40,0,44,2,117,3,232,238,45,205,139,
        187,255,255,137,30,46,0,160,62,3,10,192,116,73,139,30,63,3,83,232,101,92,90,82,232,119,1,176,42,114,2,176,32,232,172,34,232,
        132,40,90,115,14,50,192,162,62,3,235,176,50,192,162,62,3,235,21,139,30,65,3,3,218,114,241,82,186,249,255,59,218,90,115,232,
        137,30,63,3,160,247,1,10,192,116,170,233,168,45,232,81,40,114,162,232,233,5,254,192,254,200,116,153,156,232,45,7,115,8,232,
        147,38,117,3,233,118,254,232,56,4,138,7,60,32,117,3,232,240,91,82,232,49,1,90,157,137,30,67,3,205,140,114,3,233,111,59,82,
        81,232,238,61,232,176,5,10,192,156,137,22,73,3,232,240,0,114,9,157,156,117,3,233,176,7,10,192,81,156,83,232,173,26,91,157,
        89,81,115,3,232,214,24,90,157,82,116,71,90,160,107,4,10,192,117,8,139,30,10,3,137,30,47,3,139,30,88,3,94,135,222,86,89,83,
        3,217,83,232,21,91,91,137,30,88,3,135,218,136,63,89,90,83,67,67,137,23,67,67,186,184,0,73,73,73,73,139,242,172,136,7,67,66,
        73,138,193,10,197,117,242,205,141,90,232,30,0,139,30,233,4,137,30,82,3,232,73,35,205,142,139,30,82,3,137,30,233,4,233,216,
        254,139,30,48,0,135,218,138,254,138,218,138,7,67,10,7,117,1,195,67,67,67,138,7,10,192,116,16,60,32,115,245,60,11,114,241,
        232,253,4,232,249,4,235,236,67,135,218,137,23,235,212,186,0,0,82,116,23,60,44,116,19,90,232,35,6,82,116,29,60,44,116,25,232,
        175,35,234,116,2,60,44,186,250,255,116,3,232,12,6,116,7,60,44,116,3,233,99,253,137,30,59,3,135,218,90,94,135,222,86,83,139,
        30,48,0,139,203,138,7,67,10,7,159,75,158,116,149,67,67,139,31,59,218,139,217,139,31,245,116,136,245,115,133,235,226,50,192,
        162,253,2,162,252,2,205,143,185,59,1,186,184,0,138,7,10,192,117,32,187,64,1,138,195,42,193,138,200,138,199,26,197,138,232,
        187,183,0,50,192,139,250,170,66,139,250,170,66,139,250,170,195,60,34,117,3,233,51,0,60,32,116,9,160,252,2,10,192,138,7,116,
        47,67,80,232,84,2,88,44,58,116,6,60,74,117,8,176,1,162,252,2,162,253,2,44,85,117,172,80,138,7,10,192,88,116,170,58,7,116,
        218,80,138,7,67,232,44,2,235,236,67,10,192,120,146,75,60,63,176,145,82,81,117,3,233,226,0,186,107,3,232,210,14,232,41,36,
        115,3,233,46,1,83,186,94,11,232,32,0,117,62,232,240,3,186,98,11,232,21,0,176,137,117,3,235,11,144,186,101,11,232,8,0,117,
        38,176,141,89,233,173,0,139,242,46,172,10,192,117,1,195,138,200,232,149,14,58,193,117,246,67,66,235,234,71,79,32,0,84,79,
        0,85,66,0,91,232,127,14,83,205,144,187,3,1,44,65,2,192,138,200,181,0,3,217,46,139,23,91,67,83,232,102,14,138,200,139,242,
        46,172,36,127,117,3,233,171,1,67,58,193,117,80,139,242,46,172,66,10,192,121,226,138,193,60,40,116,29,139,242,46,172,60,209,
        116,21,60,208,116,17,232,54,14,60,46,116,3,232,199,21,176,0,114,3,233,122,1,88,139,242,46,172,205,145,10,192,121,3,233,35,
        0,89,90,12,128,80,176,255,232,81,1,50,192,162,253,2,88,232,72,1,233,178,254,91,139,242,46,172,66,10,192,121,247,66,235,141,
        75,80,205,146,186,12,12,138,200,139,242,46,172,10,192,116,23,66,58,193,117,243,235,20,140,170,171,169,166,168,212,161,138,
        147,158,137,142,205,141,0,50,192,235,2,176,1,162,253,2,88,89,90,60,161,80,117,3,232,250,0,88,60,177,117,5,232,244,0,176,233,
        60,217,116,3,233,198,0,80,232,229,0,176,143,232,226,0,88,80,233,173,254,138,7,60,46,116,14,60,58,114,3,233,144,0,60,48,115,
        3,233,137,0,160,253,2,10,192,138,7,89,90,121,3,233,98,254,116,39,60,46,117,3,233,89,254,176,14,232,173,0,82,232,232,3,232,
        253,0,94,135,222,86,135,218,138,195,232,155,0,138,199,91,232,149,0,233,255,253,82,81,138,7,232,31,93,232,223,0,89,90,83,160,
        251,2,60,2,117,26,139,30,163,4,138,199,10,192,176,2,117,14,138,195,138,251,179,15,60,10,115,200,4,17,235,203,80,208,200,4,
        27,232,92,0,187,163,4,232,79,14,114,3,187,159,4,88,80,138,7,232,74,0,88,67,254,200,117,244,91,233,173,253,186,106,3,66,139,
        242,46,172,36,127,117,3,233,107,0,66,58,7,139,242,46,172,117,235,233,111,0,60,38,116,3,233,197,253,83,232,11,2,91,232,215,
        12,60,72,176,11,117,2,176,12,232,11,0,82,81,232,217,12,89,233,92,255,176,58,139,250,170,66,73,138,193,10,197,116,1,195,178,
        23,233,155,250,205,147,91,75,254,200,162,253,2,89,90,232,160,12,232,222,255,67,232,153,12,232,240,33,115,244,60,58,115,8,
        60,48,115,236,60,46,116,232,233,51,253,138,7,60,32,115,10,60,9,116,6,60,10,116,2,176,32,80,160,253,2,254,192,116,2,254,200,
        233,159,254,75,138,7,60,32,116,249,60,9,116,245,60,10,116,241,67,195,176,100,162,57,3,232,210,41,232,85,32,231,82,137,22,
        59,3,160,251,2,80,232,123,9,88,83,232,41,16,187,86,4,232,69,86,91,90,89,83,232,157,3,137,30,53,3,187,2,0,3,220,232,115,249,
        117,30,3,217,82,75,138,55,75,138,23,67,67,83,139,30,53,3,59,218,91,90,117,229,90,139,227,137,30,69,3,177,90,135,218,177,8,
        232,227,30,83,139,30,53,3,94,135,222,86,83,139,30,46,0,94,135,222,86,232,237,31,204,232,26,13,117,3,233,198,249,114,3,233,
        193,249,156,232,14,9,157,83,120,3,233,28,0,232,138,93,94,135,222,86,186,1,0,138,7,60,207,117,3,232,212,16,82,83,135,218,232,
        198,86,235,39,232,18,93,232,177,85,91,81,82,185,0,129,138,241,138,214,205,148,138,7,60,207,176,1,117,14,232,207,8,83,232,
        244,92,232,147,85,232,18,109,91,81,82,138,200,232,186,12,138,232,81,75,232,171,0,116,3,233,71,249,232,129,22,232,160,0,83,
        83,139,30,90,4,137,30,46,0,139,30,59,3,94,135,222,86,181,130,81,159,134,196,80,134,196,159,134,196,80,134,196,233,207,100,
        181,130,81,235,66,233,203,248,233,18,249,195,232,117,0,235,80,205,149,233,99,15,233,213,2,10,192,117,235,67,138,7,67,10,7,
        116,224,67,139,23,67,137,22,46,0,246,6,118,4,255,116,38,83,176,91,232,202,28,135,218,232,112,86,176,93,232,192,28,91,235,
        19,205,150,232,155,29,137,38,69,3,137,30,67,3,138,7,60,58,117,191,67,138,7,60,58,114,171,186,232,14,82,116,164,44,129,114,
        171,60,74,115,162,50,228,2,192,139,240,205,151,46,255,180,37,0,67,138,7,60,58,114,1,195,60,32,116,244,114,8,60,48,245,254,
        192,254,200,195,10,192,116,251,60,11,114,114,60,30,117,6,160,0,3,10,192,195,60,16,116,60,80,67,162,0,3,44,28,115,57,44,245,
        115,7,60,254,117,27,138,7,67,137,30,254,2,183,0,138,216,137,30,2,3,176,2,162,1,3,187,4,0,88,10,192,195,138,7,67,67,137,30,
        254,2,75,138,63,235,225,232,55,0,139,30,254,2,235,147,254,192,208,192,162,1,3,82,81,186,2,3,135,218,138,232,232,19,85,135,
        218,89,90,137,30,254,2,88,187,4,0,10,192,195,60,9,114,3,233,105,255,60,48,245,254,192,254,200,195,160,0,3,60,15,115,23,60,
        13,114,19,139,30,2,3,117,10,67,67,67,138,23,67,138,55,135,218,233,106,84,160,1,3,162,251,2,60,8,116,17,139,30,2,3,137,30,
        163,4,139,30,4,3,137,30,165,4,195,187,2,3,233,157,84,178,3,185,178,2,185,178,4,185,178,8,232,58,31,185,190,7,81,114,229,44,
        65,138,200,138,232,232,5,255,60,234,117,15,232,254,254,232,33,31,114,208,44,65,138,232,232,242,254,138,197,42,193,114,195,
        254,192,94,135,222,86,187,96,3,181,0,3,217,136,23,67,254,200,117,249,91,138,7,60,44,117,168,232,206,254,235,181,232,201,254,
        232,179,14,121,155,178,5,233,122,247,138,7,60,46,139,22,73,3,117,3,233,178,254,75,232,174,254,60,14,116,2,60,13,139,22,2,
        3,117,3,233,159,254,50,192,162,0,3,75,186,0,0,232,147,254,114,1,195,83,159,80,187,152,25,59,218,114,27,138,254,138,218,3,
        218,3,219,3,218,3,219,88,158,44,48,138,208,182,0,3,218,135,218,91,235,213,88,158,91,195,117,3,233,124,28,60,14,116,7,60,13,
        116,3,233,163,48,232,117,28,185,232,14,235,30,177,3,232,2,28,232,149,255,89,83,83,139,30,46,0,94,135,222,86,176,141,159,134,
        196,80,134,196,81,235,4,81,232,123,255,160,0,3,60,13,135,218,116,188,60,14,116,3,233,190,246,135,218,83,139,30,254,2,94,135,
        222,86,232,81,0,67,83,139,30,46,0,59,218,91,115,3,232,79,249,114,3,232,70,249,115,13,73,176,13,162,61,3,91,232,252,18,139,
        217,195,178,8,233,163,246,205,152,117,246,182,255,232,250,245,139,227,137,30,69,3,60,141,178,3,116,3,233,139,246,91,137,30,
        46,0,187,232,14,94,135,222,86,176,91,177,58,235,2,177,0,181,0,138,193,138,205,138,232,75,232,176,253,10,192,116,190,58,197,
        116,186,67,60,34,116,233,254,192,116,236,44,140,117,231,58,197,18,198,138,240,235,223,88,4,3,235,20,232,220,37,232,95,28,
        231,137,22,59,3,82,160,251,2,80,232,133,5,88,94,135,222,86,138,232,160,251,2,58,197,138,197,116,6,232,37,12,160,251,2,186,
        163,4,60,5,114,3,186,159,4,83,60,3,117,49,139,30,163,4,83,67,139,23,139,30,48,0,59,218,115,17,139,30,92,3,59,218,90,115,17,
        187,44,3,59,218,115,10,176,90,232,230,22,135,218,232,51,20,232,222,22,94,135,222,86,232,190,82,90,91,195,60,167,117,50,232,
        24,253,232,236,27,137,232,95,254,11,210,116,13,232,79,248,138,245,138,209,91,114,3,233,19,255,137,22,77,3,114,218,160,79,
        3,10,192,138,194,116,209,160,40,0,138,208,233,206,245,232,229,12,138,7,138,232,60,141,116,5,232,178,27,137,75,138,202,254,
        201,138,197,117,3,233,185,252,232,26,254,60,44,117,167,235,238,160,79,3,10,192,117,8,51,192,163,77,3,233,102,245,254,192,
        162,40,0,128,63,131,116,18,232,247,253,117,12,11,210,116,16,232,115,254,50,192,162,79,3,195,232,151,252,117,250,235,7,50,
        192,162,79,3,254,192,161,71,3,163,46,0,139,30,75,3,117,229,128,63,0,117,3,131,195,4,67,233,23,25,232,112,12,117,218,10,192,
        117,3,233,164,253,233,32,245,186,10,0,82,116,31,232,157,253,135,218,94,135,222,86,116,22,135,218,232,38,27,44,139,22,65,3,
        116,8,232,147,253,116,3,233,225,244,135,218,138,199,10,195,117,3,233,113,253,137,30,65,3,162,62,3,91,137,30,63,3,89,233,219,
        245,232,44,4,138,7,60,44,117,3,232,25,252,60,137,116,5,232,233,26,205,75,83,232,210,81,91,116,25,232,6,252,117,1,195,60,14,
        117,3,233,204,253,60,13,116,3,233,224,251,139,30,2,3,195,182,1,232,41,254,10,192,116,246,232,228,251,60,161,117,242,254,206,
        117,238,235,209,232,106,1,235,3,232,155,49,75,232,206,251,117,3,232,29,25,117,3,233,63,1,60,215,117,3,233,107,39,60,206,117,
        3,233,171,0,60,210,117,3,233,164,0,83,60,44,116,109,60,59,117,3,233,23,1,89,232,169,3,83,232,163,7,116,15,232,65,93,232,194,
        18,198,7,32,139,30,163,4,254,7,205,153,139,30,163,4,83,232,57,28,116,13,232,49,1,120,3,233,49,0,232,129,69,235,3,160,41,0,
        138,232,254,192,116,35,232,30,28,116,7,232,102,69,138,7,235,3,232,104,59,91,83,10,192,116,14,2,7,245,115,4,254,200,58,197,
        114,3,232,153,24,91,232,222,18,91,233,107,255,205,154,185,50,0,139,30,233,4,3,217,232,232,27,138,7,117,24,160,42,0,138,232,
        232,50,59,60,255,116,12,58,197,114,3,232,108,24,114,3,233,135,0,44,14,115,252,246,208,235,114,80,232,7,251,232,241,10,88,
        80,60,210,116,1,74,138,198,10,192,120,3,233,3,0,186,0,0,83,232,166,27,116,13,232,158,0,120,3,233,21,0,232,238,68,235,3,160,
        41,0,138,216,254,192,116,7,183,0,232,124,81,135,218,91,232,161,25,41,75,88,44,210,83,116,19,185,50,0,139,30,233,4,3,217,232,
        111,27,138,7,117,3,232,190,58,246,208,2,194,114,16,254,192,116,25,232,246,23,138,194,254,200,121,3,233,13,0,254,192,138,232,
        176,32,232,24,23,254,205,117,249,91,232,136,250,233,188,254,205,155,50,192,83,82,81,232,134,44,89,90,50,192,138,248,138,216,
        137,30,233,4,91,195,83,50,192,159,134,196,80,134,196,232,233,42,116,3,233,226,242,83,185,46,0,178,2,182,253,3,217,136,55,
        176,0,91,233,230,41,232,51,46,10,192,195,60,133,116,3,233,162,51,232,17,25,133,60,35,117,3,233,40,48,232,48,29,232,115,0,
        232,122,34,232,68,79,82,83,232,167,28,90,89,115,3,233,69,25,81,82,181,0,232,69,17,91,176,3,233,147,252,63,82,101,100,111,
        32,102,114,111,109,32,115,116,97,114,116,13,0,67,138,7,10,192,117,3,233,146,242,60,34,117,242,233,155,0,91,91,235,12,205,
        156,160,58,3,10,192,116,3,233,115,242,89,187,16,21,232,11,102,139,30,67,3,195,232,148,47,83,187,246,1,233,224,0,60,35,116,
        242,232,190,28,185,140,21,81,60,34,176,0,176,255,162,95,4,117,223,232,219,16,138,7,60,44,117,10,50,192,162,95,4,232,157,249,
        235,4,232,111,24,59,83,232,48,17,91,195,83,160,95,4,10,192,116,10,176,63,232,12,22,176,32,232,7,22,232,2,28,89,115,3,233,
        161,24,81,50,192,162,58,3,198,7,44,135,218,91,83,82,82,75,176,128,162,57,3,232,94,249,232,165,34,138,7,75,60,40,117,32,67,
        181,0,254,197,232,76,249,117,3,233,232,241,60,34,117,3,233,69,255,60,40,116,235,60,41,117,233,254,205,117,229,232,49,249,
        116,7,60,44,116,3,233,201,241,94,135,222,86,138,7,60,44,116,3,233,49,255,176,1,162,169,4,232,98,0,160,169,4,254,200,116,3,
        233,31,255,83,232,13,5,117,3,232,140,18,91,75,232,251,248,94,135,222,86,138,7,60,44,116,139,91,75,232,236,248,10,192,91,116,
        3,233,10,255,198,7,44,235,6,83,139,30,94,3,13,50,192,162,58,3,94,135,222,86,235,4,232,162,23,44,232,24,33,94,135,222,86,82,
        138,7,60,44,116,10,160,58,3,10,192,116,3,233,139,0,13,50,192,162,82,4,232,98,25,116,3,233,139,46,232,169,4,80,117,56,232,
        155,248,138,240,138,232,60,34,116,14,160,58,3,10,192,138,240,116,2,182,58,181,44,75,232,182,15,88,4,3,138,200,160,82,4,10,
        192,117,1,195,138,193,135,218,187,202,22,94,135,222,86,82,233,240,250,232,99,248,88,80,60,5,185,155,22,81,115,3,233,249,82,
        233,253,82,75,232,79,248,116,7,60,44,116,3,233,96,254,94,135,222,86,75,232,62,248,116,3,233,107,255,90,160,58,3,10,192,135,
        218,116,3,233,53,23,82,91,233,162,253,232,98,250,10,192,117,21,67,138,7,67,10,7,178,4,117,3,233,206,240,67,139,23,67,137,
        22,55,3,232,8,248,60,132,117,221,233,79,255,232,213,22,231,233,4,0,232,206,22,40,75,182,0,82,177,1,232,165,21,205,157,232,
        178,1,50,192,162,168,4,137,30,82,3,139,30,82,3,89,138,7,137,30,49,3,60,230,115,1,195,60,233,114,117,44,233,138,208,117,12,
        160,251,2,60,3,138,194,117,3,233,214,16,60,12,115,229,187,128,3,182,0,3,218,138,197,46,138,55,58,198,115,213,81,185,62,23,
        81,138,198,205,158,60,127,116,100,60,81,114,109,36,254,60,122,116,103,160,251,2,44,3,117,3,233,61,240,10,192,255,54,163,4,
        121,3,233,17,0,255,54,165,4,122,3,233,8,0,255,54,159,4,255,54,161,4,4,3,138,202,138,232,81,185,35,24,81,139,30,49,3,233,99,
        255,182,0,44,230,114,52,60,3,115,48,60,1,208,208,50,198,58,198,138,240,115,3,233,222,239,137,30,49,3,232,54,247,235,224,232,
        101,83,232,55,76,185,41,101,182,127,235,201,82,232,179,83,90,83,185,49,27,235,190,138,197,60,100,114,1,195,81,82,186,4,100,
        187,3,27,83,232,17,3,116,3,233,118,255,139,30,163,4,83,185,200,37,235,156,89,138,193,162,252,2,160,251,2,58,197,117,13,60,
        2,116,40,60,4,117,3,233,127,0,115,57,138,240,138,197,60,8,116,46,138,198,60,8,116,87,138,197,60,4,116,102,138,198,60,3,117,
        3,233,124,239,115,101,187,170,3,181,0,3,217,3,217,46,138,15,67,46,138,47,90,139,30,163,4,81,195,232,12,83,232,37,76,91,137,
        30,161,4,91,137,30,159,4,89,90,232,90,75,232,247,82,187,150,3,160,252,2,208,192,2,195,138,216,18,199,42,195,138,248,46,139,
        31,255,227,138,197,80,232,246,75,88,162,251,2,60,4,116,211,91,137,30,163,4,235,209,232,151,82,89,90,187,160,3,235,205,91,
        232,97,75,232,101,74,232,40,75,91,137,30,165,4,91,137,30,163,4,235,229,83,135,218,232,80,74,91,232,69,75,232,73,74,233,59,
        76,232,51,246,117,3,233,228,238,115,3,233,204,80,232,78,22,114,3,233,219,0,60,32,115,3,233,127,246,205,159,254,192,117,3,
        233,106,1,254,200,60,233,116,213,60,234,117,3,233,175,0,60,34,117,3,233,45,13,60,211,117,3,233,236,1,60,38,117,3,233,209,
        0,60,213,117,12,232,232,245,160,40,0,83,232,67,2,91,195,60,212,117,13,232,216,245,83,139,30,71,3,232,247,74,91,195,60,218,
        117,46,232,199,245,232,155,20,40,60,35,117,13,232,184,5,83,232,64,38,135,218,91,233,3,0,232,249,30,232,131,20,41,83,135,218,
        11,219,117,3,233,221,246,232,141,75,91,195,60,208,117,3,233,0,2,60,216,117,3,233,139,16,60,200,117,3,233,208,59,60,220,117,
        3,233,76,46,60,222,117,3,233,249,18,60,214,117,3,233,112,15,60,133,117,3,233,56,42,60,219,117,3,233,164,59,60,209,117,3,233,
        126,2,232,96,253,232,46,20,41,195,182,125,232,93,253,139,30,82,3,83,232,214,99,91,195,232,148,29,83,135,218,137,30,163,4,
        232,65,1,116,3,232,175,74,91,195,138,7,60,97,114,249,60,123,115,245,36,95,195,60,38,116,3,233,108,246,186,0,0,232,24,245,
        232,229,255,60,79,116,57,60,72,117,52,181,5,67,138,7,232,213,255,232,42,21,135,218,115,10,60,58,115,77,44,48,114,73,235,6,
        60,71,115,67,44,55,3,219,3,219,3,219,3,219,10,195,138,216,135,218,254,205,117,209,233,140,237,75,232,213,244,135,218,115,
        36,60,56,114,3,233,107,237,185,208,7,81,3,219,114,156,3,219,114,152,3,219,114,148,89,181,0,44,48,138,200,3,217,135,218,235,
        213,232,153,74,135,218,195,67,138,7,44,129,60,7,117,14,83,232,154,244,60,40,91,116,3,233,224,73,176,7,181,0,208,192,138,200,
        81,232,134,244,138,193,60,5,115,34,232,131,252,232,81,19,44,232,148,73,135,218,139,30,163,4,94,135,222,86,83,135,218,232,
        101,4,135,218,94,135,222,86,235,33,232,254,254,94,135,222,86,138,195,60,12,114,11,60,27,205,161,83,115,3,232,123,80,91,186,
        213,25,82,176,1,162,168,4,185,185,0,205,160,3,217,46,255,39,254,206,60,234,116,133,60,45,116,129,254,198,60,43,117,1,195,
        60,233,116,251,159,75,158,195,254,192,18,192,89,34,197,4,255,26,192,232,248,73,235,15,182,90,232,18,252,232,146,80,247,211,
        137,30,163,4,89,233,25,252,160,251,2,60,8,254,200,254,200,254,200,195,138,197,80,232,118,80,88,90,60,122,117,3,233,137,74,
        60,123,117,3,233,102,72,185,12,101,81,60,70,117,3,11,218,195,60,80,117,3,35,218,195,60,60,117,3,51,218,195,60,50,117,5,51,
        218,247,211,195,247,211,35,218,247,211,195,43,218,233,207,72,160,99,0,235,3,232,175,51,254,192,138,216,50,192,138,248,233,
        132,73,232,46,0,82,232,49,254,94,135,222,86,139,23,128,250,255,117,3,233,188,244,14,187,7,101,83,255,54,80,3,82,160,251,2,
        80,60,3,117,3,232,247,12,88,135,218,187,163,4,203,232,97,243,185,0,0,60,27,115,16,60,17,114,12,232,83,243,160,2,3,10,192,
        208,208,138,200,135,218,187,18,0,3,217,135,218,195,232,217,255,82,232,16,18,231,232,194,6,94,135,222,86,137,23,91,195,60,
        208,116,233,60,209,116,28,232,249,17,83,232,245,17,69,232,241,17,71,140,218,116,7,232,233,17,231,232,155,6,137,22,80,3,195,
        232,243,1,232,224,1,135,218,137,23,135,218,138,7,60,40,116,3,233,50,245,232,241,242,232,63,27,138,7,60,41,117,3,233,35,245,
        232,185,17,44,235,238,232,201,1,160,251,2,10,192,80,137,30,82,3,135,218,139,31,11,219,117,3,233,116,235,138,7,60,40,116,3,
        233,206,0,232,187,242,137,30,49,3,135,218,139,30,82,3,232,133,17,40,50,192,80,83,135,218,176,128,162,57,3,232,240,26,135,
        218,94,135,222,86,160,251,2,80,82,232,155,250,137,30,82,3,91,137,30,49,3,88,232,65,1,177,4,232,55,16,187,248,255,3,220,139,
        227,232,249,71,160,251,2,80,139,30,82,3,138,7,60,41,116,19,232,59,17,44,83,139,30,49,3,232,50,17,44,235,177,88,162,228,3,
        88,10,192,116,78,162,251,2,187,0,0,3,220,232,191,71,187,8,0,3,220,139,227,90,179,3,254,195,74,139,242,172,10,192,120,246,
        74,74,74,160,251,2,2,195,138,232,160,228,3,138,200,2,197,60,100,114,3,233,84,243,80,138,195,181,0,187,230,3,3,217,138,200,
        232,223,0,185,197,28,81,81,233,153,244,139,30,82,3,232,250,241,83,139,30,49,3,232,201,16,41,176,82,137,30,49,3,160,124,3,
        4,4,80,208,200,138,200,232,150,15,88,138,200,246,208,254,192,138,216,183,255,3,220,139,227,83,186,122,3,232,158,0,91,137,
        30,122,3,139,30,228,3,137,30,124,3,139,203,187,126,3,186,230,3,232,134,0,138,248,138,216,137,30,228,3,139,30,80,4,67,137,
        30,80,4,138,199,10,195,162,77,4,139,30,49,3,232,144,249,75,232,141,241,116,3,233,41,234,232,141,253,117,17,186,44,3,139,30,
        163,4,59,218,114,6,232,124,8,232,230,8,139,30,122,3,138,247,138,211,67,67,138,15,67,138,47,65,65,65,65,187,122,3,232,47,0,
        135,218,139,227,139,30,80,4,75,137,30,80,4,138,199,10,195,162,77,4,91,88,83,36,7,187,140,3,138,200,181,0,3,217,232,252,252,
        91,195,139,242,172,136,7,67,66,73,138,197,10,193,117,242,195,83,139,30,46,0,67,11,219,91,117,244,178,12,233,206,233,232,231,
        15,209,176,128,162,57,3,10,7,138,200,233,91,25,60,126,116,3,233,157,233,67,138,7,67,60,131,117,3,233,164,12,60,160,117,3,
        233,175,55,60,162,117,3,233,192,56,233,129,233,232,117,4,135,218,236,233,57,253,232,97,4,82,232,167,15,44,232,203,0,90,195,
        232,240,255,238,195,232,235,255,82,80,178,0,75,232,186,240,116,7,232,140,15,44,232,176,0,88,138,240,94,135,222,86,160,94,
        0,10,192,117,11,135,218,236,135,218,50,194,34,198,116,238,91,195,233,52,233,60,35,116,60,232,150,248,232,145,252,117,88,232,
        125,32,138,198,182,0,246,208,10,192,121,3,233,179,241,138,208,82,232,72,15,44,232,108,0,90,159,134,196,80,134,196,83,82,138,
        194,2,192,138,208,176,20,159,134,196,80,134,196,233,8,32,232,80,240,232,76,0,80,232,32,15,44,232,68,0,88,83,82,232,199,32,
        232,50,58,10,192,121,3,233,113,241,67,90,136,23,91,195,232,46,0,232,184,51,162,41,0,44,14,115,252,4,28,246,208,254,192,2,
        194,162,42,0,195,232,19,240,232,26,248,83,232,156,76,135,218,91,138,198,10,192,195,232,1,240,232,8,248,232,235,255,116,3,
        233,50,241,75,232,242,239,138,194,195,232,127,245,75,232,232,239,205,162,89,232,242,234,81,232,25,40,139,30,59,3,75,232,214,
        239,116,14,232,168,14,44,232,195,31,178,2,50,192,232,150,33,187,255,255,137,30,46,0,232,117,16,117,5,176,1,162,111,0,91,90,
        138,15,67,138,47,67,138,197,10,193,117,3,233,61,233,232,144,224,117,3,232,7,13,81,138,15,67,138,47,67,81,94,135,222,86,135,
        218,59,218,89,115,3,233,30,233,94,135,222,86,83,81,135,218,137,30,73,3,232,170,69,91,138,7,60,9,116,5,176,32,232,243,11,232,
        24,0,187,247,1,232,5,0,232,179,12,235,151,138,7,10,192,117,1,195,232,105,23,67,235,243,185,247,1,182,255,50,192,162,252,2,
        50,192,162,94,4,232,121,39,235,6,65,67,254,206,116,223,138,7,10,192,139,249,170,116,214,60,11,114,40,60,32,138,208,114,56,
        60,34,117,10,160,252,2,52,1,162,252,2,176,34,60,58,117,16,160,252,2,208,216,114,7,208,208,36,253,162,252,2,176,58,10,192,
        121,3,233,60,0,138,208,60,46,116,9,232,87,1,115,4,50,192,235,24,160,94,4,10,192,116,15,254,192,117,11,176,32,139,249,170,
        65,254,206,117,1,195,176,1,162,94,4,138,194,60,11,114,7,60,32,115,3,233,55,1,139,249,170,235,130,160,252,2,208,216,114,67,
        208,216,208,216,115,82,138,7,60,217,83,81,187,165,32,83,117,207,73,139,241,172,60,77,117,199,73,139,241,172,60,69,117,191,
        73,139,241,172,60,82,117,183,73,139,241,172,60,58,117,175,88,88,91,254,198,254,198,254,198,254,198,235,45,89,91,138,7,233,
        53,255,160,252,2,12,2,162,252,2,50,192,195,160,252,2,12,4,235,243,208,208,114,231,138,7,60,132,117,3,232,225,255,60,143,117,
        3,232,229,255,138,7,254,192,138,7,117,5,67,138,7,36,127,67,60,161,117,3,232,248,67,60,177,117,10,138,7,67,60,233,176,177,
        116,1,75,83,81,82,205,163,187,54,1,138,232,177,64,254,193,67,138,247,138,211,46,138,7,10,192,116,242,159,67,158,121,244,46,
        138,7,58,197,117,232,135,218,60,208,116,2,60,209,138,193,90,89,138,208,117,12,160,94,4,10,192,176,0,162,94,4,235,21,60,91,
        117,7,50,192,162,94,4,235,29,160,94,4,10,192,176,255,162,94,4,116,13,176,32,139,249,170,65,254,206,117,3,233,164,5,138,194,
        235,6,46,138,7,67,138,208,36,127,139,249,170,65,254,206,117,3,233,141,5,10,194,121,233,60,168,117,5,50,192,162,94,4,91,233,
        100,254,232,191,13,114,1,195,60,48,114,251,60,58,245,195,75,232,136,237,82,81,80,232,33,238,88,185,181,33,81,60,11,117,3,
        233,96,66,60,12,117,3,233,99,66,139,30,2,3,233,19,79,89,90,160,0,3,178,79,60,11,116,6,60,12,178,72,117,20,176,38,139,249,
        170,65,254,206,116,192,138,194,139,249,170,65,254,206,116,182,160,1,3,60,4,178,0,114,6,178,33,116,2,178,35,138,7,60,32,117,
        3,232,82,67,138,7,67,10,192,116,42,139,249,170,65,254,206,116,143,160,1,3,60,4,114,234,159,73,158,139,241,172,159,65,158,
        117,4,60,46,116,8,60,68,116,4,60,69,117,211,178,0,235,207,138,194,10,192,116,9,139,249,170,65,254,206,117,1,195,139,30,254,
        2,233,174,253,232,241,231,81,232,245,1,89,90,81,81,232,32,232,115,11,138,247,138,211,94,135,222,86,83,59,218,114,3,233,0,
        238,187,45,7,232,246,88,89,187,221,9,94,135,222,86,135,218,139,30,88,3,139,242,172,139,249,170,65,66,59,218,117,244,139,217,
        137,30,88,3,195,232,50,0,232,195,36,30,142,30,80,3,138,7,31,233,238,248,232,22,0,82,232,177,36,232,89,11,44,232,125,252,90,
        6,142,6,80,3,139,250,170,7,195,232,122,244,83,232,4,0,135,218,91,195,185,173,107,81,232,105,248,120,246,205,164,160,166,4,
        60,144,117,237,232,171,88,120,232,232,130,72,185,128,145,186,0,0,233,58,64,185,10,0,81,138,245,138,213,116,53,60,44,116,11,
        82,232,116,237,138,238,138,202,90,116,38,232,0,11,44,232,102,237,116,29,88,232,246,10,44,82,232,104,237,116,3,233,182,228,
        11,210,117,3,233,74,237,135,218,94,135,222,86,135,218,81,232,76,231,90,82,81,232,70,231,139,217,90,59,218,135,218,115,3,233,
        44,237,90,89,88,83,82,235,21,3,217,115,3,233,30,237,135,218,83,187,249,255,59,218,91,115,3,233,16,237,82,139,23,11,210,135,
        218,90,116,12,138,7,67,10,7,159,75,158,135,218,117,213,81,232,36,0,89,90,91,82,139,23,67,11,210,116,20,135,218,94,135,222,
        86,135,218,67,137,23,135,218,3,217,135,218,91,235,228,185,181,8,81,60,13,50,192,162,61,3,139,30,48,0,75,67,138,7,67,10,7,
        117,1,195,67,139,23,67,232,123,235,10,192,116,236,138,200,160,61,3,10,192,138,193,116,91,205,165,60,167,117,24,232,99,235,
        60,137,117,228,232,92,235,60,14,117,221,82,232,172,236,11,210,117,10,235,41,60,14,117,204,82,232,158,236,83,232,140,230,159,
        73,158,176,13,114,63,232,120,8,187,252,35,82,232,105,87,91,232,96,65,89,91,83,81,232,81,65,91,90,75,235,163,85,110,100,101,
        102,105,110,101,100,32,108,105,110,101,32,0,60,13,117,234,82,232,97,236,83,135,218,67,67,67,138,15,67,138,47,176,14,187,247,
        35,83,139,30,254,2,83,75,136,47,75,136,15,75,136,7,91,195,160,61,3,10,192,116,248,233,73,255,232,178,9,66,232,174,9,65,232,
        170,9,83,232,166,9,69,160,93,4,10,192,116,3,233,110,227,83,139,30,90,3,135,218,139,30,92,3,59,218,116,3,233,92,227,91,138,
        7,44,48,115,3,233,73,227,60,2,114,3,233,66,227,162,92,4,254,192,162,93,4,232,150,234,195,46,138,7,10,192,116,248,232,3,0,
        67,235,243,159,134,196,80,134,196,233,25,7,116,9,232,132,242,83,232,6,71,235,32,83,187,210,36,232,165,86,232,225,12,90,115,
        3,233,143,9,82,67,138,7,232,0,69,138,7,10,192,117,228,232,228,70,137,30,12,0,232,158,63,91,195,82,97,110,100,111,109,32,110,
        117,109,98,101,114,32,115,101,101,100,32,40,45,51,50,55,54,56,32,116,111,32,51,50,55,54,55,41,0,177,29,235,2,177,26,181,0,
        135,218,139,30,46,0,137,30,90,4,135,218,254,197,75,232,12,234,116,23,60,34,117,11,232,3,234,10,192,116,12,60,34,117,245,60,
        161,116,29,60,205,117,228,10,192,117,21,67,138,7,67,10,7,138,209,117,3,233,157,226,67,139,23,67,137,22,90,4,232,215,233,60,
        143,117,7,81,232,17,236,89,235,217,60,132,117,7,81,232,2,236,89,235,206,138,193,60,26,138,7,116,13,60,177,116,163,60,178,
        117,161,254,205,117,157,195,60,130,116,150,60,131,117,148,254,205,116,243,232,157,233,116,168,135,218,139,30,46,0,83,139,
        30,90,4,137,30,46,0,135,218,81,232,215,17,89,75,232,129,233,186,42,37,116,8,232,80,8,44,75,186,121,37,94,135,222,86,137,30,
        46,0,91,82,195,159,80,160,168,4,162,169,4,88,158,159,80,50,192,162,168,4,88,158,195,232,219,2,138,7,67,138,15,67,138,47,90,
        81,80,232,214,2,88,138,240,138,23,67,138,15,67,138,47,91,138,194,10,198,117,1,195,138,198,44,1,114,249,50,192,58,194,254,
        192,115,241,254,206,254,202,139,241,172,65,58,7,159,67,158,116,220,245,233,114,63,232,247,61,235,8,232,252,61,235,3,232,174,
        74,232,47,0,232,137,2,185,23,41,81,138,7,67,83,232,171,0,91,138,15,67,138,47,232,13,0,83,138,216,232,91,2,90,195,176,1,232,
        149,0,187,44,3,83,136,7,67,137,23,91,195,75,181,34,138,245,83,177,255,67,138,7,254,193,10,192,116,8,58,198,116,4,58,197,117,
        239,60,34,117,3,232,177,232,83,138,197,60,44,117,13,254,193,254,201,116,7,75,138,7,60,32,116,245,91,94,135,222,86,67,135,
        218,138,193,232,180,255,186,44,3,176,82,139,30,12,3,137,30,163,4,176,3,162,251,2,232,23,62,186,47,3,59,218,137,30,12,3,91,
        138,7,117,155,186,16,0,233,34,225,67,232,146,255,232,236,1,232,124,62,254,198,254,206,116,133,139,241,172,232,217,4,60,13,
        117,3,232,165,5,65,235,236,10,192,235,2,88,158,159,80,139,30,92,3,135,218,139,30,47,3,246,208,138,200,181,255,3,217,67,59,
        218,114,15,137,30,47,3,67,135,218,88,158,195,88,134,196,158,195,88,158,186,14,0,117,3,233,202,224,58,192,159,80,185,218,38,
        81,139,30,10,3,137,30,47,3,187,0,0,83,139,30,92,3,83,187,14,3,139,22,12,3,59,218,185,42,39,116,3,233,156,0,187,226,3,137,
        30,78,4,139,30,90,3,137,30,75,4,139,30,88,3,139,22,75,4,59,218,116,27,138,7,67,67,67,80,232,69,19,88,60,3,117,5,232,113,0,
        50,192,138,208,182,0,3,218,235,221,139,30,78,4,139,23,11,210,139,30,90,3,116,25,135,218,137,30,78,4,67,67,139,23,67,67,135,
        218,3,218,137,30,75,4,135,218,235,183,89,139,22,92,3,59,218,117,3,233,108,0,138,7,67,80,67,67,232,248,18,138,15,67,138,47,
        67,88,83,3,217,60,3,117,221,137,30,51,3,91,138,15,181,0,3,217,3,217,67,135,218,139,30,51,3,135,218,59,218,116,196,185,197,
        39,81,50,192,10,7,159,67,158,138,23,159,67,158,138,55,159,67,158,117,1,195,139,203,139,30,47,3,59,218,139,217,114,243,91,
        94,135,222,86,59,218,94,135,222,86,83,139,217,115,227,89,88,88,83,82,81,195,90,91,11,219,116,249,75,138,47,75,138,15,83,75,
        138,31,183,0,3,217,138,245,138,209,75,139,203,139,30,47,3,232,160,60,91,136,15,67,136,47,139,217,75,233,224,254,81,83,139,
        30,163,4,94,135,222,86,232,160,240,94,135,222,86,232,237,59,138,7,83,139,30,163,4,83,2,7,186,15,0,115,3,233,120,223,232,219,
        253,90,232,72,0,94,135,222,86,232,63,0,83,139,30,45,3,135,218,232,14,0,232,11,0,187,58,23,94,135,222,86,83,233,7,254,91,94,
        135,222,86,138,7,67,138,15,67,138,47,138,216,254,195,254,203,117,1,195,139,241,172,139,250,170,65,66,235,241,232,146,59,139,
        30,163,4,135,218,232,32,0,135,218,117,229,82,138,245,138,209,74,138,15,139,30,47,3,59,218,117,10,50,192,138,232,3,217,137,
        30,47,3,91,195,205,238,139,30,12,3,75,138,47,75,138,15,75,59,218,117,238,137,30,12,3,195,185,127,27,81,232,183,255,50,192,
        138,240,138,7,10,192,195,185,127,27,81,232,237,255,117,3,233,85,231,67,139,23,139,242,172,195,232,46,253,232,14,246,139,30,
        45,3,136,23,89,233,114,253,232,255,229,232,211,4,40,232,247,245,82,232,203,4,44,232,250,237,232,196,4,41,94,135,222,86,83,
        232,236,241,116,5,232,225,245,235,3,232,185,255,90,232,5,0,232,213,245,176,32,80,138,194,232,236,252,138,232,88,254,197,254,
        205,116,188,139,30,45,3,136,7,67,254,205,117,249,235,175,232,163,0,50,192,94,135,222,86,138,200,176,83,83,138,7,58,197,114,
        3,138,197,186,177,0,81,232,81,253,89,91,83,67,138,47,67,138,63,138,221,181,0,3,217,139,203,232,168,252,138,216,232,247,254,
        90,232,13,255,233,232,252,232,102,0,90,82,139,242,172,42,197,235,188,135,218,138,7,232,92,0,254,197,254,205,117,3,233,152,
        230,81,232,181,1,88,134,196,158,94,135,222,86,185,117,41,81,254,200,58,7,181,0,114,1,195,138,200,138,7,42,193,58,194,138,
        232,114,243,138,234,195,232,0,255,117,3,233,142,241,138,208,67,139,31,83,3,218,138,47,136,55,94,135,222,86,81,75,232,23,229,
        232,190,63,89,91,136,47,195,135,218,232,225,3,41,89,90,81,138,234,195,232,0,229,232,3,237,232,2,241,176,1,80,116,22,88,232,
        243,244,10,192,117,3,233,38,230,80,232,189,3,44,232,236,236,232,253,57,232,179,3,44,83,139,30,163,4,94,135,222,86,232,217,
        236,232,163,3,41,83,232,80,254,135,218,89,91,88,81,185,7,101,81,185,127,27,81,80,82,232,68,254,90,88,138,232,254,200,138,
        200,58,7,176,0,115,162,139,242,172,10,192,138,197,116,153,138,7,67,138,47,67,138,63,138,221,181,0,3,217,42,193,138,232,81,
        82,94,135,222,86,138,15,67,139,23,91,83,82,81,139,242,172,58,7,117,30,66,254,201,116,12,67,254,205,117,239,90,90,89,90,50,
        192,195,91,90,90,89,138,197,42,199,2,193,254,192,195,89,90,91,67,254,205,117,208,235,229,232,33,3,40,232,151,12,232,97,57,
        83,82,135,218,67,139,23,139,30,92,3,59,218,114,18,139,30,48,0,59,218,115,10,91,83,232,46,251,91,83,232,190,57,91,94,135,222,
        86,232,241,2,44,232,21,244,10,192,117,3,233,75,229,80,138,7,232,102,0,82,232,4,236,83,232,138,253,135,218,91,89,88,138,232,
        94,135,222,86,83,187,7,101,94,135,222,86,138,193,10,192,116,144,138,7,42,197,115,3,233,27,229,254,192,58,193,114,2,138,193,
        138,205,254,201,181,0,82,67,138,23,67,138,63,138,218,3,217,138,232,90,135,218,138,15,67,139,31,135,218,138,193,10,192,117,
        1,195,139,242,172,136,7,66,67,254,201,116,244,254,205,117,241,195,178,255,60,41,116,7,232,113,2,44,232,149,243,232,106,2,
        41,195,232,150,239,116,3,233,6,0,232,18,253,232,124,251,139,22,92,3,139,30,47,3,233,203,239,205,180,159,134,196,80,134,196,
        83,232,37,4,116,3,233,221,23,91,88,134,196,158,81,159,80,235,18,50,192,162,79,3,233,147,229,25,254,200,232,99,35,176,8,235,
        56,60,9,117,16,176,32,232,202,255,232,78,35,36,7,117,244,88,158,89,195,60,32,114,32,160,41,0,138,232,232,58,35,254,197,116,
        11,254,205,58,197,117,3,232,114,0,116,9,60,255,116,5,254,192,232,39,35,88,158,89,159,80,88,158,232,124,34,195,205,181,232,
        188,3,116,61,232,182,23,115,243,81,82,83,160,54,5,36,200,162,54,5,232,204,24,91,90,89,160,107,4,10,192,116,3,233,10,49,160,
        239,4,10,192,116,7,187,232,14,83,233,237,0,83,81,82,187,45,7,232,2,79,90,89,176,13,91,195,232,18,33,195,232,204,34,10,192,
        116,248,235,11,198,7,0,232,106,3,187,246,1,117,7,205,182,176,13,232,45,255,232,91,3,116,3,50,192,195,50,192,232,172,34,50,
        192,195,205,183,160,94,0,10,192,117,1,195,232,196,255,117,3,232,220,1,233,144,1,232,239,50,83,232,175,32,116,33,232,176,255,
        10,192,117,16,80,176,2,232,139,249,139,30,45,3,90,137,23,233,208,249,80,232,123,249,88,138,208,232,74,252,187,6,0,137,30,
        163,4,176,3,162,251,2,91,195,83,139,30,10,3,181,0,3,217,3,217,176,38,42,195,138,216,176,255,26,199,138,248,114,6,3,220,91,
        115,1,195,139,30,44,0,75,75,137,30,69,3,186,7,0,233,212,218,57,30,47,3,115,233,81,82,83,232,6,250,91,90,89,57,30,47,3,115,
        218,235,227,117,214,139,30,48,0,232,121,1,162,100,4,162,62,3,162,61,3,136,7,67,136,7,67,137,30,88,3,205,174,139,30,48,0,75,
        205,175,137,30,59,3,160,101,4,10,192,117,23,50,192,162,93,4,162,92,4,181,26,187,96,3,205,176,198,7,4,67,254,205,117,248,186,
        7,0,187,11,0,232,198,55,50,192,162,79,3,138,216,138,248,137,30,77,3,137,30,86,3,139,30,10,3,160,107,4,10,192,117,4,137,30,
        47,3,50,192,232,124,0,139,30,88,3,137,30,90,3,137,30,92,3,160,101,4,10,192,117,3,232,180,21,160,54,5,36,1,117,3,162,54,5,
        89,139,30,44,0,75,75,137,30,69,3,67,67,205,177,139,227,187,14,3,137,30,12,3,232,243,247,232,202,230,50,192,138,248,138,216,
        137,30,124,3,162,77,4,137,30,228,3,137,30,80,4,137,30,122,3,162,57,3,83,81,139,30,59,3,195,59,218,195,94,139,251,252,46,166,
        86,139,223,117,10,138,7,60,58,114,1,195,233,28,225,233,178,217,135,218,139,30,48,0,116,17,135,218,232,82,226,83,232,74,220,
        139,217,90,114,3,233,11,227,75,137,30,94,3,135,218,195,117,253,254,192,235,9,117,247,156,117,3,232,159,10,157,137,30,67,3,
        187,14,3,137,30,12,3,187,12,255,89,139,30,46,0,83,156,138,195,34,199,254,192,116,12,137,30,84,3,139,30,67,3,137,30,86,3,232,
        245,253,157,187,50,7,116,3,233,20,218,233,65,218,176,15,80,176,94,232,41,253,88,4,64,232,35,253,233,236,253,139,30,86,3,11,
        219,186,17,0,117,3,233,69,217,139,22,84,3,137,22,46,0,195,184,50,192,162,118,4,195,232,200,8,82,83,187,110,4,232,11,54,139,
        30,90,3,94,135,222,86,232,108,236,80,232,55,255,44,232,173,8,88,138,232,232,94,236,58,197,116,3,233,8,217,94,135,222,86,135,
        218,83,139,30,90,3,59,218,117,19,90,91,94,135,222,86,82,232,210,53,91,186,110,4,232,203,53,91,195,233,102,225,176,1,162,57,
        3,232,115,8,117,243,83,162,57,3,138,253,138,217,73,73,73,139,241,172,73,10,192,120,248,73,73,3,218,135,218,139,30,92,3,59,
        218,139,242,172,139,249,170,159,66,158,159,65,158,117,240,73,139,217,137,30,92,3,91,138,7,60,44,117,183,232,226,223,235,182,
        88,134,196,158,91,195,138,7,60,65,114,249,60,91,245,195,233,238,253,116,251,60,44,116,9,232,251,224,75,232,192,223,116,238,
        232,146,254,44,116,232,139,22,44,0,60,44,116,3,232,71,0,75,232,169,223,82,116,78,232,122,254,44,116,72,232,55,0,75,232,153,
        223,116,3,233,53,216,94,135,222,86,83,187,238,0,59,218,115,45,91,232,54,0,114,39,83,139,30,88,3,185,20,0,3,217,59,218,115,
        25,135,218,137,30,10,3,91,137,30,44,0,91,235,150,232,240,242,11,210,117,3,233,152,224,195,233,47,253,139,22,44,0,43,22,10,
        3,235,186,139,195,43,194,139,208,195,205,178,83,139,30,233,4,11,219,91,195,1,48,78,48,225,48,253,47,241,47,91,48,48,48,27,
        48,139,30,86,0,232,74,0,116,1,195,235,4,176,1,235,2,176,255,162,112,0,254,192,232,101,1,183,1,232,11,0,117,232,232,11,31,
        232,94,0,50,192,195,160,92,0,58,195,116,248,115,7,138,216,50,192,233,245,30,254,195,233,240,30,160,91,0,58,195,116,227,176,
        1,58,195,116,221,254,203,233,222,30,160,41,0,58,199,116,209,254,199,233,210,30,139,30,91,0,183,1,137,30,88,0,233,197,30,139,
        30,86,0,232,9,0,117,182,160,41,0,138,248,235,197,176,1,58,199,116,169,254,207,233,170,30,160,91,0,138,248,160,92,0,138,216,
        42,199,114,150,254,192,80,232,153,0,160,88,0,254,195,58,195,254,203,115,13,58,199,114,9,117,2,176,1,254,200,162,88,0,88,254,
        200,117,3,233,3,0,232,222,30,195,160,91,0,138,216,160,92,0,138,248,42,195,114,241,254,192,80,232,127,0,160,88,0,58,195,114,
        16,58,199,120,3,233,9,0,117,2,176,255,254,192,162,88,0,88,254,200,116,207,233,187,30,139,30,91,0,160,93,0,138,232,138,197,
        58,195,115,2,138,216,58,199,115,2,138,248,138,199,183,0,42,195,254,192,186,114,0,80,135,218,3,218,136,7,67,136,7,67,254,200,
        117,249,135,218,88,50,192,162,88,0,162,89,0,162,90,0,233,43,255,80,232,55,0,181,1,138,200,138,197,139,250,170,74,139,242,
        172,138,233,138,200,88,254,200,117,1,195,80,235,234,80,181,1,232,23,0,138,200,138,197,139,250,170,66,139,242,172,138,233,
        138,200,88,254,200,116,226,80,235,235,83,186,116,0,183,0,254,203,3,218,138,7,135,218,91,34,192,195,83,186,116,0,183,0,254,
        203,3,218,136,7,135,218,91,195,205,166,232,65,1,139,30,86,0,137,30,88,0,160,41,0,254,192,235,30,176,63,232,12,250,176,32,
        232,7,250,50,192,162,39,0,205,167,232,30,1,139,30,86,0,137,30,88,0,138,199,162,90,0,232,225,4,254,203,116,5,176,1,232,175,
        255,232,12,35,232,65,35,232,164,27,232,8,35,232,56,35,10,192,117,3,232,119,28,80,139,30,86,0,138,38,41,0,254,196,58,30,88,
        0,117,18,58,62,89,0,115,4,136,62,89,0,58,62,90,0,118,6,138,231,136,38,90,0,88,232,47,0,114,16,116,187,232,3,2,232,153,249,
        235,179,1,232,147,249,235,173,60,3,249,116,1,245,187,246,1,195,60,59,117,251,233,248,220,75,67,254,201,120,242,46,58,7,117,
        246,195,187,148,50,177,14,232,236,255,121,3,233,7,0,80,50,192,162,114,0,88,187,162,50,177,12,232,216,255,121,3,233,32,0,80,
        138,193,10,192,208,192,138,200,50,192,138,232,187,174,50,3,217,46,138,23,67,46,138,55,88,82,139,30,86,0,195,10,192,195,3,
        34,192,195,139,30,86,0,128,255,1,117,11,254,203,232,215,254,117,7,138,62,41,0,232,144,28,233,222,249,195,13,2,6,5,3,11,12,
        28,29,30,31,14,127,27,9,10,8,18,2,6,5,3,13,14,127,27,255,52,86,52,202,52,57,51,175,51,7,53,37,53,77,53,1,52,119,52,243,50,
        193,51,232,13,253,116,200,88,181,254,187,247,1,232,65,249,136,7,60,13,116,17,60,10,117,6,138,197,60,254,116,237,67,254,205,
        117,232,254,205,50,192,136,7,187,246,1,195,160,114,0,10,192,116,58,232,97,254,80,135,218,198,7,0,135,218,254,195,232,41,3,
        160,41,0,42,199,116,11,254,192,80,232,245,0,88,254,200,117,247,139,30,86,0,232,59,254,88,138,200,50,192,139,250,170,66,138,
        193,139,250,170,50,192,195,176,10,10,192,195,232,90,2,186,247,1,181,254,160,88,0,58,195,183,1,160,41,0,117,19,139,30,88,0,
        82,232,9,254,90,160,41,0,116,5,160,90,0,254,200,162,90,0,232,60,2,138,197,34,192,116,16,82,232,238,253,90,117,9,183,1,254,
        195,160,41,0,235,228,135,218,176,254,42,198,138,240,75,138,7,60,32,116,8,10,192,117,7,254,206,116,3,75,235,239,67,198,7,0,
        135,218,176,13,80,183,1,232,124,27,176,13,232,252,247,187,246,1,88,249,195,50,192,162,247,1,232,167,253,117,4,254,195,235,
        247,176,3,235,221,138,199,254,200,36,248,4,8,254,192,138,232,160,41,0,58,197,115,2,138,232,138,197,160,114,0,10,192,138,197,
        117,12,58,199,116,5,138,248,232,54,27,50,192,195,42,199,116,251,80,160,80,0,232,20,0,232,170,247,88,254,200,117,241,195,160,
        114,0,246,208,162,114,0,50,192,195,83,139,30,86,0,80,160,114,0,10,192,116,3,232,3,0,88,91,195,160,88,0,58,195,117,16,83,187,
        90,0,254,7,160,41,0,58,7,115,2,136,7,91,160,80,0,138,200,232,143,1,114,16,116,220,80,50,192,232,40,253,254,195,232,230,1,
        88,254,203,254,195,183,1,235,227,83,160,41,0,58,199,117,11,183,0,160,93,0,58,195,117,0,254,195,254,199,232,9,0,91,83,232,
        173,26,50,192,91,195,176,1,58,199,116,4,254,207,235,20,83,254,203,116,14,160,41,0,138,248,232,208,252,117,4,94,135,222,86,
        91,232,136,26,160,88,0,58,195,117,10,160,90,0,254,200,116,3,162,90,0,232,66,1,83,232,174,252,117,17,254,195,183,1,232,5,2,
        94,135,222,86,232,251,1,91,235,230,91,232,85,26,50,192,195,232,145,252,117,11,160,91,0,58,195,116,4,254,195,235,240,160,41,
        0,138,248,160,80,0,138,200,81,232,34,26,89,10,192,116,12,58,193,116,8,254,199,232,42,26,50,192,195,254,207,116,244,235,229,
        232,148,0,183,1,232,25,26,83,160,80,0,232,173,1,91,254,199,160,41,0,254,192,58,199,117,237,232,65,252,117,165,183,1,254,195,
        235,226,198,6,112,0,0,235,8,232,229,25,232,74,1,114,15,232,64,0,116,19,235,241,232,214,25,232,59,1,115,7,232,49,0,116,4,235,
        241,50,192,195,50,192,162,112,0,235,8,232,189,25,232,34,1,115,15,232,38,0,116,235,235,241,232,174,25,232,19,1,114,7,232,23,
        0,116,220,235,241,232,2,0,235,211,139,30,86,0,232,196,250,117,204,183,1,233,150,250,139,30,86,0,232,223,250,117,190,160,41,
        0,138,248,233,154,250,254,203,116,5,232,193,251,116,247,254,195,195,81,160,90,0,58,199,114,26,232,103,25,232,22,0,139,250,
        170,66,94,135,222,86,254,207,94,135,222,86,116,4,254,199,235,223,89,195,10,192,117,2,176,32,195,232,69,0,80,232,138,251,116,
        21,88,34,192,116,241,60,32,116,237,160,80,0,58,193,116,230,138,193,34,192,195,88,249,195,160,41,0,58,199,116,25,254,199,232,
        196,0,83,254,207,232,187,0,91,254,199,160,41,0,254,192,58,199,117,235,254,207,160,80,0,232,167,0,195,83,81,232,164,0,89,80,
        138,193,232,154,0,88,138,200,160,41,0,254,192,254,199,58,199,117,231,138,193,91,195,83,160,92,0,42,195,114,47,116,34,139,
        30,91,0,94,135,222,86,83,138,195,162,91,0,160,93,0,162,92,0,232,90,250,91,94,135,222,86,137,30,91,0,91,83,183,1,232,249,24,
        91,176,1,233,6,251,139,30,86,0,254,203,116,3,232,171,24,232,254,249,91,254,203,195,60,48,114,251,60,58,114,18,60,65,114,243,
        60,91,114,10,60,97,114,235,60,123,114,2,249,195,34,192,195,83,183,1,160,41,0,138,232,81,232,101,24,89,60,255,116,8,254,199,
        254,205,117,241,91,195,91,83,183,1,232,164,24,91,195,233,67,24,233,73,24,162,40,0,139,30,71,3,10,199,34,195,254,192,135,218,
        116,232,235,19,187,246,1,116,225,249,156,67,233,117,210,232,124,217,116,3,233,114,217,91,137,22,73,3,232,120,211,114,3,233,
        60,218,139,217,67,67,139,23,67,67,83,135,218,232,78,46,91,138,7,60,9,116,5,176,32,232,151,244,232,188,232,187,247,1,232,169,
        232,232,95,251,139,30,86,0,254,203,116,9,254,203,116,5,232,53,250,116,247,254,195,232,240,23,233,160,209,60,10,116,3,233,
        107,244,83,139,30,233,4,138,199,10,195,91,176,10,117,8,80,176,13,232,87,244,88,195,232,82,244,176,13,232,77,244,176,10,195,
        75,232,190,215,117,1,195,232,143,246,44,185,91,55,81,176,200,235,2,50,192,162,250,2,138,15,205,179,232,201,247,115,3,233,
        63,208,50,192,138,232,162,142,0,67,138,7,60,46,114,66,116,13,60,58,115,4,60,48,115,5,232,171,247,114,51,138,232,81,181,255,
        186,142,0,12,128,254,197,139,250,170,66,67,138,7,60,58,115,4,60,48,115,237,232,139,247,115,232,60,46,116,228,138,197,60,39,
        114,3,233,245,207,89,162,142,0,138,7,60,38,115,30,186,3,56,82,182,2,60,37,116,132,254,198,60,36,117,1,195,254,198,60,33,116,
        249,182,8,60,35,116,243,88,138,193,36,127,138,208,182,0,83,187,31,3,3,218,138,55,91,75,138,198,162,251,2,232,18,215,160,57,
        3,254,200,117,3,233,122,1,120,3,233,16,0,138,7,44,40,117,3,233,205,0,44,51,117,3,233,198,0,50,192,162,57,3,83,160,77,4,10,
        192,162,74,4,116,30,139,30,124,3,186,126,3,3,218,137,30,75,4,135,218,233,247,45,160,74,4,10,192,116,36,50,192,162,74,4,139,
        30,90,3,137,30,75,4,139,30,88,3,233,220,45,232,4,255,195,50,192,138,240,138,208,89,94,135,222,86,195,91,94,135,222,86,82,
        186,106,56,59,218,116,231,186,218,25,59,218,90,116,73,94,135,222,86,83,81,160,251,2,138,232,160,142,0,2,197,254,192,138,200,
        81,181,0,65,65,65,139,30,92,3,83,3,217,89,83,232,25,44,91,137,30,92,3,139,217,137,30,90,3,75,198,7,0,59,218,117,248,90,136,
        55,67,90,137,23,67,232,221,1,135,218,66,91,195,232,134,66,235,8,198,6,79,3,0,233,120,10,232,64,226,117,7,187,6,0,137,30,163,
        4,91,195,83,139,30,250,2,94,135,222,86,138,240,82,81,186,142,0,139,242,172,10,192,116,61,135,218,4,2,208,216,138,200,232,
        195,243,138,193,138,15,67,138,47,67,81,254,200,117,245,83,160,142,0,80,135,218,232,40,215,88,137,30,181,0,91,4,2,208,216,
        89,75,136,47,75,136,15,254,200,117,245,139,30,181,0,235,8,232,10,215,50,192,162,142,0,160,92,4,10,192,116,8,11,210,117,3,
        233,95,0,74,89,88,134,196,158,135,218,94,135,222,86,83,135,218,254,192,138,240,138,7,60,44,116,136,60,41,116,7,60,93,116,
        3,233,64,206,232,156,213,137,30,82,3,91,137,30,250,2,178,0,82,235,7,83,159,134,196,80,134,196,139,30,90,3,233,175,44,160,
        250,2,10,192,116,3,233,32,206,88,134,196,158,139,203,117,3,233,85,43,42,7,117,3,233,152,0,186,9,0,233,25,206,160,251,2,136,
        7,67,138,208,182,0,88,134,196,158,117,3,233,202,0,136,15,67,136,47,232,211,0,67,138,200,232,245,242,67,67,137,30,49,3,136,
        15,67,160,250,2,208,208,138,193,114,15,159,80,160,92,4,52,11,138,200,181,0,88,158,115,4,89,159,65,158,136,15,159,80,67,136,
        47,67,232,122,42,88,158,254,200,117,218,159,80,138,238,138,202,135,218,3,218,115,3,233,207,242,232,220,242,137,30,92,3,75,
        198,7,0,59,218,117,248,50,192,65,138,240,139,30,49,3,138,23,135,218,3,219,3,217,135,218,75,75,137,23,67,67,88,158,114,70,
        138,232,138,200,138,7,67,182,91,139,23,67,67,94,135,222,86,80,59,218,114,3,233,79,255,232,29,42,3,218,88,254,200,139,203,
        117,227,160,251,2,139,203,3,219,44,4,114,8,3,219,10,192,116,11,3,219,10,192,122,3,233,2,0,3,217,89,3,217,135,218,139,30,82,
        3,195,249,26,192,91,195,138,7,67,81,181,0,138,200,3,217,89,195,81,82,159,80,186,142,0,139,242,172,138,232,254,197,139,242,
        172,66,67,136,7,254,205,117,245,88,158,90,89,195,232,90,220,232,106,41,232,32,243,59,135,218,139,30,163,4,235,10,160,58,3,
        10,192,116,17,90,135,218,83,50,192,162,58,3,254,192,156,82,138,47,10,237,117,3,233,95,213,67,139,31,235,36,138,213,83,177,
        2,138,7,67,60,92,117,3,233,157,1,60,32,117,6,254,193,254,205,117,236,91,138,234,176,92,232,214,1,232,130,240,50,192,138,208,
        138,240,232,202,1,138,240,138,7,67,60,33,117,3,233,111,1,60,35,116,82,60,38,117,3,233,96,1,254,205,117,3,233,46,1,60,43,176,
        8,116,217,75,138,7,67,60,46,116,85,60,95,117,3,233,55,1,60,92,116,156,58,7,117,182,60,36,116,24,60,42,117,174,138,197,67,
        60,2,114,4,138,7,60,36,176,32,117,10,254,205,254,194,190,50,192,4,16,67,254,194,2,198,138,240,254,194,177,0,254,205,116,97,
        138,7,67,60,46,116,30,60,35,116,237,60,44,117,35,138,198,12,64,138,240,235,225,138,7,60,35,176,46,116,3,233,101,255,177,1,
        67,254,193,254,205,116,54,138,7,67,60,35,116,243,82,186,244,59,82,138,247,138,211,60,94,116,1,195,58,7,117,251,67,58,7,117,
        246,67,58,7,117,241,67,138,197,44,4,114,234,90,90,138,232,254,198,67,235,3,135,218,90,138,198,75,254,194,36,8,117,28,254,
        202,138,197,10,192,116,20,138,7,44,45,116,6,60,254,117,10,176,8,4,4,2,198,138,240,254,205,91,157,116,101,81,82,232,2,219,
        90,89,81,83,138,234,138,197,2,193,60,25,114,3,233,35,212,138,198,12,128,232,92,59,232,119,234,91,75,232,216,210,249,116,17,
        162,58,3,60,59,116,7,60,44,116,3,233,104,203,232,196,210,89,135,218,91,83,156,82,138,7,42,197,67,182,0,138,208,139,31,3,218,
        138,197,10,192,116,3,233,173,254,235,6,232,123,0,232,39,239,91,157,116,3,233,88,254,115,3,232,231,239,94,135,222,86,232,28,
        236,91,233,3,216,195,232,93,0,254,205,138,7,67,232,4,239,235,202,177,0,235,5,177,1,235,1,88,254,205,232,69,0,91,157,116,208,
        81,232,110,218,232,127,39,89,81,83,139,30,163,4,138,233,177,0,138,197,80,138,197,10,192,116,3,232,161,236,232,228,233,139,
        30,163,4,88,10,192,117,3,233,94,255,42,7,138,232,176,32,254,197,254,205,117,3,233,79,255,232,177,238,235,244,80,138,198,10,
        192,176,43,116,3,232,163,238,88,195,137,30,53,3,232,236,231,232,15,210,135,218,232,102,0,159,68,158,159,68,158,117,8,3,217,
        139,227,137,30,69,3,139,30,46,0,83,139,30,53,3,83,82,235,40,116,3,233,137,202,135,218,232,63,0,117,103,139,227,137,30,69,
        3,139,22,46,0,137,22,90,4,67,67,139,23,67,67,139,31,137,30,46,0,135,218,232,204,217,83,232,132,39,91,116,9,185,177,0,138,
        233,81,233,125,209,139,30,90,4,137,30,46,0,91,89,89,233,111,209,187,4,0,3,220,67,138,7,67,185,130,0,58,193,117,7,185,18,0,
        3,217,235,238,185,177,0,58,193,116,1,195,57,23,185,6,0,116,248,3,217,235,219,186,30,0,233,47,202,232,58,7,75,232,109,209,
        116,85,232,114,217,83,232,108,221,116,61,232,10,51,232,139,232,139,30,163,4,67,138,23,67,138,55,139,242,172,60,32,117,9,66,
        136,55,75,136,23,75,254,15,232,220,232,91,75,232,58,209,116,34,60,59,116,5,232,8,240,44,75,232,44,209,176,44,232,175,237,
        235,186,176,34,232,168,237,232,186,232,176,34,232,160,237,235,215,232,103,238,233,139,214,205,168,83,138,242,232,135,1,116,
        9,60,58,116,15,232,126,1,121,247,138,214,91,50,192,176,252,205,171,195,138,198,42,194,254,200,60,2,115,5,205,172,233,97,201,
        60,5,114,3,233,90,201,89,82,81,138,200,138,232,186,156,62,94,135,222,86,83,138,7,60,97,114,6,60,123,115,2,44,32,81,138,232,
        139,242,46,172,67,66,58,197,89,117,21,254,201,117,226,139,242,46,172,10,192,120,3,233,6,0,91,91,90,10,192,195,10,192,120,
        235,139,242,46,172,10,192,159,66,158,121,245,138,205,91,83,139,242,46,172,10,192,117,182,233,254,200,75,89,66,68,255,83,67,
        82,78,254,76,80,84,49,253,67,65,83,49,252,0,123,88,145,88,167,88,189,88,205,169,83,82,159,134,196,80,134,196,186,46,0,3,218,
        176,255,42,7,2,192,138,208,205,170,182,0,187,177,62,3,218,46,138,23,67,46,138,55,88,134,196,158,138,216,183,0,3,218,46,138,
        23,67,46,138,55,135,218,90,94,135,222,86,195,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,17,216,83,232,140,233,
        138,7,10,192,116,79,67,138,23,67,138,63,138,218,138,208,50,192,162,255,6,232,219,254,159,134,196,80,134,196,185,240,4,182,
        11,254,194,254,202,116,77,138,7,60,32,114,38,60,46,116,40,139,249,170,65,67,254,206,117,233,88,134,196,158,159,134,196,80,
        134,196,138,240,160,240,4,254,192,116,6,88,134,196,158,91,195,233,40,200,67,235,202,176,1,162,255,6,138,198,60,11,116,239,
        60,3,114,235,116,236,176,32,139,249,170,65,254,206,235,234,176,32,139,249,170,65,254,206,117,246,235,186,138,7,67,254,202,
        195,232,122,223,138,216,160,223,4,58,195,115,3,233,233,199,183,0,3,219,135,218,139,30,224,4,3,218,139,31,160,54,5,254,192,
        116,219,138,7,10,192,116,213,83,186,46,0,3,218,138,7,60,9,115,5,205,220,233,192,199,91,138,7,10,192,249,195,75,232,53,207,
        60,35,117,3,232,46,207,232,42,223,94,135,222,86,83,232,171,255,117,3,233,155,199,137,30,233,4,195,185,152,20,81,232,28,215,
        138,7,60,44,117,89,83,232,145,232,138,7,10,192,117,3,233,124,199,67,139,31,138,7,36,223,178,1,60,73,116,21,178,2,60,79,116,
        15,178,4,60,82,116,9,178,8,60,65,116,3,233,84,199,91,82,232,175,237,44,60,35,117,3,232,208,206,232,204,222,232,161,237,44,
        138,194,10,192,117,3,233,61,199,80,232,178,254,88,89,138,209,205,221,233,131,0,232,169,254,138,7,60,130,178,4,117,89,232,
        165,206,60,133,178,1,116,77,60,79,116,32,60,73,116,55,232,107,237,65,232,103,237,80,232,99,237,80,232,95,237,69,232,91,237,
        78,232,87,237,68,178,8,235,44,232,120,206,232,76,237,85,232,72,237,84,232,68,237,80,232,64,237,85,232,60,237,84,178,2,235,
        17,232,93,206,232,49,237,66,232,45,237,77,178,32,75,232,79,206,232,35,237,65,232,31,237,83,82,138,7,60,35,117,3,232,61,206,
        232,57,222,10,192,117,3,233,176,198,205,222,180,82,75,138,208,232,41,206,116,3,233,197,198,94,135,222,86,138,194,159,134,
        196,80,134,196,83,232,156,254,116,3,233,149,198,90,138,198,60,9,205,223,115,3,233,131,198,83,185,46,0,3,217,136,55,176,0,
        91,233,145,253,83,10,192,117,10,160,54,5,36,1,116,3,233,70,3,232,107,254,116,21,137,30,233,4,83,176,2,115,3,233,113,253,205,
        224,233,80,198,232,36,3,91,83,186,49,0,3,218,136,7,138,248,138,216,137,30,233,4,91,2,7,198,7,0,91,195,249,235,3,13,50,192,
        159,80,232,159,253,205,233,88,158,159,80,116,20,138,7,44,44,10,192,117,12,232,150,205,232,106,236,82,88,158,249,159,80,159,
        80,50,192,178,1,232,84,255,139,30,233,4,185,49,0,3,217,88,158,26,192,36,128,12,1,162,54,5,88,158,159,80,26,192,162,239,4,
        138,7,10,192,121,3,233,216,0,88,158,116,3,232,87,235,50,192,232,44,254,233,5,199,232,66,253,205,234,75,232,70,205,178,128,
        249,117,3,232,121,5,116,24,232,16,236,44,60,80,178,146,117,6,232,47,205,249,235,8,232,0,236,65,10,192,178,2,159,80,138,194,
        36,16,162,98,4,88,158,159,80,254,192,162,95,0,50,192,232,221,254,88,158,83,139,30,233,4,138,7,91,36,128,117,3,233,20,221,
        83,232,99,225,160,98,4,10,192,116,3,232,121,4,139,30,88,3,137,30,4,7,139,30,48,0,83,139,30,233,4,232,198,0,10,192,121,3,233,
        22,0,233,77,197,160,98,4,10,192,116,3,232,162,4,91,50,192,162,98,4,233,200,254,91,232,2,0,235,231,232,160,0,60,252,117,3,
        233,13,26,205,235,233,31,197,139,30,48,0,10,192,232,3,0,233,70,0,159,80,232,131,0,60,252,117,3,233,54,26,88,158,205,236,233,
        0,197,88,158,195,36,32,162,99,4,88,158,117,3,233,241,196,232,119,234,160,99,4,162,100,4,232,171,0,50,192,232,241,252,198,
        7,128,137,30,233,4,232,75,0,10,192,120,179,205,237,233,211,196,160,100,4,10,192,116,3,232,40,4,232,39,199,67,67,137,30,88,
        3,232,90,234,50,192,162,54,5,232,67,254,160,239,4,10,192,116,3,233,249,203,233,196,197,135,218,139,30,47,3,135,218,59,218,
        114,152,232,28,234,50,192,162,54,5,233,235,233,83,82,139,30,233,4,186,46,0,3,218,138,7,90,91,195,117,30,83,81,80,186,38,67,
        82,81,10,192,195,88,89,254,200,121,240,91,195,89,91,138,7,60,44,117,247,232,228,203,81,138,7,60,35,117,3,232,218,203,232,
        214,219,94,135,222,86,83,186,46,67,82,249,255,227,185,40,65,160,223,4,235,191,160,54,5,10,192,120,204,185,40,65,50,192,160,
        223,4,235,174,50,192,138,232,138,197,232,49,252,198,7,0,160,223,4,254,197,42,197,115,239,50,192,162,54,5,232,149,233,139,
        30,48,0,75,198,7,0,233,219,195,91,88,134,196,158,83,82,81,159,134,196,80,134,196,139,30,233,4,176,6,232,5,0,205,227,233,235,
        195,159,134,196,80,134,196,82,135,218,187,46,0,3,218,138,7,135,218,90,60,9,115,3,233,202,0,88,134,196,158,94,135,222,86,91,
        233,228,250,81,83,82,139,30,233,4,176,8,232,206,255,205,228,233,180,195,90,91,89,195,232,48,203,232,4,234,36,232,0,234,40,
        83,139,30,233,4,83,187,0,0,137,30,233,4,91,94,135,222,86,232,18,219,82,138,7,60,44,117,11,232,9,203,232,205,251,91,50,192,
        138,7,159,80,232,211,233,41,88,158,94,135,222,86,159,80,138,195,10,192,117,3,233,38,204,83,232,7,226,135,218,89,88,158,159,
        80,116,40,232,22,232,60,3,116,19,136,7,67,254,201,117,236,88,158,89,91,137,30,233,4,81,233,51,226,88,158,139,30,46,0,137,
        30,71,3,91,233,6,195,232,106,255,115,3,233,48,195,235,213,205,229,232,18,0,83,181,1,232,2,0,91,195,50,192,136,7,67,254,205,
        117,249,195,139,30,233,4,186,51,0,3,218,195,88,134,196,158,195,232,7,251,117,3,233,250,194,176,10,115,3,233,18,250,205,230,
        233,238,194,232,243,250,117,3,233,230,194,176,12,115,3,233,254,249,205,231,233,218,194,232,223,250,117,3,233,210,194,176,
        14,115,3,233,234,249,205,232,233,198,194,232,255,234,117,3,233,31,202,50,192,232,71,252,178,66,233,242,194,60,35,117,173,
        232,44,218,232,4,233,44,138,194,83,232,0,251,91,138,7,195,185,236,45,81,50,192,233,36,252,232,30,214,185,155,22,186,32,44,
        117,27,138,214,235,23,185,152,20,81,232,204,255,232,81,242,232,27,31,82,185,138,17,50,192,138,240,138,208,80,81,83,232,165,
        254,115,3,233,107,194,60,32,117,6,254,198,254,206,117,238,60,34,117,19,138,232,138,194,60,44,138,197,117,9,138,245,138,213,
        232,129,254,114,83,187,247,1,181,255,138,200,138,198,60,34,138,193,116,46,60,13,83,116,89,91,60,10,117,36,138,200,138,194,
        60,44,138,193,116,3,232,137,0,83,232,85,254,91,114,38,60,13,117,12,138,194,60,32,116,21,60,44,176,13,116,15,10,192,116,11,
        58,198,116,14,58,194,116,10,232,99,0,83,232,47,254,91,115,178,83,60,34,116,4,60,32,117,37,232,32,254,114,32,60,32,116,247,
        60,44,116,24,60,13,117,4,205,225,116,16,139,30,233,4,138,200,176,18,232,221,253,205,226,233,195,193,91,198,7,0,187,246,1,
        138,194,44,32,116,7,181,0,232,102,224,91,195,232,55,213,159,80,232,42,201,88,158,159,80,115,3,232,196,35,88,158,114,3,232,
        196,35,91,195,10,192,116,251,136,7,67,254,205,117,244,89,235,197,232,70,0,162,96,0,254,192,116,3,233,158,193,83,81,178,2,
        232,198,250,91,232,59,252,50,192,162,96,0,233,26,252,232,38,0,10,192,116,7,254,192,117,3,233,125,193,254,200,162,96,0,83,
        81,50,192,178,1,232,158,250,91,232,46,252,50,192,162,96,0,91,233,204,250,232,180,248,82,75,232,185,200,90,117,3,176,1,195,
        82,232,134,231,44,232,43,0,82,75,232,166,200,117,5,89,90,50,192,195,232,115,231,44,232,24,0,89,135,218,3,217,137,30,4,7,135,
        218,75,232,137,200,116,3,233,37,193,90,176,255,195,232,135,208,83,232,17,220,90,135,218,195,185,11,13,139,30,48,0,135,218,
        139,30,88,3,59,218,117,1,195,187,23,98,138,195,2,193,138,216,138,199,20,0,138,248,139,242,172,42,197,46,50,7,80,187,118,97,
        138,195,2,197,138,216,138,199,20,0,138,248,88,46,50,7,2,193,139,250,170,66,254,201,117,2,177,11,254,205,117,188,181,13,235,
        184,185,11,13,139,30,48,0,135,218,139,30,88,3,59,218,116,175,187,118,97,138,195,2,197,138,216,138,199,20,0,138,248,139,242,
        172,42,193,46,50,7,80,187,23,98,138,195,2,193,138,216,138,199,20,0,138,248,88,46,50,7,2,197,139,250,170,66,254,201,117,2,
        177,11,254,205,117,189,181,13,235,185,83,139,30,46,0,138,199,34,195,91,254,192,116,1,195,159,80,160,100,4,10,192,116,3,233,
        245,200,88,158,195,138,7,60,64,117,3,232,173,199,185,0,0,138,245,138,209,60,234,116,31,138,7,60,207,156,117,3,232,152,199,
        232,108,230,40,232,126,215,82,232,100,230,44,232,118,215,232,93,230,41,89,157,83,139,30,61,5,116,3,187,0,0,159,3,217,209,
        222,158,209,214,137,30,61,5,137,30,55,5,139,203,139,30,59,5,116,3,187,0,0,3,218,137,30,59,5,137,30,57,5,135,218,91,195,50,
        192,235,2,176,3,80,232,164,255,88,232,46,0,83,232,40,3,115,6,232,127,2,232,85,2,91,195,232,49,199,232,140,255,83,232,20,3,
        187,255,255,115,10,232,104,2,232,27,2,138,216,183,0,232,7,29,91,195,176,3,81,82,138,208,75,232,12,199,116,11,232,222,229,
        44,60,44,116,3,232,254,214,138,194,83,232,193,2,115,3,233,48,200,91,90,89,233,239,198,139,30,55,5,138,195,42,193,138,216,
        138,199,26,197,138,248,115,197,50,192,42,195,138,216,26,199,42,195,138,248,249,195,139,30,57,5,138,195,42,194,138,216,138,
        199,26,198,138,248,235,222,83,139,30,57,5,135,218,137,30,57,5,91,195,232,240,255,83,81,139,30,55,5,94,135,222,86,137,30,55,
        5,89,91,195,232,226,254,81,82,232,106,229,234,232,237,254,232,118,255,90,89,116,83,232,92,229,44,232,88,229,66,117,3,233,
        96,0,232,79,229,70,83,232,93,2,232,193,255,232,87,2,232,156,255,115,3,232,169,255,67,83,232,114,255,115,3,232,175,255,67,
        83,232,156,1,90,89,82,81,232,219,0,80,83,135,218,232,105,2,91,88,232,215,0,232,248,0,89,90,73,138,197,10,193,117,227,91,195,
        81,82,83,232,69,0,139,30,61,5,137,30,55,5,139,30,59,5,137,30,57,5,91,90,89,195,83,139,30,57,5,83,82,135,218,232,218,255,91,
        137,30,57,5,135,218,232,208,255,91,137,30,57,5,139,30,55,5,81,139,203,232,193,255,91,137,30,55,5,139,203,232,183,255,91,195,
        205,184,232,207,1,232,51,255,232,201,1,232,14,255,115,3,232,40,255,82,83,232,228,254,135,218,187,241,73,115,3,187,5,74,94,
        135,222,86,59,218,115,20,137,30,253,6,91,137,30,247,6,187,213,73,137,30,249,6,135,218,235,22,94,135,222,86,137,30,249,6,187,
        213,73,137,30,247,6,135,218,137,30,253,6,91,90,83,137,30,251,6,232,211,0,90,82,232,5,0,89,65,233,32,2,138,198,10,192,208,
        216,138,240,138,194,208,216,138,208,195,139,30,243,6,160,245,6,195,137,30,243,6,162,245,6,195,139,30,243,6,129,251,0,32,114,
        9,129,235,0,32,137,30,243,6,195,129,195,80,32,137,30,243,6,195,139,30,243,6,129,251,0,32,114,9,129,235,176,31,137,30,243,
        6,195,129,195,0,32,137,30,243,6,195,138,193,138,14,85,0,210,14,245,6,138,200,114,1,195,255,6,243,6,195,138,193,138,14,85,
        0,210,6,245,6,138,200,114,1,195,255,14,243,6,195,140,198,191,0,184,142,199,139,30,243,6,38,138,7,138,22,245,6,34,194,138,
        14,85,0,210,234,114,4,210,232,235,248,142,198,195,140,198,191,0,184,142,199,139,30,243,6,139,233,160,245,6,246,208,38,34,
        7,138,14,246,6,34,14,245,6,10,193,38,136,7,139,205,142,198,195,139,233,209,234,159,139,218,177,2,211,226,3,211,177,4,211,
        226,158,115,4,129,194,0,32,137,22,243,6,139,213,138,202,246,6,85,0,1,116,20,176,7,34,200,176,128,210,232,162,245,6,177,3,
        211,234,1,22,243,6,195,176,3,34,200,2,201,176,192,210,232,162,245,6,177,2,211,234,1,22,243,6,195,160,72,0,199,6,59,5,100,
        0,60,6,116,18,115,28,60,4,114,24,198,6,85,0,2,199,6,61,5,160,0,195,198,6,85,0,1,199,6,61,5,64,1,195,198,6,85,0,0,195,60,4,
        115,15,246,6,85,0,1,116,12,36,1,246,216,162,246,6,248,195,233,93,197,36,3,177,85,246,225,162,246,6,248,195,160,85,0,10,192,
        116,235,10,237,120,39,187,128,2,132,6,1,0,116,3,187,64,1,59,203,159,114,3,75,139,203,10,246,120,12,129,250,200,0,114,4,186,
        199,0,195,158,195,51,210,195,51,201,159,235,232,140,198,191,0,184,142,199,139,211,11,210,116,108,139,30,243,6,38,138,47,160,
        245,6,138,224,246,208,138,14,85,0,138,30,246,6,34,232,138,252,34,251,10,239,74,116,64,210,200,210,204,115,239,139,30,243,
        6,38,136,47,255,6,243,6,136,38,245,6,139,202,209,233,209,233,246,6,85,0,1,117,6,129,226,3,0,235,6,129,226,7,0,209,233,227,
        171,252,160,246,6,139,62,243,6,243,170,137,62,243,6,235,155,139,30,243,6,38,136,47,136,38,245,6,142,198,195,232,127,254,3,
        22,253,6,59,22,251,6,114,9,43,22,251,6,62,255,22,249,6,62,255,22,247,6,226,227,195,83,232,163,207,91,195,83,232,39,25,91,
        195,246,128,62,113,0,0,116,3,233,249,4,195,160,41,0,138,208,232,255,210,233,237,4,0,0,0,180,15,205,16,162,72,0,180,40,60,
        2,114,13,180,80,60,7,117,7,185,12,11,137,14,104,0,136,38,41,0,250,140,219,137,30,80,3,30,186,0,0,142,218,137,30,16,5,187,
        52,77,137,30,108,0,187,68,87,137,30,112,0,140,14,110,0,140,14,114,0,31,232,50,0,187,24,2,185,0,0,142,193,185,122,0,38,140,
        143,2,0,38,199,7,148,76,131,195,4,224,241,140,219,142,195,232,72,225,251,180,1,205,23,232,119,6,187,155,76,232,223,46,233,
        99,50,190,237,76,187,83,6,185,10,0,83,252,46,172,136,7,67,10,192,117,246,91,131,195,16,224,239,195,207,62,255,46,0,7,203,
        84,104,101,32,73,66,77,32,80,101,114,115,111,110,97,108,32,67,111,109,112,117,116,101,114,32,66,97,115,105,99,255,13,86,101,
        114,115,105,111,110,32,67,49,46,49,48,32,67,111,112,121,114,105,103,104,116,32,73,66,77,32,67,111,114,112,32,49,57,56,49,
        255,13,0,50,53,45,65,112,114,45,56,49,76,73,83,84,32,0,82,85,78,13,0,76,79,65,68,34,0,83,65,86,69,34,0,67,79,78,84,13,0,44,
        34,76,80,84,49,58,34,13,0,84,82,79,78,13,0,84,82,79,70,70,13,0,75,69,89,32,0,83,67,82,69,69,78,32,48,44,48,44,48,13,0,156,
        80,30,82,186,0,0,142,218,142,30,16,5,232,58,10,136,22,106,0,254,202,136,22,94,0,90,31,88,157,207,86,160,94,0,10,192,117,17,
        160,106,0,10,192,117,10,180,1,205,22,176,0,116,2,254,200,94,195,160,94,0,10,192,116,8,50,192,162,94,0,176,3,195,86,87,160,
        106,0,10,192,117,116,180,0,205,22,10,192,116,3,95,94,195,83,128,252,59,114,5,128,252,69,114,60,139,30,46,0,67,11,219,117,
        19,187,52,78,177,26,46,58,39,116,12,67,254,192,254,201,117,244,50,192,91,235,211,50,228,208,224,139,216,46,139,159,3,1,137,
        30,107,0,254,14,106,0,208,232,4,65,140,14,109,0,235,224,80,134,196,44,59,179,16,246,227,187,83,6,3,216,246,7,255,88,116,204,
        137,30,107,0,140,30,109,0,254,14,106,0,235,12,83,254,200,117,7,162,106,0,176,32,235,178,30,197,30,107,0,138,7,31,255,6,107,
        0,10,192,116,2,121,160,50,228,140,203,138,30,110,0,58,223,114,4,254,196,36,127,136,38,106,0,10,192,117,136,91,233,119,17,
        30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,83,81,86,190,108,78,177,14,252,46,172,58,224,
        116,9,70,254,201,117,244,50,192,235,2,46,172,94,89,91,195,71,11,72,30,75,29,77,28,80,31,28,10,116,6,115,2,118,1,82,18,83,
        127,79,14,117,5,119,12,31,30,29,28,13,12,11,10,156,83,81,82,80,60,7,116,77,60,13,117,10,246,6,111,0,255,116,3,232,139,0,232,
        44,2,116,4,60,255,116,57,60,12,116,34,187,135,78,185,8,0,67,254,201,120,28,46,58,7,117,246,208,225,139,217,185,233,78,81,
        46,255,183,225,47,139,30,86,0,195,232,14,4,235,14,232,62,0,232,14,0,232,13,225,235,3,232,36,9,88,90,89,91,157,195,80,138,
        62,73,0,138,30,78,0,185,1,0,180,9,205,16,88,195,83,232,113,0,232,231,255,91,195,83,232,104,0,180,8,205,16,91,195,232,243,
        255,138,232,138,204,195,139,30,86,0,137,30,86,0,156,83,232,77,0,91,157,195,160,87,0,254,200,195,80,138,14,41,0,42,14,87,0,
        254,193,181,0,138,62,73,0,138,30,79,0,176,32,180,9,205,16,139,22,86,0,134,242,254,206,254,202,180,2,205,16,88,195,83,232,
        21,0,138,62,73,0,138,30,79,0,138,14,41,0,181,0,176,32,180,9,205,16,91,80,82,139,211,134,242,254,206,254,202,138,62,73,0,180,
        2,205,16,90,88,195,83,82,177,0,138,239,138,243,232,27,0,180,6,205,16,235,15,83,82,177,0,138,235,138,247,232,10,0,180,7,205,
        16,232,28,0,90,91,195,232,17,0,138,22,41,0,254,202,254,206,254,205,176,1,138,62,79,0,195,160,73,0,235,3,160,74,0,232,6,1,
        117,32,138,38,72,0,128,252,7,116,23,82,186,0,8,128,252,2,114,2,208,230,50,228,247,226,30,142,218,163,78,4,31,90,195,156,83,
        82,80,186,0,0,180,0,205,23,138,196,128,228,40,128,252,40,116,13,246,196,8,117,12,168,1,116,13,178,24,235,6,178,27,235,2,178,
        25,233,186,183,88,80,60,13,233,93,15,88,90,91,157,195,60,147,116,96,60,149,116,70,60,221,116,70,232,227,206,10,192,116,56,
        254,200,60,10,115,50,186,16,0,246,226,138,208,129,194,83,6,82,232,162,221,44,232,209,198,83,232,76,216,138,15,128,249,15,
        114,2,177,15,67,139,55,91,95,83,181,0,252,243,164,136,45,232,114,251,91,195,233,225,191,176,255,235,2,176,0,58,6,113,0,162,
        113,0,116,3,232,94,0,232,144,190,195,83,190,83,6,185,10,0,254,197,86,176,70,232,8,219,81,138,221,183,0,232,171,20,176,32,
        232,251,218,89,94,86,81,252,172,10,192,116,5,232,19,0,235,245,176,13,232,231,218,89,94,131,198,16,254,201,117,206,91,235,
        192,86,60,13,117,2,176,27,232,209,218,94,195,80,160,72,0,60,7,116,4,60,4,115,2,50,192,10,192,88,195,83,205,173,182,24,178,
        0,138,62,73,0,180,2,205,16,160,113,0,10,192,117,19,138,30,79,0,138,14,41,0,181,0,180,9,205,16,232,13,254,91,195,179,7,232,
        192,255,117,9,160,76,0,10,192,117,2,179,112,190,83,6,181,5,160,41,0,60,40,176,49,116,2,181,10,80,83,138,30,78,0,232,55,0,
        91,86,177,6,81,252,172,10,192,156,86,117,2,50,192,232,37,0,94,157,117,1,78,89,254,201,117,232,232,22,0,94,131,198,16,88,254,
        192,60,58,114,2,176,48,254,205,117,199,232,175,253,91,195,50,192,83,10,192,117,6,176,32,138,30,79,0,60,13,117,2,176,27,81,
        185,1,0,180,9,205,16,254,194,180,2,205,16,89,91,195,138,14,73,0,181,0,138,38,72,0,246,196,1,116,3,128,205,128,128,252,4,114,
        9,254,197,128,252,6,114,2,254,197,81,60,44,116,12,232,97,205,89,138,232,81,232,92,189,116,64,232,45,220,44,60,44,116,21,232,
        77,205,10,192,116,2,176,128,89,128,229,3,10,232,81,232,63,189,116,35,232,16,220,44,60,44,116,12,232,48,205,89,138,200,81,
        232,43,189,116,15,232,252,219,44,232,32,205,138,240,89,235,6,233,85,190,89,138,241,138,38,41,0,138,197,36,127,10,192,116,
        10,50,210,10,214,10,209,117,230,235,27,128,252,40,116,12,128,254,4,115,218,128,249,4,114,12,235,211,128,254,8,115,206,128,
        249,8,115,201,138,209,10,192,116,32,128,62,72,0,7,116,92,177,6,60,2,180,80,116,42,180,40,254,201,254,200,117,172,246,197,
        128,117,29,254,201,235,25,177,2,128,252,40,116,9,246,197,128,116,13,254,193,235,9,254,201,246,197,128,117,2,254,201,136,38,
        41,0,161,72,0,136,14,72,0,137,22,73,0,58,193,116,26,184,7,0,163,75,0,134,196,163,77,0,136,38,79,0,232,58,254,116,3,162,79,
        0,232,110,0,160,74,0,180,5,205,16,195,58,6,41,0,116,52,138,38,72,0,60,80,116,7,60,40,116,3,233,152,189,128,252,7,117,4,176,
        80,235,28,128,244,2,128,252,7,117,2,254,204,80,162,41,0,136,38,72,0,199,6,73,0,0,0,232,45,0,88,195,83,232,218,252,178,39,
        128,62,41,0,40,116,2,178,79,182,24,138,62,79,0,185,0,0,138,193,180,6,205,16,186,0,0,138,62,73,0,180,2,205,16,235,15,83,185,
        0,0,137,14,73,0,160,72,0,180,0,205,16,232,189,221,232,201,248,232,138,247,232,157,252,91,195,232,164,253,116,91,177,0,190,
        81,0,128,62,72,0,6,117,3,233,22,189,138,44,86,81,232,212,187,116,64,60,44,116,7,232,201,203,89,138,232,81,89,81,83,138,249,
        138,221,128,255,0,117,8,128,251,8,114,3,128,203,16,180,11,205,16,91,232,171,187,116,3,232,165,187,89,94,136,44,116,8,70,254,
        193,128,249,4,114,189,198,6,79,0,0,195,89,94,195,255,54,77,0,255,54,75,0,60,44,116,16,232,126,203,60,32,115,24,89,138,200,
        81,232,117,187,116,44,232,70,218,44,60,44,116,19,232,102,203,60,16,114,3,233,156,188,89,138,232,81,232,90,187,116,17,232,
        43,218,44,232,79,203,60,16,115,233,89,90,138,208,82,81,89,90,138,241,128,230,15,137,14,75,0,138,197,208,224,36,16,10,194,
        128,229,7,208,229,208,229,208,229,208,229,246,193,16,116,3,128,205,128,10,238,83,138,216,183,0,36,15,162,77,0,136,46,78,0,
        136,46,79,0,180,11,205,16,91,195,255,54,86,0,60,44,116,32,232,250,202,10,192,116,91,60,26,115,87,138,38,113,0,10,228,116,
        4,60,25,115,75,90,138,208,82,232,225,186,116,123,232,178,217,44,60,44,116,24,232,210,202,10,192,116,51,138,38,41,0,58,224,
        114,43,90,138,240,82,232,193,186,116,91,255,54,104,0,232,142,217,44,60,44,116,25,232,174,202,10,192,176,0,117,2,176,32,89,
        10,232,81,232,161,186,116,45,235,3,233,213,187,232,109,217,44,232,145,202,60,32,115,242,89,128,229,32,10,232,138,200,81,232,
        131,186,116,15,232,84,217,44,232,120,202,60,32,115,217,89,138,200,81,89,81,128,229,15,137,14,104,0,89,180,1,205,16,90,137,
        22,86,0,134,242,254,206,254,202,83,138,62,73,0,180,2,205,16,91,195,80,176,0,235,3,80,176,32,156,81,83,80,232,61,250,88,91,
        139,14,104,0,246,6,114,0,255,116,2,181,4,10,232,180,1,205,16,89,157,88,195,0,0,0,0,255,255,255,255,255,255,255,255,255,255,
        255,255,80,156,232,201,251,116,75,83,81,82,140,198,191,0,0,142,199,38,255,54,124,0,38,255,54,126,0,38,199,6,124,0,248,84,
        38,140,14,126,0,142,198,176,129,2,6,114,0,179,131,138,62,73,0,185,1,0,180,9,205,16,140,198,191,0,0,142,199,38,143,6,126,0,
        38,143,6,124,0,142,198,90,89,91,157,88,195,232,189,185,160,86,0,233,114,246,232,180,185,232,101,0,10,238,117,86,10,234,10,
        233,116,80,138,38,41,0,58,226,114,72,128,249,26,115,67,160,113,0,10,192,116,5,128,249,25,115,55,83,138,241,254,206,254,202,
        138,62,73,0,180,2,205,16,180,8,205,16,91,80,232,119,185,60,44,116,4,176,0,235,7,232,66,216,44,232,102,201,80,232,58,216,41,
        88,10,192,88,116,2,138,196,233,18,246,233,144,186,232,5,0,232,37,216,41,195,232,32,216,40,232,50,201,82,232,24,216,44,232,
        42,201,89,195,232,56,185,60,149,116,8,232,8,216,221,50,192,235,5,232,41,185,176,255,162,52,0,195,160,52,0,10,192,116,48,232,
        27,201,60,10,115,41,83,86,186,26,86,82,50,228,209,224,139,240,46,255,180,29,86,195,94,91,195,52,86,63,86,70,86,76,86,107,
        86,114,86,120,86,128,86,136,86,144,86,233,37,186,187,53,0,138,7,198,7,0,233,159,245,139,30,55,0,233,198,14,160,57,0,233,140,
        245,180,4,205,16,80,10,228,116,12,137,30,58,0,136,46,60,0,137,22,63,0,88,138,196,254,200,246,208,233,115,245,139,30,58,0,
        233,154,14,160,60,0,233,96,245,160,62,0,254,192,233,88,245,160,61,0,254,192,233,80,245,160,64,0,254,192,233,72,245,160,63,
        0,254,192,233,64,245,232,132,200,10,192,116,18,60,4,115,84,180,0,83,187,65,0,3,216,138,7,91,233,39,245,83,186,1,2,185,1,1,
        187,15,0,250,238,236,36,15,58,195,225,249,227,11,50,195,138,225,80,254,199,50,216,235,236,10,255,116,26,138,215,187,65,0,
        185,4,0,88,246,212,2,226,208,232,115,2,136,39,67,226,247,254,202,117,232,251,91,160,65,0,233,225,244,233,95,185,232,32,184,
        60,149,116,8,232,240,214,221,50,192,235,5,232,17,184,176,255,162,69,0,195,160,69,0,10,192,116,222,232,3,200,60,4,115,215,
        168,1,116,14,180,16,254,200,116,2,180,64,232,208,0,233,172,244,83,187,70,0,10,192,116,1,67,138,7,198,7,0,91,233,154,244,156,
        80,85,86,87,30,186,0,0,142,218,142,30,16,5,161,102,0,10,196,116,9,255,14,102,0,117,3,232,39,0,160,52,0,10,192,116,3,232,54,
        0,160,69,0,10,192,116,3,232,105,0,31,95,94,93,88,157,207,198,6,101,0,0,161,102,0,11,192,116,24,82,250,246,6,101,0,255,117,
        7,186,97,0,236,36,252,238,199,6,102,0,0,0,251,90,195,83,81,82,180,4,205,16,80,10,228,116,12,137,30,58,0,136,46,60,0,137,22,
        63,0,88,160,54,0,50,196,116,25,10,228,136,38,54,0,116,17,137,30,55,0,136,46,57,0,137,22,61,0,176,255,162,53,0,90,89,91,195,
        83,187,70,0,128,63,0,117,7,180,16,232,17,0,136,7,67,128,63,0,117,7,180,64,232,4,0,136,7,91,195,82,186,1,2,236,34,196,254,
        200,152,138,196,90,195,232,9,0,184,211,5,186,4,0,82,235,56,139,22,102,0,10,242,116,7,198,6,101,0,255,235,241,195,232,222,
        198,131,250,37,114,18,82,232,191,213,44,232,113,202,89,82,11,210,117,7,90,233,59,255,233,19,184,232,208,255,186,18,0,184,
        220,52,247,241,246,6,101,0,255,117,8,80,186,67,0,176,182,238,88,186,66,0,238,138,196,238,117,7,186,97,0,236,12,3,238,90,137,
        22,102,0,198,6,101,0,0,195,10,90,77,65,89,16,89,16,25,90,89,16,89,16,89,16,89,16,45,90,89,16,52,90,77,65,89,16,69,90,89,16,
        89,16,89,16,89,16,89,16,89,16,93,90,99,90,77,65,89,16,124,90,89,16,89,16,89,16,89,16,89,16,89,16,170,90,177,90,110,91,89,
        16,171,91,240,91,89,16,89,16,108,92,89,16,118,92,89,16,34,194,117,34,156,80,83,137,30,233,4,136,23,131,195,45,198,7,0,67,
        67,136,47,67,198,7,0,67,136,15,67,198,7,0,91,88,157,195,233,152,174,88,91,195,128,250,128,117,2,178,2,195,88,134,196,158,
        89,90,91,195,90,91,89,195,131,195,46,138,7,246,208,195,139,30,233,4,131,195,43,195,139,30,233,4,131,195,50,195,139,30,233,
        4,138,135,47,0,195,86,87,81,198,6,63,5,165,190,240,4,191,64,5,185,8,0,252,164,226,253,89,95,94,195,83,81,187,64,5,177,8,128,
        63,32,117,13,67,254,201,117,246,190,92,5,191,72,5,235,16,190,84,5,191,64,5,177,8,252,166,117,39,254,201,117,249,138,5,58,
        4,116,9,10,192,117,25,246,4,1,117,20,138,4,139,30,233,4,136,135,49,0,187,244,89,232,14,0,50,192,235,7,187,254,89,232,4,0,
        249,89,91,195,83,139,30,46,0,67,11,219,116,2,91,195,187,83,5,83,67,177,8,138,7,232,213,244,67,254,201,117,246,176,46,232,
        203,244,91,131,195,9,176,68,246,7,225,116,23,176,80,246,7,32,117,16,176,66,246,7,128,117,9,176,65,246,7,64,117,2,176,77,91,
        232,165,244,46,138,7,67,10,192,117,245,195,32,70,111,117,110,100,46,255,13,0,32,83,107,105,112,112,101,100,46,255,13,0,185,
        0,0,136,14,82,5,176,234,232,189,254,233,227,254,187,82,5,138,7,198,7,0,10,192,117,5,232,70,243,10,192,233,226,254,136,14,
        82,5,233,163,235,232,200,254,138,46,41,0,177,0,176,237,232,145,254,233,183,254,88,80,134,196,232,68,244,138,14,87,0,254,201,
        139,30,233,4,136,143,50,0,233,170,254,88,134,196,233,73,248,138,46,98,0,177,0,232,147,254,176,109,232,98,254,232,175,254,
        160,99,0,136,7,233,128,254,88,80,134,196,232,3,0,233,129,254,232,106,245,187,99,0,60,13,117,3,233,228,4,60,32,115,1,195,254,
        7,83,232,141,254,91,254,192,116,244,254,200,56,7,233,197,4,88,134,196,162,98,0,195,160,97,0,10,192,116,3,233,232,172,128,
        226,251,117,2,178,1,162,81,5,254,192,162,80,5,138,202,128,225,128,128,233,1,245,26,201,128,225,128,246,194,16,116,3,128,201,
        32,160,96,0,10,192,116,2,177,1,10,201,117,9,246,6,95,0,255,116,2,177,64,136,14,72,5,181,255,176,104,232,210,253,138,39,232,
        46,254,246,196,1,117,12,246,193,129,117,3,232,47,0,176,255,235,31,232,51,0,232,48,254,114,248,139,30,233,4,246,135,49,0,129,
        117,10,232,17,1,115,5,198,6,80,5,0,176,1,162,97,0,232,231,253,198,7,1,233,186,253,187,63,5,185,17,0,180,3,205,21,195,187,
        83,5,185,17,0,83,180,2,205,21,115,3,233,2,1,91,160,94,0,10,192,117,6,128,63,165,117,230,195,233,41,172,160,97,0,254,192,116,
        11,50,192,162,97,0,162,96,0,233,205,229,139,30,233,4,246,135,49,0,129,117,234,232,59,0,232,31,1,235,226,83,187,97,0,56,39,
        117,13,139,30,233,4,246,135,49,0,129,91,117,1,195,233,233,171,180,255,232,227,255,88,80,134,196,232,3,0,233,77,253,232,38,
        0,136,7,254,193,116,11,232,93,253,136,15,195,232,87,253,138,15,187,83,5,181,0,254,201,65,136,15,180,3,205,21,232,68,253,198,
        7,1,195,232,61,253,138,15,181,0,187,83,5,3,217,195,180,1,232,158,255,232,3,0,233,20,253,160,80,5,44,1,115,1,195,187,81,5,
        138,7,198,7,0,10,192,116,1,195,232,10,0,115,7,198,6,80,5,0,10,192,195,232,195,255,138,7,254,193,232,252,252,136,15,232,239,
        252,58,15,116,3,10,192,195,128,63,0,117,221,80,232,2,0,88,195,187,83,5,185,0,1,180,2,205,21,114,21,160,83,5,232,203,252,136,
        7,232,206,252,198,7,1,254,200,249,116,1,248,195,128,252,4,117,5,178,24,233,111,171,233,37,171,160,80,5,44,1,26,192,233,147,
        8,136,14,81,5,233,90,233,198,6,95,0,0,83,137,30,77,5,139,22,80,3,137,22,75,5,139,14,4,7,43,203,137,14,73,5,81,82,232,164,
        254,90,89,91,160,96,0,10,192,6,116,2,142,194,180,3,205,21,7,232,137,0,186,5,0,185,0,0,73,117,253,74,117,250,232,118,0,195,
        190,83,5,139,140,10,0,160,96,0,10,192,156,81,117,13,80,83,81,86,3,217,232,22,230,94,89,91,88,60,1,117,4,139,156,14,0,6,10,
        192,116,14,139,148,12,0,254,200,116,4,139,22,80,3,142,194,180,2,205,21,7,114,18,89,157,117,11,139,30,48,0,3,217,67,137,30,
        88,3,233,128,229,80,232,5,208,88,128,252,4,117,5,178,24,233,181,170,233,107,170,75,232,243,177,117,5,160,100,0,235,3,232,
        232,193,10,192,117,4,176,1,235,2,176,0,162,100,0,138,224,205,21,195,205,219,249,235,1,248,139,243,156,139,14,165,4,138,195,
        50,193,162,167,4,138,199,50,228,138,221,50,255,157,115,7,3,195,45,1,1,235,2,43,195,10,228,120,13,61,128,0,114,21,139,222,
        131,196,2,233,93,23,5,128,0,121,11,139,222,131,196,2,233,223,29,5,128,0,162,166,4,187,165,4,128,15,128,139,222,50,255,128,
        203,128,195,198,6,57,3,128,232,198,217,83,139,218,232,234,6,232,4,197,137,30,94,4,177,32,232,27,207,91,232,96,177,116,23,
        232,49,208,40,232,167,217,82,138,7,60,44,117,5,232,76,177,235,241,232,30,208,41,137,30,59,3,14,184,233,93,80,255,54,80,3,
        255,54,94,4,203,139,30,59,3,195,83,232,14,5,60,108,116,10,60,76,116,6,60,113,116,2,60,81,91,195,38,38,38,38,38,38,38,38,38,
        38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,36,36,36,35,35,35,34,34,34,34,33,33,33,32,32,32,31,31,31,31,30,30,
        30,29,29,29,29,28,28,28,27,27,27,26,26,26,25,25,25,25,24,24,24,23,23,23,23,22,22,22,22,21,21,21,20,20,20,19,19,19,19,18,18,
        18,17,17,17,16,16,16,16,15,15,15,14,14,14,13,13,13,13,12,12,12,11,11,11,10,10,10,10,9,9,9,8,8,8,7,7,7,6,6,6,6,5,5,5,4,4,4,
        3,3,3,3,2,2,2,1,1,1,0,0,0,0,255,255,255,254,254,254,253,253,253,253,252,252,252,251,251,251,250,250,250,250,249,249,249,248,
        248,248,247,247,247,247,246,246,246,245,245,245,244,244,244,244,243,243,243,242,242,242,241,241,241,241,240,240,240,239,239,
        239,238,238,238,238,237,237,237,236,236,236,235,235,235,235,234,234,234,233,233,233,232,232,232,231,231,231,231,230,230,230,
        229,229,229,228,228,228,228,227,227,227,226,226,226,225,225,225,225,224,11,246,121,2,247,218,43,215,112,61,116,58,83,232,
        144,28,156,115,3,232,106,12,11,210,120,15,131,250,39,114,29,157,115,3,232,61,12,91,233,177,21,131,250,218,125,14,131,194,
        38,131,250,218,124,17,232,19,0,186,218,255,232,13,0,157,115,3,232,29,12,91,195,232,31,28,235,243,11,210,156,121,2,247,218,
        185,3,0,211,226,129,194,50,96,135,218,232,37,29,157,120,3,233,236,12,232,236,28,233,212,8,114,9,176,13,144,233,15,251,198,
        7,0,138,7,232,164,249,136,7,195,117,6,176,10,144,232,105,240,88,90,91,157,195,128,62,106,0,0,116,18,30,83,197,30,107,0,128,
        63,0,91,31,117,5,198,6,106,0,0,233,114,175,95,94,233,190,237,117,16,91,136,54,167,4,187,0,16,198,6,251,2,4,233,40,21,199,
        6,165,4,0,0,195,16,91,136,54,167,4,187,0,16,198,6,251,2,4,233,16,21,199,6,165,4,0,0,195,92,214,237,189,206,254,230,91,95,
        166,180,54,65,95,112,9,99,207,97,132,17,119,204,43,102,67,122,229,213,148,191,86,105,106,108,175,5,189,55,6,109,133,71,27,
        71,172,197,39,112,102,25,226,88,23,183,81,115,224,79,141,151,110,18,3,119,216,163,112,61,10,215,35,122,205,204,204,204,204,
        204,76,125,0,0,0,0,0,0,0,129,0,0,0,0,0,0,32,132,0,0,0,0,0,0,72,135,0,0,0,0,0,0,122,138,0,0,0,0,0,64,28,142,0,0,0,0,0,80,67,
        145,0,0,0,0,0,36,116,148,0,0,0,0,128,150,24,152,0,0,0,0,32,188,62,155,0,0,0,0,40,107,110,158,0,0,0,0,249,2,21,162,0,0,0,64,
        183,67,58,165,0,0,0,16,165,212,104,168,0,0,0,42,231,132,17,172,0,0,128,244,32,230,53,175,0,0,160,49,169,95,99,178,0,0,4,191,
        201,27,14,182,0,0,197,46,188,162,49,185,0,64,118,58,107,11,94,188,0,232,137,4,35,199,10,192,0,98,172,197,235,120,45,195,128,
        122,23,183,38,215,88,198,144,172,110,50,120,134,7,202,181,87,10,63,22,104,41,205,162,237,204,206,27,194,83,208,133,20,64,
        97,81,89,4,212,166,25,144,185,165,111,37,215,16,32,244,39,143,203,78,218,10,148,248,120,57,63,1,222,12,185,54,215,7,143,33,
        225,79,103,4,205,201,242,73,228,35,129,69,64,124,111,124,231,182,112,43,168,173,197,29,235,228,76,54,18,25,55,69,238,28,224,
        195,86,223,132,118,241,18,108,58,150,11,19,26,245,22,7,201,123,206,151,64,248,220,72,187,26,194,189,112,251,137,13,181,80,
        153,118,22,255,0,0,0,0,0,0,0,128,241,4,53,128,4,154,247,25,131,36,99,67,131,117,205,141,132,169,127,131,130,4,0,0,0,129,226,
        176,77,131,10,114,17,131,244,4,53,127,24,114,49,128,46,101,69,37,35,33,68,100,44,48,0,128,198,164,126,141,3,0,64,122,16,243,
        90,0,0,160,114,78,24,9,0,0,16,165,212,232,0,0,0,232,118,72,23,0,0,0,228,11,84,2,0,0,0,202,154,59,0,0,0,0,225,245,5,0,0,0,
        128,150,152,0,0,0,0,64,66,15,0,0,0,0,64,66,15,160,134,1,16,39,0,16,39,232,3,100,0,10,0,1,0,0,0,128,144,255,255,255,255,255,
        255,127,255,255,255,255,255,255,255,255,255,59,170,56,129,7,124,136,89,116,224,151,38,119,196,29,30,122,94,80,99,124,26,254,
        117,126,24,114,49,128,0,0,0,129,5,251,215,30,134,101,38,153,135,88,52,35,135,225,93,165,134,219,15,73,131,2,215,179,93,129,
        0,0,128,129,4,98,53,131,126,80,36,76,126,121,169,170,127,0,0,0,129,11,68,78,110,131,249,34,126,253,67,3,195,158,38,1,0,0,
        48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,186,59,170,187,56,129,232,114,10,160,166,4,60,136,115,60,60,104,114,75,255,
        54,163,4,255,54,165,4,232,96,16,138,226,128,196,129,116,35,80,246,6,167,4,128,232,67,16,50,228,232,230,17,88,91,90,80,232,
        168,4,187,23,98,232,141,18,91,51,210,138,218,233,50,10,131,196,4,128,38,165,4,128,116,3,233,145,24,50,228,136,38,167,4,233,
        249,17,191,163,4,144,51,192,252,171,199,5,0,129,195,232,175,24,117,3,233,222,164,195,252,171,199,5,0,129,195,233,26,172,205,
        185,128,54,165,4,128,128,54,177,4,128,233,138,3,205,186,135,217,233,90,4,205,187,135,217,233,71,4,205,188,232,51,25,233,27,
        5,135,217,233,177,5,205,189,137,30,163,4,233,107,8,205,190,82,152,139,208,232,238,8,90,195,205,191,135,217,233,183,9,205,
        192,135,217,233,237,13,129,251,0,128,117,19,205,193,232,211,8,51,210,187,128,144,232,5,4,232,75,26,233,69,8,247,219,83,3,
        218,112,4,88,233,153,1,205,194,232,181,8,90,255,54,163,4,255,54,165,4,232,169,8,91,90,233,234,3,139,195,82,247,234,90,114,
        5,139,216,233,118,1,205,195,83,232,145,8,90,255,54,163,4,255,54,165,4,232,133,8,91,90,233,82,9,11,219,117,12,136,54,167,4,
        198,6,251,2,4,233,45,17,137,30,163,4,184,0,0,163,165,4,146,11,192,121,3,186,255,255,11,219,121,6,199,6,165,4,255,255,247,
        62,163,4,139,216,233,42,1,135,217,232,215,24,135,217,195,83,232,69,26,91,131,195,4,195,139,22,163,4,139,14,165,4,195,156,
        83,232,25,26,91,131,195,4,157,195,232,171,190,137,30,163,4,233,103,10,232,161,190,137,30,163,4,233,101,10,205,196,139,23,
        139,159,2,0,233,77,3,94,255,54,163,4,255,54,165,4,255,230,205,197,135,217,232,160,24,135,217,195,232,100,23,116,3,233,147,
        163,195,135,218,232,205,0,50,192,181,152,205,198,187,166,4,138,200,136,47,181,0,67,136,47,208,208,205,199,115,3,232,32,1,
        138,229,138,217,233,51,16,232,146,254,83,51,219,137,30,163,4,183,129,137,30,165,4,198,6,251,2,4,232,4,20,91,198,6,251,2,4,
        195,139,193,247,226,146,115,3,233,37,213,195,187,171,4,186,183,100,233,6,0,187,171,4,186,185,100,82,186,163,4,232,247,22,
        114,3,186,159,4,195,138,205,50,237,235,8,135,218,160,251,2,152,139,200,252,139,242,139,251,243,164,139,214,139,223,195,232,
        54,200,139,241,139,251,253,43,202,65,243,164,139,218,139,207,65,252,195,156,73,157,195,232,188,22,117,3,233,235,162,205,200,
        120,3,233,131,22,161,163,4,11,192,116,6,176,1,121,2,176,255,195,51,192,11,219,117,243,195,91,195,152,139,216,198,6,251,2,
        2,137,30,163,4,195,198,6,251,2,4,195,232,196,255,233,231,255,205,201,91,90,233,181,3,232,37,6,91,90,233,11,12,185,4,0,233,
        136,255,156,138,23,67,157,156,138,55,67,139,15,67,157,156,67,157,195,83,187,40,7,232,6,22,91,185,182,38,81,232,181,255,50,
        192,205,202,162,49,3,187,180,4,198,7,32,10,7,67,198,7,48,233,106,11,205,203,160,165,4,235,9,205,204,232,229,23,116,8,246,
        208,208,224,26,192,116,61,195,205,205,128,54,167,4,128,51,219,246,221,139,195,27,194,139,208,138,195,26,193,138,200,195,232,
        3,22,120,250,205,206,232,207,21,120,3,233,213,24,232,2,24,232,207,24,233,252,23,139,195,43,194,116,14,112,7,120,7,50,192,
        254,192,195,120,249,249,26,192,195,59,218,117,5,51,219,233,38,0,139,194,137,30,163,4,11,219,232,211,249,144,144,144,121,6,
        199,6,165,4,255,255,11,192,186,0,0,121,3,186,255,255,247,62,163,4,139,218,137,30,163,4,195,173,58,225,116,17,70,2,4,254,192,
        152,3,240,59,245,117,239,139,214,233,57,210,58,6,251,2,117,233,58,44,117,229,70,138,208,172,58,6,142,0,116,4,2,194,235,220,
        10,192,116,16,152,145,191,143,0,243,166,145,116,6,3,240,138,194,235,200,139,214,91,195,139,243,139,46,75,4,252,235,190,139,
        243,139,46,92,3,252,233,13,0,173,58,225,116,17,70,172,152,3,240,173,3,240,59,238,117,239,139,222,233,83,211,58,6,251,2,117,
        233,58,44,117,229,70,172,58,6,142,0,117,223,10,192,116,14,152,145,191,143,0,243,166,145,116,4,3,240,235,208,173,139,208,139,
        222,233,5,211,232,24,22,195,161,165,4,10,228,116,245,128,54,165,4,128,205,215,176,0,162,158,4,162,170,4,160,178,4,10,192,
        116,226,161,165,4,10,228,116,216,139,30,177,4,128,14,165,4,128,128,14,177,4,128,138,204,42,207,162,167,4,116,34,115,18,134,
        195,246,217,162,167,4,136,62,166,4,80,81,232,111,21,89,88,128,249,57,115,95,83,248,232,33,21,160,167,4,91,50,195,187,158,
        4,190,170,4,185,4,0,248,252,120,30,173,17,7,67,67,226,249,115,18,187,166,4,254,7,116,52,75,75,185,4,0,209,31,75,75,226,250,
        233,233,17,173,25,7,67,67,226,249,115,26,246,151,1,0,185,4,0,75,75,247,23,226,250,185,4,0,255,7,117,6,67,67,226,248,116,200,
        233,244,12,233,141,13,160,167,4,36,128,128,38,165,4,127,8,6,165,4,195,137,30,165,4,137,22,163,4,195,161,165,4,10,228,116,
        240,128,54,165,4,128,10,255,116,239,161,165,4,10,228,116,224,51,201,139,54,163,4,162,167,4,138,204,42,207,115,13,246,217,
        134,223,137,30,166,4,134,223,147,135,214,138,224,50,227,156,180,128,10,196,10,220,50,228,138,252,11,201,116,70,131,249,25,
        114,18,157,137,54,163,4,138,38,167,4,37,127,128,10,196,162,165,4,195,128,249,8,114,28,233,5,3,144,138,243,50,219,128,233,
        8,246,196,31,116,208,128,204,32,235,203,128,204,32,226,3,235,14,248,208,219,209,218,208,220,246,196,16,117,237,226,243,157,
        121,37,42,204,138,225,27,242,139,214,26,195,138,216,115,47,246,22,167,4,246,212,247,210,246,211,254,196,117,33,66,117,30,
        254,195,117,26,235,6,3,214,18,216,115,12,254,6,166,4,116,9,208,219,209,218,208,220,233,36,17,233,169,12,233,104,12,232,37,
        19,195,160,177,4,162,167,4,233,167,12,246,6,166,4,255,116,240,246,6,178,4,255,116,229,139,30,177,4,232,243,244,137,30,177,
        4,187,164,4,248,232,161,19,187,176,4,248,232,154,19,255,54,166,4,232,94,21,143,6,166,4,185,64,0,81,235,8,81,248,187,170,4,
        232,119,19,139,252,131,236,8,131,239,2,190,176,4,185,4,0,253,243,165,190,120,4,185,4,0,187,170,4,248,252,173,25,7,67,67,226,
        249,115,16,185,4,0,139,244,191,170,4,252,243,165,139,230,248,235,4,131,196,8,249,187,158,4,232,56,19,89,226,182,246,6,165,
        4,128,116,9,255,6,166,4,117,9,233,7,12,187,158,4,232,31,19,233,49,16,232,148,18,117,7,136,30,167,4,233,0,12,10,255,117,3,
        233,122,18,232,87,244,139,250,51,210,138,254,139,243,138,223,185,32,0,85,139,46,163,4,160,165,4,138,231,235,5,248,209,215,
        209,214,86,87,43,253,27,240,115,4,95,94,235,4,131,196,4,248,245,209,210,209,211,226,228,11,219,121,10,254,6,166,4,117,8,93,
        233,165,11,209,210,209,211,138,226,138,214,138,243,138,223,93,233,13,16,19,249,83,87,81,44,48,80,232,80,18,88,152,121,30,
        139,30,163,4,129,251,205,12,115,25,139,203,209,227,209,227,3,217,209,227,3,216,120,11,137,30,163,4,235,72,80,114,8,235,51,
        80,232,36,2,235,20,199,6,124,4,0,36,199,6,126,4,116,148,187,126,4,232,131,19,121,22,232,60,18,90,255,54,163,4,255,54,165,
        4,232,139,2,91,90,232,204,253,235,19,232,231,1,232,35,18,232,238,18,90,232,119,2,232,218,1,232,238,252,89,95,91,195,205,217,
        50,192,233,9,0,205,218,176,1,198,6,251,2,8,198,6,168,4,1,190,180,37,86,51,255,139,207,139,247,247,209,80,232,134,17,88,10,
        192,117,5,198,6,251,2,2,138,7,60,38,117,3,233,7,176,60,45,156,116,5,60,43,116,1,75,232,251,248,115,6,232,61,255,233,245,255,
        189,163,97,51,210,139,242,46,58,134,0,0,116,10,129,253,156,97,116,36,77,233,239,255,129,237,156,97,209,229,46,255,166,48,
        106,75,106,95,106,95,106,103,106,109,106,115,106,64,106,64,106,50,192,232,156,0,232,65,0,233,45,0,65,117,247,232,81,17,121,
        175,81,83,87,232,72,1,95,91,89,233,163,255,232,140,243,116,225,233,219,255,67,235,219,233,11,0,232,188,0,233,5,0,50,192,232,
        182,0,157,117,13,232,45,19,232,33,17,122,5,83,232,237,18,91,195,233,118,244,198,6,85,4,255,232,137,164,139,212,233,227,8,
        10,255,117,5,232,232,16,249,195,160,166,4,10,192,117,8,138,195,246,208,232,228,16,249,195,232,228,255,93,114,20,235,16,83,
        139,31,232,217,255,91,93,114,8,83,87,191,165,4,144,85,195,254,192,44,1,195,246,196,255,138,226,116,3,128,204,32,138,214,233,
        237,252,16,159,128,62,251,2,8,117,4,158,233,8,0,158,83,87,232,92,0,95,91,51,246,139,214,232,4,248,114,19,60,45,117,4,247,
        214,235,5,60,43,116,1,195,232,242,247,114,1,195,129,250,204,12,114,5,186,255,127,235,239,80,184,10,0,247,226,90,128,234,48,
        50,246,3,208,235,223,12,1,83,87,117,7,232,28,0,235,5,144,144,232,70,0,95,91,51,246,139,214,232,189,243,67,195,232,88,16,120,
        249,233,111,156,116,49,232,78,16,123,86,117,3,233,123,156,205,207,121,5,232,63,0,235,72,176,4,162,251,2,138,30,165,4,136,
        30,167,4,139,22,163,4,138,38,162,4,128,204,64,128,203,128,233,213,13,232,29,16,115,37,117,3,233,74,156,205,208,121,3,232,
        14,0,176,8,162,251,2,51,192,163,159,4,163,161,4,195,82,86,139,22,163,4,232,131,0,94,90,195,232,242,15,121,5,139,30,163,4,
        195,205,209,117,3,233,24,156,160,166,4,60,144,114,49,116,3,233,6,156,160,165,4,10,192,120,3,233,252,155,186,0,0,187,0,128,
        232,138,251,232,203,6,232,205,17,186,0,0,187,128,144,232,236,16,116,3,233,223,155,187,0,128,235,45,160,165,4,10,192,156,121,
        5,36,127,162,165,4,186,0,0,187,0,128,232,103,251,160,166,4,60,144,117,6,157,120,219,233,183,155,232,231,6,139,218,157,121,
        2,247,219,137,30,163,4,198,6,251,2,2,195,51,219,50,228,190,167,4,198,132,255,255,144,198,4,0,11,210,121,5,247,218,198,4,128,
        138,222,138,242,138,215,198,6,251,2,4,233,75,8,205,214,160,166,4,10,192,116,10,160,178,4,10,192,117,4,233,248,14,195,139,
        30,177,4,232,218,240,255,54,166,4,137,30,177,4,232,86,17,139,240,163,166,4,187,120,4,163,178,4,189,171,4,139,0,11,192,116,
        44,191,0,0,139,207,139,0,247,35,83,139,222,3,223,129,195,151,4,3,7,115,1,66,3,193,115,1,66,137,7,139,202,91,131,255,6,116,
        4,71,71,235,219,139,193,83,187,159,4,137,0,91,131,254,6,116,4,70,70,235,190,190,157,4,253,185,7,0,172,10,192,225,251,116,
        5,128,14,158,4,32,160,165,4,10,192,143,6,166,4,120,15,187,158,4,185,4,0,209,23,67,67,226,250,233,25,12,254,6,166,4,117,247,
        233,221,7,232,115,14,116,4,10,255,117,3,233,96,14,232,58,240,139,14,165,4,50,237,161,163,4,138,253,83,81,82,81,80,247,226,
        139,202,88,247,227,3,200,115,1,66,139,218,90,88,247,226,3,200,115,1,66,3,218,90,88,246,226,3,216,115,13,209,219,209,217,254,
        6,166,4,117,3,233,144,7,10,255,121,9,254,6,166,4,117,7,233,131,7,209,209,209,211,138,213,138,243,138,223,138,225,233,236,
        11,195,83,176,8,114,2,176,17,138,232,138,200,81,156,232,72,2,10,192,116,2,121,12,157,89,80,123,11,4,16,88,121,26,235,9,157,
        89,235,38,4,7,88,121,15,80,232,246,11,88,138,224,2,225,126,22,2,232,235,12,2,197,254,197,58,232,181,3,114,12,138,232,254,
        197,176,2,235,4,2,197,181,3,254,200,254,200,91,80,156,50,201,232,77,0,198,7,48,117,1,67,232,232,0,75,128,63,48,116,250,128,
        63,46,116,1,67,157,88,116,43,156,80,232,191,13,180,69,123,2,180,68,136,39,67,88,157,198,7,43,121,5,198,7,45,246,216,180,47,
        254,196,44,10,115,250,4,58,67,134,196,137,7,67,67,198,7,0,135,217,187,180,4,195,254,205,121,22,137,30,82,3,198,7,46,67,198,
        7,48,254,197,117,248,67,51,201,235,26,254,205,117,12,198,7,46,137,30,82,3,67,51,201,235,10,254,201,117,6,198,7,44,67,177,
        3,137,14,129,4,195,180,5,189,245,97,232,217,255,46,139,150,0,0,69,69,139,54,163,4,176,47,254,192,43,242,115,250,3,242,136,
        7,67,137,54,163,4,254,204,117,221,232,182,255,198,7,0,195,185,1,3,190,6,0,235,6,185,4,4,190,4,0,191,179,4,252,187,116,98,
        139,22,163,4,86,138,198,50,228,211,224,134,224,46,215,170,211,226,138,205,78,117,238,198,5,0,187,179,4,89,254,201,128,63,
        48,117,3,67,226,248,195,232,233,12,123,119,81,83,190,159,4,191,171,4,185,4,0,252,243,165,232,117,3,83,187,177,4,232,253,13,
        91,190,171,4,191,159,4,185,4,0,252,243,165,116,3,232,206,12,138,14,166,4,128,233,184,246,217,248,232,90,3,91,89,190,166,97,
        176,9,232,46,255,80,176,47,80,88,254,192,80,232,148,0,115,247,232,163,0,88,235,11,117,9,198,7,49,67,198,7,48,235,2,136,7,
        67,88,254,200,117,215,81,190,159,4,191,163,4,185,2,0,252,243,165,89,235,41,83,81,232,24,15,232,113,3,90,91,232,153,13,116,
        11,137,30,165,4,137,22,163,4,232,115,12,176,1,232,178,3,137,30,165,4,137,22,163,4,89,91,176,3,186,236,97,232,199,254,80,83,
        82,232,94,13,93,176,47,80,88,254,192,80,232,23,14,115,247,46,3,150,0,0,46,18,158,2,0,69,69,69,232,56,13,88,135,213,91,136,
        7,67,88,254,200,117,206,66,66,139,234,180,4,233,179,254,81,86,185,7,0,191,159,4,248,252,46,172,24,5,71,226,249,94,89,195,
        81,185,7,0,191,159,4,248,252,46,172,16,5,71,226,249,89,195,83,81,51,255,87,187,2,94,160,166,4,46,215,10,192,116,12,95,152,
        43,248,87,139,208,232,50,239,235,232,187,102,96,232,136,12,232,45,13,115,6,232,230,11,95,79,87,232,176,11,114,31,187,122,
        96,232,142,12,232,88,252,88,44,9,80,187,246,127,232,109,12,232,87,13,118,7,232,185,11,88,254,192,80,88,89,91,10,192,195,88,
        89,91,10,192,195,187,180,4,138,47,177,32,138,38,131,4,246,196,32,116,13,58,233,177,42,117,7,246,196,4,117,2,138,233,136,15,
        232,191,242,116,50,189,165,97,46,58,134,0,0,116,9,129,253,156,97,116,38,77,235,240,129,237,156,97,209,229,46,255,166,97,112,
        117,112,117,112,121,112,121,112,121,112,121,112,117,112,121,112,60,112,60,112,75,198,7,48,138,38,131,4,246,196,16,116,4,75,
        198,7,36,246,196,4,117,5,75,136,47,50,237,195,10,192,235,6,198,7,48,67,254,200,117,248,195,232,137,253,198,7,48,67,254,200,
        117,245,195,187,180,4,198,7,32,83,232,193,10,91,156,121,10,198,7,45,83,232,236,12,91,12,1,67,198,7,48,157,195,205,216,232,
        221,255,117,8,67,198,7,0,187,180,4,195,232,200,10,121,18,185,0,7,51,192,163,131,4,137,14,129,4,232,94,253,233,49,255,233,
        120,252,232,129,10,121,3,233,96,159,117,1,195,160,166,4,208,232,80,198,6,166,4,64,208,22,166,4,187,171,4,232,9,13,185,4,0,
        81,232,55,13,139,22,171,4,139,30,173,4,232,187,247,90,91,232,75,246,254,14,166,4,89,116,10,226,227,88,4,192,0,6,166,4,195,
        233,47,10,191,190,37,87,191,168,4,198,5,1,232,44,10,117,3,233,54,241,121,7,10,255,117,10,233,147,3,10,255,117,3,233,13,10,
        10,219,121,38,128,62,166,4,153,114,3,233,237,158,82,83,255,54,163,4,255,54,165,4,232,50,1,91,90,232,90,11,232,61,11,91,90,
        116,3,233,209,158,160,165,4,10,192,121,9,191,196,113,87,36,127,162,165,4,83,82,128,203,127,156,255,54,165,4,255,54,163,4,
        232,2,1,90,91,232,42,11,117,28,82,83,51,210,187,0,144,232,30,11,91,90,121,14,157,90,91,235,60,144,51,210,187,0,129,233,18,
        247,157,121,14,83,82,232,47,1,138,194,232,197,2,90,91,208,216,143,6,163,4,143,6,165,4,159,128,38,165,4,127,158,115,4,191,
        176,125,87,83,82,232,21,1,90,91,232,3,251,233,133,240,83,82,232,255,0,137,22,178,4,199,6,163,4,0,0,199,6,165,4,0,129,209,
        46,178,4,115,7,90,91,83,82,232,222,250,247,6,178,4,255,255,116,21,90,91,232,33,12,232,141,10,232,203,250,90,91,232,22,12,
        232,130,10,235,214,90,91,195,138,14,166,4,128,233,184,115,57,246,217,156,187,164,4,138,135,1,0,136,135,3,0,10,192,156,12,
        128,136,135,1,0,198,135,2,0,184,157,156,121,3,232,34,0,50,237,232,18,0,157,121,3,232,38,0,198,6,158,4,0,157,115,3,233,189,
        1,195,81,83,248,232,122,9,91,89,226,246,195,83,187,159,4,131,47,1,115,4,67,67,235,247,91,195,83,187,159,4,254,7,117,3,67,
        235,249,91,195,138,14,166,4,128,233,152,115,65,246,217,156,139,22,163,4,139,30,165,4,10,219,156,136,30,167,4,198,6,166,4,
        152,128,203,128,157,156,121,6,131,234,1,128,219,0,50,237,10,201,116,6,208,235,209,218,226,250,157,159,121,5,66,117,2,254,
        195,157,115,5,50,228,233,169,1,158,121,10,247,210,246,211,131,194,1,128,211,0,195,177,152,42,14,166,4,248,235,170,232,102,
        8,126,81,186,0,0,187,0,129,232,190,9,117,9,137,22,163,4,137,22,165,4,195,160,166,4,44,128,152,80,198,6,166,4,128,232,27,11,
        187,118,97,232,24,2,90,91,232,16,11,232,124,9,187,135,97,232,10,2,90,91,232,145,245,90,232,254,10,232,217,248,90,91,232,26,
        244,187,49,128,186,24,114,233,157,249,233,244,156,233,92,148,159,134,224,80,176,1,235,2,50,192,162,85,4,88,134,196,158,186,
        0,0,137,30,83,4,116,3,232,233,195,137,30,59,3,232,172,147,117,215,139,227,139,54,83,4,57,55,117,205,82,138,167,2,0,80,82,
        131,195,4,246,135,255,255,128,120,65,185,2,0,252,139,243,191,163,4,243,165,91,86,83,246,6,85,4,255,117,15,190,86,4,131,239,
        4,185,2,0,243,165,50,192,116,3,232,75,240,95,190,163,4,185,2,0,252,243,165,94,139,20,139,140,2,0,131,198,4,86,232,73,240,
        235,39,131,195,4,139,15,67,67,94,139,20,246,6,85,4,255,117,6,139,22,86,4,235,4,3,209,112,53,137,20,82,139,23,67,67,88,83,
        232,165,241,91,89,42,197,232,31,241,116,11,137,22,46,0,139,209,135,211,233,124,154,139,227,137,30,69,3,139,30,59,3,128,63,
        44,117,9,232,85,246,232,66,255,233,147,147,233,168,154,81,83,86,87,82,178,57,187,158,4,191,165,4,190,166,4,235,25,83,185,
        4,0,248,209,23,67,67,226,250,91,246,7,64,117,41,254,12,116,42,254,202,116,38,246,5,255,120,33,117,224,128,44,8,118,26,128,
        234,8,118,21,190,164,4,185,7,0,253,243,164,128,38,158,4,32,235,190,128,15,32,235,210,90,95,94,91,89,118,3,233,116,4,233,192,
        6,138,62,166,4,185,4,0,10,219,120,33,117,17,128,239,8,114,23,138,222,138,242,138,212,50,228,226,235,116,11,248,208,212,209,
        210,208,211,254,207,117,222,233,161,6,136,62,166,4,233,131,4,204,32,235,244,136,62,166,4,233,120,4,83,232,2,0,91,195,232,
        45,0,187,10,4,235,12,83,232,2,0,91,195,232,31,0,187,99,4,128,62,168,4,1,120,7,117,18,198,6,168,4,2,232,129,175,176,13,232,
        137,175,176,10,232,132,175,195,252,10,255,190,3,98,116,10,246,6,167,4,128,121,3,190,11,98,232,123,6,114,8,191,159,4,185,4,
        0,235,9,131,198,4,191,163,4,185,2,0,46,165,226,252,195,232,13,9,83,232,129,7,232,182,247,91,232,5,0,90,91,233,173,247,46,
        138,7,152,232,246,8,80,67,46,139,7,163,163,4,131,195,2,46,139,7,163,165,4,131,195,2,88,90,89,72,116,28,81,82,80,83,135,217,
        232,131,247,91,83,46,139,23,46,139,159,2,0,232,234,241,91,131,195,4,235,222,195,83,208,232,115,3,233,9,1,187,178,96,232,214,
        6,232,47,7,114,9,91,232,35,251,75,198,7,37,195,232,243,5,181,16,115,2,181,7,232,189,5,116,3,232,4,250,91,120,63,138,208,2,
        197,42,6,130,4,121,5,246,216,232,194,250,50,201,232,177,0,255,54,129,4,82,232,218,248,90,143,6,129,4,255,54,129,4,50,192,
        10,194,116,6,232,179,250,232,57,248,143,6,129,4,255,54,129,4,160,129,4,233,114,2,138,208,160,129,4,10,192,116,2,254,200,138,
        240,2,194,138,200,120,4,50,192,138,200,121,17,80,81,82,83,232,169,5,91,90,89,88,254,192,120,241,138,225,138,194,42,193,2,
        197,121,23,160,130,4,232,90,250,198,7,46,137,30,82,3,67,50,201,138,198,42,197,233,161,9,160,130,4,82,255,54,129,4,42,197,
        42,194,2,193,120,3,232,54,250,232,39,0,255,54,129,4,232,81,248,160,130,4,143,6,129,4,10,192,88,90,117,7,139,30,82,3,233,103,
        1,2,194,254,200,120,3,232,15,250,233,91,1,138,197,2,194,42,193,254,192,138,232,44,3,127,252,4,3,138,200,160,131,4,36,64,117,
        2,138,200,195,232,254,4,180,7,114,2,180,16,232,200,4,91,249,116,9,83,80,232,11,249,90,91,138,230,156,80,139,22,129,4,10,246,
        156,10,210,116,2,254,202,2,242,157,116,9,246,6,131,4,4,117,2,254,206,42,244,138,230,80,120,3,233,78,0,83,80,80,232,225,4,
        88,254,196,117,247,232,191,4,232,142,7,88,80,185,3,0,210,228,232,166,4,114,16,138,196,152,187,178,96,3,216,232,107,5,232,
        85,6,235,14,187,110,96,138,196,152,3,216,232,83,5,232,248,5,88,91,120,17,88,89,254,193,81,80,83,80,232,157,4,88,91,235,2,
        50,228,246,220,160,130,4,2,224,254,196,10,192,116,9,246,6,131,4,4,117,2,254,204,138,236,50,201,88,255,54,129,4,80,136,46,
        130,4,232,94,247,88,10,228,126,5,138,196,232,63,249,88,163,129,4,10,192,117,12,75,138,7,60,46,116,1,67,137,30,82,3,88,157,
        114,21,2,196,138,38,130,4,42,196,10,228,116,9,246,6,131,4,4,117,2,254,192,10,192,232,74,246,139,217,233,71,0,138,224,246,
        196,64,180,3,117,2,50,228,163,131,4,137,14,129,4,138,224,187,180,4,198,7,32,246,196,8,116,3,198,7,43,83,232,182,3,91,121,
        8,198,7,45,83,232,226,5,91,67,198,7,48,232,209,3,161,131,4,139,14,129,4,120,3,233,179,253,233,104,0,83,232,59,248,91,116,
        3,136,47,67,198,7,0,187,179,4,67,139,62,82,3,139,22,129,4,160,130,4,50,228,43,251,43,248,116,67,138,7,60,32,116,230,60,42,
        116,226,180,1,75,83,80,232,234,234,50,228,60,45,116,246,60,43,116,242,60,36,116,238,60,48,117,22,67,232,212,234,115,16,75,
        235,3,75,136,7,88,10,228,116,248,131,196,2,235,179,88,10,228,116,251,91,198,7,37,195,161,131,4,138,204,181,6,208,232,139,
        22,129,4,115,11,83,82,232,69,243,50,192,90,233,63,254,138,198,44,5,120,3,232,38,248,82,232,218,245,88,80,10,192,117,1,75,
        254,200,120,6,232,20,248,198,7,0,143,6,129,4,233,89,255,232,235,2,116,109,121,12,161,163,4,163,11,0,160,165,4,162,13,0,161,
        11,0,46,247,38,107,98,139,248,138,202,46,160,109,98,246,38,11,0,2,200,46,160,13,0,46,246,38,107,98,2,200,50,192,46,139,22,
        110,98,3,215,46,138,30,112,98,18,217,162,167,4,176,128,162,166,4,137,22,11,0,136,30,13,0,176,4,162,251,2,233,187,251,0,0,
        0,187,179,4,185,32,0,3,7,67,67,226,250,36,254,163,11,0,235,161,139,22,11,0,138,30,13,0,51,192,176,128,162,166,4,136,38,167,
        4,233,143,251,83,81,187,158,4,129,7,128,0,185,3,0,115,14,67,67,255,7,117,8,226,248,254,6,166,4,209,31,89,116,32,246,6,158,
        4,255,117,5,128,38,159,4,254,187,165,4,138,7,138,167,2,0,36,127,128,228,128,10,224,136,39,91,195,144,144,144,233,136,251,
        128,228,224,128,196,128,115,28,156,66,117,18,157,254,195,117,19,249,208,219,254,6,166,4,117,10,144,233,106,251,157,117,3,
        128,226,254,86,190,163,4,137,20,70,70,138,62,167,4,129,227,127,128,10,223,136,28,94,195,139,241,232,180,4,139,206,81,232,
        9,2,114,9,128,62,166,4,184,121,15,235,7,128,62,166,4,152,121,6,232,0,2,232,207,4,187,134,4,232,81,4,89,81,191,142,4,187,134,
        4,232,53,4,187,134,4,232,93,4,232,253,1,232,178,4,187,134,4,232,52,4,232,251,1,187,148,4,232,197,1,115,3,131,235,4,232,87,
        4,89,117,4,254,193,235,204,139,233,232,117,4,139,205,195,128,38,165,4,127,232,134,0,232,165,0,198,6,178,4,127,232,163,236,
        232,132,0,235,27,101,237,161,165,4,128,252,119,115,1,195,10,192,121,9,36,127,162,165,4,184,176,125,80,232,91,0,160,166,4,
        10,192,116,5,128,6,166,4,2,232,97,0,161,177,4,128,252,130,156,246,196,1,117,2,168,64,156,232,73,0,157,116,9,187,50,96,232,
        55,2,232,72,236,128,46,166,4,2,115,3,232,0,1,232,3,241,160,166,4,60,116,115,11,186,219,15,187,73,131,232,142,242,235,6,187,
        52,98,232,198,250,157,117,5,128,54,165,4,128,195,187,99,98,232,0,2,232,8,241,232,199,241,232,6,0,232,8,236,233,25,3,232,173,
        3,232,164,247,232,0,2,232,195,3,195,187,50,96,233,222,1,184,240,195,255,54,165,4,255,54,163,4,232,86,255,90,91,255,54,163,
        4,255,54,165,4,232,249,1,232,44,255,91,90,233,17,238,161,165,4,10,192,121,9,191,176,125,87,36,127,162,165,4,128,252,129,114,
        12,191,57,123,87,51,210,187,0,129,232,240,237,186,162,48,187,9,127,232,225,1,120,58,191,66,123,87,255,54,163,4,255,54,165,
        4,186,215,179,187,93,129,232,101,236,91,90,255,54,163,4,255,54,165,4,232,163,1,187,73,98,232,49,250,91,90,255,54,163,4,255,
        54,165,4,232,144,1,91,90,232,171,237,187,82,98,233,6,250,186,219,15,187,73,129,233,37,236,186,146,10,187,6,128,233,40,236,
        232,87,176,60,13,117,3,232,35,177,46,138,7,67,10,192,117,238,195,191,159,4,185,4,0,184,0,0,252,243,171,195,184,0,0,163,163,
        4,163,165,4,195,232,120,231,121,14,161,163,4,11,192,116,32,176,1,121,28,246,216,195,205,212,160,166,4,10,192,116,16,160,165,
        4,10,192,116,7,176,1,121,5,246,216,195,12,1,195,160,251,2,60,8,254,200,254,200,254,200,195,232,241,255,114,12,83,187,106,
        97,232,206,0,232,237,234,91,195,51,210,187,0,128,232,172,235,195,232,215,255,187,42,96,114,17,235,8,232,205,255,187,58,96,
        114,7,232,171,0,232,117,240,195,255,54,165,4,255,54,163,4,198,6,251,2,8,232,156,0,232,112,239,90,91,232,6,241,195,185,4,0,
        209,23,67,67,226,250,195,185,4,0,209,31,75,75,226,250,195,128,143,2,0,32,226,1,195,187,176,4,128,249,8,114,38,81,185,7,0,
        187,170,4,138,39,138,135,1,0,136,7,67,226,247,50,192,136,7,89,128,233,8,128,228,32,116,217,8,38,170,4,233,210,255,10,201,
        116,15,81,248,232,183,255,89,246,135,2,0,16,117,185,226,191,195,190,159,4,191,171,4,252,185,4,0,139,5,165,137,132,254,255,
        226,247,195,191,124,4,185,2,0,235,6,191,120,4,185,4,0,252,46,139,7,171,67,67,226,248,139,223,75,75,195,191,171,4,235,234,
        191,159,4,235,229,191,171,4,185,4,0,135,222,252,243,165,135,222,195,81,83,87,187,159,4,191,171,4,185,4,0,232,233,255,95,91,
        89,195,81,83,87,187,171,4,191,159,4,235,235,137,22,163,4,137,30,165,4,195,139,22,163,4,139,30,165,4,195,232,207,254,114,63,
        233,137,0,232,215,237,83,87,138,195,50,6,165,4,120,60,10,219,120,16,161,165,4,43,195,114,63,117,55,161,163,4,43,194,235,16,
        139,195,43,6,165,4,114,46,117,38,139,194,43,6,163,4,114,36,117,28,50,192,235,74,192,235,71,232,163,237,144,144,139,7,50,6,
        165,4,121,19,138,38,165,4,10,228,120,6,176,1,10,192,235,44,176,255,249,235,39,81,185,2,0,135,222,160,165,4,10,192,121,2,135,
        247,253,167,117,6,226,251,176,0,235,13,115,6,176,1,10,192,235,5,176,255,10,192,249,89,95,91,195,187,177,4,232,86,237,144,
        144,138,5,50,7,121,2,235,179,81,185,4,0,235,196,187,255,97,232,242,254,232,151,255,117,11,198,6,251,2,2,199,6,163,4,0,128,
        195,46,43,150,0,0,46,26,158,2,0,195,232,9,254,120,8,160,165,4,10,192,120,14,195,161,163,4,11,192,120,17,195,232,244,253,120,
        8,205,210,128,54,165,4,128,195,161,163,4,61,0,128,117,10,205,211,83,232,219,237,91,233,230,255,247,30,163,4,195,187,121,4,
        232,51,0,191,151,4,185,8,0,184,0,0,252,243,171,162,120,4,162,170,4,195,232,183,253,114,3,233,162,254,139,23,139,159,2,0,195,
        185,4,0,232,165,253,114,3,233,150,254,185,2,0,233,144,254,185,4,0,135,251,187,159,4,232,143,253,114,3,233,128,254,135,223,
        185,2,0,191,163,4,135,251,233,115,254,185,4,0,191,159,4,232,116,253,114,3,233,101,254,185,2,0,191,163,4,233,92,254,232,99,
        253,114,3,233,29,255,233,205,254,232,88,253,185,4,0,115,3,185,2,0,93,191,165,4,255,53,79,79,226,250,85,195,191,171,4,185,
        4,0,235,17,232,57,253,191,159,4,185,4,0,115,6,191,163,4,185,2,0,88,143,5,71,71,226,250,80,195,232,31,253,121,1,195,205,213,
        114,3,233,180,243,233,27,244,0,0,250,186,96,0,142,218,142,194,142,210,50,192,162,100,4,181,145,187,0,0,186,154,6,139,242,
        46,172,136,7,67,66,254,205,117,244,188,14,7,205,18,250,187,64,0,247,227,140,219,43,195,187,0,0,246,196,240,117,6,177,4,211,
        224,139,216,75,137,30,44,0,139,227,233,34,205,176,44,162,246,1,187,183,0,198,7,58,50,192,162,249,2,162,6,0,162,107,4,162,
        101,4,162,40,0,187,14,3,137,30,12,3,187,122,3,137,30,226,3,139,30,44,0,75,137,30,10,3,75,83,187,14,7,176,4,162,223,4,83,137,
        30,224,4,160,223,4,254,192,2,192,138,208,182,0,3,218,90,135,218,139,30,224,4,136,23,67,136,55,67,160,223,4,185,52,0,10,192,
        116,14,135,218,3,217,135,218,137,23,67,67,254,200,117,242,135,218,3,217,67,83,254,200,162,54,5,139,30,224,4,139,23,187,51,
        0,3,218,137,30,228,4,91,67,137,30,48,0,137,30,69,3,90,138,194,36,254,138,208,138,194,42,195,138,216,138,198,26,199,138,248,
        115,3,233,104,173,177,3,211,235,138,199,60,2,114,3,187,0,2,138,194,42,195,138,216,138,198,26,199,138,248,115,3,233,74,173,
        137,30,10,3,135,218,137,30,44,0,137,30,47,3,139,227,137,30,69,3,139,30,48,0,135,218,232,61,173,43,218,75,75,83,91,232,128,
        229,187,220,127,232,127,251,232,152,172,233,143,195,32,66,121,116,101,115,32,102,114,101,101,0,20,232,165,240,51,201,82,255,
        54,129,4,233,104,246,253,255,3,191,201,27,14,182,0,0] 
        
      • ibm-ega-128kb-lock.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <video id="videoEGA" model="ega" memory="0x20000" screenwidth="640" screenheight="350" autolock="true" pos="center" padding="8px">
        	<menu>
        		<title>Enhanced Color Display</title>
        		<control type="container" pos="right">
        			<control type="led" label="Caps" binding="caps-lock" padleft="8px"/>
        			<control type="led" label="Num" binding="num-lock" padleft="8px"/>
        			<control type="led" label="Scroll" binding="scroll-lock" padleft="8px"/>
        			<control type="button" binding="fullScreen" padleft="8px">Full Screen</control>
        		</control>
        	</menu>
        </video>
        
      • ibm-ega-640-128kb-lock.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <video id="videoEGA" model="ega" memory="0x20000" screenwidth="640" screenheight="350" width="640px" autolock="true" pos="center" padding="8px">
        	<menu>
        		<title>Enhanced Color Display</title>
        		<control type="container" pos="right">
        			<control type="led" label="Caps" binding="caps-lock" padleft="8px"/>
        			<control type="led" label="Num" binding="num-lock" padleft="8px"/>
        			<control type="led" label="Scroll" binding="scroll-lock" padleft="8px"/>
        			<control type="button" binding="lockPointer" padleft="8px">Lock Pointer</control>
        		</control>
        	</menu>
        </video>
        
      • ibm-ega.json
        {"bytes":[
        85,170,32,235,40,50,52,48,48,54,50,55,55,51,53,54,
        32,40,67,41,67,79,80,89,82,73,71,72,84,32,73,66,
        77,32,49,57,56,52,57,47,49,51,47,56,52,182,3,178,
        218,236,178,186,236,178,192,176,0,238,43,210,142,218,250,199,
        6,64,0,215,12,140,14,66,0,199,6,8,1,101,240,199,
        6,10,1,0,240,199,6,168,4,12,1,140,14,170,4,199,
        6,124,0,96,53,140,14,126,0,199,6,12,1,96,49,140,
        14,14,1,251,198,6,135,4,4,232,31,0,136,30,136,4,
        232,75,0,8,6,136,4,138,30,136,4,232,101,0,233,179,
        1,203,238,80,88,236,36,16,208,232,195,182,3,178,194,176,
        1,238,176,13,232,235,255,208,232,208,232,208,232,138,216,176,
        9,232,222,255,208,232,208,232,10,216,176,5,232,211,255,208,
        232,10,216,176,1,232,202,255,10,216,128,227,15,195,182,3,
        178,186,176,1,238,178,218,238,178,194,236,36,96,208,232,138,
        216,178,186,176,2,238,178,218,238,178,194,236,36,96,208,224,
        10,195,195,42,255,128,227,15,209,227,82,182,3,138,230,90,
        128,228,1,254,196,246,212,46,255,167,40,1,23,7,0,192,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,115,1,126,1,126,1,137,1,
        148,1,168,1,188,1,199,1,199,1,210,1,221,1,241,1,
        4,2,4,2,4,2,4,2,128,38,16,4,207,128,14,16,
        4,16,184,1,0,205,16,195,128,38,16,4,207,128,14,16,
        4,32,184,3,0,205,16,195,128,14,16,4,48,184,7,0,
        205,16,195,32,38,135,4,232,206,255,232,235,255,195,32,38,
        135,4,232,211,255,232,224,255,195,32,38,135,4,232,200,255,
        232,213,255,195,182,3,178,194,176,0,238,246,212,8,38,135,
        4,232,196,255,232,161,255,195,182,3,178,194,176,0,238,246,
        212,8,38,135,4,232,176,255,232,157,255,195,32,38,135,4,
        232,165,255,232,130,255,195,32,38,135,4,232,154,255,232,135,
        255,195,32,38,135,4,232,143,255,232,124,255,195,182,3,178,
        194,176,0,238,246,212,8,38,135,4,232,91,255,232,120,255,
        195,182,3,178,194,176,0,238,246,212,8,38,135,4,232,87,
        255,232,100,255,195,83,187,127,0,139,251,80,232,29,0,139,
        240,88,80,232,32,0,88,80,232,17,0,59,199,88,117,3,
        235,5,144,51,192,91,195,184,1,0,91,195,82,139,208,176,
        14,238,66,236,90,195,80,82,139,208,180,14,176,127,232,212,
        10,90,88,195,232,183,10,246,6,135,4,2,117,18,184,180,
        3,232,177,255,61,1,0,116,3,233,187,0,180,48,235,16,
        184,212,3,232,159,255,61,1,0,116,3,233,169,0,180,32,
        80,187,0,176,186,184,3,185,0,16,176,1,128,252,48,116,
        8,183,184,178,216,181,64,254,200,238,139,46,114,4,129,253,
        52,18,142,195,116,7,142,219,232,68,0,117,46,88,80,184,
        32,112,43,255,185,40,0,243,171,88,80,128,252,48,186,186,
        3,116,2,178,218,180,8,43,201,236,34,196,117,4,226,249,
        235,9,43,201,236,34,196,116,10,226,249,186,2,1,232,247,
        3,235,6,177,3,210,236,117,222,88,235,59,185,0,64,252,
        139,217,184,170,170,186,85,255,43,255,243,170,79,253,139,247,
        139,203,172,50,196,117,30,138,194,170,226,246,34,228,116,19,
        138,224,134,242,34,228,117,4,138,212,235,224,252,71,116,222,
        79,235,217,176,0,252,195,131,236,10,139,236,232,223,9,176,
        48,230,67,176,0,230,64,246,6,135,4,2,116,31,232,55,
        254,199,70,2,94,1,199,70,4,153,141,199,70,6,98,184,
        178,180,180,1,176,39,232,204,9,178,186,235,42,232,248,253,
        232,71,11,115,17,178,212,180,1,176,20,232,183,9,199,70,
        2,94,1,235,6,144,199,70,2,200,0,199,70,4,172,160,
        199,70,6,96,196,178,218,184,0,5,205,16,43,201,236,168,
        8,117,7,226,249,179,0,233,190,0,176,0,230,64,43,219,
        51,201,236,168,8,116,7,226,249,179,1,233,170,0,43,201,
        236,168,1,116,21,168,8,117,35,226,245,179,2,233,152,0,
        179,3,233,147,0,179,4,233,142,0,168,8,117,242,236,168,
        1,225,251,227,240,67,116,4,168,8,116,210,176,0,230,67,
        59,94,2,116,4,179,5,235,111,228,64,138,224,144,228,64,
        134,224,144,144,59,70,4,125,4,179,6,235,91,59,70,6,
        126,4,179,7,235,82,184,219,9,187,15,0,185,80,0,205,
        16,236,82,178,192,180,15,176,63,232,9,9,184,15,0,90,
        80,82,178,192,180,50,232,252,8,90,88,43,201,236,168,48,
        117,9,226,249,179,16,10,220,235,30,144,43,201,236,168,48,
        116,8,226,249,179,32,10,220,235,14,254,196,128,252,48,116,
        37,128,204,15,138,196,235,200,185,6,0,186,3,1,232,119,
        2,131,196,10,176,54,230,67,42,192,230,64,144,144,230,64,
        189,1,0,233,43,252,232,149,8,184,0,5,205,16,176,54,
        230,67,42,192,230,64,144,144,230,64,131,196,10,189,0,0,
        30,232,122,8,246,6,135,4,2,116,18,128,14,16,4,48,
        184,15,0,128,14,135,4,96,184,15,0,235,13,128,38,16,
        4,207,128,14,16,4,32,184,14,0,205,16,131,236,6,139,
        236,184,0,160,142,216,142,192,199,70,2,0,0,199,70,4,
        0,0,182,3,178,196,184,1,2,232,73,8,178,206,184,0,
        4,232,65,8,82,178,218,236,178,192,184,0,50,232,53,8,
        232,172,1,128,252,0,116,3,233,226,0,232,235,0,128,252,
        0,116,3,233,215,0,90,178,196,184,2,2,232,22,8,178,
        206,184,1,4,232,14,8,82,178,218,236,178,192,184,0,50,
        232,2,8,199,70,4,0,0,232,116,1,128,252,0,116,3,
        233,170,0,232,179,0,128,252,0,116,3,233,159,0,90,178,
        196,184,4,2,232,222,7,82,178,206,184,2,4,232,213,7,
        178,218,236,178,192,184,0,50,232,202,7,199,70,4,0,0,
        232,60,1,128,252,0,116,3,235,115,144,232,123,0,128,252,
        0,116,3,235,104,144,90,178,196,184,8,2,232,166,7,178,
        206,184,3,4,232,158,7,82,178,218,236,178,192,184,0,50,
        232,146,7,199,70,4,0,0,232,4,1,128,252,0,117,61,
        232,70,0,128,252,0,117,53,85,189,0,0,94,90,232,93,
        7,54,139,92,2,177,6,211,235,75,177,5,211,227,128,227,
        96,128,38,135,4,159,8,30,135,4,128,14,135,4,4,138,
        30,136,4,232,45,251,131,196,6,31,233,196,250,186,3,1,
        232,245,0,85,189,1,0,235,195,187,0,160,142,219,142,195,
        139,70,4,138,232,42,201,209,225,232,15,0,128,252,0,117,
        9,139,70,4,1,70,2,184,0,0,195,85,252,43,255,43,
        192,232,250,6,139,30,114,4,129,251,52,18,140,194,142,218,
        116,98,129,251,33,67,116,92,136,5,138,5,50,196,117,64,
        254,196,138,196,117,242,139,233,184,85,170,139,216,186,170,85,
        243,171,79,79,253,139,247,139,205,173,51,195,117,34,139,194,
        171,226,246,139,205,252,70,70,139,254,173,51,194,117,17,171,
        226,248,253,78,78,139,205,173,11,192,117,4,226,249,235,17,
        139,200,50,228,10,237,116,2,180,1,10,201,116,3,128,196,
        2,93,252,195,80,82,182,3,178,196,184,15,2,232,149,6,
        90,88,243,171,232,119,6,137,30,114,4,142,218,235,226,140,
        218,43,219,142,194,43,255,184,85,170,139,200,38,137,5,176,
        15,38,139,5,51,193,117,20,185,0,32,243,171,129,194,0,
        4,131,195,16,128,254,176,117,218,235,1,144,128,254,160,116,
        6,1,94,4,184,0,0,195,156,250,30,232,48,6,10,246,
        116,11,179,6,232,73,6,226,254,254,206,117,245,179,1,232,
        62,6,226,254,254,202,117,245,226,254,226,254,31,157,195,179,
        14,239,16,87,17,134,17,157,17,164,18,14,21,176,21,210,
        23,153,24,221,24,117,26,203,27,159,28,1,29,133,29,197,
        29,152,31,191,32,24,33,40,24,8,0,8,11,3,0,3,
        35,55,39,45,55,49,21,4,17,0,7,6,7,0,0,0,
        0,225,36,199,20,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,40,24,8,0,8,11,3,0,3,
        35,55,39,45,55,49,21,4,17,0,7,6,7,0,0,0,
        0,225,36,199,20,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,80,24,8,0,16,1,3,0,3,
        35,112,79,92,47,95,7,4,17,0,7,6,7,0,0,0,
        0,225,36,199,40,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,80,24,8,0,16,1,3,0,3,
        35,112,79,92,47,95,7,4,17,0,7,6,7,0,0,0,
        0,225,36,199,40,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,40,24,8,0,64,11,3,0,2,
        35,55,39,45,55,48,20,4,17,0,1,0,0,0,0,0,
        0,225,36,199,20,0,224,240,162,255,0,19,21,23,2,4,
        6,7,16,17,18,19,20,21,22,23,1,0,3,0,0,0,
        0,0,0,48,15,0,255,40,24,8,0,64,11,3,0,2,
        35,55,39,45,55,48,20,4,17,0,1,0,0,0,0,0,
        0,225,36,199,20,0,224,240,162,255,0,19,21,23,2,4,
        6,7,16,17,18,19,20,21,22,23,1,0,3,0,0,0,
        0,0,0,48,15,0,255,80,24,8,0,64,1,1,0,6,
        35,112,79,89,45,94,6,4,17,0,1,0,0,0,0,0,
        0,224,35,199,40,0,223,239,194,255,0,23,23,23,23,23,
        23,23,23,23,23,23,23,23,23,23,1,0,1,0,0,0,
        0,0,0,0,13,0,255,80,24,14,0,16,0,3,0,3,
        166,96,79,86,58,81,96,112,31,0,13,11,12,0,0,0,
        0,94,46,93,40,13,94,110,163,255,0,8,8,8,8,8,
        8,8,16,24,24,24,24,24,24,24,14,0,15,8,0,0,
        0,0,0,16,10,0,255,40,24,8,0,64,0,0,0,3,
        35,55,39,45,55,49,21,4,17,0,7,6,7,0,0,0,
        0,225,36,199,20,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,40,24,8,0,64,0,0,0,3,
        35,55,39,45,55,49,21,4,17,0,7,6,7,0,0,0,
        0,225,36,199,20,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,40,24,8,0,64,0,0,0,3,
        35,55,39,45,55,49,21,4,17,0,7,6,7,0,0,0,
        0,225,36,199,20,8,224,240,163,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,8,0,15,0,0,0,
        0,0,0,16,14,0,255,80,24,8,0,16,1,4,0,7,
        35,112,79,92,47,95,7,4,17,0,7,6,7,0,0,0,
        0,225,36,199,40,8,224,240,163,255,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,
        0,0,0,0,4,0,255,80,24,14,0,16,0,4,0,7,
        166,96,79,86,58,81,96,112,31,0,13,11,12,0,0,0,
        0,94,46,93,40,13,94,110,163,255,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,14,0,15,8,0,0,
        0,0,0,0,4,0,255,40,24,8,0,32,11,15,0,6,
        35,55,39,45,55,48,20,4,17,0,0,0,0,0,0,0,
        0,225,36,199,20,0,224,240,227,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,1,0,15,0,0,0,
        0,0,0,0,5,15,255,80,24,8,0,64,1,15,0,6,
        35,112,79,89,45,94,6,4,17,0,0,0,0,0,0,0,
        0,224,35,199,40,0,223,239,227,255,0,1,2,3,4,5,
        6,7,16,17,18,19,20,21,22,23,1,0,15,0,0,0,
        0,0,0,0,5,15,255,80,24,14,0,128,5,15,0,0,
        162,96,79,86,26,80,224,112,31,0,0,0,0,0,0,0,
        0,94,46,93,20,13,94,110,139,255,0,8,0,0,24,24,
        0,0,0,8,0,0,0,24,0,0,11,0,5,0,0,0,
        0,0,0,16,7,15,255,80,24,14,0,128,5,15,0,0,
        167,91,79,83,23,80,186,108,31,0,0,0,0,0,0,0,
        0,94,43,93,20,15,95,10,139,255,0,1,0,0,4,7,
        0,0,0,1,0,0,4,7,0,0,1,0,5,0,0,0,
        0,0,0,16,7,15,255,80,24,14,0,128,1,15,0,6,
        162,96,79,86,58,80,96,112,31,0,0,0,0,0,0,0,
        0,94,46,93,40,13,94,110,227,255,0,8,0,0,24,24,
        0,0,0,8,0,0,0,24,0,0,11,0,5,0,0,0,
        0,0,0,0,5,15,255,80,24,14,0,128,1,15,0,6,
        167,91,79,83,55,82,0,108,31,0,0,0,0,0,0,0,
        0,94,43,93,40,15,95,10,227,255,0,1,2,3,4,5,
        20,7,56,57,58,59,60,61,62,63,1,0,15,0,0,0,
        0,0,0,0,5,15,255,40,24,14,0,8,11,3,0,3,
        167,45,39,43,45,40,109,108,31,0,13,6,7,0,0,0,
        0,94,43,93,20,15,94,10,163,255,0,1,2,3,4,5,
        20,7,56,57,58,59,60,61,62,63,8,0,15,0,0,0,
        0,0,0,16,14,0,255,40,24,14,0,8,11,3,0,3,
        167,45,39,43,45,40,109,108,31,0,13,6,7,0,0,0,
        0,94,43,93,20,15,94,10,163,255,0,1,2,3,4,5,
        20,7,56,57,58,59,60,61,62,63,8,0,15,0,0,0,
        0,0,0,16,14,0,255,80,24,14,0,16,1,3,0,3,
        167,91,79,83,55,81,91,108,31,0,13,6,7,0,0,0,
        0,94,43,93,40,15,94,10,163,255,0,1,2,3,4,5,
        20,7,56,57,58,59,60,61,62,63,8,0,15,0,0,0,
        0,0,0,16,14,0,255,80,24,14,0,16,1,3,0,3,
        167,91,79,83,55,81,91,108,31,0,13,6,7,0,0,0,
        0,94,43,93,40,15,94,10,163,255,0,1,2,3,4,5,
        20,7,56,57,58,59,60,61,62,63,8,0,15,0,0,0,
        0,0,0,16,14,0,255,251,252,85,6,30,82,81,83,86,
        87,80,138,196,50,228,209,224,139,240,61,40,0,114,6,88,
        205,66,233,169,20,232,6,0,88,46,255,164,239,6,80,43,
        192,142,216,88,195,30,232,245,255,139,22,99,4,128,226,240,
        128,202,10,31,195,134,196,238,66,134,196,238,74,195,238,195,
        82,186,67,0,176,182,232,245,255,184,51,5,74,232,238,255,
        138,196,232,233,255,186,97,0,236,138,224,12,3,232,222,255,
        43,201,226,254,254,203,117,250,138,196,232,209,255,90,195,232,
        172,255,196,30,168,4,38,196,31,195,81,82,232,240,255,138,
        38,73,4,246,6,135,4,96,116,24,128,252,15,117,7,129,
        195,64,4,235,51,144,128,252,16,117,7,129,195,128,4,235,
        39,144,128,252,3,119,20,160,136,4,36,15,60,3,116,7,
        60,9,116,3,235,5,144,129,195,192,4,138,14,73,4,42,
        237,227,5,131,195,64,226,251,90,89,195,232,172,255,131,195,
        5,182,3,178,196,184,1,0,250,232,89,255,38,138,7,254,
        196,232,81,255,254,196,67,38,138,7,232,72,255,128,252,5,
        114,242,38,138,7,67,178,194,238,178,196,184,3,0,232,52,
        255,251,139,22,99,4,42,228,38,138,7,232,39,255,67,254,
        196,128,252,25,114,242,38,139,71,241,134,224,163,96,4,139,
        243,232,1,255,236,178,192,42,228,38,138,7,134,224,238,134,
        224,238,67,254,196,128,252,20,114,239,176,0,238,30,6,196,
        62,168,4,38,196,125,4,140,192,11,199,116,9,31,30,185,
        16,0,243,164,70,164,7,31,178,204,176,0,238,178,202,176,
        1,238,178,206,42,228,38,138,7,232,201,254,67,254,196,128,
        252,9,114,242,195,160,135,4,168,128,117,57,186,0,184,160,
        73,4,60,6,118,10,186,0,176,60,7,116,3,186,0,160,
        187,32,7,60,4,114,6,60,7,116,2,43,219,142,194,139,
        14,76,4,227,16,185,0,128,128,254,160,116,2,181,64,139,
        195,43,255,243,171,195,232,30,15,195,80,30,232,95,254,160,
        136,4,31,36,15,60,3,116,7,60,9,116,3,88,248,195,
        88,249,195,250,199,6,12,1,96,49,140,14,14,1,251,128,
        38,135,4,243,80,246,6,135,4,2,116,44,161,16,4,36,
        48,60,48,116,72,198,6,132,4,24,199,6,133,4,8,0,
        88,128,14,135,4,8,60,1,118,9,60,4,115,5,128,14,
        135,4,4,205,66,233,166,18,161,16,4,36,48,60,48,117,
        64,198,6,132,4,24,199,6,133,4,14,0,88,205,66,199,
        6,96,4,12,11,128,14,135,4,8,233,129,18,88,80,182,
        3,36,128,128,38,135,4,127,8,6,135,4,88,36,127,60,
        15,116,2,176,7,162,73,4,178,180,137,22,99,4,235,28,
        144,88,80,182,3,36,128,128,38,135,4,127,8,6,135,4,
        88,36,127,162,73,4,178,212,137,22,99,4,199,6,78,4,
        0,0,198,6,98,4,0,185,8,0,191,80,4,30,7,43,
        192,243,171,232,228,253,38,138,7,42,228,163,74,4,38,138,
        71,1,162,132,4,38,138,71,2,42,228,163,133,4,38,139,
        71,3,163,76,4,43,219,176,1,138,38,73,4,128,252,7,
        116,12,128,252,3,119,53,232,240,254,114,2,176,2,232,253,
        14,232,74,253,138,38,73,4,128,252,7,116,3,235,29,144,
        189,48,48,187,0,14,14,7,38,139,86,0,11,210,116,12,
        185,1,0,69,232,31,15,131,197,14,235,234,232,204,253,232,
        115,254,232,177,254,232,22,253,128,62,73,4,15,114,6,199,
        6,12,1,48,34,128,62,73,4,7,119,9,116,75,128,62,
        73,4,3,118,68,196,30,168,4,131,195,12,38,196,31,140,
        192,11,195,116,50,190,7,0,38,138,0,60,255,116,122,58,
        6,73,4,116,3,70,235,240,250,38,138,7,254,200,162,132,
        4,38,139,71,1,163,133,4,38,139,71,3,163,12,1,38,
        139,71,5,163,14,1,251,235,80,196,30,168,4,131,195,8,
        38,196,31,140,192,11,195,116,64,190,11,0,38,138,0,60,
        255,116,54,58,6,73,4,116,3,70,235,240,38,138,39,38,
        138,71,1,38,139,79,2,38,139,87,4,38,139,111,6,38,
        142,71,8,83,139,216,184,16,17,205,16,91,38,138,71,10,
        60,255,116,5,254,200,162,132,4,232,98,252,128,62,73,4,
        7,119,30,187,200,16,160,73,4,42,228,3,216,46,138,7,
        162,101,4,176,48,128,62,73,4,6,117,2,176,63,162,102,
        4,139,14,96,4,235,40,144,44,40,45,41,42,46,30,41,
        128,253,0,117,4,254,193,235,10,254,193,58,14,133,4,114,
        2,42,201,81,42,205,128,249,16,89,117,2,254,193,195,180,
        10,137,14,96,4,246,6,135,4,8,117,51,138,197,36,96,
        60,32,117,5,185,0,30,235,38,246,6,135,4,1,117,31,
        128,62,73,4,3,119,21,232,128,253,115,16,128,253,4,118,
        3,128,197,5,128,249,4,118,3,128,193,5,232,161,255,232,
        3,0,233,105,16,139,22,99,4,138,197,232,215,251,254,196,
        138,193,232,208,251,195,83,139,216,138,196,246,38,74,4,50,
        255,3,195,209,224,91,195,232,3,0,233,65,16,138,207,50,
        237,209,225,139,241,137,148,80,4,56,62,98,4,117,5,139,
        194,232,1,0,195,232,206,255,139,200,3,14,78,4,209,249,
        180,14,232,176,255,195,138,223,50,255,209,227,139,151,80,4,
        139,14,96,4,95,94,91,88,88,31,7,93,207,160,73,4,
        60,7,119,55,246,6,135,4,2,116,7,60,7,116,44,235,
        5,144,60,6,118,37,205,66,95,94,131,196,6,31,7,93,
        207,6,6,7,7,5,5,4,5,0,0,0,0,0,5,6,
        4,4,4,4,6,6,4,7,4,7,4,139,22,99,4,131,
        194,6,236,168,4,180,0,116,3,233,165,0,168,2,117,3,
        233,168,0,180,16,139,22,99,4,138,196,238,66,80,236,138,
        232,88,74,254,196,138,196,238,66,236,138,229,138,30,73,4,
        42,255,46,138,159,193,17,43,195,139,30,78,4,209,235,43,
        195,121,2,43,192,177,3,128,62,73,4,4,114,77,128,62,
        73,4,7,116,70,128,62,73,4,6,119,40,117,2,209,232,
        178,40,246,242,138,232,2,237,138,220,42,255,128,62,73,4,
        6,117,4,177,4,208,228,211,227,138,212,138,240,208,238,208,
        238,235,44,144,153,247,54,74,4,139,218,211,227,139,200,82,
        153,247,54,133,4,90,138,240,235,21,144,246,54,74,4,138,
        240,138,212,138,220,50,255,211,227,246,38,133,4,139,200,180,
        1,82,139,22,99,4,131,194,7,238,90,95,94,131,196,6,
        31,7,93,207,162,98,4,139,14,76,4,152,80,247,225,163,
        78,4,139,200,138,30,73,4,128,251,7,119,2,209,249,180,
        12,232,113,254,91,209,227,139,135,80,4,232,167,254,233,205,
        14,80,138,230,42,229,254,196,58,224,88,117,2,42,192,195,
        83,30,232,25,250,139,30,74,4,31,81,138,202,42,237,86,
        87,243,164,95,94,3,243,3,251,89,226,238,91,195,83,30,
        232,251,249,139,30,74,4,31,81,138,202,42,237,86,87,243,
        164,95,94,43,243,43,251,89,226,238,91,195,82,182,3,178,
        196,184,15,2,232,238,249,90,43,192,138,202,42,237,87,243,
        170,95,138,198,82,182,3,178,196,180,2,232,215,249,90,176,
        255,138,202,87,243,170,95,195,182,3,178,196,184,15,2,232,
        195,249,195,30,232,167,249,138,247,42,255,80,82,139,195,247,
        38,133,4,139,216,90,88,31,232,177,255,30,232,143,249,3,
        62,74,4,31,75,117,241,232,206,255,195,30,232,127,249,138,
        247,42,255,80,82,139,195,247,38,133,4,139,216,90,88,31,
        232,137,255,30,232,103,249,43,62,74,4,31,75,117,241,232,
        166,255,195,138,216,232,67,3,128,252,4,114,8,128,252,7,
        116,3,233,191,0,83,139,193,232,55,0,116,49,3,240,138,
        230,42,227,232,108,0,3,245,3,253,254,204,117,245,88,176,
        32,232,103,0,3,253,254,203,117,247,232,33,249,128,62,73,
        4,7,116,7,160,101,4,186,216,3,238,233,176,13,138,222,
        235,220,246,6,135,4,4,116,18,82,182,3,178,218,80,236,
        168,8,116,251,176,37,178,216,238,88,90,232,56,253,3,6,
        78,4,139,248,139,240,43,209,254,198,254,194,50,237,139,46,
        74,4,3,237,138,195,246,38,74,4,3,192,6,31,128,251,
        0,195,138,202,86,87,243,165,95,94,195,138,202,87,243,171,
        95,195,253,138,216,232,163,2,83,139,194,232,164,255,116,32,
        43,240,138,230,42,227,232,217,255,43,245,43,253,254,204,117,
        245,88,176,32,232,212,255,43,253,254,203,117,247,233,106,255,
        138,222,235,237,138,216,139,193,232,44,2,139,248,43,209,129,
        194,1,1,208,230,208,230,128,62,73,4,6,115,4,208,226,
        209,231,6,31,42,237,208,227,208,227,116,45,138,195,180,80,
        246,228,139,247,3,240,138,230,42,227,232,32,0,129,238,176,
        31,129,239,176,31,254,204,117,241,138,199,232,40,0,129,239,
        176,31,254,203,117,245,233,213,12,138,222,235,236,138,202,86,
        87,243,164,95,94,129,198,0,32,129,199,0,32,86,87,138,
        202,243,164,95,94,195,138,202,87,243,170,95,129,199,0,32,
        87,138,202,243,170,95,195,80,30,232,2,248,138,38,135,4,
        128,228,96,31,88,116,2,249,195,248,195,233,149,254,232,192,
        253,138,38,73,4,128,252,7,118,241,128,252,13,115,23,233,
        124,12,186,0,160,189,17,5,128,252,15,114,8,232,199,255,
        115,3,189,1,5,195,82,232,232,255,142,194,90,138,216,139,
        193,83,138,62,98,4,232,125,1,91,139,248,43,209,129,194,
        1,1,42,228,138,195,82,247,38,133,4,247,38,74,4,139,
        247,3,240,6,31,90,10,219,116,63,138,206,42,203,42,237,
        30,232,138,247,80,82,139,193,247,38,133,4,139,200,90,88,
        31,82,139,197,182,3,178,206,232,138,247,178,196,184,15,2,
        232,130,247,90,232,73,253,82,77,139,197,182,3,178,206,232,
        115,247,90,232,173,253,233,245,11,138,222,235,246,233,146,254,
        232,30,253,138,38,73,4,128,252,3,118,241,128,252,7,116,
        236,128,252,13,115,12,128,252,6,119,4,180,7,205,66,233,
        204,11,253,138,216,82,232,73,255,142,194,90,139,194,254,196,
        83,138,62,98,4,232,222,0,91,43,6,74,4,139,248,43,
        209,129,194,1,1,42,228,138,195,82,247,38,133,4,247,38,
        74,4,139,247,43,240,6,31,90,10,219,116,64,138,206,42,
        203,42,237,30,232,231,246,80,82,139,193,247,38,133,4,139,
        200,90,88,31,82,139,197,182,3,178,206,232,231,246,178,196,
        184,15,2,232,223,246,90,232,196,252,82,77,139,197,182,3,
        178,206,232,208,246,90,232,50,253,252,233,81,11,138,222,235,
        245,138,207,50,237,139,241,209,230,139,132,80,4,51,219,227,
        6,3,30,76,4,226,250,232,220,250,3,216,195,128,227,3,
        138,195,81,185,3,0,208,224,208,224,10,216,226,248,138,251,
        89,195,82,81,83,43,210,185,1,0,139,216,35,217,11,211,
        209,224,209,225,139,216,35,217,11,211,209,225,115,236,139,194,
        91,89,90,195,161,80,4,83,139,216,138,196,246,38,74,4,
        209,224,209,224,42,255,3,195,91,195,83,138,223,42,255,209,
        227,139,135,80,4,91,83,81,82,42,237,138,207,139,216,138,
        196,246,38,74,4,247,38,133,4,42,255,3,195,139,30,76,
        4,227,4,3,195,226,252,90,89,91,195,190,0,184,139,62,
        16,4,129,231,48,0,131,255,48,117,3,190,0,176,142,198,
        195,232,231,255,232,74,255,139,243,139,22,99,4,131,194,6,
        246,6,135,4,4,6,31,116,11,236,168,1,117,251,250,236,
        168,1,116,251,173,233,118,10,138,36,138,68,1,185,0,192,
        178,0,133,193,248,116,1,249,208,210,209,233,209,233,115,242,
        136,86,0,69,195,232,163,255,232,89,255,139,240,131,236,8,
        139,236,128,62,73,4,6,6,31,114,26,182,4,138,4,136,
        70,0,69,138,132,0,32,136,70,0,69,131,198,80,254,206,
        117,235,235,23,144,209,230,182,4,232,172,255,129,198,0,32,
        232,165,255,129,238,176,31,254,206,117,238,30,232,111,245,196,
        62,12,1,31,131,237,8,139,245,252,176,0,22,31,186,128,
        0,86,87,185,8,0,243,166,95,94,116,29,254,192,131,199,
        8,74,117,237,60,0,116,17,232,67,245,196,62,124,0,140,
        192,11,199,116,4,176,128,235,211,131,196,8,233,207,9,233,
        47,255,138,38,73,4,128,252,7,116,244,128,252,3,118,239,
        128,252,6,119,3,233,93,255,128,252,15,114,82,232,7,253,
        114,77,235,10,128,252,13,115,70,176,0,233,160,9,186,0,
        160,142,194,232,180,254,139,240,139,30,133,4,43,227,139,236,
        83,36,1,138,200,176,5,210,224,180,7,182,3,178,206,232,
        243,244,184,24,5,232,237,244,38,138,4,246,208,136,70,0,
        69,3,54,74,4,75,117,240,91,184,16,5,235,50,144,186,
        0,160,142,194,232,115,254,139,240,139,30,133,4,43,227,139,
        236,182,3,178,206,184,8,5,232,186,244,83,38,138,4,246,
        208,136,70,0,69,3,54,74,4,75,117,240,91,184,0,5,
        232,162,244,196,62,12,1,43,235,139,245,252,176,0,22,31,
        186,0,1,86,87,139,203,243,166,95,94,116,7,254,192,3,
        251,74,117,239,3,227,233,5,9,232,98,244,138,38,73,4,
        128,252,4,114,8,128,252,7,116,3,235,116,144,232,59,254,
        138,227,80,81,232,154,253,139,251,89,91,139,22,99,4,131,
        194,6,246,6,135,4,4,116,11,236,168,1,117,251,250,236,
        168,1,116,251,139,195,171,251,226,232,233,193,8,232,30,244,
        138,38,73,4,128,252,4,114,8,128,252,7,116,3,235,48,
        144,232,247,253,80,81,232,88,253,139,251,89,91,139,22,99,
        4,131,194,6,246,6,135,4,4,116,11,236,168,1,117,251,
        250,236,168,1,116,251,138,195,170,251,71,226,231,233,126,8,
        128,252,7,114,3,233,175,0,232,192,253,180,0,80,232,115,
        253,139,248,88,60,128,115,6,197,54,12,1,235,6,44,128,
        197,54,124,0,209,224,209,224,209,224,3,240,30,232,174,243,
        128,62,73,4,6,31,114,44,87,86,182,4,172,246,195,128,
        117,22,170,172,38,136,133,255,31,131,199,79,254,206,117,236,
        94,95,71,226,227,233,38,8,38,50,5,170,172,38,50,133,
        255,31,235,224,138,211,209,231,232,226,252,87,86,182,4,172,
        232,239,252,35,195,246,194,128,116,7,38,50,37,38,50,69,
        1,38,136,37,38,136,69,1,172,232,214,252,35,195,246,194,
        128,116,10,38,50,165,0,32,38,50,133,1,32,38,136,165,
        0,32,38,136,133,1,32,131,199,80,254,206,117,193,94,95,
        71,71,226,183,233,199,7,128,252,15,114,14,232,24,251,114,
        9,128,227,133,138,227,208,228,10,220,42,228,247,38,133,4,
        80,232,198,252,139,248,139,46,133,4,186,0,160,142,194,197,
        54,12,1,88,3,240,182,3,246,195,128,116,11,178,206,184,
        24,3,232,0,243,235,30,144,87,178,196,184,15,2,232,244,
        242,43,192,81,139,205,30,232,212,242,170,3,62,74,4,79,
        226,248,31,89,95,178,196,180,2,138,195,232,215,242,87,83,
        81,139,221,30,232,183,242,139,14,74,4,31,138,4,38,138,
        37,38,136,5,70,3,249,75,117,242,89,91,43,245,95,71,
        226,166,178,206,184,0,3,232,171,242,178,196,184,15,2,232,
        163,242,233,41,7,128,62,99,4,180,116,9,246,6,135,4,
        2,116,5,205,66,233,22,7,43,192,139,232,196,62,168,4,
        131,199,4,38,196,61,140,192,11,199,116,1,69,232,32,3,
        10,255,117,101,138,251,160,102,4,36,224,128,227,31,10,195,
        162,102,4,138,223,128,231,8,208,231,138,232,128,229,239,10,
        237,128,227,15,138,251,208,227,128,227,16,128,231,7,10,223,
        160,73,4,60,3,118,14,180,0,138,195,232,193,2,11,237,
        116,3,38,136,29,128,62,73,4,3,119,5,232,171,243,114,
        7,180,17,138,195,232,167,2,11,237,116,4,38,136,93,16,
        138,221,128,227,32,177,5,210,235,128,62,73,4,3,118,74,
        160,102,4,36,223,128,227,1,116,2,12,32,162,102,4,36,
        16,12,2,10,216,180,1,138,195,232,115,2,11,237,116,4,
        38,136,93,1,254,195,254,195,180,2,138,195,232,96,2,11,
        237,116,4,38,136,93,2,254,195,254,195,180,3,138,195,232,
        77,2,11,237,116,4,38,136,93,3,232,90,2,233,62,6,
        247,38,74,4,81,209,233,209,233,209,233,3,193,138,223,42,
        255,139,203,139,30,76,4,227,4,3,195,226,252,89,139,216,
        128,225,7,176,128,210,232,195,83,80,176,40,82,128,226,254,
        246,226,90,246,194,1,116,3,5,0,32,139,240,88,139,209,
        187,192,2,185,2,3,128,62,73,4,6,114,6,187,128,1,
        185,3,7,34,234,211,234,3,242,138,247,42,201,208,200,2,
        205,254,207,117,248,138,227,210,236,91,195,128,62,73,4,7,
        119,42,82,186,0,184,142,194,90,80,80,232,170,255,210,232,
        34,196,38,138,12,91,246,195,128,117,13,246,212,34,204,10,
        193,38,136,4,88,233,166,5,50,193,235,245,128,62,73,4,
        15,114,13,232,241,248,114,8,36,133,138,224,208,228,10,196,
        80,139,194,232,74,255,182,3,178,206,180,8,232,246,240,82,
        186,0,160,142,194,90,88,138,232,246,197,128,116,10,180,3,
        176,24,232,224,240,235,18,144,178,196,180,2,176,255,232,212,
        240,38,138,7,42,192,38,136,7,178,196,180,2,138,197,36,
        15,232,193,240,38,138,7,176,255,38,136,7,232,182,240,178,
        206,180,3,42,192,232,173,240,180,8,176,255,232,166,240,233,
        44,5,80,82,186,0,160,142,194,90,88,139,194,232,224,254,
        181,7,42,233,43,210,176,0,195,138,205,180,4,82,182,3,
        178,206,232,128,240,90,38,138,39,210,236,128,228,1,195,128,
        62,73,4,7,119,24,82,186,0,184,142,194,90,232,216,254,
        38,138,4,34,196,210,224,138,206,210,192,233,224,4,128,62,
        73,4,15,114,37,232,47,248,114,32,232,165,255,232,185,255,
        10,212,208,228,10,212,176,2,232,174,255,208,228,208,228,10,
        212,208,228,10,212,138,194,233,180,4,232,133,255,232,153,255,
        138,200,210,228,10,212,254,192,60,3,118,241,138,194,233,157,
        4,80,138,62,98,4,83,138,223,50,255,209,227,139,151,80,
        4,91,60,13,116,92,60,10,116,92,60,8,116,76,60,7,
        116,92,180,10,185,1,0,205,16,254,194,58,22,74,4,117,
        53,42,210,58,54,132,4,117,43,232,33,244,160,73,4,60,
        4,114,6,42,255,60,7,117,6,180,8,205,16,138,252,184,
        1,6,43,201,138,54,132,4,138,22,74,4,254,202,205,16,
        88,233,58,4,254,198,180,2,235,244,10,210,116,248,254,202,
        235,244,42,210,235,240,58,54,132,4,117,232,235,187,179,2,
        232,157,239,235,219,138,38,74,4,138,62,98,4,160,135,4,
        36,128,10,6,73,4,95,94,89,89,90,31,7,93,207,80,
        232,98,239,250,236,168,8,116,251,88,178,192,134,196,238,134,
        196,238,176,32,238,251,195,232,6,0,178,192,176,32,238,195,
        232,66,239,236,195,246,6,135,4,2,117,7,128,62,99,4,
        180,116,51,138,224,10,228,117,48,43,237,196,62,168,4,131,
        199,4,38,196,61,140,192,11,199,116,1,69,232,209,255,138,
        227,138,199,232,169,255,232,190,255,11,237,116,9,138,199,42,
        255,3,251,38,136,5,233,149,3,254,204,117,45,43,237,196,
        62,168,4,131,199,4,38,196,61,140,192,11,199,116,1,69,
        232,157,255,180,17,138,199,232,117,255,232,138,255,11,237,116,
        213,131,199,17,38,136,61,233,100,3,254,204,117,64,30,6,
        196,62,168,4,131,199,4,38,196,61,140,192,11,199,116,9,
        31,30,139,242,185,17,0,243,164,7,31,139,218,232,96,255,
        42,228,38,138,7,232,55,255,254,196,67,128,252,16,114,242,
        254,196,38,138,7,232,39,255,232,60,255,233,32,3,254,204,
        117,41,83,232,212,238,131,195,51,38,138,7,91,10,219,117,
        10,128,38,101,4,223,36,247,235,12,144,254,203,117,7,128,
        14,101,4,32,12,8,180,16,232,244,254,233,240,2,80,85,
        83,81,82,6,232,71,238,160,73,4,80,60,7,116,7,198,
        6,73,4,11,235,5,198,6,73,4,12,232,221,238,232,45,
        238,88,162,73,4,7,90,89,91,93,88,10,192,116,23,14,
        7,43,210,185,0,1,254,200,117,7,183,14,189,48,34,235,
        5,183,8,189,96,49,6,31,82,186,0,160,142,194,90,81,
        177,5,211,226,89,10,219,116,8,129,194,0,64,254,203,117,
        248,138,199,42,228,139,250,139,245,227,13,81,139,200,243,164,
        43,248,131,199,32,89,226,243,195,232,210,237,163,133,4,139,
        22,99,4,128,62,73,4,7,117,5,180,20,232,214,237,254,
        200,180,9,232,207,237,254,200,138,232,138,200,254,193,180,1,
        205,16,138,30,73,4,184,94,1,128,251,3,119,8,232,57,
        239,114,3,184,200,0,153,247,54,133,4,72,162,132,4,254,
        192,42,228,247,38,133,4,72,139,22,99,4,180,18,232,148,
        237,160,132,4,254,192,246,38,74,4,209,224,5,0,1,163,
        76,4,232,1,239,233,6,2,60,16,115,55,60,3,115,23,
        232,11,255,232,5,238,232,237,238,232,82,237,139,14,96,4,
        180,1,205,16,233,231,1,117,23,182,3,178,196,184,1,0,
        232,82,237,180,3,138,195,232,75,237,184,3,0,232,69,237,
        233,203,1,60,32,115,38,44,16,60,2,119,243,80,83,232,
        204,254,232,198,237,91,88,138,224,10,228,138,199,116,9,176,
        8,128,252,1,117,2,176,14,42,228,233,44,255,60,48,115,
        106,44,32,117,17,43,210,142,218,250,137,46,124,0,140,6,
        126,0,251,233,136,1,82,43,210,142,218,90,60,3,119,243,
        254,200,116,20,14,7,254,200,117,8,185,14,0,189,48,34,
        235,6,185,8,0,189,96,49,250,137,46,12,1,140,6,14,
        1,251,232,185,236,137,14,133,4,138,195,187,103,32,10,192,
        117,5,138,194,235,9,144,60,3,118,2,176,2,46,215,254,
        200,162,132,4,233,55,1,0,14,25,43,60,48,116,3,233,
        44,1,139,14,133,4,138,22,132,4,128,255,7,119,240,128,
        255,1,119,24,82,43,210,142,218,90,10,255,117,7,196,46,
        124,0,235,26,144,196,46,12,1,235,19,144,128,239,2,138,
        223,42,255,209,227,129,195,183,32,46,139,47,14,7,95,94,
        91,88,88,31,88,88,207,48,34,96,49,96,53,48,48,128,
        251,16,114,81,116,27,128,251,32,116,3,233,208,0,43,210,
        142,218,250,199,6,20,0,167,33,140,14,22,0,251,233,189,
        0,138,62,135,4,128,231,2,208,239,160,135,4,36,96,177,
        5,210,232,138,216,138,14,136,4,138,233,128,225,15,208,237,
        208,237,208,237,208,237,128,229,15,95,94,90,90,90,31,7,
        93,207,233,137,0,233,134,0,60,4,115,249,227,247,83,138,
        223,42,255,209,227,139,183,80,4,91,86,80,184,0,2,205,
        16,88,81,83,80,134,224,38,138,70,0,69,60,13,116,61,
        60,10,116,57,60,8,116,53,60,7,116,49,185,1,0,128,
        252,2,114,5,38,138,94,0,69,180,9,205,16,254,194,58,
        22,74,4,114,17,58,54,132,4,117,7,184,10,14,205,16,
        254,206,254,198,42,210,184,0,2,205,16,235,14,180,14,205,
        16,138,223,42,255,209,227,139,151,80,4,88,91,89,226,162,
        90,60,1,116,9,60,3,116,5,184,0,2,205,16,95,94,
        91,89,90,31,7,93,207,251,30,80,83,81,82,232,78,235,
        128,62,0,5,1,116,99,198,6,0,5,1,180,15,205,16,
        138,204,138,46,132,4,254,197,232,85,0,81,180,3,205,16,
        89,82,51,210,180,2,205,16,180,8,205,16,10,192,117,2,
        176,32,82,51,210,50,228,205,23,90,246,196,41,117,33,254,
        194,58,202,117,223,50,210,138,226,82,232,35,0,90,254,198,
        58,238,117,208,90,180,2,205,16,198,6,0,5,0,235,10,
        90,180,2,205,16,198,6,0,5,255,90,89,91,88,31,207,
        51,210,50,228,176,13,205,23,50,228,176,10,205,23,195,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        126,129,165,129,129,189,153,129,126,0,0,0,0,0,126,255,
        219,255,255,195,231,255,126,0,0,0,0,0,0,108,254,254,
        254,254,124,56,16,0,0,0,0,0,0,16,56,124,254,124,
        56,16,0,0,0,0,0,0,24,60,60,231,231,231,24,24,
        60,0,0,0,0,0,24,60,126,255,255,126,24,24,60,0,
        0,0,0,0,0,0,0,24,60,60,24,0,0,0,0,0,
        255,255,255,255,255,231,195,195,231,255,255,255,255,255,0,0,
        0,0,60,102,66,66,102,60,0,0,0,0,255,255,255,255,
        195,153,189,189,153,195,255,255,255,255,0,0,30,14,26,50,
        120,204,204,204,120,0,0,0,0,0,60,102,102,102,60,24,
        126,24,24,0,0,0,0,0,63,51,63,48,48,48,112,240,
        224,0,0,0,0,0,127,99,127,99,99,99,103,231,230,192,
        0,0,0,0,24,24,219,60,231,60,219,24,24,0,0,0,
        0,0,128,192,224,248,254,248,224,192,128,0,0,0,0,0,
        2,6,14,62,254,62,14,6,2,0,0,0,0,0,24,60,
        126,24,24,24,126,60,24,0,0,0,0,0,102,102,102,102,
        102,102,0,102,102,0,0,0,0,0,127,219,219,219,123,27,
        27,27,27,0,0,0,0,124,198,96,56,108,198,198,108,56,
        12,198,124,0,0,0,0,0,0,0,0,0,254,254,254,0,
        0,0,0,0,24,60,126,24,24,24,126,60,24,126,0,0,
        0,0,24,60,126,24,24,24,24,24,24,0,0,0,0,0,
        24,24,24,24,24,24,126,60,24,0,0,0,0,0,0,0,
        24,12,254,12,24,0,0,0,0,0,0,0,0,0,48,96,
        254,96,48,0,0,0,0,0,0,0,0,0,0,192,192,192,
        254,0,0,0,0,0,0,0,0,0,40,108,254,108,40,0,
        0,0,0,0,0,0,0,16,56,56,124,124,254,254,0,0,
        0,0,0,0,0,254,254,124,124,56,56,16,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        24,60,60,60,24,24,0,24,24,0,0,0,0,102,102,102,
        36,0,0,0,0,0,0,0,0,0,0,0,108,108,254,108,
        108,108,254,108,108,0,0,0,24,24,124,198,194,192,124,6,
        134,198,124,24,24,0,0,0,0,0,194,198,12,24,48,102,
        198,0,0,0,0,0,56,108,108,56,118,220,204,204,118,0,
        0,0,0,48,48,48,96,0,0,0,0,0,0,0,0,0,
        0,0,12,24,48,48,48,48,48,24,12,0,0,0,0,0,
        48,24,12,12,12,12,12,24,48,0,0,0,0,0,0,0,
        102,60,255,60,102,0,0,0,0,0,0,0,0,0,24,24,
        126,24,24,0,0,0,0,0,0,0,0,0,0,0,0,0,
        24,24,24,48,0,0,0,0,0,0,0,0,254,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,0,
        0,0,0,0,2,6,12,24,48,96,192,128,0,0,0,0,
        0,0,124,198,206,222,246,230,198,198,124,0,0,0,0,0,
        24,56,120,24,24,24,24,24,126,0,0,0,0,0,124,198,
        6,12,24,48,96,198,254,0,0,0,0,0,124,198,6,6,
        60,6,6,198,124,0,0,0,0,0,12,28,60,108,204,254,
        12,12,30,0,0,0,0,0,254,192,192,192,252,6,6,198,
        124,0,0,0,0,0,56,96,192,192,252,198,198,198,124,0,
        0,0,0,0,254,198,6,12,24,48,48,48,48,0,0,0,
        0,0,124,198,198,198,124,198,198,198,124,0,0,0,0,0,
        124,198,198,198,126,6,6,12,120,0,0,0,0,0,0,24,
        24,0,0,0,24,24,0,0,0,0,0,0,0,24,24,0,
        0,0,24,24,48,0,0,0,0,0,6,12,24,48,96,48,
        24,12,6,0,0,0,0,0,0,0,0,126,0,0,126,0,
        0,0,0,0,0,0,96,48,24,12,6,12,24,48,96,0,
        0,0,0,0,124,198,198,12,24,24,0,24,24,0,0,0,
        0,0,124,198,198,222,222,222,220,192,124,0,0,0,0,0,
        16,56,108,198,198,254,198,198,198,0,0,0,0,0,252,102,
        102,102,124,102,102,102,252,0,0,0,0,0,60,102,194,192,
        192,192,194,102,60,0,0,0,0,0,248,108,102,102,102,102,
        102,108,248,0,0,0,0,0,254,102,98,104,120,104,98,102,
        254,0,0,0,0,0,254,102,98,104,120,104,96,96,240,0,
        0,0,0,0,60,102,194,192,192,222,198,102,58,0,0,0,
        0,0,198,198,198,198,254,198,198,198,198,0,0,0,0,0,
        60,24,24,24,24,24,24,24,60,0,0,0,0,0,30,12,
        12,12,12,12,204,204,120,0,0,0,0,0,230,102,108,108,
        120,108,108,102,230,0,0,0,0,0,240,96,96,96,96,96,
        98,102,254,0,0,0,0,0,198,238,254,254,214,198,198,198,
        198,0,0,0,0,0,198,230,246,254,222,206,198,198,198,0,
        0,0,0,0,56,108,198,198,198,198,198,108,56,0,0,0,
        0,0,252,102,102,102,124,96,96,96,240,0,0,0,0,0,
        124,198,198,198,198,214,222,124,12,14,0,0,0,0,252,102,
        102,102,124,108,102,102,230,0,0,0,0,0,124,198,198,96,
        56,12,198,198,124,0,0,0,0,0,126,126,90,24,24,24,
        24,24,60,0,0,0,0,0,198,198,198,198,198,198,198,198,
        124,0,0,0,0,0,198,198,198,198,198,198,108,56,16,0,
        0,0,0,0,198,198,198,198,214,214,254,124,108,0,0,0,
        0,0,198,198,108,56,56,56,108,198,198,0,0,0,0,0,
        102,102,102,102,60,24,24,24,60,0,0,0,0,0,254,198,
        140,24,48,96,194,198,254,0,0,0,0,0,60,48,48,48,
        48,48,48,48,60,0,0,0,0,0,128,192,224,112,56,28,
        14,6,2,0,0,0,0,0,60,12,12,12,12,12,12,12,
        60,0,0,0,16,56,108,198,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,
        48,48,24,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,120,12,124,204,204,118,0,0,0,0,0,224,96,
        96,120,108,102,102,102,124,0,0,0,0,0,0,0,0,124,
        198,192,192,198,124,0,0,0,0,0,28,12,12,60,108,204,
        204,204,118,0,0,0,0,0,0,0,0,124,198,254,192,198,
        124,0,0,0,0,0,56,108,100,96,240,96,96,96,240,0,
        0,0,0,0,0,0,0,118,204,204,204,124,12,204,120,0,
        0,0,224,96,96,108,118,102,102,102,230,0,0,0,0,0,
        24,24,0,56,24,24,24,24,60,0,0,0,0,0,6,6,
        0,14,6,6,6,6,102,102,60,0,0,0,224,96,96,102,
        108,120,108,102,230,0,0,0,0,0,56,24,24,24,24,24,
        24,24,60,0,0,0,0,0,0,0,0,236,254,214,214,214,
        198,0,0,0,0,0,0,0,0,220,102,102,102,102,102,0,
        0,0,0,0,0,0,0,124,198,198,198,198,124,0,0,0,
        0,0,0,0,0,220,102,102,102,124,96,96,240,0,0,0,
        0,0,0,118,204,204,204,124,12,12,30,0,0,0,0,0,
        0,220,118,102,96,96,240,0,0,0,0,0,0,0,0,124,
        198,112,28,198,124,0,0,0,0,0,16,48,48,252,48,48,
        48,54,28,0,0,0,0,0,0,0,0,204,204,204,204,204,
        118,0,0,0,0,0,0,0,0,102,102,102,102,60,24,0,
        0,0,0,0,0,0,0,198,198,214,214,254,108,0,0,0,
        0,0,0,0,0,198,108,56,56,108,198,0,0,0,0,0,
        0,0,0,198,198,198,198,126,6,12,248,0,0,0,0,0,
        0,254,204,24,48,102,254,0,0,0,0,0,14,24,24,24,
        112,24,24,24,14,0,0,0,0,0,24,24,24,24,0,24,
        24,24,24,0,0,0,0,0,112,24,24,24,14,24,24,24,
        112,0,0,0,0,0,118,220,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,16,56,108,198,198,254,0,0,0,0,
        0,0,60,102,194,192,192,194,102,60,12,6,124,0,0,0,
        204,204,0,204,204,204,204,204,118,0,0,0,0,12,24,48,
        0,124,198,254,192,198,124,0,0,0,0,16,56,108,0,120,
        12,124,204,204,118,0,0,0,0,0,204,204,0,120,12,124,
        204,204,118,0,0,0,0,96,48,24,0,120,12,124,204,204,
        118,0,0,0,0,56,108,56,0,120,12,124,204,204,118,0,
        0,0,0,0,0,0,60,102,96,102,60,12,6,60,0,0,
        0,16,56,108,0,124,198,254,192,198,124,0,0,0,0,0,
        204,204,0,124,198,254,192,198,124,0,0,0,0,96,48,24,
        0,124,198,254,192,198,124,0,0,0,0,0,102,102,0,56,
        24,24,24,24,60,0,0,0,0,24,60,102,0,56,24,24,
        24,24,60,0,0,0,0,96,48,24,0,56,24,24,24,24,
        60,0,0,0,0,198,198,16,56,108,198,198,254,198,198,0,
        0,0,56,108,56,0,56,108,198,198,254,198,198,0,0,0,
        24,48,96,0,254,102,96,124,96,102,254,0,0,0,0,0,
        0,0,204,118,54,126,216,216,110,0,0,0,0,0,62,108,
        204,204,254,204,204,204,206,0,0,0,0,16,56,108,0,124,
        198,198,198,198,124,0,0,0,0,0,198,198,0,124,198,198,
        198,198,124,0,0,0,0,96,48,24,0,124,198,198,198,198,
        124,0,0,0,0,48,120,204,0,204,204,204,204,204,118,0,
        0,0,0,96,48,24,0,204,204,204,204,204,118,0,0,0,
        0,0,198,198,0,198,198,198,198,126,6,12,120,0,0,198,
        198,56,108,198,198,198,198,108,56,0,0,0,0,198,198,0,
        198,198,198,198,198,198,124,0,0,0,0,24,24,60,102,96,
        96,102,60,24,24,0,0,0,0,56,108,100,96,240,96,96,
        96,230,252,0,0,0,0,0,102,102,60,24,126,24,126,24,
        24,0,0,0,0,248,204,204,248,196,204,222,204,204,198,0,
        0,0,0,14,27,24,24,24,126,24,24,24,24,216,112,0,
        0,24,48,96,0,120,12,124,204,204,118,0,0,0,0,12,
        24,48,0,56,24,24,24,24,60,0,0,0,0,24,48,96,
        0,124,198,198,198,198,124,0,0,0,0,24,48,96,0,204,
        204,204,204,204,118,0,0,0,0,0,118,220,0,220,102,102,
        102,102,102,0,0,0,118,220,0,198,230,246,254,222,206,198,
        198,0,0,0,0,60,108,108,62,0,126,0,0,0,0,0,
        0,0,0,56,108,108,56,0,124,0,0,0,0,0,0,0,
        0,0,48,48,0,48,48,96,198,198,124,0,0,0,0,0,
        0,0,0,0,254,192,192,192,0,0,0,0,0,0,0,0,
        0,0,254,6,6,6,0,0,0,0,0,192,192,198,204,216,
        48,96,220,134,12,24,62,0,0,192,192,198,204,216,48,102,
        206,158,62,6,6,0,0,0,24,24,0,24,24,60,60,60,
        24,0,0,0,0,0,0,0,54,108,216,108,54,0,0,0,
        0,0,0,0,0,0,216,108,54,108,216,0,0,0,0,0,
        17,68,17,68,17,68,17,68,17,68,17,68,17,68,85,170,
        85,170,85,170,85,170,85,170,85,170,85,170,221,119,221,119,
        221,119,221,119,221,119,221,119,221,119,24,24,24,24,24,24,
        24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,248,
        24,24,24,24,24,24,24,24,24,24,24,248,24,248,24,24,
        24,24,24,24,54,54,54,54,54,54,54,246,54,54,54,54,
        54,54,0,0,0,0,0,0,0,254,54,54,54,54,54,54,
        0,0,0,0,0,248,24,248,24,24,24,24,24,24,54,54,
        54,54,54,246,6,246,54,54,54,54,54,54,54,54,54,54,
        54,54,54,54,54,54,54,54,54,54,0,0,0,0,0,254,
        6,246,54,54,54,54,54,54,54,54,54,54,54,246,6,254,
        0,0,0,0,0,0,54,54,54,54,54,54,54,254,0,0,
        0,0,0,0,24,24,24,24,24,248,24,248,0,0,0,0,
        0,0,0,0,0,0,0,0,0,248,24,24,24,24,24,24,
        24,24,24,24,24,24,24,31,0,0,0,0,0,0,24,24,
        24,24,24,24,24,255,0,0,0,0,0,0,0,0,0,0,
        0,0,0,255,24,24,24,24,24,24,24,24,24,24,24,24,
        24,31,24,24,24,24,24,24,0,0,0,0,0,0,0,255,
        0,0,0,0,0,0,24,24,24,24,24,24,24,255,24,24,
        24,24,24,24,24,24,24,24,24,31,24,31,24,24,24,24,
        24,24,54,54,54,54,54,54,54,55,54,54,54,54,54,54,
        54,54,54,54,54,55,48,63,0,0,0,0,0,0,0,0,
        0,0,0,63,48,55,54,54,54,54,54,54,54,54,54,54,
        54,247,0,255,0,0,0,0,0,0,0,0,0,0,0,255,
        0,247,54,54,54,54,54,54,54,54,54,54,54,55,48,55,
        54,54,54,54,54,54,0,0,0,0,0,255,0,255,0,0,
        0,0,0,0,54,54,54,54,54,247,0,247,54,54,54,54,
        54,54,24,24,24,24,24,255,0,255,0,0,0,0,0,0,
        54,54,54,54,54,54,54,255,0,0,0,0,0,0,0,0,
        0,0,0,255,0,255,24,24,24,24,24,24,0,0,0,0,
        0,0,0,255,54,54,54,54,54,54,54,54,54,54,54,54,
        54,63,0,0,0,0,0,0,24,24,24,24,24,31,24,31,
        0,0,0,0,0,0,0,0,0,0,0,31,24,31,24,24,
        24,24,24,24,0,0,0,0,0,0,0,63,54,54,54,54,
        54,54,54,54,54,54,54,54,54,255,54,54,54,54,54,54,
        24,24,24,24,24,255,24,255,24,24,24,24,24,24,24,24,
        24,24,24,24,24,248,0,0,0,0,0,0,0,0,0,0,
        0,0,0,31,24,24,24,24,24,24,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,255,
        255,255,255,255,255,255,240,240,240,240,240,240,240,240,240,240,
        240,240,240,240,15,15,15,15,15,15,15,15,15,15,15,15,
        15,15,255,255,255,255,255,255,255,0,0,0,0,0,0,0,
        0,0,0,0,0,118,220,216,216,220,118,0,0,0,0,0,
        0,0,124,198,252,198,198,252,192,192,64,0,0,0,254,198,
        198,192,192,192,192,192,192,0,0,0,0,0,0,0,254,108,
        108,108,108,108,108,0,0,0,0,0,254,198,96,48,24,48,
        96,198,254,0,0,0,0,0,0,0,0,126,216,216,216,216,
        112,0,0,0,0,0,0,0,102,102,102,102,124,96,96,192,
        0,0,0,0,0,0,118,220,24,24,24,24,24,0,0,0,
        0,0,126,24,60,102,102,102,60,24,126,0,0,0,0,0,
        56,108,198,198,254,198,198,108,56,0,0,0,0,0,56,108,
        198,198,198,108,108,108,238,0,0,0,0,0,30,48,24,12,
        62,102,102,102,60,0,0,0,0,0,0,0,0,126,219,219,
        126,0,0,0,0,0,0,0,3,6,126,219,219,243,126,96,
        192,0,0,0,0,0,28,48,96,96,124,96,96,48,28,0,
        0,0,0,0,0,124,198,198,198,198,198,198,198,0,0,0,
        0,0,0,254,0,0,254,0,0,254,0,0,0,0,0,0,
        0,24,24,126,24,24,0,0,255,0,0,0,0,0,48,24,
        12,6,12,24,48,0,126,0,0,0,0,0,12,24,48,96,
        48,24,12,0,126,0,0,0,0,0,14,27,27,24,24,24,
        24,24,24,24,24,24,24,24,24,24,24,24,24,24,216,216,
        112,0,0,0,0,0,0,24,24,0,126,0,24,24,0,0,
        0,0,0,0,0,0,118,220,0,118,220,0,0,0,0,0,
        0,56,108,108,56,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,24,24,0,0,0,0,0,0,0,0,0,0,
        0,0,0,24,0,0,0,0,0,0,0,15,12,12,12,12,
        12,236,108,60,28,0,0,0,0,216,108,108,108,108,108,0,
        0,0,0,0,0,0,0,112,216,48,96,200,248,0,0,0,
        0,0,0,0,0,0,0,0,124,124,124,124,124,124,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        29,0,0,0,0,36,102,255,102,36,0,0,0,0,0,34,
        0,99,99,99,34,0,0,0,0,0,0,0,0,0,43,0,
        0,0,24,24,24,255,24,24,24,0,0,0,0,45,0,0,
        0,0,0,0,255,0,0,0,0,0,0,0,77,0,0,195,
        231,255,219,195,195,195,195,195,0,0,0,84,0,0,255,219,
        153,24,24,24,24,24,60,0,0,0,86,0,0,195,195,195,
        195,195,195,102,60,24,0,0,0,87,0,0,195,195,195,195,
        219,219,255,102,102,0,0,0,88,0,0,195,195,102,60,24,
        60,102,195,195,0,0,0,89,0,0,195,195,195,102,60,24,
        24,24,60,0,0,0,90,0,0,255,195,134,12,24,48,97,
        195,255,0,0,0,109,0,0,0,0,0,230,255,219,219,219,
        219,0,0,0,118,0,0,0,0,0,195,195,195,102,60,24,
        0,0,0,119,0,0,0,0,0,195,195,219,219,255,102,0,
        0,0,145,0,0,0,0,110,59,27,126,216,220,119,0,0,
        0,155,0,24,24,126,195,192,192,195,126,24,24,0,0,0,
        157,0,0,195,102,60,24,255,24,255,24,24,0,0,0,158,
        0,252,102,102,124,98,102,111,102,102,243,0,0,0,241,0,
        0,24,24,24,255,24,24,24,0,255,0,0,0,246,0,0,
        24,24,0,0,255,0,0,24,24,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,126,129,165,129,189,153,129,126,
        126,255,219,255,195,231,255,126,108,254,254,254,124,56,16,0,
        16,56,124,254,124,56,16,0,56,124,56,254,254,124,56,124,
        16,16,56,124,254,124,56,124,0,0,24,60,60,24,0,0,
        255,255,231,195,195,231,255,255,0,60,102,66,66,102,60,0,
        255,195,153,189,189,153,195,255,15,7,15,125,204,204,204,120,
        60,102,102,102,60,24,126,24,63,51,63,48,48,112,240,224,
        127,99,127,99,99,103,230,192,153,90,60,231,231,60,90,153,
        128,224,248,254,248,224,128,0,2,14,62,254,62,14,2,0,
        24,60,126,24,24,126,60,24,102,102,102,102,102,0,102,0,
        127,219,219,123,27,27,27,0,62,99,56,108,108,56,204,120,
        0,0,0,0,126,126,126,0,24,60,126,24,126,60,24,255,
        24,60,126,24,24,24,24,0,24,24,24,24,126,60,24,0,
        0,24,12,254,12,24,0,0,0,48,96,254,96,48,0,0,
        0,0,192,192,192,254,0,0,0,36,102,255,102,36,0,0,
        0,24,60,126,255,255,0,0,0,255,255,126,60,24,0,0,
        0,0,0,0,0,0,0,0,48,120,120,48,48,0,48,0,
        108,108,108,0,0,0,0,0,108,108,254,108,254,108,108,0,
        48,124,192,120,12,248,48,0,0,198,204,24,48,102,198,0,
        56,108,56,118,220,204,118,0,96,96,192,0,0,0,0,0,
        24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0,
        0,102,60,255,60,102,0,0,0,48,48,252,48,48,0,0,
        0,0,0,0,0,48,48,96,0,0,0,252,0,0,0,0,
        0,0,0,0,0,48,48,0,6,12,24,48,96,192,128,0,
        124,198,206,222,246,230,124,0,48,112,48,48,48,48,252,0,
        120,204,12,56,96,204,252,0,120,204,12,56,12,204,120,0,
        28,60,108,204,254,12,30,0,252,192,248,12,12,204,120,0,
        56,96,192,248,204,204,120,0,252,204,12,24,48,48,48,0,
        120,204,204,120,204,204,120,0,120,204,204,124,12,24,112,0,
        0,48,48,0,0,48,48,0,0,48,48,0,0,48,48,96,
        24,48,96,192,96,48,24,0,0,0,252,0,0,252,0,0,
        96,48,24,12,24,48,96,0,120,204,12,24,48,0,48,0,
        124,198,222,222,222,192,120,0,48,120,204,204,252,204,204,0,
        252,102,102,124,102,102,252,0,60,102,192,192,192,102,60,0,
        248,108,102,102,102,108,248,0,254,98,104,120,104,98,254,0,
        254,98,104,120,104,96,240,0,60,102,192,192,206,102,62,0,
        204,204,204,252,204,204,204,0,120,48,48,48,48,48,120,0,
        30,12,12,12,204,204,120,0,230,102,108,120,108,102,230,0,
        240,96,96,96,98,102,254,0,198,238,254,254,214,198,198,0,
        198,230,246,222,206,198,198,0,56,108,198,198,198,108,56,0,
        252,102,102,124,96,96,240,0,120,204,204,204,220,120,28,0,
        252,102,102,124,108,102,230,0,120,204,224,112,28,204,120,0,
        252,180,48,48,48,48,120,0,204,204,204,204,204,204,252,0,
        204,204,204,204,204,120,48,0,198,198,198,214,254,238,198,0,
        198,198,108,56,56,108,198,0,204,204,204,120,48,48,120,0,
        254,198,140,24,50,102,254,0,120,96,96,96,96,96,120,0,
        192,96,48,24,12,6,2,0,120,24,24,24,24,24,120,0,
        16,56,108,198,0,0,0,0,0,0,0,0,0,0,0,255,
        48,48,24,0,0,0,0,0,0,0,120,12,124,204,118,0,
        224,96,96,124,102,102,220,0,0,0,120,204,192,204,120,0,
        28,12,12,124,204,204,118,0,0,0,120,204,252,192,120,0,
        56,108,96,240,96,96,240,0,0,0,118,204,204,124,12,248,
        224,96,108,118,102,102,230,0,48,0,112,48,48,48,120,0,
        12,0,12,12,12,204,204,120,224,96,102,108,120,108,230,0,
        112,48,48,48,48,48,120,0,0,0,204,254,254,214,198,0,
        0,0,248,204,204,204,204,0,0,0,120,204,204,204,120,0,
        0,0,220,102,102,124,96,240,0,0,118,204,204,124,12,30,
        0,0,220,118,102,96,240,0,0,0,124,192,120,12,248,0,
        16,48,124,48,48,52,24,0,0,0,204,204,204,204,118,0,
        0,0,204,204,204,120,48,0,0,0,198,214,254,254,108,0,
        0,0,198,108,56,108,198,0,0,0,204,204,204,124,12,248,
        0,0,252,152,48,100,252,0,28,48,48,224,48,48,28,0,
        24,24,24,0,24,24,24,0,224,48,48,28,48,48,224,0,
        118,220,0,0,0,0,0,0,0,16,56,108,198,198,254,0,
        120,204,192,204,120,24,12,120,0,204,0,204,204,204,126,0,
        28,0,120,204,252,192,120,0,126,195,60,6,62,102,63,0,
        204,0,120,12,124,204,126,0,224,0,120,12,124,204,126,0,
        48,48,120,12,124,204,126,0,0,0,120,192,192,120,12,56,
        126,195,60,102,126,96,60,0,204,0,120,204,252,192,120,0,
        224,0,120,204,252,192,120,0,204,0,112,48,48,48,120,0,
        124,198,56,24,24,24,60,0,224,0,112,48,48,48,120,0,
        198,56,108,198,254,198,198,0,48,48,0,120,204,252,204,0,
        28,0,252,96,120,96,252,0,0,0,127,12,127,204,127,0,
        62,108,204,254,204,204,206,0,120,204,0,120,204,204,120,0,
        0,204,0,120,204,204,120,0,0,224,0,120,204,204,120,0,
        120,204,0,204,204,204,126,0,0,224,0,204,204,204,126,0,
        0,204,0,204,204,124,12,248,195,24,60,102,102,60,24,0,
        204,0,204,204,204,204,120,0,24,24,126,192,192,126,24,24,
        56,108,100,240,96,230,252,0,204,204,120,252,48,252,48,48,
        248,204,204,250,198,207,198,199,14,27,24,60,24,24,216,112,
        28,0,120,12,124,204,126,0,56,0,112,48,48,48,120,0,
        0,28,0,120,204,204,120,0,0,28,0,204,204,204,126,0,
        0,248,0,248,204,204,204,0,252,0,204,236,252,220,204,0,
        60,108,108,62,0,126,0,0,56,108,108,56,0,124,0,0,
        48,0,48,96,192,204,120,0,0,0,0,252,192,192,0,0,
        0,0,0,252,12,12,0,0,195,198,204,222,51,102,204,15,
        195,198,204,219,55,111,207,3,24,24,0,24,24,24,24,0,
        0,51,102,204,102,51,0,0,0,204,102,51,102,204,0,0,
        34,136,34,136,34,136,34,136,85,170,85,170,85,170,85,170,
        219,119,219,238,219,119,219,238,24,24,24,24,24,24,24,24,
        24,24,24,24,248,24,24,24,24,24,248,24,248,24,24,24,
        54,54,54,54,246,54,54,54,0,0,0,0,254,54,54,54,
        0,0,248,24,248,24,24,24,54,54,246,6,246,54,54,54,
        54,54,54,54,54,54,54,54,0,0,254,6,246,54,54,54,
        54,54,246,6,254,0,0,0,54,54,54,54,254,0,0,0,
        24,24,248,24,248,0,0,0,0,0,0,0,248,24,24,24,
        24,24,24,24,31,0,0,0,24,24,24,24,255,0,0,0,
        0,0,0,0,255,24,24,24,24,24,24,24,31,24,24,24,
        0,0,0,0,255,0,0,0,24,24,24,24,255,24,24,24,
        24,24,31,24,31,24,24,24,54,54,54,54,55,54,54,54,
        54,54,55,48,63,0,0,0,0,0,63,48,55,54,54,54,
        54,54,247,0,255,0,0,0,0,0,255,0,247,54,54,54,
        54,54,55,48,55,54,54,54,0,0,255,0,255,0,0,0,
        54,54,247,0,247,54,54,54,24,24,255,0,255,0,0,0,
        54,54,54,54,255,0,0,0,0,0,255,0,255,24,24,24,
        0,0,0,0,255,54,54,54,54,54,54,54,63,0,0,0,
        24,24,31,24,31,0,0,0,0,0,31,24,31,24,24,24,
        0,0,0,0,63,54,54,54,54,54,54,54,255,54,54,54,
        24,24,255,24,255,24,24,24,24,24,24,24,248,0,0,0,
        0,0,0,0,31,24,24,24,255,255,255,255,255,255,255,255,
        0,0,0,0,255,255,255,255,240,240,240,240,240,240,240,240,
        15,15,15,15,15,15,15,15,255,255,255,255,0,0,0,0,
        0,0,118,220,200,220,118,0,0,120,204,248,204,248,192,192,
        0,252,204,192,192,192,192,0,0,254,108,108,108,108,108,0,
        252,204,96,48,96,204,252,0,0,0,126,216,216,216,112,0,
        0,102,102,102,102,124,96,192,0,118,220,24,24,24,24,0,
        252,48,120,204,204,120,48,252,56,108,198,254,198,108,56,0,
        56,108,198,198,108,108,238,0,28,48,24,124,204,204,120,0,
        0,0,126,219,219,126,0,0,6,12,126,219,219,126,96,192,
        56,96,192,248,192,96,56,0,120,204,204,204,204,204,204,0,
        0,252,0,252,0,252,0,0,48,48,252,48,48,0,252,0,
        96,48,24,48,96,0,252,0,24,48,96,48,24,0,252,0,
        14,27,27,24,24,24,24,24,24,24,24,24,24,216,216,112,
        48,48,0,252,0,48,48,0,0,118,220,0,118,220,0,0,
        56,108,108,56,0,0,0,0,0,0,0,24,24,0,0,0,
        0,0,0,0,24,0,0,0,15,12,12,12,236,108,60,28,
        120,108,108,108,108,0,0,0,112,24,48,96,120,0,0,0,
        0,0,60,60,60,60,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70]
        ,"symbols":{"VIDEO_SETUP":{"o":3},"POR_1":{"o":146},"RD_SWS":{"o":155},"F_BTS":{"o":206},"MK_ENV":{"o":243},"ENV_X":{"o":328,"c":"SET 40x25 COLOR ALPHA"}}}
      • ibm-mda-cga.json
        [0,0,0,0,0,0,0,0,0,0,126,129,165,129,129,189,0,0,126,255,219,255,255,195,0,0,0,54,127,127,127,127,0,0,0,8,28,62,127,62,0,0,
        24,60,60,231,231,231,0,0,24,60,126,255,255,126,0,0,0,0,0,24,60,60,255,255,255,255,255,231,195,195,0,0,0,0,60,102,66,66,255,
        255,255,255,195,153,189,189,0,0,15,7,13,25,60,102,0,0,60,102,102,102,60,24,0,0,63,51,63,48,48,48,0,0,127,99,127,99,99,99,
        0,0,24,24,219,60,231,60,0,0,64,96,112,124,127,124,0,0,1,3,7,31,127,31,0,0,24,60,126,24,24,24,0,0,51,51,51,51,51,51,0,0,127,
        219,219,219,123,27,0,62,99,48,28,54,99,99,0,0,0,0,0,0,0,0,0,0,24,60,126,24,24,24,0,0,24,60,126,24,24,24,0,0,24,24,24,24,24,
        24,0,0,0,0,12,6,127,6,0,0,0,0,24,48,127,48,0,0,0,0,0,96,96,96,0,0,0,0,36,102,255,102,0,0,0,8,28,28,62,62,0,0,0,127,127,62,
        62,28,0,0,0,0,0,0,0,0,0,0,24,60,60,60,24,24,0,99,99,99,34,0,0,0,0,0,54,54,127,54,54,54,12,12,62,99,97,96,62,3,0,0,0,0,97,
        99,6,12,0,0,28,54,54,28,59,110,0,48,48,48,96,0,0,0,0,0,12,24,48,48,48,48,0,0,24,12,6,6,6,6,0,0,0,0,102,60,255,60,0,0,0,24,
        24,24,255,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,1,3,6,12,24,48,0,0,62,99,103,111,123,115,0,0,12,28,60,
        12,12,12,0,0,62,99,3,6,12,24,0,0,62,99,3,3,30,3,0,0,6,14,30,54,102,127,0,0,127,96,96,96,126,3,0,0,28,48,96,96,126,99,0,0,
        127,99,3,6,12,24,0,0,62,99,99,99,62,99,0,0,62,99,99,99,63,3,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,6,12,24,48,96,48,0,0,
        0,0,0,126,0,0,0,0,96,48,24,12,6,12,0,0,62,99,99,6,12,12,0,0,62,99,99,111,111,111,0,0,8,28,54,99,99,127,0,0,126,51,51,51,62,
        51,0,0,30,51,97,96,96,96,0,0,124,54,51,51,51,51,0,0,127,51,49,52,60,52,0,0,127,51,49,52,60,52,0,0,30,51,97,96,96,111,0,0,
        99,99,99,99,127,99,0,0,60,24,24,24,24,24,0,0,15,6,6,6,6,6,0,0,115,51,54,54,60,54,0,0,120,48,48,48,48,48,0,0,195,231,255,219,
        195,195,0,0,99,115,123,127,111,103,0,0,28,54,99,99,99,99,0,0,126,51,51,51,62,48,0,0,62,99,99,99,99,107,0,0,126,51,51,51,62,
        54,0,0,62,99,99,48,28,6,0,0,255,219,153,24,24,24,0,0,99,99,99,99,99,99,0,0,195,195,195,195,195,195,0,0,195,195,195,195,219,
        219,0,0,195,195,102,60,24,60,0,0,195,195,195,102,60,24,0,0,255,195,134,12,24,48,0,0,60,48,48,48,48,48,0,0,64,96,112,56,28,
        14,0,0,60,12,12,12,12,12,8,28,54,99,0,0,0,0,0,0,0,0,0,0,0,0,24,24,12,0,0,0,0,0,0,0,0,0,0,60,6,62,0,0,112,48,48,60,54,51,0,
        0,0,0,0,62,99,96,0,0,14,6,6,30,54,102,0,0,0,0,0,62,99,127,0,0,28,54,50,48,124,48,0,0,0,0,0,59,102,102,0,0,112,48,48,54,59,
        51,0,0,12,12,0,28,12,12,0,0,6,6,0,14,6,6,0,0,112,48,48,51,54,60,0,0,28,12,12,12,12,12,0,0,0,0,0,230,255,219,0,0,0,0,0,110,
        51,51,0,0,0,0,0,62,99,99,0,0,0,0,0,110,51,51,0,0,0,0,0,59,102,102,0,0,0,0,0,110,59,51,0,0,0,0,0,62,99,56,0,0,8,24,24,126,
        24,24,0,0,0,0,0,102,102,102,0,0,0,0,0,195,195,195,0,0,0,0,0,195,195,219,0,0,0,0,0,99,54,28,0,0,0,0,0,99,99,99,0,0,0,0,0,127,
        102,12,0,0,14,24,24,24,112,24,0,0,24,24,24,24,0,24,0,0,112,24,24,24,14,24,0,0,59,110,0,0,0,0,0,0,0,0,8,28,54,99,0,0,30,51,
        97,96,96,97,0,0,102,102,0,102,102,102,0,6,12,24,0,62,99,127,0,8,28,54,0,60,6,62,0,0,102,102,0,60,6,62,0,48,24,12,0,60,6,62,
        0,28,54,28,0,60,6,62,0,0,0,0,60,102,96,102,0,8,28,54,0,62,99,127,0,0,102,102,0,62,99,127,0,48,24,12,0,62,99,127,0,0,102,102,
        0,56,24,24,0,24,60,102,0,56,24,24,0,96,48,24,0,56,24,24,0,99,99,8,28,54,99,99,28,54,28,0,28,54,99,99,12,24,48,0,127,51,48,
        62,0,0,0,0,110,59,27,126,0,0,31,54,102,102,127,102,0,8,28,54,0,62,99,99,0,0,99,99,0,62,99,99,0,48,24,12,0,62,99,99,0,24,60,
        102,0,102,102,102,0,48,24,12,0,102,102,102,0,0,99,99,0,99,99,99,0,99,99,28,54,99,99,99,0,99,99,0,99,99,99,99,0,24,24,126,
        195,192,192,195,0,28,54,50,48,120,48,48,0,0,195,102,60,24,255,24,0,252,102,102,124,98,102,111,0,14,27,24,24,24,126,24,0,12,
        24,48,0,60,6,62,0,12,24,48,0,56,24,24,0,12,24,48,0,62,99,99,0,12,24,48,0,102,102,102,0,0,59,110,0,110,51,51,59,110,0,99,115,
        123,127,111,0,60,108,108,62,0,126,0,0,56,108,108,56,0,124,0,0,0,24,24,0,24,24,48,0,0,0,0,0,0,127,96,0,0,0,0,0,0,127,3,0,96,
        224,99,102,108,24,48,0,96,224,99,102,108,24,51,0,0,24,24,0,24,24,60,0,0,0,0,27,54,108,54,0,0,0,0,108,54,27,54,17,68,17,68,
        17,68,17,68,85,170,85,170,85,170,85,170,221,119,221,119,221,119,221,119,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,248,
        24,24,24,24,24,248,24,248,54,54,54,54,54,54,54,246,0,0,0,0,0,0,0,254,0,0,0,0,0,248,24,248,54,54,54,54,54,246,6,246,54,54,
        54,54,54,54,54,54,0,0,0,0,0,254,6,246,54,54,54,54,54,246,6,254,54,54,54,54,54,54,54,254,24,24,24,24,24,248,24,248,0,0,0,0,
        0,0,0,248,24,24,24,24,24,24,24,31,24,24,24,24,24,24,24,255,0,0,0,0,0,0,0,255,24,24,24,24,24,24,24,31,0,0,0,0,0,0,0,255,24,
        24,24,24,24,24,24,255,24,24,24,24,24,31,24,31,54,54,54,54,54,54,54,55,54,54,54,54,54,55,48,63,0,0,0,0,0,63,48,55,54,54,54,
        54,54,247,0,255,0,0,0,0,0,255,0,247,54,54,54,54,54,55,48,55,0,0,0,0,0,255,0,255,54,54,54,54,54,247,0,247,24,24,24,24,24,255,
        0,255,54,54,54,54,54,54,54,255,0,0,0,0,0,255,0,255,0,0,0,0,0,0,0,255,54,54,54,54,54,54,54,63,24,24,24,24,24,31,24,31,0,0,
        0,0,0,31,24,31,0,0,0,0,0,0,0,63,54,54,54,54,54,54,54,255,24,24,24,24,24,255,24,255,24,24,24,24,24,24,24,248,0,0,0,0,0,0,0,
        31,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,255,240,240,240,240,240,240,240,240,15,15,15,15,15,15,15,15,255,255,255,
        255,255,255,255,0,0,0,0,0,0,59,110,108,0,0,0,0,62,99,126,99,0,0,127,99,99,96,96,96,0,0,0,0,127,54,54,54,0,0,127,99,48,24,
        12,24,0,0,0,0,0,63,108,108,0,0,0,0,51,51,51,51,0,0,0,0,59,110,12,12,0,0,126,24,60,102,102,102,0,0,28,54,99,99,127,99,0,0,
        28,54,99,99,99,54,0,0,30,48,24,12,62,102,0,0,0,0,0,126,219,219,0,0,3,6,126,219,219,243,0,0,28,48,96,96,124,96,0,0,0,62,99,
        99,99,99,0,0,0,127,0,0,127,0,0,0,24,24,24,255,24,24,0,0,48,24,12,6,12,24,0,0,12,24,48,96,48,24,0,0,14,27,27,24,24,24,24,24,
        24,24,24,24,24,24,0,0,24,24,0,0,255,0,0,0,0,0,59,110,0,59,0,56,108,108,56,0,0,0,0,0,0,0,0,0,24,24,0,0,0,0,0,0,0,24,0,15,12,
        12,12,12,12,236,0,216,108,108,108,108,108,0,0,112,216,48,96,200,248,0,0,0,0,0,62,62,62,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        153,129,126,0,0,0,0,0,231,255,126,0,0,0,0,0,62,28,8,0,0,0,0,0,28,8,0,0,0,0,0,0,24,24,60,0,0,0,0,0,24,24,60,0,0,0,0,0,24,0,
        0,0,0,0,0,0,231,255,255,255,255,255,0,0,102,60,0,0,0,0,0,0,153,195,255,255,255,255,0,0,102,102,60,0,0,0,0,0,126,24,24,0,0,
        0,0,0,112,240,224,0,0,0,0,0,103,231,230,192,0,0,0,0,219,24,24,0,0,0,0,0,112,96,64,0,0,0,0,0,7,3,1,0,0,0,0,0,126,60,24,0,0,
        0,0,0,0,51,51,0,0,0,0,0,27,27,27,0,0,0,0,0,54,28,6,99,62,0,0,0,127,127,127,0,0,0,0,0,126,60,24,126,0,0,0,0,24,24,24,0,0,0,
        0,0,126,60,24,0,0,0,0,0,12,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,28,8,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,0,0,0,0,0,0,0,0,0,0,0,0,0,127,54,54,0,0,0,0,0,67,99,62,12,12,0,0,0,24,51,99,0,0,0,0,0,102,
        102,59,0,0,0,0,0,0,0,0,0,0,0,0,0,48,24,12,0,0,0,0,0,6,12,24,0,0,0,0,0,102,0,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,24,48,0,0,
        0,0,0,0,0,0,0,0,0,0,0,24,24,0,0,0,0,0,96,64,0,0,0,0,0,0,99,99,62,0,0,0,0,0,12,12,63,0,0,0,0,0,48,99,127,0,0,0,0,0,3,99,62,
        0,0,0,0,0,6,6,15,0,0,0,0,0,3,99,62,0,0,0,0,0,99,99,62,0,0,0,0,0,24,24,24,0,0,0,0,0,99,99,62,0,0,0,0,0,3,6,60,0,0,0,0,0,24,
        24,0,0,0,0,0,0,24,24,48,0,0,0,0,0,24,12,6,0,0,0,0,0,126,0,0,0,0,0,0,0,24,48,96,0,0,0,0,0,0,12,12,0,0,0,0,0,110,96,62,0,0,
        0,0,0,99,99,99,0,0,0,0,0,51,51,126,0,0,0,0,0,97,51,30,0,0,0,0,0,51,54,124,0,0,0,0,0,49,51,127,0,0,0,0,0,48,48,120,0,0,0,0,
        0,99,51,29,0,0,0,0,0,99,99,99,0,0,0,0,0,24,24,60,0,0,0,0,0,102,102,60,0,0,0,0,0,54,51,115,0,0,0,0,0,49,51,127,0,0,0,0,0,195,
        195,195,0,0,0,0,0,99,99,99,0,0,0,0,0,99,54,28,0,0,0,0,0,48,48,120,0,0,0,0,0,111,62,6,7,0,0,0,0,51,51,115,0,0,0,0,0,99,99,
        62,0,0,0,0,0,24,24,60,0,0,0,0,0,99,99,62,0,0,0,0,0,102,60,24,0,0,0,0,0,255,102,102,0,0,0,0,0,102,195,195,0,0,0,0,0,24,24,
        60,0,0,0,0,0,97,195,255,0,0,0,0,0,48,48,60,0,0,0,0,0,7,3,1,0,0,0,0,0,12,12,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,
        0,0,0,0,0,0,0,0,102,102,59,0,0,0,0,0,51,51,110,0,0,0,0,0,96,99,62,0,0,0,0,0,102,102,59,0,0,0,0,0,96,99,62,0,0,0,0,0,48,48,
        120,0,0,0,0,0,102,62,6,102,60,0,0,0,51,51,115,0,0,0,0,0,12,12,30,0,0,0,0,0,6,6,102,102,60,0,0,0,54,51,115,0,0,0,0,0,12,12,
        30,0,0,0,0,0,219,219,219,0,0,0,0,0,51,51,51,0,0,0,0,0,99,99,62,0,0,0,0,0,51,62,48,48,120,0,0,0,102,62,6,6,15,0,0,0,48,48,
        120,0,0,0,0,0,14,99,62,0,0,0,0,0,24,27,14,0,0,0,0,0,102,102,59,0,0,0,0,0,102,60,24,0,0,0,0,0,219,255,102,0,0,0,0,0,28,54,
        99,0,0,0,0,0,99,63,3,6,60,0,0,0,24,51,127,0,0,0,0,0,24,24,14,0,0,0,0,0,24,24,24,0,0,0,0,0,24,24,112,0,0,0,0,0,0,0,0,0,0,0,
        0,0,99,127,0,0,0,0,0,0,51,30,6,3,62,0,0,0,102,102,59,0,0,0,0,0,96,99,62,0,0,0,0,0,102,102,59,0,0,0,0,0,102,102,59,0,0,0,0,
        0,102,102,59,0,0,0,0,0,102,102,59,0,0,0,0,0,60,12,6,60,0,0,0,0,96,99,62,0,0,0,0,0,96,99,62,0,0,0,0,0,96,99,62,0,0,0,0,0,24,
        24,60,0,0,0,0,0,24,24,60,0,0,0,0,0,24,24,60,0,0,0,0,0,127,99,99,0,0,0,0,0,127,99,99,0,0,0,0,0,48,51,127,0,0,0,0,0,216,220,
        119,0,0,0,0,0,102,102,103,0,0,0,0,0,99,99,62,0,0,0,0,0,99,99,62,0,0,0,0,0,99,99,62,0,0,0,0,0,102,102,59,0,0,0,0,0,102,102,
        59,0,0,0,0,0,99,63,3,6,60,0,0,0,99,54,28,0,0,0,0,0,99,99,62,0,0,0,0,0,126,24,24,0,0,0,0,0,48,115,126,0,0,0,0,0,255,24,24,
        0,0,0,0,0,102,102,243,0,0,0,0,0,24,24,24,216,112,0,0,0,102,102,59,0,0,0,0,0,24,24,60,0,0,0,0,0,99,99,62,0,0,0,0,0,102,102,
        59,0,0,0,0,0,51,51,51,0,0,0,0,0,103,99,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,99,62,0,0,0,0,0,96,96,0,0,0,0,0,0,
        3,3,0,0,0,0,0,0,110,195,6,12,31,0,0,0,103,207,31,3,3,0,0,0,60,60,24,0,0,0,0,0,27,0,0,0,0,0,0,0,108,0,0,0,0,0,0,0,17,68,17,
        68,17,68,0,0,85,170,85,170,85,170,0,0,221,119,221,119,221,119,0,0,24,24,24,24,24,24,0,0,24,24,24,24,24,24,0,0,24,24,24,24,
        24,24,0,0,54,54,54,54,54,54,0,0,54,54,54,54,54,54,0,0,24,24,24,24,24,24,0,0,54,54,54,54,54,54,0,0,54,54,54,54,54,54,0,0,54,
        54,54,54,54,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        24,24,24,24,24,24,0,0,24,24,24,24,24,24,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,24,0,0,24,24,24,24,24,24,0,0,54,54,54,54,54,54,
        0,0,0,0,0,0,0,0,0,0,54,54,54,54,54,54,0,0,0,0,0,0,0,0,0,0,54,54,54,54,54,54,0,0,54,54,54,54,54,54,0,0,0,0,0,0,0,0,0,0,54,
        54,54,54,54,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,24,0,0,54,54,54,54,54,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,24,24,24,24,24,24,0,0,54,54,54,54,54,54,0,0,54,54,54,54,54,54,0,0,24,24,24,24,24,24,0,0,0,0,0,0,0,0,0,0,24,24,24,24,
        24,24,0,0,255,255,255,255,255,255,0,0,255,255,255,255,255,255,0,0,240,240,240,240,240,240,0,0,15,15,15,15,15,15,0,0,0,0,0,
        0,0,0,0,0,108,110,59,0,0,0,0,0,99,126,96,96,32,0,0,0,96,96,96,0,0,0,0,0,54,54,54,0,0,0,0,0,48,99,127,0,0,0,0,0,108,108,56,
        0,0,0,0,0,62,48,48,96,0,0,0,0,12,12,12,0,0,0,0,0,60,24,126,0,0,0,0,0,99,54,28,0,0,0,0,0,54,54,119,0,0,0,0,0,102,102,60,0,
        0,0,0,0,126,0,0,0,0,0,0,0,126,96,192,0,0,0,0,0,96,48,28,0,0,0,0,0,99,99,99,0,0,0,0,0,0,127,0,0,0,0,0,0,24,0,255,0,0,0,0,0,
        48,0,126,0,0,0,0,0,12,0,126,0,0,0,0,0,24,24,24,24,24,24,0,0,216,216,112,0,0,0,0,0,0,24,24,0,0,0,0,0,110,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,60,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,62,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,126,129,165,129,189,153,129,126,126,255,219,255,195,231,255,126,108,254,254,254,124,56,16,0,16,56,
        124,254,124,56,16,0,56,124,56,254,254,214,16,56,16,16,56,124,254,124,16,56,0,0,24,60,60,24,0,0,255,255,231,195,195,231,255,
        255,0,60,102,66,66,102,60,0,255,195,153,189,189,153,195,255,15,3,5,125,132,132,132,120,60,66,66,66,60,24,126,24,63,33,63,
        32,32,96,224,192,63,33,63,33,35,103,230,192,24,219,60,231,231,60,219,24,128,224,248,254,248,224,128,0,2,14,62,254,62,14,2,
        0,24,60,126,24,24,126,60,24,36,36,36,36,36,0,36,0,127,146,146,114,18,18,18,0,62,99,56,68,68,56,204,120,0,0,0,0,126,126,126,
        0,24,60,126,24,126,60,24,255,16,56,124,84,16,16,16,0,16,16,16,84,124,56,16,0,0,24,12,254,12,24,0,0,0,48,96,254,96,48,0,0,
        0,0,64,64,64,126,0,0,0,36,102,255,102,36,0,0,0,16,56,124,254,254,0,0,0,254,254,124,56,16,0,0,0,0,0,0,0,0,0,0,16,56,56,16,
        16,0,16,0,36,36,36,0,0,0,0,0,36,36,126,36,126,36,36,0,24,62,64,60,2,124,24,0,0,98,100,8,16,38,70,0,48,72,48,86,136,136,118,
        0,16,16,32,0,0,0,0,0,16,32,64,64,64,32,16,0,32,16,8,8,8,16,32,0,0,68,56,254,56,68,0,0,0,16,16,124,16,16,0,0,0,0,0,0,0,16,
        16,32,0,0,0,126,0,0,0,0,0,0,0,0,0,16,16,0,0,2,4,8,16,32,64,0,60,66,70,74,82,98,60,0,16,48,80,16,16,16,124,0,60,66,2,12,48,
        66,126,0,60,66,2,28,2,66,60,0,8,24,40,72,254,8,28,0,126,64,124,2,2,66,60,0,28,32,64,124,66,66,60,0,126,66,4,8,16,16,16,0,
        60,66,66,60,66,66,60,0,60,66,66,62,2,4,56,0,0,16,16,0,0,16,16,0,0,16,16,0,0,16,16,32,8,16,32,64,32,16,8,0,0,0,126,0,0,126,
        0,0,16,8,4,2,4,8,16,0,60,66,2,4,8,0,8,0,60,66,94,82,94,64,60,0,24,36,66,66,126,66,66,0,124,34,34,60,34,34,124,0,28,34,64,
        64,64,34,28,0,120,36,34,34,34,36,120,0,126,34,40,56,40,34,126,0,126,34,40,56,40,32,112,0,28,34,64,64,78,34,30,0,66,66,66,
        126,66,66,66,0,56,16,16,16,16,16,56,0,14,4,4,4,68,68,56,0,98,36,40,48,40,36,99,0,112,32,32,32,32,34,126,0,99,85,73,65,65,
        65,65,0,98,82,74,70,66,66,66,0,24,36,66,66,66,36,24,0,124,34,34,60,32,32,112,0,60,66,66,66,74,60,3,0,124,34,34,60,40,36,114,
        0,60,66,64,60,2,66,60,0,127,73,8,8,8,8,28,0,66,66,66,66,66,66,60,0,65,65,65,65,34,20,8,0,65,65,65,73,73,73,54,0,65,34,20,
        8,20,34,65,0,65,34,20,8,8,8,28,0,127,66,4,8,16,33,127,0,120,64,64,64,64,64,120,0,128,64,32,16,8,4,2,0,120,8,8,8,8,8,120,0,
        16,40,68,130,0,0,0,0,0,0,0,0,0,0,0,255,16,16,8,0,0,0,0,0,0,0,60,2,62,66,63,0,96,32,32,46,49,49,46,0,0,0,60,66,64,66,60,0,
        6,2,2,58,70,70,59,0,0,0,60,66,126,64,60,0,12,18,16,56,16,16,56,0,0,0,61,66,66,62,2,124,96,32,44,50,34,34,98,0,16,0,48,16,
        16,16,56,0,2,0,6,2,2,66,66,60,96,32,36,40,48,40,38,0,48,16,16,16,16,16,56,0,0,0,118,73,73,73,73,0,0,0,92,98,66,66,66,0,0,
        0,60,66,66,66,60,0,0,0,108,50,50,44,32,112,0,0,54,76,76,52,4,14,0,0,108,50,34,32,112,0,0,0,62,64,60,2,124,0,16,16,124,16,
        16,18,12,0,0,0,66,66,66,70,58,0,0,0,65,65,34,20,8,0,0,0,65,73,73,73,54,0,0,0,68,40,16,40,68,0,0,0,66,66,66,62,2,124,0,0,124,
        8,16,32,124,0,12,16,16,96,16,16,12,0,16,16,16,0,16,16,16,0,48,8,8,6,8,8,48,0,50,76,0,0,0,0,0,0,0,8,20,34,65,65,127,0,60,66,
        64,66,60,12,2,60,0,68,0,68,68,68,62,0,12,0,60,66,126,64,60,0,60,66,56,4,60,68,62,0,66,0,56,4,60,68,62,0,48,0,56,4,60,68,62,
        0,16,0,56,4,60,68,62,0,0,0,60,64,64,60,6,28,60,66,60,66,126,64,60,0,66,0,60,66,126,64,60,0,48,0,60,66,126,64,60,0,36,0,24,
        8,8,8,28,0,124,130,48,16,16,16,56,0,48,0,24,8,8,8,28,0,66,24,36,66,126,66,66,0,24,24,0,60,66,126,66,0,12,0,124,32,56,32,124,
        0,0,0,51,12,63,68,59,0,31,36,68,127,68,68,71,0,24,36,0,60,66,66,60,0,0,66,0,60,66,66,60,0,32,16,0,60,66,66,60,0,24,36,0,66,
        66,66,60,0,32,16,0,66,66,66,60,0,0,66,0,66,66,62,2,60,66,24,36,66,66,36,24,0,66,0,66,66,66,66,60,0,8,8,62,64,64,62,8,8,24,
        36,32,112,32,66,124,0,68,40,124,16,124,16,16,0,248,76,120,68,79,68,69,230,28,18,16,124,16,16,144,96,12,0,56,4,60,68,62,0,
        12,0,24,8,8,8,28,0,4,8,0,60,66,66,60,0,0,4,8,66,66,66,60,0,50,76,0,124,66,66,66,0,52,76,0,98,82,74,70,0,60,68,68,62,0,126,
        0,0,56,68,68,56,0,124,0,0,16,0,16,32,64,66,60,0,0,0,0,126,64,64,0,0,0,0,0,126,2,2,0,0,66,196,72,246,41,67,140,31,66,196,74,
        246,42,95,130,2,0,16,0,16,16,16,16,0,0,18,36,72,36,18,0,0,0,72,36,18,36,72,0,0,34,136,34,136,34,136,34,136,85,170,85,170,
        85,170,85,170,219,119,219,238,219,119,219,238,16,16,16,16,16,16,16,16,16,16,16,16,240,16,16,16,16,16,240,16,240,16,16,16,
        20,20,20,20,244,20,20,20,0,0,0,0,252,20,20,20,0,0,240,16,240,16,16,16,20,20,244,4,244,20,20,20,20,20,20,20,20,20,20,20,0,
        0,252,4,244,20,20,20,20,20,244,4,252,0,0,0,20,20,20,20,252,0,0,0,16,16,240,16,240,0,0,0,0,0,0,0,240,16,16,16,16,16,16,16,
        31,0,0,0,16,16,16,16,255,0,0,0,0,0,0,0,255,16,16,16,16,16,16,16,31,16,16,16,0,0,0,0,255,0,0,0,16,16,16,16,255,16,16,16,16,
        16,31,16,31,16,16,16,20,20,20,20,23,20,20,20,20,20,23,16,31,0,0,0,0,0,31,16,23,20,20,20,20,20,247,0,255,0,0,0,0,0,255,0,247,
        20,20,20,20,20,23,16,23,20,20,20,0,0,255,0,255,0,0,0,20,20,247,0,247,20,20,20,16,16,255,0,255,0,0,0,20,20,20,20,255,0,0,0,
        0,0,255,0,255,16,16,16,0,0,0,0,255,20,20,20,20,20,20,20,31,0,0,0,16,16,31,16,31,0,0,0,0,0,31,16,31,16,16,16,0,0,0,0,31,20,
        20,20,20,20,20,20,255,20,20,20,16,16,255,16,255,16,16,16,16,16,16,16,240,0,0,0,0,0,0,0,31,16,16,16,255,255,255,255,255,255,
        255,255,0,0,0,0,255,255,255,255,240,240,240,240,240,240,240,240,15,15,15,15,15,15,15,15,255,255,255,255,0,0,0,0,0,0,49,74,
        68,74,49,0,0,60,66,124,66,124,64,64,0,126,66,64,64,64,64,0,0,63,84,20,20,20,20,0,126,66,32,24,32,66,126,0,0,0,62,72,72,72,
        48,0,0,68,68,68,122,64,64,128,0,51,76,8,8,8,8,0,124,16,56,68,68,56,16,124,24,36,66,126,66,36,24,0,24,36,66,66,36,36,102,0,
        28,32,24,60,66,66,60,0,0,98,149,137,149,98,0,0,2,4,60,74,82,60,64,128,12,16,32,60,32,16,12,0,60,66,66,66,66,66,66,0,0,126,
        0,126,0,126,0,0,16,16,124,16,16,0,124,0,16,8,4,8,16,0,126,0,8,16,32,16,8,0,126,0,12,18,18,16,16,16,16,16,16,16,16,16,16,144,
        144,96,24,24,0,126,0,24,24,0,0,50,76,0,50,76,0,0,48,72,72,48,0,0,0,0,0,0,0,24,24,0,0,0,0,0,0,0,24,0,0,0,15,8,8,8,8,200,40,
        24,120,68,68,68,68,0,0,0,48,72,16,32,120,0,0,0,0,0,60,60,60,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,129,165,129,189,153,
        129,126,126,255,219,255,195,231,255,126,108,254,254,254,124,56,16,0,16,56,124,254,124,56,16,0,56,124,56,254,254,214,16,56,
        16,16,56,124,254,124,16,56,0,0,24,60,60,24,0,0,255,255,231,195,195,231,255,255,0,60,102,66,66,102,60,0,255,195,153,189,189,
        153,195,255,15,7,15,125,204,204,204,120,60,102,102,102,60,24,126,24,63,51,63,48,48,112,240,224,127,99,127,99,99,103,230,192,
        24,219,60,231,231,60,219,24,128,224,248,254,248,224,128,0,2,14,62,254,62,14,2,0,24,60,126,24,24,126,60,24,102,102,102,102,
        102,0,102,0,127,219,219,123,27,27,27,0,62,99,56,108,108,56,204,120,0,0,0,0,126,126,126,0,24,60,126,24,126,60,24,255,24,60,
        126,24,24,24,24,0,24,24,24,24,126,60,24,0,0,24,12,254,12,24,0,0,0,48,96,254,96,48,0,0,0,0,192,192,192,254,0,0,0,36,102,255,
        102,36,0,0,0,24,60,126,255,255,0,0,0,255,255,126,60,24,0,0,0,0,0,0,0,0,0,0,48,120,120,48,48,0,48,0,108,108,108,0,0,0,0,0,
        108,108,254,108,254,108,108,0,48,124,192,120,12,248,48,0,0,198,204,24,48,102,198,0,56,108,56,118,220,204,118,0,96,96,192,
        0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0,0,102,60,255,60,102,0,0,0,48,48,252,48,48,0,0,0,0,0,0,0,48,48,96,
        0,0,0,252,0,0,0,0,0,0,0,0,0,48,48,0,6,12,24,48,96,192,128,0,124,198,206,222,246,230,124,0,48,112,48,48,48,48,252,0,120,204,
        12,56,96,204,252,0,120,204,12,56,12,204,120,0,28,60,108,204,254,12,30,0,252,192,248,12,12,204,120,0,56,96,192,248,204,204,
        120,0,252,204,12,24,48,48,48,0,120,204,204,120,204,204,120,0,120,204,204,124,12,24,112,0,0,48,48,0,0,48,48,0,0,48,48,0,0,
        48,48,96,24,48,96,192,96,48,24,0,0,0,252,0,0,252,0,0,96,48,24,12,24,48,96,0,120,204,12,24,48,0,48,0,124,198,222,222,222,192,
        120,0,48,120,204,204,252,204,204,0,252,102,102,124,102,102,252,0,60,102,192,192,192,102,60,0,248,108,102,102,102,108,248,
        0,254,98,104,120,104,98,254,0,254,98,104,120,104,96,240,0,60,102,192,192,206,102,62,0,204,204,204,252,204,204,204,0,120,48,
        48,48,48,48,120,0,30,12,12,12,204,204,120,0,230,102,108,120,108,102,230,0,240,96,96,96,98,102,254,0,198,238,254,254,214,198,
        198,0,198,230,246,222,206,198,198,0,56,108,198,198,198,108,56,0,252,102,102,124,96,96,240,0,120,204,204,204,220,120,28,0,
        252,102,102,124,108,102,230,0,120,204,96,48,24,204,120,0,252,180,48,48,48,48,120,0,204,204,204,204,204,204,252,0,204,204,
        204,204,204,120,48,0,198,198,198,214,254,238,198,0,198,198,108,56,56,108,198,0,204,204,204,120,48,48,120,0,254,198,140,24,
        50,102,254,0,120,96,96,96,96,96,120,0,192,96,48,24,12,6,2,0,120,24,24,24,24,24,120,0,16,56,108,198,0,0,0,0,0,0,0,0,0,0,0,
        255,48,48,24,0,0,0,0,0,0,0,120,12,124,204,118,0,224,96,96,124,102,102,220,0,0,0,120,204,192,204,120,0,28,12,12,124,204,204,
        118,0,0,0,120,204,252,192,120,0,56,108,96,240,96,96,240,0,0,0,118,204,204,124,12,248,224,96,108,118,102,102,230,0,48,0,112,
        48,48,48,120,0,12,0,12,12,12,204,204,120,224,96,102,108,120,108,230,0,112,48,48,48,48,48,120,0,0,0,204,254,254,214,198,0,
        0,0,248,204,204,204,204,0,0,0,120,204,204,204,120,0,0,0,220,102,102,124,96,240,0,0,118,204,204,124,12,30,0,0,220,118,102,
        96,240,0,0,0,124,192,120,12,248,0,16,48,124,48,48,52,24,0,0,0,204,204,204,204,118,0,0,0,204,204,204,120,48,0,0,0,198,214,
        254,254,108,0,0,0,198,108,56,108,198,0,0,0,204,204,204,124,12,248,0,0,252,152,48,100,252,0,28,48,48,224,48,48,28,0,24,24,
        24,0,24,24,24,0,224,48,48,28,48,48,224,0,118,220,0,0,0,0,0,0,0,16,56,108,198,198,254,0,120,204,192,204,120,24,12,120,0,204,
        0,204,204,204,126,0,28,0,120,204,252,192,120,0,126,195,60,6,62,102,63,0,204,0,120,12,124,204,126,0,224,0,120,12,124,204,126,
        0,48,48,120,12,124,204,126,0,0,0,120,192,192,120,12,56,126,195,60,102,126,96,60,0,204,0,120,204,252,192,120,0,224,0,120,204,
        252,192,120,0,204,0,112,48,48,48,120,0,124,198,56,24,24,24,60,0,224,0,112,48,48,48,120,0,198,56,108,198,254,198,198,0,48,
        48,0,120,204,252,204,0,28,0,252,96,120,96,252,0,0,0,127,12,127,204,127,0,62,108,204,254,204,204,206,0,120,204,0,120,204,204,
        120,0,0,204,0,120,204,204,120,0,0,224,0,120,204,204,120,0,120,204,0,204,204,204,126,0,0,224,0,204,204,204,126,0,0,204,0,204,
        204,124,12,248,195,24,60,102,102,60,24,0,204,0,204,204,204,204,120,0,24,24,126,192,192,126,24,24,56,108,100,240,96,230,252,
        0,204,204,120,252,48,252,48,48,248,204,204,250,198,207,198,199,14,27,24,60,24,24,216,112,28,0,120,12,124,204,126,0,56,0,112,
        48,48,48,120,0,0,28,0,120,204,204,120,0,0,28,0,204,204,204,126,0,0,248,0,248,204,204,204,0,252,0,204,236,252,220,204,0,60,
        108,108,62,0,126,0,0,56,108,108,56,0,124,0,0,48,0,48,96,192,204,120,0,0,0,0,252,192,192,0,0,0,0,0,252,12,12,0,0,195,198,204,
        222,51,102,204,15,195,198,204,219,55,111,207,3,24,24,0,24,24,24,24,0,0,51,102,204,102,51,0,0,0,204,102,51,102,204,0,0,34,
        136,34,136,34,136,34,136,85,170,85,170,85,170,85,170,219,119,219,238,219,119,219,238,24,24,24,24,24,24,24,24,24,24,24,24,
        248,24,24,24,24,24,248,24,248,24,24,24,54,54,54,54,246,54,54,54,0,0,0,0,254,54,54,54,0,0,248,24,248,24,24,24,54,54,246,6,
        246,54,54,54,54,54,54,54,54,54,54,54,0,0,254,6,246,54,54,54,54,54,246,6,254,0,0,0,54,54,54,54,254,0,0,0,24,24,248,24,248,
        0,0,0,0,0,0,0,248,24,24,24,24,24,24,24,31,0,0,0,24,24,24,24,255,0,0,0,0,0,0,0,255,24,24,24,24,24,24,24,31,24,24,24,0,0,0,
        0,255,0,0,0,24,24,24,24,255,24,24,24,24,24,31,24,31,24,24,24,54,54,54,54,55,54,54,54,54,54,55,48,63,0,0,0,0,0,63,48,55,54,
        54,54,54,54,247,0,255,0,0,0,0,0,255,0,247,54,54,54,54,54,55,48,55,54,54,54,0,0,255,0,255,0,0,0,54,54,247,0,247,54,54,54,24,
        24,255,0,255,0,0,0,54,54,54,54,255,0,0,0,0,0,255,0,255,24,24,24,0,0,0,0,255,54,54,54,54,54,54,54,63,0,0,0,24,24,31,24,31,
        0,0,0,0,0,31,24,31,24,24,24,0,0,0,0,63,54,54,54,54,54,54,54,255,54,54,54,24,24,255,24,255,24,24,24,24,24,24,24,248,0,0,0,
        0,0,0,0,31,24,24,24,255,255,255,255,255,255,255,255,0,0,0,0,255,255,255,255,240,240,240,240,240,240,240,240,15,15,15,15,15,
        15,15,15,255,255,255,255,0,0,0,0,0,0,118,220,200,220,118,0,0,120,204,248,204,248,192,192,0,252,204,192,192,192,192,0,0,254,
        108,108,108,108,108,0,252,204,96,48,96,204,252,0,0,0,126,216,216,216,112,0,0,102,102,102,102,124,96,192,0,118,220,24,24,24,
        24,0,252,48,120,204,204,120,48,252,56,108,198,254,198,108,56,0,56,108,198,198,108,108,238,0,28,48,24,124,204,204,120,0,0,
        0,126,219,219,126,0,0,6,12,126,219,219,126,96,192,56,96,192,248,192,96,56,0,120,204,204,204,204,204,204,0,0,252,0,252,0,252,
        0,0,48,48,252,48,48,0,252,0,96,48,24,48,96,0,252,0,24,48,96,48,24,0,252,0,14,27,27,24,24,24,24,24,24,24,24,24,24,216,216,
        112,48,48,0,252,0,48,48,0,0,118,220,0,118,220,0,0,56,108,108,56,0,0,0,0,0,0,0,24,24,0,0,0,0,0,0,0,24,0,0,0,15,12,12,12,236,
        108,60,28,120,108,108,108,108,0,0,0,112,24,48,96,120,0,0,0,0,0,60,60,60,60,0,0,0,0,0,0,0,0,0,0] 
        
      • ibm-xebec-1982.json
        [85,170,16,235,30,53,48,48,48,48,53,57,32,40,67,41,67,79,80,89,82,73,71,72,84,32,32,73,66,77,32,49,57,56,50,43,192,142,216,
        250,161,76,0,163,0,1,161,78,0,163,2,1,199,6,76,0,86,2,140,14,78,0,184,96,7,163,52,0,140,14,54,0,199,6,100,0,134,1,140,14,
        102,0,199,6,4,1,231,3,140,14,6,1,251,184,64,0,142,216,198,6,116,0,0,198,6,117,0,0,198,6,67,0,0,198,6,119,0,0,185,37,0,232,
        242,0,115,5,226,249,233,191,0,185,1,0,186,128,0,184,0,18,205,19,115,3,233,175,0,184,0,20,205,19,115,3,233,165,0,199,6,108,
        0,0,0,161,114,0,61,52,18,117,6,199,6,108,0,154,1,228,33,36,254,230,33,232,180,0,114,7,184,0,16,205,19,115,11,161,108,0,61,
        190,1,114,236,235,117,144,185,1,0,186,128,0,184,0,17,205,19,114,103,184,0,9,205,19,114,96,184,0,200,142,192,43,219,184,0,
        15,205,19,114,82,254,6,117,0,186,19,2,176,0,238,186,33,3,236,36,15,60,15,116,6,199,6,108,0,164,1,186,19,2,176,255,238,185,
        1,0,186,129,0,43,192,205,19,114,64,184,0,17,205,19,115,11,161,108,0,61,190,1,114,235,235,47,144,184,0,9,205,19,114,39,254,
        6,117,0,129,250,129,0,115,29,66,235,212,189,15,0,43,192,139,240,185,6,0,144,183,0,46,138,132,104,1,180,14,205,16,70,226,244,
        249,250,228,33,12,1,230,33,251,232,165,0,203,49,55,48,49,13,10,81,82,248,185,0,1,232,7,6,238,232,3,6,236,36,2,116,3,226,242,
        249,90,89,195,43,192,142,216,250,199,6,4,1,231,3,140,14,6,1,199,6,120,0,1,2,140,14,122,0,251,185,3,0,81,43,210,43,192,205,
        19,114,15,184,1,2,43,210,142,194,187,0,124,185,1,0,205,19,89,115,10,128,252,128,116,10,226,222,235,6,144,234,0,124,0,0,43,
        192,43,210,205,19,185,3,0,81,186,128,0,43,192,205,19,114,18,184,1,2,43,219,142,195,187,0,124,186,128,0,185,1,0,205,19,89,
        114,8,161,254,125,61,85,170,116,203,226,215,205,24,207,2,37,2,8,42,255,80,246,25,4,30,184,64,0,142,216,138,38,119,0,80,198,
        6,119,0,0,232,105,5,42,192,238,198,6,119,0,4,232,94,5,42,192,238,198,6,119,0,8,232,83,5,42,192,238,198,6,119,0,12,232,72,
        5,42,192,238,176,7,230,10,250,228,33,12,32,230,33,251,88,136,38,119,0,31,195,128,250,128,115,5,205,64,202,2,0,251,10,228,
        117,9,205,64,42,228,128,250,129,119,239,128,252,8,117,3,233,26,1,83,81,82,30,6,86,87,232,106,0,80,232,136,255,184,64,0,142,
        216,88,138,38,116,0,128,252,1,245,95,94,7,31,90,89,91,202,2,0,56,3,77,3,86,3,96,3,106,3,114,3,121,3,128,3,48,3,39,4,207,4,
        221,4,242,4,56,3,249,4,7,5,21,5,28,5,35,5,42,5,49,5,198,6,116,0,0,81,138,234,128,202,1,254,202,208,226,136,22,119,0,138,213,
        128,226,1,177,5,210,226,10,214,136,22,67,0,89,195,80,184,64,0,142,216,88,128,252,1,117,3,235,85,144,128,234,128,128,250,8,
        115,47,232,194,255,254,201,198,6,66,0,0,136,14,68,0,136,46,69,0,162,70,0,160,118,0,162,71,0,80,138,196,50,228,209,224,139,
        240,61,42,0,88,115,5,46,255,164,156,2,198,6,116,0,1,176,0,195,232,67,4,238,232,63,4,236,36,2,116,6,198,6,116,0,5,195,233,
        218,0,160,116,0,198,6,116,0,0,195,176,71,198,6,66,0,8,233,229,1,176,75,198,6,66,0,10,233,219,1,198,6,66,0,5,233,196,1,198,
        6,66,0,6,235,12,198,6,66,0,7,235,5,198,6,66,0,4,160,68,0,36,192,162,68,0,233,166,1,30,6,83,43,192,142,216,196,30,4,1,184,
        64,0,142,216,128,234,128,128,250,8,115,47,232,27,255,232,223,3,114,39,3,216,38,139,7,45,2,0,138,232,37,0,3,209,232,209,232,
        12,17,138,200,38,138,119,2,254,206,138,22,117,0,43,192,91,7,31,202,2,0,198,6,116,0,7,180,7,42,192,43,210,43,201,249,235,234,
        50,1,2,50,1,0,0,11,0,12,180,40,0,0,0,0,119,1,8,119,1,0,0,11,5,12,180,40,0,0,0,0,50,1,6,128,0,0,1,11,5,12,180,40,0,0,0,0,50,
        1,4,50,1,0,0,11,5,12,180,40,0,0,0,0,198,6,66,0,12,198,6,67,0,0,232,16,0,114,13,198,6,66,0,12,198,6,67,0,32,232,1,0,195,42,
        192,232,25,1,115,1,195,30,43,192,142,216,196,30,4,1,31,232,52,3,114,87,3,216,191,1,0,232,95,0,114,77,191,0,0,232,87,0,114,
        69,191,2,0,232,79,0,114,61,191,4,0,232,71,0,114,53,191,3,0,232,63,0,114,45,191,6,0,232,55,0,114,37,191,5,0,232,47,0,114,29,
        191,7,0,232,39,0,114,21,191,8,0,38,138,1,162,118,0,43,201,232,211,2,236,168,2,117,9,226,246,198,6,116,0,7,249,195,232,181,
        2,236,36,2,117,241,195,232,197,1,114,7,232,167,2,38,138,1,238,195,232,25,0,114,107,198,6,66,0,229,176,71,235,104,232,11,0,
        114,93,198,6,66,0,230,176,75,235,90,160,70,0,60,128,245,195,198,6,66,0,11,235,61,198,6,66,0,14,198,6,70,0,1,176,71,235,62,
        198,6,66,0,15,198,6,70,0,1,176,75,235,48,198,6,66,0,0,235,26,198,6,66,0,1,235,19,198,6,66,0,224,235,12,198,6,66,0,227,235,
        5,198,6,66,0,228,176,2,232,39,0,114,33,235,22,198,6,116,0,9,195,232,87,1,114,245,176,3,232,19,0,114,13,176,3,230,10,228,33,
        36,223,230,33,232,170,1,232,59,0,195,190,66,0,232,27,2,238,232,28,2,238,43,201,232,12,2,236,36,15,60,13,116,9,226,247,198,
        6,116,0,128,249,195,252,185,6,0,232,232,1,172,238,226,249,232,238,1,236,168,1,116,6,198,6,116,0,32,249,195,160,116,0,10,192,
        117,1,195,184,64,0,142,192,43,192,139,248,198,6,66,0,3,42,192,232,171,255,114,35,185,4,0,232,203,0,114,32,232,173,1,236,38,
        136,69,66,71,232,177,1,226,237,232,184,0,114,13,232,154,1,236,168,2,116,15,198,6,116,0,255,249,195,26,6,39,6,106,6,119,6,
        38,138,30,66,0,138,195,36,15,128,227,48,42,255,177,3,211,235,46,255,167,227,5,0,32,64,32,128,0,32,0,64,16,16,2,0,4,64,0,0,
        17,11,1,2,32,32,16,187,2,6,60,9,115,99,46,215,162,116,0,195,187,11,6,139,200,60,10,115,84,46,215,162,116,0,128,225,8,128,
        249,8,117,42,198,6,66,0,13,42,192,232,27,255,114,30,232,62,0,114,25,232,32,1,236,138,200,232,51,0,114,14,232,21,1,236,168,
        1,116,6,198,6,116,0,32,249,138,193,195,187,21,6,60,2,115,19,46,215,162,116,0,195,187,23,6,60,3,115,6,46,215,162,116,0,195,
        198,6,116,0,187,195,81,43,201,232,238,0,236,168,1,117,8,226,249,198,6,116,0,128,249,89,195,80,160,70,0,60,129,88,114,2,249,
        195,81,250,230,12,80,88,230,11,140,192,177,4,211,192,138,232,36,240,3,195,115,2,254,197,80,230,6,138,196,230,6,138,197,36,
        15,230,130,160,70,0,208,224,254,200,138,224,176,255,80,160,66,0,60,229,116,7,60,230,116,3,88,235,17,88,184,4,2,83,42,255,
        138,30,70,0,82,247,227,90,91,72,80,230,7,138,196,230,7,251,89,88,3,193,89,195,251,83,81,6,86,30,43,192,142,216,196,54,4,1,
        31,42,255,38,138,92,9,138,38,66,0,128,252,4,117,6,38,138,92,10,235,9,128,252,227,117,4,38,138,92,11,43,201,232,68,0,236,36,
        32,60,32,116,10,226,244,75,117,241,198,6,116,0,128,232,35,0,236,36,2,8,6,116,0,232,48,0,50,192,238,94,7,89,91,195,80,176,
        32,230,32,176,7,230,10,228,33,12,32,230,33,88,207,186,32,3,80,42,228,160,119,0,3,208,88,195,232,240,255,66,195,232,248,255,
        66,195,232,248,255,66,195,232,243,255,236,80,232,233,255,236,36,2,88,117,22,138,38,67,0,128,228,32,117,4,208,232,208,232,
        36,3,177,4,210,224,42,228,195,249,195,48,56,47,49,54,47,56,50,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
        255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,201] 
        
      • sample1.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <machine id="sample1" class="pc" width="720px">
        	<computer id="pc" name="IBM PC" resume="1"/>
        	<cpu id="cpu8088" model="8088" autostart="true"/>
        	<ram id="ramLow" addr="0x00000" size="0x10000"/>
        	<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>
        	<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1981-04-24.json"/>
        	<keyboard id="keyboard"/>
        	<video id="videoMDA" screenwidth="720" screenheight="350" charset="ibm-mda-cga.json">
        		<menu>
        			<title>Monochrome Display</title>
        		</menu>
        	</video>
        	<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000"/>
        </machine>
        
      • sample2.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <machine id="sample2" class="pc" width="720px">
        	<computer id="pc" name="IBM PC"/>
        	<ram id="ramLow" addr="0x00000" size="0x10000"/>
        	<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>
        	<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1981-04-24.json"/>
        	<keyboard id="keyboard"/>
        	<video id="videoMDA" screenwidth="720" screenheight="350" charset="ibm-mda-cga.json">
        		<menu>
        			<title>Monochrome Display</title>
        		</menu>
        	</video>
        	<cpu id="cpu8088" model="8088" autostart="true" pos="left">
        		<control type="button" binding="run">Run</control>
        	</cpu>
        	<fdc id="fdcNEC" automount='{A: {name: "PC-DOS 1.00", path: "PCDOS100.json"}}' pos="left">
        		<control type="container">
        			<control type="list" binding="listDrives"/>
        			<control type="list" binding="listDisks">
        				<disk path="">None</disk>
        				<disk path="PCDOS100.json">PC-DOS 1.00</disk>
        			</control>
        			<control type="button" binding="loadDrive">Load</control>
        		</control>
        	</fdc>
        	<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000"/>
        </machine>
        
      • sample3a.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <machine id="sample3" class="pc" border="0" width="900px">
        	<computer id="pc" name="IBM PC"/>
        	<cpu id="cpu8088" model="8088" autostart="true"/>
        	<debugger id="debugger"/>
        	<ram id="ramLow" addr="0x00000" size="0x10000"/>
        	<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>
        	<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1981-04-24.json"/>
        	<keyboard id="keyboard"/>
        	<video id="videoMDA" screenwidth="720" screenheight="350" charset="ibm-mda-cga.json">
        		<menu>
        			<title>Monochrome Display</title>
        		</menu>
        	</video>
        	<panel id="panel" padtop="8px">
        		<name>Control Panel</name>
        		<control type="container" width="500px">
        			<control type="textarea" binding="print" width="480px" height="280px"/>
        			<control type="container">
        				<control type="text" binding="debugInput" width="380px"/>
        				<control type="button" binding="debugEnter">Enter</control>
        				<control type="button" binding="clear">Clear</control>
        			</control>
        		</control>
        		<control type="container" width="320px">
        			<control type="register" label="AX" binding="AX" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="BX" binding="BX" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="CX" binding="CX" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="DX" binding="DX" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="SP" binding="SP" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="BP" binding="BP" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="SI" binding="SI" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="DI" binding="DI" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="DS" binding="DS" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="ES" binding="ES" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="SS" binding="SS" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="CS" binding="CS" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="register" label="IP" binding="IP" width="40px" padright="8px" padbottom="8px">0000</control>
        			<control type="flag" label="V" binding="V" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="D" binding="D" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="I" binding="I" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="T" binding="T" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="S" binding="S" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="Z" binding="Z" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="A" binding="A" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="P" binding="P" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="flag" label="C" binding="C" left="0px" width="8px" padright="4px" padbottom="8px">0</control>
        			<control type="status" binding="speed" left="0px" padbottom="8px">Stopped</control>
        			<control type="button" binding="run">Run</control>
        			<control type="button" binding="step">Step</control>
        			<control type="button" binding="reset">Reset</control>
        			<control type="button" binding="setSpeed">Fast</control>
        		</control>
        	</panel>
        	<fdc id="fdcNEC" automount='{A: {name: "PC-DOS 1.00", path: "PCDOS100.json"}, B: {name: "VisiCalc", path: "visicalc.json"}}' width="320px" pos="left" padtop="16px">
        		<control type="container">
        			<control type="list" binding="listDrives"/>
        			<control type="list" binding="listDisks">
        				<disk path="">None</disk>
        				<disk path="PCDOS100.json">PC-DOS 1.00</disk>
        				<disk path="visicalc.json" href="http://www.bricklin.com/history/vclicense.htm" desc="VisiCalc License">VisiCalc</disk>
        			</control>
        			<control type="button" binding="loadDrive">Load</control>
        			<control type="description" binding="descDisk" padleft="8px"/>
        		</control>
        	</fdc>
        	<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000" pos="left">
        		<control type="container" padtop="16px">
        			<control type="switches" label="SW1" binding="sw1" left="0px"/>
        			<control type="switches" label="SW2" binding="sw2" left="0px"/>
        			<control type="description" binding="swdesc" left="0px" padtop="8px"/>
        		</control>
        	</chipset>
        </machine>
        
      • turbo.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <machine id="sample2" class="pc" width="720px">
        
        	<computer id="pc" name="IBM PC" resume="1"/>
        
        	<cpu id="cpu8088" model="8088" autostart="true"/>
        
        	<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
        
        	<rom id="romEGA" addr="0xc0000" size="0x4000" file="ibm-ega.json" notify="videoEGA"/>
        	<rom id="romHDC" addr="0xc8000" size="0x2000" file="ibm-xebec-1982.json"/>
        	<rom id="romEGA" addr="0xc0000" size="0x4000" file="ibm-ega.json" notify="videoEGA"/>
        	<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.10.json"/>
        	<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1982-11-08.json"/>
        
        	<keyboard id="keyboard"/>
        
        	<video id="videoEGA" model="ega" memory="0x20000" screenwidth="640" screenheight="350" autolock="true" pos="center" padding="8px">
            <menu>
              <title>Enhanced Color Display</title>
              <control type="container" pos="right">
                <control type="led" label="Caps" binding="caps-lock" padleft="8px"/>
                <control type="led" label="Num" binding="num-lock" padleft="8px"/>
                <control type="led" label="Scroll" binding="scroll-lock" padleft="8px"/>
                <control type="button" binding="fullScreen" padleft="8px">Full Screen</control>
              </control>
            </menu>
          </video>
        
        	<fdc id="fdcNEC" automount='{A: {name: "MSDOS 3.20", path: "MSDOS320-DISK1.json"}}' pos="right">
        		<control type="container">
        			<control type="list" binding="listDrives"/>
        			<control type="list" binding="listDisks">
        				<disk path="">None</disk>
        				<disk path="MSDOS320-DISK1.json">MSDOS 3.20</disk>
        				<disk path="PCDOS100.json">PC-DOS 1.00</disk>
        				<disk path="fd1.json">Turbo 1</disk>
        				<disk path="fd2.json">Turbo 2</disk>
        			</control>
        			<control type="button" binding="loadDrive">Load</control>
        		</control>
        	</fdc>
        
        	<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",path:"10mb-ega.json",type:3}]'/>
        
        	<chipset id="chipset" model="5160" sw1="01001101"/>
        
        <!--
        	<computer id="pc" name="IBM PC"/>
        	<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
        
        	<rom id="romEGA" addr="0xc0000" size="0x4000" file="ibm-ega.json" notify="videoEGA"/>
        	<rom id="romHDC" addr="0xc8000" size="0x2000" file="ibm-xebec-1982.json"/>
        	<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.10.json"/>
        	<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1982-11-08.json"/>
        
         	<video id="videoEGA" model="ega" memory="0x20000" screenwidth="640" screenheight="350" autolock="true" pos="center" padding="8px">
            <menu>
              <title>Enhanced Color Display</title>
              <control type="container" pos="right">
                <control type="led" label="Caps" binding="caps-lock" padleft="8px"/>
                <control type="led" label="Num" binding="num-lock" padleft="8px"/>
                <control type="led" label="Scroll" binding="scroll-lock" padleft="8px"/>
                <control type="button" binding="fullScreen" padleft="8px">Full Screen</control>
              </control>
            </menu>
          </video>
        
        	<keyboard id="keyboard"/>
        
        	<cpu id="cpu8088" model="8088" autostart="true" pos="right">
        		<control type="button" binding="run">Run</control>
        	</cpu>
        
        	<hdc id="hd1" />
        
        	<fdc id="fdcNEC" automount='{A: {name: "MSDOS 3.20", path: "MSDOS320-DISK1.json"}}' pos="right">
        		<control type="container">
        			<control type="list" binding="listDrives"/>
        			<control type="list" binding="listDisks">
        				<disk path="">None</disk>
        				<disk path="MSDOS320-DISK1.json">MSDOS 3.20</disk>
        				<disk path="PCDOS100.json">PC-DOS 1.00</disk>
        				<disk path="fd1.json">Turbo 1</disk>
        				<disk path="fd2.json">Turbo 2</disk>
        			</control>
        			<control type="button" binding="loadDrive">Load</control>
        		</control>
        	</fdc>
        	<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000"/>
        
        -->
        
        </machine>
        
      • visicalc.json
        [[[{sector:1,data:[1234239211,538987842,3157553,65794,1073758210,130561,65544]},{sector:2,data:[67108862,1610940480,8390400,184590345,3758948544,16781056,318840849,1611989312,25171713,453091353,3759997376,33562369,587341857,1613038144,41953026,721592361,3761046208,50343682,855842865,1614086976,4293932803,4095]},{sector:3,data:[67108862,1610940480,8390400,184590345,3758948544,16781056,318840849,1611989312,25171713,453091353,3759997376,33562369,587341857,1613038144,41953026,721592361,3761046208,50343682,855842865,1614086976,4293932803,4095]},{sector:4,data:[538985302,538976288,5066563,0,0,3087007744,131984,27520,1145128274,538985805,5527636,0,0,1441988608,3686760,97,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229]},{sector:5,data:[229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229]},{sector:6,data:[229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229]},{sector:7,data:[229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229,0,0,0,0,0,0,0,229]},{sector:8,data:[587205097,808464432,2150641712,3633236108,3230584974,1922041484,3161137896,646542236,4259869326,8382567,3892365032,646668259,2296935054,7333888,3899212776,512444074,3822155095,3146734985,3280172380,3540300047,31100139,2313408979,3337130333,2969679171,1113778177,3903741321,108215989,3914781160,2515075066,2220723010,1124075462,2952792006,1510533129,1166558128,2281812128,1149775428,1304623,3909092328,1424498244,1903213312,1903042185,3190337769,3854527757,709150316,725927679,312896,2147566790,3137384643,2847566949,2091008,3127709115,384303175,1834203904,3892621754,512425997,1555723607,432015477,2295564243,4132061959,4151607494,2281746627,2289277958,2289278214,3899950598,48848254,1569843202,109576368,2311287709,2960368670,2735114495,2258617203,3766898912,1969074920,3766900741,1381221278,3898037841,2196266421,3892540509,1583284660,1482381913,3281969286,3909092328,2258567188,3766898912,109576368,2253943710,3905134304,1364394409,1493173992,2839906907,4289652931,1939670666,141869064,2952886248,11004187,1939736202,74760200,3282650506,1939867274,1939932808,863289352,1954940554,109766794,3896013188,11537266,1939867272,401149360,2215021056,3049818737,1904589568,3254700801,109625738,126513540,2315279593,141794310,3909317824,1173749988,57966776,3138749928,662729638,1557391487,99092596,3910905857,2028470325,2316792669,141795846,3893131456,417857873]}]],[[{sector:1,data:[1940044546,3917483904,109641687,3314185119,2155061947,2258599719,3766898912,1483111912,3902726278,109707285,3221779363,1166673524,125097,2753465283,2330197875,2290135272,2322832902,620736965,3766919039,2329970256,141795078,1477080256,3919503494,82378788,3766900736,1963474078,1008447490,1007055425,2969728858,1915763713,2000239622,3909267714,3142647828,11862961,121243057,3768402844,41245177,1166540977,2839906472,192045372,125270588,539754929,2326349192,2856683713,50397891,4276618756,2955507035,2806351872,1939801736,1918851048,1954489353,4283689219,54264752,11534965,3903276424,2646301642,2148499571,2969466089,2651228160,109757299,3221779357,3905094004,2884108298,1939716955,3279949696,3899129832,11534759,2292336008,2289279750,2289279494,3899891206,109731017,3221779356,11540852,1939605128,1935551976,2330495502,3221792581,3314156917,3282519432,2158120320,2158185856,2155060411,3905126415,12281162,1694623746,2310299019,2322835486,3901404741,3894967728,1940784776,2277199676,2298966893,3916671518,1166671913,2025851066,2315940876,16824016,2820573651,2969613683,2820574031,432015475,2854128075,2286923891,2339614214,2322836510,1979661511,2854128398,2919664243,1705175155,2332043753,2339613726,141797902,1405819328,512476042,2313712554,2919664229,3358087539,1940784776,1940659851,3278208232,1399100904,1954940554,427343880,3901364084,3626520752,74901560,1954940554]},{sector:2,data:[3899753915,1944610132,1019710052,3892540674,3898303953,1760126019,2873461348,276348936,1954940554,91799560,1441268596,256356,4167323624,3125119683,276348936,3632926324,2277114039,2312307053,3279137822,1018578314,2332587133,512341085,3150148524,512360447,3150148524,2277141896,8173933,2280884124,2767453434,4203213703,3058040477,1018840458,4261836031,99203661,2289872896,512473669,3347739564,91553596,2887682379,2696659827,2148499571,2155061691,11567119,1904477832,2281746627,2289278982,3279134982,2701560568,2042628211,3049519361,3137384458,126383073,1976434243,2258617337,3766898912,3138041169,3954865121,2333051507,4623082,3247048584,1183378059,4265755392,1508537805,2665514584,1944173507,1942625929,109579440,3905123276,74579975,4177506536,3422980803,1975519347,2289217544,4185153030,3390999491,702835,3405892353,2345895755,24365598,3390998987,109726579,221017036,179427574,2280884124,2767453690,4203213703,1976106653,3422980845,2294873715,4168338438,4285196483,1942750858,930548540,3640003628,3128161723,179925995,4085750784,4093442695,2280884132,3372129786,512486517,179925962,432015360,3390998987,3422980723,2294349427,3279145990,1942750858,141822780,109605552,3287905254,1323877368,4293978623,209305608,132700406,2298458112,3279153414,1356891807,854122630,3766900991,3766919070,3051390544,1919171584,4267977734,2297853381,2322851078,3859187909,2281877619]},{sector:3,data:[3899910662,2253914688,3905134304,2258567201,3766898912,4134791611,41189383,2258622710,3766898912,1509901032,2665514584,2328085898,141813254,4160910784,3926297283,1929460851,4160794628,2315941315,1014228486,4160910180,4184125635,3926297283,1975519347,3859188240,1975519347,32110596,803862784,1963015168,3859188232,602536051,1963080704,3859188254,1929591923,128629522,11980938,109761281,117601253,4177527273,4177527273,1356891807,3303596166,3766900990,1677771678,3451519176,256371,3144931258,179925985,4085750784,4093442695,2280884132,3150159354,65631181,1943517952,4265076819,1944173147,2617248441,4203213703,2275734524,2650441715,85584067,1944454794,58048520,2331930345,141815814,3909318080,109772390,3901387764,1944716938,57796648,2030427113,3906532869,104660408,2666070898,3766918912,3152053840,11891691,3405891722,745794490,2329474566,2617292232,4203213703,2275734524,2650441715,2665514584,11593866,158911998,1183378059,4092150272,3909520127,2328398451,812905222,2160129736,1525163893,2330626816,117571654,1681704960,1680607090,48824753,2332078336,4622570,3455992387,719970165,9299968,904397683,2877693,1183509131,671558144,67598792,3909202276,11599874,1183378059,4265755392,3907089869,2749956224,17492221,3053395689,3120607496,3954930657,109757299,3901387753,1945306762,24438840,2160457411,82315124,4110513152,4026960579,2330495603,141813254]},{sector:4,data:[939947456,233423848,147163648,2315744704,947119622,109757416,2150396916,109766794,2150396906,24438840,1944500931,3044274363,2043543046,3284154371,1183509131,2617719296,1956465482,109757420,3221779434,3237350265,3909317952,149488781,1086387712,1407779700,1944632317,126486709,57982984,1258293481,4067806718,2315545833,1963338949,3901408001,1944716938,109635584,3321263082,3106108800,3221749765,3787115289,2617815411,4203213703,2275734524,2650441715,2298478779,3916687134,3870949411,80054899,3049818630,4085750784,4093508231,2280884132,103587322,797496199,1975582283,109757433,3221779430,109709940,2150921193,1944651400,52291779,1929309160,4225951747,3908859369,3722969871,3892540414,1743387604,50456828,3908571112,109707907,3901387754,1945372298,109635584,2998629321,1944828531,1381172917,2330626897,3221749830,3364495732,3044270522,1364349702,1183509131,149457408,3892540608,1515782235,4265820763,1508275661,1128422234,3396718078,3908832744,3216767845,2316219763,1958742023,583939,1976434251,57403890,1942554250,204269568,1944716936,2977162938,4085750790,2768108167,4203213703,3247086921,3983917064,1942488714,1944651400,12276675,3067447808,1944702976,2329084172,2019830979,2328362500,3504525528,750947030,4261705828,2328922822,1975519425,1540589532,3489662858,74605628,3338560556,2319648648,1022361607,738685540,3909203556,11927554,2319648648,1975519430,149472230]},{sector:5,data:[4145473538,1944454794,58048520,2315445225,141815814,3909318080,1961425743,3926297089,2330495603,678687750,3372648680,1945221747,3111383227,2275147782,4261054451,4085753075,2963143303,3943073792,3037180275,1944173320,126484662,4026589392,124937276,28730412,3053454057,1124567040,3866480126,3681929726,1944585866,611696648,3128158139,129594344,4085750784,4093508231,2280884132,109616634,109736929,3237901257,1942554248,2306077371,2960371486,2969995272,1941551987,1364396213,3128156603,146371514,4085750784,4093442695,2280884132,2159648250,3250213120,2938014579,2969995891,3907553907,192413015,146901593,1374194408,3137369320,146109377,3221749937,41093002,3905971204,4266329992,1508996557,3922773386,512476021,2303423407,3144920862,268334001,126376793,1976434251,1941093265,3111379386,2275147784,4244277235,4085753075,2325609095,745785606,3926296578,4267501683,2331803880,1014228486,739209828,3859187812,2281812083,3899909894,3133406444,3267064811,2969995891,2315302259,432015560,2984807115,2330626816,120193094,125421608,28402692,2969567977,2297072384,1111687238,3782594046,3909520067,2330495603,812905222,3355871464,1941093235,11540149,4265805704,3287905741,504629760,1178350120,2321832528,1014221830,3892670988,3287939576,109757432,205288396,3924297330,1042937,1944454794,1929439464,2294544386,1534322182,109757433,205288396,3387426418,977401,1944454794,1912647400]},{sector:6,data:[109626113,4183520230,3422980803,1913338995,1913404432,4188465155,109605552,904492006,9955328,109710707,2598925296,3271652096,2281708777,2322851334,3899912198,124977289,1944454794,1006635241,2315548017,2289296902,3899912198,4183554323,3422980803,1913338995,1913404432,4183222275,109605552,971600870,3859188224,3532915,109710706,753431536,3271651840,2281708777,2322851334,3899912198,124911643,1944454794,1006635241,2315548017,2289296902,3899912198,4183554239,1920154819,1019475970,2952950640,2328099186,3899909638,109576197,1019442150,2669113968,2253447302,1920154848,3766900745,3916607646,2253914116,2965610208,3138041088,126383073,1976434243,3219702777,4168411640,2331955176,745794054,2044261893,104645377,3135832946,2315302391,1944173512,11586305,4266329992,3925440969,11598628,1944651400,4275955907,3908665320,2145974327,4187220217,3908879336,2330525626,4223789305,3908800488,2699622791,3909520121,2042628211,4185122822,3287913192,4182698067,2969003240,4167886849,134711899,1394309312,1543061992,1392516328,3908799208,1357445487,4182239481,3925573352,3706322910,48782327,1407450880,3120003304,3126525958,2275177441,4244277235,4085753075,2325609095,3926296583,126501747,1944651400,3504915267,806552575,2828894,3303588608,1426661119,16915993,3102262016,1547773183,16977423,2900935424,1612727551,16857351,109757184,3771757546,1952646792,1944454794,225643068,3555199664]},{sector:7,data:[4211206391,4269040571,2281746447,3279153670,3925280488,2984835823,3909520125,2042628211,4153469187,1944454794,58048520,3908535785,1491664824,1296171775,16977942,4207273984,2969070568,4153206785,3908665064,28375165,3908534760,2783508631,4139641083,3908483816,3035167395,322092022,3909022184,1404827240,4276676627,3908798440,109771403,1139307619,4167690487,16713448,0,3909091378,2179529015,4281264383,3908725481,434699564,4200720639,1944651402,1952974472,3908463336,109772358,3221779560,4289726585,3908503016,4025022507,4195281143,3908575976,887684856,3892490490,636024574,4131252475,3909038568,196147148,2683760104,2253447302,4212058336,2665514584,2258567724,3766898912,3908490728,2253977579,20750048,2258571124,3766898912,3908548840,3572102592,4209174783,2968910568,4138788865,3908552424,2850616748,3892424953,3102275234,4207339767,1944716938,2213077200,4153272566,2331485928,1014229510,2316006401,141813254,3909317824,109770330,3921376230,2148005491,3640001140,1356891807,4176011398,3766900981,2298007710,1936976390,3893014536,2162751058,2162738169,3859188476,1728481395,3909519988,1711704179,4114278516,1944454794,1952777864,1944651402,1952712328,1952712330,1551482888,1952908938,209043464,3908414184,28374439,3287682536,3908373480,669578571,4161202429,2431125876,4119718133,3908425193,109770119,103576554,91871478,266928304,3049818624,1944173312,126536449,3637573840]},{sector:8,data:[1952712328,2968834024,3909519360,2419059,1952777866,477478920,1952843402,242794504,1952908938,108314632,3925163752,954791065,4118866421,3908983784,1592326347,1678150398,2290099316,3279153414,2331738088,2289297670,3899942918,3236494540,4253214964,3908881128,2045310068,4187416829,1743258800,4240042229,2331805160,2675172870,2253447302,4108970208,2665514584,443799760,1356891807,1307107462,3766900989,1926811806,4097501187,3925289704,3637510151,770179955,3926297336,2042628211,1946106887,3270915,3908329192,1958477138,4237879315,2331524840,141814278,2316992192,2675173638,2253447302,4102940896,4092068272,3766900980,3909519518,1745259123,2330495604,812902662,3909519592,3790127987,4126009596,3909043689,1072231443,4090161407,3925863400,2028533996,252,3276800,4268157184,2331682792,611576070,1762035840,2281746548,3899910406,190315607,1179059790,2582118400,3895423990,28374051,3908340200,108263052,3925087976,2112418910,4239714547,3908532200,2917725579,1762036479,2285898868,3916720390,4108845059,3926297331,2042628211,1929329668,4086687774,3908864488,3048993679,4224509971,3153282024,3286766558,4167231739,3153553128,133592169,3892933696,837351212,4114475260,1953040010,3901390884,1944651402,109635632,3905123305,233373530,4229097719,3908378345,109771256,2149872617,1953040008,109576368,28341225,3908300264,326366704,1953040010,109592588,3722998889,4160940274,3892315113]}]],[[{sector:1,data:[109769575,3221779434,4282124153,2397635443,4077250815,3908827624,129757951,4215072788,3153245160,870847536,4157794555,3925268200,526516077,138294086,224329473,189137679,1445462017,56433938,840564481,322715409,201261056,1560305182,805241097,1308954881,872415504,221649243,16711944,0,4278190337,0,65792,1111638595,4278194242,555819297,16732961,689594921,4294902114,958356503,16646731,873091925,4294771250,990127652,16515388,270868305,4294593583,1598051327,19147269,222826496,21448024,1029772543,19726368,1109466880,17378653,1193030143,2378524,1079181056,606733663,1661206529,1296849164,929300225,924262402,660013057,237850927,65281,16777216,1493106689,1345082888,1593835850,307516695,939524609,823345951,1375732023,926298687,889192711,1498823200,4278190093,743835738,84560,1310798910,131371,1480008513,88109,235214341,70241,0,65792,4055099647,109605808,3905123302,1957753257,1944454792,4168804547,1944454794,91583292,48854192,2289283072,141813254,3504915392,3859188472,1953709171,4026960388,3766919027,3907028560,2253976011,109616864,3221779430,4172146883,1944454794,74740796,1945110154,1356891807,2833834118,3766900977,3859187870,3284142195,2683571176,2253447302,4052871392,2665514584,4158384323,2328035699,3899909638,309590211,1945110154,1945680616,4161923081,3925856744,1491599385]},{sector:2,data:[3859188472,1945156467,2258569018,3766898912,1492211432,1973346438,4282443782,3892315113,3221815108,4290111683,1088947058,3639133183,4288211191,602408563,256511,150939624,3924345792,3892540159,3905158947,2078865339,3892737791,65666822,4278904832,3905142792,57868265,3288270568,1945587944,109757185,1899787238,3823634037,256510,150923240,921224128,3271652343,1944454794,108360252,3925789160,3454533635,3284142334,74776636,2143380864,2147513064,2155852645,2155855973,2155856229,2323629413,260719407,4130835011,108298437,3913449192,3247046658,2294564232,3321282117,2150986816,4135633229,74719429,2160086400,1947256310,3008200708,147191424,1300236916,3321266373,3271652368,583353738,1166590277,3209021121,3279259648,2305688763,1166720093,3192228036,3766919107,3907028560,2253914433,1166581472,2315302331,376749000,260754177,1127189059,1922436745,3321245578,2147972368,3917460325,1300234244,2680389811,2253447302,1397903840,1922440843,1526731752,141777242,2665514584,387577,2665514584,3825189880,22584,1746339840,403898446,134217728,4278245399,6437,2721280,385613824,134217936,21915671,1124567643,41533448,2800280575,4294044159,3221751690,3905094009,3913547673,806158322,2684326121,2253447302,1098770656,2253973642,199859936,3907553792,3894952303,548464778,24759806,4285262019,2332030441,171752261,3488154485,1964260353,38463747,3275833320,141888828]},{sector:3,data:[2952814824,310307085,1356891807,2800279686,3192228352,108380168,2665514584,3372139513,2344502664,2253962333,126394080,3160246595,1166722040,3192203972,79423626,2026765934,3892808200,1933770773,2316268276,3456024173,2965569913,256032,1405351027,304539729,4139998041,1971372357,1702937345,1173782465,58032325,2332015593,4282172229,2328035701,1569375101,1372711103,2322465979,1160430661,3225810622,3892737152,65622725,1387980800,4139664778,1954594885,1392371718,3892315113,2160284390,2155921485,3279995213,2143315328,3087004905,3766918914,1373668944,870863698,1499093842,2665514584,2667689923,2253447302,1397903840,1532108264,2253936986,1371774688,2108745866,2327201066,1078585544,292997176,46238291,3632971589,2328067466,1376315589,2680379739,2253447302,3026029536,146425226,1962884288,1920810007,3979864067,3048885642,1837611776,1174326017,1305018,146163082,4128011712,1971370309,3766900742,1489238430,2292113542,3026029319,3026028867,4172697086,884491658,2873460991,2875556035,4294949759,1940659849,602409648,3093659901,3110436991,3076882559,2286274175,1837611776,3048496521,3060631677,4290397638,4291684547,2332017129,171752261,2447901556,985893439,141931589,1161480074,3271652789,321619,3286922075,1018578314,2333373565,3221795933,548406388,2303395720,1174320221,4190369974,4240238787,3925791976,770243878,2953540160,4293781519,3909009640,3905158765,24330254,677153731]},{sector:4,data:[2315672713,2258615109,3766898912,1916817896,3893342219,2598960262,304867582,2665514584,4177327848,3766919107,3907028560,2253979329,3739852512,4263555326,3001595461,3058564862,4041786360,4286114047,3966822595,968558194,3904628762,109576368,669545580,3766918912,2967504464,2735114240,1812367987,2042628212,3766900750,3892359326,11598882,1478034665,3281969286,1953113737,266865328,4278839548,2147533800,2138336806,2144494976,1946512872,4127689273,779387072,108392508,3909361384,3913023592,3237355636,2317055040,1021322472,2316793280,3038717125,3150481920,3405860250,2149844874,1300235381,3619389650,774367305,4127440104,1954599493,1022552078,219865984,1006443238,3909032675,456976484,1239944821,63564008,1625883507,4287097342,1929545448,83421193,82314357,1995031296,3766919167,3907028560,91417494,2665514584,2298458307,2339668742,4185156134,3766919107,1021347408,3893261573,4289783812,1953236616,1953113739,3766900931,645972894,3900666990,2109074339,3050401160,1892662143,2966379913,1124567295,4185247230,2305709243,11586909,1421606581,1867692654,2336425864,4622570,1976434242,3026029555,1867652745,2305871803,3278787614,3766918995,2329970256,3221803333,243274357,3900732526,2280193895,3766900797,1108382,1489984907,2292113542,1569276679,3511549647,2337456987,394972509,1261931075,1183509131,3905116672,2867396407,1037690902,3892321512,4108926377,3766918943,2967504464,1829144831]},{sector:5,data:[3766900852,1304734,2670446568,2253447302,2281746656,1484025094,3902726278,317200894,2281746432,3899785734,233373792,256042,3895068649,3941133174,2282795049,3899785734,62598709,4261906546,3041124173,1944173062,1183509131,1975519232,3455992325,3871011445,2330626931,1882980422,28639858,259575294,1183509131,1124567040,3746430538,2315251177,130473309,260066303,1421591424,1125616238,2336438154,4623082,4050968636,2160129619,394925685,2335672899,4623082,141950780,109580464,3277550082,2336039400,512351581,1264284783,1884272971,1843941715,2321242368,931808023,1364410691,1183509131,1019225088,2317186432,4134825222,343179456,3918221657,4127213194,141852864,1323881351,3270912,1125616210,378091402,2337961074,1400139550,2330626907,126353478,58064700,1107301865,512447299,3221779570,3833058073,1864272219,4288080244,3119012697,512475964,2394584175,432015474,3892540115,3905108976,1284193589,677153604,3892365194,3280662666,3498756096,2318554249,3221762628,4282129780,1149901171,1958742067,1933589522,1864272654,1026025588,1953439369,2952793577,1864272833,1124567156,1953439369,3527800515,3894113664,3491969600,512327966,2183039360,1006444031,788340361,1614814719,2447965983,3766919141,2967504464,1946585343,3766900852,3527800478,2670032000,2253447302,2281746656,1484026886,1017045126,3909317923,557580741,3974693749,1965964289,36563203,296812725,21824443,3143259083]},{sector:6,data:[3405860116,1356891807,2253971590,2258607840,3766898912,3388885579,2253916793,4243103456,991750652,3799320378,1953760906,3935037578,805324426,1490254056,1017045126,3893523774,99154189,966191333,4280119101,820580016,1966881792,4176996373,3907317736,1950169472,494485021,3910119679,3247046679,2952794089,911629,149490864,3909857280,3387424771,1930378468,3923774469,2258567183,3766898912,199815088,3766900989,4244957342,2147519721,2340403045,1421528413,432015470,1867692755,126538497,2319419971,4209240280,3050265995,940018431,2282058984,4294306095,3445459907,1413268362,1156056437,1271134716,1125616203,3330946954,91607048,4194054888,1569278915,3478489549,4177504488,976677059,3909066985,24321373,728754371,3053229544,1944173318,3221751690,126487924,1140622824,4134915582,1124074985,3900034558,4142415592,2155113990,2565342580,3905157631,1702952805,1390968759,3445459731,1312605066,394926965,2268564035,2332014035,1961375751,1127188486,3909088489,3689544635,2302886713,1435225437,1125615823,3125491592,3221778004,1387975449,2345861487,394835029,4164388931,516417731,2364015731,1569440763,991422671,243272563,3900732526,2615802747,3479013689,3909058793,108200021,3925568232,1552628106,878479656,3896122856,1569390636,3897248717,15210278,4281723391,3896111848,753473316,3815696639,3893771752,1911089356,4186040571,3924353256,468254487,4177687808,604474051,1971338432,32110596]},{sector:7,data:[3905157376,24379368,980937155,2328714635,1968454851,2320220929,529156871,3624466570,4292864195,4108846707,957671930,2301123723,4038079580,3908985576,925775780,1223229215,3271652351,2301779083,1911043676,3893326623,4125686475,4269140194,3912820201,3287810049,3941089456,3445459958,583763,3892605787,3287940715,3897360571,24328137,1294318275,1929385704,3247096577,334020620,4271630587,674712552,4177469335,2332078531,3935013981,1006651018,4177688063,619219651,1963407999,1166689053,1977104564,3041233425,175503416,1954596342,3921934338,3913416708,3935043536,1107314314,1954595062,3921805045,3739811773,671934464,3892316648,1994930353,4294044151,2330071784,1170646853,3221749927,2258571380,3766898912,1492673256,3919503494,1173751895,460685474,2158183926,3555198580,171436058,2158314998,1676150388,946857994,3892315113,3216717426,916711497,2166481024,1233265263,577708569,4246761243,4246292779,4246292781,4246292771,4246292782,4246292800,555305256,1530804976,544223009,991981325,3288227137,3897155003,1882142309,577187104,1126214210,239345879,848250190,1193337926,1967726971,1303989582,1381160784,1800622019,1580422228,1478541142,1146561281,3169386075,2290135287,3585837637,908322891,2149754125,3908969125,1300297639,62619832,4125157377,3897291707,3909039625,3150182291,3686419425,905504843,4261490265,2281707240,1307156293,911396,108314632,3902096776,2666072466,1270856503]},{sector:8,data:[3894871272,2258624856,3766898912,1491155944,3147751558,129311066,91555642,3372139914,3455994819,3915117173,2258581270,3766898912,1018905994,2953147653,4111722528,804609512,2253946950,1421582048,2315302177,2328560072,4110149895,709436484,3142341191,2800241178,466479142,1558709875,15919415,3895930088,1552615800,677153074,3140953065,1525172872,562971445,1327613522,3980796329,2562457120,645130314,1914279912,1912814602,1011083270,3892884713,2313762458,1252375350,1379216616,3141738934,1387331105,2952790761,2688911427,3909680360,3082492195,890234954,1294062401,3908968923,1702893850,2160295841,3279987021,3892905960,3051945987,888334390,35783169,4228063802,573834273,4263662342,3916238270,247332867,675580525,1964131386,2330495503,1144663620,3909317138,3314155588,58050814,973093865,58134596,2281714665,230565956,4140034413,3916238270,247332867,675580525,1144701182,3909317162,1149763604,1829617192,2968954089,675579905,3911795848,230618777,1236002925,2968948969,1237760912,2952791529,1237367680,3901375880,2582128013,4128892982,1166674613,1962884291,4133152773,3314160821,3908455144,108209411,3909629672,1038628349,581242164,33983231,3766919026,3907028560,1166680689,1954364598,2319813164,1912735368,3127740347,2108715523,1958102314,2315302161,4085750984,4093442695,2280884132,4289764858,1183378059,575858688,4092068723,3766900981,2025851038,401729795,2290135235,2766768709]}]],[[{sector:1,data:[1283963903,1043584232,878060311,591022115,555973421,3908969339,1170669121,1149895307,2294873640,4266002500,4067789645,1843940942,119793973,3916238526,230555651,230577773,3892555885,3857201222,745692695,1971324150,1997945872,1912683555,2294349343,300483652,2001353728,1913011219,1426491407,2281877613,1157497924,944891950,3278704062,1953834633,3139726824,1390955237,596659251,4263862355,3897226682,364586077,611051595,1929602024,80668931,3190459624,57896205,3892359401,12312718,677153024,3908349672,57877462,3120602345,2277188942,2354940269,1929104104,1019316768,1008759808,2332652801,2347297909,4292143360,158663228,3907941771,3353935998,19523839,3909075433,1170604323,1149895307,776208936,1149815038,1308509736,1324316043,484501582,2330883467,1149775428,1829617192,3892379880,1111285278,4142408565,3967126272,2284733578,230565956,1566829,3892331752,1972044001,675610350,1970081214,3753371862,3893794537,109764036,3221779357,2344812917,3899946278,4092125086,4292995389,3892360424,3051880593,3892540183,1149829093,1829617192,3892354537,2062032909,1962884096,1963015254,9431078,3908293352,574414276,2850554741,586541277,1270111627,574359434,921174901,4265994482,3892322025,2733171015,3909317398,1592328093,1894400,2464744307,4133349631,2330526579,3967126527,3190310142,1122528525,3282072320,1446115304,3909035266,3991462267,925713713,1412900942,1665537113,753467156]},{sector:2,data:[3905157394,854127459,374597632,1323828083,2615551,1944188136,4282640387,256195,3892314344,904462125,3709790429,58006332,1023356137,3271652621,3909085417,540859680,742130292,3287810676,3923574760,1095041005,1163313492,1380930627,1347769555,4292035916,3897229242,884679309,580642891,3894862523,57868704,3137534953,3253226249,3892736814,3303617214,682354688,3169387379,3893997568,132706314,1111577841,806176076,571289900,1163267362,1380930627,741346643,3967126400,3892353512,571338982,1431571746,1397050448,2150379533,3907941771,3488088194,572657136,1413563405,741346625,572656944,1552646157,677153070,770749928,221260849,4000680832,976635018,230565956,2336649837,1149955189,675579950,3899461054,1329787026,3900706132,2646334472,2148005491,753468276,3967126272,976635018,242362436,3899461054,1972043820,675610348,1972099445,675610350,1970081214,4032358563,222580549,795339136,708199562,3237881924,3916238270,921175792,33983006,2042628210,4029999123,221260849,3605561378,4029212676,3279949090,821043688,2045280300,3859188239,1919958131,652065600,61931701,91490106,1976172107,652131319,126536449,1356891807,373088390,4024961397,2148348399,3892315881,221310950,3766900864,174057630,3906971368,2148397014,3049304515,3893669892,3353872004,223743471,1936900992,369193332,1229193239,1129742406,1179206688,1061573200,2159034175,3911640762,2159018021,3911643066]},{sector:3,data:[2159018013,3911641530,1085276181,3911640762,1085276173,3911641530,1085276165,2284252346,2306111238,3899947030,1827205487,2953016096,1166721795,3766919080,3907028560,2253970188,2042339040,309543,1134298938,1979310237,2025731,3892509160,24313891,3795139,1019412850,3137959184,3303548913,3271651903,3421029369,2984900656,67175423,1996917254,1967144052,2164688915,3598452,2328035699,2289336582,4168382214,3058010819,3640032556,1954285192,2305656763,2322889246,2322889734,2315302344,2339665670,2339665942,3916724766,2159032771,1953957512,1946144488,3150182402,115886931,669210927,3664701695,2955960808,3905157379,24379315,987490499,4173529459,2766688963,3935001328,1006651018,3892802573,3913477709,3588816880,675676718,19414788,1057171519,675218984,3657361663,1939670666,74760200,3287876272,1946091496,1963146255,3909267461,3901358084,3287876528,3905094832,3925356542,95485888,1085326329,1953957512,2301029562,2306111510,2322889246,2080803009,4282902644,3766919107,3907028560,2253928942,54304480,2328035701,686406632,1011025802,940668159,4128077032,74809351,4294437187,4293454147,1356891807,2958286982,3975997450,552466920,3075309696,3991988352,1330795077,2149595730,3766900827,1979661470,3990677520,542060361,1869771365,250183794,4127689216,125141184,1139636456,3909087977,1609095977,3648710703,4193223400,1631717315,1768300644,1847616876,2154130785,1818838529,1869488229]},{sector:4,data:[1868963956,2154065525,1634030092,1919230052,2154983282,1769101070,1881171316,1702129522,1684370531,1766065536,1713400691,2154589301,1986348054,543515497,544501614,1767994977,1818386796,1344110693,2004054881,543453807,1970365810,1684370025,1699881088,1864393825,544828526,1701603686,2035490688,1835365491,1818846752,1141735525,1702259058,1920099616,58749551,109641600,2380821632,1954397144,1954547702,1894407,1954547338,1933138920,4274120717,109609136,3925439389,2331508737,3279192070,141893692,4269047483,3287833351,175377724,1929390568,3921894146,2142961691,2148005492,28314997,1954416264,1929384424,3150142210,662729855,2281746559,3279191558,2155118523,2109440015,4163883124,1954416266,527745032,1954547338,1356891807,548462726,1543468008,109627274,124941440,4269047483,2682352911,2253447302,1954397152,2253924304,2680397536,2253447302,1954528224,3145672576,260076669,2281746560,1484029446,3281969286,2155118011,3905126183,1055457283,496035886,3894248936,3941080466,1074980909,3892463336,1702887501,334004131,2571471360,158646280,3895664872,451411974,775547187,2141545856,3895312616,11546182,2953069704,88377344,4261436392,1149896004,189020677,1157558898,71600644,1913275450,775350498,3073267689,2320413440,1340645445,3894456383,2464759631,776136733,1189610354,2571471360,158646280,3895640296,3135766585,1166721842,3766919071,3907028560,2253914120,1166581472,1525203871]},{sector:5,data:[2317120301,2258615109,3766898912,2955825640,3934840847,1491978728,3902726278,4140034811,1954587461,3991454465,3940608045,2328035699,2258615109,3766898912,1609043888,518378,2665514584,3907703529,3035164054,423880922,2318205160,3221760324,1149896052,1975519272,10479875,1912735370,846774280,3151667432,126513667,427343880,1126051304,2322851514,619219463,2297072511,1245904966,1954596342,749857006,1837811966,3909136799,4030464440,2151435380,1166681973,1975519391,2504362499,376767804,3044148155,1007127040,1124496639,4108961278,3905260287,585755399,1972386816,3007706650,2316334208,1014104838,3892671743,4218617869,3892315113,3905093637,3150130252,126513667,1979661379,1405351938,1542082792,3905155187,1149954989,1958742057,3007706678,2315940992,3905995845,3186157706,692357866,439091381,3321759102,83884009,2328398362,1958742213,1074548999,1508513000,1074577802,2330594536,3221760068,2280134004,2323689946,3221760324,3232825972,61866677,3271620584,2318135528,1144663364,2315875625,1144663108,3271652648,2301123723,1166683228,3766919099,2967504464,3910461445,3909057512,2253914157,2229903072,733735145,2679850378,2253447302,3893014752,317253878,3766900736,3916032158,1912735370,2286006467,2328046916,171752261,1166674548,1958742175,4099860483,1018905994,2953147653,3916949536,1912735370,58245128,2315275753,1014104582,2317317504,171752261,87823732,2749893749,1277698281,3917488169]},{sector:6,data:[2548563973,3917488873,2419916517,1166680437,1946827963,1963277335,3917539341,758065184,3917488169,1944584198,2150445033,3288252649,1018905994,1007514634,3892933893,673245534,2149591382,3910765544,2280129552,3036917977,3921719554,65536000,3641567488,1356891807,3897680006,1482231522,2292113542,1837631301,139298822,4128201960,1954591557,138802699,2953147776,3905415200,134628746,2315679168,1166579013,1963342854,139296772,3859188288,1919958131,3007706685,2953147776,3902793792,1944454794,28378806,74805564,11600822,74806076,380700086,74806332,397477558,1173800586,91570184,3908429905,3921775193,1166672701,1963146246,50718979,4256894133,134711916,1258649024,4118138366,4263669128,4261640653,109709637,3221779433,1170605177,4273340187,2282309002,3221759301,3455977081,50647286,4263789960,188490829,3455976050,1157809546,642091015,134825354,2282059968,11541573,2317174152,20710981,45091189,2149666176,1006638057,2953409794,558727168,452992,706889098,3221752133,11534969,1008747912,3037032961,527272191,34030986,1160387397,3909318940,359989757,2149664246,1173752180,57966623,2281853417,1166548805,524616224,1173809290,712343585,2031961346,30664963,1173801098,443908131,2149402102,1161434228,2316268322,1157768773,952696347,3909317320,3314155953,1931494714,558233100,3909317760,1166541318,541403680,4226351993,509968385,558233215,2316924032,476941000]},{sector:7,data:[3221800330,209043850,3221809290,1300235892,3372122142,1074284022,1166541685,59674,35407242,1157767237,1827846941,3498705078,205312769,1381197683,4265803957,1930181824,3912206341,1532690420,3053826131,459264,1913273584,3054119943,190721,126353590,4266328240,1541831114,126353584,762638344,3137342393,4256853244,4085750892,4093508231,2280884132,28351994,4262282632,1173752133,108298275,3911337470,1340735134,1827847166,2953469321,205883404,1308500144,3892738074,4125746845,457570047,3038147712,507901485,2315875456,3221753157,816841333,2129184138,507901670,2953147520,3866355760,3894177162,1173749882,91521055,1659383472,4261458150,41426245,3253209461,541982438,2332029161,1474830445,3007706624,3897586816,11872311,79415434,2328559982,3388886000,126489720,809271076,775746420,758968180,548406389,2133067656,594878524,2319696382,1014965255,4263015728,3247064001,259256376,2133067658,125120572,2957756926,3272050720,108580350,3909092584,1405353974,173902673,135021962,2316072128,1308508935,173902092,2952790761,3862358016,4139998041,1954554181,6088963,2149795318,1407779700,592281600,642091648,2953266568,155551745,2969406952,3852462149,2149926390,766510452,3152385256,1569287410,2282532874,1166675013,738243876,4261771274,4294437317,2258569732,3766898912,3221800330,3588752244,3766900965,3855542686,3471392432,3909520101,2025850995,2323625241,141814278]},{sector:8,data:[1007648448,2315678977,2322851334,3895111912,2965628362,3845646400,2315340264,2317296647,3150482152,3455995173,133565816,1124365696,1140848617,2332028905,3900646407,133621009,1124365696,3053449449,1301986048,126536449,91521060,4142409904,652788708,1850915584,3905772937,1569444020,2302886861,126537053,2319419971,1962412248,3479013641,3909096680,2328100833,611372806,1971338432,3895177221,3905152189,971515581,1851046633,3541680136,24072890,3025505235,2286098312,2025850935,7727116,78975664,2582233265,1086387963,2414412661,1979661312,4047291137,1019412853,3892868592,774825158,4140007470,58007744,4143919337,980750528,3137940968,3364506900,3405840565,611453756,544411196,1356891807,126541958,1491355880,1017045126,2953147659,190782,921189808,387556,787023754,2011743204,2151628772,3554928835,2315269608,393537543,4265803957,2148005573,3456039028,4269008570,1259108557,3934979978,1241532040,3288330473,3892317672,2850563881,777817081,3274202249,2328714635,1066025735,2965624970,2215020544,2231797876,2248575092,870693748,2952837353,2231798015,856210292,3892355305,15263191,2181466362,2298458228,2960425990,2231797760,3058010740,58031420,2952830697,2248574976,19327092,1954678410,209240072,2957643195,2231798015,911732,108363836,3913942971,4139450371,355199049,1954678410,108576776,3912435899,2151415821,1874527861,256290,3894568891,2258567233,3766898912]}]],[[{sector:1,data:[1491429096,3281969286,1954940554,477413384,3716868234,2226782391,2966618481,1963407904,3455994629,3314218869,1954940552,2967870185,2248574976,2298458228,2306114566,2960426782,3125119231,1929389032,216646401,124928,387267,4175762152,2298458307,3899950598,2213073487,345565204,109757432,3221779357,3706193273,3905157631,4000514098,1929474792,3498108970,2305656763,2108732509,2327201160,141657094,2316399808,4268852230,2215020744,3892671601,4017291537,3288317929,3897168827,1273500729,589752340,4248038427,2153265165,3925816262,367525943,877658403,53783810,3842257886,1911095091,942336206,2045297656,4177228544,13625539,3287874419,1018578314,3892671869,3287824409,4175742440,1954921411,3221751690,1166673524,256425,3903341962,540855864,2134640498,99156851,937879552,2258617336,3766898912,1954940554,1166723210,2968029878,4175964285,2101135360,3471313266,3766900791,1489238174,3902726278,3287868357,1929381864,934799363,2108736504,1974879546,2344876290,2320217181,3766918919,3907028560,109765710,3221779590,3364495220,3632922805,2243559607,2329084273,1272154871,2280884124,2767453690,4203213703,3766900893,2231797918,2248575601,2294349428,4168386054,518339,1525154675,2328098871,141854214,4177688000,2231798467,3813402737,1954940554,11913354,2322695610,1138395902,2280884124,2767453434,4203213703,2248575645,2294873716,4168386054,2215021251,2042628212,3444500483,3909017576]},{sector:2,data:[11587740,1954743944,4160752616,1954743946,24756232,512476153,3825169543,3894656488,3454533649,590080035,1021683688,3909317887,2311311567,3144976678,1569287764,1901116365,3906166153,3102264532,2722494160,2333766784,2322486302,2160129543,512429429,126512726,58064700,4177314536,3445459907,3795027,3443886683,58054712,3909092329,1569456107,1019448019,1259893840,139134858,2299164096,126538589,24509500,20179139,4177518569,3892555971,3236495579,3844532479,1971372278,4235585543,3271568872,24510268,1086387907,686294645,1894656,3762090020,2062091125,1021322240,3909318080,132645140,2301004544,3491621236,1137532299,3445459267,3840075971,2319648650,3906505279,317203337,239790288,3905094003,2562394772,178548,126536449,41533448,4131636217,41189383,126534648,3121841640,112292838,3388869813,4265810808,2668071629,2253447302,2340365536,4622570,3766900810,2042628254,3905157345,3353928836,3766918916,3051390544,3150481920,3405860099,3221751690,1971372278,6547459,2665514584,58001724,1006646761,3909317898,1676148782,2328398591,1849480005,1357448053,3051475199,1285274368,1435224833,2617422291,4203213703,2275734524,2650441715,3285407113,1020478858,3271652688,1272143243,139134858,3892540608,126493048,108396348,3906166153,2344877846,3280655197,359944252,134711883,1259238592,2329107849,3908602399,3806977928,3790128127,4277201123,3364495140,2595946677,2328559949]},{sector:3,data:[3152138247,3405860029,2319658890,618498623,3892606240,1405345628,3908994792,1918567299,4273596675,3286191080,48853424,2675093504,2253447302,3470256352,2665514584,1944454792,3404223427,1569283022,2281746687,1569391173,2319664077,1066025735,126539914,393605180,1929546216,4276667137,2332652034,32046941,4294109663,4261421545,1166672453,3766918914,2346747472,3897818973,2304507415,2253979485,1166581472,3738888194,1929578216,3988505521,4288538887,3892734395,3169386391,38111950,3150914025,2296907757,38111999,3922662888,3921400636,1392553993,1356891807,1055449222,3766900942,3909519518,2953229683,1944173155,1183378059,3455992320,1068562037,1944716936,4283623771,2953443259,4291553791,3555197360,3892424910,2565394126,3487688957,3906138088,3001601948,42592461,1156121459,30205954,3905094003,1055392413,3893129730,2598948799,3520194767,3909087209,57803367,3271697129,3908919016,1618084443,1912709608,38922331,1173771891,1349877761,1926586600,1702937345,48791299,3894505986,2258620528,3766898912,1489893096,1990123654,4217211656,132714494,55410688,4292536704,4140687080,1971323717,3447449610,109605296,2344842214,268368733,4278017419,4250069255,3892426473,2260458421,4284320020,3288240104,3151732456,1569264809,4269992191,4242139331,1929500392,2289217544,4185122310,5236931,4226286963,2328099072,2675172870,2253447302,3447580896,2665514584,443904828,3908872936,91423143,4194184936]},{sector:4,data:[14674115,619185522,3921934846,3538419735,3892671232,3287940631,3908863720,91357571,4194175720,3905157315,3905147840,1894317171,3892867841,4108897587,3905157629,91422870,4177565160,3909520067,2366015603,3456493684,3555199091,8448253,3982329,2377845620,2148005492,149488501,4257015808,4177553896,2330495683,2675215110,2253447302,2349239008,3766919028,2329970256,2332461253,1955380084,3145672576,1569274296,4255836415,4134833339,58032135,1493008872,2292113542,1484033030,2292113542,3279194886,4134833339,57966599,3150751465,268334219,2632516468,1955380172,3279949696,3285382120,2298898875,1709768541,3905157373,2162752443,11921868,3892375528,1836195729,2301123723,3890756700,3771918587,1568010300,3908820456,1994916052,2337436191,1552492636,4224510014,977159306,259341380,3127719611,1821011253,1829682751,3137342697,918187317,1047300717,2288848318,1569260653,4250241531,977028234,91373124,48889776,2281811968,230555973,1012697965,4163394697,3427854531,2348513001,126548829,2147567094,1161432180,4177687300,3925848259,1161429001,4177688068,2667688131,2253447302,1776833504,4261638907,1482359365,43966598,4161243143,3761170627,1964032246,7137286,4177527529,1963605187,4214024197,154977272,602407797,3334732283,2315422533,1820998724,1044678718,1178365064,1972063742,3914223342,1569455930,1124567757,3632938890,2705716931,3271652480,3894239464,12054516,565202867,788850771]},{sector:5,data:[3896184763,2958757353,789375008,3908022505,3186100609,3757304075,255594276,1569394549,1125616333,1112225674,1183509131,954778368,16181469,2680357235,2253447302,463399136,976965645,3909040976,2253970719,3287916256,1490884328,4171161734,911555,3905845225,1496128380,996748091,6285567,3905094003,1144833772,1161561204,3538440053,3335186650,756767720,2821405592,1001095739,4282094363,3894190056,3287927507,3906647272,57868428,4143968489,780760,3906643176,57868412,2684346601,2253447302,18344160,2665514584,2282308866,2397571397,3150182400,1927826683,3271652123,3905566952,3521642589,1011249691,2147972398,3917486413,254083056,1166677365,1963736076,424015372,4261639296,3655928141,4127240447,1971329349,155581955,1308551306,2332850188,797444701,173902147,4261413865,3051949125,3139839,4273718264,4288604236,3905094003,3049507615,976915,1166544048,1827846924,3272236425,4005240757,2281746540,3455992583,3905157493,1166723437,29423113,1166689140,1975519245,156106268,3127702459,196701426,4085750784,4093442695,2280884132,468295162,155581952,3127704763,196701437,4085750784,4093508231,2280884132,11574778,1183378059,155552256,109639888,112554986,3127702203,126514150,3364544720,3771785424,37996544,3934995207,1241532040,3866480126,3905713129,3871014753,1827847027,3934979761,1241532042,170655925,3321759096,83884009,1127188490,4265805704,2330165193,7596550]},{sector:6,data:[155551936,135087498,2317710784,3221753413,4089126516,1827846764,2617248697,4203213703,2275734524,2650441715,1166540976,156106264,3680889027,3906805736,225574937,219783144,1312439630,3924361021,3676170266,417907705,3905157339,484973423,3766918912,2346747472,1552492636,459139122,1476864232,1939792006,449636355,426174659,2168322432,1967013257,4181458237,1480071997,3302156542,752402664,692357184,2328145384,20752965,1166684021,3635144873,1009337482,3909317123,4072348295,3067120189,2329084160,2839906871,4026548268,57819196,2283433705,2011703620,4267370692,1625883507,675579930,58048520,1008359145,3909317375,1166678607,1964719273,440789251,436257784,2187873844,3076882588,3674466431,3906968808,1441328640,3974031556,991481832,454770208,1042710590,3905157375,3287932891,3911132392,3236429830,59875,3909078761,2850610212,1480071960,3763202303,1592264307,4293847519,2346761448,1552492636,412018740,977175309,1563311747,1051269950,3770804479,1760036467,4292667871,219706344,1966751349,1048189758,441313535,1357431800,3746425055,2969551337,3692620016,3336544488,2315422533,1149776964,910460978,2337144390,1313796469,3906990056,3437821976,3743541503,3909059561,1552669604,844925224,3923761128,1702952838,1284210660,911510324,4030252426,3247052917,175296568,2162445696,2285259912,230372436,3764226413,3247096824,410374200,4030252426,1300236914,1820885220,896829495,2305625787]},{sector:7,data:[3287867485,1569440761,147294852,3271652800,4263774090,130470026,931808000,2298480582,3899952662,4218617863,1922041486,1829617347,1955464842,101380132,259290255,1955470987,2315182976,3514076702,2328071915,611618310,2399537904,4177687924,2383842243,770200180,1435193857,214076032,3905980929,2304377126,1517587990,2340443529,1098029070,1922567817,1569440760,2384365952,1829617268,1955464842,101380132,259290255,1955470987,2315182976,3514076702,2328071915,611618310,2399537904,3892737396,24313876,13822147,2340443529,1232246798,1922567817,1273545720,4177688320,1370307,3905045480,3263824052,3933471012,3892314298,3287810222,3117112715,3221749762,1569311513,2384366027,1829617268,1955464842,101380132,259290255,1955470987,2315182976,3514076702,3284373227,1003183499,3200502109,1569418509,4276322447,2307874185,2339672094,230600285,47725,1922569865,2749946508,3377826048,2332037306,3511929181,1539542763,1002555368,1937018910,4280018964,443942,3247177984,2210500161,3823698627,1829617407,2298478779,1569423453,29590473,2315182976,1569442141,3411904911,1922041486,2334573560,3271557142,1476902,99140352,2416348672,1381221234,47953,3111426234,102629392,2275149599,4244277235,4085753075,513669767,1493638918,1405311834,2562412882,47732,2617249977,4203213703,2275734524,2650441715,3277544025,3280163155,3540300047,3657521643,3286421851,42681798,975717514,108146756]},{sector:8,data:[3916238270,4266000394,3967126349,3287830094,3899461054,1284184006,501764400,158554368,2305625534,401092684,3766918935,3907028560,786962368,3766900743,1170654110,1157497483,4177687848,809798339,1932018746,675580419,1982481466,2294544642,1149773892,1308509760,1323005323,2315302478,3271436628,2315255995,3905955908,3540058739,3604013776,4067803144,3620791248,2438302547,3666664075,3542737617,3822183377,22733777,3666629587,2348762600,2438302682,1996545256,3287898883,3901707659,57802961,2311321947,2304493917,2900902492,2925366270,1922702985,2298478779,971515996,12314626,2344812915,1128498269,2340707721,2666049109,2347397632,1435189852,1078758318,2317896841,1958742209,2328493643,1958742213,2966289981,126372608,2315749451,809777857,3314166131,1932608570,2336901666,4623082,11536264,1183378059,2336375552,4623082,11536264,1183378059,3913960192,1821048765,4289718593,2302827659,1284222557,24569920,2345227659,3520761050,3520276962,3521368547,2585168867,432015474,3489969619,4275818735,2281207245,2552138707,432015474,2552138195,2328098930,1961900231,3280651009,2344865848,512328797,2830857358,2148499572,1955468939,1955731081,4134840507,108363783,3925729256,3666542599,2319652746,2383841591,1829617268,1955464842,101380132,259290255,1955470987,2315182976,3514076702,2328071915,611618310,2399537904,2333766772,2339671574,3661220189,300418675,3271652096,2155129019,2615770919]}]],[[{sector:1,data:[2416348927,378127218,2515039382,4235389181,1569394547,3378350510,1922041486,4194127592,4255377603,1955468939,1955862153,1955731083,4134840507,745897991,1955468937,2322402750,611618310,2399537904,2333045876,2155122206,512360163,3956372622,378258318,870872212,780797,378264203,394818708,2335672387,2306119190,3195309590,109735181,4028920974,1955530250,512429940,3816846478,2384366078,2397819252,3053564611,4244170752,2348538088,2306118678,3195309590,109735181,4028920974,1955530250,512429940,3816846478,2384366078,2397819252,1284096963,2438302512,3666664075,3542737617,3822183377,3058951121,30509568,1523778003,2292997513,3448374605,3788505269,3280655824,1183378059,3347726848,1183378059,3405857280,1963281918,1149944809,809777704,1149907059,826554921,1435183219,2363132817,702730714,3521368531,3051606499,676104704,3405892353,1284120459,30081321,2220722635,12305400,2220722432,3186148345,3138089983,1569259520,2384365954,529253236,2307022217,3195309598,109735181,4028920974,1955530250,512429940,3816846478,2384366078,2397819252,2382793411,183510132,1970573062,32110852,3200514048,2984799501,2316530687,254050885,2963228040,33982704,2416348786,45859698,2837350770,4226476148,3044317883,2836826894,2332527220,4622570,108330812,3455992387,378138485,4282152105,2984784244,2383841787,1829617268,1955464842,101380132,259290255,1955470987,2315182976,3514076702,2328071915]},{sector:2,data:[611618310,2399537904,2326426996,2322727430,2282693864,3314196293,109637668,109998594,3049484944,3748497548,45875120,2953283698,33982704,32031602,230605568,4278904941,142951818,3893458368,158596038,1922041486,4190018536,4293257667,3908676584,2258567283,3766898912,1569412467,2582139780,1569283065,33983108,1022370930,1007514624,3892933648,2666068356,2812415,1356891807,110026886,2565370512,3583764721,2665514584,125108284,1912735368,3906331624,108199975,3908655080,1552678769,777816360,2316469736,611451398,33982704,2416348786,3842369650,2665514584,2416348867,3873302642,1912735370,4028950666,2292139274,2339504646,3314189405,4030525476,1166676085,1124567199,126353584,1922041486,512345080,2830857358,2148499572,2305950395,2339679262,2306117142,3899959830,158595428,1922041486,4189964264,2383842243,378229364,2830857386,2148005492,378087797,230585486,2382793325,183510132,1953795846,2384366351,4276322420,1955470985,3280923601,4197771354,2332035305,394812122,2302117955,3195309590,109735181,4028920974,1955530250,512429940,3816846478,2384366078,2397819252,1956166595,1124075462,2332035014,3044322326,2330626830,2286092358,1962884103,3455992325,378138485,2258597036,3766898912,3153726696,662729896,3766900863,1962884254,4282902787,1922041486,2179515384,1892661971,1912735370,1081413692,2328972798,611451654,2297072511,3141664838,11891203,1971324918,3321774854,2332030441]},{sector:3,data:[1958742213,604473874,2297072511,1112211526,4275129854,3119412685,1508404822,5630208,4134667195,74809351,4294437187,3713894723,2322486969,1927335943,2148005390,1189611125,4294306048,2315263209,1962884103,1978612764,3401734,3489663465,1927336160,2615299,3892323560,3404267536,1892662271,3150929289,1569287764,3263873997,1183377803,3330949376,1183377803,2328051968,2297072391,1111687238,3285274110,48857264,2281746432,1038650181,1205798159,4249341979,2152193293,3909044189,1166719640,1975519371,2823129606,2315256809,540846405,2134640498,2196243315,4291750350,1942951144,3499223045,3253322745,2965633279,3451447296,3286927592,2315255739,3279203870,2315255738,3279066134,2298544059,3279065630,1922178699,3892319465,3548844105,1922178699,3541680136,1256784757,2329118464,2258615109,3766898912,3894653011,512478578,2319676590,1960315079,1944603402,3462457550,2340429882,1131582494,3624454026,3897231988,1273548382,2149595854,2451474779,3461408882,2665514584,2345514728,3497170974,3503804643,2329399523,3041833927,1913273344,4262079494,2683730373,2253447302,1019579104,2669441802,2253447302,1678150368,1958742124,4263555079,4843723,2665514584,2281709545,3043779590,751173120,1930050570,2680946424,2253447302,3905260256,2253914149,518561504,3766900736,1566878,1922631306,242597896,1922565770,108204092,3897405515,214159091,3471697968,2311308286,1166726493,1967340704,1832237839,2322413242]},{sector:4,data:[1284124780,846129,3127719611,1821011253,810322481,2295819656,1569314893,3679816153,3934978224,2952808072,3646786304,3924297608,4212582584,2317756018,603980294,2416348912,1962949746,261416983,3906297227,158584100,3893338088,1122569962,261548047,4275658123,3611658759,3380021050,4275789195,3628435975,3010922298,2316248297,1014228486,2953146992,3284142080,1944716938,1077682180,921176946,2289217724,2960385542,2330495488,141814022,2042989248,3275754498,3901390628,2149900496,1944651400,1059374474,109633540,2160292842,1700946252,1632403564,980182370,1885688352,1769234789,1451255662,1702194273,1836008320,1684955501,1128407098,1195787588,1380994377,1465275475,1632403501,980182370,1885688352,1769234789,1283483502,1818583649,1818318464,1535141237,1953064005,1866956893,980382752,1869562656,1852400754,2154132577,1819305298,1952539497,1394621029,1668445551,1634869349,543516526,1159754351,1380275278,1885688448,1633905004,540697972,1735549268,1914729573,1701277281,1885688448,1633905004,540697972,1867398478,1634222880,744843118,1379750432,1952541797,2154133097,1651469383,540699745,542056515,2152079442,1970040643,1998614125,1752458345,1701139072,543973750,1701081679,1377843826,1384137504,1818321765,1092631139,1468026144,1868852841,1210071671,824202784,1428181792,1953059968,980641132,1444956192,1310736928,1952531584,1394621025,543520353,1684107084,1952531584,1869357153,1149264993]},{sector:5,data:[543257697,1702257011,2003782784,1914729061,1952999273,1818838656,1869881445,1634683936,1867284580,1852400737,1867284583,1852400737,2150244455,1701603654,1919903264,1986089760,2154262121,1701603654,544175136,1701602628,1182819700,543517801,1936291941,539915124,1869881433,1885696544,1701011820,1818576000,543519845,1701603654,1869894528,1701273970,1769296256,541884532,541335635,2149785681,1702063689,1149269106,1952803941,542277733,542277699,1919885379,1414415648,1300255301,979727983,1869760032,774778477,1182822228,1634562671,1142962804,1226852128,1377848352,706749472,1634484864,1132489582,1918985580,1886999680,542711909,1663070068,1768320623,679505266,824191299,741947193,825768241,1718571808,1918990196,1916870757,539784052,778268233,538976288,825049942,844707383,1296189741,1397052461,1350574164,1953393010,1867259962,544367991,1751607666,572533876,1970562387,757083248,2149982252,1852404304,1176517236,744844393,1769099296,1919251566,1769099392,540701806,1970562387,1919885424,1414415648,1350586949,1953393010,1766203450,1634624876,1484809581,1769099392,1919251566,1953459744,1634038304,964720996,4278834776,3976264704,84461831,2248867338,4244700688,1108681984,773152533,3709160213,758589460,4231503415,4097294903,2755149879,4164399927,1208885773,51509777,3272744978,370331410,2601488911,302961167,1662277906,1746169108,3088417301,3308825400,2184784696,4286775086]},{sector:6,data:[2164228482,8421504,0,0,0,2633003,791293227,1009527134,1010712124,1170296381,3528413778,1322079571,1229837904,3628158414,1263488844,1329844309,1104432725,1095910742,1313457479,3544334804,1137592659,1096078159,1230193102,1329807822,1096040915,1196379342,3461132337,1355831365,1381061577,1431459028,1279346373,1330562387,1314081236,1163086273,3528413778,1338265153,1137068498,1397706568,65477,2155905152,2692776064,2694881440,2694881440,2684395680,2694840320,2155905184,11331712,2163821952,3897274299,3504929345,4041468106,1642660723,3764226826,3907804553,1552614633,677153078,1945309672,1972093697,4143952108,1954604101,3909201925,1291714563,4131751990,2285126794,1149957189,4114974774,3916238270,2545549493,4192200779,1929383144,1300284161,4289757431,3892350185,2663055426,145745995,1380865347,3908980315,820510770,1268956106,1124637928,1532120661,1314590030,4283328027,3904109544,3840477678,1829682175,3137340393,1569287437,73394412,3287925752,2146919808,2146985344,2147050880,4150624451,1267776127,3908662504,24379297,3967126467,976110730,24260676,1829617347,2301648011,1972054108,676134638,3899461054,24375914,4165828803,2281812096,1972106821,776243948,2331264392,3372101700,2348107144,11595381,3190310024,1239969037,4114975411,4277421354,3880093888,3135832949,3967126281,2163623414,1166673524,256500,2297775498,230565956,4111394925,142951818]},{sector:7,data:[3909318080,31984021,4148557557,3892540544,1569452020,1125616260,4132124554,1954608965,47625,2286098312,1435061047,4032662002,3904038888,1435235540,2220723184,178515,2280884124,2767453434,4203213703,3142736541,45706455,4085750784,4093442695,2280884132,2304482810,1972105309,675580652,2297840938,1308502084,1829617383,1972090485,675610350,975717514,57880644,3204399337,1166699789,3766919075,2162198096,3145769805,1173770783,158695672,2158052854,3183149941,4181715023,2665514584,3903014280,3119111419,39839962,3152760041,1055410732,452856,417858418,3303588843,4007127240,3905094003,540722878,1246608256,2348294376,1552495708,3765799738,2330293641,1166554692,1829617379,1944989928,3857236737,912034778,3894959241,24375526,2681027,3287810675,4276450699,1157510212,910461494,1965704250,911015427,4265231498,230570564,3812964973,3287865202,2345151208,1552497244,3686721576,986075624,1552646176,677153076,3906711528,774817346,1552646190,677153078,3906707432,540722738,3017795712,2302303371,451422300,33983220,3796207730,108576776,3909103080,45809687,1892661874,2617278393,4203213703,2275734524,2650441715,3766919160,3907028560,2253969984,24354528,11004355,3905437928,4176016345,3684755675,1354465205,2281746544,3455992583,3001612661,1851046880,2345491849,512341085,1702915922,1300266936,3924328633,1962884297,1019225173,2152101248,3900749645,2531832891,3008358624]},{sector:8,data:[3897189819,592315861,1360417361,4283971611,3909558248,938016746,3136016384,3540086864,2155876224,3900684133,1387921446,2329084271,1066025735,1726535818,3763857607,3909093608,2783510436,2344876249,1128516957,3285015945,3134021003,3221778004,3334722329,2315422533,1149776964,709114408,230556786,1143653229,944015418,2337144390,1313793397,1021461898,3137959168,1552482304,6350916,2298478779,1972058204,2281812192,230570052,2960844909,149046666,3893131456,24365387,3991747,3892324073,3485201261,1912781424,2617278393,4203213703,2275734524,2650441715,3935043504,3892332168,24376164,3765799875,2317894910,1144662084,1829617206,3287855990,2335726731,3347727436,3901417472,3355493258,1284098186,114878532,2302303371,2263361628,4106414322,3272007656,2328714635,1066025735,3905149066,109769329,3221778946,115868536,2951407616,3908241385,2749953180,3365332998,108396348,3909529576,3223636292,1853194300,3909076456,1972045617,675580652,1928611130,4129387869,1954608709,4148557339,3893326976,3249602470,2957182856,3909585137,1166671936,2681333,1995785530,4182111753,3909317760,1161429036,4128404981,1971385925,4165334540,2315482496,65664069,4131717632,3190310024,1552641293,844925224,3909049832,230557429,4270319725,2331997929,222096453,247137909,256365,2305625531,3150179933,4276636748,1392264707,4283623248,3137370857,79254584,452864,3109305531,1374158850,649685,3897325499]}]],[[{sector:1,data:[367588613,3909317588,2364069224,3609454789,3897306043,1948386245,1412376147,4283705901,1929453288,3795203,1877483184,910461634,1915241530,793020969,3895018632,24314076,927238851,1915307066,3289901067,4275566824,3883215172,4142402992,675610306,166317941,452608,3920552936,11535574,3905039848,3287879402,3897319867,485029005,4095338693,1939670666,57982984,3909083113,2277224124,2954791277,977012,3924297330,4294306261,3923162344,1391001450,1969110016,4974632,1631354660,3743679090,1124338408,3863499735,1407011923,1163124818,3697169379,2965078099,2953838196,3905157214,522453025,3272257731,2965573040,317244187,2986772480,780404,109762698,4169823410,2332292585,2339680286,435729493,1476817619,4187938950,2954791875,1124567668,1957699209,4259890168,1939717037,1954547702,4282575107,11584504,2952790761,50759808,4275628405,978604624,3337114170,3907905779,2344812915,1552495196,74836022,42681798,976635018,91433028,4184673726,1308509891,1324184971,3150182478,2042252166,40167499,1146400339,2082690180,1450658851,4267086161,3897246907,1843983229,3909317586,3787183072,1265482315,1493319144,3908981925,3085501342,236972045,3102278515,884720595,4082362443,1943163880,3551979779,3689421232,809798336,2317894792,1149776196,2907367465,1939670666,58310664,3892369641,3001549822,33983215,1978678386,2672134663,158646280,3892410344,3488143301,66512896,1965640958]},{sector:2,data:[676134604,2481504629,827797441,1330065165,2688912000,3904977128,789430658,2961199687,2705716801,2952950912,3240355917,2315295208,3221789253,1793590132,2571471368,1651818504,801200616,1173782616,141852827,230574261,387437,247355061,239372909,3188474922,2258595085,3766898912,3806905738,3766900928,3621185694,3892335080,1001390163,3904950504,1223165985,2655357440,91602952,3202890672,2638608064,3892868224,1462747394,3917483347,686292995,2156544,2147485929,2138354470,2147485161,2155131662,1930207720,3003577866,57966708,3285363688,2196311472,2504362688,578076680,3364487349,18961595,2668071627,2253447302,3233081568,2152089391,2665514584,3904920808,2749956050,1128738752,2470808192,3906422760,1149960130,323226130,1284194420,4843536,42681798,135414922,4263998656,675580104,1829617238,3892330472,1412415598,83254912,2953147776,190792,3897972400,2213068813,4266024703,3430255437,1284197966,649224,2298891403,233384012,4274388480,676104641,801125864,1051754584,3904889064,984667540,3149912297,2330479381,3497191665,3991470963,2914576593,109576624,334066869,1273084672,3897262522,2656632894,3723034198,363063571,4269061563,3324802319,3032158215,2148005492,130421364,1266268672,3153147112,1458064162,1042929,3137275846,585649017,1261091825,3287368936,3908114664,2112418089,2303557803,126507904,2042628163,1979595824,20900099,125173052,2139710848,1023404009]},{sector:3,data:[2315613695,3277039941,1161461540,2315875754,636070213,190720,384385859,2839886336,1173753717,57966729,3920306152,48824332,2151891712,3917515085,394985388,2268564035,2313420755,1435208029,2354416052,1166540976,2869618830,359996220,2326458344,3221786181,3287876213,4274084328,417959501,1632256,1166673267,2328098985,3538463045,4261638846,3320352325,4291422634,2324258187,2042628103,1962884112,981410839,41265733,132760568,2839886336,3287810677,4292864323,1166722041,1975519374,2344876290,126520413,2354940227,4170075646,3053881539,126507892,74809404,443742531,109768842,4030231734,2319649653,931808023,1945686919,1128481541,3825196149,451463050,3271652096,3771785424,3771785424,1958151816,115917706,1958198016,616761098,1918975103,1021256706,4177687344,1916419267,1933655053,1019476226,3271651911,254019372,199803896,2853365760,65586169,4294830336,4178822120,692357827,58048520,2328036272,4140012357,1954587205,3334691585,2315422533,3221750852,1144661364,33977876,65603652,272892416,230557043,147061101,4261574080,709114560,230557042,2294544749,4266010692,3413478221,1911049806,3905157355,1170604071,1149895307,776243240,1174815880,1972063742,2320387825,1166580293,3225151646,3904875240,2615798737,2655357651,1956267322,80996358,2345790696,1552494172,3223054632,512446803,1284206958,1127188520,2302873480,1500605982,1364443995,1903042187,1259309643,1284059018]},{sector:4,data:[1847494952,3277543793,4127198184,1954587205,3905157378,4289724665,3334686088,2315422533,3221760068,1144660596,974156562,91689028,4184673726,272902851,704646633,1144653892,3188029204,3287903501,1913275450,1829617157,1149813753,1308509700,1321497995,4277397582,2327707880,1140982852,3276113932,1284112565,1834203909,126536449,3904849288,1166606023,2328099012,619219463,1971338432,616925712,692357183,2282195523,4165675076,2281812163,1149773892,2160326953,2155132942,2147485161,2138355750,1958217462,2315809920,54320965,2315257321,54317381,3287876211,1958217462,4262032512,1308548941,453087,4275129854,1284231501,146901554,2952951232,1929329665,1140764674,3314157448,41271304,1077674416,1068499570,2148286244,1124567115,3905157187,3890741318,2638607872,2335995008,1552489052,2621830658,3188094080,65629453,1829682688,973620362,477370948,1444562056,1577280744,973620362,57872452,3187949800,2884136205,55568384,3278704062,42681798,2315275752,3221754436,1144655988,2316006952,1144655940,3892540168,1149895701,1958742056,306461222,1149903218,172243460,4276620402,72154627,3909633278,1144651789,4261967636,1157498956,1189049604,1972063742,3276689075,2282243210,1149895236,1975519272,138708998,973093353,108204612,2282777738,1144653932,3892541200,1143604153,2316006152,3372099652,3909633160,1144651792,2316005898,1143613508,2294349322,1149896772,138684968,3271836808,2158314998]},{sector:5,data:[2280194932,38046415,1963476010,54823450,1963541546,20759297,149488501,1979661316,65923331,2315262697,54823656,1963541562,1019578896,3909317889,4282123115,1944650613,3477661955,3897213883,3091790737,1539462747,1398502193,1851087706,1166736987,1975519385,4242336003,2157792640,3909213416,1702887897,2328067997,3221788997,2965569909,2571470848,2325628296,65573701,3469469952,1356891807,1153884294,11535116,2282570888,1166580037,2640674970,239388287,256165400,172279376,3766900758,36432286,1958295177,3916238270,914948103,247362745,2571471469,57982984,2315348201,37487684,1592329075,2147808769,1702890357,1300266908,149520539,2622324736,2607120512,2571501183,3144448954,62483576,4085750784,4093442695,2280884132,599432698,1829878637,2617250489,4203213703,2275734524,2650441715,3144510906,448359763,4085750784,4093442695,2280884132,1149935098,71565832,1149815038,239372826,2334147720,2306128158,1400158518,106728286,2333629577,2306128158,1400158518,71600734,4262085768,83242572,3037623424,3150481920,3405868371,65603466,205783552,2282636424,1149902404,172239388,2317108360,1143611460,2147808798,104617844,2380858227,1829617152,4261476584,1149897540,3766918923,3907028560,2253914406,1144692448,2317972491,2473429704,3314208254,3247047484,2258573938,3766898912,115918218,3766900737,189020830,1174275700,16050323,3892360424,183042286,1929460736,3598595,3893251326]},{sector:6,data:[2666004492,452608,3909130472,915000649,1173779641,108298395,3916238270,247332867,172264045,739525674,3892541698,230555997,230605677,4265338989,3204122089,4293487885,256250,2331727849,3221788997,4025025397,3449219322,2298498280,4134844726,1954585669,1829617158,3187672041,1149922574,3766918952,2346747472,2306128158,1400158518,106728286,2334678153,2306128158,1400158518,3766900830,2638608030,2281927808,230565956,3441420397,2327532777,20224581,3130672520,2025548923,3892557164,599392275,1829878637,149426869,1835907584,3043840955,2330626842,260702278,3247048584,1183378059,4265755392,3286922701,1016284554,2952950531,1921006595,2290069506,1149932357,1834203917,71501704,2971317507,1124567041,1157808638,256129683,125045874,2966027851,3909584896,3455975428,1284039541,1959394827,4274255874,1166709581,1929591955,3150182846,2733132501,1581861112,1314804566,1178754681,183041630,3107358976,1829617268,2298480617,3195320630,1149922574,272926728,2284340362,1157501508,272902674,3188999304,1300262157,585728165,1170626298,182977163,1308509696,1324840331,2680381006,2253447302,2773319904,2281746560,1149768260,340035600,2665514584,340036291,1149812990,3053565700,846082,4262085770,71600328,28705463,34358410,2258572356,3766898912,4169857024,1477270666,10412166,2331020016,256150227,2316125226,172264136,739525674,3907553794,3890744316,2281746681,2258568516,3766898912]},{sector:7,data:[1489763304,4271825030,189020864,3790203250,189041401,1149815038,2470808069,3498760438,233374385,356813312,1149812990,2471856645,1149895089,2328363029,3137385928,3405868371,2089426826,12814860,2328922832,189041399,739591210,2316530690,33599720,3456013125,3364551029,3892997258,1877478318,172264185,1149815038,3414616068,2030324990,4185057784,3334085552,3441800287,3439506465,2282759190,3899982342,15270225,3092258304,3633184768,1361477720,3273621252,12079134,1490587136,72420992,516104064,47184,4133017742,2147766534,1344193311,2382364856,243292376,528483409,3439506639,974136342,1953825286,28623617,3032684237,605474050,33962512,2282321013,1953825286,6547715,382534068,4108911477,3439375360,1963146262,5236995,1962811019,1962942089,1929386472,14280963,266872712,3909317376,126353615,1958416000,4289980800,1962804991,1962819201,108360956,1962804935,512455868,507213054,225801468,1962942091,1962811017,4178291688,3905157315,1139277957,4286572799,4286310595,3287876213,134223336,2315744457,3909136617,1139277832,3909317376,3287875555,1962673919,1962688129,108360956,1962673863,512455868,797603068,1962673919,1962688129,108360956,1962673863,512455868,260732156,1962810939,645924213,3279910075,4290495882,440672,4183885242,74778426,387576,3795993155,2332521203,1124567770,3351457674,3161783302,4261857140,2155134068,2138356518,3137795779,1304658036]},{sector:8,data:[1196443723,2147647571,2147713025,425988,51281928,1491632245,8436225,567089844,12079134,1490587136,72361600,615522175,3026356154,3894529317,3905093637,3452109086,3223605265,3906078385,109625598,3833623833,3523654080,438733036,3833616501,2297221134,3279231782,1356891807,109764742,3962122,2253916276,347119328,2253964281,109616864,1323922698,1364414464,13690962,1482381658,1963591304,1963923081,3044355514,1019316736,2953147921,17623303,225755144,2280884124,2767453434,4203213703,2332930205,4622570,3899993531,57869885,3892373481,57868327,2315313129,1014303494,3909317956,1379664209,2749956981,1968192515,78571779,58017596,4177827817,1964947651,3110211771,817496067,2943074,109578610,243299595,3279975692,1142956064,1142956097,1142956098,1142956099,1142956100,1347702860,1380798275,1196708432,2315016022,2306162182,2339717134,2339716670,1074695155,1973875573,4161047046,63135327,1131757598,3815953209,3277742073,1963591306,41222204,512476152,3825169672,4160750312,2281746627,3145009670,512320195,512324868,512324870,516125960,47184,2337855630,1963080903,3910578181,3932171,246416757,2952790761,1342605322,1343127556,11567108,129027871,1356891807,3035160710,3766900991,2965633438,2328099074,1014303238,3909317888,109772785,1144812811,128976244,3137328617,330563676,2817008077,1958742016,4285327368,3219718576,4286179583,222086136,401087093]}]],[[{sector:1,data:[3271652096,1963722486,4127945856,2155152134,3921871989,179306498,1963335307,149480447,3271652096,4134799932,69110723,3907256181,57868413,2164227561,2138377254,1964451456,405176447,2380824437,10479616,1964508918,3892802688,280035099,11584505,8128136,2315279546,1014303238,3892737408,65601720,13690880,1005126515,369527039,8436597,1964252809,2305060027,3899983902,3287810444,12079134,1490587136,72353526,2148430976,2130989094,72353418,132733727,2328043519,1014308358,2953278752,3925849088,1076625412,109633674,646447196,104494354,74872089,3287881392,582730744,1007127157,2953082144,3121055786,146079837,3137346793,126514474,192225340,1964050166,2332324992,3128233758,62193765,2315256041,1965702151,77457667,91569980,1964510848,2297072512,1111687238,3816148478,263504888,1676157389,2042628351,4177637380,1109819587,716930933,69110117,3271667829,567087028,150947304,3271652800,3019922618,3894529302,3221815094,95421561,3401303033,102664548,3271602293,108363836,3909108712,109707327,3221779734,2129139316,2668720896,2253447302,2812128,1493033704,3281969286,1929388008,3572024065,386332413,292913269,3152576688,3909317884,384368134,3271652350,1555743683,3440423936,4275103777,91865096,3957850544,2258617341,3766898912,1964445312,3766900864,337546142,1124567157,1964377738,2151465214,317197173,3271652096,2952822971,369526784,337545589,3133405301]},{sector:2,data:[364118108,2280137165,1958742270,2281746445,3899987462,95485254,11584505,3036709051,1124567168,4185247230,512476152,109737236,3372119318,116797557,1954575682,4188419,3019922618,3894529300,3221814854,20714356,719913845,1946369024,2025731,1967263360,3145773184,109576320,126514454,337545539,1975519349,518403,179356664,2952790761,3622326275,3287898364,1963591306,41254972,1488700409,102664550,1651293045,1963466377,1929392872,4245481731,1929400296,4244826371,1929414632,4244433155,1964770954,1710818952,11847934,23476411,486968003,3322382453,1382451462,1965145027,540805002,109709173,48850425,976235520,1987386118,4179013638,2281702889,4168424454,582681027,1007127157,3271652640,41173564,2336474105,1713421251,3120562873,401106488,2281992956,3279232262,822096177,808649013,53491202,839135793,942933300,120994054,11928066,1964775050,109759230,95515933,118284498,348979380,2160391928,3287875956,1967326856,11927988,1710823050,349031166,1967326858,3892315880,3899916300,3304519875,3271652764,74630137,3271675008,4193857768,548425923,1965098632,1720270464,3909317970,109772526,2151445770,3287876213,2305234107,3145008670,512320108,468219144,3909317376,954792954,3909317376,109771762,109606172,113665780,3276826249,2322932155,1965046791,4094069255,190822,104476716,108426522,3925415600,109576197,3287840028,3053564929,471239168,3452632693]},{sector:3,data:[3304519703,2953016321,4173592854,1974060278,3287925505,1967392392,4102684852,1727272586,399362814,1967392394,3909083368,3899981648,220105155,4167166069,1964115594,108396348,567089588,109625598,31981660,767214336,10479733,3019922618,3894529297,4282186802,28312693,1323877369,3271652600,1912621032,317244161,6076928,567087796,1023152616,2967696895,1019476227,3271652613,1356891807,3897680006,1482291910,1017045126,2315613443,977349,91554364,99156912,3909136384,1499004928,800769017,8502133,552077493,2335092736,4622570,9026370,283640757,2332930048,4622570,2339712442,4285861150,1007127267,2332783648,4622570,3455992387,79949685,2297072448,2957115462,2297072442,3049455686,1964947983,3892349672,24313878,3270851,3905094003,24313907,1947024579,3284400386,1964948051,1072170165,1526887168,1966750915,3913505285,78970889,3899989690,4166713427,1965210307,535365813,1949187072,286162952,300515445,716849920,3892557173,24313866,287736003,3287842677,126505299,3892326376,74776649,3287833433,1929401064,3277543683,1183378059,1532576256,1976434243,4161243867,2334175427,4622570,1976434242,1631372278,2050754162,539755127,2336207043,4622570,1976434242,403603700,3150151797,79259853,2617719296,4192247107,539889091,1759689530,973095097,2638453767,24443360,1650574329,1717920867,1785292903,1852664939,1920036975,1987409011,2054781047,1145258561]},{sector:4,data:[1212630597,1280002633,1347374669,1414746705,1482118741,825252441,892613426,959985462,250096191,1294368768,45121397,281870516,3439414249,875570193,2148431152,2138395686,1967457991,199864320,1410236416,113737845,3087037765,1353914807,1226738115,2315302517,3540431319,2315302114,3540300231,3520070112,3489708000,2311258595,3279243038,1967726219,401130435,1292795904,1465286773,1967601291,915013259,552105291,3277741824,1967982326,3271652736,1967990400,1465274495,1967863435,82378379,1482579712,109971139,2350806341,1409742529,242516085,3959675578,4218749352,27847930,3650026356,2149579693,91555836,48853172,2332537856,1409742536,242516085,3959675578,4218749352,27847930,3247176564,3272080299,4283557968,4287686744,1158057478,3892819061,3272015894,4282247248,4286376024,1158057478,3899700341,3272015874,1195281239,4140338037,2155172870,3669626484,27847683,3975871349,4218683816,4222337419,1967589119,1967589119,1967720191,129287007,3019899625,4281919600,24444988,109971139,3901388101,3897624458,1129971638,4101361150,468239111,3020075263,3071331584,2988160512,3439506432,47888,3288253160,1023345128,3271652608,129296522,300490928,4277200896,24444988,3035138755,3911233648,512425984,2337502537,1400194846,1158057478,3897643125,1482293086,4118138366,512318215,2304472391,3279243550,2348709608,2960476446,3923257424,4253089706,3271652608,1962998144,4243112705,106386944]},{sector:5,data:[1967457934,158793272,3892360168,65601650,3074048,3277741831,1962999168,4185965313,3271652608,1442894568,109971031,3661133125,2313685366,4777984,3892315113,1594294276,116835166,1954575700,64666126,1963501804,3123032315,4243456984,1968049801,3892346344,117309553,117339475,244020561,3456005454,116844149,1954575700,3123294214,3287155672,1968441078,3121509504,2834039770,2969269512,64535077,243924462,1072198990,3401728,1968377598,1968246526,1968049803,3866480126,1968441078,2953213056,64535081,3405890542,3422474238,1968184969,3472804353,378129150,516126034,1967464078,3273631219,1968184971,2348644072,2339718966,3900002846,1049361771,244020551,11892046,1309575619,1344178549,1377208693,113754997,83916117,3338667753,7689478,3065051666,109790182,1122399573,1122419850,3767165412,1642464012,3104289787,4276228096,4151692286,1642513546,35556291,512314112,3905123671,12189708,3070407680,3440430336,1203356448,2347356523,16826353,3282367484]},{sector:6,data:[543515987,1886680168,1999580986,1647212407,1801677170,778987884,795701091,1953720680,796488303,2019910518,1953850213,1701601889,1836345390,1919903264,1919905056,1852383333,1836216166,1869182049,1650532462,544503151,1936287860,1886413088,1633905004,1852795252,46]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]],[[{sector:1,data:[]},{sector:2,data:[]},{sector:3,data:[]},{sector:4,data:[]},{sector:5,data:[]},{sector:6,data:[]},{sector:7,data:[]},{sector:8,data:[]}]]]
    • modules
      • pcjs
        • lib
          • .jshintrc
            {
              "boss": true,
              "eqnull": true,
              "evil": true,
              "loopfunc": true,
              "sub": true,
              "globalstrict": true,
              "globals": {
                "APPNAME": false,
                "APPVERSION": false,
                "SITEHOST": false,
                "COMPILED": true,
                "DEBUG": true,
                "MAXDEBUG": false,
                "PCJSCLASS": true,
                "DEBUGGER": true,
                "PREFETCH": true,
                "FATARRAYS": true,
                "TYPEDARRAYS": true,
                "BACKTRACK": true,
                "SAMPLER": true,
                "BUGS_8086": true,
                "I386": true,
                "COMPAQ386": true,
                "Component": true,
                "State": true,
                "Bus": true,
                "ChipSet": true,
                "Computer": true,
                "CPU": true,
                "Debugger": true,
                "Disk": true,
                "FDC": true,
                "HDC": true,
                "Keyboard": true,
                "Memory": true,
                "Mouse": true,
                "Panel": true,
                "RAM": true,
                "ROM": true,
                "SerialPort": true,
                "Video": true,
                "X86": true,
                "X86Seg": true,
                "X86CPU": true,
                "X86Func": true,
                "X86OpXX": true,
                "X86Op0F": true,
                "X86ModB": true,
                "X86ModW": true,
                "X86ModB32": true,
                "X86ModW32": true,
                "X86ModSIB": true,
                "str": true,
                "usr": true,
                "web": true,
                "document": true,
                "global": true,
                "module": true,
                "require": true,
                "ArrayBuffer": false,
                "DataView": false,
                "FileReader": false,
                "Uint8Array": false,
                "Uint16Array": false,
                "Int32Array": false,
                "setTimeout": false,
                "clearTimeout": false,
                "webkitAudioContext": false,
                "window": true
              }
            }
            
          • README.md
            PCjs Sources
            ===
            
            Structure
            ---
            These JavaScript files divide PCjs functionality into major PC components.  Most of the files are device
            components, implementing a specific device (or set of devices, in the case of [chipset.js](chipset.js)).
            
            Be aware that *component* is an overloaded term, since **Component** is also the name of the
            shared base class in [component.js](../../shared/lib/component.js) used by most machine components.
            A few low-level components (eg, the **Memory** and **State** components, the Card class of the **Video**
            component, the Color and Rectangle classes of the **Panel** component, etc) do not extend **Component**,
            so don't assume that every PCjs object has access to [component.js](../../shared/lib/component.js) methods.
            
            Examples of non-device components include UI components like [panel.js](panel.js) and [debugger.js](debugger.js),
            and sub-components like [x86opxx.js](x86opxx.js) and [x86func.js](x86func.js) that separate the CPU
            functionality of [x86.js](x86.js) into more manageable pieces.
            
            These components should always be loaded or compiled in the order listed by the *pcJSFiles* property in
            [package.json](../../../package.json), which includes all the necessary *shared* components as well.
            At the time of this writing, the recommended order is:
            
            * [shared/defines.js](../../shared/lib/defines.js)
            * [shared/diskapi.js](../../shared/lib/diskapi.js)
            * [shared/dumpapi.js](../../shared/lib/dumpapi.js)
            * [shared/reportapi.js](../../shared/lib/reportapi.js)
            * [shared/userapi.js](../../shared/lib/userapi.js)
            * [shared/strlib.js](../../shared/lib/strlib.js)
            * [shared/usrlib.js](../../shared/lib/usrlib.js)
            * [shared/weblib.js](../../shared/lib/weblib.js)
            * [shared/component.js](../../shared/lib/component.js)
            * [pcjs/defines.js](defines.js)
            * [pcjs/interrupts.js](interrupts.js)
            * [pcjs/messages.js](messages.js)
            * [pcjs/panel.js](panel.js)
            * [pcjs/bus.js](bus.js)
            * [pcjs/memory.js](memory.js)
            * [pcjs/cpu.js](cpu.js)
            * [pcjs/x86.js](x86.js)
            * [pcjs/x86seg.js](x86seg.js)
            * [pcjs/x86cpu.js](x86cpu.js)
            * [pcjs/x86func.js](x86func.js)
            * [pcjs/x86opxx.js](x86opxx.js)
            * [pcjs/x86op0f.js](x86op0f.js)
            * [pcjs/x86modb.js](x86modb.js)
            * [pcjs/x86modw.js](x86modw.js)
            * [pcjs/x86modb16.js](x86modb16.js)
            * [pcjs/x86modw16.js](x86modw16.js)
            * [pcjs/x86modb32.js](x86modb32.js)
            * [pcjs/x86modw32.js](x86modw32.js)
            * [pcjs/x86modsib.js](x86modsib.js)
            * [pcjs/chipset.js](chipset.js)
            * [pcjs/rom.js](rom.js)
            * [pcjs/ram.js](ram.js)
            * [pcjs/keyboard.js](keyboard.js)
            * [pcjs/video.js](video.js)
            * [pcjs/serialport.js](serialport.js)
            * [pcjs/mouse.js](mouse.js)
            * [pcjs/disk.js](disk.js)
            * [pcjs/fdc.js](fdc.js)
            * [pcjs/hdc.js](hdc.js)
            * [pcjs/debugger.js](debugger.js)
            * [pcjs/state.js](state.js)
            * [pcjs/computer.js](computer.js)
            * [shared/embed.js](../../shared/lib/embed.js)
            
            Some of the components *can* be reordered or even omitted (eg, [debugger.js](debugger.js) or
            [embed.js](../../shared/lib/embed.js)), but you should observe the following:
            
            * [component.js](../../shared/lib/component.js) must be listed before any component that extends **Component**
            * [panel.js](panel.js) should be loaded early to initialize the Control Panel (if any) as soon as possible
            * [computer.js](computer.js) should be the last device component, as it supervises and notifies all the other device components
            
            To minimize ordering requirements, the init() handlers and constructors of all components should avoid
            referencing other components.  Device components should define an initBus() notification handler, which the
            *Computer* component will call after it has created/initialized the *Bus* component.
            
            Features
            ---
            
            [List of major existing features goes here]
            
            ### BackTrack Support
            
            The next major feature to be implemented is referred to as BackTrack Support, or simply BackTracks.  When BackTracks
            are enabled, every memory location (at the byte level) and every general-purpose byte register may have an optional link
            back to its source.  These links are called BackTrack indexes.
            
            All the code that a virtual machine initially executes enters the machine either via ROM or disk sectors, and as that
            code executes, the machine is loading data into registers from memory locations and/or I/O ports and writing the results
            to other memory locations and/or I/O ports.  BackTracks keep track of that data flow, allowing us to examine the history
            of any piece of data at any time, down to the byte level; while this feature could be extended to the bit level, it
            would make the feature dramatically more expensive, both in terms of size and speed.
            
            A BackTrack index is encoded as a 32-bit value with three parts:
            
            - Bits 0-8: 9-bit BackTrack object offset (0-511)
            - Bits 9-15: 7-bit type and access info
            - Bits 16-30: 15-bit BackTrack object number (1-32767, 0 reserved for dynamic data)
            
            This represents a total of 31 bits, with bit 31 reserved.
            
            For example, look at one of the last things a ROM does during boot: loading a disk sector into RAM.  It will be up to the
            disk controller (or DMA controller, if used) to create a BackTrack object representing the sector that was read,
            adding that object to the global BackTrack object array, and then associating the corresponding BackTrack index with
            the first byte of RAM where the sector was loaded.  Subsequent bytes of RAM containing the rest of the sector will refer
            to the same BackTrack object, using BackTrack indexes containing offsets 1-511.
            
          • bus.js
            /**
             * @fileoverview Implements the PCjs Bus component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-04
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var usr         = require("../../shared/lib/usrlib");
                var Component   = require("../../shared/lib/component");
                var Memory      = require("./memory");
                var Messages    = require("./messages");
                var State       = require("./state");
                var X86         = require("./x86");
            }
            
            /**
             * Bus(cpu, dbg)
             *
             * The Bus component manages physical memory and I/O address spaces.
             *
             * The Bus component has no UI elements, so it does not require an init() handler,
             * but it still inherits from the Component class and must be allocated like any
             * other device component.  It's currently allocated by the Computer's init() handler,
             * which then calls the initBus() method of all the other components.
             *
             * When initMemory() initializes the entire address space, it also passes aMemBlocks
             * to the CPU object, so that the CPU can perform its own address-to-block calculations
             * (essential, for example, when the CPU enables paging).
             *
             * For memory beyond the simple needs of the ROM and RAM components (ie, memory-mapped
             * devices), the address space must still be allocated through the Bus component via
             * addMemory().  If the component needs something more than simple read/write storage,
             * it must provide a controller with getMemoryBuffer() and getMemoryAccess() methods.
             *
             * By contrast, all port (I/O) operations are defined by external handlers; they register
             * with us, and we manage those registrations, as well as support for I/O breakpoints,
             * but unlike memory accesses, we're not involved with port data accesses.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsBus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            function Bus(parmsBus, cpu, dbg)
            {
                Component.call(this, "Bus", parmsBus, Bus);
            
                this.cpu = cpu;
                this.dbg = dbg;
            
                this.nBusWidth = parmsBus['buswidth'] || 20;
            
                /*
                 * Compute all Bus memory block parameters, based on the width of the bus.
                 *
                 * Regarding blockTotal, we want to avoid using block overflow expressions like:
                 *
                 *      iBlock < this.nBlockTotal? iBlock : 0
                 *
                 * As long as we know that blockTotal is a power of two (eg, 256 or 0x100, in the case of
                 * nBusWidth == 20 and blockSize == 4096), we can define blockMask as (blockTotal - 1) and
                 * rewrite the previous expression as:
                 *
                 *      iBlock & this.nBlockMask
                 *
                 * Similarly, we mask addresses with busMask to enforce "A20 wrap" on 20-bit busses.
                 * For larger busses, A20 wrap can be simulated by either clearing bit 20 of busMask or by
                 * changing all the block entries for the 2nd megabyte to match those in the 1st megabyte.
                 *
                 *      Bus Property        Old hard-coded values (when nBusWidth was always 20)
                 *      ------------        ----------------------------------------------------
                 *      this.nBusLimit      0xfffff
                 *      this.nBusMask       [same as busLimit]
                 *      this.nBlockSize     4096
                 *      this.nBlockLen      (this.nBlockSize >> 2)
                 *      this.nBlockShift    12
                 *      this.nBlockLimit    0xfff
                 *      this.nBlockTotal    ((this.nBusLimit + this.nBlockSize) / this.nBlockSize) | 0
                 *      this.nBlockMask     (this.nBlockTotal - 1) [ie, 0xff]
                 *
                 * Note that we choose a nBlockShift value (and thus a physical memory block size) based on "buswidth":
                 *
                 *      Bus Width                       Block Shift     Block Size
                 *      ---------                       -----------     ----------
                 *      20 bits (1Mb address space):    12              4Kb (256 maximum blocks)
                 *      24 bits (16Mb address space):   14              16Kb (1K maximum blocks)
                 *      32 bits (4Gb address space);    15              32Kb (128K maximum blocks)
                 *
                 * The coarser block granularities (ie, 16Kb and 32Kb) may cause problems for certain RAM and/or ROM
                 * allocations that are contiguous but are allocated out of order, or that have different controller
                 * requirements.  Your choices, for the moment, are either to ensure the allocations are performed in
                 * order, or to choose smaller nBlockShift values (at the expense of a generating a larger block array).
                 *
                 * Note that if PAGEBLOCKS is set, then for a bus width of 32 bits, the block size is fixed at 4Kb.
                 */
                this.addrTotal = Math.pow(2, this.nBusWidth);
                this.nBusLimit = this.nBusMask = (this.addrTotal - 1) | 0;
                this.nBlockShift = (PAGEBLOCKS && this.nBusWidth == 32 || this.nBusWidth <= 20)? 12 : (this.nBusWidth <= 24? 14 : 15);
                this.nBlockSize = 1 << this.nBlockShift;
                this.nBlockLen = this.nBlockSize >> 2;
                this.nBlockLimit = this.nBlockSize - 1;
                this.nBlockTotal = (this.addrTotal / this.nBlockSize) | 0;
                this.nBlockMask = this.nBlockTotal - 1;
                this.assert(this.nBlockMask <= Bus.BlockInfo.num.mask);
            
                /*
                 * Lists of I/O notification functions: aPortInputNotify and aPortOutputNotify are arrays, indexed by
                 * port, of sub-arrays which contain:
                 *
                 *      [0]: registered component
                 *      [1]: registered function to call for every I/O access
                 *
                 * The registered function is called with the port address, and if the access was triggered by the CPU,
                 * the linear instruction pointer (LIP) at the point of access.
                 *
                 * WARNING: Unlike the (old) read and write memory notification functions, these support only one
                 * pair of input/output functions per port.  A more sophisticated architecture could support a list
                 * of chained functions across multiple components, but I doubt that will be necessary here.
                 *
                 * UPDATE: The Debugger now piggy-backs on these arrays to indicate ports for which it wants notification
                 * of I/O.  In those cases, the registered component/function elements may or may not be set, but the following
                 * additional element will be set:
                 *
                 *      [2]: true to break on I/O, false to ignore I/O
                 *
                 * The false case is important if fPortInputBreakAll and/or fPortOutputBreakAll is set, because it allows the
                 * Debugger to selectively ignore specific ports.
                 */
                this.aPortInputNotify = [];
                this.aPortOutputNotify = [];
                this.fPortInputBreakAll = this.fPortOutputBreakAll = false;
            
                /*
                 * Allocate empty Memory blocks to span the entire physical address space.
                 */
                this.initMemory();
            
                if (BACKTRACK) {
                    this.abtObjects = [];
                    this.cbtDeletions = 0;
                    this.ibtLastAlloc = -1;
                    this.ibtLastDelete = 0;
                }
            
                this.setReady();
            }
            
            Component.subclass(Bus);
            
            if (BACKTRACK) {
                /**
                 * BackTrack object definition
                 *
                 *  obj:        reference to the source object (eg, ROM object, Sector object)
                 *  off:        the offset within the source object that this object refers to
                 *  slot:       the slot (+1) in abtObjects which this object currently occupies
                 *  refs:       the number of memory references, as recorded by writeBackTrack()
                 *
                 * @typedef {{
                 *  obj:        Object,
                 *  off:        number,
                 *  slot:       number,
                 *  refs:       number
                 * }}
                 */
                var BackTrack;
            
                /*
                 * BackTrack indexes are 31-bit values, where bits 0-8 store an object offset (0-511) and bits 16-30 store
                 * an object number (1-32767).  Object number 0 is reserved for dynamic data (ie, data created independent
                 * of any source); examples include zero values produced by instructions such as "SUB AX,AX" or "XOR AX,AX".
                 * We must special-case instructions like that, because even though AX will almost certainly contain some source
                 * data prior to the instruction, the result no longer has any connection to the source.  Similarly, "SBB AX,AX"
                 * may produce 0 or -1, depending on carry, but since we don't track the source of individual bits (including the
                 * carry flag), AX is now source-less.  TODO: This is an argument for maintaining source info on selected flags,
                 * even though it would be rather expensive.
                 *
                 * The 7 middle bits (9-15) record type and access information, as follows:
                 *
                 *      bit 15: set to indicate a "data" byte, clear to indicate a "code" byte
                 *
                 * All bytes start out as "data" bytes; only once they've been executed do they become "code" bytes.  For code
                 * bytes, the remaining 6 middle bits (9-14) represent an execution count that starts at 1 (on the byte's initial
                 * transition from data to code) and tops out at 63.
                 *
                 * For data bytes, the remaining middle bits indicate any transformations the data has undergone; eg:
                 *
                 *      bit 14: ADD/SUB/INC/DEC
                 *      bit 13: MUL/DIV
                 *      bit 12: OR/AND/XOR/NOT
                 *
                 * We make no attempt to record the original data or the transformation data, only that the transformation occurred.
                 *
                 * Other middle bits indicate whether the data was ever read and/or written:
                 *
                 *      bit 11: READ
                 *      bit 10: WRITE
                 *
                 * Bit 9 is reserved for now.
                 */
                Bus.BACKTRACK = {
                    SLOT_MAX:       32768,
                    SLOT_SHIFT:     16,
                    TYPE_DATA:      0x8000,
                    TYPE_ADDSUB:    0x4000,
                    TYPE_MULDIV:    0x2000,
                    TYPE_LOGICAL:   0x1000,
                    TYPE_READ:      0x0800,
                    TYPE_WRITE:     0x0400,
                    TYPE_COUNT_INC: 0x0200,
                    TYPE_COUNT_MAX: 0x7E00,
                    TYPE_MASK:      0xFE00,
                    TYPE_SHIFT:     9,
                    OFF_MAX:        512,
                    OFF_MASK:       0x1FF
                };
            }
            
            /**
             * @typedef {number}
             */
            var BlockInfo;
            
            /**
             * This defines the BlockInfo bit fields used by scanMemory() when it creates the aBlocks array.
             *
             * @typedef {{
             *  num:    BitField,
             *  count:  BitField,
             *  btmod:  BitField,
             *  type:   BitField
             * }}
             */
            Bus.BlockInfo = usr.defineBitFields({num:20, count:8, btmod:1, type:3});
            
            /**
             * BusInfo object definition (returned by scanMemory())
             *
             *  cbTotal:    total bytes allocated
             *  cBlocks:    total Memory blocks allocated
             *  aBlocks:    array of allocated Memory block numbers
             *
             * @typedef {{
             *  cbTotal:    number,
             *  cBlocks:    number,
             *  aBlocks:    Array.<BlockInfo>
             * }}
             */
            var BusInfo;
            
            /**
             * initMemory()
             *
             * Allocate enough (empty) Memory blocks to span the entire physical address space.
             *
             * @this {Bus}
             */
            Bus.prototype.initMemory = function()
            {
                var block = new Memory();
                this.aMemBlocks = new Array(this.nBlockTotal);
                for (var iBlock = 0; iBlock < this.nBlockTotal; iBlock++) {
                    this.aMemBlocks[iBlock] = block;
                }
                this.cpu.initMemory(this.aMemBlocks, this.nBlockShift);
                this.cpu.setAddressMask(this.nBusMask);
            };
            
            /**
             * reset()
             *
             * @this {Bus}
             */
            Bus.prototype.reset = function()
            {
                this.setA20(true);
                if (BACKTRACK) this.ibtLastDelete = 0;
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * We don't need a powerDown() handler, because for largely historical reasons, our state (including the A20 state)
             * is saved by saveMemory().
             *
             * However, we do need a powerUp() handler, because on resumable machines, the Computer's onReset() function calls
             * everyone's powerUp() handler rather than their reset() handler.
             *
             * TODO: Perhaps Computer should be smarter: if there's no powerUp() handler, then fallback to the reset() handler.
             * In that case, however, we'd either need to remove the powerUp() stub in Component, or detect the existence of the stub.
             *
             * @this {Bus}
             * @param {Object|null} data (always null because we supply no powerDown() handler)
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            Bus.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) this.reset();
                return true;
            };
            
            /**
             * addMemory(addr, size, type, controller)
             *
             * Adds new Memory blocks to the specified address range.  Any Memory blocks previously
             * added to that range must first be removed via removeMemory(); otherwise, you'll get
             * an allocation conflict error.  This helps prevent address calculation errors, redundant
             * allocations, etc.
             *
             * We've relaxed some of the original requirements (ie, that addresses must start at a
             * block-granular address, or that sizes must be equal to exactly one or more blocks), because
             * machines with large block sizes can make it impossible to load certain ROMs at at their
             * required addresses.
             *
             * Even so, Bus memory management does NOT provide a general-purpose heap.  Most memory
             * allocations occur during machine initialization and never change.  The only notable
             * exception is the Video frame buffer, which ranges from 4Kb (MDA) to 16Kb (CGA) to
             * 32Kb/64Kb/128Kb (EGA), and only the EGA changes its buffer address post-initialization.
             *
             * Each Memory block keeps track of a single address (addr) and length (used), indicating
             * the used space within the block; any free space that precedes or follows that used space
             * can be allocated later, by simply extending the beginning or ending of the previously used
             * space.  However, any holes that might have existed between the original allocation and an
             * extension are subsumed by the extension.
             *
             * @this {Bus}
             * @param {number} addr is the starting physical address of the request
             * @param {number} size of the request, in bytes
             * @param {number} type is one of the Memory.TYPE constants
             * @param {Object} [controller] is an optional memory controller component
             * @return {boolean} true if successful, false if not
             */
            Bus.prototype.addMemory = function(addr, size, type, controller)
            {
                var iBlock = addr >>> this.nBlockShift;
                while (size > 0 && iBlock < this.aMemBlocks.length) {
                    var block = this.aMemBlocks[iBlock];
                    var addrBlock = iBlock * this.nBlockSize;
                    var sizeBlock = size > this.nBlockSize? this.nBlockSize : size;
            
                    if (block && block.size) {
                        if (block.type == type && block.controller == controller) {
                            /*
                             * Where there is already a block with a non-zero size, we can allow the allocation only if:
                             *
                             *   1) addr + size <= block.addr (the request precedes the used portion of the current block)
                             * or:
                             *   2) addr >= block.addr + block.used (the request follows the used portion of the current block)
                             */
                            if (addr + size <= block.addr) {
                                block.used += (block.addr - addr);
                                block.addr = addr;
                                return true;
                            }
                            if (addr >= block.addr + block.used) {
                                var sizeAvail = block.size - (addr - addrBlock);
                                if (sizeAvail > size) sizeAvail = size;
                                block.used = addr - block.addr + sizeAvail;
                                size -= sizeAvail;
                                addr = addrBlock + this.nBlockSize;
                                continue;
                            }
                        }
                        return this.reportError(1, addr, size);
                    }
                    block = this.aMemBlocks[iBlock++] = new Memory(addr, sizeBlock, this.nBlockSize, type, controller);
                    if (DEBUGGER && this.dbg) {
                        block.setDebugger(this.dbg, addr, this.nBlockSize);
                    }
                    size -= sizeBlock;
                    addr = addrBlock + this.nBlockSize;
                }
                if (size > 0) {
                    return this.reportError(2, addr, size);
                }
                return true;
            };
            
            /**
             * cleanMemory(addr, size)
             *
             * @this {Bus}
             * @param {number} addr
             * @param {number} size
             * @return {boolean} true if all blocks were clean, false if dirty; all blocks are cleaned in the process
             */
            Bus.prototype.cleanMemory = function(addr, size)
            {
                var fClean = true;
                var iBlock = addr >>> this.nBlockShift;
                while (size > 0 && iBlock < this.aMemBlocks.length) {
                    if (this.aMemBlocks[iBlock].fDirty) {
                        this.aMemBlocks[iBlock].fDirty = fClean = false;
                        this.aMemBlocks[iBlock].fDirtyEver = true;
                    }
                    size -= this.nBlockSize;
                    iBlock++;
                }
                return fClean;
            };
            
            /**
             * scanMemory(info, addr, size)
             *
             * Returns a BusInfo object for the specified address range.
             *
             * @this {Bus}
             * @param {Object} [info] previous BusInfo, if any
             * @param {number} [addr] starting address of range (0 if none provided)
             * @param {number} [size] size of range, in bytes (up to end of address space if none provided)
             * @return {Object} updated info (or new info if no previous info provided)
             */
            Bus.prototype.scanMemory = function(info, addr, size)
            {
                if (addr == null) addr = 0;
                if (size == null) size = (this.addrTotal - addr) | 0;
                if (info == null) info = {cbTotal: 0, cBlocks: 0, aBlocks: []};
            
                var iBlock = addr >>> this.nBlockShift;
                var iBlockMax = ((addr + size - 1) >>> this.nBlockShift);
            
                info.cbTotal = 0;
                info.cBlocks = 0;
                while (iBlock <= iBlockMax) {
                    var block = this.aMemBlocks[iBlock];
                    info.cbTotal += block.size;
                    if (block.size) {
                        var btmod = (BACKTRACK && block.modBackTrack(false)? 1 : 0);
                        info.aBlocks.push(usr.initBitFields(Bus.BlockInfo, iBlock, 0, btmod, block.type));
                        info.cBlocks++
                    }
                    iBlock++;
                }
                return info;
            };
            
            /**
             * getA20()
             *
             * @this {Bus}
             * @return {boolean} true if enabled, false if disabled
             */
            Bus.prototype.getA20 = function()
            {
                return !this.aBlocks2Mb && this.nBusLimit == this.nBusMask;
            };
            
            /**
             * setA20(fEnable)
             *
             * On 32-bit bus machines, I've adopted the approach that Compaq took with DeskPro 386 machines,
             * which is to map the 1st Mb to the 2nd Mb whenever A20 is disabled, rather than blindly masking
             * the A20 address bit from all addresses; in fact, this is what the DeskPro 386 ROM BIOS requires.
             *
             * For 24-bit bus machines, we take the same approach that most if not all 80286 systems took, which
             * is simply masking the A20 address bit.  A lot of 32-bit machines probably took the same approach.
             *
             * TODO: On machines with a 32-bit bus, look into whether we can eliminate address masking altogether,
             * which seems feasible, provided all incoming addresses are already pre-truncated to 32 bits.  Also,
             * confirm that DeskPro 386 machines mapped the ENTIRE 1st Mb to the 2nd, and not simply the first 64Kb,
             * which is technically all that 8086 address wrap-around compatibility would require.
             *
             * @this {Bus}
             * @param {boolean} fEnable is true to enable A20 (default), false to disable
             */
            Bus.prototype.setA20 = function(fEnable)
            {
                if (this.nBusWidth == 32) {
                    if (fEnable) {
                        if (this.aBlocks2Mb) {
                            this.setMemoryBlocks(0x100000, 0x100000, this.aBlocks2Mb);
                            this.aBlocks2Mb = null;
                        }
                    } else {
                        if (!this.aBlocks2Mb) {
                            this.aBlocks2Mb = this.getMemoryBlocks(0x100000, 0x100000);
                            this.setMemoryBlocks(0x100000, 0x100000, this.getMemoryBlocks(0x0, 0x100000));
                        }
                    }
                }
                else if (this.nBusWidth > 20) {
                    var addrMask = (this.nBusMask & ~0x100000) | (fEnable? 0x100000 : 0);
                    if (addrMask != this.nBusMask) {
                        this.nBusMask = addrMask;
                        if (this.cpu) this.cpu.setAddressMask(addrMask);
                    }
                }
            };
            
            /**
             * getWidth()
             *
             * @this {Bus}
             * @return {number}
             */
            Bus.prototype.getWidth = function()
            {
                return this.nBusWidth;
            };
            
            /**
             * setMemoryAccess(addr, size)
             *
             * Updates the access functions in every block of the specified address range.  Since the only components
             * that should be dynamically modifying the memory access functions are those that use addMemory() with a custom
             * memory controller, we require that the block(s) being updated do in fact have a controller.
             *
             * @this {Bus}
             * @param {number} addr
             * @param {number} size
             * @param {Array.<function()>} [afn]
             * @return {boolean} true if successful, false if not
             */
            Bus.prototype.setMemoryAccess = function(addr, size, afn)
            {
                if (!(addr & this.nBlockLimit) && size && !(size & this.nBlockLimit)) {
                    var iBlock = addr >>> this.nBlockShift;
                    while (size > 0) {
                        var block = this.aMemBlocks[iBlock];
                        if (!block.controller) {
                            return this.reportError(5, addr, size);
                        }
                        block.setAccess(afn);
                        size -= this.nBlockSize;
                        iBlock++;
                    }
                    return true;
                }
                return this.reportError(3, addr, size);
            };
            
            /**
             * removeMemory(addr, size)
             *
             * Replaces every block in the specified address range with empty Memory blocks that will ignore all reads/writes.
             *
             * TODO: Update the removeMemory() interface to reflect the relaxed requirements of the addMemory() interface.
             *
             * @this {Bus}
             * @param {number} addr
             * @param {number} size
             * @return {boolean} true if successful, false if not
             */
            Bus.prototype.removeMemory = function(addr, size)
            {
                if (!(addr & this.nBlockLimit) && size && !(size & this.nBlockLimit)) {
                    var iBlock = addr >>> this.nBlockShift;
                    while (size > 0) {
                        addr = iBlock * this.nBlockSize;
                        var block = this.aMemBlocks[iBlock++] = new Memory(addr);
                        if (DEBUGGER && this.dbg) {
                            block.setDebugger(this.dbg, addr, this.nBlockSize);
                        }
                        size -= this.nBlockSize;
                    }
                    return true;
                }
                return this.reportError(4, addr, size);
            };
            
            /**
             * getMemoryBlocks(addr, size)
             *
             * @this {Bus}
             * @param {number} addr is the starting physical address
             * @param {number} size of the request, in bytes
             * @return {Array} of Memory blocks
             */
            Bus.prototype.getMemoryBlocks = function(addr, size)
            {
                var aBlocks = [];
                var iBlock = addr >>> this.nBlockShift;
                while (size > 0 && iBlock < this.aMemBlocks.length) {
                    aBlocks.push(this.aMemBlocks[iBlock++]);
                    size -= this.nBlockSize;
                }
                return aBlocks;
            };
            
            /**
             * setMemoryBlocks(addr, size, aBlocks, type)
             *
             * If no type is specified, then specified address range uses all the provided blocks as-is;
             * this form of setMemoryBlocks() is used for complete physical aliases.
             *
             * Otherwise, new blocks are allocated with the specified type; the underlying memory from the
             * provided blocks is still used, but the new blocks may have different access to that memory.
             *
             * @this {Bus}
             * @param {number} addr is the starting physical address
             * @param {number} size of the request, in bytes
             * @param {Array} aBlocks as returned by getMemoryBlocks()
             * @param {number} [type] is one of the Memory.TYPE constants
             */
            Bus.prototype.setMemoryBlocks = function(addr, size, aBlocks, type)
            {
                var i = 0;
                var iBlock = addr >>> this.nBlockShift;
                while (size > 0 && iBlock < this.aMemBlocks.length) {
                    var block = aBlocks[i++];
                    this.assert(block);
                    if (!block) break;
                    if (type !== undefined) {
                        var blockNew = new Memory(addr);
                        if (DEBUGGER && this.dbg) {
                            blockNew.setDebugger(this.dbg, addr, this.nBlockSize);
                        }
                        blockNew.clone(block, type);
                        block = blockNew;
                    }
                    this.aMemBlocks[iBlock++] = block;
                    size -= this.nBlockSize;
                }
            };
            
            /**
             * getByte(addr)
             *
             * For physical addresses only; for linear addresses, use cpu.getByte().
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number} byte (8-bit) value at that address
             */
            Bus.prototype.getByte = function(addr)
            {
                return this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].readByte(addr & this.nBlockLimit, addr);
            };
            
            /**
             * getByteDirect(addr)
             *
             * This is useful for the Debugger and other components that want to bypass getByte() breakpoint detection.
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number} byte (8-bit) value at that address
             */
            Bus.prototype.getByteDirect = function(addr)
            {
                return this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].readByteDirect(addr & this.nBlockLimit, addr);
            };
            
            /**
             * getShort(addr)
             *
             * For physical addresses only; for linear addresses, use cpu.getShort().
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number} word (16-bit) value at that address
             */
            Bus.prototype.getShort = function(addr)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off != this.nBlockLimit) {
                    return this.aMemBlocks[iBlock].readShort(off, addr);
                }
                return this.aMemBlocks[iBlock++].readByte(off, addr) | (this.aMemBlocks[iBlock & this.nBlockMask].readByte(0, addr + 1) << 8);
            };
            
            /**
             * getShortDirect(addr)
             *
             * This is useful for the Debugger and other components that want to bypass getShort() breakpoint detection.
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number} word (16-bit) value at that address
             */
            Bus.prototype.getShortDirect = function(addr)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off != this.nBlockLimit) {
                    return this.aMemBlocks[iBlock].readShortDirect(off, addr);
                }
                return this.aMemBlocks[iBlock++].readByteDirect(off, addr) | (this.aMemBlocks[iBlock & this.nBlockMask].readByteDirect(0, addr + 1) << 8);
            };
            
            /**
             * getLong(addr)
             *
             * For physical addresses only; for linear addresses, use cpu.getLong().
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number} long (32-bit) value at that address
             */
            Bus.prototype.getLong = function(addr)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off < this.nBlockLimit - 2) {
                    return this.aMemBlocks[iBlock].readLong(off, addr);
                }
                var nShift = (off & 0x3) << 3;
                return (this.aMemBlocks[iBlock].readLong(off & ~0x3, addr) >>> nShift) | (this.aMemBlocks[(iBlock + 1) & this.nBlockMask].readLong(0, addr + 3) << (32 - nShift));
            };
            
            /**
             * getLongDirect(addr)
             *
             * This is useful for the Debugger and other components that want to bypass getLong() breakpoint detection.
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number} long (32-bit) value at that address
             */
            Bus.prototype.getLongDirect = function(addr)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off < this.nBlockLimit - 2) {
                    return this.aMemBlocks[iBlock].readLongDirect(off, addr);
                }
                var nShift = (off & 0x3) << 3;
                return (this.aMemBlocks[iBlock].readLongDirect(off & ~0x3, addr) >>> nShift) | (this.aMemBlocks[(iBlock + 1) & this.nBlockMask].readLongDirect(0, addr + 3) << (32 - nShift));
            };
            
            /**
             * setByte(addr, b)
             *
             * For physical addresses only; for linear addresses, use cpu.setByte().
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} b is the byte (8-bit) value to write (we truncate it to 8 bits to be safe)
             */
            Bus.prototype.setByte = function(addr, b)
            {
                this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].writeByte(addr & this.nBlockLimit, b & 0xff, addr);
            };
            
            /**
             * setByteDirect(addr, b)
             *
             * This is useful for the Debugger and other components that want to bypass breakpoint detection AND read-only
             * memory protection (for example, this is an interface the ROM component could use to initialize ROM contents).
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} b is the byte (8-bit) value to write (we truncate it to 8 bits to be safe)
             */
            Bus.prototype.setByteDirect = function(addr, b)
            {
                this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].writeByteDirect(addr & this.nBlockLimit, b & 0xff, addr);
            };
            
            /**
             * setShort(addr, w)
             *
             * For physical addresses only; for linear addresses, use cpu.setShort().
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} w is the word (16-bit) value to write (we truncate it to 16 bits to be safe)
             */
            Bus.prototype.setShort = function(addr, w)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off != this.nBlockLimit) {
                    this.aMemBlocks[iBlock].writeShort(off, w & 0xffff, addr);
                    return;
                }
                this.aMemBlocks[iBlock++].writeByte(off, w & 0xff, addr);
                this.aMemBlocks[iBlock & this.nBlockMask].writeByte(0, (w >> 8) & 0xff, addr + 1);
            };
            
            /**
             * setShortDirect(addr, w)
             *
             * This is useful for the Debugger and other components that want to bypass breakpoint detection AND read-only
             * memory protection (for example, this is an interface the ROM component could use to initialize ROM contents).
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} w is the word (16-bit) value to write (we truncate it to 16 bits to be safe)
             */
            Bus.prototype.setShortDirect = function(addr, w)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off != this.nBlockLimit) {
                    this.aMemBlocks[iBlock].writeShortDirect(off, w & 0xffff, addr);
                    return;
                }
                this.aMemBlocks[iBlock++].writeByteDirect(off, w & 0xff, addr);
                this.aMemBlocks[iBlock & this.nBlockMask].writeByteDirect(0, (w >> 8) & 0xff, addr + 1);
            };
            
            /**
             * setLong(addr, l)
             *
             * For physical addresses only; for linear addresses, use cpu.setLong().
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} l is the long (32-bit) value to write
             */
            Bus.prototype.setLong = function(addr, l)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off < this.nBlockLimit - 2) {
                    this.aMemBlocks[iBlock].writeLong(off, l);
                    return;
                }
                var lPrev, nShift = (off & 0x3) << 3;
                off &= ~0x3;
                lPrev = this.aMemBlocks[iBlock].readLong(off, addr);
                this.aMemBlocks[iBlock].writeLong(off, (lPrev & ~((0xffffffff|0) << nShift)) | (l << nShift), addr);
                iBlock = (iBlock + 1) & this.nBlockMask;
                addr += 3;
                lPrev = this.aMemBlocks[iBlock].readLong(0, addr);
                this.aMemBlocks[iBlock].writeLong(0, (lPrev & ((0xffffffff|0) << nShift)) | (l >>> (32 - nShift)), addr);
            };
            
            /**
             * setLongDirect(addr, l)
             *
             * This is useful for the Debugger and other components that want to bypass breakpoint detection AND read-only
             * memory protection (for example, this is an interface the ROM component could use to initialize ROM contents).
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} l is the long (32-bit) value to write
             */
            Bus.prototype.setLongDirect = function(addr, l)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                if (off < this.nBlockLimit - 2) {
                    this.aMemBlocks[iBlock].writeLongDirect(off, l, addr);
                    return;
                }
                var lPrev, nShift = (off & 0x3) << 3;
                off &= ~0x3;
                lPrev = this.aMemBlocks[iBlock].readLongDirect(off, addr);
                this.aMemBlocks[iBlock].writeLongDirect(off, (lPrev & ~((0xffffffff|0) << nShift)) | (l << nShift), addr);
                iBlock = (iBlock + 1) & this.nBlockMask;
                addr += 3;
                lPrev = this.aMemBlocks[iBlock].readLongDirect(0, addr);
                this.aMemBlocks[iBlock].writeLongDirect(0, (lPrev & ((0xffffffff|0) << nShift)) | (l >>> (32 - nShift)), addr);
            };
            
            /**
             * addBackTrackObject(obj, bto, off)
             *
             * If bto is null, then we create bto (ie, an object that wraps obj and records off).
             *
             * If bto is NOT null, then we verify that off is within the given bto's range; if not,
             * then we must create a new bto and return that instead.
             *
             * @this {Bus}
             * @param {Object} obj
             * @param {BackTrack} bto
             * @param {number} off (the offset within obj that this wrapper object is relative to)
             * @return {BackTrack|null}
             */
            Bus.prototype.addBackTrackObject = function(obj, bto, off)
            {
                if (BACKTRACK && obj) {
                    var cbtObjects = this.abtObjects.length;
                    if (!bto) {
                        /*
                         * Try the most recently created bto, on the off-chance it's what the caller needs
                         */
                        if (this.ibtLastAlloc >= 0) bto = this.abtObjects[this.ibtLastAlloc];
                    }
                    if (!bto || bto.obj != obj || off < bto.off || off >= bto.off + Bus.BACKTRACK.OFF_MAX) {
            
                        bto = {obj: obj, off: off, slot: 0, refs: 0};
            
                        var slot;
                        if (!this.cbtDeletions) {
                            slot = cbtObjects;
                        } else {
                            for (slot = this.ibtLastDelete; slot < cbtObjects; slot++) {
                                var btoTest = this.abtObjects[slot];
                                if (!btoTest || !btoTest.refs && !this.isBackTrackWeak(slot << Bus.BACKTRACK.SLOT_SHIFT)) {
                                    this.ibtLastDelete = slot + 1;
                                    this.cbtDeletions--;
                                    break;
                                }
                            }
                            /*
                             * There's no longer any guarantee that simply because cbtDeletions was non-zero that there WILL
                             * be an available (existing) slot, because cbtDeletions also counts weak references that may still
                             * be weak.
                             *
                             *      this.assert(slot < cbtObjects);
                             */
                        }
                        this.assert(slot < Bus.BACKTRACK.SLOT_MAX);
                        this.ibtLastAlloc = slot;
                        bto.slot = slot + 1;
                        if (slot == cbtObjects) {
                            this.abtObjects.push(bto);
                        } else {
                            this.abtObjects[slot] = bto;
                        }
                    }
                    return bto;
                }
                return null;
            };
            
            /**
             * getBackTrackIndex(bto, off)
             *
             * @this {Bus}
             * @param {BackTrack|null} bto
             * @param {number} off
             * @return {number}
             */
            Bus.prototype.getBackTrackIndex = function(bto, off)
            {
                var bti = 0;
                if (BACKTRACK && bto) {
                    bti = (bto.slot << Bus.BACKTRACK.SLOT_SHIFT) | Bus.BACKTRACK.TYPE_DATA | (off - bto.off);
                }
                return bti;
            };
            
            /**
             * writeBackTrackObject(addr, bto, off)
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {BackTrack|null} bto
             * @param {number} off
             */
            Bus.prototype.writeBackTrackObject = function(addr, bto, off)
            {
                if (BACKTRACK && bto) {
                    this.assert(off - bto.off >= 0 && off - bto.off < Bus.BACKTRACK.OFF_MAX);
                    var bti = (bto.slot << Bus.BACKTRACK.SLOT_SHIFT) | Bus.BACKTRACK.TYPE_DATA | (off - bto.off);
                    this.writeBackTrack(addr, bti);
                }
            };
            
            /**
             * readBackTrack(addr)
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @return {number}
             */
            Bus.prototype.readBackTrack = function(addr)
            {
                if (BACKTRACK) {
                    return this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].readBackTrack(addr & this.nBlockLimit);
                }
                return 0;
            };
            
            /**
             * writeBackTrack(addr, bti)
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} bti
             */
            Bus.prototype.writeBackTrack = function(addr, bti)
            {
                if (BACKTRACK) {
                    var slot = bti >>> Bus.BACKTRACK.SLOT_SHIFT;
                    var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
                    var btiPrev = this.aMemBlocks[iBlock].writeBackTrack(addr & this.nBlockLimit, bti);
                    var slotPrev = btiPrev >>> Bus.BACKTRACK.SLOT_SHIFT;
                    if (slot != slotPrev) {
                        this.aMemBlocks[iBlock].modBackTrack(true);
                        if (btiPrev && slotPrev) {
                            var btoPrev = this.abtObjects[slotPrev-1];
                            if (!btoPrev) {
                                if (DEBUGGER && this.dbg && this.dbg.messageEnabled(Messages.WARN)) {
                                    this.dbg.message("writeBackTrack(%" + str.toHex(addr) + ',' + str.toHex(bti) + "): previous index (" + str.toHex(btiPrev) + ") refers to empty slot (" + slotPrev + ")");
                                }
                            }
                            else if (btoPrev.refs <= 0) {
                                if (DEBUGGER && this.dbg && this.dbg.messageEnabled(Messages.WARN)) {
                                    this.dbg.message("writeBackTrack(%" + str.toHex(addr) + ',' + str.toHex(bti) + "): previous index (" + str.toHex(btiPrev) + ") refers to object with bad ref count (" + btoPrev.refs + ")");
                                }
                            } else if (!--btoPrev.refs) {
                                /*
                                 * We used to just slam a null into the previous slot and consider it gone, but there may still
                                 * be "weak references" to that slot (ie, it may still be associated with a register bti).
                                 *
                                 * The easiest way to handle weak references is to leave the slot allocated, with the object's ref
                                 * count sitting at zero, and change addBackTrackObject() to look for both empty slots AND non-empty
                                 * slots with a ref count of zero; in the latter case, it should again check for weak references,
                                 * after which we can re-use the slot if all its weak references are now gone.
                                 */
                                if (!this.isBackTrackWeak(btiPrev)) this.abtObjects[slotPrev-1] = null;
                                /*
                                 * TODO: Consider what the appropriate trigger should be for resetting ibtLastDelete to zero;
                                 * if we don't OCCASIONALLY set it to zero, we may never clear out obsolete weak references,
                                 * whereas if we ALWAYS set it to zero, we may be forcing addBackTrackObject() to scan the entire
                                 * table too often.
                                 *
                                 * I'd prefer to do something like this:
                                 *
                                 *      if (this.ibtLastDelete > slotPrev-1) this.ibtLastDelete = slotPrev-1;
                                 *
                                 * or even this:
                                 *
                                 *      if (this.ibtLastDelete > slotPrev-1) this.ibtLastDelete = 0;
                                 *
                                 * But neither one of those guarantees that we will at least occasionally scan the entire table.
                                 */
                                this.ibtLastDelete = 0;
                                this.cbtDeletions++;
                            }
                        }
                        if (bti && slot) {
                            var bto = this.abtObjects[slot-1];
                            if (bto) {
                                this.assert(slot == bto.slot);
                                bto.refs++;
                            }
                        }
                    }
                }
            };
            
            /**
             * isBackTrackWeak(bti)
             *
             * @param {number} bti
             * @returns {boolean} true if the given bti is still referenced by a register, false if not
             */
            Bus.prototype.isBackTrackWeak = function(bti)
            {
                var bt = this.cpu.backTrack;
                var slot = bti >> Bus.BACKTRACK.SLOT_SHIFT;
                return (bt.btiAL   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiAH   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiBL   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiBH   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiCL   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiCH   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiDL   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiDH   >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiBPLo >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiBPHi >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiSILo >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiSIHi >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiDILo >> Bus.BACKTRACK.SLOT_SHIFT == slot ||
                        bt.btiDIHi >> Bus.BACKTRACK.SLOT_SHIFT == slot
                );
            };
            
            /**
             * updateBackTrackCode(addr, bti)
             *
             * @this {Bus}
             * @param {number} addr is a physical address
             * @param {number} bti
             */
            Bus.prototype.updateBackTrackCode = function(addr, bti)
            {
                if (BACKTRACK) {
                    if (bti & Bus.BACKTRACK.TYPE_DATA) {
                        bti = (bti & ~Bus.BACKTRACK.TYPE_MASK) | Bus.BACKTRACK.TYPE_COUNT_INC;
                    } else if ((bti & Bus.BACKTRACK.TYPE_MASK) < Bus.BACKTRACK.TYPE_COUNT_MAX) {
                        bti += Bus.BACKTRACK.TYPE_COUNT_INC;
                    } else {
                        return;
                    }
                    this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].writeBackTrack(addr & this.nBlockLimit, bti);
                }
            };
            
            /**
             * getBackTrackObject(bti)
             *
             * @this {Bus}
             * @param {number} bti
             * @return {Object|null}
             */
            Bus.prototype.getBackTrackObject = function(bti)
            {
                if (BACKTRACK) {
                    var slot = bti >>> Bus.BACKTRACK.SLOT_SHIFT;
                    if (slot) {
                        var bto = this.abtObjects[slot-1];
                        if (bto) return bto.obj;
                    }
                }
                return null;
            };
            
            /**
             * getBackTrackObjectFromAddr(addr)
             *
             * @this {Bus}
             * @param {number} addr
             * @return {Object|null}
             */
            Bus.prototype.getBackTrackObjectFromAddr = function(addr)
            {
                return BACKTRACK? this.getBackTrackObject(this.readBackTrack(addr)) : null;
            };
            
            /**
             * getBackTrackInfo(bti)
             *
             * @this {Bus}
             * @param {number} bti
             * @return {string|null}
             */
            Bus.prototype.getBackTrackInfo = function(bti)
            {
                if (BACKTRACK) {
                    var bto = this.getBackTrackObject(bti);
                    if (bto) {
                        var off = bti & Bus.BACKTRACK.OFF_MASK;
                        var file = bto.obj.file;
                        if (file) {
                            this.assert(!bto.off);
                            return file.sName + '[' + (bto.obj.offFile + off) + ']';
                        }
                        return bto.obj.idComponent + '[' + (bto.off + off) + ']';
                    }
                }
                return null;
            };
            
            /**
             * getBackTrackInfoFromAddr(addr)
             *
             * @this {Bus}
             * @param {number} addr
             * @return {string|null}
             */
            Bus.prototype.getBackTrackInfoFromAddr = function(addr)
            {
                return BACKTRACK? this.getBackTrackInfo(this.readBackTrack(addr)) : null;
            };
            
            /**
             * saveMemory()
             *
             * The only memory blocks we save are those marked as dirty; most likely all of RAM will have been marked dirty,
             * and even if our dirty-memory flags were as smart as our dirty-sector flags (ie, were set only when a write changed
             * what was already there), it's unlikely that would reduce the number of RAM blocks we must save/restore.  At least
             * all the ROM blocks should be clean (except in the unlikely event that the Debugger was used to modify them).
             *
             * All dirty blocks will be stored in a single array, as pairs of block numbers and data arrays, like so:
             *
             *      [iBlock0, [dw0, dw1, ...], iBlock1, [dw0, dw1, ...], ...]
             *
             * In a normal 4Kb block, there will be 1K DWORD values in the data array.  Remember that each DWORD is a signed 32-bit
             * integer (because they are formed using bit-wise operator rather than floating-point math operators), so don't be
             * surprised to see negative numbers in the data.
             *
             * The above example assumes "uncompressed" data arrays.  If we choose to use "compressed" data arrays, the data arrays
             * will look like:
             *
             *      [count0, dw0, count1, dw1, ...]
             *
             * where each count indicates how many times the following DWORD value occurs.  A data array length less than 1K indicates
             * that it's compressed, since we'll only store them in compressed form if they actually shrank, and we'll use State
             * helper methods compress() and decompress() to create and expand the compressed data arrays.
             *
             * @this {Bus}
             * @return {Array} a
             */
            Bus.prototype.saveMemory = function()
            {
                var i = 0;
                var a = [];
                for (var iBlock = 0; iBlock < this.nBlockTotal; iBlock++) {
                    var block = this.aMemBlocks[iBlock];
                    /*
                     * We have to check both fDirty and fDirtyEver, because we may have called cleanMemory() on some of
                     * the memory blocks (eg, video memory), and while cleanMemory() will clear a dirty block's fDirty flag,
                     * it also sets the dirty block's fDirtyEver flag, which is left set for the lifetime of the machine.
                     */
                    if (block.fDirty || block.fDirtyEver) {
                        a[i++] = iBlock;
                        a[i++] = State.compress(block.save());
                    }
                }
                a[i] = this.getA20();
                return a;
            };
            
            /**
             * restoreMemory(a)
             *
             * This restores the contents of all Memory blocks; called by X86CPU.restore().
             *
             * In theory, we ONLY have to save/restore block contents.  Other block attributes,
             * like the type, the memory controller (if any), and the active memory access functions,
             * should already be restored, since every component (re)allocates all the memory blocks
             * it was using when it's restored.  And since the CPU is guaranteed to be the last
             * component to be restored, all those blocks (and their attributes) should be in place now.
             *
             * See saveMemory() for a description of how the memory block contents are saved.
             *
             * @this {Bus}
             * @param {Array} a
             * @return {boolean} true if successful, false if not
             */
            Bus.prototype.restoreMemory = function(a)
            {
                var i;
                for (i = 0; i < a.length - 1; i += 2) {
                    var iBlock = a[i];
                    var adw = a[i+1];
                    if (adw && adw.length < this.nBlockLen) {
                        adw = State.decompress(adw, this.nBlockLen);
                    }
                    var block = this.aMemBlocks[iBlock];
                    if (!block || !block.restore(adw)) {
                        /*
                         * Either the block to restore hasn't been allocated, indicating a change in the machine
                         * configuration since it was last saved (the most likely explanation) or there's some internal
                         * inconsistency (eg, the block size is wrong).
                         */
                        Component.error("Unable to restore memory block " + iBlock);
                        return false;
                    }
                }
                if (a[i] !== undefined) this.setA20(a[i]);
                return true;
            };
            
            /**
             * addMemBreak(addr, fWrite)
             *
             * @this {Bus}
             * @param {number} addr
             * @param {boolean} fWrite is true for a memory write breakpoint, false for a memory read breakpoint
             */
            Bus.prototype.addMemBreak = function(addr, fWrite)
            {
                if (DEBUGGER) {
                    var iBlock = addr >>> this.nBlockShift;
                    this.aMemBlocks[iBlock].addBreakpoint(addr & this.nBlockLimit, fWrite);
                }
            };
            
            /**
             * removeMemBreak(addr, fWrite)
             *
             * @this {Bus}
             * @param {number} addr
             * @param {boolean} fWrite is true for a memory write breakpoint, false for a memory read breakpoint
             */
            Bus.prototype.removeMemBreak = function(addr, fWrite)
            {
                if (DEBUGGER) {
                    var iBlock = addr >>> this.nBlockShift;
                    this.aMemBlocks[iBlock].removeBreakpoint(addr & this.nBlockLimit, fWrite);
                }
            };
            
            /**
             * addPortInputBreak(port)
             *
             * @this {Bus}
             * @param {number} [port]
             * @return {boolean} true if break on port input enabled, false if disabled
             */
            Bus.prototype.addPortInputBreak = function(port)
            {
                if (port === undefined) {
                    this.fPortInputBreakAll = !this.fPortInputBreakAll;
                    return this.fPortInputBreakAll;
                }
                if (this.aPortInputNotify[port] === undefined) {
                    this.aPortInputNotify[port] = [null, null, false];
                }
                this.aPortInputNotify[port][2] = !this.aPortInputNotify[port][2];
                return this.aPortInputNotify[port][2];
            };
            
            /**
             * addPortInputNotify(start, end, component, fn)
             *
             * Add a port input-notification handler to the list of such handlers.
             *
             * @this {Bus}
             * @param {number} start port address
             * @param {number} end port address
             * @param {Component} component
             * @param {function(number,number)} fn is called with the port and LIP values at the time of the input
             */
            Bus.prototype.addPortInputNotify = function(start, end, component, fn)
            {
                if (fn !== undefined) {
                    for (var port = start; port <= end; port++) {
                        if (this.aPortInputNotify[port] !== undefined) {
                            Component.warning("Input port " + str.toHexWord(port) + " registered by " + this.aPortInputNotify[port][0].id + ", ignoring " + component.id);
                            continue;
                        }
                        this.aPortInputNotify[port] = [component, fn, false, false];
                        if (MAXDEBUG) this.log("addPortInputNotify(" + str.toHexWord(port) + "," + component.id + ")");
                    }
                }
            };
            
            /**
             * addPortInputTable(component, table, offset)
             *
             * Add port input-notification handlers from the specified table (a batch version of addPortInputNotify)
             *
             * @this {Bus}
             * @param {Component} component
             * @param {Object} table
             * @param {number} [offset] is an optional port offset
             */
            Bus.prototype.addPortInputTable = function(component, table, offset)
            {
                if (offset === undefined) offset = 0;
                for (var port in table) {
                    this.addPortInputNotify(+port + offset, +port + offset, component, table[port]);
                }
            };
            
            /**
             * checkPortInputNotify(port, addrLIP)
             *
             * @this {Bus}
             * @param {number} port
             * @param {number} [addrLIP] is the LIP value at the time of the input
             * @return {number} simulated port value (0xff if none)
             *
             * NOTE: It seems that at least parts of the ROM BIOS (like the RS-232 probes around F000:E5D7 in the 5150 BIOS)
             * assume that ports for non-existent hardware return 0xff rather than 0x00, hence my new default (0xff) below.
             */
            Bus.prototype.checkPortInputNotify = function(port, addrLIP)
            {
                var bIn = 0xff;
                var aNotify = this.aPortInputNotify[port];
            
                if (BACKTRACK) {
                    this.cpu.backTrack.btiIO = 0;
                }
                if (aNotify !== undefined) {
                    if (aNotify[1]) {
                        var b = aNotify[1].call(aNotify[0], port, addrLIP);
                        if (b !== undefined) bIn = b;
                    }
                    if (DEBUGGER && this.dbg && this.fPortInputBreakAll != aNotify[2]) {
                        this.dbg.checkPortInput(port, bIn);
                    }
                }
                else {
                    if (DEBUGGER && this.dbg) {
                        this.dbg.messageIO(this, port, null, addrLIP);
                        if (this.fPortInputBreakAll) this.dbg.checkPortInput(port, bIn);
                    }
                }
                return bIn;
            };
            
            /**
             * removePortInputNotify(start, end, component, fn)
             *
             * Remove a port input-notification handler from the list of such handlers (to be ENABLED later if needed)
             *
             * @this {Bus}
             * @param {number} start address
             * @param {number} end address
             * @param {Component} component
             * @param {function(number,number)} fn of previously added handler
             *
            Bus.prototype.removePortInputNotify = function(start, end, component, fn)
             {
                for (var port = start; port < end; port++) {
                    if (this.aPortInputNotify[port] && this.aPortInputNotify[port][0] == component && this.aPortInputNotify[port][1] == fn) {
                        this.aPortInputNotify[port] = undefined;
                    }
                }
            };
             */
            
            /**
             * addPortOutputBreak(port)
             *
             * @this {Bus}
             * @param {number} [port]
             * @return {boolean} true if break on port output enabled, false if disabled
             */
            Bus.prototype.addPortOutputBreak = function(port)
            {
                if (port === undefined) {
                    this.fPortOutputBreakAll = !this.fPortOutputBreakAll;
                    return this.fPortOutputBreakAll;
                }
                if (this.aPortOutputNotify[port] === undefined) {
                    this.aPortOutputNotify[port] = [null, null, false];
                }
                this.aPortOutputNotify[port][2] = !this.aPortOutputNotify[port][2];
                return this.aPortOutputNotify[port][2];
            };
            
            /**
             * addPortOutputNotify(start, end, component, fn)
             *
             * Add a port output-notification handler to the list of such handlers.
             *
             * @this {Bus}
             * @param {number} start port address
             * @param {number} end port address
             * @param {Component} component
             * @param {function(number,number)} fn is called with the port and LIP values at the time of the output
             */
            Bus.prototype.addPortOutputNotify = function(start, end, component, fn)
            {
                if (fn !== undefined) {
                    for (var port = start; port <= end; port++) {
                        if (this.aPortOutputNotify[port] !== undefined) {
                            Component.warning("Output port " + str.toHexWord(port) + " registered by " + this.aPortOutputNotify[port][0].id + ", ignoring " + component.id);
                            continue;
                        }
                        this.aPortOutputNotify[port] = [component, fn, false, false];
                        if (MAXDEBUG) this.log("addPortOutputNotify(" + str.toHexWord(port) + "," + component.id + ")");
                    }
                }
            };
            
            /**
             * addPortOutputTable(component, table, offset)
             *
             * Add port output-notification handlers from the specified table (a batch version of addPortOutputNotify)
             *
             * @this {Bus}
             * @param {Component} component
             * @param {Object} table
             * @param {number} [offset] is an optional port offset
             */
            Bus.prototype.addPortOutputTable = function(component, table, offset)
            {
                if (offset === undefined) offset = 0;
                for (var port in table) {
                    this.addPortOutputNotify(+port + offset, +port + offset, component, table[port]);
                }
            };
            
            /**
             * checkPortOutputNotify(port, bOut, addrLIP)
             *
             * @this {Bus}
             * @param {number} port
             * @param {number} bOut
             * @param {number} [addrLIP] is the LIP value at the time of the output
             */
            Bus.prototype.checkPortOutputNotify = function(port, bOut, addrLIP)
            {
                var aNotify = this.aPortOutputNotify[port];
                if (aNotify !== undefined) {
                    if (aNotify[1]) {
                        aNotify[1].call(aNotify[0], port, bOut, addrLIP);
                    }
                    if (DEBUGGER && this.dbg && this.fPortOutputBreakAll != aNotify[2]) {
                        this.dbg.checkPortOutput(port, bOut);
                    }
                }
                else {
                    if (DEBUGGER && this.dbg) {
                        this.dbg.messageIO(this, port, bOut, addrLIP);
                        if (this.fPortOutputBreakAll) this.dbg.checkPortOutput(port, bOut);
                    }
                }
            };
            
            /**
             * removePortOutputNotify(start, end, component, fn)
             *
             * Remove a port output-notification handler from the list of such handlers (to be ENABLED later if needed)
             *
             * @this {Bus}
             * @param {number} start address
             * @param {number} end address
             * @param {Component} component
             * @param {function(number,number)} fn of previously added handler
             *
            Bus.prototype.removePortOutputNotify = function(start, end, component, fn)
             {
                for (var port = start; port < end; port++) {
                    if (this.aPortOutputNotify[port] && this.aPortOutputNotify[port][0] == component && this.aPortOutputNotify[port][1] == fn) {
                        this.aPortOutputNotify[port] = undefined;
                    }
                }
            };
             */
            
            /**
             * reportError(op, addr, size)
             *
             * @this {Bus}
             * @param {number} op
             * @param {number} addr
             * @param {number} size
             * @return {boolean} false
             */
            Bus.prototype.reportError = function(op, addr, size)
            {
                Component.error("Memory block error (" + op + "," + str.toHex(addr) + "," + str.toHex(size) + ")");
                return false;
            };
            
            if (typeof module !== 'undefined') module.exports = Bus;
            
          • chipset.js
            /**
             * @fileoverview Implements the PCjs ChipSet component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-14
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var usr         = require("../../shared/lib/usrlib");
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Interrupts  = require("./interrupts");
                var Messages    = require("./messages");
                var State       = require("./state");
            }
            
            /**
             * ChipSet(parmsChipSet)
             *
             * The ChipSet component has the following component-specific (parmsChipSet) properties:
             *
             *      model:          "5150", "5160", "5170" or "deskpro386" (should be a member of ChipSet.MODELS)
             *      sw1:            8-character binary string representing the SW1 DIP switches (SW1[1-8])
             *      sw2:            8-character binary string representing the SW2 DIP switches (SW2[1-8]) (MODEL_5150 only)
             *      sound:          true to enable (experimental) sound support (default); false to disable
             *      scaleTimers:    true to divide timer cycle counts by the CPU's cycle multiplier (default is false)
             *      floppies:       array of floppy drive sizes in Kb (default is "[360, 360]" if no sw1 value provided)
             *      monitor:        none|tv|color|mono|ega|vga (if no sw1 value provided, default is "ega" for 5170, "mono" otherwise)
             *      rtcDate:        optional RTC date/time (in GMT) to use on reset; use the ISO 8601 format; eg: "2014-10-01T08:00:00"
             *
             * The conventions used for the sw1 and sw2 strings are that the left-most character represents DIP switch [1],
             * the right-most character represents DIP switch [8], and "1" means the DIP switch is ON and "0" means it is OFF.
             *
             * Internally, we convert the above strings into binary values that the 8255A PPI returns, where DIP switch [1]
             * is bit 0 and DIP switch [8] is bit 7, and 0 indicates the switch is ON and 1 indicates it is OFF.
             *
             * For reference, here's how the SW1 and SW2 switches correspond to the internal 8255A PPI bit values:
             *
             *      SW1[1]    (bit 0)     "0xxxxxxx" (1):  IPL,  "1xxxxxxx" (0):  No IPL
             *      SW1[2]    (bit 1)     reserved
             *      SW1[3,4]  (bits 3-2)  "xx11xxxx" (00): 16Kb, "xx01xxxx" (01): 32Kb,  "xx10xxxx" (10): 48Kb,  "xx00xxxx" (11): 64Kb
             *      SW1[5,6]  (bits 5-4)  "xxxx11xx" (00): none, "xxxx01xx" (01): tv,    "xxxx10xx" (10): color, "xxxx00xx" (11): mono
             *      SW1[7,8]  (bits 7-6)  "xxxxxx11" (00): 1 FD, "xxxxxx01" (01): 2 FD,  "xxxxxx10" (10): 3 FD,  "xxxxxx00" (11): 4 FD
             *
             * Note: FD refers to floppy drive, and IPL refers to an "Initial Program Load" floppy drive.
             *
             *      SW2[1-4]    (bits 3-0)  "NNNNxxxx": number of 32Kb blocks of I/O expansion RAM present
             *
             * TODO: There are cryptic references to SW2[5] in the original (5150) TechRef, and apparently the 8255A PPI can
             * be programmed to return it (which we support), but its purpose remains unclear to me (see PPI_B.ENABLE_SW2).
             *
             * For example, sw1="01110011" indicates that all SW1 DIP switches are ON, except for SW1[1], SW1[5] and SW1[6],
             * which are OFF.  Internally, the order of these bits must reversed (to 11001110) and then inverted (to 00110001)
             * to yield the value that the 8255A PPI returns.  Reading the final value right-to-left, 00110001 indicates an
             * IPL floppy drive, 1X of RAM (where X is 16Kb on a MODEL_5150 and 64Kb on a MODEL_5160), MDA, and 1 floppy drive.
             *
             * WARNING: It is possible to set SW1 to indicate more memory than the RAM component has been configured to provide.
             * This is a configuration error which will cause the machine to crash after reporting a "201" error code (memory
             * test failure), which is presumably what a real machine would do if it was similarly misconfigured.  Surprisingly,
             * the BIOS forges ahead, setting SP to the top of the memory range indicated by SW1 (via INT 0x12), but the lack of
             * a valid stack causes the system to crash after the next IRET.  The BIOS should have either halted or modified
             * the actual memory size to match the results of the memory test.
             *
             * This module provides support for many of the following components (except where a separate component is noted).
             * This list is taken from p.1-8 ("System Unit") of the IBM 5160 (PC XT) Technical Reference Manual (as revised
             * April 1983), only because I didn't see a similar listing in the original 5150 TechRef.
             *
             *      Port(s)         Description
             *      -------         -----------
             *      000-00F         DMA Chip 8237A-5                                [see below]
             *      020-021         Interrupt 8259A                                 [see below]
             *      040-043         Timer 8253-5                                    [see below]
             *      060-063         PPI 8255A-5                                     [see below]
             *      080-083         DMA Page Registers                              [see below]
             *          0Ax [1]     NMI Mask Register                               [see below]
             *          0Cx         Reserved
             *          0Ex         Reserved
             *      200-20F         Game Control
             *      210-217         Expansion Unit
             *      220-24F         Reserved
             *      278-27F         Reserved
             *      2F0-2F7         Reserved
             *      2F8-2FF         Asynchronous Communications (Secondary)         [see the SerialPort component]
             *      300-31F         Prototype Card
             *      320-32F         Hard Drive Controller (XTC)                     [see the HDC component]
             *      378-37F         Printer
             *      380-38C [2]     SDLC Communications
             *      380-389 [2]     Binary Synchronous Communications (Secondary)
             *      3A0-3A9         Binary Synchronous Communications (Primary)
             *      3B0-3BF         IBM Monochrome Display/Printer                  [see the Video component]
             *      3C0-3CF         Reserved
             *      3D0-3DF         Color/Graphics (Motorola 6845)                  [see the Video component]
             *      3EO-3E7         Reserved
             *      3FO-3F7         Floppy Drive Controller                         [see the FDC component]
             *      3F8-3FF         Asynchronous Communications (Primary)           [see the SerialPort component]
             *
             * [1] At power-on time, NMI is masked off, perhaps because models 5150 and 5160 also tie coprocessor
             * interrupts to NMI.  Suppressing NMI by default seems odd, because that would also suppress memory
             * parity errors.  TODO: Determine whether "power-on time" refers to the initial power-on state of the
             * NMI Mask Register or the state that the BIOS "POST" (Power-On Self-Test) sets.
             *
             * [2] These devices cannot be used together since their port addresses overlap.
             *
             *      MODEL_5170      Description
             *      ----------      -----------
             *          070 [3]     CMOS Address                                    ChipSet.CMOS.ADDR.PORT
             *          071         CMOS Data                                       ChipSet.CMOS.DATA.PORT
             *          0F0         Coprocessor Clear Busy (output 0x00)
             *          0F1         Coprocessor Reset (output 0x00)
             *      1F0-1F7         Hard Drive Controller (ATC)                     [see the HDC component]
             *
             * [3] Port 0x70 doubles as the NMI Mask Register: output a CMOS address with bit 7 clear to enable NMI
             * or with bit 7 set to disable NMI (apparently the inverse of the older NMI Mask Register at port 0xA0).
             * Also, apparently unlike previous models, the MODEL_5170 POST leaves NMI enabled.  And fortunately, the
             * coprocessor interrupt line is no longer tied to NMI (it uses IRQ 13).
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsChipSet
             */
            function ChipSet(parmsChipSet)
            {
                Component.call(this, "ChipSet", parmsChipSet, ChipSet, Messages.CHIPSET);
            
                this.model = parmsChipSet['model'];
                this.model = this.model && ChipSet.MODELS[this.model] || ChipSet.MODEL_5150;
            
                /*
                 * SW1 describes the number of floppy drives, the amount of base memory, the primary monitor type,
                 * and (on the MODEL_5160) whether or not a coprocessor is installed.  If no SW1 settings are provided,
                 * we look for individual 'floppies' and 'monitor' settings and build a default SW1 value.
                 *
                 * The defaults below select max memory, monochrome monitor (EGA monitor for MODEL_5170), and two floppies.
                 * Don't get too excited about "max memory" either: on a MODEL_5150, the max was 64Kb, and on a MODEL_5160,
                 * the max was 256Kb.  However, the RAM component is free to install as much base memory as it likes,
                 * overriding the SW1 memory setting.
                 *
                 * Given that the ROM BIOS is hard-coded to load boot sectors @0000:7C00, the minimum amount of system RAM
                 * required to boot is therefore 32Kb.  Whether that's actually enough to run any or all versions of PC-DOS is
                 * a separate question.  FYI, with only 16Kb, the ROM BIOS will still try to boot, and fail miserably.
                 */
                this.sw1Init = 0;
                var sw1 = parmsChipSet['sw1'];
                if (sw1) {
                    this.sw1Init = this.parseSwitches(sw1, ChipSet.PPI_SW.MEMORY.X4 | ChipSet.PPI_SW.MONITOR.MONO);
                } else {
                    this.aFloppyDrives = [360, 360];
                    var aFloppyDrives = parmsChipSet['floppies'];
                    if (aFloppyDrives && aFloppyDrives.length) this.aFloppyDrives = aFloppyDrives;
                    var nDrives = this.aFloppyDrives.length;
                    if (nDrives) {
                        this.sw1Init |= ChipSet.PPI_SW.FDRIVE.IPL;
                        nDrives--;
                        this.sw1Init |= ((nDrives & 0x3) << ChipSet.PPI_SW.FDRIVE.SHIFT);
                    }
                    var sMonitor = parmsChipSet['monitor'] || (this.model < ChipSet.MODEL_5170? "mono" : "ega");
                    if (sMonitor && ChipSet.aMonitorSwitches[sMonitor] !== undefined) {
                        this.sw1Init |= (ChipSet.aMonitorSwitches[sMonitor] << ChipSet.PPI_SW.MONITOR.SHIFT);
                    }
                }
            
                /*
                 * SW2 describes the number of 32Kb blocks of I/O expansion RAM that's present in the system. The MODEL_5150
                 * ROM BIOS only checked/supported the first four switches, so the maximum amount of additional RAM specifiable
                 * was 15 * 32Kb, or 480Kb.  With a maximum of 64Kb on the motherboard, the MODEL_5150 ROM BIOS could support
                 * a grand total of 544Kb.
                 *
                 * For MODEL_5160 (PC XT) and up, memory expansion cards had their own configuration switches, and the motherboard
                 * SW2 switches for I/O expansion RAM were eliminated.  Instead, the ROM BIOS scans the entire address space
                 * (up to 0xA0000) looking for additional memory.  As a result, the only mechanism we provide for adding RAM
                 * (above the maximum of 256Kb supported on the motherboard) is the "size" parameter of the RAM component.
                 *
                 * NOTE: If you use the "size" parameter, you will not be able to dynamically alter the memory configuration;
                 * the RAM component will ignore any changes to SW1.
                 */
                this.sw2Init = this.parseSwitches(parmsChipSet['sw2'] || "11110000", 0);
            
                /*
                 * The SW1 memory setting is actually just a multiplier: it's multiplied by 16Kb on a MODEL_5150, 64Kb otherwise.
                 */
                this.kbSW = (this.model == ChipSet.MODEL_5150? 16 : 64);
            
                this.cDMACs = this.cPICs = 1;
                if (this.model >= ChipSet.MODEL_5170) {
                    this.cDMACs = this.cPICs = 2;
                }
            
                this.fScaleTimers = parmsChipSet['scaleTimers'] || false;
                this.sRTCDate = parmsChipSet['rtcDate'];
            
                /*
                 * Here, I'm finally getting around to trying the Web Audio API.  Fortunately, based on what little I know about
                 * sound generation, using the API to make the same noises as the IBM PC speaker seems straightforward.
                 *
                 * To start, we create an audio context, unless the 'sound' parameter has been explicitly set to false.
                 *
                 * From:
                 *
                 *      http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/PlayingandSynthesizingSounds/PlayingandSynthesizingSounds.html
                 *
                 * "Similar to how HTML5 canvas requires a context on which lines and curves are drawn, Web Audio requires an audio context
                 *  on which sounds are played and manipulated. This context will be the parent object of further audio objects to come....
                 *  Your audio context is typically created when your page initializes and should be long-lived. You can play multiple sounds
                 *  coming from multiple sources within the same context, so it is unnecessary to create more than one audio context per page."
                 */
                this.fSpeaker = false;
                if (parmsChipSet['sound']) {
                    this.classAudio = this.contextAudio = null;
                    if (window) {
                        this.classAudio = window['AudioContext'] || window['webkitAudioContext'];
                    }
                    if (this.classAudio) {
                        this.contextAudio = new this.classAudio();
                    } else {
                        if (DEBUG) this.log("AudioContext not available");
                    }
                }
            
                /*
                 * I used to defer ChipSet's reset() to powerUp(), which then gave us the option of doing either
                 * reset() OR restore(), instead of both.  However, on MODEL_5170 machines, the initial CMOS data
                 * needs to be created earlier, so that when other components are initializing their state (eg, when
                 * HDC calls setCMOSDriveType() or RAM calls addCMOSMemory()), the CMOS will be ready to take their calls.
                 */
                this.reset(true);
            
                this.setReady();
            }
            
            Component.subclass(ChipSet);
            
            /*
             * Supported model numbers
             *
             * Unless otherwise noted, all BIOS references refer to the *original* BIOS released with each model.
             */
            ChipSet.MODEL_5150      = 5150;         // used in reference to the 1st 5150 BIOS, dated Apr 24, 1981
            ChipSet.MODEL_5160      = 5160;         // used in reference to the 1st 5160 BIOS, dated Nov 8, 1982
            ChipSet.MODEL_5170      = 5170;         // used in reference to the 1st 5170 BIOS, dated Jan 10, 1984
            
            /*
             * The following are fake model numbers, used only to document issues/features in later IBM PC AT BIOS revisions.
             */
            ChipSet.MODEL_5170_REV2 = 5170.2;       // used in reference to the 2nd 5170 BIOS, dated Jun 10, 1985
            ChipSet.MODEL_5170_REV3 = 5170.3;       // used in reference to the 3rd 5170 BIOS, dated Nov 15, 1985
            
            /*
             * The following are even more fake model numbers, as we begin to depart from the IBM lineage.  All that
             * really matters at this point is that MODEL_DESKPRO386 > MODEL_5170.
             */
            ChipSet.MODEL_DESKPRO386 = 5180;
            
            /*
             * Last but not least, a complete list of supported model strings, and corresponding internal model numbers.
             */
            ChipSet.MODELS = {
                "5150":         ChipSet.MODEL_5150,
                "5160":         ChipSet.MODEL_5160,
                "5170":         ChipSet.MODEL_5170,
                "deskpro386":   ChipSet.MODEL_DESKPRO386
            };
            
            /*
             * Values returned by ChipSet.getSWVideoMonitor()
             */
            ChipSet.MONITOR = {
                NONE:               0,
                TV:                 1,  // Composite monitor (lower resolution; no support)
                COLOR:              2,  // Color Display (5153)
                MONO:               3,  // Monochrome Display (5151)
                EGACOLOR:           4,  // Enhanced Color Display (5154) in High-Res Mode
                EGAEMULATION:       6,  // Enhanced Color Display (5154) in Emulation Mode
                VGACOLOR:           7   // VGA Color Display
            };
            
            /*
             * Lookup table for converting ChipSet "monitor" values into the corresponding SW1 switch bits
             * (they must be shifted left by ChipSet.PPI_SW.MONITOR.SHIFT before OR'ing them into sw1/sw1Init).
             */
            ChipSet.aMonitorSwitches = {
                "none":             0x0,
                "tv":               0x1,
                "color":            0x2,
                "mono":             0x3,
                "ega":              0x0,
                "vga":              0x0
            };
            
            /*
             *  8237A DMA Controller (DMAC) I/O ports
             *
             *  MODEL_5150 and up uses DMA channel 0 for memory refresh cycles and channel 2 for the FDC.
             *
             *  MODEL_5160 and up uses DMA channel 3 for HDC transfers (XTC only).
             *
             *  DMA0 refers to the original DMA controller found on all models, and DMA1 refers to the additional
             *  controller found on MODEL_5170 and up; channel 4 on DMA1 is used to "cascade" channels 0-3 from DMA0,
             *  so only channels 5-7 are available on DMA1.
             *
             *  For FDC DMA notes, refer to http://wiki.osdev.org/ISA_DMA
             *  For general DMA notes, refer to http://www.freebsd.org/doc/en/books/developers-handbook/dma.html
             *
             *  TODO: Determine why the MODEL_5150 ROM BIOS sets the DMA channel 1 page register (port 0x83) to zero.
             */
            ChipSet.DMA0 = {
                INDEX:              0,
                PORT: {
                    CH0_ADDR:       0x00,   // OUT: starting address        IN: current address
                    CH0_COUNT:      0x01,   // OUT: starting word count     IN: remaining word count
                    CH1_ADDR:       0x02,   // OUT: starting address        IN: current address
                    CH1_COUNT:      0x03,   // OUT: starting word count     IN: remaining word count
                    CH2_ADDR:       0x04,   // OUT: starting address        IN: current address
                    CH2_COUNT:      0x05,   // OUT: starting word count     IN: remaining word count
                    CH3_ADDR:       0x06,   // OUT: starting address        IN: current address
                    CH3_COUNT:      0x07,   // OUT: starting word count     IN: remaining word count
                    CMD_STATUS:     0x08,   // OUT: command register        IN: status register
                    REQUEST:        0x09,
                    MASK:           0x0A,
                    MODE:           0x0B,
                    RESET_FF:       0x0C,   // reset flip-flop
                    MASTER_CLEAR:   0x0D,   // master clear
                    MASK_CLEAR:     0x0E,   // TODO: Provide handlers
                    MASK_ALL:       0x0F,   // TODO: Provide handlers
                    CH2_PAGE:       0x81,   // OUT: DMA channel 2 page register
                    CH3_PAGE:       0x82,   // OUT: DMA channel 3 page register
                    CH1_PAGE:       0x83,   // OUT: DMA channel 1 page register
                    CH0_PAGE:       0x87    // OUT: DMA channel 0 page register (unusable; See "The Inside Out" book, p.246)
                }
            };
            ChipSet.DMA1 = {
                INDEX:              1,
                PORT: {
                    CH6_PAGE:       0x89,   // OUT: DMA channel 6 page register (MODEL_5170)
                    CH7_PAGE:       0x8A,   // OUT: DMA channel 7 page register (MODEL_5170)
                    CH5_PAGE:       0x8B,   // OUT: DMA channel 5 page register (MODEL_5170)
                    CH4_PAGE:       0x8F,   // OUT: DMA channel 4 page register (MODEL_5170; unusable; aka "Refresh" page register?)
                    CH4_ADDR:       0xC0,   // OUT: starting address        IN: current address
                    CH4_COUNT:      0xC2,   // OUT: starting word count     IN: remaining word count
                    CH5_ADDR:       0xC4,   // OUT: starting address        IN: current address
                    CH5_COUNT:      0xC6,   // OUT: starting word count     IN: remaining word count
                    CH6_ADDR:       0xC8,   // OUT: starting address        IN: current address
                    CH6_COUNT:      0xCA,   // OUT: starting word count     IN: remaining word count
                    CH7_ADDR:       0xCC,   // OUT: starting address        IN: current address
                    CH7_COUNT:      0xCE,   // OUT: starting word count     IN: remaining word count
                    CMD_STATUS:     0xD0,   // OUT: command register        IN: status register
                    REQUEST:        0xD2,
                    MASK:           0xD4,
                    MODE:           0xD6,
                    RESET_FF:       0xD8,   // reset flip-flop
                    MASTER_CLEAR:   0xDA,   // master clear
                    MASK_CLEAR:     0xDC,   // TODO: Provide handlers
                    MASK_ALL:       0xDE    // TODO: Provide handlers
                }
            };
            
            ChipSet.DMA_CMD = {
                M2M_ENABLE:         0x01,
                CH0HOLD_ENABLE:     0x02,
                CTRL_DISABLE:       0x04,
                COMP_TIMING:        0x08,
                ROT_PRIORITY:       0x10,
                EXT_WRITE_SEL:      0x20,
                DREQ_ACTIVE_LO:     0x40,
                DACK_ACTIVE_HI:     0x80
            };
            
            ChipSet.DMA_STATUS = {
                CH0_TC:             0x01,   // Channel 0 has reached Terminal Count (TC)
                CH1_TC:             0x02,   // Channel 1 has reached Terminal Count (TC)
                CH2_TC:             0x04,   // Channel 2 has reached Terminal Count (TC)
                CH3_TC:             0x08,   // Channel 3 has reached Terminal Count (TC)
                ALL_TC:             0x0f,   // all TC bits are cleared whenever DMA_STATUS is read
                CH0_REQ:            0x10,   // Channel 0 DMA requested
                CH1_REQ:            0x20,   // Channel 1 DMA requested
                CH2_REQ:            0x40,   // Channel 2 DMA requested
                CH3_REQ:            0x80    // Channel 3 DMA requested
            };
            
            ChipSet.DMA_MASK = {
                CHANNEL:            0x03,
                CHANNEL_SET:        0x04
            };
            
            ChipSet.DMA_MODE = {
                CHANNEL:            0x03,   // bits 0-1 select 1 of 4 possible channels
                TYPE:               0x0C,   // bits 2-3 select 1 of 3 valid (4 possible) transfer types
                TYPE_VERIFY:        0x00,   // pseudo transfer (generates addresses, responds to EOP, but nothing is moved)
                TYPE_WRITE:         0x04,   // write to memory (move data FROM an I/O device; eg, reading a sector from a disk)
                TYPE_READ:          0x08,   // read from memory (move data TO an I/O device; eg, writing a sector to a disk)
                AUTOINIT:           0x10,
                DECREMENT:          0x20,   // clear for INCREMENT
                MODE:               0xC0,   // bits 6-7 select 1 of 4 possible transfer modes
                MODE_DEMAND:        0x00,
                MODE_SINGLE:        0x40,
                MODE_BLOCK:         0x80,
                MODE_CASCADE:       0xC0
            };
            
            ChipSet.DMA_REFRESH   = 0x00;   // DMA channel assigned to memory refresh
            ChipSet.DMA_FDC       = 0x02;   // DMA channel assigned to the Floppy Drive Controller (FDC)
            ChipSet.DMA_HDC       = 0x03;   // DMA channel assigned to the Hard Drive Controller (HDC; XTC only)
            
            /*
             * 8259A Programmable Interrupt Controller (PIC) I/O ports
             *
             * Internal registers:
             *
             *      ICW1    Initialization Command Word 1 (sent to port ChipSet.PIC_LO)
             *      ICW2    Initialization Command Word 2 (sent to port ChipSet.PIC_HI)
             *      ICW3    Initialization Command Word 3 (sent to port ChipSet.PIC_HI)
             *      ICW4    Initialization Command Word 4 (sent to port ChipSet.PIC_HI)
             *      IMR     Interrupt Mask Register
             *      IRR     Interrupt Request Register
             *      ISR     Interrupt Service Register
             *      IRLow   (IR having lowest priority; IR+1 will have highest priority; default is 7)
             *
             * Note that ICW2 effectively contains the starting IDT vector number (ie, for IRQ 0),
             * which must be multiplied by 4 to calculate the vector offset, since every vector is 4 bytes long.
             *
             * Also, since the low 3 bits of ICW2 are ignored in 8086/8088 mode (ie, they are effectively
             * treated as zeros), this means that the starting IDT vector can only be a multiple of 8.
             *
             * So, if ICW2 is set to 0x08, the starting vector number (ie, for IRQ 0) will be 0x08, and the
             * 4-byte address for the corresponding ISR will be located at offset 0x20 in the real-mode IDT.
             *
             * ICW4 is typically set to 0x09, indicating 8086 mode, non-automatic EOI, buffered/slave mode.
             *
             * TODO: Determine why the original ROM BIOS chose buffered/slave over buffered/master.
             * Did it simply not matter in pre-AT systems with only one PIC, or am I misreading something?
             *
             * TODO: Consider support for level-triggered PIC interrupts, even though the original IBM PCs
             * (up through MODEL_5170) used only edge-triggered interrupts.
             */
            ChipSet.PIC0 = {                // all models: the "master" PIC
                INDEX:              0,
                PORT_LO:            0x20,
                PORT_HI:            0x21
            };
            
            ChipSet.PIC1 = {                // MODEL_5170 and up: the "slave" PIC
                INDEX:              1,
                PORT_LO:            0xA0,
                PORT_HI:            0xA1
            };
            
            ChipSet.PIC_LO = {              // ChipSet.PIC1.PORT_LO or ChipSet.PIC2.PORT_LO
                ICW1:               0x10,   // set means ICW1
                ICW1_ICW4:          0x01,   // ICW4 needed (otherwise ICW4 must be sent)
                ICW1_SNGL:          0x02,   // single PIC (and therefore no ICW3; otherwise there is another "cascaded" PIC)
                ICW1_ADI:           0x04,   // call address interval is 4 (otherwise 8; presumably ignored in 8086/8088 mode)
                ICW1_LTIM:          0x08,   // level-triggered interrupt mode (otherwise edge-triggered mode, which is what PCs use)
                OCW2:               0x00,   // bit 3 (PIC_LO.OCW3) and bit 4 (ChipSet.PIC_LO.ICW1) are clear in an OCW2 command byte
                OCW2_IR_LVL:        0x07,
                OCW2_OP_MASK:       0xE0,   // of the following valid OCW2 operations, the first 4 are EOI commands (all have ChipSet.PIC_LO.OCW2_EOI set)
                OCW2_EOI:           0x20,   // non-specific EOI (end-of-interrupt)
                OCW2_EOI_SPEC:      0x60,   // specific EOI
                OCW2_EOI_ROT:       0xA0,   // rotate on non-specific EOI
                OCW2_EOI_ROTSPEC:   0xE0,   // rotate on specific EOI
                OCW2_SET_ROTAUTO:   0x80,   // set rotate in automatic EOI mode
                OCW2_CLR_ROTAUTO:   0x00,   // clear rotate in automatic EOI mode
                OCW2_SET_PRI:       0xC0,   // bits 0-2 specify the lowest priority interrupt
                OCW3:               0x08,   // bit 3 (PIC_LO.OCW3) is set and bit 4 (PIC_LO.ICW1) clear in an OCW3 command byte (bit 7 should be clear, too)
                OCW3_READ_IRR:      0x02,   // read IRR register
                OCW3_READ_ISR:      0x03,   // read ISR register
                OCW3_READ_CMD:      0x03,
                OCW3_POLL_CMD:      0x04,   // poll
                OCW3_SMM_RESET:     0x40,   // special mask mode: reset
                OCW3_SMM_SET:       0x60,   // special mask mode: set
                OCW3_SMM_CMD:       0x60
            };
            
            ChipSet.PIC_HI = {              // ChipSet.PIC1.PORT_HI or ChipSet.PIC2.PORT_HI
                ICW2_VECTOR:        0xF8,   // starting vector number (bits 0-2 are effectively treated as zeros in 8086/8088 mode)
                ICW4_8086:          0x01,
                ICW4_AUTO_EOI:      0x02,
                ICW4_MASTER:        0x04,
                ICW4_BUFFERED:      0x08,
                ICW4_FULLY_NESTED:  0x10,
                OCW1_IMR:           0xFF
            };
            
            /*
             * The priorities of IRQs 0-7 are normally high to low, unless the master PIC has been reprogrammed.
             * Also, if a slave PIC is present, the priorities of IRQs 8-15 fall between the priorities of IRQs 1 and 3.
             *
             * As the MODEL_5170 TechRef states:
             *
             *      "Interrupt requests are prioritized, with IRQ9 through IRQ12 and IRQ14 through IRQ15 having the
             *      highest priority (IRQ9 is the highest) and IRQ3 through IRQ7 having the lowest priority (IRQ7 is
             *      the lowest).
             *
             *      Interrupt 13 (IRQ.COPROC) is used on the system board and is not available on the I/O channel.
             *      Interrupt 8 (IRQ.RTC) is used for the real-time clock."
             *
             * This priority scheme is a byproduct of IRQ8 through IRQ15 (slave PIC interrupts) being tied to IRQ2 of
             * the master PIC.  As a result, the two other system board interrupts, IRQ0 and IRQ1, continue to have the
             * highest priority, by default.
             */
            ChipSet.IRQ = {
                TIMER0:             0x00,
                KBD:                0x01,
                SLAVE:              0x02,   // MODEL_5170
                COM2:               0x03,
                COM1:               0x04,
                XTC:                0x05,   // MODEL_5160 uses IRQ 5 for HDC (XTC version)
                LPT2:               0x05,   // MODEL_5170 uses IRQ 5 for LPT2
                FDC:                0x06,
                LPT1:               0x07,
                RTC:                0x08,   // MODEL_5170
                IRQ2:               0x09,   // MODEL_5170
                COPROC:             0x0D,   // MODEL_5170
                ATC:                0x0E    // MODEL_5170 uses IRQ 14 for HDC (ATC version)
            };
            
            /*
             * 8253 Programmable Interval Timer (PIT) I/O ports
             *
             * Although technically, a PIT provides 3 "counters" rather than 3 "timers", we have
             * adopted IBM's TechRef nomenclature, which refers to the PIT's counters as TIMER0,
             * TIMER1, and TIMER2.  For machines with a second PIT (eg, the DeskPro 386), we refer
             * to those additional counters as TIMER3, TIMER4, and TIMER5.
             *
             * In addition, if there's a need to refer to a specfic PIT, use PIT0 for the first PIT
             * and PIT1 for the second.  This mirrors how we refer to multiple DMA controllers
             * (eg, DMA0 and DMA1) and multiple PICs (eg, PIC0 and PIC1).
             *
             * This differs from Compaq's nomenclature, which used "Timer 1" to refer to the first
             * PIT, and "Timer 2" for the second PIT, and then referred to "Counter 0", "Counter 1",
             * and "Counter 2" within each PIT.
             */
            ChipSet.PIT0 = {
                PORT:               0x40,
                TIMER0:             0,      // used for time-of-day (prior to MODEL_5170)
                TIMER1:             1,      // used for memory refresh
                TIMER2:             2       // used for speaker tone generation
            };
            
            ChipSet.PIT1 = {
                PORT:               0x48,   // MODEL_DESKPRO386 only
                TIMER3:             0,      // used for fail-safe clock
                TIMER4:             1,      // N/A
                TIMER5:             2       // used for refresher request extend/speed control
            };
            
            ChipSet.PIT_CTRL = {
                PORT1:              0x43,   // write-only control register (use the Read-Back command to get status)
                PORT2:              0x4B,   // write-only control register (use the Read-Back command to get status)
                BCD:                0x01,
                MODE:               0x0E,
                MODE0:              0x00,   // interrupt on Terminal Count (TC)
                MODE1:              0x02,   // programmable one-shot
                MODE2:              0x04,   // rate generator
                MODE3:              0x06,   // square wave generator
                MODE4:              0x08,   // software-triggered strobe
                MODE5:              0x0A,   // hardware-triggered strobe
                RW:                 0x30,
                RW_LATCH:           0x00,
                RW_LSB:             0x10,
                RW_MSB:             0x20,
                RW_BOTH:            0x30,
                SC:                 0xC0,
                SC_CTR0:            0x00,
                SC_CTR1:            0x40,
                SC_CTR2:            0x80,
                SC_BACK:            0xC0
            };
            
            ChipSet.TIMER_TICKS_PER_SEC = 1193181;
            
            /*
             * 8255A Programmable Peripheral Interface (PPI) I/O ports, for Cassette/Speaker/Keyboard/SW1/etc
             *
             * Normally, 0x99 is written to PPI_CTRL.PORT, indicating that PPI_A.PORT and PPI_C.PORT are INPUT ports
             * and PPI_B.PORT is an OUTPUT port.
             *
             * However, the MODEL_5160 ROM BIOS initially writes 0x89 instead, making PPI_A.PORT an OUTPUT port.
             * I'm guessing that's just part of some "diagnostic mode", because all it writes to PPI_A.PORT are a series
             * of "checkpoint" values (ie, 0x01, 0x02, and 0x03) before updating PPI_CTRL.PORT with the usual 0x99.
             */
            ChipSet.PPI_A = {               // this.bPPIA (port 0x60)
                PORT:               0x60    // INPUT: keyboard scan code (PPI_B.CLEAR_KBD must be clear)
            };
            
            ChipSet.PPI_B = {               // this.bPPIB (port 0x61)
                PORT:               0x61,   // OUTPUT (although it has to be treated as INPUT, too: the keyboard interrupt handler reads it, OR's PPI_B.CLEAR_KBD, writes it, and then rewrites the original read value)
                CLK_TIMER2:         0x01,   // ALL: set to enable clock to TIMER2
                SPK_TIMER2:         0x02,   // ALL: set to connect output of TIMER2 to speaker (MODEL_5150: clear for cassette)
                ENABLE_SW2:         0x04,   // MODEL_5150: set to enable SW2[1-4] through PPI_C.PORT, clear to enable SW2[5]; MODEL_5160: unused (there is no SW2 switch block on the MODEL_5160 motherboard)
                CASS_MOTOR_OFF:     0x08,   // MODEL_5150: cassette motor off
                ENABLE_SW_HI:       0x08,   // MODEL_5160: clear to read SW1[1-4], set to read SW1[5-8]
                DISABLE_RW_MEM:     0x10,   // ALL: clear to enable RAM parity check, set to disable
                DISABLE_IO_CHK:     0x20,   // ALL: clear to enable I/O channel check, set to disable
                CLK_KBD:            0x40,   // ALL: clear to force keyboard clock low
                CLEAR_KBD:          0x80    // ALL: clear to enable keyboard scan codes (MODEL_5150: set to enable SW1 through PPI_A.PORT)
            };
            
            ChipSet.PPI_C = {               // this.bPPIC (port 0x62)
                PORT:               0x62,   // INPUT (see below)
                SW:                 0x0F,   // MODEL_5150: SW2[1-4] or SW2[5], depending on whether PPI_B.ENABLE_SW2 is set or clear; MODEL_5160: SW1[1-4] or SW1[5-8], depending on whether PPI_B.ENABLE_SW_HI is clear or set
                CASS_DATA_IN:       0x10,
                TIMER2_OUT:         0x20,
                IO_CHANNEL_CHK:     0x40,   // used by NMI handler to detect I/O channel errors
                RW_PARITY_CHK:      0x80    // used by NMI handler to detect R/W memory parity errors
            };
            
            ChipSet.PPI_CTRL = {            // this.bPPICtrl (port 0x63)
                PORT:               0x63,   // OUTPUT: initialized to 0x99, defining PPI_A and PPI_C as INPUT and PPI_B as OUTPUT
                A_IN:               0x10,
                B_IN:               0x02,
                C_IN_LO:            0x01,
                C_IN_HI:            0x08,
                B_MODE:             0x04,
                A_MODE:             0x60
            };
            
            /*
             * On the MODEL_5150, the following PPI_SW bits are exposed through PPI_A.
             *
             * On the MODEL_5160, either the low or high 4 bits are exposed through PPI_C.SW, if PPI_B.ENABLE_SW_HI is clear or set.
             */
            ChipSet.PPI_SW = {
                FDRIVE: {
                    IPL:            0x01,   // MODEL_5150: IPL ("Initial Program Load") floppy drive attached; MODEL_5160: "Loop on POST"
                    ONE:            0x00,   // 1 floppy drive attached (or 0 drives if PPI_SW.FDRIVE_IPL is not set -- MODEL_5150 only)
                    TWO:            0x40,   // 2 floppy drives attached
                    THREE:          0x80,   // 3 floppy drives attached
                    FOUR:           0xC0,   // 4 floppy drives attached
                    MASK:           0xC0,
                    SHIFT:          6
                },
                COPROC:             0x02,   // MODEL_5150: reserved; MODEL_5160: coprocessor installed
                MEMORY: {                   // MODEL_5150: "X" is 16Kb; MODEL_5160: "X" is 64Kb
                    X1:             0x00,   // 16Kb or 64Kb
                    X2:             0x04,   // 32Kb or 128Kb
                    X3:             0x08,   // 48Kb or 192Kb
                    X4:             0x0C,   // 64Kb or 256Kb
                    MASK:           0x0C,
                    SHIFT:          2
                },
                MONITOR: {
                    TV:             0x10,
                    COLOR:          0x20,
                    MONO:           0x30,
                    MASK:           0x30,
                    SHIFT:          4
                }
            };
            
            /*
             * 8042 Keyboard Controller I/O ports (MODEL_5170)
             *
             * On the MODEL_5170, port 0x60 is designated KBC.DATA rather than PPI_A, although the BIOS also refers to it
             * as "PORT_A: 8042 KEYBOARD SCAN/DIAG OUTPUTS").  This is the 8042's output buffer and should be read only when
             * KBC.STATUS.OUTBUFF_FULL is set.
             *
             * Similarly, port 0x61 is designated KBC.RWREG rather than PPI_B; the BIOS also refers to it as "PORT_B: 8042
             * READ WRITE REGISTER", but it is not otherwise discussed in the MODEL_5170 TechRef's 8042 documentation.
             *
             * There are brief references to bits 0 and 1 (KBC.RWREG.CLK_TIMER2 and KBC.RWREG.SPK_TIMER2), and the BIOS sets
             * bits 2-7 to "DISABLE PARITY CHECKERS" (principally KBC.RWREG.DISABLE_NMI, which are bits 2 and 3); why the BIOS
             * also sets bits 4-7 (or if those bits are even settable) is unclear, since it uses 11111100b rather than defined
             * constants.
             *
             * The bottom line: on a MODEL_5170, port 0x61 is still used for speaker control and parity checking, so we use
             * the same register (bPPIB) but install different I/O handlers.  It's also bi-directional: at one point, the BIOS
             * reads KBC.RWREG.REFRESH_BIT (bit 4) to verify that it's alternating.
             *
             * PPI_C and PPI_CTRL don't seem to be documented or used by the MODEL_5170 BIOS, so I'm assuming they're obsolete.
             *
             * NOTE: For more information on the 8042 Controller, including information on undocumented commands, refer to the
             * documents in /devices/pc/keyboard, as well as the following websites:
             *
             *      http://halicery.com/8042/8042_INTERN_TXT.htm
             *      http://www.os2museum.com/wp/ibm-pcat-8042-keyboard-controller-commands/
             */
            ChipSet.KBC = {
                DATA: {                     // this.b8042OutBuff (PPI_A on previous models, still referred to as "PORT A" by the MODEL_5170 BIOS)
                    PORT:           0x60,
                    CMD: {                  // this.b8042CmdData (KBC.DATA.CMD "data bytes" written to port 0x60, after writing a KBC.CMD byte to port 0x64)
                        INT_ENABLE: 0x01,   // generate an interrupt when the controller places data in the output buffer
                        SYS_FLAG:   0x04,   // this value is propagated to ChipSet.KBC.STATUS.SYS_FLAG
                        NO_INHIBIT: 0x08,   // disable inhibit function
                        NO_CLOCK:   0x10,   // disable keyboard by driving "clock" line low
                        PC_MODE:    0x20,
                        PC_COMPAT:  0x40    // generate IBM PC-compatible scan codes
                    },
                    SELF_TEST: {            // result of ChipSet.KBC.CMD.SELF_TEST command (0xAA)
                        OK:         0x55
                    },
                    INTF_TEST: {            // result of ChipSet.KBC.CMD.INTF_TEST command (0xAB)
                        OK:         0x00,   // no error
                        CLOCK_LO:   0x01,   // keyboard clock line stuck low
                        CLOCK_HI:   0x02,   // keyboard clock line stuck high
                        DATA_LO:    0x03,   // keyboard data line stuck low
                        DATA_HI:    0x04    // keyboard data line stuck high
                    }
                },
                INPORT: {                   // this.b8042InPort
                    COMPAQ_50MHZ:   0x01,   // 50Mhz system clock enabled (0=48Mhz); see Compaq 386/25 TechRef p2-106
                    UNDEFINED:      0x02,   // undefined
                    COMPAQ_NO80387: 0x04,   // 80387 coprocessor NOT installed; see Compaq 386/25 TechRef p2-106
                    COMPAQ_NOWEITEK:0x08,   // Weitek coprocessor NOT installed; see Compaq 386/25 TechRef p2-106
                    ENABLE_256KB:   0x10,   // enable 2nd 256Kb of system board RAM
                    COMPAQ_HISPEED: 0x10,   // high-speed enabled (0=auto); see Compaq 386/25 TechRef p2-106
                    MFG_OFF:        0x20,   // manufacturing jumper not installed
                    COMPAQ_DIP5OFF: 0x20,   // system board DIP switch #5 OFF (0=ON); see Compaq 386/25 TechRef p2-106
                    MONO:           0x40,   // monochrome monitor is primary display
                    COMPAQ_NONDUAL: 0x40,   // Compaq Dual-Mode monitor NOT installed; see Compaq 386/25 TechRef p2-106
                    KBD_UNLOCKED:   0x80    // keyboard not inhibited (in Compaq parlance: security lock is unlocked)
                },
                OUTPORT: {                  // this.b8042OutPort
                    NO_RESET:       0x01,   // set by default
                    A20_ON:         0x02,   // set by default
                    COMPAQ_SLOWD:   0x08,   // SL0WD* NOT asserted (refer to timer 2, counter 2); see Compaq 386/25 TechRef p2-105
                    OUTBUFF_FULL:   0x10,   // output buffer full
                    INBUFF_EMPTY:   0x20,   // input buffer empty
                    KBD_CLOCK:      0x40,   // keyboard clock (output)
                    KBD_DATA:       0x80    // keyboard data (output)
                },
                TESTPORT: {                 // generated "on the fly"
                    KBD_CLOCK:      0x01,   // keyboard clock (input)
                    KBD_DATA:       0x02    // keyboard data (input)
                },
                RWREG: {                    // this.bPPIB (since CLK_TIMER2 and SPK_TIMER2 are in both PPI_B and RWREG)
                    PORT:           0x61,
                    CLK_TIMER2:     0x01,   // set to enable clock to TIMER2 (R/W)
                    SPK_TIMER2:     0x02,   // set to connect output of TIMER2 to speaker (R/W)
                    COMPAQ_FSNMI:   0x04,   // set to disable RAM/FS NMI (R/W, DESKPRO386)
                    COMPAQ_IONMI:   0x08,   // set to disable IOCHK NMI (R/W, DESKPRO386)
                    DISABLE_NMI:    0x0C,   // set to disable IOCHK and RAM/FS NMI, clear to enable (R/W)
                    REFRESH_BIT:    0x10,   // 0 if RAM refresh occurring, 1 if RAM not in refresh cycle (R/O)
                    OUT_TIMER2:     0x20,   // state of TIMER2 output signal (R/O, DESKPRO386)
                    IOCHK_NMI:      0x40,   // IOCHK NMI (R/O); to reset, pulse bit 3 (0x08)
                    RAMFS_NMI:      0x80,   // RAM/FS (parity or fail-safe) NMI (R/O); to reset, pulse bit 2 (0x04)
                    NMI_ERROR:      0xC0
                },
                CMD: {                      // this.b8042InBuff (on write to port 0x64, interpret this as a CMD)
                    PORT:           0x64,
                    READ_CMD:       0x20,   // sends the current CMD byte (this.b8042CmdData) to KBC.DATA.PORT
                    WRITE_CMD:      0x60,   // followed by a command byte written to KBC.DATA.PORT (see KBC.DATA.CMD)
                    COMPAQ_SLOWD:   0xA3,   // enable system slow down; see Compaq 386/25 TechRef p2-111
                    COMPAQ_TOGGLE:  0xA4,   // toggle speed-control bit; see Compaq 386/25 TechRef p2-111
                    COMPAQ_SPCREAD: 0xA5,   // special read of "port 2"; see Compaq 386/25 TechRef p2-111
                    SELF_TEST:      0xAA,   // self-test (KBC.DATA.SELF_TEST.OK is placed in the output buffer if no errors)
                    INTF_TEST:      0xAB,   // interface test
                    DIAG_DUMP:      0xAC,   // diagnostic dump
                    DISABLE_KBD:    0xAD,   // disable keyboard
                    ENABLE_KBD:     0xAE,   // enable keyboard
                    READ_INPORT:    0xC0,   // read input port and place data in output buffer (use only if output buffer empty)
                    READ_OUTPORT:   0xD0,   // read output port and place data in output buffer (use only if output buffer empty)
                    WRITE_OUTPORT:  0xD1,   // next byte written to KBC.DATA.PORT (port 0x60) is placed in the output port (see KBC.OUTPORT)
                    READ_TEST:      0xE0,
                    PULSE_OUTPORT:  0xF0    // this is the 1st of 16 commands (0xF0-0xFF) that pulse bits 0-3 of the output port
                },
                STATUS: {                   // this.b8042Status (on read from port 0x64)
                    PORT:           0x64,
                    OUTBUFF_FULL:   0x01,
                    INBUFF_FULL:    0x02,   // set if the controller has received but not yet read data from the input buffer (not normally set)
                    SYS_FLAG:       0x04,
                    CMD_FLAG:       0x08,   // set on write to KBC.CMD (port 0x64), clear on write to KBC.DATA (port 0x60)
                    NO_INHIBIT:     0x10,   // (in Compaq parlance: security lock not engaged)
                    XMT_TIMEOUT:    0x20,
                    RCV_TIMEOUT:    0x40,
                    PARITY_ERR:     0x80,   // last byte of data received had EVEN parity (ODD parity is normally expected)
                    OUTBUFF_DELAY:  0x100
                }
            };
            
            /*
             * MC146818A RTC/CMOS Ports (MODEL_5170)
             *
             * Write a CMOS address to ChipSet.CMOS.ADDR.PORT, then read/write data from/to ChipSet.CMOS.DATA.PORT.
             *
             * The ADDR port also controls NMI: write an address with bit 7 clear to enable NMI or set to disable NMI.
             */
            ChipSet.CMOS = {
                ADDR: {                     // this.bCMOSAddr
                    PORT:           0x70,
                    RTC_SEC:        0x00,
                    RTC_SEC_ALRM:   0x01,
                    RTC_MIN:        0x02,
                    RTC_MIN_ALRM:   0x03,
                    RTC_HOUR:       0x04,
                    RTC_HOUR_ALRM:  0x05,
                    RTC_WEEK_DAY:   0x06,
                    RTC_MONTH_DAY:  0x07,
                    RTC_MONTH:      0x08,
                    RTC_YEAR:       0x09,
                    STATUSA:        0x0A,
                    STATUSB:        0x0B,
                    STATUSC:        0x0C,
                    STATUSD:        0x0D,
                    DIAG:           0x0E,
                    SHUTDOWN:       0x0F,
                    FDRIVE:         0x10,
                    HDRIVE:         0x12,
                    EQUIP:          0x14,
                    BASEMEM_LO:     0x15,
                    BASEMEM_HI:     0x16,   // the BASEMEM values indicate the total Kb of base memory, up to 0x280 (640Kb)
                    EXTMEM_LO:      0x17,
                    EXTMEM_HI:      0x18,   // the EXTMEM values indicate the total Kb of extended memory, up to 0x3C00 (15Mb)
                    CHKSUM_HI:      0x2E,
                    CHKSUM_LO:      0x2F,   // CMOS bytes included in the checksum calculation: 0x10-0x2D
                    EXTMEM2_LO:     0x30,
                    EXTMEM2_HI:     0x31,
                    CENTURY_DATE:   0x32,   // BCD value for the current century (eg, 0x19 for 20th century, 0x20 for 21st century)
                    BOOT_INFO:      0x33,   // 0x80 if 128Kb expansion memory installed, 0x40 if Setup Utility wants an initial setup message
                    MASK:           0x3F,
                    TOTAL:          0x40,
                    NMI_DISABLE:    0x80
                },
                DATA: {                     // this.abCMOSData
                    PORT:           0x71
                },
                STATUSA: {                  // abCMOSData[ChipSet.CMOS.ADDR.STATUSA]
                    UIP:            0x80,   // bit 7: 1 indicates Update-In-Progress, 0 indicates date/time ready to read
                    DV:             0x70,   // bits 6-4 (DV2-DV0) are programmed to 010 to select a 32.768Khz time base
                    RS:             0x0F    // bits 3-0 (RS3-RS0) are programmed to 0110 to select a 976.562us interrupt rate
                },
                STATUSB: {                  // abCMOSData[ChipSet.CMOS.ADDR.STATUSB]
                    SET:            0x80,   // bit 7: 1 to set any/all of the 14 time-bytes
                    PIE:            0x40,   // bit 6: 1 for Periodic Interrupt Enable
                    AIE:            0x20,   // bit 5: 1 for Alarm Interrupt Enable
                    UIE:            0x10,   // bit 4: 1 for Update Interrupt Enable
                    SQWE:           0x08,   // bit 3: 1 for Square Wave Enabled (as set by the STATUSA rate selection bits)
                    BINARY:         0x04,   // bit 2: 1 for binary Date Mode, 0 for BCD Date Mode
                    HOUR24:         0x02,   // bit 1: 1 for 24-hour mode, 0 for 12-hour mode
                    DST:            0x01    // bit 0: 1 for Daylight Savings Time enabled
                },
                STATUSC: {                  // abCMOSData[ChipSet.CMOS.ADDR.STATUSC]
                    IRQF:           0x80,   // bit 7: 1 indicates one or more of the following bits (PF, AF, UF) are set
                    PF:             0x40,   // bit 6: 1 indicates Periodic Interrupt
                    AF:             0x20,   // bit 5: 1 indicates Alarm Interrupt
                    UF:             0x10,   // bit 4: 1 indicates Update Interrupt
                    RESERVED:       0x0F
                },
                STATUSD: {                  // abCMOSData[ChipSet.CMOS.ADDR.STATUSD]
                    VRB:            0x80,   // bit 7: 1 indicates Valid RAM Bit (0 implies power was and/or is lost)
                    RESERVED:       0x7F
                },
                DIAG: {                     // abCMOSData[ChipSet.CMOS.ADDR.DIAG]
                    RTCFAIL:        0x80,   // bit 7: 1 indicates RTC lost power
                    CHKSUMFAIL:     0x40,   // bit 6: 1 indicates bad CMOS checksum
                    CONFIGFAIL:     0x20,   // bit 5: 1 indicates bad CMOS configuration info
                    MEMSIZEFAIL:    0x10,   // bit 4: 1 indicates memory size miscompare
                    HDRIVEFAIL:     0x08,   // bit 3: 1 indicates hard drive controller or drive init failure
                    TIMEFAIL:       0x04,   // bit 2: 1 indicates time failure
                    RESERVED:       0x03
                },
                FDRIVE: {                   // abCMOSData[ChipSet.CMOS.ADDR.FDRIVE]
                    D0_MASK:        0xF0,   // Drive 0 type in high nibble
                    D1_MASK:        0x0F,   // Drive 1 type in lower nibble
                    NONE:           0,      // no drive
                    /*
                     * There's at least one floppy drive type that IBM didn't bother defining a CMOS drive type for:
                     * single-sided drives that were only capable of storing 160Kb (or 180Kb when using 9 sectors/track).
                     * So, as you can see in getSWFloppyDriveType(), we lump all standard diskette capacities <= 360Kb
                     * into the FD360 bucket.
                     */
                    FD360:          1,      // 5.25-inch double-sided double-density (DSDD 48TPI) drive: 40 tracks, 9 sectors/track, 360Kb max
                    FD1200:         2,      // 5.25-inch double-sided high-density (DSHD 96TPI) drive: 80 tracks, 15 sectors/track, 1200Kb max
                    FD720:          3,      // 3.5-inch drive capable of storing 80 tracks and up to 9 sectors/track, 720Kb max
                    FD1440:         4       // 3.5-inch drive capable of storing 80 tracks and up to 18 sectors/track, 1440Kb max
                },
                /*
                 * HDRIVE types are defined by table in the HDC component, which uses setCMOSDriveType() to update the CMOS
                 */
                HDRIVE: {                   // abCMOSData[ChipSet.CMOS.ADDR.HDRIVE]
                    D0_MASK:        0xF0,   // Drive 0 type in high nibble
                    D1_MASK:        0x0F    // Drive 1 type in lower nibble
                },
                /*
                 * The CMOS equipment flags use the same format as the older PPI equipment flags
                 */
                EQUIP: {                    // abCMOSData[ChipSet.CMOS.ADDR.EQUIP]
                    MONITOR:        ChipSet.PPI_SW.MONITOR,         // PPI_SW.MONITOR.MASK == 0x30
                    COPROC:         ChipSet.PPI_SW.COPROC,          // PPI_SW.COPROC == 0x02
                    FDRIVE:         ChipSet.PPI_SW.FDRIVE           // PPI_SW.FDRIVE.IPL == 0x01 and PPI_SW.FDRIVE.MASK = 0xC0
                }
            };
            
            /*
             * DMA Page Registers
             *
             * The MODEL_5170 TechRef lists 0x80-0x9F as the range for DMA page registers, but that may be a bit
             * overbroad.  There are a total of 8 (7 usable) DMA channels on the MODEL_5170, each of which has the
             * following assigned DMA page registers:
             *
             *      Channel #   Page Reg
             *      ---------   --------
             *          0         0x87
             *          1         0x83
             *          2         0x81
             *          3         0x82
             *          4         0x8F (not usable; the 5170 TechRef refers to this as the "Refresh" page register)
             *          5         0x8B
             *          6         0x89
             *          7         0x8A
             *
             * That leaves 0x80, 0x84, 0x85, 0x86, 0x88, 0x8C, 0x8D and 0x8E unaccounted for in the range 0x80-0x8F.
             * (I'm saving the question of what, if anything, is available in the range 0x90-0x9F for another day.)
             *
             * As for port 0x80, the TechRef says:
             *
             *      "I/O address hex 080 is used as a diagnostic-checkpoint port or register.
             *      This port corresponds to a read/write register in the DMA page register (74LS612)."
             *
             * so I used to have dedicated handlers and storage (bMFGData) for the register at port 0x80, but I've since
             * appended it to abDMAPageSpare, an 8-element array that captures all I/O to the 8 unassigned (aka "spare")
             * DMA page registers.  The 5170 BIOS uses 0x80 as a "checkpoint" register, and the DESKPRO386 uses 0x84 in a
             * similar fashion.  The 5170 also contains "MFG_TST" code that uses other unassigned DMA page registers as
             * scratch registers, which come in handy when RAM hasn't been tested/initialized yet.
             *
             * Here's our mapping of entries in the abDMAPageSpare array to the unassigned ("spare") DMA page registers:
             *
             *      Index #     Page Reg
             *      --------    --------
             *          0         0x84
             *          1         0x85
             *          2         0x86
             *          3         0x88
             *          4         0x8C
             *          5         0x8D
             *          6         0x8E
             *          7         0x80
             *
             * The only reason port 0x80 is out of sequence (ie, at the end of the array, at index 7 instead of index 0) is
             * because it was added the array later, and the entire array gets written to our save/restore data structures, so
             * reordering the elements would be a bad idea.
             */
            
            /*
             * NMI Mask Register (MODEL_5150 and MODEL_5160 only)
             */
            ChipSet.NMI = {                 // this.bNMI
                PORT:               0xA0,
                ENABLE:             0x80,
                DISABLE:            0x00
            };
            
            /*
             * Coprocessor Control Registers (MODEL_5170)
             */
            ChipSet.COPROC = {              // TODO: Define a variable for this
                PORT_CLEAR:         0xF0,   // clear the coprocessor's "busy" state
                PORT_RESET:         0xF1    // reset the coprocessor
            };
            
            /**
             * @this {ChipSet}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "sw1")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            ChipSet.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                switch (sBinding) {
                    case "sw1":
                        this.bindings[sBinding] = control;
                        this.addSwitches(sBinding, control, 8, this.sw1Init, {
                            0: (this.model == ChipSet.MODEL_5150? "Bootable Floppy Drive" : "Loop on POST"),
                            1: (this.model == ChipSet.MODEL_5150? "Reserved" : "Coprocessor"),
                            2: "Base Memory Size",          // up to 64Kb on a MODEL_5150, 256Kb on a MODEL_5160
                            4: "Monitor Type",
                            6: "Number of Floppy Drives"
                        });
                        return true;
                    case "sw2":
                        if (this.model == ChipSet.MODEL_5150) {
                            this.bindings[sBinding] = control;
                            this.addSwitches(sBinding, control, 8, this.sw2Init, {
                                0: "Expansion Memory Size", // up to 480Kb, which, when combined with 64Kb of MODEL_5150 base memory, gives a maximum of 544Kb
                                4: "Reserved"
                            });
                            return true;
                        }
                        break;
                    case "swdesc":
                        this.bindings[sBinding] = control;
                        return true;
                    default:
                        break;
                }
                return false;
            };
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {ChipSet}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            ChipSet.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.cmp = cmp;
                this.kbd = cmp.getComponentByType("Keyboard");
                /*
                 * This divisor is invariant, so we calculate it as soon as we're able to query the CPU's base speed.
                 */
                this.nTicksDivisor = (cpu.getCyclesPerSecond() / ChipSet.TIMER_TICKS_PER_SEC);
            
                bus.addPortInputTable(this, ChipSet.aPortInput);
                bus.addPortOutputTable(this, ChipSet.aPortOutput);
                if (this.model < ChipSet.MODEL_5170) {
                    bus.addPortInputTable(this, ChipSet.aPortInput5150);
                    bus.addPortOutputTable(this, ChipSet.aPortOutput5150);
                } else {
                    bus.addPortInputTable(this, ChipSet.aPortInput5170);
                    bus.addPortOutputTable(this, ChipSet.aPortOutput5170);
                }
                if (DEBUGGER) {
                    if (dbg) {
                        var chipset = this;
                        /*
                         * TODO: Add more "dumpers" (eg, for DMA, RTC, 8042, etc)
                         */
                        dbg.messageDump(Messages.PIC, function onDumpPIC() {
                            chipset.dumpPIC();
                        });
                        dbg.messageDump(Messages.TIMER, function onDumpTimer() {
                            chipset.dumpTimer();
                        });
                        dbg.messageDump(Messages.CMOS, function onDumpCMOS() {
                            chipset.dumpCMOS();
                        });
                    }
                    cpu.addIntNotify(Interrupts.RTC.VECTOR, this, this.intBIOSRTC);
                }
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {ChipSet}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            ChipSet.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data) {
                        this.reset();
                    } else {
                        if (!this.restore(data)) return false;
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {ChipSet}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            ChipSet.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save? this.save() : true;
            };
            
            /**
             * reset(fHard)
             *
             * @this {ChipSet}
             * @param {boolean} [fHard] true on the initial reset (not a normal "soft" reset)
             */
            ChipSet.prototype.reset = function(fHard)
            {
                /*
                 * We propagate the sw1Init/sw2Init values to sw1/sw2 at reset; the user is only
                 * allowed to tweak sw1Init/sw2Init, which doesn't take effect until the next reset.
                 */
                var i;
                this.sw1 = this.sw1Init;
                this.sw2 = this.sw2Init;
                this.updateSwitchDesc();
            
                /*
                 * DMA (Direct Memory Access) Controller initialization
                 */
                this.aDMACs = new Array(this.cDMACs);
                for (i = 0; i < this.cDMACs; i++) {
                    this.initDMAController(i);
                }
            
                /*
                 * PIC (Programmable Interupt Controller) initialization
                 */
                this.aPICs = new Array(this.cPICs);
                this.initPIC(ChipSet.PIC0.INDEX, ChipSet.PIC0.PORT_LO);
                if (this.cPICs > 1) {
                    this.initPIC(ChipSet.PIC1.INDEX, ChipSet.PIC1.PORT_LO);
                }
            
                /*
                 * PIT (Programmable Interval Timer) initialization
                 *
                 * Although the DeskPro 386 refers to the timers in the first PIT as "Timer 1, Counter 0",
                 * "Timer 1, Counter 1" and "Timer 1, Counter 2", we're sticking with IBM's nomenclature:
                 * TIMER0, TIMER1 and TIMER2.  Which means that we refer to the "counters" in the second PIT
                 * as TIMER3, TIMER4 and TIMER5; that numbering also matches their indexes in the aTimers array.
                 */
                this.bPIT1Ctrl = null;          // tracks writes to port 0x43
                this.bPIT2Ctrl = null;          // tracks writes to port 0x4B (MODEL_DESKPRO386 only)
                this.aTimers = new Array(this.model == ChipSet.MODEL_DESKPRO386? 6 : 3);
                for (i = 0; i < this.aTimers.length; i++) {
                    this.initTimer(i);
                }
            
                /*
                 * PPI and other misc ports
                 */
                this.bPPIA = null;              // tracks writes to port 0x60, in case PPI_CTRL.A_IN is not set
                this.bPPIB = null;              // tracks writes to port 0x61, in case PPI_CTRL.B_IN is not set
                this.bPPIC = null;              // tracks writes to port 0x62, in case PPI_CTRL.C_IN_LO or PPI_CTRL.C_IN_HI is not set
                this.bPPICtrl = null;           // tracks writes to port 0x63 (eg, 0x99); read-only
                this.bNMI = ChipSet.NMI.DISABLE;// tracks writes to the NMI Mask Register
            
                /*
                 * ChipSet state introduced by the MODEL_5170
                 */
                if (this.model >= ChipSet.MODEL_5170) {
                    /*
                     * The 8042 input buffer is treated as a "command byte" when written via port 0x64 and as a "data byte"
                     * when written via port 0x60.  So, whenever the KBC.CMD.WRITE_CMD "command byte" is written to the input
                     * buffer, the subsequent command data byte is saved in b8042CmdData.  Similarly, for KBC.CMD.WRITE_OUTPORT,
                     * the subsequent data byte is saved in b8042OutPort.
                     *
                     * TODO: Consider a UI for the Keyboard INHIBIT switch.  By default, our keyboard is never inhibited
                     * (ie, locked).  Also, note that the hardware changes this bit only when new data is sent to b8042OutBuff.
                     */
                    this.b8042Status = ChipSet.KBC.STATUS.NO_INHIBIT;
                    this.b8042InBuff = 0;
                    this.b8042CmdData = ChipSet.KBC.DATA.CMD.NO_CLOCK;
                    this.b8042OutBuff = 0;
            
                    /*
                     * TODO: Provide more control over these 8042 "Input Port" bits (eg, the keyboard lock)
                     */
                    this.b8042InPort = ChipSet.KBC.INPORT.MFG_OFF | ChipSet.KBC.INPORT.KBD_UNLOCKED;
            
                    if (this.getSWMemorySize() >= 512) {
                        this.b8042InPort |= ChipSet.KBC.INPORT.ENABLE_256KB;
                    }
            
                    if (this.getSWVideoMonitor() == ChipSet.MONITOR.MONO) {
                        this.b8042InPort |= ChipSet.KBC.INPORT.MONO;
                    }
            
                    if (COMPAQ386 && this.model == ChipSet.MODEL_DESKPRO386) {
                        this.b8042InPort |= ChipSet.KBC.INPORT.COMPAQ_NO80387 | ChipSet.KBC.INPORT.COMPAQ_NOWEITEK;
                    }
            
                    this.b8042OutPort = ChipSet.KBC.OUTPORT.NO_RESET | ChipSet.KBC.OUTPORT.A20_ON;
            
                    this.abDMAPageSpare = new Array(8);
            
                    this.bCMOSAddr = 0;         // NMI is enabled, since the ChipSet.CMOS.ADDR.NMI_DISABLE bit is not set in bCMOSAddr
            
                    /*
                     * Now that we call reset() from the ChipSet constructor, enabling other components to update
                     * their own CMOS information as needed, we must distinguish between the initial ("hard") reset
                     * and any later ("soft") resets (eg, from powerUp() calls), and make sure the latter preserves
                     * existing CMOS information.
                     */
                    if (fHard) {
                        this.abCMOSData = new Array(ChipSet.CMOS.ADDR.TOTAL);
                    }
            
                    this.initRTCTime(this.sRTCDate);
            
                    /*
                     * initCMOSData() will initialize a variety of "legacy" CMOS bytes, but it will NOT overwrite any memory
                     * size or hard drive type information that might have been set, via addCMOSMemory() or setCMOSDriveType().
                     */
                    this.initCMOSData();
                }
            
                if (DEBUGGER && MAXDEBUG) {
                    /*
                     * Arrays for interrupt counts (one count per IRQ) and timer data
                     */
                    this.acInterrupts = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
                    this.acTimersFired = [0, 0, 0];
                    this.acTimer0Counts = [];
                }
            };
            
            /**
             * initRTCTime(sDate)
             *
             * Initialize the RTC portion of the CMOS registers to match the specified date/time (or if none is specified,
             * the current date/time).  The date/time should be expressed in the ISO 8601 format; eg: "2011-10-10T14:48:00".
             *
             * NOTE: There are two approaches we could take here: always store the RTC bytes in binary, and convert them
             * to/from BCD on-demand (ie, as the simulation reads/writes the CMOS RTC registers); or init/update them in the
             * format specified by CMOS.STATUSB.BINARY (1 for binary, 0 for BCD).  Both approaches require BCD conversion
             * functions, but the former seems more efficient, in part because the periodic calls to updateRTCTime() won't
             * require any conversions.
             *
             * We take the same approach with the CMOS.STATUSB.HOUR24 setting: internally, we always operate in 24-hour mode,
             * but externally, we convert the RTC hour values to the 12-hour format as needed.
             *
             * Thus, all I/O to the RTC bytes must be routed through the getRTCByte() and setRTCByte() functions, to ensure
             * that all the necessary on-demand conversions occur.
             *
             * @this {ChipSet}
             * @param {string} [sDate]
             */
            ChipSet.prototype.initRTCTime = function(sDate)
            {
                /*
                 * NOTE: I've already been burned once by a JavaScript library function that did NOT treat an undefined
                 * parameter (ie, a parameter === undefined) the same as an omitted parameter (eg, the async parameter in
                 * xmlHTTP.open() in IE), so I'm taking no chances here: if sDate is undefined, then explicitly call Date()
                 * with no parameters.
                 */
                var date = sDate? new Date(sDate) : new Date();
            
                /*
                 * Example of a valid Date string:
                 *
                 *      2014-10-01T08:00:00 (interpreted as GMT, resulting in "Wed Oct 01 2014 01:00:00 GMT-0700 (PDT)")
                 *
                 * Examples of INVALID Date strings:
                 *
                 *      2014-10-01T08:00:00PST
                 *      2014-10-01T08:00:00-0700 (actually, this DOES work in Chrome, but NOT in Safari)
                 *
                 * In the case of INVALID Date strings, the Date object is invalid, but there's no obvious test for an "invalid"
                 * object, so I've adapted the following test from StackOverflow.
                 *
                 * See http://stackoverflow.com/questions/1353684/detecting-an-invalid-date-date-instance-in-javascript
                 */
                if (Object.prototype.toString.call(date) !== "[object Date]" || isNaN(date.getTime())) {
                    date = new Date();
                    this.println("CMOS date invalid (" + sDate + "), using " + date);
                } else if (sDate) {
                    this.println("CMOS date: " + date);
                }
            
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_SEC] = date.getSeconds();
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_SEC_ALRM] = 0;
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MIN] = date.getMinutes();
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MIN_ALRM] = 0;
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_HOUR] = date.getHours();
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_HOUR_ALRM] = 0;
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_WEEK_DAY] = date.getDay() + 1;
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH_DAY] = date.getDate();
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH] = date.getMonth() + 1;
                var nYear = date.getFullYear();
                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_YEAR] = nYear % 100;
                var nCentury = (nYear / 100);
                this.abCMOSData[ChipSet.CMOS.ADDR.CENTURY_DATE] = (nCentury % 10) | ((nCentury / 10) << 4);
            
                this.abCMOSData[ChipSet.CMOS.ADDR.STATUSA] = 0x26;                          // hard-coded default; refer to ChipSet.CMOS.STATUSA.DV and ChipSet.CMOS.STATUSA.RS
                this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] = ChipSet.CMOS.STATUSB.HOUR24;   // default to BCD mode (ChipSet.CMOS.STATUSB.BINARY not set)
                this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] = 0x00;
                this.abCMOSData[ChipSet.CMOS.ADDR.STATUSD] = ChipSet.CMOS.STATUSD.VRB;
            
                this.nRTCCyclesLastUpdate = this.nRTCCyclesNextUpdate = 0;
                this.nRTCPeriodsPerSecond = this.nRTCCyclesPerPeriod = null;
            };
            
            /**
             * getRTCByte(iRTC)
             *
             * @param {number} iRTC
             * @return {number} b
             */
            ChipSet.prototype.getRTCByte = function(iRTC)
            {
                this.assert(iRTC >= 0 && iRTC <= ChipSet.CMOS.ADDR.STATUSD);
            
                var b = this.abCMOSData[iRTC];
            
                if (iRTC < ChipSet.CMOS.ADDR.STATUSA) {
                    var f12HourValue = false;
                    if (iRTC == ChipSet.CMOS.ADDR.RTC_HOUR || iRTC == ChipSet.CMOS.ADDR.RTC_HOUR_ALRM) {
                        if (!(this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.HOUR24)) {
                            if (b < 12) {
                                b = (!b? 12 : b);
                            } else {
                                b -= 12;
                                b = (!b? 0x8c : b + 0x80);
                            }
                            f12HourValue = true;
                        }
                    }
                    if (!(this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.BINARY)) {
                        /*
                         * We're in BCD mode, so we must convert b from BINARY to BCD.  But first:
                         *
                         *      If b is a 12-hour value (ie, we're in 12-hour mode) AND the hour is a PM value
                         *      (ie, in the range 0x81-0x8C), then it must be adjusted to yield 81-92 in BCD.
                         *
                         *      AM hour values (0x01-0x0C) need no adjustment; they naturally convert to 01-12 in BCD.
                         */
                        if (f12HourValue && b > 0x80) {
                            b -= (0x81 - 81);
                        }
                        b = (b % 10) | ((b / 10) << 4);
                    }
                } else {
                    if (iRTC == ChipSet.CMOS.ADDR.STATUSA) {
                        /*
                         * HACK: Perform a mindless toggling of the "Update-In-Progress" bit, so that it's flipped
                         * on the next read; this makes the MODEL_5170 BIOS ("POST2_RTCUP") happy.
                         */
                        this.abCMOSData[iRTC] ^= ChipSet.CMOS.STATUSA.UIP;
                    }
                }
                return b;
            };
            
            /**
             * setRTCByte(iRTC, b)
             *
             * @param {number} iRTC
             * @param {number} b proposed byte to write
             * @return {number} actual byte to write
             */
            ChipSet.prototype.setRTCByte = function(iRTC, b)
            {
                this.assert(iRTC >= 0 && iRTC <= ChipSet.CMOS.ADDR.STATUSD);
            
                if (iRTC < ChipSet.CMOS.ADDR.STATUSA) {
                    var fBCD = false;
                    if (!(this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.BINARY)) {
                        /*
                         * We're in BCD mode, so we must convert b from BCD to BINARY (we assume it's valid
                         * BCD; ie, that both nibbles contain only 0-9, not A-F).
                         */
                        b = (b >> 4) * 10 + (b & 0xf);
                        fBCD = true;
                    }
                    if (iRTC == ChipSet.CMOS.ADDR.RTC_HOUR || iRTC == ChipSet.CMOS.ADDR.RTC_HOUR_ALRM) {
                        if (fBCD) {
                            /*
                             * If the original BCD hour was 0x81-0x92, then the previous BINARY-to-BCD conversion
                             * transformed it to 0x51-0x5C, so we must add 0x30.
                             */
                            if (b > 23) {
                                this.assert(b >= 0x51 && b <= 0x5c);
                                b += 0x30;
                            }
                        }
                        if (!(this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.HOUR24)) {
                            if (b <= 12) {
                                b = (b == 12? 0 : b);
                            } else {
                                b -= (0x80 - 12);
                                b = (b == 24? 12 : b);
                            }
                        }
                    }
                }
                return b;
            };
            
            /**
             * calcRTCCyclePeriod()
             *
             * This should be called whenever the timings in STATUSA may have changed.
             *
             * TODO: 1024 is a hard-coded number of periods per second based on the default interrupt rate of 976.562us
             * (ie, 1000000 / 976.562).  Calculate the actual number based on the values programmed in the STATUSA register.
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.calcRTCCyclePeriod = function()
            {
                this.nRTCCyclesLastUpdate = this.cpu.getCycles(this.fScaleTimers);
                this.nRTCPeriodsPerSecond = 1024;
                this.nRTCCyclesPerPeriod = Math.floor(this.cpu.getCyclesPerSecond() / this.nRTCPeriodsPerSecond);
                this.setRTCCycleLimit();
            };
            
            /**
             * getRTCCycleLimit(nCycles)
             *
             * This is called by the CPU to determine the maximum number of cycles it can process for the current burst.
             *
             * @this {ChipSet}
             * @param {number} nCycles desired
             * @return {number} maximum number of cycles (<= nCycles)
             */
            ChipSet.prototype.getRTCCycleLimit = function(nCycles)
            {
                if (this.abCMOSData && this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.PIE) {
                    var nCyclesUpdate = this.nRTCCyclesNextUpdate - this.cpu.getCycles(this.fScaleTimers);
                    if (nCyclesUpdate > 0) {
                        if (nCycles > nCyclesUpdate) {
                            if (DEBUG && this.messageEnabled(Messages.RTC)) {
                                this.printMessage("getRTCCycleLimit(" + nCycles + "): reduced to " + nCyclesUpdate + " cycles", true);
                            }
                            nCycles = nCyclesUpdate;
                        } else {
                            if (DEBUG && this.messageEnabled(Messages.RTC)) {
                                this.printMessage("getRTCCycleLimit(" + nCycles + "): already less than " + nCyclesUpdate + " cycles", true);
                            }
                        }
                    } else {
                        if (DEBUG && this.messageEnabled(Messages.RTC)) {
                            this.printMessage("RTC next update has passed by " + nCyclesUpdate + " cycles", true);
                        }
                    }
                }
                return nCycles;
            };
            
            /**
             * setRTCCycleLimit(nCycles)
             *
             * This should be called when PIE becomes set in STATUSB (and whenever PF is cleared in STATUSC while PIE is still set).
             *
             * @this {ChipSet}
             * @param {number} [nCycles]
             */
            ChipSet.prototype.setRTCCycleLimit = function(nCycles)
            {
                if (nCycles === undefined) nCycles = this.nRTCCyclesPerPeriod;
                this.nRTCCyclesNextUpdate = this.cpu.getCycles(this.fScaleTimers) + nCycles;
                if (this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.PIE) {
                    this.cpu.setBurstCycles(nCycles);
                }
            };
            
            /**
             * updateRTCTime()
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.updateRTCTime = function()
            {
                var nCyclesPerSecond = this.cpu.getCyclesPerSecond();
                var nCyclesUpdate = this.cpu.getCycles(this.fScaleTimers);
            
                /*
                 * We must arrange for the very first calcRTCCyclePeriod() call to occur here, on the very first
                 * updateRTCTime() call, because this is the first point we can be guaranteed that CPU cycle counts
                 * are initialized (the CPU is the last component to be powered up/restored).
                 *
                 * TODO: A side-effect of this is that it undermines the save/restore code's preservation of last
                 * and next RTC cycle counts, which may affect when the next RTC event is delivered.
                 */
                if (this.nRTCCyclesPerPeriod == null) this.calcRTCCyclePeriod();
            
                /*
                 * Step 1: Deal with Periodic Interrupts
                 */
                if (nCyclesUpdate >= this.nRTCCyclesNextUpdate) {
                    var bPrev = this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC];
                    this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] |= ChipSet.CMOS.STATUSC.PF;
                    if (this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.PIE) {
                        /*
                         * When PIE is set, setBurstCycles() should be getting called as needed to ensure
                         * that updateRTCTime() is called more frequently, so let's assert that we don't have
                         * an excess of cycles and thus possibly some missed Periodic Interrupts.
                         */
                        if (DEBUG) {
                            if (nCyclesUpdate - this.nRTCCyclesNextUpdate > this.nRTCCyclesPerPeriod) {
                                if (bPrev & ChipSet.CMOS.STATUSC.PF) {
                                    this.printMessage("RTC interrupt handler failed to clear STATUSC", Messages.RTC);
                                } else {
                                    this.printMessage("CPU took too long trigger new RTC periodic interrupt", Messages.RTC);
                                }
                            }
                        }
                        this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] |= ChipSet.CMOS.STATUSC.IRQF;
                        this.setIRR(ChipSet.IRQ.RTC);
                        /*
                         * We could also call setRTCCycleLimit() at this point, but I don't think there's any
                         * benefit until the interrupt had been acknowledged and STATUSC has been read, thereby
                         * clearing the way for another Periodic Interrupt; it seems to me that when STATUSC
                         * is read, that's the more appropriate time to call setRTCCycleLimit().
                         */
                    }
                    this.nRTCCyclesNextUpdate = nCyclesUpdate + this.nRTCCyclesPerPeriod;
                }
            
                /*
                 * Step 2: Deal with Alarm Interrupts
                 */
                if (this.abCMOSData[ChipSet.CMOS.ADDR.RTC_SEC] == this.abCMOSData[ChipSet.CMOS.ADDR.RTC_SEC_ALRM]) {
                    if (this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MIN] == this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MIN_ALRM]) {
                        if (this.abCMOSData[ChipSet.CMOS.ADDR.RTC_HOUR] == this.abCMOSData[ChipSet.CMOS.ADDR.RTC_HOUR_ALRM]) {
                            this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] |= ChipSet.CMOS.STATUSC.AF;
                            if (this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.AIE) {
                                this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] |= ChipSet.CMOS.STATUSC.IRQF;
                                this.setIRR(ChipSet.IRQ.RTC);
                            }
                        }
                    }
                }
            
                /*
                 * Step 3: Update the RTC date/time and deal with Update Interrupts
                 */
                var nCyclesDelta = nCyclesUpdate - this.nRTCCyclesLastUpdate;
                this.assert(nCyclesDelta >= 0);
                var nSecondsDelta = Math.floor(nCyclesDelta / nCyclesPerSecond);
            
                /*
                 * We trust that updateRTCTime() is being called as part of updateAllTimers(), and is therefore
                 * being called often enough to ensure that nSecondsDelta will never be greater than one.  In fact,
                 * it would always be LESS than one if it weren't also for the fact that we plow any "unused" cycles
                 * (nCyclesDelta % nCyclesPerSecond) back into nRTCCyclesLastUpdate, so that we will eventually
                 * see a one-second delta.
                 */
                this.assert(nSecondsDelta <= 1);
            
                /*
                 * Make sure that CMOS.STATUSB.SET isn't set; if it is, then the once-per-second RTC updates must be
                 * disabled so that software can write new RTC date/time values without interference.
                 */
                if (nSecondsDelta && !(this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.SET)) {
                    while (nSecondsDelta--) {
                        if (++this.abCMOSData[ChipSet.CMOS.ADDR.RTC_SEC] >= 60) {
                            this.abCMOSData[ChipSet.CMOS.ADDR.RTC_SEC] = 0;
                            if (++this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MIN] >= 60) {
                                this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MIN] = 0;
                                if (++this.abCMOSData[ChipSet.CMOS.ADDR.RTC_HOUR] >= 24) {
                                    this.abCMOSData[ChipSet.CMOS.ADDR.RTC_HOUR] = 0;
                                    this.abCMOSData[ChipSet.CMOS.ADDR.RTC_WEEK_DAY] = (this.abCMOSData[ChipSet.CMOS.ADDR.RTC_WEEK_DAY] % 7) + 1;
                                    var nDayMax = usr.getMonthDays(this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH], this.abCMOSData[ChipSet.CMOS.ADDR.RTC_YEAR]);
                                    if (++this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH_DAY] > nDayMax) {
                                        this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH_DAY] = 1;
                                        if (++this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH] > 12) {
                                            this.abCMOSData[ChipSet.CMOS.ADDR.RTC_MONTH] = 1;
                                            this.abCMOSData[ChipSet.CMOS.ADDR.RTC_YEAR] = (this.abCMOSData[ChipSet.CMOS.ADDR.RTC_YEAR] + 1) % 100;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] |= ChipSet.CMOS.STATUSC.UF;
                    if (this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.UIE) {
                        this.abCMOSData[ChipSet.CMOS.ADDR.STATUSC] |= ChipSet.CMOS.STATUSC.IRQF;
                        this.setIRR(ChipSet.IRQ.RTC);
                    }
                }
            
                this.nRTCCyclesLastUpdate = nCyclesUpdate - (nCyclesDelta % nCyclesPerSecond);
            };
            
            /**
             * initCMOSData()
             *
             * Initialize all the CMOS configuration bytes in the range 0x0E-0x2F (TODO: Decide what to do about 0x30-0x3F)
             *
             * Note that the MODEL_5170 "SETUP" utility is normally what sets all these bytes, including the checksum, and then
             * the BIOS verifies it, but since we want our machines to pass BIOS verification "out of the box", we go the extra
             * mile here, even though it's not really our responsibility.
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.initCMOSData = function()
            {
                /*
                 * On all reset() calls, the RAM component(s) will (re)add their totals, so we have to make sure that
                 * the addition always starts with 0.  That also means that ChipSet must always be initialized before RAM.
                 */
                var iCMOS;
                for (iCMOS = ChipSet.CMOS.ADDR.BASEMEM_LO; iCMOS <= ChipSet.CMOS.ADDR.EXTMEM_HI; iCMOS++) {
                    this.abCMOSData[iCMOS] = 0;
                }
            
                /*
                 * Make sure all the "checksummed" CMOS bytes are initialized (not just the handful we set below) to ensure
                 * that the checksum will be valid.
                 */
                for (iCMOS = ChipSet.CMOS.ADDR.DIAG; iCMOS < ChipSet.CMOS.ADDR.CHKSUM_HI; iCMOS++) {
                    if (this.abCMOSData[iCMOS] === undefined) this.abCMOSData[iCMOS] = 0;
                }
            
                /*
                 * We propagate all compatible "legacy" SW1 bits to the CMOS.EQUIP byte using the old SW masks, but any further
                 * access to CMOS.ADDR.EQUIP should use the new CMOS_EQUIP flags (eg, CMOS.EQUIP.COPROC, CMOS.EQUIP.MONITOR.CGA80, etc).
                 */
                this.abCMOSData[ChipSet.CMOS.ADDR.EQUIP] = this.sw1 & (ChipSet.PPI_SW.MONITOR.MASK | ChipSet.PPI_SW.COPROC | ChipSet.PPI_SW.FDRIVE.IPL | ChipSet.PPI_SW.FDRIVE.MASK);
                this.abCMOSData[ChipSet.CMOS.ADDR.FDRIVE] = (this.getSWFloppyDriveType(0) << 4) | this.getSWFloppyDriveType(1);
            
                /*
                 * The final step is calculating the CMOS checksum, which we then store into the CMOS as a courtesy, so that the
                 * user doesn't get unnecessary CMOS errors.
                 */
                this.updateCMOSChecksum();
            };
            
            /**
             * setCMOSByte(iCMOS, b)
             *
             * This is ONLY for use by components that need to update CMOS configuration bytes to match their internal configuration.
             *
             * @this {ChipSet}
             * @param {number} iCMOS
             * @param {number} b
             * @return {boolean} true if successful, false if not (eg, CMOS not initialized yet, or no CMOS on this machine)
             */
            ChipSet.prototype.setCMOSByte = function(iCMOS, b)
            {
                if (this.abCMOSData) {
                    this.assert(iCMOS >= ChipSet.CMOS.ADDR.FDRIVE && iCMOS < ChipSet.CMOS.ADDR.CHKSUM_HI);
                    this.abCMOSData[iCMOS] = b;
                    this.updateCMOSChecksum();
                    return true;
                }
                return false;
            };
            
            /**
             * addCMOSMemory(addr, size)
             *
             * For use by the RAM component, to dynamically update the CMOS memory configuration.
             *
             * @this {ChipSet}
             * @param {number} addr (if 0, BASEMEM_LO/BASEMEM_HI is updated; if >= 0x100000, then EXTMEM_LO/EXTMEM_HI is updated)
             * @param {number} size (in bytes; we convert to Kb)
             * @return {boolean} true if successful, false if not (eg, CMOS not initialized yet, or no CMOS on this machine)
             */
            ChipSet.prototype.addCMOSMemory = function(addr, size)
            {
                if (this.abCMOSData) {
                    var iCMOS = (addr < 0x100000? ChipSet.CMOS.ADDR.BASEMEM_LO : ChipSet.CMOS.ADDR.EXTMEM_LO);
                    var wKb = this.abCMOSData[iCMOS] | (this.abCMOSData[iCMOS+1] << 8);
                    wKb += (size >> 10);
                    this.abCMOSData[iCMOS] = wKb & 0xff;
                    this.abCMOSData[iCMOS+1] = wKb >> 8;
                    this.updateCMOSChecksum();
                    return true;
                }
                return false;
            };
            
            /**
             * setCMOSDriveType(iDrive, bType)
             *
             * For use by the HDC component, to update the CMOS drive configuration to match HDC's internal configuration.
             *
             * TODO: Consider extending this to support FDC drive updates, so that the FDC can specify diskette drive types
             * (ie, FD360 or FD1200) in the same way that HDC does.  However, historically, the ChipSet has been responsible for
             * floppy drive configuration, at least in terms of *number* of drives, through the use of SW1 settings, and we've
             * continued that tradition with the addition of the ChipSet 'floppies' parameter, which allows both the number *and*
             * capacity of drives to be specified with a simple array (eg, [360, 360] for two 360Kb drives).
             *
             * @this {ChipSet}
             * @param {number} iDrive
             * @param {number} bType
             * @return {boolean} true if successful, false if not (eg, CMOS not initialized yet, or no CMOS on this machine)
             */
            ChipSet.prototype.setCMOSDriveType = function(iDrive, bType)
            {
                if (this.abCMOSData) {
                    var b = this.abCMOSData[ChipSet.CMOS.ADDR.HDRIVE];
                    this.assert(bType > 0 && bType < 0xf);
                    if (iDrive) {
                        b = (b & ChipSet.CMOS.HDRIVE.D0_MASK) | bType;
                    } else {
                        b = (b & ChipSet.CMOS.HDRIVE.D1_MASK) | (bType << 4);
                    }
                    this.setCMOSByte(ChipSet.CMOS.ADDR.HDRIVE, b);
                    return true;
                }
                return false;
            };
            
            /**
             * updateCMOSChecksum()
             *
             * This sums all the CMOS bytes from 0x10-0x2D, creating a 16-bit checksum.  That's a total of 30 (unsigned) 8-bit
             * values which could sum to at most 30*255 or 7650 (0x1DE2).  Since there's no way that can overflow 16 bits, we don't
             * worry about masking it with 0xffff.
             *
             * WARNING: The IBM PC AT TechRef, p.1-53 (p.75) claims that the checksum is on bytes 0x10-0x20, but that's simply wrong.
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.updateCMOSChecksum = function()
            {
                var wChecksum = 0;
                for (var iCMOS = ChipSet.CMOS.ADDR.FDRIVE; iCMOS < ChipSet.CMOS.ADDR.CHKSUM_HI; iCMOS++) {
                    wChecksum += this.abCMOSData[iCMOS];
                }
                this.abCMOSData[ChipSet.CMOS.ADDR.CHKSUM_LO] = wChecksum & 0xff;
                this.abCMOSData[ChipSet.CMOS.ADDR.CHKSUM_HI] = wChecksum >> 8;
            };
            
            /**
             * save()
             *
             * @this {ChipSet}
             * @return {Object}
             *
             * This implements save support for the ChipSet component.
             */
            ChipSet.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, [this.sw1Init, this.sw2Init, this.sw1, this.sw2]);
                state.set(1, [this.saveDMAControllers()]);
                state.set(2, [this.savePICs()]);
                state.set(3, [this.bPIT1Ctrl, this.saveTimers(), this.bPIT2Ctrl]);
                state.set(4, [this.bPPIA, this.bPPIB, this.bPPIC, this.bPPICtrl, this.bNMI]);
                if (this.model >= ChipSet.MODEL_5170) {
                    state.set(5, [this.b8042Status, this.b8042InBuff, this.b8042CmdData,
                                  this.b8042OutBuff, this.b8042InPort, this.b8042OutPort]);
                    state.set(6, [this.abDMAPageSpare[7], this.abDMAPageSpare, this.bCMOSAddr, this.abCMOSData, this.nRTCCyclesLastUpdate, this.nRTCCyclesNextUpdate]);
                }
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * @this {ChipSet}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             *
             * This implements restore support for the ChipSet component.
             */
            ChipSet.prototype.restore = function(data)
            {
                var a, i;
                a = data[0];
                this.sw1Init = a[0];
                this.sw2Init = a[1];
                this.sw1 = a[2];
                this.sw2 = a[3];
            
                a = data[1];
                for (i = 0; i < this.cDMACs; i++) {
                    this.initDMAController(i, a.length == 1? a[0][i] : a);
                }
            
                a = data[2];
                for (i = 0; i < this.cPICs; i++) {
                    this.initPIC(i, i === 0? ChipSet.PIC0.PORT_LO : ChipSet.PIC1.PORT_LO, a[0][i]);
                }
            
                a = data[3];
                this.bPIT1Ctrl = a[0];
                this.bPIT2Ctrl = a[2];
                for (i = 0; i < this.aTimers.length; i++) {
                    this.initTimer(i, a[1][i]);
                }
            
                a = data[4];
                this.bPPIA = a[0];
                this.bPPIB = a[1];
                this.bPPIC = a[2];
                this.bPPICtrl = a[3];
                this.bNMI  = a[4];
            
                a = data[5];
                if (a) {
                    this.assert(this.model >= ChipSet.MODEL_5170);
                    this.b8042Status = a[0];
                    this.b8042InBuff = a[1];
                    this.b8042CmdData = a[2];
                    this.b8042OutBuff = a[3];
                    this.b8042InPort = a[4];
                    this.b8042OutPort = a[5];
                }
            
                a = data[6];
                if (a) {
                    this.assert(this.model >= ChipSet.MODEL_5170);
                    this.abDMAPageSpare = a[1];
                    this.abDMAPageSpare[7] = a[0];  // formerly bMFGData
                    this.bCMOSAddr = a[2];
                    this.abCMOSData = a[3];
                    this.nRTCCyclesLastUpdate = a[4];
                    this.nRTCCyclesNextUpdate = a[5];
                    /*
                     * TODO: Decide whether restore() should faithfully preserve the RTC date/time that save() saved,
                     * or always reinitialize the date/time, or give the user (or the machine configuration) the option.
                     *
                     * For now, we're always reinitializing the RTC date.  Alternatively, we could selectively update
                     * the CMOS bytes above, instead of overwriting them all, in which case this extra call to initRTCTime()
                     * could be avoided.
                     */
                    this.initRTCTime();
                }
                return true;
            };
            
            ChipSet.aDMAControllerInit = [0, null, null, 0, new Array(4)];
            
            /**
             * initDMAController(iDMAC, aState)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {Array} [aState]
             */
            ChipSet.prototype.initDMAController = function(iDMAC, aState)
            {
                var controller = this.aDMACs[iDMAC];
                if (!controller) {
                    this.assert(!aState);
                    controller = {
                        aChannels: new Array(4)
                    };
                }
                var a = aState && aState.length == 5? aState : ChipSet.aDMAControllerInit;
                controller.bStatus = a[0];
                controller.bCmd = a[1];
                controller.bReq = a[2];
                controller.bIndex = a[3];
                controller.nChannelBase = iDMAC << 2;
                for (var iChannel = 0; iChannel < controller.aChannels.length; iChannel++) {
                    this.initDMAChannel(controller, iChannel, a[4][iChannel]);
                }
                this.aDMACs[iDMAC] = controller;
            };
            
            ChipSet.aDMAChannelInit = [true, [0,0], [0,0], [0,0], [0,0]];
            
            /**
             * initDMAChannel(controller, iChannel, aState)
             *
             * @this {ChipSet}
             * @param {Object} controller
             * @param {number} iChannel
             * @param {Array} [aState]
             */
            ChipSet.prototype.initDMAChannel = function(controller, iChannel, aState)
            {
                var channel = controller.aChannels[iChannel];
                if (!channel) {
                    this.assert(!aState);
                    channel = {
                        addrInit: [0,0],
                        countInit: [0,0],
                        addrCurrent: [0,0],
                        countCurrent: [0,0]
                    };
                }
                var a = aState && aState.length == 8? aState : ChipSet.aDMAChannelInit;
                channel.masked = a[0];
                channel.addrInit[0] = a[1][0]; channel.addrInit[1] = a[1][1];
                channel.countInit[0] = a[2][0];  channel.countInit[1] = a[2][1];
                channel.addrCurrent[0] = a[3][0]; channel.addrCurrent[1] = a[3][1];
                channel.countCurrent[0] = a[4][0]; channel.countCurrent[1] = a[4][1];
                channel.mode = a[5];
                channel.bPage = a[6];
                // a[7] is deprecated
                channel.controller = controller;
                channel.iChannel = iChannel;
                this.initDMAFunction(channel, a[8], a[9]);
                controller.aChannels[iChannel] = channel;
            };
            
            /**
             * initDMAFunction(channel)
             *
             * @param {Object} channel
             * @param {Component|string} [component]
             * @param {string} [sFunction]
             * @param {Object} [obj]
             * @return {*}
             */
            ChipSet.prototype.initDMAFunction = function(channel, component, sFunction, obj)
            {
                if (typeof component == "string") {
                    component = Component.getComponentByID(component);
                }
                if (component) {
                    channel.done = null;
                    channel.sDevice = component.id;
                    channel.sFunction = sFunction;
                    channel.component = component;
                    channel.fnTransfer = component[sFunction];
                    channel.obj = obj;
                }
                return channel.fnTransfer;
            };
            
            /**
             * saveDMAControllers()
             *
             * @this {ChipSet}
             * @return {Array}
             */
            ChipSet.prototype.saveDMAControllers = function()
            {
                var data = [];
                for (var iDMAC = 0; iDMAC < this.aDMACs; iDMAC++) {
                    var controller = this.aDMACs[iDMAC];
                    data[iDMAC] = [
                        controller.bStatus,
                        controller.bCmd,
                        controller.bReq,
                        controller.bIndex,
                        this.saveDMAChannels(controller)
                    ];
                }
                return data;
            };
            
            /**
             * saveDMAChannels(controller)
             *
             * @this {ChipSet}
             * @param {Object} controller
             * @return {Array}
             */
            ChipSet.prototype.saveDMAChannels = function(controller)
            {
                var data = [];
                for (var iChannel = 0; iChannel < controller.aChannels.length; iChannel++) {
                    var channel = controller.aChannels[iChannel];
                    data[iChannel] = [
                        channel.masked,
                        channel.addrInit,
                        channel.countInit,
                        channel.addrCurrent,
                        channel.countCurrent,
                        channel.mode,
                        channel.bPage,
                        channel.sDevice,
                        channel.sFunction
                    ];
                }
                return data;
            };
            
            ChipSet.aPICInit = [0, new Array(4)];
            
            /**
             * initPIC(iPIC, port, aState)
             *
             * @this {ChipSet}
             * @param {number} iPIC
             * @param {number} port
             * @param {Array} [aState]
             */
            ChipSet.prototype.initPIC = function(iPIC, port, aState)
            {
                var pic = this.aPICs[iPIC];
                if (!pic) {
                    pic = {
                        aICW:   [null,null,null,null]
                    };
                }
                var a = aState && aState.length == 8? aState : ChipSet.aPICInit;
                pic.port = port;
                pic.nIRQBase = iPIC << 3;
                pic.nDelay = a[0];
                pic.aICW[0] = a[1][0]; pic.aICW[1] = a[1][1]; pic.aICW[2] = a[1][2]; pic.aICW[3] = a[1][3];
                pic.nICW = a[2];
                pic.bIMR = a[3];
                pic.bIRR = a[4];
                pic.bISR = a[5];
                pic.bIRLow = a[6];
                pic.bOCW3 = a[7];
                this.aPICs[iPIC] = pic;
            };
            
            /**
             * savePICs()
             *
             * @this {ChipSet}
             * @return {Array}
             */
            ChipSet.prototype.savePICs = function()
            {
                var data = [];
                for (var iPIC = 0; iPIC < this.aPICs.length; iPIC++) {
                    var pic = this.aPICs[iPIC];
                    data[iPIC] = [
                        pic.nDelay,
                        pic.aICW,
                        pic.nICW,
                        pic.bIMR,
                        pic.bIRR,
                        pic.bISR,
                        pic.bIRLow,
                        pic.bOCW3
                    ];
                }
                return data;
            };
            
            ChipSet.aTimerInit = [[0,0], [0,0], [0,0], [0,0]];
            
            /**
             * initTimer(iTimer, aState)
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @param {Array} [aState]
             */
            ChipSet.prototype.initTimer = function(iTimer, aState)
            {
                var timer = this.aTimers[iTimer];
                if (!timer) {
                    timer = {
                        countInit: [0,0],
                        countStart: [0,0],
                        countCurrent: [0,0],
                        countLatched: [0,0]
                    };
                }
                var a = aState && aState.length == 13? aState : ChipSet.aTimerInit;
                timer.countInit[0] = a[0][0]; timer.countInit[1] = a[0][1];
                timer.countStart[0] = a[1][0]; timer.countStart[1] = a[1][1];
                timer.countCurrent[0] = a[2][0]; timer.countCurrent[1] = a[2][1];
                timer.countLatched[0] = a[3][0]; timer.countLatched[1] = a[3][1];
                timer.bcd = a[4];
                timer.mode = a[5];
                timer.rw = a[6];
                timer.countIndex = a[7];
                timer.countBytes = a[8];
                timer.fOUT = a[9];
                timer.fLatched = a[10];
                timer.fCounting = a[11];
                timer.nCyclesStart = a[12];
                this.aTimers[iTimer] = timer;
            };
            
            /**
             * saveTimers()
             *
             * @this {ChipSet}
             * @return {Array}
             */
            ChipSet.prototype.saveTimers = function()
            {
                var data = [];
                for (var iTimer = 0; iTimer < this.aTimers.length; iTimer++) {
                    var timer = this.aTimers[iTimer];
                    data[iTimer] = [
                        timer.countInit,
                        timer.countStart,
                        timer.countCurrent,
                        timer.countLatched,
                        timer.bcd,
                        timer.mode,
                        timer.rw,
                        timer.countIndex,
                        timer.countBytes,
                        timer.fOUT,
                        timer.fLatched,
                        timer.fCounting,
                        timer.nCyclesStart
                    ];
                }
                return data;
            };
            
            /**
             * getSWMemorySize(fInit)
             *
             * @this {ChipSet}
             * @param {boolean} [fInit] is true for init switch value(s) only, current value(s) otherwise
             * @return {number} number of Kb of specified memory (NOT necessarily the same as installed memory; see RAM component)
             */
            ChipSet.prototype.getSWMemorySize = function(fInit)
            {
                var sw1 = (fInit? this.sw1Init : this.sw1);
                var sw2 = (fInit? this.sw2Init : this.sw2);
                return (((sw1 & ChipSet.PPI_SW.MEMORY.MASK) >> ChipSet.PPI_SW.MEMORY.SHIFT) + 1) * this.kbSW + (sw2 & ChipSet.PPI_C.SW) * 32;
            };
            
            /**
             * getSWFloppyDrives(fInit)
             *
             * @this {ChipSet}
             * @param {boolean} [fInit] is true for init switch value(s) only, current value(s) otherwise
             * @return {number} number of floppy drives specified by SW1 (range is 0 to 4)
             */
            ChipSet.prototype.getSWFloppyDrives = function(fInit)
            {
                var sw1 = (fInit? this.sw1Init : this.sw1);
                return ((this.model != ChipSet.MODEL_5150) || (sw1 & ChipSet.PPI_SW.FDRIVE.IPL))? ((sw1 & ChipSet.PPI_SW.FDRIVE.MASK) >> ChipSet.PPI_SW.FDRIVE.SHIFT) + 1 : 0;
            };
            
            /**
             * getSWFloppyDriveType(iDrive)
             *
             * @this {ChipSet}
             * @param {number} iDrive (0-based)
             * @return {number} one of the ChipSet.CMOS.FDRIVE.FD* values (FD360, FD1200, etc)
             */
            ChipSet.prototype.getSWFloppyDriveType = function(iDrive)
            {
                if (iDrive < this.getSWFloppyDrives()) {
                    if (!this.aFloppyDrives) {
                        return ChipSet.CMOS.FDRIVE.FD360;
                    }
                    if (iDrive < this.aFloppyDrives.length) {
                        switch(this.aFloppyDrives[iDrive]) {
                        case 160:
                        case 180:
                        case 320:
                        case 360:
                            return ChipSet.CMOS.FDRIVE.FD360;
                        case 720:
                            return ChipSet.CMOS.FDRIVE.FD720;
                        case 1200:
                            return ChipSet.CMOS.FDRIVE.FD1200;
                        case 1440:
                            return ChipSet.CMOS.FDRIVE.FD1440;
                        }
                    }
                    this.assert(false);  // we should never get here (else something is out of out sync)
                }
                return ChipSet.CMOS.FDRIVE.NONE;
            };
            
            /**
             * getSWFloppyDriveSize(iDrive)
             *
             * @this {ChipSet}
             * @param {number} iDrive (0-based)
             * @return {number} capacity of drive in Kb (eg, 360, 1200, 1440, etc), or 0 if none
             */
            ChipSet.prototype.getSWFloppyDriveSize = function(iDrive)
            {
                if (iDrive < this.getSWFloppyDrives()) {
                    if (!this.aFloppyDrives) {
                        return 360;
                    }
                    if (iDrive < this.aFloppyDrives.length) {
                        return this.aFloppyDrives[iDrive];
                    }
                    this.assert(false);  // we should never get here (else something is out of out sync)
                }
                return 0;
            };
            
            /**
             * getSWVideoMonitor(fInit)
             *
             * @this {ChipSet}
             * @param {boolean} [fInit] is true for init switch value(s) only, current value(s) otherwise
             * @return {number} one of ChipSet.MONITOR.*
             */
            ChipSet.prototype.getSWVideoMonitor = function(fInit)
            {
                var sw1 = (fInit? this.sw1Init : this.sw1);
                return (sw1 & ChipSet.PPI_SW.MONITOR.MASK) >> ChipSet.PPI_SW.MONITOR.SHIFT;
            };
            
            /**
             * addSwitches(s, control, n, v, oTips)
             *
             * @this {ChipSet}
             * @param {string} s is the name of the control
             * @param {Object} control is the HTML control DOM object
             * @param {number} n is the number of switches to add
             * @param {number} v contains the current value(s) of the switches
             * @param {Object} oTips contains tooltips for the various cells
             */
            ChipSet.prototype.addSwitches = function(s, control, n, v, oTips)
            {
                var sHTML = "";
                var sCellClass = PCJSCLASS + "-bitCell";
                for (var i = 1; i <= n; i++) {
                    var sCellClasses = sCellClass;
                    if (!i) sCellClasses += " " + PCJSCLASS + "-bitCellLeft";
                    var sCellID = s + "-" + i;
                    sHTML += "<div id=\"" + sCellID + "\" class=\"" + sCellClasses + "\" data-value=\"0\">" + i + "</div>\n";
                }
                control.innerHTML = sHTML;
                var aeCells = Component.getElementsByClass(control, sCellClass);
                var sTip = null;
                for (i = 0; i < aeCells.length; i++) {
                    if (oTips != null && oTips[i] != null) {
                        sTip = oTips[i];
                    }
                    if (sTip) aeCells[i].setAttribute("title", sTip);
                    this.setSwitch(aeCells[i], (v & (0x1 << i))? false : true);
                    aeCells[i].onclick = function(chipset, eSwitch) {
                        /*
                         *  If we defined the onclick handler below as "function(e)" instead of simply "function()", then we could
                         *  also receive an event object (e); however, IE reportedly requires that we examine a global (window.event)
                         *  instead.  If that's true, and if we ever care to get more details about the click event, then we might
                         *  have to worry about that (eg, define a local var: "var event = window.event || e").
                         */
                        return function onClickSwitch() {
                            chipset.toggleSwitch(eSwitch);
                        };
                    }(this, aeCells[i]);
                }
            };
            
            /**
             * getSwitch(control)
             *
             * @this {ChipSet}
             * @param {Object} control is an HTML control DOM object
             * @return {boolean} true if the switch represented by e is "on", false if "off"
             */
            ChipSet.prototype.getSwitch = function(control)
            {
                return control.getAttribute("data-value") == "1";
            };
            
            /**
             * setSwitch(control, f)
             *
             * @this {ChipSet}
             * @param {Object} control is an HTML control DOM object
             * @param {boolean} f is true if the switch represented by control should be "on", false if "off"
             */
            ChipSet.prototype.setSwitch = function(control, f)
            {
                control.setAttribute("data-value", f? "1" : "0");
                control.style.color = (f? "#ffffff" : "#000000");
                control.style.backgroundColor = (f? "#000000" : "#ffffff");
            };
            
            /**
             * toggleSwitch(control)
             *
             * @this {ChipSet}
             * @param {Object} control is an HTML control DOM object
             */
            ChipSet.prototype.toggleSwitch = function(control)
            {
                var f = !this.getSwitch(control);
                this.setSwitch(control, f);
                var sID = control.getAttribute("id");
                var asParts = sID.split("-");
                var b = (0x1 << (+asParts[1] - 1));
                switch (asParts[0]) {
                case "sw1":
                    this.sw1Init = (this.sw1Init & ~b) | (f? 0 : b);
                    break;
                case "sw2":
                    this.sw2Init = (this.sw2Init & ~b) | (f? 0 : b);
                    break;
                default:
                    break;
                }
                this.updateSwitchDesc();
            };
            
            /**
             * updateSwitchDesc()
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.updateSwitchDesc = function()
            {
                var controlDesc = this.bindings["swdesc"];
                /*
                 * TODO: Monitor type 0 used to be "No" (as in "No Monitor"), which was correct in the pre-EGA world,
                 * but in the post-EGA world, it depends.  We could ask the Video component for a definitive answer, but
                 * but what we print here isn't that critical, because most people won't bother with a Control Panel,
                 * which is really the only beneficiary of this code.
                 */
                var asMonitorTypes = {
                    0: "Enhanced Color",
                    1: "TV",
                    2: "Color",
                    3: "Monochrome"
                };
                if (controlDesc != null) {
                    var sText = "";
                    sText += this.getSWMemorySize(true) + "Kb";
                    sText += ", " + asMonitorTypes[this.getSWVideoMonitor(true)] + " Monitor";
                    sText += ", " + this.getSWFloppyDrives(true) + " Floppy Drives";
                    if (this.sw1 != null && this.sw1 != this.sw1Init || this.sw2 != null && this.sw2 != this.sw2Init) {
                        sText += " (Reset required)";
                    }
                    controlDesc.textContent = sText;
                }
            };
            
            /**
             * dumpPIC()
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.dumpPIC = function()
            {
                if (DEBUGGER) {
                    for (var iPIC = 0; iPIC < this.aPICs.length; iPIC++) {
                        var pic = this.aPICs[iPIC];
                        var sDump = "PIC" + iPIC + ":";
                        for (var i = 0; i < pic.aICW.length; i++) {
                            var b = pic.aICW[i];
                            sDump += " IC" + (i + 1) + '=' + str.toHexByte(b);
                        }
                        sDump += " IMR=" + str.toHexByte(pic.bIMR) + " IRR=" + str.toHexByte(pic.bIRR) + " ISR=" + str.toHexByte(pic.bISR) + " DELAY=" + pic.nDelay;
                        this.dbg.println(sDump);
                    }
                }
            };
            
            /**
             * dumpTimer()
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.dumpTimer = function()
            {
                if (DEBUGGER) {
                    for (var iTimer = 0; iTimer < this.aTimers.length; iTimer++) {
                        this.updateTimer(iTimer);
                        var timer = this.aTimers[iTimer];
                        var sDump = "TIMER" + iTimer + ":";
                        var count = 0;
                        if (timer.countBytes != null) {
                            for (var i = 0; i <= timer.countBytes; i++) {
                                count |= (timer.countCurrent[i] << (i * 8));
                            }
                        }
                        sDump += " mode=" + timer.mode + " bytes=" + timer.countBytes + " count=" + str.toHexWord(count);
                        this.dbg.println(sDump);
                    }
                }
            };
            
            /**
             * dumpCMOS()
             *
             * @this {ChipSet}
             */
            ChipSet.prototype.dumpCMOS = function()
            {
                if (DEBUGGER) {
                    var sDump = "";
                    for (var iCMOS = 0; iCMOS < ChipSet.CMOS.ADDR.TOTAL; iCMOS++) {
                        var b = (iCMOS <= ChipSet.CMOS.ADDR.STATUSD? this.getRTCByte(iCMOS) : this.abCMOSData[iCMOS]);
                        if (sDump) sDump += '\n';
                        sDump += "CMOS[" + str.toHexByte(iCMOS) + "]: " + str.toHexByte(b);
                    }
                    this.dbg.println(sDump);
                }
            };
            
            /**
             * inDMAChannelAddr(iDMAC, iChannel, port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} iChannel
             * @param {number} port (0x00, 0x02, 0x04, 0x06 for DMAC 0, 0xC0, 0xC4, 0xC8, 0xCC for DMAC 1)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inDMAChannelAddr = function(iDMAC, iChannel, port, addrFrom)
            {
                var controller = this.aDMACs[iDMAC];
                var channel = controller.aChannels[iChannel];
                var b = channel.addrCurrent[controller.bIndex];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "DMA" + iDMAC + ".CHANNEL" + iChannel + ".ADDR[" + controller.bIndex + "]", b, true);
                }
                controller.bIndex ^= 0x1;
                /*
                 * Technically, aTimers[1].fOut is what drives DMA requests for DMA channel 0 (ChipSet.DMA_REFRESH),
                 * every 15us, once the BIOS has initialized the channel's "mode" with MODE_SINGLE, INCREMENT, AUTOINIT,
                 * and TYPE_READ (0x58) and initialized TIMER1 appropriately.
                 *
                 * However, we don't need to be that particular.  Simply simulate an ever-increasing address after every
                 * read of the full DMA channel 0 address.
                 */
                if (!iDMAC && iChannel == ChipSet.DMA_REFRESH && !controller.bIndex) {
                    channel.addrCurrent[0]++;
                    if (channel.addrCurrent[0] > 0xff) {
                        channel.addrCurrent[0] = 0;
                        channel.addrCurrent[1]++;
                        if (channel.addrCurrent[1] > 0xff) {
                            channel.addrCurrent[1] = 0;
                        }
                    }
                }
                return b;
            };
            
            /**
             * outDMAChannelAddr(iDMAC, iChannel, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} iChannel
             * @param {number} port (0x00, 0x02, 0x04, 0x06 for DMAC 0, 0xC0, 0xC4, 0xC8, 0xCC for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAChannelAddr = function outDMAChannelAddr(iDMAC, iChannel, port, bOut, addrFrom)
            {
                var controller = this.aDMACs[iDMAC];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".CHANNEL" + iChannel + ".ADDR[" + controller.bIndex + "]", null, true);
                }
                var channel = controller.aChannels[iChannel];
                channel.addrCurrent[controller.bIndex] = channel.addrInit[controller.bIndex] = bOut;
                controller.bIndex ^= 0x1;
            };
            
            /**
             * inDMAChannelCount(iDMAC, iChannel, port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} iChannel
             * @param {number} port (0x01, 0x03, 0x05, 0x07 for DMAC 0, 0xC2, 0xC6, 0xCA, 0xCE for DMAC 1)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inDMAChannelCount = function(iDMAC, iChannel, port, addrFrom)
            {
                var controller = this.aDMACs[iDMAC];
                var channel = controller.aChannels[iChannel];
                var b = channel.countCurrent[controller.bIndex];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "DMA" + iDMAC + ".CHANNEL" + iChannel + ".COUNT[" + controller.bIndex + "]", b, true);
                }
                controller.bIndex ^= 0x1;
                /*
                 * Technically, aTimers[1].fOut is what drives DMA requests for DMA channel 0 (ChipSet.DMA_REFRESH),
                 * every 15us, once the BIOS has initialized the channel's "mode" with MODE_SINGLE, INCREMENT, AUTOINIT,
                 * and TYPE_READ (0x58) and initialized TIMER1 appropriately.
                 *
                 * However, we don't need to be that particular.  Simply simulate an ever-decreasing count after every
                 * read of the full DMA channel 0 count.
                 */
                if (!iDMAC && iChannel == ChipSet.DMA_REFRESH && !controller.bIndex) {
                    channel.countCurrent[0]--;
                    if (channel.countCurrent[0] < 0) {
                        channel.countCurrent[0] = 0xff;
                        channel.countCurrent[1]--;
                        if (channel.countCurrent[1] < 0) {
                            channel.countCurrent[1] = 0xff;
                            /*
                             * This is the logical point to indicate Terminal Count (TC), but again, there's no need to be
                             * so particular; inDMAStatus() has its own logic for periodically signalling TC.
                             */
                        }
                    }
                }
                return b;
            };
            
            /**
             * outDMAChannelCount(iDMAC, iChannel, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} iChannel (ports 0x01, 0x03, 0x05, 0x07)
             * @param {number} port (0x01, 0x03, 0x05, 0x07 for DMAC 0, 0xC2, 0xC6, 0xCA, 0xCE for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAChannelCount = function(iDMAC, iChannel, port, bOut, addrFrom)
            {
                var controller = this.aDMACs[iDMAC];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".CHANNEL" + iChannel + ".COUNT[" + controller.bIndex + "]", null, true);
                }
                var channel = controller.aChannels[iChannel];
                channel.countCurrent[controller.bIndex] = channel.countInit[controller.bIndex] = bOut;
                controller.bIndex ^= 0x1;
            };
            
            /**
             * inDMAStatus(iDMAC, port, addrFrom)
             *
             * From the 8237A spec:
             *
             * "The Status register is available to be read out of the 8237A by the microprocessor.
             * It contains information about the status of the devices at this point. This information includes
             * which channels have reached Terminal Count (TC) and which channels have pending DMA requests.
             *
             * Bits 0–3 are set every time a TC is reached by that channel or an external EOP is applied.
             * These bits are cleared upon Reset and on each Status Read.
             *
             * Bits 4–7 are set whenever their corresponding channel is requesting service."
             *
             * TRIVIA: This hook wasn't installed when I was testing with the MODEL_5150 ROM BIOS, and it
             * didn't matter, but the MODEL_5160 ROM BIOS checks it several times, including @F000:E156, where
             * it verifies that TIMER1 didn't request service on channel 0.
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x08 for DMAC 0, 0xD0 for DMAC 1)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inDMAStatus = function(iDMAC, port, addrFrom)
            {
                /*
                 * HACK: Unlike the MODEL_5150, the MODEL_5160 ROM BIOS checks DMA channel 0 for TC (@F000:E4DF)
                 * after running a number of unrelated tests, since enough time would have passed for channel 0 to
                 * have reached TC at least once.  So I simply OR in a hard-coded TC bit for channel 0 every time
                 * status is read.
                 */
                var controller = this.aDMACs[iDMAC];
                var b = controller.bStatus | ChipSet.DMA_STATUS.CH0_TC;
                controller.bStatus &= ~ChipSet.DMA_STATUS.ALL_TC;
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "DMA" + iDMAC + ".STATUS", b, true);
                }
                return b;
            };
            
            /**
             * outDMACmd(iDMAC, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x08 for DMAC 0, 0xD0 for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMACmd = function(iDMAC, port, bOut, addrFrom)
            {
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".CMD", null, true);
                }
                this.aDMACs[iDMAC].bCmd = bOut;
            };
            
            /**
             * outDMAReq(iDMAC, port, bOut, addrFrom)
             *
             * From the 8237A spec:
             *
             * "The 8237A can respond to requests for DMA service which are initiated by software as well as by a DREQ.
             * Each channel has a request bit associated with it in the 4-bit Request register. These are non-maskable and subject
             * to prioritization by the Priority Encoder network. Each register bit is set or reset separately under software
             * control or is cleared upon generation of a TC or external EOP. The entire register is cleared by a Reset.
             *
             * To set or reset a bit the software loads the proper form of the data word.... In order to make a software request,
             * the channel must be in Block Mode."
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x09 for DMAC 0, 0xD2 for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAReq = function(iDMAC, port, bOut, addrFrom)
            {
                var controller = this.aDMACs[iDMAC];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".REQ", null, true);
                }
                /*
                 * Bits 0-1 contain the channel number
                 */
                var iChannel = (bOut & 0x3);
                /*
                 * Bit 2 is the request bit (0 to reset, 1 to set), which must be propagated to the corresponding bit (4-7) in the status register
                 */
                var iChannelBit = ((bOut & 0x4) << (iChannel + 2));
                controller.bStatus = (controller.bStatus & ~(0x10 << iChannel)) | iChannelBit;
                controller.bReq = bOut;
            };
            
            /**
             * outDMAMask(iDMAC, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x0A for DMAC 0, 0xD4 for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAMask = function(iDMAC, port, bOut, addrFrom)
            {
                var controller = this.aDMACs[iDMAC];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".MASK", null, true);
                }
                var iChannel = bOut & ChipSet.DMA_MASK.CHANNEL;
                var channel = controller.aChannels[iChannel];
                channel.masked = !!(bOut & ChipSet.DMA_MASK.CHANNEL_SET);
                if (!channel.masked) this.requestDMA(controller.nChannelBase + iChannel);
            };
            
            /**
             * outDMAMode(iDMAC, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x0B for DMAC 0, 0xD6 for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAMode = function(iDMAC, port, bOut, addrFrom)
            {
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".MODE", null, true);
                }
                var iChannel = bOut & ChipSet.DMA_MODE.CHANNEL;
                this.aDMACs[iDMAC].aChannels[iChannel].mode = bOut;
            };
            
            /**
             * outDMAResetFF(iDMAC, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x0C for DMAC 0, 0xD8 for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             *
             * Any write to this port simply resets the controller's "first/last flip-flop", which determines whether
             * the even or odd byte of a DMA address or count register will be accessed next.
             */
            ChipSet.prototype.outDMAResetFF = function(iDMAC, port, bOut, addrFrom)
            {
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".RESET_FF", null, true);
                }
                this.aDMACs[iDMAC].bIndex = 0;
            };
            
            /**
             * outDMAMasterClear(iDMAC, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} port (0x0D for DMAC 0, 0xDA for DMAC 1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAMasterClear = function(iDMAC, port, bOut, addrFrom)
            {
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".MASTER_CLEAR", null, true);
                }
                /*
                 * The value written to this port doesn't matter; any write triggers a "master clear" operation
                 *
                 * TODO: Can't we just call initDMAController(), which would also take care of clearing controller.bStatus?
                 */
                var controller = this.aDMACs[iDMAC];
                for (var i = 0; i < controller.aChannels.length; i++) {
                    this.initDMAChannel(controller, i);
                }
            };
            
            /**
             * inDMAPageReg(iDMAC, iChannel, port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} iChannel
             * @param {number} port
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inDMAPageReg = function(iDMAC, iChannel, port, addrFrom)
            {
                var bIn = this.aDMACs[iDMAC].aChannels[iChannel].bPage;
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "DMA" + iDMAC + ".CHANNEL" + iChannel + ".PAGE", bIn, true);
                }
                return bIn;
            };
            
            /**
             * outDMAPageReg(iDMAC, iChannel, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iDMAC
             * @param {number} iChannel
             * @param {number} port
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAPageReg = function(iDMAC, iChannel, port, bOut, addrFrom)
            {
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA" + iDMAC + ".CHANNEL" + iChannel + ".PAGE", null, true);
                }
                this.aDMACs[iDMAC].aChannels[iChannel].bPage = bOut;
            };
            
            /**
             * inDMAPageSpare(iSpare, port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iSpare
             * @param {number} port
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inDMAPageSpare = function(iSpare, port, addrFrom)
            {
                var bIn = this.abDMAPageSpare[iSpare];
                if (this.messageEnabled(Messages.DMA | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "DMA.SPARE" + iSpare + ".PAGE", bIn, true);
                }
                return bIn;
            };
            
            /**
             * outDMAPageSpare(iSpare, port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iSpare
             * @param {number} port
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outDMAPageSpare = function(iSpare, port, bOut, addrFrom)
            {
                /*
                 * TODO: Remove this DEBUG-only DESKPRO386 code once we're done debugging DeskPro 386 ROMs;
                 * it enables logging of all DeskPro ROM checkpoint I/O to port 0x84.
                 */
                if (this.messageEnabled(Messages.DMA | Messages.PORT) || DEBUG && this.model == ChipSet.MODEL_DESKPRO386 && port == 0x84) {
                    this.printMessageIO(port, bOut, addrFrom, "DMA.SPARE" + iSpare + ".PAGE", null, true);
                }
                this.abDMAPageSpare[iSpare] = bOut;
            };
            
            /**
             * checkDMA()
             *
             * Called by the CPU whenever INTR.DMA is set.
             *
             * @return {boolean} true if one or more async DMA channels are still active (unmasked), false to reset INTR.DMA
             */
            ChipSet.prototype.checkDMA = function()
            {
                var fActive = false;
                for (var iDMAC = 0; iDMAC < this.aDMACs; iDMAC++) {
                    var controller = this.aDMACs[iDMAC];
                    for (var iChannel = 0; iChannel < controller.aChannels.length; iChannel++) {
                        var channel = controller.aChannels[iChannel];
                        if (!channel.masked) {
                            this.advanceDMA(channel);
                            if (!channel.masked) fActive = true;
                        }
                    }
                }
                return fActive;
            };
            
            /**
             * connectDMA(iDMAChannel, component, sFunction, obj)
             *
             * @param {number} iDMAChannel
             * @param {Component|string} component
             * @param {string} sFunction
             * @param {Object} obj (eg, when the HDC connects, it passes a drive object)
             */
            ChipSet.prototype.connectDMA = function(iDMAChannel, component, sFunction, obj)
            {
                var iDMAC = iDMAChannel >> 2;
                var controller = this.aDMACs[iDMAC];
            
                var iChannel = iDMAChannel & 0x3;
                var channel = controller.aChannels[iChannel];
            
                this.initDMAFunction(channel, component, sFunction, obj);
            };
            
            /**
             * requestDMA(iDMAChannel, done)
             *
             * @this {ChipSet}
             * @param {number} iDMAChannel
             * @param {function(boolean)} [done]
             *
             * For DMA_MODE.TYPE_WRITE transfers, fnTransfer(-1) must return bytes as long as we request them (although it may
             * return -1 if it runs out of bytes prematurely).
             *
             * Similarly, for DMA_MODE.TYPE_READ transfers, fnTransfer(b) must accept bytes as long as we deliver them (although
             * it is certainly free to ignore bytes it no longer wants).
             */
            ChipSet.prototype.requestDMA = function(iDMAChannel, done)
            {
                var iDMAC = iDMAChannel >> 2;
                var controller = this.aDMACs[iDMAC];
            
                var iChannel = iDMAChannel & 0x3;
                var channel = controller.aChannels[iChannel];
            
                if (!channel.component || !channel.fnTransfer || !channel.obj) {
                    if (DEBUG && this.messageEnabled(Messages.DMA | Messages.DATA)) {
                        this.printMessage("requestDMA(" + iDMAChannel + "): not connected to a component", true);
                    }
                    if (done) done(true);
                    return;
                }
            
                /*
                 * We can't simply slam done into channel.done; that would be fine if requestDMA() was called only by functions
                 * like HDC.doRead() and HDC.doWrite(), but we're also called whenever a DMA channel is unmasked, and in those cases,
                 * we need to preserve whatever handler may have been previously set.
                 *
                 * However, in an effort to ensure we don't end up with stale done handlers, connectDMA() will reset channel.done.
                 */
                if (done) channel.done = done;
            
                if (channel.masked) {
                    if (DEBUG && this.messageEnabled(Messages.DMA | Messages.DATA)) {
                        this.printMessage("requestDMA(" + iDMAChannel + "): channel masked, request queued", true);
                    }
                    return;
                }
            
                /*
                 * Let's try to do async DMA without asking the CPU for help...
                 *
                 *      this.cpu.setDMA(true);
                 */
                this.advanceDMA(channel, true);
            };
            
            /**
             * advanceDMA(channel, fInit)
             *
             * @this {ChipSet}
             * @param {Object} channel
             * @param {boolean} [fInit]
             */
            ChipSet.prototype.advanceDMA = function(channel, fInit)
            {
                if (fInit) {
                    channel.count = (channel.countCurrent[1] << 8) | channel.countCurrent[0];
                    channel.type = (channel.mode & ChipSet.DMA_MODE.TYPE);
                    channel.fWarning = channel.fError = false;
                    if (DEBUG && DEBUGGER) {
                        channel.cbDebug = channel.count + 1;
                        channel.sAddrDebug = (DEBUG && DEBUGGER? null : undefined);
                    }
                }
                /*
                 * To support async DMA without requiring help from the CPU (ie, without relying upon cpu.setDMA()), we require that
                 * the data transfer functions provide an fAsync parameter to their callbacks; fAsync must be true if the callback was
                 * truly asynchronous (ie, it had to wait for a remote I/O request to finish), or false if the data was already available
                 * and the callback was performed synchronously.
                 *
                 * Whenever a callback is issued asynchronously, we will immediately daisy-chain another pair of updateDMA()/advanceDMA()
                 * calls, which will either finish the DMA operation if no more remote I/O requests are required, or will queue up another
                 * I/O request, which will in turn trigger another async callback.  Thus, the DMA request keeps itself going without
                 * requiring any special assistance from the CPU via setDMA().
                 */
                var bto = null;
                var chipset = this;
                var fAsyncRequest = false;
                var controller = channel.controller;
                var iDMAChannel = controller.nChannelBase + channel.iChannel;
            
                while (true) {
                    if (channel.count >= 0) {
                        var b;
                        var addr = (channel.bPage << 16) | (channel.addrCurrent[1] << 8) | channel.addrCurrent[0];
                        if (DEBUG && DEBUGGER && channel.sAddrDebug === null) {
                            channel.sAddrDebug = str.toHex(addr >> 4, 4) + ":" + str.toHex(addr & 0xf, 4);
                            if (this.messageEnabled(this.messageBitsDMA(iDMAChannel)) && channel.type != ChipSet.DMA_MODE.TYPE_WRITE) {
                                this.printMessage("advanceDMA(" + iDMAChannel + ") transferring " + channel.cbDebug + " bytes from " + channel.sAddrDebug, true);
                                this.dbg.doDump("db", channel.sAddrDebug, "l" + channel.cbDebug);
                            }
                        }
                        if (channel.type == ChipSet.DMA_MODE.TYPE_WRITE) {
                            fAsyncRequest = true;
                            (function advanceDMAWrite(addrCur) {
                                channel.fnTransfer.call(channel.component, channel.obj, -1, function onTransferDMA(b, fAsync, obj, off) {
                                    if (b < 0) {
                                        if (!channel.fWarning) {
                                            if (DEBUG && chipset.messageEnabled(Messages.DMA)) {
                                                chipset.printMessage("advanceDMA(" + iDMAChannel + ") ran out of data, assuming 0xff", true);
                                            }
                                            channel.fWarning = true;
                                        }
                                        /*
                                         * TODO: Determine whether to abort, as we do for DMA_MODE.TYPE_READ.
                                         */
                                        b = 0xff;
                                    }
                                    if (!channel.masked) {
                                        chipset.bus.setByte(addrCur, b);
                                        if (BACKTRACK) {
                                            if (!off && obj.file && chipset.messageEnabled(Messages.DISK)) {
                                                chipset.printMessage("loading " + obj.file.sPath + '[' + obj.offFile + "] at %" + str.toHex(addrCur), true);
                                            }
                                            bto = chipset.bus.addBackTrackObject(obj, bto, off);
                                            chipset.bus.writeBackTrackObject(addrCur, bto, off);
                                        }
                                    }
                                    fAsyncRequest = fAsync;
                                    if (fAsync) {
                                        setTimeout(function() {
                                            if (!chipset.updateDMA(channel)) chipset.advanceDMA(channel);
                                        }, 0);
                                    }
                                });
                            }(addr));
                        }
                        else if (channel.type == ChipSet.DMA_MODE.TYPE_READ) {
                            /*
                             * TODO: Determine whether we should support async dmaWrite() functions (currently not required)
                             */
                            b = chipset.bus.getByte(addr);
                            if (channel.fnTransfer.call(channel.component, channel.obj, b) < 0) {
                                /*
                                 * In this case, I think I have no choice but to terminate the DMA operation in response to a failure,
                                 * because the ROM BIOS FDC.REG_DATA.CMD.FORMAT_TRACK command specifies a count that is MUCH too large
                                 * (a side-effect of the ROM BIOS using the same "DMA_SETUP" code for reads, writes AND formats).
                                 */
                                channel.fError = true;
                            }
                        }
                        else if (channel.type == ChipSet.DMA_MODE.TYPE_VERIFY) {
                            /*
                             * Nothing to read or write; just call updateDMA()
                             */
                        }
                        else {
                            if (DEBUG && this.messageEnabled(Messages.DMA | Messages.WARN)) {
                                this.printMessage("advanceDMA(" + iDMAChannel + ") unsupported transfer type: " + str.toHexWord(channel.type), true);
                            }
                            channel.fError = true;
                        }
                    }
                    if (fAsyncRequest || this.updateDMA(channel)) break;
                }
            };
            
            /**
             * updateDMA(channel)
             *
             * @this {ChipSet}
             * @param {Object} channel
             * @return {boolean} true if DMA operation complete, false if not
             */
            ChipSet.prototype.updateDMA = function(channel)
            {
                if (!channel.fError && --channel.count >= 0) {
                    if (channel.mode & ChipSet.DMA_MODE.DECREMENT) {
                        channel.addrCurrent[0]--;
                        if (channel.addrCurrent[0] < 0) {
                            channel.addrCurrent[0] = 0xff;
                            channel.addrCurrent[1]--;
                            if (channel.addrCurrent[1] < 0) channel.addrCurrent[1] = 0xff;
                        }
                    } else {
                        channel.addrCurrent[0]++;
                        if (channel.addrCurrent[0] > 0xff) {
                            channel.addrCurrent[0] = 0x00;
                            channel.addrCurrent[1]++;
                            if (channel.addrCurrent[1] > 0xff) channel.addrCurrent[1] = 0x00;
                        }
                    }
                    /*
                     * In situations where an HDC DMA operation took too long, the Fixed Disk BIOS would give up, but the DMA operation would continue.
                     *
                     * TODO: Verify that the Fixed Disk BIOS shuts down (ie, re-masks) a DMA channel for failed requests, and that this handles those failures.
                     */
                    if (!channel.masked) return false;
                }
            
                var controller = channel.controller;
                var iDMAChannel = controller.nChannelBase + channel.iChannel;
                controller.bStatus = (controller.bStatus & ~(0x10 << channel.iChannel)) | (0x1 << channel.iChannel);
            
                /*
                 * EOP is supposed to automatically (re)mask the channel, unless it's set for auto-initialize.
                 */
                if (!(channel.mode & ChipSet.DMA_MODE.AUTOINIT)) {
                    channel.masked = true;
                    channel.component = channel.obj = null;
                }
            
                if (DEBUG && this.messageEnabled(this.messageBitsDMA(iDMAChannel)) && channel.type == ChipSet.DMA_MODE.TYPE_WRITE && channel.sAddrDebug) {
                    this.printMessage("updateDMA(" + iDMAChannel + ") transferred " + channel.cbDebug + " bytes to " + channel.sAddrDebug, true);
                    this.dbg.doDump("db", channel.sAddrDebug, "l" + channel.cbDebug);
                }
            
                if (channel.done) {
                    channel.done(!channel.fError);
                    channel.done = null;
                }
            
                /*
                 * While it might make sense to call cpu.setDMA() here, it's simpler to let the CPU issue one more call
                 * to chipset.checkDMA() and let the CPU update INTR.DMA on its own, based on the return value from checkDMA().
                 */
                return true;
            };
            
            /**
             * inPICLo(iPIC, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iPIC
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inPICLo = function(iPIC, addrFrom)
            {
                var b = 0;
                var pic = this.aPICs[iPIC];
                if (pic.bOCW3 != null) {
                    var bReadReg = pic.bOCW3 & ChipSet.PIC_LO.OCW3_READ_CMD;
                    switch (bReadReg) {
                        case ChipSet.PIC_LO.OCW3_READ_IRR:
                            b = pic.bIRR;
                            break;
                        case ChipSet.PIC_LO.OCW3_READ_ISR:
                            b = pic.bISR;
                            break;
                        default:
                            break;
                    }
                }
                if (this.messageEnabled(Messages.PIC | Messages.PORT | Messages.CHIPSET)) {
                    this.printMessageIO(pic.port, null, addrFrom, "PIC" + iPIC, b, true);
                }
                return b;
            };
            
            /**
             * outPICLo(iPIC, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iPIC
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outPICLo = function(iPIC, bOut, addrFrom)
            {
                var pic = this.aPICs[iPIC];
                if (this.messageEnabled(Messages.PIC | Messages.PORT | Messages.CHIPSET)) {
                    this.printMessageIO(pic.port, bOut, addrFrom, "PIC" + iPIC, null, true);
                }
                if (bOut & ChipSet.PIC_LO.ICW1) {
                    /*
                     * This must be an ICW1...
                     */
                    pic.nICW = 0;
                    pic.aICW[pic.nICW++] = bOut;
                    /*
                     * I used to do the rest of this initialization in outPICHi(), once all the ICW commands had been received,
                     * but a closer reading of the 8259A spec indicates that that should happen now, on receipt on ICW1.
                     *
                     * Also, on p.10 of that spec, it says "The Interrupt Mask Register is cleared".  I originally took that to
                     * mean that all interrupts were masked, but based on what MS-DOS 4.0M expects to happen after this code runs:
                     *
                     *      0070:44C6 B013          MOV      AL,13
                     *      0070:44C8 E620          OUT      20,AL
                     *      0070:44CA B050          MOV      AL,50
                     *      0070:44CC E621          OUT      21,AL
                     *      0070:44CE B009          MOV      AL,09
                     *      0070:44D0 E621          OUT      21,AL
                     *
                     * (ie, it expects its next call to INT 0x13 will still generate an interrupt), I've decided the spec
                     * must be read literally, meaning that all IMR bits must be zeroed.  Unmasking all possible interrupts by
                     * default seems unwise to me, but who am I to judge....
                     */
                    pic.bIMR = 0x00;
                    pic.bIRLow = 7;
                    /*
                     * TODO: I'm also zeroing both IRR and ISR, even though that's not actually mentioned as part of the ICW
                     * sequence, because they need to be (re)initialized at some point.  However, if some component is currently
                     * requesting an interrupt, what should I do about that?  Originally, I had decided to clear them ONLY if they
                     * were still undefined, but that change appeared to break the ROM BIOS handling of CTRL-ALT-DEL, so I'm back
                     * to unconditionally zeroing them.
                     */
                    pic.bIRR = pic.bISR = 0;
                    /*
                     * The spec also says that "Special Mask Mode is cleared and Status Read is set to IRR".  I attempt to insure
                     * the latter, but as for special mask mode... well, that mode isn't supported yet.
                     */
                    pic.bOCW3 = ChipSet.PIC_LO.OCW3 | ChipSet.PIC_LO.OCW3_READ_IRR;
                }
                else if (!(bOut & ChipSet.PIC_LO.OCW3)) {
                    /*
                     * This must be an OCW2...
                     */
                    var bOCW2 = bOut & ChipSet.PIC_LO.OCW2_OP_MASK;
                    if (bOCW2 & ChipSet.PIC_LO.OCW2_EOI) {
                        /*
                         * This OCW2 must be an EOI command...
                         */
                        var nIRL, bIREnd = 0;
                        if ((bOCW2 & ChipSet.PIC_LO.OCW2_EOI_SPEC) == ChipSet.PIC_LO.OCW2_EOI_SPEC) {
                            /*
                             * More "specifically", a specific EOI command...
                             */
                            nIRL = bOut & ChipSet.PIC_LO.OCW2_IR_LVL;
                            bIREnd = 1 << nIRL;
                        } else {
                            /*
                             * Less "specifically", a non-specific EOI command.  The search for the highest priority in-service
                             * interrupt must start with whichever interrupt is opposite the lowest priority interrupt (normally 7,
                             * but technically whatever bIRLow is currently set to).  For example:
                             *
                             *      If bIRLow is 7, then the priority order is: 0, 1, 2, 3, 4, 5, 6, 7.
                             *      If bIRLow is 6, then the priority order is: 7, 0, 1, 2, 3, 4, 5, 6.
                             *      If bIRLow is 5, then the priority order is: 6, 7, 0, 1, 2, 3, 4, 5.
                             *      etc.
                             */
                            nIRL = pic.bIRLow + 1;
                            while (true) {
                                nIRL &= 0x7;
                                var bIR = 1 << nIRL;
                                if (pic.bISR & bIR) {
                                    bIREnd = bIR;
                                    break;
                                }
                                if (nIRL++ == pic.bIRLow) break;
                            }
                            if (DEBUG && !bIREnd) nIRL = null;      // for unexpected non-specific EOI commands, there's no IRQ to report
                        }
                        var nIRQ = (nIRL == null? undefined : pic.nIRQBase + nIRL);
                        if (pic.bISR & bIREnd) {
                            if (DEBUG && this.messageEnabled(this.messageBitsIRQ(nIRQ))) {
                                this.printMessage("outPIC" + iPIC + '(' + str.toHexByte(pic.port) + "): IRQ " + nIRQ + " ending @" + this.dbg.hexOffset(this.cpu.getIP(), this.cpu.getCS()) + " stack=" + this.dbg.hexOffset(this.cpu.getSP(), this.cpu.getSS()), true);
                            }
                            pic.bISR &= ~bIREnd;
                            this.checkIRR();
                        } else {
                            if (DEBUG && this.messageEnabled(Messages.PIC | Messages.WARN)) {
                                this.printMessage("outPIC" + iPIC + '(' + str.toHexByte(pic.port) + "): unexpected EOI command, IRQ " + nIRQ + " not in service", true);
                                if (!SAMPLER && MAXDEBUG) this.dbg.stopCPU();
                            }
                        }
                        /*
                         * TODO: Support EOI commands with automatic rotation (eg, ChipSet.PIC_LO.OCW2_EOI_ROT and ChipSet.PIC_LO.OCW2_EOI_ROTSPEC)
                         */
                        if (bOCW2 & ChipSet.PIC_LO.OCW2_SET_ROTAUTO) {
                            this.notice("PIC" + iPIC + '(' + str.toHexByte(pic.port) + "): unsupported OCW2 rotate command: " + str.toHexByte(bOut));
                        }
                    }
                    else  if (bOCW2 == ChipSet.PIC_LO.OCW2_SET_PRI) {
                        /*
                         * This OCW2 changes the lowest priority interrupt to the specified level (the default is 7)
                         */
                        pic.bIRLow = bOut & ChipSet.PIC_LO.OCW2_IR_LVL;
                    }
                    else {
                        /*
                         * TODO: Remaining commands to support: ChipSet.PIC_LO.OCW2_SET_ROTAUTO and ChipSet.PIC_LO.OCW2_CLR_ROTAUTO
                         */
                        this.notice("PIC" + iPIC + '(' + str.toHexByte(pic.port) + "): unsupported OCW2 automatic EOI command: " + str.toHexByte(bOut));
                    }
                } else {
                    /*
                     * This must be an OCW3 request. If it's a "Read Register" command (PIC_LO.OCW3_READ_CMD), inPICLo() will take care it.
                     *
                     * TODO: If OCW3 specified a "Poll" command (PIC_LO.OCW3_POLL_CMD) or a "Special Mask Mode" command (PIC_LO.OCW3_SMM_CMD),
                     * that's unfortunate, because I don't support them yet.
                     */
                    if (bOut & (ChipSet.PIC_LO.OCW3_POLL_CMD | ChipSet.PIC_LO.OCW3_SMM_CMD)) {
                        this.notice("PIC" + iPIC + '(' + str.toHexByte(pic.port) + "): unsupported OCW3 command: " + str.toHexByte(bOut));
                    }
                    pic.bOCW3 = bOut;
                }
            };
            
            /**
             * inPICHi(iPIC, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iPIC
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inPICHi = function(iPIC, addrFrom)
            {
                var pic = this.aPICs[iPIC];
                var b = pic.bIMR;
                if (this.messageEnabled(Messages.PIC | Messages.PORT | Messages.CHIPSET)) {
                    this.printMessageIO(pic.port+1, null, addrFrom, "PIC" + iPIC, b, true);
                }
                return b;
            };
            
            /**
             * outPICHi(iPIC, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iPIC
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outPICHi = function(iPIC, bOut, addrFrom)
            {
                var pic = this.aPICs[iPIC];
                if (this.messageEnabled(Messages.PIC | Messages.PORT | Messages.CHIPSET)) {
                    this.printMessageIO(pic.port+1, bOut, addrFrom, "PIC" + iPIC, null, true);
                }
                if (pic.nICW < pic.aICW.length) {
                    pic.aICW[pic.nICW++] = bOut;
                    if (pic.nICW == 2 && (pic.aICW[0] & ChipSet.PIC_LO.ICW1_SNGL))
                        pic.nICW++;
                    if (pic.nICW == 3 && !(pic.aICW[0] & ChipSet.PIC_LO.ICW1_ICW4))
                        pic.nICW++;
                }
                else {
                    /*
                     * We have all our ICW "words" (ie, bytes), so this must be an OCW1 write (which is simply an IMR write)
                     */
                    pic.bIMR = bOut;
                    /*
                     * See the CPU's delayINTR() function for an explanation of why this explicit delay is necessary.
                     */
                    this.cpu.delayINTR();
                    /*
                     * Alas, we need a longer delay for the MODEL_5170's "KBD_RESET" function (F000:17D2), which must drop
                     * into a loop and decrement CX at least once after unmasking the KBD IRQ.  The "KBD_RESET" function on
                     * previous models could be handled with a 4-instruction delay provided by the Keyboard.resetDevice() call
                     * to setIRR(), but the MODEL_5170 needs a roughly 6-instruction delay after it unmasks the KBD IRQ.
                     */
                    this.checkIRR(!iPIC && bOut == 0xFD? 6 : 0);
                }
            };
            
            /**
             * checkIMR(nIRQ)
             *
             * @this {ChipSet}
             * @param {number} nIRQ
             * @return {boolean} true if the specified IRQ is masked, false if not
             */
            ChipSet.prototype.checkIMR = function(nIRQ)
            {
                var iPIC = nIRQ >> 3;
                var nIRL = nIRQ & 0x7;
                var pic = this.aPICs[iPIC];
                return (pic.bIMR & (0x1 << nIRL))? true : false;
            };
            
            /**
             * setIRR(nIRQ, nDelay)
             *
             * @this {ChipSet}
             * @param {number} nIRQ (IRQ 0-7 implies iPIC 0, and IRQ 8-15 implies iPIC 1)
             * @param {number} [nDelay] is an optional number of instructions to delay acknowledgment of the IRQ (see getIRRVector)
             */
            ChipSet.prototype.setIRR = function(nIRQ, nDelay)
            {
                var iPIC = nIRQ >> 3;
                var nIRL = nIRQ & 0x7;
                var pic = this.aPICs[iPIC];
                var bIRR = (1 << nIRL);
                if (!(pic.bIRR & bIRR)) {
                    pic.bIRR |= bIRR;
                    if (DEBUG && this.messageEnabled(this.messageBitsIRQ(nIRQ) | Messages.CHIPSET)) {
                        this.printMessage("setIRR(" + nIRQ + ")", true);
                    }
                    pic.nDelay = nDelay || 0;
                    this.checkIRR();
                }
            };
            
            /**
             * clearIRR(nIRQ)
             *
             * @this {ChipSet}
             * @param {number} nIRQ (IRQ 0-7 implies iPIC 0, and IRQ 8-15 implies iPIC 1)
             */
            ChipSet.prototype.clearIRR = function(nIRQ)
            {
                var iPIC = nIRQ >> 3;
                var nIRL = nIRQ & 0x7;
                var pic = this.aPICs[iPIC];
                var bIRR = (1 << nIRL);
                if (pic.bIRR & bIRR) {
                    pic.bIRR &= ~bIRR;
                    if (DEBUG && this.messageEnabled(this.messageBitsIRQ(nIRQ) | Messages.CHIPSET)) {
                        this.printMessage("clearIRR(" + nIRQ + ")", true);
                    }
                    this.checkIRR();
                }
            };
            
            /**
             * checkIRR(nDelay)
             *
             * @this {ChipSet}
             * @param {number} [nDelay] is an optional number of instructions to delay acknowledgment of a pending interrupt
             */
            ChipSet.prototype.checkIRR = function(nDelay)
            {
                /*
                 * Look for any IRR bits that aren't masked and aren't already in service; in theory, all we'd have to
                 * check is the master PIC (which is the *only* PIC on pre-5170 models), because when any IRQs are set or
                 * cleared on the slave, that would automatically be reflected in IRQ.SLAVE on the master; that's what
                 * setIRR() and clearIRR() used to do.
                 *
                 * Unfortunately, despite setIRR() and clearIRR()'s efforts, whenever a slave interrupt is acknowledged,
                 * getIRRVector() ends up clearing the IRR bits for BOTH the slave's IRQ and the master's IRQ.SLAVE.
                 * So if another lower-priority slave IRQ is waiting to be dispatched, that fact is no longer reflected
                 * in IRQ.SLAVE.
                 *
                 * Since checkIRR() is called on every EOI, we can resolve that problem here, by first checking the slave
                 * PIC for any unmasked, unserviced interrupts and updating the master's IRQ.SLAVE.
                 *
                 * And since this is ALSO called by both setIRR() and clearIRR(), those functions no longer need to perform
                 * their own IRQ.SLAVE updates.  This function consolidates the propagation of slave interrupts to the master.
                 */
                var pic;
                var bIR = -1;
            
                if (this.cPICs > 1) {
                    pic = this.aPICs[1];
                    bIR = ~(pic.bISR | pic.bIMR) & pic.bIRR;
                }
            
                pic = this.aPICs[0];
            
                if (bIR >= 0) {
                    if (bIR) {
                        pic.bIRR |= (1 << ChipSet.IRQ.SLAVE);
                    } else {
                        pic.bIRR &= ~(1 << ChipSet.IRQ.SLAVE);
                    }
                }
            
                bIR = ~(pic.bISR | pic.bIMR) & pic.bIRR;
            
                this.cpu.updateINTR(!!bIR);
            
                if (bIR && nDelay) pic.nDelay = nDelay;
            };
            
            /**
             * getIRRVector()
             *
             * getIRRVector() is called by the CPU whenever PS_IF is set and OP_NOINTR is clear.  Ordinarily, an immediate
             * response would seem perfectly reasonable, but unfortunately, there are places in the original ROM BIOS like
             * "KBD_RESET" (F000:E688) that enable interrupts but still expect nothing to happen for several more instructions.
             *
             * So, in addition to the two normal responses (an IDT vector #, or -1 indicating no pending interrupts), we must
             * support a third response (-2) that basically means: don't change the CPU interrupt state, just keep calling until
             * we return one of the first two responses.  The number of times we delay our normal response is determined by the
             * component that originally called setIRR with an optional delay parameter.
             *
             * @this {ChipSet}
             * @param {number} [iPIC]
             * @return {number} IDT vector # of the next highest-priority interrupt, -1 if none, or -2 for "please try your call again later"
             */
            ChipSet.prototype.getIRRVector = function(iPIC)
            {
                if (iPIC === undefined) iPIC = 0;
            
                /*
                 * Look for any IRR bits that aren't masked and aren't already in service...
                 */
                var nIDT = -1;
                var pic = this.aPICs[iPIC];
                if (!pic.nDelay) {
                    var bIR = pic.bIRR & ((pic.bISR | pic.bIMR) ^ 0xff);
                    /*
                     * The search for the next highest priority requested interrupt (that's also not in-service and not masked)
                     * must start with whichever interrupt is opposite the lowest priority interrupt (normally 7, but technically
                     * whatever bIRLow is currently set to).  For example:
                     *
                     *      If bIRLow is 7, then the priority order is: 0, 1, 2, 3, 4, 5, 6, 7.
                     *      If bIRLow is 6, then the priority order is: 7, 0, 1, 2, 3, 4, 5, 6.
                     *      If bIRLow is 5, then the priority order is: 6, 7, 0, 1, 2, 3, 4, 5.
                     *      etc.
                     *
                     * This process is similar to the search performed by non-specific EOIs, except those apply only to a single
                     * PIC (which is why a slave interrupt must be EOI'ed twice: once for the slave PIC and again for the master),
                     * whereas here we must search across all PICs.
                     */
                    var nIRL = pic.bIRLow + 1;
                    while (true) {
                        nIRL &= 0x7;
            
                        var bIRNext = 1 << nIRL;
                        if (bIR & bIRNext) {
            
                            if (!iPIC && nIRL == ChipSet.IRQ.SLAVE) {
                                /*
                                 * Slave interrupts are tied to the master PIC on IRQ2; query the slave PIC for the vector #
                                 */
                                nIDT = this.getIRRVector(1);
                            } else {
                                /*
                                 * Get the starting IDT vector # from ICW2 and add the IR level to obtain the target IDT vector #
                                 */
                                nIDT = pic.aICW[1] + nIRL;
                            }
            
                            if (nIDT >= 0) {
                                pic.bISR |= bIRNext;
            
                                /*
                                 * Setting the ISR implies clearing the IRR, but clearIRR() has side-effects we don't want
                                 * (eg, clearing the slave IRQ, notifying the CPU, etc), so we clear the IRR ourselves.
                                 */
                                pic.bIRR &= ~bIRNext;
            
                                var nIRQ = pic.nIRQBase + nIRL;
                                if (DEBUG && this.messageEnabled(this.messageBitsIRQ(nIRQ))) {
                                    this.printMessage("getIRRVector(): IRQ " + nIRQ + " interrupting @" + this.dbg.hexOffset(this.cpu.getIP(), this.cpu.getCS()) + " stack=" + this.dbg.hexOffset(this.cpu.getSP(), this.cpu.getSS()), true);
                                }
                                if (MAXDEBUG && DEBUGGER) {
                                    this.acInterrupts[nIRQ]++;
                                }
                            }
                            break;
                        }
            
                        if (nIRL++ == pic.bIRLow) break;
                    }
                } else {
                    nIDT = -2;
                    pic.nDelay--;
                }
                return nIDT;
            };
            
            /**
             * inTimer(iTimer, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @param {number} port (0x40, 0x41, 0x42, etc)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inTimer = function(iTimer, port, addrFrom)
            {
                var b;
                var timer = this.aTimers[iTimer];
                if (timer.countIndex == timer.countBytes) this.resetTimerIndex(iTimer);
                if (timer.fLatched) {
                    return timer.countLatched[timer.countIndex++];
                }
                this.updateTimer(iTimer);
                b = timer.countCurrent[timer.countIndex++];
                if (this.messageEnabled(Messages.TIMER | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "TIMER" + iTimer, b, true);
                }
                return b;
            };
            
            /**
             * outTimer(iTimer, port, bOut, addrFrom)
             *
             * We now rely EXCLUSIVELY on setBurstCycles() to address situations where quick timer interrupt turn-around
             * is expected; eg, by the ROM BIOS POST when it sets TIMER0 to a low test count (0x16); since we typically
             * don't update any of the timers until after we've finished a burst of CPU cycles, we must reduce the current
             * burst cycle count, so that the current instruction burst will end at the same time a timer interrupt is expected.
             *
             * Note that in some cases, if the number of cycles remaining in the current burst is less than the target,
             * this may have the effect of *lengthening* the current burst instead of shortening it, but stepCPU() should be
             * OK with that.
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @param {number} port (0x40, 0x41, 0x42, etc)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outTimer = function(iTimer, port, bOut, addrFrom)
            {
                if (this.messageEnabled(Messages.TIMER | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "TIMER" + iTimer, null, true);
                }
                var timer = this.aTimers[iTimer];
                if (timer.countIndex == timer.countBytes) this.resetTimerIndex(iTimer);
                timer.countInit[timer.countIndex++] = bOut;
                if (timer.countIndex == timer.countBytes) {
                    /*
                     * In general, writing a new count to a timer that's already counting isn't supposed to affect the current
                     * count, with the notable exceptions of MODE0 and MODE4.
                     */
                    if (!timer.fCounting || timer.mode == ChipSet.PIT_CTRL.MODE0 || timer.mode == ChipSet.PIT_CTRL.MODE4) {
                        timer.fLatched = false;
                        timer.countCurrent[0] = timer.countStart[0] = timer.countInit[0];
                        timer.countCurrent[1] = timer.countStart[1] = timer.countInit[1];
                        timer.nCyclesStart = this.cpu.getCycles(this.fScaleTimers);
                        timer.fCounting = true;
            
                        /*
                         * I believe MODE0 is the only mode where "OUT" (fOUT) starts out "low" (false); for the rest of the modes,
                         * "OUT" (fOUT) starts "high" (true).  It's also my understanding that the way edge-triggered interrupts work
                         * on the original PC is that an interrupt is requested only when the corresponding "OUT" transitions from
                         * "low" to "high".
                         */
                        timer.fOUT = (timer.mode != ChipSet.PIT_CTRL.MODE0);
            
                        if (iTimer == ChipSet.PIT0.TIMER0) {
                            /*
                             * TODO: Determine if there are situations/modes where I should NOT automatically clear IRQ0 on behalf of TIMER0.
                             */
                            this.clearIRR(ChipSet.IRQ.TIMER0);
                            var countInit = this.getTimerInit(ChipSet.PIT0.TIMER0);
                            var nCyclesRemain = (countInit * this.nTicksDivisor) | 0;
                            if (timer.mode == ChipSet.PIT_CTRL.MODE3) nCyclesRemain >>= 1;
                            this.cpu.setBurstCycles(nCyclesRemain);
                        }
                    }
            
                    if (iTimer == ChipSet.PIT0.TIMER2) this.setSpeaker();
                }
            };
            
            /**
             * inPIT1Ctrl(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x43)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number|null} simulated port value
             */
            ChipSet.prototype.inPIT1Ctrl = function(port, addrFrom)
            {
                this.printMessageIO(port, null, addrFrom, "PIT1_CTRL", null, Messages.TIMER);
                if (DEBUG) this.printMessage("PIT1_CTRL: Read-Back command not supported (yet)", Messages.TIMER);
                return null;
            };
            
            /**
             * outPIT1Ctrl(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x43)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outPIT1Ctrl = function(port, bOut, addrFrom)
            {
                this.bPIT1Ctrl = bOut;
                this.printMessageIO(port, bOut, addrFrom, "PIT1_CTRL", null, Messages.TIMER);
                /*
                 * Extract the SC (Select Counter) bits
                 */
                var iTimer = (bOut & ChipSet.PIT_CTRL.SC) >> 6;
                if (iTimer == 0x3) {
                    if (DEBUG) this.printMessage("PIT1_CTRL: Read-Back command not supported (yet)", Messages.TIMER);
                    return;
                }
                /*
                 * Extract the BCD, MODE, and RW bits, which we simply store as-is (see setTimerMode)
                 */
                var bcd = (bOut & ChipSet.PIT_CTRL.BCD);
                var mode = (bOut & ChipSet.PIT_CTRL.MODE);
                var rw = (bOut & ChipSet.PIT_CTRL.RW);
                if (!rw) {
                    this.latchTimer(iTimer);
                } else {
                    this.setTimerMode(iTimer, bcd, mode, rw);
            
                    /*
                     * The 5150 ROM BIOS code @F000:E285 ("TEST.7") would fail after a warm boot (eg, after a CTRL-ALT-DEL) because
                     * it assumed that no TIMER0 interrupt would occur between the point it unmasked the TIMER0 interrupt and the
                     * point it started reprogramming TIMER0.
                     *
                     * Similarly, the 5160 ROM BIOS @F000:E35D ("8253 TIMER CHECKOUT") would fail after initializing the EGA BIOS,
                     * because the EGA BIOS uses TIMER0 during its diagnostics; as in the previous example, by the time the 8253
                     * test code runs later, there's now a pending TIMER0 interrupt, which triggers an interrupt as soon as IRQ0 is
                     * unmasked @F000:E364.
                     *
                     * After looking at this problem at bit more closely the second time around (while debugging the EGA BIOS),
                     * it turns out I missed an important 8253 feature: whenever a new MODE0 control word OR a new MODE0 count
                     * is written, fOUT (which is what drives IRQ0) goes low.  So, by simply adding an appropriate clearIRR() call
                     * both here and in outTimer(), this annoying problem seems to be gone.
                     *
                     * TODO: Determine if there are situations/modes where I should NOT automatically clear IRQ0 on behalf of TIMER0.
                     */
                    if (iTimer == ChipSet.PIT0.TIMER0) this.clearIRR(ChipSet.IRQ.TIMER0);
            
                    /*
                     * Another TIMER0 HACK: The "CASSETTE DATA WRAP TEST" @F000:E51E occasionally reports an error when the second of
                     * two TIMER0 counts it latches is greater than the first.  You would think the ROM BIOS would expect this, since
                     * TIMER0 can reload its count at any time.  Is the ROM BIOS assuming that TIMER0 was initialized sufficiently
                     * recently that this should never happen?  I'm not sure, but for now, let's try resetting TIMER0's count immediately
                     * after TIMER2 has been reprogrammed for the test in question (ie, when interrupts are masked and PPIB is set as
                     * shown below).
                     *
                     * FWIW, I believe the cassette hardware was discontinued after MODEL_5150, and even if the test fails, it's non-fatal;
                     * the ROM BIOS displays an error (131) and moves on.
                     */
                    if (iTimer == ChipSet.PIT0.TIMER2) {
                        var pic = this.aPICs[0];
                        if (pic.bIMR == 0xff && this.bPPIB == (ChipSet.PPI_B.CLK_TIMER2 | ChipSet.PPI_B.ENABLE_SW2 | ChipSet.PPI_B.CASS_MOTOR_OFF | ChipSet.PPI_B.CLK_KBD)) {
                            var timer = this.aTimers[0];
                            timer.countStart[0] = timer.countInit[0];
                            timer.countStart[1] = timer.countInit[1];
                            timer.nCyclesStart = this.cpu.getCycles(this.fScaleTimers);
                            if (DEBUG && this.messageEnabled(Messages.TIMER)) {
                                this.printMessage("TIMER0 count reset @" + timer.nCyclesStart + " cycles", true);
                            }
                        }
                    }
                }
            };
            
            /**
             * getTimerInit(iTimer)
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @return {number} initial timer count
             */
            ChipSet.prototype.getTimerInit = function(iTimer)
            {
                var timer = this.aTimers[iTimer];
                var countInit = (timer.countInit[1] << 8) | timer.countInit[0];
                if (!countInit) countInit = (timer.countBytes == 1? 0x100 : 0x10000);
                return countInit;
            };
            
            /**
             * getTimerStart(iTimer)
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @return {number} starting timer count (from the initial timer count for the current countdown)
             */
            ChipSet.prototype.getTimerStart = function(iTimer)
            {
                var timer = this.aTimers[iTimer];
                var countStart = (timer.countStart[1] << 8) | timer.countStart[0];
                if (!countStart) countStart = (timer.countBytes == 1? 0x100 : 0x10000);
                return countStart;
            };
            
            /**
             * getTimerCycleLimit(iTimer, nCycles)
             *
             * This is called by the CPU to determine the maximum number of cycles it can process for the current burst.
             * It's presumed that no instructions have been executed since the last updateTimer(iTimer) call.
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @param {number} nCycles desired
             * @return {number} maximum number of cycles remaining for the specified timer (<= nCycles)
             */
            ChipSet.prototype.getTimerCycleLimit = function(iTimer, nCycles)
            {
                var timer = this.aTimers[iTimer];
                if (timer.fCounting) {
                    var nCyclesUpdate = this.cpu.getCycles(this.fScaleTimers);
                    var ticksElapsed = ((nCyclesUpdate - timer.nCyclesStart) / this.nTicksDivisor) | 0;
                    this.assert(ticksElapsed >= 0);
                    var countStart = this.getTimerStart(iTimer);
                    var count = countStart - ticksElapsed;
                    if (timer.mode == ChipSet.PIT_CTRL.MODE3) count -= ticksElapsed;
                    this.assert(count > 0);
                    var nCyclesRemain = (count * this.nTicksDivisor) | 0;
                    if (timer.mode == ChipSet.PIT_CTRL.MODE3) nCyclesRemain >>= 1;
                    if (nCycles > nCyclesRemain) nCycles = nCyclesRemain;
                }
                return nCycles;
            };
            
            /**
             * latchTimer(iTimer)
             *
             * @this {ChipSet}
             * @param {number} iTimer
             */
            ChipSet.prototype.latchTimer = function(iTimer)
            {
                /*
                 * Update the timer's current count
                 */
                this.updateTimer(iTimer);
            
                /*
                 * Now we can latch it
                 */
                var timer = this.aTimers[iTimer];
                timer.countLatched[0] = timer.countCurrent[0];
                timer.countLatched[1] = timer.countCurrent[1];
                timer.fLatched = true;
            
                /*
                 * VERIFY: That a latch request resets the timer index
                 */
                this.resetTimerIndex(iTimer);
            };
            
            /**
             * setTimerMode(iTimer, bcd, mode, rw)
             *
             * FYI: After setting a timer's mode, the CPU must set the timer's count before it becomes operational;
             * ie, before fCounting becomes true.
             *
             * @this {ChipSet}
             * @param {number} iTimer
             * @param {number} bcd
             * @param {number} mode
             * @param {number} rw
             */
            ChipSet.prototype.setTimerMode = function(iTimer, bcd, mode, rw)
            {
                var timer = this.aTimers[iTimer];
                timer.rw = rw;
                timer.mode = mode;
                timer.bcd = bcd;
                timer.countInit = [0, 0];
                timer.countCurrent = [0, 0];
                timer.countLatched = [0, 0];
                timer.fOUT = false;
                timer.fLatched = false;
                timer.fCounting = false;
                this.resetTimerIndex(iTimer);
            };
            
            /**
             * resetTimerIndex(iTimer)
             *
             * @this {ChipSet}
             * @param {number} iTimer
             */
            ChipSet.prototype.resetTimerIndex = function(iTimer)
            {
                var timer = this.aTimers[iTimer];
                timer.countIndex = (timer.rw == ChipSet.PIT_CTRL.RW_MSB? 1 : 0);
                timer.countBytes = (timer.rw == ChipSet.PIT_CTRL.RW_BOTH? 2 : 1);
            };
            
            /**
             * updateTimer(iTimer, fCycleReset)
             *
             * updateTimer() calculates and updates a timer's current count purely on an "on-demand" basis; we don't
             * actually adjust timer counters every 4 CPU cycles on a 4.77Mhz PC, since updating timers that frequently
             * would be prohibitively slow.  If you're single-stepping the CPU, then yes, updateTimer() will be called
             * after every stepCPU(), via updateAllTimers(), but if we're doing our job correctly here, the frequency
             * of calls to updateTimer() should not affect timer counts across otherwise identical runs.
             *
             * TODO: Implement support for all TIMER modes, and verify that all the modes currently implemented are
             * "up to spec"; they're close enough to make the ROM BIOS happy, but beyond that, I've done very little.
             *
             * @this {ChipSet}
             * @param {number} iTimer
             *      0: Time-of-Day interrupt (~18.2 interrupts/second)
             *      1: DMA refresh
             *      2: Sound/Cassette
             * @param {boolean} [fCycleReset] is true if a cycle-count reset is about to occur
             * @return {Object} timer
             */
            ChipSet.prototype.updateTimer = function(iTimer, fCycleReset)
            {
                var timer = this.aTimers[iTimer];
            
                /*
                 * Every timer's counting state is gated by its own fCounting flag; TIMER2 is further gated by PPI_B's
                 * CLK_TIMER2 bit.
                 */
                if (timer.fCounting && (iTimer != ChipSet.PIT0.TIMER2 || (this.bPPIB & ChipSet.PPI_B.CLK_TIMER2))) {
                    /*
                     * We determine the current timer count based on how many instruction cycles have elapsed since we started
                     * the timer.  Timers are supposed to be "ticking" at a rate of 1193181.8181 times per second, which is
                     * the system clock of 14.31818Mhz, divided by 12.
                     *
                     * Similarly, for an 8088, there are supposed to be 4.77Mhz instruction cycles per second, which comes from
                     * the system clock of 14.31818Mhz, divided by 3.
                     *
                     * If we divide 4,772,727 CPU cycles per second by 1,193,181 ticks per second, we get 4 cycles per tick,
                     * which agrees with the ratio of the clock divisors: 12 / 3 == 4.
                     *
                     * However, if getCycles() is being called with fScaleTimers == true AND the CPU is running faster than its
                     * base cycles-per-second setting, then getCycles() will divide the cycle count by the CPU's cycle multiplier,
                     * so that the timers fire with the same real-world frequency that the user expects.  However, that will
                     * break any code (eg, the ROM BIOS diagnostics) that assumes that the timers are ticking once every 4 cycles
                     * (or more like every 5 cycles on a 6Mhz 80286).
                     *
                     * So, when using a machine with the ChipSet "scaletimers" property set, make sure you reset the machine's
                     * speed prior to rebooting, otherwise you're likely to see ROM BIOS errors.  Ditto for any application code
                     * that makes similar assumptions about the relationship between CPU and timer speeds.
                     *
                     * In general, you're probably better off NOT using the "scaletimers" property, and simply allowing the timers
                     * to tick faster as you increase CPU speed (which is why fScaleTimers defaults to false).
                     */
                    var nCycles = this.cpu.getCycles(this.fScaleTimers);
            
                    /*
                     * Instead of maintaining partial tick counts, we calculate a fresh countCurrent from countStart every
                     * time we're called, using the cycle count recorded when the timer was initialized.  countStart is set
                     * to countInit when fCounting is first set, and then it is refreshed from countInit at the expiration of
                     * every count, so that if someone loaded a new countInit in the meantime (eg, BASICA), we'll pick it up.
                     *
                     * For the original MODEL_5170, the number of cycles per tick is approximately 6,000,000 / 1,193,181,
                     * or 5.028575, so we can no longer always divide cycles by 4 with a simple right-shift by 2.  The proper
                     * divisor (eg, 4 for MODEL_5150 and MODEL_5160, 5 for MODEL_5170, etc) is nTicksDivisor, which initBus()
                     * calculates using the base CPU speed returned by cpu.getCyclesPerSecond().
                     */
                    var ticksElapsed = ((nCycles - timer.nCyclesStart) / this.nTicksDivisor) | 0;
            
                    if (ticksElapsed < 0) {
                        if (DEBUG && this.messageEnabled(Messages.TIMER)) {
                            this.printMessage("updateTimer(" + iTimer + "): negative tick count (" + ticksElapsed + ")", true);
                        }
                        timer.nCyclesStart = nCycles;
                        ticksElapsed = 0;
                    }
            
                    var countInit = this.getTimerInit(iTimer);
                    var countStart = this.getTimerStart(iTimer);
            
                    var fFired = false;
                    var count = countStart - ticksElapsed;
            
                    /*
                     * NOTE: This mode is used by ROM BIOS test code that wants to verify timer interrupts are arriving
                     * neither too slowly nor too quickly.  As a result, I've had to add some corresponding trickery
                     * in outTimer() to force interrupt simulation immediately after a low initial count (0x16) has been set.
                     */
                    if (timer.mode == ChipSet.PIT_CTRL.MODE0) {
                        if (count <= 0) count = 0;
                        if (DEBUG && this.messageEnabled(Messages.TIMER)) {
                            this.printMessage("updateTimer(" + iTimer + "): MODE0 timer count=" + count, true);
                        }
                        if (!count) {
                            timer.fOUT = true;
                            timer.fCounting = false;
                            if (!iTimer) {
                                fFired = true;
                                this.setIRR(ChipSet.IRQ.TIMER0);
                                if (MAXDEBUG && DEBUGGER) this.acTimersFired[iTimer]++;
                            }
                        }
                    }
                    /*
                     * Early implementation of this mode was minimal because when using this mode, the ROM BIOS simply wanted
                     * to see the count changing; it wasn't looking for interrupts.  See ROM BIOS "TEST.03" code @F000:E0DE,
                     * where TIMER1 is programmed for MODE2, LSB (the same settings, incidentally, used immediately afterward
                     * for TIMER1 in conjunction with DMA channel 0 memory refreshes).
                     *
                     * Now this mode generates interrupts.  Note that "OUT" goes "low" when the count reaches 1, then "high"
                     * one tick later, at which point the count is reloaded and counting continues.
                     *
                     * Chances are, we will often miss the exact point at which the count becomes 1 (or more importantly, one
                     * tick later, when the count *would* become 0, since that's when "OUT" transitions from "low" to "high"),
                     * but as with MODE3, hopefully no one will mind.
                     *
                     * FYI, technically, it appears that the count is never supposed to reach 0, and that an initial count of 1
                     * is "illegal", whatever that means.
                     */
                    else if (timer.mode == ChipSet.PIT_CTRL.MODE2) {
                        timer.fOUT = (count != 1);          // yes, this line does seem rather pointless....
                        if (count <= 0) {
                            count = countInit + count;
                            if (count <= 0) {
                                /*
                                 * TODO: Consider whether we ever care about TIMER1 or TIMER2 underflow
                                 */
                                if (DEBUG && this.messageEnabled(Messages.TIMER) && !iTimer) {
                                    this.printMessage("updateTimer(" + iTimer + "): mode=2, underflow=" + count, true);
                                }
                                count = countInit;
                            }
                            timer.countStart[0] = count & 0xff;
                            timer.countStart[1] = count >> 8;
                            timer.nCyclesStart = nCycles;
                            if (!iTimer && timer.fOUT) {
                                fFired = true;
                                this.setIRR(ChipSet.IRQ.TIMER0);
                                if (MAXDEBUG && DEBUGGER) this.acTimersFired[iTimer]++;
                            }
                        }
                    }
                    /*
                     * NOTE: This is the normal mode for TIMER0, which the ROM BIOS uses to generate h/w interrupts roughly
                     * 18.2 times per second.  In this mode, the count must be decremented twice as fast (hence the extra ticks
                     * subtraction below, in addition to the subtraction above), but IRQ_TIMER0 is raised only on alternate
                     * iterations; ie, only when fOUT transitions to true ("high").  The equal alternating fOUT states is why
                     * this mode is referred to as "square wave" mode.
                     *
                     * TODO: Implement the correct behavior for this mode when the count is ODD.  In that case, fOUT is supposed
                     * to be "high" for (N + 1) / 2 ticks and "low" for (N - 1) / 2 ticks.
                     */
                    else if (timer.mode == ChipSet.PIT_CTRL.MODE3) {
                        count -= ticksElapsed;
                        if (count <= 0) {
                            timer.fOUT = !timer.fOUT;
                            count = countInit + count;
                            if (count <= 0) {
                                /*
                                 * TODO: Consider whether we ever care about TIMER1 or TIMER2 underflow
                                 */
                                if (DEBUG && this.messageEnabled(Messages.TIMER) && !iTimer) {
                                    this.printMessage("updateTimer(" + iTimer + "): mode=3, underflow=" + count, true);
                                }
                                count = countInit;
                            }
                            if (MAXDEBUG && DEBUGGER && !iTimer) {
                                var nCycleDelta = 0;
                                if (this.acTimer0Counts.length > 0) nCycleDelta = nCycles - this.acTimer0Counts[0][1];
                                this.acTimer0Counts.push([count, nCycles, nCycleDelta]);
                            }
                            timer.countStart[0] = count & 0xff;
                            timer.countStart[1] = count >> 8;
                            timer.nCyclesStart = nCycles;
                            if (!iTimer && timer.fOUT) {
                                fFired = true;
                                this.setIRR(ChipSet.IRQ.TIMER0);
                                if (MAXDEBUG && DEBUGGER) this.acTimersFired[iTimer]++;
                            }
                        }
                    }
            
                    if (DEBUG && this.messageEnabled(Messages.TIMER | Messages.LOG)) {
                        this.log("TIMER" + iTimer + " count: " + count + ", ticks: " + ticksElapsed + ", fired: " + (fFired? "true" : "false"));
                    }
            
                    timer.countCurrent[0] = count & 0xff;
                    timer.countCurrent[1] = count >> 8;
                    if (fCycleReset) this.nCyclesStart = 0;
                }
                return timer;
            };
            
            /**
             * updateAllTimers(fCycleReset)
             *
             * @this {ChipSet}
             * @param {boolean} [fCycleReset] is true if a cycle-count reset is about to occur
             */
            ChipSet.prototype.updateAllTimers = function(fCycleReset)
            {
                for (var iTimer = 0; iTimer < this.aTimers.length; iTimer++) {
                    this.updateTimer(iTimer, fCycleReset);
                }
                if (this.model >= ChipSet.MODEL_5170) this.updateRTCTime();
            };
            
            /**
             * inPPIA(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x60)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inPPIA = function(port, addrFrom)
            {
                var b = this.bPPIA;
                if (this.bPPICtrl & ChipSet.PPI_CTRL.A_IN) {
                    if (this.bPPIB & ChipSet.PPI_B.CLEAR_KBD) {
                        b = this.sw1;
                    }
                    else if (this.kbd) {
                        b = this.kbd.readScanCode();
                    }
                }
                this.printMessageIO(port, null, addrFrom, "PPI_A", b);
                return b;
            };
            
            /**
             * outPPIA(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x60)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outPPIA = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "PPI_A");
                this.bPPIA = bOut;
            };
            
            /**
             * inPPIB(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x61)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inPPIB = function(port, addrFrom)
            {
                var b = this.bPPIB;
                this.printMessageIO(port, null, addrFrom, "PPI_B", b);
                return b;
            };
            
            /**
             * outPPIB(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x61)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outPPIB = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "PPI_B");
                this.updatePPIB(bOut);
                if (this.kbd) this.kbd.setEnabled((bOut & ChipSet.PPI_B.CLEAR_KBD)? false : true, (bOut & ChipSet.PPI_B.CLK_KBD)? true : false);
            };
            
            /**
             * updatePPIB(bOut)
             *
             * On MODEL_5170 and up, this updates the "simulated" PPI_B.  The only common (and well-documented) PPI_B bits
             * across all models are PPI_B.CLK_TIMER2 and PPI_B.SPK_TIMER2, so its possible that this function may need to
             * limit its updates to just those bits, and move any model-specific requirements back into the appropriate I/O
             * handlers (PPIB or 8042RWReg).  We'll see.
             *
             * @this {ChipSet}
             * @param {number} bOut
             */
            ChipSet.prototype.updatePPIB = function(bOut)
            {
                var fNewSpeaker = !!(bOut & ChipSet.PPI_B.SPK_TIMER2);
                var fOldSpeaker = !!(this.bPPIB & ChipSet.PPI_B.SPK_TIMER2);
                this.bPPIB = bOut;
                if (fNewSpeaker != fOldSpeaker) {
                    /*
                     * Originally, this code didn't catch the "ERROR_BEEP" case @F000:EC34, which first turns both PPI_B.CLK_TIMER2 (0x01)
                     * and PPI_B.SPK_TIMER2 (0x02) off, then turns on only PPI_B.SPK_TIMER2 (0x02), then restores the original port value.
                     *
                     * So, when the ROM BIOS keyboard buffer got full, we didn't issue a BEEP alert.  I've fixed that by limiting the test
                     * to PPI_B.SPK_TIMER2 and ignoring PPI_B.CLK_TIMER2.
                     */
                    this.setSpeaker(fNewSpeaker);
                }
            };
            
            /**
             * inPPIC(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x62)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inPPIC = function(port, addrFrom)
            {
                var b = 0;
            
                /*
                 * If you ever wanted to simulate I/O channel errors or R/W memory parity errors, you could
                 * add either PPI_C.IO_CHANNEL_CHK (0x40) or PPI_C.RW_PARITY_CHK (0x80) to the return value (b).
                 */
                if (this.model == ChipSet.MODEL_5150) {
                    if (this.bPPIB & ChipSet.PPI_B.ENABLE_SW2) {
                        b |= this.sw2 & ChipSet.PPI_C.SW;
                    } else {
                        b |= (this.sw2 >> 4) & 0x1;     // QUESTION: Does any component actually care about SW2[5] on a MODEL_5150?
                    }
                } else {
                    if (this.bPPIB & ChipSet.PPI_B.ENABLE_SW_HI) {
                        b |= this.sw1 >> 4;
                    } else {
                        b |= this.sw1 & 0xf;
                    }
                }
            
                if (this.bPPIB & ChipSet.PPI_B.CLK_TIMER2) {
                    var timer = this.updateTimer(ChipSet.PIT0.TIMER2);
                    if (timer.fOUT) {
                        if (this.bPPIB & ChipSet.PPI_B.SPK_TIMER2)
                            b |= ChipSet.PPI_C.TIMER2_OUT;
                        else
                            b |= ChipSet.PPI_C.CASS_DATA_IN;
                    }
                }
            
                /*
                 * The ROM BIOS polls this port incessantly during its memory tests, checking for memory parity errors
                 * (which of course we never report), so we further restrict these port messages to Messages.MEM.
                 */
                this.printMessageIO(port, null, addrFrom, "PPI_C", b, Messages.CHIPSET | Messages.MEM);
                return b;
            };
            
            /**
             * outPPIC(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x62)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.outPPIC = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "PPI_C");
                this.bPPIC = bOut;
            };
            
            /**
             * inPPICtrl(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x63)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inPPICtrl = function(port, addrFrom)
            {
                var b = this.bPPICtrl;
                this.printMessageIO(port, null, addrFrom, "PPI_CTRL", b);
                return b;
            };
            
            /**
             * outPPICtrl(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x63)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.outPPICtrl = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "PPI_CTRL");
                this.bPPICtrl = bOut;
            };
            
            /**
             * in8042OutBuff(port, addrFrom)
             *
             * Return the contents of the OUTBUFF register and clear the OUTBUFF_FULL status bit.
             *
             * This function then calls kbd.checkScanCode(), on the theory that the next buffered scan
             * code, if any, can now be delivered to OUTBUFF.  However, there are applications like
             * BASICA that install a keyboard interrupt handler that reads OUTBUFF, do some scan code
             * preprocessing, and then pass control on to the ROM's interrupt handler.  As a result,
             * OUTBUFF is read multiple times during a single interrupt, so filling it with new data
             * after every read would result in lost scan codes.
             *
             * To avoid that problem, kbd.checkScanCode() also requires that kbd.setEnabled() be called
             * before it supplies any more data via notifyKbdData().  That will happen as soon as the
             * ROM re-enables the controller, and is why KBC.CMD.ENABLE_KBD processing also ends with a
             * call to kbd.checkScanCode().
             *
             * Note that, the foregoing notwithstanding, I still clear the OUTBUFF_FULL bit here (as I
             * believe I should); fortunately, none of the interrupt handlers rely on OUTBUFF_FULL as a
             * prerequisite for reading OUTBUFF (not the BASICA handler, and not the ROM).  The assumption
             * seems to be that if an interrupt occurred, OUTBUFF must contain data, regardless of the
             * state of OUTBUFF_FULL.
             *
             * @this {ChipSet}
             * @param {number} port (0x60)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.in8042OutBuff = function(port, addrFrom)
            {
                var b = this.b8042OutBuff;
                this.printMessageIO(port, null, addrFrom, "8042_OUTBUFF", b, Messages.C8042);
                this.b8042Status &= ~(ChipSet.KBC.STATUS.OUTBUFF_FULL | ChipSet.KBC.STATUS.OUTBUFF_DELAY);
                if (this.kbd) this.kbd.checkScanCode();
                return b;
            };
            
            /**
             * out8042InBuffData(port, bOut, addrFrom)
             *
             * This writes to the 8042's input buffer; using this port (ie, 0x60 instead of 0x64) designates the
             * the byte as a KBC.DATA.CMD "data byte".  Before clearing KBC.STATUS.CMD_FLAG, however, we see if it's set,
             * and then based on the previous KBC.CMD "command byte", we do whatever needs to be done with this "data byte".
             *
             * @this {ChipSet}
             * @param {number} port (0x60)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.out8042InBuffData = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "8042_INBUF.DATA", null, Messages.C8042);
            
                if (this.b8042Status & ChipSet.KBC.STATUS.CMD_FLAG) {
                    switch (this.b8042InBuff) {
            
                    case ChipSet.KBC.CMD.WRITE_CMD:
                        this.set8042CmdData(bOut);
                        break;
            
                    case ChipSet.KBC.CMD.WRITE_OUTPORT:
                        this.set8042OutPort(bOut);
                        break;
            
                    /*
                     * This case is reserved for command bytes that the 8042 is not expecting, which should therefore be passed on
                     * to the Keyboard itself.
                     *
                     * Here's some relevant MODEL_5170 ROM BIOS code, "XMIT_8042" (missing from the original MODEL_5170 ROM BIOS listing),
                     * which sends a command code in AL to the Keyboard and waits for a response, returning it in AL.  Note that
                     * the only "success" exit path from this function involves LOOPing 64K times before finally reading the Keyboard's
                     * response; either the hardware and/or this code seems a bit brain-damaged if that's REALLY what you had to do to ensure
                     * a valid response....
                     *
                     *      F000:1B25 86E0          XCHG     AH,AL
                     *      F000:1B27 2BC9          SUB      CX,CX
                     *      F000:1B29 E464          IN       AL,64
                     *      F000:1B2B A802          TEST     AL,02      ; WAIT FOR INBUFF_FULL TO BE CLEAR
                     *      F000:1B2D E0FA          LOOPNZ   1B29
                     *      F000:1B2F E334          JCXZ     1B65       ; EXIT WITH ERROR (CX == 0)
                     *      F000:1B31 86E0          XCHG     AH,AL
                     *      F000:1B33 E660          OUT      60,AL      ; SAFE TO WRITE KEYBOARD CMD TO INBUFF NOW
                     *      F000:1B35 2BC9          SUB      CX,CX
                     *      F000:1B37 E464          IN       AL,64
                     *      F000:1B39 8AE0          MOV      AH,AL
                     *      F000:1B3B A801          TEST     AL,01
                     *      F000:1B3D 7402          JZ       1B41
                     *      F000:1B3F E460          IN       AL,60      ; READ PORT 0x60 IF OUTBUFF_FULL SET ("FLUSH"?)
                     *      F000:1B41 F6C402        TEST     AH,02
                     *      F000:1B44 E0F1          LOOPNZ   1B37
                     *      F000:1B46 751D          JNZ      1B65       ; EXIT WITH ERROR (CX == 0)
                     *      F000:1B48 B306          MOV      BL,06
                     *      F000:1B4A 2BC9          SUB      CX,CX
                     *      F000:1B4C E464          IN       AL,64
                     *      F000:1B4E A801          TEST     AL,01
                     *      F000:1B50 E1FA          LOOPZ    1B4C
                     *      F000:1B52 7508          JNZ      1B5C       ; PROCEED TO EXIT NOW THAT OUTBUFF_FULL IS SET
                     *      F000:1B54 FECB          DEC      BL
                     *      F000:1B56 75F4          JNZ      1B4C
                     *      F000:1B58 FEC3          INC      BL
                     *      F000:1B5A EB09          JMP      1B65       ; EXIT WITH ERROR (CX == 0)
                     *      F000:1B5C 2BC9          SUB      CX,CX
                     *      F000:1B5E E2FE          LOOP     1B5E       ; LOOOOOOPING....
                     *      F000:1B60 E460          IN       AL,60
                     *      F000:1B62 83E901        SUB      CX,0001    ; EXIT WITH SUCCESS (CX != 0)
                     *      F000:1B65 C3            RET
                     *
                     * But WAIT, the FUN doesn't end there.  After this function returns, "KBD_RESET" waits for a Keyboard interrupt
                     * to occur, hoping for scan code 0xAA as the Keyboard's final response.  "KBD_RESET" also returns CX to the caller,
                     * and the caller ("TEST.21") assumes there was no interrupt if CX is zero.
                     *
                     *              MOV     AL,0FDH
                     *              OUT     INTA01,AL
                     *              MOV     INTR_FLAG,0
                     *              STI
                     *              MOV     BL,10
                     *              SUB     CX,CX
                     *      G11:    TEST    [1NTR_FLAG],02H
                     *              JNZ     G12
                     *              LOOP    G11
                     *              DEC     BL
                     *              JNZ     G11
                     *              ...
                     *
                     * However, if [INTR_FLAG] is set immediately, the above code will exit immediately, without ever decrementing CX.
                     * CX can be zero not only if the loop exhausted it, but also if no looping was required; the latter is not an
                     * error, but "TEST.21" assumes that it is.
                     */
                    default:
                        this.set8042CmdData(this.b8042CmdData & ~ChipSet.KBC.DATA.CMD.NO_CLOCK);
                        if (this.kbd) this.set8042OutBuff(this.kbd.sendCmd(bOut));
                        break;
                    }
                }
                this.b8042InBuff = bOut;
                this.b8042Status &= ~ChipSet.KBC.STATUS.CMD_FLAG;
            };
            
            /**
             * in8042RWReg(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x61)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.in8042RWReg = function(port, addrFrom)
            {
                /*
                 * Normally, we return whatever was last written to this port, but we do need to mask the
                 * two upper-most bits (KBC.RWREG.NMI_ERROR), as those are output-only bits used to signal
                 * parity errors.
                 *
                 * Also, "TEST.09" of the MODEL_5170 BIOS expects the REFRESH_BIT to alternate, so we used to
                 * do this:
                 *
                 *      this.bPPIB ^= ChipSet.KBC.RWREG.REFRESH_BIT;
                 *
                 * However, the MODEL_5170_REV3 BIOS not only checks REFRESH_BIT in "TEST.09", but includes
                 * an additional test right before "TEST.11A", which requires the bit change "a bit less"
                 * frequently.  This new test sets CX to zero, and at the end of the test (@F000:05B8), CX
                 * must be in the narrow range of 0xF600 through 0xF9FD.
                 *
                 * In fact, the new "WAITF" function @F000:1A3A tells us exactly how frequently REFRESH_BIT
                 * is expected to change now.  That function performs a "FIXED TIME WAIT", where CX is a
                 * "COUNT OF 15.085737us INTERVALS TO WAIT".
                 *
                 * So we now tie the state of the REFRESH_BIT to bit 6 of the current CPU cycle count,
                 * effectively toggling the bit after every 64 cycles.  On an 8Mhz CPU that can do 8 cycles
                 * in 1us, 64 cycles represents 8us, so that might be a bit fast for "WAITF", but bit 6
                 * is the only choice that also satisfies the pre-"TEST.11A" test as well.
                 */
                var b = this.bPPIB & ~(ChipSet.KBC.RWREG.NMI_ERROR | ChipSet.KBC.RWREG.REFRESH_BIT) | ((this.cpu.getCycles() & 0x40)? ChipSet.KBC.RWREG.REFRESH_BIT : 0);
                /*
                 * Thanks to the WAITF function, this has become a very "busy" port, so if this generates too
                 * many messages, try adding Messages.LOG to the criteria.
                 */
                this.printMessageIO(port, null, addrFrom, "8042_RWREG", b, Messages.C8042);
                return b;
            };
            
            /**
             * out8042RWReg(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x61)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             */
            ChipSet.prototype.out8042RWReg = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "8042_RWREG", null, Messages.C8042);
                this.updatePPIB(bOut);
            };
            
            /**
             * in8042Status(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x64)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.in8042Status = function(port, addrFrom)
            {
                this.printMessageIO(port, null, addrFrom, "8042_STATUS", this.b8042Status, Messages.C8042);
                var b = this.b8042Status & 0xff;
                /*
                 * There's code in the 5170 BIOS (F000:03BF) that writes an 8042 command (0xAA), waits for
                 * KBC.STATUS.INBUFF_FULL to go clear (which it always is, because we always accept commands
                 * immediately), then checks KBC.STATUS.OUTBUFF_FULL and performs a "flush" on port 0x60 if
                 * it's set, then waits for KBC.STATUS.OUTBUFF_FULL *again*.  Unfortunately, the "flush" throws
                 * away our response if we respond immediately.
                 *
                 * So now when out8042InBuffCmd() has a response, it sets KBC.STATUS.OUTBUFF_DELAY instead
                 * (which is outside the 0xff range of bits we return); when we see KBC.STATUS.OUTBUFF_DELAY,
                 * we clear it and set KBC.STATUS.OUTBUFF_FULL, which will be returned on the next read.
                 *
                 * This provides a single poll delay, so that the aforementioned "flush" won't toss our response.
                 * If longer delays are needed down the road, we may need to set a delay count in the upper (hidden)
                 * bits of b8042Status, instead of using a single delay bit.
                 */
                if (this.b8042Status & ChipSet.KBC.STATUS.OUTBUFF_DELAY) {
                    this.b8042Status |= ChipSet.KBC.STATUS.OUTBUFF_FULL;
                    this.b8042Status &= ~ChipSet.KBC.STATUS.OUTBUFF_DELAY;
                }
                return b;
            };
            
            /**
             * out8042InBuffCmd(port, bOut, addrFrom)
             *
             * This writes to the 8042's input buffer; using this port (ie, 0x64 instead of 0x60) designates the
             * the byte as a "command byte".  We immediately set KBC.STATUS.CMD_FLAG, and then see if we can act upon
             * the command immediately (some commands requires us to wait for a "data byte").
             *
             * @this {ChipSet}
             * @param {number} port (0x64)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.out8042InBuffCmd = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "8042_INBUFF.CMD", null, Messages.C8042);
                this.assert(!(this.b8042Status & ChipSet.KBC.STATUS.INBUFF_FULL));
                this.b8042InBuff = bOut;
            
                this.b8042Status |= ChipSet.KBC.STATUS.CMD_FLAG;
            
                var bPulseBits = 0;
                if (this.b8042InBuff >= ChipSet.KBC.CMD.PULSE_OUTPORT) {
                    bPulseBits = (this.b8042InBuff ^ 0xf);
                    /*
                     * Now that we have isolated the bit(s) to pulse, map all pulse commands to KBC.CMD.PULSE_OUTPORT
                     */
                    this.b8042InBuff = ChipSet.KBC.CMD.PULSE_OUTPORT;
                }
            
                switch (this.b8042InBuff) {
                case ChipSet.KBC.CMD.READ_CMD:          // 0x20
                    this.set8042OutBuff(this.b8042CmdData);
                    break;
            
                case ChipSet.KBC.CMD.WRITE_CMD:         // 0x60
                    /*
                     * No further action required for this command; more data is expected via out8042InBuffData()
                     */
                    break;
            
                case ChipSet.KBC.CMD.DISABLE_KBD:       // 0xAD
                    this.set8042CmdData(this.b8042CmdData | ChipSet.KBC.DATA.CMD.NO_CLOCK);
                    if (DEBUG) this.printMessage("keyboard disabled", Messages.KEYBOARD | Messages.PORT);
                    /*
                     * NOTE: The MODEL_5170 BIOS calls "KBD_RESET" (F000:17D2) while the keyboard interface is disabled,
                     * yet we must still deliver the Keyboard's CMDRES.BAT_OK response code?  Seems like an odd thing for
                     * a "disabled interface" to do.
                     */
                    break;
            
                case ChipSet.KBC.CMD.ENABLE_KBD:        // 0xAE
                    this.set8042CmdData(this.b8042CmdData & ~ChipSet.KBC.DATA.CMD.NO_CLOCK);
                    if (DEBUG) this.printMessage("keyboard re-enabled", Messages.KEYBOARD | Messages.PORT);
                    if (this.kbd) this.kbd.checkScanCode();
                    break;
            
                case ChipSet.KBC.CMD.SELF_TEST:         // 0xAA
                    if (this.kbd) this.kbd.flushScanCode();
                    this.set8042CmdData(this.b8042CmdData | ChipSet.KBC.DATA.CMD.NO_CLOCK);
                    if (DEBUG) this.printMessage("keyboard disabled on reset", Messages.KEYBOARD | Messages.PORT);
                    this.set8042OutBuff(ChipSet.KBC.DATA.SELF_TEST.OK);
                    this.set8042OutPort(ChipSet.KBC.OUTPORT.NO_RESET | ChipSet.KBC.OUTPORT.A20_ON);
                    break;
            
                case ChipSet.KBC.CMD.INTF_TEST:         // 0xAB
                    /*
                     * TODO: Determine all the side-effects of the Interface Test, if any.
                     */
                    this.set8042OutBuff(ChipSet.KBC.DATA.INTF_TEST.OK);
                    break;
            
                case ChipSet.KBC.CMD.READ_INPORT:       // 0xC0
                    this.set8042OutBuff(this.b8042InPort);
                    break;
            
                case ChipSet.KBC.CMD.READ_OUTPORT:      // 0xD0
                    this.set8042OutBuff(this.b8042OutPort);
                    break;
            
                case ChipSet.KBC.CMD.WRITE_OUTPORT:     // 0xD1
                    /*
                     * No further action required for this command; more data is expected via out8042InBuffData()
                     */
                    break;
            
                case ChipSet.KBC.CMD.READ_TEST:         // 0xE0
                    this.set8042OutBuff((this.b8042CmdData & ChipSet.KBC.DATA.CMD.NO_CLOCK)? 0 : ChipSet.KBC.TESTPORT.KBD_CLOCK);
                    break;
            
                case ChipSet.KBC.CMD.PULSE_OUTPORT:     // 0xF0-0xFF
                    if (bPulseBits & 0x1) {
                        /*
                         * Bit 0 of the 8042's output port is connected to RESET.  If it's pulsed, the processor resets.
                         * We don't want to clear *all* CPU state (eg, cycle counts), so we call cpu.resetRegs() instead
                         * of cpu.reset().
                         */
                        this.cpu.resetRegs();
                    }
                    break;
            
                default:
                    if (DEBUG && this.messageEnabled(Messages.C8042)) {
                        this.printMessage("unrecognized 8042 command: " + str.toHexByte(this.b8042InBuff), true);
                        this.dbg.stopCPU();
                    }
                    break;
                }
            };
            
            /**
             * set8042CmdData(b)
             *
             * @this {ChipSet}
             * @param {number} b
             */
            ChipSet.prototype.set8042CmdData = function(b)
            {
                var bClockWasEnabled = !(this.b8042CmdData & ChipSet.KBC.DATA.CMD.NO_CLOCK);
                this.b8042CmdData = b;
                this.assert(ChipSet.KBC.DATA.CMD.SYS_FLAG === ChipSet.KBC.STATUS.SYS_FLAG);
                this.b8042Status = (this.b8042Status & ~ChipSet.KBC.STATUS.SYS_FLAG) | (b & ChipSet.KBC.DATA.CMD.SYS_FLAG);
                if (this.kbd) {
                    /*
                     * This seems to be what the doctor ordered for the MODEL_5170_REV3 BIOS @F000:0A6D, where it
                     * sends ChipSet.KBC.CMD.WRITE_CMD to port 0x64, followed by 0x4D to port 0x60, which clears NO_CLOCK
                     * and enables the keyboard.  The BIOS then waits for OUTBUFF_FULL to be set, at which point it seems
                     * to be anticipating an 0xAA response in the output buffer.
                     *
                     * And indeed, if we call the original MODEL_5150/MODEL_5160 setEnabled() Keyboard interface here,
                     * and both the data and clock lines have transitioned high (ie, both parameters are true), then it
                     * will call resetDevice(), generating a Keyboard.CMDRES.BAT_OK response.
                     *
                     * This agrees with my understanding of what happens when the 8042 toggles the clock line high
                     * (ie, clears NO_CLOCK): the TechRef's "Basic Assurance Test" section says that when the Keyboard is
                     * powered on, it performs the BAT, and then when the clock and data lines go high, the keyboard sends
                     * a completion code (eg, 0xAA for success, or 0xFC or something else for failure).
                     */
                    var bClockEnabled = !(b & ChipSet.KBC.DATA.CMD.NO_CLOCK);
                    this.kbd.setEnabled(!!(b & ChipSet.KBC.DATA.CMD.NO_INHIBIT), bClockEnabled);
                }
            };
            
            /**
             * set8042OutBuff(b, fNoDelay)
             *
             * The 5170 ROM BIOS assumed there would be a slight delay after certain 8042 commands, like SELF_TEST
             * (0xAA), before there was an OUTBUFF response; in fact, there is BIOS code that will fail without such
             * a delay.  This is discussed in greater detail in in8042Status().
             *
             * So we default to a "single poll" delay, setting OUTBUFF_DELAY instead of OUTBUFF_FULL, unless the caller
             * explicitly asks for no delay.  The fNoDelay parameter was added later, so that notifyKbdData() could
             * request immediate delivery of keyboard scan codes, because some operating systems (eg, Microport's 1986
             * version of Unix for PC AT machines) poll the status port only once, immediately giving up if no data is
             * available.
             *
             * TODO: Determine if we can/should invert the fNoDelay default (from false to true) and delay only in
             * specific cases; perhaps only the SELF_TEST command required a delay.
             *
             * @this {ChipSet}
             * @param {number} b
             * @param {boolean} [fNoDelay]
             */
            ChipSet.prototype.set8042OutBuff = function(b, fNoDelay)
            {
                if (b >= 0) {
                    this.b8042OutBuff = b;
                    if (fNoDelay) {
                        this.b8042Status |= ChipSet.KBC.STATUS.OUTBUFF_FULL;
                    } else {
                        this.b8042Status &= ~ChipSet.KBC.STATUS.OUTBUFF_FULL;
                        this.b8042Status |= ChipSet.KBC.STATUS.OUTBUFF_DELAY;
                    }
                    if (DEBUG && this.messageEnabled(Messages.KEYBOARD | Messages.PORT)) {
                        this.printMessage("set8042OutBuff(" + str.toHexByte(b) + ")", true);
                    }
                }
            };
            
            /**
             * set8042OutPort(b)
             *
             * @this {ChipSet}
             * @param {number} b
             */
            ChipSet.prototype.set8042OutPort = function(b)
            {
                this.b8042OutPort = b;
            
                this.bus.setA20(!!(b & ChipSet.KBC.OUTPORT.A20_ON));
            
                if (!(b & ChipSet.KBC.OUTPORT.NO_RESET)) {
                    /*
                     * Bit 0 of the 8042's output port is connected to RESET.  Normally, it's "pulsed" with the
                     * KBC.CMD.PULSE_OUTPORT command, so if a RESET is detected via this command, we should try to
                     * determine if that's what the caller intended.
                     */
                    if (DEBUG && this.messageEnabled(Messages.C8042)) {
                        this.printMessage("unexpected 8042 output port reset: " + str.toHexByte(b), true);
                        this.dbg.stopCPU();
                    }
                    this.cpu.resetRegs();
                }
            };
            
            /**
             * notifyKbdData(b)
             *
             * In the old days of PCjs, the Keyboard component would simply call setIRR() when it had some data for the
             * keyboard controller.  However, the Keyboard's sole responsibility is to emulate an actual keyboard and call
             * notifyKbdData() whenever it has some data; it's not allowed to mess with IRQ lines.
             *
             * If there's an 8042, we check (this.b8042CmdData & ChipSet.KBC.DATA.CMD.NO_CLOCK); if NO_CLOCK is clear,
             * we can raise the IRQ immediately.  Well, not quite immediately....
             *
             * Notes regarding the MODEL_5170 (eg, /devices/pc/machine/5170/ega/1152kb/rev3/machine.xml):
             *
             * The "Rev3" BIOS, dated 11-Nov-1985, contains the following code in the keyboard interrupt handler at K26A:
             *
             *      F000:3704 FA            CLI
             *      F000:3705 B020          MOV      AL,20
             *      F000:3707 E620          OUT      20,AL
             *      F000:3709 B0AE          MOV      AL,AE
             *      F000:370B E88D02        CALL     SHIP_IT
             *      F000:370E FA            CLI                     <-- window of opportunity
             *      F000:370F 07            POP      ES
             *      F000:3710 1F            POP      DS
             *      F000:3711 5F            POP      DI
             *      F000:3712 5E            POP      SI
             *      F000:3713 5A            POP      DX
             *      F000:3714 59            POP      CX
             *      F000:3715 5B            POP      BX
             *      F000:3716 58            POP      AX
             *      F000:3717 5D            POP      BP
             *      F000:3718 CF            IRET
             *
             * and SHIP_IT looks like this:
             *
             *      F000:399B 50            PUSH     AX
             *      F000:399C FA            CLI
             *      F000:399D 2BC9          SUB      CX,CX
             *      F000:399F E464          IN       AL,64
             *      F000:39A1 A802          TEST     AL,02
             *      F000:39A3 E0FA          LOOPNZ   399F
             *      F000:39A5 58            POP      AX
             *      F000:39A6 E664          OUT      64,AL
             *      F000:39A8 FB            STI
             *      F000:39A9 C3            RET
             *
             * This code *appears* to be trying to ensure that another keyboard interrupt won't occur until after the IRET,
             * but sadly, it looks to me like the CLI following the call to SHIP_IT is too late.  SHIP_IT should have been
             * written with PUSHF/CLI and POPF intro/outro sequences, thereby honoring the first CLI at the top of K26A and
             * eliminating the need for the second CLI (@F000:370E).
             *
             * Of course, in "real life", this was probably never a problem, because the 8042 probably wasn't fast enough to
             * generate another interrupt so soon after receiving the ChipSet.KBC.CMD.ENABLE_KBD command.  In my case, I ran
             * into this problem by 1) turning on "kbd" Debugger messages and 2) rapidly typing lots of keys.  The Debugger
             * messages bogged the machine down enough for me to hit the "window of opportunity", generating this message in
             * PC-DOS 3.20:
             *
             *      "FATAL: Internal Stack Failure, System Halted."
             *
             * and halting the system @0070:0923 (JMP 0923).
             *
             * That wasn't the only spot in the BIOS where I hit this problem; here's another "window of opportunity":
             *
             *      F000:3975 FA            CLI
             *      F000:3976 B020          MOV      AL,20
             *      F000:3978 E620          OUT      20,AL
             *      F000:397A B0AE          MOV      AL,AE
             *      F000:397C E81C00        CALL     SHIP_IT
             *      F000:397F B80291        MOV      AX,9102        <-- window of opportunity
             *      F000:3982 CD15          INT      15
             *      F000:3984 80269600FC    AND      [0096],FC
             *      F000:3989 E982FD        JMP      370E
             *
             * In this second, lengthier, example, I counted about 60 instructions being executed from the EOI @F000:3978 to
             * the final IRET @F000:3718, most of them in the INT 0x15 handler.  So, I'm going to double that count to 120
             * instructions, just to be safe, and pass that along to every setIRR() call we make here.
             *
             * @this {ChipSet}
             * @param {number} b
             */
            ChipSet.prototype.notifyKbdData = function(b)
            {
                if (this.model < ChipSet.MODEL_5170) {
                    /*
                     * TODO: Should we be checking bPPI for PPI_B.CLK_KBD on these older machines, before calling setIRR()?
                     */
                    this.setIRR(ChipSet.IRQ.KBD, 4);
                }
                else {
                    if (!(this.b8042CmdData & ChipSet.KBC.DATA.CMD.NO_CLOCK)) {
                        /*
                         * The next read of b8042OutBuff will clear both of these bits and call kbd.checkScanCode(),
                         * which will call notifyKbdData() again if there's still keyboard data to process.
                         */
                        if (!(this.b8042Status & (ChipSet.KBC.STATUS.OUTBUFF_FULL | ChipSet.KBC.STATUS.OUTBUFF_DELAY))) {
                            this.set8042OutBuff(b, true);
                            this.kbd.shiftScanCode();
                            /*
                             * A delay of 4 instructions was originally requested as part of the the Keyboard's resetDevice()
                             * response, but a larger delay (120) is now needed for MODEL_5170 machines, per the discussion above.
                             */
                            this.setIRR(ChipSet.IRQ.KBD, 120);
                        }
                        else {
                            if (DEBUG && this.messageEnabled(Messages.KEYBOARD | Messages.PORT)) {
                                this.printMessage("notifyKbdData(" + str.toHexByte(b) + "): output buffer full", true);
                            }
                        }
                    } else {
                        if (DEBUG && this.messageEnabled(Messages.KEYBOARD | Messages.PORT)) {
                            this.printMessage("notifyKbdData(" + str.toHexByte(b) + "): disabled", true);
                        }
                    }
                }
            };
            
            /**
             * inCMOSAddr(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x70)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inCMOSAddr = function(port, addrFrom)
            {
                this.printMessageIO(port, null, addrFrom, "CMOS.ADDR", this.bCMOSAddr, Messages.CMOS);
                return this.bCMOSAddr;
            };
            
            /**
             * outCMOSAddr(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x70)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.outCMOSAddr = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "CMOS.ADDR", null, Messages.CMOS);
                this.bCMOSAddr = bOut;
                this.bNMI = (bOut & ChipSet.CMOS.ADDR.NMI_DISABLE)? ChipSet.NMI.DISABLE : ChipSet.NMI.ENABLE;
            };
            
            /**
             * inCMOSData(port, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x71)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
             * @return {number} simulated port value
             */
            ChipSet.prototype.inCMOSData = function(port, addrFrom)
            {
                var bAddr = this.bCMOSAddr & ChipSet.CMOS.ADDR.MASK;
                var bIn = (bAddr <= ChipSet.CMOS.ADDR.STATUSD? this.getRTCByte(bAddr) : this.abCMOSData[bAddr]);
                if (this.messageEnabled(Messages.CMOS | Messages.PORT)) {
                    this.printMessageIO(port, null, addrFrom, "CMOS.DATA[" + str.toHexByte(bAddr) + "]", bIn, true);
                }
                if (addrFrom != null) {
                    if (bAddr == ChipSet.CMOS.ADDR.STATUSC) {
                        /*
                         * When software reads the STATUSC port, all interrupt bits (PF, AF, and UF) are automatically
                         * cleared, which in turn clears the IRQF bit, which in turn clears the IRQ.
                         */
                        this.abCMOSData[bAddr] &= ChipSet.CMOS.STATUSC.RESERVED;
                        if (bIn & ChipSet.CMOS.STATUSC.IRQF) this.clearIRR(ChipSet.IRQ.RTC);
                        /*
                         * If we just cleared PF, and PIE is still set, then we need to make sure the next Periodic Interrupt
                         * occurs in a timely manner, too.
                         */
                        if ((bIn & ChipSet.CMOS.STATUSC.PF) && (this.abCMOSData[ChipSet.CMOS.ADDR.STATUSB] & ChipSet.CMOS.STATUSB.PIE)) {
                            if (DEBUG) this.printMessage("RTC periodic interrupt cleared", Messages.RTC);
                            this.setRTCCycleLimit();
                        }
                    }
                }
                return bIn;
            };
            
            /**
             * outCMOSData(port, bOut, addrFrom)
             *
             * @this {ChipSet}
             * @param {number} port (0x71)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.outCMOSData = function(port, bOut, addrFrom)
            {
                var bAddr = this.bCMOSAddr & ChipSet.CMOS.ADDR.MASK;
                if (this.messageEnabled(Messages.CMOS | Messages.PORT)) {
                    this.printMessageIO(port, bOut, addrFrom, "CMOS.DATA[" + str.toHexByte(bAddr) + "]", null, true);
                }
                var bDelta = bOut ^ this.abCMOSData[bAddr];
                this.abCMOSData[bAddr] = (bAddr <= ChipSet.CMOS.ADDR.STATUSD? this.setRTCByte(bAddr, bOut) : bOut);
                if (bAddr == ChipSet.CMOS.ADDR.STATUSB && (bDelta & ChipSet.CMOS.STATUSB.PIE)) {
                    if (bOut & ChipSet.CMOS.STATUSB.PIE) {
                        if (DEBUG) this.printMessage("RTC periodic interrupts enabled", Messages.RTC);
                        this.setRTCCycleLimit();
                    } else {
                        if (DEBUG) this.printMessage("RTC periodic interrupts disabled", Messages.RTC);
                    }
                }
            };
            
            /**
             * outNMI(port, bOut, addrFrom)
             *
             * This handler is installed only for models before MODEL_5170.
             *
             * @this {ChipSet}
             * @param {number} port (0xA0)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.outNMI = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "NMI");
                this.bNMI = bOut;
            };
            
            /**
             * outCoprocClear(port, bOut, addrFrom)
             *
             * This handler is installed only for MODEL_5170.
             *
             * @this {ChipSet}
             * @param {number} port (0xF0)
             * @param {number} bOut (0x00 is the only expected output)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.outCoprocClear = function(port, bOut, addrFrom)
            {
                /*
                 * TODO: Implement
                 */
                this.printMessageIO(port, bOut, addrFrom, "COPROC.CLEAR");
                this.assert(!bOut);
            };
            
            /**
             * outCoprocReset(port, bOut, addrFrom)
             *
             * This handler is installed only for MODEL_5170.
             *
             * @this {ChipSet}
             * @param {number} port (0xF1)
             * @param {number} bOut (0x00 is the only expected output)
             * @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
             */
            ChipSet.prototype.outCoprocReset = function(port, bOut, addrFrom)
            {
                /*
                 * TODO: Implement
                 */
                this.printMessageIO(port, bOut, addrFrom, "COPROC.RESET");
                this.assert(!bOut);
            };
            
            /**
             * intBIOSRTC(addr)
             *
             * INT 0x1A Quick Reference:
             *
             *      AH
             *      ----
             *      0x00    Get current clock count in CX:DX
             *      0x01    Set current clock count from CX:DX
             *      0x02    Get real-time clock using BCD (CH=hours, CL=minutes, DH=seconds)
             *      0x03    Set real-time clock using BCD (CH=hours, CL=minutes, DH=seconds, DL=1 if Daylight Savings Time option)
             *      0x04    Get real-time date using BCD (CH=century, CL=year, DH=month, DL=day)
             *      0x05    Set real-time date using BCD (CH=century, CL=year, DH=month, DL=day)
             *      0x06    Set alarm using BCD (CH=hours, CL=minutes, DH=seconds)
             *      0x07    Reset alarm
             *
             * @this {ChipSet}
             * @param {number} addr
             * @return {boolean} true to proceed with the INT 0x1A software interrupt, false to skip
             */
            ChipSet.prototype.intBIOSRTC = function(addr)
            {
                if (DEBUGGER) {
                    if (this.messageEnabled(Messages.RTC) && this.dbg.messageInt(Interrupts.RTC.VECTOR, addr)) {
                        /*
                         * By computing AH now, we get the incoming AH value; if we computed it below, along with
                         * the rest of the register values, we'd get the outgoing AH value, which is not what we want.
                         */
                        var AH = this.cpu.regEAX >> 8;
                        this.cpu.addIntReturn(addr, function(chipset, nCycles) {
                            return function onBIOSRTCReturn(nLevel) {
                                nCycles = chipset.cpu.getCycles() - nCycles;
                                var sResult;
                                var CL = chipset.cpu.regEDX & 0xff;
                                var CH = chipset.cpu.regEDX >> 8;
                                var DL = chipset.cpu.regEDX & 0xff;
                                var DH = chipset.cpu.regEDX >> 8;
                                if (AH == 0x02 || AH == 0x03) {
                                    sResult = " CH(hour)=" + str.toHexWord(CH) + " CL(min)=" + str.toHexByte(CL) + " DH(sec)=" + str.toHexByte(DH);
                                } else if (AH == 0x04 || AH == 0x05) {
                                    sResult = " CX(year)=" + str.toHexWord(chipset.cpu.regECX) + " DH(month)=" + str.toHexByte(DH) + " DL(day)=" + str.toHexByte(DL);
                                }
                                chipset.dbg.messageIntReturn(Interrupts.RTC.VECTOR, nLevel, nCycles, sResult);
                            };
                        }(this, this.cpu.getCycles()));
                    }
                }
                return true;
            };
            
            /**
             * parseSwitches(s, def)
             *
             * @this {ChipSet}
             * @param {string|undefined} s describing switch settings
             * @param {number} def is a default value to use if s is undefined
             * @return {number} value representing the switch settings
             */
            ChipSet.prototype.parseSwitches = function(s, def)
            {
                if (s === undefined) return def;
                /*
                 * NOTE: We can't simply use parseInt() with a base of 2, because the bit order is reversed, as well as the bit sense.
                 */
                var b = 0, bit = 0x1;
                for (var i = 0; i < s.length; i++) {
                    if (s.charAt(i) == "0") b |= bit;
                    bit <<= 1;
                }
                return b;
            };
            
            /**
             * setSpeaker(fOn)
             *
             * @this {ChipSet}
             * @param {boolean} [fOn] true to turn speaker on, false to turn off, otherwise update as appropriate
             */
            ChipSet.prototype.setSpeaker = function(fOn)
            {
                if (this.contextAudio) {
                    try {
                        if (fOn !== undefined) {
                            this.fSpeaker = fOn;
                        } else {
                            fOn = this.fSpeaker && this.cpu && this.cpu.isRunning();
                        }
                        var freq = Math.round(ChipSet.TIMER_TICKS_PER_SEC / this.getTimerInit(ChipSet.PIT0.TIMER2));
                        /*
                         * Treat frequencies outside the normal hearing range (below 20hz or above 20Khz) as a clever attempt
                         * to turn sound off; we have to explicitly turn the sound off in those cases, to prevent the Audio API
                         * from "easing" the audio to the target frequency and creating odd sound effects.
                         */
                        if (freq < 20 || freq > 20000) fOn = false;
                        if (fOn) {
                            if (this.sourceAudio) {
                                this.sourceAudio['frequency']['value'] = freq;
                                if (this.messageEnabled(Messages.SPEAKER)) this.printMessage("speaker set to " + freq + "hz", true);
                            } else {
                                this.sourceAudio = this.contextAudio['createOscillator']();
                                if (this.sourceAudio) {
                                    if (typeof this.sourceAudio['type'] == "number") {
                                        this.sourceAudio['type'] = 1;   // deprecated: 0: "sine", 1: "square", 2: "sawtooth", 3: "triangle"
                                    } else {
                                        this.sourceAudio['type'] = "square";
                                    }
                                    this.sourceAudio['connect'](this.contextAudio['destination']);
                                    this.sourceAudio['frequency']['value'] = freq;
                                    if ('start' in this.sourceAudio) {
                                        this.sourceAudio['start'](0);
                                    } else {
                                        this.sourceAudio['noteOn'](0);  // deprecated: this.sourceAudio['noteOn'](0)
                                    }
                                    if (this.messageEnabled(Messages.SPEAKER)) this.printMessage("speaker on at  " + freq + "hz", true);
                                }
                            }
                        } else {
                            if (this.sourceAudio) {
                                if ('stop' in this.sourceAudio) {
                                    this.sourceAudio['stop'](0);
                                } else {
                                    this.sourceAudio['noteOff'](0);     // deprecated: this.sourceAudio['noteOff'](0)
                                }
                                this.sourceAudio['disconnect']();       // QUESTION: is this automatic following a stop(), since this particular source cannot be started again?
                                delete this.sourceAudio;                // QUESTION: ditto?
                                if (this.messageEnabled(Messages.SPEAKER)) this.printMessage("speaker off at " + freq + "hz", true);
                            }
                        }
                    } catch(e) {
                        this.notice("AudioContext exception: " + e.message);
                        this.contextAudio = null;
                    }
                } else if (fOn) {
                    this.printMessage("BEEP", Messages.SPEAKER);
                }
            };
            
            /**
             * messageBitsDMA(iChannel)
             *
             * @this {ChipSet}
             * @param {number} [iChannel] if the message is associated with a particular IRQ #
             * @return {number}
             */
            ChipSet.prototype.messageBitsDMA = function(iChannel)
            {
                var bitsMessage = Messages.DATA;
                if (iChannel == ChipSet.DMA_FDC) {
                    bitsMessage |= Messages.FDC;
                } else if (iChannel == ChipSet.DMA_HDC) {
                    bitsMessage |= Messages.HDC;
                }
                return bitsMessage;
            };
            
            /**
             * messageBitsIRQ(nIRQ)
             *
             * @this {ChipSet}
             * @param {number|undefined} [nIRQ] if the message is associated with a particular IRQ #
             * @return {number}
             */
            ChipSet.prototype.messageBitsIRQ = function(nIRQ)
            {
                var bitsMessage = Messages.PIC;
                if (nIRQ == ChipSet.IRQ.TIMER0) {           // IRQ 0
                    bitsMessage |= Messages.TIMER;
                } else if (nIRQ == ChipSet.IRQ.KBD) {       // IRQ 1
                    bitsMessage |= Messages.KEYBOARD;
                } else if (nIRQ == ChipSet.IRQ.SLAVE) {     // IRQ 2 (MODEL_5170 and up)
                    bitsMessage |= Messages.CHIPSET;
                } else if (nIRQ == ChipSet.IRQ.COM1 || nIRQ == ChipSet.IRQ.COM2) {
                    bitsMessage |= Messages.SERIAL;
                } else if (nIRQ == ChipSet.IRQ.XTC) {       // IRQ 5 (MODEL_5160)
                    bitsMessage |= Messages.HDC;
                } else if (nIRQ == ChipSet.IRQ.FDC) {       // IRQ 6
                    bitsMessage |= Messages.FDC;
                } else if (nIRQ == ChipSet.IRQ.RTC) {       // IRQ 8 (MODEL_5170 and up)
                    bitsMessage |= Messages.RTC;
                } else if (nIRQ == ChipSet.IRQ.ATC) {       // IRQ 14 (MODEL_5170 and up)
                    bitsMessage |= Messages.HDC;
                }
                return bitsMessage;
            };
            
            /*
             * Port input notification tables
             */
            ChipSet.aPortInput = {
                0x00: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA0.INDEX, 0, port, addrFrom); },
                0x01: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA0.INDEX, 0, port, addrFrom); },
                0x02: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA0.INDEX, 1, port, addrFrom); },
                0x03: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA0.INDEX, 1, port, addrFrom); },
                0x04: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA0.INDEX, 2, port, addrFrom); },
                0x05: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA0.INDEX, 2, port, addrFrom); },
                0x06: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA0.INDEX, 3, port, addrFrom); },
                0x07: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA0.INDEX, 3, port, addrFrom); },
                0x08: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAStatus(ChipSet.DMA0.INDEX, port, addrFrom); },
                0x20: /** @this {ChipSet} */ function(port, addrFrom) { return this.inPICLo(ChipSet.PIC0.INDEX, addrFrom); },
                0x21: /** @this {ChipSet} */ function(port, addrFrom) { return this.inPICHi(ChipSet.PIC0.INDEX, addrFrom); },
                0x40: /** @this {ChipSet} */ function(port, addrFrom) { return this.inTimer(ChipSet.PIT0.TIMER0, port, addrFrom); },
                0x41: /** @this {ChipSet} */ function(port, addrFrom) { return this.inTimer(ChipSet.PIT0.TIMER1, port, addrFrom); },
                0x42: /** @this {ChipSet} */ function(port, addrFrom) { return this.inTimer(ChipSet.PIT0.TIMER2, port, addrFrom); },
                0x43: ChipSet.prototype.inPIT1Ctrl,
                0x81: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA0.INDEX, 2, port, addrFrom); },
                0x82: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA0.INDEX, 3, port, addrFrom); },
                0x83: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA0.INDEX, 1, port, addrFrom); },
                0x87: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA0.INDEX, 0, port, addrFrom); }
            };
            
            ChipSet.aPortInput5150 = {
                0x60: ChipSet.prototype.inPPIA,
                0x61: ChipSet.prototype.inPPIB,
                0x62: ChipSet.prototype.inPPIC,
                0x63: ChipSet.prototype.inPPICtrl   // technically, not actually readable, but I want the Debugger to be able to read this
            };
            
            ChipSet.aPortInput5170 = {
                0x60: ChipSet.prototype.in8042OutBuff,
                0x61: ChipSet.prototype.in8042RWReg,
                0x64: ChipSet.prototype.in8042Status,
                0x70: ChipSet.prototype.inCMOSAddr,
                0x71: ChipSet.prototype.inCMOSData,
                0x80: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(7, port, addrFrom); },
                0x84: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(0, port, addrFrom); },
                0x85: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(1, port, addrFrom); },
                0x86: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(2, port, addrFrom); },
                0x88: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(3, port, addrFrom); },
                0x89: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA1.INDEX, 2, port, addrFrom); },
                0x8A: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
                0x8B: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA1.INDEX, 1, port, addrFrom); },
                0x8C: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(4, port, addrFrom); },
                0x8D: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(5, port, addrFrom); },
                0x8E: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageSpare(6, port, addrFrom); },
                0x8F: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAPageReg(ChipSet.DMA1.INDEX, 0, port, addrFrom); },
                0xA0: /** @this {ChipSet} */ function(port, addrFrom) { return this.inPICLo(ChipSet.PIC1.INDEX, addrFrom); },
                0xA1: /** @this {ChipSet} */ function(port, addrFrom) { return this.inPICHi(ChipSet.PIC1.INDEX, addrFrom); },
                0xC0: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA1.INDEX, 0, port, addrFrom); },
                0xC2: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 0, port, addrFrom); },
                0xC4: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA1.INDEX, 1, port, addrFrom); },
                0xC6: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 1, port, addrFrom); },
                0xC8: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA1.INDEX, 2, port, addrFrom); },
                0xCA: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 2, port, addrFrom); },
                0xCC: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
                0xCE: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
                0xD0: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAStatus(ChipSet.DMA1.INDEX, port, addrFrom); }
            };
            
            /*
             * Port output notification tables
             */
            ChipSet.aPortOutput = {
                0x00: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA0.INDEX, 0, port, bOut, addrFrom); },
                0x01: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA0.INDEX, 0, port, bOut, addrFrom); },
                0x02: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA0.INDEX, 1, port, bOut, addrFrom); },
                0x03: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA0.INDEX, 1, port, bOut, addrFrom); },
                0x04: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA0.INDEX, 2, port, bOut, addrFrom); },
                0x05: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA0.INDEX, 2, port, bOut, addrFrom); },
                0x06: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA0.INDEX, 3, port, bOut, addrFrom); },
                0x07: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA0.INDEX, 3, port, bOut, addrFrom); },
                0x08: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMACmd(ChipSet.DMA0.INDEX, port, bOut, addrFrom); },
                0x09: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAReq(ChipSet.DMA0.INDEX, port, bOut, addrFrom); },
                0x0A: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMask(ChipSet.DMA0.INDEX, port, bOut, addrFrom); },
                0x0B: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMode(ChipSet.DMA0.INDEX, port, bOut, addrFrom); },
                0x0C: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAResetFF(ChipSet.DMA0.INDEX, port, bOut, addrFrom); },
                0x0D: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMasterClear(ChipSet.DMA0.INDEX, port, bOut, addrFrom); },
                0x20: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outPICLo(ChipSet.PIC0.INDEX, bOut, addrFrom); },
                0x21: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outPICHi(ChipSet.PIC0.INDEX, bOut, addrFrom); },
                0x40: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outTimer(ChipSet.PIT0.TIMER0, port, bOut, addrFrom); },
                0x41: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outTimer(ChipSet.PIT0.TIMER1, port, bOut, addrFrom); },
                0x42: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outTimer(ChipSet.PIT0.TIMER2, port, bOut, addrFrom); },
                0x43: ChipSet.prototype.outPIT1Ctrl,
                0x81: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA0.INDEX, 2, port, bOut, addrFrom); },
                0x82: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA0.INDEX, 3, port, bOut, addrFrom); },
                0x83: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA0.INDEX, 1, port, bOut, addrFrom); },
                0x87: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA0.INDEX, 0, port, bOut, addrFrom); }
            };
            
            ChipSet.aPortOutput5150 = {
                0x60: ChipSet.prototype.outPPIA,
                0x61: ChipSet.prototype.outPPIB,
                0x62: ChipSet.prototype.outPPIC,
                0x63: ChipSet.prototype.outPPICtrl,
                0xA0: ChipSet.prototype.outNMI
            };
            
            ChipSet.aPortOutput5170 = {
                0x60: ChipSet.prototype.out8042InBuffData,
                0x61: ChipSet.prototype.out8042RWReg,
                0x64: ChipSet.prototype.out8042InBuffCmd,
                0x70: ChipSet.prototype.outCMOSAddr,
                0x71: ChipSet.prototype.outCMOSData,
                0x80: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(7, port, bOut, addrFrom); },
                0x84: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(0, port, bOut, addrFrom); },
                0x85: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(1, port, bOut, addrFrom); },
                0x86: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(2, port, bOut, addrFrom); },
                0x88: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(3, port, bOut, addrFrom); },
                0x89: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA1.INDEX, 2, port, bOut, addrFrom); },
                0x8A: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA1.INDEX, 3, port, bOut, addrFrom); },
                0x8B: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA1.INDEX, 1, port, bOut, addrFrom); },
                0x8C: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(4, port, bOut, addrFrom); },
                0x8D: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(5, port, bOut, addrFrom); },
                0x8E: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageSpare(6, port, bOut, addrFrom); },
                0x8F: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAPageReg(ChipSet.DMA1.INDEX, 0, port, bOut, addrFrom); },
                0xA0: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outPICLo(ChipSet.PIC1.INDEX, bOut, addrFrom); },
                0xA1: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outPICHi(ChipSet.PIC1.INDEX, bOut, addrFrom); },
                0xC0: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA1.INDEX, 0, port, bOut, addrFrom); },
                0xC2: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA1.INDEX, 0, port, bOut, addrFrom); },
                0xC4: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA1.INDEX, 1, port, bOut, addrFrom); },
                0xC6: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA1.INDEX, 1, port, bOut, addrFrom); },
                0xC8: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA1.INDEX, 2, port, bOut, addrFrom); },
                0xCA: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA1.INDEX, 2, port, bOut, addrFrom); },
                0xCC: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelAddr(ChipSet.DMA1.INDEX, 3, port, bOut, addrFrom); },
                0xCE: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAChannelCount(ChipSet.DMA1.INDEX, 3, port, bOut, addrFrom); },
                0xD0: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMACmd(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
                0xD2: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAReq(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
                0xD4: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMask(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
                0xD6: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMode(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
                0xD8: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAResetFF(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
                0xDA: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMasterClear(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
                0xF0: ChipSet.prototype.outCoprocClear,
                0xF1: ChipSet.prototype.outCoprocReset
            };
            
            /**
             * ChipSet.init()
             *
             * This function operates on every HTML element of class "chipset", extracting the
             * JSON-encoded parameters for the ChipSet constructor from the element's "data-value"
             * attribute, invoking the constructor to create a ChipSet component, and then binding
             * any associated HTML controls to the new component.
             */
            ChipSet.init = function()
            {
                var aeChipSet = Component.getElementsByClass(window.document, PCJSCLASS, "chipset");
                for (var iChip = 0; iChip < aeChipSet.length; iChip++) {
                    var eChipSet = aeChipSet[iChip];
                    var parmsChipSet = Component.getComponentParms(eChipSet);
                    var chipset = new ChipSet(parmsChipSet);
                    Component.bindComponentControls(chipset, eChipSet, PCJSCLASS);
                    chipset.updateSwitchDesc();
                }
            };
            
            /*
             * Initialize every ChipSet module on the page.
             */
            web.onInit(ChipSet.init);
            
            if (typeof module !== 'undefined') module.exports = ChipSet;
            
          • computer.js
            /**
             * @fileoverview Implements the PCjs Computer component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-15
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            /*
             * BUILD INSTRUCTIONS
             *
             * To build PCjs (pc.js), run Google's Closure Compiler, replacing "*.js" with
             * the input file sequence defined by the "pcJSFiles" property in package.json:
             *
             *      java -jar compiler.jar
             *          --compilation_level ADVANCED_OPTIMIZATIONS
             *          --define='DEBUG=false'
             *          --warning_level=VERBOSE
             *          --js *.js
             *          --js_output_file pc.js
             *
             * Google's Closure Compiler (compiler.jar) is documented at
             * https://developers.google.com/closure/compiler/ and is available
             * for download here:
             *
             *      http://closure-compiler.googlecode.com/files/compiler-latest.zip
             *
             * The PCjs JavaScript files do have some initialization-order dependencies.
             * If you load the files individually, it's recommended that you load them in
             * the same order that they're compiled.
             *
             * Generally speaking, component.js should be first, computer.js should be
             * last (of the files based on component.js), and panel.js should be listed
             * early so that the Control Panel is ready as soon as possible.
             *
             * Another recent ordering requirement is that rom.js must be loaded before
             * ram.js; this was true before, but now it's required, because I'm starting
             * to add ROM BIOS Data Area definitions to rom.js, and since the data area
             * is in RAM, ram.js may want access to some of those definitions.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var usr         = require("../../shared/lib/usrlib");
                var web         = require("../../shared/lib/weblib");
                var UserAPI     = require("../../shared/lib/userapi");
                var ReportAPI   = require("../../shared/lib/reportapi");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var Bus         = require("./bus");
                var State       = require("./state");
            }
            
            /**
             * Computer(parmsComputer, parmsMachine, fSuspended)
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsComputer
             * @param {Object} [parmsMachine]
             * @param {boolean} [fSuspended]
             *
             * The Computer component has no required (parmsComputer) properties, but does
             * support the following:
             *
             *      busWidth: number of memory address lines (address bits) on the computer's "bus";
             *      20 is the minimum (and the default), which implies 8086/8088 real-mode addressing,
             *      while 24 is required for 80286 protected-mode addressing.  This value is passed
             *      directly through to the Bus component; see that component for more details.
             *
             *      resume: one of the Computer.RESUME constants, which are as follows:
             *          '0' if resume disabled (default)
             *          '1' if enabled without prompting
             *          '2' if enabled with prompting
             *          '3' if enabled with prompting and auto-delete
             *          or a string containing the path of a predefined JSON-encoded state
             *
             *      state: the path to JSON-encoded state file (see details regarding 'state' below)
             *
             * If a predefined state is supplied AND it's successfully loaded, then resume behavior
             * defaults to '1' (ie, resume enabled without prompting).
             *
             * This component insures that all components are ready before "powering" them.
             *
             * Different components become ready at different times, and initialization order (ie,
             * the order the scripts are combined on the page) only partially determines readiness.
             * This is because components like ROM and Video must finish loading their resource files
             * before they are ready.  Other components become ready after we call their initBus()
             * function, because they have a Bus or CPU dependency, such as access to memory management
             * functions.  And other components, like CPU and Panel, are ready as soon as their
             * constructor finishes.
             *
             * Once a component has indicated it's ready, we call its powerUp() notification
             * function (if it has one--it's optional).  We call the CPU's powerUp() function last,
             * so that the CPU is assured that all other components are ready and "powered".
             */
            function Computer(parmsComputer, parmsMachine, fSuspended) {
            
                Component.call(this, "Computer", parmsComputer, Computer, Messages.COMPUTER);
            
                this.aFlags.fPowered = false;
                /*
                 * TODO: Deprecate 'buswidth' (it should have always used camelCase)
                 */
                this.nBusWidth = parmsComputer['busWidth'] || parmsComputer['buswidth'];
                this.resume = Computer.RESUME_NONE;
                this.sStateData = null;
                this.fServerState = false;
                this.url = parmsMachine? parmsMachine['url'] : null;
            
                /*
                 * Generate a random number x (where 0 <= x < 1), add 0.1 so that it's guaranteed to be
                 * non-zero, convert to base 36, and chop off the leading digit and "decimal" point.
                 */
                this.sMachineID = (Math.random() + 0.1).toString(36).substr(2,12);
                this.sUserID = this.queryUserID();
            
                /*
                 * Find the appropriate CPU (and Debugger and Control Panel, if any)
                 *
                 * CLOSURE COMPILER TIP: To override the type of a right-hand expression (as we need to do here,
                 * where we know getComponentByType() will only return an X86CPU object or null), wrap the expression
                 * in parentheses.  I never knew this until I stumbled across it in "Closure: The Definitive Guide".
                 */
                this.cpu = /** @type {X86CPU} */ (Component.getComponentByType("CPU", this.id));
                if (!this.cpu) {
                    Component.error("Unable to find CPU component");
                    return;
                }
                this.dbg = /** @type {Debugger} */ (Component.getComponentByType("Debugger", this.id));
            
                /*
                 * Initialize the Bus component
                 */
                this.bus = new Bus({'id': this.idMachine + '.bus', 'buswidth': this.nBusWidth}, this.cpu, this.dbg);
            
                /*
                 * Iterate through all the components and connect them to the Control Panel, if any
                 */
                var iComponent, component;
                var aComponents = Component.getComponents(this.id);
                this.panel = Component.getComponentByType("Panel", this.id);
            
                if (this.panel && this.panel.controlPrint) {
                    for (iComponent = 0; iComponent < aComponents.length; iComponent++) {
                        component = aComponents[iComponent];
                        /*
                         * I can think of many "cleaner" ways for the Control Panel component to pass its
                         * notice(), println(), etc, overrides on to all the other components, but it's just
                         * too darn convenient to slam those overrides into the components directly.
                         */
                        component.notice = this.panel.notice;
                        component.println = this.panel.println;
                        component.controlPrint = this.panel.controlPrint;
                    }
                }
            
                if (DEBUG && this.messageEnabled()) this.printMessage("PREFETCH: " + PREFETCH + ", TYPEDARRAYS: " + TYPEDARRAYS);
            
                /*
                 * Iterate through all the components again and call their initBus() handler, if any
                 */
                for (iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    component = aComponents[iComponent];
                    if (component.initBus) component.initBus(this, this.bus, this.cpu, this.dbg);
                }
            
                var sStatePath = null;
                var sResume = parmsComputer['resume'];
                if (sResume !== undefined) {
                    /*
                     * DEPRECATE: This goofiness is a holdover from when the 'resume' property was a string (either a
                     * single-digit string or a path); now it's always a number, so it never has a 'length' property and
                     * the call to parseInt() is unnecessary.
                     */
                    if (sResume.length > 1) {
                        sStatePath = this.sResumePath = sResume;
                    } else {
                        this.resume = parseInt(sResume, 10);
                    }
                }
            
                /*
                 * The Computer 'state' property allows a state file to be specified independent of the 'resume' feature;
                 * previously, you could only use 'resume' to load a state file -- which we still support, but loading a state
                 * file that way prevents the machine's state from being saved, since we always resume from the 'resume' file.
                 *
                 * The other wrinkle is on the restore side: we need to IGNORE the 'state' property if a saved state now exists.
                 * So we have to peek at localStorage, and unfortunately, the only way to "peek" is to actually load the data,
                 * but we're not ready to use it yet, so powerUp() has been changed to use any existing stateComputer that we've
                 * already loaded.
                 *
                 * However, there's now a wrinkle to the wrinkle: if a 'state' parameter has been passed via the URL, then that
                 * OVERRIDES everything; it overrides any 'state' Computer parameter AND it disables resume of any saved state in
                 * localStorage (in other words, it prevents fAllowResume from being true, and forcing resume off).
                 */
                var fAllowResume;
                var sState = Component.parmsURL && Component.parmsURL['state'] || (fAllowResume = true) && parmsComputer['state'];
            
                if (sState) {
                    sStatePath = this.sStatePath = sState;
                    if (!fAllowResume) {
                        this.fServerState = true;
                        this.resume = Computer.RESUME_NONE;
                    }
                    if (this.resume) {
                        this.stateComputer = new State(this, Computer.sAppVer);
                        if (this.stateComputer.load()) {
                            sStatePath = null;
                        } else {
                            delete this.stateComputer;
                        }
                    }
                }
            
                /*
                 * If sStatePath is set, we must use it.  But if there's no sStatePath AND resume is set,
                 * then we have the option of resuming from a server-side state, assuming a valid USERID.
                 */
                if (!sStatePath && this.resume) {
                    sStatePath = this.getServerStatePath();
                    if (sStatePath) this.fServerState = true;
                }
            
                if (!sStatePath) {
                    this.setReady();
                } else {
                    web.loadResource(sStatePath, true, null, this, this.onLoadSetReady);
                }
            
                if (!fSuspended) {
                    /*
                     * Power "up" the computer, giving every component the opportunity to reset or restore itself.
                     */
                    this.wait(this.powerOn);
                }
            }
            
            Component.subclass(Computer);
            
            /*
             * NOTE: 1.01 is the first version to provide limited save/restore support using localStorage.
             * From this point on, care must be taken to insure that any new version that's incompatible with
             * previous localStorage data be released with a version number that is at least 1 greater,
             * since we're tagging the localStorage data with the integer portion of the version string.
             */
            Computer.sAppName = APPNAME || "PCjs";
            Computer.sAppVer = APPVERSION;
            Computer.sCopyright = "Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>";
            
            /*
             * I think it's a good idea to also display a GPL notice, putting people on notice that even
             * the "compiled" source code has all the same GPL requirements as the uncompiled source code.
             */
            Computer.LICENSE = "License: GPL version 3 or later <http://gnu.org/licenses/gpl.html>";
            
            Computer.STATE_FAILSAFE  = "failsafe";
            Computer.STATE_VALIDATE  = "validate";
            Computer.STATE_TIMESTAMP = "timestamp";
            Computer.STATE_VERSION   = "version";
            Computer.STATE_HOSTURL   = "url";
            Computer.STATE_BROWSER   = "browser";
            Computer.STATE_USERID    = "user";
            
            /*
             * The following constants define all the resume options.  Negative values (eg, RESUME_REPOWER) are for
             * internal use only, and RESUME_DELETE is not documented (it provides a way of deleting ALL saved states
             * whenever a resume is declined).  As a result, the only "end-user" values are 0, 1 and 2.
             */
            Computer.RESUME_REPOWER = -1;   // resume without changing any state (for internal use only)
            Computer.RESUME_NONE    = 0;    // default (no resume)
            Computer.RESUME_AUTO    = 1;    // automatically save/restore state
            Computer.RESUME_PROMPT  = 2;    // automatically save but conditionally restore (WARNING: if restore is declined, any state is discarded)
            Computer.RESUME_DELETE  = 3;    // same as RESUME_PROMPT but discards ALL machines states whenever ANY machine restore is declined (undocumented)
            
            /**
             * getMachineID()
             *
             * @return {string}
             */
            Computer.prototype.getMachineID = function()
            {
                return this.sMachineID;
            };
            
            /**
             * getUserID()
             *
             * @return {string}
             */
            Computer.prototype.getUserID = function()
            {
                return this.sUserID? this.sUserID : "";
            };
            
            /**
             * onLoadSetReady(sStateFile, sStateData, nErrorCode)
             *
             * @this {Computer}
             * @param {string} sStateFile
             * @param {string} sStateData
             * @param {number} nErrorCode
             */
            Computer.prototype.onLoadSetReady = function(sStateFile, sStateData, nErrorCode)
            {
                if (!nErrorCode) {
                    this.sStateData = sStateData;
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("loaded state file " + sStateFile.replace(this.sUserID || "xxx", "xxx"));
                    }
                } else {
                    this.sResumePath = null;
                    this.fServerState = false;
                    this.notice('Unable to load machine state from server (error ' + nErrorCode + (sStateData? ': ' + str.trim(sStateData) : '') + ')');
                }
                this.setReady();
            };
            
            /**
             * wait(fn, parms)
             *
             * wait() waits until every component is ready (including ourselves, the last component we check),
             * then calls the specified Computer method.
             *
             * TODO: As with web.loadResource(), the Closure Compiler makes it difficult for us to define
             * a function type for "fn" that works in all cases; sometimes we want to pass a function that takes
             * only a "number", and other times we want to pass a function that takes only an "Array" (the type
             * will mirror that of the "parms" parameter). However, the Closure Compiler insists that both functions
             * must be declared as accepting both types of parameters. So once again, we must use an untyped function
             * declaration, instead of something stricter like:
             *
             *      param {function(this:Computer, (number|Array|undefined)): undefined} fn
             *
             * @this {Computer}
             * @param {function(...)} fn
             * @param {number|Array} [parms] optional parameters
             */
            Computer.prototype.wait = function(fn, parms)
            {
                var computer = this;
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent <= aComponents.length; iComponent++) {
                    var component = (iComponent < aComponents.length ? aComponents[iComponent] : this);
                    if (!component.isReady()) {
                        component.isReady(function onComponentReady() {
                            computer.wait(fn, parms);
                        });
                        return;
                    }
                }
                if (DEBUG && this.messageEnabled()) this.printMessage("Computer.wait(ready)");
                fn.call(this, parms);
            };
            
            /**
             * validateState(stateComputer)
             *
             * NOTE: We clear() stateValidate only when there's no stateComputer.
             *
             * @this {Computer}
             * @param {State|null} [stateComputer]
             * @return {boolean} true if state passes validation, false if not
             */
            Computer.prototype.validateState = function(stateComputer)
            {
                var fValid = true;
                var stateValidate = new State(this, Computer.sAppVer, Computer.STATE_VALIDATE);
                if (stateValidate.load() && stateValidate.parse()) {
                    var sTimestampValidate = stateValidate.get(Computer.STATE_TIMESTAMP);
                    var sTimestampComputer = stateComputer ? stateComputer.get(Computer.STATE_TIMESTAMP) : "unknown";
                    if (sTimestampValidate != sTimestampComputer) {
                        this.notice("Machine state may be out-of-date\n(" + sTimestampValidate + " vs. " + sTimestampComputer + ")\nCheck your browser's local storage limits");
                        fValid = false;
                        if (!stateComputer) stateValidate.clear();
                    } else {
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("Last state: " + sTimestampComputer + " (validate: " + sTimestampValidate + ")");
                        }
                    }
                }
                return fValid;
            };
            
            /**
             * powerOn(resume)
             *
             * Power every component "up", applying any previously available state information.
             *
             * @this {Computer}
             * @param {number} [resume] is a valid RESUME value; default is this.resume
             */
            Computer.prototype.powerOn = function(resume)
            {
                if (resume === undefined) {
                    resume = this.resume || (this.sStateData? Computer.RESUME_AUTO : Computer.RESUME_NONE);
                }
            
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("Computer.powerOn(" + (resume == Computer.RESUME_REPOWER ? "repower" : (resume ? "resume" : "")) + ")");
                }
            
                var fRepower = false;
                var fRestore = false;
                this.fRestoreError = false;
                var stateComputer = this.stateComputer || new State(this, Computer.sAppVer);
            
                if (resume == Computer.RESUME_REPOWER) {
                    fRepower = true;
                }
                else if (resume > Computer.RESUME_NONE) {
                    if (stateComputer.load(this.sStateData)) {
                        /*
                         * Since we're resuming something (either a predefined state or a state from localStorage), let's
                         * create a "failsafe" checkpoint in localStorage, and destroy it at the end of a successful powerOn().
                         * Which means, of course, that if a previous "failsafe" checkpoint already exists, something bad
                         * may have happened the last time around.
                         */
                        this.stateFailSafe = new State(this, Computer.sAppVer, Computer.STATE_FAILSAFE);
                        if (this.stateFailSafe.load()) {
                            this.powerReport(stateComputer);
                            /*
                             * We already know resume is something other than RESUME_NONE, so we'll go ahead and bump it
                             * all the way to RESUME_PROMPT, so that the user will be prompted, and if the user declines to
                             * restore, the state will be removed.
                             */
                            resume = Computer.RESUME_PROMPT;
                            /*
                             * To ensure that the set() below succeeds, we need to call unload(), otherwise it may fail
                             * with a "read only" error (eg, "TypeError: Cannot assign to read only property 'timestamp'").
                             */
                            this.stateFailSafe.unload();
                        }
            
                        this.stateFailSafe.set(Computer.STATE_TIMESTAMP, usr.getTimestamp());
                        this.stateFailSafe.store();
            
                        var fValidate = this.resume && !this.fServerState;
                        if (resume == Computer.RESUME_AUTO || web.confirmUser("Click OK to restore the previous " + Computer.sAppName + " machine state, or CANCEL to reset the machine.")) {
                            fRestore = stateComputer.parse();
                            if (fRestore) {
                                var sCode = stateComputer.get(UserAPI.RES.CODE);
                                var sData = stateComputer.get(UserAPI.RES.DATA);
                                if (sCode) {
                                    if (sCode == UserAPI.CODE.OK) {
                                        stateComputer.load(sData);
                                    } else {
                                        /*
                                         * A missing (or not yet created) state file is no cause for alarm, but other errors might be
                                         */
                                        if (sCode == UserAPI.CODE.FAIL && sData != UserAPI.FAIL.NOSTATE) {
                                            this.notice("Error: " + sData);
                                            if (sData == UserAPI.FAIL.VERIFY) this.resetUserID();
                                        } else {
                                            this.println(sCode + ": " + sData);
                                        }
                                        /*
                                         * Try falling back to the state that we should have saved in localStorage, as a backup to the
                                         * server-side state.
                                         */
                                        stateComputer.unload();     // discard the invalid server-side state first
                                        if (stateComputer.load()) {
                                            fRestore = stateComputer.parse();
                                            fValidate = true;
                                        } else {
                                            fRestore = false;       // hmmm, there was nothing in localStorage either
                                        }
                                    }
                                }
                            }
                            /*
                             * If the load/parse was successful, and it was from localStorage (not sStateData),
                             * then we should to try verify that localStorage snapshot is current.  One reason it may
                             * NOT be current is if localStorage was full and we got a quota error during the last
                             * powerOff().
                             */
                            if (fValidate) this.validateState(fRestore? stateComputer : null);
                        } else {
                            /*
                             * RESUME_PROMPT indicates we should delete the state if they clicked Cancel to confirm() above.
                             */
                            if (resume == Computer.RESUME_PROMPT) stateComputer.clear();
                        }
                    } else {
                        /*
                         * If there's no state, then there should also be no validation timestamp; if there is, then once again,
                         * we're probably dealing with a quota error.
                         */
                        this.validateState();
                    }
                    delete this.sStateData;
                    delete this.stateComputer;
                }
            
                /*
                 * Start powering all components, including any data they may need to restore their state;
                 * we restore power to the CPU last.
                 */
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    var component = aComponents[iComponent];
                    if (component !== this && component != this.cpu) {
                        fRestore = this.powerRestore(component, stateComputer, fRepower, fRestore);
                    }
                }
            
                /*
                 * Assuming this is not a repower, we must perform another wait, because some components may
                 * have marked themselves as "not ready" again (eg, the FDC component, if the restore forced it
                 * to mount one or more additional disk images).
                 */
                var aParms = [stateComputer, resume, fRestore];
            
                if (resume != Computer.RESUME_REPOWER) {
                    this.wait(this.donePowerOn, aParms);
                    return;
                }
                this.donePowerOn(aParms);
            };
            
            /**
             * powerRestore(component, stateComputer, fRepower, fRestore)
             *
             * @this {Computer}
             * @param {Component} component
             * @param {State} stateComputer
             * @param {boolean} fRepower
             * @param {boolean} fRestore
             * @return {boolean} true if restore should continue, false if not
             */
            Computer.prototype.powerRestore = function(component, stateComputer, fRepower, fRestore)
            {
                if (!component.aFlags.fPowered) {
            
                    component.aFlags.fPowered = true;
            
                    if (component.powerUp) {
            
                        var data = null;
                        if (fRestore) {
                            data = stateComputer.get(component.id);
                            if (!data) {
                                /*
                                 * This is a hack that makes it possible for a machine whose ID has been
                                 * supplemented with a suffix (a single letter or digit) to find object IDs
                                 * in states created from a machine without the suffix.
                                 *
                                 * For example, if a state file was created from a machine with ID "ibm5160"
                                 * but the current machine is "ibm5160a", this attempts a second lookup with
                                 * "ibm5160", enabling us to find objects that match the original machine ID
                                 * (eg, "ibm5160.romEGA").
                                 */
                                data = stateComputer.get(component.id.replace(/[a-z0-9]\./i, '.'));
                            }
                        }
            
                        /*
                         * State.get() will return whatever was originally passed to State.set() (eg, an
                         * Object or a string), but components are supposed to store only Objects, so if a
                         * string comes back, something went wrong.  By explicitly eliminating "string" data,
                         * the Closure Compiler stops complaining that we might be passing strings to our
                         * powerUp() functions (even though we know we're not).
                         *
                         * TODO: Determine if there's some way to coerce the Closure Compiler into treating
                         * data as Object or null, without having to include this runtime check.  An assert
                         * would be a good idea, but this is overkill.
                         */
                        if (typeof data === "string") data = null;
            
                        /*
                         * If computer is null, this is simply a repower notification, which most components
                         * don't do anything with.  Exceptions include: CPU (since it may be halted) and Video
                         * (since its screen may be "turned off").
                         */
                        if (!component.powerUp(data, fRepower) && data) {
            
                            Component.error("Unable to restore state for " + component.type);
                            /*
                             * If this is a resume error for a machine that also has a predefined state
                             * AND we're not restoring from that state, then throw away the current state,
                             * prevent any new state from being created, and then force a reload, which will
                             * hopefully restore us to the functioning predefined state.
                             *
                             * TODO: Considering doing this in ALL cases, not just in situations where a
                             * 'state' exists but we're not actually resuming from it.
                             */
                            if (this.sStatePath && !this.sStateData) {
                                stateComputer.clear();
                                this.resume = Computer.RESUME_NONE;
                                web.reloadPage();
                            } else {
                                /*
                                 * In all other cases, we set fRestoreError, which should trigger a call to
                                 * powerReport() and then delete the offending state.
                                 */
                                this.fRestoreError = true;
                            }
                            /*
                             * Any failure triggers an automatic to call powerUp() again, without any state,
                             * in the hopes that the component can recover by performing a reset.
                             */
                            component.powerUp(null);
                            /*
                             * We also disable the rest of the restore operation, because it's not clear
                             * the remaining state information can be trusted;  the machine is already in an
                             * inconsistent state, so we're not likely to make things worse, and the only
                             * alternative (starting over and performing a state-less reset) isn't likely to make
                             * the user any happier.  But, we'll see... we need some experience with the code.
                             */
                            fRestore = false;
                        }
                    }
            
                    if (!fRepower && component.comment) {
                        var asComments = component.comment.split("|");
                        for (var i = 0; i < asComments.length; i++) {
                            component.status(asComments[i]);
                        }
                    }
                }
                return fRestore;
            };
            
            /**
             * donePowerOn(aParms)
             *
             * This is nothing more than a continuation of powerOn(), giving us the option of calling wait() one more time.
             *
             * @this {Computer}
             * @param {Array} aParms containing [stateComputer, resume, fRestore]
             */
            Computer.prototype.donePowerOn = function(aParms)
            {
                var stateComputer = aParms[0];
                var fRepower = (aParms[1] < 0);
                var fRestore = aParms[2];
            
                if (DEBUG && this.aFlags.fPowered && this.messageEnabled()) {
                    this.printMessage("Computer.donePowerOn(): redundant");
                }
            
                this.aFlags.fPowered = true;
            
                if (!this.fInitialized) {
                    this.println(Computer.sAppName + " v" + Computer.sAppVer + "\n" + Computer.sCopyright + "\n" + Computer.LICENSE);
                    this.fInitialized = true;
                }
            
                /*
                 * Once we get to this point, we're guaranteed that all components are ready, so it's safe to power the CPU;
                 * the CPU should begin executing immediately, unless a debugger is attached.
                 */
                if (this.cpu) {
                    /*
                     * TODO: Do we not care about the return value here? (ie, is checking fRestoreError sufficient)?
                     */
                    this.powerRestore(this.cpu, stateComputer, fRepower, fRestore);
                    this.cpu.autoStart();
                }
            
                /*
                 * If the state was bad, offer to report it and then delete it.  Deleting may be moot, since invariably a new
                 * state will be created on powerOff() before the next powerOn(), but it seems like good paranoia all the same.
                 */
                if (this.fRestoreError) {
                    this.powerReport(stateComputer);
                    stateComputer.clear();
                }
            
                if (!fRepower && this.stateFailSafe) {
                    this.stateFailSafe.clear();
                    delete this.stateFailSafe;
                }
            };
            
            /**
             * checkPower()
             *
             * @this {Computer}
             * @return {boolean} true if the computer is fully powered, false otherwise
             */
            Computer.prototype.checkPower = function()
            {
                if (this.aFlags.fPowered) return true;
            
                var component = null, iComponent;
                var aComponents = Component.getComponents(this.id);
                for (iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    component = aComponents[iComponent];
                    if (component !== this && !component.aFlags.fReady) break;
                }
                if (iComponent == aComponents.length) {
                    for (iComponent = 0; iComponent < aComponents.length; iComponent++) {
                        component = aComponents[iComponent];
                        if (component !== this && !component.aFlags.fPowered) break;
                    }
                }
                if (iComponent == aComponents.length) component = this;
                var s = "The " + component.type + " component (" + component.id + ") is not " + (!component.aFlags.fReady? "ready yet" + (component.fnReady? " (waiting for notification)" : "") : "powered yet") + ".";
                web.alertUser(s);
                return false;
            };
            
            /**
             * powerReport(stateComputer)
             *
             * @this {Computer}
             * @param {State} stateComputer
             */
            Computer.prototype.powerReport = function(stateComputer)
            {
                if (web.confirmUser("There may be a problem with your " + Computer.sAppName + " machine.\n\nTo help us diagnose it, click OK to send this " + Computer.sAppName + " machine state to http://" + SITEHOST + ".")) {
                    web.sendReport(Computer.sAppName, Computer.sAppVer, this.url, this.getUserID(), ReportAPI.TYPE.BUG, stateComputer.toString());
                }
            };
            
            /**
             * powerOff(fSave, fShutdown)
             *
             * Power every component "down" and optionally save the machine state.
             *
             * There's one scenario that powerOff() isn't currently able to deal with very effectively: what to do when
             * the user switches away while it's still being restored, causing Disk loadResource() calls to fail.  The
             * Disk component calls notify() when that happens -- see Disk.mount() -- but the FDC and HDC controllers don't
             * notify *us* of those problems, so Computer assumes that the restore was completely successful, when in fact
             * it was only partially successful.
             *
             * Then we immediately arrive here to perform a save, following that incomplete restore.  It would be wrong to
             * deal with that incomplete restore by setting fRestoreError, because we don't want to trigger a powerReport()
             * and the deletion of the previous state, because the state itself was presumably OK.  Unfortunately, the new
             * state we now save will no longer include manually mounted disk images whose remounts were interrupted, so future
             * restores won't remount them either.
             *
             * We could perhaps solve this by having the Disk component notify us in those situations, set a new flag
             * (fRestoreIncomplete?), and set fSave to false if that's ever set.  Be careful though: when fSave is false,
             * that means MORE than not saving; it also means deleting any previous state, which is NOT what you'd want to
             * do in a "fRestoreIncomplete" situation.  Also, we have to worry about Disk operations that fail for other reasons,
             * making sure those failures don't interfere with the save process in the same way.
             *
             * As it stands, the worst that happens is any manually mounted disk images might have to be manually remounted,
             * which doesn't seem like a huge problem.
             *
             * @this {Computer}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown] is true if the machine is being shut down
             * @return {string|null} string representing the captured state (or null if error)
             */
            Computer.prototype.powerOff = function(fSave, fShutdown)
            {
                var data;
                var sState = "none";
            
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("Computer.powerOff(" + (fSave ? "save" : "nosave") + (fShutdown ? ",shutdown" : "") + ")");
                }
            
                var stateComputer = new State(this, Computer.sAppVer);
                var stateValidate = new State(this, Computer.sAppVer, Computer.STATE_VALIDATE);
            
                var sTimestamp = usr.getTimestamp();
                stateValidate.set(Computer.STATE_TIMESTAMP, sTimestamp);
                stateComputer.set(Computer.STATE_TIMESTAMP, sTimestamp);
                stateComputer.set(Computer.STATE_VERSION, APPVERSION);
                stateComputer.set(Computer.STATE_HOSTURL, web.getHostURL());
                stateComputer.set(Computer.STATE_BROWSER, web.getUserAgent());
            
                /*
                 * Always power the CPU "down" first, just to insure it doesn't ask other
                 * components to do anything after they're no longer ready.
                 */
                if (this.cpu && this.cpu.powerDown) {
                    if (fShutdown) this.cpu.stopCPU();
                    data = this.cpu.powerDown(fSave, fShutdown);
                    if (typeof data === "object") stateComputer.set(this.cpu.id, data);
                    if (fShutdown) {
                        this.cpu.aFlags.fPowered = false;
                        if (data === false) sState = null;
                    }
                }
            
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    var component = aComponents[iComponent];
                    if (component.aFlags.fPowered) {
                        if (component.powerDown) {
                            data = component.powerDown(fSave, fShutdown);
                            if (typeof data === "object") stateComputer.set(component.id, data);
                        }
                        if (fShutdown) {
                            component.aFlags.fPowered = false;
                            if (data === false) sState = null;
                        }
                    }
                }
            
                if (sState) {
                    if (fShutdown) {
                        var fClear = false;
                        var fClearAll = false;
                        if (fSave) {
                            if (this.sUserID) {
                                this.saveServerState(this.sUserID, stateComputer.toString());
                            }
                            if (!stateValidate.store() || !stateComputer.store()) {
                                sState = null;
                                /*
                                 * New behavior as of v1.13.2:  if it appears that localStorage is full, we blow it ALL away.
                                 * Dedicated server-side storage is the only way we'll ever be able to reliably preserve a
                                 * particular machine's state.  Historically, attempting to limp along with whatever localStorage
                                 * is left just generates the same useless and annoying warnings over and over.
                                 */
                                fClear = fClearAll = true;
                            }
                        }
                        else {
                            /*
                             * I used to ALWAYS clear (ie, delete) any associated computer state, but now I do this only if the
                             * current machine is "resumable", because there are situations where I have two configurations
                             * for the same machine -- one resumable and one not -- and I don't want the latter throwing away the
                             * state of the former.
                             *
                             * So this code is here now strictly for callers to delete the state of a "resumable" machine, not as
                             * some paranoid clean-up operation.
                             *
                             * An undocumented feature of this operation is that if your configuration uses the special 'resume="3"'
                             * value, and you click the "Reset" button, and then you click OK to reset the everything, this will
                             * actually reset EVERYTHING (ie, all localStorage for ALL configs will be reclaimed).
                             */
                            if (this.resume) {
                                fClear = true;
                                fClearAll = (this.resume == Computer.RESUME_DELETE);
                            }
                        }
                        if (fClear) {
                            stateComputer.clear(fClearAll);
                        }
                    } else {
                        sState = stateComputer.toString();
                    }
                }
            
                if (fShutdown) this.aFlags.fPowered = false;
            
                return sState;
            };
            
            /**
             * reset()
             *
             * Notify all (other) components with a reset() method that the Computer is being reset.
             *
             * NOTE: We'd like to reset the Bus first (due to the importance of the A20 line), but since we
             * allocated the Bus object ourselves, after all the other components were allocated, it ends
             * up near the end of Component's list of components.  Hence the special case for this.bus below.
             *
             * @this {Computer}
             */
            Computer.prototype.reset = function()
            {
                if (this.bus && this.bus.reset) {
                    /*
                     * TODO: Why does WebStorm think that this.bus.type is undefined? The base class (Component)
                     * constructor defines it.
                     */
                    this.printMessage("Resetting " + this.bus.type);
                    this.bus.reset();
                }
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    var component = aComponents[iComponent];
                    if (component !== this && component !== this.bus && component.reset) {
                        this.printMessage("Resetting " + component.type);
                        component.reset();
                    }
                }
            };
            
            /**
             * start(ms, nCycles)
             *
             * Notify all (other) components with a start() method that the CPU has started.
             *
             * Note that we're called by runCPU(), which is why we exclude the CPU component,
             * as well as ourselves.
             *
             * @this {Computer}
             * @param {number} ms
             * @param {number} nCycles
             */
            Computer.prototype.start = function(ms, nCycles)
            {
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    var component = aComponents[iComponent];
                    if (component.type == "CPU" || component === this) continue;
                    if (component.start) {
                        component.start(ms, nCycles);
                    }
                }
            };
            
            /**
             * stop(ms, nCycles)
             *
             * Notify all (other) components with a stop() method that the CPU has stopped.
             *
             * Note that we're called by runCPU(), which is why we exclude the CPU component,
             * as well as ourselves.
             *
             * @this {Computer}
             * @param {number} ms
             * @param {number} nCycles
             */
            Computer.prototype.stop = function(ms, nCycles)
            {
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    var component = aComponents[iComponent];
                    if (component.type == "CPU" || component === this) continue;
                    if (component.stop) {
                        component.stop(ms, nCycles);
                    }
                }
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {Computer}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "reset")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            Computer.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                var computer = this;
                switch (sBinding) {
                    case "save":
                        this.bindings[sBinding] = control;
                        control.onclick = function onClickSave() {
                            var sUserID = computer.queryUserID(true);
                            if (sUserID) {
                                var fSave = !!(computer.resume && !computer.sResumePath);
                                var sState = computer.powerOff(fSave);
                                if (fSave) {
                                    computer.saveServerState(sUserID, sState);
                                } else {
                                    computer.notice("Resume disabled, machine state not saved");
                                }
                            }
                        };
                        return true;
                    case "reset":
                        this.bindings[sBinding] = control;
                        control.onclick = function onClickReset() {
                            computer.onReset();
                        };
                        return true;
                    default:
                        break;
                }
                return false;
            };
            
            /**
             * resetUserID()
             */
            Computer.prototype.resetUserID = function()
            {
                web.setLocalStorageItem(Computer.STATE_USERID, "");
                this.sUserID = null;
            };
            
            /**
             * queryUserID(fPrompt)
             *
             * @param {boolean} [fPrompt]
             * @returns {string|null|undefined}
             */
            Computer.prototype.queryUserID = function(fPrompt)
            {
                var sUserID = this.sUserID;
                if (!sUserID) {
                    sUserID = web.getLocalStorageItem(Computer.STATE_USERID);
                    if (sUserID !== undefined) {
                        if (!sUserID && fPrompt) {
                            sUserID = web.promptUser("To save machine states on the pcjs.org server, you need a user ID (email support@pcjs.org).\n\nOnce you have an ID, enter it below.");
                            if (sUserID) {
                                sUserID = this.verifyUserID(sUserID);
                                if (!sUserID) this.notice("Your user ID has not been approved.");
                            }
                        }
                    } else if (fPrompt) {
                        this.notice("Browser local storage is not available");
                    }
                }
                return sUserID;
            };
            
            /**
             * verifyUserID(sUserID)
             *
             * @this {Computer}
             * @param {string} sUserID
             * @return {string} validated user ID, or null if error
             */
            Computer.prototype.verifyUserID = function(sUserID)
            {
                this.sUserID = null;
                var fMessages = DEBUG && this.messageEnabled();
                if (fMessages) this.printMessage("verifyUserID(" + sUserID + ")");
                var sRequest = web.getHost() + UserAPI.ENDPOINT + '?' + UserAPI.QUERY.REQ + '=' + UserAPI.REQ.VERIFY + '&' + UserAPI.QUERY.USER + '=' + sUserID;
                var response = web.loadResource(sRequest);
                var nErrorCode = response[0];
                var sResponse = response[1];
                if (!nErrorCode && sResponse) {
                    try {
                        response = eval("(" + sResponse + ")");
                        if (response.code && response.code == UserAPI.CODE.OK) {
                            web.setLocalStorageItem(Computer.STATE_USERID, response.data);
                            if (fMessages) this.printMessage(Computer.STATE_USERID + " updated: " + response.data);
                            this.sUserID = response.data;
                        } else {
                            if (fMessages) this.printMessage(response.code + ": " + response.data);
                        }
                    } catch (e) {
                        Component.error(e.message + " (" + sResponse + ")");
                    }
                } else {
                    if (fMessages) this.printMessage("invalid response (error " + nErrorCode + ")");
                }
                return this.sUserID;
            };
            
            /**
             * getServerStatePath()
             *
             * @this {Computer}
             * @return {string|null} sStatePath (null if no localStorage or no USERID stored in localStorage)
             */
            Computer.prototype.getServerStatePath = function()
            {
                var sStatePath = null;
                if (this.sUserID) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage(Computer.STATE_USERID + " for load: " + this.sUserID);
                    }
                    sStatePath = web.getHost() + UserAPI.ENDPOINT + '?' + UserAPI.QUERY.REQ + '=' + UserAPI.REQ.LOAD + '&' + UserAPI.QUERY.USER + '=' + this.sUserID + '&' + UserAPI.QUERY.STATE + '=' + State.key(this, Computer.sAppVer);
                } else {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage(Computer.STATE_USERID + " unavailable");
                    }
                }
                return sStatePath;
            };
            
            /**
             * saveServerState(sUserID, sState)
             *
             * @param {string} sUserID
             * @param {string|null} sState
             */
            Computer.prototype.saveServerState = function(sUserID, sState)
            {
                /*
                 * We must pass fSync == true, because (as I understand it) browsers will blow off any async
                 * requests when a page is being closed.  Since our request is synchronous, storeServerState()
                 * should also return a result, but there's not much we can do with it, since browsers ALSO
                 * tend to blow off alerts() and the like when closing down.
                 */
                if (sState) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("size of server state: " + sState.length + " bytes");
                    }
                    var response = this.storeServerState(sUserID, sState, true);
                    if (response && response[UserAPI.RES.CODE] == UserAPI.CODE.OK) {
                        this.notice("Machine state saved to server");
                    } else if (sState) {
                        var sError = (response && response[UserAPI.RES.DATA]) || UserAPI.FAIL.BADSTORE;
                        if (response[UserAPI.RES.CODE] == UserAPI.CODE.FAIL) {
                            sError = "Error: " + sError;
                        } else {
                            sError = "Error " + response[UserAPI.RES.CODE] + ": " + sError;
                        }
                        this.notice(sError);
                        this.resetUserID();
                    }
                } else {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("no state to store");
                    }
                }
            };
            
            /**
             * storeServerState(sUserID, sState, fSync)
             *
             * @this {Computer}
             * @param {string} sUserID
             * @param {string} sState
             * @param {boolean} [fSync] is true if we're powering down and should perform a synchronous request (default is async)
             * @return {*} server response if fSync is true and a response was received; otherwise null
             */
            Computer.prototype.storeServerState = function(sUserID, sState, fSync)
            {
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage(Computer.STATE_USERID + " for store: " + sUserID);
                }
                /*
                 * TODO: Determine whether or not any browsers cancel our request if we're called during a browser "shutdown" event,
                 * and whether or not it matters if we do an async request (currently, we're not, to try to ensure the request goes through).
                 */
                var data = {};
                data[UserAPI.QUERY.REQ] = UserAPI.REQ.STORE;
                data[UserAPI.QUERY.USER] = sUserID;
                data[UserAPI.QUERY.STATE] = State.key(this, Computer.sAppVer);
                data[UserAPI.QUERY.DATA] = sState;
                var sRequest = web.getHost() + UserAPI.ENDPOINT;
                if (!fSync) {
                    web.loadResource(sRequest, true, data);
                } else {
                    var response = web.loadResource(sRequest, false, data);
                    var sResponse = response[1];
                    if (response[0]) {
                        if (sResponse) {
                            var i = sResponse.indexOf('\n');
                            if (i > 0) sResponse = sResponse.substr(0, i);
                            if (!sResponse.indexOf("Error: ")) sResponse = sResponse.substr(7);
                        }
                        sResponse = '{"' + UserAPI.RES.CODE + '":' + response[0] + ',"' + UserAPI.RES.DATA + '":"' + sResponse + '"}';
                    }
                    if (DEBUG && this.messageEnabled()) this.printMessage(sResponse);
                    return JSON.parse(sResponse);
                }
                return null;
            };
            
            /**
             * onReset()
             *
             * @this {Computer}
             */
            Computer.prototype.onReset = function()
            {
                /*
                 * If this is a "resumable" machine (and it's not using a predefined state), then we overload the reset
                 * operation to offer an explicit "save or discard" option first.  This is currently the only UI we offer to
                 * discard a machine's state, including any disk changes.  The traditional "reset" operation is still available
                 * for non-resumable machines.
                 *
                 * TODO: Break this behavior out into a separate "discard" operation, in case the designer of the machine really
                 * wants to clutter the UI with confusing options. ;-)
                 */
                if (this.resume && !this.sResumePath) {
                    /*
                     * I used to bypass the prompt if this.resume == Computer.RESUME_AUTO, setting fSave to true automatically,
                     * but that gives the user no means of resetting a resumable machine that contains errors in its resume state.
                     */
                    var fSave = (/* this.resume == Computer.RESUME_AUTO || */ web.confirmUser("Click OK to save changes to this " + Computer.sAppName + " machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded."));
                    this.powerOff(fSave, true);
                    /*
                     * Forcing the page to reload is an expedient option, but ugly. It's preferable to call powerOn()
                     * and rely on all the components to reset themselves to their default state.  The components with
                     * the greatest burden here are FDC and HDC, which must rely on the fReload flag to determine whether
                     * or not to unload/reload all their original auto-mounted disk images.
                     *
                     * However, if we started with a predefined state (ie, sStatePath is set), we take this shortcut, because
                     * we don't (yet) have code in place to gracefully reload the initial state (requires calling loadResource()
                     * again); alternatively, we could avoid throwing that state away, but it seems better to save the memory.
                     *
                     * TODO: Make this more graceful, so that we can stop using the reloadPage() sledgehammer.
                     */
                    if (!fSave && this.sStatePath) {
                        web.reloadPage();
                        return;
                    }
                    if (!fSave) this.fReload = true;
                    this.powerOn(Computer.RESUME_NONE);
                    this.fReload = false;
                } else {
                    this.reset();
                    if (this.cpu) this.cpu.autoStart();
                }
            };
            
            /**
             * getComponentByType(sType, componentPrev)
             *
             * @this {Computer}
             * @param {string} sType
             * @param {Component|null} [componentPrev] of previously returned component, if any
             * @return {Component|null}
             */
            Computer.prototype.getComponentByType = function(sType, componentPrev)
            {
                var aComponents = Component.getComponents(this.id);
                for (var iComponent = 0; iComponent < aComponents.length; iComponent++) {
                    var component = aComponents[iComponent];
                    if (componentPrev) {
                        if (componentPrev == component) componentPrev = null;
                        continue;
                    }
                    if (component.type == sType) return component;
                }
                return null;
            };
            
            /**
             * Computer.init()
             *
             * For every machine represented by an HTML element of class "pcjs-machine", this function
             * locates the HTML element of class "computer", extracting the JSON-encoded parameters for the
             * Computer constructor from the element's "data-value" attribute, invoking the constructor to
             * create a Computer component, and then binding any associated HTML controls to the new component.
             */
            Computer.init = function()
            {
                var aeMachines = Component.getElementsByClass(window.document, PCJSCLASS + "-machine");
            
                for (var iMachine = 0; iMachine < aeMachines.length; iMachine++) {
            
                    var eMachine = aeMachines[iMachine];
                    var parmsMachine = Component.getComponentParms(eMachine);
            
                    var aeComputers = Component.getElementsByClass(eMachine, PCJSCLASS, "computer");
            
                    for (var iComputer = 0; iComputer < aeComputers.length; iComputer++) {
            
                        var eComputer = aeComputers[iComputer];
                        var parmsComputer = Component.getComponentParms(eComputer);
            
                        /*
                         * We set fSuspended in the Computer constructor because we want to "power up" the
                         * computer ourselves, after any/all bindings are in place.
                         */
                        var computer = new Computer(parmsComputer, parmsMachine, true);
            
                        if (DEBUG && computer.messageEnabled()) {
                            computer.printMessage("onInit(" + computer.aFlags.fPowered + ")");
                        }
            
                        /*
                         * For now, all we support are "reset" and "save" buttons. We may eventually add a "power"
                         * button to manually suspend/resume the machine.  An "erase" button was also considered, but
                         * "reset" now provides a way to force the machine to start from scratch again, so "erase"
                         * might be redundant now.
                         */
                        Component.bindComponentControls(computer, eComputer, PCJSCLASS);
            
                        /*
                         * Power "up" the computer, giving every component the opportunity to reset or restore itself.
                         */
                        computer.wait(computer.powerOn);
                    }
                }
            };
            
            /**
             * Computer.show()
             *
             * When exit() is using an "onbeforeunload" handler, this "onpageshow" handler allows us to repower everything,
             * without either resetting or restoring.  We call powerOn() with a special resume value (RESUME_REPOWER) if the
             * computer is already marked as "ready", meaning the browser didn't change anything.  This "repower" process
             * should be very quick, essentially just marking all components as powered again (so that, for example, the Video
             * component will start drawing again) and firing the CPU up again.
             */
            Computer.show = function()
            {
                var aeComputers = Component.getElementsByClass(window.document, PCJSCLASS, "computer");
                for (var iComputer = 0; iComputer < aeComputers.length; iComputer++) {
                    var eComputer = aeComputers[iComputer];
                    var parmsComputer = Component.getComponentParms(eComputer);
                    var computer = Component.getComponentByType("Computer", parmsComputer['id']);
                    if (computer) {
            
                        if (DEBUG && computer.messageEnabled()) {
                            computer.printMessage("onShow(" + computer.fInitialized + "," + computer.aFlags.fPowered + ")");
                        }
            
                        if (computer.fInitialized && !computer.aFlags.fPowered) {
                            /**
                             * Repower the computer, notifying every component to continue running as-is.
                             */
                            computer.powerOn(Computer.RESUME_REPOWER);
                        }
                    }
                }
            };
            
            /**
             * Computer.exit()
             *
             * The Computer is currently the only component that uses an "exit" handler, which web.onExit() defines as
             * either an "unload" or "onbeforeunload" handler.  This gives us the opportunity to save the machine state,
             * using our powerOff() function, before the page goes away.
             *
             * It's worth noting that "onbeforeunload" offers one nice feature when used instead of "onload": the entire
             * page (and therefore this entire application) is retained in its current state by the browser (well, some
             * browsers), so that if you go to a new URL, either by entering a new URL in the same window/tab, or by pressing
             * the FORWARD button, and then you press the BACK button, the page is immediately restored to its previous state.
             *
             * In fact, that's how some browsers operate whether you have an "onbeforeunload" handler or not; in other words,
             * an "onbeforeunload" handler doesn't change the page retention behavior of the browser.  By contrast, the mere
             * presence of an "onunload" handler generally causes a browser to throw the page away once the handler returns.
             *
             * However, in order to safely use "onbeforeunload", we must add yet another handler ("onpageshow") to repower
             * everything, without either resetting or restoring.  Hence, the Computer.show() function, which calls powerOn()
             * with a special resume value (RESUME_REPOWER) if the computer is already marked as "ready", meaning the browser
             * didn't change anything.  This "repower" process should be very quick, essentially just marking all components as
             * powered again (so that, for example, the Video component will start drawing again) and firing the CPU up again.
             *
             * Reportedly, some browsers (eg, Opera) don't support "onbeforeunload", in which case Component will have to use
             * "unload" instead.  But even when the page must be rebuilt from scratch, the combination of browser cache and
             * localStorage means the simulation should be restored and become operational almost immediately.
             */
            Computer.exit = function()
            {
                var aeComputers = Component.getElementsByClass(window.document, PCJSCLASS, "computer");
                for (var iComputer = 0; iComputer < aeComputers.length; iComputer++) {
                    var eComputer = aeComputers[iComputer];
                    var parmsComputer = Component.getComponentParms(eComputer);
                    var computer = Component.getComponentByType("Computer", parmsComputer['id']);
                    if (computer) {
            
                        if (DEBUG && computer.messageEnabled()) {
                            computer.printMessage("onExit(" + computer.aFlags.fPowered + ")");
                        }
            
                        if (computer.aFlags.fPowered) {
                            /**
                             * Power "down" the computer, giving every component an opportunity to save its state,
                             * but only if 'resume' has been set AND there is no valid resume path (because if a valid resume
                             * path exists, we'll always load our state from there, and not from whatever we save here).
                             */
                            computer.powerOff(!!(computer.resume && !computer.sResumePath), true);
                        }
                    }
                }
            };
            
            /*
             * Initialize every Computer on the page.
             */
            web.onInit(Computer.init);
            web.onShow(Computer.show);
            web.onExit(Computer.exit);
            
            if (typeof module !== 'undefined') module.exports = Computer;
            
          • cpu.js
            /**
             * @fileoverview Implements the PCjs CPU component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-04
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var usr         = require("../../shared/lib/usrlib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
            }
            
            /**
             * CPU(parmsCPU, nCyclesDefault)
             *
             * The CPU class supports the following (parmsCPU) properties:
             *
             *      cycles: the machine's base cycles per second; the X86CPU constructor will
             *      provide us with a default (based on the CPU model) to use as a fallback
             *
             *      multiplier: base cycle multiplier; default is 1
             *
             *      autoStart: true to automatically start, false to not, or null (default)
             *      to make the autoStart decision based on whether or not a Debugger is
             *      installed (if there's no Debugger AND no "Run" button, then auto-start,
             *      otherwise don't)
             *
             *      csStart: the number of cycles that runCPU() must wait before generating
             *      checksum records; -1 if disabled. checksum records are a diagnostic aid
             *      used to help compare one CPU run to another.
             *
             *      csInterval: the number of cycles that runCPU() must execute before
             *      generating a checksum record; -1 if disabled.
             *
             *      csStop: the number of cycles to stop generating checksum records.
             *
             * This component is primarily responsible for interfacing the CPU with the outside
             * world (eg, Panel and Debugger components), and managing overall CPU operation.
             *
             * It is extended by the X86CPU component, where all the x86-specific logic resides.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsCPU
             * @param {number} nCyclesDefault
             */
            function CPU(parmsCPU, nCyclesDefault)
            {
                Component.call(this, "CPU", parmsCPU, CPU, Messages.CPU);
            
                var nCycles = parmsCPU['cycles'] || nCyclesDefault;
            
                var nMultiplier = parmsCPU['multiplier'] || 1;
            
                this.aCounts = {};
                this.aCounts.nCyclesPerSecond = nCycles;
            
                /*
                 * nCyclesMultiplier replaces the old "speed" variable (0, 1, 2) and eliminates the need for
                 * the constants (SPEED_SLOW, SPEED_FAST and SPEED_MAX).  The UI simply doubles the multiplier
                 * until we've exceeded the host's speed limit and then starts the multiplier over at 1.
                 */
                this.aCounts.nCyclesMultiplier = nMultiplier;
                this.aCounts.mhzDefault = Math.round(this.aCounts.nCyclesPerSecond / 10000) / 100;
                /*
                 * TODO: Take care of this with an initial setSpeed() call instead?
                 */
                this.aCounts.mhzTarget = this.aCounts.mhzDefault * this.aCounts.nCyclesMultiplier;
            
                /*
                 * We add a number of flags to the set initialized by Component
                 */
                this.aFlags.fRunning = false;
                this.aFlags.fStarting = false;
                this.aFlags.fAutoStart = parmsCPU['autoStart'];
            
                /*
                 * TODO: Add some UI for fDisplayLiveRegs (either an XML property, or a UI checkbox, or both)
                 */
                this.aFlags.fDisplayLiveRegs = false;
            
                /*
                 * Provide a power-saving URL-based way of overriding the 'autostart' setting;
                 * if an "autostart" parameter is specified on the URL, anything other than "true"
                 * or "false" is treated as the null setting (see above for details).
                 */
                var sAutoStart = Component.parmsURL['autostart'];
                if (sAutoStart !== undefined) {
                    this.aFlags.fAutoStart = (sAutoStart == "true"? true : (sAutoStart  == "false"? false : null));
                }
            
                /*
                 * Get checksum parameters, if any. runCPU() behavior is not affected until fChecksum
                 * is true, which won't happen until resetChecksum() is called with nCyclesChecksumInterval
                 * ("csInterval") set to a positive value.
                 *
                 * As above, any of these parameters can also be set with the Debugger's execution options
                 * command ("x"); for example, "x cs int 5000" will set nCyclesChecksumInterval to 5000
                 * and call resetChecksum().
                 */
                this.aFlags.fChecksum = false;
                this.aCounts.nChecksum = this.aCounts.nCyclesChecksumNext = 0;
                this.aCounts.nCyclesChecksumStart = parmsCPU["csStart"];
                this.aCounts.nCyclesChecksumInterval = parmsCPU["csInterval"];
                this.aCounts.nCyclesChecksumStop = parmsCPU["csStop"];
            
                /*
                 * Initially, no video devices are attached that require CPU-driven updates.  initBus() will update this.
                 */
                this.aVideo = [];
            
                var cpu = this;
                this.onRunTimeout = function() { cpu.runCPU(); };
            
                this.setReady();
            }
            
            Component.subclass(CPU);
            
            /*
             * Constants that control the frequency at which various updates should occur.
             *
             * These values do NOT control the simulation directly.  Instead, they are used by
             * calcCycles(), which uses the nCyclesPerSecond passed to the constructor as a starting
             * point and computes the following variables:
             *
             *      this.aCounts.nCyclesPerYield         (this.aCounts.nCyclesPerSecond / CPU.YIELDS_PER_SECOND)
             *      this.aCounts.nCyclesPerVideoUpdate   (this.aCounts.nCyclesPerSecond / CPU.VIDEO_UPDATES_PER_SECOND)
             *      this.aCounts.nCyclesPerStatusUpdate  (this.aCounts.nCyclesPerSecond / CPU.STATUS_UPDATES_PER_SECOND)
             *
             * The above variables are also multiplied by any cycle multiplier in effect, via setSpeed(),
             * and then they're used to initialize another set of variables for each runCPU() iteration:
             *
             *      this.aCounts.nCyclesNextYield        <= this.aCounts.nCyclesPerYield
             *      this.aCounts.nCyclesNextVideoUpdate  <= this.aCounts.nCyclesPerVideoUpdate
             *      this.aCounts.nCyclesNextStatusUpdate <= this.aCounts.nCyclesPerStatusUpdate
             */
            CPU.YIELDS_PER_SECOND         = 30;
            CPU.VIDEO_UPDATES_PER_SECOND  = 60;     // WARNING: if you change this, beware of side-effects in the Video component
            CPU.STATUS_UPDATES_PER_SECOND = 2;
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {CPU}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {CPU} cpu
             * @param {Debugger} dbg
             */
            CPU.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.dbg = dbg;
                this.cmp = cmp;
                /*
                 * Attach the Video component to the CPU, so that the CPU can periodically update
                 * the video display via updateVideo(), as cycles permit.
                 */
                for (var video = null; (video = cmp.getComponentByType("Video", video));) {
                    this.aVideo.push(video);
                }
                /*
                 * Attach the ChipSet component to the CPU, so that it can obtain the IDT vector number of
                 * pending hardware interrupts, in response to ChipSet's updateINTR() notifications.
                 *
                 * We must also call chipset.updateAllTimers() periodically; stepCPU() takes care of that.
                 */
                this.chipset = cmp.getComponentByType("ChipSet");
                this.setReady();
            };
            
            /**
             * reset()
             *
             * This is a placeholder for reset (overridden by the X86CPU component).
             *
             * @this {CPU}
             */
            CPU.prototype.reset = function()
            {
            };
            
            /**
             * save()
             *
             * This is a placeholder for save support (overridden by the X86CPU component).
             *
             * @this {CPU}
             * @return {Object|null}
             */
            CPU.prototype.save = function()
            {
                return null;
            };
            
            /**
             * restore(data)
             *
             * This is a placeholder for restore support (overridden by the X86CPU component).
             *
             * @this {CPU}
             * @param {Object} data
             * @return {boolean} true if restore successful, false if not
             */
            CPU.prototype.restore = function(data)
            {
                return false;
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {CPU}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            CPU.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data || !this.restore) {
                        this.reset();
                    } else {
                        this.resetCycles();
                        if (!this.restore(data)) return false;
                        this.resetChecksum();
                    }
                    /*
                     * Give the Debugger a chance to do/print something once we've powered up
                     */
                    if (DEBUGGER && this.dbg) {
                        this.dbg.init();
                    } else {
                        /*
                         * The Computer (this.cmp) knows if there's a Control Panel (this.cmp.panel), and the Control Panel
                         * knows if there's a "print" control (this.cmp.panel.controlPrint), and if there IS a "print" control
                         * but no debugger, the machine is probably misconfigured (most likely, the page simply neglected to
                         * load the Debugger component).
                         *
                         * However, we don't actually need to check all that; it's always safe use println(), regardless whether
                         * a Control Panel with a "print" control is present or not.
                         */
                        this.println("No debugger detected");
                    }
                }
                /*
                 * The Computer component (which is responsible for all powerDown and powerUp notifications)
                 * is now responsible for managing a component's fPowered flag, not us.
                 *
                 *      this.aFlags.fPowered = true;
                 */
                this.updateCPU();
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {CPU}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            CPU.prototype.powerDown = function(fSave, fShutdown)
            {
                /*
                 * The Computer component (which is responsible for all powerDown and powerUp notifications)
                 * is now responsible for managing a component's fPowered flag, not us.
                 *
                 *      this.aFlags.fPowered = false;
                 */
                return fSave && this.save ? this.save() : true;
            };
            
            /**
             * autoStart()
             *
             * @this {CPU}
             * @return {boolean} true if started, false if not
             */
            CPU.prototype.autoStart = function()
            {
                if (this.aFlags.fAutoStart === true || this.aFlags.fAutoStart === null && (!DEBUGGER || !this.dbg) && this.bindings["run"] === undefined) {
                    this.runCPU();      // start running automatically on power-up, assuming there's no Debugger and no "Run" button
                    return true;
                }
                return false;
            };
            
            /**
             * isPowered()
             *
             * @this {CPU}
             * @return {boolean}
             */
            CPU.prototype.isPowered = function()
            {
                if (!this.aFlags.fPowered) {
                    this.println(this.toString() + " not powered");
                    return false;
                }
                return true;
            };
            
            /**
             * isRunning()
             *
             * @this {CPU}
             * @return {boolean}
             */
            CPU.prototype.isRunning = function()
            {
                return this.aFlags.fRunning;
            };
            
            /**
             * getChecksum()
             *
             * This will be implemented by the X86CPU component.
             *
             * @this {CPU}
             * @return {number} a 32-bit summation of key elements of the current CPU state (used by the CPU checksum code)
             */
            CPU.prototype.getChecksum = function()
            {
                return 0;
            };
            
            /**
             * resetChecksum()
             *
             * If checksum generation is enabled (fChecksum is true), this resets the running 32-bit checksum and the
             * cycle counter that will trigger the next displayChecksum(); called by resetCycles(), which is called whenever
             * the CPU is reset or restored.
             *
             * @this {CPU}
             * @return {boolean} true if checksum generation enabled, false if not
             */
            CPU.prototype.resetChecksum = function()
            {
                if (this.aCounts.nCyclesChecksumStart === undefined) this.aCounts.nCyclesChecksumStart = 0;
                if (this.aCounts.nCyclesChecksumInterval === undefined) this.aCounts.nCyclesChecksumInterval = -1;
                if (this.aCounts.nCyclesChecksumStop === undefined) this.aCounts.nCyclesChecksumStop = -1;
                this.aFlags.fChecksum = (this.aCounts.nCyclesChecksumStart >= 0 && this.aCounts.nCyclesChecksumInterval > 0);
                if (this.aFlags.fChecksum) {
                    this.aCounts.nChecksum = 0;
                    this.aCounts.nCyclesChecksumNext = this.aCounts.nCyclesChecksumStart - this.nTotalCycles;
                    // this.aCounts.nCyclesChecksumNext = this.aCounts.nCyclesChecksumStart + this.aCounts.nCyclesChecksumInterval - (this.nTotalCycles % this.aCounts.nCyclesChecksumInterval);
                    return true;
                }
                return false;
            };
            
            /**
             * updateChecksum(nCycles)
             *
             * When checksum generation is enabled (fChecksum is true), runCPU() asks stepCPU() to execute a minimum
             * number of cycles (1), effectively limiting execution to a single instruction, and then we're called with
             * the exact number cycles that were actually executed.  This should give us instruction-granular checksums
             * at precise intervals that are 100% repeatable.
             *
             * @this {CPU}
             * @param {number} nCycles
             */
            CPU.prototype.updateChecksum = function(nCycles)
            {
                if (this.aFlags.fChecksum) {
                    /*
                     * Get a 32-bit summation of the current CPU state and add it to our running 32-bit checksum
                     */
                    var fDisplay = false;
                    this.aCounts.nChecksum = (this.aCounts.nChecksum + this.getChecksum())|0;
                    this.aCounts.nCyclesChecksumNext -= nCycles;
                    if (this.aCounts.nCyclesChecksumNext <= 0) {
                        this.aCounts.nCyclesChecksumNext += this.aCounts.nCyclesChecksumInterval;
                        fDisplay = true;
                    }
                    if (this.aCounts.nCyclesChecksumStop >= 0) {
                        if (this.aCounts.nCyclesChecksumStop <= this.getCycles()) {
                            this.aCounts.nCyclesChecksumInterval = this.aCounts.nCyclesChecksumStop = -1;
                            this.resetChecksum();
                            this.stopCPU();
                            fDisplay = true;
                        }
                    }
                    if (fDisplay) this.displayChecksum();
                }
            };
            
            /**
             * displayChecksum()
             *
             * When checksum generation is enabled (fChecksum is true), this is called to provide a crude log of all
             * checksums generated at the specified cycle intervals, as specified by the "csStart" and "csInterval" parmsCPU
             * properties).
             *
             * @this {CPU}
             */
            CPU.prototype.displayChecksum = function()
            {
                this.println(this.getCycles() + " cycles: " + "checksum=" + str.toHex(this.aCounts.nChecksum));
            };
            
            /**
             * displayValue(sLabel, nValue, cch)
             *
             * This is principally for displaying register values, but in reality, it can be used to display any
             * numeric (hex) value bound to the given label.
             *
             * @this {CPU}
             * @param {string} sLabel
             * @param {number} nValue
             * @param {number} cch
             */
            CPU.prototype.displayValue = function(sLabel, nValue, cch)
            {
                if (this.bindings[sLabel]) {
                    if (nValue === undefined) {
                        this.setError("Value for " + sLabel + " is invalid");
                        this.stopCPU();
                    }
                    var sVal;
                    if (!this.aFlags.fRunning || this.aFlags.fDisplayLiveRegs) {
                        sVal = str.toHex(nValue, cch);
                    } else {
                        sVal = "--------".substr(0, cch);
                    }
                    /*
                     * TODO: Determine if this test actually avoids any redrawing when a register hasn't changed, and/or if
                     * we should maintain our own (numeric) cache of displayed register values (to avoid creating these temporary
                     * string values that will have to garbage-collected), and/or if this is actually slower, and/or if I'm being
                     * too obsessive.
                     */
                    if (this.bindings[sLabel].textContent != sVal) this.bindings[sLabel].textContent = sVal;
                }
            };
            
            /**
             * updateStatus(fForce)
             *
             * This provides periodic Control Panel updates (eg, a few times per second; see STATUS_UPDATES_PER_SECOND).
             * The X86CPU subclasses updateStatus() to take care of any DOM updates (eg, register values) while the CPU is running.
             *
             * @this {CPU}
             * @param {boolean} [fForce]
             */
            CPU.prototype.updateStatus = function(fForce)
            {
                if (this.cmp && this.cmp.panel) this.cmp.panel.updateStatus();
            };
            
            /**
             * updateVideo()
             *
             * Any high-frequency updates should be performed here.  Avoid DOM updates, since updateVideo() can be called up to
             * 60 times per second (see VIDEO_UPDATES_PER_SECOND).
             *
             * @this {CPU}
             */
            CPU.prototype.updateVideo = function()
            {
                for (var i = 0; i < this.aVideo.length; i++) {
                    this.aVideo[i].updateScreen();
                }
                if (this.cmp && this.cmp.panel) this.cmp.panel.updateAnimation();
            };
            
            /**
             * setFocus()
             *
             * @this {CPU}
             */
            CPU.prototype.setFocus = function()
            {
                if (this.aVideo.length) this.aVideo[0].setFocus();
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {CPU}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "run")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            CPU.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                var cpu = this;
                var fBound = false;
                switch (sBinding) {
                case "run":
                    this.bindings[sBinding] = control;
                    control.onclick = function onClickRun() {
                        if (!cpu.cmp || !cpu.cmp.checkPower()) return;
                        if (!cpu.aFlags.fRunning)
                            cpu.runCPU(true);
                        else
                            cpu.stopCPU(true);
                    };
                    fBound = true;
                    break;
            
                case "reset":
                    /*
                     * A "reset" button is really a function of the entire computer, not just the CPU, but
                     * it's not always convenient to stick a reset button in the computer component definition,
                     * so we support a "reset" binding both here AND in the Computer component.
                     */
                    this.bindings[sBinding] = control;
                    control.onclick = function onClickReset() {
                        if (cpu.cmp) cpu.cmp.onReset();
                    };
                    fBound = true;
                    break;
            
                case "speed":
                    this.bindings[sBinding] = control;
                    fBound = true;
                    break;
            
                case "setSpeed":
                    this.bindings[sBinding] = control;
                    control.onclick = function onClickSetSpeed() {
                        cpu.setSpeed(cpu.aCounts.nCyclesMultiplier << 1, true);
                    };
                    control.textContent = this.getSpeedTarget();
                    fBound = true;
                    break;
            
                default:
                    break;
                }
                return fBound;
            };
            
            /**
             * setBurstCycles(nCycles)
             *
             * This function is used by the ChipSet component whenever a very low timer count is set,
             * in anticipation of the timer requiring an update sooner than the normal nCyclesPerYield
             * period in runCPU() would normally provide.
             *
             * @this {CPU}
             * @param {number} nCycles is the target number of cycles to drop the current burst to
             * @return {boolean}
             */
            CPU.prototype.setBurstCycles = function(nCycles)
            {
                if (this.aFlags.fRunning) {
                    var nDelta = this.nStepCycles - nCycles;
                    /*
                     * NOTE: If nDelta is negative, we will actually be increasing nStepCycles and nBurstCycles.
                     * Which is OK, but if we're also taking snapshots of the cycle counts, to make sure that instruction
                     * costs are being properly assessed, then we need to update nSnapCycles as well.
                     *
                     * TODO: If the delta is negative, we could simply ignore the request, but we must first carefully
                     * consider the impact on the ChipSet timers.
                     */
                    if (DEBUG) this.nSnapCycles -= nDelta;
                    this.nStepCycles -= nDelta;
                    this.nBurstCycles -= nDelta;
                    return true;
                }
                return false;
            };
            
            /**
             * addCycles(nCycles, fEndStep)
             *
             * @this {CPU}
             * @param {number} nCycles
             * @param {boolean} [fEndStep]
             */
            CPU.prototype.addCycles = function(nCycles, fEndStep)
            {
                this.nTotalCycles += nCycles;
                if (fEndStep) {
                    this.nBurstCycles = this.nStepCycles = 0;
                }
            };
            
            /**
             * calcCycles(fRecalc)
             *
             * Calculate the number of cycles to process for each "burst" of CPU activity.  The size of a burst
             * is driven by the following values:
             *
             *      CPU.YIELDS_PER_SECOND (eg, 30)
             *      CPU.VIDEO_UPDATES_PER_SECOND (eg, 60)
             *      CPU.STATUS_UPDATES_PER_SECOND (eg, 5)
             *
             * The largest of the above values forces the size of the burst to its smallest value.  Let's say that
             * largest value is 30.  Assuming nCyclesPerSecond is 1,000,000, that results in bursts of 33,333 cycles.
             *
             * At the end of each burst, we subtract burst cycles from yield, video, and status cycle "threshold"
             * counters. Whenever the "next yield" cycle counter goes to (or below) zero, we compare elapsed time
             * to the time we expected the virtual hardware to take (eg, 1000ms/50 or 20ms), and if we still have time
             * remaining, we sleep the remaining time (or 0ms if there's no remaining time), and then restart runCPU().
             *
             * Similarly, whenever the "next video update" cycle counter goes to (or below) zero, we call updateVideo(),
             * and whenever the "next status update" cycle counter goes to (or below) zero, we call updateStatus().
             *
             * @this {CPU}
             * @param {boolean} [fRecalc] is true if the caller wants to recalculate thresholds based on the most recent
             * speed calculation (see calcSpeed).
             */
            CPU.prototype.calcCycles = function(fRecalc)
            {
                /*
                 * Calculate the most cycles we're allowed to execute in a single "burst"
                 */
                var nMostUpdatesPerSecond = CPU.YIELDS_PER_SECOND;
                if (nMostUpdatesPerSecond < CPU.VIDEO_UPDATES_PER_SECOND) nMostUpdatesPerSecond = CPU.VIDEO_UPDATES_PER_SECOND;
                if (nMostUpdatesPerSecond < CPU.STATUS_UPDATES_PER_SECOND) nMostUpdatesPerSecond = CPU.STATUS_UPDATES_PER_SECOND;
            
                /*
                 * Calculate cycle "per" values for the yield, video update, and status update cycle counters
                 */
                var vMultiplier = 1;
                if (fRecalc) {
                    if (this.aCounts.nCyclesMultiplier > 1 && this.aCounts.mhz) {
                        vMultiplier = (this.aCounts.mhz / this.aCounts.mhzDefault);
                    }
                }
            
                this.aCounts.msPerYield = Math.round(1000 / CPU.YIELDS_PER_SECOND);
                this.aCounts.nCyclesPerBurst = Math.floor(this.aCounts.nCyclesPerSecond / nMostUpdatesPerSecond * vMultiplier);
                this.aCounts.nCyclesPerYield = Math.floor(this.aCounts.nCyclesPerSecond / CPU.YIELDS_PER_SECOND * vMultiplier);
                this.aCounts.nCyclesPerVideoUpdate = Math.floor(this.aCounts.nCyclesPerSecond / CPU.VIDEO_UPDATES_PER_SECOND * vMultiplier);
                this.aCounts.nCyclesPerStatusUpdate = Math.floor(this.aCounts.nCyclesPerSecond / CPU.STATUS_UPDATES_PER_SECOND * vMultiplier);
            
                /*
                 * And initialize "next" yield, video update, and status update cycle "threshold" counters to those "per" values
                 */
                if (!fRecalc) {
                    this.aCounts.nCyclesNextYield = this.aCounts.nCyclesPerYield;
                    this.aCounts.nCyclesNextVideoUpdate = this.aCounts.nCyclesPerVideoUpdate;
                    this.aCounts.nCyclesNextStatusUpdate = this.aCounts.nCyclesPerStatusUpdate;
                }
                this.aCounts.nCyclesRecalc = 0;
            };
            
            /**
             * getCycles(fScaled)
             *
             * getCycles() returns the number of cycles executed so far.  Note that we can be called after
             * runCPU() OR during runCPU(), perhaps from a handler triggered during the current run's stepCPU(),
             * so nRunCycles must always be adjusted by number of cycles stepCPU() was asked to run (nBurstCycles),
             * less the number of cycles it has yet to run (nStepCycles).
             *
             * nRunCycles is zeroed whenever the CPU is halted or the CPU speed is changed, which is why we also
             * have nTotalCycles, which accumulates all nRunCycles before we zero it.  However, nRunCycles and
             * nTotalCycles eventually get reset by calcSpeed(), to avoid overflow, so components that rely on
             * getCycles() returning steadily increasing values should also be prepared for a reset at any time.
             *
             * @this {CPU}
             * @param {boolean} [fScaled] is true if the caller wants a cycle count relative to a multiplier of 1
             * @return {number}
             */
            CPU.prototype.getCycles = function(fScaled)
            {
                var nCycles = this.nTotalCycles + this.nRunCycles + this.nBurstCycles - this.nStepCycles;
                if (fScaled && this.aCounts.nCyclesMultiplier > 1 && this.aCounts.mhz > this.aCounts.mhzDefault) {
                    /*
                     * We could scale the current cycle count by the current effective speed (this.aCounts.mhz); eg:
                     *
                     *      nCycles = Math.round(nCycles / (this.aCounts.mhz / this.aCounts.mhzDefault));
                     *
                     * but that speed will fluctuate somewhat: large fluctuations at first, but increasingly smaller
                     * fluctuations after each burst of instructions that runCPU() executes.
                     *
                     * Alternatively, we can scale the cycle count by the multiplier, which is good in that the
                     * multiplier doesn't vary once the user changes it, but a potential downside is that the
                     * multiplier might be set too high, resulting in a target speed that's higher than the effective
                     * speed is able to reach.
                     *
                     * Also, if multipliers were always limited to a power-of-two, then this could be calculated
                     * with a simple shift.  However, only the "setSpeed" UI binding limits it that way; the Debugger
                     * interface allows any value, as does the CPU "multiplier" parmsCPU property (from the machine's
                     * XML file).
                     */
                    nCycles = Math.round(nCycles / this.aCounts.nCyclesMultiplier);
                }
                return nCycles;
            };
            
            /**
             * getCyclesPerSecond()
             *
             * This returns the CPU's "base" speed (ie, the original cycles per second defined for the machine)
             *
             * @this {CPU}
             * @return {number}
             */
            CPU.prototype.getCyclesPerSecond = function()
            {
                return this.aCounts.nCyclesPerSecond;
            };
            
            /**
             * resetCycles()
             *
             * Resets speed and cycle information as part of any reset() or restore(); this typically occurs during powerUp().
             * It's important that this be called BEFORE the actual restore() call, because restore() may want to call setSpeed(),
             * which in turn assumes that all the cycle counts have been initialized to sensible values.
             *
             * @this {CPU}
             */
            CPU.prototype.resetCycles = function()
            {
                this.aCounts.mhz = 0;
                this.nTotalCycles = this.nRunCycles = this.nBurstCycles = this.nStepCycles = 0;
                this.resetChecksum();
                this.setSpeed(1);
            };
            
            /**
             * getSpeed()
             *
             * @this {CPU}
             * @return {number} the current speed multiplier
             */
            CPU.prototype.getSpeed = function()
            {
                return this.aCounts.nCyclesMultiplier;
            };
            
            /**
             * getSpeedCurrent()
             *
             * @this {CPU}
             * @return {string} the current speed, in mhz, as a string formatted to two decimal places
             */
            CPU.prototype.getSpeedCurrent = function()
            {
                /*
                 * TODO: Has toFixed() been "fixed" in all browsers (eg, IE) to return a rounded value now?
                 */
                return ((this.aFlags.fRunning && this.aCounts.mhz)? (this.aCounts.mhz.toFixed(2) + "Mhz") : "Stopped");
            };
            
            /**
             * getSpeedTarget()
             *
             * @this {CPU}
             * @return {string} the target speed, in mhz, as a string formatted to two decimal places
             */
            CPU.prototype.getSpeedTarget = function()
            {
                /*
                 * TODO: Has toFixed() been "fixed" in all browsers (eg, IE) to return a rounded value now?
                 */
                return this.aCounts.mhzTarget.toFixed(2) + "Mhz";
            };
            
            /**
             * setSpeed(nMultiplier, fOnClick)
             *
             * NOTE: This used to return the target speed, in mhz, but no callers appear to care at this point.
             *
             * @this {CPU}
             * @param {number} [nMultiplier] is the new proposed multiplier (reverts to 1 if the target was too high)
             * @param {boolean} [fOnClick] is true if called from a click handler that might have stolen focus
             * @desc Whenever the speed is changed, the running cycle count and corresponding start time must be reset,
             * so that the next effective speed calculation obtains sensible results.  In fact, when runCPU() initially calls
             * setSpeed() with no parameters, that's all this function does (it doesn't change the current speed setting).
             */
            CPU.prototype.setSpeed = function(nMultiplier, fOnClick)
            {
                if (nMultiplier !== undefined) {
                    /*
                     * If we couldn't reach at least 80% (0.8) of the current target speed,
                     * then revert the multiplier back to one.
                     */
                    if (this.aCounts.mhz / this.aCounts.mhzTarget < 0.8) nMultiplier = 1;
                    this.aCounts.nCyclesMultiplier = nMultiplier;
                    var mhz = this.aCounts.mhzDefault * this.aCounts.nCyclesMultiplier;
                    if (this.aCounts.mhzTarget != mhz) {
                        this.aCounts.mhzTarget = mhz;
                        var sSpeed = this.getSpeedTarget();
                        var controlSpeed = this.bindings["setSpeed"];
                        if (controlSpeed) controlSpeed.textContent = sSpeed;
                        this.println("target speed: " + sSpeed);
                    }
                    if (fOnClick) this.setFocus();
                }
                this.addCycles(this.nRunCycles);
                this.nRunCycles = 0;
                this.aCounts.msStartRun = usr.getTime();
                this.aCounts.msEndThisRun = 0;
                this.calcCycles();
            };
            
            /**
             * calcSpeed(nCycles, msElapsed)
             *
             * @this {CPU}
             * @param {number} nCycles
             * @param {number} msElapsed
             */
            CPU.prototype.calcSpeed = function(nCycles, msElapsed)
            {
                if (msElapsed) {
                    this.aCounts.mhz = Math.round(nCycles / (msElapsed * 10)) / 100;
                    if (msElapsed >= 86400000) {
                        this.nTotalCycles = 0;
                        if (this.chipset) this.chipset.updateAllTimers(true);
                        this.setSpeed();        // reset all counters once per day so that we never have to worry about overflow
                    }
                }
            };
            
            /**
             * calcStartTime()
             *
             * @this {CPU}
             */
            CPU.prototype.calcStartTime = function()
            {
                if (this.aCounts.nCyclesRecalc >= this.aCounts.nCyclesPerSecond) {
                    this.calcCycles(true);
                }
                this.aCounts.nCyclesThisRun = 0;
                this.aCounts.msStartThisRun = usr.getTime();
            
                /*
                 * Try to detect situations where the browser may have throttled us, such as when the user switches
                 * to a different tab; in those situations, Chrome and Safari may restrict setTimeout() callbacks
                 * to roughly one per second.
                 *
                 * Another scenario: the user resizes the browser window.  setTimeout() callbacks are not throttled,
                 * but there can still be enough of a lag between the callbacks that CPU speed will be noticeably
                 * erratic if we don't compensate for it here.
                 *
                 * We can detect throttling/lagging by verifying that msEndThisRun (which was set at the end of the
                 * previous run and includes any requested sleep time) is comparable to the current msStartThisRun;
                 * if the delta is significant, we compensate by bumping msStartRun forward by that delta.
                 *
                 * This shouldn't be triggered when the Debugger halts the CPU, because setSpeed() -- which is called
                 * whenever the CPU starts running again -- zeroes msEndThisRun.
                 *
                 * This also won't do anything about other internal delays; for example, Debugger message() calls.
                 * By the time the message() function has called yieldCPU(), the cost of the message has already been
                 * incurred, so it will be end up being charged against the instruction(s) that triggered it.
                 *
                 * TODO: Consider calling yieldCPU() sooner from message(), so that it can arrange for the msEndThisRun
                 * "snapshot" to occur sooner; it's unclear, however, whether that will really improve the CPU's ability
                 * to hit its target speed, since you would expect any instruction that displays a message to be an
                 * EXTREMELY slow instruction.
                 */
                if (this.aCounts.msEndThisRun) {
                    var msDelta = this.aCounts.msStartThisRun - this.aCounts.msEndThisRun;
                    if (msDelta > this.aCounts.msPerYield) {
                        if (MAXDEBUG) this.println("large time delay: " + msDelta + "ms");
                        this.aCounts.msStartRun += msDelta;
                        /*
                         * Bumping msStartRun forward should NEVER cause it to exceed msStartThisRun; however, just
                         * in case, I make absolutely sure it cannot happen, since doing so could result in negative
                         * speed calculations.
                         */
                        this.assert(this.aCounts.msStartRun <= this.aCounts.msStartThisRun);
                        if (this.aCounts.msStartRun > this.aCounts.msStartThisRun) {
                            this.aCounts.msStartRun = this.aCounts.msStartThisRun;
                        }
                    }
                }
            };
            
            /**
             * calcRemainingTime()
             *
             * @this {CPU}
             * @return {number}
             */
            CPU.prototype.calcRemainingTime = function()
            {
                this.aCounts.msEndThisRun = usr.getTime();
            
                var msYield = this.aCounts.msPerYield;
                if (this.aCounts.nCyclesThisRun) {
                    /*
                     * Normally, we would assume we executed a full quota of work over msPerYield, but since the CPU
                     * now has the option of calling yieldCPU(), that might not be true.  If nCyclesThisRun is correct, then
                     * the ratio of nCyclesThisRun/nCyclesPerYield should represent the percentage of work we performed,
                     * and so applying that percentage to msPerYield should give us a better estimate of work vs. time.
                     */
                    msYield = Math.round(msYield * this.aCounts.nCyclesThisRun / this.aCounts.nCyclesPerYield);
                }
            
                var msElapsedThisRun = this.aCounts.msEndThisRun - this.aCounts.msStartThisRun;
                var msRemainsThisRun = msYield - msElapsedThisRun;
            
                /*
                 * We could pass only "this run" results to calcSpeed():
                 *
                 *      nCycles = this.aCounts.nCyclesThisRun;
                 *      msElapsed = msElapsedThisRun;
                 *
                 * but it seems preferable to use longer time periods and hopefully get a more accurate speed.
                 *
                 * Also, if msRemainsThisRun >= 0 && this.aCounts.nCyclesMultiplier == 1, we could pass these results instead:
                 *
                 *      nCycles = this.aCounts.nCyclesThisRun;
                 *      msElapsed = this.aCounts.msPerYield;
                 *
                 * to insure that we display a smooth, constant N Mhz.  But for now, I prefer seeing any fluctuations.
                 */
                var nCycles = this.nRunCycles;
                var msElapsed = this.aCounts.msEndThisRun - this.aCounts.msStartRun;
            
                if (MAXDEBUG && msRemainsThisRun < 0 && this.aCounts.nCyclesMultiplier > 1) {
                    this.println("warning: updates @" + msElapsedThisRun + "ms (prefer " + Math.round(msYield) + "ms)");
                }
            
                this.calcSpeed(nCycles, msElapsed);
            
                if (msRemainsThisRun < 0 || this.aCounts.mhz < this.aCounts.mhzTarget) {
                    /*
                     * If the last burst took MORE time than we allotted (ie, it's taking more than 1 second to simulate
                     * nCyclesPerSecond), all we can do is yield for as little time as possible (ie, 0ms) and hope that the
                     * simulation is at least usable.
                     */
                    msRemainsThisRun = 0;
                }
            
                /*
                 * Last but not least, update nCyclesRecalc, so that when runCPU() starts up again and calls calcStartTime(),
                 * it'll be ready to decide if calcCycles() should be called again.
                 */
                this.aCounts.nCyclesRecalc += this.aCounts.nCyclesThisRun;
            
                if (DEBUG && this.messageEnabled(Messages.LOG) && msRemainsThisRun) {
                    this.log("calcRemainingTime: " + msRemainsThisRun + "ms to sleep after " + this.aCounts.msEndThisRun + "ms");
                }
            
                this.aCounts.msEndThisRun += msRemainsThisRun;
                return msRemainsThisRun;
            };
            
            /**
             * runCPU(fOnClick)
             *
             * @this {CPU}
             * @param {boolean} [fOnClick] is true if called from a click handler that might have stolen focus
             */
            CPU.prototype.runCPU = function(fOnClick)
            {
                if (!this.setBusy(true)) {
                    this.updateCPU();
                    if (this.cmp) this.cmp.stop(usr.getTime(), this.getCycles());
                    return;
                }
            
                this.startCPU(fOnClick);
            
                /*
                 *  calcStartTime() initializes the cycle counter and timestamp for this runCPU() invocation, and optionally
                 *  recalculates the the maximum number of cycles for each burst if the nCyclesRecalc threshold has been reached.
                 */
                this.calcStartTime();
                try {
                    do {
                        var nCyclesPerBurst = (this.aFlags.fChecksum? 1 : this.aCounts.nCyclesPerBurst);
            
                        if (this.chipset) {
                            this.chipset.updateAllTimers();
                            nCyclesPerBurst = this.chipset.getTimerCycleLimit(0, nCyclesPerBurst);
                            nCyclesPerBurst = this.chipset.getRTCCycleLimit(nCyclesPerBurst);
                        }
            
                        /*
                         * nCyclesPerBurst is how many cycles we WANT to run on each iteration of stepCPU(), but it may run
                         * significantly less (or slightly more, since we can't execute partial instructions).
                         */
                        this.stepCPU(nCyclesPerBurst);
            
                        /*
                         * nBurstCycles, less any remaining nStepCycles, is how many cycles stepCPU() ACTUALLY ran (nCycles).
                         * We add that to nCyclesThisRun, as well as nRunCycles, which is the cycle count since the CPU first
                         * started running.
                         */
                        var nCycles = this.nBurstCycles - this.nStepCycles;
                        this.nRunCycles += nCycles;
                        this.aCounts.nCyclesThisRun += nCycles;
                        this.addCycles(0, true);
                        this.updateChecksum(nCycles);
            
                        this.aCounts.nCyclesNextVideoUpdate -= nCycles;
                        if (this.aCounts.nCyclesNextVideoUpdate <= 0) {
                            this.aCounts.nCyclesNextVideoUpdate += this.aCounts.nCyclesPerVideoUpdate;
                            this.updateVideo();
                        }
            
                        this.aCounts.nCyclesNextStatusUpdate -= nCycles;
                        if (this.aCounts.nCyclesNextStatusUpdate <= 0) {
                            this.aCounts.nCyclesNextStatusUpdate += this.aCounts.nCyclesPerStatusUpdate;
                            this.updateStatus();
                        }
            
                        this.aCounts.nCyclesNextYield -= nCycles;
                        if (this.aCounts.nCyclesNextYield <= 0) {
                            this.aCounts.nCyclesNextYield += this.aCounts.nCyclesPerYield;
                            break;
                        }
                    } while (this.aFlags.fRunning);
                }
                catch (e) {
                    this.stopCPU();
                    this.updateCPU();
                    if (this.cmp) this.cmp.stop(usr.getTime(), this.getCycles());
                    this.setBusy(false);
                    this.setError(e.stack || e.message);
                    return;
                }
                setTimeout(this.onRunTimeout, this.calcRemainingTime());
            };
            
            /**
             * startCPU(fSetFocus)
             *
             * WARNING: Other components must use runCPU() to get the CPU running; this is a runCPU() helper function only.
             *
             * @param {boolean} [fSetFocus]
             */
            CPU.prototype.startCPU = function(fSetFocus)
            {
                if (!this.aFlags.fRunning) {
                    /*
                     *  setSpeed() without a speed parameter leaves the selected speed in place, but also resets the
                     *  cycle counter and timestamp for the current series of runCPU() calls, calculates the maximum number
                     *  of cycles for each burst based on the last known effective CPU speed, and resets the nCyclesRecalc
                     *  threshold counter.
                     */
                    this.setSpeed();
                    if (this.cmp) this.cmp.start(this.aCounts.msStartRun, this.getCycles());
                    this.aFlags.fRunning = true;
                    this.aFlags.fStarting = true;
                    if (this.chipset) this.chipset.setSpeaker();
                    var controlRun = this.bindings["run"];
                    if (controlRun) controlRun.textContent = "Halt";
                    this.updateStatus(true);
                    if (fSetFocus) this.setFocus();
                }
            };
            
            /**
             * stepCPU(nMinCycles)
             *
             * This will be implemented by the X86CPU component.
             *
             * @this {CPU}
             * @param {number} nMinCycles (0 implies a single-step, and therefore breakpoints should be ignored)
             * @return {number} of cycles executed; 0 indicates that the last instruction was not executed
             */
            CPU.prototype.stepCPU = function(nMinCycles)
            {
                return 0;
            };
            
            /**
             * stopCPU(fComplete)
             *
             * For use by any component that wants to stop the CPU.
             *
             * This similar to yieldCPU(), but it doesn't need to zero nCyclesNextYield to break out of runCPU();
             * it simply needs to clear fRunning (well, "simply" may be oversimplifying a bit....)
             *
             * @this {CPU}
             * @param {boolean} [fComplete]
             */
            CPU.prototype.stopCPU = function(fComplete)
            {
                this.isBusy(true);
                this.nBurstCycles -= this.nStepCycles;
                this.nStepCycles = 0;
                this.addCycles(this.nRunCycles);
                this.nRunCycles = 0;
                if (this.aFlags.fRunning) {
                    this.aFlags.fRunning = false;
                    if (this.chipset) this.chipset.setSpeaker();
                    var controlRun = this.bindings["run"];
                    if (controlRun) controlRun.textContent = "Run";
                }
                this.aFlags.fComplete = fComplete;
            };
            
            /**
             * updateCPU()
             *
             * This used to be performed at the end of every stepCPU(), but runCPU() -- which relies upon
             * stepCPU() -- needed to have more control over when these updates are performed.  However, for
             * other callers of stepCPU(), such as the Debugger, the combination of stepCPU() + updateCPU()
             * provides the old behavior.
             *
             * @this {CPU}
             */
            CPU.prototype.updateCPU = function()
            {
                this.updateVideo();
                this.updateStatus();
            };
            
            /**
             * yieldCPU()
             *
             * Similar to stopCPU() with regard to how it resets various cycle countdown values, but the CPU
             * remains in a "running" state.
             *
             * @this {CPU}
             */
            CPU.prototype.yieldCPU = function()
            {
                this.aCounts.nCyclesNextYield = 0;  // this will break us out of runCPU(), once we break out of stepCPU()
                this.nBurstCycles -= this.nStepCycles;
                this.nStepCycles = 0;               // this will break us out of stepCPU()
                if (DEBUG) this.nSnapCycles = this.nBurstCycles;
                /*
                 * The Debugger calls yieldCPU() after every message() to ensure browser responsiveness, but it looks
                 * odd for those messages to show CPU state changes but for the CPU's own status display to not (ditto
                 * for the Video display), so I've added this call to try to keep things looking synchronized.
                 */
                this.updateCPU();
            };
            
            if (typeof module !== 'undefined') module.exports = CPU;
            
          • debugger.js
            /**
             * @fileoverview Implements the PCjs Debugger component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-21
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (DEBUGGER) {
                if (typeof module !== 'undefined') {
                    var str         = require("../../shared/lib/strlib");
                    var usr         = require("../../shared/lib/usrlib");
                    var web         = require("../../shared/lib/weblib");
                    var Component   = require("../../shared/lib/component");
                    var Interrupts  = require("./interrupts");
                    var Messages    = require("./messages");
                    var Bus         = require("./bus");
                    var Memory      = require("./memory");
                    var Keyboard    = require("./keyboard");
                    var State       = require("./state");
                    var CPU         = require("./cpu");
                    var X86         = require("./x86");
                    var X86Seg      = require("./x86seg");
                }
            }
            
            /**
             * Debugger Address Object
             *
             * When off is null, the entire address is considered invalid.
             *
             * When sel is null, addr must be set to a valid linear address.
             *
             * When addr is null (or reset to null), it will be recomputed from sel:off.
             *
             * NOTE: I originally tried to define DbgAddr as a record typedef, which allowed me to reference the type
             * as {DbgAddr} instead of {{DbgAddr}}, but my IDE (WebStorm) did not recognize all instances of {DbgAddr}.
             * Using this @class definition is a bit cleaner, and it makes both WebStorm and the Closure Compiler happier,
             * at the expense of making all references {{DbgAddr}}.  Defining a typedef based on this class doesn't help.
             *
             * @class DbgAddr
             * @property {number|null|undefined} off (offset, if any)
             * @property {number|null|undefined} sel (selector, if any)
             * @property {number|null|undefined} addr (linear address, if any)
             * @property {boolean|undefined} fData32 (true if 32-bit operand size in effect)
             * @property {boolean|undefined} fAddr32 (true if 32-bit address size in effect)
             * @property {boolean|undefined} fOverride (true if any overrides were processed with this address)
             * @property {boolean|undefined} fComplete (true if a complete instruction was processed with this address)
             * @property {boolean|undefined} fTempBreak (true if this is a temporary breakpoint address)
             */
            
            /**
             * Debugger(parmsDbg)
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsDbg
             *
             * The Debugger component supports the following optional (parmsDbg) properties:
             *
             *      commands: string containing zero or more commands, separated by ';'
             *
             *      messages: string containing zero or more message categories to enable;
             *      multiple categories must be separated by '|' or ';'.  Parsed by messageInit().
             *
             * The Debugger component is an optional component that implements a variety of user
             * commands for controlling the CPU, dumping and editing memory, etc.
             */
            function Debugger(parmsDbg)
            {
                if (DEBUGGER) {
            
                    Component.call(this, "Debugger", parmsDbg, Debugger);
            
                    /*
                     * These keep track of instruction activity, but only when tracing or when Debugger checks
                     * have been enabled (eg, one or more breakpoints have been set).
                     *
                     * They are zeroed by the reset() notification handler.  cInstructions is advanced by
                     * stepCPU() and checkInstruction() calls.  nCycles is updated by every stepCPU() or stop()
                     * call and simply represents the number of cycles performed by the last run of instructions.
                     */
                    this.nCycles = -1;
                    this.cInstructions = -1;
            
                    /*
                     * Default number of hex chars in a register and a linear address (ie, for real-mode);
                     * updated by initBus().
                     */
                    this.cchReg = 4;
                    this.maskReg = 0xffff;
                    this.cchAddr = 5;
                    this.maskAddr = 0xfffff;
            
                    /*
                     * Most commands that require an address call parseAddr(), which defaults to dbgAddrNextCode
                     * or dbgAddrNextData when no address has been given.  doDump() and doUnassemble(), in turn,
                     * update dbgAddrNextData and dbgAddrNextCode, respectively, when they're done.
                     *
                     * All dbgAddr variables contain properties off, sel, and addr, where sel:off represents the
                     * segmented address and addr is the corresponding linear address (if known).  For certain
                     * segmented addresses (eg, breakpoint addresses), we pre-compute the linear address and save
                     * that in addr, so that the breakpoint will still operate as intended even if the mode changes
                     * later (eg, from real-mode to protected-mode).
                     *
                     * Finally, for TEMPORARY breakpoint addresses, we set fTempBreak to true, so that they can be
                     * automatically cleared when they're hit.
                     */
                    this.dbgAddrNextCode = this.newAddr();
                    this.dbgAddrNextData = this.newAddr();
            
                    /*
                     * This maintains command history.  New commands are inserted at index 0 of the array.
                     * When Enter is pressed on an empty input buffer, we default to the command at aPrevCmds[0].
                     */
                    this.iPrevCmd = -1;
                    this.aPrevCmds = [];
            
                    /*
                     * fAssemble is true when "assemble mode" is active, false when not.
                     */
                    this.fAssemble = false;
                    this.dbgAddrAssemble = this.newAddr();
            
                    /*
                     * aSymbolTable is an array of 4-element arrays, one per ROM or other chunk of address space.
                     * Each 4-element arrays contains:
                     *
                     *      [0]: addr
                     *      [1]: size
                     *      [2]: aSymbols
                     *      [3]: aOffsetPairs
                     *
                     * See addSymbols() for more details, since that's how callers add sets of symbols to the table.
                     */
                    this.aSymbolTable = [];
            
                    /*
                     * clearBreakpoints() initializes the breakpoints lists: aBreakExec is a list of addresses
                     * to halt on whenever attempting to execute an instruction at the corresponding address,
                     * and aBreakRead and aBreakWrite are lists of addresses to halt on whenever a read or write,
                     * respectively, occurs at the corresponding address.
                     */
                    this.clearBreakpoints();
            
                    /*
                     * Execution history is allocated by historyInit() whenever checksEnabled() conditions change.
                     * Execution history is updated whenever the CPU calls checkInstruction(), which will happen
                     * only when checksEnabled() returns true (eg, whenever one or more breakpoints have been set).
                     * This ensures that, by default, the CPU runs as fast as possible.
                     */
                    this.historyInit();
            
                    /*
                     * Initialize Debugger message support
                     */
                    this.messageInit(parmsDbg['messages']);
            
                    /*
                     * The instruction trace buffer is a lightweight logging mechanism with minimal impact
                     * on the browser (unlike printing to either console.log or an HTML control, which can
                     * make the browser unusable if printing is too frequent).  The Debugger's info command
                     * ("n dump [#]") dumps this buffer.  Note that dumping too much at once can also bog
                     * things down, but by that point, you've presumably already captured the info you need
                     * and are willing to wait.
                     */
                    if (DEBUG) this.traceInit();
            
                    this.sInitCommands = parmsDbg['commands'];
            
                    /*
                     * Make it easier to access Debugger commands from an external REPL (eg, the WebStorm
                     * "live" console window); eg:
                     *
                     *      $('r')
                     *      $('dw 0:0')
                     *      $('h')
                     *      ...
                     */
                    var dbg = this;
                    if (window) {
                        if (window['$'] === undefined) {
                            window['$'] = function(s) { return dbg.doCommand(s); };
                        }
                    } else {
                        if (global['$'] === undefined) {
                            global['$'] = function(s) { return dbg.doCommand(s); };
                        }
                    }
            
                }   // endif DEBUGGER
            }
            
            if (DEBUGGER) {
            
                Component.subclass(Debugger);
            
                /*
                 * Information regarding interrupts of interest (used by messageInt() and others)
                 */
                Debugger.INT_MESSAGES = {
                    0x10:       Messages.VIDEO,
                    0x13:       Messages.FDC,
                    0x15:       Messages.CHIPSET,
                    0x16:       Messages.KEYBOARD,
                 // 0x1a:       Messages.RTC,       // ChipSet contains its own custom messageInt() handler for the RTC
                    0x1c:       Messages.TIMER,
                    0x21:       Messages.DOS,
                    0x33:       Messages.MOUSE
                };
            
                Debugger.COMMANDS = {
                    '?':     "help",
                    'a [#]': "assemble",
                    'b [#]': "breakpoint",
                    'c':     "clear output",
                    'd [#]': "dump memory",
                    'e [#]': "edit memory",
                    'f':     "frequencies",
                    'g [#]': "go [to #]",
                    'h [#]': "halt/history",
                    'i [#]': "input port #",
                    'k':     "stack trace",
                    'l':     "load sector(s)",
                    'm':     "messages",
                    'o [#]': "output port #",
                    'p':     "step over",
                    'r':     "dump/edit registers",
                    't [#]': "step instruction(s)",
                    'u [#]': "unassemble",
                    'x':     "execution options",
                    'reset': "reset computer",
                    'ver':   "display version"
                };
            
                /*
                 * Address types for parseAddr(), to help choose between dbgAddrNextCode and dbgAddrNextData
                 */
                Debugger.ADDR_CODE = 1;
                Debugger.ADDR_DATA = 2;
            
                /*
                 * Instruction ordinals
                 */
                Debugger.INS = {
                    NONE:   0,   AAA:    1,   AAD:    2,   AAM:    3,   AAS:    4,   ADC:    5,   ADD:    6,   AND:    7,
                    ARPL:   8,   AS:     9,   BOUND:  10,  BSF:    11,  BSR:    12,  BT:     13,  BTC:    14,  BTR:    15,
                    BTS:    16,  CALL:   17,  CBW:    18,  CLC:    19,  CLD:    20,  CLI:    21,  CLTS:   22,  CMC:    23,
                    CMP:    24,  CMPSB:  25,  CMPSW:  26,  CS:     27,  CWD:    28,  DAA:    29,  DAS:    30,  DEC:    31,
                    DIV:    32,  DS:     33,  ENTER:  34,  ES:     35,  ESC:    36,  FADD:   37,  FBLD:   38,  FBSTP:  39,
                    FCOM:   40,  FCOMP:  41,  FDIV:   42,  FDIVR:  43,  FIADD:  44,  FICOM:  45,  FICOMP: 46,  FIDIV:  47,
                    FIDIVR: 48,  FILD:   49,  FIMUL:  50,  FIST:   51,  FISTP:  52,  FISUB:  53,  FISUBR: 54,  FLD:    55,
                    FLDCW:  56,  FLDENV: 57,  FMUL:   58,  FNSAVE: 59,  FNSTCW: 60,  FNSTENV:61,  FNSTSW: 62,  FRSTOR: 63,
                    FS:     64,  FST:    65,  FSTP:   66,  FSUB:   67,  FSUBR:  68,  GS:     69,  HLT:    70,  IDIV:   71,
                    IMUL:   72,  IN:     73,  INC:    74,  INS:    75,  INT:    76,  INT3:   77,  INTO:   78,  IRET:   79,
                    JBE:    80,  JC:     81,  JCXZ:   82,  JG:     83,  JGE:    84,  JL:     85,  JLE:    86,  JMP:    87,
                    JA:     88,  JNC:    89,  JNO:    90,  JNP:    91,  JNS:    92,  JNZ:    93,  JO:     94,  JP:     95,
                    JS:     96,  JZ:     97,  LAHF:   98,  LAR:    99,  LDS:    100, LEA:    101, LEAVE:  102, LES:    103,
                    LFS:    104, LGDT:   105, LGS:    106, LIDT:   107, LLDT:   108, LMSW:   109, LOADALL:110, LOCK:   111,
                    LODSB:  112, LODSW:  113, LOOP:   114, LOOPNZ: 115, LOOPZ:  116, LSL:    117, LSS:    118, LTR:    119,
                    MOV:    120, MOVSB:  121, MOVSW:  122, MOVSX:  123, MOVZX:  124, MUL:    125, NEG:    126, NOP:    127,
                    NOT:    128, OR:     129, OS:     130, OUT:    131, OUTS:   132, POP:    133, POPA:   134, POPF:   135,
                    PUSH:   136, PUSHA:  137, PUSHF:  138, RCL:    139, RCR:    140, REPNZ:  141, REPZ:   142, RET:    143,
                    RETF:   144, ROL:    145, ROR:    146, SAHF:   147, SALC:   148, SAR:    149, SBB:    150, SCASB:  151,
                    SCASW:  152, SETBE:  153, SETC:   154, SETG:   155, SETGE:  156, SETL:   157, SETLE:  158, SETNBE: 159,
                    SETNC:  160, SETNO:  161, SETNP:  162, SETNS:  163, SETNZ:  164, SETO:   165, SETP:   166, SETS:   167,
                    SETZ:   168, SGDT:   169, SHL:    170, SHLD:   171, SHR:    172, SHRD:   173, SIDT:   174, SLDT:   175,
                    SMSW:   176, SS:     177, STC:    178, STD:    179, STI:    180, STOSB:  181, STOSW:  182, STR:    183,
                    SUB:    184, TEST:   185, VERR:   186, VERW:   187, WAIT:   188, XCHG:   189, XLAT:   190, XOR:    191,
                    GRP1B:  192, GRP1W:  193, GRP1SW: 194, GRP2B:  195, GRP2W:  196, GRP2B1: 197, GRP2W1: 198, GRP2BC: 199,
                    GRP2WC: 200, GRP3B:  201, GRP3W:  202, GRP4B:  203, GRP4W:  204, OP0F:   205, GRP6:   206, GRP7:   207,
                    GRP8:   208
                };
            
                /*
                 * Instruction names (mnemonics), indexed by instruction ordinal (above)
                 */
                Debugger.INS_NAMES = [
                    "INVALID","AAA",    "AAD",    "AAM",    "AAS",    "ADC",    "ADD",    "AND",
                    "ARPL",   "AS:",    "BOUND",  "BSF",    "BSR",    "BT",     "BTC",    "BTR",
                    "BTS",    "CALL",   "CBW",    "CLC",    "CLD",    "CLI",    "CLTS",   "CMC",
                    "CMP",    "CMPSB",  "CMPSW",  "CS:",    "CWD",    "DAA",    "DAS",    "DEC",
                    "DIV",    "DS:",    "ENTER",  "ES:",    "ESC",    "FADD",   "FBLD",   "FBSTP",
                    "FCOM",   "FCOMP",  "FDIV",   "FDIVR",  "FIADD",  "FICOM",  "FICOMP", "FIDIV",
                    "FIDIVR", "FILD",   "FIMUL",  "FIST",   "FISTP",  "FISUB",  "FISUBR", "FLD",
                    "FLDCW",  "FLDENV", "FMUL",   "FNSAVE", "FNSTCW", "FNSTENV","FNSTSW", "FRSTOR",
                    "FS:",    "FST",    "FSTP",   "FSUB",   "FSUBR",  "GS:",    "HLT",    "IDIV",
                    "IMUL",   "IN",     "INC",    "INS",    "INT",    "INT3",   "INTO",   "IRET",
                    "JBE",    "JC",     "JCXZ",   "JG",     "JGE",    "JL",     "JLE",    "JMP",
                    "JA",     "JNC",    "JNO",    "JNP",    "JNS",    "JNZ",    "JO",     "JP",
                    "JS",     "JZ",     "LAHF",   "LAR",    "LDS",    "LEA",    "LEAVE",  "LES",
                    "LFS",    "LGDT",   "LGS",    "LIDT",   "LLDT",   "LMSW",   "LOADALL","LOCK",
                    "LODSB",  "LODSW",  "LOOP",   "LOOPNZ", "LOOPZ",  "LSL",    "LSS",    "LTR",
                    "MOV",    "MOVSB",  "MOVSW",  "MOVSX",  "MOVZX",  "MUL",    "NEG",    "NOP",
                    "NOT",    "OR",     "OS:",    "OUT",    "OUTS",   "POP",    "POPA",   "POPF",
                    "PUSH",   "PUSHA",  "PUSHF",  "RCL",    "RCR",    "REPNZ",  "REPZ",   "RET",
                    "RETF",   "ROL",    "ROR",    "SAHF",   "SALC",   "SAR",    "SBB",    "SCASB",
                    "SCASW",  "SETBE",  "SETC",   "SETG",   "SETGE",  "SETL",   "SETLE",  "SETNBE",
                    "SETNC",  "SETNO",  "SETNP",  "SETNS",  "SETNZ",  "SETO",   "SETP",   "SETS",
                    "SETZ",   "SGDT",   "SHL",    "SHLD",   "SHR",    "SHRD",   "SIDT",   "SLDT",
                    "SMSW",   "SS:",    "STC",    "STD",    "STI",    "STOSB",  "STOSW",  "STR",
                    "SUB",    "TEST",   "VERR",   "VERW",   "WAIT",   "XCHG",   "XLAT",   "XOR"
                ];
            
                Debugger.CPU_8086  = 0;
                Debugger.CPU_80186 = 1;
                Debugger.CPU_80286 = 2;
                Debugger.CPU_80386 = 3;
                Debugger.CPUS = [8086, 80186, 80286, 80386];
            
                /*
                 * ModRM masks and definitions
                 */
                Debugger.REG_AL  = 0x00;             // bits 0-2 are standard Reg encodings
                Debugger.REG_CL  = 0x01;
                Debugger.REG_DL  = 0x02;
                Debugger.REG_BL  = 0x03;
                Debugger.REG_AH  = 0x04;
                Debugger.REG_CH  = 0x05;
                Debugger.REG_DH  = 0x06;
                Debugger.REG_BH  = 0x07;
                Debugger.REG_AX  = 0x08;
                Debugger.REG_CX  = 0x09;
                Debugger.REG_DX  = 0x0A;
                Debugger.REG_BX  = 0x0B;
                Debugger.REG_SP  = 0x0C;
                Debugger.REG_BP  = 0x0D;
                Debugger.REG_SI  = 0x0E;
                Debugger.REG_DI  = 0x0F;
                Debugger.REG_SEG = 0x10;
                Debugger.REG_IP  = 0x16;
                Debugger.REG_PS  = 0x17;
                Debugger.REG_EAX = 0x18;
                Debugger.REG_ECX = 0x19;
                Debugger.REG_EDX = 0x1A;
                Debugger.REG_EBX = 0x1B;
                Debugger.REG_ESP = 0x1C;
                Debugger.REG_EBP = 0x1D;
                Debugger.REG_ESI = 0x1E;
                Debugger.REG_EDI = 0x1F;
                Debugger.REG_CR0 = 0x20;
                Debugger.REG_CR1 = 0x21;
                Debugger.REG_CR2 = 0x22;
                Debugger.REG_CR3 = 0x23;
            
                Debugger.REGS = [
                    "AL",  "CL",  "DL",  "BL",  "AH",  "CH",  "DH",  "BH",
                    "AX",  "CX",  "DX",  "BX",  "SP",  "BP",  "SI",  "DI",
                    "ES",  "CS",  "SS",  "DS",  "FS",  "GS",  "IP",  "PS",
                    "EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI",
                    "CR0", "CR1", "CR2", "CR3"
                ];
            
                Debugger.REG_ES         = 0x00;     // bits 0-1 are standard SegReg encodings
                Debugger.REG_CS         = 0x01;
                Debugger.REG_SS         = 0x02;
                Debugger.REG_DS         = 0x03;
                Debugger.REG_FS         = 0x04;
                Debugger.REG_GS         = 0x05;
                Debugger.REG_UNKNOWN    = 0x00;
            
                Debugger.MOD_NODISP     = 0x00;     // use RM below, no displacement
                Debugger.MOD_DISP8      = 0x01;     // use RM below + 8-bit displacement
                Debugger.MOD_DISP16     = 0x02;     // use RM below + 16-bit displacement
                Debugger.MOD_REGISTER   = 0x03;     // use REG above
            
                Debugger.RM_BXSI        = 0x00;
                Debugger.RM_BXDI        = 0x01;
                Debugger.RM_BPSI        = 0x02;
                Debugger.RM_BPDI        = 0x03;
                Debugger.RM_SI          = 0x04;
                Debugger.RM_DI          = 0x05;
                Debugger.RM_BP          = 0x06;
                Debugger.RM_IMMOFF      = Debugger.RM_BP;       // only if MOD_NODISP
                Debugger.RM_BX          = 0x07;
            
                Debugger.RMS = [
                    "BX+SI", "BX+DI", "BP+SI", "BP+DI", "SI",    "DI",    "BP",    "BX",
                    "EAX",   "ECX",   "EDX",   "EBX",   "ESP",   "EBP",   "ESI",   "EDI"
                ];
            
                /*
                 * Operand type descriptor masks and definitions
                 *
                 * Note that the letters in () in the comments refer to Intel's
                 * nomenclature used in Appendix A of the 80386 Programmers Reference Manual.
                 */
                Debugger.TYPE_SIZE      = 0x000F;   // size field
                Debugger.TYPE_MODE      = 0x00F0;   // mode field
                Debugger.TYPE_IREG      = 0x0F00;   // implied register field
                Debugger.TYPE_OTHER     = 0xF000;   // "other" field
            
                /*
                 * TYPE_SIZE values.  Some of the values (eg, TYPE_WORDIB and TYPE_WORDIW)
                 * imply the presence of a third operand, for those weird cases....
                 */
                Debugger.TYPE_NONE      = 0x0000;   //     (all other TYPE fields ignored)
                Debugger.TYPE_BYTE      = 0x0001;   // (b) byte, regardless of operand size
                Debugger.TYPE_SBYTE     = 0x0002;   //     byte sign-extended to word
                Debugger.TYPE_WORD      = 0x0003;   // (w) word, regardless...
                Debugger.TYPE_VWORD     = 0x0004;   // (v) word or double-word, depending...
                Debugger.TYPE_DWORD     = 0x0005;   // (d) double-word, regardless...
                Debugger.TYPE_SEGP      = 0x0006;   // (p) 32-bit or 48-bit pointer
                Debugger.TYPE_FARP      = 0x0007;   // (p) 32-bit or 48-bit pointer for JMP/CALL
                Debugger.TYPE_2WORD     = 0x0008;   // (a) two memory operands (BOUND only)
                Debugger.TYPE_DESC      = 0x0009;   // (s) 6 byte pseudo-descriptor
                Debugger.TYPE_WORDIB    = 0x000A;   //     two source operands (eg, IMUL)
                Debugger.TYPE_WORDIW    = 0x000B;   //     two source operands (eg, IMUL)
                Debugger.TYPE_PREFIX    = 0x000F;   //     (treat similarly to TYPE_NONE)
            
                /*
                 * TYPE_MODE values.  Order is somewhat important, as all values implying
                 * the presence of a ModRM byte are assumed to be >= TYPE_MODRM.
                 */
                Debugger.TYPE_IMM       = 0x0000;   // (I) immediate data
                Debugger.TYPE_ONE       = 0x0010;   //     implicit 1 (eg, shifts/rotates)
                Debugger.TYPE_IMMOFF    = 0x0020;   // (A) immediate offset
                Debugger.TYPE_IMMREL    = 0x0030;   // (J) immediate relative
                Debugger.TYPE_DSSI      = 0x0040;   // (X) memory addressed by DS:SI
                Debugger.TYPE_ESDI      = 0x0050;   // (Y) memory addressed by ES:DI
                Debugger.TYPE_IMPREG    = 0x0060;   //     implicit register in TYPE_IREG
                Debugger.TYPE_IMPSEG    = 0x0070;   //     implicit segment register in TYPE_IREG
                Debugger.TYPE_MODRM     = 0x0080;   // (E) standard ModRM decoding
                Debugger.TYPE_MEM       = 0x0090;   // (M) ModRM refers to memory only
                Debugger.TYPE_REG       = 0x00A0;   // (G) standard Reg decoding
                Debugger.TYPE_SEGREG    = 0x00B0;   // (S) Reg selects segment register
                Debugger.TYPE_MODREG    = 0x00C0;   // (R) Mod refers to register only
                Debugger.TYPE_CTLREG    = 0x00D0;   // (C) Reg selects control register
                Debugger.TYPE_DBGREG    = 0x00E0;   // (D) Reg selects debug register
                Debugger.TYPE_TSTREG    = 0x00F0;   // (T) Reg selects test register
            
                /*
                 * TYPE_IREG values, based on the REG_* constants.
                 * For convenience, they include TYPE_IMPREG or TYPE_IMPSEG as appropriate.
                 */
                Debugger.TYPE_AL = (Debugger.REG_AL << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_CL = (Debugger.REG_CL << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_DL = (Debugger.REG_DL << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_BL = (Debugger.REG_BL << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_AH = (Debugger.REG_AH << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_CH = (Debugger.REG_CH << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_DH = (Debugger.REG_DH << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_BH = (Debugger.REG_BH << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_BYTE);
                Debugger.TYPE_AX = (Debugger.REG_AX << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_CX = (Debugger.REG_CX << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_DX = (Debugger.REG_DX << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_BX = (Debugger.REG_BX << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_SP = (Debugger.REG_SP << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_BP = (Debugger.REG_BP << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_SI = (Debugger.REG_SI << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_DI = (Debugger.REG_DI << 8 | Debugger.TYPE_IMPREG | Debugger.TYPE_VWORD);
                Debugger.TYPE_ES = (Debugger.REG_ES << 8 | Debugger.TYPE_IMPSEG | Debugger.TYPE_WORD);
                Debugger.TYPE_CS = (Debugger.REG_CS << 8 | Debugger.TYPE_IMPSEG | Debugger.TYPE_WORD);
                Debugger.TYPE_SS = (Debugger.REG_SS << 8 | Debugger.TYPE_IMPSEG | Debugger.TYPE_WORD);
                Debugger.TYPE_DS = (Debugger.REG_DS << 8 | Debugger.TYPE_IMPSEG | Debugger.TYPE_WORD);
                Debugger.TYPE_FS = (Debugger.REG_FS << 8 | Debugger.TYPE_IMPSEG | Debugger.TYPE_WORD);
                Debugger.TYPE_GS = (Debugger.REG_GS << 8 | Debugger.TYPE_IMPSEG | Debugger.TYPE_WORD);
            
                /*
                 * TYPE_OTHER bit definitions
                 */
                Debugger.TYPE_IN    = 0x1000;        // operand is input
                Debugger.TYPE_OUT   = 0x2000;        // operand is output
                Debugger.TYPE_BOTH  = (Debugger.TYPE_IN | Debugger.TYPE_OUT);
                Debugger.TYPE_8086  = (Debugger.CPU_8086 << 14);
                Debugger.TYPE_80186 = (Debugger.CPU_80186 << 14);
                Debugger.TYPE_80286 = (Debugger.CPU_80286 << 14);
                Debugger.TYPE_80386 = (Debugger.CPU_80386 << 14);
                Debugger.TYPE_CPU_SHIFT = 14;
            
                /*
                 * Message categories supported by the messageEnabled() function and other assorted message
                 * functions. Each category has a corresponding bit value that can be combined (ie, OR'ed) as
                 * needed.  The Debugger's message command ("m") is used to turn message categories on and off,
                 * like so:
                 *
                 *      m port on
                 *      m port off
                 *      ...
                 *
                 * NOTE: The order of these categories can be rearranged, alphabetized, etc, as desired; just be
                 * aware that changing the bit values could break saved Debugger states (not a huge concern, just
                 * something to be aware of).
                 */
                Debugger.MESSAGES = {
                    "cpu":      Messages.CPU,
                    "seg":      Messages.SEG,
                    "desc":     Messages.DESC,
                    "tss":      Messages.TSS,
                    "int":      Messages.INT,
                    "fault":    Messages.FAULT,
                    "bus":      Messages.BUS,
                    "mem":      Messages.MEM,
                    "port":     Messages.PORT,
                    "dma":      Messages.DMA,
                    "pic":      Messages.PIC,
                    "timer":    Messages.TIMER,
                    "cmos":     Messages.CMOS,
                    "rtc":      Messages.RTC,
                    "8042":     Messages.C8042,
                    "chipset":  Messages.CHIPSET,   // ie, anything else in ChipSet besides DMA, PIC, TIMER, CMOS, RTC and 8042
                    "keyboard": Messages.KEYBOARD,
                    "key":      Messages.KEYS,      // using "keys" instead of "key" causes an unfortunate JavaScript property collision
                    "video":    Messages.VIDEO,
                    "fdc":      Messages.FDC,
                    "hdc":      Messages.HDC,
                    "disk":     Messages.DISK,
                    "serial":   Messages.SERIAL,
                    "speaker":  Messages.SPEAKER,
                    "state":    Messages.STATE,
                    "mouse":    Messages.MOUSE,
                    "computer": Messages.COMPUTER,
                    "dos":      Messages.DOS,
                    "data":     Messages.DATA,
                    "log":      Messages.LOG,
                    "warn":     Messages.WARN,
                    /*
                     * Now we turn to message actions rather than message types; for example, setting "halt"
                     * on or off doesn't enable "halt" messages, but rather halts the CPU on any message above.
                     */
                    "halt":     Messages.HALT
                };
            
                /*
                 * Instruction trace categories supported by the traceLog() function.  The Debugger's info
                 * command ("n") is used to turn trace categories on and off, like so:
                 *
                 *      n shl on
                 *      n shl off
                 *      ...
                 *
                 * Note that there are usually multiple entries for each category (one for each supported operand size);
                 * all matching entries are enabled or disabled as a group.
                 */
                Debugger.TRACE = {
                    ROLB:   {ins: Debugger.INS.ROL,  size: 8},
                    ROLW:   {ins: Debugger.INS.ROL,  size: 16},
                    RORB:   {ins: Debugger.INS.ROR,  size: 8},
                    RORW:   {ins: Debugger.INS.ROR,  size: 16},
                    RCLB:   {ins: Debugger.INS.RCL,  size: 8},
                    RCLW:   {ins: Debugger.INS.RCL,  size: 16},
                    RCRB:   {ins: Debugger.INS.RCR,  size: 8},
                    RCRW:   {ins: Debugger.INS.RCR,  size: 16},
                    SHLB:   {ins: Debugger.INS.SHL,  size: 8},
                    SHLW:   {ins: Debugger.INS.SHL,  size: 16},
                    MULB:   {ins: Debugger.INS.MUL,  size: 16}, // dst is 8-bit (AL), src is 8-bit (operand), result is 16-bit (AH:AL)
                    IMULB:  {ins: Debugger.INS.IMUL, size: 16}, // dst is 8-bit (AL), src is 8-bit (operand), result is 16-bit (AH:AL)
                    DIVB:   {ins: Debugger.INS.DIV,  size: 16}, // dst is 16-bit (AX), src is 8-bit (operand), result is 16-bit (AH:AL, remainder:quotient)
                    IDIVB:  {ins: Debugger.INS.IDIV, size: 16}, // dst is 16-bit (AX), src is 8-bit (operand), result is 16-bit (AH:AL, remainder:quotient)
                    MULW:   {ins: Debugger.INS.MUL,  size: 32}, // dst is 16-bit (AX), src is 16-bit (operand), result is 32-bit (DX:AX)
                    IMULW:  {ins: Debugger.INS.IMUL, size: 32}, // dst is 16-bit (AX), src is 16-bit (operand), result is 32-bit (DX:AX)
                    DIVW:   {ins: Debugger.INS.DIV,  size: 32}, // dst is 32-bit (DX:AX), src is 16-bit (operand), result is 32-bit (DX:AX, remainder:quotient)
                    IDIVW:  {ins: Debugger.INS.IDIV, size: 32}  // dst is 32-bit (DX:AX), src is 16-bit (operand), result is 32-bit (DX:AX, remainder:quotient)
                };
            
                Debugger.TRACE_LIMIT = 100000;
            
                /*
                 * Opcode 0x0F has a distinguished history:
                 *
                 *      On the 8086, it functioned as POP CS
                 *      On the 80186, it generated an Invalid Opcode (UD_FAULT) exception
                 *      On the 80286, it introduced a new (and growing) series of two-byte opcodes
                 *
                 * Based on the active CPU model, we make every effort to execute and disassemble this (and every other)
                 * opcode appropriately, by setting the opcode's entry in aaOpDescs accordingly.  0x0F in aaOpDescs points
                 * to the 8086 table: aOpDescPopCS.
                 *
                 * Note that we must NOT modify aaOpDescs directly.  this.aaOpDescs will point to Debugger.aaOpDescs
                 * if the processor is an 8086, because that's the processor that the hard-coded contents of the table
                 * represent; for all other processors, this.aaOpDescs will contain a copy of the table that we can modify.
                 */
                Debugger.aOpDescPopCS     = [Debugger.INS.POP,  Debugger.TYPE_CS   | Debugger.TYPE_OUT];
                Debugger.aOpDescUndefined = [Debugger.INS.NONE, Debugger.TYPE_NONE];
                Debugger.aOpDesc0F        = [Debugger.INS.OP0F, Debugger.TYPE_WORD | Debugger.TYPE_BOTH];
            
                /*
                 * The aaOpDescs array is indexed by opcode, and each element is a sub-array (aOpDesc) that describes
                 * the corresponding opcode. The sub-elements are as follows:
                 *
                 *      [0]: {number} of the opcode name (see INS.*)
                 *      [1]: {number} containing the destination operand descriptor bit(s), if any
                 *      [2]: {number} containing the source operand descriptor bit(s), if any
                 *      [3]: {number} containing the occasional third operand descriptor bit(s), if any
                 *
                 * These sub-elements are all optional. If [0] is not present, the opcode is undefined; if [1] is not
                 * present (or contains zero), the opcode has no (or only implied) operands; if [2] is not present, the
                 * opcode has only a single operand.  And so on.
                 */
                Debugger.aaOpDescs = [
                /* 0x00 */ [Debugger.INS.ADD,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x01 */ [Debugger.INS.ADD,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x02 */ [Debugger.INS.ADD,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x03 */ [Debugger.INS.ADD,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x04 */ [Debugger.INS.ADD,   Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x05 */ [Debugger.INS.ADD,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x06 */ [Debugger.INS.PUSH,  Debugger.TYPE_ES     | Debugger.TYPE_IN],
                /* 0x07 */ [Debugger.INS.POP,   Debugger.TYPE_ES     | Debugger.TYPE_OUT],
            
                /* 0x08 */ [Debugger.INS.OR,    Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x09 */ [Debugger.INS.OR,    Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x0A */ [Debugger.INS.OR,    Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x0B */ [Debugger.INS.OR,    Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x0C */ [Debugger.INS.OR,    Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x0D */ [Debugger.INS.OR,    Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x0E */ [Debugger.INS.PUSH,  Debugger.TYPE_CS     | Debugger.TYPE_IN],
                /* 0x0F */ Debugger.aOpDescPopCS,
            
                /* 0x10 */ [Debugger.INS.ADC,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x11 */ [Debugger.INS.ADC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x12 */ [Debugger.INS.ADC,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x13 */ [Debugger.INS.ADC,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x14 */ [Debugger.INS.ADC,   Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x15 */ [Debugger.INS.ADC,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x16 */ [Debugger.INS.PUSH,  Debugger.TYPE_SS     | Debugger.TYPE_IN],
                /* 0x17 */ [Debugger.INS.POP,   Debugger.TYPE_SS     | Debugger.TYPE_OUT],
            
                /* 0x18 */ [Debugger.INS.SBB,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x19 */ [Debugger.INS.SBB,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x1A */ [Debugger.INS.SBB,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x1B */ [Debugger.INS.SBB,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x1C */ [Debugger.INS.SBB,   Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x1D */ [Debugger.INS.SBB,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x1E */ [Debugger.INS.PUSH,  Debugger.TYPE_DS     | Debugger.TYPE_IN],
                /* 0x1F */ [Debugger.INS.POP,   Debugger.TYPE_DS     | Debugger.TYPE_OUT],
            
                /* 0x20 */ [Debugger.INS.AND,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x21 */ [Debugger.INS.AND,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x22 */ [Debugger.INS.AND,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x23 */ [Debugger.INS.AND,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x24 */ [Debugger.INS.AND,   Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x25 */ [Debugger.INS.AND,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x26 */ [Debugger.INS.ES,    Debugger.TYPE_PREFIX],
                /* 0x27 */ [Debugger.INS.DAA],
            
                /* 0x28 */ [Debugger.INS.SUB,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x29 */ [Debugger.INS.SUB,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x2A */ [Debugger.INS.SUB,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x2B */ [Debugger.INS.SUB,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x2C */ [Debugger.INS.SUB,   Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x2D */ [Debugger.INS.SUB,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x2E */ [Debugger.INS.CS,    Debugger.TYPE_PREFIX],
                /* 0x2F */ [Debugger.INS.DAS],
            
                /* 0x30 */ [Debugger.INS.XOR,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x31 */ [Debugger.INS.XOR,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x32 */ [Debugger.INS.XOR,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x33 */ [Debugger.INS.XOR,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x34 */ [Debugger.INS.XOR,   Debugger.TYPE_AL     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x35 */ [Debugger.INS.XOR,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x36 */ [Debugger.INS.SS,    Debugger.TYPE_PREFIX],
                /* 0x37 */ [Debugger.INS.AAA],
            
                /* 0x38 */ [Debugger.INS.CMP,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,   Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x39 */ [Debugger.INS.CMP,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN,   Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x3A */ [Debugger.INS.CMP,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,   Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x3B */ [Debugger.INS.CMP,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN,   Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x3C */ [Debugger.INS.CMP,   Debugger.TYPE_AL     | Debugger.TYPE_IN,     Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x3D */ [Debugger.INS.CMP,   Debugger.TYPE_AX     | Debugger.TYPE_IN,     Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x3E */ [Debugger.INS.DS,    Debugger.TYPE_PREFIX],
                /* 0x3F */ [Debugger.INS.AAS],
            
                /* 0x40 */ [Debugger.INS.INC,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH],
                /* 0x41 */ [Debugger.INS.INC,   Debugger.TYPE_CX     | Debugger.TYPE_BOTH],
                /* 0x42 */ [Debugger.INS.INC,   Debugger.TYPE_DX     | Debugger.TYPE_BOTH],
                /* 0x43 */ [Debugger.INS.INC,   Debugger.TYPE_BX     | Debugger.TYPE_BOTH],
                /* 0x44 */ [Debugger.INS.INC,   Debugger.TYPE_SP     | Debugger.TYPE_BOTH],
                /* 0x45 */ [Debugger.INS.INC,   Debugger.TYPE_BP     | Debugger.TYPE_BOTH],
                /* 0x46 */ [Debugger.INS.INC,   Debugger.TYPE_SI     | Debugger.TYPE_BOTH],
                /* 0x47 */ [Debugger.INS.INC,   Debugger.TYPE_DI     | Debugger.TYPE_BOTH],
            
                /* 0x48 */ [Debugger.INS.DEC,   Debugger.TYPE_AX     | Debugger.TYPE_BOTH],
                /* 0x49 */ [Debugger.INS.DEC,   Debugger.TYPE_CX     | Debugger.TYPE_BOTH],
                /* 0x4A */ [Debugger.INS.DEC,   Debugger.TYPE_DX     | Debugger.TYPE_BOTH],
                /* 0x4B */ [Debugger.INS.DEC,   Debugger.TYPE_BX     | Debugger.TYPE_BOTH],
                /* 0x4C */ [Debugger.INS.DEC,   Debugger.TYPE_SP     | Debugger.TYPE_BOTH],
                /* 0x4D */ [Debugger.INS.DEC,   Debugger.TYPE_BP     | Debugger.TYPE_BOTH],
                /* 0x4E */ [Debugger.INS.DEC,   Debugger.TYPE_SI     | Debugger.TYPE_BOTH],
                /* 0x4F */ [Debugger.INS.DEC,   Debugger.TYPE_DI     | Debugger.TYPE_BOTH],
            
                /* 0x50 */ [Debugger.INS.PUSH,  Debugger.TYPE_AX     | Debugger.TYPE_IN],
                /* 0x51 */ [Debugger.INS.PUSH,  Debugger.TYPE_CX     | Debugger.TYPE_IN],
                /* 0x52 */ [Debugger.INS.PUSH,  Debugger.TYPE_DX     | Debugger.TYPE_IN],
                /* 0x53 */ [Debugger.INS.PUSH,  Debugger.TYPE_BX     | Debugger.TYPE_IN],
                /* 0x54 */ [Debugger.INS.PUSH,  Debugger.TYPE_SP     | Debugger.TYPE_IN],
                /* 0x55 */ [Debugger.INS.PUSH,  Debugger.TYPE_BP     | Debugger.TYPE_IN],
                /* 0x56 */ [Debugger.INS.PUSH,  Debugger.TYPE_SI     | Debugger.TYPE_IN],
                /* 0x57 */ [Debugger.INS.PUSH,  Debugger.TYPE_DI     | Debugger.TYPE_IN],
            
                /* 0x58 */ [Debugger.INS.POP,   Debugger.TYPE_AX     | Debugger.TYPE_OUT],
                /* 0x59 */ [Debugger.INS.POP,   Debugger.TYPE_CX     | Debugger.TYPE_OUT],
                /* 0x5A */ [Debugger.INS.POP,   Debugger.TYPE_DX     | Debugger.TYPE_OUT],
                /* 0x5B */ [Debugger.INS.POP,   Debugger.TYPE_BX     | Debugger.TYPE_OUT],
                /* 0x5C */ [Debugger.INS.POP,   Debugger.TYPE_SP     | Debugger.TYPE_OUT],
                /* 0x5D */ [Debugger.INS.POP,   Debugger.TYPE_BP     | Debugger.TYPE_OUT],
                /* 0x5E */ [Debugger.INS.POP,   Debugger.TYPE_SI     | Debugger.TYPE_OUT],
                /* 0x5F */ [Debugger.INS.POP,   Debugger.TYPE_DI     | Debugger.TYPE_OUT],
            
                /* 0x60 */ [Debugger.INS.PUSHA, Debugger.TYPE_NONE   | Debugger.TYPE_80286],
                /* 0x61 */ [Debugger.INS.POPA,  Debugger.TYPE_NONE   | Debugger.TYPE_80286],
                /* 0x62 */ [Debugger.INS.BOUND, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80286, Debugger.TYPE_MODRM | Debugger.TYPE_2WORD | Debugger.TYPE_IN],
                /* 0x63 */ [Debugger.INS.ARPL,  Debugger.TYPE_MODRM  | Debugger.TYPE_WORD  | Debugger.TYPE_OUT,                        Debugger.TYPE_REG   | Debugger.TYPE_WORD  | Debugger.TYPE_IN],
                /* 0x64 */ [Debugger.INS.FS,    Debugger.TYPE_PREFIX | Debugger.TYPE_80386],
                /* 0x65 */ [Debugger.INS.GS,    Debugger.TYPE_PREFIX | Debugger.TYPE_80386],
                /* 0x66 */ [Debugger.INS.OS,    Debugger.TYPE_PREFIX | Debugger.TYPE_80386],
                /* 0x67 */ [Debugger.INS.AS,    Debugger.TYPE_PREFIX | Debugger.TYPE_80386],
            
                /* 0x68 */ [Debugger.INS.PUSH,  Debugger.TYPE_IMM    | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80286],
                /* 0x69 */ [Debugger.INS.IMUL,  Debugger.TYPE_REG    | Debugger.TYPE_WORD  | Debugger.TYPE_BOTH | Debugger.TYPE_80286,   Debugger.TYPE_MODRM | Debugger.TYPE_WORDIW | Debugger.TYPE_IN],
                /* 0x6A */ [Debugger.INS.PUSH,  Debugger.TYPE_IMM    | Debugger.TYPE_SBYTE | Debugger.TYPE_IN   | Debugger.TYPE_80286],
                /* 0x6B */ [Debugger.INS.IMUL,  Debugger.TYPE_REG    | Debugger.TYPE_WORD  | Debugger.TYPE_BOTH | Debugger.TYPE_80286,   Debugger.TYPE_MODRM | Debugger.TYPE_WORDIB | Debugger.TYPE_IN],
                /* 0x6C */ [Debugger.INS.INS,   Debugger.TYPE_ESDI   | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80286,   Debugger.TYPE_DX    | Debugger.TYPE_IN],
                /* 0x6D */ [Debugger.INS.INS,   Debugger.TYPE_ESDI   | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80286,   Debugger.TYPE_DX    | Debugger.TYPE_IN],
                /* 0x6E */ [Debugger.INS.OUTS,  Debugger.TYPE_DX     | Debugger.TYPE_IN    | Debugger.TYPE_80286,   Debugger.TYPE_DSSI | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x6F */ [Debugger.INS.OUTS,  Debugger.TYPE_DX     | Debugger.TYPE_IN    | Debugger.TYPE_80286,   Debugger.TYPE_DSSI | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
            
                /* 0x70 */ [Debugger.INS.JO,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x71 */ [Debugger.INS.JNO,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x72 */ [Debugger.INS.JC,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x73 */ [Debugger.INS.JNC,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x74 */ [Debugger.INS.JZ,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x75 */ [Debugger.INS.JNZ,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x76 */ [Debugger.INS.JBE,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x77 */ [Debugger.INS.JA,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
            
                /* 0x78 */ [Debugger.INS.JS,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x79 */ [Debugger.INS.JNS,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x7A */ [Debugger.INS.JP,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x7B */ [Debugger.INS.JNP,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x7C */ [Debugger.INS.JL,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x7D */ [Debugger.INS.JGE,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x7E */ [Debugger.INS.JLE,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x7F */ [Debugger.INS.JG,    Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
            
                /* 0x80 */ [Debugger.INS.GRP1B, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_IMM   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x81 */ [Debugger.INS.GRP1W, Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x82 */ [Debugger.INS.GRP1B, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_IMM   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x83 */ [Debugger.INS.GRP1SW,Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x84 */ [Debugger.INS.TEST,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,   Debugger.TYPE_REG   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x85 */ [Debugger.INS.TEST,  Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN,   Debugger.TYPE_REG   | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x86 */ [Debugger.INS.XCHG,  Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                /* 0x87 */ [Debugger.INS.XCHG,  Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
            
                /* 0x88 */ [Debugger.INS.MOV,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT,  Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x89 */ [Debugger.INS.MOV,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,  Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x8A */ [Debugger.INS.MOV,   Debugger.TYPE_REG    | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0x8B */ [Debugger.INS.MOV,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,  Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x8C */ [Debugger.INS.MOV,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,  Debugger.TYPE_SEGREG | Debugger.TYPE_WORD  | Debugger.TYPE_IN],
                /* 0x8D */ [Debugger.INS.LEA,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,  Debugger.TYPE_MEM    | Debugger.TYPE_VWORD],
                /* 0x8E */ [Debugger.INS.MOV,   Debugger.TYPE_SEGREG | Debugger.TYPE_WORD  | Debugger.TYPE_OUT,  Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0x8F */ [Debugger.INS.POP,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT],
            
                /* 0x90 */ [Debugger.INS.NOP],
                /* 0x91 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_CX | Debugger.TYPE_BOTH],
                /* 0x92 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_DX | Debugger.TYPE_BOTH],
                /* 0x93 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_BX | Debugger.TYPE_BOTH],
                /* 0x94 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_SP | Debugger.TYPE_BOTH],
                /* 0x95 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_BP | Debugger.TYPE_BOTH],
                /* 0x96 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_SI | Debugger.TYPE_BOTH],
                /* 0x97 */ [Debugger.INS.XCHG,  Debugger.TYPE_AX     | Debugger.TYPE_BOTH, Debugger.TYPE_DI | Debugger.TYPE_BOTH],
            
                /* 0x98 */ [Debugger.INS.CBW],
                /* 0x99 */ [Debugger.INS.CWD],
                /* 0x9A */ [Debugger.INS.CALL,  Debugger.TYPE_IMM    | Debugger.TYPE_FARP | Debugger.TYPE_IN],
                /* 0x9B */ [Debugger.INS.WAIT],
                /* 0x9C */ [Debugger.INS.PUSHF],
                /* 0x9D */ [Debugger.INS.POPF],
                /* 0x9E */ [Debugger.INS.SAHF],
                /* 0x9F */ [Debugger.INS.LAHF],
            
                /* 0xA0 */ [Debugger.INS.MOV,   Debugger.TYPE_AL     | Debugger.TYPE_OUT,    Debugger.TYPE_IMMOFF | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xA1 */ [Debugger.INS.MOV,   Debugger.TYPE_AX     | Debugger.TYPE_OUT,    Debugger.TYPE_IMMOFF | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xA2 */ [Debugger.INS.MOV,   Debugger.TYPE_IMMOFF | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT,     Debugger.TYPE_AL    | Debugger.TYPE_IN],
                /* 0xA3 */ [Debugger.INS.MOV,   Debugger.TYPE_IMMOFF | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,     Debugger.TYPE_AX    | Debugger.TYPE_IN],
                /* 0xA4 */ [Debugger.INS.MOVSB, Debugger.TYPE_ESDI   | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT,     Debugger.TYPE_DSSI  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xA5 */ [Debugger.INS.MOVSW, Debugger.TYPE_ESDI   | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,     Debugger.TYPE_DSSI  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xA6 */ [Debugger.INS.CMPSB, Debugger.TYPE_ESDI   | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,      Debugger.TYPE_DSSI  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xA7 */ [Debugger.INS.CMPSW, Debugger.TYPE_ESDI   | Debugger.TYPE_VWORD | Debugger.TYPE_IN,      Debugger.TYPE_DSSI  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
            
                /* 0xA8 */ [Debugger.INS.TEST,  Debugger.TYPE_AL     | Debugger.TYPE_IN,     Debugger.TYPE_IMM  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xA9 */ [Debugger.INS.TEST,  Debugger.TYPE_AX     | Debugger.TYPE_IN,     Debugger.TYPE_IMM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xAA */ [Debugger.INS.STOSB, Debugger.TYPE_ESDI   | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT,   Debugger.TYPE_AL    | Debugger.TYPE_IN],
                /* 0xAB */ [Debugger.INS.STOSW, Debugger.TYPE_ESDI   | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,   Debugger.TYPE_AX    | Debugger.TYPE_IN],
                /* 0xAC */ [Debugger.INS.LODSB, Debugger.TYPE_AL     | Debugger.TYPE_OUT,    Debugger.TYPE_DSSI | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xAD */ [Debugger.INS.LODSW, Debugger.TYPE_AX     | Debugger.TYPE_OUT,    Debugger.TYPE_DSSI | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xAE */ [Debugger.INS.SCASB, Debugger.TYPE_AL     | Debugger.TYPE_IN,     Debugger.TYPE_ESDI | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xAF */ [Debugger.INS.SCASW, Debugger.TYPE_AX     | Debugger.TYPE_IN,     Debugger.TYPE_ESDI | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
            
                /* 0xB0 */ [Debugger.INS.MOV,   Debugger.TYPE_AL     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB1 */ [Debugger.INS.MOV,   Debugger.TYPE_CL     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB2 */ [Debugger.INS.MOV,   Debugger.TYPE_DL     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB3 */ [Debugger.INS.MOV,   Debugger.TYPE_BL     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB4 */ [Debugger.INS.MOV,   Debugger.TYPE_AH     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB5 */ [Debugger.INS.MOV,   Debugger.TYPE_CH     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB6 */ [Debugger.INS.MOV,   Debugger.TYPE_DH     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xB7 */ [Debugger.INS.MOV,   Debugger.TYPE_BH     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
            
                /* 0xB8 */ [Debugger.INS.MOV,   Debugger.TYPE_AX     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xB9 */ [Debugger.INS.MOV,   Debugger.TYPE_CX     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xBA */ [Debugger.INS.MOV,   Debugger.TYPE_DX     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xBB */ [Debugger.INS.MOV,   Debugger.TYPE_BX     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xBC */ [Debugger.INS.MOV,   Debugger.TYPE_SP     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xBD */ [Debugger.INS.MOV,   Debugger.TYPE_BP     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xBE */ [Debugger.INS.MOV,   Debugger.TYPE_SI     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xBF */ [Debugger.INS.MOV,   Debugger.TYPE_DI     | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
            
                /* 0xC0 */ [Debugger.INS.GRP2B, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH | Debugger.TYPE_80186, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xC1 */ [Debugger.INS.GRP2W, Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80186, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xC2 */ [Debugger.INS.RET,   Debugger.TYPE_IMM    | Debugger.TYPE_WORD  | Debugger.TYPE_IN],
                /* 0xC3 */ [Debugger.INS.RET],
                /* 0xC4 */ [Debugger.INS.LES,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT, Debugger.TYPE_MEM | Debugger.TYPE_SEGP  | Debugger.TYPE_IN],
                /* 0xC5 */ [Debugger.INS.LDS,   Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT, Debugger.TYPE_MEM | Debugger.TYPE_SEGP  | Debugger.TYPE_IN],
                /* 0xC6 */ [Debugger.INS.MOV,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xC7 */ [Debugger.INS.MOV,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
            
                /* 0xC8 */ [Debugger.INS.ENTER, Debugger.TYPE_IMM    | Debugger.TYPE_WORD  | Debugger.TYPE_IN | Debugger.TYPE_80286,  Debugger.TYPE_IMM   | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xC9 */ [Debugger.INS.LEAVE, Debugger.TYPE_NONE   | Debugger.TYPE_80286],
                /* 0xCA */ [Debugger.INS.RETF,  Debugger.TYPE_IMM    | Debugger.TYPE_WORD  | Debugger.TYPE_IN],
                /* 0xCB */ [Debugger.INS.RETF],
                /* 0xCC */ [Debugger.INS.INT3],
                /* 0xCD */ [Debugger.INS.INT,   Debugger.TYPE_IMM    | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xCE */ [Debugger.INS.INTO],
                /* 0xCF */ [Debugger.INS.IRET],
            
                /* 0xD0 */ [Debugger.INS.GRP2B1,Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_ONE    | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xD1 */ [Debugger.INS.GRP2W1,Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE    | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xD2 */ [Debugger.INS.GRP2BC,Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL |   Debugger.TYPE_IN],
                /* 0xD3 */ [Debugger.INS.GRP2WC,Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL |   Debugger.TYPE_IN],
                /* 0xD4 */ [Debugger.INS.AAM,   Debugger.TYPE_IMM    | Debugger.TYPE_BYTE],
                /* 0xD5 */ [Debugger.INS.AAD,   Debugger.TYPE_IMM    | Debugger.TYPE_BYTE],
                /* 0xD6 */ [Debugger.INS.SALC],
                /* 0xD7 */ [Debugger.INS.XLAT],
            
                /* 0xD8 */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xD9 */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xDA */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xDB */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xDC */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xDD */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xDE */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xDF */ [Debugger.INS.ESC,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
            
                /* 0xE0 */ [Debugger.INS.LOOPNZ,Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xE1 */ [Debugger.INS.LOOPZ, Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xE2 */ [Debugger.INS.LOOP,  Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xE3 */ [Debugger.INS.JCXZ,  Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xE4 */ [Debugger.INS.IN,    Debugger.TYPE_AL     | Debugger.TYPE_OUT,    Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xE5 */ [Debugger.INS.IN,    Debugger.TYPE_AX     | Debugger.TYPE_OUT,    Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                /* 0xE6 */ [Debugger.INS.OUT,   Debugger.TYPE_IMM    | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,   Debugger.TYPE_AL   | Debugger.TYPE_IN],
                /* 0xE7 */ [Debugger.INS.OUT,   Debugger.TYPE_IMM    | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,   Debugger.TYPE_AX   | Debugger.TYPE_IN],
            
                /* 0xE8 */ [Debugger.INS.CALL,  Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xE9 */ [Debugger.INS.JMP,   Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                /* 0xEA */ [Debugger.INS.JMP,   Debugger.TYPE_IMM    | Debugger.TYPE_FARP  | Debugger.TYPE_IN],
                /* 0xEB */ [Debugger.INS.JMP,   Debugger.TYPE_IMMREL | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                /* 0xEC */ [Debugger.INS.IN,    Debugger.TYPE_AL     | Debugger.TYPE_OUT,    Debugger.TYPE_DX | Debugger.TYPE_IN],
                /* 0xED */ [Debugger.INS.IN,    Debugger.TYPE_AX     | Debugger.TYPE_OUT,    Debugger.TYPE_DX | Debugger.TYPE_IN],
                /* 0xEE */ [Debugger.INS.OUT,   Debugger.TYPE_DX     | Debugger.TYPE_IN,     Debugger.TYPE_AL | Debugger.TYPE_IN],
                /* 0xEF */ [Debugger.INS.OUT,   Debugger.TYPE_DX     | Debugger.TYPE_IN,     Debugger.TYPE_AX | Debugger.TYPE_IN],
            
                /* 0xF0 */ [Debugger.INS.LOCK,  Debugger.TYPE_PREFIX],
                /* 0xF1 */ [Debugger.INS.NONE],
                /* 0xF2 */ [Debugger.INS.REPNZ, Debugger.TYPE_PREFIX],
                /* 0xF3 */ [Debugger.INS.REPZ,  Debugger.TYPE_PREFIX],
                /* 0xF4 */ [Debugger.INS.HLT],
                /* 0xF5 */ [Debugger.INS.CMC],
                /* 0xF6 */ [Debugger.INS.GRP3B, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                /* 0xF7 */ [Debugger.INS.GRP3W, Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
            
                /* 0xF8 */ [Debugger.INS.CLC],
                /* 0xF9 */ [Debugger.INS.STC],
                /* 0xFA */ [Debugger.INS.CLI],
                /* 0xFB */ [Debugger.INS.STI],
                /* 0xFC */ [Debugger.INS.CLD],
                /* 0xFD */ [Debugger.INS.STD],
                /* 0xFE */ [Debugger.INS.GRP4B, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                /* 0xFF */ [Debugger.INS.GRP4W, Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH]
                ];
            
                Debugger.aaOp0FDescs = {
                    0x00: [Debugger.INS.GRP6,   Debugger.TYPE_MODRM  | Debugger.TYPE_WORD  | Debugger.TYPE_BOTH],
                    0x01: [Debugger.INS.GRP7,   Debugger.TYPE_MODRM  | Debugger.TYPE_WORD  | Debugger.TYPE_BOTH],
                    0x02: [Debugger.INS.LAR,    Debugger.TYPE_REG    | Debugger.TYPE_WORD  | Debugger.TYPE_OUT  | Debugger.TYPE_80286, Debugger.TYPE_MEM    | Debugger.TYPE_WORD | Debugger.TYPE_IN],
                    0x03: [Debugger.INS.LSL,    Debugger.TYPE_REG    | Debugger.TYPE_WORD  | Debugger.TYPE_OUT  | Debugger.TYPE_80286, Debugger.TYPE_MEM    | Debugger.TYPE_WORD | Debugger.TYPE_IN],
                    0x05: [Debugger.INS.LOADALL,Debugger.TYPE_80286],
                    0x06: [Debugger.INS.CLTS,   Debugger.TYPE_80286],
                    0x20: [Debugger.INS.MOV,    Debugger.TYPE_REG    | Debugger.TYPE_DWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_CTLREG | Debugger.TYPE_DWORD | Debugger.TYPE_IN],
                    0x22: [Debugger.INS.MOV,    Debugger.TYPE_CTLREG | Debugger.TYPE_DWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_DWORD | Debugger.TYPE_IN],
                    0x80: [Debugger.INS.JO,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x81: [Debugger.INS.JNO,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x82: [Debugger.INS.JC,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x83: [Debugger.INS.JNC,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x84: [Debugger.INS.JZ,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x85: [Debugger.INS.JNZ,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x86: [Debugger.INS.JBE,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x87: [Debugger.INS.JA,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x88: [Debugger.INS.JS,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x89: [Debugger.INS.JNS,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x8A: [Debugger.INS.JP,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x8B: [Debugger.INS.JNP,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x8C: [Debugger.INS.JL,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x8D: [Debugger.INS.JGE,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x8E: [Debugger.INS.JLE,    Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x8F: [Debugger.INS.JG,     Debugger.TYPE_IMMREL | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386],
                    0x90: [Debugger.INS.SETO,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x91: [Debugger.INS.SETNO,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x92: [Debugger.INS.SETC,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x93: [Debugger.INS.SETNC,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x94: [Debugger.INS.SETZ,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x95: [Debugger.INS.SETNZ,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x96: [Debugger.INS.SETBE,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x97: [Debugger.INS.SETNBE, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x98: [Debugger.INS.SETS,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x99: [Debugger.INS.SETNS,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x9A: [Debugger.INS.SETP,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x9B: [Debugger.INS.SETNP,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x9C: [Debugger.INS.SETL,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x9D: [Debugger.INS.SETGE,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x9E: [Debugger.INS.SETLE,  Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0x9F: [Debugger.INS.SETG,   Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_OUT  | Debugger.TYPE_80386],
                    0xA0: [Debugger.INS.PUSH,   Debugger.TYPE_FS     | Debugger.TYPE_IN    | Debugger.TYPE_80386],
                    0xA1: [Debugger.INS.POP,    Debugger.TYPE_FS     | Debugger.TYPE_OUT   | Debugger.TYPE_80386],
                    0xA3: [Debugger.INS.BT,     Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN   | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xA4: [Debugger.INS.SHLD,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN, Debugger.TYPE_IMM    | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    0xA5: [Debugger.INS.SHLD,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN, Debugger.TYPE_IMPREG | Debugger.TYPE_CL   | Debugger.TYPE_IN],
                    0xA8: [Debugger.INS.PUSH,   Debugger.TYPE_GS     | Debugger.TYPE_IN    | Debugger.TYPE_80386],
                    0xA9: [Debugger.INS.POP,    Debugger.TYPE_GS     | Debugger.TYPE_OUT   | Debugger.TYPE_80386],
                    0xAB: [Debugger.INS.BTS,    Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xAC: [Debugger.INS.SHRD,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN, Debugger.TYPE_IMM    | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    0xAD: [Debugger.INS.SHRD,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN, Debugger.TYPE_IMPREG | Debugger.TYPE_CL   | Debugger.TYPE_IN],
                    0xAF: [Debugger.INS.IMUL,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xB2: [Debugger.INS.LSS,    Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,                        Debugger.TYPE_MEM    | Debugger.TYPE_SEGP  | Debugger.TYPE_IN],
                    0xB3: [Debugger.INS.BTR,    Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xB4: [Debugger.INS.LFS,    Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,                        Debugger.TYPE_MEM    | Debugger.TYPE_SEGP  | Debugger.TYPE_IN],
                    0xB5: [Debugger.INS.LGS,    Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT,                        Debugger.TYPE_MEM    | Debugger.TYPE_SEGP  | Debugger.TYPE_IN],
                    0xB6: [Debugger.INS.MOVZX,  Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                    0xB7: [Debugger.INS.MOVZX,  Debugger.TYPE_REG    | Debugger.TYPE_DWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_MODRM  | Debugger.TYPE_WORD  | Debugger.TYPE_IN],
                    0xBA: [Debugger.INS.GRP8,   Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80386, Debugger.TYPE_IMM    | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                    0xBB: [Debugger.INS.BTC,    Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xBC: [Debugger.INS.BSF,    Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xBD: [Debugger.INS.BSR,    Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_MODRM  | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    0xBE: [Debugger.INS.MOVSX,  Debugger.TYPE_REG    | Debugger.TYPE_VWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_MODRM  | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                    0xBF: [Debugger.INS.MOVSX,  Debugger.TYPE_REG    | Debugger.TYPE_DWORD | Debugger.TYPE_OUT  | Debugger.TYPE_80386, Debugger.TYPE_MODRM  | Debugger.TYPE_WORD  | Debugger.TYPE_IN]
                };
            
                Debugger.aaGrpDescs = [
                  [
                    /* GRP1B */
                    [Debugger.INS.ADD,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.OR,   Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.ADC,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SBB,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.AND,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SUB,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.XOR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.CMP,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_IN,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP1W */
                    [Debugger.INS.ADD,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.OR,   Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.ADC,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.SBB,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.AND,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.SUB,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.XOR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.CMP,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP1SW */
                    [Debugger.INS.ADD,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.OR,   Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.ADC,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SBB,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.AND,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SUB,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.XOR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN],
                    [Debugger.INS.CMP,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN,   Debugger.TYPE_IMM | Debugger.TYPE_SBYTE | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP2B */
                    [Debugger.INS.ROL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.ROR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.SAR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP2W */
                    [Debugger.INS.ROL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.ROR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.SAR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH | Debugger.TYPE_80286, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP2B1 */
                    [Debugger.INS.ROL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.ROR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.SAR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP2W1 */
                    [Debugger.INS.ROL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.ROR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.RCR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.SHR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.SAR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_ONE | Debugger.TYPE_BYTE | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP2BC */
                    [Debugger.INS.ROL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.ROR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.RCL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.RCR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.SHL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.SHR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.SAR,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP2WC */
                    [Debugger.INS.ROL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.ROR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.RCL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.RCR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.SHL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                    [Debugger.INS.SHR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.SAR,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH, Debugger.TYPE_IMPREG | Debugger.TYPE_CL | Debugger.TYPE_IN]
                  ],
                  [
                    /* GRP3B */
                    [Debugger.INS.TEST, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN,   Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.NOT,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                    [Debugger.INS.NEG,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                    [Debugger.INS.MUL,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                    [Debugger.INS.IMUL, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                    [Debugger.INS.DIV,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_IN],
                    [Debugger.INS.IDIV, Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH]
                  ],
                  [
                    /* GRP3W */
                    [Debugger.INS.TEST, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN,   Debugger.TYPE_IMM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.NOT,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
                    [Debugger.INS.NEG,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
                    [Debugger.INS.MUL,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.IMUL, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
                    [Debugger.INS.DIV,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.IDIV, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH]
                  ],
                  [
                    /* GRP4B */
                    [Debugger.INS.INC,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                    [Debugger.INS.DEC,  Debugger.TYPE_MODRM | Debugger.TYPE_BYTE  | Debugger.TYPE_BOTH],
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined
                  ],
                  [
                    /* GRP4W */
                    [Debugger.INS.INC,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
                    [Debugger.INS.DEC,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_BOTH],
                    [Debugger.INS.CALL, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.CALL, Debugger.TYPE_MODRM | Debugger.TYPE_FARP  | Debugger.TYPE_IN],
                    [Debugger.INS.JMP,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                    [Debugger.INS.JMP,  Debugger.TYPE_MODRM | Debugger.TYPE_FARP  | Debugger.TYPE_IN],
                    [Debugger.INS.PUSH, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN],
                     Debugger.aOpDescUndefined
                  ],
                  [ /* OP0F */ ],
                  [
                    /* GRP6 */
                    [Debugger.INS.SLDT, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_OUT | Debugger.TYPE_80286],
                    [Debugger.INS.STR,  Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_OUT | Debugger.TYPE_80286],
                    [Debugger.INS.LLDT, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                    [Debugger.INS.LTR,  Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                    [Debugger.INS.VERR, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                    [Debugger.INS.VERW, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined
                  ],
                  [
                    /* GRP7 */
                    [Debugger.INS.SGDT, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_OUT | Debugger.TYPE_80286],
                    [Debugger.INS.SIDT, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_OUT | Debugger.TYPE_80286],
                    [Debugger.INS.LGDT, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                    [Debugger.INS.LIDT, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                    [Debugger.INS.SMSW, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_OUT | Debugger.TYPE_80286],
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.LMSW, Debugger.TYPE_MODRM | Debugger.TYPE_WORD | Debugger.TYPE_IN  | Debugger.TYPE_80286],
                     Debugger.aOpDescUndefined
                  ],
                  [
                    /* GRP8 */
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                     Debugger.aOpDescUndefined,
                    [Debugger.INS.BT,  Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_IN  | Debugger.TYPE_80386, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.BTS, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_OUT | Debugger.TYPE_80386, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.BTR, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_OUT | Debugger.TYPE_80386, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN],
                    [Debugger.INS.BTC, Debugger.TYPE_MODRM | Debugger.TYPE_VWORD | Debugger.TYPE_OUT | Debugger.TYPE_80386, Debugger.TYPE_IMM | Debugger.TYPE_BYTE | Debugger.TYPE_IN]
                  ]
                ];
            
                Debugger.INT_FUNCS = {
                    0x13: {
                        0x00: "disk reset",
                        0x01: "get status",
                        0x02: "read drive DL (CH:DH:CL,AL) into ES:BX",
                        0x03: "write drive DL (CH:DH:CL,AL) from ES:BX",
                        0x04: "verify drive DL (CH:DH:CL,AL)",
                        0x05: "format drive DL using ES:BX",
                        0x08: "read drive DL parameters into ES:DI",
                        0x15: "get drive DL DASD type",
                        0x16: "get drive DL change line status",
                        0x17: "set drive DL DASD type",
                        0x18: "set drive DL media type"
                    },
                    0x15: {
                        0x80: "open device",
                        0x81: "close device",
                        0x82: "program termination",
                        0x83: "wait CX:DXus for event",
                        0x84: "joystick support",
                        0x85: "SYSREQ pressed",
                        0x86: "wait CX:DXus",
                        0x87: "move block (CX words)",
                        0x88: "get extended memory size",
                        0x89: "processor to virtual mode",
                        0x90: "device busy loop",
                        0x91: "interrupt complete flag set"
                    },
                    0x21: {
                        0x00: "terminate program",
                        0x01: "read character (al) from stdin with echo",
                        0x02: "write character DL to stdout",
                        0x03: "read character (al) from stdaux",                            // eg, COM1
                        0x04: "write character DL to stdaux",                               // eg, COM1
                        0x05: "write character DL to stdprn",                               // eg, LPT1
                        0x06: "direct console output (input if DL=FF)",
                        0x07: "direct console input without echo",
                        0x08: "read character (al) from stdin without echo",
                        0x09: "write $-terminated string DS:DX to stdout",
                        0x0A: "buffered input (ds:dx)",                                     // byte 0 is maximum chars, byte 1 is number of previous characters, byte 2 is number of characters read
                        0x0B: "get stdin status",
                        0x0C: "flush buffer and read stdin",                                // AL is a function # (0x01, 0x06, 0x07, 0x08, or 0x0A)
                        0x0D: "disk reset",
                        0x0E: "select default drive DL",                                    // returns # of available drives in AL
                        0x0F: "open file using fcb DS:DX",                                  // DS:DX -> unopened File Control Block
                        0x10: "close file using fcb DS:DX",
                        0x11: "find first matching file using fcb DS:DX",
                        0x12: "find next matching file using fcb DS:DX",
                        0x13: "delete file using fcb DS:DX",
                        0x14: "sequential read from file using fcb DS:DX",
                        0x15: "sequential write to file using fcb DS:DX",
                        0x16: "create or truncate file using fcb DS:DX",
                        0x17: "rename file using fcb DS:DX",
                        0x19: "get current default drive (al)",
                        0x1A: "set disk transfer area (dta) DS:DX",
                        0x1B: "get allocation information for default drive",
                        0x1C: "get allocation information for specific drive DL",
                        0x1F: "get drive parameter block for default drive",
                        0x21: "read random record from file using fcb DS:DX",
                        0x22: "write random record to file using fcb DS:DX",
                        0x23: "get file size using fcb DS:DX",
                        0x24: "set random record number for fcb DS:DX",
                        0x25: "set address DS:DX of interrupt vector AL",
                        0x26: "create new program segment prefix (psp) at segment DX",
                        0x27: "random block read from file using fcb DS:DX",
                        0x28: "random block write to file using fcb DS:DX",
                        0x29: "parse filename DS:SI into fcb ES:DI using AL",
                        0x2A: "get system date (year=cx, mon=dh, day=dl)",
                        0x2B: "set system date (year=CX, mon=DH, day=DL)",
                        0x2C: "get system time (hour=ch, min=cl, sec=dh, 100ths=dl)",
                        0x2D: "set system time (hour=CH, min=CL, sec=DH, 100ths=DL)",
                        0x2E: "set verify flag AL",
                        0x2F: "get disk transfer area address (es:bx)",                     // DOS 2.00+
                        0x30: "get DOS version (al=major, ah=minor)",
                        0x31: "terminate and stay resident",
                        0x32: "get drive parameter block (dpb=ds:bx) for drive DL",
                        0x33: "extended break check",
                        0x34: "get address (es:bx) of InDOS flag",
                        0x35: "get address (es:bx) of interrupt vector AL",
                        0x36: "get free disk space of drive DL",
                        0x37: "get(0)/set(1) switch character DL (AL)",
                        0x38: "get country-specific information",
                        0x39: "create subdirectory DS:DX",
                        0x3A: "remove subdirectory DS:DX",
                        0x3B: "set current directory DS:DX",
                        0x3C: "create or truncate file DS:DX with attributes CX",
                        0x3D: "open existing file DS:DX with mode AL",
                        0x3E: "close file BX",
                        0x3F: "read CX bytes from file BX into buffer DS:DX",
                        0x40: "write CX bytes to file BX from buffer DS:DX",
                        0x41: "delete file DS:DX",
                        0x42: "set position CX:DX of file BX relative to AL",
                        0x43: "get(0)/set(1) attributes CX of file DS:DX (AL)",
                        0x44: "get device information (IOCTL)",
                        0x45: "duplicate file handle BX",
                        0x46: "force file handle CX to duplicate file handle BX",
                        0x47: "get current directory (ds:si) for drive DL",
                        0x48: "allocate memory segment with BX paragraphs",
                        0x49: "free memory segment ES",
                        0x4A: "resize memory segment ES to BX paragraphs",
                        0x4B: "load program DS:DX using parameter block ES:BX",
                        0x4C: "terminate with return code AL",
                        0x4D: "get return code (al)",
                        0x4E: "find first matching file DS:DX with attributes CX",
                        0x4F: "find next matching file",
                        0x50: "set current psp BX",
                        0x51: "get current psp (bx)",
                        0x52: "get system variables (es:bx)",
                        0x53: "translate bpb DS:SI to dpb (es:bp)",
                        0x54: "get verify flag (al)",
                        0x55: "create child psp at segment DX",
                        0x56: "rename file DS:DX to name ES:DI",
                        0x57: "get(0)/set(1) file date DX and time CX (AL)",
                        0x58: "get(0)/set(1) memory allocation strategy (AL)",              // DOS 2.11+
                        0x59: "get extended error information",                             // DOS 3.00+
                        0x5A: "create temporary file DS:DX with attributes CX",             // DOS 3.00+
                        0x5B: "create file DS:DX with attributes CX",                       // DOS 3.00+ (doesn't truncate existing files like 0x3C)
                        0x5C: "lock(0)/unlock(1) file BX region CX:DX length SI:DI (AL)"    // DOS 3.00+
                    }
                };
            
                /**
                 * initBus(bus, cpu, dbg)
                 *
                 * @this {Debugger}
                 * @param {Computer} cmp
                 * @param {Bus} bus
                 * @param {X86CPU} cpu
                 * @param {Debugger} dbg
                 */
                Debugger.prototype.initBus = function(cmp, bus, cpu, dbg)
                {
                    this.bus = bus;
                    this.cpu = cpu;
                    this.cmp = cmp;
                    this.fdc = cmp.getComponentByType("FDC");
                    this.hdc = cmp.getComponentByType("HDC");
                    if (MAXDEBUG) this.chipset = cmp.getComponentByType("ChipSet");
            
                    this.cchAddr = bus.getWidth() >> 2;
                    this.maskAddr = bus.nBusLimit;
            
                    this.aaOpDescs = Debugger.aaOpDescs;
                    if (this.cpu.model >= X86.MODEL_80186) {
                        this.aaOpDescs = Debugger.aaOpDescs.slice();
                        this.aaOpDescs[0x0F] = Debugger.aOpDescUndefined;
                        if (this.cpu.model >= X86.MODEL_80286) {
                            this.aaOpDescs[0x0F] = Debugger.aOpDesc0F;
                            if (I386 && this.cpu.model >= X86.MODEL_80386) {
                                this.cchReg = 8;
                                this.maskReg = 0xffffffff|0;
                            }
                        }
                    }
            
                    this.messageDump(Messages.BUS,  function onDumpBus(s)  { dbg.dumpBus(s); });
                    this.messageDump(Messages.DESC, function onDumpDesc(s) { dbg.dumpDesc(s); });
                    this.messageDump(Messages.TSS,  function onDumpTSS(s)  { dbg.dumpTSS(s); });
                    this.messageDump(Messages.DOS,  function onDumpDOS(s)  { dbg.dumpDOS(s); });
            
                    this.setReady();
                };
            
                /**
                 * setBinding(sHTMLType, sBinding, control)
                 *
                 * @this {Debugger}
                 * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
                 * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "debugInput")
                 * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
                 * @return {boolean} true if binding was successful, false if unrecognized binding request
                 */
                Debugger.prototype.setBinding = function(sHTMLType, sBinding, control)
                {
                    var dbg = this;
                    switch (sBinding) {
            
                    case "debugInput":
                        this.bindings[sBinding] = control;
                        this.controlDebug = control;
                        /*
                         * For halted machines, this is fine, but for auto-start machines, it can be annoying.
                         *
                         *      control.focus();
                         */
                        control.onkeydown = function onKeyDownDebugInput(event) {
                            var sInput;
                            if (event.keyCode == Keyboard.KEYCODE.CR) {
                                sInput = control.value;
                                control.value = "";
                                var a = dbg.parseCommand(sInput, true);
                                for (var s in a) dbg.doCommand(a[s]);
                            }
                            else if (event.keyCode == Keyboard.KEYCODE.ESC) {
                                control.value = sInput = "";
                            }
                            else {
                                if (event.keyCode == Keyboard.KEYCODE.UP) {
                                    if (dbg.iPrevCmd < dbg.aPrevCmds.length - 1) {
                                        sInput = dbg.aPrevCmds[++dbg.iPrevCmd];
                                    }
                                }
                                else if (event.keyCode == Keyboard.KEYCODE.DOWN) {
                                    if (dbg.iPrevCmd > 0) {
                                        sInput = dbg.aPrevCmds[--dbg.iPrevCmd];
                                    } else {
                                        sInput = "";
                                        dbg.iPrevCmd = -1;
                                    }
                                }
                                if (sInput != null) {
                                    var cch = sInput.length;
                                    control.value = sInput;
                                    control.setSelectionRange(cch, cch);
                                }
                            }
                            if (sInput != null && event.preventDefault) event.preventDefault();
                        };
                        return true;
            
                    case "debugEnter":
                        this.bindings[sBinding] = control;
                        web.onClickRepeat(
                            control,
                            500, 100,
                            function onClickDebugEnter(fRepeat) {
                                if (dbg.controlDebug) {
                                    var sInput = dbg.controlDebug.value;
                                    dbg.controlDebug.value = "";
                                    var a = dbg.parseCommand(sInput, true);
                                    for (var s in a) dbg.doCommand(a[s]);
                                    return true;
                                }
                                if (DEBUG) dbg.log("no debugger input buffer");
                                return false;
                            }
                        );
                        return true;
            
                    case "step":
                        this.bindings[sBinding] = control;
                        web.onClickRepeat(
                            control,
                            500, 100,
                            function onClickStep(fRepeat) {
                                var fCompleted = false;
                                if (!dbg.isBusy(true)) {
                                    dbg.setBusy(true);
                                    fCompleted = dbg.stepCPU(fRepeat? 1 : 0);
                                    dbg.setBusy(false);
                                }
                                return fCompleted;
                            }
                        );
                        return true;
            
                    default:
                        break;
                    }
                    return false;
                };
            
                /**
                 * setFocus()
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.setFocus = function()
                {
                    if (this.controlDebug) this.controlDebug.focus();
                };
            
                /**
                 * getSegment(sel)
                 *
                 * If the selector matches that of any of the CPU segment registers, then return the CPU's segment
                 * register, instead of creating our own dummy segment register.  This makes it possible for us to
                 * see what the CPU is seeing at certain critical junctures, such as after an LMSW instruction has
                 * switched the processor from real to protected mode.  Actually loading the selector from the GDT/LDT
                 * should be done only as a last resort.
                 *
                 * @param {number|null|undefined} sel
                 * @return {X86Seg|null} seg
                 */
                Debugger.prototype.getSegment = function(sel)
                {
                    if (sel === this.cpu.getCS()) return this.cpu.segCS;
                    if (sel === this.cpu.getDS()) return this.cpu.segDS;
                    if (sel === this.cpu.getES()) return this.cpu.segES;
                    if (sel === this.cpu.getSS()) return this.cpu.segSS;
                    if (I386 && this.cpu.model >= X86.MODEL_80386) {
                        if (sel === this.cpu.getFS()) return this.cpu.segFS;
                        if (sel === this.cpu.getGS()) return this.cpu.segGS;
                    }
                    if (this.nBreakSuppress) return null;
                    var seg = new X86Seg(this.cpu, X86Seg.ID.DEBUG, "DBG");
                    /*
                     * Note the load() function's fSuppress parameter, which the Debugger should ALWAYS set to true
                     * to avoid triggering a fault.
                     *
                     * TODO: Confirm that it's OK for getSegment() to drop any error from seg.load() on the floor....
                     */
                    seg.load(sel, true);
                    return seg;
                };
            
                /**
                 * getAddr(dbgAddr, fWrite, cb)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} [fWrite]
                 * @param {number} [cb] is number of bytes to check (1, 2 or 4); default is 1
                 * @return {number} is the corresponding linear address, or X86.ADDR_INVALID
                 */
                Debugger.prototype.getAddr = function(dbgAddr, fWrite, cb)
                {
                    /*
                     * Some addresses (eg, breakpoint addresses) save their original linear address in dbgAddr.addr,
                     * so we want to use that if it's there, but otherwise, dbgAddr is assumed to be a segmented address
                     * whose linear address must always be (re)calculated based on current machine state (mode, active
                     * descriptor tables, etc).
                     */
                    var addr = dbgAddr.addr;
                    if (addr == null) {
                        addr = X86.ADDR_INVALID;
                        var seg = this.getSegment(dbgAddr.sel);
                        if (seg) {
                            if (!fWrite) {
                                addr = seg.checkRead(dbgAddr.off, cb || 1, true);
                            } else {
                                addr = seg.checkWrite(dbgAddr.off, cb || 1, true);
                            }
                            dbgAddr.addr = addr;
                        }
                    }
                    return addr;
                };
            
                /**
                 * getByte(dbgAddr, inc)
                 *
                 * We must route all our memory requests through the CPU now, in case paging is enabled.
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number} [inc]
                 * @return {number}
                 */
                Debugger.prototype.getByte = function(dbgAddr, inc)
                {
                    var b = 0xff;
                    var addr = this.getAddr(dbgAddr, false, 1);
                    if (addr !== X86.ADDR_INVALID) {
                        b = this.cpu.probeAddr(addr) | 0;
                        if (inc) this.incAddr(dbgAddr, inc);
                    }
                    return b;
                };
            
                /**
                 * getWord(dbgAddr, fAdvance)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} [fAdvance]
                 * @return {number}
                 */
                Debugger.prototype.getWord = function(dbgAddr, fAdvance)
                {
                    if (!dbgAddr.fData32) {
                        return this.getShort(dbgAddr, fAdvance? 2 : 0);
                    }
                    return this.getLong(dbgAddr, fAdvance? 4 : 0);
                };
            
                /**
                 * getShort(dbgAddr, inc)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number} [inc]
                 * @return {number}
                 */
                Debugger.prototype.getShort = function(dbgAddr, inc)
                {
                    var w = 0xffff;
                    var addr = this.getAddr(dbgAddr, false, 2);
                    if (addr !== X86.ADDR_INVALID) {
                        w = this.cpu.probeAddr(addr) | (this.cpu.probeAddr(addr + 1) << 8);
                        if (inc) this.incAddr(dbgAddr, inc);
                    }
                    return w;
                };
            
                /**
                 * getLong(dbgAddr, inc)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number} [inc]
                 * @return {number}
                 */
                Debugger.prototype.getLong = function(dbgAddr, inc)
                {
                    var l = -1;
                    var addr = this.getAddr(dbgAddr, false, 4);
                    if (addr !== X86.ADDR_INVALID) {
                        l = this.cpu.probeAddr(addr) | (this.cpu.probeAddr(addr + 1) << 8) | (this.cpu.probeAddr(addr + 2) << 16) | (this.cpu.probeAddr(addr + 3) << 24);
                        if (inc) this.incAddr(dbgAddr, inc);
                    }
                    return l;
                };
            
                /**
                 * setByte(dbgAddr, b, inc)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number} b
                 * @param {number} [inc]
                 */
                Debugger.prototype.setByte = function(dbgAddr, b, inc)
                {
                    var addr = this.getAddr(dbgAddr, true, 1);
                    if (addr !== X86.ADDR_INVALID) {
                        this.cpu.setByte(addr, b);
                        if (inc) this.incAddr(dbgAddr, inc);
                        this.cpu.updateCPU();
                    }
                };
            
                /**
                 * setShort(dbgAddr, w, inc)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number} w
                 * @param {number} [inc]
                 */
                Debugger.prototype.setShort = function(dbgAddr, w, inc)
                {
                    var addr = this.getAddr(dbgAddr, true, 2);
                    if (addr !== X86.ADDR_INVALID) {
                        this.cpu.setShort(addr, w);
                        if (inc) this.incAddr(dbgAddr, inc);
                        this.cpu.updateCPU();
                    }
                };
            
                /**
                 * newAddr(off, sel, addr, fData32, fAddr32)
                 *
                 * @this {Debugger}
                 * @param {number|null|undefined} [off] (default is zero)
                 * @param {number|null|undefined} [sel] (default is undefined)
                 * @param {number|null|undefined} [addr] (default is undefined)
                 * @param {boolean} [fData32] (default is false)
                 * @param {boolean} [fAddr32] (default is false)
                 * @return {{DbgAddr}}
                 */
                Debugger.prototype.newAddr = function(off, sel, addr, fData32, fAddr32)
                {
                    if (fData32 === undefined) fData32 = (this.cpu && this.cpu.segCS.dataSize == 4);
                    if (fAddr32 === undefined) fAddr32 = (this.cpu && this.cpu.segCS.addrSize == 4);
                    return {off: off || 0, sel: sel, addr: addr, fTempBreak: false, fData32: fData32 || false, fAddr32: fAddr32 || false};
                };
            
                /**
                 * packAddr(dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @return {Array}
                 */
                Debugger.prototype.packAddr = function(dbgAddr)
                {
                    return [dbgAddr.off, dbgAddr.sel, dbgAddr.addr, dbgAddr.fTempBreak, dbgAddr.fData32, dbgAddr.fAddr32, dbgAddr.fOverride, dbgAddr.fComplete];
                };
            
                /**
                 * unpackAddr(aAddr)
                 *
                 * @this {Debugger}
                 * @param {Array} aAddr
                 * @return {{DbgAddr}}
                 */
                Debugger.prototype.unpackAddr = function(aAddr)
                {
                    return {off: aAddr[0], sel: aAddr[1], addr: aAddr[2], fTempBreak: aAddr[3], fData32: aAddr[4], fAddr32: aAddr[5], fOverride: aAddr[6], fComplete: aAddr[7]};
                };
            
                /**
                 * checkLimit(dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 */
                Debugger.prototype.checkLimit = function(dbgAddr)
                {
                    if (dbgAddr.sel != null) {
                        var seg = this.getSegment(dbgAddr.sel);
                        if (!seg || dbgAddr.off > seg.limit) {
                            /*
                             * TODO: This automatic wrap-to-zero is OK for normal segments, but for expand-down segments, not so much.
                             */
                            dbgAddr.off = 0;
                            dbgAddr.addr = null;
                        }
                    }
                };
            
                /**
                 * incAddr(dbgAddr, inc)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number|undefined} inc contains value to increment dbgAddr by (default is 1)
                 */
                Debugger.prototype.incAddr = function(dbgAddr, inc)
                {
                    inc = inc || 1;
                    if (dbgAddr.addr != null) {
                        dbgAddr.addr += inc;
                    }
                    if (dbgAddr.sel != null) {
                        dbgAddr.off += inc;
                        this.checkLimit(dbgAddr);
                    }
                };
            
                /**
                 * hexOffset(off, sel, fAddr32)
                 *
                 * @this {Debugger}
                 * @param {number|null} [off]
                 * @param {number|null} [sel]
                 * @param {boolean} [fAddr32] is true for 32-bit ADDRESS size
                 * @return {string} the hex representation of off (or sel:off)
                 */
                Debugger.prototype.hexOffset = function(off, sel, fAddr32)
                {
                    if (sel != null) {
                        return str.toHex(sel, 4) + ":" + str.toHex(off, (off & (0xffff0000|0)) || fAddr32? 8 : 4);
                    }
                    return str.toHex(off);
                };
            
                /**
                 * hexAddr(dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @return {string} the hex representation of the address
                 */
                Debugger.prototype.hexAddr = function(dbgAddr)
                {
                    return dbgAddr.sel == null? ("%" + str.toHex(dbgAddr.addr)) : this.hexOffset(dbgAddr.off, dbgAddr.sel, dbgAddr.fAddr32);
                };
            
                /**
                 * dumpSZ(dbgAddr, cchMax)
                 *
                 * Dump helper for zero-terminated strings.
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {number} [cchMax]
                 * @return {string} (and dbgAddr advanced past the terminating zero)
                 */
                Debugger.prototype.dumpSZ = function(dbgAddr, cchMax)
                {
                    var sChars = "";
                    cchMax = cchMax || 256;
                    while (sChars.length < cchMax) {
                        var b = this.getByte(dbgAddr, 1);
                        if (!b) break;
                        sChars += (b >= 32 && b < 128? String.fromCharCode(b) : ".");
                    }
                    return sChars;
                };
            
                /**
                 * dumpDOS(s)
                 *
                 * This dumps DOS MCBs (Memory Control Blocks).
                 *
                 * @this {Debugger}
                 * @param {string} [s]
                 */
                Debugger.prototype.dumpDOS = function(s)
                {
                    if (!s) {
                        this.println("no MCB");
                        return;
                    }
            
                    this.println("dumpDOS(" + s + ")");
            
                    /*
                     * If s is provided and str.parseInt(s) succeeds, then we assume it represents a starting
                     * MCB (Memory Control Block) segment, and we dump the corresponding blocks.
                     */
                    var sel = this.parseValue(s);
                    while (sel) {
                        var dbgAddr = this.newAddr(0, sel);
                        var bSig = this.getByte(dbgAddr, 1);
                        var wPID = this.getShort(dbgAddr, 2);
                        var wParas = this.getShort(dbgAddr, 5);
                        if (bSig != 0x4D && bSig != 0x5A) break;
                        this.println(this.hexOffset(0, sel) + ": '" + String.fromCharCode(bSig) + "' PID=" + str.toHexWord(wPID) + " LEN=" + str.toHexWord(wParas) + ' "' + this.dumpSZ(dbgAddr, 8) + '"');
                        sel += 1 + wParas;
                    }
                };
            
                Debugger.aTSSFields = {
                    "PREV_TSS":     0x00,
                    "CPL0_SP":      0x02,
                    "CPL0_SS":      0x04,
                    "CPL1_SP":      0x06,
                    "CPL1_SS":      0x08,
                    "CPL2_SP":      0x0a,
                    "CPL2_SS":      0x0c,
                    "TASK_IP":      0x0e,
                    "TASK_PS":      0x10,
                    "TASK_AX":      0x12,
                    "TASK_CX":      0x14,
                    "TASK_DX":      0x16,
                    "TASK_BX":      0x18,
                    "TASK_SP":      0x1a,
                    "TASK_BP":      0x1c,
                    "TASK_SI":      0x1e,
                    "TASK_DI":      0x20,
                    "TASK_ES":      0x22,
                    "TASK_CS":      0x24,
                    "TASK_SS":      0x26,
                    "TASK_DS":      0x28,
                    "TASK_LDT":     0x2a
                };
            
                /**
                 * dumpBus(s)
                 *
                 * This dumps Bus allocations.
                 *
                 * @this {Debugger}
                 * @param {string} [s]
                 */
                Debugger.prototype.dumpBus = function(s)
                {
                    this.println("id       physaddr   blkaddr   used    size    type");
                    this.println("-------- ---------  --------  ------  ------  ----");
                    for (var i = 0; i < this.cpu.aMemBlocks.length; i++) {
                        var block = this.cpu.aBusBlocks[i];
                        if (block.type === Memory.TYPE.NONE) continue;
                        this.println(str.toHex(block.id) + " %" + str.toHex(i << this.cpu.nBlockShift) + ": " + str.toHex(block.addr) + "  " + str.toHexWord(block.used) + "  " + str.toHexWord(block.size) + "  " + Memory.TYPE.NAMES[block.type]);
                    }
                };
            
                /**
                 * dumpDesc(s)
                 *
                 * This dumps a descriptor for the given selector.
                 *
                 * @this {Debugger}
                 * @param {string} [s]
                 */
                Debugger.prototype.dumpDesc = function(s)
                {
                    if (!s) {
                        this.println("no selector");
                        return;
                    }
            
                    var sel = this.parseValue(s);
                    if (sel === undefined) {
                        this.println("invalid selector: " + s);
                        return;
                    }
            
                    var seg = this.getSegment(sel);
                    this.println("dumpDesc(" + str.toHexWord(seg? seg.sel : sel) + "): %" + str.toHex(seg? seg.addrDesc : null, this.cchAddr));
                    if (!seg) return;
            
                    var sType;
                    var fGate = false;
                    if (seg.type & X86.DESC.ACC.TYPE.SEG) {
                        if (seg.type & X86.DESC.ACC.TYPE.CODE) {
                            sType = "code";
                            sType += (seg.type & X86.DESC.ACC.TYPE.READABLE)? ",readable" : ",execonly";
                            if (seg.type & X86.DESC.ACC.TYPE.CONFORMING) sType += ",conforming";
                        }
                        else {
                            sType = "data";
                            sType += (seg.type & X86.DESC.ACC.TYPE.WRITABLE)? ",writable" : ",readonly";
                            if (seg.type & X86.DESC.ACC.TYPE.EXPDOWN) sType += ",expdown";
                        }
                        if (seg.type & X86.DESC.ACC.TYPE.ACCESSED) sType += ",accessed";
                    }
                    else {
                        switch(seg.type) {
                        case X86.DESC.ACC.TYPE.TSS:
                            sType = "tss";
                            break;
                        case X86.DESC.ACC.TYPE.LDT:
                            sType = "ldt";
                            break;
                        case X86.DESC.ACC.TYPE.TSS_BUSY:
                            sType = "busy tss";
                            break;
                        case X86.DESC.ACC.TYPE.GATE_CALL:
                            sType = "call gate";
                            fGate = true;
                            break;
                        case X86.DESC.ACC.TYPE.GATE_TASK:
                            sType = "task gate";
                            fGate = true;
                            break;
                        case X86.DESC.ACC.TYPE.GATE_INT:
                            sType = "int gate";
                            fGate = true;
                            break;
                        case X86.DESC.ACC.TYPE.GATE_TRAP:
                            sType = "trap gate";
                            fGate = true;
                            break;
                        default:
                            break;
                        }
                    }
            
                    if (sType && !(seg.acc & X86.DESC.ACC.PRESENT)) sType += ",not present";
            
                    var sDump;
                    if (fGate) {
                        sDump = "seg=" + str.toHexWord(seg.base & 0xffff) + " off=" + str.toHexWord(seg.limit);
                    } else {
                        sDump = "base=" + str.toHex(seg.base, this.cchAddr) + " limit=" + str.toHex(seg.limit, (seg.limit & ~0xffff)? 8 : 4);
                    }
                    /*
                     * When we dump the EXT word, we mask off the LIMIT1619 and BASE2431 bits, because those have already
                     * been incorporated into the limit and base properties of the segment register; all we care about here
                     * are whether EXT contains any of the AVAIL (0x10), BIG (0x40) or LIMITPAGES (0x80) bits.
                     */
                    this.println(sDump + " type=" + str.toHexByte(seg.type >> 8) + " (" + sType + ")" + " ext=" + str.toHexWord(seg.ext & ~(X86.DESC.EXT.LIMIT1619 | X86.DESC.EXT.BASE2431)) + " dpl=" + str.toHexByte(seg.dpl));
                };
            
                /**
                 * dumpHistory(sCount)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sCount is the number of instructions to rewind to (default is 10)
                 */
                Debugger.prototype.dumpHistory = function(sCount)
                {
                    var sMore = "";
                    var cLines = 10;
                    var iHistory = this.iOpcodeHistory;
                    var aHistory = this.aOpcodeHistory;
                    if (aHistory.length) {
                        var n = (sCount === undefined? this.nextHistory : +sCount);
                        if (isNaN(n))
                            n = cLines;
                        else
                            sMore = "more ";
                        if (n > aHistory.length) {
                            this.println("note: only " + aHistory.length + " available");
                            n = aHistory.length;
                        }
                        iHistory -= n;
                        if (iHistory < 0) {
                            if (aHistory[aHistory.length - 1][1] != null) {
                                iHistory += aHistory.length;
                            } else {
                                n = iHistory + n;
                                iHistory = 0;
                            }
                        }
                        if (sCount !== undefined) {
                            this.println(n + " instructions earlier:");
                        }
                        while (cLines && iHistory != this.iOpcodeHistory) {
                            var dbgAddr = aHistory[iHistory++];
                            if (dbgAddr.sel == null) break;
                            /*
                             * We must create a new dbgAddr from the address we obtained from aHistory, because dbgAddr
                             * was a reference, not a copy, and we don't want getInstruction() modifying the original.
                             */
                            dbgAddr = this.newAddr(dbgAddr.off, dbgAddr.sel, dbgAddr.addr);
                            this.println(this.getInstruction(dbgAddr, "history", n--));
                            /*
                             * If there was an OPERAND or ADDRESS override on the previous instruction, getInstruction()
                             * will have automatically disassembled the next instruction, so skip one more history entry.
                             */
                            if (dbgAddr.fOverride) {
                                iHistory++; n--;
                            }
                            if (iHistory >= aHistory.length) iHistory = 0;
                            this.nextHistory = n;
                            cLines--;
                        }
                    }
                    if (cLines == 10) {
                        this.println("no " + sMore + "history available");
                        this.nextHistory = undefined;
                    }
                };
            
                /**
                 * dumpTSS(s)
                 *
                 * This dumps a TSS using the given selector.  If none is specified, the current TR is used.
                 *
                 * @this {Debugger}
                 * @param {string} [s]
                 */
                Debugger.prototype.dumpTSS = function(s)
                {
                    var seg;
                    if (!s) {
                        seg = this.cpu.segTSS;
                    } else {
                        var sel = this.parseValue(s);
                        if (sel === undefined) {
                            this.println("invalid task selector: " + s);
                            return;
                        }
                        seg = this.getSegment(sel);
                    }
            
                    this.println("dumpTSS(" + str.toHexWord(seg? seg.sel : sel) + "): %" + str.toHex(seg? seg.base : null, this.cchAddr));
                    if (!seg) return;
            
                    var sDump = "";
                    for (var sField in Debugger.aTSSFields) {
                        var off = Debugger.aTSSFields[sField];
                        var ch = (sField.length < 8? ' ' : '');
                        var addr = seg.base + off;
                        var w = this.cpu.probeAddr(addr) | (this.cpu.probeAddr(addr + 1) << 8);
                        if (sDump) sDump += '\n';
                        sDump += str.toHexWord(off) + " " + sField + ": " + ch + str.toHexWord(w);
                    }
            
                    this.println(sDump);
                };
            
                /**
                 * messageInit(sEnable)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sEnable contains zero or more message categories to enable, separated by '|' or ';'
                 */
                Debugger.prototype.messageInit = function(sEnable)
                {
                    this.dbg = this;
                    this.bitsMessage = this.bitsWarning = Messages.WARN;
                    this.sMessagePrev = null;
                    this.afnDumpers = [];
                    var aEnable = this.parseCommand(sEnable.replace("keys","key").replace("kbd","keyboard"));
                    if (aEnable.length) {
                        for (var m in Debugger.MESSAGES) {
                            if (usr.indexOf(aEnable, m) >= 0) {
                                this.bitsMessage |= Debugger.MESSAGES[m];
                                this.println(m + " messages enabled");
                            }
                        }
                    }
                };
            
                /**
                 * messageDump(bitMessage, fnDumper)
                 *
                 * @this {Debugger}
                 * @param {number} bitMessage is one Messages category flag
                 * @param {function(string)} fnDumper is a function the Debugger can use to dump data for that category
                 * @return {boolean} true if successfully registered, false if not
                 */
                Debugger.prototype.messageDump = function(bitMessage, fnDumper)
                {
                    for (var m in Debugger.MESSAGES) {
                        if (bitMessage == Debugger.MESSAGES[m]) {
                            this.afnDumpers[m] = fnDumper;
                            return true;
                        }
                    }
                    return false;
                };
            
                /**
                 * getRegIndex(sReg)
                 *
                 * @this {Debugger}
                 * @param {string} sReg
                 * @return {number}
                 */
                Debugger.prototype.getRegIndex = function(sReg) {
                    return usr.indexOf(Debugger.REGS, sReg.toUpperCase());
                };
            
                /**
                 * getRegValue(iReg)
                 *
                 * @this {Debugger}
                 * @param {number} iReg
                 * @return {string}
                 */
                Debugger.prototype.getRegValue = function(iReg) {
                    var s = "??";
                    if (iReg >= 0) {
                        var n, cch;
                        var cpu = this.cpu;
                        switch(iReg) {
                        case Debugger.REG_AL:
                            n = cpu.regEAX;  cch = 2;
                            break;
                        case Debugger.REG_CL:
                            n = cpu.regECX;  cch = 2;
                            break;
                        case Debugger.REG_DL:
                            n = cpu.regEDX;  cch = 2;
                            break;
                        case Debugger.REG_BL:
                            n = cpu.regEBX;  cch = 2;
                            break;
                        case Debugger.REG_AH:
                            n = cpu.regEAX >> 8; cch = 2;
                            break;
                        case Debugger.REG_CH:
                            n = cpu.regECX >> 8; cch = 2;
                            break;
                        case Debugger.REG_DH:
                            n = cpu.regEDX >> 8; cch = 2;
                            break;
                        case Debugger.REG_BH:
                            n = cpu.regEBX >> 8; cch = 2;
                            break;
                        case Debugger.REG_AX:
                            n = cpu.regEAX;  cch = 4;
                            break;
                        case Debugger.REG_CX:
                            n = cpu.regECX;  cch = 4;
                            break;
                        case Debugger.REG_DX:
                            n = cpu.regEDX;  cch = 4;
                            break;
                        case Debugger.REG_BX:
                            n = cpu.regEBX;  cch = 4;
                            break;
                        case Debugger.REG_SP:
                            n = cpu.getSP(); cch = 4;
                            break;
                        case Debugger.REG_BP:
                            n = cpu.regEBP;  cch = 4;
                            break;
                        case Debugger.REG_SI:
                            n = cpu.regESI;  cch = 4;
                            break;
                        case Debugger.REG_DI:
                            n = cpu.regEDI;  cch = 4;
                            break;
                        case Debugger.REG_IP:
                            n = cpu.getIP(); cch = this.cchReg;
                            break;
                        case Debugger.REG_PS:
                            n = cpu.getPS(); cch = this.cchReg;
                            break;
                        case Debugger.REG_SEG + Debugger.REG_ES:
                            n = cpu.getES(); cch = 4;
                            break;
                        case Debugger.REG_SEG + Debugger.REG_CS:
                            n = cpu.getCS(); cch = 4;
                            break;
                        case Debugger.REG_SEG + Debugger.REG_SS:
                            n = cpu.getSS(); cch = 4;
                            break;
                        case Debugger.REG_SEG + Debugger.REG_DS:
                            n = cpu.getDS(); cch = 4;
                            break;
                        }
                        if (!cch) {
                            if (this.cpu.model == X86.MODEL_80286) {
                                if (iReg == Debugger.REG_CR0) {
                                    n = cpu.regCR0;  cch = 4;
                                }
                            }
                            else if (I386 && this.cpu.model >= X86.MODEL_80386) {
                                switch(iReg) {
                                case Debugger.REG_EAX:
                                    n = cpu.regEAX;  cch = 8;
                                    break;
                                case Debugger.REG_ECX:
                                    n = cpu.regECX;  cch = 8;
                                    break;
                                case Debugger.REG_EDX:
                                    n = cpu.regEDX;  cch = 8;
                                    break;
                                case Debugger.REG_EBX:
                                    n = cpu.regEBX;  cch = 8;
                                    break;
                                case Debugger.REG_ESP:
                                    n = cpu.getSP(); cch = 8;
                                    break;
                                case Debugger.REG_EBP:
                                    n = cpu.regEBP;  cch = 8;
                                    break;
                                case Debugger.REG_ESI:
                                    n = cpu.regESI;  cch = 8;
                                    break;
                                case Debugger.REG_EDI:
                                    n = cpu.regEDI;  cch = 8;
                                    break;
                                case Debugger.REG_CR0:
                                    n = cpu.regCR0;  cch = 8;
                                    break;
                                case Debugger.REG_CR1:
                                    n = cpu.regCR1;  cch = 8;
                                    break;
                                case Debugger.REG_CR2:
                                    n = cpu.regCR2;  cch = 8;
                                    break;
                                case Debugger.REG_CR3:
                                    n = cpu.regCR3;  cch = 8;
                                    break;
                                case Debugger.REG_SEG + Debugger.REG_FS:
                                    n = cpu.getFS(); cch = 4;
                                    break;
                                case Debugger.REG_SEG + Debugger.REG_GS:
                                    n = cpu.getGS(); cch = 4;
                                    break;
                                }
                            }
                        }
                        if (cch) s = str.toHex(n, cch);
                    }
                    return s;
                };
            
                /**
                 * replaceRegs()
                 *
                 * @this {Debugger}
                 * @param {string} s
                 * @return {string}
                 */
                Debugger.prototype.replaceRegs = function(s) {
                    for (var iReg = 0; iReg < Debugger.REGS.length; iReg++) {
                        var sReg = Debugger.REGS[iReg];
                        if (s.indexOf(sReg) >= 0) {
                            s = str.replaceAll(sReg, this.getRegValue(iReg), s);
                        }
                    }
                    return s;
                };
            
                /**
                 * message(sMessage, fAddress)
                 *
                 * @this {Debugger}
                 * @param {string} sMessage is any caller-defined message string
                 * @param {boolean} [fAddress] is true to display the current CS:IP
                 */
                Debugger.prototype.message = function(sMessage, fAddress)
                {
                    if (fAddress) {
                        sMessage += " @" + this.hexOffset(this.cpu.getIP(), this.cpu.getCS());
                    }
            
                    if (this.sMessagePrev && sMessage == this.sMessagePrev) return;
            
                    if (!SAMPLER) this.println(sMessage);   // + " (" + this.cpu.getCycles() + " cycles)"
            
                    this.sMessagePrev = sMessage;
            
                    if (this.cpu) {
                        if (this.bitsMessage & Messages.HALT) {
                            this.stopCPU();
                        }
                        /*
                         * We have no idea what the frequency of println() calls might be; all we know is that they easily
                         * screw up the CPU's careful assumptions about cycles per burst.  So we call yieldCPU() after every
                         * message, to effectively end the current burst and start fresh.
                         *
                         * TODO: See CPU.calcStartTime() for a discussion of why we might want to call yieldCPU() *before*
                         * we display the message.
                         */
                        this.cpu.yieldCPU();
                    }
                };
            
                /**
                 * messageInt(nInt, addr)
                 *
                 * @this {Debugger}
                 * @param {number} nInt
                 * @param {number} addr (LIP after the "INT n" instruction has been fetched but not dispatched)
                 * @return {boolean} true if message generated (which in turn triggers addIntReturn() inside checkIntNotify()), false if not
                 */
                Debugger.prototype.messageInt = function(nInt, addr)
                {
                    var AH;
                    var fMessage = false;
                    var nCategory = Debugger.INT_MESSAGES[nInt];
                    if (nCategory) {
                        AH = this.cpu.regEAX >> 8;
                        if (this.messageEnabled(nCategory)) {
                            fMessage = true;
                        } else {
                            fMessage = (nCategory == Messages.FDC && this.messageEnabled(nCategory = Messages.HDC));
                        }
                    }
                    if (fMessage) {
                        var DL = this.cpu.regEDX & 0xff;
                        if (nInt == Interrupts.DOS.VECTOR && AH == 0x0b ||
                            nCategory == Messages.FDC && DL >= 0x80 || nCategory == Messages.HDC && DL < 0x80) {
                            fMessage = false;
                        }
                    }
                    if (fMessage) {
                        var aFuncs = Debugger.INT_FUNCS[nInt];
                        var sFunc = (aFuncs && aFuncs[AH]) || "";
                        if (sFunc) sFunc = ' ' + this.replaceRegs(sFunc);
                        /*
                         * For purposes of display only, rewind addr to the address of the responsible "INT n" instruction; we
                         * know it's the two-byte "INT n" instruction because that's the only opcode handler that calls checkIntNotify()
                         * at the moment.  If that changes, then this will have to change as well.
                         */
                        addr -= 2;
                        this.message("INT " + str.toHexByte(nInt) + ": AH=" + str.toHexByte(AH) + " @" + this.hexOffset(addr - this.cpu.segCS.base, this.cpu.getCS()) + sFunc);
                    }
                    return fMessage;
                };
            
                /**
                 * messageIntReturn(nInt, nLevel, nCycles)
                 *
                 * @this {Debugger}
                 * @param {number} nInt
                 * @param {number} nLevel
                 * @param {number} nCycles
                 * @param {string} [sResult]
                 */
                Debugger.prototype.messageIntReturn = function(nInt, nLevel, nCycles, sResult)
                {
                    this.message("INT " + str.toHexByte(nInt) + ": C=" + (this.cpu.getCF()? 1 : 0) + (sResult || "") + " (cycles=" + nCycles + (nLevel? ",level=" + (nLevel+1) : "") + ")");
                };
            
                /**
                 * messageIO(component, port, bOut, addrFrom, name, bIn, bitsMessage)
                 *
                 * @this {Debugger}
                 * @param {Component} component
                 * @param {number} port
                 * @param {number|null} bOut if an output operation
                 * @param {number|null} [addrFrom]
                 * @param {string|null} [name] of the port, if any
                 * @param {number|null} [bIn] is the input value, if known, on an input operation
                 * @param {number} [bitsMessage] is one or more Messages category flag(s)
                 */
                Debugger.prototype.messageIO = function(component, port, bOut, addrFrom, name, bIn, bitsMessage)
                {
                    bitsMessage |= Messages.PORT;
                    if (addrFrom == null || (this.bitsMessage & bitsMessage) == bitsMessage) {
                        var selFrom = null;
                        if (addrFrom != null) {
                            selFrom = this.cpu.getCS();
                            addrFrom -= this.cpu.segCS.base;
                        }
                        this.message(component.idComponent + "." + (bOut != null? "outPort" : "inPort") + '(' + str.toHexWord(port) + ',' + (name? name : "unknown") + (bOut != null? ',' + str.toHexByte(bOut) : "") + ")" + (bIn != null? (": " + str.toHexByte(bIn)) : "") + (addrFrom != null? (" @" + this.hexOffset(addrFrom, selFrom)) : ""));
                    }
                };
            
                /**
                 * traceInit()
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.traceInit = function()
                {
                    if (DEBUG) {
                        this.traceEnabled = {};
                        for (var prop in Debugger.TRACE) {
                            this.traceEnabled[prop] = false;
                        }
                        this.iTraceBuffer = 0;
                        this.aTraceBuffer = [];     // we now defer TRACE_LIMIT allocation until the first traceLog() call
                    }
                };
            
                /**
                 * traceLog(prop, dst, src, flagsIn, flagsOut, resultLo, resultHi)
                 *
                 * @this {Debugger}
                 * @param {string} prop
                 * @param {number} dst
                 * @param {number} src
                 * @param {number|null} flagsIn
                 * @param {number|null} flagsOut
                 * @param {number} resultLo
                 * @param {number} [resultHi]
                 */
                Debugger.prototype.traceLog = function(prop, dst, src, flagsIn, flagsOut, resultLo, resultHi)
                {
                    if (DEBUG) {
                        if (this.traceEnabled !== undefined && this.traceEnabled[prop]) {
                            var trace = Debugger.TRACE[prop];
                            var len = (trace.size >> 2);
                            var s = this.hexOffset(this.cpu.opLIP - this.cpu.segCS.base, this.cpu.getCS()) + " " + Debugger.INS_NAMES[trace.ins] + "(" + str.toHex(dst, len) + "," + str.toHex(src, len) + "," + (flagsIn === null? "-" : str.toHexWord(flagsIn)) + ") " + str.toHex(resultLo, len) + "," + (flagsOut === null? "-" : str.toHexWord(flagsOut));
                            if (!this.aTraceBuffer.length) this.aTraceBuffer = new Array(Debugger.TRACE_LIMIT);
                            this.aTraceBuffer[this.iTraceBuffer++] = s;
                            if (this.iTraceBuffer >= this.aTraceBuffer.length) {
                                /*
                                 * Instead of wrapping the buffer, we're going to turn all tracing off.
                                 *
                                 *      this.iTraceBuffer = 0;
                                 */
                                for (prop in this.traceEnabled) {
                                    this.traceEnabled[prop] = false;
                                }
                                this.println("trace buffer full");
                            }
                        }
                    }
                };
            
                /**
                 * init()
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.init = function()
                {
                    this.println("Type ? for list of debugger commands");
                    this.updateStatus();
                    if (this.sInitCommands) {
                        var a = this.parseCommand(this.sInitCommands);
                        delete this.sInitCommands;
                        for (var s in a) this.doCommand(a[s]);
                    }
                };
            
                /**
                 * historyInit()
                 *
                 * This function is intended to be called by the constructor, reset(), addBreakpoint(), findBreakpoint()
                 * and any other function that changes the checksEnabled() criteria used to decide whether checkInstruction()
                 * should be called.
                 *
                 * That is, if the history arrays need to be allocated and haven't already been allocated, then allocate them,
                 * and if the arrays are no longer needed, then deallocate them.
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.historyInit = function()
                {
                    var i;
                    if (!this.checksEnabled()) {
                        this.iOpcodeHistory = 0;
                        this.aOpcodeHistory = [];
                        this.aaOpcodeCounts = [];
                        return;
                    }
                    if (!this.aOpcodeHistory || !this.aOpcodeHistory.length) {
                        this.aOpcodeHistory = new Array(10000);
                        for (i = 0; i < this.aOpcodeHistory.length; i++) {
                            /*
                             * Preallocate dummy Addr (Array) objects in every history slot, so that
                             * checkInstruction() doesn't need to call newAddr() on every slot update.
                             */
                            this.aOpcodeHistory[i] = this.newAddr();
                        }
                        this.iOpcodeHistory = 0;
                    }
                    if (!this.aaOpcodeCounts || !this.aaOpcodeCounts.length) {
                        this.aaOpcodeCounts = new Array(256);
                        for (i = 0; i < this.aaOpcodeCounts.length; i++) {
                            this.aaOpcodeCounts[i] = [i, 0];
                        }
                    }
                };
            
                /**
                 * runCPU(fOnClick)
                 *
                 * @this {Debugger}
                 * @param {boolean} [fOnClick] is true if called from a click handler that might have stolen focus
                 * @return {boolean} true if run request successful, false if not
                 */
                Debugger.prototype.runCPU = function(fOnClick)
                {
                    if (!this.isCPUAvail()) return false;
                    this.cpu.runCPU(fOnClick);
                    return true;
                };
            
                /**
                 * stepCPU(nCycles, fRegs, fUpdateCPU)
                 *
                 * @this {Debugger}
                 * @param {number} nCycles (0 for one instruction without checking breakpoints)
                 * @param {boolean} [fRegs] is true to display registers after step (default is false)
                 * @param {boolean} [fUpdateCPU] is false to disable calls to updateCPU() (default is true)
                 * @return {boolean}
                 */
                Debugger.prototype.stepCPU = function(nCycles, fRegs, fUpdateCPU)
                {
                    if (!this.isCPUAvail()) return false;
            
                    this.nCycles = 0;
                    do {
                        if (!nCycles) {
                            /*
                             * When single-stepping, the CPU won't call checkInstruction(), which is good for
                             * avoiding breakpoints, but bad for instruction data collection if checks are enabled.
                             * So we call checkInstruction() ourselves.
                             */
                            if (this.checksEnabled()) this.checkInstruction(this.cpu.regLIP, 0);
                        }
                        try {
                            var nCyclesStep = this.cpu.stepCPU(nCycles);
                            if (nCyclesStep > 0) {
                                this.nCycles += nCyclesStep;
                                this.cpu.addCycles(nCyclesStep, true);
                                this.cpu.updateChecksum(nCyclesStep);
                                this.cInstructions++;
                            }
                        }
                        catch (e) {
                            this.nCycles = 0;
                            this.cpu.setError(e.stack || e.message);
                        }
                    } while (this.cpu.opFlags & X86.OPFLAG_PREFIXES);
            
                    /*
                     * Because we called cpu.stepCPU() and not cpu.runCPU(), we must nudge the cpu's update code,
                     * and then update our own state.  Normally, the only time fUpdateCPU will be false is when doStep()
                     * is calling us in a loop, in which case it will perform its own updateCPU() when it's done.
                     */
                    if (fUpdateCPU !== false) this.cpu.updateCPU();
            
                    this.updateStatus(fRegs || false, false);
                    return (this.nCycles > 0);
                };
            
                /**
                 * stopCPU()
                 *
                 * @this {Debugger}
                 * @param {boolean} [fComplete]
                 */
                Debugger.prototype.stopCPU = function(fComplete)
                {
                    if (this.cpu) this.cpu.stopCPU(fComplete);
                };
            
                /**
                 * updateStatus(fRegs, fCompact)
                 *
                 * @this {Debugger}
                 * @param {boolean} [fRegs] (default is true)
                 * @param {boolean} [fCompact] (default is true)
                 */
                Debugger.prototype.updateStatus = function(fRegs, fCompact)
                {
                    if (fRegs === undefined) fRegs = true;
                    if (fCompact === undefined) fCompact = true;
            
                    this.dbgAddrNextCode = this.newAddr(this.cpu.getIP(), this.cpu.getCS());
                    /*
                     * this.fProcStep used to be a simple boolean, but now it's 0 (or undefined)
                     * if inactive, 1 if stepping over an instruction without a register dump, or 2
                     * if stepping over an instruction with a register dump.
                     */
                    if (!fRegs || this.fProcStep == 1)
                        this.doUnassemble();
                    else {
                        this.doRegisters(null, fCompact);
                    }
                };
            
                /**
                 * isCPUAvail()
                 *
                 * Make sure the CPU is ready (finished initializing), not busy (already running), and not in an error state.
                 *
                 * @this {Debugger}
                 * @return {boolean}
                 */
                Debugger.prototype.isCPUAvail = function()
                {
                    if (!this.cpu)
                        return false;
                    if (!this.cpu.isReady())
                        return false;
                    if (!this.cpu.isPowered())
                        return false;
                    if (this.cpu.isBusy())
                        return false;
                    return !this.cpu.isError();
                };
            
                /**
                 * powerUp(data, fRepower)
                 *
                 * @this {Debugger}
                 * @param {Object|null} data
                 * @param {boolean} [fRepower]
                 * @return {boolean} true if successful, false if failure
                 */
                Debugger.prototype.powerUp = function(data, fRepower)
                {
                    if (!fRepower) {
                        /*
                         * Because Debugger save/restore support is somewhat limited (and didn't always exist),
                         * we deviate from the typical save/restore design pattern: instead of reset OR restore,
                         * we always reset and then perform a (potentially limited) restore.
                         */
                        this.reset(true);
            
                        // this.println(data? "resuming" : "powering up");
            
                        if (data && this.restore) {
                            if (!this.restore(data)) return false;
                        }
                    }
                    return true;
                };
            
                /**
                 * powerDown(fSave, fShutdown)
                 *
                 * @this {Debugger}
                 * @param {boolean} fSave
                 * @param {boolean} [fShutdown]
                 * @return {Object|boolean}
                 */
                Debugger.prototype.powerDown = function(fSave, fShutdown)
                {
                    if (fShutdown) this.println(fSave? "suspending" : "shutting down");
                    return fSave && this.save? this.save() : true;
                };
            
                /**
                 * reset(fQuiet)
                 *
                 * This is a notification handler, called by the Computer, to inform us of a reset.
                 *
                 * @this {Debugger}
                 * @param {boolean} fQuiet (true only when called from our own powerUp handler)
                 */
                Debugger.prototype.reset = function(fQuiet)
                {
                    this.historyInit();
                    this.cInstructions = 0;
                    this.sMessagePrev = null;
                    this.nCycles = 0;
                    this.dbgAddrNextCode = this.newAddr(this.cpu.getIP(), this.cpu.getCS());
                    /*
                     * fRunning is set by start() and cleared by stop().  In addition, we clear
                     * it here, so that if the CPU is reset while running, we can prevent stop()
                     * from unnecessarily dumping the CPU state.
                     */
                    if (this.aFlags.fRunning !== undefined && !fQuiet) this.println("reset");
                    this.aFlags.fRunning = false;
                    this.clearTempBreakpoint();
                    if (!fQuiet) this.updateStatus();
                };
            
                /**
                 * save()
                 *
                 * This implements (very rudimentary) save support for the Debugger component.
                 *
                 * @this {Debugger}
                 * @return {Object}
                 */
                Debugger.prototype.save = function()
                {
                    var state = new State(this);
                    state.set(0, this.packAddr(this.dbgAddrNextCode));
                    state.set(1, this.packAddr(this.dbgAddrAssemble));
                    state.set(2, [this.aPrevCmds, this.fAssemble, this.bitsMessage]);
                    return state.data();
                };
            
                /**
                 * restore(data)
                 *
                 * This implements (very rudimentary) restore support for the Debugger component.
                 *
                 * @this {Debugger}
                 * @param {Object} data
                 * @return {boolean} true if successful, false if failure
                 */
                Debugger.prototype.restore = function(data)
                {
                    var i = 0;
                    if (data[2] !== undefined) {
                        this.dbgAddrNextCode = this.unpackAddr(data[i++]);
                        this.dbgAddrAssemble = this.unpackAddr(data[i++]);
                        this.aPrevCmds = data[i][0];
                        if (typeof this.aPrevCmds == "string") this.aPrevCmds = [this.aPrevCmds];
                        this.fAssemble = data[i][1];
                        if (!this.bitsMessage) {
                            /*
                             * It's actually kind of annoying that a restored (or predefined) state will trump my initial state,
                             * at least in situations where I've changed the initial state, if I want to diagnose something.
                             * Perhaps I should save/restore both the initial and current bitsMessageEnabled, and if the initial
                             * values don't agree, then leave the current value alone.
                             *
                             * But, it's much easier to just leave bitsMessageEnabled alone whenever it already contains set bits.
                             */
                            this.bitsMessage = data[i][2];
                        }
                    }
                    return true;
                };
            
                /**
                 * start(ms, nCycles)
                 *
                 * This is a notification handler, called by the Computer, to inform us the CPU has started.
                 *
                 * @this {Debugger}
                 * @param {number} ms
                 * @param {number} nCycles
                 */
                Debugger.prototype.start = function(ms, nCycles)
                {
                    if (!this.fProcStep) this.println("running");
                    this.aFlags.fRunning = true;
                    this.msStart = ms;
                    this.nCyclesStart = nCycles;
                };
            
                /**
                 * stop(ms, nCycles)
                 *
                 * This is a notification handler, called by the Computer, to inform us the CPU has now stopped.
                 *
                 * @this {Debugger}
                 * @param {number} ms
                 * @param {number} nCycles
                 */
                Debugger.prototype.stop = function(ms, nCycles)
                {
                    if (this.aFlags.fRunning) {
                        this.aFlags.fRunning = false;
                        this.nCycles = nCycles - this.nCyclesStart;
                        if (!this.fProcStep) {
                            var sStopped = "stopped";
                            if (this.nCycles) {
                                var msTotal = ms - this.msStart;
                                var nCyclesPerSecond = (msTotal > 0? Math.round(this.nCycles * 1000 / msTotal) : 0);
                                sStopped += " (";
                                if (this.checksEnabled()) {
                                    sStopped += this.cInstructions + " ops, ";
                                    this.cInstructions = 0;     // remove this line if you want to maintain a longer total
                                }
                                sStopped += this.nCycles + " cycles, " + msTotal + " ms, " + nCyclesPerSecond + " hz)";
                                if (MAXDEBUG && this.chipset) {
                                    var i, c, n;
                                    for (i = 0; i < this.chipset.acInterrupts.length; i++) {
                                        c = this.chipset.acInterrupts[i];
                                        if (!c) continue;
                                        n = c / Math.round(msTotal / 1000);
                                        this.println("IRQ" + i + ": " + c + " interrupts (" + n + " per sec)");
                                        this.chipset.acInterrupts[i] = 0;
                                    }
                                    for (i = 0; i < this.chipset.acTimersFired.length; i++) {
                                        c = this.chipset.acTimersFired[i];
                                        if (!c) continue;
                                        n = c / Math.round(msTotal / 1000);
                                        this.println("TIMER" + i + ": " + c + " fires (" + n + " per sec)");
                                        this.chipset.acTimersFired[i] = 0;
                                    }
                                    n = 0;
                                    for (i = 0; i < this.chipset.acTimer0Counts.length; i++) {
                                        var a = this.chipset.acTimer0Counts[i];
                                        n += a[0];
                                        this.println("TIMER0 update #" + i + ": [" + a[0] + "," + a[1] + "," + a[2] + "]");
                                    }
                                    this.chipset.acTimer0Counts = [];
                                }
                            }
                            this.println(sStopped);
                        }
                        this.updateStatus(true, this.fProcStep != 2);
                        this.setFocus();
                        this.clearTempBreakpoint(this.cpu.regLIP);
                    }
                };
            
                /**
                 * checksEnabled(fRelease)
                 *
                 * This "check" function is called by the CPU; we indicate whether or not every instruction needs to be checked.
                 *
                 * Originally, this returned true even when there were only read and/or write breakpoints, but those breakpoints
                 * no longer require the intervention of checkInstruction(); the Bus component automatically swaps in/out appropriate
                 * functions to deal with those breakpoints in the appropriate memory blocks.  So I've simplified the test below.
                 *
                 * @this {Debugger}
                 * @param {boolean} [fRelease] is true for release criteria only; default is false (any criteria)
                 * @return {boolean} true if every instruction needs to pass through checkInstruction(), false if not
                 */
                Debugger.prototype.checksEnabled = function(fRelease)
                {
                    return ((DEBUG && !fRelease)? true : (this.aBreakExec.length > 1 || this.messageEnabled(Messages.INT) /* || this.aBreakRead.length > 1 || this.aBreakWrite.length > 1 */));
                };
            
                /**
                 * checkInstruction(addr, nState)
                 *
                 * This "check" function is called by the CPU to inform us about the next instruction to be executed,
                 * giving us an opportunity to look for "exec" breakpoints and update opcode frequencies and instruction history.
                 *
                 * @this {Debugger}
                 * @param {number} addr
                 * @param {number} nState is < 0 if stepping, 0 if starting, or > 0 if running
                 * @return {boolean} true if breakpoint hit, false if not
                 */
                Debugger.prototype.checkInstruction = function(addr, nState)
                {
                    if (nState > 0) {
                        if (this.checkBreakpoint(addr, this.aBreakExec)) {
                            return true;
                        }
                        /*
                         * Halt whenever ring 3 code is running with interrupts disabled, because that's likely an
                         * error (TODO: we should also check the IOPL, too, because if IOPL is 3, then this is OK).
                         */
                        if (this.cpu.segCS.cpl == 3 && !(this.cpu.regPS & X86.PS.IF)) {
                            return true;
                        }
                    }
            
                    /*
                     * The rest of the instruction tracking logic can only be performed if historyInit() has allocated the
                     * necessary data structures.  Note that there is no explicit UI for enabling/disabling history, other than
                     * adding/removing breakpoints, simply because it's breakpoints that trigger the call to checkInstruction();
                     * well, OK, and a few other things now, like enabling Messages.INT messages.
                     */
                    if (nState >= 0 && this.aaOpcodeCounts.length) {
                        this.cInstructions++;
                        var bOpcode = this.cpu.probeAddr(addr);
                        if (bOpcode != null) {
                            this.aaOpcodeCounts[bOpcode][1]++;
                            var dbgAddr = this.aOpcodeHistory[this.iOpcodeHistory];
                            dbgAddr.off = this.cpu.getIP();
                            dbgAddr.sel = this.cpu.getCS();
                            dbgAddr.addr = addr;
                            if (++this.iOpcodeHistory == this.aOpcodeHistory.length) this.iOpcodeHistory = 0;
                        }
                    }
                    return false;
                };
            
                /**
                 * checkMemoryRead(addr)
                 *
                 * This "check" function is called by a Memory block to inform us that a memory read occurred, giving us an
                 * opportunity to track the read if we want, and look for a matching "read" breakpoint, if any.
                 *
                 * @this {Debugger}
                 * @param {number} addr
                 * @return {boolean} true if breakpoint hit, false if not
                 */
                Debugger.prototype.checkMemoryRead = function(addr)
                {
                    if (this.checkBreakpoint(addr, this.aBreakRead)) {
                        this.stopCPU(true);
                        return true;
                    }
                    return false;
                };
            
                /**
                 * checkMemoryWrite(addr)
                 *
                 * This "check" function is called by a Memory block to inform us that a memory write occurred, giving us an
                 * opportunity to track the write if we want, and look for a matching "write" breakpoint, if any.
                 *
                 * @this {Debugger}
                 * @param {number} addr
                 * @return {boolean} true if breakpoint hit, false if not
                 */
                Debugger.prototype.checkMemoryWrite = function(addr)
                {
                    if (this.checkBreakpoint(addr, this.aBreakWrite)) {
                        this.stopCPU(true);
                        return true;
                    }
                    return false;
                };
            
                /**
                 * checkPortInput(port, bIn)
                 *
                 * This "check" function is called by the Bus component to inform us that port input occurred.
                 *
                 * @this {Debugger}
                 * @param {number} port
                 * @param {number} bIn
                 * @return {boolean} true if breakpoint hit, false if not
                 */
                Debugger.prototype.checkPortInput = function(port, bIn)
                {
                    /*
                     * We trust that the Bus component won't call us unless we told it to, so we halt unconditionally
                     */
                    this.println("break on input from port " + str.toHexWord(port) + ": " + str.toHexByte(bIn));
                    this.stopCPU(true);
                    return true;
                };
            
                /**
                 * checkPortOutput(port, bOut)
                 *
                 * This "check" function is called by the Bus component to inform us that port output occurred.
                 *
                 * @this {Debugger}
                 * @param {number} port
                 * @param {number} bOut
                 * @return {boolean} true if breakpoint hit, false if not
                 */
                Debugger.prototype.checkPortOutput = function(port, bOut)
                {
                    /*
                     * We trust that the Bus component won't call us unless we told it to, so we halt unconditionally
                     */
                    this.println("break on output to port " + str.toHexWord(port) + ": " + str.toHexByte(bOut));
                    this.stopCPU(true);
                    return true;
                };
            
                /**
                 * clearBreakpoints()
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.clearBreakpoints = function()
                {
                    var i;
                    this.aBreakExec = ["exec"];
                    if (this.aBreakRead !== undefined) {
                        for (i = 1; i < this.aBreakRead.length; i++) {
                            this.bus.removeMemBreak(this.getAddr(this.aBreakRead[i]), false);
                        }
                    }
                    this.aBreakRead = ["read"];
                    if (this.aBreakWrite !== undefined) {
                        for (i = 1; i < this.aBreakWrite.length; i++) {
                            this.bus.removeMemBreak(this.getAddr(this.aBreakWrite[i]), true);
                        }
                    }
                    this.aBreakWrite = ["write"];
                    /*
                     * nBreakSuppress ensures we can't get into an infinite loop where a breakpoint lookup requires
                     * reading a segment descriptor via getSegment(), and that triggers more memory reads, which triggers
                     * more breakpoint checks.
                     */
                    this.nBreakSuppress = 0;
                };
            
                /**
                 * addBreakpoint(aBreak, dbgAddr, fTempBreak)
                 *
                 * @this {Debugger}
                 * @param {Array} aBreak
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} [fTempBreak]
                 * @return {boolean} true if breakpoint added, false if already exists
                 */
                Debugger.prototype.addBreakpoint = function(aBreak, dbgAddr, fTempBreak)
                {
                    if (!this.findBreakpoint(aBreak, dbgAddr)) {
                        dbgAddr.fTempBreak = fTempBreak;
                        aBreak.push(dbgAddr);
                        if (aBreak != this.aBreakExec) {
                            this.bus.addMemBreak(this.getAddr(dbgAddr), aBreak == this.aBreakWrite);
                        }
                        if (fTempBreak) {
                            /*
                             * Force temporary breakpoints to be interpreted as linear breakpoints
                             * (hence the assertion that there IS a linear address stored in dbgAddr);
                             * this allows us to step over calls or interrupts that change the processor mode
                             */
                            dbgAddr.sel = null;
                            this.assert(dbgAddr.addr);
                        } else {
                            this.println("breakpoint enabled: " + this.hexAddr(dbgAddr) + " (" + aBreak[0] + ")");
                        }
                        this.historyInit();
                        return true;
                    }
                    return false;
                };
            
                /**
                 * findBreakpoint(aBreak, dbgAddr, fRemove)
                 *
                 * @this {Debugger}
                 * @param {Array} aBreak
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} [fRemove]
                 * @return {boolean} true if found, false if not
                 */
                Debugger.prototype.findBreakpoint = function(aBreak, dbgAddr, fRemove)
                {
                    var fFound = false;
                    var addr = this.mapBreakpoint(this.getAddr(dbgAddr));
                    for (var i = 1; i < aBreak.length; i++) {
                        var dbgAddrBreak = aBreak[i];
                        if (addr == this.mapBreakpoint(this.getAddr(dbgAddrBreak))) {
                            fFound = true;
                            if (fRemove) {
                                aBreak.splice(i, 1);
                                if (aBreak != this.aBreakExec) {
                                    this.bus.removeMemBreak(addr, aBreak == this.aBreakWrite);
                                }
                                if (!dbgAddrBreak.fTempBreak) this.println("breakpoint cleared: " + this.hexAddr(dbgAddrBreak) + " (" + aBreak[0] + ")");
                                this.historyInit();
                                break;
                            }
                            this.println("breakpoint exists: " + this.hexAddr(dbgAddrBreak) + " (" + aBreak[0] + ")");
                            break;
                        }
                    }
                    return fFound;
                };
            
                /**
                 * listBreakpoints(aBreak)
                 *
                 * TODO: We may need to start listing linear addresses also, because segmented address can be ambiguous.
                 *
                 * @this {Debugger}
                 * @param {Array} aBreak
                 * @return {number} of breakpoints listed, 0 if none
                 */
                Debugger.prototype.listBreakpoints = function(aBreak)
                {
                    for (var i = 1; i < aBreak.length; i++) {
                        this.println("breakpoint enabled: " + this.hexAddr(aBreak[i]) + " (" + aBreak[0] + ")");
                    }
                    return aBreak.length - 1;
                };
            
                /**
                 * redoBreakpoints()
                 *
                 * This function is for the Memory component: whenever the Bus allocates a new Memory block, it calls
                 * the block's setDebugger() method, which clears the memory block's breakpoint counts.  setDebugger(),
                 * in turn, must call this function to re-apply any existing breakpoints to that block.
                 *
                 * This ensures that, even if a memory region is remapped (which creates new Memory blocks in the process),
                 * any breakpoints that were previously applied to that region will still work.
                 *
                 * @this {Debugger}
                 * @param {number} addr of memory block
                 * @param {number} size of memory block
                 * @param {Array} [aBreak]
                 */
                Debugger.prototype.redoBreakpoints = function(addr, size, aBreak)
                {
                    if (aBreak === undefined) {
                        this.redoBreakpoints(addr, size, this.aBreakRead);
                        this.redoBreakpoints(addr, size, this.aBreakWrite);
                        return;
                    }
                    for (var i = 1; i < aBreak.length; i++) {
                        var addrBreak = this.getAddr(aBreak[i]);
                        if (addrBreak >= addr && addrBreak < addr + size) {
                            this.bus.addMemBreak(addrBreak, aBreak == this.aBreakWrite);
                        }
                    }
                };
            
                /**
                 * setTempBreakpoint(dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr of new temp breakpoint
                 */
                Debugger.prototype.setTempBreakpoint = function(dbgAddr)
                {
                    this.addBreakpoint(this.aBreakExec, dbgAddr, true);
                };
            
                /**
                 * clearTempBreakpoint(addr)
                 *
                 * @this {Debugger}
                 * @param {number|undefined} [addr] clear all temp breakpoints if no address specified
                 */
                Debugger.prototype.clearTempBreakpoint = function(addr)
                {
                    if (addr !== undefined) {
                        this.checkBreakpoint(addr, this.aBreakExec, true);
                        this.fProcStep = 0;
                    } else {
                        for (var i = 1; i < this.aBreakExec.length; i++) {
                            var dbgAddrBreak = this.aBreakExec[i];
                            if (dbgAddrBreak.fTempBreak) {
                                if (!this.findBreakpoint(this.aBreakExec, dbgAddrBreak, true)) break;
                                i = 0;
                            }
                        }
                    }
                };
            
                /**
                 * mapBreakpoint(addr)
                 *
                 * @this {Debugger}
                 * @param {number} addr
                 * @return {number}
                 */
                Debugger.prototype.mapBreakpoint = function(addr)
                {
                    /*
                     * Map addresses in the top 64Kb at the top of the address space (assuming either a 16Mb or 4Gb
                     * address space) to the top of the 1Mb range.
                     *
                     * The fact that those two 64Kb regions are aliases of each other on an 80286 is a pain in the BUTT,
                     * because any CS-based breakpoint you set immediately after a CPU reset will have a physical address
                     * in the top 16Mb, yet after the first inter-segment JMP, you will be running in the first 1Mb.
                     */
                    var mask = (this.maskAddr & ~0xffff);
                    if ((addr & mask) == mask) addr &= 0x000fffff;
                    return addr;
                };
            
                /**
                 * checkBreakpoint(addr, aBreak, fTemp)
                 *
                 * @this {Debugger}
                 * @param {number} addr
                 * @param {Array} aBreak
                 * @param {boolean} [fTemp]
                 * @return {boolean} true if breakpoint has been hit, false if not
                 */
                Debugger.prototype.checkBreakpoint = function(addr, aBreak, fTemp)
                {
                    /*
                     * Time to check for execution breakpoints; note that this should be done BEFORE updating frequency
                     * or history data (see checkInstruction), since we might not actually execute the current instruction.
                     */
                    var fBreak = false;
                    if (!this.nBreakSuppress++) {
            
                        addr = this.mapBreakpoint(addr);
            
                        /*
                         * As discussed in opINT3(), I decided to check for INT3 instructions here: we'll tell the CPU to
                         * stop on INT3 whenever both the INT and HALT message bits are set; a simple "g" command allows you
                         * to continue.
                         */
                        if (this.messageEnabled(Messages.INT | Messages.HALT)) {
                            if (this.cpu.probeAddr(addr) == X86.OPCODE.INT3) {
                                fBreak = true;
                            }
                        }
            
                        for (var i = 1; !fBreak && i < aBreak.length; i++) {
            
                            var dbgAddrBreak = aBreak[i];
            
                            /*
                             * We need to zap the linear address field of the breakpoint address before
                             * calling getAddr(), to force it to recalculate the linear address every time,
                             * unless this is a breakpoint on a linear address (as indicated by a null sel).
                             */
                            if (dbgAddrBreak.sel != null) dbgAddrBreak.addr = null;
            
                            /*
                             * We used to calculate the linear address of the breakpoint at the time the
                             * breakpoint was added, so that a breakpoint set in one mode (eg, in real-mode)
                             * would still work as intended if the mode changed later (eg, to protected-mode).
                             *
                             * However, that created difficulties setting protected-mode breakpoints in segments
                             * that might not be defined yet, or that could move in physical memory.
                             *
                             * If you want to create a real-mode breakpoint that will break regardless of mode,
                             * use the physical address of the real-mode memory location instead.
                             */
                            if (addr == this.mapBreakpoint(this.getAddr(dbgAddrBreak))) {
                                if (dbgAddrBreak.fTempBreak) {
                                    this.findBreakpoint(aBreak, dbgAddrBreak, true);
                                } else if (!fTemp) {
                                    this.println("breakpoint hit: " + this.hexAddr(dbgAddrBreak) + " (" + aBreak[0] + ")");
                                }
                                fBreak = true;
                            }
                        }
                    }
                    this.nBreakSuppress--;
                    return fBreak;
                };
            
                /**
                 * getInstruction(dbgAddr, sComment, nSequence)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {string} [sComment] is an associated comment
                 * @param {number} [nSequence] is an associated sequence number, undefined if none
                 * @return {string} (and dbgAddr is updated to the next instruction)
                 */
                Debugger.prototype.getInstruction = function(dbgAddr, sComment, nSequence)
                {
                    var dbgAddrIns = this.newAddr(dbgAddr.off, dbgAddr.sel, dbgAddr.addr);
            
                    var bOpcode = this.getByte(dbgAddr, 1);
            
                    /*
                     * Incorporate the following prefixes into the current instruction byte stream.
                     * TODO: Determine the actual effect of multiple OS (and/or multiple AS) prefixes.
                     */
                    var cMax = 2;           // let's make sure unfortunate memory contents don't screw us
                    while ((bOpcode == X86.OPCODE.OS || bOpcode == X86.OPCODE.AS) && cMax--) {
                        if (bOpcode == X86.OPCODE.OS) {
                            dbgAddr.fData32 = !dbgAddr.fData32;
                        } else {
                            dbgAddr.fAddr32 = !dbgAddr.fAddr32;
                        }
                        bOpcode = this.getByte(dbgAddr, 1);
                    }
            
                    var aOpDesc = this.aaOpDescs[bOpcode];
                    var iIns = aOpDesc[0];
                    var bModRM = -1;
            
                    if (iIns == Debugger.INS.OP0F) {
                        var b = this.getByte(dbgAddr, 1);
                        aOpDesc = Debugger.aaOp0FDescs[b] || Debugger.aOpDescUndefined;
                        bOpcode |= (b << 8);
                        iIns = aOpDesc[0];
                    }
            
                    if (iIns >= Debugger.INS_NAMES.length) {
                        bModRM = this.getByte(dbgAddr, 1);
                        aOpDesc = Debugger.aaGrpDescs[iIns - Debugger.INS_NAMES.length][(bModRM >> 3) & 0x7];
                    }
            
                    var sOpcode = Debugger.INS_NAMES[aOpDesc[0]];
                    var cOperands = aOpDesc.length - 1;
                    var sOperands = "";
                    if (this.isStringIns(bOpcode)) {
                        cOperands = 0;              // suppress display of operands for string instructions
                        if (dbgAddr.fData32 && sOpcode.slice(-1) == 'W') sOpcode = sOpcode.slice(0, -1) + 'D';
                    }
            
                    var typeCPU = null;
                    var fNonPrefix = true;
            
                    for (var iOperand = 1; iOperand <= cOperands; iOperand++) {
            
                        var disp, offset, cch;
                        var sOperand = "";
                        var type = aOpDesc[iOperand];
                        if (type === undefined) continue;
            
                        if (typeCPU == null) typeCPU = type >> Debugger.TYPE_CPU_SHIFT;
            
                        var typeSize = type & Debugger.TYPE_SIZE;
                        if (typeSize == Debugger.TYPE_NONE) {
                            continue;
                        }
                        if (typeSize == Debugger.TYPE_PREFIX) {
                            fNonPrefix = false;
                            continue;
                        }
                        var typeMode = type & Debugger.TYPE_MODE;
                        if (typeMode >= Debugger.TYPE_MODRM) {
                            if (bModRM < 0) {
                                bModRM = this.getByte(dbgAddr, 1);
                            }
                            if (typeMode >= Debugger.TYPE_REG) {
                                sOperand = this.getRegOperand((bModRM >> 3) & 0x7, type, dbgAddr);
                            }
                            else {
                                sOperand = this.getModRMOperand(bModRM, type, dbgAddr);
                            }
                        }
                        else if (typeMode == Debugger.TYPE_ONE) {
                            sOperand = "1";
                        }
                        else if (typeMode == Debugger.TYPE_IMM) {
                            sOperand = this.getImmOperand(type, dbgAddr);
                        }
                        else if (typeMode == Debugger.TYPE_IMMOFF) {
                            if (!dbgAddr.fAddr32) {
                                cch = 4;
                                offset = this.getShort(dbgAddr, 2);
                            } else {
                                cch = 8;
                                offset = this.getLong(dbgAddr, 4);
                            }
                            sOperand = "[" + str.toHex(offset, cch) + "]";
                        }
                        else if (typeMode == Debugger.TYPE_IMMREL) {
                            if (typeSize == Debugger.TYPE_BYTE) {
                                disp = ((this.getByte(dbgAddr, 1) << 24) >> 24);
                            }
                            else {
                                disp = this.getWord(dbgAddr, true);
                            }
                            offset = (dbgAddr.off + disp) & (dbgAddr.fData32? -1 : 0xffff);
                            var aSymbol = this.findSymbolAtAddr(this.newAddr(offset, dbgAddr.sel));
                            sOperand = aSymbol[0] || str.toHex(offset, dbgAddr.fData32? 8: 4);
                        }
                        else if (typeMode == Debugger.TYPE_IMPREG) {
                            sOperand = this.getRegOperand((type & Debugger.TYPE_IREG) >> 8, type, dbgAddr);
                        }
                        else if (typeMode == Debugger.TYPE_IMPSEG) {
                            sOperand = this.getRegOperand((type & Debugger.TYPE_IREG) >> 8, Debugger.TYPE_SEGREG, dbgAddr);
                        }
                        else if (typeMode == Debugger.TYPE_DSSI) {
                            sOperand = "DS:[SI]";
                        }
                        else if (typeMode == Debugger.TYPE_ESDI) {
                            sOperand = "ES:[DI]";
                        }
                        if (!sOperand || !sOperand.length) {
                            sOperands = "INVALID";
                            break;
                        }
                        if (sOperands.length > 0) sOperands += ",";
                        sOperands += sOperand;
                    }
            
                    var sLine = this.hexAddr(dbgAddrIns) + " ";
                    var sBytes = "";
                    do {
                        sBytes += str.toHex(this.getByte(dbgAddrIns, 1), 2);
                    } while (dbgAddrIns.addr != dbgAddr.addr);
            
                    sLine += str.pad(sBytes, 16);
                    sLine += str.pad(sOpcode, 8);
                    if (sOperands) sLine += " " + sOperands;
            
                    if (this.cpu.model < Debugger.CPUS[typeCPU]) {
                        sComment = Debugger.CPUS[typeCPU] + " CPU only";
                    }
            
                    if (sComment && fNonPrefix) {
                        sLine = str.pad(sLine, 56) + ';' + sComment;
                        if (!this.cpu.aFlags.fChecksum) {
                            sLine += (nSequence != null? '=' + nSequence.toString() : "");
                        } else {
                            var nCycles = this.cpu.getCycles();
                            sLine += "cycles=" + nCycles.toString() + " cs=" + str.toHex(this.cpu.aCounts.nChecksum);
                        }
                    }
            
                    this.initAddrSize(dbgAddr, fNonPrefix);
                    return sLine;
                };
            
                /**
                 * getImmOperand(type, dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {number} type
                 * @param {{DbgAddr}} dbgAddr
                 * @return {string} operand
                 */
                Debugger.prototype.getImmOperand = function(type, dbgAddr)
                {
                    var sOperand = " ";
                    var typeSize = type & Debugger.TYPE_SIZE;
                    switch (typeSize) {
                    case Debugger.TYPE_BYTE:
                        /*
                         * There's the occasional immediate byte we don't need to display (eg, the 0x0A
                         * following an AAM or AAD instruction), so we suppress the byte if it lacks a TYPE_IN
                         * or TYPE_OUT designation (and TYPE_BOTH, as the name implies, includes both).
                         */
                        if (type & Debugger.TYPE_BOTH) {
                            sOperand = str.toHex(this.getByte(dbgAddr, 1), 2);
                        }
                        break;
                    case Debugger.TYPE_SBYTE:
                        sOperand = str.toHex((this.getByte(dbgAddr, 1) << 24) >> 24, 4);
                        break;
                    case Debugger.TYPE_VWORD:
                    case Debugger.TYPE_2WORD:
                        if (dbgAddr.fData32) {
                            sOperand = str.toHex(this.getLong(dbgAddr, 4));
                            break;
                        }
                        /* falls through */
                    case Debugger.TYPE_WORD:
                        sOperand = str.toHex(this.getShort(dbgAddr, 2), 4);
                        break;
                    case Debugger.TYPE_FARP:
                        sOperand = this.hexAddr(this.newAddr(this.getWord(dbgAddr, true), this.getShort(dbgAddr, 2), null, dbgAddr.fData32, dbgAddr.fAddr32));
                        break;
                    default:
                        sOperand = "imm(" + str.toHexWord(type) + ")";
                        break;
                    }
                    return sOperand;
                };
            
                /**
                 * getRegOperand(bReg, type, dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {number} bReg
                 * @param {number} type
                 * @param {{DbgAddr}} dbgAddr
                 * @return {string} operand
                 */
                Debugger.prototype.getRegOperand = function(bReg, type, dbgAddr)
                {
                    var typeMode = type & Debugger.TYPE_MODE;
                    if (typeMode == Debugger.TYPE_SEGREG) {
                        if (bReg > Debugger.REG_GS ||
                            bReg >= Debugger.REG_FS && this.cpu.model < X86.MODEL_80386) return "??";
                        bReg += Debugger.REG_SEG;
                    }
                    else if (typeMode == Debugger.TYPE_CTLREG) {
                        bReg += Debugger.REG_CR0;
                    }
                    else {
                        var typeSize = type & Debugger.TYPE_SIZE;
                        if (typeSize >= Debugger.TYPE_WORD) {
                            if (bReg < Debugger.REG_AX) {
                                bReg += Debugger.REG_AX - Debugger.REG_AL;
                            }
                            if (typeSize == Debugger.TYPE_DWORD || typeSize == Debugger.TYPE_VWORD && dbgAddr.fData32) {
                                bReg += Debugger.REG_EAX - Debugger.REG_AX;
                            }
                        }
                    }
                    return Debugger.REGS[bReg];
                };
            
                /**
                 * getSIBOperand(bMod, dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {number} bMod
                 * @param {{DbgAddr}} dbgAddr
                 * @return {string} operand
                 */
                Debugger.prototype.getSIBOperand = function(bMod, dbgAddr)
                {
                    var bSIB = this.getByte(dbgAddr, 1);
                    var bScale = bSIB >> 6;
                    var bIndex = (bSIB >> 3) & 0x7;
                    var bBase = bSIB & 0x7;
                    var sOperand = "";
                    if (bMod || bBase != 5) {
                        sOperand = Debugger.RMS[bBase + 8];
                    }
                    if (bIndex != 4) {
                        if (sOperand) sOperand += '+';
                        sOperand += Debugger.RMS[bIndex + 8];
                        if (bScale) sOperand += '*' + (0x1 << bScale);
                    }
                    return sOperand;
                };
            
                /**
                 * getModRMOperand(bModRM, type, dbgAddr)
                 *
                 * @this {Debugger}
                 * @param {number} bModRM
                 * @param {number} type
                 * @param {{DbgAddr}} dbgAddr
                 * @return {string} operand
                 */
                Debugger.prototype.getModRMOperand = function(bModRM, type, dbgAddr)
                {
                    var sOperand = "";
                    var bMod = bModRM >> 6;
                    var bRM = bModRM & 0x7;
                    if (bMod < 3) {
                        var disp;
                        if (!bMod && (!dbgAddr.fAddr32 && bRM == 6 || dbgAddr.fAddr32 && bRM == 5)) {
                            bMod = 2;
                        } else {
                            if (dbgAddr.fAddr32) {
                                if (bRM != 4) {
                                    bRM += 8;
                                } else {
                                    sOperand = this.getSIBOperand(bMod, dbgAddr);
                                }
                            }
                            if (!sOperand) sOperand = Debugger.RMS[bRM];
                        }
                        if (bMod == 1) {
                            disp = this.getByte(dbgAddr, 1);
                            if (!(disp & 0x80)) {
                                sOperand += "+" + str.toHex(disp, 2);
                            }
                            else {
                                disp = ((disp << 24) >> 24);
                                sOperand += "-" + str.toHex(-disp, 2);
                            }
                        }
                        else if (bMod == 2) {
                            if (sOperand) sOperand += '+';
                            if (!dbgAddr.fAddr32) {
                                disp = this.getShort(dbgAddr, 2);
                                sOperand += str.toHex(disp, 4);
                            } else {
                                disp = this.getLong(dbgAddr, 4);
                                sOperand += str.toHex(disp);
                            }
                        }
                        sOperand = "[" + sOperand + "]";
                        if ((type & Debugger.TYPE_SIZE) == Debugger.TYPE_FARP) sOperand = "FAR " + sOperand;
                    }
                    else {
                        sOperand = this.getRegOperand(bRM, type, dbgAddr);
                    }
                    return sOperand;
                };
            
                /**
                 * parseInstruction(sOp, sOperand, addr)
                 *
                 * This generally requires an exact match of both the operation code (sOp) and mode operand
                 * (sOperand) against the aOps[] and aOpMods[] arrays, respectively; however, the regular
                 * expression built from aOpMods and stored in regexOpModes does relax the matching criteria
                 * slightly; ie, a 4-digit hex value ("nnnn") will be satisfied with either 3 or 4 digits, and
                 * similarly, a 2-digit hex address (nn) will be satisfied with either 1 or 2 digits.
                 *
                 * Note that this function does not actually store the instruction into memory, even though it requires
                 * a target address (addr); that parameter is currently needed ONLY for "branch" instructions, because in
                 * order to calculate the branch displacement, it needs to know where the instruction will ultimately be
                 * stored, relative to its target address.
                 *
                 * Another handy feature of this function is its ability to display all available modes for a particular
                 * operation. For example, while in "assemble mode", if one types:
                 *
                 *      ldy?
                 *
                 * the Debugger will display:
                 *
                 *      supported opcodes:
                 *           A0: LDY nn
                 *           A4: LDY [nn]
                 *           AC: LDY [nnnn]
                 *           B4: LDY [nn+X]
                 *           BC: LDY [nnnn+X]
                 *
                 * Use of a trailing "?" on any opcode will display all variations of that opcode; no instruction will be
                 * assembled, and the operand parameter, if any, will be ignored.
                 *
                 * Although this function is capable of reporting numerous errors, roughly half of them indicate internal
                 * consistency errors, not user errors; the former should really be asserts, but I'm not comfortable bombing
                 * out because of my error as opposed to their error.  The only errors a user should expect to see:
                 *
                 *      "unknown operation":    sOp is not a valid operation (per aOps)
                 *      "unknown operand":      sOperand is not a valid operand (per aOpMods)
                 *      "unknown instruction":  the combination of sOp + sOperand does not exist (per aaOpDescs)
                 *      "branch out of range":  the branch address, relative to addr, is too far away
                 *
                 * @this {Debugger}
                 * @param {string} sOp
                 * @param {string|undefined} sOperand
                 * @param {{DbgAddr}} dbgAddr of memory where this instruction is being assembled
                 * @return {Array.<number>} of opcode bytes; if the instruction can't be parsed, the array will be empty
                 */
                Debugger.prototype.parseInstruction = function(sOp, sOperand, dbgAddr)
                {
                    var aOpBytes = [];
                    this.println("not supported yet");
                    return aOpBytes;
                };
            
                /**
                 * getFlagStr(sFlag)
                 *
                 * @this {Debugger}
                 * @param {string} sFlag
                 * @return {string} value of flag
                 */
                Debugger.prototype.getFlagStr = function(sFlag)
                {
                    var b;
                    switch (sFlag) {
                    case "V":
                        b = this.cpu.getOF();
                        break;
                    case "D":
                        b = this.cpu.getDF();
                        break;
                    case "I":
                        b = this.cpu.getIF();
                        break;
                    case "T":
                        b = this.cpu.getTF();
                        break;
                    case "S":
                        b = this.cpu.getSF();
                        break;
                    case "Z":
                        b = this.cpu.getZF();
                        break;
                    case "A":
                        b = this.cpu.getAF();
                        break;
                    case "P":
                        b = this.cpu.getPF();
                        break;
                    case "C":
                        b = this.cpu.getCF();
                        break;
                    default:
                        b = 0;
                        break;
                    }
                    return sFlag + (b? '1' : '0') + ' ';
                };
            
                /**
                 * getRegString(iReg)
                 *
                 * @this {Debugger}
                 * @param {number} iReg
                 * @return {string}
                 */
                Debugger.prototype.getRegString = function(iReg)
                {
                    if (iReg >= Debugger.REG_AX && iReg <= Debugger.REG_DI && this.cchReg > 4) iReg += Debugger.REG_EAX - Debugger.REG_AX;
                    var sReg = Debugger.REGS[iReg];
                    if (iReg == Debugger.REG_CR0 && this.cpu.model == X86.MODEL_80286) sReg = "MS";
                    return sReg + '=' + this.getRegValue(iReg) + ' ';
                };
            
                /**
                 * getSegString(seg, fProt)
                 *
                 * @this {Debugger}
                 * @param {X86Seg} seg
                 * @param {boolean} [fProt]
                 * @return {string}
                 */
                Debugger.prototype.getSegString = function(seg, fProt)
                {
                    return seg.sName + '=' + str.toHex(seg.sel, 4) + (fProt? '[' + str.toHex(seg.base, this.cchAddr) + ',' + str.toHex(seg.limit, (seg.limit & ~0xffff)? 8 : 4) + ']' : "");
                };
            
                /**
                 * getDTRString(sName, sel, addr, addrLimit)
                 *
                 * @this {Debugger}
                 * @param {string} sName
                 * @param {number|null} sel
                 * @param {number} addr
                 * @param {number} addrLimit
                 * @return {string}
                 */
                Debugger.prototype.getDTRString = function(sName, sel, addr, addrLimit)
                {
                    return sName + '=' + (sel != null? str.toHex(sel, 4) : "") + '[' + str.toHex(addr, this.cchAddr) + ',' + str.toHex(addrLimit - addr, 4) + ']';
                };
            
                /**
                 * getRegDump(fProt)
                 *
                 * Sample 8086 and 80286 real-mode register dump:
                 *
                 *      AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
                 *      SS=0000 DS=0000 ES=0000 PS=0002 V0 D0 I0 T0 S0 Z0 A0 P0 C0
                 *      F000:FFF0 EA5BE000F0    JMP      F000:E05B
                 *
                 * Sample 80386 real-mode register dump:
                 *
                 *      EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000
                 *      ESP=00000000 EBP=00000000 ESI=00000000 EDI=00000000
                 *      SS=0000 DS=0000 ES=0000 FS=0000 GS=0000 PS=00000002 V0 D0 I0 T0 S0 Z0 A0 P0 C0
                 *      F000:FFF0 EA05F900F0    JMP      F000:F905
                 *
                 * Sample 80286 protected-mode register dump:
                 *
                 *      AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
                 *      SS=0000[000000,FFFF] DS=0000[000000,FFFF] ES=0000[000000,FFFF] A20=ON
                 *      CS=F000[FF0000,FFFF] LD=0000[000000,FFFF] GD=[000000,FFFF] ID=[000000,03FF]
                 *      TR=0000 MS=FFF0 PS=0002 V0 D0 I0 T0 S0 Z0 A0 P0 C0
                 *      F000:FFF0 EA5BE000F0    JMP      F000:E05B
                 *
                 * Sample 80386 protected-mode register dump:
                 *
                 *      EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000
                 *      ESP=00000000 EBP=00000000 ESI=00000000 EDI=00000000
                 *      SS=0000[00000000,FFFF] DS=0000[00000000,FFFF] ES=0000[00000000,FFFF]
                 *      CS=F000[FFFF0000,FFFF] FS=0000[00000000,FFFF] GS=0000[00000000,FFFF]
                 *      LD=0000[00000000,FFFF] GD=[00000000,FFFF] ID=[00000000,03FF] TR=0000 A20=ON
                 *      CR0=00000010 CR2=00000000 CR3=00000000 PS=00000002 V0 D0 I0 T0 S0 Z0 A0 P0 C0
                 *      F000:0000FFF0 EA05F900F0    JMP      F000:0000F905
                 *
                 * This no longer includes CS in real-mode (or EIP in any mode), because that information can be obtained from the
                 * first line of disassembly, which an "r" or "rp" command will also display.
                 *
                 * Note that even when the processor is in real mode, you can always use the "rp" command to force a protected-mode
                 * dump, in case you need to verify any selector base or limit values, since those do affect real-mode operation.
                 *
                 * @this {Debugger}
                 * @param {boolean} [fProt]
                 * @return {string}
                 */
                Debugger.prototype.getRegDump = function(fProt)
                {
                    var s;
                    if (fProt === undefined) {
                        fProt = !!(this.cpu.regCR0 & X86.CR0.MSW.PE);
                    }
                    s = this.getRegString(Debugger.REG_AX) +
                        this.getRegString(Debugger.REG_BX) +
                        this.getRegString(Debugger.REG_CX) +
                        this.getRegString(Debugger.REG_DX) + (this.cchReg > 4? '\n' : '') +
                        this.getRegString(Debugger.REG_SP) +
                        this.getRegString(Debugger.REG_BP) +
                        this.getRegString(Debugger.REG_SI) +
                        this.getRegString(Debugger.REG_DI) + '\n' +
                        this.getSegString(this.cpu.segSS, fProt) + ' ' +
                        this.getSegString(this.cpu.segDS, fProt) + ' ' +
                        this.getSegString(this.cpu.segES, fProt) + ' ';
                    if (fProt) {
                        var sTR = "TR=" + str.toHex(this.cpu.segTSS.sel, 4);
                        var sA20 = "A20=" + (this.bus.getA20()? "ON " : "OFF ");
                        if (this.cpu.model < X86.MODEL_80386) {
                            sTR = '\n' + sTR;
                            s += sA20; sA20 = '';
                        }
                        s += '\n' + this.getSegString(this.cpu.segCS, fProt) + ' ';
                        if (I386 && this.cpu.model >= X86.MODEL_80386) {
                            sA20 += '\n';
                            s += this.getSegString(this.cpu.segFS, fProt) + ' ' +
                                 this.getSegString(this.cpu.segGS, fProt) + '\n';
                        }
                        s += this.getDTRString("LD", this.cpu.segLDT.sel, this.cpu.segLDT.base, this.cpu.segLDT.base + this.cpu.segLDT.limit) + ' ' +
                             this.getDTRString("GD", null, this.cpu.addrGDT, this.cpu.addrGDTLimit) + ' ' +
                             this.getDTRString("ID", null, this.cpu.addrIDT, this.cpu.addrIDTLimit) + ' ';
                        s += sTR + ' ' + sA20;
                        s += this.getRegString(Debugger.REG_CR0);
                        if (I386 && this.cpu.model >= X86.MODEL_80386) {
                            s += this.getRegString(Debugger.REG_CR2) + this.getRegString(Debugger.REG_CR3);
                        }
                    } else {
                        if (I386 && this.cpu.model >= X86.MODEL_80386) {
                            s += this.getSegString(this.cpu.segFS, fProt) + ' ' +
                                 this.getSegString(this.cpu.segGS, fProt) + ' ';
                        }
                    }
                    s += this.getRegString(Debugger.REG_PS) +
                         this.getFlagStr("V") + this.getFlagStr("D") + this.getFlagStr("I") + this.getFlagStr("T") +
                         this.getFlagStr("S") + this.getFlagStr("Z") + this.getFlagStr("A") + this.getFlagStr("P") + this.getFlagStr("C");
                    return s;
                };
            
                /**
                 * parseAddr(sAddr, type)
                 *
                 * As discussed above, dbgAddr variables contain one or more of: off, sel, and addr.  They represent
                 * a segmented address (sel:off) when sel is defined or a linear address (addr) when sel is undefined
                 * (or null).
                 *
                 * To create a segmented address, specify two values separated by ":"; for a linear address, use
                 * a "%" prefix.  We check for ":" after "%", so if for some strange reason you specify both, the
                 * address will be treated as segmented, not linear.
                 *
                 * The "%" syntax is similar to that used by the Windows 80386 kernel debugger (wdeb386) for linear
                 * addresses.  If/when we add support for processors with page tables, we will likely adopt the same
                 * convention for linear addresses and provide a different syntax (eg, "%%") physical memory references.
                 *
                 * Address evaluation and validation (eg, range checks) are no longer performed at this stage.  That's
                 * done later, by getAddr(), which returns X86.ADDR_INVALID for invalid segments, out-of-range offsets,
                 * etc.  The Debugger's low-level get/set memory functions verify all getAddr() results, but even if an
                 * invalid address is passed through to the Bus memory interfaces, the address will simply be masked with
                 * Bus.nBusLimit; in the case of X86.ADDR_INVALID, that will generally refer to the top of the physical
                 * address space.
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sAddr
                 * @param {number|undefined} type is the address segment type, in case sAddr doesn't specify a segment
                 * @return {{DbgAddr}}
                 */
                Debugger.prototype.parseAddr = function(sAddr, type)
                {
                    var dbgAddr;
                    var dbgAddrNext = (type == Debugger.ADDR_DATA? this.dbgAddrNextData : this.dbgAddrNextCode);
                    var off = dbgAddrNext.off, sel = dbgAddrNext.sel, addr = dbgAddrNext.addr;
            
                    if (sAddr !== undefined) {
            
                        if (sAddr.charAt(0) == '%') {
                            sAddr = sAddr.substr(1);
                            off = 0;
                            sel = null;
                            addr = 0;
                        }
            
                        dbgAddr = this.findSymbolAddr(sAddr);
                        if (dbgAddr && dbgAddr.off != null) return dbgAddr;
            
                        var iColon = sAddr.indexOf(":");
                        if (iColon < 0) {
                            if (sel != null) {
                                off = this.parseValue(sAddr);
                                addr = null;
                            } else {
                                addr = this.parseValue(sAddr);
                            }
                        }
                        else {
                            sel = this.parseValue(sAddr.substring(0, iColon));
                            off = this.parseValue(sAddr.substring(iColon + 1));
                            addr = null;
                        }
                    }
            
                    dbgAddr = this.newAddr(off, sel, addr);
                    this.checkLimit(dbgAddr);
                    return dbgAddr;
                };
            
                /**
                 * parseValue(sValue, sName)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sValue
                 * @param {string} [sName] is the name of the value, if any
                 * @return {number|undefined} numeric value, or undefined if sValue is either undefined or invalid
                 */
                Debugger.prototype.parseValue = function(sValue, sName)
                {
                    var value;
                    if (sValue !== undefined) {
                        var iReg = this.getRegIndex(sValue);
                        if (iReg >= 0) sValue = this.getRegValue(iReg);
                        value = str.parseInt(sValue);
                        if (value === undefined) this.println("invalid " + (sName? sName : "value") + ": " + sValue);
                    } else {
                        this.println("missing " + (sName || "value"));
                    }
                    return value;
                };
            
                /**
                 * addSymbols(addr, size, aSymbols)
                 *
                 * As filedump.js (formerly convrom.php) explains, aSymbols is a JSON-encoded object whose properties consist
                 * of all the symbols (in upper-case), and the values of those properties are objects containing any or all of
                 * the following properties:
                 *
                 *      "v": the value of an absolute (unsized) value
                 *      "b": either 1, 2, 4 or undefined if an unsized value
                 *      "s": either a hard-coded segment or undefined
                 *      "o": the offset of the symbol within the associated address space
                 *      "l": the original-case version of the symbol, present only if it wasn't originally upper-case
                 *      "a": annotation for the specified offset; eg, the original assembly language, with optional comment
                 *
                 * To that list of properties, we also add:
                 *
                 *      "p": the physical address (calculated whenever both "s" and "o" properties are defined)
                 *
                 * Note that values for any "v", "b", "s" and "o" properties are unquoted decimal values, and the values
                 * for any "l" or "a" properties are quoted strings. Also, if double-quotes were used in any of the original
                 * annotation ("a") values, they will have been converted to two single-quotes, so we're responsible for
                 * converting them back to individual double-quotes.
                 *
                 * For example:
                 *      {
                 *          "HF_PORT": {
                 *              "v":800
                 *          },
                 *          "HDISK_INT": {
                 *              "b":4, "s":0, "o":52
                 *          },
                 *          "ORG_VECTOR": {
                 *              "b":4, "s":0, "o":76
                 *          },
                 *          "CMD_BLOCK": {
                 *              "b":1, "s":64, "o":66
                 *          },
                 *          "DISK_SETUP": {
                 *              "o":3
                 *          },
                 *          ".40": {
                 *              "o":40, "a":"MOV AX,WORD PTR ORG_VECTOR ;GET DISKETTE VECTOR"
                 *          }
                 *      }
                 *
                 * If a symbol only has an offset, then that offset value can be assigned to the symbol property directly:
                 *
                 *          "DISK_SETUP": 3
                 *
                 * The last property is an example of an "anonymous" entry, for offsets where there is no associated symbol.
                 * Such entries are identified by a period followed by a unique number (usually the offset of the entry), and
                 * they usually only contain offset ("o") and annotation ("a") properties.  I could eliminate the leading
                 * period, but it offers a very convenient way of quickly discriminating among genuine vs. anonymous symbols.
                 *
                 * We add all these entries to our internal symbol table, which is an array of 4-element arrays, each of which
                 * look like:
                 *
                 *      [addr, size, aSymbols, aOffsetPairs]
                 *
                 * There are two basic symbol operations: findSymbolAddr(), which takes a string and attempts to match it
                 * to a non-anonymous symbol with a matching offset ("o") property, and findSymbolAtAddr(), which takes an
                 * address and finds the symbol, if any, at that address.
                 *
                 * To implement findSymbolAtAddr() efficiently, addSymbols() creates an array of [offset, sSymbol] pairs
                 * (aOffsetPairs), one pair for each symbol that corresponds to an offset within the specified address space.
                 *
                 * We guarantee the elements of aOffsetPairs are in offset order, because we build it using binaryInsert();
                 * it's quite likely that the MAP file already ordered all its symbols in offset order, but since they're
                 * hand-edited files, we can't assume that.  This insures that findSymbolAtAddr()'s binarySearch() will operate
                 * properly.
                 *
                 * @this {Debugger}
                 * @param {number} addr is the physical address of the region where the given symbols are located
                 * @param {number} size is the size of the region, in bytes
                 * @param {Object} aSymbols is the collection of symbols (the format of this object is described below)
                 */
                Debugger.prototype.addSymbols = function(addr, size, aSymbols)
                {
                    var dbgAddr = {};
                    var aOffsetPairs = [];
                    var fnComparePairs = function(p1, p2) {
                        return p1[0] > p2[0]? 1 : p1[0] < p2[0]? -1 : 0;
                    };
                    for (var sSymbol in aSymbols) {
                        var symbol = aSymbols[sSymbol];
                        if (typeof symbol == "number") {
                            aSymbols[sSymbol] = symbol = {'o': symbol};
                        }
                        var off = symbol['o'];
                        var sel = symbol['s'];
                        var sAnnotation = symbol['a'];
                        if (off !== undefined) {
                            if (sel !== undefined) {
                                dbgAddr.off = off;
                                dbgAddr.sel = sel;
                                dbgAddr.addr = null;
                                /*
                                 * getAddr() computes the corresponding physical address and saves it in dbgAddr.addr.
                                 */
                                this.getAddr(dbgAddr);
                                /*
                                 * The physical address for any symbol located in the top 64Kb of the machine's address space
                                 * should be relocated to the top 64Kb of the first 1Mb, so that we're immune from any changes
                                 * to the A20 line.
                                 */
                                if ((dbgAddr.addr & ~0xffff) == (this.bus.nBusLimit & ~0xffff)) {
                                    dbgAddr.addr &= 0x000fffff;
                                }
                                symbol['p'] = dbgAddr.addr;
                            }
                            usr.binaryInsert(aOffsetPairs, [off, sSymbol], fnComparePairs);
                        }
                        if (sAnnotation) symbol['a'] = sAnnotation.replace(/''/g, "\"");
                    }
                    this.aSymbolTable.push([addr, size, aSymbols, aOffsetPairs]);
                };
            
                /**
                 * dumpSymbols()
                 *
                 * TODO: Add "numerical" and "alphabetical" dump options. This is simply dumping them in whatever
                 * order they appeared in the original MAP file.
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.dumpSymbols = function()
                {
                    for (var i = 0; i < this.aSymbolTable.length; i++) {
                        var addr = this.aSymbolTable[i][0];
                      //var size = this.aSymbolTable[i][1];
                        var aSymbols = this.aSymbolTable[i][2];
                        for (var sSymbol in aSymbols) {
                            if (sSymbol.charAt(0) == '.') continue;
                            var symbol = aSymbols[sSymbol];
                            var off = symbol['o'];
                            if (off === undefined) continue;
                            var sel = symbol['s'];
                            if (sel === undefined) sel = (addr >>> 4);
                            var sSymbolOrig = aSymbols[sSymbol]['l'];
                            if (sSymbolOrig) sSymbol = sSymbolOrig;
                            this.println(this.hexOffset(off, sel) + " " + sSymbol);
                        }
                    }
                };
            
                /**
                 * findSymbolAddr(sSymbol)
                 *
                 * Search aSymbolTable for sSymbol, and if found, return a dbgAddr (same as parseAddr())
                 *
                 * @this {Debugger}
                 * @param {string} sSymbol
                 * @return {{DbgAddr}|null} a valid dbgAddr if a valid symbol, an empty dbgAddr if an unknown symbol, or null if not a symbol
                 */
                Debugger.prototype.findSymbolAddr = function(sSymbol)
                {
                    var dbgAddr = null;
                    if (sSymbol.match(/^[a-z_][a-z0-9_]*$/i)) {
                        dbgAddr = {};
                        var sUpperCase = sSymbol.toUpperCase();
                        for (var i = 0; i < this.aSymbolTable.length; i++) {
                            var addr = this.aSymbolTable[i][0];
                            //var size = this.aSymbolTable[i][1];
                            var aSymbols = this.aSymbolTable[i][2];
                            var symbol = aSymbols[sUpperCase];
                            if (symbol !== undefined) {
                                var off = symbol['o'];
                                if (off !== undefined) {
                                    /*
                                     * We assume that every ROM is ORG'ed at 0x0000, and therefore unless the symbol has an
                                     * explicitly-defined segment, we return the segment as "addr >>> 4".  Down the road, we may
                                     * want/need to support a special symbol entry (eg, ".ORG") that defines an alternate origin.
                                     */
                                    var sel = symbol['s'];
                                    if (sel === undefined) sel = addr >>> 4;
                                    // dbgAddr = this.newAddr(off, sel);
                                    dbgAddr.off = off;
                                    dbgAddr.sel = sel;
                                    if (symbol['p'] !== undefined) dbgAddr.addr = symbol['p'];
                                }
                                /*
                                 * The symbol matched, but it wasn't for an address (no "o" offset), and there's no point
                                 * looking any farther, since each symbol appears only once, so we indicate it's an unknown symbol.
                                 */
                                break;
                            }
                        }
                    }
                    return dbgAddr;
                };
            
                /**
                 * findSymbolAtAddr(dbgAddr, fNearest)
                 *
                 * Search aSymbolTable for dbgAddr, and return an Array for the corresponding symbol (empty if not found).
                 *
                 * If fNearest is true, and no exact match was found, then the Array returned will contain TWO sets of
                 * entries: [0]-[3] will refer to closest preceding symbol, and [4]-[7] will refer to the closest subsequent symbol.
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} [fNearest]
                 * @return {Array|null} where [0] == symbol name, [1] == symbol value, [2] == any annotation, and [3] == any associated comment
                 */
                Debugger.prototype.findSymbolAtAddr = function(dbgAddr, fNearest)
                {
                    var aSymbol = [];
                    var addr = this.getAddr(dbgAddr);
                    for (var iTable = 0; iTable < this.aSymbolTable.length; iTable++) {
                        var addrSymbol = this.aSymbolTable[iTable][0];
                        var sizeSymbol = this.aSymbolTable[iTable][1];
                        if (addr >= addrSymbol && addr < addrSymbol + sizeSymbol) {
                            var offset = dbgAddr.off;
                            var aOffsetPairs = this.aSymbolTable[iTable][3];
                            var fnComparePairs = function(p1, p2)
                            {
                                return p1[0] > p2[0]? 1 : p1[0] < p2[0]? -1 : 0;
                            };
                            var result = usr.binarySearch(aOffsetPairs, [offset], fnComparePairs);
                            if (result >= 0) {
                                this.returnSymbol(iTable, result, aSymbol);
                            }
                            else if (fNearest) {
                                result = ~result;
                                this.returnSymbol(iTable, result-1, aSymbol);
                                this.returnSymbol(iTable, result, aSymbol);
                            }
                            break;
                        }
                    }
                    return aSymbol;
                };
            
                /**
                 * returnSymbol(iTable, iOffset, aSymbol)
                 *
                 * Helper function for findSymbolAtAddr().
                 *
                 * @param {number} iTable
                 * @param {number} iOffset
                 * @param {Array} aSymbol is updated with the specified symbol, if it exists
                 */
                Debugger.prototype.returnSymbol = function(iTable, iOffset, aSymbol)
                {
                    var symbol = {};
                    var aOffsetPairs = this.aSymbolTable[iTable][3];
                    var offset = 0, sSymbol = null;
                    if (iOffset >= 0 && iOffset < aOffsetPairs.length) {
                        offset = aOffsetPairs[iOffset][0];
                        sSymbol = aOffsetPairs[iOffset][1];
                    }
                    if (sSymbol) {
                        symbol = this.aSymbolTable[iTable][2][sSymbol];
                        sSymbol = (sSymbol.charAt(0) == '.'? null : (symbol['l'] || sSymbol));
                    }
                    aSymbol.push(sSymbol);
                    aSymbol.push(offset);
                    aSymbol.push(symbol['a']);
                    aSymbol.push(symbol['c']);
                };
            
                /**
                 * doHelp()
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.doHelp = function()
                {
                    var s = "commands:";
                    for (var sCommand in Debugger.COMMANDS) {
                        s += '\n' + str.pad(sCommand, 7) + Debugger.COMMANDS[sCommand];
                    }
                    if (!this.checksEnabled()) s += "\nnote: frequency/history disabled if no exec breakpoints";
                    this.println(s);
                };
            
                /**
                 * doAssemble(asArgs)
                 *
                 * This always receives the complete argument array, where the order of the arguments is:
                 *
                 *      [0]: the assemble command (assumed to be "a")
                 *      [1]: the target address (eg, "200")
                 *      [2]: the operation code, aka instruction name (eg, "adc")
                 *      [3]: the operation mode operand, if any (eg, "14", "[1234]", etc)
                 *
                 * The Debugger enters "assemble mode" whenever only the first (or first and second) arguments are present.
                 * As long as "assemble mode is active, the user can omit the first two arguments on all later assemble commands
                 * until "assemble mode" is cancelled with an empty command line; the command processor automatically prepends "a"
                 * and the next available target address to the argument array.
                 *
                 * Entering "assemble mode" is optional; one could enter a series of fully-qualified assemble commands; eg:
                 *
                 *      a ff00 cld
                 *      a ff01 ldx 28
                 *      ...
                 *
                 * without ever entering "assemble mode", but of course, that requires more typing and doesn't take advantage
                 * of automatic target address advancement (see dbgAddrAssemble).
                 *
                 * NOTE: As the previous example implies, you can even assemble new instructions into ROM address space;
                 * as our setByte() function explains, the ROM write-notification handlers only refuse writes from the CPU.
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} asArgs is the complete argument array, beginning with the "a" command in asArgs[0]
                 */
                Debugger.prototype.doAssemble = function(asArgs)
                {
                    var dbgAddr = this.parseAddr(asArgs[1], Debugger.ADDR_CODE);
                    if (dbgAddr.off == null) return;
            
                    this.dbgAddrAssemble = dbgAddr;
                    if (asArgs[2] === undefined) {
                        this.println("begin assemble @" + this.hexAddr(dbgAddr));
                        this.fAssemble = true;
                        this.cpu.updateCPU();
                        return;
                    }
            
                    var aOpBytes = this.parseInstruction(asArgs[2], asArgs[3], dbgAddr);
                    if (aOpBytes.length) {
                        for (var i = 0; i < aOpBytes.length; i++) {
                            this.setByte(dbgAddr, aOpBytes[i], 1);
                        }
                        /*
                         * Since getInstruction() also updates the specified address, dbgAddrAssemble is automatically advanced.
                         */
                        this.println(this.getInstruction(this.dbgAddrAssemble));
                    }
                };
            
                /**
                 * doBreak(sCmd, sAddr)
                 *
                 * As the "help" output below indicates, the following breakpoint commands are supported:
                 *
                 *      bp [a]  set exec breakpoint on linear addr [a]
                 *      br [a]  set read breakpoint on linear addr [a]
                 *      bw [a]  set write breakpoint on linear addr [a]
                 *      bc [a]  clear breakpoint on linear addr [a] (use "*" for all breakpoints)
                 *      bl      list breakpoints
                 *
                 * to which we have recently added the following I/O breakpoint commands:
                 *
                 *      bi [p]  toggle input breakpoint on port [p] (use "*" for all input ports)
                 *      bo [p]  toggle output breakpoint on port [p] (use "*" for all output ports)
                 *
                 * These two new commands operate as toggles so that if "*" is used to trap all input (or output),
                 * you can also use these commands to NOT trap specific ports.
                 *
                 * @this {Debugger}
                 * @param {string} sCmd
                 * @param {string} [sAddr]
                 */
                Debugger.prototype.doBreak = function(sCmd, sAddr)
                {
                    var sParm = sCmd.charAt(1);
                    if (!sParm || sParm == "?") {
                        this.println("\nbreakpoint commands:");
                        this.println("\tbi [p]\ttoggle break on input port [p]");
                        this.println("\tbo [p]\ttoggle break on output port [p]");
                        this.println("\tbp [a]\tset exec breakpoint at addr [a]");
                        this.println("\tbr [a]\tset read breakpoint at addr [a]");
                        this.println("\tbw [a]\tset write breakpoint at addr [a]");
                        this.println("\tbc [a]\tclear breakpoint at addr [a]");
                        this.println("\tbl\tlist all breakpoints");
                        return;
                    }
                    if (sParm == "l") {
                        var cBreaks = 0;
                        cBreaks += this.listBreakpoints(this.aBreakExec);
                        cBreaks += this.listBreakpoints(this.aBreakRead);
                        cBreaks += this.listBreakpoints(this.aBreakWrite);
                        if (!cBreaks) this.println("no breakpoints");
                        return;
                    }
                    if (sAddr === undefined) {
                        this.println("missing breakpoint address");
                        return;
                    }
                    var dbgAddr = {};
                    if (sAddr != "*") {
                        dbgAddr = this.parseAddr(sAddr, Debugger.ADDR_CODE);
                        if (dbgAddr.off == null) return;
                    }
                    sAddr = (dbgAddr.off == null? sAddr : str.toHexWord(dbgAddr.off));
                    if (sParm == "c") {
                        if (dbgAddr.off == null) {
                            this.clearBreakpoints();
                            this.println("all breakpoints cleared");
                            return;
                        }
                        if (this.findBreakpoint(this.aBreakExec, dbgAddr, true))
                            return;
                        if (this.findBreakpoint(this.aBreakRead, dbgAddr, true))
                            return;
                        if (this.findBreakpoint(this.aBreakWrite, dbgAddr, true))
                            return;
                        this.println("breakpoint missing: " + this.hexAddr(dbgAddr));
                        return;
                    }
                    if (sParm == "i") {
                        this.println("breakpoint " + (this.bus.addPortInputBreak(dbgAddr.off)? "enabled" : "cleared") + ": port " + sAddr + " (input)");
                        return;
                    }
                    if (sParm == "o") {
                        this.println("breakpoint " + (this.bus.addPortOutputBreak(dbgAddr.off)? "enabled" : "cleared") + ": port " + sAddr + " (output)");
                        return;
                    }
                    if (dbgAddr.off == null) return;
                    if (sParm == "p") {
                        this.addBreakpoint(this.aBreakExec, dbgAddr);
                        return;
                    }
                    if (sParm == "r") {
                        this.addBreakpoint(this.aBreakRead, dbgAddr);
                        return;
                    }
                    if (sParm == "w") {
                        this.addBreakpoint(this.aBreakWrite, dbgAddr);
                        return;
                    }
                    this.println("unknown breakpoint command: " + sParm);
                };
            
                /**
                 * doClear(sCmd)
                 *
                 * @this {Debugger}
                 * @param {string} sCmd (eg, "cls" or "clear")
                 */
                Debugger.prototype.doClear = function(sCmd)
                {
                    /*
                     * TODO: There should be a clear() component method that the Control Panel overrides to perform this function.
                     */
                    if (this.controlPrint) this.controlPrint.value = "";
                };
            
                /**
                 * doDump(sCmd, sAddr, sLen)
                 *
                 * While sLen is interpreted as a number of bytes or words, it's converted to the appropriate number of lines,
                 * because we always display whole lines.  If sLen is omitted/undefined, then we default to 8 lines, regardless
                 * whether dumping bytes or words.
                 *
                 * Also, unlike sAddr, sLen is interpreted as a decimal number, unless a radix specifier is included (eg, "0x100");
                 * sLen also supports the DEBUG.COM-style syntax of a preceding "l" (eg, "l16").
                 *
                 * @this {Debugger}
                 * @param {string} sCmd
                 * @param {string|undefined} sAddr
                 * @param {string|undefined} sLen (if present, it can be preceded by an "l", which we simply ignore)
                 */
                Debugger.prototype.doDump = function(sCmd, sAddr, sLen)
                {
                    var m;
                    if (sAddr == "?") {
                        var sDumpers = "";
                        for (m in Debugger.MESSAGES) {
                            if (this.afnDumpers[m]) {
                                if (sDumpers) sDumpers += ",";
                                sDumpers = sDumpers + m;
                            }
                        }
                        sDumpers += ",state,symbols";
                        this.println("\ndump commands:");
                        this.println("\tdb [a] [#]    dump # bytes at address a");
                        this.println("\tdw [a] [#]    dump # words at address a");
                        this.println("\tdd [a] [#]    dump # dwords at address a");
                        this.println("\tdh [#]        dump # instructions prior");
                        if (BACKTRACK) this.println("\tdi [a]        dump backtrack info at address a");
                        if (sDumpers.length) this.println("dump extensions:\n\t" + sDumpers);
                        return;
                    }
                    if (sAddr == "state") {
                        this.println(this.cmp.powerOff(true));
                        return;
                    }
                    if (sAddr == "symbols") {
                        this.dumpSymbols();
                        return;
                    }
                    if (sCmd == "dh") {
                        this.dumpHistory(sAddr);
                        return;
                    }
                    if (sCmd == "ds") {     // transform a "ds" command into a "d desc" command
                        sCmd = 'd';
                        sLen = sAddr;
                        sAddr = "desc";
                    }
                    for (m in Debugger.MESSAGES) {
                        if (sAddr == m) {
                            var fnDumper = this.afnDumpers[m];
                            if (fnDumper) {
                                fnDumper(sLen);
                            } else {
                                this.println("no dump registered for " + sAddr);
                            }
                            return;
                        }
                    }
                    var dbgAddr = this.parseAddr(sAddr, Debugger.ADDR_DATA);
                    if (dbgAddr.off == null || dbgAddr.sel == null && dbgAddr.addr == null) return;
            
                    var sDump = "";
                    if (BACKTRACK && sCmd == "di") {
                        var addr = this.getAddr(dbgAddr);
                        sDump += '%' + str.toHex(addr) + ": ";
                        var sInfo = this.bus.getBackTrackInfoFromAddr(addr);
                        sDump += sInfo || "no information";
                    }
                    else {
                        var cLines = 0;
                        var cBytes = (sCmd == "dd"? 4 : (sCmd == "dw"? 2 : 1));
                        var cNumbers = (16 / cBytes)|0;
                        if (sLen) {
                            if (sLen.charAt(0) == "l") sLen = sLen.substr(1);
                            cLines = +sLen;
                            if (cLines) cLines = ((cLines + cNumbers - 1) / cNumbers)|0;
                        }
                        if (!cLines) cLines = 8;
                        for (var iLine = 0; iLine < cLines; iLine++) {
                            var data = 0, iByte = 0;
                            var sData = "", sChars = "";
                            sAddr = this.hexAddr(dbgAddr);
                            for (var i = 0; i < 16; i++) {
                                var b = this.getByte(dbgAddr, 1);
                                data |= (b << (iByte++ << 3));
                                if (iByte == cBytes) {
                                    sData += str.toHex(data, cBytes * 2);
                                    sData += (cBytes == 1? (i == 7? '-' : ' ') : "  ");
                                    data = iByte = 0;
                                }
                                sChars += (b >= 32 && b < 128? String.fromCharCode(b) : ".");
                            }
                            if (sDump) sDump += "\n";
                            sDump += sAddr + "  " + sData + " " + sChars;
                        }
                    }
                    if (sDump) this.println(sDump);
                    this.dbgAddrNextData = dbgAddr;
                };
            
                /**
                 * doEdit(asArgs)
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} asArgs
                 */
                Debugger.prototype.doEdit = function(asArgs)
                {
                    var sAddr = asArgs[1];
                    if (sAddr === undefined) {
                        this.println("missing address");
                        return;
                    }
                    var dbgAddr = this.parseAddr(sAddr, Debugger.ADDR_DATA);
                    if (dbgAddr.off == null) return;
                    for (var i = 2; i < asArgs.length; i++) {
                        var b = str.parseInt(asArgs[i], 16);
                        if (b === undefined) {
                            this.println("unrecognized value: " + str.toHexByte(b));
                            break;
                        }
                        this.println("setting " + this.hexAddr(dbgAddr) + " to " + str.toHexByte(b));
                        this.setByte(dbgAddr, b, 1);
                    }
                };
            
                /**
                 * doFreqs(sParm)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sParm
                 */
                Debugger.prototype.doFreqs = function(sParm)
                {
                    if (sParm == "?") {
                        this.println("\nfrequency commands:");
                        this.println("\tclear\tclear all frequency counts");
                        return;
                    }
                    var i;
                    var cData = 0;
                    if (this.aaOpcodeCounts) {
                        if (sParm == "clear") {
                            for (i = 0; i < this.aaOpcodeCounts.length; i++)
                                this.aaOpcodeCounts[i] = [i, 0];
                            this.println("frequency data cleared");
                            cData++;
                        }
                        else if (sParm !== undefined) {
                            this.println("unknown frequency command: " + sParm);
                            cData++;
                        }
                        else {
                            var aaSortedOpcodeCounts = this.aaOpcodeCounts.slice();
                            aaSortedOpcodeCounts.sort(function(p, q) {
                                return q[1] - p[1];
                            });
                            for (i = 0; i < aaSortedOpcodeCounts.length; i++) {
                                var bOpcode = aaSortedOpcodeCounts[i][0];
                                var cFreq = aaSortedOpcodeCounts[i][1];
                                if (cFreq) {
                                    this.println((Debugger.INS_NAMES[this.aaOpDescs[bOpcode][0]] + "  ").substr(0, 5) + " (" + str.toHexByte(bOpcode) + "): " + cFreq + " times");
                                    cData++;
                                }
                            }
                        }
                    }
                    if (!cData) {
                        this.println("no frequency data available");
                    }
                };
            
                /**
                 * doHalt(sCount)
                 *
                 * If the CPU is running and no count is provided, we halt the CPU; otherwise we treat this as a history command.
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sCount is the number of instructions to rewind to (default is 10)
                 */
                Debugger.prototype.doHalt = function(sCount)
                {
                    if (this.aFlags.fRunning && sCount === undefined) {
                        this.println("halting");
                        this.stopCPU();
                        return;
                    }
                    this.dumpHistory(sCount);
                };
            
                /**
                 * doInfo(asArgs)
                 *
                 * Prints the contents of the Debugger's instruction trace buffer.
                 *
                 * Examples:
                 *
                 *      n shl
                 *      n shl on
                 *      n shl off
                 *      n dump 100
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} asArgs
                 * @return {boolean} true only if the instruction info command ("n") is supported
                 */
                Debugger.prototype.doInfo = function(asArgs)
                {
                    if (DEBUG) {
                        var sCategory = asArgs[1];
                        if (sCategory !== undefined) {
                            sCategory = sCategory.toUpperCase();
                        }
                        var sEnable = asArgs[2];
                        var fPrint = false;
                        if (sCategory == "DUMP") {
                            var sDump = "";
                            var cLines = (sEnable === undefined? -1 : +sEnable);
                            var i = this.iTraceBuffer;
                            do {
                                var s = this.aTraceBuffer[i++];
                                if (s !== undefined) {
                                    /*
                                     * The browser is MUCH happier if we buffer all the lines for one single enormous print
                                     *
                                     *      this.println(s);
                                     */
                                    sDump += (sDump? "\n" : "") + s;
                                    cLines--;
                                }
                                if (i >= this.aTraceBuffer.length)
                                    i = 0;
                            } while (cLines && i != this.iTraceBuffer);
                            if (!sDump) sDump = "nothing to dump";
                            this.println(sDump);
                            this.println("msPerYield: " + this.cpu.aCounts.msPerYield);
                            this.println("nCyclesPerBurst: " + this.cpu.aCounts.nCyclesPerBurst);
                            this.println("nCyclesPerYield: " + this.cpu.aCounts.nCyclesPerYield);
                            this.println("nCyclesPerVideoUpdate: " + this.cpu.aCounts.nCyclesPerVideoUpdate);
                            this.println("nCyclesPerStatusUpdate: " + this.cpu.aCounts.nCyclesPerStatusUpdate);
                        } else {
                            var fEnable = (sEnable == "on");
                            for (var prop in this.traceEnabled) {
                                var trace = Debugger.TRACE[prop];
                                if (sCategory === undefined || sCategory == "ALL" || sCategory == Debugger.INS_NAMES[trace.ins]) {
                                    if (fEnable !== undefined) {
                                        this.traceEnabled[prop] = fEnable;
                                    }
                                    this.println(Debugger.INS_NAMES[trace.ins] + trace.size + ": " + (this.traceEnabled[prop]? "on" : "off"));
                                    fPrint = true;
                                }
                            }
                            if (!fPrint) this.println("no match");
                        }
                        return true;
                    }
                    return false;
                };
            
                /**
                 * doInput(sPort)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sPort
                 */
                Debugger.prototype.doInput = function(sPort)
                {
                    if (!sPort || sPort == "?") {
                        this.println("\ninput commands:");
                        this.println("\ti [p]\tread port [p]");
                        /*
                         * TODO: Regarding this warning, consider adding an "unchecked" version of
                         * bus.checkPortInputNotify(), since all Debugger memory accesses are unchecked, too.
                         *
                         * All port I/O handlers ARE aware when the Debugger is calling (addrFrom is undefined),
                         * but changing them all to be non-destructive would take time, and situations where you
                         * actually want to affect the hardware state are just as likely as not....
                         */
                        this.println("warning: port accesses can affect hardware state");
                        return;
                    }
                    var port = this.parseValue(sPort);
                    if (port !== undefined) {
                        var bIn = this.bus.checkPortInputNotify(port);
                        this.println(str.toHexWord(port) + ": " + str.toHexByte(bIn));
                    }
                };
            
                /**
                 * doList(sSymbol)
                 *
                 * @this {Debugger}
                 * @param {string} sSymbol
                 */
                Debugger.prototype.doList = function(sSymbol)
                {
                    var dbgAddr = this.parseAddr(sSymbol, Debugger.ADDR_CODE);
            
                    if (dbgAddr.off == null && dbgAddr.addr == null) return;
            
                    var addr = this.getAddr(dbgAddr);
                    sSymbol = sSymbol? (sSymbol + ": ") : "";
                    this.println(sSymbol + this.hexAddr(dbgAddr) + " (%" + str.toHex(addr, this.cchAddr) + ")");
            
                    var aSymbol = this.findSymbolAtAddr(dbgAddr, true);
                    if (aSymbol.length) {
                        var nDelta, sDelta;
                        if (aSymbol[0]) {
                            sDelta = "";
                            nDelta = dbgAddr.off - aSymbol[1];
                            if (nDelta) sDelta = " + " + str.toHexWord(nDelta);
                            this.println(aSymbol[0] + " (" + this.hexOffset(aSymbol[1], dbgAddr.sel) + ")" + sDelta);
                        }
                        if (aSymbol.length > 4 && aSymbol[4]) {
                            sDelta = "";
                            nDelta = aSymbol[5] - dbgAddr.off;
                            if (nDelta) sDelta = " - " + str.toHexWord(nDelta);
                            this.println(aSymbol[4] + " (" + this.hexOffset(aSymbol[5], dbgAddr.sel) + ")" + sDelta);
                        }
                    } else {
                        this.println("no symbols");
                    }
                };
            
                /**
                 * doLoad(asArgs)
                 *
                 * The format of this command mirrors the DOS DEBUG "L" command:
                 *
                 *      l [address] [drive #] [sector #] [# sectors]
                 *
                 * The only optional parameter is the last, which defaults to 1 sector if not specified.
                 *
                 * As a quick-and-dirty way of getting the current contents of a disk image as a JSON dump
                 * (which you can then save as .json disk image file), I also allow this command format:
                 *
                 *      l json [drive #]
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} asArgs
                 */
                Debugger.prototype.doLoad = function(asArgs)
                {
                    if (asArgs[0] == 'l' && asArgs[1] === undefined || asArgs[1] == "?") {
                        this.println("\nlist/load commands:");
                        this.println("\tl [address] [drive #] [sector #] [# sectors]");
                        this.println("\tln [address] lists symbol(s) nearest to address");
                        return;
                    }
            
                    if (asArgs[0] == "ln") {
                        this.doList(asArgs[1]);
                        return;
                    }
            
                    var fJSON = (asArgs[1] == "json");
                    var iDrive, iSector = 0, nSectors = 0;
                    var dbgAddr = (fJSON? {} : this.parseAddr(asArgs[1], Debugger.ADDR_DATA));
            
                    iDrive = this.parseValue(asArgs[2], "drive #");
                    if (iDrive === undefined) return;
                    if (!fJSON) {
                        iSector = this.parseValue(asArgs[3], "sector #");
                        if (iSector === undefined) return;
                        nSectors = this.parseValue(asArgs[4], "# of sectors");
                        if (nSectors === undefined) nSectors = 1;
                    }
            
                    /*
                     * We choose the disk controller very simplistically: FDC for drives 0 or 1, and HDC for drives 2
                     * and up, unless no HDC is present, in which case we assume FDC for all drive numbers.
                     *
                     * Both controllers must obviously support the same interfaces; ie, copyDrive(), seekDrive(),
                     * and readByte().  We also rely on the disk property to determine whether the drive is "loaded".
                     *
                     * In the case of the HDC, if the drive is valid, then by definition it is also "loaded", since an HDC
                     * drive and its disk are inseparable; it's certainly possible that its disk object may be empty at
                     * this point, but that will only affect whether the read succeeds or not.
                     */
                    var dc = this.fdc;
                    if (iDrive >= 2 && this.hdc) {
                        iDrive -= 2;
                        dc = this.hdc;
                    }
                    if (dc) {
                        var drive = dc.copyDrive(iDrive);
                        if (drive) {
                            if (drive.disk) {
                                if (fJSON) {
                                    /*
                                     * This is an interim solution to dumping disk images in JSON.  It has many problems, the
                                     * "biggest" being that the large disk images really need to be compressed first, because they
                                     * get "inflated" with use.  See the dump() method in the Disk component for more details.
                                     */
                                    this.println(drive.disk.toJSON());
                                    return;
                                }
                                if (dc.seekDrive(drive, iSector, nSectors)) {
                                    var cb = 0;
                                    var fAbort = false;
                                    var sAddr = this.hexAddr(dbgAddr);
                                    while (!fAbort && drive.nBytes-- > 0) {
                                        (function(dbg, dbgAddrCur) {
                                            dc.readByte(drive, function(b, fAsync) {
                                                if (b < 0) {
                                                    dbg.println("out of data at address " + dbg.hexAddr(dbgAddrCur));
                                                    fAbort = true;
                                                    return;
                                                }
                                                dbg.setByte(dbgAddrCur, b, 1);
                                                cb++;
                                            });
                                        }(this, dbgAddr));
                                    }
                                    this.println(cb + " bytes read at " + sAddr);
                                } else {
                                    this.println("sector " + iSector + " request out of range");
                                }
                            } else {
                                this.println("drive " + iDrive + " not loaded");
                            }
                        } else {
                            this.println("invalid drive: " + iDrive);
                        }
                    } else {
                        this.println("disk controller not present");
                    }
                };
            
                /**
                 * doMessages(asArgs)
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} asArgs
                 */
                Debugger.prototype.doMessages = function(asArgs)
                {
                    var m;
                    var fCriteria = null;
                    var sCategory = asArgs[1];
                    if (sCategory == "?") sCategory = undefined;
            
                    if (sCategory !== undefined) {
                        var bitsMessage = 0;
                        if (sCategory == "all") {
                            bitsMessage = (0xffffffff|0) & ~(Messages.HALT | Messages.KEYS | Messages.LOG);
                            sCategory = null;
                        } else if (sCategory == "on") {
                            fCriteria = true;
                            sCategory = null;
                        } else if (sCategory == "off") {
                            fCriteria = false;
                            sCategory = null;
                        } else {
                            if (sCategory == "keys") sCategory = "key";
                            if (sCategory == "kbd") sCategory = "keyboard";
                            for (m in Debugger.MESSAGES) {
                                if (sCategory == m) {
                                    bitsMessage = Debugger.MESSAGES[m];
                                    fCriteria = !!(this.bitsMessage & bitsMessage);
                                    break;
                                }
                            }
                            if (!bitsMessage) {
                                this.println("unknown message category: " + sCategory);
                                return;
                            }
                        }
                        if (bitsMessage) {
                            if (asArgs[2] == "on") {
                                this.bitsMessage |= bitsMessage;
                                fCriteria = true;
                            }
                            else if (asArgs[2] == "off") {
                                this.bitsMessage &= ~bitsMessage;
                                fCriteria = false;
                            }
                        }
                    }
            
                    /*
                     * Display those message categories that match the current criteria (on or off)
                     */
                    var n = 0;
                    var sCategories = "";
                    for (m in Debugger.MESSAGES) {
                        if (!sCategory || sCategory == m) {
                            var bitMessage = Debugger.MESSAGES[m];
                            var fEnabled = !!(this.bitsMessage & bitMessage);
                            if (fCriteria !== null && fCriteria != fEnabled) continue;
                            if (sCategories) sCategories += ",";
                            if (!(++n % 10)) sCategories += "\n\t";     // jshint ignore:line
                            if (m == "key") m = "keys";
                            sCategories += m;
                        }
                    }
            
                    if (sCategory === undefined) {
                        this.println("\nmessage commands:\n\tm [category] [on|off]\tturn categories on/off");
                    }
            
                    this.println((fCriteria !== null? (fCriteria? "messages on:  " : "messages off: ") : "message categories:\n\t") + (sCategories || "none"));
                };
            
                /**
                 * doExecOptions(asArgs)
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} asArgs
                 */
                Debugger.prototype.doExecOptions = function(asArgs)
                {
                    if (asArgs[1] === undefined || asArgs[1] == "?") {
                        this.println("\nexecution options:");
                        this.println("\tcs int #\tset checksum cycle interval to #");
                        this.println("\tcs start #\tset checksum cycle start count to #");
                        this.println("\tcs stop #\tset checksum cycle stop count to #");
                        this.println("\tsp #\t\tset speed multiplier to #");
                        return;
                    }
                    switch (asArgs[1]) {
                        case "cs":
                            var nCycles;
                            if (asArgs[3] !== undefined) nCycles = +asArgs[3];
                            switch (asArgs[2]) {
                                case "int":
                                    this.cpu.aCounts.nCyclesChecksumInterval = nCycles;
                                    break;
                                case "start":
                                    this.cpu.aCounts.nCyclesChecksumStart = nCycles;
                                    break;
                                case "stop":
                                    this.cpu.aCounts.nCyclesChecksumStop = nCycles;
                                    break;
                                default:
                                    this.println("unknown cs option");
                                    return;
                            }
                            if (nCycles !== undefined) {
                                this.cpu.resetChecksum();
                            }
                            this.println("checksums " + (this.cpu.aFlags.fChecksum? "enabled" : "disabled"));
                            break;
                        case "sp":
                            if (asArgs[2] !== undefined) {
                                this.cpu.setSpeed(+asArgs[2]);
                            }
                            this.println("target speed: " + this.cpu.getSpeedTarget() + " (" + this.cpu.getSpeed() + "x)");
                            break;
                        default:
                            this.println("unknown option: " + asArgs[1]);
                            break;
                    }
                };
            
                /**
                 * doOutput(sPort, sByte)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sPort
                 * @param {string|undefined} sByte (string representation of 1 byte)
                 */
                Debugger.prototype.doOutput = function(sPort, sByte)
                {
                    if (!sPort || sPort == "?") {
                        this.println("\noutput commands:");
                        this.println("\to [p] [b]\twrite byte [b] to port [p]");
                        /*
                         * TODO: Regarding this warning, consider adding an "unchecked" version of
                         * bus.checkPortOutputNotify(), since all Debugger memory accesses are unchecked, too.
                         *
                         * All port I/O handlers ARE aware when the Debugger is calling (addrFrom is undefined),
                         * but changing them all to be non-destructive would take time, and situations where you
                         * actually want to affect the hardware state are just as likely as not....
                         */
                        this.println("warning: port accesses can affect hardware state");
                        return;
                    }
                    var port = this.parseValue(sPort, "port #");
                    var bOut = this.parseValue(sByte);
                    if (port !== undefined && bOut !== undefined) {
                        this.bus.checkPortOutputNotify(port, bOut);
                        this.println(str.toHexWord(port) + ": " + str.toHexByte(bOut));
                    }
                };
            
                /**
                 * doRegisters(asArgs, fCompact)
                 *
                 * @this {Debugger}
                 * @param {Array.<string>} [asArgs]
                 * @param {boolean} [fCompact]
                 */
                Debugger.prototype.doRegisters = function(asArgs, fCompact)
                {
                    if (asArgs && asArgs[1] == "?") {
                        this.println("\nregister commands:");
                        this.println("\tr\t\tdisplay all registers");
                        this.println("\tr [target=#]\tmodify target register");
                        this.println("supported targets:");
                        this.println("\tall registers and flags V,D,I,S,Z,A,P,C");
                        return;
                    }
                    var fIns = true, fProt;
                    if (asArgs != null && asArgs.length > 1) {
                        var sReg = asArgs[1];
                        if (sReg == 'p') {
                            fProt = (this.cpu.model >= X86.MODEL_80286);
                        } else {
                         // fIns = false;
                            var sValue = null;
                            var i = sReg.indexOf("=");
                            if (i > 0) {
                                sValue = sReg.substr(i + 1);
                                sReg = sReg.substr(0, i);
                            }
                            else if (asArgs.length > 2) {
                                sValue = asArgs[2];
                            }
                            else {
                                this.println("missing value for " + asArgs[1]);
                                return;
                            }
                            var fValid = false;
                            var w = str.parseInt(sValue, 16);
                            if (!isNaN(w)) {
                                fValid = true;
                                var sRegMatch = sReg.toUpperCase();
                                if (sRegMatch.charAt(0) == 'E' && this.cchReg <= 4) {
                                    sRegMatch = null;
                                }
                                switch (sRegMatch) {
                                case "AL":
                                    this.cpu.regEAX = (this.cpu.regEAX & ~0xff) | (w & 0xff);
                                    break;
                                case "AH":
                                    this.cpu.regEAX = (this.cpu.regEAX & ~0xff00) | ((w << 8) & 0xff);
                                    break;
                                case "AX":
                                    this.cpu.regEAX = (this.cpu.regEAX & ~0xffff) | (w & 0xffff);
                                    break;
                                case "BL":
                                    this.cpu.regEBX = (this.cpu.regEBX & ~0xff) | (w & 0xff);
                                    break;
                                case "BH":
                                    this.cpu.regEBX = (this.cpu.regEBX & ~0xff00) | ((w << 8) & 0xff);
                                    break;
                                case "BX":
                                    this.cpu.regEBX = (this.cpu.regEBX & ~0xffff) | (w & 0xffff);
                                    break;
                                case "CL":
                                    this.cpu.regECX = (this.cpu.regECX & ~0xff) | (w & 0xff);
                                    break;
                                case "CH":
                                    this.cpu.regECX = (this.cpu.regECX & ~0xff00) | ((w << 8) & 0xff);
                                    break;
                                case "CX":
                                    this.cpu.regECX = (this.cpu.regECX & ~0xffff) | (w & 0xffff);
                                    break;
                                case "DL":
                                    this.cpu.regEDX = (this.cpu.regEDX & ~0xff) | (w & 0xff);
                                    break;
                                case "DH":
                                    this.cpu.regEDX = (this.cpu.regEDX & ~0xff00) | ((w << 8) & 0xff);
                                    break;
                                case "DX":
                                    this.cpu.regEDX = (this.cpu.regEDX & ~0xffff) | (w & 0xffff);
                                    break;
                                case "SP":
                                    this.cpu.setSP((this.cpu.getSP() & ~0xffff) | (w & 0xffff));
                                    break;
                                case "BP":
                                    this.cpu.regEBP = (this.cpu.regEBP & ~0xffff) | (w & 0xffff);
                                    break;
                                case "SI":
                                    this.cpu.regESI = (this.cpu.regESI & ~0xffff) | (w & 0xffff);
                                    break;
                                case "DI":
                                    this.cpu.regEDI = (this.cpu.regEDI & ~0xffff) | (w & 0xffff);
                                    break;
                                case "DS":
                                    this.cpu.setDS(w);
                                    break;
                                case "ES":
                                    this.cpu.setES(w);
                                    break;
                                case "SS":
                                    this.cpu.setSS(w);
                                    break;
                                case "CS":
                                 // fIns = true;
                                    this.cpu.setCS(w);
                                    this.dbgAddrNextCode = this.newAddr(this.cpu.getIP(), this.cpu.getCS());
                                    break;
                                case "IP":
                                 // fIns = true;
                                    this.cpu.setIP(w);
                                    this.dbgAddrNextCode = this.newAddr(this.cpu.getIP(), this.cpu.getCS());
                                    break;
                                /*
                                 * I used to alias "PC" to "IP", until I discovered that early (perhaps ALL) versions of
                                 * DEBUG.COM treat "PC" as an alias for the 16-bit flags register.  I, of course, prefer "PS".
                                 */
                                case "PC":
                                case "PS":
                                    this.cpu.setPS(w);
                                    break;
                                case "C":
                                    if (w) this.cpu.setCF(); else this.cpu.clearCF();
                                    break;
                                case "P":
                                    if (w) this.cpu.setPF(); else this.cpu.clearPF();
                                    break;
                                case "A":
                                    if (w) this.cpu.setAF(); else this.cpu.clearAF();
                                    break;
                                case "Z":
                                    if (w) this.cpu.setZF(); else this.cpu.clearZF();
                                    break;
                                case "S":
                                    if (w) this.cpu.setSF(); else this.cpu.clearSF();
                                    break;
                                case "I":
                                    if (w) this.cpu.setIF(); else this.cpu.clearIF();
                                    break;
                                case "D":
                                    if (w) this.cpu.setDF(); else this.cpu.clearDF();
                                    break;
                                case "V":
                                    if (w) this.cpu.setOF(); else this.cpu.clearOF();
                                    break;
                                default:
                                    var fUnknown = true;
                                    if (this.cpu.model >= X86.MODEL_80286) {
                                        fUnknown = false;
                                        switch(sRegMatch){
                                        case "MS":
                                            this.cpu.setMSW(w);
                                            break;
                                        case "TR":
                                            if (this.cpu.segTSS.load(w, true) === X86.ADDR_INVALID) {
                                                fValid = false;
                                            }
                                            break;
                                        /*
                                         * TODO: Add support for GDTR (addr and limit), IDTR (addr and limit), and perhaps
                                         * even the ability to edit descriptor information associated with each segment register.
                                         */
                                        default:
                                            fUnknown = true;
                                            if (I386 && this.cpu.model >= X86.MODEL_80386) {
                                                fUnknown = false;
                                                switch(sRegMatch){
                                                case "EAX":
                                                    this.cpu.regEAX = w;
                                                    break;
                                                case "EBX":
                                                    this.cpu.regEBX = w;
                                                    break;
                                                case "ECX":
                                                    this.cpu.regECX = w;
                                                    break;
                                                case "EDX":
                                                    this.cpu.regEDX = w;
                                                    break;
                                                case "ESP":
                                                    this.cpu.setSP(w);
                                                    break;
                                                case "EBP":
                                                    this.cpu.regEBP = w;
                                                    break;
                                                case "ESI":
                                                    this.cpu.regESI = w;
                                                    break;
                                                case "EDI":
                                                    this.cpu.regEDI = w;
                                                    break;
                                                case "FS":
                                                    this.cpu.setFS(w);
                                                    break;
                                                case "GS":
                                                    this.cpu.setGS(w);
                                                    break;
                                                case "CR0":
                                                    this.cpu.regCR0 = w;
                                                    break;
                                                case "CR2":
                                                    this.cpu.regCR2 = w;
                                                    break;
                                                case "CR3":
                                                    this.cpu.regCR3 = w;
                                                    break;
                                                /*
                                                 * TODO: Add support for DR0-DR7 and TR6-TR7.
                                                 */
                                                default:
                                                    fUnknown = true;
                                                    break;
                                                }
                                            }
                                            break;
                                        }
                                    }
                                    if (fUnknown) {
                                        this.println("unknown register: " + sReg);
                                        return;
                                    }
                                }
                            }
                            if (!fValid) {
                                this.println("invalid value: " + sValue);
                                return;
                            }
                            this.cpu.updateCPU();
                            this.println("\nupdated registers:");
                            fCompact = true;
                        }
                    }
            
                    this.println((fCompact? '' : '\n') + this.getRegDump(fProt));
            
                    if (fIns) {
                        this.dbgAddrNextCode = this.newAddr(this.cpu.getIP(), this.cpu.getCS());
                        this.doUnassemble(this.hexAddr(this.dbgAddrNextCode));
                    }
                };
            
                /**
                 * doRun(sAddr)
                 *
                 * @this {Debugger}
                 * @param {string} sAddr
                 */
                Debugger.prototype.doRun = function(sAddr)
                {
                    if (sAddr !== undefined) {
                        var dbgAddr = this.parseAddr(sAddr, Debugger.ADDR_CODE);
                        if (dbgAddr.off == null) return;
                        this.setTempBreakpoint(dbgAddr);
                    }
                    if (!this.runCPU(true)) {
                        this.println('cpu busy, "g" command ignored');
                    }
                };
            
                /**
                 * doProcStep(sCmd)
                 *
                 * @this {Debugger}
                 * @param {string} [sCmd] "p" or "pr"
                 */
                Debugger.prototype.doProcStep = function(sCmd)
                {
                    var fCallStep = true;
                    var fRegs = (sCmd == "pr"? 1 : 0);
                    /*
                     * Set up the value for this.fProcStep (ie, 1 or 2) depending on whether the user wants
                     * a subsequent register dump ("pr") or not ("p").
                     */
                    var fProcStep = 1 + fRegs;
                    if (!this.fProcStep) {
                        var fPrefix;
                        var fRepeat = false;
                        var dbgAddr = this.newAddr(this.cpu.getIP(), this.cpu.getCS());
                        do {
                            fPrefix = false;
                            var bOpcode = this.getByte(dbgAddr);
                            switch (bOpcode) {
                            case X86.OPCODE.ES:
                            case X86.OPCODE.CS:
                            case X86.OPCODE.SS:
                            case X86.OPCODE.DS:
                            case X86.OPCODE.FS:     // I386 only
                            case X86.OPCODE.GS:     // I386 only
                            case X86.OPCODE.OS:     // I386 only
                            case X86.OPCODE.AS:     // I386 only
                            case X86.OPCODE.LOCK:
                                this.incAddr(dbgAddr, 1);
                                fPrefix = true;
                                break;
                            case X86.OPCODE.INT3:
                            case X86.OPCODE.INTO:
                                this.fProcStep = fProcStep;
                                this.incAddr(dbgAddr, 1);
                                break;
                            case X86.OPCODE.INTn:
                            case X86.OPCODE.LOOPNZ:
                            case X86.OPCODE.LOOPZ:
                            case X86.OPCODE.LOOP:
                                this.fProcStep = fProcStep;
                                this.incAddr(dbgAddr, 2);
                                break;
                            case X86.OPCODE.CALL:
                                if (fCallStep) {
                                    this.fProcStep = fProcStep;
                                    this.incAddr(dbgAddr, 3);
                                }
                                break;
                            case X86.OPCODE.CALLF:
                                if (fCallStep) {
                                    this.fProcStep = fProcStep;
                                    this.incAddr(dbgAddr, 5);
                                }
                                break;
                            case X86.OPCODE.GRP4W:
                                if (fCallStep) {
                                    var w = this.getWord(dbgAddr) & X86.OPCODE.CALLMASK;
                                    this.fProcStep = ((w == X86.OPCODE.CALLW || w == X86.OPCODE.CALLFDW)? fProcStep : 0);
                                }
                                break;
                            case X86.OPCODE.REPZ:
                            case X86.OPCODE.REPNZ:
                                this.incAddr(dbgAddr, 1);
                                fRepeat = fPrefix = true;
                                break;
                            case X86.OPCODE.INSB:
                            case X86.OPCODE.INSW:
                            case X86.OPCODE.OUTSB:
                            case X86.OPCODE.OUTSW:
                            case X86.OPCODE.MOVSB:
                            case X86.OPCODE.MOVSW:
                            case X86.OPCODE.CMPSB:
                            case X86.OPCODE.CMPSW:
                            case X86.OPCODE.STOSB:
                            case X86.OPCODE.STOSW:
                            case X86.OPCODE.LODSB:
                            case X86.OPCODE.LODSW:
                            case X86.OPCODE.SCASB:
                            case X86.OPCODE.SCASW:
                                if (fRepeat) {
                                    this.fProcStep = fProcStep;
                                    this.incAddr(dbgAddr, 1);
                                }
                                break;
                            default:
                                break;
                            }
                        } while (fPrefix);
            
                        if (this.fProcStep) {
                            this.setTempBreakpoint(dbgAddr);
                            if (!this.runCPU()) {
                                this.cpu.setFocus();
                                this.fProcStep = 0;
                            }
                            /*
                             * A successful run will ultimately call stop(), which will in turn call clearTempBreakpoint(),
                             * which will clear fProcStep, so there's your assurance that fProcStep will be reset.  Now we may
                             * have stopped for reasons unrelated to the temporary breakpoint, but that's OK.
                             */
                        } else {
                            this.doStep(fRegs? "tr" : "t");
                        }
                    } else {
                        this.println("step in progress");
                    }
                };
            
                /**
                 * getCall(dbgAddr, fFar)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} [fFar]
                 * @return {string|null} CALL instruction at or near dbgAddr, or null if none
                 */
                Debugger.prototype.getCall = function(dbgAddr, fFar)
                {
                    var sCall = null;
                    var off = dbgAddr.off;
                    var offOrig = off;
                    for (var n = 1; n <= 6; n++) {
                        if (n > 2) {
                            dbgAddr.off = off;
                            dbgAddr.addr = null;
                            var s = this.getInstruction(dbgAddr);
                            if (s.indexOf("CALL") > 0 || fFar && s.indexOf("INT") > 0) {
                                sCall = s;
                                break;
                            }
                        }
                        if (!--off) break;
                    }
                    dbgAddr.off = offOrig;
                    return sCall;
                };
            
                /**
                 * doStackTrace()
                 *
                 * @this {Debugger}
                 */
                Debugger.prototype.doStackTrace = function()
                {
                    var nFrames = 10, cFrames = 0;
                    var selCode = this.cpu.segCS.sel;
                    var dbgAddrCall = this.newAddr();
                    var dbgAddrStack = this.newAddr(this.cpu.getSP(), this.cpu.getSS());
                    this.println("stack trace for " + this.hexAddr(dbgAddrStack));
                    while (cFrames < nFrames) {
                        var sCall = null, cTests = 256;
                        while ((dbgAddrStack.off >>> 0) < (this.cpu.regLSPLimit >>> 0)) {
                            dbgAddrCall.off = this.getWord(dbgAddrStack, true);
                            /*
                             * Because we're using the auto-increment feature of getWord(), and because that will automatically
                             * wrap the offset around the end of the segment, we must also check the addr property to detect the wrap.
                             */
                            if (dbgAddrStack.addr == null || !cTests--) break;
                            dbgAddrCall.sel = selCode;
                            sCall = this.getCall(dbgAddrCall);
                            if (sCall) {
                                break;
                            }
                            dbgAddrCall.sel = this.getWord(dbgAddrStack);
                            sCall = this.getCall(dbgAddrCall, true);
                            if (sCall) {
                                selCode = this.getWord(dbgAddrStack, true);
                                /*
                                 * It's not strictly necessary that we skip over the flags word that's pushed as part of any INT
                                 * instruction, but it reduces the risk of misinterpreting it as a return address on the next iteration.
                                 */
                                if (sCall.indexOf("INT") > 0) this.getWord(dbgAddrStack, true);
                                break;
                            }
                        }
                        if (!sCall) break;
                        sCall = str.pad(sCall, 50) + ";stack=" + this.hexAddr(dbgAddrStack) + " return=" + this.hexAddr(dbgAddrCall);
                        this.println(sCall);
                        cFrames++;
                    }
                    if (!cFrames) this.println("no return addresses found");
                };
            
                /**
                 * doStep(sCmd, sCount)
                 *
                 * @this {Debugger}
                 * @param {string} [sCmd] "t" or "tr"
                 * @param {string} [sCount] # of instructions to step
                 */
                Debugger.prototype.doStep = function(sCmd, sCount)
                {
                    var dbg = this;
                    var fRegs = (sCmd == "tr");
                    var count = (sCount != null? +sCount : 1);
                    var nCycles = (count == 1? 0 : 1);
                    web.onCountRepeat(
                        count,
                        function onCountStep() {
                            return dbg.setBusy(true) && dbg.stepCPU(nCycles, fRegs, false);
                        },
                        function onCountStepComplete() {
                            /*
                             * We explicitly called stepCPU() with fUpdateCPU === false, because repeatedly
                             * calling updateCPU() can be very slow, especially when fDisplayLiveRegs is true,
                             * so once the repeat count has been exhausted, we must perform a final updateCPU().
                             */
                            dbg.cpu.updateCPU();
                            dbg.setBusy(false);
                        }
                    );
                };
            
                /**
                 * initAddrSize(dbgAddr, fNonPrefix)
                 *
                 * @this {Debugger}
                 * @param {{DbgAddr}} dbgAddr
                 * @param {boolean} fNonPrefix
                 */
                Debugger.prototype.initAddrSize = function(dbgAddr, fNonPrefix)
                {
                    /*
                     * Use dbgAddr.fOverride to record whether we previously processed any OPERAND or ADDRESS overrides.
                     */
                    dbgAddr.fOverride = (dbgAddr.fData32 || dbgAddr.fAddr32);
                    /*
                     * For proper disassembly of instructions preceded by an OPERAND (0x66) size prefix, we set
                     * dbgAddr.fData32 to true whenever the operand size is 32-bit; similarly, for an ADDRESS (0x67)
                     * size prefix, we set dbgAddr.fAddr32 to true whenever the address size is 32-bit.  Initially,
                     * both fields must be set to match the size of the current code segment.
                     */
                    if (fNonPrefix) {
                        dbgAddr.fData32 = (this.cpu.segCS.dataSize == 4);
                        dbgAddr.fAddr32 = (this.cpu.segCS.addrSize == 4);
                    }
                    /*
                     * We also use dbgAddr.fComplete to record whether the caller (ie, getInstruction()) is reporting that
                     * it processed a complete instruction (ie, a non-prefix) or not.
                     */
                    dbgAddr.fComplete = fNonPrefix;
                };
            
                /**
                 * isStringIns(bOpcode)
                 *
                 * @this {Debugger}
                 * @param {number} bOpcode
                 * @return {boolean} true if string instruction, false if not
                 */
                Debugger.prototype.isStringIns = function(bOpcode)
                {
                    return (bOpcode >= X86.OPCODE.MOVSB && bOpcode <= X86.OPCODE.CMPSW || bOpcode >= X86.OPCODE.STOSB && bOpcode <= X86.OPCODE.SCASW);
                };
            
                /**
                 * doUnassemble(sAddr, sAddrEnd, n)
                 *
                 * @this {Debugger}
                 * @param {string} [sAddr]
                 * @param {string} [sAddrEnd]
                 * @param {number} [n]
                 */
                Debugger.prototype.doUnassemble = function(sAddr, sAddrEnd, n)
                {
                    var dbgAddr = this.parseAddr(sAddr, Debugger.ADDR_CODE);
                    if (dbgAddr.off == null) return;
            
                    if (n === undefined) n = 1;
                    var dbgAddrEnd = this.newAddr(this.maskReg, dbgAddr.sel, this.bus.nBusLimit);
            
                    var cb = 0x100;
                    if (sAddrEnd !== undefined) {
            
                        dbgAddrEnd = this.parseAddr(sAddrEnd, Debugger.ADDR_CODE);
                        if (dbgAddrEnd.off == null || dbgAddrEnd.off < dbgAddr.off) return;
            
                        cb = dbgAddrEnd.off - dbgAddr.off;
                        if (!DEBUG && cb > 0x100) {
                            /*
                             * Limiting the amount of disassembled code to 256 bytes in non-DEBUG builds is partly to
                             * prevent the user from wedging the browser by dumping too many lines, but also a recognition
                             * that, in non-DEBUG builds, this.println() keeps print output buffer truncated to 8Kb anyway.
                             */
                            this.println("range too large");
                            return;
                        }
                        n = -1;
                    }
            
                    var fBlank = (dbgAddr.off != this.dbgAddrNextCode.off);
            
                    var cLines = 0;
                    this.initAddrSize(dbgAddr, true);
            
                    while (cb > 0 && n--) {
            
                        var bOpcode = this.getByte(dbgAddr);
                        var addr = dbgAddr.addr;
                        var nSequence = (this.isBusy(false) || this.fProcStep)? this.nCycles : null;
                        var sComment = (nSequence != null? "cycles" : null);
                        var aSymbol = this.findSymbolAtAddr(dbgAddr);
            
                        if (aSymbol[0]) {
                            var sLabel = aSymbol[0] + ":";
                            fBlank = false;
                            if (aSymbol[2]) sLabel += " " + aSymbol[2];
                            this.println(sLabel);
                        }
            
                        if (fBlank) this.println();
            
                        if (aSymbol[3]) {
                            sComment = aSymbol[3];
                            nSequence = null;
                        }
            
                        var sIns = this.getInstruction(dbgAddr, sComment, nSequence);
            
                        /*
                         * If getInstruction() reported that it did not yet process a complete instruction (via dbgAddr.fComplete),
                         * then bump the instruction count by one, so that we display one more line (and hopefully the complete
                         * instruction).
                         */
                        if (!dbgAddr.fComplete && !n) n++;
            
                        this.println(sIns);
                        this.dbgAddrNextCode = dbgAddr;
                        cb -= dbgAddr.addr - addr;
                        fBlank = false;
                        cLines++;
                    }
                };
            
                /**
                 * parseCommand(sCmd, fSave)
                 *
                 * @this {Debugger}
                 * @param {string|undefined} sCmd
                 * @param {boolean} [fSave] is true to save the command, false if not
                 * @return {Array.<string>}
                 */
                Debugger.prototype.parseCommand = function(sCmd, fSave)
                {
                    if (fSave) {
                        if (!sCmd) {
                            sCmd = this.aPrevCmds[this.iPrevCmd+1];
                        } else {
                            if (this.iPrevCmd < 0 && this.aPrevCmds.length) {
                                this.iPrevCmd = 0;
                            }
                            if (this.iPrevCmd < 0 || sCmd != this.aPrevCmds[this.iPrevCmd]) {
                                this.aPrevCmds.splice(0, 0, sCmd);
                                this.iPrevCmd = 0;
                            }
                            this.iPrevCmd--;
                        }
                    }
                    var a = (sCmd? sCmd.split(sCmd.indexOf('|') >= 0? '|' : ';') : ['']);
                    for (var s in a) {
                        a[s] = str.trim(a[s]);
                    }
                    return a;
                };
            
                /**
                 * doCommand(sCmd, fQuiet)
                 *
                 * @this {Debugger}
                 * @param {string} sCmd
                 * @param {boolean} [fQuiet]
                 * @return {boolean} true if command processed, false if unrecognized
                 */
                Debugger.prototype.doCommand = function(sCmd, fQuiet)
                {
                    var result = true;
            
                    try {
                        if (!sCmd.length) {
                            if (this.fAssemble) {
                                this.println("ended assemble @" + this.hexAddr(this.dbgAddrAssemble));
                                this.dbgAddrNextCode = this.dbgAddrAssemble;
                                this.fAssemble = false;
                            } else {
                                sCmd = '?';
                            }
                        }
            
                        sCmd = sCmd.toLowerCase();
            
                        /*
                         * I'm going to try relaxing the !isBusy() requirement for doCommand(), to maximize our
                         * ability to issue Debugger commands externally.
                         */
                        if (this.isReady() /* && !this.isBusy(true) */ && sCmd.length > 0) {
            
                            if (this.fAssemble) {
                                sCmd = "a " + this.hexAddr(this.dbgAddrAssemble) + " " + sCmd;
                            }
                            else {
                                /*
                                 * Process any "whole" commands here first (eg, "debug", "nodebug", "reset", etc.)
                                 *
                                 * For all other commands, if they lack a space between the command and argument portions,
                                 * insert a space before the first non-alpha character, so that split() will have the desired effect.
                                 */
                                if (!COMPILED) {
                                    if (sCmd == "debug") {
                                        window.DEBUG = true;
                                        this.println("DEBUG checks on");
                                        return true;
                                    }
                                    else if (sCmd == "nodebug") {
                                        window.DEBUG = false;
                                        this.println("DEBUG checks off");
                                        return true;
                                    }
                                }
            
                                var ch, ch0, i;
                                switch (sCmd) {
                                case "reset":
                                    if (this.cmp) this.cmp.reset();
                                    return true;
                                case "ver":
                                    this.println((APPNAME || "PCjs") + " version " + APPVERSION + " (" + this.cpu.model + (COMPILED? ",RELEASE" : (DEBUG? ",DEBUG" : ",NODEBUG")) + (PREFETCH? ",PREFETCH" : ",NOPREFETCH") + (TYPEDARRAYS? ",TYPEDARRAYS" : (FATARRAYS? ",FATARRAYS" : ",LONGARRAYS")) + (BACKTRACK? ",BACKTRACK" : ",NOBACKTRACK") + ")");
                                    return true;
                                default:
                                    ch0 = sCmd.charAt(0);
                                    for (i = 1; i < sCmd.length; i++) {
                                        ch = sCmd.charAt(i);
                                        if (ch == " ") break;
                                        if (ch0 == "r" || ch < "a" || ch > "z") {
                                            sCmd = sCmd.substring(0, i) + " " + sCmd.substring(i);
                                            break;
                                        }
                                    }
                                    break;
                                }
                            }
            
                            var asArgs = sCmd.split(" ");
                            switch (asArgs[0].charAt(0)) {
                            case "a":
                                this.doAssemble(asArgs);
                                break;
                            case "b":
                                this.doBreak(asArgs[0], asArgs[1]);
                                break;
                            case "c":
                                this.doClear(asArgs[0]);
                                break;
                            case "d":
                                this.doDump(asArgs[0], asArgs[1], asArgs[2]);
                                break;
                            case "e":
                                this.doEdit(asArgs);
                                break;
                            case "f":
                                this.doFreqs(asArgs[1]);
                                break;
                            case "g":
                                this.doRun(asArgs[1]);
                                break;
                            case "h":
                                this.doHalt(asArgs[1]);
                                break;
                            case "i":
                                this.doInput(asArgs[1]);
                                break;
                            case "k":
                                this.doStackTrace();
                                break;
                            case "l":
                                this.doLoad(asArgs);
                                break;
                            case "m":
                                this.doMessages(asArgs);
                                break;
                            case "o":
                                this.doOutput(asArgs[1], asArgs[2]);
                                break;
                            case "p":
                            case "pr":
                                this.doProcStep(asArgs[0]);
                                break;
                            case "r":
                                this.doRegisters(asArgs);
                                break;
                            case "t":
                            case "tr":
                                this.doStep(asArgs[0], asArgs[1]);
                                break;
                            case "u":
                                this.doUnassemble(asArgs[1], asArgs[2], 8);
                                break;
                            case "x":
                                this.doExecOptions(asArgs);
                                break;
                            case "?":
                                this.doHelp();
                                break;
                            case "n":
                                if (this.doInfo(asArgs)) break;
                                /* falls through */
                            default:
                                if (!fQuiet) this.println("unknown command: " + sCmd);
                                result = false;
                                break;
                            }
                        }
                    } catch(e) {
                        this.println("debugger error: " + (e.stack || e.message));
                        result = false;
                    }
                    return result;
                };
            
                /**
                 * Debugger.init()
                 *
                 * This function operates on every HTML element of class "debugger", extracting the
                 * JSON-encoded parameters for the Debugger constructor from the element's "data-value"
                 * attribute, invoking the constructor to create a Debugger component, and then binding
                 * any associated HTML controls to the new component.
                 */
                Debugger.init = function()
                {
                    var aeDbg = Component.getElementsByClass(window.document, PCJSCLASS, "debugger");
                    for (var iDbg = 0; iDbg < aeDbg.length; iDbg++) {
                        var eDbg = aeDbg[iDbg];
                        var parmsDbg = Component.getComponentParms(eDbg);
                        var dbg = new Debugger(parmsDbg);
                        Component.bindComponentControls(dbg, eDbg, PCJSCLASS);
                    }
                };
            
                /*
                 * Initialize every Debugger module on the page (as IF there's ever going to be more than one ;-))
                 */
                web.onInit(Debugger.init);
            
            }   // endif DEBUGGER
            
            if (typeof module !== 'undefined') module.exports = Debugger;
            
          • defines.js
            /**
             * @fileoverview PCjs-specific compile-time definitions.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-08
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /**
             * @define {string}
             */
            var PCJSCLASS = "pcjs";         // this @define is the default application class (formerly APPCLASS) to use for PCjs
            
            /**
             * @define {boolean}
             *
             * WARNING: DEBUGGER needs to accurately reflect whether or not the Debugger component is (or will be) loaded.
             * In the compiled case, we rely on the Closure Compiler to override DEBUGGER as appropriate.  When it's *false*,
             * nearly all of debugger.js will be conditionally removed by the compiler, reducing it to little more than a
             * "type skeleton", which also solves some type-related warnings we would otherwise have if we tried to remove
             * debugger.js from the compilation process altogether.
             *
             * However, when we're in "development mode" and running uncompiled code in debugger-less configurations,
             * I would like to skip loading debugger.js altogether.  When doing that, we must ALSO arrange for an additional file
             * (nodebugger.js) to be loaded immediately after this file, which *explicitly* overrides DEBUGGER with *false*.
             */
            var DEBUGGER = true;            // this @define is overridden by the Closure Compiler to remove Debugger-related support
            
            /**
             * @define {boolean}
             *
             * PREFETCH enables the use of a prefetch queue.
             *
             * See the Bus component for details.
             */
            var PREFETCH = false;
            
            /**
             * @define {boolean}
             *
             * FATARRAYS is a Closure Compiler compile-time option that allocates an Array of numbers for every Memory block,
             * where each a number represents ONE byte; very wasteful, but potentially slightly faster.
             *
             * See the Memory component for details.
             */
            var FATARRAYS = false;
            
            /**
             * TYPEDARRAYS enables use of typed arrays for Memory blocks.  This used to be a compile-time-only option, but I've
             * added Memory access functions for typed arrays (see Memory.afnTypedArray), so support can be enabled dynamically.
             *
             * See the Memory component for details.
             */
            var TYPEDARRAYS = (typeof ArrayBuffer !== 'undefined');
            
            /**
             * @define {boolean}
             *
             * BACKTRACK enables backtracking: a mechanism that allows us to tag every byte of incoming data and follow the
             * flow of that data.
             *
             * This is set to !COMPILED, disabling backtracking in all compiled versions, but we may eventually set it to
             * match the DEBUGGER setting -- unless it slows down machines using the built-in Debugger too much, in which case
             * we'll have to rethink that choice OR provide a Debugger command that dynamically enables/disables as much of
             * the backtracking support as possible.
             */
            var BACKTRACK = !COMPILED;
            
            /**
             * @define {boolean}
             *
             * SAMPLER enables instruction sampling (a work-in-progress).  This was used briefly as an internal debugging aid,
             * to periodically record LIP values in a fixed-length sampling buffer, halting execution once the sampling buffer
             * was full, and then compare those sampled LIP values to corresponding LIP values on subsequent runs, to look
             * for deviations.  In theory, every run is supposed to be absolutely identical, even if you interrupt execution
             * with the Debugger or enable/disable different sets of messages, but in practice, that's hard to guarantee.
             */
            var SAMPLER = false;
            
            /**
             * @define {boolean}
             *
             * BUGS_8086 enables support for known 8086 bugs.  It's turned off by default, because 1) it adds overhead, and
             * 2) it's hard to imagine any software actually being dependent on any of the bugs covered by this (eg, the failure
             * to properly restart string instructions with multiple prefixes, or the failure to inhibit hardware interrupts
             * following SS segment loads).
             */
            var BUGS_8086 = false;
            
            /**
             * @define {boolean}
             *
             * I386 enables 80386 support.  My preference continues to be one "binary" that supports all implemented CPUs, but
             * I'm providing this to enable a slimmed-down binary, at least until 80386 support is actually finished; at the
             * moment, there's just a lot of scaffolding that bloats the compiled version without adding any real functionality.
             */
            var I386 = true;
            
            /**
             * @define {boolean}
             *
             * COMPAQ386 enables Compaq DeskPro 386 support.
             */
            var COMPAQ386 = true;
            
            /**
             * @define {boolean}
             *
             * PAGEBLOCKS enables 80386 paging support with assistance from the Bus component.  This affects how the Bus component
             * defines physical memory parameters for a 32-bit bus.  With the 8086 and 80286 processors, the Bus component was free
             * to choose any block size for physical memory allocations that made sense for the bus width (eg, 4Kb blocks for a
             * 20-bit bus, or 16Kb blocks for 24-bit bus).
             *
             * However, for the 80386 processor, it makes more sense to choose a block size that matches the page size (ie, 4Kb),
             * because then we have the option of altering the address-to-memory mapping for any block to match whatever page table
             * mapping is in effect for that address, if any, without requiring another layer of address translation.
             */
            var PAGEBLOCKS = I386;
            
            if (typeof module !== 'undefined') {
                global.PCJSCLASS = PCJSCLASS;
                global.DEBUGGER = DEBUGGER;
                global.PREFETCH = PREFETCH;
                global.FATARRAYS = FATARRAYS;
                global.TYPEDARRAYS = TYPEDARRAYS;
                global.BACKTRACK = BACKTRACK;
                global.SAMPLER = SAMPLER;
                global.BUGS_8086 = BUGS_8086;
                global.I386 = I386;
                global.COMPAQ386 = COMPAQ386;
                global.PAGEBLOCKS = PAGEBLOCKS;
                /*
                 * TODO: When we're "required" by Node, should we return anything via module.exports?
                 */
            }
            
          • disk.js
            /**
             * @fileoverview Implements disk image support for both FDC and HDC.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Nov-26
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            /*
             *  The Disk component provides methods for:
             *
             *      1) creating an empty disk: create()
             *      2) loading a disk image: load()
             *      3) getting disk information: info()
             *      4) seeking a disk sector: seek()
             *      5) reading data from a sector: read()
             *      6) writing data to a sector: write()
             *      7) save disk deltas: save()
             *      8) restore disk deltas: restore()
             *      9) converting disk contents: toJSON()
             *
             *  More functionality may be factored out of the FDC and HDC components later and moved here, to
             *  further reduce some of the duplication between them, but the above functionality is a good start.
             */
            
            /*
             * Client/Server Disk I/O
             *
             * To support large disks without consuming large amounts of client-side memory, and to push
             * client-side disk changes back the server, we need a DiskIO API that can be used in place of
             * the DiskDump API.
             *
             * Use of the DiskIO API and any associated disk images must be tightly coupled to per-user
             * storage and specific machine configurations, to prevent the disk images from being corrupted
             * by inconsistent I/O operations.  Our basic User API (userapi.js) already provides some
             * per-user storage that we can use to get the design rolling.
             *
             * The DiskIO API must also provide the ability to create new (empty) hard disk images in per-user
             * storage and automatically associate them with the machine configurations that requested them.
             *
             * Principles
             * ---
             * Originally, when the Disk class was given a disk image to load and mount, it would request the
             * ENTIRE disk image from the DiskDump module.  That works well for small (floppy) disk images, but
             * for larger disks -- let's just say anything stored on the server as an "img" file -- we'd prefer
             * to interact with that disk using "On-Demand I/O".  Any "img" file on the same server as the PCjs
             * application should be a candidate for on-demand access.
             *
             * On-Demand I/O means that nothing is initially transferred from the server.  As sectors are
             * requested by the PCjs machine, PCjs requests them from the server, and maintains an MRU cache
             * of sectors, periodically discarding the least-used clean sectors above a certain memory limit.
             * Dirty sectors (ie, those that the PCjs machine has written to) must be periodically sent
             * back to the server and then marked as clean, so that they can be discarded like any other
             * sector.
             *
             * We also support "local" init-only disk images, which means that dirty sectors are never sent
             * back to the server and are instead retained by the client for the lifetime of the app; such
             * images are "read-only" as far as the server is concerned, but "read-write" as far as the client
             * is concerned.  Reloading/restarting an app with an "local" disk will return the disk to its
             * initial state.
             *
             * Practice
             * ---
             * Let's first look at what we *already* do for the HDC component:
             *
             *  1) Creating new (empty) disk images
             *  2) Pre-loading pre-built JSON-encoded disk images (converting them to JSON on the fly as needed)
             *
             * An example of #1 is in /devices/pc/machine/5160/cga/256kb/demo/machine.xml:
             *
             *      <hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3}]'/>
             *
             * and an example of #2 is in /disks/pc/fixed/win101.xml:
             *
             *      <hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",path:"/disks/pc/fixed/win101/10mb.json",type:3}]'/>
             *
             * The HDC component expects an array of drive entries.  Array position determines drive numbering
             * (the first entry is drive 0, the second is drive 1, etc), and each entry contains the following
             * properties:
             *
             *      'name': user-friendly name for the disk, if any
             *      'path': URL of the disk image, if any
             *      'type': a drive type
             *
             * Of those properties, only 'type' is required, which provides an index into an HDC "Drive Type"
             * table that determines disk geometry and therefore disk size.  As we add support for larger disks and
             * newer disk controllers, the 'type' parameter will be superseded by either a user-defined 'geometry'
             * parameter that will define number of heads, cylinders, tracks, sectors per track, and (max) bytes per
             * sector, or perhaps a generic 'size' parameter that leaves geometry choices to the HDC component,
             * which will then pass those decisions on to the Disk component.
             *
             * We will enable on-demand I/O for a disk image with a new 'mode' parameter that looks like:
             *
             *      'mode': one of "local", "preload", "demandrw", "demandro"
             *
             * "preload" means the disk image will be completely preloaded, exactly as before; "demandrw" enables
             * full on-demand I/O support; and "demandro" enables on-demand I/O for reads only (all writes are retained
             * and never written back to the server).
             *
             * "ro" will be the fallback for "rw" unless TWO other important criteria are met: 1) the user has a
             * private user key, and therefore per-user storage; and 2) the disk image 'path' contains an asterisk (*)
             * that the server can internally remap to a directory in the user's storage; eg:
             *
             *      'path': <asterisk>/10mb.img (path components following the asterisk are optional)
             *
             * If the disk image does not already exist, it will be created (but not formatted).
             *
             * This preserves the promise that EVERYTHING a user does within a PCjs machine is private (ie, not
             * visible to any other PCjs users).  I don't want to be in the business of saving any user machine
             * states or disk changes, but at least those operations are limited to users who have asked for (and
             * received) a private user key.
             *
             * Another important consideration at this stage is dealing with multiple machines writing to the same
             * disk image; even though we're limiting the "demandrw" mode to per-user images, a single user may still
             * inadvertently start up multiple machines that refer to the same disk image.
             *
             * So, every PCjs machine needs to generate a unique token and include that token with every Disk I/O API
             * operation, so that the server can revoke a previous machine's "rw" access to a disk image when a new
             * machine requests "rw" access to the same disk image.
             *
             * From the client's perspective, revocation can be quietly dealt with by reverting to "demandro" mode;
             * that client becomes stuck with all their dirty sectors until they can reclaim "rw" access, which should
             * only happen if no intervening writes to the disk image on the server have occurred (if I bother allowing
             * reclamation at all).
             *
             * The real challenge here is avoiding revocation of a machine that still has critical changes to commit,
             * but since we can't even solve the problem of a user closing their browser at an inopportune time
             * and potentially leaving a disk image in an inconsistent state, premature revocation is the least of
             * our problems.  Since a real hard disk could suffer the same fate if the machine's power was turned off
             * at the wrong time, you could say that we're simply providing a faithful simulation of reality.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var usr         = require("../../shared/lib/usrlib");
                var web         = require("../../shared/lib/weblib");
                var DiskAPI     = require("../../shared/lib/diskapi");
                var DumpAPI     = require("../../shared/lib/dumpapi");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
            }
            
            /**
             * Disk(controller, drive, mode)
             *
             * Disk contents are stored as an array (aDiskData) of cylinders, each of which is an array of
             * heads, each of which is an array of sector objects; the latter contain sector numbers and
             * sector data, where sector data is an array of dwords.  The format does not impose any
             * limitations on number of cylinders, number of heads, sectors per track, or bytes per sector.
             *
             * WARNING: All accesses to disk sector properties must be via their string names, not their
             * "dot" names, otherwise code will break after it's been processed by the Closure Compiler,
             * and any dumped disks may be unmountable.  This is a side-effect of how we mount and dump
             * disk images (ie, as JSON-encoded streams).
             *
             * This means, for example, that all references to "track[iSector].data" must actually appear as
             * "track[iSector]['data']".
             *
             * @constructor
             * @extends Component
             * @param {HDC|FDC} controller
             * @param {Object} drive
             * @param {string} mode
             */
            function Disk(controller, drive, mode)
            {
                Component.call(this, "Disk", {'id': controller.idMachine + ".disk" + (++Disk.nDisks)}, Disk, Messages.DISK);
            
                /*
                 * Route all non-Debugger messages (eg, notice() and println() calls) through
                 * this.controller (eg, controller.notice() and controller.println()), because
                 * the Computer component is unaware of any Disk objects and therefore will not
                 * set up the usual overrides when a Control Panel is installed.
                 */
                this.controller = controller;
                this.cmp = controller.cmp;
                this.dbg = controller.dbg;
                this.drive = drive;
            
                /*
                 * We pull out a number of drive properties that we may or may not need as defaults
                 */
                this.sDiskName = drive.name;
                this.fRemovable = drive.fRemovable;
                this.fOnDemand = this.fRemote = false;
            
                /*
                 * Initialize the disk contents
                 */
                this.create(mode, drive.nCylinders, drive.nHeads, drive.nSectors, drive.cbSector);
            
                /*
                 * The following dirty sector and timer properties are used only with fOnDemand disks,
                 * assuming fRemote was successfully set.
                 */
                this.aDirtySectors = [];
                this.aDirtyTimestamps = [];         // this array is parallel to aDirtySectors
                this.timerWrite = null;             // REMOTE_WRITE_DELAY timer in effect, if any
                this.msTimerWrite = 0;              // the time that the write timer, if any, is set to fire
                this.fWriteInProgress = false;
            
                this.setReady();
            }
            
            /**
             * @typedef {{
             *  sPath:  string,
             *  sName:  string,
             *  bAttr:  number,
             *  cbSize: number,
             *  apba:   Array.<number>,
             *  disk:   Disk
             * }}
             */
            var FileInfo;
            
            /**
             * Every Sector object (once loaded and fully parsed) should have ALL of the following named properties:
             *
             *      'sector':   sector number
             *      'length':   size of the sector, in bytes
             *      'data':     array of dwords
             *      'pattern':  dword pattern to use for empty or partial sectors (or null if sector still needs to be loaded)
             *
             * initSector() also sets the following properties, to help us quickly identify its location within aDiskData:
             *
             *      iCylinder
             *      iHead
             *
             * In addition, we will maintain the following information on a per-sector basis, as sectors are modified:
             *
             *      iModify:    index of first modified dword in sector
             *      cModify:    number of modified dwords in sector
             *      fDirty:     true if sector is dirty, false if clean (or cleaning in progress)
             *
             * fDirty is used in conjunction with "demandrw" disks; it is set to true whenever the sector is modified, and is
             * set to false whenever the sector has been sent to the server.  If the server write succeeds and fDirty is still
             * false, then the sector modifications are removed (cModify is set to zero).  If the write succeeds but fDirty was
             * set to true again in the meantime, then all the sector modifications (even those that were just written) remain
             * in place (since we don't keep track of more than one modification range within a sector).  And if the write failed,
             * then fDirty is set back to true and again all modifications remain in place; the best we can do is schedule another
             * write attempt.
             *
             * TODO: Perhaps we should also maintain a failure count and stop trying to write sectors that reach a certain
             * threshold.  Error-handling, as usual, is the thorniest problem.
             *
             * @typedef {{
             *  sector:     number,
             *  length:     number,
             *  data:       Array.<number>,
             *  pattern:    (number|null),
             *  iCylinder:  number,
             *  iHead:      number,
             *  iModify:    number,
             *  cModify:    number
             * }}
             */
            var SectorData;
            
            /**
             * @class SectorInfo
             * @property {number} 0 contains iCylinder
             * @property {number} 1 contains iHead
             * @property {number} 2 contains iSector
             * @property {number} 3 contains nSectors
             * @property {boolean} 4 contains fAsync
             * @property {function(nErrorCode:number,fAsync:boolean)} 5 contains done
             */
            
            /**
             * The default number of milliseconds to wait before writing a dirty sector back to a remote disk image
             *
             * @const {number}
             */
            Disk.REMOTE_WRITE_DELAY = 2000;         // 2-second delay
            
            /*
             * A global disk count, used to form unique Disk component IDs
             */
            Disk.nDisks = 0;
            
            Component.subclass(Disk);
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * We have no real interest in this notification, other than to obtain a reference to the Debugger
             * for every disk loaded BEFORE the initBus() phase; any disk loaded AFTER that point will get its Debugger
             * reference, if any, from the disk controller passed to the Disk() constructor.
             *
             * @this {ChipSet}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            Disk.prototype.initBus = function(cmp, bus, cpu, dbg) {
                this.dbg = dbg;
            };
            
            /**
             * isRemote()
             *
             * @this {Disk}
             * @return {boolean} true if remote disk, false if not
             */
            Disk.prototype.isRemote = function() {
                /*
                 * Ironically, we can't rely on fRemote, because that is cleared and set across disconnect and
                 * reconnect operations.  fOnDemand is the next best thing.
                 */
                return this.fOnDemand;
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * As with powerDown(), our sole concern here is for REMOTE disks: if a powerDown() call disconnected an
             * "on-demand" disk, we need to get reconnected.  Calling our own load() function should get the job done.
             *
             * The HDC component could have triggered this as well, but its powerUp() function only calls autoMount()
             * in case of page (ie, application) reload, which is fine for local disks but insufficient for remote disks,
             * which have a server connection that must be re-established.
             *
             * @this {Disk}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            Disk.prototype.powerUp = function(data, fRepower) {
                if (!fRepower) {
                    if (this.fOnDemand && !this.fRemote) {
                        this.setReady(false);
                        this.load(this.sDiskName, this.sDiskPath, null, this.donePowerUp, this);
                    }
                }
                return true;
            };
            
            /**
             * donePowerUp(drive, disk, sDiskName, sDiskPath)
             *
             * This is a callback issued by the Disk component once the load() from powerUp() has finished.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {Disk} disk is set if the disk was successfully mounted, null if not
             * @param {string} sDiskName
             * @param {string} sDiskPath
             */
            Disk.prototype.donePowerUp = function(drive, disk, sDiskName, sDiskPath)
            {
                this.setReady(true);
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * Our sole concern here is for REMOTE disks, making sure any unwritten changes get flushed to
             * the server during a shutdown.  No local state is ever returned, so fSave is ignored.
             *
             * Local disks are managed by the controller (ie, FDC or HDC) that mounted them; the controller's
             * powerDown() handler will take care of calling save() as needed.
             *
             * TODO: Consider taking responsibility for saving the state of local disks as well; the only reason
             * the controllers still take care of them is historical, because this component originally didn't
             * exist, and even after it was created, it didn't originally receive powerDown() notifications.
             *
             * @this {Disk}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean}
             */
            Disk.prototype.powerDown = function(fSave, fShutdown)
            {
                /*
                 * If we're connected to a remote disk, take this opportunity to flush any remaining unwritten
                 * changes and then close the connection.
                 */
                if (this.fRemote) {
                    var response;
                    var nErrorCode = 0;
                    if (this.fWriteInProgress) {
                        /*
                         * TODO: Verify that the Computer's powerOff() handler will actually honor a false return value.
                         */
                        if (!web.confirmUser("Disk writes are still in progress, shut down anyway?")) {
                            return false;
                        }
                    }
                    while ((response = this.findDirtySectors(false))) {
                        if ((nErrorCode = response[0])) {
                            this.controller.notice('Unable to save "' + this.sDiskName + '" (error ' + nErrorCode + ')');
                            break;
                        }
                    }
                    if (fShutdown) {
                        this.disconnectRemoteDisk();
                    }
                    /*
                     * I only report that changes to the disk have been "saved" if fSave is true, to avoid confusing
                     * users who might not understand the difference between discarding local changes (which should restore
                     * all diskettes to their original state) and discarding remote changes (which could leave the remote disk
                     * in a bad state).
                     */
                    if (!nErrorCode && fSave) this.controller.notice(this.sDiskName + " saved");
                }
                return true;
            };
            
            /**
             * create()
             *
             * @param {string} mode
             * @param {number} nCylinders
             * @param {number} nHeads
             * @param {number} nSectors (per track)
             * @param {number} cbSector
             *
             * Initializes the disk contents according to the current drive mode and parameters.
             */
            Disk.prototype.create = function(mode, nCylinders, nHeads, nSectors, cbSector)
            {
                this.mode = mode;
                this.nCylinders = nCylinders;
                this.nHeads = nHeads;
                this.nSectors = nSectors;
                this.cbSector = cbSector;
                this.aDiskData = [];
                /*
                 * If the drive is using PRELOAD mode, then it will use the load()/mount() process to initialize the disk contents;
                 * it wouldn't hurt to let create() do its thing, too, but it's a waste of time.
                 */
                if (this.mode != DiskAPI.MODE.PRELOAD) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("blank disk for \"" + this.sDiskName + "\": " + this.nCylinders + " cylinders, " + this.nHeads + " head(s)");
                    }
                    var aCylinders = new Array(this.nCylinders);
                    for (var iCylinder = 0; iCylinder < aCylinders.length; iCylinder++) {
                        var aHeads = new Array(this.nHeads);
                        for (var iHead = 0; iHead < aHeads.length; iHead++) {
                            var aSectors = new Array(this.nSectors);
                            for (var iSector = 1; iSector <= aSectors.length; iSector++) {
                                /*
                                 * Now that our read() and write() functions can deal with unallocated data
                                 * arrays, and can read/write the specified pattern on-the-fly, we no longer need
                                 * to pre-allocate and pre-initialize the 'data' array.
                                 *
                                 * For "local" disks, we can assume a 'pattern' of 0, but for "demandrw" and "demandro"
                                 * disks, 'pattern' is set to null, as yet another indication that I/O is required to load
                                 * the sector from the server (or to write it back to the server).
                                 */
                                aSectors[iSector - 1] = this.initSector(null, iCylinder, iHead, iSector, this.cbSector, (this.mode == DiskAPI.MODE.LOCAL? 0 : null));
                            }
                            aHeads[iHead] = aSectors;
                        }
                        aCylinders[iCylinder] = aHeads;
                    }
                    this.aDiskData = aCylinders;
                }
                this.dwChecksum = null;
            };
            
            /**
             * load(sDiskName, sDiskPath, file, fnNotify)
             *
             * TODO: Figure out how we can strongly type fnNotify, because the Closure Compiler has issues with:
             *
             *      param {function(Component,Object,Disk,string,string)} fnNotify
             *
             * for:
             *
             *     this.fnNotify.call(this.controller, this.drive, disk, this.sDiskName, this.sDiskPath);
             *
             * Also, while we're at it, learn if there are ways to:
             *
             *      1) declare a function taking NO parameters (ie, generate a warning if any parameters are specified)
             *      2) declare a type for a function's return value
             *
             * @this {Disk}
             * @param {string} sDiskName
             * @param {string} sDiskPath
             * @param {File} [file] is set if there's an associated File object
             * @param {function(...)} [fnNotify]
             * @param {Component} [controller]
             */
            Disk.prototype.load = function(sDiskName, sDiskPath, file, fnNotify, controller)
            {
                var sDiskURL = sDiskPath;
            
                /*
                 * We could use this.log() as well, but it wouldn't display which component initiated the load.
                 */
                if (DEBUG) {
                    var sMessage = 'load("' + sDiskName + '","' + sDiskPath + '")';
                    this.controller.log(sMessage);
                    this.printMessage(sMessage);
                }
            
                if (this.fnNotify) {
                    if (DEBUG) this.controller.log('too many load requests for "' + sDiskName + '" (' + sDiskPath + ')');
                    return;
                }
            
                this.sDiskName = sDiskName;
                this.sDiskPath = sDiskPath;
                this.fnNotify = fnNotify;
                this.controllerNotify = controller || this.controller;
            
                if (file) {
                    var disk = this;
                    var reader = new FileReader();
                    reader.onload = function() {
                        disk.build(reader.result, true);
                    };
                    reader.readAsArrayBuffer(file);
                    return;
                }
            
                /*
                 * If there's an occurrence of API_ENDPOINT anywhere in the path, we assume we can use it as-is;
                 * ie, that the user has already formed a URL of the type we use ourselves for unconverted disk images.
                 */
                if (sDiskPath.indexOf(DumpAPI.ENDPOINT) < 0) {
                    /*
                     * If the selected disk image has a "json" extension, then we assume it's a pre-converted
                     * JSON-encoded disk image, so we load it as-is; otherwise, we ask our server-side disk image
                     * converter to return the corresponding JSON-encoded data.
                     */
                    var sDiskExt = str.getExtension(sDiskPath);
                    if (sDiskExt == DumpAPI.FORMAT.JSON) {
                        sDiskURL = encodeURI(sDiskPath);
                    } else {
                        if (this.mode == DiskAPI.MODE.DEMANDRW || this.mode == DiskAPI.MODE.DEMANDRO) {
                            sDiskURL = this.connectRemoteDisk(sDiskPath);
                            this.fOnDemand = true;
                        } else {
                            var sDiskParm = DumpAPI.QUERY.PATH;
                            var sSizeParm = '&' + DumpAPI.QUERY.MBHD + "=10";
                            /*
                             * 'mbhd' is a new parm added for hard disk support.  In the case of 'file' or 'dir' requests,
                             * 'mbhd' informs DumpAPI.ENDPOINT that it should create a hard disk image, and one not larger than
                             * the specified size (eg, 10mb).  In fact, until DumpAPI.ENDPOINT is changed to create custom hard
                             * disk BPBs, you'll always get a standard PC XT 10mb disk image, so if the 'file' or 'dir' contains
                             * more than 10mb of data, the request will fail.  Ultimately, I want to honor the controller's
                             * driveConfig 'size' parm, or to match the capacity required by the driveConfig 'type' parameter.
                             *
                             * If a 'disk' is specified, we pass mbhd=0, because the actual size will depend on the image.
                             * However, I don't currently have any "dsk" or "img" files containing hard disk images; those formats
                             * were really intended for floppy disk images.  If I never create any hard disk image files, then
                             * we can simply eliminate sSizeParm in the 'disk' case.
                             *
                             * Added more extensions to the list of paths-treated-as-disk-images, so that URLs to files located here:
                             *
                             *      ftp://ftp.oldskool.org/pub/TOPBENCH/dskimage/
                             *
                             * can be used as-is.  TODO: There's a TODO in netlib.getFile() regarding remote support that needs
                             * to be resolved first; DiskDump relies on that function for its remote requests, and it currently
                             * supports only HTTP.
                             */
                            if (!sDiskPath.indexOf("http:") || !sDiskPath.indexOf("ftp:") || ["dsk", "ima", "img", "360", "720", "12", "144"].indexOf(sDiskExt) >= 0) {
                                sDiskParm = DumpAPI.QUERY.DISK;
                                sSizeParm = '&' + DumpAPI.QUERY.MBHD + "=0";
                            } else if (str.endsWith(sDiskPath, '/')) {
                                sDiskParm = DumpAPI.QUERY.DIR;
                            }
                            sDiskURL = web.getHost() + DumpAPI.ENDPOINT + '?' + sDiskParm + '=' + encodeURIComponent(sDiskPath) + (this.fRemovable ? "" : sSizeParm) + "&" + DumpAPI.QUERY.FORMAT + "=" + DumpAPI.FORMAT.JSON;
                        }
                    }
                }
                web.loadResource(sDiskURL, true, null, this, this.doneLoad, sDiskPath);
            };
            
            /**
             *
             * build(buffer, fModified)
             *
             * Builds a disk image from an ArrayBuffer (eg, from a FileReader object), rather than from JSON-encoded data.
             *
             * @this {Disk}
             * @param {?} buffer (we KNOW this is an ArrayBuffer, but we can't seem to convince the Closure Compiler)
             * @param {boolean} [fModified] is true if we should mark the entire disk modified (to ensure that we save/restore it)
             */
            Disk.prototype.build = function(buffer, fModified)
            {
                var disk;
                var cbDiskData = buffer? buffer.byteLength : 0;
                var disketteFormat = DiskAPI.DISKETTE_FORMATS[cbDiskData];
            
                if (disketteFormat) {
                    this.nCylinders = disketteFormat[0];
                    this.nHeads = disketteFormat[1];
                    this.nSectors = disketteFormat[2];
                    this.cbSector = 512;
            
                    var cdw = this.cbSector >> 2, dwPattern = 0, dwChecksum = 0;
                    var ib = 0;
                    var dv = new DataView(buffer, 0, cbDiskData);
            
                    this.aDiskData = new Array(this.nCylinders);
                    for (var iCylinder = 0; iCylinder < this.aDiskData.length; iCylinder++) {
                        var cylinder = this.aDiskData[iCylinder] = new Array(this.nHeads);
                        for (var iHead = 0; iHead < cylinder.length; iHead++) {
                            var head = cylinder[iHead] = new Array(this.nSectors);
                            for (var iSector = 0; iSector < head.length; iSector++) {
                                var sector = this.initSector(null, iCylinder, iHead, iSector + 1, this.cbSector, dwPattern);
                                var adw = sector['data'];
                                for (var idw = 0; idw < cdw; idw++, ib += 4) {
                                    var dw = adw[idw] = dv.getInt32(ib, true);
                                    dwChecksum = (dwChecksum + dw) & (0xffffffff|0);
                                }
                                if (fModified) sector.cModify = cdw;
                                head[iSector] = sector;
                            }
                        }
                    }
                    this.dwChecksum = dwChecksum;
                    disk = this;
                } else {
                    this.notice("Unrecognized diskette format (" + cbDiskData + " bytes)");
                }
            
                if (this.fnNotify) {
                    this.fnNotify.call(this.controller, this.drive, disk, this.sDiskName, this.sDiskPath);
                    this.fnNotify = null;
                }
            };
            
            /**
             * doneLoad(sDiskFile, sDiskData, nErrorCode, sDiskPath)
             *
             * This function was originally called mount().  If the mount is successful, we pass the Disk object to the
             * caller's fnNotify handler; otherwise, we pass null.
             *
             * @this {Disk}
             * @param {string} sDiskFile
             * @param {string} sDiskData
             * @param {number} nErrorCode (response from server if anything other than 200)
             * @param {string} sDiskPath (passed through from load() to loadResource())
             */
            Disk.prototype.doneLoad = function(sDiskFile, sDiskData, nErrorCode, sDiskPath)
            {
                var disk = null;
                this.fWriteProtected = false;
                var fPrintOnly = (nErrorCode < 0 && this.cmp && !this.cmp.aFlags.fPowered);
            
                this.sDiskFile = sDiskFile;
            
                if (this.fOnDemand) {
                    if (!nErrorCode) {
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage('doneLoad("' + sDiskFile + '","' + sDiskPath + '")');
                        }
                        this.fRemote = true;
                        this.buildFileTable();
                        disk = this;
                    } else {
                        this.controller.notice('Unable to connect to disk "' + sDiskPath + '" (error ' + nErrorCode + ': ' + sDiskData + ')', fPrintOnly);
                    }
                }
                else if (nErrorCode) {
                    /*
                     * This can happen for innocuous reasons, such as the user switching away too quickly, forcing
                     * the request to be cancelled.  And unfortunately, the browser cancels XMLHttpRequest requests
                     * BEFORE it notifies any page event handlers, so if the Computer's being powered down, we won't know
                     * that yet.  For now, we rely on the lack of a specific error (nErrorCode < 0), and suppress the
                     * notify() alert if there's no specific error AND the computer is not powered up yet.
                     */
                    this.controller.notice("Unable to load disk \"" + this.sDiskName + "\" (error " + nErrorCode + ")", fPrintOnly);
                } else {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage('doneLoad("' + sDiskFile + '","' + sDiskPath + '")');
                    }
                    try {
                        /*
                         * The following code was a hack to turn on write-protection for a disk image if there was
                         * an initial comment line containing the string "write-protected".  However, since comments
                         * are technically not allowed in JSON, I needed an alternative solution.  So, if the basename
                         * contains the suffix "-readonly", then I'll turn on write-protection for that disk as well.
                         *
                         * TODO: Provide some UI for turning write-protection on/off for disks at will, and provide
                         * an XML-based solution (ie, a per-disk XML configuration option) for controlling it as well.
                         */
                        var sBaseName = str.getBaseName(sDiskFile, true).toLowerCase();
                        if (sBaseName.indexOf("-readonly") > 0) {
                            this.fWriteProtected = true;
                        } else {
                            var iEOL = sDiskData.indexOf("\n");
                            if (iEOL > 0 && iEOL < 1024) {
                                var sConfig = sDiskData.substring(0, iEOL);
                                if (sConfig.indexOf("write-protected") > 0) {
                                    this.fWriteProtected = true;
                                }
                            }
                        }
                        /*
                         * The most likely source of any exception will be here, where we're parsing the disk data.
                         *
                         * TODO: IE9 is rather unfriendly and restrictive with regard to how much data it's willing to
                         * eval().  In particular, the 10Mb disk image we use for the Windows 1.01 demo config fails in
                         * IE9 with an "Out of memory" exception.  One work-around would be to chop the data into chunks
                         * (perhaps one track per chunk, using regular expressions) and then manually re-assemble it.
                         *
                         * However, it turns out that using JSON.parse(sDiskData) instead of eval("(" + sDiskData + ")")
                         * is a much easier fix. The only drawback is that we must first quote any unquoted property names
                         * and remove any comments, because while eval() was cool with them, JSON.parse() is more particular;
                         * the following RegExp replacements take care of those requirements.
                         *
                         * The use of hex values is something else that eval() was OK with, but JSON.parse() is not, and
                         * while I've stopped using hex values in DumpAPI responses (at least when "format=json" is specified),
                         * I can't guarantee they won't show up in "legacy" images, and there's no simple RegExp replacement
                         * for transforming hex values into decimal values, so I cop out and fall back to eval() if I detect
                         * any hex prefixes ("0x") in the sequence.  Ditto for error messages, which appear like so:
                         *
                         *      ["unrecognized disk path: test.img"]
                         */
                        var aDiskData;
                        if (sDiskData.substr(0, 1) == "<") {        // if the "data" begins with a "<"...
                            /*
                             * Early server configs reported an error (via the nErrorCode parameter) if a disk URL was invalid,
                             * but more recent server configs now display a somewhat friendlier HTML error page.  The downside,
                             * however, is that the original error has been buried, and we've received "data" that isn't actually
                             * disk data.
                             *
                             * So, if the data we've received appears to be "HTML-like", all we can really do is assume that the
                             * disk image is missing.  And so we pretend we received an error message to that effect.
                             */
                            aDiskData = ["Missing disk image: " + this.sDiskName];
                        } else {
                            if (sDiskData.indexOf("0x") < 0 && sDiskData.substr(0, 2) != "[\"") {
                                aDiskData = JSON.parse(sDiskData.replace(/([a-z]+):/gm, "\"$1\":").replace(/\/\/[^\n]*/gm, ""));
                            } else {
                                aDiskData = eval("(" + sDiskData + ")");
                            }
                        }
            
                        if (!aDiskData.length) {
                            Component.error("Empty disk image: " + this.sDiskName);
                        }
                        else if (aDiskData.length == 1) {
                            Component.error(aDiskData[0]);
                        }
                        /*
                         * aDiskData is an array of cylinders, each of which is an array of heads, each of which
                         * is an array of sector objects.  The format does not impose any limitations on number of
                         * cylinders, number of heads, or number of bytes in any of the sector object byte-arrays.
                         *
                         * WARNING: All accesses to sector object properties must be via their string names, not their
                         * "dot" names, otherwise code will break after it's been processed by the Closure Compiler.
                         *
                         * Sector object properties include:
                         *
                         *      'sector'    the sector number (1-based, not required to be sequential)
                         *      'length'    the byte-length (ie, formatted length) of the sector
                         *      'data'      the dword-array containing the sector data
                         *      'pattern'   if the dword-array length is less than 'length'/4, this value must be used
                         *                  to pad out the sector; if no 'pattern' is specified, it's assumed to be zero
                         *
                         * We still support the older JSON encoding, where sector data was encoded as an array of 'bytes'
                         * rather than a dword 'data' array.  However, our support is strictly limited to an on-the-fly
                         * conversion to a forward-compatible 'data' array.
                         */
                        else {
                            if (MAXDEBUG && this.messageEnabled()) {
                                var sCylinders = aDiskData.length + " track" + (aDiskData.length > 1 ? "s" : "");
                                var nHeads = aDiskData[0].length;
                                var sHeads = nHeads + " head" + (nHeads > 1 ? "s" : "");
                                var nSectorsPerTrack = aDiskData[0][0].length;
                                var sSectorsPerTrack = nSectorsPerTrack + " sector" + (nSectorsPerTrack > 1 ? "s" : "") + "/track";
                                this.printMessage(sCylinders + ", " + sHeads + ", " + sSectorsPerTrack);
                            }
                            /*
                             * Before the image is usable, we must "normalize" all the sectors.  In the past, this meant
                             * "inflating" them all.  However, that's no longer strictly necessary.  Mainly, it just means
                             * setting 'length', 'data', and 'pattern' properties, so that all the sectors are well-defined.
                             * This includes detecting sector data in older formats (eg, the old array of 'bytes' instead
                             * of the new 'data' array of dwords) and converting them on-the-fly to the current format.
                             */
                            this.nCylinders = aDiskData.length;
                            this.nHeads = aDiskData[0].length;
                            this.nSectors = aDiskData[0][0].length;
                            var sector = aDiskData[0][0][0];
                            this.cbSector = (sector && sector['length']) || 512;
            
                            var dwChecksum = 0;
                            for (var iCylinder = 0; iCylinder < this.nCylinders; iCylinder++) {
                                for (var iHead = 0; iHead < this.nHeads; iHead++) {
                                    for (var iSector = 0; iSector < this.nSectors; iSector++) {
                                        sector = aDiskData[iCylinder][iHead][iSector];
                                        if (!sector) continue;          // non-standard (eg, XDF) disk images may have "unused" (null) sectors
                                        var length = sector['length'];
                                        if (length === undefined) {     // provide backward-compatibility with older JSON...
                                            length = sector['length'] = 512;
                                        }
                                        length >>= 2;                   // convert length from a byte-length to a dword-length
                                        var dwPattern = sector['pattern'];
                                        if (dwPattern === undefined) {
                                            dwPattern = sector['pattern'] = 0;
                                        }
                                        var adw = sector['data'];
                                        if (adw === undefined) {
                                            var ab = sector['bytes'];
                                            if (ab === undefined || !ab.length) {
                                                /*
                                                 * It would be odd if there was neither a 'bytes' nor 'data' array; I'm just
                                                 * being paranoid.  It's more likely that the 'bytes' array is simply empty,
                                                 * in which case we need only create an empty 'data' array and turn the byte
                                                 * pattern, if any, into a dword pattern.
                                                 */
                                                adw = [];
                                                this.assert((dwPattern & 0xff) == dwPattern);
                                                dwPattern = sector['pattern'] = (dwPattern | (dwPattern << 8) | (dwPattern << 16) | (dwPattern << 24));
                                                sector['data'] = adw;
                                            } else {
                                                /*
                                                 * To keep the conversion code simple, we'll do any necessary pattern-filling first,
                                                 * to fully "inflate" the sector, eliminating the possibility of partial dwords and
                                                 * saving any code downstream from dealing with byte-size patterns.
                                                 */
                                                var cb = length << 2;
                                                for (var ib = ab.length; ib < cb; ib++) {
                                                    ab[ib] = dwPattern; // the pattern for byte-arrays was only a byte
                                                }
                                                this.fill(sector, ab, 0);
                                            }
                                            delete sector['bytes'];
                                        }
                                        this.initSector(sector, iCylinder, iHead);
                                        /*
                                         * For the disk as a whole, we maintain a checksum of the original unmodified data:
                                         *
                                         *      dwChecksum: summation of all dwords in all non-empty sectors
                                         *
                                         * Pattern-filling of sectors is deferred until absolutely necessary (eg, when a sector is
                                         * being written).  So all we need to do at this point is checksum all the initial sector data.
                                         */
                                        for (var idw = 0; idw < adw.length; idw++) {
                                            dwChecksum = (dwChecksum + adw[idw]) & (0xffffffff|0);
                                        }
                                    }
                                }
                            }
                            this.aDiskData = aDiskData;
                            this.dwChecksum = dwChecksum;
                            this.buildFileTable();
                            disk = this;
                        }
                    } catch (e) {
                        Component.error("Disk image error: " + e.message);
                    }
                }
            
                if (this.fnNotify) {
                    this.fnNotify.call(this.controllerNotify, this.drive, disk, this.sDiskName, this.sDiskPath);
                    this.fnNotify = null;
                }
            };
            
            /**
             * buildFileTable()
             *
             * This function builds a complete file table from the (first) FAT volume found on the current disk, and
             * then updates all the sector objects to point back to the corresponding file.  Used for BACKTRACK support.
             *
             * Note that while most of the methods in this module use CHS-style parameters, because our primary clients
             * are old disk controllers that deal exclusively with cylinder/head/sector values, here we use 0-based
             * "logical" sector numbers for volume-relative block addresses (aka LBAs or Logical Block Addresses), and
             * 0-based "physical" sector numbers for disk-relative block addresses (aka PBAs or Physical Block Addresses).
             *
             * Also, our use of the term LBA differs from that of more modern disk controllers; in the pre-modern world
             * of PCjs, what we call PBA numbers are what those controllers would later call LBA numbers.
             *
             * @this {Disk}
             */
            Disk.prototype.buildFileTable = function()
            {
                if (BACKTRACK) {
                    var i, off, dir = {};
            
                    this.aFileTable = [];
            
                    dir.pbaVolume = dir.lbaTotal = 0;
            
                    var cbDisk = this.nCylinders * this.nHeads * this.nSectors * this.cbSector;
            
                    /*
                     * At this point, if this is a remote disk, you may see some warning messages in your browser's console,
                     * like this message from Chrome:
                     *
                     *      "Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects
                     *      to the end user's experience. For more help, check http://xhr.spec.whatwg.org/."
                     *
                     * This is because I was lazy and made the buildFileTable() worker function getSector() use the synchronous
                     * form of seek().  For development purposes, that was fine, but...  TODO: Eventually change buildFileTable()
                     * to use async I/O.
                     */
                    if (this.fRemote) this.log("ignore any synchronous XMLHttpRequest warnings here (for now)");
            
                    var sectorBoot = this.getSector(0);
                    if (!sectorBoot) {
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("buildFileTable(): unable to read boot sector");
                        }
                        return;
                    }
            
                    dir.cbSector = this.getSectorData(sectorBoot, DiskAPI.BPB.SECTOR_BYTES, 2);
            
                    var fValid = true;
                    if (dir.cbSector != this.cbSector) {
                        /*
                         * When the first sector doesn't appear to contain a valid BPB, the most likely explanations are:
                         *
                         *      1. The image is from a diskette formatted by DOS 1.xx, which didn't use BPBs
                         *      2. The image is a fixed (partitioned) disk and the first sector is actually an MBR
                         *      3. The image is from a diskette that used a non-standard sector size (ie, not 512)
                         *
                         * To start, if this is an 160Kb disk (circa DOS 1.00) or a 320Kb disk (circa DOS 1.10), then we'll
                         * assume it's a 12-bit FAT, set assorted BPB values accordingly, and see if our assumption holds up.
                         */
                        fValid = false;
                        dir.lbaFAT = 1;
                        dir.nFATBits = 12;
                        dir.lbaRoot = dir.lbaFAT + 2;   // both 160Kb and 320Kb disks contained 2 FATs, each containing 1 sector
                        dir.nClusterSecs = 1;
                        dir.cbSector = this.cbSector;
            
                        if (cbDisk == 160 * 1024 && this.getClusterEntry(dir, 0, 0) == DiskAPI.FAT.MEDIA_160KB) {
                            dir.lbaTotal = 320;
                            dir.nEntries = 64;
                            fValid = true;
                        }
                        else if (cbDisk == 320 * 1024 && this.getClusterEntry(dir, 0, 0) == DiskAPI.FAT.MEDIA_320KB) {
                            dir.lbaTotal = 640;
                            dir.nEntries = 112;
                            fValid = true;
                        }
                        else {
                            /*
                             * So, this is either a fixed (partitioned) disk, or a disk using a non-standard sector size; let's assume
                             * the former and check for an MBR.  For now, we're only going to process the first active partition we find.
                             */
                            off = DiskAPI.MBR.PARTITIONS.OFFSET;
                            for (i = 0; i < 4; i++) {
                                var bStatus = this.getSectorData(sectorBoot, off + DiskAPI.MBR.PARTITIONS.ENTRY.STATUS, 1);
                                if (bStatus == DiskAPI.MBR.PARTITIONS.STATUS.ACTIVE) {
                                    dir.pbaVolume = this.getSectorData(sectorBoot, off + DiskAPI.MBR.PARTITIONS.ENTRY.LBA_FIRST, 4);
                                    sectorBoot = this.getSector(dir.pbaVolume);
                                    if (sectorBoot) fValid = true;
                                    break;
                                }
                                off += DiskAPI.MBR.PARTITIONS.ENTRY.LENGTH;
                            }
                        }
                        if (!fValid) {
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("buildFileTable(): unrecognized " + cbDisk + "-byte disk image with " + this.cbSector + "-byte sectors");
                            }
                            return;
                        }
                    }
            
                    if (!dir.lbaTotal) {
                        dir.lbaTotal = this.getSectorData(sectorBoot, DiskAPI.BPB.TOTAL_SECS, 2) || this.getSectorData(sectorBoot, DiskAPI.BPB.LARGE_SECS, 4);
                        dir.lbaFAT = this.getSectorData(sectorBoot, DiskAPI.BPB.RESERVED_SECS, 2);
                        dir.lbaRoot = dir.lbaFAT + this.getSectorData(sectorBoot, DiskAPI.BPB.FAT_SECS, 2) * this.getSectorData(sectorBoot, DiskAPI.BPB.TOTAL_FATS, 1);
                        dir.nEntries = this.getSectorData(sectorBoot, DiskAPI.BPB.ROOT_DIRENTS, 2);
                        dir.nClusterSecs = this.getSectorData(sectorBoot, DiskAPI.BPB.CLUSTER_SECS, 1);
                    }
            
                    dir.lbaData = dir.lbaRoot + (((dir.nEntries * DiskAPI.DIRENT.LENGTH + (dir.cbSector - 1)) / dir.cbSector) | 0);
                    dir.nClusters = (((dir.lbaTotal - dir.lbaData) / dir.nClusterSecs) | 0);
            
                    /*
                     * In all FATs, the first valid cluster number is 2, as 0 is used to indicate a free cluster and 1 is reserved.
                     *
                     * In a 12-bit FAT chain, the largest valid cluster number (iClusterMax) is 0xFF6; 0xFF7 is reserved for marking
                     * bad clusters and should NEVER appear in a cluster chain, and 0xFF8-0xFFF are used to indicate the end of a chain.
                     * Reports that cluster numbers 0xFF0-0xFF6 are "reserved" (eg, http://support.microsoft.com/KB/65541) should be
                     * ignored; those numbers may have been considered "reserved" at some early point in FAT's history, but no longer.
                     *
                     * Since 12 bits yield 4096 possible values, and since 11 of the values (0, 1, and 0xFF7-0xFFF) cannot be used to
                     * refer to an actual cluster, that leaves a theoretical maximum of 4085 clusters for a 12-bit FAT.  However, for
                     * reasons that only a small (and shrinking -- RIP AAR) number of people know, the actual cut-off is 4084.
                     *
                     * So, a FAT volume with 4084 or fewer clusters uses a 12-bit FAT, a FAT volume with 4085 to 65524 clusters uses
                     * a 16-bit FAT, and a FAT volume with more than 65524 clusters uses a 32-bit FAT.
                     *
                     * TODO: Eventually add support for FAT32.
                     */
                    dir.nFATBits = (dir.nClusters <= DiskAPI.FAT12.MAX_CLUSTERS? 12 : 16);
                    dir.iClusterMax = (dir.nFATBits == 12? DiskAPI.FAT12.CLUSNUM_MAX : DiskAPI.FAT16.CLUSNUM_MAX);
            
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("buildFileTable()\n\tlbaFAT: " + dir.lbaFAT + "\n\tlbaRoot: " + dir.lbaRoot + "\n\tlbaData: " + dir.lbaData + "\n\tlbaTotal: " + dir.lbaTotal + "\n\tnClusterSecs: " + dir.nClusterSecs + "\n\tnClusters: " + dir.nClusters);
                    }
            
                    /*
                     * The following assertion is here only to catch anomalies; it is NOT a requirement that the number of data sectors
                     * be a perfect multiple of nClusterSecs, but if it ever happens, it's worth verifying we didn't miscalculate something.
                     */
                    i = (dir.lbaTotal - dir.lbaData) % dir.nClusterSecs;
                    if (i) {
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("buildFileTable(): " + cbDisk + "-byte disk image wasting " + i + " sectors");
                        }
                    }
            
                    /*
                     * Similarly, it is NOT a requirement that the size of all root directory entries be a perfect multiple of the sector
                     * size (cbSector), but it may indicate a problem if it's not.  Note that when it comes time to read the root directory,
                     * we treat it exactly like any other directory; that is, we ignore the nEntries value and scan the entire contents of
                     * every sector allocated to the directory.  TODO: Determine whether DOS reads all root sector contents or only nEntries
                     * (ie, create a test volume where nEntries * 32 is NOT a multiple of cbSector and watch what happens).
                     */
                    this.assert(!((dir.nEntries * DiskAPI.DIRENT.LENGTH) % dir.cbSector));
            
                    var apba = [];
                    for (var lba = dir.lbaRoot; lba < dir.lbaData; lba++) apba.push(dir.pbaVolume + lba);
                    this.getDir(dir, this.sDiskFile, "", apba);
            
                    /*
                     * Create the sector-to-file mappings now.
                     */
                    for (i = 0; i < this.aFileTable.length; i++) {
                        var file = this.aFileTable[i];
                        off = 0;
                        for (var iSector = 0; iSector < file.apba.length; iSector++) {
                            this.updateSector(file, file.apba[iSector], off);
                            off += this.cbSector;
                        }
                    }
                }
            };
            
            /**
             * getDir(dir, sDisk, sDir, apba)
             *
             * @this {Disk}
             * @param {Object} dir
             * @param {string} sDisk
             * @param {string} sDir
             * @param {Array.<number>} apba
             */
            Disk.prototype.getDir = function(dir, sDisk, sDir, apba)
            {
                var iStart = this.aFileTable.length;
                var nEntriesPerSector = (dir.cbSector / DiskAPI.DIRENT.LENGTH) | 0;
            
                dir.sDir = sDir + "\\";
            
                if (DEBUG && this.messageEnabled()) this.printMessage('getDir("' + sDisk + '","' + dir.sDir + '")');
            
                for (var iSector = 0; iSector < apba.length; iSector++) {
                    var pba = apba[iSector];
                    for (var iEntry = 0; iEntry < nEntriesPerSector; iEntry++) {
                        if (!this.getDirEntry(dir, pba, iEntry)) {
                            iSector = apba.length;
                            break;
                        }
                        if (dir.sName == null || dir.sName == "." || dir.sName == "..") continue;
                        var sPath = dir.sDir + dir.sName;
                        if (DEBUG && this.messageEnabled(Messages.DISK | Messages.DATA)) {
                            this.printMessage('"' + sPath + '" size=' + dir.cbSize + ' cluster=' + dir.iCluster + ' sectors=' + JSON.stringify(dir.apba));
                            if (dir.apba.length) this.printMessage(this.dumpSector(this.getSector(dir.apba[0]), dir.apba[0], sPath));
                        }
                        this.aFileTable.push({sPath: sPath, sName: dir.sName, bAttr: dir.bAttr, cbSize: dir.cbSize, apba: dir.apba, disk: this});
                    }
                }
            
                var iEnd = this.aFileTable.length;
            
                for (var i = iStart; i < iEnd; i++) {
                    var file = this.aFileTable[i];
                    if (file.bAttr & DiskAPI.ATTR.SUBDIR && file.apba.length) this.getDir(dir, sDisk, sDir + "\\" + file.sName, file.apba);
                }
            };
            
            /**
             * getDirEntry(dir, pba, i)
             *
             * This sets the following properties on the 'dir' object:
             *
             *      sName (null if invalid/deleted entry)
             *      bAttr
             *      cbSize
             *      iCluster
             *      apba (ie, array of physical block addresses)
             *
             * On return, it's the caller's responsibility to copy out any data into a new object
             * if it wants to preserve any of the above information.
             *
             * This function also caches the following properties in the 'dir' object:
             *
             *      pbaDirCache (of the last directory sector read, if any)
             *      sectorDirCache (of the last directory sector read, if any)
             *
             * Also, the caller must also set the following 'dir' helper properties, so that clusters
             * can be located and converted to sectors (see convertClusterToSectors):
             *
             *      lbaFAT
             *      lbaData
             *      cbSector
             *      iClusterMax
             *      nClusterSecs
             *      nFATBits
             *
             * @this {Disk}
             * @param {Object} dir (to be filled in)
             * @param {number} pba (a sector of the directory)
             * @param {number} i (an entry in the directory sector, 0-based)
             * @returns {boolean} true if entry was returned (even if invalid/deleted), false if no more entries
             */
            Disk.prototype.getDirEntry = function(dir, pba, i)
            {
                if (!dir.sectorDirCache || !dir.pbaDirCache || dir.pbaDirCache != pba) {
                    dir.pbaDirCache = pba;
                    dir.sectorDirCache = this.getSector(dir.pbaDirCache);
                    if (DEBUG && this.messageEnabled(Messages.DISK | Messages.DATA)) {
                        this.printMessage(this.dumpSector(dir.sectorDirCache, dir.pbaDirCache, dir.sDir));
                    }
                }
                if (dir.sectorDirCache) {
                    var off = i * DiskAPI.DIRENT.LENGTH;
                    var b = this.getSectorData(dir.sectorDirCache, off, 1);
                    if (b == DiskAPI.DIRENT.UNUSED) {
                        return false;
                    }
                    if (b == DiskAPI.DIRENT.INVALID) {
                        dir.sName = null;
                        return true;
                    }
                    dir.sName = str.trim(this.getSectorString(dir.sectorDirCache, off + DiskAPI.DIRENT.NAME, 8));
                    var s = str.trim(this.getSectorString(dir.sectorDirCache, off + DiskAPI.DIRENT.EXT, 3));
                    if (s.length) dir.sName += '.' + s;
                    dir.bAttr = this.getSectorData(dir.sectorDirCache, off + DiskAPI.DIRENT.ATTR, 1);
                    dir.cbSize = this.getSectorData(dir.sectorDirCache, off + DiskAPI.DIRENT.SIZE, 2);
                    dir.iCluster = this.getSectorData(dir.sectorDirCache, off + DiskAPI.DIRENT.CLUSTER, 2);
                    dir.apba = this.convertClusterToSectors(dir);
                    return true;
                }
                return false;
            };
            
            /**
             * convertClusterToSectors(dir)
             *
             * @this {Disk}
             * @param {Object} dir
             * @return {Array.<number>} of PBAs (physical block addresses)
             */
            Disk.prototype.convertClusterToSectors = function(dir)
            {
                var apba = [];
                var iCluster = dir.iCluster;
                if (iCluster) {
                    do {
                        if (iCluster < DiskAPI.FAT12.CLUSNUM_MIN) {
                            this.assert(false);
                            break;
                        }
                        var lba = dir.lbaData + ((iCluster - DiskAPI.FAT12.CLUSNUM_MIN) * dir.nClusterSecs);
                        for (var i = 0; i < dir.nClusterSecs; i++) {
                            apba.push(dir.pbaVolume + lba++);
                        }
                        iCluster = this.getClusterEntry(dir, iCluster, 0) | this.getClusterEntry(dir, iCluster, 1);
                    } while (iCluster <= dir.iClusterMax);
                    this.assert(iCluster != dir.iClusterMax + 1);       // make sure we never see CLUSNUM_BAD in a cluster chain
                }
                return apba;
            };
            
            /**
             * getClusterEntry(dir, iCluster, iByte)
             *
             * @this {Disk}
             * @param {Object} dir
             * @param {number} iCluster
             * @param {number} iByte (0 for low byte of cluster entry, 1 for high byte)
             * @return {number}
             */
            Disk.prototype.getClusterEntry = function(dir, iCluster, iByte)
            {
                var w = 0;
                var cbitsSector = dir.cbSector * 8;
                var offBits = dir.nFATBits * iCluster + (iByte? 8 : 0);
                var iSector = (offBits / cbitsSector) | 0;
                if (!dir.sectorFATCache || !dir.lbaFATCache || dir.lbaFATCache != dir.lbaFAT + iSector) {
                    dir.lbaFATCache = dir.lbaFAT + iSector;
                    dir.sectorFATCache = this.getSector(dir.pbaVolume + dir.lbaFATCache);
                }
                if (dir.sectorFATCache) {
                    offBits = (offBits % cbitsSector) | 0;
                    var off = (offBits >> 3);
                    w = this.getSectorData(dir.sectorFATCache, off, 1);
                    if (!iByte) {
                        if (offBits & 0x7) w >>= 4;
                    } else {
                        if (dir.nFATBits == 16) {
                            w <<= 8;
                        } else {
                            this.assert(dir.nFATBits == 12);
                            if (offBits & 0x7) {
                                w <<= 4;
                            } else {
                                w = (w & 0xf) << 8;
                            }
                        }
                    }
                }
                return w;
            };
            
            /**
             * getSector(pba)
             *
             * @this {Disk}
             * @param {number} pba (physical block address)
             * @return {Object} sector
             */
            Disk.prototype.getSector = function(pba)
            {
                var nSectorsPerCylinder = this.nHeads * this.nSectors;
                var iCylinder = (pba / nSectorsPerCylinder) | 0;
                this.assert(iCylinder < this.nCylinders);
                var nSectorsRemaining = (pba % nSectorsPerCylinder);
                var iHead = (nSectorsRemaining / this.nSectors) | 0;
                /*
                 * PBA numbers are 0-based, but the sector numbers in CHS addressing are 1-based, so add one to iSector
                 */
                var iSector = (nSectorsRemaining % this.nSectors) + 1;
                return this.seek(iCylinder, iHead, iSector);
            };
            
            /**
             * updateSector(file, pba, off)
             *
             * Like getSector(), this must convert a PBA into CHS values; consider factoring that conversion code out.
             *
             * @this {Disk}
             * @param {Object} file
             * @param {number} pba (physical block address from the file's apba)
             * @param {number} off (file offset corresponding to the given pba of the given file)
             * @return {boolean} true if successfully updated, false if not
             */
            Disk.prototype.updateSector = function(file, pba, off)
            {
                var nSectorsPerCylinder = this.nHeads * this.nSectors;
                var iCylinder = (pba / nSectorsPerCylinder) | 0;
                var nSectorsRemaining = (pba % nSectorsPerCylinder);
                var iHead = (nSectorsRemaining / this.nSectors) | 0;
                var iSector = (nSectorsRemaining % this.nSectors);
                var cylinder, head, sector;
                if ((cylinder = this.aDiskData[iCylinder]) && (head = cylinder[iHead]) && (sector = head[iSector])) {
                    this.assert(sector['sector'] == iSector +1);
                    if (sector.file) {
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage('"' + sector.file.sPath + '" cross-linked at offset ' + sector.file.offFile + ' with "' + file.sPath + '" at offset ' + off);
                        }
                        return false;
                    }
                    sector.file = file;
                    sector.offFile = off;
                    return true;
                }
                if (DEBUG && this.messageEnabled()) this.printMessage("unable to map PBA " + pba + " to CHS");
                return false;
            };
            
            /**
             * getSectorData(sector, off, len)
             *
             * NOTE: Yes, this function is not the most efficient way to read a byte/word/dword value from within a sector,
             * but given the different states a sector may be in, it's certainly the simplest and safest, and since this is
             * only used by buildFileTable() and its progeny, it's not clear that we need to be superfast anyway.
             *
             * @this {Disk}
             * @param {Object} sector
             * @param {number} off (byte offset)
             * @param {number} len (1 to 4 bytes)
             * @return {number}
             */
            Disk.prototype.getSectorData = function(sector, off, len)
            {
                var dw = 0;
                var nShift = 0;
                this.assert(len > 0 && len <= 4);
                while (len--) {
                    this.assert(off < sector['length']);
                    var b = this.read(sector, off++);
                    this.assert(b >= 0);
                    if (b < 0) break;
                    dw |= (b << nShift);
                    nShift += 8;
                }
                return dw;
            };
            
            /**
             * getSectorString(sector, off, len)
             *
             * @this {Disk}
             * @param {Object} sector
             * @param {number} off (byte offset)
             * @param {number} len (use -1 to read a null-terminated string)
             * @return {string}
             */
            Disk.prototype.getSectorString = function(sector, off, len)
            {
                var s = "";
                while (len--) {
                    var b = this.read(sector, off++);
                    if (b <= 0) break;
                    s += String.fromCharCode(b);
                }
                return s;
            };
            
            /**
             * initSector(sector, iCylinder, iHead, iSector, cbSector, dwPattern)
             *
             * Ensures every sector has ALL the properties of a proper Sector object; ie:
             *
             *      'sector':   sector number
             *      'length':   size of the sector, in bytes
             *      'data':     array of dwords
             *      'pattern':  dword pattern to use for empty or partial sectors (null for unread remote sectors)
             *
             * In addition, we will maintain the following information on a per-sector basis,
             * as sectors are modified:
             *
             *      iModify:    index of first modified dword in sector
             *      cModify:    number of modified dwords in sector
             *      fDirty:     true if sector is dirty, false if clean (or cleaning in progress)
             *
             * @param {Object} sector
             * @param {number} iCylinder
             * @param {number} iHead
             * @param {number} [iSector]
             * @param {number} [cbSector]
             * @param {number|null} [dwPattern]
             * @return {Object}
             */
            Disk.prototype.initSector = function(sector, iCylinder, iHead, iSector, cbSector, dwPattern)
            {
                if (!sector) {
                    sector = {'sector': iSector, 'length': cbSector, 'data': [], 'pattern': dwPattern};
                }
                sector.iCylinder = iCylinder;
                sector.iHead = iHead;
                sector.iModify = sector.cModify = 0;
                sector.fDirty = false;
                return sector;
            };
            
            /**
             * connectRemoteDisk(sDiskPath)
             *
             * Unlike disconnect(), we don't issue the connect request ourselves; instead, we piggyback on the existing
             * preload code in load() to establish the connection.  That, in turn, will trigger a call to mount(), which
             * will check fOnDemand and set fRemote if the connection was successful.
             *
             * @this {Disk}
             * @param {string} sDiskPath
             * @return {string} is the URL connection string required to connect to sDiskPath
             */
            Disk.prototype.connectRemoteDisk = function(sDiskPath)
            {
                var sParms = DiskAPI.QUERY.ACTION + '=' + DiskAPI.ACTION.OPEN;
                sParms += '&' + DiskAPI.QUERY.VOLUME + '=' + sDiskPath;
                sParms += '&' + DiskAPI.QUERY.MODE + '=' + this.mode;
                sParms += '&' + DiskAPI.QUERY.CHS + '=' + this.nCylinders + ':' + this.nHeads + ':' + this.nSectors + ':' + this.cbSector;
                sParms += '&' + DiskAPI.QUERY.MACHINE + '=' + this.controller.getMachineID();
                sParms += '&' + DiskAPI.QUERY.USER + '=' + this.controller.getUserID();
                return web.getHost() + DiskAPI.ENDPOINT + '?' + sParms;
            };
            
            /**
             * readRemoteSectors(iCylinder, iHead, iSector, nSectors, fAsync, done)
             *
             * @param {number} iCylinder
             * @param {number} iHead
             * @param {number} iSector
             * @param {number} nSectors (to read)
             * @param {boolean} fAsync
             * @param {function(number,boolean)} [done]
             */
            Disk.prototype.readRemoteSectors = function(iCylinder, iHead, iSector, nSectors, fAsync, done)
            {
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("readRemoteSectors(CHS=" + iCylinder + ':' + iHead + ':' + iSector + ",N=" + nSectors + ")");
                }
            
                if (this.fRemote) {
                    var sParms = DiskAPI.QUERY.ACTION + '=' + DiskAPI.ACTION.READ;
                    sParms += '&' + DiskAPI.QUERY.VOLUME + '=' + this.sDiskPath;
                    sParms += '&' + DiskAPI.QUERY.CHS + '=' + this.nCylinders + ':' + this.nHeads + ':' + this.nSectors + ':' + this.cbSector;
                    sParms += '&' + DiskAPI.QUERY.ADDR + '=' + iCylinder + ':' + iHead + ':' + iSector + ':' + nSectors;
                    sParms += '&' + DiskAPI.QUERY.MACHINE + '=' + this.controller.getMachineID();
                    sParms += '&' + DiskAPI.QUERY.USER + '=' + this.controller.getUserID();
                    var sDiskURL = web.getHost() + DiskAPI.ENDPOINT + '?' + sParms;
                    web.loadResource(sDiskURL, fAsync, null, this, this.doneReadRemoteSectors, [iCylinder, iHead, iSector, nSectors, fAsync, done]);
                    return;
                }
                if (done) done(-1, false);
            };
            
            /**
             * doneReadRemoteSectors(sURLName, sURLData, nErrorCode, sectorInfo)
             *
             * @param {string} sURLName
             * @param {string} sURLData
             * @param {number} nErrorCode
             * @param {Array} sectorInfo
             */
            Disk.prototype.doneReadRemoteSectors = function(sURLName, sURLData, nErrorCode, sectorInfo)
            {
                var fAsync = false;
            
                var iCylinder = sectorInfo[0];
                var iHead = sectorInfo[1];
                var iSector = sectorInfo[2];
                var nSectors = sectorInfo[3];
            
                if (!nErrorCode) {
                    var abData = JSON.parse(sURLData);
                    var offData = 0;
                    while (nSectors--) {
                        /*
                         * We call seek with fWrite == true to prevent seek() from triggering another call
                         * to readRemoteSectors() and endlessly recursing.  That also forces seek() to:
                         *
                         *  1) zero the sector's 'pattern'
                         *  2) disable warning about reading an uninitialized sector
                         *
                         * We KNOW this is an uninitialized sector, because we're about to initialize it.
                         */
                        var sector = this.seek(iCylinder, iHead, iSector, true);
                        if (!sector) {
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("doneReadRemoteSectors(): seek(CHS=" + iCylinder + ':' + iHead + ':' + iSector + ") failed");
                            }
                            break;
                        }
                        this.fill(sector, abData, offData);
                        offData += sector['length'];
                        /*
                         * We happen to know that when seek() calls readRemoteSectors(), it limits the number of sectors
                         * to the current track, so the only variable we need to advance is iSector.
                         */
                        iSector++;
                    }
                    fAsync = sectorInfo[4];
                } else {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("doneReadRemoteSectors(CHS=" + iCylinder + ':' + iHead + ':' + iSector + ",N=" + nSectors + ") returned error " + nErrorCode);
                    }
                }
                var done = sectorInfo[5];
                if (done) done(nErrorCode, fAsync);
            };
            
            /**
             * writeRemoteSectors(iCylinder, iHead, iSector, nSectors, abSectors, fAsync)
             *
             * Writes to a remote disk are performed on a timer-driven basis.  When a sector is modified for the first time,
             * a reference to that sector is "pushed" onto (ie, appended to the end of) aDirtySectors, and if aDirtySectors was
             * originally empty, then a REMOTE_WRITE_DELAY timer is set.
             *
             * When the timer fires, the first batch of contiguous sectors is sent off the server, and when the server responds
             * (ie, when cleanDirtySectors() is called), if the response indicates success, every sector that was sent is marked
             * clean -- unless one or more writes to the sector occurred in the meantime, which we track through a per-sector
             * fDirty flag.
             *
             * @param {number} iCylinder
             * @param {number} iHead
             * @param {number} iSector
             * @param {number} nSectors (to write)
             * @param {Array.<number>} abSectors
             * @param {boolean} fAsync
             * @return {boolean|Array}
             */
            Disk.prototype.writeRemoteSectors = function(iCylinder, iHead, iSector, nSectors, abSectors, fAsync)
            {
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("writeRemoteSectors(CHS=" + iCylinder + ':' + iHead + ':' + iSector + ",N=" + nSectors + ")");
                }
            
                if (this.fRemote) {
                    var data = {};
                    this.fWriteInProgress = true;
                    data[DiskAPI.QUERY.ACTION] = DiskAPI.ACTION.WRITE;
                    data[DiskAPI.QUERY.VOLUME] = this.sDiskPath;
                    data[DiskAPI.QUERY.CHS] = this.nCylinders + ':' + this.nHeads + ':' + this.nSectors + ':' + this.cbSector;
                    data[DiskAPI.QUERY.ADDR] = iCylinder + ':' + iHead + ':' + iSector + ':' + nSectors;
                    data[DiskAPI.QUERY.MACHINE] = this.controller.getMachineID();
                    data[DiskAPI.QUERY.USER] = this.controller.getUserID();
                    data[DiskAPI.QUERY.DATA] = JSON.stringify(abSectors);
                    var sDiskURL = web.getHost() + DiskAPI.ENDPOINT;
                    return web.loadResource(sDiskURL, fAsync, data, this, this.doneWriteRemoteSectors, [iCylinder, iHead, iSector, nSectors, fAsync]);
                }
                return false;
            };
            
            /**
             * doneWriteRemoteSectors(sURLName, sURLData, nErrorCode, sectorInfo)
             *
             * @param {string} sURLName
             * @param {string} sURLData
             * @param {number} nErrorCode
             * @param {Array} sectorInfo
             */
            Disk.prototype.doneWriteRemoteSectors = function(sURLName, sURLData, nErrorCode, sectorInfo)
            {
                var iCylinder = sectorInfo[0];
                var iHead = sectorInfo[1];
                var iSector = sectorInfo[2];
                var nSectors = sectorInfo[3];
                var fAsync = sectorInfo[4];
                this.fWriteInProgress = false;
            
                if (iCylinder >= 0 && iCylinder < this.aDiskData.length && iHead >= 0 && iHead < this.aDiskData[iCylinder].length) {
                    for (var i = iSector - 1; nSectors-- > 0 && i >= 0 && i < this.aDiskData[iCylinder][iHead].length; i++) {
                        var sector = this.aDiskData[iCylinder][iHead][i];
            
                        if (!nErrorCode) {
                            if (!sector.fDirty) {
                                sector.iModify = sector.cModify = 0;
                            }
                        } else {
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("doneWriteRemoteSectors(CHS=" + iCylinder + ':' + iHead + ':' + sector['sector'] + ") returned error " + nErrorCode);
                            }
                            this.queueDirtySector(sector, false);
                        }
                    }
                }
                if (fAsync) this.updateWriteTimer();
            };
            
            /**
             * disconnectRemoteDisk()
             *
             * This is called by our powerDown() notification handler.  If fRemote is true, we issue the disconnect
             * request and then immediately set fRemote to false; we don't wait for (or test) the response.
             *
             * @this {Disk}
             */
            Disk.prototype.disconnectRemoteDisk = function()
            {
                if (this.fRemote) {
                    var sParms = DiskAPI.QUERY.ACTION + '=' + DiskAPI.ACTION.CLOSE;
                    sParms += '&' + DiskAPI.QUERY.VOLUME + '=' + this.sDiskPath;
                    sParms += '&' + DiskAPI.QUERY.MACHINE + '=' + this.controller.getMachineID();
                    sParms += '&' + DiskAPI.QUERY.USER + '=' + this.controller.getUserID();
                    var sDiskURL = web.getHost() + DiskAPI.ENDPOINT + '?' + sParms;
                    web.loadResource(sDiskURL, true);
                    this.fRemote = false;
                }
            };
            
            /**
             * queueDirtySector(sector, fAsync)
             *
             * Mark the specified sector as dirty, add it to the queue (aDirtySectors) if not already added,
             * and establish a timeout handler (findDirtySectors) if not already established.
             *
             * A freshly dirtied sector should sit in the queue for a short period of time (eg, 2 seconds)
             * before we attempt to write it; that is, a REMOTE_WRITE_DELAY timer should start ticking again
             * for any sector that is rewritten.  However, there will be exceptions; for example, when a sector
             * is finally written, we want to take advantage of the write request to write any additional dirty
             * sectors that follow it, even if those additional sectors were written less than 2 seconds ago.
             *
             * @param {Object} sector
             * @param {boolean} fAsync (true to update write timer, false to not)
             * @return {boolean} true if write timer set, false if not
             */
            Disk.prototype.queueDirtySector = function(sector, fAsync)
            {
                sector.fDirty = true;
            
                var j = this.aDirtySectors.indexOf(sector);
                if (j >= 0) {
                    this.aDirtySectors.splice(j, 1);
                    this.aDirtyTimestamps.splice(j, 1);
                }
                this.aDirtySectors.push(sector);
                this.aDirtyTimestamps.push(usr.getTime());
            
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("queueDirtySector(CHS=" + sector.iCylinder + ':' + sector.iHead + ':' + sector['sector'] + "): " + this.aDirtySectors.length + " dirty");
                }
            
                return fAsync && this.updateWriteTimer();
            };
            
            /**
             * updateWriteTimer()
             *
             * If a timer is already active, make sure it's still valid (ie, the time the timer is scheduled to fire is
             * >= the timestamp of the next dirty sector + REMOTE_WRITE_DELAY); if not, cancel the timer and start a new one.
             *
             * @return {boolean} true if write timer set, false if not
             */
            Disk.prototype.updateWriteTimer = function()
            {
                if (this.aDirtySectors.length) {
                    var msWrite = this.aDirtyTimestamps[0] + Disk.REMOTE_WRITE_DELAY;
                    if (this.timerWrite) {
                        if (this.msTimerWrite < msWrite) {
                            clearTimeout(this.timerWrite);
                            this.timerWrite = null;
                        }
                    }
                    if (!this.timerWrite) {
                        var obj = this;
                        var msNow = usr.getTime();
                        var msDelay = msWrite - msNow;
                        if (msDelay < 0) msDelay = 0;
                        if (msDelay > Disk.REMOTE_WRITE_DELAY) msDelay = Disk.REMOTE_WRITE_DELAY;
                        this.timerWrite = setTimeout(function() {
                            obj.findDirtySectors(true);
                        }, msDelay);
                        this.msTimerWrite = msNow + msDelay;
                    }
                } else {
                    if (this.timerWrite) {
                        clearTimeout(this.timerWrite);
                        this.timerWrite = null;
                    }
                }
                return this.timerWrite !== null;
            };
            
            /**
             * findDirtySectors(fAsync)
             *
             * @param {boolean} fAsync is true if this function is being called asynchronously, false otherwise
             * @return {boolean|Array} false if no dirty sectors, otherwise true (or a response array if not fAsync)
             *
             * Starting with the oldest dirty sector in the queue (aDirtySectors), determine the longest contiguous stretch of
             * dirty sectors (currently limited to the same track), mark them all as not dirty, and then call writeRemoteSectors().
             */
            Disk.prototype.findDirtySectors = function(fAsync)
            {
                if (fAsync) {
                    this.timerWrite = null;
                }
                var sector = this.aDirtySectors[0];
                if (sector) {
                    var iCylinder = sector.iCylinder;
                    var iHead = sector.iHead;
                    var iSector = sector['sector'];
                    var nSectors = 0;
                    var abSectors = [];
                    for (var i = iSector - 1; i < this.aDiskData[iCylinder][iHead].length; i++) {
                        var sectorNext = this.aDiskData[iCylinder][iHead][i];
                        if (!sectorNext.fDirty) break;
                        var j = this.aDirtySectors.indexOf(sectorNext);
                        this.assert(j >= 0, "findDirtySectors(CHS=" + iCylinder + ':' + iHead + ':' + sectorNext['sector'] + ") missing from aDirtySectors");
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("findDirtySectors(CHS=" + iCylinder + ':' + iHead + ':' + sectorNext['sector'] + ")");
                        }
                        this.aDirtySectors.splice(j, 1);
                        this.aDirtyTimestamps.splice(j, 1);
                        abSectors = abSectors.concat(this.toBytes(sectorNext));
                        sectorNext.fDirty = false;
                        nSectors++;
                    }
                    this.assert(!!abSectors.length, "no data for dirty sector (CHS=" + iCylinder + ':' + iHead + ':' + sector['sector'] + ")");
                    var response = this.writeRemoteSectors(iCylinder, iHead, iSector, nSectors, abSectors, fAsync);
                    return fAsync || response;
                }
                return false;
            };
            
            /**
             * info()
             *
             * @this {Disk}
             * @return {Array} containing: [nCylinders, nHeads, nSectorsPerTrack, nBytesPerSector]
             */
            Disk.prototype.info = function()
            {
                if (!this.aDiskData.length) {
                    return [0, 0, 0, 0];
                }
                return [this.aDiskData.length, this.aDiskData[0].length, this.aDiskData[0][0].length, this.aDiskData[0][0][0]['length']];
            };
            
            /**
             * seek(iCylinder, iHead, iSector, fWrite, done)
             *
             * TODO: There's some dodgy code in seek() that allows floppy images to be dynamically
             * reconfigured with more heads and/or sectors/track, and it does so by peeking at more drive
             * properties.  That code used to be in the FDC component, where it was perfectly reasonable
             * to access those properties.  We need a cleaner interface back to the drive, similar to the
             * info() interface we provide to the controller.
             *
             * Whether or not the "dynamic reconfiguration" feature itself is perfectly reasonable is,
             * of course, a separate question.
             *
             * @this {Disk}
             * @param {number} iCylinder
             * @param {number} iHead
             * @param {number} iSector
             * @param {boolean} [fWrite]
             * @param {function(Object,boolean)} [done]
             * @return {Object|null} is the requested sector, or null if not found (or not available yet)
             */
            Disk.prototype.seek = function(iCylinder, iHead, iSector, fWrite, done)
            {
                var sector = null;
                var drive = this.drive;
                var cylinder = this.aDiskData[iCylinder];
                if (cylinder) {
                    var i;
                    var track = cylinder[iHead];
                    /*
                     * The following code allows a single-sided diskette image to be reformatted (ie, "expanded")
                     * as a double-sided image, provided the drive has more than one head (see drive.nHeads).
                     */
                    if (!track && drive.bFormatting && iHead < drive.nHeads) {
                        track = cylinder[iHead] = new Array(drive.bSectorEnd);
                        for (i = 0; i < track.length; i++) {
                            track[i] = this.initSector(null, iCylinder, iHead, i + 1, drive.nBytes, 0);
                        }
                    }
                    if (track) {
                        for (i = 0; i < track.length; i++) {
                            if (track[i] && track[i]['sector'] == iSector) {
                                /*
                                 * If the sector's pattern is null, then this sector's true contents have not yet
                                 * been fetched from the server.
                                 */
                                sector = track[i];
                                if (sector['pattern'] === null) {
                                    if (fWrite) {
                                        /*
                                         * Optimization: if the caller has explicitly told us that they're about to WRITE to the
                                         * sector, then we shouldn't need to read it from the server; assume a zero pattern and return.
                                         */
                                        sector['pattern'] = 0;
                                    } else {
                                        var nSectors = 1;
                                        /*
                                         * We know we need to read at least 1 sector, but let's count the number of trailing sectors
                                         * on the same track that may also be required.
                                         */
                                        while (++i < track.length) {
                                            if (track[i]['pattern'] === null) nSectors++;
                                        }
                                        this.readRemoteSectors(iCylinder, iHead, iSector, nSectors, done != null, function onReadRemoteComplete(err, fAsync) {
                                            if (err) sector = null;
                                            if (done) { //noinspection JSReferencingMutableVariableFromClosure
                                                done(sector, fAsync);
                                            }
                                        });
                                        return done? null : sector;
                                    }
                                }
                                break;
                            }
                        }
                        /*
                         * The following code allows an 8-sector track to be reformatted (ie, "expanded") as a 9-sector track.
                         */
                        if (!sector && drive.bFormatting && drive.bSector == 9) {
                            sector = track[i] = this.initSector(null, iCylinder, iHead, drive.bSector, drive.nBytes, 0);
                        }
                    }
                }
                if (done) done(sector, false);
                return sector;
            };
            
            /**
             * fill(sector, ab, off)
             *
             * @param {Object} sector
             * @param {*} ab (technically, this should be typed as Array.<number> but I'm having trouble coercing JSON.parse() to that)
             * @param {number} off
             */
            Disk.prototype.fill = function(sector, ab, off)
            {
                var cdw = sector['length'] >> 2;
                var adw = new Array(cdw);
                for (var idw = 0; idw < cdw; idw++) {
                    adw[idw] = ab[off] | (ab[off + 1] << 8) | (ab[off + 2] << 16) | (ab[off + 3] << 24);
                    off += 4;
                }
                sector['data'] = adw;
                /*
                 * TODO: Consider taking this opportunity to shrink 'data' down by the number of dwords at the end of the buffer that
                 * contain the same pattern, and setting 'pattern' accordingly.
                 */
            };
            
            /**
             * toBytes(sector)
             *
             * @param {Object} sector
             * @return {Array.<number>} is an array of bytes
             */
            Disk.prototype.toBytes = function(sector)
            {
                var cb = sector['length'];
                var ab = new Array(cb);
                var ib = 0;
                var cdw = cb >> 2;
                var adw = sector['data'];
                var dwPattern = sector['pattern'];
                for (var idw = 0; idw < cdw; idw++) {
                    var dw = (idw < adw.length? adw[idw] : dwPattern);
                    ab[ib++] = dw & 0xff;
                    ab[ib++] = (dw >> 8) & 0xff;
                    ab[ib++] = (dw >> 16) & 0xff;
                    ab[ib++] = (dw >> 24) & 0xff;
                }
                return ab;
            };
            
            /**
             * read(sector, ibSector, fCompare)
             *
             * @this {Disk}
             * @param {Object} sector (returned from a previous seek)
             * @param {number} ibSector a byte index within the given sector
             * @param {boolean} [fCompare] is true if this write-compare read
             * @return {number} the specified (unsigned) byte, or -1 if no more data in the sector
             */
            Disk.prototype.read = function(sector, ibSector, fCompare)
            {
                var b = -1;
                if (sector) {
                    if (DEBUG && !ibSector && !fCompare && this.messageEnabled()) {
                        this.printMessage('read("' + this.sDiskFile + '",CHS=' + sector.iCylinder + ':' + sector.iHead + ':' + sector['sector'] + ')');
                    }
                    if (ibSector < sector['length']) {
                        var adw = sector['data'];
                        var idw = ibSector >> 2;
                        var dw = (idw < adw.length ? adw[idw] : sector['pattern']);
                        b = ((dw >> ((ibSector & 0x3) << 3)) & 0xff);
                    }
                }
                return b;
            };
            
            /**
             * write(sector, ibSector, b)
             *
             * @this {Disk}
             * @param {Object} sector (returned from a previous seek)
             * @param {number} ibSector a byte index within the given sector
             * @param {number} b the byte value to write
             * @return {boolean|null} true if write successful, false if write-protected, null if out of bounds
             */
            Disk.prototype.write = function(sector, ibSector, b)
            {
                if (this.fWriteProtected)
                    return false;
            
                if (DEBUG && !ibSector && this.messageEnabled()) {
                    this.printMessage('write("' + this.sDiskFile + '",CHS=' + sector.iCylinder + ':' + sector.iHead + ':' + sector['sector'] + ')');
                }
            
                if (ibSector < sector['length']) {
                    if (b != this.read(sector, ibSector, true)) {
                        var adw = sector['data'];
                        var dwPattern = sector['pattern'];
                        var idw = ibSector >> 2;
                        var nShift = (ibSector & 0x3) << 3;
                        /*
                         * Ensure every byte up to the specified byte is properly initialized.
                         */
                        for (var i = adw.length; i <= idw; i++) adw[i] = dwPattern;
            
                        if (!sector.cModify) {
                            sector.iModify = idw;
                            sector.cModify = 1;
                        } else if (idw < sector.iModify) {
                            sector.cModify += sector.iModify - idw;
                            sector.iModify = idw;
                        } else if (idw >= sector.iModify + sector.cModify) {
                            sector.cModify += idw - (sector.iModify + sector.cModify) + 1;
                        }
                        adw[idw] = (adw[idw] & ~(0xff << nShift)) | (b << nShift);
            
                        if (this.fRemote) this.queueDirtySector(sector, true);
                    }
                    return true;
                }
                return null;
            };
            
            /**
             * save()
             *
             * The first array entry contains some disk information:
             *
             *      [sDiskPath, dwChecksum, nCylinders, nHeads, nSectors, cbSector]
             *
             * Each subsequent entry in the returned array contains the following:
             *
             *      [iCylinder, iHead, iSector, iModify, [...]]
             *
             * where [...] is an array of modified dword(s) in the corresponding sector.
             *
             * @this {Disk}
             * @return {Array} of modified sectors
             */
            Disk.prototype.save = function()
            {
                var i = 0;
                var deltas = [];
                deltas[i++] = [this.sDiskPath, this.dwChecksum, this.nCylinders, this.nHeads, this.nSectors, this.cbSector];
                if (!this.fRemote && !this.fWriteProtected) {
                    var aDiskData = this.aDiskData;
                    for (var iCylinder = 0; iCylinder < aDiskData.length; iCylinder++) {
                        for (var iHead = 0; iHead < aDiskData[iCylinder].length; iHead++) {
                            for (var iSector = 0; iSector < aDiskData[iCylinder][iHead].length; iSector++) {
                                var sector = aDiskData[iCylinder][iHead][iSector];
                                if (sector && sector.cModify) {
                                    var mods = [], n = 0;
                                    var iModify = sector.iModify, iModifyLimit = sector.iModify + sector.cModify;
                                    while (iModify < iModifyLimit) {
                                        mods[n++] = sector['data'][iModify++];
                                    }
                                    deltas[i++] = [iCylinder, iHead, iSector, sector.iModify, mods];
                                }
                            }
                        }
                    }
                }
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage('save("' + this.sDiskName + '"): saved ' + (deltas.length - 1) + ' change(s)');
                }
                return deltas;
            };
            
            /**
             * restore(deltas)
             *
             * The first array entry contains some disk information:
             *
             *      [sDiskPath, dwChecksum, nCylinders, nHeads, nSectors, cbSector]
             *
             * Each subsequent entry in the supplied array contains the following:
             *
             *      [iCylinder, iHead, iSector, iModify, [...]]
             *
             * where [...] is an array of modified dword(s) in the corresponding sector.
             *
             * @this {Disk}
             * @param {Array} deltas
             * @return {number} 0 if no changes applied, -1 if an error occurred, otherwise the number of sectors modified
             */
            Disk.prototype.restore = function(deltas)
            {
                /*
                 * If deltas is undefined, that's not necessarily an error;  the controller may simply be (re)initializing
                 * itself (although neither controller should be calling restore() under those conditions anymore).
                 */
                var nChanges = 0;
                var sReason = "unsupported restore format";
                /*
                 * I originally added a check for aDiskData here on the assumption that if there was an error loading
                 * a disk image, we will have already notified the user, so any additional errors about differing checksums,
                 * failure to restore the disk state, etc, would just be annoying.  HOWEVER, HDC will create an empty disk
                 * image if its initialization code discovers that no disk was loaded earlier (see verifyDrive).  So while
                 * checking aDiskData is still a good idea, be aware that it won't necessarily avoid redundant error messages
                 * (at least in the case of HDC).
                 */
                if (deltas && deltas.length > 0) {
            
                    var i = 0;
                    var aDiskInfo = deltas[i++];
            
                    if (aDiskInfo && aDiskInfo.length >= 2) {
                        /*
                         * Before getting to the checksum, we have to deal with a new situation: restoring an uninitialized
                         * disk image from a complete set of deltas.  And that is only possible if the disk was saved with the
                         * original disk geometry.
                         */
                        if (!this.aDiskData.length && aDiskInfo.length >= 6) {
                            this.create(DiskAPI.MODE.LOCAL, aDiskInfo[2], aDiskInfo[3], aDiskInfo[4], aDiskInfo[5]);
                            /*
                             * TODO: Consider setting a flag here that we can check at the end of the restore() function
                             * that indicates we should recalculate dwChecksum, because we currently have an inconsistency
                             * between local disks that are mounted via build() and the same disks that are "remounted"
                             * later by this code; the former has the correct checksum, while the latter has a null checksum.
                             *
                             * As you can see below, we currently deal with this by simply ignoring null checksums....
                             */
                        }
                        /*
                         * v1.01 failed to indicate an error if either one of these failure conditions occurred.  Although maybe that's
                         * just as well, since v1.01 also failed to properly deal with situations where the user mounted different diskette(s)
                         * prior to exiting (hopefully fixed in v1.02).
                         */
                        else if (aDiskInfo[1] != null && this.dwChecksum != null && aDiskInfo[1] != this.dwChecksum) {
                            sReason = "original checksum (" + aDiskInfo[1] + ") differs from current checksum (" + this.dwChecksum + ")";
                            nChanges = -2;
                        }
                        /*
                         * Checksum is more important than disk path, and for now, I want the flexibility to move disk images.
                         *
                        else if (aDiskInfo[0] != this.sDiskPath) {
                            sReason = "original path '" + aDiskInfo[0] + "' differs from current path '" + this.sDiskPath + "'";
                            nChanges = -1;
                        }
                         */
                    }
            
                    if (!this.aDiskData.length) nChanges = -1;
            
                    while (i < deltas.length && nChanges >= 0) {
                        var m = 0;
                        var mod = deltas[i++];
                        var iCylinder = mod[m++];
                        var iHead = mod[m++];
                        var iSector = mod[m++];
                        /*
                         * Note the buried test for write-protection.  Yes, an invariant condition should be tested
                         * outside the loop, not inside, but (a) it's a trivial test, (b) the test should never fail
                         * because save() should never generate any mods for a write-protected disk, and (c) it
                         * centralizes all the failure conditions we're currently checking (which, admittedly, ain't much).
                         */
                        if (iCylinder >= this.aDiskData.length || iHead >= this.aDiskData[iCylinder].length || iSector >= this.aDiskData[iCylinder][iHead].length) {
                            sReason = "sector (CHS=" + iCylinder + ':' + iHead + ':' + iSector + ") out of range (" + nChanges + " changes applied)";
                            nChanges = -1;
                            break;
                        }
                        if (this.fWriteProtected) {
                            sReason = "unable to modify write-protected disk";
                            nChanges = -1;
                            break;
                        }
                        var iModify = mod[m++];
                        var mods = mod[m++];
                        var iModifyLimit = iModify + mods.length;
                        var sector = this.aDiskData[iCylinder][iHead][iSector];
                        if (!sector) continue;
                        /*
                         * Since write() now deals with empty/partial sectors, we no longer need to completely "inflate" the sector prior
                         * to applying modifications.  So let's just make sure that the sector is "inflated" up to iModify.
                         */
                        var idw = sector['data'].length;
                        while (idw < iModify) {
                            sector['data'][idw++] = sector['pattern'];
                        }
                        var n = 0;
                        sector.iModify = iModify;
                        sector.cModify = mods.length;
                        while (iModify < iModifyLimit) {
                            sector['data'][iModify++] = mods[n++];
                        }
                        nChanges++;
                    }
                }
            
                if (nChanges < 0) {
                    /*
                     * We're suppressing checksum messages for the general public for now....
                     */
                    if (DEBUG || nChanges != -2) {
                        this.controller.notice("Unable to restore disk '" + this.sDiskName + ": " + sReason);
                    }
                } else {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage('restore("' + this.sDiskName + '"): restored ' + nChanges + ' change(s)');
                    }
                }
                return nChanges;
            };
            
            /**
             * toJSON()
             *
             * We perform some RegExp massaging on the JSON data to eliminate unnecessary properties
             * (eg, 'length' values of 512, 'pattern' values of 0, quotes around the property names, etc).
             * Sectors that were initially compressed should remain compressed unless/until they were modified.
             *
             * TODO: Check sectors (or at least modified sectors) to see if they can be recompressed.
             *
             * @this {Disk}
             * @return {string} containing the entire disk image as JSON-encoded data
             */
            Disk.prototype.toJSON = function()
            {
                var s = JSON.stringify(this.aDiskData);
                s = s.replace(/,"length":512/gm, "").replace(/,"pattern":0/gm, "");
                /*
                 * I don't really want to strip quotes from disk image property names, since I would have to put them
                 * back again during mount() -- or whenever JSON.parse() is used instead of eval().  But I still remove
                 * them temporarily, so that any remaining property names (eg, "iModify", "cModify", "fDirty") can
                 * easily be stripped out, by virtue of their being the only quoted properties left.  We then "requote"
                 * all the property names that remain.
                 */
                s = s.replace(/"(sector|length|data|pattern)":/gm, "$1:");
                /*
                 * The next line will remove any other numeric or boolean properties that were added at runtime, although
                 * they may have completely different ("minified") names if the code has been compiled.
                 */
                s = s.replace(/,"[^"]*":([0-9]+|true|false)/gm, "");
                s = s.replace(/(sector|length|data|pattern):/gm, "\"$1\":");
                return s;
            };
            
            /**
             * dumpSector(sector, pba, sDesc)
             *
             * @param {Object} sector (returned from a previous seek)
             * @param {number} [pba]
             * @param {string} [sDesc]
             * @return {string}
             */
            Disk.prototype.dumpSector = function(sector, pba, sDesc)
            {
                var sDump = "";
                if (DEBUG && sector) {
                    if (pba != null) sDump += "sector " + pba + (sDesc? (" for " + sDesc) : "") + ':';
                    var sBytes = "", sChars = "";
                    var cbSector = sector['length'];
                    var cdwData = sector['data'].length;
                    var dw = 0;
                    for (var i = 0; i < cbSector; i++) {
                        if ((i % 16) === 0) {
                            if (sDump) sDump += sBytes + ' ' + sChars + '\n';
                            sDump += str.toHex(i, 4) + ": ";
                            sBytes = sChars = "";
                        }
                        if ((i % 4) === 0) {
                            var idw = i >> 2;
                            dw = (idw < cdwData? sector['data'][idw] : sector['pattern']);
                        }
                        var b = dw & 0xff;
                        dw >>>= 8;
                        sBytes += str.toHex(b, 2) + (i % 16 == 7? "-" : " ");
                        sChars += (b >= 32 && b < 128? String.fromCharCode(b) : ".");
                    }
                    if (sBytes) sDump += sBytes + ' ' + sChars;
                }
                return sDump;
            };
            
            if (typeof module !== 'undefined') module.exports = Disk;
            
          • fdc.js
            /**
             * @fileoverview Implements the PCjs Floppy Drive Controller (FDC) component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Aug-09
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var DiskAPI     = require("../../shared/lib/diskapi");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var ChipSet     = require("./chipset");
                var Disk        = require("./disk");
                var Computer    = require("./computer");
                var State       = require("./state");
            }
            
            /*
             * FDC Terms (see FDC.TERMS)
             *
             *      C       Cylinder Number         the current or selected cylinder number
             *
             *      D       Data                    the data pattern to be written to a sector
             *
             *      DS      Drive Select            the selected driver number encoded the same as bits 0 and 1 of the Digital Output
             *                                      Register (DOR); eg, DS0, DS1, DS2, or DS3
             *
             *      DTL     Data Length             when N is 00, DTL is the data length to be read from or written to a sector
             *
             *      EOT     End Of Track            the final sector number on a cylinder
             *
             *      GPL     Gap Length              the length of gap 3 (spacing between sectors excluding the VCO synchronous field)
             *
             *      H       Head Address            the head number, either 0 or 1, as specified in the ID field
             *
             *      HD      Head                    the selected head number, 0 or 1 (H = HD in all command words)
             *
             *      HLT     Head Load Time          the head load time in the selected drive (2 to 256 milliseconds in 2-millisecond
             *                                      increments for the 1.2M-byte drive and 4 to 512 milliseconds in 4 millisecond increments
             *                                      for the 320K-byte drive)
             *
             *      HUT     Head Unload Time        the head unload time after a read or write operation (0 to 240 milliseconds in
             *                                      16-millisecond increments for the 1.2M-byte drive and 0 to 480 milliseconds in
             *                                      32-millisecond increments for the 320K-byte drive)
             *
             *      MF      FM or MFM Mode          0 selects FM mode and 1 selects MFM (MFM is selected only if it is implemented)
             *
             *      MT      Multitrack              1 selects multitrack operation (both HD0 and HD1 will be read or written)
             *
             *      N       Number                  the number of data bytes written in a sector
             *
             *      NCN     New Cylinder Number     the new cylinder number for a SEEK operation
             *
             *      ND      Non-Data Mode           indicates an operation in the non-data mode
             *
             *      PCN     Present Cylinder Number the cylinder number at the completion of a SENSE INTERRUPT STATUS command
             *                                      (present position of the head)
             *
             *      R       Record                  the sector number to be read or written
             *
             *      SC      Sectors Per Cylinder    the number of sectors per cylinder
             *
             *      SK      Skip                    this stands for skip deleted-data address mark
             *
             *      SRT     Stepping Rate           this 4 bit byte indicates the stepping rate for the diskette drive as follows:
             *                                      1.2M-Byte Diskette Drive: 1111=1ms, 1110=2ms, 1101=3ms
             *                                      320K-Byte Diskette Drive: 1111=2ms, 1110=4ms, 1101=6ms
             *
             *      STP     STP Scan Test           if STP is 1, the data in contiguous sectors is compared with the data sent
             *                                      by the processor during a scan operation; if STP is 2, then alternate sections
             *                                      are read and compared
             */
            
            /**
             * FDC(parmsFDC)
             *
             * The FDC component simulates a NEC µPD765A or Intel 8272A compatible floppy disk controller, and has one
             * component-specific property:
             *
             *      autoMount: one or more JSON-encoded objects, each containing 'name' and 'path' properties
             *
             * Regarding early diskette drives: the IBM PC Model 5150 originally shipped with single-sided drives,
             * and therefore supported only 160Kb diskettes.  That's the only diskette format PC-DOS 1.00 supported, too.
             *
             * At some point, 5150's started shipping with double-sided drives, but I'm not sure whether the ROMs changed;
             * they probably did NOT change, because the original ROM BIOS already supported drives with multiple heads.
             * However, what the ROM BIOS did NOT do was provide any indication of drive type, which as far as I can tell,
             * meant you had to simply read/write/format tracks with the second head and check for errors.
             *
             * Presumably at the same time double-sided drives started shipping, PC-DOS 1.10 shipped, which added
             * support for 320Kb diskettes.  And the FORMAT command changed as well, defaulting to a double-sided format
             * operation UNLESS you specified "FORMAT /1".  If I run PC-DOS 1.10 and try to simulate a single-sided drive
             * (by setting drive.nHeads = 1 in initDrive), FORMAT will balk with "Track 0 bad - disk unusable".  I have to
             * wonder if everyone with single-sided drives who upgraded to PC-DOS 1.10 also got that error, forcing them
             * to always specify "FORMAT /1", or if I'm doing something wrong wrt single-sided drive simulation.
             *
             * I've noticed that if I turn FDC messages on ("m fdc on"), and then run "FORMAT B:/1", the command still
             * tries to format head 1/track 0, followed by head 0/track 0, and then the FDC is reset, and the format operation
             * proceeds with only head 0 for all tracks 0 through 39.  FORMAT successfully creates a 160Kb single-sided diskette,
             * but why it also tries to initially format track 0 using the second head remains a bit of a mystery.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsFDC
             */
            function FDC(parmsFDC) {
                /*
                 * TODO: Indicate the type of diskette image being loaded (this might help folks understand what's going
                 * on when they try to load a diskette image that's larger than what the selected operating system supports).
                 */
                Component.call(this, "FDC", parmsFDC, FDC, Messages.FDC);
            
                this['dmaRead'] = this.dmaRead;
                this['dmaWrite'] = this.dmaWrite;
                this['dmaFormat'] = this.dmaFormat;
            
                this.configMount = null;
                if (parmsFDC['autoMount']) {
                    this.configMount = parmsFDC['autoMount'];
                    if (typeof this.configMount == "string") {
                        try {
                            /*
                             * The most likely source of any exception will be right here, where we're parsing
                             * the JSON-encoded diskette data.
                             */
                            this.configMount = eval("(" + parmsFDC['autoMount'] + ")");
                        } catch (e) {
                            Component.error("FDC auto-mount error: " + e.message + " (" + parmsFDC['autoMount'] + ")");
                            this.configMount = null;
                        }
                    }
                }
            
                /*
                 * The following array keeps track of every disk image we've ever mounted.  Each entry in the
                 * array is another array whose elements are:
                 *
                 *      [0]: name of disk
                 *      [1]: path of disk
                 *      [2]: array of deltas, uninitialized until the disk is unmounted and/or all state is saved
                 *
                 * See functions addDiskHistory() and updateDiskHistory().
                 */
                this.aDiskHistory = [];
            
                /*
                 * Support for local disk images is currently limited to desktop browsers with FileReader support;
                 * when this flag is set, setBinding() allows local disk bindings and informs initBus() to update the
                 * "listDisks" binding accordingly.
                 */
                this.fLocalDisks = (!web.isMobile() && window && 'FileReader' in window);
            
                /*
                 * The remainder of FDC initialization now takes place in our initBus() handler, largely because we
                 * want initController() to have access to the ChipSet component, so that it can query switches and/or CMOS
                 * settings that determine the number of drives and their characteristics (eg, 40-track vs. 80-track),
                 * which it can then pass on to initDrive().
                 */
            }
            
            Component.subclass(FDC);
            
            FDC.DEFAULT_DRIVE_NAME = "Floppy Drive";
            
            if (DEBUG) {
                FDC.TERMS = {
                    C:   "C",       // Cylinder Number
                    D:   "D",       // Data (eg, pattern to be written to a sector)
                    H:   "H",       // Head Address
                    R:   "R",       // Record (ie, sector number to be read or written)
                    N:   "N",       // Number (ie, number of data bytes to write)
                    DS:  "DS",      // Drive Select
                    SC:  "SC",      // Sectors per Cylinder
                    DTL: "DTL",     // Data Length
                    EOT: "EOT",     // End of Track
                    GPL: "GPL",     // Gap Length
                    HLT: "HLT",     // Head Load Time
                    NCN: "NCN",     // New Cylinder Number
                    PCN: "PCN",     // Present Cylinder Number
                    SRT: "SRT",     // Stepping Rate
                    ST0: "ST0",     // Status Register 0
                    ST1: "ST1",     // Status Register 1
                    ST2: "ST2",     // Status Register 2
                    ST3: "ST3"      // Status Register 3
                };
            } else {
                FDC.TERMS = {};
            }
            
            /*
             * FDC Digital Output Register (DOR) (0x3F2, write-only)
             *
             * NOTE: Reportedly, a drive's MOTOR had to be ON before the drive could be selected; however, outFDCOutput() no
             * longer verifies that.  Also, motor start time for original drives was 500ms, but we make no attempt to simulate that.
             *
             * On the MODEL_5170 "PC AT Fixed Disk and Diskette Drive Adapter", this port is called the Digital Output Register
             * or DOR.  It uses the same bit definitions as the original FDC Output Register, except that only two diskette drives
             * are supported, hence bit 1 is always 0 (ie, FDC.REG_OUTPUT.DS2 and FDC.REG_OUTPUT.DS3 are not supported) and bits
             * 6 and 7 are unused (FDC.REG_OUTPUT.MOTOR_D2 and FDC.REG_OUTPUT.MOTOR_D3 are not supported).
             */
            FDC.REG_OUTPUT = {
                PORT:      0x3F2,
                DS:         0x03,   // drive select bits
                DS0:        0x00,
                DS1:        0x01,
                DS2:        0x02,   // reserved on the MODEL_5170
                DS3:        0x03,   // reserved on the MODEL_5170
                ENABLE:     0x04,   // clearing this bit resets the FDC
                INT_ENABLE: 0x08,   // enables both FDC and DMA (Channel 2) interrupt requests (IRQ 6)
                MOTOR_D0:   0x10,
                MOTOR_D1:   0x20,
                MOTOR_D2:   0x40,   // reserved on the MODEL_5170
                MOTOR_D3:   0x80    // reserved on the MODEL_5170
            };
            
            /*
             * FDC Main Status Register (0x3F4, read-only)
             *
             * On the MODEL_5170 "PC AT Fixed Disk and Diskette Drive Adapter", bits 2 and 3 are reserved, since that adapter
             * supported a maximum of two diskette drives.
             */
            FDC.REG_STATUS = {
                PORT:      0x3F4,
                BUSY_A:     0x01,
                BUSY_B:     0x02,
                BUSY_C:     0x04,   // reserved on the MODEL_5170
                BUSY_D:     0x08,   // reserved on the MODEL_5170
                BUSY:       0x10,   // a read or write command is in progress
                NON_DMA:    0x20,   // FDC is in non-DMA mode
                READ_DATA:  0x40,   // transfer is from FDC Data Register to processor (if clear, then transfer is from processor to the FDC Data Register)
                RQM:        0x80    // indicates FDC Data Register is ready to send or receive data to or from the processor (Request for Master)
            };
            
            /*
             * FDC Data Register (0x3F5, read-write)
             */
            FDC.REG_DATA = {
                PORT:      0x3F5,
                /*
                 * FDC Commands
                 *
                 * NOTE: FDC command bytes need to be masked with FDC.REG_DATA.CMD.MASK before comparing to the values below, since a
                 * number of commands use the following additional bits as follows:
                 *
                 *      SK (0x20): Skip Deleted Data Address Mark
                 *      MF (0x40): Modified Frequency Modulation (as opposed to FM or Frequency Modulation)
                 *      MT (0x80): multi-track operation (ie, data processed under both head 0 and head 1)
                 *
                 * We don't support MT (Multi-Track) operations at this time, and the MF and SK designations cannot be supported as long
                 * as our diskette images contain only the original data bytes without any formatting information.
                 */
                CMD: {
                    READ_TRACK:     0x02,
                    SPECIFY:        0x03,
                    SENSE_DRIVE:    0x04,
                    WRITE_DATA:     0x05,
                    READ_DATA:      0x06,
                    RECALIBRATE:    0x07,
                    SENSE_INT:      0x08,       // this command is used to clear the FDC interrupt following the clearing/setting of FDC.REG_OUTPUT.ENABLE
                    WRITE_DEL_DATA: 0x09,
                    READ_ID:        0x0A,
                    READ_DEL_DATA:  0x0C,
                    FORMAT_TRACK:   0x0D,
                    SEEK:           0x0F,
                    SCAN_EQUAL:     0x11,
                    SCAN_LO_EQUAL:  0x19,
                    SCAN_HI_EQUAL:  0x1D,
                    MASK:           0x1F,
                    SK:             0x20,       // SK (Skip Deleted Data Address Mark)
                    MF:             0x40,       // MF (Modified Frequency Modulation)
                    MT:             0x80        // MT (Multi-Track; ie, data under both heads will be processed)
                },
                /*
                 * FDC status/error results, generally assigned according to the corresponding ST0, ST1, ST2 or ST3 status bit.
                 *
                 * TODO: Determine when EQUIP_CHECK is *really* set; also, "77 step pulses" sounds suspiciously like a typo (it's not 79?)
                 */
                RES: {
                    NONE:           0x00000000, // ST0 (IC): Normal termination of command (NT)
                    NOT_READY:      0x00000008, // ST0 (NR): When the FDD is in the not-ready state and a read or write command is issued, this flag is set; if a read or write command is issued to side 1 of a single sided drive, then this flag is set
                    EQUIP_CHECK:    0x00000010, // ST0 (EC): If a fault signal is received from the FDD, or if the track 0 signal fails to occur after 77 step pulses (recalibrate command), then this flag is set
                    SEEK_END:       0x00000020, // ST0 (SE): When the FDC completes the Seek command, this flag is set to 1 (high)
                    INCOMPLETE:     0x00000040, // ST0 (IC): Abnormal termination of command (AT); execution of command was started, but was not successfully completed
                    RESET:          0x000000C0, // ST0 (IC): Abnormal termination because during command execution the ready signal from the drive changed state
                    INVALID:        0x00000080, // ST0 (IC): Invalid command issue (IC); command which was issued was never started
                    ST0:            0x000000FF,
                    NO_ID_MARK:     0x00000100, // ST1 (MA): If the FDC cannot detect the ID Address Mark, this flag is set; at the same time, the MD (Missing Address Mark in Data Field) of Status Register 2 is set
                    NOT_WRITABLE:   0x00000200, // ST1 (NW): During Execution of a Write Data, Write Deleted Data, or Format a Cylinder command, if the FDC detects a write protect signal from the FDD, then this flag is set
                    NO_DATA:        0x00000400, // ST1 (ND): FDC cannot find specified sector (or specified ID if READ_ID command)
                    DMA_OVERRUN:    0x00001000, // ST1 (OR): If the FDC is not serviced by the main systems during data transfers within a certain time interval, this flag is set
                    CRC_ERROR:      0x00002000, // ST1 (DE): When the FDC detects a CRC error in either the ID field or the data field, this flag is set
                    END_OF_CYL:     0x00008000, // ST1 (EN): When the FDC tries to access a sector beyond the final sector of a cylinder, this flag is set
                    ST1:            0x0000FF00,
                    NO_DATA_MARK:   0x00010000, // ST2 (MD): When data is read from the medium, if the FDC cannot find a Data Address Mark or Deleted Data Address Mark, then this flag is set
                    BAD_CYL:        0x00020000, // ST2 (BC): This bit is related to the ND bit, and when the contents of C on the medium are different from that stored in the ID Register, and the content of C is FF, then this flag is set
                    SCAN_FAILED:    0x00040000, // ST2 (SN): During execution of the Scan command, if the FDC cannot find a sector on the cylinder which meets the condition, then this flag is set
                    SCAN_EQUAL:     0x00080000, // ST2 (SH): During execution of the Scan command, if the condition of "equal" is satisfied, this flag is set
                    WRONG_CYL:      0x00100000, // ST2 (WC): This bit is related to the ND bit, and when the contents of C on the medium are different from that stored in the ID Register, this flag is set
                    DATA_FIELD:     0x00200000, // ST2 (DD): If the FDC detects a CRC error in the data, then this flag is set
                    STRL_MARK:      0x00400000, // ST2 (CM): During execution of the Read Data or Scan command, if the FDC encounters a sector which contains a Deleted Data Address Mark, this flag is set
                    ST2:            0x00FF0000,
                    DRIVE:          0x03000000, // ST3 (Ux): Status of the "Drive Select" signals from the diskette drive
                    HEAD:           0x04000000, // ST3 (HD): Status of the "Side Select" signal from the diskette drive
                    TWOSIDE:        0x08000000, // ST3 (TS): Status of the "Two Side" signal from the diskette drive
                    TRACK0:         0x10000000, // ST3 (T0): Status of the "Track 0" signal from the diskette drive
                    READY:          0x20000000, // ST3 (RY): Status of the "Ready" signal from the diskette drive
                    WRITEPROT:      0x40000000, // ST3 (WP): Status of the "Write Protect" signal from the diskette drive
                    FAULT:          0x80000000|0, // ST3 (FT): Status of the "Fault" signal from the diskette drive
                    ST3:            0xFF000000|0
                }
            };
            
            /*
             * FDC "Fixed Disk" Register (0x3F6, write-only)
             *
             * Since this register's functions are all specific to the Hard Disk Controller, see the HDC component for details.
             * The fact that this HDC register is in the middle of the FDC I/O port range is an oddity of the "HFCOMBO" controller.
             */
            
            /*
             * FDC Digital Input Register (0x3F7, read-only, MODEL_5170 only)
             *
             * Bit 7 indicates a diskette change (the MODEL_5170 introduced change-line support).  Bits 0-6 are for the selected
             * hard disk drive, so this port must be shared with the HDC; bits 0-6 are valid for 50 microseconds after a write to
             * the Drive Head Register.
             */
            FDC.REG_INPUT = {
                PORT:      0x3F7,
                DS0:        0x01,   // Drive Select 0
                DS1:        0x02,   // Drive Select 1
                HS0:        0x04,   // Head Select 0
                HS1:        0x08,   // Head Select 1
                HS2:        0x10,   // Head Select 2
                HS3:        0x20,   // Head Select 3
                WRITE_GATE: 0x40,   // Write Gate
                DISK_CHANGE:0x80    // Diskette Change
            };
            
            /*
             * FDC Diskette Control Register (0x3F7, write-only, MODEL_5170 only)
             *
             * Only bits 0-1 are used; bits 2-7 are reserved.
             */
            FDC.REG_CONTROL = {
                PORT:      0x3F7,
                RATE500K:   0x00,   // 500,000 bps
                RATE300K:   0x02,   // 300,000 bps
                RATE250K:   0x01,   // 250,000 bps
                RATEUNUSED: 0x03
            };
            
            /*
             * FDC Command Sequences
             *
             * For each command, cbReq indicates the total number of bytes in the command request sequence,
             * including the first (command) byte; cbRes indicates total number of bytes in the response sequence.
             */
            if (DEBUG) {
                FDC.CMDS = {
                    SPECIFY:      "SPECIFY",
                    SENSE_DRIVE:  "SENSE DRIVE",
                    WRITE_DATA:   "WRITE DATA",
                    READ_DATA:    "READ DATA",
                    RECALIBRATE:  "RECALIBRATE",
                    SENSE_INT:    "SENSE INTERRUPT",
                    READ_ID:      "READ ID",
                    FORMAT:       "FORMAT",
                    SEEK:         "SEEK"
                };
            } else {
                FDC.CMDS = {};
            }
            
            FDC.aCmdInfo = {
                0x03: {cbReq: 3, cbRes: 0, name: FDC.CMDS.SPECIFY},
                0x04: {cbReq: 2, cbRes: 1, name: FDC.CMDS.SENSE_DRIVE},
                0x05: {cbReq: 9, cbRes: 7, name: FDC.CMDS.WRITE_DATA},
                0x06: {cbReq: 9, cbRes: 7, name: FDC.CMDS.READ_DATA},
                0x07: {cbReq: 2, cbRes: 0, name: FDC.CMDS.RECALIBRATE},
                0x08: {cbReq: 1, cbRes: 2, name: FDC.CMDS.SENSE_INT},
                0x0A: {cbReq: 2, cbRes: 7, name: FDC.CMDS.READ_ID},
                0x0D: {cbReq: 6, cbRes: 7, name: FDC.CMDS.FORMAT},
                0x0F: {cbReq: 3, cbRes: 0, name: FDC.CMDS.SEEK}
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {FDC}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "listDisks")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            FDC.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                var fdc = this;
            
                switch (sBinding) {
            
                case "listDisks":
                    this.bindings[sBinding] = control;
            
                    control.onchange = function onChangeListDisks(event) {
                        var controlDesc = fdc.bindings["descDisk"];
                        var controlOption = control.options[control.selectedIndex];
                        if (controlDesc && controlOption) {
                            var dataValue = {};
                            var sValue = controlOption.getAttribute("data-value");
                            if (sValue) {
                                try {
                                    dataValue = eval("({" + sValue + "})");
                                } catch (e) {
                                    Component.error("FDC option error: " + e.message);
                                }
                            }
                            var sHTML = dataValue['desc'];
                            if (sHTML === undefined) sHTML = "";
                            var sHRef = dataValue['href'];
                            if (sHRef !== undefined) sHTML = "<a href=\"" + sHRef + "\" target=\"_blank\">" + sHTML + "</a>";
                            controlDesc.innerHTML = sHTML;
                        }
                    };
                    return true;
            
                case "descDisk":
                case "listDrives":
                    this.bindings[sBinding] = control;
                    /*
                     * I tried going with onclick instead of onchange, so that if you wanted to confirm what's
                     * loaded in a particular drive, you could click the drive control without having to change it.
                     * However, that doesn't seem to work for all browsers, so I've reverted to onchange.
                     */
                    control.onchange = function onChangeListDrives(event) {
                        var iDrive = str.parseInt(control.value, 10);
                        if (iDrive != null) fdc.displayDiskette(iDrive);
                    };
                    return true;
            
                case "loadDrive":
                    this.bindings[sBinding] = control;
                    control.onclick = function onClickLoadDrive(event) {
                        var controlDisks = fdc.bindings["listDisks"];
                        if (controlDisks) {
                            var sDisketteName = controlDisks.options[controlDisks.selectedIndex].text;
                            var sDiskettePath = controlDisks.value;
                            fdc.loadSelectedDrive(sDisketteName, sDiskettePath);
                        }
                    };
                    return true;
            
                case "mountDrive":
                    if (this.fLocalDisks) {
                        this.bindings[sBinding] = control;
                        /*
                         * Enable "Mount" button only if a file is actually selected
                         */
                        control.addEventListener('change', function() {
                            var fieldset = control.children[0];
                            var files = fieldset.children[0].files;
                            var submit = fieldset.children[1];
                            submit.disabled = !files.length;
                        });
            
                        control.onsubmit = function(event) {
                            var file = event.currentTarget[1].files[0];
                            if (file) {
                                var sDiskettePath = file.name;
                                var sDisketteName = str.getBaseName(sDiskettePath, true);
                                fdc.loadSelectedDrive(sDisketteName, sDiskettePath, file);
                            }
                            /*
                             * Prevent reloading of web page after form submission
                             */
                            return false;
                        };
                    }
                    else {
                        if (DEBUG) this.log("Local file support not available");
                        control.parentNode.removeChild(control);
                    }
                    return true;
            
                default:
                    break;
                }
                return false;
            };
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {FDC}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            FDC.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.cmp = cmp;
            
                this.chipset = cmp.getComponentByType("ChipSet");
            
                /*
                 * If we didn't need auto-mount support, we could defer controller initialization until we received a powerUp() notification,
                 * at which point reset() would call initController(), or restore() would restore the controller; in that case, all we'd need
                 * to do here is call setReady().
                 */
                this.initController();
            
                bus.addPortInputTable(this, FDC.aPortInput);
                bus.addPortOutputTable(this, FDC.aPortOutput);
            
                if (this.fLocalDisks) {
                    this.addDiskette("Local Disk", "?");
                }
                this.addDiskette("Remote Disk", "??");
            
                if (!this.autoMount()) this.setReady();
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {FDC}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            FDC.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data || !this.restore) {
                        this.reset();
                        if (this.cmp.fReload) {
                            /*
                             * If the computer's fReload flag is set, we're required to toss all currently
                             * loaded disks and remount all disks specified in the auto-mount configuration.
                             */
                            this.unloadAllDrives(true);
                            this.autoMount(true);
                        }
                    } else {
                        if (!this.restore(data)) return false;
                    }
                    /*
                     * Populate the HTML controls to match the actual (well, um, specified) number of floppy drives.
                     */
                    var controlDrives;
                    if ((controlDrives = this.bindings['listDrives'])) {
                        while (controlDrives.firstChild) {
                            controlDrives.removeChild(controlDrives.firstChild);
                        }
                        controlDrives.textContent = "";
                        for (var iDrive = 0; iDrive < this.nDrives; iDrive++) {
                            var controlOption = window.document.createElement("option");
                            controlOption['value'] = iDrive;
                            /*
                             * TODO: This conversion of drive number to drive letter, starting with A:, is very simplistic
                             * and will NOT match the drive mappings that DOS ultimately uses.  We'll need to spiff this up at
                             * some point.
                             */
                            controlOption.textContent = String.fromCharCode(0x41 + iDrive) + ":";
                            controlDrives.appendChild(controlOption);
                        }
                        if (this.nDrives > 0) {
                            controlDrives.value = "0";
                            this.displayDiskette(0);
                        }
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {FDC}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            FDC.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save? this.save() : true;
            };
            
            /**
             * reset()
             *
             * NOTE: initController() establishes the maximum possible number of drives, but it's not until
             * we interrogate the current SW1 settings that we will have an ACTUAL number of drives (nDrives),
             * at which point we can also update the contents of the "listDrives" HTML control, if any.
             *
             * @this {FDC}
             */
            FDC.prototype.reset = function()
            {
                /*
                 * NOTE: The controller is also initialized by the constructor, to assist with auto-mount support,
                 * so think about whether we can skip powerUp initialization.
                 */
                this.initController();
            };
            
            /**
             * save()
             *
             * This implements save support for the FDC component.
             *
             * @this {FDC}
             * @return {Object}
             */
            FDC.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, this.saveController());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the FDC component.
             *
             * @this {FDC}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             */
            FDC.prototype.restore = function(data)
            {
                return this.initController(data[0]);
            };
            
            /**
             * initController(data)
             *
             * @this {FDC}
             * @param {Array} [data]
             * @return {boolean} true if successful, false if failure
             */
            FDC.prototype.initController = function(data)
            {
                var i = 0, iDrive;
                var fSuccess = true;
            
                if (data === undefined) {
                    data = [0, 0, FDC.REG_STATUS.RQM, new Array(9), 0, 0, 0, []];
                }
            
                /*
                 * Selected drive (from regOutput), which can only be selected if its motor is on (see regOutput).
                 */
                this.iDrive = data[i++];
                i++;                        // unused slot (if reused, bias by +4, since it was formerly a unit #)
            
                /*
                 * Defaults to FDC.REG_STATUS.RQM set (ready for command) and FDC.REG_STATUS.READ_DATA clear (data direction
                 * is from processor to the FDC Data Register).
                 */
                this.regStatus = data[i++];
            
                /*
                 * There can be up to 9 command bytes, and 7 result bytes, so 9 data registers are sufficient for communicating
                 * in both directions (hence, the new Array(9) default above).
                 */
                this.regDataArray = data[i++];
            
                /*
                 * Determines the next data byte to be received.
                 */
                this.regDataIndex = data[i++];
            
                /*
                 * Determines the next data byte to be sent (internally, we use regDataIndex to read data bytes, up to this total).
                 */
                this.regDataTotal = data[i++];
                this.regOutput = data[i++];
                var dataDrives = data[i++];
            
                /*
                 * Initialize the disk history (if available) before initializing the drives, so that any disk deltas can be
                 * applied to disk images that are already loaded.
                 */
                var aDiskHistory = data[i++];
                if (aDiskHistory != null) this.aDiskHistory = aDiskHistory;
            
                if (this.aDrives === undefined) {
                    this.nDrives = 4;                       // default to the maximum number of drives
                    if (this.chipset) this.nDrives = this.chipset.getSWFloppyDrives();
                    /*
                     * I would prefer to allocate only nDrives, but as discussed in the handling of the FDC.REG_DATA.CMD.SENSE_INT
                     * command, we're faced with situations where the controller must respond to any drive in the range 0-3, regardless
                     * how many drives are actually installed.  We still rely upon nDrives to determine the number of drives displayed
                     * to the user, however.
                     */
                    this.aDrives = new Array(4);
                }
            
                for (iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    var drive = this.aDrives[iDrive];
                    if (drive === undefined) {
                        /*
                         * The first time each drive is initialized, we query its capacity (based on switches or CMOS) and set
                         * the drive's physical limits accordingly (ie, max tracks, max heads, and max sectors/track).
                         */
                        drive = this.aDrives[iDrive] = {};
                        var nKb = (this.chipset? this.chipset.getSWFloppyDriveSize(iDrive) : 0);
                        switch(nKb) {
                        case 160:
                        case 180:
                            drive.nHeads = 1;       // required for single-sided drives only (all others default to double-sided)
                            /* falls through */
                        case 320:
                        case 360:
                            /* falls through */
                        default:                    // drives that don't have a recognized capacity default to 360
                            drive.nCylinders = 40;
                            drive.nSectors = 9;     // drives capable of writing 8 sectors/track can also write 9 sectors/track
                            break;
                        case 720:
                            drive.nCylinders = 80;
                            drive.nSectors = 9;
                            break;
                        case 1200:
                            drive.nCylinders = 80;
                            drive.nSectors = 15;
                            break;
                        case 1440:
                            drive.nCylinders = 80;
                            drive.nSectors = 18;
                            break;
                        }
                    }
                    if (!this.initDrive(drive, iDrive, dataDrives[iDrive])) {
                        fSuccess = false;
                    }
                }
            
                /*
                 * regInput and regControl (port 0x3F7) were not present on controllers prior to MODEL_5170, which is why
                 * we don't include initializers for them in the default data array; we could eliminate them on older models,
                 * but we don't have access to the model info right now, and there's no real cost to always including them
                 * in the FDC state.
                 *
                 * The bigger compatibility question is whether to always include hooks for them (see aPortInput and aPortOutput).
                 */
                this.regInput = data[i++] || 0;                             // TODO: Determine if we should default to FDC.REG_INPUT.DISK_CHANGE instead of 0
                this.regControl = data[i] || FDC.REG_CONTROL.RATE500K;      // default to maximum data rate
            
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("FDC initialized for " + this.aDrives.length + " drive(s)");
                }
                return fSuccess;
            };
            
            /**
             * saveController()
             *
             * @this {FDC}
             * @return {Array}
             */
            FDC.prototype.saveController = function()
            {
                var i = 0;
                var data = [];
                data[i++] = this.iDrive;
                data[i++] = 0;
                data[i++] = this.regStatus;
                data[i++] = this.regDataArray;
                data[i++] = this.regDataIndex;
                data[i++] = this.regDataTotal;
                data[i++] = this.regOutput;
                data[i++] = this.saveDrives();
                data[i++] = this.saveDeltas();
                data[i++] = this.regInput;
                data[i] = this.regControl;
                return data;
            };
            
            /**
             * initDrive(drive, iDrive, data)
             *
             * TODO: Consider a separate Drive class that both FDC and HDC can use, since there's a lot of commonality
             * between the drive objects created by both controllers.  This will clean up overall drive management and allow
             * us to factor out some common Drive methods (eg, advanceSector()).
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} iDrive
             * @param {Array|undefined} data
             * @return {boolean} true if successful, false if failure
             */
            FDC.prototype.initDrive = function(drive, iDrive, data)
            {
                var i = 0;
                var fSuccess = true;
            
                drive.iDrive = iDrive;
                drive.fBusy = drive.fLocal = false;
            
                if (data === undefined) {
                    /*
                     * We set a default of two heads (MODEL_5150 PCs originally shipped with single-sided drives,
                     * but the ROM BIOS appears to have always supported both drive types).
                     */
                    data = [FDC.REG_DATA.RES.RESET, true, 0, 2, 0];
                }
            
                if (typeof data[1] == "boolean") {
                    /*
                     * Note that when no data is provided (eg, when the controller is being reinitialized), we now take
                     * care to preserve any drive defaults that initController() already obtained for us, falling back to
                     * bare minimums only when all else fails.
                     */
                    data[1] = [
                        FDC.DEFAULT_DRIVE_NAME, // a[0]
                        drive.nCylinders || 40, // a[1]
                        drive.nHeads || data[3],// a[2]
                        drive.nSectors || 9,    // a[3]
                        drive.cbSector || 512,  // a[4]
                        data[1],                // a[5]
                        drive.nDiskCylinders,   // a[6]
                        drive.nDiskHeads,       // a[7]
                        drive.nDiskSectors      // a[8]
                    ];
                }
            
                /*
                 * resCode used to be an FDC global, but in order to insulate FDC state from the operation of various functions
                 * that operate on drive objects (eg, readData and writeData), I've made it a per-drive variable.  This choice,
                 * similar to my choice for handling PCN, may be contrary to how the actual hardware works, but I prefer this
                 * approach, as long as it doesn't expose any incompatibilities that any software actually cares about.
                 */
                drive.resCode = data[i++];
            
                /*
                 * Some additional drive properties/defaults that are largely for the Disk component's benefit.
                 */
                var a = data[i++];
                drive.name = a[0];
                drive.nCylinders = a[1];          // cylinders
                drive.nHeads = a[2];              // heads/cylinders
                drive.nSectors = a[3];            // sectors/track
                drive.cbSector = a[4];            // bytes/sector
                drive.fRemovable = a[5];
                /*
                 * If we have current media parameters, restore them; otherwise, default to the drive's physical parameters.
                 */
                if (drive.nDiskCylinders = a[6]) {
                    drive.nDiskHeads = a[7];
                    drive.nDiskSectors = a[8];
                } else {
                    drive.nDiskCylinders = drive.nCylinders;
                    drive.nDiskHeads = drive.nHeads;
                    drive.nDiskSectors = drive.nSectors;
                }
            
                /*
                 * The next group of properties are set by various FDC command sequences.
                 *
                 * We initialize this.iDrive (above) and drive.bHead and drive.bCylinder (below) to zero, but leave the rest undefined,
                 * awaiting their first FDC command.  We do this because the initial SENSE_INT command returns a PCN, which will also
                 * be undefined unless we have at least zeroed both the current drive and the "present" cylinder on that drive.
                 *
                 * Alternatively, I could make PCN a global FDC variable.  That may be closer to how the actual hardware operates,
                 * but I'm using per-drive variables so that the FDC component can be a good client to both the CPU and other components.
                 *
                 * COMPATIBILITY ALERT: The MODEL_5170 BIOS ("DSKETTE_SETUP") attempts to discern the drive type (double-density vs.
                 * high-capacity) by "slapping" the heads around -- "litrally" (it uses a constant named "TRK_SLAP" equal to 48).
                 * After seeking to "TRK_SLAP", the BIOS performs a series of seeks, looking for the precise point where the heads
                 * return to track 0.
                 *
                 * Here's how it works: the BIOS seeks to track 48 (which is fine on an 80-track 1.2Mb high-capacity drive, but 9 tracks
                 * too far on a 40-track 360Kb double-density drive), then seeks to track 10, and then seeks in single-track increments
                 * up to 10 more times until the SENSE_DRIVE command returns ST3 with the TRACK0 bit set.
                 *
                 * This implies that SEEK isn't really seeking to a specified cylinder, but rather it is calculating a delta from
                 * the previous cylinder to the specified cylinder, and stepping over that number of tracks.  Which means that SEEK
                 * is updating a "logical" cylinder number, not the "physical" (actual) cylinder number.  Presumably a RECALIBRATE
                 * command will bring the logical and physical values into sync, but once an out-of-bounds cylinder is requested, they
                 * will be out of sync.
                 *
                 * To simulate this, bCylinder is now treated as the "physical" cylinder (since that's how it's ALWAYS been used here),
                 * and bCylinderSeek will now track (pun intended) the "logical" cylinder that's programmed via SEEK commands.
                 */
                drive.bHead = data[i++];
                drive.bCylinderSeek = data[i++];        // the data[] slot where we used to store drive.nHeads (or -1)
                drive.bCylinder = data[i++];
                if (drive.bCylinderSeek >= 100) {       // verify that the saved bCylinderSeek is valid, otherwise sync it with bCylinder
                    drive.bCylinderSeek -= 100;
                } else {
                    drive.bCylinderSeek -= drive.bCylinder;
                }
                drive.bSector = data[i++];
                drive.bSectorEnd = data[i++];           // aka EOT
                drive.nBytes = data[i++];
            
                /*
                 * We no longer reinitialize drive.disk, in order to retain previously mounted diskette across resets.
                 */
            
                /*
                 * The next group of properties are managed by worker functions (eg, doRead()) to maintain state across DMA requests.
                 */
                drive.ibSector = data[i++];             // location of the next byte to be accessed in the current sector
                drive.sector = null;
            
                if (!drive.disk) {
                    drive.sDiskettePath = "";           // ensure this is initialized to a default that displayDiskette() can deal with
                }
            
                var deltas = data[i++];
                if (deltas == 102) deltas = false;      // v1.02 backward-compatibility
            
                if (typeof deltas == "boolean") {
                    var fLocal = deltas;
                    var sDisketteName = data[i++];
                    var sDiskettePath = data[i];
                    /*
                     * If we're restoring a local disk image, then the entire disk contents should be captured in aDiskHistory,
                     * so all we have to do is mount a blank diskette and let disk.restore() do the rest; ie, there's nothing to
                     * "load" (it's a purely synchronous operation).
                     *
                     * Otherwise, we must call loadDiskette(); in the common case, loadDiskette() will have already "auto-mounted"
                     * the diskette, so it will return true, and then we restore any deltas to the current image.
                     *
                     * However, if loadDiskette() returns false, then it has initiated the load for a *different* disk image,
                     * so we must mark ourselves as "not ready" again, and add another "wait for ready" test in Computer before
                     * finally powering the CPU.
                     */
                    if (fLocal) {
                        this.mountDiskette(iDrive, sDisketteName, sDiskettePath);
                    }
                    else if (this.loadDiskette(iDrive, sDisketteName, sDiskettePath, true)) {
                        if (drive.disk) {
                            if (sDiskettePath) {
                                this.addDiskHistory(sDisketteName, sDiskettePath, drive.disk);
                            } else {
                                if (DEBUG) Component.warning("Disk '" + (drive.disk.sDiskName || sDisketteName) + "' not recorded properly in drive " + iDrive);
                            }
                        }
                    } else {
                        this.setReady(false);
                    }
                } else if (deltas !== undefined) {
                    /*
                     * If there's any data at all (ie, if this is a restore and not a reset), then it must be in the
                     * pre-v1.02 save/restore format, so we'll restore as best we can, but be aware that if disk.restore()
                     * notices that the currently mounted disk image differs from the disk image that these deltas belong to,
                     * it will return false, and the restore operation will be aborted.
                     */
                    if (drive.disk && drive.disk.restore(deltas) < 0) {
                        fSuccess = false;
                    }
                }
            
                /*
                 * TODO: If loadDiskette() returned true, then this can happen immediately.  Otherwise, loadDiskette()
                 * will have merely "queued up" the load request and drive.disk won't be ready yet, so figure out how/when
                 * we can properly restore drive.sector in that case.
                 */
                if (fSuccess && drive.disk && drive.ibSector !== undefined) {
                    drive.sector = drive.disk.seek(drive.bCylinder, drive.bHead, drive.bSector);
                }
                return fSuccess;
            };
            
            /**
             * saveDrives()
             *
             * @this {FDC}
             * @return {Array}
             */
            FDC.prototype.saveDrives = function()
            {
                var i = 0;
                var data = [];
                for (var iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    data[i++] = this.saveDrive(this.aDrives[iDrive]);
                }
                return data;
            };
            
            /**
             * saveDrive(drive)
             *
             * @this {FDC}
             * @return {Array}
             */
            FDC.prototype.saveDrive = function(drive)
            {
                var i = 0;
                var data = [];
                data[i++] = drive.resCode;
                data[i++] = [drive.name, drive.nCylinders, drive.nHeads, drive.nSectors, drive.cbSector, drive.fRemovable, drive.nDiskCylinders, drive.nDiskHeads, drive.nDiskSectors];
                data[i++] = drive.bHead;
                /*
                 * We used to store drive.nHeads in the next slot, but now we store bCylinderSeek,
                 * and we bias it by +100 so that initDrive() can distinguish it from older values.
                 */
                data[i++] = drive.bCylinderSeek + 100;
                data[i++] = drive.bCylinder;
                data[i++] = drive.bSector;
                data[i++] = drive.bSectorEnd;
                data[i++] = drive.nBytes;
                data[i++] = drive.ibSector;
                /*
                 * Now we deviate from the 1.01a save format: instead of next storing all the deltas for the
                 * currently mounted disk (if any), we store only the name and path of the currently mounted disk
                 * (if any).  Deltas for ALL disks, both currently mounted and previously mounted, are stored later.
                 *
                 *      data[i++] = drive.disk? drive.disk.save() : null;
                 *
                 * To indicate this deviation, we store neither a null nor a delta array, but a boolean (fLocal);
                 * if that boolean is not present, then the restore code will know it's dealing with a pre-v1.02 state.
                 */
                data[i++] = drive.fLocal;
                data[i++] = drive.sDisketteName;
                data[i] = drive.sDiskettePath;
                if (DEBUG && !drive.sDiskettePath && drive.disk && drive.disk.sDiskPath) {
                    Component.warning("Disk '" + drive.disk.sDiskName + "' not saved properly in drive " + drive.iDrive);
                }
                return data;
            };
            
            /**
             * saveDeltas()
             *
             * This returns an array of entries, one for each disk image we've ever mounted, including any deltas; ie:
             *
             *      [name, path, deltas]
             *
             * aDiskHistory contains exactly that, except that deltas may not be up-to-date for any currently mounted
             * disk image(s), so we call updateHistory() for all those disks, and then aDiskHistory is ready to be saved.
             *
             * @this {FDC}
             * @return {Array}
             */
            FDC.prototype.saveDeltas = function()
            {
                for (var iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    var drive = this.aDrives[iDrive];
                    if (drive.disk) {
                        this.updateDiskHistory(drive.sDisketteName, drive.sDiskettePath, drive.disk);
                    }
                }
                return this.aDiskHistory;
            };
            
            /**
             * copyDrive(iDrive)
             *
             * @this {FDC}
             * @param {number} iDrive
             * @return {Object|undefined} drive (which may be undefined if the requested drive does not exist)
             */
            FDC.prototype.copyDrive = function(iDrive)
            {
                var driveNew;
                var driveOld = this.aDrives[iDrive];
                if (driveOld !== undefined) {
                    driveNew = {};
                    for (var p in driveOld) {
                        driveNew[p] = driveOld[p];
                    }
                }
                return driveNew;
            };
            
            /**
             * seekDrive(drive, iSector, nSectors)
             *
             * The FDC doesn't need this function, since all FDC requests from the CPU are handled by doCmd().  This function
             * is used by other components (eg, Debugger) to mimic an FDC request, using a drive object obtained from copyDrive(),
             * to avoid disturbing the internal state of the FDC's drive objects.
             *
             * Also note that in an actual FDC request, drive.nBytes is initialized to the size of a single sector; the extent
             * of the entire transfer is actually determined by a count that has been pre-loaded into the DMA controller.  The FDC
             * isn't even aware of the extent of the transfer, so in the case of a read request, all readData() can do is return
             * bytes until the current track (or, in the case of a multi-track request, the current cylinder) has been exhausted.
             *
             * Since seekDrive() is for use with non-DMA requests, we use nBytes to specify the length of the entire transfer.
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} iSector (a "logical" sector number, relative to the entire disk, NOT a physical sector number)
             * @param {number} nSectors
             * @return {boolean} true if successful, false if invalid position request
             */
            FDC.prototype.seekDrive = function(drive, iSector, nSectors)
            {
                if (drive.disk) {
                    var aDiskInfo = drive.disk.info();
                    var nCylinders = aDiskInfo[0];
                    var nHeads = aDiskInfo[1];
                    var nSectorsPerTrack = aDiskInfo[2];
                    var nSectorsPerCylinder = nHeads * nSectorsPerTrack;
                    var nSectorsPerDisk = nCylinders * nSectorsPerCylinder;
                    if (iSector + nSectors <= nSectorsPerDisk) {
                        drive.bCylinder = Math.floor(iSector / nSectorsPerCylinder);
                        iSector %= nSectorsPerCylinder;
                        drive.bHead = Math.floor(iSector / nSectorsPerTrack);
                        drive.bSector = (iSector % nSectorsPerTrack) + 1;
                        drive.nBytes = nSectors * aDiskInfo[3];
                        /*
                         * NOTE: We don't set bSectorEnd, as an FDC command would, but it's irrelevant, because we don't actually
                         * do anything with bSectorEnd at this point.  Perhaps someday, when we faithfully honor/restrict requests
                         * to a single track (or a single cylinder, in the case of multi-track requests).
                         */
                        drive.resCode = FDC.REG_DATA.RES.NONE;
                        /*
                         * At this point, we've finished simulating what an FDC.REG_DATA.CMD.READ_DATA command would have performed,
                         * up through doRead().  Now it's the caller responsibility to call readData(), just like the DMA Controller would.
                         */
                        return true;
                    }
                }
                return false;
            };
            
            /**
             * autoMount(fRemount)
             *
             * @this {FDC}
             * @param {boolean} [fRemount] is true if we're remounting all auto-mounted diskettes
             * @return {boolean} true if one or more diskette images are being auto-mounted, false if none
             */
            FDC.prototype.autoMount = function(fRemount)
            {
                if (!fRemount) this.cAutoMount = 0;
                if (this.configMount) {
                    for (var sDrive in this.configMount) {
                        var configDrive = this.configMount[sDrive];
                        if (configDrive['name'] && configDrive['path']) {
                            /*
                             * WARNING: This conversion of drive letter to drive number, starting with A:, is very simplistic
                             * and is not guaranteed to match the drive mapping that DOS ultimately uses.
                             */
                            var iDrive = sDrive.charCodeAt(0) - 0x41;
                            if (iDrive >= 0 && iDrive < this.aDrives.length) {
                                if (!this.loadDiskette(iDrive, configDrive['name'], configDrive['path'], true) && fRemount)
                                    this.setReady(false);
                                continue;
                            }
                        }
                        this.notice("Unrecognized auto-mount specification for drive " + sDrive);
                    }
                }
                return !!this.cAutoMount;
            };
            
            /**
             * loadSelectedDrive(sDisketteName, sDiskettePath, file)
             *
             * @this {FDC}
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             * @param {File} [file] is set if there's an associated File object
             */
            FDC.prototype.loadSelectedDrive = function(sDisketteName, sDiskettePath, file)
            {
                var iDrive;
                var controlDrives = this.bindings["listDrives"];
                if (controlDrives && !isNaN(iDrive = str.parseInt(controlDrives.value, 10)) && iDrive >= 0 && iDrive < this.aDrives.length) {
            
                    if (!sDiskettePath) {
                        this.unloadDrive(iDrive);
                        return;
                    }
            
                    if (sDiskettePath == "?") {
                        this.notice('Use "Choose File" and "Mount" to select and load a local disk.');
                        return;
                    }
            
                    /*
                     * If the special path of "??" is selected, then we want to prompt the user for a URL.  Oh, and
                     * make sure we pass an empty string as the 2nd parameter to prompt(), so that IE won't display
                     * "undefined" -- because after all, undefined and "undefined" are EXACTLY the same thing, right?
                     *
                     * TODO: This is literally all I've done to support remote disk images. There's probably more
                     * I should do, like dynamically updating "listDisks" to include new entries, and adding new entries
                     * to the save/restore data.
                     */
                    if (sDiskettePath == "??") {
                        sDiskettePath = window.prompt("Enter the URL of a remote disk image.", "") || "";
                        if (!sDiskettePath) return;
                        sDisketteName = str.getBaseName(sDiskettePath);
                        this.println("Attempting to load " + sDiskettePath + " as \"" + sDisketteName + "\"");
                    }
            
                    this.println("loading disk " + sDiskettePath + "...");
            
                    while (this.loadDiskette(iDrive, sDisketteName, sDiskettePath, false, file)) {
                        if (!window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)")) {
                            return;
                        }
                        /*
                         * So here's the story: loadDiskette() returned true, which it does ONLY if the specified disk is already
                         * mounted, AND the user clicked OK to reload the original disk image.  So we must toss any history we have
                         * for the disk, unload it, and then loop back around to loadDiskette().
                         *
                         * loadDiskette() should NEVER return true the second time, since no disk is loaded. In other words,
                         * this isn't really a loop so much as a one-time retry operation.
                         */
                        this.removeDiskHistory(sDisketteName, sDiskettePath);
                        this.unloadDrive(iDrive, false, true);
                    }
                    return;
                }
                this.notice("Nothing to load");
            };
            
            /**
             * mountDiskette(iDrive, sDisketteName, sDiskettePath)
             *
             * @this {FDC}
             * @param {number} iDrive
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             */
            FDC.prototype.mountDiskette = function(iDrive, sDisketteName, sDiskettePath)
            {
                var drive = this.aDrives[iDrive];
                this.unloadDrive(iDrive, true, true);
                drive.fLocal = true;
                var disk = new Disk(this, drive, DiskAPI.MODE.PRELOAD);
                this.doneLoadDiskette(drive, disk, sDisketteName, sDiskettePath, true);
            };
            
            /**
             * loadDiskette(iDrive, sDisketteName, sDiskettePath, fAutoMount, file)
             *
             * NOTE: If sDiskettePath is already loaded in the drive, nothing needs to be done.
             *
             * @this {FDC}
             * @param {number} iDrive
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             * @param {boolean} [fAutoMount]
             * @param {File} [file] is set if there's an associated File object
             * @return {boolean} true if diskette (already) loaded, false if queued up (or busy)
             */
            FDC.prototype.loadDiskette = function(iDrive, sDisketteName, sDiskettePath, fAutoMount, file)
            {
                var drive = this.aDrives[iDrive];
                if (sDiskettePath && drive.sDiskettePath != sDiskettePath) {
                    this.unloadDrive(iDrive, fAutoMount, true);
                    if (drive.fBusy) {
                        this.notice("Drive " + iDrive + " busy");
                        return true;
                    }
                    drive.fBusy = true;
                    if (fAutoMount) {
                        drive.fAutoMount = true;
                        this.cAutoMount++;
                        if (this.messageEnabled()) this.printMessage("loading diskette '" + sDisketteName + "'");
                    }
                    drive.fLocal = !!file;
                    var disk = new Disk(this, drive, DiskAPI.MODE.PRELOAD);
                    disk.load(sDisketteName, sDiskettePath, file, this.doneLoadDiskette);
                    return false;
                }
                return true;
            };
            
            /**
             * doneLoadDiskette(drive, disk, sDisketteName, sDiskettePath, fAutoMount)
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {Disk} disk is set if the disk was successfully loaded, null if not
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             * @param {boolean} [fAutoMount]
             */
            FDC.prototype.doneLoadDiskette = function onFDCLoadNotify(drive, disk, sDisketteName, sDiskettePath, fAutoMount)
            {
                var aDiskInfo;
            
                drive.fBusy = false;
            
                if (disk) {
                    /*
                     * We shouldn't mount the diskette unless the drive is able to handle it; for example, FD360 (40-track)
                     * drives cannot read FD1200 (80-track) diskettes.  However, I no longer require that the diskette's
                     * sectors/track fall within the drive's standard maximum, because XDF diskettes use 19 physical sectors/track
                     * on the first cylinder (1 more than the typical 18 sectors/track found on 1.44Mb diskettes) but declare
                     * a larger logical size (23 512-byte sectors/track) to reflect the actual capacity of XDF tracks beyond the
                     * first cylinder (ie, one 8Kb sector, one 2Kb sector, one 1Kb sector, and one 512-byte sector).
                     */
                    aDiskInfo = disk.info();
                    if (disk && aDiskInfo[0] > drive.nCylinders || aDiskInfo[1] > drive.nHeads /* || aDiskInfo[2] > drive.nSectors */) {
                        this.notice("Diskette \"" + sDisketteName + "\" too large for drive " + String.fromCharCode(0x41 + drive.iDrive));
                        disk = null;
                    }
                }
            
                if (disk) {
                    drive.disk = disk;
                    drive.sDisketteName = sDisketteName;
                    drive.sDiskettePath = sDiskettePath;
            
                    /*
                     * Adding local disk image names to the disk list seems like a nice idea, but it's too confusing,
                     * because then it looks like the "Mount" button should be able to (re)load them, and that can NEVER
                     * happen, for security reasons; local disk images can ONLY be loaded via the "Mount" button after
                     * the user has selected them via the "Choose File" button.
                     *
                     *      this.addDiskette(sDisketteName, sDiskettePath);
                     *
                     * So we're going to take a different approach: when displayDiskette() is asked to display the name
                     * of a local disk image, it will map all such disks to "Local Disk", and any attempt to "Mount" such
                     * a disk, will essentially result in a "Disk not found" error.
                     */
            
                    this.addDiskHistory(sDisketteName, sDiskettePath, disk);
            
                    /*
                     * For a local disk (ie, one loaded via mountDiskette()), the disk.restore() performed by addDiskHistory()
                     * may have altered the disk geometry, so refresh the disk info.
                     */
                    aDiskInfo = disk.info();
            
                    /*
                     * Clearly, a successful mount implies a disk change, and I suppose that, technically, an *unsuccessful*
                     * mount should imply the same, but what would the real-world analog be?  Inserting a piece of cardboard
                     * instead of an actual diskette?  In any case, if we can do the user a favor by pretending (as far as the
                     * disk change line is concerned) that an unsuccessful mount never happened, let's do it.
                     *
                     * Successful unmounts are a different story, however; those *do* trigger a change. See unloadDrive().
                     */
                    this.regInput |= FDC.REG_INPUT.DISK_CHANGE;
            
                    /*
                     * With the addition of notify(), users are now "alerted" whenever a diskette has finished loading;
                     * notify() is selective about its output, using print() if a print window is open, alert() otherwise.
                     *
                     * WARNING: This conversion of drive number to drive letter, starting with A:, is very simplistic
                     * and will not match the drive mappings that DOS ultimately uses (ie, for drives beyond B:).
                     */
                    this.notice("Mounted diskette \"" + sDisketteName + "\" in drive " + String.fromCharCode(0x41 + drive.iDrive), drive.fAutoMount || fAutoMount);
            
                    /*
                     * Update the drive's current media parameters to match the disk's.
                     */
                    drive.nDiskCylinders = aDiskInfo[0];
                    drive.nDiskHeads = aDiskInfo[1];
                    drive.nDiskSectors = aDiskInfo[2];
                }
                else {
                    drive.fLocal = false;
                }
            
                if (drive.fAutoMount) {
                    drive.fAutoMount = false;
                    if (!--this.cAutoMount) this.setReady();
                }
            
                this.displayDiskette(drive.iDrive);
            };
            
            /**
             * addDiskette(sName, sPath)
             *
             * @param {string} sName
             * @param {string} sPath
             */
            FDC.prototype.addDiskette = function(sName, sPath)
            {
                var controlDisks = this.bindings["listDisks"];
                if (controlDisks) {
                    for (var i = 0; i < controlDisks.options.length; i++) {
                        if (controlDisks.options[i].value == sPath) return;
                    }
                    var controlOption = window.document.createElement("option");
                    controlOption['value'] = sPath;
                    controlOption.textContent = sName;
                    controlDisks.appendChild(controlOption);
                }
            };
            
            /**
             * displayDiskette(iDrive, fUpdateDrive)
             *
             * @this {FDC}
             * @param {number} iDrive (unvalidated)
             * @param {boolean} [fUpdateDrive] is true to update the drive list to match the specified drive (eg, the auto-mount case)
             */
            FDC.prototype.displayDiskette = function(iDrive, fUpdateDrive)
            {
                /*
                 * First things first: validate iDrive.
                 */
                if (iDrive >= 0 && iDrive < this.aDrives.length) {
                    var drive = this.aDrives[iDrive];
                    var controlDisks = this.bindings["listDisks"];
                    var controlDrives = this.bindings["listDrives"];
                    /*
                     * Next, make sure controls for both drives and disks exist.
                     */
                    if (controlDisks && controlDrives) {
                        /*
                         * Next, make sure the drive whose disk we're updating is the currently selected drive.
                         */
                        var i;
                        var iDriveSelected = str.parseInt(controlDrives.value, 10);
                        var sTargetPath = (drive.fLocal? "?" : drive.sDiskettePath);
                        if (!isNaN(iDriveSelected) && iDriveSelected == iDrive) {
                            for (i = 0; i < controlDisks.options.length; i++) {
                                if (controlDisks.options[i].value == sTargetPath) {
                                    if (controlDisks.selectedIndex != i) {
                                        controlDisks.selectedIndex = i;
                                    }
                                    break;
                                }
                            }
                            if (i == controlDisks.options.length) controlDisks.selectedIndex = 0;
                        }
                        if (fUpdateDrive) {
                            for (i = 0; i < controlDrives.options.length; i++) {
                                if (str.parseInt(controlDrives.options[i].value, 10) == drive.iDrive) {
                                    if (controlDrives.selectedIndex != i) {
                                        controlDrives.selectedIndex = i;
                                    }
                                    break;
                                }
                            }
                        }
                    }
                }
            };
            
            /**
             * unloadDrive(iDrive, fAutoUnload, fQuiet)
             *
             * @this {FDC}
             * @param {number} iDrive (pre-validated)
             * @param {boolean} [fAutoUnload] is true if this unload is being forced as part of an automount and/or restored mount
             * @param {boolean} [fQuiet]
             */
            FDC.prototype.unloadDrive = function(iDrive, fAutoUnload, fQuiet)
            {
                var drive = this.aDrives[iDrive];
                if (drive.disk) {
                    /*
                     * Before we toss the disk's information, capture any deltas that may have occurred.
                     */
                    this.updateDiskHistory(drive.sDisketteName, drive.sDiskettePath, drive.disk);
                    drive.sDisketteName = "";
                    drive.sDiskettePath = "";
                    drive.disk = null;
                    drive.fLocal = false;
            
                    this.regInput |= FDC.REG_INPUT.DISK_CHANGE;
            
                    /*
                     * WARNING: This conversion of drive number to drive letter, starting with A:, is very simplistic
                     * and is not guaranteed to match the drive mapping that DOS ultimately uses.
                     */
                    if (!fQuiet) {
                        this.notice("Drive " + String.fromCharCode(0x41 + iDrive) + " unloaded", fAutoUnload);
                    }
                    /*
                     * Try to avoid any unnecessary hysteresis regarding the diskette display if this unload is merely
                     * a prelude to another load.
                     */
                    if (!fAutoUnload && !fQuiet) {
                        this.displayDiskette(iDrive);
                    }
                }
            };
            
            /**
             * unloadAllDrives(fDiscard)
             *
             * @this {FDC}
             * @param {boolean} fDiscard to discard all disk history before unloading
             */
            FDC.prototype.unloadAllDrives = function(fDiscard)
            {
                if (fDiscard) {
                    this.aDiskHistory = [];
                }
                for (var iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    this.unloadDrive(iDrive, true);
                }
            };
            
            /**
             * addDiskHistory(sDisketteName, sDiskettePath, disk)
             *
             * @this {FDC}
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             * @param {Disk} disk containing corresponding disk image
             */
            FDC.prototype.addDiskHistory = function(sDisketteName, sDiskettePath, disk)
            {
                var i;
                this.assert(!!sDiskettePath);
                for (i = 0; i < this.aDiskHistory.length; i++) {
                    if (this.aDiskHistory[i][1] == sDiskettePath) {
                        var nChanges = disk.restore(this.aDiskHistory[i][2]);
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("disk '" + sDisketteName + "' restored from history (" + nChanges + " changes)");
                        }
                        return;
                    }
                }
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("disk '" + sDisketteName + "' added to history (nothing to restore)");
                }
                this.aDiskHistory[i] = [sDisketteName, sDiskettePath, []];
            };
            
            /**
             * removeDiskHistory(sDisketteName, sDiskettePath)
             *
             * @this {FDC}
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             */
            FDC.prototype.removeDiskHistory = function(sDisketteName, sDiskettePath)
            {
                var i;
                for (i = 0; i < this.aDiskHistory.length; i++) {
                    if (this.aDiskHistory[i][1] == sDiskettePath) {
                        this.aDiskHistory.splice(i, 1);
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("disk '" + sDisketteName + "' removed from history");
                        }
                        return;
                    }
                }
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("unable to remove disk '" + sDisketteName + "' from history (" + sDiskettePath + ")");
                }
            };
            
            /**
             * updateDiskHistory(sDisketteName, sDiskettePath, disk)
             *
             * @this {FDC}
             * @param {string} sDisketteName
             * @param {string} sDiskettePath
             * @param {Disk} disk containing corresponding disk image, with possible deltas
             */
            FDC.prototype.updateDiskHistory = function(sDisketteName, sDiskettePath, disk)
            {
                var i;
                for (i = 0; i < this.aDiskHistory.length; i++) {
                    if (this.aDiskHistory[i][1] == sDiskettePath) {
                        this.aDiskHistory[i][2] = disk.save();
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("disk '" + sDisketteName + "' updated in history");
                        }
                        return;
                    }
                }
                /*
                 * I used to report this as an error (at least in the DEBUG release), but it's no longer really
                 * an error, because if we're trying to re-mount a clean copy of a disk, we toss its history, then
                 * unload, and then reload/remount.  And since unloadDrive's normal behavior is to call updateDiskHistory()
                 * before unloading, the fact that the disk is no longer listed here can't be treated as an error.
                 */
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("unable to update disk '" + sDisketteName + "' in history (" + sDiskettePath + ")");
                }
            };
            
            /**
             * outFDCOutput(port, bOut, addrFrom)
             *
             * @this {FDC}
             * @param {number} port (0x3F2, output only)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            FDC.prototype.outFDCOutput = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "OUTPUT");
                if (!(bOut & FDC.REG_OUTPUT.ENABLE)) {
                    this.initController();
                    /*
                     * initController() resets, among other things, the selected drive (this.iDrive), so if we were
                     * still updating this.iDrive below based on the "drive select" bits in regOutput, we would want
                     * to make sure those bits now match what initController() set.  But since we no longer do that
                     * (see below), this is no longer needed either.
                     *
                     *      bOut = (bOut & ~FDC.REG_OUTPUT.DS) | this.iDrive;
                     */
                }
                else if (!(this.regOutput & FDC.REG_OUTPUT.ENABLE)) {
                    /*
                     * When FDC.REG_OUTPUT.ENABLE transitions from 0 to 1, generate an interrupt.
                     */
                    if (this.regOutput & FDC.REG_OUTPUT.INT_ENABLE) {
                        if (this.chipset) this.chipset.setIRR(ChipSet.IRQ.FDC);
                    }
                }
                /*
                 * This no longer updates the internally selected drive (this.iDrive) based on regOutput, because (a) there seems
                 * to be no point, as all drive-related commands include their own "drive select" bits, and (b) it breaks the
                 * MODEL_5170 boot code.  Here's why:
                 *
                 * Unlike previous models, the MODEL_5170 BIOS probes all installed diskette drives to determine drive type;
                 * ie, FD360 (40-track) or FD1200 (80-track).  So if there are two drives, the last selected drive will be drive 1.
                 * Immediately before booting, the BIOS issues an INT 0x13/AH=0 reset, which writes regOutput two times: first
                 * with FDC.REG_OUTPUT.ENABLE clear, and then with it set.  However, both times, it ALSO loads the last selected
                 * drive number into regOutput's "drive select" bits.
                 *
                 * If we switched our selected drive to match regOutput, then the ST0 value we returned on an SENSE_INT command
                 * following the regOutput reset operation would indicate drive 1 instead of drive 0.  But the BIOS requires
                 * the ST0 result from the SENSE_INT command ALWAYS be 0xC0 (not 0xC1), so the controller must not be propagating
                 * regOutput's "drive select" bits in the way I originally assumed.
                 *
                 *      var iDrive = bOut & FDC.REG_OUTPUT.DS;
                 *      if (bOut & (FDC.REG_OUTPUT.MOTOR_D0 << iDrive)) this.iDrive = iDrive;
                 */
                this.regOutput = bOut;
            };
            
            /**
             * inFDCStatus(port, addrFrom)
             *
             * @this {FDC}
             * @param {number} port (0x3F4, input only)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            FDC.prototype.inFDCStatus = function(port, addrFrom)
            {
                this.printMessageIO(port, null, addrFrom, "STATUS", this.regStatus);
                return this.regStatus;
            };
            
            /**
             * inFDCData(port, addrFrom)
             *
             * @this {FDC}
             * @param {number} port (0x3F5, input/output)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            FDC.prototype.inFDCData = function(port, addrFrom)
            {
                var bIn = 0;
                if (this.regDataIndex < this.regDataTotal) {
                    bIn = this.regDataArray[this.regDataIndex];
                }
                /*
                 * As per the discussion in doCmd(), once the first byte of the Result Phase has been read, the interrupt must be cleared.
                 */
                if (this.regOutput & FDC.REG_OUTPUT.INT_ENABLE) {
                    if (this.chipset) this.chipset.clearIRR(ChipSet.IRQ.FDC);
                }
                if (this.messageEnabled()) {
                    this.printMessageIO(port, null, addrFrom, "DATA[" + this.regDataIndex + "]", bIn);
                }
                if (++this.regDataIndex >= this.regDataTotal) {
                    this.regStatus &= ~(FDC.REG_STATUS.READ_DATA | FDC.REG_STATUS.BUSY);
                    this.regDataIndex = this.regDataTotal = 0;
                }
                return bIn;
            };
            
            /**
             * outFDCData(port, bOut, addrFrom)
             *
             * @this {FDC}
             * @param {number} port (0x3F5, input/output)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            FDC.prototype.outFDCData = function(port, bOut, addrFrom)
            {
                if (this.messageEnabled()) {
                    this.printMessageIO(port, bOut, addrFrom, "DATA[" + this.regDataTotal + "]");
                }
            
                if (this.regDataTotal < this.regDataArray.length) {
                    this.regDataArray[this.regDataTotal++] = bOut;
                }
                var bCmd = this.regDataArray[0];
                var bCmdMasked = bCmd & FDC.REG_DATA.CMD.MASK;
                if (FDC.aCmdInfo[bCmdMasked] !== undefined) {
                    if (this.regDataTotal >= FDC.aCmdInfo[bCmdMasked].cbReq) {
                        this.doCmd();
                    }
                    return;
                }
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("unsupported FDC command: " + str.toHexByte(bCmd));
                    this.dbg.stopCPU();
                }
            };
            
            /**
             * inFDCInput(port, addrFrom)
             *
             * @this {FDC}
             * @param {number} port (0x3F7, input only, MODEL_5170 only)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            FDC.prototype.inFDCInput = function(port, addrFrom)
            {
                var bIn = this.regInput;
                /*
                 * TODO: Determine when the DISK_CHANGE bit is *really* cleared (this is just a guess)
                 */
                this.regInput &= ~FDC.REG_INPUT.DISK_CHANGE;
                this.printMessageIO(port, null, addrFrom, "INPUT", bIn);
                return bIn;
            };
            
            /**
             * outFDCControl(port, bOut, addrFrom)
             *
             * @this {FDC}
             * @param {number} port (0x3F7, output only, MODEL_5170 only)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            FDC.prototype.outFDCControl = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "CONTROL");
                this.regControl  = bOut;
            };
            
            /**
             * doCmd()
             *
             * @this {FDC}
             */
            FDC.prototype.doCmd = function()
            {
                var fIRQ = false;
                this.regDataIndex = 0;
                var bCmd = this.popCmd();
                var drive, bDrive, bHead, c, h, r, n;
            
                /*
                 * NOTE: We currently ignore the FDC.REG_DATA.CMD.SK, FDC.REG_DATA.CMD.MF and FDC.REG_DATA.CMD.MT bits of every command.
                 * The only command bit of possible interest down the road might be the FDC.REG_DATA.CMD.MT (Multi-Track); the rest relate
                 * to storage format details that we cannot emulate as long as our diskette images contain nothing more than sector
                 * data without any formatting data.
                 *
                 * Similarly, we ignore parameters like SRT, HUT, HLT and the like, since our "motors" don't require physical delays;
                 * however, if timing issues become compatibility issues, we'll have to revisit those delays.  In any case, the maximum
                 * speed of the simulation will still be limited by various spin-loops in the ROM BIOS that wait prescribed times, so even
                 * with infinitely fast hardware, the simulation will never run as fast as it theoretically could, unless we opt to identify
                 * those spin-loops and either patch them or skip over them.
                 */
                var bCmdMasked = bCmd & FDC.REG_DATA.CMD.MASK;
            
                switch (bCmdMasked) {
                case FDC.REG_DATA.CMD.SPECIFY:                      // 0x03
                    this.popSRT();                                  // SRT and HUT (encodings?)
                    this.popHLT();                                  // HLT and ND (encodings?)
                    this.beginResult();
                    /*
                     * No results are provided by this command, and fIRQ should remain false
                     */
                    break;
            
                case FDC.REG_DATA.CMD.SENSE_DRIVE:                  // 0x04
                    bDrive = this.popCmd(FDC.TERMS.DS);
                    bHead = (bDrive >> 2) & 0x1;
                    this.iDrive = (bDrive & 0x3);
                    drive = this.aDrives[this.iDrive];
                    this.beginResult();
                    this.pushST3(drive);
                    break;
            
                case FDC.REG_DATA.CMD.WRITE_DATA:                   // 0x05
                case FDC.REG_DATA.CMD.READ_DATA:                    // 0x06
                    bDrive = this.popCmd(FDC.TERMS.DS);             // Drive Select
                    bHead = (bDrive >> 2) & 0x1;                    // isolate HD (Head Select) bits
                    this.iDrive = (bDrive & 0x3);                   // isolate DS (Drive Select, aka Unit Select) bits
                    drive = this.aDrives[this.iDrive];
                    drive.bHead = bHead;
                    c = drive.bCylinder = this.popCmd(FDC.TERMS.C); // C
                    h = this.popCmd(FDC.TERMS.H);                   // H
                    /*
                     * Controller docs say that H should always match HD, so I assert that, but what if someone
                     * made a mistake and didn't program them identically -- what would happen?  Which should we honor?
                     */
                    this.assert(h == bHead);
                    r = drive.bSector = this.popCmd(FDC.TERMS.R);   // R
                    n = this.popCmd(FDC.TERMS.N);                   // N
                    drive.nBytes = 128 << n;                        // 0 => 128, 1 => 256, 2 => 512, 3 => 1024
                    drive.bSectorEnd = this.popCmd(FDC.TERMS.EOT);  // EOT (final sector number on a cylinder)
                    this.popCmd(FDC.TERMS.GPL);                     // GPL (spacing between sectors, excluding VCO Sync Field; 3)
                    this.popCmd(FDC.TERMS.DTL);                     // DTL (when N is 0, DTL stands for the data length to read out or write into the sector)
                    if (bCmdMasked == FDC.REG_DATA.CMD.READ_DATA)
                        this.doRead(drive);
                    else
                        this.doWrite(drive);
                    this.pushResults(drive, bCmd, bHead, c, h, r, n);
                    fIRQ = true;
                    break;
            
                case FDC.REG_DATA.CMD.RECALIBRATE:                  // 0x07
                    bDrive = this.popCmd(FDC.TERMS.DS);
                    this.iDrive = (bDrive & 0x3);
                    drive = this.aDrives[this.iDrive];
                    drive.bCylinder = drive.bCylinderSeek = 0;
                    drive.resCode = FDC.REG_DATA.RES.SEEK_END | FDC.REG_DATA.RES.TRACK0;
                    this.beginResult();                             // no results provided; this command is typically followed by FDC.REG_DATA.CMD.SENSE_INT
                    fIRQ = true;
                    break;
            
                case FDC.REG_DATA.CMD.SENSE_INT:                    // 0x08
                    drive = this.aDrives[this.iDrive];
                    drive.bHead = 0;                                // this command is documented as ALWAYS returning a head address of 0 in ST0; see pushST0()
                    this.beginResult();
                    this.pushST0(drive);
                    this.pushResult(drive.bCylinder, FDC.TERMS.PCN);
                    /*
                     * For some strange reason, the "DISK_RESET" function in the MODEL_5170_REV3 BIOS resets the
                     * adapter and then issues FOUR -- that's right, not ONE but FOUR -- SENSE INTERRUPT STATUS commands
                     * in a row, and expects ST0 to contain a different drive number after each command (first 0, then 1,
                     * then 2, and finally 3).  What makes this doubly weird is SENSE INTERRUPT STATUS (unlike SENSE
                     * DRIVE STATUS) is a drive-agnostic command.
                     *
                     * Didn't the original PC AT "HFCOMBO" controller limit support to TWO diskette drives max?
                     * And even if the PC AT supported other FDC controllers that DID support up to FOUR diskette drives,
                     * why should "DISK_RESET" hard-code a 4-drive loop?
                     *
                     * Well, whatever.  All this head-scratching doesn't change the fact that I apparently have to
                     * "auto-increment" the internal drive number (this.iDrive) after each SENSE INTERRUPT STATUS command.
                     */
                    this.iDrive = (this.iDrive + 1) & 0x3;
                    /*
                     * No interrupt is generated by this command, so fIRQ should remain false.
                     */
                    break;
            
                case FDC.REG_DATA.CMD.READ_ID:                      // 0x0A
                    /*
                     * This command is used by "SETUP_DBL" in the MODEL_5170_REV3 BIOS to determine if a double-density
                     * (40-track) diskette has been inserted in a high-density (80-track) drive; ie, whether "double stepping"
                     * is required, since only 40 of the 80 possible "steps" are valid for a double-density diskette.
                     *
                     * To start, we'll focus on making this work in the normal case (80-track diskette in 80-track drive).
                     */
                    bDrive = this.popCmd(FDC.TERMS.DS);
                    bHead = (bDrive >> 2) & 0x1;
                    this.iDrive = (bDrive & 0x3);
                    drive = this.aDrives[this.iDrive];
                    c = drive.bCylinder;
                    h = drive.bHead = bHead;
                    r = drive.bSector = 1;
                    n = 0;
                    drive.resCode = FDC.REG_DATA.RES.NONE;
                    if (drive.disk && (drive.sector = drive.disk.seek(drive.bCylinder, drive.bHead, drive.bSector))) {
                        n = drive.sector.length;
                    } else {
                        /*
                         * TODO: Determine the appropriate response code(s) for the possible errors that can occur here.
                         */
                        drive.resCode = FDC.REG_DATA.RES.NOT_READY | FDC.REG_DATA.RES.INCOMPLETE;
                    }
                    this.pushResults(drive, bCmd, bHead, c, h, r, n);
                    fIRQ = true;
                    break;
            
                case FDC.REG_DATA.CMD.FORMAT_TRACK:                 // 0x0D
                    bDrive = this.popCmd(FDC.TERMS.DS);
                    bHead = (bDrive >> 2) & 0x1;
                    this.iDrive = (bDrive & 0x3);
                    drive = this.aDrives[this.iDrive];
                    c = drive.bCylinder;
                    h = drive.bHead = bHead;
                    r = 1;
                    n = this.popCmd(FDC.TERMS.N);                   // N
                    drive.nBytes = 128 << n;                        // 0 => 128, 1 => 256, 2 => 512, 3 => 1024 (bytes/sector)
                    drive.bSectorEnd = this.popCmd(FDC.TERMS.SC);   // SC (sectors/track)
                    this.popCmd(FDC.TERMS.GPL);                     // GPL (spacing between sectors, excluding VCO Sync Field; 3)
                    drive.bFiller = this.popCmd(FDC.TERMS.D);       // D (filler byte)
                    this.doFormat(drive);
                    this.pushResults(drive, bCmd, bHead, c, h, r, n);
                    fIRQ = true;
                    break;
            
                case FDC.REG_DATA.CMD.SEEK:                         // 0x0F
                    bDrive = this.popCmd(FDC.TERMS.DS);
                    bHead = (bDrive >> 2) & 0x1;
                    this.iDrive = (bDrive & 0x3);
                    drive = this.aDrives[this.iDrive];
                    drive.bHead = bHead;
                    /*
                     * As discussed in initDrive(), we can no longer simply set bCylinder to the specified NCN;
                     * instead, we must calculate the delta between bCylinderSeek and the NCN, and adjust bCylinder
                     * by that amount.  Then we simply move the NCN into bCylinderSeek without any range checking.
                     *
                     * Since bCylinder is now expressly defined as the "physical" cylinder number, it must never
                     * be allowed to exceed the physical boundaries of the drive (ie, never lower than 0, and never
                     * greater than or equal to nCylinders).
                     */
                    c = this.popCmd(FDC.TERMS.NCN);
                    drive.bCylinder += c - drive.bCylinderSeek;
                    if (drive.bCylinder < 0) drive.bCylinder = 0;
                    if (drive.bCylinder >= drive.nCylinders) drive.bCylinder = drive.nCylinders - 1;
                    drive.bCylinderSeek = c;
                    drive.resCode = FDC.REG_DATA.RES.SEEK_END;
                    /*
                     * TODO: To properly support ALL the ST3 result bits (not just TRACK0), we need a resCode
                     * update() function that all FDC commands can use.  This code is merely sufficient to get us
                     * through the "DSKETTE_SETUP" gauntlet in the MODEL_5170 BIOS.
                     */
                    if (!drive.bCylinder) {
                        drive.resCode |= FDC.REG_DATA.RES.TRACK0;
                    }
                    this.beginResult();                             // like FDC.REG_DATA.CMD.RECALIBRATE, no results are provided
                    fIRQ = true;
                    break;
            
                default:
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("FDC operation unsupported (command=" + str.toHexByte(bCmd) + ")");
                        this.dbg.stopCPU();
                    }
                    break;
                }
            
                if (this.regDataTotal > 0) this.regStatus |= (FDC.REG_STATUS.READ_DATA | FDC.REG_STATUS.BUSY);
            
                /*
                 * After the Execution Phase (eg, DMA Terminal Count has occurred, or the EOT sector has been read/written),
                 * an interrupt is supposed to occur, signaling the beginning of the Result Phase.  Once the first byte of the
                 * result has been read, the interrupt is cleared (see inFDCData).
                 *
                 * TODO: Technically, interrupt request status should be cleared by the FDC.REG_DATA.CMD.SENSE_INT command; in fact,
                 * if that command is issued and no interrupt was pending, then FDC.REG_DATA.RES.INVALID should be returned (via ST0).
                 */
                if (this.regOutput & FDC.REG_OUTPUT.INT_ENABLE) {
                    if (drive && !(drive.resCode & FDC.REG_DATA.RES.NOT_READY) && fIRQ) {
                        if (this.chipset) this.chipset.setIRR(ChipSet.IRQ.FDC);
                    }
                }
            };
            
            /**
             * pushResults(drive, bCmd, bHead, c, h, r, n)
             *
             * @param {Object} drive
             * @param {number} bCmd
             * @param {number} bHead
             * @param {number} c
             * @param {number} h
             * @param {number} r
             * @param {number} n
             */
            FDC.prototype.pushResults = function(drive, bCmd, bHead, c, h, r, n)
            {
                this.beginResult();
                this.pushST0(drive);
                this.pushST1(drive);
                this.pushST2(drive);
                /*
                 * NOTE: I used to set the following C/H/R/N results using the values that advanceSector() had "advanced"
                 * them to, which seemed logical but was technically incorrect.  For non-multi-track reads, they should match
                 * the programmed C/H/R/N values, except when EOT has been reached, in which case C = C + 1 and R = 1.
                 *
                 * For multi-track, the LSB of H should be complemented whenever EOT has been reached, which I "informally"
                 * detect by testing if the drive's current bCylinder and/or bHead positions advanced to a new cylinder or head,
                 * and apparently, C should never be advanced if H was initially 0.
                 *
                 * I don't do strict EOT comparisons here or elsewhere, because it allows the controller to work with a wider
                 * range of disks (eg, "fake" XDF disk images that contain 23 512-byte sectors/track).
                 */
                var i = 0;
                if (c != drive.bCylinder || h != drive.bHead) {
                    i = r = 1;
                }
                if (bCmd & FDC.REG_DATA.CMD.MT) {
                    h ^= i;
                    if (!bHead) i = 0;
                }
                c += i;
                this.pushResult(c, FDC.TERMS.C);                // formerly drive.bCylinder
                this.pushResult(h, FDC.TERMS.H);                // formerly drive.bHead
                this.pushResult(r, FDC.TERMS.R);                // formerly drive.bSector
                this.pushResult(n, FDC.TERMS.N);
            };
            
            /**
             * popCmd(name)
             *
             * @this {FDC}
             * @param {string|undefined} [name]
             * @return {number}
             */
            FDC.prototype.popCmd = function(name)
            {
                this.assert((!this.regDataIndex || name !== undefined) && this.regDataIndex < this.regDataTotal);
                var bCmd = this.regDataArray[this.regDataIndex];
                if (DEBUG && this.messageEnabled(Messages.PORT | Messages.FDC)) {
                    var bCmdMasked = bCmd & FDC.REG_DATA.CMD.MASK;
                    if (!name && !this.regDataIndex && FDC.aCmdInfo[bCmdMasked]) name = FDC.aCmdInfo[bCmdMasked].name;
                    this.printMessage("FDC.CMD[" + (name || this.regDataIndex) + "]: " + str.toHexByte(bCmd), true);
                }
                this.regDataIndex++;
                return bCmd;
            };
            
            /**
             * popHLT()
             *
             * NOTE: This byte is actually a combination of HLT (Head Load Time) and ND (Non-DMA Mode)
             *
             * @this {FDC}
             */
            FDC.prototype.popHLT = function()
            {
                this.popCmd(FDC.TERMS.HLT);
             // this.nHLT = this.popCmd(FDC.TERMS.HLT);
            };
            
            /**
             * popSRT()
             *
             * NOTE: This byte is actually a combination of SRT (Step Rate Time) and HUT (Head Unload Time)
             *
             * @this {FDC}
             */
            FDC.prototype.popSRT = function()
            {
                this.popCmd(FDC.TERMS.SRT);
             // this.nSRT = this.popCmd(FDC.TERMS.SRT);
            };
            
            /**
             * beginResult()
             *
             * @this {FDC}
             */
            FDC.prototype.beginResult = function()
            {
                this.regDataIndex = this.regDataTotal = 0;
            };
            
            /**
             * pushResult(bResult, name)
             *
             * @this {FDC}
             * @param {number} bResult
             * @param {string|undefined} [name]
             */
            FDC.prototype.pushResult = function(bResult, name)
            {
                if (DEBUG && this.messageEnabled(Messages.PORT | Messages.FDC)) {
                    this.printMessage("FDC.RES[" + (name || this.regDataTotal) + "]: " + str.toHexByte(bResult), true);
                }
                this.regDataArray[this.regDataTotal++] = bResult;
            };
            
            /**
             * pushST0(drive)
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.pushST0 = function(drive)
            {
                this.pushResult(drive.iDrive | (drive.bHead << 2) | (drive.resCode & FDC.REG_DATA.RES.ST0), FDC.TERMS.ST0);
            };
            
            /**
             * pushST1(drive)
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.pushST1 = function(drive)
            {
                this.pushResult((drive.resCode & FDC.REG_DATA.RES.ST1) >>> 8, FDC.TERMS.ST1);
            };
            
            /**
             * pushST2(drive)
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.pushST2 = function(drive)
            {
                this.pushResult((drive.resCode & FDC.REG_DATA.RES.ST2) >>> 16, FDC.TERMS.ST2);
            };
            
            /**
             * pushST3(drive)
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.pushST3 = function(drive)
            {
                this.pushResult((drive.resCode & FDC.REG_DATA.RES.ST3) >>> 24, FDC.TERMS.ST3);
            };
            
            /**
             * dmaRead(drive, b, done)
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} b
             * @param {function(number,boolean)} done
             */
            FDC.prototype.dmaRead = function(drive, b, done)
            {
                if (b === undefined || b < 0) {
                    this.readData(drive, done);
                    return;
                }
                /*
                 * The DMA controller should be ASKING for data, not GIVING us data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaRead(): invalid DMA acknowledgement");
                done(-1, false);
            };
            
            /**
             * dmaWrite(drive, b)
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} b
             * @return {number}
             */
            FDC.prototype.dmaWrite = function(drive, b)
            {
                if (b !== undefined && b >= 0)
                    return this.writeData(drive, b);
                /*
                 * The DMA controller should be GIVING us data, not ASKING for data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaWrite(): invalid DMA acknowledgement");
                return -1;
            };
            
            /**
             * dmaFormat(drive, b)
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} b
             * @returns {number}
             */
            FDC.prototype.dmaFormat = function(drive, b)
            {
                if (b !== undefined && b >= 0)
                    return this.writeFormat(drive, b);
                /*
                 * The DMA controller should be GIVING us data, not ASKING for data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaFormat(): invalid DMA acknowledgement");
                return -1;
            };
            
            /**
             * doRead(drive)
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.doRead = function(drive)
            {
                /*
                 * With only NOT_READY and INCOMPLETE set, an empty drive causes DOS to report "General Failure";
                 * with the addition of NO_DATA, DOS reports "Sector not found".  The traditional "Drive not ready"
                 * error message is not triggered by anything we return here, but simply by BIOS commands timing out.
                 */
                drive.resCode = FDC.REG_DATA.RES.NOT_READY | FDC.REG_DATA.RES.INCOMPLETE;
            
                if (drive.disk) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("FDC.doRead(CHS=" + drive.bCylinder + ':' + drive.bHead + ':' + drive.bSector + ",PBA=" + (drive.bCylinder * (drive.disk.nHeads * drive.disk.nSectors) + drive.bHead * drive.disk.nSectors + drive.bSector-1) + ')');
                    }
                    drive.sector = null;
                    drive.resCode = FDC.REG_DATA.RES.NONE;
                    if (this.chipset) {
                        this.chipset.connectDMA(ChipSet.DMA_FDC, this, 'dmaRead', drive);
                        this.chipset.requestDMA(ChipSet.DMA_FDC);
                    }
                }
            };
            
            /**
             * doWrite(drive)
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.doWrite = function(drive)
            {
                drive.resCode = FDC.REG_DATA.RES.NOT_READY | FDC.REG_DATA.RES.INCOMPLETE;
            
                if (drive.disk) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("FDC.doWrite(CHS=" + drive.bCylinder + ':' + drive.bHead + ':' + drive.bSector + ",PBA=" + (drive.bCylinder * (drive.disk.nHeads * drive.disk.nSectors) + drive.bHead * drive.disk.nSectors + drive.bSector-1) + ')');
                    }
                    if (drive.disk.fWriteProtected) {
                        drive.resCode = FDC.REG_DATA.RES.NOT_WRITABLE | FDC.REG_DATA.RES.INCOMPLETE;
                        return;
                    }
                    drive.sector = null;
                    drive.resCode = FDC.REG_DATA.RES.NONE;
                    if (this.chipset) {
                        this.chipset.connectDMA(ChipSet.DMA_FDC, this, 'dmaWrite', drive);
                        this.chipset.requestDMA(ChipSet.DMA_FDC);
                    }
                }
            };
            
            /**
             * doFormat(drive)
             *
             * drive is initialized by doCmd() to the following extent:
             *
             *      drive.bHead (ignored)
             *      drive.nBytes (bytes/sector)
             *      drive.bSectorEnd (sectors/track)
             *      drive.bFiller (fill byte)
             *
             * and we expect the DMA controller to provide C, H, R and N (ie, 4 bytes) for each sector to be formatted.
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.doFormat = function(drive)
            {
                drive.resCode = FDC.REG_DATA.RES.NOT_READY | FDC.REG_DATA.RES.INCOMPLETE;
            
                if (drive.disk) {
                    drive.sector = null;
                    drive.resCode = FDC.REG_DATA.RES.NONE;
                    if (this.chipset) {
                        drive.cbFormat = 0;
                        drive.abFormat = new Array(4);
                        drive.bFormatting = true;
                        drive.cSectorsFormatted = 0;
                        this.chipset.connectDMA(ChipSet.DMA_FDC, this, 'dmaFormat', drive);
                        this.chipset.requestDMA(ChipSet.DMA_FDC);
                        drive.bFormatting = false;
                    }
                }
            };
            
            /**
             * readData(drive, done)
             *
             * The following drive properties must have been setup prior to our first call:
             *
             *      drive.bHead
             *      drive.bCylinder
             *      drive.bSector
             *      drive.sector (initialized to null)
             *
             * On the first readData() request, since drive.sector will be null, we ask the Disk object to look
             * up the first sector of the request.  We then ask the Disk for bytes from that sector until the sector
             * is exhausted, and then we look up the next sector and continue the process.
             *
             * NOTE: Since the FDC isn't aware of the extent of the transfer, all readData() can do is return bytes
             * until the current track (or, in the case of a multi-track request, the current cylinder) has been exhausted.
             *
             * TODO: Research the requirements, if any, for multi-track I/O and determine what else needs to be done.
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {function(number,boolean,Object,number)} done (number is next available byte from drive, or -1 if no more bytes available)
             */
            FDC.prototype.readData = function(drive, done)
            {
                var b = -1;
                var obj = null, off = 0;    // these variables are purely for BACKTRACK purposes
            
                if (!drive.resCode && drive.disk) {
                    do {
                        if (drive.sector) {
                            off = drive.ibSector;
                            if ((b = drive.disk.read(drive.sector, drive.ibSector++)) >= 0) {
                                obj = drive.sector;
                                break;
                            }
                        }
                        /*
                         * Locate the next sector, and then try reading again.
                         */
                        drive.sector = drive.disk.seek(drive.bCylinder, drive.bHead, drive.bSector);
                        if (!drive.sector) {
                            drive.resCode = FDC.REG_DATA.RES.NO_DATA | FDC.REG_DATA.RES.INCOMPLETE;
                            break;
                        }
                        drive.ibSector = 0;
                        /*
                         * We "pre-advance" bSector et al now, instead of waiting to advance it right before the seek().
                         * This allows the initial call to readData() to perform a seek without triggering an unwanted advance.
                         */
                        this.advanceSector(drive);
                    } while (true);
                }
                done(b, false, obj, off);
            };
            
            /**
             * writeData(drive, b)
             *
             * The following drive properties must have been setup prior to our first call:
             *
             *      drive.bHead
             *      drive.bCylinder
             *      drive.bSector
             *      drive.sector (initialized to null)
             *
             * On the first writeData() request, since drive.sector will be null, we ask the Disk object to look
             * up the first sector of the request.  We then send the Disk bytes for that sector until the sector
             * is full, and then we look up the next sector and continue the process.
             *
             * NOTE: Since the FDC isn't aware of the extent of the transfer, all writeData() can do is accept bytes
             * until the current track (or, in the case of a multi-track request, the current cylinder) has been exhausted.
             *
             * TODO: Research the requirements, if any, for multi-track I/O and determine what else needs to be done.
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} b containing next byte to write
             * @return {number} (b unchanged; return -1 if command should be terminated)
             */
            FDC.prototype.writeData = function(drive, b)
            {
                if (drive.resCode || !drive.disk) return -1;
                do {
                    if (drive.sector) {
                        if (drive.disk.write(drive.sector, drive.ibSector++, b))
                            break;
                    }
                    /*
                     * Locate the next sector, and then try writing again.
                     */
                    drive.sector = drive.disk.seek(drive.bCylinder, drive.bHead, drive.bSector);
                    if (!drive.sector) {
                        /*
                         * TODO: Determine whether this should be FDC.REG_DATA.RES.CRC_ERROR or FDC.REG_DATA.RES.DATA_FIELD
                         */
                        drive.resCode = FDC.REG_DATA.RES.CRC_ERROR | FDC.REG_DATA.RES.INCOMPLETE;
                        b = -1;
                        break;
                    }
                    drive.ibSector = 0;
                    /*
                     * We "pre-advance" bSector et al now, instead of waiting to advance it right before the seek().
                     * This allows the initial call to writeData() to perform a seek without triggering an unwanted advance.
                     */
                    this.advanceSector(drive);
                } while (true);
                return b;
            };
            
            /**
             * advanceSector(drive)
             *
             * This increments the sector number; when the sector number reaches drive.nDiskSectors on the current track, we
             * increment drive.bHead and reset drive.bSector, and when drive.bHead reaches drive.nDiskHeads, we reset drive.bHead
             * and increment drive.bCylinder.
             *
             * @this {FDC}
             * @param {Object} drive
             */
            FDC.prototype.advanceSector = function(drive)
            {
                this.assert(drive.bCylinder < drive.nDiskCylinders);
                drive.bSector++;
                var bSectorStart = 1;
                if (drive.bSector >= drive.nDiskSectors + bSectorStart) {
                    drive.bSector = bSectorStart;
                    drive.bHead++;
                    if (drive.bHead >= drive.nDiskHeads) {
                        drive.bHead = 0;
                        drive.bCylinder++;
                    }
                }
            };
            
            /**
             * writeFormat(drive, b)
             *
             * @this {FDC}
             * @param {Object} drive
             * @param {number} b containing a format command byte
             * @return {number} (b if successful, -1 if command should be terminated)
             */
            FDC.prototype.writeFormat = function(drive, b)
            {
                if (drive.resCode) return -1;
                drive.abFormat[drive.cbFormat++] = b;
                if (drive.cbFormat == drive.abFormat.length) {
                    drive.bCylinder = drive.abFormat[0];    // C
                    drive.bHead = drive.abFormat[1];        // H
                    drive.bSector = drive.abFormat[2];      // R
                    drive.nBytes = 128 << drive.abFormat[3];// N (0 => 128, 1 => 256, 2 => 512, 3 => 1024)
                    drive.cbFormat = 0;
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("writeFormat(head=" + str.toHexByte(drive.bHead) + ",cyl=" + str.toHexByte(drive.bCylinder) + ",sec=" + str.toHexByte(drive.bSector) + ",len=" + str.toHexWord(drive.nBytes) + ")");
                    }
                    for (var i = 0; i < drive.nBytes; i++) {
                        if (this.writeData(drive, drive.bFiller) < 0) {
                            return -1;
                        }
                    }
                    drive.cSectorsFormatted++;
                }
                if (drive.cSectorsFormatted >= drive.bSectorEnd) b = -1;
                return b;
            };
            
            /*
             * Port input notification table
             *
             * TODO: Even though port 0x3F7 was not present on controllers prior to MODEL_5170, I'm taking the easy
             * way out and always emulating it.  So, consider an FDC parameter to disable that feature for stricter compatibility.
             */
            FDC.aPortInput = {
                0x3F4: FDC.prototype.inFDCStatus,
                0x3F5: FDC.prototype.inFDCData,
                0x3F7: FDC.prototype.inFDCInput
            };
            
            /*
             * Port output notification table
             *
             * TODO: Even though port 0x3F7 was not present on controllers prior to MODEL_5170, I'm taking the easy
             * way out and always emulating it.  So, consider an FDC parameter to disable that feature for stricter compatibility.
             */
            FDC.aPortOutput = {
                0x3F2: FDC.prototype.outFDCOutput,
                0x3F5: FDC.prototype.outFDCData,
                0x3F7: FDC.prototype.outFDCControl
            };
            
            /**
             * FDC.init()
             *
             * This function operates on every HTML element of class "fdc", extracting the
             * JSON-encoded parameters for the FDC constructor from the element's "data-value"
             * attribute, invoking the constructor to create a FDC component, and then binding
             * any associated HTML controls to the new component.
             */
            FDC.init = function() {
                var aeFDC = Component.getElementsByClass(window.document, PCJSCLASS, "fdc");
                for (var iFDC = 0; iFDC < aeFDC.length; iFDC++) {
                    var eFDC = aeFDC[iFDC];
                    var parmsFDC = Component.getComponentParms(eFDC);
                    var fdc = new FDC(parmsFDC);
                    Component.bindComponentControls(fdc, eFDC, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every Floppy Drive Controller (FDC) module on the page.
             */
            web.onInit(FDC.init);
            
            if (typeof module !== 'undefined') module.exports = FDC;
            
          • hdc.js
            /**
             * @fileoverview Implements the PCjs Hard Drive Controller (HDC) component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Nov-26
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var DiskAPI     = require("../../shared/lib/diskapi");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var ChipSet     = require("./chipset");
                var Disk        = require("./disk");
                var State       = require("./state");
            }
            
            /**
             * HDC(parmsHDC)
             *
             * The HDC component simulates an STC-506/412 interface to an IBM-compatible fixed disk drive. The first
             * such drive was a 10Mb 5.25-inch drive containing two platters and 4 heads. Data spanned 306 cylinders
             * for a total of 1224 tracks, with 17 sectors/track and 512 bytes/sector.  Support has since been expanded
             * to include the original PC AT Western Digital controller.
             *
             * HDC supports the following component-specific properties:
             *
             *      drives: an array of driveConfig objects, each containing 'name', 'path', 'size' and 'type' properties
             *      type:   either 'xt' (for the PC XT Xebec controller) or 'at' (for the PC AT Western Digital controller)
             *
             * The 'type' parameter defaults to 'xt'.  All ports for the PC XT controller are referred to as XTC ports,
             * and similarly, all PC AT controller ports are referred to as ATC ports.
             *
             * If 'path' is empty, a scratch disk image is created; otherwise, we make a note of the path, but we will NOT
             * pre-load it like we do for floppy disk images.
             *
             * My current plan is to read all disk data on-demand, keeping a cache of what we've read, and possibly adding
             * some read-ahead as well. Any portions of the disk image that are written before being read will never be read.
             *
             * TRIVIA: On p.1-179 of the PC XT Technical Reference Manual (revised APR83), it reads:
             *
             *      "WARNING: The last cylinder on the fixed disk drive is reserved for diagnostic use.
             *      Diagnostic write tests will destroy any data on this cylinder."
             *
             * Does FDISK insure that the last cylinder is reserved?  I'm sure we'll eventually find out.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsHDC
             */
            function HDC(parmsHDC) {
            
                Component.call(this, "HDC", parmsHDC, HDC, Messages.HDC);
            
                this['dmaRead'] = this.dmaRead;
                this['dmaWrite'] = this.dmaWrite;
                this['dmaWriteBuffer'] = this.dmaWriteBuffer;
                this['dmaWriteFormat'] = this.dmaWriteFormat;
            
                this.aDriveConfigs = [];
            
                if (parmsHDC['drives']) {
                    try {
                        /*
                         * The most likely source of any exception will be right here, where we're parsing
                         * the JSON-encoded drive data.
                         */
                        this.aDriveConfigs = eval("(" + parmsHDC['drives'] + ")");
                        /*
                         * Nothing more to do with aDriveConfigs now. initController() and autoMount() (if there are
                         * any disk image "path" properties to process) will take care of the rest.
                         */
                    } catch (e) {
                        Component.error("HDC drive configuration error: " + e.message + " (" + parmsHDC['drives'] + ")");
                    }
                }
            
                /*
                 * Set fATC (AT Controller flag) according to the 'type' parameter.  This in turn determines other
                 * defaults.  For example, the default XT drive type is 3 (for a 10Mb disk drive), whereas the default
                 * AT drive type is 2 (for a 20Mb disk drive).
                 */
                this.fATC = (parmsHDC['type'] == "at");
                this.iHDC = this.fATC? 1 : 0;
                this.iDriveTypeDefault = this.fATC? 2 : 3;
            
                /*
                 * The remainder of HDC initialization now takes place in our initBus() handler
                 */
            }
            
            Component.subclass(HDC);
            
            /*
             * HDC defaults, in case drive parameters weren't specified
             */
            HDC.DEFAULT_DRIVE_NAME = "Hard Drive";
            
            /*
             * Each of the following DriveType entries contain (up to) 4 values:
             *
             *      [0]: total cylinders
             *      [1]: total heads
             *      [2]: total sectors/tracks (optional; default is 17)
             *      [3]: total bytes/sector (optional; default is 512)
             *
             * verifyDrive() attempts to confirm that these values agree with the programmed drive characteristics.
             */
            HDC.aDriveTypes = [
                {
                    0x00: [306, 2],
                    0x01: [375, 8],
                    0x02: [306, 6],
                    0x03: [306, 4]         // 10Mb (default XTC drive type)
                },
                /*
                 * Sadly, drive types differ across controller models (XTC drive types don't match ATC drive types),
                 * so aDriveTypes must first be indexed by a controller index (this.iHDC).
                 *
                 * The following is a more complete description of the drive types supported by the MODEL_5170, where C is
                 * Cylinders, H is Heads, WP is Write Pre-Comp, and LZ is Landing Zone (in practice, we don't need WP or LZ).
                 *
                 * Type    C    H   WP   LZ
                 * ----  ---   --  ---  ---
                 *   1   306    4  128  305
                 *   2   615    4  300  615
                 *   3   615    6  300  615
                 *   4   940    8  512  940
                 *   5   940    6  512  940
                 *   6   615    4   no  615
                 *   7   462    8  256  511
                 *   8   733    5   no  733
                 *   9   900   15  no8  901
                 *  10   820    3   no  820
                 *  11   855    5   no  855
                 *  12   855    7   no  855
                 *  13   306    8  128  319
                 *  14   733    7   no  733
                 *  15  (reserved--all zeros)
                 */
                {
                    0x01: [306, 4],         // 10Mb
                    0x02: [615, 4],         // 20Mb (default ATC drive type)
                    0x03: [615, 6],
                    0x04: [940, 8],
                    0x05: [940, 6],
                    0x06: [615, 4],
                    0x07: [462, 8],
                    0x08: [733, 5],
                    0x09: [900,15],
                    0x0A: [820, 3],
                    0x0B: [855, 5],
                    0x0C: [855, 7],
                    0x0D: [306, 8],
                    0x0E: [733, 7]
                }
            ];
            
            /*
             * ATC (AT Controller) Registers
             *
             * The "IBM Personal Computer AT Fixed Disk and Diskette Drive Adapter", aka the HFCOMBO card, contains what we refer
             * to here as the ATC (AT Controller).  Even though that card contains both Fixed Disk and Diskette Drive controllers,
             * this component (HDC) still deals only with the "Fixed Disk" portion.  Fortunately, the "Diskette Drive Adapter"
             * portion of the card is compatible with the existing FDC component, so that component continues to be responsible
             * for all diskette operations.
             *
             * ATC ports default to their primary addresses; secondary port addresses are 0x80 lower (eg, 0x170 instead of 0x1F0).
             *
             * It's important to know that the MODEL_5170 BIOS has a special relationship with the "Combo Hard File/Diskette
             * (HFCOMBO) Card" (see @F000:144C).  Initially, the ChipSet component intercepted reads for HFCOMBO's STATUS port
             * and returned the BUSY bit clear to reduce boot time; however, it turned out that was also a prerequisite for the
             * BIOS to write test patterns to the CYLLO port and set the "DUAL" bit (bit 0) of the "HFCNTRL" byte at 40:8Fh if
             * those CYLLO operations succeeded (now that the HDC is "ATC-aware", those ChipSet port intercepts have been removed).
             *
             * Without the "DUAL" bit set, when it came time later to report the diskette drive type, the "DISK_TYPE" function
             * (@F000:273D) would branch to one of two almost-identical blocks of code -- specifically, a block that disallowed
             * diskette drive types >= 2 (ChipSet.CMOS.FDRIVE.FD360) instead of >= 3 (ChipSet.CMOS.FDRIVE.FD1200).
             *
             * In other words, the "Fixed Disk" portion of the HFCOMBO controller has to be present and operational if the user
             * wants to use high-capacity (80-track) diskettes with "Diskette Drive" portion of the controller.  This may not be
             * immediately obvious to anyone creating a 5170 machine configuration with the FDC component but no HDC component.
             *
             * TODO: Investigate what a MODEL_5170 can do, if anything, with diskettes if an "HFCOMBO card" was NOT installed
             * (eg, was there Diskette-only Controller that could be installed, and if so, did it support high-capacity diskettes?)
             * Also, consider making the FDC component able to detect when the HDC is missing and provide the same minimal HFCOMBO
             * port intercepts that ChipSet once provided (this is not a compatibility requirement, just a usability improvement).
             */
            HDC.ATC = {
                DATA:   { PORT: 0x1F0},     // no register (read-write)
                DIAG:   {                   // this.regError (read-only)
                    PORT:       0x1F1,
                    NO_ERROR:    0x01,
                    CTRL_ERROR:  0x02,
                    SEC_ERROR:   0x03,
                    ECC_ERROR:   0x04,
                    PROC_ERROR:  0x05
                },
                ERROR: {                    // this.regError (read-only)
                    PORT:       0x1F1,
                    NONE:        0x00,
                    NO_DAM:      0x01,      // Data Address Mark (DAM) not found
                    NO_TRK0:     0x02,      // Track 0 not detected
                    CMD_ABORT:   0x04,      // Aborted Command
                    NO_CHS:      0x10,      // ID field with the specified C:H:S not found
                    ECC_ERR:     0x40,      // Data ECC Error
                    BAD_BLOCK:   0x80       // Bad Block Detect
                },
                WPREC:  { PORT: 0x1F1},     // this.regWPreC (write-only)
                SECCNT: { PORT: 0x1F2},     // this.regSecCnt (read-write; 0 implies a 256-sector request)
                SECNUM: { PORT: 0x1F3},     // this.regSecNum (read-write)
                CYLLO:  { PORT: 0x1F4},     // this.regCylLo (read-write; all 8 bits are used)
                CYLHI:  {                   // this.regCylHi (read-write; only bits 0-1 are used, for a total of 10 bits, or 1024 max cylinders)
                    PORT:       0x1F5,
                    MASK:        0x03
                },
                DRVHD:  {                   // this.regDrvHd (read-write)
                    PORT:       0x1F6,
                    HEAD_MASK:   0x0F,      // set this to the max number of heads before issuing a SET PARAMETERS command
                    DRIVE_MASK:  0x10,
                    SET_MASK:    0xE0,
                    SET_BITS:    0xA0       // for whatever reason, these bits must always be set
                },
                STATUS: {                   // this.regStatus (read-only; reading clears IRQ.ATC)
                    PORT:       0x1F7,
                    BUSY:        0x80,      // if this is set, no other STATUS bits are valid
                    READY:       0x40,      // if this is set (along with the SEEK_OK bit), the drive is ready to read/write/seek again
                    WFAULT:      0x20,      // write fault
                    SEEK_OK:     0x10,      // seek operation complete
                    DATA_REQ:    0x08,      // indicates that "the sector buffer requires servicing during a Read or Write command. If either bit 7 (BUSY) or this bit is active, a command is being executed. Upon receipt of any command, this bit is reset."
                    CORRECTED:   0x04,
                    INDEX:       0x02,      // set once for every revolution of the disk
                    ERROR:       0x01       // set when the previous command ended in an error; one or more bits are set in the ERROR register (the next command to the controller resets the ERROR bit)
                },
                COMMAND: {                  // this.regCommand (write-only)
                    PORT:       0x1F7,
                    RESTORE:     0x10,      // low nibble x 500us equal stepping rate (except for 0, which corresponds to 35us) (aka RECALIBRATE)
                    READ_DATA:   0x20,      // also supports NO_RETRIES and WITH_ECC
                    WRITE_DATA:  0x30,      // also supports NO_RETRIES and WITH_ECC
                    READ_VERF:   0x40,      // also supports NO_RETRIES
                    FORMAT_TRK:  0x50,
                    SEEK:        0x70,      // low nibble x 500us equal stepping rate (except for 0, which corresponds to 35us)
                    DIAGNOSE:    0x90,
                    SETPARMS:    0x91,
                    NO_RETRIES:  0x01,
                    WITH_ECC:    0x02,
                    MASK:        0xF0
                },
                FDR: {                      // this.regFDR
                    PORT:       0x3F6,
                    INT_DISABLE: 0x02,      // a logical 0 enables fixed disk interrupts
                    RESET:       0x04,      // a logical 1 enables reset fixed disk function
                    HS3:         0x08,      // a logical 1 enables head select 3 (a logical 0 enables reduced write current)
                    RESERVED:    0xF1
                }
            };
            
            /*
             * XTC (XT Controller) Registers
             */
            HDC.XTC = {
                /*
                 * XTC Data Register (0x320, read-write)
                 *
                 * Writes to this register are discussed below; see HDC Commands.
                 *
                 * Reads from this register after a command has been executed retrieve a "status byte",
                 * which must NOT be confused with the Status Register (see below).  This data "status byte"
                 * contains only two bits of interest: XTC.DATA.STATUS.ERROR and XTC.DATA.STATUS.UNIT.
                 */
                DATA: {
                    PORT:          0x320,   // port address
                    STATUS: {
                        OK:         0x00,   // no error
                        ERROR:      0x02,   // error occurred during command execution
                        UNIT:       0x20    // logical unit number of the drive
                    },
                    /*
                     * XTC Commands, as issued to XTC_DATA
                     *
                     * Commands are multi-byte sequences sent to XTC_DATA, starting with a XTC_DATA.CMD byte,
                     * and followed by 5 more bytes, for a total of 6 bytes, which collectively are called a
                     * Device Control Block (DCB).  Not all commands use all 6 bytes, but all 6 bytes must be present;
                     * unused bytes are simply ignored.
                     *
                     *      XTC_DATA.CMD    (3-bit class code, 5-bit operation code)
                     *      XTC_DATA.HEAD   (1-bit drive number, 5-bit head number)
                     *      XTC_DATA.CLSEC  (upper bits of 10-bit cylinder number, 6-bit sector number)
                     *      XTC_DATA.CH     (lower bits of 10-bit cylinder number)
                     *      XTC_DATA.COUNT  (8-bit interleave or block count)
                     *      XTC_DATA.CTRL   (8-bit control field)
                     *
                     * One command, HDC.XTC.DATA.CMD.INIT_DRIVE, must include 8 additional bytes following the DCB:
                     *
                     *      maximum number of cylinders (high)
                     *      maximum number of cylinders (low)
                     *      maximum number of heads
                     *      start reduced write current cylinder (high)
                     *      start reduced write current cylinder (low)
                     *      start write precompensation cylinder (high)
                     *      start write precompensation cylinder (low)
                     *      maximum ECC data burst length
                     *
                     * Note that the 3 word values above are stored in "big-endian" format (high byte followed by low byte),
                     * rather than the more typical "little-endian" format (low byte followed by high byte).
                     */
                    CMD: {
                        TEST_READY:     0x00,       // Test Drive Ready
                        RECALIBRATE:    0x01,       // Recalibrate
                        REQUEST_SENSE:  0x03,       // Request Sense Status
                        FORMAT_DRIVE:   0x04,       // Format Drive
                        READ_VERF:      0x05,       // Read Verify
                        FORMAT_TRK:     0x06,       // Format Track
                        FORMAT_BAD:     0x07,       // Format Bad Track
                        READ_DATA:      0x08,       // Read
                        WRITE_DATA:     0x0A,       // Write
                        SEEK:           0x0B,       // Seek
                        INIT_DRIVE:     0x0C,       // Initialize Drive Characteristics
                        READ_ECC_BURST: 0x0D,       // Read ECC Burst Error Length
                        READ_BUFFER:    0x0E,       // Read Data from Sector Buffer
                        WRITE_BUFFER:   0x0F,       // Write Data to Sector Buffer
                        RAM_DIAGNOSTIC: 0xE0,       // RAM Diagnostic
                        DRV_DIAGNOSTIC: 0xE3,       // HDC BIOS: CHK_DRV_CMD
                        CTL_DIAGNOSTIC: 0xE4,       // HDC BIOS: CNTLR_DIAG_CMD
                        READ_LONG:      0xE5,       // HDC BIOS: RD_LONG_CMD
                        WRITE_LONG:     0xE6        // HDC BIOS: WR_LONG_CMD
                    },
                    ERR: {
                        /*
                         * HDC error conditions, as returned in byte 0 of the (4) bytes returned by the Request Sense Status command
                         */
                        NONE:           0x00,
                        NO_INDEX:       0x01,       // no index signal detected
                        SEEK_INCOMPLETE:0x02,       // no seek-complete signal
                        WRITE_FAULT:    0x03,
                        NOT_READY:      0x04,       // after the controller selected the drive, the drive did not respond with a ready signal
                        NO_TRACK:       0x06,       // after stepping the max number of cylinders, the controller did not receive the track 00 signal from the drive
                        STILL_SEEKING:  0x08,
                        ECC_ID_ERROR:   0x10,
                        ECC_DATA_ERROR: 0x11,
                        NO_ADDR_MARK:   0x12,
                        NO_SECTOR:      0x14,
                        BAD_SEEK:       0x15,       // seek error: the cylinder and/or head address did not compare with the expected target address
                        ECC_CORRECTABLE:0x18,       // correctable data error
                        BAD_TRACK:      0x19,
                        BAD_CMD:        0x20,
                        BAD_DISK_ADDR:  0x21,
                        RAM:            0x30,
                        CHECKSUM:       0x31,
                        POLYNOMIAL:     0x32,
                        MASK:           0x3F
                    },
                    SENSE: {
                        ADDR_VALID:     0x80
                    }
                },
                /*
                 * XTC Status Register (0x321, read-only)
                 *
                 * WARNING: The IBM Technical Reference Manual *badly* confuses the XTC_DATA "status byte" (above)
                 * that the controller sends following an HDC.XTC.DATA.CMD operation with the Status Register (below).
                 * In fact, it's so badly confused that it completely fails to document any of the Status Register
                 * bits below; I'm forced to guess at their meanings from the HDC BIOS listing.
                 */
                STATUS: {
                    PORT:          0x321,   // port address
                    NONE:           0x00,
                    REQ:            0x01,   // HDC BIOS: request bit
                    IOMODE:         0x02,   // HDC BIOS: mode bit (GUESS: set whenever XTC_DATA contains a response?)
                    BUS:            0x04,   // HDC BIOS: command/data bit (GUESS: set whenever XTC_DATA ready for request?)
                    BUSY:           0x08,   // HDC BIOS: busy bit
                    INTERRUPT:      0x20    // HDC BIOS: interrupt bit
                }
            };
            
            /*
             * XTC Config Register (0x322, read-only)
             *
             * This register is used to read HDC card switch settings that defined the "Drive Type" for
             * drives 0 and 1.  SW[1],SW[2] (for drive 0) and SW[3],SW[4] (for drive 1) are set as follows:
             *
             *      ON,  ON     Drive Type 0   (306 cylinders, 2 heads)
             *      ON,  OFF    Drive Type 1   (375 cylinders, 8 heads)
             *      OFF, ON     Drive Type 2   (306 cylinders, 6 heads)
             *      OFF, OFF    Drive Type 3   (306 cylinders, 4 heads)
             */
            
            /*
             * HDC Command Sequences
             *
             * Unlike the FDC, all the HDC commands have fixed-length command request sequences (well, OK, except for
             * HDC.XTC.DATA.CMD.INIT_DRIVE) and fixed-length response sequences (well, OK, except for HDC.XTC.DATA.CMD.REQUEST_SENSE),
             * so a table of byte-lengths isn't much use, but having names for all the commands is still handy for debugging.
             */
            if (DEBUG) {
                HDC.aATCCommands = {
                    0x10: "Restore (Recalibrate)",
                    0x20: "Read",
                    0x30: "Write",
                    0x40: "Read Verify",
                    0x50: "Format Track",
                    0x70: "Seek",
                    0x90: "Diagnose",
                    0x91: "Set Parameters"
                };
                HDC.aXTCCommands = {
                    0x00: "Test Drive Ready",
                    0x01: "Recalibrate",
                    0x03: "Request Sense Status",
                    0x04: "Format Drive",
                    0x05: "Read Verify",
                    0x06: "Format Track",
                    0x07: "Format Bad Track",
                    0x08: "Read",
                    0x0A: "Write",
                    0x0B: "Seek",
                    0x0C: "Initialize Drive Characteristics",
                    0x0D: "Read ECC Burst Error Length",
                    0x0E: "Read Data from Sector Buffer",
                    0x0F: "Write Data to Sector Buffer",
                    0xE0: "RAM Diagnostic",
                    0xE3: "Drive Diagnostic",
                    0xE4: "Controller Diagnostic",
                    0xE5: "Read Long",
                    0xE6: "Write Long"
                };
            }
            
            /*
             * HDC BIOS interrupts, functions, and other parameters
             *
             * When the HDC BIOS overwrites the ROM BIOS INT 0x13 address, it saves the original INT 0x13 address
             * in the INT 0x40 vector.
             */
            HDC.BIOS = {
                INT_DISK:       0x13,
                INT_DISKETTE:   0x40
            };
            
            /*
             * NOTE: These are useful values for reference, but they're not actually used for anything at the moment.
             */
            HDC.BIOS.DISK_CMD = {
                RESET:          0x00,
                GET_STATUS:     0x01,
                READ_SECTORS:   0x02,
                WRITE_SECTORS:  0x03,
                VERIFY_SECTORS: 0x04,
                FORMAT_TRK:     0x05,
                FORMAT_BAD:     0x06,
                FORMAT_DRIVE:   0x07,
                GET_DRIVEPARMS: 0x08,
                SET_DRIVEPARMS: 0x09,
                READ_LONG:      0x0A,
                WRITE_LONG:     0x0B,
                SEEK:           0x0C,
                ALT_RESET:      0x0D,
                READ_BUFFER:    0x0E,
                WRITE_BUFFER:   0x0F,
                TEST_READY:     0x10,
                RECALIBRATE:    0x11,
                RAM_DIAGNOSTIC: 0x12,
                DRV_DIAGNOSTIC: 0x13,
                CTL_DIAGNOSTIC: 0x14
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {HDC}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "listDisks")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            HDC.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                /*
                 * This is reserved for future use; for now, hard disk images can be specified during initialization only (no "hot-swapping")
                 */
                return false;
            };
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {HDC}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            HDC.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.cmp = cmp;
            
                /*
                 * We need access to the ChipSet component, because we need to communicate with
                 * the PIC and DMA controller.
                 */
                this.chipset = cmp.getComponentByType("ChipSet");
            
                bus.addPortInputTable(this, this.fATC? HDC.aATCPortInput : HDC.aXTCPortInput);
                bus.addPortOutputTable(this, this.fATC? HDC.aATCPortOutput : HDC.aXTCPortOutput);
            
                cpu.addIntNotify(HDC.BIOS.INT_DISK, this, this.intBIOSDisk);
                cpu.addIntNotify(HDC.BIOS.INT_DISKETTE, this, this.intBIOSDiskette);
            
                /*
                 * The following code used to be performed in the HDC constructor, but now we need to wait for information
                 * about the Computer to be available (eg, getMachineID() and getUserID()) before we start loading and/or
                 * connecting to disk images.
                 *
                 * If we didn't need auto-mount support, we could defer controller initialization until we received a powerUp()
                 * notification, at which point reset() would call initController(), or restore() would restore the controller;
                 * in that case, all we'd need to do here is call setReady().
                 */
                this.reset();
            
                if (!this.autoMount()) this.setReady();
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {HDC}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            HDC.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data || !this.restore) {
                        this.initController();
                        if (this.cmp.fReload) {
                            /*
                             * If the computer's fReload flag is set, we're required to toss all currently
                             * loaded disks and remount all disks specified in the auto-mount configuration.
                             */
                            this.autoMount(true);
                        }
                    } else {
                        if (!this.restore(data)) return false;
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {HDC}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean}
             */
            HDC.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save? this.save() : true;
            };
            
            /**
             * getMachineID()
             *
             * @return {string}
             */
            HDC.prototype.getMachineID = function()
            {
                return this.cmp? this.cmp.getMachineID() : "";
            };
            
            /**
             * getUserID()
             *
             * @return {string}
             */
            HDC.prototype.getUserID = function()
            {
                return this.cmp? this.cmp.getUserID() : "";
            };
            
            /**
             * reset()
             *
             * @this {HDC}
             */
            HDC.prototype.reset = function()
            {
                /*
                 * TODO: The controller is also initialized by the constructor, to assist with auto-mount support,
                 * so think about whether we can skip powerUp initialization.
                 */
                this.initController(null, true);
            };
            
            /**
             * save()
             *
             * This implements save support for the HDC component.
             *
             * @this {HDC}
             * @return {Object}
             */
            HDC.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, this.saveController());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the HDC component.
             *
             * @this {HDC}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             */
            HDC.prototype.restore = function(data)
            {
                return this.initController(data[0]);
            };
            
            /**
             * initController(data, fHard)
             *
             * @this {HDC}
             * @param {Array} [data]
             * @param {boolean} [fHard] true if a machine reset (not just a controller reset)
             * @return {boolean} true if successful, false if failure
             */
            HDC.prototype.initController = function(data, fHard)
            {
                var i = 0;
                var fSuccess = true;
            
                /*
                 * At this point, it's worth calling into question my decision to NOT split the HDC component into separate XTC
                 * and ATC components, given all the differences, and given that I'm about to write some "if (ATC) else (XTC) ..."
                 * code.  And all I can say in my defense is, yes, it's definitely worth calling that into question.
                 *
                 * However, there's also some common code, mostly in the area of disk management rather than controller management,
                 * and if the components were split, then I'd have to create a third component for that common code (although again,
                 * disk management probably belongs in its own component anyway).
                 *
                 * However, let's not forget that since my overall plan is to have only one PCjs "binary", everything's going to end
                 * up in the same bucket anyway, so let's not be too obsessive about organizational details.  As long as the number
                 * of these conditionals is small and they're not performance-critical, this seems much ado about nothing.
                 */
                if (this.fATC) {
                    /*
                     * Since there's no way (and never will be a way) for an HDC to change its "personality" (from 'xt' to 'at'
                     * or vice versa), we're under no obligation to use the same number of registers, or save/restore format, etc,
                     * as the original XT controller.
                     */
                    if (data == null) data = [0, 0, 0, 0, 0, 0, 0, 0, HDC.ATC.STATUS.READY, 0];
                    this.regError   = data[i++];
                    this.regWPreC   = data[i++];
                    this.regSecCnt  = data[i++];
                    this.regSecNum  = data[i++];
                    this.regCylLo   = data[i++];
                    this.regCylHi   = data[i++];
                    this.regDrvHd   = data[i++];
                    this.regStatus  = data[i++];
                    this.regCommand = data[i++];
                    this.regFDR     = data[i++];
                    /*
                     * Additional state is maintained by the Drive object (eg, abSector, ibSector)
                     */
                } else {
                    if (data == null) data = [0, HDC.XTC.STATUS.NONE, new Array(14), 0, 0];
                    this.regConfig    = data[i++];
                    this.regStatus    = data[i++];
                    this.regDataArray = data[i++];  // there can be up to 14 command bytes (6 for normal commands, plus 8 more for HDC.XTC.DATA.CMD.INIT_DRIVE)
                    this.regDataIndex = data[i++];  // used to control the next data byte to be received
                    this.regDataTotal = data[i++];  // used to control the next data byte to be sent (internally, we use regDataIndex to read data bytes, up to this total)
                    this.regReset     = data[i++];
                    this.regPulse     = data[i++];
                    this.regPattern   = data[i++];
                    /*
                     * Initialize iDriveAllowFail only if it's never been initialized, otherwise its entire purpose will be defeated.
                     * See the related HACK in intBIOSDisk() for more details.
                     */
                    var iDriveAllowFail = data[i++];
                    if (iDriveAllowFail !== undefined) {
                        this.iDriveAllowFail = iDriveAllowFail;
                    } else {
                        if (this.iDriveAllowFail === undefined) this.iDriveAllowFail = -1;
                    }
                }
            
                if (this.aDrives === undefined) {
                    this.aDrives = new Array(this.aDriveConfigs.length);
                }
            
                var dataDrives = data[i];
                if (dataDrives === undefined) dataDrives = [];
            
                for (var iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    if (this.aDrives[iDrive] === undefined) {
                        this.aDrives[iDrive] = {};
                    }
                    var drive = this.aDrives[iDrive];
                    var driveConfig = this.aDriveConfigs[iDrive];
                    if (!this.initDrive(iDrive, drive, driveConfig, dataDrives[iDrive], fHard)) {
                        fSuccess = false;
                    }
                    /*
                     * XTC only: the original STC-506/412 controller had two pairs of DIP switches to indicate a drive
                     * type (0, 1, 2 or 3) for drives 0 and 1.  Those switch settings are recorded in regConfig, now that
                     * drive.type has been validated by initDrive().
                     */
                    if (this.regConfig != null && iDrive <= 1) {
                        this.regConfig |= (drive.type & 0x3) << ((1 - iDrive) << 1);
                    }
                }
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("HDC initialized for " + this.aDrives.length + " drive(s)");
                }
                return fSuccess;
            };
            
            /**
             * saveController()
             *
             * @this {HDC}
             * @return {Array}
             */
            HDC.prototype.saveController = function()
            {
                var i = 0;
                var data = [];
                if (this.fATC) {
                    data[i++] = this.regError;
                    data[i++] = this.regWPreC;
                    data[i++] = this.regSecCnt;
                    data[i++] = this.regSecNum;
                    data[i++] = this.regCylLo;
                    data[i++] = this.regCylHi;
                    data[i++] = this.regDrvHd;
                    data[i++] = this.regStatus;
                    data[i++] = this.regCommand;
                    data[i++] = this.regFDR;
                } else {
                    data[i++] = this.regConfig;
                    data[i++] = this.regStatus;
                    data[i++] = this.regDataArray;
                    data[i++] = this.regDataIndex;
                    data[i++] = this.regDataTotal;
                    data[i++] = this.regReset;
                    data[i++] = this.regPulse;
                    data[i++] = this.regPattern;
                    data[i++] = this.iDriveAllowFail;
                }
                data[i] = this.saveDrives();
                return data;
            };
            
            /**
             * initDrive(iDrive, drive, driveConfig, data, fHard)
             *
             * TODO: Consider a separate Drive class that both FDC and HDC can use, since there's a lot of commonality
             * between the drive objects created by both controllers.  This will clean up overall drive management and allow
             * us to factor out some common Drive methods (eg, advanceSector()).
             *
             * @this {HDC}
             * @param {number} iDrive
             * @param {Object} drive
             * @param {Object} driveConfig (contains one or more of the following properties: 'name', 'path', 'size', 'type')
             * @param {Array} [data]
             * @param {boolean} [fHard] true if a machine reset (not just a controller reset)
             * @return {boolean} true if successful, false if failure
             */
            HDC.prototype.initDrive = function(iDrive, drive, driveConfig, data, fHard)
            {
                var i = 0;
                var fSuccess = true;
                if (data === undefined) data = [HDC.XTC.DATA.ERR.NONE, 0, false, new Array(8)];
            
                drive.iDrive = iDrive;
            
                /*
                 * errorCode could be an HDC global, but in order to insulate HDC state from the operation of various functions
                 * that operate on drive objects (eg, readData and writeData), I've made it a per-drive variable.  This choice may
                 * be contrary to how the actual hardware works, but I prefer this approach, as long as it doesn't expose any
                 * incompatibilities that any software actually cares about.
                 */
                drive.errorCode = data[i++];
                drive.senseCode = data[i++];
                drive.fRemovable = data[i++];
                drive.abDriveParms = data[i++];         // captures drive parameters programmed via HDC.XTC.DATA.CMD.INIT_DRIVE
            
                /*
                 * TODO: Make abSector a DWORD array rather than a BYTE array (we could even allocate a Memory block for it);
                 * alternatively, eliminate the buffer entirely and re-establish a reference to the appropriate Disk sector object.
                 */
                drive.abSector = data[i++];
            
                /*
                 * The next group of properties are set by various HDC command sequences.
                 */
                drive.bHead = data[i++];
                drive.nHeads = data[i++];
                drive.wCylinder = data[i++];
                drive.bSector = data[i++];
                drive.bSectorEnd = data[i++];           // aka EOT
                drive.nBytes = data[i++];
                drive.bSectorBias = (this.fATC? 0: 1);
            
                drive.name = driveConfig['name'];
                if (drive.name === undefined) drive.name = HDC.DEFAULT_DRIVE_NAME;
                drive.path = driveConfig['path'];
            
                /*
                 * If no 'mode' is specified, we fall back to the original behavior, which is to completely preload
                 * any specific disk image, or create an empty (purely local) disk image.
                 */
                drive.mode = driveConfig['mode'] || (drive.path? DiskAPI.MODE.PRELOAD : DiskAPI.MODE.LOCAL);
            
                /*
                 * On-demand I/O of raw disk images is supported only if there's a valid user ID; fall back to an empty
                 * local disk image if there's not.
                 */
                if (drive.mode == DiskAPI.MODE.DEMANDRO || drive.mode == DiskAPI.MODE.DEMANDRW) {
                    if (!this.getUserID()) drive.mode = DiskAPI.MODE.LOCAL;
                }
            
                drive.type = driveConfig['type'];
                if (drive.type === undefined || HDC.aDriveTypes[this.iHDC][drive.type] === undefined) drive.type = this.iDriveTypeDefault;
            
                var driveType = HDC.aDriveTypes[this.iHDC][drive.type];
                drive.nSectors = driveType[2] || 17;    // sectors/track
                drive.cbSector = driveType[3] || 512;   // bytes/sector (default is 512 if unspecified in the table)
            
                /*
                 * On a full machine reset, pass the current drive type to setCMOSDriveType() (a no-op on pre-CMOS machines)
                 */
                if (fHard && this.chipset) {
                    this.chipset.setCMOSDriveType(iDrive, drive.type);
                }
            
                /*
                 * The next group of properties are set by user requests to load/unload disk images.
                 *
                 * We no longer reinitialize drive.disk, in order to retain previously mounted disk across resets.
                 */
                if (drive.disk === undefined) {
                    drive.disk = null;
                    this.notice("Type " + drive.type + " \"" + drive.name + "\" is fixed disk " + iDrive, true);
                }
            
                /*
                 * With the advent of save/restore, we need to verify every drive at initialization, not just whenever
                 * drive characteristics are initialized.  Thus, if we've restored a sensible set of drive characteristics,
                 * then verifyDrive will create an empty disk if none has been provided, insuring we are ready for
                 * disk.restore().
                 */
                this.verifyDrive(drive);
            
                /*
                 * The next group of properties are managed by worker functions (eg, doDMARead()) to maintain state across DMA requests.
                 */
                drive.ibSector = data[i++];             // location of the next byte to be accessed in the above sector
                drive.sector = null;                    // initialized to null by worker, and then set to the next sector satisfying the request
            
                if (drive.disk) {
                    var deltas = data[i];
                    if (deltas !== undefined && drive.disk.restore(deltas) < 0) {
                        fSuccess = false;
                    }
                    if (fSuccess && drive.ibSector !== undefined) {
                        drive.sector = drive.disk.seek(drive.wCylinder, drive.bHead, drive.bSector + drive.bSectorBias);
                    }
                }
                return fSuccess;
            };
            
            /**
             * saveDrives()
             *
             * @this {HDC}
             * @return {Array}
             */
            HDC.prototype.saveDrives = function()
            {
                var i = 0;
                var data = [];
                for (var iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    data[i++] = this.saveDrive(this.aDrives[iDrive]);
                }
                return data;
            };
            
            /**
             * saveDrive(drive)
             *
             * @this {HDC}
             * @return {Array}
             */
            HDC.prototype.saveDrive = function(drive)
            {
                var i = 0;
                var data = [];
                data[i++] = drive.errorCode;
                data[i++] = drive.senseCode;
                data[i++] = drive.fRemovable;
                data[i++] = drive.abDriveParms;
                data[i++] = drive.abSector;
                data[i++] = drive.bHead;
                data[i++] = drive.nHeads;
                data[i++] = drive.wCylinder;
                data[i++] = drive.bSector;
                data[i++] = drive.bSectorEnd;
                data[i++] = drive.nBytes;
                data[i++] = drive.ibSector;
                data[i] = drive.disk? drive.disk.save() : null;
                return data;
            };
            
            /**
             * copyDrive(iDrive)
             *
             * @this {HDC}
             * @param {number} iDrive
             * @return {Object|undefined} (undefined if the requested drive does not exist)
             */
            HDC.prototype.copyDrive = function(iDrive)
            {
                var driveNew;
                var driveOld = this.aDrives[iDrive];
                if (driveOld !== undefined) {
                    driveNew = {};
                    for (var p in driveOld) {
                        driveNew[p] = driveOld[p];
                    }
                }
                return driveNew;
            };
            
            /**
             * verifyDrive(drive, type)
             *
             * If no disk image is attached, create an empty disk with the specified drive characteristics.
             * Normally, we'd rely on the drive characteristics programmed via the HDC.XTC.DATA.CMD.INIT_DRIVE
             * command, but if an explicit drive type is specified, then we use the characteristics (geometry)
             * associated with that type.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} [type] to create a disk of the specified type, if no disk exists yet
             */
            HDC.prototype.verifyDrive = function(drive, type)
            {
                if (drive) {
                    var nHeads = 0, nCylinders = 0;
                    if (type == null) {
                        /*
                         * If the caller wants us to use the programmed drive parameters, we use those,
                         * but if there aren't any drive parameters (yet), then use default parameters based
                         * on drive.type.
                         *
                         * We used to do the last step ONLY if there was no drive.path -- otherwise, we'd waste
                         * time creating an empty disk if autoMount() was going to load an image from drive.path;
                         * but hopefully the Disk component is smarter now.
                         */
                        nHeads = drive.abDriveParms[2];
                        if (nHeads) {
                            nCylinders = (drive.abDriveParms[0] << 8) | drive.abDriveParms[1];
                        } else {
                            type = drive.type;
                        }
                    }
                    if (type != null && !nHeads) {
                        nHeads = HDC.aDriveTypes[this.iHDC][type][1];
                        nCylinders = HDC.aDriveTypes[this.iHDC][type][0];
                    }
                    if (nHeads) {
                        /*
                         * The assumption here is that if the 3rd drive parameter byte (abDriveParms[2]) has been set
                         * (ie, if nHeads is valid) then the first two bytes (ie, the low and high cylinder byte values)
                         * must have been set as well.
                         *
                         * Do these values agree with those for the given drive type?  Even if they don't, all we do is warn.
                         */
                        var driveType = HDC.aDriveTypes[this.iHDC][drive.type];
                        if (driveType) {
                            if (nCylinders != driveType[0] && nHeads != driveType[1]) {
                                this.notice("Warning: drive parameters (" + nCylinders + "," + nHeads + ") do not match drive type " + drive.type + " (" + driveType[0] + "," + driveType[1] + ")");
                            }
                        }
                        drive.nCylinders = nCylinders;
                        drive.nHeads = nHeads;
                        if (drive.disk == null) {
                            drive.disk = new Disk(this, drive, drive.mode);
                        }
                    }
                }
            };
            
            /**
             * seekDrive(drive, iSector, nSectors)
             *
             * The HDC doesn't need this function, since all HDC requests from the CPU are handled by doXTCmd().  This function
             * is used by other components (eg, Debugger) to mimic an HDC request, using a drive object obtained from copyDrive(),
             * to avoid disturbing the internal state of the HDC's drive objects.
             *
             * Also note that in an actual HDC request, drive.nBytes is initialized to the size of a single sector; the extent
             * of the entire transfer is actually determined by a count that has been pre-loaded into the DMA controller.  The HDC
             * isn't aware of the extent of the transfer, so in the case of a read request, all readData() can do is return bytes
             * until the current track (or, in the case of a multi-track request, the current cylinder) has been exhausted.
             *
             * Since seekDrive() is for use with non-DMA requests, we use nBytes to specify the length of the entire transfer.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} iSector (a "logical" sector number, relative to the entire disk, NOT a physical sector number)
             * @param {number} nSectors
             * @return {boolean} true if successful, false if invalid position request
             */
            HDC.prototype.seekDrive = function(drive, iSector, nSectors)
            {
                if (drive.disk) {
                    var aDiskInfo = drive.disk.info();
                    var nCylinders = aDiskInfo[0];
                    /*
                     * If nCylinders is zero, we probably have an empty disk image, awaiting initialization (see verifyDrive())
                     */
                    if (nCylinders) {
                        var nHeads = aDiskInfo[1];
                        var nSectorsPerTrack = aDiskInfo[2];
                        var nSectorsPerCylinder = nHeads * nSectorsPerTrack;
                        var nSectorsPerDisk = nCylinders * nSectorsPerCylinder;
                        if (iSector + nSectors <= nSectorsPerDisk) {
                            drive.wCylinder = Math.floor(iSector / nSectorsPerCylinder);
                            iSector %= nSectorsPerCylinder;
                            drive.bHead = Math.floor(iSector / nSectorsPerTrack);
                            /*
                             * Important difference between the FDC and the XTC: the XTC uses 0-based sector numbers, so unlike
                             * FDC.seekDrive(), we must NOT add 1 to bSector below.  I could change how sector numbers are stored in
                             * hard disk images, but it seems preferable to keep the image format consistent and controller-independent.
                             */
                            drive.bSector = (iSector % nSectorsPerTrack);
                            drive.nBytes = nSectors * aDiskInfo[3];
                            /*
                             * NOTE: We don't set nSectorEnd, as an HDC command would, but it's irrelevant, because we don't actually
                             * do anything with nSectorEnd at this point.  Perhaps someday, when we faithfully honor/restrict requests
                             * to a single track (or a single cylinder, in the case of multi-track requests).
                             */
                            drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                            /*
                             * At this point, we've finished simulating what an HDC.XTC.DATA.CMD.READ_DATA command would have performed,
                             * up through doDMARead().  Now it's the caller responsibility to call readData(), like the DMA Controller would.
                             */
                            return true;
                        }
                    }
                }
                return false;
            };
            
            /**
             * autoMount(fRemount)
             *
             * @this {HDC}
             * @param {boolean} [fRemount] is true if we're remounting all auto-mounted disks
             * @return {boolean} true if one or more disk images are being auto-mounted, false if none
             */
            HDC.prototype.autoMount = function(fRemount)
            {
                if (!fRemount) this.cAutoMount = 0;
            
                for (var iDrive = 0; iDrive < this.aDrives.length; iDrive++) {
                    var drive = this.aDrives[iDrive];
                    if (drive.name && drive.path) {
            
                        if (fRemount && drive.disk && drive.disk.isRemote()) {
                            /*
                             * The Disk component has its own logic for remounting remote disks, so skip this disk.
                             *
                             * TODO: Consider rewriting how ALL disks are automounted/remounted, now that the Disk component
                             * is receiving its own powerDown() and powerUp() notifications (originally, it didn't receive them).
                             */
                            continue;
                        }
            
                        if (!this.loadDisk(iDrive, drive.name, drive.path, true) && fRemount)
                            this.setReady(false);
                        continue;
                    }
                    if (fRemount && drive.type !== undefined) {
                        drive.disk = null;
                        this.verifyDrive(drive, drive.type);
                    }
                }
                return !!this.cAutoMount;
            };
            
            /**
             * loadDisk(iDrive, sDiskName, sDiskPath, fAutoMount)
             *
             * @this {HDC}
             * @param {number} iDrive
             * @param {string} sDiskName
             * @param {string} sDiskPath
             * @param {boolean} fAutoMount
             * @return {boolean} true if disk (already) loaded, false if queued up (or busy)
             */
            HDC.prototype.loadDisk = function(iDrive, sDiskName, sDiskPath, fAutoMount)
            {
                var drive = this.aDrives[iDrive];
                if (drive.fBusy) {
                    this.notice("Drive " + iDrive + " busy");
                    return true;
                }
                drive.fBusy = true;
                if (fAutoMount) {
                    drive.fAutoMount = true;
                    this.cAutoMount++;
                    if (this.messageEnabled()) this.printMessage("loading " + sDiskName);
                }
                var disk = drive.disk || new Disk(this, drive, drive.mode);
                disk.load(sDiskName, sDiskPath, null, this.doneLoadDisk);
                return false;
            };
            
            /**
             * doneLoadDisk(drive, disk, sDiskName, sDiskPath)
             *
             * This is a callback issued by the Disk component once the load() operation has finished.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {Disk} disk is set if the disk was successfully mounted, null if not
             * @param {string} sDiskName
             * @param {string} sDiskPath
             */
            HDC.prototype.doneLoadDisk = function(drive, disk, sDiskName, sDiskPath)
            {
                drive.fBusy = false;
                if ((drive.disk = disk)) {
                    /*
                     * With the addition of notify(), users are now "alerted" whenever a diskette has finished loading;
                     * notify() is selective about its output, using print() if a print window is open, otherwise alert().
                     *
                     * WARNING: This conversion of drive number to drive letter, starting with "C:" (0x43), is very simplistic
                     * and is not guaranteed to match the drive mapping that DOS ultimately uses.
                     */
                    this.notice("Mounted disk \"" + sDiskName + "\" in drive " + String.fromCharCode(0x43 + drive.iDrive), drive.fAutoMount);
                }
                if (drive.fAutoMount) {
                    drive.fAutoMount = false;
                    if (!--this.cAutoMount) this.setReady();
                }
            };
            
            /**
             * unloadDrive(iDrive)
             *
             * NOTE: At the moment, we support only auto-mounts; there is no user interface for selecting hard disk images,
             * let alone unloading them, so there is currently no need for the following function.
             *
             * @this {HDC}
             * @param {number} iDrive
             *
             HDC.prototype.unloadDrive = function(iDrive)
             {
                this.aDrives[iDrive].disk = null;
                //
                // WARNING: This conversion of drive number to drive letter, starting with "C:" (0x43), is very simplistic
                // and is not guaranteed to match the drive mapping that DOS ultimately uses.
                //
                this.notice("Drive " + String.fromCharCode(0x43 + iDrive) + " unloaded");
            };
             */
            
            /**
             * intXTCData(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x320)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inXTCData = function(port, addrFrom)
            {
                var bIn = 0;
                if (this.regDataIndex < this.regDataTotal) {
                    bIn = this.regDataArray[this.regDataIndex];
                }
                if (this.chipset) this.chipset.clearIRR(ChipSet.IRQ.XTC);
                this.regStatus &= ~HDC.XTC.STATUS.INTERRUPT;
            
                this.printMessageIO(port, null, addrFrom, "DATA[" + this.regDataIndex + "]", bIn);
                if (++this.regDataIndex >= this.regDataTotal) {
                    this.regDataIndex = this.regDataTotal = 0;
                    this.regStatus &= ~(HDC.XTC.STATUS.IOMODE | HDC.XTC.STATUS.BUS | HDC.XTC.STATUS.BUSY);
                }
                return bIn;
            };
            
            /**
             * outXTCData(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x320)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outXTCData = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "DATA[" + this.regDataTotal + "]");
                if (this.regDataTotal < this.regDataArray.length) {
                    this.regDataArray[this.regDataTotal++] = bOut;
                }
                var bCmd = this.regDataArray[0];
                var cbCmd = (bCmd != HDC.XTC.DATA.CMD.INIT_DRIVE? 6 : this.regDataArray.length);
                if (this.regDataTotal == 6) {
                    /*
                     * XTC.STATUS.REQ must be CLEAR following any 6-byte command sequence that the HDC BIOS "COMMAND" function outputs,
                     * yet it must also be SET before the HDC BIOS will proceed with the remaining the 8-byte sequence that's part of
                     * HDC.XTC.DATA.CMD.INIT_DRIVE command. See inXTCStatus() for HACK details.
                     */
                    this.regStatus &= ~HDC.XTC.STATUS.REQ;
                }
                if (this.regDataTotal >= cbCmd) {
                    /*
                     * It's essential that XTC.STATUS.IOMODE be set here, at least after the final 8-byte HDC.XTC.DATA.CMD.INIT_DRIVE sequence.
                     */
                    this.regStatus |= HDC.XTC.STATUS.IOMODE;
                    this.regStatus &= ~HDC.XTC.STATUS.REQ;
                    this.doXTC();
                }
            };
            
            /**
             * inXTCStatus(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x321)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inXTCStatus = function(port, addrFrom)
            {
                var b = this.regStatus;
                this.printMessageIO(port, null, addrFrom, "STATUS", b);
                /*
                 * HACK: The HDC BIOS will not finish the HDC.XTC.DATA.CMD.INIT_DRIVE sequence unless it sees XTC.STATUS.REQ set again, nor will
                 * it read any of the XTC.DATA bytes returned from a HDC.XTC.DATA.CMD.REQUEST_SENSE command unless XTC.STATUS.REQ is set again, so
                 * we turn it back on if there are unprocessed data bytes.
                 */
                if (this.regDataIndex < this.regDataTotal) {
                    this.regStatus |= HDC.XTC.STATUS.REQ;
                }
                return b;
            };
            
            /**
             * outXTCReset(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x321)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outXTCReset = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "RESET");
                /*
                 * Not sure what to do with this value, and the value itself may be "don't care", but we'll save it anyway.
                 */
                this.regReset = bOut;
                if (this.chipset) this.chipset.clearIRR(ChipSet.IRQ.XTC);
                this.initController();
            };
            
            /**
             * inXTCConfig(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x322)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inXTCConfig = function(port, addrFrom)
            {
                this.printMessageIO(port, null, addrFrom, "CONFIG", this.regConfig);
                return this.regConfig;
            };
            
            /**
             * outXTCPulse(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x322)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outXTCPulse = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "PULSE");
                /*
                 * Not sure what to do with this value, and the value itself may be "don't care", but we'll save it anyway.
                 */
                this.regPulse = bOut;
                /*
                 * The HDC BIOS "COMMAND" function (@C800:0562) waits for these ALL status bits after writing to both regPulse
                 * and regPattern, so we must oblige it.
                 *
                 * TODO: Figure out exactly when either XTC.STATUS.BUS or XTC.STATUS.BUSY are supposed to be cleared.
                 * The HDC BIOS doesn't care much about them, except for the one location mentioned above. However, MS-DOS 4.0
                 * (aka the unreleased "multitasking" version of MS-DOS) cares, so I'm going to start by clearing them at the
                 * same point I clear XTC.STATUS.IOMODE.
                 */
                this.regStatus = HDC.XTC.STATUS.REQ | HDC.XTC.STATUS.BUS | HDC.XTC.STATUS.BUSY;
            };
            
            /**
             * outXTCPattern(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x323)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outXTCPattern = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "PATTERN");
                this.regPattern = bOut;
            };
            
            /**
             * outXTCNoise(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x327, 0x32B or 0x32F)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outXTCNoise = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "NOISE");
            };
            
            /**
             * inATCData(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F0)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCData = function(port, addrFrom)
            {
                var bIn = -1;
            
                if (this.drive) {
                    /*
                     * We use the synchronous form of readData() at this point because we have no choice; an I/O instruction
                     * has just occurred and cannot be delayed.  The good news is that doATCommand() should have already primed
                     * the pump; all we can do is assert that the pump has something in it.  If bIn is inexplicably negative,
                     * well, then the caller will get 0xff.
                     */
                    var hdc = this;
                    bIn = this.readData(this.drive, function(b, fAsync, obj, off) {
                        hdc.assert(!fAsync);
                        if (BACKTRACK) {
                            if (!off && obj.file && hdc.messageEnabled(Messages.DISK)) {
                                hdc.printMessage("loading " + obj.file.sPath + '[' + obj.offFile + "] via port " + str.toHexWord(port), true);
                            }
                            /*
                             * TODO: We could define a cached BTO that's reset prior to a new ATC command, and then pass that
                             * to addBackTrackObject() here instead of null; but for now, we're going to rely on that function's
                             * simplistic MRU logic.  If that fails, the worst that will (or should) happen is we'll burn through
                             * more BackTrack wrapper objects than necessary, and risk running out.
                             */
                            var bto = hdc.bus.addBackTrackObject(obj, null, off);
                            hdc.cpu.backTrack.btiIO = hdc.bus.getBackTrackIndex(bto, off);
                        }
                    });
                    this.assert(bIn >= 0);
            
                    if (this.drive.ibSector == 1) {
                        /*
                         * printMessageIO() calls, if enabled, can be overwhelming for this port, so limit them to the first byte
                         * of each sector.
                         */
                        if (this.messageEnabled(Messages.PORT | Messages.HDC)) {
                            this.printMessageIO(port, null, addrFrom, "DATA[" + this.drive.ibSector + "]", bIn);
                        }
                    }
                    else if (this.drive.ibSector == this.drive.cbSector) {
                        /*
                         * Now that we've supplied a full sector of data, see if the caller's expecting additional sectors;
                         * if so, prime the pump again.  The caller should not poll us again until another interrupt's been delivered.
                         */
                        if (this.messageEnabled(Messages.DATA | Messages.HDC)) {
                            var sDump = this.drive.disk.dumpSector(this.drive.sector);
                            if (sDump) this.dbg.message(sDump);
                        }
            
                        this.drive.nBytes -= this.drive.cbSector;
                        this.regSecCnt = (this.regSecCnt - 1) & 0xff;
                        /*
                         * TODO: If the WITH_ECC bit is set in the READ_DATA command, then we need to support "stuffing" 4
                         * additional bytes into the inATCData() stream.  And we must first set DATA_REQ in the STATUS register.
                         */
                        if (this.drive.nBytes >= this.drive.cbSector) {
                            hdc.regStatus = HDC.ATC.STATUS.BUSY | HDC.ATC.STATUS.DATA_REQ;
                            this.readData(this.drive, function(b, fAsync) {
                                if (b >= 0) {
                                    hdc.setATCIRR();
                                    hdc.regStatus = HDC.ATC.STATUS.READY | HDC.ATC.STATUS.SEEK_OK;
                                } else {
                                    /*
                                     * TODO: It would be nice to be a bit more specific about the error (if any) that just occurred.
                                     * Consult drive.errorCode (it uses older XTC error codes, but mapping those codes should be trivial).
                                     */
                                     hdc.regStatus = HDC.ATC.STATUS.ERROR;
                                     hdc.regError = HDC.ATC.ERROR.NO_CHS;
                                    if (DEBUG) hdc.printMessage("HDC.inATCData(): read failed");
                                }
                            }, false);
                        } else {
                            this.assert(!this.drive.nBytes);
                            this.regStatus = HDC.ATC.STATUS.READY | HDC.ATC.STATUS.SEEK_OK;
                        }
                    }
                }
                return bIn;
            };
            
            /**
             * outATCData(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F0)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCData = function(port, bOut, addrFrom)
            {
                if (this.drive) {
                    if (this.drive.nBytes >= this.drive.cbSector) {
                        if (this.writeData(this.drive, bOut) < 0) {
                            /*
                             * TODO: It would be nice to be a bit more specific about the error (if any) that just occurred.
                             * Consult drive.errorCode (it uses older XTC error codes, but mapping those codes should be trivial).
                             */
                            this.regStatus = HDC.ATC.STATUS.ERROR;
                            this.regError = HDC.ATC.ERROR.NO_CHS;
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("HDC.outATCData(" + str.toHexByte(bOut) + "): write failed");
                            }
                        }
                        else if (this.drive.ibSector == 1) {
                            /*
                             * printMessageIO() calls, if enabled, can be overwhelming for this port, so limit them to the first byte
                             * of each sector.
                             */
                            if (this.messageEnabled(Messages.PORT | Messages.HDC)) {
                                this.printMessageIO(port, bOut, addrFrom, "DATA[" + this.drive.ibSector + "]");
                            }
                        }
                        else if (this.drive.ibSector == this.drive.cbSector) {
            
                            if (this.messageEnabled(Messages.DATA | Messages.HDC)) {
                                var sDump = this.drive.disk.dumpSector(this.drive.sector);
                                if (sDump) this.dbg.message(sDump);
                            }
            
                            this.drive.nBytes -= this.drive.cbSector;
                            this.regSecCnt = (this.regSecCnt - 1) & 0xff;
                            this.setATCIRR(true);
                            this.regStatus = HDC.ATC.STATUS.READY | HDC.ATC.STATUS.SEEK_OK;
                            if (this.drive.nBytes >= this.drive.cbSector) {
                                this.regStatus |= HDC.ATC.STATUS.DATA_REQ;
                            } else {
                                this.assert(!this.drive.nBytes);
                            }
                        }
                    } else {
                        /*
                         * TODO: What to do about unexpected writes? The number of bytes has exceeded what the command specified.
                         */
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("HDC.outATCData(" + str.toHexByte(bOut) + "): write exceeds count (" + this.drive.nBytes + ")");
                        }
                    }
                } else {
                    /*
                     * TODO: What to do about unexpected writes? No command was specified.
                     */
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("HDC.outATCData(" + str.toHexByte(bOut) + "): write without command");
                    }
                }
            };
            
            /**
             * inATCError(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F1)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCError = function(port, addrFrom)
            {
                var bIn = this.regError;
                this.printMessageIO(port, null, addrFrom, "ERROR", bIn);
                return bIn;
            };
            
            /**
             * outATCWPreC(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F1)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCWPreC = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "WPREC");
                this.regWPreC = bOut;
            };
            
            /**
             * inATCSecCnt(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F2)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCSecCnt = function(port, addrFrom)
            {
                var bIn = this.regSecCnt;
                this.printMessageIO(port, null, addrFrom, "SECCNT", bIn);
                return bIn;
            };
            
            /**
             * outATCSecCnt(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F2)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCSecCnt = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "SECCNT");
                this.regSecCnt = bOut;
            };
            
            /**
             * inATCSecNum(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F3)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCSecNum = function(port, addrFrom)
            {
                var bIn = this.regSecNum;
                this.printMessageIO(port, null, addrFrom, "SECNUM", bIn);
                return bIn;
            };
            
            /**
             * outATCSecNum(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F3)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCSecNum = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "SECNUM");
                this.regSecNum = bOut;
            };
            
            /**
             * inATCCylLo(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F4)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCCylLo = function(port, addrFrom)
            {
                var bIn = this.regCylLo;
                this.printMessageIO(port, null, addrFrom, "CYLLO", bIn);
                return bIn;
            };
            
            /**
             * outATCCylLo(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F4)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCCylLo = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "CYLLO");
                this.regCylLo = bOut;
            };
            
            /**
             * inATCCylHi(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F5)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCCylHi = function(port, addrFrom)
            {
                var bIn = this.regCylHi;
                this.printMessageIO(port, null, addrFrom, "CYLHI", bIn);
                return bIn;
            };
            
            /**
             * outATCCylHi(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F5)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCCylHi = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "CYLHI");
                this.regCylHi = bOut;
            };
            
            /**
             * inATCDrvHd(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F6)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCDrvHd = function(port, addrFrom)
            {
                var bIn = this.regDrvHd;
                this.printMessageIO(port, null, addrFrom, "DRVHD", bIn);
                return bIn;
            };
            
            /**
             * outATCDrvHd(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F6)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCDrvHd = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "DRVHD");
                this.regDrvHd = bOut;
                /*
                 * The MODEL_5170_REV3 BIOS (see "POST2_CHK_HF2" @F000:14FC) probes for a 2nd hard drive when the number
                 * of configured hard drives is something other than 2, using INT 0x13/AH=0x10.  This in turn calls the
                 * BIOS "TST_RDY" function, which selects the drive in this register (see DRIVE_MASK), and then immediately
                 * expects regStatus to reflect success or failure.
                 *
                 * We were always returning success, because no ATC command was actually issued, and so the user would
                 * always get a spurious CMOS configuration error: "System Options Not Set-(Run SETUP)".
                 *
                 * So now we update regStatus here.  I'm not sure which status bits are normally set to indicate failure,
                 * but it should be sufficient to set or clear the READY bit according to whether the drive exists or not.
                 *
                 * TODO: Dig into the ATC documentation some more, and determine what other situations, if any, regStatus
                 * needs to be updated.
                 */
                var iDrive = (this.regDrvHd & HDC.ATC.DRVHD.DRIVE_MASK? 1 : 0);
                if (this.aDrives[iDrive]) {
                    this.regStatus |= HDC.ATC.STATUS.READY;
                } else {
                    this.regStatus &= ~HDC.ATC.STATUS.READY;
                }
            };
            
            /**
             * inATCStatus(port, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F7)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            HDC.prototype.inATCStatus = function(port, addrFrom)
            {
                var bIn = this.regStatus;
                this.printMessageIO(port, null, addrFrom, "STATUS", bIn);
                /*
                 * Despite what IBM's documentation for the "Personal Computer AT Fixed Disk and Diskette Drive Adapter"
                 * (August 31, 1984) says (ie, "A read of the status register clears interrupt request 14"), we cannot
                 * unilaterally clear the IRQ on any read of STATUS.  For starters, that would completely break the PC AT
                 * ROM BIOS; here's what it does for multi-sector reads:
                 *
                 *      (1) read sector (REP INSW)
                 *      (2) check STATUS
                 *      (3) check sector count, exit if done
                 *      (4) wait for interrupt
                 *      (5) repeat
                 *
                 * Since we set the IRR immediately after (1), we cannot immediately clear the IRR at (2), otherwise the
                 * interrupt at (4) never happens.  So, maybe there are SOME situations where IRR should be cleared on
                 * a read, but I don't know what they are.
                 *
                 *      if (this.chipset) this.chipset.clearIRR(ChipSet.IRQ.ATC);
                 */
                return bIn;
            };
            
            /**
             * outATCCommand(port, bOut, addrFrom)
             *
             * @this {HDC}
             * @param {number} port (0x1F7)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCCommand = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "COMMAND");
                this.regCommand = bOut;
                if (this.chipset) this.chipset.clearIRR(ChipSet.IRQ.ATC);
                this.doATC();
            };
            
            /**
             * outATCFDR(port, bOut, addrFrom)
             *
             * This is referred to in IBM's docs as the "Fixed Disk Register" (write-only)
             *
             * @this {HDC}
             * @param {number} port (0x3F6)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            HDC.prototype.outATCFDR = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "FDR");
                /*
                 * I'm not really sure if I should set HDC.ATC.DIAG.NO_ERROR in regError after *every* write where
                 * HDC.ATC.FDR.RESET is clear, or only after it has transitioned from set to clear; since the BIOS only
                 * requires the latter, I'm going to be conservative and restrict regError updates to the latter.
                 */
                if ((this.regFDR & HDC.ATC.FDR.RESET) && !(bOut & HDC.ATC.FDR.RESET)) this.regError = HDC.ATC.DIAG.NO_ERROR;
                this.regFDR = bOut;
            };
            
            /**
             * doATC()
             *
             * Handles ATC (AT Controller) commands
             *
             * @this {HDC}
             */
            HDC.prototype.doATC = function()
            {
                var hdc = this;
                var fInterrupt = false;
                var bCmd = this.regCommand;
                var iDrive = (this.regDrvHd & HDC.ATC.DRVHD.DRIVE_MASK? 1 : 0);
                var nHead = this.regDrvHd & HDC.ATC.DRVHD.HEAD_MASK;
                var nCylinder = this.regCylLo | ((this.regCylHi & HDC.ATC.CYLHI.MASK) << 8);
                var nSector = this.regSecNum;
                var nSectors = this.regSecCnt || 256;
            
                this.drive = null;
                this.regError = HDC.ATC.ERROR.NONE;
                this.regStatus = HDC.ATC.STATUS.READY | HDC.ATC.STATUS.SEEK_OK;
            
                var drive = this.aDrives[iDrive];
                if (!drive) {
                    bCmd = -1;
                } else {
                    /*
                     * Update the Drive object with the new positional information associated with this command.
                     */
                    drive.wCylinder = nCylinder;
                    drive.bHead = nHead;
                    drive.bSector = nSector;
                    drive.nBytes = nSectors * drive.cbSector;
                    bCmd = (bCmd >= HDC.ATC.COMMAND.DIAGNOSE? bCmd : (bCmd & HDC.ATC.COMMAND.MASK));
                    /*
                     * Since the ATC doesn't use DMA, we must now set some additional Drive state for the benefit of any
                     * follow-up I/O instructions.  For example, any subsequent inATCData() and outATCData() calls need to
                     * know which drive to talk to ("this.drive"), to issue their own readData() and writeData() calls.
                     *
                     * The XTC didn't need this, because it used doDMARead(), doDMAWrite(), doDMAFormat() helper functions,
                     * which reset the current drive's "sector" and "errorCode" properties themselves and then used DMA
                     * functions that delivered drive data with direct calls to readData() and writeData().
                     */
                    drive.sector = null;
                    drive.ibSector = 0;
                    drive.errorCode = 0;
                    this.drive = drive;
                }
            
                if (DEBUG && this.messageEnabled(Messages.HDC)) {
                    this.printMessage("HDC.doATC(" + str.toHexByte(bCmd) + "): " + HDC.aATCCommands[bCmd], true);
                }
            
                switch (bCmd & HDC.ATC.COMMAND.MASK) {
            
                case HDC.ATC.COMMAND.READ_DATA:
                    if (DEBUG && this.messageEnabled(Messages.HDC)) {
                        this.printMessage("HDC.doRead(" + iDrive + ',' + drive.wCylinder + ':' + drive.bHead + ':' + drive.bSector + ',' + nSectors + ")", true);
                    }
                    /*
                     * We're using a call to readData() that disables auto-increment, so that once we've got the first
                     * byte of the next sector, we can signal an interrupt without also consuming the first byte, allowing
                     * inATCData() to begin with that byte.
                     *
                     * As with the WRITE_DATA command, I'm not sure which of BUSY and DATA_REQ (or both) should be set here,
                     * so I'm setting both of them for now.  I clear them as soon as I have data.
                     */
                    hdc.regStatus = HDC.ATC.STATUS.BUSY | HDC.ATC.STATUS.DATA_REQ;
            
                    this.readData(drive, function(b, fAsync) {
                        if (b >= 0 && hdc.chipset) {
                            hdc.setATCIRR();
                            hdc.regStatus = HDC.ATC.STATUS.READY | HDC.ATC.STATUS.SEEK_OK;
                        } else {
                            /*
                             * TODO: It would be nice to be a bit more specific about the error (if any) that just occurred.
                             * Consult drive.errorCode (it uses older XTC error codes, but mapping those codes should be trivial).
                             */
                            hdc.regStatus = HDC.ATC.STATUS.ERROR;
                            hdc.regError = HDC.ATC.ERROR.NO_CHS;
                        }
                    }, false);
                    break;
            
                case HDC.ATC.COMMAND.WRITE_DATA:
                    if (DEBUG && this.messageEnabled(Messages.HDC)) {
                        this.printMessage("HDC.doWrite(" + iDrive + ',' + drive.wCylinder + ':' + drive.bHead + ':' + drive.bSector + ',' + nSectors + ")", true);
                    }
                    this.regStatus = HDC.ATC.STATUS.DATA_REQ;
                    break;
            
                case HDC.ATC.COMMAND.RESTORE:
                    /*
                     * Physically, this retracts the heads to cylinder 0, but logically, there isn't anything to do.
                     */
                    fInterrupt = true;
                    break;
            
                case HDC.ATC.COMMAND.READ_VERF:
                    /*
                     * Since the READ VERIFY command returns no data, once again, logically, there isn't much we HAVE to
                     * to do, but... TODO: Verify that all the disk parameters are valid, and return an error if they're not.
                     */
                    fInterrupt = true;
                    break;
            
                case HDC.ATC.COMMAND.DIAGNOSE:
                    this.regError = HDC.ATC.DIAG.NO_ERROR;
                    fInterrupt = true;
                    break;
            
                case HDC.ATC.COMMAND.SETPARMS:
                    /*
                     * The documentation implies that the only parameters this command really affects are the number
                     * of heads (from regDrvHd) and sectors/track (from regSecCnt) -- this despite the fact that the BIOS
                     * programs all the other registers.  For a type 2 drive, that includes:
                     *
                     *      WPREC:   0x4B
                     *      SECCNT:  0x11 (for 17 sectors per track)
                     *      CYL:    0x100 (256 -- huh?)
                     *      SECNUM:  0x0C (12 -- huh?)
                     *      DRVHD:   0xA3 (max head of 0x03, for 4 total heads)
                     *
                     * The importance of SECCNT (nSectors) and DRVHD (nHeads) is controlling how multi-sector operations
                     * advance to the next sector; see advanceSector().
                     */
                    this.assert(drive.nHeads == nHead + 1);
                    this.assert(drive.nSectors == nSectors);
                    drive.nHeads = nHead + 1;
                    drive.nSectors = nSectors;
                    fInterrupt = true;
                    break;
            
                default:
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("HDC.doATC(" + str.toHexByte(this.regCommand) + "): " + (bCmd < 0? ("invalid drive (" + iDrive + ")") : "unsupported operation"));
                        if (bCmd >= 0) this.dbg.stopCPU();
                    }
                    break;
                }
            
                if (fInterrupt) this.setATCIRR();
            };
            
            /**
             * setATCIRR(fWrite)
             *
             * Raise the ATC's IRQ, provided ATC interrupts are enabled.
             *
             * @this {HDC}
             * @param {boolean} [fWrite] is true on completion of a write to the sector buffer
             */
            HDC.prototype.setATCIRR = function(fWrite)
            {
                if (this.chipset) {
                    if (!(this.regFDR & HDC.ATC.FDR.INT_DISABLE)) {
                        /*
                         * TODO: Determine what the "correct" instruction delay should be here.  When the OS/2 1.0 Install Disk
                         * begins copying files to the hard disk, at one point it performs the following 125-sector write (use the
                         * Debugger's "m hdc on" and "m pic on" commands to enable HDC and PIC messages, along with "m data on"
                         * if you also want to see the actual sector data being written):
                         *
                         *      HDC.doATC(0x30): Write
                         *      HDC.doWrite(0,2:0:5,125)
                         *
                         * As the write progresses, you'll notice that the HDC interrupt after each sector occurs at decreasingly
                         * lower points in the stack, until we eventually start overwriting non-stack data:
                         *
                         *      getIRRVector(): IRQ 14 interrupting @0090:52A6 stack=0050:1906
                         *      getIRRVector(): IRQ 14 interrupting @0318:196B stack=0050:18D6
                         *      getIRRVector(): IRQ 14 interrupting @0318:196B stack=0050:18A6
                         *      ...
                         *      getIRRVector(): IRQ 14 interrupting @0318:196B stack=0050:1156
                         *
                         * At roughly this point, very bad things start happening.  I decided to try an arbitrarily large delay
                         * on the setIRR() call here (120), and the problem vanished, so it seems likely that the OS/2 disk driver
                         * has a low tolerance for fast controller interrupts during multi-sector operations.
                         */
                        this.chipset.setIRR(ChipSet.IRQ.ATC, 120);
                        if (DEBUG) this.printMessage("HDC.setATCIRR(): enabled", Messages.PIC | Messages.HDC);
                    } else {
                        if (DEBUG) this.printMessage("HDC.setATCIRR(): disabled", Messages.PIC | Messages.HDC);
                    }
                }
            };
            
            /**
             * doXTC()
             *
             * Handles XTC (XT Controller) commands
             *
             * @this {HDC}
             */
            HDC.prototype.doXTC = function()
            {
                var hdc = this;
                this.regDataIndex = 0;
            
                var bCmd = this.popCmd();
                var bCmdOrig = bCmd;
                var b1 = this.popCmd();
                var bDrive = b1 & 0x20;
                var iDrive = (bDrive >> 5);
            
                var bHead = b1 & 0x1f;
                var b2 = this.popCmd();
                var b3 = this.popCmd();
                var wCylinder = ((b2 << 2) & 0x300) | b3;
                var bSector = b2 & 0x3f;
                var bCount = this.popCmd();             // block count or interleave count, depending on the command
                var bControl = this.popCmd();
                var bParm, bDataStatus;
            
                var drive = this.aDrives[iDrive];
                if (drive) {
                    drive.wCylinder = wCylinder;
                    drive.bHead = bHead;
                    drive.bSector = bSector;
                    drive.nBytes = bCount * drive.cbSector;
                }
            
                /*
                 * I tried to save normal command processing from having to deal with invalid drives,
                 * but the HDC BIOS initializes both drive 0 AND drive 1 on a HDC.XTC.DATA.CMD.INIT_DRIVE command,
                 * and apparently that particular command has no problem with non-existent drives.
                 *
                 * So I've separated the commands into two groups: drive-ambivalent commands should be
                 * processed in the first group, and all the rest should be processed in the second group.
                 */
                switch (bCmd) {
            
                case HDC.XTC.DATA.CMD.REQUEST_SENSE:        // 0x03
                    this.beginResult(drive? drive.errorCode : HDC.XTC.DATA.ERR.NOT_READY);
                    this.pushResult(b1);
                    this.pushResult(b2);
                    this.pushResult(b3);
                    /*
                     * Although not terribly clear from IBM's "Fixed Disk Adapter" documentation, a data "status byte"
                     * also follows the 4 "sense bytes".  Interestingly, The HDC BIOS checks that data status byte for
                     * XTC.DATA.STATUS.ERROR, but I have to wonder if it would have ever been set for this command....
                     *
                     * The whole point of the HDC.XTC.DATA.CMD.REQUEST_SENSE command is to obtain details about a
                     * previous error, so if HDC.XTC.DATA.CMD.REQUEST_SENSE itself reports an error, what would that mean?
                     */
                    this.pushResult(HDC.XTC.DATA.STATUS.OK | bDrive);
                    bCmd = -1;                              // mark the command as complete
                    break;
            
                case HDC.XTC.DATA.CMD.INIT_DRIVE:           // 0x0C
                    /*
                     * Pop off all the extra "Initialize Drive Characteristics" bytes and store them, for the benefit of
                     * other functions, like verifyDrive().
                     */
                    var i = 0;
                    while ((bParm = this.popCmd()) >= 0) {
                        if (drive && i < drive.abDriveParms.length) {
                            drive.abDriveParms[i++] = bParm;
                        }
                    }
                    if (drive) this.verifyDrive(drive);
                    bDataStatus = HDC.XTC.DATA.STATUS.OK;
                    if (!drive && this.iDriveAllowFail == iDrive) {
                        this.iDriveAllowFail = -1;
                        if (DEBUG) this.printMessage("HDC.doXTC(): fake failure triggered");
                        bDataStatus = HDC.XTC.DATA.STATUS.ERROR;
                    }
                    this.beginResult(bDataStatus | bDrive);
                    bCmd = -1;                              // mark the command as complete
                    break;
            
                case HDC.XTC.DATA.CMD.RAM_DIAGNOSTIC:       // 0xE0
                case HDC.XTC.DATA.CMD.CTL_DIAGNOSTIC:       // 0xE4
                    this.beginResult(HDC.XTC.DATA.STATUS.OK | bDrive);
                    bCmd = -1;                              // mark the command as complete
                    break;
            
                default:
                    break;
                }
            
                if (bCmd >= 0) {
                    if (drive === undefined) {
                        bCmd = -1;
                    } else {
                        /*
                         * In preparation for this command, zero out the drive's errorCode and senseCode.
                         * Commands that require a disk address should update senseCode with HDC.XTC.DATA.SENSE_ADDR_VALID.
                         * And of course, any command that encounters an error should set the appropriate error code.
                         */
                        drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                        drive.senseCode = 0;
                    }
                    switch (bCmd) {
                    case HDC.XTC.DATA.CMD.TEST_READY:       // 0x00
                        this.beginResult(HDC.XTC.DATA.STATUS.OK | bDrive);
                        break;
            
                    case HDC.XTC.DATA.CMD.RECALIBRATE:      // 0x01
                        drive.bControl = bControl;
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("HDC.doXTC(): drive " + iDrive + " control byte: " + str.toHexByte(bControl));
                        }
                        this.beginResult(HDC.XTC.DATA.STATUS.OK | bDrive);
                        break;
            
                    case HDC.XTC.DATA.CMD.READ_VERF:        // 0x05
                        /*
                         * This is a non-DMA operation, so we simply pretend everything is OK for now.  TODO: Revisit.
                         */
                        this.beginResult(HDC.XTC.DATA.STATUS.OK | bDrive);
                        break;
            
                    case HDC.XTC.DATA.CMD.READ_DATA:        // 0x08
                        this.doDMARead(drive, function(bStatus) {
                            hdc.beginResult(bStatus | bDrive);
                        });
                        break;
            
                    case HDC.XTC.DATA.CMD.WRITE_DATA:       // 0x0A
                        /*
                         * QUESTION: The IBM TechRef (p.1-188) implies that bCount is used as part of HDC.XTC.DATA.CMD.WRITE_DATA command,
                         * but it is omitted from the HDC.XTC.DATA.CMD.READ_DATA command.  Is that correct?  Note that, as far as the length
                         * of the transfer is concerned, we rely exclusively on the DMA controller being programmed with the appropriate byte count.
                         */
                        this.doDMAWrite(drive, function(bStatus) {
                            hdc.beginResult(bStatus | bDrive);
                        });
                        break;
            
                    case HDC.XTC.DATA.CMD.WRITE_BUFFER:     // 0x0F
                        this.doDMAWriteBuffer(drive, function(bStatus) {
                            hdc.beginResult(bStatus | bDrive);
                        });
                        break;
            
                    default:
                        this.beginResult(HDC.XTC.DATA.STATUS.ERROR | bDrive);
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("HDC.doXTC(" + str.toHexByte(bCmdOrig) + "): " + (bCmd < 0? ("invalid drive (" + iDrive + ")") : "unsupported operation"));
                            if (bCmd >= 0) this.dbg.stopCPU();
                        }
                        break;
                    }
                }
            };
            
            /**
             * popCmd()
             *
             * @this {HDC}
             * @return {number}
             */
            HDC.prototype.popCmd = function()
            {
                var bCmd = -1;
                var bCmdIndex = this.regDataIndex;
                if (bCmdIndex < this.regDataTotal) {
                    bCmd = this.regDataArray[this.regDataIndex++];
                    if (DEBUG && this.messageEnabled((bCmdIndex > 0? Messages.PORT : 0) | Messages.HDC)) {
                        this.printMessage("HDC.CMD[" + bCmdIndex + "]: " + str.toHexByte(bCmd) + (!bCmdIndex && HDC.aXTCCommands[bCmd]? (" (" + HDC.aXTCCommands[bCmd] + ")") : ""), true);
                    }
                }
                return bCmd;
            };
            
            /**
             * beginResult(bResult)
             *
             * @this {HDC}
             * @param {number} [bResult]
             */
            HDC.prototype.beginResult = function(bResult)
            {
                this.regDataIndex = this.regDataTotal = 0;
            
                if (bResult !== undefined) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("HDC.beginResult(" + str.toHexByte(bResult) + ")");
                    }
                    this.pushResult(bResult);
                }
                /*
                 * After the Execution phase (eg, DMA Terminal Count has occurred, or the EOT sector has been read/written),
                 * an interrupt is supposed to occur, signaling the beginning of the Result Phase.  Once the data "status byte"
                 * has been read from XTC.DATA, the interrupt is cleared (see inXTCData).
                 */
                if (this.chipset) this.chipset.setIRR(ChipSet.IRQ.XTC);
                this.regStatus |= HDC.XTC.STATUS.INTERRUPT;
            };
            
            /**
             * pushResult(bResult)
             *
             * @this {HDC}
             * @param {number} bResult
             */
            HDC.prototype.pushResult = function(bResult)
            {
                if (DEBUG && this.messageEnabled((this.regDataTotal > 0? Messages.PORT : 0) | Messages.HDC)) {
                    this.printMessage("HDC.RES[" + this.regDataTotal + "]: " + str.toHexByte(bResult), true);
                }
                this.regDataArray[this.regDataTotal++] = bResult;
            };
            
            /**
             * dmaRead(drive, b, done)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b
             * @param {function(number,boolean)} done
             */
            HDC.prototype.dmaRead = function(drive, b, done)
            {
                if (b === undefined || b < 0) {
                    this.readData(drive, done);
                    return;
                }
                /*
                 * The DMA controller should be ASKING for data, not GIVING us data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaRead(): invalid DMA acknowledgement");
                done(-1, false);
            };
            
            /**
             * dmaWrite(drive, b)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b
             * @return {number}
             */
            HDC.prototype.dmaWrite = function(drive, b)
            {
                if (b !== undefined && b >= 0)
                    return this.writeData(drive, b);
                /*
                 * The DMA controller should be GIVING us data, not ASKING for data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaWrite(): invalid DMA acknowledgement");
                return -1;
            };
            
            /**
             * dmaWriteBuffer(drive, b)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b
             * @return {number}
             */
            HDC.prototype.dmaWriteBuffer = function(drive, b)
            {
                if (b !== undefined && b >= 0)
                    return this.writeBuffer(drive, b);
                /*
                 * The DMA controller should be GIVING us data, not ASKING for data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaWriteBuffer(): invalid DMA acknowledgement");
                return -1;
            };
            
            /**
             * dmaWriteFormat(drive, b)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b
             * @returns {number}
             */
            HDC.prototype.dmaWriteFormat = function(drive, b)
            {
                if (b !== undefined && b >= 0)
                    return this.writeFormat(drive, b);
                /*
                 * The DMA controller should be GIVING us data, not ASKING for data; this suggests an internal DMA miscommunication
                 */
                if (DEBUG) this.printMessage("dmaWriteFormat(): invalid DMA acknowledgement");
                return -1;
            };
            
            /**
             * doDMARead(drive, done)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {function(number)} done (dataStatus is XTC.DATA.STATUS.OK or XTC.DATA.STATUS.ERROR; if error, then drive.errorCode should be set as well)
             */
            HDC.prototype.doDMARead = function(drive, done)
            {
                drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
            
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("HDC.doDMARead(" + drive.iDrive + ',' + drive.wCylinder + ':' + drive.bHead + ':' + drive.bSector + ',' + ((drive.nBytes / drive.cbSector)|0) + ")");
                }
            
                if (drive.disk) {
                    drive.sector = null;
                    if (this.chipset) {
                        /*
                         * We need to reverse the original logic, and default to success unless/until an actual error occurs;
                         * otherwise dmaRead()/readData() will bail on us.  The original approach used to work because requestDMA()
                         * would immediately call us back with fComplete set to true EVEN if the DMA channel was not yet unmasked;
                         * now the callback is deferred until the DMA channel has been unmasked and the DMA request has finished.
                         */
                        drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                        this.chipset.connectDMA(ChipSet.DMA_HDC, this, 'dmaRead', drive);
                        this.chipset.requestDMA(ChipSet.DMA_HDC, function(fComplete) {
                            if (!fComplete) {
                                /*
                                 * If an incomplete request wasn't triggered by an explicit error, then let's make explicit
                                 * (ie, revert to the default failure code that we originally set above).
                                 */
                                if (drive.errorCode == HDC.XTC.DATA.ERR.NONE) {
                                    drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
                                }
                            }
                            done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
                        });
                        return;
                    }
                }
                done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
            };
            
            /**
             * doDMAWrite(drive, done)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {function(number)} done (dataStatus is XTC.DATA.STATUS.OK or XTC.DATA.STATUS.ERROR; if error, then drive.errorCode should be set as well)
             */
            HDC.prototype.doDMAWrite = function(drive, done)
            {
                drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
            
                if (DEBUG && this.messageEnabled()) {
                    this.printMessage("HDC.doDMAWrite(" + drive.iDrive + ',' + drive.wCylinder + ':' + drive.bHead + ':' + drive.bSector + ',' + ((drive.nBytes / drive.cbSector)|0) + ")");
                }
            
                if (drive.disk) {
                    drive.sector = null;
                    if (this.chipset) {
                        /*
                         * We need to reverse the original logic, and default to success unless/until an actual error occurs;
                         * otherwise dmaWrite()/writeData() will bail on us.  The original approach would work because requestDMA()
                         * would immediately call us back with fComplete set to true EVEN if the DMA channel was not yet unmasked;
                         * now the callback is deferred until the DMA channel has been unmasked and the DMA request has finished.
                         */
                        drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                        this.chipset.connectDMA(ChipSet.DMA_HDC, this, 'dmaWrite', drive);
                        this.chipset.requestDMA(ChipSet.DMA_HDC, function(fComplete) {
                            if (!fComplete) {
                                /*
                                 * If an incomplete request wasn't triggered by an explicit error, then let's make explicit
                                 * (ie, revert to the default failure code that we originally set above).
                                 */
                                if (drive.errorCode == HDC.XTC.DATA.ERR.NONE) {
                                    drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
                                }
                                /*
                                 * Mask any error that's the result of an attempt to write beyond the end of the track (which is
                                 * something the MS-DOS 4.0M's FORMAT utility seems to like to do).
                                 */
                                if (drive.errorCode == HDC.XTC.DATA.ERR.NO_SECTOR) {
                                    drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                                }
                            }
                            done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
                        });
                        return;
                    }
                }
                done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
            };
            
            /**
             * doDMAWriteBuffer(drive, done)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {function(number)} done (dataStatus is XTC.DATA.STATUS.OK or XTC.DATA.STATUS.ERROR; if error, then drive.errorCode should be set as well)
             */
            HDC.prototype.doDMAWriteBuffer = function(drive, done)
            {
                drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
            
                if (DEBUG) this.printMessage("HDC.doDMAWriteBuffer()");
            
                if (!drive.abSector || drive.abSector.length != drive.nBytes) {
                    drive.abSector = new Array(drive.nBytes);
                }
                drive.ibSector = 0;
                if (this.chipset) {
                    /*
                     * We need to reverse the original logic, and default to success unless/until an actual error occurs;
                     * otherwise dmaWriteBuffer() will bail on us.  The original approach would work because requestDMA()
                     * would immediately call us back with fComplete set to true EVEN if the DMA channel was not yet unmasked;
                     * now the callback is deferred until the DMA channel has been unmasked and the DMA request has finished.
                     */
                    drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                    this.chipset.connectDMA(ChipSet.DMA_HDC, this, 'dmaWriteBuffer', drive);
                    this.chipset.requestDMA(ChipSet.DMA_HDC, function(fComplete) {
                        if (!fComplete) {
                            /*
                             * If an incomplete request wasn't triggered by an explicit error, then let's make explicit
                             * (ie, revert to the default failure code that we originally set above).
                             */
                            if (drive.errorCode == HDC.XTC.DATA.ERR.NONE) {
                                drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
                            }
                        }
                        done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
                    });
                    return;
                }
                done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
            };
            
            /**
             * doDMAFormat(drive, done)
             *
             * The drive variable is initialized by doXTC() to the following extent:
             *
             *      drive.bHead (ignored)
             *      drive.nBytes (bytes/sector)
             *      drive.bSectorEnd (sectors/track)
             *      drive.bFiller (fill byte)
             *
             * and we expect the DMA controller to provide C, H, R and N (ie, 4 bytes) for each sector to be formatted.
             *
             * NOTE: This function is not currently used.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {function(number)} done (dataStatus is XTC.DATA.STATUS.OK or XTC.DATA.STATUS.ERROR; if error, then drive.errorCode should be set as well)
             *
            HDC.prototype.doDMAFormat = function(drive, done)
            {
                drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
            
                if (drive.disk) {
                    drive.sector = null;
                    if (this.chipset) {
                        drive.cbFormat = 0;
                        drive.abFormat = new Array(4);
                        drive.bFormatting = true;
                        drive.cSectorsFormatted = 0;
                        //
                        // We need to reverse the original logic, and default to success unless/until an actual error occurs;
                        // otherwise dmaWriteFormat() will bail on us.  The original approach would work because requestDMA()
                        // would immediately call us back with fComplete set to true EVEN if the DMA channel was not yet unmasked;
                        // now the callback is deferred until the DMA channel has been unmasked and the DMA request has finished.
                        //
                        drive.errorCode = HDC.XTC.DATA.ERR.NONE;
                        this.chipset.connectDMA(ChipSet.DMA_HDC, this, 'dmaWriteFormat', drive);
                        this.chipset.requestDMA(ChipSet.DMA_HDC, function(fComplete) {
                            if (!fComplete) {
                                //
                                // If an incomplete request wasn't triggered by an explicit error, then let's make explicit
                                // (ie, revert to the default failure code that we originally set above).
                                //
                                if (drive.errorCode == HDC.XTC.DATA.ERR.NONE) {
                                    drive.errorCode = HDC.XTC.DATA.ERR.NOT_READY;
                                }
                            }
                            drive.bFormatting = false;
                            done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
                        });
                        return;
                    }
                }
                done(drive.errorCode? HDC.XTC.DATA.STATUS.ERROR : HDC.XTC.DATA.STATUS.OK);
            };
             */
            
            /**
             * readData(drive, done)
             *
             * The following drive variable properties must have been setup prior to our first call:
             *
             *      drive.wCylinder
             *      drive.bHead
             *      drive.bSector
             *      drive.sector (initialized to null)
             *
             * On the first readData() request, since drive.sector will be null, we ask the Disk object to look
             * up the first sector of the request.  We then ask the Disk for bytes from that sector until the sector
             * is exhausted, and then we look up the next sector and continue the process.
             *
             * NOTE: Since the HDC isn't aware of the extent of the transfer, all readData() can do is return bytes
             * until the current track (or, in the case of a multi-track request, the current cylinder) has been exhausted.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {function(number,boolean,Object,number)} [done] (number is next available byte from drive, or -1 if no more bytes available)
             * @param {boolean} [fAutoInc] (default is true to auto-increment)
             * @return {number} the requested byte, or -1 if unavailable
             */
            HDC.prototype.readData = function(drive, done, fAutoInc)
            {
                var b = -1;
                var obj = null, off = 0;    // these variables are purely for BACKTRACK purposes
            
                if (drive.errorCode) {
                    if (done) done(b, false, obj, off);
                    return b;
                }
            
                var inc = (fAutoInc !== false? 1 : 0);
            
                if (drive.sector) {
                    off = drive.ibSector;
                    b = drive.disk.read(drive.sector, drive.ibSector);
                    drive.ibSector += inc;
                    if (b >= 0) {
                        obj = drive.sector;
                        if (done) done(b, false, obj, off);
                        return b;
                    }
                }
            
                /*
                 * Locate the next sector, and then try reading again.
                 *
                 * Important difference between the FDC and the XTC: the XTC uses 0-based sector numbers,
                 * hence the bSectorBias below.  I could change how sector numbers are stored in the image,
                 * but it seems preferable to keep the image format consistent and controller-independent.
                 */
                if (done) {
                    var hdc = this;
                    if (drive.disk) {
                        drive.disk.seek(drive.wCylinder, drive.bHead, drive.bSector + drive.bSectorBias, false, function(sector, fAsync) {
                            if ((drive.sector = sector)) {
                                obj = sector;
                                off = drive.ibSector = 0;
                                /*
                                 * We "pre-advance" bSector et al now, instead of waiting to advance it right before the seek().
                                 * This allows the initial call to readData() to perform a seek without triggering an unwanted advance.
                                 */
                                hdc.advanceSector(drive);
                                b = drive.disk.read(drive.sector, drive.ibSector);
                                drive.ibSector += inc;
                            } else {
                                drive.errorCode = HDC.XTC.DATA.ERR.NO_SECTOR;
                            }
                            done(b, fAsync, obj, off);
                        });
                        return b;
                    }
                    drive.errorCode = HDC.XTC.DATA.ERR.NO_SECTOR;
                    done(b, false, obj, off);
                }
                return b;
            };
            
            /**
             * writeData(drive, b)
             *
             * The following drive variable properties must have been setup prior to our first call:
             *
             *      drive.wCylinder
             *      drive.bHead
             *      drive.bSector
             *      drive.sector (initialized to null)
             *
             * On the first writeData() request, since drive.sector will be null, we ask the Disk object to look
             * up the first sector of the request.  We then send the Disk bytes for that sector until the sector
             * is full, and then we look up the next sector and continue the process.
             *
             * NOTE: Since the HDC isn't aware of the extent of the transfer, all writeData() can do is accept bytes
             * until the current track (or, in the case of a multi-track request, the current cylinder) has been exhausted.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b containing next byte to write
             * @return {number} (b unchanged; return -1 if command should be terminated)
             */
            HDC.prototype.writeData = function(drive, b)
            {
                if (drive.errorCode) return -1;
                do {
                    if (drive.sector) {
                        if (drive.disk.write(drive.sector, drive.ibSector++, b))
                            break;
                    }
                    /*
                     * Locate the next sector, and then try writing again.
                     *
                     * Important difference between the FDC and the XTC: the XTC uses 0-based sector numbers,
                     * hence the bSectorBias below.  I could change how sector numbers are stored in the image,
                     * but it seems preferable to keep the image format consistent and controller-independent.
                     */
                    if (drive.disk) {
                        drive.disk.seek(drive.wCylinder, drive.bHead, drive.bSector + drive.bSectorBias, true, function(sector, fAsync) {
                            drive.sector = sector;
                        });
                    }
                    if (!drive.sector) {
                        drive.errorCode = HDC.XTC.DATA.ERR.NO_SECTOR;
                        b = -1;
                        break;
                    }
                    drive.ibSector = 0;
                    /*
                     * We "pre-advance" bSector et al now, instead of waiting to advance it right before the seek().
                     * This allows the initial call to writeData() to perform a seek without triggering an unwanted advance.
                     */
                    this.advanceSector(drive);
                } while (true);
                return b;
            };
            
            /**
             * advanceSector(drive)
             *
             * This increments the sector number; when the sector number reaches drive.nSectors on the current track, we
             * increment drive.bHead and reset drive.bSector, and when drive.bHead reaches drive.nHeads, we reset drive.bHead
             * and increment drive.wCylinder.
             *
             * One wrinkle is that the ATC uses 1-based sector numbers (bSectorBias is 0), whereas the XTC uses 0-based sector
             * numbers (bSectorBias is 1).  Thus, the correct "reset" value for bSector is (1 - bSectorBias), and the correct
             * limit for bSector is (nSectors + bSectorStart).
             *
             * @this {HDC}
             * @param {Object} drive
             */
            HDC.prototype.advanceSector = function(drive)
            {
                this.assert(drive.wCylinder < drive.nCylinders);
                drive.bSector++;
                var bSectorStart = (1 - drive.bSectorBias);
                if (drive.bSector >= drive.nSectors + bSectorStart) {
                    drive.bSector = bSectorStart;
                    drive.bHead++;
                    if (drive.bHead >= drive.nHeads) {
                        drive.bHead = 0;
                        drive.wCylinder++;
                    }
                }
            };
            
            /**
             * writeBuffer(drive, b)
             *
             * NOTE: Since the HDC isn't aware of the extent of the transfer, all writeBuffer() can do is accept bytes
             * until the buffer is full.
             *
             * TODO: Support for HDC.XTC.DATA.CMD.READ_BUFFER is missing, and support for HDC.XTC.DATA.CMD.WRITE_BUFFER may not be complete;
             * tests required.
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b containing next byte to write
             * @return {number} (b unchanged; return -1 if command should be terminated)
             */
            HDC.prototype.writeBuffer = function(drive, b)
            {
                if (drive.ibSector < drive.abSector.length) {
                    drive.abSector[drive.ibSector++] = b;
                } else {
                    /*
                     * TODO: Determine the proper error code to return here.
                     */
                    drive.errorCode = HDC.XTC.DATA.ERR.NO_SECTOR;
                    b = -1;
                }
                return b;
            };
            
            /**
             * writeFormat(drive, b)
             *
             * @this {HDC}
             * @param {Object} drive
             * @param {number} b containing a format command byte
             * @return {number} (b if successful, -1 if command should be terminated)
             */
            HDC.prototype.writeFormat = function(drive, b)
            {
                if (drive.errorCode) return -1;
                drive.abFormat[drive.cbFormat++] = b;
                if (drive.cbFormat == drive.abFormat.length) {
                    drive.wCylinder = drive.abFormat[0];    // C
                    drive.bHead = drive.abFormat[1];        // H
                    drive.bSector = drive.abFormat[2];      // R
                    drive.nBytes = 128 << drive.abFormat[3];// N (0 => 128, 1 => 256, 2 => 512, 3 => 1024)
                    drive.cbFormat = 0;
            
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("HDC.writeFormat(" + drive.wCylinder + ":" + drive.bHead + ":" + drive.bSector + ":" + drive.nBytes + ")");
                    }
            
                    for (var i = 0; i < drive.nBytes; i++) {
                        if (this.writeData(drive, drive.bFiller) < 0) {
                            return -1;
                        }
                    }
                    drive.cSectorsFormatted++;
                }
                if (drive.cSectorsFormatted >= drive.bSectorEnd) b = -1;
                return b;
            };
            
            /**
             * intBIOSDisk(addr)
             *
             * NOTE: This function differentiates HDC requests from FDC requests, based on whether the INT 0x13 drive number
             * in DL is >= 0x80.
             *
             * HACK: The HDC BIOS code for both INT 0x13/AH=0x00 and INT 0x13/AH=0x09 calls "INIT_DRV" @C800:0427, which is
             * hard-coded to issue the HDC.XTC.DATA.CMD.INIT_DRIVE command for BOTH drives 0 and 1 (aka drive numbers 0x80 and
             * 0x81), regardless of the drive number specified in DL; this means that the HDC.XTC.DATA.CMD.INIT_DRIVE command
             * must always succeed for drive 1 if it also succeeds for drive 0 -- even if there is no drive 1.  Bizarre, but OK,
             * whatever.
             *
             * So assuming we a have drive 0, when the power-on diagnostics in "DISK_SETUP" @C800:0003 call INT 0x13/AH=0x09
             * (@C800:00DB) for drive 0, it must succeed.  No problem.  But when "DISK_SETUP" starts probing for additional drives,
             * it first issues INT 0x13/AH=0x00, followed by INT 0x13/AH=0x11, and finally INT 0x13/AH=0x09.  If the first
             * (AH=0x00) or third (AH=0x09) INT 0x13 fails, it quickly moves on (ie, it jumps to "POD_DONE").  But as we just
             * discussed, both those operations call "INIT_DRV", which can't return an error.  This means the only function that
             * can return an error in this context is the recalibrate function (AH=0x11).  That sucks, because the way the HDC
             * BIOS is written, it will loop for anywhere from 1.5 seconds to 25 seconds (depending on whether the controller
             * is part of the "System Unit" or not; see port 0x213), attempting to recalibrate drive 1 until it finally times out.
             *
             * Normally, you'll only experience the 1.5 second delay, but even so, it's a ridiculous waste of time and a lot of
             * useless INT 0x13 calls.  So I monitor INT 0x13/AH=0x00 for DL >= 0x80 and set a special HDC.XTC.DATA.CMD.INIT_DRIVE
             * override flag (iDriveAllowFail) that will allow that command to fail, and in theory, make the the HDC BIOS
             * "DISK_SETUP" code much more efficient.
             *
             * @this {HDC}
             * @param {number} addr
             * @return {boolean} true to proceed with the INT 0x13 software interrupt, false to skip
             */
            HDC.prototype.intBIOSDisk = function(addr)
            {
                var AH = this.cpu.regEAX >> 8;
                var DL = this.cpu.regEDX & 0xff;
                if (!AH && DL > 0x80) this.iDriveAllowFail = DL - 0x80;
                return true;
            };
            
            /**
             * intBIOSDiskette(addr)
             *
             * When the HDC BIOS overwrites the ROM BIOS INT 0x13 address, it saves the original INT 0x13 address
             * in the INT 0x40 vector.  This function intercepts calls to that vector to work around a minor nuisance.
             *
             * The HDC BIOS's plan was simple, albeit slightly flawed: assign fixed disks drive numbers >= 0x80,
             * and whenever someone calls INT 0x13 with a drive number < 0x80, invoke the original INT 0x13 diskette
             * code via INT 0x40 and return via RET 2.
             *
             * Unfortunately, not all original INT 0x13 functions required a drive number in DL (eg, the "reset"
             * function, where AH=0).  And the HDC BIOS knew this, which is why, in the case of the "reset" function,
             * the HDC BIOS performs BOTH an INT 0x40 diskette reset AND an HDC reset -- it can't be sure which
             * controller the caller really wants to reset.
             *
             * An unfortunate side-effect of this behavior: when the HDC BIOS is initialized for the first time, it may
             * issue several resets internally, depending on whether there are 0, 1 or 2 hard disks installed, and each
             * of those resets also triggers completely useless diskette resets, each wasting up to two seconds waiting
             * for the FDC to interrupt.  The FDC tries to interrupt, but it can't, because at this early stage of
             * ROM BIOS initialization, IRQ.FDC hasn't been unmasked yet.
             *
             * My work-around: have the HDC component hook INT 0x40, and every time an INT 0x40 is issued with AH=0 and
             * IRQ.FDC masked, bypass the INT 0x40 interrupt.  This is as close as PCjs has come to patching any BIOS code
             * (something I've refused to do), and even here, I'm not doing it out of necessity, just annoyance.
             *
             * @this {HDC}
             * @param {number} addr
             * @return {boolean} true to proceed with the INT 0x40 software interrupt, false to skip
             */
            HDC.prototype.intBIOSDiskette = function(addr)
            {
                var AH = this.cpu.regEAX >> 8;
                if ((!AH && this.chipset && this.chipset.checkIMR(ChipSet.IRQ.FDC))) {
                    if (DEBUG) this.printMessage("HDC.intBIOSDiskette(): skipping useless INT 0x40 diskette reset");
                    return false;
                }
                return true;
            };
            
            /*
             * Port input notification tables
             */
            HDC.aXTCPortInput = {
                0x320:  HDC.prototype.inXTCData,
                0x321:  HDC.prototype.inXTCStatus,
                0x322:  HDC.prototype.inXTCConfig
            };
            
            HDC.aATCPortInput = {
                0x1F0:  HDC.prototype.inATCData,
                0x1F1:  HDC.prototype.inATCError,
                0x1F2:  HDC.prototype.inATCSecCnt,
                0x1F3:  HDC.prototype.inATCSecNum,
                0x1F4:  HDC.prototype.inATCCylLo,
                0x1F5:  HDC.prototype.inATCCylHi,
                0x1F6:  HDC.prototype.inATCDrvHd,
                0x1F7:  HDC.prototype.inATCStatus
            };
            
            /*
             * Port output notification tables
             */
            HDC.aXTCPortOutput = {
                0x320:  HDC.prototype.outXTCData,
                0x321:  HDC.prototype.outXTCReset,
                0x322:  HDC.prototype.outXTCPulse,
                0x323:  HDC.prototype.outXTCPattern,
                /*
                 * The PC XT Fixed Disk BIOS includes some additional "housekeeping" that it performs
                 * not only on port 0x323 but also on three additional ports, at increments of 4 (see all
                 * references to "RESET INT/DMA MASK" in the Fixed Disk BIOS).  It's not clear to me if
                 * those ports refer to additional HDC controllers, and I haven't seen other references to
                 * them, but in any case, they represent a lot of "I/O noise" that we simply squelch here.
                 */
                0x327:  HDC.prototype.outXTCNoise,
                0x32B:  HDC.prototype.outXTCNoise,
                0x32F:  HDC.prototype.outXTCNoise
            };
            
            HDC.aATCPortOutput = {
                0x1F0:  HDC.prototype.outATCData,
                0x1F1:  HDC.prototype.outATCWPreC,
                0x1F2:  HDC.prototype.outATCSecCnt,
                0x1F3:  HDC.prototype.outATCSecNum,
                0x1F4:  HDC.prototype.outATCCylLo,
                0x1F5:  HDC.prototype.outATCCylHi,
                0x1F6:  HDC.prototype.outATCDrvHd,
                0x1F7:  HDC.prototype.outATCCommand,
                0x3F6:  HDC.prototype.outATCFDR
            };
            
            /**
             * HDC.init()
             *
             * This function operates on every HTML element of class "hdc", extracting the
             * JSON-encoded parameters for the HDC constructor from the element's "data-value"
             * attribute, invoking the constructor to create a HDC component, and then binding
             * any associated HTML controls to the new component.
             */
            HDC.init = function()
            {
                var aeHDC = Component.getElementsByClass(window.document, PCJSCLASS, "hdc");
                for (var iHDC = 0; iHDC < aeHDC.length; iHDC++) {
                    var eHDC = aeHDC[iHDC];
                    var parmsHDC = Component.getComponentParms(eHDC);
                    var hdc = new HDC(parmsHDC);
                    Component.bindComponentControls(hdc, eHDC, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every Hard Drive Controller (HDC) module on the page.
             */
            web.onInit(HDC.init);
            
            if (typeof module !== 'undefined') module.exports = HDC;
            
          • interrupts.js
            /**
             * @fileoverview PCjs-specific BIOS/DOS interrupt definitions.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-Dec-11
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /*
             * Components that previously used Debugger interrupt definitions by including:
             *
             *     var Debugger = require("./debugger");
             *
             * and using:
             *
             *      Debugger.INT.FOO
             *
             * must now instead include:
             *
             *      var Interrupts = require("./interrupts");
             *
             * and then replace all occurrences of "Debugger.INT.FOO" with "Interrupts.FOO.VECTOR".
             */
            
            var Interrupts = {
                VIDEO: {
                    VECTOR: 0x10
                },
                DISK: {
                    VECTOR: 0x13
                },
                CASSETTE: {
                    VECTOR: 0x15
                },
                KBD: {
                    VECTOR: 0x16
                },
                RTC: {
                    VECTOR: 0x1a
                },
                TIMER_TICK: {
                    VECTOR: 0x1c
                },
                DOS: {
                    VECTOR: 0x21
                },
                MOUSE: {
                    VECTOR: 0x33
                }
            };
            
            if (typeof module !== 'undefined') module.exports = Interrupts;
            
          • keyboard.js
            /**
             * @fileoverview Implements the PCjs Keyboard component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-20
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var ChipSet     = require("./chipset");
                var State       = require("./state");
                var CPU         = require("./cpu");
            }
            
            /**
             * Keyboard(parmsKbd)
             *
             * The Keyboard component can be configured with the following (parmsKbd) properties:
             *
             *      model: model string; should be one of:
             *
             *          us83 (default)
             *          us84 (TODO: awaiting implementation)
             *          us101 (TODO: awaiting implementation)
             *
             * Its main purpose is to receive binding requests for various keyboard events, and to use those events
             * to simulate the PC's keyboard hardware.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsKbd
             */
            function Keyboard(parmsKbd)
            {
                Component.call(this, "Keyboard", parmsKbd, Keyboard, Messages.KEYBOARD);
            
                this.nDefaultModel = parmsKbd['model'];
            
                this.fMobile = web.isMobile();
                this.fMSIE = web.isUserAgent("MSIE");
                this.printMessage("mobile keyboard support: " + (this.fMobile? "true" : "false"));
            
                /*
                 * This is count of the number of "soft keyboard" keys present.  At the moment, its only
                 * purpose is to signal findBinding() whether to waste any time looking for SOFTCODE matches.
                 */
                this.cSoftCodes = 0;
            
                /*
                 * Updated by onFocusChange()
                 */
                this.fHasFocus = true;
            
                /*
                 * This is true whenever the physical Escape key is disabled (eg, by pointer locking code),
                 * giving us the opportunity to map a different physical key to machine's virtual Escape key.
                 */
                this.fEscapeDisabled = false;
            
                /*
                 * This is set whenever we notice a discrepancy between our internal CAPS_LOCK state and its
                 * apparent state; we check whenever aKeysActive has been emptied.
                 */
                this.fToggleCapsLock = false;
            
                /*
                 * New unified approach to key event processing: When we process a key on the "down" event,
                 * we check the aKeysActive array: if the key is already active, do nothing; otherwise, insert
                 * it into the table, generate the "make" scan code(s), and set a timeout for "repeat" if it's
                 * a repeatable key (most are).
                 *
                 * Similarly, when a key goes "up", if it's already not active, do nothing; otherwise, generate
                 * the "break" scan code(s), cancel any pending timeout, and remove it from the active key table.
                 *
                 * If a "press" event is received, then if the key is already active, remove it and (re)insert
                 * it at the head of the table, generate the "make" scan code(s), set nRepeat to -1, and set a
                 * timeout for "break".
                 *
                 * This requires an aKeysActive array that keeps track of the status of every active key; only the
                 * first entry in the array is allowed to repeat.  Each entry is a key object with the following
                 * properties:
                 *
                 *      simCode:    our simulated keyCode from onKeyDown, onKeyUp, or onKeyPress
                 *      fDown:      next state to simulate (true for down, false for up)
                 *      nRepeat:    > 0 if timer should generate more "make" scan code(s), -1 for "break" scan code(s)
                 *      timer:      timer for next key operation, if any
                 *
                 * Keys are inserted at the head of aKeysActive, using splice(0, 0, key), but not before zeroing
                 * nRepeat of any repeating key that already occupies the head (index 0), so that at most only one
                 * key (ie, the most recent) will ever be in a repeating state.
                 *
                 * IBM PC keyboard repeat behavior: when pressing CTRL, then C, and then releasing CTRL while still
                 * holding C, the repeated CTRL_C characters turn into 'c' characters.  We emulate that behavior.
                 * However, when pressing C, then CTRL, all repeating stops: not a single CTRL_C is generated, and
                 * even if the CTRL is released before the C, no more more 'c' characters are generated either.
                 * We do NOT fully emulate that behavior -- we DO stop the repeating, but we also generate one CTRL_C.
                 * More investigation is required, because I need to confirm whether the IBM keyboard automatically
                 * "breaks" all non-shift keys before it "makes" the CTRL.
                 */
                this.aKeysActive = [];
            
                this.msAutoRepeat   = 500;
                this.msNextRepeat   = 100;
                this.msAutoRelease  = 50;
                this.msInjectDelay  = 300;          // number of milliseconds between injected keystrokes
            
                /*
                 * HACK: We set fAllDown to false to ignore all down/up events for keys not explicitly marked as ONDOWN;
                 * even though that prevents those keys from being repeated properly (ie, at the simulation's repeat rate
                 * rather than the browser's repeat rate), it's the safest thing to do when dealing with international keyboards,
                 * because our mapping tables are designed for US keyboards, and testing all the permutations of international
                 * keyboards and web browsers is more work than I can take on right now.  TODO: Dig into this some day.
                 */
                this.fAllDown = false;
            
                this.setReady();
            }
            
            Component.subclass(Keyboard);
            
            /**
             * Alphanumeric and other common (printable) ASCII codes.
             *
             * TODO: Determine what we can do to get ALL constants like these inlined (enum doesn't seem to
             * get the job done); the problem seems to be limited to property references that use quotes, which
             * is why I've 'unquoted' as many of them as possible.
             *
             * @enum {number}
             */
            Keyboard.ASCII = {
             CTRL_A:  1, CTRL_C:  3, CTRL_Z: 26,
                ' ': 32,    '!': 33,    '"': 34,    '#': 35,    '$': 36,    '%': 37,    '&': 38,    "'": 39,
                '(': 40,    ')': 41,    '*': 42,    '+': 43,    ',': 44,    '-': 45,    '.': 46,    '/': 47,
                '0': 48,    '1': 49,    '2': 50,    '3': 51,    '4': 52,    '5': 53,    '6': 54,    '7': 55,
                '8': 56,    '9': 57,    ':': 58,    ';': 59,    '<': 60,    '=': 61,    '>': 62,    '?': 63,
                '@': 64,     A:  65,     B:  66,     C:  67,     D:  68,     E:  69,     F:  70,     G:  71,
                 H:  72,     I:  73,     J:  74,     K:  75,     L:  76,     M:  77,     N:  78,     O:  79,
                 P:  80,     Q:  81,     R:  82,     S:  83,     T:  84,     U:  85,     V:  86,     W:  87,
                 X:  88,     Y:  89,     Z:  90,    '[': 91,    '\\':92,    ']': 93,    '^': 94,    '_': 95,
                '`': 96,     a:  97,     b:  98,     c:  99,     d: 100,     e: 101,     f: 102,     g: 103,
                 h:  104,    i: 105,     j: 106,     k: 107,     l: 108,     m: 109,     n: 110,     o: 111,
                 p:  112,    q: 113,     r: 114,     s: 115,     t: 116,     u: 117,     v: 118,     w: 119,
                 x:  120,    y: 121,     z: 122,    '{':123,    '|':124,    '}':125,    '~':126
            };
            
            /**
             * Browser keyCodes we must pay particular attention to.  For the most part, these are
             * non-alphanumeric or function keys, some which may require special treatment (eg,
             * preventDefault() if returning false on the initial keyDown event is insufficient).
             *
             * keyCodes for most common ASCII keys can simply use the appropriate ASCII code above.
             *
             * Most of these represent non-ASCII keys (eg, the LEFT arrow key), yet for some reason,
             * browsers defined them using ASCII codes (eg, the LEFT arrow key uses the ASCII code
             * for '%' or 37).  This conflict is discussed further in the definition of CLICKCODE below.
             *
             * @enum {number}
             */
            Keyboard.KEYCODE = {
                /* 0x08 */ BS:          8,
                /* 0x09 */ TAB:         9,
                /* 0x0A */ LF:          10,
                /* 0x0D */ CR:          13,
                /* 0x10 */ SHIFT:       16,
                /* 0x11 */ CTRL:        17,
                /* 0x12 */ ALT:         18,
                /* 0x13 */ PAUSE:       19,         // PAUSE/BREAK
                /* 0x14 */ CAPS_LOCK:   20,
                /* 0x1B */ ESC:         27,
                /* 0x21 */ PGUP:        33,
                /* 0x22 */ PGDN:        34,
                /* 0x23 */ END:         35,
                /* 0x24 */ HOME:        36,
                /* 0x25 */ LEFT:        37,
                /* 0x26 */ UP:          38,
                /* 0x27 */ RIGHT:       39,
                /* 0x27 */ FF_QUOTE:    39,
                /* 0x28 */ DOWN:        40,
                /* 0x2C */ FF_COMMA:    44,
                /* 0x2C */ PRTSC:       44,
                /* 0x2D */ INS:         45,
                /* 0x2E */ DEL:         46,
                /* 0x2E */ FF_PERIOD:   46,
                /* 0x2F */ FF_SLASH:    47,
                /* 0x3B */ FF_SEMI:     59,
                /* 0x3D */ FF_EQUALS:   61,
                /* 0x5B */ CMD:         91,         // aka WIN
                /* 0x5B */ FF_LBRACK:   91,
                /* 0x5C */ FF_BSLASH:   92,
                /* 0x5D */ RCMD:        93,         // aka MENU
                /* 0x5D */ FF_RBRACK:   93,
                /* 0x60 */ NUM_INS:     96,         // 0
                /* 0x60 */ FF_BQUOTE:   96,
                /* 0x61 */ NUM_END:     97,         // 1
                /* 0x62 */ NUM_DOWN:    98,         // 2
                /* 0x63 */ NUM_PGDN:    99,         // 3
                /* 0x64 */ NUM_LEFT:    100,        // 4
                /* 0x65 */ NUM_CENTER:  101,        // 5
                /* 0x66 */ NUM_RIGHT:   102,        // 6
                /* 0x67 */ NUM_HOME:    103,        // 7
                /* 0x68 */ NUM_UP:      104,        // 8
                /* 0x69 */ NUM_PGUP:    105,        // 9
                /* 0x6A */ NUM_MUL:     106,
                /* 0x6B */ NUM_ADD:     107,
                /* 0x6D */ NUM_SUB:     109,
                /* 0x6E */ NUM_DEL:     110,        // .
                /* 0x6F */ NUM_DIV:     111,
                /* 0x70 */ F1:          112,
                /* 0x71 */ F2:          113,
                /* 0x72 */ F3:          114,
                /* 0x73 */ F4:          115,
                /* 0x74 */ F5:          116,
                /* 0x75 */ F6:          117,
                /* 0x76 */ F7:          118,
                /* 0x77 */ F8:          119,
                /* 0x78 */ F9:          120,
                /* 0x79 */ F10:         121,
                /* 0x7A */ F11:         122,
                /* 0x7B */ F12:         123,
                /* 0x90 */ NUM_LOCK:    144,
                /* 0x91 */ SCROLL_LOCK: 145,
                /* 0xAD */ FF_DASH:     173,
                /* 0xBA */ SEMI:        186,        // Firefox: 59
                /* 0xBB */ EQUALS:      187,        // Firefox: 61
                /* 0xBC */ COMMA:       188,        // Firefox: 44
                /* 0xBD */ DASH:        189,        // Firefox: 173
                /* 0xBE */ PERIOD:      190,        // Firefox: 46
                /* 0xBF */ SLASH:       191,        // Firefox: 47
                /* 0xC0 */ BQUOTE:      192,        // Firefox: 96
                /* 0xDB */ LBRACK:      219,        // Firefox: 91
                /* 0xDC */ BSLASH:      220,        // Firefox: 92
                /* 0xDD */ RBRACK:      221,        // Firefox: 93
                /* 0xDE */ QUOTE:       222,        // Firefox: 39
                /* 0xE0 */ FF_CMD:      224,        // Firefox only (used for both CMD and RCMD)
                //
                // The following biases use what I'll call Decimal Coded Binary or DCB (the opposite of BCD),
                // where the thousands digit is used to store the sum of "binary" digits 1 and/or 2 and/or 4.
                //
                // Technically, that makes it DCO (Decimal Coded Octal), but then again, BCD should have really
                // been called HCD (Hexadecimal Coded Decimal), so if "they" can take liberties, so can I.
                //
                // ONDOWN is a bias we add to browser keyCodes that we want to handle on "down" rather than on "press".
                //
                ONDOWN:                 1000,
                //
                // ONRIGHT is a bias we add to browser keyCodes that need to check for a "right" location (default is "left")
                //
                ONRIGHT:                2000,
                //
                // FAKE is a bias we add to signal these are fake keyCodes corresponding to internal keystroke combinations.
                // The actual values are for internal use only and merely need to be unique and used consistently.
                //
                FAKE:                   4000
            };
            
            /*
             * Maps "stupid" keyCodes to their "non-stupid" counterparts
             */
            Keyboard.STUPID_KEYCODES = {};
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.SEMI]    = Keyboard.ASCII[';'];   // 186 -> 59
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.EQUALS]  = Keyboard.ASCII['='];   // 187 -> 61
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.COMMA]   = Keyboard.ASCII[','];   // 188 -> 44
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.DASH]    = Keyboard.ASCII['-'];   // 189 -> 45
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.PERIOD]  = Keyboard.ASCII['.'];   // 190 -> 46
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.SLASH]   = Keyboard.ASCII['/'];   // 191 -> 47
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.BQUOTE]  = Keyboard.ASCII['`'];   // 192 -> 96
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.LBRACK]  = Keyboard.ASCII['['];   // 219 -> 91
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.BSLASH]  = Keyboard.ASCII['\\'];  // 220 -> 92
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.RBRACK]  = Keyboard.ASCII[']'];   // 221 -> 93
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.QUOTE]   = Keyboard.ASCII["'"];   // 222 -> 39
            Keyboard.STUPID_KEYCODES[Keyboard.KEYCODE.FF_DASH] = Keyboard.ASCII['-'];
            
            /*
             * Maps unshifted keyCodes to their shifted counterparts; to be used when a shift-key is down.
             * Alphabetic characters are handled in code, since they must also take CAPS_LOCK into consideration.
             */
            Keyboard.SHIFTED_KEYCODES = {};
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['1']]     = Keyboard.ASCII['!'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['2']]     = Keyboard.ASCII['@'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['3']]     = Keyboard.ASCII['#'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['4']]     = Keyboard.ASCII['$'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['5']]     = Keyboard.ASCII['%'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['6']]     = Keyboard.ASCII['^'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['7']]     = Keyboard.ASCII['&'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['8']]     = Keyboard.ASCII['*'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['9']]     = Keyboard.ASCII['('];
            Keyboard.SHIFTED_KEYCODES[Keyboard.ASCII['0']]     = Keyboard.ASCII[')'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.SEMI]   = Keyboard.ASCII[':'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.EQUALS] = Keyboard.ASCII['+'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.COMMA]  = Keyboard.ASCII['<'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.DASH]   = Keyboard.ASCII['_'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.PERIOD] = Keyboard.ASCII['>'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.SLASH]  = Keyboard.ASCII['?'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.BQUOTE] = Keyboard.ASCII['~'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.LBRACK] = Keyboard.ASCII['{'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.BSLASH] = Keyboard.ASCII['|'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.RBRACK] = Keyboard.ASCII['}'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.QUOTE]  = Keyboard.ASCII['"'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.FF_DASH]   = Keyboard.ASCII['_'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.FF_EQUALS] = Keyboard.ASCII['+'];
            Keyboard.SHIFTED_KEYCODES[Keyboard.KEYCODE.FF_SEMI]   = Keyboard.ASCII[':'];
            
            Keyboard.SIMCODE = {
                BS:           Keyboard.KEYCODE.BS          + Keyboard.KEYCODE.ONDOWN,
                TAB:          Keyboard.KEYCODE.TAB         + Keyboard.KEYCODE.ONDOWN,
                SHIFT:        Keyboard.KEYCODE.SHIFT       + Keyboard.KEYCODE.ONDOWN,
                RSHIFT:       Keyboard.KEYCODE.SHIFT       + Keyboard.KEYCODE.ONDOWN + Keyboard.KEYCODE.ONRIGHT,
                CTRL:         Keyboard.KEYCODE.CTRL        + Keyboard.KEYCODE.ONDOWN,
                ALT:          Keyboard.KEYCODE.ALT         + Keyboard.KEYCODE.ONDOWN,
                CAPS_LOCK:    Keyboard.KEYCODE.CAPS_LOCK   + Keyboard.KEYCODE.ONDOWN,
                ESC:          Keyboard.KEYCODE.ESC         + Keyboard.KEYCODE.ONDOWN,
                F1:           Keyboard.KEYCODE.F1          + Keyboard.KEYCODE.ONDOWN,
                F2:           Keyboard.KEYCODE.F2          + Keyboard.KEYCODE.ONDOWN,
                F3:           Keyboard.KEYCODE.F3          + Keyboard.KEYCODE.ONDOWN,
                F4:           Keyboard.KEYCODE.F4          + Keyboard.KEYCODE.ONDOWN,
                F5:           Keyboard.KEYCODE.F5          + Keyboard.KEYCODE.ONDOWN,
                F6:           Keyboard.KEYCODE.F6          + Keyboard.KEYCODE.ONDOWN,
                F7:           Keyboard.KEYCODE.F7          + Keyboard.KEYCODE.ONDOWN,
                F8:           Keyboard.KEYCODE.F8          + Keyboard.KEYCODE.ONDOWN,
                F9:           Keyboard.KEYCODE.F9          + Keyboard.KEYCODE.ONDOWN,
                F10:          Keyboard.KEYCODE.F10         + Keyboard.KEYCODE.ONDOWN,
                F11:          Keyboard.KEYCODE.F11         + Keyboard.KEYCODE.ONDOWN,
                F12:          Keyboard.KEYCODE.F12         + Keyboard.KEYCODE.ONDOWN,
                NUM_LOCK:     Keyboard.KEYCODE.NUM_LOCK    + Keyboard.KEYCODE.ONDOWN,
                SCROLL_LOCK:  Keyboard.KEYCODE.SCROLL_LOCK + Keyboard.KEYCODE.ONDOWN,
                PRTSC:        Keyboard.KEYCODE.PRTSC       + Keyboard.KEYCODE.ONDOWN,
                HOME:         Keyboard.KEYCODE.HOME        + Keyboard.KEYCODE.ONDOWN,
                UP:           Keyboard.KEYCODE.UP          + Keyboard.KEYCODE.ONDOWN,
                PGUP:         Keyboard.KEYCODE.PGUP        + Keyboard.KEYCODE.ONDOWN,
                NUM_SUB:      Keyboard.KEYCODE.NUM_SUB     + Keyboard.KEYCODE.ONDOWN,
                LEFT:         Keyboard.KEYCODE.LEFT        + Keyboard.KEYCODE.ONDOWN,
                NUM_CENTER:   Keyboard.KEYCODE.NUM_CENTER  + Keyboard.KEYCODE.ONDOWN,
                RIGHT:        Keyboard.KEYCODE.RIGHT       + Keyboard.KEYCODE.ONDOWN,
                NUM_ADD:      Keyboard.KEYCODE.NUM_ADD     + Keyboard.KEYCODE.ONDOWN,
                END:          Keyboard.KEYCODE.END         + Keyboard.KEYCODE.ONDOWN,
                DOWN:         Keyboard.KEYCODE.DOWN        + Keyboard.KEYCODE.ONDOWN,
                PGDN:         Keyboard.KEYCODE.PGDN        + Keyboard.KEYCODE.ONDOWN,
                INS:          Keyboard.KEYCODE.INS         + Keyboard.KEYCODE.ONDOWN,
                DEL:          Keyboard.KEYCODE.DEL         + Keyboard.KEYCODE.ONDOWN,
                CMD:          Keyboard.KEYCODE.CMD         + Keyboard.KEYCODE.ONDOWN,
                RCMD:         Keyboard.KEYCODE.RCMD        + Keyboard.KEYCODE.ONDOWN,
                FF_CMD:       Keyboard.KEYCODE.FF_CMD      + Keyboard.KEYCODE.ONDOWN,
                CTRL_C:       Keyboard.ASCII.CTRL_C        + Keyboard.KEYCODE.FAKE,
                CTRL_BREAK:   Keyboard.KEYCODE.BS          + Keyboard.KEYCODE.FAKE,
                CTRL_ALT_DEL: Keyboard.KEYCODE.DEL         + Keyboard.KEYCODE.FAKE
            };
            
            /*
             * Scan code constants
             */
            Keyboard.SCANCODE = {
                /* 0x01 */ ESC:         1,
                /* 0x02 */ ONE:         2,
                /* 0x03 */ TWO:         3,
                /* 0x04 */ THREE:       4,
                /* 0x05 */ FOUR:        5,
                /* 0x06 */ FIVE:        6,
                /* 0x07 */ SIX:         7,
                /* 0x08 */ SEVEN:       8,
                /* 0x09 */ EIGHT:       9,
                /* 0x0A */ NINE:        10,
                /* 0x0B */ ZERO:        11,
                /* 0x0C */ DASH:        12,
                /* 0x0D */ EQUALS:      13,
                /* 0x0E */ BS:          14,
                /* 0x0F */ TAB:         15,
                /* 0x10 */ Q:           16,
                /* 0x11 */ W:           17,
                /* 0x12 */ E:           18,
                /* 0x13 */ R:           19,
                /* 0x14 */ T:           20,
                /* 0x15 */ Y:           21,
                /* 0x16 */ U:           22,
                /* 0x17 */ I:           23,
                /* 0x18 */ O:           24,
                /* 0x19 */ P:           25,
                /* 0x1A */ LBRACK:      26,
                /* 0x1B */ RBRACK:      27,
                /* 0x1C */ ENTER:       28,
                /* 0x1D */ CTRL:        29,
                /* 0x1E */ A:           30,
                /* 0x1F */ S:           31,
                /* 0x20 */ D:           32,
                /* 0x21 */ F:           33,
                /* 0x22 */ G:           34,
                /* 0x23 */ H:           35,
                /* 0x24 */ J:           36,
                /* 0x25 */ K:           37,
                /* 0x26 */ L:           38,
                /* 0x27 */ SEMI:        39,
                /* 0x28 */ QUOTE:       40,
                /* 0x29 */ BQUOTE:      41,
                /* 0x2A */ SHIFT:       42,
                /* 0x2B */ BSLASH:      43,
                /* 0x2C */ Z:           44,
                /* 0x2D */ X:           45,
                /* 0x2E */ C:           46,
                /* 0x2F */ V:           47,
                /* 0x30 */ B:           48,
                /* 0x31 */ N:           49,
                /* 0x32 */ M:           50,
                /* 0x33 */ COMMA:       51,
                /* 0x34 */ PERIOD:      52,
                /* 0x35 */ SLASH:       53,
                /* 0x36 */ RSHIFT:      54,
                /* 0x37 */ PRTSC:       55,         // unshifted '*'; becomes dedicated 'Print Screen' key on 101-key keyboards
                /* 0x38 */ ALT:         56,
                /* 0x39 */ SPACE:       57,
                /* 0x3A */ CAPS_LOCK:   58,
                /* 0x3B */ F1:          59,
                /* 0x3C */ F2:          60,
                /* 0x3D */ F3:          61,
                /* 0x3E */ F4:          62,
                /* 0x3F */ F5:          63,
                /* 0x40 */ F6:          64,
                /* 0x41 */ F7:          65,
                /* 0x42 */ F8:          66,
                /* 0x43 */ F9:          67,
                /* 0x44 */ F10:         68,
                /* 0x45 */ NUM_LOCK:    69,
                /* 0x46 */ SCROLL_LOCK: 70,
                /* 0x47 */ NUM_HOME:    71,
                /* 0x48 */ NUM_UP:      72,
                /* 0x49 */ NUM_PGUP:    73,
                /* 0x4A */ NUM_SUB:     74,
                /* 0x4B */ NUM_LEFT:    75,
                /* 0x4C */ NUM_CENTER:  76,
                /* 0x4D */ NUM_RIGHT:   77,
                /* 0x4E */ NUM_ADD:     78,
                /* 0x4F */ NUM_END:     79,
                /* 0x50 */ NUM_DOWN:    80,
                /* 0x51 */ NUM_PGDN:    81,
                /* 0x52 */ NUM_INS:     82,
                /* 0x53 */ NUM_DEL:     83,
                /* 0x54 */ SYSREQ:      84,         // 84-key keyboard only (simulated with 'alt'+'prtsc' on 101-key keyboards)
                /* 0x54 */ PAUSE:       84,         // 101-key keyboard only
                /* 0x57 */ F11:         87,
                /* 0x58 */ F12:         88,
                /* 0x5B */ WIN:         91,         // aka CMD
                /* 0x5C */ RWIN:        92,
                /* 0x5D */ MENU:        93,         // aka CMD + ONRIGHT
                /* 0x7F */ MAKE:        127,
                /* 0x80 */ BREAK:       128,
                /* 0xE0 */ EXTEND1:     224,
                /* 0xE1 */ EXTEND2:     225
            };
            
            /**
             * The set of values that a browser may store in the 'location' property of a keyboard event object
             * which we also support.
             *
             * @enum {number}
             */
            Keyboard.LOCATION = {
                LEFT:           1,
                RIGHT:          2,
                NUMPAD:         3
            };
            
            /**
             * These internal "shift key" states are used to indicate BOTH the physical shift-key states (in bitsState)
             * and the simulated shift-key states (in bitsStateSim).  The LOCK keys are problematic in both cases: the
             * browsers give us no way to query the LOCK key states, so we can only infer them, and because they are "soft"
             * locks, the machine's notion of their state is subject to change at any time as well.  Granted, the IBM PC
             * ROM BIOS will store its LOCK states in the ROM BIOS Data Area (@0040:0017), but that's just a BIOS convention.
             *
             * Also, because this is purely for internal use, don't make the mistake of thinking that these bits have any
             * connection to the ROM BIOS bits @0040:0017 (they don't).  We emulate hardware, not ROMs.
             *
             * TODO: Consider taking notice of the ROM BIOS Data Area state anyway, even though I'd rather remain ROM-agnostic;
             * at the very least, it would help us keep our LOCK LEDs in sync with the machine's LOCK states.  However, the LED
             * issue will be largely moot (at least for MODEL_5170 machines) once we add support for PC AT keyboard LED commands.
             *
             * Note that right-hand state bits are equal to the left-hand bits shifted right 1 bit; makes sense, "right"? ;-)
             *
             * @enum {number}
             */
            Keyboard.STATE = {
                RSHIFT:         0x0001,
                SHIFT:          0x0002,
                RCTRL:          0x0004,             // 101-key keyboard only
                CTRL:           0x0008,
                CTRLS:          0x000c,
                RALT:           0x0010,             // 101-key keyboard only
                ALT:            0x0020,
                ALTS:           0x0030,
                RCMD:           0x0040,             // 101-key keyboard only
                CMD:            0x0080,             // 101-key keyboard only
                CMDS:           0x00c0,
                ALL_RIGHT:      0x0055,             // RSHIFT | RCTRL | RALT | RCMD
                ALL_SHIFT:      0x00ff,             // SHIFT | RSHIFT | CTRL | RCTRL | ALT | RALT | CMD | RCMD
                INSERT:         0x0100,             // TODO: Placeholder (we currently have no notion of any "insert" states)
                CAPS_LOCK:      0x0200,
                NUM_LOCK:       0x0400,
                SCROLL_LOCK:    0x0800,
                ALL_LOCKS:      0x0e00              // CAPS_LOCK | NUM_LOCK | SCROLL_LOCK
            };
            
            /**
             * Maps KEYCODES of shift/modifier keys to their corresponding (default) STATES bit above.
             *
             * @enum {number}
             */
            Keyboard.KEYSTATES = {};
            Keyboard.KEYSTATES[Keyboard.SIMCODE.RSHIFT]      = Keyboard.STATE.RSHIFT;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.SHIFT]       = Keyboard.STATE.SHIFT;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.CTRL]        = Keyboard.STATE.CTRL;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.ALT]         = Keyboard.STATE.ALT;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.CMD]         = Keyboard.STATE.CMD;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.RCMD]        = Keyboard.STATE.RCMD;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.FF_CMD]      = Keyboard.STATE.CMD;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.CAPS_LOCK]   = Keyboard.STATE.CAPS_LOCK;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.NUM_LOCK]    = Keyboard.STATE.NUM_LOCK;
            Keyboard.KEYSTATES[Keyboard.SIMCODE.SCROLL_LOCK] = Keyboard.STATE.SCROLL_LOCK;
            
            /**
             * Maps CLICKCODE (string) to SIMCODE (number).
             *
             * @enum {number}
             */
            Keyboard.CLICKCODES = {
                'TAB':          Keyboard.SIMCODE.TAB,
                'ESC':          Keyboard.SIMCODE.ESC,
                'F1':           Keyboard.SIMCODE.F1,
                'F2':           Keyboard.SIMCODE.F2,
                'F3':           Keyboard.SIMCODE.F3,
                'F4':           Keyboard.SIMCODE.F4,
                'F5':           Keyboard.SIMCODE.F5,
                'F6':           Keyboard.SIMCODE.F6,
                'F7':           Keyboard.SIMCODE.F7,
                'F8':           Keyboard.SIMCODE.F8,
                'F9':           Keyboard.SIMCODE.F9,
                'F10':          Keyboard.SIMCODE.F10,
                'LEFT':         Keyboard.SIMCODE.LEFT,      // formerly "left-arrow"
                'UP':           Keyboard.SIMCODE.UP,        // formerly "up-arrow"
                'RIGHT':        Keyboard.SIMCODE.RIGHT,     // formerly "right-arrow"
                'DOWN':         Keyboard.SIMCODE.DOWN,      // formerly "down-arrow"
                /*
                 * These bindings are for convenience (common key combinations that can be bound to a single control)
                 */
                'CTRL_C':       Keyboard.SIMCODE.CTRL_C,
                'CTRL_BREAK':   Keyboard.SIMCODE.CTRL_BREAK,
                'CTRL_ALT_DEL': Keyboard.SIMCODE.CTRL_ALT_DEL
            };
            
            /**
             * Maps SOFTCODE (string) to KEYCODE or SIMCODE (number).
             *
             * We define identifiers for all possible keys, based on their primary (unshifted) character or function.
             * This also serves as a definition of all supported keys, making it possible to create full-featured
             * "soft keyboards".
             *
             * One exception to the (unshifted) rule above is 'prtsc': on the original IBM 83-key and 84-key keyboards,
             * its primary (unshifted) character was '*', but on 101-key keyboards, it became a separate key ('prtsc',
             * now labeled "Print Screen"), as did the num-pad '*' ('num-mul'), so 'prtsc' seems worthy of an exception
             * to the rule.
             *
             * On 83-key and 84-key keyboards, 'ctrl'+'num-lock' triggered a "pause" operation and 'ctrl'+'scroll-lock'
             * triggered a "break" operation.
             *
             * On 101-key keyboards, IBM decided to move both those special operations to a new 'pause' ("Pause/Break")
             * key, near the new dedicated 'prtsc' ("Print Screen/SysRq") key -- and to drop the "e" from "SysReq".
             * Those keys behave as follows:
             *
             *      When 'pause' is pressed alone, it generates 0xe1 0x1d 0x45 0xe1 0x9d 0xc5 on make (nothing on break),
             *      which essentially simulates the make-and-break of the 'ctrl' and 'num-lock' keys (ignoring the 0xe1),
             *      triggering a "pause" operation.
             *
             *      When 'pause' is pressed with 'ctrl', it generates 0xe0 0x46 0xe0 0xc6 on make (nothing on break) and
             *      does not repeat, which essentially simulates the make-and-break of 'scroll-lock', which, in conjunction
             *      with the separate make-and-break of 'ctrl', triggers a "break" operation.
             *
             *      When 'prtsc' is pressed alone, it generates 0xe0 0x2a 0xe0 0x37, simulating the make of both 'shift'
             *      and 'prtsc'; when pressed with 'shift' or 'ctrl', it generates only 0xe0 0x37; and when pressed with
             *      'alt', it generates only 0x54 (to simulate 'sysreq').
             *
             *      TODO: Implement the above behaviors.
             *
             * All key identifiers must be quotable using single-quotes, because that's how components.xsl will encode them
             * *inside* the "data-value" attribute of the corresponding HTML control.  Which, in turn, is why the single-quote
             * key is defined as 'quote' rather than "'".  Similarly, if there was unshifted "double-quote" key, it could
             * not be called '"', because components.xsl quotes the *entire* "data-value" attribute using double-quotes.
             *
             * In the (informal) numbering of keys below, two keys are deliberately numbered 84, reflecting the fact that
             * the 'sysreq' key was added to the 84-key keyboard but then dropped from the 101-key keyboard as a stand-alone key.
             *
             * @enum {number}
             */
            Keyboard.SOFTCODES = {
                /*  1 */    'esc':          Keyboard.SIMCODE.ESC,
                /*  2 */    '1':            Keyboard.ASCII['1'],
                /*  3 */    '2':            Keyboard.ASCII['2'],
                /*  4 */    '3':            Keyboard.ASCII['3'],
                /*  5 */    '4':            Keyboard.ASCII['4'],
                /*  6 */    '5':            Keyboard.ASCII['5'],
                /*  7 */    '6':            Keyboard.ASCII['6'],
                /*  8 */    '7':            Keyboard.ASCII['7'],
                /*  9 */    '8':            Keyboard.ASCII['8'],
                /* 10 */    '9':            Keyboard.ASCII['9'],
                /* 11 */    '0':            Keyboard.ASCII['0'],
                /* 12 */    '-':            Keyboard.ASCII['-'],
                /* 13 */    '=':            Keyboard.ASCII['='],
                /* 14 */    'bs':           Keyboard.SIMCODE.BS,
                /* 15 */    'tab':          Keyboard.SIMCODE.TAB,
                /* 16 */    'q':            Keyboard.ASCII.Q,
                /* 17 */    'w':            Keyboard.ASCII.W,
                /* 18 */    'e':            Keyboard.ASCII.E,
                /* 19 */    'r':            Keyboard.ASCII.R,
                /* 20 */    't':            Keyboard.ASCII.T,
                /* 21 */    'y':            Keyboard.ASCII.Y,
                /* 22 */    'u':            Keyboard.ASCII.U,
                /* 23 */    'i':            Keyboard.ASCII.I,
                /* 24 */    'o':            Keyboard.ASCII.O,
                /* 25 */    'p':            Keyboard.ASCII.P,
                /* 26 */    '[':            Keyboard.ASCII['['],
                /* 27 */    ']':            Keyboard.ASCII[']'],
                /* 28 */    'enter':        Keyboard.KEYCODE.CR,
                /* 29 */    'ctrl':         Keyboard.SIMCODE.CTRL,
                /* 30 */    'a':            Keyboard.ASCII.A,
                /* 31 */    's':            Keyboard.ASCII.S,
                /* 32 */    'd':            Keyboard.ASCII.D,
                /* 33 */    'f':            Keyboard.ASCII.F,
                /* 34 */    'g':            Keyboard.ASCII.G,
                /* 35 */    'h':            Keyboard.ASCII.H,
                /* 36 */    'j':            Keyboard.ASCII.J,
                /* 37 */    'k':            Keyboard.ASCII.K,
                /* 38 */    'l':            Keyboard.ASCII.L,
                /* 39 */    ';':            Keyboard.ASCII[';'],
                /* 40 */    'quote':        Keyboard.ASCII["'"],            // formerly "squote"
                /* 41 */    '`':            Keyboard.ASCII['`'],            // formerly "bquote"
                /* 42 */    'shift':        Keyboard.SIMCODE.SHIFT,         // formerly "lshift"
                /* 43 */    '\\':           Keyboard.ASCII['\\'],           // formerly "bslash"
                /* 44 */    'z':            Keyboard.ASCII.Z,
                /* 45 */    'x':            Keyboard.ASCII.X,
                /* 46 */    'c':            Keyboard.ASCII.C,
                /* 47 */    'v':            Keyboard.ASCII.V,
                /* 48 */    'b':            Keyboard.ASCII.B,
                /* 49 */    'n':            Keyboard.ASCII.N,
                /* 50 */    'm':            Keyboard.ASCII.M,
                /* 51 */    ',':            Keyboard.ASCII[','],
                /* 52 */    '.':            Keyboard.ASCII['.'],
                /* 53 */    '/':            Keyboard.ASCII['/'],
                /* 54 */    'right-shift':  Keyboard.SIMCODE.RSHIFT,        // formerly "rshift"
                /* 55 */    'prtsc':        Keyboard.SIMCODE.PRTSC,         // unshifted '*'; becomes dedicated 'Print Screen' key on 101-key keyboards
                /* 56 */    'alt':          Keyboard.SIMCODE.ALT,
                /* 57 */    'space':        Keyboard.ASCII[' '],
                /* 58 */    'caps-lock':    Keyboard.SIMCODE.CAPS_LOCK,
                /* 59 */    'f1':           Keyboard.SIMCODE.F1,
                /* 60 */    'f2':           Keyboard.SIMCODE.F2,
                /* 61 */    'f3':           Keyboard.SIMCODE.F3,
                /* 62 */    'f4':           Keyboard.SIMCODE.F4,
                /* 63 */    'f5':           Keyboard.SIMCODE.F5,
                /* 64 */    'f6':           Keyboard.SIMCODE.F6,
                /* 65 */    'f7':           Keyboard.SIMCODE.F7,
                /* 66 */    'f8':           Keyboard.SIMCODE.F8,
                /* 67 */    'f9':           Keyboard.SIMCODE.F9,
                /* 68 */    'f10':          Keyboard.SIMCODE.F10,
                /* 69 */    'num-lock':     Keyboard.SIMCODE.NUM_LOCK,
                /* 70 */    'scroll-lock':  Keyboard.SIMCODE.SCROLL_LOCK,   // TODO: 0xe046 on 101-key keyboards?
                /* 71 */    'num-home':     Keyboard.SIMCODE.HOME,          // formerly "home"
                /* 72 */    'num-up':       Keyboard.SIMCODE.UP,            // formerly "up-arrow"
                /* 73 */    'num-pgup':     Keyboard.SIMCODE.PGUP,          // formerly "page-up"
                /* 74 */    'num-sub':      Keyboard.SIMCODE.NUM_SUB,       // formerly "num-minus"
                /* 75 */    'num-left':     Keyboard.SIMCODE.LEFT,          // formerly "left-arrow"
                /* 76 */    'num-center':   Keyboard.SIMCODE.NUM_CENTER,    // formerly "center"
                /* 77 */    'num-right':    Keyboard.SIMCODE.RIGHT,         // formerly "right-arrow"
                /* 78 */    'num-add':      Keyboard.SIMCODE.NUM_ADD,       // formerly "num-plus"
                /* 79 */    'num-end':      Keyboard.SIMCODE.END,           // formerly "end"
                /* 80 */    'num-down':     Keyboard.SIMCODE.DOWN,          // formerly "down-arrow"
                /* 81 */    'num-pgdn':     Keyboard.SIMCODE.PGDN,          // formerly "page-down"
                /* 82 */    'num-ins':      Keyboard.SIMCODE.INS,           // formerly "ins"
                /* 83 */    'num-del':      Keyboard.SIMCODE.DEL            // formerly "del"
            //  /* 84 */    'sysreq':       Keyboard.SCANCODE.SYSREQ,       // 84-key keyboard only (simulated with 'alt'+'prtsc' on 101-key keyboards)
            //  /* 84 */    'pause':        Keyboard.SCANCODE.PAUSE,        // 101-key keyboard only
            //  /* 85 */    'f11':          Keyboard.SCANCODE.F11,
            //  /* 86 */    'f12':          Keyboard.SCANCODE.F12,
            //  /* 87 */    'num-enter':    Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.ENTER << 8),
            //  /* 88 */    'right-ctrl':   Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.CTRL << 8),
            //  /* 89 */    'num-div':      Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.SLASH << 8),
            //  /* 90 */    'num-mul':      Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.PRTSC << 8),
            //  /* 91 */    'right-alt':    Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.ALT << 8),
            //  /* 92 */    'home':         Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_HOME << 8),
            //  /* 93 */    'up':           Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_UP << 8),
            //  /* 94 */    'pgup':         Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_PGUP << 8),
            //  /* 95 */    'left':         Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_LEFT << 8),
            //  /* 96 */    'right':        Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_RIGHT << 8),
            //  /* 97 */    'end':          Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_END << 8),
            //  /* 98 */    'down':         Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_DOWN << 8),
            //  /* 99 */    'pgdn':         Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_PGDN << 8),
            //  /*100 */    'ins':          Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_INS << 8),
            //  /*101 */    'del':          Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.NUM_DEL << 8),
            //              'win':          Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.WIN << 8),
            //              'right-win':    Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.RWIN << 8),
            //              'menu':         Keyboard.SCANCODE.EXTEND1 | (Keyboard.SCANCODE.MENU << 8)
            };
            
            /**
             * Maps "soft-key" definitions (above) of shift/modifier keys to their corresponding (default) STATES bit.
             *
             * @enum {number}
             */
            Keyboard.LEDSTATES = {
                'caps-lock':    Keyboard.STATE.CAPS_LOCK,
                'num-lock':     Keyboard.STATE.NUM_LOCK,
                'scroll-lock':  Keyboard.STATE.SCROLL_LOCK
            };
            
            /**
             * Maps SIMCODE (number) to SCANCODE (number(s)).
             *
             * This array is used by keySimulate() to lookup a given SIMCODE and convert it to a SCANCODE
             * (lower byte), plus any required shift key SCANCODES (upper bytes).
             *
             * Using keyCodes from keyPress events proved to be more robust than using keyCodes from keyDown and
             * keyUp events, in part because of differences in the way browsers generate the keyDown and keyUp events.
             * For example, Safari on iOS devices will not generate up/down events for shift keys, and for other keys,
             * the up/down events are usually generated after the actual press is complete, and in rapid succession.
             *
             * The other problem (which is more of a problem with keyboards like the C1P than any IBM keyboards) is
             * that the shift/modifier state for a character on the "source" keyboard may not match the shift/modifier
             * state for the same character on the "target" keyboard.  And since this code is inherited from C1Pjs,
             * we've inherited the same solution: keySimulate() has the ability to "undo" any states in bitsState
             * that conflict with the state(s) required for the character in question.
             *
             * @enum {number}
             */
            Keyboard.SIMCODES = {};
            Keyboard.SIMCODES[Keyboard.SIMCODE.ESC]          = Keyboard.SCANCODE.ESC;
            Keyboard.SIMCODES[Keyboard.ASCII['1']]           = Keyboard.SCANCODE.ONE;
            Keyboard.SIMCODES[Keyboard.ASCII['!']]           = Keyboard.SCANCODE.ONE    | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['2']]           = Keyboard.SCANCODE.TWO;
            Keyboard.SIMCODES[Keyboard.ASCII['@']]           = Keyboard.SCANCODE.TWO    | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['3']]           = Keyboard.SCANCODE.THREE;
            Keyboard.SIMCODES[Keyboard.ASCII['#']]           = Keyboard.SCANCODE.THREE  | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['4']]           = Keyboard.SCANCODE.FOUR;
            Keyboard.SIMCODES[Keyboard.ASCII['$']]           = Keyboard.SCANCODE.FOUR   | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['5']]           = Keyboard.SCANCODE.FIVE;
            Keyboard.SIMCODES[Keyboard.ASCII['%']]           = Keyboard.SCANCODE.FIVE   | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['6']]           = Keyboard.SCANCODE.SIX;
            Keyboard.SIMCODES[Keyboard.ASCII['^']]           = Keyboard.SCANCODE.SIX    | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['7']]           = Keyboard.SCANCODE.SEVEN;
            Keyboard.SIMCODES[Keyboard.ASCII['&']]           = Keyboard.SCANCODE.SEVEN  | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['8']]           = Keyboard.SCANCODE.EIGHT;
            Keyboard.SIMCODES[Keyboard.ASCII['*']]           = Keyboard.SCANCODE.EIGHT  | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['9']]           = Keyboard.SCANCODE.NINE;
            Keyboard.SIMCODES[Keyboard.ASCII['(']]           = Keyboard.SCANCODE.NINE   | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['0']]           = Keyboard.SCANCODE.ZERO;
            Keyboard.SIMCODES[Keyboard.ASCII[')']]           = Keyboard.SCANCODE.ZERO   | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['-']]           = Keyboard.SCANCODE.DASH;
            Keyboard.SIMCODES[Keyboard.ASCII['_']]           = Keyboard.SCANCODE.DASH   | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['=']]           = Keyboard.SCANCODE.EQUALS;
            Keyboard.SIMCODES[Keyboard.ASCII['+']]           = Keyboard.SCANCODE.EQUALS | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.SIMCODE.BS]           = Keyboard.SCANCODE.BS;
            Keyboard.SIMCODES[Keyboard.SIMCODE.TAB]          = Keyboard.SCANCODE.TAB;
            Keyboard.SIMCODES[Keyboard.ASCII.q]              = Keyboard.SCANCODE.Q;
            Keyboard.SIMCODES[Keyboard.ASCII.Q]              = Keyboard.SCANCODE.Q      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.w]              = Keyboard.SCANCODE.W;
            Keyboard.SIMCODES[Keyboard.ASCII.W]              = Keyboard.SCANCODE.W      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.e]              = Keyboard.SCANCODE.E;
            Keyboard.SIMCODES[Keyboard.ASCII.E]              = Keyboard.SCANCODE.E      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.r]              = Keyboard.SCANCODE.R;
            Keyboard.SIMCODES[Keyboard.ASCII.R]              = Keyboard.SCANCODE.R      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.t]              = Keyboard.SCANCODE.T;
            Keyboard.SIMCODES[Keyboard.ASCII.T]              = Keyboard.SCANCODE.T      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.y]              = Keyboard.SCANCODE.Y;
            Keyboard.SIMCODES[Keyboard.ASCII.Y]              = Keyboard.SCANCODE.Y      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.u]              = Keyboard.SCANCODE.U;
            Keyboard.SIMCODES[Keyboard.ASCII.U]              = Keyboard.SCANCODE.U      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.i]              = Keyboard.SCANCODE.I;
            Keyboard.SIMCODES[Keyboard.ASCII.I]              = Keyboard.SCANCODE.I      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.o]              = Keyboard.SCANCODE.O;
            Keyboard.SIMCODES[Keyboard.ASCII.O]              = Keyboard.SCANCODE.O      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.p]              = Keyboard.SCANCODE.P;
            Keyboard.SIMCODES[Keyboard.ASCII.P]              = Keyboard.SCANCODE.P      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['[']]           = Keyboard.SCANCODE.LBRACK;
            Keyboard.SIMCODES[Keyboard.ASCII['{']]           = Keyboard.SCANCODE.LBRACK | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII[']']]           = Keyboard.SCANCODE.RBRACK;
            Keyboard.SIMCODES[Keyboard.ASCII['}']]           = Keyboard.SCANCODE.RBRACK | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.KEYCODE.CR]           = Keyboard.SCANCODE.ENTER;
            Keyboard.SIMCODES[Keyboard.SIMCODE.CTRL]         = Keyboard.SCANCODE.CTRL;
            Keyboard.SIMCODES[Keyboard.ASCII.a]              = Keyboard.SCANCODE.A;
            Keyboard.SIMCODES[Keyboard.ASCII.A]              = Keyboard.SCANCODE.A      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.s]              = Keyboard.SCANCODE.S;
            Keyboard.SIMCODES[Keyboard.ASCII.S]              = Keyboard.SCANCODE.S      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.d]              = Keyboard.SCANCODE.D;
            Keyboard.SIMCODES[Keyboard.ASCII.D]              = Keyboard.SCANCODE.D      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.f]              = Keyboard.SCANCODE.F;
            Keyboard.SIMCODES[Keyboard.ASCII.F]              = Keyboard.SCANCODE.F      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.g]              = Keyboard.SCANCODE.G;
            Keyboard.SIMCODES[Keyboard.ASCII.G]              = Keyboard.SCANCODE.G      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.h]              = Keyboard.SCANCODE.H;
            Keyboard.SIMCODES[Keyboard.ASCII.H]              = Keyboard.SCANCODE.H      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.j]              = Keyboard.SCANCODE.J;
            Keyboard.SIMCODES[Keyboard.ASCII.J]              = Keyboard.SCANCODE.J      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.k]              = Keyboard.SCANCODE.K;
            Keyboard.SIMCODES[Keyboard.ASCII.K]              = Keyboard.SCANCODE.K      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.l]              = Keyboard.SCANCODE.L;
            Keyboard.SIMCODES[Keyboard.ASCII.L]              = Keyboard.SCANCODE.L      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII[';']]           = Keyboard.SCANCODE.SEMI;
            Keyboard.SIMCODES[Keyboard.ASCII[':']]           = Keyboard.SCANCODE.SEMI   | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII["'"]]           = Keyboard.SCANCODE.QUOTE;
            Keyboard.SIMCODES[Keyboard.ASCII['"']]           = Keyboard.SCANCODE.QUOTE  | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['`']]           = Keyboard.SCANCODE.BQUOTE;
            Keyboard.SIMCODES[Keyboard.ASCII['~']]           = Keyboard.SCANCODE.BQUOTE | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.SIMCODE.SHIFT]        = Keyboard.SCANCODE.SHIFT;
            Keyboard.SIMCODES[Keyboard.ASCII['\\']]          = Keyboard.SCANCODE.BSLASH;
            Keyboard.SIMCODES[Keyboard.ASCII['|']]           = Keyboard.SCANCODE.BSLASH | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.z]              = Keyboard.SCANCODE.Z;
            Keyboard.SIMCODES[Keyboard.ASCII.Z]              = Keyboard.SCANCODE.Z      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.x]              = Keyboard.SCANCODE.X;
            Keyboard.SIMCODES[Keyboard.ASCII.X]              = Keyboard.SCANCODE.X      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.c]              = Keyboard.SCANCODE.C;
            Keyboard.SIMCODES[Keyboard.ASCII.C]              = Keyboard.SCANCODE.C      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.v]              = Keyboard.SCANCODE.V;
            Keyboard.SIMCODES[Keyboard.ASCII.V]              = Keyboard.SCANCODE.V      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.b]              = Keyboard.SCANCODE.B;
            Keyboard.SIMCODES[Keyboard.ASCII.B]              = Keyboard.SCANCODE.B      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.n]              = Keyboard.SCANCODE.N;
            Keyboard.SIMCODES[Keyboard.ASCII.N]              = Keyboard.SCANCODE.N      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII.m]              = Keyboard.SCANCODE.M;
            Keyboard.SIMCODES[Keyboard.ASCII.M]              = Keyboard.SCANCODE.M      | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII[',']]           = Keyboard.SCANCODE.COMMA;
            Keyboard.SIMCODES[Keyboard.ASCII['<']]           = Keyboard.SCANCODE.COMMA  | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['.']]           = Keyboard.SCANCODE.PERIOD;
            Keyboard.SIMCODES[Keyboard.ASCII['>']]           = Keyboard.SCANCODE.PERIOD | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.ASCII['/']]           = Keyboard.SCANCODE.SLASH;
            Keyboard.SIMCODES[Keyboard.ASCII['?']]           = Keyboard.SCANCODE.SLASH  | (Keyboard.SCANCODE.SHIFT << 8);
            Keyboard.SIMCODES[Keyboard.SIMCODE.RSHIFT]       = Keyboard.SCANCODE.RSHIFT;
            Keyboard.SIMCODES[Keyboard.SIMCODE.PRTSC]        = Keyboard.SCANCODE.PRTSC;
            Keyboard.SIMCODES[Keyboard.SIMCODE.ALT]          = Keyboard.SCANCODE.ALT;
            Keyboard.SIMCODES[Keyboard.ASCII[' ']]           = Keyboard.SCANCODE.SPACE;
            Keyboard.SIMCODES[Keyboard.SIMCODE.CAPS_LOCK]    = Keyboard.SCANCODE.CAPS_LOCK;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F1]           = Keyboard.SCANCODE.F1;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F2]           = Keyboard.SCANCODE.F2;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F3]           = Keyboard.SCANCODE.F3;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F4]           = Keyboard.SCANCODE.F4;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F5]           = Keyboard.SCANCODE.F5;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F6]           = Keyboard.SCANCODE.F6;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F7]           = Keyboard.SCANCODE.F7;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F8]           = Keyboard.SCANCODE.F8;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F9]           = Keyboard.SCANCODE.F9;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F10]          = Keyboard.SCANCODE.F10;
            Keyboard.SIMCODES[Keyboard.SIMCODE.NUM_LOCK]     = Keyboard.SCANCODE.NUM_LOCK;
            Keyboard.SIMCODES[Keyboard.SIMCODE.SCROLL_LOCK]  = Keyboard.SCANCODE.SCROLL_LOCK;
            Keyboard.SIMCODES[Keyboard.SIMCODE.HOME]         = Keyboard.SCANCODE.NUM_HOME;
            Keyboard.SIMCODES[Keyboard.SIMCODE.UP]           = Keyboard.SCANCODE.NUM_UP;
            Keyboard.SIMCODES[Keyboard.SIMCODE.PGUP]         = Keyboard.SCANCODE.NUM_PGUP;
            Keyboard.SIMCODES[Keyboard.SIMCODE.NUM_SUB]      = Keyboard.SCANCODE.NUM_SUB;
            Keyboard.SIMCODES[Keyboard.SIMCODE.LEFT]         = Keyboard.SCANCODE.NUM_LEFT;
            Keyboard.SIMCODES[Keyboard.SIMCODE.NUM_CENTER]   = Keyboard.SCANCODE.NUM_CENTER;
            Keyboard.SIMCODES[Keyboard.SIMCODE.RIGHT]        = Keyboard.SCANCODE.NUM_RIGHT;
            Keyboard.SIMCODES[Keyboard.SIMCODE.NUM_ADD]      = Keyboard.SCANCODE.NUM_ADD;
            Keyboard.SIMCODES[Keyboard.SIMCODE.END]          = Keyboard.SCANCODE.NUM_END;
            Keyboard.SIMCODES[Keyboard.SIMCODE.DOWN]         = Keyboard.SCANCODE.NUM_DOWN;
            Keyboard.SIMCODES[Keyboard.SIMCODE.PGDN]         = Keyboard.SCANCODE.NUM_PGDN;
            Keyboard.SIMCODES[Keyboard.SIMCODE.INS]          = Keyboard.SCANCODE.NUM_INS;
            Keyboard.SIMCODES[Keyboard.SIMCODE.DEL]          = Keyboard.SCANCODE.NUM_DEL;
            /*
             * Entries beyond this point are for keys that existed only on 101-key keyboards (well, except for 'sysreq',
             * which also existed on the 84-key keyboard), which ALSO means that these keys essentially did not exist
             * for a MODEL_5150 or MODEL_5160 machine, because those machines could use only 83-key keyboards.  Remember
             * that IBM machines and IBM keyboards are our reference point here, so while there were undoubtedly 5150/5160
             * clones that could use newer keyboards, as well as 3rd-party keyboards that could work with older machines,
             * support for non-IBM configurations is left for another day.
             *
             * TODO: The only relevance of newer keyboards to older machines is the fact that you're probably using a newer
             * keyboard with your browser, which raises the question of what to do with newer keys that older machines
             * wouldn't understand.  I don't attempt to filter out any of the entries below based on machine model, but that
             * would seem like a wise thing to do.
             *
             * TODO: Add entries for 'num-mul', 'num-div', 'num-enter', the stand-alone arrow keys, etc, AND at the same time,
             * make sure that keys with multi-byte sequences (eg, 0xe0 0x1c) work properly.
             */
            Keyboard.SIMCODES[Keyboard.SIMCODE.F11]          = Keyboard.SCANCODE.F11;
            Keyboard.SIMCODES[Keyboard.SIMCODE.F12]          = Keyboard.SCANCODE.F12;
            Keyboard.SIMCODES[Keyboard.SIMCODE.CMD]          = Keyboard.SCANCODE.WIN;
            Keyboard.SIMCODES[Keyboard.SIMCODE.RCMD]         = Keyboard.SCANCODE.MENU;
            Keyboard.SIMCODES[Keyboard.SIMCODE.FF_CMD]       = Keyboard.SCANCODE.WIN;
            
            Keyboard.SIMCODES[Keyboard.SIMCODE.CTRL_C]       = Keyboard.SCANCODE.C           | (Keyboard.SCANCODE.CTRL << 8);
            Keyboard.SIMCODES[Keyboard.SIMCODE.CTRL_BREAK]   = Keyboard.SCANCODE.SCROLL_LOCK | (Keyboard.SCANCODE.CTRL << 8);
            Keyboard.SIMCODES[Keyboard.SIMCODE.CTRL_ALT_DEL] = Keyboard.SCANCODE.NUM_DEL     | (Keyboard.SCANCODE.CTRL << 8) | (Keyboard.SCANCODE.ALT << 16);
            
            /**
             * Commands that can be sent to the Keyboard via the 8042; see sendCmd()
             *
             * @enum {number}
             */
            Keyboard.CMD = {
                RESET:      0xFF,
                RESEND:     0xFE,
                DEF_ON:     0xF6,
                DEF_OFF:    0xF5,
                ENABLE:     0xF4,
                SET_RATE:   0xF3,
                ECHO:       0xEE,
                SET_LEDS:   0xED
            };
            
            /**
             * Command responses returned to the Keyboard via the 8042; see sendCmd()
             *
             * @enum {number}
             */
            Keyboard.CMDRES = {
                OVERRUN:    0x00,
                LOAD_TEST:  0x65,   // undocumented "LOAD MANUFACTURING TEST REQUEST" response code
                BAT_OK:     0xAA,   // Basic Assurance Test (BAT) succeeded
                ECHO:       0xEE,
                BREAK_PREF: 0xF0,   // break prefix
                ACK:        0xFA,
                BAT_FAIL:   0xFC,   // Basic Assurance Test (BAT) failed
                DIAG_FAIL:  0xFD,
                RESEND:     0xFE,
                BUFF_FULL:  0xFF    // TODO: Verify this response code (is it just for older 83-key keyboards?)
            };
            
            Keyboard.LIMIT = {
                MAX_SCANCODES: 20   // TODO: Verify this limit for newer keyboards (84-key and up)
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {Keyboard}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "esc")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            Keyboard.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                /*
                 * There's a special binding that the Video component uses ("kbd") to effectively bind its
                 * screen to the entire keyboard, in Video.powerUp(); ie:
                 *
                 *      video.kbd.setBinding("canvas", "kbd", video.canvasScreen);
                 * or:
                 *      video.kbd.setBinding("textarea", "kbd", video.textareaScreen);
                 *
                 * However, it's also possible for the keyboard XML definition to define a control that serves
                 * a similar purpose; eg:
                 *
                 *      <control type="text" binding="kbd" width="2em">Kbd</control>
                 *
                 * The latter is purely experimental, while we work on finding ways to trigger the soft keyboard on
                 * certain pesky devices (like the Kindle Fire).  Note that even if you use the latter, the former will
                 * still be enabled (there's currently no way to configure the Video component to not bind its screen,
                 * but we could certainly add one if the need ever arose).
                 */
                var kbd = this;
                var id = sHTMLType + '-' + sBinding;
            
                if (this.bindings[id] === undefined) {
                    switch (sBinding) {
                    case "kbd":
                        /*
                         * Recording the binding ID prevents multiple controls (or components) from attempting to erroneously
                         * bind a control to the same ID, but in the case of a "dual display" configuration, we actually want
                         * to allow BOTH video components to call setBinding() for "kbd", so that it doesn't matter which
                         * display the user gives focus to.
                         *
                         *      this.bindings[id] = control;
                         */
                        control.onkeydown = function onKeyDown(event) {
                            return kbd.onKeyDown(event, true);
                        };
                        control.onkeypress = function onKeyPressKbd(event) {
                            return kbd.onKeyPress(event);
                        };
                        control.onkeyup = function onKeyUp(event) {
                            return kbd.onKeyDown(event, false);
                        };
                        return true;
            
                    case "caps-lock":
                        this.bindings[id] = control;
                        control.onclick = function onClickCapsLock(event) {
                            if (kbd.cpu) kbd.cpu.setFocus();
                            return kbd.toggleCapsLock();
                        };
                        return true;
            
                    case "num-lock":
                        this.bindings[id] = control;
                        control.onclick = function onClickNumLock(event) {
                            if (kbd.cpu) kbd.cpu.setFocus();
                            return kbd.toggleNumLock();
                        };
                        return true;
            
                    case "scroll-lock":
                        this.bindings[id] = control;
                        control.onclick = function onClickScrollLock(event) {
                            if (kbd.cpu) kbd.cpu.setFocus();
                            return kbd.toggleScrollLock();
                        };
                        return true;
            
                    default:
                        /*
                         * Maintain support for older button codes; eg, map button code "ctrl-c" to CLICKCODE "CTRL_C"
                         */
                        var sCode = sBinding.toUpperCase().replace(/-/g, '_');
                        if (Keyboard.CLICKCODES[sCode] !== undefined && sHTMLType == "button") {
                            this.bindings[id] = control;
                            control.onclick = function(kbd, sKey, simCode) {
                                return function onClickKeyboard(event) {
                                    if (!COMPILED && kbd.messageEnabled()) kbd.printMessage(sKey + " clicked", Messages.KEYS);
                                    if (kbd.cpu) kbd.cpu.setFocus();
                                    kbd.updateShiftState(simCode, true);    // future-proofing if/when any LOCK keys are added to CLICKCODES
                                    kbd.addActiveKey(simCode, true);
                                };
                            }(this, sCode, Keyboard.CLICKCODES[sCode]);
                            return true;
                        } else if (Keyboard.SOFTCODES[sBinding] !== undefined) {
                            this.cSoftCodes++;
                            this.bindings[id] = control;
                            var fnDown = function(kbd, sKey, simCode) {
                                return function onMouseOrTouchDownKeyboard(event) {
                                    kbd.addActiveKey(simCode);
                                };
                            }(this, sBinding, Keyboard.SOFTCODES[sBinding]);
                            var fnUp = function (kbd, sKey, simCode) {
                                return function onMouseOrTouchUpKeyboard(event) {
                                    kbd.removeActiveKey(simCode);
                                };
                            }(this, sBinding, Keyboard.SOFTCODES[sBinding]);
                            if ('ontouchstart' in window) {
                                control.ontouchstart = fnDown;
                                control.ontouchend = fnUp;
                            } else {
                                control.onmousedown = fnDown;
                                control.onmouseup = control.onmouseout = fnUp;
                            }
                            return true;
                        }
                        break;
                    }
                }
                return false;
            };
            
            /**
             * findBinding(simCode, sType, fDown)
             *
             * TODO: This function is woefully inefficient, because the SOFTCODES table is designed for converting
             * soft key presses into SIMCODES, whereas this function is doing the reverse: looking for the soft key,
             * if any, that corresponds to a SIMCODE, simply so we can provide visual feedback of keys activated
             * by other means (eg, real keyboard events, button clicks that generate key sequences like CTRL_ALT_DEL,
             * etc).
             *
             * To minimize this function's cost, we would want to dynamically create a reverse-lookup table after
             * all the setBinding() calls for the soft keys have been established; note that the reverse-lookup table
             * would contain MORE entries than the SOFTCODES table, because there are multiple simCodes that correspond
             * to a given soft key (eg, '1' and '!' both map to the same soft key).
             *
             * @this {Keyboard}
             * @param {number} simCode
             * @param {string} sType is the type of control (eg, "button" or "key")
             * @param {boolean} [fDown] is true if the key is going down, false if up, or undefined if unchanged
             * @return {Object} is the HTML control DOM object (eg, HTMLButtonElement), or undefined if no such control exists
             */
            Keyboard.prototype.findBinding = function(simCode, sType, fDown)
            {
                var control;
                if (this.cSoftCodes) {
                    for (var code in Keyboard.SHIFTED_KEYCODES) {
                        if (simCode == Keyboard.SHIFTED_KEYCODES[code]) {
                            simCode = +code;
                            code = Keyboard.STUPID_KEYCODES[code];
                            if (code) simCode = code;
                            break;
                        }
                    }
                    for (var sBinding in Keyboard.SOFTCODES) {
                        if (Keyboard.SOFTCODES[sBinding] == simCode || Keyboard.SOFTCODES[sBinding] == this.toUpperKey(simCode)) {
                            var id = sType + '-' + sBinding;
                            control = this.bindings[id];
                            if (control && fDown !== undefined) {
                                this.setSoftKeyState(control, fDown);
                            }
                            break;
                        }
                    }
                }
                return control;
            };
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {Keyboard}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            Keyboard.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.chipset = cmp.getComponentByType("ChipSet");
            };
            
            /**
             * notifyEscape(fDisabled, fAllDown)
             *
             * When ESC is used by the browser to disable pointer lock, this gives us the option of mapping a different key to ESC.
             *
             * @this {Keyboard}
             * @param {boolean} fDisabled
             * @param {boolean} [fAllDown] (an experimental option to re-enable processing of all onkeydown/onkeyup events)
             */
            Keyboard.prototype.notifyEscape = function(fDisabled, fAllDown)
            {
                this.fEscapeDisabled = fDisabled;
                if (fAllDown !== undefined) this.fAllDown = fAllDown;
            };
            
            /**
             * setModel(nModel)
             *
             * @this {Keyboard}
             * @param {number} nModel
             */
            Keyboard.prototype.setModel = function(nModel)
            {
            };
            
            /**
             * resetDevice(fNotify)
             *
             * @this {Keyboard}
             * @param {boolean} [fNotify]
             */
            Keyboard.prototype.resetDevice = function(fNotify)
            {
                /*
                 * TODO: There's more to reset, like LED indicators, default type rate, and emptying the scan code buffer.
                 */
                this.printMessage("keyboard reset", Messages.KEYBOARD | Messages.PORT);
                this.abBuffer = [Keyboard.CMDRES.BAT_OK];
                this.fAdvance = true;
                if (fNotify && this.chipset) this.chipset.notifyKbdData(this.abBuffer[0]);
            };
            
            /**
             * setEnabled(fData, fClock)
             *
             * This is the ChipSet's primary interface for toggling keyboard "data" and "clock" lines.
             * For MODEL_5150 and MODEL_5160 machines, this function is called from the ChipSet's PPI_B
             * output handler.  For MODEL_5170 machines, this function is called when selected CMD
             * "data bytes" have been written.
             *
             * @this {Keyboard}
             * @param {boolean} fData is true if the keyboard simulated data line should be enabled
             * @param {boolean} fClock is true if the keyboard's simulated clock line should be enabled
             * @return {boolean} true if keyboard was re-enabled, false if not (or no change)
             */
            Keyboard.prototype.setEnabled = function(fData, fClock)
            {
                var fReset = false;
                if (this.fClock !== fClock) {
                    if (!COMPILED && this.messageEnabled(Messages.KEYBOARD | Messages.PORT)) {
                        this.printMessage("keyboard clock line changing to " + fClock, true);
                    }
                    /*
                     * Toggling the clock line low and then high signals a "reset", which we acknowledge once the
                     * data line is high as well.
                     */
                    this.fClock = this.fResetOnEnable = fClock;
                    /*
                     * Allow the next buffered scan code, if any, to advance.
                     */
                    if (fClock) this.fAdvance = true;
                }
                if (this.fData !== fData) {
                    if (!COMPILED && this.messageEnabled(Messages.KEYBOARD | Messages.PORT)) {
                        this.printMessage("keyboard data line changing to " + fData, true);
                    }
                    this.fData = fData;
                    /*
                     * TODO: Review this code; it was added during the early days of MODEL_5150 testing and may not be
                     * *exactly* what's called for here.
                     */
                    if (fData && !this.fResetOnEnable) {
                        this.shiftScanCode(true);
                    }
                }
                if (this.fData && this.fResetOnEnable) {
                    this.resetDevice(true);
                    this.fResetOnEnable = false;
                    fReset = true;
                }
                return fReset;
            };
            
            /**
             * sendCmd(bCmd)
             *
             * This is the ChipSet's primary interface for controlling "Model M" keyboards (ie, those used
             * with MODEL_5170 machines).  Commands are delivered through the ChipSet's 8042 Keyboard Controller.
             *
             * @this {Keyboard}
             * @param {number} bCmd should be one of the Keyboard.CMD.* command codes (Model M keyboards only)
             * @return {number} response should be one of the Keyboard.CMDRES.* response codes, or -1 if unrecognized
             */
            Keyboard.prototype.sendCmd = function(bCmd)
            {
                var b = -1;
                switch(bCmd) {
                case Keyboard.CMD.RESET:
                    b = Keyboard.CMDRES.ACK;
                    this.resetDevice();
                    break;
                default:
                    break;
                }
                return b;
            };
            
            /**
             * checkScanCode()
             *
             * This is the ChipSet's interface for checking data availability.
             *
             * Note that even if we have data, we don't provide it unless fAdvance is set as well.
             * This ensures that we wait until the ROM to disable and re-enable the controller before
             * making more data available.
             *
             * @this {Keyboard}
             * @return {number} next scan code, or 0 if none
             */
            Keyboard.prototype.checkScanCode = function()
            {
                var b = 0;
                if (this.abBuffer.length && this.fAdvance) {
                    b = this.abBuffer[0];
                    if (this.chipset) this.chipset.notifyKbdData(b);
                }
                if (this.messageEnabled()) this.printMessage("scan code " + str.toHexByte(b) + " available");
                return b;
            };
            
            /**
             * readScanCode()
             *
             * This is the ChipSet's interface for reading scan codes.
             *
             * @this {Keyboard}
             * @return {number} next scan code, or 0 if none
             */
            Keyboard.prototype.readScanCode = function()
            {
                var b = 0;
                if (this.abBuffer.length) {
                    b = this.abBuffer[0];
                }
                if (this.messageEnabled()) this.printMessage("scan code " + str.toHexByte(b) + " delivered");
                return b;
            };
            
            /**
             * flushScanCode()
             *
             * This is the ChipSet's interface to flush scan codes.
             *
             * @this {Keyboard}
             */
            Keyboard.prototype.flushScanCode = function()
            {
                this.abBuffer = [];
                if (this.messageEnabled()) this.printMessage("scan codes flushed");
            };
            
            /**
             * shiftScanCode(fNotify)
             *
             * This is the ChipSet's interface to advance scan codes.
             *
             * @this {Keyboard}
             * @param {boolean} [fNotify] is true to notify ChipSet if more data is available.
             */
            Keyboard.prototype.shiftScanCode = function(fNotify)
            {
                if (this.abBuffer.length > 0) {
                    /*
                     * The keyboard interrupt service routine toggles the enable bit after reading a scan code, so
                     * presumably this is the proper point at which to shift the last scan code out, and then assert
                     * another interrupt if more scan codes exist.
                     */
                    this.abBuffer.shift();
                    this.fAdvance = fNotify;
                    if (fNotify) {
                        if (!this.abBuffer.length || !this.chipset) {
                            fNotify = false;
                        } else {
                            this.chipset.notifyKbdData(this.abBuffer[0]);
                        }
                    }
                    if (this.messageEnabled()) this.printMessage("scan codes shifted, notify " + (fNotify? "true" : "false"));
                }
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {Keyboard}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            Keyboard.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    /*
                     * TODO: Save/restore support for Keyboard is the barest minimum.  In fact, originally, I wasn't
                     * saving/restoring anything, and that was OK, but if we don't at least re-initialize fClock/fData,
                     * we can get a spurious reset following a restore.  In an ideal world, we might choose to save/restore
                     * abBuffer as well, but realistically, I think it's going to be safer to always start with an
                     * empty buffer--and who's going to notice anyway?
                     *
                     * So, like Debugger, we deviate from the typical save/restore pattern: instead of reset OR restore,
                     * we always reset and then perform a (very limited) restore.
                     */
                    this.reset();
                    if (data && this.restore) {
                        if (!this.restore(data)) return false;
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {Keyboard}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            Keyboard.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save? this.save() : true;
            };
            
            /**
             * reset()
             *
             * @this {Keyboard}
             */
            Keyboard.prototype.reset = function()
            {
                this.setModel(this.nDefaultModel);
            
                this.initState();
            
                /*
                 * The current (assumed) physical (and simulated) states of the various shift/lock keys.
                 *
                 * TODO: Determine how (or whether) we can query the browser's initial shift/lock key states.
                 */
                this.bitsState = this.bitsStateSim = 0;
            
                /*
                 * New scan codes are "pushed" onto abBuffer and then "shifted" off.
                 */
                this.abBuffer = [];
                this.fAdvance = true;
            
                this.prevCharDown = 0;
                this.prevKeyDown = 0;
            
                /*
                 * Make sure the auto-injection buffer is empty (an injection could have been in progress on any reset after the first).
                 */
                this.sInjectBuffer = "";
            };
            
            /**
             * save()
             *
             * This implements save support for the Keyboard component.
             *
             * @this {Keyboard}
             * @return {Object}
             */
            Keyboard.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, this.saveState());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the Keyboard component.
             *
             * @this {Keyboard}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             */
            Keyboard.prototype.restore = function(data)
            {
                return this.initState(data[0]);
            };
            
            /**
             * initState(data)
             *
             * @this {Keyboard}
             * @param {Array} [data]
             * @return {boolean} true if successful, false if failure
             */
            Keyboard.prototype.initState = function(data)
            {
                var i = 0;
                if (data === undefined) data = [];
                this.fClock = this.fAdvance = data[i++];
                this.fData = data[i];
                return true;
            };
            
            /**
             * saveState()
             *
             * @this {Keyboard}
             * @return {Array}
             */
            Keyboard.prototype.saveState = function()
            {
                var i = 0;
                var data = [];
                data[i++] = this.fClock;
                data[i] = this.fData;
                return data;
            };
            
            /**
             * setSoftKeyState(control, f)
             *
             * @this {Keyboard}
             * @param {Object} control is an HTML control DOM object
             * @param {boolean} f is true if the key represented by e should be "on", false if "off"
             */
            Keyboard.prototype.setSoftKeyState = function(control, f)
            {
                control.style.color = (f? "#ffffff" : "#000000");
                control.style.backgroundColor = (f? "#000000" : "#ffffff");
            };
            
            /**
             * addScanCode(bScan)
             *
             * @this {Keyboard}
             * @param {number} bScan
             */
            Keyboard.prototype.addScanCode = function(bScan)
            {
                /*
                 * Prepare for the possibility that our reset() function may not have been called yet.
                 *
                 * TODO: Determine whether we need to reset() the Keyboard sooner (ie, in the constructor),
                 * or if we need to protect other methods from prematurely accessing certain Keyboard structures,
                 * as a result of calls from any of the key event handlers established by setBinding().
                 */
                if (this.abBuffer) {
                    if (this.abBuffer.length < Keyboard.LIMIT.MAX_SCANCODES) {
                        if (this.messageEnabled()) this.printMessage("scan code " + str.toHexByte(bScan) + " buffered");
                        this.abBuffer.push(bScan);
                        if (this.abBuffer.length == 1) {
                            if (this.chipset) this.chipset.notifyKbdData(bScan);
                        }
                        return;
                    }
                    if (this.abBuffer.length == Keyboard.LIMIT.MAX_SCANCODES) {
                        this.abBuffer.push(Keyboard.CMDRES.BUFF_FULL);
                    }
                    this.printMessage("scan code buffer overflow");
                }
            };
            
            /**
             * injectKeys(sKeyCodes, msDelay)
             *
             * @this {Keyboard}
             * @param {string} sKeyCodes
             * @param {number|undefined} [msDelay] is an optional injection delay (default is msInjectDelay)
             */
            Keyboard.prototype.injectKeys = function(sKeyCodes, msDelay)
            {
                this.sInjectBuffer = sKeyCodes;
                if (!COMPILED) this.log("injectKeys(" + this.sInjectBuffer.split("\n").join("\\n") + ")");
                this.injectKeysFromBuffer(msDelay || this.msInjectDelay);
            };
            
            /**
             * injectKeysFromBuffer(msDelay)
             *
             * @this {Keyboard}
             * @param {number} msDelay is the delay between injected keys
             */
            Keyboard.prototype.injectKeysFromBuffer = function(msDelay)
            {
                if (this.sInjectBuffer.length > 0) {
                    var ch = this.sInjectBuffer.charCodeAt(0);
                    /*
                     * I could require all callers to supply CRs instead of LFs, but this is friendlier.
                     */
                    if (ch == 0x0a) ch = 0x0d;
            
                    this.sInjectBuffer = this.sInjectBuffer.substr(1);
                    this.addActiveKey(ch, true);
                }
                if (this.sInjectBuffer.length > 0) {
                    setTimeout(function (kbd) {
                        return function onInjectKeyTimeout() {
                            kbd.injectKeysFromBuffer(msDelay);
                        };
                    }(this), msDelay);
                }
            };
            
            /**
             * setLED(control, f)
             *
             * @this {Keyboard}
             * @param {Object} control is an HTML control DOM object
             * @param {boolean} f is true if the LED represented by control should be "on", false if "off"
             */
            Keyboard.prototype.setLED = function(control, f)
            {
                control.style.backgroundColor = (f? "#00ff00" : "#000000");
            };
            
            /**
             * updateLEDs(bitState)
             *
             * Updates any and all shift-related LEDs with the corresponding state in bitsStateSim.
             *
             * @this {Keyboard}
             * @param {number} [bitState] is the bit in bitsStateSim that may have changed, if known; undefined if not
             */
            Keyboard.prototype.updateLEDs = function(bitState)
            {
                var control;
                for (var sBinding in Keyboard.LEDSTATES) {
                    var id = "led-" + sBinding;
                    var bitLED = Keyboard.LEDSTATES[sBinding];
                    if ((!bitState || bitState == bitLED) && (control = this.bindings[id])) {
                        this.setLED(control, !!(this.bitsStateSim & bitLED));
                    }
                }
            };
            
            /**
             * toggleCapsLock()
             *
             * @this {Keyboard}
             */
            Keyboard.prototype.toggleCapsLock = function()
            {
                this.addActiveKey(Keyboard.SIMCODE.CAPS_LOCK, true);
            };
            
            /**
             * toggleNumLock()
             *
             * @this {Keyboard}
             */
            Keyboard.prototype.toggleNumLock = function()
            {
                this.addActiveKey(Keyboard.SIMCODE.NUM_LOCK, true);
            };
            
            /**
             * toggleScrollLock()
             *
             * @this {Keyboard}
             */
            Keyboard.prototype.toggleScrollLock = function()
            {
                this.addActiveKey(Keyboard.SIMCODE.SCROLL_LOCK, true);
            };
            
            /**
             * updateShiftState(simCode, fSim, fDown)
             *
             * For non-locking shift keys, this function is straightforward: when fDown is true, the corresponding bitState
             * is set, and when fDown is false, it's cleared.  However, for LOCK keys, fDown true means toggle, and fDown false
             * means no change.
             *
             * @this {Keyboard}
             * @param {number} simCode (includes any ONDOWN and/or ONRIGHT modifiers)
             * @param {boolean} [fSim] is true to update simulated state only
             * @param {boolean|null} [fDown] is true for down, false for up, undefined for toggle
             * @return {boolean} true if simCode was a shift key, false if not
             */
            Keyboard.prototype.updateShiftState = function(simCode, fSim, fDown)
            {
                if (Keyboard.SIMCODES[simCode]) {
                    var fRight = (Math.floor(simCode / 1000) & 2);
                    var bitState = Keyboard.KEYSTATES[simCode] || 0;
                    if (bitState) {
                        if (fRight && !(bitState & Keyboard.STATE.ALL_RIGHT)) {
                            bitState >>= 1;
                        }
                        if (bitState & Keyboard.STATE.ALL_LOCKS) {
                            if (fDown === false) return true;
                            fDown = null;
                        }
                        if (fDown == null) {        // ie, null or undefined
                            fDown = !((fSim? this.bitsStateSim : this.bitsState) & bitState);
                        }
                        else if (!fDown) {
                            /*
                             * In current webkit browsers, pressing and then releasing both left and right shift keys together
                             * (or both alt keys, or both cmd/windows keys, or presumably both ctrl keys) results in 4 events, as
                             * you would expect, but 3 of the 4 are "down" events; only the last of the 4 is an "up" event.
                             *
                             * Perhaps this is a browser accessibility feature (ie, deliberately suppressing the "up" event
                             * of one of the shift keys to implement a "sticky shift mode"?), but in any case, to maintain our
                             * internal consistency, if this is an "up" event and the shift state bit is any of ALL_SHIFT, then
                             * we set it to ALL_SHIFT, so that we'll automatically clear ALL shift states.
                             *
                             * TODO: The only downside to this work-around is that the simulation will still think a shift key is
                             * down.  So in effect, we have enabled a "sticky shift mode" inside the simulation, whether or not that
                             * was the browser's intent.  To fix that, we would have to identify the shift key that never went up
                             * and simulate the "up".  That's more work than I think the problem merits.  The user just needs to tap
                             * a single shift key to get out that mode.
                             */
                            if (bitState & Keyboard.STATE.ALL_SHIFT) bitState = Keyboard.STATE.ALL_SHIFT;
                        }
                        if (!fSim) {
                            this.bitsState &= ~bitState;
                            if (fDown) this.bitsState |= bitState;
                        } else {
                            this.bitsStateSim &= ~bitState;
                            if (fDown) this.bitsStateSim |= bitState;
                            this.updateLEDs(bitState);
                        }
                        return true;
                    }
                }
                return false;
            };
            
            /**
             * addActiveKey(simCode, fPress)
             *
             * @this {Keyboard}
             * @param {number} simCode
             * @param {boolean} [fPress]
             */
            Keyboard.prototype.addActiveKey = function(simCode, fPress)
            {
                if (!Keyboard.SIMCODES[simCode]) {
                    if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                        this.printMessage("addActiveKey(" + simCode + "," + (fPress? "press" : "down") + "): unrecognized", true);
                    }
                    return;
                }
            
                /*
                 * Ignore all active keys if the CPU is not running.
                 */
                if (!this.cpu || !this.cpu.isRunning()) return;
            
                /*
                 * If this simCode is in the KEYSTATE table, then stop all repeating.
                 */
                if (Keyboard.KEYSTATES[simCode] && this.aKeysActive.length) {
                    if (this.aKeysActive[0].nRepeat > 0) this.aKeysActive[0].nRepeat = 0;
                }
            
                var key;
                for (var i = 0; i < this.aKeysActive.length; i++) {
                    key = this.aKeysActive[i];
                    if (key.simCode == simCode) {
                        /*
                         * This key is already active, so if this a "down" request (or a "press" for a key we already
                         * processed as a "down"), ignore it.
                         */
                        if (!fPress || key.nRepeat >= 0) {
                            i = -1;
                            break;
                        }
                        if (i > 0) {
                            if (this.aKeysActive[0].nRepeat > 0) this.aKeysActive[0].nRepeat = 0;
                            this.aKeysActive.splice(i, 1);
                        }
                        break;
                    }
                }
            
                if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage("addActiveKey(" + simCode + "," + (fPress? "press" : "down") + "): " + (i < 0? "already active" : (i == this.aKeysActive.length? "adding" : "updating")), true);
                }
            
                if (i < 0) return;
            
                if (i == this.aKeysActive.length) {
                    key = {};
                    key.simCode = simCode;
                    key.bitsState = this.bitsState;
                    this.findBinding(simCode, "key", true);
                    i++;
                }
                if (i > 0) {
                    this.aKeysActive.splice(0, 0, key);
                }
            
                key.fDown = true;
                key.nRepeat = (fPress? -1: (Keyboard.KEYSTATES[simCode]? 0 : 1));
            
                this.updateActiveKey(key);
            };
            
            /**
             * checkActiveKey()
             *
             * @this {Keyboard}
             * @return {number} simCode of active key, 0 if none
             */
            Keyboard.prototype.checkActiveKey = function()
            {
                return this.aKeysActive.length? this.aKeysActive[0].simCode : 0;
            };
            
            /**
             * checkActiveKeyShift()
             *
             * @this {Keyboard}
             * @return {number|null} bitsState for active key, null if none
             *
            Keyboard.prototype.checkActiveKeyShift = function()
            {
                return this.aKeysActive.length? this.aKeysActive[0].bitsState : null;
            };
             */
            
            /**
             * isAlphaKey(code)
             *
             * @this {Keyboard}
             * @param {number} code
             * @returns {boolean} true if alpha key, false if not
             */
            Keyboard.prototype.isAlphaKey = function(code)
            {
                return (code >= Keyboard.ASCII.A && code <= Keyboard.ASCII.Z || code >= Keyboard.ASCII.a && code <= Keyboard.ASCII.z);
            };
            
            /**
             * toUpperKey(code)
             *
             * @this {Keyboard}
             * @param {number} code
             * @returns {number}
             */
            Keyboard.prototype.toUpperKey = function(code)
            {
                if (code >= Keyboard.ASCII.a && code <= Keyboard.ASCII.z) {
                    code -= (Keyboard.ASCII.a - Keyboard.ASCII.A);
                }
                return code;
            };
            
            /**
             * clearActiveKeys()
             *
             * Force all active keys to "self-deactivate".
             *
             * TODO: Consider limiting this to non-shift keys only.
             *
             * @this {Keyboard}
             */
            Keyboard.prototype.clearActiveKeys = function()
            {
                for (var i = 0; i < this.aKeysActive.length; i++) {
                    var key = this.aKeysActive[i];
                    key.fDown = false;
                    if (key.nRepeat > 0) key.nRepeat = 0;
                }
            };
            
            /**
             * removeActiveKey(simCode, fFlush)
             *
             * @param {number} simCode
             * @param {boolean} [fFlush] is true whenever the key must be removed, independent of other factors
             * @return {boolean} true if successfully removed, false if not
             */
            Keyboard.prototype.removeActiveKey = function(simCode, fFlush)
            {
                if (!Keyboard.SIMCODES[simCode]) {
                    if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                        this.printMessage("removeActiveKey(" + simCode + "): unrecognized", true);
                    }
                    return false;
                }
            
                /*
                 * Ignore all active keys if the CPU is not running.
                 */
                if (!fFlush && (!this.cpu || !this.cpu.isRunning())) return false;
            
                var fRemoved = false;
                for (var i = 0; i < this.aKeysActive.length; i++) {
                    var key = this.aKeysActive[i];
                    if (key.simCode == simCode || key.simCode == Keyboard.SHIFTED_KEYCODES[simCode]) {
                        this.aKeysActive.splice(i, 1);
                        if (key.timer) clearTimeout(key.timer);
                        if (key.fDown && !fFlush) this.keySimulate(key.simCode, false);
                        this.findBinding(simCode, "key", false);
                        fRemoved = true;
                        break;
                    }
                }
                if (!COMPILED && !fFlush && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage("removeActiveKey(" + simCode + "): " + (fRemoved? "removed" : "not active"), true);
                }
                if (!this.aKeysActive.length && this.fToggleCapsLock) {
                    if (!COMPILED) this.printMessage("removeActiveKey(): inverting caps-lock now", Messages.KEYS);
                    this.updateShiftState(Keyboard.SIMCODE.CAPS_LOCK);
                    this.fToggleCapsLock = false;
                }
                return fRemoved;
            };
            
            /**
             * updateActiveKey(key, msTimer)
             *
             * @param {Object} key
             * @param {number} [msTimer]
             */
            Keyboard.prototype.updateActiveKey = function(key, msTimer)
            {
                /*
                 * All active keys are automatically removed once the CPU stops running.
                 */
                if (!this.cpu || !this.cpu.isRunning()) {
                    this.removeActiveKey(key.simCode, true);
                    return;
                }
            
                if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage((msTimer? '\n' : "") + "updateActiveKey(" + key.simCode + (msTimer? "," + msTimer + "ms" : "") + "): " + (key.fDown? "down" : "up"), true);
                }
            
                this.keySimulate(key.simCode, key.fDown);
            
                if (!key.nRepeat) return;
            
                var ms;
                if (key.nRepeat < 0) {
                    if (!key.fDown) {
                        this.removeActiveKey(key.simCode);
                        return;
                    }
                    key.fDown = false;
                    ms = this.msAutoRelease;
                }
                else {
                    ms = (key.nRepeat++ == 1? this.msAutoRepeat : this.msNextRepeat);
                }
                key.timer = setTimeout(function(kbd) {
                    return function onUpdateActiveKey() {
                        kbd.updateActiveKey(key, ms);
                    };
                }(this), ms);
            };
            
            /**
             * getSimCode(keyCode)
             *
             * @this {Keyboard}
             * @param {number} keyCode
             * @param {boolean} fShifted
             * @return {number} simCode
             */
            Keyboard.prototype.getSimCode = function(keyCode, fShifted)
            {
                var code;
                var simCode = keyCode;
            
                if (keyCode >= Keyboard.ASCII.A && keyCode <= Keyboard.ASCII.Z) {
                    if (!(this.bitsState & (Keyboard.STATE.SHIFT | Keyboard.STATE.RSHIFT | Keyboard.STATE.CAPS_LOCK)) == fShifted) {
                        simCode = keyCode + (Keyboard.ASCII.a - Keyboard.ASCII.A);
                    }
                }
                else if (keyCode >= Keyboard.ASCII.a && keyCode <= Keyboard.ASCII.z) {
                    if (!!(this.bitsState & (Keyboard.STATE.SHIFT | Keyboard.STATE.RSHIFT | Keyboard.STATE.CAPS_LOCK)) == fShifted) {
                        simCode = keyCode - (Keyboard.ASCII.a - Keyboard.ASCII.A);
                    }
                }
                else if (!!(this.bitsState & (Keyboard.STATE.SHIFT | Keyboard.STATE.RSHIFT)) == fShifted) {
                    if (code = Keyboard.SHIFTED_KEYCODES[keyCode]) {
                        simCode = code;
                    }
                }
                else {
                    if (code = Keyboard.STUPID_KEYCODES[keyCode]) {
                        simCode = code;
                    }
                }
                return simCode;
            };
            
            /**
             * onFocusChange(fFocus)
             *
             * @this {Keyboard}
             * @param {boolean} fFocus is true if gaining focus, false if losing it
             */
            Keyboard.prototype.onFocusChange = function(fFocus)
            {
                if (this.fHasFocus != fFocus && !COMPILED && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage("onFocusChange(" + (fFocus? "true" : "false") + ")", true);
                }
                this.fHasFocus = fFocus;
                /*
                 * Since we can't be sure of any shift states after losing focus, we clear them all.
                 */
                if (!fFocus) this.bitsState &= ~Keyboard.STATE.ALL_SHIFT;
            };
            
            /**
             * onKeyDown(event, fDown)
             *
             * @this {Keyboard}
             * @param {Object} event
             * @param {boolean} fDown is true for a keyDown event, false for a keyUp event
             * @return {boolean} true to pass the event along, false to consume it
             */
            Keyboard.prototype.onKeyDown = function(event, fDown)
            {
                var fPass = true;
                var fPress = false;
                var fIgnore = false;
            
                var keyCode = event.keyCode;
            
                /*
                 * Although it would be nice to pay attention ONLY to these "up" and "down" events, and ignore "press"
                 * events, iOS devices force us to process "press" events, because they don't give us shift-key events,
                 * so we have to infer the shift state from the character code in the "press" event.
                 *
                 * So, to seamlessly blend "up" and "down" events with "press" events, we must convert any keyCodes we
                 * receive here to a compatibly shifted simCode.
                 */
                var simCode = this.getSimCode(keyCode, true);
            
                if (this.fEscapeDisabled && simCode == Keyboard.ASCII['`']) {
                    keyCode = simCode = Keyboard.KEYCODE.ESC;
                }
            
                if (Keyboard.SIMCODES[keyCode + Keyboard.KEYCODE.ONDOWN]) {
            
                    simCode += Keyboard.KEYCODE.ONDOWN;
                    if (event.location == Keyboard.LOCATION.RIGHT) {
                        simCode += Keyboard.KEYCODE.ONRIGHT;
                    }
            
                    if (this.updateShiftState(simCode, false, fDown)) {
            
                        if (keyCode == Keyboard.KEYCODE.CAPS_LOCK || keyCode == Keyboard.KEYCODE.NUM_LOCK || keyCode == Keyboard.KEYCODE.SCROLL_LOCK) {
                            /*
                             * FYI, "lock" keys generate a "down" event ONLY when getting locked and an "up" event ONLY
                             * when getting unlocked--which is a little odd, since the key did go UP and DOWN each time.
                             *
                             * We must treat each event like a "down", and also as a "press", so that addActiveKey() will
                             * automatically generate both the "make" and "break".
                             *
                             * Of course, there have to be exceptions, most notably MSIE, which sends both "up" and down"
                             * on every press, so there's no need for trickery.
                             */
                            if (!this.fMSIE) {
                                fDown = fPress = true;
                            }
                        }
                        /*
                         * As a safeguard, whenever the CMD key goes up, clear all active keys, because there appear to be
                         * cases where we don't always get notification of a CMD key's companion key going up (this probably
                         * overlaps with most if not all situations where we also lose focus).
                         */
                        if (!fDown && (keyCode == Keyboard.KEYCODE.CMD || keyCode == Keyboard.KEYCODE.RCMD)) {
                            this.clearActiveKeys();
                        }
                    }
                    else {
                        /*
                         * Here we have all the non-shift keys in the ONDOWN category; eg, BS, TAB, ESC, UP, DOWN, LEFT, RIGHT,
                         * and many more.
                         *
                         * For various reasons (some of which are discussed below), we don't want to pass these on (ie, we want
                         * to suppress their "press" event), which means we must perform all key simulation on the "up" and "down"
                         * events.
                         *
                         * Regarding BS: I never want the browser to act on BS, since it does double-duty as the BACK button,
                         * leaving the current page.
                         *
                         * Regarding TAB: If I don't consume TAB on the "down" event, then that's all I'll see, because the browser
                         * act on it by giving focus to the next control.
                         *
                         * Regarding ESC: This key generates "down" and "up" events (LOTS of "down" events for that matter), but no
                         * "press" event.
                         */
            
                        /*
                         * HACK for simulating CTRL_BREAK using CTRL_DEL (Mac) or CTRL_BS (Windows)
                         */
                        if (keyCode == Keyboard.KEYCODE.BS && (this.bitsState & (Keyboard.STATE.CTRL|Keyboard.STATE.ALT)) == Keyboard.STATE.CTRL) {
                            simCode = Keyboard.SIMCODE.CTRL_BREAK;
                        }
            
                        /*
                         * There are a number of other common key sequences that interfere with our machines; for example,
                         * the up/down arrows have a "default" behavior of scrolling the web page up and down, which is
                         * definitely NOT a behavior we want.  Since we mark those keys as ONDOWN, we'll catch them all here.
                         */
                        fPass = false;
                    }
                }
                else {
                    /*
                     * When I have defined system-wide CTRL-key sequences to perform common editing operations (eg, CTRL_W
                     * and CTRL_Z to scroll pages of text), the browser likes to act on those operations, so let's set fPass
                     * to false to prevent that.
                     *
                     * Also, we don't want to set fIgnore in such cases, because the browser may not give us a press event for
                     * these CTRL-key sequences, so we can't risk ignoring them.
                     */
                    if (Keyboard.SIMCODES[simCode] && (this.bitsState & (Keyboard.STATE.CTRLS | Keyboard.STATE.ALTS))) {
                        fPass = false;
                    }
            
                    /*
                     * Don't simulate any key not explicitly marked ONDOWN, as well as any key sequence with the CMD key held.
                     */
                    if (!this.fAllDown && fPass && fDown || !!(this.bitsState & Keyboard.STATE.CMDS)) fIgnore = true;
                }
            
                if (!fPass) {
                    event.preventDefault();
                }
            
                if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage("\nonKey" + (fDown? "Down" : "Up") + "(" + keyCode + "): " + (fIgnore? "ignore" : (fPass? "true" : "false")), true);
                }
            
                /*
                 * Mobile (eg, iOS) keyboards don't fully support onKeyDown/onKeyUp events; for example, they usually
                 * don't generate ANY events when a shift key is pressed, and even for normal keys, they seem to generate
                 * rapid (ie, fake) "up" and "down" events around "press" events, probably more to satisfy compatibility
                 * issues rather than making a serious effort to indicate when a key ACTUALLY went down or up.
                 */
                if (!fIgnore && (!this.fMobile || !fPass)) {
                    if (fDown) {
                        this.addActiveKey(simCode, fPress);
                    } else {
                        if (!this.removeActiveKey(simCode)) {
                            var code = this.getSimCode(keyCode, false);
                            if (code != simCode) this.removeActiveKey(code);
                        }
                    }
                }
            
                return fPass;
            };
            
            /**
             * onKeyPress(event)
             *
             * @this {Keyboard}
             * @param {Object} event
             * @return {boolean} true to pass the event along, false to consume it
             */
            Keyboard.prototype.onKeyPress = function(event)
            {
                event = event || window.event;
                var keyCode = event.which || event.keyCode;
            
                if (this.fAllDown) {
                    var simCode = this.checkActiveKey();
                    if (simCode && this.isAlphaKey(simCode) && this.isAlphaKey(keyCode) && simCode != keyCode) {
                        if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                            this.printMessage("onKeyPress(" + keyCode + ") out of sync with " + simCode + ", invert caps-lock", true);
                        }
                        this.fToggleCapsLock = true;
                        keyCode = simCode;
                    }
                }
            
                /*
                 * Let's stop any injection currently in progress, too
                 */
                this.sInjectBuffer = "";
            
                var fPass = !Keyboard.SIMCODES[keyCode] || !!(this.bitsState & Keyboard.STATE.CMD);
            
                if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage("\nonKeyPress(" + keyCode + "): " + (fPass? "true" : "false"), true);
                }
            
                if (!fPass) {
                    this.addActiveKey(keyCode, true);
                }
            
                return fPass;
            };
            
            /**
             * keySimulate(simCode, fDown)
             *
             * @this {Keyboard}
             * @param {number} simCode
             * @param {boolean} fDown
             * @return {boolean} true if successfully simulated, false if unrecognized/unsupported key
             */
            Keyboard.prototype.keySimulate = function(simCode, fDown)
            {
                var fSimulated = false;
            
                this.updateShiftState(simCode, true, fDown);
            
                var wCode = Keyboard.SIMCODES[simCode] || Keyboard.SIMCODES[simCode + Keyboard.KEYCODE.ONDOWN];
            
                if (wCode !== undefined) {
            
                    /*
                     * Hack to transform the IBM "BACKSPACE" key (which we normally map to KEYCODE_DELETE) to the IBM "DEL" key
                     * whenever both CTRL and ALT are pressed as well, so that it's easier to simulate that old favorite: CTRL_ALT_DEL
                     */
                    if (wCode == Keyboard.SCANCODE.BS) {
                        if ((this.bitsState & (Keyboard.STATE.CTRL | Keyboard.STATE.ALT)) == (Keyboard.STATE.CTRL | Keyboard.STATE.ALT)) {
                            wCode = Keyboard.SCANCODE.NUM_DEL;
                        }
                    }
            
                    var abScanCodes = [];
                    var bCode = wCode & 0xff;
                    abScanCodes.push(bCode | (fDown? 0 : Keyboard.SCANCODE.BREAK));
            
                    var fAlpha = (simCode >= Keyboard.ASCII.A && simCode <= Keyboard.ASCII.Z || simCode >= Keyboard.ASCII.a && simCode <= Keyboard.ASCII.z);
            
                    while (wCode >>>= 8) {
                        var bShift = 0;
                        var bScan = wCode & 0xff;
                        /*
                         * TODO: The handling of SIMCODE entries with "extended" codes still needs to be tested, and
                         * moreover, if any of them need to perform any shift-state modifications, those modifications
                         * may need to be encoded differently.
                         */
                        if (bCode == Keyboard.SCANCODE.EXTEND1 || bCode == Keyboard.SCANCODE.EXTEND2) {
                            abScanCodes.push(bCode | (fDown? 0 : Keyboard.SCANCODE.BREAK));
                            continue;
                        }
                        if (bScan == Keyboard.SCANCODE.SHIFT) {
                            if (!(this.bitsStateSim & (Keyboard.STATE.SHIFT | Keyboard.STATE.RSHIFT))) {
                                if (!(this.bitsStateSim & Keyboard.STATE.CAPS_LOCK) || !fAlpha) {
                                    bShift = bScan;
                                }
                            }
                        } else if (bScan == Keyboard.SCANCODE.CTRL) {
                            if (!(this.bitsStateSim & (Keyboard.STATE.CTRL | Keyboard.STATE.RCTRL))) {
                                bShift = bScan;
                            }
                        } else if (bScan == Keyboard.SCANCODE.ALT) {
                            if (!(this.bitsStateSim & (Keyboard.STATE.ALT | Keyboard.STATE.RALT))) {
                                bShift = bScan;
                            }
                        } else {
                            abScanCodes.push(bCode | (fDown? 0 : Keyboard.SCANCODE.BREAK));
            
                        }
                        if (bShift) {
                            if (fDown)
                                abScanCodes.unshift(bShift);
                            else
                                abScanCodes.push(bShift | Keyboard.SCANCODE.BREAK);
                        }
                    }
            
                    for (var i = 0; i < abScanCodes.length; i++) {
                        this.addScanCode(abScanCodes[i]);
                    }
            
                    fSimulated = true;
                }
            
                if (!COMPILED && this.messageEnabled(Messages.KEYS)) {
                    this.printMessage("keySimulate(" + simCode + "," + (fDown? "down" : "up") + "): " + (fSimulated? "true" : "false"), true);
                }
            
                return fSimulated;
            };
            
            /**
             * Keyboard.init()
             *
             * This function operates on every HTML element of class "keyboard", extracting the
             * JSON-encoded parameters for the Keyboard constructor from the element's "data-value"
             * attribute, invoking the constructor to create a Keyboard component, and then binding
             * any associated HTML controls to the new component.
             */
            Keyboard.init = function()
            {
                var aeKbd = Component.getElementsByClass(window.document, PCJSCLASS, "keyboard");
                for (var iKbd = 0; iKbd < aeKbd.length; iKbd++) {
                    var eKbd = aeKbd[iKbd];
                    var parmsKbd = Component.getComponentParms(eKbd);
                    var kbd = new Keyboard(parmsKbd);
                    Component.bindComponentControls(kbd, eKbd, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every Keyboard module on the page.
             */
            web.onInit(Keyboard.init);
            
            if (typeof module !== 'undefined') module.exports = Keyboard;
            
          • memory.js
            /**
             * @fileoverview Implements the PCjs "physical" Memory component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-04
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var X86         = require("./x86");
            }
            
            /**
             * @class DataView
             * @property {function(number,boolean):number} getUint8
             * @property {function(number,number,boolean)} setUint8
             * @property {function(number,boolean):number} getUint16
             * @property {function(number,number,boolean)} setUint16
             * @property {function(number,boolean):number} getInt32
             * @property {function(number,number,boolean)} setInt32
             */
            
            var littleEndian = (TYPEDARRAYS? (function() {
                var buffer = new ArrayBuffer(2);
                new DataView(buffer).setUint16(0, 256, true);
                return new Uint16Array(buffer)[0] === 256;
            })() : false);
            
            /**
             * Memory(addr, used, size, type, controller)
             *
             * The Bus component allocates Memory objects so that each has a memory buffer with a
             * block-granular starting address and an address range equal to bus.nBlockSize; however,
             * the size of any given Memory object's underlying buffer can be either zero or bus.nBlockSize;
             * memory read/write functions for empty (buffer-less) blocks are mapped to readNone/writeNone.
             *
             * The Bus allocates empty blocks for the entire address space during initialization, so that
             * any reads/writes to undefined addresses will have no effect.  Later, the ROM and RAM
             * components will ask the Bus to allocate memory for specific ranges, and the Bus will allocate
             * as many new blockSize Memory objects as the ranges require.  Partial Memory blocks could
             * also be supported in theory, but in practice, they're not.
             *
             * Because Memory blocks now allow us to have a "sparse" address space, we could choose to
             * take the memory hit of allocating 4K arrays per block, where each element stores only one byte,
             * instead of the more frugal but slightly slower approach of allocating arrays of 32-bit dwords
             * (LONGARRAYS) and shifting/masking bytes/words to/from dwords; in theory, byte accesses would
             * be faster and word accesses somewhat less faster.
             *
             * However, preliminary testing of that feature (FATARRAYS) did not yield significantly faster
             * performance, so it is OFF by default to minimize our memory consumption.  Using TYPEDARRAYS
             * would seem best, but as discussed in defines.js, it's off by default, because it doesn't perform
             * as well as LONGARRAYS; the other advantage of TYPEDARRAYS is that it should theoretically use
             * about 1/2 the memory of LONGARRAYS (32-bit elements vs 64-bit numbers), but I value speed over
             * size at this point.  Also, not all JavaScript implementations support TYPEDARRAYS (IE9 is probably
             * the only real outlier: it lacks typed arrays but otherwise has all the necessary HTML5 support).
             *
             * WARNING: Since Memory blocks are low-level objects that have no UI requirements, they
             * do not inherit from the Component class, so if you want to use any Component class methods,
             * such as Component.assert(), use the corresponding Debugger methods instead (assuming a debugger
             * is available).
             *
             * @constructor
             * @param {number|null} [addr] of lowest used address in block
             * @param {number} [used] portion of block in bytes (0 for none); must be a multiple of 4
             * @param {number} [size] of block's buffer in bytes (0 for none); must be a multiple of 4
             * @param {number} [type] is one of the Memory.TYPE constants (default is Memory.TYPE.NONE)
             * @param {Object} [controller] is an optional memory controller component
             * @param {X86CPU} [cpu] is required for UNPAGED memory blocks, so that the CPU can map it to a PAGED block
             */
            function Memory(addr, used, size, type, controller, cpu)
            {
                var i;
                this.id = (Memory.idBlock += 2);
                this.adw = null;
                this.offset = 0;
                this.addr = addr;
                this.used = used;
                this.size = size || 0;
                this.type = type || Memory.TYPE.NONE;
                this.fReadOnly = (type == Memory.TYPE.ROM);
                this.controller = null;
                this.cpu = cpu;
                this.fDirty = this.fDirtyEver = false;
                this.setPhysBlock();
            
                if (BACKTRACK) {
                    if (!size || controller) {
                        this.fModBackTrack = false;
                        this.readBackTrack = this.readBackTrackNone;
                        this.writeBackTrack = this.writeBackTrackNone;
                        this.modBackTrack = this.modBackTrackNone;
                    } else {
                        this.fModBackTrack = true;
                        this.readBackTrack = this.readBackTrackIndex;
                        this.writeBackTrack = this.writeBackTrackIndex;
                        this.modBackTrack = this.modBackTrackIndex;
                        this.abtIndexes = new Array(size);
                        for (i = 0; i < size; i++) this.abtIndexes[i] = 0;
                    }
                }
            
                /*
                 * For empty memory blocks, all we need to do is ensure all access functions
                 * are mapped to "none" handlers (or "unpaged" handlers if paging is enabled).
                 */
                if (!size) {
                    this.setAccess();
                    return;
                }
            
                /*
                 * When a controller is specified, the controller must provide a buffer,
                 * via getMemoryBuffer(), and memory access functions, via getMemoryAccess().
                 */
                if (controller) {
                    this.controller = controller;
                    var a = controller.getMemoryBuffer(addr);
                    this.adw = a[0];
                    this.offset = a[1];
                    this.setAccess(controller.getMemoryAccess());
                    return;
                }
            
                /*
                 * This is the normal case: allocate a buffer that provides 8 bits of data per address;
                 * no controller is required because our default memory access functions (see afnMemory)
                 * know how to deal with this simple 1-1 mapping of addresses to bytes and words.
                 *
                 * TODO: Consider initializing the memory array to random (or pseudo-random) values in DEBUG
                 * mode; pseudo-random might be best, to help make any bugs reproducible.
                 */
                if (TYPEDARRAYS) {
                    this.buffer = new ArrayBuffer(size);
                    this.dv = new DataView(this.buffer, 0, size);
                    /*
                     * If littleEndian is true, we can use ab[], aw[] and adw[] directly; well, we can use them
                     * whenever the offset is a multiple of 1, 2 or 4, respectively.  Otherwise, we must fallback to
                     * dv.getUint8()/dv.setUint8(), dv.getUint16()/dv.setUint16() and dv.getInt32()/dv.setInt32().
                     */
                    this.ab = new Uint8Array(this.buffer, 0, size);
                    this.aw = new Uint16Array(this.buffer, 0, size >> 1);
                    this.adw = new Int32Array(this.buffer, 0, size >> 2);
                    this.setAccess(littleEndian? Memory.afnLittleEndian : Memory.afnBigEndian);
                } else {
                    if (FATARRAYS) {
                        this.ab = new Array(size);
                    } else {
                        /*
                         * NOTE: This is the default mode of operation (!TYPEDARRAYS && !FATARRAYS), because it
                         * seems to provide the best performance; and although in theory, that performance might
                         * come at twice the overhead of TYPEDARRAYS, it's increasingly likely that the JavaScript
                         * runtime will notice that all we ever store are 32-bit values, and optimize accordingly.
                         */
                        this.adw = new Array(size >> 2);
                        for (i = 0; i < this.adw.length; i++) this.adw[i] = 0;
                    }
                    this.setAccess(Memory.afnMemory);
                }
            }
            
            /*
             * Basic memory types
             *
             * RAM is the most conventional memory type, providing full read/write capability to x86-compatible (ie,
             * 'little endian") storage.  ROM is equally conventional, except that the fReadOnly property is set,
             * disabling writes.  VIDEO is treated exactly like RAM, unless a controller is provided.  Both RAM and
             * VIDEO memory are always considered writable, and even ROM can be written using the Bus setByteDirect()
             * interface (which in turn uses the Memory writeByteDirect() interface), allowing the ROM component to
             * initialize its own memory.  The CTRL type is used to identify memory-mapped devices that do not need
             * any default storage and always provide their own controller.
             *
             * UNPAGED and PAGED blocks are created by the CPU when paging is enabled; the role of an UNPAGED block
             * is simply to perform page translation and replace itself with a PAGED block, which redirects read/write
             * requests to the physical page located during translation.  UNPAGED and PAGED blocks are considered
             * "logical" blocks that don't contain any storage of their own; all other block types represent "physical"
             * memory (or a memory-mapped device).
             *
             * Unallocated regions of the address space contain a special memory block of type NONE that contains
             * no storage.  Mapping every addressible location to a memory block allows all accesses to be routed in
             * exactly the same manner, without resorting to any range or processor checks.
             *
             * Originally, the Debugger always went through the Bus interfaces, and could therefore modify ROMs as well,
             * but with the introduction of protected mode memory segmentation (and later paging), where logical and
             * phsycial addresses were no longer the same, that is no longer true.  For coherency, all Debugger memory
             * accesses now go through the X86Seg and X86CPU memory interfaces, so that the user sees the same segment
             * and page translation that the CPU sees.  However, the Debugger uses special "fSuppress" flags to prevent
             * those X86 interfaces from triggering segment and/or page faults when invalid or not-present segments
             * or pages are accessed.
             *
             * These types are not mutually exclusive.  For example, VIDEO memory could be allocated as RAM, with or
             * without a custom controller (the original Monochrome and CGA video cards used read/write storage that
             * was indistiguishable from RAM), and CTRL memory could be allocated as an empty block of any type, with
             * a custom controller.  A few types are required for certain features (eg, ROM is required if you want
             * read-only memory), but the larger purpose of these types is to help document the caller's intent and to
             * provide the Control Panel with the ability to highlight memory regions accordingly.
             */
            Memory.TYPE = {
                NONE:       0,
                RAM:        1,
                ROM:        2,
                VIDEO:      3,
                CTRL:       4,
                UNPAGED:    5,
                PAGED:      6,
                NAMES:      ["NONE",  "RAM",  "ROM",   "VIDEO", "H/W", "UNPAGED", "PAGED"],
                COLORS:     ["black", "blue", "green", "cyan"]
            };
            
            /*
             * Last used block ID (used for debugging only)
             */
            Memory.idBlock = 0;
            
            /**
             * adjustEndian(dw)
             *
             * @param {number} dw
             * @return {number}
             */
            Memory.adjustEndian = function(dw) {
                if (TYPEDARRAYS && !littleEndian) {
                    dw = (dw << 24) | ((dw << 8) & 0x00ff0000) | ((dw >> 8) & 0x0000ff00) | (dw >>> 24);
                }
                return dw;
            };
            
            Memory.prototype = {
                constructor: Memory,
                parent: null,
                /**
                 * clone(mem, type)
                 *
                 * Converts the current Memory block (this) into a clone of the given Memory block (mem),
                 * and optionally overrides the current block's type with the specified type.
                 *
                 * @this {Memory}
                 * @param {Memory} mem
                 * @param {number} [type]
                 */
                clone: function(mem, type) {
                    /*
                     * Original memory block IDs are even; cloned memory block IDs are odd;
                     * the original ID of the current block is lost, but that's OK, since it was presumably
                     * produced merely to become a clone.
                     */
                    this.id = mem.id | 0x1;
                    this.used = mem.used;
                    this.size = mem.size;
                    if (type) {
                        this.type = type;
                        this.fReadOnly = (type == Memory.TYPE.ROM);
                    }
                    if (TYPEDARRAYS) {
                        this.buffer = mem.buffer;
                        this.dv = mem.dv;
                        this.ab = mem.ab;
                        this.aw = mem.aw;
                        this.adw = mem.adw;
                        this.setAccess(littleEndian? Memory.afnLittleEndian : Memory.afnBigEndian);
                    } else {
                        if (FATARRAYS) {
                            this.ab = mem.ab;
                        } else {
                            this.adw = mem.adw;
                        }
                        this.setAccess(Memory.afnMemory);
                    }
                },
                /**
                 * save()
                 *
                 * This gets the contents of a Memory block as an array of 32-bit values;
                 * used by Bus.saveMemory(), which in turn is called by X86CPU.save().
                 *
                 * Memory blocks with custom memory controllers do NOT save their contents;
                 * that's the responsibility of the controller component.
                 *
                 * @this {Memory}
                 * @return {Array|Int32Array|null}
                 */
                save: function() {
                    var adw, i;
                    if (this.controller) {
                        adw = null;
                    }
                    else if (FATARRAYS) {
                        adw = new Array(this.size >> 2);
                        var off = 0;
                        for (i = 0; i < adw.length; i++) {
                            adw[i] = this.ab[off] | (this.ab[off + 1] << 8) | (this.ab[off + 2] << 16) | (this.ab[off + 3] << 24);
                            off += 4;
                        }
                    }
                    else if (TYPEDARRAYS) {
                        /*
                         * It might be tempting to just return a copy of Int32Array(this.buffer, 0, this.size >> 2),
                         * but we can't be sure of the "endianness" of an Int32Array -- which would be OK if the array
                         * was always saved/restored on the same machine, but there's no guarantee of that, either.
                         * So we use getInt32() and require little-endian values.
                         *
                         * Moreover, an Int32Array isn't treated by JSON.stringify() and JSON.parse() exactly like
                         * a normal array; it's serialized as an Object rather than an Array, so it lacks a "length"
                         * property and causes problems for State.store() and State.parse().
                         */
                        adw = new Array(this.size >> 2);
                        for (i = 0; i < adw.length; i++) {
                            adw[i] = this.dv.getInt32(i << 2, true);
                        }
                    }
                    else {
                        adw = this.adw;
                    }
                    return adw;
                },
                /**
                 * restore(adw)
                 *
                 * This restores the contents of a Memory block from an array of 32-bit values;
                 * used by Bus.restoreMemory(), which is called by X86CPU.restore(), after all other
                 * components have been restored and thus all Memory blocks have been allocated
                 * by their respective components.
                 *
                 * @this {Memory}
                 * @param {Array|null} adw
                 * @return {boolean} true if successful, false if block size mismatch
                 */
                restore: function(adw) {
                    if (this.controller) {
                        return (adw == null);
                    }
                    /*
                     * At this point, it's a consistency error for adw to be null; it's happened once already,
                     * when there was a restore bug in the Video component that added the frame buffer at the video
                     * card's "spec'ed" address instead of the programmed address, so there were no controller-owned
                     * memory blocks installed at the programmed address, and so we arrived here at a block with
                     * no controller AND no data.
                     */
                    Component.assert(adw != null);
                    if (adw && this.size == adw.length << 2) {
                        var i;
                        if (FATARRAYS) {
                            var off = 0;
                            for (i = 0; i < adw.length; i++) {
                                this.ab[off] = adw[i] & 0xff;
                                this.ab[off + 1] = (adw[i] >> 8) & 0xff;
                                this.ab[off + 2] = (adw[i] >> 16) & 0xff;
                                this.ab[off + 3] = (adw[i] >> 24) & 0xff;
                                off += 4;
                            }
                        } else if (TYPEDARRAYS) {
                            for (i = 0; i < adw.length; i++) {
                                this.dv.setInt32(i << 2, adw[i], true);
                            }
                        } else {
                            this.adw = adw;
                        }
                        this.fDirty = true;
                        return true;
                    }
                    return false;
                },
                /**
                 * setAccess(afn)
                 *
                 * If no function table is specified, a default is selected based on the Memory type.
                 *
                 * @this {Memory}
                 * @param {Array.<function()>} [afn] function table
                 */
                setAccess: function(afn) {
                    if (!afn) {
                        if (this.type == Memory.TYPE.UNPAGED) {
                            afn = Memory.afnUnpaged;
                        }
                        else if (this.type == Memory.TYPE.PAGED) {
                            afn = Memory.afnPaged;
                        } else {
                            Component.assert(this.type == Memory.TYPE.NONE);
                            afn = Memory.afnNone;
                        }
                    }
                    this.setReadAccess(afn, true);
                    this.setWriteAccess(afn, true);
                },
                /**
                 * setReadAccess(afn, fDirect)
                 *
                 * @this {Memory}
                 * @param {Array.<function()>} afn
                 * @param {boolean} [fDirect]
                 */
                setReadAccess: function(afn, fDirect) {
                    this.readByte = afn[0] || this.readNone;
                    this.readShort = afn[1] || this.readShortDefault;
                    this.readLong = afn[2] || this.readLongDefault;
                    if (fDirect) {
                        this.readByteDirect = afn[0] || this.readNone;
                        this.readShortDirect = afn[1] || this.readShortDefault;
                        this.readLongDirect = afn[2] || this.readLongDefault;
                    }
                },
                /**
                 * setWriteAccess(afn, fDirect)
                 *
                 * @this {Memory}
                 * @param {Array.<function()>} afn
                 * @param {boolean} [fDirect]
                 */
                setWriteAccess: function(afn, fDirect) {
                    this.writeByte = !this.fReadOnly && afn[3] || this.writeNone;
                    this.writeShort = !this.fReadOnly && afn[4] || this.writeShortDefault;
                    this.writeLong = !this.fReadOnly && afn[5] || this.writeLongDefault;
                    if (fDirect) {
                        this.writeByteDirect = afn[3] || this.writeNone;
                        this.writeShortDirect = afn[4] || this.writeShortDefault;
                        this.writeLongDirect = afn[5] || this.writeLongDefault;
                    }
                },
                /**
                 * resetReadAccess()
                 *
                 * @this {Memory}
                 */
                resetReadAccess: function() {
                    this.readByte = this.readByteDirect;
                    this.readShort = this.readShortDirect;
                    this.readLong = this.readLongDirect;
                },
                /**
                 * resetWriteAccess()
                 *
                 * @this {Memory}
                 */
                resetWriteAccess: function() {
                    this.writeByte = this.fReadOnly? this.writeNone : this.writeByteDirect;
                    this.writeShort = this.fReadOnly? this.writeNone : this.writeShortDirect;
                    this.writeLong = this.fReadOnly? this.writeNone : this.writeLongDirect;
                },
                /**
                 * setDebugger(dbg, addr, size)
                 *
                 * @this {Memory}
                 * @param {Debugger} dbg
                 * @param {number} addr of block
                 * @param {number} size of block
                 */
                setDebugger: function(dbg, addr, size) {
                    if (DEBUGGER) {
                        this.dbg = dbg;
                        this.cReadBreakpoints = this.cWriteBreakpoints = 0;
                        Component.assert(this.dbg);
                        this.dbg.redoBreakpoints(addr, size);
                    }
                },
                /**
                 * getPageBlock(addr, fWrite)
                 *
                 * @this {Memory}
                 * @param {number} addr
                 * @param {boolean} fWrite (true if called for a write, false if for a read)
                 * @return {Memory}
                 */
                getPageBlock: function(addr, fWrite) {
                    var block = this.cpu.mapPageBlock(addr, fWrite);
                    /*
                     * If mapPageBlock() fails -- which can easily happen if the page is not present or has insufficient
                     * privileges -- then a fault will be triggered and block will be null.  We still have to return a block,
                     * but it will be our old "unpaged" self.
                     */
                    return block || this;
                },
                /**
                 * setPhysBlock(blockPhys, blockPDE, offPDE, blockPTE, offPTE)
                 *
                 * @this {Memory}
                 * @param {Memory|null} [blockPhys]
                 * @param {Memory|null} [blockPDE]
                 * @param {number} [offPDE]
                 * @param {Memory|null} [blockPTE]
                 * @param {number} [offPTE]
                 */
                setPhysBlock: function(blockPhys, blockPDE, offPDE, blockPTE, offPTE) {
                    this.blockPhys = blockPhys;
                    this.blockPDE = blockPDE;
                    this.iPDE = offPDE >> 2;    // convert offPDE into iPDE (an adw index)
                    this.blockPTE = blockPTE;
                    this.iPTE = offPTE >> 2;    // convert offPTE into iPTE (an adw index)
                    this.bitPTEDirty = blockPhys? Memory.adjustEndian(X86.PTE.ACCESSED | X86.PTE.DIRTY) : 0;
                    this.bitPTEAccessed = blockPhys? Memory.adjustEndian(X86.PTE.ACCESSED) : 0;
                },
                /**
                 * addBreakpoint(off, fWrite)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {boolean} fWrite
                 */
                addBreakpoint: function(off, fWrite) {
                    if (DEBUGGER && this.dbg) {
                        if (!fWrite) {
                            if (this.cReadBreakpoints++ === 0) {
                                this.setReadAccess(Memory.afnChecked);
                            }
                            if (DEBUG) this.dbg.println("read breakpoint added to memory block " + str.toHex(this.addr));
                        }
                        else {
                            if (this.cWriteBreakpoints++ === 0) {
                                this.setWriteAccess(Memory.afnChecked);
                            }
                            if (DEBUG) this.dbg.println("write breakpoint added to memory block " + str.toHex(this.addr));
                        }
                    }
                },
                /**
                 * removeBreakpoint(off, fWrite)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {boolean} fWrite
                 */
                removeBreakpoint: function(off, fWrite) {
                    if (DEBUGGER && this.dbg) {
                        if (!fWrite) {
                            if (--this.cReadBreakpoints === 0) {
                                this.resetReadAccess();
                                if (DEBUG) this.dbg.println("all read breakpoints removed from memory block " + str.toHex(this.addr));
                            }
                            this.dbg.assert(this.cReadBreakpoints >= 0);
                        }
                        else {
                            if (--this.cWriteBreakpoints === 0) {
                                this.resetWriteAccess();
                                if (DEBUG) this.dbg.println("all write breakpoints removed from memory block " + str.toHex(this.addr));
                            }
                            this.dbg.assert(this.cWriteBreakpoints >= 0);
                        }
                    }
                },
                /**
                 * readNone(off)
                 *
                 * Previously, this always returned 0x00, but the initial memory probe by the Compaq DeskPro 386 ROM BIOS
                 * writes 0x0000 to the first word of every 64Kb block in the nearly 16Mb address space it supports, and
                 * if it reads back 0x0000, it will initially think that LOTS of RAM exists, only to be disappointed later
                 * when it performs a more exhaustive memory test, generating unwanted error messages in the process.
                 *
                 * TODO: Determine if we should have separate readByteNone(), readShortNone() and readLongNone() functions
                 * to return 0xff, 0xffff and 0xffffffff|0, respectively.  This seems sufficient for now, as it seems unlikely
                 * that a system would require nonexistent memory locations to return ALL bits set.
                 *
                 * Also, I'm reluctant to address that potential issue by simply returning -1, because to date, the above
                 * Memory interfaces have always returned values that are properly masked to 8, 16 or 32 bits, respectively.
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readNone: function readNone(off, addr) {
                    if (DEBUGGER && this.dbg && this.dbg.messageEnabled(Messages.MEM) /* && !off */) {
                        this.dbg.message("attempt to read invalid block %" + str.toHex(this.addr), true);
                    }
                    return 0xff;
                },
                /**
                 * writeNone(off, v, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} v (could be either a byte or word value, since we use the same handler for both kinds of accesses)
                 * @param {number} addr
                 */
                writeNone: function writeNone(off, v, addr) {
                    if (DEBUGGER && this.dbg && this.dbg.messageEnabled(Messages.MEM) /* && !off */) {
                        this.dbg.message("attempt to write " + str.toHexWord(v) + " to invalid block %" + str.toHex(this.addr), true);
                    }
                },
                /**
                 * readShortDefault(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortDefault: function readShortDefault(off, addr) {
                    return this.readByte(off, addr) | (this.readByte(off + 1, addr) << 8);
                },
                /**
                 * readLongDefault(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongDefault: function readLongDefault(off, addr) {
                    return this.readByte(off, addr) | (this.readByte(off + 1, addr) << 8) | (this.readByte(off + 2, addr) << 16) | (this.readByte(off + 3, addr) << 24);
                },
                /**
                 * writeShortDefault(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} w
                 * @param {number} addr
                 */
                writeShortDefault: function writeShortDefault(off, w, addr) {
                    Component.assert(!(w & ~0xffff));
                    this.writeByte(off, w & 0xff, addr);
                    this.writeByte(off + 1, w >> 8, addr);
                },
                /**
                 * writeLongDefault(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} w
                 * @param {number} addr
                 */
                writeLongDefault: function writeLongDefault(off, w, addr) {
                    this.writeByte(off, w & 0xff, addr);
                    this.writeByte(off + 1, (w >> 8) & 0xff, addr);
                    this.writeByte(off + 2, (w >> 16) & 0xff, addr);
                    this.writeByte(off + 3, (w >>> 24), addr);
                },
                /**
                 * readByteMemory(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readByteMemory: function readByteMemory(off, addr) {
                    Component.assert(off >= 0 && off < this.size);
                    if (FATARRAYS) {
                        return this.ab[off];
                    }
                    return ((this.adw[off >> 2] >>> ((off & 0x3) << 3)) & 0xff);
                },
                /**
                 * readShortMemory(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortMemory: function readShortMemory(off, addr) {
                    Component.assert(off >= 0 && off < this.size - 1);
                    if (FATARRAYS) {
                        return this.ab[off] | (this.ab[off + 1] << 8);
                    }
                    var w;
                    var idw = off >> 2;
                    var nShift = (off & 0x3) << 3;
                    var dw = (this.adw[idw] >> nShift);
                    if (nShift < 24) {
                        w = dw & 0xffff;
                    } else {
                        w = (dw & 0xff) | ((this.adw[idw + 1] & 0xff) << 8);
                    }
                    return w;
                },
                /**
                 * readLongMemory(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongMemory: function readLongMemory(off, addr) {
                    Component.assert(off >= 0 && off < this.size - 3);
                    if (FATARRAYS) {
                        return this.ab[off] | (this.ab[off + 1] << 8) | (this.ab[off + 2] << 16) | (this.ab[off + 3] << 24);
                    }
                    var idw = off >> 2;
                    var nShift = (off & 0x3) << 3;
                    var l = this.adw[idw];
                    if (nShift) {
                        l >>>= nShift;
                        l |= this.adw[idw + 1] << (32 - nShift);
                    }
                    return l;
                },
                /**
                 * writeByteMemory(off, b, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} b
                 * @param {number} addr
                 */
                writeByteMemory: function writeByteMemory(off, b, addr) {
                    Component.assert(off >= 0 && off < this.size && (b & 0xff) == b);
                    if (FATARRAYS) {
                        this.ab[off] = b;
                    } else {
                        var idw = off >> 2;
                        var nShift = (off & 0x3) << 3;
                        this.adw[idw] = (this.adw[idw] & ~(0xff << nShift)) | (b << nShift);
                    }
                    this.fDirty = true;
                },
                /**
                 * writeShortMemory(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} w
                 * @param {number} addr
                 */
                writeShortMemory: function writeShortMemory(off, w, addr) {
                    Component.assert(off >= 0 && off < this.size - 1 && (w & 0xffff) == w);
                    if (FATARRAYS) {
                        this.ab[off] = (w & 0xff);
                        this.ab[off + 1] = (w >> 8);
                    } else {
                        var idw = off >> 2;
                        var nShift = (off & 0x3) << 3;
                        if (nShift < 24) {
                            this.adw[idw] = (this.adw[idw] & ~(0xffff << nShift)) | (w << nShift);
                        } else {
                            this.adw[idw] = (this.adw[idw] & 0x00ffffff) | (w << 24);
                            idw++;
                            this.adw[idw] = (this.adw[idw] & (0xffffff00|0)) | (w >> 8);
                        }
                    }
                    this.fDirty = true;
                },
                /**
                 * writeLongMemory(off, l, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} l
                 * @param {number} addr
                 */
                writeLongMemory: function writeLongMemory(off, l, addr) {
                    Component.assert(off >= 0 && off < this.size - 3);
                    if (FATARRAYS) {
                        this.ab[off] = (l & 0xff);
                        this.ab[off + 1] = (l >> 8) & 0xff;
                        this.ab[off + 2] = (l >> 16) & 0xff;
                        this.ab[off + 3] = (l >> 24) & 0xff;
                    } else {
                        var idw = off >> 2;
                        var nShift = (off & 0x3) << 3;
                        if (!nShift) {
                            this.adw[idw] = l;
                        } else {
                            var mask = (0xffffffff|0) << nShift;
                            this.adw[idw] = (this.adw[idw] & ~mask) | (l << nShift);
                            idw++;
                            this.adw[idw] = (this.adw[idw] & mask) | (l >>> (32 - nShift));
                        }
                    }
                    this.fDirty = true;
                },
                /**
                 * readByteChecked(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readByteChecked: function readByteChecked(off, addr) {
                    if (DEBUGGER && this.dbg) this.dbg.checkMemoryRead(addr);
                    return this.readByteDirect(off, addr);
                },
                /**
                 * readShortChecked(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortChecked: function readShortChecked(off, addr) {
                    if (DEBUGGER && this.dbg) {
                        this.dbg.checkMemoryRead(addr) ||
                        this.dbg.checkMemoryRead(addr + 1);
                    }
                    return this.readShortDirect(off, addr);
                },
                /**
                 * readLongChecked(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongChecked: function readLongChecked(off, addr) {
                    if (DEBUGGER && this.dbg) {
                        this.dbg.checkMemoryRead(addr) ||
                        this.dbg.checkMemoryRead(addr + 1) ||
                        this.dbg.checkMemoryRead(addr + 2) ||
                        this.dbg.checkMemoryRead(addr + 3);
                    }
                    return this.readLongDirect(off, addr);
                },
                /**
                 * writeByteChecked(off, b, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @param {number} b
                 */
                writeByteChecked: function writeByteChecked(off, b, addr) {
                    if (DEBUGGER && this.dbg) this.dbg.checkMemoryWrite(addr);
                    if (this.fReadOnly) this.writeNone(off, b, addr); else this.writeByteDirect(off, b, addr);
                },
                /**
                 * writeShortChecked(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @param {number} w
                 */
                writeShortChecked: function writeShortChecked(off, w, addr) {
                    if (DEBUGGER && this.dbg) {
                        this.dbg.checkMemoryWrite(addr) ||
                        this.dbg.checkMemoryWrite(addr + 1);
                    }
                    if (this.fReadOnly) this.writeNone(off, w, addr); else this.writeShortDirect(off, w, addr);
                },
                /**
                 * writeLongChecked(off, l, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} l
                 * @param {number} addr
                 */
                writeLongChecked: function writeLongChecked(off, l, addr) {
                    if (DEBUGGER && this.dbg) {
                        this.dbg.checkMemoryWrite(this.addr + off) ||
                        this.dbg.checkMemoryWrite(this.addr + off + 1) ||
                        this.dbg.checkMemoryWrite(this.addr + off + 2) ||
                        this.dbg.checkMemoryWrite(this.addr + off + 3);
                    }
                    if (this.fReadOnly) this.writeNone(off, l, addr); else this.writeLongDirect(off, l, addr);
                },
                /**
                 * readBytePaged(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readBytePaged: function readBytePaged(off, addr) {
                    this.blockPDE.adw[this.iPDE] |= this.bitPTEAccessed;
                    this.blockPTE.adw[this.iPTE] |= this.bitPTEAccessed;
                    return this.blockPhys.readByte(off, addr);
                },
                /**
                 * readShortPaged(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortPaged: function readShortPaged(off, addr) {
                    this.blockPDE.adw[this.iPDE] |= this.bitPTEAccessed;
                    this.blockPTE.adw[this.iPTE] |= this.bitPTEAccessed;
                    return this.blockPhys.readShort(off, addr);
                },
                /**
                 * readLongPaged(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongPaged: function readLongPaged(off, addr) {
                    this.blockPDE.adw[this.iPDE] |= this.bitPTEAccessed;
                    this.blockPTE.adw[this.iPTE] |= this.bitPTEAccessed;
                    return this.blockPhys.readLong(off, addr);
                },
                /**
                 * writeBytePaged(off, b, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} b
                 * @param {number} addr
                 */
                writeBytePaged: function writeBytePaged(off, b, addr) {
                    this.blockPDE.adw[this.iPDE] |= this.bitPTEAccessed;
                    this.blockPTE.adw[this.iPTE] |= this.bitPTEDirty;
                    this.blockPhys.writeByte(off, b, addr);
                },
                /**
                 * writeShortPaged(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} w
                 * @param {number} addr
                 */
                writeShortPaged: function writeShortPaged(off, w, addr) {
                    this.blockPDE.adw[this.iPDE] |= this.bitPTEAccessed;
                    this.blockPTE.adw[this.iPTE] |= this.bitPTEDirty;
                    this.blockPhys.writeShort(off, w, addr);
                },
                /**
                 * writeLongPaged(off, l, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} l
                 * @param {number} addr
                 */
                writeLongPaged: function writeLongPaged(off, l, addr) {
                    this.blockPDE.adw[this.iPDE] |= this.bitPTEAccessed;
                    this.blockPTE.adw[this.iPTE] |= this.bitPTEDirty;
                    this.blockPhys.writeLong(off, l, addr);
                },
                /**
                 * readByteUnpaged(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readByteUnpaged: function readByteUnpaged(off, addr) {
                    return this.getPageBlock(addr, false).readByte(off, addr);
                },
                /**
                 * readShortUnpaged(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortUnpaged: function readShortUnpaged(off, addr) {
                    return this.getPageBlock(addr, false).readShort(off, addr);
                },
                /**
                 * readLongUnpaged(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongUnpaged: function readLongUnpaged(off, addr) {
                    return this.getPageBlock(addr, false).readLong(off, addr);
                },
                /**
                 * writeByteUnpaged(off, b, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} b
                 * @param {number} addr
                 */
                writeByteUnpaged: function writeByteUnpaged(off, b, addr) {
                    this.getPageBlock(addr, true).writeByte(off, b, addr);
                },
                /**
                 * writeShortUnpaged(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} w
                 * @param {number} addr
                 */
                writeShortUnpaged: function writeShortUnpaged(off, w, addr) {
                    this.getPageBlock(addr, true).writeShort(off, w, addr);
                },
                /**
                 * writeLongUnpaged(off, l, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} l
                 * @param {number} addr
                 */
                writeLongUnpaged: function writeLongUnpaged(off, l, addr) {
                    this.getPageBlock(addr, true).writeLong(off, l, addr);
                },
                /**
                 * readByteBigEndian(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readByteBigEndian: function readByteBigEndian(off, addr) {
                    Component.assert(off >= 0 && off < this.size);
                    return this.ab[off];
                },
                /**
                 * readByteLittleEndian(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readByteLittleEndian: function readByteLittleEndian(off, addr) {
                    Component.assert(off >= 0 && off < this.size);
                    return this.ab[off];
                },
                /**
                 * readShortBigEndian(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortBigEndian: function readShortBigEndian(off, addr) {
                    Component.assert(off >= 0 && off < this.size - 1);
                    return this.dv.getUint16(off, true);
                },
                /**
                 * readShortLittleEndian(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readShortLittleEndian: function readShortLittleEndian(off, addr) {
                    Component.assert(off >= 0 && off < this.size - 1);
                    /*
                     * TODO: It remains to be seen if there's any advantage to checking the offset
                     * for an aligned read vs. always reading the bytes separately; it seems a safe bet
                     * for longs, but it's less clear for shorts.
                     */
                    return (off & 0x1)? (this.ab[off] | (this.ab[off+1] << 8)) : this.aw[off >> 1];
                },
                /**
                 * readLongBigEndian(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongBigEndian: function readLongBigEndian(off, addr) {
                    Component.assert(off >= 0 && off < this.size - 3);
                    return this.dv.getInt32(off, true);
                },
                /**
                 * readLongLittleEndian(off, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @return {number}
                 */
                readLongLittleEndian: function readLongLittleEndian(off, addr) {
                    Component.assert(off >= 0 && off < this.size - 3);
                    /*
                     * TODO: It remains to be seen if there's any advantage to checking the offset
                     * for an aligned read vs. always reading the bytes separately; it seems a safe bet
                     * for longs, but it's less clear for shorts.
                     */
                    return (off & 0x3)? (this.ab[off] | (this.ab[off+1] << 8) | (this.ab[off+2] << 16) | (this.ab[off+3] << 24)) : this.adw[off >> 2];
                },
                /**
                 * writeByteBigEndian(off, b, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} b
                 * @param {number} addr
                 */
                writeByteBigEndian: function writeByteBigEndian(off, b, addr) {
                    Component.assert(off >= 0 && off < this.size);
                    this.ab[off] = b;
                    this.fDirty = true;
                },
                /**
                 * writeByteLittleEndian(off, b, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @param {number} b
                 */
                writeByteLittleEndian: function writeByteLittleEndian(off, b, addr) {
                    Component.assert(off >= 0 && off < this.size);
                    this.ab[off] = b;
                    this.fDirty = true;
                },
                /**
                 * writeShortBigEndian(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @param {number} w
                 */
                writeShortBigEndian: function writeShortBigEndian(off, w, addr) {
                    Component.assert(off >= 0 && off < this.size - 1);
                    this.dv.setUint16(off, w, true);
                    this.fDirty = true;
                },
                /**
                 * writeShortLittleEndian(off, w, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} addr
                 * @param {number} w
                 */
                writeShortLittleEndian: function writeShortLittleEndian(off, w, addr) {
                    Component.assert(off >= 0 && off < this.size - 1);
                    /*
                     * TODO: It remains to be seen if there's any advantage to checking the offset
                     * for an aligned write vs. always writing the bytes separately; it seems a safe bet
                     * for longs, but it's less clear for shorts.
                     */
                    if (off & 0x1) {
                        this.ab[off] = w;
                        this.ab[off+1] = w >> 8;
                    } else {
                        this.aw[off >> 1] = w;
                    }
                    this.fDirty = true;
                },
                /**
                 * writeLongBigEndian(off, l, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} l
                 * @param {number} addr
                 */
                writeLongBigEndian: function writeLongBigEndian(off, l, addr) {
                    Component.assert(off >= 0 && off < this.size - 3);
                    this.dv.setInt32(off, l, true);
                    this.fDirty = true;
                },
                /**
                 * writeLongLittleEndian(off, l, addr)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} l
                 * @param {number} addr
                 */
                writeLongLittleEndian: function writeLongLittleEndian(off, l, addr) {
                    Component.assert(off >= 0 && off < this.size - 3);
                    /*
                     * TODO: It remains to be seen if there's any advantage to checking the offset
                     * for an aligned write vs. always writing the bytes separately; it seems a safe bet
                     * for longs, but it's less clear for shorts.
                     */
                    if (off & 0x3) {
                        this.ab[off] = l;
                        this.ab[off+1] = (l >> 8);
                        this.ab[off+2] = (l >> 16);
                        this.ab[off+3] = (l >> 24);
                    } else {
                        this.adw[off >> 2] = l;
                    }
                    this.fDirty = true;
                },
                /**
                 * readBackTrackNone(off)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @return {number}
                 */
                readBackTrackNone: function readBackTrackNone(off) {
                    return 0;
                },
                /**
                 * writeBackTrackNone(off, bti)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} bti
                 */
                writeBackTrackNone: function writeBackTrackNone(off, bti) {
                },
                /**
                 * modBackTrackNone(fMod)
                 *
                 * @this {Memory}
                 * @param {boolean} fMod
                 */
                modBackTrackNone: function modBackTrackNone(fMod) {
                    return false;
                },
                /**
                 * readBackTrackIndex(off)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @return {number}
                 */
                readBackTrackIndex: function readBackTrackIndex(off) {
                    Component.assert(off >= 0 && off < this.size);
                    return this.abtIndexes[off];
                },
                /**
                 * writeBackTrackIndex(off, bti)
                 *
                 * @this {Memory}
                 * @param {number} off
                 * @param {number} bti
                 * @return {number} previous bti (0 if none)
                 */
                writeBackTrackIndex: function writeBackTrackIndex(off, bti) {
                    var btiPrev;
                    Component.assert(off >= 0 && off < this.size);
                    btiPrev = this.abtIndexes[off];
                    this.abtIndexes[off] = bti;
                    return btiPrev;
                },
                /**
                 * modBackTrackIndex(fMod)
                 *
                 * @this {Memory}
                 * @param {boolean} fMod
                 * @return {boolean} previous value
                 */
                modBackTrackIndex: function modBackTrackIndex(fMod) {
                    var fModPrev = this.fModBackTrack;
                    this.fModBackTrack = fMod;
                    return fModPrev;
                }
            };
            
            /*
             * This is the effective definition of afnNone, but we need not fully define it, because setAccess()
             * uses these defaults when any of the 6 handlers (ie, 3 read handlers and 3 write handlers) are undefined.
             *
            Memory.afnNone              = [Memory.prototype.readNone,        Memory.prototype.readShortDefault, Memory.prototype.readLongDefault, Memory.prototype.writeNone,        Memory.prototype.writeShortDefault, Memory.prototype.writeLongDefault];
             */
            
            Memory.afnNone              = [];
            Memory.afnMemory            = [Memory.prototype.readByteMemory,  Memory.prototype.readShortMemory,  Memory.prototype.readLongMemory,  Memory.prototype.writeByteMemory,  Memory.prototype.writeShortMemory,  Memory.prototype.writeLongMemory];
            Memory.afnChecked           = [Memory.prototype.readByteChecked, Memory.prototype.readShortChecked, Memory.prototype.readLongChecked, Memory.prototype.writeByteChecked, Memory.prototype.writeShortChecked, Memory.prototype.writeLongChecked];
            
            if (PAGEBLOCKS) {
                Memory.afnPaged         = [Memory.prototype.readBytePaged,   Memory.prototype.readShortPaged,   Memory.prototype.readLongPaged,   Memory.prototype.writeBytePaged,   Memory.prototype.writeShortPaged,   Memory.prototype.writeLongPaged];
                Memory.afnUnpaged       = [Memory.prototype.readByteUnpaged, Memory.prototype.readShortUnpaged, Memory.prototype.readLongUnpaged, Memory.prototype.writeByteUnpaged, Memory.prototype.writeShortUnpaged, Memory.prototype.writeLongUnpaged];
            }
            
            if (TYPEDARRAYS) {
                Memory.afnBigEndian     = [Memory.prototype.readByteBigEndian,    Memory.prototype.readShortBigEndian,    Memory.prototype.readLongBigEndian,    Memory.prototype.writeByteBigEndian,    Memory.prototype.writeShortBigEndian,    Memory.prototype.writeLongBigEndian];
                Memory.afnLittleEndian  = [Memory.prototype.readByteLittleEndian, Memory.prototype.readShortLittleEndian, Memory.prototype.readLongLittleEndian, Memory.prototype.writeByteLittleEndian, Memory.prototype.writeShortLittleEndian, Memory.prototype.writeLongLittleEndian];
            }
            
            if (typeof module !== 'undefined') module.exports = Memory;
            
          • messages.js
            /**
             * @fileoverview PCjs-specific message definitions.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-Dec-11
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /*
             * Components that previously used Debugger messages definitions by including:
             *
             *     var Debugger = require("./debugger");
             *
             * and using:
             *
             *      Debugger.MESSAGE.FOO
             *
             * must now instead include:
             *
             *      var Messages = require("./messages");
             *
             * and then replace all occurrences of "Debugger.MESSAGE.FOO" with "Messages.FOO".
             */
            
            var Messages = {
                CPU:        0x00000001,
                SEG:        0x00000002,
                DESC:       0x00000004,
                TSS:        0x00000008,
                INT:        0x00000010,
                FAULT:      0x00000020,
                BUS:        0x00000040,
                MEM:        0x00000080,
                PORT:       0x00000100,
                DMA:        0x00000200,
                PIC:        0x00000400,
                TIMER:      0x00000800,
                CMOS:       0x00001000,
                RTC:        0x00002000,
                C8042:      0x00004000,
                CHIPSET:    0x00008000,
                KEYBOARD:   0x00010000,
                KEYS:       0x00020000,
                VIDEO:      0x00040000,
                FDC:        0x00080000,
                HDC:        0x00100000,
                DISK:       0x00200000,
                SERIAL:     0x00400000,
                SPEAKER:    0x00800000,
                STATE:      0x01000000,
                MOUSE:      0x02000000,
                COMPUTER:   0x04000000,
                DOS:        0x08000000,
                DATA:       0x10000000,
                LOG:        0x20000000,
                WARN:       0x40000000,
                HALT:       0x80000000|0
            };
            
            if (typeof module !== 'undefined') module.exports = Messages;
            
          • mouse.js
            /**
             * @fileoverview Implements the PCjs Mouse component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jul-01
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var SerialPort  = require("./serialport");
                var State       = require("./state");
            }
            
            /**
             * Mouse(parmsMouse)
             *
             * The Mouse component has the following component-specific (parmsMouse) properties:
             *
             *      serial: the ID of the corresponding serial component
             *
             * Since the first version of this component supports ONLY emulation of the original Microsoft
             * serial mouse, a valid serial component ID is required.  It's possible that future versions
             * of this component may support other types of simulated hardware (eg, the Microsoft InPort
             * bus mouse adapter), or a virtual driver interface that would eliminate the need for any
             * intermediate hardware simulation (at the expense of writing an intermediate software layer or
             * virtual driver for each supported operating system).  However, those possibilities are extremely
             * unlikely in the near term.
             *
             * If the 'serial' property is specified, then communication will be established with the
             * SerialPort component, requesting access to the corresponding serial component ID.  If the
             * SerialPort component is not installed and/or the specified serial component ID is not present,
             * a configuration error will be reported.
             *
             * TODO: Just out of curiosity, verify that the Microsoft Bus Mouse used ports 0x23D and 0x23F,
             * because I saw Windows v1.01 probing those ports immediately prior to probing COM2 (and then COM1)
             * for a serial mouse.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsMouse
             */
            function Mouse(parmsMouse)
            {
                Component.call(this, "Mouse", parmsMouse, Mouse, Messages.MOUSE);
            
                this.idAdapter = parmsMouse['serial'];
                if (this.idAdapter) {
                    this.sAdapterType = "SerialPort";
                }
                this.setActive(false);
                this.fCaptured = this.fLocked = false;
            
                /*
                 * Initially, no video devices, and therefore no input devices, are attached.  initBus() will update aVideo,
                 * and powerUp() will update aInput.
                 */
                this.aVideo = [];
                this.aInput = [];
                this.setReady();
            }
            
            /*
             * From http://paulbourke.net/dataformats/serialmouse:
             *
             *      The old MicroSoft serial mouse, while no longer in general use, can be employed to provide a low cost input device,
             *      for example, coupling the internal mechanism to other moving objects. The serial protocol for the mouse is:
             *
             *          1200 baud, 7 bit, 1 stop bit, no parity.
             *
             *      The pinout of the connector follows the standard serial interface, as shown below:
             *
             *          Pin     Abbr    Description
             *          1       DCD     Data Carrier Detect
             *          2       RD      Receive Data            [serial data from mouse to host]
             *          3       TD      Transmit Data
             *          4       DTR     Data Terminal Ready     [used to provide positive voltage to mouse, plus reset/detection]
             *          5       SG      Signal Ground
             *          6       DSR     Data Set Ready
             *          7       RTS     Request To Send         [used to provide positive voltage to mouse]
             *          8       CTS     Clear To Send
             *          9       RI      Ring
             *
             *      Every time the mouse changes state (moved or button pressed) a three byte "packet" is sent to the serial interface.
             *      For reasons known only to the engineers, the data is arranged as follows, most notably the two high order bits for the
             *      x and y coordinates share the first byte with the button status.
             *
             *                      D6  D5  D4  D3  D2  D1  D0
             *          1st byte    1   LB  RB  Y7  Y6  X7  X6
             *          2nd byte    0   X5  X4  X3  X2  X1  X0
             *          3rd byte    0   Y5  Y4  Y3  Y2  Y1  Y0
             *
             *      where:
             *
             *          LB is the state of the left button, 1 = pressed, 0 = released.
             *          RB is the state of the right button, 1 = pressed, 0 = released
             *          X0-7 is movement of the mouse in the X direction since the last packet. Positive movement is toward the right.
             *          Y0-7 is movement of the mouse in the Y direction since the last packet. Positive movement is back, toward the user.
             *
             * From http://www.kryslix.com/nsfaq/Q.12.html:
             *
             *      The Microsoft serial mouse is the most popular 2-button mouse. It is supported by all major operating systems.
             *      The maximum tracking rate for a Microsoft mouse is 40 reports/second * 127 counts per report, in other words, 5080 counts
             *      per second. The most common range for mice is is 100 to 400 CPI (counts per inch) but can be up to 1000 CPI. A 100 CPI mouse
             *      can discriminate motion up to 50.8 inches/second while a 400 CPI mouse can only discriminate motion up to 12.7 inches/second.
             *
             *          9-pin  25-pin    Line    Comments
             *          shell  1         GND
             *          3      2         TD      Serial data from host to mouse (only for power)
             *          2      3         RD      Serial data from mouse to host
             *          7      4         RTS     Positive voltage to mouse
             *          8      5         CTS
             *          6      6         DSR
             *          5      7         SGND
             *          4      20        DTR     Positive voltage to mouse and reset/detection
             *
             *      To function correctly, both the RTS and DTR lines must be positive. DTR/DSR and RTS/CTS must NOT be shorted.
             *      RTS may be toggled negative for at least 100ms to reset the mouse. (After a cold boot, the RTS line is usually negative.
             *      This provides an automatic toggle when RTS is brought positive). When DTR is toggled the mouse should send a single byte
             *      (0x4D, ASCII 'M').
             *
             *      Serial data parameters: 1200bps, 7 data bits, 1 stop bit
             *
             *      Data is sent in 3 byte packets for each event (a button is pressed or released, or the mouse moves):
             *
             *                  D7  D6  D5  D4  D3  D2  D1  D0
             *          Byte 1  X   1   LB  RB  Y7  Y6  X7  X6
             *          Byte 2  X   0   X5  X4  X3  X2  X1  X0
             *          Byte 3  X   0   Y5  Y4  Y3  Y2  Y1  Y0
             *
             *      LB is the state of the left button (1 means down).
             *      RB is the state of the right button (1 means down).
             *      X7-X0 movement in X direction since last packet (signed byte).
             *      Y7-Y0 movement in Y direction since last packet (signed byte).
             *      The high order bit of each byte (D7) is ignored. Bit D6 indicates the start of an event, which allows the software to
             *      synchronize with the mouse.
             */
            
            Component.subclass(Mouse);
            
            Mouse.ID_SERIAL = 0x4D;
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {Mouse}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            Mouse.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.cmp = cmp;
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                /*
                 * Attach the Video component to the CPU, so that the CPU can periodically update
                 * the video display via updateVideo(), as cycles permit.
                 */
                for (var video = null; (video = cmp.getComponentByType("Video", video));) {
                    this.aVideo.push(video);
                }
            };
            
            /**
             * isActive()
             *
             * @this {Mouse}
             * @return {boolean} true if active, false if not
             */
            Mouse.prototype.isActive = function()
            {
                return this.fActive && (this.cpu? this.cpu.isRunning() : false);
            };
            
            /**
             * setActive(fActive)
             *
             * @this {Mouse}
             * @param {boolean} fActive is true if active, false if not
             */
            Mouse.prototype.setActive = function(fActive)
            {
                this.fActive = fActive;
                /*
                 * It's currently not possible to automatically lock the pointer outside the context of a user action
                 * (eg, a button or screen click), so this code is for naught.
                 *
                 *      if (this.aVideo.length) this.aVideo[0].notifyPointerActive(fActive);
                 *
                 * We now rely on similar code in clickMouse().
                 */
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {Mouse}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            Mouse.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data || !this.restore) {
                        this.reset();
                    } else {
                        if (!this.restore(data)) return false;
                    }
                    if (this.sAdapterType && !this.componentAdapter) {
                        var componentAdapter = null;
                        while ((componentAdapter = this.cmp.getComponentByType(this.sAdapterType, componentAdapter))) {
                            if (componentAdapter.attachMouse) {
                                this.componentAdapter = componentAdapter.attachMouse(this.idAdapter, this);
                                if (this.componentAdapter) {
                                    /*
                                     * It's possible that the SerialPort we've just attached to might want to bring us "up to speed"
                                     * on the adapter's state, which is why I envisioned a subsequent syncMouse() call.  And you would
                                     * want to do that as a separate call, not as part of attachMouse(), because componentAdapter
                                     * isn't set until attachMouse() returns.
                                     *
                                     * However, syncMouse() seems unnecessary, given that SerialPort initializes its MCR to an "inactive"
                                     * state, and even when restoring a previous state, if we've done our job properly, both SerialPort
                                     * and Mouse should be restored in sync, making any explicit attempt at sync'ing unnecessary (or so I hope).
                                     */
                                    // this.componentAdapter.syncMouse();
                                    break;
                                }
                            }
                        }
                        if (this.componentAdapter) {
                            this.aInput = [];       // ensure the input device array is empty before (re)filling it
                            for (var i = 0; i < this.aVideo.length; i++) {
                                var input = this.aVideo[i].getInput(this);
                                if (input) this.aInput.push(input);
                            }
                        } else {
                            Component.warning(this.id + ": " + this.sAdapterType + " " + this.idAdapter + " unavailable");
                        }
                    }
                    if (this.fActive) {
                        this.captureAll();
                    } else {
                        this.releaseAll();
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {Mouse}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            Mouse.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save? this.save() : true;
            };
            
            /**
             * reset()
             *
             * @this {Mouse}
             */
            Mouse.prototype.reset = function()
            {
                this.initState();
            };
            
            /**
             * save()
             *
             * This implements save support for the Mouse component.
             *
             * @this {Mouse}
             * @return {Object}
             */
            Mouse.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, this.saveState());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the Mouse component.
             *
             * @this {Mouse}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             */
            Mouse.prototype.restore = function(data)
            {
                return this.initState(data[0]);
            };
            
            /**
             * initState(data)
             *
             * @this {Mouse}
             * @param {Array} [data]
             * @return {boolean} true if successful, false if failure
             */
            Mouse.prototype.initState = function(data)
            {
                var i = 0;
                if (data === undefined) data = [false, -1, -1, 0, 0, false, false, 0];
                this.setActive(data[i++]);
                this.xMouse = data[i++];
                this.yMouse = data[i++];
                this.xDelta = data[i++];
                this.yDelta = data[i++];
                this.fButton1 = data[i++];      // FYI, we consider button1 to be the LEFT button
                this.fButton2 = data[i++];      // FYI, we consider button2 to be the RIGHT button
                this.bMCR = data[i];
                return true;
            };
            
            /**
             * saveState()
             *
             * @this {Mouse}
             * @return {Array}
             */
            Mouse.prototype.saveState = function()
            {
                var i = 0;
                var data = [];
                data[i++] = this.fActive;
                data[i++] = this.xMouse;
                data[i++] = this.yMouse;
                data[i++] = this.xDelta;
                data[i++] = this.yDelta;
                data[i++] = this.fButton1;
                data[i++] = this.fButton2;
                data[i] = this.bMCR;
                return data;
            };
            
            /**
             * notifyPointerLocked()
             *
             * @this {Mouse}
             * @param {boolean} fLocked
             */
            Mouse.prototype.notifyPointerLocked = function(fLocked)
            {
                this.fLocked = fLocked;
            };
            
            /**
             * captureAll()
             *
             * @this {Mouse}
             */
            Mouse.prototype.captureAll = function()
            {
                if (!this.fCaptured) {
                    for (var i = 0; i < this.aInput.length; i++) {
                        if (this.captureMouse(this.aInput[i])) this.fCaptured = true;
                    }
                }
            };
            
            /**
             * releaseAll()
             *
             * @this {Mouse}
             */
            Mouse.prototype.releaseAll = function()
            {
                if (this.fCaptured) {
                    for (var i = 0; i < this.aInput.length; i++) {
                        if (this.releaseMouse(this.aInput[i])) this.fCaptured = false;
                    }
                }
            };
            
            /**
             * captureMouse(control)
             *
             * NOTE: addEventListener() wasn't supported in Internet Explorer until IE9, but that's OK, because
             * IE9 is the oldest IE we support anyway (since versions prior to IE9 lack the necessary HTML5 support).
             *
             * @this {Mouse}
             * @param {Object} control from the HTML DOM (eg, the control for the simulated screen)
             * @return {boolean} true if event handlers were actually added, false if not
             */
            Mouse.prototype.captureMouse = function(control)
            {
                if (control) {
                    var mouse = this;
                    control.addEventListener(
                        'mousemove',
                        function onMouseMove(event) {
                            mouse.moveMouse(event);
                        },
                        false               // we'll specify false for the 'useCapture' parameter for now...
                    );
                    control.addEventListener(
                        'mousedown',
                        function onMouseDown(event) {
                            mouse.clickMouse(event.button, true);
                        },
                        false               // we'll specify false for the 'useCapture' parameter for now...
                    );
                    control.addEventListener(
                        'mouseup',
                        function onMouseUp(event) {
                            mouse.clickMouse(event.button, false);
                        },
                        false               // we'll specify false for the 'useCapture' parameter for now...
                    );
                    /*
                     * None of these tricks seemed to work for IE10, so I'm giving up hiding the browser's mouse pointer in IE for now.
                     *
                     *      control['style']['cursor'] = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjbQg61aAAAADUlEQVQYV2P4//8/IwAI/QL/+TZZdwAAAABJRU5ErkJggg=='), url('/versions/images/current/blank.cur'), none";
                     *
                     * Setting the cursor style to "none" may not be a standard, but it works in Safari, Firefox and Chrome, so that's pretty
                     * good for a non-standard!
                     *
                     * TODO: The reference to '/versions/images/current/blank.cur' is also problematic for anyone who might want
                     * to run this app from a different server, so think about that as well.
                     */
                    control['style']['cursor'] = "none";
                    return true;
                }
                return false;
            };
            
            /**
             * releaseMouse(control)
             *
             * TODO: Use removeEventListener() to clean up our handlers; since I'm currently using anonymous functions,
             * and since I'm not seeing any compelling reason to remove the handlers once they've been established, it's
             * less code to leave them in place.
             *
             * @this {Mouse}
             * @param {Object} control from the HTML DOM
             * @return {boolean} true if event handlers were actually released, false if not
             */
            Mouse.prototype.releaseMouse = function(control)
            {
                if (control) {
                    control['style']['cursor'] = "auto";
                }
                return false;
            };
            
            /**
             * moveMouse(event)
             *
             * MouseEvent objects contain, among other things, the following properties:
             *
             *      clientX
             *      clientY
             *
             * I've selected the above properties because they're widely supported, not because I need
             * client-area coordinates.  In fact, layerX and layerY are probably closer to what I really want,
             * but I don't think they're available in all browsers.  screenX and screenY would work as well.
             *
             * This is because all we care about are deltas.  We record clientX and clientY (as xMouse and yMouse)
             * merely to calculate xDelta and yDelta.
             *
             * @this {Mouse}
             * @param {Object} event object from a 'mousemove' event (specifically, a MouseEvent object)
             */
            Mouse.prototype.moveMouse = function(event)
            {
                if (this.isActive()) {
                    if (this.xMouse < 0 || this.yMouse < 0) {
                        this.xMouse = event.clientX;
                        this.yMouse = event.clientY;
                    }
                    if (this.fLocked) {
                        this.xDelta = event['movementX'] || event['mozMovementX'] || event['webkitMovementX'] || 0;
                        this.yDelta = event['movementY'] || event['mozMovementY'] || event['webkitMovementY'] || 0;
                    } else {
                        this.xDelta = event.clientX - this.xMouse;
                        this.yDelta = event.clientY - this.yMouse;
                    }
                    if (this.xDelta || this.yDelta) {
                        /*
                         * As sendPacket() indicates, any x and y coordinates we supply are for diagnostic purposes only.
                         * sendPacket() only cares about the xDelta and yDelta properties, which it then zeroes on completion.
                         */
                        this.sendPacket(null, event.clientX, event.clientY);
                    }
                    this.xMouse = event.clientX;
                    this.yMouse = event.clientY;
                }
            };
            
            /**
             * clickMouse(iButton, fDown)
             *
             * @this {Mouse}
             * @param {number} iButton is 0 for fButton1 (the LEFT button), 2 for fButton2 (the RIGHT button)
             * @param {boolean} fDown
             */
            Mouse.prototype.clickMouse = function(iButton, fDown)
            {
                if (this.isActive()) {
                    if (this.fLocked === false) {
                        /*
                         * If there's no support for automatic pointer locking in the Video component, then notifyPointerActive()
                         * will return false, and we will set fLocked to null, ensuring that we never attempt this again.
                         */
                        if (!this.aVideo.length || !this.aVideo[0].notifyPointerActive(true)) {
                            this.fLocked = null;
                        }
                    }
                    var sDiag = DEBUGGER? ("mouse button" + iButton + ' ' + (fDown? "dn" : "up")) : null;
                    switch (iButton) {
                    case 0:
                        if (this.fButton1 != fDown) {
                            this.fButton1 = fDown;
                            this.sendPacket(sDiag);
                        }
                        break;
                    case 2:
                        if (this.fButton2 != fDown) {
                            this.fButton2 = fDown;
                            this.sendPacket(sDiag);
                        }
                        break;
                    default:
                        break;
                    }
                }
            };
            
            /**
             * sendPacket(sDiag, xDiag, yDiag)
             *
             * If we're called, something changed.
             *
             * Let's review the 3-byte packet format:
             *
             *              D7  D6  D5  D4  D3  D2  D1  D0
             *      Byte 1  X   1   LB  RB  Y7  Y6  X7  X6
             *      Byte 2  X   0   X5  X4  X3  X2  X1  X0
             *      Byte 3  X   0   Y5  Y4  Y3  Y2  Y1  Y0
             *
             * @this {Mouse}
             * @param {string|null} [sDiag] diagnostic message
             * @param {number} [xDiag] original x-coordinate (optional; for diagnostic use only)
             * @param {number} [yDiag] original y-coordinate (optional; for diagnostic use only)
             */
            Mouse.prototype.sendPacket = function(sDiag, xDiag, yDiag)
            {
                var b1 = 0x40 | (this.fButton1? 0x20 : 0) | (this.fButton2? 0x10 : 0) | ((this.yDelta & 0xC0) >> 4) | ((this.xDelta & 0xC0) >> 6);
                var b2 = this.xDelta & 0x3F;
                var b3 = this.yDelta & 0x3F;
                if (this.messageEnabled(Messages.SERIAL)) {
                    this.printMessage((sDiag? (sDiag + ": ") : "") + (yDiag !== undefined? ("mouse (" + xDiag + "," + yDiag + "): ") : "") + "serial packet [" + str.toHexByte(b1) + "," + str.toHexByte(b2) + "," + str.toHexByte(b3) + "]", 0, true);
                }
                this.componentAdapter.sendRBR([b1, b2, b3]);
                this.xDelta = this.yDelta = 0;
            };
            
            /**
             * notifyMCR(bMCR)
             *
             * The SerialPort notifies us whenever SerialPort.MCR.DTR or SerialPort.MCR.RTS changes.
             *
             * During normal serial mouse operation, both RTS and DTR must be "positive".
             *
             * Setting RTS "negative" for 100ms resets the mouse.  Toggling DTR requests an identification byte (ID_SERIAL).
             *
             * NOTES: The above 3rd-party information notwithstanding, I've observed that Windows v1.01 initially writes 0x01
             * to the MCR (DTR on, RTS off), spins in a loop that reads the RBR (probably to avoid a bogus identification byte
             * sitting in the RBR), and then writes 0x0B to the MCR (DTR on, RTS on).  This last step is consistent with making
             * the mouse "active", but it is NOT consistent with "toggling DTR", so I conclude that a reset is ALSO sufficient
             * for sending the identification byte.  Right or wrong, this gets the ball rolling for Windows v1.01.
             *
             * @this {Mouse}
             * @param {number} bMCR
             */
            Mouse.prototype.notifyMCR = function(bMCR)
            {
                var fActive = ((bMCR & (SerialPort.MCR.DTR | SerialPort.MCR.RTS)) == (SerialPort.MCR.DTR | SerialPort.MCR.RTS));
                if (fActive) {
                    if (!this.fActive) {
                        var fIdentify = false;
                        if (!(this.bMCR & SerialPort.MCR.RTS)) {
                            this.reset();
                            this.printMessage("serial mouse reset");
                            fIdentify = true;
                        }
                        if (!(this.bMCR & SerialPort.MCR.DTR)) {
                            this.printMessage("serial mouse ID requested");
                            fIdentify = true;
                        }
                        if (fIdentify) {
                            /*
                             * HEADS UP: Everything I'd read about the (original) Microsoft Serial Mouse "reset" protocol says
                             * that the device sends a single byte (0x4D aka 'M').  It's not surprising to think that newer mice
                             * might send additional bytes, but you would think that newer mouse drivers (eg, MOUSE.COM v8.20)
                             * would always be able to deal with mice that sent only one byte.
                             *
                             * You would be wrong.  On an INT 0x33 reset, the v8.20 driver looks for an 'M', then it waits for
                             * another byte (0x42 aka 'B').  If it doesn't receive a 'B', it will accept another 'M'.  But if it
                             * receives something else (or nothing at all), it will spend a long time waiting for it, and then
                             * return an error.
                             *
                             * It's entirely possible that I've done something wrong and inadvertently "tricked" MOUSE.COM into
                             * using the wrong detection logic.  But given the other problems I've seen in MOUSE.COM v8.20, including
                             * its failure to properly terminate-and-stay-resident when its initial INT 0x33 reset returns an error,
                             * I'm not in the mood to give it the benefit of the doubt.
                             *
                             * So, anyway, I solve the terminate-and-stay-resident bug in MOUSE.COM v8.20 by feeding it *two* ID_SERIAL
                             * bytes on a reset.  This doesn't seem to adversely affect serial mouse emulation for Windows 1.01, so
                             * I'm calling this good enough for now.
                             */
                            this.componentAdapter.sendRBR([Mouse.ID_SERIAL, Mouse.ID_SERIAL]);
                            this.printMessage("serial mouse ID sent");
                        }
                        this.captureAll();
                        this.setActive(fActive);
                    }
                } else {
                    if (this.fActive) {
                        /*
                         * Although this would seem nice (ie, for the Windows v1.01 mouse driver to turn RTS off when its mouse
                         * driver shuts down and Windows exits, since it DID turn RTS on), that doesn't appear to actually happen.
                         * At the very least, Windows will have (re)masked the serial port's IRQ, so what does it matter?  Not much,
                         * I just would have preferred that fActive properly reflect whether we should continue dispatching mouse
                         * events, displaying MOUSE messages, etc.
                         *
                         * We could ask the ChipSet component to notify the SerialPort component whenever its IRQ is masked/unmasked,
                         * and then have the SerialPort pass that notification on to us, but I'm assuming that in the real world,
                         * a mouse device that's still powered may still send event data to the serial port, and if there was software
                         * polling the serial port, it might expect to see that data.  Unlikely, but not impossible.
                         */
                        this.printMessage("serial mouse inactive");
                        this.releaseAll();
                        this.setActive(fActive);
                    }
                }
                this.bMCR = bMCR;
            };
            
            /**
             * Mouse.init()
             *
             * This function operates on every HTML element of class "mouse", extracting the
             * JSON-encoded parameters for the Mouse constructor from the element's "data-value"
             * attribute, invoking the constructor to create a Mouse component, and then binding
             * any associated HTML controls to the new component.
             */
            Mouse.init = function()
            {
                var aeMouse = Component.getElementsByClass(window.document, PCJSCLASS, "mouse");
                for (var iMouse = 0; iMouse < aeMouse.length; iMouse++) {
                    var eMouse = aeMouse[iMouse];
                    var parmsMouse = Component.getComponentParms(eMouse);
                    var mouse = new Mouse(parmsMouse);
                    Component.bindComponentControls(mouse, eMouse, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every Mouse module on the page.
             */
            web.onInit(Mouse.init);
            
            if (typeof module !== 'undefined') module.exports = Mouse;
            
          • nodebugger.js
            /**
             * @fileoverview Compile-time definitions for Debugger-less configurations.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-08
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /*
             * WARNING: DEBUGGER needs to accurately reflect whether or not the Debugger component is (or will be) loaded.
             * In the compiled case, we rely on the Closure Compiler to override DEBUGGER as appropriate.  When it's *false*,
             * nearly all of debugger.js will be conditionally removed by the compiler, reducing it to little more than a
             * "type skeleton", which also solves some type-related warnings we would otherwise have if we tried to remove
             * debugger.js from the compilation process altogether.
             *
             * However, when we're in "development mode" and running uncompiled code in debugger-less configurations,
             * I would still like to skip loading debugger.js altogether.  To do that, we must arrange for this additional file,
             * nodebugger.js, to be loaded as early as possible, which explicitly UPDATES the value of DEBUGGER to false.
             */
            var DEBUGGER = false;
            
          • panel.js
            /**
             * @fileoverview Implements the PCjs Panel component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-19
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var usr         = require("../../shared/lib/usrlib");
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Bus         = require("./bus");
                var Memory      = require("./memory");
                var X86         = require("./x86");
            }
            
            /**
             * Panel(parmsPanel)
             *
             * The Panel component has no required (parmsPanel) properties.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsPanel
             */
            function Panel(parmsPanel)
            {
                Component.call(this, "Panel", parmsPanel, Panel);
            
                this.canvas = null;
                this.lockMouse = -1;
                this.fMouseDown = false;
                this.xMouse = this.yMouse = -1;
                if (BACKTRACK) {
                    this.busInfo = null;
                    this.fBackTrack = false;
                }
            }
            
            Component.subclass(Panel);
            
            /*
             * The "Live" canvases that we create internally have the following fixed dimensions, to make drawing
             * simpler.  We then render, via drawImage(), these canvases onto the supplied canvas, which will automatically
             * stretch the live images to fit.
             */
            Panel.LIVECANVAS = {
                CX:         1280,
                CY:         720,
                FONT:       {
                    CY:     18,
                    FACE:   "Monaco, Lucida Console, Courier New"
                }
            };
            
            Panel.LIVEMEM = {
                CX: (Panel.LIVECANVAS.CX * 3) >> 2,
                CY: (Panel.LIVECANVAS.CY)
            };
            
            Panel.LIVEREGS = {
                CX:     (Panel.LIVECANVAS.CX - Panel.LIVEMEM.CX),
                CY:     (Panel.LIVECANVAS.CY),
                COLOR:  "black"
            };
            
            Panel.LIVEDUMP = {
                CX: (Panel.LIVECANVAS.CX - Panel.LIVEMEM.CX),
                CY: (Panel.LIVECANVAS.CY >> 1)
            };
            
            /*
             * findRegions() records block numbers in bits 0-14, a BackTrack "mod" bit in bit 15, and the block type at bit 16.
             */
            Panel.REGION = {
                MASK:           0x7fff,
                BTMOD_SHIFT:    15,
                TYPE_SHIFT:     16
            };
            
            /**
             * Color(r, g, b, a)
             *
             * @constructor
             * @param {number} [r]
             * @param {number} [g]
             * @param {number} [b]
             * @param {number} [a]
             */
            function Color(r, g, b, a)
            {
                this.rgb = [r, g, b, a];
                this.sValue = null;
                if (r === undefined) this.randomize();
            }
            
            /**
             * getRandom(nLimit)
             *
             * @this {Color}
             * @param {number} [nLimit]
             */
            Color.prototype.getRandom = function(nLimit)
            {
                return (Math.random() * (nLimit || 0x100)) | 0;
            };
            
            /**
             * randomize()
             *
             * @this {Color}
             */
            Color.prototype.randomize = function()
            {
                this.rgb[0] = this.getRandom(); this.rgb[1] = this.getRandom(); this.rgb[2] = this.getRandom(); this.rgb[3] = 0xff;
                this.sValue = null;
            };
            
            /**
             * toString()
             *
             * @this {Color}
             * @return {string}
             */
            Color.prototype.toString = function()
            {
                if (!this.sValue) this.sValue = '#' + str.toHex(this.rgb[0], 2) + str.toHex(this.rgb[1], 2) + str.toHex(this.rgb[2], 2);
                return this.sValue;
            };
            
            /**
             * Rectangle(x, y, cx, cy)
             *
             * @constructor
             * @param {number} x
             * @param {number} y
             * @param {number} cx
             * @param {number} cy
             */
            function Rectangle(x, y, cx, cy)
            {
                this.x = x;
                this.y = y;
                this.cx = cx;
                this.cy = cy;
            }
            
            /**
             * contains(x, y)
             *
             * @param {number} x
             * @param {number} y
             * @return {boolean} true if (x,y) lies within the rectangle, false if not
             */
            Rectangle.prototype.contains = function(x, y)
            {
                return (x >= this.x && x < this.x + this.cx && y >= this.y && y < this.y + this.cy);
            };
            
            /**
             * subDivide(units, unitsTotal, fHorizontal)
             *
             * Return a new rectangle that is a subset of the current rectangle, based on the ratio of
             * units to unitsTotal, and then update the dimensions of the current rectangle.  Whether the
             * original rectangle is divided horizontally or vertically is entirely arbitrary; currently,
             * the criteria is horizontal if the ratio is 1/4 or more, vertical otherwise.
             *
             * @this {Rectangle}
             * @param {number} units
             * @param {number} unitsTotal
             * @param {boolean} [fHorizontal]
             * @return {Rectangle}
             */
            Rectangle.prototype.subDivide = function(units, unitsTotal, fHorizontal)
            {
                var rect;
                if (fHorizontal === undefined) {
                    fHorizontal = units >= (unitsTotal >> 2);
                }
                if (fHorizontal) {
                    rect = new Rectangle(this.x, this.y, this.cx, ((this.cy * units) / unitsTotal) | 0);
                    this.y += rect.cy;
                    this.cy -= rect.cy;
                    Component.assert(this.cy >= 0);
                } else {
                    rect = new Rectangle(this.x, this.y, ((this.cx * units) / unitsTotal) | 0, this.cy);
                    this.x += rect.cx;
                    this.cx -= rect.cx;
                    Component.assert(this.cx >= 0);
                }
                return rect;
            };
            
            /**
             * drawWith(context, color)
             *
             * @param {Object} context
             * @param {Color|string} [color]
             */
            Rectangle.prototype.drawWith = function(context, color)
            {
                if (!color) color = new Color();
                context.strokeStyle = "black";
                context.strokeRect(this.x, this.y, this.cx, this.cy);
                context.fillStyle = (typeof color == "string"? color : color.toString());
                context.fillRect(this.x, this.y, this.cx, this.cy);
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * Most panel layouts don't have bindings of their own, so we pass along all binding requests to the
             * Computer, CPU, Keyboard and Debugger components first.  The order shouldn't matter, since any component
             * that doesn't recognize the specified binding should simply ignore it.
             *
             * @this {Panel}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "reset")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            Panel.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                if (this.cmp && this.cmp.setBinding(sHTMLType, sBinding, control)) return true;
                if (this.cpu && this.cpu.setBinding(sHTMLType, sBinding, control)) return true;
                if (this.kbd && this.kbd.setBinding(sHTMLType, sBinding, control)) return true;
                if (DEBUGGER && this.dbg && this.dbg.setBinding(sHTMLType, sBinding, control)) return true;
            
                if (!this.canvas && sHTMLType == "canvas") {
            
                    var panel = this;
                    var fPanel = false;
            
                    if (BACKTRACK && sBinding == "btpanel") {
                        this.fBackTrack = fPanel = true;
                    }
            
                    if (fPanel) {
                        this.canvas = control;
                        this.context = this.canvas.getContext("2d");
            
                        /*
                         * Employ the same gross onresize() hack for IE9/IE10 that we had to use for the Video canvas
                         */
                        if (web.getUserAgent().indexOf("MSIE") >= 0) {
                            this.canvas.onresize = function(canvas, cx, cy) {
                                return function onResizeVideo() {
                                    canvas.style.height = (((canvas.clientWidth * cy) / cx) | 0) + "px";
                                };
                            }(this.canvas, this.canvas.width, this.canvas.height);
                            this.canvas.onresize();
                        }
            
                        this.xMem = this.yMem = 0;
                        this.cxMem = ((this.canvas.width * Panel.LIVEMEM.CX) / Panel.LIVECANVAS.CX) | 0;
                        this.cyMem = this.canvas.height;
            
                        this.xReg = this.cxMem;
                        this.yReg = 0;
                        this.cxReg = this.canvas.width - this.cxMem;
                        this.cyReg = this.canvas.height;
            
                        this.xDump = this.xReg;
                        this.yDump = ((this.canvas.height * (Panel.LIVEREGS.CY - Panel.LIVEDUMP.CY)) / Panel.LIVECANVAS.CY) | 0;
                        this.cxDump = this.cxReg;
                        this.cyDump = ((this.canvas.height * Panel.LIVEDUMP.CY) / Panel.LIVECANVAS.CY) | 0;
            
                        this.canvasLiveMem = window.document.createElement("canvas");
                        this.canvasLiveMem.width = Panel.LIVEMEM.CX;
                        this.canvasLiveMem.height = Panel.LIVEMEM.CY;
                        this.contextLiveMem = this.canvasLiveMem.getContext("2d");
                        this.imageLiveMem = this.contextLiveMem.createImageData(this.canvasLiveMem.width, this.canvasLiveMem.height);
            
                        this.canvasLiveRegs = window.document.createElement("canvas");
                        this.canvasLiveRegs.width = Panel.LIVEREGS.CX;
                        this.canvasLiveRegs.height = Panel.LIVEREGS.CY;
                        this.contextLiveRegs = this.canvasLiveRegs.getContext("2d");
            
                        this.canvas.addEventListener(
                            'mousemove',
                            function onMouseMove(event) {
                                panel.moveMouse(event);
                            },
                            false               // we'll specify false for the 'useCapture' parameter for now...
                        );
                        this.canvas.addEventListener(
                            'mousedown',
                            function onMouseDown(event) {
                                panel.clickMouse(event, true);
                            },
                            false               // we'll specify false for the 'useCapture' parameter for now...
                        );
                        this.canvas.addEventListener(
                            'mouseup',
                            function onMouseUp(event) {
                                panel.clickMouse(event, false);
                            },
                            false               // we'll specify false for the 'useCapture' parameter for now...
                        );
            
                        this.fRedraw = true;
                        return true;
                    }
                }
                return this.parent.setBinding.call(this, sHTMLType, sBinding, control);
            };
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {Panel}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            Panel.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.cmp = cmp;
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.kbd = cmp.getComponentByType("Keyboard");
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {Panel}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            Panel.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) Panel.init();
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {Panel}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            Panel.prototype.powerDown = function(fSave, fShutdown)
            {
                return true;
            };
            
            /**
             * clickMouse(event, fDown)
             *
             * @this {Panel}
             * @param {Object} event object from a 'mousedown' or 'mouseup' event
             * @param {boolean} fDown
             */
            Panel.prototype.clickMouse = function(event, fDown)
            {
                /*
                 * event.button is 0 for the LEFT button and 2 for the RIGHT button
                 */
                if (!event.button) {
                    this.lockMouse = fDown? 0 : -1;
                    this.fMouseDown = fDown;
                    this.updateMouse(event, fDown);
                }
            };
            
            /**
             * moveMouse(event)
             *
             * @this {Panel}
             * @param {Object} event object from a 'mousemove' event
             */
            Panel.prototype.moveMouse = function(event)
            {
                this.updateMouse(event);
            };
            
            /**
             * updateMouse(event, fDown)
             *
             * MouseEvent objects contain, among other things, the following properties:
             *
             *      clientX
             *      clientY
             *
             * I've selected the above properties because they're widely supported, not because I need
             * client-area coordinates.  In fact, layerX and layerY are probably closer to what I really want,
             * but I don't think they're available in all browsers.  screenX and screenY would work as well.
             *
             * @this {Panel}
             * @param {Object} event object from a mouse event (specifically, a MouseEvent object)
             * @param {boolean} [fDown] is true or false if this was a click event, otherwise it's just a move event
             */
            Panel.prototype.updateMouse = function(event, fDown)
            {
                /*
                 * Due to the responsive nature of our pages, the displayed size of the canvas may be smaller than the
                 * allocated size, and the coordinates we receive from mouse events are based on the currently displayed size.
                 */
                var xScale = Panel.LIVECANVAS.CX / this.canvas.offsetWidth;
                var yScale = Panel.LIVECANVAS.CY / this.canvas.offsetHeight;
            
                var rect = this.canvas.getBoundingClientRect();
                var x = ((event.clientX - rect.left) * xScale) | 0;
                var y = ((event.clientY - rect.top) * yScale) | 0;
            
                if (fDown == null) {
                    if (!this.lockMouse) {
                        this.lockMouse = Math.abs(this.xMouse - x) > Math.abs(this.yMouse - y)? 1 : 2;
                    }
                    if (this.lockMouse == 1) {
                        y = this.yMouse;
                    } else if (this.lockMouse == 2) {
                        x = this.xMouse;
                    }
                }
            
                this.xMouse = x;
                this.yMouse = y;
            
                if (MAXDEBUG) this.log("Panel.moveMouse(" + x + "," + y + ")");
            
                if (x >= 0 && x < Panel.LIVECANVAS.CX && y >= 0 && y < Panel.LIVECANVAS.CY) {
                    /*
                     * Convert the mouse position into the corresponding memory address, assuming it's over the live memory area
                     */
                    var addr = this.findAddress(x, y);
                    if (addr !== X86.ADDR_INVALID) {
                        addr &= ~0xf;
                        if (addr != this.addrDumpLast) {
                            this.dumpMemory(addr, true);
                            this.addrDumpLast = addr;
                        }
                    }
                }
            };
            
            /**
             * findAddress(x, y)
             *
             * @this {Panel}
             * @param {number} x
             * @param {number} y
             * @return {number} address corresponding to (x,y) canvas coordinates, or ADDR_INVALID if none
             */
            Panel.prototype.findAddress = function(x, y)
            {
                if (x < Panel.LIVEMEM.CX && this.busInfo && this.busInfo.aRects) {
                    var i, rect;
                    for (i = 0; i < this.busInfo.aRects.length; i++) {
                        rect = this.busInfo.aRects[i];
                        if (rect.contains(x, y)) {
                            x -= rect.x;
                            y -= rect.y;
                            var region = this.busInfo.aRegions[i];
                            var iBlock = usr.getBitField(Bus.BlockInfo.num, this.busInfo.aBlocks[region.iBlock]);
                            var addr = iBlock * this.bus.nBlockSize;
                            var addrLimit = (iBlock + region.cBlocks) * this.bus.nBlockSize - 1;
            
                            /*
                             * If you want memory to be arranged "vertically" instead of "horizontally", do this:
                             *
                             *      if (x > 0) addr += rect.cy * (x - 1) * this.ratioMemoryToPixels;
                             *      addr += (y * this.ratioMemoryToPixels);
                             */
                            if (y > 0) addr += rect.cx * (y - 1) * this.ratioMemoryToPixels;
                            addr += (x * this.ratioMemoryToPixels);
            
                            addr |= 0;
                            if (addr > addrLimit) addr = addrLimit;
                            if (MAXDEBUG) this.log("Panel.findAddress(" + x + "," + y + ") found type " + Memory.TYPE.NAMES[region.type] + ", address %" + str.toHex(addr));
                            return addr;
                        }
                    }
                }
                return X86.ADDR_INVALID;
            };
            
            /**
             * updateAnimation()
             *
             * If the given Control Panel contains a canvas requiring animation (eg, "btpanel"), then this is where that happens.
             *
             * @this {Panel}
             */
            Panel.prototype.updateAnimation = function()
            {
                if (this.fRedraw) {
            
                    this.initPen(10, Panel.LIVECANVAS.FONT.CY, this.canvasLiveMem, this.contextLiveMem, this.canvas.style.color);
            
                    if (this.fBackTrack) {
                        if (DEBUG) this.log("begin scanMemory()");
                        this.busInfo = this.bus.scanMemory(this.busInfo);
                        /*
                         * Calculate the pixel-to-memory-address ratio
                         */
                        this.ratioMemoryToPixels = (this.busInfo.cBlocks * this.bus.nBlockSize) / (Panel.LIVEMEM.CX * Panel.LIVEMEM.CY);
                        /*
                         * Update the BusInfo object with region information (cRegions and aRegions); return true if region
                         * information has changed since the last call.
                         */
                        if (this.findRegions()) {
                            /*
                             * For each region, I choose a slice of the LiveMem canvas and record the corresponding rectangle
                             * within an aRects array (parallel to the aRegions array) in the BusInfo object.
                             *
                             * I don't need a sophisticated Treemap algorithm, because at this level, the data is not hierarchical.
                             * subDivide() makes a simple horizontal or vertical slicing decision based on the ratio of region blocks
                             * to remaining blocks.
                             */
                            var i, rect;
                            var rectAvail = new Rectangle(0, 0, this.canvasLiveMem.width, this.canvasLiveMem.height);
                            this.busInfo.aRects = [];
                            var cBlocksRemaining = this.busInfo.cBlocks;
            
                            for (i = 0; i < this.busInfo.cRegions; i++) {
                                var cBlocksRegion = this.busInfo.aRegions[i].cBlocks;
                                this.busInfo.aRects.push(rect = rectAvail.subDivide(cBlocksRegion, cBlocksRemaining, !i));
                                if (MAXDEBUG) this.log("region " + i + " rectangle: (" + rect.x + "," + rect.y + " " + rect.cx + "," + rect.cy + ")");
                                cBlocksRemaining -= cBlocksRegion;
                            }
            
                            /*
                             * Assert that not only did all the specified regions account for all the specified blocks, but also that
                             * the series of subDivide() calls exhausted the original rectangle to one of either zero width or zero height.
                             */
                            this.assert(!cBlocksRemaining && (!rectAvail.cx || !rectAvail.cy));
            
                            /*
                             * Now draw all the rectangles produced by the series of subDivide() calls.
                             */
                            for (i = 0; i < this.busInfo.aRects.length; i++) {
                                var region = this.busInfo.aRegions[i];
                                rect = this.busInfo.aRects[i];
                                rect.drawWith(this.contextLiveMem, Memory.TYPE.COLORS[region.type]);
                                this.centerPen(rect);
                                this.centerText(Memory.TYPE.NAMES[region.type] + " (" + (((region.cBlocks * this.bus.nBlockSize) / 1024) | 0) + "Kb)");
                            }
                        }
                        if (DEBUG) this.log("end scanMemory(): total bytes: " + this.busInfo.cbTotal + ", total blocks: " + this.busInfo.cBlocks + ", total regions: " + this.busInfo.cRegions);
                    } else {
                        this.drawText("This space intentionally left blank");
                    }
                    this.context.drawImage(this.canvasLiveMem, 0, 0, this.canvasLiveMem.width, this.canvasLiveMem.height, this.xMem, this.yMem, this.cxMem, this.cyMem);
                    this.fRedraw = false;
                }
            };
            
            /**
             * updateStatus()
             *
             * Update function for Control Panels containing DOM elements with low-frequencyxt display requirements.
             *
             * For the time being, the X86CPU component has its own updateStatus() handler, and displays all CPU registers itself.
             *
             * @this {Panel}
             */
            Panel.prototype.updateStatus = function()
            {
                if (this.canvas) {
                    this.dumpRegisters();
                }
            };
            
            /**
             * findRegions()
             *
             * This takes the BusInfo object produced by scanMemory() and adds the following:
             *
             *      cRegions:   number of contiguous memory regions
             *      aRegions:   array of aBlocks [index, count, type] objects
             *
             * It calls addRegion() for each discrete region (set of contiguous blocks with the same type) that it finds.
             *
             * @this {Panel}
             * @return {boolean} true if current region checksum differed from previous checksum (ie, one or more regions changed)
             */
            Panel.prototype.findRegions = function()
            {
                var checksum = 0;
                this.busInfo.cRegions = 0;
                if (!this.busInfo.aRegions) this.busInfo.aRegions = [];
            
                var typeRegion = -1, iBlockRegion = 0, addrRegion = 0, nBlockPrev = -1;
            
                for (var iBlock = 0; iBlock < this.busInfo.cBlocks; iBlock++) {
                    var blockInfo = this.busInfo.aBlocks[iBlock];
                    var typeBlock = usr.getBitField(Bus.BlockInfo.type, blockInfo);
                    var nBlockCurr = usr.getBitField(Bus.BlockInfo.num, blockInfo);
                    if (typeBlock != typeRegion || nBlockCurr != nBlockPrev + 1) {
                        var cBlocks = iBlock - iBlockRegion;
                        if (cBlocks) {
                            checksum += this.addRegion(addrRegion, iBlockRegion, cBlocks, typeRegion);
                        }
                        typeRegion = typeBlock;
                        iBlockRegion = iBlock;
                        addrRegion = nBlockCurr << this.bus.nBlockShift;
                    }
                    nBlockPrev = nBlockCurr;
                }
            
                checksum += this.addRegion(addrRegion, iBlockRegion, iBlock - iBlockRegion, typeRegion);
            
                var fChanged = (this.busInfo.checksumRegions != checksum);
                this.busInfo.checksumRegions = checksum;
                return fChanged;
            };
            
            /**
             * Region object definition
             *
             *  iBlock:     starting block number
             *  cBlocks:    number of blocks spanned by region
             *  type:       type of all blocks in the region (see Memory.TYPE.*)
             *
             * @typedef {{
             *  iBlock:     number,
             *  cBlocks:    number,
             *  type:       number
             * }}
             */
            var Region;
            
            /**
             * addRegion(addr, iBlock, cBlocks, type)
             *
             * @this {Panel}
             * @param {number} addr
             * @param {number} iBlock
             * @param {number} cBlocks
             * @param {number} type
             * @return {number} bitfield containing the above values (used for checksum)
             */
            Panel.prototype.addRegion = function(addr, iBlock, cBlocks, type)
            {
                if (DEBUG) this.log("region " + this.busInfo.cRegions + " (addr " + str.toHexLong(addr) + ", type " + Memory.TYPE.NAMES[type] + ") contains " + cBlocks + " blocks");
                this.busInfo.aRegions[this.busInfo.cRegions++] = {iBlock: iBlock, cBlocks: cBlocks, type: type};
                return usr.initBitFields(Bus.BlockInfo, iBlock, cBlocks, 0, type);
            };
            
            /**
             * dumpRegisters()
             *
             * Updates the live register portion of the panel.
             *
             * @this {Panel}
             */
            Panel.prototype.dumpRegisters = function()
            {
                if (this.context && this.canvasLiveRegs && this.contextLiveRegs) {
            
                    var x = 0, y = 0, cx = this.canvasLiveRegs.width, cy = this.canvasLiveRegs.height;
            
                    this.contextLiveRegs.fillStyle = Panel.LIVEREGS.COLOR;
                    this.contextLiveRegs.fillRect(x, y, cx, cy);
            
                    this.initPen(x + 10, y + Panel.LIVECANVAS.FONT.CY, this.canvasLiveRegs, this.contextLiveRegs, this.canvas.style.color);
                    this.initCols(3);
                    this.drawText("CPU");
                    this.drawText("Target");
                    this.drawText("Current");
                    this.skipLines();
                    this.drawText(this.cpu.model);
                    this.drawText(this.cpu.getSpeedTarget());
                    this.drawText(this.cpu.getSpeedCurrent());
                    this.skipLines(2);
                    this.initCols(8);
                    this.initNumberFormat(16, this.cpu.model < X86.MODEL_80386? 4 : 8);
                    this.drawText("AX", this.cpu.regEAX, 2);
                    this.drawText("DS", this.cpu.getDS(), 0, 1);
                    this.drawText("DX", this.cpu.regEDX, 2);
                    this.drawText("SI", this.cpu.regESI, 0, 1.5);
                    this.drawText("BX", this.cpu.regEBX, 2);
                    this.drawText("ES", this.cpu.getES(), 0, 1);
                    this.drawText("CX", this.cpu.regECX, 2);
                    this.drawText("DI", this.cpu.regEDI, 0, 1.5);
                    this.drawText("CS", this.cpu.getCS(), 2);
                    this.drawText("SS", this.cpu.getSS(), 0, 1);
                    this.drawText("IP", this.cpu.getIP(), 2);
                    this.drawText("SP", this.cpu.getSP(), 0, 1.5);
                    var regPS;
                    this.drawText("PS", regPS = this.cpu.getPS(), 2);
                    this.drawText("BP", this.cpu.regEBP, 0, 1.5);
                    if (this.cpu.model >= X86.MODEL_80386) {
                        this.drawText("FS", this.cpu.getFS(), 2);
                        this.drawText("CR0", this.cpu.regCR0, 0, 1);
                        this.drawText("GS", this.cpu.getGS(), 2);
                        this.drawText("CR3", this.cpu.regCR3, 0, 1.5);
                    }
                    this.initCols(9);
                    this.drawText("V" + ((regPS & X86.PS.OF)? 1 : 0));
                    this.drawText("D" + ((regPS & X86.PS.DF)? 1 : 0));
                    this.drawText("I" + ((regPS & X86.PS.IF)? 1 : 0));
                    this.drawText("T" + ((regPS & X86.PS.TF)? 1 : 0));
                    this.drawText("S" + ((regPS & X86.PS.SF)? 1 : 0));
                    this.drawText("Z" + ((regPS & X86.PS.ZF)? 1 : 0));
                    this.drawText("A" + ((regPS & X86.PS.AF)? 1 : 0));
                    this.drawText("P" + ((regPS & X86.PS.PF)? 1 : 0));
                    this.drawText("C" + ((regPS & X86.PS.CF)? 1 : 0), 0, 2);
            
                    this.dumpMemory(this.addrDumpLast);
            
                    this.context.drawImage(this.canvasLiveRegs, x, y, cx, cy, this.xReg, this.yReg, this.cxReg, this.cyReg);
                }
            };
            
            /**
             * dumpMemory(addr, fDraw)
             *
             * @this {Panel}
             * @param {number} addr
             * @param {boolean} [fDraw]
             */
            Panel.prototype.dumpMemory = function(addr, fDraw)
            {
                if (this.context && this.canvasLiveRegs && this.contextLiveRegs) {
            
                    var x = 0, y = Panel.LIVEREGS.CY - Panel.LIVEDUMP.CY, cx = this.canvasLiveRegs.width, cy = Panel.LIVEDUMP.CY;
            
                    this.contextLiveRegs.fillStyle = Panel.LIVEREGS.COLOR;
                    this.contextLiveRegs.fillRect(x, y, cx, cy);
            
                    this.initPen(x + 10, y + Panel.LIVECANVAS.FONT.CY, this.canvasLiveRegs, this.contextLiveRegs, this.canvas.style.color);
                    this.initCols(24);
                    if (addr == null) {
                        this.drawText("Mouse over memory to dump");
                    } else {
                        this.drawText(str.toHexLong(addr), null, 0, 1);
                        for (var iLine = 1; iLine <= 16; iLine++) {
                            var sChars = "";
                            for (var iCol = 1; iCol <= 8; iCol++) {
                                var b = this.bus.getByteDirect(addr++);
                                this.drawText(str.toHex(b, 2), null, 1);
                                sChars += (b >= 32 && b < 128? String.fromCharCode(b) : ".");
                            }
                            this.drawText(sChars, null, 0, 1);
                        }
                    }
            
                    if (fDraw) this.context.drawImage(this.canvasLiveRegs, x, y, cx, cy, this.xDump, this.yDump, this.cxDump, this.cyDump);
                }
            };
            
            /**
             * initPen(xLeft, yTop, canvas, context, sColor, cyFont, sFontFace)
             *
             * @this {Panel}
             * @param {number} xLeft
             * @param {number} yTop
             * @param {HTMLCanvasElement} [canvas]
             * @param {Object} [context]
             * @param {string} [sColor]
             * @param {number} [cyFont]
             * @param {string} [sFontFace]
             */
            Panel.prototype.initPen = function(xLeft, yTop, canvas, context, sColor, cyFont, sFontFace)
            {
                this.setPen(this.xLeftMargin = xLeft, yTop);
                this.heightText = this.heightDefault = cyFont || Panel.LIVECANVAS.FONT.CY;
                if (!sFontFace) sFontFace = this.fontDefault || (this.heightDefault + "px " + Panel.LIVECANVAS.FONT.FACE);
                this.fontText = this.fontDefault = sFontFace;
                if (canvas) {
                    this.canvasText = canvas;
                }
                if (context) {
                    this.contextText = context;
                    this.colorText = sColor || "white";
                }
            };
            
            /**
             * setPen(x, y)
             *
             * @this {Panel}
             * @param {number} x
             * @param {number} y
             */
            Panel.prototype.setPen = function(x, y)
            {
                this.xText = x;
                this.yText = y;
            };
            
            /**
             * centerPen(rect)
             *
             * @this {Panel}
             * @param {Rectangle} rect
             */
            Panel.prototype.centerPen = function(rect)
            {
                this.fontText = this.fontDefault;
                this.heightText = this.heightDefault;
                var x = rect.x + (rect.cx >> 1);
                var y = rect.y + (rect.cy >> 1);
                var maxText = rect.cy;
                if (rect.cx < rect.cy) {
                    maxText = rect.cx;
                    this.fVerticalText = true;
                    this.contextText.save();
                    this.contextText.translate(x, y);
                    this.contextText.rotate(-Math.PI/2);
                    x = y = 0;
                }
                if (maxText < this.heightText) {
                    this.heightText = maxText;
                    this.fontText = this.heightText + "px " + Panel.LIVECANVAS.FONT.FACE;
                }
                this.setPen(x, y);
            };
            
            /**
             * initCols(nCols)
             *
             * @this {Panel}
             * @param {number} nCols
             */
            Panel.prototype.initCols = function(nCols)
            {
                this.cxColumn = (this.canvasText.width / nCols) | 0;
            };
            
            /**
             * skipCols(nCols)
             *
             * @this {Panel}
             * @param {number} nCols
             */
            Panel.prototype.skipCols = function(nCols)
            {
                this.xText += this.cxColumn * nCols;
            };
            
            /**
             * skipLines(nLines)
             *
             * @this {Panel}
             * @param {number} [nLines]
             */
            Panel.prototype.skipLines = function(nLines)
            {
                this.xText = this.xLeftMargin;
                this.yText += (this.heightText + 2) * (nLines || 1);
            };
            
            /**
             * initNumberFormat(nBase, nDigits)
             *
             * @this {Panel}
             * @param {number} nBase
             * @param {number} nDigits
             */
            Panel.prototype.initNumberFormat = function(nBase, nDigits)
            {
                this.nDefaultBase = nBase;
                this.nDefaultDigits = nDigits;
            };
            
            /**
             * drawText(sText)
             *
             * @this {Panel}
             * @param {string} sText
             * @param {number|null} [nValue]
             * @param {number} [nColsSkip]
             * @param {number} [nLinesSkip]
             */
            Panel.prototype.drawText = function(sText, nValue, nColsSkip, nLinesSkip)
            {
                this.contextText.font = this.fontText;
                this.contextText.fillStyle = this.colorText;
                this.contextText.fillText(sText, this.xText, this.yText);
                this.xText += this.cxColumn;
                if (nValue != null) {
                    var sValue;
                    if (this.nDefaultBase != 16) {
                        sValue = nValue.toString();
                    } else {
                        sValue = this.nDefaultDigits < 8? "0x" : "";
                        sValue += str.toHex(nValue, this.nDefaultDigits);
                    }
                    this.contextText.fillText(sValue, this.xText, this.yText);
                    this.xText += this.cxColumn;
                }
                if (nColsSkip) this.skipCols(nColsSkip);
                if (nLinesSkip) this.skipLines(nLinesSkip);
            };
            
            /**
             * centerText(sText)
             *
             * To center text within a given Rectangle:
             *
             *      centerPen(rect)
             *      centerText(sText)
             *
             * centerPen() sets xLeft and yTop to the center of the specified rectangle, and centerText() calculates
             * the width of the text, adjusting the horizontal centering by its width and the vertical centering by the
             * default font height.  Then it calls drawText().
             *
             * @this {Panel}
             * @param {string} sText
             */
            Panel.prototype.centerText = function(sText)
            {
                this.contextText.font = this.fontText;
                var tm = this.contextText.measureText(sText);
                this.xText -= tm.width >> 1;
                this.yText += (this.heightText >> 1) - 2;
                this.drawText(sText);
                if (this.fVerticalText) {
                    this.contextText.restore();
                    this.fVerticalText = false;
                }
            };
            
            /**
             * Panel.init()
             *
             * This function operates on every HTML element of class "panel", extracting the
             * JSON-encoded parameters for the Panel constructor from the element's "data-value"
             * attribute, invoking the constructor to create a Panel component, and then binding
             * any associated HTML controls to the new component.
             *
             * NOTE: Unlike most other component init() functions, this one is designed to be
             * called multiple times: once at load time, so that we can binding our print()
             * function to the panel's output control ASAP, and again when the Computer component
             * is verifying that all components are ready and invoking their powerUp() functions.
             *
             * Our powerUp() method gives us a second opportunity to notify any components that
             * that might care (eg, CPU, Keyboard, and Debugger) that we have some controls they
             * might want to use.
             */
            Panel.init = function()
            {
                var fReady = false;
                var aePanels = Component.getElementsByClass(window.document, PCJSCLASS, "panel");
                for (var iPanel=0; iPanel < aePanels.length; iPanel++) {
                    var ePanel = aePanels[iPanel];
                    var parmsPanel = Component.getComponentParms(ePanel);
                    var panel = Component.getComponentByID(parmsPanel['id']);
                    if (!panel) {
                        fReady = true;
                        panel = new Panel(parmsPanel);
                    }
                    Component.bindComponentControls(panel, ePanel, PCJSCLASS);
                    if (fReady) panel.setReady();
                }
            };
            
            /*
             * Initialize every Panel module on the page.
             */
            web.onInit(Panel.init);
            
            if (typeof module !== 'undefined') module.exports = Panel;
            
          • ram.js
            /**
             * @fileoverview Implements the PCjs RAM component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-15
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Memory      = require("./memory");
                var ROM         = require("./rom");
            }
            
            /**
             * RAM(parmsRAM)
             *
             * The RAM component expects the following (parmsRAM) properties:
             *
             *      addr: starting physical address of RAM
             *      size: amount of RAM, in bytes (optional)
             *
             * NOTE: We make a note of the specified size, but no memory is initially allocated
             * for the RAM until the Computer component calls powerUp().
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsRAM
             */
            function RAM(parmsRAM)
            {
                Component.call(this, "RAM", parmsRAM, RAM);
            
                this.addrRAM = parmsRAM['addr'];
                this.sizeRAM = parmsRAM['size'];
                this.fTestRAM = parmsRAM['test'];
                this.fInstalled = (!!this.sizeRAM); // 0 is the default value for 'size' when none is specified
                this.fAllocated = false;
            }
            
            Component.subclass(RAM);
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {RAM}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            RAM.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.chipset = cmp.getComponentByType("ChipSet");
                this.setReady();
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {RAM}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            RAM.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    /*
                     * The Computer powers up the CPU last, at which point the X86 state is restored,
                     * which includes the Bus state, and since we use the Bus to allocate all our memory,
                     * memory contents are already restored for us, so we don't need the usual restore
                     * logic.  We just need to call reset(), to allocate memory for the RAM.
                     *
                    if (!data || !this.restore) {
                        this.reset();
                    } else {
                        if (!this.restore(data)) return false;
                    }
                     */
                    this.reset();
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {RAM}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            RAM.prototype.powerDown = function(fSave, fShutdown)
            {
                /*
                 * The Computer powers down the CPU first, at which point the X86 state is saved,
                 * which includes the Bus state, and since we use the Bus component to allocate all
                 * our memory, memory contents are already saved for us, so we don't need the usual
                 * save logic.
                 *
                return fSave && this.save ? this.save() : true;
                 */
                return true;
            };
            
            /**
             * reset()
             *
             * NOTE: When we were initialized, we were given an amount of INSTALLED memory (see sizeRAM above).
             * The ChipSet component, on the other hand, tells us how much SPECIFIED memory there is -- which,
             * like a real PC, may not match the amount of installed memory (due to either user error or perhaps
             * an attempt to prevent some portion of the installed memory from being used).
             *
             * However, since we're a virtual machine, we can defer allocation of RAM until we're able to query the
             * ChipSet component, and then allocate an amount of memory that matches the SPECIFIED memory, making
             * it easy to reconfigure the machine on the fly and prevent mismatches.
             *
             * But, we do that ONLY for the RAM instance configured with an addrRAM of 0x0000, and ONLY if that RAM
             * object was not given a specific size (see fInstalled).  If there are other RAM objects in the system,
             * they must necessarily specify a non-conflicting, non-zero start address, in which case their sizeRAM
             * value will never be affected by the ChipSet settings.
             *
             * @this {RAM}
             */
            RAM.prototype.reset = function()
            {
                if (!this.addrRAM && !this.fInstalled && this.chipset) {
                    var baseRAM = this.chipset.getSWMemorySize() * 1024;
                    if (this.sizeRAM && baseRAM != this.sizeRAM) {
                        this.bus.removeMemory(this.addrRAM, this.sizeRAM);
                        this.fAllocated = false;
                    }
                    this.sizeRAM = baseRAM;
                }
                if (!this.fAllocated && this.sizeRAM) {
                    if (this.bus.addMemory(this.addrRAM, this.sizeRAM, Memory.TYPE.RAM)) {
                        this.fAllocated = true;
            
                        this.status(Math.floor(this.sizeRAM / 1024) + "Kb allocated");
            
                        /*
                         * NOTE: I'm specifying MAXDEBUG for status() messages because I'm not yet sure I want these
                         * messages buried in the app, since they're seen only when a Control Panel is active.  Another
                         * and perhaps better alternative is to add "comment" attributes to the XML configuration file
                         * for these components, which the Computer component will display as it "powers up" components.
                         */
                        if (MAXDEBUG && this.fInstalled) this.status("specified size overrides SW1");
            
                        /*
                         * Memory with an ID of "ramCPQ" is reserved for built-in memory located just below the 16Mb
                         * boundary on Compaq DeskPro 386 machines.
                         *
                         * Technically, that memory is part of the first 1Mb of memory that also provides up to 640Kb
                         * of conventional memory (ie, memory below 1Mb).
                         *
                         * However, PCjs doesn't support individual memory allocations that (a) are discontiguous
                         * or (b) dynamically change location.  Components must simulate those features by performing
                         * a separate allocation for each starting address, and removing/adding memory allocations
                         * whenever their starting address changes.
                         *
                         * Therefore, a DeskPro 386's first 1Mb of physical memory is allocated by PCjs in two pieces,
                         * and the second piece must have an ID of "ramCPQ", triggering the additional allocation of
                         * Compaq-specific memory-mapped registers.
                         *
                         * See CompaqController for more details.
                         */
                        if (COMPAQ386) {
                            if (this.idComponent == "ramCPQ") {
                                this.controller = new CompaqController(this);
                                this.bus.addMemory(CompaqController.ADDR, 1, Memory.TYPE.CTRL, this.controller);
                            }
                        }
                    }
                }
                if (this.fAllocated) {
                    if (!this.fTestRAM) {
                        /*
                         * HACK: Set the word at 40:72 in the ROM BIOS Data Area (RBDA) to 0x1234 to bypass the ROM BIOS
                         * memory storage tests. See rom.js for all RBDA definitions.
                         */
                        if (MAXDEBUG) this.status("ROM BIOS memory test has been disabled");
                        this.bus.setShortDirect(ROM.BIOS.RESET_FLAG, ROM.BIOS.RESET_FLAG_WARMBOOT);
                    }
                    /*
                     * Don't add the "ramCPQ" memory to the CMOS total, because addCMOSMemory() will add it to the extended
                     * memory total, which will just confuse the Compaq BIOS.
                     */
                    if (!COMPAQ386 || this.idComponent != "ramCPQ") {
                        if (this.chipset) this.chipset.addCMOSMemory(this.addrRAM, this.sizeRAM);
                    }
                } else {
                    Component.error("No RAM allocated");
                }
            };
            
            /**
             * RAM.init()
             *
             * This function operates on every HTML element of class "ram", extracting the
             * JSON-encoded parameters for the RAM constructor from the element's "data-value"
             * attribute, invoking the constructor to create a RAM component, and then binding
             * any associated HTML controls to the new component.
             */
            RAM.init = function()
            {
                var aeRAM = Component.getElementsByClass(window.document, PCJSCLASS, "ram");
                for (var iRAM = 0; iRAM < aeRAM.length; iRAM++) {
                    var eRAM = aeRAM[iRAM];
                    var parmsRAM = Component.getComponentParms(eRAM);
                    var ram = new RAM(parmsRAM);
                    Component.bindComponentControls(ram, eRAM, PCJSCLASS);
                }
            };
            
            /**
             * CompaqController(ram)
             *
             * DeskPro 386 machines came with a minimum of 1Mb of RAM, which could be configured (via jumpers)
             * for 256Kb, 512Kb or 640Kb of conventional memory, starting at address 0x00000000, with the
             * remainder (768Kb, 512Kb, or 384Kb) accessible only at an address just below 0x01000000.  In PCjs,
             * this second chunk of RAM must be separately allocated, with an ID of "ramCPQ".
             *
             * The typical configuration was 640Kb of conventional memory, leaving 384Kb accessible at 0x00FA0000.
             * Presumably, the other configurations (256Kb and 512Kb) would leave 768Kb and 512Kb accessible at
             * 0x00F40000 and 0x00F80000, respectively.
             *
             * The DeskPro 386 also contained two memory-mapped registers at 0x80C00000.  The first is a write-only
             * mapping register that provides the ability to map the 128Kb at 0x00FE0000 to 0x000E0000, replacing
             * any ROMs in the range 0x000E0000-0x000FFFFF, and optionally write-protecting that 128Kb; internally,
             * this register corresponds to wMappings.
             *
             * The second register is a read-only diagnostics register that indicates jumper configuration and
             * parity errors; internally, this register corresponds to wSettings.
             *
             * To emulate the memory-mapped registers at 0x80C00000, the RAM component allocates a block at that
             * address using this custom controller once it sees an allocation for "ramCPQ".
             *
             * Later, when the addressibility of "ramCPQ" memory is altered, we record the blocks in all the
             * memory slots spanning 0x000E0000-0x000FFFFF, and then update those slots with the blocks from
             * 0x00FE0000-0x00FFFFFF.  Note that only the top 128Kb of "ramCPQ" addressibility is affected; the
             * rest of that memory, ranging anywhere from 256Kb to 640Kb, remains addressible at its original
             * location.  Compaq's CEMM and VDISK utilities were generally the only software able to access that
             * remaining memory (what Compaq refers to as "Compaq Built-in Memory").
             *
             * @constructor
             * @param {RAM} ram
             */
            function CompaqController(ram)
            {
                this.ram = ram;
                this.wMappings = CompaqController.MAPPINGS.DEFAULT;
                /*
                 * TODO: wSettings needs to reflect the actual amount of configured memory....
                 */
                this.wSettings = CompaqController.SETTINGS.DEFAULT;
                this.wRAMSetup = CompaqController.RAMSETUP.DEFAULT;
                this.aBlocksDst = null;
            }
            
            CompaqController.ADDR       = 0x80C00000|0;
            CompaqController.MAP_SRC    = 0x00FE0000;
            CompaqController.MAP_DST    = 0x000E0000;
            CompaqController.MAP_SIZE   = 0x00020000;
            
            /*
             * Bit definitions for the 16-bit write-only memory-mapping register (wMappings)
             *
             * NOTE: Although Compaq says the memory at %FE0000 is "relocated", it actually remains addressable
             * at %FE0000; it simply becomes addressable at %0E0000 as well, displacing any ROMs that used to be
             * addressable at %0E0000 through %0FFFFF.
             */
            CompaqController.MAPPINGS = {
                UNMAPPED:   0x0001,             // is this bit is CLEAR, the last 128Kb (at 0x00FE0000) is mapped to 0x000E0000
                READWRITE:  0x0002,             // if this bit is CLEAR, the last 128Kb (at 0x00FE0000) is read-only (ie, write-protected)
                RESERVED:   0xFFFC,             // the remaining 6 bits are reserved and should always be SET
                DEFAULT:    0xFFFF              // our default settings (no mapping, no write-protection)
            };
            
            /*
             * Bit definitions for the 16-bit read-only settings/diagnostics register (wSettings)
             *
             * SW1-7 and SW1-8 are mapped to bits 5 and 4 of wSettings, respectively, as follows:
             *
             *      SW1-7   SW1-8   Bit5    Bit4    Amount (of base memory provided by the Compaq 32-bit memory board)
             *      -----   -----   ----    ----    ------
             *        ON      ON      0       0     640Kb
             *        ON      OFF     0       1     Invalid
             *        OFF     ON      1       0     512Kb
             *        OFF     OFF     1       1     256Kb
             *
             * Other SW1 switches include:
             *
             *      SW1-1:  ON enables fail-safe timer
             *      SW1-2:  ON indicates 80387 coprocessor installed
             *      SW1-3:  ON sets memory from 0xC00000 to 0xFFFFFF (between 12 and 16 megabytes) non-cacheable
             *      SW1-4:  ON selects AUTO system speed (OFF selects HIGH system speed)
             *      SW1-5:  RESERVED (however, the system can read its state; see below)
             *      SW1-6:  Compaq Dual-Mode Monitor or Color Monitor (OFF selects Monochrome monitor other than Compaq)
             *
             * While SW1-7 and SW1-8 are connected to this memory-mapped register, other SW1 DIP switches are accessible
             * through the 8042 Keyboard Controller's KBC.INPORT register, as follows:
             *
             *      SW1-1:  TODO: Determine
             *      SW1-2:  ChipSet.KBC.INPORT.COMPAQ_NO80387 clear if ON, set (0x04) if OFF
             *      SW1-3:  TODO: Determine
             *      SW1-4:  ChipSet.KBC.INPORT.COMPAQ_HISPEED clear if ON, set (0x10) if OFF
             *      SW1-5:  ChipSet.KBC.INPORT.COMPAQ_DIP5OFF clear if ON, set (0x20) if OFF
             *      SW1-6:  ChipSet.KBC.INPORT.COMPAQ_NONDUAL clear if ON, set (0x40) if OFF
             */
            CompaqController.SETTINGS = {
                B0_PARITY:  0x0001,         // parity OK in byte 0
                B1_PARITY:  0x0002,         // parity OK in byte 1
                B2_PARITY:  0x0004,         // parity OK in byte 2
                B3_PARITY:  0x0008,         // parity OK in byte 3
                BASE_640KB: 0x0000,         // SW1-7,8: ON  ON   Bits 5,4: 00
                BASE_ERROR: 0x0010,         // SW1-7,8: ON  OFF  Bits 5,4: 01
                BASE_512KB: 0x0020,         // SW1-7,8: OFF ON   Bits 5,4: 10
                BASE_256KB: 0x0030,         // SW1-7,8: OFF OFF  Bits 5,4: 11
                /*
                 * TODO: The DeskPro 386/25 TechRef says bit 6 (0x40) is always set,
                 * but setting it results in memory configuration errors; review.
                 */
                ADDED_1MB:  0x0040,
                /*
                 * TODO: The DeskPro 386/25 TechRef says bit 7 (0x80) is always clear; review.
                 */
                PIGGYBACK:  0x0080,
                SYS_4MB:    0x0100,         // 4Mb on system board
                SYS_1MB:    0x0200,         // 1Mb on system board
                SYS_NONE:   0x0300,         // no memory on system board
                MODA_4MB:   0x0400,         // 4Mb on module A board
                MODA_1MB:   0x0800,         // 1Mb on module A board
                MODA_NONE:  0x0C00,         // no memory on module A board
                MODB_4MB:   0x1000,         // 4Mb on module B board
                MODB_1MB:   0x2000,         // 1Mb on module B board
                MODB_NONE:  0x3000,         // no memory on module B board
                MODC_4MB:   0x4000,         // 4Mb on module C board
                MODC_1MB:   0x8000,         // 1Mb on module C board
                MODC_NONE:  0xC000,         // no memory on module C board
                /*
                 * NOTE: It doesn't seem to matter to the ROM whether I set any of bits 8-15 or not....
                 */
                DEFAULT:    0x0A0F          // our default settings (ie, parity OK, 640Kb base memory, 1Mb system memory, 1Mb module A memory)
            };
            
            CompaqController.RAMSETUP = {
                SETUP:      0x000F,
                CACHE:      0x0040,
                RESERVED:   0xFFB0,
                DEFAULT:    0x0002          // our default settings (ie, 2Mb, cache disabled)
            };
            
            /**
             * readByte(off, addr)
             *
             * @this {Memory}
             * @param {number} off (relative to 0x80C00000)
             * @param {number} [addr]
             * @return {number}
             */
            CompaqController.readByte = function readCompaqControllerByte(off, addr)
            {
                var b = 0xff;
                if (off < 0x02) {
                    b = (off & 0x1)? (this.controller.wSettings >> 8) : (this.controller.wSettings & 0xff);
                }
                else if (off < 0x4) {
                    b = (off & 0x1)? (this.controller.wRAMSetup >> 8) : (this.controller.wRAMSetup & 0xff);
                }
                if (DEBUG) {
                    this.controller.ram.printMessage("CompaqController.readByte(" + str.toHexWord(off) + ") returned " + str.toHexByte(b), true, true);
                    if (MAXDEBUG && DEBUGGER && off >= 0x2) this.dbg.stopCPU();
                }
                return b;
            };
            
            /**
             * writeByte(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off (relative to 0x80C00000)
             * @param {number} b
             * @param {number} [addr]
             */
            CompaqController.writeByte = function writeCompaqControllerByte(off, b, addr)
            {
                var controller = this.controller;
            
                /*
                 * Check for write to 0x80C00000
                 */
                if (!off) {
                    if (b != (controller.wMappings & 0xff)) {
                        var bus = controller.ram.bus;
                        if (!(b & CompaqController.MAPPINGS.UNMAPPED)) {
                            if (!controller.aBlocksDst) {
                                controller.aBlocksDst = bus.getMemoryBlocks(CompaqController.MAP_DST, CompaqController.MAP_SIZE);
                            }
                            /*
                             * You might think that the next three lines could ALSO be moved to the preceding IF,
                             * but it's possible for the write-protection feature to be enabled/disabled separately
                             * from the mapping feature.  We could avoid executing this code as well by checking the
                             * current read-write state, but this is an infrequent operation, so there's no point.
                             */
                            var aBlocks = bus.getMemoryBlocks(CompaqController.MAP_SRC, CompaqController.MAP_SIZE);
                            var type = (b & CompaqController.MAPPINGS.READWRITE)? Memory.TYPE.RAM : Memory.TYPE.ROM;
                            bus.setMemoryBlocks(CompaqController.MAP_DST, CompaqController.MAP_SIZE, aBlocks, type);
                        }
                        else {
                            if (controller.aBlocksDst) {
                                bus.setMemoryBlocks(CompaqController.MAP_DST, CompaqController.MAP_SIZE, controller.aBlocksDst);
                                controller.aBlocksDst = null;
                            }
                        }
                        controller.wMappings = (controller.wMappings & ~0xff) | b;
                        if (MAXDEBUG && DEBUGGER) this.dbg.stopCPU();
                    }
                }
                /*
                 * Check for write to 0x80C00002
                 */
                else if (off == 0x2) {
                    controller.wRAMSetup = (controller.wRAMSetup & ~0xff) | b;
                    if (MAXDEBUG && DEBUGGER) this.dbg.stopCPU();
                }
                /*
                 * All bits in 0x80C00001 and 0x80C00003 are reserved, so we can simply ignore those writes.
                 */
                if (DEBUG) {
                    this.controller.ram.printMessage("CompaqController.writeByte(" + str.toHexWord(off) + "," + str.toHexByte(b) + ")", true, true);
                }
            };
            
            CompaqController.BUFFER = [null, 0];
            CompaqController.ACCESS = [CompaqController.readByte, null, null, CompaqController.writeByte, null, null];
            
            /**
             * getMemoryBuffer(addr)
             *
             * @this {CompaqController}
             * @param {number} addr
             * @return {Array} containing the buffer (and an offset within that buffer)
             */
            CompaqController.prototype.getMemoryBuffer = function(addr)
            {
                return CompaqController.BUFFER;
            };
            
            /**
             * getMemoryAccess()
             *
             * @this {CompaqController}
             * @return {Array.<function()>}
             */
            CompaqController.prototype.getMemoryAccess = function()
            {
                return CompaqController.ACCESS;
            };
            
            /*
             * Initialize all the RAM modules on the page.
             */
            web.onInit(RAM.init);
            
            if (typeof module !== 'undefined') module.exports = RAM;
            
          • rom.js
            /**
             * @fileoverview Implements the PCjs ROM component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-15
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var DumpAPI     = require("../../shared/lib/dumpapi");
                var Component   = require("../../shared/lib/component");
                var Memory      = require("./memory");
            }
            
            /**
             * ROM(parmsROM)
             *
             * The ROM component expects the following (parmsROM) properties:
             *
             *      addr: physical address of ROM
             *      size: amount of ROM, in bytes
             *      alias: physical alias address (null if none)
             *      file: name of ROM data file
             *      notify: ID of a component to notify once the ROM is in place (optional)
             *
             * NOTE: The ROM data will not be copied into place until the Bus is ready (see initBus()) AND the
             * ROM data file has finished loading (see onLoadROM()).
             *
             * Also, while the size parameter may seem redundant, I consider it useful to confirm that the ROM you received
             * is the ROM you expected.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsROM
             */
            function ROM(parmsROM)
            {
                Component.call(this, "ROM", parmsROM, ROM);
            
                this.abROM = null;
                this.addrROM = parmsROM['addr'];
                this.sizeROM = parmsROM['size'];
            
                /*
                 * The new 'alias' property can now be EITHER a single physical address (like 'addr') OR an array of
                 * physical addresses; eg:
                 *
                 *      [0xf0000,0xffff0000,0xffff8000]
                 *
                 * We could have overloaded 'addr' to accomplish the same thing, but I think it's better to have any
                 * aliased locations listed under a separate property.
                 *
                 * Most ROMs are not aliased, in which case the 'alias' property should have the default value of null.
                 */
                this.addrAlias = parmsROM['alias'];
            
                this.sFilePath = parmsROM['file'];
                this.sFileName = str.getBaseName(this.sFilePath);
            
                /*
                 * The 'notify' property can now (as of v1.18.2) contain an array of parameters that the notified
                 * component (typically Video) may use as it sees fit.  For example, the Video component is generally
                 * interested in knowing the offsets of specific font tables within the ROM, which used to be hard-coded
                 * when all we supported were a few specific IBM video cards, but that's no longer feasible as we move
                 * beyond the original handful of IBM cards.
                 *
                 * It's up to the notified component to decide how to interpret the parameters it receives, if any.
                 */
                this.idNotify = parmsROM['notify'];
                this.aNotifyParms = null;
                if (this.idNotify) {
                    var i = this.idNotify.indexOf('[');
                    if (i > 0) {
                        try {
                            this.aNotifyParms = eval(this.idNotify.substr(i));
                        } catch (e) {}
                        this.idNotify = this.idNotify.substr(0, i);
                    }
                }
                if (this.sFilePath) {
                    var sFileURL = this.sFilePath;
                    if (DEBUG) this.log('load("' + sFileURL + '")');
                    /*
                     * If the selected ROM file has a ".json" extension, then we assume it's pre-converted
                     * JSON-encoded ROM data, so we load it as-is; ditto for ROM files with a ".hex" extension.
                     * Otherwise, we ask our server-side ROM converter to return the file in a JSON-compatible format.
                     */
                    var sFileExt = str.getExtension(this.sFileName);
                    if (sFileExt != DumpAPI.FORMAT.JSON && sFileExt != DumpAPI.FORMAT.HEX) {
                        sFileURL = web.getHost() + DumpAPI.ENDPOINT + '?' + DumpAPI.QUERY.FILE + '=' + this.sFilePath + '&' + DumpAPI.QUERY.FORMAT + '=' + DumpAPI.FORMAT.BYTES + '&' + DumpAPI.QUERY.DECIMAL + '=true';
                    }
                    web.loadResource(sFileURL, true, null, this, ROM.prototype.onLoadROM);
                }
            }
            
            Component.subclass(ROM);
            
            /*
             * ROM BIOS Data Area (RBDA) definitions, in physical address form, using the same ALL-CAPS names
             * found in the original IBM PC ROM BIOS listing.  TODO: Fill in remaining RBDA holes.
             */
            ROM.BIOS = {
                RS232_BASE:     0x400,              // 4 (word) I/O addresses of RS-232 adapters
                PRINTER_BASE:   0x408,              // 4 (word) I/O addresses of printer adapters
                EQUIP_FLAG:     0x410,              // installed hardware (word)
                MFG_TEST:       0x412,              // initialization flag (byte)
                MEMORY_SIZE:    0x413,              // memory size in K-bytes (word)
                RESET_FLAG:     0x472               // set to 0x1234 if keyboard reset underway (word)
            };
            
            // RESET_FLAG is the traditional end of the RBDA, as originally defined at real-mode segment 0x40.
            
            ROM.BIOS.RESET_FLAG_WARMBOOT = 0x1234;  // value stored at ROM.BIOS.RESET_FLAG to indicate a "warm boot", bypassing memory tests
            
            /*
             * NOTE: There's currently no need for this component to have a reset() function, since
             * once the ROM data is loaded, it can't be changed, so there's nothing to reinitialize.
             *
             * OK, well, I take that back, because the Debugger, if installed, has the ability to modify
             * ROM contents, so in that case, having a reset() function that restores the original ROM data
             * might be useful; then again, it might not, depending on what you're trying to debug.
             *
             * If we do add reset(), then we'll want to change copyROM() to hang onto the original
             * ROM data; currently, we release it after copying it into the read-only memory allocated
             * via bus.addMemory().
             */
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {ROM}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            ROM.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.copyROM();
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {ROM}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            ROM.prototype.powerUp = function(data, fRepower)
            {
                if (this.aSymbols) {
                    if (this.dbg) {
                        this.dbg.addSymbols(this.addrROM, this.sizeROM, this.aSymbols);
                    }
                    /*
                     * Our only role in the handling of symbols is to hand them off to the Debugger at our
                     * first opportunity. Now that we've done that, our copy of the symbols, if any, are toast.
                     */
                    delete this.aSymbols;
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * Since we have nothing to do on powerDown(), and no state to return, we could simply omit
             * this function.  But it doesn't hurt anything, and maybe we'll use our state to save something
             * useful down the road, like user-defined symbols (ie, symbols that the Debugger may have
             * created, above and beyond those symbols we automatically loaded, if any, along with the ROM).
             *
             * @this {ROM}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            ROM.prototype.powerDown = function(fSave, fShutdown)
            {
                return true;
            };
            
            /**
             * onLoadROM(sROMFile, sROMData, nErrorCode)
             *
             * @this {ROM}
             * @param {string} sROMFile
             * @param {string} sROMData
             * @param {number} nErrorCode (response from server if anything other than 200)
             */
            ROM.prototype.onLoadROM = function(sROMFile, sROMData, nErrorCode)
            {
                if (nErrorCode) {
                    this.notice("Unable to load system ROM (error " + nErrorCode + ")");
                    return;
                }
                if (sROMData.charAt(0) == "[" || sROMData.charAt(0) == "{") {
                    try {
                        /*
                         * The most likely source of any exception will be here: parsing the JSON-encoded ROM data.
                         */
                        var rom = eval("(" + sROMData + ")");
                        var ab = rom['bytes'];
                        var adw = rom['data'];
            
                        if (ab) {
                            this.abROM = ab;
                        }
                        else if (adw) {
                            /*
                             * Convert all the DWORDs into BYTEs, so that subsequent code only has to deal with abROM.
                             */
                            this.abROM = new Array(adw.length * 4);
                            for (var idw = 0, ib = 0; idw < adw.length; idw++) {
                                this.abROM[ib++] = adw[idw] & 0xff;
                                this.abROM[ib++] = (adw[idw] >> 8) & 0xff;
                                this.abROM[ib++] = (adw[idw] >> 16) & 0xff;
                                this.abROM[ib++] = (adw[idw] >> 24) & 0xff;
                            }
                        }
                        else {
                            this.abROM = rom;
                        }
            
                        this.aSymbols = rom['symbols'];
            
                        if (!this.abROM.length) {
                            Component.error("Empty ROM: " + sROMFile);
                            return;
                        }
                        else if (this.abROM.length == 1) {
                            Component.error(this.abROM[0]);
                            return;
                        }
                    } catch (e) {
                        this.notice("ROM data error: " + e.message);
                        return;
                    }
                }
                else {
                    /*
                     * Parse the ROM data manually; we assume it's in "simplified" hex form (a series of hex byte-values
                     * separated by whitespace).
                     */
                    var sHexData = sROMData.replace(/\n/gm, " ").replace(/ +$/, "");
                    var asHexData = sHexData.split(" ");
                    this.abROM = new Array(asHexData.length);
                    for (var i = 0; i < asHexData.length; i++) {
                        this.abROM[i] = str.parseInt(asHexData[i], 16);
                    }
                }
                this.copyROM();
            };
            
            /**
             * copyROM()
             *
             * This function is called by both initBus() and onLoadROM(), but it cannot copy the the ROM data into place
             * until after initBus() has received the Bus component AND onloadROM() has received the abROM data.  When both
             * those criteria are satisfied, the component becomes "ready".
             *
             * @this {ROM}
             */
            ROM.prototype.copyROM = function()
            {
                if (!this.isReady()) {
                    if (!this.sFilePath) {
                        this.setReady();
                    }
                    else if (this.abROM && this.bus) {
                        if (this.abROM.length != this.sizeROM) {
                            /*
                             * Note that setError() sets the component's fError flag, which in turn prevents setReady() from
                             * marking the component ready.  TODO: Revisit this decision.  On the one hand, it sounds like a
                             * good idea to stop the machine in its tracks whenever a setError() occurs, but there may also be
                             * times when we'd like to forge ahead anyway.
                             */
                            this.setError("ROM size (" + str.toHexLong(this.abROM.length) + ") does not match specified size (" + str.toHexLong(this.sizeROM) + ")");
                        }
                        else if (this.addROM(this.addrROM)) {
            
                            var aliases = [];
                            if (typeof this.addrAlias == "number") {
                                aliases.push(this.addrAlias);
                            } else if (this.addrAlias != null && this.addrAlias.length) {
                                aliases = this.addrAlias;
                            }
                            for (var i = 0; i < aliases.length; i++) {
                                this.cloneROM(aliases[i]);
                            }
                            /*
                             * If there's a component we should notify, notify it now, and give it the internal byte array, so that
                             * it doesn't have to ask the CPU for the data.  Currently, the only component that uses this notification
                             * option is the Video component, and only when the associated ROM contains font data that it needs.
                             */
                            if (this.idNotify) {
                                var component = Component.getComponentByID(this.idNotify, this.id);
                                if (component) {
                                    component.onROMLoad(this.abROM, this.aNotifyParms);
                                } else {
                                    this.notice("Unable to find component: " + this.idNotify);
                                }
                            }
                            /*
                             * We used to hang onto the original ROM data so that we could restore any bytes the CPU overwrote,
                             * using memory write-notification handlers, but with the introduction of read-only memory blocks, that's
                             * no longer necessary.
                             *
                             * TODO: Consider an option to retain the ROM data, and give the user some way of restoring ROMs.
                             * That may be useful for "resumable" machines that save/restore all dirty block of memory, regardless
                             * whether they're ROM or RAM.  However, the only way to modify a machine's ROM is with the Debugger,
                             * and Debugger users should know better.
                             */
                            delete this.abROM;
                        }
                        this.setReady();
                    }
                }
            };
            
            /**
             * addROM(addr)
             *
             * @this {ROM}
             * @param {number} addr
             * @return {boolean}
             */
            ROM.prototype.addROM = function(addr)
            {
                if (this.bus.addMemory(addr, this.sizeROM, Memory.TYPE.ROM)) {
                    if (DEBUG) this.log("addROM(): copying ROM to " + str.toHexLong(addr) + " (" + str.toHexLong(this.abROM.length) + " bytes)");
                    var bto = null;
                    for (var off = 0; off < this.abROM.length; off++) {
                        this.bus.setByteDirect(addr + off, this.abROM[off]);
                        if (BACKTRACK) {
                            bto = this.bus.addBackTrackObject(this, bto, off);
                            this.bus.writeBackTrackObject(addr + off, bto, off);
                        }
                    }
                    return true;
                }
                /*
                 * We don't need to report an error here, because addMemory() already takes care of that.
                 */
                return false;
            };
            
            /**
             * cloneROM(addr)
             *
             * For ROMs with one or more alias addresses, we used to call addROM() for each address.  However,
             * that obviously wasted memory, since each alias was an independent copy, and if you used the
             * Debugger to edit the ROM in one location, the changes would not appear in the other location(s).
             *
             * Now that the Bus component provides low-level getMemoryBlocks() and setMemoryBlocks() methods
             * to manually get and set the blocks of any memory range, it is now possible to create true aliases.
             *
             * @this {ROM}
             * @param {number} addr
             */
            ROM.prototype.cloneROM = function(addr)
            {
                var aBlocks = this.bus.getMemoryBlocks(this.addrROM, this.sizeROM);
                this.bus.setMemoryBlocks(addr, this.sizeROM, aBlocks);
            };
            
            /**
             * ROM.init()
             *
             * This function operates on every HTML element of class "rom", extracting the
             * JSON-encoded parameters for the ROM constructor from the element's "data-value"
             * attribute, invoking the constructor to create a ROM component, and then binding
             * any associated HTML controls to the new component.
             */
            ROM.init = function()
            {
                var aeROM = Component.getElementsByClass(window.document, PCJSCLASS, "rom");
                for (var iROM = 0; iROM < aeROM.length; iROM++) {
                    var eROM = aeROM[iROM];
                    var parmsROM = Component.getComponentParms(eROM);
                    var rom = new ROM(parmsROM);
                    Component.bindComponentControls(rom, eROM, PCJSCLASS);
                }
            };
            
            /*
             * Initialize all the ROM modules on the page.
             */
            web.onInit(ROM.init);
            
            if (typeof module !== 'undefined') module.exports = ROM;
            
          • serialport.js
            /**
             * @fileoverview Implements the PCjs SerialPort component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jul-01
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var ChipSet     = require("./chipset");
                var State       = require("./state");
            }
            
            /**
             * SerialPort(parmsSerial)
             *
             * The SerialPort component has the following component-specific (parmsSerial) properties:
             *
             *      adapter: 1 (for port 0x3F8) or 2 (for port 0x2F8); 0 if not defined
             *
             * WARNING: Since the XSL file defines 'adapter' as a number, not a string, there's no need to
             * use parseInt(), and as an added benefit, we don't need to worry about whether a hex or decimal
             * format was used.
             *
             * This hard-coded approach mimics the original IBM PC Asynchronous Adapter configuration, which
             * contained a pair of "shunt modules" that allowed the user to select a port address of either
             * 0x3F8 ("Primary") or 0x2F8 ("Secondary").
             *
             * DOS typically names the Primary adapter "COM1" and the Secondary adapter "COM2", but I prefer
             * to stick to adapter numbers, since not all operating systems follow those naming conventions.
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsSerial
             */
            function SerialPort(parmsSerial) {
            
                this.iAdapter = parmsSerial['adapter'];
            
                switch (this.iAdapter) {
                case 1:
                    this.portBase = 0x3F8;
                    this.nIRQ = ChipSet.IRQ.COM1;
                    break;
                case 2:
                    this.portBase = 0x2F8;
                    this.nIRQ = ChipSet.IRQ.COM2;
                    break;
                default:
                    Component.warning("Unrecognized serial adapter #" + this.iAdapter);
                    return;
                }
            
                /**
                 * controlIOBuffer is a DOM element, if any, bound to the port (currently for output purposes only; see echoByte())
                 *
                 * @type {Object}
                 */
                this.controlIOBuffer = null;
            
                Component.call(this, "SerialPort", parmsSerial, SerialPort, Messages.SERIAL);
            
                Component.bindExternalControl(this, parmsSerial['binding'], SerialPort.sIOBuffer);
            }
            
            /*
             * class SerialPort
             * property {number} iAdapter
             * property {number} portBase
             * property {number} nIRQ
             * property {Object} controlIOBuffer is a DOM element, if any, bound to the port (for rudimentary output; see echoByte())
             *
             * NOTE: This class declaration started as a way of informing the code inspector of the controlIOBuffer property,
             * which remained undefined until a setBinding() call set it later, but I've since decided that explicitly
             * initializing such properties in the constructor is a better way to go -- even though it's more code -- because
             * JavaScript compilers are supposed to be happier when the underlying object structures aren't constantly changing.
             *
             * Besides, I'm not sure I want to get into documenting every property this way, for this or any/every other class,
             * let alone getting into which ones should be considered private or protected, because PCjs isn't really a library
             * for third-party apps.
             */
            
            Component.subclass(SerialPort);
            
            /*
             * Internal name used for the I/O buffer control, if any, that we bind to the SerialPort.
             *
             * Alternatively, if SerialPort wants to use another component's control (eg, the Panel's
             * "print" control), it can specify the name of that control with the 'binding' property.
             *
             * For that binding to succeed, we also need to know the target component; for now, that's
             * been hard-coded to "Panel", in part because that's one of the few components we can rely
             * upon initializing before we do, but it would be a simple matter to include a component type
             * or ID as part of the 'binding' property as well, if we need more flexibility later.
             */
            SerialPort.sIOBuffer = "buffer";
            
            /*
             * 8250 I/O register offsets (add these to a I/O base address to obtain an I/O port address)
             *
             * NOTE: DLL.REG and DLM.REG form a 16-bit divisor into a clock input frequency of 1.8432Mhz.  The following
             * values should be used for the corresponding baud rates.  Rates above 9600 are discouraged by the IBM Tech Ref,
             * but rates as high as 128000 are listed on the NS8250A data sheet.
             *
             *      Divisor     Rate        Percent Error
             *      0x0900      50
             *      0x0600      75
             *      0x0417      110         0.026%
             *      0x0359      134.5       0.058%
             *      0x0300      150
             *      0x0180      300
             *      0x00C0      600
             *      0x0060      1200
             *      0x0040      1800
             *      0x003A      2000        0.69%
             *      0x0030      2400
             *      0x0020      3600
             *      0x0018      4800
             *      0x0010      7200
             *      0x000C      9600
             *      0x0006      19200
             *      0x0003      38400
             *      0x0002      56000       2.86%
             *      0x0001      128000
             */
            SerialPort.DLL = {REG: 0};              // Divisor Latch LSB (only when SerialPort.LCR.DLAB is set)
            SerialPort.THR = {REG: 0};              // Transmitter Holding Register (write)
            SerialPort.DL_DEFAULT       = 0x180;    // we select an arbitrary default Divisor Latch equivalent to 300 baud
            
            /*
             * The divisor is stored in wDL.  If we take the frequency value 1843200 and divide it by wDL*128, we get the
             * maximum number of bytes per second that the SerialPort interface should generate.  For example, if a baud
             * rate of 1200 is being used, the divisor will be 0x60 (96), so we calculate 1843200/(96*128) = 150, which means
             * there should be a 1000ms/150 or 6.667ms delay between bytes delivered.
             *
             * TODO: Enforce that delay.  However, the delay should be converted from real-world milliseconds to the
             * appropriate number of CPU cycles we can pass to setBurstCycles().  This will also require the CPU to call
             * us at the start of each burst, to see if advanceRBR() has more data to deliver.  For now, I'm throttling
             * SerialPort interrupts by passing a hard-coded delay to setIRR().  The setIRR() delay does not ensure any
             * particular baud rate, it simply gives the underlying Interrupt Service Routine (ISR) some breathing room.
             *
             * The Microsoft Windows 1.01 serial mouse driver ISR issues an EOI before it has safely exited, relying solely
             * on the fact that a 1200 baud serial device would not normally interrupt frequently enough to blow the stack.
             * However, in PCjs, all you have to do is enable Debugger messages on every serial interrupt and mouse event,
             * eg:
             *
             *      m serial on;m pic on;m mouse on
             *
             * to slow the machine down to the point where serial mouse interrupts overwhelm the ISR.  The Debugger messages
             * display the current stack pointer, which you can watch drop to zero and then wrap around, no doubt trampling
             * lots of code and data along the way.
             *
             * This problem can also occur without being forced by the Debugger; eg, whenever the physical machine's mouse is
             * configured for a high interrupt rate.
             */
            
            /*
             * Receiver Buffer Register (RBR.REG, offset 0; eg, 0x3F8 or 0x2F8)
             */
            SerialPort.RBR = {REG: 0};              // (read)
            
            /*
             * Interrupt Enable Register (IER.REG, offset 1; eg, 0x3F9 or 0x2F9)
             */
            SerialPort.IER = {};
            SerialPort.IER.REG          = 1;        // Interrupt Enable Register
            SerialPort.IER.RBR_AVAIL    = 0x01;
            SerialPort.IER.THR_EMPTY    = 0x02;
            SerialPort.IER.LSR_DELTA    = 0x04;
            SerialPort.IER.MSR_DELTA    = 0x08;
            SerialPort.IER.UNUSED       = 0xF0;     // always zero
            
            SerialPort.DLM = {REG: 1};              // Divisor Latch MSB (only when SerialPort.LCR.DLAB is set)
            
            /*
             * Interrupt ID Register (IIR.REG, offset 2; eg, 0x3FA or 0x2FA)
             *
             * All interrupt conditions cleared by reading the corresponding register (or, in the case of IRR_INT_THR, writing a new value to THR.REG)
             */
            SerialPort.IIR = {};
            SerialPort.IIR.REG          = 2;        // Interrupt ID Register (read-only)
            SerialPort.IIR.NO_INT       = 0x01;
            SerialPort.IIR.INT_LSR      = 0x06;     // Line Status (highest priority: Overrun error, Parity error, Framing error, or Break Interrupt)
            SerialPort.IIR.INT_RBR      = 0x04;     // Receiver Data Available
            SerialPort.IIR.INT_THR      = 0x02;     // Transmitter Holding Register Empty
            SerialPort.IIR.INT_MSR      = 0x00;     // Modem Status Register (lowest priority: Clear To Send, Data Set Ready, Ring Indicator, or Data Carrier Detect)
            SerialPort.IIR.INT_BITS     = 0x06;
            SerialPort.IIR.UNUSED       = 0xF8;     // always zero (the ROM BIOS relies on these bits "floating to 1" when no SerialPort is present)
            
            /*
             * Line Control Register (LCR.REG, offset 3; eg, 0x3FB or 0x2FB)
             */
            SerialPort.LCR = {};
            SerialPort.LCR.REG          = 3;        // Line Control Register
            SerialPort.LCR.DATA_5BITS   = 0x00;
            SerialPort.LCR.DATA_6BITS   = 0x01;
            SerialPort.LCR.DATA_7BITS   = 0x02;
            SerialPort.LCR.DATA_8BITS   = 0x03;
            SerialPort.LCR.STOP_BITS    = 0x04;     // clear: 1 stop bit; set: 1.5 stop bits for LCR_DATA_5BITS, 2 stop bits for all other data lengths
            SerialPort.LCR.PARITY_BIT   = 0x08;     // if set, a parity bit is inserted/expected between the last data bit and the first stop bit; no parity bit if clear
            SerialPort.LCR.PARITY_EVEN  = 0x10;     // if set, even parity is selected (ie, the parity bit insures an even number of set bits); if clear, odd parity
            SerialPort.LCR.PARITY_STICK = 0x20;     // if set, parity bit is transmitted inverted; if clear, parity bit is transmitted normally
            SerialPort.LCR.BREAK        = 0x40;     // if set, serial output (SOUT) signal is forced to logical 0 for the duration
            SerialPort.LCR.DLAB         = 0x80;     // Divisor Latch Access Bit; if set, DLL.REG and DLM.REG can be read or written
            
            /*
             * Modem Control Register (MCR.REG, offset 4; eg, 0x3FC or 0x2FC)
             */
            SerialPort.MCR = {};
            SerialPort.MCR.REG          = 4;        // Modem Control Register
            SerialPort.MCR.DTR          = 0x01;     // when set, DTR goes high, indicating ready to establish link (looped back to DSR in loop-back mode)
            SerialPort.MCR.RTS          = 0x02;     // when set, RTS goes high, indicating ready to exchange data (looped back to CTS in loop-back mode)
            SerialPort.MCR.OUT1         = 0x04;     // when set, OUT1 goes high (looped back to RI in loop-back mode)
            SerialPort.MCR.OUT2         = 0x08;     // when set, OUT2 goes high (looped back to RLSD in loop-back mode)
            SerialPort.MCR.LOOPBACK     = 0x10;     // when set, enables loop-back mode
            SerialPort.MCR.UNUSED       = 0xE0;     // always zero
            
            /*
             * Line Status Register (LSR.REG, offset 5; eg, 0x3FD or 0x2FD)
             *
             * NOTE: I've seen different specs for the LSR_TSRE.  I'm following the IBM Tech Ref's lead here, but the data sheet I have calls it TEMT
             * instead of TSRE, and claims that it is set whenever BOTH the THR and TSR are empty, and clear whenever EITHER the THR or TSR contain data.
             */
            SerialPort.LSR = {};
            SerialPort.LSR.REG          = 5;        // Line Status Register
            SerialPort.LSR.DR           = 0x01;     // Data Ready (set when new data in RBR.REG; cleared when RBR.REG read)
            SerialPort.LSR.OE           = 0x02;     // Overrun Error (set when new data arrives in RBR.REG before previous data read; cleared when LSR.REG read)
            SerialPort.LSR.PE           = 0x04;     // Parity Error (set when new data has incorrect parity; cleared when LSR.REG read)
            SerialPort.LSR.FE           = 0x08;     // Framing Error (set when new data has invalid stop bit; cleared when LSR.REG read)
            SerialPort.LSR.BI           = 0x10;     // Break Interrupt (set when new data exceeded normal transmission time; cleared LSR.REG when read)
            SerialPort.LSR.THRE         = 0x20;     // Transmitter Holding Register Empty (set when UART ready to accept new data; cleared when THR.REG written)
            SerialPort.LSR.TSRE         = 0x40;     // Transmitter Shift Register Empty (set when the TSR is empty; cleared when the THR is transferred to the TSR)
            SerialPort.LSR.UNUSED       = 0x80;     // always zero
            
            /*
             * Modem Status Register (MSR.REG, offset 6; eg, 0x3FE or 0x2FE)
             */
            SerialPort.MSR = {};
            SerialPort.MSR.REG          = 6;        // Modem Status Register
            SerialPort.MSR.DCTS         = 0x01;     // when set, CTS (Clear To Send) has changed since last read
            SerialPort.MSR.DDSR         = 0x02;     // when set, DSR (Data Set Ready) has changed since last read
            SerialPort.MSR.TERI         = 0x04;     // when set, TERI (Trailing Edge Ring Indicator) indicates RI has changed from 1 to 0
            SerialPort.MSR.DRLSD        = 0x08;     // when set, RLSD (Received Line Signal Detector) has changed
            SerialPort.MSR.CTS          = 0x10;     // when set, the modem or data set is ready to exchange data (complement of the Clear To Send input signal)
            SerialPort.MSR.DSR          = 0x20;     // when set, the modem or data set is ready to establish link (complement of the Data Set Ready input signal)
            SerialPort.MSR.RI           = 0x40;     // complement of the RI (Ring Indicator) input
            SerialPort.MSR.RLSD         = 0x80;     // complement of the RLSD (Received Line Signal Detect) input
            
            /*
             * Scratch Register (SCR.REG, offset 7; eg, 0x3FF or 0x2FF)
             */
            SerialPort.SCR = {REG: 7};
            
            /**
             * attachMouse(id, mouse)
             *
             * @this {SerialPort}
             * @param {string} id
             * @param {Mouse} mouse component
             * @return {Component} this or null, based on whether or not the specified ID matches
             */
            SerialPort.prototype.attachMouse = function(id, mouse)
            {
                if (id == this.idComponent) {
                    this.mouse = mouse;
                    return this;
                }
                return null;
            };
            
            /**
             * syncMouse()
             *
             * NOTE: This is probably obsolete, but the Mouse component still might discover a need for it.  See Mouse.powerUp().
             *
             * @this {SerialPort}
             *
            SerialPort.prototype.syncMouse = function()
             {
                if (this.mouse) this.mouse.notifyMCR(this.bMCR);
            };
             */
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {SerialPort}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "buffer")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            SerialPort.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                var serial = this;
            
                switch (sBinding) {
                case SerialPort.sIOBuffer:
                    this.bindings[sBinding] = this.controlIOBuffer = control;
                    /*
                     * By establishing an onkeypress handler here, we make it possible for DOS commands like
                     * "CTTY COM1" to more or less work (use "CTTY CON" to restore control to the DOS console).
                     *
                     * WARNING: This isn't really a supported feature yet; very much a work-in-progress.
                     */
                    control.onkeydown = function onKeyDownSerial(event) {
                        /*
                         * This is required in addition to onkeypress, because it's the only way to prevent
                         * BACKSPACE from being interpreted by the browser as a "Back" operation.
                         */
                        event = event || window.event;
                        var keyCode = event.keyCode;
                        if (keyCode === 8) {
                            if (event.preventDefault) event.preventDefault();
                            serial.sendRBR([keyCode]);
                        }
                    };
                    control.onkeypress = function onKeyPressSerial(event) {
                        /*
                         * Browser-independent keyCode extraction (refer to keyPress() and the other key
                         * event handlers in keyboard.js).
                         */
                        event = event || window.event;
                        var keyCode = event.which || event.keyCode;
                        serial.sendRBR([keyCode]);
                    };
                    return true;
            
                default:
                    break;
                }
                return false;
            };
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * @this {SerialPort}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            SerialPort.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
                this.chipset = cmp.getComponentByType("ChipSet");
                bus.addPortInputTable(this, SerialPort.aPortInput, this.portBase);
                bus.addPortOutputTable(this, SerialPort.aPortOutput, this.portBase);
                this.setReady();
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {SerialPort}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            SerialPort.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data || !this.restore) {
                        this.reset();
                    } else {
                        if (!this.restore(data)) return false;
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * @this {SerialPort}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            SerialPort.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save ? this.save() : true;
            };
            
            /**
             * reset()
             *
             * @this {SerialPort}
             */
            SerialPort.prototype.reset = function()
            {
                this.initState();
            };
            
            /**
             * save()
             *
             * This implements save support for the SerialPort component.
             *
             * @this {SerialPort}
             * @return {Object}
             */
            SerialPort.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, this.saveRegisters());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the SerialPort component.
             *
             * @this {SerialPort}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             */
            SerialPort.prototype.restore = function(data)
            {
                return this.initState(data[0]);
            };
            
            /**
             * initState(data)
             *
             * @this {SerialPort}
             * @param {Array} [data]
             * @return {boolean} true if successful, false if failure
             */
            SerialPort.prototype.initState = function(data)
            {
                /*
                 * The NS8250A spec doesn't explicitly say what the RBR and THR are initialized to on a reset,
                 * but I think we can safely assume zeros.  Similarly, we reset the baud rate Divisor Latch (wDL)
                 * to an arbitrary but consistent default (DL_DEFAULT).
                 */
                var i = 0;
                if (data === undefined) {
                    data = [
                        0,                                          // RBR
                        0,                                          // THR
                        SerialPort.DL_DEFAULT,                      // DL
                        0,                                          // IER
                        SerialPort.IIR.NO_INT,                      // IIR
                        0,                                          // LCR
                        0,                                          // MCR
                        SerialPort.LSR.THRE | SerialPort.LSR.TSRE,  // LSR
                        SerialPort.MSR.CTS | SerialPort.MSR.DSR,    // MSR (instead of the normal 0 default, we indicate a state of readiness -- to be revisited)
                        []
                    ];
                }
                this.bRBR = data[i++];
                this.bTHR = data[i++];
                this.wDL =  data[i++];
                this.bIER = data[i++];
                this.bIIR = data[i++];
                this.bLCR = data[i++];
                this.bMCR = data[i++];
                this.bLSR = data[i++];
                this.bMSR = data[i++];
                this.abReceive = data[i];
                return true;
            };
            
            /**
             * saveRegisters()
             *
             * @this {SerialPort}
             * @return {Array}
             */
            SerialPort.prototype.saveRegisters = function()
            {
                var i = 0;
                var data = [];
                data[i++] = this.bRBR;
                data[i++] = this.bTHR;
                data[i++] = this.wDL;
                data[i++] = this.bIER;
                data[i++] = this.bIIR;
                data[i++] = this.bLCR;
                data[i++] = this.bMCR;
                data[i++] = this.bLSR;
                data[i++] = this.bMSR;
                data[i] = this.abReceive;
                return data;
            };
            
            /**
             * sendRBR(ab)
             *
             * @this {SerialPort}
             * @param {Array} ab is an array of bytes to propagate to the bRBR (Receiver Buffer Register)
             */
            SerialPort.prototype.sendRBR = function(ab)
            {
                this.abReceive = this.abReceive.concat(ab);
                this.advanceRBR();
            };
            
            /**
             * advanceRBR()
             *
             * @this {SerialPort}
             */
            SerialPort.prototype.advanceRBR = function()
            {
                if (this.abReceive.length > 0 && !(this.bLSR & SerialPort.LSR.DR)) {
                    this.bRBR = this.abReceive.shift();
                    this.bLSR |= SerialPort.LSR.DR;
                }
                this.updateIRR();
            };
            
            /**
             * inRBR(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3F8 or 0x2F8)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inRBR = function(port, addrFrom)
            {
                var b = ((this.bLCR & SerialPort.LCR.DLAB) ? (this.wDL & 0xff) : this.bRBR);
                this.printMessageIO(port, null, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLL" : "RBR", b);
                this.bLSR &= ~SerialPort.LSR.DR;
                this.advanceRBR();
                return b;
            };
            
            /**
             * inIER(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3F9 or 0x2F9)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inIER = function(port, addrFrom)
            {
                var b = ((this.bLCR & SerialPort.LCR.DLAB) ? (this.wDL >> 8) : this.bIER);
                this.printMessageIO(port, null, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLM" : "IER", b);
                return b;
            };
            
            /**
             * inIIR(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FA or 0x2FA)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inIIR = function(port, addrFrom)
            {
                var b = this.bIIR;
                this.printMessageIO(port, null, addrFrom, "IIR", b);
                return b;
            };
            
            /**
             * inLCR(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FB or 0x2FB)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inLCR = function(port, addrFrom)
            {
                var b = this.bLCR;
                this.printMessageIO(port, null, addrFrom, "LCR", b);
                return b;
            };
            
            /**
             * inMCR(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FC or 0x2FC)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inMCR = function(port, addrFrom)
            {
                var b = this.bMCR;
                this.printMessageIO(port, null, addrFrom, "MCR", b);
                return b;
            };
            
            /**
             * inLSR(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FD or 0x2FD)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inLSR = function(port, addrFrom)
            {
                var b = this.bLSR;
                this.printMessageIO(port, null, addrFrom, "LSR", b);
                return b;
            };
            
            /**
             * inMSR(port, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FE or 0x2FE)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number} simulated port value
             */
            SerialPort.prototype.inMSR = function(port, addrFrom)
            {
                var b = this.bMSR;
                this.printMessageIO(port, null, addrFrom, "MSR", b);
                return b;
            };
            
            /**
             * outTHR(port, bOut, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3F8 or 0x2F8)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            SerialPort.prototype.outTHR = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLL" : "THR");
                if (this.bLCR & SerialPort.LCR.DLAB) {
                    this.wDL = (this.wDL & ~0xff) | bOut;
                } else {
                    this.bTHR = bOut;
                    this.bLSR &= ~(SerialPort.LSR.THRE | SerialPort.LSR.TSRE);
                    if (this.echoByte(bOut)) {
                        this.bLSR |= (SerialPort.LSR.THRE | SerialPort.LSR.TSRE);
                        /*
                         * QUESTION: Does this mean we should also flush/zero bTHR?
                         */
                    }
                }
            };
            
            /**
             * outIER(port, bOut, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3F9 or 0x2F9)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            SerialPort.prototype.outIER = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLM" : "IER");
                if (this.bLCR & SerialPort.LCR.DLAB) {
                    this.wDL = (this.wDL & 0xff) | (bOut << 8);
                } else {
                    this.bIER = bOut;
                }
            };
            
            /**
             * outLCR(port, bOut, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FB or 0x2FB)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            SerialPort.prototype.outLCR = function(port, bOut, addrFrom)
            {
                this.printMessageIO(port, bOut, addrFrom, "LCR");
                this.bLCR = bOut;
            };
            
            /**
             * outMCR(port, bOut, addrFrom)
             *
             * @this {SerialPort}
             * @param {number} port (0x3FC or 0x2FC)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
             */
            SerialPort.prototype.outMCR = function(port, bOut, addrFrom)
            {
                var bPrev = this.bMCR;
                this.printMessageIO(port, bOut, addrFrom, "MCR");
                this.bMCR = bOut;
                if (this.mouse && (bPrev ^ bOut) & (SerialPort.MCR.DTR | SerialPort.MCR.RTS)) {
                    this.mouse.notifyMCR(this.bMCR);
                }
            };
            
            /**
             * updateIRR()
             *
             * @this {SerialPort}
             */
            SerialPort.prototype.updateIRR = function()
            {
                var bIIR = -1;
                if ((this.bLSR & SerialPort.LSR.DR) && (this.bIER & SerialPort.IER.RBR_AVAIL)) {
                    bIIR = SerialPort.IIR.INT_RBR;
                }
                if (bIIR >= 0) {
                    this.bIIR &= ~(SerialPort.IIR.NO_INT | SerialPort.IIR.INT_BITS);
                    this.bIIR |= bIIR;
                    /*
                     * TODO: Remove this arbitrary 100-instruction delay once we've added support for baud rate throttling
                     * (see TODO above regarding baud rate).
                     */
                    if (this.chipset && this.nIRQ) this.chipset.setIRR(this.nIRQ, 100);
                } else {
                    this.bIIR |= SerialPort.IIR.NO_INT;
                    if (this.chipset && this.nIRQ) this.chipset.clearIRR(this.nIRQ);
                }
            };
            
            /**
             * echoByte(b)
             *
             * @this {SerialPort}
             * @param {number} b
             * @return {boolean} true if echoed, false if not
             */
            SerialPort.prototype.echoByte = function(b)
            {
                if (this.controlIOBuffer) {
                    if (b != 0x0D) {
                        if (b == 0x08) {
                            this.controlIOBuffer.value = this.controlIOBuffer.value.slice(0, -1);
                        } else {
                            this.controlIOBuffer.value += String.fromCharCode(b);
                            this.controlIOBuffer.scrollTop = this.controlIOBuffer.scrollHeight;
                        }
                    }
                    return true;
                }
                return false;
            };
            
            /*
             * Port input notification table
             */
            SerialPort.aPortInput = {
                0x0: SerialPort.prototype.inRBR,    // or DLL if DLAB set
                0x1: SerialPort.prototype.inIER,    // or DLM if DLAB set
                0x2: SerialPort.prototype.inIIR,
                0x3: SerialPort.prototype.inLCR,
                0x4: SerialPort.prototype.inMCR,
                0x5: SerialPort.prototype.inLSR,
                0x6: SerialPort.prototype.inMSR
            };
            
            /*
             * Port output notification table
             */
            SerialPort.aPortOutput = {
                0x0: SerialPort.prototype.outTHR,   // or DLL if DLAB set
                0x1: SerialPort.prototype.outIER,   // or DLM if DLAB set
                0x3: SerialPort.prototype.outLCR,
                0x4: SerialPort.prototype.outMCR
            };
            
            /**
             * SerialPort.init()
             *
             * This function operates on every HTML element of class "serial", extracting the
             * JSON-encoded parameters for the SerialPort constructor from the element's "data-value"
             * attribute, invoking the constructor to create a SerialPort component, and then binding
             * any associated HTML controls to the new component.
             */
            SerialPort.init = function()
            {
                var aeSerial = Component.getElementsByClass(window.document, PCJSCLASS, "serial");
                for (var iSerial = 0; iSerial < aeSerial.length; iSerial++) {
                    var eSerial = aeSerial[iSerial];
                    var parmsSerial = Component.getComponentParms(eSerial);
                    var serial = new SerialPort(parmsSerial);
                    Component.bindComponentControls(serial, eSerial, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every SerialPort module on the page.
             */
            web.onInit(SerialPort.init);
            
            if (typeof module !== 'undefined') module.exports = SerialPort;
            
          • state.js
            /**
             * @fileoverview The State class used by C1Pjs and PCjs.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-May-14
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var web       = require("./../../shared/lib/weblib");
                var Component = require("./../../shared/lib/component");
                var Messages  = require("./messages");
            }
            
            /**
             * State(component, sVersion, sSuffix)
             *
             * State objects are used by components to save/restore their state.
             *
             * During a save operation, components add data to a State object via set(),
             * and then return the resulting data using data().
             *
             * During a restore operation, the Computer component passes the results of each
             * data() call back to the originating component.
             *
             * WARNING: Since State objects are low-level objects that have no UI requirements,
             * they do not inherit from the Component class, so you should only use class methods
             * of Component, such as Component.assert(), or Debugger methods if the Debugger
             * is available.
             *
             * @constructor
             * @param {Component} component
             * @param {string} [sVersion] is used to append a major version number to the key
             * @param {string} [sSuffix] is used to append any additional suffixes to the key
             */
            function State(component, sVersion, sSuffix) {
                this.id = component.id;
                this.key = State.key(component, sVersion, sSuffix);
                this.dbg = component.dbg;
                this.unload(component.parms);
            }
            
            /**
             * State.key(component, sVersion, sSuffix)
             *
             * This encapsulates the key generation code.
             *
             * @param {Component} component
             * @param {string} [sVersion] is used to append a major version number to the key
             * @param {string} [sSuffix] is used to append any additional suffixes to the key
             * @return {string} key
             */
            State.key = function(component, sVersion, sSuffix) {
                var key = component.id;
                if (sVersion) {
                    var i = sVersion.indexOf('.');
                    if (i > 0) key += ".v" + sVersion.substr(0, i);
                }
                if (sSuffix) {
                    key += "." + sSuffix;
                }
                return key;
            };
            
            /**
             * State.compress(aSrc)
             *
             * @param {Array.<number>|null} aSrc
             * @return {Array.<number>|null} is either the original array (aSrc), or a smaller array of "count, value" pairs (aComp)
             */
            State.compress = function(aSrc) {
                if (aSrc) {
                    var iSrc = 0;
                    var iComp = 0;
                    var aComp = [];
                    while (iSrc < aSrc.length) {
                        var n = aSrc[iSrc];
                        Component.assert(n !== undefined);
                        var iCompare = iSrc + 1;
                        while (iCompare < aSrc.length && aSrc[iCompare] === n) iCompare++;
                        aComp[iComp++] = iCompare - iSrc;
                        aComp[iComp++] = n;
                        iSrc = iCompare;
                    }
                    if (aComp.length < aSrc.length) return aComp;
                }
                return aSrc;
            };
            
            /**
             * State.decompress(aComp)
             *
             * @param {Array.<number>} aComp
             * @param {number} nLength is expected length of decompressed data
             * @return {Array.<number>}
             */
            State.decompress = function(aComp, nLength) {
                var iDst = 0;
                var aDst = new Array(nLength);
                var iComp = 0;
                while (iComp < aComp.length - 1) {
                    var c = aComp[iComp++];
                    var n = aComp[iComp++];
                    while (c--) {
                        aDst[iDst++] = n;
                    }
                }
                Component.assert(aDst.length == nLength);
                return aDst;
            };
            
            /**
             * State.compressEvenOdd(aSrc)
             *
             * This is a very simple variation on compress() that compresses all the EVEN elements of aSrc first,
             * followed by all the ODD elements.  This tends to work better on EGA video memory, because when odd/even
             * addressing is enabled (eg, for text modes), the DWORD values tend to alternate, which is the worst case
             * for compress(), but the best case for compressEvenOdd().
             *
             * One wrinkle we support: if the first element is uninitialized, then we assume the entire array is undefined,
             * and return an empty compressed array.  Conversely, decompressEvenOdd() will take an empty compressed array
             * and return an uninitialized array.
             *
             * @param {Array.<number>|null} aSrc
             * @return {Array.<number>|null} is either the original array (aSrc), or a smaller array of "count, value" pairs (aComp)
             */
            State.compressEvenOdd = function(aSrc) {
                if (aSrc) {
                    var iComp = 0, aComp = [];
                    if (aSrc[0] !== undefined) {
                        for (var off = 0; off < 2; off++) {
                            var iSrc = off;
                            while (iSrc < aSrc.length) {
                                var n = aSrc[iSrc];
                                var iCompare = iSrc + 2;
                                while (iCompare < aSrc.length && aSrc[iCompare] === n) iCompare += 2;
                                aComp[iComp++] = (iCompare - iSrc) >> 1;
                                aComp[iComp++] = n;
                                iSrc = iCompare;
                            }
                        }
                    }
                    if (aComp.length < aSrc.length) return aComp;
                }
                return aSrc;
            };
            
            /**
             * State.decompressEvenOdd(aComp, nLength)
             *
             * This is the counterpart to compressEvenOdd().  Note that because there's nothing in the compressed sequence
             * that differentiates a compress() sequence from a compressEvenOdd() sequence, you simply have to be consistent:
             * if you used even/odd compression, then you must use even/odd decompression.
             *
             * @param {Array.<number>} aComp
             * @param {number} nLength is expected length of decompressed data
             * @return {Array.<number>}
             */
            State.decompressEvenOdd = function(aComp, nLength) {
                var iDst = 0;
                var aDst = new Array(nLength);
                var iComp = 0;
                while (iComp < aComp.length - 1) {
                    var c = aComp[iComp++];
                    var n = aComp[iComp++];
                    while (c--) {
                        aDst[iDst] = n;
                        iDst += 2;
                    }
                    /*
                     * The output of a "count,value" pair will never exceed the end of the output array, so as soon as we reach it
                     * the first time, we know it's time to switch to ODD elements, and as soon as we reach it again, we should be
                     * done.
                     */
                    Component.assert(iDst <= nLength || iComp == aComp.length);
                    if (iDst == nLength) iDst = 1;
                }
                Component.assert(aDst.length == nLength);
                return aDst;
            };
            
            State.prototype = {
                constructor: State,
                /**
                 * set(id, data)
                 *
                 * @this {State}
                 * @param {number|string} id
                 * @param {Object|string} data
                 */
                set: function(id, data) {
                    try {
                        this[this.id][id] = data;
                    } catch(e) {
                        Component.log(e.message);
                    }
                },
                /**
                 * get(id)
                 *
                 * @this {State}
                 * @param {number|string} id
                 * @return {Object|string|null}
                 */
                get: function(id) {
                    return this[this.id][id] || null;
                },
                /**
                 * value()
                 *
                 * Use this instead of data() if you haven't called parse() yet.
                 *
                 * @this {State}
                 * @return {string}
                 */
                value: function() {
                    return this[this.id];
                },
                /**
                 * data()
                 *
                 * @this {State}
                 * @return {Object}
                 */
                data: function() {
                    return this[this.id];
                },
                /**
                 * load(s)
                 *
                 * WARNING: Make sure you follow this call with either a call to parse() or unload(),
                 * because any stringified data that we've loaded isn't usable until it's been parsed.
                 *
                 * @this {State}
                 * @param {Object|string|null} [s]
                 * @return {boolean} true if state exists in localStorage, false if not
                 */
                load: function(s) {
                    if (s) {
                        this[this.id] = s;
                        this.fLoaded = true;
                        return true;
                    }
                    if (this.fLoaded) {
                        /*
                         * This is assumed to be a redundant load().
                         */
                        return true;
                    }
                    if (web.hasLocalStorage()) {
                        s = web.getLocalStorageItem(this.key);
                        if (s) {
                            this[this.id] = s;
                            this.fLoaded = true;
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("localStorage(" + this.key + "): " + s.length + " bytes loaded");
                            }
                            return true;
                        }
                    }
                    return false;
                },
                /**
                 * parse()
                 *
                 * This completes the load() operation, by parsing what was loaded, on the assumption there
                 * might be some benefit to deferring parsing until we've given the user a chance to confirm.
                 * Otherwise, load() could have just as easily done this, too.
                 *
                 * @this {State}
                 * @return {boolean} true if successful, false if error
                 */
                parse: function() {
                    var fSuccess = true;
                    try {
                        this[this.id] = JSON.parse(this[this.id]);
                    } catch (e) {
                        Component.error(e.message || e);
                        fSuccess = false;
                    }
                    return fSuccess;
                },
                /**
                 * store()
                 *
                 * @this {State}
                 * @return {boolean} true if successful, false if error
                 */
                store: function() {
                    var fSuccess = true;
                    if (web.hasLocalStorage()) {
                        var s = JSON.stringify(this[this.id]);
                        if (web.setLocalStorageItem(this.key, s)) {
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("localStorage(" + this.key + "): " + s.length + " bytes stored");
                            }
                        } else {
                            /*
                             * WARNING: Because browsers tend to disable all alerts() during an "unload" operation,
                             * it's unlikely anyone will ever see the "quota" errors that occur at this point.  Need to
                             * think of some way to notify the user that there's a problem, and offer a way of cleaning
                             * up old states.
                             */
                            Component.error("Unable to store " + s.length + " bytes in browser local storage");
                            fSuccess = false;
                        }
                    }
                    return fSuccess;
                },
                /**
                 * toString()
                 *
                 * We can't know whether this might be called before parse() or after parse(), so we check.
                 * If before, then this[this.id] will still be in string form; if after, it will be an Object.
                 *
                 * @this {State}
                 * @return {string} JSON-encoded state
                 */
                toString: function() {
                    var value = this[this.id];
                    return (typeof value == "string"? value : JSON.stringify(value));
                },
                /**
                 * unload(parms)
                 *
                 * This discards any data saved via set() or loaded via load(), creating an empty State object.
                 * Note that you have to follow this call with an explicit call to store() if you want to remove
                 * the state from localStorage as well.
                 *
                 * @this {State}
                 * @param {Object} [parms]
                 */
                unload: function(parms) {
                    this[this.id] = {};
                    if (parms) this.set("parms", parms);
                    this.fLoaded = false;
                },
                /**
                 * clear(fAll)
                 *
                 * This unloads the current state, and then clears ALL localStorage for the current machine,
                 * independent of version, to reduce the chance of orphaned states wasting part of our limited allocation.
                 *
                 * @this {State}
                 * @param {boolean} [fAll] true to unconditionally clear ALL localStorage for the current domain
                 */
                clear: function(fAll) {
                    this.unload();
                    var aKeys = web.getLocalStorageKeys();
                    for (var i = 0; i < aKeys.length; i++) {
                        var sKey = aKeys[i];
                        if (sKey && (fAll || sKey.substr(0, this.key.length) == this.key)) {
                            web.removeLocalStorageItem(sKey);
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("localStorage(" + sKey + ") removed");
                            }
                            aKeys.splice(i, 1);
                            i = 0;
                        }
                    }
                },
                /**
                 * messageEnabled(bitsMessage)
                 *
                 * @this {State}
                 * @param {number} [bitsMessage] is one or more Messages category flag(s)
                 * @return {boolean}
                 */
                messageEnabled: function(bitsMessage) {
                    if (DEBUGGER && this.dbg) {
                        if (bitsMessage == null) {
                            bitsMessage = Messages.STATE;
                        } else {
                            bitsMessage |= Messages.STATE;
                        }
                        return this.dbg.messageEnabled(bitsMessage);
                    }
                    return false;
                },
                /**
                 * printMessage(sMessage)
                 *
                 * @this {State}
                 * @param {string} sMessage is any caller-defined message string
                 */
                printMessage: function(sMessage) {
                    if (DEBUGGER && this.dbg) this.dbg.message(sMessage);
                }
            };
            
            if (typeof module !== 'undefined') module.exports = State;
            
          • video.js
            /**
             * @fileoverview Implements the PCjs Video component.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Jun-15
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var DumpAPI     = require("../../shared/lib/dumpapi");
                var Component   = require("../../shared/lib/component");
                var Memory      = require("./memory");
                var Messages    = require("./messages");
                var ChipSet     = require("./chipset");
                var Keyboard    = require("./keyboard");
                var State       = require("./state");
            }
            
            /**
             * Video(parmsVideo, canvas, context, textarea, container)
             *
             * The Video component can be configured with the following (parmsVideo) properties:
             *
             *      model: model (eg, "mda" for Monochrome Display Adapter)
             *      mode: mode number (hardware-specific, 7 is the default)
             *      memory: amount of installed memory (ignored for MDA/CGA)
             *      screenWidth: width of the screen canvas, in pixels
             *      screenHeight: height of the screen canvas, in pixels
             *      scale: true for font scaling, false (default) to center the display on the screen
             *      charCols: number of character columns
             *      charRows: number of character rows
             *      fontROM: path to .rom file (or a JSON representation) that defines the character set
             *      screenColor: background color of the screen canvas (default is black)
             *      autoLock: true to (attempt to) automatically lock the mouse to the canvas (default is false)
             *
             * An EGA may specify the following additional properties:
             *
             *      switches: string representing EGA switches (see "SW1-SW4" documentation below)
             *      memory: the size of the EGA's on-board memory (overrides EGA's Video.cardSpecs)
             *
             * This calls the Bus to allocate a video buffer at the appropriate memory location whenever
             * a reset() or setMode() occurs; setMode() is called whenever a mode change is detected at
             * the port level, and whenever reset() is called.  setMode() also invokes updateScreen(true),
             * which forces reallocation of our internal buffer (aCellCache) that mirrors the video buffer.
             *
             * The CPU periodically calls updateScreen(), at an assumed rate of 60 times/second,
             * to update any blinking elements (the cursor and any characters with the blink attribute),
             * to compare/update the contents of our internal buffer with the video buffer, and to render
             * any differences between the two buffers into the associated screen canvas, via either
             * updateChar() or setPixel().
             *
             * Thanks to the CPU's new block-based memory manager that allows us to sparse-allocate memory
             * (in 4Kb increments on 20-bit buses, 16Kb increments on 24-bit buses), updateScreen()
             * can also ask the CPU for the "dirty" state of all the blocks underlying the video buffer,
             * bypassing the update completely if the buffer is still clean.
             *
             * Unfortunately, that optimization is defeated if our count of active blink elements is non-zero,
             * because we must rescan the entire buffer to locate and redraw them all; I'm assuming for now
             * that, more often than not, blink attributes will not be present, and therefore they're not worth
             * a separate caching mechanism.  If the only blinking element is the cursor, that's no problem,
             * as we redraw only the one cell containing the cursor (assuming the buffer is otherwise clean).
             *
             * @constructor
             * @extends Component
             * @param {Object} parmsVideo
             * @param {Object} [canvas]
             * @param {Object} [context]
             * @param {Object} [textarea]
             * @param {Object} [container]
             */
            function Video(parmsVideo, canvas, context, textarea, container)
            {
                Component.call(this, "Video", parmsVideo, Video, Messages.VIDEO);
            
                /*
                 * This records the model specified (eg, "mda", "cga", "ega", "vga" or "" if none specified);
                 * when a model is specified, it overrides whatever model we infer from the ChipSet's switches
                 * (since those motherboard switches tell us only the type of monitor, not the type of card).
                 */
                this.model = parmsVideo['model'];
                this.nCard = Video.CARD.NAMES[this.model] || Video.CARD.MDA;
            
                this.cbMemory = parmsVideo['memory'] || 0;  // zero means fallback to the cardSpec's default size
                this.sSwitches = parmsVideo['switches'];
            
                /*
                 * powerUp() uses the default mode ONLY if ChipSet doesn't give us a default.
                 */
                this.nModeDefault = parmsVideo['mode'];
                if (this.nModeDefault === undefined || Video.aModeParms[this.nModeDefault] === undefined) {
                    this.nModeDefault = Video.MODE.MDA_80X25;
                }
            
                /*
                 * setDimensions() uses these values ONLY if it doesn't recognize the video mode.
                 */
                this.nColsDefault = parmsVideo['charCols'];
                this.nRowsDefault = parmsVideo['charRows'];
                if (this.nColsDefault === undefined || this.nRowsDefault === undefined) {
                    this.nColsDefault = Video.aModeParms[this.nModeDefault][0];
                    this.nRowsDefault = Video.aModeParms[this.nModeDefault][1];
                }
            
                /*
                 * setDimensions() uses these values unconditionally, as the machine has no idea what the
                 * physical screen size should be.
                 */
                this.cxScreen = parmsVideo['screenWidth'];
                this.cyScreen = parmsVideo['screenHeight'];
            
                /*
                 * We might consider another component parameter to specify the font-doubling setting.
                 * For now, it's based on whether the default SCREEN cell size is sufficiently larger than
                 * the default FONT cell size.
                 */
                this.fScaleFont = parmsVideo['scale'];
                this.fDoubleFont = Math.round(this.cxScreen / this.nColsDefault) >= 12;
            
                this.fTouchScreen = parmsVideo['touchScreen'];
            
                this.canvasScreen = canvas;
                this.contextScreen = context;
                this.textareaScreen = textarea;
                this.inputScreen = textarea || canvas || null;
            
                /*
                 * If a Mouse exists, we'll be notified when it requests our canvas, and we make a note of it
                 * so that if lockPointer() is ever invoked, we can notify the Mouse.
                 */
                this.mouse = null;
                this.fAutoLock = parmsVideo['autoLock'];
            
                /*
                 * Originally, setMode() would map/unmap the video buffer ONLY when the active card changed,
                 * because as long as an MDA or CGA remained active, its video buffer never changed.  However,
                 * since the EGA can change its video buffer on the fly, setMode() must also compare the card's
                 * hard-coded and/or programmed buffer address/size to the "active" address/size; the latter
                 * is recorded here.
                 */
                this.addrBuffer = this.sizeBuffer = 0;
            
                /*
                 * aFonts is an array of font objects indexed by FONT ID.  Font characters are arranged
                 * in 16x16 grids, with one grid per canvas object in the aCanvas array of each font object.
                 *
                 * Each element is a Font object that describes the font size and provides bitmaps for all the font
                 * color permutations.  aFonts.length will be non-zero if ANY fonts are loaded, but do NOT assume
                 * that EVERY font has been loaded; check for the existence of a font by checking for its unique ID
                 * within this sparse array.
                 */
                this.aFonts = [];
            
                /*
                 * Instead of (re)allocating a new color array every time getCardColors() is called, we preallocate
                 * an array now and simply update the entries as needed.
                 */
                this.aRGB = new Array(16);
            
                /*
                 * Since I've not found clear documentation on a reliable way to check whether a particular DOM element
                 * (other than the BODY element) has focus at any given time, I've added onfocus() and onblur() handlers
                 * to the screen to maintain my own focus state.
                 */
                this.fHasFocus = false;
            
                var video = this;
            
                /*
                 * Here's the gross code to handle full-screen support across all supported browsers.  The lack of standards
                 * is exasperating; browsers can't agree on 'full' or 'Full, 'request' or 'Request', 'screen' or 'Screen', and
                 * while some browsers honor other browser prefixes, most browsers don't.
                 */
                this.fGecko = web.isUserAgent("Gecko/");
                var i, sEvent, asPrefixes = ['', 'moz', 'webkit', 'ms'];
            
                this.container = container;
                if (this.container) {
                    this.container.doFullScreen = container['requestFullscreen'] || container['msRequestFullscreen'] || container['mozRequestFullScreen'] || container['webkitRequestFullscreen'];
                    if (this.container.doFullScreen) {
                        for (i = 0; i < asPrefixes.length; i++) {
                            sEvent = asPrefixes[i] + 'fullscreenchange';
                            if ('on' + sEvent in document) {
                                var onFullScreenChange = function() {
                                    var fFullScreen = (document['fullscreenElement'] || document['mozFullScreenElement'] || document['webkitFullscreenElement'] || document['msFullscreenElement']);
                                    video.notifyFullScreen(fFullScreen? true : false);
                                };
                                document.addEventListener(sEvent, onFullScreenChange, false);
                                break;
                            }
                        }
                        for (i = 0; i < asPrefixes.length; i++) {
                            sEvent = asPrefixes[i] + 'fullscreenerror';
                            if ('on' + sEvent in document) {
                                var onFullScreenError = function() {
                                    video.notifyFullScreen(null);
                                };
                                document.addEventListener(sEvent, onFullScreenError, false);
                                break;
                            }
                        }
                    }
                }
            
                /*
                 * More gross code to handle pointer-locking support across all supported browsers.
                 *
                 * TODO: Consider "upgrading" this code to use the same asPrefixes array as above, especially once Microsoft
                 * finally releases a browser that supports pointer-locking (post-Windows 10?)
                 */
                if (this.inputScreen) {
                    this.inputScreen.onfocus = function onFocusScreen() {
                        return video.onFocusChange(true);
                    };
                    this.inputScreen.onblur = function onBlurScreen() {
                        return video.onFocusChange(false);
                    };
                    this.inputScreen.lockPointer = this.inputScreen['requestPointerLock'] || this.inputScreen['mozRequestPointerLock'] || this.inputScreen['webkitRequestPointerLock'];
                    this.inputScreen.unlockPointer = this.inputScreen['exitPointerLock'] || this.inputScreen['mozExitPointerLock'] || this.inputScreen['webkitExitPointerLock'];
                    if (this.inputScreen.lockPointer) {
                        var onPointerLockChange = function() {
                            var fLocked = (
                                document['pointerLockElement'] === video.inputScreen ||
                                document['mozPointerLockElement'] === video.inputScreen ||
                                document['webkitPointerLockElement'] === video.inputScreen);
                            video.notifyPointerLocked(fLocked);
                        };
                        if ('onpointerlockchange' in document) {
                            document.addEventListener('pointerlockchange', onPointerLockChange, false);
                        } else if ('onmozpointerlockchange' in document) {
                            document.addEventListener('mozpointerlockchange', onPointerLockChange, false);
                        } else if ('onwebkitpointerlockchange' in document) {
                            document.addEventListener('webkitpointerlockchange', onPointerLockChange, false);
                        }
                    }
                }
            
                /*
                 * As far as overall image quality of scaled fonts, these options don't seem necessary for Safari (and
                 * don't have any discernible effect anyway). Turning 'webkitImageSmoothingEnabled' off DOES have an effect
                 * on Chrome, but it's not really a positive effect overall, so I'm leaving these off for now.
                 *
                 *  if (this.contextScreen) {
                 *      this.contextScreen['mozImageSmoothingEnabled'] = false;
                 *      this.contextScreen['webkitImageSmoothingEnabled'] = false;
                 *  }
                 */
            
                var sFileURL = parmsVideo['fontROM'];
                if (sFileURL) {
                    var sFileExt = str.getExtension(sFileURL);
                    if (sFileExt != "json") {
                        sFileURL = web.getHost() + DumpAPI.ENDPOINT + '?' + DumpAPI.QUERY.FILE + '=' + sFileURL + '&' + DumpAPI.QUERY.FORMAT + '=' + DumpAPI.FORMAT.BYTES;
                    }
                    web.loadResource(sFileURL, true, null, this, this.onLoadSetFonts);
                }
            }
            
            Component.subclass(Video);
            
            Video.TRAPALL = true;           // monitor all I/O by default (not just deltas)
            
            /*
             * MDA/CGA Support
             *
             * Since there's a lot of similarity between the MDA and CGA (eg, their text-mode video buffer
             * format, and their use of the 6845 CRT controller), since the MDA ROM contains the fonts used
             * by both devices, and since the same ROM BIOS supports both (in fact, the BIOS indiscriminately
             * initializes both, regardless which is actually installed), this same component emulates both
             * devices.
             *
             * When no model is specified, this component supports the ability to dynamically switch between
             * MDA and CGA emulation, by simply toggling the SW1 motherboard "monitor type" switch settings
             * and resetting the machine.  In that model-less configuration, we install I/O port handlers for
             * both MDA and CGA cards, regardless which monitor type is initially selected.
             *
             * To simulate an IBM PC containing both an MDA and CGA (ie, a "dual display" system), the machine
             * configuration simply defines two video components, one with model "mda" and the other with model
             * "cga", resulting in two displays; setting a specific model forces each instance of this component
             * to register only those I/O ports belonging to that model.
             *
             * In a single-display system, dynamically switching cards (ie, between MDA and CGA) creates some
             * visual challenges.  For one, the MDA prefers a native screen size of 720x350, as it supports only
             * one video mode, 80x25, with a 9x14 cell size.  The CGA, on the other hand, has an 8x8 cell size,
             * so when using an MDA-size screen, an 80x25 CGA screen will end up with 40-pixel borders on the
             * left and right, and 75-pixel borders on the top and bottom.  The result is a rather tiny CGA font
             * surrounded by lots of wasted space, so it's best to turn on font scaling (see the "scale" property)
             * and go with a larger screen size of, say, 960x400 (50% larger in width, 100% larger in height).
             *
             * I've also added support for font-doubling in createFont().  We use the 8x8 font for 80-column
             * modes and the "doubled" 16x16 font for 40-column modes OR whenever the screen is large enough
             * to use the 16x16 font, since font rendering without scaling provides the sharpest results.
             * In fact, there's special logic in setDimensions() to ignore fScaleFont in certain cases (eg,
             * 40-column modes, to improve sharpness and avoid stretching the font beyond readability).
             *
             * Graphics modes, on the other hand, are always scaled to the screen size.  Pixels are captured
             * in an off-screen buffer, which is then drawn to match the size of the virtual screen.
             *
             * TODO: Whenever there are borders, they should be filled with the CGA's overscan colors.  However,
             * in the case of graphics modes (and text modes whenever font scaling is enabled), we don't reserve
             * any space for borders, so if borders are important, explicit border support will be required.
             */
            
            /*
             * EGA Support
             *
             * EGA support piggy-backs on the existing MDA/CGA support.  All the existing MDA/CGA port handlers
             * now refer to either cardMono or cardColor (instead of directly to cardMDA or cardCGA), enabling
             * the handlers to be redirected to cardMDA, cardCGA or cardEGA as appropriate.
             *
             * Note that an MDA card supported only a Monochrome Display and a CGA card supported only a Color
             * Display (well, OK, *or* a TV monitor, which we don't currently support), but the EGA is much
             * more flexible: the Enhanced Color Display was the preferred display, but the EGA also supported
             * older displays; a Color Display on EGA wasn't ideal (same low resolutions but with more colors),
             * but the EGA also brought high-resolution graphics to Monochrome displays, which was nice.  Anyway,
             * while all those EGA/monitor combinations will be nice to support, our virtual display support
             * will focus initially on the Enhanced Color Display.
             *
             * TODO: Add support for jumpers P1 and P3 (see EGA TechRef p.85).  P1 selects either 5-color-output
             * for a CGA monitor or 6-color-output for an EGA monitor; we would presumably use this only to
             * control certain assumptions about the virtual display's capabilities (ie, Color Display vs. Enhanced
             * Color Display).  P3 can switch all the I/O ports from 0x3nn to 0x2nn; the default is 0x3nn, and
             * that's the only port range the EGA ROM supports as well.
             */
            
            /*
             * VGA Support
             *
             * More will be said here about PCjs VGA support later.  But first, a word from IBM: "Video Graphics Array [VGA]
             * Programming Considerations":
             *
             *      Certain internal timings must be guaranteed by the user, in order to have the CRTC perform properly.
             *      This is due to the physical design of the chip. These timings can be guaranteed by ensuring that the
             *      rules listed below are followed when programming the CRTC.
             *
             *           1. The Horizontal Total [HORZ_TOTAL] register (R0) must be greater than or equal to a value of
             *              25 decimal.
             *
             *           2. The minimum positive pulse width of the HSYNC output must be four character clock units.
             *
             *           3. Register R5, Horizontal Sync End [HORZ_RETRACE_END], must be programmed such that the HSYNC
             *              output goes to a logic 0 a minimum of one character clock time before the 'horizontal display enable'
             *              signal goes to a logical 1.
             *
             *           4. Register R16, Vsync Start [VERT_RETRACE_START], must be a minimum of one horizontal scan line greater
             *              than register R18 [VERT_DISP_END].  Register R18 defines where the 'vertical display enable' signal ends.
             *
             *     When bit 5 of the Attribute Mode Control register equals 1, a successful line compare (see Line Compare
             *     [LINE_COMPARE] register) in the CRT Controller forces the output of the PEL Panning register to 0's until Vsync
             *     occurs.  When Vsync occurs, the output returns to the programmed value.  This allows the portion of the screen
             *     indicated by the Line Compare register to be operated on by the PEL Panning register.
             *
             *     A write to the Character Map Select register becomes valid on the next whole character line.  No deformed
             *     characters are displayed by changing character generators in the middle of a character scan line.
             *
             *     For 256-color 320 x 200 graphics mode hex 13, the attribute controller is configured so that the 8-bit attribute
             *     stored in video memory for each PEL becomes the 8-bit address (P0 - P7) into the integrated DAC.  The user should
             *     not modify the contents of the internal Palette registers when using this mode.
             *
             *     The following sequence should be followed when accessing any of the Attribute Data registers pointed to by the
             *     Attribute Index register:
             *
             *           1. Disable interrupts
             *           2. Reset read/write flip/flop
             *           3. Write to Index register
             *           4. Read from or write to a data register
             *           5. Enable interrupts
             *
             *      The Color Select register in the Attribute Controller section may be used to rapidly switch between sets of colors
             *      in the video DAC.  When bit 7 of the Attribute Mode Control register equals 0, the 8-bit color value presented to the
             *      video DAC is composed of 6 bits from the internal Palette registers and bits 2 and 3 from the Color Select register.
             *      When bit 7 of the Attribute Mode Control register equals 1, the 8-bit color value presented to the video DAC is
             *      composed of the lower four bits from the internal Palette registers and the four bits in the Color Select register.
             *      By changing the value in the Color Select register, software rapidly switches between sets of colors in the video DAC.
             *      Note that BIOS does not support multiple sets of colors in the video DAC.  The user must load these colors if this
             *      function is to be used.  Also see the Attribute Controller block diagram on page 4-26.  Note that the above discussion
             *      applies to all modes except 256 Color Graphics mode.  In this mode the Color Select register is not used to switch
             *      between sets of colors.
             *
             *      An application that saves the "Video State" must store the 4 bytes of information contained in the system microprocessor
             *      latches in the graphics controller subsection. These latches are loaded with 32 bits from video memory (8 bits per map)
             *      each time the system microprocessor does a read from video memory.  The application needs to:
             *
             *           1. Use write mode 1 to write the values in the latches to a location in video memory that is not part of
             *              the display buffer.  The last location in the address range is a good choice.
             *
             *           2. Save the values of the latches by reading them back from video memory.
             *
             *           Note: If in a chain 4 or odd/even mode, it will be necessary to reconfigure the memory organization as four
             *           sequential maps prior to performing the sequence above.  BIOS provides support for completely saving and
             *           restoring video state.  See the IBM Personal System/2 and Personal Computer BIOS Interface Technical Reference
             *           for more information.
             *
             *      The description of the Horizontal PEL Panning register includes a figure showing the number of PELs shifted left
             *      for each valid value of the PEL Panning register and each valid video mode.  Further panning beyond that shown in
             *      the figure may be accomplished by changing the start address in the CRT Controller registers, Start Address High
             *      and Start Address Low.  The sequence involved in further panning would be as follows:
             *
             *           1. Use the PEL Panning register to shift the maximum number of bits to the left. See Figure 4-103 on page
             *              4-106 for the appropriate values.
             *
             *           2. Increment the start address.
             *
             *           3. If you are not using Modes 0 + , 1 + , 2 + , 3 + ,7, or7 + , set the PEL Panning register to 0.  If you
             *              are using these modes, set the PEL Panning register to 8.  The screen will now be shifted one PEL left
             *              of the position it was in at the end of step 1.  Step 1 through Step 3 may be repeated as desired.
             *
             *      The Line Compare register (CRTC register hex 18) should be programmed with even values in 200 line modes when
             *      used in split screen applications that scroll a second screen on top of a first screen.  This is a requirement
             *      imposed by the scan doubling logic in the CRTC.
             *
             *      If the Cursor Start register (CRTC register hex 0A) is programmed with a value greater than that in the Cursor End
             *      register (CRTC register hex 0B), then no cursor is displayed.  A split cursor is not possible.
             *
             *      In 8-dot character modes, the underline attribute produces a solid line across adjacent characters, as in the IBM
             *      Color/Graphics Monitor Adapter, Monochrome Display Adapter and the Enhanced Graphics Adapter.  In 9-dot modes, the
             *      underline across adjacent characters is dashed, as in the IBM 327X display terminals.  In 9-dot modes, the line
             *      graphics characters (C0 - DF character codes) have solid underlines.
             *
             *      For compatibility with the IBM Enhanced Graphics Adapter (EGA), the internal VGA palette is programmed the same
             *      as the EGA.  The video DAC is programmed by BIOS so that the compatible values in the internal VGA palette produce
             *      a color compatible with what was produced by EGA.  Mode hex 13 (256 colors) is programmed so that the first 16
             *      locations in the DAC produce compatible colors.
             *
             *      Summing: When BIOS is used to load the video DAC palette for a color mode and a monochrome display is connected
             *      to the system unit, the color palette is changed.  The colors are summed to produce shades of gray that allow
             *      color applications to produce a readable screen.
             *
             *      There are 4 bits that should not be modified unless the sequencer is reset by setting bit 1 of the Reset register
             *      to 0.  These bits are:
             *
             *           • Bit 3, or bit 0 of the Clocking Mode register
             *           • Bit 3, or bit 2 of the Miscellaneous Output register
             */
            
            /*
             * Supported Cards
             *
             * Note that we choose IDs that match the default font ID for each card as well, for convenience.
             */
            Video.CARD = {
                MDA: 1,
                CGA: 3,
                EGA: 5,
                VGA: 7,
                NAMES: {
                    "mda": 1,
                    "cga": 3,
                    "ega": 5,
                    "vga": 7
                }
            };
            
            /*
             * Supported Modes
             *
             * Although this component is designed to be a video hardware emulation, not a BIOS simulation, we DO
             * look for changes to the hardware state that correspond to standard BIOS mode settings, so our internal
             * mode setting will normally match the current BIOS mode setting; however, this a debugging convenience,
             * not an attempt to monitor or emulate the BIOS.
             *
             * We do have some BIOS awareness (eg, when loading ROM-based fonts, and some special code to ensure all
             * the BIOS diagnostics pass), but for the most part, we treat the BIOS like any other application code.
             *
             * As we expand support to include more programmable cards like the EGA, it becomes quite easy for the card
             * to enter a "mode" that has no BIOS counterpart (eg, non-standard combinations of video buffer address,
             * memory access modes, fonts, display regions, etc).  Our hardware emulation routines will cope with those
             * situations as best they can (and when they don't, it should be considered a bug if some application is
             * broken as a result), but realistically, our hardware emulation is never likely to be 100% accurate.
             */
            Video.MODE = {
                CGA_40X25_BW:       0,
                CGA_40X25:          1,
                CGA_80X25_BW:       2,
                CGA_80X25:          3,
                CGA_320X200:        4,
                CGA_320X200_BW:     5,
                CGA_640X200:        6,
                MDA_80X25:          7,
                EGA_320X200:        0x0D,   // mapped at A000:0000
                EGA_640X200:        0x0E,   // mapped at A000:0000
                EGA_640X350_MONO:   0x0F,   // mapped at A000:0000, monochrome
                EGA_640X350:        0x10,   // mapped at A000:0000, color
                VGA_640X480_MONO:   0x11,   // mapped at A000:0000, monochrome
                VGA_640X480:        0x12,   // mapped at A000:0000, color
                VGA_320X200:        0x13,   // mapped at A000:0000, color
                UNKNOWN:            0xFF
            };
            
            /*
             * Supported Monitors
             *
             * The MDA monitor displays 350 lines of vertical resolution, 720 lines of horizontal resolution, and refreshes
             * at ~50Hz.  The CGA monitor displays 200 lines vertically, 640 horizontally, and refreshes at ~60Hz.
             *
             * Based on actual MDA timings (see http://diylab.atwebpages.com/pressureDev.htm), the total horizontal
             * period (drawing a line and retracing) is ~54.25uSec (1000000uSec / 18432) and the horizontal retrace interval
             * is about 15% of that, or ~8.14uSec.  Vertical sync occurs once every 370 horizontal periods.  Of those 370,
             * only 354 represent actively drawn lines (and of those, only 350 are visible); the remaining 16 horizontal
             * periods, or 4% of the 370 total, represent the vertical retrace interval.
             *
             * I don't have similar numbers for the CGA or EGA, so for now, I assume similar percentages; ie, 15% of
             * the horizontal period will represent horizontal retrace, and 4% of the vertical pixel maximum (262) will
             * represent vertical retrace.  However, 24% of the CGA's 262 vertical maximum represents non-visible lines,
             * whereas only 5% of the MDA's 370 maximum represents non-visible lines; is there really that much "overscan"
             * on the CGA?
             *
             * For each monitor type, there's a Video.monitorSpecs object that describes the horizontal and vertical
             * timings, along with my assumptions about the percentage of time that drawing is "active" within those periods,
             * and then based on the selected monitor type, I compute the number of CPU cycles that each period lasts,
             * as well as the number of CPU cycles that drawing lasts within each period, so that the horizontal and vertical
             * retrace status flags can be quickly calculated.
             *
             * For reference, here are some important numbers to know (from https://github.com/reenigne/reenigne/blob/master/8088/cga/register_values.txt):
             *
             *              CGA          MDA
             *  Pixel clock 14.318 MHz   16.257 MHz (aka "maximum video bandwidth", as IBM Tech Refs sometimes call it)
             *  Horizontal  15.700 KHz   18.432 KHz (aka "horizontal drive", as IBM Tech Refs sometimes call it)
             *  Vertical    59.923 Hz    49.816 Hz
             *  Usage       53.69%       77.22%
             *  H pix       912 = 114*8  882 = 98*9
             *  V pix       262          370
             *  Dots        238944       326340
             */
            
            /**
             * @class MonitorSpecs
             * @property {number} nHorzPeriodsPerSec
             * @property {number} nHorzPeriodsPerFrame
             * @property {number} percentHorzActive
             * @property {number} percentVertActive
             *
             * From these monitor specs, we calculate the following values for a given Card:
             *
             *      nCyclesPerSecond = cpu.getCyclesPerSecond();      // eg, 4772727
             *      nCyclesHorzPeriod = (nCyclesPerSecond / monitorSpecs.nHorzPeriodsPerSec) | 0;
             *      nCyclesHorzActive = (nCyclesHorzPeriod * monitorSpecs.percentHorzActive / 100) | 0;
             *      nCyclesVertPeriod = nCyclesHorzPeriod * monitorSpecs.nHorzPeriodsPerFrame;
             *      nCyclesVertActive = (nCyclesVertPeriod * monitorSpecs.percentVertActive / 100) | 0;
             */
            
            /**
             * @type {Object}
             */
            Video.monitorSpecs = {};
            
            /**
             * NOTE: Based on trial-and-error, 208 is the magic number of horizontal syncs per vertical sync that
             * yielded the necessary number of "horizontal enables" (200 or 0xC8) in the EGA ROM BIOS at C000:03D0.
             *
             * @type {{MonitorSpecs}}
             */
            Video.monitorSpecs[ChipSet.MONITOR.COLOR] = {
                nHorzPeriodsPerSec: 15700,
                nHorzPeriodsPerFrame: 208,
                percentHorzActive: 85,
                percentVertActive: 96
            };
            
            /**
             * NOTE: Based on trial-and-error, 364 is the magic number of horizontal syncs per vertical sync that
             * yielded the necessary number of "horizontal enables" (350 or 0x15E) in the EGA ROM BIOS at C000:03D0.
             *
             * @type {{MonitorSpecs}}
             */
            Video.monitorSpecs[ChipSet.MONITOR.MONO] = {
                nHorzPeriodsPerSec: 18432,
                nHorzPeriodsPerFrame: 364,
                percentHorzActive: 85,
                percentVertActive: 96
            };
            
            /**
             * @type {{MonitorSpecs}}
             */
            Video.monitorSpecs[ChipSet.MONITOR.EGACOLOR] = {
                nHorzPeriodsPerSec: 21850,
                nHorzPeriodsPerFrame: 364,
                percentHorzActive: 85,
                percentVertActive: 96
            };
            
            /**
             * NOTE: As above, the following values are based purely on trial-and-error, to yield results that fall
             * squarely within the bounds of the IBM VGA ROM timing requirements; see the IBM VGA ROM code at C000:024A.
             *
             * @type {{MonitorSpecs}}
             */
            Video.monitorSpecs[ChipSet.MONITOR.VGACOLOR] = {
                nHorzPeriodsPerSec: 16700,
                nHorzPeriodsPerFrame: 480,
                percentHorzActive: 85,
                percentVertActive: 83
            };
            
            /*
             * EGA Miscellaneous ports and SW1-Sw4
             *
             * The Card.MISC.CLOCK_SELECT bits determine which of the EGA board's 4 configuration switches are
             * returned via Card.STATUS0.SWSENSE (when SWSENSE is zero, the switch is closed):
             *
             *      0xC: return SW1
             *      0x8: return SW2
             *      0x4: return SW3
             *      0x0: return SW4
             *
             * These 4 bits are also copied to the byte at 40:88h by the EGA BIOS, where bit 0 is SW1, bit 1 is SW2,
             * bit 2 is SW3 and bit 3 is SW4.  Our switch settings come from bEGASwitches, which in turn comes from sSwitches,
             * which in turn comes from the "switches" property passed to the Video component, if any.
             *
             * As usual, the switch settings are reversed in both direction and sense from the switch settings; the
             * good news, however, is that we can use the parseSwitches() method in the ChipSet component to parse them.
             *
             * The set of valid EGA switch values, after conversion, is stored in the table below.  For each value,
             * there is an array that defines the corresponding monitor type(s) for the EGA adapter and any secondary
             * adapter.  The third value is a boolean indicating whether the EGA is the primary adapter.
             */
            Video.aEGAMonitorSwitches = {
                0x06: [ChipSet.MONITOR.TV,           ChipSet.MONITOR.MONO,  true],  // "1001"
                0x07: [ChipSet.MONITOR.COLOR,        ChipSet.MONITOR.MONO,  true],  // "0001"
                0x08: [ChipSet.MONITOR.EGAEMULATION, ChipSet.MONITOR.MONO,  true],  // "1110"
                0x09: [ChipSet.MONITOR.EGACOLOR,     ChipSet.MONITOR.MONO,  true],  // "0110" [our default; see bEGASwitches below]
                0x0a: [ChipSet.MONITOR.MONO,         ChipSet.MONITOR.TV,    true],  // "1010"
                0x0b: [ChipSet.MONITOR.MONO,         ChipSet.MONITOR.COLOR, true],  // "0010"
                0x00: [ChipSet.MONITOR.TV,           ChipSet.MONITOR.MONO,  false], // "1111"
                0x01: [ChipSet.MONITOR.COLOR,        ChipSet.MONITOR.MONO,  false], // "0111"
                0x02: [ChipSet.MONITOR.EGAEMULATION, ChipSet.MONITOR.MONO,  false], // "1011"
                0x03: [ChipSet.MONITOR.EGACOLOR,     ChipSet.MONITOR.MONO,  false], // "0011"
                0x04: [ChipSet.MONITOR.MONO,         ChipSet.MONITOR.TV,    false], // "1101"
                0x05: [ChipSet.MONITOR.MONO,         ChipSet.MONITOR.COLOR, false]  // "0101"
            };
            
            /**
             * @class Font
             * @property {number} cxCell
             * @property {number} cyCell
             * @property {Array} aCSSColors
             * @property {Array} aRGBColors
             * @property {Array} aColorMap
             * @property {Array} aCanvas
             */
            
            /*
             * Supported Fonts
             *
             * Once we've finished loading the standard 8K font file, aFonts[] should contain one or more of the
             * fonts listed below.  For the standard MDA/CGA font ROM, the first (MDA) font resides in the first 4Kb,
             * and the second and third (CGA) fonts reside in the two 2K halves of the second 4Kb.
             *
             * It may seem odd that the cell size for FONT_CGAD is *larger* than the cell size for FONT_CGA,
             * since 40-column mode is actually lower resolution, but since we don't shrink the screen canvas when we
             * shrink the mode, the characters must be drawn larger, and they look better if we don't have to scale them.
             *
             * From the IBM EGA Manual (p.5):
             *
             *     "In alphanumeric modes, characters are formed from one of two ROM (Read Only Memory) character
             *      generators on the adapter. One character generator defines 7x9 characters in a 9x14 character box.
             *      For Enhanced Color Display support, the 9x14 character set is modified to provide an 8x14 character set.
             *      The second character generator defines 7x7 characters in an 8x8 character box. These generators contain
             *      dot patterns for 256 different characters. The character sets are identical to those provided by the
             *      IBM Monochrome Display Adapter and the IBM Color/Graphics Monitor Adapter."
             */
            Video.FONT = {
                MDA:    1,          // 9x14 monochrome font
                MDAD:   2,          // 18x28 monochrome font (this is the 9x14 font doubled)
                CGA:    3,          // 8x8 color font
                CGAD:   6,          // 16x16 color font (this is the 8x8 CGA font doubled)
                EGA:    5,          // 8x14 color font
                EGAD:   10,         // 16x28 color font (this is the 8x14 EGA font doubled)
                VGA:    7,          // 8x16 color font
                VGAD:   14          // 16x32 color font (this is the 8x16 VGA font doubled)
            };
            
            /*
             * For each video mode, we need to know the following pieces of information:
             *
             *      0: # of columns (nCols)
             *      1: # of rows (nRows)
             *      2: # cells per word (nCellsPerWord: # of characters or pixels per 16-bit word)
             *      3: # bytes of visible screen padding, if any (used for CGA graphics modes only)
             *      4: font ID (nFont: undefined if graphics mode)
             *
             * By calculating ([0] * [1]) / [2], we obtain the number of 16-bit words that mode actively displays;
             * for example, the amount of visible memory used by mode 0x04 is (320 * 200) / 4, or 16000.
             *
             * The MODES.CGA_40X25 modes specify FONT_CGA instead of FONT_CGAD because we don't automatically
             * load the FONT_CGAD unless the screen is large enough to accommodate it (see the fDoubleFont calculation).
             *
             * To compensate, we have code in setDimensions() that automatically switches to FONT_CGAD if it's loaded AND
             * the cell size warrants the larger font.  We could hard-code FONT_CGAD here, but then we'd always load it,
             * and it might not always be the best fit.
             */
            Video.aModeParms = [];                                                                              // Mode
            Video.aModeParms[Video.MODE.CGA_40X25]          = [ 40,  25,  1,   0, Video.FONT.CGA];              // 0x00
            Video.aModeParms[Video.MODE.CGA_80X25]          = [ 80,  25,  1,   0, Video.FONT.CGA];              // 0x02
            Video.aModeParms[Video.MODE.CGA_320X200]        = [320, 200,  8, 192];                              // 0x04
            Video.aModeParms[Video.MODE.CGA_640X200]        = [640, 200, 16, 192];                              // 0x06
            Video.aModeParms[Video.MODE.MDA_80X25]          = [ 80,  25,  1,   0, Video.FONT.MDA];              // 0x07
            Video.aModeParms[Video.MODE.EGA_320X200]        = [320, 200, 16];                                   // 0x0D
            Video.aModeParms[Video.MODE.EGA_640X200]        = [640, 200, 16];                                   // 0x0E
            Video.aModeParms[Video.MODE.EGA_640X350_MONO]   = [640, 350, 16];                                   // 0x0F
            Video.aModeParms[Video.MODE.EGA_640X350]        = [640, 350, 16];                                   // 0x10
            Video.aModeParms[Video.MODE.VGA_640X480_MONO]   = [640, 480, 16];                                   // 0x11
            Video.aModeParms[Video.MODE.VGA_640X480]        = [640, 480, 16];                                   // 0x12
            Video.aModeParms[Video.MODE.VGA_320X200]        = [320, 200, 2];                                    // 0x13
            
            Video.aModeParms[Video.MODE.CGA_40X25_BW]       = Video.aModeParms[Video.MODE.CGA_40X25];           // 0x01
            Video.aModeParms[Video.MODE.CGA_80X25_BW]       = Video.aModeParms[Video.MODE.CGA_80X25];           // 0x03
            Video.aModeParms[Video.MODE.CGA_320X200_BW]     = Video.aModeParms[Video.MODE.CGA_320X200];         // 0x05
            
            /*
             * MDA attribute byte definitions
             *
             * For MDA, only the following group of ATTR definitions are supported; any FGND/BGND value combinations
             * outside this group will be treated as "normal" (ATTR_FGND_WHITE | ATTR_BGND_BLACK).
             *
             * NOTE: Assuming MDA.MODE.BLINK_ENABLE is set (which the ROM BIOS sets by default), ATTR_BGND_BLINK will
             * cause the *foreground* element of the cell to blink, even though it is part of the *background* attribute bits.
             *
             * Regarding blink rate, characters are supposed to blink every 16 vertical frames, which amounts to .26667 blinks
             * per second, assuming a 60Hz vertical refresh rate.  So roughly every 267ms, we need to take care of any blinking
             * characters.  updateScreen() maintains a global count (cBlinkVisible) of blinking characters, to simplify the
             * decision of when to redraw the screen.
             */
            Video.ATTRS = {};
            Video.ATTRS.FGND_BLACK  = 0x00;
            Video.ATTRS.FGND_ULINE  = 0x01;
            Video.ATTRS.FGND_WHITE  = 0x07;
            Video.ATTRS.FGND_BRIGHT = 0x08;
            Video.ATTRS.BGND_BLACK  = 0x00;
            Video.ATTRS.BGND_WHITE  = 0x70;
            Video.ATTRS.BGND_BLINK  = 0x80;
            Video.ATTRS.BGND_BRIGHT = 0x80;
            Video.ATTRS.DRAW_FGND   = 0x100;        // this is an internal attribute bit, indicating the foreground should be drawn
            Video.ATTRS.DRAW_CURSOR = 0x200;        // this is an internal attribute bit, indicating when the cursor should be drawn
            
            /*
             * Here's a "cheat sheet" for attribute byte combinations that the IBM MDA could have supported.  The original (Aug 1981)
             * IBM Tech Ref is very terse and implies that only those marked with * are actually supported.
             *
             *     *0x00: non-display                       ATTR_FGND_BLACK |                    ATTR_BGND_BLACK
             *     *0x01: underline                         ATTR_FGND_ULINE |                    ATTR_BGND_BLACK
             *     *0x07: normal (white on black)           ATTR_FGND_WHITE |                    ATTR_BGND_BLACK
             *    **0x09: bright underline                  ATTR_FGND_ULINE | ATTR_FGND_BRIGHT | ATTR_BGND_BLACK
             *    **0x0F: bold (bright white on black)      ATTR_FGND_WHITE | ATTR_FGND_BRIGHT | ATTR_BGND_BLACK
             *     *0x70: reverse (black on white)          ATTR_FGND_BLACK |                  | ATTR_BGND_WHITE
             *      0x81: blinking underline                ATTR_FGND_ULINE |                  | ATTR_BGND_BLINK (or dim background if blink disabled)
             *    **0x87: blinking normal                   ATTR_FGND_WHITE |                  | ATTR_BGND_BLINK (or dim background if blink disabled)
             *      0x89: blinking bright underline         ATTR_FGND_ULINE | ATTR_FGND_BRIGHT | ATTR_BGND_BLINK (or dim background if blink disabled)
             *    **0x8F: blinking bold                     ATTR_FGND_WHITE | ATTR_FGND_BRIGHT | ATTR_BGND_BLINK (or dim background if blink disabled)
             *    **0xF0: blinking reverse                  ATTR_FGND_WHITE | ATTR_FGND_BRIGHT | ATTR_BGND_BLINK (or bright background if blink disabled)
             *
             * Unsupported attributes reportedly display as "normal" (ATTR_FGND_WHITE | ATTR_BGND_BLACK).  However, precisely which
             * attributes are unsupported on the MDA varies depending on the source. Some sources (eg, the IBM Tech Ref) imply that
             * only those marked by * are supported, while others (eg, some--but not all--Peter Norton guides) include those marked
             * by **, and still others include ALL the combinations listed above.
             *
             * Furthermore, according to http://www.seasip.info/VintagePC/mda.html:
             *
             *      Attributes 0x00, 0x08, 0x80 and 0x88 display as black space;
             *      Attribute 0x78 displays as dark green on green; depending on the monitor, there may be a green "halo" where the dark and bright bits meet;
             *      Attribute 0xF0 displays as a blinking version of 0x70 if blink enabled, and black on bright green otherwise;
             *      Attribute 0xF8 displays as a blinking version of 0x78 if blink enabled, and as dark green on bright green otherwise.
             *
             * However, I'm rather skeptical about supporting 0x78 and 0xF8, until I see some evidence that "bright black" actually
             * produced dark green on IBM equipment; it also doesn't sound like a combination many people would have used.  I'll probably
             * treat all of 0x08, 0x80 and 0x88 the same as 0x00, only because it seems logical (they're all "black on black" combinations
             * with only BRIGHT and/or BLINK bits set). Beyond that, I'll likely treat any other combination not listed in the above cheat
             * sheet as "normal".
             *
             * All the discrepancies/disagreements I've found are probably due in part to the proliferation of IBM and non-IBM MDA
             * cards, combined with IBM and non-IBM monochrome monitors, and people assuming that their non-IBM card and/or monitor
             * behaved exactly like the original IBM equipment, which probably wasn't true in all cases.
             *
             * I would like to limit my MDA display support to EXACTLY everything that the IBM MDA supported and nothing more, but
             * since there will be combinations that will logically "fall out" unless I specifically exclude them, it's very likely
             * this implementation will end up being a superset.
             */
            
            /*
             * CGA attribute byte definitions;  these simply extend the set of MDA attributes, with the exception of ATTR_FNGD_ULINE,
             * which the CGA can treat only as ATTR_FGND_BLUE.
             */
            Video.ATTRS.FGND_BLUE       = 0x01;
            Video.ATTRS.FGND_GREEN      = 0x02;
            Video.ATTRS.FGND_CYAN       = 0x03;
            Video.ATTRS.FGND_RED        = 0x04;
            Video.ATTRS.FGND_MAGENTA    = 0x05;
            Video.ATTRS.FGND_BROWN      = 0x06;
            
            Video.ATTRS.BGND_BLUE       = 0x10;
            Video.ATTRS.BGND_GREEN      = 0x20;
            Video.ATTRS.BGND_CYAN       = 0x30;
            Video.ATTRS.BGND_RED        = 0x40;
            Video.ATTRS.BGND_MAGENTA    = 0x50;
            Video.ATTRS.BGND_BROWN      = 0x60;
            
            /* For the MDA, the number of unique "colors" is 5, based on the following supported FGND attribute values:
             *
             *      0x0: black font (attribute value 0x8 is mapped to 0x0)
             *      0x1: green font with underline
             *      0x7: green font without underline (attribute values 0x2-0x6 are mapped to 0x7)
             *      0x9: bright green font with underline
             *      0xf: bright green font without underline (attribute values 0xa-0xe are mapped to 0xf)
             *
             * I'm still not sure about 0x8 (dark green?); for now, I'm mapping it to 0x0, but it may become a 6th supported color.
             *
             * MDA attributes form an index into aMDAColorMap, which produces an index (0-4) into aMDAColors.
             */
            Video.aMDAColors = [
                [0x00, 0x00, 0x00, 0xff],
                [0x7f, 0xc0, 0x7f, 0xff],
                [0x7f, 0xc0, 0x7f, 0xff],
                [0x7f, 0xff, 0x7f, 0xff],
                [0x7f, 0xff, 0x7f, 0xff]
            ];
            Video.aMDAColorMap = [0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4];
            
            Video.aCGAColors = [
                [0x00, 0x00, 0x00, 0xff],   // 0x00: ATTR_FGND_BLACK
                [0x00, 0x00, 0xaa, 0xff],   // 0x01: ATTR_FGND_BLUE
                [0x00, 0xaa, 0x00, 0xff],   // 0x02: ATTR_FGND_GREEN
                [0x00, 0xaa, 0xaa, 0xff],   // 0x03: ATTR_FGND_CYAN
                [0xaa, 0x00, 0x00, 0xff],   // 0x04: ATTR_FGND_RED
                [0xaa, 0x00, 0xaa, 0xff],   // 0x05: ATTR_FGND_MAGENTA
                [0xaa, 0x55, 0x00, 0xff],   // 0x06: ATTR_FGND_BROWN
                [0xaa, 0xaa, 0xaa, 0xff],   // 0x07: ATTR_FGND_WHITE                      (aka light gray)
                [0x55, 0x55, 0x55, 0xff],   // 0x08: ATTR_FGND_BLACK   | ATTR_FGND_BRIGHT (aka gray)
                [0x55, 0x55, 0xff, 0xff],   // 0x09: ATTR_FGND_BLUE    | ATTR_FGND_BRIGHT
                [0x55, 0xff, 0x55, 0xff],   // 0x0A: ATTR_FGND_GREEN   | ATTR_FGND_BRIGHT
                [0x55, 0xff, 0xff, 0xff],   // 0x0B: ATTR_FGND_CYAN    | ATTR_FGND_BRIGHT
                [0xff, 0x55, 0x55, 0xff],   // 0x0C: ATTR_FGND_RED     | ATTR_FGND_BRIGHT
                [0xff, 0x55, 0xff, 0xff],   // 0x0D: ATTR_FGND_MAGENTA | ATTR_FGND_BRIGHT
                [0xff, 0xff, 0x55, 0xff],   // 0x0E: ATTR_FGND_BROWN   | ATTR_FGND_BRIGHT (aka yellow)
                [0xff, 0xff, 0xff, 0xff]    // 0x0F: ATTR_FGND_WHITE   | ATTR_FGND_BRIGHT (aka white)
            ];
            
            Video.aCGAColorSet1 = [Video.ATTRS.FGND_GREEN, Video.ATTRS.FGND_RED,     Video.ATTRS.FGND_BROWN];
            Video.aCGAColorSet2 = [Video.ATTRS.FGND_CYAN,  Video.ATTRS.FGND_MAGENTA, Video.ATTRS.FGND_WHITE];
            
            /*
             * Here is the EGA BIOS default ATC palette register set for color text modes, from which getCardColors()
             * builds a default RGB array, similar to aCGAColors above.
             */
            Video.aEGAPalDef = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F];
            
            Video.aEGAByteToDW = [
                  0x00000000,   0x000000ff,   0x0000ff00,   0x0000ffff,
                  0x00ff0000,   0x00ff00ff,   0x00ffff00,   0x00ffffff,
                  0xff000000|0, 0xff0000ff|0, 0xff00ff00|0, 0xff00ffff|0,
                  0xffff0000|0, 0xffff00ff|0, 0xffffff00|0, 0xffffffff|0
            ];
            
            Video.aEGADWToByte = [];
            Video.aEGADWToByte[0x00000000] = 0x0;
            Video.aEGADWToByte[0x00000080] = 0x1;
            Video.aEGADWToByte[0x00008000] = 0x2;
            Video.aEGADWToByte[0x00008080] = 0x3;
            Video.aEGADWToByte[0x00800000] = 0x4;
            Video.aEGADWToByte[0x00800080] = 0x5;
            Video.aEGADWToByte[0x00808000] = 0x6;
            Video.aEGADWToByte[0x00808080] = 0x7;
            Video.aEGADWToByte[0x80000000|0] = 0x8;
            Video.aEGADWToByte[0x80000080|0] = 0x9;
            Video.aEGADWToByte[0x80008000|0] = 0xa;
            Video.aEGADWToByte[0x80008080|0] = 0xb;
            Video.aEGADWToByte[0x80800000|0] = 0xc;
            Video.aEGADWToByte[0x80800080|0] = 0xd;
            Video.aEGADWToByte[0x80808000|0] = 0xe;
            Video.aEGADWToByte[0x80808080|0] = 0xf;
            
            /**
             * Card(video, iCard, data, cbMemory)
             *
             * Creates an object representing an initial video card state;
             * can also restore a video card from state data created by saveCard().
             *
             * WARNING: Since Card objects are low-level objects that have no UI requirements,
             * they do not inherit from the Component class, so you should only use class methods
             * of Component, such as Component.assert(), or methods of the parent (video) object.
             *
             * @constructor
             * @param {Video} [video]
             * @param {number} [iCard] (see Video.CARD.*)
             * @param {Array|null} [data]
             * @param {number} [cbMemory] is specified if the card must allocate its own memory buffer
             */
            function Card(video, iCard, data, cbMemory)
            {
                /*
                 * If a card was originally not present (eg, EGA), then the state will be empty,
                 * so we need to detect that case and continue indicating that the card is not present.
                 */
                if (iCard !== undefined && (!data || data.length)) {
            
                    this.video = video;
            
                    var specs = Video.cardSpecs[iCard];
                    var nMonitorType = video.nMonitorType || specs[5];
            
                    if (!data || data.length < 6) {
                        data = [false, 0, null, null, 0, new Array(iCard < Video.CARD.EGA? Card.CRTC.TOTAL_REGS : Card.CRTC.EGA.TOTAL_REGS)];
                    }
            
                    /*
                     * If a Debugger is present, we want to stash a bit more info in each Card.
                     */
                    if (DEBUGGER) {
                        this.dbg = video.dbg;
                        this.type = specs[0];
                        this.port = specs[1];
                    }
            
                    this.nCard = iCard;
                    this.addrBuffer = specs[2];     // default (physical) video buffer address
                    this.sizeBuffer = specs[3];     // default video buffer length (this is the total size, not the current visible size; this.cbScreen is calculated on the fly to reflect the latter)
            
                    /*
                     * If no memory size is specified, then setMode() will use addMemory() to automatically add enough
                     * memory blocks to cover the video buffer specified above; otherwise, it instructs addMemory() to call
                     * getMemoryBuffer(), which will return a portion of the buffer (adwMemory) allocated below.  This allows
                     * a card like the EGA to move/resize its video buffer as needed, as well as giving it total control over
                     * the underlying memory.
                     */
                    this.cbMemory = cbMemory || specs[4];
            
                    /*
                     * All of our cardSpec video buffer sizes are based on the default text mode (eg, 4Kb for an MDA, 16Kb for
                     * a CGA), but for a card with 64Kb or more of memory (ie, any EGA card), the default text mode video buffer
                     * size should be dynamically recalculated as the smaller of: cbMemory divided by 4, or 32Kb.
                     */
                    if (this.cbMemory >= 0x10000 && this.addrBuffer >= 0xB0000) {
                        this.sizeBuffer = Math.min(this.cbMemory >> 2, 0x8000);
                    }
            
                    this.fActive    = data[0];
                    this.regMode    = data[1];      // see MDA.MODE* or CGA.MODE_* (use (MDA.MODE.HIRES | MDA.MODE.VIDEO_ENABLE | MDA.MODE.BLINK_ENABLE) if you want to test blinking immediately after the initial power-on reset)
                    this.regColor   = data[2];      // see CGA.COLOR.* (undefined on MDA)
                    this.regStatus  = data[3];      // see MDA.STATUS.* or CGA.STATUS.*
                    this.regCRTIndx = data[4] & 0xff;
                    this.regCRTPrev = (data[4] >> 8) & 0xff;
                    this.regCRTData = data[5];
                    this.nCRTCRegs  = Card.CRTC.TOTAL_REGS;
                    this.asCRTCRegs = DEBUGGER? Card.CRTC.REGS : [];
            
                    if (iCard >= Video.CARD.EGA) {
                        this.nCRTCRegs = Card.CRTC.EGA.TOTAL_REGS;
                        this.asCRTCRegs = DEBUGGER? Card.CRTC.EGA_REGS : [];
                        this.initEGA(data[6], nMonitorType);
                    }
            
                    var monitorSpecs = Video.monitorSpecs[nMonitorType] || Video.monitorSpecs[ChipSet.MONITOR.MONO];
            
                    var nCyclesPerSecond = video.cpu.getCyclesPerSecond();      // eg, 4772727
                    this.nCyclesHorzPeriod = (nCyclesPerSecond / monitorSpecs.nHorzPeriodsPerSec)|0;
                    this.nCyclesHorzActive = (this.nCyclesHorzPeriod * monitorSpecs.percentHorzActive / 100)|0;
                    this.nCyclesVertPeriod = (this.nCyclesHorzPeriod * monitorSpecs.nHorzPeriodsPerFrame)|0;
                    this.nCyclesVertActive = (this.nCyclesVertPeriod * monitorSpecs.percentVertActive / 100)|0;
                    this.nInitCycles = (data[7] || 0);
                }
            }
            
            /*
             * MDA Registers (ports 0x3B4, 0x3B5, 0x3B8, and 0x3BA)
             */
            Card.MDA = {
                CRTC: {
                    INDX: {
                        PORT:           0x3B4,      // NOTE: the low byte of this port address (0xB4) is mirrored at 40:0063 (0x0463)
                        MASK:           0x1F
                    },
                    DATA: {
                        PORT:           0x3B5
                    }
                },
                MODE: {
                    PORT:               0x3B8,      // Mode Select Register, aka CRT Control Port 1 (write-only); the BIOS mirrors this register at 40:0065 (0x0465)
                    HIRES:              0x01,
                    VIDEO_ENABLE:       0x08,
                    BLINK_ENABLE:       0x20
                },
                STATUS: {
                    PORT:               0x3BA,
                    HDRIVE:             0x01,
                    BWVIDEO:            0x08
                },
                /*
                 * TODO: Add support for parallel port(s) someday....
                 */
                PRT_DATA: {
                    PORT:               0x3BC
                },
                PRT_STATUS: {
                    PORT:               0x3BD
                },
                PRT_CTRL: {
                    PORT:               0x3BE
                }
            };
            
            /*
             * CGA Registers (ports 0x3D4, 0x3D5, 0x3D8, 0x3D9, and 0x3DA)
             */
            Card.CGA = {
                CRTC: {
                    INDX: {
                        PORT:           0x3D4,      // NOTE: the low byte of this port address (0xB4) is mirrored at 40:0063 (0x0463)
                        MASK:           0x1F
                    },
                    DATA: {
                        PORT:           0x3D5
                    }
                },
                MODE: {
                    PORT:               0x3D8,      // Mode Select Register (write-only); the BIOS mirrors this register at 40:0065 (0x0465)
                    _80X25:             0x01,
                    GRAPHIC_SEL:        0x02,
                    BW_SEL:             0x04,
                    VIDEO_ENABLE:       0x08,       // same as MDA.MODE.VIDEO_ENABLE
                    HIRES_BW:           0x10,
                    BLINK_ENABLE:       0x20        // same as MDA.MODE.BLINK_ENABLE
                },
                COLOR: {
                    PORT:               0x3D9,      // write-only
                    BORDER:             0x07,
                    BRIGHT:             0x08,
                    BGND_ALT:           0x10,       // alternate, intensified background colors in text mode
                    COLORSET2:          0x20        // selects aCGAColorSet2 colors for 320x200 graphics mode; aCGAColorSet1 otherwise
                },
                STATUS: {
                    PORT:               0x3DA,      // read-only; same for EGA (although the EGA calls this STATUS1, to distinguish it from STATUS0)
                    DISP_RETRACE:       0x01,
                    PEN_TRIGGER:        0x02,
                    PEN_ON:             0x04,
                    VERT_RETRACE:       0x08        // when set, this indicates the CGA is performing a vertical retrace
                },
                /*
                 * TODO: Add support for light pen port(s) someday....
                 */
                CLEAR_PEN: {
                    PORT:               0x3DB
                },
                PRESET_PEN: {
                    PORT:               0x3DC
                }
            };
            
            /*
             * Common CRT hardware registers (ports 0x3B4/0x3B5 or 0x3D4/0x3D5)
             *
             * NOTE: In this implementation, because we have to make at least two of the registers readable (CURSOR_ADDR_HI and CURSOR_ADDR_LO),
             * we end up making ALL the registers readable, otherwise we would have to explicitly block any register marked write-only.  I don't
             * think making the CRT registers fully readable presents any serious compatibility issues, and it actually offers some benefits
             * (eg, improved debugging).
             *
             * However, some things are broken: the (readable) light pen registers on the EGA are overloaded as (writable) vertical retrace
             * registers, so the vertical retrace registers cannot actually be read that way.  I'm sure the VGA solved that problem, but I haven't
             * looked into it yet.
             */
            Card.CRTC = {
                HORZ_TOTAL:             0x00,
                HORZ_DISP:              0x01,
                HORZ_SYNC_POS:          0x02,
                HORZ_SYNC_WIDTH:        0x03,
                VERT_TOTAL:             0x04,
                VERT_TOTAL_ADJ:         0x05,
                VERT_DISP_TOTAL:        0x06,
                VERT_SYNC_POS:          0x07,
                INTERLACE_POS:          0x08,
                MAX_SCAN_LINE:          0x09,
                CURSOR_START: {
                    INDX:               0x0A,
                    MASK:               0x1F,
                    /*
                     * I don't entirely understand these cursor blink control bits.  Here's what the MC6845 datasheet says:
                     *
                     *      Bit 5 is the blink timing control.  When bit 5 is low, the blink frequency is 1/16 of the vertical field rate,
                     *      and when bit 5 is high, the blink frequency is 1/32 of the vertical field rate.  Bit 6 is used to enable a blink.
                     */
                    BLINKON:            0x00,       // (supposedly, 0x04 has the same effect as 0x00)
                    BLINKOFF:           0x20,       // if blinking is disabled, the cursor is effectively hidden
                    BLINKFAST:          0x60        // default is 1/16 of the frame rate; this switches to 1/32 of the frame rate
                },
                CURSOR_END: {
                    INDX:               0x0B,
                    MASK:               0x1F
                },
                START_ADDR_HI:          0x0C,
                START_ADDR_LO:          0x0D,
                CURSOR_ADDR_HI:         0x0E,
                CURSOR_ADDR_LO:         0x0F,
                LIGHT_PEN_HI:           0x10,
                LIGHT_PEN_LO:           0x11,
                TOTAL_REGS:             0x12,       // total CRT registers on MDA/CGA
                EGA: {
                    HORZ_DISP_END:      0x01,
                    HORZ_BLANK_START:   0x02,
                    HORZ_BLANK_END:     0x03,
                    HORZ_RETRACE_START: 0x04,
                    HORZ_RETRACE_END:   0x05,
                    VERT_TOTAL:         0x06,
                    OVERFLOW: {
                        INDX:                   0x07,
                        VERT_TOTAL_BIT8:        0x01,   // bit 8 of register 0x06
                        VERT_DISP_END_BIT8:     0x02,   // bit 8 of register 0x12
                        VERT_RETRACE_START_BIT8:0x04,   // bit 8 of register 0x10
                        VERT_BLANK_START_BIT8:  0x08,   // bit 8 of register 0x15
                        LINE_COMPARE_BIT8:      0x10,   // bit 8 of register 0x18
                        CURSOR_START_BIT8:      0x20,   // bit 8 of register 0x0A (EGA only)
                        VERT_TOTAL_BIT9:        0x20,   // bit 9 of register 0x06 (VGA only)
                        VERT_DISP_END_BIT9:     0x40,   // bit 9 of register 0x12 (VGA only, unused on EGA)
                        VERT_RETRACE_START_BIT9:0x80    // bit 9 of register 0x10 (VGA only, unused on EGA)
                    },
                    PRESET_ROW_SCAN:    0x08,
                    /* EGA/VGA CRTC registers 0x09-0x0F are the same as the MDA/CGA CRTC registers defined above */
                    VERT_RETRACE_START: 0x10,
                    VERT_RETRACE_END:   0x11,
                    VERT_DISP_END:      0x12,
                    /*
                     * The OFFSET register (bits 0-7) specifies the logical line width of the screen.  The starting memory address
                     * for the next character row is larger than the current character row by two or four times this amount.
                     * The OFFSET register is programmed with a word address.  Depending on the method of clocking the CRT Controller,
                     * this word address is [effectively] either a word or double-word address. #IBMVGATechRef
                     */
                    OFFSET:             0x13,
                    UNDERLINE:          0x14,
                    VERT_BLANK_START:   0x15,
                    VERT_BLANK_END:     0x16,
                    MODE_CTRL: {
                        INDX:           0x17,
                        CMS:            0x01,       // Compatibility Mode Support (CGA A13 control)
                        SRSC:           0x02,       // Select Row Scan Counter
                        HRS:            0x04,       // Horizontal Retrace Select
                        CBT:            0x08,       // Count By Two
                        OC:             0x10,       // Output Control
                        AW:             0x20,       // Address Wrap (in Word mode, 1 maps A15 to A0 and 0 maps A13; use the latter when only 64Kb is installed)
                        BM:             0x40,       // Byte Mode (1 selects Byte Mode; 0 selects Word Mode)
                        HR:             0x80        // Hardware Reset
                    },
                    LINE_COMPARE:       0x18,
                    TOTAL_REGS:         0x19        // total CRT registers on EGA/VGA
                },
                ADDR_HI_MASK:           0x3F
            };
            
            if (DEBUGGER) {
                Card.CRTC.REGS      = ["HORZ_TOTAL","HORZ_DISP","HORZ_SYNC_POS","HORZ_SYNC_WIDTH","VERT_TOTAL","VERT_TOTAL_ADJ",
                                       "VERT_DISP","VERT_SYNC_POS","INTERLACE_POS","MAX_SCAN_LINE","CURSOR_START","CURSOR_END",
                                       "START_ADDR_HI","START_ADDR_LO","CURSOR_ADDR_HI","CURSOR_ADDR_LO","LIGHT_PEN_HI","LIGHT_PEN_LO"];
            
                Card.CRTC.EGA_REGS  = ["HORZ_TOTAL","HORZ_DISP_END","HORZ_BLANK_START","HORZ_BLANK_END","HORZ_RETRACE_START","HORZ_RETRACE_END",
                                       "VERT_TOTAL","OVERFLOW","PRESET_ROW_SCAN","MAX_SCAN_LINE","CURSOR_START","CURSOR_END",
                                       "START_ADDR_HI","START_ADDR_LO","CURSOR_ADDR_HI","CURSOR_ADDR_LO","VERT_RETRACE_START","VERT_RETRACE_END",
                                       "VERT_DISP_END","OFFSET","UNDERLINE","VERT_BLANK_START","VERT_BLANK_END","MODE_CTRL","LINE_COMPARE"];
            }
            
            /*
             * EGA/VGA Input Status 1 Register (port 0x3DA)
             *
             * STATUS1 bit 0 has confusing documentation: the EGA Tech Ref says "Logical 0 indicates the CRT raster is in a
             * horizontal or vertical retrace interval", whereas the VGA Tech Ref says "Logical 1 indicates a horizontal or
             * vertical retrace interval," but then clarifies: "This bit is the real-time status of the INVERTED display enable
             * signal".  So, instead of calling bit 0 DISP_ENABLE (or more precisely, DISP_ENABLE_INVERTED), it's simply DISP_RETRACE.
             *
             * STATUS1 diagnostic bits 5 and 4 are set according to the Card.ATC.PLANES.MUX bits:
             *
             *      MUX     Bit 5   Bit 4
             *      ---     ----    ----
             *      00:     Red     Blue
             *      01:     SecBlue Green
             *      10:     SecRed  SecGreen
             *      11:     unused  unused
             */
            Card.STATUS1 = {
                PORT:                   0x3DA,
                DISP_RETRACE:           0x01,       // bit 0: logical OR of horizontal and vertical retrace
                VERT_RETRACE:           0x08,       // bit 3: set during vertical retrace interval
                DIAGNOSTIC:             0x30,       // bits 5,4 are controlled by the Card.ATC.PLANES.MUX bits
                RESERVED:               0xC6
            };
            
            /*
             * EGA/VGA Attribute Controller Registers (port 0x3C0: regATCIndx and regATCData)
             *
             * The current ATC INDX value is stored in cardEGA.regATCIndx (including the Card.ATC.INDX_ENABLE bit), and the
             * ATC DATA values are stored in cardEGA.regATCData.  The state of the ATC INDX/DATA flip-flop is stored in fATCData.
             *
             * Note that the ATC palette registers (0x0-0xf) all use the following 6 bit assignments, with bits 6 and 7 unused:
             *
             *      0: Blue
             *      1: Green
             *      2: Red
             *      3: SecBlue (or mono video)
             *      4: SecGreen (or intensity)
             *      5: SecRed
             */
            Card.ATC = {
                PORT:                   0x3C0,      // ATC Index/Data Port
                INDX_MASK:              0x1F,
                INDX_PAL_ENABLE:        0x20,       // must be clear when loading palette registers
                PALETTE: {
                    INDX:               0x00,       // 16 registers: 0x00 - 0x0F
                    BLUE:               0x01,
                    GREEN:              0x02,
                    RED:                0x04,
                    SECBLUE:            0x08,
                    BRIGHT:             0x10,       // NOTE: The IBM EGA manual (p.56) also calls this the "intensity" bit
                    SECGREEN:           0x10,
                    SECRED:             0x20
                },
                PALETTE_REGS:           0x10,       // 16 total palette registers
                MODE: {
                    INDX:               0x10,       // ATC Mode Control Register
                    GRAPHICS:           0x01,       // bit 0: set for graphics mode, clear for alphanumeric mode
                    MONOEM:             0x02,       // bit 1: set for monochrome emulation mode, clear for color emulation
                    TEXTGRCC:           0x04,       // bit 2: set for line graphics in character codes 0xC0-0xDF, clear otherwise
                    TEXTBLINK:          0x08,       // bit 3: set for text blink attribute, clear for background intensity attribute
                    RESERVED:           0x10,       // bit 4: reserved
                    PANCOMPAT:          0x20,       // bit 5: set for pixel-panning compatibility
                    PELWIDTH:           0x40,       // bit 6: set for 256-color modes, clear for all other modes
                    COLORSEL:           0x80        // bit 7: set for P5,P4 mapped to bits 1,0 of the Color Select register
                },
                OVERSCAN: {
                    INDX:               0x11        // ATC Overscan Color Register
                },
                PLANES: {
                    INDX:               0x12,       // ATC Color Plane Enable Register
                    MASK:               0x0F,
                    MUX:                0x30,
                    RESERVED:           0xC0
                },
                HORZPAN: {
                    INDX:               0x13,       // ATC Horizontal PEL Panning Register
                    SHIFT_LEFT:         0x0F        // bits 0-3 indicate # of pixels to shift left
                },
                COLORSEL: {
                    INDX:               0x14,       // ATC Color Select Register (VGA only)
                    S_COLOR_7:          0x08,       // selects bit 7 of 8-bit color values sent to DAC (except 256-color modes)
                    S_COLOR_6:          0x04,       // selects bit 6 of 8-bit color values sent to DAC (except 256-color modes)
                    S_COLOR_5:          0x02,       // selects bit 5 of 8-bit color values sent to DAC
                    S_COLOR_4:          0x01        // selects bit 4 of 8-bit color values sent to DAC
                },
                TOTAL_REGS:             0x14
            };
            
            if (DEBUGGER) {
                Card.ATC.REGS = ["PAL00","PAL01","PAL02","PAL03","PAL04","PAL05","PAL06","PAL07",
                                 "PAL08","PAL09","PAL0A","PAL0B","PAL0C","PAL0D","PAL0E","PAL0F",
                                 "MODE","OVERSCAN","PLANES","HORZPAN"];
            }
            
            /*
             * EGA/VGA Feature Control Register (port 0x3BA or 0x3DA: regFeat)
             *
             * The EGA BIOS writes 0x1 to Card.FEAT_CTRL.BITS and reads Card.STATUS0.FEAT, then writes 0x2 to
             * Card.FEAT_CTRL.BITS and reads Card.STATUS0.FEAT.  The bits from the first and second reads are shifted
             * into the high nibble of the byte at 40:88h.
             */
            Card.FEAT_CTRL = {
                PORT_MONO:              0x3BA,      // write port address (other than the two bits below, the rest are reserved and/or unused)
                PORT_COLOR:             0x3DA,      // write port address (other than the two bits below, the rest are reserved and/or unused)
                PORT_READ:              0x3CA,      // read port address (VGA only)
                BITS:                   0x03        // feature control bits
            };
            
            /*
             * EGA/VGA Miscellaneous Output Register (port 0x3C2: regMisc)
             */
            Card.MISC = {
                PORT_WRITE:             0x3C2,      // write port address (EGA and VGA)
                PORT_READ:              0x3CC,      // read port addresss (VGA only)
                IO_SELECT:              0x01,       // 0 sets CRT ports to 0x3Bn, 1 sets CRT ports to 0x3Dn
                ENABLE_RAM:             0x02,       // 0 disables video RAM, 1 enables
                CLOCK_SELECT:           0x0C,       // 0x0: 14Mhz I/O clock, 0x4: 16Mhz on-board clock, 0x8: external clock, 0xC: unused
                DISABLE_DRV:            0x10,       // 0 activates internal video drivers, 1 activates feature connector direct drive outputs
                PAGE_ODD_EVEN:          0x20,       // 0 selects the low 64Kb page of video RAM for text modes, 1 selects the high page
                HORZ_POLARITY:          0x40,       // 0 selects positive horizontal retrace
                VERT_POLARITY:          0x80        // 0 selects positive vertical retrace
            };
            
            /*
             * EGA/VGA Input Status 0 Register (port 0x3C2: regStatus0)
             */
            Card.STATUS0 = {
                PORT:                   0x3C2,      // read-only (aka STATUS0, to distinguish it from PORT_CGA_STATUS)
                RESERVED:               0x0F,
                SWSENSE:                0x10,
                SWSENSE_SHIFT:          4,
                FEAT:                   0x60,       // VGA: reserved
                INTERRUPT:              0x80        // 1: video is being displayed; 0: vertical retrace is occurring
            };
            
            /*
             * VGA Subsystem Enable Register (port 0x3C3: regVGAEnable)
             */
            Card.VGA_ENABLE = {
                PORT:                   0x3C3,
                ENABLED:                0x01,       // when set, all VGA I/O and memory decoding is enabled; otherwise disabled (TODO: Implement)
                RESERVED:               0xFE
            };
            
            /*
             * EGA/VGA Sequencer Registers (ports 0x3C4/0x3C5: regSEQIndx and regSEQData)
             */
            Card.SEQ = {
                INDX: {
                    PORT:               0x3C4,      // Sequencer Index Port
                    MASK:               0x07
                },
                DATA: {
                    PORT:               0x3C5       // Sequencer Data Port
                },
                RESET: {
                    INDX:               0x00,       // Sequencer Reset Register
                    ASYNC:              0x01,
                    SYNC:               0x02
                },
                CLOCKING: {
                    INDX:               0x01,       // Sequencer Clocking Mode Register
                    DOTS8:              0x01,       // 1: 8 dots; 0: 9 dots
                    BANDWIDTH:          0x02,       // 0: CRTC has access 4 out of every 5 cycles (for high-res modes); 1: CRTC has access 2 out of 5 (VGA: reserved)
                    SHIFTLOAD:          0x04,
                    DOTCLOCK:           0x08,       // 0: normal dot clock; 1: master clock divided by two (used for 320x200 modes: 0, 1, 4, 5, and D)
                    SHIFT4:             0x10,       // VGA only
                    SCREEN_OFF:         0x20,       // VGA only
                    RESERVED:           0xC0
                },
                MAPMASK: {
                    INDX:               0x02,       // Sequencer Map Mask Register
                    PL0:                0x01,
                    PL1:                0x02,
                    PL2:                0x04,
                    PL3:                0x08,
                    MAPS:               0x0F,
                    RESERVED:           0xF0
                },
                CHARMAP: {
                    INDX:               0x03,       // Sequencer Character Map Select Register
                    SELB:               0x03,       // 0x0: 1st 8Kb of plane 2; 0x1: 2nd 8Kb; 0x2: 3rd 8Kb; 0x3: 4th 8Kb
                    SELA:               0x0C,       // 0x0: 1st 8Kb of plane 2; 0x4: 2nd 8Kb; 0x8: 3rd 8Kb; 0xC: 4th 8Kb
                    SELB_HIGH:          0x10,       // VGA only
                    SELA_HIGH:          0x20        // VGA only
                },
                MEMMODE: {
                    INDX:               0x04,       // Sequencer Memory Mode Register
                    ALPHA:              0x01,       // set for alphanumeric (A/N) mode, clear for graphics (APA or "All Points Addressable") mode (EGA only)
                    EXT:                0x02,       // set if memory expansion installed, clear if not installed
                    SEQUENTIAL:         0x04,       // set for sequential memory access, clear for mapping even addresses to planes 0/2, odd addresses to planes 1/3
                    CHAIN4:             0x08        // VGA only: set to select memory map (plane) based on low 2 bits of address
                },
                TOTAL_REGS:             0x05
            };
            
            if (DEBUGGER) Card.SEQ.REGS = ["RESET","CLOCKING","MAPMASK","CHARMAP","MEMMODE"];
            
            /*
             * VGA Digital-to-Analog Converter (DAC) Registers (regDACMask, regDACState, regDACAddr, and regDACData)
             *
             * To write DAC data, write an address to DAC.ADDR.PORT_WRITE, then write 3 bytes to DAC.DATA.PORT; the low 6 bits
             * of each byte will be concatenated to form an 18-bit DAC value (red is least significant, followed by green, then blue).
             * When the final byte is received, the 18-bit DAC value is updated and regDACAddr is auto-incremented.
             *
             * To read DAC data, the process is similar, but the initial address is written to DAC.ADDR.PORT_READ instead.
             *
             * DAC.STATE.PORT and DAC.ADDR.PORT_WRITE can be read at any time and will not interfere with a read or write operation
             * in progress.  To prevent "snow", reading or writing DAC values should be limited to retrace intervals (see regStatus1),
             * or by using the SCREEN_OFF bit in the SEQ.CLOCKING register.
             */
            Card.DAC = {
                MASK: {
                    PORT:               0x3C6,      // initialized to 0xFF and should not be changed
                    DEFAULT:            0xFF
                },
                STATE: {
                    PORT:               0x3C7,
                    MODE_WRITE:         0x00,       // the DAC is in write mode if bits 0 and 1 are clear
                    MODE_READ:          0x03        // the DAC is in read mode if bits 0 and 1 are set
                },
                ADDR: {
                    PORT_READ:          0x3C7,      // write to initiate a read
                    PORT_WRITE:         0x3C8       // write to initiate a write; read to determine the current ADDR
                },
                DATA: {
                    PORT:               0x3C9
                },
                TOTAL_REGS:             0x100
            };
            
            /*
             * EGA/VGA Graphics Controller Registers (ports 0x3CE/0x3CF: regGRCIndx and regGRCData)
             *
             * The VGA added Write Mode 3, which is described as follows:
             *
             *      "Each map is written with 8 bits of the value contained in the Set/Reset register for that map
             *      (the Enable Set/Reset register has no effect). Rotated system microprocessor data is ANDed with the
             *      Bit Mask register data to form an 8-bit value that performs the same function as the Bit Mask register
             *      does in write modes 0 and 2."
             */
            Card.GRC = {
                POS1_PORT:              0x3CC,      // EGA only, write-only
                POS2_PORT:              0x3CA,      // EGA only, write-only
                INDX: {
                    PORT:               0x3CE,      // GRC Index Port
                    MASK:               0x0F
                },
                DATA: {
                    PORT:               0x3CF       // GRC Data Port
                },
                SRESET: {
                    INDX:               0x00        // GRC Set/Reset Register (write-only; each bit used only if WRITE.MODE0 and corresponding ESR bit set)
                },
                ESRESET: {
                    INDX:               0x01        // GRC Enable Set/Reset Register
                },
                COLORCMP: {
                    INDX:               0x02        // GRC Color Compare Register
                },
                DATAROT: {
                    INDX:               0x03,       // GRC Data Rotate Register
                    COUNT:              0x07,
                    AND:                0x08,
                    OR:                 0x10,
                    XOR:                0x18,
                    FUNC:               0x18,
                    MASK:               0x1F
                },
                READMAP: {
                    INDX:               0x04,       // GRC Read Map Select Register
                    NUM:                0x03
                },
                MODE: {
                    INDX:               0x05,       // GRC Mode Register
                    WRITE: {
                        MODE0:          0x00,       // write mode 0: each plane written with CPU data, rotated as needed, unless SR enabled
                        MODE1:          0x01,       // write mode 1: each plane written with contents of the processor latches (loaded by a read)
                        MODE2:          0x02,       // write mode 2: memory plane N is written with 8 bits matching data bit N
                        MODE3:          0x03,       // write mode 3: VGA only
                        MASK:           0x03
                    },
                    TEST:               0x04,
                    READ: {
                        MODE0:          0x00,       // read mode 0: read map mode
                        MODE1:          0x08,       // read mode 1: color compare mode
                        MASK:           0x08
                    },
                    EVENODD:            0x10,
                    SHIFT:              0x20,
                    COLOR256:           0x40        // VGA only
                },
                MISC: {
                    INDX:               0x06,       // GRC Miscellaneous Register
                    GRAPHICS:           0x01,       // set for graphics mode addressing, clear for text mode addressing
                    CHAIN:              0x02,       // set for odd/even planes selected with odd/even values of the processor AO bit
                    MAPMEM:             0x0C,       //
                    MAPA0128:           0x00,       //
                    MAPA064:            0x04,       //
                    MAPB032:            0x08,       //
                    MAPB832:            0x0C        //
                },
                COLORDC: {
                    INDX:               0x07        // GRC Color "Don't Care" Register
                },
                BITMASK: {
                    INDX:               0x08        // GRC Bit Mask Register
                },
                TOTAL_REGS:             0x09
            };
            
            if (DEBUGGER) Card.GRC.REGS = ["SRESET","ESRESET","COLORCMP","DATAROT","READMAP","MODE","MISC","COLORDC","BITMASK"];
            
            /*
             * EGA Memory Access Functions
             *
             * Here's where we define all the getMemoryAccess() functions that know how to deal with "planar" EGA memory,
             * which consists of 32-bit values for every byte of address space, allowing us to internally store plane 0
             * bytes in bits 0-7, plane 1 bytes in bits 8-15, plane 2 bytes in bits 16-23, and plane 3 bytes in bits 24-31.
             *
             * All our functions have slightly more overhead than the standard Bus memory access functions, because the
             * offset (off) parameter is block-relative, which we must transform into a buffer-relative offset.  Fortunately,
             * all our Memory objects know this and have already recorded their buffer-relative offset in "this.offset".
             *
             * Also, the EGA includes a set of latches, one for each plane, which must be updated on most reads/writes;
             * we rely on the Memory object's "this.controller" property to give us access to the Card's state.
             *
             * And we take a little extra time to conditionally set fDirty on writes, meaning if a write did not actually
             * change the value of the memory, we will not set fDirty.  The default write functions in memory.js don't take
             * that performance hit, but here, it may be worthwhile, because if it results in fewer dirty blocks, display
             * updates may be faster.
             *
             * Note that we don't have to worry about dealing with word accesses that straddle block boundaries, because
             * the Bus component automatically breaks those accesses into separate byte requests.  Similarly, byte and word
             * values for the write functions have already been pre-masked by the Bus component to 8 and 16 bits, respectively.
             *
             * My motto: Be paranoid, but also be careful not to do any more work than you absolutely have to.
             *
             *
             * CGA Emulation on the EGA
             *
             * Modes 4/5 (320x200 low-res graphics) emulate the same buffer format that the CGA uses.  To recap: 1 byte contains
             * 4 pixels (pixel 0 in bits 7-6, pixel 1 in bits 5-4, etc), and thus one row of pixels is 80 (0x50) bytes long.
             * Moreover, all even rows are stored in the first 8K of the video buffer (at 0xB8000), and all odd rows are stored
             * in the second 8K (at 0xBA000).  Of each 8K, only 8000 (0x1F40) bytes are used (80 bytes X 100 rows); the remaining
             * 192 bytes of each 8K are unused.
             *
             * For these modes, the EGA's GRC.MODE is programmed with 0x30: Card.GRC.MODE.EVENODD and Card.GRC.MODE.SHIFT.
             * The latter claims to work by forming each 2-bit pixel with even bits from plane 0 and odd bits from plane 1;
             * however, I'm unclear how that works if even bytes are only written to plane 0 and odd bytes are only written to
             * plane 1, as Card.GRC.MODE.EVENODD implies, because plane 0 would never have any bits for the odd bytes, and
             * plane 1 would never have any bits for the even bytes.  TODO: Figure this out.
             *
             *
             * Even/Odd Memory Access Functions
             *
             * The "EVENODD" functions deal with the EGA's default text-mode addressing, where EVEN addresses are mapped to
             * plane 0 (and 2) and ODD addresses are mapped to plane 1 (and 3).  This occurs when SEQ.MEMMODE.SEQUENTIAL
             * is clear (and GRC.MODE.EVENODD is set), turning address bit 0 (A0) into a "plane select" bit.  Whether A0 is
             * also used as a memory address bit depends on CRTC.MODE_CTRL.BM: if it's set, then we're in "Byte Mode" and A0 is
             * used as-is; if it's clear, then we're in "Word Mode", and either A15 (when CRTC.MODE_CTRL.AW is set) or A13
             * (when CRTC.MODE_CTRL.AW is clear, typically when only 64Kb of EGA memory is installed) is substituted for A0.
             *
             * Note that A13 remains clear until addresses reach 8K, at which point we've spanned 32Kb of EGA memory, so it makes
             * sense to propagate A13 to A0 at that point, so that the next 8K of addresses start using ODD instead of EVEN bytes,
             * and no memory is wasted on a 64Kb EGA card.
             *
             * These functions, however, don't yet deal with all those subtleties: A0 is currently used only as a "plane select"
             * bit and set to zero for addressing purposes, meaning that only the EVEN bytes in EGA memory will ever be used.
             * TODO: Implement the subtleties.
             */
            
            /*
             * Values returned by getAccess(); the high byte describes the read mode, and the low byte describes the write mode.
             *
             * V2 should never appear in any values used by getAccess() or setAccess()/setMemoryAccess(); the sole purpose of V2 is
             * to distinguish newer (V2) access values from older (V1) access values in saved contexts.  It's set when the context
             * is saved, and cleared when the context is restored.  Thus, if V2 is not set on restore, we assume we're dealing with
             * a V1 value, so we run it through the V1 table (below) to produce a V2 value.  Hopefully at some point V1 contexts
             * can be deprecated, and the V2 bit can be eliminated/repurposed.
             */
            Card.ACCESS = {
                READ: {                             // READ values are designed to be OR'ed with WRITE values
                    MODE0:              0x0400,
                    MODE1:              0x0500,
                    EVENODD:            0x1000,
                    CHAIN4:             0x4000,
                    MASK:               0xFF00
                },
                WRITE: {                            // and WRITE values are designed to be OR'ed with READ values
                    MODE0:              0x0000,
                    MODE1:              0x0001,
                    MODE2:              0x0002,
                    MODE3:              0x0003,     // VGA only
                    CHAIN4:             0x0004,
                    EVENODD:            0x0010,
                    ROT:                0x0020,
                    AND:                0x0060,
                    OR:                 0x00A0,
                    XOR:                0x00E0,
                    MASK:               0x00F7      // 0xF7 ensures we strip any lingering V2 bit from the value
                },
                V2:                     0x0008      // this is a signature bit used ONLY to differentiate V2 access values from V1
            };
            
            /*
             * Table of older (V1) access values and their corresponding new values; the new values are similar but a little
             * more rational (for example, using common values for all the logical operations across modes).
             */
            Card.ACCESS.V1 = [];
            Card.ACCESS.V1[0x0002] = Card.ACCESS.READ.MODE0;
            Card.ACCESS.V1[0x0003] = Card.ACCESS.READ.MODE0 | Card.ACCESS.READ.EVENODD;
            Card.ACCESS.V1[0x0010] = Card.ACCESS.READ.MODE1;
            Card.ACCESS.V1[0x0200] = Card.ACCESS.WRITE.MODE0;
            Card.ACCESS.V1[0x0400] = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.ROT;
            Card.ACCESS.V1[0x0600] = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.AND;
            Card.ACCESS.V1[0x0A00] = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.OR;
            Card.ACCESS.V1[0x0E00] = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.XOR;
            Card.ACCESS.V1[0x0300] = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.EVENODD;
            Card.ACCESS.V1[0x1000] = Card.ACCESS.WRITE.MODE1;
            Card.ACCESS.V1[0x2000] = Card.ACCESS.WRITE.MODE2;
            Card.ACCESS.V1[0x6000] = Card.ACCESS.WRITE.MODE2 | Card.ACCESS.WRITE.AND;
            Card.ACCESS.V1[0xA000] = Card.ACCESS.WRITE.MODE2 | Card.ACCESS.WRITE.OR;
            Card.ACCESS.V1[0xE000] = Card.ACCESS.WRITE.MODE2 | Card.ACCESS.WRITE.XOR;
            
            /**
             * readByteMode0(off, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} [addr]
             * @return {number}
             */
            Card.ACCESS.readByteMode0 = function readByteMode0(off, addr)
            {
                off += this.offset;
                var dw = this.controller.latches = this.adw[off];
                return (dw >> this.controller.nReadMapShift) & 0xff;
            };
            
            /**
             * readByteMode0Chain4(off, addr)
             *
             * See writeByteMode0Chain4 for a description of how writes are distributed across planes.
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} [addr]
             * @return {number}
             */
            Card.ACCESS.readByteMode0Chain4 = function readByteMode0Chain4(off, addr)
            {
                var idw = (off & ~0x3) + this.offset;
                var shift = (off & 0x3) << 3;
                return ((this.controller.latches = this.adw[idw]) >> shift) & 0xff;
            };
            
            /**
             * readByteMode0EvenOdd(off, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} [addr]
             * @return {number}
             */
            Card.ACCESS.readByteMode0EvenOdd = function readByteMode0EvenOdd(off, addr)
            {
                /*
                 * TODO: As discussed in getAccess(), we need to run some tests on real EGA/VGA hardware to determine
                 * exactly what gets latched (ie, from which address) when EVENODD is in effect.  Whatever we learn may
                 * also dictate a special EVENODD function for READ.MODE1 as well.
                 */
                off += this.offset;
                var idw = off & ~0x1;
                var dw = this.controller.latches = this.adw[idw];
                return (!(off & 1)? dw : (dw >> 8)) & 0xff;
            };
            
            /**
             * readByteMode1(off, addr)
             *
             * This mode requires us to step through each of the 8 sets of 4 bits in the specified DWORD of video memory,
             * returning a 1 wherever all 4 match the Color Compare (COLORCMP) Register and a 0 otherwise.  An added wrinkle
             * is that the Color Don't Care (COLORDC) Register can specify that any/all/none of the 4 bits must be ignored.
             *
             * We perform the comparison from most to least significant bit, because that matches how the nColorCompare and
             * nColorDontCare masks are initialized; we could have gone either way, but this is more consistent with the rest
             * of the component (eg, pixels are drawn across the screen from left to right, starting with the most significant
             * bit of each byte).
             *
             * Also note that, while not well-documented, this mode also affects the internal latches, so we make sure those
             * are updated as well.
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} [addr]
             * @return {number}
             */
            Card.ACCESS.readByteMode1 = function readByteMode1(off, addr)
            {
                off += this.offset;
                var dw = this.controller.latches = this.adw[off];
                /*
                 * Minor optimization: we could pre-mask nColorCompare with nColorDontCare, whenever either register
                 * is updated, but that's a drop in the bucket compared to all the other work this function must do.
                 */
                var mask = this.controller.nColorDontCare;
                var color = this.controller.nColorCompare & mask;
                var b = 0, bit = 0x80;
                while (bit) {
                    if ((dw & mask) == color) b |= bit;
                    color >>>= 1;  mask >>>= 1;  bit >>= 1;
                }
                return b;
            };
            
            /**
             * writeByteMode0(off, b, addr)
             *
             * Supporting Set/Reset means that for every plane for which Set/Reset is enabled, we must
             * replace the corresponding byte in dw with a byte of zeros or ones.  This is accomplished with
             * nSetMapMask, nSetMapData, and nSetMapBits.  nSetMapMask is the inverse of the ESRESET bits,
             * because we use it to mask the processor data, nSetMapData records the desired SRESET bits, and
             * nSetMapBits contains the bits to replace those that we masked in the processor data.
             *
             * We could have done this:
             *
             *      dw = (dw & this.controller.nSetMapMask) | (this.controller.nSetMapData & ~this.controller.nSetMapMask)
             *
             * but by maintaining nSetMapBits equal to (nSetMapData & ~nSetMapMask), we are able to make the writes
             * slightly more efficient.
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0 = function writeByteMode0(off, b, addr)
            {
                var idw = off + this.offset;
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                dw = (dw & this.controller.nSetMapMask) | this.controller.nSetMapBits;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode0Chain4(off, b, addr)
             *
             * This is how we distribute a write of 0xff across the address space to the planes, assuming that
             * all planes are enabled by the Sequencer's MAPMASK register (which we assume still controls access):
             *
             *      off     idw     adw[idw]
             *      ------  ------  ----------
             *      0x0000: 0x0000  0x000000ff
             *      0x0001: 0x0000  0x0000ff00
             *      0x0002: 0x0000  0x00ff0000
             *      0x0003: 0x0000  0xff000000
             *      0x0004: 0x0001  0x000000ff
             *      0x0005: 0x0001  0x0000ff00
             *      0x0006: 0x0001  0x00ff0000
             *      0x0007: 0x0001  0xff000000
             *      ...
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0Chain4 = function writeByteMode0Chain4(off, b, addr)
            {
                var idw = (off & ~0x3) + this.offset;
                var shift = (off & 0x3) << 3;
                /*
                 * TODO: Consider adding a separate "unmasked" version of this CHAIN4 write function whenever nSeqMapMask is -1
                 * (or removing nSeqMapMask from the equation altogether, if no one uses CHAIN4 with anything less than all planes enabled).
                 */
                var dw = ((b << shift) & this.controller.nSeqMapMask) | (this.adw[idw] & ~((0xff << shift) & this.controller.nSeqMapMask));
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode0EvenOdd(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0EvenOdd = function writeByteMode0EvenOdd(off, b, addr)
            {
                off += this.offset;
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                //
                // When even/odd addressing is enabled, nSeqMapMask must be cleared for planes 1
                // and 3 if the address is even, and cleared for planes 0 and 2 if the address is odd.
                //
                var idw = off & ~0x1;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                var maskMaps = this.controller.nSeqMapMask & (idw == off? 0x00ff00ff : (0xff00ff00|0));
                dw = (dw & maskMaps) | (this.adw[idw] & ~maskMaps);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode0Rot(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0Rot = function writeByteMode0Rot(off, b, addr)
            {
                var idw = off + this.offset;
                b = ((b >> this.controller.nDataRotate) | (b << (8 - this.controller.nDataRotate)) & 0xff);
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                dw = (dw & this.controller.nSetMapMask) | this.controller.nSetMapBits;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode0And(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0And = function writeByteMode0And(off, b, addr)
            {
                var idw = off + this.offset;
                b = ((b >> this.controller.nDataRotate) | (b << (8 - this.controller.nDataRotate)) & 0xff);
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                dw = (dw & this.controller.nSetMapMask) | this.controller.nSetMapBits;
                dw &= this.controller.latches;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode0Or(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0Or = function writeByteMode0Or(off, b, addr)
            {
                var idw = off + this.offset;
                b = ((b >> this.controller.nDataRotate) | (b << (8 - this.controller.nDataRotate)) & 0xff);
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                dw = (dw & this.controller.nSetMapMask) | this.controller.nSetMapBits;
                dw |= this.controller.latches;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode0Xor(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode0Xor = function writeByteMode0Xor(off, b, addr)
            {
                var idw = off + this.offset;
                b = ((b >> this.controller.nDataRotate) | (b << (8 - this.controller.nDataRotate)) & 0xff);
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                dw = (dw & this.controller.nSetMapMask) | this.controller.nSetMapBits;
                dw ^= this.controller.latches;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode1(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (ignored; the EGA latches provide the source data)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode1 = function writeByteMode1(off, b, addr)
            {
                var idw = off + this.offset;
                var dw = (this.adw[idw] & ~this.controller.nSeqMapMask) | (this.controller.latches & this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode1EvenOdd(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (ignored; the EGA latches provide the source data)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode1EvenOdd = function writeByteMode1EvenOdd(off, b, addr)
            {
                /*
                 * TODO: As discussed in getAccess(), we need to run some tests on real EGA/VGA hardware to
                 * determine exactly where latches are written (ie, to which address) when EVENODD is in effect.
                 */
                off += this.offset;
                //
                // When even/odd addressing is enabled, nSeqMapMask must be cleared for planes 1 and 3 if
                // the address is even, and cleared for planes 0 and 2 if the address is odd.
                //
                var idw = off & ~0x1;
                var maskMaps = this.controller.nSeqMapMask & (idw == off? 0x00ff00ff : (0xff00ff00|0));
                var dw = (this.adw[idw] & ~maskMaps) | (this.controller.latches & maskMaps);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode2(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode2 = function writeByteMode2(off, b, addr)
            {
                var idw = off + this.offset;
                var dw = Video.aEGAByteToDW[b & 0xf];
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode2And(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode2And = function writeByteMode2And(off, b, addr)
            {
                var idw = off + this.offset;
                var dw = Video.aEGAByteToDW[b & 0xf];
                dw &= this.controller.latches;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode2Or(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode2Or = function writeByteMode2Or(off, b, addr)
            {
                var idw = off + this.offset;
                var dw = Video.aEGAByteToDW[b & 0xf];
                dw |= this.controller.latches;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode2Xor(off, b, addr)
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode2Xor = function writeByteMode2Xor(off, b, addr)
            {
                var idw = off + this.offset;
                var dw = Video.aEGAByteToDW[b & 0xf];
                dw ^= this.controller.latches;
                dw = (dw & this.controller.nBitMapMask) | (this.controller.latches & ~this.controller.nBitMapMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /**
             * writeByteMode3(off, b, addr)
             *
             * In MODE3, Set/Reset is always enabled, so the ESRESET bits (and therefore nSetMapMask and nSetMapBits)
             * are ignored; we look only at the SRESET bits, which are stored in nSetMapData.
             *
             * Unlike MODE0, we currently have no non-rotate function for MODE3.  If performance dictates, we can add one;
             * ditto for other features like the Sequencer's MAPMASK register (nSeqMapMask).
             *
             * @this {Memory}
             * @param {number} off
             * @param {number} b (which should already be pre-masked to 8 bits; see Bus.prototype.setByteDirect)
             * @param {number} [addr]
             */
            Card.ACCESS.writeByteMode3 = function writeByteMode3(off, b, addr)
            {
                var idw = off + this.offset;
                b = ((b >> this.controller.nDataRotate) | (b << (8 - this.controller.nDataRotate)) & 0xff);
                var dw = b | (b << 8) | (b << 16) | (b << 24);
                var dwMask = (dw & this.controller.nBitMapMask);
                dw = (this.controller.nSetMapData & dwMask) | (this.controller.latches & ~dwMask);
                dw = (dw & this.controller.nSeqMapMask) | (this.adw[idw] & ~this.controller.nSeqMapMask);
                if (this.adw[idw] != dw) {
                    this.adw[idw] = dw;
                    this.fDirty = true;
                }
            };
            
            /*
             * Mappings from getAccess() values to access functions above
             */
            Card.ACCESS.afn = [];
            
            Card.ACCESS.afn[Card.ACCESS.READ.MODE0]  = Card.ACCESS.readByteMode0;
            Card.ACCESS.afn[Card.ACCESS.READ.MODE0  |  Card.ACCESS.READ.CHAIN4]  = Card.ACCESS.readByteMode0Chain4;
            Card.ACCESS.afn[Card.ACCESS.READ.MODE0  |  Card.ACCESS.READ.EVENODD] = Card.ACCESS.readByteMode0EvenOdd;
            Card.ACCESS.afn[Card.ACCESS.READ.MODE1]  = Card.ACCESS.readByteMode1;
            
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0] = Card.ACCESS.writeByteMode0;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0 |  Card.ACCESS.WRITE.ROT] = Card.ACCESS.writeByteMode0Rot;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0 |  Card.ACCESS.WRITE.AND] = Card.ACCESS.writeByteMode0And;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0 |  Card.ACCESS.WRITE.OR]  = Card.ACCESS.writeByteMode0Or;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0 |  Card.ACCESS.WRITE.XOR] = Card.ACCESS.writeByteMode0Xor;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0 |  Card.ACCESS.WRITE.CHAIN4]  = Card.ACCESS.writeByteMode0Chain4;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE0 |  Card.ACCESS.WRITE.EVENODD] = Card.ACCESS.writeByteMode0EvenOdd;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE1] = Card.ACCESS.writeByteMode1;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE1 |  Card.ACCESS.WRITE.EVENODD] = Card.ACCESS.writeByteMode1EvenOdd;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE2] = Card.ACCESS.writeByteMode2;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE2 |  Card.ACCESS.WRITE.AND] = Card.ACCESS.writeByteMode2And;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE2 |  Card.ACCESS.WRITE.OR]  = Card.ACCESS.writeByteMode2Or;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE2 |  Card.ACCESS.WRITE.XOR] = Card.ACCESS.writeByteMode2Xor;
            Card.ACCESS.afn[Card.ACCESS.WRITE.MODE3] = Card.ACCESS.writeByteMode3;
            
            /**
             * initEGA(data)
             *
             * Another one of my frustrations with JSON is that it encodes empty arrays with non-zero lengths as
             * arrays of nulls, which means that any uninitialized register arrays whose elements were all originally
             * undefined come back via the JSON round-trip as *initialized* arrays whose elements are now all null.
             *
             * I'm a bit surprised, because JavaScript purists tell us to always use the '===' operator (eg, use
             * 'aReg[i] === undefined' to determine if an element is initialized), but because of this JSON stupidity,
             * that would require all such tests to become 'aReg[i] === undefined || aReg[i] === null'.  I'm puzzled
             * why the coercion of '==' is considered evil but JSON's coercion of undefined to null is perfectly fine.
             *
             * The simple solution is to change such comparisons to 'aReg[i] == null', because undefined is coerced
             * to null, whereas numeric values are not.
             *
             * [What do I mean by "another" frustration?  Let me talk to you some day about disallowing hex constants,
             * or insisting that property names be quoted, or refusing to allow comments.  I think it's fine for
             * JSON.stringify() to produce output that adheres to rules like that -- although some parameters to control
             * the output would be nice -- but it's completely unnecessary for JSON.parse() to refuse to parse objects
             * that are perfectly valid.]
             *
             * @this {Card}
             * @param {Array|undefined} data
             * @param {number} nMonitorType
             */
            Card.prototype.initEGA = function(data, nMonitorType)
            {
                if (data === undefined) {
                    data = [
                        /* 0*/  false,
                        /* 1*/  0,
                        /* 2*/  new Array(Card.ATC.TOTAL_REGS),
                        /* 3*/  0,
                        /* 4*/  (nMonitorType == ChipSet.MONITOR.MONO? 0: Card.MISC.IO_SELECT),
                        /* 5*/  0,
                        /* 6*/  0,
                        /* 7*/  new Array(Card.SEQ.TOTAL_REGS),
                        /* 8*/  0,
                        /* 9*/  0,
                        /*10*/  0,
                        /*11*/  new Array(Card.GRC.TOTAL_REGS),
                        /*12*/  0,
                        /*13*/  [this.addrBuffer, this.sizeBuffer, this.cbMemory],
                        /*14*/  new Array(this.cbMemory >> 2),      // divide cbMemory by 4 since this is an array of DWORDs (8 bits for each of 4 planes)
                        /*
                         * Card.ACCESS.WRITE.MODE0 by itself is a pretty good default, but if we choose to "randomize" the screen with
                         * text characters prior to starting the machine, defaulting to Card.ACCESS.WRITE.EVENODD is more faithful to how
                         * characters and attributes are typically stored (ie, in planes 0 and 1, respectively).  As soon as the machine
                         * starts up and initializes the hardware itself, these defaults won't matter.
                         */
                        /*15*/  Card.ACCESS.READ.MODE0 | Card.ACCESS.READ.EVENODD | Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.EVENODD | Card.ACCESS.V2,
                        /*16*/  0,
                        /*17*/  0xffffffff|0,
                        /*18*/  0,
                        /*19*/  0xffffffff|0,
                        /*20*/  0,
                        /*21*/  0xffffffff|0,
                        /*22*/  0,
                        /*23*/  0,
                        /*24*/  0,
                        /*25*/  0,
                        /*26*/  Card.VGA_ENABLE.ENABLED,
                        /*27*/  Card.DAC.MASK.DEFAULT,
                        /*28*/  0,
                        /*29*/  0,
                        /*30*/  Card.DAC.STATE.MODE_WRITE,
                        /*31*/  new Array(Card.DAC.TOTAL_REGS)
                    ];
                }
            
                this.fATCData   = data[0];
                this.regATCIndx = data[1];
                this.regATCData = data[2];
                this.asATCRegs  = DEBUGGER? Card.ATC.REGS : [];
                this.regStatus0 = data[3];      // aka STATUS0 (not to be confused with this.regStatus, which the EGA refers to as STATUS1)
                this.regMisc    = data[4];
                this.regFeat    = data[5];      // for feature control bits, see Card.FEAT_CTRL.BITS; for feature status bits, see Card.STATUS0.FEAT
                this.regSEQIndx = data[6];
                this.regSEQData = data[7];
                this.asSEQRegs  = DEBUGGER? Card.SEQ.REGS : [];
                this.regGRCPos1 = data[8];
                this.regGRCPos2 = data[9];
                this.regGRCIndx = data[10];
                this.regGRCData = data[11];
                this.asGRCRegs  = DEBUGGER? Card.GRC.REGS : [];
                this.latches    = data[12];
            
                /*
                 * Since we originally neglected to save/restore the card's active video buffer address and length,
                 * we're now stashing all that information in data[13].  So if we're presented with an old data entry
                 * that contains only the card's memory size, fix it up.
                 *
                 * TODO: This code just creates the required array; the correct video buffer address and length would
                 * still need to be calculated from the current GRC registers; checkMode() knows how to do that, but I'm
                 * not prepared to shoehorn in a call to checkMode() here, and potentially create more issues, for an
                 * old problem that will eventually disappear anyway.
                 */
                var a = data[13];
                if (typeof a == "number") {
                    a = [this.addrBuffer, this.sizeBuffer, a];
                }
                this.addrBuffer = a[0];
                this.sizeBuffer = a[1];
                this.video.assert(this.cbMemory === a[2]);
            
                var cdw = this.cbMemory >> 2;
                this.adwMemory  = data[14];
                if (this.adwMemory && this.adwMemory.length < cdw) {
                    this.adwMemory = State.decompressEvenOdd(this.adwMemory, cdw);
                }
            
                var nAccess = data[15];
                if (nAccess) {
                    if (nAccess & Card.ACCESS.V2) {
                        nAccess &= ~Card.ACCESS.V2;
                    } else {
                        this.video.assert(Card.ACCESS.V1[nAccess & 0xff00] !== undefined && Card.ACCESS.V1[nAccess & 0xff] !== undefined);
                        nAccess = Card.ACCESS.V1[nAccess & 0xff00] | Card.ACCESS.V1[nAccess & 0xff];
                    }
                }
                this.setMemoryAccess(nAccess);
            
                /*
                 * nReadMapShift must perfectly track how the GRC.READMAP register is programmed, so that Card.ACCESS.READ.MODE0
                 * memory read functions read the appropriate plane.  This default is not terribly critical, unless Card.ACCESS.WRITE.MODE0
                 * is chosen as our default AND you want the screen randomizer to work.
                 */
                this.nReadMapShift  = data[16];
            
                /*
                 * Similarly, nSeqMapMask must perfectly track how the SEQ.MAPMASK register is programmed, so that memory write
                 * functions write the appropriate plane(s).  Again, this default is not terribly critical, unless Card.ACCESS.WRITE.MODE0
                 * is chosen as our default AND you want the screen randomizer to work.
                 */
                this.nSeqMapMask    = data[17];
                this.nDataRotate    = data[18];
                this.nBitMapMask    = data[19];
                this.nSetMapData    = data[20];
                this.nSetMapMask    = data[21];
                this.nSetMapBits    = data[22];
                this.nColorCompare  = data[23];
                this.nColorDontCare = data[24];
                this.nStartAddress  = data[25];     // this is the last CRTC start address latched from CRTC.START_ADDR_HI,CRTC.START_ADDR_LO
            
                if (this.nCard == Video.CARD.VGA) {
                    this.regVGAEnable   = data[26];
                    this.regDACMask     = data[27];
                    this.regDACAddr     = data[28];
                    this.regDACShift    = data[29];
                    this.regDACState    = data[30];
                    this.regDACData     = data[31];
                }
            };
            
            /**
             * saveCard()
             *
             * @this {Card}
             * @return {Array}
             */
            Card.prototype.saveCard = function()
            {
                var data = [];
                if (this.nCard !== undefined) {
                    data[0] = this.fActive;
                    data[1] = this.regMode;
                    data[2] = this.regColor;
                    data[3] = this.regStatus;
                    data[4] = this.regCRTIndx | (this.regCRTPrev << 8);
                    data[5] = this.regCRTData;
                    if (this.nCard >= Video.CARD.EGA) {
                        data[6] = this.saveEGA();
                    }
                    data[7] = this.nInitCycles;
                }
                return data;
            };
            
            /**
             * saveEGA()
             *
             * @this {Card}
             * @return {Array}
             */
            Card.prototype.saveEGA = function()
            {
                var data = [];
                data[0]  = this.fATCData;
                data[1]  = this.regATCIndx;
                data[2]  = this.regATCData;
                data[3]  = this.regStatus0;
                data[4]  = this.regMisc;
                data[5]  = this.regFeat;
                data[6]  = this.regSEQIndx;
                data[7]  = this.regSEQData;
                data[8]  = this.regGRCPos1;
                data[9]  = this.regGRCPos2;
                data[10] = this.regGRCIndx;
                data[11] = this.regGRCData;
                data[12] = this.latches;
                data[13] = [this.addrBuffer, this.sizeBuffer, this.cbMemory];
                data[14] = State.compressEvenOdd(this.adwMemory);
                data[15] = this.nAccess | Card.ACCESS.V2;
                data[16] = this.nReadMapShift;
                data[17] = this.nSeqMapMask;
                data[18] = this.nDataRotate;
                data[19] = this.nBitMapMask;
                data[20] = this.nSetMapData;
                data[21] = this.nSetMapMask;
                data[22] = this.nSetMapBits;
                data[23] = this.nColorCompare;
                data[24] = this.nColorDontCare;
                data[25] = this.nStartAddress;
            
                if (this.nCard == Video.CARD.VGA) {
                    data[26] = this.regVGAEnable;
                    data[27] = this.regDACMask;
                    data[28] = this.regDACAddr;
                    data[29] = this.regDACShift;
                    data[30] = this.regDACState;
                    data[31] = this.regDACData;
                }
                return data;
            };
            
            /**
             * dumpRegs()
             *
             * Since we don't pre-allocate the register arrays (eg, ATC, CRTC, GRC, etc) on a Card, we can't
             * rely on their array length, so we instead rely on the number of register names supplied in asRegs.
             *
             * @this {Card}
             * @param {string} sName
             * @param {number} iReg
             * @param {Array} [aRegs]
             * @param {Array} [asRegs]
             */
            Card.prototype.dumpRegs = function(sName, iReg, aRegs, asRegs)
            {
                if (DEBUGGER) {
                    if (!aRegs) {
                        this.dbg.println(sName + ": " + str.toHexByte(iReg));
                        return;
                    }
                    var i, cchMax = 19, s = "";
                    /*
                    var s = "", i, cchMax = 0;
                    for (i = 0; i < asRegs.length; i++) {
                        if (cchMax < asRegs[i].length) cchMax = asRegs[i].length;
                    }
                    cchMax++;
                     */
                    for (i = 0; i < asRegs.length; i++) {
                        if (s) s += '\n';
                        s += sName + "[" + str.toHexByte(i) + "]: " + str.pad(asRegs[i], cchMax) + str.toHexByte(aRegs[i]) + (i === iReg? "*" : "");
                    }
                    this.dbg.println(s);
                }
            };
            
            /**
             * dumpCard()
             *
             * @this {Card}
             */
            Card.prototype.dumpCard = function()
            {
                if (DEBUGGER) {
                    /*
                     * Start with registers that are common to all cards....
                     */
                    this.dumpRegs("CRTC", this.regCRTIndx, this.regCRTData, this.asCRTCRegs);
            
                    if (this.nCard >= Video.CARD.EGA) {
                        this.dumpRegs(" GRC", this.regGRCIndx, this.regGRCData, this.asGRCRegs);
                        this.dumpRegs(" SEQ", this.regSEQIndx, this.regSEQData, this.asSEQRegs);
                        this.dumpRegs(" ATC", this.regATCIndx, this.regATCData, this.asATCRegs);
                        this.dbg.println("   ATCDATA: " + this.fATCData);
                        this.dumpRegs("      FEAT", this.regFeat);
                        this.dumpRegs("      MISC", this.regMisc);
                        this.dumpRegs("   STATUS0", this.regStatus0);
                        /*
                         * There are few more EGA regs we could dump, like GRCPos1, GRCPos2, but does anyone care?
                         */
                    }
            
                    /*
                     * TODO: This simply dumps the last value read from the STATUS1 register, not necessarily
                     * its current state; consider dumping getRetraceBits() instead of (or in addition to) this.
                     */
                    this.dumpRegs("   STATUS1", this.regStatus);
            
                    if (this.nCard == Video.CARD.MDA || this.nCard == Video.CARD.CGA) {
                        this.dumpRegs("   MODEREG", this.regMode);
                    }
            
                    if (this.nCard == Video.CARD.CGA) {
                        this.dumpRegs("     COLOR", this.regColor);
                    }
            
                    if (this.nCard >= Video.CARD.EGA) {
                        this.dbg.println("   LATCHES: 0x" + str.toHex(this.latches));
                        this.dbg.println("    ACCESS: " + str.toHexWord(this.nAccess));
                        this.dbg.println("Use 'dump video [addr]' to dump video memory");
                        /*
                         * There are few more EGA regs we could dump, like GRCPos1, GRCPos2, but does anyone care?
                         */
                    }
                }
            };
            
            /**
             * dumpBuffer()
             *
             * @this {Card}
             * @param {string} sParm
             */
            Card.prototype.dumpBuffer = function(sParm)
            {
                if (DEBUGGER) {
                    if (!this.adwMemory) {
                        this.dbg.println("no buffer");
                        return;
                    }
                    var idw = str.parseInt(sParm);
                    idw = (idw !== undefined? idw - this.addrBuffer : (this.prevDump || 0));
                    if (idw < 0) idw = 0;
                    var cLines = 8, sDump = "";
                    for (var iLine = 0; iLine < cLines; iLine++) {
                        var sData = str.toHex(this.addrBuffer + idw) + ":";
                        for (var i = 0; i < 8 && idw < this.adwMemory.length; i++) {
                            var dw = this.adwMemory[idw++];
                            sData += " " + str.toHex(dw);
                        }
                        if (sDump) sDump += "\n";
                        sDump += sData;
                    }
                    if (sDump) this.dbg.println(sDump);
                    this.prevDump = idw;
                }
            };
            
            /**
             * getMemoryBuffer(addr)
             *
             * If we passed a controller object (ie, this card) to addMemory(), then each allocated Memory block
             * will call this function to obtain a buffer.
             *
             * @this {Card}
             * @param {number} addr
             * @return {Array} containing the buffer (and the offset within that buffer that corresponds to the requested block)
             */
            Card.prototype.getMemoryBuffer = function(addr)
            {
                return [this.adwMemory, addr - this.addrBuffer];
            };
            
            /**
             * getMemoryAccess()
             *
             * Return the last set of memory access functions recorded by setMemoryAccess().
             *
             * @this {Card}
             * @return {Array.<function()>}
             */
            Card.prototype.getMemoryAccess = function()
            {
                return this.afnAccess;
            };
            
            /**
             * setMemoryAccess(nAccess)
             *
             * This transforms the memory access value that getAccess() returns into the best available set of
             * memory access functions, which are then returned via getMemoryAccess() to any memory blocks we allocate
             * or modify.
             *
             * @this {Card}
             * @param {number|undefined} nAccess
             */
            Card.prototype.setMemoryAccess = function(nAccess)
            {
                if (nAccess != null && nAccess != this.nAccess) {
            
                    var nReadAccess = nAccess & Card.ACCESS.READ.MASK;
                    var fnReadByte = Card.ACCESS.afn[nReadAccess];
                    if (!fnReadByte) {
                        if (DEBUG && this.dbg) {
                            this.dbg.message("Card.setMemoryAccess(" + str.toHexWord(nAccess) + "): missing readByte handler");
                            this.dbg.stopCPU();     // let's take a look
                        }
                        if (nReadAccess & Card.ACCESS.READ.EVENODD) {
                            fnReadByte = Card.ACCESS.afn[Card.ACCESS.READ.EVENODD];
                        }
                    }
                    var nWriteAccess = nAccess & Card.ACCESS.WRITE.MASK;
                    var fnWriteByte = Card.ACCESS.afn[nWriteAccess];
                    if (!fnWriteByte) {
                        if (DEBUG && this.dbg) {
                            this.dbg.message("Card.setMemoryAccess(" + str.toHexWord(nAccess) + "): missing writeByte handler");
                            this.dbg.stopCPU();     // let's take a look
                        }
                        if (nWriteAccess & Card.ACCESS.WRITE.EVENODD) {
                            fnWriteByte = Card.ACCESS.afn[Card.ACCESS.WRITE.EVENODD];
                        }
                    }
                    if (!this.afnAccess) this.afnAccess = new Array(6);
                    this.afnAccess[0] = fnReadByte;
                    this.afnAccess[3] = fnWriteByte;
                    this.nAccess = nAccess;
                }
            };
            
            /*
             * Card Specifications
             *
             * We support dynamically switching between MDA and CGA cards by simply flipping switches on
             * the virtual SW1 switch block and resetting the machine.  However, I'm not sure I'll support
             * dynamically switching the EGA card the same way; there's certainly no UI for it at this point.
             *
             * For each supported card, there is a cardSpec array that the Card class uses to initialize the
             * card's defaults:
             *
             *      [0]: card descriptor
             *      [1]: default CRTC port address
             *      [2]: default video buffer address
             *      [3]: default video buffer size
             *      [4]: total on-board memory (if no "memory" parm was specified)
             *      [5]: default monitor type
             *
             * If total on-board memory is zero, then addMemory() will simply add the specified video buffer
             * to the address space; otherwise, we will allocate an internal buffer (adwMemory) and tell addMemory()
             * to map it to the video buffer address.  The latter approach gives us total control over the buffer;
             * refer to getMemoryAccess().
             *
             * TODO: Consider allocating our own buffer for all video cards, not just EGA/VGA.  For MDA/CGA, I'm not
             * sure it would offer any benefits, other than allowing our internal update functions, like updateScreen(),
             * to access the buffer directly, instead of going through the Bus memory interface.
             */
            Video.cardSpecs = [];
            Video.cardSpecs[Video.CARD.MDA] = ["MDA", Card.MDA.CRTC.INDX.PORT, 0xB0000, 0x01000, 0, ChipSet.MONITOR.MONO];
            Video.cardSpecs[Video.CARD.CGA] = ["CGA", Card.CGA.CRTC.INDX.PORT, 0xB8000, 0x04000, 0, ChipSet.MONITOR.COLOR];
            Video.cardSpecs[Video.CARD.EGA] = ["EGA", Card.CGA.CRTC.INDX.PORT, 0xB8000, 0x04000, 0x10000, ChipSet.MONITOR.EGACOLOR];
            Video.cardSpecs[Video.CARD.VGA] = ["VGA", Card.CGA.CRTC.INDX.PORT, 0xB8000, 0x04000, 0x40000, ChipSet.MONITOR.VGACOLOR];
            
            /**
             * initBus(cmp, bus, cpu, dbg)
             *
             * This is a notification issued by the Computer component, after all the other components (notably the CPU)
             * have had a chance to initialize.
             *
             * @this {Video}
             * @param {Computer} cmp
             * @param {Bus} bus
             * @param {X86CPU} cpu
             * @param {Debugger} dbg
             */
            Video.prototype.initBus = function(cmp, bus, cpu, dbg)
            {
                this.bus = bus;
                this.cpu = cpu;
                this.dbg = dbg;
            
                /*
                 * The only time we do NOT want to trap MDA ports is when the model has been specifically set to CGA.
                 */
                if (Video.CARD.NAMES[this.model] != Video.CARD.CGA) {
                    bus.addPortInputTable(this, Video.aMDAPortInput);
                    bus.addPortOutputTable(this, Video.aMDAPortOutput);
                }
            
                /*
                 * Similarly, the only time we do NOT want to trap CGA ports is when the model has been specifically set to MDA.
                 */
                if (Video.CARD.NAMES[this.model] != Video.CARD.MDA) {
                    bus.addPortInputTable(this, Video.aCGAPortInput);
                    bus.addPortOutputTable(this, Video.aCGAPortOutput);
                }
            
                /*
                 * Note that in the case of EGA and VGA models, the above code ensures that we will trap both MDA and CGA
                 * port ranges -- which is good, because both the EGA and VGA can be reprogrammed to respond to those ports,
                 * but also potentially bad if you want to simulate a "dual display" system, where one of the displays is
                 * driven by either an MDA or CGA.
                 *
                 * However, you should still be able to make that work by loading the MDA or CGA video component first, because
                 * components should be initialized in the order they appear in the machine configuration file.  Any attempt
                 * by another component to trap the same ports should be ignored.
                 */
                if (this.nCard >= Video.CARD.EGA) {
                    bus.addPortInputTable(this, Video.aEGAPortInput);
                    bus.addPortOutputTable(this, Video.aEGAPortOutput);
                }
            
                if (this.nCard == Video.CARD.VGA) {
                    bus.addPortInputTable(this, Video.aVGAPortInput);
                    bus.addPortOutputTable(this, Video.aVGAPortOutput);
                }
            
                if (DEBUGGER && dbg) {
                    var video = this;
                    dbg.messageDump(Messages.VIDEO, function onDumpVideo(sParm) {
                        video.dumpVideo(sParm);
                    });
                }
            
                /*
                 * If we have an associated keyboard, then ensure that the keyboard will be notified whenever
                 * the canvas gets focus and receives input.
                 */
                this.kbd = cmp.getComponentByType("Keyboard");
                if (this.kbd && this.canvasScreen) {
                    for (var s in this.bindings) {
                        if (s.indexOf("lock") > 0) this.kbd.setBinding("led", s, this.bindings[s]);
                    }
                    this.kbd.setBinding(this.textareaScreen? "textarea" : "canvas", "kbd", this.inputScreen);
                }
            
                this.bEGASwitches = 0x09;   // our default "switches" setting (see aEGAMonitorSwitches)
                this.chipset = cmp.getComponentByType("ChipSet");
                if (this.chipset && this.sSwitches) {
                    if (this.nCard == Video.CARD.EGA) this.bEGASwitches = this.chipset.parseSwitches(this.sSwitches, this.bEGASwitches);
                }
            
                if (this.kbd && this.fTouchScreen) this.captureTouch();
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {Video}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "refresh")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            Video.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                var video = this;
            
                if (!this.bindings[sBinding]) {
            
                    /*
                     * We now save every binding that comes in, so that if there are bindings for "caps-lock' and the like,
                     * we can forward them to the Keyboard.
                     */
                    this.bindings[sBinding] = control;
            
                    switch (sBinding) {
            
                    case "fullScreen":
                        if (this.container && this.container.doFullScreen) {
                            control.onclick = function onClickFullScreen() {
                                if (DEBUG) video.printMessage("fullScreen()");
                                video.doFullScreen();
                            };
                        } else {
                            if (DEBUG) this.log("FullScreen API not available");
                            control.parentNode.removeChild(control);
                        }
                        return true;
            
                    case "lockPointer":
                        this.sLockMessage = control.textContent;
                        if (this.inputScreen && this.inputScreen.lockPointer) {
                            control.onclick = function onClickLockPointer() {
                                if (DEBUG) video.printMessage("lockPointer()");
                                video.lockPointer(true);
                            };
                        } else {
                            if (DEBUG) this.log("Pointer Lock API not available");
                            control.parentNode.removeChild(control);
                        }
                        return true;
            
                    case "refresh":
                        control.onclick = function onClickRefresh() {
                            if (DEBUG) video.printMessage("refreshScreen()");
                            video.updateScreen(true);
                        };
                        return true;
            
                    default:
                        break;
                    }
                }
                return false;
            };
            
            /**
             * setFocus()
             *
             * @this {Video}
             */
            Video.prototype.setFocus = function()
            {
                if (this.inputScreen) this.inputScreen.focus();
            };
            
            /**
             * getInput()
             *
             * This is an interface used by the Mouse component, so that it can invoke capture/release mouse events from the screen element.
             *
             * @this {Video}
             * @param {Mouse} [mouse]
             * @return {Object|undefined}
             */
            Video.prototype.getInput = function(mouse)
            {
                this.mouse = mouse;
                return this.inputScreen;
            };
            
            /**
             * doFullScreen()
             *
             * @this {Video}
             * @return {boolean} true if request successful, false if not (eg, failed OR not supported)
             */
            Video.prototype.doFullScreen = function()
            {
                var fSuccess = false;
                if (this.container) {
                    if (this.container.doFullScreen) {
                        /*
                         * Styling the container with a width of "100%" and a height of "auto" works great when the aspect ratio
                         * of our virtual screen is at least roughly equivalent to the physical screen's aspect ratio, but now that
                         * we support virtual VGA screens with an aspect ratio of 1.33, that's very much out of step with modern
                         * wide-screen monitors, which usually have an aspect ratio of 1.6 or greater.
                         *
                         * And unfortunately, none of the browsers I've tested appear to make any attempt to scale our container to
                         * the physical screen's dimensions, so the bottom of our screen gets clipped.  To prevent that, I reduce
                         * the width from 100% to whatever percentage will accommodate the entire height of the virtual screen.
                         *
                         * NOTE: Mozilla recommends both a width and a height of "100%", but all my tests suggest that using "auto"
                         * for height works equally well, so I'm sticking with it, because "auto" is also consistent with how I've
                         * implemented a responsive canvas when the browser window is being resized.
                         */
                        var sWidth = "100%";
                        var sHeight = "auto";
                        if (screen && screen.width && screen.height) {
                            var aspectPhys = screen.width / screen.height;
                            var aspectVirt = this.cxScreen / this.cyScreen;
                            if (aspectPhys > aspectVirt) {
                                sWidth = Math.round(aspectVirt / aspectPhys * 100) + '%';
                            }
                            // TODO: We may need to someday consider the case of a physical screen with an aspect ratio < 1.0....
                        }
                        if (!this.fGecko) {
                            this.container.style.width = sWidth;
                            this.container.style.height = sHeight;
                        } else {
                            /*
                             * Sadly, the above code doesn't work for Firefox, because as http://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode
                             * explains:
                             *
                             *      'It's worth noting a key difference here between the Gecko and WebKit implementations at this time:
                             *      Gecko automatically adds CSS rules to the element to stretch it to fill the screen: "width: 100%; height: 100%".
                             *
                             * Which would be OK if Gecko did that BEFORE we're called, but apparently it does that AFTER, effectively
                             * overwriting our careful calculations.  So we style the inner element (canvasScreen) instead, which
                             * requires even more work to ensure that the canvas is properly centered.  FYI, this solution is consistent
                             * with Mozilla's recommendation for working around their automatic CSS rules:
                             *
                             *      '[I]f you're trying to emulate WebKit's behavior on Gecko, you need to place the element you want
                             *      to present inside another element, which you'll make fullscreen instead, and use CSS rules to adjust
                             *      the inner element to match the appearance you want.'
                             */
                            this.canvasScreen.style.width = sWidth;
                            this.canvasScreen.style.width = sWidth;
                            this.canvasScreen.style.display = "block";
                            this.canvasScreen.style.margin = "auto";
                        }
                        this.container.style.backgroundColor = "black";
                        this.container.doFullScreen();
                        fSuccess = true;
                    }
                    this.setFocus();
                }
                return fSuccess;
            };
            
            /**
             * notifyFullScreen(fFullScreen)
             *
             * @this {Video}
             * @param {boolean|null} fFullScreen (null if there was a full-screen error)
             */
            Video.prototype.notifyFullScreen = function(fFullScreen)
            {
                if (!fFullScreen && this.container) {
                    if (!this.fGecko) {
                        this.container.style.width = this.container.style.height = "";
                    } else {
                        this.canvasScreen.style.width = this.canvasScreen.style.height = "";
                    }
                }
                this.printMessage("notifyFullScreen(" + fFullScreen + ")", true);
                if (this.kbd) this.kbd.notifyEscape(fFullScreen);
            };
            
            /**
             * lockPointer()
             *
             * @this {Video}
             * @param {boolean} fLock
             * @return {boolean} true if request successful, false if not (eg, failed OR not supported)
             */
            Video.prototype.lockPointer = function(fLock)
            {
                var fSuccess = false;
                if (this.inputScreen) {
                    if (fLock) {
                        if (this.inputScreen.lockPointer) {
                            this.inputScreen.lockPointer();
                            this.mouse.notifyPointerLocked(true);
                            fSuccess = true;
                        }
                    } else {
                        if (this.inputScreen.unlockPointer) {
                            this.inputScreen.unlockPointer();
                            this.mouse.notifyPointerLocked(false);
                            fSuccess = true;
                        }
                    }
                    this.setFocus();
                }
                return fSuccess;
            };
            
            /**
             * notifyPointerActive(fActive)
             *
             * @this {Video}
             * @param {boolean} fActive
             * @return {boolean} true if autolock enabled AND pointer lock supported, false if not
             */
            Video.prototype.notifyPointerActive = function(fActive)
            {
                if (this.fAutoLock) {
                    return this.lockPointer(fActive);
                }
                return false;
            };
            
            /**
             * notifyPointerLocked(fLocked)
             *
             * @this {Video}
             * @param {boolean} fLocked
             */
            Video.prototype.notifyPointerLocked = function(fLocked)
            {
                if (this.mouse) {
                    this.mouse.notifyPointerLocked(fLocked);
                    if (this.kbd) this.kbd.notifyEscape(fLocked);
                }
                var control = this.bindings["lockPointer"];
                if (control) control.textContent = (fLocked? "Press Esc to Unlock Pointer" : this.sLockMessage);
            };
            
            /**
             * captureTouch()
             *
             * @this {Video}
             */
            Video.prototype.captureTouch = function()
            {
                var control = this.inputScreen;
                if (control) {
                    var video = this;
                    if (!this.fCaptured) {
                        control.addEventListener(
                            'touchstart',
                            function onTouchStart(event) { video.onTouchStart(event); },
                            false                   // we'll specify false for the 'useCapture' parameter for now...
                        );
                        control.addEventListener(
                            'touchmove',
                            function onTouchMove(event) { video.onTouchMove(event); },
                            true
                        );
                        control.addEventListener(
                            'touchend',
                            function onTouchEnd(event) { video.onTouchEnd(event); },
                            false                   // we'll specify false for the 'useCapture' parameter for now...
                        );
                        if (DEBUG) {
                            /*
                             */
                            control.addEventListener(
                                'mousedown',
                                function onMouseDown(event) { video.onTouchStart(event); },
                                false               // we'll specify false for the 'useCapture' parameter for now...
                            );
                            /*
                            control.addEventListener(
                                'mousemove',
                                function onMouseMove(event) { video.onTouchMove(event); },
                                true
                            );
                            control.addEventListener(
                                'mouseup',
                                function onMouseUp(event) { video.onTouchEnd(event); },
                                false               // we'll specify false for the 'useCapture' parameter for now...
                            );
                             */
                        }
                        // this.log("touch events captured");
                        this.fCaptured = true;
                    }
                }
            };
            
            /**
             * onFocusChange(fFocus)
             *
             * @this {Video}
             * @param {boolean} fFocus is true if gaining focus, false if losing it
             */
            Video.prototype.onFocusChange = function(fFocus)
            {
                /*
                 * As per http://stackoverflow.com/questions/6740253/disable-scrolling-when-changing-focus-form-elements-ipad-web-app,
                 * I decided to try this work-around to prevent the webpage from scrolling around whenever the canvas is given
                 * focus.  That sort of scrolling-into-view sounds great in principle, but in practice, if you were reading some other
                 * portion of the page, it can be irritating to be scrolled away from that portion when refreshing/returning to the page.
                 *
                 * However, this work-around doesn't seem to work with the latest version of Safari (or else I misunderstood something).
                 *
                 *  if (fFocus) {
                 *      window.scrollTo(0, 0);
                 *      window.document.body.scrollTop = 0;
                 *  }
                 */
                this.fHasFocus = fFocus;
                if (this.kbd) this.kbd.onFocusChange(fFocus);
            };
            
            /*
            Video.prototype.releaseTouch = function()
            {
            };
            */
            
            /**
             * onTouchStart(event)
             *
             * @this {Video}
             * @param {Event} event object from a 'touch' event
             */
            Video.prototype.onTouchStart = function(event)
            {
                if (DEBUG) this.printMessage("onTouchStart()");
                this.processTouchEvent(event, true);
            };
            
            /**
             * onTouchMove(event)
             *
             * @this {Video}
             * @param {Event} event object from a 'touch' event
             */
            Video.prototype.onTouchMove = function(event)
            {
                if (DEBUG) this.printMessage("onTouchMove()");
                this.processTouchEvent(event, false);
            };
            
            /**
             * onTouchEnd(event)
             *
             * @this {Video}
             * @param {Event} event object from a 'touch' event
             */
            Video.prototype.onTouchEnd = function(event)
            {
                if (DEBUG) this.printMessage("onTouchEnd()");
            };
            
            /**
             * processTouchEvent(event, fStart)
             *
             * @this {Video}
             * @param {Event} event object from a 'touch' event
             * @param {boolean} fStart if this is a 'touchstart' event
             */
            Video.prototype.processTouchEvent = function(event, fStart)
            {
                // if (!event) event = window.event;
                /*
                 * My thinking here is that if the canvas does NOT yet have focus, then we should actually SKIP
                 * the usual preventDefault() call, so that everything the user has come to expect (eg, activation of
                 * the soft keyboard) will work as before.
                 *
                 * The process of touching the canvas means it should ultimately receive focus, and as long as it
                 * retains focus, preventDefault() will always be called.
                 */
                if (this.fHasFocus) event.preventDefault();
            
                /*
                 * Touch coordinates (that is, the pageX and pageY properties) are relative to the page, so to make
                 * them relative to the canvas, we must subtract the canvas's left and top positions.  This Apple web page:
                 *
                 *      https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/AddingMouseandTouchControlstoCanvas/AddingMouseandTouchControlstoCanvas.html
                 *
                 * makes it sound simple, but it turns out we have to walk the canvas' entire "parentage" of DOM elements
                 * to get the exact offsets.
                 *
                 * TODO: Determine whether the getBoundingClientRect() code used in panel.js for mouse events can also
                 * be used here to simplify this annoyingly complicated code for touch events.
                 */
                var xTouchOffset = 0;
                var yTouchOffset = 0;
                var eCurrent = this.canvasScreen;
                do {
                    if (!isNaN(eCurrent.offsetLeft)) {
                        xTouchOffset += eCurrent.offsetLeft;
                        yTouchOffset += eCurrent.offsetTop;
                    }
                } while ((eCurrent = eCurrent.offsetParent));
            
                /*
                 * Due to the responsive nature of our pages, the displayed size of the canvas may be smaller than the
                 * allocated size, and the coordinates we receive from touch events are based on the currently displayed size.
                 */
                var xScale =  this.cxScreen / this.canvasScreen.offsetWidth;
                var yScale = this.cyScreen / this.canvasScreen.offsetHeight;
            
                /**
                 * @name Event
                 * @property {Array} targetTouches
                 */
                var xTouch, yTouch;
                if (!event.targetTouches) {
                    xTouch = event.pageX;
                    yTouch = event.pageY;
                } else {
                    xTouch = event.targetTouches[0].pageX;
                    yTouch = event.targetTouches[0].pageY;
                }
                xTouch = ((xTouch - xTouchOffset) * xScale);
                yTouch = ((yTouch - yTouchOffset) * yScale);
                var xThird = (xTouch / (this.cxScreen / 3)) | 0;
                var yThird = (yTouch / (this.cyScreen / 3)) | 0;
            
                /*
                 * At this point, xThird and yThird should both be one of 0, 1 or 2, indicating which horizontal and vertical
                 * third of the virtual screen the touch event occurred.
                 */
                if (/* xThird == 1 && */ yThird != 1) {
                    if (!yThird) {
                        this.kbd.addActiveKey(Keyboard.CLICKCODES.UP, true);
                    } else {
                        this.kbd.addActiveKey(Keyboard.CLICKCODES.DOWN, true);
                    }
                } else if (/* yThird == 1 && */ xThird != 1) {
                    if (!xThird) {
                        this.kbd.addActiveKey(Keyboard.CLICKCODES.LEFT, true);
                    } else {
                        this.kbd.addActiveKey(Keyboard.CLICKCODES.RIGHT, true);
                    }
                }
            };
            
            /**
             * powerUp(data, fRepower)
             *
             * @this {Video}
             * @param {Object|null} data
             * @param {boolean} [fRepower]
             * @return {boolean} true if successful, false if failure
             */
            Video.prototype.powerUp = function(data, fRepower)
            {
                if (!fRepower) {
                    if (!data || !this.restore) {
                        this.reset();
                    } else {
                        if (!this.restore(data)) return false;
                    }
                }
                return true;
            };
            
            /**
             * powerDown(fSave, fShutdown)
             *
             * This is where we might add some method of blanking the display, without the disturbing the video
             * buffer contents, and blocking all further updates to the display.
             *
             * @this {Video}
             * @param {boolean} fSave
             * @param {boolean} [fShutdown]
             * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
             */
            Video.prototype.powerDown = function(fSave, fShutdown)
            {
                return fSave && this.save? this.save() : true;
            };
            
            /**
             * reset()
             *
             * @this {Video}
             */
            Video.prototype.reset = function()
            {
                var fRandomize = true;
                var nMonitorType = ChipSet.MONITOR.NONE;
            
                /*
                 * We'll ask the ChipSet what SW1 indicates for monitor type, but we may override it if a specific
                 * video card model is set.  For EGA, SW1 is supposed to be set to indicate NO monitor, and we rely
                 * on the EGA's own switch settings instead.
                 */
                if (this.chipset) {
                    nMonitorType = this.chipset.getSWVideoMonitor();
                }
            
                /*
                 * As we noted in the constructor, when a model is specified, that takes precedence over any monitor
                 * switch settings.  Conversely, when no model is specified, the nCard setting is considered provisional,
                 * so the monitor switch settings, if any, are allowed to determine the card type.
                 */
                if (!this.model) {
                    this.nCard = (nMonitorType == ChipSet.MONITOR.MONO? Video.CARD.MDA : Video.CARD.CGA);
                }
            
                this.nModeDefault = Video.MODE.CGA_80X25;
            
                switch (this.nCard) {
                case Video.CARD.VGA:
                    nMonitorType = ChipSet.MONITOR.VGACOLOR;
                    break;
                case Video.CARD.EGA:
                    var aMonitors = Video.aEGAMonitorSwitches[this.bEGASwitches];
                    /*
                     * TODO: Figure out how to deal with aMonitors[2], the boolean which indicates
                     * whether the EGA is driving the primary monitor (true) or the secondary monitor (false).
                     */
                    if (aMonitors) nMonitorType = aMonitors[0];
                    if (!nMonitorType) nMonitorType = ChipSet.MONITOR.EGACOLOR;
                    break;
                case Video.CARD.MDA:
                    nMonitorType = ChipSet.MONITOR.MONO;
                    this.nModeDefault = Video.MODE.MDA_80X25;
                    break;
                case Video.CARD.CGA:
                    /* falls through */
                default:
                    nMonitorType = ChipSet.MONITOR.COLOR;
                    break;
                }
            
                if (this.nMonitorType !== nMonitorType) {
                    this.nMonitorType = nMonitorType;
                    fRandomize = true;
                }
            
                this.cardActive = null;
                this.cardMono = this.cardMDA = new Card(this, Video.CARD.MDA);
                this.cardColor = this.cardCGA = new Card(this, Video.CARD.CGA);
            
                if (this.nCard < Video.CARD.EGA) {
                    this.cardEGA = new Card();      // define a dummy (uninitialized) EGA card for now
                }
                else {
                    this.cardEGA = new Card(this, this.nCard, null, this.cbMemory);
                    this.enableEGA();
                }
            
                /*
                 * We need to call buildFonts() *after* the card(s) are initialized but *before* setMode() is called.
                 */
                this.buildFonts();
            
                this.nMode = null;
                this.iCellCursor = -1;  // initially, there is no visible cursor cell
                this.cBlinks = -1;      // initially, blinking is not active
                this.cBlinkVisible = 0; // no visible blinking characters (yet)
            
                this.setMode(this.nModeDefault);
            
                if (this.cardActive.addrBuffer && fRandomize) {
                    /*
                     * On the initial power-on, we initialize the video buffer to random characters, as a way of testing
                     * whether our font(s) were successfully loaded.  It's assumed that our default display mode is a text mode,
                     * and that since this is a reset, the CRTC.START_ADDR registers are zero as well.
                     *
                     * If this is an MDA device, then the buffer should reside at 0xB0000 through 0xB0FFF, for a total length
                     * of 4Kb (0x1000), where every even byte contains a character code, and every odd byte contains an attribute
                     * code.  See the ATTR bit definitions above for applicable color, intensity, and blink values.  On a CGA
                     * device, the buffer resides at 0xB8000 through 0xBBFFF, for a total length of 16Kb.
                     *
                     * Note that the only valid MDA display mode (7) is the 80x25 text mode, which uses 4000 bytes (2000 character
                     * bytes + 2000 attribute bytes), not all 4096 bytes; addrScreenLimit reflects the visible limit, not the
                     * physical limit.  Also, as noted in updateScreen(), this simplistic calculation of the extent of visible
                     * screen memory is valid only for text modes; in general, it's safer to use cardActive.sizeBuffer as the extent.
                     */
                    var addrScreenLimit = this.cardActive.addrBuffer + this.cbScreen;
                    for (var addrScreen = this.cardActive.addrBuffer; addrScreen < addrScreenLimit; addrScreen += 2) {
                        var dataRandom = (Math.random() * 0x10000)|0;
                        var bChar, bAttr;
                        if (this.nMonitorType == ChipSet.MONITOR.EGACOLOR || this.nMonitorType == ChipSet.MONITOR.VGACOLOR) {
                            /*
                             * For the EGA, we choose sequential characters; for random characters, copy the MDA/CGA code below.
                             */
                            bChar = (addrScreen >> 1) & 0xff;
                            bAttr = (dataRandom >> 8) & ~Video.ATTRS.BGND_BLINK;    // TODO: turn blink attributes off unless we can ensure blinking is initially disabled
                            if ((bAttr >> 4) == (bAttr & 0xf)) {
                                bAttr ^= 0x0f;      // if background matches foreground, invert foreground to ensure character visibility
                            }
                        } else {
                            bChar = dataRandom & 0xff;
                            bAttr = ((dataRandom & 0x100)? (Video.ATTRS.FGND_WHITE | Video.ATTRS.BGND_BLACK) : (Video.ATTRS.FGND_BLACK | Video.ATTRS.BGND_WHITE)) | ((Video.ATTRS.FGND_BRIGHT /* | Video.ATTRS.BGND_BLINK */) & (dataRandom >> 8));
                        }
                        this.bus.setShortDirect(addrScreen, bChar | (bAttr << 8));
                    }
                    this.updateScreen(true);
                }
            };
            
            /**
             * enableEGA()
             *
             * Redirect cardMono or cardColor to cardEGA as appropriate.
             *
             * @this {Video}
             */
            Video.prototype.enableEGA = function()
            {
                if (!(this.cardEGA.regMisc & Card.MISC.IO_SELECT)) {
                    this.cardMono = this.cardEGA;
                    this.cardColor = this.cardCGA;  // this is done mainly to siphon away any CGA I/O
                } else {
                    this.cardMono = this.cardMDA;   // similarly, this is done to siphon away any MDA I/O
                    this.cardColor = this.cardEGA;
                }
            };
            
            /**
             * save()
             *
             * This implements save support for the Video component.
             *
             * @this {Video}
             * @return {Object}
             */
            Video.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, this.cardMDA.saveCard());
                state.set(1, this.cardCGA.saveCard());
                state.set(2, [this.nMonitorType, this.nModeDefault, this.nMode]);
                state.set(3, this.cardEGA.saveCard());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the Video component.
             *
             * @this {Video}
             * @param {Object} data
             * @return {boolean} true if successful, false if failure
             */
            Video.prototype.restore = function(data)
            {
                var a = data[2];
                this.nMonitorType = a[0];
                this.nModeDefault = a[1];
                this.nMode = a[2];
            
                this.cardActive = null;
                this.cardMono = this.cardMDA = new Card(this, Video.CARD.MDA, data[0]);
                this.cardColor = this.cardCGA = new Card(this, Video.CARD.CGA, data[1]);
            
                /*
                 * If no EGA was originally initialized, then cardEGA will remain uninitialized.
                 */
                this.cardEGA = new Card(this, this.nCard, data[3], this.cbMemory);
                if (this.cardEGA.fActive) this.enableEGA();
            
                /*
                 * We need to call buildFonts() *after* the card(s) are initialized but *before* setMode() is called.
                 */
                this.buildFonts();
            
                /*
                 * While I could restore the active card here, it's better for setMode() to do it, because
                 * setMode() will also take care of mapping the appropriate video buffer.  So, after restore() has
                 * finished, we call checkMode(), because the current video mode (nMode) is determined by the
                 * active card state.
                 *
                 * Unfortunately, that creates a chicken-and-egg problem, since I just said I didn't want to select
                 * the active card here.
                 *
                 * So, we'll add some "cop-out" code to checkMode(): if there's no active card, then fall-back
                 * to the last known video mode (nMode) and force a call to setMode().
                 *
                 *      this.cardActive = (this.cardMDA.fActive? this.cardMDA : (this.cardCGA.fActive? this.cardCGA : undefined));
                 */
                if (!this.checkMode()) return false;
            
                this.checkCursor();
                return true;
            };
            
            /**
             * onLoadSetFonts(sFontFile, sFontData, nErrorCode)
             *
             * @this {Video}
             * @param {string} sFontFile
             * @param {string} sFontData
             * @param {number} nErrorCode (response from server if anything other than 200)
             */
            Video.prototype.onLoadSetFonts = function(sFontFile, sFontData, nErrorCode)
            {
                if (nErrorCode) {
                    this.notice("Unable to load font ROM image (error " + nErrorCode + ")");
                    return;
                }
                try {
                    /*
                     * The most likely source of any exception will be right here, where we're parsing the JSON-encoded data.
                     */
                    var abFontData = eval("(" + sFontData + ")");
            
                    if (!abFontData.length) {
                        Component.error("Empty font ROM image: " + sFontFile);
                        return;
                    }
                    else if (abFontData.length == 1) {
                        Component.error(abFontData[0]);
                        return;
                    }
                    /*
                     * Translate the character data into separate "fonts", each of which will be a separate canvas object, with all
                     * 256 characters arranged in a 16x16 grid.
                     */
                    if (abFontData.length == 8192) {
                        /*
                         * Here are the first few rows of MDA font data, at the 0K and 2K boundaries:
                         *
                         *      00000000  00 00 00 00 00 00 00 00  00 00 7e 81 a5 81 81 bd  |..........~.....|
                         *      00000010  00 00 7e ff db ff ff c3  00 00 00 36 7f 7f 7f 7f  |..~........6....|
                         *      ...
                         *      00000800  00 00 00 00 00 00 00 00  99 81 7e 00 00 00 00 00  |..........~.....|
                         *      00000810  e7 ff 7e 00 00 00 00 00  3e 1c 08 00 00 00 00 00  |..~.....>.......|
                         *
                         * 8 bytes of data from a row in each of the 2K chunks are combined to form a 8-bit wide character with
                         * a maximum height of 16 bits.  Assembling the bits for character 0x01 (a happy face), we observe the following:
                         *
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x0008
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x0009
                         *      0 1 1 1 1 1 1 0  <== 7e from offset 0x000A
                         *      1 0 0 0 0 0 0 1  <== 81 from offset 0x000B
                         *      1 0 1 0 0 1 0 1  <== a5 from offset 0x000C
                         *      1 0 0 0 0 0 0 1  <== 81 from offset 0x000D
                         *      1 0 0 0 0 0 0 1  <== 81 from offset 0x000E
                         *      1 0 1 1 1 1 0 1  <== bd from offset 0x000F
                         *      1 0 0 1 1 0 0 1  <== 99 from offset 0x0808
                         *      1 0 0 0 0 0 0 1  <== 81 from offset 0x0809
                         *      0 1 1 1 1 1 1 0  <== 7e from offset 0x080A
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x080B
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x080C
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x080D
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x080E
                         *      0 0 0 0 0 0 0 0  <== 00 from offset 0x080F
                         *
                         * In the second 2K chunk, we observe that the last two bytes of every font cell definition are zero;
                         * this confirms our understanding that MDA font cell size is 8x14.
                         *
                         * Finally, there's the issue of screen cell size, which is actually 9x14 on the MDA.  We compensate for that
                         * by building a 9x14 font, even though there's only 8x14 bits of data. As http://www.seasip.info/VintagePC/mda.html
                         * explains:
                         *
                         *      "For characters C0h-DFh, the ninth pixel column is a duplicate of the eighth; for others, it's blank."
                         *
                         * This last point is confirmed by "The IBM Personal Computer From The Inside Out", p.295:
                         *
                         *      "Another unique feature of the monochrome adapter is a set of line-drawing and area-fill characters
                         *      that give continuous lines and filled areas. This is unusual for a display with a 9x14 character box
                         *      because the character generator provides a row only eight dots wide. On most displays, a blank 9th
                         *      dot is then inserted between characters. On the monochrome display, there is circuitry that duplicates
                         *      the 8th dot into the 9th dot position for characters whose ASCII codes are 0xB0 [sic] through 0xDF."
                         *
                         * However, the above text is mistaken about the start of the range.  While there ARE line-drawing characters
                         * in the range 0xB0-0xBF, none of them extend all the way to the right edge; IBM carefully segregated them.
                         * And in fact, characters 0xB0-0xB2 contain hash patterns that you would NOT want extended into the 9th column.
                         *
                         * The CGA font is part of the same ROM.  In fact, there are TWO CGA fonts in the ROM: a thin 5x7 "single dot"
                         * font located at offset 0x1000, and a thick 7x7 "double dot" font at offset 0x1800.  The latter is the default
                         * font, unless overridden by a jumper setting on the CGA card, so it is our default CGA font as well (although
                         * someday we may provide a virtual jumper setting that allows you to select the thinner font).
                         *
                         * The first offset we must pass to setFontData() is the offset of the CGA font; we choose the thicker "double dot"
                         * CGA font at 0x1800 (which was the PC's default font as well), instead of the thinner "single dot" font at 0x1000.
                         * The second offset is for the MDA font.
                         */
                        this.setFontData(abFontData, [0x1800, 0x0000]);
                    }
                    else {
                        this.notice("Unrecognized font data length (" + abFontData.length + ")");
                        return;
                    }
            
                } catch (e) {
                    this.notice("Font ROM data error: " + e.message);
                    return;
                }
                /*
                 * If we're still here, then we're ready!
                 *
                 * UPDATE: Per issue #21, I'm issuing setReady() *only* if a valid contextScreen exists *or* a Debugger is attached.
                 *
                 * TODO: Consider a more general-purpose solution for deciding whether or not the user wants to run in a "headless" mode.
                 */
                if (this.contextScreen || this.dbg) this.setReady();
            };
            
            /**
             * onROMLoad(abRom, aParms)
             *
             * Called by the ROM's copyROM() function whenever a ROM component with a 'notify' attribute containing
             * our component ID has been loaded.
             *
             * @this {Video}
             * @param {Array.<number>} abROM
             * @param {Array.<number>} [aParms]
             */
            Video.prototype.onROMLoad = function(abROM, aParms)
            {
                if (this.nCard == Video.CARD.EGA) {
                    /*
                     * TODO: Unlike the MDA/CGA font data, we may want to hang onto this data, so that we can
                     * regenerate the color font(s) whenever the foreground and/or background colors have changed.
                     */
                    if (DEBUG) this.printMessage("onROMLoad(): EGA fonts loaded");
                    /*
                     * For EGA cards, in the absence of any parameters, we assume that we're receiving the original
                     * IBM EGA ROM, which stores its 8x14 font data at 0x2230 as a contiguous stream; the total size
                     * of the 8x14 font is 0xE00 bytes.
                     *
                     * At 0x3030, there is an "ALPHA SUPPLEMENT" table, which contains 15 bytes per row instead of 14,
                     * because each row is preceded by one byte containing the corresponding ASCII code; there are 20
                     * entries in the supplemental table, for a total size of 0x12C bytes.
                     *
                     * Finally, at 0x3160, we have the 8x8 font data (also known as the thicker "double dot" CGA font);
                     * the total size of the 8x8 font is 0x800 bytes.  No other font data is present in the EGA ROM;
                     * the thin 5x7 "single dot" CGA font is notably absent, which is fine, because we never loaded it for
                     * the MDA/CGA either.
                     *
                     * TODO: Determine how the supplemental table is used and whether we need to add some "run-time"
                     * font generation to support it (as opposed to "init-time" generation, which is all we do now).
                     * There's probably a similar need for user-defined fonts; for now, they're simply not supported.
                     */
                    this.setFontData(abROM, aParms || [0x3160, 0x2230], 8);
                }
                else if (this.nCard == Video.CARD.VGA) {
                    if (DEBUG) this.printMessage("onROMLoad(): VGA fonts loaded");
                    /*
                     * For VGA cards, in the absence of any parameters, we assume that we're receiving the original
                     * IBM VGA ROM, which contains an 8x14 font at 0x3F8D (and corresponding supplemental table at 0x4D8D)
                     * and an 8x8 font at 0x378D; however, it also contains an 8x16 font at 0x4EBA (and corresponding
                     * supplemental table at 0x5EBA).  See our reconstructed source code in ibm-vga.nasm.
                     */
                    this.setFontData(abROM, aParms || [0x378d, 0x3f8d], 8);
                }
                this.setReady();
            };
            
            /**
             * getCardColors(nBitsPerPixel)
             *
             * @this {Video}
             * @param {number} [nBitsPerPixel]
             * @returns {Array}
             */
            Video.prototype.getCardColors = function(nBitsPerPixel)
            {
                if (nBitsPerPixel == 1) {
                    /*
                     * Only 2 total colors.
                     */
                    this.aRGB[0] = Video.aCGAColors[Video.ATTRS.FGND_BLACK];
                    this.aRGB[1] = Video.aCGAColors[Video.ATTRS.FGND_WHITE];
                    return this.aRGB;
                }
            
                if (nBitsPerPixel == 2) {
                    /*
                     * Of the 4 colors returned, the first color comes from regColor and the other 3 come from one of
                     * the two hard-coded CGA color sets:
                     *
                     *      Color Set 1             Color Set 2
                     *      -----------             -----------
                     *      Background (0x00)       Background (0x00)
                     *      Green      (0x12)       Cyan       (0x13)
                     *      Red        (0x14)       Magenta    (0x15)
                     *      Brown      (0x16)       White      (0x17)
                     *
                     * The numbers in parentheses are the EGA ATC palette register values that the EGA BIOS uses for each
                     * color set; on an EGA, I synthesize a fake CGA regColor value, until I figure out exactly how the EGA
                     * simulates the CGA color palette.  TODO: Figure it out.
                     */
                    var regColor = this.cardActive.regColor;
                    if (this.cardActive === this.cardEGA) {
                        var bBackground = this.cardEGA.regATCData[0];
                        regColor = bBackground & Card.CGA.COLOR.BORDER;
                        if (bBackground & Card.ATC.PALETTE.BRIGHT) regColor |= Card.CGA.COLOR.BRIGHT;
                        if (this.cardEGA.regATCData[1] != 0x12) regColor |= Card.CGA.COLOR.COLORSET2;
                    }
                    this.aRGB[0] = Video.aCGAColors[regColor & (Card.CGA.COLOR.BORDER | Card.CGA.COLOR.BRIGHT)];
                    var aColorSet = (regColor & Card.CGA.COLOR.COLORSET2)? Video.aCGAColorSet2 : Video.aCGAColorSet1;
                    for (var iColor = 0; iColor < aColorSet.length; iColor++) {
                        this.aRGB[iColor+1] = Video.aCGAColors[aColorSet[iColor]];
                    }
                    return this.aRGB;
                }
            
                if (this.cardColor === this.cardCGA) {
                    /*
                     * There's no need to update this.aRGB if we simply want to return a hard-coded set of 16 colors.
                     */
                    return Video.aCGAColors;
                }
            
                this.assert(this.cardColor === this.cardEGA);
            
                var aRegs = (this.cardEGA.regATCData[15] != null? this.cardEGA.regATCData : Video.aEGAPalDef);
                for (var i = 0; i < this.aRGB.length; i++) {
                    var b = aRegs[i] || 0;
                    var bRed =   (((b & 0x04)? 0xaa : 0) | ((b & 0x20)? 0x55 : 0));
                    var bGreen = (((b & 0x02)? 0xaa : 0) | ((b & 0x10)? 0x55 : 0));
                    var bBlue =  (((b & 0x01)? 0xaa : 0) | ((b & 0x08)? 0x55 : 0));
                    this.aRGB[i] = [bRed, bGreen, bBlue, 0xff];
                }
                return this.aRGB;
            };
            
            /**
             * setFontData(abFontData, aFontOffsets, cxFontChar)
             *
             * To support partial font rebuilds (required for the EGA), we now preserve the original font data (abFontData),
             * font offsets (aFontOffsets), and font character width (8 for the EGA, undefined for the MDA/CGA).
             *
             * TODO: Ultimately, we want to have exactly one dedicated font for the EGA, the data for which we'll read directly
             * from plane 2 of video memory, instead of relying on the original font data in ROM.  Relying on the ROM data was
             * originally just a crutch to help get EGA support bootstrapped.
             *
             * Also, for the MDA/CGA, we should be discarding the font data after the first buildFonts() call, because we
             * should not need to ever rebuild the fonts for those cards (both their font patterns and colors were hard-coded).
             *
             * @this {Video}
             * @param {*} abFontData is the raw font data, from the ROM font file
             * @param {Array.<number>} aFontOffsets contains offsets into abFontData: [0] for CGA, [1] for MDA
             * @param {number} [cxFontChar] is a fixed character width to use for all fonts; undefined to use MDA/CGA defaults
             */
            Video.prototype.setFontData = function(abFontData, aFontOffsets, cxFontChar)
            {
                this.abFontData = abFontData;
                this.aFontOffsets = aFontOffsets;
                this.cxFontChar = cxFontChar;
            };
            
            /**
             * buildFonts()
             *
             * buildFonts() is called whenever the Video component is reset or restored; we used to build the fonts as soon
             * as the ROM containing them was loaded, and then throw away the underlying font data, but with the EGA's ability
             * to change the color of any font, font building must now be deferred until the reset or restore notifications,
             * ensuring we have access to all the colors the card is currently programmed to use.
             *
             * We're also called whenever EGA palette registers are modified, since one or more fonts will likely need
             * to be rebuilt (this is because our fonts contain pre-rendered images of all glyphs for all 16 active colors).
             * Calls to buildFonts() should not be expensive though: the underlying createFont() function rebuilds a font only
             * if its color has actually changed.
             *
             * TODO: We should avoid rebuilding fonts when palette registers change in graphics modes.  More importantly, our
             * font code is still written with the assumption that, like the MDA/CGA, the underlying font data never changes.
             * The EGA, however, stores its fonts in plane 2, which means fonts are dynamic; this needs to be fixed.
             *
             * Supporting dynamic EGA fonts should not be hard though.  We can get rid of abFontData and simply build a
             * temporary snapshot of all the font bytes in plane 2 of the EGA's video buffer (adwMemory), and pass that on to
             * buildFont() instead.  We'll also need to either invalidate the existing font's color (to trigger a rebuild) or
             * pass a new "force rebuild" flag.
             *
             * Once that's done, an added benefit will be that we can build just the font(s) that have been loaded into plane 2,
             * instead of the multitude of fonts that we now build on a just-in-case basis (eg, the MDA font, the 8x8 CGA font
             * for 43-line mode, and so on).
             *
             * @this {Video}
             * @return {boolean} true if any or all fonts were (re)built, false if nothing changed
             */
            Video.prototype.buildFonts = function()
            {
                var fChanges = false;
            
                /*
                 * There's no point building any fonts if we're in a non-windowed (eg, command-line) environment or no font data was loaded.
                 */
                if (window && this.abFontData) {
            
                    var aRGBColors = this.getCardColors();
                    var offSplit = 0x0000;
                    var cxChar = this.cxFontChar? this.cxFontChar : 8;
                    if (this.buildFont(Video.FONT.CGA, this.aFontOffsets[0], offSplit, cxChar, 8, this.abFontData, aRGBColors)) {
                        fChanges = true;
                    }
            
                    offSplit = this.cxFontChar? 0 : 0x0800;
                    cxChar = this.cxFontChar? this.cxFontChar : 9;
                    if (this.buildFont(Video.FONT.MDA, this.aFontOffsets[1], offSplit, cxChar, 14, this.abFontData, Video.aMDAColors, Video.aMDAColorMap)) {
                        fChanges = true;
                    }
            
                    if (this.cxFontChar) {
                        if (this.buildFont(this.nCard, this.aFontOffsets[1], 0, this.cxFontChar, 14, this.abFontData, aRGBColors)) {
                            fChanges = true;
                        }
                    }
                }
                return fChanges;
            };
            
            /**
             * buildFont(nFont, offData, offSplit, cxChar, cyChar, abFontData, aRGBColors, aColorMap)
             *
             * This is a wrapper for createFont() which also takes care loading double-size fonts when fDoubleFont is set.
             *
             * @this {Video}
             * @param {number} nFont
             * @param {number|null} offData is the offset of the font data, null if none
             * @param {number} offSplit is the offset of any split font data, or zero if not split
             * @param {number} cxChar is the width of the font characters
             * @param {number} cyChar is the height of the font characters
             * @param {*} abFontData is the raw font data, from the ROM font file
             * @param {Array} aRGBColors is an array of color RGB variations, corresponding to supported FGND attribute values
             * @param {Array} [aColorMap] contains color indexes corresponding to attribute values (if not supplied, the mapping is assumed to be 1-1)
             * @return {boolean} true if any or all fonts were (re)built, false if nothing changed
             */
            Video.prototype.buildFont = function(nFont, offData, offSplit, cxChar, cyChar, abFontData, aRGBColors, aColorMap)
            {
                var fChanges = false;
            
                if (offData != null) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("buildFont(" + nFont + "): building " + Video.cardSpecs[nFont][0] + " font");
                    }
                    if (this.createFont(nFont, offData, offSplit, cxChar, cyChar, abFontData, aRGBColors, aColorMap)) fChanges = true;
                    /*
                     * If font-doubling is enabled, then load a double-size version of the font as well, as it provides
                     * sharper rendering, especially when the screen cell size is a multiple of the above font cell size;
                     * in the case of the CGA, this may also be useful for 40-column modes.
                     */
                    if (this.fDoubleFont) {
                        nFont <<= 1;
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("buildFont(" + nFont + "): building " + Video.cardSpecs[nFont >> 1][0] + " double-size font");
                        }
                        if (this.createFont(nFont, offData, offSplit, cxChar, cyChar, abFontData, aRGBColors, aColorMap)) fChanges = true;
                    }
                }
                return fChanges;
            };
            
            /**
             * createFont(nFont, offData, offSplit, cxChar, cyChar, abFontData, aRGBColors, aColorMap)
             *
             * All color variations are stored on the same font canvas, arranged vertically as a series of grids, where each
             * grid is a 16x16 character glyph array.
             *
             * Since every character must be drawn first with its background color and then with the foreground shape on top,
             * I used to include a series of empty cells at the top every font canvas containing all supported background colors
             * (ie, before the character grids).  But now createFont() also creates an aCSSColors array that is saved alongside
             * the font canvas, and updateChar() uses that array in conjunction with fillRect() to draw character backgrounds.
             *
             * @this {Video}
             * @param {number} nFont
             * @param {number} offData is the offset of the font data
             * @param {number} offSplit is the offset of any split font data, or zero if not split
             * @param {number} cxChar is the width of the font characters
             * @param {number} cyChar is the height of the font characters
             * @param {*} abFontData is the raw font data, from the ROM font file
             * @param {Array} aRGBColors is an array of color RGB variations, corresponding to supported FGND attribute values
             * @param {Array|undefined} aColorMap contains color indexes corresponding to attribute values (if not supplied, the mapping is assumed to be 1-1)
             * @return {boolean} true if any or all fonts were (re)created, false if nothing changed
             */
            Video.prototype.createFont = function(nFont, offData, offSplit, cxChar, cyChar, abFontData, aRGBColors, aColorMap)
            {
                var fChanges = false;
                var nDouble = (nFont & 0x1)? 0 : 1;
                var font = this.aFonts[nFont];
                if (!font) {
                    font = {
                        cxCell:     cxChar << nDouble,
                        cyCell:     cyChar << nDouble,
                        aCSSColors: new Array(aRGBColors.length),
                        aRGBColors: aRGBColors.slice(),     // using the Array slice() method to simply make a copy
                        aColorMap:  aColorMap,
                        aCanvas:    new Array(aRGBColors.length)
                    };
                }
                for (var iColor = 0; iColor < aRGBColors.length; iColor++) {
                    var rgbColor = aRGBColors[iColor];
                    var rgbColorOrig = font.aCSSColors[iColor]? font.aRGBColors[iColor] : [];
                    if (rgbColor[0] !== rgbColorOrig[0] || rgbColor[1] !== rgbColorOrig[1] || rgbColor[2] !== rgbColorOrig[2]) {
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("creating font color " + iColor + " for font " + nFont);
                        }
                        this.createFontColor(font, iColor, rgbColor, nDouble, offData, offSplit, cxChar, cyChar, abFontData);
                        fChanges = true;
                    }
                }
                this.aFonts[nFont] = font;
                return fChanges;
            };
            
            /**
             * createFontColor(font, iColor, rgbColor, nDouble, offData, offSplit, cxChar, cyChar, abFontData)
             *
             * @this {Video}
             * @param {Object} font
             * @param {number} iColor
             * @param {Array} rgbColor contains the RGB values for iColor
             * @param {number} nDouble is 1 to double output font dimensions, 0 to match input dimensions
             * @param {number} offData is the offset of the font data
             * @param {number} offSplit is the offset of any split font data, or zero if not split
             * @param {number} cxChar is the width of the font characters
             * @param {number} cyChar is the height of the font characters
             * @param {*} abFontData is the raw font data, from the ROM font file
             */
            Video.prototype.createFontColor = function(font, iColor, rgbColor, nDouble, offData, offSplit, cxChar, cyChar, abFontData)
            {
                /*
                 * Now we're ready to create a 16x16 character grid for the specified color.  Note that all
                 * the character bits are opaque (alpha=0xff) while all the surrounding bits are transparent
                 * (alpha=0x00, as specified in the 4th byte of rgbOff).
                 *
                 * Originally, I created 256 ImageData objects, using context.createImageData(cxChar,cyChar),
                 * then setting its pixels to match those of an individual character, and then drawing characters
                 * with contextFont.putImageData().  But putImageData() is relatively slow....
                 *
                 * Now I create a new canvas, with dimensions that allow me to arrange all 256 characters in an
                 * 16x16 grid -- much like the "chargen.png" bitmap used in the C1Pjs version of the Video component.
                 * Then drawing becomes much the same as before, because it turns out that drawImage() accepts either
                 * an image object OR a canvas object.
                 *
                 * This also yields better performance, since drawImage() is much faster than putImageData().
                 * We still have to use putImageData() to build the font canvas, but that's a one-time operation.
                 */
                var rgbOff = [0x00, 0x00, 0x00, 0x00];
                var canvasFont = window.document.createElement("canvas");
                canvasFont.width = font.cxCell << 4;
                canvasFont.height = (font.cyCell << 4);
                var contextFont = canvasFont.getContext("2d");
            
                /*
                 * See notes above regarding ImageSmoothingEnabled....
                 *
                 contextFont['mozImageSmoothingEnabled'] = false;
                 contextFont['webkitImageSmoothingEnabled'] = false;
                 */
            
                var iChar, x, y;
                var cyLimit = (cyChar < 8 || !offSplit)? cyChar : 8;
                var imageChar = contextFont.createImageData(font.cxCell, font.cyCell);
            
                for (iChar = 0; iChar < 256; iChar++) {
                    for (y = 0; y < cyChar; y++) {
                        /*
                         * fUnderline should be true only in the FONT_MDA case, and only for the odd color variations
                         * (1 and 3, out of variations 0 to 4), and only for the two bottom-most rows of the character cell
                         * (which I still need to confirm)
                         */
                        var fUnderline = (font.aColorMap && (iColor & 0x1) && y >= cyChar - 2);
                        var offChar = (y < cyLimit? offData + iChar * cyLimit + y : offSplit + iChar * cyLimit + y - cyLimit);
                        var b = abFontData[offChar];
                        for (var nRowDoubler = 0; nRowDoubler <= nDouble; nRowDoubler++) {
                            for (x = 0; x < cxChar; x++) {
                                /*
                                 * This "bit" of logic takes care of those characters (0xC0-0xDF) whose 9th bit must mirror the 8th bit;
                                 * in all other cases, any bit past the 8th bit is automatically zero.  It also takes care of embedding a solid
                                 * row of bits whenever fUnderline is true.
                                 */
                                var bit = (fUnderline? 1 : (b & (0x80 >> (x >= 8 && iChar >= 0xC0 && iChar <= 0xDF? 7 : x))));
                                var xDst = (x << nDouble);
                                var yDst = (y << nDouble) + nRowDoubler;
                                var rgb = (bit? rgbColor : rgbOff);
                                this.setPixel(imageChar, xDst, yDst, rgb);
                                if (nDouble) this.setPixel(imageChar, xDst + 1, yDst, rgb);
                            }
                        }
                    }
                    /*
                     * (iChar >> 4) performs the integer equivalent of Math.floor(iChar / 16), and (iChar & 0xf) is the equivalent of (iChar % 16).
                     */
                    contextFont.putImageData(imageChar, x = (iChar & 0xf) * font.cxCell, y = (iChar >> 4) * font.cyCell);
                }
            
                /*
                 * The colors for cell backgrounds and cursor elements must be converted to CSS color strings.
                 */
                font.aCSSColors[iColor] = "#" + str.toHex(rgbColor[0], 2) + str.toHex(rgbColor[1], 2) + str.toHex(rgbColor[2], 2);
                font.aRGBColors[iColor] = rgbColor;
            
                /*
                 * Enable this code if you want to see what the generated font looks like....
                 *
                if (MAXDEBUG) {
                    var iSrcColor = (iColor == 15? 0 : iColor + 1);
                    this.contextScreen.fillStyle = aCSSColors[iSrcColor];
                    this.contextScreen.fillRect(iColor*(font.cxCell<<2), 0, canvasFont.width>>2, font.cyCell<<4);
                    this.contextScreen.drawImage(canvasFont, 0, iColor*(font.cyCell<<4), canvasFont.width>>2, font.cyCell<<4, iColor*(font.cxCell<<2), 0, canvasFont.width>>2, font.cyCell<<4);
                }
                 */
            
                font.aCanvas[iColor] = canvasFont;
            };
            
            /**
             * checkBlink()
             *
             * Called at the end of every updateScreen(), which may have updated cBlinkVisible to a non-zero value.
             *
             * Also called at the end of every checkCursor(); ie, whenever the CRT register(s) affecting the position or shape
             * of the hardware cursor have been modified, and any of iCellCursor, yCursor or cyCursor have been modified as a result.
             *
             * Note that the cursor always blinks when it's ON; it can only be turned OFF, moved off-screen, or its rate set to half
             * the normal blink rate (by default, it blinks at the normal blink rate).  Bits 5-6 of the CRTC.CURSOR_START register can
             * be set as follows:
             *
             *    00: Cursor blinks at normal blink rate
             *    01: Cursor is off
             *    10: (Same as 00)
             *    11: Cursor blinks at half the normal blink rate
             *
             * According to documentation, the normal blink rate is 1/16 of the frame rate (8 frames on, 8 off).
             *
             * TODO: As an aside, I've observed in the "real world" that the MDA cursor cycles about 3 times per second, and by "cycle"
             * I mean one full off-and-on-again cycle.  I'm assuming that's the normal rate (00), not the slower "half rate" (11).
             * Since that's faster than our current cursor blink rate, we should look into an option to boost our rate, without adversely
             * affecting the attribute blink rate (which is currently hard-coded at half the cursor blink rate), and we should look into
             * supporting "half rate" blinking, too.
             *
             * @this {Video}
             * @return {boolean} true if there are things to blink, false if not
             */
            Video.prototype.checkBlink = function()
            {
                if (this.cBlinkVisible > 0 || this.iCellCursor >= 0) {
                    if (this.cBlinks < 0) {
                        this.cBlinks = 0;
                        /*
                         * At this point, we can either fire up our own timer (doBlink), or rely on updateScreen()
                         * being called by the CPU at a regular rate (eg, CPU.VIDEO_UPDATES_PER_SECOND = 60) and advance
                         * cBlinks at the start of updateScreen() accordingly.
                         *
                         * doBlink() wants to increment cBlinks every 266ms.  On the other hand, if updateScreen() is being
                         * called 60 times per second, that's about once every 16ms, so if every 16th updateScreen() increments
                         * cBlinks, cBlinks should advance at the same rate.
                         *
                         * The only downside to relying on the CPU driving our blink count is that whenever the CPU is halted
                         * (eg, by the PCjs debugger) all blinking stops -- all characters with the blink attribute AND the cursor.
                         *
                         * But we can simply say that when we halt, we mean "halt everything" (ie, call it a feature).
                         *
                         *      this.doBlink(true);
                         */
                    }
                    return true;
                }
                this.cBlinks = -1;
                return false;
            };
            
            /**
             * checkCursor()
             *
             * Called whenever a CRT data register is updated, since there are multiple registers that can affect the
             * visibility of the cursor (more than these, actually, but I'm going to limit my initial support to standard
             * ROM BIOS controller settings):
             *
             *      CRTC.MAX_SCAN_LINE
             *      CRTC.CURSOR_START
             *      CRTC.CURSOR_END
             *      CRTC.START_ADDR_HI
             *      CRTC.START_ADDR_LO
             *      CRTC.CURSOR_ADDR_HI
             *      CRTC.CURSOR_ADDR_LO
             *
             * @this {Video}
             * @return {boolean} true if the cursor is visible, false if not
             */
            Video.prototype.checkCursor = function()
            {
                /*
                 * The "hardware cursor" is never visible in graphics modes.
                 */
                if (!this.nFont) return false;
            
                for (var i = Card.CRTC.CURSOR_START.INDX; i <= Card.CRTC.CURSOR_ADDR_LO; i++) {
                    if (this.cardActive.regCRTData[i] == null)
                        return false;
                }
            
                var bCursorFlags = this.cardActive.regCRTData[Card.CRTC.CURSOR_START.INDX];
                var bCursorStart = bCursorFlags & Card.CRTC.CURSOR_START.MASK;
                var bCursorEnd = this.cardActive.regCRTData[Card.CRTC.CURSOR_END.INDX] & Card.CRTC.CURSOR_END.MASK;
                var bCursorMax = this.cardActive.regCRTData[Card.CRTC.MAX_SCAN_LINE] & Card.CRTC.CURSOR_END.MASK;
            
                /*
                 * HACK: The original EGA BIOS has a cursor emulation bug when 43-line mode is enabled, so we attempt to detect
                 * that particular combination of bad values and automatically fix them (we're so thoughtful!)
                 */
                var fEGAHack = false;
                if (this.cardActive === this.cardEGA) {
                    fEGAHack = true;
                    if (bCursorMax == 7 && bCursorStart == 4 && !bCursorEnd) bCursorEnd = 7;
                }
            
                /*
                 * One way of disabling the cursor is to set bit 5 (Card.CRTC.CURSOR_START.BLINKOFF) of the CRTC.CURSOR_START flags;
                 * another way is setting bCursorStart > bCursorEnd (unless it's an EGA, in which case we must actually draw a
                 * "split block" cursor instead).
                 *
                 * TODO: Verify whether the second test (bCursorStart > bCursorMax) should also result in a hidden cursor;
                 * ThinkTank sets both start and end values to 0x0f, which doesn't make sense on a CGA, where the max is 0x07.
                 */
                if ((bCursorFlags & Card.CRTC.CURSOR_START.BLINKOFF) || bCursorStart > bCursorEnd && !fEGAHack || bCursorStart > bCursorMax) {
                    this.removeCursor();
                    return false;
                }
            
                /*
                 * The most compatible way of disabling the cursor is to simply move the cursor to an off-screen position.
                 */
                var iCellCursor = (this.cardActive.regCRTData[Card.CRTC.CURSOR_ADDR_LO] + ((this.cardActive.regCRTData[Card.CRTC.CURSOR_ADDR_HI] & Card.CRTC.ADDR_HI_MASK) << 8));
                if (this.iCellCursor != iCellCursor) {
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("checkCursor(): cursor moved from " + this.iCellCursor + " to " + iCellCursor);
                    }
                    this.removeCursor();
                    this.iCellCursor = iCellCursor;
                }
            
                /*
                 * yCursor and cyCursor are no longer scaled at this point, because the necessary scaling will depend on whether we're
                 * drawing the cursor to the on-screen or off-screen buffer, and updateChar() is in the best position to determine that.
                 *
                 * We also record cyCursorCell, the hardware cell height, since we'll need to know what the yCursor and cyCursor values
                 * are relative to when it's time to scale them.
                 */
                var bCursorSize = bCursorEnd - bCursorStart + 1;
                if (this.yCursor != bCursorStart || this.cyCursor != bCursorSize) {
                    this.yCursor = bCursorStart;
                    this.cyCursor = bCursorSize;
                }
                this.cyCursorCell = bCursorMax + 1;
            
                this.checkBlink();
                return true;
            };
            
            /**
             * removeCursor()
             *
             * @this {Video}
             */
            Video.prototype.removeCursor = function()
            {
                if (this.iCellCursor >= 0) {
                    if (this.aCellCache !== undefined) {
                        var drawCursor = (Video.ATTRS.DRAW_CURSOR << 8);
                        var data = this.aCellCache[this.iCellCursor];
                        if (data & drawCursor) {
                            data &= ~drawCursor;
                            var col = this.iCellCursor % this.nCols;
                            var row = (this.iCellCursor / this.nCols)|0;
                            if (this.nFont && this.aFonts[this.nFont]) {
                                /*
                                 * If we're using an off-screen buffer in text mode, then we need to keep it in sync with "reality".
                                 */
                                if (this.contextScreenBuffer) {
                                    this.updateChar(col, row, data, this.contextScreenBuffer);
                                }
                                /*
                                 * While updating the on-screen canvas directly could open us up to potential subpixel artifacts again,
                                 * I'm hopeful that won't be the case, since removeCursor() is called only during certain well-defined
                                 * events.  The alternative to this simple updateChar() call is unappealing: redrawing the ENTIRE off-screen
                                 * buffer to the on-screen canvas, just as updateScreen() does.
                                 */
                                this.updateChar(col, row, data);
                            }
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("removeCursor(): removed from " + row + "," + col);
                            }
                            this.aCellCache[this.iCellCursor] = data;
                        }
                    }
                    this.iCellCursor = -1;
                }
            };
            
            /**
             * getAccess()
             *
             * @this {Video}
             * @return {number|undefined} current memory access setting, or undefined if unknown
             */
            Video.prototype.getAccess = function()
            {
                var nAccess;
                var card = this.cardActive;
            
                this.fLinear = false;
                var regGRCMode = card.regGRCData[Card.GRC.MODE.INDX];
                if (regGRCMode != null) {
                    var nReadAccess = Card.ACCESS.READ.MODE0;
                    var nWriteAccess = Card.ACCESS.WRITE.MODE0;
                    var nWriteMode = regGRCMode & Card.GRC.MODE.WRITE.MASK;
                    var regDataRotate = card.regGRCData[Card.GRC.DATAROT.INDX] & Card.GRC.DATAROT.MASK;
                    switch (nWriteMode) {
                    case Card.GRC.MODE.WRITE.MODE0:
                        if (regDataRotate) {
                            nWriteAccess = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.ROT;
                            switch (regDataRotate & Card.GRC.DATAROT.FUNC) {
                            case Card.GRC.DATAROT.AND:
                                nWriteAccess = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.AND;
                                break;
                            case Card.GRC.DATAROT.OR:
                                nWriteAccess = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.OR;
                                break;
                            case Card.GRC.DATAROT.XOR:
                                nWriteAccess = Card.ACCESS.WRITE.MODE0 | Card.ACCESS.WRITE.XOR;
                                break;
                            default:
                                break;
                            }
                            card.nDataRotate = regDataRotate & Card.GRC.DATAROT.COUNT;
                        }
                        break;
                    case Card.GRC.MODE.WRITE.MODE1:
                        nWriteAccess = Card.ACCESS.WRITE.MODE1;
                        break;
                    case Card.GRC.MODE.WRITE.MODE2:
                        switch (regDataRotate & Card.GRC.DATAROT.FUNC) {
                        default:
                            nWriteAccess = Card.ACCESS.WRITE.MODE2;
                            break;
                        case Card.GRC.DATAROT.AND:
                            nWriteAccess = Card.ACCESS.WRITE.MODE2 | Card.ACCESS.WRITE.AND;
                            break;
                        case Card.GRC.DATAROT.OR:
                            nWriteAccess = Card.ACCESS.WRITE.MODE2 | Card.ACCESS.WRITE.OR;
                            break;
                        case Card.GRC.DATAROT.XOR:
                            nWriteAccess = Card.ACCESS.WRITE.MODE2 | Card.ACCESS.WRITE.XOR;
                            break;
                        }
                        break;
                    case Card.GRC.MODE.WRITE.MODE3:
                        if (this.nCard == Video.CARD.VGA) {
                            nWriteAccess = Card.ACCESS.WRITE.MODE3;
                        }
                        break;
                    default:
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("getAccess(): invalid GRC mode (" + str.toHexByte(regGRCMode) + ")");
                        }
                        break;
                    }
                    if (regGRCMode & Card.GRC.MODE.READ.MODE1) {
                        nReadAccess = Card.ACCESS.READ.MODE1;
                    }
                    /*
                     * I discovered that when the IBM EGA ROM scrolls the screen in graphics modes 0x0D and 0x0E, it
                     * reprograms this register for WRITE.MODE1 (which is fine) *and* EVENODD (which is, um, very odd).
                     * Moreover, it does NOT make the complementary change to the SEQ.MEMMODE.SEQUENTIAL bit; under
                     * normal circumstances, those two bits are always supposed to programmed oppositely.
                     *
                     * Until I can perform some tests on real hardware, I have to assume that the EGA scroll operation
                     * is supposed to actually WORK in modes 0x0D and 0x0E, so I've decided to tie the trigger for my own
                     * EVENODD functions to SEQ.MEMMODE.SEQUENTIAL being clear, instead of GRC.MODE.EVENODD being set.
                     *
                     * It's also possible that my EVENODD read/write functions are not implemented properly; when EVENODD
                     * is in effect, which addresses get latched by a read, and to which addresses are latches written?
                     * If EVENODD has no effect on the effective address used with the latches, then I should change the
                     * EVENODD read/write functions accordingly.
                     *
                     * However, I've also done some limited testing with an emulated VGA running in text mode, and I've
                     * discovered that toggling the GRC.MODE.EVENODD bit *alone* doesn't seem to affect the delivery of
                     * text mode attributes from plane 1.  So maybe this is the wiser change after all.
                     *
                     * TODO: Perform some tests on actual EGA/VGA hardware, to determine the proper course of action.
                     *
                     *  if (regGRCMode & Card.GRC.MODE.EVENODD) {
                     *      nReadAccess |= Card.ACCESS.READ.EVENODD;
                     *      nWriteAccess |= Card.ACCESS.WRITE.EVENODD;
                     *  }
                     */
                    var regSEQMode = card.regSEQData[Card.SEQ.MEMMODE.INDX];
                    if (regSEQMode != null) {
                        if (!(regSEQMode & Card.SEQ.MEMMODE.SEQUENTIAL)) {
                            nReadAccess |= Card.ACCESS.READ.EVENODD;
                            nWriteAccess |= Card.ACCESS.WRITE.EVENODD;
                        }
                        if (regSEQMode & Card.SEQ.MEMMODE.CHAIN4) {
                            nReadAccess |= Card.ACCESS.READ.CHAIN4;
                            nWriteAccess |= Card.ACCESS.WRITE.CHAIN4;
                            this.fLinear = true;
                        }
                    }
                    nAccess = nReadAccess | nWriteAccess;
                }
                return nAccess;
            };
            
            /**
             * setAccess(nAccess)
             *
             * @this {Video}
             * @param {number|undefined} nAccess (one of the Card.ACCESS.* constants)
             */
            Video.prototype.setAccess = function(nAccess)
            {
                var card = this.cardActive;
                if (card && nAccess != null && nAccess != card.nAccess) {
            
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("setAccess(" + str.toHexWord(nAccess) + ")");
                    }
            
                    card.setMemoryAccess(nAccess);
            
                    /*
                     * Note that setMemoryAccess() can fail, in which case it will an report error, indicating either a
                     * misconfiguration or some sort of internal inconsistency; in any case, there's not much we can do about
                     * it at this point, other than possibly reverting the current access setting.  There's probably not much
                     * point, however, because there's no guarantee that setMemoryAccess() didn't modify one or more blocks
                     * before choking.
                     */
                    this.bus.setMemoryAccess(card.addrBuffer, card.sizeBuffer, card.getMemoryAccess());
                }
            };
            
            /**
             * setDimensions()
             *
             * @this {Video}
             */
            Video.prototype.setDimensions = function()
            {
                this.nFont = 0;
                this.nCols = this.nColsDefault;
                this.nRows = this.nRowsDefault;
                this.nColsLogical = this.nCols;
                this.nCellsPerWord = Video.aModeParms[Video.MODE.MDA_80X25][2];
            
                this.cbPadding = 0;
                var modeParms = Video.aModeParms[this.nMode];
                if (modeParms) {
            
                    this.nCols = modeParms[0];
                    this.nRows = modeParms[1];
                    this.nCellsPerWord = modeParms[2];
                    this.cbPadding = modeParms[3] || 0;
                    this.nFont = modeParms[4];      // this will be undefined for graphics modes
            
                    if (this.nMonitorType == ChipSet.MONITOR.EGACOLOR || this.nMonitorType == ChipSet.MONITOR.VGACOLOR) {
                        /*
                         * When an EGA is connected to a CGA monitor, the old aModeParms table is correct: we must
                         * use the hard-coded 8x8 "CGA_80" font.  But when it's connected to an EGA monitor, we want
                         * to use the 9x14 "EGA" color font instead.
                         *
                         * TODO: Can an EGA with a monochrome monitor be programmed for 43-line mode as well?  If so,
                         * then we'll need to load another MDA font variation, because we only load an 9x14 font for MDA.
                         */
                        if (this.cardActive === this.cardEGA && this.nFont == Video.FONT.CGA) {
                            if (this.cardEGA.regCRTData[Card.CRTC.MAX_SCAN_LINE] == 7) {
                                /*
                                 * Vertical resolution of 350 divided by 8 (ie, scan lines 0-7) yields 43 whole rows.
                                 */
                                this.nRows = 43;
                            }
                            /*
                             * Since we can also be called before any hardware registers have been initialized,
                             * it may be best to not perform the following test (which is why it's commented out).
                             */
                            else /* if (this.cardEGA.regCRTData[Card.CRTC.MAX_SCAN_LINE] == 13) */ {
                                /*
                                 * Vertical resolution of 350 divided by 14 (ie, scan lines 0-13) yields exactly 25 rows.
                                 *
                                 * Note that a card's default font matches its card ID (eg, Video.CARD.EGA == Video.FONT.EGA,
                                 * and Video.CARD.VGA == Video.FONT.VGA)
                                 */
                                this.nFont = this.nCard;
                            }
                        }
                    }
                }
            
                this.nCells = (this.nCols * this.nRows)|0;
                this.nCellCache = (this.nCells / this.nCellsPerWord)|0;
                this.cbScreen = ((this.nCellCache << 1) + this.cbPadding)|0;
                this.cbSplit = (this.cbPadding? ((this.cbScreen + this.cbPadding) >> 1) : 0);
                this.fLinear = false;                                               // set for 8bpp "linear" VGA modes only
                if (this.nMode >= Video.MODE.EGA_320X200) this.nCellCache <<= 1;    // double nCellCache (every cell is a byte)
            
                /*
                 * If no fonts were successfully loaded, there's no point in initializing the remaining drawing parameters.
                 */
                if (!this.aFonts.length) return;
            
                this.cxScreenCell = (this.cxScreen / this.nCols)|0;
                this.cyScreenCell = (this.cyScreen / this.nRows)|0;
            
                /*
                 * Now we make the all-important scaling determination: if the font cell dimensions (cxCell, cyCell)
                 * don't match the physical screen cell dimensions (cxCell, cyCell), then we look at the caller's
                 * fScaleFont setting: if it's false, we draw the characters as-is, with a border if the characters
                 * are smaller than the cells; and if fScaleFont is true, we simply tell drawImage to draw the
                 * characters to fit.
                 *
                 * WARNING: The only problem with fScaleFont is that any stretching or shrinking tends to be accompanied
                 * by subpixel artifacts along the boundaries of the font images.  Definitely annoying, and apparently
                 * there are no standard mechanisms for turning that behavior off. So, for now, I've "neutered" the
                 * fScaleFont test slightly, by adding the "nCols == 80" test that prevents scaling from kicking in for
                 * 40-column modes.
                 *
                 * Also, whether scaling or not, if it makes sense to use a "doubled" font, we'll switch the font as
                 * well.  Note that the doubled font for any existing font also has an ID that is double the existing ID,
                 * making it easy to check for the existence of a font's "double" (shift the ID left by 1).
                 *
                 * TODO: Since we now use an off-screen buffer for ALL modes, both text and graphics, we should
                 * revisit changes that were made to work around subpixel artifacts; those should no longer be an issue.
                 */
                if (this.nFont) {
                    var font = this.aFonts[this.nFont];
                    var fontDoubled = this.aFonts[this.nFont << 1];
            
                    if (this.fScaleFont && this.nCols == 80) {
                        if (fontDoubled) {
                            if (this.cxScreenCell >= (fontDoubled.cxCell * 3) >> 2) { // && this.cyScreenCell > (fontDoubled.cyCell * 3) >> 2) {
                                this.nFont <<= 1;
                                font = fontDoubled;
                                if (DEBUG) this.log("setDimensions(): switching to double-size font, scaled");
                            }
                        }
                    } else {
                        if (fontDoubled) {
                            if (this.cxScreenCell >= fontDoubled.cxCell) { // && this.cyScreenCell == fontDoubled.cyCell) {
                                this.nFont <<= 1;
                                font = fontDoubled;
                                if (DEBUG) this.log("setDimensions(): switching to double-size font, unscaled");
                            }
                        }
                        if (font) {
                            this.cxScreenCell = font.cxCell;
                            this.cyScreenCell = font.cyCell;
                        }
                    }
            
                    /*
                     * In text modes, we have the option of setting all the *ScreenBuffer variables to null instead of
                     * allocating them, because updateChar(), as currently written, is capable of writing characters to
                     * either an off-screen or on-screen context.
                     *
                     *      this.imageScreenBuffer = this.canvasScreenBuffer = this.contextScreenBuffer = null;
                     */
                    this.cxBuffer = this.cyBuffer = 0;
                    if (font) {
                        this.cxBuffer = this.nCols * font.cxCell;
                        this.cyBuffer = this.nRows * font.cyCell;
                    }
                } else {
                    /*
                     * CGA graphics modes have their "cells" (pixels) split evenly across two halves of the video buffer, with
                     * EVEN scan lines in the first half and ODD scan lines in the second half, so unlike text modes, we can't set a
                     * limit of what's visible on-screen to "columns * rows", so the screen limit is set to match the buffer limit.
                     *
                     * In addition, updateScreen() requires an off-screen imageData buffer that matches the size of the entire screen,
                     * so that updateScreen() can set all pixels that have changed and then update the screen with a single drawImage().
                     *
                     * An alternative approach, with a smaller footprint, would be to allocate an off-screen buffer large enough for a
                     * single scan line, and redraw one scan line at a time, but given how EVEN and ODD scan lines are spread across the
                     * entire buffer, it's not clear there would be enough unchanged scan lines on average to make that approach faster.
                     */
                    this.cxScreenCell = this.cyScreenCell = 1;  // in graphics mode, a cell is exactly one pixel
                    this.cxBuffer = this.nCols;
                    this.cyBuffer = this.nRows;
                }
            
                /*
                 * Allocate the off-screen buffers
                 */
                this.imageScreenBuffer = this.contextScreen.createImageData(this.cxBuffer, this.cyBuffer);
                this.canvasScreenBuffer = window.document.createElement("canvas");
                this.canvasScreenBuffer.width = this.cxBuffer;
                this.canvasScreenBuffer.height = this.cyBuffer;
                this.contextScreenBuffer = this.canvasScreenBuffer.getContext("2d");
            
                /*
                 * Since cxCell and cyCell were originally defined in terms of cxScreen/nCols and cyScreen/nRows, you might think
                 * these border calculations would always be zero, but that would mean you overlooked the code above which tries to
                 * avoid stretching 40-column modes into an unpleasantly wide shape.
                 */
                this.xScreenOffset = this.yScreenOffset = 0;
                this.cxScreenOffset = this.cxScreen;
                this.cyScreenOffset = this.cyScreen;
            
                var cxBorder = this.cxScreen - (this.nCols * this.cxScreenCell);
                var cyBorder = this.cyScreen - (this.nRows * this.cyScreenCell);
                if (cxBorder > 0) {
                    this.xScreenOffset = (cxBorder >> 1);
                    this.cxScreenOffset -= cxBorder;
                }
                if (cyBorder > 0) {
                    this.yScreenOffset = (cyBorder >> 1);
                    this.cyScreenOffset -= cyBorder;
                }
                if (cxBorder || cyBorder) {
                    this.contextScreen.fillStyle = this.canvasScreen.style.backgroundColor;
                    this.contextScreen.fillRect(0, 0, this.cxScreen, this.cyScreen);
                }
            };
            
            /**
             * checkMode(fForce)
             *
             * Called whenever the MDA/CGA's mode register (eg, Card.MDA.MODE.PORT, Card.CGA.MODE.PORT) is updated,
             * or whenever the EGA's GRC Misc register is updated, or when we've just finished a restore().
             *
             * @this {Video}
             * @param {boolean} [fForce] is used to force a mode update, if we recognize the current mode
             * @return {boolean} true if successful, false if not
             */
            Video.prototype.checkMode = function(fForce)
            {
                var nAccess;
                var nMode = this.nMode;
                var card = this.cardActive;
            
                if (!card) {
                    /*
                     * We are likely being called after a restore(), which needs us to call setMode() to insure the proper video
                     * buffer is mapped in.  So we unset this.nMode to guarantee that setMode() will be called, and if it wasn't set
                     * to anything before, then we fall-back to the default mode.
                     */
                    this.nMode = null;
                    if (nMode == null) nMode = this.nModeDefault;
                }
                else {
                    if (card.nCard == Video.CARD.MDA) {
                        nMode = Video.MODE.MDA_80X25;
                    }
                    else if (card.nCard >= Video.CARD.EGA) {
                        /*
                         * The sizeBuffer we choose reflects the amount of physical address space that all 4 planes
                         * of EGA memory normally span, NOT the total amount of EGA memory.  So for a 64Kb EGA card,
                         * we would set card.sizeBuffer to 16Kb (0x4000).
                         *
                         * TODO: Need to take into account modes that "chain" planes together (eg, mode 0x0F, and
                         * presumably mode 0x10, on an EGA card with only 64Kb).
                         */
                        nMode = null;
                        var cbBuffer = card.cbMemory >> 2;
                        var cbBufferText = (cbBuffer > 0x8000? 0x8000 : cbBuffer);
            
                        var regGRCMisc = card.regGRCData[Card.GRC.MISC.INDX];
                        if (regGRCMisc != null) {
            
                            switch(regGRCMisc & Card.GRC.MISC.MAPMEM) {
                            case Card.GRC.MISC.MAPA0128:
                                card.addrBuffer = 0xA0000;
                                card.sizeBuffer = cbBuffer;     // 0x20000
                                nMode = Video.MODE.UNKNOWN;     // no BIOS mode uses this mapping, but we don't want to leave nMode null if we've come this far
                                break;
                            case Card.GRC.MISC.MAPA064:
                                card.addrBuffer = 0xA0000;
                                card.sizeBuffer = cbBuffer;     // 0x10000
                                nMode = (this.nMonitorType == ChipSet.MONITOR.MONO? Video.MODE.EGA_640X350_MONO : Video.MODE.EGA_640X350);
                                break;
                            case Card.GRC.MISC.MAPB032:
                                card.addrBuffer = 0xB0000;
                                card.sizeBuffer = cbBufferText;
                                nMode = Video.MODE.MDA_80X25;
                                break;
                            case Card.GRC.MISC.MAPB832:
                                card.addrBuffer = 0xB8000;
                                card.sizeBuffer = cbBufferText;
                                nMode = (this.nMonitorType == ChipSet.MONITOR.MONO? Video.MODE.CGA_80X25_BW : Video.MODE.CGA_80X25);
                                break;
                            default:
                                break;
                            }
            
                            var fSEQDotClock = (card.regSEQData[Card.SEQ.CLOCKING.INDX] & Card.SEQ.CLOCKING.DOTCLOCK);
                            var nCRTCVertTotal = card.regCRTData[Card.CRTC.EGA.VERT_TOTAL];
                            nCRTCVertTotal |= ((card.regCRTData[Card.CRTC.EGA.OVERFLOW.INDX] & Card.CRTC.EGA.OVERFLOW.VERT_TOTAL_BIT8)? 0x100 : 0);
                            if (card.nCard == Video.CARD.VGA) {
                                nCRTCVertTotal |= ((card.regCRTData[Card.CRTC.EGA.OVERFLOW.INDX] & Card.CRTC.EGA.OVERFLOW.VERT_TOTAL_BIT9)? 0x200 : 0);
                            }
            
                            if (nMode != Video.MODE.UNKNOWN) {
                                if (!(regGRCMisc & Card.GRC.MISC.GRAPHICS)) {
                                    if (fSEQDotClock) nMode -= 2;
                                } else {
                                    if (card.addrBuffer == 0xB8000) {
                                        /*
                                         * Since nMode will have been assigned a default of either 0x02 or 0x03, convert that to either
                                         * 0x05 or 0x04 if we're in a low-res graphics mode, 0x06 otherwise.
                                         */
                                        nMode = fSEQDotClock? (7 - nMode) : Video.MODE.CGA_640X200;
                                    } else {
                                        /*
                                         * card.addrBuffer must be 0xA0000, so we need to discriminate between modes 0x0D through 0x10;
                                         * we've already defaulted to 0x0F or 0x10, so determine if it's 0x0D or 0x0E (ie, a 200-row mode)
                                         * and then which one (ie, 320 wide or 640 wide).
                                         */
                                        if (card.regSEQData[Card.SEQ.MEMMODE.INDX] & Card.SEQ.MEMMODE.CHAIN4) {
                                            nMode = Video.MODE.VGA_320X200;
                                        }
                                        else if (nCRTCVertTotal < 500) {
                                            if (nCRTCVertTotal < 350) {
                                                nMode = (fSEQDotClock? Video.MODE.EGA_320X200 : Video.MODE.EGA_640X200);
                                            }
                                        } else {
                                            nMode = (this.nMonitorType == ChipSet.MONITOR.MONO? Video.MODE.VGA_640X480_MONO : Video.MODE.VGA_640X480);
                                        }
                                        if (DEBUG && this.messageEnabled()) {
                                            this.printMessage("checkMode(): nCRTCVertTotal=" + nCRTCVertTotal + ", mode=" + str.toHexByte(nMode));
                                            this.cpu.stopCPU();
                                        }
                                    }
                                }
                            }
            
                            nAccess = this.getAccess();
                        }
                    }
                    else if (card.regMode & Card.CGA.MODE.VIDEO_ENABLE) {
                        /*
                         * NOTE: For the CGA, we precondition any mode change on CGA.MODE.VIDEO_ENABLE being set, otherwise
                         * we'll get spoofed by the ROM BIOS scroll code, which waits for vertical retrace and then turns CGA.MODE.VIDEO_ENABLE
                         * off, using a hard-coded mode value (0x25) that does NOT necessarily match the the CGA video mode currently in effect.
                         */
                        if (!(card.regMode & Card.CGA.MODE.GRAPHIC_SEL)) {
                            nMode = ((card.regMode & Card.CGA.MODE._80X25)? Video.MODE.CGA_80X25 : Video.MODE.CGA_40X25);
                            if (card.regMode & Card.CGA.MODE.BW_SEL) nMode -= 1;
                        } else {
                            nMode = ((card.regMode & Card.CGA.MODE.HIRES_BW)? Video.MODE.CGA_640X200 : Video.MODE.CGA_320X200_BW);
                            if (!(card.regMode & Card.CGA.MODE.BW_SEL)) nMode -= 1;
                        }
                    }
                }
            
                /*
                 * NOTE: If setMode() remaps the video memory, that will trigger calls to getMemoryAccess() to also update the
                 * memory's access functions.  However, if the memory access setting (nAccess) is about to change as well, those
                 * changes will be moot until the setAccess() call that follows.  Basically, whenever both memory mapping AND access
                 * functions are changing, the memory will be in an inconsistent state until both setMode() and setAccess() are
                 * finished.
                 *
                 * The setMode() call takes precedence; if we called setAccess() first, it might attempt to modify memory access
                 * functions based on the card's addrBuffer setting, and if that doesn't match what's currently mapped, assertions
                 * will be triggered (probably not fatal, but it would defeat the point of the assertions).
                 */
                if (!this.setMode(nMode, fForce)) return false;
            
                this.setAccess(nAccess);
            
                return true;
            };
            
            /**
             * setMode(nMode, fForce)
             *
             * Set fForce to true to update the mode regardless of previous mode, or false to perform a normal update
             * that bypasses updateScreen() but still calls initCellCache().
             *
             * @this {Video}
             * @param {number|null} nMode
             * @param {boolean|undefined} [fForce] is set when checkMode() wants to force a mode update
             * @return {boolean} true if successful, false if failure
             */
            Video.prototype.setMode = function(nMode, fForce)
            {
                if (nMode != null && (nMode != this.nMode || fForce)) {
            
                    if (DEBUG && this.messageEnabled()) {
                        this.printMessage("setMode(" + str.toHexByte(nMode) + (fForce? ",force" : "") + ")");
                    }
            
                    this.cUpdates = 0;      // count updateScreen() calls as a means of driving blink updates
                    this.nMode = nMode;
            
                    /*
                     * On an EGA, it's CRITICAL that a reset() invalidate cardActive, to ensure that the code below
                     * releases the previous video buffer and installs a new one, even if there was no change in the
                     * video buffer address or size, because otherwise the Memory blocks installed at the video buffer
                     * address may still be using blocks of the EGA's previous memory buffer.
                     *
                     * When the EGA is reinitialized, a new memory buffer (adwMemory) is allocated (see initEGA()), and
                     * this is where the mapping of that EGA memory buffer to the video buffer occurs.  Other cards
                     * (MDA or CGA) don't allocate/manage their own memory buffer, but even then, it's still a good idea
                     * to always force this operation (eg, in case a switch setting changed the active video card).
                     */
                    var card = this.cardActive || (nMode == Video.MODE.MDA_80X25? this.cardMono : this.cardColor);
            
                    if (card != this.cardActive || card.addrBuffer != this.addrBuffer || card.sizeBuffer != this.sizeBuffer) {
            
                        this.removeCursor();
            
                        if (this.addrBuffer) {
            
                            if (DEBUG && this.messageEnabled()) {
                                this.printMessage("setMode(" + str.toHexByte(nMode) + "): removing " + str.toHexLong(this.sizeBuffer) + " bytes from " + str.toHexLong(this.addrBuffer));
                            }
            
                            if (!this.bus.removeMemory(this.addrBuffer, this.sizeBuffer)) {
                                /*
                                 * TODO: Force this failure case and see how well the Video component deals with it.
                                 */
                                return false;
                            }
                            if (this.cardActive) this.cardActive.fActive = false;
                        }
            
                        this.cardActive = card;
                        card.fActive = true;
            
                        this.addrBuffer = card.addrBuffer;
                        this.sizeBuffer = card.sizeBuffer;
            
                        if (DEBUG && this.messageEnabled()) {
                            this.printMessage("setMode(" + str.toHexByte(nMode) + "): adding " + str.toHexLong(this.sizeBuffer) + " bytes to " + str.toHexLong(this.addrBuffer));
                        }
            
                        var controller = (card === this.cardEGA? card : null);
            
                        if (!this.bus.addMemory(card.addrBuffer, card.sizeBuffer, Memory.TYPE.VIDEO, controller)) {
                            /*
                             * TODO: Force this failure case and see how well the Video component deals with it.
                             */
                            return false;
                        }
                    }
            
                    this.setDimensions();
            
                    if (fForce !== false) {
                        this.updateScreen(true);
                    } else {
                        this.initCellCache(true);
                    }
                }
                return true;
            };
            
            /**
             * setPixel(imageData, x, y, rgb)
             *
             * Worker function used by createFontColor() and updateScreen() (graphics modes only).
             *
             * @this {Video}
             * @param {Object} imageData
             * @param {number} x
             * @param {number} y
             * @param {Array.<number>} rgb is a 4-element array containing the red, green, blue and alpha values
             */
            Video.prototype.setPixel = function(imageData, x, y, rgb)
            {
                var index = (x + y * imageData.width) * rgb.length;
                imageData.data[index]   = rgb[0];
                imageData.data[index+1] = rgb[1];
                imageData.data[index+2] = rgb[2];
                imageData.data[index+3] = rgb[3];
            };
            
            /**
             * initCellCache(fNew)
             *
             * Invalidates the contents of our internal cell cache.
             *
             * @this {Video}
             * @param {boolean} [fNew] is true to reallocate/resize the cell cache; in any case, it's still reinitialized
             */
            Video.prototype.initCellCache = function(fNew)
            {
                this.cBlinkVisible = -1;                // invalidate the visible blinking character count, to force updateScreen() to recount
                this.fCellCacheValid = false;
                if (fNew) {
                    var nCells = this.nCellCache;
                    if (this.aCellCache === undefined || this.aCellCache.length != nCells) {
                        this.aCellCache = new Array(nCells);
                        /*
                         * TODO: Determine whether, with the introduction of fCellCacheValid, this array initialization is useful.
                         */
                        for (var iCell = 0; iCell < nCells; iCell++) this.aCellCache[iCell] = -1;
                    }
                }
            };
            
            /**
             * doBlink()
             *
             * This function is obsolete, now that the checkBlink() function is called on every updateScreen()
             * and checkCursor() call.  updateScreen() is driven by the CPU timer, so piggy-backing on that to
             * drive blink updates seems preferable to having another active timer in the system.
             *
             * @this {Video}
             * @param {boolean} [fStart]
             *
             Video.prototype.doBlink = function(fStart)
             {
                if (this.cBlinks >= 0) {
                    this.cBlinks++;
                    if (this.cBlinkVisible || this.iCellCursor >= 0) {
                        if (!fStart && !this.cpu.isRunning()) {
                            this.updateScreen();
                        }
                        setTimeout(function(video) { return function onBlinkTimeout() {video.doBlink();}; }(this), 266);
                        return;
                    }
                    this.cBlinks = -1;
                }
            },
             */
            
            /**
             * updateChar(col, row, data, context)
             *
             * Updates a particular character cell (row,col) in the associated window.
             *
             * The data parameter is the attribute byte from the display buffer (fgnd attribute in the low nibble,
             * bgnd attribute in the high nibble), but updateScreen() supplements data with a couple internal attribute bits:
             *
             *      ATTRS.DRAW_FGND:    set for every cell whose fgnd element is currently on (ie, non-blinking, or whenever blink is on)
             *      ATTRS.DRAW_CURSOR:  set only for the cell containing the cursor, if any
             *
             * To make a character blink, we alternately draw its cell with ATTRS.DRAW_FGND set, and then again with
             * ATTRS.DRAW_FGND clear (meaning only the cell background is drawn).
             *
             * To make the cursor blink, we must alternately draw its entire cell with ATTRS.DRAW_CURSOR set, and then
             * draw it again with ATTRS.DRAW_CURSOR clear.
             *
             * @this {Video}
             * @param {number} col
             * @param {number} row
             * @param {number} data (if text mode, character code in low byte, attribute code in high byte)
             * @param {Object} [context]
             */
            Video.prototype.updateChar = function(col, row, data, context)
            {
                /*
                 * The caller MUST promise this.nFont is defined, and that the font in this.aFonts[this.nFont] has been loaded.
                 */
                var bChar = data & 0xff;
                var bAttr = data >> 8;
                var iFgnd = bAttr & 0xf;
                var font = this.aFonts[this.nFont];
                if (font.aColorMap) iFgnd = font.aColorMap[iFgnd];
            
                /*
                 * Just as aColorMap maps the foreground attribute to the appropriate foreground character grid,
                 * it also maps the background attribute to the appropriate background color.
                 */
                var xDst, yDst;
                var iBgnd = (bAttr >> 4) & 0xf;
                if (font.aColorMap) iBgnd = font.aColorMap[iBgnd];
            
                if (context) {
                    xDst = col * font.cxCell;
                    yDst = row * font.cyCell;
                    context.fillStyle = font.aCSSColors[iBgnd];
                    context.fillRect(xDst, yDst, font.cxCell, font.cyCell);
                } else {
                    xDst = col * this.cxScreenCell + this.xScreenOffset;
                    yDst = row * this.cyScreenCell + this.yScreenOffset;
                    this.contextScreen.fillStyle = font.aCSSColors[iBgnd];
                    this.contextScreen.fillRect(xDst, yDst, this.cxScreenCell, this.cyScreenCell);
                }
            
                if (MAXDEBUG && this.messageEnabled(Messages.VIDEO | Messages.LOG)) {
                    this.log("updateCharBgnd(" + col + "," + row + "," + bChar + "): filled " + xDst + "," + yDst);
                }
            
                if (bAttr & Video.ATTRS.DRAW_FGND) {
                    /*
                     * (bChar & 0xf) is the equivalent of (bChar % 16), and (bChar >> 4) is the equivalent of Math.floor(bChar / 16)
                     */
                    var xSrcFgnd = (bChar & 0xf) * font.cxCell;
                    var ySrcFgnd = (bChar >> 4) * font.cyCell;
            
                    if (MAXDEBUG && this.messageEnabled(Messages.VIDEO | Messages.LOG)) {
                        this.log("updateCharFgnd(" + col + "," + row + "," + bChar + "): draw from " + xSrcFgnd + "," + ySrcFgnd + " (" + font.cxCell + "," + font.cyCell + ") to " + xDst + "," + yDst);
                    }
            
                    if (context) {
                        context.drawImage(font.aCanvas[iFgnd], xSrcFgnd, ySrcFgnd, font.cxCell, font.cyCell, xDst, yDst, font.cxCell, font.cyCell);
                    } else {
                        this.contextScreen.drawImage(font.aCanvas[iFgnd], xSrcFgnd, ySrcFgnd, font.cxCell, font.cyCell, xDst, yDst, this.cxScreenCell, this.cyScreenCell);
                    }
                }
            
                if (bAttr & Video.ATTRS.DRAW_CURSOR) {
                    /*
                     * Drawing the cursor with lineTo() seemed logical, but it was complicated by the fact that the
                     * TOP of the line must appear at "yDst + this.yCursor", whereas lineTo() wants to know the CENTER
                     * of the line. So it's simpler to draw the cursor with another fillRect().  Here's the old code:
                     *
                     *      this.contextScreen.strokeStyle = font.aCSSColors[iFgnd];
                     *      this.contextScreen.lineWidth = this.cyCursor;
                     *      this.contextScreen.beginPath();
                     *      this.contextScreen.moveTo(xDst, yDst + this.yCursor);
                     *      this.contextScreen.lineTo(xDst + this.cxScreenCell, yDst + this.yCursor);
                     *      this.contextScreen.stroke();
                     *
                     * Also, note that we're scaling the yCursor and cyCursor values here, instead of in checkCursor(), because
                     * this is where we have all the required information: in the first case (off-screen buffer), the scaling must
                     * be based on the font cell size (cxCell, cyCell), whereas in the second case (on-screen buffer), the scaling
                     * must be based on the screen cell size (cxScreenCell,cyScreenCell).
                     *
                     * yCursor and cyCursor are actual hardware values, both relative to another hardware value: cyCursorCell.
                     */
                    var yCursor = this.yCursor;
                    var cyCursor = this.cyCursor;
                    if (context) {
                        if (this.cyCursorCell && this.cyCursorCell !== font.cyCell) {
                            yCursor = ((yCursor * font.cyCell) / this.cyCursorCell)|0;
                            cyCursor = ((cyCursor * font.cyCell) / this.cyCursorCell)|0;
                        }
                        context.fillStyle = font.aCSSColors[iFgnd];
                        context.fillRect(xDst, yDst + yCursor, font.cxCell, cyCursor);
                    } else {
                        if (this.cyCursorCell && this.cyCursorCell !== this.cyScreenCell) {
                            yCursor = ((yCursor * this.cyScreenCell) / this.cyCursorCell)|0;
                            cyCursor = ((cyCursor * this.cyScreenCell) / this.cyCursorCell)|0;
                        }
                        this.contextScreen.fillStyle = font.aCSSColors[iFgnd];
                        this.contextScreen.fillRect(xDst, yDst + yCursor, this.cxScreenCell, cyCursor);
                    }
                }
            };
            
            /**
             * updateScreen(fForce)
             *
             * Propagates the video buffer to the cell cache and updates the screen with any changes.  Forced updates
             * are generally internal updates triggered by an I/O operation or other state change, while non-forced updates
             * are the periodic updates coming from the CPU.
             *
             * For every cell in the video buffer, compare it to the cell stored in the cell cache, render if it differs,
             * and then update the cell cache to match.  Since initCellCache() sets every cell in the cell cache to an
             * invalid value, we're assured that the next call to updateScreen() will redraw the entire (visible) video buffer.
             *
             * @this {Video}
             * @param {boolean} [fForce] is used by setMode() to reset the cell cache and force a redraw
             */
            Video.prototype.updateScreen = function(fForce)
            {
                /*
                 * The Computer component maintains the fPowered setting on our behalf, so we use it.
                 */
                if (!this.aFlags.fPowered) return;
            
                /*
                 * If the card's video signal is disabled (eg, during a mode change), then skip the update,
                 * unless fForce is set.
                 */
                var fEnabled = false;
                var card = this.cardActive;
            
                if (card) {
                    if (card !== this.cardEGA) {
                        if (card.regMode & Card.CGA.MODE.VIDEO_ENABLE) fEnabled = true;
                    }
                    else {
                        if (card.regATCIndx & Card.ATC.INDX_PAL_ENABLE) fEnabled = true;
                    }
                }
            
                if (!fEnabled && !fForce) return;
            
                if (fForce) {
                    this.initCellCache(true);
                }
                else {
                    /*
                     * This should never happen, but since updateScreen() is also called by CPU.updateVideo(),
                     * better safe than sorry.
                     */
                    if (this.aCellCache === undefined) return;
                }
            
                /*
                 * If cBlinks is "enabled" (ie, >= 0), then advance it once every 16 updateScreen() calls
                 * (assuming an updateScreen() frequency of 60 per second; see CPU.VIDEO_UPDATES_PER_SECOND).
                 *
                 * We assume that the CPU is calling us whenever fForce is undefined.
                 */
                var fBlinkUpdate = false;
                if (!fForce && !(++this.cUpdates & 0xf) && this.cBlinks >= 0) {
                    this.cBlinks++;
                    fBlinkUpdate = true;
                }
            
                var iCell = 0;
                var nCells = this.nCells;
            
                /*
                 * Calculate the VISIBLE start of screen memory (addrScreen), not merely the PHYSICAL start,
                 * as well as the extent of it (cbScreen) and use those values for all addressing operations
                 * to follow.  FYI, in these calculations, offScreen does not refer to "off-screen" memory,
                 * but rather the "offset" of the start of visible screen memory.
                 */
                var addrScreen = card.addrBuffer;
                var addrScreenLimit = addrScreen + card.sizeBuffer;
            
                /*
                 * HACK: nStartAddress is supposed to be "latched" ONLY at the start of every VERT_RETRACE interval;
                 * this is an attempt to honor that behavior, but unfortunately, updateScreen() is currently called at
                 * the CPU's discretion, not necessarily in sync with nCyclesVertPeriod.  As a result, we must rely
                 * on other "triggers" to update our latched CRTC start address (eg, see outATC()).
                 *
                 * TODO: Consider matching the CPU's nCyclesNextVideoUpdate to the card's nCyclesVertPeriod, ensuring
                 * that CPU bursts are in sync with VERT_RETRACE.  Note, however, that that will be complicated by other
                 * factors, such as the horizontal retrace interval, and the timing requirements of other cards in a
                 * multi-display configuration.
                 */
                if (this.getRetraceBits(card) & Card.CGA.STATUS.VERT_RETRACE) {
                    card.nStartAddress = ((card.regCRTData[Card.CRTC.START_ADDR_HI] << 8) + card.regCRTData[Card.CRTC.START_ADDR_LO])|0;
                }
            
                var offScreen = card.nStartAddress;
            
                /*
                 * Any screen (aka "page") offset must be doubled for text modes, due to the attribute bytes.
                 *
                 * TODO: Come up with a more robust method of deciding when any screen offset should be doubled.
                 */
                if (this.nFont) offScreen <<= 1;
            
                addrScreen += offScreen;
                var cbScreen = this.cbScreen;
            
                if (this.nCard >= Video.CARD.EGA && card.regCRTData[Card.CRTC.EGA.OFFSET]) {
                    /*
                     * Pre-EGA, the extent of visible screen memory (cbScreen) was derived from nCols * nRows, but since
                     * then, the logical width of screen memory (nColsLogical) can differ from the visible width (nCols).
                     * We now calculate the logical width, and the compute a new cbScreen in much the same way the original
                     * cbScreen was computed (but without any CGA-related padding considerations).
                     */
                    this.nColsLogical = card.regCRTData[Card.CRTC.EGA.OFFSET] << (this.nFont? 1 : 4);
                    cbScreen = ((((this.nColsLogical * (this.nRows-1) + this.nCols) / this.nCellsPerWord) << 1) + this.cbPadding)|0;
                }
            
                if (addrScreen + cbScreen > addrScreenLimit) {
                    cbScreen = addrScreenLimit - addrScreen;
                    if (cbScreen < 0) cbScreen = 0;
                }
            
                /*
                 * addrScreenLimit was initially the limit of the entire video buffer, but we now adjust it
                 * to the limit of what's visible, since that's all we want to draw.
                 */
                addrScreenLimit = addrScreen + cbScreen;
            
                /*
                 * This next bit of code can be completely disabled if we discover problems with the dirty
                 * memory block tracking feature, or if we need to remove or disable that feature in the future.
                 *
                 * We use cleanMemory() to check the video buffer's dirty state.  If the buffer is clean
                 * AND there are no visible blinking characters (as of the last updateScreen) AND there is
                 * no visible cursor, then we're done; simply return.  Otherwise, if there's only a blinking
                 * cursor, then update JUST that one cell.
                 *
                 * When dealing with blinking characters, note that we need to run through the entire buffer
                 * ONLY if the low bits of the blink count just transitioned to 2 or 0; hence, we could return if
                 * the blink count was ODD.  But we'd still have to worry about the cursor, so it's simpler to blow
                 * that small optimization off.  Further optimizations are certainly possible, such as a hash table
                 * of all blinking character locations, but all those optimizations are saved for a rainy day.
                 */
                if (!fForce && this.bus.cleanMemory(addrScreen, cbScreen)) {
                    if (!fBlinkUpdate) return;
                    if (!this.cBlinkVisible) {
                        if (this.iCellCursor < 0) return;
                        iCell = this.iCellCursor;
                        nCells = iCell + 1;
                    }
                    // else if (this.cBlinks & 0x1) return;
                }
            
                if (this.nFont) {
                    /*
                     * This is the text-mode update case.  We're required to FIRST verify that the current font
                     * has been successfully loaded, because we're not allowed to call updateChar() if there's no font.
                     */
                    if (this.aFonts[this.nFont]) {
                        this.updateScreenText(addrScreen, addrScreenLimit, iCell, nCells);
                        this.checkBlink();
                    }
                }
                else if (this.cbSplit) {
                    this.updateScreenGraphicsCGA(addrScreen, addrScreenLimit);
                }
                else if (!this.fLinear) {
                    this.updateScreenGraphicsEGA(addrScreen, addrScreenLimit);
                }
                else {
                    this.updateScreenGraphicsVGA(addrScreen, addrScreenLimit);
                }
            };
            
            /**
             * updateScreenText(addrScreen, addrScreenLimit, iCell, nCells)
             *
             * @param addrScreen
             * @param addrScreenLimit
             * @param iCell
             * @param nCells
             */
            Video.prototype.updateScreenText = function(addrScreen, addrScreenLimit, iCell, nCells)
            {
                var addr, data, cUpdated = 0;
            
                /*
                 * If MDA.MODE.BLINK_ENABLE is set and a cell's blink bit is set, then if (cBlinks & 0x2) != 0,
                 * we want the foreground element of the cell to be drawn; otherwise we don't.  So every 16-bit
                 * data word we pull from the video buffer will be supplemented with our own special attribute bit
                 * (ATTRS.DRAW_FGND = 0x100) accordingly; and to simplify the drawing code, we will also mask the
                 * blink bit from the cell's attribute bits.
                 *
                 * If MDA.MODE.BLINK_ENABLE is clear, then we always set ATTRS.DRAW_FGND and never mask the blink
                 * bit in a cell's attributes bits, since it's actually an intensity bit in that case.
                 */
                this.cBlinkVisible = 0;
                var dataBlink = 0;
                var dataDraw = (Video.ATTRS.DRAW_FGND << 8);
                var dataMask = 0xfffff;
                if (this.cardActive.regMode & Card.MDA.MODE.BLINK_ENABLE) {
                    dataBlink = (Video.ATTRS.BGND_BLINK << 8);
                    dataMask &= ~dataBlink;
                    if (!(this.cBlinks & 0x2)) dataMask &= ~dataDraw;
                }
            
                addr = addrScreen + (iCell << 1);
                while (addr < addrScreenLimit && iCell < nCells) {
                    data = this.bus.getShortDirect(addr);
                    data |= dataDraw;
                    if (data & dataBlink) {
                        this.cBlinkVisible++;
                        data &= dataMask;
                    }
                    if (iCell == this.iCellCursor) {
                        data |= ((this.cBlinks & 0x1)? (Video.ATTRS.DRAW_CURSOR << 8) : 0);
                    }
                    this.assert(iCell < this.aCellCache.length);
                    if (!this.fCellCacheValid || data !== this.aCellCache[iCell]) {
                        var col = iCell % this.nCols;
                        var row = (iCell / this.nCols)|0;
                        this.updateChar(col, row, data, this.contextScreenBuffer);
                        this.aCellCache[iCell] = data;
                        cUpdated++;
                    }
                    addr += 2;
                    iCell++;
                }
            
                this.fCellCacheValid = true;
            
                if (cUpdated && this.contextScreenBuffer) {
                    this.contextScreen.drawImage(this.canvasScreenBuffer, 0, 0, this.cxBuffer, this.cyBuffer, this.xScreenOffset, this.yScreenOffset, this.cxScreenOffset, this.cyScreenOffset);
                }
            };
            
            /**
             * updateScreenGraphicsCGA(addrScreen, addrScreenLimit)
             *
             * @param addrScreen
             * @param addrScreenLimit
             */
            Video.prototype.updateScreenGraphicsCGA = function(addrScreen, addrScreenLimit)
            {
                var addr, data;
            
                /*
                 * This is the CGA graphics-mode update case, where cells are pixels spread across two halves of the buffer.
                 */
                addr = addrScreen;
                this.cBlinkVisible = 0;
                var iCell = 0, nPixelsPerCell = this.nCellsPerWord;
                var wPixelMask = (nPixelsPerCell == 16? 0x10000 : 0x30000);
                var nPixelShift = (nPixelsPerCell == 16? 1 : 2);
                var aPixelColors = this.getCardColors(nPixelShift);
            
                var x = 0, y = 0;
                var xDirty = this.nCols, xMaxDirty = 0, yDirty = this.nRows, yMaxDirty = 0;
                while (addr < addrScreenLimit) {
                    data = this.bus.getShortDirect(addr);
                    this.assert(iCell < this.aCellCache.length);
                    if (this.fCellCacheValid && data === this.aCellCache[iCell]) {
                        x += nPixelsPerCell;
                    } else {
                        this.aCellCache[iCell] = data;
                        var wPixels = (data >> 8) | ((data & 0xff) << 8);
                        var wMask = wPixelMask, nShift = 16;
                        if (x < xDirty) xDirty = x;
                        for (var iPixel = 0; iPixel < nPixelsPerCell; iPixel++) {
                            var bPixel = (wPixels & (wMask >>= nPixelShift)) >> (nShift -= nPixelShift);
                            this.setPixel(this.imageScreenBuffer, x++, y, aPixelColors[bPixel]);
                        }
                        if (x > xMaxDirty) xMaxDirty = x;
                        if (y < yDirty) yDirty = y;
                        if (y >= yMaxDirty) yMaxDirty = y + 1;
                    }
                    addr += 2;
                    iCell++;
                    if (x >= this.nCols) {
                        x = 0;
                        y += 2;
                        if (y > this.nRows)
                            break;
                        if (y == this.nRows) {
                            y = 1;
                            addr = addrScreen + this.cbSplit;
                        }
                    }
                }
            
                this.fCellCacheValid = true;
            
                /*
                 * Instead of blasting the ENTIRE imageScreenBuffer into contextScreenBuffer, and then blasting the ENTIRE
                 * canvasScreenBuffer onto contextScreen, even for the smallest change, let's try to be a bit smarter about
                 * the update (well, to the extent that the canvas APIs permit).
                 */
                if (xDirty < this.nCols) {
                    var cxDirty = xMaxDirty - xDirty;
                    var cyDirty = yMaxDirty - yDirty;
                    // this.contextScreenBuffer.putImageData(this.imageScreenBuffer, 0, 0);
                    this.contextScreenBuffer.putImageData(this.imageScreenBuffer, 0, 0, xDirty, yDirty, cxDirty, cyDirty);
                    /*
                     * While ideally I would draw only the dirty portion of canvasScreenBuffer, there usually isn't a 1-1 pixel mapping
                     * between canvasScreenBuffer and contextScreen.  In fact, the WHOLE POINT of the canvasScreenBuffer is to leverage
                     * drawImage()'s scaling ability; for example, a CGA graphics mode might be 640x200, whereas the canvas representing
                     * the screen might be 960x400.  In those situations, if we draw interior rectangles, we often end up with subpixel
                     * artifacts along the edges of those rectangles.  So it appears I must continue to redraw the entire canvasScreenBuffer
                     * on every change.
                     *
                    var xScreen = (((xDirty * this.cxScreen) / this.nCols) | 0);
                    var yScreen = (((yDirty * this.cyScreen) / this.nRows) | 0);
                    var cxScreen = (((cxDirty * this.cxScreen) / this.nCols) | 0);
                    var cyScreen = (((cyDirty * this.cyScreen) / this.nRows) | 0);
                    this.contextScreen.drawImage(this.canvasScreenBuffer, xDirty, yDirty, cxDirty, cyDirty, xScreen, yScreen, cxScreen, cyScreen);
                     */
                    this.contextScreen.drawImage(this.canvasScreenBuffer, 0, 0, this.nCols, this.nRows, 0, 0, this.cxScreen, this.cyScreen);
                }
            };
            
            /**
             * updateScreenGraphicsEGA(addrScreen, addrScreenLimit)
             *
             * @param addrScreen
             * @param addrScreenLimit
             */
            Video.prototype.updateScreenGraphicsEGA = function(addrScreen, addrScreenLimit)
            {
                var addr, data;
            
                addr = addrScreen;
                this.cBlinkVisible = 0;
            
                var iCell = 0;
                var aPixelColors = this.getCardColors();
                var adwMemory = this.cardActive.adwMemory;
            
                var x = 0, y = 0;
                var xDirty = this.nCols, xMaxDirty = 0, yDirty = this.nRows, yMaxDirty = 0;
            
                var iPixelFirst = this.cardActive.regATCData[Card.ATC.HORZPAN.INDX] & Card.ATC.HORZPAN.SHIFT_LEFT;
                /*
                 * TODO: What should happen if the card is programmed such that nColsLogical is LESS THAN nCols?
                 */
                var nRowAdjust = (this.nColsLogical > this.nCols? ((this.nColsLogical - this.nCols - iPixelFirst) >> 3) : 0);
            
                while (addr < addrScreenLimit) {
                    var idw = addr++ - this.addrBuffer;
                    this.assert(idw >= 0 && idw < adwMemory.length);
                    data = adwMemory[idw];
            
                    /*
                     * Figure out how many visible pixels this data represents; usually 8, unless panning is being used.
                     */
                    var iPixel, nPixels = 8;
            
                    if (iPixelFirst) {
                        /*
                         * Notice that we're not using the cell cache when panning is active, because the cached cell data no
                         * longer aligns with the data we're pulling out of the video buffer, and it's not clear that the effort
                         * to realign the data and make a valid cache comparison would save enough work to make it worthwhile.
                         */
                        if (!x) {
                            data <<= iPixelFirst;
                            nPixels -= iPixelFirst;
                            /*
                             * This is as good a place as any to invalidate the cell cache when panning is active; this ensures
                             * we don't rely on stale cache contents once panning stops.
                             */
                            this.fCellCacheValid = false;
                        } else {
                            iPixel = this.nCols - x;
                            if (nPixels > iPixel) nPixels = iPixel;
                        }
                    } else {
                        this.assert(iCell < this.aCellCache.length);
                        if (this.fCellCacheValid && data === this.aCellCache[iCell]) {
                            x += nPixels;
                            nPixels = 0;
                        } else {
                            this.aCellCache[iCell] = data;
                        }
                        iCell++;
                    }
            
                    if (nPixels) {
                        if (x < xDirty) xDirty = x;
                        for (iPixel = 0; iPixel < nPixels; iPixel++) {
                            /*
                             * We must follow the golden JavaScript rule of appending "|0" to all hex constants with bit 31 set.
                             * The innocuous use of the bit-wise OR operator has the side-effect of producing a negative value,
                             * matching how entries in Video.aEGADWToByte are initialized (eg, "Video.aEGADWToByte[0x80000000|0]").
                             */
                            var dwPixel = data & (0x80808080|0);
                            /*
                             * This was the old approach to dealing with negative hex values, by converting them to positive
                             * values that didn't alter the low 32 bits.  But it's not ideal, because it requires using values here
                             * and in the array that are outside the signed 32-bit range, potentially triggering floating-point.
                             *
                             *      if (dwPixel < 0) dwPixel += 0x100000000;
                             */
                            this.assert(Video.aEGADWToByte[dwPixel] !== undefined);
                            /*
                             * Since assertions don't fix problems (only catch them, and only in DEBUG builds), I'm also ensuring
                             * that bPixel will always default to 0 if an undefined value ever slips through again.
                             */
                            var bPixel = Video.aEGADWToByte[dwPixel] || 0;
                            this.setPixel(this.imageScreenBuffer, x++, y, aPixelColors[bPixel]);
                            data <<= 1;
                        }
                        if (x > xMaxDirty) xMaxDirty = x;
                        if (y < yDirty) yDirty = y;
                        if (y >= yMaxDirty) yMaxDirty = y + 1;
                    }
            
                    this.assert(x <= this.nCols);
            
                    if (x >= this.nCols) {
                        x = 0;
                        if (++y > this.nRows) break;
                        addr += nRowAdjust;
                    }
                }
            
                if (!iPixelFirst) this.fCellCacheValid = true;
            
                /*
                 * For a fascinating discussion of the best way to update the screen canvas at this point, see updateScreenGraphicsCGA().
                 */
                if (xDirty < this.nCols) {
                    var cxDirty = xMaxDirty - xDirty;
                    var cyDirty = yMaxDirty - yDirty;
                    this.contextScreenBuffer.putImageData(this.imageScreenBuffer, 0, 0, xDirty, yDirty, cxDirty, cyDirty);
                    this.contextScreen.drawImage(this.canvasScreenBuffer, 0, 0, this.nCols, this.nRows, 0, 0, this.cxScreen, this.cyScreen);
                }
            };
            
            /**
             * updateScreenGraphicsVGA(addrScreen, addrScreenLimit)
             *
             * The name is a slight misnomer: updateScreenGraphicsEGA() takes care of all the "planar" video modes, which were
             * first introduced by the EGA and later expanded by the VGA, whereas this function takes care of just the "linear"
             * video modes introduced by the VGA, such as mode 0x13 (320x200x256).  Those modes may also be referred to as CHAIN4
             * modes, since I think all of them require that the CHAIN4 bit in the Sequencer's MEMMODE register be set.
             *
             * @param addrScreen
             * @param addrScreenLimit
             */
            Video.prototype.updateScreenGraphicsVGA = function(addrScreen, addrScreenLimit)
            {
                var addr, data;
            
                addr = addrScreen;
                this.cBlinkVisible = 0;
            
                var iCell = 0;
                var aPixelColors = this.getCardColors();
                var adwMemory = this.cardActive.adwMemory;
            
                var x = 0, y = 0;
                var xDirty = this.nCols, xMaxDirty = 0, yDirty = this.nRows, yMaxDirty = 0;
            
                var iPixelFirst = this.cardActive.regATCData[Card.ATC.HORZPAN.INDX] & Card.ATC.HORZPAN.SHIFT_LEFT;
                /*
                 * TODO: What should happen if the card is programmed such that nColsLogical is LESS THAN nCols?
                 */
                var nRowAdjust = (this.nColsLogical > this.nCols? ((this.nColsLogical - this.nCols - iPixelFirst) >> 3) : 0);
            
                while (addr < addrScreenLimit) {
                    var idw = addr++ - this.addrBuffer;
                    this.assert(idw >= 0 && idw < adwMemory.length);
                    data = adwMemory[idw];
            
                    /*
                     * Figure out how many visible pixels this data represents; usually 4, unless panning is being used.
                     */
                    var iPixel, nPixels = 4;
            
                    if (iPixelFirst) {
                        /*
                         * Notice that we're not using the cell cache when panning is active, because the cached cell data no
                         * longer aligns with the data we're pulling out of the video buffer, and it's not clear that the effort
                         * to realign the data and make a valid cache comparison would save enough work to make it worthwhile.
                         */
                        if (!x) {
                            data <<= iPixelFirst;
                            nPixels -= iPixelFirst;
                            /*
                             * This is as good a place as any to invalidate the cell cache when panning is active; this ensures
                             * we don't rely on stale cache contents once panning stops.
                             */
                            this.fCellCacheValid = false;
                        } else {
                            iPixel = this.nCols - x;
                            if (nPixels > iPixel) nPixels = iPixel;
                        }
                    } else {
                        this.assert(iCell < this.aCellCache.length);
                        if (this.fCellCacheValid && data === this.aCellCache[iCell]) {
                            x += nPixels;
                            nPixels = 0;
                        } else {
                            this.aCellCache[iCell] = data;
                        }
                        iCell++;
                    }
            
                    if (nPixels) {
                        if (x < xDirty) xDirty = x;
                        for (iPixel = 0; iPixel < nPixels; iPixel++) {
                            var bPixel = data & 0xff;
                            this.setPixel(this.imageScreenBuffer, x++, y, aPixelColors[bPixel]);
                            data >>>= 8;
                        }
                        if (x > xMaxDirty) xMaxDirty = x;
                        if (y < yDirty) yDirty = y;
                        if (y >= yMaxDirty) yMaxDirty = y + 1;
                    }
            
                    this.assert(x <= this.nCols);
            
                    if (x >= this.nCols) {
                        x = 0;
                        if (++y > this.nRows) break;
                        addr += nRowAdjust;
                    }
                }
            
                if (!iPixelFirst) this.fCellCacheValid = true;
            
                /*
                 * For a fascinating discussion of the best way to update the screen canvas at this point, see updateScreenGraphicsCGA().
                 */
                if (xDirty < this.nCols) {
                    var cxDirty = xMaxDirty - xDirty;
                    var cyDirty = yMaxDirty - yDirty;
                    this.contextScreenBuffer.putImageData(this.imageScreenBuffer, 0, 0, xDirty, yDirty, cxDirty, cyDirty);
                    this.contextScreen.drawImage(this.canvasScreenBuffer, 0, 0, this.nCols, this.nRows, 0, 0, this.cxScreen, this.cyScreen);
                }
            };
            
            /**
             * getRetraceBits(card)
             *
             * This returns a byte value with two bits set or clear as appropriate: DISP_RETRACE and VERT_RETRACE.
             *
             * @this {Video}
             * @param {Object} card
             * @return {number}
             */
            Video.prototype.getRetraceBits = function(card)
            {
                var b = 0;
            
                /*
                 * NOTE: The CGA bits CGA.STATUS.DISP_RETRACE (0x01) and CGA.STATUS.VERT_RETRACE (0x08) match the EGA definitions,
                 * and they also correspond to the MDA bits MDA.STATUS.HDRIVE (0x01) and MDA.STATUS.BWVIDEO (0x08); I'm not sure why
                 * the MDA uses different designations, but the bits appear to serve the same purpose.
                 *
                 * TODO: Decide whether this more faithful emulation of the retrace bits should be extended to the MDA/CGA, too;
                 * doing so might slow down the BIOS scroll code a bit, though.
                 */
                var nCycles = this.cpu.getCycles();
                var nElapsedCycles = nCycles - card.nInitCycles;
                if (nElapsedCycles < 0) {
                    this.assert(nCycles === 0);
                    card.nInitCycles = nElapsedCycles;
                    nElapsedCycles = -nElapsedCycles|0;
                }
                var nCyclesHorzRemain = nElapsedCycles % card.nCyclesHorzPeriod;
                if (nCyclesHorzRemain > card.nCyclesHorzActive) b |= Card.CGA.STATUS.DISP_RETRACE;
                var nCyclesVertRemain = nElapsedCycles % card.nCyclesVertPeriod;
                if (nCyclesVertRemain > card.nCyclesVertActive) b |= Card.CGA.STATUS.VERT_RETRACE | Card.CGA.STATUS.DISP_RETRACE;
                /*
                 * This is optional: the number of CPU cycles that remain in the current vertical period is all we need to keep
                 * track of (the number of cycles since the card was initialized is fine, too, but that delta can become extremely
                 * large after a while).
                 *
                 *      card.nInitCycles = nCycles - nCyclesVertRemain;
                 *
                 * NOTE: Now that we're calling getRetraceBits() more frequently (ie, for internal checks), resetting nInitCycles
                 * in this fashion preserves the vertical period at the expense of the horizontal period, which in turn can cause
                 * grief in ROM BIOS code that requires strict horizontal retrace times.  TODO: Figure out how to re-enable this code.
                 */
                return b;
            };
            
            /**
             * inMDAIndx(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3B4)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number|undefined}
             */
            Video.prototype.inMDAIndx = function(port, addrFrom)
            {
                return this.inCRTCIndx(this.cardMono, port, addrFrom);
            };
            
            /**
             * outMDAIndx(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3B4)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outMDAIndx = function(port, bOut, addrFrom)
            {
                this.outCRTCIndx(this.cardMono, port, bOut, addrFrom);
            };
            
            /**
             * inMDAData(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3B5)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number|undefined}
             */
            Video.prototype.inMDAData = function(port, addrFrom)
            {
                return this.inCRTCData(this.cardMono, port, addrFrom);
            };
            
            /**
             * outMDAData(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3B5)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outMDAData = function(port, bOut, addrFrom)
            {
                this.outCRTCData(this.cardMono, port, bOut, addrFrom);
            };
            
            /**
             * inMDAMode(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3B8)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inMDAMode = function(port, addrFrom)
            {
                return this.inCardMode(this.cardMono, addrFrom);
            };
            
            /**
             * outMDAMode(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3B8)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outMDAMode = function(port, bOut, addrFrom)
            {
                this.outCardMode(this.cardMono, bOut, addrFrom);
            };
            
            /**
             * inMDAStatus(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3BA)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inMDAStatus = function(port, addrFrom)
            {
                return this.inCardStatus(this.cardMono, addrFrom);
            };
            
            /**
             * outFeat(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3BA or 0x3DA)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             *
             * NOTE: While this port also existed on the MDA and CGA, it existed only as an INPUT port, not an OUTPUT port.
             */
            Video.prototype.outFeat = function(port, bOut, addrFrom)
            {
                this.cardEGA.regFeat = (this.cardEGA.regFeat & ~Card.FEAT_CTRL.BITS) | (bOut & Card.FEAT_CTRL.BITS);
                this.printMessageIO(port, bOut, addrFrom, "FEAT");
            };
            
            /**
             * inATC(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C0)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inATC = function(port, addrFrom)
            {
                var b = this.cardEGA.fATCData? this.cardEGA.regATCData[this.cardEGA.regATCIndx & Card.ATC.INDX_MASK] : this.cardEGA.regATCIndx;
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.ATC.PORT, null, addrFrom, "ATC." + (this.cardEGA.fATCData? this.cardEGA.asATCRegs[this.cardEGA.regATCIndx & Card.ATC.INDX_MASK] : "INDX"), b);
                }
                this.cardEGA.fATCData = !this.cardEGA.fATCData;
                return b;
            };
            
            /**
             * outATC(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C0)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outATC = function(port, bOut, addrFrom)
            {
                var fPalEnabled = (this.cardEGA.regATCIndx & Card.ATC.INDX_PAL_ENABLE);
                if (!this.cardEGA.fATCData) {
                    this.cardEGA.regATCIndx = bOut;
                    this.printMessageIO(port, bOut, addrFrom, "ATC.INDX");
                    this.cardEGA.fATCData = true;
                    if ((bOut & Card.ATC.INDX_PAL_ENABLE) && !fPalEnabled) {
                        if (!this.buildFonts()) {
                            if (DEBUG && (!addrFrom || this.messageEnabled())) {
                                this.printMessage("outATC(" + str.toHexByte(bOut) + "): no font changes required");
                            }
                        } else {
                            if (DEBUG && (!addrFrom || this.messageEnabled())) {
                                this.printMessage("outATC(" + str.toHexByte(bOut) + "): redraw screen for font changes");
                            }
                            this.updateScreen(true);
                        }
                    }
                    /*
                     * HACK: nStartAddress is supposed to be "latched" ONLY at the start of every VERT_RETRACE interval,
                     * but other "triggers" are currently required; see updateScreen() for details.
                     */
                    this.cardEGA.nStartAddress = ((this.cardEGA.regCRTData[Card.CRTC.START_ADDR_HI] << 8) + this.cardEGA.regCRTData[Card.CRTC.START_ADDR_LO])|0;
                } else {
                    var iReg = this.cardEGA.regATCIndx & Card.ATC.INDX_MASK;
                    if (iReg >= Card.ATC.PALETTE_REGS || !fPalEnabled) {
                        if (Video.TRAPALL || this.cardEGA.regATCData[iReg] !== bOut) {
                            if (!addrFrom || this.messageEnabled()) {
                                this.printMessageIO(port, bOut, addrFrom, "ATC." + this.cardEGA.asATCRegs[iReg]);
                            }
                            this.cardEGA.regATCData[iReg] = bOut;
                        }
                    }
                    this.cardEGA.fATCData = false;
                }
            };
            
            /**
             * inStatus0(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C2)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inStatus0 = function(port, addrFrom)
            {
                var bSWBit = 0;
                if (this.nCard == Video.CARD.EGA) {
                    var iBit = 3 - ((this.cardEGA.regMisc & Card.MISC.CLOCK_SELECT) >> 2);    // this is the desired SW # (0-3)
                    bSWBit = (this.bEGASwitches & (1 << iBit)) << (Card.STATUS0.SWSENSE_SHIFT - iBit);
                } else {
                    /*
                     * The IBM VGA ROM expects the SWSENSE bit to change according to how the DAC is programmed.
                     *
                     * At C000:0391, the ROM selects the following array at 0x0454:
                     *
                     *      db  0x12,0x12,0x12,0x10
                     *
                     * and writes the first 3 bytes to DAC register #0, and then compares SWSENSE to the 4th byte (0x10).
                     *
                     * If the 4th byte matches, then the ROM clears the BIOS "monochrome monitor" bit, and does the same
                     * thing again with 5 more arrays, expecting the 4th byte in all 5 arrays to match SWSENSE, and being
                     * very unhappy if they don't:
                     *
                     *      db	0x14,0x14,0x14,0x10
                     *      db	0x2D,0x14,0x14,0x00
                     *      db	0x14,0x2D,0x14,0x00
                     *      db	0x14,0x14,0x2D,0x00
                     *      db	0x2D,0x2D,0x2D,0x00
                     *
                     * So I ensure happiness by setting SWSENSE unless any of the three 6-bit DAC values contain 0x2D.
                     *
                     * This hard-coded behavior assumes a color monitor.  If you really want to simulate a monochrome monitor,
                     * then the 1st array (above) must mismatch, and a different set of arrays must all match:
                     *
                     *      db	0x04,0x12,0x04,0x10
                     *      db	0x1E,0x12,0x04,0x00
                     *      db	0x04,0x2D,0x04,0x00
                     *      db	0x04,0x16,0x15,0x00
                     *      db	0x00,0x00,0x00,0x10
                     *
                     * In other words, for a monochrome monitor, set SWSENSE only when DAC register #0 matches the first and last
                     * sets of values.
                     */
                    var dwDAC = this.cardEGA.regDACData[0];
                    if ((dwDAC & 0x3f) != 0x2d && (dwDAC & (0x3f << 6)) != (0x2d << 6) && (dwDAC & (0x3f << 12)) != (0x2d << 12)) {
                        bSWBit |= Card.STATUS0.SWSENSE;
                    }
                }
                var b = ((this.cardEGA.regStatus0 & ~Card.STATUS0.SWSENSE) | bSWBit);
                /*
                 * TODO: Figure out where Card.STATUS0.FEAT bits should come from....
                 */
                this.cardEGA.regStatus0 = b;
                this.printMessageIO(Card.STATUS0.PORT, null, addrFrom, "STATUS0", b);
                return b;
            };
            
            /**
             * @this {Video}
             * @param {number} port (0x3C2)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outMisc = function(port, bOut, addrFrom)
            {
                this.cardEGA.regMisc = bOut;
                this.enableEGA();
                this.printMessageIO(Card.MISC.PORT_WRITE, bOut, addrFrom, "MISC");
            };
            
            /**
             * inVGAEnable(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C3)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inVGAEnable = function(port, addrFrom)
            {
                var b = this.cardEGA.regVGAEnable;
                this.printMessageIO(Card.VGA_ENABLE.PORT, null, addrFrom, "VGA_ENABLE", b);
                return b;
            };
            
            /**
             * outVGAEnable(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C3)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outVGAEnable = function(port, bOut, addrFrom)
            {
                this.cardEGA.regVGAEnable = bOut;
                this.printMessageIO(Card.VGA_ENABLE.PORT, bOut, addrFrom, "VGA_ENABLE");
            };
            
            /**
             * inSEQIndx(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C4)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inSEQIndx = function(port, addrFrom)
            {
                var b = this.cardEGA.regSEQIndx;
                this.printMessageIO(Card.SEQ.INDX.PORT, null, addrFrom, "SEQ.INDX", b);
                return b;
            };
            
            /**
             * outSEQIndx(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C4)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outSEQIndx = function(port, bOut, addrFrom)
            {
                this.cardEGA.regSEQIndx = bOut;
                this.printMessageIO(Card.SEQ.INDX.PORT, bOut, addrFrom, "SEQ.INDX");
            };
            
            /**
             * inSEQData(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C5)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inSEQData = function(port, addrFrom)
            {
                var b = this.cardEGA.regSEQData[this.cardEGA.regSEQIndx];
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.SEQ.DATA.PORT, null, addrFrom, "SEQ" + this.cardEGA.asSEQRegs[this.cardEGA.regSEQIndx], b);
                }
                return b;
            };
            
            /**
             * outSEQData(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C5)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outSEQData = function(port, bOut, addrFrom)
            {
                if (Video.TRAPALL || this.cardEGA.regSEQData[this.cardEGA.regSEQIndx] !== bOut) {
                    if (!addrFrom || this.messageEnabled()) {
                        this.printMessageIO(Card.SEQ.DATA.PORT, bOut, addrFrom, "SEQ." + this.cardEGA.asSEQRegs[this.cardEGA.regSEQIndx]);
                    }
                    this.cardEGA.regSEQData[this.cardEGA.regSEQIndx] = bOut;
                }
                switch(this.cardEGA.regSEQIndx) {
                case Card.SEQ.MAPMASK.INDX:
                    this.cardEGA.nSeqMapMask = Video.aEGAByteToDW[bOut & Card.SEQ.MAPMASK.MAPS];
                    break;
                case Card.SEQ.MEMMODE.INDX:
                    this.setAccess(this.getAccess());
                    break;
                default:
                    break;
                }
            };
            
            /**
             * inDACMask(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C6)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inDACMask = function(port, addrFrom)
            {
                var b = this.cardEGA.regDACMask;
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.DAC.MASK.PORT, null, addrFrom, "DAC.MASK", b);
                }
                return b;
            };
            
            /**
             * outDACMask(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C6)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outDACMask = function(port, bOut, addrFrom)
            {
                if (Video.TRAPALL || this.cardEGA.regDACMask !== bOut) {
                    if (!addrFrom || this.messageEnabled()) {
                        this.printMessageIO(Card.DAC.MASK.PORT, bOut, addrFrom, "DAC.MASK");
                    }
                    this.cardEGA.regDACMask = bOut;
                }
            };
            
            /**
             * inDACState(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C7)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inDACState = function(port, addrFrom)
            {
                var b = this.cardEGA.regDACState;
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.DAC.STATE.PORT, null, addrFrom, "DAC.STATE", b);
                }
                return b;
            };
            
            /**
             * outDACRead(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C7)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outDACRead = function(port, bOut, addrFrom)
            {
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.DAC.ADDR.PORT_READ, bOut, addrFrom, "DAC.READ");
                }
                this.cardEGA.regDACAddr = bOut;
                this.cardEGA.regDACState = Card.DAC.STATE.MODE_READ;
                this.cardEGA.regDACShift = 0;
            };
            
            /**
             * outDACWrite(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C8)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outDACWrite = function(port, bOut, addrFrom)
            {
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.DAC.ADDR.PORT_WRITE, bOut, addrFrom, "DAC.WRITE");
                }
                this.cardEGA.regDACAddr = bOut;
                this.cardEGA.regDACState = Card.DAC.STATE.MODE_WRITE;
                this.cardEGA.regDACShift = 0;
            };
            
            /**
             * inDACData(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C9)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inDACData = function(port, addrFrom)
            {
                var b = (this.cardEGA.regDACData[this.cardEGA.regDACAddr] >> this.cardEGA.regDACShift) & 0x3f;
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.DAC.DATA.PORT, null, addrFrom, "DAC.DATA[" + str.toHexByte(this.cardEGA.regDACAddr) + "][" + str.toHexByte(this.cardEGA.regDACShift) + "]", b);
                }
                this.cardEGA.regDACShift += 6;
                if (this.cardEGA.regDACShift > 12) {
                    this.cardEGA.regDACShift = 0;
                    this.cardEGA.regDACAddr = (this.cardEGA.regDACAddr + 1) & (Card.DAC.TOTAL_REGS-1);
                }
                return b;
            };
            
            /**
             * outDACData(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3C9)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outDACData = function(port, bOut, addrFrom)
            {
                var dw = this.cardEGA.regDACData[this.cardEGA.regDACAddr];
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.DAC.DATA.PORT, bOut, addrFrom, "DAC.DATA[" + str.toHexByte(this.cardEGA.regDACAddr) + "][" + str.toHexByte(this.cardEGA.regDACShift) + "]");
                }
                this.cardEGA.regDACData[this.cardEGA.regDACAddr] = (dw & ~(0x3f << this.cardEGA.regDACShift)) | ((bOut & 0x3f) << this.cardEGA.regDACShift);
                this.cardEGA.regDACShift += 6;
                if (this.cardEGA.regDACShift > 12) {
                    this.cardEGA.regDACShift = 0;
                    this.cardEGA.regDACAddr = (this.cardEGA.regDACAddr + 1) & (Card.DAC.TOTAL_REGS-1);
                }
            };
            
            /**
             * inVGAFeat(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3CA)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inVGAFeat = function(port, addrFrom)
            {
                var b = this.cardEGA.regFeat;
                this.printMessageIO(Card.FEAT_CTRL.PORT_READ, null, addrFrom, "FEAT", b);
                return b;
            };
            
            /**
             * outGRCPos2(port, bOut, addrFrom)
             *
             * "The EGA was originally implemented by IBM using two Graphics Controller Chips. This register is used to program
             * the Graphics #2 chip. See the Graphics #1 Position Register for details."
             *
             * "A one should be loaded into this location to map host data bus bits 2 and 3 to display planes 2 and 3, respectively."
             *
             * @this {Video}
             * @param {number} port (0x3CA)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outGRCPos2 = function(port, bOut, addrFrom)
            {
                this.cardEGA.regGRCPos2 = bOut;
                this.printMessageIO(Card.GRC.POS2_PORT, bOut, addrFrom, "GRC2");
            };
            
            /**
             * inVGAMisc(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3CC)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inVGAMisc = function(port, addrFrom)
            {
                var b = this.cardEGA.regMisc;
                this.printMessageIO(Card.MISC.PORT_READ, null, addrFrom, "MISC", b);
                return b;
            };
            
            /**
             * outGRCPos1(port, bOut, addrFrom)
             *
             * "The EGA was originally implemented by IBM using two Graphics Controller Chips. It was necessary to program
             * each to respond to a different set of two consecutive bits of the 8-bit host data bus. In the IBM EGA implementation,
             * a 0 must be loaded into this register. In the VGA, there is no analogous register."
             *
             * "A zero should be loaded into this location to map host data bus bits 0 and 1 to display planes 0 and 1 respectively."
             *
             * Note that this register was not readable on the EGA, and when the VGA came along, reads of this port read the Misc reg.
             *
             * @this {Video}
             * @param {number} port (0x3CC)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outGRCPos1 = function(port, bOut, addrFrom)
            {
                this.cardEGA.regGRCPos1 = bOut;
                this.printMessageIO(Card.GRC.POS1_PORT, bOut, addrFrom, "GRC1");
            };
            
            /**
             * inGRCIndx(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3CE)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inGRCIndx = function(port, addrFrom)
            {
                var b = this.cardEGA.regGRCIndx;
                this.printMessageIO(Card.GRC.INDX.PORT, null, addrFrom, "GRC.INDX", b);
                return b;
            };
            
            /**
             * outGRCIndx(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3CE)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outGRCIndx = function(port, bOut, addrFrom)
            {
                this.cardEGA.regGRCIndx = bOut;
                this.printMessageIO(Card.GRC.INDX.PORT, bOut, addrFrom, "GRC.INDX");
            };
            
            /**
             * inGRCData(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3CF)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inGRCData = function(port, addrFrom)
            {
                var b = this.cardEGA.regGRCData[this.cardEGA.regGRCIndx];
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(Card.GRC.DATA.PORT, null, addrFrom, "GRC." + this.cardEGA.asGRCRegs[this.cardEGA.regGRCIndx], b);
                }
                return b;
            };
            
            /**
             * outGRCData(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3CF)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outGRCData = function(port, bOut, addrFrom)
            {
                if (Video.TRAPALL || this.cardEGA.regGRCData[this.cardEGA.regGRCIndx] !== bOut) {
                    if (!addrFrom || this.messageEnabled()) {
                        this.printMessageIO(Card.GRC.DATA.PORT, bOut, addrFrom, "GRC." + this.cardEGA.asGRCRegs[this.cardEGA.regGRCIndx]);
                    }
                    this.cardEGA.regGRCData[this.cardEGA.regGRCIndx] = bOut;
                }
                switch(this.cardEGA.regGRCIndx) {
                case Card.GRC.SRESET.INDX:
                    this.cardEGA.nSetMapData = Video.aEGAByteToDW[bOut & 0xf];
                    this.cardEGA.nSetMapBits = this.cardEGA.nSetMapData & ~this.cardEGA.nSetMapMask;
                    break;
                case Card.GRC.ESRESET.INDX:
                    this.cardEGA.nSetMapMask = ~Video.aEGAByteToDW[bOut & 0xf];
                    this.cardEGA.nSetMapBits = this.cardEGA.nSetMapData & ~this.cardEGA.nSetMapMask;
                    break;
                case Card.GRC.COLORCMP.INDX:
                    this.cardEGA.nColorCompare = Video.aEGAByteToDW[bOut & 0xf] & (0x80808080|0);
                    break;
                case Card.GRC.DATAROT.INDX:
                case Card.GRC.MODE.INDX:
                    this.setAccess(this.getAccess());
                    break;
                case Card.GRC.READMAP.INDX:
                    this.cardEGA.nReadMapShift = (bOut & Card.GRC.READMAP.NUM) << 3;
                    break;
                case Card.GRC.MISC.INDX:
                    this.checkMode(false);
                    break;
                case Card.GRC.COLORDC.INDX:
                    this.cardEGA.nColorDontCare = Video.aEGAByteToDW[bOut & 0xf] & (0x80808080|0);
                    break;
                case Card.GRC.BITMASK.INDX:
                    this.cardEGA.nBitMapMask = bOut | (bOut << 8) | (bOut << 16) | (bOut << 24);
                    break;
                default:
                    break;
                }
            };
            
            /**
             * inCGAIndx(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D4)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number|undefined}
             */
            Video.prototype.inCGAIndx = function(port, addrFrom)
            {
                return this.inCRTCIndx(this.cardColor, port, addrFrom);
            };
            
            /**
             * outCGAIndx(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D4)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCGAIndx = function(port, bOut, addrFrom)
            {
                this.outCRTCIndx(this.cardColor, port, bOut, addrFrom);
            };
            
            /**
             * inCGAData(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D5)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number|undefined}
             */
            Video.prototype.inCGAData = function(port, addrFrom)
            {
                return this.inCRTCData(this.cardColor, port, addrFrom);
            };
            
            /**
             * outCGAData(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D5)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCGAData = function(port, bOut, addrFrom)
            {
                this.outCRTCData(this.cardColor, port, bOut, addrFrom);
            };
            
            /**
             * inCGAMode(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D8)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inCGAMode = function(port, addrFrom)
            {
                return this.inCardMode(this.cardColor, addrFrom);
            };
            
            /**
             * outCGAMode(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D8)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCGAMode = function(port, bOut, addrFrom)
            {
                this.outCardMode(this.cardColor, bOut, addrFrom);
            };
            
            /**
             * inCGAColor(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D9)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inCGAColor = function(port, addrFrom)
            {
                var b = this.cardColor.regColor;
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(port /* this.cardColor.port + 5 */, null, addrFrom, this.cardColor.type + ".COLOR", b);
                }
                return b;
            };
            
            /**
             * outCGAColor(port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3D9)
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCGAColor = function(port, bOut, addrFrom)
            {
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(port /* this.cardColor.port + 5 */, bOut, addrFrom, this.cardColor.type + ".COLOR");
                }
                if (this.cardColor.regColor !== bOut) {
                    this.cardColor.regColor = bOut;
                    /*
                     * When this color register changes, it can automatically change the appearance of any number of cells, so we make
                     * a special call to initCellCache() to invalidate every cell, forcing all cells to be redrawn on the next updateScreen().
                     */
                    this.initCellCache();
                }
            };
            
            /**
             * inCGAStatus(port, addrFrom)
             *
             * @this {Video}
             * @param {number} port (0x3DA)
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inCGAStatus = function(port, addrFrom)
            {
                return this.inCardStatus(this.cardColor, addrFrom);
            };
            
            /**
             * inCRTCIndx(card, port, addrFrom)
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} port
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number|undefined}
             */
            Video.prototype.inCRTCIndx = function(card, port, addrFrom)
            {
                var b;
                /*
                 * The IBM VGA ROM makes some hardware determinations based on how the CRTC controller responds when
                 * the IO_SELECT bit in the Miscellaneous Output Register is cleared; normally, that would mean ports
                 * 0x3B? are decoded and ports 0x3D? are ignored.  We didn't used to bother ignoring them, but the
                 * VGA ROM's logic requires it, so now we also check fActive.  However, we ignore only CTRC reads;
                 * we retain any writes in case that information proves useful later.
                 *
                 * Note that returning an undefined value now signals the Bus component to return whatever default value
                 * it prefers (normally 0xff).
                 */
                if (card.fActive) b = card.regCRTIndx;
                this.printMessageIO(port, null, addrFrom, "CRTC.INDX", b);
                return b;
            };
            
            /**
             * outCRTCIndx(card, port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} port
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCRTCIndx = function(card, port, bOut, addrFrom)
            {
                card.regCRTPrev = card.regCRTIndx;
                card.regCRTIndx = bOut & Card.CGA.CRTC.INDX.MASK;
                this.printMessageIO(port /* card.port */, bOut, addrFrom, "CRTC.INDX");
            };
            
            /**
             * inCRTCData(card, port, addrFrom)
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} port
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number|undefined}
             */
            Video.prototype.inCRTCData = function(card, port, addrFrom)
            {
                var b;
                /*
                 * The IBM VGA ROM makes some hardware determinations based on how the CRTC controller responds when
                 * the IO_SELECT bit in the Miscellaneous Output Register is cleared; normally, that would mean ports
                 * 0x3B? are decoded and ports 0x3D? are ignored.  We didn't used to bother ignoring them, but the
                 * VGA ROM's logic requires it, so now we also check fActive.  However, we ignore only CTRC reads;
                 * we retain any writes in case that information proves useful later.
                 *
                 * Note that returning an undefined value now signals the Bus component to return whatever default value
                 * it prefers (normally 0xff).
                 */
                if (card.fActive && card.regCRTIndx < card.nCRTCRegs) b = card.regCRTData[card.regCRTIndx];
                if (!addrFrom || this.messageEnabled()) {
                    this.printMessageIO(port /* card.port + 1 */, null, addrFrom, "CRTC." + card.asCRTCRegs[card.regCRTIndx], b);
                }
                return b;
            };
            
            /**
             * outCRTCData(card, port, bOut, addrFrom)
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} port
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCRTCData = function(card, port, bOut, addrFrom)
            {
                if (card.regCRTIndx < card.nCRTCRegs) {
                    if (Video.TRAPALL || card.regCRTData[card.regCRTIndx] !== bOut) {
                        if (!addrFrom || this.messageEnabled()) {
                            this.printMessageIO(port /* card.port + 1 */, bOut, addrFrom, "CRTC." + card.asCRTCRegs[card.regCRTIndx]);
                        }
                        card.regCRTData[card.regCRTIndx] = bOut;
                    }
                    if (card.regCRTIndx == Card.CRTC.START_ADDR_HI || card.regCRTIndx == Card.CRTC.START_ADDR_LO) {
                        /*
                         * HACK: nStartAddress is supposed to be "latched" ONLY at the start of every VERT_RETRACE interval,
                         * but the best we can currently do is latch it during retrace, as well as other times (eg, see outATC()).
                         */
                        if (this.getRetraceBits(card) & Card.CGA.STATUS.DISP_RETRACE) {
                            card.nStartAddress = ((card.regCRTData[Card.CRTC.START_ADDR_HI] << 8) + card.regCRTData[Card.CRTC.START_ADDR_LO])|0;
                        }
                    }
                    /*
                     * During mode changes on the EGA, all the CRTC regs are typically programmed in sequence,
                     * and if that's all that's happening with Card.CRTC.MAX_SCAN_LINE, then we don't want to treat
                     * it special; let the mode change be detected normally (eg, when the GRC regs are written later).
                     *
                     * On the other hand, if this was an out-of-sequence write to Card.CRTC.MAX_SCAN_LINE, then
                     * yes, we want to force setMode() to call setDimensions(), which is key to setting the proper
                     * number of screen rows.
                     */
                    if (card.regCRTIndx == Card.CRTC.MAX_SCAN_LINE && card.regCRTPrev != Card.CRTC.MAX_SCAN_LINE-1) {
                        this.checkMode(true);
                    }
                    this.checkCursor();
                } else {
                    if (DEBUG && (!addrFrom || this.messageEnabled())) {
                        this.printMessage("outCRTCData(): ignoring unexpected write to CRTC[" + str.toHexByte(card.regCRTIndx) + "]: " + str.toHexByte(bOut));
                    }
                }
            };
            
            /**
             * inCardMode(card, addrFrom)
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inCardMode = function(card, addrFrom)
            {
                var b = card.regMode;
                this.printMessageIO(card.port + 4, null, addrFrom, "MODE", b);
                return b;
            };
            
            /**
             * outCardMode(card, bOut, addrFrom)
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} bOut
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             */
            Video.prototype.outCardMode = function(card, bOut, addrFrom)
            {
                this.printMessageIO(card.port + 4, bOut, addrFrom, "MODE");
                card.regMode = bOut;
                this.checkMode(false);
            };
            
            /**
             * inCardStatus(card, addrFrom)
             *
             * On an EGA, this register is called "Status Register One" (0x3BA/0x3DA aka STATUS1), to distinguish it from
             * "Status Register Zero" (0x3C2 aka STATUS0).  One of the side-effects of reading STATUS1 is that it resets the
             * ATC address/data flip-flop to "address" mode, which we emulate by setting cardEGA.fATCData to false, indicating
             * that the ATC is not in "data" mode.
             *
             * @this {Video}
             * @param {Object} card
             * @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
             * @return {number}
             */
            Video.prototype.inCardStatus = function(card, addrFrom)
            {
                var b = this.getRetraceBits(card);
            
                if (card === this.cardEGA) {
                    /*
                     * STATUS1 diagnostic bits 5 and 4 are set according to the Card.ATC.PLANES.MUX bits:
                     *
                     *      MUX     Bit 5   Bit 4
                     *      ---     ----    ----
                     *      00:     Red     Blue
                     *      01:     SecBlue Green
                     *      10:     SecRed  SecGreen
                     *      11:     unused  unused
                     *
                     * Depending on where we are in the horizontal and vertical periods (which can be inferred from the
                     * same elapsed cycle count that we used to simulate the retrace bits above), we could extract 4 bits
                     * from a corresponding region of the video buffer, "and" them with Card.ATC.PLANES.MASK, use
                     * that to index into the palette registers (cardEGA.regATCData), and use the resulting palette register
                     * bits to set these diagnostics bits.  However, that's all rather tedious, and the process of extracting
                     * 4 appropriate bits from the video buffer varies depending on the video mode.
                     *
                     * Why are we even considering this?  Because the EGA BIOS diagnostic code draws a bright reverse-video
                     * line of text blocks across the top of the screen, writes 0x3F to palette register 0x0f, and then
                     * monitors the STATUS1 diagnostic bits, waiting for those palette bits to show up.  It turns out, however,
                     * that we can easily fool the EGA BIOS by simply toggling the diagnostic bits.  So we take the easy way out.
                     *
                     * TODO: Faithful emulation of these bits is certainly doable, so consider doing that at some point.
                     */
                    b |= ((card.regStatus & Card.STATUS1.DIAGNOSTIC) ^ Card.STATUS1.DIAGNOSTIC);
            
                    /*
                     * Last but not least, we must reset the EGA's ATC flip-flop whenever this register is read.
                     */
                    card.fATCData = false;
                }
                else {
                    /*
                     * On the MDA/CGA, to satisfy ROM BIOS testing ("TEST.10"), it's sufficient to do a simple toggle of
                     * bits 0 and 3 on every read.
                     *
                     * Also, according to http://www.seasip.info/VintagePC/mda.html, on an MDA, bits 7-4 are always ON and
                     * bits 2-1 are always OFF, hence the "OR" of 0xf0.
                     *
                     * TODO: Decide whether to preserve the bits from getRetraceBits() on the MDA/CGA; we're continuing
                     * to do a simple toggle, partly on the theory that that may speed up the CGA BIOS scroll code a bit.
                     */
                    b = (card.regStatus ^= (Card.CGA.STATUS.DISP_RETRACE | Card.CGA.STATUS.VERT_RETRACE)) | 0xf0;
                }
            
                card.regStatus = b;
                this.printMessageIO(card.port + 6, null, addrFrom, (card === this.cardEGA? "STATUS1" : "STATUS"), b);
                return b;
            };
            
            /**
             * dumpVideo(sParm)
             *
             * @this {Video}
             * @param {string|undefined} sParm
             */
            Video.prototype.dumpVideo = function(sParm)
            {
                if (DEBUGGER) {
                    if (!this.cardActive) {
                        this.dbg.println("no active video card");
                        return;
                    }
                    if (sParm) {
                        this.cardActive.dumpBuffer(sParm);
                        return;
                    }
                    this.dbg.println("BIOSMODE: " + str.toHexByte(this.nMode));
                    this.cardActive.dumpCard();
                }
            };
            
            /*
             * Port input/output notification tables
             *
             * TODO: At one point, I'd added some "duplicate" entries for the MDA because, according to docs I'd read,
             * MDA ports are decoded at multiple addresses.  However, if this is important, then it should be verified
             * and implemented consistently (eg, for CGA as well).  For now, I'm decoding only the standard port addresses.
             *
             * For example, 0x3B5 is apparently also decoded at 0x3B1, 0x3B3, and 0x3B7, while 0x3B4 is also decoded at
             * 0x3B0, 0x3B2, and 0x3B6.
             */
            Video.aMDAPortInput = {
                0x3B4: Video.prototype.inMDAIndx,           // technically, not actually readable, but I want the Debugger to be able to read this
                0x3B5: Video.prototype.inMDAData,           // technically, the only CRTC Data registers that are readable are R14-R17
                0x3B8: Video.prototype.inMDAMode,           // technically, not actually readable, but I want the Debugger to be able to read this
                0x3BA: Video.prototype.inMDAStatus
            };
            
            Video.aMDAPortOutput = {
                0x3B4: Video.prototype.outMDAIndx,
                0x3B5: Video.prototype.outMDAData,
                0x3B8: Video.prototype.outMDAMode
            };
            
            Video.aCGAPortInput = {
                0x3D4: Video.prototype.inCGAIndx,           // technically, not actually readable, but I want the Debugger to be able to read this
                0x3D5: Video.prototype.inCGAData,           // technically, the only CRTC Data registers that are readable are R14-R17
                0x3D8: Video.prototype.inCGAMode,           // technically, not actually readable, but I want the Debugger to be able to read this
                0x3D9: Video.prototype.inCGAColor,          // technically, not actually readable, but I want the Debugger to be able to read this
                0x3DA: Video.prototype.inCGAStatus
            };
            
            Video.aCGAPortOutput = {
                0x3D4: Video.prototype.outCGAIndx,
                0x3D5: Video.prototype.outCGAData,
                0x3D8: Video.prototype.outCGAMode,
                0x3D9: Video.prototype.outCGAColor
            };
            
            Video.aEGAPortInput = {
                0x3C0: Video.prototype.inATC,               // technically, only readable on a VGA, but I want the Debugger to be able to read this, too
                0x3C1: Video.prototype.inATC,               // technically, only readable on a VGA, but I want the Debugger to be able to read this, too
                0x3C2: Video.prototype.inStatus0,
                0x3C4: Video.prototype.inSEQIndx,           // technically, only readable on a VGA, but I want the Debugger to be able to read this, too
                0x3C5: Video.prototype.inSEQData,           // technically, only readable on a VGA, but I want the Debugger to be able to read this, too
                0x3CE: Video.prototype.inGRCIndx,           // technically, only readable on a VGA, but I want the Debugger to be able to read this, too
                0x3CF: Video.prototype.inGRCData            // technically, only readable on a VGA, but I want the Debugger to be able to read this, too
            };
            
            /*
             * WARNING: Unlike the EGA, a standard VGA does not support writes to 0x3C1, but it's easier for me to leave that
             * ability in place, treating the VGA as a superset of the EGA as much as possible; will any code break because word
             * I/O to port 0x3C0 actually works?  Possibly, but highly unlikely.
             */
            Video.aEGAPortOutput = {
                0x3BA: Video.prototype.outFeat,
                0x3C0: Video.prototype.outATC,
                0x3C1: Video.prototype.outATC,              // the EGA BIOS writes to this port (see C000:0416), implying that 0x3C0 and 0x3C1 both decode the same register
                0x3C2: Video.prototype.outMisc,             // FYI, since this overlaps with STATUS0.PORT, there's currently no way for the Debugger to read the Misc register
                0x3C4: Video.prototype.outSEQIndx,
                0x3C5: Video.prototype.outSEQData,
                0x3CA: Video.prototype.outGRCPos2,
                0x3CC: Video.prototype.outGRCPos1,
                0x3CE: Video.prototype.outGRCIndx,
                0x3CF: Video.prototype.outGRCData,
                0x3DA: Video.prototype.outFeat
            };
            
            Video.aVGAPortInput = {
                0x3C3: Video.prototype.inVGAEnable,
                0x3C6: Video.prototype.inDACMask,
                0x3C7: Video.prototype.inDACState,
                0x3C9: Video.prototype.inDACData,
                0x3CA: Video.prototype.inVGAFeat,
                0x3CC: Video.prototype.inVGAMisc
            };
            
            Video.aVGAPortOutput = {
                0x3C3: Video.prototype.outVGAEnable,
                0x3C6: Video.prototype.outDACMask,
                0x3C7: Video.prototype.outDACRead,
                0x3C8: Video.prototype.outDACWrite,
                0x3C9: Video.prototype.outDACData
            };
            
            /**
             * Video.init()
             *
             * This function operates on every HTML element of class "video", extracting the
             * JSON-encoded parameters for the Video constructor from the element's "data-value"
             * attribute, invoking the constructor to create a Video component, and then binding
             * any associated HTML controls to the new component.
             */
            Video.init = function()
            {
                var aeVideo = Component.getElementsByClass(window.document, PCJSCLASS, "video");
                for (var iVideo = 0; iVideo < aeVideo.length; iVideo++) {
                    var eVideo = aeVideo[iVideo];
                    var parmsVideo = Component.getComponentParms(eVideo);
            
                    var eCanvas = window.document.createElement("canvas");
                    if (eCanvas === undefined || !eCanvas.getContext) {
                        eVideo.innerHTML = "<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";
                        return;
                    }
            
                    eCanvas.setAttribute("class", PCJSCLASS + "-canvas");
                    eCanvas.setAttribute("width", parmsVideo['screenWidth']);
                    eCanvas.setAttribute("height", parmsVideo['screenHeight']);
                    eCanvas.style.backgroundColor = parmsVideo['screenColor'];
            
                    /*
                     * The "contenteditable" attribute on a canvas element NOTICEABLY slows down canvas drawing on
                     * Safari as soon as you give the canvas focus (ie, click away from the canvas, and drawing speeds
                     * up; click on the canvas, and drawing slows down).  So the "transparent textarea hack" that we
                     * once employed as only a work-around for Android devices is now our default.
                     *
                     *      eCanvas.setAttribute("contenteditable", "true");
                     *
                     * HACK: A canvas style of "auto" provides for excellent responsive canvas scaling in EVERY browser
                     * except IE9/IE10, so I recalculate the appropriate CSS height every time the parent DIV is resized;
                     * IE11 works without this hack, so we take advantage of the fact that IE11 doesn't report itself as "MSIE".
                     */
                    eCanvas.style.height = "auto";
                    if (web.getUserAgent().indexOf("MSIE") >= 0) {
                        eVideo.onresize = function(eParent, eChild, cx, cy) {
                            return function onResizeVideo() {
                                eChild.style.height = (((eParent.clientWidth * cy) / cx) | 0) + "px";
                            };
                        }(eVideo, eCanvas, parmsVideo['screenWidth'], parmsVideo['screenHeight']);
                        eVideo.onresize();
                    }
                    eVideo.appendChild(eCanvas);
            
                    /*
                     * HACK: Android-based browsers, like the Silk (Amazon) browser and Chrome for Android, don't honor the
                     * "contenteditable" attribute; that is, when the canvas receives focus, they don't activate the on-screen
                     * keyboard.  So my fallback is to create a transparent textarea on top of the canvas.
                     *
                     * The parent DIV must have a style of "position:relative" (alternatively, a class of "pcjs-container"),
                     * so that we can position the textarea using absolute coordinates.  Also, we don't want the textarea to be
                     * visible, but we must use "opacity:0" instead of "visibility:hidden", because the latter seems to prevent
                     * the element from receiving events.  These styling requirements are taken care of in components.css
                     * (see references to the "pcjs-video-object" class).
                     *
                     * UPDATE: Unfortunately, Android keyboards like to compose whole words before transmitting any of the
                     * intervening characters; our textarea's keyDown/keyUp event handlers DO receive intervening key events,
                     * but their keyCode property is ZERO.  Virtually the only usable key event we receive is the Enter key.
                     * Android users will have to use machines that include their own on-screen "soft keyboard", or use an
                     * external keyboard.
                     *
                     * The following attempt to use a password-enabled input field didn't work any better on Android.  You could
                     * clearly see the overlaid semi-transparent input field, but none of the input characters were passed along,
                     * with the exception of the "Go" (Enter) key.
                     *
                     *      var eInput = window.document.createElement("input");
                     *      eInput.setAttribute("type", "password");
                     *      eInput.setAttribute("style", "position:absolute; left:0; top:0; width:100%; height:100%; opacity:0.5");
                     *      eVideo.appendChild(eInput);
                     *
                     * See this Chromium issue for more information: https://code.google.com/p/chromium/issues/detail?id=118639
                     */
                    var eTextArea = window.document.createElement("textarea");
            
                    /*
                     * As noted in keyboard.js, the keyboard on an iOS device pops up with the SHIFT key depressed,
                     * which is not the initial keyboard state that the Keyboard component expects.
                     */
                    if (web.isUserAgent("iOS")) {
                        eTextArea.setAttribute("autocapitalize", "off");
                        eTextArea.setAttribute("autocorrect", "off");
                    }
                    eVideo.appendChild(eTextArea);
            
                    /*
                     * Now we can create the Video object, record it, and wire it up to the associated document elements.
                     */
                    var eContext = eCanvas.getContext("2d");
                    var video = new Video(parmsVideo, eCanvas, eContext, eTextArea /* || eInput */, eVideo);
            
                    /*
                     * Bind any video-specific controls (eg, the Refresh button). There are no essential controls, however;
                     * even the "Refresh" button is just a diagnostic tool, to ensure that the screen contents are up-to-date.
                     */
                    Component.bindComponentControls(video, eVideo, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every Video module on the page.
             */
            web.onInit(Video.init);
            
            if (typeof module !== 'undefined') module.exports = Video;
            
          • x86.js
            /**
             * @fileoverview Defines PCjs x86 constants.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            var X86 = {
                /*
                 * CPU model numbers
                 */
                MODEL_8086:     8086,
                MODEL_8088:     8088,
                MODEL_80186:    80186,
                MODEL_80188:    80188,
                MODEL_80286:    80286,
                MODEL_80386:    80386,
            
                /*
                 * This constant is used to mark points in the code where the physical address being returned
                 * is invalid and should not be used.  TODO: There are still functions that will use an invalid
                 * address, which is why we've tried to choose a value that causes the least harm, but ultimately,
                 * we must add checks to those functions or throw special JavaScript exceptions to bypass them.
                 *
                 * This value is also used to indicate non-existent EA address calculations, which are usually
                 * detected with "regEA === ADDR_INVALID" and "regEAWrite === ADDR_INVALID" tests.  In a 32-bit
                 * CPU, -1 (ie, 0xffffffff) could actually be a valid address, so consider changing ADDR_INVALID
                 * to NaN or null (which is also why all ADDR_INVALID tests should use strict equality operators).
                 *
                 * The main reason I'm NOT using NaN or null now is my concern that, by mixing non-numbers
                 * (specifically, values outside the range of signed 32-bit integers), performance may suffer.
                 */
                ADDR_INVALID:   -1,
            
                /*
                 * Processor Status flag definitions (stored in regPS)
                 */
                PS: {
                    CF:     0x0001,     // bit 0: Carry flag
                    BIT1:   0x0002,     // bit 1: reserved, always set
                    PF:     0x0004,     // bit 2: Parity flag
                    BIT3:   0x0008,     // bit 3: reserved, always clear
                    AF:     0x0010,     // bit 4: Auxiliary Carry flag (aka Arithmetic flag)
                    BIT5:   0x0020,     // bit 5: reserved, always clear
                    ZF:     0x0040,     // bit 6: Zero flag
                    SF:     0x0080,     // bit 7: Sign flag
                    TF:     0x0100,     // bit 8: Trap flag
                    IF:     0x0200,     // bit 9: Interrupt flag
                    DF:     0x0400,     // bit 10: Direction flag
                    OF:     0x0800,     // bit 11: Overflow flag
                    IOPL: {
                     MASK:  0x3000,     // bits 12-13: I/O Privilege Level (always set on 8086/80186, clear on 80286 reset)
                     SHIFT: 12
                    },
                    NT:     0x4000,     // bit 14: Nested Task flag (always set on 8086/80186, clear on 80286 reset)
                    BIT15:  0x8000      // bit 15: reserved (always set on 8086/80186, clear otherwise)
                },
                CR0: {
                    /*
                     * Machine Status Word (MSW) bit definitions
                     */
                    MSW: {
                        PE:     0x0001, // protected-mode enabled
                        MP:     0x0002, // monitor processor extension (ie, coprocessor)
                        EM:     0x0004, // emulate processor extension
                        TS:     0x0008, // task switch indicator
                        ON:     0xfff0, // on the 80286, these bits are always on (TODO: Verify)
                        MASK:   0xffff  // these are the only (MSW) bits that the 80286 can access (within CR0)
                    },
                    ET: 0x00000010,     // coprocessor type (80287 or 80387); always 1 on post-80386 CPUs
                    PG: 0x80000000|0    // 0: paging disabled
                },
                SEL: {
                    RPL:    0x0003,     // requested privilege level (0-3)
                    LDT:    0x0004,     // table indicator (0: GDT, 1: LDT)
                    MASK:   0xfff8      // table index
                },
                DESC: {                 // Descriptor Table Entry
                    LIMIT: {            // LIMIT bits 0-15 (or OFFSET if this is an INTERRUPT or TRAP gate)
                        OFFSET:     0x0
                    },
                    BASE: {             // BASE bits 0-15 (or SELECTOR if this is a TASK, INTERRUPT or TRAP gate)
                        OFFSET:     0x2
                    },
                    ACC: {              // bit definitions for the access word (offset 0x4)
                        OFFSET:     0x4,
                        BASE1623:                       0x00ff,     // (not used if this a TASK, INTERRUPT or TRAP gate; bits 0-5 are parm count for CALL gates)
                        TYPE: {
                            OFFSET: 0x5,
                            MASK:                       0x1f00,
                            SEG:                        0x1000,
                            NONSEG:                     0x0f00,
                            /*
                             * The following bits apply only when SEG is set
                             */
                            CODE:                       0x0800,     // set for CODE, clear for DATA
                            ACCESSED:                   0x0100,     // set if accessed, clear if not accessed
                            READABLE:                   0x0200,     // CODE: set if readable, clear if exec-only
                            WRITABLE:                   0x0200,     // DATA: set if writable, clear if read-only
                            CONFORMING:                 0x0400,     // CODE: set if conforming, clear if not
                            EXPDOWN:                    0x0400,     // DATA: set if expand-down, clear if not
                            /*
                             * The following are all the possible (valid) types (well, except for the variations
                             * of DATA and CODE where the ACCESSED bit (0x0100) may also be set)
                             */
                            TSS:                        0x0100,
                            LDT:                        0x0200,
                            TSS_BUSY:                   0x0300,
                            GATE_CALL:                  0x0400,
                            GATE_TASK:                  0x0500,
                            GATE_INT:                   0x0600,
                            GATE_TRAP:                  0x0700,
                            DATA_READONLY:              0x1000,
                            DATA_WRITABLE:              0x1200,
                            DATA_EXPDOWN_READONLY:      0x1400,
                            DATA_EXPDOWN_WRITABLE:      0x1600,
                            CODE_EXECONLY:              0x1800,
                            CODE_READABLE:              0x1a00,
                            CODE_CONFORMING:            0x1c00,
                            CODE_CONFORMING_READABLE:   0x1e00
                        },
                        DPL: {
                            MASK:                       0x6000,
                            SHIFT:                      13
                        },
                        PRESENT:                        0x8000,
                        INVALID:    0   // use X86.DESC.ACC.INVALID for invalid ACC values
                    },
                    EXT: {              // descriptor extension word (reserved on the 80286; "must be zero")
                        OFFSET:     0x6,
                        LIMIT1619:                      0x000f,
                        AVAIL:                          0x0010,     // NOTE: set in various descriptors in OS/2
                        /*
                         * The BIG bit is known as the D bit for code segments; when set, all addresses and operands
                         * in that code segment are assumed to be 32-bit.
                         *
                         * The BIG bit is known as the B bit for data segments; when set, it indicates: 1) all pushes,
                         * pops, calls and returns use ESP instead of SP, and 2) the upper bound of an expand-down segment
                         * is 0xffffffff instead of 0xffff.
                         */
                        BIG:                            0x0040,     // clear if default operand/address size is 16-bit, set if 32-bit
                        LIMITPAGES:                     0x0080,     // clear if limit granularity is bytes, set if limit granularity is 4Kb pages
                        BASE2431:                       0xff00
                    },
                    INVALID: 0          // use X86.DESC.INVALID for invalid DESC values
                },
                LADDR: {                // linear address
                    PDE: {              // index of page directory entry
                        MASK:   0xffc00000|0,
                        SHIFT:  20      // (addr & DIR.MASK) >>> DIR.SHIFT yields a page directory offset (ie, index * 4)
                    },
                    PTE: {              // index of page table entry
                        MASK:   0x003ff000,
                        SHIFT:  10      // (addr & PAGE.MASK) >>> PAGE.SHIFT yields a page table offset (ie, index * 4)
                    },
                    OFFSET:     0x00000fff
                },
                PTE: {
                    FRAME:      0xfffff000|0,
                    DIRTY:      0x00000040,         // page has been modified
                    ACCESSED:   0x00000020,         // page has been accessed
                    USER:       0x00000004,         // set for user level (CPL 3), clear for supervisor level (CPL 0-2)
                    READWRITE:  0x00000002,         // set for read/write, clear for read-only (affects CPL 3 only)
                    PRESENT:    0x00000001          // set for present page, clear for not-present page
                },
                TSS: {
                    PREV_TSS:   0x00,
                    CPL0_SP:    0x02,   // start of values altered by task switches
                    CPL0_SS:    0x04,
                    CPL1_SP:    0x06,
                    CPL1_SS:    0x08,
                    CPL2_SP:    0x0a,
                    CPL2_SS:    0x0c,
                    TASK_IP:    0x0e,
                    TASK_PS:    0x10,
                    TASK_AX:    0x12,
                    TASK_CX:    0x14,
                    TASK_DX:    0x16,
                    TASK_BX:    0x18,
                    TASK_SP:    0x1a,
                    TASK_BP:    0x1c,
                    TASK_SI:    0x1e,
                    TASK_DI:    0x20,
                    TASK_ES:    0x22,
                    TASK_CS:    0x24,
                    TASK_SS:    0x26,
                    TASK_DS:    0x28,   // end of values altered by task switches
                    TASK_LDT:   0x2a
                },
                /*
                 * Processor Exception Interrupts
                 *
                 * Of the following exceptions, all are designed to be restartable, except for 0x08 and 0x09 (and 0x0D
                 * after an attempt to write to a read-only segment).
                 *
                 * Error codes are pushed onto the stack for 0x08 (always 0) and 0x0A through 0x0D.
                 *
                 * Priority: Instruction exception, TRAP, NMI, Processor Extension Segment Overrun, and finally INTR.
                 *
                 * All exceptions can also occur in real-mode, except where noted.  A GP_FAULT in real-mode can be triggered
                 * by "any memory reference instruction that attempts to reference [a] 16-bit word at offset 0FFFFH".
                 *
                 * Interrupts beyond 0x10 (up through 0x1F) are reserved for future exceptions.
                 *
                 * Implementation Detail: For any opcode we know must generate a UD_FAULT interrupt, we invoke opInvalid(),
                 * NOT opUndefined().  UD_FAULT is for INVALID opcodes, Intel's choice of "UD" notwithstanding.
                 *
                 * We reserve the term "undefined" for opcodes that require more investigation, and we invoke opUndefined()
                 * ONLY until an opcode's behavior has finally been defined, at which point it becomes either valid or invalid.
                 * The term "illegal" seems completely superfluous; we don't need a third way of describing invalid opcodes.
                 *
                 * The term "undocumented" should be limited to operations that are valid but Intel simply never documented.
                 */
                EXCEPTION: {
                    DIV_ERR:    0x00,       // Divide Error Interrupt
                    TRAP:       0x01,       // Single Step (aka Trap) Interrupt
                    NMI:        0x02,       // Non-Maskable Interrupt
                    BREAKPOINT: 0x03,       // Breakpoint Interrupt
                    OVERFLOW:   0x04,       // INTO Overflow Interrupt (FYI, return address does NOT point to offending instruction)
                    BOUND_ERR:  0x05,       // BOUND Error Interrupt
                    UD_FAULT:   0x06,       // Invalid (aka Undefined or Illegal) Opcode (see implementation detail above)
                    NM_FAULT:   0x07,       // No Math Unit Available (see ESC or WAIT)
                    DF_FAULT:   0x08,       // Double Fault (see LIDT)
                    MP_FAULT:   0x09,       // Math Unit Protection Fault (see ESC)
                    TS_FAULT:   0x0A,       // Invalid Task State Segment Fault (protected-mode only)
                    NP_FAULT:   0x0B,       // Not Present Fault (protected-mode only)
                    SS_FAULT:   0x0C,       // Stack Fault (protected-mode only)
                    GP_FAULT:   0x0D,       // General Protection Fault
                    PG_FAULT:   0x0E,       // Page Fault
                    MF_FAULT:   0x10        // Math Fault (see ESC or WAIT)
                },
                ERRCODE: {
                    EXT:        0x0001,
                    IDT:        0x0002,
                    LDT:        0x0004,
                    MASK:       0xfff8      // index of corresponding entry in GDT, LDT or IDT
                },
                RESULT: {
                    /*
                     * Flags were originally computed using 16-bit result registers:
                     *
                     *      CF: resultZeroCarry & resultSize (ie, 0x100 or 0x10000)
                     *      PF: resultParitySign & 0xff
                     *      AF: (resultParitySign ^ resultAuxOverflow) & 0x0010
                     *      ZF: resultZeroCarry & (resultSize - 1)
                     *      SF: resultParitySign & (resultSize >> 1)
                     *      OF: (resultParitySign ^ resultAuxOverflow ^ (resultParitySign >> 1)) & (resultSize >> 1)
                     *
                     * I386 support requires that we now rely on 32-bit result registers:
                     *
                     *      resultDst, resultSrc, resultArith, resultLogic and resultType
                     *
                     * and flags are now computed as follows:
                     *
                     *      CF: ((resultDst ^ ((resultDst ^ resultSrc) & (resultSrc ^ resultArith))) & resultType)
                     *      PF: (resultLogic & 0xff)
                     *      AF: ((resultArith ^ (resultDst ^ resultSrc)) & 0x0010)
                     *      ZF: (resultLogic & ((resultType - 1) | resultType))
                     *      SF: (resultLogic & resultType)
                     *      OF: (((resultDst ^ resultArith) & (resultSrc ^ resultArith)) & resultType)
                     *
                     * where resultType contains both a size, which must be one of BYTE (0x80), WORD (0x8000),
                     * or DWORD (0x80000000), along with bits for each of the arithmetic and/or logical flags that
                     * are currently "cached" in the result registers (eg, X86.RESULT.CF for carry, X86.RESULT.OF
                     * for overflow, etc).
                     *
                     * WARNING: Do not confuse these RESULT flag definitions with the PS flag definitions.  RESULT
                     * flags are used only as "cached" flag indicators, packed into bits 0-5 of resultType; they do
                     * not match the actual flag bit definitions within the Processor Status (PS) register.
                     *
                     * Arithmetic operations should call:
                     *
                     *      setArithResult(dst, src, value, type)
                     * eg:
                     *      setArithResult(dst, src, dst+src, X86.RESULT.BYTE | X86.RESULT.ALL)
                     *
                     * and logical operations should call:
                     *
                     *      setLogicResult(value, type [, carry [, overflow]])
                     *
                     * Since most logical operations clear both CF and OF, most calls to setLogicResult() can omit the
                     * last two optional parameters.
                     *
                     * The type parameter of these methods indicates both the size of the result (BYTE, WORD or DWORD)
                     * and which of the flags should now be considered "cached" by the result registers.  If the previous
                     * resultType specifies any flags not present in the new type parameter, then those flags are
                     * calculated and written to the appropriate regPS bit(s) *before* the result registers are updated.
                     *
                     * Arithmetic operations are assumed to represent an "added" result; if a "subtracted" result is
                     * provided instead (eg, from CMP, DEC, SUB, etc), then setArithResult() must include a 5th parameter
                     * (fSubtract); eg:
                     *
                     *      setArithResult(dst, src, dst-src, X86.RESULT.BYTE | X86.RESULT.ALL, true)
                     *
                     * TODO: Consider separating setArithResult() into two functions: setAddResult() and setSubResult().
                     */
                    BYTE:       0x80,       // result is byte value
                    WORD:       0x8000,     // result is word value
                    DWORD:      0x80000000|0,
                    TYPE:       0x80008080|0,
                    CF:         0x01,       // carry flag is cached
                    PF:         0x02,       // parity flag is cached
                    AF:         0x04,       // aux carry flag is cached
                    ZF:         0x08,       // zero flag is cached
                    SF:         0x10,       // sign flag is cached
                    OF:         0x20,       // overflow flag is cached
                    ALL:        0x3F,       // all result flags are cached
                    LOGIC:      0x1A,       // all logical flags are cached; see setLogicResult()
                    NOTCF:      0x3E        // all result flags EXCEPT carry are cached
                },
                /*
                 * Bit values for opFlags, which are all reset to zero prior to each instruction
                 */
                OPFLAG: {
                    NOREAD:     0x0001,
                    NOWRITE:    0x0002,
                    NOINTR:     0x0004,     // indicates a segreg has been set, or a prefix, or an STI (delay INTR acknowledgement)
                    SEG:        0x0010,     // segment override
                    LOCK:       0x0020,     // lock prefix
                    REPZ:       0x0040,     // repeat while Z (NOTE: this value MUST match PS.ZF; see opCMPSb/opCMPSw/opSCASb/opSCASw)
                    REPNZ:      0x0080,     // repeat while NZ
                    REPEAT:     0x0100,     // indicates that an instruction is being repeated (ie, some iteration AFTER the first)
                    PUSHSP:     0x0200,     // the SP register is potentially being referenced by a PUSH SP opcode, adjustment may be required
                    DATASIZE:   0x1000,     // data size override
                    ADDRSIZE:   0x2000      // address size override
                },
                /*
                 * Bit values for intFlags
                 */
                INTFLAG: {
                    NONE:       0x00,
                    INTR:       0x01,       // h/w interrupt requested
                    TRAP:       0x02,       // trap (INT 0x01) requested
                    HALT:       0x04,       // halt (HLT) requested
                    DMA:        0x08        // async DMA operation in progress
                },
                /*
                 * Common opcodes (and/or any opcodes we need to refer to explicitly)
                 */
                OPCODE: {
                    ES:         0x26,       // opES()
                    CS:         0x2E,       // opCS()
                    SS:         0x36,       // opSS()
                    DS:         0x3E,       // opDS()
                    PUSHSP:     0x54,       // opPUSHSP()
                    PUSHA:      0x60,       // opPUHSA()    (80186 and up)
                    POPA:       0x61,       // opPOPA()     (80186 and up)
                    BOUND:      0x62,       // opBOUND()    (80186 and up)
                    ARPL:       0x63,       // opARPL()     (80286 and up)
                    FS:         0x64,       // opFS()       (80386 and up)
                    GS:         0x65,       // opGS()       (80386 and up)
                    OS:         0x66,       // opOS()       (80386 and up)
                    AS:         0x67,       // opAS()       (80386 and up)
                    PUSHN:      0x68,       // opPUSHn()    (80186 and up)
                    IMULN:      0x69,       // opIMULn()    (80186 and up)
                    PUSH8:      0x6A,       // opPUSH8()    (80186 and up)
                    IMUL8:      0x6B,       // opIMUL8()    (80186 and up)
                    INSB:       0x6C,       // opINSb()     (80186 and up)
                    INSW:       0x6D,       // opINSw()     (80186 and up)
                    OUTSB:      0x6E,       // opOUTSb()    (80186 and up)
                    OUTSW:      0x6F,       // opOUTSw()    (80186 and up)
                    ENTER:      0xC8,       // opENTER()    (80186 and up)
                    LEAVE:      0xC9,       // opLEAVE()    (80186 and up)
                    CALLF:      0x9A,       // opCALLF()
                    MOVSB:      0xA4,       // opMOVSb()
                    MOVSW:      0xA5,       // opMOVSw()
                    CMPSB:      0xA6,       // opCMPSb()
                    CMPSW:      0xA7,       // opCMPSw()
                    STOSB:      0xAA,       // opSTOSb()
                    STOSW:      0xAB,       // opSTOSw()
                    LODSB:      0xAC,       // opLODSb()
                    LODSW:      0xAD,       // opLODSw()
                    SCASB:      0xAE,       // opSCASb()
                    SCASW:      0xAF,       // opSCASw()
                    INT3:       0xCC,       // opINT3()
                    INTn:       0xCD,       // opINTn()
                    INTO:       0xCE,       // opINTO()
                    LOOPNZ:     0xE0,       // opLOOPNZ()
                    LOOPZ:      0xE1,       // opLOOPZ()
                    LOOP:       0xE2,       // opLOOP()
                    CALL:       0xE8,       // opCALL()
                    JMP:        0xE9,       // opJMP()      (2-byte displacement)
                    JMPF:       0xEA,       // opJMPF()
                    JMPS:       0xEB,       // opJMPs()     (1-byte displacement)
                    LOCK:       0xF0,       // opLOCK()
                    REPNZ:      0xF2,       // opREPNZ()
                    REPZ:       0xF3,       // opREPZ()
                    GRP4W:      0xFF,
                    CALLW:      0x10FF,     // GRP4W: fnCALLw()
                    CALLFDW:    0x18FF,     // GRP4W: fnCALLFdw()
                    CALLMASK:   0x38FF,     // mask 2-byte GRP4W opcodes with this before comparing to CALLW or CALLFDW
                    UD2:        0x0B0F      // UD2 (invalid opcode "guaranteed" to generate UD_FAULT on all post-8086 processors)
                }
            };
            
            /*
             * BACKTRACK-related definitions (used only if BACKTRACK is defined)
             */
            X86.BACKTRACK = {
                SP_LO:  0,
                SP_HI:  0
            };
            
            /*
             * These PS flags are always stored directly in regPS for the 8086/8088, hence the
             * "direct" designation; other processors must adjust these bits accordingly.  The final
             * adjusted value is stored in PS_DIRECT.
             */
            X86.PS_DIRECT_8086 = (X86.PS.TF | X86.PS.IF | X86.PS.DF);
            
            /*
             * These are the default "always set" PS bits for the 8086/8088; other processors must
             * adjust these bits accordingly.  The final adjusted value is stored in PS_SET.
             */
            X86.PS_SET_8086 = (X86.PS.BIT1 | X86.PS.IOPL.MASK | X86.PS.NT | X86.PS.BIT15);
            
            /*
             * These PS arithmetic and logical flags may be "cached" across several result registers;
             * whether or not they're currently cached depends on the RESULT bits in resultType.
             */
            X86.PS_CACHED = (X86.PS.CF | X86.PS.PF | X86.PS.AF | X86.PS.ZF | X86.PS.SF | X86.PS.OF);
            
            /*
             * PS_SAHF is a subset of the arithmetic flags, and refers only to those flags that the
             * SAHF and LAHF "8080 legacy" opcodes affect.
             */
            X86.PS_SAHF = (X86.PS.CF | X86.PS.PF | X86.PS.AF | X86.PS.ZF | X86.PS.SF);
            
            /*
             * Before we zero opFlags, we first see if any of the following PREFIX bits were set.  If any were set,
             * they are OR'ed into opPrefixes; otherwise, opPrefixes is zeroed as well.  This gives prefix-conscious
             * instructions like LODS, MOVS, STOS, CMPS, etc, a way of determining which prefixes, if any, immediately
             * preceded them.
             */
            X86.OPFLAG_PREFIXES = (X86.OPFLAG.SEG | X86.OPFLAG.LOCK | X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ | X86.OPFLAG.DATASIZE | X86.OPFLAG.ADDRSIZE);
            
            if (typeof module !== 'undefined') module.exports = X86;
            
          • x86cpu.js
            /**
             * @fileoverview Implements PCjs 8086/8088 CPU logic.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var web         = require("../../shared/lib/weblib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var Bus         = require("./bus");
                var Memory      = require("./memory");
                var State       = require("./state");
                var CPU         = require("./cpu");
                var X86         = require("./x86");
                var X86Seg      = require("./x86seg");
            }
            
            if (!I386) {
                /*
                 * These are the original ModRM decoders, which were simpler and faster because they could treat all
                 * word instructions as 16-bit, assume bits 15-31 of all registers were always zero, and use masking
                 * constants instead of variables.  If I386 is enabled, these decoders are not used, and the compiler
                 * will eliminate them from the compiled code.
                 */
                if (typeof module !== 'undefined') {
                    var X86ModB     = require("./x86modb");
                    var X86ModW     = require("./x86modw");
                }
            } else {
                /*
                 * These are the more general-purpose ModRM decoders, required for I386 suppport.  The current addressing
                 * mode (16-bit or 32-bit) dynamically selects the appropriate byte and word decoders.
                 */
                if (typeof module !== 'undefined') {
                    var X86ModB16   = require("./x86modb16");
                    var X86ModW16   = require("./x86modw16");
                    var X86ModB32   = require("./x86modb32");
                    var X86ModW32   = require("./x86modw32");
                    var X86ModSIB   = require("./x86modsib");
                }
            }
            
            /**
             * X86CPU(parmsCPU)
             *
             * The X86CPU class uses the following (parmsCPU) properties:
             *
             *      model: a number (eg, 8088) that should match one of the X86.MODEL values
             *
             * This extends the CPU class and passes any remaining parmsCPU properties to the CPU class
             * constructor, along with a default speed (cycles per second) based on the specified (or default)
             * CPU model number.
             *
             * The X86CPU class was initially written to simulate a 8086/8088 microprocessor, although over time
             * it has evolved to support later microprocessors (eg, the 80186/80188 and the 80286, including
             * protected-mode support).
             *
             * This is a logical simulation, not a physical simulation, and performance is critical, second only
             * to the accuracy of the simulation when running real-world x86 software.  Consequently, it takes a
             * few liberties with the operation of the simulated hardware, especially with regard to timings,
             * little-used features, etc.  We do make an effort to maintain accurate instruction cycle counts,
             * but there are many other obstacles (eg, prefetch queue, wait states) to achieving perfect timings.
             *
             * For example, our 8237 DMA controller performs all DMA transfers immediately, since internally
             * they are all memory-to-memory, and attempting to interleave DMA cycles with instruction execution
             * cycles would hurt overall performance.  Similarly, 8254 timer counters are updated only on-demand.
             *
             * The 8237 and 8254, along with the 8259 interrupt controller and several other "chips", are combined
             * into a single ChipSet component, to keep the number of components we juggle to a minimum.
             *
             * All that being said, this does not change the overall goal: to produce as accurate a simulation as
             * possible, within the limits of what JavaScript allows and how precisely/predictably it behaves.
             *
             * @constructor
             * @extends CPU
             * @param {Object} parmsCPU
             */
            function X86CPU(parmsCPU)
            {
                this.model = parmsCPU['model'] || X86.MODEL_8088;
            
                var nCyclesDefault = 0;
                switch(this.model) {
                case X86.MODEL_8088:
                default:
                    nCyclesDefault = 4772727;
                    break;
                case X86.MODEL_80286:
                    nCyclesDefault = 6000000;
                    break;
                case X86.MODEL_80386:
                    nCyclesDefault = 16000000;
                    break;
                }
            
                CPU.call(this, parmsCPU, nCyclesDefault);
            
                /*
                 * Initialize processor operation to match the requested model
                 */
                this.initProcessor();
            
                /*
                 * List of software interrupt notification functions: aIntNotify is an array, indexed by
                 * interrupt number, of 2-element sub-arrays that, in turn, contain:
                 *
                 *      [0]: registered component
                 *      [1]: registered function to call for every software interrupt
                 *
                 * The registered function is called with the linear address (LIP) following the software interrupt;
                 * if any function returns false, the software interrupt will be skipped (presumed to be emulated),
                 * and no further notification functions will be called.
                 *
                 * NOTE: Registered functions are called only for "INT N" instructions -- NOT "INT 3" or "INTO" or the
                 * "INT 0x00" generated by a divide-by-zero or any other kind of interrupt (nor any interrupt simulated
                 * with "PUSHF/CALLF").
                 *
                 * aIntReturn is a hash of return address notifications set up by software interrupt notification
                 * functions that want to receive return notifications.  A software interrupt function must call
                 * cpu.addIntReturn(fn).
                 *
                 * WARNING: There's no mechanism in place to insure that software interrupt return notifications don't
                 * get "orphaned" if an interrupt handler bypasses the normal return path (INT 0x24 is one example of an
                 * "evil" software interrupt).
                 */
                this.aIntNotify = [];
                this.aIntReturn = [];
            
                /*
                 * Since aReturnNotify is a "sparse array", this global count gives the CPU a quick way of knowing whether
                 * or not RETF or IRET instructions need to bother calling checkIntReturn().
                 */
                this.cIntReturn = 0;
            
                /*
                 * A variety of stepCPU() state variables that don't strictly need to be initialized before the first
                 * stepCPU() call, but it's good form to do so.
                 */
                this.resetCycles();
                this.aFlags.fComplete = this.aFlags.fDebugCheck = false;
            
                /*
                 * If there are no live registers to display, then updateStatus() can skip a bit....
                 */
                this.cLiveRegs = 0;
            
                /*
                 * We're just declaring aMemBlocks and associated Bus parameters here; they'll be initialized by initMemory()
                 * when the Bus is initialized.
                 */
                this.aBusBlocks = this.aMemBlocks = [];
                this.nBusMask = this.nMemMask = 0;
                this.nBlockShift = this.nBlockSize = this.nBlockLimit = this.nBlockTotal = this.nBlockMask = 0;
            
                if (SAMPLER) {
                    /*
                     * For now, we're just going to sample LIP values (well, LIP + cycle count)
                     */
                    this.nSamples = 50000;
                    this.nSampleFreq = 1000;
                    this.nSampleSkip = 0;
                    this.aSamples = new Array(this.nSamples);
                    for (var i = 0; i < this.nSamples; i++) this.aSamples[i] = -1;
                    this.iSampleNext = 0;
                    this.iSampleFreq = 0;
                    this.iSampleSkip = 0;
                }
            
                /*
                 * This initial resetRegs() call is important to create all the registers (eg, the X86Seg registers),
                 * so that if/when we call restore(), it will have something to fill in.
                 */
                this.resetRegs();
            }
            
            Component.subclass(X86CPU, CPU);
            
            X86CPU.CYCLES_8088 = {
                nWordCyclePenalty:          4,      // NOTE: accurate for the 8088/80188 only (on the 8086/80186, it applies to odd addresses only)
                nEACyclesBase:              5,      // base or index only (BX, BP, SI or DI)
                nEACyclesDisp:              6,      // displacement only
                nEACyclesBaseIndex:         7,      // base + index (BP+DI and BX+SI)
                nEACyclesBaseIndexExtra:    8,      // base + index (BP+SI and BX+DI require an extra cycle)
                nEACyclesBaseDisp:          9,      // base or index + displacement
                nEACyclesBaseIndexDisp:     11,     // base + index + displacement (BP+DI+n and BX+SI+n)
                nEACyclesBaseIndexDispExtra:12,     // base + index + displacement (BP+SI+n and BX+DI+n require an extra cycle)
                nOpCyclesAAA:               4,      // AAA, AAS, DAA, DAS, TEST acc,imm
                nOpCyclesAAD:               60,
                nOpCyclesAAM:               83,
                nOpCyclesArithRR:           3,      // ADC, ADD, AND, OR, SBB, SUB, XOR and CMP reg,reg cycle time
                nOpCyclesArithRM:           9,      // ADC, ADD, AND, OR, SBB, SUB, and XOR reg,mem (and CMP mem,reg) cycle time
                nOpCyclesArithMR:           16,     // ADC, ADD, AND, OR, SBB, SUB, and XOR mem,reg cycle time
                nOpCyclesArithMID:          1,      // ADC, ADD, AND, OR, SBB, SUB, XOR and CMP mem,imm cycle delta
                nOpCyclesCall:              19,
                nOpCyclesCallF:             28,
                nOpCyclesCallWR:            16,
                nOpCyclesCallWM:            21,
                nOpCyclesCallDM:            37,
                nOpCyclesCLI:               2,
                nOpCyclesCompareRM:         9,      // CMP reg,mem cycle time (same as nOpCyclesArithRM on an 8086 but not on a 80286)
                nOpCyclesCWD:               5,
                nOpCyclesBound:             33,     // N/A if 8086/8088, 33-35 if 80186/80188 (TODO: Determine what the range means for an 80186/80188)
                nOpCyclesInP:               10,
                nOpCyclesInDX:              8,
                nOpCyclesIncR:              3,      // INC reg, DEC reg
                nOpCyclesIncM:              15,     // INC mem, DEC mem
                nOpCyclesInt:               51,
                nOpCyclesInt3D:             1,
                nOpCyclesIntOD:             2,
                nOpCyclesIntOFall:          4,
                nOpCyclesIRet:              32,
                nOpCyclesJmp:               15,
                nOpCyclesJmpF:              15,
                nOpCyclesJmpC:              16,
                nOpCyclesJmpCFall:          4,
                nOpCyclesJmpWR:             11,
                nOpCyclesJmpWM:             18,
                nOpCyclesJmpDM:             24,
                nOpCyclesLAHF:              4,      // LAHF, SAHF, MOV reg,imm
                nOpCyclesLEA:               2,
                nOpCyclesLS:                16,     // LDS, LES
                nOpCyclesLoop:              17,     // LOOP, LOOPNZ
                nOpCyclesLoopZ:             18,     // LOOPZ, JCXZ
                nOpCyclesLoopNZ:            19,     // LOOPNZ
                nOpCyclesLoopFall:          5,      // LOOP
                nOpCyclesLoopZFall:         6,      // LOOPZ, JCXZ
                nOpCyclesMovRR:             2,
                nOpCyclesMovRM:             8,
                nOpCyclesMovMR:             9,
                nOpCyclesMovRI:             10,
                nOpCyclesMovMI:             10,
                nOpCyclesMovAM:             10,
                nOpCyclesMovMA:             10,
                nOpCyclesDivBR:             80,     // range of 80-90
                nOpCyclesDivWR:             144,    // range of 144-162
                nOpCyclesDivBM:             86,     // range of 86-96
                nOpCyclesDivWM:             154,    // range of 154-172
                nOpCyclesIDivBR:            101,    // range of 101-112
                nOpCyclesIDivWR:            165,    // range of 165-184
                nOpCyclesIDivBM:            107,    // range of 107-118
                nOpCyclesIDivWM:            171,    // range of 171-190
                nOpCyclesMulBR:             70,     // range of 70-77
                nOpCyclesMulWR:             113,    // range of 113-118
                nOpCyclesMulBM:             76,     // range of 76-83
                nOpCyclesMulWM:             124,    // range of 124-139
                nOpCyclesIMulBR:            80,     // range of 80-98
                nOpCyclesIMulWR:            128,    // range of 128-154
                nOpCyclesIMulBM:            86,     // range of 86-104
                nOpCyclesIMulWM:            134,    // range of 134-160
                nOpCyclesNegR:              3,      // NEG reg, NOT reg
                nOpCyclesNegM:              16,     // NEG mem, NOT mem
                nOpCyclesOutP:              10,
                nOpCyclesOutDX:             8,
                nOpCyclesPopAll:            51,     // N/A if 8086/8088, 51 if 80186, 83 if 80188 (TODO: Verify)
                nOpCyclesPopReg:            8,
                nOpCyclesPopMem:            17,
                nOpCyclesPushAll:           36,     // N/A if 8086/8088, 36 if 80186, 68 if 80188 (TODO: Verify)
                nOpCyclesPushReg:           11,     // NOTE: "The 8086 Book" claims this is 10, but it's an outlier....
                nOpCyclesPushMem:           16,
                nOpCyclesPushSeg:           10,
                nOpCyclesPrefix:            2,
                nOpCyclesCmpS:              18,
                nOpCyclesCmpSr0:            9-2,    // reduced by nOpCyclesPrefix
                nOpCyclesCmpSrn:            17-2,   // reduced by nOpCyclesPrefix
                nOpCyclesLodS:              12,
                nOpCyclesLodSr0:            9-2,    // reduced by nOpCyclesPrefix
                nOpCyclesLodSrn:            13-2,   // reduced by nOpCyclesPrefix
                nOpCyclesMovS:              18,
                nOpCyclesMovSr0:            9-2,    // reduced by nOpCyclesPrefix
                nOpCyclesMovSrn:            17-2,   // reduced by nOpCyclesPrefix
                nOpCyclesScaS:              15,
                nOpCyclesScaSr0:            9-2,    // reduced by nOpCyclesPrefix
                nOpCyclesScaSrn:            15-2,   // reduced by nOpCyclesPrefix
                nOpCyclesStoS:              11,
                nOpCyclesStoSr0:            9-2,    // reduced by nOpCyclesPrefix
                nOpCyclesStoSrn:            10-2,   // reduced by nOpCyclesPrefix
                nOpCyclesRet:               8,
                nOpCyclesRetn:              12,
                nOpCyclesRetF:              18,
                nOpCyclesRetFn:             17,
                nOpCyclesShift1M:           15,     // ROL/ROR/RCL/RCR/SHL/SHR/SAR reg,1
                nOpCyclesShiftCR:           8,      // ROL/ROR/RCL/RCR/SHL/SHR/SAR reg,CL
                nOpCyclesShiftCM:           20,     // ROL/ROR/RCL/RCR/SHL/SHR/SAR mem,CL
                nOpCyclesShiftCS:           2,      // this is the left-shift value used to convert the count to the cycle cost
                nOpCyclesTestRR:            3,
                nOpCyclesTestRM:            9,
                nOpCyclesTestRI:            5,
                nOpCyclesTestMI:            11,
                nOpCyclesXchgRR:            4,
                nOpCyclesXchgRM:            17,
                nOpCyclesXLAT:              11
            };
            
            X86CPU.CYCLES_80286 = {
                nWordCyclePenalty:          0,
                nEACyclesBase:              0,
                nEACyclesDisp:              0,
                nEACyclesBaseIndex:         0,
                nEACyclesBaseIndexExtra:    0,
                nEACyclesBaseDisp:          0,
                nEACyclesBaseIndexDisp:     1,
                nEACyclesBaseIndexDispExtra:1,
                nOpCyclesAAA:               3,
                nOpCyclesAAD:               14,
                nOpCyclesAAM:               16,
                nOpCyclesArithRR:           2,
                nOpCyclesArithRM:           7,
                nOpCyclesArithMR:           7,
                nOpCyclesArithMID:          0,
                nOpCyclesCall:              7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallF:             13,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallWR:            7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallWM:            11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallDM:            16,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCLI:               3,
                nOpCyclesCompareRM:         6,
                nOpCyclesCWD:               2,
                nOpCyclesBound:             13,
                nOpCyclesInP:               5,
                nOpCyclesInDX:              5,
                nOpCyclesIncR:              2,
                nOpCyclesIncM:              7,
                nOpCyclesInt:               23,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesInt3D:             0,
                nOpCyclesIntOD:             1,
                nOpCyclesIntOFall:          3,
                nOpCyclesIRet:              17,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmp:               7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpF:              11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpC:              7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpCFall:          3,
                nOpCyclesJmpWR:             7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpWM:             11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpDM:             15,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLAHF:              2,
                nOpCyclesLEA:               3,
                nOpCyclesLS:                7,
                nOpCyclesLoop:              8,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLoopZ:             8,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLoopNZ:            8,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLoopFall:          4,
                nOpCyclesLoopZFall:         4,
                nOpCyclesMovRR:             2,      // this is actually the same as the 8086...
                nOpCyclesMovRM:             3,
                nOpCyclesMovMR:             5,
                nOpCyclesMovRI:             2,
                nOpCyclesMovMI:             3,
                nOpCyclesMovAM:             5,      // this is actually slower than the MOD/RM form of MOV AX,mem (see nOpCyclesMovRM)
                nOpCyclesMovMA:             3,
                nOpCyclesDivBR:             14,
                nOpCyclesDivWR:             22,
                nOpCyclesDivBM:             17,
                nOpCyclesDivWM:             25,
                nOpCyclesIDivBR:            17,
                nOpCyclesIDivWR:            25,
                nOpCyclesIDivBM:            20,
                nOpCyclesIDivWM:            28,
                nOpCyclesMulBR:             13,
                nOpCyclesMulWR:             21,
                nOpCyclesMulBM:             16,
                nOpCyclesMulWM:             24,
                nOpCyclesIMulBR:            13,
                nOpCyclesIMulWR:            21,
                nOpCyclesIMulBM:            16,
                nOpCyclesIMulWM:            24,
                nOpCyclesNegR:              2,
                nOpCyclesNegM:              7,
                nOpCyclesOutP:              5,
                nOpCyclesOutDX:             5,
                nOpCyclesPopAll:            19,
                nOpCyclesPopReg:            5,
                nOpCyclesPopMem:            5,
                nOpCyclesPushAll:           17,
                nOpCyclesPushReg:           3,
                nOpCyclesPushMem:           5,
                nOpCyclesPushSeg:           3,
                nOpCyclesPrefix:            0,
                nOpCyclesCmpS:              8,
                nOpCyclesCmpSr0:            5,
                nOpCyclesCmpSrn:            9,
                nOpCyclesLodS:              5,
                nOpCyclesLodSr0:            5,
                nOpCyclesLodSrn:            4,
                nOpCyclesMovS:              5,
                nOpCyclesMovSr0:            5,
                nOpCyclesMovSrn:            4,
                nOpCyclesScaS:              7,
                nOpCyclesScaSr0:            5,
                nOpCyclesScaSrn:            8,
                nOpCyclesStoS:              3,
                nOpCyclesStoSr0:            4,
                nOpCyclesStoSrn:            3,
                nOpCyclesRet:               11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesRetn:              11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesRetF:              15,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesRetFn:             15,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesShift1M:           7,
                nOpCyclesShiftCR:           5,
                nOpCyclesShiftCM:           8,
                nOpCyclesShiftCS:           0,
                nOpCyclesTestRR:            2,
                nOpCyclesTestRM:            6,
                nOpCyclesTestRI:            3,
                nOpCyclesTestMI:            6,
                nOpCyclesXchgRR:            3,
                nOpCyclesXchgRM:            5,
                nOpCyclesXLAT:              5
            };
            
            /*
             * TODO: Except for the cycle counts at the end of this table (ie, those marked "unique to the 80386"), all these
             * values were simply copied from the 80286 table and still need to be modified and verified.
             */
            X86CPU.CYCLES_80386 = {
                nWordCyclePenalty:          0,
                nEACyclesBase:              0,
                nEACyclesDisp:              0,
                nEACyclesBaseIndex:         0,
                nEACyclesBaseIndexExtra:    0,
                nEACyclesBaseDisp:          0,
                nEACyclesBaseIndexDisp:     1,
                nEACyclesBaseIndexDispExtra:1,
                nOpCyclesAAA:               3,
                nOpCyclesAAD:               14,
                nOpCyclesAAM:               16,
                nOpCyclesArithRR:           2,
                nOpCyclesArithRM:           7,
                nOpCyclesArithMR:           7,
                nOpCyclesArithMID:          0,
                nOpCyclesCall:              7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallF:             13,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallWR:            7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallWM:            11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCallDM:            16,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesCLI:               3,
                nOpCyclesCompareRM:         6,
                nOpCyclesCWD:               2,
                nOpCyclesBound:             13,
                nOpCyclesInP:               5,
                nOpCyclesInDX:              5,
                nOpCyclesIncR:              2,
                nOpCyclesIncM:              7,
                nOpCyclesInt:               23,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesInt3D:             0,
                nOpCyclesIntOD:             1,
                nOpCyclesIntOFall:          3,
                nOpCyclesIRet:              17,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmp:               7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpF:              11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpC:              7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpCFall:          3,
                nOpCyclesJmpWR:             7,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpWM:             11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesJmpDM:             15,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLAHF:              2,
                nOpCyclesLEA:               3,
                nOpCyclesLS:                7,
                nOpCyclesLoop:              8,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLoopZ:             8,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLoopNZ:            8,      // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesLoopFall:          4,
                nOpCyclesLoopZFall:         4,
                nOpCyclesMovRR:             2,      // this is actually the same as the 8086...
                nOpCyclesMovRM:             3,
                nOpCyclesMovMR:             5,
                nOpCyclesMovRI:             2,
                nOpCyclesMovMI:             3,
                nOpCyclesMovAM:             5,      // this is actually slower than the MOD/RM form of MOV AX,mem (see nOpCyclesMovRM)
                nOpCyclesMovMA:             3,
                nOpCyclesDivBR:             14,
                nOpCyclesDivWR:             22,
                nOpCyclesDivBM:             17,
                nOpCyclesDivWM:             25,
                nOpCyclesIDivBR:            17,
                nOpCyclesIDivWR:            25,
                nOpCyclesIDivBM:            20,
                nOpCyclesIDivWM:            28,
                nOpCyclesMulBR:             13,
                nOpCyclesMulWR:             21,
                nOpCyclesMulBM:             16,
                nOpCyclesMulWM:             24,
                nOpCyclesIMulBR:            13,
                nOpCyclesIMulWR:            21,
                nOpCyclesIMulBM:            16,
                nOpCyclesIMulWM:            24,
                nOpCyclesNegR:              2,
                nOpCyclesNegM:              7,
                nOpCyclesOutP:              5,
                nOpCyclesOutDX:             5,
                nOpCyclesPopAll:            19,
                nOpCyclesPopReg:            5,
                nOpCyclesPopMem:            5,
                nOpCyclesPushAll:           17,
                nOpCyclesPushReg:           3,
                nOpCyclesPushMem:           5,
                nOpCyclesPushSeg:           3,
                nOpCyclesPrefix:            0,
                nOpCyclesCmpS:              8,
                nOpCyclesCmpSr0:            5,
                nOpCyclesCmpSrn:            9,
                nOpCyclesLodS:              5,
                nOpCyclesLodSr0:            5,
                nOpCyclesLodSrn:            4,
                nOpCyclesMovS:              5,
                nOpCyclesMovSr0:            5,
                nOpCyclesMovSrn:            4,
                nOpCyclesScaS:              7,
                nOpCyclesScaSr0:            5,
                nOpCyclesScaSrn:            8,
                nOpCyclesStoS:              3,
                nOpCyclesStoSr0:            4,
                nOpCyclesStoSrn:            3,
                nOpCyclesRet:               11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesRetn:              11,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesRetF:              15,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesRetFn:             15,     // on the 80286, this ALSO includes the number of bytes in the target instruction
                nOpCyclesShift1M:           7,
                nOpCyclesShiftCR:           5,
                nOpCyclesShiftCM:           8,
                nOpCyclesShiftCS:           0,
                nOpCyclesTestRR:            2,
                nOpCyclesTestRM:            6,
                nOpCyclesTestRI:            3,
                nOpCyclesTestMI:            6,
                nOpCyclesXchgRR:            3,
                nOpCyclesXchgRM:            5,
                nOpCyclesXLAT:              5,
                /*
                 * Cycle counts unique to the 80386
                 */
                nOpCyclesBitScan:           11,
                nOpCyclesBitSetR:           6,
                nOpCyclesBitSetM:           8,
                nOpCyclesBitSetMExtra:      5,      // extra cycle cost for non-immediate BTC/BTR/BTS opcodes
                nOpCyclesBitTestR:          3,
                nOpCyclesBitTestM:          6,
                nOpCyclesBitTestMExtra:     6,      // extra cycle cost for non-immediate BT opcode
                nOpCyclesIMulR:             9,
                nOpCyclesIMulM:             12,
                nOpCyclesMovXR:             3,
                nOpCyclesMovXM:             6,
                nOpCyclesSetR:              4,
                nOpCyclesSetM:              5,
                nOpCyclesShiftDR:           3,
                nOpCyclesShiftDM:           7
            };
            
            /**
             * Memory Simulation Notes
             *
             * Memory accesses are currently hard-coded to simulate 8088 characteristics.
             * For example, every 16-bit memory access is assumed to require an additional 4 cycles
             * for the upper byte; on an 8086, that would be true only when the memory address was odd.
             *
             * Similarly, the effective prefetch queue size is 4 bytes (same as an 8088), although
             * that can easily be changed to 6 bytes if/when we decide to fully implement 8086 support
             * (see X86CPU.PREFETCH.QUEUE).  It's just not clear whether that support will be a goal.
             */
            X86CPU.PREFETCH = {
                QUEUE:      4,
                ARRAY:      8,              // smallest power-of-two > PREFETCH.QUEUE
                MASK:       0x7             // (X86CPU.PREFETCH.ARRAY - 1)
            };
            
            /**
             * initMemory(aMemBlocks, nBlockShift)
             *
             * Notification from Bus.initMemory(), giving us direct access to the entire memory space
             * (aMemBlocks).
             *
             * We also initialize an instruction byte prefetch queue, aPrefetch, which is an N-element
             * array with slots that look like:
             *
             *      0:  [tag, b]    <-- iPrefetchTail
             *      1:  [tag, b]
             *      2:  [ -1, 0]    <-- iPrefetchHead  (eg, when cbPrefetchQueued == 2)
             *      ...
             *      7:  [ -1, 0]
             *
             * where tag is the linear address of the byte that's been prefetched, and b is the
             * value of the byte.  N is currently 8 (PREFETCH.ARRAY), but it can be any power-of-two
             * that is equal to or greater than (PREFETCH.QUEUE), the effective size of the prefetch
             * queue (6 on an 8086, 4 on an 8088; currently hard-coded to the latter).  All slots
             * are initialized to [-1, 0] when preallocating the prefetch queue, but those initial
             * values are quickly overwritten and never seen again.
             *
             * iPrefetchTail is the index (0-7) of the next prefetched byte to be returned to the CPU,
             * and iPrefetchHead is the index (0-7) of the next slot to be filled.  The prefetch queue
             * is empty IFF the two indexes are equal and IFF cbPrefetchQueued is zero. cbPrefetchQueued
             * is simply the number of bytes between the tail and the head (from 0 to PREFETCH.QUEUE).
             *
             * cbPrefetchValid indicates how many bytes behind iPrefetchHead are still valid, allowing us
             * to "rewind" the tail up to that many bytes.  For example, let's imagine that we prefetched
             * 2 bytes, and then we immediately consumed both bytes, leaving iPrefetchTail == iPrefetchHead
             * again; however, those previous 2 bytes are still valid, and if, for example, we wanted to
             * rewind the IP by 2 (which we might want to do in the case of a repeated string instruction),
             * we could rewind the prefetch queue tail as well.
             *
             * Corresponding to iPrefetchHead is addrPrefetchHead; both are incremented in lock-step.
             * Whenever the prefetch queue is flushed, it's typically because a new, non-incremental
             * regLIP has been set, so flushPrefetch() expects to receive that address.
             *
             * If the prefetch queue does not contain any (or enough) bytes to satisfy a getBytePrefetch()
             * or getShortPrefetch() request, we force the queue to be filled with the necessary number
             * of bytes first.
             *
             * @this {X86CPU}
             * @param {Array} aMemBlocks
             * @param {number} nBlockShift
             */
            X86CPU.prototype.initMemory = function(aMemBlocks, nBlockShift)
            {
                /*
                 * aBusBlocks preserves the Bus block array for the life of the machine, whereas aMemBlocks
                 * will be altered if/when the CPU enables paging.  PAGEBLOCKS must be true when using Memory
                 * blocks to simulate paging, ensuring that physical blocks and pages have the same size (4Kb).
                 */
                this.aBusBlocks = aMemBlocks;
                this.aMemBlocks = aMemBlocks;
                this.nBlockShift = nBlockShift;
                this.nBlockSize = 1 << this.nBlockShift;
                this.nBlockLimit = this.nBlockSize - 1;
                this.nBlockTotal = aMemBlocks.length;
                this.nBlockMask = this.nBlockTotal - 1;
                if (PREFETCH) {
                    this.nBusCycles = 0;
                    this.aPrefetch = new Array(X86CPU.PREFETCH.ARRAY);
                    for (var i = 0; i < X86CPU.PREFETCH.ARRAY; i++) {
                        this.aPrefetch[i] = 0;
                    }
                    this.flushPrefetch(0);
                }
            };
            
            /**
             * setAddressMask(nBusMask)
             *
             * Notification from Bus.initMemory() and Bus.setA20(); the latter calls us whenever the physical
             * A20 line changes (note that on a 20-bit bus machine, address lines A20 and higher are always zero).
             *
             * For 32-bit bus machines (eg, 80386), nBusMask is never changed after the initial call, because A20
             * wrap-around is simulated by changing the physical memory map rather than altering the A20 bit in nBusMask.
             *
             * We maintain nMemMask separate from nBusMask, because when paging is enabled on the 80386, the CPU memory
             * functions are now dealing with linear addresses rather than physical addresses, so it would be incorrect
             * to apply nBusMask to those addresses; nMemMask must remain 0xffffffff (-1) for the duration.  If we change
             * how A20 is simulated on the 80386, then enablePageBlocks() and disablePageBlocks() will need to override
             * nMemMask appropriately.
             *
             * TODO: Ideally, we would eliminate masking altogether of 32-bit addresses, but that would require different
             * sets of memory access functions for different machines (ie, those with 20-bit or 24-bit buses).
             *
             * @this {X86CPU}
             * @param {number} nBusMask
             */
            X86CPU.prototype.setAddressMask = function(nBusMask)
            {
                this.nBusMask = this.nMemMask = nBusMask;
            };
            
            /**
             * enablePageBlocks()
             *
             * Whenever the CPU turns on paging and/or updates CR3, this function is called to update our copy
             * of the Bus block array, to simulate paging.  Whenever the CPU turns paging off, disablePageBlocks()
             * must be called to restore our copy of the Bus block array to its original (physical) mapping.
             *
             * This also requires PAGEBLOCKS be enabled, ensuring that the Bus is configured with a 4Kb block size.
             *
             * The first time this function is called, aMemBlocks and aBusBlocks are identical, so aMemBlocks is
             * reinitialized with special UNPAGED Memory blocks that know how to perform page directory/page table
             * lookup and replace themselves with special PAGED Memory blocks that reference memory from the
             * appropriate block in aBusBlocks.  A parallel array, aBlocksPaged, keeps track (by block number) of
             * which blocks have been PAGED, so that whenever CR3 is updated, those blocks can be quickly UNPAGED.
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.enablePageBlocks = function()
            {
                if (!PAGEBLOCKS) {
                    this.setError("PAGEBLOCK support required");
                    return;
                }
                if (this.aMemBlocks === this.aBusBlocks) {
                    this.aMemBlocks = new Array(this.nBlockTotal);
                    this.blockUnpaged = new Memory(null, 0, 0, Memory.TYPE.UNPAGED, null, this);
                    for (var iBlock = 0; iBlock < this.nBlockTotal; iBlock++) {
                        this.aMemBlocks[iBlock] = this.blockUnpaged;
                    }
                } else {
                    for (var i = 0; i < this.aBlocksPaged.length; i++) {
                        this.aMemBlocks[this.aBlocksPaged[i]] = this.blockUnpaged;
                    }
                }
                this.aBlocksPaged = [];
            };
            
            /**
             * mapPageBlock(addr, fWrite)
             *
             * Locate the corresponding physical PDE, PTE and memory blocks for the given linear address, and then
             * upgrade the block from an UNPAGED Memory block to a new PAGED Memory block; all future accesses to
             * the current page will go directly to that block, instead of coming here through the UNPAGED block
             * handlers.
             *
             * Note that since the incoming address (addr) is a linear address, we never need to mask it with nBusMask,
             * but all the intermediate (PDE, PTE) and final physical addresses we calculate should still be masked.
             *
             * Granted, nBusMask on a 32-bit bus is generally going to be 0xffffffff (-1), so making might seem like
             * a waste of time; however, if we decide to once again rely on nBusMask for emulating A20 wrap-around
             * (instead of changing the physical memory map to alias the 2nd Mb to the 1st Mb), then performing
             * consistent masking will be important.
             *
             * Also, addrPDE, addrPTE and addrPhys do not need any offsets added to them, because we immediately shift
             * the offset portion of those addresses out.  But for now, at least for debugging and documentation purposes,
             * my preference is to perform full address calculations.
             *
             * Besides, this should not be a performance-critical function; it's normally called only once per UNPAGED
             * page.  Obviously, if CR3 is constantly being updated, that will trigger repeated calls to enablePageBlocks(),
             * which will perform our equivalent of a TLB flush (ie, resetting all PAGED blocks back to UNPAGED blocks).
             * That would hurt our performance, but it would hurt performance on a real machine as well, so let's see
             * what real-world scenarios we run into.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @param {boolean} fWrite (true if called for a write, false if for a read)
             * @param {boolean} [fSuppress] (true if any faults, remapping, etc should be suppressed)
             * @return {Memory|null}
             */
            X86CPU.prototype.mapPageBlock = function(addr, fWrite, fSuppress)
            {
                var offPDE = (addr & X86.LADDR.PDE.MASK) >>> X86.LADDR.PDE.SHIFT;
                var addrPDE = this.regCR3 + offPDE;
            
                /*
                 * bus.getLong(addrPDE) would be simpler, but setPhysBlock() needs to know blockPDE and offPDE, too.
                 * TODO: Since we're immediately shifting addrPDE by nBlockShift, then we could also skip adding offPDE.
                 */
                var blockPDE = this.aBusBlocks[(addrPDE & this.nBusMask) >>> this.nBlockShift];
                var pde = blockPDE.readLong(offPDE);
            
                if (!(pde & X86.PTE.PRESENT)) {
                    if (!fSuppress) X86.fnPageFault.call(this, addr, false, fWrite);
                    return null;
                }
            
                if (!(pde & X86.PTE.USER) && this.segCS.cpl == 3) {
                    if (!fSuppress) X86.fnPageFault.call(this, addr, true, fWrite);
                    return null;
                }
            
                var offPTE = (addr & X86.LADDR.PTE.MASK) >>> X86.LADDR.PTE.SHIFT;
                var addrPTE = (pde & X86.PTE.FRAME) + offPTE;
            
                /*
                 * bus.getLong(addrPTE) would be simpler, but setPhysBlock() needs to know blockPTE and offPTE, too.
                 * TODO: Since we're immediately shifting addrPDE by nBlockShift, then we could also skip adding offPTE.
                 */
                var blockPTE = this.aBusBlocks[(addrPTE & this.nBusMask) >>> this.nBlockShift];
                var pte = blockPTE.readLong(offPTE);
            
                if (!(pte & X86.PTE.PRESENT) && !fSuppress) {
                    if (!fSuppress) X86.fnPageFault.call(this, addr, false, fWrite);
                    return null;
                }
            
                if (!(pte & X86.PTE.USER) && this.segCS.cpl == 3) {
                    if (!fSuppress) X86.fnPageFault.call(this, addr, true, fWrite);
                    return null;
                }
            
                var addrPhys = (pte & X86.PTE.FRAME) + (addr & X86.LADDR.OFFSET);
                /*
                 * TODO: Since we're immediately shifting addrPhys by nBlockShift, we could also skip adding the addr's offset.
                 */
                var blockPhys = this.aBusBlocks[(addrPhys & this.nBusMask) >>> this.nBlockShift];
                if (fSuppress) return blockPhys;
            
                /*
                 * So we have the block containing the physical memory corresponding to the given linear address.
                 *
                 * Now we can create a new PAGED Memory block and record the physical block info using setPhysBlock().
                 */
                var addrPage = addr & ~X86.LADDR.OFFSET;
                var blockPage = new Memory(addrPage, 0, 0, Memory.TYPE.PAGED);
                blockPage.setPhysBlock(blockPhys, blockPDE, offPDE, blockPTE, offPTE);
            
                var iBlock = addr >>> this.nBlockShift;
                this.aMemBlocks[iBlock] = blockPage;
                this.aBlocksPaged.push(iBlock);
                return blockPage;
            };
            
            /**
             * disablePageBlocks()
             *
             * Whenever the CPU turns off paging, this function restores the CPU's original aMemBlocks.
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.disablePageBlocks = function()
            {
                if (this.aMemBlocks != this.aBusBlocks) {
                    this.aMemBlocks = this.aBusBlocks;
                    this.blockUnpaged = null;
                    this.aBlocksPaged = null;
                }
            };
            
            /**
             * initProcessor()
             *
             * This isolates 80186/80188/80286/80386 support, so that it can be selectively enabled/tested.
             *
             * Here's a summary of 80186/80188 differences according to "AP-186: Introduction to the 80186
             * Microprocessor, March 1983" (pp.55-56).  "The iAPX 86,88 and iAPX 186,188 User's Manual Programmer's
             * Reference", p.3-38, apparently contains the same information, but I've not seen that document.
             *
             * Undefined [Invalid] Opcodes:
             *
             *      When the opcodes 63H, 64H, 65H, 66H, 67H, F1H, FEH/xx111xxxB and FFH/xx111xxxB are executed,
             *      the 80186 will execute an illegal [invalid] instruction exception, interrupt 0x06.
             *      The 8086 will ignore the opcode.
             *
             * 0FH opcode:
             *
             *      When the opcode 0FH is encountered, the 8086 will execute a POP CS, while the 80186 will
             *      execute an illegal [invalid] instruction exception, interrupt 0x06.
             *
             * Word Write at Offset FFFFH:
             *
             *      When a word write is performed at offset FFFFH in a segment, the 8086 will write one byte
             *      at offset FFFFH, and the other at offset 0, while the 80186 will write one byte at offset
             *      FFFFH, and the other at offset 10000H (one byte beyond the end of the segment). One byte segment
             *      underflow will also occur (on the 80186) if a stack PUSH is executed and the Stack Pointer
             *      contains the value 1.
             *
             * Shift/Rotate by Value Greater Then [sic] 31:
             *
             *      Before the 80186 performs a shift or rotate by a value (either in the CL register, or by an
             *      immediate value) it ANDs the value with 1FH, limiting the number of bits rotated to less than 32.
             *      The 8086 does not do this.
             *
             * LOCK prefix:
             *
             *      The 8086 activates its LOCK signal immediately after executing the LOCK prefix. The 80186 does
             *      not activate the LOCK signal until the processor is ready to begin the data cycles associated
             *      with the LOCKed instruction.
             *
             * Interrupted String Move Instructions:
             *
             *      If an 8086 is interrupted during the execution of a repeated string move instruction, the return
             *      value it will push on the stack will point to the last prefix instruction before the string move
             *      instruction. If the instruction had more than one prefix (e.g., a segment override prefix in
             *      addition to the repeat prefix), it will not be re-executed upon returning from the interrupt.
             *      The 80186 will push the value of the first prefix to the repeated instruction, so long as prefixes
             *      are not repeated, allowing the string instruction to properly resume.
             *
             * Conditions causing divide error with an integer divide:
             *
             *      The 8086 will cause a divide error whenever the absolute value of the quotient is greater then
             *      [sic] 7FFFH (for word operations) or if the absolute value of the quotient is greater than 7FH
             *      (for byte operations). The 80186 has expanded the range of negative numbers allowed as a quotient
             *      by 1 to include 8000H and 80H. These numbers represent the most negative numbers representable
             *      using 2's complement arithmetic (equaling -32768 and -128 in decimal, respectively).
             *
             * ESC Opcode:
             *
             *      The 80186 may be programmed to cause an interrupt type 7 whenever an ESCape instruction (used for
             *      co-processors like the 8087) is executed. The 8086 has no such provision. Before the 80186 performs
             *      this trap, it must be programmed to do so. [The details of this "programming" are not included.]
             *
             * Here's a summary of 80286 differences according to "80286 and 80287 Programmer's Reference Manual",
             * Appendix C, p.C-1 (p.329):
             *
             *   1. Add Six Interrupt Vectors
             *
             *      The 80286 adds six interrupts which arise only if the 8086 program has a hidden bug. These interrupts
             *      occur only for instructions which were undefined on the 8086/8088 or if a segment wraparound is attempted.
             *      It is recommended that you add an interrupt handler to the 8086 software that is to be run on the 80286,
             *      which will treat these interrupts as invalid operations.
             *
             *      This additional software does not significantly effect the existing 8086 software because the interrupts
             *      do not normally occur and should not already have been used since they are in the interrupt group reserved
             *      by Intel. [Note to Intel: IBM caaaaaaan't hear you].
             *
             *   2. Do not Rely on 8086/8088 Instruction Clock Counts
             *
             *      The 80286 takes fewer clocks for most instructions than the 8086/8088. The areas to look into are delays
             *      between I/0 operations, and assumed delays in 8086/8088 operating in parallel with an 8087.
             *
             *   3. Divide Exceptions Point at the DIV Instruction
             *
             *      Any interrupt on the 80286 will always leave the saved CS:IP value pointing at the beginning of the
             *      instruction that failed (including prefixes). On the 8086, the CS:IP value saved for a divide exception
             *      points at the next instruction.
             *
             *   4. Use Interrupt 16 (0x10) for Numeric Exceptions
             *
             *      Any 80287 system must use interrupt vector 16 for the numeric error interrupt. If an 8086/8087 or 8088/8087
             *      system uses another vector for the 8087 interrupt, both vectors should point at the numeric error interrupt
             *      handler.
             *
             *   5. Numeric Exception Handlers Should allow Prefixes
             *
             *      The saved CS:IP value in the NPX environment save area will point at any leading prefixes before an ESC
             *      instruction. On 8086/8088 systems, this value points only at the ESC instruction.
             *
             *   6. Do Not Attempt Undefined 8086/8088 Operations
             *
             *      Instructions like POP CS or MOV CS,op will either cause exception 6 (undefined [invalid] opcode) or perform
             *      a protection setup operation like LIDT on the 80286. Undefined bit encodings for bits 5-3 of the second byte
             *      of POP MEM or PUSH MEM will cause exception 13 on the 80286.
             *
             *   7. Place a Far JMP Instruction at FFFF0H
             *
             *      After reset, CS:IP = F000:FFF0 on the 80286 (versus FFFF:0000 on the 8086/8088). This change was made to allow
             *      sufficient code space to enter protected mode without reloading CS. Placing a far JMP instruction at FFFF0H
             *      will avoid this difference. Note that the BOOTSTRAP option of LOC86 will automatically generate this jump
             *      instruction.
             *
             *   8. Do not Rely on the Value Written by PUSH SP
             *
             *      The 80286 will push a different value on the stack for PUSH SP than the 8086/8088. If the value pushed is
             *      important [and when would it NOT be???], replace PUSH SP instructions with the following three instructions:
             *
             *          PUSH    BP
             *          MOV     BP,SP
             *          XCHG    BP,[BP]
             *
             *      This code functions as the 8086/8088 PUSH SP instruction on the 80286.
             *
             *   9. Do not Shift or Rotate by More than 31 Bits
             *
             *      The 80286 masks all shift/rotate counts to the low 5 bits. This MOD 32 operation limits the count to a maximum
             *      of 31 bits. With this change, the longest shift/rotate instruction is 39 clocks. Without this change, the longest
             *      shift/rotate instruction would be 264 clocks, which delays interrupt response until the instruction completes
             *      execution.
             *
             *  10. Do not Duplicate Prefixes
             *
             *      The 80286 sets an instruction length limit of 10 bytes. The only way to violate this limit is by duplicating
             *      a prefix two or more times before an instruction. Exception 6 occurs if the instruction length limit is violated.
             *      The 8086/8088 has no instruction length limit.
             *
             *  11. Do not Rely on Odd 8086/8088 LOCK Characteristics
             *
             *      The LOCK prefix and its corresponding output signal should only be used to prevent other bus masters from
             *      interrupting a data movement operation. The 80286 will always assert LOCK during an XCHG instruction with memory
             *      (even if the LOCK prefix was not used). LOCK should only be used with the XCHG, MOV, MOVS, INS, and OUTS instructions.
             *
             *      The 80286 LOCK signal will not go active during an instruction prefetch.
             *
             *  12. Do not Single Step External Interrupt Handlers
             *
             *      The priority of the 80286 single step interrupt is different from that of the 8086/8088. This change was made
             *      to prevent an external interrupt from being single-stepped if it occurs while single stepping through a program.
             *      The 80286 single step interrupt has higher priority than any external interrupt.
             *
             *      The 80286 will still single step through an interrupt handler invoked by INT instructions or an instruction
             *      exception.
             *
             *  13. Do not Rely on IDIV Exceptions for Quotients of 80H or 8000H
             *
             *      The 80286 can generate the largest negative number as a quotient for IDIV instructions. The 8086 will instead
             *      cause exception O.
             *
             *  14. Do not Rely on NMI Interrupting NMI Handlers
             *
             *      After an NMI is recognized, the NMI input and processor extension limit error interrupt is masked until the
             *      first IRET instruction is executed.
             *
             *  15. The NPX error signal does not pass through an interrupt controller (an 8087 INT signal does). Any interrupt
             *      controller-oriented instructions for the 8087 may have to be deleted.
             *
             *  16. If any real-mode program relies on address space wrap-around (e.g., FFF0:0400=0000:0300), then external hardware
             *      should be used to force the upper 4 addresses to zero during real mode.
             *
             *  17. Do not use I/O ports 00F8-00FFH. These are reserved for controlling 80287 and future processor extensions.
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.initProcessor = function()
            {
                this.PS_SET = X86.PS_SET_8086;
                this.PS_DIRECT = X86.PS_DIRECT_8086;
            
                this.OPFLAG_NOINTR_8086 = X86.OPFLAG.NOINTR;
                this.nShiftCountMask = 0xff;            // on an 8086/8088, all shift counts are used as-is
            
                this.cycleCounts = (this.model == X86.MODEL_80386? X86CPU.CYCLES_80386 : (this.model == X86.MODEL_80286? X86CPU.CYCLES_80286 : X86CPU.CYCLES_8088));
            
                this.aOps     = X86.aOps;
                this.aOpGrp4b = X86.aOpGrp4b;
                this.aOpGrp4w = X86.aOpGrp4w;
                this.aOpGrp6  = X86.aOpGrp6Real;        // setProtMode() will ensure that aOpGrp6 is switched
            
                if (this.model >= X86.MODEL_80186) {
                    /*
                     * I don't go out of my way to make 80186/80188 cycle times accurate, since I'm not aware of any
                     * IBM PC models that used those processors; beyond the 8086, my next priorities are the 80286 and
                     * 80386, but I might revisit the 80186 someday.
                     *
                     * Instruction handlers that contain "hard-coded" 80286 cycle times include: opINSb, opINSw, opOUTSb,
                     * opOUTSw, opENTER, and opLEAVE.
                     */
                    this.aOps = X86.aOps.slice();       // make copies of aOps and others before modifying them
                    this.aOpGrp4b = X86.aOpGrp4b.slice();
                    this.aOpGrp4w = X86.aOpGrp4w.slice();
                    this.nShiftCountMask = 0x1f;        // on newer processors, all shift counts are MOD 32
                    this.aOps[0x0F]                 = X86.opInvalid;
                    this.aOps[X86.OPCODE.PUSHA]     = X86.opPUSHA;      // 0x60
                    this.aOps[X86.OPCODE.POPA]      = X86.opPOPA;       // 0x61
                    this.aOps[X86.OPCODE.BOUND]     = X86.opBOUND;      // 0x62
                    this.aOps[X86.OPCODE.ARPL]      = X86.opInvalid;    // 0x63
                    this.aOps[X86.OPCODE.FS]        = X86.opInvalid;    // 0x64
                    this.aOps[X86.OPCODE.GS]        = X86.opInvalid;    // 0x65
                    this.aOps[X86.OPCODE.OS]        = X86.opInvalid;    // 0x66
                    this.aOps[X86.OPCODE.AS]        = X86.opInvalid;    // 0x67
                    this.aOps[X86.OPCODE.PUSHN]     = X86.opPUSHn;      // 0x68
                    this.aOps[X86.OPCODE.IMULN]     = X86.opIMULn;      // 0x69
                    this.aOps[X86.OPCODE.PUSH8]     = X86.opPUSH8;      // 0x6A
                    this.aOps[X86.OPCODE.IMUL8]     = X86.opIMUL8;      // 0x6B
                    this.aOps[X86.OPCODE.INSB]      = X86.opINSb;       // 0x6C
                    this.aOps[X86.OPCODE.INSW]      = X86.opINSw;       // 0x6D
                    this.aOps[X86.OPCODE.OUTSB]     = X86.opOUTSb;      // 0x6E
                    this.aOps[X86.OPCODE.OUTSW]     = X86.opOUTSw;      // 0x6F
                    this.aOps[0xC0]                 = X86.opGRP2bn;     // 0xC0
                    this.aOps[0xC1]                 = X86.opGRP2wn;     // 0xC1
                    this.aOps[X86.OPCODE.ENTER]     = X86.opENTER;      // 0xC8
                    this.aOps[X86.OPCODE.LEAVE]     = X86.opLEAVE;      // 0xC9
                    this.aOps[0xF1]                 = X86.opINT1;       // 0xF1
                    this.aOpGrp4b[0x07]             = X86.fnGRPInvalid;
                    this.aOpGrp4w[0x07]             = X86.fnGRPInvalid;
            
                    if (this.model >= X86.MODEL_80286) {
            
                        this.PS_SET = X86.PS.BIT1;      // on the 80286, only BIT1 of Processor Status (flags) is always set
                        this.PS_DIRECT |= X86.PS.IOPL.MASK | X86.PS.NT;
            
                        this.OPFLAG_NOINTR_8086 = 0;    // used with instructions that should *not* set NOINTR on an 80286 (eg, non-SS segment loads)
            
                        this.aOps[0x0F] = X86.op0F;
                        this.aOps0F = X86.aOps0F.slice();
                        for (var i = 0; i < this.aOps0F.length; i++) {
                            if (!this.aOps0F[i]) this.aOps0F[i] = X86.opUndefined;
                        }
                        this.aOps[X86.OPCODE.PUSHSP] = X86.opPUSHSP;    // 0x54
                        this.aOps[X86.OPCODE.ARPL]   = X86.opARPL;      // 0x63
            
                        if (I386 && this.model >= X86.MODEL_80386) {
                            var bOpcode;
                            this.aOps[X86.OPCODE.FS] = X86.opFS;        // 0x64
                            this.aOps[X86.OPCODE.GS] = X86.opGS;        // 0x65
                            this.aOps[X86.OPCODE.OS] = X86.opOS;        // 0x66
                            this.aOps[X86.OPCODE.AS] = X86.opAS;        // 0x67
                            for (bOpcode in X86.aOps0F386) {
                                this.aOps0F[+bOpcode] = X86.aOps0F386[bOpcode];
                            }
                        }
                    }
                }
            };
            
            /**
             * reset()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.reset = function()
            {
                if (this.aFlags.fRunning) this.stopCPU();
                this.resetRegs();
                this.resetCycles();
                this.clearError();      // clear any fatal error/exception that setError() may have flagged
                if (SAMPLER) this.iSampleNext = this.iSampleFreq = this.iSampleSkip = 0;
            };
            
            /**
             * resetRegs()
             *
             * According to "The 8086 Book", p.7-5, a RESET signal initializes the following registers:
             *
             *      PS          =   0x0000 (which has the important side-effect of disabling interrupts and traps)
             *      IP          =   0x0000
             *      CS          =   0xFFFF
             *      DS/ES/SS    =   0x0000
             *
             * It is silent as to whether the remaining registers are initialized to any particular values.
             *
             * According to the "80286 and 80287 Programmer's Reference Manual", these 80286 registers are reset:
             *
             *      PS          =   0x0002
             *      MSW         =   0xFFF0
             *      IP          =   0xFFF0
             *      CS Selector =   0xF000      DS/ES/SS Selector =   0x0000
             *      CS Base     = 0xFF0000      DS/ES/SS Base     = 0x000000        IDT Base  = 0x000000
             *      CS Limit    =   0xFFFF      DS/ES/SS Limit    =   0xFFFF        IDT Limit =   0x03FF
             *
             * And from the "INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986", section 10.1:
             *
             *      The contents of EAX depend upon the results of the power-up self test. The self-test may be requested
             *      externally by assertion of BUSY# at the end of RESET. The EAX register holds zero if the 80386 passed
             *      the test. A nonzero value in EAX after self-test indicates that the particular 80386 unit is faulty.
             *      If the self-test is not requested, the contents of EAX after RESET is undefined.
             *
             *      DX holds a component identifier and revision number after RESET as Figure 10-1 illustrates. DH contains
             *      3, which indicates an 80386 component. DL contains a unique identifier of the revision level.
             *
             *      EFLAGS      =   0x00000002
             *      IP          =   0x0000FFF0
             *      CS selector =   0xF000 (base of 0xFFFF0000 and limit of 0xFFFF)
             *      DS selector =   0x0000
             *      ES selector =   0x0000
             *      SS selector =   0x0000
             *      FS selector =   0x0000
             *      GS selector =   0x0000
             *      IDTR        =   base of 0 and limit of 0x3FF
             *
             * All other 80386 registers are undefined after a reset (ie, Intel did not document how or if they are set).
             *
             * We've elected to set DX to 0x0304 on a reset, which is consistent with a 80386-C0, since we have no desire to
             * try to emulate all the bugs in older (eg, B1) steppings -- at least not initially.  We leave stepping-accurate
             * emulation for another day.  It's also known that the B1 (and possibly B0) reported 0x0303 in DX, and that
             * the D0 stepping reported 0x0305; beyond that, it's not known exactly what revision numbers Intel used for all
             * 80386 revisions.
             *
             * We define some additional "registers", such as regLIP. which mirrors the linear address corresponding to
             * CS:IP (the address of the next opcode byte).  In fact, regLIP functions as our internal IP register, so any
             * code that needs the real IP must call getIP().  This, in turn, means that whenever CS or IP must be modified,
             * regLIP must be recalculated, so you must use either setCSIP(), which takes both an offset and a segment,
             * or setIP(), whichever is appropriate; in unusual cases where only segCS is changing (eg, undocumented 8086
             * opcodes), use setCS().
             *
             * Similarly, regLSP mirrors the linear address corresponding to SS:SP, and therefore you must rely on getSP()
             * to read the current SP, and setSP() and setSS() to update SP and SS.
             *
             * The other segment registers, such as segDS and segES, have similar getters and setters, but they do not mirror
             * any segment:offset values in the same way that regLIP mirrors CS:IP, or that regLSP mirrors SS:SP.
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.resetRegs = function()
            {
                this.regEAX = 0;
                this.regEBX = 0;
                this.regECX = 0;
                this.regEDX = 0;
                this.regESP = 0;            // this isn't needed in a 16-bit environment, but is required for I386
                this.regEBP = 0;
                this.regESI = 0;
                this.regEDI = 0;
            
                /*
                 * The following are internal "registers" used to capture intermediate values inside selected helper
                 * functions and use them if they've been modified (or are known to change); for example, the MUL and DIV
                 * instructions perform calculations that must be propagated to specific registers (eg, AX and/or DX), which
                 * the ModRM decoder functions don't know about.  We initialize them here mainly for documentation purposes.
                 */
                this.fMDSet = false;        // regMDHi and/or regMDLo are invalid unless fMDSet is true
                this.regMDLo = this.regMDHi = 0;
                this.regXX = 0;             // internal register for segment register and control register moves
            
                /*
                 * Another internal "register" we occasionally need is an interim copy of bModRM, set inside selected opcode
                 * handlers so that the helper function can have access to the instruction's bModRM without resorting to a
                 * closure (which, in the Chrome V8 engine, for example, may cause constant recompilation).
                 */
                this.bModRM = 0;
            
                /*
                 * NOTE: Even though the 8086 doesn't have CR0 (aka MSW) and IDTR, we initialize them for ALL CPUs, so
                 * that functions like X86.fnINT() can use the same code for both.  The 8086/8088 have no direct way
                 * of accessing or changing them, so this is an implementation detail those processors are unaware of.
                 */
                this.regCR0 = X86.CR0.MSW.ON;
                this.addrIDT = 0; this.addrIDTLimit = 0x03FF;
                this.regPS = this.nIOPL = 0;        // these should be set before the first setPS() call
            
                /*
                 * Define all the result registers that can be used to "cache" arithmetic and logical flags.
                 *
                 * In addition, setPS() will initialize resultType, which keeps track of which flags are cached,
                 * and resultSize, which maintains the size of the last result; initially, no flags are cached.
                 */
                this.resultDst = this.resultSrc = this.resultArith = this.resultLogic = 0;
            
                /*
                 * This is set by fnFault() and reset (to -1) by resetRegs() and opIRET(); its initial purpose is to
                 * "help" fnFault() determine when a nested fault should be converted into either a double-fault (DF_FAULT)
                 * or a triple-fault (ie, a processor reset).
                 */
                this.nFault = -1;
            
                /*
                 * Segment registers used to be defined as separate variables (eg, regCS and regCS0 stored the segment
                 * number and base linear address, respectively), but segment registers are now defined as X86Seg objects.
                 */
                this.segCS     = new X86Seg(this, X86Seg.ID.CODE,  "CS");
                this.segDS     = new X86Seg(this, X86Seg.ID.DATA,  "DS");
                this.segES     = new X86Seg(this, X86Seg.ID.DATA,  "ES");
                this.segSS     = new X86Seg(this, X86Seg.ID.STACK, "SS");
                this.setSP(0);
                this.setSS(0);
            
                if (I386 && this.model >= X86.MODEL_80386) {
                    this.regEDX = 0x0304;           // Intel errata sheets indicate this is what an 80386-C0 reported
                    this.regCR0 = X86.CR0.ET;       // formerly MSW
                    this.regCR1 = 0;                // reserved
                    this.regCR2 = 0;                // page fault linear address (PFLA)
                    this.regCR3 = 0;                // page directory base register (PDBR)
                    this.aRegDR = new Array(8);     // Debug Registers DR0-DR7
                    this.aRegTR = new Array(8);     // Test Registers TR0-TR7
                    this.segFS = new X86Seg(this, X86Seg.ID.DATA,  "FS");
                    this.segGS = new X86Seg(this, X86Seg.ID.DATA,  "GS");
                }
            
                this.segNULL = new X86Seg(this, X86Seg.ID.NULL,  "NULL");
            
                /*
                 * The next few initializations mirror what we must do prior to each instruction (ie, inside the stepCPU() function);
                 * note that opPrefixes, along with segData and segStack, are reset only after we've executed a non-prefix instruction.
                 */
                this.segData = this.segDS;
                this.segStack = this.segSS;
                this.opFlags = this.opPrefixes = 0;
                this.regEA = this.regEAWrite = X86.ADDR_INVALID;
            
                /*
                 * intFlags contains some internal states we use to indicate whether a hardware interrupt (INTFLAG.INTR) or
                 * Trap software interrupt (INTR.TRAP) has been requested, as well as when we're in a "HLT" state (INTFLAG.HALT)
                 * that requires us to wait for a hardware interrupt (INTFLAG.INTR) before continuing execution.
                 *
                 * intFlags must be cleared only by checkINTR(), whereas opFlags must be cleared prior to every CPU operation.
                 */
                this.intFlags = X86.INTFLAG.NONE;
            
                this.setCSIP(0, 0xffff);    // this should be called before the first setPS() call
            
                if (!I386) this.resetSizes();
            
                if (BACKTRACK) {
                    /*
                     * Initialize the backtrack indexes for all registers to zero.  And while, yes, it IS possible
                     * for raw data to flow through segment registers as well, it's not common enough in real-mode
                     * (and too difficult in protected-mode) to merit the overhead.  Ditto for SP, which can't really
                     * be considered a general-purpose register.
                     *
                     * Every time getByte() is called, btMemLo is filled with the matching backtrack info; similarly,
                     * every time getWord() is called, btMemLo and btMemHi are filled with the matching backtrack info
                     * for the low and high bytes, respectively.
                     */
                    this.backTrack = {
                        btiAL:      0,
                        btiAH:      0,
                        btiBL:      0,
                        btiBH:      0,
                        btiCL:      0,
                        btiCH:      0,
                        btiDL:      0,
                        btiDH:      0,
                        btiBPLo:    0,
                        btiBPHi:    0,
                        btiSILo:    0,
                        btiSIHi:    0,
                        btiDILo:    0,
                        btiDIHi:    0,
                        btiMemLo:   0,
                        btiMemHi:   0,
                        btiEALo:    0,
                        btiEAHi:    0,
                        btiIO:      0
                    };
                }
            
                /*
                 * Assorted 80286-specific registers.  The GDTR and IDTR registers are stored as the following pieces:
                 *
                 *      GDTR:   addrGDT (24 bits) and addrGDTLimit (24 bits)
                 *      IDTR:   addrIDT (24 bits) and addrIDTLimit (24 bits)
                 *
                 * while the LDTR and TR are stored as special segment registers: segLDT and segTSS.
                 *
                 * So, yes, our GDTR and IDTR "registers" differ from other segment registers in that we do NOT record
                 * the 16-bit limit specified by the LGDT or LIDT instructions; instead, we immediately calculate the limiting
                 * address, and record that instead.
                 *
                 * In addition to different CS:IP reset values, the CS base address must be set to the top of the 16Mb
                 * address space rather than the top of the first 1Mb (which is why the MODEL_5170 ROM must be addressable
                 * at both 0x0F0000 and 0xFF0000; see the ROM component's "alias" parameter).
                 */
                if (this.model >= X86.MODEL_80286) {
                    /*
                     * TODO: Verify what the 80286 actually sets addrGDT and addrGDTLimit to on reset (or if it leaves them alone).
                     */
                    this.addrGDT = 0; this.addrGDTLimit = 0xffff;                   // GDTR
                    this.segLDT = new X86Seg(this, X86Seg.ID.LDT,   "LDT", true);   // LDTR
                    this.segTSS = new X86Seg(this, X86Seg.ID.TSS,   "TSS", true);   // TR
                    this.segVER = new X86Seg(this, X86Seg.ID.OTHER, "VER", true);   // a scratch segment register for VERR and VERW instructions
                    this.setCSIP(0xfff0, 0xf000);                   // on an 80286 or 80386, the default CS:IP is 0xF000:0xFFF0 instead of 0xFFFF:0x0000
                    this.setCSBase(0xffff0000|0);                   // on an 80286 or 80386, all CS base address bits above bit 15 must be set
                }
            
                /*
                 * This resets the Processor Status flags (regPS), along with all the internal "result registers";
                 * we've taken care to ensure that both segCS.cpl and nIOPL are initialized before this first setPS() call.
                 */
                this.setPS(0);
            
                /*
                 * Now that all the segment registers have been created, it's safe to set the current addressing mode.
                 */
                this.setProtMode();
            };
            
            /**
             * updateAddrSize()
             *
             * Select the appropriate ModRM dispatch tables, based on the current ADDRESS size (addrSize), which
             * is based foremost on segCS.addrSize, but can also be overridden by an ADDRESS size instruction prefix.
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.updateAddrSize = function()
            {
                if (!I386) {
                    this.getAddr = this.getShort;
                    this.aOpModRegByte = X86ModB.aOpModReg;
                    this.aOpModMemByte = X86ModB.aOpModMem;
                    this.aOpModGrpByte = X86ModB.aOpModGrp;
                    this.aOpModRegWord = X86ModW.aOpModReg;
                    this.aOpModMemWord = X86ModW.aOpModMem;
                    this.aOpModGrpWord = X86ModW.aOpModGrp;
                } else {
                    if (this.addrSize == 2) {
                        this.getAddr = this.getShort;
                        this.aOpModRegByte = X86ModB16.aOpModReg;
                        this.aOpModMemByte = X86ModB16.aOpModMem;
                        this.aOpModGrpByte = X86ModB16.aOpModGrp;
                        this.aOpModRegWord = X86ModW16.aOpModReg;
                        this.aOpModMemWord = X86ModW16.aOpModMem;
                        this.aOpModGrpWord = X86ModW16.aOpModGrp;
                    } else {
                        this.getAddr = this.getLong;
                        this.aOpModRegByte = X86ModB32.aOpModReg;
                        this.aOpModMemByte = X86ModB32.aOpModMem;
                        this.aOpModGrpByte = X86ModB32.aOpModGrp;
                        this.aOpModRegWord = X86ModW32.aOpModReg;
                        this.aOpModMemWord = X86ModW32.aOpModMem;
                        this.aOpModGrpWord = X86ModW32.aOpModGrp;
                    }
                }
            };
            
            /**
             * setDataSize(size)
             *
             * This is used by opcodes that require a particular OPERAND size, which we enforce by
             * internally simulating an OPERAND size override, if needed.
             *
             * @this {X86CPU}
             * @param {number} size (2 for 2-byte/16-bit operands, or 4 for 4-byte/32-bit operands)
             */
            X86CPU.prototype.setDataSize = function(size)
            {
                if (this.dataSize != size) {
                    this.opPrefixes |= X86.OPFLAG.DATASIZE;
                    this.dataSize = size;
                    this.dataMask = (size == 2? 0xffff : (0xffffffff|0));
                    this.updateDataSize();
                }
            };
            
            /**
             * updateDataSize()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.updateDataSize = function()
            {
                if (this.dataSize == 2) {
                    this.dataType = X86.RESULT.WORD;
                    this.getWord = this.getShort;
                    this.setWord = this.setShort;
                } else {
                    this.dataType = X86.RESULT.DWORD;
                    this.getWord = this.getLong;
                    this.setWord = this.setLong;
                }
            };
            
            /**
             * resetSizes()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.resetSizes = function()
            {
                /*
                 * The following contain the (default) ADDRESS size (2 for 16 bits, 4 for 32 bits), and the corresponding
                 * masks for isolating the (src) bits of an address and clearing the (dst) bits of an address.  Like the
                 * OPERAND size properties, these are reset to their segCS counterparts at the start of every new instruction.
                 */
                this.addrSize = this.segCS.addrSize;
                this.addrMask = this.segCS.addrMask;
            
                /*
                 * It's also worth noting that instructions that implicitly use the stack also rely on STACK size,
                 * which is based on the BIG bit of the last descriptor loaded into SS; use the following segSS properties:
                 *
                 *      segSS.addrSize      (2 or 4)
                 *      segSS.addrMask      (0xffff or 0xffffffff)
                 *
                 * As there is no STACK size instruction prefix override, there's no need to propagate these segSS properties
                 * to separate X86CPU properties, as we do for the OPERAND size and ADDRESS size properties.
                 */
            
                this.updateAddrSize();
            
                /*
                 * The following contain the (default) OPERAND size (2 for 16 bits, 4 for 32 bits), and the corresponding masks
                 * for isolating the (src) bits of an OPERAND and clearing the (dst) bits of an OPERAND.  These are reset to
                 * their segCS counterparts at the start of every new instruction, but are also set here for documentation purposes.
                 */
                this.dataSize = this.segCS.dataSize;
                this.dataMask = this.segCS.dataMask;
            
                this.updateDataSize();
            
                this.opPrefixes &= ~(X86.OPFLAG.ADDRSIZE | X86.OPFLAG.DATASIZE);
            };
            
            /**
             * getChecksum()
             *
             * @this {X86CPU}
             * @return {number} a 32-bit summation of key elements of the current CPU state (used by the CPU checksum code)
             */
            X86CPU.prototype.getChecksum = function()
            {
                var sum = (this.regEAX + this.regEBX + this.regECX + this.regEDX + this.getSP() + this.regEBP + this.regESI + this.regEDI)|0;
                sum = (sum + this.getIP() + this.getCS() + this.getDS() + this.getSS() + this.getES() + this.getPS())|0;
                return sum;
            };
            
            /**
             * addIntNotify(nInt, component, fn)
             *
             * Add an software interrupt notification handler to the CPU's list of such handlers.
             *
             * @this {X86CPU}
             * @param {number} nInt
             * @param {Component} component
             * @param {function(number)} fn is called with the LIP value following the software interrupt
             */
            X86CPU.prototype.addIntNotify = function(nInt, component, fn)
            {
                if (fn !== undefined) {
                    if (this.aIntNotify[nInt] === undefined) {
                        this.aIntNotify[nInt] = [];
                    }
                    this.aIntNotify[nInt].push([component, fn]);
                    if (MAXDEBUG) this.log("addIntNotify(" + str.toHexWord(nInt) + "," + component.id + ")");
                }
            };
            
            /**
             * checkIntNotify(nInt)
             *
             * NOTE: This is called ONLY for "INT N" instructions -- not "INTO" or breakpoint or single-step interrupts
             * or divide exception interrupts, or hardware interrupts, or any simulation of an interrupt (eg, "PUSHF/CALLF").
             *
             * @this {X86CPU}
             * @param {number} nInt
             * @return {boolean} true if software interrupt may proceed, false if software interrupt should be skipped
             */
            X86CPU.prototype.checkIntNotify = function(nInt)
            {
                var aNotify = this.aIntNotify[nInt];
                if (aNotify !== undefined) {
                    for (var i = 0; i < aNotify.length; i++) {
                        if (!aNotify[i][1].call(aNotify[i][0], this.regLIP)) {
                            return false;
                        }
                    }
                }
                /*
                 * The enabling of INT messages is one of the criteria that's also included in the Debugger's
                 * checksEnabled() function, and therefore in fDebugCheck, so for maximum speed, we check fDebugCheck first.
                 */
                if (DEBUGGER && this.aFlags.fDebugCheck) {
                    if (this.messageEnabled(Messages.INT) && this.dbg.messageInt(nInt, this.regLIP)) {
                        this.addIntReturn(this.regLIP, function(cpu, nCycles) {
                            return function onIntReturn(nLevel) {
                                cpu.dbg.messageIntReturn(nInt, nLevel, cpu.getCycles() - nCycles);
                            };
                        }(this, this.getCycles()));
                    }
                }
                return true;
            };
            
            /**
             * addIntReturn(addr, fn)
             *
             * Add a return notification handler to the CPU's list of such handlers.
             *
             * When fn(n) is called, it's passed a "software interrupt level", which will normally be 0,
             * unless it's a return from a nested software interrupt (eg, return from INT 0x10 Video BIOS
             * call issued inside another INT 0x10 Video BIOS call).
             *
             * Note that the nesting could be due to a completely different software interrupt that
             * another interrupt notification function is intercepting, so use it as an advisory value only.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @param {function(number)} fn is an interrupt-return notification function
             */
            X86CPU.prototype.addIntReturn = function(addr, fn)
            {
                if (fn !== undefined) {
                    if (this.aIntReturn[addr] == null) {
                        this.cIntReturn++;
                    }
                    this.aIntReturn[addr] = fn;
                }
            };
            
            /**
             * checkIntReturn(addr)
             *
             * We check for possible "INT n" software interrupt returns in the cases of "IRET" (fnIRET), "RETF 2"
             * (fnRETF) and "JMPF [DWORD]" (fnJMPFdw).
             *
             * "JMPF [DWORD]" is an unfortunate choice that newer versions of DOS (as of at least 3.20, and probably
             * earlier) employed in their INT 0x13 hooks; I would have preferred not making this call for that opcode.
             *
             * It is expected (though not required) that callers will check cIntReturn and avoid calling this function
             * if the count is zero, for maximum performance.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             */
            X86CPU.prototype.checkIntReturn = function(addr)
            {
                var fn = this.aIntReturn[addr];
                if (fn != null) {
                    fn(--this.cIntReturn);
                    delete this.aIntReturn[addr];
                }
            };
            
            /**
             * setProtMode(fProt)
             *
             * Update any opcode handlers that operate significantly differently in real-mode vs. protected-mode, and
             * notify all the segment registers about the mode change as well -- but only those that are "bi-modal"; internal
             * segment registers like segLDT and segTSS do not need to be notified, because they cannot be accessed in real-mode
             * (ie, LLDT, LTR, SLDT, STR are invalid instructions in real-mode, and are among the opcode handlers that we
             * update here).
             *
             * NOTE: Ideally, this function would do its work ONLY on mode *transitions*, but we assume calls to setProtMode()
             * are sufficiently infrequent that it doesn't really matter.
             *
             * @this {X86CPU}
             * @param {boolean} [fProt] (use the current MSW PE bit if not specified)
             */
            X86CPU.prototype.setProtMode = function(fProt)
            {
                if (fProt === undefined) {
                    fProt = !!(this.regCR0 & X86.CR0.MSW.PE);
                }
                if (!fProt != !(this.regCR0 & X86.CR0.MSW.PE) && this.messageEnabled()) {
                    this.printMessage("CPU switching to " + (fProt? "protected" : "real") + "-mode", this.bitsMessage, true);
                }
                this.aOpGrp6 = (fProt? X86.aOpGrp6Prot : X86.aOpGrp6Real);
                this.segCS.updateMode();
                this.segDS.updateMode();
                this.segSS.updateMode();
                this.segES.updateMode();
                if (I386 && this.model >= X86.MODEL_80386) {
                    this.segFS.updateMode();
                    this.segGS.updateMode();
                    this.resetSizes();
                }
            };
            
            /**
             * saveProtMode()
             *
             * Save CPU state related to protected-mode, for save()
             *
             * @this {X86CPU}
             * @return {Array}
             */
            X86CPU.prototype.saveProtMode = function()
            {
                if (this.addrGDT != null) {
                    var a = [
                        this.regCR0,
                        this.addrGDT,
                        this.addrGDTLimit,
                        this.addrIDT,
                        this.addrIDTLimit,
                        this.segLDT.save(),
                        this.segTSS.save(),
                        this.nIOPL
                    ];
                    if (I386) {
                        a.push(this.regCR1);
                        a.push(this.regCR2);
                        a.push(this.regCR3);
                        a.push(this.aRegDR);
                        a.push(this.aRegTR);
                    }
                    return a;
                }
                return null;
            };
            
            /**
             * restoreProtMode()
             *
             * Restore CPU state related to protected-mode, for restore()
             *
             * @this {X86CPU}
             * @param {Array} a
             */
            X86CPU.prototype.restoreProtMode = function(a)
            {
                if (a && a.length) {
                    this.regCR0 = a[0];
                    this.addrGDT = a[1];
                    this.addrGDTLimit = a[2];
                    this.addrIDT = a[3];
                    this.addrIDTLimit = a[4];
                    this.segLDT.restore(a[5]);
                    this.segTSS.restore(a[6]);
                    this.nIOPL = a[7];
                    if (I386 && this.model >= X86.MODEL_80386) {
                        this.regCR1 = a[8];
                        this.regCR2 = a[9];
                        this.regCR3 = a[10];
                        this.aRegDR = a[11];
                        this.aRegTR = a[12];
                    }
                    this.setProtMode();
                }
            };
            
            /**
             * save()
             *
             * This implements save support for the X86 component.
             *
             * UPDATES: The current speed multiplier from getSpeed() is now saved in group #3, so that your speed is preserved.
             *
             * @this {X86CPU}
             * @return {Object|null}
             */
            X86CPU.prototype.save = function()
            {
                var state = new State(this);
                state.set(0, [this.regEAX, this.regEBX, this.regECX, this.regEDX, this.getSP(), this.regEBP, this.regESI, this.regEDI]);
                var a = [this.getIP(), this.segCS.save(), this.segDS.save(), this.segSS.save(), this.segES.save(), this.saveProtMode(), this.getPS()];
                if (I386 && this.model >= X86.MODEL_80386) {
                    a.push(this.segFS.save());
                    a.push(this.segGS.save());
                }
                state.set(1, a);
                state.set(2, [this.segData.sName, this.segStack.sName, this.opFlags, this.opPrefixes, this.intFlags, this.regEA, this.regEAWrite]);
                state.set(3, [0, this.nTotalCycles, this.getSpeed()]);
                state.set(4, this.bus.saveMemory());
                return state.data();
            };
            
            /**
             * restore(data)
             *
             * This implements restore support for the X86 component.
             *
             * @this {X86CPU}
             * @param {Object} data
             * @return {boolean} true if restore successful, false if not
             */
            X86CPU.prototype.restore = function(data)
            {
                var a = data[0];
                this.regEAX = a[0];
                this.regEBX = a[1];
                this.regECX = a[2];
                this.regEDX = a[3];
                var regESP = a[4];
                this.regEBP = a[5];
                this.regESI = a[6];
                this.regEDI = a[7];
            
                a = data[1];
                this.segCS.restore(a[1]);
                this.segDS.restore(a[2]);
                this.segSS.restore(a[3]);
                this.segES.restore(a[4]);
                this.restoreProtMode(a[5]);
                this.setPS(a[6]);
            
                /*
                 * It's important to call setCSIP(), both to ensure that the CPU's linear IP register (regLIP) is updated
                 * properly AND to ensure the CPU's default ADDRESS and OPERAND sizes are set properly.
                 */
                this.setCSIP(a[0], this.segCS.sel);
            
                /*
                 * It's also important to call setSP(), so that the linear SP register (regLSP) will be updated properly;
                 * we also need to call setSS(), to ensure that the lower and upper stack limits are properly initialized.
                 */
                this.setSP(regESP);
                this.setSS(this.segSS.sel);
            
                if (I386 && this.model >= X86.MODEL_80386) {
                    this.segFS.restore(a[7]);
                    this.segGS.restore(a[8]);
                }
            
                a = data[2];
                this.segData  = a[0] != null && this.getSeg(a[0]) || this.segDS;
                this.segStack = a[1] != null && this.getSeg(a[1]) || this.segSS;
                this.opFlags = a[2];
                this.opPrefixes = a[3];
                this.intFlags = a[4];
                this.regEA = a[5];
                this.regEAWrite = a[6];     // save/restore of last EA calculation(s) isn't strictly necessary, but they may be of some interest to, say, the Debugger
            
                a = data[3];                // a[0] was previously nBurstDivisor (no longer used)
                this.nTotalCycles = a[1];
                this.setSpeed(a[2]);        // if we're restoring an old state that doesn't contain a value from getSpeed(), that's OK; setSpeed() checks for an undefined value
                return this.bus.restoreMemory(data[4]);
            };
            
            /**
             * getSeg(sName)
             *
             * @param {string} sName
             * @return {Array}
             */
            X86CPU.prototype.getSeg = function(sName)
            {
                switch(sName) {
                case "CS":
                    return this.segCS;
                case "DS":
                    return this.segDS;
                case "SS":
                    return this.segSS;
                case "ES":
                    return this.segES;
                case "NULL":
                    return this.segNULL;
                default:
                    /*
                     * HACK: We return a fake segment register object in which only the base linear address is valid,
                     * because that's all the caller provided (ie, we must be restoring from an older state).
                     */
                    this.assert(typeof sName == "number");
                    return [0, sName, 0, 0, ""];
                }
            };
            
            /**
             * getCS()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getCS = function()
            {
                return this.segCS.sel;
            };
            
            /**
             * setCS(sel)
             *
             * NOTE: This is used ONLY by those few undocumented 8086/8088/80186/80188 instructions that "MOV" or "POP" a value
             * into CS, which we assume have the same behavior as any other instruction that moves or pops a segment register
             * (ie, suppresses h/w interrupts for one instruction).  Instructions that "JMP" or "CALL" or "INT" or "IRET" a new
             * value into CS are always accompanied by a new IP value, so they use setCSIP() instead, which does NOT suppress
             * h/w interrupts.
             *
             * @this {X86CPU}
             * @param {number} sel
             */
            X86CPU.prototype.setCS = function(sel)
            {
                var regEIP = this.getIP();
                this.regLIP = (this.segCS.load(sel) + regEIP)|0;
                this.regLIPLimit = (this.segCS.base + this.segCS.limit)|0;
                if (I386) this.resetSizes();
                if (!BUGS_8086) this.opFlags |= this.OPFLAG_NOINTR_8086;
                if (PREFETCH) this.flushPrefetch(this.regLIP);
            };
            
            /**
             * getDS()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getDS = function()
            {
                return this.segDS.sel;
            };
            
            /**
             * setDS(sel)
             *
             * @this {X86CPU}
             * @param {number} sel
             */
            X86CPU.prototype.setDS = function(sel)
            {
                this.segDS.load(sel);
                if (!BUGS_8086) this.opFlags |= this.OPFLAG_NOINTR_8086;
            };
            
            /**
             * getSS()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getSS = function()
            {
                return this.segSS.sel;
            };
            
            /**
             * setSS(sel)
             *
             * @this {X86CPU}
             * @param {number} sel
             * @param {boolean} [fInterruptable]
             */
            X86CPU.prototype.setSS = function(sel, fInterruptable)
            {
                var regESP = this.getSP();
                this.regLSP = (this.segSS.load(sel) + regESP)|0;
                if (this.segSS.fExpDown) {
                    this.regLSPLimit = (this.segSS.base + this.segSS.addrMask)|0;
                    this.regLSPLimitLow = (this.segSS.base + this.segSS.limit)|0;
                } else {
                    this.regLSPLimit = (this.segSS.base + this.segSS.limit)|0;
                    this.regLSPLimitLow = this.segSS.base;
                }
                if (!BUGS_8086 && !fInterruptable) this.opFlags |= X86.OPFLAG.NOINTR;
            };
            
            /**
             * getES()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getES = function()
            {
                return this.segES.sel;
            };
            
            /**
             * setES(sel)
             *
             * @this {X86CPU}
             * @param {number} sel
             */
            X86CPU.prototype.setES = function(sel)
            {
                this.segES.load(sel);
                if (!BUGS_8086) this.opFlags |= this.OPFLAG_NOINTR_8086;
            };
            
            /**
             * getFS()
             *
             * NOTE: segFS is defined for I386 only.
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getFS = function()
            {
                return this.segFS.sel;
            };
            
            /**
             * setFS(sel)
             *
             * NOTE: segFS is defined for I386 only.
             *
             * @this {X86CPU}
             * @param {number} sel
             */
            X86CPU.prototype.setFS = function(sel)
            {
                this.segFS.load(sel);
            };
            
            /**
             * getGS()
             *
             * NOTE: segGS is defined for I386 only.
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getGS = function()
            {
                return this.segGS.sel;
            };
            
            /**
             * setGS(sel)
             *
             * NOTE: segGS is defined for I386 only.
             *
             * @this {X86CPU}
             * @param {number} sel
             */
            X86CPU.prototype.setGS = function(sel)
            {
                this.segGS.load(sel);
            };
            
            /**
             * getIP()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getIP = function()
            {
                return (this.regLIP - this.segCS.base)|0;
            };
            
            /**
             * setIP(off)
             *
             * With the addition of flushPrefetch(), this function should only be called
             * for non-incremental IP updates; setIP(this.getIP()+1) is no longer appropriate.
             *
             * In fact, for performance reasons, it's preferable to increment regLIP yourself,
             * but you can also call advanceIP() if speed is not important.
             *
             * @this {X86CPU}
             * @param {number} off
             */
            X86CPU.prototype.setIP = function(off)
            {
                this.regLIP = (this.segCS.base + (off & (I386? this.dataMask : 0xffff)))|0;
                if (PREFETCH) this.flushPrefetch(this.regLIP);
            };
            
            /**
             * setCSIP(off, sel, fCall)
             *
             * This function is a little different from the other segment setters, only because it turns out that CS is
             * never set without an accompanying IP (well, except for a few undocumented instructions, like POP CS, which
             * were available ONLY on the 8086/8088/80186/80188; see setCS() for details).
             *
             * And even though this function is called setCSIP(), please note the order of the parameters is IP,CS,
             * which matches the order that CS:IP values are normally stored in memory, allowing us to make calls like this:
             *
             *      this.setCSIP(this.popWord(), this.popWord());
             *
             * @this {X86CPU}
             * @param {number} off
             * @param {number} sel
             * @param {boolean} [fCall] is true if CALLF in progress, false if RETF/IRET in progress, null/undefined otherwise
             * @return {boolean|null} true if a stack switch occurred; the only opcode that really needs to pay attention is opRETFn()
             */
            X86CPU.prototype.setCSIP = function(off, sel, fCall)
            {
                this.segCS.fCall = fCall;
                /*
                 * We break this operation into the following discrete steps (eg, set IP, load CS, and then update IP) so
                 * that segCS.load(sel) has the ability to modify IP when sel refers to a gate (call, interrupt, trap, etc).
                 *
                 * NOTE: regEIP acts merely as a conduit for the IP, if any, that segCS.load() may load; regLIP is still our
                 * internal instruction pointer.  Callers that need the real IP must call getIP().
                 */
                this.regEIP = off;
                var base = this.segCS.load(sel);
                if (base !== X86.ADDR_INVALID) {
                    this.regLIP = (base + (this.regEIP & (I386? this.dataMask : 0xffff)))|0;
                    this.regLIPLimit = (base + this.segCS.limit)|0;
                    if (I386) this.resetSizes();
                    if (PREFETCH) this.flushPrefetch(this.regLIP);
                    return this.segCS.fStackSwitch;
                }
                return null;
            };
            
            /**
             * setCSBase(addr)
             *
             * Since the CPU must maintain regLIP as the sum of the CS base and the current IP, all calls to setBase()
             * for segCS need to go through here.
             *
             * @param {number} addr
             */
            X86CPU.prototype.setCSBase = function(addr)
            {
                var regIP = this.getIP();
                addr = this.segCS.setBase(addr);
                this.regLIP = (addr + regIP)|0;
                this.regLIPLimit = (addr + this.segCS.limit)|0;
            };
            
            /**
             * advanceIP(inc)
             *
             * @this {X86CPU}
             * @param {number} inc (positive)
             */
            X86CPU.prototype.advanceIP = function(inc)
            {
                this.assert(inc > 0);
                this.regLIP = (this.regLIP + inc)|0;
                /*
                 * Properly comparing regLIP to regLIPLimit would normally require coercing both to unsigned
                 * (ie, floating-point) values.  But instead, we do a subtraction, (regLIPLimit - regLIP), and
                 * if the result is negative, we need only be concerned if the signs of both numbers are the same
                 * (ie, the sign of their XOR'ed union is positive).
                 *
                 * TODO: I'm combining the old 8088 address-wrap check with the new segment-limit check,
                 * even though the correct time to do the latter is immediately BEFORE a fetch, not AFTER; eg,
                 * consider the following code:
                 *
                 *      AX=0100 BX=0015 CX=0080 DX=F859 SP=0A62 BP=0A98 SI=0000 DI=0000
                 *      SS=0038[1759E0,0B5F] DS=02E8[0107A0,017F] ES=0970[009700,6949] A20=ON
                 *      CS=02E0[010080,06FB] LD=0028[000000,0000] GD=[11AEE0,4977] ID=[120082,03FF]
                 *      TR=0010 MS=FFF3 PS=3202 V0 D0 I1 T0 S0 Z0 A0 P0 C0
                 *      02E0:06F9 C20400          RET      0004
                 *
                 * After fetching the 3rd byte of the "RET 0004" instruction at CS:06FB, the CPU wants to automatically
                 * advance IP to 06FC, which of course, exceeds the limit, but that doesn't matter unless we actually
                 * fetch a byte from 06FC, which won't happen.  I'm working around this for now by applying a -1
                 * fudge factor to the fault check below.
                 */
                var off = (this.regLIPLimit - this.regLIP)|0;
                if (off < 0 && (this.regLIPLimit ^ this.regLIP) >= 0) {
                    /*
                     * There's no such thing as a GP fault on the 8086/8088, and I'm assuming that, on newer
                     * processors, when the segment limit is set to the maximum, it's OK for IP to wrap.
                     */
                    if (this.model <= X86.MODEL_8088 || this.segCS.limit == this.segCS.addrMask) {
                        this.setIP(this.regLIP - this.segCS.base);
                    } else if (off < -1) {          // fudge factor
                        X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0);
                    }
                }
            };
            
            /**
             * rewindIP(dec)
             *
             * @this {X86CPU}
             * @param {number} dec (negative)
             */
            X86CPU.prototype.rewindIP = function(dec)
            {
                this.assert(dec < 0);
                this.regLIP = (this.regLIP + dec)|0;
                /*
                 * Since rewindIP() is used only for discrete "intra-instruction" IP adjustments, there should be no need
                 * to perform all the same limit checks as advanceIP().
                 */
                if (PREFETCH) this.advancePrefetch(dec);
            };
            
            /**
             * getSP()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getSP = function()
            {
                if (I386) {
                    // assert(!((this.regLSP - this.segSS.base) & ~this.segSS.addrMask));
                    return (this.regESP & ~this.segSS.addrMask) | (this.regLSP - this.segSS.base);
                }
                return (this.regLSP - this.segSS.base)|0;
            };
            
            /**
             * setSP(off)
             *
             * @this {X86CPU}
             * @param {number} off
             */
            X86CPU.prototype.setSP = function(off)
            {
                if (I386) {
                    this.regESP = off;
                    this.regLSP = (this.segSS.base + (off & this.segSS.addrMask))|0;
                } else {
                    this.regLSP = (this.segSS.base + off)|0;
                }
            };
            
            /**
             * setArithResult(dst, src, value, type, fSubtract)
             *
             * Updates the flags for arithmetic instructions; use setLogicResult() for logical instructions.
             *
             * The type parameter indicates both the size of the result (BYTE, WORD or DWORD) and which of the
             * flags should now be considered "cached" by the new result variables.  If the previous resultType
             * specifies any flags not contained in the new type parameter, then those flags must be immediately
             * calculated and written to the appropriate bit(s) in regPS.
             *
             * The fSubtract parameter is used to indicate a "subtracted" result (eg, CMP, DEC, SUB, SBB); the
             * default assumes an "added" result (eg, ADD, ADC, INC).
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @param {number} value
             * @param {number} type
             * @param {boolean} [fSubtract]
             */
            X86CPU.prototype.setArithResult = function(dst, src, value, type, fSubtract)
            {
                if ((type & X86.RESULT.ALL) != X86.RESULT.ALL && type != this.resultType) {
                    var diff = ((type ^ this.resultType) & this.resultType);
                    if (diff) {
                        if (diff & X86.RESULT.CF) this.getCF();
                        if (diff & X86.RESULT.PF) this.getPF();
                        if (diff & X86.RESULT.AF) this.getAF();
                        if (diff & X86.RESULT.ZF) this.getZF();
                        if (diff & X86.RESULT.SF) this.getSF();
                        if (diff & X86.RESULT.OF) this.getOF();
                    }
                }
                if (!fSubtract) {
                    this.resultDst = dst;
                    this.resultArith = value;
                } else {
                    this.resultDst = value;
                    this.resultArith = dst;
                }
                this.resultSrc = src;
                this.resultLogic = value;
                this.resultType = type;
            };
            
            /**
             * setLogicResult(value, type, carry, overflow)
             *
             * Updates the flags for logical instructions (eg, AND, OR, TEST, XOR); ie, instructions
             * that update PF, ZF, and SF, while clearing CF and OF (although CF and OF can be explicitly
             * set via the carry and overflow parameters as needed).  AF is always considered undefined.
             *
             * TODO: We should observe the behavior of AF on real CPUs, and determine if there is a
             * well-defined behavior, even though none is documented.  Ditto for OF on shift instructions
             * when the shift count > 1.
             *
             * @this {X86CPU}
             * @param {number} value
             * @param {number} type
             * @param {number} [carry]
             * @param {number} [overflow]
             * @return {number} value
             */
            X86CPU.prototype.setLogicResult = function(value, type, carry, overflow)
            {
                this.resultType = type | X86.RESULT.LOGIC;
                this.resultLogic = value;
                if (carry) this.setCF(); else this.clearCF();
                if (overflow) this.setOF(); else this.clearOF();
                return value;
            };
            
            /**
             * setRotateResult(result, carry, size)
             *
             * Used by all rotate instructions (ie, RCL, RCR, ROL, ROR) to update CF and OF.
             *
             * TODO: We should observe the behavior of OF on real CPUs whenever the rotate count > 1,
             * and determine if there is a well-defined behavior, even though none is documented.
             *
             * @this {X86CPU}
             * @param {number} result
             * @param {number} carry
             * @param {number} size
             */
            X86CPU.prototype.setRotateResult = function(result, carry, size)
            {
                if (carry & size) this.setCF(); else this.clearCF();
                if ((result ^ carry) & size) this.setOF(); else this.clearOF();
            };
            
            /**
             * getCarry()
             *
             * @this {X86CPU}
             * @return {number} 0 or 1, depending on whether CF is clear or set
             */
            X86CPU.prototype.getCarry = function()
            {
                return this.getCF()? 1 : 0;
            };
            
            /**
             * getCF()
             *
             * Notes regarding carry following an I386 addition:
             *
             * The following table summarizes bit 31 of dst, src, and result, along with the expected carry:
             *
             *      dst src res carry
             *      --- --- --- -----
             *      0   0   0   0       no
             *      0   0   1   0       no (there must have been a carry out of bit 30, but it was "absorbed")
             *      0   1   0   1       yes (there must have been a carry out of bit 30, but it was NOT "absorbed")
             *      0   1   1   0       no
             *      1   0   0   1       yes (same as the preceding "yes" case)
             *      1   0   1   0       no
             *      1   1   0   1       yes (since the addition of two ones must always produce a carry)
             *      1   1   1   1       yes (since the addition of two ones must always produce a carry)
             *
             * So, we use the following calculation:
             *
             *      (resultDst ^ ((resultDst ^ resultSrc) & (resultSrc ^ resultArith))) & resultType
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.CF
             */
            X86CPU.prototype.getCF = function()
            {
                if (this.resultType & X86.RESULT.CF) {
                    this.regPS &= ~X86.PS.CF;
                    if ((this.resultDst ^ ((this.resultDst ^ this.resultSrc) & (this.resultSrc ^ this.resultArith))) & (this.resultType & X86.RESULT.TYPE)) {
                        this.regPS |= X86.PS.CF;
                    }
                    this.resultType &= ~X86.RESULT.CF;
                }
                return this.regPS & X86.PS.CF;
            };
            
            /**
             * getPF()
             *
             * From http://graphics.stanford.edu/~seander/bithacks.html#ParityParallel:
             *
             *      unsigned int v;  // word value to compute the parity of
             *      v ^= v >> 16;
             *      v ^= v >> 8;
             *      v ^= v >> 4;
             *      v &= 0xf;
             *      return (0x6996 >> v) & 1;
             *
             *      The method above takes around 9 operations, and works for 32-bit words.  It may be optimized to work just on
             *      bytes in 5 operations by removing the two lines immediately following "unsigned int v;".  The method first shifts
             *      and XORs the eight nibbles of the 32-bit value together, leaving the result in the lowest nibble of v.  Next,
             *      the binary number 0110 1001 1001 0110 (0x6996 in hex) is shifted to the right by the value represented in the
             *      lowest nibble of v.  This number is like a miniature 16-bit parity-table indexed by the low four bits in v.
             *      The result has the parity of v in bit 1, which is masked and returned.
             *
             * The x86 parity flag (PF) is based exclusively on the low 8 bits of resultParitySign, and PF must be SET if that byte
             * has EVEN parity; the above calculation yields ODD parity, so we use the conditional operator to invert the result.
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.PF
             */
            X86CPU.prototype.getPF = function()
            {
                if (this.resultType & X86.RESULT.PF) {
                    this.regPS &= ~X86.PS.PF;
                    if ((0x9669 >> ((this.resultLogic ^ (this.resultLogic >> 4)) & 0xf)) & 1) {
                        this.regPS |= X86.PS.PF;
                    }
                    this.resultType &= ~X86.RESULT.PF;
                }
                return this.regPS & X86.PS.PF;
            };
            
            /**
             * getAF()
             *
             * To determine if there's been a carry out of the low 4 bits of an arithmetic operation,
             * we look at all the possible inputs for bit 4, and calculate AF = PS^(D^S):
             *
             *      D   S   A   D^S AF
             *      -   -   -   --- --
             *      0   0   0   0   0
             *      0   0   1   0   1
             *      0   1   0   1   1
             *      0   1   1   1   0
             *      1   0   0   1   1
             *      1   0   1   1   0
             *      1   1   0   0   0
             *      1   1   1   0   1
             *
             * The final calculation looks like:
             *
             *      (resultArith ^ (resultDst ^ resultSrc)) & 0x0010
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.AF
             */
            X86CPU.prototype.getAF = function()
            {
                if (this.resultType & X86.RESULT.AF) {
                    this.regPS &= ~X86.PS.AF;
                    if ((this.resultArith ^ (this.resultDst ^ this.resultSrc)) & 0x0010) {
                        this.regPS |= X86.PS.AF;
                    }
                    this.resultType &= ~X86.RESULT.AF;
                }
                return this.regPS & X86.PS.AF;
            };
            
            /**
             * getZF()
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.ZF
             */
            X86CPU.prototype.getZF = function()
            {
                if (this.resultType & X86.RESULT.ZF) {
                    this.regPS &= ~X86.PS.ZF;
                    if (!(this.resultLogic & (((this.resultType & X86.RESULT.TYPE) - 1) | (this.resultType & X86.RESULT.TYPE)))) {
                        this.regPS |= X86.PS.ZF;
                    }
                    this.resultType &= ~X86.RESULT.ZF;
                }
                return this.regPS & X86.PS.ZF;
            };
            
            /**
             * getSF()
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.SF
             */
            X86CPU.prototype.getSF = function()
            {
                if (this.resultType & X86.RESULT.SF) {
                    this.regPS &= ~X86.PS.SF;
                    if (this.resultLogic & (this.resultType & X86.RESULT.TYPE)) {
                        this.regPS |= X86.PS.SF;
                    }
                    this.resultType &= ~X86.RESULT.SF;
                }
                return this.regPS & X86.PS.SF;
            };
            
            /**
             * getOF()
             *
             * Overflow was originally calculated as:
             *
             *      (resultParitySign ^ resultAuxOverflow ^ (resultParitySign >> 1)) & (resultSize >> 1)
             *
             * but as you can see, that calculation depends on the carry out of the 8/16/32-bit result in
             * resultParitySign, which we don't have access to for 32-bit results.  So we fall-back to the
             * following:
             *
             *      ((resultDst ^ resultArith) & (resultSrc ^ resultArith)) & resultType
             *
             * which you can verify from the following table of sign bits (where x1 is resultDst ^ resultArith,
             * and x2 is resultSrc ^ resultArith):
             *
             *      D   S   A   x1  x2  OF
             *      -   -   -   --  --  --
             *      0   0   0   0   0   0
             *      0   0   1   1   1   1 (adding two positive values yielded a negative value)
             *      0   1   0   0   1   0
             *      0   1   1   1   0   0
             *      1   0   0   1   0   0
             *      1   0   1   0   1   0
             *      1   1   0   1   1   1 (adding two negative values yielded a positive value)
             *      1   1   1   0   0   0
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.OF
             */
            X86CPU.prototype.getOF = function()
            {
                if (this.resultType & X86.RESULT.OF) {
                    this.regPS &= ~X86.PS.OF;
                    if (((this.resultDst ^ this.resultArith) & (this.resultSrc ^ this.resultArith)) & (this.resultType & X86.RESULT.TYPE)) {
                        this.regPS |= X86.PS.OF;
                    }
                    this.resultType &= ~X86.RESULT.OF;
                }
                return this.regPS & X86.PS.OF;
            };
            
            /**
             * getTF()
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.TF
             */
            X86CPU.prototype.getTF = function()
            {
                return (this.regPS & X86.PS.TF);
            };
            
            /**
             * getIF()
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.IF
             */
            X86CPU.prototype.getIF = function()
            {
                return (this.regPS & X86.PS.IF);
            };
            
            /**
             * getDF()
             *
             * @this {X86CPU}
             * @return {number} 0 or X86.PS.DF
             */
            X86CPU.prototype.getDF = function()
            {
                return (this.regPS & X86.PS.DF);
            };
            
            /**
             * clearCF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearCF = function()
            {
                this.resultType &= ~X86.RESULT.CF;
                this.regPS &= ~X86.PS.CF;
            };
            
            /**
             * clearPF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearPF = function()
            {
                this.resultType &= ~X86.RESULT.PF;
                this.regPS &= ~X86.PS.PF;
            };
            
            /**
             * clearAF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearAF = function()
            {
                this.resultType &= ~X86.RESULT.AF;
                this.regPS &= ~X86.PS.AF;
            };
            
            /**
             * clearZF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearZF = function()
            {
                this.resultType &= ~X86.RESULT.ZF;
                this.regPS &= ~X86.PS.ZF;
            };
            
            /**
             * clearSF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearSF = function()
            {
                this.resultType &= ~X86.RESULT.SF;
                this.regPS &= ~X86.PS.SF;
            };
            
            /**
             * clearIF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearIF = function()
            {
                this.regPS &= ~X86.PS.IF;
            };
            
            /**
             * clearDF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearDF = function()
            {
                this.regPS &= ~X86.PS.DF;
            };
            
            /**
             * clearOF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.clearOF = function()
            {
                this.resultType &= ~X86.RESULT.OF;
                this.regPS &= ~X86.PS.OF;
            };
            
            /**
             * setCF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setCF = function()
            {
                this.resultType &= ~X86.RESULT.CF;
                this.regPS |= X86.PS.CF;
            };
            
            /**
             * setPF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setPF = function()
            {
                this.resultType &= ~X86.RESULT.PF;
                this.regPS |= X86.PS.PF;
            };
            
            /**
             * setAF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setAF = function()
            {
                this.resultType &= ~X86.RESULT.AF;
                this.regPS |= X86.PS.AF;
            };
            
            /**
             * setZF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setZF = function()
            {
                this.resultType &= ~X86.RESULT.ZF;
                this.regPS |= X86.PS.ZF;
            };
            
            /**
             * setSF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setSF = function()
            {
                this.resultType &= ~X86.RESULT.SF;
                this.regPS |= X86.PS.SF;
            };
            
            /**
             * setIF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setIF = function()
            {
                this.regPS |= X86.PS.IF;
            };
            
            /**
             * setDF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setDF = function()
            {
                this.regPS |= X86.PS.DF;
            };
            
            /**
             * setOF()
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.setOF = function()
            {
                this.resultType &= ~X86.RESULT.OF;
                this.regPS |= X86.PS.OF;
            };
            
            /**
             * getPS()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86CPU.prototype.getPS = function()
            {
                return (this.regPS & ~X86.PS_CACHED) | (this.getCF() | this.getPF() | this.getAF() | this.getZF() | this.getSF() | this.getOF());
            };
            
            /**
             * setMSW(w)
             *
             * Factored out of x86op0f.js, since both opLMSW and opLOADALL are capable of setting a new MSW.
             * The caller is responsible for assessing the appropriate cycle cost.
             *
             * @this {X86CPU}
             * @param {number} w
             */
            X86CPU.prototype.setMSW = function(w)
            {
                /*
                 * This instruction is always allowed to set MSW.PE, but it cannot clear MSW.PE once set;
                 * therefore, we always OR the previous value of MSW.PE into the new value before loading.
                 */
                w |= (this.regCR0 & X86.CR0.MSW.PE) | X86.CR0.MSW.ON;
                this.regCR0 = (this.regCR0 & ~X86.CR0.MSW.MASK) | (w & X86.CR0.MSW.MASK);
                /*
                 * Since the 80286 cannot return to real-mode via this instruction, the only transition we
                 * must worry about is to protected-mode.  And there's no harm calling setProtMode() if the
                 * CPU is already in protected-mode; we could certainly optimize out the call in that case,
                 * but the instruction isn't used frequently enough to warrant it.
                 */
                if (this.regCR0 & X86.CR0.MSW.PE) this.setProtMode(true);
            };
            
            /**
             * setPS(regPS)
             *
             * @this {X86CPU}
             * @param {number} regPS
             * @param {number} [cpl]
             */
            X86CPU.prototype.setPS = function(regPS, cpl)
            {
                /*
                 * OS/2 1.0 discriminates between an 80286 and an 80386 based on whether an IRET in real-mode that
                 * pops 0xF000 into the flags is able to set *any* of flag bits 12-15: if it can, then OS/2 declares
                 * the CPU an 80386.  Therefore, in real-mode, we must zero all incoming bits 12-15.
                 *
                 * This has the added benefit of relieving us from zeroing the effective IOPL (this.nIOPL) whenever
                 * we're in real-mode, since we're zeroing the incoming IOPL bits up front now.
                 */
                if (!(this.regCR0 & X86.CR0.MSW.PE)) {
                    regPS &= ~(X86.PS.IOPL.MASK | X86.PS.NT | X86.PS.BIT15);
                }
            
                /*
                 * There are some cases (eg, an IRET returning to a less privileged code segment) where the CPL
                 * we compare against should come from the outgoing code segment, so if the caller provided it, use it.
                 */
                if (cpl === undefined) cpl = this.segCS.cpl;
            
                /*
                 * Since PS.IOPL and PS.IF are part of PS_DIRECT, we need to take care of any 80286-specific behaviors
                 * before setting the PS_DIRECT bits from the incoming regPS bits.
                 *
                 * Specifically, PS.IOPL is unchanged if CPL > 0, and PS.IF is unchanged if CPL > IOPL.
                 */
                if (!cpl) {
                    this.nIOPL = (regPS & X86.PS.IOPL.MASK) >> X86.PS.IOPL.SHIFT;           // IOPL allowed to change
                } else {
                    regPS = (regPS & ~X86.PS.IOPL.MASK) | (this.regPS & X86.PS.IOPL.MASK);  // IOPL not allowed to change
                }
            
                if (cpl > this.nIOPL) {
                    regPS = (regPS & ~X86.PS.IF) | (this.regPS & X86.PS.IF);                // IF not allowed to change
                }
            
                this.resultType = X86.RESULT.BYTE;
                this.regPS = (this.regPS & ~(this.PS_DIRECT|X86.PS_CACHED)) | (regPS & (this.PS_DIRECT|X86.PS_CACHED)) | this.PS_SET;
            
                if (this.regPS & X86.PS.TF) {
                    this.intFlags |= X86.INTFLAG.TRAP;
                    this.opFlags |= X86.OPFLAG.NOINTR;
                }
            };
            
            /**
             * traceLog(prop, dst, src, flagsIn, flagsOut, resultLo, resultHi)
             *
             * @this {X86CPU}
             * @param {string} prop
             * @param {number} dst
             * @param {number} src
             * @param {number|null} flagsIn
             * @param {number|null} flagsOut
             * @param {number} resultLo
             * @param {number} [resultHi]
             */
            X86CPU.prototype.traceLog = function(prop, dst, src, flagsIn, flagsOut, resultLo, resultHi)
            {
                if (DEBUG && this.dbg) {
                    this.dbg.traceLog(prop, dst, src, flagsIn, flagsOut, resultLo, resultHi);
                }
            };
            
            /**
             * setBinding(sHTMLType, sBinding, control)
             *
             * @this {X86CPU}
             * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
             * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "AX")
             * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
             * @return {boolean} true if binding was successful, false if unrecognized binding request
             */
            X86CPU.prototype.setBinding = function(sHTMLType, sBinding, control)
            {
                var fBound = false;
                switch (sBinding) {
                case "EAX":
                case "EBX":
                case "ECX":
                case "EDX":
                case "ESP":
                case "EBP":
                case "ESI":
                case "EDI":
                case "EIP":
                case "AX":
                case "BX":
                case "CX":
                case "DX":
                case "SP":
                case "BP":
                case "SI":
                case "DI":
                case "IP":
                case "PC":      // deprecated as an alias for "IP" (still used by older XML files, like the one at http://tpoindex.github.io/crobots/)
                case "CS":
                case "DS":
                case "SS":
                case "ES":
                case "PS":      // this refers to "Processor Status", aka the 16-bit flags register (although DEBUG.COM refers to this as "PC", surprisingly)
                case "C":
                case "P":
                case "A":
                case "Z":
                case "S":
                case "T":
                case "I":
                case "D":
                case "V":
                    this.bindings[sBinding] = control;
                    this.cLiveRegs++;
                    fBound = true;
                    break;
                default:
                    fBound = this.parent.setBinding.call(this, sHTMLType, sBinding, control);
                    break;
                }
                return fBound;
            };
            
            /**
             * probeAddr(addr)
             *
             * Used by the Debugger to probe addresses without risk of triggering a page fault, and by internal
             * functions, like fnFaultMessage(), that also need to avoid triggering faults, since they're not part
             * of standard CPU operation.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number|null} byte (8-bit) value at that address, or null if invalid
             */
            X86CPU.prototype.probeAddr = function(addr)
            {
                var block = this.aMemBlocks[(addr & this.nMemMask) >>> this.nBlockShift];
                if (block.type == Memory.TYPE.UNPAGED) {
                    block = this.mapPageBlock(addr, false, true);
                    if (!block) return null;
                }
                return block.readByteDirect(addr & this.nBlockLimit, addr);
            };
            
            /**
             * getByte(addr)
             *
             * Use bus.getByte() for physical addresses, and cpu.getByte() for linear addresses; the latter takes care
             * of paging, cycle counts, and BACKTRACK states, if any.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.getByte = function getByte(addr)
            {
                if (BACKTRACK) this.backTrack.btiMemLo = this.bus.readBackTrack(addr);
                return this.aMemBlocks[(addr & this.nMemMask) >>> this.nBlockShift].readByte(addr & this.nBlockLimit, addr);
            };
            
            /**
             * getShort(addr)
             *
             * Use bus.getShort() for physical addresses, and cpu.getShort() for linear addresses; the latter takes care
             * of paging, cycle counts, and BACKTRACK states, if any.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.getShort = function getShort(addr)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nMemMask) >>> this.nBlockShift;
                /*
                 * On the 8088, it takes 4 cycles to read the additional byte REGARDLESS whether the address is odd or even.
                 * TODO: For the 8086, the penalty is actually "(addr & 0x1) << 2" (4 additional cycles only when the address is odd).
                 */
                this.nStepCycles -= this.cycleCounts.nWordCyclePenalty;
            
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.bus.readBackTrack(addr);
                    this.backTrack.btiMemHi = this.bus.readBackTrack(addr + 1);
                }
                if (off < this.nBlockLimit) {
                    return this.aMemBlocks[iBlock].readShort(off, addr);
                }
                return this.aMemBlocks[iBlock].readByte(off, addr) | (this.aMemBlocks[(iBlock + 1) & this.nBlockMask].readByte(0, addr + 1) << 8);
            };
            
            /**
             * getLong(addr)
             *
             * Use bus.getLong() for physical addresses, and cpu.getLong() for linear addresses; the latter takes care
             * of paging, cycle counts, and BACKTRACK states, if any.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} long (32-bit) value at that address
             */
            X86CPU.prototype.getLong = function getLong(addr)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nMemMask) >>> this.nBlockShift;
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.bus.readBackTrack(addr);
                    this.backTrack.btiMemHi = this.bus.readBackTrack(addr + 1);
                }
                if (off < this.nBlockLimit - 2) {
                    return this.aMemBlocks[iBlock].readLong(off, addr);
                }
                var nShift = (off & 0x3) << 3;
                return (this.aMemBlocks[iBlock].readLong(off & ~0x3, addr) >>> nShift) | (this.aMemBlocks[(iBlock + 1) & this.nBlockMask].readLong(0, addr + 3) << (32 - nShift));
            };
            
            /**
             * setByte(addr, b)
             *
             * Use bus.setByte() for physical addresses, and cpu.setByte() for linear addresses; the latter takes care
             * of paging, cycle counts, and BACKTRACK states, if any.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @param {number} b is the byte (8-bit) value to write (which we truncate to 8 bits; required by opSTOSb)
             */
            X86CPU.prototype.setByte = function setByte(addr, b)
            {
                if (BACKTRACK) this.bus.writeBackTrack(addr, this.backTrack.btiMemLo);
                this.aMemBlocks[(addr & this.nMemMask) >>> this.nBlockShift].writeByte(addr & this.nBlockLimit, b & 0xff, addr);
            };
            
            /**
             * setShort(addr, w)
             *
             * Use bus.setShort() for physical addresses, and cpu.setShort() for linear addresses; the latter takes care
             * of paging, cycle counts, and BACKTRACK states, if any.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @param {number} w is the word (16-bit) value to write (which we truncate to 16 bits to be safe)
             */
            X86CPU.prototype.setShort = function setShort(addr, w)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nMemMask) >>> this.nBlockShift;
                /*
                 * On the 8088, it takes 4 cycles to write the additional byte REGARDLESS whether the address is odd or even.
                 * TODO: For the 8086, the penalty is actually "(addr & 0x1) << 2" (4 additional cycles only when the address is odd).
                 */
                this.nStepCycles -= this.cycleCounts.nWordCyclePenalty;
            
                if (BACKTRACK) {
                    this.bus.writeBackTrack(addr, this.backTrack.btiMemLo);
                    this.bus.writeBackTrack(addr + 1, this.backTrack.btiMemHi);
                }
                if (off < this.nBlockLimit) {
                    this.aMemBlocks[iBlock].writeShort(off, w & 0xffff, addr);
                    return;
                }
                this.aMemBlocks[iBlock++].writeByte(off, w & 0xff, addr);
                this.aMemBlocks[iBlock & this.nBlockMask].writeByte(0, (w >> 8) & 0xff, addr + 1);
            };
            
            /**
             * setLong(addr, l)
             *
             * Use bus.setLong() for physical addresses, and cpu.setLong() for linear addresses; the latter takes care
             * of paging, cycle counts, and BACKTRACK states, if any.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @param {number} l is the long (32-bit) value to write
             */
            X86CPU.prototype.setLong = function setLong(addr, l)
            {
                var off = addr & this.nBlockLimit;
                var iBlock = (addr & this.nMemMask) >>> this.nBlockShift;
                this.nStepCycles -= this.cycleCounts.nWordCyclePenalty;
            
                if (BACKTRACK) {
                    this.bus.writeBackTrack(addr, this.backTrack.btiMemLo);
                    this.bus.writeBackTrack(addr + 1, this.backTrack.btiMemHi);
                }
                if (off < this.nBlockLimit - 2) {
                    this.aMemBlocks[iBlock].writeLong(off, l, addr);
                    return;
                }
                var lPrev, nShift = (off & 0x3) << 3;
                off &= ~0x3;
                lPrev = this.aMemBlocks[iBlock].readLong(off, addr);
                this.aMemBlocks[iBlock].writeLong(off, (lPrev & ~(-1 << nShift)) | (l << nShift), addr);
                iBlock = (iBlock + 1) & this.nBlockMask;
                addr += 3;
                lPrev = this.aMemBlocks[iBlock].readLong(0, addr);
                this.aMemBlocks[iBlock].writeLong(0, (lPrev & (-1 << nShift)) | (l >>> (32 - nShift)), addr);
            };
            
            /**
             * getEAByte(seg, off)
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.getEAByte = function(seg, off)
            {
                this.segEA = seg;
                this.regEA = seg.checkRead(this.offEA = off, 1);
                if (this.opFlags & X86.OPFLAG.NOREAD) return 0;
                var b = this.getByte(this.regEA);
                if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiMemLo;
                return b;
            };
            
            /**
             * getEAByteData(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.getEAByteData = function(off)
            {
                return this.getEAByte(this.segData, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * getEAByteStack(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.getEAByteStack = function(off)
            {
                return this.getEAByte(this.segStack, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * getEAWord(seg, off)
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.getEAWord = function(seg, off)
            {
                this.segEA = seg;
                this.regEA = seg.checkRead(this.offEA = off, (I386? this.dataSize : 2));
                if (this.opFlags & X86.OPFLAG.NOREAD) return 0;
                var w = this.getWord(this.regEA);
                if (BACKTRACK) {
                    this.backTrack.btiEALo = this.backTrack.btiMemLo;
                    this.backTrack.btiEAHi = this.backTrack.btiMemHi;
                }
                return w;
            };
            
            /**
             * getEAWordData(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.getEAWordData = function(off)
            {
                return this.getEAWord(this.segData, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * getEAWordStack(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.getEAWordStack = function(off)
            {
                return this.getEAWord(this.segStack, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * modEAByte(seg, off)
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.modEAByte = function(seg, off)
            {
                this.segEA = seg;
                this.regEAWrite = this.regEA = seg.checkRead(this.offEA = off, 1);
                if (this.opFlags & X86.OPFLAG.NOREAD) return 0;
                var b = this.getByte(this.regEA);
                if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiMemLo;
                return b;
            };
            
            /**
             * modEAByteData(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.modEAByteData = function(off)
            {
                return this.modEAByte(this.segData, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * modEAByteStack(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.modEAByteStack = function(off)
            {
                return this.modEAByte(this.segStack, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * modEAWord(seg, off)
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.modEAWord = function(seg, off)
            {
                this.segEA = seg;
                this.regEAWrite = this.regEA = seg.checkRead(this.offEA = off, (I386? this.dataSize : 2));
                if (this.opFlags & X86.OPFLAG.NOREAD) return 0;
                var w = this.getWord(this.regEA);
                if (BACKTRACK) {
                    this.backTrack.btiEALo = this.backTrack.btiMemLo;
                    this.backTrack.btiEAHi = this.backTrack.btiMemHi;
                }
                return w;
            };
            
            /**
             * modEAWordData(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.modEAWordData = function(off)
            {
                return this.modEAWord(this.segData, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * modEAWordStack(off)
             *
             * @this {X86CPU}
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.modEAWordStack = function(off)
            {
                return this.modEAWord(this.segStack, off & (I386? this.addrMask : 0xffff));
            };
            
            /**
             * setEAByte(b)
             *
             * @this {X86CPU}
             * @param {number} b is the byte (8-bit) value to write
             */
            X86CPU.prototype.setEAByte = function(b)
            {
                if (this.opFlags & X86.OPFLAG.NOWRITE) return;
                if (BACKTRACK) this.backTrack.btiMemLo = this.backTrack.btiEALo;
                this.setByte(this.segEA.checkWrite(this.offEA, 1), b);
            };
            
            /**
             * setEAWord(w)
             *
             * @this {X86CPU}
             * @param {number} w is the word (16-bit) value to write
             */
            X86CPU.prototype.setEAWord = function(w)
            {
                if (this.opFlags & X86.OPFLAG.NOWRITE) return;
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiEALo;
                    this.backTrack.btiMemHi = this.backTrack.btiEAHi;
                }
                if (!I386) {
                    this.setShort(this.segEA.checkWrite(this.offEA, 2), w);
                } else {
                    this.setWord(this.segEA.checkWrite(this.offEA, this.dataSize), w);
                }
            };
            
            /**
             * getSOByte(seg, off)
             *
             * This is like getEAByte(), but it does NOT update regEA.
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.getSOByte = function(seg, off)
             {
                return this.getByte(seg.checkRead(off, 1));
            };
            
            /**
             * getSOWord(seg, off)
             *
             * This is like getEAWord(), but it does NOT update regEA.
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @return {number} word (16-bit) value at that address
             */
            X86CPU.prototype.getSOWord = function(seg, off)
            {
                if (!I386) {
                    return this.getShort(seg.checkRead(off, 2));
                } else {
                    return this.getWord(seg.checkRead(off, this.dataSize));
                }
            };
            
            /**
             * setSOByte(seg, off, b)
             *
             * This is like setEAByte(), but it does NOT update regEAWrite.
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @param {number} b is the byte (8-bit) value to write
             */
            X86CPU.prototype.setSOByte = function(seg, off, b)
            {
                this.setByte(seg.checkWrite(off, 1), b);
            };
            
            /**
             * setSOWord(seg, off, w)
             *
             * This is like setEAWord(), but it does NOT update regEAWrite.
             *
             * @this {X86CPU}
             * @param {X86Seg} seg register (eg, segDS)
             * @param {number} off is a segment-relative offset
             * @param {number} w is the word (16-bit) value to write
             */
            X86CPU.prototype.setSOWord = function(seg, off, w)
            {
                if (!I386) {
                    this.setShort(seg.checkWrite(off, 2), w);
                } else {
                    this.setWord(seg.checkWrite(off, this.dataSize), w);
                }
            };
            
            /**
             * getBytePrefetch(addr)
             *
             * Return the next byte from the prefetch queue, prefetching it now if necessary.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} byte (8-bit) value at that address
             */
            X86CPU.prototype.getBytePrefetch = function(addr)
            {
                if (this.opFlags & X86.OPFLAG.NOREAD) return 0;
                var b;
                if (!this.cbPrefetchQueued) {
                    if (MAXDEBUG) {
                        this.printMessage("  getBytePrefetch[" + this.iPrefetchTail + "]: filling");
                        this.assert(addr == this.addrPrefetchHead, "X86CPU.getBytePrefetch(" + str.toHex(addr) + "): invalid head address (" + str.toHex(this.addrPrefetchHead) + ")");
                        this.assert(this.iPrefetchTail == this.iPrefetchHead, "X86CPU.getBytePrefetch(" + str.toHex(addr) + "): head (" + this.iPrefetchHead + ") does not match tail (" + this.iPrefetchTail + ")");
                    }
                    this.fillPrefetch(1);
                    this.nBusCycles += 4;
                    /*
                     * This code effectively inlines this.fillPrefetch(1), but without queueing the byte, so it's an optimization
                     * with side-effects we may not want, and in any case, while it seemed to improve Safari's performance slightly,
                     * it did nothing for the oddball Chrome performance I'm seeing with PREFETCH enabled.
                     *
                     *      b = this.aMemBlocks[(addr & this.nMemMask) >>> this.nBlockShift].readByte(addr & this.nBlockLimit, addr);
                     *      this.nBusCycles += 4;
                     *      this.cbPrefetchValid = 0;
                     *      this.addrPrefetchHead = (addr + 1) & this.nMemMask;
                     *      return b;
                     */
                }
                b = this.aPrefetch[this.iPrefetchTail] & 0xff;
                if (MAXDEBUG) {
                    this.printMessage("  getBytePrefetch[" + this.iPrefetchTail + "]: " + str.toHex(addr) + ":" + str.toHexByte(b));
                    this.assert(addr == (this.aPrefetch[this.iPrefetchTail] >> 8), "X86CPU.getBytePrefetch(" + str.toHex(addr) + "): invalid tail address (" + str.toHex(this.aPrefetch[this.iPrefetchTail] >> 8) + ")");
                }
                this.iPrefetchTail = (this.iPrefetchTail + 1) & X86CPU.PREFETCH.MASK;
                this.cbPrefetchQueued--;
                return b;
            };
            
            /**
             * getShortPrefetch(addr)
             *
             * Return the next short from the prefetch queue.  There are 3 cases to consider:
             *
             *  1) Both bytes have been prefetched; no bytes need be fetched from memory
             *  2) Only the low byte has been prefetched; the high byte must be fetched from memory
             *  3) Neither byte has been prefetched; both bytes must be fetched from memory
             *
             * However, since we want to mirror getBytePrefetch's behavior of fetching all bytes through
             * the prefetch queue, we're taking the easy way out and simply calling getBytePrefetch() twice.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} short (16-bit) value at that address
             */
            X86CPU.prototype.getShortPrefetch = function(addr)
            {
                return this.getBytePrefetch(addr) | (this.getBytePrefetch(addr + 1) << 8);
            };
            
            /**
             * getLongPrefetch(addr)
             *
             * Return the next long from the prefetch queue.  Similar to getShortPrefetch(), we take the
             * easy way out and call getShortPrefetch() twice.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} long (32-bit) value at that address
             */
            X86CPU.prototype.getLongPrefetch = function(addr)
            {
                return this.getShortPrefetch(addr) | (this.getShortPrefetch(addr + 2) << 16);
            };
            
            /**
             * getWordPrefetch(addr)
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address
             * @return {number} short (16-bit) or long (32-bit value as appropriate
             */
            X86CPU.prototype.getWordPrefetch = function(addr)
            {
                return (I386 && this.dataSize == 4? this.getLongPrefetch(addr) : this.getShortPrefetch(addr));
            };
            
            /**
             * fillPrefetch(n)
             *
             * Fill the prefetch queue with n instruction bytes.
             *
             * @this {X86CPU}
             * @param {number} n is the number of instruction bytes to fetch
             */
            X86CPU.prototype.fillPrefetch = function(n)
            {
                while (n-- > 0 && this.cbPrefetchQueued < X86CPU.PREFETCH.QUEUE) {
                    var addr = this.addrPrefetchHead;
                    var b = this.aMemBlocks[(addr & this.nMemMask) >>> this.nBlockShift].readByte(addr & this.nBlockLimit, addr);
                    this.aPrefetch[this.iPrefetchHead] = b | (addr << 8);
                    if (MAXDEBUG) this.printMessage("     fillPrefetch[" + this.iPrefetchHead + "]: " + str.toHex(addr) + ":" + str.toHexByte(b));
                    this.addrPrefetchHead = (addr + 1) & this.nMemMask;
                    this.iPrefetchHead = (this.iPrefetchHead + 1) & X86CPU.PREFETCH.MASK;
                    this.cbPrefetchQueued++;
                    /*
                     * We could probably allow cbPrefetchValid to grow as large as X86CPU.PREFETCH.ARRAY-1, but I'm not
                     * sure there's any advantage to that; certainly the tiny values we expect to see from advancePrefetch()
                     * wouldn't justify that.
                     */
                    if (this.cbPrefetchValid < X86CPU.PREFETCH.QUEUE) this.cbPrefetchValid++;
                }
            };
            
            /**
             * flushPrefetch(addr)
             *
             * Empty the prefetch queue.
             *
             * @this {X86CPU}
             * @param {number} addr is a linear address of the current program counter (regLIP)
             */
            X86CPU.prototype.flushPrefetch = function(addr)
            {
                this.addrPrefetchHead = addr;
                this.iPrefetchTail = this.iPrefetchHead = this.cbPrefetchQueued = this.cbPrefetchValid = 0;
                if (MAXDEBUG && addr !== undefined) this.printMessage("    flushPrefetch[-]: " + str.toHex(addr));
            };
            
            /**
             * advancePrefetch(inc)
             *
             * Advance the prefetch queue tail.  This is used, for example, in cases where the IP is rewound
             * to the start of a repeated string instruction (ie, a string instruction with a REP and possibly
             * other prefixes).
             *
             * If a negative increment takes us beyond what's still valid in the prefetch queue, or if a positive
             * increment takes us beyond what's been queued so far, then we simply flush the queue.
             *
             * @this {X86CPU}
             * @param {number} inc (may be +/-)
             */
            X86CPU.prototype.advancePrefetch = function(inc)
            {
                if (inc < 0 && this.cbPrefetchQueued - inc <= this.cbPrefetchValid || inc > 0 && inc < this.cbPrefetchQueued) {
                    this.iPrefetchTail = (this.iPrefetchTail + inc) & X86CPU.PREFETCH.MASK;
                    this.cbPrefetchQueued -= inc;
                } else {
                    this.flushPrefetch(this.regLIP);
                    if (MAXDEBUG) this.printMessage("advancePrefetch(" + inc + "): flushed");
                }
            };
            
            /**
             * getIPByte()
             *
             * @this {X86CPU}
             * @return {number} byte at the current IP; IP advanced by 1
             */
            X86CPU.prototype.getIPByte = function()
            {
                var b = (PREFETCH? this.getBytePrefetch(this.regLIP) : this.getByte(this.regLIP));
                if (BACKTRACK) this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                this.advanceIP(1);
                return b;
            };
            
            /**
             * getIPShort()
             *
             * @this {X86CPU}
             * @return {number} short at the current IP; IP advanced by 2
             */
            X86CPU.prototype.getIPShort = function()
            {
                var w = (PREFETCH? this.getShortPrefetch(this.regLIP) : this.getShort(this.regLIP));
                if (BACKTRACK) {
                    this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                    this.bus.updateBackTrackCode(this.regLIP + 1, this.backTrack.btiMemHi);
                }
                this.advanceIP(2);
                return w;
            };
            
            /**
             * getIPLong()
             *
             * @this {X86CPU}
             * @return {number} long at the current IP; IP advanced by 4
             */
            X86CPU.prototype.getIPLong = function()
            {
                var l = (PREFETCH? this.getLongPrefetch(this.regLIP) : this.getLong(this.regLIP));
                if (BACKTRACK) {
                    this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                    this.bus.updateBackTrackCode(this.regLIP + 1, this.backTrack.btiMemHi);
                }
                this.advanceIP(4);
                return l;
            };
            
            /**
             * getIPAddr()
             *
             * @this {X86CPU}
             * @return {number} word at the current IP; IP advanced by 2 or 4, depending on address size
             */
            X86CPU.prototype.getIPAddr = function()
            {
                /*
                 * TODO: Add PREFETCH support to this function
                 */
                var w = this.getAddr(this.regLIP);
                if (BACKTRACK) {
                    this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                    this.bus.updateBackTrackCode(this.regLIP + 1, this.backTrack.btiMemHi);
                }
                this.advanceIP(this.addrSize);
                return w;
            };
            
            /**
             * getIPWord()
             *
             * @this {X86CPU}
             * @return {number} word at the current IP; IP advanced by 2 or 4, depending on operand size
             */
            X86CPU.prototype.getIPWord = function()
            {
                var w = (PREFETCH? this.getWordPrefetch(this.regLIP) : this.getWord(this.regLIP));
                if (BACKTRACK) {
                    this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                    this.bus.updateBackTrackCode(this.regLIP + 1, this.backTrack.btiMemHi);
                }
                this.advanceIP(this.dataSize);
                return w;
            };
            
            /**
             * getIPDisp()
             *
             * @this {X86CPU}
             * @return {number} sign-extended value from the byte at the current IP; IP advanced by 1
             */
            X86CPU.prototype.getIPDisp = function()
            {
                var w = ((PREFETCH? this.getBytePrefetch(this.regLIP) : this.getByte(this.regLIP)) << 24) >> 24;
                if (BACKTRACK) this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                this.advanceIP(1);
                return w;
            };
            
            /**
             * getSIBAddr(mod)
             *
             * @this {X86CPU}
             * @param {number} mod
             * @return {number}
             */
            X86CPU.prototype.getSIBAddr = function(mod)
            {
                var b = PREFETCH? this.getBytePrefetch(this.regLIP) : this.getByte(this.regLIP);
                if (BACKTRACK) this.bus.updateBackTrackCode(this.regLIP, this.backTrack.btiMemLo);
                this.advanceIP(1);
                return X86ModSIB.aOpModSIB[b].call(this, mod);
            };
            
            /**
             * popWord()
             *
             * @this {X86CPU}
             * @return {number} word popped from the current SP; SP increased by 2 or 4
             */
            X86CPU.prototype.popWord = function()
            {
                var w = this.getWord(this.regLSP);
                this.regLSP = (this.regLSP + (I386? this.dataSize : 2))|0;
                /*
                 * Properly comparing regLSP to regLSPLimit would normally require coercing both to unsigned
                 * (ie, floating-point) values.  But instead, we do a subtraction, (regLSPLimit - regLSP), and
                 * if the result is negative, we need only be concerned if the signs of both numbers are the same
                 * (ie, the sign of their XOR'ed union is positive).
                 *
                 * TODO: I'm combining the old 8088 address-wrap check with the new segment-limit check,
                 * even though the correct time to do the latter is immediately BEFORE the fetch, not AFTER;
                 * I'm working around this for now by applying a -1 fudge factor to the fault check below.
                 */
                var off = ((this.regLSPLimit - this.regLSP)|0);
                if (off < 0 && (this.regLSPLimit ^ this.regLSP) >= 0) {
                    /*
                     * There's no such thing as an SS fault on the 8086/8088, and I'm assuming that, on newer
                     * processors, when the stack segment limit is set to the maximum, it's OK for the stack to wrap.
                     */
                    if (this.model <= X86.MODEL_8088 || !this.segSS.fExpDown && this.segSS.limit == this.segSS.addrMask || this.segSS.fExpDown && !this.segSS.limit) {
                        this.setSP((this.regLSP - this.segSS.base) & this.segSS.addrMask);
                    } else if (off < -1) {          // fudge factor
                        X86.fnFault.call(this, X86.EXCEPTION.SS_FAULT, 0);
                    }
                }
                return w;
            };
            
            /**
             * pushWord(w)
             *
             * @this {X86CPU}
             * @param {number} w is the word (16-bit) value to push at current SP; SP decreased by 2 or 4
             */
            X86CPU.prototype.pushWord = function(w)
            {
                this.assert((w & this.dataMask) == w);
                this.regLSP = (this.regLSP - (I386? this.dataSize : 2))|0;
                /*
                 * Properly comparing regLSP to regLSPLimitLow would normally require coercing both to unsigned
                 * (ie, floating-point) values.  But instead, we do a subtraction, (regLSP - regLSPLimitLow), and
                 * if the result is negative, we need only be concerned if the signs of both numbers are the same
                 * (ie, the sign of their XOR'ed union is positive).
                 */
                if (((this.regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ this.regLSP) >= 0) {
                    /*
                     * There's no such thing as an SS fault on the 8086/8088, and I'm assuming that, on newer
                     * processors, when the stack segment limit is set to the maximum, it's OK for the stack to wrap.
                     */
                    if (this.model <= X86.MODEL_8088 || !this.segSS.fExpDown && this.segSS.limit == this.segSS.addrMask || this.segSS.fExpDown && !this.segSS.limit) {
                        this.setSP((this.regLSP - this.segSS.base) & this.segSS.addrMask);
                    } else {
                        X86.fnFault.call(this, X86.EXCEPTION.SS_FAULT, 0);
                    }
                }
                this.setWord(this.regLSP, w);
            };
            
            /**
             * setDMA(fActive)
             *
             * This is called by the ChipSet component to update DMA status.
             *
             * @this {X86CPU}
             * @param {boolean} fActive is true to set INTFLAG.DMA, false to clear
             *
             X86CPU.prototype.setDMA = function(fActive)
             {
                if (this.chipset) {
                    if (fActive) {
                        this.intFlags |= X86.INTFLAG.DMA;
                    } else {
                        this.intFlags &= ~X86.INTFLAG.DMA;
                    }
                }
            };
             */
            
            /**
             * checkINTR()
             *
             * This must only be called when intFlags (containing the simulated INTFLAG.INTR signal) is known to be set.
             * Note that it's perfectly possible that between the time updateINTR(true) was called and we request the
             * interrupt vector number below, the interrupt could have been cleared or masked, in which case getIRRVector()
             * will return -1 and we'll simply clear INTFLAG.INTR.
             *
             * intFlags has been overloaded with the INTFLAG.TRAP bit as well, since the acknowledgment of h/w interrupts
             * and the Trap flag are similar; they must both honor the NOINTR suppression flag, and stepCPU() shouldn't
             * have to check multiple variables when deciding whether to simulate an interrupt.
             *
             * This function also includes a check for the new async INTFLAG.DMA flag, which is triggered by a ChipSet call
             * to setDMA().  This DMA flag actually has nothing to do with interrupts; it's simply an expedient way to
             * piggy-back on the CPU's execution logic, to help drive async DMA requests.
             *
             * Originally, DMA requests (eg, FDC or HDC I/O operations) were all handled synchronously, since no actual
             * I/O was required to satisfy the request; from the CPU's perspective, this meant DMA operations were virtually
             * instantaneous.  However, with the introduction of remote disk connections, some actual I/O may now be required;
             * in practice, this means that the FIRST byte requested as part of a DMA operation may require a callback to
             * finish, while all remaining bytes will be retrieved during subsequent checkINTR() calls -- unless of course
             * additional remote I/O operations are required to complete the DMA operation.
             *
             * As a result, the CPU will run slightly slower while an async DMA request is in progress, but the slowdown
             * should be negligible.  One downside is that this slowdown will be in effect for the entire duration of the
             * I/O (ie, even while we're waiting for the remote I/O to finish), so the ChipSet component should avoid
             * calling setDMA() whenever possible.
             *
             * TODO: While comparing SYMDEB tracing in both PCjs and VMware, I noticed that after single-stepping ANY
             * segment-load instruction, SYMDEB would get control immediately after that instruction in VMware, whereas
             * I delay acknowledgment of the Trap flag until the *following* instruction, so in PCjs, SYMDEB doesn't get
             * control until the following instruction.  I think PCjs behavior is correct, at least for SS.
             *
             * ERRATA: Early revisions of the 8086/8088 failed to suppress hardware interrupts (and possibly also Trap
             * acknowledgements) after an SS load, but Intel corrected the problem at some point; however, I don't know when
             * that change was made or which IBM PC models may have been affected, if any.  TODO: More research required.
             *
             * WARNING: There is also a priority consideration here.  On the 8086/8088, hardware interrupts have higher
             * priority than Trap interrupts (which is why the code below is written the way it is).  A potentially
             * undesirable side-effect is that a hardware interrupt handler could end up being single-stepped if an
             * external interrupt occurs immediately after the Trap flag is set.  This is why some 8086 debuggers temporarily
             * mask all hardware interrupts during a single-step operation (although that doesn't help with NMIs generated
             * by a coprocessor).  As of the 80286, those priorities were inverted, giving the Trap interrupt higher priority
             * than external interrupts.
             *
             * TODO: Determine the priorities for the 80186.
             *
             * @this {X86CPU}
             * @return {boolean} true if h/w interrupt (or trap) has just been acknowledged, false if not
             */
            X86CPU.prototype.checkINTR = function()
            {
                this.assert(this.intFlags);
                if (!(this.opFlags & X86.OPFLAG.NOINTR)) {
                    /*
                     * As discussed above, the 8086/8088 give hardware interrupts higher priority than the TRAP interrupt,
                     * whereas the 80286 and up give TRAPs higher priority.
                     */
                    var iPriority = (this.model < X86.MODEL_80286? 0 : 1);
                    for (var cPriorities = 0; cPriorities < 2; cPriorities++) {
                        switch(iPriority) {
                        case 0:
                            if ((this.intFlags & X86.INTFLAG.INTR) && (this.regPS & X86.PS.IF)) {
                                var nIDT = this.chipset.getIRRVector();
                                if (nIDT >= -1) {
                                    this.intFlags &= ~X86.INTFLAG.INTR;
                                    if (nIDT >= 0) {
                                        this.intFlags &= ~X86.INTFLAG.HALT;
                                        X86.fnINT.call(this, nIDT, null, 11);
                                        return true;
                                    }
                                }
                            }
                            break;
                        case 1:
                            if ((this.intFlags & X86.INTFLAG.TRAP)) {
                                this.intFlags &= ~X86.INTFLAG.TRAP;
                                X86.fnINT.call(this, X86.EXCEPTION.TRAP, null, 11);
                                return true;
                            }
                            break;
                        }
                        iPriority = 1 - iPriority;
                    }
                }
                if (this.intFlags & X86.INTFLAG.DMA) {
                    if (!this.chipset.checkDMA()) {
                        this.intFlags &= ~X86.INTFLAG.DMA;
                    }
                }
                return false;
            };
            
            /**
             * updateINTR(fRaise)
             *
             * This is called by the ChipSet component whenever a h/w interrupt needs to be simulated.
             * This is how the PIC component simulates raising the INTFLAG.INTR signal.  We will honor the request
             * only if we have a reference back to the ChipSet component.  The CPU will then "respond" by calling
             * checkINTR() and request the corresponding interrupt vector from the ChipSet.
             *
             * @this {X86CPU}
             * @param {boolean} fRaise is true to raise INTFLAG.INTR, false to lower
             */
            X86CPU.prototype.updateINTR = function(fRaise)
            {
                if (this.chipset) {
                    if (fRaise) {
                        this.intFlags |= X86.INTFLAG.INTR;
                    } else {
                        this.intFlags &= ~X86.INTFLAG.INTR;
                    }
                }
            };
            
            /**
             * delayINTR()
             *
             * This is called by the ChipSet component whenever the IMR register is being unmasked, to avoid
             * interrupts being simulated too quickly. This works around a problem in the ROM BIOS "KBD_RESET"
             * (F000:E688) function, which is called with interrupts enabled by the "TST8" (F000:E30D) code.
             *
             * "KBD_RESET" appears to be written with the assumption that CLI is in effect, because it issues an
             * STI immediately after unmasking the keyboard IRQ.  And normally, the STI would delay INTFLAG.INTR
             * long enough to allow AH to be set to 0. But if interrupts are already enabled, an interrupt could
             * theoretically occur before the STI.  And since AH isn't initialized until after the STI, such an
             * interrupt would be missed.
             *
             * I'm assuming this never happens in practice because the PIC isn't that fast.  But for us to
             * guarantee that, we need to provide this function to the ChipSet component.
             *
             * @this {X86CPU}
             */
            X86CPU.prototype.delayINTR = function()
            {
                this.opFlags |= X86.OPFLAG.NOINTR;
            };
            
            /**
             * updateReg(sReg, nValue)
             *
             * This function helps updateStatus() by massaging the register names and values according to
             * CPU type before passing the call to displayValue(); in the "old days", updateStatus() called
             * displayValue() directly (although then it was called displayReg()).
             *
             * @this {X86CPU}
             * @param {string} sReg
             * @param {number} nValue
             */
            X86CPU.prototype.updateReg = function(sReg, nValue)
            {
                var cch = 4;
                if (sReg.length == 1) {
                    cch = 1;
                    nValue = nValue? 1 : 0;
                }
                if (this.model < 80386) {
                    if (sReg.length > 2) {
                        sReg = sReg.substr(1, 2);
                    }
                } else {
                    if (sReg == "PS" || sReg.length > 2) {
                        cch = 8;
                    }
                }
                this.displayValue(sReg, nValue, cch);
            };
            
            /**
             * updateStatus()
             *
             * This provides periodic Control Panel updates (eg, a few times per second; see STATUS_UPDATES_PER_SECOND).
             * this is where we take care of any DOM updates (eg, register values) while the CPU is running.
             *
             * Any high-frequency updates should be performed in updateVideo(), which should avoid DOM updates, since updateVideo()
             * can be called up to 60 times per second (see VIDEO_UPDATES_PER_SECOND).
             *
             * @this {X86CPU}
             * @param {boolean} [fForce] (true will display registers even if the CPU is running and "live" registers are not enabled)
             */
            X86CPU.prototype.updateStatus = function(fForce)
            {
                if (this.cLiveRegs) {
                    if (fForce || !this.aFlags.fRunning || this.aFlags.fDisplayLiveRegs) {
                        this.updateReg("EAX", this.regEAX);
                        this.updateReg("EBX", this.regEBX);
                        this.updateReg("ECX", this.regECX);
                        this.updateReg("EDX", this.regEDX);
                        this.updateReg("ESP", this.getSP());
                        this.updateReg("EBP", this.regEBP);
                        this.updateReg("ESI", this.regESI);
                        this.updateReg("EDI", this.regEDI);
                        this.updateReg("CS", this.getCS());
                        this.updateReg("DS", this.getDS());
                        this.updateReg("SS", this.getSS());
                        this.updateReg("ES", this.getES());
                        this.updateReg("EIP", this.getIP());
                        var regPS = this.getPS();
                        this.updateReg("PS", regPS);
                        this.updateReg("V", (regPS & X86.PS.OF));
                        this.updateReg("D", (regPS & X86.PS.DF));
                        this.updateReg("I", (regPS & X86.PS.IF));
                        this.updateReg("T", (regPS & X86.PS.TF));
                        this.updateReg("S", (regPS & X86.PS.SF));
                        this.updateReg("Z", (regPS & X86.PS.ZF));
                        this.updateReg("A", (regPS & X86.PS.AF));
                        this.updateReg("P", (regPS & X86.PS.PF));
                        this.updateReg("C", (regPS & X86.PS.CF));
                    }
                }
            
                var controlSpeed = this.bindings["speed"];
                if (controlSpeed) controlSpeed.textContent = this.getSpeedCurrent();
            
                this.parent.updateStatus.call(this, fForce);
            };
            
            /**
             * stepCPU(nMinCycles)
             *
             * NOTE: Single-stepping should not be confused with the Trap flag; single-stepping is a Debugger
             * operation that's completely independent of Trap status.  The CPU can go in and out of Trap mode,
             * in and out of h/w interrupt service routines (ISRs), etc, but from the Debugger's perspective,
             * they're all one continuous stream of instructions that can be stepped or run at will.  Moreover,
             * stepping vs. running should never change the behavior of the simulation.
             *
             * Similarly, the Debugger's execution breakpoints have no involvement with the x86 breakpoint instruction
             * (0xCC); the Debugger monitors changes to the regLIP register to implement its own execution breakpoints.
             *
             * As a result, the Debugger's complete independence means you can run other 8086/8088 debuggers
             * (eg, DEBUG) inside the simulation without interference; you can even "debug" them with the Debugger.
             *
             * @this {X86CPU}
             * @param {number} nMinCycles (0 implies a single-step, and therefore breakpoints should be ignored)
             * @return {number} of cycles executed; 0 indicates a pre-execution condition (ie, an execution breakpoint
             * was hit), -1 indicates a post-execution condition (eg, a read or write breakpoint was hit), and a positive
             * number indicates successful completion of that many cycles (which should always be >= nMinCycles).
             */
            X86CPU.prototype.stepCPU = function(nMinCycles)
            {
                /*
                 * The Debugger uses fComplete to determine if the instruction completed (true) or was interrupted
                 * by a breakpoint or some other exceptional condition (false).  NOTE: this does NOT include JavaScript
                 * exceptions, which stepCPU() expects the caller to catch using its own exception handler.
                 *
                 * The CPU relies on the use of stopCPU() rather than fComplete, because the CPU never single-steps
                 * (ie, nMinCycles is always some large number), whereas the Debugger does.  And conversely, when the
                 * Debugger is single-stepping (even when performing multiple single-steps), fRunning is never set,
                 * so stopCPU() would have no effect as far as the Debugger is concerned.
                 */
                this.aFlags.fComplete = true;
            
                /*
                 * fDebugCheck is true if we need to "check" every instruction with the Debugger.
                 */
                var fDebugCheck = this.aFlags.fDebugCheck = (DEBUGGER && this.dbg && this.dbg.checksEnabled());
            
                /*
                 * nDebugState is checked only when fDebugCheck is true, and its sole purpose is to tell the first call
                 * to checkInstruction() that it can skip breakpoint checks, and that will be true ONLY when fStarting is
                 * true OR nMinCycles is zero (the latter means the Debugger is single-stepping).
                 *
                 * Once we snap fStarting, we clear it, because technically, we've moved beyond "starting" and have
                 * officially "started" now.
                 */
                var nDebugState = (!nMinCycles)? -1 : (this.aFlags.fStarting? 0 : 1);
                this.aFlags.fStarting = false;
            
                /*
                 * We move the minimum cycle count to nStepCycles (the number of cycles left to step), so that other
                 * functions have the ability to force that number to zero (eg, stopCPU()), and thus we don't have to check
                 * any other criteria to determine whether we should continue stepping or not.
                 */
                this.nBurstCycles = this.nStepCycles = nMinCycles;
            
                /*
                 * NOTE: Even though runCPU() calls updateAllTimers(), we need an additional call here if we're being
                 * called from the Debugger, so that any single-stepping will update the timers as well.
                 */
                if (this.chipset && !nMinCycles) this.chipset.updateAllTimers();
            
                /*
                 * Let's also suppress h/w interrupts whenever the Debugger is single-stepping an instruction; I'm loathe
                 * to allow Debugger interactions to affect the behavior of the virtual machine in ANY way, but I'm making
                 * this small concession to avoid the occasional and sometimes unexpected Debugger command that ends up
                 * stepping into a hardware interrupt service routine (ISR).
                 *
                 * Note that this is similar to the problem discussed in checkINTR() regarding the priority of external h/w
                 * interrupts vs. Trap interrupts, but they require different solutions, because our Debugger operates
                 * independently of the CPU.
                 *
                 * One exception I make here is when you've asked the Debugger to display PIC messages, the idea being that
                 * if you're watching the PIC that closely, then you want to hardware interrupts to occur regardless.
                 */
                if (!nMinCycles && !this.messageEnabled(Messages.PIC)) this.opFlags |= X86.OPFLAG.NOINTR;
            
                do {
                    var opPrefixes = this.opFlags & X86.OPFLAG_PREFIXES;
                    if (opPrefixes) {
                        this.opPrefixes |= opPrefixes;
                    } else {
                        /*
                         * opLIP is used, among other things, to help string instructions rewind to the first prefix
                         * byte whenever the instruction needs to be repeated.  Repeating string instructions in this
                         * manner (essentially restarting them) is a bit heavy-handed, but ultimately it's more compatible,
                         * because it allows hardware interrupts (as well as Trap processing and Debugger single-stepping)
                         * to occur at any point during the string operation, without any additional effort.
                         *
                         * NOTE: The way we restart string instructions actually fixes an 8086/8088 flaw, because string
                         * instructions with multiple prefixes (eg, a REP and a segment override) would not be restarted
                         * properly following a hardware interrupt.  The recommended workarounds were to either turn off
                         * interrupts or to follow the string instruction with a LOOPNZ back to the first prefix byte.
                         * To emulate the flawed behavior, turn on BUGS_8086.
                         */
                        this.opLIP = this.regLIP;
                        this.segData = this.segDS;
                        this.segStack = this.segSS;
                        this.regEA = this.regEAWrite = X86.ADDR_INVALID;
            
                        if (I386 && (this.opPrefixes & (X86.OPFLAG.ADDRSIZE | X86.OPFLAG.DATASIZE))) {
                            this.resetSizes();
                        }
            
                        this.opPrefixes = this.opFlags & X86.OPFLAG.REPEAT;
            
                        if (this.intFlags) {
                            if (this.checkINTR()) {
                                if (!nMinCycles) {
                                    this.assert(DEBUGGER);  // nMinCycles of zero should be generated ONLY by the Debugger
                                    if (DEBUGGER) {
                                        this.println("interrupt dispatched");
                                        this.opFlags = 0;
                                        break;
                                    }
                                }
                            }
                            if (this.intFlags & X86.INTFLAG.HALT) {
                                /*
                                 * As discussed in opHLT(), the CPU is never REALLY halted by a HLT instruction; instead,
                                 * opHLT() sets X86.INTFLAG.HALT, signalling to us that we're free to end the current burst
                                 * AND that we should not execute any more instructions until checkINTR() indicates a hardware
                                 * interrupt has been requested.
                                 *
                                 * One downside to this approach is that it *might* appear to the careful observer that we
                                 * executed a full complement of instructions during bursts where X86.INTFLAG.HALT was set,
                                 * when in fact we did not.  However, the steady advance of the overall cycle count, and thus
                                 * the steady series calls to stepCPU(), is needed to ensure that timer updates, video updates,
                                 * etc, all continue to occur at the expected rates.
                                 *
                                 * If necessary, we can add another bookkeeping cycle counter (eg, one that keeps tracks of the
                                 * number of cycles during which we did not actually execute any instructions).
                                 */
                                this.nStepCycles = 0;
                                this.opFlags = 0;
                                break;
                            }
                        }
                    }
            
                    if (DEBUGGER && fDebugCheck) {
                        if (this.dbg.checkInstruction(this.regLIP, nDebugState)) {
                            this.stopCPU();
                            break;
                        }
                        nDebugState = 1;
                    }
            
                    if (SAMPLER) {
                        if (++this.iSampleFreq >= this.nSampleFreq) {
                            this.iSampleFreq = 0;
                            if (this.iSampleSkip < this.nSampleSkip) {
                                this.iSampleSkip++;
                            } else {
                                if (this.iSampleNext == this.nSamples) {
                                    this.println("sample buffer full");
                                    this.stopCPU();
                                    break;
                                }
                                var t = this.regLIP + this.getCycles();
                                var n = this.aSamples[this.iSampleNext];
                                if (n !== -1) {
                                    if (n !== t) {
                                        this.println("sample deviation at index " + this.iSampleNext + ": current LIP=" + str.toHex(this.regLIP));
                                        this.stopCPU();
                                        break;
                                    }
                                } else {
                                    this.aSamples[this.iSampleNext] = t;
                                }
                                this.iSampleNext++;
                            }
                        }
                    }
            
                    this.opFlags = 0;
            
                    if (DEBUG || PREFETCH) {
                        this.nBusCycles = 0;
                        this.nSnapCycles = this.nStepCycles;
                    }
            
                    this.aOps[this.getIPByte()].call(this);
            
                    if (PREFETCH) {
                        var nSpareCycles = (this.nSnapCycles - this.nStepCycles) - this.nBusCycles;
                        if (nSpareCycles >= 4) {
                            this.fillPrefetch(nSpareCycles >> 2);   // for every 4 spare cycles, fetch 1 instruction byte
                        }
                    }
            
                    if (DEBUG) {
                        /*
                         * Make sure that every instruction is assessing a cycle cost, and that the cost is a net positive.
                         */
                        if (this.aFlags.fComplete && this.nStepCycles >= this.nSnapCycles && !(this.opFlags & X86.OPFLAG_PREFIXES)) {
                            this.println("cycle miscount: " + (this.nSnapCycles - this.nStepCycles));
                            this.setIP(this.opLIP - this.segCS.base);
                            this.stopCPU();
                            break;
                        }
                    }
            
                } while (this.nStepCycles > 0);
            
                return (this.aFlags.fComplete? this.nBurstCycles - this.nStepCycles : (this.aFlags.fComplete === undefined? 0 : -1));
            };
            
            /**
             * X86CPU.init()
             *
             * This function operates on every HTML element of class "cpu", extracting the
             * JSON-encoded parameters for the X86CPU constructor from the element's "data-value"
             * attribute, invoking the constructor (which in turn invokes the CPU constructor)
             * to create a X86CPU component, and then binding any associated HTML controls to the
             * new component.
             */
            X86CPU.init = function()
            {
                var aeCPUs = Component.getElementsByClass(window.document, PCJSCLASS, "cpu");
                for (var iCPU = 0; iCPU < aeCPUs.length; iCPU++) {
                    var eCPU = aeCPUs[iCPU];
                    var parmsCPU = Component.getComponentParms(eCPU);
                    var cpu = new X86CPU(parmsCPU);
                    Component.bindComponentControls(cpu, eCPU, PCJSCLASS);
                }
            };
            
            /*
             * Initialize every CPU module on the page
             */
            web.onInit(X86CPU.init);
            
            if (typeof module !== 'undefined') module.exports = X86CPU;
            
          • x86func.js
            /**
             * @fileoverview Implements PCjs 8086 opcode helpers.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var Messages    = require("./messages");
                var X86         = require("./x86");
            }
            
            /**
             * fnADCb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnADCb = function ADCb(dst, src)
            {
                var b = (dst + src + this.getCarry())|0;
                this.setArithResult(dst, src, b, X86.RESULT.BYTE | X86.RESULT.ALL);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return b & 0xff;
            };
            
            /**
             * fnADCw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnADCw = function ADCw(dst, src)
            {
                var w = (dst + src + this.getCarry())|0;
                this.setArithResult(dst, src, w, this.dataType | X86.RESULT.ALL);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return w & this.dataMask;
            };
            
            /**
             * fnADDb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnADDb = function ADDb(dst, src)
            {
                var b = (dst + src)|0;
                this.setArithResult(dst, src, b, X86.RESULT.BYTE | X86.RESULT.ALL);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return b & 0xff;
            };
            
            /**
             * fnADDw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnADDw = function ADDw(dst, src)
            {
                var w = (dst + src)|0;
                this.setArithResult(dst, src, w, this.dataType | X86.RESULT.ALL);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return w & this.dataMask;
            };
            
            /**
             * fnANDb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnANDb = function ANDb(dst, src)
            {
                var b = dst & src;
                this.setLogicResult(b, X86.RESULT.BYTE);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return b;
            };
            
            /**
             * fnANDw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnANDw = function ANDw(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return this.setLogicResult(dst & src, this.dataType);
            };
            
            /**
             * fnARPL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnARPL = function ARPL(dst, src)
            {
                this.nStepCycles -= (10 + (this.regEA === X86.ADDR_INVALID? 0 : 1));
                if ((dst & X86.SEL.RPL) < (src & X86.SEL.RPL)) {
                    dst = (dst & ~X86.SEL.RPL) | (src & X86.SEL.RPL);
                    this.setZF();
                    return dst;
                }
                this.clearZF();
                return dst;
            };
            
            /**
             * fnBOUND(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBOUND = function BOUND(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    /*
                     * Generate UD_FAULT (INT 0x06: Invalid Opcode) if src is not a memory operand.
                     */
                    X86.opInvalid.call(this);
                    return dst;
                }
                /*
                 * Note that BOUND performs signed comparisons, so we must transform all arguments into signed values.
                 */
                var wIndex = dst;
                var wLower = this.getWord(this.regEA);
                var wUpper = this.getWord(this.regEA + this.dataSize);
                if (this.dataSize == 2) {
                    wIndex = (dst << 16) >> 16;
                    wLower = (wLower << 16) >> 16;
                    wUpper = (wUpper << 16) >> 16;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesBound;
                if (wIndex < wLower || wIndex > wUpper) {
                    /*
                     * The INT 0x05 handler must be called with CS:IP pointing to the BOUND instruction.
                     *
                     * TODO: Determine the cycle cost when a BOUND exception is triggered, over and above nCyclesBound.
                     */
                    this.setIP(this.opLIP - this.segCS.base);
                    X86.fnINT.call(this, X86.EXCEPTION.BOUND_ERR, null, 0);
                }
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnBSF(dst, src)
             *
             * Scan src starting at bit 0.  If a set bit is found, the bit index is stored in dst and ZF is cleared;
             * otherwise, ZF is set and dst is unchanged.
             *
             * NOTES: Early versions of the 80386 manuals misstated how ZF was set/cleared.  Also, Intel insists that
             * dst is undefined whenever ZF is set, but in fact, the 80386 leaves dst unchanged when that happens;
             * unfortunately, some early 80486s would always modify dst, so it is unsafe to rely on dst when ZF is set.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBSF = function BSF(dst, src)
            {
                var n = 0;
                if (!src) {
                    this.setZF();
                } else {
                    this.clearZF();
                    var bit = 0x1;
                    while (bit & this.dataMask) {
                        if (src & bit) {
                            dst = n;
                            break;
                        }
                        bit <<= 1;
                        n++;                // TODO: Determine if n should be incremented before the bailout for an accurate cycle count
                    }
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesBitScan + n * 3;
                return dst;
            };
            
            /**
             * fnBSR(dst, src)
             *
             * Scan src starting from the highest bit.  If a set bit is found, the bit index is stored in dst and ZF is
             * cleared; otherwise, ZF is set and dst is unchanged.
             *
             * NOTES: Early versions of the 80386 manuals misstated how ZF was set/cleared.  Also, Intel insists that
             * dst is undefined whenever ZF is set, but in fact, the 80386 leaves dst unchanged when that happens;
             * unfortunately, some early 80486s would always modify dst, so it is unsafe to rely on dst when ZF is set.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBSR = function BSR(dst, src)
            {
                var n = 0;
                if (!src) {
                    this.setZF();
                } else {
                    this.clearZF();
                    var i = (this.dataSize == 2? 15 : 31), bit = 1 << i;
                    while (bit) {
                        if (src & bit) {
                            dst = i;
                            break;
                        }
                        bit >>>= 1;
                        n++; i--;           // TODO: Determine if n should be incremented before the bailout for an accurate cycle count
                    }
            
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesBitScan + n * 3;
                return dst;
            };
            
            /**
             * fnBT(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBT = function BT(dst, src)
            {
                if (dst & (1 << (src & 0x1f))) this.setCF(); else this.clearCF();
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesBitTestR : this.cycleCounts.nOpCyclesBitTestM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnBTC(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBTC = function BTC(dst, src)
            {
                var bit = 1 << (src & 0x1f);
                if (dst & bit) this.setCF(); else this.clearCF();
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesBitSetR : this.cycleCounts.nOpCyclesBitSetM);
                return dst ^ bit;
            };
            
            /**
             * fnBTR(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBTR = function BTR(dst, src)
            {
                var bit = 1 << (src & 0x1f);
                if (dst & bit) this.setCF(); else this.clearCF();
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesBitSetR : this.cycleCounts.nOpCyclesBitSetM);
                return dst & ~bit;
            };
            
            /**
             * fnBTS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnBTS = function BTS(dst, src)
            {
                var bit = 1 << (src & 0x1f);
                if (dst & bit) this.setCF(); else this.clearCF();
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesBitSetR : this.cycleCounts.nOpCyclesBitSetM);
                return dst | bit;
            };
            
            /**
             * fnCALLw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnCALLw = function CALLw(dst, src)
            {
                if (DEBUG) this.printMessage("calling " + str.toHex(dst, this.dataSize << 1), this.bitsMessage, true);
                this.pushWord(this.getIP());
                this.setIP(dst);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesCallWR : this.cycleCounts.nOpCyclesCallWM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnCALLF(off, sel)
             *
             * For protected-mode, this function must attempt to load the new code segment first, because if the new segment
             * requires a change in privilege level, the return address must be pushed on the NEW stack, not the current stack.
             *
             * @this {X86CPU}
             * @param {number} off
             * @param {number} sel
             */
            X86.fnCALLF = function CALLF(off, sel)
            {
                if (DEBUG) this.printMessage("calling " + str.toHex(sel, 4) + ':' + str.toHex(off, this.dataSize << 1), this.bitsMessage, true);
                var oldCS = this.getCS();
                var oldIP = this.getIP();
                if (this.setCSIP(off, sel, true) != null) {
                    this.pushWord(oldCS);
                    this.pushWord(oldIP);
                }
            };
            
            /**
             * fnCALLFdw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnCALLFdw = function CALLFdw(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    return X86.fnGRPUndefined.call(this, dst, src);
                }
                X86.fnCALLF.call(this, dst, this.getShort(this.regEA + this.dataSize));
                this.nStepCycles -= this.cycleCounts.nOpCyclesCallDM;
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnCMPb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number} dst unchanged
             */
            X86.fnCMPb = function CMPb(dst, src)
            {
                var b = (dst - src)|0;
                this.setArithResult(dst, src, b, X86.RESULT.BYTE | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesCompareRM) : this.cycleCounts.nOpCyclesArithRM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnCMPw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number} dst unchanged
             */
            X86.fnCMPw = function CMPw(dst, src)
            {
                var w = (dst - src)|0;
                this.setArithResult(dst, src, w, this.dataType | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesCompareRM) : this.cycleCounts.nOpCyclesArithRM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnDECb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnDECb = function DECb(dst, src)
            {
                var b = (dst - 1)|0;
                this.setArithResult(dst, 1, b, X86.RESULT.BYTE | X86.RESULT.NOTCF, true);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIncR : this.cycleCounts.nOpCyclesIncM);
                return b & 0xff;
            };
            
            /**
             * fnDECr(w)
             *
             * @this {X86CPU}
             * @param {number} w
             * @return {number}
             */
            X86.fnDECr = function DECr(w)
            {
                var result = ((w & this.dataMask) - 1)|0;
                this.setArithResult(w, 1, result, X86.RESULT.WORD | X86.RESULT.NOTCF, true);
                this.nStepCycles -= 2;                          // the register form of INC takes 2 cycles on all CPUs
                return (w & ~this.dataMask) | (result & this.dataMask);
            };
            
            /**
             * fnDECw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnDECw = function DECw(dst, src)
            {
                var w = (dst - 1)|0;
                this.setArithResult(dst, 1, w, X86.RESULT.WORD | X86.RESULT.NOTCF, true);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIncR : this.cycleCounts.nOpCyclesIncM);
                return w & 0xffff;
            };
            
            /**
             * fnSet64(lo, hi)
             *
             * @param {number} lo
             * @param {number} hi
             */
            X86.fnSet64 = function Set64(lo, hi)
            {
                return [lo >>> 0, hi >>> 0];
            };
            
            /**
             * fnAdd64(dst, src)
             *
             * Adds src to dst.
             *
             * @param {Array} dst is a 64-bit value
             * @param {Array} src is a 64-bit value
             */
            X86.fnAdd64 = function Add64(dst, src)
            {
                dst[0] += src[0];
                dst[1] += src[1];
                if (dst[0] > 0xffffffff) {
                    dst[0] >>>= 0;          // truncate dst[0] to 32 bits AND keep it unsigned
                    dst[1]++;
                }
            };
            
            /**
             * fnCmp64(dst, src)
             *
             * Compares dst to src, by computing dst - src.
             *
             * @param {Array} dst is a 64-bit value
             * @param {Array} src is a 64-bit value
             * @return {number} > 0 if dst > src, == 0 if dst == src, < 0 if dst < src
             */
            X86.fnCmp64 = function Cmp64(dst, src)
            {
                var result = dst[1] - src[1];
                if (!result) result = dst[0] - src[0];
                return result;
            };
            
            /**
             * fnSub64(dst, src)
             *
             * Subtracts src from dst.
             *
             * @param {Array} dst is a 64-bit value
             * @param {Array} src is a 64-bit value
             */
            X86.fnSub64 = function Sub64(dst, src)
            {
                dst[0] -= src[0];
                dst[1] -= src[1];
                if (dst[0] < 0) {
                    dst[0] >>>= 0;          // truncate dst[0] to 32 bits AND keep it unsigned
                    dst[1]--;
                }
            };
            
            /**
             * fnShr64(dst)
             *
             * Shifts dst right one bit.
             *
             * @param {Array} dst is a 64-bit value
             */
            X86.fnShr64 = function Shr64(dst)
            {
                dst[0] >>>= 1;
                if (dst[1] & 0x1) {
                    dst[0] = (dst[0] | 0x80000000) >>> 0;
                }
                dst[1] >>>= 1;
            };
            
            /**
             * fnDIV32(dstLo, dstHi, src)
             *
             * This sets regMDLo to dstHi:dstLo / src, and regMDHi to dstHi:dstLo % src; all inputs are treated as unsigned.
             *
             * If fMDset is not set, however, then there was a divide exception (ie, the divisor was either zero or too small).
             *
             * Refer to: http://lxr.linux.no/linux+v2.6.22/lib/div64.c
             *
             * @this {X86CPU}
             * @param {number} dstLo (low 32-bit portion of dividend)
             * @param {number} dstHi (high 32-bit portion of dividend)
             * @param {number} src (32-bit divisor)
             */
            X86.fnDIV32 = function DIV32(dstLo, dstHi, src)
            {
                this.fMDSet = false;
            
                src >>>= 0;
                if (!src || src <= (dstHi >>> 0)) return;
            
                var result = 0, bit = 1;
            
                var div = X86.fnSet64(src, 0);
                var rem = X86.fnSet64(dstLo, dstHi);
            
                while (X86.fnCmp64(rem, div) > 0) {
                    X86.fnAdd64(div, div);
                    bit += bit;
                }
                do {
                    if (X86.fnCmp64(rem, div) >= 0) {
                        X86.fnSub64(rem, div);
                        result += bit;
                    }
                    X86.fnShr64(div);
                    bit >>>= 1;
                } while (bit);
            
                this.assert(result <= 0xffffffff && !rem[1]);
            
                this.regMDLo = result;              // result is the quotient, which callers expect in the low MD register
                this.regMDHi = rem[0];              // rem[0] is the remainder, which callers expect in the high MD register
                this.fMDSet = true;
            };
            
            /**
             * fnIDIV32(dstLo, dstHi, src)
             *
             * This sets regMDLo to dstHi:dstLo / src, and regMDHi to dstHi:dstLo % src; all inputs are treated as signed.
             *
             * If fMDset is not set, however, then there was a divide exception (ie, the divisor was either zero or too small).
             *
             * Refer to: http://lxr.linux.no/linux+v2.6.22/lib/div64.c
             *
             * @this {X86CPU}
             * @param {number} dstLo (low 32-bit portion of dividend)
             * @param {number} dstHi (high 32-bit portion of dividend)
             * @param {number} src (32-bit divisor)
             */
            X86.fnIDIV32 = function IDIV32(dstLo, dstHi, src)
            {
                var fNegLo = false, fNegHi = false;
                if (src < 0) {
                    src = -src|0;
                    fNegLo = !fNegLo;
                }
                if (dstHi < 0) {
                    dstLo = -dstLo|0;
                    dstHi = (~dstHi + (dstLo? 0 : 1))|0;
                    fNegHi = true;
                    fNegLo = !fNegLo;
                }
                X86.fnDIV32.call(this, dstLo, dstHi, src);
                if (this.regMDLo > 0x7fffffff) this.fMDSet = false;
                if (fNegLo) this.regMDLo = -this.regMDLo;
                if (fNegHi) this.regMDHi = -this.regMDHi;
            };
            
            /**
             * fnDIVb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (the divisor)
             * @param {number} src (null; AX is the implied src)
             * @return {number} (we return dst unchanged, since it's actually AX that's modified)
             */
            X86.fnDIVb = function DIVb(dst, src)
            {
                /*
                 * Detect zero divisor
                 */
                if (!dst) {
                    X86.fnDIVOverflow.call(this);
                    return dst;
                }
            
                /*
                 * Detect too-small divisor (quotient overflow)
                 */
                var result = ((src = this.regEAX & 0xffff) / dst);
                if (result > 0xff) {
                    X86.fnDIVOverflow.call(this);
                    return dst;
                }
            
                this.fMDSet = true;
                this.regMDLo = (result & 0xff) | (((src % dst) & 0xff) << 8);
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) this.traceLog('DIVb', src, dst, null, this.getPS(), this.regMDLo);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesDivBR : this.cycleCounts.nOpCyclesDivBM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnDIVw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (the divisor)
             * @param {number} src (null; DX:AX or EDX:EAX is the implied src)
             * @return {number} (we return dst unchanged, since it's actually DX:AX that's modified)
             */
            X86.fnDIVw = function DIVw(dst, src)
            {
                if (this.dataSize == 2) {
                    /*
                     * Detect zero divisor
                     */
                    if (!dst) {
                        X86.fnDIVOverflow.call(this);
                        return dst;
                    }
                    /*
                     * Detect too-small divisor (quotient overflow)
                     *
                     * WARNING: We CANNOT simply do "src = (this.regEDX << 16) | this.regEAX", because if bit 15 of DX
                     * is set, JavaScript will create a negative 32-bit number.  So we instead use non-bit-wise operators
                     * to force JavaScript to create a floating-point value that won't suffer from 32-bit-math side-effects.
                     */
                    src = (this.regEDX & 0xffff) * 0x10000 + (this.regEAX & 0xffff);
                    var result = (src / dst)|0;
                    if (result >= 0x10000) {
                        X86.fnDIVOverflow.call(this);
                        return dst;
                    }
                    this.fMDSet = true;
                    this.regMDLo = (result & 0xffff);
                    this.regMDHi = (src % dst) & 0xffff;
                }
                else {
                    X86.fnDIV32.call(this, this.regEAX, this.regEDX, dst);
                    if (!this.fMDSet) {
                        X86.fnDIVOverflow.call(this);
                        return dst;
                    }
                    this.regMDLo |= 0;
                    this.regMDHi |= 0;
                }
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) {
                    if (this.dataSize == 2) {
                        this.traceLog('DIVw', src, dst, null, this.getPS(), this.regMDLo | (this.regMDHi << 16));
                    } else {
                        this.traceLog('DIVd', src, dst, null, this.getPS(), this.regMDLo, this.regMDHi);
                    }
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesDivWR : this.cycleCounts.nOpCyclesDivWM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnESC(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number} dst unchanged
             */
            X86.fnESC = function ESC(dst, src)
            {
                return dst;
            };
            
            /**
             * fnIDIVb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (the divisor)
             * @param {number} src (null; AX is the implied src)
             * @return {number} (we return dst unchanged, since it's actually AX that's modified)
             */
            X86.fnIDIVb = function IDIVb(dst, src)
            {
                /*
                 * Detect zero divisor
                 */
                if (!dst) {
                    X86.fnDIVOverflow.call(this);
                    return dst;
                }
            
                /*
                 * Detect too-small divisor (quotient overflow)
                 */
                var div = ((dst << 24) >> 24);
                var result = ((src = (this.regEAX << 16) >> 16) / div)|0;
            
                /*
                 * Note the following difference, from "AP-186: Introduction to the 80186 Microprocessor, March 1983":
                 *
                 *      "The 8086 will cause a divide error whenever the absolute value of the quotient is greater then 7FFFH
                 *      (for word operations) or if the absolute value of the quotient is greater than 7FH (for byte operations).
                 *      The 80186 has expanded the range of negative numbers allowed as a quotient by 1 to include 8000H and 80H.
                 *      These numbers represent the most negative numbers representable using 2's complement arithmetic (equaling
                 *      -32768 and -128 in decimal, respectively)."
                 */
                if (result != ((result << 24) >> 24) || this.model == X86.MODEL_8086 && result == -128) {
                    X86.fnDIVOverflow.call(this);
                    return dst;
                }
            
                this.fMDSet = true;
                this.regMDLo = (result & 0xff) | (((src % div) & 0xff) << 8);
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) this.traceLog('IDIVb', src, dst, null, this.getPS(), this.regMDLo);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIDivBR : this.cycleCounts.nOpCyclesIDivBM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnIDIVw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (the divisor)
             * @param {number} src (null; DX:AX or EDX:EAX is the implied src)
             * @return {number} (we return dst unchanged, since it's actually DX:AX that's modified)
             */
            X86.fnIDIVw = function IDIVw(dst, src)
            {
                if (this.dataSize == 2) {
                    /*
                     * Detect zero divisor
                     */
                    if (!dst) {
                        X86.fnDIVOverflow.call(this);
                        return dst;
                    }
            
                    /*
                     * Detect too-small divisor (quotient overflow)
                     */
                    var div = ((dst << 16) >> 16);
                    var result = ((src = (this.regEDX << 16) | (this.regEAX & 0xffff)) / div)|0;
            
                    /*
                     * Note the following difference, from "AP-186: Introduction to the 80186 Microprocessor, March 1983":
                     *
                     *      "The 8086 will cause a divide error whenever the absolute value of the quotient is greater then 7FFFH
                     *      (for word operations) or if the absolute value of the quotient is greater than 7FH (for byte operations).
                     *      The 80186 has expanded the range of negative numbers allowed as a quotient by 1 to include 8000H and 80H.
                     *      These numbers represent the most negative numbers representable using 2's complement arithmetic (equaling
                     *      -32768 and -128 in decimal, respectively)."
                     */
                    if (result != ((result << 16) >> 16) || this.model == X86.MODEL_8086 && result == -32768) {
                        X86.fnDIVOverflow.call(this);
                        return dst;
                    }
            
                    this.fMDSet = true;
                    this.regMDLo = (result & 0xffff);
                    this.regMDHi = (src % div) & 0xffff;
                }
                else {
                    X86.fnIDIV32.call(this, this.regEAX, this.regEDX, dst);
                    if (!this.fMDSet) {
                        X86.fnDIVOverflow.call(this);
                        return dst;
                    }
                    this.regMDLo |= 0;
                    this.regMDHi |= 0;
                }
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) {
                    if (this.dataSize == 2) {
                        this.traceLog('IDIVw', src, dst, null, this.getPS(), this.regMDLo | (this.regMDHi << 16));
                    } else {
                        this.traceLog('IDIVd', src, dst, null, this.getPS(), this.regMDLo, this.regMDHi);
                    }
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIDivWR : this.cycleCounts.nOpCyclesIDivWM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnIMUL8(dst, src)
             *
             * 80286_and_80287_Programmers_Reference_Manual_1987.pdf, p.B-44 (p.254) notes that:
             *
             *      "The low 16 bits of the product of a 16-bit signed multiply are the same as those of an
             *      unsigned multiply. The three operand IMUL instruction can be used for unsigned operands as well."
             *
             * However, we still sign-extend the operands before multiplying, making it easier to range-check the result.
             *
             * (80186/80188 and up)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnIMUL8 = function IMUL8(dst, src)
            {
                dst = this.getIPByte();
                var result = (((src << 16) >> 16) * ((dst << 24) >> 24))|0;
            
                if (result > 32767 || result < -32768) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
            
                result &= 0xffff;
                if (DEBUG && DEBUGGER) this.traceLog('IMUL8', dst, src, null, this.getPS(), result);
            
                /*
                 * NOTE: These are the cycle counts for the 80286; the 80186/80188 have slightly different values (ranges):
                 * 22-25 and 29-32 instead of 21 and 24, respectively.  However, accurate cycle counts for the 80186/80188 is
                 * not super-critical. TODO: Fix this someday.
                 */
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? 21 : 24);
                return result;
            };
            
            /**
             * fnIMULb(dst, src)
             *
             * This 16-bit multiplication must indicate when the upper 8 bits are simply a sign-extension of the
             * lower 8 bits (carry clear) and when the upper 8 bits contain significant bits (carry set).  The latter
             * will occur whenever a positive result is > 127 (0x007f) and whenever a negative result is < -128
             * (0xff80).
             *
             * Example 1: 16 * 4 = 64 (0x0040): carry is clear
             * Example 2: 16 * 8 = 128 (0x0080): carry is set (the sign bit no longer fits in the lower 8 bits)
             * Example 3: 16 * -8 (0xf8) = -128 (0xff80): carry is clear (the sign bit *still* fits in the lower 8 bits)
             * Example 4: 16 * -16 (0xf0) = -256 (0xff00): carry is set (the sign bit no longer fits in the lower 8 bits)
             *
             * An earlier version of this function assumed it simply needed to check bit 7 of the result to determine carry,
             * which was completely broken.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null; AL is the implied src)
             * @return {number} (we return dst unchanged, since it's actually AX that's modified)
             */
            X86.fnIMULb = function IMULb(dst, src)
            {
                var result = ((((src = this.regEAX) << 24) >> 24) * ((dst << 24) >> 24))|0;
            
                this.fMDSet = true;
                this.regMDLo = result & 0xffff;
            
                if (result > 127 || result < -128) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) this.traceLog('IMULb', src, dst, null, this.getPS(), this.regMDLo);
            
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIMulBR : this.cycleCounts.nOpCyclesIMulBM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnIMULn(dst, src)
             *
             * 80286_and_80287_Programmers_Reference_Manual_1987.pdf, p.B-44 (p.254) notes that:
             *
             *      "The low 16 bits of the product of a 16-bit signed multiply are the same as those of an
             *      unsigned multiply. The three operand IMUL instruction can be used for unsigned operands as well."
             *
             * However, we still sign-extend the operands before multiplying, making it easier to range-check the result.
             *
             * (80186/80188 and up)
             *
             * @this {X86CPU}
             * @param {number} dst (not used)
             * @param {number} src
             * @return {number}
             */
            X86.fnIMULn = function IMULn(dst, src)
            {
                var fOverflow, result;
                dst = this.getIPWord();
                if (this.dataSize == 2) {
                    result = (((src << 16) >> 16) * ((dst << 16) >> 16))|0;
                    fOverflow = (result > 32767 || result < -32768);
                } else {
                    result = (src * dst);
                    fOverflow = (result > 2147483647 || result < -2147483648);
                    this.assert(fOverflow == (result != (result|0)));
                }
            
                if (fOverflow) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
            
                result &= this.dataMask;
                if (DEBUG && DEBUGGER) this.traceLog('IMULn', dst, src, null, this.getPS(), result);
            
                /*
                 * NOTE: These are the cycle counts for the 80286; the 80186/80188 have slightly different values (ranges):
                 * 22-25 and 29-32 instead of 21 and 24, respectively.  However, accurate cycle counts for the 80186/80188 is
                 * not super-critical. TODO: Fix this someday.
                 */
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? 21 : 24);
                return result;
            };
            
            /**
             * fnIMUL32(dst, src)
             *
             * This sets regMDHi:regMDLo to the 64-bit result of dst * src, both of which are treated as signed.
             *
             * TODO: Some potential optimizations include:
             *
             *  1) Early outs if either parameter is zero, since the result will obviously be zero
             *  2) Using "normal" JavaScript multiplication if both parameters are >= -32768 && <= 32767
             *
             * Refer to: http://stackoverflow.com/questions/13597364/32-bit-signed-multiplication-with-a-64-bit-result-in-javascript
             *
             * @this {X86CPU}
             * @param {number} dst (any 32-bit number, treated as signed)
             * @param {number} src (any 32-bit number, treated as signed)
             */
            X86.fnIMUL32 = function IMUL32(dst, src)
            {
                var fNeg = false;
                if (src < 0) {
                    src = -src|0;
                    fNeg = !fNeg;
                }
                if (dst < 0) {
                    dst = -dst|0;
                    fNeg = !fNeg;
                }
                X86.fnMUL32.call(this, dst, src);
                if (fNeg) {
                    this.regMDLo = (~this.regMDLo + 1)|0;
                    this.regMDHi = (~this.regMDHi + (this.regMDLo? 0 : 1))|0;
                }
            };
            
            /**
             * fnIMULw(dst, src)
             *
             * regMDHi:regMDLo = dst * regEAX
             *
             * This 32-bit multiplication must indicate when the upper 16 bits are simply a sign-extension of the
             * lower 16 bits (carry clear) and when the upper 16 bits contain significant bits (carry set).  The latter
             * will occur whenever a positive result is > 32767 (0x00007fff) and whenever a negative result is < -32768
             * (0xffff8000).
             *
             * Example 1: 256 * 64 = 16384 (0x00004000): carry is clear
             * Example 2: 256 * 128 = 32768 (0x00008000): carry is set (the sign bit no longer fits in the lower 16 bits)
             * Example 3: 256 * -128 (0xff80) = -32768 (0xffff8000): carry is clear (the sign bit *still* fits in the lower 16 bits)
             * Example 4: 256 * -256 (0xff00) = -65536 (0xffff0000): carry is set (the sign bit no longer fits in the lower 16 bits)
             *
             * An earlier version of this function assumed it simply needed to check bit 15 of the result to determine carry,
             * which was completely broken.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null; AX or EAX is the implied src)
             * @return {number} (we return dst unchanged, since it's actually DX:AX that's modified)
             */
            X86.fnIMULw = function IMULw(dst, src)
            {
                var fOverflow;
                if (this.dataSize == 2) {
                    src = this.regEAX & 0xffff;
                    var result = (((src << 16) >> 16) * ((dst << 16) >> 16))|0;
                    this.fMDSet = true;
                    this.regMDLo = result & 0xffff;
                    this.regMDHi = (result >> 16) & 0xffff;
                    fOverflow = (result > 32767 || result < -32768);
                } else {
                    X86.fnIMUL32.call(this, dst, this.regEAX);
                    fOverflow = (this.regMDHi != (this.regMDLo >> 31));
                }
            
                if (fOverflow) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) {
                    if (this.dataSize == 2) {
                        this.traceLog('IMULw', src, dst, null, this.getPS(), this.regMDLo | (this.regMDHi << 16));
                    } else {
                        this.traceLog('IMULd', src, dst, null, this.getPS(), this.regMDLo, this.regMDHi);
                    }
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIMulWR : this.cycleCounts.nOpCyclesIMulWM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnIMULrw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnIMULrw = function IMULrw(dst, src)
            {
                var result = (((dst << 16) >> 16) * ((src << 16) >> 16))|0;
                if (result > 32767 || result < -32768) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
                result &= 0xffff;
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIMulR : this.cycleCounts.nOpCyclesIMulM);
                return result;
            };
            
            /**
             * fnIMULrd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnIMULrd = function IMULrd(dst, src)
            {
                var result = dst * src;
                if (result > 2147483647 || result < -2147483648) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
                result |= 0;
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIMulR : this.cycleCounts.nOpCyclesIMulM);
                return result;
            };
            
            /**
             * fnINCb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnINCb = function INCb(dst, src)
            {
                var b = (dst + 1)|0;
                this.setArithResult(dst, 1, b, X86.RESULT.BYTE | X86.RESULT.NOTCF);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIncR : this.cycleCounts.nOpCyclesIncM);
                return b & 0xff;
            };
            
            /**
             * fnINCr(w)
             *
             * @this {X86CPU}
             * @param {number} w
             * @return {number}
             */
            X86.fnINCr = function INCr(w)
            {
                var result = ((w & this.dataMask) + 1)|0;
                this.setArithResult(w, 1, result, X86.RESULT.WORD | X86.RESULT.NOTCF);
                this.nStepCycles -= 2;                          // the register form of INC takes 2 cycles on all CPUs
                return (w & ~this.dataMask) | (result & this.dataMask);
            };
            
            /**
             * fnINCw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnINCw = function INCw(dst, src)
            {
                var w = (dst + 1)|0;
                this.setArithResult(dst, 1, w, X86.RESULT.WORD | X86.RESULT.NOTCF);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesIncR : this.cycleCounts.nOpCyclesIncM);
                return w & 0xffff;
            };
            
            /**
             * fnINT(nIDT, nError, nCycles)
             *
             * NOTE: We no longer use setCSIP(), because it always loads the new CS using segCS.load(), which
             * only knows how to load GDT and LDT descriptors, whereas interrupts must use setCS.loadIDT(), which
             * deals exclusively with IDT descriptors.
             *
             * This means we must take care to replicate critical features of setCSIP(); ie, setting segCS.fCall
             * BEFORE calling loadIDT(), and updating regLIP and regLIPLimit, resetting default operand and address sizes,
             * and flushing the prefetch queue AFTER calling loadIDT().
             *
             * @this {X86CPU}
             * @param {number} nIDT
             * @param {number|null|undefined} nError
             * @param {number} nCycles (in addition to the default of nOpCyclesInt)
             */
            X86.fnINT = function INT(nIDT, nError, nCycles)
            {
                /*
                 * TODO: We assess the cycle cost up front, because otherwise, if loadIDT() fails, no cost may be assessed.
                 */
                this.nStepCycles -= this.cycleCounts.nOpCyclesInt + nCycles;
                this.segCS.fCall = true;
                var oldPS = this.getPS();
                var oldCS = this.getCS();
                var oldIP = this.getIP();
                var addr = this.segCS.loadIDT(nIDT);
                if (addr !== X86.ADDR_INVALID) {
                    this.pushWord(oldPS);
                    this.pushWord(oldCS);
                    this.pushWord(oldIP);
                    if (nError != null) this.pushWord(nError);
                    this.nFault = -1;
                    this.regLIP = addr;
                    this.regLIPLimit = (this.segCS.base + this.segCS.limit)|0;
                    if (I386) this.resetSizes();
                    if (PREFETCH) this.flushPrefetch(this.regLIP);
                }
            };
            
            /**
             * fnIRET()
             *
             * @this {X86CPU}
             */
            X86.fnIRET = function IRET()
            {
                /*
                 * TODO: We assess a fixed cycle cost up front, because at the moment, switchTSS() doesn't assess anything.
                 */
                this.nStepCycles -= this.cycleCounts.nOpCyclesIRet;
                if (this.regCR0 & X86.CR0.MSW.PE) {
                    if (this.regPS & X86.PS.NT) {
                        var addrNew = this.segTSS.base;
                        var sel = this.getShort(addrNew + X86.TSS.PREV_TSS);
                        this.segCS.switchTSS(sel, false);
                        return;
                    }
                }
                var cpl = this.segCS.cpl;
                var newIP = this.popWord();
                var newCS = this.popWord();
                var newPS = this.popWord();
                if (DEBUG) this.printMessage(" returning to " + str.toHex(newCS, 4) + ':' + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
                if (this.setCSIP(newIP, newCS, false) != null) {
                    this.setPS(newPS, cpl);
                    if (this.cIntReturn) this.checkIntReturn(this.regLIP);
                }
            };
            
            /**
             * fnJMPw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnJMPw = function JMPw(dst, src)
            {
                this.setIP(dst);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesJmpWR : this.cycleCounts.nOpCyclesJmpWM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnJMPFdw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnJMPFdw = function JMPFdw(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    return X86.fnGRPUndefined.call(this, dst, src);
                }
                this.setCSIP(dst, this.getShort(this.regEA + this.dataSize));
                if (this.cIntReturn) this.checkIntReturn(this.regLIP);
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpDM;
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnLAR(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLAR = function LAR(dst, src)
            {
                this.nStepCycles -= (14 + (this.regEA === X86.ADDR_INVALID? 0 : 2));
                /*
                 * Currently, segVER.load() will return an error only if the selector is beyond the bounds of the
                 * descriptor table or the descriptor is not for a segment.
                 *
                 * TODO: This instruction's 80286 documentation does not discuss conforming code segments; determine
                 * if we need a special check for them.
                 */
                this.clearZF();
                if (this.segVER.load(src, true) !== X86.ADDR_INVALID) {
                    if (this.segVER.dpl >= this.segCS.cpl && this.segVER.dpl >= (src & X86.SEL.RPL)) {
                        this.setZF();
                        dst = this.segVER.acc & ~X86.DESC.ACC.BASE1623;
                        if (this.dataSize > 2) {
                            dst |= ((this.segVER.ext & ~X86.DESC.EXT.BASE2431) << 16);
                        }
                    }
                }
                return dst;
            };
            
            /**
             * fnLCR0(l)
             *
             * This is called by an 80386 control instruction (ie, MOV CR0,reg).
             *
             * TODO: Determine which CR0 bits, if any, cannot be modified by MOV CR0,reg.
             *
             * @this {X86CPU}
             * @param {number} l
             */
            X86.fnLCR0 = function LCR0(l)
            {
                this.regCR0 = l;
                this.setProtMode();
                if (this.regCR0 & X86.CR0.PG) {
                    this.enablePageBlocks();
                } else {
                    this.disablePageBlocks();
                }
            };
            
            /**
             * fnLCR3(l)
             *
             * This is called by an 80386 control instruction (ie, MOV CR3,reg) or an 80386 task switch.
             *
             * @this {X86CPU}
             * @param {number} l
             */
            X86.fnLCR3 = function LCR3(l)
            {
                this.regCR3 = l;
                /*
                 * Normal use of regCR3 involves adding a 0-4K (12-bit) offset to obtain a page directory entry,
                 * so let's ensure that the low 12 bits of regCR3 are always zero.
                 */
                this.assert(!(this.regCR3 & X86.LADDR.OFFSET));
                if (this.regCR0 & X86.CR0.PG) this.enablePageBlocks();
            };
            
            /**
             * fnLDS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLDS = function LDS(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opUndefined.call(this);
                    return dst;
                }
                this.setDS(this.getShort(this.regEA + this.dataSize));
                this.nStepCycles -= this.cycleCounts.nOpCyclesLS;
                return src;
            };
            
            /**
             * fnLEA(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLEA = function LEA(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    /*
                     * TODO: After reading http://www.os2museum.com/wp/undocumented-8086-opcodes/, it seems that this
                     * form of LEA (eg, "LEA AX,DX") simply returns the last calculated EA.  Since we always reset regEA
                     * at the start of a new instruction, we would need to preserve the previous EA if we want to mimic
                     * that (undocumented) behavior.
                     *
                     * And for completeness, we would have to extend EA tracking beyond the usual ModRM instructions
                     * (eg, XLAT, instructions that modify the stack pointer, and string instructions).  Anything else?
                     */
                    X86.opUndefined.call(this);
                    return dst;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLEA;
                return this.regEA;
            };
            
            /**
             * fnLES(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLES = function LES(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opUndefined.call(this);
                    return dst;
                }
                this.setES(this.getShort(this.regEA + this.dataSize));
                this.nStepCycles -= this.cycleCounts.nOpCyclesLS;
                return src;
            };
            
            /**
             * fnLFS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLFS = function LFS(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opUndefined.call(this);
                    return dst;
                }
                this.setFS(this.getShort(this.regEA + this.dataSize));
                this.nStepCycles -= this.cycleCounts.nOpCyclesLS;
                return src;
            };
            
            /**
             * fnLGDT(dst, src)
             *
             * op=0x0F,0x01,reg=0x2 (GRP7:LGDT)
             *
             * The 80286 LGDT instruction assumes a 40-bit operand: a 16-bit limit followed by a 24-bit base address;
             * the ModRM decoder has already supplied the first word of the operand (in dst), which corresponds to
             * the limit, so we must fetch the remaining bits ourselves.
             *
             * The 80386 LGDT instruction assumes a 48-bit operand: a 16-bit limit followed by a 32-bit base address,
             * but it ignores the last 8 bits of the base address if the OPERAND size is 16 bits; we interpret that to
             * mean that the 24-bit base address should be zero-extended to 32 bits.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnLGDT = function LGDT(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opInvalid.call(this);
                } else {
                    /*
                     * Hopefully it won't hurt to always fetch a 32-bit base address (even on an 80286), which we then
                     * mask apppropriately.
                     */
                    this.addrGDT = this.getLong(this.regEA + 2) & (this.dataMask | (this.dataMask << 8));
                    /*
                     * An idiosyncrasy of our ModRM decoders is that, if the OPERAND size is 32 bits, then it will have
                     * fetched a 32-bit dst operand; we mask off those extra bits now.
                     */
                    dst &= 0xffff;
                    this.addrGDTLimit = this.addrGDT + dst;
                    this.opFlags |= X86.OPFLAG.NOWRITE;
                    this.nStepCycles -= 11;
                }
                return dst;
            };
            
            /**
             * fnLGS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLGS = function LGS(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opUndefined.call(this);
                    return dst;
                }
                this.setGS(this.getShort(this.regEA + this.dataSize));
                this.nStepCycles -= this.cycleCounts.nOpCyclesLS;
                return src;
            };
            
            /**
             * fnLIDT(dst, src)
             *
             * op=0x0F,0x01,reg=0x3 (GRP7:LIDT)
             *
             * The 80286 LIDT instruction assumes a 40-bit operand: a 16-bit limit followed by a 24-bit base address;
             * the ModRM decoder has already supplied the first word of the operand (in dst), which corresponds to
             * the limit, so we must fetch the remaining bits ourselves.
             *
             * The 80386 LIDT instruction assumes a 48-bit operand: a 16-bit limit followed by a 32-bit base address,
             * but it ignores the last 8 bits of the base address if the OPERAND size is 16 bits; we interpret that to
             * mean that the 24-bit base address should be zero-extended to 32 bits.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnLIDT = function LIDT(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opInvalid.call(this);
                } else {
                    /*
                     * Hopefully it won't hurt to always fetch a 32-bit base address (even on an 80286), which we then
                     * mask apppropriately.
                     */
                    this.addrIDT = this.getLong(this.regEA + 2) & (this.dataMask | (this.dataMask << 8));
                    /*
                     * An idiosyncrasy of our ModRM decoders is that, if the OPERAND size is 32 bits, then it will have
                     * fetched a 32-bit dst operand; we mask off those extra bits now.
                     */
                    dst &= 0xffff;
                    this.addrIDTLimit = this.addrIDT + dst;
                    this.opFlags |= X86.OPFLAG.NOWRITE;
                    this.nStepCycles -= 12;
                }
                return dst;
            };
            
            /**
             * fnLLDT(dst, src)
             *
             * op=0x0F,0x00,reg=0x2 (GRP6:LLDT)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnLLDT = function LLDT(dst, src) {
                this.opFlags |= X86.OPFLAG.NOWRITE;
                this.segLDT.load(dst);
                this.nStepCycles -= (17 + (this.regEA === X86.ADDR_INVALID? 0 : 2));
                return dst;
            };
            
            /**
             * fnLMSW(dst, src)
             *
             * op=0x0F,0x01,reg=0x6 (GRP7:LMSW)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnLMSW = function LMSW(dst, src)
            {
                this.setMSW(dst);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? 3 : 6);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnLSL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (the selector)
             * @return {number}
             */
            X86.fnLSL = function LSL(dst, src)
            {
                /*
                 * TODO: Is this an invalid operation if regEAWrite is set?  dst is required to be a register.
                 */
                this.nStepCycles -= (14 + (this.regEA === X86.ADDR_INVALID? 0 : 2));
                /*
                 * Currently, segVER.load() will return an error only if the selector is beyond the bounds of the
                 * descriptor table or the descriptor is not for a segment.
                 *
                 * TODO: LSL is explicitly documented as ALSO requiring a non-null selector, so we check X86.SEL.MASK;
                 * are there any other instructions that were, um, less explicit but also require a non-null selector?
                 */
                if ((src & X86.SEL.MASK) && this.segVER.load(src, true) !== X86.ADDR_INVALID) {
                    var fConforming = ((this.segVER.acc & X86.DESC.ACC.TYPE.CODE_CONFORMING) == X86.DESC.ACC.TYPE.CODE_CONFORMING);
                    if ((fConforming || this.segVER.dpl >= this.segCS.cpl) && this.segVER.dpl >= (src & X86.SEL.RPL)) {
                        this.setZF();
                        return this.segVER.limit;
                    }
                }
                this.clearZF();
                return dst;
            };
            
            /**
             * fnLSS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnLSS = function LSS(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opUndefined.call(this);
                    return dst;
                }
                this.setSS(this.getShort(this.regEA + this.dataSize));
                this.nStepCycles -= this.cycleCounts.nOpCyclesLS;
                return src;
            };
            
            /**
             * fnLTR(dst, src)
             *
             * op=0x0F,0x00,reg=0x3 (GRP6:LTR)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnLTR = function LTR(dst, src)
            {
                this.opFlags |= X86.OPFLAG.NOWRITE;
                if (this.segTSS.load(dst) !== X86.ADDR_INVALID) {
                    this.setShort(this.segTSS.addrDesc + X86.DESC.ACC.OFFSET, this.segTSS.acc |= X86.DESC.ACC.TYPE.LDT);
                    this.segTSS.type = X86.DESC.ACC.TYPE.TSS_BUSY;
                }
                this.nStepCycles -= (17 + (this.regEA === X86.ADDR_INVALID? 0 : 2));
                return dst;
            };
            
            /**
             * fnMOV(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (current value, ignored)
             * @param {number} src (new value)
             * @return {number} dst (updated value, from src)
             */
            X86.fnMOV = function MOV(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMovRR : this.cycleCounts.nOpCyclesMovRM) : this.cycleCounts.nOpCyclesMovMR);
                return src;
            };
            
            /**
             * fnMOVX(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (current value, ignored)
             * @param {number} src (new value)
             * @return {number} dst (updated value, from src)
             */
            X86.fnMOVX = function MOVX(dst, src)
            {
                return src;
            };
            
            /**
             * fnMOVn(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (current value, ignored)
             * @param {number} src (new value)
             * @return {number} dst (updated value, from src)
             */
            X86.fnMOVn = function MOVn(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMovRI : this.cycleCounts.nOpCyclesMovMI);
                return src;
            };
            
            /**
             * fnMOVxx(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (current value, ignored)
             * @param {number} src (new value)
             * @return {number} dst (src is overridden, replaced with regXX, as specified by opMOVwsr() or opMOVrc())
             */
            X86.fnMOVxx = function MOVxx(dst, src)
            {
                if (this.regEAWrite !== X86.ADDR_INVALID) {
                    /*
                     * When a 32-bit OPERAND size is in effect, opMOVwsr() will write 32 bits (zero-extended) if the destination
                     * is a register, but only 16 bits if the destination is memory.  The only other caller, opMOVrc(), is not
                     * affected, because it writes only to register destinations.
                     */
                    this.setDataSize(2);
                }
                return X86.fnMOV.call(this, dst, this.regXX);
            };
            
            /**
             * fnMULb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number} (we return dst unchanged, since it's actually AX that's modified)
             */
            X86.fnMULb = function MULb(dst, src)
            {
                this.fMDSet = true;
                this.regMDLo = ((src = this.regEAX & 0xff) * dst) & 0xffff;
            
                if (this.regMDLo & 0xff00) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) this.traceLog('MULb', src, dst, null, this.getPS(), this.regMDLo);
            
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMulBR : this.cycleCounts.nOpCyclesMulBM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnMUL32(dst, src)
             *
             * This sets regMDHi:regMDLo to the 64-bit result of dst * src, both of which are treated as unsigned.
             *
             * TODO: Some potential optimizations include:
             *
             *  1) Early outs if either parameter is zero, since the result will obviously be zero
             *  2) Using "normal" JavaScript multiplication if both parameters are < 32767
             *
             * Refer to: http://stackoverflow.com/questions/13597364/32-bit-signed-multiplication-with-a-64-bit-result-in-javascript
             *
             * @this {X86CPU}
             * @param {number} dst (any 32-bit number, treated as unsigned)
             * @param {number} src (any 32-bit number, treated as unsigned)
             */
            X86.fnMUL32 = function MUL32(dst, src)
            {
                var srcLo = src & 0xffff;
                var srcHi = src >>> 16;
                var dstLo = dst & 0xffff;
                var dstHi = dst >>> 16;
            
                var mul00 = srcLo * dstLo;
                var mul16 = ((mul00 >>> 16) + (srcHi * dstLo));
                var mul32 = mul16 >>> 16;
                mul16 = ((mul16 & 0xffff) + (srcLo * dstHi));
                mul32 += ((mul16 >>> 16) + (srcHi * dstHi));
            
                this.fMDSet = true;
                this.regMDLo = (mul16 << 16) | (mul00 & 0xffff);
                this.regMDHi = mul32|0;
            };
            
            /**
             * fnMULw(dst, src)
             *
             * regMDHi:regMDLo = dst * regEAX
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null; AX or EAX is the implied src)
             * @return {number} (we return dst unchanged, since it's actually DX:AX that's modified)
             */
            X86.fnMULw = function MULw(dst, src)
            {
                if (this.dataSize == 2) {
                    src = this.regEAX & 0xffff;
                    var result = (src * dst)|0;
                    this.fMDSet = true;
                    this.regMDLo = result & 0xffff;
                    this.regMDHi = (result >> 16) & 0xffff;
                } else {
                    X86.fnMUL32.call(this, dst, this.regEAX);
                }
            
                if (this.regMDHi) {
                    this.setCF(); this.setOF();
                } else {
                    this.clearCF(); this.clearOF();
                }
            
                /*
                 * Multiply/divide instructions specify only a single operand, which the decoders pass to us
                 * via the dst parameter, so we set src to the other implied operand (either AX or DX:AX).
                 * However, src is technically an output, and dst is merely an input (which is why we must return
                 * dst unchanged). So, to make traceLog() more consistent, we reverse the order of dst and src.
                 */
                if (DEBUG && DEBUGGER) {
                    if (this.dataSize == 2) {
                        this.traceLog('MULw', src, dst, null, this.getPS(), this.regMDLo | (this.regMDHi << 16));
                    } else {
                        this.traceLog('MULd', src, dst, null, this.getPS(), this.regMDLo, this.regMDHi);
                    }
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMulWR : this.cycleCounts.nOpCyclesMulWM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnNEGb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnNEGb = function NEGb(dst, src)
            {
                var b = (-dst)|0;
                this.setArithResult(0, dst, b, X86.RESULT.BYTE | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesNegR : this.cycleCounts.nOpCyclesNegM);
                return b & 0xff;
            };
            
            /**
             * fnNEGw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnNEGw = function NEGw(dst, src)
            {
                var w = (-dst)|0;
                this.setArithResult(0, dst, w, X86.RESULT.WORD | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesNegR : this.cycleCounts.nOpCyclesNegM);
                return w & 0xffff;
            };
            
            /**
             * fnNOTb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnNOTb = function NOTb(dst, src)
            {
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesNegR : this.cycleCounts.nOpCyclesNegM);
                return dst ^ 0xff;
            };
            
            /**
             * fnNOTw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnNOTw = function NOTw(dst, src)
            {
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesNegR : this.cycleCounts.nOpCyclesNegM);
                return dst ^ 0xffff;
            };
            
            /**
             * fnORb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnORb = function ORb(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return this.setLogicResult(dst | src, X86.RESULT.BYTE);
            };
            
            /**
             * fnORw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnORw = function ORw(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return this.setLogicResult(dst | src, this.dataType);
            };
            
            /**
             * fnPOPw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (current value, ignored)
             * @param {number} src (new value)
             * @return {number} dst (updated value, from src)
             */
            X86.fnPOPw = function POPw(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesPopReg : this.cycleCounts.nOpCyclesPopMem);
                return src;
            };
            
            /**
             * fnPUSHw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnPUSHw = function PUSHw(dst, src)
            {
                var w = dst;
                if (this.opFlags & X86.OPFLAG.PUSHSP) {
                    /*
                     * This is the one case where must actually modify dst, so that the ModRM function will
                     * not put a stale value back into the SP register.
                     */
                    dst = (dst - 2) & 0xffff;
                    /*
                     * And on the 8086/8088, the value we just calculated also happens to be the value that must
                     * be pushed.
                     */
                    if (this.model < X86.MODEL_80286) w = dst;
                }
                this.pushWord(w);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesPushReg : this.cycleCounts.nOpCyclesPushMem);
                /*
                 * The PUSH is the only write that needs to occur; dst was the source operand and does not need to be rewritten.
                 */
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnRCLb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRCLb = function RCLb(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = this.getCarry();
                    count %= 9;
                    if (!count) {
                        carry <<= 7;
                    } else {
                        result = ((dst << count) | (carry << (count - 1)) | (dst >> (9 - count))) & 0xff;
                        carry = dst << (count - 1);
                    }
                    this.setRotateResult(result, carry, X86.RESULT.BYTE);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RCLb', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRCLw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRCLw = function RCLw(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = this.getCarry();
                    count %= 17;
                    if (!count) {
                        carry <<= 15;
                    } else {
                        result = ((dst << count) | (carry << (count - 1)) | (dst >> (17 - count))) & 0xffff;
                        carry = dst << (count - 1);
                    }
                    this.setRotateResult(result, carry, X86.RESULT.WORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RCLw', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRCLd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRCLd = function RCLd(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;     // this 32-bit-only function could mask with 0x1f directly
                if (count) {
                    var carry = this.getCarry();
                    /*
                     * JavaScript Alert: much like a post-8086 Intel CPU, JavaScript shift counts are mod 32,
                     * so "dst >>> 32" is equivalent to "dst >>> 0", which doesn't shift any bits at all.  To
                     * compensate, we shift one bit less than the maximum, and then shift one bit farther.
                     */
                    result = (dst << count) | (carry << (count - 1)) | ((dst >>> (32 - count)) >>> 1);
                    carry = dst << (count - 1);
                    this.setRotateResult(result, carry, X86.RESULT.DWORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RCLd', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRCRb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRCRb = function RCRb(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = this.getCarry();
                    count %= 9;
                    if (!count) {
                        carry <<= 7;
                    } else {
                        result = ((dst >> count) | (carry << (8 - count)) | (dst << (9 - count))) & 0xff;
                        carry = dst << (8 - count);
                    }
                    this.setRotateResult(result, carry, X86.RESULT.BYTE);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RCRb', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRCRw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRCRw = function RCRw(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = this.getCarry();
                    count %= 17;
                    if (!count) {
                        carry <<= 15;
                    } else {
                        result = ((dst >> count) | (carry << (16 - count)) | (dst << (17 - count))) & 0xffff;
                        carry = dst << (16 - count);
                    }
                    this.setRotateResult(result, carry, X86.RESULT.WORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RCRw', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRCRd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRCRd = function RCRd(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;     // this 32-bit-only function could mask with 0x1f directly
                if (count) {
                    var carry = this.getCarry();
                    /*
                     * JavaScript Alert: much like a post-8086 Intel CPU, JavaScript shift counts are mod 32,
                     * so "dst << 32" is equivalent to "dst << 0", which doesn't shift any bits at all.  To
                     * compensate, we shift one bit less than the maximum, and then shift one bit farther.
                     */
                    result = (dst >>> count) | (carry << (32 - count)) | ((dst << (32 - count)) << 1);
                    carry = dst << (32 - count);
                    this.setRotateResult(result, carry, X86.RESULT.DWORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RCRd', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRETF(n)
             *
             * For protected-mode, this function must be prepared to pop any arguments off the current stack AND
             * whatever stack we may have switched to (setCSIP() returns true only when a stack switch has occurred).
             *
             * @this {X86CPU}
             * @param {number} n
             */
            X86.fnRETF = function RETF(n)
            {
                var newIP = this.popWord();
                var newCS = this.popWord();
                if (DEBUG) this.printMessage(" returning to " + str.toHex(newCS, 4) + ':' + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
                n <<= (this.dataSize >> 2);
                if (n) this.setSP(this.getSP() + n);            // TODO: optimize
                if (this.setCSIP(newIP, newCS, false)) {
                    if (n) this.setSP(this.getSP() + n);        // TODO: optimize
                    /*
                     * As per Intel documentation: "If any of [the DS or ES] registers refer to segments whose DPL is
                     * less than the new CPL (excluding conforming code segments), the segment register is loaded with
                     * the null selector."
                     *
                     * TODO: I'm not clear on whether a conforming code segment must also be marked readable, so I'm playing
                     * it safe and using CODE_CONFORMING instead of CODE_CONFORMING_READABLE.  Also, for the record, I've not
                     * seen this situation occur yet (eg, in OS/2 1.0).
                     */
                    if ((this.segDS.sel & X86.SEL.MASK) && this.segDS.dpl < this.segCS.cpl && (this.segDS.acc & X86.DESC.ACC.TYPE.CODE_CONFORMING) != X86.DESC.ACC.TYPE.CODE_CONFORMING) {
                        this.assert(false);         // I'm not asserting this is bad, I just want to see it in action
                        this.segDS.load(0);
                    }
                    if ((this.segES.sel & X86.SEL.MASK) && this.segES.dpl < this.segCS.cpl && (this.segES.acc & X86.DESC.ACC.TYPE.CODE_CONFORMING) != X86.DESC.ACC.TYPE.CODE_CONFORMING) {
                        this.assert(false);         // I'm not asserting this is bad, I just want to see it in action
                        this.segES.load(0);
                    }
                }
                if (n == 2 && this.cIntReturn) this.checkIntReturn(this.regLIP);
            };
            
            /**
             * fnROLb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnROLb = function ROLb(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry;
                    count &= 0x7;
                    if (!count) {
                        carry = dst << 7;
                    } else {
                        carry = dst << (count - 1);
                        result = ((dst << count) | (dst >> (8 - count))) & 0xff;
                    }
                    this.setRotateResult(result, carry, X86.RESULT.BYTE);
                }
                if (DEBUG && DEBUGGER) this.traceLog('ROLb', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnROLw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnROLw = function ROLw(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry;
                    count &= 0xf;
                    if (!count) {
                        carry = dst << 15;
                    } else {
                        carry = dst << (count - 1);
                        result = ((dst << count) | (dst >> (16 - count))) & 0xffff;
                    }
                    this.setRotateResult(result, carry, X86.RESULT.WORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('ROLw', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnROLd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnROLd = function ROLd(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = dst << (count - 1);
                    result = (dst << count) | (dst >>> (32 - count));
                    this.setRotateResult(result, carry, X86.RESULT.DWORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('ROLd', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRORb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRORb = function RORb(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry;
                    count &= 0x7;
                    if (!count) {
                        carry = dst;
                    } else {
                        carry = dst << (8 - count);
                        result = ((dst >>> count) | carry) & 0xff;
                    }
                    this.setRotateResult(result, carry, X86.RESULT.BYTE);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RORb', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRORw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRORw = function RORw(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry;
                    count &= 0xf;
                    if (!count) {
                        carry = dst;
                    } else {
                        carry = dst << (16 - count);
                        result = ((dst >>> count) | carry) & 0xffff;
                    }
                    this.setRotateResult(result, carry, X86.RESULT.WORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RORw', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnRORd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL)
             * @return {number}
             */
            X86.fnRORd = function RORd(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = dst << (32 - count);
                    result = (dst >>> count) | carry;
                    this.setRotateResult(result, carry, X86.RESULT.DWORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('RORd', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnSARb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSARb = function SARb(dst, src)
            {
                var count = src & this.nShiftCountMask;
                if (count) {
                    if (count > 9) count = 9;
                    var carry = ((dst << 24) >> 24) >> (count - 1);
                    dst = (carry >> 1) & 0xff;
                    this.setLogicResult(dst, X86.RESULT.BYTE, carry & 0x1);
                }
                return dst;
            };
            
            /**
             * fnSARw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSARw = function SARw(dst, src)
            {
                var count = src & this.nShiftCountMask;
                if (count) {
                    if (count > 17) count = 17;
                    var carry = ((dst << 16) >> 16) >> (count - 1);
                    dst = (carry >> 1) & 0xffff;
                    this.setLogicResult(dst, X86.RESULT.WORD, carry & 0x1);
                }
                return dst;
            };
            
            /**
             * fnSARd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSARd = function SARd(dst, src)
            {
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = dst >> (count - 1);
                    dst = (carry >> 1);
                    this.setLogicResult(dst, X86.RESULT.DWORD, carry & 0x1);
                }
                return dst;
            };
            
            /**
             * fnSBBb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSBBb = function SBBb(dst, src)
            {
                var b = (dst - src - this.getCarry())|0;
                this.setArithResult(dst, src, b, X86.RESULT.BYTE | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return b & 0xff;
            };
            
            /**
             * fnSBBw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSBBw = function SBBw(dst, src)
            {
                var w = (dst - src - this.getCarry())|0;
                this.setArithResult(dst, src, w, this.dataType | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return w & this.dataMask;
            };
            
            /**
             * fnSETcc()
             *
             * @this {X86CPU}
             * @param {function(number,number)} fnSet
             */
            X86.fnSETcc = function SETcc(fnSet)
            {
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModMemByte[this.getIPByte()].call(this, fnSet);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesSetR : this.cycleCounts.nOpCyclesSetM);
            };
            
            /**
             * fnSETO(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETO = function SETO(dst, src)
            {
                return (this.getOF()? 1 : 0);
            };
            
            /**
             * fnSETNO(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNO = function SETNO(dst, src)
            {
                return (this.getOF()? 0 : 1);
            };
            
            /**
             * fnSETC(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETC = function SETC(dst, src)
            {
                return (this.getCF()? 1 : 0);
            };
            
            /**
             * fnSETNC(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNC = function SETNC(dst, src)
            {
                return (this.getCF()? 0 : 1);
            };
            
            /**
             * fnSETZ(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETZ = function SETZ(dst, src)
            {
                return (this.getZF()? 1 : 0);
            };
            
            /**
             * fnSETNZ(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNZ = function SETNZ(dst, src)
            {
                return (this.getZF()? 0 : 1);
            };
            
            /**
             * fnSETBE(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETBE = function SETBE(dst, src)
            {
                return (this.getCF() || this.getZF()? 1 : 0);
            };
            
            /**
             * fnSETNBE(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNBE = function SETNBE(dst, src)
            {
                return (this.getCF() || this.getZF()? 0 : 1);
            };
            
            /**
             * fnSETS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETS = function SETS(dst, src)
            {
                return (this.getSF()? 1 : 0);
            };
            
            /**
             * fnSETNS(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNS = function SETNS(dst, src)
            {
                return (this.getSF()? 0 : 1);
            };
            
            /**
             * fnSETP(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETP = function SETP(dst, src)
            {
                return (this.getPF()? 1 : 0);
            };
            
            /**
             * fnSETNP(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNP = function SETNP(dst, src)
            {
                return (this.getPF()? 0 : 1);
            };
            
            /**
             * fnSETL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETL = function SETL(dst, src)
            {
                return (!this.getSF() != !this.getOF()? 1 : 0);
            };
            
            /**
             * fnSETNL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNL = function SETNL(dst, src)
            {
                return (!this.getSF() != !this.getOF()? 0 : 1);
            };
            
            /**
             * fnSETLE(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETLE = function SETLE(dst, src)
            {
                return (this.getZF() || !this.getSF() != !this.getOF()? 1 : 0);
            };
            
            /**
             * fnSETNLE(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst (ignored)
             * @param {number} src (ignored)
             * @return {number}
             */
            X86.fnSETNLE = function SETNLE(dst, src)
            {
                return (this.getZF() || !this.getSF() != !this.getOF()? 0 : 1);
            };
            
            /**
             * fnSGDT(dst, src)
             *
             * op=0x0F,0x01,reg=0x0 (GRP7:SGDT)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnSGDT = function SGDT(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opInvalid.call(this);
                } else {
                    /*
                     * We don't need to setShort() the first word of the operand, because the ModRM group decoder that
                     * calls us does that automatically with the value we return (dst).
                     */
                    dst = this.addrGDTLimit - this.addrGDT;
                    this.assert(!(dst & ~0xffff));
                    /*
                     * We previously left the 6th byte of the target operand "undefined".  But it turns out we have to set
                     * it to *something*, because there's processor detection in PC-DOS 7.0 (at least in the SETUP portion)
                     * that looks like this:
                     *
                     *      145E:4B84 9C            PUSHF
                     *      145E:4B85 55            PUSH     BP
                     *      145E:4B86 8BEC          MOV      BP,SP
                     *      145E:4B88 B80000        MOV      AX,0000
                     *      145E:4B8B 50            PUSH     AX
                     *      145E:4B8C 9D            POPF
                     *      145E:4B8D 9C            PUSHF
                     *      145E:4B8E 58            POP      AX
                     *      145E:4B8F 2500F0        AND      AX,F000
                     *      145E:4B92 3D00F0        CMP      AX,F000
                     *      145E:4B95 7511          JNZ      4BA8
                     *      145E:4BA8 C8060000      ENTER    0006,00
                     *      145E:4BAC 0F0146FA      SGDT     [BP-06]
                     *      145E:4BB0 807EFFFF      CMP      [BP-01],FF
                     *      145E:4BB4 C9            LEAVE
                     *      145E:4BB5 BA8603        MOV      DX,0386
                     *      145E:4BB8 7503          JNZ      4BBD
                     *      145E:4BBA BA8602        MOV      DX,0286
                     *      145E:4BBD 89163004      MOV      [0430],DX
                     *      145E:4BC1 5D            POP      BP
                     *      145E:4BC2 9D            POPF
                     *      145E:4BC3 CB            RETF
                     *
                     * This code is expecting SGDT on an 80286 to set the 6th "undefined" byte to 0xFF.
                     *
                     * The 80386 adds an additional wrinkle: the 6th byte must be 0x00 if the OPERAND size is 2, whereas
                     * it must passed through if the OPERAND size is 4.
                     *
                     * In addition, when the OPERAND size is 4, the ModRM group decoder will call setLong(dst) rather than
                     * setShort(dst); we could fix that by forcing the dataSize to 2, but it seems simpler to set the high
                     * bits (16-31) of dst to match the low bits (0-15) of addr, so that the caller will harmlessly rewrite
                     * what we already wrote with the setLong() below.
                     */
                    var addr = this.addrGDT;
                    if (this.model == X86.MODEL_80286) {
                        addr |= (0xff000000|0);
                    }
                    else if (this.model >= X86.MODEL_80386) {
                        if (this.dataSize == 2) {
                            addr &= 0x00ffffff;
                        } else {
                            dst |= (addr << 16);
                        }
                    }
                    this.setLong(this.regEA + 2, addr);
                    this.nStepCycles -= 11;
                }
                return dst;
            };
            
            /**
             * fnSHLb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSHLb = function SHLb(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = 0;
                    if (count > 8) {
                        result = 0;
                    } else {
                        carry = dst << (count - 1);
                        result = (carry << 1) & 0xff;
                    }
                    this.setLogicResult(result, X86.RESULT.BYTE, carry & X86.RESULT.BYTE, (result ^ carry) & X86.RESULT.BYTE);
                }
                if (DEBUG && DEBUGGER) this.traceLog('SHLb', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnSHLw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSHLw = function SHLw(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = 0;
                    if (count > 16) {
                        result = 0;
                    } else {
                        carry = dst << (count - 1);
                        result = (carry << 1) & 0xffff;
                    }
                    this.setLogicResult(result, X86.RESULT.WORD, carry & X86.RESULT.WORD, (result ^ carry) & X86.RESULT.WORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('SHLw', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnSHLd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSHLd = function SHLd(dst, src)
            {
                var result = dst;
                var flagsIn = (DEBUG? this.getPS() : 0);
                var count = src & this.nShiftCountMask;     // this 32-bit-only function could mask with 0x1f directly
                if (count) {
                    var carry = dst << (count - 1);
                    result = (carry << 1);
                    this.setLogicResult(result, X86.RESULT.DWORD, carry & X86.RESULT.DWORD, (result ^ carry) & X86.RESULT.DWORD);
                }
                if (DEBUG && DEBUGGER) this.traceLog('SHLd', dst, src, flagsIn, this.getPS(), result);
                return result;
            };
            
            /**
             * fnSHLDw(dst, src, count)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @param {number} count (0-31)
             * @return {number}
             */
            X86.fnSHLDw = function SHLDw(dst, src, count)
            {
                if (count) {
                    if (count > 16) {
                        dst = src;
                        count -= 16;
                    }
                    var carry = dst << (count - 1);
                    dst = ((carry << 1) | (src >> (16 - count))) & 0xffff;
                    this.setLogicResult(dst, X86.RESULT.WORD, carry & X86.RESULT.WORD);
                }
                return dst;
            };
            
            /**
             * fnSHLDd(dst, src, count)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @param {number} count
             * @return {number}
             */
            X86.fnSHLDd = function SHLDd(dst, src, count)
            {
                if (count) {
                    var carry = dst << (count - 1);
                    dst = (carry << 1) | (src >> (32 - count));
                    this.setLogicResult(dst, X86.RESULT.DWORD, carry & X86.RESULT.DWORD);
                }
                return dst;
            };
            
            /**
             * fnSHLDwi(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHLDwi = function SHLDwi(dst, src)
            {
                return X86.fnSHLDw.call(this, dst, src, this.getIPByte());
            };
            
            /**
             * fnSHLDdi(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHLDdi = function SHLDdi(dst, src)
            {
                return X86.fnSHLDd.call(this, dst, src, this.getIPByte());
            };
            
            /**
             * fnSHLDwCL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHLDwCL = function SHLDwCL(dst, src)
            {
                return X86.fnSHLDw.call(this, dst, src, this.regECX & 0x1f);
            };
            
            /**
             * fnSHLDdCL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHLDdCL = function SHLDdCL(dst, src)
            {
                return X86.fnSHLDd.call(this, dst, src, this.regECX & 0x1f);
            };
            
            /**
             * fnSHRb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSHRb = function SHRb(dst, src)
            {
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = (count > 8? 0 : (dst >>> (count - 1)));
                    dst = (carry >>> 1) & 0xff;
                    this.setLogicResult(dst, X86.RESULT.BYTE, carry & 0x1, dst & X86.RESULT.BYTE);
                }
                return dst;
            };
            
            /**
             * fnSHRw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSHRw = function SHRw(dst, src)
            {
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = (count > 16? 0 : (dst >>> (count - 1)));
                    dst = (carry >>> 1) & 0xffff;
                    this.setLogicResult(dst, X86.RESULT.WORD, carry & 0x1, dst & X86.RESULT.WORD);
                }
                return dst;
            };
            
            /**
             * fnSHRd(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (1 or CL, or an immediate byte for 80186/80188 and up)
             * @return {number}
             */
            X86.fnSHRd = function SHRd(dst, src)
            {
                var count = src & this.nShiftCountMask;
                if (count) {
                    var carry = (dst >>> (count - 1));
                    dst = (carry >>> 1);
                    this.setLogicResult(dst, X86.RESULT.DWORD, carry & 0x1, dst & X86.RESULT.DWORD);
                }
                return dst;
            };
            
            /**
             * fnSHRDw(dst, src, count)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @param {number} count (0-31)
             * @return {number}
             */
            X86.fnSHRDw = function SHRDw(dst, src, count)
            {
                if (count) {
                    if (count > 16) {
                        dst = src;
                        count -= 16;
                    }
                    var carry = dst >> (count - 1);
                    dst = ((carry >> 1) | (src << (16 - count))) & 0xffff;
                    this.setLogicResult(dst, X86.RESULT.WORD, carry & 0x1);
                }
                return dst;
            };
            
            /**
             * fnSHRDd(dst, src, count)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @param {number} count
             * @return {number}
             */
            X86.fnSHRDd = function SHRDd(dst, src, count)
            {
                if (count) {
                    var carry = dst >> (count - 1);
                    dst = (carry >> 1) | (src << (32 - count));
                    this.setLogicResult(dst, X86.RESULT.DWORD, carry & 0x1);
                }
                return dst;
            };
            
            /**
             * fnSHRDwi(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHRDwi = function SHRDwi(dst, src)
            {
                return X86.fnSHRDw.call(this, dst, src, this.getIPByte());
            };
            
            /**
             * fnSHRDdi(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHRDdi = function SHRDdi(dst, src)
            {
                return X86.fnSHRDd.call(this, dst, src, this.getIPByte());
            };
            
            /**
             * fnSHRDwCL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHRDwCL = function SHRDwCL(dst, src)
            {
                return X86.fnSHRDw.call(this, dst, src, this.regECX & 0x1f);
            };
            
            /**
             * fnSHRDdCL(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSHRDdCL = function SHRDdCL(dst, src)
            {
                return X86.fnSHRDd.call(this, dst, src, this.regECX & 0x1f);
            };
            
            /**
             * fnSIDT(dst, src)
             *
             * op=0x0F,0x01,reg=0x1 (GRP7:SIDT)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnSIDT = function SIDT(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    X86.opInvalid.call(this);
                } else {
                    /*
                     * We don't need to setShort() the first word of the operand, because the ModRM group decoder that calls
                     * us does that automatically with the value we return (dst).
                     */
                    dst = this.addrIDTLimit - this.addrIDT;
                    this.assert(!(dst & ~0xffff));
                    /*
                     * As with SGDT, the 6th byte is technically "undefined" on an 80286, but we now set it to 0xFF, for the
                     * same reasons discussed in SGDT (above).
                     */
                    var addr = this.addrIDT;
                    if (this.model == X86.MODEL_80286) {
                        addr |= (0xff000000|0);
                    }
                    else if (this.model >= X86.MODEL_80386) {
                        if (this.dataSize == 2) {
                            addr &= 0x00ffffff;
                        } else {
                            dst |= (addr << 16);
                        }
                    }
                    this.setLong(this.regEA + 2, addr);
                    this.nStepCycles -= 12;
                }
                return dst;
            };
            
            /**
             * fnSLDT(dst, src)
             *
             * op=0x0F,0x00,reg=0x0 (GRP6:SLDT)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnSLDT = function SLDT(dst, src)
            {
                this.nStepCycles -= (2 + (this.regEA === X86.ADDR_INVALID? 0 : 1));
                return this.segLDT.sel;
            };
            
            /**
             * fnSMSW(dst, src)
             *
             * op=0x0F,0x01,reg=0x4 (GRP7:SMSW)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnSMSW = function SMSW(dst, src)
            {
                this.nStepCycles -= (2 + (this.regEA === X86.ADDR_INVALID? 0 : 1));
                return this.regCR0;
            };
            
            /**
             * fnSTR(dst, src)
             *
             * op=0x0F,0x00,reg=0x1 (GRP6:STR)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnSTR = function STR(dst, src)
            {
                this.nStepCycles -= (2 + (this.regEA === X86.ADDR_INVALID? 0 : 1));
                return this.segTSS.sel;
            };
            
            /**
             * fnSUBb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSUBb = function SUBb(dst, src)
            {
                var b = (dst - src)|0;
                this.setArithResult(dst, src, b, X86.RESULT.BYTE | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return b & 0xff;
            };
            
            /**
             * fnSUBw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnSUBw = function SUBw(dst, src)
            {
                var w = (dst - src)|0;
                this.setArithResult(dst, src, w, this.dataType | X86.RESULT.ALL, true);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return w & this.dataMask;
            };
            
            /**
             * fnTEST8(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null; we have to supply the source ourselves)
             * @return {number}
             */
            X86.fnTEST8 = function TEST8(dst, src)
            {
                src = this.getIPByte();
                this.setLogicResult(dst & src, X86.RESULT.BYTE);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesTestRI : this.cycleCounts.nOpCyclesTestMI);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnTEST16(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null; we have to supply the source ourselves)
             * @return {number}
             */
            X86.fnTEST16 = function TEST16(dst, src)
            {
                src = this.getIPWord();
                this.setLogicResult(dst & src, X86.RESULT.WORD);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesTestRI : this.cycleCounts.nOpCyclesTestMI);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnTESTb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnTESTb = function TESTb(dst, src)
            {
                this.setLogicResult(dst & src, X86.RESULT.BYTE);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesTestRR : this.cycleCounts.nOpCyclesTestRM) : this.cycleCounts.nOpCyclesTestRM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnTESTw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnTESTw = function TESTw(dst, src)
            {
                this.setLogicResult(dst & src, X86.RESULT.WORD);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesTestRR : this.cycleCounts.nOpCyclesTestRM) : this.cycleCounts.nOpCyclesTestRM);
                this.opFlags |= X86.OPFLAG.NOWRITE;
                return dst;
            };
            
            /**
             * fnVERR(dst, src)
             *
             * op=0x0F,0x00,reg=0x4 (GRP6:VERR)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnVERR = function VERR(dst, src)
            {
                this.opFlags |= X86.OPFLAG.NOWRITE;
                /*
                 * Currently, segVER.load() will return an error only if the selector is beyond the bounds of the
                 * descriptor table or the descriptor is not for a segment.
                 */
                this.nStepCycles -= (14 + (this.regEA === X86.ADDR_INVALID? 0 : 2));
                if (this.segVER.load(dst, true) !== X86.ADDR_INVALID) {
                    /*
                     * Verify that this is a readable segment; that is, of these four combinations (code+readable,
                     * code+nonreadable, data+writable, date+nonwritable), make sure we're not the second combination.
                     */
                    if ((this.segVER.acc & (X86.DESC.ACC.TYPE.READABLE | X86.DESC.ACC.TYPE.CODE)) != X86.DESC.ACC.TYPE.CODE) {
                        /*
                         * For VERR, if the code segment is readable and conforming, the descriptor privilege level
                         * (DPL) can be any value.
                         *
                         * Otherwise, DPL must be greater than or equal to (have less or the same privilege as) both the
                         * current privilege level and the selector's RPL.
                         */
                        if (this.segVER.dpl >= this.segCS.cpl && this.segVER.dpl >= (dst & X86.SEL.RPL) ||
                            (this.segVER.acc & X86.DESC.ACC.TYPE.CODE_CONFORMING) == X86.DESC.ACC.TYPE.CODE_CONFORMING) {
                            this.setZF();
                            return dst;
                        }
                    }
                }
                this.clearZF();
                return dst;
            };
            
            /**
             * fnVERW(dst, src)
             *
             * op=0x0F,0x00,reg=0x5 (GRP6:VERW)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src (null)
             * @return {number}
             */
            X86.fnVERW = function VERW(dst, src)
            {
                this.opFlags |= X86.OPFLAG.NOWRITE;
                /*
                 * Currently, segVER.load() will return an error only if the selector is beyond the bounds of the
                 * descriptor table or the descriptor is not for a segment.
                 */
                this.nStepCycles -= (14 + (this.regEA === X86.ADDR_INVALID? 0 : 2));
                if (this.segVER.load(dst, true) !== X86.ADDR_INVALID) {
                    /*
                     * Verify that this is a writable data segment
                     */
                    if ((this.segVER.acc & (X86.DESC.ACC.TYPE.WRITABLE | X86.DESC.ACC.TYPE.CODE)) == X86.DESC.ACC.TYPE.WRITABLE) {
                        /*
                         * DPL must be greater than or equal to (have less or the same privilege as) both the current
                         * privilege level and the selector's RPL.
                         */
                        if (this.segVER.dpl >= this.segCS.cpl && this.segVER.dpl >= (dst & X86.SEL.RPL)) {
                            this.setZF();
                            return dst;
                        }
                    }
                }
                this.clearZF();
                return dst;
            };
            
            /**
             * fnXCHGrb(dst, src)
             *
             * If an instruction like "XCHG AL,AH" was a traditional "op dst,src" instruction, dst would contain AL,
             * src would contain AH, and we would return src, which the caller would then store in AL, and we'd be done.
             *
             * However, that's only half of what XCHG does, so THIS function must perform the other half; in the previous
             * example, that means storing the original AL (dst) into AH (src).
             *
             * BACKTRACK support is incomplete without also passing bti values as parameters, because the caller will
             * store btiAH in btiAL, but the original btiAL will be lost.  Similarly, if src is a memory operand, the
             * caller will store btiEALo in btiAL, but again, the original btiAL will be lost.
             *
             * BACKTRACK support for memory operands could be fixed by decoding the dst register in order to determine the
             * corresponding bti and then temporarily storing it in btiEALo around the setEAByte() call below.  Register-only
             * XCHGs would require a more extensive hack.  For now, I'm going to live with one-way BACKTRACK support here.
             *
             * TODO: Implement full BACKTRACK support for XCHG instructions.
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnXCHGrb = function XCHGRb(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    /*
                     * Decode which register was src
                     */
                    switch (this.bModRM & 0x7) {
                    case 0x0:       // AL
                        this.regEAX = (this.regEAX & ~0xff) | dst;
                        break;
                    case 0x1:       // CL
                        this.regECX = (this.regECX & ~0xff) | dst;
                        break;
                    case 0x2:       // DL
                        this.regEDX = (this.regEDX & ~0xff) | dst;
                        break;
                    case 0x3:       // BL
                        this.regEBX = (this.regEBX & ~0xff) | dst;
                        break;
                    case 0x4:       // AH
                        this.regEAX = (this.regEAX & 0xff) | (dst << 8);
                        break;
                    case 0x5:       // CH
                        this.regECX = (this.regECX & 0xff) | (dst << 8);
                        break;
                    case 0x6:       // DH
                        this.regEDX = (this.regEDX & 0xff) | (dst << 8);
                        break;
                    case 0x7:       // BH
                        this.regEBX = (this.regEBX & 0xff) | (dst << 8);
                        break;
                    default:
                        break;      // there IS no other case, but JavaScript inspections don't know that
                    }
                    this.nStepCycles -= this.cycleCounts.nOpCyclesXchgRR;
                } else {
                    /*
                     * This is a case where the ModRM decoder that's calling us didn't know it should have called modEAByte()
                     * instead of getEAByte(), so we compensate by updating regEAWrite.  However, setEAByte() has since been
                     * changed to revalidate the write using segEA:offEA, so updating regEAWrite here isn't strictly necessary.
                     */
                    this.regEAWrite = this.regEA;
                    this.setEAByte(dst);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesXchgRM;
                }
                return src;
            };
            
            /**
             * fnXCHGrw(dst, src)
             *
             * If an instruction like "XCHG AX,DX" was a traditional "op dst,src" instruction, dst would contain AX,
             * src would contain DX, and we would return src, which the caller would then store in AX, and we'd be done.
             *
             * However, that's only half of what XCHG does, so THIS function must perform the other half; in the previous
             * example, that means storing the original AX (dst) into DX (src).
             *
             * TODO: Implement full BACKTRACK support for XCHG instructions (see fnXCHGrb comments).
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnXCHGrw = function XCHGRw(dst, src)
            {
                if (this.regEA === X86.ADDR_INVALID) {
                    /*
                     * Decode which register was src
                     */
                    switch (this.bModRM & 0x7) {
                    case 0x0:       // AX
                        this.regEAX = dst;
                        break;
                    case 0x1:       // CX
                        this.regECX = dst;
                        break;
                    case 0x2:       // DX
                        this.regEDX = dst;
                        break;
                    case 0x3:       // BX
                        this.regEBX = dst;
                        break;
                    case 0x4:       // SP
                        this.setSP(dst);
                        break;
                    case 0x5:       // BP
                        this.regEBP = dst;
                        break;
                    case 0x6:       // SI
                        this.regESI = dst;
                        break;
                    case 0x7:       // DI
                        this.regEDI = dst;
                        break;
                    default:
                        break;      // there IS no other case, but JavaScript inspections don't know that
                    }
                    this.nStepCycles -= this.cycleCounts.nOpCyclesXchgRR;
                } else {
                    /*
                     * This is a case where the ModRM decoder that's calling us didn't know it should have called modEAWord()
                     * instead of getEAWord(), so we compensate by updating regEAWrite.  However, setEAWord() has since been
                     * changed to revalidate the write using segEA:offEA, so updating regEAWrite here isn't strictly necessary.
                     */
                    this.regEAWrite = this.regEA;
                    this.setEAWord(dst);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesXchgRM;
                }
                return src;
            };
            
            /**
             * fnXORb(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnXORb = function XORb(dst, src)
            {
                var b = dst ^ src;
                this.setLogicResult(b, X86.RESULT.BYTE);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return b;
            };
            
            /**
             * fnXORw(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnXORw = function XORw(dst, src)
            {
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesArithRR : this.cycleCounts.nOpCyclesArithRM) : this.cycleCounts.nOpCyclesArithMR);
                return this.setLogicResult(dst ^ src, this.dataType);
            };
            
            /**
             * fnGRPFault(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnGRPFault = function GRPFault(dst, src)
            {
                X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0);
                return dst;
            };
            
            /**
             * fnGRPInvalid(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnGRPInvalid = function GRPInvalid(dst, src)
            {
                X86.opInvalid.call(this);
                return dst;
            };
            
            /**
             * fnGRPUndefined(dst, src)
             *
             * @this {X86CPU}
             * @param {number} dst
             * @param {number} src
             * @return {number}
             */
            X86.fnGRPUndefined = function GRPUndefined(dst, src)
            {
                X86.opUndefined.call(this);
                return dst;
            };
            
            /**
             * fnDIVOverflow()
             *
             * @this {X86CPU}
             */
            X86.fnDIVOverflow = function DIVOverflow()
            {
                this.setIP(this.opLIP - this.segCS.base);
                /*
                 * TODO: Determine the proper cycle cost.
                 */
                X86.fnINT.call(this, X86.EXCEPTION.DIV_ERR, null, 2);
            };
            
            /**
             * fnSrcCount1()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86.fnSrcCount1 = function SrcCount1()
            {
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? 2 : this.cycleCounts.nOpCyclesShift1M);
                return 1;
            };
            
            /**
             * fnSrcCountCL()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86.fnSrcCountCL = function SrcCountCL()
            {
                var count = this.regECX & 0xff;
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesShiftCR : this.cycleCounts.nOpCyclesShiftCM) + (count << this.cycleCounts.nOpCyclesShiftCS);
                return count;
            };
            
            /**
             * fnSrcCountN()
             *
             * @this {X86CPU}
             * @return {number}
             */
            X86.fnSrcCountN = function SrcCountN()
            {
                var count = this.getIPByte();
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesShiftCR : this.cycleCounts.nOpCyclesShiftCM) + (count << this.cycleCounts.nOpCyclesShiftCS);
                return count;
            };
            
            /**
             * fnSrcNone()
             *
             * @this {X86CPU}
             * @return {number|null}
             */
            X86.fnSrcNone = function SrcNone()
            {
                return null;
            };
            
            /**
             * fnFault(nFault, nError, fHalt, nCycles)
             *
             * Helper to dispatch faults.
             *
             * @this {X86CPU}
             * @param {number} nFault
             * @param {number} [nError] (if omitted, no error code will be pushed)
             * @param {boolean} [fHalt] will halt the CPU if true *and* a Debugger is loaded
             * @param {number} [nCycles] cycle count to pass through to fnINT(), if any
             */
            X86.fnFault = function(nFault, nError, fHalt, nCycles)
            {
                if (!this.aFlags.fComplete) {
                    this.printMessage("Fault " + str.toHexByte(nFault) + " blocked by Debugger", Messages.WARN);
                    this.setIP(this.opLIP - this.segCS.base);
                    return;
                }
            
                var fDispatch = false;
                if (this.model >= X86.MODEL_80186) {
                    if (this.nFault < 0) {
                        /*
                         * Single-fault (error code is passed through, and the responsible instruction is restartable)
                         */
                        this.setIP(this.opLIP - this.segCS.base);
                        fDispatch = true;
                    } else if (this.nFault != X86.EXCEPTION.DF_FAULT) {
                        /*
                         * Double-fault (error code is always zero, and the responsible instruction is not restartable)
                         */
                        nError = 0;
                        nFault = X86.EXCEPTION.DF_FAULT;
                        fDispatch = true;
                    } else {
                        /*
                         * Triple-fault (usually referred to in Intel literature as a "shutdown", but at least on the 80286,
                         * it's actually a "reset")
                         */
                        X86.fnFaultMessage.call(this, -1, 0, fHalt);
                        this.resetRegs();
                        return;
                    }
                }
            
                if (X86.fnFaultMessage.call(this, nFault, nError, fHalt)) {
                    fDispatch = false;
                }
            
                if (fDispatch) X86.fnINT.call(this, this.nFault = nFault, nError, nCycles || 0);
            
                /*
                 * Since this fault is likely being issued in the context of an instruction that hasn't finished
                 * executing, and since we currently don't do anything to interrupt that execution (eg, throw a
                 * JavaScript exception), we should shut off all further reads/writes for the current instruction.
                 *
                 * That's easy for any EA-based memory accesses: simply set both the NOREAD and NOWRITE flags.
                 * However, there are also direct, non-EA-based memory accesses to consider.  A perfect example is
                 * opPUSHA(): if a GP fault occurs on any PUSH other than the last, a subsequent PUSH is likely to
                 * cause another fault, which we will misinterpret as a double-fault.
                 *
                 * TODO: Throw a special JavaScript exception that cpu.js must intercept and quietly ignore.
                 */
                this.opFlags |= (X86.OPFLAG.NOREAD | X86.OPFLAG.NOWRITE);
            };
            
            /**
             * fnPageFault(addr, fPresent, fWrite)
             *
             * Helper to dispatch page faults.
             *
             * @this {X86CPU}
             * @param {number} addr
             * @param {boolean} fPresent
             * @param {boolean} fWrite
             */
            X86.fnPageFault = function(addr, fPresent, fWrite)
            {
                this.regCR2 = addr;
                var nError = 0;
                if (fPresent) nError |= X86.PTE.PRESENT;
                if (fWrite) nError |= X86.PTE.READWRITE;
                if (this.segCS.cpl == 3) nError |= X86.PTE.USER;
                X86.fnFault.call(this, X86.EXCEPTION.PG_FAULT, nError);
            };
            
            /**
             * fnFaultMessage()
             *
             * Aside from giving the Debugger an opportunity to report every fault, this also gives us the ability to
             * halt exception processing in tracks: return true to prevent the fault handler from being dispatched.
             *
             * At the moment, the only Debugger control you have over fault interception is setting MESSAGE.FAULT, which
             * will display faults as they occur, and MESSAGE.HALT, which will halt after any Debugger message, including
             * MESSAGE.FAULT.  If you want execution to continue after halting, clear MESSAGE.FAULT and/or MESSAGE.HALT,
             * or single-step over the offending instruction, which will allow the fault to be dispatched.
             *
             * @this {X86CPU}
             * @param {number} nFault
             * @param {number} [nError] (if omitted, no error code will be reported)
             * @param {boolean} [fHalt] true if the CPU should always be halted, false if "it depends"
             * @return {boolean|undefined} true to block the fault (often desirable when fHalt is true), otherwise dispatch it
             */
            X86.fnFaultMessage = function(nFault, nError, fHalt)
            {
                var bitsMessage = Messages.FAULT;
            
                var bOpcode = this.probeAddr(this.regLIP);
            
                /*
                 * OS/2 1.0 uses an INT3 (0xCC) opcode in conjunction with an invalid IDT to trigger a triple-fault
                 * reset and return to real-mode, and these resets happen quite frequently during boot; for example,
                 * OS/2 startup messages are displayed using a series of INT 0x10 BIOS calls for each character, and
                 * each series of BIOS calls requires a round-trip mode switch.
                 *
                 * Since we really only want to halt on "bad" faults, not "good" (ie, intentional) faults, we take
                 * advantage of the fact that all 3 faults comprising the triple-fault point to an INT3 (0xCC) opcode,
                 * and so whenever we see that opcode, we ignore the caller's fHalt flag, and suppress FAULT messages
                 * unless CPU messages are also enabled.
                 *
                 * When a triple fault shows up, nFault is -1; it displays as 0xff only because we use toHexByte().
                 */
                if (bOpcode == X86.OPCODE.INT3 && !this.addrIDTLimit) {
                    fHalt = false;
                    bitsMessage |= Messages.CPU;
                }
            
                /*
                 * Similarly, the PC AT ROM BIOS deliberately generates a couple of GP faults as part of the POST
                 * (Power-On Self Test); we don't want to ignore those, but we don't want to halt on them either.  We
                 * detect those faults by virtue of the LIP being in the range 0x0F0000 to 0x0FFFFF.
                 */
                if (this.regLIP >= 0x0F0000 && this.regLIP <= 0x0FFFFF) {
                    fHalt = false;
                }
            
                /*
                 * However, the foregoing notwithstanding, if MESSAGE.HALT is enabled along with all the other required
                 * MESSAGE bits, then we want to halt regardless.
                 */
                if (this.messageEnabled(bitsMessage | Messages.HALT)) {
                    fHalt = true;
                }
            
                if (this.messageEnabled(bitsMessage) || fHalt) {
                    var sMessage = (fHalt? '\n' : '') + "Fault " + str.toHexByte(nFault) + (nError != null? " (" + str.toHexWord(nError) + ")" : "") + " on opcode " + str.toHexByte(bOpcode) + " at " + this.dbg.hexOffset(this.getIP(), this.getCS()) + " (%" + str.toHex(this.regLIP, 6) + ")";
                    var fRunning = this.aFlags.fRunning;
                    if (this.printMessage(sMessage, bitsMessage)) {
                        if (fHalt) {
                            /*
                             * By setting fHalt to fRunning (which is true while running but false while single-stepping),
                             * this allows a fault to be dispatched when you single-step over a faulting instruction; you can
                             * then continue single-stepping into the fault handler, or start running again.
                             *
                             * Note that we had to capture fRunning before calling printMessage(), because if MESSAGE.HALT
                             * is set, printMessage() will have already halted the CPU.
                             */
                            fHalt = fRunning;
                            this.dbg.stopCPU();
                        }
                    } else {
                        /*
                         * If printMessage() returned false, then messageEnabled() must have returned false as well, which
                         * means that fHalt must be true.  Which means we should shut the machine down.
                         */
                        this.assert(fHalt);
                        this.notice(sMessage);
                        this.stopCPU();
                    }
                }
                return fHalt;
            };
            
          • x86modb.js
            /**
             * @fileoverview Implements PCjs 8086 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModB = {};
            
            X86ModB.aOpModReg = [
                /**
                 * opModRegByte00(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte00(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte01(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte01(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte02(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte02(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte03(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte03(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte04(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte04(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte05(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte05(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte06(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte06(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte07(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte07(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte08(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte08(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte09(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte09(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte0A(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte0A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte0B(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte0B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte0C(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte0C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte0D(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte0D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte0E(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte0E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte0F(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte0F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte10(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte10(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte11(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte11(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte12(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte12(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte13(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte13(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte14(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte14(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte15(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte15(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte16(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte16(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte17(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte17(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte18(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte18(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte19(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte19(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte1A(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte1A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte1B(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte1B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte1C(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte1C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte1D(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte1D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte1E(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte1E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte1F(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte1F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte20(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte20(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte21(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte21(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte22(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte22(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte23(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte23(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte24(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte24(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regESI));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte25(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte25(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEDI));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte26(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte26(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte27(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte27(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte28(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte28(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.regESI));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte29(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte29(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte2A(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte2A(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte2B(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte2B(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte2C(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte2C(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regESI));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte2D(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte2D(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEDI));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte2E(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte2E(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte2F(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte2F(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte30(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte30(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte31(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte31(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte32(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte32(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte33(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte33(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte34(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte34(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regESI));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte35(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte35(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEDI));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte36(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte36(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte37(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte37(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte38(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte38(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte39(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte39(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte3A(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte3A(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegByte3B(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte3B(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegByte3C(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte3C(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regESI));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte3D(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte3D(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEDI));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte3E(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte3E(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegByte3F(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte3F(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegByte40(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte40(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte41(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte41(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte42(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte42(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte43(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte43(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte44(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte44(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte45(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte45(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte46(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte46(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte47(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte47(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte48(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte48(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte49(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte49(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte4A(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte4A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte4B(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte4B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte4C(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte4C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte4D(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte4D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte4E(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte4E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte4F(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte4F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte50(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte50(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte51(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte51(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte52(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte52(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte53(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte53(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte54(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte54(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte55(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte55(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte56(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte56(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte57(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte57(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte58(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte58(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte59(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte59(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte5A(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte5A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte5B(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte5B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte5C(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte5C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte5D(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte5D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte5E(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte5E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte5F(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte5F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte60(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte60(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte61(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte61(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte62(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte62(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte63(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte63(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte64(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte64(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte65(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte65(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte66(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte66(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte67(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte67(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte68(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte68(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte69(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte69(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte6A(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte6A(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte6B(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte6B(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte6C(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte6C(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte6D(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte6D(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte6E(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte6E(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte6F(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte6F(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte70(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte70(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte71(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte71(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte72(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte72(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte73(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte73(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte74(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte74(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte75(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte75(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte76(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte76(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte77(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte77(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte78(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte78(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte79(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte79(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte7A(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte7A(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte7B(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte7B(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte7C(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte7C(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte7D(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte7D(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte7E(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte7E(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte7F(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte7F(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte80(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte80(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte81(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte81(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte82(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte82(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte83(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte83(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte84(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte84(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte85(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte85(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte86(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte86(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte87(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte87(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte88(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte88(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte89(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte89(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte8A(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte8A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte8B(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte8B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte8C(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte8C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte8D(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte8D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte8E(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte8E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte8F(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte8F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte90(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte90(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte91(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte91(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte92(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte92(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte93(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte93(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte94(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte94(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte95(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte95(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte96(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte96(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte97(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte97(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte98(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte98(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte99(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte99(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte9A(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte9A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByte9B(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte9B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByte9C(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte9C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte9D(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte9D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte9E(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte9E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByte9F(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByte9F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteA0(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA0(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteA1(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA1(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteA2(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA2(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteA3(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA3(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteA4(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA4(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteA5(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA5(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteA6(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA6(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteA7(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA7(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteA8(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA8(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteA9(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteA9(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteAA(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteAA(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteAB(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteAB(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteAC(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteAC(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteAD(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteAD(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteAE(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteAE(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteAF(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteAF(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteB0(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB0(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteB1(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB1(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteB2(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB2(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteB3(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB3(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteB4(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB4(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteB5(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB5(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteB6(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB6(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteB7(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB7(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteB8(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB8(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteB9(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteB9(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteBA(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteBA(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegByteBB(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteBB(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegByteBC(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteBC(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteBD(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteBD(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteBE(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteBE(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteBF(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteBF(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegByteC0(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC0(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEAX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                },
                /**
                 * opModRegByteC1(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC1(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regECX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteC2(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC2(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEDX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteC3(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC3(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEBX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteC4(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC4(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEAX >> 8));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteC5(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC5(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regECX >> 8));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteC6(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC6(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEDX >> 8));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteC7(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC7(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEBX >> 8));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteC8(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC8(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEAX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteC9(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteC9(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regECX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                },
                /**
                 * opModRegByteCA(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteCA(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEDX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteCB(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteCB(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEBX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteCC(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteCC(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEAX >> 8));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteCD(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteCD(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regECX >> 8));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteCE(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteCE(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEDX >> 8));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteCF(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteCF(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEBX >> 8));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteD0(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD0(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEAX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteD1(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD1(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regECX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteD2(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD2(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEDX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                },
                /**
                 * opModRegByteD3(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD3(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEBX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteD4(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD4(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEAX >> 8));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteD5(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD5(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regECX >> 8));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteD6(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD6(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEDX >> 8));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteD7(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD7(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEBX >> 8));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteD8(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD8(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEAX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteD9(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteD9(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regECX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteDA(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteDA(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEDX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteDB(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteDB(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEBX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                },
                /**
                 * opModRegByteDC(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteDC(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEAX >> 8));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteDD(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteDD(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regECX >> 8));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteDE(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteDE(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEDX >> 8));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteDF(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteDF(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEBX >> 8));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteE0(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE0(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.regEAX & 0xff);
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteE1(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE1(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.regECX & 0xff);
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteE2(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE2(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.regEDX & 0xff);
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteE3(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE3(fn) {
                    var b = fn.call(this, this.regEAX >> 8, this.regEBX & 0xff);
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteE4(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE4(fn) {
                    var b = fn.call(this, this.regEAX >> 8, (this.regEAX >> 8));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                },
                /**
                 * opModRegByteE5(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE5(fn) {
                    var b = fn.call(this, this.regEAX >> 8, (this.regECX >> 8));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteE6(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE6(fn) {
                    var b = fn.call(this, this.regEAX >> 8, (this.regEDX >> 8));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteE7(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE7(fn) {
                    var b = fn.call(this, this.regEAX >> 8, (this.regEBX >> 8));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteE8(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE8(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.regEAX & 0xff);
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteE9(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteE9(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.regECX & 0xff);
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteEA(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteEA(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.regEDX & 0xff);
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteEB(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteEB(fn) {
                    var b = fn.call(this, this.regECX >> 8, this.regEBX & 0xff);
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteEC(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteEC(fn) {
                    var b = fn.call(this, this.regECX >> 8, (this.regEAX >> 8));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteED(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteED(fn) {
                    var b = fn.call(this, this.regECX >> 8, (this.regECX >> 8));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                },
                /**
                 * opModRegByteEE(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteEE(fn) {
                    var b = fn.call(this, this.regECX >> 8, (this.regEDX >> 8));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteEF(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteEF(fn) {
                    var b = fn.call(this, this.regECX >> 8, (this.regEBX >> 8));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteF0(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF0(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.regEAX & 0xff);
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteF1(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF1(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.regECX & 0xff);
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteF2(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF2(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.regEDX & 0xff);
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteF3(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF3(fn) {
                    var b = fn.call(this, this.regEDX >> 8, this.regEBX & 0xff);
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteF4(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF4(fn) {
                    var b = fn.call(this, this.regEDX >> 8, (this.regEAX >> 8));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteF5(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF5(fn) {
                    var b = fn.call(this, this.regEDX >> 8, (this.regECX >> 8));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteF6(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF6(fn) {
                    var b = fn.call(this, this.regEDX >> 8, (this.regEDX >> 8));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                },
                /**
                 * opModRegByteF7(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF7(fn) {
                    var b = fn.call(this, this.regEDX >> 8, (this.regEBX >> 8));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiBH;
                },
                /**
                 * opModRegByteF8(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF8(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.regEAX & 0xff);
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiAL;
                },
                /**
                 * opModRegByteF9(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteF9(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.regECX & 0xff);
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiCL;
                },
                /**
                 * opModRegByteFA(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteFA(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.regEDX & 0xff);
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiDL;
                },
                /**
                 * opModRegByteFB(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteFB(fn) {
                    var b = fn.call(this, this.regEBX >> 8, this.regEBX & 0xff);
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiBL;
                },
                /**
                 * opModRegByteFC(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteFC(fn) {
                    var b = fn.call(this, this.regEBX >> 8, (this.regEAX >> 8));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiAH;
                },
                /**
                 * opModRegByteFD(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteFD(fn) {
                    var b = fn.call(this, this.regEBX >> 8, (this.regECX >> 8));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiCH;
                },
                /**
                 * opModRegByteFE(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteFE(fn) {
                    var b = fn.call(this, this.regEBX >> 8, (this.regEDX >> 8));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiDH;
                },
                /**
                 * opModRegByteFF(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegByteFF(fn) {
                    var b = fn.call(this, this.regEBX >> 8, (this.regEBX >> 8));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                }
            ];
            
            X86ModB.aOpModMem = [
                /**
                 * opModMemByte00(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte00(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte01(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte01(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte02(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte02(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte03(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte03(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte04(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte04(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte05(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte05(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte06(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte06(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte07(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte07(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte08(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte08(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte09(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte09(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte0A(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte0A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte0B(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte0B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte0C(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte0C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte0D(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte0D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte0E(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte0E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte0F(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte0F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte10(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte10(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte11(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte11(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte12(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte12(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte13(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte13(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte14(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte14(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte15(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte15(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte16(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte16(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte17(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte17(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte18(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte18(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte19(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte19(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte1A(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte1A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte1B(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte1B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte1C(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte1C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte1D(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte1D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte1E(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte1E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte1F(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte1F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte20(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte20(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte21(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte21(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte22(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte22(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte23(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte23(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte24(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte24(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte25(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte25(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte26(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte26(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte27(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte27(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte28(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte28(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte29(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte29(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte2A(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte2A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte2B(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte2B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte2C(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte2C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte2D(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte2D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte2E(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte2E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte2F(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte2F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte30(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte30(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte31(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte31(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte32(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte32(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte33(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte33(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte34(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte34(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte35(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte35(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte36(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte36(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte37(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte37(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte38(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte38(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte39(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte39(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte3A(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte3A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemByte3B(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte3B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemByte3C(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte3C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte3D(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte3D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte3E(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte3E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemByte3F(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte3F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemByte40(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte40(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte41(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte41(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte42(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte42(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte43(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte43(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte44(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte44(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte45(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte45(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte46(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte46(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte47(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte47(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte48(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte48(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte49(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte49(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte4A(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte4A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte4B(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte4B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte4C(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte4C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte4D(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte4D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte4E(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte4E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte4F(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte4F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte50(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte50(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte51(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte51(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte52(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte52(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte53(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte53(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte54(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte54(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte55(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte55(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte56(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte56(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte57(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte57(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte58(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte58(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte59(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte59(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte5A(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte5A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte5B(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte5B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte5C(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte5C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte5D(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte5D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte5E(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte5E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte5F(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte5F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte60(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte60(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte61(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte61(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte62(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte62(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte63(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte63(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte64(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte64(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte65(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte65(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte66(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte66(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte67(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte67(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte68(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte68(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte69(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte69(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte6A(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte6A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte6B(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte6B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte6C(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte6C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte6D(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte6D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte6E(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte6E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte6F(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte6F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte70(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte70(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte71(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte71(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte72(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte72(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte73(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte73(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte74(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte74(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte75(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte75(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte76(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte76(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte77(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte77(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte78(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte78(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte79(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte79(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte7A(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte7A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte7B(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte7B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte7C(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte7C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte7D(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte7D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte7E(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte7E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte7F(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte7F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte80(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte80(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte81(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte81(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte82(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte82(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte83(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte83(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte84(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte84(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte85(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte85(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte86(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte86(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte87(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte87(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte88(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte88(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte89(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte89(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte8A(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte8A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte8B(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte8B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte8C(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte8C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte8D(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte8D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte8E(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte8E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte8F(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte8F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte90(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte90(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte91(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte91(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte92(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte92(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte93(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte93(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte94(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte94(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte95(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte95(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte96(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte96(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte97(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte97(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte98(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte98(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte99(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte99(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte9A(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte9A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByte9B(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte9B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByte9C(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte9C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte9D(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte9D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte9E(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte9E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByte9F(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByte9F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteA0(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA0(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteA1(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA1(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteA2(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA2(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteA3(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA3(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteA4(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA4(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteA5(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA5(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteA6(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA6(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteA7(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA7(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEAX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteA8(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA8(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteA9(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteA9(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteAA(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteAA(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteAB(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteAB(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteAC(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteAC(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteAD(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteAD(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteAE(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteAE(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteAF(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteAF(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regECX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteB0(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB0(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteB1(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB1(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteB2(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB2(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteB3(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB3(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteB4(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB4(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteB5(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB5(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteB6(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB6(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteB7(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB7(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEDX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteB8(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB8(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteB9(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteB9(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteBA(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteBA(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemByteBB(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteBB(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemByteBC(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteBC(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteBD(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteBD(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteBE(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteBE(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemByteBF(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemByteBF(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEBX >> 8);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                X86ModB.aOpModReg[0xC0],    X86ModB.aOpModReg[0xC8],    X86ModB.aOpModReg[0xD0],    X86ModB.aOpModReg[0xD8],
                X86ModB.aOpModReg[0xE0],    X86ModB.aOpModReg[0xE8],    X86ModB.aOpModReg[0xF0],    X86ModB.aOpModReg[0xF8],
                X86ModB.aOpModReg[0xC1],    X86ModB.aOpModReg[0xC9],    X86ModB.aOpModReg[0xD1],    X86ModB.aOpModReg[0xD9],
                X86ModB.aOpModReg[0xE1],    X86ModB.aOpModReg[0xE9],    X86ModB.aOpModReg[0xF1],    X86ModB.aOpModReg[0xF9],
                X86ModB.aOpModReg[0xC2],    X86ModB.aOpModReg[0xCA],    X86ModB.aOpModReg[0xD2],    X86ModB.aOpModReg[0xDA],
                X86ModB.aOpModReg[0xE2],    X86ModB.aOpModReg[0xEA],    X86ModB.aOpModReg[0xF2],    X86ModB.aOpModReg[0xFA],
                X86ModB.aOpModReg[0xC3],    X86ModB.aOpModReg[0xCB],    X86ModB.aOpModReg[0xD3],    X86ModB.aOpModReg[0xDB],
                X86ModB.aOpModReg[0xE3],    X86ModB.aOpModReg[0xEB],    X86ModB.aOpModReg[0xF3],    X86ModB.aOpModReg[0xFB],
                X86ModB.aOpModReg[0xC4],    X86ModB.aOpModReg[0xCC],    X86ModB.aOpModReg[0xD4],    X86ModB.aOpModReg[0xDC],
                X86ModB.aOpModReg[0xE4],    X86ModB.aOpModReg[0xEC],    X86ModB.aOpModReg[0xF4],    X86ModB.aOpModReg[0xFC],
                X86ModB.aOpModReg[0xC5],    X86ModB.aOpModReg[0xCD],    X86ModB.aOpModReg[0xD5],    X86ModB.aOpModReg[0xDD],
                X86ModB.aOpModReg[0xE5],    X86ModB.aOpModReg[0xED],    X86ModB.aOpModReg[0xF5],    X86ModB.aOpModReg[0xFD],
                X86ModB.aOpModReg[0xC6],    X86ModB.aOpModReg[0xCE],    X86ModB.aOpModReg[0xD6],    X86ModB.aOpModReg[0xDE],
                X86ModB.aOpModReg[0xE6],    X86ModB.aOpModReg[0xEE],    X86ModB.aOpModReg[0xF6],    X86ModB.aOpModReg[0xFE],
                X86ModB.aOpModReg[0xC7],    X86ModB.aOpModReg[0xCF],    X86ModB.aOpModReg[0xD7],    X86ModB.aOpModReg[0xDF],
                X86ModB.aOpModReg[0xE7],    X86ModB.aOpModReg[0xEF],    X86ModB.aOpModReg[0xF7],    X86ModB.aOpModReg[0xFF]
            ];
            
            X86ModB.aOpModGrp = [
                /**
                 * opModGrpByte00(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte00(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte01(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte01(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte02(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte02(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte03(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte03(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte04(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte04(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte05(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte05(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte06(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte06(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte07(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte07(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte08(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte08(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte09(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte09(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte0A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte0A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte0B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte0B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte0C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte0C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte0D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte0D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte0E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte0E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte0F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte0F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte10(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte10(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte11(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte11(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte12(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte12(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte13(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte13(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte14(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte14(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte15(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte15(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte16(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte16(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte17(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte17(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte18(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte18(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte19(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte19(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte1A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte1A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte1B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte1B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte1C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte1C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte1D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte1D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte1E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte1E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte1F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte1F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte20(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte20(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte21(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte21(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte22(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte22(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte23(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte23(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte24(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte24(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte25(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte25(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte26(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte26(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte27(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte27(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte28(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte28(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte29(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte29(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte2A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte2A(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte2B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte2B(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte2C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte2C(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte2D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte2D(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte2E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte2E(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte2F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte2F(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte30(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte30(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte31(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte31(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte32(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte32(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte33(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte33(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte34(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte34(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte35(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte35(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte36(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte36(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte37(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte37(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte38(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte38(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte39(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte39(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte3A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte3A(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpByte3B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte3B(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpByte3C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte3C(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte3D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte3D(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte3E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte3E(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpByte3F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte3F(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpByte40(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte40(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte41(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte41(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte42(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte42(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte43(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte43(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte44(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte44(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte45(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte45(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte46(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte46(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte47(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte47(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte48(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte48(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte49(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte49(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte4A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte4A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte4B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte4B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte4C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte4C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte4D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte4D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte4E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte4E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte4F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte4F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte50(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte50(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte51(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte51(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte52(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte52(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte53(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte53(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte54(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte54(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte55(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte55(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte56(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte56(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte57(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte57(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte58(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte58(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte59(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte59(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte5A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte5A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte5B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte5B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte5C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte5C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte5D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte5D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte5E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte5E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte5F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte5F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte60(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte60(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte61(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte61(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte62(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte62(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte63(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte63(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte64(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte64(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte65(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte65(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte66(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte66(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte67(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte67(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte68(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte68(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte69(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte69(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte6A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte6A(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte6B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte6B(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte6C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte6C(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte6D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte6D(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte6E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte6E(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte6F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte6F(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte70(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte70(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte71(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte71(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte72(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte72(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte73(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte73(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte74(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte74(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte75(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte75(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte76(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte76(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte77(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte77(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte78(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte78(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte79(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte79(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte7A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte7A(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte7B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte7B(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte7C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte7C(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte7D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte7D(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte7E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte7E(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte7F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte7F(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte80(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte80(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte81(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte81(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte82(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte82(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte83(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte83(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte84(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte84(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte85(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte85(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte86(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte86(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte87(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte87(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte88(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte88(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte89(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte89(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte8A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte8A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte8B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte8B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte8C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte8C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte8D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte8D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte8E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte8E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte8F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte8F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte90(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte90(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte91(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte91(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte92(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte92(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte93(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte93(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte94(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte94(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte95(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte95(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte96(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte96(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte97(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte97(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte98(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte98(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte99(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte99(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte9A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte9A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByte9B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte9B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByte9C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte9C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte9D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte9D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte9E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte9E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByte9F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByte9F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteA0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA0(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteA1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA1(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteA2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA2(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteA3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA3(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteA4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA4(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteA5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA5(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteA6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA6(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteA7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA7(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteA8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA8(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteA9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteA9(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteAA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteAA(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteAB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteAB(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteAC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteAC(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteAD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteAD(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteAE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteAE(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteAF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteAF(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteB0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB0(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteB1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB1(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteB2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB2(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteB3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB3(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteB4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB4(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteB5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB5(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteB6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB6(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteB7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB7(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteB8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB8(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteB9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteB9(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteBA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteBA(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpByteBB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteBB(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpByteBC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteBC(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteBD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteBD(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteBE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteBE(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteBF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteBF(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpByteC0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC0(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC1(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC2(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC3(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC4(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC5(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC6(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC7(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC8(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteC9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteC9(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteCA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteCA(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteCB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteCB(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteCC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteCC(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteCD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteCD(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteCE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteCE(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteCF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteCF(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD0(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD1(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD2(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD3(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD4(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD5(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD6(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD7(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD8(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteD9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteD9(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteDA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteDA(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteDB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteDB(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteDC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteDC(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteDD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteDD(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteDE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteDE(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteDF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteDF(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE0(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE1(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE2(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE3(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE4(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE5(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE6(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE7(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE8(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteE9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteE9(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteEA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteEA(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteEB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteEB(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteEC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteEC(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteED(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteED(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteEE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteEE(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteEF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteEF(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF0(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF1(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF2(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF3(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF4(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF5(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF6(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF7(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF8(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteF9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteF9(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteFA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteFA(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteFB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteFB(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteFC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteFC(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEAX >> 8), fnSrc.call(this));
                    this.regEAX = (this.regEAX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteFD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteFD(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regECX >> 8), fnSrc.call(this));
                    this.regECX = (this.regECX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteFE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteFE(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEDX >> 8), fnSrc.call(this));
                    this.regEDX = (this.regEDX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opModGrpByteFF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpByteFF(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEBX >> 8), fnSrc.call(this));
                    this.regEBX = (this.regEBX & 0xff) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModB;
            
          • x86modb16.js
            /**
             * @fileoverview Implements PCjs 8086 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModB16 = {};
            
            X86ModB16.aOpModReg = [
                /**
                 * opMod16RegByte00(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte00(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte01(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte01(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte02(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte02(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte03(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte03(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte04(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte04(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte05(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte05(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte06(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte06(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte07(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte07(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte08(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte08(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte09(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte09(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte0A(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte0A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte0B(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte0B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte0C(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte0C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte0D(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte0D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte0E(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte0E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte0F(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte0F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte10(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte10(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte11(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte11(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte12(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte12(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte13(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte13(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte14(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte14(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte15(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte15(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte16(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte16(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte17(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte17(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte18(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte18(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte19(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte19(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte1A(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte1A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte1B(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte1B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte1C(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte1C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte1D(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte1D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte1E(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte1E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte1F(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte1F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte20(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte20(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte21(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte21(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte22(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte22(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte23(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte23(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte24(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte24(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte25(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte25(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte26(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte26(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte27(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte27(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte28(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte28(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte29(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte29(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte2A(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte2A(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte2B(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte2B(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte2C(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte2C(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte2D(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte2D(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte2E(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte2E(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte2F(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte2F(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte30(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte30(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte31(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte31(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte32(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte32(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte33(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte33(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte34(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte34(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte35(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte35(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte36(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte36(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte37(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte37(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte38(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte38(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte39(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte39(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte3A(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte3A(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegByte3B(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte3B(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegByte3C(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte3C(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte3D(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte3D(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte3E(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte3E(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegByte3F(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte3F(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegByte40(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte40(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte41(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte41(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte42(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte42(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte43(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte43(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte44(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte44(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte45(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte45(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte46(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte46(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte47(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte47(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte48(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte48(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte49(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte49(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte4A(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte4A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte4B(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte4B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte4C(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte4C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte4D(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte4D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte4E(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte4E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte4F(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte4F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte50(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte50(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte51(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte51(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte52(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte52(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte53(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte53(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte54(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte54(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte55(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte55(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte56(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte56(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte57(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte57(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte58(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte58(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte59(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte59(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte5A(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte5A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte5B(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte5B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte5C(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte5C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte5D(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte5D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte5E(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte5E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte5F(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte5F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte60(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte60(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte61(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte61(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte62(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte62(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte63(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte63(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte64(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte64(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte65(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte65(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte66(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte66(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte67(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte67(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte68(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte68(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte69(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte69(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte6A(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte6A(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte6B(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte6B(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte6C(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte6C(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte6D(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte6D(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte6E(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte6E(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte6F(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte6F(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte70(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte70(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte71(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte71(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte72(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte72(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte73(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte73(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte74(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte74(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte75(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte75(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte76(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte76(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte77(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte77(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte78(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte78(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte79(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte79(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte7A(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte7A(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte7B(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte7B(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte7C(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte7C(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte7D(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte7D(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte7E(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte7E(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte7F(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte7F(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte80(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte80(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte81(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte81(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte82(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte82(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte83(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte83(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte84(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte84(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte85(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte85(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte86(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte86(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte87(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte87(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte88(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte88(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte89(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte89(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte8A(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte8A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte8B(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte8B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte8C(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte8C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte8D(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte8D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte8E(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte8E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte8F(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte8F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte90(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte90(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte91(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte91(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte92(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte92(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte93(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte93(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte94(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte94(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte95(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte95(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte96(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte96(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte97(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte97(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte98(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte98(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte99(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte99(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte9A(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte9A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByte9B(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte9B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByte9C(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte9C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte9D(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte9D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte9E(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte9E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByte9F(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByte9F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteA0(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA0(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteA1(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA1(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteA2(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA2(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteA3(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA3(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteA4(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA4(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteA5(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA5(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteA6(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA6(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteA7(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA7(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteA8(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA8(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteA9(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteA9(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteAA(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteAA(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteAB(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteAB(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteAC(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteAC(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteAD(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteAD(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteAE(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteAE(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteAF(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteAF(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteB0(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB0(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteB1(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB1(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteB2(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB2(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteB3(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB3(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteB4(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB4(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteB5(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB5(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteB6(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB6(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteB7(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB7(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteB8(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB8(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteB9(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteB9(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteBA(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteBA(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegByteBB(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteBB(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegByteBC(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteBC(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteBD(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteBD(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteBE(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteBE(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteBF(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteBF(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegByteC0(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC0(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEAX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                },
                /**
                 * opMod16RegByteC1(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC1(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regECX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteC2(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC2(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEDX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteC3(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC3(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEBX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteC4(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC4(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteC5(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC5(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteC6(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC6(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteC7(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC7(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteC8(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC8(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEAX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteC9(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteC9(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regECX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                },
                /**
                 * opMod16RegByteCA(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteCA(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEDX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteCB(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteCB(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEBX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteCC(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteCC(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteCD(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteCD(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteCE(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteCE(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteCF(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteCF(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteD0(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD0(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEAX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteD1(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD1(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regECX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteD2(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD2(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEDX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                },
                /**
                 * opMod16RegByteD3(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD3(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEBX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteD4(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD4(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteD5(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD5(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteD6(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD6(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteD7(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD7(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteD8(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD8(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEAX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteD9(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteD9(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regECX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteDA(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteDA(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEDX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteDB(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteDB(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEBX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                },
                /**
                 * opMod16RegByteDC(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteDC(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteDD(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteDD(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteDE(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteDE(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteDF(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteDF(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteE0(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE0(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteE1(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE1(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regECX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteE2(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE2(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteE3(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE3(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteE4(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE4(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                },
                /**
                 * opMod16RegByteE5(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE5(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteE6(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE6(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteE7(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE7(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteE8(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE8(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteE9(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteE9(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regECX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteEA(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteEA(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteEB(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteEB(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteEC(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteEC(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteED(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteED(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                },
                /**
                 * opMod16RegByteEE(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteEE(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteEF(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteEF(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteF0(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF0(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteF1(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF1(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regECX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteF2(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF2(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteF3(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF3(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteF4(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF4(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteF5(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF5(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteF6(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF6(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                },
                /**
                 * opMod16RegByteF7(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF7(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiBH;
                },
                /**
                 * opMod16RegByteF8(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF8(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiAL;
                },
                /**
                 * opMod16RegByteF9(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteF9(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regECX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiCL;
                },
                /**
                 * opMod16RegByteFA(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteFA(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiDL;
                },
                /**
                 * opMod16RegByteFB(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteFB(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiBL;
                },
                /**
                 * opMod16RegByteFC(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteFC(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiAH;
                },
                /**
                 * opMod16RegByteFD(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteFD(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiCH;
                },
                /**
                 * opMod16RegByteFE(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteFE(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiDH;
                },
                /**
                 * opMod16RegByteFF(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegByteFF(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                }
            ];
            
            X86ModB16.aOpModMem = [
                /**
                 * opMod16MemByte00(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte00(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte01(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte01(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte02(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte02(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte03(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte03(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte04(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte04(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte05(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte05(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte06(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte06(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte07(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte07(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte08(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte08(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte09(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte09(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte0A(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte0A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte0B(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte0B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte0C(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte0C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte0D(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte0D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte0E(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte0E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte0F(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte0F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte10(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte10(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte11(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte11(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte12(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte12(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte13(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte13(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte14(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte14(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte15(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte15(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte16(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte16(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte17(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte17(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte18(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte18(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte19(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte19(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte1A(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte1A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte1B(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte1B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte1C(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte1C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte1D(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte1D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte1E(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte1E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte1F(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte1F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte20(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte20(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte21(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte21(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte22(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte22(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte23(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte23(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte24(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte24(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte25(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte25(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte26(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte26(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte27(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte27(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte28(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte28(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte29(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte29(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte2A(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte2A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte2B(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte2B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte2C(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte2C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte2D(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte2D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte2E(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte2E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte2F(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte2F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte30(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte30(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte31(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte31(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte32(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte32(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte33(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte33(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte34(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte34(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte35(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte35(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte36(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte36(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte37(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte37(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte38(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte38(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte39(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte39(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte3A(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte3A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemByte3B(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte3B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemByte3C(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte3C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte3D(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte3D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte3E(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte3E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemByte3F(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte3F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemByte40(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte40(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte41(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte41(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte42(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte42(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte43(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte43(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte44(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte44(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte45(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte45(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte46(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte46(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte47(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte47(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte48(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte48(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte49(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte49(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte4A(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte4A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte4B(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte4B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte4C(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte4C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte4D(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte4D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte4E(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte4E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte4F(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte4F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte50(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte50(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte51(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte51(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte52(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte52(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte53(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte53(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte54(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte54(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte55(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte55(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte56(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte56(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte57(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte57(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte58(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte58(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte59(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte59(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte5A(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte5A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte5B(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte5B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte5C(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte5C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte5D(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte5D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte5E(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte5E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte5F(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte5F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte60(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte60(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte61(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte61(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte62(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte62(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte63(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte63(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte64(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte64(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte65(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte65(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte66(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte66(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte67(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte67(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte68(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte68(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte69(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte69(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte6A(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte6A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte6B(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte6B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte6C(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte6C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte6D(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte6D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte6E(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte6E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte6F(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte6F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte70(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte70(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte71(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte71(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte72(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte72(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte73(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte73(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte74(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte74(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte75(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte75(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte76(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte76(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte77(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte77(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte78(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte78(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte79(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte79(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte7A(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte7A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte7B(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte7B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte7C(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte7C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte7D(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte7D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte7E(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte7E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte7F(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte7F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte80(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte80(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte81(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte81(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte82(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte82(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte83(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte83(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte84(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte84(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte85(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte85(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte86(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte86(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte87(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte87(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte88(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte88(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte89(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte89(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte8A(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte8A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte8B(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte8B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte8C(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte8C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte8D(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte8D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte8E(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte8E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte8F(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte8F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte90(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte90(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte91(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte91(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte92(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte92(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte93(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte93(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte94(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte94(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte95(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte95(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte96(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte96(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte97(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte97(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte98(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte98(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte99(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte99(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte9A(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte9A(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByte9B(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte9B(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByte9C(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte9C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte9D(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte9D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte9E(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte9E(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByte9F(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByte9F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteA0(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA0(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteA1(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA1(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteA2(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA2(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteA3(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA3(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteA4(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA4(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteA5(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA5(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteA6(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA6(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteA7(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA7(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteA8(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA8(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteA9(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteA9(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteAA(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteAA(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteAB(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteAB(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteAC(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteAC(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteAD(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteAD(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteAE(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteAE(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteAF(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteAF(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteB0(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB0(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteB1(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB1(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteB2(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB2(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteB3(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB3(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteB4(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB4(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteB5(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB5(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteB6(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB6(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteB7(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB7(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteB8(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB8(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteB9(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteB9(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteBA(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteBA(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemByteBB(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteBB(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemByteBC(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteBC(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteBD(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteBD(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteBE(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteBE(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemByteBF(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemByteBF(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                X86ModB16.aOpModReg[0xC0],  X86ModB16.aOpModReg[0xC8],  X86ModB16.aOpModReg[0xD0],  X86ModB16.aOpModReg[0xD8],
                X86ModB16.aOpModReg[0xE0],  X86ModB16.aOpModReg[0xE8],  X86ModB16.aOpModReg[0xF0],  X86ModB16.aOpModReg[0xF8],
                X86ModB16.aOpModReg[0xC1],  X86ModB16.aOpModReg[0xC9],  X86ModB16.aOpModReg[0xD1],  X86ModB16.aOpModReg[0xD9],
                X86ModB16.aOpModReg[0xE1],  X86ModB16.aOpModReg[0xE9],  X86ModB16.aOpModReg[0xF1],  X86ModB16.aOpModReg[0xF9],
                X86ModB16.aOpModReg[0xC2],  X86ModB16.aOpModReg[0xCA],  X86ModB16.aOpModReg[0xD2],  X86ModB16.aOpModReg[0xDA],
                X86ModB16.aOpModReg[0xE2],  X86ModB16.aOpModReg[0xEA],  X86ModB16.aOpModReg[0xF2],  X86ModB16.aOpModReg[0xFA],
                X86ModB16.aOpModReg[0xC3],  X86ModB16.aOpModReg[0xCB],  X86ModB16.aOpModReg[0xD3],  X86ModB16.aOpModReg[0xDB],
                X86ModB16.aOpModReg[0xE3],  X86ModB16.aOpModReg[0xEB],  X86ModB16.aOpModReg[0xF3],  X86ModB16.aOpModReg[0xFB],
                X86ModB16.aOpModReg[0xC4],  X86ModB16.aOpModReg[0xCC],  X86ModB16.aOpModReg[0xD4],  X86ModB16.aOpModReg[0xDC],
                X86ModB16.aOpModReg[0xE4],  X86ModB16.aOpModReg[0xEC],  X86ModB16.aOpModReg[0xF4],  X86ModB16.aOpModReg[0xFC],
                X86ModB16.aOpModReg[0xC5],  X86ModB16.aOpModReg[0xCD],  X86ModB16.aOpModReg[0xD5],  X86ModB16.aOpModReg[0xDD],
                X86ModB16.aOpModReg[0xE5],  X86ModB16.aOpModReg[0xED],  X86ModB16.aOpModReg[0xF5],  X86ModB16.aOpModReg[0xFD],
                X86ModB16.aOpModReg[0xC6],  X86ModB16.aOpModReg[0xCE],  X86ModB16.aOpModReg[0xD6],  X86ModB16.aOpModReg[0xDE],
                X86ModB16.aOpModReg[0xE6],  X86ModB16.aOpModReg[0xEE],  X86ModB16.aOpModReg[0xF6],  X86ModB16.aOpModReg[0xFE],
                X86ModB16.aOpModReg[0xC7],  X86ModB16.aOpModReg[0xCF],  X86ModB16.aOpModReg[0xD7],  X86ModB16.aOpModReg[0xDF],
                X86ModB16.aOpModReg[0xE7],  X86ModB16.aOpModReg[0xEF],  X86ModB16.aOpModReg[0xF7],  X86ModB16.aOpModReg[0xFF]
            ];
            
            X86ModB16.aOpModGrp = [
                /**
                 * opMod16GrpByte00(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte00(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte01(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte01(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte02(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte02(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte03(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte03(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte04(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte04(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte05(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte05(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte06(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte06(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte07(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte07(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte08(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte08(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte09(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte09(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte0A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte0A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte0B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte0B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte0C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte0C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte0D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte0D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte0E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte0E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte0F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte0F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte10(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte10(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte11(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte11(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte12(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte12(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte13(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte13(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte14(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte14(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte15(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte15(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte16(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte16(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte17(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte17(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte18(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte18(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte19(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte19(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte1A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte1A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte1B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte1B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte1C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte1C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte1D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte1D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte1E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte1E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte1F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte1F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte20(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte20(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte21(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte21(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte22(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte22(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte23(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte23(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte24(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte24(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte25(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte25(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte26(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte26(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte27(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte27(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte28(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte28(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte29(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte29(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte2A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte2A(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte2B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte2B(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte2C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte2C(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte2D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte2D(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte2E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte2E(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte2F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte2F(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte30(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte30(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte31(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte31(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte32(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte32(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte33(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte33(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte34(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte34(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte35(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte35(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte36(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte36(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte37(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte37(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte38(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte38(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte39(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte39(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte3A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte3A(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpByte3B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte3B(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpByte3C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte3C(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte3D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte3D(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte3E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte3E(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpByte3F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte3F(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpByte40(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte40(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte41(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte41(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte42(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte42(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte43(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte43(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte44(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte44(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte45(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte45(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte46(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte46(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte47(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte47(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte48(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte48(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte49(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte49(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte4A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte4A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte4B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte4B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte4C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte4C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte4D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte4D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte4E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte4E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte4F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte4F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte50(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte50(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte51(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte51(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte52(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte52(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte53(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte53(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte54(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte54(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte55(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte55(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte56(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte56(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte57(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte57(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte58(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte58(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte59(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte59(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte5A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte5A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte5B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte5B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte5C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte5C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte5D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte5D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte5E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte5E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte5F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte5F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte60(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte60(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte61(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte61(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte62(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte62(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte63(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte63(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte64(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte64(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte65(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte65(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte66(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte66(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte67(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte67(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte68(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte68(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte69(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte69(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte6A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte6A(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte6B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte6B(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte6C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte6C(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte6D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte6D(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte6E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte6E(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte6F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte6F(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte70(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte70(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte71(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte71(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte72(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte72(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte73(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte73(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte74(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte74(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte75(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte75(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte76(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte76(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte77(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte77(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte78(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte78(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte79(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte79(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte7A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte7A(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte7B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte7B(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte7C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte7C(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte7D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte7D(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte7E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte7E(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte7F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte7F(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte80(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte80(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte81(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte81(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte82(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte82(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte83(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte83(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte84(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte84(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte85(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte85(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte86(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte86(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte87(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte87(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte88(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte88(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte89(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte89(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte8A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte8A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte8B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte8B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte8C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte8C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte8D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte8D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte8E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte8E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte8F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte8F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte90(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte90(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte91(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte91(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte92(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte92(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte93(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte93(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte94(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte94(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte95(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte95(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte96(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte96(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte97(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte97(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte98(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte98(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte99(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte99(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte9A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte9A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByte9B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte9B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByte9C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte9C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte9D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte9D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte9E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte9E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByte9F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByte9F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteA0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA0(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteA1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA1(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteA2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA2(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteA3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA3(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteA4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA4(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteA5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA5(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteA6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA6(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteA7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA7(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteA8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA8(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteA9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteA9(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteAA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteAA(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteAB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteAB(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteAC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteAC(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteAD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteAD(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteAE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteAE(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteAF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteAF(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteB0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB0(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteB1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB1(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteB2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB2(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteB3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB3(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteB4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB4(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteB5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB5(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteB6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB6(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteB7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB7(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteB8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB8(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteB9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteB9(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteBA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteBA(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpByteBB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteBB(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpByteBC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteBC(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteBD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteBD(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteBE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteBE(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteBF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteBF(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpByteC0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC0(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC1(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC2(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC3(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC4(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC5(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC6(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC7(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC8(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteC9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteC9(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteCA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteCA(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteCB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteCB(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteCC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteCC(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteCD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteCD(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteCE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteCE(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteCF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteCF(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD0(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD1(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD2(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD3(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD4(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD5(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD6(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD7(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD8(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteD9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteD9(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteDA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteDA(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteDB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteDB(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteDC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteDC(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteDD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteDD(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteDE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteDE(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteDF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteDF(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE0(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE1(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE2(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE3(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE4(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE5(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE6(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE7(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE8(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteE9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteE9(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteEA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteEA(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteEB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteEB(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteEC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteEC(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteED(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteED(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteEE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteEE(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteEF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteEF(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF0(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF1(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF2(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF3(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF4(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF5(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF6(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF7(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF8(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteF9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteF9(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteFA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteFA(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteFB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteFB(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteFC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteFC(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteFD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteFD(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteFE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteFE(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod16GrpByteFF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpByteFF(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModB16;
            
          • x86modb32.js
            /**
             * @fileoverview Implements PCjs 80386 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2015-Jan-20
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModB32 = {};
            
            X86ModB32.aOpModReg = [
                /**
                 * opMod32RegByte00(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte00(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEAX));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte01(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte01(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regECX));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte02(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte02(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDX));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte03(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte03(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte04(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte04(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte05(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte05(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte06(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte06(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte07(fn): mod=00 (src:mem)  reg=000 (dst:AL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte07(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte08(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte08(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEAX));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte09(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte09(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regECX));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte0A(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte0A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDX));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte0B(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte0B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte0C(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte0C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte0D(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte0D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte0E(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte0E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte0F(fn): mod=00 (src:mem)  reg=001 (dst:CL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte0F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte10(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte10(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEAX));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte11(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte11(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regECX));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte12(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte12(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDX));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte13(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte13(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte14(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte14(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte15(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte15(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte16(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte16(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte17(fn): mod=00 (src:mem)  reg=010 (dst:DL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte17(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte18(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte18(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEAX));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte19(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte19(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regECX));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte1A(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte1A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDX));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte1B(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte1B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte1C(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte1C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte1D(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte1D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte1E(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte1E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte1F(fn): mod=00 (src:mem)  reg=011 (dst:BL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte1F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte20(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte20(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEAX));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte21(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte21(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regECX));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte22(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte22(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDX));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte23(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte23(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte24(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte24(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte25(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte25(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte26(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte26(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte27(fn): mod=00 (src:mem)  reg=100 (dst:AH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte27(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte28(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte28(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEAX));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte29(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte29(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regECX));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte2A(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte2A(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDX));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte2B(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte2B(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte2C(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte2C(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte2D(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte2D(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte2E(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte2E(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte2F(fn): mod=00 (src:mem)  reg=101 (dst:CH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte2F(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte30(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte30(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEAX));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte31(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte31(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regECX));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte32(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte32(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDX));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte33(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte33(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte34(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte34(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte35(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte35(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte36(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte36(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte37(fn): mod=00 (src:mem)  reg=110 (dst:DH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte37(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte38(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte38(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEAX));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte39(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte39(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regECX));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte3A(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte3A(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDX));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte3B(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte3B(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte3C(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte3C(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(0)));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte3D(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte3D(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegByte3E(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte3E(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regESI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte3F(fn): mod=00 (src:mem)  reg=111 (dst:BH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte3F(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDI));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegByte40(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte40(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte41(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte41(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte42(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte42(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte43(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte43(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte44(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte44(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte45(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte45(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte46(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte46(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte47(fn): mod=01 (src:mem+d8)  reg=000 (dst:AL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte47(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte48(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte48(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte49(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte49(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte4A(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte4A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte4B(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte4B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte4C(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte4C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte4D(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte4D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte4E(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte4E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte4F(fn): mod=01 (src:mem+d8)  reg=001 (dst:CL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte4F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte50(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte50(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte51(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte51(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte52(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte52(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte53(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte53(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte54(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte54(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte55(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte55(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte56(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte56(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte57(fn): mod=01 (src:mem+d8)  reg=010 (dst:DL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte57(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte58(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte58(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte59(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte59(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte5A(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte5A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte5B(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte5B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte5C(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte5C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte5D(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte5D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte5E(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte5E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte5F(fn): mod=01 (src:mem+d8)  reg=011 (dst:BL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte5F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte60(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte60(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte61(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte61(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte62(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte62(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte63(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte63(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte64(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte64(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte65(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte65(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte66(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte66(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte67(fn): mod=01 (src:mem+d8)  reg=100 (dst:AH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte67(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte68(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte68(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte69(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte69(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte6A(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte6A(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte6B(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte6B(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte6C(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte6C(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte6D(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte6D(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte6E(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte6E(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte6F(fn): mod=01 (src:mem+d8)  reg=101 (dst:CH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte6F(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte70(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte70(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte71(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte71(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte72(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte72(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte73(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte73(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte74(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte74(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte75(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte75(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte76(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte76(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte77(fn): mod=01 (src:mem+d8)  reg=110 (dst:DH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte77(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte78(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte78(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte79(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte79(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte7A(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte7A(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte7B(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte7B(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte7C(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte7C(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte7D(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte7D(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte7E(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte7E(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte7F(fn): mod=01 (src:mem+d8)  reg=111 (dst:BH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte7F(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte80(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte80(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte81(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte81(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte82(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte82(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte83(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte83(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte84(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte84(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte85(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte85(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte86(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte86(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte87(fn): mod=10 (src:mem+d16)  reg=000 (dst:AL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte87(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte88(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte88(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte89(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte89(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte8A(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte8A(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte8B(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte8B(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte8C(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte8C(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte8D(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte8D(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte8E(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte8E(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte8F(fn): mod=10 (src:mem+d16)  reg=001 (dst:CL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte8F(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte90(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte90(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte91(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte91(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte92(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte92(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte93(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte93(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte94(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte94(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte95(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte95(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte96(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte96(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte97(fn): mod=10 (src:mem+d16)  reg=010 (dst:DL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte97(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte98(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte98(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte99(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte99(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte9A(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte9A(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte9B(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte9B(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte9C(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte9C(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte9D(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte9D(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte9E(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte9E(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByte9F(fn): mod=10 (src:mem+d16)  reg=011 (dst:BL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByte9F(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA0(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA0(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA1(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA1(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA2(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA2(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA3(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA3(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA4(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA4(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA5(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA5(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA6(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA6(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA7(fn): mod=10 (src:mem+d16)  reg=100 (dst:AH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA7(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA8(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA8(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteA9(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteA9(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteAA(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteAA(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteAB(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteAB(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteAC(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteAC(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteAD(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteAD(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteAE(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteAE(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteAF(fn): mod=10 (src:mem+d16)  reg=101 (dst:CH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteAF(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB0(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB0(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB1(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB1(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB2(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB2(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB3(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB3(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB4(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB4(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB5(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB5(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB6(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB6(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB7(fn): mod=10 (src:mem+d16)  reg=110 (dst:DH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB7(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB8(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB8(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEAX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteB9(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteB9(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regECX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteBA(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteBA(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteBB(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteBB(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteBC(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteBC(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteBD(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteBD(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteBE(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteBE(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteBF(fn): mod=10 (src:mem+d16)  reg=111 (dst:BH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteBF(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.getEAByteData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegByteC0(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC0(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEAX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                },
                /**
                 * opMod32RegByteC1(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC1(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regECX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteC2(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC2(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEDX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteC3(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC3(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, this.regEBX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteC4(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC4(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteC5(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC5(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteC6(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC6(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteC7(fn): mod=11 (src:reg)  reg=000 (dst:AL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC7(fn) {
                    var b = fn.call(this, this.regEAX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteC8(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC8(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEAX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteC9(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteC9(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regECX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                },
                /**
                 * opMod32RegByteCA(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteCA(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEDX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteCB(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteCB(fn) {
                    var b = fn.call(this, this.regECX & 0xff, this.regEBX & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteCC(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteCC(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteCD(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteCD(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteCE(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteCE(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteCF(fn): mod=11 (src:reg)  reg=001 (dst:CL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteCF(fn) {
                    var b = fn.call(this, this.regECX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteD0(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD0(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEAX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteD1(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD1(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regECX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteD2(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD2(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEDX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                },
                /**
                 * opMod32RegByteD3(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD3(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, this.regEBX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteD4(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD4(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteD5(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD5(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteD6(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD6(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteD7(fn): mod=11 (src:reg)  reg=010 (dst:DL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD7(fn) {
                    var b = fn.call(this, this.regEDX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteD8(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD8(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEAX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteD9(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteD9(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regECX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteDA(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteDA(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEDX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteDB(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteDB(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, this.regEBX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                },
                /**
                 * opMod32RegByteDC(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteDC(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteDD(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteDD(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteDE(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteDE(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteDF(fn): mod=11 (src:reg)  reg=011 (dst:BL)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteDF(fn) {
                    var b = fn.call(this, this.regEBX & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteE0(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE0(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteE1(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE1(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regECX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteE2(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE2(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteE3(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE3(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteE4(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE4(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                },
                /**
                 * opMod32RegByteE5(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE5(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteE6(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE6(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteE7(fn): mod=11 (src:reg)  reg=100 (dst:AH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE7(fn) {
                    var b = fn.call(this, (this.regEAX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteE8(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE8(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteE9(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteE9(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regECX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteEA(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteEA(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteEB(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteEB(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteEC(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteEC(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteED(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteED(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                },
                /**
                 * opMod32RegByteEE(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteEE(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteEF(fn): mod=11 (src:reg)  reg=101 (dst:CH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteEF(fn) {
                    var b = fn.call(this, (this.regECX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteF0(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF0(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteF1(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF1(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regECX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteF2(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF2(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteF3(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF3(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteF4(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF4(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteF5(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF5(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteF6(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF6(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                },
                /**
                 * opMod32RegByteF7(fn): mod=11 (src:reg)  reg=110 (dst:DH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF7(fn) {
                    var b = fn.call(this, (this.regEDX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiBH;
                },
                /**
                 * opMod32RegByteF8(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF8(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regEAX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiAL;
                },
                /**
                 * opMod32RegByteF9(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteF9(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regECX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiCL;
                },
                /**
                 * opMod32RegByteFA(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteFA(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regEDX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiDL;
                },
                /**
                 * opMod32RegByteFB(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteFB(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, this.regEBX & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiBL;
                },
                /**
                 * opMod32RegByteFC(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteFC(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regEAX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiAH;
                },
                /**
                 * opMod32RegByteFD(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteFD(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regECX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiCH;
                },
                /**
                 * opMod32RegByteFE(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteFE(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regEDX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiDH;
                },
                /**
                 * opMod32RegByteFF(fn): mod=11 (src:reg)  reg=111 (dst:BH)  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegByteFF(fn) {
                    var b = fn.call(this, (this.regEBX >> 8) & 0xff, (this.regEBX >> 8) & 0xff);
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                }
            ];
            
            X86ModB32.aOpModMem = [
                /**
                 * opMod32MemByte00(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte00(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte01(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte01(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte02(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte02(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte03(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte03(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte04(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte04(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte05(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte05(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte06(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte06(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte07(fn): mod=00 (dst:mem)  reg=000 (src:AL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte07(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte08(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte08(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte09(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte09(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte0A(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte0A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte0B(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte0B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte0C(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte0C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte0D(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte0D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte0E(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte0E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte0F(fn): mod=00 (dst:mem)  reg=001 (src:CL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte0F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte10(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte10(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte11(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte11(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte12(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte12(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte13(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte13(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte14(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte14(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte15(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte15(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte16(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte16(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte17(fn): mod=00 (dst:mem)  reg=010 (src:DL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte17(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte18(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte18(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte19(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte19(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte1A(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte1A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte1B(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte1B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte1C(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte1C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte1D(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte1D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte1E(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte1E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte1F(fn): mod=00 (dst:mem)  reg=011 (src:BL)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte1F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte20(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte20(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte21(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte21(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte22(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte22(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte23(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte23(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte24(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte24(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte25(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte25(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte26(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte26(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte27(fn): mod=00 (dst:mem)  reg=100 (src:AH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte27(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte28(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte28(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte29(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte29(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte2A(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte2A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte2B(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte2B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte2C(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte2C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte2D(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte2D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte2E(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte2E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte2F(fn): mod=00 (dst:mem)  reg=101 (src:CH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte2F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte30(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte30(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte31(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte31(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte32(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte32(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte33(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte33(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte34(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte34(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte35(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte35(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte36(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte36(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte37(fn): mod=00 (dst:mem)  reg=110 (src:DH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte37(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte38(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte38(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte39(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte39(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte3A(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte3A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte3B(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte3B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte3C(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte3C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(0)), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte3D(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte3D(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemByte3E(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte3E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte3F(fn): mod=00 (dst:mem)  reg=111 (src:BH)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte3F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemByte40(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte40(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte41(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte41(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte42(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte42(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte43(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte43(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte44(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte44(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte45(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte45(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte46(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte46(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte47(fn): mod=01 (dst:mem+d8)  reg=000 (src:AL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte47(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte48(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte48(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte49(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte49(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte4A(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte4A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte4B(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte4B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte4C(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte4C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte4D(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte4D(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte4E(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte4E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte4F(fn): mod=01 (dst:mem+d8)  reg=001 (src:CL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte4F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte50(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte50(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte51(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte51(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte52(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte52(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte53(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte53(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte54(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte54(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte55(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte55(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte56(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte56(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte57(fn): mod=01 (dst:mem+d8)  reg=010 (src:DL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte57(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte58(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte58(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte59(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte59(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte5A(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte5A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte5B(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte5B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte5C(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte5C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte5D(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte5D(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte5E(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte5E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte5F(fn): mod=01 (dst:mem+d8)  reg=011 (src:BL)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte5F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte60(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte60(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte61(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte61(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte62(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte62(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte63(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte63(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte64(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte64(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte65(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte65(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte66(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte66(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte67(fn): mod=01 (dst:mem+d8)  reg=100 (src:AH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte67(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte68(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte68(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte69(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte69(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte6A(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte6A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte6B(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte6B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte6C(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte6C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte6D(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte6D(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte6E(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte6E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte6F(fn): mod=01 (dst:mem+d8)  reg=101 (src:CH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte6F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte70(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte70(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte71(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte71(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte72(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte72(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte73(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte73(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte74(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte74(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte75(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte75(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte76(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte76(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte77(fn): mod=01 (dst:mem+d8)  reg=110 (src:DH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte77(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte78(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte78(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte79(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte79(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte7A(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte7A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte7B(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte7B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte7C(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte7C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte7D(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte7D(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte7E(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte7E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte7F(fn): mod=01 (dst:mem+d8)  reg=111 (src:BH)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte7F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte80(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte80(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte81(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte81(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte82(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte82(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte83(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte83(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte84(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte84(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte85(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte85(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte86(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte86(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte87(fn): mod=10 (dst:mem+d16)  reg=000 (src:AL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte87(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEAX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte88(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte88(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte89(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte89(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte8A(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte8A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte8B(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte8B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte8C(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte8C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte8D(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte8D(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte8E(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte8E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte8F(fn): mod=10 (dst:mem+d16)  reg=001 (src:CL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte8F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regECX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte90(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte90(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte91(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte91(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte92(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte92(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte93(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte93(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte94(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte94(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte95(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte95(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte96(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte96(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte97(fn): mod=10 (dst:mem+d16)  reg=010 (src:DL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte97(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEDX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte98(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte98(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte99(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte99(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte9A(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte9A(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte9B(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte9B(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte9C(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte9C(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte9D(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte9D(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte9E(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte9E(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByte9F(fn): mod=10 (dst:mem+d16)  reg=011 (src:BL)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByte9F(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), this.regEBX & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBL;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA0(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA0(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA1(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA1(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA2(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA2(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA3(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA3(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA4(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA4(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA5(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA5(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA6(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA6(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA7(fn): mod=10 (dst:mem+d16)  reg=100 (src:AH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA7(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regEAX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiAH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA8(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA8(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteA9(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteA9(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteAA(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteAA(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteAB(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteAB(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteAC(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteAC(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteAD(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteAD(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteAE(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteAE(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteAF(fn): mod=10 (dst:mem+d16)  reg=101 (src:CH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteAF(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regECX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiCH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB0(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB0(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB1(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB1(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB2(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB2(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB3(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB3(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB4(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB4(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB5(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB5(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB6(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB6(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB7(fn): mod=10 (dst:mem+d16)  reg=110 (src:DH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB7(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regEDX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiDH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB8(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB8(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteB9(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteB9(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regECX + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteBA(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteBA(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteBB(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteBB(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteBC(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteBC(fn) {
                    var b = fn.call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteBD(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteBD(fn) {
                    var b = fn.call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteBE(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteBE(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regESI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemByteBF(fn): mod=10 (dst:mem+d16)  reg=111 (src:BH)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemByteBF(fn) {
                    var b = fn.call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), (this.regEBX >> 8) & 0xff);
                    if (BACKTRACK) this.backTrack.btiEALo = this.backTrack.btiBH;
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                X86ModB32.aOpModReg[0xC0],    X86ModB32.aOpModReg[0xC8],    X86ModB32.aOpModReg[0xD0],    X86ModB32.aOpModReg[0xD8],
                X86ModB32.aOpModReg[0xE0],    X86ModB32.aOpModReg[0xE8],    X86ModB32.aOpModReg[0xF0],    X86ModB32.aOpModReg[0xF8],
                X86ModB32.aOpModReg[0xC1],    X86ModB32.aOpModReg[0xC9],    X86ModB32.aOpModReg[0xD1],    X86ModB32.aOpModReg[0xD9],
                X86ModB32.aOpModReg[0xE1],    X86ModB32.aOpModReg[0xE9],    X86ModB32.aOpModReg[0xF1],    X86ModB32.aOpModReg[0xF9],
                X86ModB32.aOpModReg[0xC2],    X86ModB32.aOpModReg[0xCA],    X86ModB32.aOpModReg[0xD2],    X86ModB32.aOpModReg[0xDA],
                X86ModB32.aOpModReg[0xE2],    X86ModB32.aOpModReg[0xEA],    X86ModB32.aOpModReg[0xF2],    X86ModB32.aOpModReg[0xFA],
                X86ModB32.aOpModReg[0xC3],    X86ModB32.aOpModReg[0xCB],    X86ModB32.aOpModReg[0xD3],    X86ModB32.aOpModReg[0xDB],
                X86ModB32.aOpModReg[0xE3],    X86ModB32.aOpModReg[0xEB],    X86ModB32.aOpModReg[0xF3],    X86ModB32.aOpModReg[0xFB],
                X86ModB32.aOpModReg[0xC4],    X86ModB32.aOpModReg[0xCC],    X86ModB32.aOpModReg[0xD4],    X86ModB32.aOpModReg[0xDC],
                X86ModB32.aOpModReg[0xE4],    X86ModB32.aOpModReg[0xEC],    X86ModB32.aOpModReg[0xF4],    X86ModB32.aOpModReg[0xFC],
                X86ModB32.aOpModReg[0xC5],    X86ModB32.aOpModReg[0xCD],    X86ModB32.aOpModReg[0xD5],    X86ModB32.aOpModReg[0xDD],
                X86ModB32.aOpModReg[0xE5],    X86ModB32.aOpModReg[0xED],    X86ModB32.aOpModReg[0xF5],    X86ModB32.aOpModReg[0xFD],
                X86ModB32.aOpModReg[0xC6],    X86ModB32.aOpModReg[0xCE],    X86ModB32.aOpModReg[0xD6],    X86ModB32.aOpModReg[0xDE],
                X86ModB32.aOpModReg[0xE6],    X86ModB32.aOpModReg[0xEE],    X86ModB32.aOpModReg[0xF6],    X86ModB32.aOpModReg[0xFE],
                X86ModB32.aOpModReg[0xC7],    X86ModB32.aOpModReg[0xCF],    X86ModB32.aOpModReg[0xD7],    X86ModB32.aOpModReg[0xDF],
                X86ModB32.aOpModReg[0xE7],    X86ModB32.aOpModReg[0xEF],    X86ModB32.aOpModReg[0xF7],    X86ModB32.aOpModReg[0xFF]
            ];
            
            X86ModB32.aOpModGrp = [
                /**
                 * opMod32GrpByte00(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte00(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte01(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte01(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte02(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte02(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte03(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte03(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte04(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte04(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte05(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte05(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte06(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte06(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte07(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte07(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte08(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte08(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte09(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte09(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte0A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte0A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte0B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte0B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte0C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte0C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte0D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte0D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte0E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte0E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte0F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte0F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte10(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte10(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte11(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte11(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte12(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte12(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte13(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte13(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte14(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte14(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte15(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte15(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte16(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte16(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte17(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte17(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte18(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte18(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte19(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte19(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte1A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte1A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte1B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte1B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte1C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte1C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte1D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte1D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte1E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte1E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte1F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte1F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte20(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte20(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte21(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte21(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte22(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte22(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte23(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte23(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte24(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte24(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte25(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte25(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte26(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte26(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte27(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte27(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte28(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte28(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte29(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte29(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte2A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte2A(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte2B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte2B(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte2C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte2C(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte2D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte2D(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte2E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte2E(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte2F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte2F(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte30(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte30(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte31(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte31(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte32(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte32(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte33(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte33(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte34(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte34(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte35(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte35(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte36(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte36(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte37(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte37(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte38(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte38(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEAX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte39(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte39(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regECX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte3A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte3A(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte3B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte3B(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte3C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte3C(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte3D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte3D(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpByte3E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte3E(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte3F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte3F(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpByte40(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte40(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte41(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte41(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte42(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte42(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte43(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte43(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte44(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte44(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte45(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte45(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte46(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte46(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte47(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte47(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte48(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte48(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte49(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte49(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte4A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte4A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte4B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte4B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte4C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte4C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte4D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte4D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte4E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte4E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte4F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte4F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte50(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte50(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte51(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte51(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte52(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte52(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte53(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte53(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte54(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte54(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte55(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte55(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte56(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte56(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte57(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte57(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte58(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte58(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte59(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte59(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte5A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte5A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte5B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte5B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte5C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte5C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte5D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte5D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte5E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte5E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte5F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte5F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte60(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte60(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte61(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte61(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte62(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte62(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte63(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte63(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte64(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte64(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte65(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte65(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte66(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte66(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte67(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte67(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte68(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte68(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte69(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte69(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte6A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte6A(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte6B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte6B(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte6C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte6C(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte6D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte6D(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte6E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte6E(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte6F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte6F(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte70(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte70(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte71(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte71(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte72(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte72(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte73(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte73(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte74(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte74(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte75(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte75(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte76(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte76(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte77(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte77(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte78(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte78(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte79(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte79(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte7A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte7A(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte7B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte7B(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte7C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte7C(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte7D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte7D(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte7E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte7E(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte7F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte7F(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte80(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte80(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte81(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte81(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte82(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte82(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte83(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte83(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte84(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte84(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte85(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte85(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte86(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte86(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte87(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte87(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte88(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte88(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte89(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte89(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte8A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte8A(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte8B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte8B(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte8C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte8C(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte8D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte8D(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte8E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte8E(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte8F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte8F(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte90(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte90(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte91(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte91(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte92(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte92(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte93(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte93(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte94(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte94(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte95(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte95(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte96(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte96(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte97(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte97(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte98(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte98(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte99(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte99(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte9A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte9A(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte9B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte9B(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte9C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte9C(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte9D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte9D(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte9E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte9E(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByte9F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByte9F(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA0(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA1(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA2(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA3(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA4(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA5(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA6(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA7(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA8(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteA9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteA9(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteAA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteAA(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteAB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteAB(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteAC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteAC(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteAD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteAD(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteAE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteAE(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteAF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteAF(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB0(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB1(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB2(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB3(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB4(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB5(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB6(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB7(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB8(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteB9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteB9(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteBA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteBA(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteBB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteBB(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteBC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteBC(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteBD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteBD(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteBE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteBE(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteBF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteBF(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.modEAByteData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAByte(b);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpByteC0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC0(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC1(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC2(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC3(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC4(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC5(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC6(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC7(afnGrp, fnSrc) {
                    var b = afnGrp[0].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC8(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteC9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteC9(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteCA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteCA(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteCB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteCB(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteCC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteCC(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteCD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteCD(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteCE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteCE(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteCF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteCF(afnGrp, fnSrc) {
                    var b = afnGrp[1].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD0(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD1(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD2(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD3(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD4(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD5(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD6(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD7(afnGrp, fnSrc) {
                    var b = afnGrp[2].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD8(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteD9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteD9(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteDA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteDA(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteDB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteDB(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteDC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteDC(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteDD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteDD(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteDE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteDE(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteDF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteDF(afnGrp, fnSrc) {
                    var b = afnGrp[3].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE0(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE1(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE2(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE3(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE4(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE5(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE6(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE7(afnGrp, fnSrc) {
                    var b = afnGrp[4].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE8(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteE9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteE9(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteEA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteEA(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteEB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteEB(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteEC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteEC(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteED(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteED(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteEE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteEE(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteEF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteEF(afnGrp, fnSrc) {
                    var b = afnGrp[5].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF0(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF1(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF2(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF3(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF4(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF5(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF6(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF7(afnGrp, fnSrc) {
                    var b = afnGrp[6].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=000 (AL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF8(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEAX & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteF9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=001 (CL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteF9(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regECX & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteFA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=010 (DL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteFA(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEDX & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteFB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=011 (BL)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteFB(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, this.regEBX & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff) | b;
                    if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteFC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=100 (AH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteFC(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEAX >> 8) & 0xff, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteFD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=101 (CH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteFD(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regECX >> 8) & 0xff, fnSrc.call(this));
                    this.regECX = (this.regECX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteFE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=110 (DH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteFE(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEDX >> 8) & 0xff, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiEALo;
                },
                /**
                 * opMod32GrpByteFF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=111 (BH)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpByteFF(afnGrp, fnSrc) {
                    var b = afnGrp[7].call(this, (this.regEBX >> 8) & 0xff, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~0xff00) | (b << 8);
                    if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiEALo;
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModB32;
            
          • x86modsib.js
            /**
             * @fileoverview Implements PCjs 8086 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2015-Jan-20
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModSIB = {};
            
            /*
             * TODO: Factor out the SIB (scale=1) decoders that are functionally equivalent to one another,
             * just as I've already done for all the ModRM (register-to-register) decoders.  For example:
             *
             *      opModSIB01():   this.regECX + this.regEAX
             *
             * is functionally equivalent to:
             *
             *      opModSIB08():   this.regEAX + this.regECX
             *
             * This isn't super critical, since the SIB decoders are much smaller/simpler than the ModRM decoders,
             * but still, it's wasteful.
             */
            
            X86ModSIB.aOpModSIB = [
                /**
                 * opModSIB00(): scale=00 (1)  index=000 (EAX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB00(mod) {
                    return this.regEAX + this.regEAX;
                },
                /**
                 * opModSIB01(): scale=00 (1)  index=000 (EAX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB01(mod) {
                    return this.regECX + this.regEAX;
                },
                /**
                 * opModSIB02(): scale=00 (1)  index=000 (EAX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB02(mod) {
                    return this.regEDX + this.regEAX;
                },
                /**
                 * opModSIB03(): scale=00 (1)  index=000 (EAX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB03(mod) {
                    return this.regEBX + this.regEAX;
                },
                /**
                 * opModSIB04(): scale=00 (1)  index=000 (EAX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB04(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regEAX;
                },
                /**
                 * opModSIB05(): scale=00 (1)  index=000 (EAX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB05(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regEAX;
                },
                /**
                 * opModSIB06(): scale=00 (1)  index=000 (EAX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB06(mod) {
                    return this.regESI + this.regEAX;
                },
                /**
                 * opModSIB07(): scale=00 (1)  index=000 (EAX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB07(mod) {
                    return this.regEDI + this.regEAX;
                },
                /**
                 * opModSIB08(): scale=00 (1)  index=001 (ECX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB08(mod) {
                    return this.regEAX + this.regECX;
                },
                /**
                 * opModSIB09(): scale=00 (1)  index=001 (ECX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB09(mod) {
                    return this.regECX + this.regECX;
                },
                /**
                 * opModSIB0A(): scale=00 (1)  index=001 (ECX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB0A(mod) {
                    return this.regEDX + this.regECX;
                },
                /**
                 * opModSIB0B(): scale=00 (1)  index=001 (ECX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB0B(mod) {
                    return this.regEBX + this.regECX;
                },
                /**
                 * opModSIB0C(): scale=00 (1)  index=001 (ECX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB0C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regECX;
                },
                /**
                 * opModSIB0D(): scale=00 (1)  index=001 (ECX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB0D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regECX;
                },
                /**
                 * opModSIB0E(): scale=00 (1)  index=001 (ECX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB0E(mod) {
                    return this.regESI + this.regECX;
                },
                /**
                 * opModSIB0F(): scale=00 (1)  index=001 (ECX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB0F(mod) {
                    return this.regEDI + this.regECX;
                },
                /**
                 * opModSIB10(): scale=00 (1)  index=010 (EDX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB10(mod) {
                    return this.regEAX + this.regEDX;
                },
                /**
                 * opModSIB11(): scale=00 (1)  index=010 (EDX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB11(mod) {
                    return this.regECX + this.regEDX;
                },
                /**
                 * opModSIB12(): scale=00 (1)  index=010 (EDX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB12(mod) {
                    return this.regEDX + this.regEDX;
                },
                /**
                 * opModSIB13(): scale=00 (1)  index=010 (EDX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB13(mod) {
                    return this.regEBX + this.regEDX;
                },
                /**
                 * opModSIB14(): scale=00 (1)  index=010 (EDX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB14(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regEDX;
                },
                /**
                 * opModSIB15(): scale=00 (1)  index=010 (EDX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB15(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regEDX;
                },
                /**
                 * opModSIB16(): scale=00 (1)  index=010 (EDX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB16(mod) {
                    return this.regESI + this.regEDX;
                },
                /**
                 * opModSIB17(): scale=00 (1)  index=010 (EDX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB17(mod) {
                    return this.regEDI + this.regEDX;
                },
                /**
                 * opModSIB18(): scale=00 (1)  index=011 (EBX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB18(mod) {
                    return this.regEAX + this.regEBX;
                },
                /**
                 * opModSIB19(): scale=00 (1)  index=011 (EBX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB19(mod) {
                    return this.regECX + this.regEBX;
                },
                /**
                 * opModSIB1A(): scale=00 (1)  index=011 (EBX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB1A(mod) {
                    return this.regEDX + this.regEBX;
                },
                /**
                 * opModSIB1B(): scale=00 (1)  index=011 (EBX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB1B(mod) {
                    return this.regEBX + this.regEBX;
                },
                /**
                 * opModSIB1C(): scale=00 (1)  index=011 (EBX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB1C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regEBX;
                },
                /**
                 * opModSIB1D(): scale=00 (1)  index=011 (EBX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB1D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regEBX;
                },
                /**
                 * opModSIB1E(): scale=00 (1)  index=011 (EBX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB1E(mod) {
                    return this.regESI + this.regEBX;
                },
                /**
                 * opModSIB1F(): scale=00 (1)  index=011 (EBX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB1F(mod) {
                    return this.regEDI + this.regEBX;
                },
                /**
                 * opModSIB20(): scale=00 (1)  index=100 (none)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB20(mod) {
                    return this.regEAX;
                },
                /**
                 * opModSIB21(): scale=00 (1)  index=100 (none)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB21(mod) {
                    return this.regECX;
                },
                /**
                 * opModSIB22(): scale=00 (1)  index=100 (none)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB22(mod) {
                    return this.regEDX;
                },
                /**
                 * opModSIB23(): scale=00 (1)  index=100 (none)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB23(mod) {
                    return this.regEBX;
                },
                /**
                 * opModSIB24(): scale=00 (1)  index=100 (none)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB24(mod) {
                    this.segData = this.segStack;
                    return this.getSP();
                },
                /**
                 * opModSIB25(): scale=00 (1)  index=100 (none)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB25(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord());
                },
                /**
                 * opModSIB26(): scale=00 (1)  index=100 (none)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB26(mod) {
                    return this.regESI;
                },
                /**
                 * opModSIB27(): scale=00 (1)  index=100 (none)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB27(mod) {
                    return this.regEDI;
                },
                /**
                 * opModSIB28(): scale=00 (1)  index=101 (EBP)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB28(mod) {
                    return this.regEAX + this.regEBP;
                },
                /**
                 * opModSIB29(): scale=00 (1)  index=101 (EBP)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB29(mod) {
                    return this.regECX + this.regEBP;
                },
                /**
                 * opModSIB2A(): scale=00 (1)  index=101 (EBP)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB2A(mod) {
                    return this.regEDX + this.regEBP;
                },
                /**
                 * opModSIB2B(): scale=00 (1)  index=101 (EBP)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB2B(mod) {
                    return this.regEBX + this.regEBP;
                },
                /**
                 * opModSIB2C(): scale=00 (1)  index=101 (EBP)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB2C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regEBP;
                },
                /**
                 * opModSIB2D(): scale=00 (1)  index=101 (EBP)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB2D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regEBP;
                },
                /**
                 * opModSIB2E(): scale=00 (1)  index=101 (EBP)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB2E(mod) {
                    return this.regESI + this.regEBP;
                },
                /**
                 * opModSIB2F(): scale=00 (1)  index=101 (EBP)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB2F(mod) {
                    return this.regEDI + this.regEBP;
                },
                /**
                 * opModSIB30(): scale=00 (1)  index=110 (ESI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB30(mod) {
                    return this.regEAX + this.regESI;
                },
                /**
                 * opModSIB31(): scale=00 (1)  index=110 (ESI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB31(mod) {
                    return this.regECX + this.regESI;
                },
                /**
                 * opModSIB32(): scale=00 (1)  index=110 (ESI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB32(mod) {
                    return this.regEDX + this.regESI;
                },
                /**
                 * opModSIB33(): scale=00 (1)  index=110 (ESI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB33(mod) {
                    return this.regEBX + this.regESI;
                },
                /**
                 * opModSIB34(): scale=00 (1)  index=110 (ESI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB34(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regESI;
                },
                /**
                 * opModSIB35(): scale=00 (1)  index=110 (ESI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB35(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regESI;
                },
                /**
                 * opModSIB36(): scale=00 (1)  index=110 (ESI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB36(mod) {
                    return this.regESI + this.regESI;
                },
                /**
                 * opModSIB37(): scale=00 (1)  index=110 (ESI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB37(mod) {
                    return this.regEDI + this.regESI;
                },
                /**
                 * opModSIB38(): scale=00 (1)  index=111 (EDI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB38(mod) {
                    return this.regEAX + this.regEDI;
                },
                /**
                 * opModSIB39(): scale=00 (1)  index=111 (EDI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB39(mod) {
                    return this.regECX + this.regEDI;
                },
                /**
                 * opModSIB3A(): scale=00 (1)  index=111 (EDI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB3A(mod) {
                    return this.regEDX + this.regEDI;
                },
                /**
                 * opModSIB3B(): scale=00 (1)  index=111 (EDI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB3B(mod) {
                    return this.regEBX + this.regEDI;
                },
                /**
                 * opModSIB3C(): scale=00 (1)  index=111 (EDI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB3C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + this.regEDI;
                },
                /**
                 * opModSIB3D(): scale=00 (1)  index=111 (EDI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB3D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + this.regEDI;
                },
                /**
                 * opModSIB3E(): scale=00 (1)  index=111 (EDI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB3E(mod) {
                    return this.regESI + this.regEDI;
                },
                /**
                 * opModSIB3F(): scale=00 (1)  index=111 (EDI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB3F(mod) {
                    return this.regEDI + this.regEDI;
                },
                /**
                 * opModSIB40(): scale=01 (2)  index=000 (EAX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB40(mod) {
                    return this.regEAX + (this.regEAX << 1);
                },
                /**
                 * opModSIB41(): scale=01 (2)  index=000 (EAX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB41(mod) {
                    return this.regECX + (this.regEAX << 1);
                },
                /**
                 * opModSIB42(): scale=01 (2)  index=000 (EAX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB42(mod) {
                    return this.regEDX + (this.regEAX << 1);
                },
                /**
                 * opModSIB43(): scale=01 (2)  index=000 (EAX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB43(mod) {
                    return this.regEBX + (this.regEAX << 1);
                },
                /**
                 * opModSIB44(): scale=01 (2)  index=000 (EAX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB44(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEAX << 1);
                },
                /**
                 * opModSIB45(): scale=01 (2)  index=000 (EAX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB45(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEAX << 1);
                },
                /**
                 * opModSIB46(): scale=01 (2)  index=000 (EAX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB46(mod) {
                    return this.regESI + (this.regEAX << 1);
                },
                /**
                 * opModSIB47(): scale=01 (2)  index=000 (EAX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB47(mod) {
                    return this.regEDI + (this.regEAX << 1);
                },
                /**
                 * opModSIB48(): scale=01 (2)  index=001 (ECX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB48(mod) {
                    return this.regEAX + (this.regECX << 1);
                },
                /**
                 * opModSIB49(): scale=01 (2)  index=001 (ECX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB49(mod) {
                    return this.regECX + (this.regECX << 1);
                },
                /**
                 * opModSIB4A(): scale=01 (2)  index=001 (ECX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB4A(mod) {
                    return this.regEDX + (this.regECX << 1);
                },
                /**
                 * opModSIB4B(): scale=01 (2)  index=001 (ECX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB4B(mod) {
                    return this.regEBX + (this.regECX << 1);
                },
                /**
                 * opModSIB4C(): scale=01 (2)  index=001 (ECX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB4C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regECX << 1);
                },
                /**
                 * opModSIB4D(): scale=01 (2)  index=001 (ECX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB4D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regECX << 1);
                },
                /**
                 * opModSIB4E(): scale=01 (2)  index=001 (ECX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB4E(mod) {
                    return this.regESI + (this.regECX << 1);
                },
                /**
                 * opModSIB4F(): scale=01 (2)  index=001 (ECX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB4F(mod) {
                    return this.regEDI + (this.regECX << 1);
                },
                /**
                 * opModSIB50(): scale=01 (2)  index=010 (EDX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB50(mod) {
                    return this.regEAX + (this.regEDX << 1);
                },
                /**
                 * opModSIB51(): scale=01 (2)  index=010 (EDX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB51(mod) {
                    return this.regECX + (this.regEDX << 1);
                },
                /**
                 * opModSIB52(): scale=01 (2)  index=010 (EDX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB52(mod) {
                    return this.regEDX + (this.regEDX << 1);
                },
                /**
                 * opModSIB53(): scale=01 (2)  index=010 (EDX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB53(mod) {
                    return this.regEBX + (this.regEDX << 1);
                },
                /**
                 * opModSIB54(): scale=01 (2)  index=010 (EDX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB54(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEDX << 1);
                },
                /**
                 * opModSIB55(): scale=01 (2)  index=010 (EDX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB55(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEDX << 1);
                },
                /**
                 * opModSIB56(): scale=01 (2)  index=010 (EDX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB56(mod) {
                    return this.regESI + (this.regEDX << 1);
                },
                /**
                 * opModSIB57(): scale=01 (2)  index=010 (EDX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB57(mod) {
                    return this.regEDI + (this.regEDX << 1);
                },
                /**
                 * opModSIB58(): scale=01 (2)  index=011 (EBX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB58(mod) {
                    return this.regEAX + (this.regEBX << 1);
                },
                /**
                 * opModSIB59(): scale=01 (2)  index=011 (EBX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB59(mod) {
                    return this.regECX + (this.regEBX << 1);
                },
                /**
                 * opModSIB5A(): scale=01 (2)  index=011 (EBX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB5A(mod) {
                    return this.regEDX + (this.regEBX << 1);
                },
                /**
                 * opModSIB5B(): scale=01 (2)  index=011 (EBX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB5B(mod) {
                    return this.regEBX + (this.regEBX << 1);
                },
                /**
                 * opModSIB5C(): scale=01 (2)  index=011 (EBX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB5C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEBX << 1);
                },
                /**
                 * opModSIB5D(): scale=01 (2)  index=011 (EBX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB5D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEBX << 1);
                },
                /**
                 * opModSIB5E(): scale=01 (2)  index=011 (EBX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB5E(mod) {
                    return this.regESI + (this.regEBX << 1);
                },
                /**
                 * opModSIB5F(): scale=01 (2)  index=011 (EBX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB5F(mod) {
                    return this.regEDI + (this.regEBX << 1);
                },
                /**
                 * opModSIB60(): scale=01 (2)  index=100 (none)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB60(mod) {
                    return this.regEAX;
                },
                /**
                 * opModSIB61(): scale=01 (2)  index=100 (none)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB61(mod) {
                    return this.regECX;
                },
                /**
                 * opModSIB62(): scale=01 (2)  index=100 (none)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB62(mod) {
                    return this.regEDX;
                },
                /**
                 * opModSIB63(): scale=01 (2)  index=100 (none)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB63(mod) {
                    return this.regEBX;
                },
                /**
                 * opModSIB64(): scale=01 (2)  index=100 (none)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB64(mod) {
                    this.segData = this.segStack;
                    return this.getSP();
                },
                /**
                 * opModSIB65(): scale=01 (2)  index=100 (none)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB65(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord());
                },
                /**
                 * opModSIB66(): scale=01 (2)  index=100 (none)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB66(mod) {
                    return this.regESI;
                },
                /**
                 * opModSIB67(): scale=01 (2)  index=100 (none)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB67(mod) {
                    return this.regEDI;
                },
                /**
                 * opModSIB68(): scale=01 (2)  index=101 (EBP)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB68(mod) {
                    return this.regEAX + (this.regEBP << 1);
                },
                /**
                 * opModSIB69(): scale=01 (2)  index=101 (EBP)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB69(mod) {
                    return this.regECX + (this.regEBP << 1);
                },
                /**
                 * opModSIB6A(): scale=01 (2)  index=101 (EBP)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB6A(mod) {
                    return this.regEDX + (this.regEBP << 1);
                },
                /**
                 * opModSIB6B(): scale=01 (2)  index=101 (EBP)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB6B(mod) {
                    return this.regEBX + (this.regEBP << 1);
                },
                /**
                 * opModSIB6C(): scale=01 (2)  index=101 (EBP)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB6C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEBP << 1);
                },
                /**
                 * opModSIB6D(): scale=01 (2)  index=101 (EBP)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB6D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEBP << 1);
                },
                /**
                 * opModSIB6E(): scale=01 (2)  index=101 (EBP)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB6E(mod) {
                    return this.regESI + (this.regEBP << 1);
                },
                /**
                 * opModSIB6F(): scale=01 (2)  index=101 (EBP)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB6F(mod) {
                    return this.regEDI + (this.regEBP << 1);
                },
                /**
                 * opModSIB70(): scale=01 (2)  index=110 (ESI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB70(mod) {
                    return this.regEAX + (this.regESI << 1);
                },
                /**
                 * opModSIB71(): scale=01 (2)  index=110 (ESI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB71(mod) {
                    return this.regECX + (this.regESI << 1);
                },
                /**
                 * opModSIB72(): scale=01 (2)  index=110 (ESI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB72(mod) {
                    return this.regEDX + (this.regESI << 1);
                },
                /**
                 * opModSIB73(): scale=01 (2)  index=110 (ESI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB73(mod) {
                    return this.regEBX + (this.regESI << 1);
                },
                /**
                 * opModSIB74(): scale=01 (2)  index=110 (ESI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB74(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regESI << 1);
                },
                /**
                 * opModSIB75(): scale=01 (2)  index=110 (ESI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB75(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regESI << 1);
                },
                /**
                 * opModSIB76(): scale=01 (2)  index=110 (ESI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB76(mod) {
                    return this.regESI + (this.regESI << 1);
                },
                /**
                 * opModSIB77(): scale=01 (2)  index=110 (ESI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB77(mod) {
                    return this.regEDI + (this.regESI << 1);
                },
                /**
                 * opModSIB78(): scale=01 (2)  index=111 (EDI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB78(mod) {
                    return this.regEAX + (this.regEDI << 1);
                },
                /**
                 * opModSIB79(): scale=01 (2)  index=111 (EDI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB79(mod) {
                    return this.regECX + (this.regEDI << 1);
                },
                /**
                 * opModSIB7A(): scale=01 (2)  index=111 (EDI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB7A(mod) {
                    return this.regEDX + (this.regEDI << 1);
                },
                /**
                 * opModSIB7B(): scale=01 (2)  index=111 (EDI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB7B(mod) {
                    return this.regEBX + (this.regEDI << 1);
                },
                /**
                 * opModSIB7C(): scale=01 (2)  index=111 (EDI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB7C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEDI << 1);
                },
                /**
                 * opModSIB7D(): scale=01 (2)  index=111 (EDI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB7D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEDI << 1);
                },
                /**
                 * opModSIB7E(): scale=01 (2)  index=111 (EDI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB7E(mod) {
                    return this.regESI + (this.regEDI << 1);
                },
                /**
                 * opModSIB7F(): scale=01 (2)  index=111 (EDI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB7F(mod) {
                    return this.regEDI + (this.regEDI << 1);
                },
                /**
                 * opModSIB80(): scale=10 (4)  index=000 (EAX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB80(mod) {
                    return this.regEAX + (this.regEAX << 2);
                },
                /**
                 * opModSIB81(): scale=10 (4)  index=000 (EAX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB81(mod) {
                    return this.regECX + (this.regEAX << 2);
                },
                /**
                 * opModSIB82(): scale=10 (4)  index=000 (EAX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB82(mod) {
                    return this.regEDX + (this.regEAX << 2);
                },
                /**
                 * opModSIB83(): scale=10 (4)  index=000 (EAX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB83(mod) {
                    return this.regEBX + (this.regEAX << 2);
                },
                /**
                 * opModSIB84(): scale=10 (4)  index=000 (EAX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB84(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEAX << 2);
                },
                /**
                 * opModSIB85(): scale=10 (4)  index=000 (EAX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB85(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEAX << 2);
                },
                /**
                 * opModSIB86(): scale=10 (4)  index=000 (EAX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB86(mod) {
                    return this.regESI + (this.regEAX << 2);
                },
                /**
                 * opModSIB87(): scale=10 (4)  index=000 (EAX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB87(mod) {
                    return this.regEDI + (this.regEAX << 2);
                },
                /**
                 * opModSIB88(): scale=10 (4)  index=001 (ECX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB88(mod) {
                    return this.regEAX + (this.regECX << 2);
                },
                /**
                 * opModSIB89(): scale=10 (4)  index=001 (ECX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB89(mod) {
                    return this.regECX + (this.regECX << 2);
                },
                /**
                 * opModSIB8A(): scale=10 (4)  index=001 (ECX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB8A(mod) {
                    return this.regEDX + (this.regECX << 2);
                },
                /**
                 * opModSIB8B(): scale=10 (4)  index=001 (ECX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB8B(mod) {
                    return this.regEBX + (this.regECX << 2);
                },
                /**
                 * opModSIB8C(): scale=10 (4)  index=001 (ECX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB8C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regECX << 2);
                },
                /**
                 * opModSIB8D(): scale=10 (4)  index=001 (ECX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB8D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regECX << 2);
                },
                /**
                 * opModSIB8E(): scale=10 (4)  index=001 (ECX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB8E(mod) {
                    return this.regESI + (this.regECX << 2);
                },
                /**
                 * opModSIB8F(): scale=10 (4)  index=001 (ECX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB8F(mod) {
                    return this.regEDI + (this.regECX << 2);
                },
                /**
                 * opModSIB90(): scale=10 (4)  index=010 (EDX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB90(mod) {
                    return this.regEAX + (this.regEDX << 2);
                },
                /**
                 * opModSIB91(): scale=10 (4)  index=010 (EDX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB91(mod) {
                    return this.regECX + (this.regEDX << 2);
                },
                /**
                 * opModSIB92(): scale=10 (4)  index=010 (EDX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB92(mod) {
                    return this.regEDX + (this.regEDX << 2);
                },
                /**
                 * opModSIB93(): scale=10 (4)  index=010 (EDX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB93(mod) {
                    return this.regEBX + (this.regEDX << 2);
                },
                /**
                 * opModSIB94(): scale=10 (4)  index=010 (EDX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB94(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEDX << 2);
                },
                /**
                 * opModSIB95(): scale=10 (4)  index=010 (EDX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB95(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEDX << 2);
                },
                /**
                 * opModSIB96(): scale=10 (4)  index=010 (EDX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB96(mod) {
                    return this.regESI + (this.regEDX << 2);
                },
                /**
                 * opModSIB97(): scale=10 (4)  index=010 (EDX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB97(mod) {
                    return this.regEDI + (this.regEDX << 2);
                },
                /**
                 * opModSIB98(): scale=10 (4)  index=011 (EBX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB98(mod) {
                    return this.regEAX + (this.regEBX << 2);
                },
                /**
                 * opModSIB99(): scale=10 (4)  index=011 (EBX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB99(mod) {
                    return this.regECX + (this.regEBX << 2);
                },
                /**
                 * opModSIB9A(): scale=10 (4)  index=011 (EBX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB9A(mod) {
                    return this.regEDX + (this.regEBX << 2);
                },
                /**
                 * opModSIB9B(): scale=10 (4)  index=011 (EBX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB9B(mod) {
                    return this.regEBX + (this.regEBX << 2);
                },
                /**
                 * opModSIB9C(): scale=10 (4)  index=011 (EBX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB9C(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEBX << 2);
                },
                /**
                 * opModSIB9D(): scale=10 (4)  index=011 (EBX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB9D(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEBX << 2);
                },
                /**
                 * opModSIB9E(): scale=10 (4)  index=011 (EBX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB9E(mod) {
                    return this.regESI + (this.regEBX << 2);
                },
                /**
                 * opModSIB9F(): scale=10 (4)  index=011 (EBX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIB9F(mod) {
                    return this.regEDI + (this.regEBX << 2);
                },
                /**
                 * opModSIBA0(): scale=10 (4)  index=100 (none)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA0(mod) {
                    return this.regEAX;
                },
                /**
                 * opModSIBA1(): scale=10 (4)  index=100 (none)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA1(mod) {
                    return this.regECX;
                },
                /**
                 * opModSIBA2(): scale=10 (4)  index=100 (none)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA2(mod) {
                    return this.regEDX;
                },
                /**
                 * opModSIBA3(): scale=10 (4)  index=100 (none)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA3(mod) {
                    return this.regEBX;
                },
                /**
                 * opModSIBA4(): scale=10 (4)  index=100 (none)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA4(mod) {
                    this.segData = this.segStack;
                    return this.getSP();
                },
                /**
                 * opModSIBA5(): scale=10 (4)  index=100 (none)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA5(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord());
                },
                /**
                 * opModSIBA6(): scale=10 (4)  index=100 (none)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA6(mod) {
                    return this.regESI;
                },
                /**
                 * opModSIBA7(): scale=10 (4)  index=100 (none)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA7(mod) {
                    return this.regEDI;
                },
                /**
                 * opModSIBA8(): scale=10 (4)  index=101 (EBP)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA8(mod) {
                    return this.regEAX + (this.regEBP << 2);
                },
                /**
                 * opModSIBA9(): scale=10 (4)  index=101 (EBP)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBA9(mod) {
                    return this.regECX + (this.regEBP << 2);
                },
                /**
                 * opModSIBAA(): scale=10 (4)  index=101 (EBP)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBAA(mod) {
                    return this.regEDX + (this.regEBP << 2);
                },
                /**
                 * opModSIBAB(): scale=10 (4)  index=101 (EBP)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBAB(mod) {
                    return this.regEBX + (this.regEBP << 2);
                },
                /**
                 * opModSIBAC(): scale=10 (4)  index=101 (EBP)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBAC(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEBP << 2);
                },
                /**
                 * opModSIBAD(): scale=10 (4)  index=101 (EBP)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBAD(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEBP << 2);
                },
                /**
                 * opModSIBAE(): scale=10 (4)  index=101 (EBP)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBAE(mod) {
                    return this.regESI + (this.regEBP << 2);
                },
                /**
                 * opModSIBAF(): scale=10 (4)  index=101 (EBP)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBAF(mod) {
                    return this.regEDI + (this.regEBP << 2);
                },
                /**
                 * opModSIBB0(): scale=10 (4)  index=110 (ESI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB0(mod) {
                    return this.regEAX + (this.regESI << 2);
                },
                /**
                 * opModSIBB1(): scale=10 (4)  index=110 (ESI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB1(mod) {
                    return this.regECX + (this.regESI << 2);
                },
                /**
                 * opModSIBB2(): scale=10 (4)  index=110 (ESI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB2(mod) {
                    return this.regEDX + (this.regESI << 2);
                },
                /**
                 * opModSIBB3(): scale=10 (4)  index=110 (ESI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB3(mod) {
                    return this.regEBX + (this.regESI << 2);
                },
                /**
                 * opModSIBB4(): scale=10 (4)  index=110 (ESI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB4(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regESI << 2);
                },
                /**
                 * opModSIBB5(): scale=10 (4)  index=110 (ESI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB5(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regESI << 2);
                },
                /**
                 * opModSIBB6(): scale=10 (4)  index=110 (ESI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB6(mod) {
                    return this.regESI + (this.regESI << 2);
                },
                /**
                 * opModSIBB7(): scale=10 (4)  index=110 (ESI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB7(mod) {
                    return this.regEDI + (this.regESI << 2);
                },
                /**
                 * opModSIBB8(): scale=10 (4)  index=111 (EDI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB8(mod) {
                    return this.regEAX + (this.regEDI << 2);
                },
                /**
                 * opModSIBB9(): scale=10 (4)  index=111 (EDI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBB9(mod) {
                    return this.regECX + (this.regEDI << 2);
                },
                /**
                 * opModSIBBA(): scale=10 (4)  index=111 (EDI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBBA(mod) {
                    return this.regEDX + (this.regEDI << 2);
                },
                /**
                 * opModSIBBB(): scale=10 (4)  index=111 (EDI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBBB(mod) {
                    return this.regEBX + (this.regEDI << 2);
                },
                /**
                 * opModSIBBC(): scale=10 (4)  index=111 (EDI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBBC(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEDI << 2);
                },
                /**
                 * opModSIBBD(): scale=10 (4)  index=111 (EDI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBBD(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEDI << 2);
                },
                /**
                 * opModSIBBE(): scale=10 (4)  index=111 (EDI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBBE(mod) {
                    return this.regESI + (this.regEDI << 2);
                },
                /**
                 * opModSIBBF(): scale=10 (4)  index=111 (EDI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBBF(mod) {
                    return this.regEDI + (this.regEDI << 2);
                },
                /**
                 * opModSIBC0(): scale=11 (8)  index=000 (EAX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC0(mod) {
                    return this.regEAX + (this.regEAX << 3);
                },
                /**
                 * opModSIBC1(): scale=11 (8)  index=000 (EAX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC1(mod) {
                    return this.regECX + (this.regEAX << 3);
                },
                /**
                 * opModSIBC2(): scale=11 (8)  index=000 (EAX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC2(mod) {
                    return this.regEDX + (this.regEAX << 3);
                },
                /**
                 * opModSIBC3(): scale=11 (8)  index=000 (EAX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC3(mod) {
                    return this.regEBX + (this.regEAX << 3);
                },
                /**
                 * opModSIBC4(): scale=11 (8)  index=000 (EAX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC4(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEAX << 3);
                },
                /**
                 * opModSIBC5(): scale=11 (8)  index=000 (EAX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC5(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEAX << 3);
                },
                /**
                 * opModSIBC6(): scale=11 (8)  index=000 (EAX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC6(mod) {
                    return this.regESI + (this.regEAX << 3);
                },
                /**
                 * opModSIBC7(): scale=11 (8)  index=000 (EAX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC7(mod) {
                    return this.regEDI + (this.regEAX << 3);
                },
                /**
                 * opModSIBC8(): scale=11 (8)  index=001 (ECX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC8(mod) {
                    return this.regEAX + (this.regECX << 3);
                },
                /**
                 * opModSIBC9(): scale=11 (8)  index=001 (ECX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBC9(mod) {
                    return this.regECX + (this.regECX << 3);
                },
                /**
                 * opModSIBCA(): scale=11 (8)  index=001 (ECX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBCA(mod) {
                    return this.regEDX + (this.regECX << 3);
                },
                /**
                 * opModSIBCB(): scale=11 (8)  index=001 (ECX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBCB(mod) {
                    return this.regEBX + (this.regECX << 3);
                },
                /**
                 * opModSIBCC(): scale=11 (8)  index=001 (ECX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBCC(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regECX << 3);
                },
                /**
                 * opModSIBCD(): scale=11 (8)  index=001 (ECX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBCD(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regECX << 3);
                },
                /**
                 * opModSIBCE(): scale=11 (8)  index=001 (ECX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBCE(mod) {
                    return this.regESI + (this.regECX << 3);
                },
                /**
                 * opModSIBCF(): scale=11 (8)  index=001 (ECX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBCF(mod) {
                    return this.regEDI + (this.regECX << 3);
                },
                /**
                 * opModSIBD0(): scale=11 (8)  index=010 (EDX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD0(mod) {
                    return this.regEAX + (this.regEDX << 3);
                },
                /**
                 * opModSIBD1(): scale=11 (8)  index=010 (EDX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD1(mod) {
                    return this.regECX + (this.regEDX << 3);
                },
                /**
                 * opModSIBD2(): scale=11 (8)  index=010 (EDX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD2(mod) {
                    return this.regEDX + (this.regEDX << 3);
                },
                /**
                 * opModSIBD3(): scale=11 (8)  index=010 (EDX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD3(mod) {
                    return this.regEBX + (this.regEDX << 3);
                },
                /**
                 * opModSIBD4(): scale=11 (8)  index=010 (EDX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD4(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEDX << 3);
                },
                /**
                 * opModSIBD5(): scale=11 (8)  index=010 (EDX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD5(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEDX << 3);
                },
                /**
                 * opModSIBD6(): scale=11 (8)  index=010 (EDX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD6(mod) {
                    return this.regESI + (this.regEDX << 3);
                },
                /**
                 * opModSIBD7(): scale=11 (8)  index=010 (EDX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD7(mod) {
                    return this.regEDI + (this.regEDX << 3);
                },
                /**
                 * opModSIBD8(): scale=11 (8)  index=011 (EBX)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD8(mod) {
                    return this.regEAX + (this.regEBX << 3);
                },
                /**
                 * opModSIBD9(): scale=11 (8)  index=011 (EBX)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBD9(mod) {
                    return this.regECX + (this.regEBX << 3);
                },
                /**
                 * opModSIBDA(): scale=11 (8)  index=011 (EBX)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBDA(mod) {
                    return this.regEDX + (this.regEBX << 3);
                },
                /**
                 * opModSIBDB(): scale=11 (8)  index=011 (EBX)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBDB(mod) {
                    return this.regEBX + (this.regEBX << 3);
                },
                /**
                 * opModSIBDC(): scale=11 (8)  index=011 (EBX)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBDC(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEBX << 3);
                },
                /**
                 * opModSIBDD(): scale=11 (8)  index=011 (EBX)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBDD(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEBX << 3);
                },
                /**
                 * opModSIBDE(): scale=11 (8)  index=011 (EBX)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBDE(mod) {
                    return this.regESI + (this.regEBX << 3);
                },
                /**
                 * opModSIBDF(): scale=11 (8)  index=011 (EBX)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBDF(mod) {
                    return this.regEDI + (this.regEBX << 3);
                },
                /**
                 * opModSIBE0(): scale=11 (8)  index=100 (none)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE0(mod) {
                    return this.regEAX;
                },
                /**
                 * opModSIBE1(): scale=11 (8)  index=100 (none)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE1(mod) {
                    return this.regECX;
                },
                /**
                 * opModSIBE2(): scale=11 (8)  index=100 (none)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE2(mod) {
                    return this.regEDX;
                },
                /**
                 * opModSIBE3(): scale=11 (8)  index=100 (none)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE3(mod) {
                    return this.regEBX;
                },
                /**
                 * opModSIBE4(): scale=11 (8)  index=100 (none)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE4(mod) {
                    this.segData = this.segStack;
                    return this.getSP();
                },
                /**
                 * opModSIBE5(): scale=11 (8)  index=100 (none)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE5(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord());
                },
                /**
                 * opModSIBE6(): scale=11 (8)  index=100 (none)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE6(mod) {
                    return this.regESI;
                },
                /**
                 * opModSIBE7(): scale=11 (8)  index=100 (none)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE7(mod) {
                    return this.regEDI;
                },
                /**
                 * opModSIBE8(): scale=11 (8)  index=101 (EBP)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE8(mod) {
                    return this.regEAX + (this.regEBP << 3);
                },
                /**
                 * opModSIBE9(): scale=11 (8)  index=101 (EBP)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBE9(mod) {
                    return this.regECX + (this.regEBP << 3);
                },
                /**
                 * opModSIBEA(): scale=11 (8)  index=101 (EBP)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBEA(mod) {
                    return this.regEDX + (this.regEBP << 3);
                },
                /**
                 * opModSIBEB(): scale=11 (8)  index=101 (EBP)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBEB(mod) {
                    return this.regEBX + (this.regEBP << 3);
                },
                /**
                 * opModSIBEC(): scale=11 (8)  index=101 (EBP)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBEC(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEBP << 3);
                },
                /**
                 * opModSIBED(): scale=11 (8)  index=101 (EBP)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBED(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEBP << 3);
                },
                /**
                 * opModSIBEE(): scale=11 (8)  index=101 (EBP)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBEE(mod) {
                    return this.regESI + (this.regEBP << 3);
                },
                /**
                 * opModSIBEF(): scale=11 (8)  index=101 (EBP)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBEF(mod) {
                    return this.regEDI + (this.regEBP << 3);
                },
                /**
                 * opModSIBF0(): scale=11 (8)  index=110 (ESI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF0(mod) {
                    return this.regEAX + (this.regESI << 3);
                },
                /**
                 * opModSIBF1(): scale=11 (8)  index=110 (ESI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF1(mod) {
                    return this.regECX + (this.regESI << 3);
                },
                /**
                 * opModSIBF2(): scale=11 (8)  index=110 (ESI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF2(mod) {
                    return this.regEDX + (this.regESI << 3);
                },
                /**
                 * opModSIBF3(): scale=11 (8)  index=110 (ESI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF3(mod) {
                    return this.regEBX + (this.regESI << 3);
                },
                /**
                 * opModSIBF4(): scale=11 (8)  index=110 (ESI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF4(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regESI << 3);
                },
                /**
                 * opModSIBF5(): scale=11 (8)  index=110 (ESI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF5(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regESI << 3);
                },
                /**
                 * opModSIBF6(): scale=11 (8)  index=110 (ESI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF6(mod) {
                    return this.regESI + (this.regESI << 3);
                },
                /**
                 * opModSIBF7(): scale=11 (8)  index=110 (ESI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF7(mod) {
                    return this.regEDI + (this.regESI << 3);
                },
                /**
                 * opModSIBF8(): scale=11 (8)  index=111 (EDI)  base=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF8(mod) {
                    return this.regEAX + (this.regEDI << 3);
                },
                /**
                 * opModSIBF9(): scale=11 (8)  index=111 (EDI)  base=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBF9(mod) {
                    return this.regECX + (this.regEDI << 3);
                },
                /**
                 * opModSIBFA(): scale=11 (8)  index=111 (EDI)  base=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBFA(mod) {
                    return this.regEDX + (this.regEDI << 3);
                },
                /**
                 * opModSIBFB(): scale=11 (8)  index=111 (EDI)  base=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBFB(mod) {
                    return this.regEBX + (this.regEDI << 3);
                },
                /**
                 * opModSIBFC(): scale=11 (8)  index=111 (EDI)  base=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBFC(mod) {
                    this.segData = this.segStack;
                    return this.getSP() + (this.regEDI << 3);
                },
                /**
                 * opModSIBFD(): scale=11 (8)  index=111 (EDI)  base=101 (mod? EBP : disp32)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBFD(mod) {
                    return (mod? ((this.segData = this.segStack), this.regEBP) : this.getIPWord()) + (this.regEDI << 3);
                },
                /**
                 * opModSIBFE(): scale=11 (8)  index=111 (EDI)  base=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBFE(mod) {
                    return this.regESI + (this.regEDI << 3);
                },
                /**
                 * opModSIBFF(): scale=11 (8)  index=111 (EDI)  base=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {number} mod
                 */
                function opModSIBFF(mod) {
                    return this.regEDI + (this.regEDI << 3);
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModSIB;
            
          • x86modw.js
            /**
             * @fileoverview Implements PCjs 8086 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModW = {};
            
            X86ModW.aOpModReg = [
                /**
                 * opModRegWord00(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord00(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord01(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord01(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord02(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord02(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord03(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord03(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord04(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord04(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord05(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord05(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord06(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord06(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord07(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord07(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord08(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord08(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord09(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord09(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord0A(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord0A(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord0B(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord0B(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord0C(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord0C(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord0D(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord0D(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord0E(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord0E(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord0F(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord0F(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord10(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord10(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord11(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord11(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord12(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord12(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord13(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord13(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord14(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord14(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord15(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord15(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord16(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord16(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord17(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord17(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord18(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord18(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord19(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord19(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord1A(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord1A(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord1B(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord1B(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord1C(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord1C(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord1D(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord1D(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord1E(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord1E(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord1F(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord1F(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord20(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord20(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regESI)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord21(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord21(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regEDI)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord22(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord22(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regESI)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord23(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord23(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regEDI)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord24(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord24(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regESI)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord25(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord25(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEDI)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord26(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord26(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord27(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord27(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX)));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord28(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord28(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord29(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord29(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord2A(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord2A(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord2B(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord2B(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord2C(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord2C(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord2D(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord2D(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord2E(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord2E(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord2F(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord2F(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord30(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord30(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord31(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord31(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord32(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord32(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord33(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord33(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord34(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord34(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord35(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord35(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord36(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord36(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord37(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord37(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord38(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord38(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord39(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord39(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord3A(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord3A(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModRegWord3B(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord3B(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModRegWord3C(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord3C(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regESI));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord3D(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord3D(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEDI));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord3E(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord3E(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModRegWord3F(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord3F(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModRegWord40(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord40(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord41(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord41(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord42(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord42(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord43(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord43(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord44(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord44(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord45(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord45(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord46(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord46(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord47(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord47(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord48(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord48(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord49(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord49(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord4A(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord4A(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord4B(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord4B(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord4C(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord4C(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord4D(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord4D(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord4E(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord4E(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord4F(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord4F(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord50(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord50(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord51(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord51(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord52(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord52(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord53(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord53(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord54(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord54(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord55(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord55(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord56(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord56(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord57(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord57(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord58(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord58(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord59(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord59(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord5A(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord5A(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord5B(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord5B(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord5C(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord5C(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord5D(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord5D(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord5E(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord5E(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord5F(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord5F(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord60(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord60(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord61(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord61(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord62(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord62(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord63(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord63(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord64(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord64(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regESI + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord65(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord65(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEDI + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord66(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord66(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord67(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord67(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.getIPDisp())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord68(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord68(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord69(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord69(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord6A(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord6A(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord6B(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord6B(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord6C(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord6C(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord6D(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord6D(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord6E(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord6E(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord6F(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord6F(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord70(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord70(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord71(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord71(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord72(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord72(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord73(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord73(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord74(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord74(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord75(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord75(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord76(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord76(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord77(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord77(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord78(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord78(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord79(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord79(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord7A(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord7A(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord7B(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord7B(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord7C(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord7C(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regESI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord7D(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord7D(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord7E(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord7E(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord7F(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord7F(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord80(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord80(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord81(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord81(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord82(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord82(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord83(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord83(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord84(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord84(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord85(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord85(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord86(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord86(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord87(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord87(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord88(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord88(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord89(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord89(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord8A(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord8A(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord8B(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord8B(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord8C(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord8C(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord8D(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord8D(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord8E(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord8E(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord8F(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord8F(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord90(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord90(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord91(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord91(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord92(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord92(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord93(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord93(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord94(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord94(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord95(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord95(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord96(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord96(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord97(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord97(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord98(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord98(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord99(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord99(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord9A(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord9A(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWord9B(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord9B(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWord9C(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord9C(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord9D(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord9D(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord9E(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord9E(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWord9F(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWord9F(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordA0(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA0(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordA1(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA1(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordA2(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA2(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordA3(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA3(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordA4(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA4(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regESI + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordA5(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA5(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEDI + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordA6(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA6(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordA7(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA7(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.getIPAddr())));
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordA8(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA8(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordA9(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordA9(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordAA(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordAA(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordAB(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordAB(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordAC(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordAC(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordAD(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordAD(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordAE(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordAE(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordAF(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordAF(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordB0(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB0(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordB1(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB1(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordB2(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB2(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordB3(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB3(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordB4(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB4(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordB5(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB5(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordB6(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB6(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordB7(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB7(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordB8(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB8(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordB9(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordB9(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordBA(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordBA(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModRegWordBB(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordBB(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModRegWordBC(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordBC(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regESI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordBD(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordBD(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordBE(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordBE(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordBF(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordBF(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModRegWordC0(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC0(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regEAX);
                },
                /**
                 * opModRegWordC1(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC1(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiCL; this.backTrack.btiAH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opModRegWordC2(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC2(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiDL; this.backTrack.btiAH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opModRegWordC3(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC3(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiBL; this.backTrack.btiAH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opModRegWordC4(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC4(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordC5(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC5(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiBPLo; this.backTrack.btiAH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opModRegWordC6(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC6(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiSILo; this.backTrack.btiAH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opModRegWordC7(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC7(fn) {
                    this.regEAX = fn.call(this, this.regEAX, this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiDILo; this.backTrack.btiAH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opModRegWordC8(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC8(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiAL; this.backTrack.btiCH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opModRegWordC9(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordC9(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regECX);
                },
                /**
                 * opModRegWordCA(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordCA(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiDL; this.backTrack.btiCH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opModRegWordCB(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordCB(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiBL; this.backTrack.btiCH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opModRegWordCC(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordCC(fn) {
                    this.regECX = fn.call(this, this.regECX, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordCD(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordCD(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiBPLo; this.backTrack.btiCH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opModRegWordCE(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordCE(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiSILo; this.backTrack.btiCH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opModRegWordCF(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordCF(fn) {
                    this.regECX = fn.call(this, this.regECX, this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiDILo; this.backTrack.btiCH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opModRegWordD0(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD0(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiAL; this.backTrack.btiDH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opModRegWordD1(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD1(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiCL; this.backTrack.btiDH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opModRegWordD2(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD2(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regEDX);
                },
                /**
                 * opModRegWordD3(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD3(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiBL; this.backTrack.btiDH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opModRegWordD4(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD4(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordD5(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD5(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiBPLo; this.backTrack.btiDH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opModRegWordD6(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD6(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiSILo; this.backTrack.btiDH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opModRegWordD7(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD7(fn) {
                    this.regEDX = fn.call(this, this.regEDX, this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiDILo; this.backTrack.btiDH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opModRegWordD8(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD8(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiAL; this.backTrack.btiBH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opModRegWordD9(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordD9(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiCL; this.backTrack.btiBH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opModRegWordDA(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordDA(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiDL; this.backTrack.btiBH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opModRegWordDB(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordDB(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regEBX);
                },
                /**
                 * opModRegWordDC(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordDC(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordDD(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordDD(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiBPLo; this.backTrack.btiBH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opModRegWordDE(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordDE(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiSILo; this.backTrack.btiBH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opModRegWordDF(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordDF(fn) {
                    this.regEBX = fn.call(this, this.regEBX, this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiDILo; this.backTrack.btiBH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opModRegWordE0(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE0(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regEAX));
                },
                /**
                 * opModRegWordE1(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE1(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regECX));
                },
                /**
                 * opModRegWordE2(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE2(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regEDX));
                },
                /**
                 * opModRegWordE3(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE3(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regEBX));
                },
                /**
                 * opModRegWordE4(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE4(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.getSP()));
                },
                /**
                 * opModRegWordE5(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE5(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regEBP));
                },
                /**
                 * opModRegWordE6(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE6(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regESI));
                },
                /**
                 * opModRegWordE7(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE7(fn) {
                    this.setSP(fn.call(this, this.getSP(), this.regEDI));
                },
                /**
                 * opModRegWordE8(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE8(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiAL; this.backTrack.btiBPHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opModRegWordE9(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordE9(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiCL; this.backTrack.btiBPHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opModRegWordEA(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordEA(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiDL; this.backTrack.btiBPHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opModRegWordEB(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordEB(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiBL; this.backTrack.btiBPHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opModRegWordEC(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordEC(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordED(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordED(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regEBP);
                },
                /**
                 * opModRegWordEE(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordEE(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiSILo; this.backTrack.btiBPHi = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opModRegWordEF(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordEF(fn) {
                    this.regEBP = fn.call(this, this.regEBP, this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiDILo; this.backTrack.btiBPHi = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opModRegWordF0(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF0(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiAL; this.backTrack.btiSIHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opModRegWordF1(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF1(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiCL; this.backTrack.btiSIHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opModRegWordF2(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF2(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiDL; this.backTrack.btiSIHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opModRegWordF3(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF3(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiBL; this.backTrack.btiSIHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opModRegWordF4(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF4(fn) {
                    this.regESI = fn.call(this, this.regESI, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordF5(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF5(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiBPLo; this.backTrack.btiSIHi = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opModRegWordF6(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF6(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regESI);
                },
                /**
                 * opModRegWordF7(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF7(fn) {
                    this.regESI = fn.call(this, this.regESI, this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiDILo; this.backTrack.btiSIHi = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opModRegWordF8(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF8(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiAL; this.backTrack.btiDIHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opModRegWordF9(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordF9(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiCL; this.backTrack.btiDIHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opModRegWordFA(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordFA(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiDL; this.backTrack.btiDIHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opModRegWordFB(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordFB(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiBL; this.backTrack.btiDIHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opModRegWordFC(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordFC(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opModRegWordFD(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordFD(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiBPLo; this.backTrack.btiDIHi = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opModRegWordFE(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordFE(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiSILo; this.backTrack.btiDIHi = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opModRegWordFF(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModRegWordFF(fn) {
                    this.regEDI = fn.call(this, this.regEDI, this.regEDI);
                }
            ];
            
            X86ModW.aOpModMem = [
                /**
                 * opModMemWord00(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord00(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord01(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord01(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord02(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord02(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord03(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord03(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord04(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord04(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord05(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord05(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord06(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord06(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord07(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord07(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord08(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord08(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord09(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord09(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord0A(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord0A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord0B(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord0B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord0C(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord0C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord0D(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord0D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord0E(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord0E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord0F(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord0F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord10(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord10(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord11(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord11(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord12(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord12(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord13(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord13(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord14(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord14(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord15(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord15(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord16(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord16(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord17(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord17(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord18(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord18(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord19(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord19(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord1A(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord1A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord1B(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord1B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord1C(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord1C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord1D(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord1D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord1E(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord1E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord1F(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord1F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord20(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord20(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord21(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord21(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord22(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord22(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord23(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord23(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord24(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord24(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord25(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord25(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord26(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord26(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord27(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord27(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord28(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord28(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord29(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord29(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord2A(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord2A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord2B(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord2B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord2C(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord2C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord2D(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord2D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord2E(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord2E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord2F(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord2F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord30(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord30(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord31(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord31(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord32(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord32(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord33(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord33(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord34(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord34(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord35(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord35(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord36(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord36(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord37(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord37(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord38(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord38(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord39(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord39(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord3A(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord3A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModMemWord3B(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord3B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModMemWord3C(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord3C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord3D(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord3D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord3E(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord3E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModMemWord3F(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord3F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModMemWord40(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord40(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord41(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord41(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord42(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord42(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord43(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord43(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord44(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord44(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord45(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord45(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord46(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord46(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord47(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord47(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord48(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord48(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord49(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord49(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord4A(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord4A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord4B(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord4B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord4C(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord4C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord4D(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord4D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord4E(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord4E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord4F(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord4F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord50(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord50(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord51(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord51(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord52(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord52(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord53(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord53(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord54(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord54(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord55(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord55(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord56(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord56(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord57(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord57(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord58(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord58(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord59(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord59(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord5A(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord5A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord5B(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord5B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord5C(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord5C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord5D(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord5D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord5E(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord5E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord5F(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord5F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord60(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord60(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord61(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord61(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord62(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord62(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord63(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord63(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord64(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord64(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord65(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord65(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord66(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord66(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord67(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord67(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord68(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord68(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord69(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord69(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord6A(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord6A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord6B(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord6B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord6C(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord6C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord6D(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord6D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord6E(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord6E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord6F(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord6F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord70(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord70(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord71(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord71(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord72(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord72(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord73(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord73(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord74(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord74(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord75(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord75(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord76(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord76(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord77(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord77(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord78(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord78(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord79(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord79(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord7A(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord7A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord7B(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord7B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord7C(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord7C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord7D(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord7D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord7E(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord7E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord7F(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord7F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord80(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord80(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord81(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord81(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord82(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord82(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord83(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord83(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord84(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord84(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord85(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord85(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord86(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord86(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord87(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord87(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEAX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord88(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord88(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord89(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord89(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord8A(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord8A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord8B(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord8B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord8C(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord8C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord8D(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord8D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord8E(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord8E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord8F(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord8F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regECX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord90(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord90(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord91(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord91(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord92(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord92(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord93(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord93(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord94(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord94(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord95(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord95(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord96(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord96(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord97(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord97(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEDX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord98(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord98(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord99(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord99(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord9A(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord9A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWord9B(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord9B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWord9C(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord9C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord9D(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord9D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord9E(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord9E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWord9F(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWord9F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEBX);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordA0(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA0(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordA1(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA1(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordA2(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA2(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordA3(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA3(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordA4(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA4(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordA5(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA5(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordA6(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA6(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordA7(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA7(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.getSP());
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordA8(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA8(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordA9(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordA9(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordAA(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordAA(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordAB(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordAB(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordAC(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordAC(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordAD(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordAD(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordAE(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordAE(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordAF(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordAF(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEBP);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordB0(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB0(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordB1(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB1(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordB2(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB2(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordB3(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB3(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordB4(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB4(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordB5(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB5(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordB6(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB6(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordB7(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB7(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regESI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordB8(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB8(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordB9(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordB9(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordBA(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordBA(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModMemWordBB(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordBB(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModMemWordBC(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordBC(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordBD(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordBD(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordBE(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordBE(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModMemWordBF(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opModMemWordBF(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEDI);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                X86ModW.aOpModReg[0xC0],    X86ModW.aOpModReg[0xC8],    X86ModW.aOpModReg[0xD0],    X86ModW.aOpModReg[0xD8],
                X86ModW.aOpModReg[0xE0],    X86ModW.aOpModReg[0xE8],    X86ModW.aOpModReg[0xF0],    X86ModW.aOpModReg[0xF8],
                X86ModW.aOpModReg[0xC1],    X86ModW.aOpModReg[0xC9],    X86ModW.aOpModReg[0xD1],    X86ModW.aOpModReg[0xD9],
                X86ModW.aOpModReg[0xE1],    X86ModW.aOpModReg[0xE9],    X86ModW.aOpModReg[0xF1],    X86ModW.aOpModReg[0xF9],
                X86ModW.aOpModReg[0xC2],    X86ModW.aOpModReg[0xCA],    X86ModW.aOpModReg[0xD2],    X86ModW.aOpModReg[0xDA],
                X86ModW.aOpModReg[0xE2],    X86ModW.aOpModReg[0xEA],    X86ModW.aOpModReg[0xF2],    X86ModW.aOpModReg[0xFA],
                X86ModW.aOpModReg[0xC3],    X86ModW.aOpModReg[0xCB],    X86ModW.aOpModReg[0xD3],    X86ModW.aOpModReg[0xDB],
                X86ModW.aOpModReg[0xE3],    X86ModW.aOpModReg[0xEB],    X86ModW.aOpModReg[0xF3],    X86ModW.aOpModReg[0xFB],
                X86ModW.aOpModReg[0xC4],    X86ModW.aOpModReg[0xCC],    X86ModW.aOpModReg[0xD4],    X86ModW.aOpModReg[0xDC],
                X86ModW.aOpModReg[0xE4],    X86ModW.aOpModReg[0xEC],    X86ModW.aOpModReg[0xF4],    X86ModW.aOpModReg[0xFC],
                X86ModW.aOpModReg[0xC5],    X86ModW.aOpModReg[0xCD],    X86ModW.aOpModReg[0xD5],    X86ModW.aOpModReg[0xDD],
                X86ModW.aOpModReg[0xE5],    X86ModW.aOpModReg[0xED],    X86ModW.aOpModReg[0xF5],    X86ModW.aOpModReg[0xFD],
                X86ModW.aOpModReg[0xC6],    X86ModW.aOpModReg[0xCE],    X86ModW.aOpModReg[0xD6],    X86ModW.aOpModReg[0xDE],
                X86ModW.aOpModReg[0xE6],    X86ModW.aOpModReg[0xEE],    X86ModW.aOpModReg[0xF6],    X86ModW.aOpModReg[0xFE],
                X86ModW.aOpModReg[0xC7],    X86ModW.aOpModReg[0xCF],    X86ModW.aOpModReg[0xD7],    X86ModW.aOpModReg[0xDF],
                X86ModW.aOpModReg[0xE7],    X86ModW.aOpModReg[0xEF],    X86ModW.aOpModReg[0xF7],    X86ModW.aOpModReg[0xFF]
            ];
            
            X86ModW.aOpModGrp = [
                /**
                 * opModGrpWord00(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord00(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord01(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord01(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord02(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord02(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord03(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord03(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord04(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord04(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord05(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord05(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord06(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord06(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord07(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord07(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord08(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord08(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord09(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord09(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord0A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord0A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord0B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord0B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord0C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord0C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord0D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord0D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord0E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord0E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord0F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord0F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord10(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord10(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord11(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord11(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord12(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord12(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord13(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord13(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord14(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord14(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord15(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord15(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord16(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord16(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord17(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord17(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord18(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord18(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord19(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord19(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord1A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord1A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord1B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord1B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord1C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord1C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord1D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord1D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord1E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord1E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord1F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord1F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord20(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord20(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord21(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord21(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord22(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord22(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord23(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord23(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord24(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord24(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord25(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord25(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord26(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord26(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord27(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord27(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord28(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord28(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord29(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord29(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord2A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord2A(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord2B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord2B(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord2C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord2C(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord2D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord2D(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord2E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord2E(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord2F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord2F(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord30(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord30(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord31(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord31(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord32(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord32(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord33(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord33(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord34(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord34(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord35(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord35(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord36(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord36(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord37(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord37(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord38(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord38(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord39(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord39(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord3A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord3A(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opModGrpWord3B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord3B(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opModGrpWord3C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord3C(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord3D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord3D(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord3E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord3E(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opModGrpWord3F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord3F(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opModGrpWord40(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord40(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord41(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord41(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord42(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord42(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord43(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord43(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord44(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord44(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord45(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord45(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord46(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord46(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord47(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord47(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord48(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord48(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord49(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord49(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord4A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord4A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord4B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord4B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord4C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord4C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord4D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord4D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord4E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord4E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord4F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord4F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord50(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord50(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord51(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord51(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord52(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord52(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord53(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord53(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord54(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord54(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord55(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord55(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord56(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord56(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord57(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord57(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord58(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord58(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord59(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord59(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord5A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord5A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord5B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord5B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord5C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord5C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord5D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord5D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord5E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord5E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord5F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord5F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord60(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord60(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord61(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord61(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord62(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord62(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord63(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord63(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord64(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord64(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord65(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord65(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord66(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord66(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord67(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord67(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord68(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord68(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord69(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord69(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord6A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord6A(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord6B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord6B(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord6C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord6C(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord6D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord6D(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord6E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord6E(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord6F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord6F(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord70(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord70(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord71(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord71(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord72(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord72(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord73(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord73(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord74(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord74(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord75(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord75(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord76(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord76(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord77(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord77(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord78(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord78(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord79(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord79(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord7A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord7A(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord7B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord7B(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord7C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord7C(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord7D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord7D(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord7E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord7E(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord7F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord7F(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord80(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord80(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord81(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord81(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord82(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord82(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord83(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord83(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord84(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord84(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord85(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord85(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord86(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord86(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord87(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord87(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord88(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord88(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord89(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord89(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord8A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord8A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord8B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord8B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord8C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord8C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord8D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord8D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord8E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord8E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord8F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord8F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord90(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord90(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord91(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord91(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord92(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord92(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord93(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord93(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord94(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord94(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord95(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord95(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord96(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord96(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord97(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord97(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord98(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord98(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord99(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord99(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord9A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord9A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWord9B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord9B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWord9C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord9C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord9D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord9D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord9E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord9E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWord9F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWord9F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordA0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA0(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordA1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA1(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordA2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA2(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordA3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA3(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordA4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA4(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordA5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA5(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordA6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA6(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordA7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA7(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordA8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA8(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordA9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordA9(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordAA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordAA(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordAB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordAB(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordAC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordAC(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordAD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordAD(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordAE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordAE(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordAF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordAF(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordB0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB0(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordB1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB1(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordB2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB2(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordB3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB3(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordB4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB4(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordB5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB5(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordB6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB6(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordB7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB7(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordB8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB8(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordB9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordB9(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordBA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordBA(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opModGrpWordBB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordBB(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opModGrpWordBC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordBC(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordBD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordBD(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordBE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordBE(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordBF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordBF(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opModGrpWordC0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC0(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[0].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC1(afnGrp, fnSrc) {
                    this.regECX = afnGrp[0].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC2(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[0].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC3(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[0].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC4(afnGrp, fnSrc) {
                    this.setSP(afnGrp[0].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC5(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[0].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC6(afnGrp, fnSrc) {
                    this.regESI = afnGrp[0].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC7(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[0].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC8(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[1].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordC9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordC9(afnGrp, fnSrc) {
                    this.regECX = afnGrp[1].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordCA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordCA(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[1].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordCB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordCB(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[1].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordCC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordCC(afnGrp, fnSrc) {
                    this.setSP(afnGrp[1].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordCD(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[1].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordCE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordCE(afnGrp, fnSrc) {
                    this.regESI = afnGrp[1].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordCF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordCF(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[1].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD0(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[2].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD1(afnGrp, fnSrc) {
                    this.regECX = afnGrp[2].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD2(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[2].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD3(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[2].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD4(afnGrp, fnSrc) {
                    this.setSP(afnGrp[2].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD5(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[2].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD6(afnGrp, fnSrc) {
                    this.regESI = afnGrp[2].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD7(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[2].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD8(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[3].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordD9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordD9(afnGrp, fnSrc) {
                    this.regECX = afnGrp[3].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordDA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordDA(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[3].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordDB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordDB(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[3].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordDC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordDC(afnGrp, fnSrc) {
                    this.setSP(afnGrp[3].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordDD(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[3].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordDE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordDE(afnGrp, fnSrc) {
                    this.regESI = afnGrp[3].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordDF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordDF(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[3].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE0(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[4].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE1(afnGrp, fnSrc) {
                    this.regECX = afnGrp[4].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE2(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[4].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE3(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[4].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE4(afnGrp, fnSrc) {
                    this.setSP(afnGrp[4].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE5(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[4].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE6(afnGrp, fnSrc) {
                    this.regESI = afnGrp[4].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE7(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[4].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE8(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[5].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordE9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordE9(afnGrp, fnSrc) {
                    this.regECX = afnGrp[5].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordEA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordEA(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[5].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordEB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordEB(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[5].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordEC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordEC(afnGrp, fnSrc) {
                    this.setSP(afnGrp[5].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordED(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordED(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[5].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordEE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordEE(afnGrp, fnSrc) {
                    this.regESI = afnGrp[5].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordEF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordEF(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[5].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF0(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[6].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF1(afnGrp, fnSrc) {
                    this.regECX = afnGrp[6].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF2(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[6].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF3(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[6].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF4(afnGrp, fnSrc) {
                    this.setSP(afnGrp[6].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF5(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[6].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF6(afnGrp, fnSrc) {
                    this.regESI = afnGrp[6].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF7(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[6].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF8(afnGrp, fnSrc) {
                    this.regEAX = afnGrp[7].call(this, this.regEAX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordF9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordF9(afnGrp, fnSrc) {
                    this.regECX = afnGrp[7].call(this, this.regECX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordFA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordFA(afnGrp, fnSrc) {
                    this.regEDX = afnGrp[7].call(this, this.regEDX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordFB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordFB(afnGrp, fnSrc) {
                    this.regEBX = afnGrp[7].call(this, this.regEBX, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordFC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordFC(afnGrp, fnSrc) {
                    this.setSP(afnGrp[7].call(this, this.getSP(), fnSrc.call(this)));
                },
                /**
                 * opModGrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordFD(afnGrp, fnSrc) {
                    this.regEBP = afnGrp[7].call(this, this.regEBP, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordFE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordFE(afnGrp, fnSrc) {
                    this.regESI = afnGrp[7].call(this, this.regESI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opModGrpWordFF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opModGrpWordFF(afnGrp, fnSrc) {
                    this.regEDI = afnGrp[7].call(this, this.regEDI, fnSrc.call(this));
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModW;
            
          • x86modw16.js
            /**
             * @fileoverview Implements PCjs 8086 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModW16 = {};
            
            X86ModW16.aOpModReg = [
                /**
                 * opMod16RegWord00(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord00(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord01(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord01(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord02(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord02(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord03(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord03(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord04(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord04(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord05(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord05(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord06(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord06(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord07(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord07(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord08(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord08(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord09(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord09(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord0A(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord0A(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord0B(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord0B(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord0C(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord0C(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord0D(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord0D(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord0E(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord0E(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord0F(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord0F(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord10(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord10(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord11(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord11(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord12(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord12(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord13(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord13(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord14(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord14(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord15(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord15(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord16(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord16(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord17(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord17(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord18(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord18(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord19(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord19(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord1A(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord1A(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord1B(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord1B(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord1C(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord1C(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord1D(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord1D(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord1E(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord1E(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord1F(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord1F(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord20(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord20(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord21(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord21(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord22(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord22(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord23(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord23(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord24(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord24(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord25(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord25(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord26(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord26(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord27(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord27(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord28(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord28(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord29(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord29(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord2A(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord2A(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord2B(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord2B(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord2C(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord2C(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord2D(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord2D(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord2E(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord2E(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord2F(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord2F(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord30(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord30(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord31(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord31(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord32(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord32(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord33(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord33(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord34(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord34(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regESI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord35(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord35(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord36(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord36(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord37(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord37(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord38(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord38(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord39(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord39(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord3A(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord3A(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16RegWord3B(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord3B(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16RegWord3C(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord3C(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord3D(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord3D(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord3E(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord3E(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16RegWord3F(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord3F(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16RegWord40(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord40(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord41(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord41(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord42(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord42(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord43(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord43(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord44(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord44(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord45(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord45(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord46(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord46(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord47(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord47(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord48(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord48(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord49(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord49(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord4A(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord4A(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord4B(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord4B(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord4C(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord4C(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord4D(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord4D(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord4E(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord4E(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord4F(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord4F(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord50(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord50(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord51(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord51(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord52(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord52(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord53(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord53(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord54(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord54(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord55(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord55(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord56(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord56(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord57(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord57(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord58(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord58(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord59(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord59(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord5A(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord5A(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord5B(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord5B(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord5C(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord5C(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord5D(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord5D(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord5E(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord5E(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord5F(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord5F(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord60(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord60(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord61(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord61(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord62(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord62(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord63(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord63(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord64(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord64(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord65(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord65(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord66(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord66(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord67(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord67(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord68(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord68(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord69(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord69(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord6A(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord6A(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord6B(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord6B(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord6C(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord6C(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord6D(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord6D(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord6E(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord6E(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord6F(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord6F(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord70(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord70(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord71(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord71(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord72(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord72(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord73(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord73(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord74(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord74(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord75(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord75(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord76(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord76(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord77(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord77(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord78(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord78(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord79(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord79(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord7A(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord7A(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord7B(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord7B(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord7C(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord7C(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord7D(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord7D(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord7E(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord7E(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord7F(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord7F(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord80(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord80(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord81(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord81(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord82(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord82(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord83(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord83(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord84(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord84(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord85(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord85(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord86(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord86(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord87(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord87(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord88(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord88(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord89(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord89(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord8A(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord8A(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord8B(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord8B(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord8C(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord8C(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord8D(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord8D(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord8E(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord8E(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord8F(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord8F(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord90(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord90(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord91(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord91(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord92(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord92(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord93(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord93(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord94(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord94(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord95(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord95(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord96(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord96(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord97(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord97(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord98(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord98(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord99(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord99(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord9A(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord9A(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWord9B(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord9B(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWord9C(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord9C(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord9D(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord9D(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord9E(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord9E(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWord9F(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWord9F(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordA0(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA0(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordA1(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA1(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordA2(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA2(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordA3(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA3(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordA4(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA4(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordA5(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA5(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordA6(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA6(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordA7(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA7(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordA8(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA8(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordA9(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordA9(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordAA(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordAA(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordAB(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordAB(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordAC(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordAC(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordAD(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordAD(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordAE(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordAE(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordAF(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordAF(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordB0(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB0(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordB1(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB1(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordB2(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB2(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordB3(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB3(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordB4(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB4(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordB5(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB5(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordB6(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB6(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordB7(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB7(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordB8(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB8(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordB9(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordB9(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordBA(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordBA(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16RegWordBB(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordBB(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16RegWordBC(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordBC(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordBD(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordBD(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordBE(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordBE(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordBF(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordBF(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16RegWordC0(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC0(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEAX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                },
                /**
                 * opMod16RegWordC1(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC1(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regECX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiCL; this.backTrack.btiAH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod16RegWordC2(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC2(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEDX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiDL; this.backTrack.btiAH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod16RegWordC3(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC3(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEBX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiBL; this.backTrack.btiAH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod16RegWordC4(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC4(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getSP() & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordC5(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC5(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEBP & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiBPLo; this.backTrack.btiAH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod16RegWordC6(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC6(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regESI & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiSILo; this.backTrack.btiAH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod16RegWordC7(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC7(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEDI & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiDILo; this.backTrack.btiAH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod16RegWordC8(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC8(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEAX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiAL; this.backTrack.btiCH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod16RegWordC9(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordC9(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regECX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                },
                /**
                 * opMod16RegWordCA(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordCA(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEDX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiDL; this.backTrack.btiCH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod16RegWordCB(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordCB(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEBX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiBL; this.backTrack.btiCH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod16RegWordCC(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordCC(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getSP() & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordCD(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordCD(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEBP & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiBPLo; this.backTrack.btiCH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod16RegWordCE(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordCE(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regESI & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiSILo; this.backTrack.btiCH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod16RegWordCF(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordCF(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEDI & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiDILo; this.backTrack.btiCH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod16RegWordD0(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD0(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEAX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiAL; this.backTrack.btiDH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod16RegWordD1(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD1(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regECX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiCL; this.backTrack.btiDH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod16RegWordD2(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD2(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEDX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                },
                /**
                 * opMod16RegWordD3(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD3(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEBX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiBL; this.backTrack.btiDH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod16RegWordD4(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD4(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getSP() & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordD5(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD5(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEBP & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiBPLo; this.backTrack.btiDH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod16RegWordD6(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD6(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regESI & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiSILo; this.backTrack.btiDH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod16RegWordD7(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD7(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEDI & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiDILo; this.backTrack.btiDH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod16RegWordD8(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD8(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEAX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiAL; this.backTrack.btiBH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod16RegWordD9(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordD9(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regECX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiCL; this.backTrack.btiBH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod16RegWordDA(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordDA(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEDX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiDL; this.backTrack.btiBH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod16RegWordDB(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordDB(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEBX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                },
                /**
                 * opMod16RegWordDC(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordDC(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getSP() & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordDD(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordDD(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEBP & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiBPLo; this.backTrack.btiBH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod16RegWordDE(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordDE(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regESI & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiSILo; this.backTrack.btiBH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod16RegWordDF(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordDF(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEDI & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiDILo; this.backTrack.btiBH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod16RegWordE0(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE0(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEAX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE1(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE1(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regECX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE2(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE2(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEDX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE3(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE3(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEBX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE4(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE4(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getSP() & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE5(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE5(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEBP & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE6(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE6(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regESI & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE7(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE7(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEDI & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16RegWordE8(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE8(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEAX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiAL; this.backTrack.btiBPHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod16RegWordE9(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordE9(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regECX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiCL; this.backTrack.btiBPHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod16RegWordEA(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordEA(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEDX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiDL; this.backTrack.btiBPHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod16RegWordEB(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordEB(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEBX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiBL; this.backTrack.btiBPHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod16RegWordEC(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordEC(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getSP() & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordED(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordED(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEBP & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                },
                /**
                 * opMod16RegWordEE(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordEE(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regESI & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiSILo; this.backTrack.btiBPHi = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod16RegWordEF(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordEF(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEDI & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiDILo; this.backTrack.btiBPHi = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod16RegWordF0(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF0(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEAX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiAL; this.backTrack.btiSIHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod16RegWordF1(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF1(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regECX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiCL; this.backTrack.btiSIHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod16RegWordF2(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF2(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEDX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiDL; this.backTrack.btiSIHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod16RegWordF3(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF3(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEBX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiBL; this.backTrack.btiSIHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod16RegWordF4(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF4(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getSP() & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordF5(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF5(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEBP & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiBPLo; this.backTrack.btiSIHi = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod16RegWordF6(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF6(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regESI & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                },
                /**
                 * opMod16RegWordF7(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF7(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEDI & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiDILo; this.backTrack.btiSIHi = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod16RegWordF8(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF8(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEAX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiAL; this.backTrack.btiDIHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod16RegWordF9(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordF9(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regECX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiCL; this.backTrack.btiDIHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod16RegWordFA(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordFA(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEDX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiDL; this.backTrack.btiDIHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod16RegWordFB(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordFB(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEBX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiBL; this.backTrack.btiDIHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod16RegWordFC(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordFC(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getSP() & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod16RegWordFD(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordFD(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEBP & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiBPLo; this.backTrack.btiDIHi = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod16RegWordFE(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordFE(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regESI & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiSILo; this.backTrack.btiDIHi = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod16RegWordFF(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16RegWordFF(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEDI & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                }
            ];
            
            X86ModW16.aOpModMem = [
                /**
                 * opMod16MemWord00(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord00(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord01(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord01(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord02(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord02(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord03(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord03(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord04(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord04(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord05(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord05(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord06(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord06(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord07(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord07(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord08(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord08(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord09(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord09(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord0A(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord0A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord0B(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord0B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord0C(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord0C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord0D(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord0D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord0E(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord0E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord0F(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord0F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord10(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord10(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord11(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord11(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord12(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord12(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord13(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord13(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord14(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord14(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord15(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord15(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord16(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord16(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord17(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord17(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord18(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord18(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord19(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord19(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord1A(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord1A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord1B(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord1B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord1C(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord1C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord1D(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord1D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord1E(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord1E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord1F(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord1F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord20(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord20(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord21(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord21(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord22(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord22(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord23(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord23(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord24(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord24(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord25(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord25(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord26(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord26(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord27(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord27(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord28(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord28(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord29(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord29(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord2A(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord2A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord2B(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord2B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord2C(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord2C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord2D(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord2D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord2E(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord2E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord2F(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord2F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord30(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord30(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord31(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord31(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord32(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord32(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord33(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord33(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord34(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord34(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord35(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord35(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord36(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord36(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord37(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord37(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord38(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord38(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord39(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord39(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord3A(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord3A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16MemWord3B(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord3B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16MemWord3C(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord3C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord3D(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord3D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord3E(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord3E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16MemWord3F(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord3F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16MemWord40(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord40(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord41(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord41(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord42(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord42(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord43(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord43(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord44(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord44(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord45(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord45(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord46(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord46(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord47(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord47(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord48(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord48(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord49(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord49(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord4A(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord4A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord4B(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord4B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord4C(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord4C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord4D(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord4D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord4E(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord4E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord4F(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord4F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord50(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord50(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord51(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord51(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord52(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord52(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord53(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord53(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord54(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord54(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord55(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord55(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord56(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord56(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord57(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord57(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord58(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord58(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord59(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord59(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord5A(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord5A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord5B(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord5B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord5C(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord5C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord5D(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord5D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord5E(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord5E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord5F(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord5F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord60(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord60(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord61(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord61(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord62(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord62(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord63(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord63(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord64(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord64(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord65(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord65(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord66(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord66(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord67(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord67(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord68(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord68(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord69(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord69(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord6A(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord6A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord6B(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord6B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord6C(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord6C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord6D(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord6D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord6E(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord6E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord6F(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord6F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord70(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord70(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord71(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord71(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord72(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord72(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord73(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord73(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord74(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord74(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord75(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord75(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord76(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord76(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord77(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord77(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord78(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord78(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord79(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord79(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord7A(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord7A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord7B(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord7B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord7C(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord7C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord7D(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord7D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord7E(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord7E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord7F(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord7F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord80(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord80(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord81(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord81(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord82(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord82(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord83(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord83(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord84(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord84(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord85(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord85(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord86(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord86(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord87(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord87(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord88(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord88(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord89(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord89(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord8A(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord8A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord8B(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord8B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord8C(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord8C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord8D(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord8D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord8E(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord8E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord8F(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord8F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord90(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord90(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord91(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord91(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord92(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord92(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord93(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord93(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord94(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord94(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord95(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord95(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord96(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord96(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord97(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord97(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord98(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord98(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord99(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord99(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord9A(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord9A(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWord9B(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord9B(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWord9C(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord9C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord9D(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord9D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord9E(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord9E(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWord9F(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWord9F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordA0(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA0(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordA1(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA1(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordA2(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA2(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordA3(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA3(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordA4(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA4(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordA5(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA5(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordA6(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA6(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordA7(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA7(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordA8(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA8(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordA9(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordA9(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordAA(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordAA(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordAB(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordAB(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordAC(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordAC(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordAD(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordAD(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordAE(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordAE(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordAF(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordAF(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordB0(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB0(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordB1(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB1(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordB2(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB2(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordB3(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB3(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordB4(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB4(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordB5(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB5(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordB6(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB6(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordB7(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB7(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordB8(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB8(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordB9(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordB9(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordBA(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordBA(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16MemWordBB(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordBB(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16MemWordBC(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordBC(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordBD(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordBD(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordBE(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordBE(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16MemWordBF(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod16MemWordBF(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                X86ModW16.aOpModReg[0xC0],  X86ModW16.aOpModReg[0xC8],  X86ModW16.aOpModReg[0xD0],  X86ModW16.aOpModReg[0xD8],
                X86ModW16.aOpModReg[0xE0],  X86ModW16.aOpModReg[0xE8],  X86ModW16.aOpModReg[0xF0],  X86ModW16.aOpModReg[0xF8],
                X86ModW16.aOpModReg[0xC1],  X86ModW16.aOpModReg[0xC9],  X86ModW16.aOpModReg[0xD1],  X86ModW16.aOpModReg[0xD9],
                X86ModW16.aOpModReg[0xE1],  X86ModW16.aOpModReg[0xE9],  X86ModW16.aOpModReg[0xF1],  X86ModW16.aOpModReg[0xF9],
                X86ModW16.aOpModReg[0xC2],  X86ModW16.aOpModReg[0xCA],  X86ModW16.aOpModReg[0xD2],  X86ModW16.aOpModReg[0xDA],
                X86ModW16.aOpModReg[0xE2],  X86ModW16.aOpModReg[0xEA],  X86ModW16.aOpModReg[0xF2],  X86ModW16.aOpModReg[0xFA],
                X86ModW16.aOpModReg[0xC3],  X86ModW16.aOpModReg[0xCB],  X86ModW16.aOpModReg[0xD3],  X86ModW16.aOpModReg[0xDB],
                X86ModW16.aOpModReg[0xE3],  X86ModW16.aOpModReg[0xEB],  X86ModW16.aOpModReg[0xF3],  X86ModW16.aOpModReg[0xFB],
                X86ModW16.aOpModReg[0xC4],  X86ModW16.aOpModReg[0xCC],  X86ModW16.aOpModReg[0xD4],  X86ModW16.aOpModReg[0xDC],
                X86ModW16.aOpModReg[0xE4],  X86ModW16.aOpModReg[0xEC],  X86ModW16.aOpModReg[0xF4],  X86ModW16.aOpModReg[0xFC],
                X86ModW16.aOpModReg[0xC5],  X86ModW16.aOpModReg[0xCD],  X86ModW16.aOpModReg[0xD5],  X86ModW16.aOpModReg[0xDD],
                X86ModW16.aOpModReg[0xE5],  X86ModW16.aOpModReg[0xED],  X86ModW16.aOpModReg[0xF5],  X86ModW16.aOpModReg[0xFD],
                X86ModW16.aOpModReg[0xC6],  X86ModW16.aOpModReg[0xCE],  X86ModW16.aOpModReg[0xD6],  X86ModW16.aOpModReg[0xDE],
                X86ModW16.aOpModReg[0xE6],  X86ModW16.aOpModReg[0xEE],  X86ModW16.aOpModReg[0xF6],  X86ModW16.aOpModReg[0xFE],
                X86ModW16.aOpModReg[0xC7],  X86ModW16.aOpModReg[0xCF],  X86ModW16.aOpModReg[0xD7],  X86ModW16.aOpModReg[0xDF],
                X86ModW16.aOpModReg[0xE7],  X86ModW16.aOpModReg[0xEF],  X86ModW16.aOpModReg[0xF7],  X86ModW16.aOpModReg[0xFF]
            ];
            
            X86ModW16.aOpModGrp = [
                /**
                 * opMod16GrpWord00(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord00(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord01(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord01(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord02(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord02(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord03(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord03(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord04(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord04(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord05(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord05(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord06(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord06(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord07(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord07(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord08(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord08(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord09(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord09(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord0A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord0A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord0B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord0B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord0C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord0C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord0D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord0D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord0E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord0E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord0F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord0F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord10(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord10(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord11(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord11(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord12(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord12(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord13(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord13(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord14(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord14(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord15(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord15(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord16(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord16(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord17(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord17(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord18(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord18(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord19(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord19(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord1A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord1A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord1B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord1B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord1C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord1C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord1D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord1D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord1E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord1E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord1F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord1F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord20(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord20(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord21(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord21(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord22(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord22(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord23(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord23(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord24(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord24(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord25(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord25(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord26(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord26(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord27(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord27(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord28(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord28(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord29(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord29(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord2A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord2A(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord2B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord2B(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord2C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord2C(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord2D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord2D(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord2E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord2E(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord2F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord2F(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord30(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord30(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord31(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord31(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord32(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord32(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord33(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord33(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord34(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord34(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord35(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord35(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord36(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord36(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord37(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord37(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord38(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=000 (BX+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord38(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord39(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=001 (BX+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord39(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord3A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=010 (BP+SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord3A(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexExtra;
                },
                /**
                 * opMod16GrpWord3B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=011 (BP+DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord3B(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndex;
                },
                /**
                 * opMod16GrpWord3C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=100 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord3C(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord3D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=101 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord3D(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord3E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=110 (d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord3E(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod16GrpWord3F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=111 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord3F(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod16GrpWord40(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord40(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord41(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord41(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord42(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord42(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord43(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord43(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord44(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord44(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord45(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord45(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord46(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord46(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord47(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord47(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord48(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord48(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord49(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord49(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord4A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord4A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord4B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord4B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord4C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord4C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord4D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord4D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord4E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord4E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord4F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord4F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord50(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord50(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord51(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord51(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord52(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord52(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord53(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord53(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord54(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord54(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord55(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord55(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord56(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord56(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord57(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord57(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord58(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord58(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord59(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord59(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord5A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord5A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord5B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord5B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord5C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord5C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord5D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord5D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord5E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord5E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord5F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord5F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord60(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord60(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord61(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord61(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord62(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord62(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord63(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord63(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord64(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord64(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord65(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord65(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord66(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord66(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord67(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord67(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord68(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord68(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord69(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord69(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord6A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord6A(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord6B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord6B(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord6C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord6C(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord6D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord6D(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord6E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord6E(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord6F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord6F(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord70(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord70(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord71(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord71(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord72(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord72(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord73(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord73(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord74(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord74(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord75(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord75(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord76(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord76(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord77(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord77(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord78(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord78(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord79(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord79(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord7A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord7A(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord7B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord7B(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord7C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=100 (SI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord7C(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord7D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=101 (DI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord7D(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord7E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=110 (BP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord7E(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord7F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=111 (BX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord7F(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord80(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord80(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord81(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord81(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord82(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord82(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord83(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord83(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord84(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord84(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord85(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord85(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord86(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord86(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord87(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord87(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord88(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord88(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord89(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord89(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord8A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord8A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord8B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord8B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord8C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord8C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord8D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord8D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord8E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord8E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord8F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord8F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord90(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord90(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord91(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord91(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord92(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord92(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord93(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord93(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord94(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord94(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord95(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord95(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord96(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord96(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord97(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord97(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord98(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord98(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord99(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord99(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord9A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord9A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWord9B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord9B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWord9C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord9C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord9D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord9D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord9E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord9E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWord9F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWord9F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordA0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA0(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordA1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA1(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordA2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA2(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordA3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA3(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordA4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA4(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordA5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA5(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordA6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA6(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordA7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA7(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordA8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA8(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordA9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordA9(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordAA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordAA(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordAB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordAB(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordAC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordAC(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordAD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordAD(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordAE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordAE(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordAF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordAF(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordB0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB0(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordB1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB1(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordB2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB2(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordB3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB3(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordB4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB4(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordB5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB5(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordB6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB6(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordB7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB7(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordB8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=000 (BX+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB8(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordB9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=001 (BX+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordB9(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordBA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=010 (BP+SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordBA(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDispExtra;
                },
                /**
                 * opMod16GrpWordBB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=011 (BP+DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordBB(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseIndexDisp;
                },
                /**
                 * opMod16GrpWordBC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=100 (SI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordBC(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordBD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=101 (DI+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordBD(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordBE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=110 (BP+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordBE(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordBF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=111 (BX+d16)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordBF(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod16GrpWordC0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC0(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC1(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC2(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC3(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC4(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC5(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC6(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC7(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC8(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordC9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordC9(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordCA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordCA(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordCB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordCB(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordCC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordCC(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordCD(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordCE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordCE(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordCF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordCF(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD0(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD1(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD2(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD3(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD4(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD5(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD6(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD7(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD8(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordD9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordD9(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordDA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordDA(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordDB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordDB(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordDC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordDC(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordDD(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordDE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordDE(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordDF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordDF(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE0(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE1(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE2(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE3(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE4(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE5(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE6(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE7(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE8(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordE9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordE9(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordEA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordEA(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordEB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordEB(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordEC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordEC(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordED(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordEE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordEE(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordEF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordEF(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF0(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF1(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF2(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF3(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF4(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF5(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF6(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF7(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=000 (AX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF8(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordF9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=001 (CX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordF9(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordFA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=010 (DX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordFA(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordFB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=011 (BX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordFB(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordFC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=100 (SP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordFC(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod16GrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=101 (BP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordFD(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordFE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=110 (SI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordFE(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod16GrpWordFF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=111 (DI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod16GrpWordFF(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModW16;
            
          • x86modw32.js
            /**
             * @fileoverview Implements PCjs 8086 mode-byte decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2015-Jan-20
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            var X86ModW32 = {};
            
            X86ModW32.aOpModReg = [
                /**
                 * opMod32RegWord00(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord00(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord01(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord01(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regECX));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord02(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord02(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord03(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord03(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord04(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord04(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord05(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord05(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord06(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord06(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord07(fn): mod=00 (src:mem)  reg=000 (dst:AX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord07(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord08(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord08(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord09(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord09(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regECX));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord0A(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord0A(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord0B(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord0B(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord0C(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord0C(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord0D(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord0D(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord0E(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord0E(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord0F(fn): mod=00 (src:mem)  reg=001 (dst:CX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord0F(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord10(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord10(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord11(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord11(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regECX));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord12(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord12(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord13(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord13(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord14(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord14(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord15(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord15(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord16(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord16(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord17(fn): mod=00 (src:mem)  reg=010 (dst:DX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord17(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord18(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord18(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord19(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord19(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regECX));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord1A(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord1A(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord1B(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord1B(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord1C(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord1C(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord1D(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord1D(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord1E(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord1E(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord1F(fn): mod=00 (src:mem)  reg=011 (dst:BX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord1F(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord20(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord20(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord21(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord21(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord22(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord22(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord23(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord23(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord24(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord24(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord25(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord25(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord26(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord26(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord27(fn): mod=00 (src:mem)  reg=100 (dst:SP)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord27(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord28(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord28(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord29(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord29(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regECX));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord2A(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord2A(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord2B(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord2B(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord2C(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord2C(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord2D(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord2D(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord2E(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord2E(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord2F(fn): mod=00 (src:mem)  reg=101 (dst:BP)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord2F(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord30(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord30(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord31(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord31(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regECX));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord32(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord32(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord33(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord33(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord34(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord34(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord35(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord35(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord36(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord36(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regESI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord37(fn): mod=00 (src:mem)  reg=110 (dst:SI)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord37(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord38(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord38(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEAX));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord39(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord39(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regECX));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord3A(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord3A(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDX));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord3B(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord3B(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord3C(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord3C(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord3D(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord3D(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32RegWord3E(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord3E(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regESI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord3F(fn): mod=00 (src:mem)  reg=111 (dst:DI)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord3F(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDI));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32RegWord40(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord40(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord41(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord41(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord42(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord42(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord43(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord43(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord44(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord44(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord45(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord45(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord46(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord46(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord47(fn): mod=01 (src:mem+d8)  reg=000 (dst:AX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord47(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord48(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord48(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord49(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord49(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord4A(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord4A(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord4B(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord4B(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord4C(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord4C(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord4D(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord4D(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord4E(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord4E(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord4F(fn): mod=01 (src:mem+d8)  reg=001 (dst:CX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord4F(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord50(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord50(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord51(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord51(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord52(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord52(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord53(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord53(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord54(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord54(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord55(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord55(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord56(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord56(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord57(fn): mod=01 (src:mem+d8)  reg=010 (dst:DX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord57(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord58(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord58(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord59(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord59(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord5A(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord5A(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord5B(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord5B(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord5C(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord5C(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord5D(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord5D(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord5E(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord5E(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord5F(fn): mod=01 (src:mem+d8)  reg=011 (dst:BX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord5F(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord60(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord60(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord61(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord61(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord62(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord62(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord63(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord63(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord64(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord64(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord65(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord65(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord66(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord66(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord67(fn): mod=01 (src:mem+d8)  reg=100 (dst:SP)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord67(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord68(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord68(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord69(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord69(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord6A(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord6A(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord6B(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord6B(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord6C(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord6C(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord6D(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord6D(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord6E(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord6E(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord6F(fn): mod=01 (src:mem+d8)  reg=101 (dst:BP)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord6F(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord70(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord70(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord71(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord71(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord72(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord72(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord73(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord73(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord74(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord74(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord75(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord75(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord76(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord76(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord77(fn): mod=01 (src:mem+d8)  reg=110 (dst:SI)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord77(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord78(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord78(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord79(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord79(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord7A(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord7A(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord7B(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord7B(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord7C(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord7C(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord7D(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord7D(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord7E(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord7E(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord7F(fn): mod=01 (src:mem+d8)  reg=111 (dst:DI)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord7F(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord80(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord80(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord81(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord81(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord82(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord82(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord83(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord83(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord84(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord84(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord85(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord85(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord86(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord86(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord87(fn): mod=10 (src:mem+d16)  reg=000 (dst:AX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord87(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord88(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord88(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord89(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord89(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord8A(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord8A(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord8B(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord8B(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord8C(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord8C(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord8D(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord8D(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord8E(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord8E(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord8F(fn): mod=10 (src:mem+d16)  reg=001 (dst:CX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord8F(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord90(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord90(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord91(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord91(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord92(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord92(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord93(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord93(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord94(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord94(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord95(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord95(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord96(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord96(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord97(fn): mod=10 (src:mem+d16)  reg=010 (dst:DX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord97(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord98(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord98(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord99(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord99(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord9A(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord9A(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord9B(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord9B(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord9C(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord9C(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord9D(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord9D(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord9E(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord9E(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWord9F(fn): mod=10 (src:mem+d16)  reg=011 (dst:BX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWord9F(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA0(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA0(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA1(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA1(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA2(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA2(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA3(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA3(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA4(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA4(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA5(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA5(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA6(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA6(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA7(fn): mod=10 (src:mem+d16)  reg=100 (dst:SP)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA7(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA8(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA8(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordA9(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordA9(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordAA(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordAA(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordAB(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordAB(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordAC(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordAC(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordAD(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordAD(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordAE(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordAE(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordAF(fn): mod=10 (src:mem+d16)  reg=101 (dst:BP)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordAF(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB0(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB0(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB1(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB1(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB2(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB2(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB3(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB3(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB4(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB4(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB5(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB5(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB6(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB6(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB7(fn): mod=10 (src:mem+d16)  reg=110 (dst:SI)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB7(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB8(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB8(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEAX + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordB9(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordB9(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regECX + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordBA(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordBA(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDX + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordBB(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordBB(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEBX + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordBC(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordBC(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordBD(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordBD(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordBE(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordBE(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regESI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordBF(fn): mod=10 (src:mem+d16)  reg=111 (dst:DI)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordBF(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getEAWordData(this.regEDI + this.getIPAddr()));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32RegWordC0(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC0(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEAX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                },
                /**
                 * opMod32RegWordC1(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC1(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regECX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiCL; this.backTrack.btiAH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod32RegWordC2(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC2(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEDX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiDL; this.backTrack.btiAH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod32RegWordC3(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC3(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEBX & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiBL; this.backTrack.btiAH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod32RegWordC4(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC4(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.getSP() & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordC5(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC5(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEBP & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiBPLo; this.backTrack.btiAH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod32RegWordC6(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC6(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regESI & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiSILo; this.backTrack.btiAH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod32RegWordC7(fn): mod=11 (src:reg)  reg=000 (dst:AX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC7(fn) {
                    var w = fn.call(this, this.regEAX & this.dataMask, this.regEDI & this.dataMask);
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiDILo; this.backTrack.btiAH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod32RegWordC8(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC8(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEAX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiAL; this.backTrack.btiCH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod32RegWordC9(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordC9(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regECX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                },
                /**
                 * opMod32RegWordCA(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordCA(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEDX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiDL; this.backTrack.btiCH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod32RegWordCB(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordCB(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEBX & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiBL; this.backTrack.btiCH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod32RegWordCC(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordCC(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.getSP() & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordCD(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordCD(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEBP & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiBPLo; this.backTrack.btiCH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod32RegWordCE(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordCE(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regESI & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiSILo; this.backTrack.btiCH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod32RegWordCF(fn): mod=11 (src:reg)  reg=001 (dst:CX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordCF(fn) {
                    var w = fn.call(this, this.regECX & this.dataMask, this.regEDI & this.dataMask);
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiDILo; this.backTrack.btiCH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod32RegWordD0(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD0(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEAX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiAL; this.backTrack.btiDH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod32RegWordD1(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD1(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regECX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiCL; this.backTrack.btiDH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod32RegWordD2(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD2(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEDX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                },
                /**
                 * opMod32RegWordD3(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD3(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEBX & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiBL; this.backTrack.btiDH = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod32RegWordD4(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD4(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.getSP() & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordD5(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD5(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEBP & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiBPLo; this.backTrack.btiDH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod32RegWordD6(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD6(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regESI & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiSILo; this.backTrack.btiDH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod32RegWordD7(fn): mod=11 (src:reg)  reg=010 (dst:DX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD7(fn) {
                    var w = fn.call(this, this.regEDX & this.dataMask, this.regEDI & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiDILo; this.backTrack.btiDH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod32RegWordD8(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD8(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEAX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiAL; this.backTrack.btiBH = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod32RegWordD9(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordD9(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regECX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiCL; this.backTrack.btiBH = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod32RegWordDA(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordDA(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEDX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiDL; this.backTrack.btiBH = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod32RegWordDB(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordDB(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEBX & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                },
                /**
                 * opMod32RegWordDC(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordDC(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.getSP() & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordDD(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordDD(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEBP & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiBPLo; this.backTrack.btiBH = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod32RegWordDE(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordDE(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regESI & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiSILo; this.backTrack.btiBH = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod32RegWordDF(fn): mod=11 (src:reg)  reg=011 (dst:BX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordDF(fn) {
                    var w = fn.call(this, this.regEBX & this.dataMask, this.regEDI & this.dataMask);
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiDILo; this.backTrack.btiBH = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod32RegWordE0(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE0(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEAX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE1(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE1(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regECX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE2(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE2(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEDX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE3(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE3(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEBX & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE4(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE4(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.getSP() & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE5(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE5(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEBP & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE6(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE6(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regESI & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE7(fn): mod=11 (src:reg)  reg=100 (dst:SP)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE7(fn) {
                    var w = fn.call(this, this.getSP() & this.dataMask, this.regEDI & this.dataMask);
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32RegWordE8(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE8(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEAX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiAL; this.backTrack.btiBPHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod32RegWordE9(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordE9(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regECX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiCL; this.backTrack.btiBPHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod32RegWordEA(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordEA(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEDX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiDL; this.backTrack.btiBPHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod32RegWordEB(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordEB(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEBX & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiBL; this.backTrack.btiBPHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod32RegWordEC(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordEC(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.getSP() & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordED(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordED(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEBP & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                },
                /**
                 * opMod32RegWordEE(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordEE(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regESI & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiSILo; this.backTrack.btiBPHi = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod32RegWordEF(fn): mod=11 (src:reg)  reg=101 (dst:BP)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordEF(fn) {
                    var w = fn.call(this, this.regEBP & this.dataMask, this.regEDI & this.dataMask);
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiDILo; this.backTrack.btiBPHi = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod32RegWordF0(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF0(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEAX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiAL; this.backTrack.btiSIHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod32RegWordF1(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF1(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regECX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiCL; this.backTrack.btiSIHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod32RegWordF2(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF2(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEDX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiDL; this.backTrack.btiSIHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod32RegWordF3(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF3(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEBX & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiBL; this.backTrack.btiSIHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod32RegWordF4(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF4(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.getSP() & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordF5(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF5(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEBP & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiBPLo; this.backTrack.btiSIHi = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod32RegWordF6(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF6(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regESI & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                },
                /**
                 * opMod32RegWordF7(fn): mod=11 (src:reg)  reg=110 (dst:SI)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF7(fn) {
                    var w = fn.call(this, this.regESI & this.dataMask, this.regEDI & this.dataMask);
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiDILo; this.backTrack.btiSIHi = this.backTrack.btiDIHi;
                    }
                },
                /**
                 * opMod32RegWordF8(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF8(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEAX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiAL; this.backTrack.btiDIHi = this.backTrack.btiAH;
                    }
                },
                /**
                 * opMod32RegWordF9(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordF9(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regECX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiCL; this.backTrack.btiDIHi = this.backTrack.btiCH;
                    }
                },
                /**
                 * opMod32RegWordFA(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordFA(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEDX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiDL; this.backTrack.btiDIHi = this.backTrack.btiDH;
                    }
                },
                /**
                 * opMod32RegWordFB(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordFB(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEBX & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiBL; this.backTrack.btiDIHi = this.backTrack.btiBH;
                    }
                },
                /**
                 * opMod32RegWordFC(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordFC(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.getSP() & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI;
                    }
                },
                /**
                 * opMod32RegWordFD(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordFD(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEBP & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiBPLo; this.backTrack.btiDIHi = this.backTrack.btiBPHi;
                    }
                },
                /**
                 * opMod32RegWordFE(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordFE(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regESI & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiSILo; this.backTrack.btiDIHi = this.backTrack.btiSIHi;
                    }
                },
                /**
                 * opMod32RegWordFF(fn): mod=11 (src:reg)  reg=111 (dst:DI)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32RegWordFF(fn) {
                    var w = fn.call(this, this.regEDI & this.dataMask, this.regEDI & this.dataMask);
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                }
            ];
            
            X86ModW32.aOpModMem = [
                /**
                 * opMod32MemWord00(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord00(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord01(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord01(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord02(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord02(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord03(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord03(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord04(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord04(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord05(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord05(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord06(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord06(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord07(fn): mod=00 (dst:mem)  reg=000 (src:AX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord07(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord08(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord08(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord09(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord09(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord0A(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord0A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord0B(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord0B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord0C(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord0C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord0D(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord0D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord0E(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord0E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord0F(fn): mod=00 (dst:mem)  reg=001 (src:CX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord0F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord10(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord10(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord11(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord11(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord12(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord12(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord13(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord13(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord14(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord14(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord15(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord15(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord16(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord16(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord17(fn): mod=00 (dst:mem)  reg=010 (src:DX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord17(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord18(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord18(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord19(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord19(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord1A(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord1A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord1B(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord1B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord1C(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord1C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord1D(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord1D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord1E(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord1E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord1F(fn): mod=00 (dst:mem)  reg=011 (src:BX)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord1F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord20(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord20(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord21(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord21(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord22(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord22(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord23(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord23(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord24(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord24(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord25(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord25(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord26(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord26(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord27(fn): mod=00 (dst:mem)  reg=100 (src:SP)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord27(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord28(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord28(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord29(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord29(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord2A(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord2A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord2B(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord2B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord2C(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord2C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord2D(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord2D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord2E(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord2E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord2F(fn): mod=00 (dst:mem)  reg=101 (src:BP)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord2F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord30(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord30(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord31(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord31(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord32(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord32(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord33(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord33(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord34(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord34(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord35(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord35(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord36(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord36(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord37(fn): mod=00 (dst:mem)  reg=110 (src:SI)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord37(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord38(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord38(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord39(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord39(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord3A(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord3A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord3B(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord3B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord3C(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord3C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord3D(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord3D(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32MemWord3E(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord3E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord3F(fn): mod=00 (dst:mem)  reg=111 (src:DI)  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord3F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32MemWord40(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord40(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord41(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord41(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord42(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord42(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord43(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord43(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord44(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord44(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord45(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord45(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord46(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord46(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord47(fn): mod=01 (dst:mem+d8)  reg=000 (src:AX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord47(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord48(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord48(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord49(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord49(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord4A(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord4A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord4B(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord4B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord4C(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord4C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord4D(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord4D(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord4E(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord4E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord4F(fn): mod=01 (dst:mem+d8)  reg=001 (src:CX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord4F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord50(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord50(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord51(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord51(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord52(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord52(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord53(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord53(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord54(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord54(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord55(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord55(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord56(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord56(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord57(fn): mod=01 (dst:mem+d8)  reg=010 (src:DX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord57(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord58(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord58(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord59(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord59(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord5A(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord5A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord5B(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord5B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord5C(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord5C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord5D(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord5D(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord5E(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord5E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord5F(fn): mod=01 (dst:mem+d8)  reg=011 (src:BX)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord5F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord60(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord60(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord61(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord61(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord62(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord62(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord63(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord63(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord64(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord64(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord65(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord65(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord66(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord66(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord67(fn): mod=01 (dst:mem+d8)  reg=100 (src:SP)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord67(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord68(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord68(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord69(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord69(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord6A(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord6A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord6B(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord6B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord6C(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord6C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord6D(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord6D(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord6E(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord6E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord6F(fn): mod=01 (dst:mem+d8)  reg=101 (src:BP)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord6F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord70(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord70(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord71(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord71(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord72(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord72(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord73(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord73(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord74(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord74(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord75(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord75(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord76(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord76(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord77(fn): mod=01 (dst:mem+d8)  reg=110 (src:SI)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord77(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord78(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord78(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord79(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord79(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord7A(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord7A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord7B(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord7B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord7C(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord7C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord7D(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord7D(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord7E(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord7E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord7F(fn): mod=01 (dst:mem+d8)  reg=111 (src:DI)  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord7F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord80(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord80(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord81(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord81(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord82(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord82(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord83(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord83(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord84(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord84(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord85(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord85(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord86(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord86(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord87(fn): mod=10 (dst:mem+d16)  reg=000 (src:AX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord87(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEAX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiAL; this.backTrack.btiEAHi = this.backTrack.btiAH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord88(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord88(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord89(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord89(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord8A(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord8A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord8B(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord8B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord8C(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord8C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord8D(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord8D(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord8E(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord8E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord8F(fn): mod=10 (dst:mem+d16)  reg=001 (src:CX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord8F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regECX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiCL; this.backTrack.btiEAHi = this.backTrack.btiCH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord90(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord90(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord91(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord91(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord92(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord92(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord93(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord93(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord94(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord94(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord95(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord95(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord96(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord96(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord97(fn): mod=10 (dst:mem+d16)  reg=010 (src:DX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord97(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEDX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDL; this.backTrack.btiEAHi = this.backTrack.btiDH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord98(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord98(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord99(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord99(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord9A(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord9A(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord9B(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord9B(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord9C(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord9C(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord9D(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord9D(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord9E(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord9E(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWord9F(fn): mod=10 (dst:mem+d16)  reg=011 (src:BX)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWord9F(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEBX & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBL; this.backTrack.btiEAHi = this.backTrack.btiBH;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA0(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA0(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA1(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA1(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA2(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA2(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA3(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA3(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA4(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA4(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA5(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA5(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA6(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA6(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA7(fn): mod=10 (dst:mem+d16)  reg=100 (src:SP)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA7(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.getSP() & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA8(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA8(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordA9(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordA9(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordAA(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordAA(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordAB(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordAB(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordAC(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordAC(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordAD(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordAD(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordAE(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordAE(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordAF(fn): mod=10 (dst:mem+d16)  reg=101 (src:BP)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordAF(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEBP & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiBPLo; this.backTrack.btiEAHi = this.backTrack.btiBPHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB0(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB0(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB1(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB1(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB2(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB2(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB3(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB3(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB4(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB4(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB5(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB5(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB6(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB6(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB7(fn): mod=10 (dst:mem+d16)  reg=110 (src:SI)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB7(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regESI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiSILo; this.backTrack.btiEAHi = this.backTrack.btiSIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB8(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB8(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordB9(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordB9(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordBA(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordBA(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordBB(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordBB(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordBC(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordBC(fn) {
                    var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordBD(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordBD(fn) {
                    var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordBE(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordBE(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32MemWordBF(fn): mod=10 (dst:mem+d16)  reg=111 (src:DI)  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {function(number,number)} fn (dst,src)
                 */
                function opMod32MemWordBF(fn) {
                    var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), this.regEDI & this.dataMask);
                    if (BACKTRACK) {
                        this.backTrack.btiEALo = this.backTrack.btiDILo; this.backTrack.btiEAHi = this.backTrack.btiDIHi;
                    }
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                X86ModW32.aOpModReg[0xC0],    X86ModW32.aOpModReg[0xC8],    X86ModW32.aOpModReg[0xD0],    X86ModW32.aOpModReg[0xD8],
                X86ModW32.aOpModReg[0xE0],    X86ModW32.aOpModReg[0xE8],    X86ModW32.aOpModReg[0xF0],    X86ModW32.aOpModReg[0xF8],
                X86ModW32.aOpModReg[0xC1],    X86ModW32.aOpModReg[0xC9],    X86ModW32.aOpModReg[0xD1],    X86ModW32.aOpModReg[0xD9],
                X86ModW32.aOpModReg[0xE1],    X86ModW32.aOpModReg[0xE9],    X86ModW32.aOpModReg[0xF1],    X86ModW32.aOpModReg[0xF9],
                X86ModW32.aOpModReg[0xC2],    X86ModW32.aOpModReg[0xCA],    X86ModW32.aOpModReg[0xD2],    X86ModW32.aOpModReg[0xDA],
                X86ModW32.aOpModReg[0xE2],    X86ModW32.aOpModReg[0xEA],    X86ModW32.aOpModReg[0xF2],    X86ModW32.aOpModReg[0xFA],
                X86ModW32.aOpModReg[0xC3],    X86ModW32.aOpModReg[0xCB],    X86ModW32.aOpModReg[0xD3],    X86ModW32.aOpModReg[0xDB],
                X86ModW32.aOpModReg[0xE3],    X86ModW32.aOpModReg[0xEB],    X86ModW32.aOpModReg[0xF3],    X86ModW32.aOpModReg[0xFB],
                X86ModW32.aOpModReg[0xC4],    X86ModW32.aOpModReg[0xCC],    X86ModW32.aOpModReg[0xD4],    X86ModW32.aOpModReg[0xDC],
                X86ModW32.aOpModReg[0xE4],    X86ModW32.aOpModReg[0xEC],    X86ModW32.aOpModReg[0xF4],    X86ModW32.aOpModReg[0xFC],
                X86ModW32.aOpModReg[0xC5],    X86ModW32.aOpModReg[0xCD],    X86ModW32.aOpModReg[0xD5],    X86ModW32.aOpModReg[0xDD],
                X86ModW32.aOpModReg[0xE5],    X86ModW32.aOpModReg[0xED],    X86ModW32.aOpModReg[0xF5],    X86ModW32.aOpModReg[0xFD],
                X86ModW32.aOpModReg[0xC6],    X86ModW32.aOpModReg[0xCE],    X86ModW32.aOpModReg[0xD6],    X86ModW32.aOpModReg[0xDE],
                X86ModW32.aOpModReg[0xE6],    X86ModW32.aOpModReg[0xEE],    X86ModW32.aOpModReg[0xF6],    X86ModW32.aOpModReg[0xFE],
                X86ModW32.aOpModReg[0xC7],    X86ModW32.aOpModReg[0xCF],    X86ModW32.aOpModReg[0xD7],    X86ModW32.aOpModReg[0xDF],
                X86ModW32.aOpModReg[0xE7],    X86ModW32.aOpModReg[0xEF],    X86ModW32.aOpModReg[0xF7],    X86ModW32.aOpModReg[0xFF]
            ];
            
            X86ModW32.aOpModGrp = [
                /**
                 * opMod32GrpWord00(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord00(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord01(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord01(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord02(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord02(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord03(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord03(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord04(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord04(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord05(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord05(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord06(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord06(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord07(afnGrp, fnSrc): mod=00 (dst:mem)  reg=000 (afnGrp[0])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord07(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord08(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord08(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord09(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord09(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord0A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord0A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord0B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord0B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord0C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord0C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord0D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord0D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord0E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord0E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord0F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=001 (afnGrp[1])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord0F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord10(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord10(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord11(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord11(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord12(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord12(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord13(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord13(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord14(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord14(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord15(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord15(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord16(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord16(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord17(afnGrp, fnSrc): mod=00 (dst:mem)  reg=010 (afnGrp[2])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord17(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord18(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord18(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord19(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord19(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord1A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord1A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord1B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord1B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord1C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord1C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord1D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord1D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord1E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord1E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord1F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=011 (afnGrp[3])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord1F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord20(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord20(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord21(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord21(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord22(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord22(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord23(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord23(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord24(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord24(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord25(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord25(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord26(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord26(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord27(afnGrp, fnSrc): mod=00 (dst:mem)  reg=100 (afnGrp[4])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord27(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord28(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord28(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord29(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord29(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord2A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord2A(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord2B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord2B(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord2C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord2C(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord2D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord2D(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord2E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord2E(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord2F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=101 (afnGrp[5])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord2F(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord30(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord30(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord31(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord31(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord32(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord32(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord33(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord33(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord34(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord34(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord35(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord35(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord36(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord36(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord37(afnGrp, fnSrc): mod=00 (dst:mem)  reg=110 (afnGrp[6])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord37(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord38(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord38(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEAX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord39(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord39(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regECX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord3A(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord3A(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord3B(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord3B(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord3C(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=100 (sib)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord3C(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.getSIBAddr(0)), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord3D(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=101 (d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord3D(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesDisp;
                },
                /**
                 * opMod32GrpWord3E(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord3E(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord3F(afnGrp, fnSrc): mod=00 (dst:mem)  reg=111 (afnGrp[7])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord3F(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBase;
                },
                /**
                 * opMod32GrpWord40(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord40(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord41(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord41(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord42(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord42(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord43(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord43(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord44(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord44(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord45(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord45(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord46(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord46(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord47(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=000 (afnGrp[0])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord47(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord48(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord48(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord49(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord49(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord4A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord4A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord4B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord4B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord4C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord4C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord4D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord4D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord4E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord4E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord4F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=001 (afnGrp[1])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord4F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord50(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord50(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord51(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord51(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord52(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord52(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord53(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord53(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord54(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord54(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord55(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord55(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord56(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord56(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord57(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=010 (afnGrp[2])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord57(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord58(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord58(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord59(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord59(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord5A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord5A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord5B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord5B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord5C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord5C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord5D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord5D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord5E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord5E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord5F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=011 (afnGrp[3])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord5F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord60(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord60(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord61(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord61(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord62(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord62(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord63(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord63(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord64(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord64(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord65(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord65(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord66(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord66(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord67(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=100 (afnGrp[4])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord67(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord68(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord68(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord69(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord69(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord6A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord6A(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord6B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord6B(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord6C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord6C(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord6D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord6D(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord6E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord6E(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord6F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=101 (afnGrp[5])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord6F(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord70(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord70(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord71(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord71(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord72(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord72(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord73(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord73(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord74(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord74(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord75(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord75(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord76(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord76(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord77(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=110 (afnGrp[6])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord77(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord78(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=000 (EAX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord78(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord79(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=001 (ECX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord79(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regECX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord7A(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=010 (EDX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord7A(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord7B(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=011 (EBX+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord7B(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord7C(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=100 (sib+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord7C(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord7D(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=101 (EBP+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord7D(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord7E(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=110 (ESI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord7E(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord7F(afnGrp, fnSrc): mod=01 (dst:mem+d8)  reg=111 (afnGrp[7])  r/m=111 (EDI+d8)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord7F(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord80(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord80(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord81(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord81(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord82(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord82(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord83(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord83(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord84(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord84(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord85(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord85(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord86(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord86(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord87(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=000 (afnGrp[0])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord87(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord88(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord88(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord89(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord89(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord8A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord8A(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord8B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord8B(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord8C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord8C(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord8D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord8D(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord8E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord8E(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord8F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=001 (afnGrp[1])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord8F(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord90(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord90(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord91(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord91(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord92(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord92(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord93(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord93(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord94(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord94(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord95(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord95(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord96(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord96(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord97(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=010 (afnGrp[2])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord97(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord98(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord98(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord99(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord99(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord9A(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord9A(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord9B(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord9B(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord9C(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord9C(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord9D(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord9D(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord9E(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord9E(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWord9F(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=011 (afnGrp[3])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWord9F(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA0(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA1(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA2(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA3(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA4(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA5(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA6(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=100 (afnGrp[4])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA7(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA8(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordA9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordA9(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordAA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordAA(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordAB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordAB(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordAC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordAC(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordAD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordAD(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordAE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordAE(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordAF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=101 (afnGrp[5])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordAF(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB0(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB0(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB1(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB1(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB2(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB2(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB3(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB3(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB4(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB4(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB5(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB5(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB6(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB6(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB7(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=110 (afnGrp[6])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB7(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB8(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=000 (EAX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB8(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEAX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordB9(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=001 (ECX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordB9(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regECX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordBA(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=010 (EDX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordBA(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordBB(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=011 (EBX+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordBB(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEBX + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordBC(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=100 (sib+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordBC(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordBD(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=101 (EBP+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordBD(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordStack(this.regEBP + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordBE(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=110 (ESI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordBE(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regESI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordBF(afnGrp, fnSrc): mod=10 (dst:mem+d16)  reg=111 (afnGrp[7])  r/m=111 (EDI+d32)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordBF(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.modEAWordData(this.regEDI + this.getIPAddr()), fnSrc.call(this));
                    this.setEAWord(w);
                    this.nStepCycles -= this.cycleCounts.nEACyclesBaseDisp;
                },
                /**
                 * opMod32GrpWordC0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC0(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC1(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC2(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC3(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC4(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC5(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC6(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=000 (afnGrp[0])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC7(afnGrp, fnSrc) {
                    var w = afnGrp[0].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC8(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordC9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordC9(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordCA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordCA(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordCB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordCB(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordCC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordCC(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordCD(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordCE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordCE(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordCF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=001 (afnGrp[1])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordCF(afnGrp, fnSrc) {
                    var w = afnGrp[1].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD0(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD1(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD2(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD3(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD4(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD5(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD6(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=010 (afnGrp[2])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD7(afnGrp, fnSrc) {
                    var w = afnGrp[2].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD8(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordD9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordD9(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordDA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordDA(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordDB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordDB(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordDC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordDC(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordDD(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordDE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordDE(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordDF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=011 (afnGrp[3])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordDF(afnGrp, fnSrc) {
                    var w = afnGrp[3].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE0(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE1(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE2(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE3(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE4(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE5(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE6(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=100 (afnGrp[4])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE7(afnGrp, fnSrc) {
                    var w = afnGrp[4].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE8(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordE9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordE9(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordEA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordEA(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordEB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordEB(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordEC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordEC(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordED(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordEE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordEE(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordEF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=101 (afnGrp[5])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordEF(afnGrp, fnSrc) {
                    var w = afnGrp[5].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF0(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF0(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF1(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF1(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF2(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF2(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF3(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF3(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF4(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF4(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF5(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF6(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF6(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF7(afnGrp, fnSrc): mod=11 (dst:reg)  reg=110 (afnGrp[6])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF7(afnGrp, fnSrc) {
                    var w = afnGrp[6].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF8(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=000 (EAX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF8(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEAX & this.dataMask, fnSrc.call(this));
                    this.regEAX = (this.regEAX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiEALo; this.backTrack.btiAH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordF9(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=001 (ECX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordF9(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regECX & this.dataMask, fnSrc.call(this));
                    this.regECX = (this.regECX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiCL = this.backTrack.btiEALo; this.backTrack.btiCH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordFA(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=010 (EDX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordFA(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEDX & this.dataMask, fnSrc.call(this));
                    this.regEDX = (this.regEDX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDL = this.backTrack.btiEALo; this.backTrack.btiDH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordFB(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=011 (EBX)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordFB(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEBX & this.dataMask, fnSrc.call(this));
                    this.regEBX = (this.regEBX & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBL = this.backTrack.btiEALo; this.backTrack.btiBH = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordFC(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=100 (ESP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordFC(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
                    this.setSP((this.getSP() & ~this.dataMask) | w);
                },
                /**
                 * opMod32GrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=101 (EBP)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordFD(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEBP & this.dataMask, fnSrc.call(this));
                    this.regEBP = (this.regEBP & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiBPLo = this.backTrack.btiEALo; this.backTrack.btiBPHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordFE(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=110 (ESI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordFE(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regESI & this.dataMask, fnSrc.call(this));
                    this.regESI = (this.regESI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiSILo = this.backTrack.btiEALo; this.backTrack.btiSIHi = this.backTrack.btiEAHi;
                    }
                },
                /**
                 * opMod32GrpWordFF(afnGrp, fnSrc): mod=11 (dst:reg)  reg=111 (afnGrp[7])  r/m=111 (EDI)
                 *
                 * @this {X86CPU}
                 * @param {Array.<function(number,number)>} afnGrp
                 * @param {function()} fnSrc
                 */
                function opMod32GrpWordFF(afnGrp, fnSrc) {
                    var w = afnGrp[7].call(this, this.regEDI & this.dataMask, fnSrc.call(this));
                    this.regEDI = (this.regEDI & ~this.dataMask) | w;
                    if (BACKTRACK) {
                        this.backTrack.btiDILo = this.backTrack.btiEALo; this.backTrack.btiDIHi = this.backTrack.btiEAHi;
                    }
                }
            ];
            
            if (typeof module !== 'undefined') module.exports = X86ModW32;
            
          • x86op0f.js
            /**
             * @fileoverview Implements PCjs 0x0F two-byte opcodes
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var X86         = require("./x86");
            }
            
            /**
             * op=0x0F,0x00 (GRP6 mem/reg)
             *
             * @this {X86CPU}
             */
            X86.opGRP6 = function GRP6()
            {
                var bModRM = this.getIPByte();
                if ((bModRM & 0x38) < 0x10) {   // possible reg values: 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38
                    this.opFlags |= X86.OPFLAG.NOREAD;
                }
                this.aOpModGrpWord[bModRM].call(this, this.aOpGrp6, X86.fnSrcNone);
            };
            
            /**
             * op=0x0F,0x01 (GRP7 mem/reg)
             *
             * @this {X86CPU}
             */
            X86.opGRP7 = function GRP7()
            {
                var bModRM = this.getIPByte();
                if (!(bModRM & 0x10)) {
                    this.opFlags |= X86.OPFLAG.NOREAD;
                }
                this.aOpModGrpWord[bModRM].call(this, X86.aOpGrp7, X86.fnSrcNone);
            };
            
            /**
             * opLAR()
             *
             * op=0x0F,0x02 (LAR reg,mem/reg)
             *
             * @this {X86CPU}
             */
            X86.opLAR = function LAR()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLAR);
            };
            
            /**
             * opLSL()
             *
             * op=0x0F,0x03 (LSL reg,mem/reg)
             *
             * @this {X86CPU}
             */
            X86.opLSL = function LSL()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLSL);
            };
            
            /**
             * opLOADALL()
             *
             * op=0x0F,0x05 (LOADALL)
             *
             * From the "Undocumented iAPX 286 Test Instruction" document at http://www.pcjs.org/pubs/pc/reference/intel/80286/loadall/:
             *
             *  Physical Address (Hex)        Associated CPU Register
             *          800-805                        None
             *          806-807                        MSW
             *          808-815                        None
             *          816-817                        TR
             *          818-819                        Flag word
             *          81A-81B                        IP
             *          81C-81D                        LDT
             *          81E-81F                        DS
             *          820-821                        SS
             *          822-823                        CS
             *          824-825                        ES
             *          826-827                        DI
             *          828-829                        SI
             *          82A-82B                        BP
             *          82C-82D                        SP
             *          82E-82F                        BX
             *          830-831                        DX
             *          832-833                        CX
             *          834-835                        AX
             *          836-83B                        ES descriptor cache
             *          83C-841                        CS descriptor cache
             *          842-847                        SS descriptor cache
             *          848-84D                        DS descriptor cache
             *          84E-853                        GDTR
             *          854-859                        LDT descriptor cache
             *          85A-85F                        IDTR
             *          860-865                        TSS descriptor cache
             *
             * Oddly, the above document gives two contradictory cycle counts for LOADALL: 190 and 195.  I'll go with 195, for
             * no particular reason.
             *
             * @this {X86CPU}
             */
            X86.opLOADALL = function LOADALL()
            {
                if (this.segCS.cpl) {
                    /*
                     * You're not allowed to use LOADALL if the current privilege level is something other than zero.
                     */
                    X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0, true);
                    return;
                }
                this.setMSW(this.getShort(0x806));
                this.regEDI = this.getShort(0x826);
                this.regESI = this.getShort(0x828);
                this.regEBP = this.getShort(0x82A);
                this.regEBX = this.getShort(0x82E);
                this.regEDX = this.getShort(0x830);
                this.regECX = this.getShort(0x832);
                this.regEAX = this.getShort(0x834);
                this.segES.loadDesc6(0x836, this.getShort(0x824));
                this.segCS.loadDesc6(0x83C, this.getShort(0x822));
                this.segSS.loadDesc6(0x842, this.getShort(0x820));
                this.segDS.loadDesc6(0x848, this.getShort(0x81E));
                this.setPS(this.getShort(0x818));
                /*
                 * It's important to call setIP() and setSP() *after* the segCS and segSS loads, so that the CPU's
                 * linear IP and SP registers (regLIP and regLSP) will be updated properly.  Ordinarily that would be
                 * taken care of by simply using the CPU's setCS() and setSS() functions, but those functions call the
                 * default descriptor load() functions, and obviously here we must use loadDesc6() instead.
                 */
                this.setIP(this.getShort(0x81A));
                this.setSP(this.getShort(0x82C));
                /*
                 * The bytes at 0x851 and 0x85D "should be zeroes", as per the "Undocumented iAPX 286 Test Instruction"
                 * document, but the LOADALL issued by RAMDRIVE in PC-DOS 7.0 contains 0xFF in both of those bytes, resulting
                 * in very large addrGDT and addrIDT values.  Obviously, we can't have that, so we load only the low byte
                 * of the second word for both of those registers.
                 */
                this.addrGDT = this.getShort(0x84E) | (this.getByte(0x850) << 16);
                this.addrGDTLimit = this.addrGDT + this.getShort(0x852);
                this.segLDT.loadDesc6(0x854, this.getShort(0x81C));
                this.addrIDT = this.getShort(0x85A) | (this.getByte(0x85C) << 16);
                this.addrIDTLimit = this.addrIDT + this.getShort(0x85E);
                this.segTSS.loadDesc6(0x860, this.getShort(0x816));
                this.nStepCycles -= 195;
                /*
                 * TODO: LOADALL operation still needs to be verified in protected mode....
                 */
                if (DEBUG && DEBUGGER && (this.regCR0 & X86.CR0.MSW.PE)) this.stopCPU();
            };
            
            /**
             * opCLTS()
             *
             * op=0x0F,0x06 (CLTS)
             *
             * @this {X86CPU}
             */
            X86.opCLTS = function CLTS()
            {
                if (this.segCS.cpl) {
                    X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0);
                    return;
                }
                this.regCR0 &= ~X86.CR0.MSW.TS;
                this.nStepCycles -= 2;
            };
            
            /**
             * opMOVrc()
             *
             * op=0x0F,0x20 (MOV reg,creg)
             *
             * NOTE: Since the ModRM decoders deal only with general-purpose registers, we must move
             * the appropriate control register into a special variable (regXX), which our helper function
             * (fnMOVxx) will use to replace the decoder's src operand.
             *
             * From PCMag_Prog_TechRef, p.476: "The 80386 executes the MOV to/from control registers (CRn)
             * regardless of the setting of the MOD field.  The MOD field should be set to 0b11, but an early
             * 80386 documentation error indicated that the MOD field value was a don't care.  Early versions
             * of the 80486 detect a MOD != 0b11 as an illegal opcode.  This was changed in later versions to
             * ignore the value of MOD.  Assemblers that generate MOD != 0b11 for these instructions will fail
             * on some 80486s."
             *
             * @this {X86CPU}
             */
            X86.opMOVrc = function MOVrc()
            {
                /*
                 * We address the MOD field problem (see above) by coercing it to 0b11 (0xc0), regardless.
                 *
                 * TODO: One issue not clearly addressed is if, when an assembler/compiler generated a bogus MOD value,
                 * it also generated the additional displacement bytes, if any, that would typically accompany such a MOD
                 * value.  I assume not.
                 */
                var bModRM = this.getIPByte() | 0xc0;
            
                if (this.segCS.cpl) {
                    /*
                     * You're not allowed to read control registers if the current privilege level is not zero
                     * (TODO: I'm issuing this AFTER fetching the ModRM byte, but I assume it makes no difference).
                     */
                    X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0);
                    return;
                }
            
                var reg = (bModRM & 0x38) >> 3;
                switch(reg) {
                case 0x0:
                    this.regXX = this.regCR0;
                    break;
                case 0x1:
                    this.regXX = this.regCR1;
                    break;
                case 0x2:
                    this.regXX = this.regCR2;
                    break;
                case 0x3:
                    this.regXX = this.regCR3;
                    break;
                default:
                    X86.opUndefined.call(this);
                    return;
                }
                /*
                 * Like other MOV operations, the destination does not need to be read, just written;
                 * however, it's moot, because we've already restricted this opcode to registers only.
                 *
                 *      this.opFlags |= X86.OPFLAG.NOREAD;
                 *
                 * Another issue, however, is that this instruction always assumes a 32-bit OPERAND size,
                 * so we must call setDataSize(4) first.
                 */
                this.setDataSize(4);
                this.aOpModRegWord[bModRM].call(this, X86.fnMOVxx);
            };
            
            /**
             * opMOVcr()
             *
             * op=0x0F,0x22 (MOV creg,reg)
             *
             * NOTE: Since the ModRM decoders deal only with general-purpose registers, we have to make a note
             * of which general-purpose register will be overwritten, so that we can restore it after moving the
             * modified value to the correct control register.
             *
             * From PCMag_Prog_TechRef, p.476: "The 80386 executes the MOV to/from control registers (CRn)
             * regardless of the setting of the MOD field.  The MOD field should be set to 0b11, but an early
             * 80386 documentation error indicated that the MOD field value was a don't care.  Early versions
             * of the 80486 detect a MOD != 0b11 as an illegal opcode.  This was changed in later versions to
             * ignore the value of MOD.  Assemblers that generate MOD != 0b11 for these instructions will fail
             * on some 80486s."
             *
             * @this {X86CPU}
             */
            X86.opMOVcr = function MOVcr()
            {
                var temp;
                /*
                 * We address the MOD field problem (see above) by coercing it to 0b11 (0xc0), regardless.
                 *
                 * TODO: One issue not clearly addressed is if, when an assembler/compiler generated a bogus MOD value,
                 * it also generated the additional displacement bytes, if any, that would typically accompany such a MOD
                 * value.  I assume not.
                 */
                var bModRM = this.getIPByte() | 0xc0;
            
                if (this.segCS.cpl) {
                    /*
                     * You're not allowed to write control registers if the current privilege level is not zero
                     * (TODO: I'm issuing this AFTER fetching the ModRM byte, but I assume it makes no difference).
                     */
                    X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0);
                    return;
                }
            
                var reg = (bModRM & 0x38) >> 3;
                switch(reg) {
                case 0x0:
                    temp = this.regEAX;
                    break;
                case 0x1:
                    temp = this.regECX; // TODO: Is setting CR1 actually allowed on an 80386?
                    break;
                case 0x2:
                    temp = this.regEDX;
                    break;
                case 0x3:
                    temp = this.regEBX;
                    break;
                default:
                    X86.opInvalid.call(this);
                    return;
                }
            
                /*
                 * This instruction always assumes a 32-bit OPERAND size, so we must call setDataSize(4) first.
                 */
                this.setDataSize(4);
                this.aOpModRegWord[bModRM].call(this, X86.fnMOV);
            
                switch(reg) {
                case 0x0:
                    reg = this.regEAX;
                    this.regEAX = temp;
                    X86.fnLCR0.call(this, reg);
                    break;
                case 0x1:
                    this.regCR1 = this.regECX;
                    this.regECX = temp;
                    break;
                case 0x2:
                    this.regCR2 = this.regEDX;
                    this.regEDX = temp;
                    break;
                case 0x3:
                    reg = this.regEBX;
                    this.regEBX = temp;
                    X86.fnLCR3.call(this, reg);
                    break;
                }
            };
            
            /*
             * NOTE: The following 16 new conditional jumps actually rely on the OPERAND override setting
             * for determining whether a signed 16-bit or 32-bit displacement will be fetched, even though
             * the ADDRESS override might seem more intuitive.  Think of them as instructions that are loading
             * a new operand into IP/EIP.
             *
             * Also, in 16-bit code, even though a signed rel16 value would seem to imply a range of -32768
             * to +32767, any location within a 64Kb code segment outside that range can be reached by choosing
             * a displacement in the opposite direction, causing the 16-bit value in EIP to underflow or overflow;
             * any underflow or overflow doesn't matter, because only the low 16 bits of EIP are updated when a
             * 16-bit OPERAND size is in effect.
             *
             * In fact, for 16-bit jumps, it's simpler to always think of rel16 as an UNSIGNED value added to
             * the current EIP, where the result is then truncated to a 16-bit value.  This is why we don't have
             * to sign-extend rel16 before adding it to the current EIP.
             */
            
            /**
             * opJOw()
             *
             * op=0x0F,0x80 (JO rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJOw = function JOw()
            {
                var disp = this.getIPWord();
                if (this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNOw()
             *
             * op=0x0F,0x81 (JNO rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNOw = function JNOw()
            {
                var disp = this.getIPWord();
                if (!this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJCw()
             *
             * op=0x0F,0x82 (JC rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJCw = function JCw()
            {
                var disp = this.getIPWord();
                if (this.getCF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNCw()
             *
             * op=0x0F,0x83 (JNC rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNCw = function JNCw()
            {
                var disp = this.getIPWord();
                if (!this.getCF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJZw()
             *
             * op=0x0F,0x84 (JZ rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJZw = function JZw()
            {
                var disp = this.getIPWord();
                if (this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNZw()
             *
             * op=0x0F,0x85 (JNZ rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNZw = function JNZw()
            {
                var disp = this.getIPWord();
                if (!this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJBEw()
             *
             * op=0x0F,0x86 (JBE rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJBEw = function JBEw()
            {
                var disp = this.getIPWord();
                if (this.getCF() || this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNBEw()
             *
             * op=0x0F,0x87 (JNBE rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNBEw = function JNBEw()
            {
                var disp = this.getIPWord();
                if (!this.getCF() && !this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJSw()
             *
             * op=0x0F,0x88 (JS rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJSw = function JSw()
            {
                var disp = this.getIPWord();
                if (this.getSF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNSw()
             *
             * op=0x0F,0x89 (JNS rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNSw = function JNSw()
            {
                var disp = this.getIPWord();
                if (!this.getSF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJPw()
             *
             * op=0x0F,0x8A (JP rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJPw = function JPw()
            {
                var disp = this.getIPWord();
                if (this.getPF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNPw()
             *
             * op=0x0F,0x8B (JNP rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNPw = function JNPw()
            {
                var disp = this.getIPWord();
                if (!this.getPF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJLw()
             *
             * op=0x0F,0x8C (JL rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJLw = function JLw()
            {
                var disp = this.getIPWord();
                if (!this.getSF() != !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNLw()
             *
             * op=0x0F,0x8D (JNL rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNLw = function JNLw()
            {
                var disp = this.getIPWord();
                if (!this.getSF() == !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJLEw()
             *
             * op=0x0F,0x8E (JLE rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJLEw = function JLEw()
            {
                var disp = this.getIPWord();
                if (this.getZF() || !this.getSF() != !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opJNLEw()
             *
             * op=0x0F,0x8F (JNLE rel16/rel32)
             *
             * @this {X86CPU}
             */
            X86.opJNLEw = function JNLEw()
            {
                var disp = this.getIPWord();
                if (!this.getZF() && !this.getSF() == !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * opSETO()
             *
             * op=0x0F,0x90 (SETO b)
             *
             * @this {X86CPU}
             */
            X86.opSETO = function SETO()
            {
                X86.fnSETcc.call(this, X86.fnSETO);
            };
            
            /**
             * opSETNO()
             *
             * op=0x0F,0x91 (SETNO b)
             *
             * @this {X86CPU}
             */
            X86.opSETNO = function SETNO()
            {
                X86.fnSETcc.call(this, X86.fnSETO);
            };
            
            /**
             * opSETC()
             *
             * op=0x0F,0x92 (SETC b)
             *
             * @this {X86CPU}
             */
            X86.opSETC = function SETC()
            {
                X86.fnSETcc.call(this, X86.fnSETC);
            };
            
            /**
             * opSETNC()
             *
             * op=0x0F,0x93 (SETNC b)
             *
             * @this {X86CPU}
             */
            X86.opSETNC = function SETNC()
            {
                X86.fnSETcc.call(this, X86.fnSETNC);
            };
            
            /**
             * opSETZ()
             *
             * op=0x0F,0x94 (SETZ b)
             *
             * @this {X86CPU}
             */
            X86.opSETZ = function SETZ()
            {
                X86.fnSETcc.call(this, X86.fnSETZ);
            };
            
            /**
             * opSETNZ()
             *
             * op=0x0F,0x95 (SETNZ b)
             *
             * @this {X86CPU}
             */
            X86.opSETNZ = function SETNZ()
            {
                X86.fnSETcc.call(this, X86.fnSETNZ);
            };
            
            /**
             * opSETBE()
             *
             * op=0x0F,0x96 (SETBE b)
             *
             * @this {X86CPU}
             */
            X86.opSETBE = function SETBE()
            {
                X86.fnSETcc.call(this, X86.fnSETBE);
            };
            
            /**
             * opSETNBE()
             *
             * op=0x0F,0x97 (SETNBE b)
             *
             * @this {X86CPU}
             */
            X86.opSETNBE = function SETNBE()
            {
                X86.fnSETcc.call(this, X86.fnSETNBE);
            };
            
            /**
             * opSETS()
             *
             * op=0x0F,0x98 (SETS b)
             *
             * @this {X86CPU}
             */
            X86.opSETS = function SETS()
            {
                X86.fnSETcc.call(this, X86.fnSETS);
            };
            
            /**
             * opSETNS()
             *
             * op=0x0F,0x99 (SETNS b)
             *
             * @this {X86CPU}
             */
            X86.opSETNS = function SETNS()
            {
                X86.fnSETcc.call(this, X86.fnSETNS);
            };
            
            /**
             * opSETP()
             *
             * op=0x0F,0x9A (SETP b)
             *
             * @this {X86CPU}
             */
            X86.opSETP = function SETP()
            {
                X86.fnSETcc.call(this, X86.fnSETP);
            };
            
            /**
             * opSETNP()
             *
             * op=0x0F,0x9B (SETNP b)
             *
             * @this {X86CPU}
             */
            X86.opSETNP = function SETNP()
            {
                X86.fnSETcc.call(this, X86.fnSETNP);
            };
            
            /**
             * opSETL()
             *
             * op=0x0F,0x9C (SETL b)
             *
             * @this {X86CPU}
             */
            X86.opSETL = function SETL()
            {
                X86.fnSETcc.call(this, X86.fnSETL);
            };
            
            /**
             * opSETNL()
             *
             * op=0x0F,0x9D (SETNL b)
             *
             * @this {X86CPU}
             */
            X86.opSETNL = function SETNL()
            {
                X86.fnSETcc.call(this, X86.fnSETNL);
            };
            
            /**
             * opSETLE()
             *
             * op=0x0F,0x9E (SETLE b)
             *
             * @this {X86CPU}
             */
            X86.opSETLE = function SETLE()
            {
                X86.fnSETcc.call(this, X86.fnSETLE);
            };
            
            /**
             * opSETNLE()
             *
             * op=0x0F,0x9F (SETNLE b)
             *
             * @this {X86CPU}
             */
            X86.opSETNLE = function SETNLE()
            {
                X86.fnSETcc.call(this, X86.fnSETNLE);
            };
            
            /**
             * opPUSHFS()
             *
             * op=0x0F,0xA0 (PUSH FS)
             *
             * @this {X86CPU}
             */
            X86.opPUSHFS = function PUSHFS()
            {
                this.pushWord(this.segFS.sel);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushSeg;
            };
            
            /**
             * opPOPFS()
             *
             * op=0x0F,0xA1 (POP FS)
             *
             * @this {X86CPU}
             */
            X86.opPOPFS = function POPFS()
            {
                this.setFS(this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * opBT()
             *
             * op=0x0F,0xA3 (BT mem/reg,reg)
             *
             * @this {X86CPU}
             */
            X86.opBT = function BT()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnBT);
                if (this.regEA !== X86.ADDR_INVALID) this.nStepCycles -= this.cycleCounts.nOpCyclesBitTestMExtra;
            };
            
            /**
             * opSHLDn()
             *
             * op=0x0F,0xA4 (SHLD mem/reg,reg,imm8)
             *
             * @this {X86CPU}
             */
            X86.opSHLDn = function SHLDn()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, this.dataSize == 2? X86.fnSHLDwi : X86.fnSHLDdi);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesShiftDR : this.cycleCounts.nOpCyclesShiftDM);
            };
            
            /**
             * opSHLDcl()
             *
             * op=0x0F,0xA5 (SHLD mem/reg,reg,CL)
             *
             * @this {X86CPU}
             */
            X86.opSHLDcl = function SHLDcl()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, this.dataSize == 2? X86.fnSHLDwCL : X86.fnSHLDdCL);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesShiftDR : this.cycleCounts.nOpCyclesShiftDM);
            };
            
            /**
             * opPUSHGS()
             *
             * op=0x0F,0xA8 (PUSH GS)
             *
             * @this {X86CPU}
             */
            X86.opPUSHGS = function PUSHGS()
            {
                this.pushWord(this.segGS.sel);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushSeg;
            };
            
            /**
             * opPOPGS()
             *
             * op=0x0F,0xA9 (POP GS)
             *
             * @this {X86CPU}
             */
            X86.opPOPGS = function POPGS()
            {
                this.setGS(this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * opBTS()
             *
             * op=0x0F,0xAB (BTC mem/reg,reg)
             *
             * @this {X86CPU}
             */
            X86.opBTS = function BTS()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnBTS);
                if (this.regEA !== X86.ADDR_INVALID) this.nStepCycles -= this.cycleCounts.nOpCyclesBitSetMExtra;
            };
            
            /**
             * opSHRDn()
             *
             * op=0x0F,0xAC (SHRD mem/reg,reg,imm8)
             *
             * @this {X86CPU}
             */
            X86.opSHRDn = function SHRDn()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, this.dataSize == 2? X86.fnSHRDwi : X86.fnSHRDdi);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesShiftDR : this.cycleCounts.nOpCyclesShiftDM);
            };
            
            /**
             * opSHRDcl()
             *
             * op=0x0F,0xAD (SHRD mem/reg,reg,CL)
             *
             * @this {X86CPU}
             */
            X86.opSHRDcl = function SHRDcl()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, this.dataSize == 2? X86.fnSHRDwCL : X86.fnSHRDdCL);
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesShiftDR : this.cycleCounts.nOpCyclesShiftDM);
            };
            
            /**
             * opIMUL()
             *
             * op=0x0F,0xAF (IMUL reg,mem/reg) (80386 and up)
             *
             * @this {X86CPU}
             */
            X86.opIMUL = function IMUL()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, this.dataSize == 2? X86.fnIMULrw : X86.fnIMULrd);
            };
            
            /**
             * opLSS()
             *
             * op=0x0F,0xB2 (LSS reg,word)
             *
             * This is like a "MOV reg,rm" operation, but it also loads SS from the next word.
             *
             * @this {X86CPU}
             */
            X86.opLSS = function LSS()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLSS);
            };
            
            /**
             * opBTR()
             *
             * op=0x0F,0xB3 (BTC mem/reg,reg) (80386 and up)
             *
             * @this {X86CPU}
             */
            X86.opBTR = function BTR()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnBTR);
                if (this.regEA !== X86.ADDR_INVALID) this.nStepCycles -= this.cycleCounts.nOpCyclesBitSetMExtra;
            };
            
            /**
             * opLFS()
             *
             * op=0x0F,0xB4 (LFS reg,word)
             *
             * This is like a "MOV reg,rm" operation, but it also loads FS from the next word.
             *
             * @this {X86CPU}
             */
            X86.opLFS = function LFS()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLFS);
            };
            
            /**
             * opLGS()
             *
             * op=0x0F,0xB5 (LGS reg,word)
             *
             * This is like a "MOV reg,rm" operation, but it also loads GS from the next word.
             *
             * @this {X86CPU}
             */
            X86.opLGS = function LGS()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLGS);
            };
            
            /**
             * opMOVZXb()
             *
             * op=0x0F,0xB6 (MOVZX reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opMOVZXb = function MOVZXb()
            {
                /*
                 * The ModRegByte handlers update the registers in the 1st column, but we need to update those in the 2nd column.
                 *
                 *      000:    AL      ->      000:    AX
                 *      001:    CL      ->      001:    CX
                 *      010:    DL      ->      010:    DX
                 *      011:    BL      ->      011:    BX
                 *      100:    AH      ->      100:    SP
                 *      101:    CH      ->      101:    BP
                 *      110:    DH      ->      110:    SI
                 *      111:    BH      ->      111:    DI
                 */
                var temp;
                var bModRM = this.getIPByte();
                var reg = (bModRM & 0x38) >> 3;
                switch(reg) {
                case 0x4:
                    temp = this.regEAX;
                    break;
                case 0x5:
                    temp = this.regECX;
                    break;
                case 0x6:
                    temp = this.regEDX;
                    break;
                case 0x7:
                    temp = this.regEBX;
                    break;
                }
                this.aOpModRegByte[bModRM].call(this, X86.fnMOVX);
                switch(reg) {
                case 0x0:
                    this.regEAX = (this.regEAX & ~this.dataMask) | (this.regEAX & 0xff);
                    break;
                case 0x1:
                    this.regECX = (this.regECX & ~this.dataMask) | (this.regECX & 0xff);
                    break;
                case 0x2:
                    this.regEDX = (this.regEDX & ~this.dataMask) | (this.regEDX & 0xff);
                    break;
                case 0x3:
                    this.regEBX = (this.regEBX & ~this.dataMask) | (this.regEBX & 0xff);
                    break;
                case 0x4:
                    this.regESP = (this.regESP & ~this.dataMask) | ((this.regEAX >> 8) & 0xff);
                    this.regEAX = temp;
                    break;
                case 0x5:
                    this.regEBP = (this.regEBP & ~this.dataMask) | ((this.regECX >> 8) & 0xff);
                    this.regECX = temp;
                    break;
                case 0x6:
                    this.regESI = (this.regESI & ~this.dataMask) | ((this.regEDX >> 8) & 0xff);
                    this.regEDX = temp;
                    break;
                case 0x7:
                    this.regEDI = (this.regEDI & ~this.dataMask) | ((this.regEBX >> 8) & 0xff);
                    this.regEBX = temp;
                    break;
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMovXR : this.cycleCounts.nOpCyclesMovXM);
            };
            
            /**
             * opMOVZXw()
             *
             * op=0x0F,0xB7 (MOVZX reg,word)
             *
             * @this {X86CPU}
             */
            X86.opMOVZXw = function MOVZXw()
            {
                var bModRM = this.getIPByte();
                this.setDataSize(2);
                this.aOpModRegWord[bModRM].call(this, X86.fnMOVX);
                switch((bModRM & 0x38) >> 3) {
                case 0x0:
                    this.regEAX = (this.regEAX & 0xffff);
                    break;
                case 0x1:
                    this.regECX = (this.regECX & 0xffff);
                    break;
                case 0x2:
                    this.regEDX = (this.regEDX & 0xffff);
                    break;
                case 0x3:
                    this.regEBX = (this.regEBX & 0xffff);
                    break;
                case 0x4:
                    this.regESP = (this.regESP & 0xffff);
                    break;
                case 0x5:
                    this.regEBP = (this.regEBP & 0xffff);
                    break;
                case 0x6:
                    this.regESI = (this.regESI & 0xffff);
                    break;
                case 0x7:
                    this.regEDI = (this.regEDI & 0xffff);
                    break;
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMovXR : this.cycleCounts.nOpCyclesMovXM);
            };
            
            /**
             * op=0x0F,0xBA (GRP8 mem/reg) (80386 and up)
             *
             * @this {X86CPU}
             */
            X86.opGRP8 = function GRP8()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrp8, this.getIPByte);
            };
            
            /**
             * opBTC()
             *
             * op=0x0F,0xBB (BTC mem/reg,reg)
             *
             * @this {X86CPU}
             */
            X86.opBTC = function BTC()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnBTC);
                if (this.regEA !== X86.ADDR_INVALID) this.nStepCycles -= this.cycleCounts.nOpCyclesBitSetMExtra;
            };
            
            /**
             * opBSF()
             *
             * op=0x0F,0xBC (BSF reg,mem/reg)
             *
             * @this {X86CPU}
             */
            X86.opBSF = function BSF()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnBSF);
            };
            
            /**
             * opBSR()
             *
             * op=0x0F,0xBD (BSR reg,mem/reg)
             *
             * @this {X86CPU}
             */
            X86.opBSR = function BSR()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnBSR);
            };
            
            /**
             * opMOVSXb()
             *
             * op=0x0F,0xBE (MOVSX reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opMOVSXb = function MOVSXb()
            {
                /*
                 * The ModRegByte handlers update the registers in the 1st column, but we need to update those in the 2nd column.
                 *
                 *      000:    AL      ->      000:    AX
                 *      001:    CL      ->      001:    CX
                 *      010:    DL      ->      010:    DX
                 *      011:    BL      ->      011:    BX
                 *      100:    AH      ->      100:    SP
                 *      101:    CH      ->      101:    BP
                 *      110:    DH      ->      110:    SI
                 *      111:    BH      ->      111:    DI
                 */
                var temp;
                var bModRM = this.getIPByte();
                var reg = (bModRM & 0x38) >> 3;
                switch(reg) {
                case 0x4:
                    temp = this.regEAX;
                    break;
                case 0x5:
                    temp = this.regECX;
                    break;
                case 0x6:
                    temp = this.regEDX;
                    break;
                case 0x7:
                    temp = this.regEBX;
                    break;
                }
                this.aOpModRegByte[bModRM].call(this, X86.fnMOVX);
                switch(reg) {
                case 0x0:
                    this.regEAX = (this.regEAX & ~this.dataMask) | ((((this.regEAX & 0xff) << 24) >> 24) & this.dataMask);
                    break;
                case 0x1:
                    this.regECX = (this.regECX & ~this.dataMask) | ((((this.regECX & 0xff) << 24) >> 24) & this.dataMask);
                    break;
                case 0x2:
                    this.regEDX = (this.regEDX & ~this.dataMask) | ((((this.regEDX & 0xff) << 24) >> 24) & this.dataMask);
                    break;
                case 0x3:
                    this.regEBX = (this.regEBX & ~this.dataMask) | ((((this.regEBX & 0xff) << 24) >> 24) & this.dataMask);
                    break;
                case 0x4:
                    this.regESP = (this.regESP & ~this.dataMask) | (((this.regEAX << 16) >> 24) & this.dataMask);
                    this.regEAX = temp;
                    break;
                case 0x5:
                    this.regEBP = (this.regEBP & ~this.dataMask) | (((this.regECX << 16) >> 24) & this.dataMask);
                    this.regECX = temp;
                    break;
                case 0x6:
                    this.regESI = (this.regESI & ~this.dataMask) | (((this.regEDX << 16) >> 24) & this.dataMask);
                    this.regEDX = temp;
                    break;
                case 0x7:
                    this.regEDI = (this.regEDI & ~this.dataMask) | (((this.regEBX << 16) >> 24) & this.dataMask);
                    this.regEBX = temp;
                    break;
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMovXR : this.cycleCounts.nOpCyclesMovXM);
            };
            
            /**
             * opMOVSXw()
             *
             * op=0x0F,0xBF (MOVSX reg,word)
             *
             * @this {X86CPU}
             */
            X86.opMOVSXw = function MOVSXw()
            {
                var bModRM = this.getIPByte();
                this.setDataSize(2);
                this.aOpModRegWord[bModRM].call(this, X86.fnMOVX);
                switch((bModRM & 0x38) >> 3) {
                case 0x0:
                    this.regEAX = ((this.regEAX << 16) >> 16);
                    break;
                case 0x1:
                    this.regECX = ((this.regECX << 16) >> 16);
                    break;
                case 0x2:
                    this.regEDX = ((this.regEDX << 16) >> 16);
                    break;
                case 0x3:
                    this.regEBX = ((this.regEBX << 16) >> 16);
                    break;
                case 0x4:
                    this.regESP = ((this.regESP << 16) >> 16);
                    break;
                case 0x5:
                    this.regEBP = ((this.regEBP << 16) >> 16);
                    break;
                case 0x6:
                    this.regESI = ((this.regESI << 16) >> 16);
                    break;
                case 0x7:
                    this.regEDI = ((this.regEDI << 16) >> 16);
                    break;
                }
                this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesMovXR : this.cycleCounts.nOpCyclesMovXM);
            };
            
            X86.aOps0F = new Array(256);
            
            X86.aOps0F[0x00] = X86.opGRP6;
            X86.aOps0F[0x01] = X86.opGRP7;
            X86.aOps0F[0x02] = X86.opLAR;
            X86.aOps0F[0x03] = X86.opLSL;
            X86.aOps0F[0x05] = X86.opLOADALL;
            X86.aOps0F[0x06] = X86.opCLTS;
            
            /*
             * On all processors (except the 8086/8088, of course), X86.OPCODE.UD2 (0x0F,0x0B), aka "UD2", is an
             * instruction guaranteed to raise a #UD (Invalid Opcode) exception (INT 0x06) on all post-8086 processors.
             */
            X86.aOps0F[0x0B] = X86.opInvalid;
            
            if (I386) {
                X86.aOps0F386 = [];
                X86.aOps0F386[0x20] = X86.opMOVrc;
                X86.aOps0F386[0x22] = X86.opMOVcr;
                X86.aOps0F386[0x80] = X86.opJOw;
                X86.aOps0F386[0x81] = X86.opJNOw;
                X86.aOps0F386[0x82] = X86.opJCw;
                X86.aOps0F386[0x83] = X86.opJNCw;
                X86.aOps0F386[0x84] = X86.opJZw;
                X86.aOps0F386[0x85] = X86.opJNZw;
                X86.aOps0F386[0x86] = X86.opJBEw;
                X86.aOps0F386[0x87] = X86.opJNBEw;
                X86.aOps0F386[0x88] = X86.opJSw;
                X86.aOps0F386[0x89] = X86.opJNSw;
                X86.aOps0F386[0x8A] = X86.opJPw;
                X86.aOps0F386[0x8B] = X86.opJNPw;
                X86.aOps0F386[0x8C] = X86.opJLw;
                X86.aOps0F386[0x8D] = X86.opJNLw;
                X86.aOps0F386[0x8E] = X86.opJLEw;
                X86.aOps0F386[0x8F] = X86.opJNLEw;
                X86.aOps0F386[0x90] = X86.opSETO;
                X86.aOps0F386[0x91] = X86.opSETNO;
                X86.aOps0F386[0x92] = X86.opSETC;
                X86.aOps0F386[0x93] = X86.opSETNC;
                X86.aOps0F386[0x94] = X86.opSETZ;
                X86.aOps0F386[0x95] = X86.opSETNZ;
                X86.aOps0F386[0x96] = X86.opSETBE;
                X86.aOps0F386[0x97] = X86.opSETNBE;
                X86.aOps0F386[0x98] = X86.opSETS;
                X86.aOps0F386[0x99] = X86.opSETNS;
                X86.aOps0F386[0x9A] = X86.opSETP;
                X86.aOps0F386[0x9B] = X86.opSETNP;
                X86.aOps0F386[0x9C] = X86.opSETL;
                X86.aOps0F386[0x9D] = X86.opSETNL;
                X86.aOps0F386[0x9E] = X86.opSETLE;
                X86.aOps0F386[0x9F] = X86.opSETNLE;
                X86.aOps0F386[0xA0] = X86.opPUSHFS;
                X86.aOps0F386[0xA1] = X86.opPOPFS;
                X86.aOps0F386[0xA3] = X86.opBT;
                X86.aOps0F386[0xA4] = X86.opSHLDn;
                X86.aOps0F386[0xA5] = X86.opSHLDcl;
                X86.aOps0F386[0xA8] = X86.opPUSHGS;
                X86.aOps0F386[0xA9] = X86.opPOPGS;
                X86.aOps0F386[0xAB] = X86.opBTS;
                X86.aOps0F386[0xAC] = X86.opSHRDn;
                X86.aOps0F386[0xAD] = X86.opSHRDcl;
                X86.aOps0F386[0xAF] = X86.opIMUL;
                X86.aOps0F386[0xB2] = X86.opLSS;
                X86.aOps0F386[0xB3] = X86.opBTR;
                X86.aOps0F386[0xB4] = X86.opLFS;
                X86.aOps0F386[0xB5] = X86.opLGS;
                X86.aOps0F386[0xB6] = X86.opMOVZXb;
                X86.aOps0F386[0xB7] = X86.opMOVZXw;
                X86.aOps0F386[0xBA] = X86.opGRP8;
                X86.aOps0F386[0xBB] = X86.opBTC;
                X86.aOps0F386[0xBC] = X86.opBSF;
                X86.aOps0F386[0xBD] = X86.opBSR;
                X86.aOps0F386[0xBE] = X86.opMOVSXb;
                X86.aOps0F386[0xBF] = X86.opMOVSXw;
            }
            
            /*
             * These instruction groups are not as orthogonal as the original 8086/8088 groups (Grp1 through Grp4); some of
             * the instructions in Grp6 and Grp7 only read their dst operand (eg, LLDT), which means the ModRM helper function
             * must insure that setEAWord() is disabled, while others only write their dst operand (eg, SLDT), which means that
             * getEAWord() should be disabled *prior* to calling the ModRM helper function.  This latter case requires that
             * we decode the reg field of the ModRM byte before dispatching.
             */
            X86.aOpGrp6Prot = [
                X86.fnSLDT,             X86.fnSTR,              X86.fnLLDT,             X86.fnLTR,              // 0x0F,0x00(reg=0x0-0x3)
                X86.fnVERR,             X86.fnVERW,             X86.fnGRPUndefined,     X86.fnGRPUndefined      // 0x0F,0x00(reg=0x4-0x7)
            ];
            
            X86.aOpGrp6Real = [
                X86.fnGRPInvalid,       X86.fnGRPInvalid,       X86.fnGRPInvalid,       X86.fnGRPInvalid,       // 0x0F,0x00(reg=0x0-0x3)
                X86.fnGRPInvalid,       X86.fnGRPInvalid,       X86.fnGRPUndefined,     X86.fnGRPUndefined      // 0x0F,0x00(reg=0x4-0x7)
            ];
            
            /*
             * Unlike Grp6, Grp7 and Grp8 do not require separate real-mode and protected-mode dispatch tables, because
             * all Grp7 and Grp8 instructions are valid in both modes.
             */
            X86.aOpGrp7 = [
                X86.fnSGDT,             X86.fnSIDT,             X86.fnLGDT,             X86.fnLIDT,             // 0x0F,0x01(reg=0x0-0x3)
                X86.fnSMSW,             X86.fnGRPUndefined,     X86.fnLMSW,             X86.fnGRPUndefined      // 0x0F,0x01(reg=0x4-0x7)
            ];
            
            X86.aOpGrp8 = [
                X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined,     // 0x0F,0xBA(reg=0x0-0x3)
                X86.fnBT,               X86.fnBTS,              X86.fnBTR,              X86.fnBTC               // 0x0F,0xBA(reg=0x4-0x7)
            ];
            
          • x86ops.js
            /**
             * @fileoverview Implements PCjs 8086 opcode decoding.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Sep-05
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var Component   = require("../../shared/lib/component");
                var Messages    = require("./messages");
                var X86         = require("./x86");
            }
            
            /**
             * op=0x00 (ADD byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opADDmb = function ADDmb()
            {
                var b = this.getIPByte();
                /*
                 * Opcode bytes 0x00 0x00 are sufficiently uncommon that it's more likely we've started
                 * executing in the weeds, so we'll print a warning if you're in DEBUG mode, and optionally
                 * stop the CPU if a Debugger is available.
                 */
                if (DEBUG && !b) {
                    this.printMessage("suspicious opcode: 0x00 0x00", DEBUGGER || this.bitsMessage);
                    if (DEBUGGER && this.dbg) this.stopCPU();
                }
                this.aOpModMemByte[b].call(this, X86.fnADDb);
            };
            
            /**
             * op=0x01 (ADD word,reg)
             *
             * @this {X86CPU}
             */
            X86.opADDmw = function ADDmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnADDw);
            };
            
            /**
             * op=0x02 (ADD reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opADDrb = function ADDrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnADDb);
            };
            
            /**
             * op=0x03 (ADD reg,word)
             *
             * @this {X86CPU}
             */
            X86.opADDrw = function ADDrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnADDw);
            };
            
            /**
             * op=0x04 (ADD AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opADDALb = function ADDALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnADDb.call(this, this.regEAX & 0xff, this.getIPByte());
                /*
                 * NOTE: Whenever the result is "blended" value (eg, of btiAL and btiMemLo), a new bti should be
                 * allocated to reflect that fact; however, I'm leaving "perfect" BACKTRACK support for another day.
                 */
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x05 (ADD AX,imm16 or ADD EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opADDAX = function ADDAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnADDw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x06 (PUSH ES)
             *
             * @this {X86CPU}
             */
            X86.opPUSHES = function PUSHES()
            {
                this.pushWord(this.segES.sel);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushSeg;
            };
            
            /**
             * op=0x07 (POP ES)
             *
             * @this {X86CPU}
             */
            X86.opPOPES = function POPES()
            {
                this.setES(this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x08 (OR byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opORmb = function ORmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnORb);
            };
            
            /**
             * op=0x09 (OR word,reg)
             *
             * @this {X86CPU}
             */
            X86.opORmw = function ORmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnORw);
            };
            
            /**
             * op=0x0A (OR reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opORrb = function ORrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnORb);
            };
            
            /**
             * op=0x0B (OR reg,word)
             *
             * @this {X86CPU}
             */
            X86.opORrw = function ORrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnORw);
            };
            
            /**
             * op=0x0C (OR AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opORALb = function ORALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnORb.call(this, this.regEAX & 0xff, this.getIPByte());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x0D (OR AX,imm16 or OR EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opORAX = function ORAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnORw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x0E (PUSH CS)
             *
             * @this {X86CPU}
             */
            X86.opPUSHCS = function PUSHCS()
            {
                this.pushWord(this.segCS.sel);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushSeg;
            };
            
            /**
             * op=0x0F (POP CS) (undocumented on 8086/8088; replaced with opInvalid on 80186/80188, and op0F on 80286 and up)
             *
             * @this {X86CPU}
             */
            X86.opPOPCS = function POPCS()
            {
                this.setCS(this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x0F (handler for two-byte opcodes; 80286 and up)
             *
             * @this {X86CPU}
             */
            X86.op0F = function OP0F()
            {
                this.aOps0F[this.getIPByte()].call(this);
            };
            
            /**
             * op=0x10 (ADC byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opADCmb = function ADCmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnADCb);
            };
            
            /**
             * op=0x11 (ADC word,reg)
             *
             * @this {X86CPU}
             */
            X86.opADCmw = function ADCmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnADCw);
            };
            
            /**
             * op=0x12 (ADC reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opADCrb = function ADCrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnADCb);
            };
            
            /**
             * op=0x13 (ADC reg,word)
             *
             * @this {X86CPU}
             */
            X86.opADCrw = function ADCrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnADCw);
            };
            
            /**
             * op=0x14 (ADC AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opADCALb = function ADCALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnADCb.call(this, this.regEAX & 0xff, this.getIPByte());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x15 (ADC AX,imm16 or ADC EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opADCAX = function ADCAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnADCw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x16 (PUSH SS)
             *
             * @this {X86CPU}
             */
            X86.opPUSHSS = function PUSHSS()
            {
                this.pushWord(this.segSS.sel);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushSeg;
            };
            
            /**
             * op=0x17 (POP SS)
             *
             * @this {X86CPU}
             */
            X86.opPOPSS = function POPSS()
            {
                this.setSS(this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x18 (SBB byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opSBBmb = function SBBmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnSBBb);
            };
            
            /**
             * op=0x19 (SBB word,reg)
             *
             * @this {X86CPU}
             */
            X86.opSBBmw = function SBBmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnSBBw);
            };
            
            /**
             * op=0x1A (SBB reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opSBBrb = function SBBrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnSBBb);
            };
            
            /**
             * op=0x1B (SBB reg,word)
             *
             * @this {X86CPU}
             */
            X86.opSBBrw = function SBBrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnSBBw);
            };
            
            /**
             * op=0x1C (SBB AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opSBBALb = function SBBALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnSBBb.call(this, this.regEAX & 0xff, this.getIPByte());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x1D (SBB AX,imm16 or SBB EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opSBBAX = function SBBAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnSBBw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x1E (PUSH DS)
             *
             * @this {X86CPU}
             */
            X86.opPUSHDS = function PUSHDS()
            {
                this.pushWord(this.segDS.sel);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushSeg;
            };
            
            /**
             * op=0x1F (POP DS)
             *
             * @this {X86CPU}
             */
            X86.opPOPDS = function POPDS()
            {
                this.setDS(this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x20 (AND byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opANDmb = function ANDmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnANDb);
            };
            
            /**
             * op=0x21 (AND word,reg)
             *
             * @this {X86CPU}
             */
            X86.opANDmw = function ANDmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnANDw);
            };
            
            /**
             * op=0x22 (AND reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opANDrb = function ANDrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnANDb);
            };
            
            /**
             * op=0x23 (AND reg,word)
             *
             * @this {X86CPU}
             */
            X86.opANDrw = function ANDrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnANDw);
            };
            
            /**
             * op=0x24 (AND AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opANDAL = function ANDAL()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnANDb.call(this, this.regEAX & 0xff, this.getIPByte());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x25 (AND AX,imm16 or AND EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opANDAX = function ANDAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnANDw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x26 (ES:)
             *
             * @this {X86CPU}
             */
            X86.opES = function ES()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with SEG is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.SEG | X86.OPFLAG.NOINTR;
                this.segData = this.segStack = this.segES;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0x27 (DAA)
             *
             * @this {X86CPU}
             */
            X86.opDAA = function DAA()
            {
                var AL = this.regEAX & 0xff;
                var AF = this.getAF();
                var CF = this.getCF();
                if ((AL & 0xf) > 9 || AF) {
                    AL += 0x6;
                    AF = X86.PS.AF;
                }
                if (AL > 0x9f || CF) {
                    AL += 0x60;
                    CF = X86.PS.CF;
                }
                var b = (AL & 0xff);
                this.regEAX = (this.regEAX & ~0xff) | b;
                this.setLogicResult(b, X86.RESULT.BYTE);
                if (CF) this.setCF(); else this.clearCF();
                if (AF) this.setAF(); else this.clearAF();
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAA;          // AAA and DAA have the same cycle times
            };
            
            /**
             * op=0x28 (SUB byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opSUBmb = function SUBmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnSUBb);
            };
            
            /**
             * op=0x29 (SUB word,reg)
             *
             * @this {X86CPU}
             */
            X86.opSUBmw = function SUBmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnSUBw);
            };
            
            /**
             * op=0x2A (SUB reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opSUBrb = function SUBrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnSUBb);
            };
            
            /**
             * op=0x2B (SUB reg,word)
             *
             * @this {X86CPU}
             */
            X86.opSUBrw = function SUBrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnSUBw);
            };
            
            /**
             * op=0x2C (SUB AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opSUBALb = function SUBALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnSUBb.call(this, this.regEAX & 0xff, this.getIPByte());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x2D (SUB AX,imm16 or SUB EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opSUBAX = function SUBAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnSUBw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x2E (CS:)
             *
             * @this {X86CPU}
             */
            X86.opCS = function CS()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with SEG is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.SEG | X86.OPFLAG.NOINTR;
                this.segData = this.segStack = this.segCS;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0x2F (DAS)
             *
             * @this {X86CPU}
             */
            X86.opDAS = function DAS()
            {
                var AL = this.regEAX & 0xff;
                var AF = this.getAF();
                var CF = this.getCF();
                if ((AL & 0xf) > 9 || AF) {
                    AL -= 0x6;
                    AF = X86.PS.AF;
                }
                if (AL > 0x9f || CF) {
                    AL -= 0x60;
                    CF = X86.PS.CF;
                }
                var b = (AL & 0xff);
                this.regEAX = (this.regEAX & ~0xff) | b;
                this.setLogicResult(b, X86.RESULT.BYTE);
                if (CF) this.setCF(); else this.clearCF();
                if (AF) this.setAF(); else this.clearAF();
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAA;          // AAA and DAS have the same cycle times
            };
            
            /**
             * op=0x30 (XOR byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opXORmb = function XORmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnXORb);
            };
            
            /**
             * op=0x31 (XOR word,reg)
             *
             * @this {X86CPU}
             */
            X86.opXORmw = function XORmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnXORw);
            };
            
            /**
             * op=0x32 (XOR reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opXORrb = function XORrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnXORb);
            };
            
            /**
             * op=0x33 (XOR reg,word)
             *
             * @this {X86CPU}
             */
            X86.opXORrw = function XORrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnXORw);
            };
            
            /**
             * op=0x34 (XOR AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opXORALb = function XORALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | X86.fnXORb.call(this, this.regEAX & 0xff, this.getIPByte());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x35 (XOR AX,imm16 or XOR EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opXORAX = function XORAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | X86.fnXORw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x36 (SS:)
             *
             * @this {X86CPU}
             */
            X86.opSS = function SS()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with SEG is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.SEG | X86.OPFLAG.NOINTR;
                this.segData = this.segStack = this.segSS;      // QUESTION: Is there a case where segStack would not already be segSS? (eg, multiple segment overrides?)
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0x37 (AAA)
             *
             * @this {X86CPU}
             */
            X86.opAAA = function AAA()
            {
                var CF, AF;
                var AL = this.regEAX & 0xff;
                var AH = (this.regEAX >> 8) & 0xff;
                if ((AL & 0xf) > 9 || this.getAF()) {
                    AL = (AL + 0x6) & 0xf;
                    AH = (AH + 1) & 0xff;
                    CF = AF = 1;
                } else {
                    CF = AF = 0;
                }
                this.regEAX = (this.regEAX & ~0xffff) | ((AH << 8) | AL);
                if (CF) this.setCF(); else this.clearCF();
                if (AF) this.setAF(); else this.clearAF();
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAA;
            };
            
            /**
             * op=0x38 (CMP byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opCMPmb = function CMPmb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnCMPb);
            };
            
            /**
             * op=0x39 (CMP word,reg)
             *
             * @this {X86CPU}
             */
            X86.opCMPmw = function CMPmw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnCMPw);
            };
            
            /**
             * op=0x3A (CMP reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opCMPrb = function CMPrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnCMPb);
            };
            
            /**
             * op=0x3B (CMP reg,word)
             *
             * @this {X86CPU}
             */
            X86.opCMPrw = function CMPrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnCMPw);
            };
            
            /**
             * op=0x3C (CMP AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opCMPALb = function CMPALb()
            {
                X86.fnCMPb.call(this, this.regEAX & 0xff, this.getIPByte());
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x3D (CMP AX,imm16 or CMP EAX,imm32)
             *
             * @this {X86CPU}
             */
            X86.opCMPAX = function CMPAX()
            {
                X86.fnCMPw.call(this, this.regEAX & this.dataMask, this.getIPWord());
                this.nStepCycles--;         // in the absence of any EA calculations, we need deduct only one more cycle
            };
            
            /**
             * op=0x3E (DS:)
             *
             * @this {X86CPU}
             */
            X86.opDS = function DS()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with SEG is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.SEG | X86.OPFLAG.NOINTR;
                this.segData = this.segStack = this.segDS;      // QUESTION: Is there a case where segData would not already be segDS? (eg, multiple segment overrides?)
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0x3D (AAS)
             *
             * @this {X86CPU}
             */
            X86.opAAS = function AAS()
            {
                var CF, AF;
                var AL = this.regEAX & 0xff;
                var AH = (this.regEAX >> 8) & 0xff;
                if ((AL & 0xf) > 9 || this.getAF()) {
                    AL = (AL - 0x6) & 0xf;
                    AH = (AH - 1) & 0xff;
                    CF = AF = 1;
                } else {
                    CF = AF = 0;
                }
                this.regEAX = (this.regEAX & ~0xffff) | ((AH << 8) | AL);
                if (CF) this.setCF(); else this.clearCF();
                if (AF) this.setAF(); else this.clearAF();
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAA;   // AAA and AAS have the same cycle times
            };
            
            /**
             * op=0x40 (INC [E]AX)
             *
             * @this {X86CPU}
             */
            X86.opINCAX = function INCAX()
            {
                this.regEAX = X86.fnINCr.call(this, this.regEAX);
            };
            
            /**
             * op=0x41 (INC [E]CX)
             *
             * @this {X86CPU}
             */
            X86.opINCCX = function INCCX()
            {
                this.regECX = X86.fnINCr.call(this, this.regECX);
            };
            
            /**
             * op=0x42 (INC [E]DX)
             *
             * @this {X86CPU}
             */
            X86.opINCDX = function INCDX()
            {
                this.regEDX = X86.fnINCr.call(this, this.regEDX);
            };
            
            /**
             * op=0x43 (INC [E]BX)
             *
             * @this {X86CPU}
             */
            X86.opINCBX = function INCBX()
            {
                this.regEBX = X86.fnINCr.call(this, this.regEBX);
            };
            
            /**
             * op=0x44 (INC [E]SP)
             *
             * @this {X86CPU}
             */
            X86.opINCSP = function INCSP()
            {
                this.setSP(X86.fnINCr.call(this, this.getSP()));
            };
            
            /**
             * op=0x45 (INC [E]BP)
             *
             * @this {X86CPU}
             */
            X86.opINCBP = function INCBP()
            {
                this.regEBP = X86.fnINCr.call(this, this.regEBP);
            };
            
            /**
             * op=0x46 (INC [E]SI)
             *
             * @this {X86CPU}
             */
            X86.opINCSI = function INCSI()
            {
                this.regESI = X86.fnINCr.call(this, this.regESI);
            };
            
            /**
             * op=0x47 (INC [E]DI)
             *
             * @this {X86CPU}
             */
            X86.opINCDI = function INCDI()
            {
                this.regEDI = X86.fnINCr.call(this, this.regEDI);
            };
            
            /**
             * op=0x48 (DEC [E]AX)
             *
             * @this {X86CPU}
             */
            X86.opDECAX = function DECAX()
            {
                this.regEAX = X86.fnDECr.call(this, this.regEAX);
            };
            
            /**
             * op=0x49 (DEC [E]CX)
             *
             * @this {X86CPU}
             */
            X86.opDECCX = function DECCX()
            {
                this.regECX = X86.fnDECr.call(this, this.regECX);
            };
            
            /**
             * op=0x4A (DEC [E]DX)
             *
             * @this {X86CPU}
             */
            X86.opDECDX = function DECDX()
            {
                this.regEDX = X86.fnDECr.call(this, this.regEDX);
            };
            
            /**
             * op=0x4B (DEC [E]BX)
             *
             * @this {X86CPU}
             */
            X86.opDECBX = function DECBX()
            {
                this.regEBX = X86.fnDECr.call(this, this.regEBX);
            };
            
            /**
             * op=0x4C (DEC [E]SP)
             *
             * @this {X86CPU}
             */
            X86.opDECSP = function DECSP()
            {
                this.setSP(X86.fnDECr.call(this, this.getSP()));
            };
            
            /**
             * op=0x4D (DEC [E]BP)
             *
             * @this {X86CPU}
             */
            X86.opDECBP = function DECBP()
            {
                this.regEBP = X86.fnDECr.call(this, this.regEBP);
            };
            
            /**
             * op=0x4E (DEC [E]SI)
             *
             * @this {X86CPU}
             */
            X86.opDECSI = function DECSI()
            {
                this.regESI = X86.fnDECr.call(this, this.regESI);
            };
            
            /**`
             * op=0x4F (DEC [E]DI)
             *
             * @this {X86CPU}
             */
            X86.opDECDI = function DECDI()
            {
                this.regEDI = X86.fnDECr.call(this, this.regEDI);
            };
            
            /**
             * op=0x50 (PUSH [E]AX)
             *
             * @this {X86CPU}
             */
            X86.opPUSHAX = function PUSHAX()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH;
                }
                this.pushWord(this.regEAX & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x51 (PUSH [E]CX)
             *
             * @this {X86CPU}
             */
            X86.opPUSHCX = function PUSHCX()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiCL; this.backTrack.btiMemHi = this.backTrack.btiCH;
                }
                this.pushWord(this.regECX & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x52 (PUSH [E]DX)
             *
             * @this {X86CPU}
             */
            X86.opPUSHDX = function PUSHDX()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiDL; this.backTrack.btiMemHi = this.backTrack.btiDH;
                }
                this.pushWord(this.regEDX & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x53 (PUSH [E]BX)
             *
             * @this {X86CPU}
             */
            X86.opPUSHBX = function PUSHBX()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiBL; this.backTrack.btiMemHi = this.backTrack.btiBH;
                }
                this.pushWord(this.regEBX & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x54 (PUSH SP)
             *
             * @this {X86CPU}
             */
            X86.opPUSHSP_8086 = function PUSHSP_8086()
            {
                var w = (this.getSP() - 2) & 0xffff;
                this.pushWord(w);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x54 (PUSH [E]SP)
             *
             * @this {X86CPU}
             */
            X86.opPUSHSP = function PUSHSP()
            {
                this.pushWord(this.getSP() & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x55 (PUSH [E]BP)
             *
             * @this {X86CPU}
             */
            X86.opPUSHBP = function PUSHBP()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiBPLo; this.backTrack.btiMemHi = this.backTrack.btiBPHi;
                }
                this.pushWord(this.regEBP & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x56 (PUSH [E]SI)
             *
             * @this {X86CPU}
             */
            X86.opPUSHSI = function PUSHSI()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiSILo; this.backTrack.btiMemHi = this.backTrack.btiSIHi;
                }
                this.pushWord(this.regESI & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x57 (PUSH [E]DI)
             *
             * @this {X86CPU}
             */
            X86.opPUSHDI = function PUSHDI()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiDILo; this.backTrack.btiMemHi = this.backTrack.btiDIHi;
                }
                this.pushWord(this.regEDI & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x58 (POP [E]AX)
             *
             * @this {X86CPU}
             */
            X86.opPOPAX = function POPAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x59 (POP [E]CX)
             *
             * @this {X86CPU}
             */
            X86.opPOPCX = function POPCX()
            {
                this.regECX = (this.regECX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiCL = this.backTrack.btiMemLo; this.backTrack.btiCH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x5A (POP [E]DX)
             *
             * @this {X86CPU}
             */
            X86.opPOPDX = function POPDX()
            {
                this.regEDX = (this.regEDX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiDL = this.backTrack.btiMemLo; this.backTrack.btiDH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x5B (POP [E]BX)
             *
             * @this {X86CPU}
             */
            X86.opPOPBX = function POPBX()
            {
                this.regEBX = (this.regEBX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiBL = this.backTrack.btiMemLo; this.backTrack.btiBH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x5C (POP [E]SP)
             *
             * @this {X86CPU}
             */
            X86.opPOPSP = function POPSP()
            {
                this.setSP((this.getSP() & ~this.dataMask) | this.popWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x5D (POP [E]BP)
             *
             * @this {X86CPU}
             */
            X86.opPOPBP = function POPBP()
            {
                this.regEBP = (this.regEBP & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiBPLo = this.backTrack.btiMemLo; this.backTrack.btiBPHi = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x5E (POP [E]SI)
             *
             * @this {X86CPU}
             */
            X86.opPOPSI = function POPSI()
            {
                this.regESI = (this.regESI & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiSILo = this.backTrack.btiMemLo; this.backTrack.btiSIHi = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x5F (POP [E]DI)
             *
             * @this {X86CPU}
             */
            X86.opPOPDI = function POPDI()
            {
                this.regEDI = (this.regEDI & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiDILo = this.backTrack.btiMemLo; this.backTrack.btiDIHi = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x60 (PUSHA) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opPUSHA = function PUSHA()
            {
                /*
                 * TODO: regLSP needs to be pre-bounds-checked against regLSPLimitLow
                 */
                var temp = this.getSP() & this.dataMask;
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH;
                }
                this.pushWord(this.regEAX & this.dataMask);
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiCL; this.backTrack.btiMemHi = this.backTrack.btiCH;
                }
                this.pushWord(this.regECX & this.dataMask);
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiDL; this.backTrack.btiMemHi = this.backTrack.btiDH;
                }
                this.pushWord(this.regEDX & this.dataMask);
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiBL; this.backTrack.btiMemHi = this.backTrack.btiBH;
                }
                this.pushWord(this.regEBX & this.dataMask);
                this.pushWord(temp);
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiBPLo; this.backTrack.btiMemHi = this.backTrack.btiBPHi;
                }
                this.pushWord(this.regEBP & this.dataMask);
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiSILo; this.backTrack.btiMemHi = this.backTrack.btiSIHi;
                }
                this.pushWord(this.regESI & this.dataMask);
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiDILo; this.backTrack.btiMemHi = this.backTrack.btiDIHi;
                }
                this.pushWord(this.regEDI & this.dataMask);
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushAll;
            };
            
            /**
             * op=0x61 (POPA) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opPOPA = function POPA()
            {
                this.regEDI = (this.regEDI & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiDILo = this.backTrack.btiMemLo; this.backTrack.btiDIHi = this.backTrack.btiMemHi;
                }
                this.regESI = (this.regESI & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiSILo = this.backTrack.btiMemLo; this.backTrack.btiSIHi = this.backTrack.btiMemHi;
                }
                this.regEBP = (this.regEBP & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiBPLo = this.backTrack.btiMemLo; this.backTrack.btiBPHi = this.backTrack.btiMemHi;
                }
                /*
                 * TODO: regLSP needs to be pre-bounds-checked against regLSPLimit at the start
                 */
                this.setSP(this.getSP() + this.dataSize);
                // this.regLSP += (I386? this.dataSize : 2);
                this.regEBX = (this.regEBX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiBL = this.backTrack.btiMemLo; this.backTrack.btiBH = this.backTrack.btiMemHi;
                }
                this.regEDX = (this.regEDX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiDL = this.backTrack.btiMemLo; this.backTrack.btiDH = this.backTrack.btiMemHi;
                }
                this.regECX = (this.regECX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiCL = this.backTrack.btiMemLo; this.backTrack.btiCH = this.backTrack.btiMemHi;
                }
                this.regEAX = (this.regEAX & ~this.dataMask) | this.popWord();
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopAll;
            };
            
            /**
             * op=0x62 (BOUND reg,word) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opBOUND = function BOUND()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnBOUND);
            };
            
            /**
             * op=0x63 (ARPL word,reg) (80286 and up)
             *
             * @this {X86CPU}
             */
            X86.opARPL = function ARPL()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnARPL);
            };
            
            /**
             * op=0x64 (FS:)
             *
             * @this {X86CPU}
             */
            X86.opFS = function FS()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with SEG is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.SEG | X86.OPFLAG.NOINTR;
                this.segData = this.segStack = this.segFS;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
                this.stopCPU();
            };
            
            /**
             * op=0x65 (GS:)
             *
             * @this {X86CPU}
             */
            X86.opGS = function GS()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with SEG is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.SEG | X86.OPFLAG.NOINTR;
                this.segData = this.segStack = this.segGS;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
                this.stopCPU();
            };
            
            /**
             * op=0x66 (OS:) (80386 and up)
             *
             * TODO: Review other effective operand-size criteria, cycle count, etc.
             *
             * @this {X86CPU}
             */
            X86.opOS = function OS()
            {
                if (I386) {
                    this.opFlags |= X86.OPFLAG.DATASIZE;
                    this.dataSize ^= 0x6;               // that which is 2 shall become 4, and vice versa
                    this.dataMask ^= (0xffff0000|0);    // that which is 0x0000ffff shall become 0xffffffff, and vice versa
                    this.updateDataSize();
                    this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
                }
            };
            
            /**
             * op=0x67 (AS:) (80386 and up)
             *
             * TODO: Review other effective address-size criteria, cycle count, etc.
             *
             * @this {X86CPU}
             */
            X86.opAS = function AS()
            {
                if (I386) {
                    this.opFlags |= X86.OPFLAG.ADDRSIZE;
                    this.addrSize ^= 0x06;              // that which is 2 shall become 4, and vice versa
                    this.addrMask ^= (0xffff0000|0);    // that which is 0x0000ffff shall become 0xffffffff, and vice versa
                    this.updateAddrSize();
                    this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
                }
            };
            
            /**
             * op=0x68 (PUSH imm) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opPUSHn = function PUSHn()
            {
                this.pushWord(this.getIPWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x69 (IMUL reg,word,imm) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opIMULn = function IMULn()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnIMULn);
            };
            
            /**
             * op=0x6A (PUSH imm8) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opPUSH8 = function PUSH8()
            {
                if (BACKTRACK) this.backTrack.btiMemHi = 0;
                this.pushWord(this.getIPByte());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x6B (IMUL reg,word,imm8) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opIMUL8 = function IMUL8()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnIMUL8);
            };
            
            /**
             * op=0x6C (INSB) (80186/80188 and up)
             *
             * NOTE: Segment overrides are ignored for this instruction, so we must use segES instead of segData.
             *
             * @this {X86CPU}
             */
            X86.opINSb = function INSb()
            {
                var nReps = 1;
                var nDelta = 0;
            
                /*
                 * NOTE: 5 + 4n is the cycle time for the 80286; the 80186/80188 has different values: 14 cycles for
                 * an unrepeated INS, and 8 + 8n for a repeated INS.  However, accurate cycle times for the 80186/80188 is
                 * low priority.
                 */
                var nCycles = 5;
            
                /*
                 * The (normal) REP prefix, if used, is REPNZ (0xf2), but either one works....
                 */
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    if (this.opPrefixes & X86.OPFLAG.REPEAT) nCycles = 4;
                }
            
                if (nReps--) {
                    var b = this.bus.checkPortInputNotify(this.regEDX, this.regLIP - nDelta - 1);
                    if (BACKTRACK) this.backTrack.btiMemLo = this.backTrack.btiIO;
                    this.setSOByte(this.segES, this.regEDI & this.addrMask, b);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + ((this.regPS & X86.PS.DF)? -1 : 1)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0x6D (INSW) (80186/80188 and up)
             *
             * NOTE: Segment overrides are ignored for this instruction, so we must use segDS instead of segData.
             *
             * @this {X86CPU}
             */
            X86.opINSw = function INSw()
            {
                var nReps = 1;
                var nDelta = 0;
            
                /*
                 * NOTE: 5 + 4n is the cycle time for the 80286; the 80186/80188 has different values: 14 cycles for
                 * an unrepeated INS, and 8 + 8n for a repeated INS.  However, accurate cycle times for the 80186/80188 is
                 * low priority.
                 */
                var nCycles = 5;
            
                /*
                 * The (normal) REP prefix, if used, is REPNZ (0xf2), but either one works....
                 */
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    if (this.opPrefixes & X86.OPFLAG.REPEAT) nCycles = 4;
                }
                if (nReps--) {
                    var addrFrom = this.regLIP - nDelta - 1;
                    var w = 0, shift = 0;
                    for (var n = 0; n < this.dataSize; n++) {
                        w |= this.bus.checkPortInputNotify(this.regEDX, addrFrom) << shift;
                        shift += 8;
                        if (BACKTRACK) {
                            if (!n) {
                                this.backTrack.btiMemLo = this.backTrack.btiIO;
                            } else if (n == 1) {
                                this.backTrack.btiMemHi = this.backTrack.btiIO;
                            }
                        }
                    }
                    this.setSOWord(this.segES, this.regEDI & this.addrMask, w);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0x6E (OUTSB) (80186/80188 and up)
             *
             * NOTE: Segment overrides are ignored for this instruction, so we must use segDS instead of segData.
             *
             * @this {X86CPU}
             */
            X86.opOUTSb = function OUTSb()
            {
                var nReps = 1;
                var nDelta = 0;
            
                /*
                 * NOTE: 5 + 4n is the cycle time for the 80286; the 80186/80188 has different values: 14 cycles for
                 * an unrepeated INS, and 8 + 8n for a repeated INS.  TODO: Fix this someday.
                 */
                var nCycles = 5;
            
                /*
                 * The (normal) REP prefix, if used, is REPNZ (0xf2), but either one works....
                 */
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    if (this.opPrefixes & X86.OPFLAG.REPEAT) nCycles = 4;
                }
                if (nReps--) {
                    var b = this.getSOByte(this.segDS, this.regESI & this.addrMask);
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + ((this.regPS & X86.PS.DF)? -1 : 1)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    if (BACKTRACK) this.backTrack.btiIO = this.backTrack.btiMemLo;
                    this.bus.checkPortOutputNotify(this.regEDX, b, this.regLIP - nDelta - 1);
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0x6F (OUTSW) (80186/80188 and up)
             *
             * NOTE: Segment overrides are ignored for this instruction, so we must use segDS instead of segData.
             *
             * @this {X86CPU}
             */
            X86.opOUTSw = function OUTSw()
            {
                var nReps = 1;
                var nDelta = 0;
            
                /*
                 * NOTE: 5 + 4n is the cycle time for the 80286; the 80186/80188 has different values: 14 cycles for
                 * an unrepeated INS, and 8 + 8n for a repeated INS.  TODO: Fix this someday.
                 */
                var nCycles = 5;
            
                /*
                 * The (normal) REP prefix, if used, is REPNZ (0xf2), but either one works....
                 */
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    if (this.opPrefixes & X86.OPFLAG.REPEAT) nCycles = 4;
                }
                if (nReps--) {
                    var w = this.getSOWord(this.segDS, this.regESI & this.addrMask);
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    var addrFrom = this.regLIP - nDelta - 1, shift = 0;
                    for (var n = 0; n < this.dataSize; n++) {
                        if (BACKTRACK) {
                            if (!n) {
                                this.backTrack.btiIO = this.backTrack.btiMemLo;
                            } else if (n == 1) {
                                this.backTrack.btiIO = this.backTrack.btiMemHi;
                            }
                        }
                        this.bus.checkPortOutputNotify(this.regEDX, (w >> shift) & 0xff, addrFrom);
                        shift += 8;
                    }
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0x70 (JO disp)
             *
             * @this {X86CPU}
             */
            X86.opJO = function JO()
            {
                var disp = this.getIPDisp();
                if (this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x71 (JNO disp)
             *
             * @this {X86CPU}
             */
            X86.opJNO = function JNO()
            {
                var disp = this.getIPDisp();
                if (!this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x72 (JC disp, aka JB disp)
             *
             * @this {X86CPU}
             */
            X86.opJC = function JC()
            {
                var disp = this.getIPDisp();
                if (this.getCF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x73 (JNC disp, aka JAE disp)
             *
             * @this {X86CPU}
             */
            X86.opJNC = function JNC()
            {
                var disp = this.getIPDisp();
                if (!this.getCF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x74 (JZ disp)
             *
             * @this {X86CPU}
             */
            X86.opJZ = function JZ()
            {
                var disp = this.getIPDisp();
                if (this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x75 (JNZ disp)
             *
             * @this {X86CPU}
             */
            X86.opJNZ = function JNZ()
            {
                var disp = this.getIPDisp();
                if (!this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x76 (JBE disp)
             *
             * @this {X86CPU}
             */
            X86.opJBE = function JBE()
            {
                var disp = this.getIPDisp();
                if (this.getCF() || this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x77 (JNBE disp, JA disp)
             *
             * @this {X86CPU}
             */
            X86.opJNBE = function JNBE()
            {
                var disp = this.getIPDisp();
                if (!this.getCF() && !this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x78 (JS disp)
             *
             * @this {X86CPU}
             */
            X86.opJS = function JS()
            {
                var disp = this.getIPDisp();
                if (this.getSF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x79 (JNS disp)
             *
             * @this {X86CPU}
             */
            X86.opJNS = function JNS()
            {
                var disp = this.getIPDisp();
                if (!this.getSF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x7A (JP disp)
             *
             * @this {X86CPU}
             */
            X86.opJP = function JP()
            {
                var disp = this.getIPDisp();
                if (this.getPF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x7B (JNP disp)
             *
             * @this {X86CPU}
             */
            X86.opJNP = function JNP()
            {
                var disp = this.getIPDisp();
                if (!this.getPF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x7C (JL disp)
             *
             * @this {X86CPU}
             */
            X86.opJL = function JL()
            {
                var disp = this.getIPDisp();
                if (!this.getSF() != !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x7D (JNL disp, aka JGE disp)
             *
             * @this {X86CPU}
             */
            X86.opJNL = function JNL()
            {
                var disp = this.getIPDisp();
                if (!this.getSF() == !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x7E (JLE disp)
             *
             * @this {X86CPU}
             */
            X86.opJLE = function JLE()
            {
                var disp = this.getIPDisp();
                if (this.getZF() || !this.getSF() != !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x7F (JNLE disp, aka JG disp)
             *
             * @this {X86CPU}
             */
            X86.opJNLE = function JNLE()
            {
                var disp = this.getIPDisp();
                if (!this.getZF() && !this.getSF() == !this.getOF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesJmpC;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpCFall;
            };
            
            /**
             * op=0x80/0x82 (GRP1 byte,imm8)
             *
             * @this {X86CPU}
             */
            X86.opGRP1b = function GRP1b()
            {
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrp1b, this.getIPByte);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? 1 : this.cycleCounts.nOpCyclesArithMID);
            };
            
            /**
             * op=0x81 (GRP1 word,imm)
             *
             * @this {X86CPU}
             */
            X86.opGRP1w = function GRP1w()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrp1w, this.getIPWord);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? 1 : this.cycleCounts.nOpCyclesArithMID);
            };
            
            /**
             * op=0x83 (GRP1 word,disp)
             *
             * @this {X86CPU}
             */
            X86.opGRP1sw = function GRP1sw()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrp1w, this.getIPDisp);
                this.nStepCycles -= (this.regEAWrite === X86.ADDR_INVALID? 1 : this.cycleCounts.nOpCyclesArithMID);
            };
            
            /**
             * op=0x84 (TEST reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opTESTrb = function TESTrb()
            {
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnTESTb);
            };
            
            /**
             * op=0x85 (TEST reg,word)
             *
             * @this {X86CPU}
             */
            X86.opTESTrw = function TESTrw()
            {
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnTESTw);
            };
            
            /**
             * op=0x86 (XCHG reg,byte)
             *
             * NOTE: The XCHG instruction is unique in that both src and dst are both read and written;
             * see fnXCHGrb() for how we deal with this special case.
             *
             * @this {X86CPU}
             */
            X86.opXCHGrb = function XCHGrb()
            {
                /*
                 * If the second operand is a register, then the ModRegByte decoder must use separate "get" and
                 * "set" assignments, otherwise instructions like "XCHG DH,DL" will end up using a stale DL instead of
                 * the updated DL.
                 *
                 * To be clear, a single assignment like this will fail:
                 *
                 *      opModRegByteF2: function(fn)
            {
                 *          this.regEDX = (this.regEDX & 0xff) | (fn.call(this, this.regEDX >> 8, this.regEDX & 0xff) << 8);
                 *      }
                 *
                 * which is why all affected decoders now use separate assignments; eg:
                 *
                 *      opModRegByteF2: function(fn)
            {
                 *          var b = fn.call(this, this.regEDX >> 8, this.regEDX & 0xff);
                 *          this.regEDX = (this.regEDX & 0xff) | (b << 8);
                 *      }
                 */
                this.aOpModRegByte[this.bModRM = this.getIPByte()].call(this, X86.fnXCHGrb);
            };
            
            /**
             * op=0x87 (XCHG reg,word)
             *
             * NOTE: The XCHG instruction is unique in that both src and dst are both read and written;
             * see fnXCHGrw() for how we deal with this special case.
             *
             * @this {X86CPU}
             */
            X86.opXCHGrw = function XCHGrw()
            {
                this.aOpModRegWord[this.bModRM = this.getIPByte()].call(this, X86.fnXCHGrw);
            };
            
            /**
             * op=0x88 (MOV byte,reg)
             *
             * @this {X86CPU}
             */
            X86.opMOVmb = function MOVmb()
            {
                /*
                 * Like other MOV operations, the destination does not need to be read, just written.
                 */
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModMemByte[this.getIPByte()].call(this, X86.fnMOV);
            };
            
            /**
             * op=0x89 (MOV word,reg)
             *
             * @this {X86CPU}
             */
            X86.opMOVmw = function MOVmw()
            {
                /*
                 * Like other MOV operations, the destination does not need to be read, just written.
                 */
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModMemWord[this.getIPByte()].call(this, X86.fnMOV);
            };
            
            /**
             * op=0x8A (MOV reg,byte)
             *
             * @this {X86CPU}
             */
            X86.opMOVrb = function MOVrb()
            {
                this.aOpModRegByte[this.getIPByte()].call(this, X86.fnMOV);
            };
            
            /**
             * op=0x8B (MOV reg,word)
             *
             * @this {X86CPU}
             */
            X86.opMOVrw = function MOVrw()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnMOV);
            };
            
            /**
             * op=0x8C (MOV word,sreg)
             *
             * NOTE: Since the ModRM decoders deal only with general-purpose registers, we must move
             * the appropriate segment register into a special variable (regXX), which our helper function
             * (fnMOVxx) will use to replace the decoder's src operand.
             *
             * @this {X86CPU}
             */
            X86.opMOVwsr = function MOVwsr()
            {
                var bModRM = this.getIPByte();
                var reg = (bModRM & 0x38) >> 3;
                switch (reg) {
                case 0x0:
                    this.regXX = this.segES.sel;
                    break;
                case 0x1:
                    this.regXX = this.segCS.sel;
                    break;
                case 0x2:
                    this.regXX = this.segSS.sel;
                    break;
                case 0x3:
                    this.regXX = this.segDS.sel;
                    break;
                case 0x4:
                    if (I386 && this.model >= X86.MODEL_80386) {
                        this.regXX = this.segFS.sel;
                        break;
                    }
                    X86.opInvalid.call(this);
                    break;
                case 0x5:
                    if (I386 && this.model >= X86.MODEL_80386) {
                        this.regXX = this.segGS.sel;
                        break;
                    }
                    /* falls through */
                default:
                    X86.opInvalid.call(this);
                    break;
                }
                /*
                 * Like other MOV operations, the destination does not need to be read, just written.
                 */
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModMemWord[bModRM].call(this, X86.fnMOVxx);
            };
            
            /**
             * op=0x8D (LEA reg,word)
             *
             * @this {X86CPU}
             */
            X86.opLEA = function LEA()
            {
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.segData = this.segStack = this.segNULL;    // we can't have the EA calculation, if any, "polluted" by segment arithmetic
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLEA);
            };
            
            /**
             * op=0x8E (MOV sreg,word)
             *
             * NOTE: Since the ModRM decoders deal only with general-purpose registers, we have to
             * make a note of which general-purpose register will be overwritten, so that we can restore it
             * after moving the modified value to the correct segment register.
             *
             * @this {X86CPU}
             */
            X86.opMOVsrw = function MOVsrw()
            {
                var temp;
                var bModRM = this.getIPByte();
                var reg = (bModRM & 0x38) >> 3;
                switch(reg) {
                case 0x0:
                    temp = this.regEAX;
                    break;
                case 0x2:
                    temp = this.regEDX;
                    break;
                case 0x3:
                    temp = this.regEBX;
                    break;
                default:
                    if (this.model == X86.MODEL_80286 || this.model == X86.MODEL_80386 && reg != 0x4 && reg != 0x5) {
                        X86.opInvalid.call(this);
                        return;
                    }
                    switch(reg) {
                    case 0x1:           // MOV to CS is undocumented on 8086/8088/80186/80188, and invalid on 80286 and up
                        temp = this.regECX;
                        break;
                    case 0x4:           // this form of MOV to ES is undocumented on 8086/8088/80186/80188, invalid on 80286, and uses FS starting with 80386
                        temp = this.getSP();
                        break;
                    case 0x5:           // this form of MOV to CS is undocumented on 8086/8088/80186/80188, invalid on 80286, and uses GS starting with 80386
                        temp = this.regEBP;
                        break;
                    case 0x6:           // this form of MOV to SS is undocumented on 8086/8088/80186/80188, invalid on 80286 and up
                        temp = this.regESI;
                        break;
                    case 0x7:           // this form of MOV to DS is undocumented on 8086/8088/80186/80188, invalid on 80286 and up
                        temp = this.regEDI;
                        break;
                    default:
                        break;
                    }
                    break;
                }
                this.aOpModRegWord[bModRM].call(this, X86.fnMOV);
                switch (reg) {
                case 0x0:
                    this.setES(this.regEAX);
                    this.regEAX = temp;
                    break;
                case 0x1:
                    this.setCS(this.regECX);
                    this.regECX = temp;
                    break;
                case 0x2:
                    this.setSS(this.regEDX);
                    this.regEDX = temp;
                    break;
                case 0x3:
                    this.setDS(this.regEBX);
                    this.regEBX = temp;
                    break;
                case 0x4:
                    if (I386 && this.model >= X86.MODEL_80386) {
                        this.setFS(this.getSP());
                    } else {
                        this.setES(this.getSP());
                    }
                    this.setSP(temp);
                    break;
                case 0x5:
                    if (I386 && this.model >= X86.MODEL_80386) {
                        this.setGS(this.regEBP);
                    } else {
                        this.setCS(this.regEBP);
                    }
                    this.regEBP = temp;
                    break;
                case 0x6:
                    this.setSS(this.regESI);
                    this.regESI = temp;
                    break;
                case 0x7:
                    this.setDS(this.regEDI);
                    this.regEDI = temp;
                    break;
                }
            };
            
            /**
             * op=0x8F (POP word)
             *
             * @this {X86CPU}
             */
            X86.opPOPmw = function POPmw()
            {
                /*
                 * Like other MOV operations, the destination does not need to be read, just written.
                 */
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrpPOPw, this.popWord);
            };
            
            /**
             * op=0x90 (NOP, aka XCHG AX,AX)
             *
             * @this {X86CPU}
             */
            X86.opNOP = function NOP()
            {
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x91 (XCHG AX,CX)
             *
             * @this {X86CPU}
             */
            X86.opXCHGCX = function XCHGCX()
            {
                var temp = this.regEAX;
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (this.regECX & this.dataMask) : this.regECX);
                this.regECX = (I386? (this.regECX & ~this.dataMask) | (temp & this.dataMask) : temp);
                if (BACKTRACK) {
                    temp = this.backTrack.btiAL; this.backTrack.btiAL = this.backTrack.btiCL; this.backTrack.btiCL = temp;
                    temp = this.backTrack.btiAH; this.backTrack.btiAH = this.backTrack.btiCH; this.backTrack.btiCH = temp;
                }
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x92 (XCHG AX,DX)
             *
             * @this {X86CPU}
             */
            X86.opXCHGDX = function XCHGDX()
            {
                var temp = this.regEAX;
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (this.regEDX & this.dataMask) : this.regEDX);
                this.regEDX = (I386? (this.regEDX & ~this.dataMask) | (temp & this.dataMask) : temp);
                if (BACKTRACK) {
                    temp = this.backTrack.btiAL; this.backTrack.btiAL = this.backTrack.btiDL; this.backTrack.btiDL = temp;
                    temp = this.backTrack.btiAH; this.backTrack.btiAH = this.backTrack.btiDH; this.backTrack.btiDH = temp;
                }
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x93 (XCHG AX,BX)
             *
             * @this {X86CPU}
             */
            X86.opXCHGBX = function XCHGBX()
            {
                var temp = this.regEAX;
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (this.regEBX & this.dataMask) : this.regEBX);
                this.regEBX = (I386? (this.regEBX & ~this.dataMask) | (temp & this.dataMask) : temp);
                if (BACKTRACK) {
                    temp = this.backTrack.btiAL; this.backTrack.btiAL = this.backTrack.btiBL; this.backTrack.btiBL = temp;
                    temp = this.backTrack.btiAH; this.backTrack.btiAH = this.backTrack.btiBH; this.backTrack.btiBH = temp;
                }
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x94 (XCHG AX,SP)
             *
             * @this {X86CPU}
             */
            X86.opXCHGSP = function XCHGSP()
            {
                var temp = this.regEAX;
                var regESP = this.getSP();
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (regESP & this.dataMask) : regESP);
                this.setSP((I386? (regESP & ~this.dataMask) | (temp & this.dataMask) : temp));
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiAH = 0;
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x95 (XCHG AX,BP)
             *
             * @this {X86CPU}
             */
            X86.opXCHGBP = function XCHGBP()
            {
                var temp = this.regEAX;
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (this.regEBP & this.dataMask) : this.regEBP);
                this.regEBP = (I386? (this.regEBP & ~this.dataMask) | (temp & this.dataMask) : temp);
                if (BACKTRACK) {
                    temp = this.backTrack.btiAL; this.backTrack.btiAL = this.backTrack.btiBPLo; this.backTrack.btiBPLo = temp;
                    temp = this.backTrack.btiAH; this.backTrack.btiAH = this.backTrack.btiBPHi; this.backTrack.btiBPHi = temp;
                }
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x96 (XCHG AX,SI)
             *
             * @this {X86CPU}
             */
            X86.opXCHGSI = function XCHGSI()
            {
                var temp = this.regEAX;
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (this.regESI & this.dataMask) : this.regESI);
                this.regESI = (I386? (this.regESI & ~this.dataMask) | (temp & this.dataMask) : temp);
                if (BACKTRACK) {
                    temp = this.backTrack.btiAL; this.backTrack.btiAL = this.backTrack.btiSILo; this.backTrack.btiSILo = temp;
                    temp = this.backTrack.btiAH; this.backTrack.btiAH = this.backTrack.btiSIHi; this.backTrack.btiSIHi = temp;
                }
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x97 (XCHG AX,DI)
             *
             * @this {X86CPU}
             */
            X86.opXCHGDI = function XCHGDI()
            {
                var temp = this.regEAX;
                this.regEAX = (I386? (this.regEAX & ~this.dataMask) | (this.regEDI & this.dataMask) : this.regEDI);
                this.regEDI = (I386? (this.regEDI & ~this.dataMask) | (temp & this.dataMask) : temp);
                if (BACKTRACK) {
                    temp = this.backTrack.btiAL; this.backTrack.btiAL = this.backTrack.btiDILo; this.backTrack.btiDILo = temp;
                    temp = this.backTrack.btiAH; this.backTrack.btiAH = this.backTrack.btiDIHi; this.backTrack.btiDIHi = temp;
                }
                this.nStepCycles -= 3;                          // this form of XCHG takes 3 cycles on all CPUs
            };
            
            /**
             * op=0x98 (CBW/CWDE)
             *
             * NOTE: The 16-bit form (CBW) sign-extends AL into AX, whereas the 32-bit form (CWDE) sign-extends AX into EAX;
             * CWDE is similar to CWD, except that the destination is EAX rather than DX:AX.
             *
             * @this {X86CPU}
             */
            X86.opCBW = function CBW()
            {
                if (this.dataSize == 2) {   // CBW
                    this.regEAX = (this.regEAX & ~0xffff) | (((this.regEAX << 24) >> 24) & 0xffff);
                    if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiAL;
                }
                else {                      // CWDE
                    this.regEAX = ((this.regEAX << 16) >> 16);
                }
                this.nStepCycles -= 2;                          // CBW takes 2 cycles on all CPUs through 80286
            };
            
            /**
             * op=0x99 (CWD/CDQ)
             *
             * NOTE: The 16-bit form (CWD) sign-extends AX, producing a 32-bit result in DX:AX, while the 32-bit form (CDQ)
             * sign-extends EAX, producing a 64-bit result in EDX:EAX.
             *
             * @this {X86CPU}
             */
            X86.opCWD = function CWD()
            {
                if (this.dataSize == 2) {   // CWD
                    this.regEDX = (this.regEDX & ~0xffff) | ((this.regEAX & 0x8000)? 0xffff : 0);
                    if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiDH = this.backTrack.btiAH;
                }
                else {                      // CDQ
                    this.regEDX = (this.regEAX & (0x80000000|0))? -1 : 0;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesCWD;
            };
            
            /**
             * op=0x9A (CALL seg:off)
             *
             * @this {X86CPU}
             */
            X86.opCALLF = function CALLF()
            {
                X86.fnCALLF.call(this, this.getIPWord(), this.getIPShort());
                this.nStepCycles -= this.cycleCounts.nOpCyclesCallF;
            };
            
            /**
             * op=0x9B (WAIT)
             *
             * @this {X86CPU}
             */
            X86.opWAIT = function WAIT()
            {
                this.printMessage("WAIT not implemented");
                this.nStepCycles--;
            };
            
            /**
             * op=0x9C (PUSHF)
             *
             * @this {X86CPU}
             */
            X86.opPUSHF = function PUSHF()
            {
                this.pushWord(this.getPS());
                this.nStepCycles -= this.cycleCounts.nOpCyclesPushReg;
            };
            
            /**
             * op=0x9D (POPF)
             *
             * @this {X86CPU}
             */
            X86.opPOPF = function POPF()
            {
                this.setPS(this.popWord());
                /*
                 * NOTE: I'm assuming that neither POPF nor IRET are required to set NOINTR like STI does.
                 */
                this.nStepCycles -= this.cycleCounts.nOpCyclesPopReg;
            };
            
            /**
             * op=0x9E (SAHF)
             *
             * @this {X86CPU}
             */
            X86.opSAHF = function SAHF()
            {
                /*
                 * NOTE: While it make seem more efficient to do this:
                 *
                 *      this.setPS((this.getPS() & ~X86.PS_SAHF) | ((this.regEAX >> 8) & X86.PS_SAHF));
                 *
                 * getPS() forces any "cached" flags to be resolved first, and setPS() must do extra work above
                 * and beyond setting the arithmetic and logical flags, so on balance, the code below may be more
                 * efficient, and may also avoid unexpected side-effects of updating the entire PS register.
                 */
                var ah = (this.regEAX >> 8) & 0xff;
                if (ah & X86.PS.CF) this.setCF(); else this.clearCF();
                if (ah & X86.PS.PF) this.setPF(); else this.clearPF();
                if (ah & X86.PS.AF) this.setAF(); else this.clearAF();
                if (ah & X86.PS.ZF) this.setZF(); else this.clearZF();
                if (ah & X86.PS.SF) this.setSF(); else this.clearSF();
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
                this.assert((this.getPS() & X86.PS_SAHF) == (ah & X86.PS_SAHF));
            };
            
            /**
             * op=0x9F (LAHF)
             *
             * @this {X86CPU}
             */
            X86.opLAHF = function LAHF()
            {
                this.regEAX = (this.regEAX & ~0xff00) | (this.getPS() & X86.PS_SAHF) << 8;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xA0 (MOV AL,mem)
             *
             * @this {X86CPU}
             */
            X86.opMOVALm = function MOVALm()
            {
                this.regEAX = (this.regEAX & ~0xff) | this.getSOByte(this.segData, this.getIPAddr());
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesMovAM;
            };
            
            /**
             * op=0xA1 (MOV [E]AX,mem)
             *
             * @this {X86CPU}
             */
            X86.opMOVAXm = function MOVAXm()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | this.getSOWord(this.segData, this.getIPAddr());
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesMovAM;
            };
            
            /**
             * op=0xA2 (MOV mem,AL)
             *
             * @this {X86CPU}
             */
            X86.opMOVmAL = function MOVmAL()
            {
                if (BACKTRACK) this.backTrack.btiMemLo = this.backTrack.btiAL;
                /*
                 * setSOByte() truncates the value as appropriate
                 */
                this.setSOByte(this.segData, this.getIPAddr(), this.regEAX);
                this.nStepCycles -= this.cycleCounts.nOpCyclesMovMA;
            };
            
            /**
             * op=0xA3 (MOV mem,AX)
             *
             * @this {X86CPU}
             */
            X86.opMOVmAX = function MOVmAX()
            {
                if (BACKTRACK) {
                    this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH;
                }
                /*
                 * setSOWord() truncates the value as appropriate
                 */
                this.setSOWord(this.segData, this.getIPAddr(), this.regEAX);
                this.nStepCycles -= this.cycleCounts.nOpCyclesMovMA;
            };
            
            /**
             * op=0xA4 (MOVSB)
             *
             * @this {X86CPU}
             */
            X86.opMOVSb = function MOVSb()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesMovS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesMovSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesMovSr0;
                }
                if (nReps--) {
                    var nInc = ((this.regPS & X86.PS.DF)? -1 : 1);
                    this.setSOByte(this.segES, this.regEDI & this.addrMask, this.getSOByte(this.segData, this.regESI));
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + nInc) & this.addrMask);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + nInc) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(((this.opPrefixes & X86.OPFLAG.SEG)? -3 : -2));
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xA5 (MOVSW)
             *
             * @this {X86CPU}
             */
            X86.opMOVSw = function MOVSw()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesMovS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesMovSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesMovSr0;
                }
                if (nReps--) {
                    var nInc = ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize);
                    this.setSOWord(this.segES, this.regEDI & this.addrMask, this.getSOWord(this.segData, this.regESI));
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + nInc) & this.addrMask);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + nInc) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(((this.opPrefixes & X86.OPFLAG.SEG)? -3 : -2));
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xA6 (CMPSB)
             *
             * @this {X86CPU}
             */
            X86.opCMPSb = function CMPSb()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesCmpS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesCmpSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesCmpSr0;
                }
                if (nReps--) {
                    var nInc = ((this.regPS & X86.PS.DF)? -1 : 1);
                    var bDst = this.getEAByte(this.segData, this.regESI & this.addrMask);
                    var bSrc = this.modEAByte(this.segES, this.regEDI & this.addrMask);
                    X86.fnCMPb.call(this, bDst, bSrc);
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + nInc) & this.addrMask);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + nInc) & this.addrMask);
                    /*
                     * NOTE: As long as we're calling fnCMPb(), all our cycle times must be reduced by nOpCyclesArithRM
                     */
                    this.nStepCycles -= nCycles - this.cycleCounts.nOpCyclesArithRM;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    /*
                     * Repetition continues while ZF matches bit 0 of the REP prefix.  getZF() returns 0x40 if ZF is
                     * set, and OP_REPZ (which represents the REP prefix whose bit 0 is set) is 0x40 as well, so when those
                     * two values are equal, we must continue.
                     */
                    if (nReps && this.getZF() == (this.opPrefixes & X86.OPFLAG.REPZ)) {
                        if (BUGS_8086) {
                            this.rewindIP(((this.opPrefixes & X86.OPFLAG.SEG)? -3 : -2));
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xA7 (CMPSW)
             *
             * @this {X86CPU}
             */
            X86.opCMPSw = function CMPSw()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesCmpS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesCmpSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesCmpSr0;
                }
                if (nReps--) {
                    var nInc = ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize);
                    var wDst = this.getEAWord(this.segData, this.regESI & this.addrMask);
                    var wSrc = this.modEAWord(this.segES, this.regEDI & this.addrMask);
                    X86.fnCMPw.call(this, wDst, wSrc);
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + nInc) & this.addrMask);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + nInc) & this.addrMask);
                    /*
                     * NOTE: As long as we're calling fnCMPw(), all our cycle times must be reduced by nOpCyclesArithRM
                     */
                    this.nStepCycles -= nCycles - this.cycleCounts.nOpCyclesArithRM;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    /*
                     * Repetition continues while ZF matches bit 0 of the REP prefix.  getZF() returns 0x40 if ZF is
                     * set, and OP_REPZ (which represents the REP prefix whose bit 0 is set) is 0x40 as well, so when those
                     * two values are equal, we must continue.
                     */
                    if (nReps && this.getZF() == (this.opPrefixes & X86.OPFLAG.REPZ)) {
                        if (BUGS_8086) {
                            this.rewindIP(((this.opPrefixes & X86.OPFLAG.SEG)? -3 : -2));
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xA8 (TEST AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opTESTALb = function TESTALb()
            {
                this.setLogicResult(this.regEAX & this.getIPByte(), X86.RESULT.BYTE);
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAA;
            };
            
            /**
             * op=0xA9 (TEST [E]AX,imm)
             *
             * @this {X86CPU}
             */
            X86.opTESTAX = function TESTAX()
            {
                this.setLogicResult(this.regEAX & this.getIPWord(), this.dataType);
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAA;
            };
            
            /**
             * op=0xAA (STOSB)
             *
             * NOTES: Segment overrides are ignored for this instruction, so we must use segES instead of segData.
             *
             * @this {X86CPU}
             */
            X86.opSTOSb = function STOSb()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesStoS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesStoSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesStoSr0;
                }
                if (nReps--) {
                    if (BACKTRACK) this.backTrack.btiMemLo = this.backTrack.btiAL;
                    this.setSOByte(this.segES, this.regEDI & this.addrMask, this.regEAX);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + ((this.regPS & X86.PS.DF)? -1 : 1)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xAB (STOSW)
             *
             * NOTES: Segment overrides are ignored for this instruction, so we must use segES instead of segData.
             *
             * @this {X86CPU}
             */
            X86.opSTOSw = function STOSw()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesStoS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesStoSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesStoSr0;
                }
                if (nReps--) {
                    /*
                     * NOTE: Storing a word imposes another 4-cycle penalty on the 8088, so consider that
                     * if you think the cycle times here are too high.
                     */
                    if (BACKTRACK) {
                        this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH;
                    }
                    this.setSOWord(this.segES, this.regEDI & this.addrMask, this.regEAX);
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xAC (LODSB)
             *
             * @this {X86CPU}
             */
            X86.opLODSb = function LODSb()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesLodS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesLodSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesLodSr0;
                }
                if (nReps--) {
                    this.regEAX = (this.regEAX & ~0xff) | this.getSOByte(this.segData, this.regESI & this.addrMask);
                    if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + ((this.regPS & X86.PS.DF)? -1 : 1)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(((this.opPrefixes & X86.OPFLAG.SEG)? -3 : -2));
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xAD (LODSW)
             *
             * @this {X86CPU}
             */
            X86.opLODSw = function LODSw()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesLodS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesLodSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesLodSr0;
                }
                if (nReps--) {
                    this.regEAX = (this.regEAX & ~this.dataMask) | this.getSOWord(this.segData, this.regESI & this.addrMask);
                    if (BACKTRACK) {
                        this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                    }
                    this.regESI = (this.regESI & ~this.addrMask) | ((this.regESI + ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize)) & this.addrMask);
                    this.nStepCycles -= nCycles;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    if (nReps) {
                        if (BUGS_8086) {
                            this.rewindIP(((this.opPrefixes & X86.OPFLAG.SEG)? -3 : -2));
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xAE (SCASB)
             *
             * @this {X86CPU}
             */
            X86.opSCASb = function SCASb()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesScaS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesScaSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesScaSr0;
                }
                if (nReps--) {
                    X86.fnCMPb.call(this, this.regEAX & 0xff, this.modEAByte(this.segES, this.regEDI & this.addrMask));
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + ((this.regPS & X86.PS.DF)? -1 : 1)) & this.addrMask);
                    /*
                     * NOTE: As long as we're calling fnCMPb(), all our cycle times must be reduced by nOpCyclesArithRM
                     */
                    this.nStepCycles -= nCycles - this.cycleCounts.nOpCyclesArithRM;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    /*
                     * Repetition continues while ZF matches bit 0 of the REP prefix.  getZF() returns 0x40 if ZF is
                     * set, and OP_REPZ (which represents the REP prefix whose bit 0 is set) is 0x40 as well, so when those
                     * two values are equal, we must continue.
                     */
                    if (nReps && this.getZF() == (this.opPrefixes & X86.OPFLAG.REPZ)) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xAF (SCASW)
             *
             * @this {X86CPU}
             */
            X86.opSCASw = function SCASw()
            {
                var nReps = 1;
                var nDelta = 0;
                var nCycles = this.cycleCounts.nOpCyclesScaS;
                if (this.opPrefixes & (X86.OPFLAG.REPZ | X86.OPFLAG.REPNZ)) {
                    nReps = this.regECX & this.addrMask;
                    nDelta = 1;
                    nCycles = this.cycleCounts.nOpCyclesScaSrn;
                    if (!(this.opPrefixes & X86.OPFLAG.REPEAT)) this.nStepCycles -= this.cycleCounts.nOpCyclesScaSr0;
                }
                if (nReps--) {
                    X86.fnCMPw.call(this, this.regEAX & this.dataMask, this.modEAWord(this.segES, this.regEDI & this.addrMask));
                    this.regEDI = (this.regEDI & ~this.addrMask) | ((this.regEDI + ((this.regPS & X86.PS.DF)? -this.dataSize : this.dataSize)) & this.addrMask);
                    /*
                     * NOTE: As long as we're calling fnCMPw(), all our cycle times must be reduced by nOpCyclesArithRM
                     */
                    this.nStepCycles -= nCycles - this.cycleCounts.nOpCyclesArithRM;
                    this.regECX = (this.regECX & ~this.addrMask) | ((this.regECX - nDelta) & this.addrMask);
                    /*
                     * Repetition continues while ZF matches bit 0 of the REP prefix.  getZF() returns 0x40 if ZF is
                     * set, and OP_REPZ (which represents the REP prefix whose bit 0 is set) is 0x40 as well, so when those
                     * two values are equal, we must continue.
                     */
                    if (nReps && this.getZF() == (this.opPrefixes & X86.OPFLAG.REPZ)) {
                        if (BUGS_8086) {
                            this.rewindIP(-2);              // this instruction does not support multiple overrides
                            this.assert(this.regLIP == this.opLIP);
                        } else {
                            this.regLIP = this.opLIP;
                        }
                        this.opFlags |= X86.OPFLAG.REPEAT;
                    }
                }
            };
            
            /**
             * op=0xB0 (MOV AL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVALb = function MOVALb()
            {
                this.regEAX = (this.regEAX & ~0xff) | this.getIPByte();
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB1 (MOV CL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVCLb = function MOVCLb()
            {
                this.regECX = (this.regECX & ~0xff) | this.getIPByte();
                if (BACKTRACK) this.backTrack.btiCL = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB2 (MOV DL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVDLb = function MOVDLb()
            {
                this.regEDX = (this.regEDX & ~0xff) | this.getIPByte();
                if (BACKTRACK) this.backTrack.btiDL = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB3 (MOV BL,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVBLb = function MOVBLb()
            {
                this.regEBX = (this.regEBX & ~0xff) | this.getIPByte();
                if (BACKTRACK) this.backTrack.btiBL = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB4 (MOV AH,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVAHb = function MOVAHb()
            {
                this.regEAX = (this.regEAX & 0xff) | (this.getIPByte() << 8);
                if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB5 (MOV CH,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVCHb = function MOVCHb()
            {
                this.regECX = (this.regECX & 0xff) | (this.getIPByte() << 8);
                if (BACKTRACK) this.backTrack.btiCH = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB6 (MOV DH,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVDHb = function MOVDHb()
            {
                this.regEDX = (this.regEDX & 0xff) | (this.getIPByte() << 8);
                if (BACKTRACK) this.backTrack.btiDH = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB7 (MOV BH,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVBHb = function MOVBHb()
            {
                this.regEBX = (this.regEBX & 0xff) | (this.getIPByte() << 8);
                if (BACKTRACK) this.backTrack.btiBH = this.backTrack.btiMemLo;
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB8 (MOV [E]AX,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVAX = function MOVAX()
            {
                this.regEAX = (this.regEAX & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiAL = this.backTrack.btiMemLo; this.backTrack.btiAH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xB9 (MOV [E]CX,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVCX = function MOVCX()
            {
                this.regECX = (this.regECX & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiCL = this.backTrack.btiMemLo; this.backTrack.btiCH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xBA (MOV [E]DX,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVDX = function MOVDX()
            {
                this.regEDX = (this.regEDX & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiDL = this.backTrack.btiMemLo; this.backTrack.btiDH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xBB (MOV [E]BX,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVBX = function MOVBX()
            {
                this.regEBX = (this.regEBX & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiBL = this.backTrack.btiMemLo; this.backTrack.btiBH = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xBC (MOV [E]SP,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVSP = function MOVSP()
            {
                this.setSP((this.getSP() & ~this.dataMask) | this.getIPWord());
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xBD (MOV [E]BP,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVBP = function MOVBP()
            {
                this.regEBP = (this.regEBP & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiBPLo = this.backTrack.btiMemLo; this.backTrack.btiBPHi = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xBE (MOV [E]SI,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVSI = function MOVSI()
            {
                this.regESI = (this.regESI & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiSILo = this.backTrack.btiMemLo; this.backTrack.btiSIHi = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xBF (MOV [E]DI,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVDI = function MOVDI()
            {
                this.regEDI = (this.regEDI & ~this.dataMask) | this.getIPWord();
                if (BACKTRACK) {
                    this.backTrack.btiDILo = this.backTrack.btiMemLo; this.backTrack.btiDIHi = this.backTrack.btiMemHi;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLAHF;
            };
            
            /**
             * op=0xC0 (GRP2 byte,imm8) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opGRP2bn = function GRP2bn()
            {
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrp2b, X86.fnSrcCountN);
            };
            
            /**
             * op=0xC1 (GRP2 word,imm) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opGRP2wn = function GRP2wn()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, this.dataSize == 2? X86.aOpGrp2w : X86.aOpGrp2d, X86.fnSrcCountN);
            };
            
            /**
             * op=0xC2 (RET n)
             *
             * @this {X86CPU}
             */
            X86.opRETn = function RETn()
            {
                var n = this.getIPShort() << (this.dataSize >> 2);
                var newIP = this.popWord();
                if (DEBUG) this.printMessage(" returning to " + str.toHex(this.segCS.sel, 4) + ':' + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
                this.setIP(newIP);
                if (n) this.setSP(this.getSP() + n);            // TODO: optimize
                this.nStepCycles -= this.cycleCounts.nOpCyclesRetn;
            };
            
            /**
             * op=0xC3 (RET)
             *
             * @this {X86CPU}
             */
            X86.opRET = function RET()
            {
                var newIP = this.popWord();
                if (DEBUG) this.printMessage(" returning to " + str.toHex(this.segCS.sel, 4) + ':' + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
                this.setIP(newIP);
                this.nStepCycles -= this.cycleCounts.nOpCyclesRet;
            };
            
            /**
             * op=0xC4 (LES reg,word)
             *
             * This is like a "MOV reg,rm" operation, but it also loads ES from the next word.
             *
             * @this {X86CPU}
             */
            X86.opLES = function LES()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLES);
            };
            
            /**
             * op=0xC5 (LDS reg,word)
             *
             * This is like a "MOV reg,rm" operation, but it also loads DS from the next word.
             *
             * @this {X86CPU}
             */
            X86.opLDS = function LDS()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnLDS);
            };
            
            /**
             * op=0xC6 (MOV byte,imm8)
             *
             * @this {X86CPU}
             */
            X86.opMOVb = function MOVb()
            {
                /*
                 * Like other MOV operations, the destination does not need to be read, just written.
                 */
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrpMOVn, this.getIPByte);
            };
            
            /**
             * op=0xC7 (MOV word,imm)
             *
             * @this {X86CPU}
             */
            X86.opMOVw = function MOVw()
            {
                /*
                 * Like other MOV operations, the destination does not need to be read, just written.
                 */
                this.opFlags |= X86.OPFLAG.NOREAD;
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrpMOVn, this.getIPWord);
            };
            
            /**
             * op=0xC8 (ENTER imm16,imm8) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opENTER = function ENTER()
            {
                var wLocal = this.getIPShort();
                var bLevel = this.getIPByte() & 0x1f;
                /*
                 * NOTE: 11 is the minimum cycle time for the 80286; the 80186/80188 has different cycle times: 15, 25 and
                 * 22 + 16 * (bLevel - 1) for bLevel 0, 1 and > 1, respectively.  TODO: Fix this someday.
                 */
                this.nStepCycles -= 11;
                this.pushWord(this.regEBP);
                var wFrame = this.getSP() & this.dataMask;
                if (bLevel > 0) {
                    this.nStepCycles -= (bLevel << 2) + (bLevel > 1? 1 : 0);
                    while (--bLevel) {
                        this.regEBP = (this.regEBP & ~this.dataMask) | ((this.regEBP - this.dataSize) & this.dataMask);
                        this.pushWord(this.getSOWord(this.segSS, this.regEBP & this.dataMask));
                    }
                    this.pushWord(wFrame);
                }
                this.regEBP = (this.regEBP & ~this.dataMask) | wFrame;
                this.setSP((this.getSP() & ~this.segSS.addrMask) | ((this.getSP() - wLocal) & this.segSS.addrMask));
            };
            
            /**
             * op=0xC9 (LEAVE) (80186/80188 and up)
             *
             * @this {X86CPU}
             */
            X86.opLEAVE = function LEAVE()
            {
                this.setSP((this.getSP() & ~this.segSS.addrMask) | (this.regEBP & this.segSS.addrMask));
                this.regEBP = (this.regEBP & ~this.dataMask) | (this.popWord() & this.dataMask);
                /*
                 * NOTE: 5 is the cycle time for the 80286; the 80186/80188 has a cycle time of 8.  TODO: Fix this someday.
                 */
                this.nStepCycles -= 5;
            };
            
            /**
             * op=0xCA (RETF n)
             *
             * @this {X86CPU}
             */
            X86.opRETFn = function RETFn()
            {
                X86.fnRETF.call(this, this.getIPShort());
                this.nStepCycles -= this.cycleCounts.nOpCyclesRetFn;
            };
            
            /**
             * op=0xCB (RETF)
             *
             * @this {X86CPU}
             */
            X86.opRETF = function RETF()
            {
                X86.fnRETF.call(this, 0);
                this.nStepCycles -= this.cycleCounts.nOpCyclesRetF;
            };
            
            /**
             * op=0xCC (INT 3)
             *
             * @this {X86CPU}
             */
            X86.opINT3 = function INT3()
            {
                /*
                 * To give our own Debugger the ability to stop execution on INT3, I thought about treating this as
                 * a fault rather than an interrupt, in order to leverage the existing Debugger logic inside fnFault()
                 * processing, but that has the unwanted side-effect of rewinding EIP to the INT3 prior to issuing
                 * the interrupt, and the corresponding IRET takes us right back to the INT3.
                 *
                 *      X86.fnFault.call(this, X86.EXCEPTION.BREAKPOINT, null, false, this.cycleCounts.nOpCyclesInt3D);
                 *
                 * Then I had the idea of using the fnFaultMessage() function, in much the same way that fnFault()
                 * does for actual faults: if the user turned on the FAULT and HALT message bits, then fnFaultMessage()
                 * would tell us to halt; otherwise, we'd perform the normal fnINT() call.
                 *
                 *      if (X86.fnFaultMessage.call(this, X86.EXCEPTION.BREAKPOINT)) {
                 *          this.setIP(this.opLIP - this.segCS.base);
                 *          return;
                 *      }
                 *
                 * However, that makes it a little tedious to get past the INT3 (you have to use a Debugger command
                 * like "t;g"), and a somewhat confusing fault message is displayed; eg:
                 *
                 *      Fault 0x03 on opcode 0xB4 at 09CE:0155 (%009E35)
                 *
                 * The best solution was to leave this function alone, and change the Debugger's checkBreakpoint()
                 * function to stop execution on INT3 whenever both the INT and HALT message bits are set; a simple "g"
                 * command allows you to continue.
                 */
                X86.fnINT.call(this, X86.EXCEPTION.BREAKPOINT, null, this.cycleCounts.nOpCyclesInt3D);
            };
            
            /**
             * op=0xCD (INT n)
             *
             * @this {X86CPU}
             */
            X86.opINTn = function INTn()
            {
                var nInt = this.getIPByte();
                if (this.checkIntNotify(nInt)) {
                    X86.fnINT.call(this, nInt, null, 0);
                    return;
                }
                this.nStepCycles--;     // we don't need to assess the full cost of nOpCyclesInt, but we need to assess something...
            };
            
            /**
             * op=0xCE (INTO: INT 4 if OF set)
             *
             * @this {X86CPU}
             */
            X86.opINTO = function INTO()
            {
                if (this.getOF()) {
                    X86.fnINT.call(this, X86.EXCEPTION.OVERFLOW, null, this.cycleCounts.nOpCyclesIntOD);
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesIntOFall;
            };
            
            /**
             * op=0xCF (IRET)
             *
             * @this {X86CPU}
             */
            X86.opIRET = function IRET()
            {
                X86.fnIRET.call(this);
            };
            
            /**
             * op=0xD0 (GRP2 byte,1)
             *
             * @this {X86CPU}
             */
            X86.opGRP2b1 = function GRP2b1()
            {
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrp2b, X86.fnSrcCount1);
            };
            
            /**
             * op=0xD1 (GRP2 word,1)
             *
             * @this {X86CPU}
             */
            X86.opGRP2w1 = function GRP2w1()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, this.dataSize == 2? X86.aOpGrp2w : X86.aOpGrp2d, X86.fnSrcCount1);
            };
            
            /**
             * op=0xD2 (GRP2 byte,CL)
             *
             * @this {X86CPU}
             */
            X86.opGRP2bCL = function GRP2bCL()
            {
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrp2b, X86.fnSrcCountCL);
            };
            
            /**
             * op=0xD3 (GRP2 word,CL)
             *
             * @this {X86CPU}
             */
            X86.opGRP2wCL = function GRP2wCL()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, this.dataSize == 2? X86.aOpGrp2w : X86.aOpGrp2d, X86.fnSrcCountCL);
            };
            
            /**
             * op=0xD4 0x0A (AAM)
             *
             * From "The 8086 Book":
             *
             *  1. Divide AL by 0x0A; store the quotient in AH and the remainder in AL
             *  2. Set PF, SF, and ZF based on the AL register (CF, OF, and AF are undefined)
             *
             * @this {X86CPU}
             */
            X86.opAAM = function AAM()
            {
                var bDivisor = this.getIPByte();
                if (!bDivisor) {
                    /*
                     * TODO: Generate a divide-by-zero exception, if appropriate for the current CPU
                     */
                    return;
                }
                var AL = this.regEAX & 0xff;
                this.regEAX = (this.regEAX & ~0xffff) | ((AL / bDivisor) << 8) | (AL % bDivisor);
                /*
                 * setLogicResult() is slightly overkill, because technically, we don't need to clear CF and OF....
                 */
                this.setLogicResult(this.regEAX, X86.RESULT.BYTE);
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAM;
            };
            
            /**
             * op=0xD5 (AAD)
             *
             * From "The 8086 Book":
             *
             *  1. Multiply AH by 0x0A, add AH to AL, and store 0x00 in AH
             *  2. Set PF, SF, and ZF based on the AL register (CF, OF, and AF are undefined)
             *
             * @this {X86CPU}
             */
            X86.opAAD = function AAD()
            {
                var bMultiplier = this.getIPByte();
                this.regEAX = (this.regEAX & ~0xffff) | (((((this.regEAX >> 8) & 0xff) * bMultiplier) + this.regEAX) & 0xff);
                /*
                 * setLogicResult() is slightly overkill, because technically, we don't need to clear CF and OF....
                 */
                this.setLogicResult(this.regEAX, X86.RESULT.BYTE);
                this.nStepCycles -= this.cycleCounts.nOpCyclesAAD;
            };
            
            /**
             * op=0xD6 (SALC aka SETALC) (undocumented until Pentium Pro)
             *
             * Sets AL to 0xFF if CF=1, 0x00 otherwise; no flags are affected (similar to SBB AL,AL, but without side-effects)
             *
             * WARNING: I have no idea how many clocks this instruction originally required, so for now, I'm going with a minimum of 2.
             *
             * @this {X86CPU}
             */
            X86.opSALC = function SALC()
            {
                this.regEAX = (this.regEAX & ~0xff) | (this.getCF()? 0xFF : 0);
                this.nStepCycles -= 2;
            };
            
            /**
             * op=0xD7 (XLAT)
             *
             * @this {X86CPU}
             */
            X86.opXLAT = function XLAT()
            {
                /*
                 * NOTE: I have no idea whether XLAT actually wraps the 16-bit address calculation;
                 * I'm masking it as if it does, but I need to run a test on real hardware to be sure.
                 */
                this.regEAX = (this.regEAX & ~0xff) | this.getEAByte(this.segData, ((this.regEBX + (this.regEAX & 0xff)) & 0xffff));
                this.nStepCycles -= this.cycleCounts.nOpCyclesXLAT;
            };
            
            /**
             * op=0xD8-0xDF (ESC)
             *
             * @this {X86CPU}
             */
            X86.opESC = function ESC()
            {
                this.aOpModRegWord[this.getIPByte()].call(this, X86.fnESC);
                this.nStepCycles -= 8;      // TODO: Fix
            };
            
            /**
             * op=0xE0 (LOOPNZ disp)
             *
             * NOTE: All the instructions in this group (LOOPNZ, LOOPZ, LOOP, and JCXZ) actually
             * rely on the ADDRESS override setting for determining whether CX or ECX will be used,
             * even though it seems counter-intuitive; ditto for the REP prefix.
             *
             * @this {X86CPU}
             */
            X86.opLOOPNZ = function LOOPNZ()
            {
                var disp = this.getIPDisp();
                if ((this.regECX = (this.regECX - 1) & this.addrMask) && !this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesLoopNZ;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLoopFall;
            };
            
            /**
             * op=0xE1 (LOOPZ disp)
             *
             * NOTE: All the instructions in this group (LOOPNZ, LOOPZ, LOOP, and JCXZ) actually
             * rely on the ADDRESS override setting for determining whether CX or ECX will be used,
             * even though it seems counter-intuitive; ditto for the REP prefix.
             *
             * @this {X86CPU}
             */
            X86.opLOOPZ = function LOOPZ()
            {
                var disp = this.getIPDisp();
                if ((this.regECX = (this.regECX - 1) & this.addrMask) && this.getZF()) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesLoopZ;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLoopZFall;
            };
            
            /**
             * op=0xE2 (LOOP disp)
             *
             * NOTE: All the instructions in this group (LOOPNZ, LOOPZ, LOOP, and JCXZ) actually
             * rely on the ADDRESS override setting for determining whether CX or ECX will be used,
             * even though it seems counter-intuitive; ditto for the REP prefix.
             *
             * @this {X86CPU}
             */
            X86.opLOOP = function LOOP()
            {
                var disp = this.getIPDisp();
                if ((this.regECX = (this.regECX - 1) & this.addrMask)) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesLoop;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLoopFall;
            };
            
            /**
             * op=0xE3 (JCXZ/JECXZ disp)
             *
             * NOTE: All the instructions in this group (LOOPNZ, LOOPZ, LOOP, and JCXZ) actually
             * rely on the ADDRESS override setting for determining whether CX or ECX will be used,
             * even though it seems counter-intuitive; ditto for the REP prefix.
             *
             * @this {X86CPU}
             */
            X86.opJCXZ = function JCXZ()
            {
                var disp = this.getIPDisp();
                if (!(this.regECX & this.addrMask)) {
                    this.setIP(this.getIP() + disp);
                    this.nStepCycles -= this.cycleCounts.nOpCyclesLoopZ;
                    return;
                }
                this.nStepCycles -= this.cycleCounts.nOpCyclesLoopZFall;
            };
            
            /**
             * op=0xE4 (IN AL,port)
             *
             * @this {X86CPU}
             */
            X86.opINb = function INb()
            {
                var port = this.getIPByte();
                this.regEAX = (this.regEAX & ~0xff) | this.bus.checkPortInputNotify(port, this.regLIP - 2);
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiIO;
                this.nStepCycles -= this.cycleCounts.nOpCyclesInP;
            };
            
            /**
             * op=0xE5 (IN AX,port)
             *
             * @this {X86CPU}
             */
            X86.opINw = function INw()
            {
                var port = this.getIPByte();
                this.regEAX = this.bus.checkPortInputNotify(port, this.regLIP - 2);
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiIO;
                this.regEAX |= (this.bus.checkPortInputNotify((port + 1) & 0xffff, this.regLIP - 2) << 8);
                if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiIO;
                this.nStepCycles -= this.cycleCounts.nOpCyclesInP;
            };
            
            /**
             * op=0xE6 (OUT port,AL)
             *
             * @this {X86CPU}
             */
            X86.opOUTb = function OUTb()
            {
                var port = this.getIPByte();
                this.bus.checkPortOutputNotify(port, this.regEAX & 0xff, this.regLIP - 2);
                this.nStepCycles -= this.cycleCounts.nOpCyclesOutP;
            };
            
            /**
             * op=0xE7 (OUT port,AX)
             *
             * @this {X86CPU}
             */
            X86.opOUTw = function OUTw()
            {
                var port = this.getIPByte();
                this.bus.checkPortOutputNotify(port, this.regEAX & 0xff, this.regLIP - 2);
                this.bus.checkPortOutputNotify((port + 1) & 0xffff, this.regEAX >> 8, this.regLIP - 2);
                this.nStepCycles -= this.cycleCounts.nOpCyclesOutP;
            };
            
            /**
             * op=0xE8 (CALL disp16)
             *
             * @this {X86CPU}
             */
            X86.opCALL = function CALL()
            {
                var disp = this.getIPWord();
                var oldIP = this.getIP();
                var newIP = oldIP + disp;
                if (DEBUG) this.printMessage("calling " + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
                this.pushWord(oldIP);
                this.setIP(newIP);
                this.nStepCycles -= this.cycleCounts.nOpCyclesCall;
            };
            
            /**
             * op=0xE9 (JMP disp16)
             *
             * @this {X86CPU}
             */
            X86.opJMP = function JMP()
            {
                var disp = this.getIPWord();
                this.setIP(this.getIP() + disp);
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmp;
            };
            
            /**
             * op=0xEA (JMP seg:off)
             *
             * @this {X86CPU}
             */
            X86.opJMPF = function JMPF()
            {
                this.setCSIP(this.getIPWord(), this.getIPShort());
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmpF;
            };
            
            /**
             * op=0xEB (JMP short disp8)
             *
             * @this {X86CPU}
             */
            X86.opJMPs = function JMPs()
            {
                var disp = this.getIPDisp();
                this.setIP(this.getIP() + disp);
                this.nStepCycles -= this.cycleCounts.nOpCyclesJmp;
            };
            
            /**
             * op=0xEC (IN AL,dx)
             *
             * @this {X86CPU}
             */
            X86.opINDXb = function INDXb()
            {
                this.regEAX = (this.regEAX & ~0xff) | this.bus.checkPortInputNotify(this.regEDX, this.regLIP - 1);
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiIO;
                this.nStepCycles -= this.cycleCounts.nOpCyclesInDX;
            };
            
            /**
             * op=0xED (IN AX,dx)
             *
             * @this {X86CPU}
             */
            X86.opINDXw = function INDXw()
            {
                this.regEAX = this.bus.checkPortInputNotify(this.regEDX, this.regLIP - 1);
                if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiIO;
                this.regEAX |= (this.bus.checkPortInputNotify((this.regEDX + 1) & 0xffff, this.regLIP - 1) << 8);
                if (BACKTRACK) this.backTrack.btiAH = this.backTrack.btiIO;
                this.nStepCycles -= this.cycleCounts.nOpCyclesInDX;
            };
            
            /**
             * op=0xEE (OUT dx,AL)
             *
             * @this {X86CPU}
             */
            X86.opOUTDXb = function OUTDXb()
            {
                if (BACKTRACK) this.backTrack.btiIO = this.backTrack.btiAL;
                this.bus.checkPortOutputNotify(this.regEDX, this.regEAX & 0xff, this.regLIP - 1);
                this.nStepCycles -= this.cycleCounts.nOpCyclesOutDX;
            };
            
            /**
             * op=0xEF (OUT dx,AX)
             *
             * @this {X86CPU}
             */
            X86.opOUTDXw = function OUTDXw()
            {
                if (BACKTRACK) this.backTrack.btiIO = this.backTrack.btiAL;
                this.bus.checkPortOutputNotify(this.regEDX, this.regEAX & 0xff, this.regLIP - 1);
                if (BACKTRACK) this.backTrack.btiIO = this.backTrack.btiAH;
                this.bus.checkPortOutputNotify((this.regEDX + 1) & 0xffff, this.regEAX >> 8, this.regLIP - 1);
                this.nStepCycles -= this.cycleCounts.nOpCyclesOutDX;
            };
            
            /**
             * op=0xF0 (LOCK:)
             *
             * @this {X86CPU}
             */
            X86.opLOCK = function LOCK()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with LOCK is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.LOCK | X86.OPFLAG.NOINTR;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0xF1 (INT1; undocumented; 80186/80188 and up; TODO: Verify)
             *
             * I still treat this as undefined, until I can verify the behavior on real hardware.
             *
             * @this {X86CPU}
             */
            X86.opINT1 = function INT1()
            {
                X86.opUndefined.call(this);
            };
            
            /**
             * op=0xF2 (REPNZ:) (repeat CMPS or SCAS until NZ; repeat MOVS, LODS, or STOS unconditionally)
             *
             * @this {X86CPU}
             */
            X86.opREPNZ = function REPNZ()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with REPNZ is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.REPNZ | X86.OPFLAG.NOINTR;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0xF3 (REPZ:) (repeat CMPS or SCAS until Z; repeat MOVS, LODS, or STOS unconditionally)
             *
             * @this {X86CPU}
             */
            X86.opREPZ = function REPZ()
            {
                /*
                 * NOTE: The fact that we're setting NOINTR along with REPZ is really just for documentation purposes;
                 * the way stepCPU() is written, the presence of any prefix bypasses normal interrupt processing anyway.
                 */
                this.opFlags |= X86.OPFLAG.REPZ | X86.OPFLAG.NOINTR;
                this.nStepCycles -= this.cycleCounts.nOpCyclesPrefix;
            };
            
            /**
             * op=0xF4 (HLT)
             *
             * @this {X86CPU}
             */
            X86.opHLT = function HLT()
            {
                /*
                 * The CPU is never REALLY halted by a HLT instruction; instead, by setting X86.INTFLAG.HALT,
                 * we are signalling to stepCPU() that it's free to end the current burst AND that it should not
                 * execute any more instructions until checkINTR() indicates a hardware interrupt is requested.
                 */
                this.intFlags |= X86.INTFLAG.HALT;
                this.nStepCycles -= 2;
                /*
                 * If a Debugger is present and the HALT message category is enabled, then we REALLY halt the CPU,
                 * on the theory that whoever's using the Debugger would like to see HLTs.
                 */
                if (DEBUGGER && this.dbg && this.messageEnabled(Messages.HALT)) {
                    this.rewindIP(-1);      // this is purely for the Debugger's benefit, to show the HLT
                    this.stopCPU();
                    return;
                }
                /*
                 * We also REALLY halt the machine if interrupts have been disabled, since that means it's dead
                 * in the water (we have no NMI generation mechanism at the moment).
                 */
                if (!this.getIF()) {
                    if (DEBUGGER && this.dbg) this.rewindIP(-1);
                    this.stopCPU();
                }
            };
            
            /**
             * op=0xF5 (CMC)
             *
             * @this {X86CPU}
             */
            X86.opCMC = function CMC()
            {
                if (this.getCF()) this.clearCF(); else this.setCF();
                this.nStepCycles -= 2;                          // CMC takes 2 cycles on all CPUs
            };
            
            /**
             * op=0xF6 (GRP3 byte)
             *
             * The MUL byte instruction is problematic in two cases:
             *
             *      0xF6 0xE0:  MUL AL
             *      0xF6 0xE4:  MUL AH
             *
             * because the OpModGrpByte decoder function will attempt to put the fnMULb() function's
             * return value back into AL or AH, undoing fnMULb's update of AX.  And since fnMULb doesn't
             * know what the target is (only the target's value), it cannot easily work around the problem.
             *
             * A simple, albeit kludgy, solution is for fnMULb to always save its result in a special
             * "register" (eg, regMDLo), which we will then put back into regEAX if it's been updated.
             * This also relieves us from having to decode any part of the ModRM byte, so maybe it's not
             * such a bad work-around after all.
             *
             * Similar issues with IMUL (and DIV and IDIV) are resolved using the same special variable(s).
             *
             * @this {X86CPU}
             */
            X86.opGRP3b = function GRP3b()
            {
                this.fMDSet = false;
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrp3b, X86.fnSrcNone);
                if (this.fMDSet) this.regEAX = (this.regEAX & ~this.dataMask) | (this.regMDLo & this.dataMask);
            };
            
            /**
             * op=0xF7 (GRP3 word)
             *
             * The MUL word instruction is problematic in two cases:
             *
             *      0xF7 0xE0:  MUL AX
             *      0xF7 0xE2:  MUL DX
             *
             * because the OpModGrpWord decoder function will attempt to put the fnMULw() function's
             * return value back into AX or DX, undoing fnMULw's update of DX:AX.  And since fnMULw doesn't
             * know what the target is (only the target's value), it cannot easily work around the problem.
             *
             * A simple, albeit kludgey, solution is for fnMULw to always save its result in a special
             * "register" (eg, regMDLo/regMDHi), which we will then put back into regEAX/regEDX if it's been
             * updated.  This also relieves us from having to decode any part of the ModRM byte, so maybe
             * it's not such a bad work-around after all.
             *
             * @this {X86CPU}
             */
            X86.opGRP3w = function GRP3w()
            {
                this.fMDSet = false;
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrp3w, X86.fnSrcNone);
                if (this.fMDSet) {
                    this.regEAX = (this.regEAX & ~this.dataMask) | (this.regMDLo & this.dataMask);
                    this.regEDX = (this.regEDX & ~this.dataMask) | (this.regMDHi & this.dataMask);
                }
            };
            
            /**
             * op=0xF8 (CLC)
             *
             * @this {X86CPU}
             */
            X86.opCLC = function CLC()
            {
                this.clearCF();
                this.nStepCycles -= 2;                          // CLC takes 2 cycles on all CPUs
            };
            
            /**
             * op=0xF9 (STC)
             *
             * @this {X86CPU}
             */
            X86.opSTC = function STC()
            {
                this.setCF();
                this.nStepCycles -= 2;                          // STC takes 2 cycles on all CPUs
            };
            
            /**
             * op=0xFA (CLI)
             *
             * @this {X86CPU}
             */
            X86.opCLI = function CLI()
            {
                this.clearIF();
                this.nStepCycles -= this.cycleCounts.nOpCyclesCLI;   // CLI takes LONGER on an 80286
            };
            
            /**
             * op=0xFB (STI)
             *
             * @this {X86CPU}
             */
            X86.opSTI = function STI()
            {
                this.setIF();
                this.opFlags |= X86.OPFLAG.NOINTR;
                this.nStepCycles -= 2;                          // STI takes 2 cycles on all CPUs
            };
            
            /**
             * op=0xFC (CLD)
             *
             * @this {X86CPU}
             */
            X86.opCLD = function CLD()
            {
                this.clearDF();
                this.nStepCycles -= 2;                          // CLD takes 2 cycles on all CPUs
            };
            
            /**
             * op=0xFD (STD)
             *
             * @this {X86CPU}
             */
            X86.opSTD = function STD()
            {
                this.setDF();
                this.nStepCycles -= 2;                          // STD takes 2 cycles on all CPUs
            };
            
            /**
             * op=0xFE (GRP4 byte)
             *
             * @this {X86CPU}
             */
            X86.opGRP4b = function GRP4b()
            {
                this.aOpModGrpByte[this.getIPByte()].call(this, X86.aOpGrp4b, X86.fnSrcNone);
            };
            
            /**
             * op=0xFF (GRP4 word)
             *
             * @this {X86CPU}
             */
            X86.opGRP4w = function GRP4w()
            {
                this.aOpModGrpWord[this.getIPByte()].call(this, X86.aOpGrp4w, X86.fnSrcNone);
            };
            
            /**
             * opInvalid()
             *
             * @this {X86CPU}
             */
            X86.opInvalid = function opInvalid()
            {
                X86.fnFault.call(this, X86.EXCEPTION.UD_FAULT);
                this.stopCPU();
            };
            
            /**
             * opUndefined()
             *
             * @this {X86CPU}
             */
            X86.opUndefined = function opUndefined()
            {
                this.setIP(this.opLIP - this.segCS.base);
                this.setError("Undefined opcode " + str.toHexByte(this.bus.getByteDirect(this.regLIP)) + " at " + str.toHexLong(this.regLIP));
                this.stopCPU();
            };
            
            /**
             * opTBD()
             *
             * @this {X86CPU}
             */
            X86.opTBD = function opTBD()
            {
                this.setIP(this.opLIP - this.segCS.base);
                this.printMessage("unimplemented 80386 opcode", true);
                this.stopCPU();
            };
            
            /*
             * This 256-entry array of opcode functions is at the heart of the CPU engine: stepCPU(n).
             *
             * It might be worth trying a switch() statement instead, to see how the performance compares,
             * but I suspect that would vary quite a bit across JavaScript engines; for now, I'm putting my
             * money on array lookup.
             */
            X86.aOps = [
                X86.opADDmb,            X86.opADDmw,            X86.opADDrb,            X86.opADDrw,        // 0x00-0x03
                X86.opADDALb,           X86.opADDAX,            X86.opPUSHES,           X86.opPOPES,        // 0x04-0x07
                X86.opORmb,             X86.opORmw,             X86.opORrb,             X86.opORrw,         // 0x08-0x0B
                X86.opORALb,            X86.opORAX,             X86.opPUSHCS,           X86.opPOPCS,        // 0x0C-0x0F
                X86.opADCmb,            X86.opADCmw,            X86.opADCrb,            X86.opADCrw,        // 0x10-0x13
                X86.opADCALb,           X86.opADCAX,            X86.opPUSHSS,           X86.opPOPSS,        // 0x14-0x17
                X86.opSBBmb,            X86.opSBBmw,            X86.opSBBrb,            X86.opSBBrw,        // 0x18-0x1B
                X86.opSBBALb,           X86.opSBBAX,            X86.opPUSHDS,           X86.opPOPDS,        // 0x1C-0x1F
                X86.opANDmb,            X86.opANDmw,            X86.opANDrb,            X86.opANDrw,        // 0x20-0x23
                X86.opANDAL,            X86.opANDAX,            X86.opES,               X86.opDAA,          // 0x24-0x27
                X86.opSUBmb,            X86.opSUBmw,            X86.opSUBrb,            X86.opSUBrw,        // 0x28-0x2B
                X86.opSUBALb,           X86.opSUBAX,            X86.opCS,               X86.opDAS,          // 0x2C-0x2F
                X86.opXORmb,            X86.opXORmw,            X86.opXORrb,            X86.opXORrw,        // 0x30-0x33
                X86.opXORALb,           X86.opXORAX,            X86.opSS,               X86.opAAA,          // 0x34-0x37
                X86.opCMPmb,            X86.opCMPmw,            X86.opCMPrb,            X86.opCMPrw,        // 0x38-0x3B
                X86.opCMPALb,           X86.opCMPAX,            X86.opDS,               X86.opAAS,          // 0x3C-0x3F
                X86.opINCAX,            X86.opINCCX,            X86.opINCDX,            X86.opINCBX,        // 0x40-0x43
                X86.opINCSP,            X86.opINCBP,            X86.opINCSI,            X86.opINCDI,        // 0x44-0x47
                X86.opDECAX,            X86.opDECCX,            X86.opDECDX,            X86.opDECBX,        // 0x48-0x4B
                X86.opDECSP,            X86.opDECBP,            X86.opDECSI,            X86.opDECDI,        // 0x4C-0x4F
                X86.opPUSHAX,           X86.opPUSHCX,           X86.opPUSHDX,           X86.opPUSHBX,       // 0x50-0x53
                X86.opPUSHSP_8086,      X86.opPUSHBP,           X86.opPUSHSI,           X86.opPUSHDI,       // 0x54-0x57
                X86.opPOPAX,            X86.opPOPCX,            X86.opPOPDX,            X86.opPOPBX,        // 0x58-0x5B
                X86.opPOPSP,            X86.opPOPBP,            X86.opPOPSI,            X86.opPOPDI,        // 0x5C-0x5F
                /*
                 * On an 8086/8088, opcodes 0x60-0x6F are aliases for the conditional jumps 0x70-0x7F.  Sometimes you'll see
                 * references to these opcodes (like 0x60) being a "two-byte NOP" and using them differentiate an 8088 from newer
                 * CPUs, but they're only a "two-byte NOP" if the second byte is zero, resulting in zero displacement.
                 */
                X86.opJO,               X86.opJNO,              X86.opJC,               X86.opJNC,          // 0x60-0x63
                X86.opJZ,               X86.opJNZ,              X86.opJBE,              X86.opJNBE,         // 0x64-0x67
                X86.opJS,               X86.opJNS,              X86.opJP,               X86.opJNP,          // 0x68-0x6B
                X86.opJL,               X86.opJNL,              X86.opJLE,              X86.opJNLE,         // 0x6C-0x6F
                X86.opJO,               X86.opJNO,              X86.opJC,               X86.opJNC,          // 0x70-0x73
                X86.opJZ,               X86.opJNZ,              X86.opJBE,              X86.opJNBE,         // 0x74-0x77
                X86.opJS,               X86.opJNS,              X86.opJP,               X86.opJNP,          // 0x78-0x7B
                X86.opJL,               X86.opJNL,              X86.opJLE,              X86.opJNLE,         // 0x7C-0x7F
                /*
                 * On all processors, opcode groups 0x80 and 0x82 perform identically (0x82 opcodes sign-extend their
                 * immediate data, but since both 0x80 and 0x82 are byte operations, the sign extension has no effect).
                 *
                 * WARNING: Intel's "Pentium Processor User's Manual (Volume 3: Architecture and Programming Manual)" refers
                 * to opcode 0x82 as a "reserved" instruction, but also cryptically refers to it as "MOVB AL,imm".  This is
                 * assumed to be an error in the manual, because as far as I know, 0x82 has always mirrored 0x80.
                 */
                X86.opGRP1b,            X86.opGRP1w,            X86.opGRP1b,            X86.opGRP1sw,       // 0x80-0x83
                X86.opTESTrb,           X86.opTESTrw,           X86.opXCHGrb,           X86.opXCHGrw,       // 0x84-0x87
                X86.opMOVmb,            X86.opMOVmw,            X86.opMOVrb,            X86.opMOVrw,        // 0x88-0x8B
                X86.opMOVwsr,           X86.opLEA,              X86.opMOVsrw,           X86.opPOPmw,        // 0x8C-0x8F
                X86.opNOP,              X86.opXCHGCX,           X86.opXCHGDX,           X86.opXCHGBX,       // 0x90-0x93
                X86.opXCHGSP,           X86.opXCHGBP,           X86.opXCHGSI,           X86.opXCHGDI,       // 0x94-0x97
                X86.opCBW,              X86.opCWD,              X86.opCALLF,            X86.opWAIT,         // 0x98-0x9B
                X86.opPUSHF,            X86.opPOPF,             X86.opSAHF,             X86.opLAHF,         // 0x9C-0x9F
                X86.opMOVALm,           X86.opMOVAXm,           X86.opMOVmAL,           X86.opMOVmAX,       // 0xA0-0xA3
                X86.opMOVSb,            X86.opMOVSw,            X86.opCMPSb,            X86.opCMPSw,        // 0xA4-0xA7
                X86.opTESTALb,          X86.opTESTAX,           X86.opSTOSb,            X86.opSTOSw,        // 0xA8-0xAB
                X86.opLODSb,            X86.opLODSw,            X86.opSCASb,            X86.opSCASw,        // 0xAC-0xAF
                X86.opMOVALb,           X86.opMOVCLb,           X86.opMOVDLb,           X86.opMOVBLb,       // 0xB0-0xB3
                X86.opMOVAHb,           X86.opMOVCHb,           X86.opMOVDHb,           X86.opMOVBHb,       // 0xB4-0xB7
                X86.opMOVAX,            X86.opMOVCX,            X86.opMOVDX,            X86.opMOVBX,        // 0xB8-0xBB
                X86.opMOVSP,            X86.opMOVBP,            X86.opMOVSI,            X86.opMOVDI,        // 0xBC-0xBF
                /*
                 * On an 8086/8088, opcodes 0xC0 -> 0xC2, 0xC1 -> 0xC3, 0xC8 -> 0xCA and 0xC9 -> 0xCB.
                 */
                X86.opRETn,             X86.opRET,              X86.opRETn,             X86.opRET,          // 0xC0-0xC3
                X86.opLES,              X86.opLDS,              X86.opMOVb,             X86.opMOVw,         // 0xC4-0xC7
                X86.opRETFn,            X86.opRETF,             X86.opRETFn,            X86.opRETF,         // 0xC8-0xCB
                X86.opINT3,             X86.opINTn,             X86.opINTO,             X86.opIRET,         // 0xCC-0xCF
                X86.opGRP2b1,           X86.opGRP2w1,           X86.opGRP2bCL,          X86.opGRP2wCL,      // 0xD0-0xD3
                /*
                 * Even as of the Pentium, opcode 0xD6 is still marked as "reserved", but it's always been SALC (aka SETALC).
                 */
                X86.opAAM,              X86.opAAD,              X86.opSALC,             X86.opXLAT,         // 0xD4-0xD7
                X86.opESC,              X86.opESC,              X86.opESC,              X86.opESC,          // 0xD8-0xDB
                X86.opESC,              X86.opESC,              X86.opESC,              X86.opESC,          // 0xDC-0xDF
                X86.opLOOPNZ,           X86.opLOOPZ,            X86.opLOOP,             X86.opJCXZ,         // 0xE0-0xE3
                X86.opINb,              X86.opINw,              X86.opOUTb,             X86.opOUTw,         // 0xE4-0xE7
                X86.opCALL,             X86.opJMP,              X86.opJMPF,             X86.opJMPs,         // 0xE8-0xEB
                X86.opINDXb,            X86.opINDXw,            X86.opOUTDXb,           X86.opOUTDXw,       // 0xEC-0xEF
                /*
                 * On an 8086/8088, opcode 0xF1 is believed to be an alias for 0xF0; in any case, it definitely behaves like
                 * a prefix on those processors, so we treat it as such.  On the 80186 and up, we treat as opINT1().
                 *
                 * As of the Pentium, opcode 0xF1 is still marked "reserved".
                 */
                X86.opLOCK,             X86.opLOCK,             X86.opREPNZ,            X86.opREPZ,         // 0xF0-0xF3
                X86.opHLT,              X86.opCMC,              X86.opGRP3b,            X86.opGRP3w,        // 0xF4-0xF7
                X86.opCLC,              X86.opSTC,              X86.opCLI,              X86.opSTI,          // 0xF8-0xFB
                X86.opCLD,              X86.opSTD,              X86.opGRP4b,            X86.opGRP4w         // 0xFC-0xFF
            ];
            
            /*
             * A word (or two) on instruction groups (eg, Grp1, Grp2), which are groups of instructions that
             * use a mod/reg/rm byte, where the reg field of that byte selects a function rather than a register.
             *
             * I start with the groupings used by Intel's "Pentium Processor User's Manual (Volume 3: Architecture
             * and Programming Manual)", but I deviate slightly, mostly by subdividing their groups with letter suffixes:
             *
             *      Opcodes     Intel       PCjs                                                PC Mag TechRef
             *      -------     -----       ----                                                --------------
             *      0x80-0x83   Grp1        Grp1b and Grp1w                                     Group A
             *      0xC0-0xC1   Grp2        Grp2b and Grp2w (opGRP2bn/wn)                       Group B
             *      0xD0-0xD3   Grp2        Grp2b and Grp2w (opGRP2b1/w1 and opGRP2bCL/wCL)     Group B
             *      0xF6-0xF7   Grp3        Grp3b and Grp3w                                     Group C
             *      0xFE        Grp4        Grp4b                                               Group D
             *      0xFF        Grp5        Grp4w                                               Group E
             *      0x0F,0x00   Grp6        Grp6 (SLDT, STR, LLDT, LTR, VERR, VERW)             Group F
             *      0x0F,0x01   Grp7        Grp7 (SGDT, SIDT, LGDT, LIDT, SMSW, LMSW, INVLPG)   Group G
             *      0x0F,0xBA   Grp8        Grp8 (BT, BTS, BTR, BTC)                            Group H
             *      0x0F,0xC7   Grp9        Grp9 (CMPXCH)                                       (N/A, 80486 and up)
             *
             * My only serious deviation is Grp5, which I refer to as Grp4w, because it contains word forms of
             * the INC and DEC instructions found in Grp4b.  Granted, Grp4w also contains versions of the CALL,
             * JMP and PUSH instructions, which are not in Grp4b, but there's nothing in Grp4b that conflicts with
             * Grp4w, so I think my nomenclature makes more sense.  To compensate, I don't use Grp5, so that the
             * remaining group numbers remain in sync with Intel's.
             *
             * To the above list, I've added a few "single-serving" groups: opcode 0x8F uses GrpPOPw, and opcodes 0xC6/0xC7
             * use GrpMOVn.  In both of these groups, the only valid (documented) instruction is where reg=0x0.
             *
             * TODO: Test what happens on real hardware when the reg field is non-zero for opcodes 0x8F and 0xC6/0xC7.
             */
            X86.aOpGrp1b = [
                X86.fnADDb,             X86.fnORb,              X86.fnADCb,             X86.fnSBBb,             // 0x80/0x82(reg=0x0-0x3)
                X86.fnANDb,             X86.fnSUBb,             X86.fnXORb,             X86.fnCMPb              // 0x80/0x82(reg=0x4-0x7)
            ];
            
            X86.aOpGrp1w = [
                X86.fnADDw,             X86.fnORw,              X86.fnADCw,             X86.fnSBBw,             // 0x81/0x83(reg=0x0-0x3)
                X86.fnANDw,             X86.fnSUBw,             X86.fnXORw,             X86.fnCMPw              // 0x81/0x83(reg=0x4-0x7)
            ];
            
            X86.aOpGrpPOPw = [
                X86.fnPOPw,             X86.fnGRPFault,         X86.fnGRPFault,         X86.fnGRPFault,         // 0x8F(reg=0x0-0x3)
                X86.fnGRPFault,         X86.fnGRPFault,         X86.fnGRPFault,         X86.fnGRPFault          // 0x8F(reg=0x4-0x7)
            ];
            
            X86.aOpGrpMOVn = [
                X86.fnMOVn,             X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined,     // 0xC6/0xC7(reg=0x0-0x3)
                X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined      // 0xC6/0xC7(reg=0x4-0x7)
            ];
            
            X86.aOpGrp2b = [
                X86.fnROLb,             X86.fnRORb,             X86.fnRCLb,             X86.fnRCRb,             // 0xC0/0xD0/0xD2(reg=0x0-0x3)
                X86.fnSHLb,             X86.fnSHRb,             X86.fnGRPUndefined,     X86.fnSARb              // 0xC0/0xD0/0xD2(reg=0x4-0x7)
            ];
            
            X86.aOpGrp2w = [
                X86.fnROLw,             X86.fnRORw,             X86.fnRCLw,             X86.fnRCRw,             // 0xC1/0xD1/0xD3(reg=0x0-0x3)
                X86.fnSHLw,             X86.fnSHRw,             X86.fnGRPUndefined,     X86.fnSARw              // 0xC1/0xD1/0xD3(reg=0x4-0x7)
            ];
            
            X86.aOpGrp2d = [
                X86.fnROLd,             X86.fnRORd,             X86.fnRCLd,             X86.fnRCRd,             // 0xC1/0xD1/0xD3(reg=0x0-0x3)
                X86.fnSHLd,             X86.fnSHRd,             X86.fnGRPUndefined,     X86.fnSARd              // 0xC1/0xD1/0xD3(reg=0x4-0x7)
            ];
            
            X86.aOpGrp3b = [
                X86.fnTEST8,            X86.fnGRPUndefined,     X86.fnNOTb,             X86.fnNEGb,             // 0xF6(reg=0x0-0x3)
                X86.fnMULb,             X86.fnIMULb,            X86.fnDIVb,             X86.fnIDIVb             // 0xF6(reg=0x4-0x7)
            ];
            
            X86.aOpGrp3w = [
                X86.fnTEST16,           X86.fnGRPUndefined,     X86.fnNOTw,             X86.fnNEGw,             // 0xF7(reg=0x0-0x3)
                X86.fnMULw,             X86.fnIMULw,            X86.fnDIVw,             X86.fnIDIVw             // 0xF7(reg=0x4-0x7)
            ];
            
            X86.aOpGrp4b = [
                X86.fnINCb,             X86.fnDECb,             X86.fnGRPUndefined,     X86.fnGRPUndefined,     // 0xFE(reg=0x0-0x3)
                X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined,     X86.fnGRPUndefined      // 0xFE(reg=0x4-0x7)
            ];
            
            X86.aOpGrp4w = [
                X86.fnINCw,             X86.fnDECw,             X86.fnCALLw,            X86.fnCALLFdw,          // 0xFF(reg=0x0-0x3)
                X86.fnJMPw,             X86.fnJMPFdw,           X86.fnPUSHw,            X86.fnGRPFault          // 0xFF(reg=0x4-0x7)
            ];
            
          • x86seg.js
            /**
             * @fileoverview Implements PCjs X86 Segment Registers
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-Sep-10
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            if (typeof module !== 'undefined') {
                var str         = require("../../shared/lib/strlib");
                var Messages    = require("./messages");
                var Memory      = require("./memory");
                var X86         = require("./x86");
            }
            
            /**
             * @class X86Seg
             * @property {number} sel
             * @property {number} limit (in protected-mode, this comes from descriptor word 0x0)
             * @property {number} base (in protected-mode, this comes from descriptor word 0x2)
             * @property {number} acc (in protected-mode, this comes from descriptor word 0x4; bits 0-7 supplement base bits 16-23)
             * @property {number} ext (in protected-mode, this is descriptor word 0x6, 80386 only; supplements limit bits 16-19 and base bits 24-31)
             *
             * TODO: Determine what good, if any, these class annotations are for either an IDE like WebStorm or a tool like
             * the Closure Compiler.  More importantly, what good do they do at runtime?  Is it better to simply ensure that all
             * object properties are explicitly initialized in the constructor, and document them there instead?
             */
            
            /**
             * X86Seg(cpu, sName)
             *
             * @constructor
             * @param {X86CPU} cpu
             * @param {number} id
             * @param {string} [sName] segment register name
             * @param {boolean} [fProt] true if segment register used exclusively in protected-mode (eg, segLDT)
             */
            function X86Seg(cpu, id, sName, fProt)
            {
                this.cpu = cpu;
                this.dbg = cpu.dbg;
                this.id = id;
                this.sName = sName || "";
                this.sel = 0;
                this.limit = 0xffff;
                this.offMax = this.limit + 1;
                this.base = 0;
                this.acc = this.type = 0;
                this.ext = 0;
                this.cpl = this.dpl = 0;
                this.addrDesc = X86.ADDR_INVALID;
                this.dataSize = this.addrSize = 2;
                this.dataMask = this.addrMask = 0xffff;
                /*
                 * The following properties are used for CODE segments only (ie, segCS); if the process of loading
                 * CS also requires a stack switch, then fStackSwitch will be set to true; additionally, if the stack
                 * switch was the result of a CALL (ie, fCall is true) and one or more (up to 32) parameters are on
                 * the old stack, they will be copied to awParms, and then once the stack is switched, the parameters
                 * will be pushed from awParms onto the new stack.
                 *
                 * The typical ways of loading a new segment into CS are JMPF, CALLF (or INT), and RETF (or IRET);
                 * prior to calling segCS.load(), each of those operations must first set segCS.fCall to one of null,
                 * true, or false, respectively.
                 *
                 * It's critical that fCall be properly set prior to calling segCS.load(); fCall === null means NO
                 * privilege level transition may occur, fCall === true allows a stack switch and a privilege transition
                 * to a numerically lower privilege, and fCall === false allows a stack restore and a privilege transition
                 * to a numerically greater privilege.
                 *
                 * As long as setCSIP() or fnINT() are used for all CS changes, fCall is set automatically.
                 *
                 * TODO: Consider making fCall a parameter to load(), instead of a property that must be set prior to
                 * calling load(); the downside is that such a parameter is meaningless for segments other than segCS.
                 */
                this.awParms = (this.id == X86Seg.ID.CODE? new Array(32) : []);
                this.fCall = null;
                this.fStackSwitch = false;
                this.updateMode(true, fProt);
            }
            
            X86Seg.ID = {
                NULL:   0,          // "NULL"
                CODE:   1,          // "CS"
                DATA:   2,          // "DS", "ES", "FS", "GS"
                STACK:  3,          // "SS"
                TSS:    4,          // "TSS"
                LDT:    5,          // "LDT"
                OTHER:  6,          // "VER"
                DEBUG:  7           // "DBG"
            };
            
            /**
             * loadReal(sel, fSuppress)
             *
             * The default segment load() function for real-mode.
             *
             * @this {X86Seg}
             * @param {number} sel
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} base address of selected segment, or ADDR_INVALID if error (TODO: No error conditions yet)
             */
            X86Seg.prototype.loadReal = function loadReal(sel, fSuppress)
            {
                this.sel = sel & 0xffff;
                /*
                 * Loading a new value into a segment register in real-mode alters ONLY the selector and the base;
                 * all other attributes (eg, limit, operand size, address size, etc) are unchanged.  If you run any
                 * code that switches to protected-mode, loads a 32-bit code segment, and then switches back to
                 * real-mode, it is THAT code's responsibility to load a 16-bit segment into CS before returning to
                 * real-mode; otherwise, your machine will probably be toast.
                 */
                return this.base = this.sel << 4;
            };
            
            /**
             * loadProt(sel, fSuppress)
             *
             * This replaces the segment's default load() function whenever the segment is notified via updateMode() by the
             * CPU's setProtMode() that the processor is now in protected-mode.
             *
             * Segments in protected-mode are referenced by selectors, which are indexes into descriptor tables (GDT or LDT)
             * whose descriptors are 4-word (8-byte) entries:
             *
             *      word 0: segment limit (0-15)
             *      word 1: base address low
             *      word 2: base address high (0-7), segment type (8-11), descriptor type (12), DPL (13-14), present bit (15)
             *      word 3: used only on 80386 and up (should be set to zero for upward compatibility)
             *
             * See X86.DESC for offset and bit definitions.
             *
             * IDT descriptor entries are handled separately by loadIDT(), which is mapped to loadIDTReal() or loadIDTProt().
             *
             * @this {X86Seg}
             * @param {number} sel
             * @param {boolean} [fSuppress] is true to suppress any errors, cycle assessment, etc
             * @return {number} base address of selected segment, or ADDR_INVALID if error
             */
            X86Seg.prototype.loadProt = function loadProt(sel, fSuppress)
            {
                var addrDT;
                var addrDTLimit;
                var cpu = this.cpu;
            
                /*
                 * Some instructions (eg, CALLF) load a 32-bit value for the selector, while others (eg, LDS) do not;
                 * however, in ALL cases, only the low 16 bits are significant.
                 */
                sel &= 0xffff;
            
                if (!(sel & X86.SEL.LDT)) {
                    addrDT = cpu.addrGDT;
                    addrDTLimit = cpu.addrGDTLimit;
                } else {
                    addrDT = cpu.segLDT.base;
                    addrDTLimit = (addrDT + cpu.segLDT.limit)|0;
                }
                /*
                 * The ROM BIOS POST executes some test code in protected-mode without properly initializing the LDT,
                 * which has no bearing on the ROM's own code, because it never loads any LDT selectors, but if at the same
                 * time our Debugger attempts to validate a selector in one of its breakpoints, that could cause some
                 * grief here.  We avoid that grief by 1) relying on the Debugger setting fSuppress to true, and 2) skipping
                 * segment lookup if the descriptor table being referenced is zero.  Both tests are required, because
                 * there's nothing in the design of the CPU that prevents the GDT or LDT being at linear address zero.
                 */
                if (!fSuppress || addrDT) {
                    var addrDesc = (addrDT + (sel & X86.SEL.MASK))|0;
                    if ((addrDTLimit - addrDesc)|0 >= 7) {
                        /*
                         * TODO: This is the first of many steps toward accurately counting cycles in protected mode;
                         * I simply noted that "POP segreg" takes 5 cycles in real mode and 20 in protected mode, so I'm
                         * starting with a 15-cycle difference.  Obviously the difference will vary with the instruction,
                         * and will be much greater whenever the load fails.
                         */
                        if (!fSuppress) cpu.nStepCycles -= 15;
                        return this.loadDesc8(addrDesc, sel, fSuppress);
                    }
                    if (!fSuppress) {
                        X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, sel);
                    }
                }
                return X86.ADDR_INVALID;
            };
            
            /**
             * loadIDTReal(nIDT)
             *
             * @this {X86Seg}
             * @param {number} nIDT
             * @return {number} address from selected vector, or ADDR_INVALID if error (TODO: No error conditions yet)
             */
            X86Seg.prototype.loadIDTReal = function loadIDTReal(nIDT)
            {
                var cpu = this.cpu;
                /*
                 * NOTE: The Compaq DeskPro 386 ROM loads the IDTR for the real-mode IDT with a limit of 0xffff instead
                 * of the normal 0x3ff.  A limit higher than 0x3ff is OK, since all real-mode IDT entries are 4 bytes, and
                 * there's no way to issue an interrupt with a vector > 0xff.  Just something to be aware of.
                 */
                cpu.assert(nIDT >= 0 && nIDT < 256 && !cpu.addrIDT && cpu.addrIDTLimit >= 0x3ff);
                /*
                 * Intel documentation for INT/INTO under "REAL ADDRESS MODE EXCEPTIONS" says:
                 *
                 *      "[T]he 80286 will shut down if the SP = 1, 3, or 5 before executing the INT or INTO instruction--due to lack of stack space"
                 *
                 * TODO: Verify that 80286 real-mode actually enforces the above.  See http://localhost:8088/pubs/pc/reference/intel/80286/progref/#page-260
                 */
                var addrIDT = cpu.addrIDT + (nIDT << 2);
                var off = cpu.getShort(addrIDT);
                cpu.regPS &= ~(X86.PS.TF | X86.PS.IF);
                return (this.load(cpu.getShort(addrIDT + 2)) + off)|0;
            };
            
            /**
             * loadIDTProt(nIDT)
             *
             * @this {X86Seg}
             * @param {number} nIDT
             * @return {number} address from selected vector, or ADDR_INVALID if error (TODO: No error conditions yet)
             */
            X86Seg.prototype.loadIDTProt = function loadIDTProt(nIDT)
            {
                var cpu = this.cpu;
                cpu.assert(nIDT >= 0 && nIDT < 256);
            
                nIDT <<= 3;
                var addrDesc = (cpu.addrIDT + nIDT)|0;
                if (((cpu.addrIDTLimit - addrDesc)|0) >= 7) {
                    return this.loadDesc8(addrDesc, nIDT) + cpu.regEIP;
                }
                X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, nIDT | X86.ERRCODE.IDT | X86.ERRCODE.EXT, true);
                return X86.ADDR_INVALID;
            };
            
            /**
             * checkReadReal(off, cb, fSuppress)
             *
             * TODO: Invoke X86.fnFault.call(this.cpu, X86.EXCEPTION.GP_FAULT) if off+cb is beyond offMax on 80186 and up;
             * also, determine whether fnFault() call should include an error code, since this is happening in real-mode.
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, or ADDR_INVALID if error (TODO: No error conditions yet)
             */
            X86Seg.prototype.checkReadReal = function checkReadReal(off, cb, fSuppress)
            {
                return (this.base + off)|0;
            };
            
            /**
             * checkWriteReal(off, cb, fSuppress)
             *
             * TODO: Invoke X86.fnFault.call(this.cpu, X86.EXCEPTION.GP_FAULT) if off+cb is beyond offMax on 80186 and up;
             * also, determine whether fnFault() call should include an error code, since this is happening in real-mode.
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, or ADDR_INVALID if error (TODO: No error conditions yet)
             */
            X86Seg.prototype.checkWriteReal = function checkWriteReal(off, cb, fSuppress)
            {
                return (this.base + off)|0;
            };
            
            /**
             * checkReadProt(off, cb, fSuppress)
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, or ADDR_INVALID if not
             */
            X86Seg.prototype.checkReadProt = function checkReadProt(off, cb, fSuppress)
            {
                /*
                 * Since off could be a 32-bit value with the sign bit (bit 31) set, we must convert
                 * it to an unsigned value using ">>>"; offMax was already converted at segment load time.
                 */
                if ((off >>> 0) + cb <= this.offMax) {
                    return (this.base + off)|0;
                }
                return this.checkReadProtDisallowed(off, cb, fSuppress);
            };
            
            /**
             * checkReadProtDown(off, cb, fSuppress)
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, ADDR_INVALID if not
             */
            X86Seg.prototype.checkReadProtDown = function checkReadProtDown(off, cb, fSuppress)
            {
                /*
                 * Since off could be a 32-bit value with the sign bit (bit 31) set, we must convert
                 * it to an unsigned value using ">>>"; offMax was already converted at segment load time.
                 */
                if ((off >>> 0) + cb > this.offMax) {
                    return (this.base + off)|0;
                }
                return this.checkReadProtDisallowed(off, cb, fSuppress);
            };
            
            /**
             * checkReadProtDisallowed(off, cb, fSuppress)
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, ADDR_INVALID if not
             */
            X86Seg.prototype.checkReadProtDisallowed = function checkReadProtDisallowed(off, cb, fSuppress)
            {
                if (!fSuppress) {
                    X86.fnFault.call(this.cpu, X86.EXCEPTION.GP_FAULT, 0);
                }
                return X86.ADDR_INVALID;
            };
            
            /**
             * checkWriteProt(off, cb, fSuppress)
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, ADDR_INVALID if not
             */
            X86Seg.prototype.checkWriteProt = function checkWriteProt(off, cb, fSuppress)
            {
                /*
                 * Since off could be a 32-bit value with the sign bit (bit 31) set, we must convert
                 * it to an unsigned value using ">>>"; offMax was already converted at segment load time.
                 */
                if ((off >>> 0) + cb <= this.offMax) {
                    return (this.base + off)|0;
                }
                return this.checkWriteProtDisallowed(off, cb, fSuppress);
            };
            
            /**
             * checkWriteProtDown(off, cb, fSuppress)
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, ADDR_INVALID if not
             */
            X86Seg.prototype.checkWriteProtDown = function checkWriteProtDown(off, cb, fSuppress)
            {
                /*
                 * Since off could be a 32-bit value with the sign bit (bit 31) set, we must convert
                 * it to an unsigned value using ">>>"; offMax was already converted at segment load time.
                 */
                if ((off >>> 0) + cb > this.offMax) {
                    return (this.base + off)|0;
                }
                return this.checkWriteProtDisallowed(off, cb, fSuppress);
            };
            
            /**
             * checkWriteProtDisallowed(off, cb, fSuppress)
             *
             * @this {X86Seg}
             * @param {number} off is a segment-relative offset
             * @param {number} cb is number of bytes to check (1, 2 or 4)
             * @param {boolean} [fSuppress] is true to suppress any errors
             * @return {number} corresponding linear address if valid, ADDR_INVALID if not
             */
            X86Seg.prototype.checkWriteProtDisallowed = function checkWriteProtDisallowed(off, cb, fSuppress)
            {
                if (!fSuppress) {
                    X86.fnFault.call(this.cpu, X86.EXCEPTION.GP_FAULT, 0);
                }
                return X86.ADDR_INVALID;
            };
            
            /**
             * loadAcc(sel, fGDT)
             *
             * @this {X86Seg}
             * @param {number} sel (protected-mode only)
             * @param {boolean} [fGDT] is true if sel must be in the GDT
             * @return {number} acc field from descriptor, or X86.DESC.ACC.INVALID if error
             */
            X86Seg.prototype.loadAcc = function(sel, fGDT)
            {
                var addrDT;
                var addrDTLimit;
                var cpu = this.cpu;
            
                if (!(sel & X86.SEL.LDT)) {
                    addrDT = cpu.addrGDT;
                    addrDTLimit = cpu.addrGDTLimit;
                } else if (!fGDT) {
                    addrDT = cpu.segLDT.base;
                    addrDTLimit = (addrDT + cpu.segLDT.limit)|0;
                }
                if (addrDT !== undefined) {
                    var addrDesc = (addrDT + (sel & X86.SEL.MASK))|0;
                    if (((addrDTLimit - addrDesc)|0) >= 7) {
                        return cpu.getShort(addrDesc + X86.DESC.ACC.OFFSET);
                    }
                }
                X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, sel);
                return X86.DESC.ACC.INVALID;
            };
            
            /**
             * loadDesc6(addrDesc, sel)
             *
             * Used to load a protected-mode selector that refers to a 6-byte "descriptor cache" (aka LOADALL) entry:
             *
             *      word 0: base address low
             *      word 1: base address high (0-7), segment type (8-11), descriptor type (12), DPL (13-14), present bit (15)
             *      word 2: segment limit (0-15)
             *
             * @this {X86Seg}
             * @param {number} addrDesc is the descriptor address
             * @param {number} sel is the associated selector
             * @return {number} base address of selected segment
             */
            X86Seg.prototype.loadDesc6 = function(addrDesc, sel)
            {
                var cpu = this.cpu;
                var acc = cpu.getShort(addrDesc + 2);
                var base = cpu.getShort(addrDesc) | ((acc & 0xff) << 16);
                var limit = cpu.getShort(addrDesc + 4);
            
                this.sel = sel;
                this.base = base;
                this.limit = limit;
                this.offMax = (limit >>> 0) + 1;
                this.acc = acc;
                this.type = (acc & X86.DESC.ACC.TYPE.MASK);
                this.ext = 0;
                this.addrDesc = addrDesc;
                this.updateMode(true);
            
                this.messageSeg(sel, base, limit, this.type);
            
                return base;
            };
            
            /**
             * loadDesc8(addrDesc, sel, fSuppress)
             *
             * Used to load a protected-mode selector that refers to an 8-byte "descriptor table" (GDT, LDT, IDT) entry:
             *
             *      word 0: segment limit (0-15)
             *      word 1: base address low
             *      word 2: base address high (0-7), segment type (8-11), descriptor type (12), DPL (13-14), present bit (15)
             *      word 3: used only on 80386 and up (should be set to zero for upward compatibility)
             *
             * See X86.DESC for offset and bit definitions.
             *
             * @this {X86Seg}
             * @param {number} addrDesc is the descriptor address
             * @param {number} sel is the associated selector, or nIDT*8 if IDT descriptor
             * @param {boolean} [fSuppress] is true to suppress any errors, cycle assessment, etc
             * @return {number} base address of selected segment, or ADDR_INVALID if error
             */
            X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
            {
                var cpu = this.cpu;
                var limit = cpu.getShort(addrDesc + X86.DESC.LIMIT.OFFSET);
                var acc = cpu.getShort(addrDesc + X86.DESC.ACC.OFFSET);
                var type = (acc & X86.DESC.ACC.TYPE.MASK);
                var base = cpu.getShort(addrDesc + X86.DESC.BASE.OFFSET) | ((acc & X86.DESC.ACC.BASE1623) << 16);
                var ext = cpu.getShort(addrDesc + X86.DESC.EXT.OFFSET);
                var selMasked = sel & X86.SEL.MASK;
            
                if (I386 && cpu.model >= X86.MODEL_80386) {
                    base |= (ext & X86.DESC.EXT.BASE2431) << 16;
                    limit |= (ext & X86.DESC.EXT.LIMIT1619) << 16;
                    if (ext & X86.DESC.EXT.LIMITPAGES) limit = (limit << 12) | 0xfff;
                }
            
                while (true) {
            
                    var selCode, cplPrev, addrTSS, offSP, offSS, regSPPrev, regSSPrev;
            
                    /*
                     * TODO: Consider moving the following chunks of code into worker functions for each X86Seg.ID;
                     * however, it's not clear that these tests are more costly than making additional function calls.
                     */
                    if (this.id == X86Seg.ID.CODE) {
                        this.fStackSwitch = false;
                        var fCall = this.fCall;
                        var fGate, regPSMask, nFaultError, regSP;
                        var rpl = sel & X86.SEL.RPL;
                        var dpl = (acc & X86.DESC.ACC.DPL.MASK) >> X86.DESC.ACC.DPL.SHIFT;
            
                        if (selMasked && !(acc & X86.DESC.ACC.PRESENT)) {
                            if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.NP_FAULT, sel);
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
            
                        /*
                         * Since we are X86Seg.ID.CODE, we can use this.cpl instead of the more generic cpu.segCS.cpl
                         */
                        if (type >= X86.DESC.ACC.TYPE.CODE_EXECONLY) {
                            rpl = sel & X86.SEL.RPL;
                            if (rpl > this.cpl) {
                                /*
                                 * If fCall is false, then we must have a RETF to a less privileged segment, which is OK.
                                 *
                                 * Otherwise, we must be dealing with a CALLF or JMPF to a less privileged segment, in which
                                 * case either DPL == CPL *or* the new segment is conforming and DPL <= CPL.
                                 */
                                if (fCall !== false && !(dpl == this.cpl || (type & X86.DESC.ACC.TYPE.CONFORMING) && dpl <= this.cpl)) {
                                    base = addrDesc = X86.ADDR_INVALID;
                                    break;
                                }
                                regSP = cpu.popWord();
                                cpu.setSS(cpu.popWord(), true);
                                cpu.setSP(regSP);
                                this.fStackSwitch = true;
                            }
                            fGate = false;
                        }
                        else if (type == X86.DESC.ACC.TYPE.TSS) {
                            if (!this.switchTSS(sel, fCall)) {
                                base = addrDesc = X86.ADDR_INVALID;
                                break;
                            }
                            return this.base;
                        }
                        else if (type == X86.DESC.ACC.TYPE.GATE_CALL) {
                            fGate = true;
                            regPSMask = ~0;
                            nFaultError = sel;
                            if (rpl < this.cpl) rpl = this.cpl;     // set RPL to max(RPL,CPL) for call gates
                        }
                        else if (type == X86.DESC.ACC.TYPE.GATE_INT) {
                            fGate = true;
                            regPSMask = ~(X86.PS.NT | X86.PS.TF | X86.PS.IF);
                            nFaultError = sel | X86.ERRCODE.EXT;
                            cpu.assert(!(acc & 0x1f));
                        }
                        else if (type == X86.DESC.ACC.TYPE.GATE_TRAP) {
                            fGate = true;
                            regPSMask = ~(X86.PS.NT | X86.PS.TF);
                            nFaultError = sel | X86.ERRCODE.EXT;
                            cpu.assert(!(acc & 0x1f));
                        }
                        else if (type == X86.DESC.ACC.TYPE.GATE_TASK) {
                            if (!this.switchTSS(base & 0xffff, fCall)) {
                                base = addrDesc = X86.ADDR_INVALID;
                                break;
                            }
                            return this.base;
                        }
                        if (fGate) {
                            /*
                             * Note that since GATE_INT/GATE_TRAP descriptors should appear in the IDT only, that means sel
                             * will actually be nIDT * 8, which means the rpl will always be zero; additionally, the nWords
                             * portion of acc should always be zero, but that's really dependent on the descriptor being properly
                             * set (which we assert above).
                             */
                            selCode = base & 0xffff;
                            if (rpl <= dpl) {
                                /*
                                 * TODO: Verify the PRESENT bit of the gate descriptor, and issue NP_FAULT as appropriate.
                                 */
                                cplPrev = this.cpl;
                                if (this.load(selCode, true) === X86.ADDR_INVALID) {
                                    cpu.assert(false);
                                    base = addrDesc = X86.ADDR_INVALID;
                                    break;
                                }
                                cpu.regEIP = limit;
                                if (this.cpl < cplPrev) {
                                    if (fCall !== true) {
                                        cpu.assert(false);
                                        base = addrDesc = X86.ADDR_INVALID;
                                        break;
                                    }
                                    regSP = cpu.getSP();
                                    var i = 0, nWords = (acc & 0x1f);
                                    while (nWords--) {
                                        this.awParms[i++] = cpu.getSOWord(cpu.segSS, regSP);
                                        regSP += 2;
                                    }
                                    addrTSS = cpu.segTSS.base;
                                    offSP = (this.cpl << 2) + X86.TSS.CPL0_SP;
                                    offSS = offSP + 2;
                                    regSSPrev = cpu.getSS();
                                    regSPPrev = cpu.getSP();
                                    cpu.setSS(cpu.getShort(addrTSS + offSS), true);
                                    cpu.setSP(cpu.getShort(addrTSS + offSP));
                                    cpu.pushWord(regSSPrev);
                                    cpu.pushWord(regSPPrev);
                                    while (i) cpu.pushWord(this.awParms[--i]);
                                    this.fStackSwitch = true;
                                }
                                cpu.regPS &= regPSMask;
                                return this.base;
                            }
                            cpu.assert(false);
                            if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, nFaultError, true);
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
                        else if (fGate !== false) {
                            cpu.assert(false);
                            if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, sel, true);
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
                    }
                    else if (this.id == X86Seg.ID.DATA) {
                        if (selMasked) {
                            if (!(acc & X86.DESC.ACC.PRESENT)) {
                                if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.NP_FAULT, sel);
                                base = addrDesc = X86.ADDR_INVALID;
                                break;
                            }
                            if (type < X86.DESC.ACC.TYPE.SEG || (type & (X86.DESC.ACC.TYPE.CODE | X86.DESC.ACC.TYPE.READABLE)) == X86.DESC.ACC.TYPE.CODE) {
                                /*
                                 * OS/2 1.0 triggers this "Empty Descriptor" GP_FAULT multiple times during boot; eg:
                                 *
                                 *      Fault 0D (002F) on opcode 0x8E at 3190:3A05 (%112625)
                                 *      stopped (11315208 ops, 41813627 cycles, 498270 ms, 83918 hz)
                                 *      AX=0000 BX=0970 CX=0300 DX=0300 SP=0ABE BP=0ABA SI=0000 DI=001A
                                 *      DS=19C0[177300,2C5F] ES=001F[1743A0,07FF] SS=0038[175CE0,0B5F]
                                 *      CS=3190[10EC20,B89F] IP=3A05 V0 D0 I1 T0 S0 Z1 A0 P1 C0 PS=3246 MS=FFF3
                                 *      LD=0028[174BC0,003F] GD=[11A4E0,490F] ID=[11F61A,03FF]  TR=0010 A20=ON
                                 *      3190:3A05 8E4604        MOV      ES,[BP+04]
                                 *      0038:0ABE  002F  19C0  0000  067C - 07FC  0AD2  0010  C420   /.....|....... .
                                 *      dumpDesc(002F): %174BE8
                                 *      base=000000 limit=0000 dpl=00 type=00 (undefined)
                                 *
                                 * If we allow the GP fault to be dispatched, it recovers, so until I'm able to investigate this
                                 * further, I'm going to assume this is normal behavior.  If the segment (0x002F in the example)
                                 * simply needed to be "faulted" into memory, I would have expected OS/2 to build a descriptor
                                 * with the PRESENT bit clear, and rely on NP_FAULT rather than GP_FAULT, but maybe this was simpler.
                                 *
                                 * Anyway, because of this, if acc is zero, we won't set fHalt on this GP_FAULT.
                                 */
                                if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, sel, !!acc);
                                base = addrDesc = X86.ADDR_INVALID;
                                break;
                            }
                        }
                    }
                    else if (this.id == X86Seg.ID.STACK) {
                        if (!(acc & X86.DESC.ACC.PRESENT)) {
                            if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.SS_FAULT, sel);
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
                        if (!selMasked || type < X86.DESC.ACC.TYPE.SEG || (type & (X86.DESC.ACC.TYPE.CODE | X86.DESC.ACC.TYPE.WRITABLE)) != X86.DESC.ACC.TYPE.WRITABLE) {
                            if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, sel, true);
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
                    }
                    else if (this.id == X86Seg.ID.TSS) {
                        if (!selMasked || type != X86.DESC.ACC.TYPE.TSS && type != X86.DESC.ACC.TYPE.TSS_BUSY) {
                            if (!fSuppress) X86.fnFault.call(cpu, X86.EXCEPTION.TS_FAULT, sel, true);
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
                    }
                    else if (this.id == X86Seg.ID.OTHER) {
                        /*
                         * For LSL, we must support any descriptor marked X86.DESC.ACC.TYPE.SEG, as well as TSS and LDT descriptors.
                         */
                        if (!(type & X86.DESC.ACC.TYPE.SEG) && type > X86.DESC.ACC.TYPE.TSS_BUSY) {
                            base = addrDesc = X86.ADDR_INVALID;
                            break;
                        }
                    }
                    this.sel = sel;
                    this.base = base;
                    this.limit = limit;
                    this.offMax = (limit >>> 0) + 1;
                    this.acc = acc;
                    this.type = type;
                    this.ext = ext;
                    this.addrDesc = addrDesc;
                    this.updateMode(true);
                    break;
                }
                if (!fSuppress) this.messageSeg(sel, base, limit, type, ext);
                return base;
            };
            
            /**
             * switchTSS(selNew, fNest)
             *
             * Implements TSS (Task State Segment) task switching.
             *
             * NOTES: This typically occurs during double-fault processing, because the IDT entry for DF_FAULT normally
             * contains a task gate.  Interestingly, if we force a GP_FAULT to occur at a sufficiently early point in the
             * OS/2 1.0 initialization code, OS/2 does a nice job of displaying the GP fault and then shutting down:
             *
             *      0090:067B FB            STI
             *      0090:067C EBFD          JMP      067B
             *
             * but it may not have yet reprogrammed the master PIC to re-vector hardware interrupts to IDT entries 0x50-0x57,
             * so when the next timer interrupt (IRQ 0) occurs, it vectors through IDT entry 0x08, which is the DF_FAULT
             * vector. A spurious double-fault is generated, and a clean shutdown turns into a messy crash.
             *
             * Of course, that all could have been avoided if IBM had heeded Intel's advice and not used Intel-reserved IDT
             * entries for PC interrupts.
             *
             * TODO: Add 80386 TSS support (including CR3 support).
             *
             * @this {X86Seg}
             * @param {number} selNew
             * @param {boolean|null} [fNest] is true if nesting, false if un-nesting, null if neither
             * @return {boolean} true if successful, false if error
             */
            X86Seg.prototype.switchTSS = function switchTSS(selNew, fNest)
            {
                var cpu = this.cpu;
                cpu.assert(this === cpu.segCS);
            
                var addrOld = cpu.segTSS.base;
                var cplOld = this.cpl;
                var selOld = cpu.segTSS.sel;
            
                if (!fNest) {
                    /*
                     * TODO: Verify that it is (always) correct to require that the BUSY bit be currently set.
                     */
                    if (cpu.segTSS.type != X86.DESC.ACC.TYPE.TSS_BUSY) {
                        X86.fnFault.call(cpu, X86.EXCEPTION.TS_FAULT, selNew, true);
                        return false;
                    }
                    cpu.setShort(cpu.segTSS.addrDesc + X86.DESC.ACC.OFFSET, (cpu.segTSS.acc & ~X86.DESC.ACC.TYPE.TSS_BUSY) | X86.DESC.ACC.TYPE.TSS);
                }
            
                if (cpu.segTSS.load(selNew) === X86.ADDR_INVALID) {
                    return false;
                }
            
                var addrNew = cpu.segTSS.base;
                if (DEBUG && DEBUGGER && this.dbg && this.dbg.messageEnabled(Messages.TSS)) {
                    this.dbg.message((fNest? "Task switch" : "Task return") + ": TR " + str.toHexWord(selOld) + " (%" + str.toHex(addrOld, 6) + "), new TR " + str.toHexWord(selNew) + " (%" + str.toHex(addrNew, 6) + ")");
                }
                if (fNest === false) {
                    if (cpu.segTSS.type != X86.DESC.ACC.TYPE.TSS_BUSY) {
                        X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, selNew, true);
                        return false;
                    }
                } else {
                    if (cpu.segTSS.type == X86.DESC.ACC.TYPE.TSS_BUSY) {
                        X86.fnFault.call(cpu, X86.EXCEPTION.GP_FAULT, selNew, true);
                        return false;
                    }
                    cpu.setShort(cpu.segTSS.addrDesc + X86.DESC.ACC.OFFSET, cpu.segTSS.acc |= X86.DESC.ACC.TYPE.TSS_BUSY);
                    cpu.segTSS.type = X86.DESC.ACC.TYPE.TSS_BUSY;
                }
            
                /*
                 * Update the old TSS
                 */
                cpu.setShort(addrOld + X86.TSS.TASK_IP, cpu.getIP());
                cpu.setShort(addrOld + X86.TSS.TASK_PS, cpu.getPS());
                cpu.setShort(addrOld + X86.TSS.TASK_AX, cpu.regEAX);
                cpu.setShort(addrOld + X86.TSS.TASK_CX, cpu.regECX);
                cpu.setShort(addrOld + X86.TSS.TASK_DX, cpu.regEDX);
                cpu.setShort(addrOld + X86.TSS.TASK_BX, cpu.regEBX);
                cpu.setShort(addrOld + X86.TSS.TASK_SP, cpu.getSP());
                cpu.setShort(addrOld + X86.TSS.TASK_BP, cpu.regEBP);
                cpu.setShort(addrOld + X86.TSS.TASK_SI, cpu.regESI);
                cpu.setShort(addrOld + X86.TSS.TASK_DI, cpu.regEDI);
                cpu.setShort(addrOld + X86.TSS.TASK_ES, cpu.segES.sel);
                cpu.setShort(addrOld + X86.TSS.TASK_CS, cpu.segCS.sel);
                cpu.setShort(addrOld + X86.TSS.TASK_SS, cpu.segSS.sel);
                cpu.setShort(addrOld + X86.TSS.TASK_DS, cpu.segDS.sel);
            
                /*
                 * Reload all registers from the new TSS; it's important to reload the LDTR sooner
                 * rather than later, so that as segment registers are reloaded, any LDT selectors will
                 * will be located in the correct table.
                 */
                cpu.segLDT.load(cpu.getShort(addrNew + X86.TSS.TASK_LDT));
                cpu.setPS(cpu.getShort(addrNew + X86.TSS.TASK_PS) | (fNest? X86.PS.NT : 0));
                cpu.assert(!fNest || !!(cpu.regPS & X86.PS.NT));
                cpu.regEAX = cpu.getShort(addrNew + X86.TSS.TASK_AX);
                cpu.regECX = cpu.getShort(addrNew + X86.TSS.TASK_CX);
                cpu.regEDX = cpu.getShort(addrNew + X86.TSS.TASK_DX);
                cpu.regEBX = cpu.getShort(addrNew + X86.TSS.TASK_BX);
                cpu.regEBP = cpu.getShort(addrNew + X86.TSS.TASK_BP);
                cpu.regESI = cpu.getShort(addrNew + X86.TSS.TASK_SI);
                cpu.regEDI = cpu.getShort(addrNew + X86.TSS.TASK_DI);
                cpu.segES.load(cpu.getShort(addrNew + X86.TSS.TASK_ES));
                cpu.segDS.load(cpu.getShort(addrNew + X86.TSS.TASK_DS));
                cpu.setCSIP(cpu.getShort(addrNew + X86.TSS.TASK_IP), cpu.getShort(addrNew + X86.TSS.TASK_CS));
            
                var offSS = X86.TSS.TASK_SS;
                var offSP = X86.TSS.TASK_SP;
                if (this.cpl < cplOld) {
                    offSP = (this.cpl << 2) + X86.TSS.CPL0_SP;
                    offSS = offSP + 2;
                }
                cpu.setSS(cpu.getShort(addrNew + offSS), true);
                cpu.setSP(cpu.getShort(addrNew + offSP));
            
                if (fNest) cpu.setShort(addrNew + X86.TSS.PREV_TSS, selOld);
            
                cpu.regCR0 |= X86.CR0.MSW.TS;
                return true;
            };
            
            /**
             * setBase(addr)
             *
             * This is used in unusual situations where the base must be set independently; normally, the base
             * is set according to the selector provided to load(), but there are a few cases where setBase()
             * is required.
             *
             * For example, in resetRegs(), the real-mode CS selector must be reset to 0xF000 for an 80286 or 80386,
             * but the CS base must be set to 0x00FF0000 or 0xFFFF0000, respectively.  To simplify life for setBase()
             * callers, we allow them to specify 32-bit bases, which we then truncate to 24 bits as needed.
             *
             * WARNING: Since the CPU must maintain regLIP as the sum of the CS base and the current IP, all calls
             * to segCS.setBase() need to go through setCSBase().
             *
             * @this {X86Seg}
             * @param {number} addr
             * @return {number} addr, truncated as needed
             */
            X86Seg.prototype.setBase = function(addr)
            {
                if (this.cpu.model < X86.MODEL_80386) addr &= 0xffffff;
                return this.base = addr;
            };
            
            /**
             * save()
             *
             * Early versions of PCjs saved only segment selectors, since that's all that mattered in real-mode;
             * newer versions need to save/restore all the "defining" properties of the X86Seg object.
             *
             * @this {X86Seg}
             * @return {Array}
             */
            X86Seg.prototype.save = function()
            {
                return [
                    this.sel,
                    this.base,
                    this.limit,
                    this.acc,
                    this.id,
                    this.sName,
                    this.cpl,
                    this.dpl,
                    this.addrDesc,
                    this.addrSize,
                    this.addrMask,
                    this.dataSize,
                    this.dataMask,
                    this.type,
                    this.offMax
                ];
            };
            
            /**
             * restore(a)
             *
             * Early versions of PCjs saved only segment selectors, since that's all that mattered in real-mode;
             * newer versions need to save/restore all the "defining" properties of the X86Seg object.
             *
             * @this {X86Seg}
             * @param {Array|number} a
             */
            X86Seg.prototype.restore = function(a)
            {
                if (typeof a == "number") {
                    this.load(a);
                } else {
                    this.sel      = a[0];
                    this.base     = a[1];
                    this.limit    = a[2];
                    this.acc      = a[3];
                    this.id       = a[4];
                    this.sName    = a[5];
                    this.cpl      = a[6];
                    this.dpl      = a[7];
                    this.addrDesc = a[8];
                    this.addrSize = a[9]  || 2;
                    this.addrMask = a[10] || 0xffff;
                    this.dataSize = a[11] || 2;
                    this.dataMask = a[12] || 0xffff;
                    this.type     = a[13] || (this.acc & X86.DESC.ACC.TYPE.MASK);
                    this.offMax   = a[14] || (this.limit >>> 0) + 1;
                }
            };
            
            /**
             * updateMode(fLoad, fProt)
             *
             * Ensures that the segment register's access (ie, load and check methods) matches the specified (or current)
             * operating mode (real or protected).
             *
             * @this {X86Seg}
             * @param {boolean} [fLoad] true if the segment was just (re)loaded, false if not
             * @param {boolean} [fProt] true for protected-mode access, false for real-mode access, undefined for current mode
             * @return {boolean}
             */
            X86Seg.prototype.updateMode = function(fLoad, fProt)
            {
                if (fProt === undefined) {
                    fProt = !!(this.cpu.regCR0 & X86.CR0.MSW.PE);
                }
            
                /*
                 * The following properties are used for STACK segments only (ie, segSS); we want to make it easier
                 * for setSS() to set stack lower and upper limits, which requires knowing whether or not the segment is
                 * marked as EXPDOWN.
                 */
                this.fExpDown = false;
            
                if (fProt) {
                    this.load = this.loadProt;
                    this.loadIDT = this.loadIDTProt;
                    this.checkRead = this.checkReadProt;
                    this.checkWrite = this.checkWriteProt;
            
                    /*
                     * TODO: For null GDT selectors, should we rely on the descriptor being invalid, or should we assume that
                     * the null descriptor might contain uninitialized (or other) data?  I'm assuming the latter, hence the
                     * following null selector test.  However, if we're not going to consult the descriptor, is there anything
                     * else we should (or should not) be doing for null GDT selectors?
                     */
                    if (!(this.sel & ~X86.SEL.RPL)) {
                        this.checkRead = this.checkReadProtDisallowed;
                        this.checkWrite = this.checkWriteProtDisallowed;
            
                    }
                    else if (this.type & X86.DESC.ACC.TYPE.SEG) {
                        /*
                         * If the READABLE bit of CODE_READABLE is not set, then disallow reads.
                         */
                        if ((this.type & X86.DESC.ACC.TYPE.CODE_READABLE) == X86.DESC.ACC.TYPE.CODE_EXECONLY) {
                            this.checkRead = this.checkReadProtDisallowed;
                        }
                        /*
                         * If the CODE bit is set, or the the WRITABLE bit is not set, then disallow writes.
                         */
                        if ((this.type & X86.DESC.ACC.TYPE.CODE) || !(this.type & X86.DESC.ACC.TYPE.WRITABLE)) {
                            this.checkWrite = this.checkWriteProtDisallowed;
                        }
                        /*
                         * If the CODE bit is not set *and* the EXPDOWN bit is set, then invert the limit check.
                         */
                        if ((this.type & (X86.DESC.ACC.TYPE.CODE | X86.DESC.ACC.TYPE.EXPDOWN)) == X86.DESC.ACC.TYPE.EXPDOWN) {
                            if (this.checkRead == this.checkReadProt) this.checkRead = this.checkReadProtDown;
                            if (this.checkWrite == this.checkWriteProt) this.checkWrite = this.checkWriteProtDown;
                            this.fExpDown = true;
                        }
                    }
                    /*
                     * TODO: For non-SEG descriptors, are there other checks or functions we should establish?
                     */
            
                    /*
                     * Any update to the following properties must occur only on segment loads, not simply when
                     * we're updating segment registers as part of a mode change.
                     */
                    if (fLoad) {
                        /*
                         * We must update the descriptor's ACCESSED bit whenever the segment is "accessed" (ie,
                         * loaded); unlike the ACCESSED and DIRTY bits in PTEs, a descriptor ACCESSED bit is only
                         * updated on loads, not on every memory access.
                         *
                         * We compute address of the descriptor byte containing the ACCESSED bit (offset 0x5);
                         * note that it's perfectly normal for addrDesc to occasionally be invalid (eg, when the CPU
                         * is creating protected-mode-only segment registers like LDT and TSS, or when the CPU has
                         * transitioned from real-mode to protected-mode and new selector(s) have not been loaded yet).
                         *
                         * TODO: Note I do NOT update the ACCESSED bit for null GDT selectors, because I assume the
                         * hardware does not update it either.  In fact, I've seen code that uses the null GDT descriptor
                         * for other purposes, on the assumption that that descriptor is completely unused.
                         */
                        if ((this.sel & ~X86.SEL.RPL) && this.addrDesc !== X86.ADDR_INVALID) {
                            var addrType = this.addrDesc + X86.DESC.ACC.TYPE.OFFSET;
                            this.cpu.setByte(addrType, this.cpu.getByte(addrType) | (X86.DESC.ACC.TYPE.ACCESSED >> 8));
                        }
                        this.cpl = this.sel & X86.SEL.RPL;
                        this.dpl = (this.acc & X86.DESC.ACC.DPL.MASK) >> X86.DESC.ACC.DPL.SHIFT;
                        if (this.cpu.model < X86.MODEL_80386 || !(this.ext & X86.DESC.EXT.BIG)) {
                            this.dataSize = 2;
                            this.dataMask = 0xffff;
                        } else {
                            this.dataSize = 4;
                            this.dataMask = (0xffffffff|0);
                        }
                        this.addrSize = this.dataSize;
                        this.addrMask = this.dataMask;
                    }
                } else {
                    this.load = this.loadReal;
                    this.loadIDT = this.loadIDTReal;
                    this.checkRead = this.checkReadReal;
                    this.checkWrite = this.checkWriteReal;
                    this.cpl = this.dpl = 0;
                    this.addrDesc = X86.ADDR_INVALID;
                }
                return fProt;
            };
            
            /**
             * messageSeg(sel, base, limit, type, ext)
             *
             * @this {X86Seg}
             * @param {number} sel
             * @param {number} base
             * @param {number} limit
             * @param {number} type
             * @param {number} [ext]
             */
            X86Seg.prototype.messageSeg = function(sel, base, limit, type, ext)
            {
                if (DEBUG) {
                    if (DEBUGGER && this.dbg && this.dbg.messageEnabled(Messages.SEG)) {
                        var ch = (this.sName.length < 3? " " : "");
                        var sDPL = " dpl=" + this.dpl;
                        if (this.id == X86Seg.ID.CODE) sDPL += " cpl=" + this.cpl;
                        this.dbg.message("loadSeg(" + this.sName + "):" + ch + "sel=" + str.toHexWord(sel) + " base=" + str.toHex(base) + " limit=" + str.toHexWord(limit) + " type=" + str.toHexWord(type) + sDPL, true);
                    }
                    this.cpu.assert(/* base !== X86.ADDR_INVALID && */ (this.cpu.model >= X86.MODEL_80386 || !ext || ext == X86.DESC.EXT.AVAIL));
                }
            };
            
            if (typeof module !== 'undefined') module.exports = X86Seg;
            
      • shared
        • lib
          • README.md
            Shared Sources
            ===
            
            This folder contains a mix of shared code, with some files used only by Node (server) modules,
            some used only by Browser (client) modules, and others used by both.
            
            At the moment, only a few files are completely agnostic; eg: [strlib.js](strlib.js) and [usrlib.js](usrlib.js).
            One give-away is that neither contain references to any globals (although references to each other
            would be fine).
            
            [netlib.js](netlib.js) is appropriate only for Node modules, because it contains code that relies on Node's
            global *Buffer* object, as indicated by:
            
            	/* global Buffer: false */
            
            And [weblib.js](weblib.js) is appropriate only for client modules, because it contains code that relies on the
            browser's global *window* object, as indicated by:
            
            	/* global window: true */
            
            We declare *window* modifiable (true) so that [defines.js](defines.js) can set *global.window* to *false*
            when running within Node, allowing any other code to test the existence of *window* with a simple:
            
            	if (window) {...}
            	
            instead of:
            
            	if (typeof window !== "undefined") {...}
            
          • component.js
            /**
             * @fileoverview The Component class used by C1Pjs and PCjs.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-May-14
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            /*
             * All the C1Pjs and PCjs components now use JSDoc types, primarily so that Google's Closure Compiler
             * will compile everything with ZERO warnings.  For more information about the JSDoc types supported by
             * the Closure Compiler:
             *
             *      https://developers.google.com/closure/compiler/docs/js-for-compiler#types
             *
             * I also attempted to use JSLint, but it's excessively strict for my taste, so this is the only file
             * I tried massaging for JSLint's sake.  I gave up when it complained about my use of "while (true)";
             * replacing "true" with an assignment expression didn't make it any happier.
             *
             * I wasn't thrilled about replacing all "++" and "--" operators with "+= 1" and "-= 1", nor about using
             * "(s || '')" instead of "(s? s : '')", because while the former may seem simpler, it is NOT more portable.
             * It's not that I'm trying to write "portable JavaScript", but some of this code was ported from C code I'd
             * written about 14 years earlier, and portability is good, so I'm not going to rewrite if there's no need.
             *
             * UPDATE: I've since switched to JSHint, which seems to have more reasonable defaults.
             */
            
            "use strict";
            
            /* global window: true, DEBUG: true */
            
            if (typeof module !== 'undefined') {
                require("./defines");
                var usr = require("./usrlib");
                var web = require("./weblib");
            }
            
            /**
             * Component(type, parms, constructor, bitsMessage)
             *
             * A Component object requires:
             *
             *      type: a user-defined type name (eg, "CPU")
             *
             * and accepts any or all of the following (parms) properties:
             *
             *      id: component ID (default is "")
             *      name: component name (default is ""; if blank, toString() will use the type name only)
             *      comment: component comment string (default is undefined)
             *
             * Subclasses that use Component.subclass() to extend Component will likely have additional (parms) properties.
             *
             * @constructor
             * @param {string} type
             * @param {Object} [parms]
             * @param {Object} [constructor]
             * @param {number} [bitsMessage]
             */
            function Component(type, parms, constructor, bitsMessage)
            {
                this.type = type;
            
                if (!parms) parms = {'id': "", 'name': ""};
            
                this.id = parms['id'];
                this.name = parms['name'];
                this.comment = parms['comment'];
                this.parms = parms;
                if (this.id === undefined) this.id = "";
            
                var i = this.id.indexOf('.');
                if (i > 0) {
                    this.idMachine = this.id.substr(0, i);
                    this.idComponent = this.id.substr(i + 1);
                } else {
                    this.idComponent = this.id;
                }
            
                /*
                 * Recording the constructor is really just a debugging aid, because many of our constructors
                 * have class constants, but they're hard to find when the constructors are buried among all the
                 * other globals.
                 */
                this[type] = constructor;
            
                /*
                 * Gather all the various component flags (booleans) into a single "flags" object, and encourage
                 * subclasses to do the same, to reduce the property clutter we have to wade through while debugging.
                 */
                this.aFlags = {
                    fReady: false,
                    fBusy: false,
                    fBusyCancel: false,
                    fPowered: false,
                    fError: false
                };
            
                this.fnReady = null;
                this.clearError();
                this.bindings = {};
                this.dbg = null;                    // by default, no connection to a Debugger
                this.bitsMessage = bitsMessage || -1;
            
                Component.add(this);
            }
            
            /**
             * Component.parmsURL
             *
             * Initialized to the set of URL parameters, if any, for the current web page.
             *
             * @type {Object|null}
             */
            Component.parmsURL = web.getURLParameters();
            
            /**
             * Component.inherit(p)
             *
             * Returns a newly created object that inherits properties from the prototype object p.
             * It uses the ECMAScript 5 function Object.create() if it is defined, and otherwise falls back to an older technique.
             *
             * See: Flanagan, David (2011-04-18). JavaScript: The Definitive Guide: The Definitive Guide (Kindle Locations 9854-9903). OReilly Media - A. Kindle Edition (Example 6-1)
             *
             * @param {Object} p
             */
            Component.inherit = function(p)
            {
                if (window) {
                    if (!p) throw new TypeError();
                    if (Object.create) {
                        return Object.create(p);
                    }
                    var t = typeof p;
                    if (t !== "object" && t !== "function") throw new TypeError();
                }
                /**
                 * @constructor
                 */
                function F() {}
                F.prototype = p;
                return new F();
            };
            
            /**
             * Component.extend(o, p)
             *
             * Copies the enumerable properties of p to o and returns o.
             * If o and p have a property by the same name, o's property is overwritten.
             *
             * See: Flanagan, David (2011-04-18). JavaScript: The Definitive Guide: The Definitive Guide (Kindle Locations 9854-9903). OReilly Media - A. Kindle Edition (Example 6-2)
             *
             * @param {Object} o
             * @param {Object} p
             */
            Component.extend = function(o, p)
            {
                for (var prop in p) {
                    o[prop] = p[prop];
                }
                return o;
            };
            
            /**
             * Component.subclass(subclass, superclass, methods, statics)
             *
             * See: Flanagan, David (2011-04-18). JavaScript: The Definitive Guide: The Definitive Guide (Kindle Locations 9854-9903). OReilly Media - A. Kindle Edition (Example 9-11)
             *
             * @param {Object} subclass is the constructor for the new subclass
             * @param {Object} [superclass] is the constructor of the superclass (default is Component)
             * @param {Object} [methods] contains all instance methods
             * @param {Object} [statics] contains all class properties and methods
             */
            Component.subclass = function(subclass, superclass, methods, statics)
            {
                if (!superclass) superclass = Component;
                subclass.prototype = Component.inherit(superclass.prototype);
                subclass.prototype.constructor = subclass;
                subclass.prototype.parent = superclass.prototype;
                if (methods) {
                    Component.extend(subclass.prototype, methods);
                }
                if (statics) {
                    Component.extend(subclass, statics);
                }
                return subclass;
            };
            
            /*
             * Every component created on the current page is recorded in this array (see Component.add()).
             *
             * This enables any component to locate another component by ID (see Component.getComponentByID())
             * or by type (see Component.getComponentByType()).
             */
            Component.all = [];
            
            /**
             * Component.add(component)
             *
             * @param {Component} component
             */
            Component.add = function(component)
            {
                /*
                 * This just generates a lot of useless noise, handy in the early days, not so much these days...
                 *
                 *      if (DEBUG) Component.log("Component.add(" + component.type + "," + component.id + ")");
                 */
                Component.all[Component.all.length] = component;
            };
            
            /**
             * Component.log(s, type)
             *
             * For diagnostic output only.
             *
             * @param {string} [s] is the message text
             * @param {string} [type] is the message type
             */
            Component.log = function(s, type)
            {
                if (DEBUG) {
                    if (s) {
                        var msElapsed, sMsg = (type? (type + ": ") : "") + s;
                        if (Component.msStart === undefined) {
                            Component.msStart = usr.getTime();
                        }
                        msElapsed = usr.getTime() - Component.msStart;
                        if (window && window.console) console.log(msElapsed + "ms: " + sMsg.replace(/\n/g, " "));
                    }
                }
            };
            
            /**
             * Component.assert(f, s)
             *
             * Verifies conditions that must be true (for DEBUG builds only).
             *
             * The Closure Compiler should automatically remove all references to Component.assert() in non-DEBUG builds.
             *
             * TODO: Add a task to the build process that "asserts" there are no instances of "assertion failure" in RELEASE builds.
             *
             * @param {boolean} f is the expression we are asserting to be true
             * @param {string} [s] is description of the assertion on failure
             */
            Component.assert = function(f, s)
            {
                if (DEBUG) {
                    if (!f) {
                        if (!s) s = "assertion failure";
                        Component.log(s);
                        throw new Error(s);
                    }
                }
            };
            
            /**
             * Component.println(s, type, id)
             *
             * For non-diagnostic messages, which components may override to control the destination/appearance of their output.
             *
             * Components that inherit from this class should use the instance method, this.println(), rather than Component.println(),
             * because if a Control Panel is loaded, it will override only the instance method, not the class method (overriding the class
             * method would improperly affect any other machines loaded on the same page).
             *
             * @param {string} [s] is the message text
             * @param {string} [type] is the message type
             * @param {string} [id] is the caller's ID, if any
             */
            Component.println = function(s, type, id)
            {
                if (DEBUG) {
                    Component.log((id? (id + ": ") : "") + (s? ("\"" + s + "\"") : ""), type);
                }
            };
            
            /**
             * Component.notice(s, fPrintOnly, id)
             *
             * notice() is like println() but implies a need for user notification, so we alert() as well.
             *
             * @param {string} s is the message text
             * @param {boolean} [fPrintOnly]
             * @param {string} [id] is the caller's ID, if any
             */
            Component.notice = function(s, fPrintOnly, id)
            {
                if (DEBUG) {
                    Component.println(s, "notice", id);
                }
                if (!fPrintOnly) web.alertUser(s);
            };
            
            /**
             * Component.warning(s)
             *
             * @param {string} s describes the warning
             */
            Component.warning = function(s)
            {
                if (DEBUG) {
                    Component.println(s, "warning");
                }
                web.alertUser(s);
            };
            
            /**
             * Component.error(s)
             *
             * @param {string} s describes the error; an alert() is displayed as well
             */
            Component.error = function(s)
            {
                if (DEBUG) {
                    Component.println(s, "error");
                }
                web.alertUser(s);
            };
            
            /**
             * Component.getComponents(idRelated)
             *
             * We could store components as properties of an 'all' object, using the component's ID,
             * and change this linear lookup into a property lookup, but some components may have no ID.
             *
             * @param {string} [idRelated] of related component
             * @return {Array} of components
             */
            Component.getComponents = function(idRelated)
            {
                var i;
                var aComponents = [];
                /*
                 * getComponentByID(id, idRelated)
                 *
                 * If idRelated is provided, we check it for a machine prefix, and use any
                 * existing prefix to constrain matches to IDs with the same prefix, in order to
                 * avoid matching components belonging to other machines.
                 */
                if (idRelated) {
                    if ((i = idRelated.indexOf('.')) > 0)
                        idRelated = idRelated.substr(0, i + 1);
                    else
                        idRelated = "";
                }
                for (i = 0; i < Component.all.length; i++) {
                    var component = Component.all[i];
                    if (!idRelated || !component.id.indexOf(idRelated)) {
                        aComponents.push(component);
                    }
                }
                return aComponents;
            };
            
            /**
             * Component.getComponentByID(id, idRelated)
             *
             * We could store components as properties of an 'all' object, using the component's ID,
             * and change this linear lookup into a property lookup, but some components may have no ID.
             *
             * @param {string} id of the desired component
             * @param {string} [idRelated] of related component
             * @return {Component|null}
             */
            Component.getComponentByID = function(id, idRelated)
            {
                if (id !== undefined) {
                    var i;
                    /*
                     * If idRelated is provided, we check it for a machine prefix, and use any
                     * existing prefix to constrain matches to IDs with the same prefix, in order to
                     * avoid matching components belonging to other machines.
                     */
                    if (idRelated && (i = idRelated.indexOf('.')) > 0) {
                        id = idRelated.substr(0, i + 1) + id;
                    }
                    for (i = 0; i < Component.all.length; i++) {
                        if (Component.all[i].id === id) {
                            return Component.all[i];
                        }
                    }
                    Component.log("Component ID '" + id + "' not found", "warning");
                }
                return null;
            };
            
            /**
             * Component.getComponentByType(sType, idRelated, componentPrev)
             *
             * @param {string} sType of the desired component
             * @param {string} [idRelated] of related component
             * @param {Component|null} [componentPrev] of previously returned component, if any
             * @return {Component|null}
             */
            Component.getComponentByType = function(sType, idRelated, componentPrev)
            {
                if (sType !== undefined) {
                    var i;
                    /*
                     * If idRelated is provided, we check it for a machine prefix, and use any
                     * existing prefix to constrain matches to IDs with the same prefix, in order to
                     * avoid matching components belonging to other machines.
                     */
                    if (idRelated) {
                        if ((i = idRelated.indexOf('.')) > 0) {
                            idRelated = idRelated.substr(0, i + 1);
                        } else {
                            idRelated = "";
                        }
                    }
                    for (i = 0; i < Component.all.length; i++) {
                        if (componentPrev) {
                            if (componentPrev == Component.all[i]) componentPrev = null;
                            continue;
                        }
                        if (sType == Component.all[i].type && (!idRelated || !Component.all[i].id.indexOf(idRelated))) {
                            return Component.all[i];
                        }
                    }
                    Component.log("Component type '" + sType + "' not found", "warning");
                }
                return null;
            };
            
            /**
             * Component.getComponentParms(element)
             *
             * @param {Object} element from the DOM
             */
            Component.getComponentParms = function(element)
            {
                var parms = null,
                    sParms = element.getAttribute("data-value");
                if (sParms) {
                    try {
                        parms = eval("({" + sParms + "})"); // jshint ignore:line
                        /*
                         * We can no longer invoke removeAttribute() because some components (eg, Panel) need
                         * to run their initXXX() code more than once, to avoid initialization-order dependencies.
                         *
                         *      if (!DEBUG) {
                         *          element.removeAttribute("data-value");
                         *      }
                         */
                    } catch(e) {
                        Component.error(e.message + " (" + sParms + ")");
                    }
                }
                return parms;
            };
            
            /**
             * Component.bindExternalControl(component, sControl, sBinding, sType)
             *
             * @param {Component} component
             * @param {string} sControl
             * @param {string} sBinding
             * @param {string} [sType] is the external component type
             */
            Component.bindExternalControl = function(component, sControl, sBinding, sType)
            {
                if (sControl) {
                    if (sType === undefined) sType = "Panel";
                    var target = Component.getComponentByType(sType, component.id);
                    if (target) {
                        var eBinding = target.bindings[sControl];
                        if (eBinding) {
                            component.setBinding(null, sBinding, eBinding);
                        }
                    }
                }
            };
            
            if (window && !window.document.ELEMENT_NODE) window.document.ELEMENT_NODE = 1;
            
            /**
             * Component.bindComponentControls(component, element, sAppClass)
             *
             * @param {Component} component
             * @param {Object} element from the DOM
             * @param {string} sAppClass
             */
            Component.bindComponentControls = function(component, element, sAppClass)
            {
                var aeControls = Component.getElementsByClass(element.parentNode, sAppClass + "-control");
            
                for (var iControl = 0; iControl < aeControls.length; iControl++) {
            
                    var aeChildNodes = aeControls[iControl].childNodes;
            
                    for (var iNode = 0; iNode < aeChildNodes.length; iNode++) {
                        var control = aeChildNodes[iNode];
                        if (control.nodeType !== window.document.ELEMENT_NODE) {
                            continue;
                        }
                        var sClass = control.getAttribute("class");
                        if (!sClass) continue;
                        var aClasses = sClass.split(" ");
                        for (var iClass = 0; iClass < aClasses.length; iClass++) {
                            var parms;
                            sClass = aClasses[iClass];
                            switch (sClass) {
                                case sAppClass + "-binding":
                                    parms = Component.getComponentParms(control);
                                    if (parms && parms['binding']) {
                                        component.setBinding(parms['type'], parms['binding'], control);
                                    } else {
                                        Component.log("Component '" + component.toString() + "' missing binding" + (parms? " for " + parms['type'] : ""), "warning");
                                    }
                                    iClass = aClasses.length;
                                    break;
                                default:
                                    // if (DEBUG) Component.log("Component.bindComponentControls(" + component.toString() + "): unrecognized control class \"" + sClass + "\"", "warning");
                                    break;
                            }
                        }
                    }
                }
            };
            
            /**
             * Component.getElementsByClass(element, sClass, sObjClass)
             *
             * This is a cross-browser helper function, since not all browser's support getElementsByClassName()
             *
             * TODO: This should probably be moved into weblib.js at some point, along with the control binding functions above,
             * to keep all the browser-related code together.
             *
             * @param {Object} element from the DOM
             * @param {string} sClass
             * @param {string} [sObjClass]
             * @return {Array|NodeList}
             */
            Component.getElementsByClass = function(element, sClass, sObjClass)
            {
                if (sObjClass) sClass += '-' + sObjClass + "-object";
                /*
                 * Use the browser's built-in getElementsByClassName() if it appears to be available
                 * (for example, it's not available in IE8, but it should be available in IE9 and up)
                 */
                if (element.getElementsByClassName) {
                    return element.getElementsByClassName(sClass);
                }
                var i, j, ae = [];
                var aeAll = element.getElementsByTagName("*");
                var re = new RegExp('(^| )' + sClass + '( |$)');
                for (i = 0, j = aeAll.length; i < j; i++) {
                    if (re.test(aeAll[i].className)) {
                        ae.push(aeAll[i]);
                    }
                }
                if (!ae.length) {
                    Component.log('No elements of class "' + sClass + '" found');
                }
                return ae;
            };
            
            Component.prototype = {
                constructor: Component,
                parent: null,
                /**
                 * toString()
                 *
                 * @this {Component}
                 * @return {string}
                 */
                toString: function() {
                    return (this.name? this.name : (this.id || this.type));
                },
                /**
                 * getMachineNum()
                 *
                 * @this {Component}
                 * @return {number} unique machine number
                 */
                getMachineNum: function() {
                    var nMachine = 1;
                    if (this.idMachine) {
                        var aDigits = this.idMachine.match(/\d+/);
                        if (aDigits !== null)
                            nMachine = parseInt(aDigits[0], 10);
                    }
                    return nMachine;
                },
                /**
                 * setBinding(sHTMLType, sBinding, control)
                 *
                 * Component's setBinding() method is intended to be overridden by subclasses.
                 *
                 * @this {Component}
                 * @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
                 * @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "reset")
                 * @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
                 * @return {boolean} true if binding was successful, false if unrecognized binding request
                 */
                setBinding: function(sHTMLType, sBinding, control) {
                    switch (sBinding) {
                    case "clear":
                        if (!this.bindings[sBinding]) {
                            this.bindings[sBinding] = control;
                            control.onclick = (function(component) {
                                return function clearPanel() {
                                    if (component.bindings['print']) {
                                        component.bindings['print'].value = "";
                                    }
                                };
                            }(this));
                        }
                        return true;
                    case "print":
                        if (!this.bindings[sBinding]) {
                            this.bindings[sBinding] = control;
                            /*
                             * HACK: Save this particular HTML element so that the Debugger can access it, too
                             */
                            this.controlPrint = control;
                            /*
                             * This was added for Firefox (Safari automatically clears the <textarea> on a page reload,
                             * but Firefox does not).
                             */
                            control.value = "";
                            this.println = (function(control) {
                                return function printPanel(s, type) {
                                    s = (type !== undefined? (type + ": ") : "") + (s || "");
                                    /*
                                     * Prevent the <textarea> from getting too large; otherwise, printing becomes slower and slower.
                                     */
                                    if (COMPILED) {
                                        if (control.value.length > 8192) {
                                            control.value = control.value.substr(control.value.length - 4096);
                                        }
                                    }
                                    control.value += s + "\n";
                                    control.scrollTop = control.scrollHeight;
                                    if (DEBUG && window && window.console) console.log(s);
                                };
                            }(control));
                            /**
                             * Override this.notice() with a replacement function that eliminates the web.alertUser() call
                             *
                             * @this {Component}
                             * @param {string} s
                             * @param {boolean} [fPrintOnly]
                             * @param {string} [id]
                             */
                            this.notice = function noticePanel(s, fPrintOnly, id) {
                                this.println(s, "notice", id);
                            };
                        }
                        return true;
                    default:
                        return false;
                    }
                },
                /**
                 * log(s, type)
                 *
                 * For diagnostic output only.
                 *
                 * WARNING: Even though this function's body is completely wrapped in DEBUG, that won't prevent the Closure Compiler
                 * from including it, so all calls must still be prefixed with "if (DEBUG) ....".  For this reason, the class method,
                 * Component.log(), is preferred, because the compiler IS smart enough to remove those calls.
                 *
                 * @this {Component}
                 * @param {string} [s] is the message text
                 * @param {string} [type] is the message type
                 */
                log: function(s, type) {
                    if (DEBUG) {
                        Component.log(s, type || this.id || this.type);
                    }
                },
                /**
                 * assert(f, s)
                 *
                 * Verifies conditions that must be true (for DEBUG builds only).
                 *
                 * WARNING: Make sure you preface all calls to this.assert() with "if (DEBUG)", because unlike Component.assert(),
                 * the Closure Compiler can't be sure that this instance method hasn't been overridden, so it refuses to treat it as
                 * dead code in non-DEBUG builds.
                 *
                 * TODO: Add a task to the build process that "asserts" there are no instances of "assertion failure" in RELEASE builds.
                 *
                 * @param {boolean} f is the expression we are asserting to be true
                 * @param {string} [s] is description of the assertion on failure
                 */
                assert: function(f, s) {
                    if (DEBUG) {
                        if (!f) {
                            s = "assertion failure in " + (this.id || this.type) + (s? ": " + s : "");
                            if (DEBUGGER && this.dbg) {
                                this.dbg.stopCPU();
                                /*
                                 * Why do we throw an Error only to immediately catch and ignore it?  Simply to give
                                 * any IDE the opportunity to inspect the application's state.  Even when the IDE has
                                 * control, you should still be able to invoke Debugger commands from the IDE's REPL,
                                 * using the '$' global function that the Debugger constructor defines; eg:
                                 *
                                 *      $('r')
                                 *      $('dw 0:0')
                                 *      $('h')
                                 *      ...
                                 *
                                 * If you have no desire to stop on assertions, consider this a no-op.  However, another
                                 * potential benefit of creating an Error object is that, for browsers like Chrome, we get
                                 * a stack trace, too.
                                 */
                                try {
                                    throw new Error(s);
                                } catch(e) {
                                    this.println(e.stack || e.message);
                                }
                                return;
                            }
                            this.log(s);
                            throw new Error(s);
                        }
                    }
                },
                /**
                 * println(s, type)
                 *
                 * For non-diagnostic messages, which components may override to control the destination/appearance of their output.
                 *
                 * Components using this.println() should wait until after their constructor has run to display any messages, because
                 * if a Control Panel has been loaded, its override will not take effect until its own constructor has run.
                 *
                 * @this {Component}
                 * @param {string} [s] is the message text
                 * @param {string} [type] is the message type
                 * @param {string} [id] is the caller's ID, if any
                 */
                println: function(s, type, id) {
                    Component.println(s, type, id || this.id);
                },
                /**
                 * status(s)
                 *
                 * status() is like println() but it also includes information about the component (ie, the component ID),
                 * which is why there is no corresponding Component.status() function.
                 *
                 * @param {string} s is the message text
                 */
                status: function(s) {
                    this.println(this.idComponent + ": " + s);
                },
                /**
                 * notice(s, fPrintOnly)
                 *
                 * notice() is like println() but implies a need for user notification, so we alert() as well; however, if this.println()
                 * is overridden, this.notice will be replaced with a similar override, on the assumption that the override is taking care
                 * of alerting the user.
                 *
                 * @this {Component}
                 * @param {string} s is the message text
                 * @param {boolean} [fPrintOnly]
                 * @param {string} [id] is the caller's ID, if any
                 */
                notice: function(s, fPrintOnly, id) {
                    Component.notice(s, fPrintOnly, id || this.id);
                },
                /**
                 * setError(s)
                 *
                 * Set a fatal error condition
                 *
                 * @this {Component}
                 * @param {string} s describes a fatal error condition
                 */
                setError: function(s) {
                    this.aFlags.fError = true;
                    this.notice(s);         // TODO: Any cases where we should still prefix this string with "Fatal error: "?
                },
                /**
                 * clearError()
                 *
                 * Clear any fatal error condition
                 *
                 * @this {Component}
                 */
                clearError: function() {
                    this.aFlags.fError = false;
                },
                /**
                 * isError()
                 *
                 * Report any fatal error condition
                 *
                 * @this {Component}
                 * @return {boolean} true if a fatal error condition exists, false if not
                 */
                isError: function() {
                    if (this.aFlags.fError) {
                        this.println(this.toString() + " error");
                        return true;
                    }
                    return false;
                },
                /**
                 * isReady(fnReady)
                 *
                 * Return the "ready" state of the component; if the component is not ready, it will queue the optional
                 * notification function, otherwise it will immediately call the notification function, if any, without queuing it.
                 *
                 * NOTE: Since only the Computer component actually cares about the "readiness" of other components, the so-called
                 * "queue" of notification functions supports exactly one function.  This keeps things nice and simple.
                 *
                 * @this {Component}
                 * @param {function()} [fnReady]
                 * @return {boolean} true if the component is in a "ready" state, false if not
                 */
                isReady: function(fnReady) {
                    if (fnReady) {
                        if (this.aFlags.fReady) {
                            fnReady();
                        } else {
                            if (MAXDEBUG) this.log("NOT ready");
                            this.fnReady = fnReady;
                        }
                    }
                    return this.aFlags.fReady;
                },
                /**
                 * setReady(fReady)
                 *
                 * Set the "ready" state of the component to true, and call any queued notification functions.
                 *
                 * @this {Component}
                 * @param {boolean} [fReady] is assumed to indicate "ready" unless EXPLICITLY set to false
                 */
                setReady: function(fReady) {
                    if (!this.aFlags.fError) {
                        this.aFlags.fReady = (fReady !== false);
                        if (this.aFlags.fReady) {
                            if (MAXDEBUG /* || this.name */) this.log("ready");
                            var fnReady = this.fnReady;
                            this.fnReady = null;
                            if (fnReady) fnReady();
                        }
                    }
                },
                /**
                 * isBusy(fCancel)
                 *
                 * Return the "busy" state of the component
                 *
                 * @this {Component}
                 * @param {boolean} [fCancel] is set to true to cancel a "busy" state
                 * @return {boolean} true if "busy", false if not
                 */
                isBusy: function(fCancel) {
                    if (this.aFlags.fBusy) {
                        if (fCancel) {
                            this.aFlags.fBusyCancel = true;
                        } else if (fCancel === undefined) {
                            this.println(this.toString() + " busy");
                        }
                    }
                    return this.aFlags.fBusy;
                },
                /**
                 * setBusy(fBusy)
                 *
                 * Update the current busy state; if an fCancel request is pending, it will be honored now.
                 *
                 * @this {Component}
                 * @param {boolean} fBusy
                 * @return {boolean}
                 */
                setBusy: function(fBusy) {
                    if (this.aFlags.fBusyCancel) {
                        if (this.aFlags.fBusy) {
                            this.aFlags.fBusy = false;
                        }
                        this.aFlags.fBusyCancel = false;
                        return false;
                    }
                    if (this.aFlags.fError) {
                        this.println(this.toString() + " error");
                        return false;
                    }
                    this.aFlags.fBusy = fBusy;
                    return this.aFlags.fBusy;
                },
                /**
                 * powerUp(fSave)
                 *
                 * @this {Component}
                 * @param {Object|null} data
                 * @param {boolean} [fRepower] is true if this is "repower" notification
                 * @return {boolean} true if successful, false if failure
                 */
                powerUp: function(data, fRepower) {
                    this.aFlags.fPowered = true;
                    return true;
                },
                /**
                 * powerDown(fSave, fShutdown)
                 *
                 * @this {Component}
                 * @param {boolean} fSave
                 * @param {boolean} [fShutdown]
                 * @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
                 */
                powerDown: function(fSave, fShutdown) {
                    if (fShutdown) this.aFlags.fPowered = false;
                    return true;
                },
                /**
                 * messageEnabled(bitsMessage)
                 *
                 * If bitsMessage is not specified, the component's MESSAGE category is used.
                 *
                 * @this {Component}
                 * @param {number} [bitsMessage] is zero or more MESSAGE_* category flag(s)
                 * @return {boolean} true if all specified message enabled, false if not
                 */
                messageEnabled: function(bitsMessage) {
                    if (DEBUGGER && this.dbg) {
                        if (this === this.dbg) {
                            bitsMessage |= 0;
                        } else {
                            bitsMessage = bitsMessage || this.bitsMessage;
                        }
                        var bitsEnabled = this.dbg.bitsMessage & bitsMessage;
                        return (bitsEnabled === bitsMessage || !!(bitsEnabled & this.dbg.bitsWarning));
                    }
                    return false;
                },
                /**
                 * printMessage(sMessage, bitsMessage, fAddress)
                 *
                 * If bitsMessage is not specified, the component's MESSAGE category is used.
                 * If bitsMessage is true, the message is displayed regardless.
                 *
                 * @this {Component}
                 * @param {string} sMessage is any caller-defined message string
                 * @param {number|boolean} [bitsMessage] is zero or more MESSAGE_* category flag(s)
                 * @param {boolean} [fAddress] is true to display the current address
                 * @return {boolean} true if Debugger available, false if not
                 */
                printMessage: function(sMessage, bitsMessage, fAddress) {
                    if (DEBUGGER && this.dbg) {
                        if (bitsMessage === true || this.messageEnabled(bitsMessage | 0)) {
                            this.dbg.message(sMessage, fAddress);
                        }
                        return true;
                    }
                    return false;
                },
                /**
                 * printMessageIO(port, bOut, addrFrom, name, bIn, bitsMessage)
                 *
                 * If bitsMessage is not specified, the component's MESSAGE category is used.
                 * If bitsMessage is true, the message is displayed as long as MESSAGE.PORT is enabled.
                 *
                 * @this {Component}
                 * @param {number} port
                 * @param {number|null} bOut if an output operation
                 * @param {number|null} [addrFrom]
                 * @param {string|null} [name] of the port, if any
                 * @param {number|null} [bIn] is the input value, if known, on an input operation
                 * @param {number|boolean} [bitsMessage] is zero or more MESSAGE_* category flag(s)
                 */
                printMessageIO: function(port, bOut, addrFrom, name, bIn, bitsMessage) {
                    if (DEBUGGER && this.dbg) {
                        if (bitsMessage === true) {
                            bitsMessage = 0;
                        } else if (bitsMessage == null) {
                            bitsMessage = this.bitsMessage;
                        }
                        this.dbg.messageIO(this, port, bOut, addrFrom, name, bIn, bitsMessage);
                    }
                }
            };
            
            if (typeof module !== 'undefined') module.exports = Component;
            
          • defines.js
            /**
             * @fileoverview Compile-time definitions used by C1Pjs and PCjs.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-08
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /**
             * @define {string}
             */
            var APPNAME = "";               // this @define is overridden by the Closure Compiler with either "PCjs" or "C1Pjs"
            
            /**
             * @define {string}
             */
            var APPVERSION = "1.x.x";       // this @define is overridden by the Closure Compiler with the version in package.json
            
            /**
             * @define {string}
             */
            var SITEHOST = "localhost:8088";// this @define is overridden by the Closure Compiler with "www.pcjs.org"
            
            /**
             * @define {boolean}
             */
            var COMPILED = false;           // this @define is overridden by the Closure Compiler (to true)
            
            /**
             * @define {boolean}
             */
            var DEBUG = true;               // this @define is overridden by the Closure Compiler (to false) to remove DEBUG-only code
            
            /**
             * @define {boolean}
             */
            var MAXDEBUG = false;           // this @define is overridden by the Closure Compiler (to false) to remove MAXDEBUG-only code
            
            if (typeof module !== 'undefined') {
                global.window = false;      // provides an alternative "if (typeof window === 'undefined')" (ie, "if (window) ...")
                global.APPNAME = APPNAME;
                global.APPVERSION = APPVERSION;
                global.SITEHOST = SITEHOST;
                global.COMPILED = COMPILED;
                global.DEBUG = DEBUG;
                global.MAXDEBUG = MAXDEBUG;
                /*
                 * TODO: When we're "required" by Node, should we return anything via module.exports?
                 */
            }
            
          • diskapi.js
            /**
             * @fileoverview Disk APIs, as defined by httpapi.js and consumed by disk.js
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-08
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /*
             * Our "DiskIO API" looks like:
             *
             *      http://www.pcjs.org/api/v1/disk?action=open&volume=*10mb.img&mode=demandrw&chs=c:h:s&machine=xxx&user=yyy
             */
            var DiskAPI = {
                ENDPOINT:       "/api/v1/disk",
                QUERY: {
                    ACTION:     "action",   // value is one of DiskAPI.ACTION.*
                    VOLUME:     "volume",   // value is path of a disk image
                    MODE:       "mode",     // value is one of DiskAPI.MODE.*
                    CHS:        "chs",      // value is cylinders:heads:sectors:bytes
                    ADDR:       "addr",     // value is cylinder:head:sector:count
                    MACHINE:    "machine",  // value is machine token
                    USER:       "user",     // value is user ID
                    DATA:       "data"      // value is data to be written
                },
                ACTION: {
                    OPEN:       "open",
                    READ:       "read",
                    WRITE:      "write",
                    CLOSE:      "close"
                },
                MODE: {
                    LOCAL:      "local",    // this mode implies no API (at best, localStorage backing only)
                    PRELOAD:    "preload",  // this mode implies use of the DumpAPI
                    DEMANDRW:   "demandrw",
                    DEMANDRO:   "demandro"
                },
                FAIL: {
                    BADACTION:  "invalid action",
                    BADUSER:    "invalid user",
                    BADVOL:     "invalid volume",
                    OPENVOL:    "unable to open volume",
                    CREATEVOL:  "unable to create volume",
                    WRITEVOL:   "unable to write volume",
                    REVOKED:    "access revoked"
                }
            };
            
            /*
             * Common (supported) diskette formats
             */
            DiskAPI.DISKETTE_FORMATS = {
                163840:  [40,1,8],          // media type 0xFE: 40 cylinders, 1 head (single-sided),   8 sectors/track, ( 320 total sectors x 512 bytes/sector ==  163840)
                184320:  [40,1,9],          // media type 0xFC: 40 cylinders, 1 head (single-sided),   9 sectors/track, ( 360 total sectors x 512 bytes/sector ==  184320)
                327680:  [40,2,8],          // media type 0xFF: 40 cylinders, 2 heads (double-sided),  8 sectors/track, ( 640 total sectors x 512 bytes/sector ==  327680)
                368640:  [40,2,9],          // media type 0xFD: 40 cylinders, 2 heads (double-sided),  9 sectors/track, ( 720 total sectors x 512 bytes/sector ==  368640)
                737280:  [80,2,9],          // media type 0xF9: 80 cylinders, 2 heads (double-sided),  9 sectors/track, (1440 total sectors x 512 bytes/sector ==  737280)
                1228800: [80,2,15],         // media type 0xF9: 80 cylinders, 2 heads (double-sided), 15 sectors/track, (2400 total sectors x 512 bytes/sector == 1228800)
                1474560: [80,2,18],         // media type 0xF0: 80 cylinders, 2 heads (double-sided), 18 sectors/track, (2880 total sectors x 512 bytes/sector == 1474560)
                2949120: [80,2,36]          // media type 0xF0: 80 cylinders, 2 heads (double-sided), 36 sectors/track, (5760 total sectors x 512 bytes/sector == 2949120)
            };
            
            DiskAPI.MBR = {
                PARTITIONS: {
                    OFFSET:     0x1BE,
                    ENTRY: {
                        STATUS:         0x00,   // 0x80 if active
                        CHS_FIRST:      0x01,   // 3-byte CHS specifier
                        TYPE:           0x04,   // see TYPE.*
                        CHS_LAST:       0x05,   // 3-byte CHS specifier
                        LBA_FIRST:      0x08,
                        LBA_TOTAL:      0x0C,
                        LENGTH:         0x10
                    },
                    STATUS: {
                        ACTIVE:         0x80
                    },
                    TYPE: {
                        EMPTY:          0x00,
                        FAT12_PRIMARY:  0x01,   // DOS 2.0 and up (12-bit FAT)
                        FAT16_PRIMARY:  0x04    // DOS 3.0 and up (16-bit FAT)
                    }
                },
                SIG_OFFSET:     0x1FE,
                SIGNATURE:      0xAA55          // to be clear, the low byte (at offset 0x1FE) is 0x55 and the high byte (at offset 0x1FF) is 0xAA
            };
            
            /*
             * Boot sector offsets (and assorted constants) in DOS-compatible boot sectors (DOS 2.0 and up)
             *
             * WARNING: I've heard apocryphal stories about SIGNATURE being improperly reversed on some systems
             * (ie, 0x55AA instead 0xAA55) -- perhaps by a dyslexic programmer -- so be careful out there.
             */
            DiskAPI.BOOT = {
                JMP_OPCODE:     0x000,      // 1 byte for a JMP opcode, followed by a 1 or 2-byte offset
                OEM_STRING:     0x003,      // 8 bytes
                SIG_OFFSET:     0x1FE,
                SIGNATURE:      0xAA55      // to be clear, the low byte (at offset 0x1FE) is 0x55 and the high byte (at offset 0x1FF) is 0xAA
            };
            
            /*
             * BIOS Parameter Block (BPB) offsets in DOS-compatible boot sectors (DOS 2.0 and up)
             */
            DiskAPI.BPB = {
                SECTOR_BYTES:   0x00B,      // 2 bytes: bytes per sector (eg, 0x200 or 512)
                CLUSTER_SECS:   0x00D,      // 1 byte: sectors per cluster (eg, 1)
                RESERVED_SECS:  0x00E,      // 2 bytes: reserved sectors; ie, # sectors preceding the first FAT--usually just the boot sector (eg, 1)
                TOTAL_FATS:     0x010,      // 1 byte: FAT copies (eg, 2)
                ROOT_DIRENTS:   0x011,      // 2 bytes: root directory entries (eg, 0x40 or 64) 0x40 * 0x20 = 0x800 (1 sector is 0x200 bytes, total of 4 sectors)
                TOTAL_SECS:     0x013,      // 2 bytes: number of sectors (eg, 0x140 or 320); if zero, refer to LARGE_SECS
                MEDIA_TYPE:     0x015,      // 1 byte: media type (see DiskAPI.FAT.MEDIA_*)
                FAT_SECS:       0x016,      // 2 bytes: sectors per FAT (eg, 1)
                TRACK_SECS:     0x018,      // 2 bytes: sectors per track (eg, 8)
                TOTAL_HEADS:    0x01A,      // 2 bytes: number of heads (eg, 1)
                HIDDEN_SECS:    0x01C,      // 4 bytes: number of hidden sectors (always 0 for non-partitioned media)
                LARGE_SECS:     0x020       // 4 bytes: number of sectors if TOTAL_SECS is zero
            };
            
            /*
             * Media descriptor bytes for DOS-compatible FAT-formatted disks (stored in the first byte of the FAT)
             */
            DiskAPI.FAT = {
                MEDIA_160KB:    0xFE,       // 5.25-inch, 1-sided,  8-sector, 40-track
                MEDIA_180KB:    0xFC,       // 5.25-inch, 1-sided,  9-sector, 40-track
                MEDIA_320KB:    0xFF,       // 5.25-inch, 2-sided,  8-sector, 40-track
                MEDIA_360KB:    0xFD,       // 5.25-inch, 2-sided,  9-sector, 40-track
                MEDIA_720KB:    0xF9,       //  3.5-inch, 2-sided,  9-sector, 80-track
                MEDIA_1200KB:   0xF9,       //  3.5-inch, 2-sided, 15-sector, 80-track
                MEDIA_1440KB:   0xF0,       //  3.5-inch, 2-sided, 18-sector, 80-track
                MEDIA_2880KB:   0xF0        //  3.5-inch, 2-sided, 36-sector, 80-track
            };
            
            /*
             * Cluster constants for 12-bit FATs (CLUSNUM_FREE, CLUSNUM_RES and CLUSNUM_MIN are the same for all FATs)
             */
            DiskAPI.FAT12 = {
                MAX_CLUSTERS:   4084,
                CLUSNUM_FREE:   0,          // this should NEVER appear in cluster chain (except at the start of an empty chain)
                CLUSNUM_RES:    1,          // reserved; this should NEVER appear in cluster chain
                CLUSNUM_MIN:    2,          // smallest valid cluster number
                CLUSNUM_MAX:    0xFF6,      // largest valid cluster number
                CLUSNUM_BAD:    0xFF7,      // bad cluster; this should NEVER appear in cluster chain
                CLUSNUM_EOC:    0xFF8       // end of chain (actually, anything from 0xFF8-0xFFF indicates EOC)
            };
            
            /*
             * Cluster constants for 16-bit FATs (CLUSNUM_FREE, CLUSNUM_RES and CLUSNUM_MIN are the same for all FATs)
             */
            DiskAPI.FAT16 = {
                MAX_CLUSTERS:   65524,
                CLUSNUM_FREE:   0,          // this should NEVER appear in cluster chain (except at the start of an empty chain)
                CLUSNUM_RES:    1,          // reserved; this should NEVER appear in cluster chain
                CLUSNUM_MIN:    2,          // smallest valid cluster number
                CLUSNUM_MAX:    0xFFF6,     // largest valid cluster number
                CLUSNUM_BAD:    0xFFF7,     // bad cluster; this should NEVER appear in cluster chain
                CLUSNUM_EOC:    0xFFF8      // end of chain (actually, anything from 0xFFF8-0xFFFF indicates EOC)
            };
            
            /*
             * Directory Entry offsets (and assorted constants) in FAT disk images
             *
             * NOTE: Versions of DOS prior to 2.0 use INVALID exclusively to mark available directory entries; any entry marked
             * UNUSED will actually be considered USED.  In DOS 2.0 and up, UNUSED was added to indicate that all remaining entries
             * are unused, relieving it from having to initialize the rest of the sectors in the directory cluster(s).  And in fact,
             * you WILL encounter garbage in subsequent directory sectors if you attempt to read past an UNUSED entry.
             */
            DiskAPI.DIRENT = {
                NAME:           0x000,      // 8 bytes
                EXT:            0x008,      // 3 bytes
                ATTR:           0x00B,      // 1 byte
                MODTIME:        0x016,      // 2 bytes
                MODDATE:        0x018,      // 2 bytes
                CLUSTER:        0x01A,      // 2 bytes
                SIZE:           0x01C,      // 4 bytes (typically zero for subdirectories)
                LENGTH:         0x20,       // 32 bytes total
                UNUSED:         0x00,       // indicates this and all subsequent directory entries are unused
                INVALID:        0xE5        // indicates this directory entry is unused
            };
            
            /*
             * Possible values for DIRENT.ATTR
             */
            DiskAPI.ATTR = {
                READONLY:       0x01,       // PC-DOS 2.0 and up
                HIDDEN:         0x02,
                SYSTEM:         0x04,
                LABEL:          0x08,       // PC-DOS 2.0 and up
                SUBDIR:         0x10,       // PC-DOS 2.0 and up
                ARCHIVE:        0x20        // PC-DOS 2.0 and up
            };
            
            if (typeof module !== 'undefined') module.exports = DiskAPI;
            
          • dumpapi.js
            /**
             * @fileoverview Disk APIs, as defined by diskdump.js and consumed by disk.js
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-08
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /*
             * Our "DiskDump API", such as it was, used to look like:
             *
             *      http://jsmachines.net/bin/convdisk.php?disk=/disks/pc/dos/ibm/2.00/PCDOS200-DISK1.json&format=img
             *
             * To make it (a bit) more "REST-like", the above request now looks like:
             *
             *      http://www.pcjs.org/api/v1/dump?disk=/disks/pc/dos/ibm/2.00/PCDOS200-DISK1.json&format=img
             *
             * Similarly, our "FileDump API" used to look like:
             *
             *      http://jsmachines.net/bin/convrom.php?rom=/devices/pc/bios/5150/1981-04-24.rom&format=json
             *
             * and that request now looks like:
             *
             *      http://www.pcjs.org/api/v1/dump?file=/devices/pc/bios/5150/1981-04-24.rom&format=json
             *
             * I don't think it makes sense to avoid "query" parameters, because blending the path of a disk image with the
             * the rest of the URL would be (a) confusing, and (b) more work to parse.
             */
            var DumpAPI = {
                ENDPOINT:       "/api/v1/dump",
                QUERY: {
                    DIR:        "dir",      // value is path of a directory (DiskDump only)
                    DISK:       "disk",     // value is path of a disk image (DiskDump only)
                    FILE:       "file",     // value is path of a ROM image file (FileDump only)
                    IMG:        "img",      // alias for DISK
                    PATH:       "path",     // value is path of a one or more files (DiskDump only)
                    FORMAT:     "format",   // value is one of FORMAT values below
                    COMMENTS:   "comments", // value is either "true" or "false"
                    DECIMAL:    "decimal",  // value is either "true" to force all numbers to decimal, "false" or undefined otherwise
                    MBHD:       "mbhd"      // value is hard disk size in Mb (formerly "mbsize") (DiskDump only)
                },
                FORMAT: {
                    JSON:       "json",     // default
                    DATA:       "data",     // same as "json", but built without JSON.stringify() (DiskDump only)
                    HEX:        "hex",      // deprecated
                    BYTES:      "bytes",    // displays data as hex bytes; normally used only when comments are enabled
                    IMG:        "img",      // returns the raw disk data (ie, using a Buffer object) (DiskDump only)
                    ROM:        "rom"       // returns the raw file data (ie, using a Buffer object) (FileDump only)
                }
            };
            
            /*
             * Because we use an overloaded API endpoint (ie, one that's shared with the FileDump module), we must
             * also provide a list of commands which, when combined with the endpoint, define a unique request. 
             */
            DumpAPI.asDiskCommands = [DumpAPI.QUERY.DIR, DumpAPI.QUERY.DISK, DumpAPI.QUERY.PATH];
            DumpAPI.asFileCommands = [DumpAPI.QUERY.FILE];
            
            if (typeof module !== 'undefined') module.exports = DumpAPI;
          • embed.js
            /**
             * @fileoverview C1Pjs and PCjs embedding functionality.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Aug-28
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /* global window: true, XSLTProcessor: false, APPNAME: false, APPVERSION: false, DEBUG: true */
            
            if (typeof module !== 'undefined') {
                var Component;
                var str = require("./strlib");
                var web = require("./weblib");
            }
            
            /*
             * We now support asynchronous XML and XSL file loads; simply set fAsync (below) to true.
             *
             * NOTE: For that support to work, we have to keep track of the number of machines on the page
             * (ie, how many embedMachine() calls were issued), reduce the count as each machine XML file
             * is fully transformed into HTML, and when the count finally returns to zero, notify all the
             * machine component init() handlers.
             *
             * Also, to prevent those init() handlers from running prematurely, we must disable all page
             * notification events at the start of the embedding process (web.enablePageEvents(false)) and
             * re-enable them at the end (web.enablePageEvents(true)).
             */
            var cMachines = 0;
            var fAsync = true;
            
            /**
             * loadXML(sFile, idMachine, sStateFile, fResolve, display, done)
             *
             * This is the preferred way to load all XML and XSL files. It uses loadResource()
             * to load them as strings, which parseXML() can massage before parsing/transforming them.
             *
             * For example, since I've been unable to get the XSLT document() function to work inside any
             * XSL document loaded by JavaScript's XSLT processor, that has prevented me from dynamically
             * loading any XML machine file that uses the "ref" attribute to refer to and incorporate
             * another XML document.
             *
             * To solve that, I've added an fResolve parameter that tells parseXML() to fetch any
             * referenced documents ITSELF and insert them into the XML string prior to parsing, instead
             * of relying on the XSLT template to pull them in.  That fetching is handled by resolveXML(),
             * which iterates over the XML until all "refs" have been resolved (including any nested
             * references).
             *
             * Also, XSL files with a <!DOCTYPE [...]> cause MSIE's Microsoft.XMLDOM.loadXML() function
             * to choke, so I strip that out prior to parsing as well.
             *
             * TODO: Figure out why the XSLT document() function works great when the web browser loads an
             * XML file (and the associated XSL file) itself, but does not work when loading documents via
             * JavaScript XSLT support. Is it broken, is it a security issue, or am I just calling it wrong?
             *
             * @param {string} sXMLFile
             * @param {string|null|undefined} idMachine
             * @param {string|null|undefined} sStateFile
             * @param {boolean} fResolve is true to resolve any "ref" attributes
             * @param {function(string)} display
             * @param {function(string,Object)} done (string contains the unparsed XML string data, and Object contains a parsed XML object)
             */
            function loadXML(sXMLFile, idMachine, sStateFile, fResolve, display, done)
            {
                var doneLoadXML = function(sURLName, sXML, nErrorCode) {
                    if (nErrorCode) {
                        if (!sXML) sXML = "unable to load " + sXMLFile + " (" + nErrorCode + ")";
                        done(sXML, null);
                        return;
                    }
                    parseXML(sXML, sXMLFile, idMachine, sStateFile, fResolve, display, done);
                };
                display("Loading " + sXMLFile + "...");
                web.loadResource(sXMLFile, fAsync, null, null, doneLoadXML);
            }
            
            /**
             * parseXML(sXML, sXMLFile, idMachine, sStateFile, fResolve, display, done)
             *
             * Generates an XML document from an XML string. This function also provides a work-around for XSLT's
             * lack of support for the document() function (at least on some browsers), by replacing every reference
             * tag (ie, a tag with a "ref" attribute) with the contents of the referenced file.
             *
             * @param {string} sXML
             * @param {string|null} sXMLFile
             * @param {string|null|undefined} idMachine
             * @param {string|null|undefined} sStateFile
             * @param {boolean} fResolve is true to resolve any "ref" attributes; default is false
             * @param {function(string)} display
             * @param {function(string,Object)} done (string contains the unparsed XML string data, and Object contains a parsed XML object)
             */
            function parseXML(sXML, sXMLFile, idMachine, sStateFile, fResolve, display, done)
            {
                var buildXML = function(sXML, sError) {
                    if (sError) {
                        done(sError, null);
                        return;
                    }
                    if (idMachine) {
                        var sURL = sXMLFile;
                        if (sURL && sURL.indexOf('/') < 0) sURL = window.location.pathname + sURL;
                        sXML = sXML.replace(/(<machine[^>]*\sid=)(['"]).*?\2/, "$1$2" + idMachine + "$2" + (sStateFile? " state=$2" + sStateFile + "$2" : "") + (sURL? " url=$2" + sURL + "$2" : ""));
                    }
                    /*
                     * If the resource we requested is not really an XML file (or the file didn't exist and the server simply returned
                     * a message like "Cannot GET /devices/pc/machine/5150/cga/64kb/donkey/machine.xml"), we'd like to display a more
                     * meaningful message, because the XML DOM parsers will blithely return a document that contains nothing useful; eg:
                     *
                     *      This page contains the following errors:error on line 1 at column 1:
                     *      Document is empty Below is a rendering of the page up to the first error.
                     *
                     * Supposedly, the IE XML DOM parser will throw an exception, but I haven't tested that, and unless all other
                     * browsers do that, that's not helpful.
                     *
                     * The best I can do at this stage (assuming web.loadResource() didn't drop any error information on the floor)
                     * is verify that the requested resource "looks like" valid XML (in other words, it begins with a '<').
                     */
                    var xmlDoc = null;
                    if (sXML.charAt(0) == '<') {
                        try {
                            if (window.ActiveXObject || "ActiveXObject" in window) {        // second test is required for IE11 on Windows 8.1
                                /*
                                 * Another hack for MSIE, which fails to properly load XSL documents containing a <!DOCTYPE [...]> tag.
                                 */
                                if (!fResolve) {
                                    sXML = sXML.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g, "");
                                }
                                xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
                                xmlDoc.async = false;
                                xmlDoc['loadXML'](sXML);
                            } else {
                                xmlDoc = (new window.DOMParser()).parseFromString(sXML, "text/xml");
                            }
                        } catch(e) {
                            xmlDoc = null;
                            sXML = e.message;
                        }
                    } else {
                        sXML = "unrecognized XML: " + (sXML.length > 255? sXML.substr(0, 255) + "..." : sXML);
                    }
                    done(sXML, xmlDoc);
                };
                if (sXML) {
                    if (fResolve) {
                        resolveXML(sXML, display, buildXML);
                        return;
                    }
                    buildXML(sXML, null);
                    return;
                }
                done("no data" + (sXMLFile? " for file: " + sXMLFile : ""), null);
            }
            
            /**
             * resolveXML(sXML, display, done)
             *
             * Replaces every tag with a "ref" attribute with the contents of the corresponding file.
             *
             * TODO: Fix some of the limitations of this code, such as: 1) requiring the "ref" attribute
             * to appear as the tag's first attribute, 2) requiring the "ref" attribute to be double-quoted,
             * and 3) requiring the "ref" tag to be self-closing.
             *
             * @param {string} sXML
             * @param {function(string)} display
             * @param {function(string,(string|null))} done (the first string contains the resolved XML data, the second is for any error message)
             */
            function resolveXML(sXML, display, done)
            {
                var matchRef;
                var reRef = /<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g;
            
                if ((matchRef = reRef.exec(sXML))) {
            
                    var sRefFile = matchRef[2];
            
                    var doneReadXML = function(sURLName, sXMLRef, nErrorCode) {
                        if (nErrorCode || !sXMLRef) {
                            done(sXML, "unable to resolve XML reference: " + matchRef[0] + " (" + nErrorCode + ")");
                            return;
                        }
                        /*
                         * If there are additional attributes in the "referring" XML tag, we want to insert them
                         * into the "referred" XML tag; attributes that don't exist in the referred tag should be
                         * appended, and attributes that DO exist should be overwritten.
                         */
                        var sRefAttrs = matchRef[3];
                        if (sRefAttrs) {
                            var aXMLRefTag = sXMLRef.match(new RegExp("<" + matchRef[1] + "[^>]*>"));
                            if (aXMLRefTag) {
                                var sXMLNewTag = aXMLRefTag[0];
                                /*
                                 * Iterate over all the attributes in the "referring" XML tag (sRefAttrs)
                                 */
                                var matchAttr;
                                var reAttr = /( [a-z]+=)(['"])(.*?)\2/g;
                                while ((matchAttr = reAttr.exec(sRefAttrs))) {
                                    if (sXMLNewTag.indexOf(matchAttr[1]) < 0) {
                                        /*
                                         * This is the append case
                                         */
                                        sXMLNewTag = sXMLNewTag.replace(">", matchAttr[0] + ">");
                                    } else {
                                        /*
                                         * This is the overwrite case
                                         */
                                        sXMLNewTag = sXMLNewTag.replace(new RegExp(matchAttr[1] + "(['\"])(.*?)\\1"), matchAttr[0]);
                                    }
                                }
                                if (aXMLRefTag[0] != sXMLNewTag) {
                                    sXMLRef = sXMLRef.replace(aXMLRefTag[0], sXMLNewTag);
                                }
                            } else {
                                done(sXML, "missing <" + matchRef[1] + "> in " + sRefFile);
                                return;
                            }
                        }
            
                        /*
                         * Apparently when a Windows Azure server delivers one of my XML files, it may modify the first line:
                         *
                         *      <?xml version="1.0" encoding="UTF-8"?>\n
                         *
                         * I didn't determine exactly what it was doing at this point (probably just changing the \n to \r\n),
                         * but in any case, relaxing the following replace() solved it.
                         */
                        sXMLRef = sXMLRef.replace(/<\?xml[^>]*>[\r\n]*/, "");
            
                        sXML = sXML.replace(matchRef[0], sXMLRef);
            
                        resolveXML(sXML, display, done);
                    };
            
                    display("Loading " + sRefFile + "...");
                    web.loadResource(sRefFile, fAsync, null, null, doneReadXML);
                    return;
                }
                done(sXML, null);
            }
            
            /**
             * embedMachine(sName, sVersion, idElement, sXMLFile, sXSLFile, sStateFile)
             *
             * This allows to you embed a machine on a web page, by transforming the machine XML into HTML.
             *
             * @param {string} sName is the app name (eg, "PCjs")
             * @param {string} sVersion is the app version (eg, "1.15.7")
             * @param {string} idElement
             * @param {string} sXMLFile
             * @param {string} sXSLFile
             * @param {string} [sStateFile]
             * @return {boolean} true if successful, false if error
             */
            function embedMachine(sName, sVersion, idElement, sXMLFile, sXSLFile, sStateFile)
            {
                var eMachine, eWarning, fSuccess = true;
            
                cMachines++;
            
                var doneMachine = function() {
                    Component.assert(cMachines > 0);
                    if (!--cMachines) {
                        if (fAsync) web.enablePageEvents(true);
                    }
                };
            
                var displayError = function(sError) {
                    Component.log(sError);
                    displayMessage("Error: " + sError);
                    if (fSuccess) doneMachine();
                    fSuccess = false;
                };
            
                var displayMessage = function(sMessage) {
                    if (eWarning === undefined) {
                        /*
                         * Our MarkOut module (in convertMDMachineLinks()) creates machine containers that look like:
                         *
                         *      <div id="' + sMachineID + '" class="machine-placeholder"><p>Embedded PC</p><p class="machine-warning">...</p></div>
                         *
                         * with the "machine-warning" paragraph pre-populated with a warning message that the user will
                         * see if nothing at all happens.  But hopefully, in the normal case (and especially the error case),
                         * *something* will have happened.
                         *
                         * Note that it is the HTMLOut module (in processMachines()) that ultimately decides which scripts to
                         * include and then generates the embedPC() and/or embedC1P() calls.
                         */
                        var aeWarning = (eMachine && Component.getElementsByClass(eMachine, "machine-warning"));
                        eWarning = (aeWarning && aeWarning[0]) || eMachine;
                    }
                    if (eWarning) eWarning.innerHTML = str.escapeHTML(sMessage);
                };
            
                try {
                    eMachine = window.document.getElementById(idElement);
                    if (eMachine) {
                        var sAppClass = sName.toLowerCase();        // eg, "pcjs" or "c1pjs"
                        if (!sXSLFile) {
                            /*
                             * Now that PCjs is an open-source project, we can make the following test more flexible,
                             * and revert to the internal template if DEBUG *or* internal version (instead of *and*).
                             *
                             * Third-party sites that don't use the PCjs server will ALWAYS want to specify a fully-qualified
                             * path to the XSL file, unless they choose to mirror our folder structure.
                             */
                            if (DEBUG || sVersion == "1.x.x") {
                                sXSLFile = "/modules/" + sAppClass + "/templates/components.xsl";
                            } else {
                                sXSLFile = "/versions/" + sAppClass + "/" + sVersion + "/components.xsl";
                            }
                        }
                        var loadXSL = function(sXML, xml) {
                            if (!xml) {
                                displayError(sXML);
                                return;
                            }
                            var transformXML = function(sXSL, xsl) {
                                if (!xsl) {
                                    displayError(sXSL);
                                    return;
                                }
                                if (xsl) {
                                    /*
                                     * The <machine> template in components.xsl now generates a "machine div" that makes
                                     * the div we required the caller of embedMachine() to provide redundant, so instead
                                     * of appending this fragment to the caller's node, we REPLACE the caller's node.
                                     * This works only because because we ALSO inject the caller's "machine div" ID into
                                     * the fragment's ID during parseXML().
                                     *
                                     *      eMachine.innerHTML = sFragment;
                                     *
                                     * Also, if the transform function fails, make sure you're using the appropriate
                                     * "components.xsl" and not a "machine.xsl", because the latter will not produce valid
                                     * embeddable HTML (and is the most common cause of failure at this final stage).
                                     */
                                    displayMessage("Processing " + sXMLFile + "...");
                                    if (window.ActiveXObject || "ActiveXObject" in window) {        // second test is required for IE11 on Windows 8.1
                                        var sFragment = xml['transformNode'](xsl);
                                        if (sFragment) {
                                            eMachine.outerHTML = sFragment;
                                            doneMachine();
                                        } else {
                                            displayError("transformNodeToObject failed");
                                        }
                                    }
                                    else if (window.document.implementation && window.document.implementation.createDocument) {
                                        var xsltProcessor = new XSLTProcessor();
                                        xsltProcessor['importStylesheet'](xsl);
                                        var eFragment = xsltProcessor['transformToFragment'](xml, window.document);
                                        if (eFragment) {
                                            if (eMachine.parentNode) {
                                                eMachine.parentNode.replaceChild(eFragment, eMachine);
                                                doneMachine();
                                            } else {
                                                displayError("invalid machine element: " + idElement);
                                            }
                                        } else {
                                            displayError("transformToFragment failed");
                                        }
                                    } else {
                                        /*
                                         * Perhaps I should have performed this test at the outset; on the other hand, I'm
                                         * not aware of any browsers don't support one or both of the above XSLT transformation
                                         * methods, so treat this as a bug.
                                         */
                                        displayError("unable to transform XML: unsupported browser");
                                    }
                                } else {
                                    displayError("failed to load XSL file: " + sXSLFile);
                                }
                            };
                            if (xml) {
                                loadXML(sXSLFile, null, null, false, displayMessage, transformXML);
                            } else {
                                displayError("failed to load XML file: " + sXMLFile);
                            }
                        };
                        if (sXMLFile.charAt(0) != '<') {
                            loadXML(sXMLFile, idElement, sStateFile, true, displayMessage, loadXSL);
                        } else {
                            parseXML(sXMLFile, null, idElement, sStateFile, false, displayMessage, loadXSL);
                        }
                    } else {
                        displayError("missing machine element: " + idElement);
                    }
                } catch(e) {
                    displayError(e.message);
                }
                return fSuccess;
            }
            
            /**
             * embedC1P(idElement, sXMLFile, sXSLFile)
             *
             * @param {string} idElement
             * @param {string} sXMLFile
             * @param {string} sXSLFile
             * @return {boolean} true if successful, false if error
             */
            function embedC1P(idElement, sXMLFile, sXSLFile)
            {
                if (fAsync) web.enablePageEvents(false);
                return embedMachine("C1Pjs", APPVERSION, idElement, sXMLFile, sXSLFile);
            }
            
            /**
             * embedPC(idElement, sXMLFile, sXSLFile, sStateFile)
             *
             * @param {string} idElement
             * @param {string} sXMLFile
             * @param {string} sXSLFile
             * @param {string} [sStateFile]
             * @return {boolean} true if successful, false if error
             */
            function embedPC(idElement, sXMLFile, sXSLFile, sStateFile)
            {
                if (fAsync) web.enablePageEvents(false);
                return embedMachine("PCjs", APPVERSION, idElement, sXMLFile, sXSLFile, sStateFile);
            }
            
            /**
             * Prevent the Closure Compiler from renaming functions we want to export, by adding them
             * as (named) properties of a global object.
             */
            if (APPNAME == "PCjs") {
                window['embedPC'] = embedPC;
            }
            
            if (APPNAME == "C1Pjs") {
                window['embedC1P'] = embedC1P;
            }
            
            window['enableEvents'] = web.enablePageEvents;
            window['sendEvent'] = web.sendPageEvent;
            
          • externs.js
            /**
             * @fileoverview Externs used by PCjs and C1Pjs (for the Closure Compiler)
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2012-Dec-04
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            var global;
            
            // var webkitAudioContext;
            
          • netlib.js
            /**
             * @fileoverview Net-related functions
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a> (@jeffpar)
             * @version 1.0
             * Created 2014-03-16
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /* global Buffer: false */
            
            var net = {};
            
            if (typeof module !== 'undefined') {
                var sServerRoot;
                var fs = require("fs");
                var http = require("http");
                var path = require("path");
                var url = require("url");
                var str = require("./strlib");
            }
            
            /*
             * The following are (super-secret) commands that can be added to the URL to enable special features.
             *
             * Our super-secret command processor is affectionately call Gort, and while Gort doesn't understand commands
             * like "Klaatu barada nikto", it does understand commands like "debug" and "rebuild"; eg:
             *
             *      http://www.pcjs.org/?gort=debug
             *
             * hasParm() detects the presence of the specified command, and propagateParms() is a URL filter that ensures
             * any commands listed in asPropagate are passed through to all other URLs on the same page; using any of these
             * commands also forces the page to be rebuilt and not cached (since we would never want a cached "index.html" to
             * contain/expose any of these commands).
             */
            net.GORT_COMMAND    = "gort";
            net.GORT_DEBUG      = "debug";          // use this to force uncompiled JavaScript even on a Release server
            net.GORT_NODEBUG    = "nodebug";        // use this to force uncompiled JavaScript but with DEBUG code disabled
            net.GORT_RELEASE    = "release";        // use this to force the use of compiled JavaScript even on a Debug server
            net.GORT_REBUILD    = "rebuild";        // use this to force the "index.html" in the current directory to be rebuilt
            
            net.REVEAL_COMMAND  = "reveal";
            net.REVEAL_PDFS     = "pdfs";
            
            /*
             * This is a list of the URL parameters that propagateParms() will propagate from the requester's URL to
             * other URLs provided by the requester.
             */
            var asPropagate  = [net.GORT_COMMAND, "autostart"];
            
            /**
             * hasParm(sParm, sValue, req)
             *
             * @param {string} sParm
             * @param {string|null} sValue (pass null to check for the presence of ANY sParm)
             * @param {Object} [req] is the web server's (ie, Express) request object, if any
             * @return {boolean} true if the request Object contains the specified parameter/value, false if not
             *
             * TODO: Consider whether sParm === null should check for the presence of ANY parameter in asPropagate.
             */
            net.hasParm = function(sParm, sValue, req)
            {
                return (req && req.query && req.query[sParm] && (!sValue || req.query[sParm] == sValue));
            };
            
            /**
             * propagateParms(sURL, req)
             *
             * Propagates any "special" query parameters (as listed in asPropagate) from the given
             * request object (req) to the given URL (sURL).
             *
             * We do not modify an sURL that already contains a '?' OR that begins with a protocol
             * (eg, http:, mailto:, etc), in order to keep this function simple, since it's only for
             * debugging purposes anyway.  I also considered blowing off any URLs with a '#' for the
             * same reason, since any hash string must follow any query parameters, but stripping
             * and re-appending the hash string is pretty trivial, so we do handle that.
             *
             * TODO: Make propagateParms() more general-purpose (eg, capable of detecting any URL
             * to the same site, and capable of merging any of our "special" query parameters with any
             * existing query parameters.
             *
             * @param {string|null} sURL
             * @param {Object} [req] is the web server's (ie, Express) request object, if any
             * @return {string} massaged sURL
             */
            net.propagateParms = function(sURL, req)
            {
                if (sURL !== null && sURL.indexOf('?') < 0) {
                    var i;
                    var sHash = "";
                    if ((i = sURL.indexOf('#')) >= 0) {
                        sHash = sURL.substr(i);
                        sURL = sURL.substr(0, i);
                    }
                    var match = sURL.match(/^([a-z])+:(.*)/);
                    if (!match && req && req.query) {
                        for (i = 0; i < asPropagate.length; i++) {
                            var sQuery = asPropagate[i];
                            var sValue;
                            if ((sValue = req.query[sQuery])) {
                                var sParm = (sURL.indexOf('?') < 0? '?' : '&');
                                sParm += sQuery + '=';
                                if (sURL.indexOf(sParm) < 0) sURL += sParm + encodeURIComponent(sValue);
                            }
                        }
                    }
                    sURL += sHash;
                }
                return sURL;
            };
            
            /**
             * encodeURL(sURL, req, fDebug)
             *
             * Used to encodes any URLs presented on the current page, using this 3-step (um, 4-step) process:
             *
             *  1) Replace any backslashes with slashes, in case the URL was derived from a file system path
             *  2) Remap links that begin with "static/" to the corresponding URL at "http://static.pcjs.org/"
             *  3) Transform any "htmlspecialchars" into the corresponding entities, using encodeURI()
             *  4) Massage the result with net.propagateParms(), so that any special parameters are passed along
             *
             * @param {string} sURL
             * @param {Object} req is the web server's (ie, Express) request object, if any
             * @param {boolean} [fDebug]
             * @return {string} encoded URL
             */
            net.encodeURL = function(sURL, req, fDebug)
            {
                if (sURL) {
                    sURL = sURL.replace(/\\/g, '/');
                    if (!fDebug) {
                        if (sURL.match(/^[^:?]*static\//)) {
                            if (sURL.charAt(0) != '/') sURL = path.join(req.path, sURL);
                            sURL = "http://static.pcjs.org" + sURL.replace("/static/", "/");
                        }
                    }
                    return net.propagateParms(encodeURI(sURL), req);
                }
                return sURL;
            };
            
            /**
             * isRemote(sPath)
             *
             * @param {string} sPath
             * @return {boolean} true if sPath is a (supported) remote path, false if not
             *
             * TODO: Add support for FTP? HTTPS? Anything else?
             */
            net.isRemote = function(sPath)
            {
                return (sPath.indexOf("http:") === 0);
            };
            
            /**
             * getStat(sURL, done)
             *
             * @param {string} sURL
             * @param {function(Error,Object)} done
             */
            net.getStat = function(sURL, done)
            {
                var options = url.parse(sURL);
                options.method = "HEAD";
                options.path = options.pathname;    // TODO: Determine the necessity of aliasing this
                var req = http.request(options, function(res) {
                    var err = null;
                    var stat = null;
                    // console.log(JSON.stringify(res.headers));
                    if (res.statusCode == 200) {
                        /*
                         * Apparently Node lower-cases response headers (at least incoming headers, despite
                         * lots of amusing whining by certain people in the Node community), which seems like
                         * a good thing, because that means I can do two simple key look-ups.
                         */
                        var sLength = res.headers['content-length'];
                        var sModified = res.headers['last-modified'];
                        stat = {
                            size: sLength? parseInt(sLength, 10) : -1,
                            mtime: sModified? new Date(sModified) : null,
                            remote: true            // an additional property we provide to indicate this is not your normal stats object
                        };
                    } else {
                        err = new Error("unexpected response code: " + res.statusCode);
                    }
                    done(err, stat);
                });
                req.on('error', function(err) {
                    done(err, null);
                });
                req.end();
            };
            
            /**
             * getFile(sURL, sEncoding, done)
             *
             * @param {string} sURL is the source file
             * @param {string|null} sEncoding is the encoding to assume, if any
             * @param {function(Error,number,(string|Buffer))} done receives an Error, an HTTP status code, and a Buffer (if any)
             *
             * TODO: Add support for FTP? HTTPS? Anything else?
             */
            net.getFile = function(sURL, sEncoding, done)
            {
                /*
                 * Buffer objects are a fixed size, so my choices are: 1) call getStat() first, hope it returns
                 * the true size, and then preallocate a buffer; or 2) create a new, larger buffer every time a new
                 * chunk arrives.  The latter seems best.
                 *
                 * However, if an encoding is given, we'll simply concatenate all the data into a String and return
                 * that instead.  Note that the incoming data is always a Buffer, but concatenation with a String
                 * performs an implied "toString()" on the Buffer.
                 *
                 * WARNING: Even when an encoding is provided, we don't make any attempt to verify that the incoming
                 * data matches that encoding.
                 */
                var sFile = "";
                var bufFile = null;
                http.get(sURL, function(res) {
                    res.on('data', function(data) {
                        if (sEncoding) {
                            sFile += data;
                            return;
                        }
                        if (!bufFile) {
                            bufFile = data;
                            return;
                        }
                        /*
                         * We need to grow bufFile.  I used to do this myself, using the "copy" method:
                         *
                         *      buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
                         *
                         * which defaults to 0 for [targetStart] and [sourceStart], but the docs don't clearly
                         * define the default value for [sourceEnd].  They say "buffer.length", but there is no
                         * parameter here named "buffer".  Let's hope that in the case of "bufFile.copy(buf)"
                         * they meant "bufFile.length".
                         *
                         * However, it turns out this is moot, because there's a new kid in town: Buffer.concat().
                         *
                         *      buf = new Buffer(bufFile.length + data.length);
                         *      bufFile.copy(buf);
                         *      data.copy(buf, bufFile.length);
                         *      bufFile = buf;
                         */
                        bufFile = Buffer.concat([bufFile, data], bufFile.length + data.length);
                    }).on('end', function() {
                        /*
                         * TODO: Decide what to do when res.statusCode is actually an error code (eg, 404), because
                         * in such cases, the file content will likely just be an HTML error page.
                         */
                        if (res.statusCode < 400) {
                            done(null, res.statusCode, sEncoding? sFile : bufFile);
                        } else {
                            done(new Error(sEncoding? sFile : bufFile), res.statusCode, null);
                        }
                    }).on('error', function(err) {
                        done(err, res.statusCode, null);
                    });
                });
            };
            
            /**
             * downloadFile(sURL, sFile, done)
             *
             * @param {string} sURL is the source file
             * @param {string} sFile is a fully-qualified target file
             * @param {function(Error,number)} done is a callback that receives an Error and a HTTP status code
             */
            net.downloadFile = function(sURL, sFile, done)
            {
                var file = fs.createWriteStream(sFile);
            
                /*
                 * http.get() accepts a "url" string in lieu of an "options" object; it automatically builds
                 * the latter from the former using url.parse(). This is good, because it relieves me from
                 * building my own "options" object, and also from wondering why http functions expect "options"
                 * to contain a "path" property, whereas url.parse() returns a "pathname" property.
                 *
                 * Either the documentation isn't quite right for url.parse() or http.request() (the big brother
                 * of http.get), or one of those "options" properties is aliased to the other, or...?
                 */
                http.get(sURL, function(res) {
                    res.on('data', function(data) {
                        file.write(data);
                    }).on('end', function() {
                        file.end();
                        /*
                         * TODO: We should try to update the file's modification time to match the 'last-modified'
                         * response header value, if any.
                         *
                         * TODO: Decide what to do when res.statusCode is actually an error code (eg, 404), because
                         * in such cases, the file content will likely just be an HTML error page.
                         */
                        done(null, res.statusCode);
                    }).on('error', function(err) {
                        done(err, res.statusCode);
                    });
                });
            };
            
            /**
             * loadResource(sURL, fAsync, data, componentNotify, fnNotify, pNotify)
             *
             * Request the specified resource (sURL), and once the request is complete,
             * optionally call the specified method (fnNotify) of the specified component (componentNotify).
             *
             * TODO: Figure out how we can strongly type the fnNotify parameter, because the Closure Compiler has issues with:
             *
             *      {function(this:Component, string, (string|null), number, (number|string|null|Object|Array|undefined))} [fnNotify]
             *
             * NOTE: This function is a mirror image of the weblib version, for server-side component testing within Node;
             * since it is NOT intended for production use, it may make liberal use of synchronous functions, warning messages, etc.
             *
             * @param {string} sURL
             * @param {boolean} [fAsync] is true for an asynchronous request
             * @param {Object|null} [data] for a POST request (default is a GET request)
             * @param {Component} [componentNotify]
             * @param {function(...)} [fnNotify]
             * @param {number|string|null|Object|Array} [pNotify] optional fnNotify parameter
             * @return {Array} containing errorCode and responseText (empty array if async request)
             */
            net.loadResource = function(sURL, fAsync, data, componentNotify, fnNotify, pNotify) {
                var nErrorCode = -1;
                var sResponse = null;
                if (net.isRemote(sURL)) {
                    console.log('net.loadResource("' + sURL + '"): unimplemented');
                } else {
                    if (!sServerRoot) {
                        sServerRoot = path.join(path.dirname(fs.realpathSync(__filename)), "../../../");
                    }
                    var sBaseName = str.getBaseName(sURL);
                    var sFile = path.join(sServerRoot, sURL);
                    if (fAsync) {
                        fs.readFile(sFile, {encoding: "utf8"}, function(err, s) {
                            /*
                             * TODO: If err is set, is there an error code we should return (instead of -1)?
                             */
                            if (!err) {
                                sResponse = s;
                                nErrorCode = 0;
                            }
                            if (fnNotify) {
                                if (!componentNotify) {
                                    fnNotify(sBaseName, sResponse, nErrorCode, pNotify);
                                } else {
                                    fnNotify.call(componentNotify, sBaseName, sResponse, nErrorCode, pNotify);
                                }
                            }
                        });
                        return [];
                    } else {
                        try {
                            sResponse = fs.readFileSync(sFile, {encoding: "utf8"});
                            nErrorCode = 0;
                        } catch(err) {
                            /*
                             * TODO: If err is set, is there an error code we should return (instead of -1)?
                             */
                            console.log(err.message);
                        }
                        if (fnNotify) {
                            if (!componentNotify) {
                                fnNotify(sBaseName, sResponse, nErrorCode, pNotify);
                            } else {
                                fnNotify.call(componentNotify, sBaseName, sResponse, nErrorCode, pNotify);
                            }
                        }
                    }
                }
                return [nErrorCode, sResponse];
            };
            
            if (typeof module !== 'undefined') module.exports = net;
            
          • nodebug.js
            /**
             * @fileoverview Compile-time definitions for non-DEBUG configurations.
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-Aug-22
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of PCjs, which is part of the JavaScript Machines Project (aka JSMachines)
             * at <http://jsmachines.net/> and <http://pcjs.org/>.
             *
             * PCjs is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with PCjs.  If not,
             * see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some PCjs files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * PCjs program for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /* global DEBUG: true */
            
            /*
             * In the compiled case, we rely on the Closure Compiler to override DEBUG, setting it to false,
             * so that all DEBUG-only code will be removed by the compiler.
             *
             * However, when we're in "development mode" and want to run uncompiled code without any DEBUG-only
             * code, we must arrange for this additional file, nodebug.js, to be loaded as early as possible,
             * which will then set DEBUG to false at runtime.
             */
            DEBUG = false;
            
          • proclib.js
            /**
             * @fileoverview Process-related helper functions
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a> (@jeffpar)
             * @version 1.0
             * Created 2014-05-07
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            var proc = {};
            
            /**
             * getArgs()
             *
             * Processes command-line arguments.  Arguments may be introduced by either
             * a double-hyphen (--) or a long dash (—), and argument values, if any, must be
             * separated by an "=" without any intervening whitespace.  Arguments without
             * an explicit value default to true, and any argument appearing more than once
             * is automatically converted to an Array.
             * 
             * Single-hyphen (-) arguments are allowed as well; they are treated as a series
             * of single-character arguments, each set to true, and any of these arguments
             * appearing more than once is discarded.
             *
             * @return {{argc:number, argv:{}}}
             */
            proc.getArgs = function() {
                var argc = 0;
                var argv = {};
                for (var i = 2; i < process.argv.length; i++) {
                    var j, sSep;
                    var sArg = process.argv[i];
                    if (!sArg.indexOf(sSep = "--") || !sArg.indexOf(sSep = "—")) {
                        sArg = sArg.substr(sSep.length);
                        var sValue = true;
                        j = sArg.indexOf("=");
                        if (j > 0) {
                            sValue = sArg.substr(j+1);
                            sArg = sArg.substr(0, j);
                            sValue = (sValue == "true")? true : ((sValue == "false")? false : sValue);
                        }
                        if (argv[sArg] === undefined) {
                            argc++;
                            argv[sArg] = sValue;
                        } else {
                            // console.log("too many '" + sArg + "' arguments");
                            if (typeof argv[sArg] == "string") {
                                argv[sArg] = [argv[sArg]];
                            }
                            argv[sArg].push(sValue);
                        }
                    } else if (!sArg.indexOf("-")) {
                        for (j = 1; j < sArg.length; j++) {
                            var ch = sArg.charAt(j);
                            if (argv[ch] === undefined) {
                                argv[ch] = true;
                                argc++;
                            }
                        } 
                    }
                }
                return {argc: argc, argv: argv};
            };
            
            if (typeof module !== 'undefined') module.exports = proc;
            
          • reportapi.js
            /**
             * @fileoverview Report API, as defined by httpapi.js
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-13
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            var ReportAPI = {
                ENDPOINT:       "/api/v1/report",
                QUERY: {
                    APP:        "app",
                    VER:        "ver",
                    URL:        "url",
                    USER:       "user",
                    TYPE:       "type",
                    DATA:       "data"
                },
                TYPE: {
                    BUG:        "bug"
                },
                RES: {
                    OK:         "Thank you"
                }
            };
            
            if (typeof module !== 'undefined') module.exports = ReportAPI;
          • sockets.js
            /**
             * @fileoverview Experimental code included by HTMLOut() only if "--sockets"
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-Apr-29
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /* global io: false */
            
            // connect to the socket server
            var socket = io.connect();
            
            // if we get an "info" emit from the socket server then console.log the data we receive
            socket.on('info', function (data) {
                console.log(data);
            });
          • strlib.js
            /**
             *  @fileoverview String-related helper functions
             *  @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a> (@jeffpar)
             *  @version 1.0
             *  Created 2014-03-09
             *
             *  Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            var str = {};
            
            /**
             * isValidInt(s, base)
             *
             * Since the built-in parseInt() function has the annoying feature of returning a partial value
             * when it encounters an invalid character (eg, parseInt("foo", 16) returns 0xf), use this function
             * to validate the entire string first.
             *
             * @param {string} s is the string representation of some number
             * @param {number} [base] is the radix of the number represented above (only 10 and 16 are supported)
             * @return {boolean} true if valid (or we're not sure because the base isn't recognized), false if invalid
             */
            str.isValidInt = function(s, base)
            {
                if (!base || base == 10) return s.match(/^[0-9]+$/) !== null;
                if (base == 16) return s.match(/^[0-9a-f]+$/i) !== null;
                return true;
            };
            
            /**
             * parseInt(s, base)
             *
             * This is a wrapper around the built-in parseInt() function, which recognizes certain prefixes (eg,
             * '$' or "0x" for hex) and suffixes (eg, 'h' for hex or '.' for decimal), and then calls isValidInt()
             * to ensure we don't get partial values (see isValidInt() for details).
             *
             * @param {string} s is the string representation of some number
             * @param {number} [base] is the default radix to use (default is 16); can be overridden by prefixes/suffixes
             * @return {number|undefined} corresponding value, or undefined if invalid
             */
            str.parseInt = function(s, base)
            {
                var value;
                if (s) {
                    if (!base) base = 16;
                    if (s.charAt(0) == '$') {
                        base = 16;
                        s = s.substr(1);
                    } else if (s.substr(0, 2) == "0x") {
                        base = 16;
                        s = s.substr(2);
                    } else {
                        var chSuffix = s.charAt(s.length-1).toLowerCase();
                        if (chSuffix == 'h') {
                            base = 16;
                            chSuffix = null;
                        }
                        else if (chSuffix == '.') {
                            base = 10;
                            chSuffix = null;
                        }
                        if (chSuffix === null) s = s.substr(0, s.length-1);
                    }
                    var v;
                    if (str.isValidInt(s, base) && !isNaN(v = parseInt(s, base))) {
                        value = v|0;
                    }
                }
                return value;
            };
            
            /**
             * toHex(n, cch)
             *
             * Converts an integer to hex, with the specified number of digits (up to the default of 8).
             *
             * You might be tempted to use the built-in n.toString(16) instead, but it doesn't zero-pad and it
             * doesn't properly convert negative values; for example, if n is -2147483647, then n.toString(16)
             * will return "-7fffffff" instead of "80000001".  Moreover, if n is undefined, n.toString() will throw
             * an exception, whereas toHex() will simply return '?' characters.
             *
             * NOTE: The following work-around (adapted from code found on StackOverflow) would be another solution,
             * taking care of negative values, zero-padding, and upper-casing, but not undefined/NaN values:
             *
             *      s = (n < 0? n + 0x100000000 : n).toString(16);
             *      s = "00000000".substr(0, 8 - s.length) + s;
             *      s = s.substr(0, cch).toUpperCase();
             *
             * @param {number|null|undefined} n is a 32-bit value
             * @param {number} [cch] is the desired number of hex digits (8 is both the default and the maximum)
             * @return {string} the hex representation of n
             */
            str.toHex = function(n, cch)
            {
                var s = "";
                if (cch === undefined) {
                    cch = 8;
                } else {
                    if (cch > 8) cch = 8;
                }
                /*
                 * An initial "falsey" check for null takes care of both null and undefined;
                 * we can't rely entirely on isNaN(), because isNaN(null) returns false, oddly enough.
                 */
                if (n == null || isNaN(n)) {
                    while (cch-- > 0) s = '?' + s;
                } else {
                    while (cch-- > 0) {
                        var d = n & 0xf;
                        d += (d >= 0 && d <= 9? 0x30 : 0x41 - 10);
                        s = String.fromCharCode(d) + s;
                        n >>= 4;
                    }
                }
                return s;
            };
            
            /**
             * toHexByte(b)
             *
             * Alias for "0x" + str.toHex(b, 2)
             *
             * @param {number|null|undefined} b is a byte value
             * @return {string} the hex representation of b
             */
            str.toHexByte = function(b)
            {
                return "0x" + str.toHex(b, 2);
            };
            
            /**
             * toHexWord(w)
             *
             * Alias for "0x" + str.toHex(w, 4)
             *
             * @param {number|null|undefined} w is a word (16-bit) value
             * @return {string} the hex representation of w
             */
            str.toHexWord = function(w)
            {
                return "0x" + str.toHex(w, 4);
            };
            
            /**
             * toHexLong(l)
             *
             * Alias for "0x" + toHex(l)
             *
             * @param {number|null|undefined} l is a dword (32-bit) value
             * @return {string} the hex representation of w
             */
            str.toHexLong = function(l)
            {
                return "0x" + str.toHex(l);
            };
            
            /**
             * getBaseName(sFileName, fStripExt)
             *
             * This is a poor-man's version of Node's path.basename(), which Node-only components should use instead.
             *
             * Note that fStripExt can be used to strip ANY extension, whereas path.basename() will strip the extension only
             * if it matches the second parameter (eg, path.basename("/foo/bar/baz/asdf/quux.html", ".html") returns "quux").
             *
             * @param {string} sFileName
             * @param {boolean} [fStripExt]
             * @return {string}
             */
            str.getBaseName = function(sFileName, fStripExt)
            {
                var sBaseName = sFileName;
            
                var i = sFileName.lastIndexOf('/');
                if (i >= 0) sBaseName = sFileName.substr(i + 1);
            
                /*
                 * This next bit is a kludge to clean up names that are part of a URL that includes unsightly query parameters.
                 */
                i = sBaseName.indexOf('&');
                if (i > 0) sBaseName = sBaseName.substr(0, i);
            
                if (fStripExt) {
                    i = sBaseName.lastIndexOf(".");
                    if (i > 0) {
                        sBaseName = sBaseName.substring(0, i);
                    }
                }
                return sBaseName;
            };
            
            /**
             * getExtension(sFileName)
             *
             * This is a poor-man's version of Node's path.extname(), which Node-only components should use instead.
             *
             * Note that we EXCLUDE the period from the returned extension, whereas path.extname() includes it.
             *
             * @param {string} sFileName
             * @return {string} the filename's extension (in lower-case and EXCLUDING the "."), or an empty string
             */
            str.getExtension = function(sFileName)
            {
                var sExtension = "";
                var i = sFileName.lastIndexOf(".");
                if (i >= 0) {
                    sExtension = sFileName.substr(i + 1).toLowerCase();
                }
                return sExtension;
            };
            
            /**
             * endsWith(s, sSuffix)
             *
             * @param {string} s
             * @param {string} sSuffix
             * @return {boolean} true if s ends with sSuffix, false if not
             */
            str.endsWith = function(s, sSuffix)
            {
                return s.indexOf(sSuffix, s.length - sSuffix.length) !== -1;
            };
            
            str.aHTMLEscapeMap = {
                '&': '&amp;',
                '<': '&lt;',
                '>': '&gt;',
                '"': '&quot;',
                "'": '&#039;'
            };
            
            /**
             * escapeHTML(sHTML)
             *
             * @param {string} sHTML
             * @return {string} with HTML entities "escaped", similar to PHP's htmlspecialchars()
             */
            str.escapeHTML = function(sHTML)
            {
                return sHTML.replace(/[&<>"']/g, function(m) {
                    return str.aHTMLEscapeMap[m];
                });
            };
            
            /**
             * replaceAll(sFind, sReplace, s)
             *
             * @param {string} sFind
             * @param {string} sReplace
             * @param {string} s
             * @return {string}
             */
            str.replaceAll = function(sFind, sReplace, s)
            {
                var a = {};
                a[sFind] = sReplace;
                return str.replaceArray(a, s);
            };
            
            /**
             * replaceArray(a, s)
             *
             * @param {Object} a
             * @param {string} s
             * @return {string}
             */
            str.replaceArray = function(a, s)
            {
                var sMatch = "";
                for (var k in a) {
                    /*
                     * As noted in:
                     *
                     *      http://www.regexguru.com/2008/04/escape-characters-only-when-necessary/
                     *
                     * inside character classes, only backslash, caret, hyphen and the closing bracket need to be
                     * escaped.  And in fact, if you ensure that the closing bracket is first, the caret is not first,
                     * and the hyphen is last, you can avoid escaping those as well.
                     */
                    k = k.replace(/([\\[\]*{}().+?])/g, "\\$1");
                    sMatch += (sMatch? '|' : '') + k;
                }
                return s.replace(new RegExp('(' + sMatch + ')', "g"), function(m) {
                    return a[m];
                });
            };
            
            /**
             * pad(s, cch)
             *
             * Note that the maximum amount of padding currently supported is 40 spaces.
             *
             * @param {string} s is a string
             * @param {number} cch is desired length
             * @returns {string} the original string (s) with spaces padding it to the specified length
             */
            str.pad = function(s, cch)
            {
                return s + "                                        ".substr(0, cch - s.length);
            };
            
            /**
             * trim(s)
             *
             * @param {string} s
             * @returns {string}
             */
            str.trim = function(s)
            {
                if (String.prototype.trim) {
                    return s.trim();
                }
                return s.replace(/^\s+|\s+$/g, "");
            };
            
            if (typeof module !== 'undefined') module.exports = str;
            
          • userapi.js
            /**
             * @fileoverview User API, as defined by httpapi.js
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
             * @version 1.0
             * Created 2014-May-13
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            /*
             * Examples of User API requests:
             * 
             *      web.getHost() + UserAPI.ENDPOINT + '?' + UserAPI.QUERY.REQ + '=' + UserAPI.REQ.VERIFY + '&' + UserAPI.QUERY.USER + '=' + sUser;
             */
            
            var UserAPI = {
                ENDPOINT:       "/api/v1/user",
                QUERY: {
                    REQ:        "req",      // specifies a request 
                    USER:       "user",     // specifies a user ID
                    STATE:      "state",    // specifies a state ID 
                    DATA:       "data"      // specifies state data
                },
                REQ: {
                    CREATE:     "create",   // creates a user ID
                    VERIFY:     "verify",   // requests verification of a user ID
                    STORE:      "store",    // stores a machine state on the server
                    LOAD:       "load"      // loads a machine state from the server
                },
                RES: {
                    CODE:       "code",
                    DATA:       "data"
                },
                CODE: {
                    OK:         "ok",
                    FAIL:       "error"
                },
                FAIL: {
                    DUPLICATE:  "user already exists",
                    VERIFY:     "unable to verify user",
                    BADSTATE:   "invalid state parameter",
                    NOSTATE:    "no machine state",
                    BADLOAD:    "unable to load machine state",
                    BADSTORE:   "unable to save machine state"
                }
            };
            
            if (typeof module !== 'undefined') module.exports = UserAPI;
          • usrlib.js
            /**
             *  @fileoverview Assorted helper functions
             *  @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a> (@jeffpar)
             *  @version 1.0
             *  Created 2014-03-09
             *
             *  Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            "use strict";
            
            var usr = {};
            
            /**
             * binarySearch(a, v, fnCompare)
             *
             * @param {Array} a is an array
             * @param {number|string|Array|Object} v
             * @param {function((number|string|Array|Object), (number|string|Array|Object))} [fnCompare]
             * @return {number} the index of matching entry if non-negative, otherwise the index of the insertion point
             */
            usr.binarySearch = function(a, v, fnCompare) {
                var left = 0;
                var right = a.length;
                var found = 0;
                if (fnCompare === undefined) {
                    fnCompare = function(a, b) {
                        return a > b? 1 : a < b? -1 : 0;
                    };
                }
                while (left < right) {
                    var middle = (left + right) >> 1;
                    var compareResult;
                    compareResult = fnCompare(v, a[middle]);
                    if (compareResult > 0) {
                        left = middle + 1;
                    } else {
                        right = middle;
                        found = !compareResult;
                    }
                }
                return found? left : ~left;
            };
            
            /**
             * binaryInsert(a, v, fnCompare)
             *
             * If element v already exists in array a, the array is unchanged (we don't allow duplicates); otherwise, the
             * element is inserted into the array at the appropriate index.
             *
             * @param {Array} a is an array
             * @param {number|string|Array|Object} v is the value to insert
             * @param {function((number|string|Array|Object), (number|string|Array|Object))} [fnCompare]
             */
            usr.binaryInsert = function(a, v, fnCompare) {
                var index = usr.binarySearch(a, v, fnCompare);
                if (index < 0) {
                    a.splice(-(index + 1), 0, v);
                }
            };
            
            /**
             * getTime()
             *
             * @return {number} the current time, in milliseconds
             */
            usr.getTime = Date.now || function() { return +new Date(); };
            
            /**
             * getTimestamp()
             *
             * @return {string} timestamp containing the current date and time ("yyyy-mm-dd hh:mm:ss")
             */
            usr.getTimestamp = function() {
                var date = new Date();
                var padNum = function(n) {
                    return (n < 10? "0" : "") + n;
                };
                return date.getFullYear() + "-" + padNum(date.getMonth() + 1) + "-" + padNum(date.getDate()) + " " + padNum(date.getHours()) + ":" + padNum(date.getMinutes()) + ":" + padNum(date.getSeconds());
            };
            
            /**
             * getMonthDays(nMonth, nYear)
             *
             * Note that if we're being called on behalf of the RTC, its year is always truncated to two digits (mod 100),
             * so we have no idea what century the year 0 might refer to.  When using the normal leap-year formula, 0 fails
             * the mod 100 test but passes the mod 400 test, so as far as the RTC is concerned, every century year is a leap
             * year.  Since we're most likely dealing with the year 2000, that's fine, since 2000 was also a leap year.
             *
             * TODO: There IS a separate CMOS byte that's supposed to be set to CMOS_ADDR.CENTURY_DATE; it's always BCD,
             * so theoretically it will contain values like 0x19 or 0x20 (for the 20th and 21st centuries, respectively), and
             * we could add that as another parameter to this function, to improve the accuracy, but that would go beyond what
             * a real RTC actually does.
             *
             * @param {number} nMonth (1-12)
             * @param {number} nYear (normally a 4-digit year, but it may also be mod 100)
             * @return {number} the maximum (1-based) day allowed for the specified month and year
             */
            usr.getMonthDays = function(nMonth, nYear)
            {
                var nDays = usr.aMonthDays[nMonth - 1];
                if (nDays == 28) {
                    if ((nYear % 4) === 0 && ((nYear % 100) || (nYear % 400) === 0)) {
                        nDays++;
                    }
                }
                return nDays;
            };
            
            usr.asDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
            usr.asMonths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
            usr.aMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
            
            /**
             * formatDate(sFormat, date)
             *
             * @param {string} sFormat (eg, "F j, Y", "Y-m-d H:i:s")
             * @param {Date} [date] (default is the current time)
             * @return {string}
             *
             * Supported identifiers in sFormat include:
             *
             *      a:  lowercase ante meridiem and post meridiem (am or pm)
             *      d:  day of the month, 2 digits with leading zeros (01,...,31)
             *      g:  hour in 12-hour format, without leading zeros (1,...,12)
             *      i:  minutes, with leading zeros (00,...,59)
             *      j:  day of the month, without leading zeros (1,...,31)
             *      l:  day of the week ("Sunday",...,"Saturday")
             *      m:  month, with leading zeros (01,...,12)
             *      s:  seconds, with leading zeros (00,...,59)
             *      F:  month ("January",...,"December")
             *      H:  hour in 24-hour format, with leading zeros (00,...,23)
             *      Y:  year (eg, 2014)
             *
             * For more inspiration, see: http://php.net/manual/en/function.date.php
             */
            usr.formatDate = function(sFormat, date) {
                var sDate = "";
                if (!date) date = new Date();
                var iHour = date.getHours();
                var iDay = date.getDate();
                var iMonth = date.getMonth() + 1;
                for (var i = 0; i < sFormat.length; i++) {
                    var ch;
                    switch((ch = sFormat.charAt(i))) {
                    case 'a':
                        sDate += (iHour < 12? "am" : "pm");
                        break;
                    case 'd':
                        sDate += ('0' + iDay).slice(-2);
                        break;
                    case 'g':
                        sDate += (!iHour? 12 : (iHour > 12? iHour - 12 : iHour));
                        break;
                    case 'i':
                        sDate += ('0' + date.getMinutes()).slice(-2);
                        break;
                    case 'j':
                        sDate += iDay;
                        break;
                    case 'l':
                        sDate += usr.asDays[date.getDay()];
                        break;
                    case 'm':
                        sDate += ('0' + iMonth).slice(-2);
                        break;
                    case 's':
                        sDate += ('0' + date.getSeconds()).slice(-2);
                        break;
                    case 'F':
                        sDate += usr.asMonths[iMonth - 1];
                        break;
                    case 'H':
                        sDate += ('0' + iHour).slice(-2);
                        break;
                    case 'Y':
                        sDate += date.getFullYear();
                        break;
                    default:
                        sDate += ch;
                        break;
                    }
                }
                return sDate;
            };
            
            /**
             * @typedef {{
             *  mask:       number,
             *  shift:      number
             * }}
             */
            var BitField;
            
            /**
             * @typedef {Object.<BitField>}
             */
            var BitFields;
            
            /**
             * defineBitFields(bfs)
             *
             * Prepares a bit field definition for use with getBitField() and setBitField(); eg:
             *
             *      var bfs = usr.defineBitFields({num:20, count:8, btmod:1, type:3});
             *
             * The above defines a set of bit fields containg four fields: num (bits 0-19), count (bits 20-27), btmod (bit 28), and type (bits 29-31).
             *
             *      usr.setBitField(bfs.num, n, 1);
             *
             * The above set bit field "bfs.num" in numeric variable "n" to the value 1.
             *
             * @param {Object} bfs
             * @return {*} (technically, we transform the bfs object into a BitFields object, but the Closure Compiler won't let us specify that)
             */
            usr.defineBitFields = function(bfs)
            {
                var bit = 0;
                for (var f in bfs) {
                    var width = bfs[f];
                    var mask = ((1 << width) - 1) << bit;
                    bfs[f] = {mask: mask, shift: bit};
                    bit += width;
                }
                // Component.assert(bit <= 32);
                return bfs;
            };
            
            /**
             * initBitFields(bfs, ...)
             *
             * @param {BitFields} bfs
             * @param {...number} var_args
             * @return {number} a value containing all supplied bit fields
             */
            usr.initBitFields = function(bfs, var_args)
            {
                var v = 0, i = 1;
                for (var f in bfs) {
                    if (i >= arguments.length) break;
                    v = usr.setBitField(bfs[f], v, arguments[i++]);
                }
                return v;
            };
            
            /**
             * getBitField(bf, v)
             *
             * @param {BitField} bf
             * @param {number} v is a value containing bit fields
             * @return {number} the value of the bit field in v defined by bf
             */
            usr.getBitField = function(bf, v)
            {
                return (v & bf.mask) >> bf.shift;
            };
            
            /**
             * setBitField(bf, v, n)
             *
             * @param {BitField} bf
             * @param {number} v is a value containing bit fields
             * @param {number} n is a value to store in v in the bit field defined by bf
             * @return {number} updated v
             */
            usr.setBitField = function(bf, v, n)
            {
                // Component.assert(!(n & ~(bf.mask >>> bf.shift)));
                return (v & ~bf.mask) | ((n << bf.shift) & bf.mask);
            };
            
            /**
             * indexOf(a, t, i)
             *
             * Use this instead of Array.prototype.indexOf() if you can't be sure the browser supports it.
             *
             * @param {Array} a
             * @param {*} t
             * @param {number} [i]
             * @returns {number}
             */
            usr.indexOf = function(a, t, i)
            {
                if (Array.prototype.indexOf) {
                    return a.indexOf(t, i);
                }
                i = i || 0;
                if (i < 0) i += a.length;
                if (i < 0) i = 0;
                for (var n = a.length; i < n; i++) {
                    if (i in a && a[i] === t) return i;
                }
                return -1;
            };
            
            if (typeof module !== 'undefined') module.exports = usr;
            
          • weblib.js
            /**
             * @fileoverview Browser-related helper functions
             * @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a> (@jeffpar)
             * @version 1.0
             * Created 2014-05-08
             *
             * Copyright © 2012-2015 Jeff Parsons <Jeff@pcjs.org>
             *
             * This file is part of the JavaScript Machines Project (aka JSMachines) at <http://jsmachines.net/>
             * and <http://pcjs.org/>.
             *
             * JSMachines is free software: you can redistribute it and/or modify it under the terms of the
             * GNU General Public License as published by the Free Software Foundation, either version 3
             * of the License, or (at your option) any later version.
             *
             * JSMachines is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
             * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
             * GNU General Public License for more details.
             *
             * You should have received a copy of the GNU General Public License along with JSMachines.
             * If not, see <http://www.gnu.org/licenses/gpl.html>.
             *
             * You are required to include the above copyright notice in every source code file of every
             * copy or modified version of this work, and to display that copyright notice on every screen
             * that loads or runs any version of this software (see Computer.sCopyright).
             *
             * Some JSMachines files also attempt to load external resource files, such as character-image files,
             * ROM files, and disk image files. Those external resource files are not considered part of the
             * JSMachines Project for purposes of the GNU General Public License, and the author does not claim
             * any copyright as to their contents.
             */
            
            /*
             * According to http://www.w3schools.com/jsref/jsref_obj_global.asp, these are the *global* properties
             * and functions of JavaScript-in-the-Browser:
             *
             * Property             Description
             * ---
             * Infinity             A numeric value that represents positive/negative infinity
             * NaN                  "Not-a-Number" value
             * undefined            Indicates that a variable has not been assigned a value
             *
             * Function             Description
             * ---
             * decodeURI()          Decodes a URI
             * decodeURIComponent() Decodes a URI component
             * encodeURI()          Encodes a URI
             * encodeURIComponent() Encodes a URI component
             * escape()             Deprecated in version 1.5. Use encodeURI() or encodeURIComponent() instead
             * eval()               Evaluates a string and executes it as if it was script code
             * isFinite()           Determines whether a value is a finite, legal number
             * isNaN()              Determines whether a value is an illegal number
             * Number()             Converts an object's value to a number
             * parseFloat()         Parses a string and returns a floating point number
             * parseInt()           Parses a string and returns an integer
             * String()             Converts an object's value to a string
             * unescape()           Deprecated in version 1.5. Use decodeURI() or decodeURIComponent() instead
             *
             * And according to http://www.w3schools.com/jsref/obj_window.asp, these are the properties and functions
             * of the *window* object.
             *
             * Property             Description
             * ---
             * closed               Returns a Boolean value indicating whether a window has been closed or not
             * defaultStatus        Sets or returns the default text in the statusbar of a window
             * document             Returns the Document object for the window (See Document object)
             * frames               Returns an array of all the frames (including iframes) in the current window
             * history              Returns the History object for the window (See History object)
             * innerHeight          Returns the inner height of a window's content area
             * innerWidth           Returns the inner width of a window's content area
             * length               Returns the number of frames (including iframes) in a window
             * location             Returns the Location object for the window (See Location object)
             * name                 Sets or returns the name of a window
             * navigator            Returns the Navigator object for the window (See Navigator object)
             * opener               Returns a reference to the window that created the window
             * outerHeight          Returns the outer height of a window, including toolbars/scrollbars
             * outerWidth           Returns the outer width of a window, including toolbars/scrollbars
             * pageXOffset          Returns the pixels the current document has been scrolled (horizontally) from the upper left corner of the window
             * pageYOffset          Returns the pixels the current document has been scrolled (vertically) from the upper left corner of the window
             * parent               Returns the parent window of the current window
             * screen               Returns the Screen object for the window (See Screen object)
             * screenLeft           Returns the x coordinate of the window relative to the screen
             * screenTop            Returns the y coordinate of the window relative to the screen
             * screenX              Returns the x coordinate of the window relative to the screen
             * screenY              Returns the y coordinate of the window relative to the screen
             * self                 Returns the current window
             * status               Sets or returns the text in the statusbar of a window
             * top                  Returns the topmost browser window
             *
             * Method               Description
             * ---
             * alert()              Displays an alert box with a message and an OK button
             * atob()               Decodes a base-64 encoded string
             * blur()               Removes focus from the current window
             * btoa()               Encodes a string in base-64
             * clearInterval()      Clears a timer set with setInterval()
             * clearTimeout()       Clears a timer set with setTimeout()
             * close()              Closes the current window
             * confirm()            Displays a dialog box with a message and an OK and a Cancel button
             * createPopup()        Creates a pop-up window
             * focus()              Sets focus to the current window
             * moveBy()             Moves a window relative to its current position
             * moveTo()             Moves a window to the specified position
             * open()               Opens a new browser window
             * print()              Prints the content of the current window
             * prompt()             Displays a dialog box that prompts the visitor for input
             * resizeBy()           Resizes the window by the specified pixels
             * resizeTo()           Resizes the window to the specified width and height
             * scroll()             This method has been replaced by the scrollTo() method.
             * scrollBy()           Scrolls the content by the specified number of pixels
             * scrollTo()           Scrolls the content to the specified coordinates
             * setInterval()        Calls a function or evaluates an expression at specified intervals (in milliseconds)
             * setTimeout()         Calls a function or evaluates an expression after a specified number of milliseconds
             * stop()               Stops the window from loading
             */
            
            "use strict";
            
            /* global window: true, setTimeout: false, clearTimeout: false, SITEHOST: false */
            
            if (typeof module !== 'undefined') {
                var Component;
                require("./defines");
                var str = require("./strlib");
                var ReportAPI = require("./reportapi");
            }
            
            var web = {};
            
            /*
             * We must defer loading the Component module until the function(s) requiring it are
             * called; otherwise, we create an initialization cycle in which Component requires weblib
             * and weblib requires Component.
             *
             * In an ideal world, weblib would not be dependent on Component, but we really want to use
             * its I/O functions.  The simplest solution is to create wrapper functions.
             */
            
            /**
             * log(s, type)
             *
             * For diagnostic output only.  DEBUG must be true (or "--debug" specified via the command-line)
             * for Component.log() to display anything.
             *
             * @param {string} [s] is the message text
             * @param {string} [type] is the message type
             */
            web.log = function(s, type)
            {
                if (typeof module !== 'undefined') {
                    if (!Component) Component = require("./component");
                }
                Component.log(s, type);
            };
            
            /**
             * notice(s, fPrintOnly, id)
             *
             * If Component.notice() calls web.alertUser(), it will fall back to web.log() if all else fails.
             *
             * @param {string} s is the message text
             * @param {boolean} [fPrintOnly]
             * @param {string} [id] is the caller's ID, if any
             */
            web.notice = function(s, fPrintOnly, id)
            {
                if (typeof module !== 'undefined') {
                    if (!Component) Component = require("./component");
                }
                Component.notice(s, fPrintOnly, id);
            };
            
            /**
             * loadResource(sURL, fAsync, data, componentNotify, fnNotify, pNotify)
             *
             * Request the specified resource (sURL), and once the request is complete,
             * optionally call the specified method (fnNotify) of the specified component (componentNotify).
             *
             * TODO: Figure out how we can strongly type the fnNotify parameter, because the Closure Compiler has issues with:
             *
             *      {function(this:Component, string, (string|null), number, (number|string|null|Object|Array|undefined))} [fnNotify]
             *
             * @param {string} sURL
             * @param {boolean} [fAsync] is true for an asynchronous request
             * @param {Object} [data] for a POST request (default is a GET request)
             * @param {Component} [componentNotify]
             * @param {function(...)} [fnNotify]
             * @param {number|string|null|Object|Array} [pNotify] optional fnNotify info parameter
             * @return {Array} containing errorCode and responseText (empty array if fAsync is true)
             */
            web.loadResource = function(sURL, fAsync, data, componentNotify, fnNotify, pNotify)
            {
                fAsync = !!fAsync;          // ensure that fAsync is a valid boolean (Internet Explorer xmlHTTP functions insist on it)
                if (typeof module !== 'undefined') {
                    /*
                     * We don't even need to load Component, because we can't use any of the code below
                     * within Node anyway.  Instead, we must hand this request off to our network library.
                     *
                     *      if (!Component) Component = require("./component");
                     */
                    var net = require("./netlib");
                    return net.loadResource(sURL, fAsync, data, componentNotify, fnNotify, pNotify);
                }
                var nErrorCode = 0;
                var sURLData = null;
                var sURLName = str.getBaseName(sURL);
                var xmlHTTP = (window.XMLHttpRequest? new window.XMLHttpRequest() : new window.ActiveXObject("Microsoft.XMLHTTP"));
                if (fAsync) {
                    xmlHTTP.onreadystatechange = function() {
                        if (xmlHTTP.readyState === 4) {
                            /*
                             * The following line was recommended for WebKit, as a work-around to prevent the handler firing multiple
                             * times when debugging.  Unfortunately, that's not the only XMLHttpRequest problem that occurs when
                             * debugging, so I think the WebKit problem is deeper than that.  When we have multiple XMLHttpRequests
                             * pending, any debugging activity means most of them simply get dropped on floor, so what may actually be
                             * happening are mis-notifications rather than redundant notifications.
                             *
                             *      xmlHTTP.onreadystatechange = undefined;
                             */
                            sURLData = xmlHTTP.responseText;
                            /*
                             * The normal "success" case is an HTTP status code of 200, but when testing with files loaded
                             * from the local file system (ie, when using the "file:" protocol), we have to be a bit more "flexible".
                             */
                            if (xmlHTTP.status == 200 || !xmlHTTP.status && sURLData.length && web.getHostProtocol() == "file:") {
                                if (MAXDEBUG) web.log("xmlHTTP.onreadystatechange(" + sURL + "): returned " + sURLData.length + " bytes");
                            }
                            else {
                                nErrorCode = xmlHTTP.status || -1;
                                web.log("xmlHTTP.onreadystatechange(" + sURL + "): error code " + nErrorCode);
                            }
                            if (fnNotify) {
                                if (!componentNotify) {
                                    fnNotify(sURLName, sURLData, nErrorCode, pNotify);
                                } else {
                                    fnNotify.call(componentNotify, sURLName, sURLData, nErrorCode, pNotify);
                                }
                            }
                        }
                    };
                }
                if (data) {
                    var sData = "";
                    for (var p in data) {
                        if (!data.hasOwnProperty(p)) continue;
                        if (sData) sData += "&";
                        sData += p + '=' + encodeURIComponent(data[p]);
                    }
                    sData = sData.replace(/%20/g, '+');
                    if (MAXDEBUG) web.log("web.loadResource(POST " + sURL + "): " + sData.length + " bytes");
                    xmlHTTP.open("POST", sURL, fAsync);
                    xmlHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                    xmlHTTP.send(sData);
                } else {
                    if (MAXDEBUG) web.log("web.loadResource(GET " + sURL + ")");
                    xmlHTTP.open("GET", sURL, fAsync);
                    xmlHTTP.send();
                }
                var response = [];
                if (!fAsync) {
                    sURLData = xmlHTTP.responseText;
                    if (xmlHTTP.status == 200) {
                        if (MAXDEBUG) web.log("web.loadResource(" + sURL + "): returned " + sURLData.length + " bytes");
                    } else {
                        nErrorCode = xmlHTTP.status || -1;
                        web.log("web.loadResource(" + sURL + "): error code " + nErrorCode);
                    }
                    if (fnNotify) {
                        if (!componentNotify) {
                            fnNotify(sURLName, sURLData, nErrorCode, pNotify);
                        } else {
                            fnNotify.call(componentNotify, sURLName, sURLData, nErrorCode, pNotify);
                        }
                    }
                    response = [nErrorCode, sURLData];
                }
                return response;
            };
            
            /**
             * sendReport(sApp, sVer, sURL, sUser, sType, sReport, sHostName)
             *
             * Send a report (eg, bug report) to the server.
             *
             * @param {string} sApp (eg, "PCjs")
             * @param {string} sVer (eg, "1.02")
             * @param {string} sURL (eg, "/devices/pc/machine/5150/mda/64kb/machine.xml")
             * @param {string} sUser (ie, the user key, if any)
             * @param {string} sType (eg, "bug"); one of ReportAPI.TYPE.*
             * @param {string} sReport (eg, unparsed state data)
             * @param {string} [sHostName] (default is http://SITEHOST)
             */
            web.sendReport = function(sApp, sVer, sURL, sUser, sType, sReport, sHostName)
            {
                var data = {};
                data[ReportAPI.QUERY.APP] = sApp;
                data[ReportAPI.QUERY.VER] = sVer;
                data[ReportAPI.QUERY.URL] = sURL;
                data[ReportAPI.QUERY.USER] = sUser;
                data[ReportAPI.QUERY.TYPE] = sType;
                data[ReportAPI.QUERY.DATA] = sReport;
                var sReportURL = (sHostName? sHostName : "http://" + SITEHOST) + ReportAPI.ENDPOINT;
                web.loadResource(sReportURL, true, data);
            };
            
            /**
             * getHost()
             *
             * @return {string}
             */
            web.getHost = function()
            {
                return ("http://" + (window? window.location.host : SITEHOST));
            };
            
            /**
             * getHostURL()
             *
             * @return {string|null}
             */
            web.getHostURL = function()
            {
                return (window? window.location.href : null);
            };
            
            /**
             * getHostProtocol()
             *
             * @return {string}
             */
            web.getHostProtocol = function()
            {
                return (window? window.location.protocol : "file:");
            };
            
            /**
             * getUserAgent()
             *
             * @return {string}
             */
            web.getUserAgent = function()
            {
                return (window? window.navigator.userAgent : "");
            };
            
            /**
             * alertUser(sMessage)
             *
             * @param {string} sMessage
             */
            web.alertUser = function(sMessage)
            {
                if (window) window.alert(sMessage); else web.log(sMessage);
            };
            
            /**
             * confirmUser(sPrompt)
             *
             * @param {string} sPrompt
             * @returns {boolean} true if the user clicked OK, false if Cancel/Close
             */
            web.confirmUser = function(sPrompt)
            {
                var fResponse = false;
                if (window) {
                    fResponse = window.confirm(sPrompt);
                }
                return fResponse;
            };
            
            /**
             * promptUser()
             *
             * @param {string} sPrompt
             * @param {string} [sDefault]
             * @returns {string|null}
             */
            web.promptUser = function(sPrompt, sDefault)
            {
                var sResponse = null;
                if (window) {
                    sResponse = window.prompt(sPrompt, sDefault === undefined? "" : sDefault);
                }
                return sResponse;
            };
            
            /**
             * fLocalStorage
             *
             * true if localStorage support exists, is enabled, and works; "falsey" otherwise
             *
             * @type {boolean|null}
             */
            web.fLocalStorage = null;
            
            /**
             * TODO: Is there any way to get the Closure Compiler to stop inlining this string?  This
             * isn't cutting it.
             *
             * @const {string}
             */
            web.sLocalStorageTest = "PCjs.localStorage";
            
            /**
             * hasLocalStorage
             *
             * true if localStorage support exists, is enabled, and works; false otherwise
             *
             * @return {boolean}
             */
            web.hasLocalStorage = function() {
                if (web.fLocalStorage == null) {
                    var f = false;
                    if (window) {
                        try {
                            window.localStorage.setItem(web.sLocalStorageTest, web.sLocalStorageTest);
                            f = (window.localStorage.getItem(web.sLocalStorageTest) == web.sLocalStorageTest);
                            window.localStorage.removeItem(web.sLocalStorageTest);
                        } catch(e) {
                            web.logLocalStorageError(e);
                            f = false;
                        }
                    }
                    web.fLocalStorage = f;
                }
                return web.fLocalStorage;
            };
            
            /**
             * logLocalStorageError(e)
             *
             * @param {Error} e is an exception
             */
            web.logLocalStorageError = function(e)
            {
                web.log(e.message, "localStorage error");
            };
            
            /**
             * getLocalStorageItem(sKey)
             *
             * Returns the requested key value, or null if the key does not exist, or undefined if localStorage is not available
             *
             * @param {string} sKey
             * @return {string|null|undefined} sValue
             */
            web.getLocalStorageItem = function(sKey)
            {
                var sValue;
                if (window) {
                    try {
                        sValue = window.localStorage.getItem(sKey);
                    } catch(e) {
                        web.logLocalStorageError(e);
                    }
                }
                return sValue;
            };
            
            /**
             * setLocalStorageItem(sKey, sValue)
             *
             * @param {string} sKey
             * @param {string} sValue
             * @return {boolean} true if localStorage is available, false if not
             */
            web.setLocalStorageItem = function(sKey, sValue)
            {
                try {
                    window.localStorage.setItem(sKey, sValue);
                    return true;
                } catch(e) {
                    web.logLocalStorageError(e);
                }
                return false;
            };
            
            /**
             * removeLocalStorageItem(sKey)
             *
             * @param {string} sKey
             */
            web.removeLocalStorageItem = function(sKey)
            {
                try {
                    window.localStorage.removeItem(sKey);
                } catch(e) {
                    web.logLocalStorageError(e);
                }
            };
            
            /**
             * getLocalStorageKeys()
             *
             * @return {Array}
             */
            web.getLocalStorageKeys = function()
            {
                var a = [];
                try {
                    for (var i = 0, c = window.localStorage.length; i < c; i++) {
                        a.push(window.localStorage.key(i));
                    }
                } catch(e) {
                    web.logLocalStorageError(e);
                }
                return a;
            };
            
            /**
             * reloadPage()
             */
            web.reloadPage = function()
            {
                if (window) window.location.reload();
            };
            
            /**
             * isUserAgent(s)
             *
             * Check the browser's user-agent string for the given substring; "iOS" and "MSIE" are special values you can
             * use that will match any iOS or MSIE browser, respectively (even IE11, in the case of "MSIE").
             *
             * 2013-11-06: In a questionable move, MSFT changed the user-agent reported by IE11 on Windows 8.1, eliminating
             * the "MSIE" string (which MSDN calls a "version token"; see http://msdn.microsoft.com/library/ms537503.aspx);
             * they say "public websites should rely on feature detection, rather than browser detection, in order to design
             * their sites for browsers that don't support the features used by the website." So, in IE11, we get a user-agent
             * that tries to fool apps into thinking the browser is more like WebKit or Gecko:
             *
             *      Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
             *
             * That's a nice idea, but in the meantime, they hosed the XSL transform code in embed.js, which contained
             * some very critical browser-specific code; turning on IE's "Compatibility Mode" didn't help either, because
             * that's a sledgehammer solution which restores the old user-agent string but also disables other features like
             * HTML5 canvas support. As an interim solution, I'm treating any "MSIE" check as a check for either "MSIE" or
             * "Trident".
             *
             * UPDATE: I've since found ways to make the code in embed.js more browser-agnostic, so for now, there's isn't
             * any code that cares about "MSIE", but I've left the change in place, because I wouldn't be surprised if I'll
             * need more IE-specific code in the future, perhaps for things like copy/paste functionality, or mouse capture.
             *
             * @param {string} s is a substring to search for in the user-agent; as noted above, "iOS" and "MSIE" are special values
             * @return {boolean} is true if the string was found, false if not
             */
            web.isUserAgent = function(s)
            {
                if (window) {
                    var userAgent = web.getUserAgent();
                    /*
                     * Here's one case where we have to be careful with Component, because when isUserAgent() is called by
                     * the init code below, component.js hasn't been loaded yet.  The simple solution for now is to remove the call.
                     *
                     *      web.log("agent: " + userAgent);
                     *
                     * And yes, it would be pointless to use the conditional (?) operator below, if not for the Google Closure
                     * Compiler (v20130823) failing to detect the entire expression as a boolean.
                     */
                    return (s == "iOS" && userAgent.match(/(iPod|iPhone|iPad)/) && userAgent.match(/AppleWebKit/) || s == "MSIE" && userAgent.match(/(MSIE|Trident)/) || (userAgent.indexOf(s) >= 0))? true : false;
                }
                return false;
            };
            
            /**
             * isMobile()
             *
             * Check the browser's user-agent string for the substring "Mobi", as per Mozilla recommendation:
             *
             *      https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent
             *
             * @return {boolean} is true if the browser appears to be a mobile (ie, non-desktop) web browser, false if not
             */
            web.isMobile = function()
            {
                return web.isUserAgent("Mobi");
            };
            
            /**
             * getURLParameters(sParms)
             *
             * @param {string} [sParms] containing the parameter portion of a URL (ie, after the '?')
             * @return {Object} containing properties for each parameter found
             */
            web.getURLParameters = function(sParms)
            {
                var aParms = {};
                if (window) {       // an alternative to "if (typeof module === 'undefined')" if require("defines") has been invoked
                    if (!sParms) {
                        /*
                         * Note that window.location.href returns the entire URL, whereas window.location.search
                         * returns only the parameters, if any (starting with the '?', which we skip over with a substr() call).
                         */
                        sParms = window.location.search.substr(1);
                    }
                    var match;
                    var pl = /\+/g;     // RegExp for replacing addition symbol with a space
                    var search = /([^&=]+)=?([^&]*)/g;
                    var decode = function(s) { return decodeURIComponent(s.replace(pl, " ")); };
            
                    while ((match = search.exec(sParms))) {
                        aParms[decode(match[1])] = decode(match[2]);
                    }
                }
                return aParms;
            };
            
            /**
             * onCountRepeat(n, fn, fnComplete, msDelay)
             *
             * Call fn() n times with an msDelay millisecond delay between calls, then
             * call fnComplete() when the count has been exhausted OR fn() returns false.
             *
             * @param {number} n
             * @param {function()} fn
             * @param {function()} fnComplete
             * @param {number} [msDelay]
             */
            web.onCountRepeat = function(n, fn, fnComplete, msDelay)
            {
                var fnRepeat = function doCountRepeat() {
                    n -= 1;
                    if (n >= 0) {
                        if (!fn()) n = 0;
                    }
                    if (n > 0) {
                        setTimeout(fnRepeat, msDelay || 0);
                        return;
                    }
                    fnComplete();
                };
                fnRepeat();
            };
            
            /**
             * onClickRepeat(e, msDelay, msRepeat, fn)
             *
             * Repeatedly call fn() with an initial msDelay, and an msRepeat delay thereafter,
             * as long as HTML control Object e has an active "down" event and fn() returns true.
             *
             * @param {Object} e
             * @param {number} msDelay
             * @param {number} msRepeat
             * @param {function(boolean)} fn is passed false on the first call, true on all repeated calls
             */
            web.onClickRepeat = function(e, msDelay, msRepeat, fn)
            {
                var ms = 0, timer = null, fIgnoreMouseEvents = false;
            
                var fnRepeat = function doClickRepeat() {
                    if (fn(ms === msRepeat)) {
                        timer = setTimeout(fnRepeat, ms);
                        ms = msRepeat;
                    }
                };
                e.onmousedown = function() {
                    // web.log("onMouseDown()");
                    if (!fIgnoreMouseEvents) {
                        if (!timer) {
                            ms = msDelay;
                            fnRepeat();
                        }
                    }
                };
                e.ontouchstart = function() {
                    // web.log("onTouchStart()");
                    if (!timer) {
                        ms = msDelay;
                        fnRepeat();
                    }
                };
                e.onmouseup = e.onmouseout = function() {
                    // web.log("onMouseUp()/onMouseOut()");
                    if (timer) {
                        clearTimeout(timer);
                        timer = null;
                    }
                };
                e.ontouchend = e.ontouchcancel = function() {
                    // web.log("onTouchEnd()/onTouchCancel()");
                    if (timer) {
                        clearTimeout(timer);
                        timer = null;
                    }
                    /*
                     * Devices that generate ontouch* events ALSO generate onmouse* events,
                     * and generally do so immediately after all the touch events are complete,
                     * so unless we want double the action, we need to ignore mouse events.
                     */
                    fIgnoreMouseEvents = true;
                };
            };
            
            web.aPageEventHandlers = {
                'init': [],         // list of window 'onload' handlers
                'show': [],         // list of window 'onpageshow' handlers
                'exit': []          // list of window 'onunload' handlers (although we prefer to use 'onbeforeunload' if possible)
            };
            
            web.fPageReady = false; // set once the browser's first page initialization has occurred
            web.fPageEventsEnabled = true;
            
            /**
             * onPageEvent(sName, fn)
             *
             * @param {string} sFunc
             * @param {function()} fn
             *
             * Use this instead of setting window['onunload'], window['onunload'], etc.
             * Allows multiple JavaScript modules to define a handler for the same event.
             *
             * Moreover, it's risky to refer to obscure event handlers with "dot" names, because
             * the Closure Compiler may erroneously replace them (eg, window.onpageshow is a good example).
             */
            web.onPageEvent = function(sFunc, fn)
            {
                if (window) {
                    var fnPrev = window[sFunc];
                    if (typeof fnPrev !== 'function') {
                        window[sFunc] = fn;
                    } else {
                        /*
                         * TODO: Determine whether there's any value in receiving/sending the Event object that the
                         * browser provides when it generates the original event.
                         */
                        window[sFunc] = function onWindowEvent() {
                            if (fnPrev) fnPrev();
                            fn();
                        };
                    }
                }
            };
            
            /**
             * onInit(fn)
             *
             * @param {function()} fn
             *
             * Use this instead of setting window.onload.  Allows multiple JavaScript modules to define their own 'onload' event handler.
             */
            web.onInit = function(fn)
            {
                web.aPageEventHandlers['init'].push(fn);
            };
            
            /**
             * onShow(fn)
             *
             * @param {function()} fn
             *
             * Use this instead of setting window.onpageshow.  Allows multiple JavaScript modules to define their own 'onpageshow' event handler.
             */
            web.onShow = function(fn)
            {
                web.aPageEventHandlers['show'].push(fn);
            };
            
            /**
             * onExit(fn)
             *
             * @param {function()} fn
             *
             * Use this instead of setting window.onunload.  Allows multiple JavaScript modules to define their own 'onunload' event handler.
             */
            web.onExit = function(fn)
            {
                web.aPageEventHandlers['exit'].push(fn);
            };
            
            /**
             * doPageEvent(afn)
             *
             * @param {Array.<function()>} afn
             */
            web.doPageEvent = function(afn)
            {
                if (web.fPageEventsEnabled) {
                    try {
                        for (var i = 0; i < afn.length; i++) {
                            afn[i]();
                        }
                    } catch(e) {
                        web.notice("An unexpected exception occurred:\n\n" + e.message + "\n\nPlease send this information to support@pcjs.org. Thanks.");
                    }
                }
            };
            
            /**
             * enablePageEvents(fEnable)
             *
             * @param {boolean} fEnable is true to enable page events, false to disable (they're enabled by default)
             */
            web.enablePageEvents = function(fEnable)
            {
                if (!web.fPageEventsEnabled && fEnable) {
                    web.fPageEventsEnabled = true;
                    if (web.fPageReady) web.sendPageEvent('init');
                    return;
                }
                web.fPageEventsEnabled = fEnable;
            };
            
            /**
             * sendPageEvent(sEvent)
             *
             * This allows us to manually trigger page events.
             *
             * @param {string} sEvent (one of 'init', 'show' or 'exit')
             */
            web.sendPageEvent = function(sEvent)
            {
                if (web.aPageEventHandlers[sEvent]) {
                    web.doPageEvent(web.aPageEventHandlers[sEvent]);
                }
            };
            
            web.onPageEvent('onload', function onPageLoad() { web.fPageReady = true; web.doPageEvent(web.aPageEventHandlers['init']); });
            web.onPageEvent('onpageshow', function onPageShow() { web.doPageEvent(web.aPageEventHandlers['show']); });
            web.onPageEvent(web.isUserAgent("Opera") || web.isUserAgent("iOS")? 'onunload' : 'onbeforeunload', function onPageUnload() { web.doPageEvent(web.aPageEventHandlers['exit']); });
            
            if (typeof module !== 'undefined') module.exports = web;
            
    • versions
      • pcjs
        • 1.18.3
          • common.css
            @CHARSET "UTF-8";
            /**
                @author Jeff Parsons (@jeffpar)
                @website http://www.pcjs.org/
                @created 2013-05-05
                @modified 2014-02-23
                @license http://www.gnu.org/licenses/gpl.html
             */
            body {
                margin: 0;
                background: #202020;
            }
            h1, h2 {
                margin-top: 0;
                color: #cccccc;
            }
            h1, h2, h3, h4 {
                word-wrap: break-word;
            }
            
            h4 a {
                color: #cccccc !important;
            }
            p {
                line-height: 1.5em;
            }
            img {
                max-width: 100%;
            }
            a img {
                vertical-align: bottom;
            }
            pre, code {
                color: #000000;
                background-color: #cccccc;
                font-family: Monaco, Consolas, "Lucida Console", monospace;
                font-size: 12px;
            }
            pre {
                margin: 1em 2em;
                padding: 1em;
                border-radius: 5px;
                overflow: auto;
            }
            code {
                padding: 1px;
            }
            pre a, code a {
                color: #006400 !important;
            }
            .common {
                width: 100%;
                margin: 0 auto;
                color: #cccccc;
            }
            .common a {
            
                color: #7fc07f;
                text-decoration: none;
            }
            .common hr {
                border-color: #808080;
            }
            .common a:hover {
                text-decoration: underline;
            }
            .common, .machine {
                font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
                font-size: 15px;
            }
            .machine {
                margin: 15px;
                overflow: hidden;
            }
            .c1pjs {
                overflow: visible;
            }
            .machine-placeholder {
                text-align: center;
                font-weight: bold;
            }
            .common-top {
                background: #202020;
                font-size: small;
            }
            .common-top-left {
                float: left;
                width: 60%;
            }
            .common-top-left ul {
                line-height: 1.5em;
                list-style-type: none;
                margin: 0;
                padding: 1em 1em 1em 9px;
                overflow: hidden;
            }
            .common-top-left ul li {
                display: block;
                float: left;
            }
            .common-top-left ul li a {
                border-right: 1px solid #6f6f6f;
                padding: 2px 6px 2px 6px;
            }
            .common-top-left ul li:last-child a {
                border-right: none;
            }
            .common-top-right {
                float: right;
                width: 40%;
            }
            .common-top-right p {
                float: right;
                margin: 0;
                padding: 1em;
            }
            .common-middle {
                clear: both;
                padding: 1px 1em 1px 1em;
                background: #404040;
            }
            .common-sidebar {
                float: left;
                font-size: small;
                width: 140px;
                padding-bottom: 20px;
                overflow: hidden;
                white-space: nowrap;
                word-wrap: break-word;
            }
            .common-list {
                list-style-type: none;
                margin-top: 0;
                margin-bottom: 0;
                padding-left: 0;
            }
            .common-list li {
            
                padding-bottom: 7px;
            }
            .common-list-data {
                list-style-type: none;
                margin-top: 0;
                margin-bottom: 0;
                padding-left: 0;
            }
            .common-list-data li {
                line-height: 1.5em;
            }
            .common-list-data-items, .common-list-data-subitems {
                font-size: x-small;
                list-style-type: none;
                margin-top: 0;
                margin-bottom: 0;
                padding-left: 2em;
            }
            .common-list-data-items li, .common-list-data-subitems li {
                padding-bottom: 0;
            }
            .common-main {
                margin-left: 150px;
            
            }
            .common-image-gallery {
                margin: 0 auto;
                text-align: center;
            }
            .common-image-gallery:after {
                content: '';
                display: block;
            }
            .common-image-frame {
                display: inline-block;
                margin: 8px;
                text-align: center;
            }
            .common-image-link {
                padding: 5px;
                border: 1px solid black;
                border-radius: 5px;
                background-color: #FAEBD7;
            }
            .common-image-label {
                font-size: x-small;
            }
            .common-bottom {
                clear: both;
                padding-top: 1em;
            }
            .common-bottom:after {
                content: '';
                display: block;
                clear: both;
            }
            .common-reference {
                float: left;
                font-size: x-small;
            }
            .common-reference a {
                text-decoration: none;
            }
            .common-copyright {
                float: right;
                font-size: x-small;
            }
            .common-copyright a {
                text-decoration: none;
            }
            .md-list {
            }
            .md-list li {
                line-height: 1.5em;
                margin-bottom: 1em;
            }
            .md-list li p {
                padding-left: 2em;
            }
            .md-list-compact {
            }
            .md-list-compact li {
                margin-bottom: 0;
            }
            .md-list-none {
                list-style-type: none;
                padding-left: 2em;
            }
            .md-list-none li {
                margin-bottom: 0;
            }
            @media screen and (max-width: 900px) {
            
                .common-sidebar {
                    width: 100%;
                    white-space: normal;
                }
                .common-list {
                    padding-left: 0;
                }
                .common-list-data {
                    padding-left: 0;
                }
                .common-sidebar h4, .common-list li, .common-list-data li, .common-list-data-items li {
                    width: 130px;
                    float: left;
                    overflow: hidden;
                    vertical-align: top;
                    padding-right: 1em;
                    margin-top: 0;
                }
                .common-list-data-subitems {
                    display: none;
                }
                .common-main {
                    clear: both;
                    margin-left: 0;
                    padding-left: 0;
                    padding-right: 0;
                }
                .md-list-none {
                    padding-left: 1em;
                }
            }
            
          • common.xsl
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
            <!DOCTYPE xsl:stylesheet [
            	<!ENTITY nbsp "&#160;"> <!ENTITY ne "&#8800;"> <!ENTITY le "&#8804;"> <!ENTITY ge "&#8805;">
            	<!ENTITY times "&#215;"> <!ENTITY sdot "&#8901;"> <!ENTITY divide "&#247;">
            	<!ENTITY copy "&#169;"> <!ENTITY Sigma "&#931;"> <!ENTITY sigma "&#963;"> <!ENTITY sum "&#8721;"> <!ENTITY lbrace "&#123;">
            ]>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            	<xsl:template name="commonStyles">
            		<meta charset="utf-8"/>
            		<link rel="shortcut icon" href="/versions/images/current/favicon.ico" type="image/x-icon"/>
            		<link rel="stylesheet" type="text/css" href="/versions/pcjs/1.18.3/common.css"/>
            	</xsl:template>
            
            	<xsl:template name="commonTop">
            		<div class="common-top">
            			<div class="common-top-left">
            				<ul>
            					<li><a href="/">Home</a></li>
            					<li><a href="/apps/pc/">Apps</a></li>
            					<li><a href="/disks/pc/">Disks</a></li>
            					<li><a href="/devices/pc/machine/">Machines</a></li>
            					<li><a href="/docs/">Docs</a></li>
            					<li><a href="/pubs/">Pubs</a></li>
            					<li><a href="/blog/">Blog</a></li>
            					<li><a href="/docs/about/">About</a></li>
            				</ul>
            			</div>
            			<div class="common-top-right">
            				<p>Powered by <a href="http://nodejs.org" target="_blank">Node.js</a> and <a href="http://aws.amazon.com/elasticbeanstalk/" target="_blank">AWS</a> | <a href="http://github.com/jeffpar/pcjs" target="_blank">GitHub</a></p>
            			</div>
            		</div>
            	</xsl:template>
            
            	<xsl:template name="commonBottom">
            		<div class="common-bottom">
            			<p class="common-reference"></p>
            			<p class="common-copyright">
            				<span class="common-copyright"><a href="http://www.pcjs.org/">pcjs.org</a> website © 2012-2015 by <a href="http://twitter.com/jeffpar">@jeffpar</a></span><br/>
            				<span class="common-copyright">PCjs and C1Pjs released under <a href="http://gnu.org/licenses/gpl.html">GPL version 3 or later</a></span>
            			</p>
            		</div>
            	</xsl:template>
            
            </xsl:stylesheet>
            
          • components.css
            @CHARSET "UTF-8";
            
            
            *:not(input,textarea) {
                -webkit-user-select: none;
            }
            .pcjs-embed {
            }
            .pcjs-embed:after {
                clear:both;
            }
            .pcjs-name, .pcjs-menu {
                clear: both;
                font-weight: bold;
                padding-bottom: 4px;
            }
            .pcjs-menu {
                float: left;
            }
            .pcjs-canvas {
                width: 100%;
                height: auto;
            }
            .pcjs-container {
                color: #000000;
                position: relative;
            }
            .pcjs-label {
                font-size: small;
                line-height: 19px;
                vertical-align: middle;
                float: left;
                font-family: "Lucida Console", monospace;
            }
            .pcjs-control textarea {
                font-family: Monaco, monospace;
                font-size: x-small;
            }
            .pcjs-fieldset {
                border: none;
                margin: 0;
                padding: 0;
            }
            .pcjs-flag {
                font-family: "Lucida Console", monospace;
                font-size: small;
                text-align: center;
                line-height: 19px;
                vertical-align: middle;
            }
            .pcjs-register {
                font-family: "Lucida Console", monospace;
                font-size: small;
                text-align: center;
                line-height: 19px;
                vertical-align: middle;
                border: 1px solid black;
            }
            .pcjs-switches {
                float: left;
            }
            .pcjs-bitBucket {
                float: left;
                width: 19px;
                height: 38px;
            }
            .pcjs-bitCell {
                float: left;
                width: 19px;
                height: 19px;
                margin-right: -1px;
                margin-bottom: -1px;
                border: 1px solid black;
                text-align: center;
                line-height: 19px;
            }
            .pcjs-bitCellLeft {
                border-left: 1px solid black;
            }
            .pcjs-bitLabel {
                font-size: xx-small;
                text-align: center;
            }
            .pcjs-description, .pcjs-status {
                font-size: x-small;
                line-height: 2em;
            }
            .pcjs-key {
                border: 1px solid black;
                font-size: x-small;
                text-align: center;
                position: absolute;
                height: 34px;
                line-height: 34px;
                background-color: #ffffff;
            }
            .pcjs-led {
                float: left;
                width: 8px;
                height: 8px;
                margin: 4px;
                border: 1px solid black;
                text-align: center;
                line-height: 19px;
                background-color: #000000;
            }
            .pcjs-video-object {
                clear: both;
                height: auto;
                position: relative;
                line-height: 0;
            }
            .pcjs-video-object textarea {
                position: absolute;
                left: 0;
                top: 0;
                width: 100%;
                height: 100%;
                opacity: 0;
                border: 0;
                padding: 0;
                line-height: 0;
            }
            .pcjs-reference {
                float: left;
                font-size: x-small;
            }
            .pcjs-reference a {
                text-decoration: none;
            }
            .pcjs-copyright {
                float: right;
                font-size: x-small;
            }
            .pcjs-copyright a {
                text-decoration: none;
            }
            
            @media screen and (max-width: 900px) {
                .pcjs-textarea {
                    width: 100% !important;
                }
                .pcjs-registers {
                    width: 100% !important;
                }
            }
            
          • components.xsl
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
            <!DOCTYPE xsl:stylesheet [
            ]>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            	<xsl:param name="rootDir" select="''"/>
            	<xsl:param name="generator" select="'client'"/>
            
            	<xsl:variable name="MACHINECLASS">pc</xsl:variable>
            	<xsl:variable name="APPCLASS">pcjs</xsl:variable>
            	<xsl:variable name="APPVERSION">1.18.3</xsl:variable>
            	<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
            
            	<xsl:template name="componentStyles">
            		<link rel="stylesheet" type="text/css" href="/versions/{$APPCLASS}/{$APPVERSION}/components.css"/>
            	</xsl:template>
            
            	<xsl:template name="componentScripts">
            		<xsl:param name="component"/>
            		<script type="text/javascript" src="/versions/{$APPCLASS}/{$APPVERSION}/{$component}.js"> </script>
            	</xsl:template>
            
            	<xsl:template name="componentIncludes">
            		<xsl:param name="component"/>
            		<xsl:call-template name="componentScripts"><xsl:with-param name="component" select="$component"/></xsl:call-template>
            	</xsl:template>
            
            	<xsl:template name="machine">
            		<xsl:param name="href">/devices/pc/machine/5150/mda/64kb/machine.xml</xsl:param>
            		<xsl:param name="state" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="$href"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/machine">
            			<xsl:with-param name="machineState" select="$state"/>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="machine[@ref]">
            		<xsl:param name="machineState" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/machine">
            			<xsl:with-param name="machine" select="@id"/>
            			<xsl:with-param name="machineState">
            				<xsl:choose>
            					<xsl:when test="$machineState != ''"><xsl:value-of select="$machineState"/></xsl:when>
            					<xsl:otherwise><xsl:value-of select="@state"/></xsl:otherwise>
            				</xsl:choose>
            			</xsl:with-param>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="machine[not(@ref)]">
            		<xsl:param name="machine"><xsl:value-of select="@id"/></xsl:param>
            		<xsl:param name="machineState" select="''"/>
            		<xsl:variable name="machineStyle">
            			<xsl:if test="@float">float:<xsl:value-of select="@float"/></xsl:if>
            		</xsl:variable>
            		<div id="{$machine}" class="machine {@class}js" style="{$machineStyle}">
            			<xsl:call-template name="component">
            				<xsl:with-param name="machine" select="$machine"/>
            				<xsl:with-param name="machineState">
            					<xsl:choose>
            						<xsl:when test="$machineState != ''"><xsl:value-of select="$machineState"/></xsl:when>
            						<xsl:otherwise><xsl:value-of select="@state"/></xsl:otherwise>
            					</xsl:choose>
            				</xsl:with-param>
            				<xsl:with-param name="component" select="'machine'"/>
            				<xsl:with-param name="class"><xsl:value-of select="@class"/>js</xsl:with-param>
            				<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
            				<xsl:with-param name="url"><xsl:value-of select="@url"/></xsl:with-param>
            			</xsl:call-template>
            		</div>
            	</xsl:template>
            
            	<xsl:template match="component[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/component">
            			<xsl:with-param name="machine" select="$machine"/>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="component[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class" select="@class"/>
            			<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template name="component">
            		<xsl:param name="machine" select="''"/>
            		<xsl:param name="machineState" select="''"/>
            		<xsl:param name="component" select="name(.)"/>
            		<xsl:param name="class" select="''"/>
            		<xsl:param name="parms" select="''"/>
            		<xsl:param name="url" select="''"/>
            		<xsl:variable name="id">
            			<xsl:choose>
            				<xsl:when test="$component = 'machine'"><xsl:value-of select="$machine"/>.machine</xsl:when>
            				<xsl:when test="$machine != '' and @id"><xsl:value-of select="$machine"/>.<xsl:value-of select="@id"/></xsl:when>
            				<xsl:when test="$machine != ''"><xsl:value-of select="$machine"/>.<xsl:value-of select="$component"/></xsl:when>
            				<xsl:when test="@id"><xsl:value-of select="@id"/></xsl:when>
            				<xsl:otherwise><xsl:value-of select="$component"/></xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="componentURL">
            			<xsl:choose>
            				<xsl:when test="$component = 'machine'">url:'<xsl:value-of select="$url"/>'</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="name">
            			<xsl:choose>
            				<xsl:when test="name"><xsl:value-of select="name"/></xsl:when>
            				<xsl:when test="@name"><xsl:value-of select="@name"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="comment">
            			<xsl:choose>
            				<xsl:when test="@comment">,comment:'<xsl:value-of select="@comment"/>'</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="border">
            			<xsl:choose>
            				<xsl:when test="@border = '1'">border:1px solid black;border-radius:15px;</xsl:when>
            				<xsl:when test="@border">border:<xsl:value-of select="@border"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="left">
            			<xsl:choose>
            				<xsl:when test="@left">left:<xsl:value-of select="@left"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="top">
            			<xsl:choose>
            				<xsl:when test="@top">top:<xsl:value-of select="@top"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="width">
            			<xsl:choose>
            				<xsl:when test="@width">
            					<xsl:choose>
            						<xsl:when test="$left != '' or $top != ''">width:<xsl:value-of select="@width"/>;</xsl:when>
            						<xsl:otherwise>width:auto;max-width:<xsl:value-of select="@width"/>;</xsl:otherwise>
            					</xsl:choose>
            				</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="height">
            			<xsl:choose>
            				<xsl:when test="@height">height:<xsl:value-of select="@height"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="padding">
            			<xsl:choose>
            				<xsl:when test="@padding">padding:<xsl:value-of select="@padding"/>;</xsl:when>
            				<xsl:otherwise>
            					<xsl:if test="@padtop">padding-top:<xsl:value-of select="@padtop"/>;</xsl:if>
            					<xsl:if test="@padright">padding-right:<xsl:value-of select="@padright"/>;</xsl:if>
            					<xsl:if test="@padbottom">padding-bottom:<xsl:value-of select="@padbottom"/>;</xsl:if>
            					<xsl:if test="@padleft">padding-left:<xsl:value-of select="@padleft"/>;</xsl:if>
            				</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="pos">
            			<xsl:choose>
            				<xsl:when test="@pos = 'left'">float:left;</xsl:when>
            				<xsl:when test="@pos = 'right'">float:right;</xsl:when>
            				<xsl:when test="@pos = 'center'">margin:0 auto;</xsl:when>
            				<xsl:when test="@pos">position:<xsl:value-of select="@pos"/>;</xsl:when>
            				<xsl:when test="$left != '' or $top != ''">position:relative;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="style">
            			<xsl:if test="$component = 'machine'">overflow:auto;width:100%;</xsl:if>
            			<xsl:if test="@background">background-color:<xsl:value-of select="@background"/>;</xsl:if>
            			<xsl:if test="@style"><xsl:value-of select="@style"/></xsl:if>
            		</xsl:variable>
            		<xsl:variable name="componentClass">
            			<xsl:value-of select="$APPCLASS"/><xsl:text>-</xsl:text><xsl:value-of select="$component"/><xsl:text> </xsl:text><xsl:value-of select="$APPCLASS"/><xsl:text>-component</xsl:text>
            		</xsl:variable>
            		<div id="{$id}" class="{$componentClass}" style="{$width}{$height}{$pos}{$left}{$top}{$padding}" data-value="{$componentURL}">
            			<xsl:if test="$component = 'machine'">
            				<xsl:apply-templates select="name" mode="machine"/>
            			</xsl:if>
            			<xsl:if test="$component != 'machine'">
            				<xsl:apply-templates select="name" mode="component"/>
            			</xsl:if>
            			<div class="{$APPCLASS}-container" style="{$border}{$style}">
            				<xsl:if test="$component = 'machine'">
            					<xsl:apply-templates select="menu" mode="machine"/>
            				</xsl:if>
            				<xsl:if test="$component != 'machine'">
            					<xsl:apply-templates select="menu" mode="component"/>
            				</xsl:if>
            				<xsl:if test="$class != '' and $component != 'machine'">
            					<div class="{$APPCLASS}-{$class}-object" data-value="id:'{$id}',name:'{$name}'{$comment}{$parms}"> </div>
            				</xsl:if>
            				<xsl:if test="control">
            					<div class="{$APPCLASS}-controls">
            						<xsl:apply-templates select="control" mode="component"/>
            					</div>
            				</xsl:if>
            				<xsl:apply-templates>
            					<xsl:with-param name="machine" select="$machine"/>
            					<xsl:with-param name="machineState" select="$machineState"/>
            				</xsl:apply-templates>
            			</div>
            			<xsl:if test="$component = 'machine'">
            				<xsl:choose>
            					<xsl:when test="$url != ''"><div class="{$APPCLASS}-reference">[<a href="{$url}">XML</a>]</div></xsl:when>
            					<xsl:otherwise/>
            				</xsl:choose>
            				<div class="{$APPCLASS}-copyright">
            					<a href="http://{$SITEHOST}" target="_blank">PCjs</a> v<xsl:value-of select="$APPVERSION"/> © 2012-2015 by <a href="http://twitter.com/jeffpar" target="_blank">@jeffpar</a>
            				</div>
            				<div style="clear:both"> </div>
            			</xsl:if>
            		</div>
            	</xsl:template>
            
            	<xsl:template match="name" mode="machine">
            		<xsl:variable name="pos">
            			<xsl:choose>
            				<xsl:when test="@pos = 'center'">text-align:center;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<h2 style="{$pos}"><xsl:apply-templates/></h2>
            	</xsl:template>
            
            	<xsl:template match="name" mode="component">
            		<div class="{$APPCLASS}-name"><xsl:apply-templates/></div>
            	</xsl:template>
            
            	<xsl:template match="menu" mode="component">
            		<xsl:apply-templates mode="component"/>
            	</xsl:template>
            
            	<xsl:template match="title" mode="component">
            		<div class="{$APPCLASS}-menu"><xsl:apply-templates/></div>
            	</xsl:template>
            
            	<xsl:template match="control" mode="component">
            		<xsl:variable name="type">
            			<xsl:text>type:'</xsl:text><xsl:value-of select="@type"/><xsl:text>'</xsl:text>
            		</xsl:variable>
            		<xsl:variable name="binding">
            			<xsl:text>binding:'</xsl:text><xsl:value-of select="@binding"/><xsl:text>'</xsl:text>
            		</xsl:variable>
            		<xsl:variable name="border">
            			<xsl:choose>
            				<xsl:when test="@border = '1'">border:1px solid black;</xsl:when>
            				<xsl:when test="@border">border:<xsl:value-of select="@border"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="width">
            			<xsl:choose>
            				<xsl:when test="@width">width:<xsl:value-of select="@width"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="height">
            			<xsl:choose>
            				<xsl:when test="@height">height:<xsl:value-of select="@height"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="left">
            			<xsl:choose>
            				<xsl:when test="@left">left:<xsl:value-of select="@left"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="top">
            			<xsl:choose>
            				<xsl:when test="@top">top:<xsl:value-of select="@top"/>;</xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="padding">
            			<xsl:choose>
            				<xsl:when test="@padding">padding:<xsl:value-of select="@padding"/>;</xsl:when>
            				<xsl:otherwise>
            					<xsl:if test="@padtop">padding-top:<xsl:value-of select="@padtop"/>;</xsl:if>
            					<xsl:if test="@padright">padding-right:<xsl:value-of select="@padright"/>;</xsl:if>
            					<xsl:if test="@padbottom">padding-bottom:<xsl:value-of select="@padbottom"/>;</xsl:if>
            					<xsl:if test="@padleft">padding-left:<xsl:value-of select="@padleft"/>;</xsl:if>
            				</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="pos">
            			<xsl:choose>
            				<xsl:when test="@pos = 'left'">float:left;</xsl:when>
            				<xsl:when test="@pos = 'right'">float:right;</xsl:when>
            				<xsl:when test="@pos = 'center'">margin:0 auto;</xsl:when>
            				<xsl:when test="@pos">position:<xsl:value-of select="@pos"/>;</xsl:when>
            				<xsl:when test="$left != '' or $top != ''">position:relative;</xsl:when>
            				<xsl:otherwise><xsl:if test="$left = ''">float:left;</xsl:if></xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="style">
            			<xsl:choose>
            				<xsl:when test="@style"><xsl:value-of select="@style"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="containerClass">
            			<xsl:if test="@type = 'container' and @class"><xsl:text> </xsl:text><xsl:value-of select="@class"/></xsl:if>
            		</xsl:variable>
            		<xsl:variable name="containerStyle">
            			<xsl:value-of select="$pos"/><xsl:value-of select="$left"/><xsl:value-of select="$top"/><xsl:value-of select="$padding"/>
            			<xsl:choose>
            				<xsl:when test="@type = 'container'"><xsl:value-of select="$border"/><xsl:value-of select="$width"/><xsl:value-of select="$height"/><xsl:value-of select="$style"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<div class="{$APPCLASS}-control{$containerClass}" style="{$containerStyle}">
            			<xsl:variable name="fontsize">
            				<xsl:choose>
            					<xsl:when test="@size = 'large' or @size = 'small'">font-size:<xsl:value-of select="@size"/>;</xsl:when>
            					<xsl:otherwise/>
            				</xsl:choose>
            			</xsl:variable>
            			<xsl:variable name="subClass">
            				<xsl:if test="@label"><xsl:text> </xsl:text><xsl:value-of select="$APPCLASS"/><xsl:text>-label</xsl:text></xsl:if>
            			</xsl:variable>
            			<xsl:variable name="labelWidth">
            				<xsl:if test="@labelwidth">width:<xsl:value-of select="@labelwidth"/>;</xsl:if>
            			</xsl:variable>
            			<xsl:variable name="labelStyle">
            				<xsl:choose>
            					<xsl:when test="@labelstyle"><xsl:value-of select="@labelstyle"/></xsl:when>
            					<xsl:otherwise>text-align:right;</xsl:otherwise>
            				</xsl:choose>
            			</xsl:variable>
            			<xsl:if test="@label">
            				<xsl:if test="not(@labelpos) or @labelpos = 'left'">
            					<div class="{$APPCLASS}-label" style="{$labelWidth}{$labelStyle}"><xsl:value-of select="@label"/></div>
            				</xsl:if>
            			</xsl:if>
            			<xsl:choose>
            				<xsl:when test="@type = 'canvas'">
            					<canvas class="{$APPCLASS}-binding {$APPCLASS}-canvas" width="{@width}" height="{@height}" style="-webkit-user-select:none;{$border}{$fontsize}{$style}" data-value="{$type},{$binding}"><xsl:apply-templates/></canvas>
            				</xsl:when>
            				<xsl:when test="@type = 'button'">
            					<button class="{$APPCLASS}-binding" style="-webkit-user-select:none;{$border}{$width}{$height}{$fontsize}{$style}" data-value="{$type},{$binding}"><xsl:apply-templates/></button>
            				</xsl:when>
            				<xsl:when test="@type = 'list'">
            					<select class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$fontsize}{$style}" data-value="{$type},{$binding}">
            						<xsl:apply-templates select="disk|app|manifest" mode="component"/>
            					</select>
            				</xsl:when>
            				<xsl:when test="@type = 'text'">
            					<input class="{$APPCLASS}-binding" type="text" style="{$border}{$width}{$height}{$style}" data-value="{$type},{$binding}" value="{.}" autocapitalize="off" autocorrect="off"/>
            				</xsl:when>
            				<xsl:when test="@type = 'submit'">
            					<input class="{$APPCLASS}-binding" type="submit" style="{$border}{$fontsize}{$style}" data-value="{$type},{$binding}" value="{.}"/>
            				</xsl:when>
            				<xsl:when test="@type = 'textarea'">
            					<textarea class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$style}" data-value="{$type},{$binding}" readonly="readonly"> </textarea>
            				</xsl:when>
            				<xsl:when test="@type = 'heading'">
            					<div><xsl:value-of select="."/></div>
            				</xsl:when>
            				<xsl:when test="@type = 'file'">
            					<form class="{$APPCLASS}-binding" data-value="{$type},{$binding}">
            						<fieldset class="{$APPCLASS}-fieldset">
            							<input type="file"/>
            							<input type="submit" value="Mount" disabled="true"/>
            						</fieldset>
            					</form>
            				</xsl:when>
            				<xsl:when test="@type = 'led'">
            					<div class="{$APPCLASS}-binding {$APPCLASS}-{@type}" data-value="{$type},{$binding}"><xsl:value-of select="."/></div>
            				</xsl:when>
            				<xsl:when test="@type = 'separator'">
            					<hr/>
            				</xsl:when>
            				<xsl:when test="@type = 'container'">
            					<xsl:apply-templates mode="component"/>
            				</xsl:when>
            				<xsl:when test="not(@type)">
            					<div style="clear:both"> </div>
            				</xsl:when>
            				<xsl:otherwise>
            					<div class="{$APPCLASS}-binding{$subClass} {$APPCLASS}-{@type}" style="-webkit-user-select:none;{$border}{$width}{$height}{$fontsize}{$style}" data-value="{$type},{$binding}"><xsl:apply-templates/></div>
            				</xsl:otherwise>
            			</xsl:choose>
            			<xsl:if test="@label">
            				<xsl:if test="@labelpos = 'right'">
            					<div class="{$APPCLASS}-label" style="{$labelWidth}{$labelStyle}"><xsl:value-of select="@label"/></div>
            				</xsl:if>
            				<div style="clear:both"> </div>
            			</xsl:if>
            		</div>
            	</xsl:template>
            
            	<xsl:template match="disk[@ref]" mode="component">
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/disk" mode="component"/>
            	</xsl:template>
            
            	<xsl:template match="disk[not(@ref)]" mode="component">
            		<xsl:variable name="desc">
            			<xsl:if test="@desc">
            				<xsl:text>desc:'</xsl:text><xsl:value-of select="@desc"/><xsl:text>'</xsl:text>
            				<xsl:if test="@href">
            					<xsl:text>,href:'</xsl:text><xsl:value-of select="@href"/><xsl:text>'</xsl:text>
            				</xsl:if>
            			</xsl:if>
            		</xsl:variable>
            		<option value="{@path}" data-value="{$desc}"><xsl:if test="name"><xsl:value-of select="name"/></xsl:if><xsl:if test="not(name)"><xsl:value-of select="."/></xsl:if></option>
            	</xsl:template>
            
            	<xsl:template match="app[@ref]" mode="component">
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/app" mode="component"/>
            	</xsl:template>
            
            	<xsl:template match="app[not(@ref)]" mode="component">
            		<xsl:variable name="desc">
            			<xsl:if test="@desc">
            				<xsl:text>desc:'</xsl:text><xsl:value-of select="@desc"/><xsl:text>'</xsl:text>
            				<xsl:if test="@href">
            					<xsl:text>,href:'</xsl:text><xsl:value-of select="@href"/><xsl:text>'</xsl:text>
            				</xsl:if>
            			</xsl:if>
            		</xsl:variable>
            		<xsl:variable name="path">
            			<xsl:if test="@path"><xsl:value-of select="@path"/></xsl:if>
            		</xsl:variable>
            		<xsl:variable name="files">
            			<xsl:for-each select="file"><xsl:if test="position() = 1"><xsl:value-of select="$path"/></xsl:if><xsl:value-of select="@name"/><xsl:if test="position() != last()">;</xsl:if></xsl:for-each>
            		</xsl:variable>
            		<option value="{$files}" data-value="{$desc}"><xsl:value-of select="@name"/></option>
            	</xsl:template>
            
            	<xsl:template match="manifest[@ref]" mode="component">
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/manifest" mode="component">
            			<xsl:with-param name="disk"><xsl:value-of select="@disk"/></xsl:with-param>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="manifest[not(@ref)]" mode="component">
            		<xsl:param name="disk"><xsl:value-of select="@disk"/></xsl:param>
            		<xsl:if test="$disk != ''">
            			<xsl:variable name="prefix">
            				<xsl:if test="title/@prefix"><xsl:value-of select="title/@prefix"/><xsl:text>: </xsl:text></xsl:if>
            			</xsl:variable>
            			<xsl:for-each select="disk">
            				<xsl:if test="$disk = @id or $disk = '*'">
            					<xsl:variable name="name">
            						<xsl:choose>
            							<xsl:when test="name"><xsl:value-of select="$prefix"/><xsl:value-of select="name"/></xsl:when>
            							<xsl:when test="normalize-space(./text()) != ''">
            								<xsl:value-of select="$prefix"/><xsl:value-of select="normalize-space(./text())"/>
            							</xsl:when>
            							<xsl:otherwise>
            								<xsl:value-of select="../title"/><xsl:if test="../version != ''"><xsl:text> </xsl:text><xsl:value-of select="../version"/></xsl:if>
            							</xsl:otherwise>
            						</xsl:choose>
            					</xsl:variable>
            					<xsl:variable name="link">
            						<xsl:if test="link">
            							<xsl:text>desc:'</xsl:text><xsl:value-of select="link"/><xsl:text>'</xsl:text>
            							<xsl:if test="link/@href">
            								<xsl:text>,href:'</xsl:text><xsl:value-of select="link/@href"/><xsl:text>'</xsl:text>
            							</xsl:if>
            						</xsl:if>
            					</xsl:variable>
            					<xsl:if test="@href">
            						<option value="{@href}" data-value="{$link}"><xsl:value-of select="$name"/></option>
            					</xsl:if>
            					<xsl:if test="not(@href)">
            						<xsl:variable name="dir">
            							<xsl:if test="@dir"><xsl:value-of select="@dir"/></xsl:if>
            						</xsl:variable>
            						<xsl:variable name="files">
            							<xsl:for-each select="file"><xsl:if test="position() = 1"><xsl:value-of select="$dir"/></xsl:if><xsl:value-of select="@dir"/><xsl:value-of select="."/><xsl:if test="position() != last()">;</xsl:if></xsl:for-each>
            						</xsl:variable>
            						<option value="{$files}" data-value="{$link}"><xsl:value-of select="$name"/></option>
            					</xsl:if>
            				</xsl:if>
            			</xsl:for-each>
            		</xsl:if>
            	</xsl:template>
            
            	<xsl:template match="name">
            	</xsl:template>
            
            	<xsl:template match="title">
            	</xsl:template>
            
            	<xsl:template match="control">
            	</xsl:template>
            
            	<xsl:template match="cpu[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/cpu"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="cpu[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="model">
            			<xsl:choose>
            				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
            				<xsl:otherwise>8088</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="cycles">
            			<xsl:choose>
            				<xsl:when test="@cycles"><xsl:value-of select="@cycles"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="multiplier">
            			<xsl:choose>
            				<xsl:when test="@multiplier"><xsl:value-of select="@multiplier"/></xsl:when>
            				<xsl:otherwise>1</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="autoStart">
            			<xsl:choose>
            				<xsl:when test="@autostart"><xsl:value-of select="@autostart"/></xsl:when>
            				<xsl:otherwise>null</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="csStart">
            			<xsl:choose>
            				<xsl:when test="@csstart"><xsl:value-of select="@csstart"/></xsl:when>
            				<xsl:otherwise>-1</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="csInterval">
            			<xsl:choose>
            				<xsl:when test="@csinterval"><xsl:value-of select="@csinterval"/></xsl:when>
            				<xsl:otherwise>-1</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="csStop">
            			<xsl:choose>
            				<xsl:when test="@csstop"><xsl:value-of select="@csstop"/></xsl:when>
            				<xsl:otherwise>-1</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class" select="'cpu'"/>
            			<xsl:with-param name="parms">,model:<xsl:value-of select="$model"/>,cycles:<xsl:value-of select="$cycles"/>,multiplier:<xsl:value-of select="$multiplier"/>,autoStart:<xsl:value-of select="$autoStart"/>,csStart:<xsl:value-of select="$csStart"/>,csInterval:<xsl:value-of select="$csInterval"/>,csStop:<xsl:value-of select="$csStop"/></xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="chipset[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/chipset"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="chipset[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="model">
            			<xsl:choose>
            				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
            				<xsl:otherwise>5150</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="sw1">
            			<xsl:choose>
            				<xsl:when test="@sw1"><xsl:value-of select="@sw1"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="sw2">
            			<xsl:choose>
            				<xsl:when test="@sw2"><xsl:value-of select="@sw2"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="sound">
            			<xsl:choose>
            				<xsl:when test="@sound"><xsl:value-of select="@sound"/></xsl:when>
            				<xsl:otherwise>true</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="scaletimers">
            			<xsl:choose>
            				<xsl:when test="@scaletimers"><xsl:value-of select="@scaletimers"/></xsl:when>
            				<xsl:otherwise>false</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="floppies">
            			<xsl:choose>
            				<xsl:when test="@floppies"><xsl:value-of select="@floppies"/></xsl:when>
            				<xsl:otherwise>{}</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="monitor">
            			<xsl:choose>
            				<xsl:when test="@monitor"><xsl:value-of select="@monitor"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="rtcdate">
            			<xsl:choose>
            				<xsl:when test="@rtcdate"><xsl:value-of select="@rtcdate"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">chipset</xsl:with-param>
            			<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',scaleTimers:<xsl:value-of select="$scaletimers"/>,sw1:'<xsl:value-of select="$sw1"/>',sw2:'<xsl:value-of select="$sw2"/>',sound:<xsl:value-of select="$sound"/>,floppies:<xsl:value-of select="$floppies"/>,monitor:'<xsl:value-of select="$monitor"/>',rtcDate:'<xsl:value-of select="$rtcdate"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="keyboard[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/keyboard"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="keyboard[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="model">
            			<xsl:choose>
            				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">keyboard</xsl:with-param>
            			<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="serial[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/serial"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="serial[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="adapter">
            			<xsl:choose>
            				<xsl:when test="@adapter"><xsl:value-of select="@adapter"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="binding">
            			<xsl:choose>
            				<xsl:when test="@binding"><xsl:value-of select="@binding"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">serial</xsl:with-param>
            			<xsl:with-param name="parms">,adapter:<xsl:value-of select="$adapter"/>,binding:'<xsl:value-of select="$binding"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="mouse[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/mouse"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="mouse[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="serial">
            			<xsl:choose>
            				<xsl:when test="@serial"><xsl:value-of select="@serial"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">mouse</xsl:with-param>
            			<xsl:with-param name="parms">,serial:'<xsl:value-of select="$serial"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="fdc[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/fdc">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="mount" select="@automount"/>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="fdc[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:param name="mount" select="''"/>
            		<xsl:variable name="automount">
            			<xsl:choose>
            				<xsl:when test="$mount != ''"><xsl:value-of select="$mount"/></xsl:when>
            				<xsl:otherwise><xsl:value-of select="@automount"/></xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">fdc</xsl:with-param>
            			<xsl:with-param name="parms">,autoMount:'<xsl:value-of select="$automount"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="hdc[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/hdc"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="hdc[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="drives">
            			<xsl:choose>
            				<xsl:when test="@drives"><xsl:value-of select="@drives"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="type">
            			<xsl:choose>
            				<xsl:when test="@type"><xsl:value-of select="@type"/></xsl:when>
            				<xsl:otherwise>xt</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">hdc</xsl:with-param>
            			<xsl:with-param name="parms">,drives:'<xsl:value-of select="$drives"/>',type:'<xsl:value-of select="$type"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="rom[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/rom"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="rom[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="addr">
            			<xsl:choose>
            				<xsl:when test="@addr"><xsl:value-of select="@addr"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="size">
            			<xsl:choose>
            				<xsl:when test="@size"><xsl:value-of select="@size"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="alias">
            			<xsl:choose>
            				<xsl:when test="@alias"><xsl:value-of select="@alias"/></xsl:when>
            				<xsl:otherwise>null</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="file">
            			<xsl:choose>
            				<xsl:when test="@file"><xsl:value-of select="@file"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="notify">
            			<xsl:choose>
            				<xsl:when test="@notify"><xsl:value-of select="@notify"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">rom</xsl:with-param>
            			<xsl:with-param name="parms">,addr:<xsl:value-of select="$addr"/>,size:<xsl:value-of select="$size"/>,alias:<xsl:value-of select="$alias"/>,file:'<xsl:value-of select="$file"/>',notify:'<xsl:value-of select="$notify"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="ram[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/ram"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="ram[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="addr">
            			<xsl:choose>
            				<xsl:when test="@addr"><xsl:value-of select="@addr"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="size">
            			<xsl:choose>
            				<xsl:when test="@size"><xsl:value-of select="@size"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="test">
            			<xsl:choose>
            				<xsl:when test="@test"><xsl:value-of select="@test"/></xsl:when>
            				<xsl:otherwise>true</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">ram</xsl:with-param>
            			<xsl:with-param name="parms">,addr:<xsl:value-of select="$addr"/>,size:<xsl:value-of select="$size"/>,test:<xsl:value-of select="$test"/></xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="video[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/video"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="video[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="model">
            			<xsl:choose>
            				<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="mode">
            			<xsl:choose>
            				<xsl:when test="@mode"><xsl:value-of select="@mode"/></xsl:when>
            				<xsl:otherwise>7</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="screenWidth">
            			<xsl:choose>
            				<xsl:when test="@screenwidth"><xsl:value-of select="@screenwidth"/></xsl:when>
            				<xsl:otherwise>256</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="screenHeight">
            			<xsl:choose>
            				<xsl:when test="@screenheight"><xsl:value-of select="@screenheight"/></xsl:when>
            				<xsl:otherwise>224</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="memory">
            			<xsl:choose>
            				<xsl:when test="@memory"><xsl:value-of select="@memory"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="switches">
            			<xsl:choose>
            				<xsl:when test="@switches"><xsl:value-of select="@switches"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="scale">
            			<xsl:choose>
            				<xsl:when test="@scale"><xsl:value-of select="@scale"/></xsl:when>
            				<xsl:otherwise>false</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="charCols">
            			<xsl:choose>
            				<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
            				<xsl:otherwise>80</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="charRows">
            			<xsl:choose>
            				<xsl:when test="@rows"><xsl:value-of select="@rows"/></xsl:when>
            				<xsl:otherwise>25</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="fontROM">
            			<xsl:choose>
            				<xsl:when test="@charset"><xsl:value-of select="@charset"/></xsl:when>
            				<xsl:when test="@fontrom"><xsl:value-of select="@fontrom"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="screenColor">
            			<xsl:choose>
            				<xsl:when test="@screencolor"><xsl:value-of select="@screencolor"/></xsl:when>
            				<xsl:otherwise>black</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="touchScreen">
            			<xsl:choose>
            				<xsl:when test="@touchscreen"><xsl:value-of select="@touchscreen"/></xsl:when>
            				<xsl:otherwise>false</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="autoLock">
            			<xsl:choose>
            				<xsl:when test="@autolock"><xsl:value-of select="@autolock"/></xsl:when>
            				<xsl:otherwise>false</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">video</xsl:with-param>
            			<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',screenColor:'<xsl:value-of select="$screenColor"/>',touchScreen:<xsl:value-of select="$touchScreen"/>,autoLock:<xsl:value-of select="$autoLock"/></xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="debugger[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/debugger"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="debugger[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="commands">
            			<xsl:choose>
            				<xsl:when test="@commands"><xsl:value-of select="@commands"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="messages">
            			<xsl:choose>
            				<xsl:when test="@messages"><xsl:value-of select="@messages"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">debugger</xsl:with-param>
            			<xsl:with-param name="parms">,commands:'<xsl:value-of select="$commands"/>',messages:'<xsl:value-of select="$messages"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="panel[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/panel"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="panel[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">panel</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            	<xsl:template match="computer[@ref]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:param name="machineState" select="''"/>
            		<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($componentFile)/computer">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="machineState" select="$machineState"/>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="computer[not(@ref)]">
            		<xsl:param name="machine" select="''"/>
            		<xsl:param name="machineState" select="''"/>
            		<xsl:variable name="busWidth">
            			<xsl:choose>
            				<xsl:when test="@buswidth"><xsl:value-of select="@buswidth"/></xsl:when>
            				<xsl:otherwise>20</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="resume">
            			<xsl:choose>
            				<xsl:when test="@resume and $machineState = ''"><xsl:value-of select="@resume"/></xsl:when>
            				<xsl:otherwise>0</xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:variable name="state">
            			<xsl:choose>
            				<xsl:when test="$machineState != ''"><xsl:value-of select="$machineState"/></xsl:when>
            				<xsl:when test="@state"><xsl:value-of select="@state"/></xsl:when>
            				<xsl:otherwise/>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:call-template name="component">
            			<xsl:with-param name="machine" select="$machine"/>
            			<xsl:with-param name="class">computer</xsl:with-param>
            			<xsl:with-param name="parms">,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
            		</xsl:call-template>
            	</xsl:template>
            
            </xsl:stylesheet>
            
          • document.css
            @CHARSET "UTF-8";
            
            .page {
                margin: 2% 2%;
                padding: 2% 2%;
                min-width: 30em;
                overflow: auto;
                font-size: large;
                font-family: Helvetica, Arial, sans-serif;
                background: #303030;
                color: #ccc;
            
            }
            .page-header {
            }
            .page-header-title {
            	text-align: center;
            
            }
            .page a {
                color: #7fc07f;
                text-decoration: none;
            }
            a.footlink, a.paralink {
            	text-decoration: none;
            }
            a.footlink:link, a.paralink:link {
            	color: blue;
            }
            a.footlink:visited, a.paralink:visited {
            	color: blue;
            }
            .galleryitem {
            	float: left;
            	width: 200px;
            }
            .item {
            	float: left;
            	width: 2em;
            	text-indent: 1em;
            }
            .list {
            	margin-left: 3em;
            	text-indent: 0;
            	text-align: justify;
            }
            ul {
            	list-style: none;
            }
            div.pnumber {
            	float: left;
            	width: 2em;
            	text-indent: 1em;
            }
            div.pitem {
            	margin-left: 10em;
            }
            p.indent, .justified p {
            	text-indent: 2em;
            	text-align: justify;
            	line-height: 1.5em;
            }
            p.noindent {
            	text-indent: 0;
            	text-align: justify;
            }
            p.center, .center {
            	text-align: center;
            }
            li.para {
            	margin-top: 1em;
            	margin-bottom: 1em;
            }
            .left {
            	text-align: left;
            }
            .right {
            	text-align: right;
            }
            blockquote.tag {
            	font-size: small;
            	font-family: Monaco, Fixed, monospace;
            	margin-top: 0;
            	margin-bottom: 0;
            }
            .blockquote {
            	padding-left: 1em;
            	text-indent: 0;
            	text-align: justify;
            }
            .italics {
            	font-style: italic;
            }
            .medium {
            	font-size: medium;
            }
            .small {
            	font-size: x-small;
            }
            .smallcaps {
            	font-variant: small-caps;
            }
            .strike {
            	text-decoration: line-through;
            }
            .summation, .bracelist {
            	display: inline-block;
            	position: relative;
            	vertical-align: middle;
            	text-align: center;
            	margin-bottom: 0.5ex;
            	text-indent: 0;
            }
            .bracelist-symbol {
            	font-size: 3em;
            	vertical-align: -40%;
            }
            .summation .summation-lower, .summation .summation-upper, .bracelist-item {
            	display: block;
            	font-size: 75%;
            	text-align: center;
            }
            .summation .summation-upper {
            	margin-bottom: 0;
            	margin-left: 0.8ex;
            	font-style: italic;
            }
            .summation .summation-lower{
            	margin-bottom: -0.6ex;
            	font-style: italic;
            }
            .summation .summation-symbol {
            	font-size: 2em;
            }
            p sup {
            	vertical-align: baseline;
            	position: relative;
            	bottom: .5em;
            	font-size: small;
            }
            p sub {
            	vertical-align: baseline;
            	position: relative;
            	bottom: -.5em;
            	font-size: small;
            }
            .footnote {
            	font-size: medium;
            	text-indent: 1em;
            	text-align: justify;
            	margin-top: .5em;
            }
            .image-right {
            	float: right;
            	margin-left: 1em;
            	margin-top: 1em;
            	margin-bottom: 1em;
            }
            .image-caption {
            	font-size: small;
            	text-align: center;
            }
          • document.xsl
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
            <!DOCTYPE xsl:stylesheet [
            	<!ENTITY nbsp "&#160;"> <!ENTITY ne "&#8800;"> <!ENTITY le "&#8804;"> <!ENTITY ge "&#8805;">
            	<!ENTITY times "&#215;"> <!ENTITY sdot "&#8901;"> <!ENTITY divide "&#247;">
            	<!ENTITY copy "&#169;"> <!ENTITY Sigma "&#931;"> <!ENTITY sigma "&#963;"> <!ENTITY sum "&#8721;"> <!ENTITY lbrace "&#123;">
            ]>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            	<xsl:template name="documentStyles">
            		<link rel="stylesheet" type="text/css" href="/versions/pcjs/1.18.3/document.css"/>
            	</xsl:template>
            
            	<xsl:template match="title">
            		<h1><xsl:apply-templates/></h1>
            	</xsl:template>
            
            	<xsl:template name="p">
            		<xsl:if test="@id">
            			<a name="{@id}"></a>
            		</xsl:if>
            		<xsl:choose>
            			<xsl:when test="not(@class)">
            				<p><xsl:apply-templates/></p>
            			</xsl:when>
            			<xsl:otherwise>
            				<p class="{@class}"><xsl:apply-templates/></p>
            			</xsl:otherwise>
            		</xsl:choose>
            	</xsl:template>
            
            	<xsl:template match="p">
            		<xsl:call-template name="p"/>
            	</xsl:template>
            
            	<xsl:template match="br">
            		<br/>
            	</xsl:template>
            
            	<xsl:template match="p[@number]">
            		<div class="pnumber">
            			<xsl:choose>
            				<xsl:when test="not(@number) or @number = ''">&nbsp;</xsl:when>
            				<xsl:otherwise><xsl:value-of select="@number"/></xsl:otherwise>
            			</xsl:choose>
            		</div>
            		<div class="pitem">
            			<xsl:call-template name="p"/>
            		</div>
            	</xsl:template>
            
            	<xsl:template match="span">
            		<xsl:choose>
            			<xsl:when test="not(@class)">
            				<span><xsl:apply-templates/></span>
            			</xsl:when>
            			<xsl:when test="@class = 'italics'">
            				<em><xsl:apply-templates/></em>
            			</xsl:when>
            			<xsl:otherwise>
            				<span class="{@class}"><xsl:apply-templates/></span>
            			</xsl:otherwise>
            		</xsl:choose>
            	</xsl:template>
            
            	<xsl:template match="h2">
            		<h2><xsl:apply-templates/></h2>
            	</xsl:template>
            
            	<xsl:template match="h3">
            		<h3><xsl:apply-templates/></h3>
            	</xsl:template>
            
            	<xsl:template match="h4">
            		<h4><xsl:apply-templates/></h4>
            	</xsl:template>
            
            	<xsl:template match="h5">
            		<h5><xsl:apply-templates/></h5>
            	</xsl:template>
            
            	<xsl:template match="h6">
            		<h6><xsl:apply-templates/></h6>
            	</xsl:template>
            
            	<xsl:template match="em">
            		<em><xsl:apply-templates/></em>
            	</xsl:template>
            
            	<xsl:template match="strong">
            		<strong><xsl:apply-templates/></strong>
            	</xsl:template>
            
            	<xsl:template match="a">
            		<a href="{@href}" target="{@target}"><xsl:apply-templates/></a>
            	</xsl:template>
            
            	<xsl:template match="ol">
            		<blockquote><ol><xsl:apply-templates/></ol></blockquote>
            	</xsl:template>
            
            	<xsl:template match="ul">
            		<blockquote><ul><xsl:apply-templates/></ul></blockquote>
            	</xsl:template>
            
            	<xsl:template match="li">
            		<li><xsl:apply-templates/></li>
            	</xsl:template>
            
            	<xsl:template match="img">
            		<div><img src="{@src}" alt="image"/></div>
            	</xsl:template>
            
            	<xsl:template match="pre">
            		<pre><xsl:apply-templates/></pre>
            	</xsl:template>
            
            	<xsl:template match="figure">
            		<xsl:choose>
            			<xsl:when test="@pos">
            				<div class="{@pos}"><img src="{@ref}" alt="{.}"/><br/><xsl:value-of select="."/></div>
            			</xsl:when>
            			<xsl:otherwise>
            				<div><img src="{@ref}" alt="{.}"/><br/><xsl:value-of select="."/></div>
            			</xsl:otherwise>
            		</xsl:choose>
            	</xsl:template>
            
            	<xsl:template match="sub">
            		<sub><xsl:apply-templates/></sub>
            	</xsl:template>
            
            	<xsl:template match="sup">
            		<sup><xsl:apply-templates/></sup>
            	</xsl:template>
            
            	<xsl:template match="lt">&lt;</xsl:template>
            	<xsl:template match="gt">&gt;</xsl:template>
            	<xsl:template match="ne">&ne;</xsl:template>
            	<xsl:template match="le">&le;</xsl:template>
            	<xsl:template match="ge">&ge;</xsl:template>
            	<xsl:template match="times">&times;</xsl:template>
            	<xsl:template match="dot">&sdot;</xsl:template>
            	<xsl:template match="divide">&divide;</xsl:template>
            	<xsl:template match="sigma">&sigma;</xsl:template>
            
            	<xsl:template match="summation">
            		<span class="summation">
            			<span class="summation-upper"><xsl:value-of select="@upper"/></span>
            			<span class="summation-symbol">&sum;</span>
            			<span class="summation-lower"><xsl:value-of select="@lower"/></span>
            		</span>
            		<xsl:apply-templates/>
            	</xsl:template>
            
            	<xsl:template match="bracelist">
            		<span class="bracelist-symbol">&lbrace;</span>
            		<span class="bracelist">
            			<xsl:for-each select="item">
            				<span class="bracelist-item"><xsl:apply-templates/></span>
            			</xsl:for-each>
            		</span>
            	</xsl:template>
            
            	<xsl:template match="footlink">
            		<xsl:variable name="docID" select="/document/@id"/>
            		<a class="footlink" id="fn{$docID}_ref{@n}" href="#fn{$docID}_{@n}"><sup><xsl:if test="@quoted"><xsl:text>[</xsl:text></xsl:if><xsl:value-of select="@n"/><xsl:if test="@quoted"><xsl:text>]</xsl:text></xsl:if></sup></a>
            	</xsl:template>
            
            	<xsl:template match="footnote">
            		<xsl:variable name="docID" select="/document/@id"/>
            		<div class="footnote"><a id="fn{$docID}_{@n}" href="#fn{$docID}_ref{@n}"><sup><xsl:value-of select="@n"/></sup></a><xsl:text> </xsl:text>
            			<xsl:apply-templates/>
            		</div>
            	</xsl:template>
            
            	<xsl:template name="authors">
            		<xsl:for-each select="author"><xsl:if test="position() != 1"><xsl:text>, </xsl:text></xsl:if><xsl:if test="position() != 1 and position() = last()"><xsl:text>and </xsl:text></xsl:if><xsl:value-of select="."/></xsl:for-each>
            	</xsl:template>
            
            	<xsl:template name="formatDate">
            		<xsl:param name="date"/>
            		<xsl:param name="format">MDY</xsl:param>
            		<xsl:variable name="year">
            			<xsl:value-of select="substring-before($date,'-')"/>
            		</xsl:variable>
            		<xsl:variable name="mon-day">
            			<xsl:value-of select="substring-after($date,'-')"/>
            		</xsl:variable>
            		<xsl:variable name="mon">
            			<xsl:value-of select="substring-before($mon-day,'-')"/>
            		</xsl:variable>
            		<xsl:variable name="full-day">
            			<xsl:value-of select="substring-after($mon-day,'-')"/>
            		</xsl:variable>
            		<xsl:variable name="day">
            			<xsl:choose>
            				<xsl:when test="substring($full-day,1,1) = '0'"><xsl:value-of select="substring($full-day,2)"/></xsl:when>
            				<xsl:otherwise><xsl:value-of select="$full-day"/></xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<xsl:choose>
            			<xsl:when test="$mon = '01'">January </xsl:when>
            			<xsl:when test="$mon = '02'">February </xsl:when>
            			<xsl:when test="$mon = '03'">March </xsl:when>
            			<xsl:when test="$mon = '04'">April </xsl:when>
            			<xsl:when test="$mon = '05'">May </xsl:when>
            			<xsl:when test="$mon = '06'">June </xsl:when>
            			<xsl:when test="$mon = '07'">July </xsl:when>
            			<xsl:when test="$mon = '08'">August </xsl:when>
            			<xsl:when test="$mon = '09'">September </xsl:when>
            			<xsl:when test="$mon = '10'">October </xsl:when>
            			<xsl:when test="$mon = '11'">November </xsl:when>
            			<xsl:when test="$mon = '12'">December </xsl:when>
            			<xsl:when test="$mon = '00'"/>		</xsl:choose>
            		<xsl:if test="$day != '0' and $format = 'MDY'">
            			<xsl:value-of select="$day"/><xsl:text>, </xsl:text>
            		</xsl:if>
            		<xsl:value-of select="$year"/>
            	</xsl:template>
            
            	<xsl:template match="gallery">
            		<h2><xsl:value-of select="description"/></h2>
            		<div class="gallery">
            			<xsl:apply-templates select="item" mode="gallery"/>
            		</div>
            		<div style="clear:both;"></div>
            	</xsl:template>
            
            	<xsl:template match="item" mode="gallery">
            		<div class="galleryitem">
            			<a href="{@ref}"><img src="/versions/images/current/pdf-192.jpg" alt="{.}"/></a><br/>
            			<div style="font-size:small; text-align:center;"><xsl:value-of select="."/></div>
            		</div>
            	</xsl:template>
            
            	<xsl:template match="list[@type = 'timeline']">
            		<xsl:if test="not(description)">
            			<h2>Timeline</h2>
            		</xsl:if>
            		<xsl:if test="description">
            			<h2><xsl:value-of select="description"/></h2>
            		</xsl:if>
            		<blockquote>
            			<xsl:apply-templates select="item" mode="timeline"/>
            		</blockquote>
            	</xsl:template>
            
            	<xsl:template match="item" mode="timeline">
            		<xsl:if test="@ref">
            			<xsl:variable name="documentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            			<xsl:apply-templates select="document($documentFile)/document" mode="withDate">
            				<xsl:with-param name="itemRef" select="@ref"/>
            			</xsl:apply-templates>
            		</xsl:if>
            		<xsl:if test="not(@ref)">
            			<h3><xsl:call-template name="formatDate"><xsl:with-param name="date" select="@date"/></xsl:call-template></h3>
            			<blockquote>
            				<xsl:value-of select="."/>
            			</blockquote>
            		</xsl:if>
            	</xsl:template>
            
            	<xsl:template match="list[@type = 'people']">
            		<xsl:if test="not(description)">
            			<h2>People</h2>
            		</xsl:if>
            		<xsl:if test="description">
            			<h2><xsl:value-of select="description"/></h2>
            		</xsl:if>
            		<blockquote>
            			<xsl:apply-templates select="item" mode="people"/>
            		</blockquote>
            	</xsl:template>
            
            	<xsl:template match="item" mode="people">
            		<h3><xsl:value-of select="name"/></h3>
            		<xsl:apply-templates select="list"/>
            	</xsl:template>
            
            	<xsl:template match="list[@type = 'documents']">
            		<xsl:if test="description"><h2><xsl:value-of select="description"/></h2></xsl:if>
            		<ul>
            			<xsl:apply-templates select="item" mode="document"/>
            		</ul>
            	</xsl:template>
            
            	<xsl:template match="item" mode="document">
            		<xsl:variable name="documentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
            		<xsl:apply-templates select="document($documentFile)/document">
            			<xsl:with-param name="itemRef" select="@ref"/>
            		</xsl:apply-templates>
            	</xsl:template>
            
            	<xsl:template match="document">
            		<xsl:param name="itemRef"/>
            		<li>
            			<xsl:call-template name="documentSummary"><xsl:with-param name="itemRef" select="$itemRef"/></xsl:call-template>
            		</li>
            	</xsl:template>
            
            	<xsl:template match="document" mode="withDate">
            		<xsl:param name="itemRef"/>
            		<h3><xsl:call-template name="formatDate"><xsl:with-param name="date" select="date"/><xsl:with-param name="format" select="MY"/></xsl:call-template></h3>
            		<blockquote>
            			<p>
            				<xsl:call-template name="documentSummary"><xsl:with-param name="itemRef" select="$itemRef"/><xsl:with-param name="multiLine" select="'true'"/></xsl:call-template>
            			</p>
            		</blockquote>
            	</xsl:template>
            
            	<xsl:template name="documentSummary">
            		<xsl:param name="itemRef"/>
            		<xsl:param name="multiLine">false</xsl:param>
            		<xsl:choose>
            			<xsl:when test="content|include">
            				<a href="{$itemRef}"><xsl:value-of select="title"/></a>
            				<xsl:if test="@ref">
            					<span class="small">
            						<xsl:text> [</xsl:text><a href="{@ref}">Original</a><xsl:text>]</xsl:text>
            					</span>
            				</xsl:if>
            			</xsl:when>
            			<xsl:otherwise>
            				<a href="{$itemRef}"><xsl:value-of select="title"/></a>
            			</xsl:otherwise>
            		</xsl:choose>
            		<xsl:if test="copy">
            			<span class="small">
            				<xsl:text> [</xsl:text><a href="{copy/@ref}"><xsl:value-of select="copy"/></a><xsl:text>]</xsl:text>
            			</span>
            		</xsl:if>
            		<xsl:if test="author"><xsl:if test="$multiLine = 'true'"><br/></xsl:if><span class="medium"><xsl:text> by </xsl:text><xsl:call-template name="authors"/></span></xsl:if>
            		<xsl:if test="source">
            			<span class="small">
            				<br/>
            				<xsl:text>[Source: </xsl:text>
            				<xsl:if test="site">
            					<a href="{site/@url}"><xsl:value-of select="site"/></a>
            				</xsl:if>
            				<xsl:if test="not(site)">
            					<a href="{source/@url}"><xsl:value-of select="source"/></a>
            				</xsl:if>
            				<xsl:text>]</xsl:text>
            			</span>
            		</xsl:if>
            	</xsl:template>
            
            	<xsl:template match="list[@type = 'resources']">
            		<xsl:if test="not(description)">
            			<h2>Resources</h2>
            		</xsl:if>
            		<xsl:if test="description">
            			<h2><xsl:value-of select="description"/></h2>
            		</xsl:if>
            		<blockquote>
            			<xsl:apply-templates select="item" mode="resources"/>
            		</blockquote>
            	</xsl:template>
            
            	<xsl:template match="item" mode="resources">
            		<h3><xsl:value-of select="description"/></h3>
            		<xsl:apply-templates select="list"/>
            	</xsl:template>
            
            	<xsl:template match="list[@type = 'links']">
            		<xsl:if test="description">
            			<h4><xsl:value-of select="description"/></h4>
            		</xsl:if>
            		<ul>
            			<xsl:apply-templates select="item" mode="links"/>
            		</ul>
            	</xsl:template>
            
            	<xsl:template match="item" mode="links">
            		<li><a href="{@ref}"><xsl:value-of select="."/></a></li>
            	</xsl:template>
            
            	<xsl:template match="list[not(@type)]">
            		<xsl:if test="description">
            			<h2><xsl:value-of select="description"/></h2>
            		</xsl:if>
            		<blockquote>
            			<xsl:apply-templates select="item|tag" mode="outer"/>
            		</blockquote>
            	</xsl:template>
            
            	<xsl:template match="item" mode="outer">
            		<xsl:if test="description">
            			<h3><xsl:value-of select="description"/></h3>
            		</xsl:if>
            		<xsl:apply-templates select="list|item|tag" mode="inner"/>
            	</xsl:template>
            
            	<xsl:template match="list" mode="inner">
            		<xsl:if test="description">
            			<h4><xsl:value-of select="description"/></h4>
            		</xsl:if>
            		<ul>
            			<xsl:apply-templates select="list|item|para|tag" mode="inner"/>
            		</ul>
            	</xsl:template>
            
            	<xsl:template name="innerlist">
            		<xsl:if test="description">
            			<xsl:value-of select="description"/>
            		</xsl:if>
            		<ul>
            			<xsl:apply-templates select="list|item|para|tag" mode="inner"/>
            		</ul>
            	</xsl:template>
            
            	<xsl:template match="item" mode="inner">
            		<xsl:choose>
            			<xsl:when test="@ref">
            				<li><a href="{@ref}"><xsl:apply-templates/></a></li>
            			</xsl:when>
            			<xsl:when test="description">
            				<li><xsl:call-template name="innerlist"/></li>
            			</xsl:when>
            			<xsl:otherwise>
            				<li><xsl:apply-templates/></li>
            			</xsl:otherwise>
            		</xsl:choose>
            	</xsl:template>
            
            	<xsl:template match="para" mode="inner">
            		<li class="para"><xsl:apply-templates/></li>
            	</xsl:template>
            
            	<xsl:template match="tag" mode="outer">
            		<xsl:call-template name="tag"/>
            	</xsl:template>
            
            	<xsl:template match="tag" mode="inner">
            		<xsl:call-template name="tag"/>
            	</xsl:template>
            
            	<xsl:template name="tag">
            		<blockquote class="tag">
            			<xsl:text>&lt;</xsl:text><xsl:if test="@href"><a href="{@href}"><xsl:value-of select="@name"/></a></xsl:if><xsl:if test="not(@href)"><xsl:value-of select="@name"/></xsl:if><xsl:for-each select="attr"><xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:text>="</xsl:text><xsl:value-of select="@value"/><xsl:text>"</xsl:text></xsl:for-each>
            			<xsl:choose>
            				<xsl:when test="tag"><xsl:text>&gt;</xsl:text><xsl:apply-templates mode="inner"/><xsl:text>&lt;/</xsl:text><xsl:value-of select="@name"/><xsl:text>&gt;</xsl:text></xsl:when>
            				<xsl:when test="normalize-space(.) != ''"><xsl:text>&gt;</xsl:text><xsl:value-of select="."/><xsl:text>&lt;/</xsl:text><xsl:value-of select="@name"/><xsl:text>&gt;</xsl:text></xsl:when>
            				<xsl:otherwise><xsl:text>/&gt;</xsl:text></xsl:otherwise>
            			</xsl:choose>
            		</blockquote>
            	</xsl:template>
            
            </xsl:stylesheet>
            
          • index.html
            <!DOCTYPE html>
            <html style="background-color: #1d1d1d">
            	<head>
            		<title>pcjs.org | /versions/pcjs/1.18.3/</title>
            		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            		<meta charset="utf-8">
            		<meta name="viewport" content="initial-scale=1">
            		<link rel="shortcut icon" type="image/x-icon" href="/versions/images/current/favicon.ico">
            		<link rel="stylesheet" type="text/css" href="/versions/pcjs/1.18.3/common.css">
            		
            	</head>
            	<body>
            		<!-- index.html generated on Fri Jun 26 2015 07:55:50 GMT+0100 (BST) -->
            		<div class="common">
            			<div class="common-top">
            				<div class="common-top-left">
            					<ul>
            						<li><a href="/">Home</a></li>
            						<li><a href="/apps/pc/">Apps</a></li>
            						<li><a href="/disks/pc/">Disks</a></li>
            						<li><a href="/devices/pc/machine/">Machines</a></li>
            						<li><a href="/docs/">Docs</a></li>
            						<li><a href="/pubs/">Pubs</a></li>
            						<li><a href="/blog/">Blog</a></li>
            						<li><a href="/docs/about/">About</a></li>
            					</ul>
            				</div>
            				<div class="common-top-right">
            					<p>Powered by <a href="http://nodejs.org" target="_blank">Node.js</a> and <a href="http://aws.amazon.com/elasticbeanstalk/" target="_blank">AWS</a> | <a href="http://github.com/jeffpar/pcjs" target="_blank">GitHub</a></p>
            				</div>
            			</div>
            			<div class="common-middle">
            				<h4>Directory of C:\<a href="/">PCJS.ORG</a>\VERSIONS\PCJS\1.18.3</h4>
            				<div class="common-sidebar">
            					<ul class="common-list">
            						<li><a href="/versions/pcjs/">\..</a></li>
            						<li><a href="/versions/pcjs/1.18.3/common.css">\COMMON.CSS</a></li>
            						<li><a href="/versions/pcjs/1.18.3/common.xsl">\COMMON.XSL</a></li>
            						<li><a href="/versions/pcjs/1.18.3/components.css">\COMPONENTS.CSS</a></li>
            						<li><a href="/versions/pcjs/1.18.3/components.xsl">\COMPONENTS.XSL</a></li>
            						<li><a href="/versions/pcjs/1.18.3/document.css">\DOCUMENT.CSS</a></li>
            						<li><a href="/versions/pcjs/1.18.3/document.xsl">\DOCUMENT.XSL</a></li>
            						<li><a href="/versions/pcjs/1.18.3/machine.xsl">\MACHINE.XSL</a></li>
            						<li><a href="/versions/pcjs/1.18.3/manifest.xsl">\MANIFEST.XSL</a></li>
            						<li><a href="/versions/pcjs/1.18.3/outline.xsl">\OUTLINE.XSL</a></li>
            						<li><a href="/versions/pcjs/1.18.3/pc-dbg.js">\PC-DBG.JS</a></li>
            						<li><a href="/versions/pcjs/1.18.3/pc.js">\PC.JS</a></li>
            					</ul>
            					
            				</div>
            				<div class="common-main">
            										<p id="random">You are in a maze of little passages, all different.</p>
            
            					<div class="common-bottom">
            						<p class="common-reference"></p>
            						<p class="common-copyright">
            							<span class="common-copyright"><a href="http://www.pcjs.org/">pcjs.org</a> website © 2012-2015 by <a href="http://twitter.com/jeffpar">@jeffpar</a></span><br/>
            							<span class="common-copyright">PCjs and C1Pjs released under <a href="http://gnu.org/licenses/gpl.html">GPL version 3 or later</a></span>
            						</p>
            					</div>
            				</div>
            			</div>
            		</div>
            		<script id="randomize" type="text/javascript">
            			(function() {
            				var p = document.getElementById('random');
            				if (p) {
            					var mags = ['BYTE-1975-11:98', 'MSJ-1986-10:34', 'MSJ-1987-05:90', 'PCTJ-1987-01:216', 'PCTJ-1987-02:222', 'PCTJ-1987-03:214', 'PCTJ-1987-04:218', 'PCTJ-1987-05:238', 'PCTJ-1987-06:236', 'PCTJ-1987-07:230', 'PCTJ-1987-08:250', 'PCTJ-1987-09:252', 'PCTJ-1987-10:231', 'PCTJ-1987-11:261', 'PCTJ-1987-12:242'];
            					var p2 = document.createElement('p');
            					p2.appendChild(document.createTextNode('In addition, you see a piece of paper lying on the floor.'));
            					var div1 = document.createElement('div'); div1.setAttribute('class', 'common-image-gallery');
            					var div2 = document.createElement('div'); div2.setAttribute('class', 'common-image-frame'); div1.appendChild(div2);
            					var div3 = document.createElement('div'); div3.setAttribute('class', 'common-image-link'); div2.appendChild(div3);
            					var mag = mags[Math.floor(Math.random() * mags.length)];
            					var parts = mag.split(':'), issue = parts[0], page = Math.floor(Math.random() * parseInt(parts[1])) + 1;
            					parts = mag.split('-');
            					var name = parts[0].toLowerCase();
            					var a = document.createElement('a'); a.setAttribute('href', '/pubs/pc/magazines/' + name + '/' + issue + '/#page-' + page); div3.appendChild(a);
            					var img = document.createElement('img'); img.setAttribute('src', 'http://static.pcjs.org/pubs/pc/magazines/' + name + '/' + issue + '/thumbs/' + issue + ' ' + page + '.jpeg'); img.setAttribute('width', '200'); a.appendChild(img);
            					p.parentNode.insertBefore(p2, p.nextSibling);
            					p2.parentNode.insertBefore(div1, p2.nextSibling)
            				}
            			})();
            		</script>
            		
            	</body>
            </html>
            
          • machine.xsl
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
            <!DOCTYPE xsl:stylesheet [
            	<!ENTITY nbsp "&#160;"> <!ENTITY sect "&#167;"> <!ENTITY copy "&#169;"> <!ENTITY para "&#182;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;">
            	<!ENTITY lsquo "&#8216;"> <!ENTITY rsquo "&#8217;"> <!ENTITY ldquo "&#8220;"> <!ENTITY rdquo "&#8221;"> <!ENTITY dagger "&#8224;"> <!ENTITY Dagger "&#8225;">
            ]>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            	<xsl:output doctype-system="about:legacy-compat"/>
            
            	<xsl:include href="/versions/pcjs/1.18.3/common.xsl"/>
            	<xsl:include href="/versions/pcjs/1.18.3/components.xsl"/>
            
            	<xsl:template match="/machine">
            		<html lang="en">
            			<head>
            				<title><xsl:value-of select="$SITEHOST"/></title>
            				<xsl:call-template name="commonStyles"/>
            				<xsl:call-template name="componentStyles"/>
            			</head>
            			<body>
            				<div class="common">
            					<xsl:call-template name="commonTop"/>
            					<div class="common-middle">
            						<p></p>
            						<div id="{@id}" class="machine {@class}js">
            							<xsl:call-template name="component">
            								<xsl:with-param name="machine" select="@id"/>
            								<xsl:with-param name="component" select="'machine'"/>
            								<xsl:with-param name="class"><xsl:value-of select="@class"/>js</xsl:with-param>
            								<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
            							</xsl:call-template>
            						</div>
            					</div>
            					<xsl:call-template name="commonBottom"/>
            				</div>
            				<xsl:call-template name="componentScripts">
            					<xsl:with-param name="component">
            						<xsl:choose>
            							<xsl:when test="debugger"><xsl:value-of select="@class"/>-dbg</xsl:when>
            							<xsl:otherwise><xsl:value-of select="@class"/></xsl:otherwise>
            						</xsl:choose>
            					</xsl:with-param>
            				</xsl:call-template>
            			</body>
            		</html>
            	</xsl:template>
            
            </xsl:stylesheet>
            
          • manifest.xsl
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2014-04-10" modified="2014-04-10" license="http://www.gnu.org/licenses/gpl.html" -->
            <!DOCTYPE xsl:stylesheet [
            	<!ENTITY nbsp "&#160;"> <!ENTITY sect "&#167;"> <!ENTITY copy "&#169;"> <!ENTITY para "&#182;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;">
            	<!ENTITY lsquo "&#8216;"> <!ENTITY rsquo "&#8217;"> <!ENTITY ldquo "&#8220;"> <!ENTITY rdquo "&#8221;"> <!ENTITY dagger "&#8224;"> <!ENTITY Dagger "&#8225;">
            ]>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            	<xsl:output doctype-system="about:legacy-compat"/>
            
            	<xsl:include href="/versions/pcjs/1.18.3/common.xsl"/>
            	<xsl:include href="/versions/pcjs/1.18.3/components.xsl"/>
            
            	<xsl:template match="/manifest[@type = 'document']">
            		<html lang="en">
            			<head>
            				<title><xsl:value-of select="$SITEHOST"/></title>
            				<xsl:call-template name="commonStyles"/>
            				<xsl:call-template name="componentStyles"/>
            			</head>
            			<body>
            				<div class="common">
            					<xsl:call-template name="commonTop"/>
            					<div class="common-middle">
            						<h4>Document Manifest</h4>
            						<div class="common-sidebar">
            							<ul class="common-list-data">
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Title'"/>
            									<xsl:with-param name="node" select="title"/>
            									<xsl:with-param name="default">None</xsl:with-param>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Version'"/>
            									<xsl:with-param name="node" select="version"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Source'"/>
            									<xsl:with-param name="node" select="source"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Documents'"/>
            									<xsl:with-param name="node" select="document"/>
            									<xsl:with-param name="default"><xsl:value-of select="title"/> <xsl:if test="version != ''"><xsl:text> </xsl:text><xsl:value-of select="version"/></xsl:if></xsl:with-param>
            								</xsl:call-template>
            							</ul>
            						</div>
            						<div class="common-main">
            							<p><xsl:value-of select="desc"/></p>
            							<xsl:call-template name="commonBottom"/>
            						</div>
            					</div>
            				</div>
            			</body>
            		</html>
            	</xsl:template>
            
            	<xsl:template match="/manifest[@type = 'software' or not(@type)]">
            		<xsl:variable name="machineClass">
            			<xsl:choose>
            				<xsl:when test="machine/@class"><xsl:value-of select="machine/@class"/></xsl:when>
            				<xsl:otherwise><xsl:value-of select="$MACHINECLASS"/></xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<html lang="en">
            			<head>
            				<title><xsl:value-of select="$SITEHOST"/></title>
            				<xsl:call-template name="commonStyles"/>
            				<xsl:call-template name="componentStyles"/>
            			</head>
            			<body>
            				<div class="common">
            					<xsl:call-template name="commonTop"/>
            					<div class="common-middle">
            						<h4>Software Manifest</h4>
            						<div class="common-sidebar">
            							<ul class="common-list-data">
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Title'"/>
            									<xsl:with-param name="node" select="title"/>
            									<xsl:with-param name="default">None</xsl:with-param>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Version'"/>
            									<xsl:with-param name="node" select="version"/>
            									<xsl:with-param name="default">Unknown</xsl:with-param>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Type'"/>
            									<xsl:with-param name="node" select="type"/>
            									<xsl:with-param name="default">None</xsl:with-param>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Category'"/>
            									<xsl:with-param name="node" select="category"/>
            									<xsl:with-param name="default">None</xsl:with-param>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Created'"/>
            									<xsl:with-param name="node" select="creationDate"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Creators'"/>
            									<xsl:with-param name="node" select="creator"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label"><xsl:if test="creationDate">Updated</xsl:if><xsl:if test="not(creationDate)">Released</xsl:if></xsl:with-param>
            									<xsl:with-param name="node" select="releaseDate"/>
            									<xsl:with-param name="default">Unknown</xsl:with-param>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Company'"/>
            									<xsl:with-param name="node" select="company"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Authors'"/>
            									<xsl:with-param name="node" select="author"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Contributors'"/>
            									<xsl:with-param name="node" select="contributor"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Publisher'"/>
            									<xsl:with-param name="node" select="publisher"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'License'"/>
            									<xsl:with-param name="node" select="license"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Source'"/>
            									<xsl:with-param name="node" select="source"/>
            									<xsl:with-param name="default" select="''"/>
            								</xsl:call-template>
            								<xsl:call-template name="listItem">
            									<xsl:with-param name="label" select="'Disks'"/>
            									<xsl:with-param name="node" select="disk"/>
            									<xsl:with-param name="default"><xsl:value-of select="title"/> <xsl:if test="version != ''"><xsl:text> </xsl:text><xsl:value-of select="version"/></xsl:if></xsl:with-param>
            								</xsl:call-template>
            							</ul>
            						</div>
            						<div class="common-main">
            							<xsl:for-each select="machine[not(@type) or @type = 'default']">
            								<xsl:call-template name="machine">
            									<xsl:with-param name="href" select="@href"/>
            									<xsl:with-param name="state" select="@state"/>
            								</xsl:call-template>
            							</xsl:for-each>
            							<xsl:if test="not(machine[not(@type) or @type = 'default'])">
            								<p>No default machine specified for '<xsl:value-of select="title"/>' in manifest.xml</p>
            							</xsl:if>
            							<xsl:call-template name="commonBottom"/>
            						</div>
            					</div>
            				</div>
            				<xsl:call-template name="componentScripts">
            					<xsl:with-param name="component">
            						<xsl:choose>
            							<xsl:when test="machine/@debugger"><xsl:value-of select="$machineClass"/>-dbg</xsl:when>
            							<xsl:otherwise><xsl:value-of select="$machineClass"/></xsl:otherwise>
            						</xsl:choose>
            					</xsl:with-param>
            				</xsl:call-template>
            			</body>
            		</html>
            	</xsl:template>
            
            	<xsl:template name="listItem">
            		<xsl:param name="label"/>
            		<xsl:param name="node"/>
            		<xsl:param name="default">Unknown</xsl:param>
            		<xsl:if test="$node != '' or $default != ''">
            			<li><xsl:value-of select="$label"/>
            				<ul class="common-list-data-items">
            					<xsl:for-each select="$node">
            						<xsl:variable name="desc">
            							<xsl:choose>
            								<xsl:when test="desc"><xsl:value-of select="desc"/></xsl:when>
            								<xsl:when test="org"><xsl:value-of select="org"/></xsl:when>
            								<xsl:otherwise/>
            							</xsl:choose>
            						</xsl:variable>
            						<li title="{$desc}">
            							<xsl:variable name="value">
            								<xsl:choose>
            									<xsl:when test="name">
            										<xsl:value-of select="name"/>
            									</xsl:when>
            									<xsl:when test="normalize-space(./text()) != ''">
            										<xsl:value-of select="normalize-space(./text())"/>
            									</xsl:when>
            									<xsl:otherwise>
            										<xsl:value-of select="$default"/>
            									</xsl:otherwise>
            								</xsl:choose>
            							</xsl:variable>
            							<xsl:variable name="href">
            								<xsl:if test="@href"><xsl:value-of select="@href"/></xsl:if>
            							</xsl:variable>
            							<xsl:choose>
            								<xsl:when test="$href != ''">
            									<a href="{$href}"><xsl:value-of select="$value"/></a>
            								</xsl:when>
            								<xsl:otherwise>
            									<xsl:value-of select="$value"/>
            								</xsl:otherwise>
            							</xsl:choose>
            							<xsl:if test="page">
            								<ul class="common-list-data-subitems">
            									<xsl:for-each select="page">
            										<li>
            											<xsl:if test="@href">
            												<a href="{$href}{@href}"><xsl:value-of select="."/></a>
            											</xsl:if>
            											<xsl:if test="not(@href)">
            												<xsl:value-of select="."/>
            											</xsl:if>
            										</li>
            									</xsl:for-each>
            								</ul>
            							</xsl:if>
            						</li>
            					</xsl:for-each>
            					<xsl:if test="not($node)">
            						<xsl:if test="@href">
            							<a href="{@href}"><xsl:value-of select="$default"/></a>
            						</xsl:if>
            						<xsl:if test="not(@href)">
            							<xsl:value-of select="$default"/>
            						</xsl:if>
            					</xsl:if>
            				</ul>
            			</li>
            		</xsl:if>
            	</xsl:template>
            
            </xsl:stylesheet>
            
          • outline.xsl
            <?xml version="1.0" encoding="UTF-8"?>
            <!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
            <!DOCTYPE xsl:stylesheet [
            	<!ENTITY nbsp "&#160;"> <!ENTITY sect "&#167;"> <!ENTITY copy "&#169;"> <!ENTITY para "&#182;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;">
            	<!ENTITY lsquo "&#8216;"> <!ENTITY rsquo "&#8217;"> <!ENTITY ldquo "&#8220;"> <!ENTITY rdquo "&#8221;"> <!ENTITY dagger "&#8224;"> <!ENTITY Dagger "&#8225;">
            ]>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            	<xsl:output doctype-system="about:legacy-compat"/>
            
            	<xsl:include href="/versions/pcjs/1.18.3/common.xsl"/>
            	<xsl:include href="/versions/pcjs/1.18.3/document.xsl"/>
            	<xsl:include href="/versions/pcjs/1.18.3/components.xsl"/>
            
            	<xsl:template match="/outline">
            		<xsl:variable name="machineClass">
            			<xsl:choose>
            				<xsl:when test="machine/@class"><xsl:value-of select="machine/@class"/></xsl:when>
            				<xsl:otherwise><xsl:value-of select="$MACHINECLASS"/></xsl:otherwise>
            			</xsl:choose>
            		</xsl:variable>
            		<html lang="en">
            			<head>
            				<title><xsl:value-of select="title"/><xsl:text> | </xsl:text><xsl:value-of select="$SITEHOST"/></title>
            				<xsl:call-template name="commonStyles"/>
            				<xsl:call-template name="documentStyles"/>
            				<xsl:call-template name="componentStyles"/>
            			</head>
            			<body>
            				<div class="common">
            					<div class="page justified">
            						<xsl:apply-templates/>
            					</div>
            				</div>
            				<xsl:call-template name="componentScripts">
            					<xsl:with-param name="component">
            						<xsl:choose>
            							<xsl:when test="debugger"><xsl:value-of select="$machineClass"/>-dbg</xsl:when>
            							<xsl:otherwise><xsl:value-of select="$machineClass"/></xsl:otherwise>
            						</xsl:choose>
            					</xsl:with-param>
            				</xsl:call-template>
            			</body>
            		</html>
            	</xsl:template>
            
            </xsl:stylesheet>
            
          • pc-dbg.js
            (function(){var f,aa,ba,ea={163840:[40,1,8],184320:[40,1,9],327680:[40,2,8],368640:[40,2,9],737280:[80,2,9],1228800:[80,2,15],1474560:[80,2,18],2949120:[80,2,36]};
            function fa(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null===d&&(a=a.substr(0,a.length-1))}var e,d=a;(b&&10!=b?16==b?null!==d.match(/^[0-9a-f]+$/i):1:null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
            function h(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function k(a){return"0x"+h(a,2)}function ga(a){return"0x"+h(a,4)}function ha(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}
            function ia(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}var ja={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ka(a){return a.replace(/[&<>"']/g,function(a){return ja[a]})}function la(a,b){var c="",d;for(d in a)d=d.replace(/([\\[\]*{}().+?])/g,"\\$1"),c+=(c?"|":"")+d;return b.replace(new RegExp("("+c+")","g"),function(b){return a[b]})}function ma(a,b){return a+"                                        ".substr(0,b-a.length)}
            function na(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function oa(a,b,c){var d=0,e=a.length,g=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var l=d+e>>1,p;p=c(b,a[l]);0<p?d=l+1:(e=l,g=!p)}return g?d:~d}function pa(a,b,c){c=oa(a,b,c);0>c&&a.splice(-(c+1),0,b)}var ra=Date.now||function(){return+new Date};
            function sa(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}var ua=[31,28,31,30,31,30,31,31,30,31,30,31];function va(a,b){var c=0,d=1,e;for(e in a){if(d>=arguments.length)break;d++;c=void 0}return c}function wa(a,b){return(b&a.Sq)>>a.shift}
            function ya(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
            function za(a,b,c,d,e,g){b=!!b;var l=0,p=null,v=ha(a),w=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");b&&(w.onreadystatechange=function(){4===w.readyState&&(p=w.responseText,200==w.status||!w.status&&p.length&&"file:"==(window?window.location.protocol:"file:")||(l=w.status||-1),e&&(d?e.call(d,v,p,l,g):e(v,p,l,g)))});if(c){var F="",K;for(K in c)c.hasOwnProperty(K)&&(F&&(F+="&"),F+=K+"="+encodeURIComponent(c[K]));F=F.replace(/%20/g,"+");w.open("POST",
            a,b);w.setRequestHeader("Content-type","application/x-www-form-urlencoded");w.send(F)}else w.open("GET",a,b),w.send();a=[];b||(p=w.responseText,200!=w.status&&(l=w.status||-1),e&&(d?e.call(d,v,p,l,g):e(v,p,l,g)),a=[l,p]);return a}function Aa(){return"http://"+(window?window.location.host:"www.pcjs.org")}function Ba(a){window&&window.alert(a)}function Ca(a){var b=!1;window&&(b=window.confirm(a));return b}var Da=null;
            function Ea(){if(null==Da){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Da=a}return Da}function Fa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function Ga(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}
            function Ia(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ja(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
            function Ka(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,g=!1;a.onmousedown=function(){g||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);g=!0}}var La={init:[],show:[],exit:[]},Ma=!1,Na=!0;function Oa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Pa(a){La.init.push(a)}
            function Qa(a){if(Na)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Ba("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Ra(a){!Na&&a?(Na=!0,Ma&&Ta("init")):Na=a}function Ta(a){La[a]&&Qa(La[a])}Oa("onload",function(){Ma=!0;Qa(La.init)});Oa("onpageshow",function(){Qa(La.show)});Oa(Ia("Opera")||Ia("iOS")?"onunload":"onbeforeunload",function(){Qa(La.exit)});
            function Ua(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Gn=b.comment;this.ls=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.fo=this.id.substr(0,b),this.Lg=this.id.substr(b+1)):this.Lg=this.id;this[a]=c;this.fa={Dg:!1,$c:!1,il:!1,jc:!1,Ld:!1};this.gj=null;this.fa.Ld=!1;this.va={};this.Y=null;this.Yb=d||-1;Wa[Wa.length]=this}var Xa=void 0,Ya={};
            if(window){Xa||(Xa=window.location.search.substr(1));for(var ab,bb=/\+/g,cb=/([^&=]+)=?([^&]*)/g;ab=cb.exec(Xa);)Ya[decodeURIComponent(ab[1].replace(bb," "))]=decodeURIComponent(ab[2].replace(bb," "))}function db(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
            function eb(a,b){b||(b=Ua);a.prototype=db(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Wa=[];function fb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Wa.length;b++){var d=Wa[b];a&&d.id.indexOf(a)||c.push(d)}return c}function gb(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<Wa.length;c++)if(Wa[c].id===a)return Wa[c]}return null}
            function hb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Wa.length;d++)if(c)c==Wa[d]&&(c=null);else if(!(a!=Wa[d].type||b&&Wa[d].id.indexOf(b)))return Wa[d]}return null}function ib(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("({"+a+"})")}catch(c){Ba(c.message+" ("+a+")")}return b}window&&!window.document.ELEMENT_NODE&&(window.document.ELEMENT_NODE=1);
            function jb(a,b){for(var c=kb(b.parentNode,"pcjs-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,g=0;g<e.length;g++){var l=e[g];if(l.nodeType===window.document.ELEMENT_NODE){var p=l.getAttribute("class");if(p)for(var v=p.split(" "),w=0;w<v.length;w++)switch(p=v[w],p){case "pcjs-binding":(p=ib(l))&&p.binding&&a.Nb(p.type,p.binding,l),w=v.length}}}}
            function kb(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
            Ua.prototype={constructor:Ua,parent:null,toString:function(){return this.name?this.name:this.id||this.type},Nb:function(a,b,c){switch(b){case "clear":return this.va[b]||(this.va[b]=c,c.onclick=function(a){return function(){a.va.print&&(a.va.print.value="")}}(this)),!0;case "print":return this.va[b]||(this.Ih=this.va[b]=c,c.value="",this.R=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
            this.Da=function(a,b,c){this.R(a,"notice",c)}),!0;default:return!1}},log:function(){},assert:function(){},R:function(){},status:function(a){this.R(this.Lg+": "+a)},Da:function(a,b){b||Ba(a)},lc:function(){return this.fa.jc=!0},kc:function(a,b){b&&(this.fa.jc=!1);return!0},qa:function(a){if(this.Y){a=this===this.Y?a|0:a||this.Yb;var b=this.Y.Yb&a;return b===a||!!(b&this.Y.fp)}return!1},ab:function(a,b,c){return this.Y?((!0===b||this.qa(b|0))&&this.Y.message(a,c),!0):!1}};
            function m(a,b,c,d,e,g,l){a.Y&&(!0===l?l=0:null==l&&(l=a.Yb),lb(a.Y,a,b,c,d,e,g,l))}function mb(a,b){if(a.fa.il)return a.fa.$c&&(a.fa.$c=!1),a.fa.il=!1;if(a.fa.Ld)return a.R(a.toString()+" error"),!1;a.fa.$c=b;return a.fa.$c}function nb(a,b){a.fa.$c&&(b?a.fa.il=!0:void 0===b&&a.R(a.toString()+" busy"));return a.fa.$c}function ob(a,b){if(!a.fa.Ld&&(a.fa.Dg=!1!==b,a.fa.Dg)){var c=a.gj;a.gj=null;c&&c()}}function pb(a,b){b&&(a.fa.Dg?b():a.gj=b);return a.fa.Dg}function qb(a,b){a.fa.Ld=!0;a.Da(b)}
            var rb="undefined"!==typeof ArrayBuffer;function tb(a){Ua.call(this,"Panel",a,tb);this.canvas=null;this.Pe=this.Qe=this.Th=-1}eb(tb);function ub(a,b,c,d){this.$f=[a,b,c,d];this.zk=null;void 0===a&&(this.$f[0]=256*Math.random()|0,this.$f[1]=256*Math.random()|0,this.$f[2]=256*Math.random()|0,this.$f[3]=255,this.zk=null)}ub.prototype.toString=function(){this.zk||(this.zk="#"+h(this.$f[0],2)+h(this.$f[1],2)+h(this.$f[2],2));return this.zk};function vb(a,b,c,d){this.x=a;this.y=b;this.Xc=c;this.nd=d}
            vb.prototype.contains=function(a,b){return a>=this.x&&a<this.x+this.Xc&&b>=this.y&&b<this.y+this.nd};function wb(a,b,c,d){void 0===d&&(d=b>=c>>2);d?(b=new vb(a.x,a.y,a.Xc,a.nd*b/c|0),a.y+=b.nd,a.nd-=b.nd):(b=new vb(a.x,a.y,a.Xc*b/c|0,a.nd),a.x+=b.Xc,a.Xc-=b.Xc);return b}f=tb.prototype;f.Nb=function(a,b,c){return this.Fa&&this.Fa.Nb(a,b,c)||this.O&&this.O.Nb(a,b,c)||this.Ja&&this.Ja.Nb(a,b,c)||this.Y&&this.Y.Nb(a,b,c)?!0:this.parent.Nb.call(this,a,b,c)};
            f.Kc=function(a,b,c,d){this.Fa=a;this.ma=b;this.O=c;this.Y=d;this.Ja=xb(a,"Keyboard")};f.lc=function(a,b){b||yb();return!0};f.kc=function(){return!0};f.bl=function(a,b){a.button||(this.Th=b?0:-1,zb(this,a,b))};f.lo=function(a){zb(this,a)};
            function zb(a,b,c){var d=1280/a.canvas.offsetWidth,e=720/a.canvas.offsetHeight,g=a.canvas.getBoundingClientRect(),d=(b.clientX-g.left)*d|0;b=(b.clientY-g.top)*e|0;null==c&&(a.Th||(a.Th=Math.abs(a.Pe-d)>Math.abs(a.Qe-b)?1:2),1==a.Th?b=a.Qe:2==a.Th&&(d=a.Pe));a.Pe=d;a.Qe=b;if(0<=d&&1280>d&&0<=b&&720>b){a:{c=d;if(960>c&&a.mb&&a.mb.og)for(g=0;g<a.mb.og.length;g++)if(e=a.mb.og[g],e.contains(c,b)){c-=e.x;b-=e.y;var d=a.mb.sh[g],l=wa(Ab.Ao,a.mb.Gk[d.Hp]),g=l*a.ma.nb,d=(l+d.re)*a.ma.nb-1;0<b&&(g+=e.Xc*(b-
            1)*a.Do);g+=c*a.Do;g|=0;g>d&&(g=d);c=g;break a}c=n}c!==n&&(c&=-16,c!=a.pn&&(Bb(a,c,!0),a.pn=c))}}
            f.zd=function(){if(this.canvas&&this.Wi&&this.cf&&this.Kf){var a=this.cf.width,b=this.cf.height;this.Kf.fillStyle="black";this.Kf.fillRect(0,0,a,b);Cb(this,18,this.cf,this.Kf,this.canvas.style.color);Db(this,3);Eb(this,"CPU");Eb(this,"Target");Eb(this,"Current");Hb(this);Eb(this,this.O.ka);Eb(this,Ib(this.O));Eb(this,Kb(this.O));Hb(this,2);Db(this,8);var c=this.O.ka<Lb?4:8;this.ar=16;this.to=c;Eb(this,"AX",this.O.F,2);Eb(this,"DS",this.O.bb.ia,0,1);Eb(this,"DX",this.O.H,2);Eb(this,"SI",this.O.K,0,
            1.5);Eb(this,"BX",this.O.D,2);Eb(this,"ES",this.O.Ma.ia,0,1);Eb(this,"CX",this.O.G,2);Eb(this,"DI",this.O.J,0,1.5);Eb(this,"CS",Mb(this.O),2);Eb(this,"SS",this.O.ua.ia,0,1);Eb(this,"IP",q(this.O),2);Eb(this,"SP",r(this.O),0,1.5);Eb(this,"PS",c=Nb(this.O),2);Eb(this,"BP",this.O.L,0,1.5);this.O.ka>=Lb&&(Eb(this,"FS",this.O.xc.ia,2),Eb(this,"CR0",this.O.hb,0,1),Eb(this,"GS",this.O.yc.ia,2),Eb(this,"CR3",this.O.uf,0,1.5));Db(this,9);Eb(this,"V"+(c&Ob?1:0));Eb(this,"D"+(c&Pb?1:0));Eb(this,"I"+(c&Qb?1:
            0));Eb(this,"T"+(c&Rb?1:0));Eb(this,"S"+(c&Sb?1:0));Eb(this,"Z"+(c&Tb?1:0));Eb(this,"A"+(c&Ub?1:0));Eb(this,"P"+(c&Vb?1:0));Eb(this,"C"+(c&Wb?1:0),0,2);Bb(this,this.pn);this.Wi.drawImage(this.cf,0,0,a,b,this.Iu,this.Lu,this.gu,this.ju)}};function Xb(a,b,c,d){a.mb.sh[a.mb.An++]={Hp:b,re:c,type:d};return va(Ab,b,c,0,d)}
            function Bb(a,b,c){if(a.Wi&&a.cf&&a.Kf){var d=a.cf.width;a.Kf.fillStyle="black";a.Kf.fillRect(0,360,d,360);Cb(a,378,a.cf,a.Kf,a.canvas.style.color);Db(a,24);if(null==b)Eb(a,"Mouse over memory to dump");else{Eb(a,"0x"+h(b),null,0,1);for(var e=1;16>=e;e++){for(var g="",l=1;8>=l;l++){var p=Yb(a.ma,b++);Eb(a,h(p,2),null,1);g+=32<=p&&128>p?String.fromCharCode(p):"."}Eb(a,g,null,0,1)}}c&&a.Wi.drawImage(a.cf,0,360,d,360,a.Gu,a.Ju,a.eu,a.hu)}}
            function Cb(a,b,c,d,e){var g,l=a.et=10;a.Ad=l;a.kg=b;a.Ig=a.bo=18;g||(g=a.Yn||a.bo+"px Monaco, Lucida Console, Courier New");a.hj=a.Yn=g;c&&(a.hp=c);d&&(a.$d=d,a.np=e||"white")}function Db(a,b){a.cl=a.hp.width/b|0}function Hb(a,b){a.Ad=a.et;a.kg+=(a.Ig+2)*(b||1)}function Eb(a,b,c,d,e){a.$d.font=a.hj;a.$d.fillStyle=a.np;a.$d.fillText(b,a.Ad,a.kg);a.Ad+=a.cl;null!=c&&(16!=a.ar?b=c.toString():(b=8>a.to?"0x":"",b+=h(c,a.to)),a.$d.fillText(b,a.Ad,a.kg),a.Ad+=a.cl);d&&(a.Ad+=a.cl*d);e&&Hb(a,e)}
            function yb(){for(var a=!1,b=kb(window.document,"pcjs","panel"),c=0;c<b.length;c++){var d=b[c],e=ib(d),g=gb(e.id);g||(a=!0,g=new tb(e));jb(g,d);a&&ob(g)}}Pa(yb);
            function Zb(a,b,c){Ua.call(this,"Bus",a,Zb);this.O=b;this.Y=c;this.Be=a.buswidth||20;this.Mk=Math.pow(2,this.Be);this.Vh=this.Db=this.Mk-1|0;this.Ca=32==this.Be||20>=this.Be?12:24>=this.Be?14:15;this.nb=1<<this.Ca;this.oo=this.nb>>2;this.Ga=this.nb-1;this.Ae=this.Mk/this.nb|0;this.td=this.Ae-1;this.le=[];this.me=[];this.Qh=this.Rh=!1;this.xl();ob(this)}eb(Zb);var Ab,$b={Ao:20,count:8,cu:1,type:3},ac=0,bc;for(bc in $b){var cc=$b[bc];$b[bc]={Sq:(1<<cc)-1<<ac,shift:ac};ac+=cc}Ab=void 0;f=Zb.prototype;
            f.xl=function(){var a=new t;this.na=Array(this.Ae);for(var b=0;b<this.Ae;b++)this.na[b]=a;this.O.xl(this.na,this.Ca);a=this.O;a.Db=a.Ee=this.Db};f.reset=function(){dc(this,!0)};f.lc=function(a,b){b||this.reset();return!0};
            function ec(a,b,c,d,e){for(var g=b>>>a.Ca;0<c&&g<a.na.length;){var l=a.na[g],p=g*a.nb,v=c>a.nb?a.nb:c;if(l&&l.size){if(l.type==d&&l.Z==e){if(b+c<=l.Ba)return l.gg+=l.Ba-b,l.Ba=b,!0;if(b>=l.Ba+l.gg){v=l.size-(b-p);v>c&&(v=c);l.gg=b-l.Ba+v;c-=v;b=p+a.nb;continue}}return fc(1,b,c)}l=a.na[g++]=new t(b,v,a.nb,d,e);a.Y&&gc(l,a.Y,b,a.nb);c-=v;b=p+a.nb}return 0<c?fc(2,b,c):!0}
            function dc(a,b){if(32==a.Be)b?a.lg&&(hc(a,1048576,1048576,a.lg),a.lg=null):a.lg||(a.lg=ic(a,1048576,1048576),hc(a,1048576,1048576,ic(a,0,1048576)));else if(20<a.Be){var c=a.Db&-1048577|(b?1048576:0);if(c!=a.Db&&(a.Db=c,a.O)){var d=a.O;d.Db=d.Ee=c}}}f.Bk=function(a,b,c){if(!(a&this.Ga||!b||b&this.Ga)){for(var d=a>>>this.Ca;0<b;){var e=this.na[d];if(!e.Z)return fc(5,a,b);e.Sd(c);b-=this.nb;d++}return!0}return fc(3,a,b)};
            function jc(a,b,c){if(!(b&a.Ga||!c||c&a.Ga)){for(var d=b>>>a.Ca;0<c;){b=d*a.nb;var e=a.na[d++]=new t(b);a.Y&&gc(e,a.Y,b,a.nb);c-=a.nb}return!0}return fc(4,b,c)}function ic(a,b,c){var d=[];for(b>>>=a.Ca;0<c&&b<a.na.length;)d.push(a.na[b++]),c-=a.nb;return d}function hc(a,b,c,d,e){for(var g=0,l=b>>>a.Ca;0<c&&l<a.na.length;){var p=d[g++];if(!p)break;if(void 0!==e){var v=new t(b);a.Y&&gc(v,a.Y,b,a.nb);v.clone(p,e);p=v}a.na[l++]=p;c-=a.nb}}
            f.Qa=function(a){return this.na[(a&this.Db)>>>this.Ca].tc(a&this.Ga,a)};function Yb(a,b){return a.na[(b&a.Db)>>>a.Ca].Yg(b&a.Ga,b)}f.ra=function(a){var b=a&this.Ga,c=(a&this.Db)>>>this.Ca;return b!=this.Ga?this.na[c].ji(b,a):this.na[c++].tc(b,a)|this.na[c&this.td].tc(0,a+1)<<8};function kc(a,b){var c=b&a.Ga,d=(b&a.Db)>>>a.Ca;return c!=a.Ga?a.na[d].Nm(c,b):a.na[d++].Yg(c,b)|a.na[d&a.td].Yg(0,b+1)<<8}
            f.fe=function(a){var b=a&this.Ga,c=(a&this.Db)>>>this.Ca;if(b<this.Ga-2)return this.na[c].Ec(b,a);var d=(b&3)<<3;return this.na[c].Ec(b&-4,a)>>>d|this.na[c+1&this.td].Ec(0,a+3)<<32-d};f.dd=function(a,b){this.na[(a&this.Db)>>>this.Ca].Fc(a&this.Ga,b&255,a)};f.Kb=function(a,b){var c=a&this.Ga,d=(a&this.Db)>>>this.Ca;c!=this.Ga?this.na[d].ui(c,b&65535,a):(this.na[d++].Fc(c,b&255,a),this.na[d&this.td].Fc(0,b>>8&255,a+1))};
            function lc(a,b,c){var d=b&a.Ga,e=(b&a.Db)>>>a.Ca;d!=a.Ga?a.na[e].an(d,c&65535,b):(a.na[e++].ti(d,c&255,b),a.na[e&a.td].ti(0,c>>8&255,b+1))}f.Ak=function(a,b){var c=a&this.Ga,d=(a&this.Db)>>>this.Ca;if(c<this.Ga-2)this.na[d].Oe(c,b);else{var e,g=(c&3)<<3,c=c&-4;e=this.na[d].Ec(c,a);this.na[d].Oe(c,e&~(-1<<g)|b<<g,a);d=d+1&this.td;a+=3;e=this.na[d].Ec(0,a);this.na[d].Oe(0,e&-1<<g|b>>>32-g,a)}};
            function mc(a){for(var b=0,c=[],d=0;d<a.Ae;d++){var e=a.na[d];if(e.Ta||e.On){c[b++]=d;var g=b++;a:if(e=e.save()){for(var l=0,p=0,v=[];l<e.length;){for(var w=e[l],F=l+1;F<e.length&&e[F]===w;)F++;v[p++]=F-l;v[p++]=w;l=F}if(v.length<e.length){e=v;break a}}c[g]=e}}c[b]=!a.lg&&a.Vh==a.Db;return c}function nc(a,b){if(void 0===b)return a.Qh=!a.Qh,a.Qh;void 0===a.le[b]&&(a.le[b]=[null,null,!1]);a.le[b][2]=!a.le[b][2];return a.le[b][2]}
            function oc(a,b,c,d){void 0===d&&(d=0);for(var e in c){var g=a,l=+e+d,p=b,v=c[e];if(void 0!==v)for(var w=+e+d;w<=l;w++)void 0!==g.le[w]?Ba("Input port "+ga(w)+" registered by "+g.le[w][0].id+", ignoring "+p.id):g.le[w]=[p,v,!1,!1]}}function pc(a,b,c){var d=255,e=a.le[b];void 0!==e?(e[1]&&(c=e[1].call(e[0],b,c),void 0!==c&&(d=c)),a.Y&&a.Qh!=e[2]&&qc(a.Y,b,d)):a.Y&&(lb(a.Y,a,b,null,c),a.Qh&&qc(a.Y,b,d));return d}
            function rc(a,b){if(void 0===b)return a.Rh=!a.Rh,a.Rh;void 0===a.me[b]&&(a.me[b]=[null,null,!1]);a.me[b][2]=!a.me[b][2];return a.me[b][2]}function sc(a,b,c,d){void 0===d&&(d=0);for(var e in c){var g=a,l=+e+d,p=b,v=c[e];if(void 0!==v)for(var w=+e+d;w<=l;w++)void 0!==g.me[w]?Ba("Output port "+ga(w)+" registered by "+g.me[w][0].id+", ignoring "+p.id):g.me[w]=[p,v,!1,!1]}}
            function tc(a,b,c,d){var e=a.me[b];void 0!==e?(e[1]&&e[1].call(e[0],b,c,d),a.Y&&a.Rh!=e[2]&&uc(a.Y,b,c)):a.Y&&(lb(a.Y,a,b,c,d),a.Rh&&uc(a.Y,b,c))}function fc(a,b,c){Ba("Memory block error ("+a+","+h(b)+","+h(c)+")");return!1}var vc;if(rb){var wc=new ArrayBuffer(2);(new DataView(wc)).setUint16(0,256,!0);vc=256===(new Uint16Array(wc))[0]}else vc=!1;var xc=vc;
            function t(a,b,c,d,e,g){this.id=yc+=2;this.ea=null;this.offset=0;this.Ba=a;this.gg=b;this.size=c||0;this.type=d||zc;this.ee=d==Ac;this.Z=null;this.O=g;this.Ta=this.On=!1;Bc(this);if(c)if(e)this.Z=e,a=e.$n(a),this.ea=a[0],this.offset=a[1],this.Sd(e.ul());else if(rb)this.buffer=new ArrayBuffer(c),this.hf=new DataView(this.buffer,0,c),this.Wb=new Uint8Array(this.buffer,0,c),this.Gi=new Uint16Array(this.buffer,0,c>>1),this.ea=new Int32Array(this.buffer,0,c>>2),this.Sd(xc?Cc:Dc);else{this.ea=Array(c>>
            2);for(e=0;e<this.ea.length;e++)this.ea[e]=0;this.Sd(Ec)}else this.Sd()}var zc=0,Ac=2,Fc="NONE RAM ROM VIDEO H/W UNPAGED PAGED".split(" "),Gc=["black","blue","green","cyan"],yc=0;function Hc(a){rb&&!xc&&(a=a<<24|a<<8&16711680|a>>8&65280|a>>>24);return a}
            t.prototype={constructor:t,parent:null,clone:function(a,b){this.id=a.id|1;this.gg=a.gg;this.size=a.size;b&&(this.type=b,this.ee=b==Ac);rb?(this.buffer=a.buffer,this.hf=a.hf,this.Wb=a.Wb,this.Gi=a.Gi,this.ea=a.ea,this.Sd(xc?Cc:Dc)):(this.ea=a.ea,this.Sd(Ec))},save:function(){var a,b;if(this.Z)a=null;else if(rb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.hf.getInt32(b<<2,!0);else a=this.ea;return a},restore:function(a){if(this.Z)return null==a;if(a&&this.size==a.length<<2){var b;if(rb)for(b=
            0;b<a.length;b++)this.hf.setInt32(b<<2,a[b],!0);else this.ea=a;return this.Ta=!0}return!1},Sd:function(a){a||(a=5==this.type?Ic:6==this.type?Jc:Lc);Mc(this,a,!0);Nc(this,a,!0)},Xe:function(a,b){this.Y&&(b?0===this.Cn++&&Nc(this,Oc):0===this.zn++&&Mc(this,Oc))},Go:function(){this.Y&&this.Y.qa(128)&&this.Y.message("attempt to read invalid block %"+h(this.Ba),!0);return 255},Af:function(a,b){this.Y&&this.Y.qa(128)&&this.Y.message("attempt to write "+ga(b)+" to invalid block %"+h(this.Ba),!0)},Ho:function(a,
            b){return this.tc(a,b)|this.tc(a+1,b)<<8},Eo:function(a,b){return this.tc(a,b)|this.tc(a+1,b)<<8|this.tc(a+2,b)<<16|this.tc(a+3,b)<<24},$o:function(a,b){this.Fc(a,b&255);this.Fc(a+1,b>>8)},Yo:function(a,b){this.Fc(a,b&255);this.Fc(a+1,b>>8&255);this.Fc(a+2,b>>16&255);this.Fc(a+3,b>>>24)},rs:function(a){return this.ea[a>>2]>>>((a&3)<<3)&255},Ds:function(a){var b=a>>2;a=(a&3)<<3;var c=this.ea[b]>>a;return 24>a?c&65535:c&255|(this.ea[b+1]&255)<<8},xs:function(a){var b=a>>2;a=(a&3)<<3;var c=this.ea[b];
            a&&(c=c>>>a|this.ea[b+1]<<32-a);return c},Qs:function(a,b){var c=a>>2,d=(a&3)<<3;this.ea[c]=this.ea[c]&~(255<<d)|b<<d;this.Ta=!0},bt:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.ea[c]=this.ea[c]&~(65535<<d)|b<<d:(this.ea[c]=this.ea[c]&16777215|b<<24,c++,this.ea[c]=this.ea[c]&-256|b>>8);this.Ta=!0},Ws:function(a,b){var c=a>>2,d=(a&3)<<3;if(d){var e=-1<<d;this.ea[c]=this.ea[c]&~e|b<<d;c++;this.ea[c]=this.ea[c]&e|b>>>32-d}else this.ea[c]=b;this.Ta=!0},ps:function(a,b){this.Y&&Pc(this.Y,b);return this.Yg(a,
            b)},Bs:function(a,b){this.Y&&(Pc(this.Y,b)||Pc(this.Y,b+1));return this.Nm(a,b)},vs:function(a,b){this.Y&&(Pc(this.Y,b)||Pc(this.Y,b+1)||Pc(this.Y,b+2)||Pc(this.Y,b+3));return this.Fo(a,b)},Os:function(a,b,c){this.Y&&Qc(this.Y,c);this.ee?this.Af(a,b,c):this.ti(a,b,c)},$s:function(a,b,c){this.Y&&(Qc(this.Y,c)||Qc(this.Y,c+1));this.ee?this.Af(a,b,c):this.an(a,b,c)},Us:function(a,b,c){this.Y&&(Qc(this.Y,this.Ba+a)||Qc(this.Y,this.Ba+a+1)||Qc(this.Y,this.Ba+a+2)||Qc(this.Y,this.Ba+a+3));this.ee?this.Af(a,
            b,c):this.Zo(a,b,c)},ss:function(a,b){this.kd.ea[this.qd]|=this.qe;this.ld.ea[this.rd]|=this.qe;return this.sg.tc(a,b)},Es:function(a,b){this.kd.ea[this.qd]|=this.qe;this.ld.ea[this.rd]|=this.qe;return this.sg.ji(a,b)},ys:function(a,b){this.kd.ea[this.qd]|=this.qe;this.ld.ea[this.rd]|=this.qe;return this.sg.Ec(a,b)},Rs:function(a,b,c){this.kd.ea[this.qd]|=this.qe;this.ld.ea[this.rd]|=this.Wk;this.sg.Fc(a,b,c)},ct:function(a,b,c){this.kd.ea[this.qd]|=this.qe;this.ld.ea[this.rd]|=this.Wk;this.sg.ui(a,
            b,c)},Xs:function(a,b,c){this.kd.ea[this.qd]|=this.qe;this.ld.ea[this.rd]|=this.Wk;this.sg.Oe(a,b,c)},ts:function(a,b){return(Rc(this.O,b,!1)||this).tc(a,b)},Fs:function(a,b){return(Rc(this.O,b,!1)||this).ji(a,b)},zs:function(a,b){return(Rc(this.O,b,!1)||this).Ec(a,b)},Ss:function(a,b,c){(Rc(this.O,c,!0)||this).Fc(a,b,c)},dt:function(a,b,c){(Rc(this.O,c,!0)||this).ui(a,b,c)},Ys:function(a,b,c){(Rc(this.O,c,!0)||this).Oe(a,b,c)},os:function(a){return this.Wb[a]},qs:function(a){return this.Wb[a]},As:function(a){return this.hf.getUint16(a,
            !0)},Cs:function(a){return a&1?this.Wb[a]|this.Wb[a+1]<<8:this.Gi[a>>1]},us:function(a){return this.hf.getInt32(a,!0)},ws:function(a){return a&3?this.Wb[a]|this.Wb[a+1]<<8|this.Wb[a+2]<<16|this.Wb[a+3]<<24:this.ea[a>>2]},Ns:function(a,b){this.Wb[a]=b;this.Ta=!0},Ps:function(a,b){this.Wb[a]=b;this.Ta=!0},Zs:function(a,b){this.hf.setUint16(a,b,!0);this.Ta=!0},at:function(a,b){a&1?(this.Wb[a]=b,this.Wb[a+1]=b>>8):this.Gi[a>>1]=b;this.Ta=!0},Ts:function(a,b){this.hf.setInt32(a,b,!0);this.Ta=!0},Vs:function(a,
            b){a&3?(this.Wb[a]=b,this.Wb[a+1]=b>>8,this.Wb[a+2]=b>>16,this.Wb[a+3]=b>>24):this.ea[a>>2]=b;this.Ta=!0}};function Sc(a,b){a.Y&&(b?0===--a.Cn&&(a.Fc=a.ee?a.Af:a.ti,a.ui=a.ee?a.Af:a.an,a.Oe=a.ee?a.Af:a.Zo):0===--a.zn&&(a.tc=a.Yg,a.ji=a.Nm,a.Ec=a.Fo))}function Bc(a,b,c,d,e,g){a.sg=b;a.kd=c;a.qd=d>>2;a.ld=e;a.rd=g>>2;a.Wk=b?Hc(Tc|Uc):0;a.qe=b?Hc(Tc):0}function gc(a,b,c,d){a.Y=b;a.zn=a.Cn=0;Vc(a.Y,c,d)}
            function Nc(a,b,c){a.Fc=!a.ee&&b[3]||a.Af;a.ui=!a.ee&&b[4]||a.$o;a.Oe=!a.ee&&b[5]||a.Yo;c&&(a.ti=b[3]||a.Af,a.an=b[4]||a.$o,a.Zo=b[5]||a.Yo)}function Mc(a,b,c){a.tc=b[0]||a.Go;a.ji=b[1]||a.Ho;a.Ec=b[2]||a.Eo;c&&(a.Yg=b[0]||a.Go,a.Nm=b[1]||a.Ho,a.Fo=b[2]||a.Eo)}
            var Lc=[],Ec=[t.prototype.rs,t.prototype.Ds,t.prototype.xs,t.prototype.Qs,t.prototype.bt,t.prototype.Ws],Oc=[t.prototype.ps,t.prototype.Bs,t.prototype.vs,t.prototype.Os,t.prototype.$s,t.prototype.Us],Jc=[t.prototype.ss,t.prototype.Es,t.prototype.ys,t.prototype.Rs,t.prototype.ct,t.prototype.Xs],Ic=[t.prototype.ts,t.prototype.Fs,t.prototype.zs,t.prototype.Ss,t.prototype.dt,t.prototype.Ys];
            if(rb)var Dc=[t.prototype.os,t.prototype.As,t.prototype.us,t.prototype.Ns,t.prototype.Zs,t.prototype.Ts],Cc=[t.prototype.qs,t.prototype.Cs,t.prototype.ws,t.prototype.Ps,t.prototype.at,t.prototype.Vs];
            function Wc(a,b){Ua.call(this,"CPU",a,Wc,1);var c=a.cycles||b,d=a.multiplier||1;this.T={};this.T.ge=c;this.T.Ce=d;this.T.jj=Math.round(this.T.ge/1E4)/100;this.T.Uh=this.T.jj*this.T.Ce;this.fa.qb=!1;this.fa.ql=!1;this.fa.hl=a.autoStart;this.fa.Pn=!1;c=Ya.autostart;void 0!==c&&(this.fa.hl="true"==c?!0:"false"==c?!1:null);this.fa.Ag=!1;this.T.Wh=this.T.Og=0;this.T.Xh=a.csStart;this.T.Ng=a.csInterval;this.T.Pg=a.csStop;this.Cd=[];var e=this;this.jr=function(){e.ag()};ob(this)}eb(Wc);f=Wc.prototype;
            f.Kc=function(a,b,c,d){this.ma=b;this.Y=d;this.Fa=a;for(b=null;b=xb(a,"Video",b);)this.Cd.push(b);this.ja=xb(a,"ChipSet");ob(this)};f.reset=function(){};f.save=function(){return null};f.restore=function(){return!1};f.lc=function(a,b){if(!b){if(a&&this.restore){Xc(this);if(!this.restore(a))return!1;Yc(this)}else this.reset();this.Y?this.Y.Jq():this.R("No debugger detected")}Zc(this);return!0};f.kc=function(a){return a&&this.save?this.save():!0};
            function $c(a){(!0===a.fa.hl||null===a.fa.hl&&!a.Y&&void 0===a.va.run)&&a.ag()}f.Zn=function(){return 0};function Yc(a){void 0===a.T.Xh&&(a.T.Xh=0);void 0===a.T.Ng&&(a.T.Ng=-1);void 0===a.T.Pg&&(a.T.Pg=-1);a.fa.Ag=0<=a.T.Xh&&0<a.T.Ng;a.fa.Ag&&(a.T.Wh=0,a.T.Og=a.T.Xh-a.Xf)}function ad(a,b){if(a.fa.Ag){var c=!1;a.T.Wh=a.T.Wh+a.Zn()|0;a.T.Og-=b;0>=a.T.Og&&(a.T.Og+=a.T.Ng,c=!0);0<=a.T.Pg&&a.T.Pg<=cd(a)&&(a.T.Ng=a.T.Pg=-1,Yc(a),a.zb(),c=!0);c&&a.R(cd(a)+" cycles: checksum="+h(a.T.Wh))}}
            f.zd=function(){this.Fa&&this.Fa.Ge&&this.Fa.Ge.zd()};
            function dd(a){for(var b=0;b<a.Cd.length;b++)ed(a.Cd[b]);if(a.Fa&&a.Fa.Ge&&(a=a.Fa.Ge,a.Cp)){Cb(a,18,a.Dh,a.op,a.canvas.style.color);if(a.nu){var b=a.ma,c=a.mb,d,e;null==d&&(d=0);null==e&&(e=b.Mk-d|0);null==c&&(c={$k:0,re:0,Gk:[]});var g=d>>>b.Ca;d=d+e-1>>>b.Ca;c.$k=0;for(c.re=0;g<=d;)e=b.na[g],c.$k+=e.size,e.size&&(c.Gk.push(va(Ab,g,0,0,e.type)),c.re++),g++;a.mb=c;a.Do=a.mb.re*a.ma.nb/691200;b=0;a.mb.An=0;a.mb.sh||(a.mb.sh=[]);c=-1;d=0;var l=-1;for(e=0;e<a.mb.re;e++){var p=a.mb.Gk[e],g=wa(Ab.type,
            p),p=wa(Ab.Ao,p);if(g!=c||p!=l+1)(l=e-d)&&(b+=Xb(a,d,l,c)),c=g,d=e;l=p}b+=Xb(a,d,e-d,c);c=a.mb.mp!=b;a.mb.mp=b;if(c){c=new vb(0,0,a.Dh.width,a.Dh.height);a.mb.og=[];d=a.mb.re;for(b=0;b<a.mb.An;b++)e=a.mb.sh[b].re,a.mb.og.push(wb(c,e,d,!b)),d-=e;for(b=0;b<a.mb.og.length;b++)c=a.mb.sh[b],d=e=a.mb.og[b],g=a.op,(l=Gc[c.type])||(l=new ub),g.strokeStyle="black",g.strokeRect(d.x,d.y,d.Xc,d.nd),g.fillStyle="string"==typeof l?l:l.toString(),g.fillRect(d.x,d.y,d.Xc,d.nd),d=a,g=e,d.hj=d.Yn,d.Ig=d.bo,e=g.x+(g.Xc>>
            1),l=g.y+(g.nd>>1),p=g.nd,g.Xc<g.nd&&(p=g.Xc,d.Wn=!0,d.$d.save(),d.$d.translate(e,l),d.$d.rotate(-Math.PI/2),e=l=0),p<d.Ig&&(d.Ig=p,d.hj=d.Ig+"px Monaco, Lucida Console, Courier New"),g=l,d.Ad=e,d.kg=g,d=a,c=Fc[c.type]+" ("+(c.re*a.ma.nb/1024|0)+"Kb)",d.$d.font=d.hj,d.Ad-=d.$d.measureText(c).width>>1,d.kg+=(d.Ig>>1)-2,Eb(d,c),d.Wn&&(d.$d.restore(),d.Wn=!1)}}else Eb(a,"This space intentionally left blank");a.Wi.drawImage(a.Dh,0,0,a.Dh.width,a.Dh.height,a.Hu,a.Ku,a.fu,a.iu);a.Cp=!1}}
            f.ed=function(){this.Cd.length&&this.Cd[0].ed()};
            f.Nb=function(a,b,c){var d=this;a=!1;switch(b){case "run":this.va[b]=c;c.onclick=function(){var a;if(a=d.Fa)if(a=d.Fa,a.fa.jc)a=!0;else{var b=null,c,p=fb(a.id);for(c=0;c<p.length&&(b=p[c],b===a||b.fa.Dg);c++);if(c==p.length)for(c=0;c<p.length&&(b=p[c],b===a||b.fa.jc);c++);c==p.length&&(b=a);Ba("The "+b.type+" component ("+b.id+") is not "+(b.fa.Dg?"powered yet":"ready yet"+(b.gj?" (waiting for notification)":""))+".");a=!1}a&&(d.fa.qb?d.zb(!0):d.ag(!0))};a=!0;break;case "reset":this.va[b]=c;c.onclick=
            function(){d.Fa&&fd(d.Fa)};a=!0;break;case "speed":this.va[b]=c;a=!0;break;case "setSpeed":this.va[b]=c,c.onclick=function(){gd(d,d.T.Ce<<1,!0)},c.textContent=Ib(this),a=!0}return a};function hd(a,b){if(a.fa.qb){var c=a.A-b;a.A-=c;a.ud-=c}}function id(a,b,c){a.Xf+=b;c&&(a.ud=a.A=0)}
            function jd(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.T.Ce&&a.T.nf&&(d=a.T.nf/a.T.jj);a.T.mo=Math.round(1E3/30);a.T.Zq=Math.floor(a.T.ge/c*d);a.T.Dl=Math.floor(a.T.ge/30*d);a.T.ro=Math.floor(a.T.ge/60*d);a.T.qo=Math.floor(a.T.ge/2*d);b||(a.T.Qg=a.T.Dl,a.T.Zh=a.T.ro,a.T.Yh=a.T.qo);a.T.El=0}function cd(a,b){var c=a.Xf+a.rf+a.ud-a.A;b&&1<a.T.Ce&&a.T.nf>a.T.jj&&(c=Math.round(c/a.T.Ce));return c}function Xc(a){a.T.nf=0;a.Xf=a.rf=a.ud=a.A=0;Yc(a);gd(a,1)}
            function Kb(a){return a.fa.qb&&a.T.nf?a.T.nf.toFixed(2)+"Mhz":"Stopped"}function Ib(a){return a.T.Uh.toFixed(2)+"Mhz"}function gd(a,b,c){if(void 0!==b){.8>a.T.nf/a.T.Uh&&(b=1);a.T.Ce=b;b=a.T.jj*a.T.Ce;if(a.T.Uh!=b){a.T.Uh=b;b=Ib(a);var d=a.va.setSpeed;d&&(d.textContent=b);a.R("target speed: "+b)}c&&a.ed()}id(a,a.rf);a.rf=0;a.T.Mg=ra();a.T.Uf=0;jd(a)}
            f.ag=function(a){if(mb(this,!0)){if(!this.fa.qb){gd(this);this.Fa&&this.Fa.start(this.T.Mg,cd(this));this.fa.qb=!0;this.fa.ql=!0;this.ja&&kd(this.ja);var b=this.va.run;b&&(b.textContent="Halt");this.zd(!0);a&&this.ed()}this.T.El>=this.T.ge&&jd(this,!0);this.T.$h=0;this.T.kj=ra();this.T.Uf&&(a=this.T.kj-this.T.Uf,a>this.T.mo&&(this.T.Mg+=a,this.T.Mg>this.T.kj&&(this.T.Mg=this.T.kj)));try{do{var c=this.fa.Ag?1:this.T.Zq;if(this.ja){ld(this.ja);var d=this.ja;a=c;var e=d.Pb[0];if(e.Rf){var g=(cd(d.O,
            d.jf)-e.Od)/d.ik|0,l=md(d,0)-g;6==e.mode&&(l-=g);var p=l*d.ik|0;6==e.mode&&(p>>=1);a>p&&(a=p)}var c=a,v=this.ja;a=c;if(v.ga&&v.ga[11]&64){var w=v.Xg-cd(v.O,v.jf);0<w&&a>w&&(a=w)}c=a}this.kh(c);var F=this.ud-this.A;this.rf+=F;this.T.$h+=F;id(this,0,!0);ad(this,F);this.T.Zh-=F;0>=this.T.Zh&&(this.T.Zh+=this.T.ro,dd(this));this.T.Yh-=F;0>=this.T.Yh&&(this.T.Yh+=this.T.qo,this.zd());this.T.Qg-=F;if(0>=this.T.Qg){this.T.Qg+=this.T.Dl;break}}while(this.fa.qb)}catch(K){this.zb();Zc(this);this.Fa&&this.Fa.stop(ra(),
            cd(this));mb(this,!1);qb(this,K.stack||K.message);return}c=setTimeout;d=this.jr;this.T.Uf=ra();e=this.T.mo;this.T.$h&&(e=Math.round(e*this.T.$h/this.T.Dl));e-=this.T.Uf-this.T.kj;if(g=this.T.Uf-this.T.Mg)this.T.nf=Math.round(this.rf/(10*g))/100,864E5<=g&&(this.Xf=0,this.ja&&ld(this.ja,!0),gd(this));if(0>e||this.T.nf<this.T.Uh)e=0;this.T.El+=this.T.$h;this.T.Uf+=e;c(d,e)}else Zc(this),this.Fa&&this.Fa.stop(ra(),cd(this))};f.kh=function(){return 0};
            f.zb=function(a){nb(this,!0);this.ud-=this.A;this.A=0;id(this,this.rf);this.rf=0;if(this.fa.qb){this.fa.qb=!1;this.ja&&kd(this.ja);var b=this.va.run;b&&(b.textContent="Run")}this.fa.we=a};function Zc(a){dd(a);a.zd()}var Lb=80386,n=-1,Wb=1,Vb=4,Ub=16,Tb=64,Sb=128,Rb=256,Qb=512,Pb=1024,Ob=2048,Uc=64,Tc=32,nd=Rb|Qb|Pb,od=Wb|Vb|Ub|Tb|Sb|Ob,pd=Wb|Vb|Ub|Tb|Sb;
            function qd(a,b,c,d){this.O=a;this.Y=a.Y;this.id=b;this.qi=c||"";this.ia=0;this.gb=65535;this.tf=this.gb+1;this.Pa=this.Bc=this.Lh=this.Rb=this.type=this.ya=0;this.Ed=n;this.pa=this.Hd=2;this.C=this.V=65535;this.rn=this.id==rd?Array(32):[];this.jl=null;this.fj=!1;sd(this,!0,d)}var rd=1;f=qd.prototype;f.Rq=function(a){this.ia=a&65535;return this.ya=this.ia<<4};
            f.Qq=function(a,b){var c,d,e=this.O;a&=65535;a&4?(c=e.yd.ya,d=c+e.yd.gb|0):(c=e.Fd,d=e.Cf);if(!b||c){c=c+(a&65528)|0;if(d-c|0)return b||(e.A-=15),td(this,c,a,b);b||ud.call(e,13,a)}return n};f.Pq=function(a){var b=this.O;a=b.Gd+(a<<2);var c=b.ra(a);b.aa&=~(Rb|Qb);return this.load(b.ra(a+2))+c|0};f.Oq=function(a){var b=this.O;a<<=3;var c=b.Gd+a|0;if(7<=(b.Ye-c|0))return td(this,c,a)+b.Qm;ud.call(b,13,a|3,!0);return n};f.jp=function(a){return this.ya+a|0};f.lp=function(a){return this.ya+a|0};
            f.En=function(a,b,c){return(a>>>0)+b<=this.tf?this.ya+a|0:this.Ti(0,0,c)};f.ip=function(a,b,c){return(a>>>0)+b>this.tf?this.ya+a|0:this.Ti(0,0,c)};f.Ti=function(a,b,c){c||ud.call(this.O,13,0);return n};f.Fn=function(a,b,c){return(a>>>0)+b<=this.tf?this.ya+a|0:this.Ui(0,0,c)};f.kp=function(a,b,c){return(a>>>0)+b>this.tf?this.ya+a|0:this.Ui(0,0,c)};f.Ui=function(a,b,c){c||ud.call(this.O,13,0);return n};
            function vd(a,b,c){var d=a.O,e=d.ra(b+2),g=d.ra(b)|(e&255)<<16,d=d.ra(b+4);a.ia=c;a.ya=g;a.gb=d;a.tf=(d>>>0)+1;a.Rb=e;a.type=e&7936;a.Lh=0;a.Ed=b;sd(a,!0)}
            function td(a,b,c,d){var e=a.O,g=e.ra(b+0),l=e.ra(b+4),p=l&7936,v=e.ra(b+2)|(l&255)<<16,w=e.ra(b+6),F=c&65528;e.ka>=Lb&&(v|=(w&65280)<<16,g|=(w&15)<<16,w&128&&(g=g<<12|4095));for(;;){var K,J,I;if(a.id==rd){a.fj=!1;K=a.jl;var T,Z;I=c&3;var S=(l&24576)>>13;if(F&&!(l&32768)){d||ud.call(e,11,c);v=n;break}if(6144<=p){I=c&3;if(I>a.Pa){if(!1!==K&&!(S==a.Pa||p&1024&&S<=a.Pa)){v=n;break}F=e.Ka();wd(e,e.Ka(),!0);u(e,F);a.fj=!0}T=!1}else{if(256==p){if(!xd(a,c,K)){v=n;break}return a.ya}if(1024==p)T=!0,Z=-1,J=
            c,I<a.Pa&&(I=a.Pa);else if(1536==p)T=!0,Z=~(16384|Rb|Qb),J=c|1;else if(1792==p)T=!0,Z=~(16384|Rb),J=c|1;else if(1280==p){if(!xd(a,v&65535,K)){v=n;break}return a.ya}}if(T){b=v&65535;if(I<=S){d=a.Pa;if(a.load(b,!0)===n){v=n;break}e.Qm=g;if(a.Pa<d){if(!0!==K){v=n;break}F=r(e);g=0;for(l&=31;l--;)a.rn[g++]=yd(e,e.ua,F),F+=2;l=e.cb.ya;K=(a.Pa<<2)+2;d=K+2;I=e.ua.ia;J=r(e);wd(e,e.ra(l+d),!0);u(e,e.ra(l+K));zd(e,I);for(zd(e,J);g;)zd(e,a.rn[--g]);a.fj=!0}e.aa&=Z;return a.ya}d||ud.call(e,13,J,!0);v=n;break}else if(!1!==
            T){d||ud.call(e,13,c,!0);v=n;break}}else if(2==a.id){if(F){if(!(l&32768)){d||ud.call(e,11,c);v=n;break}if(4096>p||2048==(p&2560)){d||ud.call(e,13,c,!!l);v=n;break}}}else if(3==a.id){if(!(l&32768)){d||ud.call(e,12,c);v=n;break}if(!F||4096>p||512!=(p&2560)){d||ud.call(e,13,c,!0);v=n;break}}else if(4==a.id){if(!F||256!=p&&768!=p){d||ud.call(e,10,c,!0);v=n;break}}else if(6==a.id&&!(p&4096)&&768<p){v=n;break}a.ia=c;a.ya=v;a.gb=g;a.tf=(g>>>0)+1;a.Rb=l;a.type=p;a.Lh=w;a.Ed=b;sd(a,!0);break}return v}
            function xd(a,b,c){var d=a.O,e=d.cb.ya,g=a.Pa,l=d.cb.ia;if(!c){if(768!=d.cb.type)return ud.call(d,10,b,!0),!1;d.Kb(d.cb.Ed+4,d.cb.Rb&-769|256)}if(d.cb.load(b)===n)return!1;var p=d.cb.ya;if(!1===c){if(768!=d.cb.type)return ud.call(d,13,b,!0),!1}else{if(768==d.cb.type)return ud.call(d,13,b,!0),!1;d.Kb(d.cb.Ed+4,d.cb.Rb|=768);d.cb.type=768}d.Kb(e+14,q(d));d.Kb(e+16,Nb(d));d.Kb(e+18,d.F);d.Kb(e+20,d.G);d.Kb(e+22,d.H);d.Kb(e+24,d.D);d.Kb(e+26,r(d));d.Kb(e+28,d.L);d.Kb(e+30,d.K);d.Kb(e+32,d.J);d.Kb(e+34,
            d.Ma.ia);d.Kb(e+36,d.ta.ia);d.Kb(e+38,d.ua.ia);d.Kb(e+40,d.bb.ia);d.yd.load(d.ra(p+42));Bd(d,d.ra(p+16)|(c?16384:0));d.F=d.ra(p+18);d.G=d.ra(p+20);d.H=d.ra(p+22);d.D=d.ra(p+24);d.L=d.ra(p+28);d.K=d.ra(p+30);d.J=d.ra(p+32);d.Ma.load(d.ra(p+34));d.bb.load(d.ra(p+40));Cd(d,d.ra(p+14),d.ra(p+36));b=38;e=26;a.Pa<g&&(e=(a.Pa<<2)+2,b=e+2);wd(d,d.ra(p+b),!0);u(d,d.ra(p+e));c&&d.Kb(p+0,l);d.hb|=8;return!0}
            f.save=function(){return[this.ia,this.ya,this.gb,this.Rb,this.id,this.qi,this.Pa,this.Bc,this.Ed,this.Hd,this.V,this.pa,this.C,this.type,this.tf]};f.restore=function(a){"number"==typeof a?this.load(a):(this.ia=a[0],this.ya=a[1],this.gb=a[2],this.Rb=a[3],this.id=a[4],this.qi=a[5],this.Pa=a[6],this.Bc=a[7],this.Ed=a[8],this.Hd=a[9]||2,this.V=a[10]||65535,this.pa=a[11]||2,this.C=a[12]||65535,this.type=a[13]||this.Rb&7936,this.tf=a[14]||(this.gb>>>0)+1)};
            function sd(a,b,c){void 0===c&&(c=!!(a.O.hb&1));a.Bg=!1;if(c){a.load=a.Qq;a.io=a.Oq;a.Ac=a.En;a.oc=a.Fn;if(!(a.ia&-4))a.Ac=a.Ti,a.oc=a.Ui;else if(a.type&4096){6144==(a.type&6656)&&(a.Ac=a.Ti);if(a.type&2048||!(a.type&512))a.oc=a.Ui;1024==(a.type&3072)&&(a.Ac==a.En&&(a.Ac=a.ip),a.oc==a.Fn&&(a.oc=a.kp),a.Bg=!0)}b&&(a.ia&-4&&a.Ed!==n&&(b=a.Ed+5,a.O.dd(b,a.O.Qa(b)|1)),a.Pa=a.ia&3,a.Bc=(a.Rb&24576)>>13,a.O.ka<Lb||!(a.Lh&64)?(a.pa=2,a.C=65535):(a.pa=4,a.C=-1),a.Hd=a.pa,a.V=a.C)}else a.load=a.Rq,a.io=a.Pq,
            a.Ac=a.jp,a.oc=a.lp,a.Pa=a.Bc=0,a.Ed=n}
            function Dd(a){this.ka=a.model||8088;var b=0;switch(this.ka){default:b=4772727;break;case 80286:b=6E6;break;case Lb:b=16E6}Wc.call(this,a,b);this.fn=61442;this.wi=nd;this.vi=4;this.Hb=255;this.B=this.ka==Lb?Ed:80286==this.ka?Fd:Gd;this.Oa=Id;this.jn=Jd;this.kn=Kd;this.ln=Ld;if(80186<=this.ka&&(this.Oa=Id.slice(),this.jn=Jd.slice(),this.kn=Kd.slice(),this.Hb=31,this.Oa[15]=Md,this.Oa[96]=Nd,this.Oa[97]=Od,this.Oa[98]=Pd,this.Oa[99]=Md,this.Oa[100]=Md,this.Oa[101]=Md,this.Oa[102]=Md,this.Oa[103]=Md,
            this.Oa[104]=Qd,this.Oa[105]=Rd,this.Oa[106]=Sd,this.Oa[107]=Td,this.Oa[108]=Ud,this.Oa[109]=Vd,this.Oa[110]=Wd,this.Oa[111]=Xd,this.Oa[192]=Yd,this.Oa[193]=Zd,this.Oa[200]=$d,this.Oa[201]=ae,this.Oa[241]=be,this.jn[7]=ce,this.kn[7]=ce,80286<=this.ka)){this.fn=2;this.wi|=28672;this.vi=0;this.Oa[15]=de;this.rh=ee.slice();for(a=0;a<this.rh.length;a++)this.rh[a]||(this.rh[a]=fe);this.Oa[84]=ge;this.Oa[99]=he;if(this.ka>=Lb){var c;this.Oa[100]=ie;this.Oa[101]=je;this.Oa[102]=ke;this.Oa[103]=le;for(c in x)this.rh[+c]=
            x[c]}}this.zi=[];this.Ai=[];this.ud=this.Bh=0;this.fa.we=this.fa.Nn=!1;this.yn=0;this.Se=this.na=[];this.Ca=this.nb=this.Ga=this.Ae=this.td=this.Db=this.Ee=0;me(this)}eb(Dd,Wc);
            var Gd={gi:4,N:5,da:6,ba:7,ca:8,I:9,P:11,Q:12,pf:4,Gl:60,Hl:83,bc:3,Gb:9,rc:16,di:1,Ol:19,Ql:28,Sl:16,Rl:21,Pl:37,Ml:2,yj:9,Nl:5,Ll:33,Aj:10,zj:8,Tg:3,Sg:15,fm:51,gm:1,hm:2,im:4,em:32,Bj:15,km:15,Ha:16,Ia:4,mm:11,lm:18,jm:24,Ob:4,nm:2,Vf:16,om:17,Gj:18,pm:19,Fj:5,Hj:6,um:2,tm:8,rm:9,sm:10,qm:10,Ij:10,Jj:10,Ul:80,Wl:144,Tl:86,Vl:154,Yl:101,$l:165,Xl:107,Zl:171,wm:70,ym:113,vm:76,xm:124,bm:80,dm:128,am:86,cm:134,Vg:3,Ug:16,Qj:10,Pj:8,zm:51,cc:8,Am:17,Bm:36,Cc:11,Cm:16,qf:10,bd:2,vj:18,wj:7,xj:15,Cj:12,
            Dj:7,Ej:11,Kj:18,Lj:7,Mj:15,Rj:15,Sj:7,Tj:13,Zj:11,$j:7,ak:8,Dm:8,Gm:12,Em:18,Fm:17,Hm:15,Vj:8,Uj:20,Wj:2,dk:3,Wg:9,ck:5,bk:11,fk:4,ek:17,Im:11},Fd={gi:0,N:0,da:0,ba:0,ca:0,I:0,P:1,Q:1,pf:3,Gl:14,Hl:16,bc:2,Gb:7,rc:7,di:0,Ol:7,Ql:13,Sl:7,Rl:11,Pl:16,Ml:3,yj:6,Nl:2,Ll:13,Aj:5,zj:5,Tg:2,Sg:7,fm:23,gm:0,hm:1,im:3,em:17,Bj:7,km:11,Ha:7,Ia:3,mm:7,lm:11,jm:15,Ob:2,nm:3,Vf:7,om:8,Gj:8,pm:8,Fj:4,Hj:4,um:2,tm:3,rm:5,sm:2,qm:3,Ij:5,Jj:3,Ul:14,Wl:22,Tl:17,Vl:25,Yl:17,$l:25,Xl:20,Zl:28,wm:13,ym:21,vm:16,xm:24,
            bm:13,dm:21,am:16,cm:24,Vg:2,Ug:7,Qj:5,Pj:5,zm:19,cc:5,Am:5,Bm:17,Cc:3,Cm:5,qf:3,bd:0,vj:8,wj:5,xj:9,Cj:5,Dj:5,Ej:4,Kj:5,Lj:5,Mj:4,Rj:7,Sj:5,Tj:8,Zj:3,$j:4,ak:3,Dm:11,Gm:11,Em:15,Fm:15,Hm:7,Vj:5,Uj:8,Wj:0,dk:2,Wg:6,ck:3,bk:6,fk:3,ek:5,Im:5},Ed={gi:0,N:0,da:0,ba:0,ca:0,I:0,P:1,Q:1,pf:3,Gl:14,Hl:16,bc:2,Gb:7,rc:7,di:0,Ol:7,Ql:13,Sl:7,Rl:11,Pl:16,Ml:3,yj:6,Nl:2,Ll:13,Aj:5,zj:5,Tg:2,Sg:7,fm:23,gm:0,hm:1,im:3,em:17,Bj:7,km:11,Ha:7,Ia:3,mm:7,lm:11,jm:15,Ob:2,nm:3,Vf:7,om:8,Gj:8,pm:8,Fj:4,Hj:4,um:2,tm:3,
            rm:5,sm:2,qm:3,Ij:5,Jj:3,Ul:14,Wl:22,Tl:17,Vl:25,Yl:17,$l:25,Xl:20,Zl:28,wm:13,ym:21,vm:16,xm:24,bm:13,dm:21,am:16,cm:24,Vg:2,Ug:7,Qj:5,Pj:5,zm:19,cc:5,Am:5,Bm:17,Cc:3,Cm:5,qf:3,bd:0,vj:8,wj:5,xj:9,Cj:5,Dj:5,Ej:4,Kj:5,Lj:5,Mj:4,Rj:7,Sj:5,Tj:8,Zj:3,$j:4,ak:3,Dm:11,Gm:11,Em:15,Fm:15,Hm:7,Vj:5,Uj:8,Wj:0,dk:2,Wg:6,ck:3,bk:6,fk:3,ek:5,Im:5,vo:11,Kl:6,Il:8,Jl:5,dr:3,br:6,cr:6,xo:9,wo:12,Oj:3,Nj:6,fr:4,er:5,Yj:3,Xj:7};f=Dd.prototype;
            f.xl=function(a,b){this.na=this.Se=a;this.Ca=b;this.nb=1<<this.Ca;this.Ga=this.nb-1;this.Ae=a.length;this.td=this.Ae-1};function ne(a){if(a.na===a.Se){a.na=Array(a.Ae);a.Xk=new t(null,0,0,5,null,a);for(var b=0;b<a.Ae;b++)a.na[b]=a.Xk}else for(b=0;b<a.xi.length;b++)a.na[a.xi[b]]=a.Xk;a.xi=[]}
            function Rc(a,b,c,d){var e=(b&-4194304)>>>20,g=a.Se[(a.uf+e&a.Db)>>>a.Ca],l=g.Ec(e);if(!(l&1))return d||oe.call(a,b,!1,c),null;if(!(l&4)&&3==a.ta.Pa)return d||oe.call(a,b,!0,c),null;var p=(b&4190208)>>>10,l=a.Se[((l&-4096)+p&a.Db)>>>a.Ca],v=l.Ec(p);if(!(v&1||d))return d||oe.call(a,b,!1,c),null;if(!(v&4)&&3==a.ta.Pa)return d||oe.call(a,b,!0,c),null;c=a.Se[((v&-4096)+(b&4095)&a.Db)>>>a.Ca];if(d)return c;d=new t(b&-4096,0,0,6);Bc(d,c,g,e,l,p);b>>>=a.Ca;a.na[b]=d;a.xi.push(b);return d}
            f.reset=function(){this.fa.qb&&this.zb();me(this);Xc(this);this.fa.Ld=!1};
            function me(a){a.F=0;a.D=0;a.G=0;a.H=0;a.je=0;a.L=0;a.K=0;a.J=0;a.Zb=!1;a.ub=a.mc=0;a.Rd=0;a.Li=0;a.hb=65520;a.Gd=0;a.Ye=1023;a.aa=a.uj=0;a.hh=a.oi=a.gh=a.ih=0;a.rj=-1;a.ta=new qd(a,rd,"CS");a.bb=new qd(a,2,"DS");a.Ma=new qd(a,2,"ES");a.ua=new qd(a,3,"SS");u(a,0);wd(a,0);a.ka>=Lb&&(a.H=772,a.hb=16,a.ki=0,a.Yf=0,a.uf=0,a.nn=Array(8),a.on=Array(8),a.xc=new qd(a,2,"FS"),a.yc=new qd(a,2,"GS"));a.To=new qd(a,0,"NULL");a.ha=a.bb;a.la=a.ua;a.S=a.Aa=0;a.X=a.La=n;a.Bb=0;Cd(a,0,65535);if(80286<=a.ka){a.Fd=
            0;a.Cf=65535;a.yd=new qd(a,5,"LDT",!0);a.cb=new qd(a,4,"TSS",!0);a.Tb=new qd(a,6,"VER",!0);Cd(a,65520,61440);var b,c=q(a);b=a.ta;var d=-65536;b.O.ka<Lb&&(d&=16777215);b=b.ya=d;a.sa=b+c|0;a.ni=b+a.ta.gb|0}Bd(a,0);pe(a)}function qe(a){2==a.Hd?(a.$b=a.ra,a.Rc=y,a.fd=re,a.Ve=se,a.Na=z,a.Lb=te,a.Qc=ue):(a.$b=a.fe,a.Rc=A,a.fd=ve,a.Ve=we,a.Na=B,a.Lb=xe,a.Qc=ye)}function ze(a,b){a.pa!=b&&(a.Aa|=4096,a.pa=b,a.C=2==b?65535:-1,Ae(a))}
            function Ae(a){2==a.pa?(a.dataType=32768,a.qc=a.ra,a.dg=a.Kb):(a.dataType=-2147483648,a.qc=a.fe,a.dg=a.Ak)}function Be(a){a.Hd=a.ta.Hd;a.V=a.ta.V;qe(a);a.pa=a.ta.pa;a.C=a.ta.C;Ae(a);a.Aa&=-12289}f.Zn=function(){var a=this.F+this.D+this.G+this.H+r(this)+this.L+this.K+this.J|0;return a=a+q(this)+Mb(this)+this.bb.ia+this.ua.ia+this.Ma.ia+Nb(this)|0};function Ce(a,b,c,d){void 0!==d&&(void 0===a.zi[b]&&(a.zi[b]=[]),a.zi[b].push([c,d]))}
            function De(a,b){var c=a.zi[b];if(void 0!==c)for(var d=0;d<c.length;d++)if(!c[d][1].call(c[d][0],a.sa))return!1;a.fa.Nn&&a.qa(16)&&Ee(a.Y,b,a.sa)&&Fe(a,a.sa,function(a,c){return function(d){Ge(a.Y,b,d,cd(a)-c)}}(a,cd(a)));return!0}function Fe(a,b,c){void 0!==c&&(null==a.Ai[b]&&a.Bh++,a.Ai[b]=c)}function He(a,b){var c=a.Ai[b];null!=c&&(c(--a.Bh),delete a.Ai[b])}
            function pe(a,b){void 0===b&&(b=!!(a.hb&1));!b!=!(a.hb&1)&&a.qa()&&a.ab("CPU switching to "+(b?"protected":"real")+"-mode",a.Yb,!0);a.ln=b?Ie:Ld;sd(a.ta);sd(a.bb);sd(a.ua);sd(a.Ma);a.ka>=Lb&&(sd(a.xc),sd(a.yc),Be(a))}
            f.save=function(){var a=new Je(this);a.set(0,[this.F,this.D,this.G,this.H,r(this),this.L,this.K,this.J]);var b=q(this),c=this.ta.save(),d=this.bb.save(),e=this.ua.save(),g=this.Ma.save(),l;null!=this.Fd?(l=[this.hb,this.Fd,this.Cf,this.Gd,this.Ye,this.yd.save(),this.cb.save(),this.uj],l.push(this.ki),l.push(this.Yf),l.push(this.uf),l.push(this.nn),l.push(this.on)):l=null;b=[b,c,d,e,g,l,Nb(this)];this.ka>=Lb&&(b.push(this.xc.save()),b.push(this.yc.save()));a.set(1,b);a.set(2,[this.ha.qi,this.la.qi,
            this.S,this.Aa,this.Bb,this.X,this.La]);a.set(3,[0,this.Xf,this.T.Ce]);a.set(4,mc(this.ma));return a.data()};
            f.restore=function(a){var b=a[0];this.F=b[0];this.D=b[1];this.G=b[2];this.H=b[3];var c=b[4];this.L=b[5];this.K=b[6];this.J=b[7];b=a[1];this.ta.restore(b[1]);this.bb.restore(b[2]);this.ua.restore(b[3]);this.Ma.restore(b[4]);var d=b[5];d&&d.length&&(this.hb=d[0],this.Fd=d[1],this.Cf=d[2],this.Gd=d[3],this.Ye=d[4],this.yd.restore(d[5]),this.cb.restore(d[6]),this.uj=d[7],this.ka>=Lb&&(this.ki=d[8],this.Yf=d[9],this.uf=d[10],this.nn=d[11],this.on=d[12]),pe(this));Bd(this,b[6]);Cd(this,b[0],this.ta.ia);
            u(this,c);wd(this,this.ua.ia);this.ka>=Lb&&(this.xc.restore(b[7]),this.yc.restore(b[8]));b=a[2];this.ha=null!=b[0]&&Ke(this,b[0])||this.bb;this.la=null!=b[1]&&Ke(this,b[1])||this.ua;this.S=b[2];this.Aa=b[3];this.Bb=b[4];this.X=b[5];this.La=b[6];b=a[3];this.Xf=b[1];gd(this,b[2]);a:{b=this.ma;a=a[4];for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.oo){for(var g=0,l=Array(b.oo),p=0;p<e.length-1;)for(var v=e[p++],w=e[p++];v--;)l[g++]=w;e=l}g=b.na[d];if(!g||!g.restore(e)){Ba("Unable to restore memory block "+
            d);b=!1;break a}}void 0!==a[c]&&dc(b,a[c]);b=!0}return b};function Ke(a,b){switch(b){case "CS":return a.ta;case "DS":return a.bb;case "SS":return a.ua;case "ES":return a.Ma;case "NULL":return a.To;default:return[0,b,0,0,""]}}function Mb(a){return a.ta.ia}function Le(a,b){var c=q(a);a.sa=a.ta.load(b)+c|0;a.ni=a.ta.ya+a.ta.gb|0;Be(a);a.S|=a.vi}function Me(a,b){a.bb.load(b);a.S|=a.vi}
            function wd(a,b,c){var d=r(a);a.Lc=a.ua.load(b)+d|0;a.ua.Bg?(a.tk=a.ua.ya+a.ua.V|0,a.Rm=a.ua.ya+a.ua.gb|0):(a.tk=a.ua.ya+a.ua.gb|0,a.Rm=a.ua.ya);c||(a.S|=4)}function Ne(a,b){a.Ma.load(b);a.S|=a.vi}function q(a){return a.sa-a.ta.ya|0}function C(a,b){a.sa=a.ta.ya+(b&a.C)|0}function Cd(a,b,c,d){a.ta.jl=d;a.Qm=b;b=a.ta.load(c);return b!==n?(a.sa=b+(a.Qm&a.C)|0,a.ni=b+a.ta.gb|0,Be(a),a.ta.fj):null}
            function Pe(a,b){a.sa=a.sa+b|0;var c=a.ni-a.sa|0;0>c&&0<=(a.ni^a.sa)&&(8088>=a.ka||a.ta.gb==a.ta.V?C(a,a.sa-a.ta.ya):-1>c&&ud.call(a,13,0))}function r(a){return a.je&~a.ua.V|a.Lc-a.ua.ya}function u(a,b){a.je=b;a.Lc=a.ua.ya+(b&a.ua.V)|0}function Qe(a,b,c,d,e,g){if(63!=(e&63)&&e!=a.resultType){var l=(e^a.resultType)&a.resultType;l&&(l&1&&Re(a),l&2&&Se(a),l&4&&Te(a),l&8&&Ue(a),l&16&&Ve(a),l&32&&We(a))}g?(a.hh=d,a.gh=b):(a.hh=b,a.gh=d);a.oi=c;a.ih=d;a.resultType=e}
            function Xe(a,b,c,d,e){a.resultType=c|26;a.ih=b;d?Ye(a):Ze(a);e?$e(a):af(a);return b}function bf(a,b,c,d){c&d?Ye(a):Ze(a);(b^c)&d?$e(a):af(a)}function cf(a){return Re(a)?1:0}function Re(a){a.resultType&1&&(a.aa&=~Wb,(a.hh^(a.hh^a.oi)&(a.oi^a.gh))&a.resultType&-2147450752&&(a.aa|=Wb),a.resultType&=-2);return a.aa&Wb}function Se(a){a.resultType&2&&(a.aa&=~Vb,38505>>((a.ih^a.ih>>4)&15)&1&&(a.aa|=Vb),a.resultType&=-3);return a.aa&Vb}
            function Te(a){a.resultType&4&&(a.aa&=~Ub,(a.gh^a.hh^a.oi)&16&&(a.aa|=Ub),a.resultType&=-5);return a.aa&Ub}function Ue(a){a.resultType&8&&(a.aa&=~Tb,a.ih&((a.resultType&-2147450752)-1|a.resultType&-2147450752)||(a.aa|=Tb),a.resultType&=-9);return a.aa&Tb}function Ve(a){a.resultType&16&&(a.aa&=~Sb,a.ih&a.resultType&-2147450752&&(a.aa|=Sb),a.resultType&=-17);return a.aa&Sb}
            function We(a){a.resultType&32&&(a.aa&=~Ob,(a.hh^a.gh)&(a.oi^a.gh)&a.resultType&-2147450752&&(a.aa|=Ob),a.resultType&=-33);return a.aa&Ob}function Ze(a){a.resultType&=-2;a.aa&=~Wb}function df(a){a.resultType&=-5;a.aa&=~Ub}function ef(a){a.resultType&=-9;a.aa&=~Tb}function af(a){a.resultType&=-33;a.aa&=~Ob}function Ye(a){a.resultType&=-2;a.aa|=Wb}function ff(a){a.resultType&=-5;a.aa|=Ub}function gf(a){a.resultType&=-9;a.aa|=Tb}function $e(a){a.resultType&=-33;a.aa|=Ob}
            function Nb(a){return a.aa&~od|Re(a)|Se(a)|Te(a)|Ue(a)|Ve(a)|We(a)}function hf(a,b){b=b|a.hb&1|65520;a.hb=a.hb&-65536|b&65535;a.hb&1&&pe(a,!0)}function Bd(a,b,c){a.hb&1||(b&=-61441);void 0===c&&(c=a.ta.Pa);c?b=b&-12289|a.aa&12288:a.uj=(b&12288)>>12;c>a.uj&&(b=b&~Qb|a.aa&Qb);a.resultType=128;a.aa=a.aa&~(a.wi|od)|b&(a.wi|od)|a.fn;a.aa&Rb&&(a.Bb|=2,a.S|=4)}
            f.Nb=function(a,b,c){var d=!1;switch(b){case "EAX":case "EBX":case "ECX":case "EDX":case "ESP":case "EBP":case "ESI":case "EDI":case "EIP":case "AX":case "BX":case "CX":case "DX":case "SP":case "BP":case "SI":case "DI":case "IP":case "PC":case "CS":case "DS":case "SS":case "ES":case "PS":case "C":case "P":case "A":case "Z":case "S":case "T":case "I":case "D":case "V":this.va[b]=c;this.yn++;d=!0;break;default:d=this.parent.Nb.call(this,a,b,c)}return d};
            function jf(a,b){var c=a.na[(b&a.Ee)>>>a.Ca];return 5!=c.type||(c=Rc(a,b,!1,!0),c)?c.Yg(b&a.Ga,b):null}f.Qa=function(a){return this.na[(a&this.Ee)>>>this.Ca].tc(a&this.Ga,a)};f.ra=function(a){var b=a&this.Ga,c=(a&this.Ee)>>>this.Ca;this.A-=this.B.gi;return b<this.Ga?this.na[c].ji(b,a):this.na[c].tc(b,a)|this.na[c+1&this.td].tc(0,a+1)<<8};
            f.fe=function(a){var b=a&this.Ga,c=(a&this.Ee)>>>this.Ca;if(b<this.Ga-2)return this.na[c].Ec(b,a);var d=(b&3)<<3;return this.na[c].Ec(b&-4,a)>>>d|this.na[c+1&this.td].Ec(0,a+3)<<32-d};f.dd=function(a,b){this.na[(a&this.Ee)>>>this.Ca].Fc(a&this.Ga,b&255,a)};f.Kb=function(a,b){var c=a&this.Ga,d=(a&this.Ee)>>>this.Ca;this.A-=this.B.gi;c<this.Ga?this.na[d].ui(c,b&65535,a):(this.na[d++].Fc(c,b&255,a),this.na[d&this.td].Fc(0,b>>8&255,a+1))};
            f.Ak=function(a,b){var c=a&this.Ga,d=(a&this.Ee)>>>this.Ca;this.A-=this.B.gi;if(c<this.Ga-2)this.na[d].Oe(c,b,a);else{var e,g=(c&3)<<3,c=c&-4;e=this.na[d].Ec(c,a);this.na[d].Oe(c,e&~(-1<<g)|b<<g,a);d=d+1&this.td;a+=3;e=this.na[d].Ec(0,a);this.na[d].Oe(0,e&-1<<g|b>>>32-g,a)}};function kf(a,b,c){a.si=b;a.X=b.Ac(a.ii=c,1);return a.S&1?0:a.Qa(a.X)}function D(a,b){return kf(a,a.ha,b&a.V)}function E(a,b){return kf(a,a.la,b&a.V)}function lf(a,b,c){a.si=b;a.X=b.Ac(a.ii=c,a.pa);return a.S&1?0:a.qc(a.X)}
            function G(a,b){return lf(a,a.ha,b&a.V)}function H(a,b){return lf(a,a.la,b&a.V)}function mf(a,b,c){a.si=b;a.La=a.X=b.Ac(a.ii=c,1);return a.S&1?0:a.Qa(a.X)}function L(a,b){return mf(a,a.ha,b&a.V)}function M(a,b){return mf(a,a.la,b&a.V)}function nf(a,b,c){a.si=b;a.La=a.X=b.Ac(a.ii=c,a.pa);return a.S&1?0:a.qc(a.X)}function N(a,b){return nf(a,a.ha,b&a.V)}function O(a,b){return nf(a,a.la,b&a.V)}function P(a,b){a.S&2||a.dd(a.si.oc(a.ii,1),b)}function Q(a,b){a.S&2||a.dg(a.si.oc(a.ii,a.pa),b)}
            function yd(a,b,c){return a.qc(b.Ac(c,a.pa))}f.U=function(){var a=this.Qa(this.sa);Pe(this,1);return a};function of(a){var b=a.ra(a.sa);Pe(a,2);return b}function R(a){var b=a.$b(a.sa);Pe(a,a.Hd);return b}f.oa=function(){var a=this.qc(this.sa);Pe(this,this.pa);return a};f.M=function(){var a=this.Qa(this.sa)<<24>>24;Pe(this,1);return a};function U(a,b){var c=a.Qa(a.sa);Pe(a,1);return pf[c].call(a,b)}
            f.Ka=function(){var a=this.qc(this.Lc);this.Lc=this.Lc+this.pa|0;var b=this.tk-this.Lc|0;0>b&&0<=(this.tk^this.Lc)&&(8088>=this.ka||!this.ua.Bg&&this.ua.gb==this.ua.V||this.ua.Bg&&!this.ua.gb?u(this,this.Lc-this.ua.ya&this.ua.V):-1>b&&ud.call(this,12,0));return a};function zd(a,b){a.Lc=a.Lc-a.pa|0;0>(a.Lc-a.Rm|0)&&0<=(a.Rm^a.Lc)&&(8088>=a.ka||!a.ua.Bg&&a.ua.gb==a.ua.V||a.ua.Bg&&!a.ua.gb?u(a,a.Lc-a.ua.ya&a.ua.V):ud.call(a,12,0));a.dg(a.Lc,b)}
            function qf(a,b,c){var d=4;1==b.length&&(d=1,c=c?1:0);if(80386>a.ka)2<b.length&&(b=b.substr(1,2));else if("PS"==b||2<b.length)d=8;a.va[b]&&(void 0===c&&(qb(a,"Value for "+b+" is invalid"),a.zb()),d=!a.fa.qb||a.fa.Pn?h(c,d):"--------".substr(0,d),a.va[b].textContent!=d&&(a.va[b].textContent=d))}
            f.zd=function(a){if(this.yn&&(a||!this.fa.qb||this.fa.Pn)){qf(this,"EAX",this.F);qf(this,"EBX",this.D);qf(this,"ECX",this.G);qf(this,"EDX",this.H);qf(this,"ESP",r(this));qf(this,"EBP",this.L);qf(this,"ESI",this.K);qf(this,"EDI",this.J);qf(this,"CS",Mb(this));qf(this,"DS",this.bb.ia);qf(this,"SS",this.ua.ia);qf(this,"ES",this.Ma.ia);qf(this,"EIP",q(this));var b=Nb(this);qf(this,"PS",b);qf(this,"V",b&Ob);qf(this,"D",b&Pb);qf(this,"I",b&Qb);qf(this,"T",b&Rb);qf(this,"S",b&Sb);qf(this,"Z",b&Tb);qf(this,
            "A",b&Ub);qf(this,"P",b&Vb);qf(this,"C",b&Wb)}if(b=this.va.speed)b.textContent=Kb(this);this.parent.zd.call(this,a)};
            f.kh=function(a){this.fa.we=!0;var b=this.fa.Nn=this.Y&&rf(this.Y),c=a?this.fa.ql?0:1:-1;this.fa.ql=!1;this.ud=this.A=a;this.ja&&!a&&ld(this.ja);a||this.qa(1024)||(this.S|=4);do{var d=this.S&12528;if(d)this.Aa|=d;else if(this.Sb=this.sa,this.ha=this.bb,this.la=this.ua,this.X=this.La=n,this.Aa&12288&&Be(this),this.Aa=this.S&256,this.Bb){a:{if(!(this.S&4))for(var d=80286>this.ka?0:1,e=0;2>e;e++){switch(d){case 0:if(this.Bb&1&&this.aa&Qb){var g=sf(this.ja);if(-1<=g&&(this.Bb&=-2,0<=g)){this.Bb&=-5;tf.call(this,
            g,null,11);d=!0;break a}}break;case 1:if(this.Bb&2){this.Bb&=-3;tf.call(this,1,null,11);d=!0;break a}}d=1-d}if(d=this.Bb&8){d=this.ja;e=!1;for(g=0;g<d.vb;g++)for(var l=d.vb[g],p=0;p<l.Ub.length;p++){var v=l.Ub[p];v.ze||(uf(d,v),v.ze||(e=!0))}d=!e}d&&(this.Bb&=-9);d=!1}if(d&&!a){this.R("interrupt dispatched");this.S=0;break}if(this.Bb&4){this.S=this.A=0;break}}if(b){if(vf(this.Y,this.sa,c)){this.zb();break}c=1}this.S=0;this.Oa[this.U()].call(this)}while(0<this.A);return this.fa.we?this.ud-this.A:void 0===
            this.fa.we?0:-1};Pa(function(){for(var a=kb(window.document,"pcjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new Dd(d);jb(d,c)}});function wf(a,b){var c=a+b+cf(this)|0;Qe(this,a,b,c,191);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&255}function xf(a,b){var c=a+b+cf(this)|0;Qe(this,a,b,c,this.dataType|63);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&this.C}
            function yf(a,b){var c=a+b|0;Qe(this,a,b,c,191);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&255}function zf(a,b){var c=a+b|0;Qe(this,a,b,c,this.dataType|63);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&this.C}function Af(a,b){var c=a&b;Xe(this,c,128);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c}function Bf(a,b){this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return Xe(this,a&b,this.dataType)}
            function Cf(a,b){this.A-=10+(this.X===n?0:1);if((a&3)<(b&3))return a=a&-4|b&3,gf(this),a;ef(this);return a}function Df(a){if(this.X===n)return Md.call(this),a;var b=a,c=this.qc(this.X),d=this.qc(this.X+this.pa);2==this.pa&&(b=a<<16>>16,c=c<<16>>16,d=d<<16>>16);this.A-=this.B.Ll;if(b<c||b>d)C(this,this.Sb-this.ta.ya),tf.call(this,5,null,0);this.S|=2;return a}function Ef(a,b){var c=0;if(b){ef(this);for(var d=1;d&this.C;){if(b&d){a=c;break}d<<=1;c++}}else gf(this);this.A-=this.B.vo+3*c;return a}
            function Ff(a,b){var c=0;if(b){ef(this);for(var d=2==this.pa?15:31,e=1<<d;e;){if(b&e){a=d;break}e>>>=1;c++;d--}}else gf(this);this.A-=this.B.vo+3*c;return a}function Gf(a,b){a&1<<(b&31)?Ye(this):Ze(this);this.A-=this.X===n?this.B.dr:this.B.br;this.S|=2;return a}function Hf(a,b){var c=1<<(b&31);a&c?Ye(this):Ze(this);this.A-=this.X===n?this.B.Kl:this.B.Il;return a^c}function If(a,b){var c=1<<(b&31);a&c?Ye(this):Ze(this);this.A-=this.X===n?this.B.Kl:this.B.Il;return a&~c}
            function Jf(a,b){var c=1<<(b&31);a&c?Ye(this):Ze(this);this.A-=this.X===n?this.B.Kl:this.B.Il;return a|c}function Kf(a,b){var c=Mb(this),d=q(this);null!=Cd(this,a,b,!0)&&(zd(this,c),zd(this,d))}function Lf(a,b){Qe(this,a,b,a-b|0,191,!0);this.A-=this.La===n?this.X===n?this.B.bc:this.B.yj:this.B.Gb;this.S|=2;return a}function Mf(a,b){Qe(this,a,b,a-b|0,this.dataType|63,!0);this.A-=this.La===n?this.X===n?this.B.bc:this.B.yj:this.B.Gb;this.S|=2;return a}
            function Nf(a){var b=(a&this.C)-1|0;Qe(this,a,1,b,32830,!0);this.A-=2;return a&~this.C|b&this.C}function Of(a,b){var c=a[1]-b[1];c||(c=a[0]-b[0]);return c}
            function Pf(a,b,c){this.Zb=!1;if((c>>>=0)&&!(c<=b>>>0)){var d=0,e=1;c=[c>>>0,0];for(a=[a>>>0,b>>>0];0<Of(a,c);){var g=b=c;b[0]+=g[0];b[1]+=g[1];4294967295<b[0]&&(b[0]>>>=0,b[1]++);e+=e}do 0<=Of(a,c)&&(b=a,g=c,b[0]-=g[0],b[1]-=g[1],0>b[0]&&(b[0]>>>=0,b[1]--),d+=e),b=c,b[0]>>>=1,b[1]&1&&(b[0]=(b[0]|2147483648)>>>0),b[1]>>>=1,e>>>=1;while(e);this.ub=d;this.mc=a[0];this.Zb=!0}}function Qf(a){return a}
            function Rf(a,b){a=this.U();var c=(b<<16>>16)*(a<<24>>24)|0;32767<c||-32768>c?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?21:24;return c&65535}function Sf(a,b){var c,d;a=this.oa();2==this.pa?(d=(b<<16>>16)*(a<<16>>16)|0,c=32767<d||-32768>d):(d=b*a,c=2147483647<d||-2147483648>d);c?(Ye(this),$e(this)):(Ze(this),af(this));d&=this.C;this.A-=this.X===n?21:24;return d}
            function Tf(a,b){var c=(a<<16>>16)*(b<<16>>16)|0;32767<c||-32768>c?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?this.B.xo:this.B.wo;return c&65535}function Uf(a,b){var c=a*b;2147483647<c||-2147483648>c?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?this.B.xo:this.B.wo;return c|0}function Vf(a){var b=(a&this.C)+1|0;Qe(this,a,1,b,32830);this.A-=2;return a&~this.C|b&this.C}
            function tf(a,b,c){this.A-=this.B.fm+c;this.ta.jl=!0;c=Nb(this);var d=Mb(this),e=q(this);a=this.ta.io(a);a!==n&&(zd(this,c),zd(this,d),zd(this,e),null!=b&&zd(this,b),this.rj=-1,this.sa=a,this.ni=this.ta.ya+this.ta.gb|0,Be(this))}function Wf(a,b){this.A-=14+(this.X===n?0:2);ef(this);this.Tb.load(b,!0)!==n&&this.Tb.Bc>=this.ta.Pa&&this.Tb.Bc>=(b&3)&&(gf(this),a=this.Tb.Rb&-256,2<this.pa&&(a|=(this.Tb.Lh&-65281)<<16));return a}
            function Xf(a,b){if(this.X===n)return fe.call(this),a;Me(this,this.ra(this.X+this.pa));this.A-=this.B.Vf;return b}function Yf(a){if(this.X===n)return fe.call(this),a;this.A-=this.B.nm;return this.X}function Zf(a,b){if(this.X===n)return fe.call(this),a;Ne(this,this.ra(this.X+this.pa));this.A-=this.B.Vf;return b}function $f(a,b){if(this.X===n)return fe.call(this),a;var c=this.ra(this.X+this.pa);this.xc.load(c);this.A-=this.B.Vf;return b}
            function ag(a,b){if(this.X===n)return fe.call(this),a;var c=this.ra(this.X+this.pa);this.yc.load(c);this.A-=this.B.Vf;return b}function bg(a,b){this.A-=14+(this.X===n?0:2);if(b&65528&&this.Tb.load(b,!0)!==n&&(7168==(this.Tb.Rb&7168)||this.Tb.Bc>=this.ta.Pa)&&this.Tb.Bc>=(b&3))return gf(this),this.Tb.gb;ef(this);return a}function cg(a,b){if(this.X===n)return fe.call(this),a;wd(this,this.ra(this.X+this.pa));this.A-=this.B.Vf;return b}
            function dg(a,b){this.A-=this.La===n?this.X===n?this.B.um:this.B.tm:this.B.rm;return b}function eg(a,b){return b}function fg(){this.La!==n&&ze(this,2);return dg.call(this,0,this.Rd)}function gg(a,b){var c=b&65535,d=b>>>16,e=a&65535,g=a>>>16,l=c*e,e=(l>>>16)+d*e,p=e>>>16,e=(e&65535)+c*g;this.Zb=!0;this.ub=e<<16|l&65535;this.mc=p+((e>>>16)+d*g)|0}function hg(a,b){this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return Xe(this,a|b,128)}
            function ig(a,b){this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return Xe(this,a|b,this.dataType)}function pg(a){var b=this.Ka(),c=this.Ka();(a<<=this.pa>>2)&&u(this,r(this)+a);Cd(this,b,c,!1)&&(a&&u(this,r(this)+a),this.bb.ia&65528&&this.bb.Bc<this.ta.Pa&&7168!=(this.bb.Rb&7168)&&this.bb.load(0),this.Ma.ia&65528&&this.Ma.Bc<this.ta.Pa&&7168!=(this.Ma.Rb&7168)&&this.Ma.load(0));2==a&&this.Bh&&He(this,this.sa)}
            function qg(a,b){var c=a-b-cf(this)|0;Qe(this,a,b,c,191,!0);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&255}function rg(a,b){var c=a-b-cf(this)|0;Qe(this,a,b,c,this.dataType|63,!0);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&this.C}function sg(a){this.S|=1;this.fd[this.U()].call(this,a);this.A-=this.X===n?this.B.fr:this.B.er}function tg(){return We(this)?1:0}function ug(){return Re(this)?1:0}function vg(){return Re(this)?0:1}
            function wg(){return Ue(this)?1:0}function xg(){return Ue(this)?0:1}function yg(){return Re(this)||Ue(this)?1:0}function zg(){return Re(this)||Ue(this)?0:1}function Ag(){return Ve(this)?1:0}function Bg(){return Ve(this)?0:1}function Cg(){return Se(this)?1:0}function Dg(){return Se(this)?0:1}function Eg(){return!Ve(this)!=!We(this)?1:0}function Fg(){return!Ve(this)!=!We(this)?0:1}function Gg(){return Ue(this)||!Ve(this)!=!We(this)?1:0}function Hg(){return Ue(this)||!Ve(this)!=!We(this)?0:1}
            function Ig(a,b,c){if(c){16<c&&(a=b,c-=16);var d=a<<c-1;a=(d<<1|b>>16-c)&65535;Xe(this,a,32768,d&32768)}return a}function Jg(a,b,c){if(c){var d=a<<c-1;a=d<<1|b>>32-c;Xe(this,a,-2147483648,d&-2147483648)}return a}function Kg(a,b){return Ig.call(this,a,b,this.U())}function Lg(a,b){return Jg.call(this,a,b,this.U())}function Mg(a,b){return Ig.call(this,a,b,this.G&31)}function Ng(a,b){return Jg.call(this,a,b,this.G&31)}
            function Og(a,b,c){if(c){16<c&&(a=b,c-=16);var d=a>>c-1;a=(d>>1|b<<16-c)&65535;Xe(this,a,32768,d&1)}return a}function Pg(a,b,c){if(c){var d=a>>c-1;a=d>>1|b<<32-c;Xe(this,a,-2147483648,d&1)}return a}function Qg(a,b){return Og.call(this,a,b,this.U())}function Rg(a,b){return Pg.call(this,a,b,this.U())}function Sg(a,b){return Og.call(this,a,b,this.G&31)}function Tg(a,b){return Pg.call(this,a,b,this.G&31)}
            function Ug(a,b){var c=a-b|0;Qe(this,a,b,c,191,!0);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&255}function Vg(a,b){var c=a-b|0;Qe(this,a,b,c,this.dataType|63,!0);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c&this.C}function Wg(a,b){Xe(this,a&b,128);this.A-=this.La===n?this.X===n?this.B.dk:this.B.Wg:this.B.Wg;this.S|=2;return a}function Xg(a,b){Xe(this,a&b,32768);this.A-=this.La===n?this.X===n?this.B.dk:this.B.Wg:this.B.Wg;this.S|=2;return a}
            function Yg(a,b){if(this.X===n){switch(this.Li&7){case 0:this.F=this.F&-256|a;break;case 1:this.G=this.G&-256|a;break;case 2:this.H=this.H&-256|a;break;case 3:this.D=this.D&-256|a;break;case 4:this.F=this.F&255|a<<8;break;case 5:this.G=this.G&255|a<<8;break;case 6:this.H=this.H&255|a<<8;break;case 7:this.D=this.D&255|a<<8}this.A-=this.B.fk}else this.La=this.X,P(this,a),this.A-=this.B.ek;return b}
            function Zg(a,b){if(this.X===n){switch(this.Li&7){case 0:this.F=a;break;case 1:this.G=a;break;case 2:this.H=a;break;case 3:this.D=a;break;case 4:u(this,a);break;case 5:this.L=a;break;case 6:this.K=a;break;case 7:this.J=a}this.A-=this.B.fk}else this.La=this.X,Q(this,a),this.A-=this.B.ek;return b}function $g(a,b){var c=a^b;Xe(this,c,128);this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return c}
            function ah(a,b){this.A-=this.La===n?this.X===n?this.B.bc:this.B.Gb:this.B.rc;return Xe(this,a^b,this.dataType)}function bh(a){ud.call(this,13,0);return a}function ce(a){Md.call(this);return a}function ch(a){fe.call(this);return a}function dh(){C(this,this.Sb-this.ta.ya);tf.call(this,0,null,2)}function eh(){this.A-=this.X===n?2:this.B.Hm;return 1}function fh(){var a=this.G&255;this.A-=(this.X===n?this.B.Vj:this.B.Uj)+(a<<this.B.Wj);return a}
            function gh(){var a=this.U();this.A-=(this.X===n?this.B.Vj:this.B.Uj)+(a<<this.B.Wj);return a}function hh(){return null}function ud(a,b,c,d){if(this.fa.we){var e=!1;if(80186<=this.ka)if(0>this.rj)C(this,this.Sb-this.ta.ya),e=!0;else if(8!=this.rj)b=0,a=8,e=!0;else{ih.call(this,-1,0,c);me(this);return}ih.call(this,a,b,c)&&(e=!1);e&&tf.call(this,this.rj=a,b,d||0);this.S|=3}else this.ab("Fault "+k(a)+" blocked by Debugger",1073741824),C(this,this.Sb-this.ta.ya)}
            function oe(a,b,c){this.Yf=a;a=0;b&&(a|=1);c&&(a|=2);3==this.ta.Pa&&(a|=4);ud.call(this,14,a)}function ih(a,b,c){var d=32,e=jf(this,this.sa);204!=e||this.Ye||(c=!1,d|=1);983040<=this.sa&&1048575>=this.sa&&(c=!1);this.qa(d|-2147483648)&&(c=!0);if(this.qa(d)||c)a=(c?"\n":"")+"Fault "+k(a)+(null!=b?" ("+ga(b)+")":"")+" on opcode "+k(e)+" at "+jh(q(this),Mb(this))+" (%"+h(this.sa,6)+")",b=this.fa.qb,this.ab(a,d)?c&&(c=b,this.Y.zb()):(this.Da(a),this.zb());return c}
            function de(){this.rh[this.U()].call(this)}function ge(){zd(this,r(this)&this.C);this.A-=this.B.Cc}function Nd(){var a=r(this)&this.C;zd(this,this.F&this.C);zd(this,this.G&this.C);zd(this,this.H&this.C);zd(this,this.D&this.C);zd(this,a);zd(this,this.L&this.C);zd(this,this.K&this.C);zd(this,this.J&this.C);this.A-=this.B.Bm}
            function Od(){this.J=this.J&~this.C|this.Ka();this.K=this.K&~this.C|this.Ka();this.L=this.L&~this.C|this.Ka();u(this,r(this)+this.pa);this.D=this.D&~this.C|this.Ka();this.H=this.H&~this.C|this.Ka();this.G=this.G&~this.C|this.Ka();this.F=this.F&~this.C|this.Ka();this.A-=this.B.zm}function Pd(){this.Na[this.U()].call(this,Df)}function he(){this.Lb[this.U()].call(this,Cf)}function ie(){this.S|=20;this.ha=this.la=this.xc;this.A-=this.B.bd;this.zb()}
            function je(){this.S|=20;this.ha=this.la=this.yc;this.A-=this.B.bd;this.zb()}function ke(){this.S|=4096;this.pa^=6;this.C^=-65536;Ae(this);this.A-=this.B.bd}function le(){this.S|=8192;this.Hd^=6;this.V^=-65536;qe(this);this.A-=this.B.bd}function Qd(){zd(this,this.oa());this.A-=this.B.Cc}function Rd(){this.Na[this.U()].call(this,Sf)}function Sd(){zd(this,this.U());this.A-=this.B.Cc}function Td(){this.Na[this.U()].call(this,Rf)}
            function Ud(){var a=1,b=0,c=5;this.Aa&192&&(a=this.G&this.V,b=1,this.Aa&256&&(c=4));if(a--){var d=pc(this.ma,this.H,this.sa-b-1);this.dd(this.Ma.oc(this.J&this.V,1),d);this.J=this.J&~this.V|this.J+(this.aa&Pb?-1:1)&this.V;this.A-=c;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=256)}}
            function Vd(){var a=1,b=0,c=5;this.Aa&192&&(a=this.G&this.V,b=1,this.Aa&256&&(c=4));if(a--){for(var d=this.sa-b-1,e=0,g=0,l=0;l<this.pa;l++)e|=pc(this.ma,this.H,d)<<g,g+=8;d=e;this.dg(this.Ma.oc(this.J&this.V,this.pa),d);this.J=this.J&~this.V|this.J+(this.aa&Pb?-this.pa:this.pa)&this.V;this.A-=c;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=256)}}
            function Wd(){var a=1,b=0,c=5;this.Aa&192&&(a=this.G&this.V,b=1,this.Aa&256&&(c=4));if(a--){var d=this.Qa(this.bb.Ac(this.K&this.V,1));this.K=this.K&~this.V|this.K+(this.aa&Pb?-1:1)&this.V;this.A-=c;tc(this.ma,this.H,d,this.sa-b-1);this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=256)}}
            function Xd(){var a=1,b=0,c=5;this.Aa&192&&(a=this.G&this.V,b=1,this.Aa&256&&(c=4));if(a--){var d=yd(this,this.bb,this.K&this.V);this.K=this.K&~this.V|this.K+(this.aa&Pb?-this.pa:this.pa)&this.V;this.A-=c;for(var c=this.sa-b-1,e=0,g=0;g<this.pa;g++)tc(this.ma,this.H,d>>e&255,c),e+=8;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=256)}}function kh(){var a=this.M();We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}
            function lh(){var a=this.M();We(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}function mh(){var a=this.M();Re(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}function nh(){var a=this.M();Re(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}function oh(){var a=this.M();Ue(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}function ph(){var a=this.M();Ue(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}
            function qh(){var a=this.M();Re(this)||Ue(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}function rh(){var a=this.M();Re(this)||Ue(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}function sh(){var a=this.M();Ve(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}function th(){var a=this.M();Ve(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}function uh(){var a=this.M();Se(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}
            function vh(){var a=this.M();Se(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}function wh(){var a=this.M();!Ve(this)!=!We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}function xh(){var a=this.M();!Ve(this)==!We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}function yh(){var a=this.M();Ue(this)||!Ve(this)!=!We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia}
            function zh(){var a=this.M();Ue(this)||!Ve(this)!=!We(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)}function Ah(){this.Ve[this.U()].call(this,Bh,this.U);this.A-=this.La===n?1:this.B.di}function Yd(){this.Ve[this.U()].call(this,Ch,gh)}function Zd(){this.Qc[this.U()].call(this,2==this.pa?Dh:Eh,gh)}function Fh(){var a=of(this)<<(this.pa>>2),b=this.Ka();C(this,b);a&&u(this,r(this)+a);this.A-=this.B.Gm}function Gh(){var a=this.Ka();C(this,a);this.A-=this.B.Dm}
            function $d(){var a=of(this),b=this.U()&31;this.A-=11;zd(this,this.L);var c=r(this)&this.C;if(0<b){for(this.A-=(b<<2)+(1<b?1:0);--b;)this.L=this.L&~this.C|this.L-this.pa&this.C,zd(this,yd(this,this.ua,this.L&this.C));zd(this,c)}this.L=this.L&~this.C|c;u(this,r(this)&~this.ua.V|r(this)-a&this.ua.V)}function ae(){u(this,r(this)&~this.ua.V|this.L&this.ua.V);this.L=this.L&~this.C|this.Ka()&this.C;this.A-=5}function Hh(){pg.call(this,of(this));this.A-=this.B.Fm}
            function Ih(){pg.call(this,0);this.A-=this.B.Em}function Jh(){this.Na[this.U()].call(this,Qf);this.A-=8}function Kh(){this.S|=36;this.A-=this.B.bd}function be(){fe.call(this)}function Md(){ud.call(this,6);this.zb()}function fe(){C(this,this.Sb-this.ta.ya);qb(this,"Undefined opcode "+k(Yb(this.ma,this.sa))+" at "+("0x"+h(this.sa)));this.zb()}
            var Id=[function(){var a=this.U();this.fd[a].call(this,yf)},function(){this.Lb[this.U()].call(this,zf)},function(){this.Rc[this.U()].call(this,yf)},function(){this.Na[this.U()].call(this,zf)},function(){this.F=this.F&-256|yf.call(this,this.F&255,this.U());this.A--},function(){this.F=this.F&~this.C|zf.call(this,this.F&this.C,this.oa());this.A--},function(){zd(this,this.Ma.ia);this.A-=this.B.qf},function(){Ne(this,this.Ka());this.A-=this.B.cc},function(){this.fd[this.U()].call(this,hg)},function(){this.Lb[this.U()].call(this,
            ig)},function(){this.Rc[this.U()].call(this,hg)},function(){this.Na[this.U()].call(this,ig)},function(){this.F=this.F&-256|hg.call(this,this.F&255,this.U());this.A--},function(){this.F=this.F&~this.C|ig.call(this,this.F&this.C,this.oa());this.A--},function(){zd(this,this.ta.ia);this.A-=this.B.qf},function(){Le(this,this.Ka());this.A-=this.B.cc},function(){this.fd[this.U()].call(this,wf)},function(){this.Lb[this.U()].call(this,xf)},function(){this.Rc[this.U()].call(this,wf)},function(){this.Na[this.U()].call(this,
            xf)},function(){this.F=this.F&-256|wf.call(this,this.F&255,this.U());this.A--},function(){this.F=this.F&~this.C|xf.call(this,this.F&this.C,this.oa());this.A--},function(){zd(this,this.ua.ia);this.A-=this.B.qf},function(){wd(this,this.Ka());this.A-=this.B.cc},function(){this.fd[this.U()].call(this,qg)},function(){this.Lb[this.U()].call(this,rg)},function(){this.Rc[this.U()].call(this,qg)},function(){this.Na[this.U()].call(this,rg)},function(){this.F=this.F&-256|qg.call(this,this.F&255,this.U());this.A--},
            function(){this.F=this.F&~this.C|rg.call(this,this.F&this.C,this.oa());this.A--},function(){zd(this,this.bb.ia);this.A-=this.B.qf},function(){Me(this,this.Ka());this.A-=this.B.cc},function(){this.fd[this.U()].call(this,Af)},function(){this.Lb[this.U()].call(this,Bf)},function(){this.Rc[this.U()].call(this,Af)},function(){this.Na[this.U()].call(this,Bf)},function(){this.F=this.F&-256|Af.call(this,this.F&255,this.U());this.A--},function(){this.F=this.F&~this.C|Bf.call(this,this.F&this.C,this.oa());
            this.A--},function(){this.S|=20;this.ha=this.la=this.Ma;this.A-=this.B.bd},function(){var a=this.F&255,b=Te(this),c=Re(this);if(9<(a&15)||b)a+=6,b=Ub;if(159<a||c)a+=96,c=Wb;a&=255;this.F=this.F&-256|a;Xe(this,a,128);c?Ye(this):Ze(this);b?ff(this):df(this);this.A-=this.B.pf},function(){this.fd[this.U()].call(this,Ug)},function(){this.Lb[this.U()].call(this,Vg)},function(){this.Rc[this.U()].call(this,Ug)},function(){this.Na[this.U()].call(this,Vg)},function(){this.F=this.F&-256|Ug.call(this,this.F&
            255,this.U());this.A--},function(){this.F=this.F&~this.C|Vg.call(this,this.F&this.C,this.oa());this.A--},function(){this.S|=20;this.ha=this.la=this.ta;this.A-=this.B.bd},function(){var a=this.F&255,b=Te(this),c=Re(this);if(9<(a&15)||b)a-=6,b=Ub;if(159<a||c)a-=96,c=Wb;a&=255;this.F=this.F&-256|a;Xe(this,a,128);c?Ye(this):Ze(this);b?ff(this):df(this);this.A-=this.B.pf},function(){this.fd[this.U()].call(this,$g)},function(){this.Lb[this.U()].call(this,ah)},function(){this.Rc[this.U()].call(this,$g)},
            function(){this.Na[this.U()].call(this,ah)},function(){this.F=this.F&-256|$g.call(this,this.F&255,this.U());this.A--},function(){this.F=this.F&~this.C|ah.call(this,this.F&this.C,this.oa());this.A--},function(){this.S|=20;this.ha=this.la=this.ua;this.A-=this.B.bd},function(){var a,b,c=this.F&255,d=this.F>>8&255;9<(c&15)||Te(this)?(c=c+6&15,d=d+1&255,a=b=1):a=b=0;this.F=this.F&-65536|d<<8|c;a?Ye(this):Ze(this);b?ff(this):df(this);this.A-=this.B.pf},function(){this.fd[this.U()].call(this,Lf)},function(){this.Lb[this.U()].call(this,
            Mf)},function(){this.Rc[this.U()].call(this,Lf)},function(){this.Na[this.U()].call(this,Mf)},function(){Lf.call(this,this.F&255,this.U());this.A--},function(){Mf.call(this,this.F&this.C,this.oa());this.A--},function(){this.S|=20;this.ha=this.la=this.bb;this.A-=this.B.bd},function(){var a,b,c=this.F&255,d=this.F>>8&255;9<(c&15)||Te(this)?(c=c-6&15,d=d-1&255,a=b=1):a=b=0;this.F=this.F&-65536|d<<8|c;a?Ye(this):Ze(this);b?ff(this):df(this);this.A-=this.B.pf},function(){this.F=Vf.call(this,this.F)},function(){this.G=
            Vf.call(this,this.G)},function(){this.H=Vf.call(this,this.H)},function(){this.D=Vf.call(this,this.D)},function(){u(this,Vf.call(this,r(this)))},function(){this.L=Vf.call(this,this.L)},function(){this.K=Vf.call(this,this.K)},function(){this.J=Vf.call(this,this.J)},function(){this.F=Nf.call(this,this.F)},function(){this.G=Nf.call(this,this.G)},function(){this.H=Nf.call(this,this.H)},function(){this.D=Nf.call(this,this.D)},function(){u(this,Nf.call(this,r(this)))},function(){this.L=Nf.call(this,this.L)},
            function(){this.K=Nf.call(this,this.K)},function(){this.J=Nf.call(this,this.J)},function(){zd(this,this.F&this.C);this.A-=this.B.Cc},function(){zd(this,this.G&this.C);this.A-=this.B.Cc},function(){zd(this,this.H&this.C);this.A-=this.B.Cc},function(){zd(this,this.D&this.C);this.A-=this.B.Cc},function(){zd(this,r(this)-2&65535);this.A-=this.B.Cc},function(){zd(this,this.L&this.C);this.A-=this.B.Cc},function(){zd(this,this.K&this.C);this.A-=this.B.Cc},function(){zd(this,this.J&this.C);this.A-=this.B.Cc},
            function(){this.F=this.F&~this.C|this.Ka();this.A-=this.B.cc},function(){this.G=this.G&~this.C|this.Ka();this.A-=this.B.cc},function(){this.H=this.H&~this.C|this.Ka();this.A-=this.B.cc},function(){this.D=this.D&~this.C|this.Ka();this.A-=this.B.cc},function(){u(this,r(this)&~this.C|this.Ka());this.A-=this.B.cc},function(){this.L=this.L&~this.C|this.Ka();this.A-=this.B.cc},function(){this.K=this.K&~this.C|this.Ka();this.A-=this.B.cc},function(){this.J=this.J&~this.C|this.Ka();this.A-=this.B.cc},kh,
            lh,mh,nh,oh,ph,qh,rh,sh,th,uh,vh,wh,xh,yh,zh,kh,lh,mh,nh,oh,ph,qh,rh,sh,th,uh,vh,wh,xh,yh,zh,Ah,function(){this.Qc[this.U()].call(this,Lh,this.oa);this.A-=this.La===n?1:this.B.di},Ah,function(){this.Qc[this.U()].call(this,Lh,this.M);this.A-=this.La===n?1:this.B.di},function(){this.fd[this.U()].call(this,Wg)},function(){this.Lb[this.U()].call(this,Xg)},function(){this.Rc[this.Li=this.U()].call(this,Yg)},function(){this.Na[this.Li=this.U()].call(this,Zg)},function(){this.S|=1;this.fd[this.U()].call(this,
            dg)},function(){this.S|=1;this.Lb[this.U()].call(this,dg)},function(){this.Rc[this.U()].call(this,dg)},function(){this.Na[this.U()].call(this,dg)},function(){var a=this.U();switch((a&56)>>3){case 0:this.Rd=this.Ma.ia;break;case 1:this.Rd=this.ta.ia;break;case 2:this.Rd=this.ua.ia;break;case 3:this.Rd=this.bb.ia;break;case 4:if(this.ka>=Lb){this.Rd=this.xc.ia;break}Md.call(this);break;case 5:if(this.ka>=Lb){this.Rd=this.yc.ia;break}default:Md.call(this)}this.S|=1;this.Lb[a].call(this,fg)},function(){this.S|=
            1;this.ha=this.la=this.To;this.Na[this.U()].call(this,Yf)},function(){var a,b=this.U(),c=(b&56)>>3;switch(c){case 0:a=this.F;break;case 2:a=this.H;break;case 3:a=this.D;break;default:if(80286==this.ka||this.ka==Lb&&4!=c&&5!=c){Md.call(this);return}switch(c){case 1:a=this.G;break;case 4:a=r(this);break;case 5:a=this.L;break;case 6:a=this.K;break;case 7:a=this.J}}this.Na[b].call(this,dg);switch(c){case 0:Ne(this,this.F);this.F=a;break;case 1:Le(this,this.G);this.G=a;break;case 2:wd(this,this.H);this.H=
            a;break;case 3:Me(this,this.D);this.D=a;break;case 4:this.ka>=Lb?this.xc.load(r(this)):Ne(this,r(this));u(this,a);break;case 5:this.ka>=Lb?this.yc.load(this.L):Le(this,this.L);this.L=a;break;case 6:wd(this,this.K);this.K=a;break;case 7:Me(this,this.J),this.J=a}},function(){this.S|=1;this.Qc[this.U()].call(this,Mh,this.Ka)},function(){this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.G&this.C;this.G=this.G&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.H&
            this.C;this.H=this.H&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.D&this.C;this.D=this.D&~this.C|a&this.C;this.A-=3},function(){var a=this.F,b=r(this);this.F=this.F&~this.C|b&this.C;u(this,b&~this.C|a&this.C);this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.L&this.C;this.L=this.L&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.K&this.C;this.K=this.K&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|
            this.J&this.C;this.J=this.J&~this.C|a&this.C;this.A-=3},function(){this.F=2==this.pa?this.F&-65536|this.F<<24>>24&65535:this.F<<16>>16;this.A-=2},function(){this.H=2==this.pa?this.H&-65536|(this.F&32768?65535:0):this.F&-2147483648?-1:0;this.A-=this.B.Nl},function(){Kf.call(this,this.oa(),of(this));this.A-=this.B.Ql},function(){this.ab("WAIT not implemented");this.A--},function(){zd(this,Nb(this));this.A-=this.B.Cc},function(){Bd(this,this.Ka());this.A-=this.B.cc},function(){var a=this.F>>8&255;a&
            Wb?Ye(this):Ze(this);a&Vb?(this.resultType&=-3,this.aa|=Vb):(this.resultType&=-3,this.aa&=~Vb);a&Ub?ff(this):df(this);a&Tb?gf(this):ef(this);a&Sb?(this.resultType&=-17,this.aa|=Sb):(this.resultType&=-17,this.aa&=~Sb);this.A-=this.B.Ob},function(){this.F=this.F&-65281|(Nb(this)&pd)<<8;this.A-=this.B.Ob},function(){var a=this.F&-256,b;b=R(this);b=this.Qa(this.ha.Ac(b,1));this.F=a|b;this.A-=this.B.Ij},function(){this.F=this.F&~this.C|yd(this,this.ha,R(this));this.A-=this.B.Ij},function(){var a=R(this),
            b=this.F;this.dd(this.ha.oc(a,1),b);this.A-=this.B.Jj},function(){var a=R(this),b=this.F;this.dg(this.ha.oc(a,this.pa),b);this.A-=this.B.Jj},function(){var a=1,b=0,c=this.B.Kj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.Mj,this.Aa&256||(this.A-=this.B.Lj));if(a--){var d=this.aa&Pb?-1:1,e=this.Qa(this.ha.Ac(this.K,1));this.dd(this.Ma.oc(this.J&this.V,1),e);this.K=this.K&~this.V|this.K+d&this.V;this.J=this.J&~this.V|this.J+d&this.V;this.A-=c;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,
            this.S|=256)}},function(){var a=1,b=0,c=this.B.Kj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.Mj,this.Aa&256||(this.A-=this.B.Lj));if(a--){var d=this.aa&Pb?-this.pa:this.pa,e=yd(this,this.ha,this.K);this.dg(this.Ma.oc(this.J&this.V,this.pa),e);this.K=this.K&~this.V|this.K+d&this.V;this.J=this.J&~this.V|this.J+d&this.V;this.A-=c;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=256)}},function(){var a=1,b=0,c=this.B.vj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.xj,this.Aa&256||(this.A-=
            this.B.wj));if(a--){var d=this.aa&Pb?-1:1,e=kf(this,this.ha,this.K&this.V),g=mf(this,this.Ma,this.J&this.V);Lf.call(this,e,g);this.K=this.K&~this.V|this.K+d&this.V;this.J=this.J&~this.V|this.J+d&this.V;this.A-=c-this.B.Gb;this.G=this.G&~this.V|this.G-b&this.V;a&&Ue(this)==(this.Aa&64)&&(this.sa=this.Sb,this.S|=256)}},function(){var a=1,b=0,c=this.B.vj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.xj,this.Aa&256||(this.A-=this.B.wj));if(a--){var d=this.aa&Pb?-this.pa:this.pa,e=lf(this,this.ha,this.K&
            this.V),g=nf(this,this.Ma,this.J&this.V);Mf.call(this,e,g);this.K=this.K&~this.V|this.K+d&this.V;this.J=this.J&~this.V|this.J+d&this.V;this.A-=c-this.B.Gb;this.G=this.G&~this.V|this.G-b&this.V;a&&Ue(this)==(this.Aa&64)&&(this.sa=this.Sb,this.S|=256)}},function(){Xe(this,this.F&this.U(),128);this.A-=this.B.pf},function(){Xe(this,this.F&this.oa(),this.dataType);this.A-=this.B.pf},function(){var a=1,b=0,c=this.B.Zj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.ak,this.Aa&256||(this.A-=this.B.$j));if(a--){var d=
            this.F;this.dd(this.Ma.oc(this.J&this.V,1),d);this.J=this.J&~this.V|this.J+(this.aa&Pb?-1:1)&this.V;this.A-=c;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=256)}},function(){var a=1,b=0,c=this.B.Zj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.ak,this.Aa&256||(this.A-=this.B.$j));if(a--){var d=this.F;this.dg(this.Ma.oc(this.J&this.V,this.pa),d);this.J=this.J&~this.V|this.J+(this.aa&Pb?-this.pa:this.pa)&this.V;this.A-=c;this.G=this.G&~this.V|this.G-b&this.V;a&&(this.sa=this.Sb,this.S|=
            256)}},function(){var a=1,b=0,c=this.B.Cj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.Ej,this.Aa&256||(this.A-=this.B.Dj));a--&&(this.F=this.F&-256|this.Qa(this.ha.Ac(this.K&this.V,1)),this.K=this.K&~this.V|this.K+(this.aa&Pb?-1:1)&this.V,this.A-=c,this.G=this.G&~this.V|this.G-b&this.V,a&&(this.sa=this.Sb,this.S|=256))},function(){var a=1,b=0,c=this.B.Cj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.Ej,this.Aa&256||(this.A-=this.B.Dj));a--&&(this.F=this.F&~this.C|yd(this,this.ha,this.K&this.V),this.K=
            this.K&~this.V|this.K+(this.aa&Pb?-this.pa:this.pa)&this.V,this.A-=c,this.G=this.G&~this.V|this.G-b&this.V,a&&(this.sa=this.Sb,this.S|=256))},function(){var a=1,b=0,c=this.B.Rj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.Tj,this.Aa&256||(this.A-=this.B.Sj));a--&&(Lf.call(this,this.F&255,mf(this,this.Ma,this.J&this.V)),this.J=this.J&~this.V|this.J+(this.aa&Pb?-1:1)&this.V,this.A-=c-this.B.Gb,this.G=this.G&~this.V|this.G-b&this.V,a&&Ue(this)==(this.Aa&64)&&(this.sa=this.Sb,this.S|=256))},function(){var a=
            1,b=0,c=this.B.Rj;this.Aa&192&&(a=this.G&this.V,b=1,c=this.B.Tj,this.Aa&256||(this.A-=this.B.Sj));a--&&(Mf.call(this,this.F&this.C,nf(this,this.Ma,this.J&this.V)),this.J=this.J&~this.V|this.J+(this.aa&Pb?-this.pa:this.pa)&this.V,this.A-=c-this.B.Gb,this.G=this.G&~this.V|this.G-b&this.V,a&&Ue(this)==(this.Aa&64)&&(this.sa=this.Sb,this.S|=256))},function(){this.F=this.F&-256|this.U();this.A-=this.B.Ob},function(){this.G=this.G&-256|this.U();this.A-=this.B.Ob},function(){this.H=this.H&-256|this.U();
            this.A-=this.B.Ob},function(){this.D=this.D&-256|this.U();this.A-=this.B.Ob},function(){this.F=this.F&255|this.U()<<8;this.A-=this.B.Ob},function(){this.G=this.G&255|this.U()<<8;this.A-=this.B.Ob},function(){this.H=this.H&255|this.U()<<8;this.A-=this.B.Ob},function(){this.D=this.D&255|this.U()<<8;this.A-=this.B.Ob},function(){this.F=this.F&~this.C|this.oa();this.A-=this.B.Ob},function(){this.G=this.G&~this.C|this.oa();this.A-=this.B.Ob},function(){this.H=this.H&~this.C|this.oa();this.A-=this.B.Ob},
            function(){this.D=this.D&~this.C|this.oa();this.A-=this.B.Ob},function(){u(this,r(this)&~this.C|this.oa());this.A-=this.B.Ob},function(){this.L=this.L&~this.C|this.oa();this.A-=this.B.Ob},function(){this.K=this.K&~this.C|this.oa();this.A-=this.B.Ob},function(){this.J=this.J&~this.C|this.oa();this.A-=this.B.Ob},Fh,Gh,Fh,Gh,function(){this.Na[this.U()].call(this,Zf)},function(){this.Na[this.U()].call(this,Xf)},function(){this.S|=1;this.Ve[this.U()].call(this,Nh,this.U)},function(){this.S|=1;this.Qc[this.U()].call(this,
            Nh,this.oa)},Hh,Ih,Hh,Ih,function(){tf.call(this,3,null,this.B.gm)},function(){var a=this.U();De(this,a)?tf.call(this,a,null,0):this.A--},function(){We(this)?tf.call(this,4,null,this.B.hm):this.A-=this.B.im},function(){this.A-=this.B.em;if(this.hb&1&&this.aa&16384){var a=this.ra(this.cb.ya+0);xd(this.ta,a,!1)}else{var a=this.ta.Pa,b=this.Ka(),c=this.Ka(),d=this.Ka();null!=Cd(this,b,c,!1)&&(Bd(this,d,a),this.Bh&&He(this,this.sa))}},function(){this.Ve[this.U()].call(this,Ch,eh)},function(){this.Qc[this.U()].call(this,
            2==this.pa?Dh:Eh,eh)},function(){this.Ve[this.U()].call(this,Ch,fh)},function(){this.Qc[this.U()].call(this,2==this.pa?Dh:Eh,fh)},function(){var a=this.U();if(a){var b=this.F&255;this.F=this.F&-65536|b/a<<8|b%a;Xe(this,this.F,128);this.A-=this.B.Hl}},function(){var a=this.U();this.F=this.F&-65536|(this.F>>8&255)*a+this.F&255;Xe(this,this.F,128);this.A-=this.B.Gl},function(){this.F=this.F&-256|(Re(this)?255:0);this.A-=2},function(){this.F=this.F&-256|kf(this,this.ha,this.D+(this.F&255)&65535);this.A-=
            this.B.Im},Jh,Jh,Jh,Jh,Jh,Jh,Jh,Jh,function(){var a=this.M();(this.G=this.G-1&this.V)&&!Ue(this)?(C(this,q(this)+a),this.A-=this.B.pm):this.A-=this.B.Fj},function(){var a=this.M();(this.G=this.G-1&this.V)&&Ue(this)?(C(this,q(this)+a),this.A-=this.B.Gj):this.A-=this.B.Hj},function(){var a=this.M();(this.G=this.G-1&this.V)?(C(this,q(this)+a),this.A-=this.B.om):this.A-=this.B.Fj},function(){var a=this.M();this.G&this.V?this.A-=this.B.Hj:(C(this,q(this)+a),this.A-=this.B.Gj)},function(){var a=this.U();
            this.F=this.F&-256|pc(this.ma,a,this.sa-2);this.A-=this.B.Aj},function(){var a=this.U();this.F=pc(this.ma,a,this.sa-2);this.F|=pc(this.ma,a+1&65535,this.sa-2)<<8;this.A-=this.B.Aj},function(){var a=this.U();tc(this.ma,a,this.F&255,this.sa-2);this.A-=this.B.Qj},function(){var a=this.U();tc(this.ma,a,this.F&255,this.sa-2);tc(this.ma,a+1&65535,this.F>>8,this.sa-2);this.A-=this.B.Qj},function(){var a=this.oa(),b=q(this),a=b+a;zd(this,b);C(this,a);this.A-=this.B.Ol},function(){var a=this.oa();C(this,q(this)+
            a);this.A-=this.B.Bj},function(){Cd(this,this.oa(),of(this));this.A-=this.B.km},function(){var a=this.M();C(this,q(this)+a);this.A-=this.B.Bj},function(){this.F=this.F&-256|pc(this.ma,this.H,this.sa-1);this.A-=this.B.zj},function(){this.F=pc(this.ma,this.H,this.sa-1);this.F|=pc(this.ma,this.H+1&65535,this.sa-1)<<8;this.A-=this.B.zj},function(){tc(this.ma,this.H,this.F&255,this.sa-1);this.A-=this.B.Pj},function(){tc(this.ma,this.H,this.F&255,this.sa-1);tc(this.ma,this.H+1&65535,this.F>>8,this.sa-1);
            this.A-=this.B.Pj},Kh,Kh,function(){this.S|=132;this.A-=this.B.bd},function(){this.S|=68;this.A-=this.B.bd},function(){this.Bb|=4;this.A-=2;this.Y&&this.qa(-2147483648)?(this.sa=this.sa+-1|0,this.zb()):this.aa&Qb||(this.Y&&(this.sa=this.sa+-1|0),this.zb())},function(){Re(this)?Ze(this):Ye(this);this.A-=2},function(){this.Zb=!1;this.Ve[this.U()].call(this,Oh,hh);this.Zb&&(this.F=this.F&~this.C|this.ub&this.C)},function(){this.Zb=!1;this.Qc[this.U()].call(this,Ph,hh);this.Zb&&(this.F=this.F&~this.C|
            this.ub&this.C,this.H=this.H&~this.C|this.mc&this.C)},function(){Ze(this);this.A-=2},function(){Ye(this);this.A-=2},function(){this.aa&=~Qb;this.A-=this.B.Ml},function(){this.aa|=Qb;this.S|=4;this.A-=2},function(){this.aa&=~Pb;this.A-=2},function(){this.aa|=Pb;this.A-=2},function(){this.Ve[this.U()].call(this,Jd,hh)},function(){this.Qc[this.U()].call(this,Kd,hh)}],Bh=[yf,hg,wf,qg,Af,Ug,$g,Lf],Lh=[zf,ig,xf,rg,Bf,Vg,ah,Mf],Mh=[function(a,b){this.A-=this.La===n?this.B.cc:this.B.Am;return b},bh,bh,bh,
            bh,bh,bh,bh],Nh=[function(a,b){this.A-=this.La===n?this.B.sm:this.B.qm;return b},ch,ch,ch,ch,ch,ch,ch],Ch=[function(a,b){var c=a,d=b&this.Hb;if(d){var e;(d&=7)?(e=a<<d-1,c=(a<<d|a>>8-d)&255):e=a<<7;bf(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e;(d&=7)?(e=a<<8-d,c=(a>>>d|e)&255):e=a;bf(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e=cf(this);(d%=9)?(c=(a<<d|e<<d-1|a>>9-d)&255,e=a<<d-1):e<<=7;bf(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.Hb;
            if(d){var e=cf(this);(d%=9)?(c=(a>>d|e<<8-d|a<<9-d)&255,e=a<<8-d):e<<=7;bf(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e=0;8<d?c=0:(e=a<<d-1,c=e<<1&255);Xe(this,c,128,e&128,(c^e)&128)}return c},function(a,b){var c=b&this.Hb;c&&(c=8<c?0:a>>>c-1,a=c>>>1&255,Xe(this,a,128,c&1,a&128));return a},ch,function(a,b){var c=b&this.Hb;c&&(9<c&&(c=9),c=a<<24>>24>>c-1,a=c>>1&255,Xe(this,a,128,c&1));return a}],Dh=[function(a,b){var c=a,d=b&this.Hb;if(d){var e;(d&=15)?(e=a<<d-1,c=(a<<d|a>>
            16-d)&65535):e=a<<15;bf(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e;(d&=15)?(e=a<<16-d,c=(a>>>d|e)&65535):e=a;bf(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e=cf(this);(d%=17)?(c=(a<<d|e<<d-1|a>>17-d)&65535,e=a<<d-1):e<<=15;bf(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e=cf(this);(d%=17)?(c=(a>>d|e<<16-d|a<<17-d)&65535,e=a<<16-d):e<<=15;bf(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e=0;16<d?
            c=0:(e=a<<d-1,c=e<<1&65535);Xe(this,c,32768,e&32768,(c^e)&32768)}return c},function(a,b){var c=b&this.Hb;c&&(c=16<c?0:a>>>c-1,a=c>>>1&65535,Xe(this,a,32768,c&1,a&32768));return a},ch,function(a,b){var c=b&this.Hb;c&&(17<c&&(c=17),c=a<<16>>16>>c-1,a=c>>1&65535,Xe(this,a,32768,c&1));return a}],Eh=[function(a,b){var c=a,d=b&this.Hb;d&&(c=a<<d|a>>>32-d,bf(this,c,a<<d-1,-2147483648));return c},function(a,b){var c=a,d=b&this.Hb;if(d){var e=a<<32-d,c=a>>>d|e;bf(this,c,e,-2147483648)}return c},function(a,
            b){var c=a,d=b&this.Hb;d&&(c=cf(this),c=a<<d|c<<d-1|a>>>32-d>>>1,bf(this,c,a<<d-1,-2147483648));return c},function(a,b){var c=a,d=b&this.Hb;d&&(c=cf(this),c=a>>>d|c<<32-d|a<<32-d<<1,bf(this,c,a<<32-d,-2147483648));return c},function(a,b){var c=a,d=b&this.Hb;d&&(d=a<<d-1,c=d<<1,Xe(this,c,-2147483648,d&-2147483648,(c^d)&-2147483648));return c},function(a,b){var c=b&this.Hb;c&&(c=a>>>c-1,a=c>>>1,Xe(this,a,-2147483648,c&1,a&-2147483648));return a},ch,function(a,b){var c=b&this.Hb;c&&(c=a>>c-1,a=c>>1,
            Xe(this,a,-2147483648,c&1));return a}],Oh=[function(a,b){b=this.U();Xe(this,a&b,128);this.A-=this.X===n?this.B.ck:this.B.bk;this.S|=2;return a},ch,function(a){this.A-=this.X===n?this.B.Vg:this.B.Ug;return a^255},function(a){var b=-a|0;Qe(this,0,a,b,191,!0);this.A-=this.X===n?this.B.Vg:this.B.Ug;return b&255},function(a){this.Zb=!0;this.ub=(this.F&255)*a&65535;this.ub&65280?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?this.B.wm:this.B.vm;this.S|=2;return a},function(a){var b=(this.F<<
            24>>24)*(a<<24>>24)|0;this.Zb=!0;this.ub=b&65535;127<b||-128>b?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?this.B.bm:this.B.am;this.S|=2;return a},function(a,b){if(!a)return dh.call(this),a;var c=(b=this.F&65535)/a;if(255<c)return dh.call(this),a;this.Zb=!0;this.ub=c&255|(b%a&255)<<8;this.A-=this.X===n?this.B.Ul:this.B.Tl;this.S|=2;return a},function(a,b){if(!a)return dh.call(this),a;var c=a<<24>>24,d=(b=this.F<<16>>16)/c|0;if(d!=d<<24>>24||8086==this.ka&&-128==d)return dh.call(this),
            a;this.Zb=!0;this.ub=d&255|(b%c&255)<<8;this.A-=this.X===n?this.B.Yl:this.B.Xl;this.S|=2;return a}],Ph=[function(a,b){b=this.oa();Xe(this,a&b,32768);this.A-=this.X===n?this.B.ck:this.B.bk;this.S|=2;return a},ch,function(a){this.A-=this.X===n?this.B.Vg:this.B.Ug;return a^65535},function(a){var b=-a|0;Qe(this,0,a,b,32831,!0);this.A-=this.X===n?this.B.Vg:this.B.Ug;return b&65535},function(a,b){if(2==this.pa){b=this.F&65535;var c=b*a|0;this.Zb=!0;this.ub=c&65535;this.mc=c>>16&65535}else gg.call(this,
            a,this.F);this.mc?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?this.B.ym:this.B.xm;this.S|=2;return a},function(a,b){var c;if(2==this.pa)b=this.F&65535,c=(b<<16>>16)*(a<<16>>16)|0,this.Zb=!0,this.ub=c&65535,this.mc=c>>16&65535,c=32767<c||-32768>c;else{c=a;var d=this.F,e=!1;0>d&&(d=-d|0,e=!e);0>c&&(c=-c|0,e=!e);gg.call(this,c,d);e&&(this.ub=~this.ub+1|0,this.mc=~this.mc+(this.ub?0:1)|0);c=this.mc!=this.ub>>31}c?(Ye(this),$e(this)):(Ze(this),af(this));this.A-=this.X===n?this.B.dm:this.B.cm;
            this.S|=2;return a},function(a,b){if(2==this.pa){if(!a)return dh.call(this),a;b=65536*(this.H&65535)+(this.F&65535);var c=b/a|0;if(65536<=c)return dh.call(this),a;this.Zb=!0;this.ub=c&65535;this.mc=b%a&65535}else{Pf.call(this,this.F,this.H,a);if(!this.Zb)return dh.call(this),a;this.ub|=0;this.mc|=0}this.A-=this.X===n?this.B.Wl:this.B.Vl;this.S|=2;return a},function(a,b){if(2==this.pa){if(!a)return dh.call(this),a;var c=a<<16>>16,d=(b=this.H<<16|this.F&65535)/c|0;if(d!=d<<16>>16||8086==this.ka&&-32768==
            d)return dh.call(this),a;this.Zb=!0;this.ub=d&65535;this.mc=b%c&65535}else{var c=this.F,d=this.H,e=a,g=!1,l=!1;0>e&&(e=-e|0,g=!g);0>d&&(c=-c|0,d=~d+(c?0:1)|0,l=!0,g=!g);Pf.call(this,c,d,e);2147483647<this.ub&&(this.Zb=!1);g&&(this.ub=-this.ub);l&&(this.mc=-this.mc);if(!this.Zb)return dh.call(this),a;this.ub|=0;this.mc|=0}this.A-=this.X===n?this.B.$l:this.B.Zl;this.S|=2;return a}],Jd=[function(a){var b=a+1|0;Qe(this,a,1,b,190);this.A-=this.X===n?this.B.Tg:this.B.Sg;return b&255},function(a){var b=
            a-1|0;Qe(this,a,1,b,190,!0);this.A-=this.X===n?this.B.Tg:this.B.Sg;return b&255},ch,ch,ch,ch,ch,ch],Kd=[function(a){var b=a+1|0;Qe(this,a,1,b,32830);this.A-=this.X===n?this.B.Tg:this.B.Sg;return b&65535},function(a){var b=a-1|0;Qe(this,a,1,b,32830,!0);this.A-=this.X===n?this.B.Tg:this.B.Sg;return b&65535},function(a){zd(this,q(this));C(this,a);this.A-=this.X===n?this.B.Sl:this.B.Rl;this.S|=2;return a},function(a){if(this.X===n)return ch.call(this,a);Kf.call(this,a,this.ra(this.X+this.pa));this.A-=
            this.B.Pl;this.S|=2;return a},function(a){C(this,a);this.A-=this.X===n?this.B.mm:this.B.lm;this.S|=2;return a},function(a){if(this.X===n)return ch.call(this,a);Cd(this,a,this.ra(this.X+this.pa));this.Bh&&He(this,this.sa);this.A-=this.B.jm;this.S|=2;return a},function(a){var b=a;this.S&512&&(a=a-2&65535,80286>this.ka&&(b=a));zd(this,b);this.A-=this.X===n?this.B.Cc:this.B.Cm;this.S|=2;return a},bh],ee=Array(256);ee[0]=function(){var a=this.U();16>(a&56)&&(this.S|=1);this.Qc[a].call(this,this.ln,hh)};
            ee[1]=function(){var a=this.U();a&16||(this.S|=1);this.Qc[a].call(this,Qh,hh)};ee[2]=function(){this.Na[this.U()].call(this,Wf)};ee[3]=function(){this.Na[this.U()].call(this,bg)};
            ee[5]=function(){this.ta.Pa?ud.call(this,13,0,!0):(hf(this,this.ra(2054)),this.J=this.ra(2086),this.K=this.ra(2088),this.L=this.ra(2090),this.D=this.ra(2094),this.H=this.ra(2096),this.G=this.ra(2098),this.F=this.ra(2100),vd(this.Ma,2102,this.ra(2084)),vd(this.ta,2108,this.ra(2082)),vd(this.ua,2114,this.ra(2080)),vd(this.bb,2120,this.ra(2078)),Bd(this,this.ra(2072)),C(this,this.ra(2074)),u(this,this.ra(2092)),this.Fd=this.ra(2126)|this.Qa(2128)<<16,this.Cf=this.Fd+this.ra(2130),vd(this.yd,2132,this.ra(2076)),
            this.Gd=this.ra(2138)|this.Qa(2140)<<16,this.Ye=this.Gd+this.ra(2142),vd(this.cb,2144,this.ra(2070)),this.A-=195)};ee[6]=function(){this.ta.Pa?ud.call(this,13,0):(this.hb&=-9,this.A-=2)};ee[11]=Md;var x=[];x[32]=function(){var a=this.U()|192;if(this.ta.Pa)ud.call(this,13,0);else{switch((a&56)>>3){case 0:this.Rd=this.hb;break;case 1:this.Rd=this.ki;break;case 2:this.Rd=this.Yf;break;case 3:this.Rd=this.uf;break;default:fe.call(this);return}ze(this,4);this.Na[a].call(this,fg)}};
            x[34]=function(){var a,b=this.U()|192;if(this.ta.Pa)ud.call(this,13,0);else{var c=(b&56)>>3;switch(c){case 0:a=this.F;break;case 1:a=this.G;break;case 2:a=this.H;break;case 3:a=this.D;break;default:Md.call(this);return}ze(this,4);this.Na[b].call(this,dg);switch(c){case 0:c=this.F;this.F=a;this.hb=c;pe(this);this.hb&-2147483648?ne(this):this.na!=this.Se&&(this.na=this.Se,this.xi=this.Xk=null);break;case 1:this.ki=this.G;this.G=a;break;case 2:this.Yf=this.H;this.H=a;break;case 3:c=this.D,this.D=a,this.uf=
            c,this.hb&-2147483648&&ne(this)}}};x[128]=function(){var a=this.oa();We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[129]=function(){var a=this.oa();We(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};x[130]=function(){var a=this.oa();Re(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[131]=function(){var a=this.oa();Re(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};
            x[132]=function(){var a=this.oa();Ue(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[133]=function(){var a=this.oa();Ue(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};x[134]=function(){var a=this.oa();Re(this)||Ue(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[135]=function(){var a=this.oa();Re(this)||Ue(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};
            x[136]=function(){var a=this.oa();Ve(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[137]=function(){var a=this.oa();Ve(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};x[138]=function(){var a=this.oa();Se(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[139]=function(){var a=this.oa();Se(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};
            x[140]=function(){var a=this.oa();!Ve(this)!=!We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[141]=function(){var a=this.oa();!Ve(this)==!We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[142]=function(){var a=this.oa();Ue(this)||!Ve(this)!=!We(this)?(C(this,q(this)+a),this.A-=this.B.Ha):this.A-=this.B.Ia};x[143]=function(){var a=this.oa();Ue(this)||!Ve(this)!=!We(this)?this.A-=this.B.Ia:(C(this,q(this)+a),this.A-=this.B.Ha)};x[144]=function(){sg.call(this,tg)};
            x[145]=function(){sg.call(this,tg)};x[146]=function(){sg.call(this,ug)};x[147]=function(){sg.call(this,vg)};x[148]=function(){sg.call(this,wg)};x[149]=function(){sg.call(this,xg)};x[150]=function(){sg.call(this,yg)};x[151]=function(){sg.call(this,zg)};x[152]=function(){sg.call(this,Ag)};x[153]=function(){sg.call(this,Bg)};x[154]=function(){sg.call(this,Cg)};x[155]=function(){sg.call(this,Dg)};x[156]=function(){sg.call(this,Eg)};x[157]=function(){sg.call(this,Fg)};x[158]=function(){sg.call(this,Gg)};
            x[159]=function(){sg.call(this,Hg)};x[160]=function(){zd(this,this.xc.ia);this.A-=this.B.qf};x[161]=function(){var a=this.Ka();this.xc.load(a);this.A-=this.B.cc};x[163]=function(){this.Lb[this.U()].call(this,Gf);this.X!==n&&(this.A-=this.B.cr)};x[164]=function(){this.Lb[this.U()].call(this,2==this.pa?Kg:Lg);this.A-=this.X===n?this.B.Yj:this.B.Xj};x[165]=function(){this.Lb[this.U()].call(this,2==this.pa?Mg:Ng);this.A-=this.X===n?this.B.Yj:this.B.Xj};x[168]=function(){zd(this,this.yc.ia);this.A-=this.B.qf};
            x[169]=function(){var a=this.Ka();this.yc.load(a);this.A-=this.B.cc};x[171]=function(){this.Lb[this.U()].call(this,Jf);this.X!==n&&(this.A-=this.B.Jl)};x[172]=function(){this.Lb[this.U()].call(this,2==this.pa?Qg:Rg);this.A-=this.X===n?this.B.Yj:this.B.Xj};x[173]=function(){this.Lb[this.U()].call(this,2==this.pa?Sg:Tg);this.A-=this.X===n?this.B.Yj:this.B.Xj};x[175]=function(){this.Na[this.U()].call(this,2==this.pa?Tf:Uf)};x[178]=function(){this.Na[this.U()].call(this,cg)};
            x[179]=function(){this.Lb[this.U()].call(this,If);this.X!==n&&(this.A-=this.B.Jl)};x[180]=function(){this.Na[this.U()].call(this,$f)};x[181]=function(){this.Na[this.U()].call(this,ag)};
            x[182]=function(){var a,b=this.U(),c=(b&56)>>3;switch(c){case 4:a=this.F;break;case 5:a=this.G;break;case 6:a=this.H;break;case 7:a=this.D}this.Rc[b].call(this,eg);switch(c){case 0:this.F=this.F&~this.C|this.F&255;break;case 1:this.G=this.G&~this.C|this.G&255;break;case 2:this.H=this.H&~this.C|this.H&255;break;case 3:this.D=this.D&~this.C|this.D&255;break;case 4:this.je=this.je&~this.C|this.F>>8&255;this.F=a;break;case 5:this.L=this.L&~this.C|this.G>>8&255;this.G=a;break;case 6:this.K=this.K&~this.C|
            this.H>>8&255;this.H=a;break;case 7:this.J=this.J&~this.C|this.D>>8&255,this.D=a}this.A-=this.X===n?this.B.Oj:this.B.Nj};x[183]=function(){var a=this.U();ze(this,2);this.Na[a].call(this,eg);switch((a&56)>>3){case 0:this.F&=65535;break;case 1:this.G&=65535;break;case 2:this.H&=65535;break;case 3:this.D&=65535;break;case 4:this.je&=65535;break;case 5:this.L&=65535;break;case 6:this.K&=65535;break;case 7:this.J&=65535}this.A-=this.X===n?this.B.Oj:this.B.Nj};
            x[186]=function(){this.Qc[this.U()].call(this,Rh,this.U)};x[187]=function(){this.Lb[this.U()].call(this,Hf);this.X!==n&&(this.A-=this.B.Jl)};x[188]=function(){this.Na[this.U()].call(this,Ef)};x[189]=function(){this.Na[this.U()].call(this,Ff)};
            x[190]=function(){var a,b=this.U(),c=(b&56)>>3;switch(c){case 4:a=this.F;break;case 5:a=this.G;break;case 6:a=this.H;break;case 7:a=this.D}this.Rc[b].call(this,eg);switch(c){case 0:this.F=this.F&~this.C|(this.F&255)<<24>>24&this.C;break;case 1:this.G=this.G&~this.C|(this.G&255)<<24>>24&this.C;break;case 2:this.H=this.H&~this.C|(this.H&255)<<24>>24&this.C;break;case 3:this.D=this.D&~this.C|(this.D&255)<<24>>24&this.C;break;case 4:this.je=this.je&~this.C|this.F<<16>>24&this.C;this.F=a;break;case 5:this.L=
            this.L&~this.C|this.G<<16>>24&this.C;this.G=a;break;case 6:this.K=this.K&~this.C|this.H<<16>>24&this.C;this.H=a;break;case 7:this.J=this.J&~this.C|this.D<<16>>24&this.C,this.D=a}this.A-=this.X===n?this.B.Oj:this.B.Nj};
            x[191]=function(){var a=this.U();ze(this,2);this.Na[a].call(this,eg);switch((a&56)>>3){case 0:this.F=this.F<<16>>16;break;case 1:this.G=this.G<<16>>16;break;case 2:this.H=this.H<<16>>16;break;case 3:this.D=this.D<<16>>16;break;case 4:this.je=this.je<<16>>16;break;case 5:this.L=this.L<<16>>16;break;case 6:this.K=this.K<<16>>16;break;case 7:this.J=this.J<<16>>16}this.A-=this.X===n?this.B.Oj:this.B.Nj};
            var Ie=[function(){this.A-=2+(this.X===n?0:1);return this.yd.ia},function(){this.A-=2+(this.X===n?0:1);return this.cb.ia},function(a){this.S|=2;this.yd.load(a);this.A-=17+(this.X===n?0:2);return a},function(a){this.S|=2;this.cb.load(a)!==n&&(this.Kb(this.cb.Ed+4,this.cb.Rb|=512),this.cb.type=768);this.A-=17+(this.X===n?0:2);return a},function(a){this.S|=2;this.A-=14+(this.X===n?0:2);if(this.Tb.load(a,!0)!==n&&2048!=(this.Tb.Rb&2560)&&(this.Tb.Bc>=this.ta.Pa&&this.Tb.Bc>=(a&3)||7168==(this.Tb.Rb&7168)))return gf(this),
            a;ef(this);return a},function(a){this.S|=2;this.A-=14+(this.X===n?0:2);if(this.Tb.load(a,!0)!==n&&512==(this.Tb.Rb&2560)&&this.Tb.Bc>=this.ta.Pa&&this.Tb.Bc>=(a&3))return gf(this),a;ef(this);return a},ch,ch],Ld=[ce,ce,ce,ce,ce,ce,ch,ch],Qh=[function(a){if(this.X===n)Md.call(this);else{a=this.Cf-this.Fd;var b=this.Fd;80286==this.ka?b|=-16777216:this.ka>=Lb&&(2==this.pa?b&=16777215:a|=b<<16);this.Ak(this.X+2,b);this.A-=11}return a},function(a){if(this.X===n)Md.call(this);else{a=this.Ye-this.Gd;var b=
            this.Gd;80286==this.ka?b|=-16777216:this.ka>=Lb&&(2==this.pa?b&=16777215:a|=b<<16);this.Ak(this.X+2,b);this.A-=12}return a},function(a){this.X===n?Md.call(this):(this.Fd=this.fe(this.X+2)&(this.C|this.C<<8),a&=65535,this.Cf=this.Fd+a,this.S|=2,this.A-=11);return a},function(a){this.X===n?Md.call(this):(this.Gd=this.fe(this.X+2)&(this.C|this.C<<8),a&=65535,this.Ye=this.Gd+a,this.S|=2,this.A-=12);return a},function(){this.A-=2+(this.X===n?0:1);return this.hb},ch,function(a){hf(this,a);this.A-=this.X===
            n?3:6;this.S|=2;return a},ch],Rh=[ch,ch,ch,ch,Gf,Jf,If,Hf],y=[function(a){a=a.call(this,this.F&255,D(this,this.D+this.K));this.F=this.F&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.F&255,D(this,this.D+this.J));this.F=this.F&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.F&255,E(this,this.L+this.K));this.F=this.F&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.F&255,E(this,this.L+this.J));this.F=this.F&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.F&255,D(this,
            this.K));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,this.J));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,R(this)));this.F=this.F&-256|a;this.A-=this.B.da},function(a){a=a.call(this,this.F&255,D(this,this.D));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.D+this.K));this.G=this.G&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.G&255,D(this,this.D+this.J));this.G=this.G&-256|
            a;this.A-=this.B.ca},function(a){a=a.call(this,this.G&255,E(this,this.L+this.K));this.G=this.G&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.G&255,E(this,this.L+this.J));this.G=this.G&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.G&255,D(this,this.K));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.J));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,R(this)));this.G=this.G&-256|a;this.A-=this.B.da},function(a){a=
            a.call(this,this.G&255,D(this,this.D));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.D+this.K));this.H=this.H&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.H&255,D(this,this.D+this.J));this.H=this.H&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.H&255,E(this,this.L+this.K));this.H=this.H&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.H&255,E(this,this.L+this.J));this.H=this.H&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,
            this.H&255,D(this,this.K));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.J));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,R(this)));this.H=this.H&-256|a;this.A-=this.B.da},function(a){a=a.call(this,this.H&255,D(this,this.D));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,this.D+this.K));this.D=this.D&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.D&255,D(this,this.D+this.J));
            this.D=this.D&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.D&255,E(this,this.L+this.K));this.D=this.D&-256|a;this.A-=this.B.ca},function(a){a=a.call(this,this.D&255,E(this,this.L+this.J));this.D=this.D&-256|a;this.A-=this.B.ba},function(a){a=a.call(this,this.D&255,D(this,this.K));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,this.J));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,R(this)));this.D=this.D&-256|a;this.A-=
            this.B.da},function(a){a=a.call(this,this.D&255,D(this,this.D));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.J));this.F=this.F&
            -65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.F>>8&255,D(this,this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.F>>8&255,D(this,this.D));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.K));this.G=
            this.G&-65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.G>>8&255,D(this,this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,
            D(this,this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.G>>8&255,D(this,this.D));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,
            this.H>>8&255,E(this,this.L+this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.H>>8&255,D(this,this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.da},function(a){a=
            a.call(this,this.H>>8&255,D(this,this.D));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.ba},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.ca},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.J));this.D=this.D&-65281|a<<8;this.A-=
            this.B.ba},function(a){a=a.call(this,this.D>>8&255,D(this,this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.D>>8&255,D(this,this.D));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,this.D+this.K+this.M()));this.F=this.F&-256|
            a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,D(this,this.D+this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&255,E(this,this.L+this.K+this.M()));this.F=this.F&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&255,E(this,this.L+this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,D(this,this.K+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.J+this.M()));
            this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.L+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.D+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.D+this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,D(this,this.D+this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&255,E(this,
            this.L+this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&255,E(this,this.L+this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,D(this,this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.L+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.G&255,D(this,this.D+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.D+this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,D(this,this.D+this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&255,E(this,this.L+this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&255,E(this,this.L+this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.P},
            function(a){a=a.call(this,this.H&255,D(this,this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.L+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.D+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.D+this.K+this.M()));this.D=this.D&-256|a;this.A-=
            this.B.P},function(a){a=a.call(this,this.D&255,D(this,this.D+this.J+this.M()));this.D=this.D&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.D&255,E(this,this.L+this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.D&255,E(this,this.L+this.J+this.M()));this.D=this.D&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,D(this,this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.J+this.M()));this.D=
            this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.L+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.D+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.K+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.F>>8&
            255,E(this,this.L+this.K+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,D(this,this.K+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.M()));this.F=this.F&-65281|a<<
            8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.J+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,
            this.G>>8&255,E(this,this.L+this.J+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,D(this,this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.J+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.M()));this.G=this.G&-65281|
            a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.K+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.K+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=
            a.call(this,this.H>>8&255,D(this,this.K+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.K+this.M()));this.D=
            this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,D(this,this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=
            a.call(this,this.D>>8&255,D(this,this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.D+this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,D(this,this.D+this.J+R(this)));this.F=this.F&
            -256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&255,E(this,this.L+this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&255,E(this,this.L+this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,D(this,this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.L+R(this)));this.F=
            this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.D+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.D+this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,D(this,this.D+this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&255,E(this,this.L+this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&255,E(this,this.L+
            this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,D(this,this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.L+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.D+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.D+
            this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,D(this,this.D+this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&255,E(this,this.L+this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&255,E(this,this.L+this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,D(this,this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.H&255,D(this,this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.L+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.D+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.D+this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,D(this,this.D+this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.Q},function(a){a=
            a.call(this,this.D&255,E(this,this.L+this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.Q},function(a){a=a.call(this,this.D&255,E(this,this.L+this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,D(this,this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.L+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.D&255,D(this,this.D+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.J+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.J+R(this)));
            this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,D(this,this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.J+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,
            this.G>>8&255,D(this,this.D+this.K+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+this.K+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,D(this,this.K+R(this)));this.G=
            this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,
            this.H>>8&255,D(this,this.D+this.J+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.J+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.H>>8&255,D(this,this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.J+R(this)));this.H=this.H&
            -65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,
            this.D>>8&255,E(this,this.L+this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.Q},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,D(this,this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+R(this)));this.D=this.D&-65281|
            a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,this.F&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.G&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.H&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.F>>8&255);this.F=this.F&-256|a},function(a){a=
            a.call(this,this.F&255,this.G>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.H>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.G&255,this.F&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D&255);this.G=this.G&-256|a},function(a){a=
            a.call(this,this.G&255,this.F>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.H&255,this.F&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H&255);this.H=this.H&-256|a},function(a){a=
            a.call(this,this.H&255,this.D&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.F>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.D>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.D&255,this.F&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G&255);this.D=this.D&-256|a},function(a){a=
            a.call(this,this.D&255,this.H&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.F>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.H>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.F>>8&255,this.F&255);this.F=this.F&-65281|a<<8},
            function(a){a=a.call(this,this.F>>8&255,this.G&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.D&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.F>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.G>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,
            this.F>>8&255,this.D>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.H&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G>>
            8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.H>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D&255);this.H=this.H&
            -65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G&255);this.D=this.D&-65281|a<<8},function(a){a=
            a.call(this,this.D>>8&255,this.H&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.H>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D>>8&255);this.D=this.D&-65281|a<<8}],re=[function(a){a=a.call(this,
            L(this,this.D+this.K),this.F&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.F&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),this.F&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.F&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,R(this)),this.F&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D+this.K),this.G&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.G&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),this.G&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.G&255);P(this,a);this.A-=this.B.ba},
            function(a){a=a.call(this,L(this,this.K),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.G&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D+this.K),this.H&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.H&255);P(this,a);this.A-=this.B.ca},
            function(a){a=a.call(this,M(this,this.L+this.K),this.H&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.H&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.H&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.H&255);P(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,L(this,this.D+this.K),this.D&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.D&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),this.D&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.D&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.D&255);P(this,a);this.A-=
            this.B.N},function(a){a=a.call(this,L(this,R(this)),this.D&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D+this.K),this.F>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.F>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),this.F>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.F>>
            8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.F>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D+this.K),this.G>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+
            this.J),this.G>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),this.G>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.G>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.G>>8&255);P(this,a);this.A-=this.B.da},function(a){a=
            a.call(this,L(this,this.D),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D+this.K),this.H>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.H>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),this.H>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.H>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.H>>8&255);P(this,
            a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.H>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D+this.K),this.D>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.D+this.J),this.D>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.K),
            this.D>>8&255);P(this,a);this.A-=this.B.ca},function(a){a=a.call(this,M(this,this.L+this.J),this.D>>8&255);P(this,a);this.A-=this.B.ba},function(a){a=a.call(this,L(this,this.K),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.D>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.D),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,
            this.D+this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.F&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.F&
            255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.Q},
            function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+
            this.M()),this.H&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.H&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.H&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.H&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.H&255);P(this,a);
            this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.Q},function(a){a=
            a.call(this,M(this,this.L+this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+this.M()),this.F>>
            8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.F>>8&255);P(this,a);
            this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.Q},
            function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,
            this.D+this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),
            this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+this.M()),this.D>>8&255);
            P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,L(this,this.D+this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.F&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+R(this)),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),
            this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.Q},
            function(a){a=a.call(this,M(this,this.L+this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),
            this.H&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,M(this,this.L+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.D&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+
            this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),this.F>>8&255);P(this,a);this.A-=
            this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,M(this,this.L+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+
            this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),this.H>>8&255);P(this,
            a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,M(this,this.L+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.D+this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,M(this,this.L+this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.Q},function(a){a=a.call(this,
            M(this,this.L+this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,L(this,this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},y[192],y[200],y[208],y[216],y[224],y[232],y[240],y[248],y[193],
            y[201],y[209],y[217],y[225],y[233],y[241],y[249],y[194],y[202],y[210],y[218],y[226],y[234],y[242],y[250],y[195],y[203],y[211],y[219],y[227],y[235],y[243],y[251],y[196],y[204],y[212],y[220],y[228],y[236],y[244],y[252],y[197],y[205],y[213],y[221],y[229],y[237],y[245],y[253],y[198],y[206],y[214],y[222],y[230],y[238],y[246],y[254],y[199],y[207],y[215],y[223],y[231],y[239],y[247],y[255]],se=[function(a,b){var c=a[0].call(this,L(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.ba},function(a,
            b){var c=a[0].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[0].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[0].call(this,M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[0].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,
            L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[0].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[1].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[1].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[1].call(this,M(this,this.L+this.J),
            b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[1].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[1].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,this.D+this.K),b.call(this));P(this,c);this.A-=
            this.B.ba},function(a,b){var c=a[2].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[2].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[2].call(this,M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[2].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,
            b){var c=a[2].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[2].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[3].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[3].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[3].call(this,
            M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[3].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[3].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,this.D+this.K),b.call(this));
            P(this,c);this.A-=this.B.ba},function(a,b){var c=a[4].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[4].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[4].call(this,M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[4].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=
            this.B.N},function(a,b){var c=a[4].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[4].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[5].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[5].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,
            b){var c=a[5].call(this,M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[5].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[5].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,
            this.D+this.K),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[6].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[6].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[6].call(this,M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[6].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,this.J),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[6].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[7].call(this,L(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.ca},function(a,b){var c=a[7].call(this,M(this,this.L+this.K),b.call(this));P(this,c);this.A-=
            this.B.ca},function(a,b){var c=a[7].call(this,M(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.ba},function(a,b){var c=a[7].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[7].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=
            a[0].call(this,L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[0].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,L(this,this.D+this.J+this.M()),b.call(this));
            P(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.L+this.M()),
            b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,
            M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,
            L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,
            b){var c=a[3].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},
            function(a,b){var c=a[4].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,M(this,this.L+this.J+this.M()),
            b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.D+this.K+
            this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,
            L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,L(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=
            a[7].call(this,M(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[7].call(this,M(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,
            b){var c=a[7].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=
            this.B.P},function(a,b){var c=a[0].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=
            this.B.P},function(a,b){var c=a[1].call(this,L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.J+R(this)),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,M(this,this.L+this.K+R(this)),
            b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.D+R(this)),
            b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,
            L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,
            L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=
            a[4].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},
            function(a,b){var c=a[5].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},
            function(a,b){var c=a[6].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,L(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,L(this,this.K+R(this)),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,L(this,this.D+this.J+R(this)),b.call(this));
            P(this,c);this.A-=this.B.Q},function(a,b){var c=a[7].call(this,M(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.Q},function(a,b){var c=a[7].call(this,M(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.L+R(this)),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[0].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[0].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[0].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[0].call(this,this.F>>8&
            255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[0].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[0].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[0].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[1].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[1].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[1].call(this,
            this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[1].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[1].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[1].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[1].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[1].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=
            a[2].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[2].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[2].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[2].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[2].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[2].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=
            a[2].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[2].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[3].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[3].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[3].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[3].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=
            a[3].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[3].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[3].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[3].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[4].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[4].call(this,this.G&255,b.call(this));this.G=this.G&-256|
            c},function(a,b){var c=a[4].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[4].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[4].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[4].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[4].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[4].call(this,this.D>>8&255,b.call(this));this.D=
            this.D&-65281|c<<8},function(a,b){var c=a[5].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[5].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[5].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[5].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[5].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[5].call(this,this.G>>8&255,b.call(this));
            this.G=this.G&-65281|c<<8},function(a,b){var c=a[5].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[5].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[6].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[6].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[6].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[6].call(this,this.D&255,b.call(this));
            this.D=this.D&-256|c},function(a,b){var c=a[6].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[6].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[6].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[6].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[7].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[7].call(this,this.G&
            255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[7].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[7].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[7].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[7].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[7].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[7].call(this,
            this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8}],z=[function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.K));this.F=this.F&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.J));this.F=this.F&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.K));this.F=this.F&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.J));this.F=this.F&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,
            this.F&this.C,G(this,this.K));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.J));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,R(this)));this.F=this.F&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.F&this.C,G(this,this.D));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.K));this.G=this.G&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.G&
            this.C,G(this,this.D+this.J));this.G=this.G&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.K));this.G=this.G&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.J));this.G=this.G&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.G&this.C,G(this,this.K));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.J));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,
            this.G&this.C,G(this,R(this)));this.G=this.G&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.G&this.C,G(this,this.D));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.K));this.H=this.H&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.J));this.H=this.H&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.H&this.C,H(this,this.L+this.K));this.H=this.H&~this.C|a;this.A-=this.B.ca},function(a){a=
            a.call(this,this.H&this.C,H(this,this.L+this.J));this.H=this.H&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.H&this.C,G(this,this.K));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,this.J));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,R(this)));this.H=this.H&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.H&this.C,G(this,this.D));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,
            this.D&this.C,G(this,this.D+this.K));this.D=this.D&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.D&this.C,G(this,this.D+this.J));this.D=this.D&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.K));this.D=this.D&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.J));this.D=this.D&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.D&this.C,G(this,this.K));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=
            a.call(this,this.D&this.C,G(this,this.J));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,R(this)));this.D=this.D&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.D&this.C,G(this,this.D));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.K));u(this,r(this)&~this.C|a);this.A-=this.B.ba},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.J));u(this,r(this)&~this.C|a);this.A-=this.B.ca},function(a){a=
            a.call(this,r(this)&this.C,H(this,this.L+this.K));u(this,r(this)&~this.C|a);this.A-=this.B.ca},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.J));u(this,r(this)&~this.C|a);this.A-=this.B.ba},function(a){a=a.call(this,r(this)&this.C,G(this,this.K));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,this.J));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.da},
            function(a){a=a.call(this,r(this)&this.C,G(this,this.D));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.K));this.L=this.L&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.J));this.L=this.L&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.K));this.L=this.L&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.J));this.L=this.L&~this.C|
            a;this.A-=this.B.ba},function(a){a=a.call(this,this.L&this.C,G(this,this.K));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,this.J));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,R(this)));this.L=this.L&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.L&this.C,G(this,this.D));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.K));this.K=this.K&~this.C|a;
            this.A-=this.B.ba},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.J));this.K=this.K&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.K));this.K=this.K&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.J));this.K=this.K&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.K&this.C,G(this,this.K));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.J));this.K=this.K&
            ~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,R(this)));this.K=this.K&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.K&this.C,G(this,this.D));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.K));this.J=this.J&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.J));this.J=this.J&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.K));
            this.J=this.J&~this.C|a;this.A-=this.B.ca},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.J));this.J=this.J&~this.C|a;this.A-=this.B.ba},function(a){a=a.call(this,this.J&this.C,G(this,this.K));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.J));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,R(this)));this.J=this.J&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.J&this.C,G(this,this.D));
            this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=
            a.call(this,this.F&this.C,G(this,this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.K+this.M()));this.G=this.G&~this.C|
            a;this.A-=this.B.P},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&this.C,G(this,this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&
            this.C,G(this,this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.J+this.M()));this.H=this.H&~this.C|a;this.A-=
            this.B.Q},function(a){a=a.call(this,this.H&this.C,H(this,this.L+this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&this.C,H(this,this.L+this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&this.C,G(this,this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.L+
            this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.D+this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,G(this,this.D+this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.Q},
            function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,G(this,this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.D+this.M()));this.D=
            this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.K+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.P},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.J+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.Q},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.K+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.Q},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.J+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.P},
            function(a){a=a.call(this,r(this)&this.C,G(this,this.K+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.J+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.K+
            this.M()));this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.L&this.C,G(this,this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.L&this.C,G(this,this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.J+this.M()));
            this.K=this.K&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,G(this,this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.K&this.C,H(this,this.L+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.K+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.K+this.M()));this.J=this.J&
            ~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,G(this,this.K+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,
            G(this,this.D+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.J+R(this)));this.F=this.F&~this.C|a;
            this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,G(this,this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.L+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.D+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.K+
            R(this)));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.K+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&this.C,G(this,this.K+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.G&this.C,G(this,this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.L+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.D+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.J+R(this)));this.H=this.H&
            ~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&this.C,H(this,this.L+this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.H&this.C,H(this,this.L+this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&this.C,G(this,this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,
            H(this,this.L+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.D+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.D+this.K+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,G(this,this.D+this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.K+R(this)));this.D=this.D&~this.C|a;this.A-=
            this.B.Q},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,G(this,this.K+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.L+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.D+R(this)));
            this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.K+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.P},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.J+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.Q},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.K+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.Q},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.J+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.P},
            function(a){a=a.call(this,r(this)&this.C,G(this,this.K+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.J+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.K+R(this)));
            this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.L&this.C,G(this,this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.L&this.C,G(this,this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.L+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.D+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.J+R(this)));this.K=this.K&
            ~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,G(this,this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,
            H(this,this.L+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.D+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.K+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.Q},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.K+R(this)));this.J=this.J&~this.C|a;this.A-=
            this.B.Q},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,G(this,this.K+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.L+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.D+R(this)));
            this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,this.F&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.G&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.H&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.D&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,r(this)&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.L&this.C);this.F=
            this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.K&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.J&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.F&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.G&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.H&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.D&this.C);this.G=this.G&~this.C|a},function(a){a=
            a.call(this,this.G&this.C,r(this)&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.L&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.K&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.J&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.F&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.G&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,
            this.H&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.D&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,r(this)&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.L&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.K&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.J&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.F&this.C);this.D=
            this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.G&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.H&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.D&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,r(this)&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.L&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.K&this.C);this.D=this.D&~this.C|a},function(a){a=
            a.call(this,this.D&this.C,this.J&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,r(this)&this.C,this.F&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.G&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.H&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.D&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,r(this)&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,
            r(this)&this.C,this.L&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.K&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.J&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,this.L&this.C,this.F&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.G&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.H&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,
            this.D&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,r(this)&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.L&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.K&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.J&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.F&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.G&this.C);this.K=
            this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.H&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.D&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,r(this)&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.L&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.K&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.J&this.C);this.K=this.K&~this.C|a},function(a){a=
            a.call(this,this.J&this.C,this.F&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.G&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.H&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.D&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,r(this)&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.L&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,
            this.K&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.J&this.C);this.J=this.J&~this.C|a}],te=[function(a){a=a.call(this,N(this,this.D+this.K),this.F&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.F&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.K),this.F&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),this.F&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=
            a.call(this,N(this,this.K),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.F&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K),this.G&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.G&this.C);Q(this,a);this.A-=this.B.ca},
            function(a){a=a.call(this,O(this,this.L+this.K),this.G&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),this.G&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.K),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.G&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.G&this.C);Q(this,
            a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K),this.H&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.H&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.K),this.H&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),this.H&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.K),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,
            this.J),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.H&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K),this.D&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.D&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.K),this.D&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=
            a.call(this,O(this,this.L+this.J),this.D&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.K),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.D&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K),r(this)&this.C);Q(this,a);this.A-=this.B.ba},
            function(a){a=a.call(this,N(this,this.D+this.J),r(this)&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.K),r(this)&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),r(this)&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.K),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),r(this)&this.C);
            Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K),this.L&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.L&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.K),this.L&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),this.L&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,
            N(this,this.K),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.L&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K),this.K&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.K&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=
            a.call(this,O(this,this.L+this.K),this.K&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),this.K&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.K),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.K&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.K&this.C);Q(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,N(this,this.D+this.K),this.J&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.D+this.J),this.J&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.K),this.J&this.C);Q(this,a);this.A-=this.B.ca},function(a){a=a.call(this,O(this,this.L+this.J),this.J&this.C);Q(this,a);this.A-=this.B.ba},function(a){a=a.call(this,N(this,this.K),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.J&this.C);
            Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.J&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.D),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D+this.K+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=
            a.call(this,O(this,this.L+this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+
            this.M()),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.G&
            this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.H&this.C);Q(this,
            a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,this.D+this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            N(this,this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+
            this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),r(this)&this.C);
            Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),this.L&this.C);Q(this,a);
            this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=
            a.call(this,O(this,this.L+this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+
            this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+this.M()),
            this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+R(this)),this.F&this.C);Q(this,a);
            this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,this.D+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,
            this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+R(this)),this.H&this.C);
            Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,N(this,this.D+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=
            a.call(this,N(this,this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+
            R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),r(this)&this.C);
            Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.L&this.C);Q(this,a);this.A-=
            this.B.P},function(a){a=a.call(this,N(this,this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,
            N(this,this.D+this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),
            this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.K+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.D+this.J+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.Q},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.J&this.C);
            Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,N(this,this.K+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},z[192],z[200],z[208],z[216],z[224],z[232],z[240],z[248],z[193],z[201],z[209],z[217],z[225],z[233],z[241],
            z[249],z[194],z[202],z[210],z[218],z[226],z[234],z[242],z[250],z[195],z[203],z[211],z[219],z[227],z[235],z[243],z[251],z[196],z[204],z[212],z[220],z[228],z[236],z[244],z[252],z[197],z[205],z[213],z[221],z[229],z[237],z[245],z[253],z[198],z[206],z[214],z[222],z[230],z[238],z[246],z[254],z[199],z[207],z[215],z[223],z[231],z[239],z[247],z[255]],ue=[function(a,b){var c=a[0].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[0].call(this,N(this,this.D+this.J),
            b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[0].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[0].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[0].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,R(this)),b.call(this));Q(this,c);
            this.A-=this.B.da},function(a,b){var c=a[0].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[1].call(this,N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[1].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[1].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.ba},
            function(a,b){var c=a[1].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[1].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[2].call(this,
            N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[2].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[2].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[2].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,R(this)),b.call(this));
            Q(this,c);this.A-=this.B.da},function(a,b){var c=a[2].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[3].call(this,N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[3].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[3].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);
            this.A-=this.B.ba},function(a,b){var c=a[3].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[3].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=
            a[4].call(this,N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[4].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[4].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[4].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,
            R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[4].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[5].call(this,N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[5].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[5].call(this,O(this,this.L+this.J),
            b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[5].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[5].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=
            this.B.ba},function(a,b){var c=a[6].call(this,N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[6].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[6].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[6].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,
            b){var c=a[6].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[6].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[7].call(this,N(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[7].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.ca},function(a,b){var c=a[7].call(this,
            O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.ba},function(a,b){var c=a[7].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[7].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,this.D+this.K+this.M()),
            b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=
            a[1].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,
            b){var c=a[1].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,
            c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.D+this.K+this.M()),b.call(this));
            Q(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.J+
            this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,
            O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=
            a[4].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=
            this.B.P},function(a,b){var c=a[5].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.D+this.K+this.M()),b.call(this));Q(this,
            c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.J+this.M()),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,N(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[7].call(this,O(this,
            this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[7].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,
            N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[0].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,
            b){var c=a[0].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,
            b){var c=a[1].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[1].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},
            function(a,b){var c=a[1].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[2].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);
            this.A-=this.B.Q},function(a,b){var c=a[2].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.D+R(this)),b.call(this));Q(this,
            c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[3].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,N(this,this.K+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,N(this,this.D+this.J+
            R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[4].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,
            this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[5].call(this,
            O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,
            N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[6].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,
            b){var c=a[6].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,N(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},
            function(a,b){var c=a[7].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.Q},function(a,b){var c=a[7].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=
            this.B.I},function(a,b){var c=a[7].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[0].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[0].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[0].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[0].call(this,r(this)&
            this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[0].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[0].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[0].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[1].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[1].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=
            a[1].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[1].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[1].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[1].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[1].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[1].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|
            c},function(a,b){var c=a[2].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[2].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[2].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[2].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[2].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[2].call(this,this.L&this.C,b.call(this));
            this.L=this.L&~this.C|c},function(a,b){var c=a[2].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[2].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[3].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[3].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[3].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[3].call(this,this.D&
            this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[3].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[3].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[3].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[3].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[4].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=
            a[4].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[4].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[4].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[4].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[4].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[4].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|
            c},function(a,b){var c=a[4].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[5].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[5].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[5].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[5].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[5].call(this,r(this)&this.C,b.call(this));
            u(this,r(this)&~this.C|c)},function(a,b){var c=a[5].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[5].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[5].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[6].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[6].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[6].call(this,
            this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[6].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[6].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[6].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[6].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[6].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,
            b){var c=a[7].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[7].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[7].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[7].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[7].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[7].call(this,this.L&this.C,b.call(this));this.L=
            this.L&~this.C|c},function(a,b){var c=a[7].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[7].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c}],A=[function(a){a=a.call(this,this.F&255,D(this,this.F));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,this.G));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,this.H));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&
            255,D(this,this.D));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,U(this,0)));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,R(this)));this.F=this.F&-256|a;this.A-=this.B.da},function(a){a=a.call(this,this.F&255,D(this,this.K));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,this.J));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.F));this.G=this.G&-256|
            a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.G));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.H));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.D));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,U(this,0)));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,R(this)));this.G=this.G&-256|a;this.A-=this.B.da},function(a){a=a.call(this,
            this.G&255,D(this,this.K));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,D(this,this.J));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.F));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.G));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.H));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.D));this.H=this.H&
            -256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,U(this,0)));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,R(this)));this.H=this.H&-256|a;this.A-=this.B.da},function(a){a=a.call(this,this.H&255,D(this,this.K));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,D(this,this.J));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,this.F));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=
            a.call(this,this.D&255,D(this,this.G));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,this.H));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,this.D));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,U(this,0)));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,R(this)));this.D=this.D&-256|a;this.A-=this.B.da},function(a){a=a.call(this,this.D&255,D(this,this.K));
            this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,D(this,this.J));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.F));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.G));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.H));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.D));this.F=this.F&
            -65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,U(this,0)));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.F>>8&255,D(this,this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,D(this,this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,this.F));this.G=this.G&
            -65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,this.G));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,this.H));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,this.D));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,U(this,0)));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,R(this)));this.G=this.G&
            -65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.G>>8&255,D(this,this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,D(this,this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.F));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.G));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.H));this.H=this.H&
            -65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.D));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,U(this,0)));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.H>>8&255,D(this,this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,D(this,this.J));this.H=this.H&
            -65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.F));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.G));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.H));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.D));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,U(this,0)));this.D=this.D&
            -65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.da},function(a){a=a.call(this,this.D>>8&255,D(this,this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,D(this,this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,D(this,this.F+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.G+this.M()));this.F=
            this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.H+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.D+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,U(this,1)+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.L+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.K+this.M()));
            this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.F+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.G+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.H+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.D+this.M()));
            this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,U(this,1)+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.L+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.F+this.M()));
            this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.G+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.H+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.D+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,U(this,1)+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.L+this.M()));
            this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.F+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.G+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.H+this.M()));
            this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.D+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,U(this,1)+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.L+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.J+this.M()));
            this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.F+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.G+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.H+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.D+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,
            this.F>>8&255,D(this,U(this,1)+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.K+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.F+this.M()));this.G=this.G&-65281|a<<
            8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.G+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.H+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,U(this,1)+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,
            this.L+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.J+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.F+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.G+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=
            a.call(this,this.H>>8&255,D(this,this.H+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,U(this,1)+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.K+this.M()));this.H=this.H&
            -65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.F+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.G+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.H+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&
            255,D(this,this.D+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,U(this,1)+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=
            this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.F+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.G+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.H+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.D+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,U(this,2)+R(this)));this.F=this.F&-256|a;this.A-=
            this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.L+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,D(this,this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.F+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.G+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.G&255,D(this,this.H+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.D+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,U(this,2)+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.L+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,D(this,this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.G&255,D(this,this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.F+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.G+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.H+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.D+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.H&255,D(this,U(this,2)+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.L+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,D(this,this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.F+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.D&255,D(this,this.G+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.H+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.D+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,U(this,2)+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.L+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.D&255,D(this,this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,D(this,this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.F+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.G+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.H+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},
            function(a){a=a.call(this,this.F>>8&255,D(this,this.D+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,U(this,2)+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.L+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,D(this,this.J+R(this)));this.F=
            this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.F+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.G+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.H+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.D+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>
            8&255,D(this,U(this,2)+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.L+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.K+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,D(this,this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.F+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},
            function(a){a=a.call(this,this.H>>8&255,D(this,this.G+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.H+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.D+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,U(this,2)+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.L+R(this)));this.H=
            this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,D(this,this.J+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.F+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.G+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>
            8&255,D(this,this.H+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.D+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,U(this,2)+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.L+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,D(this,this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},
            function(a){a=a.call(this,this.D>>8&255,D(this,this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,this.F&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.G&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.H&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.F>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,
            this.G>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.H>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.G&255,this.F&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&
            255,this.F>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.H&255,this.F&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H&255);this.H=this.H&-256|a},function(a){a=a.call(this,
            this.H&255,this.D&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.F>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.D>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.D&255,this.F&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G&255);this.D=this.D&-256|a},function(a){a=a.call(this,
            this.D&255,this.H&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.F>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.H>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.F>>8&255,this.F&255);this.F=this.F&-65281|a<<8},function(a){a=
            a.call(this,this.F>>8&255,this.G&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.D&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.F>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.G>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>
            8&255,this.D>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.H&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G>>8&255);
            this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.H>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D&255);this.H=this.H&-65281|
            a<<8},function(a){a=a.call(this,this.H>>8&255,this.F>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G&255);this.D=this.D&-65281|a<<8},function(a){a=
            a.call(this,this.D>>8&255,this.H&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.H>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D>>8&255);this.D=this.D&-65281|a<<8}],ve=[function(a){a=a.call(this,
            L(this,this.F),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.G),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.F&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),
            this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.G),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.G&255);
            P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.G&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.G),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.H&255);P(this,a);this.A-=
            this.B.N},function(a){a=a.call(this,L(this,this.D),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.H&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.D&255);P(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,L(this,this.G),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.D&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,this.J),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.G),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,R(this)),this.F>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.G),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,this.D),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.G>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,this.G),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,R(this)),this.H>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,this.J),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.G),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.H),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.D),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,U(this,0)),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,L(this,R(this)),this.D>>8&255);P(this,a);this.A-=this.B.da},function(a){a=a.call(this,L(this,this.K),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.J),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,L(this,this.F+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.F&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,L(this,this.D+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),
            this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,L(this,this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.H&255);P(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,
            this.G+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,L(this,this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,
            1)+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.G>>8&255);P(this,a);
            this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            L(this,this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.H>>8&
            255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,L(this,this.H+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,1)+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+this.M()),
            this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,M(this,this.L+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.G&255);P(this,a);
            this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+
            R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,L(this,this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.D&255);P(this,a);
            this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,
            this.G+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.F>>8&255);P(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            L(this,U(this,2)+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.H>>8&255);
            P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,L(this,this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.F+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.G+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.H+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.D+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,U(this,2)+R(this)),this.D>>
            8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.L+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,L(this,this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},A[192],A[200],A[208],A[216],A[224],A[232],A[240],A[248],A[193],A[201],A[209],A[217],A[225],A[233],A[241],A[249],A[194],A[202],A[210],A[218],A[226],A[234],A[242],A[250],A[195],A[203],A[211],A[219],
            A[227],A[235],A[243],A[251],A[196],A[204],A[212],A[220],A[228],A[236],A[244],A[252],A[197],A[205],A[213],A[221],A[229],A[237],A[245],A[253],A[198],A[206],A[214],A[222],A[230],A[238],A[246],A[254],A[199],A[207],A[215],A[223],A[231],A[239],A[247],A[255]],we=[function(a,b){var c=a[0].call(this,L(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,this.H),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[0].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,
            b){var c=a[1].call(this,L(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,R(this)),
            b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[1].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},
            function(a,b){var c=a[2].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[2].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,
            this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=
            this.B.da},function(a,b){var c=a[3].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,
            L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[4].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.F),b.call(this));P(this,
            c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=
            a[5].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,this.D),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[6].call(this,L(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,
            b){var c=a[7].call(this,L(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,U(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,R(this)),b.call(this));P(this,c);this.A-=this.B.da},function(a,b){var c=a[7].call(this,L(this,this.K),
            b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,L(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,L(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.D+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.F+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.L+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.H+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.J+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,U(this,1)+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.G+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.K+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.D+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.F+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.L+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.H+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,U(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.J+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,U(this,2)+R(this)),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.G+R(this)),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.K+R(this)),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[4].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[5].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[5].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},
            function(a,b){var c=a[6].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},
            function(a,b){var c=a[6].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,
            b){var c=a[7].call(this,L(this,U(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,L(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[0].call(this,
            this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[0].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[0].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[0].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[0].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[0].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=
            a[0].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[1].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[1].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[1].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[1].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[1].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=
            a[1].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[1].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[1].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[2].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[2].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[2].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,
            b){var c=a[2].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[2].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[2].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[2].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[2].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[3].call(this,this.F&255,b.call(this));this.F=this.F&
            -256|c},function(a,b){var c=a[3].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[3].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[3].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[3].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[3].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[3].call(this,this.H>>8&255,b.call(this));this.H=
            this.H&-65281|c<<8},function(a,b){var c=a[3].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[4].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[4].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[4].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[4].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[4].call(this,this.F>>8&255,b.call(this));
            this.F=this.F&-65281|c<<8},function(a,b){var c=a[4].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[4].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[4].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[5].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[5].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[5].call(this,this.H&
            255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[5].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[5].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[5].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[5].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[5].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=
            a[6].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[6].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[6].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[6].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[6].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[6].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=
            a[6].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[6].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[7].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[7].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[7].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[7].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=
            a[7].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[7].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[7].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[7].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8}],B=[function(a){a=a.call(this,this.F&this.C,G(this,this.F));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.G));this.F=
            this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.H));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.D));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,U(this,0)));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,R(this)));this.F=this.F&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.F&this.C,G(this,this.K));this.F=this.F&
            ~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.J));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.F));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.G));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.H));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.D));this.G=this.G&~this.C|a;this.A-=
            this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,U(this,0)));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,R(this)));this.G=this.G&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.G&this.C,G(this,this.K));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,G(this,this.J));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,this.F));this.H=this.H&~this.C|a;this.A-=this.B.N},
            function(a){a=a.call(this,this.H&this.C,G(this,this.G));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,this.H));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,this.D));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,U(this,0)));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,R(this)));this.H=this.H&~this.C|a;this.A-=this.B.da},function(a){a=
            a.call(this,this.H&this.C,G(this,this.K));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,G(this,this.J));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,this.F));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,this.G));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,this.H));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,
            this.D&this.C,G(this,this.D));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,U(this,0)));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,R(this)));this.D=this.D&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.D&this.C,G(this,this.K));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,G(this,this.J));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,r(this)&
            this.C,G(this,this.F));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,this.G));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,this.H));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,this.D));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,U(this,0)));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&
            this.C,G(this,R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.da},function(a){a=a.call(this,r(this)&this.C,G(this,this.K));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,r(this)&this.C,G(this,this.J));u(this,r(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,this.F));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,this.G));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,
            G(this,this.H));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,this.D));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,U(this,0)));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,R(this)));this.L=this.L&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.L&this.C,G(this,this.K));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,G(this,
            this.J));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.F));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.G));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.H));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.D));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,U(this,0)));
            this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,R(this)));this.K=this.K&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.K&this.C,G(this,this.K));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,G(this,this.J));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.F));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.G));this.J=this.J&
            ~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.H));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.D));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,U(this,0)));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,R(this)));this.J=this.J&~this.C|a;this.A-=this.B.da},function(a){a=a.call(this,this.J&this.C,G(this,this.K));this.J=this.J&~this.C|
            a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,G(this,this.J));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,G(this,this.F+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.G+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.H+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.D+this.M()));
            this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,U(this,1)+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.L+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&
            this.C,G(this,this.F+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.G+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.H+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.D+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,U(this,1)+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.G&this.C,H(this,this.L+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.F+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.G+this.M()));this.H=this.H&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.H+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.D+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,U(this,1)+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.L+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,
            this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.F+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.G+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.H+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.D&this.C,G(this,this.D+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,U(this,1)+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.L+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.J+this.M()));this.D=this.D&~this.C|
            a;this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.F+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.G+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.H+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,
            G(this,U(this,1)+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.K+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.J+this.M()));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.F+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.L&this.C,G(this,this.G+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.H+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.D+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,U(this,1)+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.L+this.M()));this.L=
            this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.F+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.G+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,
            G(this,this.H+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.D+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,U(this,1)+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.L+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.K&this.C,G(this,this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.F+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.G+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.H+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.D+this.M()));this.J=this.J&~this.C|
            a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,U(this,1)+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.L+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.K+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.F+
            R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.G+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.H+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.D+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,U(this,2)+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.F&this.C,H(this,this.L+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,G(this,this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.F+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.G+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.G&this.C,G(this,this.H+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.D+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,U(this,2)+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.L+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.K+R(this)));this.G=this.G&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,G(this,this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.F+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.G+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.H+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.D+
            R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,U(this,2)+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.L+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,G(this,this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.D&this.C,G(this,this.F+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.G+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.H+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.D+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,U(this,2)+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.D&this.C,H(this,this.L+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.K+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,G(this,this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.F+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.G+R(this)));u(this,r(this)&
            ~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.H+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.D+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,U(this,2)+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,H(this,this.L+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&
            this.C,G(this,this.K+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,r(this)&this.C,G(this,this.J+R(this)));u(this,r(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.F+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.G+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.H+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.L&this.C,G(this,this.D+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,U(this,2)+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.L+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,G(this,this.J+R(this)));this.L=this.L&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.F+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.G+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.H+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.D+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,U(this,
            2)+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.L+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,G(this,this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.F+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.J&this.C,G(this,this.G+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.H+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.D+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,U(this,2)+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.L+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.J&this.C,G(this,this.K+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,G(this,this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,this.F&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.G&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.H&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.D&this.C);
            this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,r(this)&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.L&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.K&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.J&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.F&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.G&this.C);this.G=this.G&~this.C|
            a},function(a){a=a.call(this,this.G&this.C,this.H&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.D&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,r(this)&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.L&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.K&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.J&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,
            this.H&this.C,this.F&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.G&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.H&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.D&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,r(this)&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.L&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.K&
            this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.J&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.F&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.G&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.H&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.D&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,r(this)&this.C);this.D=this.D&
            ~this.C|a},function(a){a=a.call(this,this.D&this.C,this.L&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.K&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.J&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,r(this)&this.C,this.F&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.G&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.H&this.C);u(this,r(this)&~this.C|a)},function(a){a=
            a.call(this,r(this)&this.C,this.D&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,r(this)&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.L&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.K&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,r(this)&this.C,this.J&this.C);u(this,r(this)&~this.C|a)},function(a){a=a.call(this,this.L&this.C,this.F&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,
            this.L&this.C,this.G&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.H&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.D&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,r(this)&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.L&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.K&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.J&
            this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.F&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.G&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.H&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.D&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,r(this)&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.L&this.C);this.K=this.K&
            ~this.C|a},function(a){a=a.call(this,this.K&this.C,this.K&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.J&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.F&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.G&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.H&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.D&this.C);this.J=this.J&~this.C|a},function(a){a=
            a.call(this,this.J&this.C,r(this)&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.L&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.K&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.J&this.C);this.J=this.J&~this.C|a}],xe=[function(a){a=a.call(this,N(this,this.F),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            N(this,this.H),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,U(this,0)),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.F&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.K),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            N(this,this.F),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.H),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,U(this,0)),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.G&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,
            N(this,this.K),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.F),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.H),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            N(this,U(this,0)),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.H&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.K),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.F),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            N(this,this.H),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,U(this,0)),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.D&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.K),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            N(this,this.F),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.H),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,U(this,0)),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.da},function(a){a=
            a.call(this,N(this,this.K),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),r(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.F),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.H),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,N(this,U(this,0)),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.L&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.K),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.F),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,N(this,this.H),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,U(this,0)),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.K&this.C);Q(this,a);this.A-=this.B.da},function(a){a=a.call(this,N(this,this.K),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,N(this,this.F),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.G),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.H),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.D),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,U(this,0)),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,R(this)),this.J&this.C);Q(this,a);this.A-=this.B.da},function(a){a=
            a.call(this,N(this,this.K),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.J),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,N(this,this.F+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.F&this.C);Q(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,1)+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,this.G+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,1)+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),
            this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,N(this,U(this,1)+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,
            this.G+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,1)+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),this.D&this.C);Q(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,U(this,1)+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+this.M()),
            this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,1)+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),this.L&this.C);Q(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            N(this,U(this,1)+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+this.M()),this.J&this.C);
            Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,1)+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.F&
            this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,this.H+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.G&
            this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,O(this,this.L+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),this.D&
            this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,N(this,this.F+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),
            r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),r(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,N(this,this.D+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+
            R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.D+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.K&this.C);Q(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.F+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.G+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.H+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,
            this.D+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,U(this,2)+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.K+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,N(this,this.J+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},B[192],B[200],B[208],B[216],B[224],B[232],B[240],B[248],B[193],B[201],B[209],
            B[217],B[225],B[233],B[241],B[249],B[194],B[202],B[210],B[218],B[226],B[234],B[242],B[250],B[195],B[203],B[211],B[219],B[227],B[235],B[243],B[251],B[196],B[204],B[212],B[220],B[228],B[236],B[244],B[252],B[197],B[205],B[213],B[221],B[229],B[237],B[245],B[253],B[198],B[206],B[214],B[222],B[230],B[238],B[246],B[254],B[199],B[207],B[215],B[223],B[231],B[239],B[247],B[255]],ye=[function(a,b){var c=a[0].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,
            N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[0].call(this,N(this,this.K),b.call(this));Q(this,
            c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=
            a[1].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[1].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,this.G),b.call(this));
            Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[2].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,
            b){var c=a[2].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,U(this,0)),
            b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[3].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},
            function(a,b){var c=a[4].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[4].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,N(this,
            this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=
            this.B.N},function(a,b){var c=a[5].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[5].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,
            N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[6].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,N(this,this.J),b.call(this));Q(this,
            c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,U(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=
            a[7].call(this,N(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.da},function(a,b){var c=a[7].call(this,N(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,N(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,
            this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,
            N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,
            N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,
            N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,
            N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,
            N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,
            O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,
            N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,
            N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,
            N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,
            N(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,U(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,
            N(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,
            N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,
            O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,
            this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,N(this,
            this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,U(this,
            2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.G+
            R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.K+
            R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.D+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.F+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,N(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.H+R(this)),b.call(this));
            Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,U(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,N(this,this.J+R(this)),b.call(this));
            Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[0].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[0].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[0].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[0].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[0].call(this,
            this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[0].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[0].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[1].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[1].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[1].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,
            b){var c=a[1].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[1].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[1].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[1].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[1].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[2].call(this,this.F&this.C,b.call(this));this.F=
            this.F&~this.C|c},function(a,b){var c=a[2].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[2].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[2].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[2].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[2].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[2].call(this,this.K&
            this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[2].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[3].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[3].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[3].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[3].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=
            a[3].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[3].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[3].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[3].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[4].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[4].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|
            c},function(a,b){var c=a[4].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[4].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[4].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[4].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[4].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[4].call(this,this.J&this.C,b.call(this));
            this.J=this.J&~this.C|c},function(a,b){var c=a[5].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[5].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[5].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[5].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[5].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[5].call(this,
            this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[5].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[5].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[6].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[6].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[6].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,
            b){var c=a[6].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[6].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[6].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[6].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[6].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[7].call(this,this.F&this.C,b.call(this));this.F=
            this.F&~this.C|c},function(a,b){var c=a[7].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[7].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[7].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[7].call(this,r(this)&this.C,b.call(this));u(this,r(this)&~this.C|c)},function(a,b){var c=a[7].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[7].call(this,this.K&
            this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[7].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c}],pf=[function(){return this.F+this.F},function(){return this.G+this.F},function(){return this.H+this.F},function(){return this.D+this.F},function(){this.ha=this.la;return r(this)+this.F},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.F},function(){return this.K+this.F},function(){return this.J+this.F},function(){return this.F+this.G},function(){return this.G+
            this.G},function(){return this.H+this.G},function(){return this.D+this.G},function(){this.ha=this.la;return r(this)+this.G},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.G},function(){return this.K+this.G},function(){return this.J+this.G},function(){return this.F+this.H},function(){return this.G+this.H},function(){return this.H+this.H},function(){return this.D+this.H},function(){this.ha=this.la;return r(this)+this.H},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.H},
            function(){return this.K+this.H},function(){return this.J+this.H},function(){return this.F+this.D},function(){return this.G+this.D},function(){return this.H+this.D},function(){return this.D+this.D},function(){this.ha=this.la;return r(this)+this.D},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.D},function(){return this.K+this.D},function(){return this.J+this.D},function(){return this.F},function(){return this.G},function(){return this.H},function(){return this.D},function(){this.ha=
            this.la;return r(this)},function(a){return a?(this.ha=this.la,this.L):this.oa()},function(){return this.K},function(){return this.J},function(){return this.F+this.L},function(){return this.G+this.L},function(){return this.H+this.L},function(){return this.D+this.L},function(){this.ha=this.la;return r(this)+this.L},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.L},function(){return this.K+this.L},function(){return this.J+this.L},function(){return this.F+this.K},function(){return this.G+
            this.K},function(){return this.H+this.K},function(){return this.D+this.K},function(){this.ha=this.la;return r(this)+this.K},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.K},function(){return this.K+this.K},function(){return this.J+this.K},function(){return this.F+this.J},function(){return this.G+this.J},function(){return this.H+this.J},function(){return this.D+this.J},function(){this.ha=this.la;return r(this)+this.J},function(a){return(a?(this.ha=this.la,this.L):this.oa())+this.J},
            function(){return this.K+this.J},function(){return this.J+this.J},function(){return this.F+(this.F<<1)},function(){return this.G+(this.F<<1)},function(){return this.H+(this.F<<1)},function(){return this.D+(this.F<<1)},function(){this.ha=this.la;return r(this)+(this.F<<1)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.F<<1)},function(){return this.K+(this.F<<1)},function(){return this.J+(this.F<<1)},function(){return this.F+(this.G<<1)},function(){return this.G+(this.G<<1)},function(){return this.H+
            (this.G<<1)},function(){return this.D+(this.G<<1)},function(){this.ha=this.la;return r(this)+(this.G<<1)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.G<<1)},function(){return this.K+(this.G<<1)},function(){return this.J+(this.G<<1)},function(){return this.F+(this.H<<1)},function(){return this.G+(this.H<<1)},function(){return this.H+(this.H<<1)},function(){return this.D+(this.H<<1)},function(){this.ha=this.la;return r(this)+(this.H<<1)},function(a){return(a?(this.ha=this.la,this.L):
            this.oa())+(this.H<<1)},function(){return this.K+(this.H<<1)},function(){return this.J+(this.H<<1)},function(){return this.F+(this.D<<1)},function(){return this.G+(this.D<<1)},function(){return this.H+(this.D<<1)},function(){return this.D+(this.D<<1)},function(){this.ha=this.la;return r(this)+(this.D<<1)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.D<<1)},function(){return this.K+(this.D<<1)},function(){return this.J+(this.D<<1)},function(){return this.F},function(){return this.G},
            function(){return this.H},function(){return this.D},function(){this.ha=this.la;return r(this)},function(a){return a?(this.ha=this.la,this.L):this.oa()},function(){return this.K},function(){return this.J},function(){return this.F+(this.L<<1)},function(){return this.G+(this.L<<1)},function(){return this.H+(this.L<<1)},function(){return this.D+(this.L<<1)},function(){this.ha=this.la;return r(this)+(this.L<<1)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.L<<1)},function(){return this.K+
            (this.L<<1)},function(){return this.J+(this.L<<1)},function(){return this.F+(this.K<<1)},function(){return this.G+(this.K<<1)},function(){return this.H+(this.K<<1)},function(){return this.D+(this.K<<1)},function(){this.ha=this.la;return r(this)+(this.K<<1)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.K<<1)},function(){return this.K+(this.K<<1)},function(){return this.J+(this.K<<1)},function(){return this.F+(this.J<<1)},function(){return this.G+(this.J<<1)},function(){return this.H+
            (this.J<<1)},function(){return this.D+(this.J<<1)},function(){this.ha=this.la;return r(this)+(this.J<<1)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.J<<1)},function(){return this.K+(this.J<<1)},function(){return this.J+(this.J<<1)},function(){return this.F+(this.F<<2)},function(){return this.G+(this.F<<2)},function(){return this.H+(this.F<<2)},function(){return this.D+(this.F<<2)},function(){this.ha=this.la;return r(this)+(this.F<<2)},function(a){return(a?(this.ha=this.la,this.L):
            this.oa())+(this.F<<2)},function(){return this.K+(this.F<<2)},function(){return this.J+(this.F<<2)},function(){return this.F+(this.G<<2)},function(){return this.G+(this.G<<2)},function(){return this.H+(this.G<<2)},function(){return this.D+(this.G<<2)},function(){this.ha=this.la;return r(this)+(this.G<<2)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.G<<2)},function(){return this.K+(this.G<<2)},function(){return this.J+(this.G<<2)},function(){return this.F+(this.H<<2)},function(){return this.G+
            (this.H<<2)},function(){return this.H+(this.H<<2)},function(){return this.D+(this.H<<2)},function(){this.ha=this.la;return r(this)+(this.H<<2)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.H<<2)},function(){return this.K+(this.H<<2)},function(){return this.J+(this.H<<2)},function(){return this.F+(this.D<<2)},function(){return this.G+(this.D<<2)},function(){return this.H+(this.D<<2)},function(){return this.D+(this.D<<2)},function(){this.ha=this.la;return r(this)+(this.D<<2)},function(a){return(a?
            (this.ha=this.la,this.L):this.oa())+(this.D<<2)},function(){return this.K+(this.D<<2)},function(){return this.J+(this.D<<2)},function(){return this.F},function(){return this.G},function(){return this.H},function(){return this.D},function(){this.ha=this.la;return r(this)},function(a){return a?(this.ha=this.la,this.L):this.oa()},function(){return this.K},function(){return this.J},function(){return this.F+(this.L<<2)},function(){return this.G+(this.L<<2)},function(){return this.H+(this.L<<2)},function(){return this.D+
            (this.L<<2)},function(){this.ha=this.la;return r(this)+(this.L<<2)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.L<<2)},function(){return this.K+(this.L<<2)},function(){return this.J+(this.L<<2)},function(){return this.F+(this.K<<2)},function(){return this.G+(this.K<<2)},function(){return this.H+(this.K<<2)},function(){return this.D+(this.K<<2)},function(){this.ha=this.la;return r(this)+(this.K<<2)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.K<<2)},function(){return this.K+
            (this.K<<2)},function(){return this.J+(this.K<<2)},function(){return this.F+(this.J<<2)},function(){return this.G+(this.J<<2)},function(){return this.H+(this.J<<2)},function(){return this.D+(this.J<<2)},function(){this.ha=this.la;return r(this)+(this.J<<2)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.J<<2)},function(){return this.K+(this.J<<2)},function(){return this.J+(this.J<<2)},function(){return this.F+(this.F<<3)},function(){return this.G+(this.F<<3)},function(){return this.H+
            (this.F<<3)},function(){return this.D+(this.F<<3)},function(){this.ha=this.la;return r(this)+(this.F<<3)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.F<<3)},function(){return this.K+(this.F<<3)},function(){return this.J+(this.F<<3)},function(){return this.F+(this.G<<3)},function(){return this.G+(this.G<<3)},function(){return this.H+(this.G<<3)},function(){return this.D+(this.G<<3)},function(){this.ha=this.la;return r(this)+(this.G<<3)},function(a){return(a?(this.ha=this.la,this.L):
            this.oa())+(this.G<<3)},function(){return this.K+(this.G<<3)},function(){return this.J+(this.G<<3)},function(){return this.F+(this.H<<3)},function(){return this.G+(this.H<<3)},function(){return this.H+(this.H<<3)},function(){return this.D+(this.H<<3)},function(){this.ha=this.la;return r(this)+(this.H<<3)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.H<<3)},function(){return this.K+(this.H<<3)},function(){return this.J+(this.H<<3)},function(){return this.F+(this.D<<3)},function(){return this.G+
            (this.D<<3)},function(){return this.H+(this.D<<3)},function(){return this.D+(this.D<<3)},function(){this.ha=this.la;return r(this)+(this.D<<3)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.D<<3)},function(){return this.K+(this.D<<3)},function(){return this.J+(this.D<<3)},function(){return this.F},function(){return this.G},function(){return this.H},function(){return this.D},function(){this.ha=this.la;return r(this)},function(a){return a?(this.ha=this.la,this.L):this.oa()},function(){return this.K},
            function(){return this.J},function(){return this.F+(this.L<<3)},function(){return this.G+(this.L<<3)},function(){return this.H+(this.L<<3)},function(){return this.D+(this.L<<3)},function(){this.ha=this.la;return r(this)+(this.L<<3)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.L<<3)},function(){return this.K+(this.L<<3)},function(){return this.J+(this.L<<3)},function(){return this.F+(this.K<<3)},function(){return this.G+(this.K<<3)},function(){return this.H+(this.K<<3)},function(){return this.D+
            (this.K<<3)},function(){this.ha=this.la;return r(this)+(this.K<<3)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.K<<3)},function(){return this.K+(this.K<<3)},function(){return this.J+(this.K<<3)},function(){return this.F+(this.J<<3)},function(){return this.G+(this.J<<3)},function(){return this.H+(this.J<<3)},function(){return this.D+(this.J<<3)},function(){this.ha=this.la;return r(this)+(this.J<<3)},function(a){return(a?(this.ha=this.la,this.L):this.oa())+(this.J<<3)},function(){return this.K+
            (this.J<<3)},function(){return this.J+(this.J<<3)}];
            function Sh(a){Ua.call(this,"ChipSet",a,Sh,32768);this.ka=(this.ka=a.model)&&Th[this.ka]||Uh;this.nc=0;var b=a.sw1;if(b)this.nc=Vh(b,Wh|Xh.dp);else{this.Te=[360,360];(b=a.floppies)&&b.length&&(this.Te=b);if(b=this.Te.length)this.nc|=Yh.Ek,b--,this.nc|=(b&3)<<Yh.oh;if(b=a.monitor||(this.ka<Zh?"mono":"ega"),void 0!==$h[b])this.nc|=$h[b]<<Xh.oh}this.zf=Vh(a.sw2||"11110000",0);this.Nq=this.ka==Uh?16:64;this.Qi=this.Ch=1;this.ka>=Zh&&(this.Qi=this.Ch=2);this.jf=a.scaleTimers||!1;this.Ls=a.rtcDate;this.Vn=
            !1;a.sound&&(this.al=this.Gh=null,window&&(this.al=window.AudioContext||window.webkitAudioContext),this.al&&(this.Gh=new this.al));this.reset(!0);ob(this)}eb(Sh);var Uh=5150,Zh=5170,Th={5150:Uh,5160:5160,5170:Zh,deskpro386:5180},$h={none:0,tv:1,color:2,mono:3,ega:0,vga:0},Yh={Ek:1,ONE:0,St:64,Qt:128,pt:192,nh:192,oh:6},Wh=12,Xh={Rt:16,ht:32,dp:48,nh:48,oh:4};f=Sh.prototype;
            f.Nb=function(a,b,c){switch(b){case "sw1":return this.va[b]=c,ai(this,b,c,this.nc,{0:this.ka==Uh?"Bootable Floppy Drive":"Loop on POST",1:this.ka==Uh?"Reserved":"Coprocessor",2:"Base Memory Size",4:"Monitor Type",6:"Number of Floppy Drives"}),!0;case "sw2":if(this.ka==Uh)return this.va[b]=c,ai(this,b,c,this.zf,{0:"Expansion Memory Size",4:"Reserved"}),!0;break;case "swdesc":return this.va[b]=c,!0}return!1};
            f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;this.Fa=a;this.Ja=xb(a,"Keyboard");this.ik=c.T.ge/1193181;oc(b,this,bi);sc(b,this,ci);this.ka<Zh?(oc(b,this,di),sc(b,this,ei)):(oc(b,this,fi),sc(b,this,gi));if(d){var e=this;hi(d,1024,function(){for(var a=0;a<e.ec.length;a++){for(var b=e.ec[a],c="PIC"+a+":",d=0;d<b.Pc.length;d++)c+=" IC"+(d+1)+"="+k(b.Pc[d]);c+=" IMR="+k(b.Wd)+" IRR="+k(b.Xb)+" ISR="+k(b.Tc)+" DELAY="+b.Rg;e.Y.R(c)}});hi(d,2048,function(){for(var a=0;a<e.Pb.length;a++){ii(e,a);var b=
            e.Pb[a],c="TIMER"+a+":",d=0;if(null!=b.ae)for(var w=0;w<=b.ae;w++)d|=b.fb[w]<<8*w;c+=" mode="+b.mode+" bytes="+b.ae+" count="+ga(d);e.Y.R(c)}});hi(d,4096,function(){for(var a="",b=0;64>b;b++){var c=13>=b?ji(e,b):e.ga[b];a&&(a+="\n");a+="CMOS["+k(b)+"]: "+k(c)}e.Y.R(a)})}Ce(c,26,this,this.Mq)};f.lc=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};f.kc=function(a){return a&&this.save?this.save():!0};
            f.reset=function(a){var b;this.Td=this.nc;this.fg=this.zf;ki(this);this.vb=Array(this.Qi);for(b=0;b<this.Qi;b++)li(this,b);this.ec=Array(this.Ch);mi(this,0,32);1<this.Ch&&mi(this,1,160);this.un=this.Tk=null;this.Pb=Array(5180==this.ka?6:3);for(b=0;b<this.Pb.length;b++)ni(this,b);this.zh=this.Uk=this.Uc=this.Ni=null;this.Mi=0;if(this.ka>=Zh){this.lb=16;this.oe=0;this.Vd=16;this.Hi=0;this.pe=160;512<=oi(this)&&(this.pe|=16);3==pi(this)&&(this.pe|=64);5180==this.ka&&(this.pe|=12);this.Ii=3;this.pg=Array(8);
            this.Df=0;a&&(this.ga=Array(64));qi(this,this.Ls);for(a=21;24>=a;a++)this.ga[a]=0;for(a=14;46>a;a++)void 0===this.ga[a]&&(this.ga[a]=0);this.ga[20]=this.Td&(Xh.nh|2|Yh.Ek|Yh.nh);this.ga[16]=ri(this,0)<<4|ri(this,1);si(this)}};
            function qi(a,b){var c=b?new Date(b):new Date;"[object Date]"!==Object.prototype.toString.call(c)||isNaN(c.getTime())?(c=new Date,a.R("CMOS date invalid ("+b+"), using "+c)):b&&a.R("CMOS date: "+c);a.ga[0]=c.getSeconds();a.ga[1]=0;a.ga[2]=c.getMinutes();a.ga[3]=0;a.ga[4]=c.getHours();a.ga[5]=0;a.ga[6]=c.getDay()+1;a.ga[7]=c.getDate();a.ga[8]=c.getMonth()+1;c=c.getFullYear();a.ga[9]=c%100;c/=100;a.ga[50]=c%10|c/10<<4;a.ga[10]=38;a.ga[11]=2;a.ga[12]=0;a.ga[13]=128;a.ei=a.Xg=0;a.yo=a.gk=null}
            function ji(a,b){var c=a.ga[b];if(10>b){var d=!1;4!=b&&5!=b||a.ga[11]&2||(c=12>c?c?c:12:(c-=12)?c+128:140,d=!0);a.ga[11]&4||(d&&128<c&&(c-=48),c=c%10|c/10<<4)}else 10==b&&(a.ga[b]^=128);return c}function ti(a){var b;void 0===b&&(b=a.gk);a.Xg=cd(a.O,a.jf)+b;a.ga[11]&64&&hd(a.O,b)}function si(a){for(var b=0,c=16;46>c;c++)b+=a.ga[c];a.ga[47]=b&255;a.ga[46]=b>>8}
            f.save=function(){var a=new Je(this);a.set(0,[this.nc,this.zf,this.Td,this.fg]);for(var b=[],c=0;c<this.vb;c++){for(var d=this.vb[c],e=d,g=[],l=0;l<e.Ub.length;l++){var p=e.Ub[l];g[l]=[p.ze,p.Ci,p.pc,p.kb,p.fb,p.mode,p.Oi,p.Gs,p.Is]}b[c]=[d.bf,d.Rk,d.vn,d.wb,g]}a.set(1,[b]);b=[];for(c=0;c<this.ec.length;c++)d=this.ec[c],b[c]=[d.Rg,d.Pc,d.De,d.Wd,d.Xb,d.Tc,d.Ef,d.yh];a.set(2,[b]);b=[];for(c=0;c<this.Pb.length;c++)d=this.Pb[c],b[c]=[d.pc,d.Wc,d.fb,d.Lf,d.xn,d.mode,d.wk,d.ff,d.ae,d.de,d.Ph,d.Rf,d.Od];
            a.set(3,[this.Tk,b,this.un]);a.set(4,[this.Ni,this.Uc,this.Uk,this.zh,this.Mi]);this.ka>=Zh&&(a.set(5,[this.lb,this.oe,this.Vd,this.Hi,this.pe,this.Ii]),a.set(6,[this.pg[7],this.pg,this.Df,this.ga,this.ei,this.Xg]));return a.data()};
            f.restore=function(a){var b,c;b=a[0];this.nc=b[0];this.zf=b[1];this.Td=b[2];this.fg=b[3];b=a[1];for(c=0;c<this.Qi;c++)li(this,c,1==b.length?b[0][c]:b);b=a[2];for(c=0;c<this.Ch;c++)mi(this,c,0===c?32:160,b[0][c]);b=a[3];this.Tk=b[0];this.un=b[2];for(c=0;c<this.Pb.length;c++)ni(this,c,b[1][c]);b=a[4];this.Ni=b[0];this.Uc=b[1];this.Uk=b[2];this.zh=b[3];this.Mi=b[4];if(b=a[5])this.lb=b[0],this.oe=b[1],this.Vd=b[2],this.Hi=b[3],this.pe=b[4],this.Ii=b[5];if(b=a[6])this.pg=b[1],this.pg[7]=b[0],this.Df=b[2],
            this.ga=b[3],this.ei=b[4],this.Xg=b[5],qi(this);return!0};var ui=[0,null,null,0,Array(4)];function li(a,b,c){var d=a.vb[b];d||(d={Ub:Array(4)});c=c&&5==c.length?c:ui;d.bf=c[0];d.Rk=c[1];d.vn=c[2];d.wb=c[3];d.Xq=b<<2;for(var e=0;e<d.Ub.length;e++)vi(d,e,c[4][e]);a.vb[b]=d}var wi=[!0,[0,0],[0,0],[0,0],[0,0]];
            function vi(a,b,c){var d=a.Ub[b];d||(d={Ci:[0,0],pc:[0,0],kb:[0,0],fb:[0,0]});c=c&&8==c.length?c:wi;d.ze=c[0];d.Ci[0]=c[1][0];d.Ci[1]=c[1][1];d.pc[0]=c[2][0];d.pc[1]=c[2][1];d.kb[0]=c[3][0];d.kb[1]=c[3][1];d.fb[0]=c[4][0];d.fb[1]=c[4][1];d.mode=c[5];d.Oi=c[6];d.Z=a;d.eo=b;xi(d,c[8],c[9]);a.Ub[b]=d}function xi(a,b,c,d){"string"==typeof b&&(b=gb(b));b&&(a.Xi=null,a.Gs=b.id,a.Is=c,a.Vi=b,a.tl=b[c],a.jk=d)}var yi=[0,Array(4)];
            function mi(a,b,c,d){var e=a.ec[b];e||(e={Pc:[null,null,null,null]});d=d&&8==d.length?d:yi;e.port=c;e.wu=b<<3;e.Rg=d[0];e.Pc[0]=d[1][0];e.Pc[1]=d[1][1];e.Pc[2]=d[1][2];e.Pc[3]=d[1][3];e.De=d[2];e.Wd=d[3];e.Xb=d[4];e.Tc=d[5];e.Ef=d[6];e.yh=d[7];a.ec[b]=e}var zi=[[0,0],[0,0],[0,0],[0,0]];
            function ni(a,b,c){var d=a.Pb[b];d||(d={pc:[0,0],Wc:[0,0],fb:[0,0],Lf:[0,0]});c=c&&13==c.length?c:zi;d.pc[0]=c[0][0];d.pc[1]=c[0][1];d.Wc[0]=c[1][0];d.Wc[1]=c[1][1];d.fb[0]=c[2][0];d.fb[1]=c[2][1];d.Lf[0]=c[3][0];d.Lf[1]=c[3][1];d.xn=c[4];d.mode=c[5];d.wk=c[6];d.ff=c[7];d.ae=c[8];d.de=c[9];d.Ph=c[10];d.Rf=c[11];d.Od=c[12];a.Pb[b]=d}function oi(a,b){return((((b?a.nc:a.Td)&12)>>2)+1)*a.Nq+32*((b?a.zf:a.fg)&15)}function Ai(a,b){var c=b?a.nc:a.Td;return a.ka!=Uh||c&Yh.Ek?((c&Yh.nh)>>Yh.oh)+1:0}
            function ri(a,b){if(b<Ai(a)){if(!a.Te)return 1;if(b<a.Te.length)switch(a.Te[b]){case 160:case 180:case 320:case 360:return 1;case 720:return 3;case 1200:return 2;case 1440:return 4}}return 0}function pi(a,b){return((b?a.nc:a.Td)&Xh.nh)>>Xh.oh}
            function ai(a,b,c,d,e){for(var g="",l=1;8>=l;l++){var p="pcjs-bitCell";l||(p+=" pcjs-bitCellLeft");g+='<div id="'+(b+"-"+l)+'" class="'+p+'" data-value="0">'+l+"</div>\n"}c.innerHTML=g;b=kb(c,"pcjs-bitCell");c=null;for(l=0;l<b.length;l++)null!=e&&null!=e[l]&&(c=e[l]),c&&b[l].setAttribute("title",c),Bi(b[l],d&1<<l?!1:!0),b[l].onclick=function(a,b){return function(){var c="1"!=b.getAttribute("data-value");Bi(b,c);var d=b.getAttribute("id").split("-"),e=1<<+d[1]-1;switch(d[0]){case "sw1":a.nc=a.nc&~e|
            (c?0:e);break;case "sw2":a.zf=a.zf&~e|(c?0:e)}ki(a)}}(a,b[l])}function Bi(a,b){a.setAttribute("data-value",b?"1":"0");a.style.color=b?"#ffffff":"#000000";a.style.backgroundColor=b?"#000000":"#ffffff"}function ki(a){var b=a.va.swdesc,c={0:"Enhanced Color",1:"TV",2:"Color",3:"Monochrome"};if(null!=b){var d;d=""+(oi(a,!0)+"Kb");d+=", "+c[pi(a,!0)]+" Monitor";d+=", "+Ai(a,!0)+" Floppy Drives";if(null!=a.Td&&a.Td!=a.nc||null!=a.fg&&a.fg!=a.zf)d+=" (Reset required)";b.textContent=d}}
            function Ci(a,b,c,d,e){var g=a.vb[b],l=g.Ub[c],p=l.kb[g.wb];a.qa(768)&&m(a,d,null,e,"DMA"+b+".CHANNEL"+c+".ADDR["+g.wb+"]",p,!0);g.wb^=1;b||0!=c||g.wb||(l.kb[0]++,255<l.kb[0]&&(l.kb[0]=0,l.kb[1]++,255<l.kb[1]&&(l.kb[1]=0)));return p}function Di(a,b,c,d,e,g){var l=a.vb[b];a.qa(768)&&m(a,d,e,g,"DMA"+b+".CHANNEL"+c+".ADDR["+l.wb+"]",null,!0);a=l.Ub[c];a.kb[l.wb]=a.Ci[l.wb]=e;l.wb^=1}
            function Ei(a,b,c,d,e){var g=a.vb[b],l=g.Ub[c],p=l.fb[g.wb];a.qa(768)&&m(a,d,null,e,"DMA"+b+".CHANNEL"+c+".COUNT["+g.wb+"]",p,!0);g.wb^=1;b||0!=c||g.wb||(l.fb[0]--,0>l.fb[0]&&(l.fb[0]=255,l.fb[1]--,0>l.fb[1]&&(l.fb[1]=255)));return p}function Fi(a,b,c,d,e,g){var l=a.vb[b];a.qa(768)&&m(a,d,e,g,"DMA"+b+".CHANNEL"+c+".COUNT["+l.wb+"]",null,!0);a=l.Ub[c];a.fb[l.wb]=a.pc[l.wb]=e;l.wb^=1}function Gi(a,b,c,d){var e=a.vb[b],g=e.bf|1;e.bf&=-16;a.qa(768)&&m(a,c,null,d,"DMA"+b+".STATUS",g,!0);return g}
            function Hi(a,b,c,d,e){var g=a.vb[b];a.qa(768)&&m(a,c,d,e,"DMA"+b+".REQ",null,!0);a=d&3;g.bf=g.bf&~(16<<a)|(d&4)<<a+2;g.vn=d}function Ii(a,b,c,d,e){var g=a.vb[b];a.qa(768)&&m(a,c,d,e,"DMA"+b+".MASK",null,!0);b=d&3;c=g.Ub[b];c.ze=!!(d&4);c.ze||Ji(a,g.Xq+b)}function Ki(a,b,c,d,e){a.qa(768)&&m(a,c,d,e,"DMA"+b+".MODE",null,!0);a.vb[b].Ub[d&3].mode=d}function Li(a,b,c,d,e){a.qa(768)&&m(a,c,d,e,"DMA"+b+".MASTER_CLEAR",null,!0);a=a.vb[b];for(b=0;b<a.Ub.length;b++)vi(a,b)}
            function Mi(a,b,c,d,e){var g=a.vb[b].Ub[c].Oi;a.qa(768)&&m(a,d,null,e,"DMA"+b+".CHANNEL"+c+".PAGE",g,!0);return g}function Ni(a,b,c,d,e,g){a.qa(768)&&m(a,d,e,g,"DMA"+b+".CHANNEL"+c+".PAGE",null,!0);a.vb[b].Ub[c].Oi=e}function Oi(a,b,c,d){var e=a.pg[b];a.qa(768)&&m(a,c,null,d,"DMA.SPARE"+b+".PAGE",e,!0);return e}function Pi(a,b,c,d,e){a.qa(768)&&m(a,c,d,e,"DMA.SPARE"+b+".PAGE",null,!0);a.pg[b]=d}function Qi(a,b,c,d,e){xi(a.vb[b>>2].Ub[b&3],c,d,e)}
            function Ji(a,b,c){b=a.vb[b>>2].Ub[b&3];b.Vi&&b.tl&&b.jk?(c&&(b.Xi=c),b.ze||uf(a,b,!0)):c&&c(!0)}function uf(a,b,c){c&&(b.count=b.fb[1]<<8|b.fb[0],b.type=b.mode&12,b.Xn=b.Ld=!1);for(var d=!1;0<=b.count&&(c=b.Oi<<16|b.kb[1]<<8|b.kb[0],4==b.type?(d=!0,function(c){b.tl.call(b.Vi,b.jk,-1,function(g,l){0>g&&(b.Xn||(b.Xn=!0),g=255);b.ze||a.ma.dd(c,g);(d=l)&&setTimeout(function(){Ri(b)||uf(a,b)},0)})}(c)):8==b.type?(c=a.ma.Qa(c),0>b.tl.call(b.Vi,b.jk,c)&&(b.Ld=!0)):0!=b.type&&(b.Ld=!0)),!d&&!Ri(b););}
            function Ri(a){if(!a.Ld&&0<=--a.count&&(a.mode&32?(a.kb[0]--,0>a.kb[0]&&(a.kb[0]=255,a.kb[1]--,0>a.kb[1]&&(a.kb[1]=255))):(a.kb[0]++,255<a.kb[0]&&(a.kb[0]=0,a.kb[1]++,255<a.kb[1]&&(a.kb[1]=0))),!a.ze))return!1;var b=a.Z;b.bf=b.bf&~(16<<a.eo)|1<<a.eo;a.mode&16||(a.ze=!0,a.Vi=a.jk=null);a.Xi&&(a.Xi(!a.Ld),a.Xi=null);return!0}function Si(a,b,c){var d=0,e=a.ec[b];if(null!=e.yh)switch(e.yh&3){case 2:d=e.Xb;break;case 3:d=e.Tc}a.qa(34048)&&m(a,e.port,null,c,"PIC"+b,d,!0);return d}
            function Ti(a,b,c,d){var e=a.ec[b];a.qa(34048)&&m(a,e.port,c,d,"PIC"+b,null,!0);if(c&16)e.De=0,e.Pc[e.De++]=c,e.Wd=0,e.Ef=7,e.Xb=e.Tc=0,e.yh=10;else if(c&8)c&100&&a.Da("PIC"+b+"("+k(e.port)+"): unsupported OCW3 command: "+k(c)),e.yh=c;else if(d=c&224,d&32){var g,l=0;if(96==(d&96))l=1<<(c&7);else for(g=e.Ef+1;;){g&=7;var p=1<<g;if(e.Tc&p){l=p;break}if(g++==e.Ef)break}e.Tc&l&&(e.Tc&=~l,Ui(a));d&128&&a.Da("PIC"+b+"("+k(e.port)+"): unsupported OCW2 rotate command: "+k(c))}else 192==d?e.Ef=c&7:a.Da("PIC"+
            b+"("+k(e.port)+"): unsupported OCW2 automatic EOI command: "+k(c))}function Vi(a,b,c){var d=a.ec[b],e=d.Wd;a.qa(34048)&&m(a,d.port+1,null,c,"PIC"+b,e,!0);return e}function Wi(a,b,c,d){var e=a.ec[b];a.qa(34048)&&m(a,e.port+1,c,d,"PIC"+b,null,!0);e.De<e.Pc.length?(e.Pc[e.De++]=c,2==e.De&&e.Pc[0]&2&&e.De++,3!=e.De||e.Pc[0]&1||e.De++):(e.Wd=c,d=a.O,d.S|=4,Ui(a,b||253!=c?0:6))}function Xi(a,b,c){var d=a.ec[b>>3];b=1<<(b&7);d.Xb&b||(d.Xb|=b,d.Rg=c||0,Ui(a))}
            function Yi(a,b){var c=a.ec[b>>3],d=1<<(b&7);c.Xb&d&&(c.Xb&=~d,Ui(a))}function Ui(a,b){var c,d=-1;1<a.Ch&&(c=a.ec[1],d=~(c.Tc|c.Wd)&c.Xb);c=a.ec[0];0<=d&&(c.Xb=d?c.Xb|4:c.Xb&-5);var d=~(c.Tc|c.Wd)&c.Xb,e=a.O;e.ja&&(e.Bb=d?e.Bb|1:e.Bb&-2);d&&b&&(c.Rg=b)}function sf(a,b){void 0===b&&(b=0);var c=-1,d=a.ec[b];if(d.Rg)c=-2,d.Rg--;else for(var e=d.Xb&((d.Tc|d.Wd)^255),g=d.Ef+1;;){var g=g&7,l=1<<g;if(e&l){c=b||2!=g?d.Pc[1]+g:sf(a,1);0<=c&&(d.Tc|=l,d.Xb&=~l);break}if(g++==d.Ef)break}return c}
            function Zi(a,b,c,d){var e;e=a.Pb[b];e.ff==e.ae&&$i(a,b);if(e.Ph)return e.Lf[e.ff++];ii(a,b);e=e.fb[e.ff++];a.qa(2304)&&m(a,c,null,d,"TIMER"+b,e,!0);return e}function aj(a,b,c,d,e){a.qa(2304)&&m(a,c,d,e,"TIMER"+b,null,!0);c=a.Pb[b];c.ff==c.ae&&$i(a,b);c.pc[c.ff++]=d;c.ff==c.ae&&(c.Rf&&0!=c.mode&&8!=c.mode||(c.Ph=!1,c.fb[0]=c.Wc[0]=c.pc[0],c.fb[1]=c.Wc[1]=c.pc[1],c.Od=cd(a.O,a.jf),c.Rf=!0,c.de=0!=c.mode,0==b&&(Yi(a,0),d=bj(a,0)*a.ik|0,6==c.mode&&(d>>=1),hd(a.O,d))),2==b&&kd(a))}f=Sh.prototype;
            f.uq=function(a,b){m(this,a,null,b,"PIT1_CTRL",null,2048);return null};f.Xr=function(a,b,c){this.Tk=b;m(this,a,b,c,"PIT1_CTRL",null,2048);a=(b&192)>>6;if(3!=a){c=b&1;var d=b&14;if(b&=48){var e=this.Pb[a];e.wk=b;e.mode=d;e.xn=c;e.pc=[0,0];e.fb=[0,0];e.Lf=[0,0];e.de=!1;e.Ph=!1;e.Rf=!1;$i(this,a);0==a&&Yi(this,0);2==a&&255==this.ec[0].Wd&&77==this.Uc&&(a=this.Pb[0],a.Wc[0]=a.pc[0],a.Wc[1]=a.pc[1],a.Od=cd(this.O,this.jf))}else ii(this,a),b=this.Pb[a],b.Lf[0]=b.fb[0],b.Lf[1]=b.fb[1],b.Ph=!0,$i(this,a)}};
            function bj(a,b){var c=a.Pb[b],d=c.pc[1]<<8|c.pc[0];d||(d=1==c.ae?256:65536);return d}function md(a,b){var c=a.Pb[b],d=c.Wc[1]<<8|c.Wc[0];d||(d=1==c.ae?256:65536);return d}function $i(a,b){var c=a.Pb[b];c.ff=32==c.wk?1:0;c.ae=48==c.wk?2:1}
            function ii(a,b,c){var d=a.Pb[b];if(d.Rf&&(2!=b||a.Uc&1)){var e=cd(a.O,a.jf),g=(e-d.Od)/a.ik|0;0>g&&(d.Od=e,g=0);var l=bj(a,b),p=md(a,b)-g;0==d.mode?(0>=p&&(p=0),p||(d.de=!0,d.Rf=!1,b||Xi(a,0))):4==d.mode?(d.de=1!=p,0>=p&&(p=l+p,0>=p&&(p=l),d.Wc[0]=p&255,d.Wc[1]=p>>8,d.Od=e,!b&&d.de&&Xi(a,0))):6==d.mode&&(p-=g,0>=p&&(d.de=!d.de,p=l+p,0>=p&&(p=l),d.Wc[0]=p&255,d.Wc[1]=p>>8,d.Od=e,!b&&d.de&&Xi(a,0)));d.fb[0]=p&255;d.fb[1]=p>>8;c&&(a.Od=0)}return d}
            function ld(a,b){for(var c=0;c<a.Pb.length;c++)ii(a,c,b);if(a.ka>=Zh){var c=a.O.T.ge,d=cd(a.O,a.jf);null==a.gk&&(a.ei=cd(a.O,a.jf),a.yo=1024,a.gk=Math.floor(a.O.T.ge/a.yo),ti(a));d>=a.Xg&&(a.ga[12]|=64,a.ga[11]&64&&(a.ga[12]|=128,Xi(a,8)),a.Xg=d+a.gk);a.ga[0]==a.ga[1]&&a.ga[2]==a.ga[3]&&a.ga[4]==a.ga[5]&&(a.ga[12]|=32,a.ga[11]&32&&(a.ga[12]|=128,Xi(a,8)));var e=d-a.ei,g=Math.floor(e/c);if(g&&!(a.ga[11]&128)){for(;g--;)if(60<=++a.ga[0]&&(a.ga[0]=0,60<=++a.ga[2]&&(a.ga[2]=0,24<=++a.ga[4]))){a.ga[4]=
            0;a.ga[6]=a.ga[6]%7+1;var l;l=a.ga[9];var p=ua[a.ga[8]-1];28==p&&0===l%4&&(l%100||0===l%400)&&p++;l=p;++a.ga[7]>l&&(a.ga[7]=1,12<++a.ga[8]&&(a.ga[8]=1,a.ga[9]=(a.ga[9]+1)%100))}a.ga[12]|=16;a.ga[11]&16&&(a.ga[12]|=128,Xi(a,8))}a.ei=d-e%c}}f.vq=function(a,b){var c=this.Ni;if(this.zh&16)if(this.Uc&128)c=this.Td;else if(this.Ja){var c=this.Ja,d=0;c.fc.length&&(d=c.fc[0]);c.qa()&&c.ab("scan code "+k(d)+" delivered");c=d}m(this,a,null,b,"PPI_A",c);return c};
            f.Yr=function(a,b,c){m(this,a,b,c,"PPI_A");this.Ni=b};f.wq=function(a,b){var c=this.Uc;m(this,a,null,b,"PPI_B",c);return c};f.Zr=function(a,b,c){m(this,a,b,c,"PPI_B");cj(this,b);this.Ja&&dj(this.Ja,b&128?!1:!0,b&64?!0:!1)};function cj(a,b){var c=!!(b&2),d=!!(a.Uc&2);a.Uc=b;c!=d&&kd(a,c)}f.xq=function(a,b){var c=0,c=this.ka==Uh?this.Uc&4?c|this.fg&15:c|this.fg>>4&1:this.Uc&8?c|this.Td>>4:c|this.Td&15;this.Uc&1&&ii(this,2).de&&(c=this.Uc&2?c|32:c|16);m(this,a,null,b,"PPI_C",c,32896);return c};
            f.$r=function(a,b,c){m(this,a,b,c,"PPI_C");this.Uk=b};f.yq=function(a,b){var c=this.zh;m(this,a,null,b,"PPI_CTRL",c);return c};f.as=function(a,b,c){m(this,a,b,c,"PPI_CTRL");this.zh=b};f.Lp=function(a,b){var c=this.Hi;m(this,a,null,b,"8042_OUTBUFF",c,16384);this.lb&=-258;this.Ja&&ej(this.Ja);return c};
            f.lr=function(a,b,c){m(this,a,b,c,"8042_INBUF.DATA",null,16384);if(this.lb&8)switch(this.oe){case 96:fj(this,b);break;case 209:gj(this,b);break;default:if(fj(this,this.Vd&-17),this.Ja){a=-1;switch(b){case 255:a=250,hj(this.Ja)}ij(this,a)}}this.oe=b;this.lb&=-9};f.Mp=function(a,b){var c=this.Uc&-209|(cd(this.O)&64?16:0);m(this,a,null,b,"8042_RWREG",c,16384);return c};f.mr=function(a,b,c){m(this,a,b,c,"8042_RWREG",null,16384);cj(this,b)};
            f.Np=function(a,b){m(this,a,null,b,"8042_STATUS",this.lb,16384);var c=this.lb&255;this.lb&256&&(this.lb|=1,this.lb&=-257);return c};
            f.kr=function(a,b,c){m(this,a,b,c,"8042_INBUFF.CMD",null,16384);this.oe=b;this.lb|=8;a=0;240<=this.oe&&(a=this.oe^15,this.oe=240);switch(this.oe){case 32:ij(this,this.Vd);break;case 173:fj(this,this.Vd|16);break;case 174:fj(this,this.Vd&-17);this.Ja&&ej(this.Ja);break;case 170:this.Ja&&(a=this.Ja,a.fc=[],a.qa()&&a.ab("scan codes flushed"));fj(this,this.Vd|16);ij(this,85);gj(this,3);break;case 171:ij(this,0);break;case 192:ij(this,this.pe);break;case 208:ij(this,this.Ii);break;case 224:ij(this,this.Vd&
            16?0:1);break;case 240:a&1&&me(this.O)}};function fj(a,b){a.Vd=b;a.lb=a.lb&-5|b&4;a.Ja&&dj(a.Ja,!!(b&8),!(b&16))}function ij(a,b,c){0<=b&&(a.Hi=b,c?a.lb|=1:(a.lb&=-2,a.lb|=256))}function gj(a,b){a.Ii=b;dc(a.ma,!!(b&2));b&1||me(a.O)}function jj(a,b){a.ka<Zh?Xi(a,1,4):a.Vd&16||a.lb&257||(ij(a,b,!0),kj(a.Ja),Xi(a,1,120))}f.aq=function(a,b){m(this,a,null,b,"CMOS.ADDR",this.Df,4096);return this.Df};f.Ar=function(a,b,c){m(this,a,b,c,"CMOS.ADDR",null,4096);this.Df=b;this.Mi=b&128?0:128};
            f.bq=function(a,b){var c=this.Df&63,d=13>=c?ji(this,c):this.ga[c];this.qa(4352)&&m(this,a,null,b,"CMOS.DATA["+k(c)+"]",d,!0);null!=b&&12==c&&(this.ga[c]&=15,d&128&&Yi(this,8),d&64&&this.ga[11]&64&&ti(this));return d};
            f.Br=function(a,b,c){var d=this.Df&63;this.qa(4352)&&m(this,a,b,c,"CMOS.DATA["+k(d)+"]",null,!0);a=b^this.ga[d];if(13>=d){if(c=b,10>d){var e=!1;this.ga[11]&4||(c=10*(c>>4)+(c&15),e=!0);if(4==d||5==d)e&&23<c&&(c+=48),this.ga[11]&2||(12>=c?c=12==c?0:c:(c-=116,c=24==c?12:c))}}else c=b;this.ga[d]=c;11==d&&a&64&&b&64&&ti(this)};f.Wr=function(a,b,c){m(this,a,b,c,"NMI");this.Mi=b};f.Cr=function(a,b,c){m(this,a,b,c,"COPROC.CLEAR")};f.Dr=function(a,b,c){m(this,a,b,c,"COPROC.RESET")};
            f.Mq=function(a){if(this.qa(8192)&&Ee(this.Y,26,a)){var b=this.O.F>>8;Fe(this.O,a,function(a,d){return function(e){d=cd(a.O)-d;var g,l=a.O.H&255,p=a.O.H>>8,v=a.O.H&255,w=a.O.H>>8;if(2==b||3==b)g=" CH(hour)="+ga(p)+" CL(min)="+k(l)+" DH(sec)="+k(w);else if(4==b||5==b)g=" CX(year)="+ga(a.O.G)+" DH(month)="+k(w)+" DL(day)="+k(v);Ge(a.Y,26,e,d,g)}}(this,cd(this.O)))}return!0};function Vh(a,b){if(void 0===a)return b;for(var c=0,d=1,e=0;e<a.length;e++)"0"==a.charAt(e)&&(c|=d),d<<=1;return c}
            function kd(a,b){if(a.Gh)try{void 0!==b?a.Vn=b:b=a.Vn&&a.O&&a.O.fa.qb;var c=Math.round(1193181/bj(a,2));if(20>c||2E4<c)b=!1;b?a.zc?(a.zc.frequency.value=c,a.qa(8388608)&&a.ab("speaker set to "+c+"hz",!0)):(a.zc=a.Gh.createOscillator(),a.zc&&(a.zc.type="number"==typeof a.zc.type?1:"square",a.zc.connect(a.Gh.destination),a.zc.frequency.value=c,"start"in a.zc?a.zc.start(0):a.zc.noteOn(0),a.qa(8388608)&&a.ab("speaker on at  "+c+"hz",!0))):a.zc&&("stop"in a.zc?a.zc.stop(0):a.zc.noteOff(0),a.zc.disconnect(),
            delete a.zc,a.qa(8388608)&&a.ab("speaker off at "+c+"hz",!0))}catch(d){a.Da("AudioContext exception: "+d.message),a.Gh=null}else b&&a.ab("BEEP",8388608)}
            var bi={0:function(a,b){return Ci(this,0,0,a,b)},1:function(a,b){return Ei(this,0,0,a,b)},2:function(a,b){return Ci(this,0,1,a,b)},3:function(a,b){return Ei(this,0,1,a,b)},4:function(a,b){return Ci(this,0,2,a,b)},5:function(a,b){return Ei(this,0,2,a,b)},6:function(a,b){return Ci(this,0,3,a,b)},7:function(a,b){return Ei(this,0,3,a,b)},8:function(a,b){return Gi(this,0,a,b)},32:function(a,b){return Si(this,0,b)},33:function(a,b){return Vi(this,0,b)},64:function(a,b){return Zi(this,0,a,b)},65:function(a,
            b){return Zi(this,1,a,b)},66:function(a,b){return Zi(this,2,a,b)},67:Sh.prototype.uq,129:function(a,b){return Mi(this,0,2,a,b)},130:function(a,b){return Mi(this,0,3,a,b)},131:function(a,b){return Mi(this,0,1,a,b)},135:function(a,b){return Mi(this,0,0,a,b)}},di={96:Sh.prototype.vq,97:Sh.prototype.wq,98:Sh.prototype.xq,99:Sh.prototype.yq},fi={96:Sh.prototype.Lp,97:Sh.prototype.Mp,100:Sh.prototype.Np,112:Sh.prototype.aq,113:Sh.prototype.bq,128:function(a,b){return Oi(this,7,a,b)},132:function(a,b){return Oi(this,
            0,a,b)},133:function(a,b){return Oi(this,1,a,b)},134:function(a,b){return Oi(this,2,a,b)},136:function(a,b){return Oi(this,3,a,b)},137:function(a,b){return Mi(this,1,2,a,b)},138:function(a,b){return Mi(this,1,3,a,b)},139:function(a,b){return Mi(this,1,1,a,b)},140:function(a,b){return Oi(this,4,a,b)},141:function(a,b){return Oi(this,5,a,b)},142:function(a,b){return Oi(this,6,a,b)},143:function(a,b){return Mi(this,1,0,a,b)},160:function(a,b){return Si(this,1,b)},161:function(a,b){return Vi(this,1,b)},
            192:function(a,b){return Ci(this,1,0,a,b)},194:function(a,b){return Ei(this,1,0,a,b)},196:function(a,b){return Ci(this,1,1,a,b)},198:function(a,b){return Ei(this,1,1,a,b)},200:function(a,b){return Ci(this,1,2,a,b)},202:function(a,b){return Ei(this,1,2,a,b)},204:function(a,b){return Ci(this,1,3,a,b)},206:function(a,b){return Ei(this,1,3,a,b)},208:function(a,b){return Gi(this,1,a,b)}},ci={0:function(a,b,c){Di(this,0,0,a,b,c)},1:function(a,b,c){Fi(this,0,0,a,b,c)},2:function(a,b,c){Di(this,0,1,a,b,c)},
            3:function(a,b,c){Fi(this,0,1,a,b,c)},4:function(a,b,c){Di(this,0,2,a,b,c)},5:function(a,b,c){Fi(this,0,2,a,b,c)},6:function(a,b,c){Di(this,0,3,a,b,c)},7:function(a,b,c){Fi(this,0,3,a,b,c)},8:function(a,b,c){this.qa(768)&&m(this,a,b,c,"DMA0.CMD",null,!0);this.vb[0].Rk=b},9:function(a,b,c){Hi(this,0,a,b,c)},10:function(a,b,c){Ii(this,0,a,b,c)},11:function(a,b,c){Ki(this,0,a,b,c)},12:function(a,b,c){this.qa(768)&&m(this,a,b,c,"DMA0.RESET_FF",null,!0);this.vb[0].wb=0},13:function(a,b,c){Li(this,0,a,
            b,c)},32:function(a,b,c){Ti(this,0,b,c)},33:function(a,b,c){Wi(this,0,b,c)},64:function(a,b,c){aj(this,0,a,b,c)},65:function(a,b,c){aj(this,1,a,b,c)},66:function(a,b,c){aj(this,2,a,b,c)},67:Sh.prototype.Xr,129:function(a,b,c){Ni(this,0,2,a,b,c)},130:function(a,b,c){Ni(this,0,3,a,b,c)},131:function(a,b,c){Ni(this,0,1,a,b,c)},135:function(a,b,c){Ni(this,0,0,a,b,c)}},ei={96:Sh.prototype.Yr,97:Sh.prototype.Zr,98:Sh.prototype.$r,99:Sh.prototype.as,160:Sh.prototype.Wr},gi={96:Sh.prototype.lr,97:Sh.prototype.mr,
            100:Sh.prototype.kr,112:Sh.prototype.Ar,113:Sh.prototype.Br,128:function(a,b,c){Pi(this,7,a,b,c)},132:function(a,b,c){Pi(this,0,a,b,c)},133:function(a,b,c){Pi(this,1,a,b,c)},134:function(a,b,c){Pi(this,2,a,b,c)},136:function(a,b,c){Pi(this,3,a,b,c)},137:function(a,b,c){Ni(this,1,2,a,b,c)},138:function(a,b,c){Ni(this,1,3,a,b,c)},139:function(a,b,c){Ni(this,1,1,a,b,c)},140:function(a,b,c){Pi(this,4,a,b,c)},141:function(a,b,c){Pi(this,5,a,b,c)},142:function(a,b,c){Pi(this,6,a,b,c)},143:function(a,b,
            c){Ni(this,1,0,a,b,c)},160:function(a,b,c){Ti(this,1,b,c)},161:function(a,b,c){Wi(this,1,b,c)},192:function(a,b,c){Di(this,1,0,a,b,c)},194:function(a,b,c){Fi(this,1,0,a,b,c)},196:function(a,b,c){Di(this,1,1,a,b,c)},198:function(a,b,c){Fi(this,1,1,a,b,c)},200:function(a,b,c){Di(this,1,2,a,b,c)},202:function(a,b,c){Fi(this,1,2,a,b,c)},204:function(a,b,c){Di(this,1,3,a,b,c)},206:function(a,b,c){Fi(this,1,3,a,b,c)},208:function(a,b,c){this.qa(768)&&m(this,a,b,c,"DMA1.CMD",null,!0);this.vb[1].Rk=b},210:function(a,
            b,c){Hi(this,1,a,b,c)},212:function(a,b,c){Ii(this,1,a,b,c)},214:function(a,b,c){Ki(this,1,a,b,c)},216:function(a,b,c){this.qa(768)&&m(this,a,b,c,"DMA1.RESET_FF",null,!0);this.vb[1].wb=0},218:function(a,b,c){Li(this,1,a,b,c)},240:Sh.prototype.Cr,241:Sh.prototype.Dr};Pa(function(){for(var a=kb(window.document,"pcjs","chipset"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new Sh(d);jb(d,c);ki(d)}});
            function lj(a){Ua.call(this,"ROM",a,lj);this.Qb=null;this.Lk=a.addr;this.jh=a.size;this.vh=a.alias;this.pi=a.file;this.Hs=ha(this.pi);this.lf=a.notify;this.hn=null;if(this.lf&&(a=this.lf.indexOf("["),0<a)){try{this.hn=eval(this.lf.substr(a))}catch(b){}this.lf=this.lf.substr(0,a)}if(this.pi){a=this.pi;var c=ia(this.Hs);"json"!=c&&"hex"!=c&&(a=Aa()+"/api/v1/dump?file="+this.pi+"&format=bytes&decimal=true");za(a,!0,null,this,lj.prototype.gr)}}eb(lj);
            lj.prototype.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;mj(this)};lj.prototype.lc=function(){this.Kk&&(this.Y&&nj(this.Y,this.Lk,this.jh,this.Kk),delete this.Kk);return!0};lj.prototype.kc=function(){return!0};
            lj.prototype.gr=function(a,b,c){if(c)this.Da("Unable to load system ROM (error "+c+")");else{if("["==b.charAt(0)||"{"==b.charAt(0))try{var d=eval("("+b+")"),e=d.bytes,g=d.data;if(e)this.Qb=e;else if(g)for(this.Qb=Array(4*g.length),c=b=0;b<g.length;b++)this.Qb[c++]=g[b]&255,this.Qb[c++]=g[b]>>8&255,this.Qb[c++]=g[b]>>16&255,this.Qb[c++]=g[b]>>24&255;else this.Qb=d;this.Kk=d.symbols;if(!this.Qb.length){Ba("Empty ROM: "+a);return}if(1==this.Qb.length){Ba(this.Qb[0]);return}}catch(l){this.Da("ROM data error: "+
            l.message);return}else for(a=b.replace(/\n/gm," ").replace(/ +$/,"").split(" "),this.Qb=Array(a.length),d=0;d<a.length;d++)this.Qb[d]=fa(a[d],16);mj(this)}};
            function mj(a){if(!pb(a))if(!a.pi)ob(a);else if(a.Qb&&a.ma){if(a.Qb.length!=a.jh)qb(a,"ROM size (0x"+h(a.Qb.length)+") does not match specified size ("+("0x"+h(a.jh))+")");else{var b;b=a.Lk;if(ec(a.ma,b,a.jh,Ac)){for(var c=0;c<a.Qb.length;c++){var d=a.ma,e=b+c;d.na[(e&d.Db)>>>d.Ca].ti(e&d.Ga,a.Qb[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.vh?b.push(a.vh):null!=a.vh&&a.vh.length&&(b=a.vh);for(c=0;c<b.length;c++){var d=a,e=b[c],g=ic(d.ma,d.Lk,d.jh);hc(d.ma,e,d.jh,g)}a.lf&&((b=gb(a.lf,a.id))?
            (c=a.Qb,d=a.hn,5==b.$a?oj(b,c,d||[12640,8752],8):7==b.$a&&oj(b,c,d||[14221,16269],8),ob(b)):a.Da("Unable to find component: "+a.lf));delete a.Qb}}ob(a)}}Pa(function(){for(var a=kb(window.document,"pcjs","rom"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new lj(d);jb(d,c)}});function pj(a){Ua.call(this,"RAM",a,pj);this.Di=a.addr;this.Le=a.size;this.Ep=a.test;this.Ap=!!this.Le;this.Yi=!1}eb(pj);pj.prototype.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;this.ja=xb(a,"ChipSet");ob(this)};
            pj.prototype.lc=function(a,b){b||this.reset();return!0};pj.prototype.kc=function(){return!0};
            pj.prototype.reset=function(){if(!this.Di&&!this.Ap&&this.ja){var a=1024*oi(this.ja);this.Le&&a!=this.Le&&(jc(this.ma,this.Di,this.Le),this.Yi=!1);this.Le=a}!this.Yi&&this.Le&&ec(this.ma,this.Di,this.Le,1)&&(this.Yi=!0,this.status(Math.floor(this.Le/1024)+"Kb allocated"),"ramCPQ"==this.Lg&&(this.Z=new qj(this),ec(this.ma,rj,1,4,this.Z)));if(this.Yi){if(this.Ep||lc(this.ma,1138,4660),"ramCPQ"!=this.Lg&&this.ja&&(a=this.ja,a.ga)){var b=1048576>this.Di?21:23,c=a.ga[b]|a.ga[b+1]<<8,c=c+(this.Le>>10);
            a.ga[b]=c&255;a.ga[b+1]=c>>8;si(a)}}else Ba("No RAM allocated")};function qj(a){this.ns=a;this.Zm=sj;this.Xo=tj;this.Dk=uj;this.ph=null}
            var rj=-2134900736,sj=65535,tj=2575,uj=2,vj=[null,0],wj=[function(a){var b=255;2>a?b=a&1?this.Z.Xo>>8:this.Z.Xo&255:4>a&&(b=a&1?this.Z.Dk>>8:this.Z.Dk&255);return b},null,null,function(a,b){var c=this.Z;if(a)2==a&&(c.Dk=c.Dk&-256|b);else if(b!=(c.Zm&255)){var d=c.ns.ma;if(b&1)c.ph&&(hc(d,917504,131072,c.ph),c.ph=null);else{c.ph||(c.ph=ic(d,917504,131072));var e=ic(d,16646144,131072);hc(d,917504,131072,e,b&2?1:Ac)}c.Zm=c.Zm&-256|b}},null,null];qj.prototype.$n=function(){return vj};
            qj.prototype.ul=function(){return wj};Pa(function(){for(var a=kb(window.document,"pcjs","ram"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new pj(d);jb(d,c)}});function xj(a){Ua.call(this,"Keyboard",a,xj,65536);this.Tn=Ia("Mobi");this.Bp=Ia("MSIE");this.ab("mobile keyboard support: "+(this.Tn?"true":"false"));this.Bn=0;this.bj=!0;this.rl=this.ll=!1;this.Vb=[];this.Uq=500;this.Vq=100;this.Tq=50;this.Mn=!1;ob(this)}eb(xj);
            var V={it:1,jt:3,kt:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,ft:65,gt:66,dn:67,bp:68,E:69,nt:70,qt:71,en:72,st:73,tt:74,ut:75,vt:76,wt:77,Fk:78,yt:79,zt:80,Bt:81,gn:82,Ft:83,Pt:84,Tt:85,Ut:86,Vt:87,Xt:88,Yt:89,Zt:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,$t:97,au:98,du:99,ku:100,lu:101,mu:102,ou:103,pu:104,qu:105,ru:106,su:107,
            tu:108,uu:109,vu:110,xu:111,yu:112,zu:113,Au:114,Bu:115,Cu:116,Du:117,Eu:118,Fu:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126},yj={};yj[186]=V[";"];yj[187]=V["="];yj[188]=V[","];yj[189]=V["-"];yj[190]=V["."];yj[191]=V["/"];yj[192]=V["`"];yj[219]=V["["];yj[220]=V["\\"];yj[221]=V["]"];yj[222]=V["'"];yj[173]=V["-"];var zj={};zj[V["1"]]=V["!"];zj[V["2"]]=V["@"];zj[V["3"]]=V["#"];zj[V["4"]]=V.$;zj[V["5"]]=V["%"];zj[V["6"]]=V["^"];zj[V["7"]]=V["&"];zj[V["8"]]=V["*"];zj[V["9"]]=V["("];
            zj[V["0"]]=V[")"];zj[186]=V[":"];zj[187]=V["+"];zj[188]=V["<"];zj[189]=V._;zj[190]=V[">"];zj[191]=V["?"];zj[192]=V["~"];zj[219]=V["{"];zj[220]=V["|"];zj[221]=V["}"];zj[222]=V['"'];zj[173]=V._;zj[61]=V["+"];zj[59]=V[":"];
            var Aj={3016:1,1016:2,1017:8,1018:32,1091:128,1093:64,1224:128,1020:512,1144:1024,1145:2048},Bj={TAB:1009,ESC:1027,F1:1112,F2:1113,F3:1114,F4:1115,F5:1116,F6:1117,F7:1118,F8:1119,F9:1120,F10:1121,LEFT:1037,UP:1038,RIGHT:1039,DOWN:1040,CTRL_C:4003,CTRL_BREAK:4008,CTRL_ALT_DEL:4046},Cj={esc:1027,1:V["1"],2:V["2"],3:V["3"],4:V["4"],5:V["5"],6:V["6"],7:V["7"],8:V["8"],9:V["9"],0:V["0"],"-":V["-"],"=":V["="],bs:1008,tab:1009,q:81,w:87,e:69,r:82,t:84,y:89,u:85,i:73,o:79,p:80,"[":V["["],"]":V["]"],enter:13,
            ctrl:1017,a:65,s:83,d:68,f:70,g:71,h:72,j:74,k:75,l:76,";":V[";"],quote:V["'"],"`":V["`"],shift:1016,"\\":V["\\"],z:90,x:88,c:67,v:86,b:66,n:78,m:77,",":V[","],".":V["."],"/":V["/"],"right-shift":3016,prtsc:1044,alt:1018,space:V[" "],"caps-lock":1020,f1:1112,f2:1113,f3:1114,f4:1115,f5:1116,f6:1117,f7:1118,f8:1119,f9:1120,f10:1121,"num-lock":1144,"scroll-lock":1145,"num-home":1036,"num-up":1038,"num-pgup":1033,"num-sub":1109,"num-left":1037,"num-center":1101,"num-right":1039,"num-add":1107,"num-end":1035,
            "num-down":1040,"num-pgdn":1034,"num-ins":1045,"num-del":1046},Dj={"caps-lock":512,"num-lock":1024,"scroll-lock":2048},W={1027:1};W[V["1"]]=2;W[V["!"]]=10754;W[V["2"]]=3;W[V["@"]]=10755;W[V["3"]]=4;W[V["#"]]=10756;W[V["4"]]=5;W[V.$]=10757;W[V["5"]]=6;W[V["%"]]=10758;W[V["6"]]=7;W[V["^"]]=10759;W[V["7"]]=8;W[V["&"]]=10760;W[V["8"]]=9;W[V["*"]]=10761;W[V["9"]]=10;W[V["("]]=10762;W[V["0"]]=11;W[V[")"]]=10763;W[V["-"]]=12;W[V._]=10764;W[V["="]]=13;W[V["+"]]=10765;W[1008]=14;W[1009]=15;W[113]=16;
            W[81]=10768;W[119]=17;W[87]=10769;W[101]=18;W[69]=10770;W[114]=19;W[82]=10771;W[116]=20;W[84]=10772;W[121]=21;W[89]=10773;W[117]=22;W[85]=10774;W[105]=23;W[73]=10775;W[111]=24;W[79]=10776;W[112]=25;W[80]=10777;W[V["["]]=26;W[V["{"]]=10778;W[V["]"]]=27;W[V["}"]]=10779;W[13]=28;W[1017]=29;W[97]=30;W[65]=10782;W[115]=31;W[83]=10783;W[100]=32;W[68]=10784;W[102]=33;W[70]=10785;W[103]=34;W[71]=10786;W[104]=35;W[72]=10787;W[106]=36;W[74]=10788;W[107]=37;W[75]=10789;W[108]=38;W[76]=10790;W[V[";"]]=39;
            W[V[":"]]=10791;W[V["'"]]=40;W[V['"']]=10792;W[V["`"]]=41;W[V["~"]]=10793;W[1016]=42;W[V["\\"]]=43;W[V["|"]]=10795;W[122]=44;W[90]=10796;W[120]=45;W[88]=10797;W[99]=46;W[67]=10798;W[118]=47;W[86]=10799;W[98]=48;W[66]=10800;W[110]=49;W[78]=10801;W[109]=50;W[77]=10802;W[V[","]]=51;W[V["<"]]=10803;W[V["."]]=52;W[V[">"]]=10804;W[V["/"]]=53;W[V["?"]]=10805;W[3016]=54;W[1044]=55;W[1018]=56;W[V[" "]]=57;W[1020]=58;W[1112]=59;W[1113]=60;W[1114]=61;W[1115]=62;W[1116]=63;W[1117]=64;W[1118]=65;W[1119]=66;
            W[1120]=67;W[1121]=68;W[1144]=69;W[1145]=70;W[1036]=71;W[1038]=72;W[1033]=73;W[1109]=74;W[1037]=75;W[1101]=76;W[1039]=77;W[1107]=78;W[1035]=79;W[1040]=80;W[1034]=81;W[1045]=82;W[1046]=83;W[1122]=87;W[1123]=88;W[1091]=91;W[1093]=93;W[1224]=91;W[4003]=7470;W[4008]=7494;W[4046]=3677523;f=xj.prototype;
            f.Nb=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.va[e])switch(b){case "kbd":return c.onkeydown=function(a){return Ej(d,a,!0)},c.onkeypress=function(a){a=a||window.event;a=a.which||a.keyCode;if(d.Mn){var b=d.Vb.length?d.Vb[0].yf:0;b&&(65<=b&&90>=b||97<=b&&122>=b)&&(65<=a&&90>=a||97<=a&&122>=a)&&b!=a&&(d.rl=!0,a=b)}(b=!W[a]||!!(d.hc&128))||Fj(d,a,!0);return b},c.onkeyup=function(a){return Ej(d,a,!1)},!0;case "caps-lock":return this.va[e]=c,c.onclick=function(){d.O&&d.O.ed();Fj(d,1020,!0)},
            !0;case "num-lock":return this.va[e]=c,c.onclick=function(){d.O&&d.O.ed();Fj(d,1144,!0)},!0;case "scroll-lock":return this.va[e]=c,c.onclick=function(){d.O&&d.O.ed();Fj(d,1145,!0)},!0;default:var g=b.toUpperCase().replace(/-/g,"_");if(void 0!==Bj[g]&&"button"==a)return this.va[e]=c,c.onclick=function(a,b,c){return function(){a.O&&a.O.ed();Mj(a,c,!0);Fj(a,c,!0)}}(this,g,Bj[g]),!0;if(void 0!==Cj[b])return this.Bn++,this.va[e]=c,a=function(a,b,c){return function(){Fj(a,c)}}(this,b,Cj[b]),b=function(a,
            b,c){return function(){Nj(a,c)}}(this,b,Cj[b]),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}return!1};function Oj(a,b,c){if(a.Bn){for(var d in zj)if(b==zj[d]){b=+d;(d=yj[d])&&(b=d);break}for(var e in Cj)if((d=Cj[e]==b)||(d=b,97<=d&&122>=d&&(d-=32),d=Cj[e]==d),d){(a=a.va["key-"+e])&&void 0!==c&&(a.style.color=c?"#ffffff":"#000000",a.style.backgroundColor=c?"#000000":"#ffffff");break}}}
            f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;this.ja=xb(a,"ChipSet")};function hj(a,b){a.ab("keyboard reset",65792);a.fc=[170];a.Mh=!0;b&&a.ja&&jj(a.ja,a.fc[0])}function dj(a,b,c){a.kl!==c&&(a.kl=a.pl=c)&&(a.Mh=!0);a.aj!==b&&(a.aj=b)&&!a.pl&&kj(a,!0);a.aj&&a.pl&&(hj(a,!0),a.pl=!1)}function ej(a){var b=0;a.fc.length&&a.Mh&&(b=a.fc[0],a.ja&&jj(a.ja,b));a.qa()&&a.ab("scan code "+k(b)+" available")}
            function kj(a,b){0<a.fc.length&&(a.fc.shift(),(a.Mh=b)&&(a.fc.length&&a.ja?jj(a.ja,a.fc[0]):b=!1),a.qa()&&a.ab("scan codes shifted, notify "+(b?"true":"false")))}f.lc=function(a,b){return!b&&(this.reset(),a&&this.restore&&!this.restore(a))?!1:!0};f.kc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.mf();this.hc=this.Yd=0;this.fc=[];this.Mh=!0};f.save=function(){var a=new Je(this);a.set(0,this.Ym());return a.data()};f.restore=function(a){return this.mf(a[0])};
            f.mf=function(a){var b=0;void 0===a&&(a=[]);this.kl=this.Mh=a[b++];this.aj=a[b];return!0};f.Ym=function(){var a=0,b=[];b[a++]=this.kl;b[a]=this.aj;return b};
            function Mj(a,b,c,d){if(W[b]){var e=Math.floor(b/1E3)&2;if(b=Aj[b]||0){!e||b&85||(b>>=1);if(b&3584){if(!1===d)return!0;d=null}null==d?d=!((c?a.Yd:a.hc)&b):d||b&255&&(b=255);if(c){a.Yd&=~b;d&&(a.Yd|=b);c=b;var g,l;for(l in Dj)d="led-"+l,e=Dj[l],c&&c!=e||!(g=a.va[d])||(g.style.backgroundColor=a.Yd&e?"#00ff00":"#000000")}else a.hc&=~b,d&&(a.hc|=b);return!0}}return!1}
            function Fj(a,b,c){if(W[b]&&a.O&&a.O.fa.qb){Aj[b]&&a.Vb.length&&0<a.Vb[0].ie&&(a.Vb[0].ie=0);for(var d,e=0;e<a.Vb.length;e++)if(d=a.Vb[e],d.yf==b){if(!c||0<=d.ie){e=-1;break}0<e&&(0<a.Vb[0].ie&&(a.Vb[0].ie=0),a.Vb.splice(e,1));break}0>e||(e==a.Vb.length&&(d={},d.yf=b,d.hc=a.hc,Oj(a,b,!0),e++),0<e&&a.Vb.splice(0,0,d),d.Oh=!0,d.ie=c?-1:Aj[b]?0:1,Pj(a,d))}}
            function Nj(a,b,c){if(!W[b]||!(c||a.O&&a.O.fa.qb))return!1;for(var d=!1,e=0;e<a.Vb.length;e++){var g=a.Vb[e];if(g.yf==b||g.yf==zj[b]){a.Vb.splice(e,1);g.Vo&&clearTimeout(g.Vo);g.Oh&&!c&&Qj(a,g.yf,!1);Oj(a,b,!1);d=!0;break}}!a.Vb.length&&a.rl&&(Mj(a,1020),a.rl=!1);return d}
            function Pj(a,b){if(a.O&&a.O.fa.qb){if(Qj(a,b.yf,b.Oh),b.ie){var c;if(0>b.ie){if(!b.Oh){Nj(a,b.yf);return}b.Oh=!1;c=a.Tq}else c=1==b.ie++?a.Uq:a.Vq;b.Vo=setTimeout(function(a){return function(){Pj(a,b)}}(a),c)}}else Nj(a,b.yf,!0)}function Rj(a,b,c){var d=b;if(65<=b&&90>=b)!(a.hc&515)==c&&(d=b+32);else if(97<=b&&122>=b)!!(a.hc&515)==c&&(d=b-32);else if(!!(a.hc&3)==c){if(a=zj[b])d=a}else if(a=yj[b])d=a;return d}f.kk=function(a){this.bj=a;a||(this.hc&=-256)};
            function Ej(a,b,c){var d=!0,e=!1,g=!1,l=b.keyCode,p=Rj(a,l,!0);a.ll&&p==V["`"]&&(l=p=27);if(W[l+1E3])if(p+=1E3,2==b.location&&(p+=2E3),Mj(a,p,!1,c)){if(20==l||144==l||145==l)a.Bp||(c=e=!0);if(!(c||91!=l&&93!=l))for(var v=0;v<a.Vb.length;v++){var w=a.Vb[v];w.Oh=!1;0<w.ie&&(w.ie=0)}}else 8==l&&8==(a.hc&40)&&(p=4008),d=!1;else if(W[p]&&a.hc&60&&(d=!1),!a.Mn&&d&&c||a.hc&192)g=!0;d||b.preventDefault();g||a.Tn&&d||(c?Fj(a,p,e):Nj(a,p)||(b=Rj(a,l,!1),b!=p&&Nj(a,b)));return d}
            function Qj(a,b,c){Mj(a,b,!0,c);var d=W[b]||W[b+1E3];if(void 0!==d){14==d&&40==(a.hc&40)&&(d=83);var e=[],g=d&255;e.push(g|(c?0:128));for(b=65<=b&&90>=b||97<=b&&122>=b;d>>>=8;){var l=0,p=d&255;224==g||225==g?e.push(g|(c?0:128)):(42==p?a.Yd&3||a.Yd&512&&b||(l=p):29==p?a.Yd&12||(l=p):56==p?a.Yd&48||(l=p):e.push(g|(c?0:128)),l&&(c?e.unshift(l):e.push(l|128)))}for(c=0;c<e.length;c++)d=a,g=e[c],d.fc&&(20>d.fc.length?(d.qa()&&d.ab("scan code "+k(g)+" buffered"),d.fc.push(g),1==d.fc.length&&d.ja&&jj(d.ja,
            g)):(20==d.fc.length&&d.fc.push(255),d.ab("scan code buffer overflow")))}}Pa(function(){for(var a=kb(window.document,"pcjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new xj(d);jb(d,c)}});
            function Y(a,b,c,d,e){Ua.call(this,"Video",a,Y,262144);this.ka=a.model;this.$a=Sj[this.ka]||Tj;this.Zd=a.memory||0;this.Ro=a.switches;this.Pd=a.mode;if(void 0===this.Pd||void 0===Uj[this.Pd])this.Pd=Vj;this.oj=a.charCols;this.Km=a.charRows;if(void 0===this.oj||void 0===this.Km)this.oj=Uj[this.Pd][0],this.Km=Uj[this.Pd][1];this.be=a.screenWidth;this.ue=a.screenHeight;this.Dp=a.scale;this.zp=12<=Math.round(this.be/this.oj);this.Fp=a.touchScreen;this.Jd=b;this.md=c;this.Za=(this.Ms=d)||b||null;this.of=
            null;this.yp=a.autoLock;this.Ya=this.dc=0;this.Ue=[];this.ne=Array(16);this.bj=!1;var g=this;this.Qn=Ia("Gecko/");b=["","moz","webkit","ms"];if(this.Gc=e)if(this.Gc.xg=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.Gc.xg){for(e=0;e<b.length;e++)if(c=b[e]+"fullscreenchange","on"+c in document){document.addEventListener(c,function(){Wj(g,document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?
            !0:!1)},!1);break}for(e=0;e<b.length;e++)if(c=b[e]+"fullscreenerror","on"+c in document){document.addEventListener(c,function(){Wj(g,null)},!1);break}}this.Za&&(this.Za.onfocus=function(){return g.kk(!0)},this.Za.onblur=function(){return g.kk(!1)},this.Za.Tf=this.Za.requestPointerLock||this.Za.mozRequestPointerLock||this.Za.webkitRequestPointerLock,this.Za.Wo=this.Za.exitPointerLock||this.Za.mozExitPointerLock||this.Za.webkitExitPointerLock,this.Za.Tf&&(e=function(){g.hi(document.pointerLockElement===
            g.Za||document.mozPointerLockElement===g.Za||document.webkitPointerLockElement===g.Za)},"onpointerlockchange"in document?document.addEventListener("pointerlockchange",e,!1):"onmozpointerlockchange"in document?document.addEventListener("mozpointerlockchange",e,!1):"onwebkitpointerlockchange"in document&&document.addEventListener("webkitpointerlockchange",e,!1)));if(a=a.fontROM)"json"!=ia(a)&&(a=Aa()+"/api/v1/dump?file="+a+"&format=bytes"),za(a,!0,null,this,this.hr)}eb(Y);
            var Tj=1,Sj={mda:1,cga:3,ega:5,vga:7},Vj=7,Xj={2:{tj:15700,sj:208,lk:85,mk:96},3:{tj:18432,sj:364,lk:85,mk:96},4:{tj:21850,sj:364,lk:85,mk:96},7:{tj:16700,sj:480,lk:85,mk:83}},Yj={6:[1,3,!0],7:[2,3,!0],8:[6,3,!0],9:[4,3,!0],10:[3,1,!0],11:[3,2,!0],0:[1,3,!1],1:[2,3,!1],2:[6,3,!1],3:[4,3,!1],4:[3,1,!1],5:[3,2,!1]},Uj=[,[40,25,1,0,3],,[80,25,1,0,3],[320,200,8,192],,[640,200,16,192]];Uj[Vj]=[80,25,1,0,1];Uj[13]=[320,200,16];Uj[14]=[640,200,16];Uj[15]=[640,350,16];Uj[16]=[640,350,16];
            Uj[17]=[640,480,16];Uj[18]=[640,480,16];Uj[19]=[320,200,16];Uj[0]=Uj[1];Uj[2]=Uj[3];Uj[5]=Uj[4];var Zj=Array(5);Zj[0]=[0,0,0,255];Zj[1]=[127,192,127,255];Zj[2]=[127,192,127,255];Zj[3]=[127,255,127,255];Zj[4]=[127,255,127,255];var ak=[0,1,2,2,2,2,2,2,0,3,4,4,4,4,4,4],bk=Array(16);bk[0]=[0,0,0,255];bk[1]=[0,0,170,255];bk[2]=[0,170,0,255];bk[3]=[0,170,170,255];bk[4]=[170,0,0,255];bk[5]=[170,0,170,255];bk[6]=[170,85,0,255];bk[7]=[170,170,170,255];bk[8]=[85,85,85,255];bk[9]=[85,85,255,255];
            bk[10]=[85,255,85,255];bk[11]=[85,255,255,255];bk[12]=[255,85,85,255];bk[13]=[255,85,255,255];bk[14]=[255,255,85,255];bk[15]=[255,255,255,255];var ck=[2,4,6],dk=[3,5,7],ek=[0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63],fk=[0,255,65280,65535,16711680,16711935,16776960,16777215,-16777216,-16776961,-16711936,-16711681,-65536,-65281,-256,-1],gk=[0];gk[128]=1;gk[32768]=2;gk[32896]=3;gk[8388608]=4;gk[8388736]=5;gk[8421376]=6;gk[8421504]=7;gk[-2147483648]=8;gk[-2147483520]=9;gk[-2147450880]=10;
            gk[-2147450752]=11;gk[-2139095040]=12;gk[-2139094912]=13;gk[-2139062272]=14;gk[-2139062144]=15;
            function hk(a,b,c,d){if(void 0!==b&&(!c||c.length)){this.video=a;var e=ik[b],g=a.Qd||e[5];if(!c||6>c.length)c=[!1,0,null,null,0,Array(5>b?jk:kk)];this.Y=a.Y;this.type=e[0];this.port=e[1];this.$a=b;this.Ya=e[2];this.dc=e[3];this.Zd=d||e[4];65536<=this.Zd&&720896<=this.Ya&&(this.dc=Math.min(this.Zd>>2,32768));this.Yc=c[0];this.cd=c[1];this.$g=c[2];this.wa=c[3];this.uc=c[4]&255;this.ok=c[4]>>8&255;this.Ib=c[5];this.zl=jk;this.Fi=lk;if(5<=b){this.zl=kk;this.Fi=mk;b=c[6];void 0===b&&(b=[!1,0,Array(20),
            0,3==g?0:1,0,0,Array(5),0,0,0,Array(9),0,[this.Ya,this.dc,this.Zd],Array(this.Zd>>2),5144,0,-1,0,-1,0,-1,0,0,0,0,1,255,0,0,0,Array(256)]);this.ce=b[0];this.Ie=b[1];this.He=b[2];this.Ok=nk;this.vk=b[3];this.dh=b[4];this.mi=b[5];this.Ke=b[6];this.fh=b[7];this.Qk=ok;this.Jo=b[8];this.Ko=b[9];this.Je=b[10];this.Zf=b[11];this.Pk=pk;this.yb=b[12];d=b[13];"number"==typeof d&&(d=[this.Ya,this.dc,d]);this.Ya=d[0];this.dc=d[1];d=this.Zd>>2;if((this.Ud=b[14])&&this.Ud.length<d){for(var e=this.Ud,l=0,p=Array(d),
            v=0;v<e.length-1;){for(var w=e[v++],F=e[v++];w--;)p[l]=F,l+=2;l==d&&(l=1)}this.Ud=p}(d=b[15])&&(d=d&8?d&-9:qk[d&65280]|qk[d&255]);this.Bk(d);this.Jm=b[16];this.tb=b[17];this.he=b[18];this.Cb=b[19];this.hk=b[20];this.sf=b[21];this.Wf=b[22];this.Al=b[23];this.Bl=b[24];this.fi=b[25];7==this.$a&&(this.Sm=b[26],this.Pm=b[27],this.vd=b[28],this.vc=b[29],this.rk=b[30],this.li=b[31])}g=Xj[g]||Xj[3];this.Cl=a.O.T.ge/g.tj|0;this.Yq=this.Cl*g.lk/100|0;this.so=this.Cl*g.sj|0;this.$q=this.so*g.mk/100|0;this.uo=
            c[7]||0}}
            var jk=18,kk=25,lk="HORZ_TOTAL HORZ_DISP HORZ_SYNC_POS HORZ_SYNC_WIDTH VERT_TOTAL VERT_TOTAL_ADJ VERT_DISP VERT_SYNC_POS INTERLACE_POS MAX_SCAN_LINE CURSOR_START CURSOR_END START_ADDR_HI START_ADDR_LO CURSOR_ADDR_HI CURSOR_ADDR_LO LIGHT_PEN_HI LIGHT_PEN_LO".split(" "),mk="HORZ_TOTAL HORZ_DISP_END HORZ_BLANK_START HORZ_BLANK_END HORZ_RETRACE_START HORZ_RETRACE_END VERT_TOTAL OVERFLOW PRESET_ROW_SCAN MAX_SCAN_LINE CURSOR_START CURSOR_END START_ADDR_HI START_ADDR_LO CURSOR_ADDR_HI CURSOR_ADDR_LO VERT_RETRACE_START VERT_RETRACE_END VERT_DISP_END OFFSET UNDERLINE VERT_BLANK_START VERT_BLANK_END MODE_CTRL LINE_COMPARE".split(" "),nk=
            "PAL00 PAL01 PAL02 PAL03 PAL04 PAL05 PAL06 PAL07 PAL08 PAL09 PAL0A PAL0B PAL0C PAL0D PAL0E PAL0F MODE OVERSCAN PLANES HORZPAN".split(" "),ok=["RESET","CLOCKING","MAPMASK","CHARMAP","MEMMODE"],pk="SRESET ESRESET COLORCMP DATAROT READMAP MODE MISC COLORDC BITMASK".split(" "),qk=[,,1024,5120];qk[16]=1280;qk[512]=0;qk[1024]=32;qk[1536]=96;qk[2560]=160;qk[3584]=224;qk[768]=16;qk[4096]=1;qk[8192]=2;qk[24576]=98;qk[40960]=162;qk[57344]=226;var rk=[];
            rk[1024]=function(a){a+=this.offset;return(this.Z.yb=this.ea[a])>>this.Z.Jm&255};rk[5120]=function(a){a+=this.offset;var b=this.Z.yb=this.ea[a&-2];return(a&1?b>>8:b)&255};rk[1280]=function(a){a+=this.offset;a=this.Z.yb=this.ea[a];for(var b=this.Z.Bl,c=this.Z.Al&b,d=0,e=128;e;)(a&b)==c&&(d|=e),c>>>=1,b>>>=1,e>>=1;return d};rk[0]=function(a,b){var c=a+this.offset,d;d=this.ea[c]&~this.Z.tb|(b|b<<8|b<<16|b<<24)&this.Z.tb;d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};
            rk[32]=function(a,b){var c=a+this.offset;b=b>>this.Z.he|b<<8-this.Z.he&255;var d;d=(b|b<<8|b<<16|b<<24)&this.Z.sf|this.Z.Wf;d=d&this.Z.tb|this.ea[c]&~this.Z.tb;d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};rk[96]=function(a,b){var c=a+this.offset;b=b>>this.Z.he|b<<8-this.Z.he&255;var d;d=(b|b<<8|b<<16|b<<24)&this.Z.sf|this.Z.Wf;d&=this.Z.yb;d=d&this.Z.tb|this.ea[c]&~this.Z.tb;d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};
            rk[160]=function(a,b){var c=a+this.offset;b=b>>this.Z.he|b<<8-this.Z.he&255;var d;d=(b|b<<8|b<<16|b<<24)&this.Z.sf|this.Z.Wf;d|=this.Z.yb;d=d&this.Z.tb|this.ea[c]&~this.Z.tb;d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};rk[224]=function(a,b){var c=a+this.offset;b=b>>this.Z.he|b<<8-this.Z.he&255;var d;d=(b|b<<8|b<<16|b<<24)&this.Z.sf|this.Z.Wf;d^=this.Z.yb;d=d&this.Z.tb|this.ea[c]&~this.Z.tb;d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};
            rk[16]=function(a,b){a+=this.offset;var c,d=a&-2;c=this.Z.tb&(d==a?16711935:-16711936);c=(b|b<<8|b<<16|b<<24)&c|this.ea[d]&~c;c=c&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[d]!=c&&(this.ea[d]=c,this.Ta=!0)};rk[1]=function(a){a+=this.offset;var b=this.ea[a]&~this.Z.tb|this.Z.yb&this.Z.tb;this.ea[a]!=b&&(this.ea[a]=b,this.Ta=!0)};rk[17]=function(a){a+=this.offset;var b=a&-2;a=this.Z.tb&(b==a?16711935:-16711936);a=this.ea[b]&~a|this.Z.yb&a;this.ea[b]!=a&&(this.ea[b]=a,this.Ta=!0)};
            rk[2]=function(a,b){var c=a+this.offset,d=fk[b&15],d=d&this.Z.tb|this.ea[c]&~this.Z.tb,d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};rk[98]=function(a,b){var c=a+this.offset,d=fk[b&15],d=d&this.Z.yb,d=d&this.Z.tb|this.ea[c]&~this.Z.tb,d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};
            rk[162]=function(a,b){var c=a+this.offset,d=fk[b&15],d=d|this.Z.yb,d=d&this.Z.tb|this.ea[c]&~this.Z.tb,d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};rk[226]=function(a,b){var c=a+this.offset,d=fk[b&15],d=d^this.Z.yb,d=d&this.Z.tb|this.ea[c]&~this.Z.tb,d=d&this.Z.Cb|this.Z.yb&~this.Z.Cb;this.ea[c]!=d&&(this.ea[c]=d,this.Ta=!0)};
            function sk(a){var b=[];if(void 0!==a.$a){b[0]=a.Yc;b[1]=a.cd;b[2]=a.$g;b[3]=a.wa;b[4]=a.uc|a.ok<<8;b[5]=a.Ib;if(5<=a.$a){var c=[];c[0]=a.ce;c[1]=a.Ie;c[2]=a.He;c[3]=a.vk;c[4]=a.dh;c[5]=a.mi;c[6]=a.Ke;c[7]=a.fh;c[8]=a.Jo;c[9]=a.Ko;c[10]=a.Je;c[11]=a.Zf;c[12]=a.yb;c[13]=[a.Ya,a.dc,a.Zd];var d;a:if(d=a.Ud){var e=0,g=[];if(void 0!==d[0])for(var l=0;2>l;l++)for(var p=l;p<d.length;){for(var v=d[p],w=p+2;w<d.length&&d[w]===v;)w+=2;g[e++]=w-p>>1;g[e++]=v;p=w}if(g.length<d.length){d=g;break a}}c[14]=d;c[15]=
            a.lj|8;c[16]=a.Jm;c[17]=a.tb;c[18]=a.he;c[19]=a.Cb;c[20]=a.hk;c[21]=a.sf;c[22]=a.Wf;c[23]=a.Al;c[24]=a.Bl;c[25]=a.fi;7==a.$a&&(c[26]=a.Sm,c[27]=a.Pm,c[28]=a.vd,c[29]=a.vc,c[30]=a.rk,c[31]=a.li);b[6]=c}b[7]=a.uo}return b}function tk(a,b,c,d,e){if(d){var g,l="";for(g=0;g<e.length;g++)l&&(l+="\n"),l+=b+"["+k(g)+"]: "+ma(e[g],19)+k(d[g])+(g===c?"*":"");a.Y.R(l)}else a.Y.R(b+": "+k(c))}hk.prototype.$n=function(a){return[this.Ud,a-this.Ya]};hk.prototype.ul=function(){return this.Ei};
            hk.prototype.Bk=function(a){if(null!=a&&a!=this.lj){var b=a&65280,c=rk[b];c||b&4096&&(c=rk[4096]);var b=a&247,d=rk[b];d||b&16&&(d=rk[16]);this.Ei||(this.Ei=Array(6));this.Ei[0]=c;this.Ei[3]=d;this.lj=a}};var ik=[];ik[Tj]=["MDA",948,720896,4096,0,3];ik[3]=["CGA",980,753664,16384,0,2];ik[5]=["EGA",980,753664,16384,65536,4];ik[7]=["VGA",980,753664,16384,262144,7];f=Y.prototype;
            f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;3!=Sj[this.ka]&&(oc(b,this,uk),sc(b,this,vk));Sj[this.ka]!=Tj&&(oc(b,this,wk),sc(b,this,xk));5<=this.$a&&(oc(b,this,yk),sc(b,this,zk));7==this.$a&&(oc(b,this,Ak),sc(b,this,Bk));if(d){var e=this;hi(d,262144,function(a){if(e.Va)if(a){var b=e.Va;if(b.Ud){a=fa(a);a=void 0!==a?a-b.Ya:b.ms||0;0>a&&(a=0);for(var c="",d=0;8>d;d++){for(var g=h(b.Ya+a)+":",K=0;8>K&&a<b.Ud.length;K++)var J=b.Ud[a++],g=g+(" "+h(J));c&&(c+="\n");c+=g}c&&b.Y.R(c);b.ms=a}else b.Y.R("no buffer")}else e.Y.R("BIOSMODE: "+
            k(e.Fe)),b=e.Va,tk(b,"CRTC",b.uc,b.Ib,b.Fi),5<=b.$a&&(tk(b," GRC",b.Je,b.Zf,b.Pk),tk(b," SEQ",b.Ke,b.fh,b.Qk),tk(b," ATC",b.Ie,b.He,b.Ok),b.Y.R("   ATCDATA: "+b.ce),tk(b,"      FEAT",b.mi),tk(b,"      MISC",b.dh),tk(b,"   STATUS0",b.vk)),tk(b,"   STATUS1",b.wa),b.$a!=Tj&&3!=b.$a||tk(b,"   MODEREG",b.cd),3==b.$a&&tk(b,"     COLOR",b.$g),5<=b.$a&&(b.Y.R("   LATCHES: 0x"+h(b.yb)),b.Y.R("    ACCESS: "+ga(b.lj)),b.Y.R("Use 'dump video [addr]' to dump video memory"));else e.Y.R("no active video card")})}if((this.Ja=
            xb(a,"Keyboard"))&&this.Jd){for(var g in this.va)0<g.indexOf("lock")&&this.Ja.Nb("led",g,this.va[g]);this.Ja.Nb(this.Ms?"textarea":"canvas","kbd",this.Za)}this.Ji=9;(this.ja=xb(a,"ChipSet"))&&this.Ro&&5==this.$a&&(this.Ji=Vh(this.Ro,this.Ji));this.Ja&&this.Fp&&Ck(this)};
            f.Nb=function(a,b,c){var d=this;if(!this.va[b])switch(this.va[b]=c,b){case "fullScreen":return this.Gc&&this.Gc.xg?c.onclick=function(){d.xg()}:c.parentNode.removeChild(c),!0;case "lockPointer":return this.Js=c.textContent,this.Za&&this.Za.Tf?c.onclick=function(){d.Tf(!0)}:c.parentNode.removeChild(c),!0;case "refresh":return c.onclick=function(){ed(d,!0)},!0}return!1};f.ed=function(){this.Za&&this.Za.focus()};
            f.xg=function(){var a=!1;if(this.Gc){if(this.Gc.xg){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.be/this.ue;b>c&&(a=Math.round(c/b*100)+"%")}this.Qn?(this.Jd.style.width=a,this.Jd.style.width=a,this.Jd.style.display="block",this.Jd.style.margin="auto"):(this.Gc.style.width=a,this.Gc.style.height="auto");this.Gc.style.backgroundColor="black";this.Gc.xg();a=!0}this.ed()}return a};
            function Wj(a,b){!b&&a.Gc&&(a.Qn?a.Jd.style.width=a.Jd.style.height="":a.Gc.style.width=a.Gc.style.height="");a.ab("notifyFullScreen("+b+")",!0);a.Ja&&(a.Ja.ll=b)}f.Tf=function(a){var b=!1;this.Za&&(a?this.Za.Tf&&(this.Za.Tf(),this.of.hi(!0),b=!0):this.Za.Wo&&(this.Za.Wo(),this.of.hi(!1),b=!0),this.ed());return b};f.hi=function(a){this.of&&(this.of.hi(a),this.Ja&&(this.Ja.ll=a));var b=this.va.lockPointer;b&&(b.textContent=a?"Press Esc to Unlock Pointer":this.Js)};
            function Ck(a){var b=a.Za;b&&!a.Nh&&(b.addEventListener("touchstart",function(b){Dk(a,b)},!1),b.addEventListener("touchmove",function(b){Dk(a,b)},!0),b.addEventListener("touchend",function(){},!1),a.Nh=!0)}f.kk=function(a){this.bj=a;this.Ja&&this.Ja.kk(a)};
            function Dk(a,b){a.bj&&b.preventDefault();var c=0,d=0,e=a.Jd;do isNaN(e.offsetLeft)||(c+=e.offsetLeft,d+=e.offsetTop);while(e=e.offsetParent);var g=a.be/a.Jd.offsetWidth,e=a.ue/a.Jd.offsetHeight,l,p;b.targetTouches?(l=b.targetTouches[0].pageX,p=b.targetTouches[0].pageY):(l=b.pageX,p=b.pageY);c=(l-c)*g/(a.be/3)|0;d=(p-d)*e/(a.ue/3)|0;1!=d?d?Fj(a.Ja,1040,!0):Fj(a.Ja,1038,!0):1!=c&&(c?Fj(a.Ja,1039,!0):Fj(a.Ja,1037,!0))}
            f.lc=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};f.kc=function(a){return a&&this.save?this.save():!0};
            f.reset=function(){var a=!0,b=0;this.ja&&(b=pi(this.ja));this.ka||(this.$a=3==b?Tj:3);this.Pd=3;switch(this.$a){case 7:b=7;break;case 5:var c=Yj[this.Ji];c&&(b=c[0]);b||(b=4);break;case Tj:b=3;this.Pd=Vj;break;default:b=2}this.Qd!==b&&(this.Qd=b,a=!0);this.Va=null;this.Kd=this.Yk=new hk(this,Tj);this.ic=this.Si=new hk(this,3);5>this.$a?this.W=new hk:(this.W=new hk(this,this.$a,null,this.Zd),Ek(this));Fk(this);this.Fe=null;this.Hf=this.pd=-1;this.Gf=0;Gk(this,this.Pd);if(this.Va.Ya&&a){a=this.Va.Ya+
            this.Zk;for(b=this.Va.Ya;b<a;b+=2){var d=65536*Math.random()|0;4==this.Qd||7==this.Qd?(c=b>>1&255,d=d>>8&-129,d>>4==(d&15)&&(d^=15)):(c=d&255,d=(d&256?7:112)|8&d>>8);lc(this.ma,b,c|d<<8)}ed(this,!0)}};function Ek(a){a.W.dh&1?(a.Kd=a.Yk,a.ic=a.W):(a.Kd=a.W,a.ic=a.Si)}f.save=function(){var a=new Je(this);a.set(0,sk(this.Yk));a.set(1,sk(this.Si));a.set(2,[this.Qd,this.Pd,this.Fe]);a.set(3,sk(this.W));return a.data()};
            f.restore=function(a){var b=a[2];this.Qd=b[0];this.Pd=b[1];this.Fe=b[2];this.Va=null;this.Kd=this.Yk=new hk(this,Tj,a[0]);this.ic=this.Si=new hk(this,3,a[1]);this.W=new hk(this,this.$a,a[3],this.Zd);this.W.Yc&&Ek(this);Fk(this);if(!Hk(this))return!1;Ik(this);return!0};
            f.hr=function(a,b,c){if(c)this.Da("Unable to load font ROM image (error "+c+")");else{try{var d=eval("("+b+")");if(!d.length){Ba("Empty font ROM image: "+a);return}if(1==d.length){Ba(d[0]);return}if(8192==d.length)oj(this,d,[6144,0]);else{this.Da("Unrecognized font data length ("+d.length+")");return}}catch(e){this.Da("Font ROM data error: "+e.message);return}(this.md||this.Y)&&ob(this)}};
            function Jk(a,b){if(1==b)return a.ne[0]=bk[0],a.ne[1]=bk[7],a.ne;if(2==b){var c=a.Va.$g;if(a.Va===a.W){var d=a.W.He[0],c=d&7;d&16&&(c|=8);18!=a.W.He[1]&&(c|=32)}a.ne[0]=bk[c&15];c=c&32?dk:ck;for(d=0;d<c.length;d++)a.ne[d+1]=bk[c[d]];return a.ne}if(a.ic===a.Si)return bk;c=null!=a.W.He[15]?a.W.He:ek;for(d=0;d<a.ne.length;d++){var e=c[d]||0;a.ne[d]=[(e&4?170:0)|(e&32?85:0),(e&2?170:0)|(e&16?85:0),(e&1?170:0)|(e&8?85:0),255]}return a.ne}function oj(a,b,c,d){a.Bi=b;a.Jk=c;a.Mf=d}
            function Fk(a){var b=!1;if(window&&a.Bi){var c=Jk(a),d,e=a.Mf?a.Mf:8;Kk(a,3,a.Jk[0],0,e,8,a.Bi,c)&&(b=!0);d=a.Mf?0:2048;e=a.Mf?a.Mf:9;Kk(a,1,a.Jk[1],d,e,14,a.Bi,Zj,ak)&&(b=!0);a.Mf&&Kk(a,a.$a,a.Jk[1],0,a.Mf,14,a.Bi,c)&&(b=!0)}return b}function Kk(a,b,c,d,e,g,l,p,v){var w=!1;null!=c&&(Lk(a,b,c,d,e,g,l,p,v)&&(w=!0),a.zp&&Lk(a,b<<1,c,d,e,g,l,p,v)&&(w=!0));return w}
            function Lk(a,b,c,d,e,g,l,p,v){var w=!1,F=b&1?0:1,K=a.Ue[b];K||(K={Hc:e<<F,Ic:g<<F,mg:Array(p.length),mn:p.slice(),qh:v,Hk:Array(p.length)});for(v=0;v<p.length;v++){var J=p[v],I=K.mg[v]?K.mn[v]:[];if(J[0]!==I[0]||J[1]!==I[1]||J[2]!==I[2]){var w=K,I=v,T=F,Z=c,S=d,X=e,xa=g,qa=l,Sa=[0,0,0,0],Fb=window.document.createElement("canvas");Fb.width=w.Hc<<4;Fb.height=w.Ic<<4;for(var Va=Fb.getContext("2d"),ca=void 0,ta=void 0,da=void 0,sb=8>xa||!S?xa:8,Gb=Va.createImageData(w.Hc,w.Ic),ca=0;256>ca;ca++){for(da=
            0;da<xa;da++)for(var Za=w.qh&&I&1&&da>=xa-2,$a=qa[da<sb?Z+ca*sb+da:S+ca*sb+da-sb],Ha=0;Ha<=T;Ha++)for(ta=0;ta<X;ta++){var Ad=ta<<T,bd=(da<<T)+Ha,Kc=Za||$a&128>>(8<=ta&&192<=ca&&223>=ca?7:ta)?J:Sa;Mk(Gb,Ad,bd,Kc);T&&Mk(Gb,Ad+1,bd,Kc)}Va.putImageData(Gb,(ca&15)*w.Hc,(ca>>4)*w.Ic)}w.mg[I]="#"+h(J[0],2)+h(J[1],2)+h(J[2],2);w.mn[I]=J;w.Hk[I]=Fb;w=!0}}a.Ue[b]=K;return w}function Nk(a){0<a.Gf||0<=a.pd?0>a.Hf&&(a.Hf=0):a.Hf=-1}
            function Ik(a){if(a.ac){for(var b=10;15>=b;b++)if(null==a.Va.Ib[b])return;var c=a.Va.Ib[10],b=c&31,d=a.Va.Ib[11]&31,e=a.Va.Ib[9]&31,g=!1;a.Va===a.W&&(g=!0,7!=e||4!=b||d||(d=7));if(c&32||b>d&&!g||b>e)Ok(a);else{c=a.Va.Ib[15]+((a.Va.Ib[14]&63)<<8);a.pd!=c&&(Ok(a),a.pd=c);d=d-b+1;if(a.ap!=b||a.In!=d)a.ap=b,a.In=d;a.gf=e+1;Nk(a)}}}
            function Ok(a){if(0<=a.pd){if(void 0!==a.Nc){var b=a.Nc[a.pd];if(b&131072){var b=b&-131073,c=a.pd%a.sb,d=a.pd/a.sb|0;a.ac&&a.Ue[a.ac]&&(a.wg&&Pk(a,c,d,b,a.wg),Pk(a,c,d,b));a.Nc[a.pd]=b}}a.pd=-1}}
            function Qk(a){var b;a=a.Va;var c=a.Zf[5];if(null!=c){b=1024;var d=0,e=a.Zf[3]&31;switch(c&3){case 0:if(e){d=32;switch(e&24){case 8:d=96;break;case 16:d=160;break;case 24:d=224}a.he=e&7}break;case 1:d=1;break;case 2:switch(e&24){default:d=2;break;case 8:d=98;break;case 16:d=162;break;case 24:d=226}}c&8&&(b=1280);a=a.fh[4];null==a||a&4||(b|=4096,d|=16);b|=d}return b}f.Sd=function(a){var b=this.Va;b&&null!=a&&a!=b.lj&&(b.Bk(a),this.ma.Bk(b.Ya,b.dc,b.ul()))};
            function Hk(a,b){var c,d=a.Fe,e=a.Va;if(e)if(e.$a==Tj)d=Vj;else if(5<=e.$a){var d=null,g=e.Zd>>2,l=32768<g?32768:g,p=e.Zf[6];if(null!=p){switch(p&12){case 0:e.Ya=655360;e.dc=g;d=255;break;case 4:e.Ya=655360;e.dc=g;d=3==a.Qd?15:16;break;case 8:e.Ya=720896;e.dc=l;d=Vj;break;case 12:e.Ya=753664,e.dc=l,d=3==a.Qd?2:3}c=e.fh[1]&8;g=e.Ib[6];g|=e.Ib[7]&1?256:0;7==e.$a&&(g|=e.Ib[7]&32?512:0);255!=d&&(p&1?753664==e.Ya?d=c?7-d:6:500>g?350>g&&(d=c?13:14):d=3==a.Qd?17:18:c&&(d-=2));c=Qk(a)}}else e.cd&8&&(e.cd&
            2?(d=e.cd&16?6:5,e.cd&4||--d):(d=e.cd&1?3:1,e.cd&4&&--d));else a.Fe=null,null==d&&(d=a.Pd);if(!Gk(a,d,b))return!1;a.Sd(c);return!0}
            function Gk(a,b,c){if(null!=b&&(b!=a.Fe||c)){a.gp=0;a.Fe=b;b=a.Va||(b==Vj?a.Kd:a.ic);if(b!=a.Va||b.Ya!=a.Ya||b.dc!=a.dc){Ok(a);if(a.Ya){if(!jc(a.ma,a.Ya,a.dc))return!1;a.Va&&(a.Va.Yc=!1)}a.Va=b;b.Yc=!0;a.Ya=b.Ya;a.dc=b.dc;if(!ec(a.ma,b.Ya,b.dc,3,b===a.W?b:null))return!1}a.ac=0;a.sb=a.oj;a.Dc=a.Km;a.pj=a.sb;a.nj=Uj[Vj][2];a.Eh=0;if(b=Uj[a.Fe])a.sb=b[0],a.Dc=b[1],a.nj=b[2],a.Eh=b[3]||0,a.ac=b[4],4!=a.Qd&&7!=a.Qd||a.Va!==a.W||3!=a.ac||(7==a.W.Ib[9]?a.Dc=43:a.ac=a.$a);a.po=a.sb*a.Dc|0;a.mj=a.po/a.nj|
            0;a.Zk=(a.mj<<1)+a.Eh|0;a.Dn=a.Eh?a.Zk+a.Eh>>1:0;13<=a.Fe&&(a.mj<<=1);if(a.Ue.length){a.te=a.be/a.sb|0;a.ve=a.ue/a.Dc|0;if(a.ac){b=a.Ue[a.ac];var d=a.Ue[a.ac<<1];a.Dp&&80==a.sb?d&&a.te>=3*d.Hc>>2&&(a.ac<<=1,b=d):(d&&a.te>=d.Hc&&(a.ac<<=1,b=d),b&&(a.te=b.Hc,a.ve=b.Ic));a.Jh=a.Kh=0;b&&(a.Jh=a.sb*b.Hc,a.Kh=a.Dc*b.Ic)}else a.te=a.ve=1,a.Jh=a.sb,a.Kh=a.Dc;a.ij=a.md.createImageData(a.Jh,a.Kh);a.tg=window.document.createElement("canvas");a.tg.width=a.Jh;a.tg.height=a.Kh;a.wg=a.tg.getContext("2d");a.bn=a.cn=
            0;a.dl=a.be;a.el=a.ue;b=a.be-a.sb*a.te;d=a.ue-a.Dc*a.ve;0<b&&(a.bn=b>>1,a.dl-=b);0<d&&(a.cn=d>>1,a.el-=d);if(b||d)a.md.fillStyle=a.Jd.style.backgroundColor,a.md.fillRect(0,0,a.be,a.ue)}!1!==c?ed(a,!0):Rk(a,!0)}return!0}function Mk(a,b,c,d){b=(b+c*a.width)*d.length;a.data[b]=d[0];a.data[b+1]=d[1];a.data[b+2]=d[2];a.data[b+3]=d[3]}function Rk(a,b){a.Gf=-1;a.Qf=!1;if(b){var c=a.mj;if(void 0===a.Nc||a.Nc.length!=c){a.Nc=Array(c);for(var d=0;d<c;d++)a.Nc[d]=-1}}}
            function Pk(a,b,c,d,e){var g=d&255,l=d>>8;d=l&15;var p=a.Ue[a.ac];p.qh&&(d=p.qh[d]);var v=l>>4&15;p.qh&&(v=p.qh[v]);e?(b*=p.Hc,c*=p.Ic,e.fillStyle=p.mg[v],e.fillRect(b,c,p.Hc,p.Ic)):(b=b*a.te+a.bn,c=c*a.ve+a.cn,a.md.fillStyle=p.mg[v],a.md.fillRect(b,c,a.te,a.ve));l&256&&(v=(g&15)*p.Hc,g=(g>>4)*p.Ic,e?e.drawImage(p.Hk[d],v,g,p.Hc,p.Ic,b,c,p.Hc,p.Ic):a.md.drawImage(p.Hk[d],v,g,p.Hc,p.Ic,b,c,a.te,a.ve));l&512&&(g=a.ap,l=a.In,e?(a.gf&&a.gf!==p.Ic&&(g=g*p.Ic/a.gf|0,l=l*p.Ic/a.gf|0),e.fillStyle=p.mg[d],
            e.fillRect(b,c+g,p.Hc,l)):(a.gf&&a.gf!==a.ve&&(g=g*a.ve/a.gf|0,l=l*a.ve/a.gf|0),a.md.fillStyle=p.mg[d],a.md.fillRect(b,c+g,a.te,l)))}
            function ed(a,b){if(a.fa.jc){var c=!1,d=a.Va;d&&(d!==a.W?d.cd&8&&(c=!0):d.Ie&32&&(c=!0));if(c||b){if(b)Rk(a,!0);else if(void 0===a.Nc)return;var e=!1;!(b||++a.gp&15)&&0<=a.Hf&&(a.Hf++,e=!0);var g=0,l=a.po,c=d.Ya,p=c+d.dc;Sk(a,d)&8&&(d.fi=(d.Ib[12]<<8)+d.Ib[13]|0);var v=d.fi;a.ac&&(v<<=1);c+=v;v=a.Zk;5<=a.$a&&d.Ib[19]&&(a.pj=d.Ib[19]<<(a.ac?1:4),v=((a.pj*(a.Dc-1)+a.sb)/a.nj<<1)+a.Eh|0);c+v>p&&(v=p-c,0>v&&(v=0));p=c+v;if(d=!b){for(var d=a.ma,w=!0,F=c>>>d.Ca;0<v&&F<d.na.length;)d.na[F].Ta&&(d.na[F].Ta=
            w=!1,d.na[F].On=!0),v-=d.nb,F++;d=w}if(d){if(!e)return;if(!a.Gf){if(0>a.pd)return;g=a.pd;l=g+1}}if(a.ac){if(a.Ue[a.ac]){e=0;d=a.Gf=0;v=1048575;a.Va.cd&32&&(d=32768,v&=~d,a.Hf&2||(v&=-65537));for(c+=g<<1;c<p&&g<l;)w=kc(a.ma,c),w|=65536,w&d&&(a.Gf++,w&=v),g==a.pd&&(w|=a.Hf&1?131072:0),a.Qf&&w===a.Nc[g]||(Pk(a,g%a.sb,g/a.sb|0,w,a.wg),a.Nc[g]=w,e++),c+=2,g++;a.Qf=!0;e&&a.wg&&a.md.drawImage(a.tg,0,0,a.Jh,a.Kh,a.bn,a.cn,a.dl,a.el);Nk(a)}}else if(a.Dn){for(var l=p,K,g=c,p=a.Gf=0,e=a.nj,d=16==e?65536:196608,
            v=16==e?1:2,w=Jk(a,v),J=F=0,I=a.sb,T=0,Z=a.Dc,S=0;g<l;){K=kc(a.ma,g);if(a.Qf&&K===a.Nc[p])F+=e;else{a.Nc[p]=K;K=K>>8|(K&255)<<8;var X=d,xa=16;F<I&&(I=F);for(var qa=0;qa<e;qa++){var Sa=(K&(X>>=v))>>(xa-=v);Mk(a.ij,F++,J,w[Sa])}F>T&&(T=F);J<Z&&(Z=J);J>=S&&(S=J+1)}g+=2;p++;if(F>=a.sb){F=0;J+=2;if(J>a.Dc)break;J==a.Dc&&(J=1,g=c+a.Dn)}}a.Qf=!0;I<a.sb&&(a.wg.putImageData(a.ij,0,0,I,Z,T-I,S-Z),a.md.drawImage(a.tg,0,0,a.sb,a.Dc,0,0,a.be,a.ue))}else{l=p;g=a.Gf=0;p=Jk(a);e=a.Va.Ud;v=d=0;w=a.sb;F=0;J=a.Dc;I=
            0;T=a.Va.He[19]&15;for(Z=a.pj>a.sb?a.pj-a.sb-T>>3:0;c<l;){S=c++-a.Ya;S=e[S];X=8;T?d?(K=a.sb-d,X>K&&(X=K)):(S<<=T,X-=T,a.Qf=!1):(a.Qf&&S===a.Nc[g]?(d+=X,X=0):a.Nc[g]=S,g++);if(X){d<w&&(w=d);for(K=0;K<X;K++)xa=gk[S&-2139062144]||0,Mk(a.ij,d++,v,p[xa]),S<<=1;d>F&&(F=d);v<J&&(J=v);v>=I&&(I=v+1)}if(d>=a.sb){d=0;if(++v>a.Dc)break;c+=Z}}T||(a.Qf=!0);w<a.sb&&(a.wg.putImageData(a.ij,0,0,w,J,F-w,I-J),a.md.drawImage(a.tg,0,0,a.sb,a.Dc,0,0,a.be,a.ue))}}}}
            function Sk(a,b){var c=0,d=cd(a.O)-b.uo;0>d&&(d=0);d%b.Cl>b.Yq&&(c|=1);d%b.so>b.$q&&(c|=9);return c}f.qq=function(a,b){return Tk(this,this.Kd,a,b)};f.Tr=function(a,b,c){var d=this.Kd;d.ok=d.uc;d.uc=b&31;m(this,a,b,c,"CRTC.INDX")};f.pq=function(a,b){return Uk(this,this.Kd,a,b)};f.Sr=function(a,b,c){Vk(this,this.Kd,a,b,c)};f.rq=function(a,b){return Wk(this,this.Kd,b)};f.Ur=function(a,b,c){a=this.Kd;m(this,a.port+4,b,c,"MODE");a.cd=b;Hk(this,!1)};f.sq=function(a,b){return Xk(this,this.Kd,b)};
            f.Co=function(a,b,c){this.W.mi=this.W.mi&-4|b&3;m(this,a,b,c,"FEAT")};f.ho=function(a,b){var c=this.W.ce?this.W.He[this.W.Ie&31]:this.W.Ie;b&&!this.qa()||m(this,960,null,b,"ATC."+(this.W.ce?this.W.Ok[this.W.Ie&31]:"INDX"),c);this.W.ce=!this.W.ce;return c};
            f.Bo=function(a,b,c){var d=this.W.Ie&32;if(this.W.ce){var e=this.W.Ie&31;if(16<=e||!d)c&&!this.qa()||m(this,a,b,c,"ATC."+this.W.Ok[e]),this.W.He[e]=b;this.W.ce=!1}else this.W.Ie=b,m(this,a,b,c,"ATC.INDX"),this.W.ce=!0,b&32&&!d&&Fk(this)&&ed(this,!0),this.W.fi=(this.W.Ib[12]<<8)+this.W.Ib[13]|0};
            f.Cq=function(a,b){var c=0;if(5==this.$a)c=3-((this.W.dh&12)>>2),c=(this.Ji&1<<c)<<4-c;else{var d=this.W.li[0];45!=(d&63)&&2880!=(d&4032)&&184320!=(d&258048)&&(c|=16)}c|=this.W.vk&-17;this.W.vk=c;m(this,962,null,b,"STATUS0",c);return c};f.Vr=function(a,b,c){this.W.dh=b;Ek(this);m(this,962,b,c,"MISC")};f.Dq=function(a,b){var c=this.W.Sm;m(this,963,null,b,"VGA_ENABLE",c);return c};f.fs=function(a,b,c){this.W.Sm=b;m(this,963,b,c,"VGA_ENABLE")};
            f.Bq=function(a,b){var c=this.W.Ke;m(this,964,null,b,"SEQ.INDX",c);return c};f.ds=function(a,b,c){this.W.Ke=b;m(this,964,b,c,"SEQ.INDX")};f.Aq=function(a,b){var c=this.W.fh[this.W.Ke];b&&!this.qa()||m(this,965,null,b,"SEQ"+this.W.Qk[this.W.Ke],c);return c};f.cs=function(a,b,c){c&&!this.qa()||m(this,965,b,c,"SEQ."+this.W.Qk[this.W.Ke]);this.W.fh[this.W.Ke]=b;switch(this.W.Ke){case 2:this.W.tb=fk[b&15];break;case 4:this.Sd(Qk(this))}};
            f.dq=function(a,b){var c=this.W.Pm;b&&!this.qa()||m(this,966,null,b,"DAC.MASK",c);return c};f.Fr=function(a,b,c){c&&!this.qa()||m(this,966,b,c,"DAC.MASK");this.W.Pm=b};f.eq=function(a,b){var c=this.W.rk;b&&!this.qa()||m(this,967,null,b,"DAC.STATE",c);return c};f.Gr=function(a,b,c){c&&!this.qa()||m(this,967,b,c,"DAC.READ");this.W.vd=b;this.W.rk=3;this.W.vc=0};f.Hr=function(a,b,c){c&&!this.qa()||m(this,968,b,c,"DAC.WRITE");this.W.vd=b;this.W.rk=0;this.W.vc=0};
            f.cq=function(a,b){var c=this.W.li[this.W.vd]>>this.W.vc&63;b&&!this.qa()||m(this,969,null,b,"DAC.DATA["+k(this.W.vd)+"]["+k(this.W.vc)+"]",c);this.W.vc+=6;12<this.W.vc&&(this.W.vc=0,this.W.vd=this.W.vd+1&255);return c};f.Er=function(a,b,c){a=this.W.li[this.W.vd];c&&!this.qa()||m(this,969,b,c,"DAC.DATA["+k(this.W.vd)+"]["+k(this.W.vc)+"]");this.W.li[this.W.vd]=a&~(63<<this.W.vc)|(b&63)<<this.W.vc;this.W.vc+=6;12<this.W.vc&&(this.W.vc=0,this.W.vd=this.W.vd+1&255)};
            f.Eq=function(a,b){var c=this.W.mi;m(this,970,null,b,"FEAT",c);return c};f.Or=function(a,b,c){this.W.Ko=b;m(this,970,b,c,"GRC2")};f.Fq=function(a,b){var c=this.W.dh;m(this,972,null,b,"MISC",c);return c};f.Nr=function(a,b,c){this.W.Jo=b;m(this,972,b,c,"GRC1")};f.jq=function(a,b){var c=this.W.Je;m(this,974,null,b,"GRC.INDX",c);return c};f.Mr=function(a,b,c){this.W.Je=b;m(this,974,b,c,"GRC.INDX")};
            f.iq=function(a,b){var c=this.W.Zf[this.W.Je];b&&!this.qa()||m(this,975,null,b,"GRC."+this.W.Pk[this.W.Je],c);return c};
            f.Lr=function(a,b,c){c&&!this.qa()||m(this,975,b,c,"GRC."+this.W.Pk[this.W.Je]);this.W.Zf[this.W.Je]=b;switch(this.W.Je){case 0:this.W.hk=fk[b&15];this.W.Wf=this.W.hk&~this.W.sf;break;case 1:this.W.sf=~fk[b&15];this.W.Wf=this.W.hk&~this.W.sf;break;case 2:this.W.Al=fk[b&15]&-2139062144;break;case 3:case 5:this.Sd(Qk(this));break;case 4:this.W.Jm=(b&3)<<3;break;case 6:Hk(this,!1);break;case 7:this.W.Bl=fk[b&15]&-2139062144;break;case 8:this.W.Cb=b|b<<8|b<<16|b<<24}};
            f.Yp=function(a,b){return Tk(this,this.ic,a,b)};f.yr=function(a,b,c){var d=this.ic;d.ok=d.uc;d.uc=b&31;m(this,a,b,c,"CRTC.INDX")};f.Xp=function(a,b){return Uk(this,this.ic,a,b)};f.xr=function(a,b,c){Vk(this,this.ic,a,b,c)};f.Zp=function(a,b){return Wk(this,this.ic,b)};f.zr=function(a,b,c){a=this.ic;m(this,a.port+4,b,c,"MODE");a.cd=b;Hk(this,!1)};f.Wp=function(a,b){var c=this.ic.$g;b&&!this.qa()||m(this,a,null,b,this.ic.type+".COLOR",c);return c};
            f.wr=function(a,b,c){c&&!this.qa()||m(this,a,b,c,this.ic.type+".COLOR");this.ic.$g!==b&&(this.ic.$g=b,Rk(this))};f.$p=function(a,b){return Xk(this,this.ic,b)};function Tk(a,b,c,d){var e;b.Yc&&(e=b.uc);m(a,c,null,d,"CRTC.INDX",e);return e}function Uk(a,b,c,d){var e;b.Yc&&b.uc<b.zl&&(e=b.Ib[b.uc]);d&&!a.qa()||m(a,c,null,d,"CRTC."+b.Fi[b.uc],e);return e}
            function Vk(a,b,c,d,e){b.uc<b.zl&&(e&&!a.qa()||m(a,c,d,e,"CRTC."+b.Fi[b.uc]),b.Ib[b.uc]=d,(12==b.uc||13==b.uc)&&Sk(a,b)&1&&(b.fi=(b.Ib[12]<<8)+b.Ib[13]|0),9==b.uc&&8!=b.ok&&Hk(a,!0),Ik(a))}function Wk(a,b,c){var d=b.cd;m(a,b.port+4,null,c,"MODE",d);return d}function Xk(a,b,c){var d=Sk(a,b);b===a.W?(d|=b.wa&48^48,b.ce=!1):d=(b.wa^=9)|240;b.wa=d;m(a,b.port+6,null,c,b===a.W?"STATUS1":"STATUS",d);return d}
            var uk={948:Y.prototype.qq,949:Y.prototype.pq,952:Y.prototype.rq,954:Y.prototype.sq},vk={948:Y.prototype.Tr,949:Y.prototype.Sr,952:Y.prototype.Ur},wk={980:Y.prototype.Yp,981:Y.prototype.Xp,984:Y.prototype.Zp,985:Y.prototype.Wp,986:Y.prototype.$p},xk={980:Y.prototype.yr,981:Y.prototype.xr,984:Y.prototype.zr,985:Y.prototype.wr},yk={960:Y.prototype.ho,961:Y.prototype.ho,962:Y.prototype.Cq,964:Y.prototype.Bq,965:Y.prototype.Aq,974:Y.prototype.jq,975:Y.prototype.iq},zk={954:Y.prototype.Co,960:Y.prototype.Bo,
            961:Y.prototype.Bo,962:Y.prototype.Vr,964:Y.prototype.ds,965:Y.prototype.cs,970:Y.prototype.Or,972:Y.prototype.Nr,974:Y.prototype.Mr,975:Y.prototype.Lr,986:Y.prototype.Co},Ak={963:Y.prototype.Dq,966:Y.prototype.dq,967:Y.prototype.eq,969:Y.prototype.cq,970:Y.prototype.Eq,972:Y.prototype.Fq},Bk={963:Y.prototype.fs,966:Y.prototype.Fr,967:Y.prototype.Gr,968:Y.prototype.Hr,969:Y.prototype.Er};
            Pa(function(){for(var a=kb(window.document,"pcjs","video"),b=0;b<a.length;b++){var c=a[b],d=ib(c),e=window.document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=
            function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());c.appendChild(e);var g=window.document.createElement("textarea");Ia("iOS")&&(g.setAttribute("autocapitalize","off"),g.setAttribute("autocorrect","off"));c.appendChild(g);var l=e.getContext("2d"),d=new Y(d,e,l,g,c);jb(d,c)}});
            function Yk(a){this.co=a.adapter;switch(this.co){case 1:this.Mm=1016;this.ci=4;break;case 2:this.Mm=760;this.ci=3;break;default:Ba("Unrecognized serial adapter #"+this.co);return}this.ef=null;Ua.call(this,"SerialPort",a,Yk,4194304);var b=a.binding,c;a=Zk;b&&(void 0===c&&(c="Panel"),(c=hb(c,this.id))&&(b=c.va[b])&&this.Nb(null,a,b))}eb(Yk);var Zk="buffer";f=Yk.prototype;f.qn=function(a,b){return a==this.Lg?(this.of=b,this):null};
            f.Nb=function(a,b,c){var d=this;switch(b){case Zk:return this.va[b]=this.ef=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;8===b&&(a.preventDefault&&a.preventDefault(),$k(d,[b]))},c.onkeypress=function(a){a=a||window.event;$k(d,[a.which||a.keyCode])},!0}return!1};f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;this.ja=xb(a,"ChipSet");oc(b,this,al,this.Mm);sc(b,this,bl,this.Mm);ob(this)};f.lc=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
            f.kc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.mf()};f.save=function(){var a=new Je(this),b=0,c=[];c[b++]=this.Vk;c[b++]=this.wn;c[b++]=this.hg;c[b++]=this.Ki;c[b++]=this.$e;c[b++]=this.Id;c[b++]=this.Xd;c[b++]=this.jd;c[b++]=this.tn;c[b]=this.uh;a.set(0,c);return a.data()};f.restore=function(a){return this.mf(a[0])};
            f.mf=function(a){var b=0;void 0===a&&(a=[0,0,384,0,1,0,0,96,48,[]]);this.Vk=a[b++];this.wn=a[b++];this.hg=a[b++];this.Ki=a[b++];this.$e=a[b++];this.Id=a[b++];this.Xd=a[b++];this.jd=a[b++];this.tn=a[b++];this.uh=a[b];return!0};function $k(a,b){a.uh=a.uh.concat(b);cl(a)}function cl(a){0<a.uh.length&&!(a.jd&1)&&(a.Vk=a.uh.shift(),a.jd|=1);var b=-1;a.jd&1&&a.Ki&1&&(b=4);0<=b?(a.$e&=-8,a.$e|=b,a.ja&&a.ci&&Xi(a.ja,a.ci,100)):(a.$e|=1,a.ja&&a.ci&&Yi(a.ja,a.ci))}
            f.zq=function(a,b){var c=this.Id&128?this.hg&255:this.Vk;m(this,a,null,b,this.Id&128?"DLL":"RBR",c);this.jd&=-2;cl(this);return c};f.kq=function(a,b){var c=this.Id&128?this.hg>>8:this.Ki;m(this,a,null,b,this.Id&128?"DLM":"IER",c);return c};f.lq=function(a,b){var c=this.$e;m(this,a,null,b,"IIR",c);return c};f.mq=function(a,b){var c=this.Id;m(this,a,null,b,"LCR",c);return c};f.oq=function(a,b){var c=this.Xd;m(this,a,null,b,"MCR",c);return c};
            f.nq=function(a,b){var c=this.jd;m(this,a,null,b,"LSR",c);return c};f.tq=function(a,b){var c=this.tn;m(this,a,null,b,"MSR",c);return c};f.es=function(a,b,c){m(this,a,b,c,this.Id&128?"DLL":"THR");this.Id&128?this.hg=this.hg&-256|b:(this.wn=b,this.jd&=-97,this.ef?(13!=b&&(8==b?this.ef.value=this.ef.value.slice(0,-1):(this.ef.value+=String.fromCharCode(b),this.ef.scrollTop=this.ef.scrollHeight)),a=!0):a=!1,a&&(this.jd|=96))};
            f.Pr=function(a,b,c){m(this,a,b,c,this.Id&128?"DLM":"IER");this.Id&128?this.hg=this.hg&255|b<<8:this.Ki=b};f.Qr=function(a,b,c){m(this,a,b,c,"LCR");this.Id=b};
            f.Rr=function(a,b,c){var d=this.Xd;m(this,a,b,c,"MCR");this.Xd=b;this.of&&(d^b)&3&&(a=this.of,b=this.Xd,(c=3==(b&3))?a.Yc||(d=!1,a.Xd&2||(a.reset(),a.ab("serial mouse reset"),d=!0),a.Xd&1||(a.ab("serial mouse ID requested"),d=!0),d&&($k(a.Fh,[77,77]),a.ab("serial mouse ID sent")),dl(a),a.setActive(c)):a.Yc&&(a.ab("serial mouse inactive"),el(a),a.setActive(c)),a.Xd=b)};
            var al={0:Yk.prototype.zq,1:Yk.prototype.kq,2:Yk.prototype.lq,3:Yk.prototype.mq,4:Yk.prototype.oq,5:Yk.prototype.nq,6:Yk.prototype.tq},bl={0:Yk.prototype.es,1:Yk.prototype.Pr,3:Yk.prototype.Qr,4:Yk.prototype.Rr};Pa(function(){for(var a=kb(window.document,"pcjs","serial"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new Yk(d);jb(d,c)}});function fl(a){Ua.call(this,"Mouse",a,fl,33554432);if(this.vl=a.serial)this.Tm="SerialPort";this.setActive(!1);this.Nh=this.cj=!1;this.Cd=[];this.ng=[];ob(this)}eb(fl);
            f=fl.prototype;f.Kc=function(a,b,c,d){this.Fa=a;this.ma=b;this.O=c;this.Y=d;for(b=null;b=xb(a,"Video",b);)this.Cd.push(b)};f.setActive=function(a){this.Yc=a};
            f.lc=function(a,b){if(!b){if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;if(this.Tm&&!this.Fh){for(var c=null;(c=xb(this.Fa,this.Tm,c))&&(!c.qn||!(this.Fh=c.qn(this.vl,this))););if(this.Fh)for(this.ng=[],c=0;c<this.Cd.length;c++){var d;d=this.Cd[c];d.of=this;(d=d.Za)&&this.ng.push(d)}else Ba(this.id+": "+this.Tm+" "+this.vl+" unavailable")}this.Yc?dl(this):el(this)}return!0};f.kc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.mf()};
            f.save=function(){var a=new Je(this);a.set(0,this.Ym());return a.data()};f.restore=function(a){return this.mf(a[0])};f.mf=function(a){var b=0;void 0===a&&(a=[!1,-1,-1,0,0,!1,!1,0]);this.setActive(a[b++]);this.Pe=a[b++];this.Qe=a[b++];this.ig=a[b++];this.jg=a[b++];this.Zi=a[b++];this.$i=a[b++];this.Xd=a[b];return!0};f.Ym=function(){var a=0,b=[];b[a++]=this.Yc;b[a++]=this.Pe;b[a++]=this.Qe;b[a++]=this.ig;b[a++]=this.jg;b[a++]=this.Zi;b[a++]=this.$i;b[a]=this.Xd;return b};f.hi=function(a){this.cj=a};
            function dl(a){if(!a.Nh)for(var b=0;b<a.ng.length;b++)gl(a,a.ng[b])&&(a.Nh=!0)}function el(a){if(a.Nh)for(var b=0;b<a.ng.length;b++){var c=a.ng[b];c&&(c.style.cursor="auto")}}function gl(a,b){return b?(b.addEventListener("mousemove",function(b){a.lo(b)},!1),b.addEventListener("mousedown",function(b){a.bl(b.button,!0)},!1),b.addEventListener("mouseup",function(b){a.bl(b.button,!1)},!1),b.style.cursor="none",!0):!1}
            f.lo=function(a){if(this.Yc&&this.O&&this.O.fa.qb){if(0>this.Pe||0>this.Qe)this.Pe=a.clientX,this.Qe=a.clientY;this.cj?(this.ig=a.movementX||a.mozMovementX||a.webkitMovementX||0,this.jg=a.movementY||a.mozMovementY||a.webkitMovementY||0):(this.ig=a.clientX-this.Pe,this.jg=a.clientY-this.Qe);(this.ig||this.jg)&&hl(this,null,a.clientX,a.clientY);this.Pe=a.clientX;this.Qe=a.clientY}};
            f.bl=function(a,b){if(this.Yc&&this.O&&this.O.fa.qb){var c;!(c=!1!==this.cj)&&(c=this.Cd.length)&&(c=this.Cd[0],c=c.yp?c.Tf(!0):!1);c||(this.cj=null);c="mouse button"+a+" "+(b?"dn":"up");switch(a){case 0:this.Zi!=b&&(this.Zi=b,hl(this,c));break;case 2:this.$i!=b&&(this.$i=b,hl(this,c))}}};
            function hl(a,b,c,d){var e=64|(a.Zi?32:0)|(a.$i?16:0)|(a.jg&192)>>4|(a.ig&192)>>6,g=a.ig&63,l=a.jg&63;a.qa(4194304)&&a.ab((b?b+": ":"")+(void 0!==d?"mouse ("+c+","+d+"): ":"")+"serial packet ["+k(e)+","+k(g)+","+k(l)+"]",0,!0);$k(a.Fh,[e,g,l]);a.ig=a.jg=0}Pa(function(){for(var a=kb(window.document,"pcjs","mouse"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new fl(d);jb(d,c)}});
            function il(a,b,c){Ua.call(this,"Disk",{id:a.fo+".disk"+ ++jl},il,2097152);this.Z=a;this.Fa=a.Fa;this.Y=a.Y;this.Sa=b;this.ke=b.name;this.Eg=b.Eg;this.dj=this.xe=!1;this.create(c,b.Eb,b.Fb,b.Mb,b.xb);this.Bf=[];this.yi=[];this.Me=null;this.no=0;this.sl=!1;ob(this)}var jl=0;eb(il);f=il.prototype;f.Kc=function(a,b,c,d){this.Y=d};f.lc=function(a,b){b||!this.dj||this.xe||(ob(this,!1),this.load(this.ke,this.bg,null,this.vp,this));return!0};f.vp=function(){ob(this,!0)};
            f.kc=function(a,b){if(this.xe){var c,d=0;if(this.sl&&!Ca("Disk writes are still in progress, shut down anyway?"))return!1;for(;c=kl(this,!1);)if(d=c[0]){this.Z.Da('Unable to save "'+this.ke+'" (error '+d+")");break}b&&this.xe&&(c="action=close&volume="+this.bg,c+="&machine="+this.Z.Hg(),c+="&user="+this.Z.kf(),za(Aa()+"/api/v1/disk?"+c,!0),this.xe=!1);!d&&a&&this.Z.Da(this.ke+" saved")}return!0};
            f.create=function(a,b,c,d,e){this.mode=a;this.Eb=b;this.Fb=c;this.Mb=d;this.xb=e;this.jb=[];if("preload"!=this.mode){a=Array(this.Eb);for(b=0;b<a.length;b++){c=Array(this.Fb);for(d=0;d<c.length;d++){e=Array(this.Mb);for(var g=1;g<=e.length;g++)e[g-1]=ll(null,b,d,g,this.xb,"local"==this.mode?0:null);c[d]=e}a[b]=c}this.jb=a}this.yg=null};
            f.load=function(a,b,c,d,e){var g=b;if(!this.Sf)if(this.ke=a,this.bg=b,this.Sf=d,this.pp=e||this.Z,c){var l=this,p=new FileReader;p.onload=function(){var a=p.result,b,c=a?a.byteLength:0,d=ea[c];if(d){l.Eb=d[0];l.Fb=d[1];l.Mb=d[2];l.xb=512;b=l.xb>>2;var e=d=0,a=new DataView(a,0,c);l.jb=Array(l.Eb);for(c=0;c<l.jb.length;c++)for(var g=l.jb[c]=Array(l.Fb),T=0;T<g.length;T++)for(var Z=g[T]=Array(l.Mb),S=0;S<Z.length;S++){for(var X=ll(null,c,T,S+1,l.xb,0),xa=X.data,qa=0;qa<b;qa++,e+=4)var Sa=xa[qa]=a.getInt32(e,
            !0),d=d+Sa&-1;X.Vc=b;Z[S]=X}l.yg=d;b=l}else l.Da("Unrecognized diskette format ("+c+" bytes)");l.Sf&&(l.Sf.call(l.Z,l.Sa,b,l.ke,l.bg),l.Sf=null)};p.readAsArrayBuffer(c)}else 0>b.indexOf("/api/v1/dump")&&(a=ia(b),"json"==a?g=encodeURI(b):"demandrw"==this.mode||"demandro"==this.mode?(g=ml(this,b),this.dj=!0):(c="path",d="&mbhd=10",!b.indexOf("http:")||!b.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(a)?(c="disk",d="&mbhd=0"):-1!==b.indexOf("/",b.length-1)&&(c="dir"),g=Aa()+"/api/v1/dump?"+
            c+"="+encodeURIComponent(b)+(this.Eg?"":d)+"&format=json")),za(g,!0,null,this,this.tp,b)};
            f.tp=function(a,b,c,d){var e=null;this.Gg=!1;var g=0>c&&this.Fa&&!this.Fa.fa.jc;if(this.dj)c?this.Z.Da('Unable to connect to disk "'+d+'" (error '+c+": "+b+")",g):(this.xe=!0,e=this);else if(c)this.Z.Da('Unable to load disk "'+this.ke+'" (error '+c+")",g);else try{if(0<ha(a,!0).toLowerCase().indexOf("-readonly"))this.Gg=!0;else{var l=b.indexOf("\n");0<l&&1024>l&&0<b.substring(0,l).indexOf("write-protected")&&(this.Gg=!0)}var p;p="<"==b.substr(0,1)?["Missing disk image: "+this.ke]:0>b.indexOf("0x")&&
            '["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");if(p.length)if(1==p.length)Ba(p[0]);else{this.Eb=p.length;this.Fb=p[0].length;this.Mb=p[0][0].length;var v=p[0][0][0];this.xb=v&&v.length||512;for(b=a=0;b<this.Eb;b++)for(c=0;c<this.Fb;c++)for(d=0;d<this.Mb;d++)if(v=p[b][c][d]){var w=v.length;void 0===w&&(w=v.length=512);var w=w>>2,F=v.pattern;void 0===F&&(F=v.pattern=0);var K=v.data;if(void 0===K){var J=v.bytes;if(void 0!==J&&J.length){for(var g=
            w<<2,I=J.length;I<g;I++)J[I]=F;this.fill(v,J,0)}else K=[],F=v.pattern=F|F<<8|F<<16|F<<24,v.data=K;delete v.bytes}ll(v,b,c);for(g=0;g<K.length;g++)a=a+K[g]&-1}this.jb=p;this.yg=a;e=this}else Ba("Empty disk image: "+this.ke)}catch(T){Ba("Disk image error: "+T.message)}this.Sf&&(this.Sf.call(this.pp,this.Sa,e,this.ke,this.bg),this.Sf=null)};function ll(a,b,c,d,e,g){a||(a={sector:d,length:e,data:[],pattern:g});a.Ip=b;a.Kp=c;a.Md=a.Vc=0;a.Ta=!1;return a}
            function ml(a,b){var c;c="action=open&volume="+b+("&mode="+a.mode);c+="&chs="+a.Eb+":"+a.Fb+":"+a.Mb+":"+a.xb;c+="&machine="+a.Z.Hg();c+="&user="+a.Z.kf();return Aa()+"/api/v1/disk?"+c}function nl(a,b,c,d,e,g,l){if(a.xe){var p;p="action=read&volume="+a.bg;p+="&chs="+a.Eb+":"+a.Fb+":"+a.Mb+":"+a.xb;p=p+("&addr="+b+":"+c+":"+d+":"+e)+("&machine="+a.Z.Hg());p+="&user="+a.Z.kf();za(Aa()+"/api/v1/disk?"+p,g,null,a,a.wp,[b,c,d,e,g,l])}else l&&l(-1,!1)}
            f.wp=function(a,b,c,d){var e=!1;a=d[0];var g=d[1],l=d[2],p=d[3];if(!c){b=JSON.parse(b);for(e=0;p--;){var v=this.seek(a,g,l,!0);if(!v)break;this.fill(v,b,e);e+=v.length;l++}e=d[4]}(d=d[5])&&d(c,e)};f.xp=function(a,b,c,d){a=d[0];b=d[1];var e=d[2],g=d[3];d=d[4];this.sl=!1;if(0<=a&&a<this.jb.length&&0<=b&&b<this.jb[a].length)for(--e;0<g--&&0<=e&&e<this.jb[a][b].length;e++){var l=this.jb[a][b][e];c?ol(this,l,!1):l.Ta||(l.Md=l.Vc=0)}d&&pl(this)};
            function ol(a,b,c){b.Ta=!0;var d=a.Bf.indexOf(b);0<=d&&(a.Bf.splice(d,1),a.yi.splice(d,1));a.Bf.push(b);a.yi.push(ra());c&&pl(a)}function pl(a){if(a.Bf.length){var b=a.yi[0]+2E3;a.Me&&a.no<b&&(clearTimeout(a.Me),a.Me=null);if(!a.Me){var c=ra(),b=b-c;0>b&&(b=0);2E3<b&&(b=2E3);a.Me=setTimeout(function(){kl(a,!0)},b);a.no=c+b}}else a.Me&&(clearTimeout(a.Me),a.Me=null)}
            function kl(a,b){b&&(a.Me=null);var c=a.Bf[0];if(c){for(var d=c.Ip,e=c.Kp,c=c.sector,g=0,l=[],p=c-1;p<a.jb[d][e].length;p++){var v=a.jb[d][e][p];if(!v.Ta)break;var w=a.Bf.indexOf(v);a.Bf.splice(w,1);a.yi.splice(w,1);l=l.concat(ql(v));v.Ta=!1;g++}a.xe?(p={},a.sl=!0,p.action="write",p.volume=a.bg,p.chs=a.Eb+":"+a.Fb+":"+a.Mb+":"+a.xb,p.addr=d+":"+e+":"+c+":"+g,p.machine=a.Z.Hg(),p.user=a.Z.kf(),p.data=JSON.stringify(l),d=za(Aa()+"/api/v1/disk",b,p,a,a.xp,[d,e,c,g,b])):d=!1;return b||d}return!1}
            f.info=function(){return this.jb.length?[this.jb.length,this.jb[0].length,this.jb[0][0].length,this.jb[0][0][0].length]:[0,0,0,0]};
            f.seek=function(a,b,c,d,e){var g=null,l=this.Sa,p=this.jb[a];if(p){var v=p[b];if(!v&&l.Sk&&b<l.Fb)for(v=p[b]=Array(l.af),p=0;p<v.length;p++)v[p]=ll(null,a,b,p+1,l.ob,0);if(v){for(p=0;p<v.length;p++)if(v[p]&&v[p].sector==c){g=v[p];if(null===g.pattern)if(d)g.pattern=0;else{for(d=1;++p<v.length;)null===v[p].pattern&&d++;nl(this,a,b,c,d,null!=e,function(a,b){a&&(g=null);e&&e(g,b)});return e?null:g}break}!g&&l.Sk&&9==l.eb&&(g=v[p]=ll(null,a,b,l.eb,l.ob,0))}}e&&e(g,!1);return g};
            f.fill=function(a,b,c){for(var d=a.length>>2,e=Array(d),g=0;g<d;g++)e[g]=b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24,c+=4;a.data=e};function ql(a){var b=a.length,c=Array(b),d=0,b=b>>2,e=a.data;a=a.pattern;for(var g=0;g<b;g++){var l=g<e.length?e[g]:a;c[d++]=l&255;c[d++]=l>>8&255;c[d++]=l>>16&255;c[d++]=l>>24&255}return c}function rl(a,b){var c=-1;if(a&&b<a.length)var c=a.data,d=b>>2,c=(d<c.length?c[d]:a.pattern)>>((b&3)<<3)&255;return c}
            f.write=function(a,b,c){if(this.Gg)return!1;if(b<a.length){if(c!=rl(a,b)){var d=a.data,e=a.pattern,g=b>>2;b=(b&3)<<3;for(var l=d.length;l<=g;l++)d[l]=e;a.Vc?g<a.Md?(a.Vc+=a.Md-g,a.Md=g):g>=a.Md+a.Vc&&(a.Vc+=g-(a.Md+a.Vc)+1):(a.Md=g,a.Vc=1);d[g]=d[g]&~(255<<b)|c<<b;this.xe&&ol(this,a,!0)}return!0}return null};
            f.save=function(){var a=0,b=[];b[a++]=[this.bg,this.yg,this.Eb,this.Fb,this.Mb,this.xb];if(!this.xe&&!this.Gg)for(var c=this.jb,d=0;d<c.length;d++)for(var e=0;e<c[d].length;e++)for(var g=0;g<c[d][e].length;g++){var l=c[d][e][g];if(l&&l.Vc){for(var p=[],v=0,w=l.Md,F=l.Md+l.Vc;w<F;)p[v++]=l.data[w++];b[a++]=[d,e,g,l.Md,p]}}return b};
            f.restore=function(a){var b=0,c="unsupported restore format";if(a&&0<a.length){var d=0,e=a[d++];e&&2<=e.length&&(!this.jb.length&&6<=e.length?this.create("local",e[2],e[3],e[4],e[5]):null!=e[1]&&null!=this.yg&&e[1]!=this.yg&&(c="original checksum ("+e[1]+") differs from current checksum ("+this.yg+")",b=-2));for(this.jb.length||(b=-1);d<a.length&&0<=b;){var g=0,l=a[d++],p=l[g++],v=l[g++],w=l[g++];if(p>=this.jb.length||v>=this.jb[p].length||w>=this.jb[p][v].length){c="sector (CHS="+p+":"+v+":"+w+") out of range ("+
            b+" changes applied)";b=-1;break}if(this.Gg){c="unable to modify write-protected disk";b=-1;break}e=l[g++];g=l[g++];l=e+g.length;if(p=this.jb[p][v][w]){for(v=p.data.length;v<e;)p.data[v++]=p.pattern;v=0;p.Md=e;for(p.Vc=g.length;e<l;)p.data[e++]=g[v++];b++}}}0>b&&-2!=b&&this.Z.Da("Unable to restore disk '"+this.ke+": "+c);return b};
            f.toJSON=function(){var a=JSON.stringify(this.jb),a=a.replace(/,"length":512/gm,"").replace(/,"pattern":0/gm,""),a=a.replace(/"(sector|length|data|pattern)":/gm,"$1:"),a=a.replace(/,"[^"]*":([0-9]+|true|false)/gm,"");return a=a.replace(/(sector|length|data|pattern):/gm,'"$1":')};
            function sl(a){Ua.call(this,"FDC",a,sl,524288);this.dmaRead=this.fl;this.dmaWrite=this.gl;this.dmaFormat=this.qp;this.Jf=null;if(a.autoMount&&(this.Jf=a.autoMount,"string"==typeof this.Jf))try{this.Jf=eval("("+a.autoMount+")")}catch(b){Ba("FDC auto-mount error: "+b.message+" ("+a.autoMount+")"),this.Jf=null}this.Oc=[];this.Sn=!Ia("Mobi")&&window&&"FileReader"in window}eb(sl);ba={};aa={};
            var tl={3:{se:3,df:0,name:aa.Kt},4:{se:2,df:1,name:aa.It},5:{se:9,df:7,name:aa.Wt},6:{se:9,df:7,name:aa.Ct},7:{se:2,df:0,name:aa.Et},8:{se:1,df:2,name:aa.Jt},10:{se:2,df:7,name:aa.Dt},13:{se:6,df:7,name:aa.ot},15:{se:3,df:0,name:aa.Ht}};f=sl.prototype;
            f.Nb=function(a,b,c){var d=this;switch(b){case "listDisks":return this.va[b]=c,c.onchange=function(){var a=d.va.descDisk,b=c.options[c.selectedIndex];if(a&&b){var l={};if(b=b.getAttribute("data-value"))try{l=eval("({"+b+"})")}catch(p){Ba("FDC option error: "+p.message)}b=l.desc;void 0===b&&(b="");l=l.href;void 0!==l&&(b='<a href="'+l+'" target="_blank">'+b+"</a>");a.innerHTML=b}},!0;case "descDisk":case "listDrives":return this.va[b]=c,c.onchange=function(){var a=fa(c.value,10);null!=a&&ul(d,a)},
            !0;case "loadDrive":return this.va[b]=c,c.onclick=function(){var a=d.va.listDisks;a&&vl(d,a.options[a.selectedIndex].text,a.value)},!0;case "mountDrive":return this.Sn?(this.va[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;vl(d,ha(b,!0),b,a)}return!1}):c.parentNode.removeChild(c),!0}return!1};
            f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;this.Fa=a;this.ja=xb(a,"ChipSet");this.ye();oc(b,this,wl);sc(b,this,xl);this.Sn&&yl(this,"Local Disk","?");yl(this,"Remote Disk","??");this.xh()||ob(this)};
            f.lc=function(a,b){if(!b){if(!a||!this.restore){if(this.reset(),this.Fa.ol){this.Oc=[];for(var c=0;c<this.Ea.length;c++)zl(this,c,!0);this.xh(!0)}}else if(!this.restore(a))return!1;if(c=this.va.listDrives){for(;c.firstChild;)c.removeChild(c.firstChild);c.textContent="";for(var d=0;d<this.Fl;d++){var e=window.document.createElement("option");e.value=d;e.textContent=String.fromCharCode(65+d)+":";c.appendChild(e)}0<this.Fl&&(c.value="0",ul(this,0))}}return!0};
            f.kc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.ye()};f.save=function(){var a=new Je(this);a.set(0,this.Vm());return a.data()};f.restore=function(a){return this.ye(a[0])};
            f.ye=function(a){var b=0,c,d=!0;void 0===a&&(a=[0,0,128,Array(9),0,0,0,[]]);this.rb=a[b++];b++;this.wa=a[b++];this.wc=a[b++];this.Jb=a[b++];this.pb=a[b++];this.eh=a[b++];var e=a[b++];c=a[b++];null!=c&&(this.Oc=c);void 0===this.Ea&&(this.Fl=4,this.ja&&(this.Fl=Ai(this.ja)),this.Ea=Array(4));for(c=0;c<this.Ea.length;c++){var g=this.Ea[c];if(void 0===g){var g=this.Ea[c]={},l;if(this.ja)a:{l=this.ja;if(c<Ai(l)){if(!l.Te){l=360;break a}if(c<l.Te.length){l=l.Te[c];break a}}l=0}else l=0;switch(l){case 160:case 180:g.Fb=
            1;default:g.Eb=40;g.Mb=9;break;case 720:g.Eb=80;g.Mb=9;break;case 1200:g.Eb=80;g.Mb=15;break;case 1440:g.Eb=80,g.Mb=18}}this.wl(g,c,e[c])||(d=!1)}this.wf=a[b++]||0;this.Io=a[b]||0;return d};f.Vm=function(){var a=0,b=[];b[a++]=this.rb;b[a++]=0;b[a++]=this.wa;b[a++]=this.wc;b[a++]=this.Jb;b[a++]=this.pb;b[a++]=this.eh;b[a++]=this.Xm();for(var c=a++,d=0;d<this.Ea.length;d++){var e=this.Ea[d];e.xa&&Al(this,e.cg,e.xa)}b[c]=this.Oc;b[a++]=this.wf;b[a]=this.Io;return b};
            f.wl=function(a,b,c){var d=0,e=!0;a.rb=b;a.$c=a.Cg=!1;void 0===c&&(c=[192,!0,0,2,0]);"boolean"==typeof c[1]&&(c[1]=["Floppy Drive",a.Eb||40,a.Fb||c[3],a.Mb||9,a.xb||512,c[1],a.qj,a.ai,a.bi]);a.ib=c[d++];var g=c[d++];a.name=g[0];a.Eb=g[1];a.Fb=g[2];a.Mb=g[3];a.xb=g[4];a.Eg=g[5];(a.qj=g[6])?(a.ai=g[7],a.bi=g[8]):(a.qj=a.Eb,a.ai=a.Fb,a.bi=a.Mb);a.Ra=c[d++];a.Ze=c[d++];a.Ab=c[d++];a.Ze=100<=a.Ze?a.Ze-100:a.Ze-a.Ab;a.eb=c[d++];a.af=c[d++];a.ob=c[d++];a.Ua=c[d++];a.Xa=null;a.xa||(a.cg="");var l=c[d++];
            102==l&&(l=!1);"boolean"==typeof l?(g=c[d++],c=c[d],l?(d=this.Ea[b],zl(this,b,!0,!0),d.Cg=!0,b=new il(this,d,"preload"),this.Kn(d,b,g,c,!0)):Bl(this,b,g,c,!0)?a.xa&&c&&Cl(this,g,c,a.xa):ob(this,!1)):void 0!==l&&a.xa&&0>a.xa.restore(l)&&(e=!1);e&&a.xa&&void 0!==a.Ua&&(a.Xa=a.xa.seek(a.Ab,a.Ra,a.eb));return e};f.Xm=function(){for(var a=0,b=[],c=0;c<this.Ea.length;c++)b[a++]=this.Wm(this.Ea[c]);return b};
            f.Wm=function(a){var b=0,c=[];c[b++]=a.ib;c[b++]=[a.name,a.Eb,a.Fb,a.Mb,a.xb,a.Eg,a.qj,a.ai,a.bi];c[b++]=a.Ra;c[b++]=a.Ze+100;c[b++]=a.Ab;c[b++]=a.eb;c[b++]=a.af;c[b++]=a.ob;c[b++]=a.Ua;c[b++]=a.Cg;c[b++]=a.Po;c[b]=a.cg;return c};f.Hn=function(a){var b;a=this.Ea[a];if(void 0!==a){b={};for(var c in a)b[c]=a[c]}return b};f.So=function(a,b,c){if(a.xa){var d=a.xa.info(),e=d[2],g=d[1]*e;if(b+c<=d[0]*g)return a.Ab=Math.floor(b/g),b%=g,a.Ra=Math.floor(b/e),a.eb=b%e+1,a.ob=c*d[3],a.ib=0,!0}return!1};
            f.xh=function(a){a||(this.Ff=0);if(this.Jf)for(var b in this.Jf){var c=this.Jf[b];if(c.name&&c.path){var d=b.charCodeAt(0)-65;if(0<=d&&d<this.Ea.length){!Bl(this,d,c.name,c.path,!0)&&a&&ob(this,!1);continue}}this.Da("Unrecognized auto-mount specification for drive "+b)}return!!this.Ff};
            function vl(a,b,c,d){var e,g=a.va.listDrives;if(g&&!isNaN(e=fa(g.value,10))&&0<=e&&e<a.Ea.length)if(c)if("?"==c)a.Da('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=ha(c);a.R("Attempting to load "+c+' as "'+b+'"')}for(a.R("loading disk "+c+"...");Bl(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){for(var g=a,l=c,p=
            void 0,p=0;p<g.Oc.length;p++)if(g.Oc[p][1]==l){g.Oc.splice(p,1);break}zl(a,e,!1,!0)}}else zl(a,e);else a.Da("Nothing to load")}function Bl(a,b,c,d,e,g){var l=a.Ea[b];if(d&&l.cg!=d){zl(a,b,e,!0);if(l.$c)return a.Da("Drive "+b+" busy"),!0;l.$c=!0;e&&(l.Pf=!0,a.Ff++,a.qa()&&a.ab("loading diskette '"+c+"'"));l.Cg=!!g;(new il(a,l,"preload")).load(c,d,g,a.Kn);return!1}return!0}
            f.Kn=function(a,b,c,d,e){var g;a.$c=!1;b&&(g=b.info(),b&&g[0]>a.Eb||g[1]>a.Fb)&&(this.Da('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.rb)),b=null);b?(a.xa=b,a.Po=c,a.cg=d,Cl(this,c,d,b),g=b.info(),this.wf|=128,this.Da('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.rb),a.Pf||e),a.qj=g[0],a.ai=g[1],a.bi=g[2]):a.Cg=!1;a.Pf&&(a.Pf=!1,--this.Ff||ob(this));ul(this,a.rb)};
            function yl(a,b,c){if(a=a.va.listDisks){for(var d=0;d<a.options.length;d++)if(a.options[d].value==c)return;d=window.document.createElement("option");d.value=c;d.textContent=b;a.appendChild(d)}}function ul(a,b){if(0<=b&&b<a.Ea.length){var c=a.Ea[b],d=a.va.listDisks,e=a.va.listDrives;if(d&&e&&(e=fa(e.value,10),c=c.Cg?"?":c.cg,!isNaN(e)&&e==b)){for(e=0;e<d.options.length;e++)if(d.options[e].value==c){d.selectedIndex!=e&&(d.selectedIndex=e);break}e==d.options.length&&(d.selectedIndex=0)}}}
            function zl(a,b,c,d){var e=a.Ea[b];e.xa&&(Al(a,e.cg,e.xa),e.Po="",e.cg="",e.xa=null,e.Cg=!1,a.wf|=128,d||a.Da("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||ul(a,b))}function Cl(a,b,c,d){var e;for(e=0;e<a.Oc.length;e++)if(a.Oc[e][1]==c){d.restore(a.Oc[e][2]);return}a.Oc[e]=[b,c,[]]}function Al(a,b,c){var d;for(d=0;d<a.Oc.length;d++)if(a.Oc[d][1]==b){a.Oc[d][2]=c.save();break}}f.Kr=function(a,b,c){m(this,a,b,c,"OUTPUT");b&4?this.eh&4||this.eh&8&&this.ja&&Xi(this.ja,6):this.ye();this.eh=b};
            f.hq=function(a,b){m(this,a,null,b,"STATUS",this.wa);return this.wa};f.fq=function(a,b){var c=0;this.Jb<this.pb&&(c=this.wc[this.Jb]);this.eh&8&&this.ja&&Yi(this.ja,6);this.qa()&&m(this,a,null,b,"DATA["+this.Jb+"]",c);++this.Jb>=this.pb&&(this.wa&=-81,this.Jb=this.pb=0);return c};
            f.Jr=function(a,b,c){this.qa()&&m(this,a,b,c,"DATA["+this.pb+"]");this.pb<this.wc.length&&(this.wc[this.pb++]=b);a=this.wc[0]&31;if(void 0!==tl[a]&&this.pb>=tl[a].se){b=!1;this.Jb=0;a=this.Wa();var d,e,g,l,p=a&31;switch(p){case 3:this.Wa(ba.Lt);this.Wa(ba.rt);this.gc();break;case 4:c=this.Wa(ba.mh);this.rb=c&3;d=this.Ea[this.rb];this.gc();this.sc((d.ib&-16777216)>>>24,ba.Ot);break;case 5:case 6:c=this.Wa(ba.mh);b=c>>2&1;this.rb=c&3;d=this.Ea[this.rb];d.Ra=b;c=d.Ab=this.Wa(ba.dn);e=this.Wa(ba.en);
            g=d.eb=this.Wa(ba.gn);l=this.Wa(ba.Fk);d.ob=128<<l;d.af=this.Wa(ba.mt);this.Wa(ba.cp);this.Wa(ba.lt);6==p?(p=d,p.ib=72,p.xa&&(p.Xa=null,p.ib=0,this.ja&&(Qi(this.ja,2,this,"dmaRead",p),Ji(this.ja,2)))):(p=d,p.ib=72,p.xa&&(p.xa.Gg?p.ib=576:(p.Xa=null,p.ib=0,this.ja&&(Qi(this.ja,2,this,"dmaWrite",p),Ji(this.ja,2)))));Dl(this,d,a,b,c,e,g,l);b=!0;break;case 7:c=this.Wa(ba.mh);this.rb=c&3;d=this.Ea[this.rb];d.Ab=d.Ze=0;d.ib=268435488;this.gc();b=!0;break;case 8:d=this.Ea[this.rb];d.Ra=0;this.gc();this.sc(d.rb|
            d.Ra<<2|d.ib&255,ba.ep);this.sc(d.Ab,ba.At);this.rb=this.rb+1&3;break;case 10:c=this.Wa(ba.mh);b=c>>2&1;this.rb=c&3;d=this.Ea[this.rb];c=d.Ab;e=d.Ra=b;g=d.eb=1;l=0;d.ib=0;d.xa&&(d.Xa=d.xa.seek(d.Ab,d.Ra,d.eb))?l=d.Xa.length:d.ib=72;Dl(this,d,a,b,c,e,g,l);b=!0;break;case 13:c=this.Wa(ba.mh);b=c>>2&1;this.rb=c&3;d=this.Ea[this.rb];c=d.Ab;e=d.Ra=b;g=1;l=this.Wa(ba.Fk);d.ob=128<<l;d.af=this.Wa(ba.Gt);this.Wa(ba.cp);d.sn=this.Wa(ba.bp);p=d;p.ib=72;p.xa&&(p.Xa=null,p.ib=0,this.ja&&(p.ug=0,p.hd=Array(4),
            p.Sk=!0,p.Ri=0,Qi(this.ja,2,this,"dmaFormat",p),Ji(this.ja,2),p.Sk=!1));Dl(this,d,a,b,c,e,g,l);b=!0;break;case 15:c=this.Wa(ba.mh),this.rb=c&3,d=this.Ea[this.rb],d.Ra=c>>2&1,c=this.Wa(ba.xt),d.Ab+=c-d.Ze,0>d.Ab&&(d.Ab=0),d.Ab>=d.Eb&&(d.Ab=d.Eb-1),d.Ze=c,d.ib=32,d.Ab||(d.ib|=268435456),this.gc(),b=!0}0<this.pb&&(this.wa|=80);this.eh&8&&(!d||d.ib&8||!b||this.ja&&Xi(this.ja,6))}};f.gq=function(a,b){var c=this.wf;this.wf&=-129;m(this,a,null,b,"INPUT",c);return c};
            f.Ir=function(a,b,c){m(this,a,b,c,"CONTROL");this.Io=b};function Dl(a,b,c,d,e,g,l,p){a.gc();a.sc(b.rb|b.Ra<<2|b.ib&255,ba.ep);a.sc((b.ib&65280)>>>8,ba.Mt);a.sc((b.ib&16711680)>>>16,ba.Nt);var v=0;if(e!=b.Ab||g!=b.Ra)v=l=1;c&128&&(g^=v,d||(v=0));a.sc(e+v,ba.dn);a.sc(g,ba.en);a.sc(l,ba.gn);a.sc(p,ba.Fk)}f.Wa=function(){var a=this.wc[this.Jb];this.Jb++;return a};f.gc=function(){this.Jb=this.pb=0};f.sc=function(a){this.wc[this.pb++]=a};f.fl=function(a,b,c){void 0===b||0>b?this.Zg(a,c):c(-1,!1)};
            f.gl=function(a,b){return void 0!==b&&0<=b?this.lh(a,b):-1};f.qp=function(a,b){return void 0!==b&&0<=b?this.$m(a,b):-1};f.Zg=function(a,b){var c=-1,d=null,e=0;if(!a.ib&&a.xa){do{if(a.Xa&&(e=a.Ua,0<=(c=rl(a.Xa,a.Ua++)))){d=a.Xa;break}a.Xa=a.xa.seek(a.Ab,a.Ra,a.eb);if(!a.Xa){a.ib=1088;break}a.Ua=0;this.wh(a)}while(1)}b(c,!1,d,e)};
            f.lh=function(a,b){if(a.ib||!a.xa)return-1;do{if(a.Xa&&a.xa.write(a.Xa,a.Ua++,b))break;a.Xa=a.xa.seek(a.Ab,a.Ra,a.eb);if(!a.Xa){a.ib=8256;b=-1;break}a.Ua=0;this.wh(a)}while(1);return b};f.wh=function(a){a.eb++;a.eb>=a.bi+1&&(a.eb=1,a.Ra++,a.Ra>=a.ai&&(a.Ra=0,a.Ab++))};f.$m=function(a,b){if(a.ib)return-1;a.hd[a.ug++]=b;if(a.ug==a.hd.length){a.Ab=a.hd[0];a.Ra=a.hd[1];a.eb=a.hd[2];a.ob=128<<a.hd[3];for(var c=a.ug=0;c<a.ob;c++)if(0>this.lh(a,a.sn))return-1;a.Ri++}a.Ri>=a.af&&(b=-1);return b};
            var wl={1012:sl.prototype.hq,1013:sl.prototype.fq,1015:sl.prototype.gq},xl={1010:sl.prototype.Kr,1013:sl.prototype.Jr,1015:sl.prototype.Ir};Pa(function(){for(var a=kb(window.document,"pcjs","fdc"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new sl(d);jb(d,c)}});
            function El(a){Ua.call(this,"HDC",a,El,1048576);this.dmaRead=this.fl;this.dmaWrite=this.gl;this.dmaWriteBuffer=this.rp;this.dmaWriteFormat=this.sp;this.Ik=[];if(a.drives)try{this.Ik=eval("("+a.drives+")")}catch(b){Ba("HDC drive configuration error: "+b.message+" ("+a.drives+")")}this.Sh=(this.Of="at"==a.type)?1:0;this.Jp=this.Of?2:3}eb(El);
            var Fl=[{0:[306,2],1:[375,8],2:[306,6],3:[306,4]},{1:[306,4],2:[615,4],3:[615,6],4:[940,8],5:[940,6],6:[615,4],7:[462,8],8:[733,5],9:[900,15],10:[820,3],11:[855,5],12:[855,7],13:[306,8],14:[733,7]}];f=El.prototype;f.Nb=function(){return!1};f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Y=d;this.Fa=a;this.ja=xb(a,"ChipSet");oc(b,this,this.Of?Gl:Hl);sc(b,this,this.Of?Il:Jl);Ce(c,19,this,this.Kq);Ce(c,64,this,this.Lq);this.reset();this.xh()||ob(this)};
            f.lc=function(a,b){if(!b)if(!a||!this.restore)this.ye(),this.Fa.ol&&this.xh(!0);else if(!this.restore(a))return!1;return!0};f.kc=function(a){return a&&this.save?this.save():!0};f.Hg=function(){return this.Fa?this.Fa.Hg():""};f.kf=function(){return this.Fa?this.Fa.kf():""};f.reset=function(){this.ye(null,!0)};f.save=function(){var a=new Je(this);a.set(0,this.Vm());return a.data()};f.restore=function(a){return this.ye(a[0])};
            f.ye=function(a,b){var c=0,d=!0;if(this.Of)null==a&&(a=[0,0,0,0,0,0,0,0,64,0]),this.vf=a[c++],this.Oo=a[c++],this.xf=a[c++],this.uk=a[c++],this.qk=a[c++],this.pk=a[c++],this.bh=a[c++],this.wa=a[c++],this.Om=a[c++],this.sk=a[c++];else{null==a&&(a=[0,0,Array(14),0,0]);this.ah=a[c++];this.wa=a[c++];this.wc=a[c++];this.Jb=a[c++];this.pb=a[c++];this.No=a[c++];this.Mo=a[c++];this.Lo=a[c++];var e=a[c++];void 0!==e?this.Jg=e:void 0===this.Jg&&(this.Jg=-1)}void 0===this.Ea&&(this.Ea=Array(this.Ik.length));
            c=a[c];void 0===c&&(c=[]);for(e=0;e<this.Ea.length;e++){void 0===this.Ea[e]&&(this.Ea[e]={});var g=this.Ea[e];this.wl(e,g,this.Ik[e],c[e],b)||(d=!1);null!=this.ah&&1>=e&&(this.ah|=(g.type&3)<<(1-e<<1))}return d};
            f.Vm=function(){var a=0,b=[];this.Of?(b[a++]=this.vf,b[a++]=this.Oo,b[a++]=this.xf,b[a++]=this.uk,b[a++]=this.qk,b[a++]=this.pk,b[a++]=this.bh,b[a++]=this.wa,b[a++]=this.Om,b[a++]=this.sk):(b[a++]=this.ah,b[a++]=this.wa,b[a++]=this.wc,b[a++]=this.Jb,b[a++]=this.pb,b[a++]=this.No,b[a++]=this.Mo,b[a++]=this.Lo,b[a++]=this.Jg);b[a]=this.Xm();return b};
            f.wl=function(a,b,c,d,e){var g=0,l=!0;void 0===d&&(d=[0,0,!1,Array(8)]);b.rb=a;b.errorCode=d[g++];b.Uo=d[g++];b.Eg=d[g++];b.qg=d[g++];b.rg=d[g++];b.Ra=d[g++];b.Fb=d[g++];b.Ne=d[g++];b.eb=d[g++];b.af=d[g++];b.ob=d[g++];b.Pi=this.Of?0:1;b.name=c.name;void 0===b.name&&(b.name="Hard Drive");b.path=c.path;b.mode=c.mode||(b.path?"preload":"local");"demandro"!=b.mode&&"demandrw"!=b.mode||this.kf()||(b.mode="local");b.type=c.type;if(void 0===b.type||void 0===Fl[this.Sh][b.type])b.type=this.Jp;c=Fl[this.Sh][b.type];
            b.Mb=c[2]||17;b.xb=c[3]||512;if(e&&this.ja&&(e=this.ja,c=b.type,e.ga)){var p=e.ga[18],p=a?p&240|c:p&15|c<<4;e.ga&&(e.ga[18]=p,si(e))}void 0===b.xa&&(b.xa=null,this.Da("Type "+b.type+' "'+b.name+'" is fixed disk '+a,!0));Kl(this,b);b.Ua=d[g++];b.Xa=null;b.xa&&(a=d[g],void 0!==a&&0>b.xa.restore(a)&&(l=!1),l&&void 0!==b.Ua&&(b.Xa=b.xa.seek(b.Ne,b.Ra,b.eb+b.Pi)));return l};f.Xm=function(){for(var a=0,b=[],c=0;c<this.Ea.length;c++)b[a++]=this.Wm(this.Ea[c]);return b};
            f.Wm=function(a){var b=0,c=[];c[b++]=a.errorCode;c[b++]=a.Uo;c[b++]=a.Eg;c[b++]=a.qg;c[b++]=a.rg;c[b++]=a.Ra;c[b++]=a.Fb;c[b++]=a.Ne;c[b++]=a.eb;c[b++]=a.af;c[b++]=a.ob;c[b++]=a.Ua;c[b]=a.xa?a.xa.save():null;return c};f.Hn=function(a){var b;a=this.Ea[a];if(void 0!==a){b={};for(var c in a)b[c]=a[c]}return b};
            function Kl(a,b,c){if(b){var d=0,e=0;null==c&&((d=b.qg[2])?e=b.qg[0]<<8|b.qg[1]:c=b.type);null==c||d||(d=Fl[a.Sh][c][1],e=Fl[a.Sh][c][0]);d&&((c=Fl[a.Sh][b.type])&&e!=c[0]&&d!=c[1]&&a.Da("Warning: drive parameters ("+e+","+d+") do not match drive type "+b.type+" ("+c[0]+","+c[1]+")"),b.Eb=e,b.Fb=d,null==b.xa&&(b.xa=new il(a,b,b.mode)))}}
            f.So=function(a,b,c){if(a.xa){var d=a.xa.info(),e=d[0];if(e){var g=d[2],l=d[1]*g;if(b+c<=e*l)return a.Ne=Math.floor(b/l),b%=l,a.Ra=Math.floor(b/g),a.eb=b%g,a.ob=c*d[3],a.errorCode=0,!0}}return!1};
            f.xh=function(a){a||(this.Ff=0);for(var b=0;b<this.Ea.length;b++){var c=this.Ea[b];if(c.name&&c.path){if(!(a&&c.xa&&c.xa.dj)){var d;d=c.name;var c=c.path,e=this.Ea[b];e.$c?(this.Da("Drive "+b+" busy"),d=!0):(e.$c=!0,e.Pf=!0,this.Ff++,this.qa()&&this.ab("loading "+d),(e.xa||new il(this,e,e.mode)).load(d,c,null,this.up),d=!1);!d&&a&&ob(this,!1)}}else a&&void 0!==c.type&&(c.xa=null,Kl(this,c,c.type))}return!!this.Ff};
            f.up=function(a,b,c){a.$c=!1;(a.xa=b)&&this.Da('Mounted disk "'+c+'" in drive '+String.fromCharCode(67+a.rb),a.Pf);a.Pf&&(a.Pf=!1,--this.Ff||ob(this))};f.Hq=function(a,b){var c=0;this.Jb<this.pb&&(c=this.wc[this.Jb]);this.ja&&Yi(this.ja,5);this.wa&=-33;m(this,a,null,b,"DATA["+this.Jb+"]",c);++this.Jb>=this.pb&&(this.Jb=this.pb=0,this.wa&=-15);return c};
            f.gs=function(a,b,c){m(this,a,b,c,"DATA["+this.pb+"]");this.pb<this.wc.length&&(this.wc[this.pb++]=b);a=12!=this.wc[0]?6:this.wc.length;6==this.pb&&(this.wa&=-2);this.pb>=a&&(this.wa|=2,this.wa&=-2,Ll(this))};f.Iq=function(a,b){var c=this.wa;m(this,a,null,b,"STATUS",c);this.Jb<this.pb&&(this.wa|=1);return c};f.ks=function(a,b,c){m(this,a,b,c,"RESET");this.No=b;this.ja&&Yi(this.ja,5);this.ye()};f.Gq=function(a,b){m(this,a,null,b,"CONFIG",this.ah);return this.ah};
            f.js=function(a,b,c){m(this,a,b,c,"PULSE");this.Mo=b;this.wa=13};f.hs=function(a,b,c){m(this,a,b,c,"PATTERN");this.Lo=b};f.Lm=function(a,b,c){m(this,a,b,c,"NOISE")};
            f.Qp=function(a,b){var c=-1;if(this.Sa){var d=this,c=this.Zg(this.Sa,function(){});1==this.Sa.Ua?this.qa(1048832)&&m(this,a,null,b,"DATA["+this.Sa.Ua+"]",c):this.Sa.Ua==this.Sa.xb&&(this.Sa.ob-=this.Sa.xb,this.xf=this.xf-1&255,this.Sa.ob>=this.Sa.xb?(d.wa=136,this.Zg(this.Sa,function(a){0<=a?(Ml(d),d.wa=80):(d.wa=1,d.vf=16)},!1)):this.wa=80)}return c};
            f.qr=function(a,b,c){this.Sa&&this.Sa.ob>=this.Sa.xb&&(0>this.lh(this.Sa,b)?(this.wa=1,this.vf=16):1==this.Sa.Ua?this.qa(1048832)&&m(this,a,b,c,"DATA["+this.Sa.Ua+"]"):this.Sa.Ua==this.Sa.xb&&(this.Sa.ob-=this.Sa.xb,this.xf=this.xf-1&255,Ml(this),this.wa=80,this.Sa.ob>=this.Sa.xb&&(this.wa|=8)))};f.Sp=function(a,b){var c=this.vf;m(this,a,null,b,"ERROR",c);return c};f.vr=function(a,b,c){m(this,a,b,c,"WPREC");this.Oo=b};f.Tp=function(a,b){var c=this.xf;m(this,a,null,b,"SECCNT",c);return c};
            f.tr=function(a,b,c){m(this,a,b,c,"SECCNT");this.xf=b};f.Up=function(a,b){var c=this.uk;m(this,a,null,b,"SECNUM",c);return c};f.ur=function(a,b,c){m(this,a,b,c,"SECNUM");this.uk=b};f.Pp=function(a,b){var c=this.qk;m(this,a,null,b,"CYLLO",c);return c};f.pr=function(a,b,c){m(this,a,b,c,"CYLLO");this.qk=b};f.Op=function(a,b){var c=this.pk;m(this,a,null,b,"CYLHI",c);return c};f.or=function(a,b,c){m(this,a,b,c,"CYLHI");this.pk=b};f.Rp=function(a,b){var c=this.bh;m(this,a,null,b,"DRVHD",c);return c};
            f.rr=function(a,b,c){m(this,a,b,c,"DRVHD");this.bh=b;this.wa=this.Ea[this.bh&16?1:0]?this.wa|64:this.wa&-65};f.Vp=function(a,b){var c=this.wa;m(this,a,null,b,"STATUS",c);return c};f.nr=function(a,b,c){m(this,a,b,c,"COMMAND");this.Om=b;this.ja&&Yi(this.ja,14);Nl(this)};f.sr=function(a,b,c){m(this,a,b,c,"FDR");this.sk&4&&!(b&4)&&(this.vf=1);this.sk=b};
            function Nl(a){var b=!1,c=a.Om,d=a.bh&16?1:0,e=a.bh&15,g=a.qk|(a.pk&3)<<8,l=a.uk,p=a.xf||256;a.Sa=null;a.vf=0;a.wa=80;(d=a.Ea[d])?(d.Ne=g,d.Ra=e,d.eb=l,d.ob=p*d.xb,c=144<=c?c:c&240,d.Xa=null,d.Ua=0,d.errorCode=0,a.Sa=d):c=-1;switch(c&240){case 32:a.wa=136;a.Zg(d,function(b){0<=b&&a.ja?(Ml(a),a.wa=80):(a.wa=1,a.vf=16)},!1);break;case 48:a.wa=8;break;case 16:b=!0;break;case 64:b=!0;break;case 144:a.vf=1;b=!0;break;case 145:d.Fb=e+1,d.Mb=p,b=!0}b&&Ml(a)}
            function Ml(a){!a.ja||a.sk&2||Xi(a.ja,14,120)}
            function Ll(a){a.Jb=0;var b=a.Wa(),c=a.Wa(),d=c&32,e=d>>5,g=c&31,l=a.Wa(),p=a.Wa(),v=l<<2&768|p,w=l&63,F=a.Wa(),K=a.Wa(),J=a.Ea[e];J&&(J.Ne=v,J.Ra=g,J.eb=w,J.ob=F*J.xb);switch(b){case 3:a.gc(J?J.errorCode:4);a.sc(c);a.sc(l);a.sc(p);a.sc(0|d);b=-1;break;case 12:for(c=0;0<=(b=a.Wa());)J&&c<J.qg.length&&(J.qg[c++]=b);J&&Kl(a,J);b=0;J||a.Jg!=e||(a.Jg=-1,b=2);a.gc(b|d);b=-1;break;case 224:case 228:a.gc(0|d),b=-1}if(0<=b)switch(void 0===J?b=-1:(J.errorCode=0,J.Uo=0),b){case 0:a.gc(0|d);break;case 1:J.bu=
            K;a.gc(0|d);break;case 5:a.gc(0|d);break;case 8:Ol(a,J,function(b){a.gc(b|d)});break;case 10:Pl(a,J,function(b){a.gc(b|d)});break;case 15:Ql(a,J,function(b){a.gc(b|d)});break;default:a.gc(2|d)}}f.Wa=function(){var a=-1;this.Jb<this.pb&&(a=this.wc[this.Jb++]);return a};f.gc=function(a){this.Jb=this.pb=0;void 0!==a&&this.sc(a);this.ja&&Xi(this.ja,5);this.wa|=32};f.sc=function(a){this.wc[this.pb++]=a};f.fl=function(a,b,c){void 0===b||0>b?this.Zg(a,c):c(-1,!1)};
            f.gl=function(a,b){return void 0!==b&&0<=b?this.lh(a,b):-1};f.rp=function(a,b){var c;void 0!==b&&0<=b?(c=b,a.Ua<a.rg.length?a.rg[a.Ua++]=c:(a.errorCode=20,c=-1)):c=-1;return c};f.sp=function(a,b){return void 0!==b&&0<=b?this.$m(a,b):-1};function Ol(a,b,c){b.errorCode=4;if(b.xa&&(b.Xa=null,a.ja)){b.errorCode=0;Qi(a.ja,3,a,"dmaRead",b);Ji(a.ja,3,function(a){a||0!=b.errorCode||(b.errorCode=4);c(b.errorCode?2:0)});return}c(b.errorCode?2:0)}
            function Pl(a,b,c){b.errorCode=4;if(b.xa&&(b.Xa=null,a.ja)){b.errorCode=0;Qi(a.ja,3,a,"dmaWrite",b);Ji(a.ja,3,function(a){a||(0==b.errorCode&&(b.errorCode=4),20==b.errorCode&&(b.errorCode=0));c(b.errorCode?2:0)});return}c(b.errorCode?2:0)}function Ql(a,b,c){b.errorCode=4;b.rg&&b.rg.length==b.ob||(b.rg=Array(b.ob));b.Ua=0;a.ja?(b.errorCode=0,Qi(a.ja,3,a,"dmaWriteBuffer",b),Ji(a.ja,3,function(a){a||0!=b.errorCode||(b.errorCode=4);c(b.errorCode?2:0)})):c(b.errorCode?2:0)}
            f.Zg=function(a,b,c){var d=-1,e=null,g=0;if(a.errorCode)return b&&b(d,!1,e,g),d;var l=!1!==c?1:0;if(a.Xa&&(g=a.Ua,d=rl(a.Xa,a.Ua),a.Ua+=l,0<=d))return e=a.Xa,b&&b(d,!1,e,g),d;if(b){var p=this;if(a.xa)return a.xa.seek(a.Ne,a.Ra,a.eb+a.Pi,!1,function(c,w){(a.Xa=c)?(e=c,g=a.Ua=0,p.wh(a),d=rl(a.Xa,a.Ua),a.Ua+=l):a.errorCode=20;b(d,w,e,g)}),d;a.errorCode=20;b(d,!1,e,g)}return d};
            f.lh=function(a,b){if(a.errorCode)return-1;do{if(a.Xa&&a.xa.write(a.Xa,a.Ua++,b))break;a.xa&&a.xa.seek(a.Ne,a.Ra,a.eb+a.Pi,!0,function(b){a.Xa=b});if(!a.Xa){a.errorCode=20;b=-1;break}a.Ua=0;this.wh(a)}while(1);return b};f.wh=function(a){a.eb++;var b=1-a.Pi;a.eb>=a.Mb+b&&(a.eb=b,a.Ra++,a.Ra>=a.Fb&&(a.Ra=0,a.Ne++))};
            f.$m=function(a,b){if(a.errorCode)return-1;a.hd[a.ug++]=b;if(a.ug==a.hd.length){a.Ne=a.hd[0];a.Ra=a.hd[1];a.eb=a.hd[2];a.ob=128<<a.hd[3];for(var c=a.ug=0;c<a.ob;c++)if(0>this.lh(a,a.sn))return-1;a.Ri++}a.Ri>=a.af&&(b=-1);return b};f.Kq=function(){var a=this.O.H&255;!(this.O.F>>8)&&128<a&&(this.Jg=a-128);return!0};f.Lq=function(){var a;(a=this.O.F>>8||!this.ja)||(a=!(this.ja.ec[0].Wd&64));return a?!0:!1};
            var Hl={800:El.prototype.Hq,801:El.prototype.Iq,802:El.prototype.Gq},Gl={496:El.prototype.Qp,497:El.prototype.Sp,498:El.prototype.Tp,499:El.prototype.Up,500:El.prototype.Pp,501:El.prototype.Op,502:El.prototype.Rp,503:El.prototype.Vp},Jl={800:El.prototype.gs,801:El.prototype.ks,802:El.prototype.js,803:El.prototype.hs,807:El.prototype.Lm,811:El.prototype.Lm,815:El.prototype.Lm},Il={496:El.prototype.qr,497:El.prototype.vr,498:El.prototype.tr,499:El.prototype.ur,500:El.prototype.pr,501:El.prototype.or,
            502:El.prototype.rr,503:El.prototype.nr,1014:El.prototype.sr};Pa(function(){for(var a=kb(window.document,"pcjs","hdc"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new El(d);jb(d,c)}});
            function Rl(a){Ua.call(this,"Debugger",a,Rl);this.Ah=this.Nd=-1;this.vg=4;this.ko=65535;this.If=5;this.jo=1048575;this.od=Sl(this);this.Jn=Sl(this);this.sd=-1;this.gd=[];this.zg=!1;this.Nf=Sl(this);this.Sc=[];Tl(this);Ul(this);Vl(this,a.messages);this.Um=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return Wl(b,a)}):void 0===global.$&&(global.$=function(a){return Wl(b,a)})}eb(Rl);
            var Xl={16:262144,19:524288,21:32768,22:65536,28:2048,33:134217728,51:33554432},Yl={"?":"help","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]","h [#]":"halt/history","i [#]":"input port #",k:"stack trace",l:"load sector(s)",m:"messages","o [#]":"output port #",p:"step over",r:"dump/edit registers","t [#]":"step instruction(s)","u [#]":"unassemble",x:"execution options",reset:"reset computer",ver:"display version"},
            Zl="INVALID AAA AAD AAM AAS ADC ADD AND ARPL AS: BOUND BSF BSR BT BTC BTR BTS CALL CBW CLC CLD CLI CLTS CMC CMP CMPSB CMPSW CS: CWD DAA DAS DEC DIV DS: ENTER ES: ESC FADD FBLD FBSTP FCOM FCOMP FDIV FDIVR FIADD FICOM FICOMP FIDIV FIDIVR FILD FIMUL FIST FISTP FISUB FISUBR FLD FLDCW FLDENV FMUL FNSAVE FNSTCW FNSTENV FNSTSW FRSTOR FS: FST FSTP FSUB FSUBR GS: HLT IDIV IMUL IN INC INS INT INT3 INTO IRET JBE JC JCXZ JG JGE JL JLE JMP JA JNC JNO JNP JNS JNZ JO JP JS JZ LAHF LAR LDS LEA LEAVE LES LFS LGDT LGS LIDT LLDT LMSW LOADALL LOCK LODSB LODSW LOOP LOOPNZ LOOPZ LSL LSS LTR MOV MOVSB MOVSW MOVSX MOVZX MUL NEG NOP NOT OR OS: OUT OUTS POP POPA POPF PUSH PUSHA PUSHF RCL RCR REPNZ REPZ RET RETF ROL ROR SAHF SALC SAR SBB SCASB SCASW SETBE SETC SETG SETGE SETL SETLE SETNBE SETNC SETNO SETNP SETNS SETNZ SETO SETP SETS SETZ SGDT SHL SHLD SHR SHRD SIDT SLDT SMSW SS: STC STD STI STOSB STOSW STR SUB TEST VERR VERW WAIT XCHG XLAT XOR".split(" "),
            $l=[8086,80186,80286,80386],am="AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI ES CS SS DS FS GS IP PS EAX ECX EDX EBX ESP EBP ESI EDI CR0 CR1 CR2 CR3".split(" "),bm="BX+SI BX+DI BP+SI BP+DI SI DI BP BX EAX ECX EDX EBX ESP EBP ESI EDI".split(" "),cm={cpu:1,seg:2,desc:4,tss:8,"int":16,fault:32,bus:64,mem:128,port:256,dma:512,pic:1024,timer:2048,cmos:4096,rtc:8192,8042:16384,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,hdc:1048576,disk:2097152,serial:4194304,speaker:8388608,state:16777216,
            mouse:33554432,computer:67108864,dos:134217728,data:268435456,log:536870912,warn:1073741824,halt:-2147483648},dm=[0,0],em=[205,12291],fm=[[6,12417,4257],[6,12420,4260],[6,12449,4225],[6,12452,4228],[6,12385,4097],[6,14436,4100],[136,4211],[133,8307],[129,12417,4257],[129,12420,4260],[129,12449,4225],[129,12452,4228],[129,12385,4097],[129,14436,4100],[136,4467],[133,8563],[5,12417,4257],[5,12420,4260],[5,12449,4225],[5,12452,4228],[5,12385,4097],[5,14436,4100],[136,4723],[133,8819],[150,12417,4257],
            [150,12420,4260],[150,12449,4225],[150,12452,4228],[150,12385,4097],[150,14436,4100],[136,4979],[133,9075],[7,12417,4257],[7,12420,4260],[7,12449,4225],[7,12452,4228],[7,12385,4097],[7,14436,4100],[35,15],[29],[184,12417,4257],[184,12420,4260],[184,12449,4225],[184,12452,4228],[184,12385,4097],[184,14436,4100],[27,15],[30],[191,12417,4257],[191,12420,4260],[191,12449,4225],[191,12452,4228],[191,12385,4097],[191,14436,4100],[177,15],[1],[24,4225,4257],[24,4228,4260],[24,4257,4225],[24,4260,4228],[24,
            4193,4097],[24,6244,4100],[33,15],[4],[74,14436],[74,14692],[74,14948],[74,15204],[74,15460],[74,15716],[74,15972],[74,16228],[31,14436],[31,14692],[31,14948],[31,15204],[31,15460],[31,15716],[31,15972],[31,16228],[136,6244],[136,6500],[136,6756],[136,7012],[136,7268],[136,7524],[136,7780],[136,8036],[133,10340],[133,10596],[133,10852],[133,11108],[133,11364],[133,11620],[133,11876],[133,12132],[137,32768],[134,32768],[10,37028,4232],[8,8323,4259],[64,49167],[69,49167],[130,49167],[9,49167],[136,
            36868],[72,45219,4235],[136,36866],[72,45219,4234],[75,41041,6756],[75,41044,6756],[132,39524,4161],[132,39524,4164],[94,4145],[90,4145],[81,4145],[89,4145],[97,4145],[93,4145],[80,4145],[88,4145],[96,4145],[92,4145],[95,4145],[91,4145],[85,4145],[84,4145],[86,4145],[83,4145],[192,12417,4097],[193,12420,4100],[192,12417,4097],[194,12420,4097],[185,4225,4257],[185,4228,4260],[189,12449,12417],[189,12452,12420],[120,8321,4257],[120,8324,4260],[120,8353,4225],[120,8356,4228],[120,8324,4275],[101,8356,
            148],[120,8371,4228],[133,8324],[127],[189,14436,14692],[189,14436,14948],[189,14436,15204],[189,14436,15460],[189,14436,15716],[189,14436,15972],[189,14436,16228],[18],[28],[17,4103],[188],[138],[135],[147],[98],[120,8289,4129],[120,10340,4132],[120,8225,4193],[120,8228,6244],[121,8273,4161],[122,8276,4164],[25,4177,4161],[26,4180,4164],[185,4193,4097],[185,6244,4100],[181,8273,4193],[182,8276,6244],[112,8289,4161],[113,10340,4164],[151,4193,4177],[152,6244,4180],[120,8289,4097],[120,8545,4097],
            [120,8801,4097],[120,9057,4097],[120,9313,4097],[120,9569,4097],[120,9825,4097],[120,10081,4097],[120,10340,4100],[120,10596,4100],[120,10852,4100],[120,11108,4100],[120,11364,4100],[120,11620,4100],[120,11876,4100],[120,12132,4100],[195,28801,4097],[196,28804,4097],[143,4099],[143],[103,8356,4246],[100,8356,4246],[120,8321,4097],[120,8324,4100],[34,36867,4097],[102,32768],[144,4099],[144],[77],[76,4097],[78],[79],[197,12417,4113],[198,12420,4113],[199,12417,4449],[200,12420,4449],[3,1],[2,1],[148],
            [190],[36,4228],[36,4228],[36,4228],[36,4228],[36,4228],[36,4228],[36,4228],[36,4228],[115,4145],[116,4145],[114,4145],[82,4145],[73,8289,4097],[73,10340,4097],[131,4097,4193],[131,4097,6244],[17,4148],[87,4148],[87,4103],[87,4145],[73,8289,6756],[73,10340,6756],[131,6756,4193],[131,6756,6244],[111,15],[0],[141,15],[142,15],[70],[23],[201,12417],[202,12420],[19],[178],[21],[180],[20],[179],[203,12417],[204,12420]],gm={0:[206,12419],1:[207,12419],2:[99,41123,4243],3:[117,41123,4243],5:[110,32768],
            6:[22,32768],32:[120,57509,4309],34:[120,57557,4261],128:[94,53300],129:[90,53300],130:[81,53300],131:[89,53300],132:[97,53300],133:[93,53300],134:[80,53300],135:[88,53300],136:[96,53300],137:[92,53300],138:[95,53300],139:[91,53300],140:[85,53300],141:[84,53300],142:[86,53300],143:[83,53300],144:[165,57473],145:[161,57473],146:[154,57473],147:[160,57473],148:[168,57473],149:[164,57473],150:[153,57473],151:[159,57473],152:[167,57473],153:[163,57473],154:[166,57473],155:[162,57473],156:[157,57473],
            157:[156,57473],158:[158,57473],159:[155,57473],160:[136,54387],161:[133,58483],163:[13,53380,4260],164:[171,57476,4260,4097],165:[171,57476,4260,4449],168:[136,54643],169:[133,58739],171:[16,57476,4260],172:[173,57476,4260,4097],173:[173,57476,4260,4449],175:[72,61572,4260],178:[118,8356,4246],179:[15,57476,4260],180:[104,8356,4246],181:[106,8356,4246],182:[124,57508,4225],183:[124,57509,4227],186:[208,61572,4097],187:[14,57476,4260],188:[11,57508,4228],189:[12,57508,4228],190:[123,57508,4225],191:[123,
            57509,4227]},hm=[[[6,12417,4097],[129,12417,4097],[5,12417,4097],[150,12417,4097],[7,12417,4097],[184,12417,4097],[191,12417,4097],[24,4225,4097]],[[6,12420,4100],[129,12420,4100],[5,12420,4100],[150,12420,4100],[7,12420,4100],[184,12420,4100],[191,12420,4100],[24,4228,4100]],[[6,12420,4098],[129,12420,4098],[5,12420,4098],[150,12420,4098],[7,12420,4098],[184,12420,4098],[191,12420,4098],[24,4228,4098]],[[145,45185,4097],[146,45185,4097],[139,45185,4097],[140,45185,4097],[170,45185,4097],[172,45185,
            4097],dm,[149,45185,4097]],[[145,45188,4097],[146,45188,4097],[139,45188,4097],[140,45188,4097],[170,45188,4097],[172,45188,4097],dm,[149,45188,4097]],[[145,12417,4113],[146,12417,4113],[139,12417,4113],[140,12417,4113],[170,12417,4113],[172,12417,4113],dm,[149,12417,4113]],[[145,12420,4113],[146,12420,4113],[139,12420,4113],[140,12420,4113],[170,12420,4113],[172,12420,4113],dm,[149,12420,4113]],[[145,12417,4449],[146,12417,4449],[139,12417,4449],[140,12417,4449],[170,12417,4449],[172,12417,4449],
            dm,[149,12417,4449]],[[145,12420,4449],[146,12420,4449],[139,12420,4449],[140,12420,4449],[170,12420,4449],[172,12420,4449],dm,[149,12420,4449]],[[185,4225,4097],dm,[128,12417],[126,12417],[125,4225],[72,12417],[32,4225],[71,12417]],[[185,4228,4100],dm,[128,12420],[126,12420],[125,4228],[72,12420],[32,4228],[71,12420]],[[74,12417],[31,12417],dm,dm,dm,dm,dm,dm],[[74,12420],[31,12420],[17,4228],[17,4231],[87,4228],[87,4231],[136,4228],dm],[],[[175,41091],[183,41091],[108,36995],[119,36995],[186,36995],
            [187,36995],dm,dm],[[169,41091],[174,41091],[105,36995],[107,36995],[176,41091],dm,[109,36995],dm],[dm,dm,dm,dm,[13,53380,4097],[16,57476,4097],[15,57476,4097],[14,57476,4097]]],im={19:{0:"disk reset",1:"get status",2:"read drive DL (CH:DH:CL,AL) into ES:BX",3:"write drive DL (CH:DH:CL,AL) from ES:BX",4:"verify drive DL (CH:DH:CL,AL)",5:"format drive DL using ES:BX",8:"read drive DL parameters into ES:DI",21:"get drive DL DASD type",22:"get drive DL change line status",23:"set drive DL DASD type",
            24:"set drive DL media type"},21:{128:"open device",129:"close device",130:"program termination",131:"wait CX:DXus for event",132:"joystick support",133:"SYSREQ pressed",134:"wait CX:DXus",135:"move block (CX words)",136:"get extended memory size",137:"processor to virtual mode",144:"device busy loop",145:"interrupt complete flag set"},33:{0:"terminate program",1:"read character (al) from stdin with echo",2:"write character DL to stdout",3:"read character (al) from stdaux",4:"write character DL to stdaux",
            5:"write character DL to stdprn",6:"direct console output (input if DL=FF)",7:"direct console input without echo",8:"read character (al) from stdin without echo",9:"write $-terminated string DS:DX to stdout",10:"buffered input (ds:dx)",11:"get stdin status",12:"flush buffer and read stdin",13:"disk reset",14:"select default drive DL",15:"open file using fcb DS:DX",16:"close file using fcb DS:DX",17:"find first matching file using fcb DS:DX",18:"find next matching file using fcb DS:DX",19:"delete file using fcb DS:DX",
            20:"sequential read from file using fcb DS:DX",21:"sequential write to file using fcb DS:DX",22:"create or truncate file using fcb DS:DX",23:"rename file using fcb DS:DX",25:"get current default drive (al)",26:"set disk transfer area (dta) DS:DX",27:"get allocation information for default drive",28:"get allocation information for specific drive DL",31:"get drive parameter block for default drive",33:"read random record from file using fcb DS:DX",34:"write random record to file using fcb DS:DX",35:"get file size using fcb DS:DX",
            36:"set random record number for fcb DS:DX",37:"set address DS:DX of interrupt vector AL",38:"create new program segment prefix (psp) at segment DX",39:"random block read from file using fcb DS:DX",40:"random block write to file using fcb DS:DX",41:"parse filename DS:SI into fcb ES:DI using AL",42:"get system date (year=cx, mon=dh, day=dl)",43:"set system date (year=CX, mon=DH, day=DL)",44:"get system time (hour=ch, min=cl, sec=dh, 100ths=dl)",45:"set system time (hour=CH, min=CL, sec=DH, 100ths=DL)",
            46:"set verify flag AL",47:"get disk transfer area address (es:bx)",48:"get DOS version (al=major, ah=minor)",49:"terminate and stay resident",50:"get drive parameter block (dpb=ds:bx) for drive DL",51:"extended break check",52:"get address (es:bx) of InDOS flag",53:"get address (es:bx) of interrupt vector AL",54:"get free disk space of drive DL",55:"get(0)/set(1) switch character DL (AL)",56:"get country-specific information",57:"create subdirectory DS:DX",58:"remove subdirectory DS:DX",59:"set current directory DS:DX",
            60:"create or truncate file DS:DX with attributes CX",61:"open existing file DS:DX with mode AL",62:"close file BX",63:"read CX bytes from file BX into buffer DS:DX",64:"write CX bytes to file BX from buffer DS:DX",65:"delete file DS:DX",66:"set position CX:DX of file BX relative to AL",67:"get(0)/set(1) attributes CX of file DS:DX (AL)",68:"get device information (IOCTL)",69:"duplicate file handle BX",70:"force file handle CX to duplicate file handle BX",71:"get current directory (ds:si) for drive DL",
            72:"allocate memory segment with BX paragraphs",73:"free memory segment ES",74:"resize memory segment ES to BX paragraphs",75:"load program DS:DX using parameter block ES:BX",76:"terminate with return code AL",77:"get return code (al)",78:"find first matching file DS:DX with attributes CX",79:"find next matching file",80:"set current psp BX",81:"get current psp (bx)",82:"get system variables (es:bx)",83:"translate bpb DS:SI to dpb (es:bp)",84:"get verify flag (al)",85:"create child psp at segment DX",
            86:"rename file DS:DX to name ES:DI",87:"get(0)/set(1) file date DX and time CX (AL)",88:"get(0)/set(1) memory allocation strategy (AL)",89:"get extended error information",90:"create temporary file DS:DX with attributes CX",91:"create file DS:DX with attributes CX",92:"lock(0)/unlock(1) file BX region CX:DX length SI:DI (AL)"}};f=Rl.prototype;
            f.Kc=function(a,b,c,d){this.ma=b;this.O=c;this.Fa=a;this.Gp=xb(a,"FDC");this.ao=xb(a,"HDC");this.If=b.Be>>2;this.jo=b.Vh;this.th=fm;80186<=this.O.ka&&(this.th=fm.slice(),this.th[15]=dm,80286<=this.O.ka&&(this.th[15]=em,this.O.ka>=Lb&&(this.vg=8,this.ko=-1)));hi(this,64,function(){d.R("id       physaddr   blkaddr   used    size    type");d.R("-------- ---------  --------  ------  ------  ----");for(var a=0;a<d.O.na.length;a++){var b=d.O.Se[a];b.type!==zc&&d.R(h(b.id)+" %"+h(a<<d.O.Ca)+": "+h(b.Ba)+
            "  "+ga(b.gg)+"  "+ga(b.size)+"  "+Fc[b.type])}});hi(this,4,function(a){if(a){var b=jm(d,a);if(void 0===b)d.R("invalid selector: "+a);else if(a=km(d,b),d.R("dumpDesc("+ga(a?a.ia:b)+"): %"+h(a?a.Ed:null,d.If)),a){var c,b=!1;if(a.type&4096)a.type&2048?(c="code"+(a.type&512?",readable":",execonly"),a.type&1024&&(c+=",conforming")):(c="data"+(a.type&512?",writable":",readonly"),a.type&1024&&(c+=",expdown")),a.type&256&&(c+=",accessed");else switch(a.type){case 256:c="tss";break;case 512:c="ldt";break;
            case 768:c="busy tss";break;case 1024:c="call gate";b=!0;break;case 1280:c="task gate";b=!0;break;case 1536:c="int gate";b=!0;break;case 1792:c="trap gate",b=!0}!c||a.Rb&32768||(c+=",not present");d.R((b?"seg="+ga(a.ya&65535)+" off="+ga(a.gb):"base="+h(a.ya,d.If)+" limit="+h(a.gb,a.gb&-65536?8:4))+" type="+k(a.type>>8)+" ("+c+") ext="+ga(a.Lh&-65296)+" dpl="+k(a.Bc))}}else d.R("no selector")});hi(this,8,function(a){a:{if(a){var b=jm(d,a);if(void 0===b){d.R("invalid task selector: "+a);break a}a=km(d,
            b)}else a=d.O.cb;d.R("dumpTSS("+ga(a?a.ia:b)+"): %"+h(a?a.ya:null,d.If));if(a){var b="",c;for(c in lm){var p=lm[c],v=8>c.length?" ":"",w=a.ya+p,w=jf(d.O,w)|jf(d.O,w+1)<<8;b&&(b+="\n");b+=ga(p)+" "+c+": "+v+ga(w)}d.R(b)}}});hi(this,134217728,function(a){if(a)for(d.R("dumpDOS("+a+")"),a=jm(d,a);a;){var b=Sl(d,0,a),c=d.Qa(b,1),p=d.ra(b,2),v=d.ra(b,5);if(77!=c&&90!=c)break;d.R(jh(0,a)+": '"+String.fromCharCode(c)+"' PID="+ga(p)+" LEN="+ga(v)+' "'+mm(d,b)+'"');a+=1+v}else d.R("no MCB")});ob(this)};
            f.Nb=function(a,b,c){var d=this;switch(b){case "debugInput":return this.Hh=this.va[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode){b=c.value;c.value="";var l=nm(d,b,!0),p;for(p in l)Wl(d,l[p])}else 27==a.keyCode?c.value=b="":(38==a.keyCode?d.sd<d.gd.length-1&&(b=d.gd[++d.sd]):40==a.keyCode&&(0<d.sd?b=d.gd[--d.sd]:(b="",d.sd=-1)),null!=b&&(l=b.length,c.value=b,c.setSelectionRange(l,l)));null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.va[b]=c,Ka(c,function(){if(d.Hh){var a=
            d.Hh.value;d.Hh.value="";var a=nm(d,a,!0),b;for(b in a)Wl(d,a[b]);return!0}return!1}),!0;case "step":return this.va[b]=c,Ka(c,function(a){var b=!1;nb(d,!0)||(mb(d,!0),b=d.kh(a?1:0),mb(d,!1));return b}),!0}return!1};f.ed=function(){this.Hh&&this.Hh.focus()};
            function km(a,b){if(b===Mb(a.O))return a.O.ta;if(b===a.O.bb.ia)return a.O.bb;if(b===a.O.Ma.ia)return a.O.Ma;if(b===a.O.ua.ia)return a.O.ua;if(a.O.ka>=Lb){if(b===a.O.xc.ia)return a.O.xc;if(b===a.O.yc.ia)return a.O.yc}if(a.yl)return null;var c=new qd(a.O,7,"DBG");c.load(b,!0);return c}f.$b=function(a,b,c){var d=a.Ba;if(null==d){var d=n,e=km(this,a.ia);e&&(d=b?e.oc(a.za,c||1,!0):e.Ac(a.za,c||1,!0),a.Ba=d)}return d};
            f.Qa=function(a,b){var c=255,d=this.$b(a,!1,1);d!==n&&(c=jf(this.O,d)|0,b&&om(this,a,b));return c};f.qc=function(a,b){return a.ad?this.fe(a,b?4:0):this.ra(a,b?2:0)};f.ra=function(a,b){var c=65535,d=this.$b(a,!1,2);d!==n&&(c=jf(this.O,d)|jf(this.O,d+1)<<8,b&&om(this,a,b));return c};f.fe=function(a,b){var c=-1,d=this.$b(a,!1,4);d!==n&&(c=jf(this.O,d)|jf(this.O,d+1)<<8|jf(this.O,d+2)<<16|jf(this.O,d+3)<<24,b&&om(this,a,b));return c};
            f.dd=function(a,b,c){var d=this.$b(a,!0,1);d!==n&&(this.O.dd(d,b),c&&om(this,a,c),Zc(this.O))};f.Kb=function(a,b,c){var d=this.$b(a,!0,2);d!==n&&(this.O.Kb(d,b),c&&om(this,a,c),Zc(this.O))};function Sl(a,b,c,d,e,g){void 0===e&&(e=a.O&&4==a.O.ta.pa);void 0===g&&(g=a.O&&4==a.O.ta.Hd);return{za:b||0,ia:c,Ba:d,Fg:!1,ad:e||!1,Zc:g||!1}}function pm(a){return[a.za,a.ia,a.Ba,a.Fg,a.ad,a.Zc,a.nl,a.we]}function qm(a){return{za:a[0],ia:a[1],Ba:a[2],Fg:a[3],ad:a[4],Zc:a[5],nl:a[6],we:a[7]}}
            function rm(a,b){if(null!=b.ia){var c=km(a,b.ia);if(!c||b.za>c.gb)b.za=0,b.Ba=null}}function om(a,b,c){c=c||1;null!=b.Ba&&(b.Ba+=c);null!=b.ia&&(b.za+=c,rm(a,b))}function jh(a,b,c){return null!=b?h(b,4)+":"+h(a,a&-65536||c?8:4):h(a)}function sm(a){return null==a.ia?"%"+h(a.Ba):jh(a.za,a.ia,a.Zc)}function mm(a,b){var c,d="";for(c=8;d.length<c;){var e=a.Qa(b,1);if(!e)break;d+=32<=e&&128>e?String.fromCharCode(e):"."}return d}
            var lm={PREV_TSS:0,CPL0_SP:2,CPL0_SS:4,CPL1_SP:6,CPL1_SS:8,CPL2_SP:10,CPL2_SS:12,TASK_IP:14,TASK_PS:16,TASK_AX:18,TASK_CX:20,TASK_DX:22,TASK_BX:24,TASK_SP:26,TASK_BP:28,TASK_SI:30,TASK_DI:32,TASK_ES:34,TASK_CS:36,TASK_SS:38,TASK_DS:40,TASK_LDT:42};
            function tm(a,b){var c="",d=10,e=a.Kg,g=a.We;if(g.length){var l=void 0===b?a.zo:+b;isNaN(l)?l=d:c="more ";l>g.length&&(a.R("note: only "+g.length+" available"),l=g.length);e-=l;0>e&&(null!=g[g.length-1][1]?e+=g.length:(l=e+l,e=0));for(void 0!==b&&a.R(l+" instructions earlier:");d&&e!=a.Kg;){var p=g[e++];if(null==p.ia)break;p=Sl(a,p.za,p.ia,p.Ba);a.R(um(a,p,"history",l--));p.nl&&(e++,l--);e>=g.length&&(e=0);a.zo=l;d--}}10==d&&(a.R("no "+c+"history available"),a.zo=void 0)}
            function Vl(a,b){a.Y=a;a.Yb=a.fp=1073741824;a.xk=null;a.Nk=[];var c=nm(a,b.replace("keys","key").replace("kbd","keyboard"));if(c.length)for(var d in cm)0<=ya(c,d)&&(a.Yb|=cm[d],a.R(d+" messages enabled"))}function hi(a,b,c){for(var d in cm)if(b==cm[d]){a.Nk[d]=c;break}}
            function vm(a,b){var c="??";if(0<=b){var d,e,g=a.O;switch(b){case 0:d=g.F;e=2;break;case 1:d=g.G;e=2;break;case 2:d=g.H;e=2;break;case 3:d=g.D;e=2;break;case 4:d=g.F>>8;e=2;break;case 5:d=g.G>>8;e=2;break;case 6:d=g.H>>8;e=2;break;case 7:d=g.D>>8;e=2;break;case 8:d=g.F;e=4;break;case 9:d=g.G;e=4;break;case 10:d=g.H;e=4;break;case 11:d=g.D;e=4;break;case 12:d=r(g);e=4;break;case 13:d=g.L;e=4;break;case 14:d=g.K;e=4;break;case 15:d=g.J;e=4;break;case 22:d=q(g);e=a.vg;break;case 23:d=Nb(g);e=a.vg;break;
            case 16:d=g.Ma.ia;e=4;break;case 17:d=Mb(g);e=4;break;case 18:d=g.ua.ia;e=4;break;case 19:d=g.bb.ia,e=4}if(!e)if(80286==a.O.ka)32==b&&(d=g.hb,e=4);else if(a.O.ka>=Lb)switch(b){case 24:d=g.F;e=8;break;case 25:d=g.G;e=8;break;case 26:d=g.H;e=8;break;case 27:d=g.D;e=8;break;case 28:d=r(g);e=8;break;case 29:d=g.L;e=8;break;case 30:d=g.K;e=8;break;case 31:d=g.J;e=8;break;case 32:d=g.hb;e=8;break;case 33:d=g.ki;e=8;break;case 34:d=g.Yf;e=8;break;case 35:d=g.uf;e=8;break;case 20:d=g.xc.ia;e=4;break;case 21:d=
            g.yc.ia,e=4}e&&(c=h(d,e))}return c}f=Rl.prototype;f.message=function(a,b){b&&(a+=" @"+jh(q(this.O),Mb(this.O)));if(!this.xk||a!=this.xk)if(this.R(a),this.xk=a,this.O){this.Yb&-2147483648&&this.zb();var c=this.O;c.T.Qg=0;c.ud-=c.A;c.A=0;Zc(c)}};
            function Ee(a,b,c){var d,e=!1,g=Xl[b];g&&(d=a.O.F>>8,e=a.qa(g)?!0:524288==g&&a.qa(g=1048576));if(e){var l=a.O.H&255;if(33==b&&11==d||524288==g&&128<=l||1048576==g&&128>l)e=!1}if(e){if(g=(g=im[b])&&g[d]||""){for(var p=g,g=0;g<am.length;g++)if(l=am[g],0<=p.indexOf(l)){var v=vm(a,g),w={};w[l]=v;p=la(w,p)}g=" "+p}a.message("INT "+k(b)+": AH="+k(d)+" @"+jh(c-2-a.O.ta.ya,Mb(a.O))+g)}return e}
            function Ge(a,b,c,d,e){a.message("INT "+k(b)+": C="+(Re(a.O)?1:0)+(e||"")+" (cycles="+d+(c?",level="+(c+1):"")+")")}function lb(a,b,c,d,e,g,l,p){p|=256;if(null==e||(a.Yb&p)==p)p=null,null!=e&&(p=Mb(a.O),e-=a.O.ta.ya),a.message(b.Lg+"."+(null!=d?"outPort":"inPort")+"("+ga(c)+","+(g?g:"unknown")+(null!=d?","+k(d):"")+")"+(null!=l?": "+k(l):"")+(null!=e?" @"+jh(e,p):""))}
            f.Jq=function(){this.R("Type ? for list of debugger commands");this.zd();if(this.Um){var a=nm(this,this.Um);delete this.Um;for(var b in a)Wl(this,a[b])}};function Ul(a){var b;if(rf(a)){if(!a.We||!a.We.length){a.We=Array(1E4);for(b=0;b<a.We.length;b++)a.We[b]=Sl(a);a.Kg=0}if(!a.Dd||!a.Dd.length)for(a.Dd=Array(256),b=0;b<a.Dd.length;b++)a.Dd[b]=[b,0]}else a.Kg=0,a.We=[],a.Dd=[]}f.ag=function(a){if(!wm(this))return!1;this.O.ag(a);return!0};
            f.kh=function(a,b,c){if(!wm(this))return!1;this.Nd=0;do{a||rf(this)&&vf(this,this.O.sa,0);try{var d=this.O.kh(a);0<d&&(this.Nd+=d,id(this.O,d,!0),ad(this.O,d),this.Ah++)}catch(e){this.Nd=0,qb(this.O,e.stack||e.message)}}while(this.O.S&12528);!1!==c&&Zc(this.O);this.zd(b||!1,!1);return 0<this.Nd};f.zb=function(a){this.O&&this.O.zb(a)};f.zd=function(a,b){void 0===a&&(a=!0);void 0===b&&(b=!0);this.od=Sl(this,q(this.O),Mb(this.O));a&&1!=this.Jc?xm(this,null,b):ym(this)};
            function wm(a){var b;if(b=a.O&&pb(a.O))b=a.O,b.fa.jc?b=!0:(b.R(b.toString()+" not powered"),b=!1);b&&!nb(a.O)?(a=a.O,a.fa.Ld?(a.R(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}f.lc=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};f.kc=function(a,b){b&&this.R(a?"suspending":"shutting down");return a&&this.save?this.save():!0};
            f.reset=function(a){Ul(this);this.Ah=0;this.xk=null;this.Nd=0;this.od=Sl(this,q(this.O),Mb(this.O));void 0===this.fa.qb||a||this.R("reset");this.fa.qb=!1;zm(this);a||this.zd()};f.save=function(){var a=new Je(this);a.set(0,pm(this.od));a.set(1,pm(this.Nf));a.set(2,[this.gd,this.zg,this.Yb]);return a.data()};f.restore=function(a){var b=0;void 0!==a[2]&&(this.od=qm(a[b++]),this.Nf=qm(a[b++]),this.gd=a[b][0],"string"==typeof this.gd&&(this.gd=[this.gd]),this.zg=a[b][1],this.Yb||(this.Yb=a[b][2]));return!0};
            f.start=function(a,b){this.Jc||this.R("running");this.fa.qb=!0;this.Wq=a;this.Od=b};f.stop=function(a,b){if(this.fa.qb){this.fa.qb=!1;this.Nd=b-this.Od;if(!this.Jc){var c="stopped";if(this.Nd){var d=a-this.Wq,e=0<d?Math.round(1E3*this.Nd/d):0,c=c+" (";rf(this)&&(c+=this.Ah+" ops, ",this.Ah=0);c+=this.Nd+" cycles, "+d+" ms, "+e+" hz)"}this.R(c)}this.zd(!0,2!=this.Jc);this.ed();zm(this,this.O.sa)}};function rf(a){return 1<a.Mc.length||a.qa(16)}
            function vf(a,b,c){if(0<c&&(Am(a,b,a.Mc)||3==a.O.ta.Pa&&!(a.O.aa&Qb)))return!0;0<=c&&a.Dd.length&&(a.Ah++,c=jf(a.O,b),null!=c&&(a.Dd[c][1]++,c=a.We[a.Kg],c.za=q(a.O),c.ia=Mb(a.O),c.Ba=b,++a.Kg==a.We.length&&(a.Kg=0)));return!1}function Pc(a,b){return Am(a,b,a.Re)?(a.zb(!0),!0):!1}function Qc(a,b){return Am(a,b,a.Bd)?(a.zb(!0),!0):!1}function qc(a,b,c){a.R("break on input from port "+ga(b)+": "+k(c));a.zb(!0)}function uc(a,b,c){a.R("break on output to port "+ga(b)+": "+k(c));a.zb(!0)}
            function Tl(a){var b;a.Mc=["exec"];if(void 0!==a.Re)for(b=1;b<a.Re.length;b++){var c=a.ma,d=a.$b(a.Re[b]);Sc(c.na[d>>>c.Ca],!1)}a.Re=["read"];if(void 0!==a.Bd)for(b=1;b<a.Bd.length;b++)c=a.ma,d=a.$b(a.Bd[b]),Sc(c.na[d>>>c.Ca],!0);a.Bd=["write"];a.yl=0}f.Xe=function(a,b,c){if(!Bm(this,a,b)){b.Fg=c;a.push(b);if(a!=this.Mc){var d=this.ma,e=this.$b(b);d.na[e>>>d.Ca].Xe(e&d.Ga,a==this.Bd)}c?b.ia=null:this.R("breakpoint enabled: "+sm(b)+" ("+a[0]+")");Ul(this);return!0}return!1};
            function Bm(a,b,c,d){var e=!1;c=Cm(a,a.$b(c));for(var g=1;g<b.length;g++){var l=b[g];if(c==Cm(a,a.$b(l))){e=!0;if(d){b.splice(g,1);b!=a.Mc&&(d=a.ma,Sc(d.na[c>>>d.Ca],b==a.Bd));l.Fg||a.R("breakpoint cleared: "+sm(l)+" ("+b[0]+")");Ul(a);break}a.R("breakpoint exists: "+sm(l)+" ("+b[0]+")");break}}return e}function Dm(a,b){for(var c=1;c<b.length;c++)a.R("breakpoint enabled: "+sm(b[c])+" ("+b[0]+")");return b.length-1}
            function Vc(a,b,c,d){if(void 0===d)Vc(a,b,c,a.Re),Vc(a,b,c,a.Bd);else for(var e=1;e<d.length;e++){var g=a.$b(d[e]);if(g>=b&&g<b+c){var l=a.ma;l.na[g>>>l.Ca].Xe(g&l.Ga,d==a.Bd)}}}function zm(a,b){if(void 0!==b)Am(a,b,a.Mc,!0),a.Jc=0;else for(var c=1;c<a.Mc.length;c++){var d=a.Mc[c];if(d.Fg){if(!Bm(a,a.Mc,d,!0))break;c=0}}}function Cm(a,b){var c=a.jo&-65536;(b&c)==c&&(b&=1048575);return b}
            function Am(a,b,c,d){var e=!1;if(!a.yl++){b=Cm(a,b);a.qa(-2147483632)&&204==jf(a.O,b)&&(e=!0);for(var g=1;!e&&g<c.length;g++){var l=c[g];null!=l.ia&&(l.Ba=null);b==Cm(a,a.$b(l))&&(l.Fg?Bm(a,c,l,!0):d||a.R("breakpoint hit: "+sm(l)+" ("+c[0]+")"),e=!0)}}a.yl--;return e}
            function um(a,b,c,d){for(var e=Sl(a,b.za,b.ia,b.Ba),g=a.Qa(b,1),l=2;(102==g||103==g)&&l--;)102==g?b.ad=!b.ad:b.Zc=!b.Zc,g=a.Qa(b,1);var l=a.th[g],p=l[0],v=-1;205==p&&(p=a.Qa(b,1),l=gm[p]||dm,g|=p<<8,p=l[0]);p>=Zl.length&&(v=a.Qa(b,1),l=hm[p-Zl.length][v>>3&7]);var p=Zl[l[0]],w=l.length-1,F="";if(164<=g&&167>=g||170<=g&&175>=g)w=0,b.ad&&"W"==p.slice(-1)&&(p=p.slice(0,-1)+"D");for(var g=null,K=!0,J=1;J<=w;J++){var I,T;I="";T=l[J];if(void 0!==T){null==g&&(g=T>>14);var Z=T&15;if(0!=Z)if(15==Z)K=!1;else{var S=
            T&240;if(128<=S)if(0>v&&(v=a.Qa(b,1)),160<=S)I=Em(a,v>>3&7,T,b);else{I=a;var Z=b,X="",S=v>>6,xa=v&7;if(3>S){var qa=void 0;if(!S&&(!Z.Zc&&6==xa||Z.Zc&&5==xa))S=2;else{if(Z.Zc)if(4!=xa)xa+=8;else{var X=S,Sa=I.Qa(Z,1),qa=Sa>>6,Fb=Sa>>3&7,Sa=Sa&7,Va="";if(X||5!=Sa)Va=bm[Sa+8];4!=Fb&&(Va&&(Va+="+"),Va+=bm[Fb+8],qa&&(Va+="*"+(1<<qa)));X=Va}X||(X=bm[xa])}1==S?(qa=I.Qa(Z,1),qa&128?(qa=qa<<24>>24,X+="-"+h(-qa,2)):X+="+"+h(qa,2)):2==S&&(X&&(X+="+"),Z.Zc?(qa=I.fe(Z,4),X+=h(qa)):(qa=I.ra(Z,2),X+=h(qa,4)));X=
            "["+X+"]";7==(T&15)&&(X="FAR "+X)}else X=Em(I,xa,T,Z);I=X}else if(16==S)I="1";else if(0==S){I=a;Z=b;S=" ";switch(T&15){case 1:T&12288&&(S=h(I.Qa(Z,1),2));break;case 2:S=h(I.Qa(Z,1)<<24>>24,4);break;case 4:case 8:if(Z.ad){S=h(I.fe(Z,4));break}case 3:S=h(I.ra(Z,2),4);break;case 7:S=sm(Sl(I,I.qc(Z,!0),I.ra(Z,2),null,Z.ad,Z.Zc));break;default:S="imm("+ga(T)+")"}I=S}else 32==S?(b.Zc?(T=8,I=a.fe(b,4)):(T=4,I=a.ra(b,2)),I="["+h(I,T)+"]"):48==S?(I=1==Z?a.Qa(b,1)<<24>>24:a.qc(b,!0),I=b.za+I&(b.ad?-1:65535),
            I=Fm(a,Sl(a,I,b.ia))[0]||h(I,b.ad?8:4)):96==S?I=Em(a,(T&3840)>>8,T,b):112==S?I=Em(a,(T&3840)>>8,176,b):64==S?I="DS:[SI]":80==S&&(I="ES:[DI]");if(!I||!I.length){F="INVALID";break}0<F.length&&(F+=",");F+=I}}}l=sm(e)+" ";v="";do v+=h(a.Qa(e,1),2);while(e.Ba!=b.Ba);l+=ma(v,16);l+=ma(p,8);F&&(l+=" "+F);a.O.ka<$l[g]&&(c=$l[g]+" CPU only");c&&K&&(l=ma(l,56)+";"+c,l=a.O.fa.Ag?l+("cycles="+cd(a.O).toString()+" cs="+h(a.O.T.Wh)):l+(null!=d?"="+d.toString():""));Gm(a,b,K);return l}
            function Em(a,b,c,d){var e=c&240;if(176==e){if(5<b||4<=b&&a.O.ka<Lb)return"??";b+=16}else if(208==e)b+=32;else if(a=c&15,3<=a&&(8>b&&(b+=8),5==a||4==a&&d.ad))b+=16;return am[b]}function Hm(a,b){var c;switch(b){case "V":c=We(a.O);break;case "D":c=a.O.aa&Pb;break;case "I":c=a.O.aa&Qb;break;case "T":c=a.O.aa&Rb;break;case "S":c=Ve(a.O);break;case "Z":c=Ue(a.O);break;case "A":c=Te(a.O);break;case "P":c=Se(a.O);break;case "C":c=Re(a.O);break;default:c=0}return b+(c?"1":"0")+" "}
            function Im(a,b){8<=b&&15>=b&&4<a.vg&&(b+=16);var c=am[b];32==b&&80286==a.O.ka&&(c="MS");return c+"="+vm(a,b)+" "}function Jm(a,b,c){return b.qi+"="+h(b.ia,4)+(c?"["+h(b.ya,a.If)+","+h(b.gb,b.gb&-65536?8:4)+"]":"")}function Km(a,b,c,d,e){return b+"="+(null!=c?h(c,4):"")+"["+h(d,a.If)+","+h(e-d,4)+"]"}
            function Lm(a,b){var c;void 0===b&&(b=!!(a.O.hb&1));c=Im(a,8)+Im(a,11)+Im(a,9)+Im(a,10)+(4<a.vg?"\n":"")+Im(a,12)+Im(a,13)+Im(a,14)+Im(a,15)+"\n"+Jm(a,a.O.ua,b)+" "+Jm(a,a.O.bb,b)+" "+Jm(a,a.O.Ma,b)+" ";if(b){var d="TR="+h(a.O.cb.ia,4),e=a.ma,e="A20="+(e.lg||e.Vh!=e.Db?"OFF ":"ON ");a.O.ka<Lb&&(d="\n"+d,c+=e,e="");c+="\n"+Jm(a,a.O.ta,b)+" ";a.O.ka>=Lb&&(e+="\n",c+=Jm(a,a.O.xc,b)+" "+Jm(a,a.O.yc,b)+"\n");c+=Km(a,"LD",a.O.yd.ia,a.O.yd.ya,a.O.yd.ya+a.O.yd.gb)+" "+Km(a,"GD",null,a.O.Fd,a.O.Cf)+" "+Km(a,
            "ID",null,a.O.Gd,a.O.Ye)+" ";c=c+(d+" "+e)+Im(a,32);a.O.ka>=Lb&&(c+=Im(a,34)+Im(a,35))}else a.O.ka>=Lb&&(c+=Jm(a,a.O.xc,b)+" "+Jm(a,a.O.yc,b)+" ");return c+=Im(a,23)+Hm(a,"V")+Hm(a,"D")+Hm(a,"I")+Hm(a,"T")+Hm(a,"S")+Hm(a,"Z")+Hm(a,"A")+Hm(a,"P")+Hm(a,"C")}
            function Mm(a,b,c){var d;d=2==c?a.Jn:a.od;c=d.za;var e=d.ia;d=d.Ba;if(void 0!==b){"%"==b.charAt(0)&&(b=b.substr(1),c=0,e=null);var g=b;d=null;if(g.match(/^[a-z_][a-z0-9_]*$/i)){d={};for(var l=g.toUpperCase(),p=0;p<a.Sc.length;p++){var g=a.Sc[p][0],v=a.Sc[p][2][l];if(void 0!==v){l=v.o;void 0!==l&&(p=v.s,void 0===p&&(p=g>>>4),d.za=l,d.ia=p,void 0!==v.p&&(d.Ba=v.p));break}}}if(d&&null!=d.za)return d;d=b.indexOf(":");0>d?null!=e?(c=jm(a,b),d=null):d=jm(a,b):(e=jm(a,b.substring(0,d)),c=jm(a,b.substring(d+
            1)),d=null)}d=Sl(a,c,e,d);rm(a,d);return d}function jm(a,b,c){var d;void 0!==b?(d=ya(am,b.toUpperCase()),0<=d&&(b=vm(a,d)),d=fa(b),void 0===d&&a.R("invalid "+(c?c:"value")+": "+b)):a.R("missing "+(c||"value"));return d}
            function nj(a,b,c,d){function e(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0}var g={},l=[],p;for(p in d){var v=d[p];"number"==typeof v&&(d[p]=v={o:v});var w=v.o,F=v.s,K=v.a;void 0!==w&&(void 0!==F&&(g.za=w,g.ia=F,g.Ba=null,a.$b(g),(g.Ba&-65536)==(a.ma.Vh&-65536)&&(g.Ba&=1048575),v.p=g.Ba),pa(l,[w,p],e));K&&(v.a=K.replace(/''/g,'"'))}a.Sc.push([b,c,d,l])}
            function Fm(a,b,c){for(var d=[],e=a.$b(b),g=0;g<a.Sc.length;g++){var l=a.Sc[g][0],p=a.Sc[g][1];if(e>=l&&e<l+p){b=oa(a.Sc[g][3],[b.za],function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0});0<=b?Nm(a,g,b,d):c&&(b=~b,Nm(a,g,b-1,d),Nm(a,g,b,d));break}}return d}function Nm(a,b,c,d){var e={},g=a.Sc[b][3],l=0,p=null;0<=c&&c<g.length&&(l=g[c][0],p=g[c][1]);p&&(e=a.Sc[b][2][p],p="."==p.charAt(0)?null:e.l||p);d.push(p);d.push(l);d.push(e.a);d.push(e.c)}
            function Om(a,b){if("?"==b)a.R("\nfrequency commands:"),a.R("\tclear\tclear all frequency counts");else{var c,d=0;if(a.Dd)if("clear"==b){for(c=0;c<a.Dd.length;c++)a.Dd[c]=[c,0];a.R("frequency data cleared");d++}else if(void 0!==b)a.R("unknown frequency command: "+b),d++;else{var e=a.Dd.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var g=e[c][0],l=e[c][1];l&&(a.R((Zl[a.th[g][0]]+"  ").substr(0,5)+" ("+k(g)+"): "+l+" times"),d++)}}d||a.R("no frequency data available")}}
            function Pm(a,b){var c=Mm(a,b,1);if(null!=c.za||null!=c.Ba){var d=a.$b(c);a.R((b?b+": ":"")+sm(c)+" (%"+h(d,a.If)+")");d=Fm(a,c,!0);if(d.length){var e,g;d[0]&&(g="",(e=c.za-d[1])&&(g=" + "+ga(e)),a.R(d[0]+" ("+jh(d[1],c.ia)+")"+g));4<d.length&&d[4]&&(g="",(e=d[5]-c.za)&&(g=" - "+ga(e)),a.R(d[4]+" ("+jh(d[5],c.ia)+")"+g))}else a.R("no symbols")}}
            function Qm(a,b){if("l"==b[0]&&void 0===b[1]||"?"==b[1])a.R("\nlist/load commands:"),a.R("\tl [address] [drive #] [sector #] [# sectors]"),a.R("\tln [address] lists symbol(s) nearest to address");else if("ln"==b[0])Pm(a,b[1]);else{var c="json"==b[1],d,e=0,g=0,l=c?{}:Mm(a,b[1],2);d=jm(a,b[2],"drive #");if(void 0!==d){if(!c){e=jm(a,b[3],"sector #");if(void 0===e)return;g=jm(a,b[4],"# of sectors");void 0===g&&(g=1)}var p=a.Gp;2<=d&&a.ao&&(d-=2,p=a.ao);if(p){var v=p.Hn(d);if(v)if(v.xa)if(c)a.R(v.xa.toJSON());
            else if(p.So(v,e,g)){for(var w=0,F=!1,c=sm(l);!F&&0<v.ob--;)(function(a,b){p.tc(v,function(c){0>c?(a.R("out of data at address "+sm(b)),F=!0):(a.dd(b,c,1),w++)})})(a,l);a.R(w+" bytes read at "+c)}else a.R("sector "+e+" request out of range");else a.R("drive "+d+" not loaded");else a.R("invalid drive: "+d)}else a.R("disk controller not present")}}}
            function xm(a,b,c){if(b&&"?"==b[1])a.R("\nregister commands:"),a.R("\tr\t\tdisplay all registers"),a.R("\tr [target=#]\tmodify target register"),a.R("supported targets:"),a.R("\tall registers and flags V,D,I,S,Z,A,P,C");else{var d;if(null!=b&&1<b.length){var e=b[1];if("p"==e)d=80286<=a.O.ka;else{c=null;var g=e.indexOf("=");if(0<g)c=e.substr(g+1),e=e.substr(0,g);else if(2<b.length)c=b[2];else{a.R("missing value for "+b[1]);return}b=!1;g=fa(c,16);if(!isNaN(g)){b=!0;var l=e.toUpperCase();"E"==l.charAt(0)&&
            4>=a.vg&&(l=null);switch(l){case "AL":a.O.F=a.O.F&-256|g&255;break;case "AH":a.O.F=a.O.F&-65281|g<<8&255;break;case "AX":a.O.F=a.O.F&-65536|g&65535;break;case "BL":a.O.D=a.O.D&-256|g&255;break;case "BH":a.O.D=a.O.D&-65281|g<<8&255;break;case "BX":a.O.D=a.O.D&-65536|g&65535;break;case "CL":a.O.G=a.O.G&-256|g&255;break;case "CH":a.O.G=a.O.G&-65281|g<<8&255;break;case "CX":a.O.G=a.O.G&-65536|g&65535;break;case "DL":a.O.H=a.O.H&-256|g&255;break;case "DH":a.O.H=a.O.H&-65281|g<<8&255;break;case "DX":a.O.H=
            a.O.H&-65536|g&65535;break;case "SP":u(a.O,r(a.O)&-65536|g&65535);break;case "BP":a.O.L=a.O.L&-65536|g&65535;break;case "SI":a.O.K=a.O.K&-65536|g&65535;break;case "DI":a.O.J=a.O.J&-65536|g&65535;break;case "DS":Me(a.O,g);break;case "ES":Ne(a.O,g);break;case "SS":wd(a.O,g);break;case "CS":Le(a.O,g);a.od=Sl(a,q(a.O),Mb(a.O));break;case "IP":C(a.O,g);a.od=Sl(a,q(a.O),Mb(a.O));break;case "PC":case "PS":Bd(a.O,g);break;case "C":g?Ye(a.O):Ze(a.O);break;case "P":g?(e=a.O,e.resultType&=-3,e.aa|=Vb):(e=a.O,
            e.resultType&=-3,e.aa&=~Vb);break;case "A":g?ff(a.O):df(a.O);break;case "Z":g?gf(a.O):ef(a.O);break;case "S":g?(e=a.O,e.resultType&=-17,e.aa|=Sb):(e=a.O,e.resultType&=-17,e.aa&=~Sb);break;case "I":g?(e=a.O,e.aa|=Qb):(e=a.O,e.aa&=~Qb);break;case "D":g?(e=a.O,e.aa|=Pb):(e=a.O,e.aa&=~Pb);break;case "V":g?$e(a.O):af(a.O);break;default:var p=!0;if(80286<=a.O.ka)switch(p=!1,l){case "MS":hf(a.O,g);break;case "TR":a.O.cb.load(g,!0)===n&&(b=!1);break;default:if(p=!0,a.O.ka>=Lb)switch(p=!1,l){case "EAX":a.O.F=
            g;break;case "EBX":a.O.D=g;break;case "ECX":a.O.G=g;break;case "EDX":a.O.H=g;break;case "ESP":u(a.O,g);break;case "EBP":a.O.L=g;break;case "ESI":a.O.K=g;break;case "EDI":a.O.J=g;break;case "FS":a.O.xc.load(g);break;case "GS":a.O.yc.load(g);break;case "CR0":a.O.hb=g;break;case "CR2":a.O.Yf=g;break;case "CR3":a.O.uf=g;break;default:p=!0}}if(p){a.R("unknown register: "+e);return}}}if(!b){a.R("invalid value: "+c);return}Zc(a.O);a.R("\nupdated registers:");c=!0}}a.R((c?"":"\n")+Lm(a,d));a.od=Sl(a,q(a.O),
            Mb(a.O));ym(a,sm(a.od))}}function Rm(a,b,c){for(var d=null,e=b.za,g=e,l=1;6>=l;l++){if(2<l){b.za=e;b.Ba=null;var p=um(a,b);if(0<p.indexOf("CALL")||c&&0<p.indexOf("INT")){d=p;break}}if(!--e)break}b.za=g;return d}function Sm(a,b,c){var d="tr"==b;b=null!=c?+c:1;var e=1==b?0:1;Ja(b,function(){return mb(a,!0)&&a.kh(e,d,!1)},function(){Zc(a.O);mb(a,!1)})}function Gm(a,b,c){b.nl=b.ad||b.Zc;c&&(b.ad=4==a.O.ta.pa,b.Zc=4==a.O.ta.Hd);b.we=c}
            function ym(a,b,c,d){b=Mm(a,b,1);if(null!=b.za){void 0===d&&(d=1);var e=Sl(a,a.ko,b.ia,a.ma.Vh),e=256;if(void 0!==c){e=Mm(a,c,1);if(null==e.za||e.za<b.za)return;e=e.za-b.za;if(256<e){a.R("range too large");return}d=-1}var g=b.za!=a.od.za;c=0;for(Gm(a,b,!0);0<e&&d--;){a.Qa(b);var l=b.Ba,p=nb(a,!1)||a.Jc?a.Nd:null,v=null!=p?"cycles":null,w=Fm(a,b);if(w[0]){var F=w[0]+":",g=!1;w[2]&&(F+=" "+w[2]);a.R(F)}g&&a.R();w[3]&&(v=w[3],p=null);g=um(a,b,v,p);b.we||d||d++;a.R(g);a.od=b;e-=b.Ba-l;g=!1;c++}}}
            function nm(a,b,c){if(c)if(b){0>a.sd&&a.gd.length&&(a.sd=0);if(0>a.sd||b!=a.gd[a.sd])a.gd.splice(0,0,b),a.sd=0;a.sd--}else b=a.gd[a.sd+1];a=b?b.split(0<=b.indexOf("|")?"|":";"):[""];for(var d in a)a[d]=na(a[d]);return a}
            function Wl(a,b){var c=!0;try{if(b.length||(a.zg?(a.R("ended assemble @"+sm(a.Nf)),a.od=a.Nf,a.zg=!1):b="?"),b=b.toLowerCase(),pb(a)&&0<b.length){if(a.zg)b="a "+sm(a.Nf)+" "+b;else{var d,e,g;switch(b){case "reset":return a.Fa&&a.Fa.reset(),!0;case "ver":return a.R("PCjs version 1.18.3 ("+a.O.ka+",RELEASE,NOPREFETCH"+(rb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)"),!0;default:for(e=b.charAt(0),g=1;g<b.length;g++){d=b.charAt(g);if(" "==d)break;if("r"==e||"a">d||"z"<d){b=b.substring(0,g)+" "+b.substring(g);
            break}}}}var l=b.split(" ");switch(l[0].charAt(0)){case "a":var p=Mm(a,l[1],1);if(null!=p.za)if(a.Nf=p,void 0===l[2])a.R("begin assemble @"+sm(p)),a.zg=!0,Zc(a.O);else{var v;a.R("not supported yet");v=[];if(v.length){for(var w=0;w<v.length;w++)a.dd(p,v[w],1);a.R(um(a,a.Nf))}}break;case "b":a:{var F=l[1],K=l[0].charAt(1);if(K&&"?"!=K)if("l"==K)w=0,w+=Dm(a,a.Mc),w+=Dm(a,a.Re),(w+=Dm(a,a.Bd))||a.R("no breakpoints");else if(void 0===F)a.R("missing breakpoint address");else{w={};if("*"!=F&&(w=Mm(a,F,1),
            null==w.za))break a;F=null==w.za?F:ga(w.za);"c"==K?null==w.za?(Tl(a),a.R("all breakpoints cleared")):Bm(a,a.Mc,w,!0)||Bm(a,a.Re,w,!0)||Bm(a,a.Bd,w,!0)||a.R("breakpoint missing: "+sm(w)):"i"==K?a.R("breakpoint "+(nc(a.ma,w.za)?"enabled":"cleared")+": port "+F+" (input)"):"o"==K?a.R("breakpoint "+(rc(a.ma,w.za)?"enabled":"cleared")+": port "+F+" (output)"):null!=w.za&&("p"==K?a.Xe(a.Mc,w):"r"==K?a.Xe(a.Re,w):"w"==K?a.Xe(a.Bd,w):a.R("unknown breakpoint command: "+K))}else a.R("\nbreakpoint commands:"),
            a.R("\tbi [p]\ttoggle break on input port [p]"),a.R("\tbo [p]\ttoggle break on output port [p]"),a.R("\tbp [a]\tset exec breakpoint at addr [a]"),a.R("\tbr [a]\tset read breakpoint at addr [a]"),a.R("\tbw [a]\tset write breakpoint at addr [a]"),a.R("\tbc [a]\tclear breakpoint at addr [a]"),a.R("\tbl\tlist all breakpoints")}break;case "c":a.Ih&&(a.Ih.value="");break;case "d":a:{var J=l[0],w=l[1],I=l[2],T;if("?"==w){w="";for(T in cm)a.Nk[T]&&(w&&(w+=","),w+=T);w+=",state,symbols";a.R("\ndump commands:");
            a.R("\tdb [a] [#]    dump # bytes at address a");a.R("\tdw [a] [#]    dump # words at address a");a.R("\tdd [a] [#]    dump # dwords at address a");a.R("\tdh [#]        dump # instructions prior");w.length&&a.R("dump extensions:\n\t"+w)}else if("state"==w)a.R(Tm(a.Fa,!0));else if("symbols"==w)for(w=0;w<a.Sc.length;w++){var Z=a.Sc[w][0],S=a.Sc[w][2],X;for(X in S)if("."!=X.charAt(0)){var xa=S[X],qa=xa.o;if(void 0!==qa){var Sa=xa.s;void 0===Sa&&(Sa=Z>>>4);var Fb=S[X].l;Fb&&(X=Fb);a.R(jh(qa,Sa)+" "+X)}}}else if("dh"==
            J)tm(a,w);else{"ds"==J&&(J="d",I=w,w="desc");for(T in cm)if(w==T){var Va=a.Nk[T];Va?Va(I):a.R("no dump registered for "+w);break a}var ca=Mm(a,w,2);if(null!=ca.za&&(null!=ca.ia||null!=ca.Ba)){var ta="",da=0,sb="dd"==J?4:"dw"==J?2:1,l=16/sb|0;I&&("l"==I.charAt(0)&&(I=I.substr(1)),(da=+I)&&(da=(da+l-1)/l|0));da||(da=8);for(I=0;I<da;I++){for(var Gb=l=0,Za="",$a="",w=sm(ca),J=0;16>J;J++){var Ha=a.Qa(ca,1),l=l|Ha<<(Gb++<<3);Gb==sb&&(Za+=h(l,2*sb),Za+=1==sb?7==J?"-":" ":"  ",l=Gb=0);$a+=32<=Ha&&128>Ha?
            String.fromCharCode(Ha):"."}ta&&(ta+="\n");ta+=w+"  "+Za+" "+$a}ta&&a.R(ta);a.Jn=ca}}}break;case "e":var Ad=l[1];if(void 0===Ad)a.R("missing address");else{var bd=Mm(a,Ad,2);if(null!=bd.za)for(w=2;w<l.length;w++){var Kc=fa(l[w],16);if(void 0===Kc){a.R("unrecognized value: "+k(Kc));break}a.R("setting "+sm(bd)+" to "+k(Kc));a.dd(bd,Kc,1)}}break;case "f":Om(a,l[1]);break;case "g":a:{var Gj=l[1];if(void 0!==Gj){var Hj=Mm(a,Gj,1);if(null==Hj.za)break a;a.Xe(a.Mc,Hj,!0)}a.ag(!0)||a.R('cpu busy, "g" command ignored')}break;
            case "h":var Ij=l[1];a.fa.qb&&void 0===Ij?(a.R("halting"),a.zb()):tm(a,Ij);break;case "i":var jg=l[1];if(jg&&"?"!=jg){var kg=jm(a,jg);if(void 0!==kg){var jn=pc(a.ma,kg);a.R(ga(kg)+": "+k(jn))}}else a.R("\ninput commands:"),a.R("\ti [p]\tread port [p]"),a.R("warning: port accesses can affect hardware state");break;case "k":w=0;Gb=a.O.ta.ia;Za=Sl(a);$a=Sl(a,r(a.O),a.O.ua.ia);for(a.R("stack trace for "+sm($a));10>w;){ca=null;for(Ha=256;$a.za>>>0<a.O.tk>>>0;){Za.za=a.qc($a,!0);if(null==$a.Ba||!Ha--)break;
            Za.ia=Gb;if(ca=Rm(a,Za))break;Za.ia=a.qc($a);if(ca=Rm(a,Za,!0)){Gb=a.qc($a,!0);0<ca.indexOf("INT")&&a.qc($a,!0);break}}if(!ca)break;ca=ma(ca,50)+";stack="+sm($a)+" return="+sm(Za);a.R(ca);w++}w||a.R("no return addresses found");break;case "l":Qm(a,l);break;case "m":a:{w=null;da=l[1];"?"==da&&(da=void 0);if(void 0!==da){ca=0;if("all"==da)ca=1610481663,da=null;else if("on"==da)w=!0,da=null;else if("off"==da)w=!1,da=null;else{"keys"==da&&(da="key");"kbd"==da&&(da="keyboard");for(ta in cm)if(da==ta){ca=
            cm[ta];w=!!(a.Yb&ca);break}if(!ca){a.R("unknown message category: "+da);break a}}ca&&("on"==l[2]?(a.Yb|=ca,w=!0):"off"==l[2]&&(a.Yb&=~ca,w=!1))}ca=0;Ha="";for(ta in cm)if(!da||da==ta)if(sb=!!(a.Yb&cm[ta]),null===w||w==sb)Ha&&(Ha+=","),++ca%10||(Ha+="\n\t"),"key"==ta&&(ta="keys"),Ha+=ta;void 0===da&&a.R("\nmessage commands:\n\tm [category] [on|off]\tturn categories on/off");a.R((null!==w?w?"messages on:  ":"messages off: ":"message categories:\n\t")+(Ha||"none"))}break;case "o":var lg=l[1],kn=l[2];
            if(lg&&"?"!=lg){var mg=jm(a,lg,"port #"),ng=jm(a,kn);void 0!==mg&&void 0!==ng&&(tc(a.ma,mg,ng),a.R(ga(mg)+": "+k(ng)))}else a.R("\noutput commands:"),a.R("\to [p] [b]\twrite byte [b] to port [p]"),a.R("warning: port accesses can affect hardware state");break;case "p":case "pr":var Jj="pr"==l[0]?1:0,w=1+Jj;if(a.Jc)a.R("step in progress");else{var Oe,ca=!1,Jb=Sl(a,q(a.O),Mb(a.O));do switch(Oe=!1,a.Qa(Jb)){case 38:case 46:case 54:case 62:case 100:case 101:case 102:case 103:case 240:om(a,Jb,1);Oe=!0;
            break;case 204:case 206:a.Jc=w;om(a,Jb,1);break;case 205:case 224:case 225:case 226:a.Jc=w;om(a,Jb,2);break;case 232:a.Jc=w;om(a,Jb,3);break;case 154:a.Jc=w;om(a,Jb,5);break;case 255:var Kj=a.qc(Jb)&14591;a.Jc=4351==Kj||6399==Kj?w:0;break;case 243:case 242:om(a,Jb,1);ca=Oe=!0;break;case 108:case 109:case 110:case 111:case 164:case 165:case 166:case 167:case 170:case 171:case 172:case 173:case 174:case 175:ca&&(a.Jc=w,om(a,Jb,1))}while(Oe);a.Jc?(a.Xe(a.Mc,Jb,!0),a.ag()||(a.O.ed(),a.Jc=0)):Sm(a,Jj?
            "tr":"t")}break;case "r":xm(a,l);break;case "t":case "tr":Sm(a,l[0],l[1]);break;case "u":ym(a,l[1],l[2],8);break;case "x":a:if(void 0===l[1]||"?"==l[1])a.R("\nexecution options:"),a.R("\tcs int #\tset checksum cycle interval to #"),a.R("\tcs start #\tset checksum cycle start count to #"),a.R("\tcs stop #\tset checksum cycle stop count to #"),a.R("\tsp #\t\tset speed multiplier to #");else switch(l[1]){case "cs":var Hd;void 0!==l[3]&&(Hd=+l[3]);switch(l[2]){case "int":a.O.T.Ng=Hd;break;case "start":a.O.T.Xh=
            Hd;break;case "stop":a.O.T.Pg=Hd;break;default:a.R("unknown cs option");break a}void 0!==Hd&&Yc(a.O);a.R("checksums "+(a.O.fa.Ag?"enabled":"disabled"));break;case "sp":void 0!==l[2]&&gd(a.O,+l[2]);a.R("target speed: "+Ib(a.O)+" ("+a.O.T.Ce+"x)");break;default:a.R("unknown option: "+l[1])}break;case "?":var w="commands:",og;for(og in Yl)w+="\n"+ma(og,7)+Yl[og];rf(a)||(w+="\nnote: frequency/history disabled if no exec breakpoints");a.R(w);break;default:a.R("unknown command: "+b),c=!1}}}catch(Lj){a.R("debugger error: "+
            (Lj.stack||Lj.message)),c=!1}return c}Pa(function(){for(var a=kb(window.document,"pcjs","debugger"),b=0;b<a.length;b++){var c=a[b],d=ib(c),d=new Rl(d);jb(d,c)}});function Je(a,b,c){this.id=a.id;this.key=Um(a,b,c);this.Y=a.Y;Vm(this,a.ls)}function Um(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
            Je.prototype={constructor:Je,set:function(a,b){try{this[this.id][a]=b}catch(c){}},get:function(a){return this[this.id][a]||null},value:function(){return this[this.id]},data:function(){return this[this.id]},load:function(a){return a?(this[this.id]=a,this.ml=!0):this.ml?!0:Ea()&&(a=Fa(this.key))?(this[this.id]=a,this.ml=!0):!1},parse:function(){var a=!0;try{this[this.id]=JSON.parse(this[this.id])}catch(b){Ba(b.message||b),a=!1}return a},toString:function(){var a=this[this.id];return"string"==typeof a?
            a:JSON.stringify(a)},clear:function(a){Vm(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(g){}b.splice(c,1);c=0}},qa:function(a){return this.Y?this.Y.qa(null==a?16777216:a|16777216):!1},ab:function(a){this.Y&&this.Y.message(a)}};function Vm(a,b){a[a.id]={};b&&a.set("parms",b);a.ml=!1}
            function Wm(a){var b=!0;if(Ea()){var c=JSON.stringify(a[a.id]);Ga(a.key,c)||(Ba("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
            function Xm(a,b,c){Ua.call(this,"Computer",a,Xm,67108864);this.fa.jc=!1;this.Be=a.busWidth||a.buswidth;this.wd=Ym;this.ri=null;this.ej=!1;this.url=b?b.url:null;this.Ks=(Math.random()+.1).toString(36).substr(2,12);this.xd=Zm(this);if(this.O=hb("CPU",this.id)){this.Y=hb("Debugger",this.id);this.ma=new Zb({id:this.fo+".bus",buswidth:this.Be},this.O,this.Y);var d,e=fb(this.id);if((this.Ge=hb("Panel",this.id))&&this.Ge.Ih)for(b=0;b<e.length;b++)d=e[b],d.Da=this.Ge.Da,d.R=this.Ge.R,d.Ih=this.Ge.Ih;for(b=
            0;b<e.length;b++)d=e[b],d.Kc&&d.Kc(this,this.ma,this.O,this.Y);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.yk=d:this.wd=parseInt(d,10));var g;if(a=Ya&&Ya.state||(g=!0,a.state))b=this.Qo=a,g||(this.ej=!0,this.wd=Ym),this.wd&&(this.Ck=new Je(this,"1.18.3"),this.Ck.load()?b=null:delete this.Ck);!b&&this.wd&&(g=null,this.xd&&(g=Aa()+"/api/v1/user?req=load&user="+this.xd+"&state="+Um(this,"1.18.3")),b=g)&&(this.ej=!0);b?za(b,!0,null,this,this.ir):ob(this);c||$m(this,this.nk)}else Ba("Unable to find CPU component")}
            eb(Xm);var Ym=0;f=Xm.prototype;f.Hg=function(){return this.Ks};f.kf=function(){return this.xd?this.xd:""};f.ir=function(a,b,c){c?(this.yk=null,this.ej=!1,this.Da("Unable to load machine state from server (error "+c+(b?": "+na(b):"")+")")):this.ri=b;ob(this)};function $m(a,b,c){for(var d=fb(a.id),e=0;e<=d.length;e++){var g=e<d.length?d[e]:a;if(!pb(g)){pb(g,function(){$m(a,b,c)});return}}b.call(a,c)}
            function an(a,b){var c=new Je(a,"1.18.3","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.Da("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
            f.nk=function(a){void 0===a&&(a=this.wd||(this.ri?1:Ym));var b=!1,c=!1;this.Un=!1;var d=this.Ck||new Je(this,"1.18.3");if(-1==a)b=!0;else if(a>Ym){if(d.load(this.ri)){this.eg=new Je(this,"1.18.3","failsafe");this.eg.load()&&(bn(this,d),a=2,Vm(this.eg));this.eg.set("timestamp",sa());Wm(this.eg);var e=this.wd&&!this.ej;if(1==a||Ca("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var g=d.get("code"),l=d.get("data");g&&("ok"==g?d.load(l):("error"==
            g&&"no machine state"!=l?(this.Da("Error: "+l),"unable to verify user"==l&&(Ga("user",""),this.xd=null)):this.R(g+": "+l),Vm(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&an(this,c?d:null)}else 2==a&&d.clear()}else an(this);delete this.ri;delete this.Ck}e=fb(this.id);for(g=0;g<e.length;g++)l=e[g],l!==this&&l!=this.O&&(c=cn(this,l,d,b,c));b=[d,a,c];-1!=a?$m(this,this.Ln,b):this.Ln(b)};
            function cn(a,b,c,d,e){if(!b.fa.jc){b.fa.jc=!0;if(b.lc){var g=null;e&&((g=c.get(b.id))||(g=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof g&&(g=null);!b.lc(g,d)&&g&&(Ba("Unable to restore state for "+b.type),a.Qo&&!a.ri?(c.clear(),a.wd=Ym,window&&window.location.reload()):a.Un=!0,b.lc(null),e=!1)}if(!d&&b.Gn)for(a=b.Gn.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
            f.Ln=function(a){var b=a[0],c=0>a[1];a=a[2];this.fa.jc=!0;this.Rn||(this.R("PCjs v1.18.3\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Rn=!0);this.O&&(cn(this,this.O,b,c,a),$c(this.O));this.Un&&(bn(this,b),b.clear());!c&&this.eg&&(this.eg.clear(),delete this.eg)};
            function bn(a,b){if(Ca("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.kf(),d=b.toString(),e={app:"PCjs",ver:"1.18.3"};e.url=a.url;e.user=c;e.type="bug";e.data=d;za("http://www.pcjs.org/api/v1/report",!0,e)}}
            function Tm(a,b,c){var d,e="none",g=new Je(a,"1.18.3"),l=new Je(a,"1.18.3","validate"),p=sa();l.set("timestamp",p);g.set("timestamp",p);g.set("version","1.18.3");g.set("url",window?window.location.href:null);g.set("browser",window?window.navigator.userAgent:"");a.O&&a.O.kc&&(c&&a.O.zb(),d=a.O.kc(b,c),"object"===typeof d&&g.set(a.O.id,d),c&&(a.O.fa.jc=!1,!1===d&&(e=null)));for(var p=fb(a.id),v=0;v<p.length;v++){var w=p[v];w.fa.jc&&(w.kc&&(d=w.kc(b,c),"object"===typeof d&&g.set(w.id,d)),c&&(w.fa.jc=
            !1,!1===d&&(e=null)))}e&&(c?(p=d=!1,b?(a.xd&&dn(a,a.xd,g.toString()),Wm(l)&&Wm(g)||(e=null,d=p=!0)):a.wd&&(d=!0,p=3==a.wd),d&&g.clear(p)):e=g.toString());c&&(a.fa.jc=!1);return e}f.reset=function(){this.ma&&this.ma.reset&&(this.ab("Resetting "+this.ma.type),this.ma.reset());for(var a=fb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ma&&c.reset&&(this.ab("Resetting "+c.type),c.reset())}};
            f.start=function(a,b){for(var c=fb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};f.stop=function(a,b){for(var c=fb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
            f.Nb=function(a,b,c){var d=this;switch(b){case "save":return this.va[b]=c,c.onclick=function(){var a=Zm(d,!0);if(a){var b=!(!d.wd||d.yk),c=Tm(d,b);b?dn(d,a,c):d.Da("Resume disabled, machine state not saved")}},!0;case "reset":return this.va[b]=c,c.onclick=function(){fd(d)},!0}return!1};
            function Zm(a,b){var c=a.xd;c||(c=Fa("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("To save machine states on the pcjs.org server, you need a user ID (email support@pcjs.org).\n\nOnce you have an ID, enter it below.","")),c&&((c=en(a,c))||a.Da("Your user ID has not been approved."))):b&&a.Da("Browser local storage is not available"));return c}
            function en(a,b){a.xd=null;var c=za(Aa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Ga("user",c.data),a.xd=c.data)}catch(e){Ba(e.message+" ("+d+")")}return a.xd}
            function dn(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Um(a,"1.18.3");d.data=c;b=za(Aa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.Da("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.Da(c),Ga("user",""),a.xd=null)}}
            function fd(a){if(a.wd&&!a.yk){var b=Ca("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Tm(a,b,!0);!b&&a.Qo?window&&window.location.reload():(b||(a.ol=!0),a.nk(Ym),a.ol=!1)}else a.reset(),a.O&&$c(a.O)}function xb(a,b,c){a=fb(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}
            Pa(function(){for(var a=kb(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=ib(c),c=kb(c,"pcjs","computer"),e=0;e<c.length;e++){var g=c[e],l=ib(g),l=new Xm(l,d,!0);jb(l,g);$m(l,l.nk)}});La.show.push(function(){for(var a=kb(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=ib(a[b]);(c=hb("Computer",c.id))&&c.Rn&&!c.fa.jc&&c.nk(-1)}});
            La.exit.push(function(){for(var a=kb(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=ib(a[b]);(c=hb("Computer",c.id))&&c.fa.jc&&Tm(c,!(!c.wd||c.yk),!0)}});var fn=0;function gn(a,b,c,d,e,g){e("Loading "+a+"...");za(a,!0,null,null,function(l,p,v){v?(p||(p="unable to load "+a+" ("+v+")"),g(p,null)):hn(p,a,b,c,d,e,g)})}
            function hn(a,b,c,d,e,g,l){function p(a,g){if(g)l(g,null);else{if(c){var p=b;p&&0>p.indexOf("/")&&(p=window.location.pathname+p);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" state=$2"+d+"$2":"")+(p?" url=$2"+p+"$2":""))}p=null;if("<"==a.charAt(0))try{window.ActiveXObject||"ActiveXObject"in window?(e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),p=new window.ActiveXObject("Microsoft.XMLDOM"),p.async=!1,p.loadXML(a)):p=(new window.DOMParser).parseFromString(a,"text/xml")}catch(K){p=
            null,a=K.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);l(a,p)}}a?e?ln(a,g,p):p(a,null):l("no data"+(b?" for file: "+b:""),null)}
            function ln(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");za(e,!0,null,null,function(g,l,p){if(p||!l)c(a,"unable to resolve XML reference: "+d[0]+" ("+p+")");else{if(g=d[3])if(p=l.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var v=p[0],w,F=/( [a-z]+=)(['"])(.*?)\2/g;w=F.exec(g);)v=0>v.indexOf(w[1])?v.replace(">",w[0]+">"):v.replace(new RegExp(w[1]+"(['\"])(.*?)\\1"),w[0]);p[0]!=v&&(l=l.replace(p[0],v))}else{c(a,"missing <"+d[1]+"> in "+e);return}l=l.replace(/<\?xml[^>]*>[\r\n]*/,
            "");a=a.replace(d[0],l);ln(a,b,c)}})}else c(a,null)}
            function mn(a,b,c,d){function e(a){if(void 0===p){var b=l&&kb(l,"machine-warning");p=b&&b[0]||l}p&&(p.innerHTML=ka(a))}function g(a){e("Error: "+a);v&&(--fn||Ra(!0));v=!1}var l,p,v=!0;fn++;try{if(l=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.3/components.xsl");var w=function(d,p){if(p){var v=function(d,v){if(v)if(v)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var w=p.transformNode(v);w?(l.outerHTML=w,--fn||Ra(!0)):g("transformNodeToObject failed")}else window.document.implementation&&
            window.document.implementation.createDocument?(w=new XSLTProcessor,w.importStylesheet(v),(w=w.transformToFragment(p,window.document))?l.parentNode?(l.parentNode.replaceChild(w,l),--fn||Ra(!0)):g("invalid machine element: "+a):g("transformToFragment failed")):g("unable to transform XML: unsupported browser");else g("failed to load XSL file: "+c);else g(d)};p?gn(c,null,null,!1,e,v):g("failed to load XML file: "+b)}else g(d)};"<"!=b.charAt(0)?gn(b,a,d,!0,e,w):hn(b,null,a,d,!1,e,w)}else g("missing machine element: "+
            a)}catch(F){g(F.message)}return v}window.embedPC=function(a,b,c,d){Ra(!1);return mn(a,b,c,d)};window.enableEvents=Ra;window.sendEvent=Ta;})();
            
          • pc.js
            (function(){var f,aa,g,ba={163840:[40,1,8],184320:[40,1,9],327680:[40,2,8],368640:[40,2,9],737280:[80,2,9],1228800:[80,2,15],1474560:[80,2,18],2949120:[80,2,36]};
            function ca(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null===d&&(a=a.substr(0,a.length-1))}var e,d=a;(b&&10!=b?16==b?null!==d.match(/^[0-9a-f]+$/i):1:null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
            function da(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ea(a){return"0x"+da(a,2)}function fa(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function ha(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
            var ia={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ja(a){return a.replace(/[&<>"']/g,function(a){return ia[a]})}var ka=Date.now||function(){return+new Date};function la(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}var ma=[31,28,31,30,31,30,31,31,30,31,30,31];
            function na(a,b){var c=0,d=1,e;for(e in a){if(d>=arguments.length)break;d++;c=void 0}return c}function oa(a,b){return(b&a.Mp)>>a.shift}
            function pa(a,b,c,d,e,m){b=!!b;var n=0,p=null,v=fa(a),w=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");b&&(w.onreadystatechange=function(){4===w.readyState&&(p=w.responseText,200==w.status||!w.status&&p.length&&"file:"==(window?window.location.protocol:"file:")||(n=w.status||-1),e&&(d?e.call(d,v,p,n,m):e(v,p,n,m)))});if(c){var G="",N;for(N in c)c.hasOwnProperty(N)&&(G&&(G+="&"),G+=N+"="+encodeURIComponent(c[N]));G=G.replace(/%20/g,"+");w.open("POST",
            a,b);w.setRequestHeader("Content-type","application/x-www-form-urlencoded");w.send(G)}else w.open("GET",a,b),w.send();a=[];b||(p=w.responseText,200!=w.status&&(n=w.status||-1),e&&(d?e.call(d,v,p,n,m):e(v,p,n,m)),a=[n,p]);return a}function qa(){return"http://"+(window?window.location.host:"www.pcjs.org")}function ra(a){window&&window.alert(a)}function sa(a){var b=!1;window&&(b=window.confirm(a));return b}var ta=null;
            function ua(){if(null==ta){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ta=a}return ta}function va(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function wa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}
            function ya(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var Aa={init:[],show:[],exit:[]},Ba=!1,Ca=!0;function Da(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ea(a){Aa.init.push(a)}
            function Fa(a){if(Ca)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){ra("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Ga(a){!Ca&&a?(Ca=!0,Ba&&Ha("init")):Ca=a}function Ha(a){Aa[a]&&Fa(Aa[a])}Da("onload",function(){Ba=!0;Fa(Aa.init)});Da("onpageshow",function(){Fa(Aa.show)});Da(ya("Opera")||ya("iOS")?"onunload":"onbeforeunload",function(){Fa(Aa.exit)});
            function Ia(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Km=b.comment;this.dr=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.gn=this.id.substr(0,b),this.Vg=this.id.substr(b+1)):this.Vg=this.id;this[a]=c;this.ha={Sf:!1,Wc:!1,qk:!1,dc:!1,yd:!1};this.ni=null;this.ha.yd=!1;this.qa={};this.Ra=null;Ja[Ja.length]=this}var Ka=void 0,La={};
            if(window){Ka||(Ka=window.location.search.substr(1));for(var Ma,Na=/\+/g,Oa=/([^&=]+)=?([^&]*)/g;Ma=Oa.exec(Ka);)La[decodeURIComponent(Ma[1].replace(Na," "))]=decodeURIComponent(Ma[2].replace(Na," "))}function Pa(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
            function Qa(a,b){b||(b=Ia);a.prototype=Pa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Ja=[];function Ra(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Ja.length;b++){var d=Ja[b];a&&d.id.indexOf(a)||c.push(d)}return c}function Sa(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<Ja.length;c++)if(Ja[c].id===a)return Ja[c]}return null}
            function Ta(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Ja.length;d++)if(c)c==Ja[d]&&(c=null);else if(!(a!=Ja[d].type||b&&Ja[d].id.indexOf(b)))return Ja[d]}return null}function Ua(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("({"+a+"})")}catch(c){ra(c.message+" ("+a+")")}return b}window&&!window.document.ELEMENT_NODE&&(window.document.ELEMENT_NODE=1);
            function Wa(a,b){for(var c=Xa(b.parentNode,"pcjs-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,m=0;m<e.length;m++){var n=e[m];if(n.nodeType===window.document.ELEMENT_NODE){var p=n.getAttribute("class");if(p)for(var v=p.split(" "),w=0;w<v.length;w++)switch(p=v[w],p){case "pcjs-binding":(p=Ua(n))&&p.binding&&a.Lb(p.type,p.binding,n),w=v.length}}}}
            function Xa(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
            Ia.prototype={constructor:Ia,parent:null,toString:function(){return this.name?this.name:this.id||this.type},Lb:function(a,b,c){switch(b){case "clear":return this.qa[b]||(this.qa[b]=c,c.onclick=function(a){return function(){a.qa.print&&(a.qa.print.value="")}}(this)),!0;case "print":return this.qa[b]||(this.jk=this.qa[b]=c,c.value="",this.pc=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
            this.wa=function(a,b,c){this.pc(a,"notice",c)}),!0;default:return!1}},log:function(){},assert:function(){},pc:function(){},status:function(a){this.pc(this.Vg+": "+a)},wa:function(a,b){b||ra(a)},gc:function(){return this.ha.dc=!0},fc:function(a,b){b&&(this.ha.dc=!1);return!0},oc:function(){return!1}};function Ya(a,b){if(a.ha.qk)return a.ha.Wc&&(a.ha.Wc=!1),a.ha.qk=!1;if(a.ha.yd)return a.pc(a.toString()+" error"),!1;a.ha.Wc=b;return a.ha.Wc}
            function Za(a,b){if(!a.ha.yd&&(a.ha.Sf=!1!==b,a.ha.Sf)){var c=a.ni;a.ni=null;c&&c()}}function $a(a,b){b&&(a.ha.Sf?b():a.ni=b);return a.ha.Sf}function ab(a,b){a.ha.yd=!0;a.wa(b)}var bb="undefined"!==typeof ArrayBuffer;function cb(a){Ia.call(this,"Panel",a,cb);this.canvas=null;this.ee=this.fe=this.Wg=-1}Qa(cb);function db(a,b,c,d){this.tf=[a,b,c,d];this.Jj=null;void 0===a&&(this.tf[0]=256*Math.random()|0,this.tf[1]=256*Math.random()|0,this.tf[2]=256*Math.random()|0,this.tf[3]=255,this.Jj=null)}
            db.prototype.toString=function(){this.Jj||(this.Jj="#"+da(this.tf[0],2)+da(this.tf[1],2)+da(this.tf[2],2));return this.Jj};function eb(a,b,c,d){this.x=a;this.y=b;this.Kc=c;this.Vc=d}eb.prototype.contains=function(a,b){return a>=this.x&&a<this.x+this.Kc&&b>=this.y&&b<this.y+this.Vc};function fb(a,b,c,d){void 0===d&&(d=b>=c>>2);d?(b=new eb(a.x,a.y,a.Kc,a.Vc*b/c|0),a.y+=b.Vc,a.Vc-=b.Vc):(b=new eb(a.x,a.y,a.Kc*b/c|0,a.Vc),a.x+=b.Kc,a.Kc-=b.Kc);return b}f=cb.prototype;
            f.Lb=function(a,b,c){return this.za&&this.za.Lb(a,b,c)||this.U&&this.U.Lb(a,b,c)||this.Da&&this.Da.Lb(a,b,c)?!0:this.parent.Lb.call(this,a,b,c)};f.Lc=function(a,b,c,d){this.za=a;this.la=b;this.U=c;this.Ra=d;this.Da=gb(a,"Keyboard")};f.gc=function(a,b){b||hb();return!0};f.fc=function(){return!0};f.ik=function(a,b){a.button||(this.Wg=b?0:-1,ib(this,a,b))};f.kn=function(a){ib(this,a)};
            function ib(a,b,c){var d=1280/a.canvas.offsetWidth,e=720/a.canvas.offsetHeight,m=a.canvas.getBoundingClientRect(),d=(b.clientX-m.left)*d|0;b=(b.clientY-m.top)*e|0;null==c&&(a.Wg||(a.Wg=Math.abs(a.ee-d)>Math.abs(a.fe-b)?1:2),1==a.Wg?b=a.fe:2==a.Wg&&(d=a.ee));a.ee=d;a.fe=b;if(0<=d&&1280>d&&0<=b&&720>b){a:{c=d;if(960>c&&a.Xa&&a.Xa.Ff)for(m=0;m<a.Xa.Ff.length;m++)if(e=a.Xa.Ff[m],e.contains(c,b)){c-=e.x;b-=e.y;var d=a.Xa.zg[m],n=oa(jb.yn,a.Xa.Rj[d.Do]),m=n*a.la.ob,d=(n+d.Pd)*a.la.ob-1;0<b&&(m+=e.Kc*(b-
            1)*a.Bn);m+=c*a.Bn;m|=0;m>d&&(m=d);c=m;break a}c=h}c!==h&&(c&=-16,c!=a.vm&&(kb(a,c,!0),a.vm=c))}}
            f.de=function(){if(this.canvas&&this.$h&&this.ne&&this.cf){var a=this.ne.width,b=this.ne.height;this.cf.fillStyle="black";this.cf.fillRect(0,0,a,b);lb(this,18,this.ne,this.cf,this.canvas.style.color);mb(this,3);k(this,"CPU");k(this,"Target");k(this,"Current");nb(this);k(this,this.U.ma);k(this,this.U.R.nf.toFixed(2)+"Mhz");k(this,ob(this.U));nb(this,2);mb(this,8);var c=this.U.ma<qb?4:8;this.Vp=16;this.sn=c;k(this,"AX",this.U.F,2);k(this,"DS",this.U.kb.sa,0,1);k(this,"DX",this.U.H,2);k(this,"SI",this.U.K,
            0,1.5);k(this,"BX",this.U.D,2);k(this,"ES",this.U.Qa.sa,0,1);k(this,"CX",this.U.G,2);k(this,"DI",this.U.J,0,1.5);k(this,"CS",this.U.oa.sa,2);k(this,"SS",this.U.ra.sa,0,1);k(this,"IP",l(this.U),2);k(this,"SP",q(this.U),0,1.5);k(this,"PS",c=rb(this.U),2);k(this,"BP",this.U.L,0,1.5);this.U.ma>=qb&&(k(this,"FS",this.U.Hd.sa,2),k(this,"CR0",this.U.zb,0,1),k(this,"GS",this.U.Id.sa,2),k(this,"CR3",this.U.gg,0,1.5));mb(this,9);k(this,"V"+(c&sb?1:0));k(this,"D"+(c&tb?1:0));k(this,"I"+(c&ub?1:0));k(this,"T"+
            (c&vb?1:0));k(this,"S"+(c&wb?1:0));k(this,"Z"+(c&xb?1:0));k(this,"A"+(c&yb?1:0));k(this,"P"+(c&zb?1:0));k(this,"C"+(c&Ab?1:0),0,2);kb(this,this.vm);this.$h.drawImage(this.ne,0,0,a,b,this.Bt,this.Et,this.Zs,this.bt)}};function Bb(a,b,c,d){a.Xa.zg[a.Xa.Fm++]={Do:b,Pd:c,type:d};return na(jb,b,c,0,d)}
            function kb(a,b,c){if(a.$h&&a.ne&&a.cf){var d=a.ne.width;a.cf.fillStyle="black";a.cf.fillRect(0,360,d,360);lb(a,378,a.ne,a.cf,a.canvas.style.color);mb(a,24);if(null==b)k(a,"Mouse over memory to dump");else{k(a,"0x"+da(b),null,0,1);for(var e=1;16>=e;e++){for(var m="",n=1;8>=n;n++){var p=Cb(a.la,b++);k(a,da(p,2),null,1);m+=32<=p&&128>p?String.fromCharCode(p):"."}k(a,m,null,0,1)}}c&&a.$h.drawImage(a.ne,0,360,d,360,a.zt,a.Ct,a.Xs,a.$s)}}
            function lb(a,b,c,d,e){var m,n=a.Ur=10;a.cd=n;a.Cf=b;a.Wf=a.dn=18;m||(m=a.$m||a.dn+"px Monaco, Lucida Console, Courier New");a.oi=a.$m=m;c&&(a.bo=c);d&&(a.wd=d,a.jo=e||"white")}function mb(a,b){a.kk=a.bo.width/b|0}function nb(a,b){a.cd=a.Ur;a.Cf+=(a.Wf+2)*(b||1)}function k(a,b,c,d,e){a.wd.font=a.oi;a.wd.fillStyle=a.jo;a.wd.fillText(b,a.cd,a.Cf);a.cd+=a.kk;null!=c&&(16!=a.Vp?b=c.toString():(b=8>a.sn?"0x":"",b+=da(c,a.sn)),a.wd.fillText(b,a.cd,a.Cf),a.cd+=a.kk);d&&(a.cd+=a.kk*d);e&&nb(a,e)}
            function hb(){for(var a=!1,b=Xa(window.document,"pcjs","panel"),c=0;c<b.length;c++){var d=b[c],e=Ua(d),m=Sa(e.id);m||(a=!0,m=new cb(e));Wa(m,d);a&&Za(m)}}Ea(hb);function Db(a,b,c){Ia.call(this,"Bus",a,Db);this.U=b;this.Ra=c;this.Be=a.buswidth||20;this.Xj=Math.pow(2,this.Be);this.Qp=this.xb=this.Xj-1|0;this.Aa=32==this.Be||20>=this.Be?12:24>=this.Be?14:15;this.ob=1<<this.Aa;this.nn=this.ob>>2;this.Ea=this.ob-1;this.Xd=this.Xj/this.ob|0;this.$c=this.Xd-1;this.Dh=[];this.Eh=[];this.Dk();Za(this)}Qa(Db);
            var jb,Eb={yn:20,count:8,Vs:1,type:3},Fb=0,Gb;for(Gb in Eb){var Hb=Eb[Gb];Eb[Gb]={Mp:(1<<Hb)-1<<Fb,shift:Fb};Fb+=Hb}jb=void 0;f=Db.prototype;f.Dk=function(){var a=new r;this.ka=Array(this.Xd);for(var b=0;b<this.Xd;b++)this.ka[b]=a;this.U.Dk(this.ka,this.Aa);a=this.U;a.xb=a.$d=this.xb};f.reset=function(){Ib(this,!0)};f.gc=function(a,b){b||this.reset();return!0};
            function Jb(a,b,c,d,e){for(var m=b>>>a.Aa;0<c&&m<a.ka.length;){var n=a.ka[m],p=m*a.ob,v=c>a.ob?a.ob:c;if(n&&n.size){if(n.type==d&&n.W==e){if(b+c<=n.Bg)return n.qg+=n.Bg-b,n.Bg=b,!0;if(b>=n.Bg+n.qg){v=n.size-(b-p);v>c&&(v=c);n.qg=b-n.Bg+v;c-=v;b=p+a.ob;continue}}return Kb(1,b,c)}a.ka[m++]=new r(b,v,a.ob,d,e);c-=v;b=p+a.ob}return 0<c?Kb(2,b,c):!0}
            function Ib(a,b){if(32==a.Be)b?a.vg&&(Lb(a,1048576,1048576,a.vg),a.vg=null):a.vg||(a.vg=Mb(a,1048576,1048576),Lb(a,1048576,1048576,Mb(a,0,1048576)));else if(20<a.Be){var c=a.xb&-1048577|(b?1048576:0);if(c!=a.xb&&(a.xb=c,a.U)){var d=a.U;d.xb=d.$d=c}}}f.Lj=function(a,b,c){if(!(a&this.Ea||!b||b&this.Ea)){for(var d=a>>>this.Aa;0<b;){var e=this.ka[d];if(!e.W)return Kb(5,a,b);e.md(c);b-=this.ob;d++}return!0}return Kb(3,a,b)};
            function Nb(a,b,c){if(!(b&a.Ea||!c||c&a.Ea)){for(var d=b>>>a.Aa;0<c;)b=d*a.ob,a.ka[d++]=new r(b),c-=a.ob;return!0}return Kb(4,b,c)}function Mb(a,b,c){var d=[];for(b>>>=a.Aa;0<c&&b<a.ka.length;)d.push(a.ka[b++]),c-=a.ob;return d}function Lb(a,b,c,d,e){for(var m=0,n=b>>>a.Aa;0<c&&n<a.ka.length;){var p=d[m++];if(!p)break;if(void 0!==e){var v=new r(b);v.clone(p,e);p=v}a.ka[n++]=p;c-=a.ob}}f.wc=function(a){return this.ka[(a&this.xb)>>>this.Aa].xc(a&this.Ea,a)};
            function Cb(a,b){return a.ka[(b&a.xb)>>>a.Aa].wj(b&a.Ea,b)}f.na=function(a){var b=a&this.Ea,c=(a&this.xb)>>>this.Aa;return b!=this.Ea?this.ka[c].xj(b,a):this.ka[c++].xc(b,a)|this.ka[c&this.$c].xc(0,a+1)<<8};function Ob(a,b){var c=b&a.Ea,d=(b&a.xb)>>>a.Aa;return c!=a.Ea?a.ka[d].rr(c,b):a.ka[d++].wj(c,b)|a.ka[d&a.$c].wj(0,b+1)<<8}
            f.Tg=function(a){var b=a&this.Ea,c=(a&this.xb)>>>this.Aa;if(b<this.Ea-2)return this.ka[c].yc(b,a);var d=(b&3)<<3;return this.ka[c].yc(b&-4,a)>>>d|this.ka[c+1&this.$c].yc(0,a+3)<<32-d};f.Oe=function(a,b){this.ka[(a&this.xb)>>>this.Aa].Cc(a&this.Ea,b&255,a)};f.Eb=function(a,b){var c=a&this.Ea,d=(a&this.xb)>>>this.Aa;c!=this.Ea?this.ka[d].Oj(c,b&65535,a):(this.ka[d++].Cc(c,b&255,a),this.ka[d&this.$c].Cc(0,b>>8&255,a+1))};
            function Pb(a,b,c){var d=b&a.Ea,e=(b&a.xb)>>>a.Aa;d!=a.Ea?a.ka[e].Pr(d,c&65535,b):(a.ka[e++].fm(d,c&255,b),a.ka[e&a.$c].fm(0,c>>8&255,b+1))}f.Kj=function(a,b){var c=a&this.Ea,d=(a&this.xb)>>>this.Aa;if(c<this.Ea-2)this.ka[d].Se(c,b);else{var e,m=(c&3)<<3,c=c&-4;e=this.ka[d].yc(c,a);this.ka[d].Se(c,e&~(-1<<m)|b<<m,a);d=d+1&this.$c;a+=3;e=this.ka[d].yc(0,a);this.ka[d].Se(0,e&-1<<m|b>>>32-m,a)}};
            function Qb(a){for(var b=0,c=[],d=0;d<a.Xd;d++){var e=a.ka[d];if(e.Ka||e.Pm){c[b++]=d;var m=b++;a:if(e=e.save()){for(var n=0,p=0,v=[];n<e.length;){for(var w=e[n],G=n+1;G<e.length&&e[G]===w;)G++;v[p++]=G-n;v[p++]=w;n=G}if(v.length<e.length){e=v;break a}}c[m]=e}}c[b]=!a.vg&&a.Qp==a.xb;return c}
            function Tb(a,b,c,d){void 0===d&&(d=0);for(var e in c){var m=a,n=+e+d,p=b,v=c[e];if(void 0!==v)for(var w=+e+d;w<=n;w++)void 0!==m.Dh[w]?ra("Input port 0x"+da(w,4)+" registered by "+m.Dh[w][0].id+", ignoring "+p.id):m.Dh[w]=[p,v,!1,!1]}}function Ub(a,b,c){var d=255;a=a.Dh[b];void 0!==a&&a[1]&&(b=a[1].call(a[0],b,c),void 0!==b&&(d=b));return d}
            function Vb(a,b,c,d){void 0===d&&(d=0);for(var e in c){var m=a,n=+e+d,p=b,v=c[e];if(void 0!==v)for(var w=+e+d;w<=n;w++)void 0!==m.Eh[w]?ra("Output port 0x"+da(w,4)+" registered by "+m.Eh[w][0].id+", ignoring "+p.id):m.Eh[w]=[p,v,!1,!1]}}function Wb(a,b,c,d){a=a.Eh[b];void 0!==a&&a[1]&&a[1].call(a[0],b,c,d)}function Kb(a,b,c){ra("Memory block error ("+a+","+da(b)+","+da(c)+")");return!1}var Xb;
            if(bb){var Yb=new ArrayBuffer(2);(new DataView(Yb)).setUint16(0,256,!0);Xb=256===(new Uint16Array(Yb))[0]}else Xb=!1;var Zb=Xb;
            function r(a,b,c,d,e,m){this.id=$b+=2;this.ba=null;this.offset=0;this.Bg=a;this.qg=b;this.size=c||0;this.type=d||ac;this.ki=d==bc;this.W=null;this.U=m;this.Ka=this.Pm=!1;cc(this);if(c)if(e)this.W=e,a=e.cn(a),this.ba=a[0],this.offset=a[1],this.md(e.Ak());else if(bb)this.buffer=new ArrayBuffer(c),this.se=new DataView(this.buffer,0,c),this.Nb=new Uint8Array(this.buffer,0,c),this.Jh=new Uint16Array(this.buffer,0,c>>1),this.ba=new Int32Array(this.buffer,0,c>>2),this.md(Zb?dc:ec);else{this.ba=Array(c>>
            2);for(e=0;e<this.ba.length;e++)this.ba[e]=0;this.md(fc)}else this.md()}var ac=0,bc=2,gc="NONE RAM ROM VIDEO H/W UNPAGED PAGED".split(" "),hc=["black","blue","green","cyan"],$b=0;function ic(a){bb&&!Zb&&(a=a<<24|a<<8&16711680|a>>8&65280|a>>>24);return a}
            r.prototype={constructor:r,parent:null,clone:function(a,b){this.id=a.id|1;this.qg=a.qg;this.size=a.size;b&&(this.type=b,this.ki=b==bc);bb?(this.buffer=a.buffer,this.se=a.se,this.Nb=a.Nb,this.Jh=a.Jh,this.ba=a.ba,this.md(Zb?dc:ec)):(this.ba=a.ba,this.md(fc))},save:function(){var a,b;if(this.W)a=null;else if(bb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.se.getInt32(b<<2,!0);else a=this.ba;return a},restore:function(a){if(this.W)return null==a;if(a&&this.size==a.length<<2){var b;if(bb)for(b=
            0;b<a.length;b++)this.se.setInt32(b<<2,a[b],!0);else this.ba=a;return this.Ka=!0}return!1},md:function(a){a||(a=5==this.type?jc:6==this.type?kc:lc);var b=a;this.xc=b[0]||this.Cn;this.xj=b[1]||this.Dn;this.yc=b[2]||this.lr;this.wj=b[0]||this.Cn;this.rr=b[1]||this.Dn;this.Cc=!this.ki&&a[3]||this.Un;this.Oj=!this.ki&&a[4]||this.Vn;this.Se=!this.ki&&a[5]||this.Jr;this.fm=a[3]||this.Un;this.Pr=a[4]||this.Vn},Cn:function(){return 255},Un:function(){},Dn:function(a,b){return this.xc(a,b)|this.xc(a+1,b)<<
            8},lr:function(a,b){return this.xc(a,b)|this.xc(a+1,b)<<8|this.xc(a+2,b)<<16|this.xc(a+3,b)<<24},Vn:function(a,b){this.Cc(a,b&255);this.Cc(a+1,b>>8)},Jr:function(a,b){this.Cc(a,b&255);this.Cc(a+1,b>>8&255);this.Cc(a+2,b>>16&255);this.Cc(a+3,b>>>24)},hr:function(a){return this.ba[a>>2]>>>((a&3)<<3)&255},tr:function(a){var b=a>>2;a=(a&3)<<3;var c=this.ba[b]>>a;return 24>a?c&65535:c&255|(this.ba[b+1]&255)<<8},nr:function(a){var b=a>>2;a=(a&3)<<3;var c=this.ba[b];a&&(c=c>>>a|this.ba[b+1]<<32-a);return c},
            Fr:function(a,b){var c=a>>2,d=(a&3)<<3;this.ba[c]=this.ba[c]&~(255<<d)|b<<d;this.Ka=!0},Rr:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.ba[c]=this.ba[c]&~(65535<<d)|b<<d:(this.ba[c]=this.ba[c]&16777215|b<<24,c++,this.ba[c]=this.ba[c]&-256|b>>8);this.Ka=!0},Lr:function(a,b){var c=a>>2,d=(a&3)<<3;if(d){var e=-1<<d;this.ba[c]=this.ba[c]&~e|b<<d;c++;this.ba[c]=this.ba[c]&e|b>>>32-d}else this.ba[c]=b;this.Ka=!0},ir:function(a,b){this.Sc.ba[this.Yc]|=this.Od;this.Tc.ba[this.Zc]|=this.Od;return this.Kf.xc(a,
            b)},ur:function(a,b){this.Sc.ba[this.Yc]|=this.Od;this.Tc.ba[this.Zc]|=this.Od;return this.Kf.xj(a,b)},or:function(a,b){this.Sc.ba[this.Yc]|=this.Od;this.Tc.ba[this.Zc]|=this.Od;return this.Kf.yc(a,b)},Gr:function(a,b,c){this.Sc.ba[this.Yc]|=this.Od;this.Tc.ba[this.Zc]|=this.ck;this.Kf.Cc(a,b,c)},Sr:function(a,b,c){this.Sc.ba[this.Yc]|=this.Od;this.Tc.ba[this.Zc]|=this.ck;this.Kf.Oj(a,b,c)},Mr:function(a,b,c){this.Sc.ba[this.Yc]|=this.Od;this.Tc.ba[this.Zc]|=this.ck;this.Kf.Se(a,b,c)},jr:function(a,
            b){return(mc(this.U,b,!1)||this).xc(a,b)},vr:function(a,b){return(mc(this.U,b,!1)||this).xj(a,b)},pr:function(a,b){return(mc(this.U,b,!1)||this).yc(a,b)},Hr:function(a,b,c){(mc(this.U,c,!0)||this).Cc(a,b,c)},Tr:function(a,b,c){(mc(this.U,c,!0)||this).Oj(a,b,c)},Nr:function(a,b,c){(mc(this.U,c,!0)||this).Se(a,b,c)},fr:function(a){return this.Nb[a]},gr:function(a){return this.Nb[a]},qr:function(a){return this.se.getUint16(a,!0)},sr:function(a){return a&1?this.Nb[a]|this.Nb[a+1]<<8:this.Jh[a>>1]},kr:function(a){return this.se.getInt32(a,
            !0)},mr:function(a){return a&3?this.Nb[a]|this.Nb[a+1]<<8|this.Nb[a+2]<<16|this.Nb[a+3]<<24:this.ba[a>>2]},Dr:function(a,b){this.Nb[a]=b;this.Ka=!0},Er:function(a,b){this.Nb[a]=b;this.Ka=!0},Or:function(a,b){this.se.setUint16(a,b,!0);this.Ka=!0},Qr:function(a,b){a&1?(this.Nb[a]=b,this.Nb[a+1]=b>>8):this.Jh[a>>1]=b;this.Ka=!0},Ir:function(a,b){this.se.setInt32(a,b,!0);this.Ka=!0},Kr:function(a,b){a&3?(this.Nb[a]=b,this.Nb[a+1]=b>>8,this.Nb[a+2]=b>>16,this.Nb[a+3]=b>>24):this.ba[a>>2]=b;this.Ka=!0}};
            function cc(a,b,c,d,e,m){a.Kf=b;a.Sc=c;a.Yc=d>>2;a.Tc=e;a.Zc=m>>2;a.ck=b?ic(nc|oc):0;a.Od=b?ic(nc):0}var lc=[],fc=[r.prototype.hr,r.prototype.tr,r.prototype.nr,r.prototype.Fr,r.prototype.Rr,r.prototype.Lr],kc=[r.prototype.ir,r.prototype.ur,r.prototype.or,r.prototype.Gr,r.prototype.Sr,r.prototype.Mr],jc=[r.prototype.jr,r.prototype.vr,r.prototype.pr,r.prototype.Hr,r.prototype.Tr,r.prototype.Nr];
            if(bb)var ec=[r.prototype.fr,r.prototype.qr,r.prototype.kr,r.prototype.Dr,r.prototype.Or,r.prototype.Ir],dc=[r.prototype.gr,r.prototype.sr,r.prototype.mr,r.prototype.Er,r.prototype.Qr,r.prototype.Kr];
            function pc(a,b){Ia.call(this,"CPU",a,pc);var c=a.cycles||b,d=a.multiplier||1;this.R={};this.R.Bd=c;this.R.Ce=d;this.R.qi=Math.round(this.R.Bd/1E4)/100;this.R.nf=this.R.qi*this.R.Ce;this.ha.Qb=!1;this.ha.Xm=!1;this.ha.pk=a.autoStart;this.ha.Qm=!1;c=La.autostart;void 0!==c&&(this.ha.pk="true"==c?!0:"false"==c?!1:null);this.ha.fi=!1;this.R.ui=this.R.Zf=0;this.R.xi=a.csStart;this.R.Xg=a.csInterval;this.R.Yg=a.csStop;this.ed=[];var e=this;this.dq=function(){rc(e)};Za(this)}Qa(pc);f=pc.prototype;
            f.Lc=function(a,b,c,d){this.la=b;this.Ra=d;this.za=a;for(b=null;b=gb(a,"Video",b);)this.ed.push(b);this.fa=gb(a,"ChipSet");Za(this)};f.reset=function(){};f.save=function(){return null};f.restore=function(){return!1};f.gc=function(a,b){if(!b){if(a&&this.restore){sc(this);if(!this.restore(a))return!1;tc(this)}else this.reset();this.pc("No debugger detected")}uc(this);this.de();return!0};f.fc=function(a){return a&&this.save?this.save():!0};
            function vc(a){(!0===a.ha.pk||null===a.ha.pk&&void 0===a.qa.run)&&rc(a)}f.bn=function(){return 0};function tc(a){void 0===a.R.xi&&(a.R.xi=0);void 0===a.R.Xg&&(a.R.Xg=-1);void 0===a.R.Yg&&(a.R.Yg=-1);a.ha.fi=0<=a.R.xi&&0<a.R.Xg;a.ha.fi&&(a.R.ui=0,a.R.Zf=a.R.xi-a.rf)}f.de=function(){this.za&&this.za.ae&&this.za.ae.de()};
            function uc(a){for(var b=0;b<a.ed.length;b++)wc(a.ed[b]);if(a.za&&a.za.ae&&(a=a.za.ae,a.zo)){lb(a,18,a.Ig,a.ko,a.canvas.style.color);if(a.ft){var b=a.la,c=a.Xa,d,e;null==d&&(d=0);null==e&&(e=b.Xj-d|0);null==c&&(c={gk:0,Pd:0,Rj:[]});var m=d>>>b.Aa;d=d+e-1>>>b.Aa;c.gk=0;for(c.Pd=0;m<=d;)e=b.ka[m],c.gk+=e.size,e.size&&(c.Rj.push(na(jb,m,0,0,e.type)),c.Pd++),m++;a.Xa=c;a.Bn=a.Xa.Pd*a.la.ob/691200;b=0;a.Xa.Fm=0;a.Xa.zg||(a.Xa.zg=[]);c=-1;d=0;var n=-1;for(e=0;e<a.Xa.Pd;e++){var p=a.Xa.Rj[e],m=oa(jb.type,
            p),p=oa(jb.yn,p);if(m!=c||p!=n+1)(n=e-d)&&(b+=Bb(a,d,n,c)),c=m,d=e;n=p}b+=Bb(a,d,e-d,c);c=a.Xa.io!=b;a.Xa.io=b;if(c){c=new eb(0,0,a.Ig.width,a.Ig.height);a.Xa.Ff=[];d=a.Xa.Pd;for(b=0;b<a.Xa.Fm;b++)e=a.Xa.zg[b].Pd,a.Xa.Ff.push(fb(c,e,d,!b)),d-=e;for(b=0;b<a.Xa.Ff.length;b++)c=a.Xa.zg[b],d=e=a.Xa.Ff[b],m=a.ko,(n=hc[c.type])||(n=new db),m.strokeStyle="black",m.strokeRect(d.x,d.y,d.Kc,d.Vc),m.fillStyle="string"==typeof n?n:n.toString(),m.fillRect(d.x,d.y,d.Kc,d.Vc),d=a,m=e,d.oi=d.$m,d.Wf=d.dn,e=m.x+(m.Kc>>
            1),n=m.y+(m.Vc>>1),p=m.Vc,m.Kc<m.Vc&&(p=m.Kc,d.Ym=!0,d.wd.save(),d.wd.translate(e,n),d.wd.rotate(-Math.PI/2),e=n=0),p<d.Wf&&(d.Wf=p,d.oi=d.Wf+"px Monaco, Lucida Console, Courier New"),m=n,d.cd=e,d.Cf=m,d=a,c=gc[c.type]+" ("+(c.Pd*a.la.ob/1024|0)+"Kb)",d.wd.font=d.oi,d.cd-=d.wd.measureText(c).width>>1,d.Cf+=(d.Wf>>1)-2,k(d,c),d.Ym&&(d.wd.restore(),d.Ym=!1)}}else k(a,"This space intentionally left blank");a.$h.drawImage(a.Ig,0,0,a.Ig.width,a.Ig.height,a.At,a.Dt,a.Ys,a.at);a.zo=!1}}
            f.Jd=function(){this.ed.length&&this.ed[0].Jd()};
            f.Lb=function(a,b,c){var d=this;a=!1;switch(b){case "run":this.qa[b]=c;c.onclick=function(){var a;if(a=d.za)if(a=d.za,a.ha.dc)a=!0;else{var b=null,c,p=Ra(a.id);for(c=0;c<p.length&&(b=p[c],b===a||b.ha.Sf);c++);if(c==p.length)for(c=0;c<p.length&&(b=p[c],b===a||b.ha.dc);c++);c==p.length&&(b=a);ra("The "+b.type+" component ("+b.id+") is not "+(b.ha.Sf?"powered yet":"ready yet"+(b.ni?" (waiting for notification)":""))+".");a=!1}a&&(d.ha.Qb?xc(d,!0):rc(d,!0))};a=!0;break;case "reset":this.qa[b]=c;c.onclick=
            function(){d.za&&yc(d.za)};a=!0;break;case "speed":this.qa[b]=c;a=!0;break;case "setSpeed":this.qa[b]=c,c.onclick=function(){zc(d,d.R.Ce<<1,!0)},c.textContent=this.R.nf.toFixed(2)+"Mhz",a=!0}return a};function Ac(a,b){if(a.ha.Qb){var c=a.A-b;a.A-=c;a.Ad-=c}}function Bc(a,b,c){a.rf+=b;c&&(a.Ad=a.A=0)}
            function Cc(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.R.Ce&&a.R.ze&&(d=a.R.ze/a.R.qi);a.R.ln=Math.round(1E3/30);a.R.Tp=Math.floor(a.R.Bd/c*d);a.R.Jk=Math.floor(a.R.Bd/30*d);a.R.qn=Math.floor(a.R.Bd/60*d);a.R.pn=Math.floor(a.R.Bd/2*d);b||(a.R.ah=a.R.Jk,a.R.$g=a.R.qn,a.R.Zg=a.R.pn);a.R.Kk=0}function Dc(a,b){var c=a.rf+a.Ge+a.Ad-a.A;b&&1<a.R.Ce&&a.R.ze>a.R.qi&&(c=Math.round(c/a.R.Ce));return c}function sc(a){a.R.ze=0;a.rf=a.Ge=a.Ad=a.A=0;tc(a);zc(a,1)}
            function ob(a){return a.ha.Qb&&a.R.ze?a.R.ze.toFixed(2)+"Mhz":"Stopped"}function zc(a,b,c){if(void 0!==b){.8>a.R.ze/a.R.nf&&(b=1);a.R.Ce=b;b=a.R.qi*a.R.Ce;if(a.R.nf!=b){a.R.nf=b;b=a.R.nf.toFixed(2)+"Mhz";var d=a.qa.setSpeed;d&&(d.textContent=b);a.pc("target speed: "+b)}c&&a.Jd()}Bc(a,a.Ge);a.Ge=0;a.R.Yf=ka();a.R.of=0;Cc(a)}
            function rc(a,b){if(Ya(a,!0)){if(!a.ha.Qb){zc(a);a.za&&a.za.start(a.R.Yf,Dc(a));a.ha.Qb=!0;a.ha.Xm=!0;a.fa&&Ec(a.fa);var c=a.qa.run;c&&(c.textContent="Halt");a.de(!0);b&&a.Jd()}a.R.Kk>=a.R.Bd&&Cc(a,!0);a.R.bh=0;a.R.ri=ka();a.R.of&&(c=a.R.ri-a.R.of,c>a.R.ln&&(a.R.Yf+=c,a.R.Yf>a.R.ri&&(a.R.Yf=a.R.ri)));try{do{var d=a.ha.fi?1:a.R.Tp;if(a.fa){Fc(a.fa);var e=a.fa,c=d,m=e.Vb[0];if(m.kf){var n=(Dc(e.U,e.ue)-m.Yd)/e.qj|0,p=Gc(e,0)-n;6==m.mode&&(p-=n);var v=p*e.qj|0;6==m.mode&&(v>>=1);c>v&&(c=v)}var d=c,w=
            a.fa,c=d;if(w.ea&&w.ea[11]&64){var G=w.eg-Dc(w.U,w.ue);0<G&&c>G&&(c=G)}d=c}a.Qn(d);var N=a.Ad-a.A;a.Ge+=N;a.R.bh+=N;Bc(a,0,!0);var c=a,L=N;if(c.ha.fi){var U=!1;c.R.ui=c.R.ui+c.bn()|0;c.R.Zf-=L;0>=c.R.Zf&&(c.R.Zf+=c.R.Xg,U=!0);0<=c.R.Yg&&c.R.Yg<=Dc(c)&&(c.R.Xg=c.R.Yg=-1,tc(c),xc(c),U=!0);U&&c.pc(Dc(c)+" cycles: checksum="+da(c.R.ui))}a.R.$g-=N;0>=a.R.$g&&(a.R.$g+=a.R.qn,uc(a));a.R.Zg-=N;0>=a.R.Zg&&(a.R.Zg+=a.R.pn,a.de());a.R.ah-=N;if(0>=a.R.ah){a.R.ah+=a.R.Jk;break}}while(a.ha.Qb)}catch(W){xc(a);uc(a);
            a.de();a.za&&a.za.stop(ka(),Dc(a));Ya(a,!1);ab(a,W.stack||W.message);return}d=setTimeout;e=a.dq;a.R.of=ka();m=a.R.ln;a.R.bh&&(m=Math.round(m*a.R.bh/a.R.Jk));m-=a.R.of-a.R.ri;if(n=a.R.of-a.R.Yf)a.R.ze=Math.round(a.Ge/(10*n))/100,864E5<=n&&(a.rf=0,a.fa&&Fc(a.fa,!0),zc(a));if(0>m||a.R.ze<a.R.nf)m=0;a.R.Kk+=a.R.bh;a.R.of+=m;d(e,m)}else uc(a),a.de(),a.za&&a.za.stop(ka(),Dc(a))}f.Qn=function(){return 0};
            function xc(a,b){a.ha.Wc&&(a.ha.qk=!0);a.Ad-=a.A;a.A=0;Bc(a,a.Ge);a.Ge=0;if(a.ha.Qb){a.ha.Qb=!1;a.fa&&Ec(a.fa);var c=a.qa.run;c&&(c.textContent="Run")}a.ha.Qg=b}var qb=80386,h=-1,Ab=1,zb=4,yb=16,xb=64,wb=128,vb=256,ub=512,tb=1024,sb=2048,oc=64,nc=32,Hc=vb|ub|tb,Ic=Ab|zb|yb|xb|wb|sb,Jc=Ab|zb|yb|xb|wb;
            function Kc(a,b,c,d){this.U=a;this.Ra=a.Ra;this.id=b;this.Hj=c||"";this.sa=0;this.Ib=65535;this.Ie=this.Ib+1;this.Ja=this.uc=this.bi=this.Ob=this.type=this.xa=0;this.od=h;this.ja=this.Ld=2;this.C=this.T=65535;this.xm=this.id==Mc?Array(32):[];this.rk=null;this.mi=!1;Nc(this,!0,d)}var Mc=1;f=Kc.prototype;f.Lp=function(a){this.sa=a&65535;return this.xa=this.sa<<4};
            f.Kp=function(a,b){var c,d,e=this.U;a&=65535;a&4?(c=e.Ne.xa,d=c+e.Ne.Ib|0):(c=e.pd,d=e.If);if(!b||c){c=c+(a&65528)|0;if(d-c|0)return b||(e.A-=15),Oc(this,c,a,b);b||Pc.call(e,13,a)}return h};f.Jp=function(a){var b=this.U;a=b.qd+(a<<2);var c=b.na(a);b.ca&=~(vb|ub);return this.load(b.na(a+2))+c|0};f.Ip=function(a){var b=this.U;a<<=3;var c=b.qd+a|0;if(7<=(b.Ve-c|0))return Oc(this,c,a)+b.Vl;Pc.call(b,13,a|3,!0);return h};f.eo=function(a){return this.xa+a|0};f.ho=function(a){return this.xa+a|0};
            f.Im=function(a,b,c){return(a>>>0)+b<=this.Ie?this.xa+a|0:this.Xh(0,0,c)};f.co=function(a,b,c){return(a>>>0)+b>this.Ie?this.xa+a|0:this.Xh(0,0,c)};f.Xh=function(a,b,c){c||Pc.call(this.U,13,0);return h};f.Jm=function(a,b,c){return(a>>>0)+b<=this.Ie?this.xa+a|0:this.Yh(0,0,c)};f.fo=function(a,b,c){return(a>>>0)+b>this.Ie?this.xa+a|0:this.Yh(0,0,c)};f.Yh=function(a,b,c){c||Pc.call(this.U,13,0);return h};
            function Qc(a,b,c){var d=a.U,e=d.na(b+2),m=d.na(b)|(e&255)<<16,d=d.na(b+4);a.sa=c;a.xa=m;a.Ib=d;a.Ie=(d>>>0)+1;a.Ob=e;a.type=e&7936;a.bi=0;a.od=b;Nc(a,!0)}
            function Oc(a,b,c,d){var e=a.U,m=e.na(b+0),n=e.na(b+4),p=n&7936,v=e.na(b+2)|(n&255)<<16,w=e.na(b+6),G=c&65528;e.ma>=qb&&(v|=(w&65280)<<16,m|=(w&15)<<16,w&128&&(m=m<<12|4095));for(;;){var N,L,U;if(a.id==Mc){a.mi=!1;N=a.rk;var W,za;U=c&3;var ga=(n&24576)>>13;if(G&&!(n&32768)){d||Pc.call(e,11,c);v=h;break}if(6144<=p){U=c&3;if(U>a.Ja){if(!1!==N&&!(ga==a.Ja||p&1024&&ga<=a.Ja)){v=h;break}G=e.Fa();Rc(e,e.Fa(),!0);t(e,G);a.mi=!0}W=!1}else{if(256==p){if(!Sc(a,c,N)){v=h;break}return a.xa}if(1024==p)W=!0,za=
            -1,L=c,U<a.Ja&&(U=a.Ja);else if(1536==p)W=!0,za=~(16384|vb|ub),L=c|1;else if(1792==p)W=!0,za=~(16384|vb),L=c|1;else if(1280==p){if(!Sc(a,v&65535,N)){v=h;break}return a.xa}}if(W){b=v&65535;if(U<=ga){d=a.Ja;if(a.load(b,!0)===h){v=h;break}e.Vl=m;if(a.Ja<d){if(!0!==N){v=h;break}G=q(e);m=0;for(n&=31;n--;)a.xm[m++]=Tc(e,e.ra,G),G+=2;n=e.hb.xa;N=(a.Ja<<2)+2;d=N+2;U=e.ra.sa;L=q(e);Rc(e,e.na(n+d),!0);t(e,e.na(n+N));u(e,U);for(u(e,L);m;)u(e,a.xm[--m]);a.mi=!0}e.ca&=za;return a.xa}d||Pc.call(e,13,L,!0);v=h;
            break}else if(!1!==W){d||Pc.call(e,13,c,!0);v=h;break}}else if(2==a.id){if(G){if(!(n&32768)){d||Pc.call(e,11,c);v=h;break}if(4096>p||2048==(p&2560)){d||Pc.call(e,13,c,!!n);v=h;break}}}else if(3==a.id){if(!(n&32768)){d||Pc.call(e,12,c);v=h;break}if(!G||4096>p||512!=(p&2560)){d||Pc.call(e,13,c,!0);v=h;break}}else if(4==a.id){if(!G||256!=p&&768!=p){d||Pc.call(e,10,c,!0);v=h;break}}else if(6==a.id&&!(p&4096)&&768<p){v=h;break}a.sa=c;a.xa=v;a.Ib=m;a.Ie=(m>>>0)+1;a.Ob=n;a.type=p;a.bi=w;a.od=b;Nc(a,!0);
            break}return v}
            function Sc(a,b,c){var d=a.U,e=d.hb.xa,m=a.Ja,n=d.hb.sa;if(!c){if(768!=d.hb.type)return Pc.call(d,10,b,!0),!1;d.Eb(d.hb.od+4,d.hb.Ob&-769|256)}if(d.hb.load(b)===h)return!1;var p=d.hb.xa;if(!1===c){if(768!=d.hb.type)return Pc.call(d,13,b,!0),!1}else{if(768==d.hb.type)return Pc.call(d,13,b,!0),!1;d.Eb(d.hb.od+4,d.hb.Ob|=768);d.hb.type=768}d.Eb(e+14,l(d));d.Eb(e+16,rb(d));d.Eb(e+18,d.F);d.Eb(e+20,d.G);d.Eb(e+22,d.H);d.Eb(e+24,d.D);d.Eb(e+26,q(d));d.Eb(e+28,d.L);d.Eb(e+30,d.K);d.Eb(e+32,d.J);d.Eb(e+34,
            d.Qa.sa);d.Eb(e+36,d.oa.sa);d.Eb(e+38,d.ra.sa);d.Eb(e+40,d.kb.sa);d.Ne.load(d.na(p+42));Uc(d,d.na(p+16)|(c?16384:0));d.F=d.na(p+18);d.G=d.na(p+20);d.H=d.na(p+22);d.D=d.na(p+24);d.L=d.na(p+28);d.K=d.na(p+30);d.J=d.na(p+32);d.Qa.load(d.na(p+34));d.kb.load(d.na(p+40));Vc(d,d.na(p+14),d.na(p+36));b=38;e=26;a.Ja<m&&(e=(a.Ja<<2)+2,b=e+2);Rc(d,d.na(p+b),!0);t(d,d.na(p+e));c&&d.Eb(p+0,n);d.zb|=8;return!0}
            f.save=function(){return[this.sa,this.xa,this.Ib,this.Ob,this.id,this.Hj,this.Ja,this.uc,this.od,this.Ld,this.T,this.ja,this.C,this.type,this.Ie]};f.restore=function(a){"number"==typeof a?this.load(a):(this.sa=a[0],this.xa=a[1],this.Ib=a[2],this.Ob=a[3],this.id=a[4],this.Hj=a[5],this.Ja=a[6],this.uc=a[7],this.od=a[8],this.Ld=a[9]||2,this.T=a[10]||65535,this.ja=a[11]||2,this.C=a[12]||65535,this.type=a[13]||this.Ob&7936,this.Ie=a[14]||(this.Ib>>>0)+1)};
            function Nc(a,b,c){void 0===c&&(c=!!(a.U.zb&1));a.Qf=!1;if(c){a.load=a.Kp;a.jn=a.Ip;a.qc=a.Im;a.lc=a.Jm;if(!(a.sa&-4))a.qc=a.Xh,a.lc=a.Yh;else if(a.type&4096){6144==(a.type&6656)&&(a.qc=a.Xh);if(a.type&2048||!(a.type&512))a.lc=a.Yh;1024==(a.type&3072)&&(a.qc==a.Im&&(a.qc=a.co),a.lc==a.Jm&&(a.lc=a.fo),a.Qf=!0)}b&&(a.sa&-4&&a.od!==h&&(b=a.od+5,a.U.Oe(b,a.U.wc(b)|1)),a.Ja=a.sa&3,a.uc=(a.Ob&24576)>>13,a.U.ma<qb||!(a.bi&64)?(a.ja=2,a.C=65535):(a.ja=4,a.C=-1),a.Ld=a.ja,a.T=a.C)}else a.load=a.Lp,a.jn=a.Jp,
            a.qc=a.eo,a.lc=a.ho,a.Ja=a.uc=0,a.od=h}
            function Wc(a){this.ma=a.model||8088;var b=0;switch(this.ma){default:b=4772727;break;case 80286:b=6E6;break;case qb:b=16E6}pc.call(this,a,b);this.lm=61442;this.zh=Hc;this.yh=4;this.ub=255;this.B=this.ma==qb?Xc:80286==this.ma?Yc:Zc;this.Ia=$c;this.pm=ad;this.qm=bd;this.rm=cd;if(80186<=this.ma&&(this.Ia=$c.slice(),this.pm=ad.slice(),this.qm=bd.slice(),this.ub=31,this.Ia[15]=dd,this.Ia[96]=ed,this.Ia[97]=fd,this.Ia[98]=gd,this.Ia[99]=dd,this.Ia[100]=dd,this.Ia[101]=dd,this.Ia[102]=dd,this.Ia[103]=dd,
            this.Ia[104]=hd,this.Ia[105]=id,this.Ia[106]=jd,this.Ia[107]=kd,this.Ia[108]=ld,this.Ia[109]=md,this.Ia[110]=nd,this.Ia[111]=od,this.Ia[192]=pd,this.Ia[193]=qd,this.Ia[200]=rd,this.Ia[201]=sd,this.Ia[241]=td,this.pm[7]=ud,this.qm[7]=ud,80286<=this.ma)){this.lm=2;this.zh|=28672;this.yh=0;this.Ia[15]=vd;this.yg=wd.slice();for(a=0;a<this.yg.length;a++)this.yg[a]||(this.yg[a]=xd);this.Ia[84]=yd;this.Ia[99]=zd;if(this.ma>=qb){var c;this.Ia[100]=Ad;this.Ia[101]=Bd;this.Ia[102]=Cd;this.Ia[103]=Dd;for(c in x)this.yg[+c]=
            x[c]}}this.Ch=[];this.nm=[];this.Ad=this.Uh=0;this.ha.Qg=this.ha.vo=!1;this.Em=0;this.Te=this.ka=[];this.Aa=this.ob=this.Ea=this.Xd=this.$c=this.xb=this.$d=0;Ed(this)}Qa(Wc,pc);
            var Zc={kh:4,N:5,aa:6,Y:7,Z:8,I:9,O:11,P:12,Ee:4,Mk:60,Nk:83,Sb:3,tb:9,ec:16,hh:1,Uk:19,Wk:28,Yk:16,Xk:21,Vk:37,Sk:2,Gi:9,Tk:5,Rk:33,Ii:10,Hi:8,ag:3,$f:15,ll:51,ml:1,nl:2,ol:4,kl:32,Ji:15,ql:15,Ba:16,Ca:4,sl:11,rl:18,pl:24,Cb:4,tl:2,pf:16,ul:17,Oi:18,vl:19,Ni:5,Pi:6,Al:2,zl:8,xl:9,yl:10,wl:10,Qi:10,Ri:10,$k:80,bl:144,Zk:86,al:154,dl:101,fl:165,cl:107,el:171,Cl:70,El:113,Bl:76,Dl:124,hl:80,jl:128,gl:86,il:134,cg:3,bg:16,Yi:10,Xi:8,Fl:51,Tb:8,Gl:17,Hl:36,mc:11,Il:16,Fe:10,Mc:2,Di:18,Ei:7,Fi:15,Ki:12,
            Li:7,Mi:11,Si:18,Ti:7,Ui:15,Zi:15,$i:7,aj:13,gj:11,hj:7,ij:8,Jl:8,Ml:12,Kl:18,Ll:17,Nl:15,cj:8,bj:20,dj:2,lj:3,dg:9,kj:5,jj:11,nj:4,mj:17,Ol:11},Yc={kh:0,N:0,aa:0,Y:0,Z:0,I:0,O:1,P:1,Ee:3,Mk:14,Nk:16,Sb:2,tb:7,ec:7,hh:0,Uk:7,Wk:13,Yk:7,Xk:11,Vk:16,Sk:3,Gi:6,Tk:2,Rk:13,Ii:5,Hi:5,ag:2,$f:7,ll:23,ml:0,nl:1,ol:3,kl:17,Ji:7,ql:11,Ba:7,Ca:3,sl:7,rl:11,pl:15,Cb:2,tl:3,pf:7,ul:8,Oi:8,vl:8,Ni:4,Pi:4,Al:2,zl:3,xl:5,yl:2,wl:3,Qi:5,Ri:3,$k:14,bl:22,Zk:17,al:25,dl:17,fl:25,cl:20,el:28,Cl:13,El:21,Bl:16,Dl:24,
            hl:13,jl:21,gl:16,il:24,cg:2,bg:7,Yi:5,Xi:5,Fl:19,Tb:5,Gl:5,Hl:17,mc:3,Il:5,Fe:3,Mc:0,Di:8,Ei:5,Fi:9,Ki:5,Li:5,Mi:4,Si:5,Ti:5,Ui:4,Zi:7,$i:5,aj:8,gj:3,hj:4,ij:3,Jl:11,Ml:11,Kl:15,Ll:15,Nl:7,cj:5,bj:8,dj:0,lj:2,dg:6,kj:3,jj:6,nj:3,mj:5,Ol:5},Xc={kh:0,N:0,aa:0,Y:0,Z:0,I:0,O:1,P:1,Ee:3,Mk:14,Nk:16,Sb:2,tb:7,ec:7,hh:0,Uk:7,Wk:13,Yk:7,Xk:11,Vk:16,Sk:3,Gi:6,Tk:2,Rk:13,Ii:5,Hi:5,ag:2,$f:7,ll:23,ml:0,nl:1,ol:3,kl:17,Ji:7,ql:11,Ba:7,Ca:3,sl:7,rl:11,pl:15,Cb:2,tl:3,pf:7,ul:8,Oi:8,vl:8,Ni:4,Pi:4,Al:2,zl:3,xl:5,
            yl:2,wl:3,Qi:5,Ri:3,$k:14,bl:22,Zk:17,al:25,dl:17,fl:25,cl:20,el:28,Cl:13,El:21,Bl:16,Dl:24,hl:13,jl:21,gl:16,il:24,cg:2,bg:7,Yi:5,Xi:5,Fl:19,Tb:5,Gl:5,Hl:17,mc:3,Il:5,Fe:3,Mc:0,Di:8,Ei:5,Fi:9,Ki:5,Li:5,Mi:4,Si:5,Ti:5,Ui:4,Zi:7,$i:5,aj:8,gj:3,hj:4,ij:3,Jl:11,Ml:11,Kl:15,Ll:15,Nl:7,cj:5,bj:8,dj:0,lj:2,dg:6,kj:3,jj:6,nj:3,mj:5,Ol:5,un:11,Qk:6,Ok:8,Pk:5,Yp:3,Wp:6,Xp:6,wn:9,vn:12,Wi:3,Vi:6,$p:4,Zp:5,fj:3,ej:7};f=Wc.prototype;
            f.Dk=function(a,b){this.ka=this.Te=a;this.Aa=b;this.ob=1<<this.Aa;this.Ea=this.ob-1;this.Xd=a.length;this.$c=this.Xd-1};function Fd(a){if(a.ka===a.Te){a.ka=Array(a.Xd);a.dk=new r(null,0,0,5,null,a);for(var b=0;b<a.Xd;b++)a.ka[b]=a.dk}else for(b=0;b<a.Ah.length;b++)a.ka[a.Ah[b]]=a.dk;a.Ah=[]}
            function mc(a,b,c,d){var e=(b&-4194304)>>>20,m=a.Te[(a.gg+e&a.xb)>>>a.Aa],n=m.yc(e);if(!(n&1))return d||Gd.call(a,b,!1,c),null;if(!(n&4)&&3==a.oa.Ja)return d||Gd.call(a,b,!0,c),null;var p=(b&4190208)>>>10,n=a.Te[((n&-4096)+p&a.xb)>>>a.Aa],v=n.yc(p);if(!(v&1||d))return d||Gd.call(a,b,!1,c),null;if(!(v&4)&&3==a.oa.Ja)return d||Gd.call(a,b,!0,c),null;c=a.Te[((v&-4096)+(b&4095)&a.xb)>>>a.Aa];if(d)return c;d=new r(b&-4096,0,0,6);cc(d,c,m,e,n,p);b>>>=a.Aa;a.ka[b]=d;a.Ah.push(b);return d}
            f.reset=function(){this.ha.Qb&&xc(this);Ed(this);sc(this);this.ha.yd=!1};
            function Ed(a){a.F=0;a.D=0;a.G=0;a.H=0;a.Fd=0;a.L=0;a.K=0;a.J=0;a.Pb=!1;a.gb=a.$b=0;a.ld=0;a.Oh=0;a.zb=65520;a.qd=0;a.Ve=1023;a.ca=a.Ci=0;a.ng=a.uh=a.mg=a.og=0;a.zi=-1;a.oa=new Kc(a,Mc,"CS");a.kb=new Kc(a,2,"DS");a.Qa=new Kc(a,2,"ES");a.ra=new Kc(a,3,"SS");t(a,0);Rc(a,0);a.ma>=qb&&(a.H=772,a.zb=16,a.yj=0,a.nh=0,a.gg=0,a.tm=Array(8),a.um=Array(8),a.Hd=new Kc(a,2,"FS"),a.Id=new Kc(a,2,"GS"));a.On=new Kc(a,0,"NULL");a.da=a.kb;a.ga=a.ra;a.Q=a.va=0;a.V=a.Ga=h;a.lb=0;Vc(a,0,65535);if(80286<=a.ma){a.pd=
            0;a.If=65535;a.Ne=new Kc(a,5,"LDT",!0);a.hb=new Kc(a,4,"TSS",!0);a.Kb=new Kc(a,6,"VER",!0);Vc(a,65520,61440);var b,c=l(a);b=a.oa;var d=-65536;b.U.ma<qb&&(d&=16777215);b=b.xa=d;a.pa=b+c|0;a.rh=b+a.oa.Ib|0}Uc(a,0);Jd(a)}function Kd(a){2==a.Ld?(a.an=a.na,a.Gc=y,a.Oc=Ld,a.ie=Md,a.Ha=z,a.vb=Nd,a.Fc=Od):(a.an=a.Tg,a.Gc=A,a.Oc=Pd,a.ie=Qd,a.Ha=B,a.vb=Rd,a.Fc=Sd)}function Td(a,b){a.ja!=b&&(a.va|=4096,a.ja=b,a.C=2==b?65535:-1,Ud(a))}
            function Ud(a){2==a.ja?(a.dataType=32768,a.we=a.na,a.wf=a.Eb):(a.dataType=-2147483648,a.we=a.Tg,a.wf=a.Kj)}function Vd(a){a.Ld=a.oa.Ld;a.T=a.oa.T;Kd(a);a.ja=a.oa.ja;a.C=a.oa.C;Ud(a);a.va&=-12289}f.bn=function(){var a=this.F+this.D+this.G+this.H+q(this)+this.L+this.K+this.J|0;return a=a+l(this)+this.oa.sa+this.kb.sa+this.ra.sa+this.Qa.sa+rb(this)|0};function Wd(a,b,c,d){void 0!==d&&(void 0===a.Ch[b]&&(a.Ch[b]=[]),a.Ch[b].push([c,d]))}
            function Xd(a,b){var c=a.nm[b];null!=c&&(c(--a.Uh),delete a.nm[b])}function Jd(a,b){void 0===b&&(b=!!(a.zb&1));a.rm=b?Yd:cd;Nc(a.oa);Nc(a.kb);Nc(a.ra);Nc(a.Qa);a.ma>=qb&&(Nc(a.Hd),Nc(a.Id),Vd(a))}
            f.save=function(){var a=new Zd(this);a.set(0,[this.F,this.D,this.G,this.H,q(this),this.L,this.K,this.J]);var b=l(this),c=this.oa.save(),d=this.kb.save(),e=this.ra.save(),m=this.Qa.save(),n;null!=this.pd?(n=[this.zb,this.pd,this.If,this.qd,this.Ve,this.Ne.save(),this.hb.save(),this.Ci],n.push(this.yj),n.push(this.nh),n.push(this.gg),n.push(this.tm),n.push(this.um)):n=null;b=[b,c,d,e,m,n,rb(this)];this.ma>=qb&&(b.push(this.Hd.save()),b.push(this.Id.save()));a.set(1,b);a.set(2,[this.da.Hj,this.ga.Hj,
            this.Q,this.va,this.lb,this.V,this.Ga]);a.set(3,[0,this.rf,this.R.Ce]);a.set(4,Qb(this.la));return a.data()};
            f.restore=function(a){var b=a[0];this.F=b[0];this.D=b[1];this.G=b[2];this.H=b[3];var c=b[4];this.L=b[5];this.K=b[6];this.J=b[7];b=a[1];this.oa.restore(b[1]);this.kb.restore(b[2]);this.ra.restore(b[3]);this.Qa.restore(b[4]);var d=b[5];d&&d.length&&(this.zb=d[0],this.pd=d[1],this.If=d[2],this.qd=d[3],this.Ve=d[4],this.Ne.restore(d[5]),this.hb.restore(d[6]),this.Ci=d[7],this.ma>=qb&&(this.yj=d[8],this.nh=d[9],this.gg=d[10],this.tm=d[11],this.um=d[12]),Jd(this));Uc(this,b[6]);Vc(this,b[0],this.oa.sa);
            t(this,c);Rc(this,this.ra.sa);this.ma>=qb&&(this.Hd.restore(b[7]),this.Id.restore(b[8]));b=a[2];this.da=null!=b[0]&&$d(this,b[0])||this.kb;this.ga=null!=b[1]&&$d(this,b[1])||this.ra;this.Q=b[2];this.va=b[3];this.lb=b[4];this.V=b[5];this.Ga=b[6];b=a[3];this.rf=b[1];zc(this,b[2]);a:{b=this.la;a=a[4];for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.nn){for(var m=0,n=Array(b.nn),p=0;p<e.length-1;)for(var v=e[p++],w=e[p++];v--;)n[m++]=w;e=n}m=b.ka[d];if(!m||!m.restore(e)){ra("Unable to restore memory block "+
            d);b=!1;break a}}void 0!==a[c]&&Ib(b,a[c]);b=!0}return b};function $d(a,b){switch(b){case "CS":return a.oa;case "DS":return a.kb;case "SS":return a.ra;case "ES":return a.Qa;case "NULL":return a.On;default:return[0,b,0,0,""]}}function ae(a,b){var c=l(a);a.pa=a.oa.load(b)+c|0;a.rh=a.oa.xa+a.oa.Ib|0;Vd(a);a.Q|=a.yh}function be(a,b){a.kb.load(b);a.Q|=a.yh}
            function Rc(a,b,c){var d=q(a);a.Bc=a.ra.load(b)+d|0;a.ra.Qf?(a.Wl=a.ra.xa+a.ra.T|0,a.Xl=a.ra.xa+a.ra.Ib|0):(a.Wl=a.ra.xa+a.ra.Ib|0,a.Xl=a.ra.xa);c||(a.Q|=4)}function ce(a,b){a.Qa.load(b);a.Q|=a.yh}function l(a){return a.pa-a.oa.xa|0}function C(a,b){a.pa=a.oa.xa+(b&a.C)|0}function Vc(a,b,c,d){a.oa.rk=d;a.Vl=b;b=a.oa.load(c);return b!==h?(a.pa=b+(a.Vl&a.C)|0,a.rh=b+a.oa.Ib|0,Vd(a),a.oa.mi):null}
            function de(a,b){a.pa=a.pa+b|0;var c=a.rh-a.pa|0;0>c&&0<=(a.rh^a.pa)&&(8088>=a.ma||a.oa.Ib==a.oa.T?C(a,a.pa-a.oa.xa):-1>c&&Pc.call(a,13,0))}function q(a){return a.Fd&~a.ra.T|a.Bc-a.ra.xa}function t(a,b){a.Fd=b;a.Bc=a.ra.xa+(b&a.ra.T)|0}function ee(a,b,c,d,e,m){if(63!=(e&63)&&e!=a.resultType){var n=(e^a.resultType)&a.resultType;n&&(n&1&&fe(a),n&2&&ge(a),n&4&&he(a),n&8&&ie(a),n&16&&je(a),n&32&&ke(a))}m?(a.ng=d,a.mg=b):(a.ng=b,a.mg=d);a.uh=c;a.og=d;a.resultType=e}
            function D(a,b,c,d,e){a.resultType=c|26;a.og=b;d?le(a):me(a);e?ne(a):oe(a);return b}function pe(a,b,c,d){c&d?le(a):me(a);(b^c)&d?ne(a):oe(a)}function qe(a){return fe(a)?1:0}function fe(a){a.resultType&1&&(a.ca&=~Ab,(a.ng^(a.ng^a.uh)&(a.uh^a.mg))&a.resultType&-2147450752&&(a.ca|=Ab),a.resultType&=-2);return a.ca&Ab}function ge(a){a.resultType&2&&(a.ca&=~zb,38505>>((a.og^a.og>>4)&15)&1&&(a.ca|=zb),a.resultType&=-3);return a.ca&zb}
            function he(a){a.resultType&4&&(a.ca&=~yb,(a.mg^a.ng^a.uh)&16&&(a.ca|=yb),a.resultType&=-5);return a.ca&yb}function ie(a){a.resultType&8&&(a.ca&=~xb,a.og&((a.resultType&-2147450752)-1|a.resultType&-2147450752)||(a.ca|=xb),a.resultType&=-9);return a.ca&xb}function je(a){a.resultType&16&&(a.ca&=~wb,a.og&a.resultType&-2147450752&&(a.ca|=wb),a.resultType&=-17);return a.ca&wb}
            function ke(a){a.resultType&32&&(a.ca&=~sb,(a.ng^a.mg)&(a.uh^a.mg)&a.resultType&-2147450752&&(a.ca|=sb),a.resultType&=-33);return a.ca&sb}function me(a){a.resultType&=-2;a.ca&=~Ab}function re(a){a.resultType&=-5;a.ca&=~yb}function se(a){a.resultType&=-9;a.ca&=~xb}function oe(a){a.resultType&=-33;a.ca&=~sb}function le(a){a.resultType&=-2;a.ca|=Ab}function te(a){a.resultType&=-5;a.ca|=yb}function ue(a){a.resultType&=-9;a.ca|=xb}function ne(a){a.resultType&=-33;a.ca|=sb}
            function rb(a){return a.ca&~Ic|fe(a)|ge(a)|he(a)|ie(a)|je(a)|ke(a)}function ve(a,b){b=b|a.zb&1|65520;a.zb=a.zb&-65536|b&65535;a.zb&1&&Jd(a,!0)}function Uc(a,b,c){a.zb&1||(b&=-61441);void 0===c&&(c=a.oa.Ja);c?b=b&-12289|a.ca&12288:a.Ci=(b&12288)>>12;c>a.Ci&&(b=b&~ub|a.ca&ub);a.resultType=128;a.ca=a.ca&~(a.zh|Ic)|b&(a.zh|Ic)|a.lm;a.ca&vb&&(a.lb|=2,a.Q|=4)}
            f.Lb=function(a,b,c){var d=!1;switch(b){case "EAX":case "EBX":case "ECX":case "EDX":case "ESP":case "EBP":case "ESI":case "EDI":case "EIP":case "AX":case "BX":case "CX":case "DX":case "SP":case "BP":case "SI":case "DI":case "IP":case "PC":case "CS":case "DS":case "SS":case "ES":case "PS":case "C":case "P":case "A":case "Z":case "S":case "T":case "I":case "D":case "V":this.qa[b]=c;this.Em++;d=!0;break;default:d=this.parent.Lb.call(this,a,b,c)}return d};
            f.wc=function(a){return this.ka[(a&this.$d)>>>this.Aa].xc(a&this.Ea,a)};f.na=function(a){var b=a&this.Ea,c=(a&this.$d)>>>this.Aa;this.A-=this.B.kh;return b<this.Ea?this.ka[c].xj(b,a):this.ka[c].xc(b,a)|this.ka[c+1&this.$c].xc(0,a+1)<<8};f.Tg=function(a){var b=a&this.Ea,c=(a&this.$d)>>>this.Aa;if(b<this.Ea-2)return this.ka[c].yc(b,a);var d=(b&3)<<3;return this.ka[c].yc(b&-4,a)>>>d|this.ka[c+1&this.$c].yc(0,a+3)<<32-d};f.Oe=function(a,b){this.ka[(a&this.$d)>>>this.Aa].Cc(a&this.Ea,b&255,a)};
            f.Eb=function(a,b){var c=a&this.Ea,d=(a&this.$d)>>>this.Aa;this.A-=this.B.kh;c<this.Ea?this.ka[d].Oj(c,b&65535,a):(this.ka[d++].Cc(c,b&255,a),this.ka[d&this.$c].Cc(0,b>>8&255,a+1))};f.Kj=function(a,b){var c=a&this.Ea,d=(a&this.$d)>>>this.Aa;this.A-=this.B.kh;if(c<this.Ea-2)this.ka[d].Se(c,b,a);else{var e,m=(c&3)<<3,c=c&-4;e=this.ka[d].yc(c,a);this.ka[d].Se(c,e&~(-1<<m)|b<<m,a);d=d+1&this.$c;a+=3;e=this.ka[d].yc(0,a);this.ka[d].Se(0,e&-1<<m|b>>>32-m,a)}};
            function we(a,b,c){a.xh=b;a.V=b.qc(a.mh=c,1);return a.Q&1?0:a.wc(a.V)}function E(a,b){return we(a,a.da,b&a.T)}function F(a,b){return we(a,a.ga,b&a.T)}function xe(a,b,c){a.xh=b;a.V=b.qc(a.mh=c,a.ja);return a.Q&1?0:a.we(a.V)}function H(a,b){return xe(a,a.da,b&a.T)}function I(a,b){return xe(a,a.ga,b&a.T)}function ye(a,b,c){a.xh=b;a.Ga=a.V=b.qc(a.mh=c,1);return a.Q&1?0:a.wc(a.V)}function J(a,b){return ye(a,a.da,b&a.T)}function K(a,b){return ye(a,a.ga,b&a.T)}
            function ze(a,b,c){a.xh=b;a.Ga=a.V=b.qc(a.mh=c,a.ja);return a.Q&1?0:a.we(a.V)}function M(a,b){return ze(a,a.da,b&a.T)}function O(a,b){return ze(a,a.ga,b&a.T)}function P(a,b){a.Q&2||a.Oe(a.xh.lc(a.mh,1),b)}function Q(a,b){a.Q&2||a.wf(a.xh.lc(a.mh,a.ja),b)}function Tc(a,b,c){return a.we(b.qc(c,a.ja))}f.S=function(){var a=this.wc(this.pa);de(this,1);return a};function Ae(a){var b=a.na(a.pa);de(a,2);return b}function R(a){var b=a.an(a.pa);de(a,a.Ld);return b}
            f.ia=function(){var a=this.we(this.pa);de(this,this.ja);return a};f.M=function(){var a=this.wc(this.pa)<<24>>24;de(this,1);return a};function S(a,b){var c=a.wc(a.pa);de(a,1);return Be[c].call(a,b)}f.Fa=function(){var a=this.we(this.Bc);this.Bc=this.Bc+this.ja|0;var b=this.Wl-this.Bc|0;0>b&&0<=(this.Wl^this.Bc)&&(8088>=this.ma||!this.ra.Qf&&this.ra.Ib==this.ra.T||this.ra.Qf&&!this.ra.Ib?t(this,this.Bc-this.ra.xa&this.ra.T):-1>b&&Pc.call(this,12,0));return a};
            function u(a,b){a.Bc=a.Bc-a.ja|0;0>(a.Bc-a.Xl|0)&&0<=(a.Xl^a.Bc)&&(8088>=a.ma||!a.ra.Qf&&a.ra.Ib==a.ra.T||a.ra.Qf&&!a.ra.Ib?t(a,a.Bc-a.ra.xa&a.ra.T):Pc.call(a,12,0));a.wf(a.Bc,b)}function Ce(a,b,c){var d=4;1==b.length&&(d=1,c=c?1:0);if(80386>a.ma)2<b.length&&(b=b.substr(1,2));else if("PS"==b||2<b.length)d=8;a.qa[b]&&(void 0===c&&(ab(a,"Value for "+b+" is invalid"),xc(a)),d=!a.ha.Qb||a.ha.Qm?da(c,d):"--------".substr(0,d),a.qa[b].textContent!=d&&(a.qa[b].textContent=d))}
            f.de=function(a){if(this.Em&&(a||!this.ha.Qb||this.ha.Qm)){Ce(this,"EAX",this.F);Ce(this,"EBX",this.D);Ce(this,"ECX",this.G);Ce(this,"EDX",this.H);Ce(this,"ESP",q(this));Ce(this,"EBP",this.L);Ce(this,"ESI",this.K);Ce(this,"EDI",this.J);Ce(this,"CS",this.oa.sa);Ce(this,"DS",this.kb.sa);Ce(this,"SS",this.ra.sa);Ce(this,"ES",this.Qa.sa);Ce(this,"EIP",l(this));var b=rb(this);Ce(this,"PS",b);Ce(this,"V",b&sb);Ce(this,"D",b&tb);Ce(this,"I",b&ub);Ce(this,"T",b&vb);Ce(this,"S",b&wb);Ce(this,"Z",b&xb);Ce(this,
            "A",b&yb);Ce(this,"P",b&zb);Ce(this,"C",b&Ab)}if(b=this.qa.speed)b.textContent=ob(this);this.parent.de.call(this,a)};
            f.Qn=function(a){this.ha.Qg=!0;this.ha.vo=!1;this.ha.Xm=!1;this.Ad=this.A=a;this.fa&&!a&&Fc(this.fa);a||(this.Q|=4);do{if(a=this.Q&12528)this.va|=a;else if(this.Jb=this.pa,this.da=this.kb,this.ga=this.ra,this.V=this.Ga=h,this.va&12288&&Vd(this),this.va=this.Q&256,this.lb){a:{if(!(this.Q&4)){a=80286>this.ma?0:1;for(var b=0;2>b;b++){switch(a){case 0:if(this.lb&1&&this.ca&ub){var c=De(this.fa);if(-1<=c&&(this.lb&=-2,0<=c)){this.lb&=-5;Ee.call(this,c,null,11);break a}}break;case 1:if(this.lb&2){this.lb&=
            -3;Ee.call(this,1,null,11);break a}}a=1-a}}if(a=this.lb&8){a=this.fa;b=!1;for(c=0;c<a.$a;c++)for(var d=a.$a[c],e=0;e<d.Fb.length;e++){var m=d.Fb[e];m.Wd||(Fe(a,m),m.Wd||(b=!0))}a=!b}a&&(this.lb&=-9)}if(this.lb&4){this.Q=this.A=0;break}}this.Q=0;this.Ia[this.S()].call(this)}while(0<this.A);return this.ha.Qg?this.Ad-this.A:void 0===this.ha.Qg?0:-1};Ea(function(){for(var a=Xa(window.document,"pcjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new Wc(d);Wa(d,c)}});
            function Ge(a,b){var c=a+b+qe(this)|0;ee(this,a,b,c,191);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&255}function He(a,b){var c=a+b+qe(this)|0;ee(this,a,b,c,this.dataType|63);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&this.C}function Ie(a,b){var c=a+b|0;ee(this,a,b,c,191);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&255}
            function Je(a,b){var c=a+b|0;ee(this,a,b,c,this.dataType|63);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&this.C}function Ke(a,b){var c=a&b;D(this,c,128);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c}function Le(a,b){this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return D(this,a&b,this.dataType)}function Me(a,b){this.A-=10+(this.V===h?0:1);if((a&3)<(b&3))return a=a&-4|b&3,ue(this),a;se(this);return a}
            function Ne(a){if(this.V===h)return dd.call(this),a;var b=a,c=this.we(this.V),d=this.we(this.V+this.ja);2==this.ja&&(b=a<<16>>16,c=c<<16>>16,d=d<<16>>16);this.A-=this.B.Rk;if(b<c||b>d)C(this,this.Jb-this.oa.xa),Ee.call(this,5,null,0);this.Q|=2;return a}function Oe(a,b){var c=0;if(b){se(this);for(var d=1;d&this.C;){if(b&d){a=c;break}d<<=1;c++}}else ue(this);this.A-=this.B.un+3*c;return a}
            function Pe(a,b){var c=0;if(b){se(this);for(var d=2==this.ja?15:31,e=1<<d;e;){if(b&e){a=d;break}e>>>=1;c++;d--}}else ue(this);this.A-=this.B.un+3*c;return a}function Qe(a,b){a&1<<(b&31)?le(this):me(this);this.A-=this.V===h?this.B.Yp:this.B.Wp;this.Q|=2;return a}function Re(a,b){var c=1<<(b&31);a&c?le(this):me(this);this.A-=this.V===h?this.B.Qk:this.B.Ok;return a^c}function Ue(a,b){var c=1<<(b&31);a&c?le(this):me(this);this.A-=this.V===h?this.B.Qk:this.B.Ok;return a&~c}
            function Ve(a,b){var c=1<<(b&31);a&c?le(this):me(this);this.A-=this.V===h?this.B.Qk:this.B.Ok;return a|c}function We(a,b){var c=this.oa.sa,d=l(this);null!=Vc(this,a,b,!0)&&(u(this,c),u(this,d))}function Xe(a,b){ee(this,a,b,a-b|0,191,!0);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.Gi:this.B.tb;this.Q|=2;return a}function Ye(a,b){ee(this,a,b,a-b|0,this.dataType|63,!0);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.Gi:this.B.tb;this.Q|=2;return a}
            function Ze(a){var b=(a&this.C)-1|0;ee(this,a,1,b,32830,!0);this.A-=2;return a&~this.C|b&this.C}function $e(a,b){var c=a[1]-b[1];c||(c=a[0]-b[0]);return c}
            function af(a,b,c){this.Pb=!1;if((c>>>=0)&&!(c<=b>>>0)){var d=0,e=1;c=[c>>>0,0];for(a=[a>>>0,b>>>0];0<$e(a,c);){var m=b=c;b[0]+=m[0];b[1]+=m[1];4294967295<b[0]&&(b[0]>>>=0,b[1]++);e+=e}do 0<=$e(a,c)&&(b=a,m=c,b[0]-=m[0],b[1]-=m[1],0>b[0]&&(b[0]>>>=0,b[1]--),d+=e),b=c,b[0]>>>=1,b[1]&1&&(b[0]=(b[0]|2147483648)>>>0),b[1]>>>=1,e>>>=1;while(e);this.gb=d;this.$b=a[0];this.Pb=!0}}function bf(a){return a}
            function cf(a,b){a=this.S();var c=(b<<16>>16)*(a<<24>>24)|0;32767<c||-32768>c?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?21:24;return c&65535}function df(a,b){var c,d;a=this.ia();2==this.ja?(d=(b<<16>>16)*(a<<16>>16)|0,c=32767<d||-32768>d):(d=b*a,c=2147483647<d||-2147483648>d);c?(le(this),ne(this)):(me(this),oe(this));d&=this.C;this.A-=this.V===h?21:24;return d}
            function ef(a,b){var c=(a<<16>>16)*(b<<16>>16)|0;32767<c||-32768>c?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?this.B.wn:this.B.vn;return c&65535}function ff(a,b){var c=a*b;2147483647<c||-2147483648>c?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?this.B.wn:this.B.vn;return c|0}function gf(a){var b=(a&this.C)+1|0;ee(this,a,1,b,32830);this.A-=2;return a&~this.C|b&this.C}
            function Ee(a,b,c){this.A-=this.B.ll+c;this.oa.rk=!0;c=rb(this);var d=this.oa.sa,e=l(this);a=this.oa.jn(a);a!==h&&(u(this,c),u(this,d),u(this,e),null!=b&&u(this,b),this.zi=-1,this.pa=a,this.rh=this.oa.xa+this.oa.Ib|0,Vd(this))}function hf(a,b){this.A-=14+(this.V===h?0:2);se(this);this.Kb.load(b,!0)!==h&&this.Kb.uc>=this.oa.Ja&&this.Kb.uc>=(b&3)&&(ue(this),a=this.Kb.Ob&-256,2<this.ja&&(a|=(this.Kb.bi&-65281)<<16));return a}
            function jf(a,b){if(this.V===h)return xd.call(this),a;be(this,this.na(this.V+this.ja));this.A-=this.B.pf;return b}function kf(a){if(this.V===h)return xd.call(this),a;this.A-=this.B.tl;return this.V}function lf(a,b){if(this.V===h)return xd.call(this),a;ce(this,this.na(this.V+this.ja));this.A-=this.B.pf;return b}function mf(a,b){if(this.V===h)return xd.call(this),a;var c=this.na(this.V+this.ja);this.Hd.load(c);this.A-=this.B.pf;return b}
            function nf(a,b){if(this.V===h)return xd.call(this),a;var c=this.na(this.V+this.ja);this.Id.load(c);this.A-=this.B.pf;return b}function of(a,b){this.A-=14+(this.V===h?0:2);if(b&65528&&this.Kb.load(b,!0)!==h&&(7168==(this.Kb.Ob&7168)||this.Kb.uc>=this.oa.Ja)&&this.Kb.uc>=(b&3))return ue(this),this.Kb.Ib;se(this);return a}function pf(a,b){if(this.V===h)return xd.call(this),a;Rc(this,this.na(this.V+this.ja));this.A-=this.B.pf;return b}
            function qf(a,b){this.A-=this.Ga===h?this.V===h?this.B.Al:this.B.zl:this.B.xl;return b}function rf(a,b){return b}function sf(){this.Ga!==h&&Td(this,2);return qf.call(this,0,this.ld)}function tf(a,b){var c=b&65535,d=b>>>16,e=a&65535,m=a>>>16,n=c*e,e=(n>>>16)+d*e,p=e>>>16,e=(e&65535)+c*m;this.Pb=!0;this.gb=e<<16|n&65535;this.$b=p+((e>>>16)+d*m)|0}function uf(a,b){this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return D(this,a|b,128)}
            function vf(a,b){this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return D(this,a|b,this.dataType)}function wf(a){var b=this.Fa(),c=this.Fa();(a<<=this.ja>>2)&&t(this,q(this)+a);Vc(this,b,c,!1)&&(a&&t(this,q(this)+a),this.kb.sa&65528&&this.kb.uc<this.oa.Ja&&7168!=(this.kb.Ob&7168)&&this.kb.load(0),this.Qa.sa&65528&&this.Qa.uc<this.oa.Ja&&7168!=(this.Qa.Ob&7168)&&this.Qa.load(0));2==a&&this.Uh&&Xd(this,this.pa)}
            function xf(a,b){var c=a-b-qe(this)|0;ee(this,a,b,c,191,!0);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&255}function yf(a,b){var c=a-b-qe(this)|0;ee(this,a,b,c,this.dataType|63,!0);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&this.C}function zf(a){this.Q|=1;this.Oc[this.S()].call(this,a);this.A-=this.V===h?this.B.$p:this.B.Zp}function Af(){return ke(this)?1:0}function Bf(){return fe(this)?1:0}function Cf(){return fe(this)?0:1}
            function Df(){return ie(this)?1:0}function Ef(){return ie(this)?0:1}function Ff(){return fe(this)||ie(this)?1:0}function Gf(){return fe(this)||ie(this)?0:1}function Hf(){return je(this)?1:0}function If(){return je(this)?0:1}function Jf(){return ge(this)?1:0}function Kf(){return ge(this)?0:1}function Lf(){return!je(this)!=!ke(this)?1:0}function Mf(){return!je(this)!=!ke(this)?0:1}function Nf(){return ie(this)||!je(this)!=!ke(this)?1:0}function Of(){return ie(this)||!je(this)!=!ke(this)?0:1}
            function Pf(a,b,c){if(c){16<c&&(a=b,c-=16);var d=a<<c-1;a=(d<<1|b>>16-c)&65535;D(this,a,32768,d&32768)}return a}function Qf(a,b,c){if(c){var d=a<<c-1;a=d<<1|b>>32-c;D(this,a,-2147483648,d&-2147483648)}return a}function Rf(a,b){return Pf.call(this,a,b,this.S())}function Sf(a,b){return Qf.call(this,a,b,this.S())}function Tf(a,b){return Pf.call(this,a,b,this.G&31)}function Uf(a,b){return Qf.call(this,a,b,this.G&31)}
            function Vf(a,b,c){if(c){16<c&&(a=b,c-=16);var d=a>>c-1;a=(d>>1|b<<16-c)&65535;D(this,a,32768,d&1)}return a}function Wf(a,b,c){if(c){var d=a>>c-1;a=d>>1|b<<32-c;D(this,a,-2147483648,d&1)}return a}function Xf(a,b){return Vf.call(this,a,b,this.S())}function Yf(a,b){return Wf.call(this,a,b,this.S())}function Zf(a,b){return Vf.call(this,a,b,this.G&31)}function $f(a,b){return Wf.call(this,a,b,this.G&31)}
            function ag(a,b){var c=a-b|0;ee(this,a,b,c,191,!0);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&255}function bg(a,b){var c=a-b|0;ee(this,a,b,c,this.dataType|63,!0);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c&this.C}function cg(a,b){D(this,a&b,128);this.A-=this.Ga===h?this.V===h?this.B.lj:this.B.dg:this.B.dg;this.Q|=2;return a}function dg(a,b){D(this,a&b,32768);this.A-=this.Ga===h?this.V===h?this.B.lj:this.B.dg:this.B.dg;this.Q|=2;return a}
            function eg(a,b){if(this.V===h){switch(this.Oh&7){case 0:this.F=this.F&-256|a;break;case 1:this.G=this.G&-256|a;break;case 2:this.H=this.H&-256|a;break;case 3:this.D=this.D&-256|a;break;case 4:this.F=this.F&255|a<<8;break;case 5:this.G=this.G&255|a<<8;break;case 6:this.H=this.H&255|a<<8;break;case 7:this.D=this.D&255|a<<8}this.A-=this.B.nj}else this.Ga=this.V,P(this,a),this.A-=this.B.mj;return b}
            function fg(a,b){if(this.V===h){switch(this.Oh&7){case 0:this.F=a;break;case 1:this.G=a;break;case 2:this.H=a;break;case 3:this.D=a;break;case 4:t(this,a);break;case 5:this.L=a;break;case 6:this.K=a;break;case 7:this.J=a}this.A-=this.B.nj}else this.Ga=this.V,Q(this,a),this.A-=this.B.mj;return b}function gg(a,b){var c=a^b;D(this,c,128);this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return c}
            function hg(a,b){this.A-=this.Ga===h?this.V===h?this.B.Sb:this.B.tb:this.B.ec;return D(this,a^b,this.dataType)}function ig(a){Pc.call(this,13,0);return a}function ud(a){dd.call(this);return a}function T(a){xd.call(this);return a}function jg(){C(this,this.Jb-this.oa.xa);Ee.call(this,0,null,2)}function kg(){this.A-=this.V===h?2:this.B.Nl;return 1}function lg(){var a=this.G&255;this.A-=(this.V===h?this.B.cj:this.B.bj)+(a<<this.B.dj);return a}
            function mg(){var a=this.S();this.A-=(this.V===h?this.B.cj:this.B.bj)+(a<<this.B.dj);return a}function ng(){return null}function Pc(a,b,c,d){if(this.ha.Qg){var e=!1;if(80186<=this.ma)if(0>this.zi)C(this,this.Jb-this.oa.xa),e=!0;else if(8!=this.zi)b=0,a=8,e=!0;else{og.call(this,-1,0,c);Ed(this);return}og.call(this,a,b,c)&&(e=!1);e&&Ee.call(this,this.zi=a,b,d||0);this.Q|=3}else this.oc("Fault "+ea(a)+" blocked by Debugger",1073741824),C(this,this.Jb-this.oa.xa)}
            function Gd(a,b,c){this.nh=a;a=0;b&&(a|=1);c&&(a|=2);3==this.oa.Ja&&(a|=4);Pc.call(this,14,a)}
            function og(a,b,c){var d=32,e;a:{e=this.pa;var m=this.ka[(e&this.$d)>>>this.Aa];if(5==m.type&&(m=mc(this,e,!1,!0),!m)){e=null;break a}e=m.wj(e&this.Ea,e)}204!=e||this.Ve||(c=!1,d|=1);983040<=this.pa&&1048575>=this.pa&&(c=!1);c&&(a=(c?"\n":"")+"Fault "+ea(a)+(null!=b?" (0x"+da(b,4)+")":"")+" on opcode "+ea(e)+" at "+this.Ra.it(l(this),this.oa.sa)+" (%"+da(this.pa,6)+")",b=this.ha.Qb,this.oc(a,d)?c&&(c=b,xc(this.Ra)):(this.wa(a),xc(this)));return c}function vd(){this.yg[this.S()].call(this)}
            function yd(){u(this,q(this)&this.C);this.A-=this.B.mc}function ed(){var a=q(this)&this.C;u(this,this.F&this.C);u(this,this.G&this.C);u(this,this.H&this.C);u(this,this.D&this.C);u(this,a);u(this,this.L&this.C);u(this,this.K&this.C);u(this,this.J&this.C);this.A-=this.B.Hl}
            function fd(){this.J=this.J&~this.C|this.Fa();this.K=this.K&~this.C|this.Fa();this.L=this.L&~this.C|this.Fa();t(this,q(this)+this.ja);this.D=this.D&~this.C|this.Fa();this.H=this.H&~this.C|this.Fa();this.G=this.G&~this.C|this.Fa();this.F=this.F&~this.C|this.Fa();this.A-=this.B.Fl}function gd(){this.Ha[this.S()].call(this,Ne)}function zd(){this.vb[this.S()].call(this,Me)}function Ad(){this.Q|=20;this.da=this.ga=this.Hd;this.A-=this.B.Mc;xc(this)}
            function Bd(){this.Q|=20;this.da=this.ga=this.Id;this.A-=this.B.Mc;xc(this)}function Cd(){this.Q|=4096;this.ja^=6;this.C^=-65536;Ud(this);this.A-=this.B.Mc}function Dd(){this.Q|=8192;this.Ld^=6;this.T^=-65536;Kd(this);this.A-=this.B.Mc}function hd(){u(this,this.ia());this.A-=this.B.mc}function id(){this.Ha[this.S()].call(this,df)}function jd(){u(this,this.S());this.A-=this.B.mc}function kd(){this.Ha[this.S()].call(this,cf)}
            function ld(){var a=1,b=0,c=5;this.va&192&&(a=this.G&this.T,b=1,this.va&256&&(c=4));if(a--){var d=Ub(this.la,this.H,this.pa-b-1);this.Oe(this.Qa.lc(this.J&this.T,1),d);this.J=this.J&~this.T|this.J+(this.ca&tb?-1:1)&this.T;this.A-=c;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}}
            function md(){var a=1,b=0,c=5;this.va&192&&(a=this.G&this.T,b=1,this.va&256&&(c=4));if(a--){for(var d=this.pa-b-1,e=0,m=0,n=0;n<this.ja;n++)e|=Ub(this.la,this.H,d)<<m,m+=8;d=e;this.wf(this.Qa.lc(this.J&this.T,this.ja),d);this.J=this.J&~this.T|this.J+(this.ca&tb?-this.ja:this.ja)&this.T;this.A-=c;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}}
            function nd(){var a=1,b=0,c=5;this.va&192&&(a=this.G&this.T,b=1,this.va&256&&(c=4));if(a--){var d=this.wc(this.kb.qc(this.K&this.T,1));this.K=this.K&~this.T|this.K+(this.ca&tb?-1:1)&this.T;this.A-=c;Wb(this.la,this.H,d,this.pa-b-1);this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}}
            function od(){var a=1,b=0,c=5;this.va&192&&(a=this.G&this.T,b=1,this.va&256&&(c=4));if(a--){var d=Tc(this,this.kb,this.K&this.T);this.K=this.K&~this.T|this.K+(this.ca&tb?-this.ja:this.ja)&this.T;this.A-=c;for(var c=this.pa-b-1,e=0,m=0;m<this.ja;m++)Wb(this.la,this.H,d>>e&255,c),e+=8;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}}function pg(){var a=this.M();ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}
            function qg(){var a=this.M();ke(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}function rg(){var a=this.M();fe(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}function sg(){var a=this.M();fe(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}function tg(){var a=this.M();ie(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}function ug(){var a=this.M();ie(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}
            function vg(){var a=this.M();fe(this)||ie(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}function wg(){var a=this.M();fe(this)||ie(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}function xg(){var a=this.M();je(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}function yg(){var a=this.M();je(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}function zg(){var a=this.M();ge(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}
            function Ag(){var a=this.M();ge(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}function Bg(){var a=this.M();!je(this)!=!ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}function Cg(){var a=this.M();!je(this)==!ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}function Dg(){var a=this.M();ie(this)||!je(this)!=!ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca}
            function Eg(){var a=this.M();ie(this)||!je(this)!=!ke(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)}function Fg(){this.ie[this.S()].call(this,Gg,this.S);this.A-=this.Ga===h?1:this.B.hh}function pd(){this.ie[this.S()].call(this,Hg,mg)}function qd(){this.Fc[this.S()].call(this,2==this.ja?Ig:Jg,mg)}function Kg(){var a=Ae(this)<<(this.ja>>2),b=this.Fa();C(this,b);a&&t(this,q(this)+a);this.A-=this.B.Ml}function Lg(){var a=this.Fa();C(this,a);this.A-=this.B.Jl}
            function rd(){var a=Ae(this),b=this.S()&31;this.A-=11;u(this,this.L);var c=q(this)&this.C;if(0<b){for(this.A-=(b<<2)+(1<b?1:0);--b;)this.L=this.L&~this.C|this.L-this.ja&this.C,u(this,Tc(this,this.ra,this.L&this.C));u(this,c)}this.L=this.L&~this.C|c;t(this,q(this)&~this.ra.T|q(this)-a&this.ra.T)}function sd(){t(this,q(this)&~this.ra.T|this.L&this.ra.T);this.L=this.L&~this.C|this.Fa()&this.C;this.A-=5}function Mg(){wf.call(this,Ae(this));this.A-=this.B.Ll}
            function Ng(){wf.call(this,0);this.A-=this.B.Kl}function Og(){this.Ha[this.S()].call(this,bf);this.A-=8}function Pg(){this.Q|=36;this.A-=this.B.Mc}function td(){xd.call(this)}function dd(){Pc.call(this,6);xc(this)}function xd(){C(this,this.Jb-this.oa.xa);ab(this,"Undefined opcode "+ea(Cb(this.la,this.pa))+" at "+("0x"+da(this.pa)));xc(this)}
            var $c=[function(){var a=this.S();this.Oc[a].call(this,Ie)},function(){this.vb[this.S()].call(this,Je)},function(){this.Gc[this.S()].call(this,Ie)},function(){this.Ha[this.S()].call(this,Je)},function(){this.F=this.F&-256|Ie.call(this,this.F&255,this.S());this.A--},function(){this.F=this.F&~this.C|Je.call(this,this.F&this.C,this.ia());this.A--},function(){u(this,this.Qa.sa);this.A-=this.B.Fe},function(){ce(this,this.Fa());this.A-=this.B.Tb},function(){this.Oc[this.S()].call(this,uf)},function(){this.vb[this.S()].call(this,
            vf)},function(){this.Gc[this.S()].call(this,uf)},function(){this.Ha[this.S()].call(this,vf)},function(){this.F=this.F&-256|uf.call(this,this.F&255,this.S());this.A--},function(){this.F=this.F&~this.C|vf.call(this,this.F&this.C,this.ia());this.A--},function(){u(this,this.oa.sa);this.A-=this.B.Fe},function(){ae(this,this.Fa());this.A-=this.B.Tb},function(){this.Oc[this.S()].call(this,Ge)},function(){this.vb[this.S()].call(this,He)},function(){this.Gc[this.S()].call(this,Ge)},function(){this.Ha[this.S()].call(this,
            He)},function(){this.F=this.F&-256|Ge.call(this,this.F&255,this.S());this.A--},function(){this.F=this.F&~this.C|He.call(this,this.F&this.C,this.ia());this.A--},function(){u(this,this.ra.sa);this.A-=this.B.Fe},function(){Rc(this,this.Fa());this.A-=this.B.Tb},function(){this.Oc[this.S()].call(this,xf)},function(){this.vb[this.S()].call(this,yf)},function(){this.Gc[this.S()].call(this,xf)},function(){this.Ha[this.S()].call(this,yf)},function(){this.F=this.F&-256|xf.call(this,this.F&255,this.S());this.A--},
            function(){this.F=this.F&~this.C|yf.call(this,this.F&this.C,this.ia());this.A--},function(){u(this,this.kb.sa);this.A-=this.B.Fe},function(){be(this,this.Fa());this.A-=this.B.Tb},function(){this.Oc[this.S()].call(this,Ke)},function(){this.vb[this.S()].call(this,Le)},function(){this.Gc[this.S()].call(this,Ke)},function(){this.Ha[this.S()].call(this,Le)},function(){this.F=this.F&-256|Ke.call(this,this.F&255,this.S());this.A--},function(){this.F=this.F&~this.C|Le.call(this,this.F&this.C,this.ia());this.A--},
            function(){this.Q|=20;this.da=this.ga=this.Qa;this.A-=this.B.Mc},function(){var a=this.F&255,b=he(this),c=fe(this);if(9<(a&15)||b)a+=6,b=yb;if(159<a||c)a+=96,c=Ab;a&=255;this.F=this.F&-256|a;D(this,a,128);c?le(this):me(this);b?te(this):re(this);this.A-=this.B.Ee},function(){this.Oc[this.S()].call(this,ag)},function(){this.vb[this.S()].call(this,bg)},function(){this.Gc[this.S()].call(this,ag)},function(){this.Ha[this.S()].call(this,bg)},function(){this.F=this.F&-256|ag.call(this,this.F&255,this.S());
            this.A--},function(){this.F=this.F&~this.C|bg.call(this,this.F&this.C,this.ia());this.A--},function(){this.Q|=20;this.da=this.ga=this.oa;this.A-=this.B.Mc},function(){var a=this.F&255,b=he(this),c=fe(this);if(9<(a&15)||b)a-=6,b=yb;if(159<a||c)a-=96,c=Ab;a&=255;this.F=this.F&-256|a;D(this,a,128);c?le(this):me(this);b?te(this):re(this);this.A-=this.B.Ee},function(){this.Oc[this.S()].call(this,gg)},function(){this.vb[this.S()].call(this,hg)},function(){this.Gc[this.S()].call(this,gg)},function(){this.Ha[this.S()].call(this,
            hg)},function(){this.F=this.F&-256|gg.call(this,this.F&255,this.S());this.A--},function(){this.F=this.F&~this.C|hg.call(this,this.F&this.C,this.ia());this.A--},function(){this.Q|=20;this.da=this.ga=this.ra;this.A-=this.B.Mc},function(){var a,b,c=this.F&255,d=this.F>>8&255;9<(c&15)||he(this)?(c=c+6&15,d=d+1&255,a=b=1):a=b=0;this.F=this.F&-65536|d<<8|c;a?le(this):me(this);b?te(this):re(this);this.A-=this.B.Ee},function(){this.Oc[this.S()].call(this,Xe)},function(){this.vb[this.S()].call(this,Ye)},function(){this.Gc[this.S()].call(this,
            Xe)},function(){this.Ha[this.S()].call(this,Ye)},function(){Xe.call(this,this.F&255,this.S());this.A--},function(){Ye.call(this,this.F&this.C,this.ia());this.A--},function(){this.Q|=20;this.da=this.ga=this.kb;this.A-=this.B.Mc},function(){var a,b,c=this.F&255,d=this.F>>8&255;9<(c&15)||he(this)?(c=c-6&15,d=d-1&255,a=b=1):a=b=0;this.F=this.F&-65536|d<<8|c;a?le(this):me(this);b?te(this):re(this);this.A-=this.B.Ee},function(){this.F=gf.call(this,this.F)},function(){this.G=gf.call(this,this.G)},function(){this.H=
            gf.call(this,this.H)},function(){this.D=gf.call(this,this.D)},function(){t(this,gf.call(this,q(this)))},function(){this.L=gf.call(this,this.L)},function(){this.K=gf.call(this,this.K)},function(){this.J=gf.call(this,this.J)},function(){this.F=Ze.call(this,this.F)},function(){this.G=Ze.call(this,this.G)},function(){this.H=Ze.call(this,this.H)},function(){this.D=Ze.call(this,this.D)},function(){t(this,Ze.call(this,q(this)))},function(){this.L=Ze.call(this,this.L)},function(){this.K=Ze.call(this,this.K)},
            function(){this.J=Ze.call(this,this.J)},function(){u(this,this.F&this.C);this.A-=this.B.mc},function(){u(this,this.G&this.C);this.A-=this.B.mc},function(){u(this,this.H&this.C);this.A-=this.B.mc},function(){u(this,this.D&this.C);this.A-=this.B.mc},function(){u(this,q(this)-2&65535);this.A-=this.B.mc},function(){u(this,this.L&this.C);this.A-=this.B.mc},function(){u(this,this.K&this.C);this.A-=this.B.mc},function(){u(this,this.J&this.C);this.A-=this.B.mc},function(){this.F=this.F&~this.C|this.Fa();
            this.A-=this.B.Tb},function(){this.G=this.G&~this.C|this.Fa();this.A-=this.B.Tb},function(){this.H=this.H&~this.C|this.Fa();this.A-=this.B.Tb},function(){this.D=this.D&~this.C|this.Fa();this.A-=this.B.Tb},function(){t(this,q(this)&~this.C|this.Fa());this.A-=this.B.Tb},function(){this.L=this.L&~this.C|this.Fa();this.A-=this.B.Tb},function(){this.K=this.K&~this.C|this.Fa();this.A-=this.B.Tb},function(){this.J=this.J&~this.C|this.Fa();this.A-=this.B.Tb},pg,qg,rg,sg,tg,ug,vg,wg,xg,yg,zg,Ag,Bg,Cg,Dg,Eg,
            pg,qg,rg,sg,tg,ug,vg,wg,xg,yg,zg,Ag,Bg,Cg,Dg,Eg,Fg,function(){this.Fc[this.S()].call(this,Qg,this.ia);this.A-=this.Ga===h?1:this.B.hh},Fg,function(){this.Fc[this.S()].call(this,Qg,this.M);this.A-=this.Ga===h?1:this.B.hh},function(){this.Oc[this.S()].call(this,cg)},function(){this.vb[this.S()].call(this,dg)},function(){this.Gc[this.Oh=this.S()].call(this,eg)},function(){this.Ha[this.Oh=this.S()].call(this,fg)},function(){this.Q|=1;this.Oc[this.S()].call(this,qf)},function(){this.Q|=1;this.vb[this.S()].call(this,
            qf)},function(){this.Gc[this.S()].call(this,qf)},function(){this.Ha[this.S()].call(this,qf)},function(){var a=this.S();switch((a&56)>>3){case 0:this.ld=this.Qa.sa;break;case 1:this.ld=this.oa.sa;break;case 2:this.ld=this.ra.sa;break;case 3:this.ld=this.kb.sa;break;case 4:if(this.ma>=qb){this.ld=this.Hd.sa;break}dd.call(this);break;case 5:if(this.ma>=qb){this.ld=this.Id.sa;break}default:dd.call(this)}this.Q|=1;this.vb[a].call(this,sf)},function(){this.Q|=1;this.da=this.ga=this.On;this.Ha[this.S()].call(this,
            kf)},function(){var a,b=this.S(),c=(b&56)>>3;switch(c){case 0:a=this.F;break;case 2:a=this.H;break;case 3:a=this.D;break;default:if(80286==this.ma||this.ma==qb&&4!=c&&5!=c){dd.call(this);return}switch(c){case 1:a=this.G;break;case 4:a=q(this);break;case 5:a=this.L;break;case 6:a=this.K;break;case 7:a=this.J}}this.Ha[b].call(this,qf);switch(c){case 0:ce(this,this.F);this.F=a;break;case 1:ae(this,this.G);this.G=a;break;case 2:Rc(this,this.H);this.H=a;break;case 3:be(this,this.D);this.D=a;break;case 4:this.ma>=
            qb?this.Hd.load(q(this)):ce(this,q(this));t(this,a);break;case 5:this.ma>=qb?this.Id.load(this.L):ae(this,this.L);this.L=a;break;case 6:Rc(this,this.K);this.K=a;break;case 7:be(this,this.J),this.J=a}},function(){this.Q|=1;this.Fc[this.S()].call(this,Rg,this.Fa)},function(){this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.G&this.C;this.G=this.G&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.H&this.C;this.H=this.H&~this.C|a&this.C;this.A-=3},function(){var a=
            this.F;this.F=this.F&~this.C|this.D&this.C;this.D=this.D&~this.C|a&this.C;this.A-=3},function(){var a=this.F,b=q(this);this.F=this.F&~this.C|b&this.C;t(this,b&~this.C|a&this.C);this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.L&this.C;this.L=this.L&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.K&this.C;this.K=this.K&~this.C|a&this.C;this.A-=3},function(){var a=this.F;this.F=this.F&~this.C|this.J&this.C;this.J=this.J&~this.C|a&this.C;this.A-=3},function(){this.F=
            2==this.ja?this.F&-65536|this.F<<24>>24&65535:this.F<<16>>16;this.A-=2},function(){this.H=2==this.ja?this.H&-65536|(this.F&32768?65535:0):this.F&-2147483648?-1:0;this.A-=this.B.Tk},function(){We.call(this,this.ia(),Ae(this));this.A-=this.B.Wk},function(){this.oc("WAIT not implemented");this.A--},function(){u(this,rb(this));this.A-=this.B.mc},function(){Uc(this,this.Fa());this.A-=this.B.Tb},function(){var a=this.F>>8&255;a&Ab?le(this):me(this);a&zb?(this.resultType&=-3,this.ca|=zb):(this.resultType&=
            -3,this.ca&=~zb);a&yb?te(this):re(this);a&xb?ue(this):se(this);a&wb?(this.resultType&=-17,this.ca|=wb):(this.resultType&=-17,this.ca&=~wb);this.A-=this.B.Cb},function(){this.F=this.F&-65281|(rb(this)&Jc)<<8;this.A-=this.B.Cb},function(){var a=this.F&-256,b;b=R(this);b=this.wc(this.da.qc(b,1));this.F=a|b;this.A-=this.B.Qi},function(){this.F=this.F&~this.C|Tc(this,this.da,R(this));this.A-=this.B.Qi},function(){var a=R(this),b=this.F;this.Oe(this.da.lc(a,1),b);this.A-=this.B.Ri},function(){var a=R(this),
            b=this.F;this.wf(this.da.lc(a,this.ja),b);this.A-=this.B.Ri},function(){var a=1,b=0,c=this.B.Si;this.va&192&&(a=this.G&this.T,b=1,c=this.B.Ui,this.va&256||(this.A-=this.B.Ti));if(a--){var d=this.ca&tb?-1:1,e=this.wc(this.da.qc(this.K,1));this.Oe(this.Qa.lc(this.J&this.T,1),e);this.K=this.K&~this.T|this.K+d&this.T;this.J=this.J&~this.T|this.J+d&this.T;this.A-=c;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}},function(){var a=1,b=0,c=this.B.Si;this.va&192&&(a=this.G&this.T,
            b=1,c=this.B.Ui,this.va&256||(this.A-=this.B.Ti));if(a--){var d=this.ca&tb?-this.ja:this.ja,e=Tc(this,this.da,this.K);this.wf(this.Qa.lc(this.J&this.T,this.ja),e);this.K=this.K&~this.T|this.K+d&this.T;this.J=this.J&~this.T|this.J+d&this.T;this.A-=c;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}},function(){var a=1,b=0,c=this.B.Di;this.va&192&&(a=this.G&this.T,b=1,c=this.B.Fi,this.va&256||(this.A-=this.B.Ei));if(a--){var d=this.ca&tb?-1:1,e=we(this,this.da,this.K&this.T),m=
            ye(this,this.Qa,this.J&this.T);Xe.call(this,e,m);this.K=this.K&~this.T|this.K+d&this.T;this.J=this.J&~this.T|this.J+d&this.T;this.A-=c-this.B.tb;this.G=this.G&~this.T|this.G-b&this.T;a&&ie(this)==(this.va&64)&&(this.pa=this.Jb,this.Q|=256)}},function(){var a=1,b=0,c=this.B.Di;this.va&192&&(a=this.G&this.T,b=1,c=this.B.Fi,this.va&256||(this.A-=this.B.Ei));if(a--){var d=this.ca&tb?-this.ja:this.ja,e=xe(this,this.da,this.K&this.T),m=ze(this,this.Qa,this.J&this.T);Ye.call(this,e,m);this.K=this.K&~this.T|
            this.K+d&this.T;this.J=this.J&~this.T|this.J+d&this.T;this.A-=c-this.B.tb;this.G=this.G&~this.T|this.G-b&this.T;a&&ie(this)==(this.va&64)&&(this.pa=this.Jb,this.Q|=256)}},function(){D(this,this.F&this.S(),128);this.A-=this.B.Ee},function(){D(this,this.F&this.ia(),this.dataType);this.A-=this.B.Ee},function(){var a=1,b=0,c=this.B.gj;this.va&192&&(a=this.G&this.T,b=1,c=this.B.ij,this.va&256||(this.A-=this.B.hj));if(a--){var d=this.F;this.Oe(this.Qa.lc(this.J&this.T,1),d);this.J=this.J&~this.T|this.J+
            (this.ca&tb?-1:1)&this.T;this.A-=c;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}},function(){var a=1,b=0,c=this.B.gj;this.va&192&&(a=this.G&this.T,b=1,c=this.B.ij,this.va&256||(this.A-=this.B.hj));if(a--){var d=this.F;this.wf(this.Qa.lc(this.J&this.T,this.ja),d);this.J=this.J&~this.T|this.J+(this.ca&tb?-this.ja:this.ja)&this.T;this.A-=c;this.G=this.G&~this.T|this.G-b&this.T;a&&(this.pa=this.Jb,this.Q|=256)}},function(){var a=1,b=0,c=this.B.Ki;this.va&192&&(a=this.G&this.T,
            b=1,c=this.B.Mi,this.va&256||(this.A-=this.B.Li));a--&&(this.F=this.F&-256|this.wc(this.da.qc(this.K&this.T,1)),this.K=this.K&~this.T|this.K+(this.ca&tb?-1:1)&this.T,this.A-=c,this.G=this.G&~this.T|this.G-b&this.T,a&&(this.pa=this.Jb,this.Q|=256))},function(){var a=1,b=0,c=this.B.Ki;this.va&192&&(a=this.G&this.T,b=1,c=this.B.Mi,this.va&256||(this.A-=this.B.Li));a--&&(this.F=this.F&~this.C|Tc(this,this.da,this.K&this.T),this.K=this.K&~this.T|this.K+(this.ca&tb?-this.ja:this.ja)&this.T,this.A-=c,this.G=
            this.G&~this.T|this.G-b&this.T,a&&(this.pa=this.Jb,this.Q|=256))},function(){var a=1,b=0,c=this.B.Zi;this.va&192&&(a=this.G&this.T,b=1,c=this.B.aj,this.va&256||(this.A-=this.B.$i));a--&&(Xe.call(this,this.F&255,ye(this,this.Qa,this.J&this.T)),this.J=this.J&~this.T|this.J+(this.ca&tb?-1:1)&this.T,this.A-=c-this.B.tb,this.G=this.G&~this.T|this.G-b&this.T,a&&ie(this)==(this.va&64)&&(this.pa=this.Jb,this.Q|=256))},function(){var a=1,b=0,c=this.B.Zi;this.va&192&&(a=this.G&this.T,b=1,c=this.B.aj,this.va&
            256||(this.A-=this.B.$i));a--&&(Ye.call(this,this.F&this.C,ze(this,this.Qa,this.J&this.T)),this.J=this.J&~this.T|this.J+(this.ca&tb?-this.ja:this.ja)&this.T,this.A-=c-this.B.tb,this.G=this.G&~this.T|this.G-b&this.T,a&&ie(this)==(this.va&64)&&(this.pa=this.Jb,this.Q|=256))},function(){this.F=this.F&-256|this.S();this.A-=this.B.Cb},function(){this.G=this.G&-256|this.S();this.A-=this.B.Cb},function(){this.H=this.H&-256|this.S();this.A-=this.B.Cb},function(){this.D=this.D&-256|this.S();this.A-=this.B.Cb},
            function(){this.F=this.F&255|this.S()<<8;this.A-=this.B.Cb},function(){this.G=this.G&255|this.S()<<8;this.A-=this.B.Cb},function(){this.H=this.H&255|this.S()<<8;this.A-=this.B.Cb},function(){this.D=this.D&255|this.S()<<8;this.A-=this.B.Cb},function(){this.F=this.F&~this.C|this.ia();this.A-=this.B.Cb},function(){this.G=this.G&~this.C|this.ia();this.A-=this.B.Cb},function(){this.H=this.H&~this.C|this.ia();this.A-=this.B.Cb},function(){this.D=this.D&~this.C|this.ia();this.A-=this.B.Cb},function(){t(this,
            q(this)&~this.C|this.ia());this.A-=this.B.Cb},function(){this.L=this.L&~this.C|this.ia();this.A-=this.B.Cb},function(){this.K=this.K&~this.C|this.ia();this.A-=this.B.Cb},function(){this.J=this.J&~this.C|this.ia();this.A-=this.B.Cb},Kg,Lg,Kg,Lg,function(){this.Ha[this.S()].call(this,lf)},function(){this.Ha[this.S()].call(this,jf)},function(){this.Q|=1;this.ie[this.S()].call(this,Sg,this.S)},function(){this.Q|=1;this.Fc[this.S()].call(this,Sg,this.ia)},Mg,Ng,Mg,Ng,function(){Ee.call(this,3,null,this.B.ml)},
            function(){var a=this.S(),b;a:{b=this.Ch[a];if(void 0!==b)for(var c=0;c<b.length;c++)if(!b[c][1].call(b[c][0],this.pa)){b=!1;break a}b=!0}b?Ee.call(this,a,null,0):this.A--},function(){ke(this)?Ee.call(this,4,null,this.B.nl):this.A-=this.B.ol},function(){this.A-=this.B.kl;if(this.zb&1&&this.ca&16384){var a=this.na(this.hb.xa+0);Sc(this.oa,a,!1)}else{var a=this.oa.Ja,b=this.Fa(),c=this.Fa(),d=this.Fa();null!=Vc(this,b,c,!1)&&(Uc(this,d,a),this.Uh&&Xd(this,this.pa))}},function(){this.ie[this.S()].call(this,
            Hg,kg)},function(){this.Fc[this.S()].call(this,2==this.ja?Ig:Jg,kg)},function(){this.ie[this.S()].call(this,Hg,lg)},function(){this.Fc[this.S()].call(this,2==this.ja?Ig:Jg,lg)},function(){var a=this.S();if(a){var b=this.F&255;this.F=this.F&-65536|b/a<<8|b%a;D(this,this.F,128);this.A-=this.B.Nk}},function(){var a=this.S();this.F=this.F&-65536|(this.F>>8&255)*a+this.F&255;D(this,this.F,128);this.A-=this.B.Mk},function(){this.F=this.F&-256|(fe(this)?255:0);this.A-=2},function(){this.F=this.F&-256|we(this,
            this.da,this.D+(this.F&255)&65535);this.A-=this.B.Ol},Og,Og,Og,Og,Og,Og,Og,Og,function(){var a=this.M();(this.G=this.G-1&this.T)&&!ie(this)?(C(this,l(this)+a),this.A-=this.B.vl):this.A-=this.B.Ni},function(){var a=this.M();(this.G=this.G-1&this.T)&&ie(this)?(C(this,l(this)+a),this.A-=this.B.Oi):this.A-=this.B.Pi},function(){var a=this.M();(this.G=this.G-1&this.T)?(C(this,l(this)+a),this.A-=this.B.ul):this.A-=this.B.Ni},function(){var a=this.M();this.G&this.T?this.A-=this.B.Pi:(C(this,l(this)+a),this.A-=
            this.B.Oi)},function(){var a=this.S();this.F=this.F&-256|Ub(this.la,a,this.pa-2);this.A-=this.B.Ii},function(){var a=this.S();this.F=Ub(this.la,a,this.pa-2);this.F|=Ub(this.la,a+1&65535,this.pa-2)<<8;this.A-=this.B.Ii},function(){var a=this.S();Wb(this.la,a,this.F&255,this.pa-2);this.A-=this.B.Yi},function(){var a=this.S();Wb(this.la,a,this.F&255,this.pa-2);Wb(this.la,a+1&65535,this.F>>8,this.pa-2);this.A-=this.B.Yi},function(){var a=this.ia(),b=l(this),a=b+a;u(this,b);C(this,a);this.A-=this.B.Uk},
            function(){var a=this.ia();C(this,l(this)+a);this.A-=this.B.Ji},function(){Vc(this,this.ia(),Ae(this));this.A-=this.B.ql},function(){var a=this.M();C(this,l(this)+a);this.A-=this.B.Ji},function(){this.F=this.F&-256|Ub(this.la,this.H,this.pa-1);this.A-=this.B.Hi},function(){this.F=Ub(this.la,this.H,this.pa-1);this.F|=Ub(this.la,this.H+1&65535,this.pa-1)<<8;this.A-=this.B.Hi},function(){Wb(this.la,this.H,this.F&255,this.pa-1);this.A-=this.B.Xi},function(){Wb(this.la,this.H,this.F&255,this.pa-1);Wb(this.la,
            this.H+1&65535,this.F>>8,this.pa-1);this.A-=this.B.Xi},Pg,Pg,function(){this.Q|=132;this.A-=this.B.Mc},function(){this.Q|=68;this.A-=this.B.Mc},function(){this.lb|=4;this.A-=2;this.ca&ub||xc(this)},function(){fe(this)?me(this):le(this);this.A-=2},function(){this.Pb=!1;this.ie[this.S()].call(this,Tg,ng);this.Pb&&(this.F=this.F&~this.C|this.gb&this.C)},function(){this.Pb=!1;this.Fc[this.S()].call(this,Ug,ng);this.Pb&&(this.F=this.F&~this.C|this.gb&this.C,this.H=this.H&~this.C|this.$b&this.C)},function(){me(this);
            this.A-=2},function(){le(this);this.A-=2},function(){this.ca&=~ub;this.A-=this.B.Sk},function(){this.ca|=ub;this.Q|=4;this.A-=2},function(){this.ca&=~tb;this.A-=2},function(){this.ca|=tb;this.A-=2},function(){this.ie[this.S()].call(this,ad,ng)},function(){this.Fc[this.S()].call(this,bd,ng)}],Gg=[Ie,uf,Ge,xf,Ke,ag,gg,Xe],Qg=[Je,vf,He,yf,Le,bg,hg,Ye],Rg=[function(a,b){this.A-=this.Ga===h?this.B.Tb:this.B.Gl;return b},ig,ig,ig,ig,ig,ig,ig],Sg=[function(a,b){this.A-=this.Ga===h?this.B.yl:this.B.wl;return b},
            T,T,T,T,T,T,T],Hg=[function(a,b){var c=a,d=b&this.ub;if(d){var e;(d&=7)?(e=a<<d-1,c=(a<<d|a>>8-d)&255):e=a<<7;pe(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e;(d&=7)?(e=a<<8-d,c=(a>>>d|e)&255):e=a;pe(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e=qe(this);(d%=9)?(c=(a<<d|e<<d-1|a>>9-d)&255,e=a<<d-1):e<<=7;pe(this,c,e,128)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e=qe(this);(d%=9)?(c=(a>>d|e<<8-d|a<<9-d)&255,e=a<<8-d):e<<=7;pe(this,c,e,128)}return c},
            function(a,b){var c=a,d=b&this.ub;if(d){var e=0;8<d?c=0:(e=a<<d-1,c=e<<1&255);D(this,c,128,e&128,(c^e)&128)}return c},function(a,b){var c=b&this.ub;c&&(c=8<c?0:a>>>c-1,a=c>>>1&255,D(this,a,128,c&1,a&128));return a},T,function(a,b){var c=b&this.ub;c&&(9<c&&(c=9),c=a<<24>>24>>c-1,a=c>>1&255,D(this,a,128,c&1));return a}],Ig=[function(a,b){var c=a,d=b&this.ub;if(d){var e;(d&=15)?(e=a<<d-1,c=(a<<d|a>>16-d)&65535):e=a<<15;pe(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e;(d&=15)?
            (e=a<<16-d,c=(a>>>d|e)&65535):e=a;pe(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e=qe(this);(d%=17)?(c=(a<<d|e<<d-1|a>>17-d)&65535,e=a<<d-1):e<<=15;pe(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e=qe(this);(d%=17)?(c=(a>>d|e<<16-d|a<<17-d)&65535,e=a<<16-d):e<<=15;pe(this,c,e,32768)}return c},function(a,b){var c=a,d=b&this.ub;if(d){var e=0;16<d?c=0:(e=a<<d-1,c=e<<1&65535);D(this,c,32768,e&32768,(c^e)&32768)}return c},function(a,b){var c=b&this.ub;
            c&&(c=16<c?0:a>>>c-1,a=c>>>1&65535,D(this,a,32768,c&1,a&32768));return a},T,function(a,b){var c=b&this.ub;c&&(17<c&&(c=17),c=a<<16>>16>>c-1,a=c>>1&65535,D(this,a,32768,c&1));return a}],Jg=[function(a,b){var c=a,d=b&this.ub;d&&(c=a<<d|a>>>32-d,pe(this,c,a<<d-1,-2147483648));return c},function(a,b){var c=a,d=b&this.ub;if(d){var e=a<<32-d,c=a>>>d|e;pe(this,c,e,-2147483648)}return c},function(a,b){var c=a,d=b&this.ub;d&&(c=qe(this),c=a<<d|c<<d-1|a>>>32-d>>>1,pe(this,c,a<<d-1,-2147483648));return c},function(a,
            b){var c=a,d=b&this.ub;d&&(c=qe(this),c=a>>>d|c<<32-d|a<<32-d<<1,pe(this,c,a<<32-d,-2147483648));return c},function(a,b){var c=a,d=b&this.ub;d&&(d=a<<d-1,c=d<<1,D(this,c,-2147483648,d&-2147483648,(c^d)&-2147483648));return c},function(a,b){var c=b&this.ub;c&&(c=a>>>c-1,a=c>>>1,D(this,a,-2147483648,c&1,a&-2147483648));return a},T,function(a,b){var c=b&this.ub;c&&(c=a>>c-1,a=c>>1,D(this,a,-2147483648,c&1));return a}],Tg=[function(a,b){b=this.S();D(this,a&b,128);this.A-=this.V===h?this.B.kj:this.B.jj;
            this.Q|=2;return a},T,function(a){this.A-=this.V===h?this.B.cg:this.B.bg;return a^255},function(a){var b=-a|0;ee(this,0,a,b,191,!0);this.A-=this.V===h?this.B.cg:this.B.bg;return b&255},function(a){this.Pb=!0;this.gb=(this.F&255)*a&65535;this.gb&65280?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?this.B.Cl:this.B.Bl;this.Q|=2;return a},function(a){var b=(this.F<<24>>24)*(a<<24>>24)|0;this.Pb=!0;this.gb=b&65535;127<b||-128>b?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?this.B.hl:
            this.B.gl;this.Q|=2;return a},function(a,b){if(!a)return jg.call(this),a;var c=(b=this.F&65535)/a;if(255<c)return jg.call(this),a;this.Pb=!0;this.gb=c&255|(b%a&255)<<8;this.A-=this.V===h?this.B.$k:this.B.Zk;this.Q|=2;return a},function(a,b){if(!a)return jg.call(this),a;var c=a<<24>>24,d=(b=this.F<<16>>16)/c|0;if(d!=d<<24>>24||8086==this.ma&&-128==d)return jg.call(this),a;this.Pb=!0;this.gb=d&255|(b%c&255)<<8;this.A-=this.V===h?this.B.dl:this.B.cl;this.Q|=2;return a}],Ug=[function(a,b){b=this.ia();
            D(this,a&b,32768);this.A-=this.V===h?this.B.kj:this.B.jj;this.Q|=2;return a},T,function(a){this.A-=this.V===h?this.B.cg:this.B.bg;return a^65535},function(a){var b=-a|0;ee(this,0,a,b,32831,!0);this.A-=this.V===h?this.B.cg:this.B.bg;return b&65535},function(a,b){if(2==this.ja){b=this.F&65535;var c=b*a|0;this.Pb=!0;this.gb=c&65535;this.$b=c>>16&65535}else tf.call(this,a,this.F);this.$b?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?this.B.El:this.B.Dl;this.Q|=2;return a},function(a,b){var c;
            if(2==this.ja)b=this.F&65535,c=(b<<16>>16)*(a<<16>>16)|0,this.Pb=!0,this.gb=c&65535,this.$b=c>>16&65535,c=32767<c||-32768>c;else{c=a;var d=this.F,e=!1;0>d&&(d=-d|0,e=!e);0>c&&(c=-c|0,e=!e);tf.call(this,c,d);e&&(this.gb=~this.gb+1|0,this.$b=~this.$b+(this.gb?0:1)|0);c=this.$b!=this.gb>>31}c?(le(this),ne(this)):(me(this),oe(this));this.A-=this.V===h?this.B.jl:this.B.il;this.Q|=2;return a},function(a,b){if(2==this.ja){if(!a)return jg.call(this),a;b=65536*(this.H&65535)+(this.F&65535);var c=b/a|0;if(65536<=
            c)return jg.call(this),a;this.Pb=!0;this.gb=c&65535;this.$b=b%a&65535}else{af.call(this,this.F,this.H,a);if(!this.Pb)return jg.call(this),a;this.gb|=0;this.$b|=0}this.A-=this.V===h?this.B.bl:this.B.al;this.Q|=2;return a},function(a,b){if(2==this.ja){if(!a)return jg.call(this),a;var c=a<<16>>16,d=(b=this.H<<16|this.F&65535)/c|0;if(d!=d<<16>>16||8086==this.ma&&-32768==d)return jg.call(this),a;this.Pb=!0;this.gb=d&65535;this.$b=b%c&65535}else{var c=this.F,d=this.H,e=a,m=!1,n=!1;0>e&&(e=-e|0,m=!m);0>
            d&&(c=-c|0,d=~d+(c?0:1)|0,n=!0,m=!m);af.call(this,c,d,e);2147483647<this.gb&&(this.Pb=!1);m&&(this.gb=-this.gb);n&&(this.$b=-this.$b);if(!this.Pb)return jg.call(this),a;this.gb|=0;this.$b|=0}this.A-=this.V===h?this.B.fl:this.B.el;this.Q|=2;return a}],ad=[function(a){var b=a+1|0;ee(this,a,1,b,190);this.A-=this.V===h?this.B.ag:this.B.$f;return b&255},function(a){var b=a-1|0;ee(this,a,1,b,190,!0);this.A-=this.V===h?this.B.ag:this.B.$f;return b&255},T,T,T,T,T,T],bd=[function(a){var b=a+1|0;ee(this,a,
            1,b,32830);this.A-=this.V===h?this.B.ag:this.B.$f;return b&65535},function(a){var b=a-1|0;ee(this,a,1,b,32830,!0);this.A-=this.V===h?this.B.ag:this.B.$f;return b&65535},function(a){u(this,l(this));C(this,a);this.A-=this.V===h?this.B.Yk:this.B.Xk;this.Q|=2;return a},function(a){if(this.V===h)return T.call(this,a);We.call(this,a,this.na(this.V+this.ja));this.A-=this.B.Vk;this.Q|=2;return a},function(a){C(this,a);this.A-=this.V===h?this.B.sl:this.B.rl;this.Q|=2;return a},function(a){if(this.V===h)return T.call(this,
            a);Vc(this,a,this.na(this.V+this.ja));this.Uh&&Xd(this,this.pa);this.A-=this.B.pl;this.Q|=2;return a},function(a){var b=a;this.Q&512&&(a=a-2&65535,80286>this.ma&&(b=a));u(this,b);this.A-=this.V===h?this.B.mc:this.B.Il;this.Q|=2;return a},ig],wd=Array(256);wd[0]=function(){var a=this.S();16>(a&56)&&(this.Q|=1);this.Fc[a].call(this,this.rm,ng)};wd[1]=function(){var a=this.S();a&16||(this.Q|=1);this.Fc[a].call(this,Vg,ng)};wd[2]=function(){this.Ha[this.S()].call(this,hf)};
            wd[3]=function(){this.Ha[this.S()].call(this,of)};
            wd[5]=function(){this.oa.Ja?Pc.call(this,13,0,!0):(ve(this,this.na(2054)),this.J=this.na(2086),this.K=this.na(2088),this.L=this.na(2090),this.D=this.na(2094),this.H=this.na(2096),this.G=this.na(2098),this.F=this.na(2100),Qc(this.Qa,2102,this.na(2084)),Qc(this.oa,2108,this.na(2082)),Qc(this.ra,2114,this.na(2080)),Qc(this.kb,2120,this.na(2078)),Uc(this,this.na(2072)),C(this,this.na(2074)),t(this,this.na(2092)),this.pd=this.na(2126)|this.wc(2128)<<16,this.If=this.pd+this.na(2130),Qc(this.Ne,2132,this.na(2076)),
            this.qd=this.na(2138)|this.wc(2140)<<16,this.Ve=this.qd+this.na(2142),Qc(this.hb,2144,this.na(2070)),this.A-=195)};wd[6]=function(){this.oa.Ja?Pc.call(this,13,0):(this.zb&=-9,this.A-=2)};wd[11]=dd;var x=[];x[32]=function(){var a=this.S()|192;if(this.oa.Ja)Pc.call(this,13,0);else{switch((a&56)>>3){case 0:this.ld=this.zb;break;case 1:this.ld=this.yj;break;case 2:this.ld=this.nh;break;case 3:this.ld=this.gg;break;default:xd.call(this);return}Td(this,4);this.Ha[a].call(this,sf)}};
            x[34]=function(){var a,b=this.S()|192;if(this.oa.Ja)Pc.call(this,13,0);else{var c=(b&56)>>3;switch(c){case 0:a=this.F;break;case 1:a=this.G;break;case 2:a=this.H;break;case 3:a=this.D;break;default:dd.call(this);return}Td(this,4);this.Ha[b].call(this,qf);switch(c){case 0:c=this.F;this.F=a;this.zb=c;Jd(this);this.zb&-2147483648?Fd(this):this.ka!=this.Te&&(this.ka=this.Te,this.Ah=this.dk=null);break;case 1:this.yj=this.G;this.G=a;break;case 2:this.nh=this.H;this.H=a;break;case 3:c=this.D,this.D=a,this.gg=
            c,this.zb&-2147483648&&Fd(this)}}};x[128]=function(){var a=this.ia();ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[129]=function(){var a=this.ia();ke(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};x[130]=function(){var a=this.ia();fe(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[131]=function(){var a=this.ia();fe(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};
            x[132]=function(){var a=this.ia();ie(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[133]=function(){var a=this.ia();ie(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};x[134]=function(){var a=this.ia();fe(this)||ie(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[135]=function(){var a=this.ia();fe(this)||ie(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};
            x[136]=function(){var a=this.ia();je(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[137]=function(){var a=this.ia();je(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};x[138]=function(){var a=this.ia();ge(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[139]=function(){var a=this.ia();ge(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};
            x[140]=function(){var a=this.ia();!je(this)!=!ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[141]=function(){var a=this.ia();!je(this)==!ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[142]=function(){var a=this.ia();ie(this)||!je(this)!=!ke(this)?(C(this,l(this)+a),this.A-=this.B.Ba):this.A-=this.B.Ca};x[143]=function(){var a=this.ia();ie(this)||!je(this)!=!ke(this)?this.A-=this.B.Ca:(C(this,l(this)+a),this.A-=this.B.Ba)};x[144]=function(){zf.call(this,Af)};
            x[145]=function(){zf.call(this,Af)};x[146]=function(){zf.call(this,Bf)};x[147]=function(){zf.call(this,Cf)};x[148]=function(){zf.call(this,Df)};x[149]=function(){zf.call(this,Ef)};x[150]=function(){zf.call(this,Ff)};x[151]=function(){zf.call(this,Gf)};x[152]=function(){zf.call(this,Hf)};x[153]=function(){zf.call(this,If)};x[154]=function(){zf.call(this,Jf)};x[155]=function(){zf.call(this,Kf)};x[156]=function(){zf.call(this,Lf)};x[157]=function(){zf.call(this,Mf)};x[158]=function(){zf.call(this,Nf)};
            x[159]=function(){zf.call(this,Of)};x[160]=function(){u(this,this.Hd.sa);this.A-=this.B.Fe};x[161]=function(){var a=this.Fa();this.Hd.load(a);this.A-=this.B.Tb};x[163]=function(){this.vb[this.S()].call(this,Qe);this.V!==h&&(this.A-=this.B.Xp)};x[164]=function(){this.vb[this.S()].call(this,2==this.ja?Rf:Sf);this.A-=this.V===h?this.B.fj:this.B.ej};x[165]=function(){this.vb[this.S()].call(this,2==this.ja?Tf:Uf);this.A-=this.V===h?this.B.fj:this.B.ej};x[168]=function(){u(this,this.Id.sa);this.A-=this.B.Fe};
            x[169]=function(){var a=this.Fa();this.Id.load(a);this.A-=this.B.Tb};x[171]=function(){this.vb[this.S()].call(this,Ve);this.V!==h&&(this.A-=this.B.Pk)};x[172]=function(){this.vb[this.S()].call(this,2==this.ja?Xf:Yf);this.A-=this.V===h?this.B.fj:this.B.ej};x[173]=function(){this.vb[this.S()].call(this,2==this.ja?Zf:$f);this.A-=this.V===h?this.B.fj:this.B.ej};x[175]=function(){this.Ha[this.S()].call(this,2==this.ja?ef:ff)};x[178]=function(){this.Ha[this.S()].call(this,pf)};
            x[179]=function(){this.vb[this.S()].call(this,Ue);this.V!==h&&(this.A-=this.B.Pk)};x[180]=function(){this.Ha[this.S()].call(this,mf)};x[181]=function(){this.Ha[this.S()].call(this,nf)};
            x[182]=function(){var a,b=this.S(),c=(b&56)>>3;switch(c){case 4:a=this.F;break;case 5:a=this.G;break;case 6:a=this.H;break;case 7:a=this.D}this.Gc[b].call(this,rf);switch(c){case 0:this.F=this.F&~this.C|this.F&255;break;case 1:this.G=this.G&~this.C|this.G&255;break;case 2:this.H=this.H&~this.C|this.H&255;break;case 3:this.D=this.D&~this.C|this.D&255;break;case 4:this.Fd=this.Fd&~this.C|this.F>>8&255;this.F=a;break;case 5:this.L=this.L&~this.C|this.G>>8&255;this.G=a;break;case 6:this.K=this.K&~this.C|
            this.H>>8&255;this.H=a;break;case 7:this.J=this.J&~this.C|this.D>>8&255,this.D=a}this.A-=this.V===h?this.B.Wi:this.B.Vi};x[183]=function(){var a=this.S();Td(this,2);this.Ha[a].call(this,rf);switch((a&56)>>3){case 0:this.F&=65535;break;case 1:this.G&=65535;break;case 2:this.H&=65535;break;case 3:this.D&=65535;break;case 4:this.Fd&=65535;break;case 5:this.L&=65535;break;case 6:this.K&=65535;break;case 7:this.J&=65535}this.A-=this.V===h?this.B.Wi:this.B.Vi};
            x[186]=function(){this.Fc[this.S()].call(this,Wg,this.S)};x[187]=function(){this.vb[this.S()].call(this,Re);this.V!==h&&(this.A-=this.B.Pk)};x[188]=function(){this.Ha[this.S()].call(this,Oe)};x[189]=function(){this.Ha[this.S()].call(this,Pe)};
            x[190]=function(){var a,b=this.S(),c=(b&56)>>3;switch(c){case 4:a=this.F;break;case 5:a=this.G;break;case 6:a=this.H;break;case 7:a=this.D}this.Gc[b].call(this,rf);switch(c){case 0:this.F=this.F&~this.C|(this.F&255)<<24>>24&this.C;break;case 1:this.G=this.G&~this.C|(this.G&255)<<24>>24&this.C;break;case 2:this.H=this.H&~this.C|(this.H&255)<<24>>24&this.C;break;case 3:this.D=this.D&~this.C|(this.D&255)<<24>>24&this.C;break;case 4:this.Fd=this.Fd&~this.C|this.F<<16>>24&this.C;this.F=a;break;case 5:this.L=
            this.L&~this.C|this.G<<16>>24&this.C;this.G=a;break;case 6:this.K=this.K&~this.C|this.H<<16>>24&this.C;this.H=a;break;case 7:this.J=this.J&~this.C|this.D<<16>>24&this.C,this.D=a}this.A-=this.V===h?this.B.Wi:this.B.Vi};
            x[191]=function(){var a=this.S();Td(this,2);this.Ha[a].call(this,rf);switch((a&56)>>3){case 0:this.F=this.F<<16>>16;break;case 1:this.G=this.G<<16>>16;break;case 2:this.H=this.H<<16>>16;break;case 3:this.D=this.D<<16>>16;break;case 4:this.Fd=this.Fd<<16>>16;break;case 5:this.L=this.L<<16>>16;break;case 6:this.K=this.K<<16>>16;break;case 7:this.J=this.J<<16>>16}this.A-=this.V===h?this.B.Wi:this.B.Vi};
            var Yd=[function(){this.A-=2+(this.V===h?0:1);return this.Ne.sa},function(){this.A-=2+(this.V===h?0:1);return this.hb.sa},function(a){this.Q|=2;this.Ne.load(a);this.A-=17+(this.V===h?0:2);return a},function(a){this.Q|=2;this.hb.load(a)!==h&&(this.Eb(this.hb.od+4,this.hb.Ob|=512),this.hb.type=768);this.A-=17+(this.V===h?0:2);return a},function(a){this.Q|=2;this.A-=14+(this.V===h?0:2);if(this.Kb.load(a,!0)!==h&&2048!=(this.Kb.Ob&2560)&&(this.Kb.uc>=this.oa.Ja&&this.Kb.uc>=(a&3)||7168==(this.Kb.Ob&7168)))return ue(this),
            a;se(this);return a},function(a){this.Q|=2;this.A-=14+(this.V===h?0:2);if(this.Kb.load(a,!0)!==h&&512==(this.Kb.Ob&2560)&&this.Kb.uc>=this.oa.Ja&&this.Kb.uc>=(a&3))return ue(this),a;se(this);return a},T,T],cd=[ud,ud,ud,ud,ud,ud,T,T],Vg=[function(a){if(this.V===h)dd.call(this);else{a=this.If-this.pd;var b=this.pd;80286==this.ma?b|=-16777216:this.ma>=qb&&(2==this.ja?b&=16777215:a|=b<<16);this.Kj(this.V+2,b);this.A-=11}return a},function(a){if(this.V===h)dd.call(this);else{a=this.Ve-this.qd;var b=this.qd;
            80286==this.ma?b|=-16777216:this.ma>=qb&&(2==this.ja?b&=16777215:a|=b<<16);this.Kj(this.V+2,b);this.A-=12}return a},function(a){this.V===h?dd.call(this):(this.pd=this.Tg(this.V+2)&(this.C|this.C<<8),a&=65535,this.If=this.pd+a,this.Q|=2,this.A-=11);return a},function(a){this.V===h?dd.call(this):(this.qd=this.Tg(this.V+2)&(this.C|this.C<<8),a&=65535,this.Ve=this.qd+a,this.Q|=2,this.A-=12);return a},function(){this.A-=2+(this.V===h?0:1);return this.zb},T,function(a){ve(this,a);this.A-=this.V===h?3:6;
            this.Q|=2;return a},T],Wg=[T,T,T,T,Qe,Ve,Ue,Re],y=[function(a){a=a.call(this,this.F&255,E(this,this.D+this.K));this.F=this.F&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.F&255,E(this,this.D+this.J));this.F=this.F&-256|a;this.A-=this.B.Z},function(a){a=a.call(this,this.F&255,F(this,this.L+this.K));this.F=this.F&-256|a;this.A-=this.B.Z},function(a){a=a.call(this,this.F&255,F(this,this.L+this.J));this.F=this.F&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.F&255,E(this,this.K));this.F=
            this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.J));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,R(this)));this.F=this.F&-256|a;this.A-=this.B.aa},function(a){a=a.call(this,this.F&255,E(this,this.D));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,this.D+this.K));this.G=this.G&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.G&255,E(this,this.D+this.J));this.G=this.G&-256|a;this.A-=this.B.Z},
            function(a){a=a.call(this,this.G&255,F(this,this.L+this.K));this.G=this.G&-256|a;this.A-=this.B.Z},function(a){a=a.call(this,this.G&255,F(this,this.L+this.J));this.G=this.G&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.G&255,E(this,this.K));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,this.J));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,R(this)));this.G=this.G&-256|a;this.A-=this.B.aa},function(a){a=a.call(this,
            this.G&255,E(this,this.D));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.D+this.K));this.H=this.H&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.H&255,E(this,this.D+this.J));this.H=this.H&-256|a;this.A-=this.B.Z},function(a){a=a.call(this,this.H&255,F(this,this.L+this.K));this.H=this.H&-256|a;this.A-=this.B.Z},function(a){a=a.call(this,this.H&255,F(this,this.L+this.J));this.H=this.H&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.H&255,E(this,
            this.K));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.J));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,R(this)));this.H=this.H&-256|a;this.A-=this.B.aa},function(a){a=a.call(this,this.H&255,E(this,this.D));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.D+this.K));this.D=this.D&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.D&255,E(this,this.D+this.J));this.D=this.D&-256|
            a;this.A-=this.B.Z},function(a){a=a.call(this,this.D&255,F(this,this.L+this.K));this.D=this.D&-256|a;this.A-=this.B.Z},function(a){a=a.call(this,this.D&255,F(this,this.L+this.J));this.D=this.D&-256|a;this.A-=this.B.Y},function(a){a=a.call(this,this.D&255,E(this,this.K));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.J));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,R(this)));this.D=this.D&-256|a;this.A-=this.B.aa},function(a){a=
            a.call(this,this.D&255,E(this,this.D));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.Y},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.Y},
            function(a){a=a.call(this,this.F>>8&255,E(this,this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.F>>8&255,E(this,this.D));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.Y},
            function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.Y},function(a){a=a.call(this,this.G>>8&255,E(this,this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,this.J));this.G=this.G&-65281|a<<
            8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.G>>8&255,E(this,this.D));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.Y},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.K));this.H=
            this.H&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.Y},function(a){a=a.call(this,this.H>>8&255,E(this,this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.H>>8&255,E(this,this.D));
            this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.Y},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.Z},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.Y},function(a){a=a.call(this,this.D>>
            8&255,E(this,this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.D>>8&255,E(this,this.D));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.D+this.K+this.M()));this.F=this.F&-256|a;this.A-=this.B.O},function(a){a=a.call(this,
            this.F&255,E(this,this.D+this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,F(this,this.L+this.K+this.M()));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,F(this,this.L+this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.F&255,E(this,this.K+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.F&255,F(this,this.L+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.D+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.D+this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&255,E(this,this.D+this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,F(this,this.L+this.K+this.M()));this.G=this.G&-256|a;this.A-=
            this.B.P},function(a){a=a.call(this,this.G&255,F(this,this.L+this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&255,E(this,this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,F(this,this.L+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.D+this.M()));this.G=this.G&-256|
            a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.D+this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&255,E(this,this.D+this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,F(this,this.L+this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,F(this,this.L+this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&255,E(this,this.K+
            this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,F(this,this.L+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.D+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.D+this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&255,E(this,
            this.D+this.J+this.M()));this.D=this.D&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,F(this,this.L+this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,F(this,this.L+this.J+this.M()));this.D=this.D&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&255,E(this,this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.J+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.D&255,F(this,this.L+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.D+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.K+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.K+this.M()));this.F=this.F&-65281|
            a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.F>>8&255,E(this,this.K+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&
            255,E(this,this.D+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.J+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.J+this.M()));this.G=this.G&
            -65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.G>>8&255,E(this,this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.J+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&
            255,E(this,this.D+this.K+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.K+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.H>>8&255,E(this,this.K+this.M()));this.H=this.H&
            -65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.D>>
            8&255,E(this,this.D+this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.D>>8&255,E(this,this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.J+this.M()));this.D=this.D&
            -65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.D+this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.F&255,E(this,this.D+this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,F(this,
            this.L+this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&255,F(this,this.L+this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.F&255,E(this,this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,F(this,this.L+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&
            255,E(this,this.D+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.D+this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&255,E(this,this.D+this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,F(this,this.L+this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&255,F(this,this.L+this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.O},function(a){a=
            a.call(this,this.G&255,E(this,this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,F(this,this.L+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.D+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.D+this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.O},function(a){a=
            a.call(this,this.H&255,E(this,this.D+this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,F(this,this.L+this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&255,F(this,this.L+this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&255,E(this,this.K+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.H&255,F(this,this.L+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.D+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.D+this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&255,E(this,this.D+this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,F(this,this.L+this.K+R(this)));this.D=this.D&-256|
            a;this.A-=this.B.P},function(a){a=a.call(this,this.D&255,F(this,this.L+this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&255,E(this,this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,F(this,this.L+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.D+R(this)));this.D=this.D&
            -256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.J+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.J+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,
            this.F>>8&255,E(this,this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.J+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.K+R(this)));this.G=this.G&-65281|a<<
            8;this.A-=this.B.O},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.K+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.G>>8&255,E(this,this.K+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>
            8&255,E(this,this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.J+R(this)));this.H=this.H&-65281|a<<8;
            this.A-=this.B.P},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.J+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.H>>8&255,E(this,this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.J+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,
            F(this,this.L+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.K+R(this)));this.D=this.D&-65281|a<<
            8;this.A-=this.B.P},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.O},function(a){a=a.call(this,this.D>>8&255,E(this,this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,
            this.D+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,this.F&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.G&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.H&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.F>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.G>>8&255);this.F=this.F&-256|a},function(a){a=
            a.call(this,this.F&255,this.H>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.G&255,this.F&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.F>>8&255);this.G=this.G&-256|a},function(a){a=
            a.call(this,this.G&255,this.G>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.H&255,this.F&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.D&255);this.H=this.H&-256|a},function(a){a=
            a.call(this,this.H&255,this.F>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.D>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.D&255,this.F&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.H&255);this.D=this.D&-256|a},function(a){a=
            a.call(this,this.D&255,this.D&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.F>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.H>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.F>>8&255,this.F&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.G&255);this.F=this.F&-65281|
            a<<8},function(a){a=a.call(this,this.F>>8&255,this.H&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.D&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.F>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.G>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.D>>8&255);this.F=this.F&-65281|a<<8},function(a){a=
            a.call(this,this.G>>8&255,this.F&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.H&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&
            255,this.H>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F>>8&255);this.H=
            this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.H&255);this.D=this.D&-65281|a<<8},
            function(a){a=a.call(this,this.D>>8&255,this.D&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.H>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D>>8&255);this.D=this.D&-65281|a<<8}],Ld=[function(a){a=a.call(this,J(this,this.D+this.K),this.F&255);P(this,a);this.A-=this.B.Y},function(a){a=
            a.call(this,J(this,this.D+this.J),this.F&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.F&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.F&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.F&255);P(this,a);this.A-=this.B.aa},function(a){a=
            a.call(this,J(this,this.D),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K),this.G&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.D+this.J),this.G&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.G&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.G&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,J(this,this.J),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.G&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.D),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K),this.H&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.D+this.J),this.H&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.H&255);P(this,a);this.A-=this.B.Z},function(a){a=
            a.call(this,K(this,this.L+this.J),this.H&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.H&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.D),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K),this.D&255);P(this,a);this.A-=this.B.Y},function(a){a=
            a.call(this,J(this,this.D+this.J),this.D&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.D&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.D&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.D&255);P(this,a);this.A-=this.B.aa},function(a){a=
            a.call(this,J(this,this.D),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K),this.F>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.D+this.J),this.F>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.F>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.F>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.F>>8&255);P(this,a);this.A-=
            this.B.N},function(a){a=a.call(this,J(this,this.J),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.F>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.D),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K),this.G>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.D+this.J),this.G>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.G>>
            8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.G>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.G>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.D),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+
            this.K),this.H>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.D+this.J),this.H>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.H>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.H>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,J(this,R(this)),this.H>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.D),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K),this.D>>8&255);P(this,a);this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.D+this.J),this.D>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.K),this.D>>8&255);P(this,a);this.A-=this.B.Z},function(a){a=a.call(this,K(this,this.L+this.J),this.D>>8&255);P(this,a);
            this.A-=this.B.Y},function(a){a=a.call(this,J(this,this.K),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.D>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.D),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),
            this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.F&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.F&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,J(this,this.D+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,
            J(this,this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.H&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.H&255);P(this,
            a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.H&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.H&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            J(this,this.D+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+this.M()),
            this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.P},
            function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            J(this,this.D+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+
            this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.H>>8&255);
            P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,J(this,this.D+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.O},function(a){a=
            a.call(this,J(this,this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+
            R(this)),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.F&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.F&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,J(this,this.D+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,
            this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.H&255);P(this,a);this.A-=
            this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,
            this.D+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.D&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.D&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),this.D&255);
            P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.P},function(a){a=
            a.call(this,K(this,this.L+this.K+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),
            this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),this.G>>8&255);
            P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.P},
            function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,
            this.D+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.D+this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.P},function(a){a=a.call(this,K(this,this.L+this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.O},function(a){a=a.call(this,J(this,this.K+R(this)),
            this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},y[192],y[200],y[208],y[216],y[224],y[232],y[240],y[248],y[193],y[201],y[209],y[217],y[225],y[233],y[241],y[249],y[194],y[202],y[210],y[218],y[226],y[234],y[242],y[250],y[195],y[203],
            y[211],y[219],y[227],y[235],y[243],y[251],y[196],y[204],y[212],y[220],y[228],y[236],y[244],y[252],y[197],y[205],y[213],y[221],y[229],y[237],y[245],y[253],y[198],y[206],y[214],y[222],y[230],y[238],y[246],y[254],y[199],y[207],y[215],y[223],y[231],y[239],y[247],y[255]],Md=[function(a,b){var c=a[0].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[0].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[0].call(this,
            K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[0].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[0].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[0].call(this,J(this,this.D),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[1].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[1].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[1].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[1].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=
            this.B.N},function(a,b){var c=a[1].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[1].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[2].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=
            a[2].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[2].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[2].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[2].call(this,J(this,this.D),
            b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[3].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[3].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[3].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[3].call(this,J(this,this.K),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[3].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[4].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},
            function(a,b){var c=a[4].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[4].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[4].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[4].call(this,
            J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[5].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[5].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[5].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[5].call(this,J(this,this.K),
            b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[5].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[6].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=
            this.B.Z},function(a,b){var c=a[6].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[6].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[6].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=
            a[6].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.D+this.K),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[7].call(this,J(this,this.D+this.J),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[7].call(this,K(this,this.L+this.K),b.call(this));P(this,c);this.A-=this.B.Z},function(a,b){var c=a[7].call(this,K(this,this.L+this.J),b.call(this));P(this,c);this.A-=this.B.Y},function(a,b){var c=a[7].call(this,
            J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[7].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,J(this,this.D+this.J+this.M()),
            b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,K(this,
            this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,J(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=
            a[1].call(this,K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,
            b){var c=a[2].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,J(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,J(this,this.K+this.M()),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,J(this,this.D+this.J+this.M()),b.call(this));
            P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,K(this,this.L+this.M()),
            b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,J(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,
            K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,
            J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,J(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,
            b){var c=a[5].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,J(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},
            function(a,b){var c=a[6].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,K(this,this.L+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.D+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,J(this,this.D+this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,K(this,this.L+this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,K(this,this.L+this.J+this.M()),
            b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.D+this.K+
            R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,
            K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,
            J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,
            b){var c=a[2].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,
            b){var c=a[3].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},
            function(a,b){var c=a[3].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);
            this.A-=this.B.P},function(a,b){var c=a[4].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.D+R(this)),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,J(this,this.K+R(this)),
            b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,J(this,this.D+this.J+
            R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,K(this,
            this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.D+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,J(this,this.D+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,K(this,this.L+this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,
            K(this,this.L+this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[0].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[0].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[0].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[0].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[0].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[0].call(this,
            this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[0].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[1].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[1].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[1].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[1].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[1].call(this,
            this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[1].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[1].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[1].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[2].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[2].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=
            a[2].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[2].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[2].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[2].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[2].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[2].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<
            8},function(a,b){var c=a[3].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[3].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[3].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[3].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[3].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[3].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|
            c<<8},function(a,b){var c=a[3].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[3].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[4].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[4].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[4].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[4].call(this,this.D&255,b.call(this));this.D=this.D&
            -256|c},function(a,b){var c=a[4].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[4].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[4].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[4].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[5].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[5].call(this,this.G&255,b.call(this));
            this.G=this.G&-256|c},function(a,b){var c=a[5].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[5].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[5].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[5].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[5].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[5].call(this,this.D>>8&
            255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[6].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[6].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[6].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[6].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[6].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[6].call(this,this.G>>
            8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[6].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[6].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[7].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[7].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[7].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[7].call(this,
            this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[7].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[7].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[7].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[7].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8}],z=[function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.K));this.F=this.F&~this.C|a;this.A-=
            this.B.Y},function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.J));this.F=this.F&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.K));this.F=this.F&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.J));this.F=this.F&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.F&this.C,H(this,this.K));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.J));this.F=this.F&~this.C|
            a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,R(this)));this.F=this.F&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.F&this.C,H(this,this.D));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.K));this.G=this.G&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.J));this.G=this.G&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.G&this.C,I(this,this.L+this.K));this.G=this.G&
            ~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.G&this.C,I(this,this.L+this.J));this.G=this.G&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.G&this.C,H(this,this.K));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.J));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,R(this)));this.G=this.G&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.G&this.C,H(this,this.D));this.G=this.G&~this.C|
            a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.K));this.H=this.H&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.J));this.H=this.H&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.H&this.C,I(this,this.L+this.K));this.H=this.H&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.H&this.C,I(this,this.L+this.J));this.H=this.H&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.H&this.C,H(this,this.K));this.H=
            this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.J));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,R(this)));this.H=this.H&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.H&this.C,H(this,this.D));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.K));this.D=this.D&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.J));this.D=
            this.D&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.K));this.D=this.D&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.J));this.D=this.D&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.D&this.C,H(this,this.K));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,this.J));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,R(this)));this.D=
            this.D&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.D&this.C,H(this,this.D));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+this.K));t(this,q(this)&~this.C|a);this.A-=this.B.Y},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+this.J));t(this,q(this)&~this.C|a);this.A-=this.B.Z},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.K));t(this,q(this)&~this.C|a);this.A-=this.B.Z},function(a){a=a.call(this,q(this)&this.C,I(this,
            this.L+this.J));t(this,q(this)&~this.C|a);this.A-=this.B.Y},function(a){a=a.call(this,q(this)&this.C,H(this,this.K));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,this.J));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.aa},function(a){a=a.call(this,q(this)&this.C,H(this,this.D));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,
            H(this,this.D+this.K));this.L=this.L&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.J));this.L=this.L&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.K));this.L=this.L&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.J));this.L=this.L&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.L&this.C,H(this,this.K));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,
            this.L&this.C,H(this,this.J));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,R(this)));this.L=this.L&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.L&this.C,H(this,this.D));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.K));this.K=this.K&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.J));this.K=this.K&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,
            this.K&this.C,I(this,this.L+this.K));this.K=this.K&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.K&this.C,I(this,this.L+this.J));this.K=this.K&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.K&this.C,H(this,this.K));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.J));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,R(this)));this.K=this.K&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,
            this.K&this.C,H(this,this.D));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.K));this.J=this.J&~this.C|a;this.A-=this.B.Y},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.J));this.J=this.J&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.K));this.J=this.J&~this.C|a;this.A-=this.B.Z},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.J));this.J=this.J&~this.C|a;this.A-=this.B.Y},function(a){a=
            a.call(this,this.J&this.C,H(this,this.K));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.J));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,R(this)));this.J=this.J&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.J&this.C,H(this,this.D));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.O},function(a){a=
            a.call(this,this.F&this.C,H(this,this.D+this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.F&this.C,H(this,this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.J+this.M()));this.F=
            this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,
            this.G&this.C,I(this,this.L+this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&this.C,I(this,this.L+this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&this.C,H(this,this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.J+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,I(this,this.L+this.M()));this.G=this.G&~this.C|
            a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&this.C,I(this,this.L+this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&
            this.C,I(this,this.L+this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&this.C,H(this,this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,I(this,this.L+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&this.C,H(this,
            this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+this.K+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.O},function(a){a=
            a.call(this,q(this)&this.C,H(this,this.D+this.J+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.P},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.K+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.P},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.J+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.O},function(a){a=a.call(this,q(this)&this.C,H(this,this.K+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.J+
            this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.P},
            function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.L&this.C,H(this,this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.M()));
            this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,I(this,this.L+this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=
            a.call(this,this.K&this.C,I(this,this.L+this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.K&this.C,H(this,this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,I(this,this.L+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.M()));this.K=this.K&~this.C|
            a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.K+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.K+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,
            this.J&this.C,H(this,this.K+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.K+R(this)));this.F=this.F&~this.C|a;this.A-=
            this.B.O},function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.F&this.C,H(this,this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,
            this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,I(this,this.L+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.D+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.K+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&this.C,H(this,this.D+this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=
            a.call(this,this.G&this.C,I(this,this.L+this.K+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.G&this.C,I(this,this.L+this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.G&this.C,H(this,this.K+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,I(this,this.L+R(this)));this.G=this.G&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.D+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&this.C,I(this,this.L+this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.H&
            this.C,I(this,this.L+this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.H&this.C,H(this,this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,I(this,this.L+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.D+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.K+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.K+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.D&this.C,H(this,this.K+
            R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,I(this,this.L+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.D+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+this.K+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.O},function(a){a=a.call(this,
            q(this)&this.C,H(this,this.D+this.J+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.P},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.K+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.P},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.J+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.O},function(a){a=a.call(this,q(this)&this.C,H(this,this.K+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.J+R(this)));t(this,
            q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,
            this.L&this.C,I(this,this.L+this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.L&this.C,H(this,this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,I(this,this.L+R(this)));this.L=this.L&~this.C|a;this.A-=
            this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.D+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,I(this,this.L+this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.K&this.C,I(this,
            this.L+this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.K&this.C,H(this,this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,I(this,this.L+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.D+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.J&this.C,H(this,this.D+this.K+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.K+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.P},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.O},function(a){a=a.call(this,this.J&this.C,H(this,this.K+R(this)));
            this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,I(this,this.L+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.D+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,this.F&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.G&this.C);this.F=
            this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.H&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.D&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,q(this)&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.L&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.K&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.J&this.C);this.F=this.F&~this.C|a},function(a){a=
            a.call(this,this.G&this.C,this.F&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.G&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.H&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.D&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,q(this)&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.L&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,
            this.K&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.J&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.F&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.G&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.H&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.D&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,q(this)&this.C);this.H=
            this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.L&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.K&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.J&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.F&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.G&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.H&this.C);this.D=this.D&~this.C|a},function(a){a=
            a.call(this,this.D&this.C,this.D&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,q(this)&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.L&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.K&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.J&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,q(this)&this.C,this.F&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&
            this.C,this.G&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.H&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.D&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,q(this)&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.L&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.K&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,
            this.J&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,this.L&this.C,this.F&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.G&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.H&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.D&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,q(this)&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.L&this.C);this.L=
            this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.K&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.J&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.F&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.G&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.H&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.D&this.C);this.K=this.K&~this.C|a},function(a){a=
            a.call(this,this.K&this.C,q(this)&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.L&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.K&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.J&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.F&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.G&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,
            this.H&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.D&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,q(this)&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.L&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.K&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.J&this.C);this.J=this.J&~this.C|a}],Nd=[function(a){a=a.call(this,M(this,this.D+this.K),this.F&
            this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.F&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),this.F&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.F&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.K),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            M(this,R(this)),this.F&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),this.G&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.G&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),this.G&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.G&this.C);Q(this,a);this.A-=this.B.Y},
            function(a){a=a.call(this,M(this,this.K),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.G&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),this.H&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.H&this.C);Q(this,a);
            this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),this.H&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.H&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.K),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.H&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.H&
            this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),this.D&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.D&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),this.D&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.D&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.K),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            M(this,this.J),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.D&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),q(this)&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),q(this)&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),q(this)&this.C);Q(this,a);this.A-=this.B.Z},
            function(a){a=a.call(this,O(this,this.L+this.J),q(this)&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.K),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),this.L&this.C);Q(this,
            a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.L&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),this.L&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.L&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.K),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),
            this.L&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),this.K&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.K&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.K),this.K&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.K&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=
            a.call(this,M(this,this.K),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.K&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K),this.J&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.D+this.J),this.J&this.C);Q(this,a);this.A-=this.B.Z},
            function(a){a=a.call(this,O(this,this.L+this.K),this.J&this.C);Q(this,a);this.A-=this.B.Z},function(a){a=a.call(this,O(this,this.L+this.J),this.J&this.C);Q(this,a);this.A-=this.B.Y},function(a){a=a.call(this,M(this,this.K),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.J&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.D),this.J&this.C);Q(this,a);
            this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),this.F&this.C);Q(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=
            a.call(this,O(this,this.L+this.K+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+
            this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),
            this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),this.D&this.C);Q(this,
            a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,M(this,this.D+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,
            M(this,this.K+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),
            this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.L&this.C);Q(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.K&this.C);Q(this,a);this.A-=
            this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,
            M(this,this.D+this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),
            this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.F&this.C);
            Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.O},function(a){a=
            a.call(this,M(this,this.D+this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+
            R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.H&
            this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.O},
            function(a){a=a.call(this,M(this,this.D+this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            O(this,this.L+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+
            R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.L&this.C);Q(this,
            a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,O(this,this.L+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,
            O(this,this.L+this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.K+R(this)),this.J&
            this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.D+this.J+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.K+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.P},function(a){a=a.call(this,O(this,this.L+this.J+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.O},function(a){a=a.call(this,M(this,this.K+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.J&this.C);Q(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},z[192],z[200],z[208],z[216],z[224],z[232],z[240],z[248],z[193],z[201],z[209],z[217],z[225],z[233],z[241],z[249],z[194],z[202],z[210],z[218],z[226],z[234],z[242],z[250],z[195],z[203],z[211],z[219],z[227],z[235],z[243],z[251],z[196],z[204],z[212],z[220],z[228],z[236],z[244],z[252],z[197],z[205],z[213],z[221],
            z[229],z[237],z[245],z[253],z[198],z[206],z[214],z[222],z[230],z[238],z[246],z[254],z[199],z[207],z[215],z[223],z[231],z[239],z[247],z[255]],Od=[function(a,b){var c=a[0].call(this,M(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[0].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[0].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[0].call(this,O(this,this.L+this.J),b.call(this));
            Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[0].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[0].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,
            b){var c=a[1].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[1].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[1].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[1].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,
            M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[1].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[2].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[2].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[2].call(this,O(this,this.L+this.J),
            b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[2].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[2].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,this.D+this.K),b.call(this));Q(this,c);this.A-=
            this.B.Y},function(a,b){var c=a[3].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[3].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[3].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[3].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,
            b){var c=a[3].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[3].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[4].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[4].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[4].call(this,
            O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[4].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[4].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.D+this.K),b.call(this));
            Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[5].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[5].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[5].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[5].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},
            function(a,b){var c=a[5].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[5].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,this.D+this.K),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[6].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[6].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=
            a[6].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[6].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[6].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,this.D+this.K),
            b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[7].call(this,M(this,this.D+this.J),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[7].call(this,O(this,this.L+this.K),b.call(this));Q(this,c);this.A-=this.B.Z},function(a,b){var c=a[7].call(this,O(this,this.L+this.J),b.call(this));Q(this,c);this.A-=this.B.Y},function(a,b){var c=a[7].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,this.J),b.call(this));Q(this,
            c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[7].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,O(this,this.L+this.K+this.M()),b.call(this));
            Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.D+this.M()),b.call(this));
            Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,M(this,
            this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,
            M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,
            b){var c=a[2].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=
            this.B.P},function(a,b){var c=a[3].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.D+this.M()),b.call(this));Q(this,
            c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,M(this,this.K+
            this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,M(this,
            this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=
            a[5].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},
            function(a,b){var c=a[6].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=
            this.B.I},function(a,b){var c=a[7].call(this,M(this,this.D+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,M(this,this.D+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,O(this,this.L+this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,O(this,this.L+this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,M(this,this.K+this.M()),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,M(this,this.D+
            this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[0].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[0].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[1].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=
            a[1].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[1].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=
            a[2].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[2].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[2].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},
            function(a,b){var c=a[2].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=
            this.B.P},function(a,b){var c=a[3].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[3].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[3].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+R(this)),b.call(this));Q(this,
            c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[4].call(this,O(this,this.L+this.J+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[4].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.D+this.K+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[5].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[5].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,
            this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,
            O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[6].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[6].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,
            M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.D+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,b){var c=a[7].call(this,M(this,this.D+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,O(this,this.L+this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.P},function(a,b){var c=a[7].call(this,O(this,this.L+this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.O},function(a,
            b){var c=a[7].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[0].call(this,
            this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[0].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[0].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[0].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[0].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[0].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,
            b){var c=a[0].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[1].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[1].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[1].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[1].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[1].call(this,q(this)&this.C,b.call(this));t(this,q(this)&
            ~this.C|c)},function(a,b){var c=a[1].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[1].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[1].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[2].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[2].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[2].call(this,this.H&this.C,
            b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[2].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[2].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[2].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[2].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[2].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=
            a[3].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[3].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[3].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[3].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[3].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[3].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|
            c},function(a,b){var c=a[3].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[3].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[4].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[4].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[4].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[4].call(this,this.D&this.C,b.call(this));
            this.D=this.D&~this.C|c},function(a,b){var c=a[4].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[4].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[4].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[4].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[5].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[5].call(this,
            this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[5].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[5].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[5].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[5].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[5].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,
            b){var c=a[5].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[6].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[6].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[6].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[6].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[6].call(this,q(this)&this.C,b.call(this));t(this,q(this)&
            ~this.C|c)},function(a,b){var c=a[6].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[6].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[6].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[7].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[7].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[7].call(this,this.H&this.C,
            b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[7].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[7].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[7].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[7].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[7].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c}],A=[function(a){a=a.call(this,
            this.F&255,E(this,this.F));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.G));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.H));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.D));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,S(this,0)));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,R(this)));this.F=this.F&
            -256|a;this.A-=this.B.aa},function(a){a=a.call(this,this.F&255,E(this,this.K));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.J));this.F=this.F&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,this.F));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,this.G));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,this.H));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,
            this.G&255,E(this,this.D));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,S(this,0)));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,R(this)));this.G=this.G&-256|a;this.A-=this.B.aa},function(a){a=a.call(this,this.G&255,E(this,this.K));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&255,E(this,this.J));this.G=this.G&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.F));this.H=this.H&
            -256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.G));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.H));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.D));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,S(this,0)));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,R(this)));this.H=this.H&-256|a;this.A-=this.B.aa},function(a){a=
            a.call(this,this.H&255,E(this,this.K));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&255,E(this,this.J));this.H=this.H&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.F));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.G));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.H));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.D));this.D=
            this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,S(this,0)));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,R(this)));this.D=this.D&-256|a;this.A-=this.B.aa},function(a){a=a.call(this,this.D&255,E(this,this.K));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&255,E(this,this.J));this.D=this.D&-256|a;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,this.F));this.F=this.F&-65281|a<<8;this.A-=this.B.N},
            function(a){a=a.call(this,this.F>>8&255,E(this,this.G));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,this.H));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,this.D));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,S(this,0)));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.aa},
            function(a){a=a.call(this,this.F>>8&255,E(this,this.K));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F>>8&255,E(this,this.J));this.F=this.F&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,this.F));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,this.G));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,this.H));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=
            a.call(this,this.G>>8&255,E(this,this.D));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,S(this,0)));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.G>>8&255,E(this,this.K));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.G>>8&255,E(this,this.J));this.G=this.G&-65281|a<<8;this.A-=this.B.N},function(a){a=
            a.call(this,this.H>>8&255,E(this,this.F));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,this.G));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,this.H));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,this.D));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,S(this,0)));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=
            a.call(this,this.H>>8&255,E(this,R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.H>>8&255,E(this,this.K));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.H>>8&255,E(this,this.J));this.H=this.H&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,this.F));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,this.G));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=
            a.call(this,this.D>>8&255,E(this,this.H));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,this.D));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,S(this,0)));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.D>>8&255,E(this,R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.aa},function(a){a=a.call(this,this.D>>8&255,E(this,this.K));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=
            a.call(this,this.D>>8&255,E(this,this.J));this.D=this.D&-65281|a<<8;this.A-=this.B.N},function(a){a=a.call(this,this.F&255,E(this,this.F+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.G+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.H+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.D+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.F&255,E(this,S(this,1)+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,F(this,this.L+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.K+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.J+this.M()));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.F+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.G&255,E(this,this.G+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.H+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.D+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,S(this,1)+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,F(this,this.L+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.G&255,E(this,this.K+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.J+this.M()));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.F+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.G+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.H+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.H&255,E(this,this.D+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,S(this,1)+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,F(this,this.L+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.K+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.J+this.M()));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.D&255,E(this,this.F+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.G+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.H+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.D+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,S(this,1)+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.D&255,F(this,this.L+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.K+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.J+this.M()));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.F+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.G+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},
            function(a){a=a.call(this,this.F>>8&255,E(this,this.H+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,S(this,1)+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,F(this,this.L+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.K+this.M()));
            this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.J+this.M()));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.F+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.G+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.H+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,
            this.G>>8&255,E(this,this.D+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,S(this,1)+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.K+this.M()));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.J+this.M()));this.G=this.G&-65281|a<<
            8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.F+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.G+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.H+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.D+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,
            S(this,1)+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.K+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.J+this.M()));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.F+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},
            function(a){a=a.call(this,this.D>>8&255,E(this,this.G+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.H+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,S(this,1)+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+this.M()));
            this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.K+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.J+this.M()));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.F+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.G+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,
            this.H+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.D+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,S(this,2)+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,F(this,this.L+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,this.K+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,E(this,
            this.J+R(this)));this.F=this.F&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.F+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.G+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.H+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.D+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,S(this,
            2)+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,F(this,this.L+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.K+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&255,E(this,this.J+R(this)));this.G=this.G&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.F+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.G+
            R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.H+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.D+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,S(this,2)+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,F(this,this.L+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.K+
            R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&255,E(this,this.J+R(this)));this.H=this.H&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.F+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.G+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.H+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.D+R(this)));
            this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,S(this,2)+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,F(this,this.L+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.K+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&255,E(this,this.J+R(this)));this.D=this.D&-256|a;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.F+R(this)));
            this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.G+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.H+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.D+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,S(this,2)+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,
            this.F>>8&255,F(this,this.L+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.K+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F>>8&255,E(this,this.J+R(this)));this.F=this.F&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.F+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.G+R(this)));this.G=this.G&-65281|a<<8;this.A-=
            this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.H+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.D+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,S(this,2)+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,F(this,this.L+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.K+R(this)));
            this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.G>>8&255,E(this,this.J+R(this)));this.G=this.G&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.F+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.G+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.H+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,
            this.H>>8&255,E(this,this.D+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,S(this,2)+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,F(this,this.L+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.K+R(this)));this.H=this.H&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.H>>8&255,E(this,this.J+R(this)));this.H=this.H&-65281|a<<8;this.A-=
            this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.F+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.G+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.H+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.D+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,S(this,2)+R(this)));
            this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,F(this,this.L+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.K+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.D>>8&255,E(this,this.J+R(this)));this.D=this.D&-65281|a<<8;this.A-=this.B.I},function(a){a=a.call(this,this.F&255,this.F&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.G&255);this.F=this.F&
            -256|a},function(a){a=a.call(this,this.F&255,this.H&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.F>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.G>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.H>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.F&255,this.D>>8&255);this.F=this.F&-256|a},function(a){a=a.call(this,this.G&255,this.F&255);this.G=
            this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.F>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.G>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.H>>8&255);this.G=this.G&-256|a},function(a){a=a.call(this,this.G&255,this.D>>8&255);
            this.G=this.G&-256|a},function(a){a=a.call(this,this.H&255,this.F&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.D&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.F>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.G>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.H>>8&
            255);this.H=this.H&-256|a},function(a){a=a.call(this,this.H&255,this.D>>8&255);this.H=this.H&-256|a},function(a){a=a.call(this,this.D&255,this.F&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.H&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.F>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.G>>
            8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.H>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.D&255,this.D>>8&255);this.D=this.D&-256|a},function(a){a=a.call(this,this.F>>8&255,this.F&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.G&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.D&255);this.F=this.F&-65281|a<<8},function(a){a=
            a.call(this,this.F>>8&255,this.F>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.G>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.H>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.F>>8&255,this.D>>8&255);this.F=this.F&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>
            8&255,this.H&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.F>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.G>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.H>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.G>>8&255,this.D>>8&255);this.G=this.G&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F&255);
            this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.D&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.F>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.G>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.H>>8&255,this.H>>8&255);this.H=this.H&-65281|
            a<<8},function(a){a=a.call(this,this.H>>8&255,this.D>>8&255);this.H=this.H&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.G&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.H&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.F>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,
            this.D>>8&255,this.G>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.H>>8&255);this.D=this.D&-65281|a<<8},function(a){a=a.call(this,this.D>>8&255,this.D>>8&255);this.D=this.D&-65281|a<<8}],Pd=[function(a){a=a.call(this,J(this,this.F),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.H),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,
            this.D),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,S(this,0)),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.F&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.K),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.F&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.F),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.G&
            255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.H),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,S(this,0)),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.G&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.K),this.G&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.G&255);P(this,
            a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.F),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.H),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,S(this,0)),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.H&255);P(this,a);this.A-=
            this.B.aa},function(a){a=a.call(this,J(this,this.K),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.H&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.F),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.H),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=
            a.call(this,J(this,S(this,0)),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.D&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.K),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.D&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.F),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            J(this,this.H),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,S(this,0)),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.F>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.K),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.F>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            J(this,this.F),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.H),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,S(this,0)),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.G>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,
            J(this,this.K),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.G>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.F),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.H),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            J(this,S(this,0)),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.H>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.K),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.H>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.F),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.G),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            J(this,this.H),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.D),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,S(this,0)),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,R(this)),this.D>>8&255);P(this,a);this.A-=this.B.aa},function(a){a=a.call(this,J(this,this.K),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,J(this,this.J),this.D>>8&255);P(this,a);this.A-=this.B.N},function(a){a=a.call(this,
            J(this,this.F+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.F&255);P(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),
            this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,J(this,this.G+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.H&255);
            P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            J(this,S(this,1)+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.F>>8&255);P(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,J(this,this.J+this.M()),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),
            this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,J(this,this.H+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,
            this.J+this.M()),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,1)+this.M()),this.D>>8&255);P(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+this.M()),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            J(this,this.H+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.F&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.F&255);P(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),
            this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.G&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            J(this,this.D+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.H&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.D&255);P(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),
            this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.D&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,J(this,S(this,2)+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.F>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.G>>
            8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,J(this,this.J+R(this)),this.G>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.H+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.H>>
            8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.H>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.F+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.G+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,J(this,this.H+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.D+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,S(this,2)+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,K(this,this.L+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.K+R(this)),this.D>>8&255);P(this,a);this.A-=this.B.I},function(a){a=a.call(this,J(this,this.J+R(this)),this.D>>
            8&255);P(this,a);this.A-=this.B.I},A[192],A[200],A[208],A[216],A[224],A[232],A[240],A[248],A[193],A[201],A[209],A[217],A[225],A[233],A[241],A[249],A[194],A[202],A[210],A[218],A[226],A[234],A[242],A[250],A[195],A[203],A[211],A[219],A[227],A[235],A[243],A[251],A[196],A[204],A[212],A[220],A[228],A[236],A[244],A[252],A[197],A[205],A[213],A[221],A[229],A[237],A[245],A[253],A[198],A[206],A[214],A[222],A[230],A[238],A[246],A[254],A[199],A[207],A[215],A[223],A[231],A[239],A[247],A[255]],Qd=[function(a,b){var c=
            a[0].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,R(this)),b.call(this));
            P(this,c);this.A-=this.B.aa},function(a,b){var c=a[0].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=
            a[1].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[1].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.F),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,
            b){var c=a[2].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.D),b.call(this));
            P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[3].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,
            b){var c=a[4].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[4].call(this,J(this,this.K),
            b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},
            function(a,b){var c=a[5].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[5].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,
            this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[6].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=
            this.B.N},function(a,b){var c=a[6].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.F),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.G),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.H),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.D),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,
            J(this,S(this,0)),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,R(this)),b.call(this));P(this,c);this.A-=this.B.aa},function(a,b){var c=a[7].call(this,J(this,this.K),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,J(this,this.J),b.call(this));P(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,J(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.G+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.K+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.D+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.F+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,K(this,this.L+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.H+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.J+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,S(this,1)+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.G+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.K+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.F+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.D+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,K(this,this.L+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.F+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.G+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.H+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.D+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,S(this,1)+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,K(this,this.L+this.M()),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.K+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.J+this.M()),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.H+R(this)),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,J(this,this.J+R(this)),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,S(this,2)+R(this)),b.call(this));
            P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.G+R(this)),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.K+R(this)),b.call(this));P(this,
            c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);
            this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[5].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[6].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=
            this.B.I},function(a,b){var c=a[6].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.F+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.G+R(this)),b.call(this));P(this,c);this.A-=this.B.I},
            function(a,b){var c=a[7].call(this,J(this,this.H+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.D+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,S(this,2)+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,K(this,this.L+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,J(this,this.K+R(this)),b.call(this));P(this,c);this.A-=this.B.I},
            function(a,b){var c=a[7].call(this,J(this,this.J+R(this)),b.call(this));P(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[0].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[0].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[0].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[0].call(this,this.F>>8&255,b.call(this));this.F=this.F&
            -65281|c<<8},function(a,b){var c=a[0].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[0].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[0].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[1].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[1].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[1].call(this,this.H&255,b.call(this));
            this.H=this.H&-256|c},function(a,b){var c=a[1].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[1].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[1].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[1].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[1].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[2].call(this,this.F&
            255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[2].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[2].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[2].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[2].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[2].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[2].call(this,
            this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[2].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[3].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[3].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[3].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[3].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[3].call(this,
            this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[3].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[3].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[3].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[4].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[4].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=
            a[4].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[4].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[4].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[4].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[4].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[4].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<
            8},function(a,b){var c=a[5].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[5].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[5].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[5].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[5].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[5].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|
            c<<8},function(a,b){var c=a[5].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[5].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[6].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[6].call(this,this.G&255,b.call(this));this.G=this.G&-256|c},function(a,b){var c=a[6].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[6].call(this,this.D&255,b.call(this));this.D=this.D&
            -256|c},function(a,b){var c=a[6].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[6].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[6].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[6].call(this,this.D>>8&255,b.call(this));this.D=this.D&-65281|c<<8},function(a,b){var c=a[7].call(this,this.F&255,b.call(this));this.F=this.F&-256|c},function(a,b){var c=a[7].call(this,this.G&255,b.call(this));
            this.G=this.G&-256|c},function(a,b){var c=a[7].call(this,this.H&255,b.call(this));this.H=this.H&-256|c},function(a,b){var c=a[7].call(this,this.D&255,b.call(this));this.D=this.D&-256|c},function(a,b){var c=a[7].call(this,this.F>>8&255,b.call(this));this.F=this.F&-65281|c<<8},function(a,b){var c=a[7].call(this,this.G>>8&255,b.call(this));this.G=this.G&-65281|c<<8},function(a,b){var c=a[7].call(this,this.H>>8&255,b.call(this));this.H=this.H&-65281|c<<8},function(a,b){var c=a[7].call(this,this.D>>8&
            255,b.call(this));this.D=this.D&-65281|c<<8}],B=[function(a){a=a.call(this,this.F&this.C,H(this,this.F));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.G));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.H));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.D));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,S(this,0)));this.F=
            this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,R(this)));this.F=this.F&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.F&this.C,H(this,this.K));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.J));this.F=this.F&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.F));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.G));this.G=this.G&~this.C|
            a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.H));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.D));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,S(this,0)));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,R(this)));this.G=this.G&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.G&this.C,H(this,this.K));this.G=this.G&~this.C|a;this.A-=
            this.B.N},function(a){a=a.call(this,this.G&this.C,H(this,this.J));this.G=this.G&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.F));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.G));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.H));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.D));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=
            a.call(this,this.H&this.C,H(this,S(this,0)));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,R(this)));this.H=this.H&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.H&this.C,H(this,this.K));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.H&this.C,H(this,this.J));this.H=this.H&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,this.F));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,
            this.D&this.C,H(this,this.G));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,this.H));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,this.D));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,S(this,0)));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,R(this)));this.D=this.D&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.D&
            this.C,H(this,this.K));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.D&this.C,H(this,this.J));this.D=this.D&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,this.F));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,this.G));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,this.H));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,
            H(this,this.D));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,S(this,0)));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.aa},function(a){a=a.call(this,q(this)&this.C,H(this,this.K));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,q(this)&this.C,H(this,this.J));t(this,q(this)&~this.C|a);this.A-=this.B.N},function(a){a=a.call(this,this.L&
            this.C,H(this,this.F));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,this.G));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,this.H));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,this.D));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,S(this,0)));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,
            R(this)));this.L=this.L&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.L&this.C,H(this,this.K));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.L&this.C,H(this,this.J));this.L=this.L&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.F));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.G));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.H));
            this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.D));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,S(this,0)));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,R(this)));this.K=this.K&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.K&this.C,H(this,this.K));this.K=this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.K&this.C,H(this,this.J));this.K=
            this.K&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.F));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.G));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.H));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.D));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,S(this,0)));this.J=this.J&~this.C|
            a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,R(this)));this.J=this.J&~this.C|a;this.A-=this.B.aa},function(a){a=a.call(this,this.J&this.C,H(this,this.K));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.J&this.C,H(this,this.J));this.J=this.J&~this.C|a;this.A-=this.B.N},function(a){a=a.call(this,this.F&this.C,H(this,this.F+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.G+this.M()));this.F=this.F&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.H+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.D+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,S(this,1)+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,I(this,this.L+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,
            this.K+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.J+this.M()));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.F+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.G+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.H+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=
            a.call(this,this.G&this.C,H(this,this.D+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,S(this,1)+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,I(this,this.L+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.K+this.M()));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.J+this.M()));this.G=this.G&~this.C|
            a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.F+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.G+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.H+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.D+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,S(this,
            1)+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,I(this,this.L+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.K+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.J+this.M()));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.F+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.D&this.C,H(this,this.G+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.H+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.D+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,S(this,1)+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,I(this,this.L+this.M()));this.D=this.D&~this.C|a;this.A-=
            this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.K+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.J+this.M()));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.F+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.G+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.H+this.M()));
            t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,S(this,1)+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.K+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=
            a.call(this,q(this)&this.C,H(this,this.J+this.M()));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.F+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.G+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.H+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.D+this.M()));this.L=this.L&~this.C|
            a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,S(this,1)+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,I(this,this.L+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.K+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.J+this.M()));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.F+
            this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.G+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.H+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.D+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,S(this,1)+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.K&this.C,I(this,this.L+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.K+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.J+this.M()));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.F+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.G+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.J&this.C,H(this,this.H+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.D+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,S(this,1)+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,I(this,this.L+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.K+this.M()));this.J=
            this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.J+this.M()));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.F+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.G+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.H+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,
            this.D+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,S(this,2)+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,I(this,this.L+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.K+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,H(this,this.J+R(this)));this.F=this.F&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.G&this.C,H(this,this.F+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.G+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.H+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.D+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,S(this,2)+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.G&this.C,I(this,this.L+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.K+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.G&this.C,H(this,this.J+R(this)));this.G=this.G&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.F+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.G+R(this)));this.H=this.H&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.H+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.D+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,S(this,2)+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,I(this,this.L+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,
            this.K+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.H&this.C,H(this,this.J+R(this)));this.H=this.H&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.F+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.G+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.H+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.D&this.C,H(this,this.D+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,S(this,2)+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,I(this,this.L+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.K+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.D&this.C,H(this,this.J+R(this)));this.D=this.D&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,q(this)&this.C,H(this,this.F+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.G+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.H+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.D+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,S(this,2)+R(this)));
            t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,I(this,this.L+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.K+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,q(this)&this.C,H(this,this.J+R(this)));t(this,q(this)&~this.C|a);this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.F+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.L&this.C,H(this,this.G+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.H+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.D+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,S(this,2)+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,I(this,this.L+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},
            function(a){a=a.call(this,this.L&this.C,H(this,this.K+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.L&this.C,H(this,this.J+R(this)));this.L=this.L&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.F+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.G+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.H+R(this)));this.K=this.K&
            ~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.D+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,S(this,2)+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,I(this,this.L+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,this.K+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.K&this.C,H(this,
            this.J+R(this)));this.K=this.K&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.F+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.G+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.H+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.D+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,
            this.J&this.C,H(this,S(this,2)+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,I(this,this.L+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.K+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.J&this.C,H(this,this.J+R(this)));this.J=this.J&~this.C|a;this.A-=this.B.I},function(a){a=a.call(this,this.F&this.C,this.F&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,
            this.F&this.C,this.G&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.H&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.D&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,q(this)&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.L&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.K&this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.F&this.C,this.J&
            this.C);this.F=this.F&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.F&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.G&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.H&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.D&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,q(this)&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.L&this.C);this.G=this.G&
            ~this.C|a},function(a){a=a.call(this,this.G&this.C,this.K&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.G&this.C,this.J&this.C);this.G=this.G&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.F&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.G&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.H&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.D&this.C);this.H=this.H&~this.C|a},function(a){a=
            a.call(this,this.H&this.C,q(this)&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.L&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.K&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.H&this.C,this.J&this.C);this.H=this.H&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.F&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.G&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,
            this.H&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.D&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,q(this)&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.L&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.K&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,this.D&this.C,this.J&this.C);this.D=this.D&~this.C|a},function(a){a=a.call(this,q(this)&this.C,this.F&this.C);t(this,
            q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.G&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.H&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.D&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,q(this)&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.L&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.K&this.C);t(this,q(this)&
            ~this.C|a)},function(a){a=a.call(this,q(this)&this.C,this.J&this.C);t(this,q(this)&~this.C|a)},function(a){a=a.call(this,this.L&this.C,this.F&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.G&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.H&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.D&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,q(this)&this.C);this.L=this.L&~this.C|a},function(a){a=
            a.call(this,this.L&this.C,this.L&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.K&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.L&this.C,this.J&this.C);this.L=this.L&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.F&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.G&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.H&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,
            this.D&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,q(this)&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.L&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.K&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.K&this.C,this.J&this.C);this.K=this.K&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.F&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.G&this.C);this.J=
            this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.H&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.D&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,q(this)&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.L&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.K&this.C);this.J=this.J&~this.C|a},function(a){a=a.call(this,this.J&this.C,this.J&this.C);this.J=this.J&~this.C|a}],Rd=
            [function(a){a=a.call(this,M(this,this.F),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.H),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,S(this,0)),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.F&this.C);Q(this,a);this.A-=this.B.aa},
            function(a){a=a.call(this,M(this,this.K),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.F&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.H),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.G&this.C);Q(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,M(this,S(this,0)),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.G&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.K),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.G&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.H&this.C);Q(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,M(this,this.H),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,S(this,0)),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.H&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.K),this.H&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.H&this.C);Q(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,M(this,this.F),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.H),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,S(this,0)),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.D&this.C);Q(this,a);this.A-=this.B.aa},
            function(a){a=a.call(this,M(this,this.K),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.D&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.H),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),q(this)&this.C);Q(this,a);this.A-=this.B.N},
            function(a){a=a.call(this,M(this,S(this,0)),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.K),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),q(this)&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.L&this.C);Q(this,a);this.A-=
            this.B.N},function(a){a=a.call(this,M(this,this.H),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,S(this,0)),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.L&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.K),this.L&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.L&this.C);Q(this,a);
            this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.H),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,S(this,0)),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.K&this.C);Q(this,
            a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.K),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.K&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.G),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.H),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.D),this.J&this.C);Q(this,
            a);this.A-=this.B.N},function(a){a=a.call(this,M(this,S(this,0)),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,R(this)),this.J&this.C);Q(this,a);this.A-=this.B.aa},function(a){a=a.call(this,M(this,this.K),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.J),this.J&this.C);Q(this,a);this.A-=this.B.N},function(a){a=a.call(this,M(this,this.F+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),
            this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.F&this.C);Q(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            M(this,S(this,1)+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),this.H&this.C);
            Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,M(this,this.J+this.M()),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),
            this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,M(this,this.H+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,
            this.J+this.M()),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),this.L&this.C);
            Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,M(this,this.H+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),
            this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,1)+this.M()),this.J&this.C);Q(this,a);this.A-=
            this.B.I},function(a){a=a.call(this,O(this,this.L+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+this.M()),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,
            this.H+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+R(this)),this.F&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.F&this.C);Q(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            O(this,this.L+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.G&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),this.H&this.C);Q(this,
            a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.H&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,
            M(this,this.F+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.D&this.C);
            Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.D&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=
            a.call(this,M(this,this.D+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),q(this)&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),
            this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,M(this,this.K+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.L&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.G+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),
            this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.K&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.F+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},
            function(a){a=a.call(this,M(this,this.G+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.H+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.D+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,S(this,2)+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,O(this,this.L+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.K+
            R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},function(a){a=a.call(this,M(this,this.J+R(this)),this.J&this.C);Q(this,a);this.A-=this.B.I},B[192],B[200],B[208],B[216],B[224],B[232],B[240],B[248],B[193],B[201],B[209],B[217],B[225],B[233],B[241],B[249],B[194],B[202],B[210],B[218],B[226],B[234],B[242],B[250],B[195],B[203],B[211],B[219],B[227],B[235],B[243],B[251],B[196],B[204],B[212],B[220],B[228],B[236],B[244],B[252],B[197],B[205],B[213],B[221],B[229],B[237],B[245],B[253],B[198],B[206],B[214],
            B[222],B[230],B[238],B[246],B[254],B[199],B[207],B[215],B[223],B[231],B[239],B[247],B[255]],Sd=[function(a,b){var c=a[0].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,
            S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[0].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=
            this.B.N},function(a,b){var c=a[1].call(this,M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[1].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[1].call(this,
            M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,S(this,0)),b.call(this));Q(this,c);
            this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[2].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[2].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,
            M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[3].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[3].call(this,M(this,this.J),b.call(this));Q(this,
            c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=
            a[4].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[4].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[4].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.H),b.call(this));
            Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[5].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[5].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,
            b){var c=a[6].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,R(this)),
            b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[6].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[6].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,this.F),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,this.G),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,this.H),b.call(this));Q(this,c);this.A-=this.B.N},
            function(a,b){var c=a[7].call(this,M(this,this.D),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,S(this,0)),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,R(this)),b.call(this));Q(this,c);this.A-=this.B.aa},function(a,b){var c=a[7].call(this,M(this,this.K),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[7].call(this,M(this,this.J),b.call(this));Q(this,c);this.A-=this.B.N},function(a,b){var c=a[0].call(this,M(this,
            this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,
            M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,
            M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,
            M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,
            M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,
            M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,
            M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,
            M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,
            O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,
            M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,
            M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.F+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.G+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.H+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.D+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,
            M(this,S(this,1)+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.K+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.J+this.M()),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,
            M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,
            this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[1].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,
            this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,O(this,
            this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[2].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.H+
            R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[3].call(this,M(this,this.J+
            R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,S(this,2)+
            R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[4].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.G+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.K+R(this)),
            b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[5].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.F+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.D+R(this)),b.call(this));
            Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,O(this,this.L+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[6].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.F+R(this)),b.call(this));
            Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.G+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.H+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.D+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,S(this,2)+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,O(this,this.L+R(this)),b.call(this));
            Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.K+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[7].call(this,M(this,this.J+R(this)),b.call(this));Q(this,c);this.A-=this.B.I},function(a,b){var c=a[0].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[0].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[0].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,
            b){var c=a[0].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[0].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[0].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[0].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[0].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[1].call(this,this.F&this.C,b.call(this));this.F=
            this.F&~this.C|c},function(a,b){var c=a[1].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[1].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[1].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[1].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[1].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[1].call(this,this.K&
            this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[1].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[2].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[2].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[2].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[2].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=
            a[2].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[2].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[2].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[2].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[3].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[3].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|
            c},function(a,b){var c=a[3].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[3].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[3].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[3].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[3].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[3].call(this,this.J&this.C,b.call(this));
            this.J=this.J&~this.C|c},function(a,b){var c=a[4].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[4].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[4].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[4].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[4].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[4].call(this,
            this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[4].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[4].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[5].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[5].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[5].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,
            b){var c=a[5].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[5].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[5].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[5].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[5].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[6].call(this,this.F&this.C,b.call(this));this.F=
            this.F&~this.C|c},function(a,b){var c=a[6].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[6].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[6].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=a[6].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[6].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[6].call(this,this.K&
            this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[6].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c},function(a,b){var c=a[7].call(this,this.F&this.C,b.call(this));this.F=this.F&~this.C|c},function(a,b){var c=a[7].call(this,this.G&this.C,b.call(this));this.G=this.G&~this.C|c},function(a,b){var c=a[7].call(this,this.H&this.C,b.call(this));this.H=this.H&~this.C|c},function(a,b){var c=a[7].call(this,this.D&this.C,b.call(this));this.D=this.D&~this.C|c},function(a,b){var c=
            a[7].call(this,q(this)&this.C,b.call(this));t(this,q(this)&~this.C|c)},function(a,b){var c=a[7].call(this,this.L&this.C,b.call(this));this.L=this.L&~this.C|c},function(a,b){var c=a[7].call(this,this.K&this.C,b.call(this));this.K=this.K&~this.C|c},function(a,b){var c=a[7].call(this,this.J&this.C,b.call(this));this.J=this.J&~this.C|c}],Be=[function(){return this.F+this.F},function(){return this.G+this.F},function(){return this.H+this.F},function(){return this.D+this.F},function(){this.da=this.ga;return q(this)+
            this.F},function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.F},function(){return this.K+this.F},function(){return this.J+this.F},function(){return this.F+this.G},function(){return this.G+this.G},function(){return this.H+this.G},function(){return this.D+this.G},function(){this.da=this.ga;return q(this)+this.G},function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.G},function(){return this.K+this.G},function(){return this.J+this.G},function(){return this.F+this.H},function(){return this.G+
            this.H},function(){return this.H+this.H},function(){return this.D+this.H},function(){this.da=this.ga;return q(this)+this.H},function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.H},function(){return this.K+this.H},function(){return this.J+this.H},function(){return this.F+this.D},function(){return this.G+this.D},function(){return this.H+this.D},function(){return this.D+this.D},function(){this.da=this.ga;return q(this)+this.D},function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.D},
            function(){return this.K+this.D},function(){return this.J+this.D},function(){return this.F},function(){return this.G},function(){return this.H},function(){return this.D},function(){this.da=this.ga;return q(this)},function(a){return a?(this.da=this.ga,this.L):this.ia()},function(){return this.K},function(){return this.J},function(){return this.F+this.L},function(){return this.G+this.L},function(){return this.H+this.L},function(){return this.D+this.L},function(){this.da=this.ga;return q(this)+this.L},
            function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.L},function(){return this.K+this.L},function(){return this.J+this.L},function(){return this.F+this.K},function(){return this.G+this.K},function(){return this.H+this.K},function(){return this.D+this.K},function(){this.da=this.ga;return q(this)+this.K},function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.K},function(){return this.K+this.K},function(){return this.J+this.K},function(){return this.F+this.J},function(){return this.G+
            this.J},function(){return this.H+this.J},function(){return this.D+this.J},function(){this.da=this.ga;return q(this)+this.J},function(a){return(a?(this.da=this.ga,this.L):this.ia())+this.J},function(){return this.K+this.J},function(){return this.J+this.J},function(){return this.F+(this.F<<1)},function(){return this.G+(this.F<<1)},function(){return this.H+(this.F<<1)},function(){return this.D+(this.F<<1)},function(){this.da=this.ga;return q(this)+(this.F<<1)},function(a){return(a?(this.da=this.ga,this.L):
            this.ia())+(this.F<<1)},function(){return this.K+(this.F<<1)},function(){return this.J+(this.F<<1)},function(){return this.F+(this.G<<1)},function(){return this.G+(this.G<<1)},function(){return this.H+(this.G<<1)},function(){return this.D+(this.G<<1)},function(){this.da=this.ga;return q(this)+(this.G<<1)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.G<<1)},function(){return this.K+(this.G<<1)},function(){return this.J+(this.G<<1)},function(){return this.F+(this.H<<1)},function(){return this.G+
            (this.H<<1)},function(){return this.H+(this.H<<1)},function(){return this.D+(this.H<<1)},function(){this.da=this.ga;return q(this)+(this.H<<1)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.H<<1)},function(){return this.K+(this.H<<1)},function(){return this.J+(this.H<<1)},function(){return this.F+(this.D<<1)},function(){return this.G+(this.D<<1)},function(){return this.H+(this.D<<1)},function(){return this.D+(this.D<<1)},function(){this.da=this.ga;return q(this)+(this.D<<1)},function(a){return(a?
            (this.da=this.ga,this.L):this.ia())+(this.D<<1)},function(){return this.K+(this.D<<1)},function(){return this.J+(this.D<<1)},function(){return this.F},function(){return this.G},function(){return this.H},function(){return this.D},function(){this.da=this.ga;return q(this)},function(a){return a?(this.da=this.ga,this.L):this.ia()},function(){return this.K},function(){return this.J},function(){return this.F+(this.L<<1)},function(){return this.G+(this.L<<1)},function(){return this.H+(this.L<<1)},function(){return this.D+
            (this.L<<1)},function(){this.da=this.ga;return q(this)+(this.L<<1)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.L<<1)},function(){return this.K+(this.L<<1)},function(){return this.J+(this.L<<1)},function(){return this.F+(this.K<<1)},function(){return this.G+(this.K<<1)},function(){return this.H+(this.K<<1)},function(){return this.D+(this.K<<1)},function(){this.da=this.ga;return q(this)+(this.K<<1)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.K<<1)},function(){return this.K+
            (this.K<<1)},function(){return this.J+(this.K<<1)},function(){return this.F+(this.J<<1)},function(){return this.G+(this.J<<1)},function(){return this.H+(this.J<<1)},function(){return this.D+(this.J<<1)},function(){this.da=this.ga;return q(this)+(this.J<<1)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.J<<1)},function(){return this.K+(this.J<<1)},function(){return this.J+(this.J<<1)},function(){return this.F+(this.F<<2)},function(){return this.G+(this.F<<2)},function(){return this.H+
            (this.F<<2)},function(){return this.D+(this.F<<2)},function(){this.da=this.ga;return q(this)+(this.F<<2)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.F<<2)},function(){return this.K+(this.F<<2)},function(){return this.J+(this.F<<2)},function(){return this.F+(this.G<<2)},function(){return this.G+(this.G<<2)},function(){return this.H+(this.G<<2)},function(){return this.D+(this.G<<2)},function(){this.da=this.ga;return q(this)+(this.G<<2)},function(a){return(a?(this.da=this.ga,this.L):
            this.ia())+(this.G<<2)},function(){return this.K+(this.G<<2)},function(){return this.J+(this.G<<2)},function(){return this.F+(this.H<<2)},function(){return this.G+(this.H<<2)},function(){return this.H+(this.H<<2)},function(){return this.D+(this.H<<2)},function(){this.da=this.ga;return q(this)+(this.H<<2)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.H<<2)},function(){return this.K+(this.H<<2)},function(){return this.J+(this.H<<2)},function(){return this.F+(this.D<<2)},function(){return this.G+
            (this.D<<2)},function(){return this.H+(this.D<<2)},function(){return this.D+(this.D<<2)},function(){this.da=this.ga;return q(this)+(this.D<<2)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.D<<2)},function(){return this.K+(this.D<<2)},function(){return this.J+(this.D<<2)},function(){return this.F},function(){return this.G},function(){return this.H},function(){return this.D},function(){this.da=this.ga;return q(this)},function(a){return a?(this.da=this.ga,this.L):this.ia()},function(){return this.K},
            function(){return this.J},function(){return this.F+(this.L<<2)},function(){return this.G+(this.L<<2)},function(){return this.H+(this.L<<2)},function(){return this.D+(this.L<<2)},function(){this.da=this.ga;return q(this)+(this.L<<2)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.L<<2)},function(){return this.K+(this.L<<2)},function(){return this.J+(this.L<<2)},function(){return this.F+(this.K<<2)},function(){return this.G+(this.K<<2)},function(){return this.H+(this.K<<2)},function(){return this.D+
            (this.K<<2)},function(){this.da=this.ga;return q(this)+(this.K<<2)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.K<<2)},function(){return this.K+(this.K<<2)},function(){return this.J+(this.K<<2)},function(){return this.F+(this.J<<2)},function(){return this.G+(this.J<<2)},function(){return this.H+(this.J<<2)},function(){return this.D+(this.J<<2)},function(){this.da=this.ga;return q(this)+(this.J<<2)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.J<<2)},function(){return this.K+
            (this.J<<2)},function(){return this.J+(this.J<<2)},function(){return this.F+(this.F<<3)},function(){return this.G+(this.F<<3)},function(){return this.H+(this.F<<3)},function(){return this.D+(this.F<<3)},function(){this.da=this.ga;return q(this)+(this.F<<3)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.F<<3)},function(){return this.K+(this.F<<3)},function(){return this.J+(this.F<<3)},function(){return this.F+(this.G<<3)},function(){return this.G+(this.G<<3)},function(){return this.H+
            (this.G<<3)},function(){return this.D+(this.G<<3)},function(){this.da=this.ga;return q(this)+(this.G<<3)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.G<<3)},function(){return this.K+(this.G<<3)},function(){return this.J+(this.G<<3)},function(){return this.F+(this.H<<3)},function(){return this.G+(this.H<<3)},function(){return this.H+(this.H<<3)},function(){return this.D+(this.H<<3)},function(){this.da=this.ga;return q(this)+(this.H<<3)},function(a){return(a?(this.da=this.ga,this.L):
            this.ia())+(this.H<<3)},function(){return this.K+(this.H<<3)},function(){return this.J+(this.H<<3)},function(){return this.F+(this.D<<3)},function(){return this.G+(this.D<<3)},function(){return this.H+(this.D<<3)},function(){return this.D+(this.D<<3)},function(){this.da=this.ga;return q(this)+(this.D<<3)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.D<<3)},function(){return this.K+(this.D<<3)},function(){return this.J+(this.D<<3)},function(){return this.F},function(){return this.G},
            function(){return this.H},function(){return this.D},function(){this.da=this.ga;return q(this)},function(a){return a?(this.da=this.ga,this.L):this.ia()},function(){return this.K},function(){return this.J},function(){return this.F+(this.L<<3)},function(){return this.G+(this.L<<3)},function(){return this.H+(this.L<<3)},function(){return this.D+(this.L<<3)},function(){this.da=this.ga;return q(this)+(this.L<<3)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.L<<3)},function(){return this.K+
            (this.L<<3)},function(){return this.J+(this.L<<3)},function(){return this.F+(this.K<<3)},function(){return this.G+(this.K<<3)},function(){return this.H+(this.K<<3)},function(){return this.D+(this.K<<3)},function(){this.da=this.ga;return q(this)+(this.K<<3)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.K<<3)},function(){return this.K+(this.K<<3)},function(){return this.J+(this.K<<3)},function(){return this.F+(this.J<<3)},function(){return this.G+(this.J<<3)},function(){return this.H+
            (this.J<<3)},function(){return this.D+(this.J<<3)},function(){this.da=this.ga;return q(this)+(this.J<<3)},function(a){return(a?(this.da=this.ga,this.L):this.ia())+(this.J<<3)},function(){return this.K+(this.J<<3)},function(){return this.J+(this.J<<3)}];
            function Xg(a){Ia.call(this,"ChipSet",a,Xg);this.ma=(this.ma=a.model)&&Yg[this.ma]||Zg;this.ac=0;var b=a.sw1;if(b)this.ac=$g(b,ah|bh.Zn);else{this.ge=[360,360];(b=a.floppies)&&b.length&&(this.ge=b);if(b=this.ge.length)this.ac|=ch.Pj,b--,this.ac|=(b&3)<<ch.ug;if(b=a.monitor||(this.ma<dh?"mono":"ega"),void 0!==eh[b])this.ac|=eh[b]<<bh.ug}this.Qe=$g(a.sw2||"11110000",0);this.Hp=this.ma==Zg?16:64;this.Th=this.Hg=1;this.ma>=dh&&(this.Th=this.Hg=2);this.ue=a.scaleTimers||!1;this.Br=a.rtcDate;this.Wm=!1;
            a.sound&&(this.hk=this.Lg=null,window&&(this.hk=window.AudioContext||window.webkitAudioContext),this.hk&&(this.Lg=new this.hk));this.reset(!0);Za(this)}Qa(Xg);var Zg=5150,dh=5170,Yg={5150:Zg,5160:5160,5170:dh,deskpro386:5180},eh={none:0,tv:1,color:2,mono:3,ega:0,vga:0},ch={Pj:1,ONE:0,Js:64,Hs:128,fs:192,tg:192,ug:6},ah=12,bh={Is:16,Xr:32,Zn:48,tg:48,ug:4};f=Xg.prototype;
            f.Lb=function(a,b,c){switch(b){case "sw1":return this.qa[b]=c,fh(this,b,c,this.ac,{0:this.ma==Zg?"Bootable Floppy Drive":"Loop on POST",1:this.ma==Zg?"Reserved":"Coprocessor",2:"Base Memory Size",4:"Monitor Type",6:"Number of Floppy Drives"}),!0;case "sw2":if(this.ma==Zg)return this.qa[b]=c,fh(this,b,c,this.Qe,{0:"Expansion Memory Size",4:"Reserved"}),!0;break;case "swdesc":return this.qa[b]=c,!0}return!1};
            f.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;this.za=a;this.Da=gb(a,"Keyboard");this.qj=c.R.Bd/1193181;Tb(b,this,gh);Vb(b,this,hh);this.ma<dh?(Tb(b,this,ih),Vb(b,this,jh)):(Tb(b,this,kh),Vb(b,this,lh))};f.gc=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};f.fc=function(a){return a&&this.save?this.save():!0};
            f.reset=function(a){var b;this.nd=this.ac;this.yf=this.Qe;mh(this);this.$a=Array(this.Th);for(b=0;b<this.Th;b++)nh(this,b);this.bc=Array(this.Hg);oh(this,0,32);1<this.Hg&&oh(this,1,160);this.Am=this.$j=null;this.Vb=Array(5180==this.ma?6:3);for(b=0;b<this.Vb.length;b++)ph(this,b);this.Gg=this.ak=this.Hc=this.Qh=null;this.Ph=0;if(this.ma>=dh){this.ab=16;this.Md=0;this.rd=16;this.Kh=0;this.Nd=160;512<=qh(this)&&(this.Nd|=16);3==rh(this)&&(this.Nd|=64);5180==this.ma&&(this.Nd|=12);this.Lh=3;this.Bb=Array(8);
            this.Jf=0;a&&(this.ea=Array(64));sh(this,this.Br);for(a=21;24>=a;a++)this.ea[a]=0;for(a=14;46>a;a++)void 0===this.ea[a]&&(this.ea[a]=0);this.ea[20]=this.nd&(bh.tg|2|ch.Pj|ch.tg);this.ea[16]=th(this,0)<<4|th(this,1);uh(this)}};
            function sh(a,b){var c=b?new Date(b):new Date;"[object Date]"!==Object.prototype.toString.call(c)||isNaN(c.getTime())?(c=new Date,a.pc("CMOS date invalid ("+b+"), using "+c)):b&&a.pc("CMOS date: "+c);a.ea[0]=c.getSeconds();a.ea[1]=0;a.ea[2]=c.getMinutes();a.ea[3]=0;a.ea[4]=c.getHours();a.ea[5]=0;a.ea[6]=c.getDay()+1;a.ea[7]=c.getDate();a.ea[8]=c.getMonth()+1;c=c.getFullYear();a.ea[9]=c%100;c/=100;a.ea[50]=c%10|c/10<<4;a.ea[10]=38;a.ea[11]=2;a.ea[12]=0;a.ea[13]=128;a.ih=a.eg=0;a.xn=a.oj=null}
            function vh(a){var b;void 0===b&&(b=a.oj);a.eg=Dc(a.U,a.ue)+b;a.ea[11]&64&&Ac(a.U,b)}function uh(a){for(var b=0,c=16;46>c;c++)b+=a.ea[c];a.ea[47]=b&255;a.ea[46]=b>>8}
            f.save=function(){var a=new Zd(this);a.set(0,[this.ac,this.Qe,this.nd,this.yf]);for(var b=[],c=0;c<this.$a;c++){for(var d=this.$a[c],e=d,m=[],n=0;n<e.Fb.length;n++){var p=e.Fb[n];m[n]=[p.Wd,p.Gh,p.cc,p.Wa,p.Ya,p.mode,p.Rh,p.wr,p.yr]}b[c]=[d.me,d.Yj,d.Bm,d.Hb,m]}a.set(1,[b]);b=[];for(c=0;c<this.bc.length;c++)d=this.bc[c],b[c]=[d.dh,d.dd,d.Zd,d.sd,d.Xb,d.Qc,d.Xe,d.Fg];a.set(2,[b]);b=[];for(c=0;c<this.Vb.length;c++)d=this.Vb[c],b[c]=[d.cc,d.Jc,d.Ya,d.ef,d.Dm,d.mode,d.Gj,d.qe,d.df,d.zd,d.Sg,d.kf,d.Yd];
            a.set(3,[this.$j,b,this.Am]);a.set(4,[this.Qh,this.Hc,this.ak,this.Gg,this.Ph]);this.ma>=dh&&(a.set(5,[this.ab,this.Md,this.rd,this.Kh,this.Nd,this.Lh]),a.set(6,[this.Bb[7],this.Bb,this.Jf,this.ea,this.ih,this.eg]));return a.data()};
            f.restore=function(a){var b,c;b=a[0];this.ac=b[0];this.Qe=b[1];this.nd=b[2];this.yf=b[3];b=a[1];for(c=0;c<this.Th;c++)nh(this,c,1==b.length?b[0][c]:b);b=a[2];for(c=0;c<this.Hg;c++)oh(this,c,0===c?32:160,b[0][c]);b=a[3];this.$j=b[0];this.Am=b[2];for(c=0;c<this.Vb.length;c++)ph(this,c,b[1][c]);b=a[4];this.Qh=b[0];this.Hc=b[1];this.ak=b[2];this.Gg=b[3];this.Ph=b[4];if(b=a[5])this.ab=b[0],this.Md=b[1],this.rd=b[2],this.Kh=b[3],this.Nd=b[4],this.Lh=b[5];if(b=a[6])this.Bb=b[1],this.Bb[7]=b[0],this.Jf=b[2],
            this.ea=b[3],this.ih=b[4],this.eg=b[5],sh(this);return!0};var wh=[0,null,null,0,Array(4)];function nh(a,b,c){var d=a.$a[b];d||(d={Fb:Array(4)});c=c&&5==c.length?c:wh;d.me=c[0];d.Yj=c[1];d.Bm=c[2];d.Hb=c[3];d.Rp=b<<2;for(var e=0;e<d.Fb.length;e++)xh(d,e,c[4][e]);a.$a[b]=d}var Ch=[!0,[0,0],[0,0],[0,0],[0,0]];
            function xh(a,b,c){var d=a.Fb[b];d||(d={Gh:[0,0],cc:[0,0],Wa:[0,0],Ya:[0,0]});c=c&&8==c.length?c:Ch;d.Wd=c[0];d.Gh[0]=c[1][0];d.Gh[1]=c[1][1];d.cc[0]=c[2][0];d.cc[1]=c[2][1];d.Wa[0]=c[3][0];d.Wa[1]=c[3][1];d.Ya[0]=c[4][0];d.Ya[1]=c[4][1];d.mode=c[5];d.Rh=c[6];d.W=a;d.fn=b;Dh(d,c[8],c[9]);a.Fb[b]=d}function Dh(a,b,c,d){"string"==typeof b&&(b=Sa(b));b&&(a.ai=null,a.wr=b.id,a.yr=c,a.Zh=b,a.zk=b[c],a.rj=d)}var Eh=[0,Array(4)];
            function oh(a,b,c,d){var e=a.bc[b];e||(e={dd:[null,null,null,null]});d=d&&8==d.length?d:Eh;e.port=c;e.pt=b<<3;e.dh=d[0];e.dd[0]=d[1][0];e.dd[1]=d[1][1];e.dd[2]=d[1][2];e.dd[3]=d[1][3];e.Zd=d[2];e.sd=d[3];e.Xb=d[4];e.Qc=d[5];e.Xe=d[6];e.Fg=d[7];a.bc[b]=e}var Fh=[[0,0],[0,0],[0,0],[0,0]];
            function ph(a,b,c){var d=a.Vb[b];d||(d={cc:[0,0],Jc:[0,0],Ya:[0,0],ef:[0,0]});c=c&&13==c.length?c:Fh;d.cc[0]=c[0][0];d.cc[1]=c[0][1];d.Jc[0]=c[1][0];d.Jc[1]=c[1][1];d.Ya[0]=c[2][0];d.Ya[1]=c[2][1];d.ef[0]=c[3][0];d.ef[1]=c[3][1];d.Dm=c[4];d.mode=c[5];d.Gj=c[6];d.qe=c[7];d.df=c[8];d.zd=c[9];d.Sg=c[10];d.kf=c[11];d.Yd=c[12];a.Vb[b]=d}function qh(a,b){return((((b?a.ac:a.nd)&12)>>2)+1)*a.Hp+32*((b?a.Qe:a.yf)&15)}function Gh(a,b){var c=b?a.ac:a.nd;return a.ma!=Zg||c&ch.Pj?((c&ch.tg)>>ch.ug)+1:0}
            function th(a,b){if(b<Gh(a)){if(!a.ge)return 1;if(b<a.ge.length)switch(a.ge[b]){case 160:case 180:case 320:case 360:return 1;case 720:return 3;case 1200:return 2;case 1440:return 4}}return 0}function rh(a,b){return((b?a.ac:a.nd)&bh.tg)>>bh.ug}
            function fh(a,b,c,d,e){for(var m="",n=1;8>=n;n++){var p="pcjs-bitCell";n||(p+=" pcjs-bitCellLeft");m+='<div id="'+(b+"-"+n)+'" class="'+p+'" data-value="0">'+n+"</div>\n"}c.innerHTML=m;b=Xa(c,"pcjs-bitCell");c=null;for(n=0;n<b.length;n++)null!=e&&null!=e[n]&&(c=e[n]),c&&b[n].setAttribute("title",c),Hh(b[n],d&1<<n?!1:!0),b[n].onclick=function(a,b){return function(){var c="1"!=b.getAttribute("data-value");Hh(b,c);var d=b.getAttribute("id").split("-"),e=1<<+d[1]-1;switch(d[0]){case "sw1":a.ac=a.ac&~e|
            (c?0:e);break;case "sw2":a.Qe=a.Qe&~e|(c?0:e)}mh(a)}}(a,b[n])}function Hh(a,b){a.setAttribute("data-value",b?"1":"0");a.style.color=b?"#ffffff":"#000000";a.style.backgroundColor=b?"#000000":"#ffffff"}function mh(a){var b=a.qa.swdesc,c={0:"Enhanced Color",1:"TV",2:"Color",3:"Monochrome"};if(null!=b){var d;d=""+(qh(a,!0)+"Kb");d+=", "+c[rh(a,!0)]+" Monitor";d+=", "+Gh(a,!0)+" Floppy Drives";if(null!=a.nd&&a.nd!=a.ac||null!=a.yf&&a.yf!=a.Qe)d+=" (Reset required)";b.textContent=d}}
            function Ih(a,b,c){a=a.$a[b];var d=a.Fb[c],e=d.Wa[a.Hb];a.Hb^=1;b||0!=c||a.Hb||(d.Wa[0]++,255<d.Wa[0]&&(d.Wa[0]=0,d.Wa[1]++,255<d.Wa[1]&&(d.Wa[1]=0)));return e}function Jh(a,b,c,d){a=a.$a[b];c=a.Fb[c];c.Wa[a.Hb]=c.Gh[a.Hb]=d;a.Hb^=1}function Kh(a,b,c){a=a.$a[b];var d=a.Fb[c],e=d.Ya[a.Hb];a.Hb^=1;b||0!=c||a.Hb||(d.Ya[0]--,0>d.Ya[0]&&(d.Ya[0]=255,d.Ya[1]--,0>d.Ya[1]&&(d.Ya[1]=255)));return e}function Lh(a,b,c,d){a=a.$a[b];c=a.Fb[c];c.Ya[a.Hb]=c.cc[a.Hb]=d;a.Hb^=1}
            function Mh(a,b){var c=a.$a[b],d=c.me|1;c.me&=-16;return d}function Nh(a,b,c){a=a.$a[b];b=c&3;a.me=a.me&~(16<<b)|(c&4)<<b+2;a.Bm=c}function Oh(a,b,c){b=a.$a[b];var d=c&3,e=b.Fb[d];e.Wd=!!(c&4);e.Wd||Ph(a,b.Rp+d)}function Qh(a,b){for(var c=a.$a[b],d=0;d<c.Fb.length;d++)xh(c,d)}function Rh(a,b,c){return a.$a[b].Fb[c].Rh}function Sh(a,b,c,d){a.$a[b].Fb[c].Rh=d}function Th(a,b,c,d,e){Dh(a.$a[b>>2].Fb[b&3],c,d,e)}
            function Ph(a,b,c){b=a.$a[b>>2].Fb[b&3];b.Zh&&b.zk&&b.rj?(c&&(b.ai=c),b.Wd||Fe(a,b,!0)):c&&c(!0)}function Fe(a,b,c){c&&(b.count=b.Ya[1]<<8|b.Ya[0],b.type=b.mode&12,b.Zm=b.yd=!1);for(var d=!1;0<=b.count&&(c=b.Rh<<16|b.Wa[1]<<8|b.Wa[0],4==b.type?(d=!0,function(c){b.zk.call(b.Zh,b.rj,-1,function(m,n){0>m&&(b.Zm||(b.Zm=!0),m=255);b.Wd||a.la.Oe(c,m);(d=n)&&setTimeout(function(){Uh(b)||Fe(a,b)},0)})}(c)):8==b.type?(c=a.la.wc(c),0>b.zk.call(b.Zh,b.rj,c)&&(b.yd=!0)):0!=b.type&&(b.yd=!0)),!d&&!Uh(b););}
            function Uh(a){if(!a.yd&&0<=--a.count&&(a.mode&32?(a.Wa[0]--,0>a.Wa[0]&&(a.Wa[0]=255,a.Wa[1]--,0>a.Wa[1]&&(a.Wa[1]=255))):(a.Wa[0]++,255<a.Wa[0]&&(a.Wa[0]=0,a.Wa[1]++,255<a.Wa[1]&&(a.Wa[1]=0))),!a.Wd))return!1;var b=a.W;b.me=b.me&~(16<<a.fn)|1<<a.fn;a.mode&16||(a.Wd=!0,a.Zh=a.rj=null);a.ai&&(a.ai(!a.yd),a.ai=null);return!0}function Vh(a,b){var c=0,d=a.bc[b];if(null!=d.Fg)switch(d.Fg&3){case 2:c=d.Xb;break;case 3:c=d.Qc}return c}
            function Wh(a,b,c){var d=a.bc[b];if(c&16)d.Zd=0,d.dd[d.Zd++]=c,d.sd=0,d.Xe=7,d.Xb=d.Qc=0,d.Fg=10;else if(c&8)c&100&&a.wa("PIC"+b+"("+ea(d.port)+"): unsupported OCW3 command: "+ea(c)),d.Fg=c;else{var e=c&224;if(e&32){var m,n=0;if(96==(e&96))n=1<<(c&7);else for(m=d.Xe+1;;){m&=7;var p=1<<m;if(d.Qc&p){n=p;break}if(m++==d.Xe)break}d.Qc&n&&(d.Qc&=~n,Xh(a));e&128&&a.wa("PIC"+b+"("+ea(d.port)+"): unsupported OCW2 rotate command: "+ea(c))}else 192==e?d.Xe=c&7:a.wa("PIC"+b+"("+ea(d.port)+"): unsupported OCW2 automatic EOI command: "+
            ea(c))}}function Yh(a,b,c){var d=a.bc[b];d.Zd<d.dd.length?(d.dd[d.Zd++]=c,2==d.Zd&&d.dd[0]&2&&d.Zd++,3!=d.Zd||d.dd[0]&1||d.Zd++):(d.sd=c,d=a.U,d.Q|=4,Xh(a,b||253!=c?0:6))}function Zh(a,b,c){var d=a.bc[b>>3];b=1<<(b&7);d.Xb&b||(d.Xb|=b,d.dh=c||0,Xh(a))}function $h(a,b){var c=a.bc[b>>3],d=1<<(b&7);c.Xb&d&&(c.Xb&=~d,Xh(a))}
            function Xh(a,b){var c,d=-1;1<a.Hg&&(c=a.bc[1],d=~(c.Qc|c.sd)&c.Xb);c=a.bc[0];0<=d&&(c.Xb=d?c.Xb|4:c.Xb&-5);var d=~(c.Qc|c.sd)&c.Xb,e=a.U;e.fa&&(e.lb=d?e.lb|1:e.lb&-2);d&&b&&(c.dh=b)}function De(a,b){void 0===b&&(b=0);var c=-1,d=a.bc[b];if(d.dh)c=-2,d.dh--;else for(var e=d.Xb&((d.Qc|d.sd)^255),m=d.Xe+1;;){var m=m&7,n=1<<m;if(e&n){c=b||2!=m?d.dd[1]+m:De(a,1);0<=c&&(d.Qc|=n,d.Xb&=~n);break}if(m++==d.Xe)break}return c}
            function ai(a,b){var c=a.Vb[b];c.qe==c.df&&bi(a,b);if(c.Sg)return c.ef[c.qe++];ci(a,b);return c.Ya[c.qe++]}function di(a,b,c){var d=a.Vb[b];d.qe==d.df&&bi(a,b);d.cc[d.qe++]=c;d.qe==d.df&&(d.kf&&0!=d.mode&&8!=d.mode||(d.Sg=!1,d.Ya[0]=d.Jc[0]=d.cc[0],d.Ya[1]=d.Jc[1]=d.cc[1],d.Yd=Dc(a.U,a.ue),d.kf=!0,d.zd=0!=d.mode,0==b&&($h(a,0),c=ei(a,0)*a.qj|0,6==d.mode&&(c>>=1),Ac(a.U,c))),2==b&&Ec(a))}f=Xg.prototype;f.qp=function(){return null};
            f.Rq=function(a,b){this.$j=b;var c=(b&192)>>6;if(3!=c){var d=b&1,e=b&14,m=b&48;if(m){var n=this.Vb[c];n.Gj=m;n.mode=e;n.Dm=d;n.cc=[0,0];n.Ya=[0,0];n.ef=[0,0];n.zd=!1;n.Sg=!1;n.kf=!1;bi(this,c);0==c&&$h(this,0);2==c&&255==this.bc[0].sd&&77==this.Hc&&(c=this.Vb[0],c.Jc[0]=c.cc[0],c.Jc[1]=c.cc[1],c.Yd=Dc(this.U,this.ue))}else ci(this,c),d=this.Vb[c],d.ef[0]=d.Ya[0],d.ef[1]=d.Ya[1],d.Sg=!0,bi(this,c)}};function ei(a,b){var c=a.Vb[b],d=c.cc[1]<<8|c.cc[0];d||(d=1==c.df?256:65536);return d}
            function Gc(a,b){var c=a.Vb[b],d=c.Jc[1]<<8|c.Jc[0];d||(d=1==c.df?256:65536);return d}function bi(a,b){var c=a.Vb[b];c.qe=32==c.Gj?1:0;c.df=48==c.Gj?2:1}
            function ci(a,b,c){var d=a.Vb[b];if(d.kf&&(2!=b||a.Hc&1)){var e=Dc(a.U,a.ue),m=(e-d.Yd)/a.qj|0;0>m&&(d.Yd=e,m=0);var n=ei(a,b),p=Gc(a,b)-m;0==d.mode?(0>=p&&(p=0),p||(d.zd=!0,d.kf=!1,b||Zh(a,0))):4==d.mode?(d.zd=1!=p,0>=p&&(p=n+p,0>=p&&(p=n),d.Jc[0]=p&255,d.Jc[1]=p>>8,d.Yd=e,!b&&d.zd&&Zh(a,0))):6==d.mode&&(p-=m,0>=p&&(d.zd=!d.zd,p=n+p,0>=p&&(p=n),d.Jc[0]=p&255,d.Jc[1]=p>>8,d.Yd=e,!b&&d.zd&&Zh(a,0)));d.Ya[0]=p&255;d.Ya[1]=p>>8;c&&(a.Yd=0)}return d}
            function Fc(a,b){for(var c=0;c<a.Vb.length;c++)ci(a,c,b);if(a.ma>=dh){var c=a.U.R.Bd,d=Dc(a.U,a.ue);null==a.oj&&(a.ih=Dc(a.U,a.ue),a.xn=1024,a.oj=Math.floor(a.U.R.Bd/a.xn),vh(a));d>=a.eg&&(a.ea[12]|=64,a.ea[11]&64&&(a.ea[12]|=128,Zh(a,8)),a.eg=d+a.oj);a.ea[0]==a.ea[1]&&a.ea[2]==a.ea[3]&&a.ea[4]==a.ea[5]&&(a.ea[12]|=32,a.ea[11]&32&&(a.ea[12]|=128,Zh(a,8)));var e=d-a.ih,m=Math.floor(e/c);if(m&&!(a.ea[11]&128)){for(;m--;)if(60<=++a.ea[0]&&(a.ea[0]=0,60<=++a.ea[2]&&(a.ea[2]=0,24<=++a.ea[4]))){a.ea[4]=
            0;a.ea[6]=a.ea[6]%7+1;var n;n=a.ea[9];var p=ma[a.ea[8]-1];28==p&&0===n%4&&(n%100||0===n%400)&&p++;n=p;++a.ea[7]>n&&(a.ea[7]=1,12<++a.ea[8]&&(a.ea[8]=1,a.ea[9]=(a.ea[9]+1)%100))}a.ea[12]|=16;a.ea[11]&16&&(a.ea[12]|=128,Zh(a,8))}a.ih=d-e%c}}f.rp=function(){var a=this.Qh;if(this.Gg&16)if(this.Hc&128)a=this.nd;else if(this.Da){var a=this.Da,b=0;a.Wb.length&&(b=a.Wb[0]);a=b}return a};f.Sq=function(a,b){this.Qh=b};f.sp=function(){return this.Hc};
            f.Tq=function(a,b){fi(this,b);this.Da&&gi(this.Da,b&128?!1:!0,b&64?!0:!1)};function fi(a,b){var c=!!(b&2),d=!!(a.Hc&2);a.Hc=b;c!=d&&Ec(a,c)}f.tp=function(){var a=0,a=this.ma==Zg?this.Hc&4?a|this.yf&15:a|this.yf>>4&1:this.Hc&8?a|this.nd>>4:a|this.nd&15;this.Hc&1&&ci(this,2).zd&&(a=this.Hc&2?a|32:a|16);return a};f.Uq=function(a,b){this.ak=b};f.up=function(){return this.Gg};f.Vq=function(a,b){this.Gg=b};f.Ho=function(){var a=this.Kh;this.ab&=-258;this.Da&&hi(this.Da);return a};
            f.fq=function(a,b){if(this.ab&8)switch(this.Md){case 96:ii(this,b);break;case 209:ji(this,b);break;default:if(ii(this,this.rd&-17),this.Da){var c=-1;switch(b){case 255:c=250,ki(this.Da)}li(this,c)}}this.Md=b;this.ab&=-9};f.Io=function(){return this.Hc&-209|(Dc(this.U)&64?16:0)};f.gq=function(a,b){fi(this,b)};f.Jo=function(){var a=this.ab&255;this.ab&256&&(this.ab|=1,this.ab&=-257);return a};
            f.eq=function(a,b){this.Md=b;this.ab|=8;var c=0;240<=this.Md&&(c=this.Md^15,this.Md=240);switch(this.Md){case 32:li(this,this.rd);break;case 173:ii(this,this.rd|16);break;case 174:ii(this,this.rd&-17);this.Da&&hi(this.Da);break;case 170:this.Da&&(this.Da.Wb=[]);ii(this,this.rd|16);li(this,85);ji(this,3);break;case 171:li(this,0);break;case 192:li(this,this.Nd);break;case 208:li(this,this.Lh);break;case 224:li(this,this.rd&16?0:1);break;case 240:c&1&&Ed(this.U)}};
            function ii(a,b){a.rd=b;a.ab=a.ab&-5|b&4;a.Da&&gi(a.Da,!!(b&8),!(b&16))}function li(a,b,c){0<=b&&(a.Kh=b,c?a.ab|=1:(a.ab&=-2,a.ab|=256))}function ji(a,b){a.Lh=b;Ib(a.la,!!(b&2));b&1||Ed(a.U)}function mi(a,b){a.ma<dh?Zh(a,1,4):a.rd&16||a.ab&257||(li(a,b,!0),ni(a.Da),Zh(a,1,120))}f.Xo=function(){return this.Jf};f.uq=function(a,b){this.Jf=b;this.Ph=b&128?0:128};
            f.Yo=function(a,b){var c=this.Jf&63,d;if(13>=c)if(d=this.ea[c],10>c){var e=!1;4!=c&&5!=c||this.ea[11]&2||(d=12>d?d?d:12:(d-=12)?d+128:140,e=!0);this.ea[11]&4||(e&&128<d&&(d-=48),d=d%10|d/10<<4)}else 10==c&&(this.ea[c]^=128);else d=this.ea[c];null!=b&&12==c&&(this.ea[c]&=15,d&128&&$h(this,8),d&64&&this.ea[11]&64&&vh(this));return d};
            f.vq=function(a,b){var c=this.Jf&63,d=b^this.ea[c],e;if(13>=c){if(e=b,10>c){var m=!1;this.ea[11]&4||(e=10*(e>>4)+(e&15),m=!0);if(4==c||5==c)m&&23<e&&(e+=48),this.ea[11]&2||(12>=e?e=12==e?0:e:(e-=116,e=24==e?12:e))}}else e=b;this.ea[c]=e;11==c&&d&64&&b&64&&vh(this)};f.Qq=function(a,b){this.Ph=b};f.wq=function(){};f.xq=function(){};function $g(a,b){if(void 0===a)return b;for(var c=0,d=1,e=0;e<a.length;e++)"0"==a.charAt(e)&&(c|=d),d<<=1;return c}
            function Ec(a,b){if(a.Lg)try{void 0!==b?a.Wm=b:b=a.Wm&&a.U&&a.U.ha.Qb;var c=Math.round(1193181/ei(a,2));if(20>c||2E4<c)b=!1;b?a.jc?a.jc.frequency.value=c:(a.jc=a.Lg.createOscillator(),a.jc&&(a.jc.type="number"==typeof a.jc.type?1:"square",a.jc.connect(a.Lg.destination),a.jc.frequency.value=c,"start"in a.jc?a.jc.start(0):a.jc.noteOn(0))):a.jc&&("stop"in a.jc?a.jc.stop(0):a.jc.noteOff(0),a.jc.disconnect(),delete a.jc)}catch(d){a.wa("AudioContext exception: "+d.message),a.Lg=null}else b&&a.oc("BEEP",
            8388608)}
            var gh={0:function(){return Ih(this,0,0)},1:function(){return Kh(this,0,0)},2:function(){return Ih(this,0,1)},3:function(){return Kh(this,0,1)},4:function(){return Ih(this,0,2)},5:function(){return Kh(this,0,2)},6:function(){return Ih(this,0,3)},7:function(){return Kh(this,0,3)},8:function(){return Mh(this,0)},32:function(){return Vh(this,0)},33:function(){return this.bc[0].sd},64:function(){return ai(this,0)},65:function(){return ai(this,1)},66:function(){return ai(this,2)},67:Xg.prototype.qp,129:function(){return Rh(this,
            0,2)},130:function(){return Rh(this,0,3)},131:function(){return Rh(this,0,1)},135:function(){return Rh(this,0,0)}},ih={96:Xg.prototype.rp,97:Xg.prototype.sp,98:Xg.prototype.tp,99:Xg.prototype.up},kh={96:Xg.prototype.Ho,97:Xg.prototype.Io,100:Xg.prototype.Jo,112:Xg.prototype.Xo,113:Xg.prototype.Yo,128:function(){return this.Bb[7]},132:function(){return this.Bb[0]},133:function(){return this.Bb[1]},134:function(){return this.Bb[2]},136:function(){return this.Bb[3]},137:function(){return Rh(this,1,2)},
            138:function(){return Rh(this,1,3)},139:function(){return Rh(this,1,1)},140:function(){return this.Bb[4]},141:function(){return this.Bb[5]},142:function(){return this.Bb[6]},143:function(){return Rh(this,1,0)},160:function(){return Vh(this,1)},161:function(){return this.bc[1].sd},192:function(){return Ih(this,1,0)},194:function(){return Kh(this,1,0)},196:function(){return Ih(this,1,1)},198:function(){return Kh(this,1,1)},200:function(){return Ih(this,1,2)},202:function(){return Kh(this,1,2)},204:function(){return Ih(this,
            1,3)},206:function(){return Kh(this,1,3)},208:function(){return Mh(this,1)}},hh={0:function(a,b){Jh(this,0,0,b)},1:function(a,b){Lh(this,0,0,b)},2:function(a,b){Jh(this,0,1,b)},3:function(a,b){Lh(this,0,1,b)},4:function(a,b){Jh(this,0,2,b)},5:function(a,b){Lh(this,0,2,b)},6:function(a,b){Jh(this,0,3,b)},7:function(a,b){Lh(this,0,3,b)},8:function(a,b){this.$a[0].Yj=b},9:function(a,b){Nh(this,0,b)},10:function(a,b){Oh(this,0,b)},11:function(a,b){this.$a[0].Fb[b&3].mode=b},12:function(){this.$a[0].Hb=
            0},13:function(){Qh(this,0)},32:function(a,b){Wh(this,0,b)},33:function(a,b){Yh(this,0,b)},64:function(a,b){di(this,0,b)},65:function(a,b){di(this,1,b)},66:function(a,b){di(this,2,b)},67:Xg.prototype.Rq,129:function(a,b){Sh(this,0,2,b)},130:function(a,b){Sh(this,0,3,b)},131:function(a,b){Sh(this,0,1,b)},135:function(a,b){Sh(this,0,0,b)}},jh={96:Xg.prototype.Sq,97:Xg.prototype.Tq,98:Xg.prototype.Uq,99:Xg.prototype.Vq,160:Xg.prototype.Qq},lh={96:Xg.prototype.fq,97:Xg.prototype.gq,100:Xg.prototype.eq,
            112:Xg.prototype.uq,113:Xg.prototype.vq,128:function(a,b){this.Bb[7]=b},132:function(a,b){this.Bb[0]=b},133:function(a,b){this.Bb[1]=b},134:function(a,b){this.Bb[2]=b},136:function(a,b){this.Bb[3]=b},137:function(a,b){Sh(this,1,2,b)},138:function(a,b){Sh(this,1,3,b)},139:function(a,b){Sh(this,1,1,b)},140:function(a,b){this.Bb[4]=b},141:function(a,b){this.Bb[5]=b},142:function(a,b){this.Bb[6]=b},143:function(a,b){Sh(this,1,0,b)},160:function(a,b){Wh(this,1,b)},161:function(a,b){Yh(this,1,b)},192:function(a,
            b){Jh(this,1,0,b)},194:function(a,b){Lh(this,1,0,b)},196:function(a,b){Jh(this,1,1,b)},198:function(a,b){Lh(this,1,1,b)},200:function(a,b){Jh(this,1,2,b)},202:function(a,b){Lh(this,1,2,b)},204:function(a,b){Jh(this,1,3,b)},206:function(a,b){Lh(this,1,3,b)},208:function(a,b){this.$a[1].Yj=b},210:function(a,b){Nh(this,1,b)},212:function(a,b){Oh(this,1,b)},214:function(a,b){this.$a[1].Fb[b&3].mode=b},216:function(){this.$a[1].Hb=0},218:function(){Qh(this,1)},240:Xg.prototype.wq,241:Xg.prototype.xq};
            Ea(function(){for(var a=Xa(window.document,"pcjs","chipset"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new Xg(d);Wa(d,c);mh(d)}});
            function oi(a){Ia.call(this,"ROM",a,oi);this.Gb=null;this.Wj=a.addr;this.pg=a.size;this.Cg=a.alias;this.vh=a.file;this.xr=fa(this.vh);this.xe=a.notify;this.om=null;if(this.xe&&(a=this.xe.indexOf("["),0<a)){try{this.om=eval(this.xe.substr(a))}catch(b){}this.xe=this.xe.substr(0,a)}if(this.vh){a=this.vh;var c=ha(this.xr);"json"!=c&&"hex"!=c&&(a=qa()+"/api/v1/dump?file="+this.vh+"&format=bytes&decimal=true");pa(a,!0,null,this,oi.prototype.aq)}}Qa(oi);
            oi.prototype.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;pi(this)};oi.prototype.gc=function(){this.Vj&&(this.Ra&&this.Ra.Ss(this.Wj,this.pg,this.Vj),delete this.Vj);return!0};oi.prototype.fc=function(){return!0};
            oi.prototype.aq=function(a,b,c){if(c)this.wa("Unable to load system ROM (error "+c+")");else{if("["==b.charAt(0)||"{"==b.charAt(0))try{var d=eval("("+b+")"),e=d.bytes,m=d.data;if(e)this.Gb=e;else if(m)for(this.Gb=Array(4*m.length),c=b=0;b<m.length;b++)this.Gb[c++]=m[b]&255,this.Gb[c++]=m[b]>>8&255,this.Gb[c++]=m[b]>>16&255,this.Gb[c++]=m[b]>>24&255;else this.Gb=d;this.Vj=d.symbols;if(!this.Gb.length){ra("Empty ROM: "+a);return}if(1==this.Gb.length){ra(this.Gb[0]);return}}catch(n){this.wa("ROM data error: "+
            n.message);return}else for(a=b.replace(/\n/gm," ").replace(/ +$/,"").split(" "),this.Gb=Array(a.length),d=0;d<a.length;d++)this.Gb[d]=ca(a[d],16);pi(this)}};
            function pi(a){if(!$a(a))if(!a.vh)Za(a);else if(a.Gb&&a.la){if(a.Gb.length!=a.pg)ab(a,"ROM size (0x"+da(a.Gb.length)+") does not match specified size ("+("0x"+da(a.pg))+")");else{var b;b=a.Wj;if(Jb(a.la,b,a.pg,bc)){for(var c=0;c<a.Gb.length;c++){var d=a.la,e=b+c;d.ka[(e&d.xb)>>>d.Aa].fm(e&d.Ea,a.Gb[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.Cg?b.push(a.Cg):null!=a.Cg&&a.Cg.length&&(b=a.Cg);for(c=0;c<b.length;c++){var d=a,e=b[c],m=Mb(d.la,d.Wj,d.pg);Lb(d.la,e,d.pg,m)}a.xe&&((b=Sa(a.xe,
            a.id))?(c=a.Gb,d=a.om,5==b.qb?qi(b,c,d||[12640,8752],8):7==b.qb&&qi(b,c,d||[14221,16269],8),Za(b)):a.wa("Unable to find component: "+a.xe));delete a.Gb}}Za(a)}}Ea(function(){for(var a=Xa(window.document,"pcjs","rom"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new oi(d);Wa(d,c)}});function ri(a){Ia.call(this,"RAM",a,ri);this.Hh=a.addr;this.be=a.size;this.Bo=a.test;this.xo=!!this.be;this.ci=!1}Qa(ri);ri.prototype.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;this.fa=gb(a,"ChipSet");Za(this)};
            ri.prototype.gc=function(a,b){b||this.reset();return!0};ri.prototype.fc=function(){return!0};
            ri.prototype.reset=function(){if(!this.Hh&&!this.xo&&this.fa){var a=1024*qh(this.fa);this.be&&a!=this.be&&(Nb(this.la,this.Hh,this.be),this.ci=!1);this.be=a}!this.ci&&this.be&&Jb(this.la,this.Hh,this.be,1)&&(this.ci=!0,this.status(Math.floor(this.be/1024)+"Kb allocated"),"ramCPQ"==this.Vg&&(this.W=new si(this),Jb(this.la,ti,1,4,this.W)));if(this.ci){if(this.Bo||Pb(this.la,1138,4660),"ramCPQ"!=this.Vg&&this.fa&&(a=this.fa,a.ea)){var b=1048576>this.Hh?21:23,c=a.ea[b]|a.ea[b+1]<<8,c=c+(this.be>>10);
            a.ea[b]=c&255;a.ea[b+1]=c>>8;uh(a)}}else ra("No RAM allocated")};function si(a){this.er=a;this.em=ui;this.Tn=vi;this.Nj=wi;this.wg=null}
            var ti=-2134900736,ui=65535,vi=2575,wi=2,xi=[null,0],yi=[function(a){var b=255;2>a?b=a&1?this.W.Tn>>8:this.W.Tn&255:4>a&&(b=a&1?this.W.Nj>>8:this.W.Nj&255);return b},null,null,function(a,b){var c=this.W;if(a)2==a&&(c.Nj=c.Nj&-256|b);else if(b!=(c.em&255)){var d=c.er.la;if(b&1)c.wg&&(Lb(d,917504,131072,c.wg),c.wg=null);else{c.wg||(c.wg=Mb(d,917504,131072));var e=Mb(d,16646144,131072);Lb(d,917504,131072,e,b&2?1:bc)}c.em=c.em&-256|b}},null,null];si.prototype.cn=function(){return xi};
            si.prototype.Ak=function(){return yi};Ea(function(){for(var a=Xa(window.document,"pcjs","ram"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new ri(d);Wa(d,c)}});function zi(a){Ia.call(this,"Keyboard",a,zi);this.Um=ya("Mobi");this.yo=ya("MSIE");this.oc("mobile keyboard support: "+(this.Um?"true":"false"));this.Gm=0;this.hi=!0;this.xk=this.tk=!1;this.Mb=[];this.Op=500;this.Pp=100;this.Np=50;this.Om=!1;Za(this)}Qa(zi);
            var V={Yr:1,Zr:3,$r:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Vr:65,Wr:66,jm:67,Xn:68,E:69,ds:70,gs:71,km:72,js:73,ks:74,ls:75,ms:76,ns:77,Qj:78,ps:79,qs:80,ss:81,mm:82,ws:83,Gs:84,Ks:85,Ls:86,Ms:87,Os:88,Ps:89,Qs:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Rs:97,Ts:98,Ws:99,ct:100,dt:101,et:102,gt:103,ht:104,jt:105,kt:106,lt:107,
            mt:108,nt:109,ot:110,qt:111,rt:112,st:113,tt:114,ut:115,vt:116,wt:117,xt:118,yt:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126},Ai={};Ai[186]=V[";"];Ai[187]=V["="];Ai[188]=V[","];Ai[189]=V["-"];Ai[190]=V["."];Ai[191]=V["/"];Ai[192]=V["`"];Ai[219]=V["["];Ai[220]=V["\\"];Ai[221]=V["]"];Ai[222]=V["'"];Ai[173]=V["-"];var Bi={};Bi[V["1"]]=V["!"];Bi[V["2"]]=V["@"];Bi[V["3"]]=V["#"];Bi[V["4"]]=V.$;Bi[V["5"]]=V["%"];Bi[V["6"]]=V["^"];Bi[V["7"]]=V["&"];Bi[V["8"]]=V["*"];Bi[V["9"]]=V["("];
            Bi[V["0"]]=V[")"];Bi[186]=V[":"];Bi[187]=V["+"];Bi[188]=V["<"];Bi[189]=V._;Bi[190]=V[">"];Bi[191]=V["?"];Bi[192]=V["~"];Bi[219]=V["{"];Bi[220]=V["|"];Bi[221]=V["}"];Bi[222]=V['"'];Bi[173]=V._;Bi[61]=V["+"];Bi[59]=V[":"];
            var Ci={3016:1,1016:2,1017:8,1018:32,1091:128,1093:64,1224:128,1020:512,1144:1024,1145:2048},Di={TAB:1009,ESC:1027,F1:1112,F2:1113,F3:1114,F4:1115,F5:1116,F6:1117,F7:1118,F8:1119,F9:1120,F10:1121,LEFT:1037,UP:1038,RIGHT:1039,DOWN:1040,CTRL_C:4003,CTRL_BREAK:4008,CTRL_ALT_DEL:4046},Ei={esc:1027,1:V["1"],2:V["2"],3:V["3"],4:V["4"],5:V["5"],6:V["6"],7:V["7"],8:V["8"],9:V["9"],0:V["0"],"-":V["-"],"=":V["="],bs:1008,tab:1009,q:81,w:87,e:69,r:82,t:84,y:89,u:85,i:73,o:79,p:80,"[":V["["],"]":V["]"],enter:13,
            ctrl:1017,a:65,s:83,d:68,f:70,g:71,h:72,j:74,k:75,l:76,";":V[";"],quote:V["'"],"`":V["`"],shift:1016,"\\":V["\\"],z:90,x:88,c:67,v:86,b:66,n:78,m:77,",":V[","],".":V["."],"/":V["/"],"right-shift":3016,prtsc:1044,alt:1018,space:V[" "],"caps-lock":1020,f1:1112,f2:1113,f3:1114,f4:1115,f5:1116,f6:1117,f7:1118,f8:1119,f9:1120,f10:1121,"num-lock":1144,"scroll-lock":1145,"num-home":1036,"num-up":1038,"num-pgup":1033,"num-sub":1109,"num-left":1037,"num-center":1101,"num-right":1039,"num-add":1107,"num-end":1035,
            "num-down":1040,"num-pgdn":1034,"num-ins":1045,"num-del":1046},Fi={"caps-lock":512,"num-lock":1024,"scroll-lock":2048},X={1027:1};X[V["1"]]=2;X[V["!"]]=10754;X[V["2"]]=3;X[V["@"]]=10755;X[V["3"]]=4;X[V["#"]]=10756;X[V["4"]]=5;X[V.$]=10757;X[V["5"]]=6;X[V["%"]]=10758;X[V["6"]]=7;X[V["^"]]=10759;X[V["7"]]=8;X[V["&"]]=10760;X[V["8"]]=9;X[V["*"]]=10761;X[V["9"]]=10;X[V["("]]=10762;X[V["0"]]=11;X[V[")"]]=10763;X[V["-"]]=12;X[V._]=10764;X[V["="]]=13;X[V["+"]]=10765;X[1008]=14;X[1009]=15;X[113]=16;
            X[81]=10768;X[119]=17;X[87]=10769;X[101]=18;X[69]=10770;X[114]=19;X[82]=10771;X[116]=20;X[84]=10772;X[121]=21;X[89]=10773;X[117]=22;X[85]=10774;X[105]=23;X[73]=10775;X[111]=24;X[79]=10776;X[112]=25;X[80]=10777;X[V["["]]=26;X[V["{"]]=10778;X[V["]"]]=27;X[V["}"]]=10779;X[13]=28;X[1017]=29;X[97]=30;X[65]=10782;X[115]=31;X[83]=10783;X[100]=32;X[68]=10784;X[102]=33;X[70]=10785;X[103]=34;X[71]=10786;X[104]=35;X[72]=10787;X[106]=36;X[74]=10788;X[107]=37;X[75]=10789;X[108]=38;X[76]=10790;X[V[";"]]=39;
            X[V[":"]]=10791;X[V["'"]]=40;X[V['"']]=10792;X[V["`"]]=41;X[V["~"]]=10793;X[1016]=42;X[V["\\"]]=43;X[V["|"]]=10795;X[122]=44;X[90]=10796;X[120]=45;X[88]=10797;X[99]=46;X[67]=10798;X[118]=47;X[86]=10799;X[98]=48;X[66]=10800;X[110]=49;X[78]=10801;X[109]=50;X[77]=10802;X[V[","]]=51;X[V["<"]]=10803;X[V["."]]=52;X[V[">"]]=10804;X[V["/"]]=53;X[V["?"]]=10805;X[3016]=54;X[1044]=55;X[1018]=56;X[V[" "]]=57;X[1020]=58;X[1112]=59;X[1113]=60;X[1114]=61;X[1115]=62;X[1116]=63;X[1117]=64;X[1118]=65;X[1119]=66;
            X[1120]=67;X[1121]=68;X[1144]=69;X[1145]=70;X[1036]=71;X[1038]=72;X[1033]=73;X[1109]=74;X[1037]=75;X[1101]=76;X[1039]=77;X[1107]=78;X[1035]=79;X[1040]=80;X[1034]=81;X[1045]=82;X[1046]=83;X[1122]=87;X[1123]=88;X[1091]=91;X[1093]=93;X[1224]=91;X[4003]=7470;X[4008]=7494;X[4046]=3677523;f=zi.prototype;
            f.Lb=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.qa[e])switch(b){case "kbd":return c.onkeydown=function(a){return Gi(d,a,!0)},c.onkeypress=function(a){a=a||window.event;a=a.which||a.keyCode;if(d.Om){var b=d.Mb.length?d.Mb[0].Pe:0;b&&(65<=b&&90>=b||97<=b&&122>=b)&&(65<=a&&90>=a||97<=a&&122>=a)&&b!=a&&(d.xk=!0,a=b)}(b=!X[a]||!!(d.Zb&128))||Hi(d,a,!0);return b},c.onkeyup=function(a){return Gi(d,a,!1)},!0;case "caps-lock":return this.qa[e]=c,c.onclick=function(){d.U&&d.U.Jd();Hi(d,1020,!0)},
            !0;case "num-lock":return this.qa[e]=c,c.onclick=function(){d.U&&d.U.Jd();Hi(d,1144,!0)},!0;case "scroll-lock":return this.qa[e]=c,c.onclick=function(){d.U&&d.U.Jd();Hi(d,1145,!0)},!0;default:var m=b.toUpperCase().replace(/-/g,"_");if(void 0!==Di[m]&&"button"==a)return this.qa[e]=c,c.onclick=function(a,b,c){return function(){a.U&&a.U.Jd();Ii(a,c,!0);Hi(a,c,!0)}}(this,m,Di[m]),!0;if(void 0!==Ei[b])return this.Gm++,this.qa[e]=c,a=function(a,b,c){return function(){Hi(a,c)}}(this,b,Ei[b]),b=function(a,
            b,c){return function(){Ji(a,c)}}(this,b,Ei[b]),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}return!1};function Ki(a,b,c){if(a.Gm){for(var d in Bi)if(b==Bi[d]){b=+d;(d=Ai[d])&&(b=d);break}for(var e in Ei)if((d=Ei[e]==b)||(d=b,97<=d&&122>=d&&(d-=32),d=Ei[e]==d),d){(a=a.qa["key-"+e])&&void 0!==c&&(a.style.color=c?"#ffffff":"#000000",a.style.backgroundColor=c?"#000000":"#ffffff");break}}}
            f.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;this.fa=gb(a,"ChipSet")};function ki(a,b){a.oc("keyboard reset",65792);a.Wb=[170];a.Og=!0;b&&a.fa&&mi(a.fa,a.Wb[0])}function gi(a,b,c){a.sk!==c&&(a.sk=a.wk=c)&&(a.Og=!0);a.gi!==b&&(a.gi=b)&&!a.wk&&ni(a,!0);a.gi&&a.wk&&(ki(a,!0),a.wk=!1)}function hi(a){var b=0;a.Wb.length&&a.Og&&(b=a.Wb[0],a.fa&&mi(a.fa,b))}function ni(a,b){0<a.Wb.length&&(a.Wb.shift(),(a.Og=b)&&a.Wb.length&&a.fa&&mi(a.fa,a.Wb[0]))}
            f.gc=function(a,b){return!b&&(this.reset(),a&&this.restore&&!this.restore(a))?!1:!0};f.fc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.ye();this.Zb=this.ud=0;this.Wb=[];this.Og=!0};f.save=function(){var a=new Zd(this);a.set(0,this.dm());return a.data()};f.restore=function(a){return this.ye(a[0])};f.ye=function(a){var b=0;void 0===a&&(a=[]);this.sk=this.Og=a[b++];this.gi=a[b];return!0};f.dm=function(){var a=0,b=[];b[a++]=this.sk;b[a]=this.gi;return b};
            function Ii(a,b,c,d){if(X[b]){var e=Math.floor(b/1E3)&2;if(b=Ci[b]||0){!e||b&85||(b>>=1);if(b&3584){if(!1===d)return!0;d=null}null==d?d=!((c?a.ud:a.Zb)&b):d||b&255&&(b=255);if(c){a.ud&=~b;d&&(a.ud|=b);c=b;var m,n;for(n in Fi)d="led-"+n,e=Fi[n],c&&c!=e||!(m=a.qa[d])||(m.style.backgroundColor=a.ud&e?"#00ff00":"#000000")}else a.Zb&=~b,d&&(a.Zb|=b);return!0}}return!1}
            function Hi(a,b,c){if(X[b]&&a.U&&a.U.ha.Qb){Ci[b]&&a.Mb.length&&0<a.Mb[0].Dd&&(a.Mb[0].Dd=0);for(var d,e=0;e<a.Mb.length;e++)if(d=a.Mb[e],d.Pe==b){if(!c||0<=d.Dd){e=-1;break}0<e&&(0<a.Mb[0].Dd&&(a.Mb[0].Dd=0),a.Mb.splice(e,1));break}0>e||(e==a.Mb.length&&(d={},d.Pe=b,d.Zb=a.Zb,Ki(a,b,!0),e++),0<e&&a.Mb.splice(0,0,d),d.Rg=!0,d.Dd=c?-1:Ci[b]?0:1,Li(a,d))}}
            function Ji(a,b,c){if(!X[b]||!(c||a.U&&a.U.ha.Qb))return!1;for(var d=!1,e=0;e<a.Mb.length;e++){var m=a.Mb[e];if(m.Pe==b||m.Pe==Bi[b]){a.Mb.splice(e,1);m.Rn&&clearTimeout(m.Rn);m.Rg&&!c&&Mi(a,m.Pe,!1);Ki(a,b,!1);d=!0;break}}!a.Mb.length&&a.xk&&(Ii(a,1020),a.xk=!1);return d}
            function Li(a,b){if(a.U&&a.U.ha.Qb){if(Mi(a,b.Pe,b.Rg),b.Dd){var c;if(0>b.Dd){if(!b.Rg){Ji(a,b.Pe);return}b.Rg=!1;c=a.Np}else c=1==b.Dd++?a.Op:a.Pp;b.Rn=setTimeout(function(a){return function(){Li(a,b)}}(a),c)}}else Ji(a,b.Pe,!0)}function Ni(a,b,c){var d=b;if(65<=b&&90>=b)!(a.Zb&515)==c&&(d=b+32);else if(97<=b&&122>=b)!!(a.Zb&515)==c&&(d=b-32);else if(!!(a.Zb&3)==c){if(a=Bi[b])d=a}else if(a=Ai[b])d=a;return d}f.sj=function(a){this.hi=a;a||(this.Zb&=-256)};
            function Gi(a,b,c){var d=!0,e=!1,m=!1,n=b.keyCode,p=Ni(a,n,!0);a.tk&&p==V["`"]&&(n=p=27);if(X[n+1E3])if(p+=1E3,2==b.location&&(p+=2E3),Ii(a,p,!1,c)){if(20==n||144==n||145==n)a.yo||(c=e=!0);if(!(c||91!=n&&93!=n))for(var v=0;v<a.Mb.length;v++){var w=a.Mb[v];w.Rg=!1;0<w.Dd&&(w.Dd=0)}}else 8==n&&8==(a.Zb&40)&&(p=4008),d=!1;else if(X[p]&&a.Zb&60&&(d=!1),!a.Om&&d&&c||a.Zb&192)m=!0;d||b.preventDefault();m||a.Um&&d||(c?Hi(a,p,e):Ji(a,p)||(b=Ni(a,n,!1),b!=p&&Ji(a,b)));return d}
            function Mi(a,b,c){Ii(a,b,!0,c);var d=X[b]||X[b+1E3];if(void 0!==d){14==d&&40==(a.Zb&40)&&(d=83);var e=[],m=d&255;e.push(m|(c?0:128));for(b=65<=b&&90>=b||97<=b&&122>=b;d>>>=8;){var n=0,p=d&255;224==m||225==m?e.push(m|(c?0:128)):(42==p?a.ud&3||a.ud&512&&b||(n=p):29==p?a.ud&12||(n=p):56==p?a.ud&48||(n=p):e.push(m|(c?0:128)),n&&(c?e.unshift(n):e.push(n|128)))}for(c=0;c<e.length;c++)d=a,m=e[c],d.Wb&&(20>d.Wb.length?(d.Wb.push(m),1==d.Wb.length&&d.fa&&mi(d.fa,m)):(20==d.Wb.length&&d.Wb.push(255),d.oc("scan code buffer overflow")))}}
            Ea(function(){for(var a=Xa(window.document,"pcjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new zi(d);Wa(d,c)}});
            function Y(a,b,c,d,e){Ia.call(this,"Video",a,Y);this.ma=a.model;this.qb=Oi[this.ma]||Pi;this.vd=a.memory||0;this.Nn=a.switches;this.jd=a.mode;if(void 0===this.jd||void 0===Qi[this.jd])this.jd=Ri;this.vi=a.charCols;this.Ql=a.charRows;if(void 0===this.vi||void 0===this.Ql)this.vi=Qi[this.jd][0],this.Ql=Qi[this.jd][1];this.xd=a.screenWidth;this.Sd=a.screenHeight;this.Ao=a.scale;this.wo=12<=Math.round(this.xd/this.vi);this.Co=a.touchScreen;this.fd=b;this.Uc=c;this.Sa=(this.Cr=d)||b||null;this.Ae=null;
            this.uo=a.autoLock;this.Va=this.Ub=0;this.he=[];this.Kd=Array(16);this.hi=!1;var m=this;this.Rm=ya("Gecko/");b=["","moz","webkit","ms"];if(this.rc=e)if(this.rc.Of=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.rc.Of){for(e=0;e<b.length;e++)if(c=b[e]+"fullscreenchange","on"+c in document){document.addEventListener(c,function(){Si(m,document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?
            !0:!1)},!1);break}for(e=0;e<b.length;e++)if(c=b[e]+"fullscreenerror","on"+c in document){document.addEventListener(c,function(){Si(m,null)},!1);break}}this.Sa&&(this.Sa.onfocus=function(){return m.sj(!0)},this.Sa.onblur=function(){return m.sj(!1)},this.Sa.mf=this.Sa.requestPointerLock||this.Sa.mozRequestPointerLock||this.Sa.webkitRequestPointerLock,this.Sa.Sn=this.Sa.exitPointerLock||this.Sa.mozExitPointerLock||this.Sa.webkitExitPointerLock,this.Sa.mf&&(e=function(){m.lh(document.pointerLockElement===
            m.Sa||document.mozPointerLockElement===m.Sa||document.webkitPointerLockElement===m.Sa)},"onpointerlockchange"in document?document.addEventListener("pointerlockchange",e,!1):"onmozpointerlockchange"in document?document.addEventListener("mozpointerlockchange",e,!1):"onwebkitpointerlockchange"in document&&document.addEventListener("webkitpointerlockchange",e,!1)));if(a=a.fontROM)"json"!=ha(a)&&(a=qa()+"/api/v1/dump?file="+a+"&format=bytes"),pa(a,!0,null,this,this.bq)}Qa(Y);
            var Pi=1,Oi={mda:1,cga:3,ega:5,vga:7},Ri=7,Ti={2:{Bi:15700,Ai:208,tj:85,uj:96},3:{Bi:18432,Ai:364,tj:85,uj:96},4:{Bi:21850,Ai:364,tj:85,uj:96},7:{Bi:16700,Ai:480,tj:85,uj:83}},Ui={6:[1,3,!0],7:[2,3,!0],8:[6,3,!0],9:[4,3,!0],10:[3,1,!0],11:[3,2,!0],0:[1,3,!1],1:[2,3,!1],2:[6,3,!1],3:[4,3,!1],4:[3,1,!1],5:[3,2,!1]},Qi=[,[40,25,1,0,3],,[80,25,1,0,3],[320,200,8,192],,[640,200,16,192]];Qi[Ri]=[80,25,1,0,1];Qi[13]=[320,200,16];Qi[14]=[640,200,16];Qi[15]=[640,350,16];Qi[16]=[640,350,16];
            Qi[17]=[640,480,16];Qi[18]=[640,480,16];Qi[19]=[320,200,16];Qi[0]=Qi[1];Qi[2]=Qi[3];Qi[5]=Qi[4];var Vi=Array(5);Vi[0]=[0,0,0,255];Vi[1]=[127,192,127,255];Vi[2]=[127,192,127,255];Vi[3]=[127,255,127,255];Vi[4]=[127,255,127,255];var Wi=[0,1,2,2,2,2,2,2,0,3,4,4,4,4,4,4],Xi=Array(16);Xi[0]=[0,0,0,255];Xi[1]=[0,0,170,255];Xi[2]=[0,170,0,255];Xi[3]=[0,170,170,255];Xi[4]=[170,0,0,255];Xi[5]=[170,0,170,255];Xi[6]=[170,85,0,255];Xi[7]=[170,170,170,255];Xi[8]=[85,85,85,255];Xi[9]=[85,85,255,255];
            Xi[10]=[85,255,85,255];Xi[11]=[85,255,255,255];Xi[12]=[255,85,85,255];Xi[13]=[255,85,255,255];Xi[14]=[255,255,85,255];Xi[15]=[255,255,255,255];var Yi=[2,4,6],Zi=[3,5,7],$i=[0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63],aj=[0,255,65280,65535,16711680,16711935,16776960,16777215,-16777216,-16776961,-16711936,-16711681,-65536,-65281,-256,-1],bj=[0];bj[128]=1;bj[32768]=2;bj[32896]=3;bj[8388608]=4;bj[8388736]=5;bj[8421376]=6;bj[8421504]=7;bj[-2147483648]=8;bj[-2147483520]=9;bj[-2147450880]=10;
            bj[-2147450752]=11;bj[-2139095040]=12;bj[-2139094912]=13;bj[-2139062272]=14;bj[-2139062144]=15;
            function cj(a,b,c,d){if(void 0!==b&&(!c||c.length)){this.video=a;var e=dj[b],m=a.kd||e[5];if(!c||6>c.length)c=[!1,0,null,null,0,Array(5>b?ej:fj)];this.qb=b;this.Va=e[2];this.Ub=e[3];this.vd=d||e[4];65536<=this.vd&&720896<=this.Va&&(this.Ub=Math.min(this.vd>>2,32768));this.vc=c[0];this.Nc=c[1];this.oh=c[2];this.ta=c[3];this.zc=c[4]&255;this.zj=c[4]>>8&255;this.Ab=c[5];this.Fk=ej;if(5<=b){this.Fk=fj;b=c[6];void 0===b&&(b=[!1,0,Array(20),0,3==m?0:1,0,0,Array(5),0,0,0,Array(9),0,[this.Va,this.Ub,this.vd],
            Array(this.vd>>2),5144,0,-1,0,-1,0,-1,0,0,0,0,1,255,0,0,0,Array(256)]);this.te=b[0];this.sf=b[1];this.Je=b[2];this.Yl=b[3];this.sh=b[4];this.Ej=b[5];this.lg=b[6];this.th=b[7];this.Fn=b[8];this.Gn=b[9];this.jg=b[10];this.ig=b[11];this.mb=b[12];d=b[13];"number"==typeof d&&(d=[this.Va,this.Ub,d]);this.Va=d[0];this.Ub=d[1];d=this.vd>>2;if((this.We=b[14])&&this.We.length<d){for(var e=this.We,n=0,p=Array(d),v=0;v<e.length-1;){for(var w=e[v++],G=e[v++];w--;)p[n]=G,n+=2;n==d&&(n=1)}this.We=p}(d=b[15])&&(d=
            d&8?d&-9:gj[d&65280]|gj[d&255]);this.Lj(d);this.Pl=b[16];this.fb=b[17];this.Cd=b[18];this.nb=b[19];this.pj=b[20];this.He=b[21];this.qf=b[22];this.Gk=b[23];this.Hk=b[24];this.jh=b[25];7==this.qb&&(this.Zl=b[26],this.Ul=b[27],this.Ed=b[28],this.Ac=b[29],this.Cj=b[30],this.qh=b[31])}m=Ti[m]||Ti[3];this.Ik=a.U.R.Bd/m.Bi|0;this.Sp=this.Ik*m.tj/100|0;this.rn=this.Ik*m.Ai|0;this.Up=this.rn*m.uj/100|0;this.tn=c[7]||0}}var ej=18,fj=25,gj=[,,1024,5120];gj[16]=1280;gj[512]=0;gj[1024]=32;gj[1536]=96;
            gj[2560]=160;gj[3584]=224;gj[768]=16;gj[4096]=1;gj[8192]=2;gj[24576]=98;gj[40960]=162;gj[57344]=226;var hj=[];hj[1024]=function(a){a+=this.offset;return(this.W.mb=this.ba[a])>>this.W.Pl&255};hj[5120]=function(a){a+=this.offset;var b=this.W.mb=this.ba[a&-2];return(a&1?b>>8:b)&255};hj[1280]=function(a){a+=this.offset;a=this.W.mb=this.ba[a];for(var b=this.W.Hk,c=this.W.Gk&b,d=0,e=128;e;)(a&b)==c&&(d|=e),c>>>=1,b>>>=1,e>>=1;return d};
            hj[0]=function(a,b){var c=a+this.offset,d;d=this.ba[c]&~this.W.fb|(b|b<<8|b<<16|b<<24)&this.W.fb;d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};hj[32]=function(a,b){var c=a+this.offset;b=b>>this.W.Cd|b<<8-this.W.Cd&255;var d;d=(b|b<<8|b<<16|b<<24)&this.W.He|this.W.qf;d=d&this.W.fb|this.ba[c]&~this.W.fb;d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};
            hj[96]=function(a,b){var c=a+this.offset;b=b>>this.W.Cd|b<<8-this.W.Cd&255;var d;d=(b|b<<8|b<<16|b<<24)&this.W.He|this.W.qf;d&=this.W.mb;d=d&this.W.fb|this.ba[c]&~this.W.fb;d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};hj[160]=function(a,b){var c=a+this.offset;b=b>>this.W.Cd|b<<8-this.W.Cd&255;var d;d=(b|b<<8|b<<16|b<<24)&this.W.He|this.W.qf;d|=this.W.mb;d=d&this.W.fb|this.ba[c]&~this.W.fb;d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};
            hj[224]=function(a,b){var c=a+this.offset;b=b>>this.W.Cd|b<<8-this.W.Cd&255;var d;d=(b|b<<8|b<<16|b<<24)&this.W.He|this.W.qf;d^=this.W.mb;d=d&this.W.fb|this.ba[c]&~this.W.fb;d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};hj[16]=function(a,b){a+=this.offset;var c,d=a&-2;c=this.W.fb&(d==a?16711935:-16711936);c=(b|b<<8|b<<16|b<<24)&c|this.ba[d]&~c;c=c&this.W.nb|this.W.mb&~this.W.nb;this.ba[d]!=c&&(this.ba[d]=c,this.Ka=!0)};
            hj[1]=function(a){a+=this.offset;var b=this.ba[a]&~this.W.fb|this.W.mb&this.W.fb;this.ba[a]!=b&&(this.ba[a]=b,this.Ka=!0)};hj[17]=function(a){a+=this.offset;var b=a&-2;a=this.W.fb&(b==a?16711935:-16711936);a=this.ba[b]&~a|this.W.mb&a;this.ba[b]!=a&&(this.ba[b]=a,this.Ka=!0)};hj[2]=function(a,b){var c=a+this.offset,d=aj[b&15],d=d&this.W.fb|this.ba[c]&~this.W.fb,d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};
            hj[98]=function(a,b){var c=a+this.offset,d=aj[b&15],d=d&this.W.mb,d=d&this.W.fb|this.ba[c]&~this.W.fb,d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};hj[162]=function(a,b){var c=a+this.offset,d=aj[b&15],d=d|this.W.mb,d=d&this.W.fb|this.ba[c]&~this.W.fb,d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};
            hj[226]=function(a,b){var c=a+this.offset,d=aj[b&15],d=d^this.W.mb,d=d&this.W.fb|this.ba[c]&~this.W.fb,d=d&this.W.nb|this.W.mb&~this.W.nb;this.ba[c]!=d&&(this.ba[c]=d,this.Ka=!0)};
            function ij(a){var b=[];if(void 0!==a.qb){b[0]=a.vc;b[1]=a.Nc;b[2]=a.oh;b[3]=a.ta;b[4]=a.zc|a.zj<<8;b[5]=a.Ab;if(5<=a.qb){var c=[];c[0]=a.te;c[1]=a.sf;c[2]=a.Je;c[3]=a.Yl;c[4]=a.sh;c[5]=a.Ej;c[6]=a.lg;c[7]=a.th;c[8]=a.Fn;c[9]=a.Gn;c[10]=a.jg;c[11]=a.ig;c[12]=a.mb;c[13]=[a.Va,a.Ub,a.vd];var d;a:if(d=a.We){var e=0,m=[];if(void 0!==d[0])for(var n=0;2>n;n++)for(var p=n;p<d.length;){for(var v=d[p],w=p+2;w<d.length&&d[w]===v;)w+=2;m[e++]=w-p>>1;m[e++]=v;p=w}if(m.length<d.length){d=m;break a}}c[14]=d;c[15]=
            a.Ek|8;c[16]=a.Pl;c[17]=a.fb;c[18]=a.Cd;c[19]=a.nb;c[20]=a.pj;c[21]=a.He;c[22]=a.qf;c[23]=a.Gk;c[24]=a.Hk;c[25]=a.jh;7==a.qb&&(c[26]=a.Zl,c[27]=a.Ul,c[28]=a.Ed,c[29]=a.Ac,c[30]=a.Cj,c[31]=a.qh);b[6]=c}b[7]=a.tn}return b}cj.prototype.cn=function(a){return[this.We,a-this.Va]};cj.prototype.Ak=function(){return this.Ih};
            cj.prototype.Lj=function(a){if(null!=a&&a!=this.Ek){var b=a&65280,c=hj[b];c||b&4096&&(c=hj[4096]);var b=a&247,d=hj[b];d||b&16&&(d=hj[16]);this.Ih||(this.Ih=Array(6));this.Ih[0]=c;this.Ih[3]=d;this.Ek=a}};var dj=[];dj[Pi]=["MDA",948,720896,4096,0,3];dj[3]=["CGA",980,753664,16384,0,2];dj[5]=["EGA",980,753664,16384,65536,4];dj[7]=["VGA",980,753664,16384,262144,7];f=Y.prototype;
            f.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;3!=Oi[this.ma]&&(Tb(b,this,jj),Vb(b,this,kj));Oi[this.ma]!=Pi&&(Tb(b,this,lj),Vb(b,this,mj));5<=this.qb&&(Tb(b,this,nj),Vb(b,this,oj));7==this.qb&&(Tb(b,this,pj),Vb(b,this,qj));if((this.Da=gb(a,"Keyboard"))&&this.fd){for(var e in this.qa)0<e.indexOf("lock")&&this.Da.Lb("led",e,this.qa[e]);this.Da.Lb(this.Cr?"textarea":"canvas","kbd",this.Sa)}this.Mh=9;(this.fa=gb(a,"ChipSet"))&&this.Nn&&5==this.qb&&(this.Mh=$g(this.Nn,this.Mh));this.Da&&this.Co&&
            rj(this)};f.Lb=function(a,b,c){var d=this;if(!this.qa[b])switch(this.qa[b]=c,b){case "fullScreen":return this.rc&&this.rc.Of?c.onclick=function(){d.Of()}:c.parentNode.removeChild(c),!0;case "lockPointer":return this.zr=c.textContent,this.Sa&&this.Sa.mf?c.onclick=function(){d.mf(!0)}:c.parentNode.removeChild(c),!0;case "refresh":return c.onclick=function(){wc(d,!0)},!0}return!1};f.Jd=function(){this.Sa&&this.Sa.focus()};
            f.Of=function(){var a=!1;if(this.rc){if(this.rc.Of){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.xd/this.Sd;b>c&&(a=Math.round(c/b*100)+"%")}this.Rm?(this.fd.style.width=a,this.fd.style.width=a,this.fd.style.display="block",this.fd.style.margin="auto"):(this.rc.style.width=a,this.rc.style.height="auto");this.rc.style.backgroundColor="black";this.rc.Of();a=!0}this.Jd()}return a};
            function Si(a,b){!b&&a.rc&&(a.Rm?a.fd.style.width=a.fd.style.height="":a.rc.style.width=a.rc.style.height="");a.oc("notifyFullScreen("+b+")",!0);a.Da&&(a.Da.tk=b)}f.mf=function(a){var b=!1;this.Sa&&(a?this.Sa.mf&&(this.Sa.mf(),this.Ae.lh(!0),b=!0):this.Sa.Sn&&(this.Sa.Sn(),this.Ae.lh(!1),b=!0),this.Jd());return b};f.lh=function(a){this.Ae&&(this.Ae.lh(a),this.Da&&(this.Da.tk=a));var b=this.qa.lockPointer;b&&(b.textContent=a?"Press Esc to Unlock Pointer":this.zr)};
            function rj(a){var b=a.Sa;b&&!a.Pg&&(b.addEventListener("touchstart",function(b){sj(a,b)},!1),b.addEventListener("touchmove",function(b){sj(a,b)},!0),b.addEventListener("touchend",function(){},!1),a.Pg=!0)}f.sj=function(a){this.hi=a;this.Da&&this.Da.sj(a)};
            function sj(a,b){a.hi&&b.preventDefault();var c=0,d=0,e=a.fd;do isNaN(e.offsetLeft)||(c+=e.offsetLeft,d+=e.offsetTop);while(e=e.offsetParent);var m=a.xd/a.fd.offsetWidth,e=a.Sd/a.fd.offsetHeight,n,p;b.targetTouches?(n=b.targetTouches[0].pageX,p=b.targetTouches[0].pageY):(n=b.pageX,p=b.pageY);c=(n-c)*m/(a.xd/3)|0;d=(p-d)*e/(a.Sd/3)|0;1!=d?d?Hi(a.Da,1040,!0):Hi(a.Da,1038,!0):1!=c&&(c?Hi(a.Da,1039,!0):Hi(a.Da,1037,!0))}
            f.gc=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};f.fc=function(a){return a&&this.save?this.save():!0};
            f.reset=function(){var a=!0,b=0;this.fa&&(b=rh(this.fa));this.ma||(this.qb=3==b?Pi:3);this.jd=3;switch(this.qb){case 7:b=7;break;case 5:var c=Ui[this.Mh];c&&(b=c[0]);b||(b=4);break;case Pi:b=3;this.jd=Ri;break;default:b=2}this.kd!==b&&(this.kd=b,a=!0);this.Ta=null;this.gd=this.ek=new cj(this,Pi);this.kc=this.Wh=new cj(this,3);5>this.qb?this.X=new cj:(this.X=new cj(this,this.qb,null,this.vd),tj(this));uj(this);this.De=null;this.af=this.Xc=-1;this.$e=0;vj(this,this.jd);if(this.Ta.Va&&a){a=this.Ta.Va+
            this.fk;for(b=this.Ta.Va;b<a;b+=2){var d=65536*Math.random()|0;4==this.kd||7==this.kd?(c=b>>1&255,d=d>>8&-129,d>>4==(d&15)&&(d^=15)):(c=d&255,d=(d&256?7:112)|8&d>>8);Pb(this.la,b,c|d<<8)}wc(this,!0)}};function tj(a){a.X.sh&1?(a.gd=a.ek,a.kc=a.X):(a.gd=a.X,a.kc=a.Wh)}f.save=function(){var a=new Zd(this);a.set(0,ij(this.ek));a.set(1,ij(this.Wh));a.set(2,[this.kd,this.jd,this.De]);a.set(3,ij(this.X));return a.data()};
            f.restore=function(a){var b=a[2];this.kd=b[0];this.jd=b[1];this.De=b[2];this.Ta=null;this.gd=this.ek=new cj(this,Pi,a[0]);this.kc=this.Wh=new cj(this,3,a[1]);this.X=new cj(this,this.qb,a[3],this.vd);this.X.vc&&tj(this);uj(this);if(!wj(this))return!1;xj(this);return!0};
            f.bq=function(a,b,c){if(c)this.wa("Unable to load font ROM image (error "+c+")");else{try{var d=eval("("+b+")");if(!d.length){ra("Empty font ROM image: "+a);return}if(1==d.length){ra(d[0]);return}if(8192==d.length)qi(this,d,[6144,0]);else{this.wa("Unrecognized font data length ("+d.length+")");return}}catch(e){this.wa("Font ROM data error: "+e.message);return}(this.Uc||this.Ra)&&Za(this)}};
            function yj(a,b){if(1==b)return a.Kd[0]=Xi[0],a.Kd[1]=Xi[7],a.Kd;if(2==b){var c=a.Ta.oh;if(a.Ta===a.X){var d=a.X.Je[0],c=d&7;d&16&&(c|=8);18!=a.X.Je[1]&&(c|=32)}a.Kd[0]=Xi[c&15];c=c&32?Zi:Yi;for(d=0;d<c.length;d++)a.Kd[d+1]=Xi[c[d]];return a.Kd}if(a.kc===a.Wh)return Xi;c=null!=a.X.Je[15]?a.X.Je:$i;for(d=0;d<a.Kd.length;d++){var e=c[d]||0;a.Kd[d]=[(e&4?170:0)|(e&32?85:0),(e&2?170:0)|(e&16?85:0),(e&1?170:0)|(e&8?85:0),255]}return a.Kd}function qi(a,b,c,d){a.Fh=b;a.Uj=c;a.ff=d}
            function uj(a){var b=!1;if(window&&a.Fh){var c=yj(a),d,e=a.ff?a.ff:8;zj(a,3,a.Uj[0],0,e,8,a.Fh,c)&&(b=!0);d=a.ff?0:2048;e=a.ff?a.ff:9;zj(a,1,a.Uj[1],d,e,14,a.Fh,Vi,Wi)&&(b=!0);a.ff&&zj(a,a.qb,a.Uj[1],0,a.ff,14,a.Fh,c)&&(b=!0)}return b}function zj(a,b,c,d,e,m,n,p,v){var w=!1;null!=c&&(Aj(a,b,c,d,e,m,n,p,v)&&(w=!0),a.wo&&Aj(a,b<<1,c,d,e,m,n,p,v)&&(w=!0));return w}
            function Aj(a,b,c,d,e,m,n,p,v){var w=!1,G=b&1?0:1,N=a.he[b];N||(N={sc:e<<G,tc:m<<G,Df:Array(p.length),sm:p.slice(),xg:v,Sj:Array(p.length)});for(v=0;v<p.length;v++){var L=p[v],U=N.Df[v]?N.sm[v]:[];if(L[0]!==U[0]||L[1]!==U[1]||L[2]!==U[2]){var w=N,U=v,W=G,za=c,ga=d,xa=e,Va=m,Rb=n,Lc=[0,0,0,0],Hd=window.document.createElement("canvas");Hd.width=w.sc<<4;Hd.height=w.tc<<4;for(var yh=Hd.getContext("2d"),pb=void 0,qc=void 0,Sb=void 0,Id=8>Va||!ga?Va:8,Se=yh.createImageData(w.sc,w.tc),pb=0;256>pb;pb++){for(Sb=
            0;Sb<Va;Sb++)for(var Ck=w.xg&&U&1&&Sb>=Va-2,Dk=Rb[Sb<Id?za+pb*Id+Sb:ga+pb*Id+Sb-Id],Te=0;Te<=W;Te++)for(qc=0;qc<xa;qc++){var zh=qc<<W,Ah=(Sb<<W)+Te,Bh=Ck||Dk&128>>(8<=qc&&192<=pb&&223>=pb?7:qc)?L:Lc;Bj(Se,zh,Ah,Bh);W&&Bj(Se,zh+1,Ah,Bh)}yh.putImageData(Se,(pb&15)*w.sc,(pb>>4)*w.tc)}w.Df[U]="#"+da(L[0],2)+da(L[1],2)+da(L[2],2);w.sm[U]=L;w.Sj[U]=Hd;w=!0}}a.he[b]=N;return w}function Cj(a){0<a.$e||0<=a.Xc?0>a.af&&(a.af=0):a.af=-1}
            function xj(a){if(a.Rb){for(var b=10;15>=b;b++)if(null==a.Ta.Ab[b])return;var c=a.Ta.Ab[10],b=c&31,d=a.Ta.Ab[11]&31,e=a.Ta.Ab[9]&31,m=!1;a.Ta===a.X&&(m=!0,7!=e||4!=b||d||(d=7));if(c&32||b>d&&!m||b>e)Dj(a);else{c=a.Ta.Ab[15]+((a.Ta.Ab[14]&63)<<8);a.Xc!=c&&(Dj(a),a.Xc=c);d=d-b+1;if(a.Wn!=b||a.Lm!=d)a.Wn=b,a.Lm=d;a.re=e+1;Cj(a)}}}
            function Dj(a){if(0<=a.Xc){if(void 0!==a.Dc){var b=a.Dc[a.Xc];if(b&131072){var b=b&-131073,c=a.Xc%a.eb,d=a.Xc/a.eb|0;a.Rb&&a.he[a.Rb]&&(a.Nf&&Ej(a,c,d,b,a.Nf),Ej(a,c,d,b));a.Dc[a.Xc]=b}}a.Xc=-1}}
            function Fj(a){var b;a=a.Ta;var c=a.ig[5];if(null!=c){b=1024;var d=0,e=a.ig[3]&31;switch(c&3){case 0:if(e){d=32;switch(e&24){case 8:d=96;break;case 16:d=160;break;case 24:d=224}a.Cd=e&7}break;case 1:d=1;break;case 2:switch(e&24){default:d=2;break;case 8:d=98;break;case 16:d=162;break;case 24:d=226}}c&8&&(b=1280);a=a.th[4];null==a||a&4||(b|=4096,d|=16);b|=d}return b}f.md=function(a){var b=this.Ta;b&&null!=a&&a!=b.Ek&&(b.Lj(a),this.la.Lj(b.Va,b.Ub,b.Ak()))};
            function wj(a,b){var c,d=a.De,e=a.Ta;if(e)if(e.qb==Pi)d=Ri;else if(5<=e.qb){var d=null,m=e.vd>>2,n=32768<m?32768:m,p=e.ig[6];if(null!=p){switch(p&12){case 0:e.Va=655360;e.Ub=m;d=255;break;case 4:e.Va=655360;e.Ub=m;d=3==a.kd?15:16;break;case 8:e.Va=720896;e.Ub=n;d=Ri;break;case 12:e.Va=753664,e.Ub=n,d=3==a.kd?2:3}c=e.th[1]&8;m=e.Ab[6];m|=e.Ab[7]&1?256:0;7==e.qb&&(m|=e.Ab[7]&32?512:0);255!=d&&(p&1?753664==e.Va?d=c?7-d:6:500>m?350>m&&(d=c?13:14):d=3==a.kd?17:18:c&&(d-=2));c=Fj(a)}}else e.Nc&8&&(e.Nc&
            2?(d=e.Nc&16?6:5,e.Nc&4||--d):(d=e.Nc&1?3:1,e.Nc&4&&--d));else a.De=null,null==d&&(d=a.jd);if(!vj(a,d,b))return!1;a.md(c);return!0}
            function vj(a,b,c){if(null!=b&&(b!=a.De||c)){a.ao=0;a.De=b;b=a.Ta||(b==Ri?a.gd:a.kc);if(b!=a.Ta||b.Va!=a.Va||b.Ub!=a.Ub){Dj(a);if(a.Va){if(!Nb(a.la,a.Va,a.Ub))return!1;a.Ta&&(a.Ta.vc=!1)}a.Ta=b;b.vc=!0;a.Va=b.Va;a.Ub=b.Ub;if(!Jb(a.la,b.Va,b.Ub,3,b===a.X?b:null))return!1}a.Rb=0;a.eb=a.vi;a.nc=a.Ql;a.wi=a.eb;a.ti=Qi[Ri][2];a.Jg=0;if(b=Qi[a.De])a.eb=b[0],a.nc=b[1],a.ti=b[2],a.Jg=b[3]||0,a.Rb=b[4],4!=a.kd&&7!=a.kd||a.Ta!==a.X||3!=a.Rb||(7==a.X.Ab[9]?a.nc=43:a.Rb=a.qb);a.on=a.eb*a.nc|0;a.si=a.on/a.ti|
            0;a.fk=(a.si<<1)+a.Jg|0;a.Hm=a.Jg?a.fk+a.Jg>>1:0;13<=a.De&&(a.si<<=1);if(a.he.length){a.Rd=a.xd/a.eb|0;a.Td=a.Sd/a.nc|0;if(a.Rb){b=a.he[a.Rb];var d=a.he[a.Rb<<1];a.Ao&&80==a.eb?d&&a.Rd>=3*d.sc>>2&&(a.Rb<<=1,b=d):(d&&a.Rd>=d.sc&&(a.Rb<<=1,b=d),b&&(a.Rd=b.sc,a.Td=b.tc));a.Mg=a.Ng=0;b&&(a.Mg=a.eb*b.sc,a.Ng=a.nc*b.tc)}else a.Rd=a.Td=1,a.Mg=a.eb,a.Ng=a.nc;a.pi=a.Uc.createImageData(a.Mg,a.Ng);a.Lf=window.document.createElement("canvas");a.Lf.width=a.Mg;a.Lf.height=a.Ng;a.Nf=a.Lf.getContext("2d");a.hm=a.im=
            0;a.lk=a.xd;a.mk=a.Sd;b=a.xd-a.eb*a.Rd;d=a.Sd-a.nc*a.Td;0<b&&(a.hm=b>>1,a.lk-=b);0<d&&(a.im=d>>1,a.mk-=d);if(b||d)a.Uc.fillStyle=a.fd.style.backgroundColor,a.Uc.fillRect(0,0,a.xd,a.Sd)}!1!==c?wc(a,!0):Gj(a,!0)}return!0}function Bj(a,b,c,d){b=(b+c*a.width)*d.length;a.data[b]=d[0];a.data[b+1]=d[1];a.data[b+2]=d[2];a.data[b+3]=d[3]}function Gj(a,b){a.$e=-1;a.jf=!1;if(b){var c=a.si;if(void 0===a.Dc||a.Dc.length!=c){a.Dc=Array(c);for(var d=0;d<c;d++)a.Dc[d]=-1}}}
            function Ej(a,b,c,d,e){var m=d&255,n=d>>8;d=n&15;var p=a.he[a.Rb];p.xg&&(d=p.xg[d]);var v=n>>4&15;p.xg&&(v=p.xg[v]);e?(b*=p.sc,c*=p.tc,e.fillStyle=p.Df[v],e.fillRect(b,c,p.sc,p.tc)):(b=b*a.Rd+a.hm,c=c*a.Td+a.im,a.Uc.fillStyle=p.Df[v],a.Uc.fillRect(b,c,a.Rd,a.Td));n&256&&(v=(m&15)*p.sc,m=(m>>4)*p.tc,e?e.drawImage(p.Sj[d],v,m,p.sc,p.tc,b,c,p.sc,p.tc):a.Uc.drawImage(p.Sj[d],v,m,p.sc,p.tc,b,c,a.Rd,a.Td));n&512&&(m=a.Wn,n=a.Lm,e?(a.re&&a.re!==p.tc&&(m=m*p.tc/a.re|0,n=n*p.tc/a.re|0),e.fillStyle=p.Df[d],
            e.fillRect(b,c+m,p.sc,n)):(a.re&&a.re!==a.Td&&(m=m*a.Td/a.re|0,n=n*a.Td/a.re|0),a.Uc.fillStyle=p.Df[d],a.Uc.fillRect(b,c+m,a.Rd,n)))}
            function wc(a,b){if(a.ha.dc){var c=!1,d=a.Ta;d&&(d!==a.X?d.Nc&8&&(c=!0):d.sf&32&&(c=!0));if(c||b){if(b)Gj(a,!0);else if(void 0===a.Dc)return;var e=!1;!(b||++a.ao&15)&&0<=a.af&&(a.af++,e=!0);var m=0,n=a.on,c=d.Va,p=c+d.Ub;Hj(a,d)&8&&(d.jh=(d.Ab[12]<<8)+d.Ab[13]|0);var v=d.jh;a.Rb&&(v<<=1);c+=v;v=a.fk;5<=a.qb&&d.Ab[19]&&(a.wi=d.Ab[19]<<(a.Rb?1:4),v=((a.wi*(a.nc-1)+a.eb)/a.ti<<1)+a.Jg|0);c+v>p&&(v=p-c,0>v&&(v=0));p=c+v;if(d=!b){for(var d=a.la,w=!0,G=c>>>d.Aa;0<v&&G<d.ka.length;)d.ka[G].Ka&&(d.ka[G].Ka=
            w=!1,d.ka[G].Pm=!0),v-=d.ob,G++;d=w}if(d){if(!e)return;if(!a.$e){if(0>a.Xc)return;m=a.Xc;n=m+1}}if(a.Rb){if(a.he[a.Rb]){e=0;d=a.$e=0;v=1048575;a.Ta.Nc&32&&(d=32768,v&=~d,a.af&2||(v&=-65537));for(c+=m<<1;c<p&&m<n;)w=Ob(a.la,c),w|=65536,w&d&&(a.$e++,w&=v),m==a.Xc&&(w|=a.af&1?131072:0),a.jf&&w===a.Dc[m]||(Ej(a,m%a.eb,m/a.eb|0,w,a.Nf),a.Dc[m]=w,e++),c+=2,m++;a.jf=!0;e&&a.Nf&&a.Uc.drawImage(a.Lf,0,0,a.Mg,a.Ng,a.hm,a.im,a.lk,a.mk);Cj(a)}}else if(a.Hm){for(var n=p,N,m=c,p=a.$e=0,e=a.ti,d=16==e?65536:196608,
            v=16==e?1:2,w=yj(a,v),L=G=0,U=a.eb,W=0,za=a.nc,ga=0;m<n;){N=Ob(a.la,m);if(a.jf&&N===a.Dc[p])G+=e;else{a.Dc[p]=N;N=N>>8|(N&255)<<8;var xa=d,Va=16;G<U&&(U=G);for(var Rb=0;Rb<e;Rb++){var Lc=(N&(xa>>=v))>>(Va-=v);Bj(a.pi,G++,L,w[Lc])}G>W&&(W=G);L<za&&(za=L);L>=ga&&(ga=L+1)}m+=2;p++;if(G>=a.eb){G=0;L+=2;if(L>a.nc)break;L==a.nc&&(L=1,m=c+a.Hm)}}a.jf=!0;U<a.eb&&(a.Nf.putImageData(a.pi,0,0,U,za,W-U,ga-za),a.Uc.drawImage(a.Lf,0,0,a.eb,a.nc,0,0,a.xd,a.Sd))}else{n=p;m=a.$e=0;p=yj(a);e=a.Ta.We;v=d=0;w=a.eb;G=
            0;L=a.nc;U=0;W=a.Ta.Je[19]&15;for(za=a.wi>a.eb?a.wi-a.eb-W>>3:0;c<n;){ga=c++-a.Va;ga=e[ga];xa=8;W?d?(N=a.eb-d,xa>N&&(xa=N)):(ga<<=W,xa-=W,a.jf=!1):(a.jf&&ga===a.Dc[m]?(d+=xa,xa=0):a.Dc[m]=ga,m++);if(xa){d<w&&(w=d);for(N=0;N<xa;N++)Va=bj[ga&-2139062144]||0,Bj(a.pi,d++,v,p[Va]),ga<<=1;d>G&&(G=d);v<L&&(L=v);v>=U&&(U=v+1)}if(d>=a.eb){d=0;if(++v>a.nc)break;c+=za}}W||(a.jf=!0);w<a.eb&&(a.Nf.putImageData(a.pi,0,0,w,L,G-w,U-L),a.Uc.drawImage(a.Lf,0,0,a.eb,a.nc,0,0,a.xd,a.Sd))}}}}
            function Hj(a,b){var c=0,d=Dc(a.U)-b.tn;0>d&&(d=0);d%b.Ik>b.Sp&&(c|=1);d%b.rn>b.Up&&(c|=9);return c}f.mp=function(){var a=this.gd,b;a.vc&&(b=a.zc);return b};f.Nq=function(a,b){var c=this.gd;c.zj=c.zc;c.zc=b&31};f.lp=function(){return Ij(this.gd)};f.Mq=function(a,b){Jj(this,this.gd,b)};f.np=function(){return this.gd.Nc};f.Oq=function(a,b){this.gd.Nc=b;wj(this,!1)};f.op=function(){return Kj(this,this.gd)};f.An=function(a,b){this.X.Ej=this.X.Ej&-4|b&3};
            f.hn=function(){var a=this.X.te?this.X.Je[this.X.sf&31]:this.X.sf;this.X.te=!this.X.te;return a};f.zn=function(a,b){var c=this.X.sf&32;if(this.X.te){var d=this.X.sf&31;if(16<=d||!c)this.X.Je[d]=b;this.X.te=!1}else this.X.sf=b,this.X.te=!0,b&32&&!c&&uj(this)&&wc(this,!0),this.X.jh=(this.X.Ab[12]<<8)+this.X.Ab[13]|0};
            f.yp=function(){var a=0;if(5==this.qb)a=3-((this.X.sh&12)>>2),a=(this.Mh&1<<a)<<4-a;else{var b=this.X.qh[0];45!=(b&63)&&2880!=(b&4032)&&184320!=(b&258048)&&(a|=16)}a|=this.X.Yl&-17;return this.X.Yl=a};f.Pq=function(a,b){this.X.sh=b;tj(this)};f.zp=function(){return this.X.Zl};f.Zq=function(a,b){this.X.Zl=b};f.xp=function(){return this.X.lg};f.Xq=function(a,b){this.X.lg=b};f.wp=function(){return this.X.th[this.X.lg]};
            f.Wq=function(a,b){this.X.th[this.X.lg]=b;switch(this.X.lg){case 2:this.X.fb=aj[b&15];break;case 4:this.md(Fj(this))}};f.$o=function(){return this.X.Ul};f.zq=function(a,b){this.X.Ul=b};f.ap=function(){return this.X.Cj};f.Aq=function(a,b){this.X.Ed=b;this.X.Cj=3;this.X.Ac=0};f.Bq=function(a,b){this.X.Ed=b;this.X.Cj=0;this.X.Ac=0};f.Zo=function(){var a=this.X.qh[this.X.Ed]>>this.X.Ac&63;this.X.Ac+=6;12<this.X.Ac&&(this.X.Ac=0,this.X.Ed=this.X.Ed+1&255);return a};
            f.yq=function(a,b){this.X.qh[this.X.Ed]=this.X.qh[this.X.Ed]&~(63<<this.X.Ac)|(b&63)<<this.X.Ac;this.X.Ac+=6;12<this.X.Ac&&(this.X.Ac=0,this.X.Ed=this.X.Ed+1&255)};f.Ap=function(){return this.X.Ej};f.Iq=function(a,b){this.X.Gn=b};f.Bp=function(){return this.X.sh};f.Hq=function(a,b){this.X.Fn=b};f.fp=function(){return this.X.jg};f.Gq=function(a,b){this.X.jg=b};f.ep=function(){return this.X.ig[this.X.jg]};
            f.Fq=function(a,b){this.X.ig[this.X.jg]=b;switch(this.X.jg){case 0:this.X.pj=aj[b&15];this.X.qf=this.X.pj&~this.X.He;break;case 1:this.X.He=~aj[b&15];this.X.qf=this.X.pj&~this.X.He;break;case 2:this.X.Gk=aj[b&15]&-2139062144;break;case 3:case 5:this.md(Fj(this));break;case 4:this.X.Pl=(b&3)<<3;break;case 6:wj(this,!1);break;case 7:this.X.Hk=aj[b&15]&-2139062144;break;case 8:this.X.nb=b|b<<8|b<<16|b<<24}};f.Uo=function(){var a=this.kc,b;a.vc&&(b=a.zc);return b};
            f.sq=function(a,b){var c=this.kc;c.zj=c.zc;c.zc=b&31};f.To=function(){return Ij(this.kc)};f.rq=function(a,b){Jj(this,this.kc,b)};f.Vo=function(){return this.kc.Nc};f.tq=function(a,b){this.kc.Nc=b;wj(this,!1)};f.So=function(){return this.kc.oh};f.qq=function(a,b){this.kc.oh!==b&&(this.kc.oh=b,Gj(this))};f.Wo=function(){return Kj(this,this.kc)};function Ij(a){var b;a.vc&&a.zc<a.Fk&&(b=a.Ab[a.zc]);return b}
            function Jj(a,b,c){b.zc<b.Fk&&(b.Ab[b.zc]=c,(12==b.zc||13==b.zc)&&Hj(a,b)&1&&(b.jh=(b.Ab[12]<<8)+b.Ab[13]|0),9==b.zc&&8!=b.zj&&wj(a,!0),xj(a))}function Kj(a,b){var c=Hj(a,b);b===a.X?(c|=b.ta&48^48,b.te=!1):c=(b.ta^=9)|240;return b.ta=c}
            var jj={948:Y.prototype.mp,949:Y.prototype.lp,952:Y.prototype.np,954:Y.prototype.op},kj={948:Y.prototype.Nq,949:Y.prototype.Mq,952:Y.prototype.Oq},lj={980:Y.prototype.Uo,981:Y.prototype.To,984:Y.prototype.Vo,985:Y.prototype.So,986:Y.prototype.Wo},mj={980:Y.prototype.sq,981:Y.prototype.rq,984:Y.prototype.tq,985:Y.prototype.qq},nj={960:Y.prototype.hn,961:Y.prototype.hn,962:Y.prototype.yp,964:Y.prototype.xp,965:Y.prototype.wp,974:Y.prototype.fp,975:Y.prototype.ep},oj={954:Y.prototype.An,960:Y.prototype.zn,
            961:Y.prototype.zn,962:Y.prototype.Pq,964:Y.prototype.Xq,965:Y.prototype.Wq,970:Y.prototype.Iq,972:Y.prototype.Hq,974:Y.prototype.Gq,975:Y.prototype.Fq,986:Y.prototype.An},pj={963:Y.prototype.zp,966:Y.prototype.$o,967:Y.prototype.ap,969:Y.prototype.Zo,970:Y.prototype.Ap,972:Y.prototype.Bp},qj={963:Y.prototype.Zq,966:Y.prototype.zq,967:Y.prototype.Aq,968:Y.prototype.Bq,969:Y.prototype.yq};
            Ea(function(){for(var a=Xa(window.document,"pcjs","video"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),e=window.document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=
            function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());c.appendChild(e);var m=window.document.createElement("textarea");ya("iOS")&&(m.setAttribute("autocapitalize","off"),m.setAttribute("autocorrect","off"));c.appendChild(m);var n=e.getContext("2d"),d=new Y(d,e,n,m,c);Wa(d,c)}});
            function Lj(a){this.en=a.adapter;switch(this.en){case 1:this.Sl=1016;this.gh=4;break;case 2:this.Sl=760;this.gh=3;break;default:ra("Unrecognized serial adapter #"+this.en);return}this.pe=null;Ia.call(this,"SerialPort",a,Lj);var b=a.binding,c;a=Mj;b&&(void 0===c&&(c="Panel"),(c=Ta(c,this.id))&&(b=c.qa[b])&&this.Lb(null,a,b))}Qa(Lj);var Mj="buffer";f=Lj.prototype;f.wm=function(a,b){return a==this.Vg?(this.Ae=b,this):null};
            f.Lb=function(a,b,c){var d=this;switch(b){case Mj:return this.qa[b]=this.pe=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;8===b&&(a.preventDefault&&a.preventDefault(),Nj(d,[b]))},c.onkeypress=function(a){a=a||window.event;Nj(d,[a.which||a.keyCode])},!0}return!1};f.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;this.fa=gb(a,"ChipSet");Tb(b,this,Oj,this.Sl);Vb(b,this,Pj,this.Sl);Za(this)};f.gc=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
            f.fc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.ye()};f.save=function(){var a=new Zd(this),b=0,c=[];c[b++]=this.bk;c[b++]=this.Cm;c[b++]=this.zf;c[b++]=this.Nh;c[b++]=this.ke;c[b++]=this.Ye;c[b++]=this.td;c[b++]=this.Rc;c[b++]=this.zm;c[b]=this.Ag;a.set(0,c);return a.data()};f.restore=function(a){return this.ye(a[0])};
            f.ye=function(a){var b=0;void 0===a&&(a=[0,0,384,0,1,0,0,96,48,[]]);this.bk=a[b++];this.Cm=a[b++];this.zf=a[b++];this.Nh=a[b++];this.ke=a[b++];this.Ye=a[b++];this.td=a[b++];this.Rc=a[b++];this.zm=a[b++];this.Ag=a[b];return!0};function Nj(a,b){a.Ag=a.Ag.concat(b);Qj(a)}function Qj(a){0<a.Ag.length&&!(a.Rc&1)&&(a.bk=a.Ag.shift(),a.Rc|=1);var b=-1;a.Rc&1&&a.Nh&1&&(b=4);0<=b?(a.ke&=-8,a.ke|=b,a.fa&&a.gh&&Zh(a.fa,a.gh,100)):(a.ke|=1,a.fa&&a.gh&&$h(a.fa,a.gh))}
            f.vp=function(){var a=this.Ye&128?this.zf&255:this.bk;this.Rc&=-2;Qj(this);return a};f.gp=function(){return this.Ye&128?this.zf>>8:this.Nh};f.hp=function(){return this.ke};f.ip=function(){return this.Ye};f.kp=function(){return this.td};f.jp=function(){return this.Rc};f.pp=function(){return this.zm};
            f.Yq=function(a,b){if(this.Ye&128)this.zf=this.zf&-256|b;else{this.Cm=b;this.Rc&=-97;var c;this.pe?(13!=b&&(8==b?this.pe.value=this.pe.value.slice(0,-1):(this.pe.value+=String.fromCharCode(b),this.pe.scrollTop=this.pe.scrollHeight)),c=!0):c=!1;c&&(this.Rc|=96)}};f.Jq=function(a,b){this.Ye&128?this.zf=this.zf&255|b<<8:this.Nh=b};f.Kq=function(a,b){this.Ye=b};
            f.Lq=function(a,b){var c=this.td;this.td=b;if(this.Ae&&(c^b)&3){var c=this.Ae,d=this.td,e=3==(d&3);if(e){if(!c.vc){var m=!1;c.td&2||(c.reset(),c.oc("serial mouse reset"),m=!0);c.td&1||(c.oc("serial mouse ID requested"),m=!0);m&&(Nj(c.Kg,[77,77]),c.oc("serial mouse ID sent"));Rj(c);c.setActive(e)}}else c.vc&&(c.oc("serial mouse inactive"),Sj(c),c.setActive(e));c.td=d}};
            var Oj={0:Lj.prototype.vp,1:Lj.prototype.gp,2:Lj.prototype.hp,3:Lj.prototype.ip,4:Lj.prototype.kp,5:Lj.prototype.jp,6:Lj.prototype.pp},Pj={0:Lj.prototype.Yq,1:Lj.prototype.Jq,3:Lj.prototype.Kq,4:Lj.prototype.Lq};Ea(function(){for(var a=Xa(window.document,"pcjs","serial"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new Lj(d);Wa(d,c)}});function Tj(a){Ia.call(this,"Mouse",a,Tj);if(this.Bk=a.serial)this.$l="SerialPort";this.setActive(!1);this.Pg=this.ii=!1;this.ed=[];this.Ef=[];Za(this)}Qa(Tj);f=Tj.prototype;
            f.Lc=function(a,b,c,d){this.za=a;this.la=b;this.U=c;this.Ra=d;for(b=null;b=gb(a,"Video",b);)this.ed.push(b)};f.setActive=function(a){this.vc=a};
            f.gc=function(a,b){if(!b){if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;if(this.$l&&!this.Kg){for(var c=null;(c=gb(this.za,this.$l,c))&&(!c.wm||!(this.Kg=c.wm(this.Bk,this))););if(this.Kg)for(this.Ef=[],c=0;c<this.ed.length;c++){var d;d=this.ed[c];d.Ae=this;(d=d.Sa)&&this.Ef.push(d)}else ra(this.id+": "+this.$l+" "+this.Bk+" unavailable")}this.vc?Rj(this):Sj(this)}return!0};f.fc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.ye()};
            f.save=function(){var a=new Zd(this);a.set(0,this.dm());return a.data()};f.restore=function(a){return this.ye(a[0])};f.ye=function(a){var b=0;void 0===a&&(a=[!1,-1,-1,0,0,!1,!1,0]);this.setActive(a[b++]);this.ee=a[b++];this.fe=a[b++];this.Af=a[b++];this.Bf=a[b++];this.di=a[b++];this.ei=a[b++];this.td=a[b];return!0};f.dm=function(){var a=0,b=[];b[a++]=this.vc;b[a++]=this.ee;b[a++]=this.fe;b[a++]=this.Af;b[a++]=this.Bf;b[a++]=this.di;b[a++]=this.ei;b[a]=this.td;return b};f.lh=function(a){this.ii=a};
            function Rj(a){if(!a.Pg)for(var b=0;b<a.Ef.length;b++)Uj(a,a.Ef[b])&&(a.Pg=!0)}function Sj(a){if(a.Pg)for(var b=0;b<a.Ef.length;b++){var c=a.Ef[b];c&&(c.style.cursor="auto")}}function Uj(a,b){return b?(b.addEventListener("mousemove",function(b){a.kn(b)},!1),b.addEventListener("mousedown",function(b){a.ik(b.button,!0)},!1),b.addEventListener("mouseup",function(b){a.ik(b.button,!1)},!1),b.style.cursor="none",!0):!1}
            f.kn=function(a){if(this.vc&&this.U&&this.U.ha.Qb){if(0>this.ee||0>this.fe)this.ee=a.clientX,this.fe=a.clientY;this.ii?(this.Af=a.movementX||a.mozMovementX||a.webkitMovementX||0,this.Bf=a.movementY||a.mozMovementY||a.webkitMovementY||0):(this.Af=a.clientX-this.ee,this.Bf=a.clientY-this.fe);(this.Af||this.Bf)&&Vj(this);this.ee=a.clientX;this.fe=a.clientY}};
            f.ik=function(a,b){if(this.vc&&this.U&&this.U.ha.Qb){var c;!(c=!1!==this.ii)&&(c=this.ed.length)&&(c=this.ed[0],c=c.uo?c.mf(!0):!1);c||(this.ii=null);switch(a){case 0:this.di!=b&&(this.di=b,Vj(this));break;case 2:this.ei!=b&&(this.ei=b,Vj(this))}}};function Vj(a){Nj(a.Kg,[64|(a.di?32:0)|(a.ei?16:0)|(a.Bf&192)>>4|(a.Af&192)>>6,a.Af&63,a.Bf&63]);a.Af=a.Bf=0}Ea(function(){for(var a=Xa(window.document,"pcjs","mouse"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new Tj(d);Wa(d,c)}});
            function Wj(a,b,c){Ia.call(this,"Disk",{id:a.gn+".disk"+ ++Xj},Wj);this.W=a;this.za=a.za;this.Ra=a.Ra;this.Oa=b;this.Gd=b.name;this.Tf=b.Tf;this.ji=this.Ud=!1;this.create(c,b.rb,b.sb,b.yb,b.ib);this.Ue=[];this.Bh=[];this.ce=null;this.mn=0;this.yk=!1;Za(this)}var Xj=0;Qa(Wj);f=Wj.prototype;f.Lc=function(a,b,c,d){this.Ra=d};f.gc=function(a,b){b||!this.ji||this.Ud||(Za(this,!1),this.load(this.Gd,this.uf,null,this.ro,this));return!0};f.ro=function(){Za(this,!0)};
            f.fc=function(a,b){if(this.Ud){var c,d=0;if(this.yk&&!sa("Disk writes are still in progress, shut down anyway?"))return!1;for(;c=Yj(this,!1);)if(d=c[0]){this.W.wa('Unable to save "'+this.Gd+'" (error '+d+")");break}b&&this.Ud&&(c="action=close&volume="+this.uf,c+="&machine="+this.W.Vf(),c+="&user="+this.W.ve(),pa(qa()+"/api/v1/disk?"+c,!0),this.Ud=!1);!d&&a&&this.W.wa(this.Gd+" saved")}return!0};
            f.create=function(a,b,c,d,e){this.mode=a;this.rb=b;this.sb=c;this.yb=d;this.ib=e;this.Ua=[];if("preload"!=this.mode){a=Array(this.rb);for(b=0;b<a.length;b++){c=Array(this.sb);for(d=0;d<c.length;d++){e=Array(this.yb);for(var m=1;m<=e.length;m++)e[m-1]=Zj(null,b,d,m,this.ib,"local"==this.mode?0:null);c[d]=e}a[b]=c}this.Ua=a}this.Pf=null};
            f.load=function(a,b,c,d,e){var m=b;if(!this.lf)if(this.Gd=a,this.uf=b,this.lf=d,this.lo=e||this.W,c){var n=this,p=new FileReader;p.onload=function(){var a=p.result,b,c=a?a.byteLength:0,d=ba[c];if(d){n.rb=d[0];n.sb=d[1];n.yb=d[2];n.ib=512;b=n.ib>>2;var e=d=0,a=new DataView(a,0,c);n.Ua=Array(n.rb);for(c=0;c<n.Ua.length;c++)for(var m=n.Ua[c]=Array(n.sb),W=0;W<m.length;W++)for(var za=m[W]=Array(n.yb),ga=0;ga<za.length;ga++){for(var xa=Zj(null,c,W,ga+1,n.ib,0),Va=xa.data,Rb=0;Rb<b;Rb++,e+=4)var Lc=Va[Rb]=
            a.getInt32(e,!0),d=d+Lc&-1;xa.Ic=b;za[ga]=xa}n.Pf=d;b=n}else n.wa("Unrecognized diskette format ("+c+" bytes)");n.lf&&(n.lf.call(n.W,n.Oa,b,n.Gd,n.uf),n.lf=null)};p.readAsArrayBuffer(c)}else 0>b.indexOf("/api/v1/dump")&&(a=ha(b),"json"==a?m=encodeURI(b):"demandrw"==this.mode||"demandro"==this.mode?(m=ak(this,b),this.ji=!0):(c="path",d="&mbhd=10",!b.indexOf("http:")||!b.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(a)?(c="disk",d="&mbhd=0"):-1!==b.indexOf("/",b.length-1)&&(c=
            "dir"),m=qa()+"/api/v1/dump?"+c+"="+encodeURIComponent(b)+(this.Tf?"":d)+"&format=json")),pa(m,!0,null,this,this.po,b)};
            f.po=function(a,b,c,d){var e=null;this.Uf=!1;var m=0>c&&this.za&&!this.za.ha.dc;if(this.ji)c?this.W.wa('Unable to connect to disk "'+d+'" (error '+c+": "+b+")",m):(this.Ud=!0,e=this);else if(c)this.W.wa('Unable to load disk "'+this.Gd+'" (error '+c+")",m);else try{if(0<fa(a,!0).toLowerCase().indexOf("-readonly"))this.Uf=!0;else{var n=b.indexOf("\n");0<n&&1024>n&&0<b.substring(0,n).indexOf("write-protected")&&(this.Uf=!0)}var p;p="<"==b.substr(0,1)?["Missing disk image: "+this.Gd]:0>b.indexOf("0x")&&
            '["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");if(p.length)if(1==p.length)ra(p[0]);else{this.rb=p.length;this.sb=p[0].length;this.yb=p[0][0].length;var v=p[0][0][0];this.ib=v&&v.length||512;for(b=a=0;b<this.rb;b++)for(c=0;c<this.sb;c++)for(d=0;d<this.yb;d++)if(v=p[b][c][d]){var w=v.length;void 0===w&&(w=v.length=512);var w=w>>2,G=v.pattern;void 0===G&&(G=v.pattern=0);var N=v.data;if(void 0===N){var L=v.bytes;if(void 0!==L&&L.length){for(var m=
            w<<2,U=L.length;U<m;U++)L[U]=G;this.fill(v,L,0)}else N=[],G=v.pattern=G|G<<8|G<<16|G<<24,v.data=N;delete v.bytes}Zj(v,b,c);for(m=0;m<N.length;m++)a=a+N[m]&-1}this.Ua=p;this.Pf=a;e=this}else ra("Empty disk image: "+this.Gd)}catch(W){ra("Disk image error: "+W.message)}this.lf&&(this.lf.call(this.lo,this.Oa,e,this.Gd,this.uf),this.lf=null)};function Zj(a,b,c,d,e,m){a||(a={sector:d,length:e,data:[],pattern:m});a.Eo=b;a.Go=c;a.hd=a.Ic=0;a.Ka=!1;return a}
            function ak(a,b){var c;c="action=open&volume="+b+("&mode="+a.mode);c+="&chs="+a.rb+":"+a.sb+":"+a.yb+":"+a.ib;c+="&machine="+a.W.Vf();c+="&user="+a.W.ve();return qa()+"/api/v1/disk?"+c}function bk(a,b,c,d,e,m,n){if(a.Ud){var p;p="action=read&volume="+a.uf;p+="&chs="+a.rb+":"+a.sb+":"+a.yb+":"+a.ib;p=p+("&addr="+b+":"+c+":"+d+":"+e)+("&machine="+a.W.Vf());p+="&user="+a.W.ve();pa(qa()+"/api/v1/disk?"+p,m,null,a,a.so,[b,c,d,e,m,n])}else n&&n(-1,!1)}
            f.so=function(a,b,c,d){var e=!1;a=d[0];var m=d[1],n=d[2],p=d[3];if(!c){b=JSON.parse(b);for(e=0;p--;){var v=this.seek(a,m,n,!0);if(!v)break;this.fill(v,b,e);e+=v.length;n++}e=d[4]}(d=d[5])&&d(c,e)};f.to=function(a,b,c,d){a=d[0];b=d[1];var e=d[2],m=d[3];d=d[4];this.yk=!1;if(0<=a&&a<this.Ua.length&&0<=b&&b<this.Ua[a].length)for(--e;0<m--&&0<=e&&e<this.Ua[a][b].length;e++){var n=this.Ua[a][b][e];c?ck(this,n,!1):n.Ka||(n.hd=n.Ic=0)}d&&dk(this)};
            function ck(a,b,c){b.Ka=!0;var d=a.Ue.indexOf(b);0<=d&&(a.Ue.splice(d,1),a.Bh.splice(d,1));a.Ue.push(b);a.Bh.push(ka());c&&dk(a)}function dk(a){if(a.Ue.length){var b=a.Bh[0]+2E3;a.ce&&a.mn<b&&(clearTimeout(a.ce),a.ce=null);if(!a.ce){var c=ka(),b=b-c;0>b&&(b=0);2E3<b&&(b=2E3);a.ce=setTimeout(function(){Yj(a,!0)},b);a.mn=c+b}}else a.ce&&(clearTimeout(a.ce),a.ce=null)}
            function Yj(a,b){b&&(a.ce=null);var c=a.Ue[0];if(c){for(var d=c.Eo,e=c.Go,c=c.sector,m=0,n=[],p=c-1;p<a.Ua[d][e].length;p++){var v=a.Ua[d][e][p];if(!v.Ka)break;var w=a.Ue.indexOf(v);a.Ue.splice(w,1);a.Bh.splice(w,1);n=n.concat(ek(v));v.Ka=!1;m++}a.Ud?(p={},a.yk=!0,p.action="write",p.volume=a.uf,p.chs=a.rb+":"+a.sb+":"+a.yb+":"+a.ib,p.addr=d+":"+e+":"+c+":"+m,p.machine=a.W.Vf(),p.user=a.W.ve(),p.data=JSON.stringify(n),d=pa(qa()+"/api/v1/disk",b,p,a,a.to,[d,e,c,m,b])):d=!1;return b||d}return!1}
            f.info=function(){return this.Ua.length?[this.Ua.length,this.Ua[0].length,this.Ua[0][0].length,this.Ua[0][0][0].length]:[0,0,0,0]};
            f.seek=function(a,b,c,d,e){var m=null,n=this.Oa,p=this.Ua[a];if(p){var v=p[b];if(!v&&n.Zj&&b<n.sb)for(v=p[b]=Array(n.le),p=0;p<v.length;p++)v[p]=Zj(null,a,b,p+1,n.pb,0);if(v){for(p=0;p<v.length;p++)if(v[p]&&v[p].sector==c){m=v[p];if(null===m.pattern)if(d)m.pattern=0;else{for(d=1;++p<v.length;)null===v[p].pattern&&d++;bk(this,a,b,c,d,null!=e,function(a,b){a&&(m=null);e&&e(m,b)});return e?null:m}break}!m&&n.Zj&&9==n.bb&&(m=v[p]=Zj(null,a,b,n.bb,n.pb,0))}}e&&e(m,!1);return m};
            f.fill=function(a,b,c){for(var d=a.length>>2,e=Array(d),m=0;m<d;m++)e[m]=b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24,c+=4;a.data=e};function ek(a){var b=a.length,c=Array(b),d=0,b=b>>2,e=a.data;a=a.pattern;for(var m=0;m<b;m++){var n=m<e.length?e[m]:a;c[d++]=n&255;c[d++]=n>>8&255;c[d++]=n>>16&255;c[d++]=n>>24&255}return c}function fk(a,b){var c=-1;if(a&&b<a.length)var c=a.data,d=b>>2,c=(d<c.length?c[d]:a.pattern)>>((b&3)<<3)&255;return c}
            f.write=function(a,b,c){if(this.Uf)return!1;if(b<a.length){if(c!=fk(a,b)){var d=a.data,e=a.pattern,m=b>>2;b=(b&3)<<3;for(var n=d.length;n<=m;n++)d[n]=e;a.Ic?m<a.hd?(a.Ic+=a.hd-m,a.hd=m):m>=a.hd+a.Ic&&(a.Ic+=m-(a.hd+a.Ic)+1):(a.hd=m,a.Ic=1);d[m]=d[m]&~(255<<b)|c<<b;this.Ud&&ck(this,a,!0)}return!0}return null};
            f.save=function(){var a=0,b=[];b[a++]=[this.uf,this.Pf,this.rb,this.sb,this.yb,this.ib];if(!this.Ud&&!this.Uf)for(var c=this.Ua,d=0;d<c.length;d++)for(var e=0;e<c[d].length;e++)for(var m=0;m<c[d][e].length;m++){var n=c[d][e][m];if(n&&n.Ic){for(var p=[],v=0,w=n.hd,G=n.hd+n.Ic;w<G;)p[v++]=n.data[w++];b[a++]=[d,e,m,n.hd,p]}}return b};
            f.restore=function(a){var b=0,c="unsupported restore format";if(a&&0<a.length){var d=0,e=a[d++];e&&2<=e.length&&(!this.Ua.length&&6<=e.length?this.create("local",e[2],e[3],e[4],e[5]):null!=e[1]&&null!=this.Pf&&e[1]!=this.Pf&&(c="original checksum ("+e[1]+") differs from current checksum ("+this.Pf+")",b=-2));for(this.Ua.length||(b=-1);d<a.length&&0<=b;){var m=0,n=a[d++],p=n[m++],v=n[m++],w=n[m++];if(p>=this.Ua.length||v>=this.Ua[p].length||w>=this.Ua[p][v].length){c="sector (CHS="+p+":"+v+":"+w+") out of range ("+
            b+" changes applied)";b=-1;break}if(this.Uf){c="unable to modify write-protected disk";b=-1;break}e=n[m++];m=n[m++];n=e+m.length;if(p=this.Ua[p][v][w]){for(v=p.data.length;v<e;)p.data[v++]=p.pattern;v=0;p.hd=e;for(p.Ic=m.length;e<n;)p.data[e++]=m[v++];b++}}}0>b&&-2!=b&&this.W.wa("Unable to restore disk '"+this.Gd+": "+c);return b};
            f.toJSON=function(){var a=JSON.stringify(this.Ua),a=a.replace(/,"length":512/gm,"").replace(/,"pattern":0/gm,""),a=a.replace(/"(sector|length|data|pattern)":/gm,"$1:"),a=a.replace(/,"[^"]*":([0-9]+|true|false)/gm,"");return a=a.replace(/(sector|length|data|pattern):/gm,'"$1":')};
            function gk(a){Ia.call(this,"FDC",a,gk);this.dmaRead=this.nk;this.dmaWrite=this.ok;this.dmaFormat=this.mo;this.bf=null;if(a.autoMount&&(this.bf=a.autoMount,"string"==typeof this.bf))try{this.bf=eval("("+a.autoMount+")")}catch(b){ra("FDC auto-mount error: "+b.message+" ("+a.autoMount+")"),this.bf=null}this.Ec=[];this.Tm=!ya("Mobi")&&window&&"FileReader"in window}Qa(gk);g={};aa={};
            var hk={3:{Qd:3,oe:0,name:aa.Bs},4:{Qd:2,oe:1,name:aa.zs},5:{Qd:9,oe:7,name:aa.Ns},6:{Qd:9,oe:7,name:aa.ts},7:{Qd:2,oe:0,name:aa.vs},8:{Qd:1,oe:2,name:aa.As},10:{Qd:2,oe:7,name:aa.us},13:{Qd:6,oe:7,name:aa.es},15:{Qd:3,oe:0,name:aa.ys}};f=gk.prototype;
            f.Lb=function(a,b,c){var d=this;switch(b){case "listDisks":return this.qa[b]=c,c.onchange=function(){var a=d.qa.descDisk,b=c.options[c.selectedIndex];if(a&&b){var n={};if(b=b.getAttribute("data-value"))try{n=eval("({"+b+"})")}catch(p){ra("FDC option error: "+p.message)}b=n.desc;void 0===b&&(b="");n=n.href;void 0!==n&&(b='<a href="'+n+'" target="_blank">'+b+"</a>");a.innerHTML=b}},!0;case "descDisk":case "listDrives":return this.qa[b]=c,c.onchange=function(){var a=ca(c.value,10);null!=a&&ik(d,a)},
            !0;case "loadDrive":return this.qa[b]=c,c.onclick=function(){var a=d.qa.listDisks;a&&jk(d,a.options[a.selectedIndex].text,a.value)},!0;case "mountDrive":return this.Tm?(this.qa[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;jk(d,fa(b,!0),b,a)}return!1}):c.parentNode.removeChild(c),!0}return!1};
            f.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;this.za=a;this.fa=gb(a,"ChipSet");this.Vd();Tb(b,this,kk);Vb(b,this,lk);this.Tm&&mk(this,"Local Disk","?");mk(this,"Remote Disk","??");this.Eg()||Za(this)};
            f.gc=function(a,b){if(!b){if(!a||!this.restore){if(this.reset(),this.za.vk){this.Ec=[];for(var c=0;c<this.ya.length;c++)nk(this,c,!0);this.Eg(!0)}}else if(!this.restore(a))return!1;if(c=this.qa.listDrives){for(;c.firstChild;)c.removeChild(c.firstChild);c.textContent="";for(var d=0;d<this.Lk;d++){var e=window.document.createElement("option");e.value=d;e.textContent=String.fromCharCode(65+d)+":";c.appendChild(e)}0<this.Lk&&(c.value="0",ik(this,0))}}return!0};
            f.fc=function(a){return a&&this.save?this.save():!0};f.reset=function(){this.Vd()};f.save=function(){var a=new Zd(this);a.set(0,this.am());return a.data()};f.restore=function(a){return this.Vd(a[0])};
            f.Vd=function(a){var b=0,c,d=!0;void 0===a&&(a=[0,0,128,Array(9),0,0,0,[]]);this.cb=a[b++];b++;this.ta=a[b++];this.ic=a[b++];this.Db=a[b++];this.jb=a[b++];this.kg=a[b++];var e=a[b++];c=a[b++];null!=c&&(this.Ec=c);void 0===this.ya&&(this.Lk=4,this.fa&&(this.Lk=Gh(this.fa)),this.ya=Array(4));for(c=0;c<this.ya.length;c++){var m=this.ya[c];if(void 0===m){var m=this.ya[c]={},n;if(this.fa)a:{n=this.fa;if(c<Gh(n)){if(!n.ge){n=360;break a}if(c<n.ge.length){n=n.ge[c];break a}}n=0}else n=0;switch(n){case 160:case 180:m.sb=
            1;default:m.rb=40;m.yb=9;break;case 720:m.rb=80;m.yb=9;break;case 1200:m.rb=80;m.yb=15;break;case 1440:m.rb=80,m.yb=18}}this.Ck(m,c,e[c])||(d=!1)}this.Le=a[b++]||0;this.En=a[b]||0;return d};f.am=function(){var a=0,b=[];b[a++]=this.cb;b[a++]=0;b[a++]=this.ta;b[a++]=this.ic;b[a++]=this.Db;b[a++]=this.jb;b[a++]=this.kg;b[a++]=this.cm();for(var c=a++,d=0;d<this.ya.length;d++){var e=this.ya[d];e.ua&&ok(this,e.vf,e.ua)}b[c]=this.Ec;b[a++]=this.Le;b[a]=this.En;return b};
            f.Ck=function(a,b,c){var d=0,e=!0;a.cb=b;a.Wc=a.Rf=!1;void 0===c&&(c=[192,!0,0,2,0]);"boolean"==typeof c[1]&&(c[1]=["Floppy Drive",a.rb||40,a.sb||c[3],a.yb||9,a.ib||512,c[1],a.yi,a.eh,a.fh]);a.Za=c[d++];var m=c[d++];a.name=m[0];a.rb=m[1];a.sb=m[2];a.yb=m[3];a.ib=m[4];a.Tf=m[5];(a.yi=m[6])?(a.eh=m[7],a.fh=m[8]):(a.yi=a.rb,a.eh=a.sb,a.fh=a.yb);a.Na=c[d++];a.je=c[d++];a.wb=c[d++];a.je=100<=a.je?a.je-100:a.je-a.wb;a.bb=c[d++];a.le=c[d++];a.pb=c[d++];a.Pa=c[d++];a.Ma=null;a.ua||(a.vf="");var n=c[d++];
            102==n&&(n=!1);"boolean"==typeof n?(m=c[d++],c=c[d],n?(d=this.ya[b],nk(this,b,!0,!0),d.Rf=!0,b=new Wj(this,d,"preload"),this.Mm(d,b,m,c,!0)):pk(this,b,m,c,!0)?a.ua&&c&&qk(this,m,c,a.ua):Za(this,!1)):void 0!==n&&a.ua&&0>a.ua.restore(n)&&(e=!1);e&&a.ua&&void 0!==a.Pa&&(a.Ma=a.ua.seek(a.wb,a.Na,a.bb));return e};f.cm=function(){for(var a=0,b=[],c=0;c<this.ya.length;c++)b[a++]=this.bm(this.ya[c]);return b};
            f.bm=function(a){var b=0,c=[];c[b++]=a.Za;c[b++]=[a.name,a.rb,a.sb,a.yb,a.ib,a.Tf,a.yi,a.eh,a.fh];c[b++]=a.Na;c[b++]=a.je+100;c[b++]=a.wb;c[b++]=a.bb;c[b++]=a.le;c[b++]=a.pb;c[b++]=a.Pa;c[b++]=a.Rf;c[b++]=a.Ln;c[b]=a.vf;return c};f.Eg=function(a){a||(this.Ze=0);if(this.bf)for(var b in this.bf){var c=this.bf[b];if(c.name&&c.path){var d=b.charCodeAt(0)-65;if(0<=d&&d<this.ya.length){!pk(this,d,c.name,c.path,!0)&&a&&Za(this,!1);continue}}this.wa("Unrecognized auto-mount specification for drive "+b)}return!!this.Ze};
            function jk(a,b,c,d){var e,m=a.qa.listDrives;if(m&&!isNaN(e=ca(m.value,10))&&0<=e&&e<a.ya.length)if(c)if("?"==c)a.wa('Use "Choose File" and "Mount" to select and load a local disk.');else{if("??"==c){c=window.prompt("Enter the URL of a remote disk image.","")||"";if(!c)return;b=fa(c);a.pc("Attempting to load "+c+' as "'+b+'"')}for(a.pc("loading disk "+c+"...");pk(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){for(var m=a,n=c,
            p=void 0,p=0;p<m.Ec.length;p++)if(m.Ec[p][1]==n){m.Ec.splice(p,1);break}nk(a,e,!1,!0)}}else nk(a,e);else a.wa("Nothing to load")}function pk(a,b,c,d,e,m){var n=a.ya[b];if(d&&n.vf!=d){nk(a,b,e,!0);if(n.Wc)return a.wa("Drive "+b+" busy"),!0;n.Wc=!0;e&&(n.hf=!0,a.Ze++);n.Rf=!!m;(new Wj(a,n,"preload")).load(c,d,m,a.Mm);return!1}return!0}
            f.Mm=function(a,b,c,d,e){var m;a.Wc=!1;b&&(m=b.info(),b&&m[0]>a.rb||m[1]>a.sb)&&(this.wa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.cb)),b=null);b?(a.ua=b,a.Ln=c,a.vf=d,qk(this,c,d,b),m=b.info(),this.Le|=128,this.wa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.cb),a.hf||e),a.yi=m[0],a.eh=m[1],a.fh=m[2]):a.Rf=!1;a.hf&&(a.hf=!1,--this.Ze||Za(this));ik(this,a.cb)};
            function mk(a,b,c){if(a=a.qa.listDisks){for(var d=0;d<a.options.length;d++)if(a.options[d].value==c)return;d=window.document.createElement("option");d.value=c;d.textContent=b;a.appendChild(d)}}function ik(a,b){if(0<=b&&b<a.ya.length){var c=a.ya[b],d=a.qa.listDisks,e=a.qa.listDrives;if(d&&e&&(e=ca(e.value,10),c=c.Rf?"?":c.vf,!isNaN(e)&&e==b)){for(e=0;e<d.options.length;e++)if(d.options[e].value==c){d.selectedIndex!=e&&(d.selectedIndex=e);break}e==d.options.length&&(d.selectedIndex=0)}}}
            function nk(a,b,c,d){var e=a.ya[b];e.ua&&(ok(a,e.vf,e.ua),e.Ln="",e.vf="",e.ua=null,e.Rf=!1,a.Le|=128,d||a.wa("Drive "+String.fromCharCode(65+b)+" unloaded",c),c||d||ik(a,b))}function qk(a,b,c,d){var e;for(e=0;e<a.Ec.length;e++)if(a.Ec[e][1]==c){d.restore(a.Ec[e][2]);return}a.Ec[e]=[b,c,[]]}function ok(a,b,c){var d;for(d=0;d<a.Ec.length;d++)if(a.Ec[d][1]==b){a.Ec[d][2]=c.save();break}}f.Eq=function(a,b){b&4?this.kg&4||this.kg&8&&this.fa&&Zh(this.fa,6):this.Vd();this.kg=b};f.dp=function(){return this.ta};
            f.bp=function(){var a=0;this.Db<this.jb&&(a=this.ic[this.Db]);this.kg&8&&this.fa&&$h(this.fa,6);++this.Db>=this.jb&&(this.ta&=-81,this.Db=this.jb=0);return a};
            f.Dq=function(a,b){this.jb<this.ic.length&&(this.ic[this.jb++]=b);var c=this.ic[0]&31;if(void 0!==hk[c]&&this.jb>=hk[c].Qd){var d=!1;this.Db=0;var c=this.La(),e,m,n,p,v,w=c&31;switch(w){case 3:this.La(g.Cs);this.La(g.hs);this.Yb();break;case 4:m=this.La(g.sg);this.cb=m&3;e=this.ya[this.cb];this.Yb();this.hc((e.Za&-16777216)>>>24,g.Fs);break;case 5:case 6:m=this.La(g.sg);d=m>>2&1;this.cb=m&3;e=this.ya[this.cb];e.Na=d;m=e.wb=this.La(g.jm);n=this.La(g.km);p=e.bb=this.La(g.mm);v=this.La(g.Qj);e.pb=128<<
            v;e.le=this.La(g.cs);this.La(g.Yn);this.La(g.as);6==w?(w=e,w.Za=72,w.ua&&(w.Ma=null,w.Za=0,this.fa&&(Th(this.fa,2,this,"dmaRead",w),Ph(this.fa,2)))):(w=e,w.Za=72,w.ua&&(w.ua.Uf?w.Za=576:(w.Ma=null,w.Za=0,this.fa&&(Th(this.fa,2,this,"dmaWrite",w),Ph(this.fa,2)))));rk(this,e,c,d,m,n,p,v);d=!0;break;case 7:m=this.La(g.sg);this.cb=m&3;e=this.ya[this.cb];e.wb=e.je=0;e.Za=268435488;this.Yb();d=!0;break;case 8:e=this.ya[this.cb];e.Na=0;this.Yb();this.hc(e.cb|e.Na<<2|e.Za&255,g.$n);this.hc(e.wb,g.rs);this.cb=
            this.cb+1&3;break;case 10:m=this.La(g.sg);d=m>>2&1;this.cb=m&3;e=this.ya[this.cb];m=e.wb;n=e.Na=d;p=e.bb=1;v=0;e.Za=0;e.ua&&(e.Ma=e.ua.seek(e.wb,e.Na,e.bb))?v=e.Ma.length:e.Za=72;rk(this,e,c,d,m,n,p,v);d=!0;break;case 13:m=this.La(g.sg);d=m>>2&1;this.cb=m&3;e=this.ya[this.cb];m=e.wb;n=e.Na=d;p=1;v=this.La(g.Qj);e.pb=128<<v;e.le=this.La(g.xs);this.La(g.Yn);e.ym=this.La(g.Xn);w=e;w.Za=72;w.ua&&(w.Ma=null,w.Za=0,this.fa&&(w.Mf=0,w.Pc=Array(4),w.Zj=!0,w.Vh=0,Th(this.fa,2,this,"dmaFormat",w),Ph(this.fa,
            2),w.Zj=!1));rk(this,e,c,d,m,n,p,v);d=!0;break;case 15:m=this.La(g.sg),this.cb=m&3,e=this.ya[this.cb],e.Na=m>>2&1,m=this.La(g.os),e.wb+=m-e.je,0>e.wb&&(e.wb=0),e.wb>=e.rb&&(e.wb=e.rb-1),e.je=m,e.Za=32,e.wb||(e.Za|=268435456),this.Yb(),d=!0}0<this.jb&&(this.ta|=80);this.kg&8&&(!e||e.Za&8||!d||this.fa&&Zh(this.fa,6))}};f.cp=function(){var a=this.Le;this.Le&=-129;return a};f.Cq=function(a,b){this.En=b};
            function rk(a,b,c,d,e,m,n,p){a.Yb();a.hc(b.cb|b.Na<<2|b.Za&255,g.$n);a.hc((b.Za&65280)>>>8,g.Ds);a.hc((b.Za&16711680)>>>16,g.Es);var v=0;if(e!=b.wb||m!=b.Na)v=n=1;c&128&&(m^=v,d||(v=0));a.hc(e+v,g.jm);a.hc(m,g.km);a.hc(n,g.mm);a.hc(p,g.Qj)}f.La=function(){var a=this.ic[this.Db];this.Db++;return a};f.Yb=function(){this.Db=this.jb=0};f.hc=function(a){this.ic[this.jb++]=a};f.nk=function(a,b,c){void 0===b||0>b?this.fg(a,c):c(-1,!1)};f.ok=function(a,b){return void 0!==b&&0<=b?this.rg(a,b):-1};
            f.mo=function(a,b){return void 0!==b&&0<=b?this.gm(a,b):-1};f.fg=function(a,b){var c=-1,d=null,e=0;if(!a.Za&&a.ua){do{if(a.Ma&&(e=a.Pa,0<=(c=fk(a.Ma,a.Pa++)))){d=a.Ma;break}a.Ma=a.ua.seek(a.wb,a.Na,a.bb);if(!a.Ma){a.Za=1088;break}a.Pa=0;this.Dg(a)}while(1)}b(c,!1,d,e)};f.rg=function(a,b){if(a.Za||!a.ua)return-1;do{if(a.Ma&&a.ua.write(a.Ma,a.Pa++,b))break;a.Ma=a.ua.seek(a.wb,a.Na,a.bb);if(!a.Ma){a.Za=8256;b=-1;break}a.Pa=0;this.Dg(a)}while(1);return b};
            f.Dg=function(a){a.bb++;a.bb>=a.fh+1&&(a.bb=1,a.Na++,a.Na>=a.eh&&(a.Na=0,a.wb++))};f.gm=function(a,b){if(a.Za)return-1;a.Pc[a.Mf++]=b;if(a.Mf==a.Pc.length){a.wb=a.Pc[0];a.Na=a.Pc[1];a.bb=a.Pc[2];a.pb=128<<a.Pc[3];for(var c=a.Mf=0;c<a.pb;c++)if(0>this.rg(a,a.ym))return-1;a.Vh++}a.Vh>=a.le&&(b=-1);return b};var kk={1012:gk.prototype.dp,1013:gk.prototype.bp,1015:gk.prototype.cp},lk={1010:gk.prototype.Eq,1013:gk.prototype.Dq,1015:gk.prototype.Cq};
            Ea(function(){for(var a=Xa(window.document,"pcjs","fdc"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new gk(d);Wa(d,c)}});function Z(a){Ia.call(this,"HDC",a,Z);this.dmaRead=this.nk;this.dmaWrite=this.ok;this.dmaWriteBuffer=this.no;this.dmaWriteFormat=this.oo;this.Tj=[];if(a.drives)try{this.Tj=eval("("+a.drives+")")}catch(b){ra("HDC drive configuration error: "+b.message+" ("+a.drives+")")}this.Ug=(this.gf="at"==a.type)?1:0;this.Fo=this.gf?2:3}Qa(Z);
            var sk=[{0:[306,2],1:[375,8],2:[306,6],3:[306,4]},{1:[306,4],2:[615,4],3:[615,6],4:[940,8],5:[940,6],6:[615,4],7:[462,8],8:[733,5],9:[900,15],10:[820,3],11:[855,5],12:[855,7],13:[306,8],14:[733,7]}];f=Z.prototype;f.Lb=function(){return!1};f.Lc=function(a,b,c,d){this.la=b;this.U=c;this.Ra=d;this.za=a;this.fa=gb(a,"ChipSet");Tb(b,this,this.gf?tk:uk);Vb(b,this,this.gf?vk:wk);Wd(c,19,this,this.Fp);Wd(c,64,this,this.Gp);this.reset();this.Eg()||Za(this)};
            f.gc=function(a,b){if(!b)if(!a||!this.restore)this.Vd(),this.za.vk&&this.Eg(!0);else if(!this.restore(a))return!1;return!0};f.fc=function(a){return a&&this.save?this.save():!0};f.Vf=function(){return this.za?this.za.Vf():""};f.ve=function(){return this.za?this.za.ve():""};f.reset=function(){this.Vd(null,!0)};f.save=function(){var a=new Zd(this);a.set(0,this.am());return a.data()};f.restore=function(a){return this.Vd(a[0])};
            f.Vd=function(a,b){var c=0,d=!0;if(this.gf)null==a&&(a=[0,0,0,0,0,0,0,0,64,0]),this.Ke=a[c++],this.Kn=a[c++],this.Me=a[c++],this.Fj=a[c++],this.Bj=a[c++],this.Aj=a[c++],this.hg=a[c++],this.ta=a[c++],this.Tl=a[c++],this.Dj=a[c++];else{null==a&&(a=[0,0,Array(14),0,0]);this.ph=a[c++];this.ta=a[c++];this.ic=a[c++];this.Db=a[c++];this.jb=a[c++];this.Jn=a[c++];this.In=a[c++];this.Hn=a[c++];var e=a[c++];void 0!==e?this.Xf=e:void 0===this.Xf&&(this.Xf=-1)}void 0===this.ya&&(this.ya=Array(this.Tj.length));
            c=a[c];void 0===c&&(c=[]);for(e=0;e<this.ya.length;e++){void 0===this.ya[e]&&(this.ya[e]={});var m=this.ya[e];this.Ck(e,m,this.Tj[e],c[e],b)||(d=!1);null!=this.ph&&1>=e&&(this.ph|=(m.type&3)<<(1-e<<1))}return d};
            f.am=function(){var a=0,b=[];this.gf?(b[a++]=this.Ke,b[a++]=this.Kn,b[a++]=this.Me,b[a++]=this.Fj,b[a++]=this.Bj,b[a++]=this.Aj,b[a++]=this.hg,b[a++]=this.ta,b[a++]=this.Tl,b[a++]=this.Dj):(b[a++]=this.ph,b[a++]=this.ta,b[a++]=this.ic,b[a++]=this.Db,b[a++]=this.jb,b[a++]=this.Jn,b[a++]=this.In,b[a++]=this.Hn,b[a++]=this.Xf);b[a]=this.cm();return b};
            f.Ck=function(a,b,c,d,e){var m=0,n=!0;void 0===d&&(d=[0,0,!1,Array(8)]);b.cb=a;b.errorCode=d[m++];b.Pn=d[m++];b.Tf=d[m++];b.Gf=d[m++];b.Hf=d[m++];b.Na=d[m++];b.sb=d[m++];b.Re=d[m++];b.bb=d[m++];b.le=d[m++];b.pb=d[m++];b.Sh=this.gf?0:1;b.name=c.name;void 0===b.name&&(b.name="Hard Drive");b.path=c.path;b.mode=c.mode||(b.path?"preload":"local");"demandro"!=b.mode&&"demandrw"!=b.mode||this.ve()||(b.mode="local");b.type=c.type;if(void 0===b.type||void 0===sk[this.Ug][b.type])b.type=this.Fo;c=sk[this.Ug][b.type];
            b.yb=c[2]||17;b.ib=c[3]||512;if(e&&this.fa&&(e=this.fa,c=b.type,e.ea)){var p=e.ea[18],p=a?p&240|c:p&15|c<<4;e.ea&&(e.ea[18]=p,uh(e))}void 0===b.ua&&(b.ua=null,this.wa("Type "+b.type+' "'+b.name+'" is fixed disk '+a,!0));xk(this,b);b.Pa=d[m++];b.Ma=null;b.ua&&(a=d[m],void 0!==a&&0>b.ua.restore(a)&&(n=!1),n&&void 0!==b.Pa&&(b.Ma=b.ua.seek(b.Re,b.Na,b.bb+b.Sh)));return n};f.cm=function(){for(var a=0,b=[],c=0;c<this.ya.length;c++)b[a++]=this.bm(this.ya[c]);return b};
            f.bm=function(a){var b=0,c=[];c[b++]=a.errorCode;c[b++]=a.Pn;c[b++]=a.Tf;c[b++]=a.Gf;c[b++]=a.Hf;c[b++]=a.Na;c[b++]=a.sb;c[b++]=a.Re;c[b++]=a.bb;c[b++]=a.le;c[b++]=a.pb;c[b++]=a.Pa;c[b]=a.ua?a.ua.save():null;return c};
            function xk(a,b,c){if(b){var d=0,e=0;null==c&&((d=b.Gf[2])?e=b.Gf[0]<<8|b.Gf[1]:c=b.type);null==c||d||(d=sk[a.Ug][c][1],e=sk[a.Ug][c][0]);d&&((c=sk[a.Ug][b.type])&&e!=c[0]&&d!=c[1]&&a.wa("Warning: drive parameters ("+e+","+d+") do not match drive type "+b.type+" ("+c[0]+","+c[1]+")"),b.rb=e,b.sb=d,null==b.ua&&(b.ua=new Wj(a,b,b.mode)))}}
            f.Eg=function(a){a||(this.Ze=0);for(var b=0;b<this.ya.length;b++){var c=this.ya[b];if(c.name&&c.path){if(!(a&&c.ua&&c.ua.ji)){var d;d=c.name;var c=c.path,e=this.ya[b];e.Wc?(this.wa("Drive "+b+" busy"),d=!0):(e.Wc=!0,e.hf=!0,this.Ze++,(e.ua||new Wj(this,e,e.mode)).load(d,c,null,this.qo),d=!1);!d&&a&&Za(this,!1)}}else a&&void 0!==c.type&&(c.ua=null,xk(this,c,c.type))}return!!this.Ze};
            f.qo=function(a,b,c){a.Wc=!1;(a.ua=b)&&this.wa('Mounted disk "'+c+'" in drive '+String.fromCharCode(67+a.cb),a.hf);a.hf&&(a.hf=!1,--this.Ze||Za(this))};f.Dp=function(){var a=0;this.Db<this.jb&&(a=this.ic[this.Db]);this.fa&&$h(this.fa,5);this.ta&=-33;++this.Db>=this.jb&&(this.Db=this.jb=0,this.ta&=-15);return a};f.$q=function(a,b){this.jb<this.ic.length&&(this.ic[this.jb++]=b);var c=12!=this.ic[0]?6:this.ic.length;6==this.jb&&(this.ta&=-2);this.jb>=c&&(this.ta|=2,this.ta&=-2,yk(this))};
            f.Ep=function(){var a=this.ta;this.Db<this.jb&&(this.ta|=1);return a};f.cr=function(a,b){this.Jn=b;this.fa&&$h(this.fa,5);this.Vd()};f.Cp=function(){return this.ph};f.br=function(a,b){this.In=b;this.ta=13};f.ar=function(a,b){this.Hn=b};f.Rl=function(){};
            f.Mo=function(){var a=-1;if(this.Oa){var b=this,a=this.fg(this.Oa,function(){});1!=this.Oa.Pa&&this.Oa.Pa==this.Oa.ib&&(this.Oa.pb-=this.Oa.ib,this.Me=this.Me-1&255,this.Oa.pb>=this.Oa.ib?(b.ta=136,this.fg(this.Oa,function(a){0<=a?(zk(b),b.ta=80):(b.ta=1,b.Ke=16)},!1)):this.ta=80)}return a};
            f.kq=function(a,b){this.Oa&&this.Oa.pb>=this.Oa.ib&&(0>this.rg(this.Oa,b)?(this.ta=1,this.Ke=16):1!=this.Oa.Pa&&this.Oa.Pa==this.Oa.ib&&(this.Oa.pb-=this.Oa.ib,this.Me=this.Me-1&255,zk(this),this.ta=80,this.Oa.pb>=this.Oa.ib&&(this.ta|=8)))};f.Oo=function(){return this.Ke};f.pq=function(a,b){this.Kn=b};f.Po=function(){return this.Me};f.nq=function(a,b){this.Me=b};f.Qo=function(){return this.Fj};f.oq=function(a,b){this.Fj=b};f.Lo=function(){return this.Bj};f.jq=function(a,b){this.Bj=b};f.Ko=function(){return this.Aj};
            f.iq=function(a,b){this.Aj=b};f.No=function(){return this.hg};f.lq=function(a,b){this.hg=b;this.ta=this.ya[this.hg&16?1:0]?this.ta|64:this.ta&-65};f.Ro=function(){return this.ta};f.hq=function(a,b){this.Tl=b;this.fa&&$h(this.fa,14);Ak(this)};f.mq=function(a,b){this.Dj&4&&!(b&4)&&(this.Ke=1);this.Dj=b};
            function Ak(a){var b=!1,c=a.Tl,d=a.hg&16?1:0,e=a.hg&15,m=a.Bj|(a.Aj&3)<<8,n=a.Fj,p=a.Me||256;a.Oa=null;a.Ke=0;a.ta=80;(d=a.ya[d])?(d.Re=m,d.Na=e,d.bb=n,d.pb=p*d.ib,c=144<=c?c:c&240,d.Ma=null,d.Pa=0,d.errorCode=0,a.Oa=d):c=-1;switch(c&240){case 32:a.ta=136;a.fg(d,function(b){0<=b&&a.fa?(zk(a),a.ta=80):(a.ta=1,a.Ke=16)},!1);break;case 48:a.ta=8;break;case 16:b=!0;break;case 64:b=!0;break;case 144:a.Ke=1;b=!0;break;case 145:d.sb=e+1,d.yb=p,b=!0}b&&zk(a)}
            function zk(a){!a.fa||a.Dj&2||Zh(a.fa,14,120)}
            function yk(a){a.Db=0;var b=a.La(),c=a.La(),d=c&32,e=d>>5,m=c&31,n=a.La(),p=a.La(),v=n<<2&768|p,w=n&63,G=a.La(),N=a.La(),L=a.ya[e];L&&(L.Re=v,L.Na=m,L.bb=w,L.pb=G*L.ib);switch(b){case 3:a.Yb(L?L.errorCode:4);a.hc(c);a.hc(n);a.hc(p);a.hc(0|d);b=-1;break;case 12:for(c=0;0<=(b=a.La());)L&&c<L.Gf.length&&(L.Gf[c++]=b);L&&xk(a,L);b=0;L||a.Xf!=e||(a.Xf=-1,b=2);a.Yb(b|d);b=-1;break;case 224:case 228:a.Yb(0|d),b=-1}if(0<=b)switch(void 0===L?b=-1:(L.errorCode=0,L.Pn=0),b){case 0:a.Yb(0|d);break;case 1:L.Us=
            N;a.Yb(0|d);break;case 5:a.Yb(0|d);break;case 8:Bk(a,L,function(b){a.Yb(b|d)});break;case 10:Ek(a,L,function(b){a.Yb(b|d)});break;case 15:Fk(a,L,function(b){a.Yb(b|d)});break;default:a.Yb(2|d)}}f.La=function(){var a=-1;this.Db<this.jb&&(a=this.ic[this.Db++]);return a};f.Yb=function(a){this.Db=this.jb=0;void 0!==a&&this.hc(a);this.fa&&Zh(this.fa,5);this.ta|=32};f.hc=function(a){this.ic[this.jb++]=a};f.nk=function(a,b,c){void 0===b||0>b?this.fg(a,c):c(-1,!1)};
            f.ok=function(a,b){return void 0!==b&&0<=b?this.rg(a,b):-1};f.no=function(a,b){var c;void 0!==b&&0<=b?(c=b,a.Pa<a.Hf.length?a.Hf[a.Pa++]=c:(a.errorCode=20,c=-1)):c=-1;return c};f.oo=function(a,b){return void 0!==b&&0<=b?this.gm(a,b):-1};function Bk(a,b,c){b.errorCode=4;if(b.ua&&(b.Ma=null,a.fa)){b.errorCode=0;Th(a.fa,3,a,"dmaRead",b);Ph(a.fa,3,function(a){a||0!=b.errorCode||(b.errorCode=4);c(b.errorCode?2:0)});return}c(b.errorCode?2:0)}
            function Ek(a,b,c){b.errorCode=4;if(b.ua&&(b.Ma=null,a.fa)){b.errorCode=0;Th(a.fa,3,a,"dmaWrite",b);Ph(a.fa,3,function(a){a||(0==b.errorCode&&(b.errorCode=4),20==b.errorCode&&(b.errorCode=0));c(b.errorCode?2:0)});return}c(b.errorCode?2:0)}function Fk(a,b,c){b.errorCode=4;b.Hf&&b.Hf.length==b.pb||(b.Hf=Array(b.pb));b.Pa=0;a.fa?(b.errorCode=0,Th(a.fa,3,a,"dmaWriteBuffer",b),Ph(a.fa,3,function(a){a||0!=b.errorCode||(b.errorCode=4);c(b.errorCode?2:0)})):c(b.errorCode?2:0)}
            f.fg=function(a,b,c){var d=-1,e=null,m=0;if(a.errorCode)return b&&b(d,!1,e,m),d;var n=!1!==c?1:0;if(a.Ma&&(m=a.Pa,d=fk(a.Ma,a.Pa),a.Pa+=n,0<=d))return e=a.Ma,b&&b(d,!1,e,m),d;if(b){var p=this;if(a.ua)return a.ua.seek(a.Re,a.Na,a.bb+a.Sh,!1,function(c,w){(a.Ma=c)?(e=c,m=a.Pa=0,p.Dg(a),d=fk(a.Ma,a.Pa),a.Pa+=n):a.errorCode=20;b(d,w,e,m)}),d;a.errorCode=20;b(d,!1,e,m)}return d};
            f.rg=function(a,b){if(a.errorCode)return-1;do{if(a.Ma&&a.ua.write(a.Ma,a.Pa++,b))break;a.ua&&a.ua.seek(a.Re,a.Na,a.bb+a.Sh,!0,function(b){a.Ma=b});if(!a.Ma){a.errorCode=20;b=-1;break}a.Pa=0;this.Dg(a)}while(1);return b};f.Dg=function(a){a.bb++;var b=1-a.Sh;a.bb>=a.yb+b&&(a.bb=b,a.Na++,a.Na>=a.sb&&(a.Na=0,a.Re++))};
            f.gm=function(a,b){if(a.errorCode)return-1;a.Pc[a.Mf++]=b;if(a.Mf==a.Pc.length){a.Re=a.Pc[0];a.Na=a.Pc[1];a.bb=a.Pc[2];a.pb=128<<a.Pc[3];for(var c=a.Mf=0;c<a.pb;c++)if(0>this.rg(a,a.ym))return-1;a.Vh++}a.Vh>=a.le&&(b=-1);return b};f.Fp=function(){var a=this.U.H&255;!(this.U.F>>8)&&128<a&&(this.Xf=a-128);return!0};f.Gp=function(){var a;(a=this.U.F>>8||!this.fa)||(a=!(this.fa.bc[0].sd&64));return a?!0:!1};
            var uk={800:Z.prototype.Dp,801:Z.prototype.Ep,802:Z.prototype.Cp},tk={496:Z.prototype.Mo,497:Z.prototype.Oo,498:Z.prototype.Po,499:Z.prototype.Qo,500:Z.prototype.Lo,501:Z.prototype.Ko,502:Z.prototype.No,503:Z.prototype.Ro},wk={800:Z.prototype.$q,801:Z.prototype.cr,802:Z.prototype.br,803:Z.prototype.ar,807:Z.prototype.Rl,811:Z.prototype.Rl,815:Z.prototype.Rl},vk={496:Z.prototype.kq,497:Z.prototype.pq,498:Z.prototype.nq,499:Z.prototype.oq,500:Z.prototype.jq,501:Z.prototype.iq,502:Z.prototype.lq,503:Z.prototype.hq,
            1014:Z.prototype.mq};Ea(function(){for(var a=Xa(window.document,"pcjs","hdc"),b=0;b<a.length;b++){var c=a[b],d=Ua(c),d=new Z(d);Wa(d,c)}});function Zd(a,b,c){this.id=a.id;this.key=Gk(a,b,c);this.Ra=a.Ra;Hk(this,a.dr)}function Gk(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
            Zd.prototype={constructor:Zd,set:function(a,b){try{this[this.id][a]=b}catch(c){}},get:function(a){return this[this.id][a]||null},value:function(){return this[this.id]},data:function(){return this[this.id]},load:function(a){return a?(this[this.id]=a,this.uk=!0):this.uk?!0:ua()&&(a=va(this.key))?(this[this.id]=a,this.uk=!0):!1},parse:function(){var a=!0;try{this[this.id]=JSON.parse(this[this.id])}catch(b){ra(b.message||b),a=!1}return a},toString:function(){var a=this[this.id];return"string"==typeof a?
            a:JSON.stringify(a)},clear:function(a){Hk(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(m){}b.splice(c,1);c=0}},oc:function(){}};function Hk(a,b){a[a.id]={};b&&a.set("parms",b);a.uk=!1}
            function Ik(a){var b=!0;if(ua()){var c=JSON.stringify(a[a.id]);wa(a.key,c)||(ra("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
            function Jk(a,b,c){Ia.call(this,"Computer",a,Jk);this.ha.dc=!1;this.Be=a.busWidth||a.buswidth;this.ad=Kk;this.wh=null;this.li=!1;this.url=b?b.url:null;this.Ar=(Math.random()+.1).toString(36).substr(2,12);this.bd=Lk(this);if(this.U=Ta("CPU",this.id)){this.Ra=Ta("Debugger",this.id);this.la=new Db({id:this.gn+".bus",buswidth:this.Be},this.U,this.Ra);var d,e=Ra(this.id);if((this.ae=Ta("Panel",this.id))&&this.ae.jk)for(b=0;b<e.length;b++)d=e[b],d.wa=this.ae.wa,d.pc=this.ae.pc,d.jk=this.ae.jk;for(b=0;b<
            e.length;b++)d=e[b],d.Lc&&d.Lc(this,this.la,this.U,this.Ra);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Ij=d:this.ad=parseInt(d,10));var m;if(a=La&&La.state||(m=!0,a.state))b=this.Mn=a,m||(this.li=!0,this.ad=Kk),this.ad&&(this.Mj=new Zd(this,"1.18.3"),this.Mj.load()?b=null:delete this.Mj);!b&&this.ad&&(m=null,this.bd&&(m=qa()+"/api/v1/user?req=load&user="+this.bd+"&state="+Gk(this,"1.18.3")),b=m)&&(this.li=!0);b?pa(b,!0,null,this,this.cq):Za(this);c||Mk(this,this.vj)}else ra("Unable to find CPU component")}
            Qa(Jk);var Kk=0;f=Jk.prototype;f.Vf=function(){return this.Ar};f.ve=function(){return this.bd?this.bd:""};f.cq=function(a,b,c){c?(this.Ij=null,this.li=!1,this.wa("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):this.wh=b;Za(this)};function Mk(a,b,c){for(var d=Ra(a.id),e=0;e<=d.length;e++){var m=e<d.length?d[e]:a;if(!$a(m)){$a(m,function(){Mk(a,b,c)});return}}b.call(a,c)}
            function Nk(a,b){var c=new Zd(a,"1.18.3","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.wa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
            f.vj=function(a){void 0===a&&(a=this.ad||(this.wh?1:Kk));var b=!1,c=!1;this.Vm=!1;var d=this.Mj||new Zd(this,"1.18.3");if(-1==a)b=!0;else if(a>Kk){if(d.load(this.wh)){this.xf=new Zd(this,"1.18.3","failsafe");this.xf.load()&&(Ok(this,d),a=2,Hk(this.xf));this.xf.set("timestamp",la());Ik(this.xf);var e=this.ad&&!this.li;if(1==a||sa("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var m=d.get("code"),n=d.get("data");m&&("ok"==m?d.load(n):("error"==
            m&&"no machine state"!=n?(this.wa("Error: "+n),"unable to verify user"==n&&(wa("user",""),this.bd=null)):this.pc(m+": "+n),Hk(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&Nk(this,c?d:null)}else 2==a&&d.clear()}else Nk(this);delete this.wh;delete this.Mj}e=Ra(this.id);for(m=0;m<e.length;m++)n=e[m],n!==this&&n!=this.U&&(c=Pk(this,n,d,b,c));b=[d,a,c];-1!=a?Mk(this,this.Nm,b):this.Nm(b)};
            function Pk(a,b,c,d,e){if(!b.ha.dc){b.ha.dc=!0;if(b.gc){var m=null;e&&((m=c.get(b.id))||(m=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof m&&(m=null);!b.gc(m,d)&&m&&(ra("Unable to restore state for "+b.type),a.Mn&&!a.wh?(c.clear(),a.ad=Kk,window&&window.location.reload()):a.Vm=!0,b.gc(null),e=!1)}if(!d&&b.Km)for(a=b.Km.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
            f.Nm=function(a){var b=a[0],c=0>a[1];a=a[2];this.ha.dc=!0;this.Sm||(this.pc("PCjs v1.18.3\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Sm=!0);this.U&&(Pk(this,this.U,b,c,a),vc(this.U));this.Vm&&(Ok(this,b),b.clear());!c&&this.xf&&(this.xf.clear(),delete this.xf)};
            function Ok(a,b){if(sa("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.ve(),d=b.toString(),e={app:"PCjs",ver:"1.18.3"};e.url=a.url;e.user=c;e.type="bug";e.data=d;pa("http://www.pcjs.org/api/v1/report",!0,e)}}
            function Qk(a,b,c){var d,e="none",m=new Zd(a,"1.18.3"),n=new Zd(a,"1.18.3","validate"),p=la();n.set("timestamp",p);m.set("timestamp",p);m.set("version","1.18.3");m.set("url",window?window.location.href:null);m.set("browser",window?window.navigator.userAgent:"");a.U&&a.U.fc&&(c&&xc(a.U),d=a.U.fc(b,c),"object"===typeof d&&m.set(a.U.id,d),c&&(a.U.ha.dc=!1,!1===d&&(e=null)));for(var p=Ra(a.id),v=0;v<p.length;v++){var w=p[v];w.ha.dc&&(w.fc&&(d=w.fc(b,c),"object"===typeof d&&m.set(w.id,d)),c&&(w.ha.dc=
            !1,!1===d&&(e=null)))}e&&(c?(p=d=!1,b?(a.bd&&Rk(a,a.bd,m.toString()),Ik(n)&&Ik(m)||(e=null,d=p=!0)):a.ad&&(d=!0,p=3==a.ad),d&&m.clear(p)):e=m.toString());c&&(a.ha.dc=!1);return e}f.reset=function(){this.la&&this.la.reset&&(this.oc("Resetting "+this.la.type),this.la.reset());for(var a=Ra(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.la&&c.reset&&(this.oc("Resetting "+c.type),c.reset())}};
            f.start=function(a,b){for(var c=Ra(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};f.stop=function(a,b){for(var c=Ra(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
            f.Lb=function(a,b,c){var d=this;switch(b){case "save":return this.qa[b]=c,c.onclick=function(){var a=Lk(d,!0);if(a){var b=!(!d.ad||d.Ij),c=Qk(d,b);b?Rk(d,a,c):d.wa("Resume disabled, machine state not saved")}},!0;case "reset":return this.qa[b]=c,c.onclick=function(){yc(d)},!0}return!1};
            function Lk(a,b){var c=a.bd;c||(c=va("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("To save machine states on the pcjs.org server, you need a user ID (email support@pcjs.org).\n\nOnce you have an ID, enter it below.","")),c&&((c=Sk(a,c))||a.wa("Your user ID has not been approved."))):b&&a.wa("Browser local storage is not available"));return c}
            function Sk(a,b){a.bd=null;var c=pa(qa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(wa("user",c.data),a.bd=c.data)}catch(e){ra(e.message+" ("+d+")")}return a.bd}
            function Rk(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Gk(a,"1.18.3");d.data=c;b=pa(qa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.wa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.wa(c),wa("user",""),a.bd=null)}}
            function yc(a){if(a.ad&&!a.Ij){var b=sa("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Qk(a,b,!0);!b&&a.Mn?window&&window.location.reload():(b||(a.vk=!0),a.vj(Kk),a.vk=!1)}else a.reset(),a.U&&vc(a.U)}function gb(a,b,c){a=Ra(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}
            Ea(function(){for(var a=Xa(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=Ua(c),c=Xa(c,"pcjs","computer"),e=0;e<c.length;e++){var m=c[e],n=Ua(m),n=new Jk(n,d,!0);Wa(n,m);Mk(n,n.vj)}});Aa.show.push(function(){for(var a=Xa(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Ua(a[b]);(c=Ta("Computer",c.id))&&c.Sm&&!c.ha.dc&&c.vj(-1)}});
            Aa.exit.push(function(){for(var a=Xa(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Ua(a[b]);(c=Ta("Computer",c.id))&&c.ha.dc&&Qk(c,!(!c.ad||c.Ij),!0)}});var Tk=0;function Uk(a,b,c,d,e,m){e("Loading "+a+"...");pa(a,!0,null,null,function(n,p,v){v?(p||(p="unable to load "+a+" ("+v+")"),m(p,null)):Vk(p,a,b,c,d,e,m)})}
            function Vk(a,b,c,d,e,m,n){function p(a,m){if(m)n(m,null);else{if(c){var p=b;p&&0>p.indexOf("/")&&(p=window.location.pathname+p);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" state=$2"+d+"$2":"")+(p?" url=$2"+p+"$2":""))}p=null;if("<"==a.charAt(0))try{window.ActiveXObject||"ActiveXObject"in window?(e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),p=new window.ActiveXObject("Microsoft.XMLDOM"),p.async=!1,p.loadXML(a)):p=(new window.DOMParser).parseFromString(a,"text/xml")}catch(N){p=
            null,a=N.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);n(a,p)}}a?e?Wk(a,m,p):p(a,null):n("no data"+(b?" for file: "+b:""),null)}
            function Wk(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");pa(e,!0,null,null,function(m,n,p){if(p||!n)c(a,"unable to resolve XML reference: "+d[0]+" ("+p+")");else{if(m=d[3])if(p=n.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var v=p[0],w,G=/( [a-z]+=)(['"])(.*?)\2/g;w=G.exec(m);)v=0>v.indexOf(w[1])?v.replace(">",w[0]+">"):v.replace(new RegExp(w[1]+"(['\"])(.*?)\\1"),w[0]);p[0]!=v&&(n=n.replace(p[0],v))}else{c(a,"missing <"+d[1]+"> in "+e);return}n=n.replace(/<\?xml[^>]*>[\r\n]*/,
            "");a=a.replace(d[0],n);Wk(a,b,c)}})}else c(a,null)}
            function Xk(a,b,c,d){function e(a){if(void 0===p){var b=n&&Xa(n,"machine-warning");p=b&&b[0]||n}p&&(p.innerHTML=ja(a))}function m(a){e("Error: "+a);v&&(--Tk||Ga(!0));v=!1}var n,p,v=!0;Tk++;try{if(n=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.3/components.xsl");var w=function(d,p){if(p){var v=function(d,v){if(v)if(v)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var w=p.transformNode(v);w?(n.outerHTML=w,--Tk||Ga(!0)):m("transformNodeToObject failed")}else window.document.implementation&&
            window.document.implementation.createDocument?(w=new XSLTProcessor,w.importStylesheet(v),(w=w.transformToFragment(p,window.document))?n.parentNode?(n.parentNode.replaceChild(w,n),--Tk||Ga(!0)):m("invalid machine element: "+a):m("transformToFragment failed")):m("unable to transform XML: unsupported browser");else m("failed to load XSL file: "+c);else m(d)};p?Uk(c,null,null,!1,e,v):m("failed to load XML file: "+b)}else m(d)};"<"!=b.charAt(0)?Uk(b,a,d,!0,e,w):Vk(b,null,a,d,!1,e,w)}else m("missing machine element: "+
            a)}catch(G){m(G.message)}return v}window.embedPC=function(a,b,c,d){Ga(!1);return Xk(a,b,c,d)};window.enableEvents=Ga;window.sendEvent=Ha;})();
            
    • embed.ts
      declare var require;
      
      module shell {
      
        function start(complete: () => string) {
      
          document.body.style.color = 'gray';
          //document.body.style.overflow = 'hidden';
          //document.body.parentElement.style.overflow = 'hidden';
      
          var drive: persistence.Drive = require('nodrive');
      
          var pcjsScope = redirectWindow(drive, window, '/cache/', '/demos/');
      
          var comp;
      
          (<any>pcjsScope).pcjs(loadedComp => {
            comp = loadedComp;
            (<any>nowin).nodrive = drive;
            (<any>nowin).computer = comp;
            console.log('nodrive: ', drive, ' computer: ', comp);
            var width = nowin.innerWidth || (nowin.document.body.parentElement ? nowin.document.body.parentElement.clientWidth : 0) || nowin.document.body.clientWidth;
            var height = nowin.innerHeight || (nowin.document.body.parentElement ? nowin.document.body.parentElement.clientHeight : 0) || nowin.document.body.clientHeight;
            updateSize(width, height);
            var textar = document.getElementsByTagName('textarea')[0];
            if (textar) {
              setTimeout(() => textar.focus(), 400);
            }
            complete();
          });
          var embedPC = (<any>pcjsScope).embedPC;
      
          var root = document.createElement('div');
          root.id = 'root';
          document.body.appendChild(root);
      
      
          var rootInner = document.createElement('div');
          rootInner.id = require('uniqueKey');;
          root.appendChild(rootInner);
      
          var emb = embedPC(
            root.id,
            '/demos/turbo.xml',
            //'/demos/sample1.xml',
            //'/demos/sample3a.xml',
            //'/demos/sample2.xml',
            //'/devices/pc/machine/5170/ega/1152kb/rev3/machine.xml');
            '/demos/components.xsl');
      
      
          if (pcjsScope.onload)
            (<any>pcjsScope).onload();
      
          var nowin: Window = require('nowindow');
          nowin.onunload = (e) => {
            if (pcjsScope.onunload)
              pcjsScope.onunload(e);
          };
          nowin.onbeforeunload = (e) => {
            if (pcjsScope.onbeforeunload)
              pcjsScope.onbeforeunload(e);
          };
      
          var resizeMod = require('resize');
          resizeMod.on(winMetrics => {
            winMetrics.windowWidth;
            winMetrics.windowHeight;
            updateSize(winMetrics.windowWidth, winMetrics.windowHeight);
          });
      
          function updateSize(width: number, height: number) {
            root = <any>document.getElementById('root');
            root.style.overflow = 'hidden';
            var display = <HTMLDivElement>root.children[0];
            if (display) {
              display.style.maxWidth = Math.min((height - 40) * 640 / 350, width - 10) + 'px';
              display.style.overflow = 'hidden';
              var links = display.getElementsByTagName('a');
              for (var i = 0; i < links.length; i++) {
                var a = links[i];
                if (a.innerHTML === 'XML') {
                  a.innerHTML = 'Save';
                  a.href = '';
                  a.onclick = (e: Event) => {
                    if (e.cancelable) e.cancelBubble = true;
                    if (e.preventDefault) e.preventDefault();
                    save();
                  };
                }
              }
            }
          }
      
          function save() {
            nowin.console.log('poweroff...');
            comp.powerOff(true, true);
            var root = <any>document.getElementById('root');
            if (root) {
              root.style.opacity = '0.2';
            }
      
            setTimeout(() => {
              nowin.console.log('save HTML...');
              saveHTML();
              comp.powerOn(true);
              if (root) {
                root.style.opacity = '1';
              }
            }, 5000);
      
            function saveHTML() {
      
              var filename = saveFileName();
              exportBlob(filename, ['<!doctype html>\n', nowin.document.documentElement.outerHTML]);
      
              function exportBlob(filename: string, textChunks: string[]) {
                try {
                  var blob: Blob = new (<any>Blob)(textChunks, { type: 'application/octet-stream' });
                }
                catch (blobError) {
                  exportDocumentWrite(filename, textChunks.join(''));
                  return;
                }
      
                exportBlobHTML5(filename, blob);
              }
      
              function exportBlobHTML5(filename, blob: Blob) {
                var url = URL.createObjectURL(blob);
                var a = document.createElement('a');
                a.href = url;
                a.setAttribute('download', filename);
                try {
                  // safer save method, supposed to work with FireFox
                  var evt = document.createEvent("MouseEvents");
                  (<any>evt).initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                  a.dispatchEvent(evt);
                }
                catch (e) {
                  a.click();
                }
              }
      
              function exportDocumentWrite(filename: string, content: string) {
                var win = document.createElement('iframe');
                win.style.width = '100px';
                win.style.height = '100px';
                win.style.display = 'none';
                document.body.appendChild(win);
      
                setTimeout(() => {
                  var doc = win.contentDocument || (<any>win).document;
                  doc.open();
                  doc.write(content);
                  doc.close();
      
                  doc.execCommand('SaveAs', null, filename);
                }, 200);
      
              }
      
              function saveFileName() {
      
                if (nowin.location.protocol.toLowerCase() === 'blob:')
                  return 'pcjs-app.html';
      
                var urlParts = nowin.location.pathname.split('/');
                var currentFileName = decodeURI(urlParts[urlParts.length - 1]);
                var lastDot = currentFileName.indexOf('.');
                if (lastDot > 0) {
                  currentFileName = currentFileName.slice(0, lastDot) + '.html';
                }
                else {
                  currentFileName += '.html';
                }
                return currentFileName;
              }
            }
          }
        }
      
        (<any>shell).start = start;
      
      }
    • index.html
      <!doctyle html>
      <title>Embedded PC (using pcjs.org by Jeff Parsons @jeffpar)</title>
      
      
      <script data-legit=mi>
        // ONERROR
        <%=embedFile('boot/onerror.js')%>
      //# sourceURL=boot/onerror.js
      </script>
      
      
      <script data-legit=mi>
        // EARLYBOOT
        earlyBoot(window);
      
        	<%=typescriptBuild('boot/*')%>
      
          <%=embedFile('pcjs-embed/boot/bootUI.js')%>
      //# sourceURL=/boot/base.js
      </script>
      
      
      <script data-legit=mi>
      
        // LOADER
      <%=typescriptBuild('load/*', 'persistence/*', 'boot/base.d.ts', 'typings/*')%>
      //# sourceURL=/load/shellLoader.ts.js
      </script>
      
      <!-- total 12Mb, saved <%=(function() {
      
      // TOTAL SUMMARY
      var monthsPrettyCase = ('Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec').split('|');
      
      var saveDate = new Date();
      var dtText =
        saveDate.getDate() + ' ' +
        monthsPrettyCase[saveDate.getMonth()] + ' ' +
        saveDate.getFullYear() + ' ' +
        num2(saveDate.getHours()) + ':' +
        num2(saveDate.getMinutes()) + ':' +
        num2(saveDate.getSeconds()) + '.' +
        (+saveDate).toString().slice(-3);
      
      var saveDateLocalStr = saveDate.toString();
      var gmtMatch = (/(GMT\s*[\-\+]\d+(\:\d+)?)/i).exec(saveDateLocalStr);
      if (gmtMatch)
      	dtText += ' ' + gmtMatch[1];
      
      return dtText;
      
      function num2(n) { return n <= 9 ? '0' + n : '' + n; }
      
      })()
      %> -->
      
      <!-- /shell/components.css
      <%=embedFile('/pcjs-embed/versions/pcjs/1.18.3/components.css')%>
      -->
      
      <!-- /pcjs-embed/components.xsl
      <%=embedFile('/pcjs-embed/versions/pcjs/1.18.3/components.xsl')%>
      -->
      
      <!-- /shell/pcjs-embed.js
      <%=typescriptBuild('pcjs-embed/*', 'persistence/API.d.ts', 'typings/*')%>
      -->
      
      <!-- /shell/buildMessage.js
      
      var shell;
      if (!shell) shell = {};
      shell.buildMessage = 'Built at <%=(function() {
      
      var monthsPrettyCase = ('Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec').split('|');
      
      var saveDate = new Date();
      var dtText =
        saveDate.getDate() + ' ' +
        monthsPrettyCase[saveDate.getMonth()] + ' ' +
        saveDate.getFullYear() + ' ' +
        num2(saveDate.getHours()) + ':' +
        num2(saveDate.getMinutes()) + ':' +
        num2(saveDate.getSeconds()) + '.' +
        (+saveDate).toString().slice(-3);
      
      var saveDateLocalStr = saveDate.toString();
      var gmtMatch = (/(GMT\s*[\-\+]\d+(\:\d+)?)/i).exec(saveDateLocalStr);
      if (gmtMatch)
      	dtText += ' ' + gmtMatch[1];
      
      return dtText;
      
      function num2(n) { return n <= 9 ? '0' + n : '' + n; }
      
      })()
      %>';
      
      shell.buildTime = <%=+new Date()%>;
      -->
      
      <!-- /shell/!onerror.js
      <%=embedFile('/boot/onerror.js')%>
      -->
      
      
      <%=(function() {
         // EMBEDDED DEMO FILES
      	var drive = portabled.build.processTemplate.mainDrive;
      	var files = drive.files();
      	var fileDump = [];
        for (var i = 0; i < files.length; i++) {
          if (!/^\/pcjs\-embed\/demos\//.test(files[i])) continue; // only include pcjs files
      
          var content = drive.read(files[i]);
      		var embedFN = files[i];
      
      		// wrapping pcjs (this is dormant: pcjs is included uncompiled)
          if (/.js$/.test(files[i])) {
      			var fnName = files[i].split('/').slice(-1)[0].replace(/\./g, '').replace(/\-/g, '');
      			content =
      				'function '+fnName+'() { \n'+
      				'var window = this.window, document = this.document, XMLHttpRequest = this.XMLHttpRequest, localStorage = this.localStorage; \n'+
      				content+' \n'+
      				'if (!this.embedPC) this.embedPC = embedPC; \n'+
      				'}';
      			embedFN = '/shell'+embedFN;
          }
      
          var decoratedContent = content.
      			replace(/\-\-(\**)\>/g, '--*$1>').
      			replace(/\<(\**)\!/g, '<*$1!');
          console.log('Embedding '+embedFN+'...');
      	  fileDump.push('<'+'!'+'-- '+embedFN);
          fileDump.push(decoratedContent);
          fileDump.push('--'+'!'+'>');
        }
      	return fileDump.join('\n');
      
      })()%>
      
      <!-- /shell/pc.js
      
      function pcjs(compCallback) {
      var window = this.window, document = this.document, XMLHttpRequest = this.XMLHttpRequest, localStorage = this.localStorage;
      
      <%=(function() {
         // PCJS uncompiled
      
      	var drive = portabled.build.processTemplate.mainDrive;
      
         var fileList = [
      		"/modules/shared/lib/defines.js",
      		"/modules/shared/lib/diskapi.js",
      		"/modules/shared/lib/dumpapi.js",
      		"/modules/shared/lib/reportapi.js",
      		"/modules/shared/lib/userapi.js",
      		"/modules/shared/lib/strlib.js",
      		"/modules/shared/lib/usrlib.js",
      		"/modules/shared/lib/weblib.js",
      		"/modules/shared/lib/component.js",
      		"/modules/pcjs/lib/defines.js",
      		"/modules/pcjs/lib/nodebugger.js",
      		"/modules/pcjs/lib/interrupts.js",
      		"/modules/pcjs/lib/messages.js",
      		"/modules/pcjs/lib/panel.js",
      		"/modules/pcjs/lib/bus.js",
      		"/modules/pcjs/lib/memory.js",
      		"/modules/pcjs/lib/cpu.js",
      		"/modules/pcjs/lib/x86.js",
      		"/modules/pcjs/lib/x86seg.js",
      		"/modules/pcjs/lib/x86cpu.js",
      		"/modules/pcjs/lib/x86func.js",
      		"/modules/pcjs/lib/x86ops.js",
      		"/modules/pcjs/lib/x86op0f.js",
      		"/modules/pcjs/lib/x86modb.js",
      		"/modules/pcjs/lib/x86modw.js",
      		"/modules/pcjs/lib/x86modb16.js",
      		"/modules/pcjs/lib/x86modw16.js",
      		"/modules/pcjs/lib/x86modb32.js",
      		"/modules/pcjs/lib/x86modw32.js",
      		"/modules/pcjs/lib/x86modsib.js",
      		"/modules/pcjs/lib/chipset.js",
      		"/modules/pcjs/lib/rom.js",
      		"/modules/pcjs/lib/ram.js",
      		"/modules/pcjs/lib/keyboard.js",
      		"/modules/pcjs/lib/video.js",
      		"/modules/pcjs/lib/serialport.js",
      		"/modules/pcjs/lib/mouse.js",
      		"/modules/pcjs/lib/disk.js",
      		"/modules/pcjs/lib/fdc.js",
      		"/modules/pcjs/lib/hdc.js",
      		"/modules/pcjs/lib/state.js",
      		"/modules/pcjs/lib/computer.js",
      		"/modules/shared/lib/embed.js"
         ];
      
         var output = [];
      
         for (var i = 0; i < fileList.length; i++) {
      
      		output.push('');
      		output.push('// '+fileList[i]);
      
          var content = drive.read('/pcjs-embed'+fileList[i]);
      		content = content.replace(/var APPNAME \= \"\"/g, 'var APPNAME = "PCjs"');
      
          var fnName = fileList[i].slice(1).replace('/', '_');
      
          var decoratedContent = content.
      			replace(/\-\-(\**)\>/g, '--*$1>').
      			replace(/\<(\**)\!/g, '<*$1!');
          output.push(decoratedContent);
      
      	 }
      
         return output.join('\n');
      
      })()%>
      
      
      var reported_computer_wait = false;
      function waitOverride(a,b,c,d) {
      	if (!reported_computer_wait) {
      		reported_computer_wait = true;
      		var _comp = this;
      		setTimeout(function() {
      			compCallback(_comp);
      		}, 100);
      	}
      	return this._wait(a,b,c,d);
      }
      
      Computer.prototype._wait = Computer.prototype.wait;
      Computer.prototype.wait = waitOverride;
      }
      -->
      
      <!-- /shell/z-pcjs-override.css
      .pcjs-container {
      	overflow: hidden;
      }
      .pcjs-menu {
      	display: none;
      }
      .pcjs-video .pcjs-control {
      	display: none;
      }
      -->
    • redirectLocalStorage.ts
      module shell {
      
        export function redirectLocalStorage(drive: persistence.Drive, cachePath: string) {
      
          var keys: string[] = null;
      
          function updateKeys() {
            if (keys) return;
            keys = [];
            var files = drive.files();
            for (var i = 0; i < files.length; i++) {
              if (files[i].length > cachePath.length && files[i].slice(0, cachePath.length) === cachePath) {
                keys.push(files[i].slice(cachePath.length));
              }
            }
          }
      
          class LocalStorageOverride {
      
            constructor() {
              Object.defineProperty(this, 'length', {
                get: () => {
                  updateKeys();
                  return keys.length;
                }
              });
            }
      
            key(index: number) {
              updateKeys();
              return keys[index];
            }
      
            getItem(key: string) {
              console.log('localStorage.getItem(', key, ')');
              return drive.read(cachePath + key);
            }
      
            setItem(key: string, value: string) {
              console.log('localStorage.setItem(', key, ', ', value, ')');
              drive.write(cachePath + key, value || '');
              keys = null;
            }
      
            removeItem(key: string) {
              console.log('localStorage.removeItem(', key, ')');
              drive.write(cachePath + key, null);
              keys = null;
            }
          }
      
          return new LocalStorageOverride();
        }
      
      }
    • redirectWindow.ts
      module shell {
      
        export function redirectWindow(drive: persistence.Drive, window: Window, cachePath: string, cwd: string) {
      
          function WindowOverride() {
            var _this = this;
      
            var xhrOverride = redirectXMLHttpRequest(drive, cwd);
            var lsOverride = redirectLocalStorage(drive, cachePath);
            Object.defineProperty(this, 'XMLHttpRequest', { get: function() { return xhrOverride; } });
            Object.defineProperty(this, 'localStorage', { get: function() { return lsOverride; } });
            Object.defineProperty(this, 'window', { get: function() { return _this; } });
            var _onload;
            Object.defineProperty(this, 'onload', { get: function() { return _onload; }, set: function(v) { _onload = v; } });
            Object.defineProperty(this, 'addEventListener', {
              get: function() {
                return function(evtName: string, handler: any, other: any) {
                  if (evtName === 'unload') {
                    _this.onunload = handler;
                  }
                  else if (evtName === 'onbeforeunload') {
                    _this.onbeforeunload = handler;
                  }
                  else {
                    window.addEventListener(evtName, handler, other);
                  }
                }
              }
            });
            Object.defineProperty(this, 'alert', { get: function() { function redirectAlert(msg) { window.console.log('alert', msg); }; return redirectAlert; } });
      
            function defineProxy(k) {
              Object.defineProperty(_this, k, {
                get: function() {
                  var res: any = window[k];
                  if (typeof res === 'function' && !/pcjs/.test(k)) {
                    return (<Function>res).bind(window);
                  }
                  return res;
                },
                set: function(v) {
                  window[k] = v;
                }
              });
            }
            for (var k in window) {
              if (!(k in this)) {
                defineProxy(k);
              }
            }
            if (Object.getOwnPropertyNames) {
              var props = Object.getOwnPropertyNames(window) 
              for (var i = 0; i < props.length; i++) {
                if (!(props[i] in this)) {
                  defineProxy(props[i]);
                }
              }
            }
      
      
          }
      
          var win: Window = new WindowOverride();
      
          return win;
        }
      
      }
    • redirectXMLHttpRequest.ts
      module shell {
      
        export function redirectXMLHttpRequest(drive: persistence.Drive, cwd?: string) {
      
          class XMLHttpRequestOverride {
      
            private _url: string;
      
            status = 0;
            readyState = 0;
            responseText: string = null;
            onreadystatechange: () => void = null;
      
            open(method: string, url: string) { this._url = url; }
      
            send() {
              var path = '/pcjs-embed' + (this._url.charAt(0) === '/' ? '' : cwd) + this._url;
              this.responseText = drive.read(path);
              if (this.responseText) {
                console.log('responding ' + path + ' [' + this.responseText.length + ']');
              }
              else {
                console.log('failed to load ' + path);
              }
              this.status = 200;
              this.readyState = 4;
              setTimeout(() => this.onreadystatechange());
            }
          }
      
          return XMLHttpRequestOverride;
      
        }
      }
  • persistence
    • attached
      • indexedDB.ts
        module persistence {
        
          function getIndexedDB() {
            try {
              return typeof indexedDB === 'undefined' || typeof indexedDB.open !== 'function' ? null : indexedDB;
            }
            catch (error) {
              return null;
            }
          }
        
          export module attached.indexedDB {
        
            export var name = 'indexedDB';
        
            export function detect(uniqueKey: string, callback: (detached: Drive.Detached) => void): void {
              try {
                detectCore(uniqueKey, callback);
              }
              catch (error) {
                callback(null);
              }
            }
        
            function detectCore(uniqueKey: string, callback: (detached: Drive.Detached) => void): void {
        
              var indexedDBInstance = getIndexedDB();
              if (!indexedDBInstance) {
                callback(null);
                return;
              }
        
              var dbName = uniqueKey || 'portabled';
        
              var openRequest = indexedDBInstance.open(dbName, 1);
              openRequest.onerror = (errorEvent) => callback(null);
        
              openRequest.onupgradeneeded = createDBAndTables;
        
              openRequest.onsuccess = (event) => {
                var db: IDBDatabase = openRequest.result;
        
                try {
                  var transaction = db.transaction(['files', 'metadata']);
                  // files mentioned here, but not really used to detect
                  // broken multi-store transaction implementation in Safari
        
                  transaction.onerror = (errorEvent) => callback(null);
        
                  var metadataStore = transaction.objectStore('metadata');
                  var filesStore = transaction.objectStore('files');
                  var editedUTCRequest = metadataStore.get('editedUTC');
                }
                catch (getStoreError) {
                  callback(null);
                  return;
                }
        
                if (!editedUTCRequest) {
                  callback(null);
                  return;
                }
        
                editedUTCRequest.onerror = (errorEvent) => {
                  var detached = new IndexedDBDetached(db, null);
                  callback(detached);
                };
        
                editedUTCRequest.onsuccess = (event) => {
                  var result: MetadataData = editedUTCRequest.result;
                  var detached = new IndexedDBDetached(db, result && typeof result.value === 'number' ? result.value : null);
                  callback(detached);
                };
              }
        
        
              function createDBAndTables() {
                var db: IDBDatabase = openRequest.result;
                var filesStore = db.createObjectStore('files', { keyPath: 'path' });
                var metadataStore = db.createObjectStore('metadata', { keyPath: 'property' })
              }
            }
        
        
        
            class IndexedDBDetached implements Drive.Detached {
        
              constructor(
                private _db: IDBDatabase,
                public timestamp: number) {
              }
        
              applyTo(mainDrive: Drive, callback: Drive.Detached.CallbackWithShadow): void {
                var transaction = this._db.transaction(['files', 'metadata'], 'readwrite');
                var metadataStore = transaction.objectStore('metadata');
                var filesStore = transaction.objectStore('files');
        
                var countRequest = filesStore.count();
                countRequest.onerror = (errorEvent) => {
                  console.error('Could not count files store.');
                  callback(null);
                };
        
                countRequest.onsuccess = (event) => {
        
                  var storeCount: number = countRequest.result;
        
                  var cursorRequest = filesStore.openCursor();
                  cursorRequest.onerror = (errorEvent) => callback(null);
        
                  // to cleanup any files which content is the same on the main drive
                  var deleteList: string[] = [];
                  var anyLeft = false;
        
                  var processedCount = 0;
        
                  cursorRequest.onsuccess = (event) => {
                    var cursor: IDBCursor = cursorRequest.result;
        
                    if (!cursor) {
        
                      // cleaning up files whose content is duplicating the main drive
                      if (anyLeft) {
                        for (var i = 0; i < deleteList.length; i++) {
                          filesStore['delete'](deleteList[i]);
                        }
                      }
                      else {
                        filesStore.clear();
                        metadataStore.clear();
                      }
        
                      callback(new IndexedDBShadow(this._db, this.timestamp));
                      return;
                    }
        
                    if (callback.progress)
                      callback.progress(processedCount, storeCount);
                    processedCount++;
        
                    var result: FileData = (<any>cursor).value;
                    if (result && result.path) {
        
                      var existingContent = mainDrive.read(result.path);
                      if (existingContent === result.content) {
                        deleteList.push(result.path);
                      }
                      else {
                        mainDrive.timestamp = this.timestamp;
                        mainDrive.write(result.path, result.content);
                        anyLeft = true;
                      }
                    }
        
                    cursor['continue']();
                  }; // cursorRequest.onsuccess
        
                }; // countRequest.onsuccess
        
              }
        
              purge(callback: Drive.Detached.CallbackWithShadow): void {
                var transaction = this._db.transaction(['files', 'metadata'], 'readwrite');
        
                var filesStore = transaction.objectStore('files');
                filesStore.clear();
        
                var metadataStore = transaction.objectStore('metadata');
                metadataStore.clear();
        
                callback(new IndexedDBShadow(this._db, -1));
              }
        
            }
        
            class IndexedDBShadow implements Drive.Shadow {
        
              constructor(private _db: IDBDatabase, public timestamp: number) {
              }
        
              write(file: string, content: string) {
                var transaction = this._db.transaction(['files', 'metadata'], 'readwrite');
                var filesStore = transaction.objectStore('files');
                var metadataStore = transaction.objectStore('metadata');
        
                // no file deletion here: we need to keep account of deletions too!
                var fileData: FileData = {
                  path: file,
                  content: content,
                  state: null
                };
        
                var putFile = filesStore.put(fileData);
        
                var md: MetadataData = {
                  property: 'editedUTC',
                  value: Date.now()
                };
        
                metadataStore.put(md);
        
              }
            }
        
            interface FileData {
              path: string;
              content: string;
              state: string;
            }
        
            interface MetadataData {
              property: string;
              value: any;
            }
        
        
          }
        
        }
      • localStorage.ts
        module persistence {
        
          function getLocalStorage() {
            return typeof localStorage === 'undefined' || typeof localStorage.length !== 'number' ? null : localStorage;
          }
        
          // is it OK&
          export module attached.localStorage {
        
            export var name = 'localStorage';
        
            export function detect(uniqueKey: string, callback: (detached: Drive.Detached) => void): void {
              var localStorageInstance = getLocalStorage();
              if (!localStorageInstance) {
                callback(null);
                return;
              }
        
              var access = new LocalStorageAccess(localStorageInstance, uniqueKey);
              var dt = new LocalStorageDetached(access);
              callback(dt);
            }
        
            class LocalStorageAccess {
              private _cache: { [key: string]: string; } = {};
        
              constructor(private _localStorage: Storage, private _prefix: string) {
              }
        
              get (key: string): string {
                var k = this._expandKey(key);
                var r = this._localStorage.getItem(k);
                return r;
              }
            
            	set(key: string, value: string): void {
                var k = this._expandKey(key);
                return this._localStorage.setItem(k, value);
              }
        
              remove(key: string): void {
                var k = this._expandKey(key);
                return this._localStorage.removeItem(k);
              }
        
              keys(): string[] {
                var result: string[] = [];
                var len = this._localStorage.length;
                for (var i = 0; i < len; i++) {
                  var str = this._localStorage.key(i);
                  if (str.length > this._prefix.length && str.slice(0, this._prefix.length) === this._prefix)
                    result.push(str.slice(this._prefix.length));
                }
                return result;
              }
        
              private _expandKey(key: string): string {
                var k: string;
        
                if (!key) {
                  k = this._prefix;
                }
                else {
                  k = this._cache[key];
                  if (!k)
                    this._cache[key] = k = this._prefix + key;
                }
                
                return k;
              }
          	}
        
        
            class LocalStorageDetached implements Drive.Detached {
        
              timestamp: number = 0;
        
              constructor(private _access: LocalStorageAccess) {
                var timestampStr = this._access.get('*timestamp');
                if (timestampStr && timestampStr.charAt(0)>='0' && timestampStr.charAt(0)<='9') {
                  try {
                    this.timestamp = parseInt(timestampStr);
                  }
                  catch (parseError) {
                  }
                }
              }
        
              applyTo(mainDrive: Drive, callback: Drive.Detached.CallbackWithShadow): void {
                var keys = this._access.keys();
                for (var i = 0; i < keys.length; i++) {
                  var k = keys[i];
                  if (k.charAt(0)==='/') {
                    var value = this._access.get(k);
                    mainDrive.write(k, value);
                  }
                }
                
                var shadow = new LocalStorageShadow(this._access, mainDrive.timestamp);
                callback(shadow);
              }
        
              purge(callback: Drive.Detached.CallbackWithShadow): void {
                var keys = this._access.keys();
                for (var i = 0; i < keys.length; i++) {
                  var k = keys[i];
                  if (k.charAt(0)==='/') {
                    var value = this._access.remove(k);
                  }
                }
        
                var shadow = new LocalStorageShadow(this._access, this.timestamp);
                callback(shadow);
              }
        
            }
            
            class LocalStorageShadow implements Drive.Shadow {
        
              constructor(private _access: LocalStorageAccess, public timestamp: number) {
              }
        
              write(file: string, content: string) {
                this._access.set(file, content);
                this._access.set('*timestamp', <any>this.timestamp);
              }
        
            }
        
          }
          
        } 
      • webSQL.ts
        module persistence {
        
          function getOpenDatabase() {
            return typeof openDatabase !== 'function' ? null : openDatabase;
          }
        
          export module attached.webSQL {
        
            export var name = 'webSQL';
        
            export function detect(uniqueKey: string, callback: (detached: Drive.Detached) => void): void {
        
              var openDatabaseInstance = getOpenDatabase();
              if (!openDatabaseInstance) {
                callback(null);
                return;
              }
        
              var dbName = uniqueKey || 'portabled';
        
              var db = openDatabase(
                dbName, // name
                1, // version
                'Portabled virtual filesystem data', // displayName
                1024 * 1024); // size
              // upgradeCallback?
        
        
              db.readTransaction(
                transaction => {
                  transaction.executeSql(
                    'SELECT value from "*metadata" WHERE name=\'editedUTC\'',
                    [],
                    (transaction, result) => {
                      var editedValue: number = null;
                      if (result.rows && result.rows.length === 1) {
                        var editedValueStr = result.rows.item(0).value;
                        if (typeof editedValueStr === 'string') {
                          try {
                            editedValue = parseInt(editedValueStr);
                          }
                          catch (error) {
                            // unexpected value for the timestamp, continue as if no value found
                          }
                        }
                        else if (typeof editedValueStr === 'number') {
                          editedValue = editedValueStr;
                        }
                      }
        
                      callback(new WebSQLDetached(db, editedValue || 0, true));
                    },
                    (transaction, sqlError) => {
                      // no data
                      callback(new WebSQLDetached(db, 0, false));
                    });
                },
                sqlError=> {
                  // failed to load
                  callback(null);
                });
        
            }
        
            class WebSQLDetached implements Drive.Detached {
        
              constructor(
                private _db: Database,
                public timestamp: number,
                private _metadataTableIsValid: boolean) {
              }
        
              applyTo(mainDrive: Drive, callback: Drive.Detached.CallbackWithShadow): void {
                this._db.readTransaction(
                  transaction => listAllTables(
                    transaction,
                    tables => {
        
                      var ftab = getFilenamesFromTables(tables);
        
                      this._applyToWithFiles(transaction, ftab, mainDrive, callback);
                    },
                    sqlError => {
                      reportSQLError('Failed to list tables for the webSQL database.', sqlError);
                      callback(new WebSQLShadow(this._db, this.timestamp, this._metadataTableIsValid));
                    }),
                  sqlError => {
                    reportSQLError('Failed to open read transaction for the webSQL database.', sqlError);
                    callback(new WebSQLShadow(this._db, this.timestamp, this._metadataTableIsValid));
                  });
              }
        
              purge(callback: Drive.Detached.CallbackWithShadow): void {
                this._db.transaction(
                  transaction => listAllTables(
                    transaction,
                    tables => {
                      this._purgeWithTables(transaction, tables, callback);
                    },
                    sqlError => {
                      reportSQLError('Failed to list tables for the webSQL database.', sqlError);
                      callback(new WebSQLShadow(this._db, 0, false));
                    }),
                  sqlError => {
                    reportSQLError('Failed to open read-write transaction for the webSQL database.', sqlError);
                    callback(new WebSQLShadow(this._db, 0, false));
                  });
              }
        
              private _applyToWithFiles(transaction: SQLTransaction, ftab: { file: string; table: string; }[], mainDrive: Drive, callback: Drive.Detached.CallbackWithShadow): void {
        
                if (!ftab.length) {
                  callback(new WebSQLShadow(this._db, this.timestamp, this._metadataTableIsValid));
                  return;
                }
        
                var reportedFileCount = 0;
        
                var completeOne = () => {
                  reportedFileCount++;
                  if (reportedFileCount === ftab.length) {
                    callback(new WebSQLShadow(this._db, this.timestamp, this._metadataTableIsValid));
                  }
                };
        
                var applyFile = (file: string, table: string) => {
                  transaction.executeSql(
                    'SELECT * FROM "' + table + '"',
                    [],
                    (transaction, result) => {
                      if (result.rows.length) {
                        var row = result.rows.item(0);
                        if (row.value === null)
                          mainDrive.write(file, null);
                        else if (typeof row.value === 'string')
                          mainDrive.write(file, fromSqlText(row.value));
                      }
                      completeOne();
                    },
                    sqlError => {
                      completeOne();
                    });
                };
        
                for (var i = 0; i < ftab.length; i++) {
                  applyFile(ftab[i].file, ftab[i].table);
                }
        
              }
        
              private _purgeWithTables(transaction: SQLTransaction, tables: string[], callback: Drive.Detached.CallbackWithShadow) {
                if (!tables.length) {
                  callback(new WebSQLShadow(this._db, 0, false));
                  return;
                }
        
                var droppedCount = 0;
        
                var completeOne = () => {
                  droppedCount++;
                  if (droppedCount === tables.length) {
                    callback(new WebSQLShadow(this._db, 0, false));
                  }
                };
        
                for (var i = 0; i < tables.length; i++) {
                  transaction.executeSql(
                    'DROP TABLE "' + tables[i] + '"',
                    [],
                    (transaction, result) => {
                      completeOne();
                    },
                    (transaction, sqlError) => {
                      reportSQLError('Failed to drop table for the webSQL database.', sqlError);
                      completeOne();
                    });
                }
              }
        
            }
        
            class WebSQLShadow implements Drive.Shadow {
        
              private _cachedUpdateStatementsByFile: { [name: string]: string; } = {};
              private _closures = {
                updateMetadata: (transaction: SQLTransaction) => this._updateMetadata(transaction)
              };
        
              constructor(private _db: Database, public timestamp: number, private _metadataTableIsValid: boolean) {
              }
        
              write(file: string, content: string) {
        
                if (content || typeof content === 'string') {
                  this._updateCore(file, content);
                }
                else {
                  this._dropFileTable(file);
                }
              }
        
              private _updateCore(file: string, content: string) {
                var updateSQL = this._cachedUpdateStatementsByFile[file];
                if (!updateSQL) {
                  var tableName = mangleDatabaseObjectName(file);
                  updateSQL = this._createUpdateStatement(file, tableName);
                }
                this._db.transaction(
                  transaction => {
                    transaction.executeSql(
                      updateSQL,
                      ['content', content],
                      this._closures.updateMetadata,
                      (transaction, sqlError) => this._createTableAndUpdate(transaction, file, tableName, updateSQL, content));
                  },
                  sqlError => {
                    reportSQLError('Transaction failure updating file "' + file + '".', sqlError);
                  });
              }
        
              private _createTableAndUpdate(transaction: SQLTransaction, file: string, tableName: string, updateSQL: string, content: string) {
                if (!tableName)
                  tableName = mangleDatabaseObjectName(file);
        
                transaction.executeSql(
                  'CREATE TABLE "' + tableName + '" (name PRIMARY KEY, value)',
                  [],
                  (transaction, result) => {
                    transaction.executeSql(
                      updateSQL,
                      ['content', content],
                      this._closures.updateMetadata,
                      (transaction, sqlError) => {
                        reportSQLError('Failed to update table "' + tableName + '" for file "' + file + '" after creation.', sqlError);
                      });
                  },
                  (transaction, sqlError) => {
                    reportSQLError('Failed to create a table "' + tableName + '" for file "' + file + '".', sqlError);
                  });
              }
        
              private _dropFileTable(file: string) {
                var tableName = mangleDatabaseObjectName(file);
                this._db.transaction(
                  transaction => {
                    transaction.executeSql(
                      'DROP TABLE "' + tableName + '"',
                      [],
                      this._closures.updateMetadata,
                      (transaction, sqlError) => {
                        reportSQLError('Failed to drop table "' + tableName + '" for file "' + file + '".', sqlError);
                      });
                  },
                  sqlError => {
                    reportSQLError('Transaction failure dropping table "' + tableName + '" for file "' + file + '".', sqlError);
                  });
              }
        
              private _updateMetadata(transaction: SQLTransaction) {
                var updateMetadataSQL = 'INSERT OR REPLACE INTO "*metadata" VALUES (?,?)';
                transaction.executeSql(
                  updateMetadataSQL,
                  ['editedUTC', this.timestamp],
                  (transaction, result) => { }, // TODO: generate closure statically
                  (transaction, error) => {
                    transaction.executeSql(
                      'CREATE TABLE "*metadata" (name PRIMARY KEY, value)',
                      [],
                      (transaction, result) => {
                        transaction.executeSql(updateMetadataSQL, [], () => { }, () => { });
                      },
                      (transaction, sqlError) => {
                        reportSQLError('Failed to update metadata table after creation.', sqlError);
                      });
                  });
        
              }
        
              private _createUpdateStatement(file: string, tableName: string): string {
                return this._cachedUpdateStatementsByFile[file] =
                  'INSERT OR REPLACE INTO "' + tableName + '" VALUES (?,?)';
              }
            }
        
        
            function mangleDatabaseObjectName(name: string): string {
              // no need to polyfill btoa, if webSQL exists
              if (name.toLowerCase() === name)
                return name;
              else
                return '=' + btoa(name);
            }
        
            function unmangleDatabaseObjectName(name: string): string {
              if (!name || name.charAt(0) === '*') return null;
        
              if (name.charAt(0) !== '=') return name;
        
              try {
                return atob(name.slice(1));
              }
              catch (error) {
                return name;
              }
            }
        
            export function listAllTables(
              transaction: SQLTransaction,
              callback: (tables: string[]) => void,
              errorCallback: (sqlError: SQLError) => void) {
              transaction.executeSql(
                'SELECT tbl_name  from sqlite_master WHERE type=\'table\'',
                [],
                (transaction, result) => {
                  var tables: string[] = [];
                  for (var i = 0; i < result.rows.length; i++) {
                    var row = result.rows.item(i);
                    var table = row.tbl_name;
                    if (!table || (table[0] !== '*' && table.charAt(0) !== '=' && table.charAt(0) !== '/')) continue;
                    tables.push(row.tbl_name);
                  }
                  callback(tables);
                },
                (transaction, sqlError) => errorCallback(sqlError));
            }
        
            function getFilenamesFromTables(tables: string[]) {
              var filenames: { table: string; file: string; }[] = [];
              for (var i = 0; i < tables.length; i++) {
                var file = unmangleDatabaseObjectName(tables[i]);
                if (file)
                  filenames.push({ table: tables[i], file: file });
              }
              return filenames;
            }
        
            function toSqlText(text: string) {
              if (text.indexOf('\u00FF') < 0 && text.indexOf('\u0000') < 0) return text;
        
              return text.replace(/\u00FF/g, '\u00FFf').replace(/\u0000/g, '\u00FF0');
            }
        
            function fromSqlText(sqlText: string) {
              if (sqlText.indexOf('\u00FF') < 0 && sqlText.indexOf('\u0000') < 0) return sqlText;
        
              return sqlText.replace(/\u00FFf/g, '\u00FF').replace(/\u00FF0/g, '\u0000');
            }
        
            function reportSQLError(message: string, sqlError: SQLError);
            function reportSQLError(sqlError: SQLError);
            function reportSQLError(message, sqlError?) {
              if (typeof console !== 'undefined' && typeof console.error === 'function') {
                if (sqlError)
                  console.error(message, sqlError);
                else
                  console.error(sqlError);
              }
            }
        
        
          }
        
        }
    • dom
      • CommentHeader.ts
        module persistence.dom {
        
          export class CommentHeader {
        
            header: string;
            contentOffset: number;
            contentLength: number;
        
            constructor(public node: Comment) {
              var headerLine: string;
              var content: string;
              if (typeof node.substringData === 'function'
                && typeof node.length === 'number') {
                var chunkSize = 128;
        
                if (node.length >= chunkSize) {
                  // TODO: cut chunks off the start and look for newlines
                  var headerChunks: string[] = [];
                  while (headerChunks.length * chunkSize < node.length) {
                    var nextChunk = node.substringData(headerChunks.length * chunkSize, chunkSize);
                    var posEOL = nextChunk.search(/\r|\n/);
                    if (posEOL < 0) {
                      headerChunks.push(nextChunk);
                      continue;
                    }
        
                    this.header = headerChunks.join('') + nextChunk.slice(0, posEOL);
                    this.contentOffset = this.header.length + 1; // if header is separated by a single CR or LF
        
                    if (posEOL === nextChunk.length - 1) { // we may have LF part of CRLF in the next chunk!
                      if (nextChunk.charAt(nextChunk.length - 1) === '\r'
                        && node.substringData((headerChunks.length + 1) * chunkSize, 1) === '\n')
                        this.contentOffset++;
                    }
                    else if (nextChunk.slice(posEOL, posEOL + 2) === '\r\n') {
                      this.contentOffset++;
                    }
        
                    this.contentLength = node.length - this.contentOffset;
                    return;
                  }
        
                  this.header = headerChunks.join('');
                  this.contentOffset = this.header.length;
                  this.contentLength = node.length - content.length;
                  return;
                }
              }
        
              var wholeCommentText = node.nodeValue;
              var posEOL = wholeCommentText.search(/\r|\n/);
              if (posEOL < 0) {
                this.header = wholeCommentText;
                this.contentOffset = wholeCommentText.length;
                this.contentLength = wholeCommentText.length - this.contentOffset;
                return;
              }
        
              this.contentOffset = wholeCommentText.slice(posEOL, posEOL + 2) === '\r\n' ?
                posEOL + 2 : // ends with CRLF
                posEOL + 1; // ends with singular CR or LF
        
              this.header = wholeCommentText.slice(0, posEOL),
              this.contentLength = wholeCommentText.length - this.contentOffset
            }
        
          }
        
        }
      • DOMDrive.ts
        module persistence.dom {
        
          export class DOMDrive implements Drive {
        
            private _byPath: { [path: string]: DOMFile; } = {};
        
            public timestamp: number;
        
            constructor(
              private _totals: DOMTotals,
              files: DOMFile[],
              private _document: DOMDrive.DocumentSubset) {
        
              this.timestamp = this._totals ? this._totals.timestamp : 0;
        
              for (var i = 0; i < files.length; i++) {
                this._byPath[files[i].path] = files[i];
              }
            }
        
            files(): string[] {
        
              if (typeof Object.keys === 'string') {
                var result = Object.keys(this._byPath);
              }
              else {
                var result: string[] = [];
                for (var k in this._byPath) if (this._byPath.hasOwnProperty(k)) {
                  result.push(k);
                }
              }
        
              result.sort();
        
              return result;
            }
        
            read(file: string): string {
              var file = normalizePath(file);
              var f = this._byPath[file];
              if (!f)
                return null;
              else
                return f.read();
            }
        
            write(file: string, content: string) {
        
              var totalDelta = 0;
        
              var file = normalizePath(file);
              var f = this._byPath[file];
        
              if (content === null) {
                // removal
                if (f) {
                  totalDelta -= f.contentLength;
                  f.node.parentElement.removeChild(f.node);
                  delete this._byPath[file];
                }
              }
              else {
                // addition
                if (f) {
                  var lengthBefore = f.contentLength;
                  f.write(content);
                  totalDelta += f.contentLength - lengthBefore;
                }
                else {
                  var comment = document.createComment('');
                  var f = new DOMFile(comment, file, null, 0, 0);
                  f.write(content);
                  this._document.body.appendChild(f.node);
                  this._byPath[file] = f;
                  totalDelta += f.contentLength;
                }
              }
        
              this._totals.timestamp = this.timestamp;
              this._totals.updateNode();
            }
        
          }
        
          export module DOMDrive {
        
            export interface DocumentSubset {
              body: HTMLBodyElementSubset;
        
              createComment(data: string): Comment;
            }
        
            export interface HTMLBodyElementSubset {
              appendChild(node: Node);
              insertBefore(newChild: Node, refNode?: Node);
              firstChild: Node;
            }
          }
        }
      • DOMFile.ts
        module persistence.dom {
        
          export class DOMFile {
        
            private _encodedPath: string = null;
        
            constructor(
              public node: Comment,
              public path: string,
              private _encoding: (text: string) => any,
              private _contentOffset: number,
              public contentLength: number) {
            }
        
            static tryParse(cmheader: CommentHeader): DOMFile {
        
              //    /file/path/continue
              //    "/file/path/continue"
              //    /file/path/continue   [encoding]
        
              var parseFmt = /^\s*((\/|\"\/)(\s|\S)*[^\]])\s*(\[((\s|\S)*)\])?\s*$/;
              var parsed = parseFmt.exec(cmheader.header);
              if (!parsed) return null; // does not match the format
        
              var filePath = parsed[1];
              var encodingName = parsed[5];
        
              if (filePath.charAt(0) === '"') {
                if (filePath.charAt(filePath.length - 1) !== '"') return null; // unpaired leading quote
                try {
                  if (typeof JSON !== 'undefined' && typeof JSON.parse === 'function')
                    filePath = JSON.parse(filePath);
                  else
                    filePath = eval(filePath); // security doesn't seem to be compromised, input is coming from the same file
                }
                catch (parseError) {
                  return null; // quoted path but wrong format (JSON expected)
                }
              }
              else { // filePath NOT started with quote
                if (encodingName) {
                  // regex above won't strip trailing whitespace from filePath if encoding is specified
                  // (because whitespace matches 'non-bracket' class too)
                  filePath = filePath.slice(0, filePath.search(/\S(\s*)$/) + 1);
                }
              }
        
              var encoding = encodings[encodingName || 'LF'];
              // invalid encoding considered a bogus comment, skipped
              if (encoding)
                return new DOMFile(cmheader.node, filePath, encoding, cmheader.contentOffset, cmheader.contentLength);
        
              return null;
            }
        
        
            read() {
        
              // proper HTML5 has substringData to read only a chunk
              // (that saves on string memory allocations
              // comparing to fetching the whole text including the file name)
              var contentText = typeof this.node.substringData === 'function' ?
                this.node.substringData(this._contentOffset, 1000000000) :
                this.node.nodeValue.slice(this._contentOffset);
        
              // XML end-comment is escaped when stored in DOM,
              // unescape it back
              var restoredText = contentText.
              	replace(/\-\-\*(\**)\>/g, '--$1>').
                replace(/\<\*(\**)\!/g, '<$1!');
        
              // decode
              var decodedText = this._encoding(restoredText);
        
              // update just in case it's been off
              this.contentLength = decodedText.length;
        
              return decodedText;
            }
        
            write(content: any) {
        
              var encoded = bestEncode(content);
              var protectedText = encoded.content.
              	replace(/\-\-(\**)\>/g, '--*$1>').
              	replace(/\<(\**)\!/g, '<*$1!');
        
              if (!this._encodedPath) {
                // most cases path is path,
                // but if anything is weird, it's going to be quoted
                // (actually encoded with JSON format)
                var encp = bestEncode(this.path, true /*escapePath*/);
                this._encodedPath = encp.content;
              }
        
              var leadText = ' ' + this._encodedPath + (encoded.encoding === 'LF' ? '' : ' [' + encoded.encoding + ']') + '\n';
              this.node.nodeValue = leadText + encoded.content;
        
              this._encoding = encodings[encoded.encoding || 'LF'];
              this._contentOffset = leadText.length;
        
              this.contentLength = content.length;
            }
        
          }
        
        }
      • DOMTotals.ts
        module persistence.dom {
        
          var monthsPrettyCase = ('Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec').split('|');
          var monthsUpperCase = ('Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec').toUpperCase().split('|');
        
          export class DOMTotals {
        
            constructor(
            	public timestamp: number,
            	public totalSize: number,
              private _node: Comment) {
            }
        
            static tryParse(cmheader: CommentHeader): DOMTotals {
        
              // TODO: preserve unknowns when parsing
        
              var parts = cmheader.header.split(',');
              var anythingParsed = false;
              var totalSize = 0;
              var timestamp = 0;
        
              for (var i = 0; i < parts.length; i++) {
        
                // total 234Kb
                // total 23
                // total 6Mb
        
                var totalFmt = /^\s*total\s+(\d*)\s*([KkMm])?b?\s*$/;
                var totalMatch = totalFmt.exec(parts[i]);
                if (totalMatch) {
                  try {
                    var total = parseInt(totalMatch[1]);
                    if ((totalMatch[2] + '').toUpperCase() === 'K')
                      total *= 1024;
                    else if ((totalMatch[2] + '').toUpperCase() === 'M')
                      total *= 1024 * 1024;
                    totalSize = total;
                    anythingParsed = true;
                  }
                  catch (totalParseError) { }
                  continue;
                }
        
                var savedFmt = /^\s*saved\s+(\d+)\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d+)\s+(\d+)\:(\d+)(\:(\d+(\.(\d+))?))\s*(GMT\s*[\-\+]?\d+\:?\d*)?\s*$/i;
                var savedMatch = savedFmt.exec(parts[i]);
                if (savedMatch) {
                  // 25 Apr 2015 22:52:01.231
                  try {
                    var savedDay = parseInt(savedMatch[1]);
                    var savedMonth = monthsUpperCase.indexOf(savedMatch[2].toUpperCase());
                    var savedYear = parseInt(savedMatch[3]);
                    if (savedYear < 100)
                      savedYear += 2000; // no 19xx notation anymore :-(
                    var savedHour = parseInt(savedMatch[4]);
                    var savedMinute = parseInt(savedMatch[5]);
                    var savedSecond = savedMatch[7] ? parseFloat(savedMatch[7]) : 0;
        
                    timestamp = new Date(savedYear, savedMonth, savedDay, savedHour, savedMinute, savedSecond | 0).valueOf();
                    timestamp += (savedSecond - (savedSecond | 0))*1000; // milliseconds
        
                    var savedGMTStr = savedMatch[10];
                    if (savedGMTStr) {
                      var gmtColonPos = savedGMTStr.indexOf(':');
                      if (gmtColonPos>0) {
                        var gmtH = parseInt(savedGMTStr.slice(0, gmtColonPos));
                        timestamp += gmtH * 60 /*min*/ * 60 /*sec*/ * 1000 /*msec*/;
                        var gmtM = parseInt(savedGMTStr.slice(gmtColonPos + 1));
                        timestamp += gmtM * 60 /*sec*/ * 1000 /*msec*/;
                      }
                    }
        
                    anythingParsed = true;
                  }
                  catch (savedParseError) { }
                }
        
              }
        
              if (anythingParsed)
                return new DOMTotals(timestamp, totalSize, cmheader.node);
              else
                return null;
            }
        
          	updateNode() {
              // TODO: update the node content
        
              // total 4Kb, saved 25 Apr 2015 22:52:01.231
              var newTotals =
                'total ' + (
                  this.totalSize < 1024 * 9 ? this.totalSize + '' :
                    this.totalSize < 1024 * 1024 * 9 ? ((this.totalSize / 1024) | 0) + 'Kb' :
                      ((this.totalSize / (1024 * 1024)) | 0) + 'Mb') + ', ' +
                'saved ';
        
              var saveDate = new Date(this.timestamp);
              newTotals +=
                saveDate.getDate() + ' ' +
                monthsPrettyCase[saveDate.getMonth()] + ' ' +
              	saveDate.getFullYear() + ' ' +
              	num2(saveDate.getHours()) + ':' +
                num2(saveDate.getMinutes()) + ':' +
                num2(saveDate.getSeconds()) + '.' +
                this.timestamp.toString().slice(-3);
        
              var saveDateLocalStr = saveDate.toString();
              var gmtMatch = (/(GMT\s*[\-\+]\d+(\:\d+)?)/i).exec(saveDateLocalStr);
              if (gmtMatch)
                newTotals += ' ' + gmtMatch[1];
        
              this._node.nodeValue = newTotals;
        
              function num2(n: number) {
                return n <= 9 ? '0' + n : '' + n;
              }
        
            }
        
          }
        
        
        }
      • parseDOMStorage.ts
        module persistence.dom {
        
          export function parseDOMStorage(document: parseDOMStorage.DocumentSubset): parseDOMStorage.ContinueParsing {
        
            var loadedFiles: DOMFile[] = [];
            var loadedTotals: DOMTotals;
            var lastNode: Node;
            var loadedSize = 0;
        
            return continueParsing();
        
            function continueParsing(): parseDOMStorage.ContinueParsing {
        
              continueParsingDOM(false);
        
              return {
                continueParsing,
                finishParsing,
                loadedSize,
                totalSize: loadedTotals ? loadedTotals.totalSize : 0,
                loadedFileCount: loadedFiles.length
              };
        
            }
        
            function finishParsing(): DOMDrive {
        
              continueParsingDOM(true);
        
              if (loadedTotals) {
                loadedTotals.totalSize = loadedSize;
                loadedTotals.updateNode();
              }
        
              var drive = new DOMDrive(loadedTotals, loadedFiles, document);
        
              return drive;
            }
        
            function continueParsingDOM(finish: boolean) {
              if (document.body) {
                if (!lastNode)
                  lastNode = document.body.firstChild;
        
                while (true) {
                  if (!lastNode) return;
                  else if (!finish && lastNode == document.body.lastChild) return;
        
        
                  if (lastNode.nodeType === 8) {
                    processNode(<Comment>lastNode);
                  }
        
                  lastNode = lastNode.nextSibling;
                }
              }
            }
        
            function processNode(node: Comment): boolean {
              var cmheader = new CommentHeader(node);
        
              var file = DOMFile.tryParse(cmheader);
              if (file) {
                loadedFiles.push(file);
                loadedSize += file.contentLength;
                return true;
              }
        
              var totals = DOMTotals.tryParse(cmheader);
              if (totals)
                loadedTotals = totals;
            }
          }
        
          export module parseDOMStorage {
        
            export interface ContinueParsing {
        
              continueParsing(): ContinueParsing;
        
              finishParsing(): DOMDrive;
        
              loadedFileCount: number;
              loadedSize: number;
              totalSize: number;
        
            }
        
            export interface DocumentSubset extends DOMDrive.DocumentSubset {
              body: HTMLBodyElementSubset;
            }
        
            export interface HTMLBodyElementSubset extends DOMDrive.HTMLBodyElementSubset {
              lastChild: Node;
            }
        
          }
        
        }
    • encodings
      • CR.ts
        module persistence.encodings {
        
          export function CR(text: string): string {
            return text.
              replace(/\r\n|\n/g, '\r');
          }
        
        }
      • CRLF.ts
        module persistence.encodings {
        
          export function CRLF(text: string): string {
            return text.
              replace(/\r|\n/g, '\r\n');
          }
        
        }
      • LF.ts
        module persistence.encodings {
        
          export function LF(text: string): string {
            return text.
              replace(/\r\n|\r/g, '\n');
          }
        
        }
      • base64.ts
        module persistence.encodings {
        
          export function base64(text: string): any {
            // TODO: convert from base64 to text
            // TODO: invent a prefix to signify binary data
            throw new Error('Base64 encoding is not implemented yet.');
          }
        
        }
      • eval.ts
        module persistence.encodings {
        
          export function eval(text: string): any {
            return (0, window['eval'])(text);
          }
        
        }
      • json.ts
        module persistence.encodings {
        
          export function json(text: string): any {
            var result = typeof JSON ==='undefined' ? eval(text) : JSON.parse(text);
        
            if (result && typeof result !== 'string' && result.type) {
              var ctor: any = window[result.type];
              result = new ctor(result);
            }
        
            return result;
          }
        
        }
    • API.d.ts
      declare module persistence {
      
        export interface Drive {
      
          timestamp: number;
      
          files(): string[];
      
          read(file: string): string;
      
          write(file: string, content: string);
      
        }
      
        export module Drive {
      
          export interface Shadow {
      
            timestamp: number;
      
            write(file: string, content: string): void;
      
          }
      
          export interface Optional {
      
            name: string;
      
            detect(uniqueKey: string, callback: (detached: Detached) => void): void;
      
          }
      
          export interface Detached {
      
            timestamp: number;
            totalSize?: number;
      
            applyTo(mainDrive: Drive, callback: Detached.CallbackWithShadow): void;
      
            purge(callback: Detached.CallbackWithShadow): void;
      
          }
      
          export module Detached {
            export interface CallbackWithShadow {
      
              (loaded: Shadow): void;
              progress?: (current: number, total: number) => void;
            }
          }
      
        }
      }
    • bestEncode.ts
      module persistence {
      
        export function bestEncode(content: any, escapePath?: boolean): { content: string; encoding: string; } {
      
          if (content.length>1024*16) {
            // TODO: consider packing tightly and using eval encoding to unpack
          }
      
          if (typeof content!=='string')
            return { content: encodeArrayOrSimilarAsJSON(content), encoding: 'json' };
      
          var needsEscaping: boolean;
          if (escapePath) {
            // zero-char, newlines, leading/trailing spaces, quote and apostrophe
            needsEscaping = /\u0000|\r|\n|^\s|\s$|\"|\'/.test(content);
          }
          else {
            needsEscaping = /\u0000|\r/.test(content);
          }
      
          if (needsEscaping) {
            // ZERO character is officially unsafe in HTML,
            // CR is contentious in IE (which converts any CR or LF into CRLF)
      
            return { content: encodeUnusualStringAsJSON(content), encoding: 'json' };
          }
          else {
            return { content: content, encoding: 'LF' };
          }
        }
      
        function encodeUnusualStringAsJSON(content: string): string {
          if (typeof JSON !== 'undefined' && typeof JSON.stringify === 'function') {
            var simpleJSON = JSON.stringify(content);
            var sanitizedJSON = simpleJSON.
              replace(/\u0000/g, '\\u0000').
              replace(/\r/g, '\\r').
              replace(/\n/g, '\\n');
            return sanitizedJSON;
          }
          else {
            var result = content.replace(
              /\"\u0000|\u0001|\u0002|\u0003|\u0004|\u0005|\u0006|\u0007|\u0008|\u0009|\u00010|\u00011|\u00012|\u00013|\u00014|\u00015|\u0016|\u0017|\u0018|\u0019|\u0020|\u0021|\u0022|\u0023|\u0024|\u0025|\u0026|\u0027|\u0028|\u0029|\u0030|\u0031/g,
              (chr) =>
                chr === '\t' ? '\\t' :
                  chr === '\r' ? '\\r' :
                    chr === '\n' ? '\\n' :
                      chr === '\"' ? '\\"' :
                        chr < '\u0010' ? '\\u000' + chr.charCodeAt(0).toString(16) :
                          '\\u00' + chr.charCodeAt(0).toString(16));
            return result;
          }
        }
      
        function encodeArrayOrSimilarAsJSON(content: any): string {
            var type = content instanceof Array ? null : content.constructor.name || content.type;
            if (typeof JSON !== 'undefined' && typeof JSON.stringify === 'function') {
              if (type) {
                var wrapped = { type, content };
                var wrappedJSON = JSON.stringify(wrapped);
                return wrappedJSON;
              }
              else {
                var contentJSON = JSON.stringify(content);
                return contentJSON;
              }
            }
            else {
              var jsonArr: string[] = [];
              if (type) {
                jsonArr.push('{"type": "');
                jsonArr.push(content.type || content.prototype.constructor.name);
                jsonArr.push('", "content": [');
              }
              else {
                jsonArr.push('[');
              }
      
              for (var i = 0; i < content.length; i++) {
                if (i) jsonArr.push(',');
                jsonArr.push(content[i]);
              }
      
              if (type)
                jsonArr.push(']}');
              else
                jsonArr.push(']');
      
              return jsonArr.join('');
            }
        }
      }
    • bootMount.ts
      module persistence {
      
        // TODO: pass in progress callback
        export function bootMount(uniqueKey: string, document: Document): bootMount.ContinueLoading {
      
          var continueParse: persistence.dom.parseDOMStorage.ContinueParsing;
      
          var ondomdriveloaded;
          var domDriveLoaded: Drive;
          var storedFinishCallback;
      
          mountDrive(
            callback => {
              if (domDriveLoaded)
                callback(domDriveLoaded);
              else
                ondomdriveloaded = callback;
            },
            uniqueKey,
            [attached.indexedDB, attached.webSQL, attached.localStorage],
            mountedDrive => {
      
              storedFinishCallback(mountedDrive);
      
            });
      
          return continueLoading();
      
          function continueLoading(): bootMount.ContinueLoading {
      
            continueDOMLoading();
      
            // TODO: record progress
      
            return {
              continueLoading,
              finishLoading,
      
              loadedFileCount: continueParse.loadedFileCount,
              loadedSize: continueParse.loadedSize,
              totalSize: continueParse.totalSize
      
            };
          }
      
          function finishLoading(finishCallback: (monutedDrive: Drive) => void) {
      
            storedFinishCallback = finishCallback;
      
            continueDOMLoading();
      
            domDriveLoaded = continueParse.finishParsing();
      
            if (ondomdriveloaded) {
              ondomdriveloaded(domDriveLoaded);
            }
      
          }
      
      
          function continueDOMLoading() {
            continueParse = continueParse ? continueParse.continueParsing() : dom.parseDOMStorage(document);
          }
      
        }
      
        module bootMount {
      
          export interface ContinueLoading {
      
            continueLoading(): ContinueLoading;
      
            finishLoading(finishCallback: (mountedDrive: Drive) => void);
      
            loadedFileCount: number;
            loadedSize: number;
            totalSize: number;
      
          }
      
        }
      }
    • mountDrive.ts
      module persistence {
      
        export function mountDrive(
          loadDOMDrive: (callback: (dom: Drive) => void)=> void,
          uniqueKey: string,
          optionalModules: Drive.Optional[],
          callback: mountDrive.Callback): void {
      
          var driveIndex = 0;
      
          loadNextOptional();
      
          function loadNextOptional() {
      
            while (driveIndex < optionalModules.length &&
              (!optionalModules[driveIndex] || typeof optionalModules[driveIndex].detect !== 'function')) {
              driveIndex++;
            }
      
            if (driveIndex >= optionalModules.length) {
              loadDOMDrive(dom => callback(new MountedDrive(dom, null)));
              return;
            }
      
            var op = optionalModules[driveIndex];
            op.detect(
              uniqueKey,
              detached => {
                if (!detached) {
                  driveIndex++;
                  loadNextOptional();
                  return;
                }
      
                loadDOMDrive(dom => {
                  if (detached.timestamp > dom.timestamp) {
                    var callbackWithShadow: Drive.Detached.CallbackWithShadow = loadedDrive => {
                      dom.timestamp = detached.timestamp;
                      callback(new MountedDrive(dom, loadedDrive));
                    };
                    if (callback.progress)
                      callbackWithShadow.progress = callback.progress;
                    loadDOMDrive(dom => detached.applyTo(dom, callbackWithShadow));
                  }
                  else {
                    var callbackWithShadow: Drive.Detached.CallbackWithShadow = loadedDrive => {
                      callback(new MountedDrive(dom, loadedDrive));
                    };
                    if (callback.progress)
                      callbackWithShadow.progress = callback.progress;
                    detached.purge(callbackWithShadow);
                  }
                });
      
              });
          }
      
        }
      
        export module mountDrive {
      
          export interface Callback {
      
            (drive: Drive): void;
      
            progress?: (current: number, total: number) => void;
      
          }
      
        }
      
        class MountedDrive implements Drive {
      
          updateTime = true;
          timestamp: number = 0;
      
          constructor (private _dom: Drive, private _shadow: Drive.Shadow) {
            this.timestamp = this._dom.timestamp;
          }
      
          files(): string[] {
            return this._dom.files();
          }
      
          read(file: string): string {
            return this._dom.read(file);
          }
      
          write(file: string, content: string) {
            if (this.updateTime) {
              this.timestamp = +new Date();
            }
      
            this._dom.timestamp = this.timestamp;
            this._dom.write(file, content);
            if (this._shadow) {
              this._shadow.timestamp = this.timestamp;
              this._shadow.write(file, content);
            }
          }
        }
      
      }
    • normalizePath.ts
      module persistence {
      
        export function normalizePath(path: string) : string {
      
          if (!path) return '/'; // empty paths converted to root
      
          if (path.charAt(0) !== '/') // ensuring leading slash
            path = '/' + path;
      
          path = path.replace(/\/\/*/g, '/'); // replacing duplicate slashes with single
      
          return path;
        }
      
      }
  • shell
    • build
      • processTemplate.ts
        module shell.build {
        
          export function processTemplate(
            template: string, scopes: any[],
            log: (logText: string) => void,
            callback: (error: Error, result?: string) => void): void {
            // <%= expr %>
            // <% statement %>
            // <%-- comment --%>
        
            log('Generating build script...');
            setTimeout(() => {
              var fnText = generateBuildScript(template, scopes);
        
              log('Preprocessing build script...');
              setTimeout(() => {
                try {
                  var fn = Function('scopes', fnText);
        
                  log('Executing build script...');
        
                  var output: any[] = fn(scopes);
                  var outputIndex = 0;
                }
                catch (error) {
                  log('Build failure ' + error);
                  callback(error);
                  return;
                }
        
                processNextOutputChunk();
        
                function processNextOutputChunk() {
                  var startTime = +new Date();
        
                  // all heavy chunks will bail out and queue the next one on setTimeout,
                  // simple literal insertions keep going for a slice of time
                  while (true) {
                    if (outputIndex >= output.length) {
                      var result = output.join('');
                      callback(null, result);
                      return;
                    }
        
                    var outputChunk = output[outputIndex];
                    if (typeof outputChunk === 'function') {
                      log('Processing ' + outputChunk + '...');
                      setTimeout(() => {
                        try {
                          var chunkResult = outputChunk();
                          var chunkResultText = String(chunkResult);
                          output[outputIndex] = chunkResultText;
                        }
                        catch (error) {
                          callback(error);
                          return;
                        }
        
                        log('...OK [' + chunkResultText.length + ']');
                        outputIndex++;
                        processNextOutputChunk();
                        //setTimeout(processNextOutputChunk, 1);
                      }, 1);
                      break;
                    }
                    else {
                      var literal = String(outputChunk);
                      output[outputIndex] = literal;
                      var literalLines = (literal.length > 100 ? literal.slice(0, 50) + '\n...\n' + literal.slice(literal.length - 5) : literal).split('\n');
                      while (literalLines.length && !literalLines[0]) literalLines.shift();
                      while (literalLines.length && !literalLines[literalLines.length - 1]) literalLines.pop();
                      log(literalLines.length <= 2 ? literalLines.join('\n') : literalLines[0] + '\n...\n' + literalLines[literalLines.length - 1]);
                      outputIndex++;
        
                      if (+new Date() - startTime > 300) {
                        setTimeout(processNextOutputChunk, 1);
                        break;
                      }
                      // keep going if haven't been processing for long yet
        
                    }
                  }
                }
        
              }, 1);
        
            }, 1);
        
          }
        
          function generateBuildScript(template: string, scopes: any[]): string {
            var generated: string[] = [];
            for (var i = 0; i < scopes.length; i++) {
              generated.push('with(scopes[' + i + ']) {');
            }
        
            generated.push('var output =[];');
        
            var index = 0;
            while (index < template.length) {
        
              var nextOpenASP = template.indexOf('<%', index);
              if (nextOpenASP < 0) {
                generateWrite(generated, template.slice(index));
                break;
              }
        
              var ch = template.charAt(nextOpenASP + 2);
              if (ch === '=') {
                var closeASP = template.indexOf('%>', nextOpenASP);
                if (closeASP < 0) {
                  generateWrite(generated, template.slice(index));
                  break;
                }
        
                generateWrite(generated, template.slice(index, nextOpenASP));
                generateRedirect(generated, template.slice(nextOpenASP + 3, closeASP));
                index = closeASP + 2;
              }
              else if (ch === '-') {
                var closeCommentMatch = template.charAt(nextOpenASP + 3) === '-' ? '--%>' : '-%>';
                var closeComment = template.indexOf(closeCommentMatch, nextOpenASP);
                if (closeComment < 0) {
                  generateWrite(generated, template.slice(index));
                  break;
                }
        
                generateWrite(generated, template.slice(index, nextOpenASP));
                index = closeComment + closeCommentMatch.length;
              }
              else {
                var closeASP = template.indexOf('%>', nextOpenASP);
                if (closeASP < 0) {
                  generateWrite(generated, template.slice(index));
                  break;
                }
        
                generateWrite(generated, template.slice(index, nextOpenASP));
                generateStatement(generated, template.slice(nextOpenASP + 2, closeASP));
                index = closeASP + 2;
              }
        
            }
        
            for (var i = 0; i < scopes.length; i++) {
              generated.push('}');
            }
        
            generated.push('return output;');
        
            var fnText = generated.join('\n');
            return fnText;
        
          }
        
        
          function generateWrite(generated: string[], chunk: string) {
            if (chunk)
              generated.push('output.push(\'' + stringLiteral(chunk) + '\');');
          }
        
          function generateRedirect(generated: string[], redirect: string) {
            generated.push('output.push(' + redirect + ');');
          }
        
          function generateStatement(generated: string[], statement: string) {
            generated.push(statement);
          }
        
          function stringLiteral(text: string) {
            return text.
              replace(/\\/g, '\\\\').
              replace(/\n/g, '\\n').
              replace(/\r/g, '\\r').
              replace(/\t/g, '\\t').
              replace(/\'/g, '\\\'').
              replace(/\"/g, '\\"');
          }
        
        }
    • editor
      • Editor.ts
        module shell.editor {
        
          export class Editor {
        
            private _textarea: HTMLTextAreaElement;
            private _title: HTMLDivElement;
        
            constructor(private _host: HTMLElement, private _file: string, text?: string) {
              this._textarea = <any>elem('textarea', {
                background: 'navy',
                color: 'silver',
                top: '0', left: '0',
                width: '100%', height: '100%', position: 'absolute',
                borderTop: 'solid 1em black'
              }, this._host);
              this._title = <any>elem('div', {
                position: 'absolute',
                top: '0', left: '0',
                width: '100%', height: '1em',
                background: 'silver', color: 'navy',
                text: this._file
              }, this._host);
              if (typeof text === 'string')
                this._textarea.value = text;
            }
        
          focus() {
            this._textarea.focus();
          }
        
            setText(text: string) {
              this._textarea.value = text;
            }
        
            getText(): string {
              return this._textarea.value;
            }
        
            close() {
              this._host.removeChild(this._textarea);
              this._host.removeChild(this._title);
            }
          }
        
        }
    • handlers
      • js
        • base.ts
          module shell.handlers.js {
          
            export var preferredFiles = '*.js;*.json';
          
            //export var entryStyle = {};
          
            export function exec(file: string, callback: Function) {
              // TODO: load in node
            }
          
            export function edit(file: string, editorHost: HTMLElement, callback: Function) {
              // TODO: augment CodeMirror mode when CodeMirror is supported
              return text.edit(file, editorHost, callback);
            }
          
          }
      • text
        • base.ts
          module shell.handlers.text {
          
            export var preferredFiles = '*.txt;*.text';
          
            //export var entryStyle = {};
          
            export function exec(file: string, callback: Function) {
            }
          
            export function edit(file: string, editorHost: HTMLElement, callback: Function) {
            }
          
          }
      • API.d.ts
        declare module shell.handlers {
        
          export interface Handler {
            preferredFiles?: string;
            handlesFiles?: string;
            entryStyle?: {};
            exec?(file: string, callback: Function): void;
            edit?(file: string, editorHost: HTMLElement, callback: Function): void;
          }
        
        }
      • defaults.ts
        module shell.handlers {
          export var defaults = text;
        }
    • panels
      • Panel.ts
        module shell.panels {
        
          var panelClass = 'panels-panel-page';
        
          export class Panel {
        
            private _cursorPath: string;
            private _cursorEntryIndex = -1;
            private _entries: Panel.PageEntry[] = null;
            private _redrawRequested = 0;
        
            private _metrics: Panel.Metrics = null;
        
            private _scrollContent: HTMLElementWithFlags;
        
            private _pages: Panel.PageData[] = [];
        
        		private _entriesInColumn = 0;
            private _pageHeight = 0;
            private _pageInterval = 0;
            private _columnsOnPage = 0;
            private _columnWidth = 0;
        
            private _scrollTop = 0;
            private _scrollTopHeight = 0;
            private _isActive = false;
            private _nextRedrawScrollToCurrent = false;
        
            constructor(
              private _host: HTMLElement,
              private _path: string,
              private _directoryService: (path: string) => Panel.DirectoryEntry[]) {
        
              this._scrollContent = <HTMLElementWithFlags>elem('div', this._host);
              this._scrollContent.isScrollContent = true;
        
              on(this._host, 'scroll', () => this._onscroll());
        
              this._queueRedraw();
            }
        
            set(paths: {currentPath?: string; cursorPath?: string}) {
              if (paths.currentPath)
                this._path = paths.currentPath;
              if (paths.cursorPath) {
                this._cursorPath = paths.cursorPath;
                this._nextRedrawScrollToCurrent = true;
              }
              this._queueRedraw();
            }
        
          	onclick(e: MouseEvent) {
              if (!this._entries) return;
        
              var clickElem = <HTMLElementWithFlags>(e.srcElement || e.target || e.currentTarget);
              var entryDIV: HTMLElementWithFlags;
              var columnDIV: HTMLElementWithFlags;
              var pageDIV: HTMLElementWithFlags;
              var leadPaddingDIV: HTMLElementWithFlags;
        
              while (clickElem) {
        
                if (clickElem.isScrollContent) {
                  if (clickElem !== this._scrollContent) return false;
                  break;
                }
        
                if (clickElem.isPageDIV)
                  pageDIV = clickElem;
        
                if (clickElem.isColumnDIV)
                  columnDIV = clickElem;
        
                if (clickElem.isEntryDIV)
                  entryDIV = clickElem;
        
                clickElem = <any>clickElem.parentElement;
              }
        
              if (entryDIV) {
                for (var i = 0; i < this._entries.length; i++) {
                  if (this._entries[i].entryDIV === entryDIV) {
                    if (this._cursorPath ===this._entries[i].path && (this._entries[i].flags & Panel.EntryFlags.Directory)) {
                      this._cursorPath = this._path;
                      this._path = this._entries[i].path; // double click (or second click) opens directory
                    }
                    else {
                      this._cursorPath = this._entries[i].path;
                    }
                    this._nextRedrawScrollToCurrent = true;
                    this._queueRedraw();
                    break;
                  }
                }
                this._redrawNow();
              }
        
              return true;
            }
        
            currentPath() {
              return this._path;
            }
        
            cursorPath() {
              return this._cursorPath;
            }
        
            arrange(metrics: Panel.Metrics) {
              this._metrics = metrics;
              this._redrawNow();
            }
        
          	isActive() {
              return this._isActive;
            }
        
            activate() {
              this._isActive = true;
              this._scrollContent.className = 'panels-panel-active';
            }
        
            deactivate() {
              this._isActive = false;
              this._scrollContent.className = 'panels-panel-inactive';
            }
        
            cursorGo(direction: number) {
              if (!this._entries || !this._entries.length) return;
        
              var moveStep = 0;
        
              switch (direction) {
        
                case -1: // up
                  moveStep = -1;
                  break;
        
                case +1: // down
                  moveStep = +1;
                  break;
        
                case -10: // left
                  var entryIndex = this._calcEntryIndex(this._cursorEntryIndex);
                  if (this._columnsOnPage === 1) {
                    moveStep = -entryIndex || -1;
                  }
                  else {
                    var columnIndex = this._calcColumnIndex(this._cursorEntryIndex);
                    if (columnIndex > 0) {
                      moveStep = -this._entriesInColumn;
                    }
                    else {
                      moveStep = this._entriesInColumn * (this._columnsOnPage - 1) - 1;
        
                      // overflow cases
                      if (this._cursorEntryIndex === 0) {
                        moveStep = this._entriesInColumn * (this._columnsOnPage - 1);
                      }
                      else if (this._cursorEntryIndex + moveStep >= this._entries.length) { // there is no rightmost column
        
                        var endEntryIndex = this._calcEntryIndex(this._entries.length - 1);
                        var endColumnIndex = this._calcColumnIndex(this._entries.length - 1);
        
                        // if the last entry is higher vertically, stop at the previous column
                        var targetColumnIndex = endEntryIndex >= entryIndex ? endColumnIndex : endColumnIndex - 1;
        
                        if (targetColumnIndex <= columnIndex) {
                          moveStep = -entryIndex; // if nowhere to go right, go all the way up
                        }
                        else {
                          // there are columns on the right, so go there (and one up after)
                          moveStep = (targetColumnIndex - columnIndex) * this._entriesInColumn - 1;
                        }
                      }
                    }
                  }
                  break;
        
                case +10: // right
                  var columnIndex = this._calcColumnIndex(this._cursorEntryIndex);
                  if (columnIndex < this._columnsOnPage - 1) {
                    moveStep = +this._entriesInColumn;
                  }
                  else {
                    moveStep = -this._entriesInColumn * 2 + 1;
                  }
                  break;
        
                case -100: // page up
                  moveStep = -this._entriesInColumn * this._columnsOnPage;
                  break;
        
                case +100: // page down
                  moveStep = +this._entriesInColumn * this._columnsOnPage;
                  break;
              }
        
              if (moveStep) {
                var newCursorEntryIndex = Math.max(0, Math.min(this._entries.length-1, this._cursorEntryIndex + moveStep));
                var e = this._entries[newCursorEntryIndex];
                if (e) {
                  this._cursorPath = this._entries[newCursorEntryIndex].path;
                  this._nextRedrawScrollToCurrent = true;
                  this._queueRedraw();
                }
              }
            }
        
            navigateCursor() {
              if (this._cursorEntryIndex >= 0) {
                var entry = this._entries[this._cursorEntryIndex];
                if (entry) {
                  if (entry.flags & Panel.EntryFlags.Directory) {
                    this._cursorPath = this._path;
                    this._path = entry.path;
                    this._nextRedrawScrollToCurrent = true;
                    this._queueRedraw();
                    return true;
                  }
                }
              }
            }
        
            private _queueRedraw() {
              if (this._redrawRequested) return;
              this._redrawRequested = setTimeout(() => this._redrawNow(), 100);
            }
        
            private _redrawNow() {
        
              var prevOffset = this._calcEntryTopOffset(Math.max(0, this._cursorEntryIndex));
        
              var entries = this._directoryService(this._path);
              this._entries = [];
        
              entries.sort((e1, e2) => {
                var flagCompare = (e1.flags & Panel.EntryFlags.Directory) ?
                  ((e2.flags & Panel.EntryFlags.Directory) ? 0 : -1) :
                  ((e2.flags & Panel.EntryFlags.Directory) ? +1 : 0);
                if (flagCompare) return flagCompare;
        
                var nameCompare = e1.name > e2.name ? 1 : e1.name < e2.name ? -1 : 0;
                return nameCompare;
              });
        
              if (this._path !== '/') {
                var parentPath = this._path.slice(0, this._path.lastIndexOf('/')) || '/';
                entries.unshift({
                  name: '..',
                  path: parentPath,
                  flags: Panel.EntryFlags.Directory
                });
              }
        
              if (!entries || !entries.length) {
                this._scrollContent.innerHTML = '';
                this._pages = [];
                return;
              }
        
              this._cursorEntryIndex = -1;
              for (var i = 0; i < entries.length; i++) {
                if (entries[i].path === this._cursorPath) {
                  this._cursorEntryIndex = i;
                  break;
                }
              }
        
              if (this._cursorEntryIndex < 0) {
                this._cursorEntryIndex = 0;
                this._cursorPath = entries.length > 0 ? entries[0].path : null;
              }
        
              this._entriesInColumn = Math.max(3, ((this._metrics.hostHeight / this._metrics.windowMetrics.emHeight) | 0) - 2);
              this._pageHeight = this._entriesInColumn * this._metrics.windowMetrics.emHeight;
              this._pageInterval = this._metrics.hostHeight - this._pageHeight - this._metrics.windowMetrics.emHeight;
        
              var desiredColumnWidth = 17 * this._metrics.windowMetrics.emWidth;
              this._columnsOnPage = Math.max(1, Math.round(this._metrics.hostWidth / desiredColumnWidth) | 0);
              this._columnWidth = ((this._metrics.hostWidth / this._columnsOnPage) | 0) - 1;
        
              if (!this._pages)
                this._pages = [];
        
              for (var i = 0; i < entries.length; i++) {
                var pageIndex = this._calcPageIndex(i);
                var page = this._pages[pageIndex];
        
                if (page) {
                  if (page.height !== this._pageHeight) {
                    page.height = this._pageHeight;
                    page.pageDIV.style.height = this._pageHeight + 'px';
                  }
                  if (page.leadInterval !== this._pageInterval) {
                    page.leadInterval = this._pageInterval;
                    if (page.leadPaddingDIV)
                      page.leadPaddingDIV.style.height = this._pageInterval + 'px';
                  }
                }
                else {
                  if (pageIndex) {
                    var leadPaddingDIV = <HTMLElementWithFlags>elem('div', {
                      className: 'panels-page-separator',
                      height: this._pageInterval + 'px'
                    }, this._scrollContent);
                    leadPaddingDIV.isLeadPaddingDIV = true;
                  }
        
                  page = {
                    leadPaddingDIV,
                    leadInterval: this._pageInterval,
                    height: this._pageHeight,
                    pageDIV: <HTMLElementWithFlags>elem('div', {
                      className: panelClass,
                      height: this._pageHeight + 'px'
                    }, this._scrollContent),
                    columns: []
                  };
        
                  page.pageDIV.isPageDIV = true;
                  this._pages.push(page);
                }
        
                var columnIndex = this._calcColumnIndex(i);
                var column = page.columns[columnIndex];
                if (column) {
                  if (columnIndex === this._columnsOnPage - 1 && page.columns.length > this._columnsOnPage) {
                    this._removeExcessColumns(page, this._columnsOnPage);
                  }
                  if (column.height !== this._pageHeight) {
                    column.height = this._pageHeight;
                    column.columnDIV.style.height = this._pageHeight + 'px';
                  }
                  if (column.width !== this._columnWidth) {
                    column.width = this._columnWidth;
                    column.columnDIV.style.width = this._columnWidth + 'px';
                  }
                }
                else {
                  column = {
                    height: this._pageHeight,
                    width: this._columnWidth,
                    columnDIV: <HTMLElementWithFlags>elem('div', {
                      className: 'panels-panel-column',
                      height: this._pageHeight + 'px',
                      width: this._columnWidth + 'px'
                    }, page.pageDIV),
                    entries: []
                  };
                  column.columnDIV.isColumnDIV = true;
                  page.columns.push(column);
                }
        
                var dentry = entries[i];
        
                var entryIndex = this._calcEntryIndex(i);
                var entry = column.entries[entryIndex];
                if (!entry) {
        
                  var dirfileClassName = dentry.flags & Panel.EntryFlags.Directory ? ' panels-entry-dir' : ' panels-entry-file';
        
                  var entryClassName =
                    'panels-entry' +
                    dirfileClassName +
                    (this._cursorEntryIndex === i ? ' panels-entry-current' + dirfileClassName + '-current' : '');
        
                  entry = {
                    name: dentry.name,
                    path: dentry.path,
                    flags: dentry.flags,
                    selectionFlags: this._cursorEntryIndex === i ? Panel.SelectionFlags.Current : 0,
                    entryDIV: <HTMLElementWithFlags>elem('div', {
                      className: entryClassName,
                      text: dentry.name,
                      height: this._metrics.windowMetrics.emHeight + 'px'
                    }, column.columnDIV)
                  };
        
                  entry.entryDIV.isEntryDIV = true;
        
                  column.entries.push(entry);
                }
                else {
                  var expectedSelectionFlags = this._cursorEntryIndex === i ? Panel.SelectionFlags.Current : 0;
        
                  if (entry.name !== dentry.name) {
                    entry.name = dentry.name;
                    setText(entry.entryDIV, dentry.name);
                  }
                  if (entry.path !== dentry.path) {
                    entry.path = dentry.path;
                  }
                  if (entry.flags !== dentry.flags || entry.selectionFlags !== expectedSelectionFlags) {
                    var dirfileClassName = dentry.flags & Panel.EntryFlags.Directory ? ' panels-entry-dir' : ' panels-entry-file';
        
                    var entryClassName =
                      'panels-entry' +
                      dirfileClassName +
                      (this._cursorEntryIndex === i ? ' panels-entry-current' + dirfileClassName + '-current' : '');
        
                    entry.entryDIV.className = entryClassName;
        
                    entry.flags = dentry.flags;
                    entry.selectionFlags = expectedSelectionFlags;
                  }
        
        
                  if (entryIndex === this._entriesInColumn - 1 && column.entries.length > this._entriesInColumn) {
                    this._removeExcessEntries(column, this._entriesInColumn);
                  }
        
                }
        
                this._entries.push(entry);
        
              }
        
              this._removeExcessPages(pageIndex + 1);
        
              var p = this._pages[pageIndex];
              this._removeExcessColumns(p, columnIndex + 1);
        
              var c = p.columns[columnIndex];
              this._removeExcessEntries(c, entryIndex + 1);
        
        
        
              var newOffset = this._calcEntryTopOffset(Math.max(0, this._cursorEntryIndex));
              if (this._nextRedrawScrollToCurrent) {
                this._nextRedrawScrollToCurrent = false;
                var maxScroll = newOffset - this._metrics.windowMetrics.emHeight*2;
                var minScroll = newOffset - this._metrics.hostHeight + this._metrics.windowMetrics.emHeight*3;
        
                var newScrollTop =
                    this._scrollTop < minScroll ? minScroll :
                		this._scrollTop > maxScroll ? maxScroll :
                		-1;
        
                if (newScrollTop >=0) {
                  //console.log('redraw: scroll to current [' + newScrollTop + ']');
                  this._host.scrollTop = newScrollTop
                }
              }
              else {
                var prevDistanceFromCenter = prevOffset - (this._scrollTop + this._scrollTopHeight / 2);
        
                var newScrollTop = newOffset - prevDistanceFromCenter - this._metrics.hostHeight / 2;
                //console.log({
                //  prevDistanceFromCenter, prevOffset, this_scrollTop: this._scrollTop, this_scrollTopHeight: this._scrollTopHeight,
                //  newOffset, this_metrics_hostHeight: this._metrics.hostHeight, newScrollTop
                //});
                //console.log('redraw: scroll to approximate prev. [' + newScrollTop + ']');
                this._host.scrollTop = newScrollTop;
              }
        
        
              this._redrawRequested = 0;
        
              // end of _redrawNow()
            }
        
        
        
          	private _removeExcessPages(expectedCount: number) {
              for (var i = this._pages.length - 1; i >= expectedCount; i--) {
                var p = this._pages[i];
                p.pageDIV.parentElement.removeChild(p.pageDIV);
                if (p.leadPaddingDIV)
                  p.leadPaddingDIV.parentElement.removeChild(p.leadPaddingDIV);
              }
        
              if (this._pages.length > expectedCount)
                this._pages = this._pages.slice(0, expectedCount);
            }
        
        
            private _removeExcessColumns(p: { columns: Panel.ColumnData[]; }, expectedCount: number) {
              for (var i = p.columns.length - 1; i >= expectedCount; i--) {
                var c = p.columns[i];
                c.columnDIV.parentElement.removeChild(c.columnDIV);
              }
        
              if (p.columns.length > expectedCount)
                p.columns = p.columns.slice(0, expectedCount);
            }
        
        
            private _removeExcessEntries(c: { entries: Panel.PageEntry[]; }, expectedCount: number) {
              for (var i = c.entries.length - 1; i >= expectedCount; i--) {
                var e = c.entries[i];
                e.entryDIV.parentElement.removeChild(e.entryDIV);
              }
        
              if (c.entries.length > expectedCount)
                c.entries = c.entries.slice(0, expectedCount);
            }
        
        
          	private _onscroll() {
              if (this._redrawRequested) return;
              this._scrollTop = this._host.scrollTop;
              this._scrollTopHeight = this._metrics.hostHeight;
              //console.log('onscroll ' + this._scrollTop);
            }
        
        
            private _calcPageIndex(indexOfEntry: number): number {
              return (indexOfEntry / (this._columnsOnPage * this._entriesInColumn)) | 0;
            }
        
          	private _calcColumnIndex(indexOfEntry: number) {
              return ((indexOfEntry / this._entriesInColumn) | 0) % this._columnsOnPage;
            }
        
          	private _calcEntryIndex(indexOfEntry: number) {
              return indexOfEntry % this._entriesInColumn;
            }
        
          	private _calcEntryTopOffset(indexOfEntry: number) {
              if (!this._metrics || !this._metrics.windowMetrics) return 0;
        
              var pageIndex = this._calcPageIndex(indexOfEntry);
              var entryIndex = this._calcEntryIndex(indexOfEntry);
              var offset =
                pageIndex * this._entriesInColumn * this._metrics.windowMetrics.emHeight + // whole pages
                Math.max(0, pageIndex - 1) * this._pageInterval + // inter-page spaces
                entryIndex * this._metrics.windowMetrics.emHeight; // distance from the top of the page
        
              return offset;
            }
          }
        
        	interface HTMLElementWithFlags extends HTMLElement {
            isScrollContent: boolean;
            isLeadPaddingDIV?: boolean;
            isPageDIV: boolean;
            isColumnDIV: boolean;
            isEntryDIV: boolean;
          }
        
          export module Panel {
        
            export interface Metrics {
              windowMetrics: CommanderShell.Metrics;
              hostWidth: number;
              hostHeight: number;
            }
        
            export interface DirectoryEntry {
              name: string;
              path: string;
              flags: EntryFlags;
            }
        
            export enum EntryFlags {
              Directory = 1
            }
        
            export interface PageData {
              leadPaddingDIV: HTMLElementWithFlags;
              pageDIV: HTMLElementWithFlags;
              columns: ColumnData[];
              height: number;
              leadInterval: number;
            }
        
            export interface ColumnData {
              columnDIV: HTMLElementWithFlags;
              entries: PageEntry[];
              height: number;
              width: number;
            }
        
            export interface PageEntry extends DirectoryEntry {
              entryDIV: HTMLElementWithFlags;
              selectionFlags: SelectionFlags;
            }
        
            export enum SelectionFlags {
              None = 0,
              Current = 1,
              Selected = 2
            }
        
          }
        
        }
      • TwoPanels.ts
        module shell.panels {
        
          var panelHMargin = 10;
          var panelVMargin = 5;
        
          export class TwoPanels {
        
            private _scrollHost: HTMLDivElement;
            private _scrollContent: HTMLDivElement;
        
            private _leftPanelHost: HTMLDivElement;
            private _rightPanelHost: HTMLDivElement;
        
            private _leftPanel: Panel;
            private _rightPanel: Panel;
        
            constructor(
              private _host: HTMLElement,
              leftPath: string,
              rightPath: string,
              private _drive: persistence.Drive) {
        
              this._scrollHost = <any>elem('div', { className: 'panels-scroll-host' }, this._host);
              this._scrollContent = <any>elem('div', { className: 'panels-scroll-content' }, this._scrollHost);
        
              this._leftPanelHost = <any>elem('div', { className: 'panels-panel panels-left-panel' }, this._scrollContent);
              this._rightPanelHost = <any>elem('div', { className: 'panels-panel panels-right-panel' }, this._scrollContent);
        
              var directoryService = driveDirectoryService(this._drive);
        
              this._leftPanel = new Panel(
                this._leftPanelHost,
                leftPath,
                directoryService);
        
              this._rightPanel = new Panel(
                this._rightPanelHost,
                rightPath,
                directoryService);
        
              this._leftPanel.activate();
              /*
              TODO: ensure focus stays with the text input at the bottom
              elem.on(this._leftPanel, 'mousedown', e=> {
                if (e.preventDefault)
                  e.preventDefault();
                return false;
              }); */
        
              on(this._leftPanelHost, 'click', (e: MouseEvent) => this._onclick(e));
              on(this._rightPanelHost, 'click', (e: MouseEvent) => this._onclick(e));
        
            }
        
            measure() {
            }
        
            arrange(metrics: CommanderShell.Metrics) {
        
              var contentWidth = 0;
        
              if (metrics.hostWidth < metrics.emWidth * 80 && metrics.hostWidth < metrics.hostHeight * 1) { 
                // flippable layout
                contentWidth = Math.max(metrics.hostWidth / 2, metrics.hostWidth * 2 - metrics.emWidth * 4);
              }
              else {
                // full layout
                contentWidth = metrics.hostWidth;
              }
        
              var bottomGap = Math.min(metrics.hostHeight / 3, metrics.emHeight * 5.5);
        
              this._scrollHost.style.width = metrics.hostWidth + 'px';
              var panelsHeight = metrics.hostHeight - bottomGap;
              this._scrollHost.style.height = panelsHeight + 'px';
        
              this._scrollContent.style.width = contentWidth + 'px';
              this._scrollContent.style.height = panelsHeight + 'px';
        
              var panelWidth = (contentWidth / 2 - 0.5) | 0;
        
              this._leftPanelHost.style.height = panelsHeight + 'px';
              this._leftPanelHost.style.width = panelWidth + 'px';
        
              this._rightPanelHost.style.height = panelsHeight + 'px';
              this._rightPanelHost.style.width = panelWidth + 'px';
        
              if (this._leftPanelHost.style.display !== 'none') {
                this._leftPanel.arrange({
                  windowMetrics: metrics,
                  hostWidth: panelWidth - panelHMargin * 2,
                  hostHeight: panelsHeight - panelVMargin * 2
                });
              }
        
              if (this._rightPanelHost.style.display !== 'none') {
                this._rightPanel.arrange({
                  windowMetrics: metrics,
                  hostWidth: panelWidth - panelHMargin * 2,
                  hostHeight: panelsHeight - panelVMargin * 2
                });
              }
            }
        
            isVisible() {
              return this._scrollHost.style.display !== 'none';
            }
        
            toggleVisibility() {
              this._scrollHost.style.display = this.isVisible() ? 'none' : 'block';
            }
        
            isLeftActive() {
              return this._leftPanel.isActive();
            }
        
            toggleActivePanel() {
              if (!this.isVisible()) return;
        
              var isLeftActive = this._leftPanel.isActive();
              this._getPanel(isLeftActive).deactivate();
              this._getPanel(!isLeftActive).activate();
            }
        
            temporarilyHidePanels(): () => void {
        
              var start = +new Date();
              var stayTime = 200;
              var fadeTime = 500;
              var opacity = 0.1;
              var applyOpacity = () => {
                this._scrollHost.style.opacity = <any>opacity;
                this._scrollHost.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';
              };
              applyOpacity();
        
              var animateBack = () => {
                animateBack = () => { };
        
                var startFade = () => {
                  var fadeStart = +new Date();
                  var ani = setInterval(() => {
                    var passed = (Date.now ? Date.now() : +new Date()) - fadeStart;
                    if (passed > fadeTime) {
                      clearInterval(ani);
                      this._scrollHost.style.opacity = null;
                      this._scrollHost.style.filter = null;
                      return;
                    }
        
                    opacity = passed / fadeTime;
                    applyOpacity();
                  }, 1);
                };
        
                var sinceStart = +new Date() - start;
                if (sinceStart >= stayTime) {
                  startFade();
                }
                else {
                  setTimeout(startFade, fadeTime - sinceStart);
                }
              };
        
              return animateBack;
            }
        
            keydown(e: KeyboardEvent): boolean {
              switch (e.keyCode) {
                case 38:
                  return this._selectionGo(-1);
                case 40:
                  return this._selectionGo(+1);
                case 33:
                  return this._selectionGo(-100);
                case 34:
                  return this._selectionGo(+100);
                case 37:
                  return this._selectionGo(-10);
                case 39:
                  return this._selectionGo(+10);
                case 9:
                  this.toggleActivePanel();
                  return true;
                case 86: // U
                  if (e.ctrlKey || e.metaKey)
                    return this.togglePanelPaths();
                  break;
        
                case 112: // F1
                  if (e.ctrlKey || e.metaKey) {
                    return this.togglePartHidden(true);
                  }
                  break;
        
                case 113: // F2
                  if (e.ctrlKey || e.metaKey) {
                    return this.togglePartHidden(false);
                  }
                  break;
        
                case 13: // Enter
                  var activePa = this._getPanel(this.isLeftActive());
                  return activePa.navigateCursor();
        
                default:
                  if (e.ctrlKey) {
                    //console.log('ctrl ' + e.keyCode);
                  }
                  break;
              }
        
              return false;
            }
        
            togglePartHidden(leftPanel: boolean) {
              var togglePanelHost = this._getPanelHost(leftPanel);
              var oppositePanelHost = this._getPanelHost(!leftPanel);
        
              if (!this.isVisible()) {
                togglePanelHost.style.display = 'block';
                oppositePanelHost.style.display = 'none';
                if (this.isLeftActive() !== leftPanel)
                  this.toggleActivePanel();
                this.toggleVisibility();
              }
              else {
                if (togglePanelHost.style.display !== 'none') {
                  if (oppositePanelHost.style.display === 'none') {
                    togglePanelHost.style.display = 'block';
                    this.toggleVisibility();
                  }
                  else {
                    togglePanelHost.style.display = 'none';
                    if (this.isLeftActive() === leftPanel)
                      this.toggleActivePanel();
                  }
                }
                else {
                  togglePanelHost.style.display = 'block';
                }
              }
              return true;
            }
        
            togglePanelPaths() {
              console.log('Ctrl+U toggle is not implemented.');
              return false;
            }
        
            cursorPath() {
              if (!this.isVisible()) return null;
              var pan = this._getPanel(this.isLeftActive());
              return pan.cursorPath();
            }
        
            currentPath() {
              if (!this.isVisible()) return null;
              var pan = this._getPanel(this.isLeftActive());
              return pan.currentPath();
            }
        
            cursorOppositePath() {
              if (!this.isVisible()) return null;
              var pan = this._getPanel(!this.isLeftActive());
              return pan.cursorPath();
            }
        
            currentOppositePath() {
              if (!this.isVisible()) return null;
              var pan = this._getPanel(!this.isLeftActive());
              return pan.currentPath();
            }
        
            private _selectionGo(direction: number) {
              var panel = this._getPanel(this.isLeftActive()).cursorGo(direction);
              return true;
            }
        
            private _getPanel(left: boolean) {
              return left ? this._leftPanel : this._rightPanel;
            }
        
            private _getPanelHost(left: boolean) {
              return left ? this._leftPanelHost : this._rightPanelHost;
            }
        
            private _onclick(e: MouseEvent) {
              var isLeft = this._leftPanel.onclick(e);
              if (!isLeft && !this._rightPanel.onclick(e))
                return;
        
              if (isLeft === this.isLeftActive()) return;
        
              this.toggleActivePanel();
            }
        
          }
        
        }
      • driveDirectoryService.ts
        module shell.panels {
        
          export function driveDirectoryService(drive: persistence.Drive) {
        
            return path => {
              var pathPrefix = path === '/' ? path : path + '/';
              var result: Panel.DirectoryEntry[] = [];
              var resByName: { [name: string]: Panel.DirectoryEntry; } = {};
              var files = drive.files();
              for (var i = 0; i < files.length; i++) {
                var fi = files[i];
                if (fi.length < pathPrefix.length + 1) continue;
        
                if (fi.slice(0, pathPrefix.length) !== pathPrefix) continue;
        
                var name: string;
                var entryPath = fi;
                var isDirectory = false;
                var nextSlashPos = fi.indexOf('/', pathPrefix.length);
                if (nextSlashPos < 0) {
                  name = fi.slice(pathPrefix.length);
                }
                else {
                  name = fi.slice(pathPrefix.length, nextSlashPos);
                  entryPath = fi.slice(0, nextSlashPos);
                  isDirectory = true;
                }
        
                if (resByName.hasOwnProperty(name)) continue;
                var entry = { path: entryPath, name, flags: isDirectory ? Panel.EntryFlags.Directory : 0 };
                result.push(entry);
                resByName[name] = entry;
              }
              return result;
            };
        
          }
        
        }
      • panels.css
        .panels-scroll-host {
          position: absolute;
          left: 0; top: 0; width: 0; height: 0;
          overflow: auto;
          overflow-y: hidden;
          background: black;
          background: transparent;
        }
        
        .panels-scroll-content {
          width: 0; height: 0;   overflow: hidden;
        }
        
        .panels-panel {
          width: 0; height: 0;
          overflow: auto;
          overflow-x: hidden;
          background: rgba(4, 12, 64, 0.95) !important;
          background: navy;
          color: darkcyan;
          padding-top: 10px;
          padding-bottom: 10px;
          cursor: default;
        }
        
        .panels-panel * {
          cursor: default;
        }
        
        .panels-left-panel {
          float: left;
        }
        
        .panels-right-panel {
          float: right;
        }
        
        .panels-panel-page {
          clear: both;
        }
        
        .panels-page-separator {
          clear: both;
        }
        
        .panels-panel-column {
          float: left;
        }
        
        .panels-entry {
          padding-left: 10px;
          padding-right: 10px;
        }
        
        .panels-entry-dir {
          color: white;
        }
        
        .panels-panel-active .panels-entry-current {
          background: darkcyan;
        }
        
        .panels-panel-active .panels-entry-file-current {
          color: navy;
        }
        
        ::-webkit-scrollbar {
            width: 0.5em;
            height: 0.5em
        }
    • terminal
      • Terminal.ts
        module shell.terminal {
        
          export class Terminal {
        
            private _history: HTMLDivElement;
            private _historyContent: HTMLDivElement;
            private _prompt: HTMLDivElement;
            private _input: HTMLTextAreaElement;
        
            private _promptWidth = 0;
            private _historyContentHeight = 0;
            private _hostMetrics: CommanderShell.Metrics = null;
        
            constructor(private _host: HTMLElement, private _repl: noapi.HostedProcess) {
              this._history = <any>elem('div', { className: 'terminal-history' }, this._host);
              this._historyContent = <any>elem('pre', {
                className: 'terminal-history-content',
                text: 'Hello world from mini-shell\n\nVersion 0.7s\n'+shell.buildMessage+'\nOleg Mihailik\n\nPlease be careful.'
              }, this._history);
        
              this._prompt = <any>elem('div', { className: 'terminal-prompt', text: '>' }, this._host);
        
              this._input = <any>elem('textarea', { className: 'terminal-input', autofocus: true }, this._host);
        
              setTimeout(() => this._input.focus(), 1);
        
            }
        
          	writeDirect(text: string) {
              elem('div', { text, opacity: 0.4 }, this._historyContent);
        
              if (this._hostMetrics) {
                this.measure();
                this.arrange(this._hostMetrics);
              }
            }
        
            log(args: any[]) {
              log(args, this._historyContent);
        
              if (this._hostMetrics) {
                this.measure();
                this.arrange(this._hostMetrics);
              }
            }
        
            hasInput() {
              return !!this._getInput();
            }
        
          	private _getInput() {
              return (this._input.value || '').replace(/[\r\n]/g, '');
            }
        
        
            focus() {
              this._input.focus();
            }
        
          	temporarilyHidePrompt(replacementText: string): () => void {
              // TODO: hide prompt, display replacement text instead
              return () => { };
            }
        
            measure() {
              this._promptWidth = this._prompt.offsetWidth;
              this._historyContentHeight = this._historyContent.offsetHeight;
            }
        
            arrange(metrics: CommanderShell.Metrics) {
        
              this._hostMetrics = metrics;
        
              this._history.style.width = metrics.hostWidth + 'px';
        
              this._history.style.bottom = (metrics.emHeight * 2.2) + 'px';
              if (metrics.hostHeight - metrics.emHeight * 2.2 > this._historyContentHeight) {
                this._history.style.height = this._historyContentHeight + 'px';
              }
              else {
                this._history.style.height = (metrics.hostHeight - metrics.emHeight * 2.2) + 'px';
                this._history.scrollTop = this._historyContentHeight - (metrics.hostHeight - metrics.emHeight * 2);
              }
              this._input.style.left = this._promptWidth + 'px';
              this._input.style.width = (metrics.hostWidth - this._promptWidth) + 'px';
            }
        
          	clearInput() {
              setTimeout(() => {
                var cleanInput = this._getInput();
                if (this._input.value !== cleanInput) {
                  this._input.value = cleanInput;
                }
              }, 10);
            }
        
            keydown(e: KeyboardEvent, cursorPath: string) {
              if (e.keyCode === 38) {
                // TODO history
              }
              else if (e.keyCode === 13) {
                var code = this._getInput();
        
                if (code) {
                  if (code.slice(-2) === '\r\n')
                    code = code.slice(0, code.length - 2);
                  this._input.value = '';
                  elem('div', {
                    text: code,
                    color: 'gray'
                  }, this._historyContent);
        
                  this._evalAndLogResults(code);
                  return true;
                }
                else {
                  return false;
                }
              }
            }
        
            private _evalAndLogResults(code: string) {
        
              var result;
              try {
                result = this._repl.eval(code);
              }
              catch (error) {
                elem('div', {
                  text: error && error.stack ? error.stack : error,
                  color: 'red'
                }, this._historyContent);
                if (this._hostMetrics) {
                  this.measure();
                  this.arrange(this._hostMetrics);
                }
                return;
              }
        
              this.log([result]);
            }
        
        
          }
        
        }
      • log.ts
        module shell.terminal {
        
          export function log(args: any[], historyContent: HTMLElement) {
            var output = elem('div', historyContent);
            for (var i = 0; i < args.length; i++) {
              if (i > 0)
                elem('span', { text: ' ' }, output);
              if (args[i] === null) {
                elem('span', { text: 'null', color: 'green' }, output);
              }
              else {
                logAppendObj(args[i], <any>output, 0);
              }
            }
          }
        }
      • logAppendObj.ts
        module shell.terminal {
        
          export function logAppendObj(obj: any, output: HTMLDivElement, level: number) {
            switch (typeof obj) {
              case 'number':
              case 'boolean':
                elem('span', { text: obj, color: 'green' }, output);
                break;
        
              case 'undefined':
                elem('span', { text: 'undefined', color: 'green', opacity: 0.5 }, output);
                break;
        
              case 'function':
                var funContainer = elem('span', output);
                var funFunction = elem('span', { text: 'function ', color: 'silver', opacity: 0.5 }, funContainer);
                var funName = elem('span', { text: obj.name, color: 'cornflowerblue', fontWeight: 'bold' }, funContainer);
                funContainer.title = obj;
                break;
        
              case 'string':
                var strContainer = elem('span', output);
                elem('span', { text: '"', color: 'tomato' }, strContainer);
                elem('span', { text: obj, color: 'tomato', opacity: 0.5 }, strContainer);
                elem('span', { text: '"', color: 'tomato' }, strContainer);
                break;
        
              default:
                if (obj === null) {
                  elem('span', { text: 'null', color: 'green', opacity: 0.5 }, output);
                  break;
                }
        
                if (typeof obj.getFullYear === 'function' && typeof obj.getTime === 'function' && typeof obj.constructor.parse === 'function') {
                  elem('span', { text: 'Date(', color: 'green', opacity: 0.5 }, output);
                  elem('span', { text: obj, color: 'green' }, output);
                  elem('span', { text: ')', color: 'green', opacity: 0.5 }, output);
                  break;
                }
        
                if (obj.constructor && obj.constructor.name !== 'Object' && obj.constructor.name !== 'Array') {
                  elem('span', { text: obj.constructor.name, color: 'cornflowerblue' }, output);
                  if (obj.constructor.prototype && obj.constructor.prototype.constructor
                    && obj.constructor.prototype.constructor.name
                    && obj.constructor.prototype.constructor.name !== 'Object' && obj.constructor.prototype.constructor.name !== 'Array'
                    && obj.constructor.prototype.constructor.name !== obj.constructor.name)
                    elem('span', { text: ':' + obj.constructor.prototype.constructor.name, color: 'cornflowerblue', opacity: 0.5 }, output);
                  elem('span', output);
                }
        
                if (typeof obj.length === 'number' && obj.length >= 0) {
                  elem('span', { text: '[', color: 'white' }, output);
                  if (level > 1) {
                    elem('span', { text: '...', color: 'silver' }, output);
                    // TODO: handle click
                  }
                  else {
                    for (var i = 0; i < obj.length; i++) {
                      if (i > 0) elem('span', { text: ', ', color: 'gray' }, output);
                      if (typeof obj[i] !== 'undefined')
                        logAppendObj(obj[i], output, level + 1);
                    }
                  }
                  elem('span', { text: ']', color: 'white' }, output);
                }
                else if (obj.createElement + '' === document.createElement + '' && obj.getElementById + '' === document.getElementById + '' && 'title' in obj) {
                  elem('span', { text: '#document ' + obj.title, color: 'green' }, output);
                }
                else if (obj.setInterval + '' === window.setInterval + '' && obj.setTimeout + '' === window.setTimeout + '' && 'location' in obj) {
                  elem('span', { text: '#window ' + obj.location, color: 'green' }, output);
                }
                else if (typeof obj.tagName === 'string' && obj.getElementsByTagName + '' === document.body.getElementsByTagName + '') {
                  elem('span', { text: '<' + obj.tagName + '>', color: 'green' }, output);
                }
                else if (obj + '' !== '[Object]') {
                  elem('span', { text: '{', color: 'cornflowerblue' }, output);
                  if (level > 1) {
                    elem('span', { text: '...', color: 'cornflowerblue', opacity: 0.5 }, output);
                    // TODO: handle click
                  }
                  else {
                    var first = true;
                    var hadMessage = false;
                    for (var k in obj) {
                      if (obj.hasOwnProperty && !obj.hasOwnProperty(k)) continue;
                      if (first) {
                        first = false;
                      }
                      else {
                        elem('span', { text: ', ', color: 'cornflowerblue', opacity: 0.3 }, output);
                        first = false;
                      }
                      elem('span', { text: k, color: 'cornflowerblue', fontWeight: 'bold' }, output);
                      elem('span', { text: ': ', color: 'cornflowerblue', opacity: 0.5 }, output);
                      logAppendObj(obj[k], output, level + 1);
                      if (k === 'message') hadMessage = true;
                    }
                    if (typeof obj.message === 'string' && ! hadMessage) {
                      elem('span', { text: 'message', color: 'tomato', fontWeight: 'bold' }, output);
                      elem('span', { text: ': ', color: 'tomato', opacity: 0.5 }, output);
                      elem('span', { text: obj.message, color: 'tomato' }, output);
                    }
                  }
                  elem('span', { text: '}', color: 'cornflowerblue' }, output);
                }
                else {
                  elem('span', { text: obj, color: 'cornflowerblue' }, output);
                }
                break;
            }
          }
        
        }
      • terminal.css
        .terminal-history {
          position: absolute;
          left: 0; bottom: 1.6em;
          width: 100%; height: 0;
          overflow-y: auto;
          overflow-x: hidden;
        }
        
        .terminal-history-content {
          margin: 0; padding: 0;
        }
        
        .terminal-prompt {
          position: absolute;
          left: 0; bottom: 1.5em;
          height: 1em;
        }
        
        .terminal-input {
          position: absolute;
          left: 0; bottom: 1.5em;
          width: 0; height: 1em;
          font: inherit;
          border: none;
          background: transparent;
          color: silver;
          outline: none;
          resize: none;
          overflow: hidden;
        }
    • API.d.ts
      declare module shell {
      
        export var drive: persistence.Drive;
      
      }
    • CommanderShell.ts
      module shell {
      
        export class CommanderShell {
      
          private _metricElem: HTMLDivElement;
          private _twoPanels: panels.TwoPanels;
          private _terminal: terminal.Terminal;
      
          private _metrics: CommanderShell.Metrics = {
            hostWidth: 0,
            hostHeight: 0,
            emWidth: 0,
            emHeight: 0
          };
      
          private _onsizechangedTimeout: number = 0;
          private _repl: noapi.HostedProcess;
          private _replAlive: Function;
      
          private _editor: editor.Editor = null;
      
          private _fnKeys: HTMLElement[] = [];
      
          constructor(private _host: HTMLElement, private _drive: persistence.Drive, complete: () => string) {
      
            this._repl = new noapi.HostedProcess({
              window: window,
              drive: this._drive,
              scriptPath: '/node_modules/repl.js',
              console: { log: (...args: any[]) => this._terminal.log(args) }
            });
            this._enhanceNoprocess(this._repl);
            this._replAlive = this._repl.keepAlive();
      
            elem(this._host, {
              background: 'black',
              color: 'silver'
            });
      
            this._metricElem = <any>elem('div', {
              position: 'absolute',
              opacity: 0,
              left: '-200px', top: '-200px',
              wdith: 'auto', height: 'auto'
            }, document.body);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
            elem('div', { text: 'MMMMMMMM' }, this._metricElem);
      
            this._terminal = new terminal.Terminal(this._host, this._repl);
            this._twoPanels = new panels.TwoPanels(this._host, '/', '/src', this._drive);
      
            var fnKeyActions = [null, 'Help', '<None>', 'View', 'Edit', 'Copy', 'Move', 'MkDir', 'Delete', 'Options', 'Save'];
            for (var i = 1; i <= 10; i++) {
              var fnKeyText = elem('div', {
                position: 'absolute', bottom: '0',
                whiteSpace: 'nowrap',
                cursor: 'pointer'
              }, this._host);
              var keyName = (i === 1 ? 'F1' : '' + i);
              elem('span', { background: 'black', color: 'gray', text: keyName + ' ' }, fnKeyText);
              elem('span', { background: 'gray', color: 'black', text: fnKeyActions[i] }, fnKeyText);
              this._fnKeys.push(fnKeyText);
            }
      
            on(this._fnKeys[4 - 1], 'click', () => {
              var cursorPath = this._twoPanels.cursorPath();
              this._openEditor(cursorPath);
            });
            on(this._fnKeys[5 - 1], 'click', () => {
              this._copyCommand();
              return true;
            });
            on(this._fnKeys[6 - 1], 'click', () => {
              this._moveCommand();
              return true;
            });
            on(this._fnKeys[7 - 1], 'click', () => {
              this._mkdirCommand();
              return true;
            });
            on(this._fnKeys[8 - 1], 'click', () => {
              this._removeCommand();
              return true;
            });
      
            on(this._fnKeys[10 - 1], 'click', () => {
              this._exportAllHTML();
            });
      
            var resizeMod = require('resize');
            resizeMod.on(winMetrics => {
              this._metrics.hostWidth = winMetrics.windowWidth;
              this._metrics.hostHeight = winMetrics.windowHeight;
              this.measure();
              this.arrange();
            });
      
            this._metrics.hostWidth = document.body.offsetWidth;
            this._metrics.hostHeight = document.body.offsetHeight;
      
            this.measure();
            this.arrange();
      
            on(this._host, 'keydown', e => this._keydown(<any>e));
      
            var _glob = (function() { return this; })();
            var applyConsole = (glob) => {
              if (glob.console) {
                var _oldLog: Function = glob.console.log;
                var term = this._terminal;
                console.log = function() {
                  var args = [];
                  for (var i = 0; i < arguments.length; i++) {
                    args.push(arguments[i]);
                  }
                  term.log(args);
                  if (typeof _oldLog === 'function')
                    _oldLog.apply(glob.console, args);
                };
              }
              else {
                var term = this._terminal;
                glob.console = {
                  log: function() {
                    var args = [];
                    for (var i = 0; i < arguments.length; i++) {
                      args.push(arguments[i]);
                    }
                    term.log(args);
                  }
                };
              }
            };
      
            applyConsole(_glob);
            applyConsole(window);
      
            setTimeout(() => {
              this._terminal.writeDirect(complete());
            }, 1);
          }
      
          measure() {
            this._metrics.emWidth = this._metricElem.offsetWidth/8;
            this._metrics.emHeight = this._metricElem.offsetHeight/8;
            this._twoPanels.measure();
            this._terminal.measure();
            //this._editor.measure();
          }
      
          arrange() {
            this._host.style.width = this._metrics.hostWidth + 'px';
            this._host.style.height = this._metrics.hostHeight + 'px';
            this._twoPanels.arrange(this._metrics);
            this._terminal.arrange(this._metrics);
            //this._editor.arrange();
      
            var keySize = ((this._metrics.hostWidth / 10) | 0);
            for (var i = 0; i < this._fnKeys.length; i++) {
              this._fnKeys[i].style.left = (i * keySize) + 'px';
              this._fnKeys[i].style.width = keySize + 'px';
            }
          }
      
          private _keydown(e: KeyboardEvent) {
            var res = this._keydownCore(e);
            if (res) {
              if (e.preventDefault)
                e.preventDefault();
            }
            return res;
          }
      
          private _keydownCore(e: KeyboardEvent) {
            if (this._editor) {
              if (e.keyCode === 27) {
                this._closeEditor();
                return true;
              }
              return;
            }
      
            if (e.keyCode === 27 && !e.altKey && !e.shiftKey && !e.ctrlKey && !e.metaKey) {
              this._twoPanels.toggleVisibility();
              return true;
            }
      
            if (e.keyCode === 13)
              this._terminal.clearInput();
      
            if ((e.keyCode === 13 && this._twoPanels.isVisible() && !this._terminal.hasInput())
              || (e.keyCode !== 13)) {
              if (this._twoPanels.keydown(e)) return true;
            }
      
            var cursorPath = this._twoPanels.cursorPath();
      
            this._terminal.focus();
            if (this._terminal.keydown(e, cursorPath)) return true;
      
            if (e.keyCode === 13)
              return this._execute(cursorPath, null);
      
            //if (e.keyCode < 32 || e.keyCode > 126) {
            //	this._terminal.log('CommanderShell::keydown ' + e.yCode);
            //}
      
            if (e.keyCode === 115) { // F4
              var editorPath = cursorPath;
              if (e.shiftKey) {
                editorPath = prompt('Edit file:', editorPath);
                if (!editorPath) return;
              }
              this._openEditor(editorPath);
              return true;
            }
      
            if (e.keyCode === 116) { // F5
              this._copyCommand();
              return true;
            }
      
            if (e.keyCode === 117) { // F6
              this._moveCommand();
              return true;
            }
      
            if (e.keyCode === 118) { // F7
              this._mkdirCommand();
              return true;
            }
      
            if (e.keyCode === 119) { // F8
              this._removeCommand();
              return true;
            }
      
            if (e.keyCode === 121) { // F10
              this._exportAllHTML();
              return true;
            }
      
            if (e.ctrlKey || e.altKey || e.metaKey) {
              this._terminal.log(['CommanderShell::keydown ', e.keyCode]);
            }
          }
      
          private _getFilesFor(path: string): string[] {
            var fileResult: string[] = [];
            var allFiles = this._drive.files();
            for (var i = 0; i < allFiles.length; i++) {
              var f = allFiles[i];
              if (f.slice(0, path.length) !== path) continue;
              if (f === path || f.slice(path.length, path.length + 1) === '/')
                fileResult.push(f);
            }
            return fileResult;
          }
      
          private _copyCommand() {
            var cursorPath = this._twoPanels.cursorPath();
            var currentOppositePath = this._twoPanels.currentOppositePath();
            if (!cursorPath || !currentOppositePath || cursorPath === '/') return;
      
            var filesToCopy: string[] = this._getFilesFor(cursorPath);
      
            var targetDir = prompt('Copy ' + filesToCopy.length + ' files from\n   "' + cursorPath + '"\n  to', currentOppositePath);
            if (!targetDir) return;
      
            var normTargetDir = targetDir;
      
            if (filesToCopy.length === 1 && filesToCopy[0] === cursorPath && normTargetDir.slice(-1) !== '/') {
              var content = this._drive.read(filesToCopy[0]);
              this._drive.write(normTargetDir, content);
            }
            else {
              if (normTargetDir.slice(-1) != '/') normTargetDir += '/';
              var baseDir = cursorPath.slice(0, cursorPath.lastIndexOf('/') + 1);
      
              for (var i = 0; i < filesToCopy.length; i++) {
                var content = this._drive.read(filesToCopy[i]);
                var newPath =
                  normTargetDir +
                  filesToCopy[i].slice(baseDir.length);
                this._drive.write(newPath, content);
              }
            }
            this.measure();
            this.arrange();
          }
      
          private _moveCommand() {
            var cursorPath = this._twoPanels.cursorPath();
            var currentOppositePath = this._twoPanels.currentOppositePath();
            if (!cursorPath || !currentOppositePath || cursorPath === '/') return;
      
            var filesToCopy: string[] = this._getFilesFor(cursorPath);
      
            var targetDir = prompt('Move/rename ' + filesToCopy.length + ' files from\n   "' + cursorPath + '"\n  to', currentOppositePath);
            if (!targetDir) return;
      
            var normTargetDir = targetDir;
      
            if (filesToCopy.length === 1 && filesToCopy[0] === cursorPath && normTargetDir.slice(-1) !== '/') {
              var content = this._drive.read(filesToCopy[0]);
              this._drive.write(normTargetDir, content);
              this._drive.write(filesToCopy[0], null);
            }
            else {
              if (normTargetDir.slice(-1) !== '/') normTargetDir += '/';
              var baseDir = cursorPath.slice(0, cursorPath.lastIndexOf('/') + 1);
      
              for (var i = 0; i < filesToCopy.length; i++) {
                var content = this._drive.read(filesToCopy[i]);
                var newPath =
                  normTargetDir +
                  filesToCopy[i].slice(baseDir.length);
                this._drive.write(newPath, content);
                this._drive.write(filesToCopy[i], null);
              }
            }
            this.measure();
            this.arrange();
      
          }
      
          private _mkdirCommand() {
            var dir = prompt('Make directory: ');
            if (!dir || dir === '/') return;
      
            var dirPath = dir;
            if (dir.slice(0, 1) !== '/') {
              dirPath = this._twoPanels.currentPath() + '/' + dirPath;
              if (dirPath.slice(0, 2) === '//') dirPath = dirPath.slice(1);
            }
      
            if (dirPath.slice(-1) === '/')
              dirPath = dirPath.slice(0, dirPath.length - 1);
      
            var matchFiles = this._getFilesFor(dirPath);
            if (matchFiles.length) return;
      
            this._drive.write(dirPath + '/', '');
            this.measure();
            this.arrange();
          }
      
          private _removeCommand() {
            var cursorPath = this._twoPanels.cursorPath();
            if (!cursorPath || cursorPath === '/') return;
      
            var filesToRemove: string[] = this._getFilesFor(cursorPath);
      
            if (!confirm('Remove ' + filesToRemove.length + ' files from\n   "' + cursorPath + '"?')) return;
      
            for (var i = 0; i < filesToRemove.length; i++) {
              this._drive.write(filesToRemove[i], null);
            }
            this.measure();
            this.arrange();
          }
      
          private _closeEditor() {
            var newText = this._editor.getText();
            var cursorPath = this._twoPanels.cursorPath();
            var oldText = this._drive.read(cursorPath);
            if (newText !== oldText) {
              if (confirm('File was changed: ' + cursorPath + ', save before exit?'))
                this._drive.write(cursorPath, newText);
            }
            this._editor.close();
            this._editor = null;
            this.measure();
            this.arrange();
          }
      
          private _openEditor(cursorPath: string) {
            if (cursorPath) {
              var text = this._drive.read(cursorPath);
              if (typeof text === 'string') {
                this._terminal.log(['@edit ', cursorPath]);
                this._editor = new editor.Editor(this._host, cursorPath, text);
                setTimeout(() => {
                  if (this._editor) this._editor.focus();
                }, 1);
              }
              else {
                this._terminal.log(['text at ', cursorPath, ' is ', text]);
              }
            }
            else {
              this._terminal.log(['cursorPath = ', cursorPath]);
            }
          }
      
          private _exportAllHTML() {
            var window = require('nowindow');
            var document = window.document;
      
            this._terminal.log(['@save']);
            var filename = saveFileName();
            exportBlob(filename, ['<!doctype html>\n', document.documentElement.outerHTML]);
      
            function exportBlob(filename: string, textChunks: string[]) {
              try {
                var blob: Blob = new (<any>Blob)(textChunks, { type: 'application/octet-stream' });
              }
              catch (blobError) {
                exportDocumentWrite(filename, textChunks.join(''));
                return;
              }
      
              exportBlobHTML5(filename, blob);
            }
      
            function exportBlobHTML5(filename, blob: Blob) {
              var url = URL.createObjectURL(blob);
              var a = document.createElement('a');
              a.href = url;
              a.setAttribute('download', filename);
              try {
                // safer save method, supposed to work with FireFox
                var evt = document.createEvent("MouseEvents");
                (<any>evt).initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                a.dispatchEvent(evt);
              }
              catch (e) {
                a.click();
              }
            }
      
            function exportDocumentWrite(filename: string, content: string) {
              var win = document.createElement('iframe');
              win.style.width = '100px';
              win.style.height = '100px';
              win.style.display = 'none';
              document.body.appendChild(win);
      
              setTimeout(() => {
                var doc = win.contentDocument || (<any>win).document;
                doc.open();
                doc.write(content);
                doc.close();
      
                doc.execCommand('SaveAs', null, filename);
              }, 200);
      
            }
      
            function saveFileName() {
      
              if (window.location.protocol.toLowerCase() === 'blob:')
                return 'mi-save.html';
      
              var urlParts = window.location.pathname.split('/');
              var currentFileName = decodeURI(urlParts[urlParts.length - 1]);
              var lastDot = currentFileName.indexOf('.');
              if (lastDot > 0) {
                currentFileName = currentFileName.slice(0, lastDot) + '.html';
              }
              else {
                currentFileName += '.html';
              }
              return currentFileName;
            }
          }
      
          private _enhanceNoprocess(nopro: noapi.HostedProcess) {
            nopro.coreModules['nodrive'] = this._drive;
            nopro.coreModules['nowindow'] = window;
          }
      
          private _execute(cursorPath: string, callback: Function) {
      
            if (/\.js$/.test(cursorPath)) {
              var text = this._drive.read(cursorPath);
              if (typeof text !== 'undefined' && text !== null) {
                this._terminal.log(['@node ' + cursorPath]);
                var ani = this._twoPanels.temporarilyHidePanels();
      
                setTimeout(() => {
                  try {
                    var proc = new noapi.HostedProcess({
                      window: window,
                      drive: this._drive,
                      scriptPath: cursorPath,
                      console: { log: (...args: any[]) => this._terminal.log(args) }
                    });
                    this._enhanceNoprocess(proc);
                    var result = proc.eval(text);
                    if (typeof proc.exitCode == 'number')
                      result = proc.exitCode;
                    else
                      result = proc.mainModule.exports;
                  }
                  catch (error) {
                    result = error;
                  }
                  ani();
                  this._terminal.log([result]);
                },
                  1);
      
                return true;
              }
            }
            else if (/\.ts$/.test(cursorPath)) {
              var text = this._drive.read('/src/typescript/tsc.js');
              if (typeof text !== 'undefined' && text !== null) {
                this._terminal.log(['@tsc ' + cursorPath]);
                var ani = this._twoPanels.temporarilyHidePanels();
                setTimeout(() => {
                  try {
                    var proc = new noapi.HostedProcess({
                      window: window,
                      drive: this._drive,
                      scriptPath: '/src/typescript/tsc.js',
                      argv: ['node', '/src/typescript/tsc.js', cursorPath],
                      console: { log: (...args: any[]) => this._terminal.log(args) }
                    });
                    this._enhanceNoprocess(proc);
                    setTimeout(() => {
                      if (!finishedOK) {
                        var compileTime = +new Date() - start;
                        this._terminal.log(['Compilation seems to have failed after ' + compileTime / 1000 + ' sec.']);
                        ani();
                      }
                    }, 100);
                    var start = +new Date();
                    this._terminal.log(['... started at ' + (new Date())]);
                    var result = proc.eval(text);
                    this._terminal.log(['...finished at ' + (new Date())]);
                    if (typeof proc.exitCode == 'number')
                      result = proc.exitCode;
                    else
                      result = proc.mainModule.exports;
                    this._terminal.log([result]);
                  }
                  catch (error) {
                    this._terminal.log([error]);
                  }
                  var finishedOK = true;
                  ani();
                }, 1);
                return true;
              }
            }
            else if (/.html$/.test(cursorPath)) {
              this._terminal.log(['@build ' + cursorPath]);
              var ani = this._twoPanels.temporarilyHidePanels();
              setTimeout(() => {
      
                var htmlTemplate = this._drive.read(cursorPath);
      
                var blankWindow = window.open('', '_blank' + (+new Date()));
      
                var pollUntil = (+new Date()) + 1000;
      
                while (+new Date() < pollUntil) {
                  try {
                    var blankWindowDoc = blankWindow.document;
                  }
                  catch (error) { }
                }
      
                if (!blankWindowDoc) {
                  alert('Cannot open a window to host the built document');
                  ani();
                  return;
                }
      
                blankWindow.document.open();
                blankWindow.document.write([
                  '<html><title>Building ' + cursorPath + '...</title>',
                  '<style>',
                  'html, body { background: black; color: greenyellow; }',
                  'h2 { font-weight: 100; width: 40%; position: fixed; font-size: 200%; }',
                  'pre { width: 50%; padding-left: 50%; opacity: 1; transition: opacity 1s; }',
                  '</style>',
                  '<h2>Building ' + cursorPath + '</h2>',
                  '<' + 's' + 'cript>',
                  'var textContentProp = "textContent" in document.createElement("pre") ? "textContent" : "innerText";',
                  'var lastLogElem;',
                  'function log(text) {',
                  '  var logElem = document.createElement("pre");',
                  '  logElem[textContentProp]=text;',
                  '  document.body.appendChild(logElem);',
                  '  logElem.scrollIntoView();',
                  '  if (lastLogElem) {',
                  '    lastLogElem.style.opacity = 0.5;',
                  '  }',
                  '  lastLogElem = logElem;',
                  '}',
                  '<' + '/' + 's' + 'cript>'].join('\n'));
                blankWindow.document.close();
      
                var buildScope = {
                  embedFile: (file: string) => this._drive.read(file)
                };
      
                try {
                  build.processTemplate(
                    htmlTemplate,
                    [buildScope],
                    txt => {
                      this._terminal.log([txt]);
                      (<any>blankWindow).log(txt);
                    },
                    (error, result) => {
                      if (error) {
                        this._terminal.log([error]);
                        ani();
                        return;
                      }
      
                      try {
                        var blob = new Blob([result], { type: 'text/html' });
                        var url = URL.createObjectURL(blob);
                        blankWindow.location.replace(url);
                      }
                      catch (blobError) {
                        blankWindow.document.open();
                        blankWindow.document.write(result);
                        blankWindow.document.close();
                      }
      
                      ani();
      
                    });
                }
                catch (errorProcessTemplate) {
                  ani();
                  this._terminal.log([errorProcessTemplate]);
                }
              }, 1);
            }
            else {
              var ani = this._twoPanels.temporarilyHidePanels();
              this._terminal.log(['@type ' + cursorPath]);
              this._terminal.log([this._drive.read(cursorPath)]);
              ani();
            }
          }
      
        }
      
        export module CommanderShell {
      
          export interface Metrics {
            hostWidth: number;
            hostHeight: number;
            emWidth: number;
            emHeight: number;
          }
      
        }
      
      }
    • keys.ts
      module shell.keys {
      
      }
    • layout.ts
      module shell.layout {
      
        // initialize with roughly-arbitrary values
        export var windowWidth = 600;
        export var windowHeight = 400;
        export var emWidth = 18;
        export var emHeight = 28;
      
        export function update() {
          // TODO: queu on timer
        }
      
        export module update {
      
          export function now() {
            // TODO: stop timer, update layout
          }
      
          export function next(callback: Function) {
            // TODO: add to run-once list of callbacks
          }
      
          export function on(callback: Function) {
            // TODO: add to every-time list of callbacks
          }
      
          export function off(callback: Function) {
            // TODO: remove from every-time list of callbacks
          }
        }
      }
    • start.ts
      declare var require;
      
      module shell {
      
        export var buildTime: number;
        export var buildMessage: string;
      
        export function start(complete: () => string) {
          var drive = require('nodrive');
          var parentWin = require('nowindow');
          parentWin.document.body.background = 'black';
          if (parentWin.document.parentElement)
          	parentWin.document.parentElement.body.background = 'black';
      
          document.body.style.overflow = 'hidden';
          document.body.parentElement.style.overflow = 'hidden';
      
          var commander = new CommanderShell(document.body, drive, complete);
      
      }
      
      }
  • typescript
    • lib.d.ts
      /*! *****************************************************************************
      Copyright (c) Microsoft Corporation. All rights reserved. 
      Licensed under the Apache License, Version 2.0 (the "License"); you may not use
      this file except in compliance with the License. You may obtain a copy of the
      License at http://www.apache.org/licenses/LICENSE-2.0  
       
      THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
      WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
      MERCHANTABLITY OR NON-INFRINGEMENT. 
       
      See the Apache Version 2.0 License for specific language governing permissions
      and limitations under the License.
      ***************************************************************************** */
      
      /// <reference no-default-lib="true"/>
      
      /////////////////////////////
      /// ECMAScript APIs
      /////////////////////////////
      
      declare var NaN: number;
      declare var Infinity: number;
      
      /**
        * Evaluates JavaScript code and executes it. 
        * @param x A String value that contains valid JavaScript code.
        */
      declare function eval(x: string): any;
      
      /**
        * Converts A string to an integer.
        * @param s A string to convert into a number.
        * @param radix A value between 2 and 36 that specifies the base of the number in numString. 
        * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.
        * All other strings are considered decimal.
        */
      declare function parseInt(s: string, radix?: number): number;
      
      /**
        * Converts a string to a floating-point number. 
        * @param string A string that contains a floating-point number. 
        */
      declare function parseFloat(string: string): number;
      
      /**
        * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). 
        * @param number A numeric value.
        */
      declare function isNaN(number: number): boolean;
      
      /** 
        * Determines whether a supplied number is finite.
        * @param number Any numeric value.
        */
      declare function isFinite(number: number): boolean;
      
      /**
        * Gets the unencoded version of an encoded Uniform Resource Identifier (URI).
        * @param encodedURI A value representing an encoded URI.
        */
      declare function decodeURI(encodedURI: string): string;
      
      /**
        * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).
        * @param encodedURIComponent A value representing an encoded URI component.
        */
      declare function decodeURIComponent(encodedURIComponent: string): string;
      
      /** 
        * Encodes a text string as a valid Uniform Resource Identifier (URI)
        * @param uri A value representing an encoded URI.
        */
      declare function encodeURI(uri: string): string;
      
      /**
        * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).
        * @param uriComponent A value representing an encoded URI component.
        */
      declare function encodeURIComponent(uriComponent: string): string;
      
      interface PropertyDescriptor {
          configurable?: boolean;
          enumerable?: boolean;
          value?: any;
          writable?: boolean;
          get? (): any;
          set? (v: any): void;
      }
      
      interface PropertyDescriptorMap {
          [s: string]: PropertyDescriptor;
      }
      
      interface Object {
          /** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */
          constructor: Function;
      
          /** Returns a string representation of an object. */
          toString(): string;
      
          /** Returns a date converted to a string using the current locale. */
          toLocaleString(): string;
      
          /** Returns the primitive value of the specified object. */
          valueOf(): Object;
      
          /**
            * Determines whether an object has a property with the specified name. 
            * @param v A property name.
            */
          hasOwnProperty(v: string): boolean;
      
          /**
            * Determines whether an object exists in another object's prototype chain. 
            * @param v Another object whose prototype chain is to be checked.
            */
          isPrototypeOf(v: Object): boolean;
      
          /** 
            * Determines whether a specified property is enumerable.
            * @param v A property name.
            */
          propertyIsEnumerable(v: string): boolean;
      }
      
      interface ObjectConstructor {
          new (value?: any): Object;
          (): any;
          (value: any): any;
      
          /** A reference to the prototype for a class of objects. */
          prototype: Object;
      
          /** 
            * Returns the prototype of an object. 
            * @param o The object that references the prototype.
            */
          getPrototypeOf(o: any): any;
      
          /**
            * Gets the own property descriptor of the specified object. 
            * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. 
            * @param o Object that contains the property.
            * @param p Name of the property.
          */
          getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor;
      
          /** 
            * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly 
            * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.
            * @param o Object that contains the own properties.
            */
          getOwnPropertyNames(o: any): string[];
      
          /** 
            * Creates an object that has the specified prototype, and that optionally contains specified properties.
            * @param o Object to use as a prototype. May be null
            * @param properties JavaScript object that contains one or more property descriptors. 
            */
          create(o: any, properties?: PropertyDescriptorMap): any;
      
          /**
            * Adds a property to an object, or modifies attributes of an existing property. 
            * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.
            * @param p The property name.
            * @param attributes Descriptor for the property. It can be for a data property or an accessor property.
            */
          defineProperty(o: any, p: string, attributes: PropertyDescriptor): any;
      
          /**
            * Adds one or more properties to an object, and/or modifies attributes of existing properties. 
            * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.
            * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.
            */
          defineProperties(o: any, properties: PropertyDescriptorMap): any;
      
          /**
            * Prevents the modification of attributes of existing properties, and prevents the addition of new properties.
            * @param o Object on which to lock the attributes. 
            */
          seal<T>(o: T): T;
      
          /**
            * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.
            * @param o Object on which to lock the attributes.
            */
          freeze<T>(o: T): T;
      
          /**
            * Prevents the addition of new properties to an object.
            * @param o Object to make non-extensible. 
            */
          preventExtensions<T>(o: T): T;
      
          /**
            * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.
            * @param o Object to test. 
            */
          isSealed(o: any): boolean;
      
          /**
            * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.
            * @param o Object to test.  
            */
          isFrozen(o: any): boolean;
      
          /**
            * Returns a value that indicates whether new properties can be added to an object.
            * @param o Object to test. 
            */
          isExtensible(o: any): boolean;
      
          /**
            * Returns the names of the enumerable properties and methods of an object.
            * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.
            */
          keys(o: any): string[];
      }
      
      /**
        * Provides functionality common to all JavaScript objects.
        */
      declare var Object: ObjectConstructor;
      
      /**
        * Creates a new function.
        */
      interface Function {
          /**
            * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.
            * @param thisArg The object to be used as the this object.
            * @param argArray A set of arguments to be passed to the function.
            */
          apply(thisArg: any, argArray?: any): any;
      
          /**
            * Calls a method of an object, substituting another object for the current object.
            * @param thisArg The object to be used as the current object.
            * @param argArray A list of arguments to be passed to the method.
            */
          call(thisArg: any, ...argArray: any[]): any;
      
          /**
            * For a given function, creates a bound function that has the same body as the original function. 
            * The this object of the bound function is associated with the specified object, and has the specified initial parameters.
            * @param thisArg An object to which the this keyword can refer inside the new function.
            * @param argArray A list of arguments to be passed to the new function.
            */
          bind(thisArg: any, ...argArray: any[]): any;
      
          prototype: any;
          length: number;
      
          // Non-standard extensions
          arguments: any;
          caller: Function;
      }
      
      interface FunctionConstructor {
          /**
            * Creates a new function.
            * @param args A list of arguments the function accepts.
            */
          new (...args: string[]): Function;
          (...args: string[]): Function;
          prototype: Function;
      }
      
      declare var Function: FunctionConstructor;
      
      interface IArguments {
          [index: number]: any;
          length: number;
          callee: Function;
      }
      
      interface String {
          /** Returns a string representation of a string. */
          toString(): string;
      
          /**
            * Returns the character at the specified index.
            * @param pos The zero-based index of the desired character.
            */
          charAt(pos: number): string;
      
          /** 
            * Returns the Unicode value of the character at the specified location.
            * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.
            */
          charCodeAt(index: number): number;
      
          /**
            * Returns a string that contains the concatenation of two or more strings.
            * @param strings The strings to append to the end of the string.  
            */
          concat(...strings: string[]): string;
      
          /**
            * Returns the position of the first occurrence of a substring. 
            * @param searchString The substring to search for in the string
            * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.
            */
          indexOf(searchString: string, position?: number): number;
      
          /**
            * Returns the last occurrence of a substring in the string.
            * @param searchString The substring to search for.
            * @param position The index at which to begin searching. If omitted, the search begins at the end of the string.
            */
          lastIndexOf(searchString: string, position?: number): number;
      
          /**
            * Determines whether two strings are equivalent in the current locale.
            * @param that String to compare to target string
            */
          localeCompare(that: string): number;
      
          /** 
            * Matches a string with a regular expression, and returns an array containing the results of that search.
            * @param regexp A variable name or string literal containing the regular expression pattern and flags.
            */
          match(regexp: string): RegExpMatchArray;
      
          /** 
            * Matches a string with a regular expression, and returns an array containing the results of that search.
            * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. 
            */
          match(regexp: RegExp): RegExpMatchArray;
      
          /**
            * Replaces text in a string, using a regular expression or search string.
            * @param searchValue A String object or string literal that represents the regular expression
            * @param replaceValue A String object or string literal containing the text to replace for every successful match of rgExp in stringObj.
            */
          replace(searchValue: string, replaceValue: string): string;
      
          /**
            * Replaces text in a string, using a regular expression or search string.
            * @param searchValue A String object or string literal that represents the regular expression
            * @param replaceValue A function that returns the replacement text.
            */
          replace(searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string;
      
          /**
            * Replaces text in a string, using a regular expression or search string.
            * @param searchValue A Regular Expression object containing the regular expression pattern and applicable flags
            * @param replaceValue A String object or string literal containing the text to replace for every successful match of rgExp in stringObj.
            */
          replace(searchValue: RegExp, replaceValue: string): string;
      
          /**
            * Replaces text in a string, using a regular expression or search string.
            * @param searchValue A Regular Expression object containing the regular expression pattern and applicable flags
            * @param replaceValue A function that returns the replacement text.
            */
          replace(searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string;
      
          /**
            * Finds the first substring match in a regular expression search.
            * @param regexp The regular expression pattern and applicable flags. 
            */
          search(regexp: string): number;
      
          /**
            * Finds the first substring match in a regular expression search.
            * @param regexp The regular expression pattern and applicable flags. 
            */
          search(regexp: RegExp): number;
      
          /**
            * Returns a section of a string.
            * @param start The index to the beginning of the specified portion of stringObj. 
            * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. 
            * If this value is not specified, the substring continues to the end of stringObj.
            */
          slice(start?: number, end?: number): string;
      
          /**
            * Split a string into substrings using the specified separator and return them as an array.
            * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. 
            * @param limit A value used to limit the number of elements returned in the array.
            */
          split(separator: string, limit?: number): string[];
      
          /**
            * Split a string into substrings using the specified separator and return them as an array.
            * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. 
            * @param limit A value used to limit the number of elements returned in the array.
            */
          split(separator: RegExp, limit?: number): string[];
      
          /**
            * Returns the substring at the specified location within a String object. 
            * @param start The zero-based index number indicating the beginning of the substring.
            * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.
            * If end is omitted, the characters from start through the end of the original string are returned.
            */
          substring(start: number, end?: number): string;
      
          /** Converts all the alphabetic characters in a string to lowercase. */
          toLowerCase(): string;
      
          /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */
          toLocaleLowerCase(): string;
      
          /** Converts all the alphabetic characters in a string to uppercase. */
          toUpperCase(): string;
      
          /** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */
          toLocaleUpperCase(): string;
      
          /** Removes the leading and trailing white space and line terminator characters from a string. */
          trim(): string;
      
          /** Returns the length of a String object. */
          length: number;
      
          // IE extensions
          /**
            * Gets a substring beginning at the specified location and having the specified length.
            * @param from The starting position of the desired substring. The index of the first character in the string is zero.
            * @param length The number of characters to include in the returned substring.
            */
          substr(from: number, length?: number): string;
      
          /** Returns the primitive value of the specified object. */
          valueOf(): string;
      
          [index: number]: string;
      }
      
      interface StringConstructor {
          new (value?: any): String;
          (value?: any): string;
          prototype: String;
          fromCharCode(...codes: number[]): string;
      }
      
      /** 
        * Allows manipulation and formatting of text strings and determination and location of substrings within strings. 
        */
      declare var String: StringConstructor;
      
      interface Boolean {
          /** Returns the primitive value of the specified object. */
          valueOf(): boolean;
      }
      
      interface BooleanConstructor {
          new (value?: any): Boolean;
          (value?: any): boolean;
          prototype: Boolean;
      }
      
      declare var Boolean: BooleanConstructor;
      
      interface Number {
          /**
            * Returns a string representation of an object.
            * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.
            */
          toString(radix?: number): string;
      
          /** 
            * Returns a string representing a number in fixed-point notation.
            * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.
            */
          toFixed(fractionDigits?: number): string;
      
          /**
            * Returns a string containing a number represented in exponential notation.
            * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.
            */
          toExponential(fractionDigits?: number): string;
      
          /**
            * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.
            * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.
            */
          toPrecision(precision?: number): string;
      
          /** Returns the primitive value of the specified object. */
          valueOf(): number;
      }
      
      interface NumberConstructor {
          new (value?: any): Number;
          (value?: any): number;
          prototype: Number;
      
          /** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */
          MAX_VALUE: number;
      
          /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */
          MIN_VALUE: number;
      
          /** 
            * A value that is not a number.
            * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.
            */
          NaN: number;
      
          /** 
            * A value that is less than the largest negative number that can be represented in JavaScript.
            * JavaScript displays NEGATIVE_INFINITY values as -infinity. 
            */
          NEGATIVE_INFINITY: number;
      
          /**
            * A value greater than the largest number that can be represented in JavaScript. 
            * JavaScript displays POSITIVE_INFINITY values as infinity. 
            */
          POSITIVE_INFINITY: number;
      }
      
      /** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */
      declare var Number: NumberConstructor;
      
      interface TemplateStringsArray extends Array<string> {
          raw: string[];
      }
      
      interface Math {
          /** The mathematical constant e. This is Euler's number, the base of natural logarithms. */
          E: number;
          /** The natural logarithm of 10. */
          LN10: number;
          /** The natural logarithm of 2. */
          LN2: number;
          /** The base-2 logarithm of e. */
          LOG2E: number;
          /** The base-10 logarithm of e. */
          LOG10E: number;
          /** Pi. This is the ratio of the circumference of a circle to its diameter. */
          PI: number;
          /** The square root of 0.5, or, equivalently, one divided by the square root of 2. */
          SQRT1_2: number;
          /** The square root of 2. */
          SQRT2: number;
          /**
            * Returns the absolute value of a number (the value without regard to whether it is positive or negative). 
            * For example, the absolute value of -5 is the same as the absolute value of 5.
            * @param x A numeric expression for which the absolute value is needed.
            */
          abs(x: number): number;
          /**
            * Returns the arc cosine (or inverse cosine) of a number. 
            * @param x A numeric expression.
            */
          acos(x: number): number;
          /** 
            * Returns the arcsine of a number. 
            * @param x A numeric expression.
            */
          asin(x: number): number;
          /**
            * Returns the arctangent of a number. 
            * @param x A numeric expression for which the arctangent is needed.
            */
          atan(x: number): number;
          /**
            * Returns the angle (in radians) from the X axis to a point.
            * @param y A numeric expression representing the cartesian y-coordinate.
            * @param x A numeric expression representing the cartesian x-coordinate.
            */
          atan2(y: number, x: number): number;
          /**
            * Returns the smallest number greater than or equal to its numeric argument. 
            * @param x A numeric expression.
            */
          ceil(x: number): number;
          /**
            * Returns the cosine of a number. 
            * @param x A numeric expression that contains an angle measured in radians.
            */
          cos(x: number): number;
          /**
            * Returns e (the base of natural logarithms) raised to a power. 
            * @param x A numeric expression representing the power of e.
            */
          exp(x: number): number;
          /**
            * Returns the greatest number less than or equal to its numeric argument. 
            * @param x A numeric expression.
            */
          floor(x: number): number;
          /**
            * Returns the natural logarithm (base e) of a number. 
            * @param x A numeric expression.
            */
          log(x: number): number;
          /**
            * Returns the larger of a set of supplied numeric expressions. 
            * @param values Numeric expressions to be evaluated.
            */
          max(...values: number[]): number;
          /**
            * Returns the smaller of a set of supplied numeric expressions. 
            * @param values Numeric expressions to be evaluated.
            */
          min(...values: number[]): number;
          /**
            * Returns the value of a base expression taken to a specified power. 
            * @param x The base value of the expression.
            * @param y The exponent value of the expression.
            */
          pow(x: number, y: number): number;
          /** Returns a pseudorandom number between 0 and 1. */
          random(): number;
          /** 
            * Returns a supplied numeric expression rounded to the nearest number.
            * @param x The value to be rounded to the nearest number.
            */
          round(x: number): number;
          /**
            * Returns the sine of a number.
            * @param x A numeric expression that contains an angle measured in radians.
            */
          sin(x: number): number;
          /**
            * Returns the square root of a number.
            * @param x A numeric expression.
            */
          sqrt(x: number): number;
          /**
            * Returns the tangent of a number.
            * @param x A numeric expression that contains an angle measured in radians.
            */
          tan(x: number): number;
      }
      /** An intrinsic object that provides basic mathematics functionality and constants. */
      declare var Math: Math;
      
      /** Enables basic storage and retrieval of dates and times. */
      interface Date {
          /** Returns a string representation of a date. The format of the string depends on the locale. */
          toString(): string;
          /** Returns a date as a string value. */
          toDateString(): string;
          /** Returns a time as a string value. */
          toTimeString(): string;
          /** Returns a value as a string value appropriate to the host environment's current locale. */
          toLocaleString(): string;
          /** Returns a date as a string value appropriate to the host environment's current locale. */
          toLocaleDateString(): string;
          /** Returns a time as a string value appropriate to the host environment's current locale. */
          toLocaleTimeString(): string;
          /** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */
          valueOf(): number;
          /** Gets the time value in milliseconds. */
          getTime(): number;
          /** Gets the year, using local time. */
          getFullYear(): number;
          /** Gets the year using Universal Coordinated Time (UTC). */
          getUTCFullYear(): number;
          /** Gets the month, using local time. */
          getMonth(): number;
          /** Gets the month of a Date object using Universal Coordinated Time (UTC). */
          getUTCMonth(): number;
          /** Gets the day-of-the-month, using local time. */
          getDate(): number;
          /** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */
          getUTCDate(): number;
          /** Gets the day of the week, using local time. */
          getDay(): number;
          /** Gets the day of the week using Universal Coordinated Time (UTC). */
          getUTCDay(): number;
          /** Gets the hours in a date, using local time. */
          getHours(): number;
          /** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */
          getUTCHours(): number;
          /** Gets the minutes of a Date object, using local time. */
          getMinutes(): number;
          /** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */
          getUTCMinutes(): number;
          /** Gets the seconds of a Date object, using local time. */
          getSeconds(): number;
          /** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */
          getUTCSeconds(): number;
          /** Gets the milliseconds of a Date, using local time. */
          getMilliseconds(): number;
          /** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */
          getUTCMilliseconds(): number;
          /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */
          getTimezoneOffset(): number;
          /** 
            * Sets the date and time value in the Date object.
            * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. 
            */
          setTime(time: number): number;
          /**
            * Sets the milliseconds value in the Date object using local time. 
            * @param ms A numeric value equal to the millisecond value.
            */
          setMilliseconds(ms: number): number;
          /** 
            * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).
            * @param ms A numeric value equal to the millisecond value. 
            */
          setUTCMilliseconds(ms: number): number;
      
          /**
            * Sets the seconds value in the Date object using local time. 
            * @param sec A numeric value equal to the seconds value.
            * @param ms A numeric value equal to the milliseconds value.
            */
          setSeconds(sec: number, ms?: number): number;
          /**
            * Sets the seconds value in the Date object using Universal Coordinated Time (UTC).
            * @param sec A numeric value equal to the seconds value.
            * @param ms A numeric value equal to the milliseconds value.
            */
          setUTCSeconds(sec: number, ms?: number): number;
          /**
            * Sets the minutes value in the Date object using local time. 
            * @param min A numeric value equal to the minutes value. 
            * @param sec A numeric value equal to the seconds value. 
            * @param ms A numeric value equal to the milliseconds value.
            */
          setMinutes(min: number, sec?: number, ms?: number): number;
          /**
            * Sets the minutes value in the Date object using Universal Coordinated Time (UTC).
            * @param min A numeric value equal to the minutes value. 
            * @param sec A numeric value equal to the seconds value. 
            * @param ms A numeric value equal to the milliseconds value.
            */
          setUTCMinutes(min: number, sec?: number, ms?: number): number;
          /**
            * Sets the hour value in the Date object using local time.
            * @param hours A numeric value equal to the hours value.
            * @param min A numeric value equal to the minutes value.
            * @param sec A numeric value equal to the seconds value. 
            * @param ms A numeric value equal to the milliseconds value.
            */
          setHours(hours: number, min?: number, sec?: number, ms?: number): number;
          /**
            * Sets the hours value in the Date object using Universal Coordinated Time (UTC).
            * @param hours A numeric value equal to the hours value.
            * @param min A numeric value equal to the minutes value.
            * @param sec A numeric value equal to the seconds value. 
            * @param ms A numeric value equal to the milliseconds value.
            */
          setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;
          /**
            * Sets the numeric day-of-the-month value of the Date object using local time. 
            * @param date A numeric value equal to the day of the month.
            */
          setDate(date: number): number;
          /** 
            * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).
            * @param date A numeric value equal to the day of the month. 
            */
          setUTCDate(date: number): number;
          /** 
            * Sets the month value in the Date object using local time. 
            * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. 
            * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.
            */
          setMonth(month: number, date?: number): number;
          /**
            * Sets the month value in the Date object using Universal Coordinated Time (UTC).
            * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.
            * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.
            */
          setUTCMonth(month: number, date?: number): number;
          /**
            * Sets the year of the Date object using local time.
            * @param year A numeric value for the year.
            * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.
            * @param date A numeric value equal for the day of the month.
            */
          setFullYear(year: number, month?: number, date?: number): number;
          /**
            * Sets the year value in the Date object using Universal Coordinated Time (UTC).
            * @param year A numeric value equal to the year.
            * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.
            * @param date A numeric value equal to the day of the month.
            */
          setUTCFullYear(year: number, month?: number, date?: number): number;
          /** Returns a date converted to a string using Universal Coordinated Time (UTC). */
          toUTCString(): string;
          /** Returns a date as a string value in ISO format. */
          toISOString(): string;
          /** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */
          toJSON(key?: any): string;
      }
      
      interface DateConstructor {
          new (): Date;
          new (value: number): Date;
          new (value: string): Date;
          new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;
          (): string;
          prototype: Date;
          /**
            * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.
            * @param s A date string
            */
          parse(s: string): number;
          /**
            * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. 
            * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.
            * @param month The month as an number between 0 and 11 (January to December).
            * @param date The date as an number between 1 and 31.
            * @param hours Must be supplied if minutes is supplied. An number from 0 to 23 (midnight to 11pm) that specifies the hour.
            * @param minutes Must be supplied if seconds is supplied. An number from 0 to 59 that specifies the minutes.
            * @param seconds Must be supplied if milliseconds is supplied. An number from 0 to 59 that specifies the seconds.
            * @param ms An number from 0 to 999 that specifies the milliseconds.
            */
          UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number;
          now(): number;
      }
      
      declare var Date: DateConstructor;
      
      interface RegExpMatchArray extends Array<string> {
          index?: number;
          input?: string;
      }
      
      interface RegExpExecArray extends Array<string> {
          index: number;
          input: string;
      }
      
      interface RegExp {
          /** 
            * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.
            * @param string The String object or string literal on which to perform the search.
            */
          exec(string: string): RegExpExecArray;
      
          /** 
            * Returns a Boolean value that indicates whether or not a pattern exists in a searched string.
            * @param string String on which to perform the search.
            */
          test(string: string): boolean;
      
          /** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */
          source: string;
      
          /** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */
          global: boolean;
      
          /** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */
          ignoreCase: boolean;
      
          /** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */
          multiline: boolean;
      
          lastIndex: number;
      
          // Non-standard extensions
          compile(): RegExp;
      }
      
      interface RegExpConstructor {
          new (pattern: string, flags?: string): RegExp;
          (pattern: string, flags?: string): RegExp;
          prototype: RegExp;
      
          // Non-standard extensions
          $1: string;
          $2: string;
          $3: string;
          $4: string;
          $5: string;
          $6: string;
          $7: string;
          $8: string;
          $9: string;
          lastMatch: string;
      }
      
      declare var RegExp: RegExpConstructor;
      
      interface Error {
          name: string;
          message: string;
      }
      
      interface ErrorConstructor {
          new (message?: string): Error;
          (message?: string): Error;
          prototype: Error;
      }
      
      declare var Error: ErrorConstructor;
      
      interface EvalError extends Error {
      }
      
      interface EvalErrorConstructor {
          new (message?: string): EvalError;
          (message?: string): EvalError;
          prototype: EvalError;
      }
      
      declare var EvalError: EvalErrorConstructor;
      
      interface RangeError extends Error {
      }
      
      interface RangeErrorConstructor {
          new (message?: string): RangeError;
          (message?: string): RangeError;
          prototype: RangeError;
      }
      
      declare var RangeError: RangeErrorConstructor;
      
      interface ReferenceError extends Error {
      }
      
      interface ReferenceErrorConstructor {
          new (message?: string): ReferenceError;
          (message?: string): ReferenceError;
          prototype: ReferenceError;
      }
      
      declare var ReferenceError: ReferenceErrorConstructor;
      
      interface SyntaxError extends Error {
      }
      
      interface SyntaxErrorConstructor {
          new (message?: string): SyntaxError;
          (message?: string): SyntaxError;
          prototype: SyntaxError;
      }
      
      declare var SyntaxError: SyntaxErrorConstructor;
      
      interface TypeError extends Error {
      }
      
      interface TypeErrorConstructor {
          new (message?: string): TypeError;
          (message?: string): TypeError;
          prototype: TypeError;
      }
      
      declare var TypeError: TypeErrorConstructor;
      
      interface URIError extends Error {
      }
      
      interface URIErrorConstructor {
          new (message?: string): URIError;
          (message?: string): URIError;
          prototype: URIError;
      }
      
      declare var URIError: URIErrorConstructor;
      
      interface JSON {
          /**
            * Converts a JavaScript Object Notation (JSON) string into an object.
            * @param text A valid JSON string.
            * @param reviver A function that transforms the results. This function is called for each member of the object. 
            * If a member contains nested objects, the nested objects are transformed before the parent object is. 
            */
          parse(text: string, reviver?: (key: any, value: any) => any): any;
          /**
            * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
            * @param value A JavaScript value, usually an object or array, to be converted.
            */
          stringify(value: any): string;
          /**
            * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
            * @param value A JavaScript value, usually an object or array, to be converted.
            * @param replacer A function that transforms the results.
            */
          stringify(value: any, replacer: (key: string, value: any) => any): string;
          /**
            * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
            * @param value A JavaScript value, usually an object or array, to be converted.
            * @param replacer Array that transforms the results.
            */
          stringify(value: any, replacer: any[]): string;
          /**
            * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
            * @param value A JavaScript value, usually an object or array, to be converted.
            * @param replacer A function that transforms the results.
            * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
            */
          stringify(value: any, replacer: (key: string, value: any) => any, space: any): string;
          /**
            * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
            * @param value A JavaScript value, usually an object or array, to be converted.
            * @param replacer Array that transforms the results.
            * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
            */
          stringify(value: any, replacer: any[], space: any): string;
      }
      /**
        * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.
        */
      declare var JSON: JSON;
      
      
      /////////////////////////////
      /// ECMAScript Array API (specially handled by compiler)
      /////////////////////////////
      
      interface Array<T> {
          /**
            * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.
            */
          length: number;
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
          toLocaleString(): string;
          /**
            * Appends new elements to an array, and returns the new length of the array.
            * @param items New elements of the Array.
            */
          push(...items: T[]): number;
          /**
            * Removes the last element from an array and returns it.
            */
          pop(): T;
          /**
            * Combines two or more arrays.
            * @param items Additional items to add to the end of array1.
            */
          concat<U extends T[]>(...items: U[]): T[];
          /**
            * Combines two or more arrays.
            * @param items Additional items to add to the end of array1.
            */
          concat(...items: T[]): T[];
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): T[];
          /**
            * Removes the first element from an array and returns it.
            */
          shift(): T;
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): T[];
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: T, b: T) => number): T[];
      
          /**
            * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
            * @param start The zero-based location in the array from which to start removing elements.
            */
          splice(start: number): T[];
      
          /**
            * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
            * @param start The zero-based location in the array from which to start removing elements.
            * @param deleteCount The number of elements to remove.
            * @param items Elements to insert into the array in place of the deleted elements.
            */
          splice(start: number, deleteCount: number, ...items: T[]): T[];
      
          /**
            * Inserts new elements at the start of an array.
            * @param items  Elements to insert at the start of the Array.
            */
          unshift(...items: T[]): number;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.
            */
          indexOf(searchElement: T, fromIndex?: number): number;
      
          /**
            * Returns the index of the last occurrence of a specified value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.
            */
          lastIndexOf(searchElement: T, fromIndex?: number): number;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
            */
          map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[];
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
            */
          reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
          /**
            * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
      
          [n: number]: T;
      }
      
      interface ArrayConstructor {
          new (arrayLength?: number): any[];
          new <T>(arrayLength: number): T[];
          new <T>(...items: T[]): T[];
          (arrayLength?: number): any[];
          <T>(arrayLength: number): T[];
          <T>(...items: T[]): T[];
          isArray(arg: any): boolean;
          prototype: Array<any>;
      }
      
      declare var Array: ArrayConstructor;
      
      interface TypedPropertyDescriptor<T> {
          enumerable?: boolean;
          configurable?: boolean;
          writable?: boolean;
          value?: T;
          get?: () => T;
          set?: (value: T) => void;
      }
      
      declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;
      declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;
      declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
      declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
      
      /////////////////////////////
      /// IE10 ECMAScript Extensions
      /////////////////////////////
      
      /**
        * Represents a raw buffer of binary data, which is used to store data for the 
        * different typed arrays. ArrayBuffers cannot be read from or written to directly, 
        * but can be passed to a typed array or DataView Object to interpret the raw 
        * buffer as needed. 
        */
      interface ArrayBuffer {
          /**
            * Read-only. The length of the ArrayBuffer (in bytes).
            */
          byteLength: number;
      
          /**
            * Returns a section of an ArrayBuffer.
            */
          slice(begin:number, end?:number): ArrayBuffer;
      }
      
      interface ArrayBufferConstructor {
          prototype: ArrayBuffer;
          new (byteLength: number): ArrayBuffer;
          isView(arg: any): boolean;
      }
      declare var ArrayBuffer: ArrayBufferConstructor;
      
      interface ArrayBufferView {
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      }
      
      interface DataView {
          buffer: ArrayBuffer;
          byteLength: number;
          byteOffset: number;
          /**
            * Gets the Float32 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getFloat32(byteOffset: number, littleEndian: boolean): number;
      
          /**
            * Gets the Float64 value at the specified byte offset from the start of the view. There is
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getFloat64(byteOffset: number, littleEndian: boolean): number;
      
          /**
            * Gets the Int8 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getInt8(byteOffset: number): number;
      
          /**
            * Gets the Int16 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getInt16(byteOffset: number, littleEndian: boolean): number;
          /**
            * Gets the Int32 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getInt32(byteOffset: number, littleEndian: boolean): number;
      
          /**
            * Gets the Uint8 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getUint8(byteOffset: number): number;
      
          /**
            * Gets the Uint16 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getUint16(byteOffset: number, littleEndian: boolean): number;
      
          /**
            * Gets the Uint32 value at the specified byte offset from the start of the view. There is 
            * no alignment constraint; multi-byte values may be fetched from any offset. 
            * @param byteOffset The place in the buffer at which the value should be retrieved.
            */
          getUint32(byteOffset: number, littleEndian: boolean): number;
      
          /**
            * Stores an Float32 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            * @param littleEndian If false or undefined, a big-endian value should be written, 
            * otherwise a little-endian value should be written.
            */
          setFloat32(byteOffset: number, value: number, littleEndian: boolean): void;
      
          /**
            * Stores an Float64 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            * @param littleEndian If false or undefined, a big-endian value should be written, 
            * otherwise a little-endian value should be written.
            */
          setFloat64(byteOffset: number, value: number, littleEndian: boolean): void;
      
          /**
            * Stores an Int8 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            */
          setInt8(byteOffset: number, value: number): void;
      
          /**
            * Stores an Int16 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            * @param littleEndian If false or undefined, a big-endian value should be written, 
            * otherwise a little-endian value should be written.
            */
          setInt16(byteOffset: number, value: number, littleEndian: boolean): void;
      
          /**
            * Stores an Int32 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            * @param littleEndian If false or undefined, a big-endian value should be written, 
            * otherwise a little-endian value should be written.
            */
          setInt32(byteOffset: number, value: number, littleEndian: boolean): void;
      
          /**
            * Stores an Uint8 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            */
          setUint8(byteOffset: number, value: number): void;
      
          /**
            * Stores an Uint16 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            * @param littleEndian If false or undefined, a big-endian value should be written, 
            * otherwise a little-endian value should be written.
            */
          setUint16(byteOffset: number, value: number, littleEndian: boolean): void;
      
          /**
            * Stores an Uint32 value at the specified byte offset from the start of the view. 
            * @param byteOffset The place in the buffer at which the value should be set.
            * @param value The value to set.
            * @param littleEndian If false or undefined, a big-endian value should be written, 
            * otherwise a little-endian value should be written.
            */
          setUint32(byteOffset: number, value: number, littleEndian: boolean): void;
      }
      
      interface DataViewConstructor {
          new (buffer: ArrayBuffer, byteOffset?: number, byteLength?: number): DataView;
      }
      declare var DataView: DataViewConstructor;
      
      /**
        * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested 
        * number of bytes could not be allocated an exception is raised.
        */
      interface Int8Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Int8Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Int8Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): Int8Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Int8Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Int8Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Int8Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Int8Array;
      
          /**
            * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Int8Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      interface Int8ArrayConstructor {
          prototype: Int8Array;
          new (length: number): Int8Array;
          new (array: Int8Array): Int8Array;
          new (array: number[]): Int8Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Int8Array;
      }
      declare var Int8Array: Int8ArrayConstructor;
      
      /**
        * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the 
        * requested number of bytes could not be allocated an exception is raised.
        */
      interface Uint8Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Uint8Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Uint8Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): Uint8Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Uint8Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Uint8Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Uint8Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Uint8Array;
      
          /**
            * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Uint8Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Uint8ArrayConstructor {
          prototype: Uint8Array;
          new (length: number): Uint8Array;
          new (array: Uint8Array): Uint8Array;
          new (array: number[]): Uint8Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Uint8Array;
      }
      declare var Uint8Array: Uint8ArrayConstructor;
      
      /**
        * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the 
        * requested number of bytes could not be allocated an exception is raised.
        */
      interface Int16Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Int16Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Int16Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): Int16Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Int16Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Int16Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Int16Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Int16Array;
      
          /**
            * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Int16Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Int16ArrayConstructor {
          prototype: Int16Array;
          new (length: number): Int16Array;
          new (array: Int16Array): Int16Array;
          new (array: number[]): Int16Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Int16Array;
      }
      declare var Int16Array: Int16ArrayConstructor;
      
      /**
        * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the 
        * requested number of bytes could not be allocated an exception is raised.
        */
      interface Uint16Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Uint16Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Uint16Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): Uint16Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Uint16Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Uint16Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Uint16Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Uint16Array;
      
          /**
            * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Uint16Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Uint16ArrayConstructor {
          prototype: Uint16Array;
          new (length: number): Uint16Array;
          new (array: Uint16Array): Uint16Array;
          new (array: number[]): Uint16Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Uint16Array;
      }
      declare var Uint16Array: Uint16ArrayConstructor;
      /**
        * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the 
        * requested number of bytes could not be allocated an exception is raised.
        */
      interface Int32Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Int32Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Int32Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): Int32Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Int32Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Int32Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Int32Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Int32Array;
      
          /**
            * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Int32Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Int32ArrayConstructor {
          prototype: Int32Array;
          new (length: number): Int32Array;
          new (array: Int32Array): Int32Array;
          new (array: number[]): Int32Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Int32Array;
      }
      declare var Int32Array: Int32ArrayConstructor;
      
      /**
        * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the 
        * requested number of bytes could not be allocated an exception is raised.
        */
      interface Uint32Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Uint32Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Uint32Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): Uint32Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Uint32Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Uint32Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Uint32Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Uint32Array;
      
          /**
            * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Uint32Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Uint32ArrayConstructor {
          prototype: Uint32Array;
          new (length: number): Uint32Array;
          new (array: Uint32Array): Uint32Array;
          new (array: number[]): Uint32Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Uint32Array;
      }
      declare var Uint32Array: Uint32ArrayConstructor;
      
      /**
        * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number
        * of bytes could not be allocated an exception is raised.
        */
      interface Float32Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Float32Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Float32Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): Float32Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Float32Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Float32Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Float32Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Float32Array;
      
          /**
            * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Float32Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Float32ArrayConstructor {
          prototype: Float32Array;
          new (length: number): Float32Array;
          new (array: Float32Array): Float32Array;
          new (array: number[]): Float32Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Float32Array;
      }
      declare var Float32Array: Float32ArrayConstructor;
      
      /**
        * A typed array of 64-bit float values. The contents are initialized to 0. If the requested 
        * number of bytes could not be allocated an exception is raised.
        */
      interface Float64Array {
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * The ArrayBuffer instance referenced by the array. 
            */
          buffer: ArrayBuffer;
      
          /**
            * The length in bytes of the array.
            */
          byteLength: number;
      
          /**
            * The offset in bytes of the array.
            */
          byteOffset: number;
      
          /** 
            * Returns the this object after copying a section of the array identified by start and end
            * to the same array starting at position target
            * @param target If target is negative, it is treated as length+target where length is the 
            * length of the array. 
            * @param start If start is negative, it is treated as length+start. If end is negative, it 
            * is treated as length+end.
            * @param end If not specified, length of the this object is used as its default value. 
            */
          copyWithin(target: number, start: number, end?: number): Float64Array;
      
          /**
            * Determines whether all the members of an array satisfy the specified test.
            * @param callbackfn A function that accepts up to three arguments. The every method calls 
            * the callbackfn function for each element in array1 until the callbackfn returns false, 
            * or until the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function.
            * If thisArg is omitted, undefined is used as the this value.
            */
          every(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean;
      
          /**
              * Returns the this object after filling the section identified by start and end with value
              * @param value value to fill array section with
              * @param start index to start filling the array at. If start is negative, it is treated as 
              * length+start where length is the length of the array. 
              * @param end index to stop filling the array at. If end is negative, it is treated as 
              * length+end.
              */
          fill(value: number, start?: number, end?: number): Float64Array;
      
          /**
            * Returns the elements of an array that meet the condition specified in a callback function. 
            * @param callbackfn A function that accepts up to three arguments. The filter method calls 
            * the callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          filter(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): Float64Array;
      
          /** 
            * Returns the value of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
      
          /** 
            * Returns the index of the first element in the array where predicate is true, and undefined 
            * otherwise.
            * @param predicate find calls predicate once for each element of the array, in ascending 
            * order, until it finds one where predicate returns true. If such an element is found, find 
            * immediately returns that element value. Otherwise, find returns undefined.
            * @param thisArg If provided, it will be used as the this value for each invocation of 
            * predicate. If it is not provided, undefined is used instead.
            */
          findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
      
          /**
            * Performs the specified action for each element in an array.
            * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void;
      
          /**
            * Returns the index of the first occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
            *  search starts at index 0.
            */
          indexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * Adds all the elements of an array separated by the specified separator string.
            * @param separator A string used to separate one element of an array from the next in the 
            * resulting String. If omitted, the array elements are separated with a comma.
            */
          join(separator?: string): string;
      
          /**
            * Returns the index of the last occurrence of a value in an array.
            * @param searchElement The value to locate in the array.
            * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
            * search starts at index 0.
            */
          lastIndexOf(searchElement: number, fromIndex?: number): number;
      
          /**
            * The length of the array.
            */
          length: number;
      
          /**
            * Calls a defined callback function on each element of an array, and returns an array that 
            * contains the results.
            * @param callbackfn A function that accepts up to three arguments. The map method calls the 
            * callbackfn function one time for each element in the array. 
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number;
      
          /**
            * Calls the specified callback function for all the elements in an array. The return value of 
            * the callback function is the accumulated result, and is provided as an argument in the next 
            * call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
            * callbackfn function one time for each element in the array.
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument 
            * instead of an array value.
            */
          reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an 
            * argument instead of an array value.
            */
          reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number;
      
          /** 
            * Calls the specified callback function for all the elements in an array, in descending order. 
            * The return value of the callback function is the accumulated result, and is provided as an 
            * argument in the next call to the callback function.
            * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
            * the callbackfn function one time for each element in the array. 
            * @param initialValue If initialValue is specified, it is used as the initial value to start 
            * the accumulation. The first call to the callbackfn function provides this value as an argument
            * instead of an array value.
            */
          reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U;
      
          /**
            * Reverses the elements in an Array. 
            */
          reverse(): Float64Array;
      
          /**
            * Sets a value or an array of values.
            * @param index The index of the location to set.
            * @param value The value to set.
            */
          set(index: number, value: number): void;
      
          /**
            * Sets a value or an array of values.
            * @param array A typed or untyped array of values to set.
            * @param offset The index in the current array at which the values are to be written.
            */
          set(array: Float64Array, offset?: number): void;
      
          /** 
            * Returns a section of an array.
            * @param start The beginning of the specified portion of the array.
            * @param end The end of the specified portion of the array.
            */
          slice(start?: number, end?: number): Float64Array;
      
          /**
            * Determines whether the specified callback function returns true for any element of an array.
            * @param callbackfn A function that accepts up to three arguments. The some method calls the 
            * callbackfn function for each element in array1 until the callbackfn returns true, or until 
            * the end of the array.
            * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
            * If thisArg is omitted, undefined is used as the this value.
            */
          some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean;
      
          /**
            * Sorts an array.
            * @param compareFn The name of the function used to determine the order of the elements. If 
            * omitted, the elements are sorted in ascending, ASCII character order.
            */
          sort(compareFn?: (a: number, b: number) => number): Float64Array;
      
          /**
            * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements
            * at begin, inclusive, up to end, exclusive. 
            * @param begin The index of the beginning of the array.
            * @param end The index of the end of the array.
            */
          subarray(begin: number, end?: number): Float64Array;
      
          /**
            * Converts a number to a string by using the current locale. 
            */
          toLocaleString(): string;
      
          /**
            * Returns a string representation of an array.
            */
          toString(): string;
      
          [index: number]: number;
      }
      
      interface Float64ArrayConstructor {
          prototype: Float64Array;
          new (length: number): Float64Array;
          new (array: Float64Array): Float64Array;
          new (array: number[]): Float64Array;
          new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array;
      
          /**
            * The size in bytes of each element in the array. 
            */
          BYTES_PER_ELEMENT: number;
      
          /**
            * Returns a new array from a set of elements.
            * @param items A set of elements to include in the new array object.
            */
          of(...items: number[]): Float64Array;
      }
      declare var Float64Array: Float64ArrayConstructor;/////////////////////////////
      /// ECMAScript Internationalization API 
      /////////////////////////////
      
      declare module Intl {
          interface CollatorOptions {
              usage?: string;
              localeMatcher?: string;
              numeric?: boolean;
              caseFirst?: string;
              sensitivity?: string;
              ignorePunctuation?: boolean;
          }
      
          interface ResolvedCollatorOptions {
              locale: string;
              usage: string;
              sensitivity: string;
              ignorePunctuation: boolean;
              collation: string;
              caseFirst: string;
              numeric: boolean;
          }
      
          interface Collator {
              compare(x: string, y: string): number;
              resolvedOptions(): ResolvedCollatorOptions;
          }
          var Collator: {
              new (locales?: string[], options?: CollatorOptions): Collator;
              new (locale?: string, options?: CollatorOptions): Collator;
              (locales?: string[], options?: CollatorOptions): Collator;
              (locale?: string, options?: CollatorOptions): Collator;
              supportedLocalesOf(locales: string[], options?: CollatorOptions): string[];
              supportedLocalesOf(locale: string, options?: CollatorOptions): string[];
          }
      
          interface NumberFormatOptions {
              localeMatcher?: string;
              style?: string;
              currency?: string;
              currencyDisplay?: string;
              useGrouping?: boolean;
          }
      
          interface ResolvedNumberFormatOptions {
              locale: string;
              numberingSystem: string;
              style: string;
              currency?: string;
              currencyDisplay?: string;
              minimumintegerDigits: number;
              minimumFractionDigits: number;
              maximumFractionDigits: number;
              minimumSignificantDigits?: number;
              maximumSignificantDigits?: number;
              useGrouping: boolean;
          }
      
          interface NumberFormat {
              format(value: number): string;
              resolvedOptions(): ResolvedNumberFormatOptions;
          }
          var NumberFormat: {
              new (locales?: string[], options?: NumberFormatOptions): Collator;
              new (locale?: string, options?: NumberFormatOptions): Collator;
              (locales?: string[], options?: NumberFormatOptions): Collator;
              (locale?: string, options?: NumberFormatOptions): Collator;
              supportedLocalesOf(locales: string[], options?: NumberFormatOptions): string[];
              supportedLocalesOf(locale: string, options?: NumberFormatOptions): string[];
          }
      
          interface DateTimeFormatOptions {
              localeMatcher?: string;
              weekday?: string;
              era?: string;
              year?: string;
              month?: string;
              day?: string;
              hour?: string;
              minute?: string;
              second?: string;
              timeZoneName?: string;
              formatMatcher?: string;
              hour12?: boolean;
          }
      
          interface ResolvedDateTimeFormatOptions {
              locale: string;
              calendar: string;
              numberingSystem: string;
              timeZone: string;
              hour12?: boolean;
              weekday?: string;
              era?: string;
              year?: string;
              month?: string;
              day?: string;
              hour?: string;
              minute?: string;
              second?: string;
              timeZoneName?: string;
          }
      
          interface DateTimeFormat {
              format(date: number): string;
              resolvedOptions(): ResolvedDateTimeFormatOptions;
          }
          var DateTimeFormat: {
              new (locales?: string[], options?: DateTimeFormatOptions): Collator;
              new (locale?: string, options?: DateTimeFormatOptions): Collator;
              (locales?: string[], options?: DateTimeFormatOptions): Collator;
              (locale?: string, options?: DateTimeFormatOptions): Collator;
              supportedLocalesOf(locales: string[], options?: DateTimeFormatOptions): string[];
              supportedLocalesOf(locale: string, options?: DateTimeFormatOptions): string[];
          }
      }
      
      interface String {
          /**
            * Determines whether two strings are equivalent in the current locale.
            * @param that String to compare to target string
            * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.
            * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.
            */
          localeCompare(that: string, locales: string[], options?: Intl.CollatorOptions): number;
      
          /**
            * Determines whether two strings are equivalent in the current locale.
            * @param that String to compare to target string
            * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.
            * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.
            */
          localeCompare(that: string, locale: string, options?: Intl.CollatorOptions): number;
      }
      
      interface Number {
          /**
            * Converts a number to a string by using the current or specified locale. 
            * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.
            * @param options An object that contains one or more properties that specify comparison options.
            */
          toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string;
      
          /**
            * Converts a number to a string by using the current or specified locale. 
            * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used.
            * @param options An object that contains one or more properties that specify comparison options.
            */
          toLocaleString(locale?: string, options?: Intl.NumberFormatOptions): string;
      }
      
      interface Date {
          /**
            * Converts a date to a string by using the current or specified locale.  
            * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.
            * @param options An object that contains one or more properties that specify comparison options.
            */
          toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string;
      
          /**
            * Converts a date to a string by using the current or specified locale.  
            * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used.
            * @param options An object that contains one or more properties that specify comparison options.
            */
          toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string;
      }
      
      
      /////////////////////////////
      /// IE DOM APIs
      /////////////////////////////
      
      interface Algorithm {
          name?: string;
      }
      
      interface AriaRequestEventInit extends EventInit {
          attributeName?: string;
          attributeValue?: string;
      }
      
      interface ClipboardEventInit extends EventInit {
          data?: string;
          dataType?: string;
      }
      
      interface CommandEventInit extends EventInit {
          commandName?: string;
          detail?: string;
      }
      
      interface CompositionEventInit extends UIEventInit {
          data?: string;
      }
      
      interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation {
          arrayOfDomainStrings?: string[];
      }
      
      interface CustomEventInit extends EventInit {
          detail?: any;
      }
      
      interface DeviceAccelerationDict {
          x?: number;
          y?: number;
          z?: number;
      }
      
      interface DeviceRotationRateDict {
          alpha?: number;
          beta?: number;
          gamma?: number;
      }
      
      interface EventInit {
          bubbles?: boolean;
          cancelable?: boolean;
      }
      
      interface ExceptionInformation {
          domain?: string;
      }
      
      interface FocusEventInit extends UIEventInit {
          relatedTarget?: EventTarget;
      }
      
      interface HashChangeEventInit extends EventInit {
          newURL?: string;
          oldURL?: string;
      }
      
      interface KeyAlgorithm {
          name?: string;
      }
      
      interface KeyboardEventInit extends SharedKeyboardAndMouseEventInit {
          key?: string;
          location?: number;
          repeat?: boolean;
      }
      
      interface MouseEventInit extends SharedKeyboardAndMouseEventInit {
          screenX?: number;
          screenY?: number;
          clientX?: number;
          clientY?: number;
          button?: number;
          buttons?: number;
          relatedTarget?: EventTarget;
      }
      
      interface MsZoomToOptions {
          contentX?: number;
          contentY?: number;
          viewportX?: string;
          viewportY?: string;
          scaleFactor?: number;
          animate?: string;
      }
      
      interface MutationObserverInit {
          childList?: boolean;
          attributes?: boolean;
          characterData?: boolean;
          subtree?: boolean;
          attributeOldValue?: boolean;
          characterDataOldValue?: boolean;
          attributeFilter?: string[];
      }
      
      interface ObjectURLOptions {
          oneTimeOnly?: boolean;
      }
      
      interface PointerEventInit extends MouseEventInit {
          pointerId?: number;
          width?: number;
          height?: number;
          pressure?: number;
          tiltX?: number;
          tiltY?: number;
          pointerType?: string;
          isPrimary?: boolean;
      }
      
      interface PositionOptions {
          enableHighAccuracy?: boolean;
          timeout?: number;
          maximumAge?: number;
      }
      
      interface SharedKeyboardAndMouseEventInit extends UIEventInit {
          ctrlKey?: boolean;
          shiftKey?: boolean;
          altKey?: boolean;
          metaKey?: boolean;
          keyModifierStateAltGraph?: boolean;
          keyModifierStateCapsLock?: boolean;
          keyModifierStateFn?: boolean;
          keyModifierStateFnLock?: boolean;
          keyModifierStateHyper?: boolean;
          keyModifierStateNumLock?: boolean;
          keyModifierStateOS?: boolean;
          keyModifierStateScrollLock?: boolean;
          keyModifierStateSuper?: boolean;
          keyModifierStateSymbol?: boolean;
          keyModifierStateSymbolLock?: boolean;
      }
      
      interface StoreExceptionsInformation extends ExceptionInformation {
          siteName?: string;
          explanationString?: string;
          detailURI?: string;
      }
      
      interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation {
          arrayOfDomainStrings?: string[];
      }
      
      interface UIEventInit extends EventInit {
          view?: Window;
          detail?: number;
      }
      
      interface WebGLContextAttributes {
          alpha?: boolean;
          depth?: boolean;
          stencil?: boolean;
          antialias?: boolean;
          premultipliedAlpha?: boolean;
          preserveDrawingBuffer?: boolean;
      }
      
      interface WebGLContextEventInit extends EventInit {
          statusMessage?: string;
      }
      
      interface WheelEventInit extends MouseEventInit {
          deltaX?: number;
          deltaY?: number;
          deltaZ?: number;
          deltaMode?: number;
      }
      
      interface EventListener {
          (evt: Event): void;
      }
      
      interface ANGLE_instanced_arrays {
          drawArraysInstancedANGLE(mode: number, first: number, count: number, primcount: number): void;
          drawElementsInstancedANGLE(mode: number, count: number, type: number, offset: number, primcount: number): void;
          vertexAttribDivisorANGLE(index: number, divisor: number): void;
          VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: number;
      }
      
      declare var ANGLE_instanced_arrays: {
          prototype: ANGLE_instanced_arrays;
          new(): ANGLE_instanced_arrays;
          VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: number;
      }
      
      interface AnalyserNode extends AudioNode {
          fftSize: number;
          frequencyBinCount: number;
          maxDecibels: number;
          minDecibels: number;
          smoothingTimeConstant: number;
          getByteFrequencyData(array: Uint8Array): void;
          getByteTimeDomainData(array: Uint8Array): void;
          getFloatFrequencyData(array: any): void;
          getFloatTimeDomainData(array: any): void;
      }
      
      declare var AnalyserNode: {
          prototype: AnalyserNode;
          new(): AnalyserNode;
      }
      
      interface AnimationEvent extends Event {
          animationName: string;
          elapsedTime: number;
          initAnimationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, animationNameArg: string, elapsedTimeArg: number): void;
      }
      
      declare var AnimationEvent: {
          prototype: AnimationEvent;
          new(): AnimationEvent;
      }
      
      interface ApplicationCache extends EventTarget {
          oncached: (ev: Event) => any;
          onchecking: (ev: Event) => any;
          ondownloading: (ev: Event) => any;
          onerror: (ev: Event) => any;
          onnoupdate: (ev: Event) => any;
          onobsolete: (ev: Event) => any;
          onprogress: (ev: ProgressEvent) => any;
          onupdateready: (ev: Event) => any;
          status: number;
          abort(): void;
          swapCache(): void;
          update(): void;
          CHECKING: number;
          DOWNLOADING: number;
          IDLE: number;
          OBSOLETE: number;
          UNCACHED: number;
          UPDATEREADY: number;
          addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var ApplicationCache: {
          prototype: ApplicationCache;
          new(): ApplicationCache;
          CHECKING: number;
          DOWNLOADING: number;
          IDLE: number;
          OBSOLETE: number;
          UNCACHED: number;
          UPDATEREADY: number;
      }
      
      interface AriaRequestEvent extends Event {
          attributeName: string;
          attributeValue: string;
      }
      
      declare var AriaRequestEvent: {
          prototype: AriaRequestEvent;
          new(type: string, eventInitDict?: AriaRequestEventInit): AriaRequestEvent;
      }
      
      interface Attr extends Node {
          name: string;
          ownerElement: Element;
          specified: boolean;
          value: string;
      }
      
      declare var Attr: {
          prototype: Attr;
          new(): Attr;
      }
      
      interface AudioBuffer {
          duration: number;
          length: number;
          numberOfChannels: number;
          sampleRate: number;
          getChannelData(channel: number): any;
      }
      
      declare var AudioBuffer: {
          prototype: AudioBuffer;
          new(): AudioBuffer;
      }
      
      interface AudioBufferSourceNode extends AudioNode {
          buffer: AudioBuffer;
          loop: boolean;
          loopEnd: number;
          loopStart: number;
          onended: (ev: Event) => any;
          playbackRate: AudioParam;
          start(when?: number, offset?: number, duration?: number): void;
          stop(when?: number): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var AudioBufferSourceNode: {
          prototype: AudioBufferSourceNode;
          new(): AudioBufferSourceNode;
      }
      
      interface AudioContext extends EventTarget {
          currentTime: number;
          destination: AudioDestinationNode;
          listener: AudioListener;
          sampleRate: number;
          createAnalyser(): AnalyserNode;
          createBiquadFilter(): BiquadFilterNode;
          createBuffer(numberOfChannels: number, length: number, sampleRate: number): AudioBuffer;
          createBufferSource(): AudioBufferSourceNode;
          createChannelMerger(numberOfInputs?: number): ChannelMergerNode;
          createChannelSplitter(numberOfOutputs?: number): ChannelSplitterNode;
          createConvolver(): ConvolverNode;
          createDelay(maxDelayTime?: number): DelayNode;
          createDynamicsCompressor(): DynamicsCompressorNode;
          createGain(): GainNode;
          createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode;
          createOscillator(): OscillatorNode;
          createPanner(): PannerNode;
          createPeriodicWave(real: any, imag: any): PeriodicWave;
          createScriptProcessor(bufferSize?: number, numberOfInputChannels?: number, numberOfOutputChannels?: number): ScriptProcessorNode;
          createStereoPanner(): StereoPannerNode;
          createWaveShaper(): WaveShaperNode;
          decodeAudioData(audioData: ArrayBuffer, successCallback: DecodeSuccessCallback, errorCallback?: DecodeErrorCallback): void;
      }
      
      declare var AudioContext: {
          prototype: AudioContext;
          new(): AudioContext;
      }
      
      interface AudioDestinationNode extends AudioNode {
          maxChannelCount: number;
      }
      
      declare var AudioDestinationNode: {
          prototype: AudioDestinationNode;
          new(): AudioDestinationNode;
      }
      
      interface AudioListener {
          dopplerFactor: number;
          speedOfSound: number;
          setOrientation(x: number, y: number, z: number, xUp: number, yUp: number, zUp: number): void;
          setPosition(x: number, y: number, z: number): void;
          setVelocity(x: number, y: number, z: number): void;
      }
      
      declare var AudioListener: {
          prototype: AudioListener;
          new(): AudioListener;
      }
      
      interface AudioNode extends EventTarget {
          channelCount: number;
          channelCountMode: string;
          channelInterpretation: string;
          context: AudioContext;
          numberOfInputs: number;
          numberOfOutputs: number;
          connect(destination: AudioNode, output?: number, input?: number): void;
          disconnect(output?: number): void;
      }
      
      declare var AudioNode: {
          prototype: AudioNode;
          new(): AudioNode;
      }
      
      interface AudioParam {
          defaultValue: number;
          value: number;
          cancelScheduledValues(startTime: number): void;
          exponentialRampToValueAtTime(value: number, endTime: number): void;
          linearRampToValueAtTime(value: number, endTime: number): void;
          setTargetAtTime(target: number, startTime: number, timeConstant: number): void;
          setValueAtTime(value: number, startTime: number): void;
          setValueCurveAtTime(values: any, startTime: number, duration: number): void;
      }
      
      declare var AudioParam: {
          prototype: AudioParam;
          new(): AudioParam;
      }
      
      interface AudioProcessingEvent extends Event {
          inputBuffer: AudioBuffer;
          outputBuffer: AudioBuffer;
          playbackTime: number;
      }
      
      declare var AudioProcessingEvent: {
          prototype: AudioProcessingEvent;
          new(): AudioProcessingEvent;
      }
      
      interface AudioTrack {
          enabled: boolean;
          id: string;
          kind: string;
          label: string;
          language: string;
          sourceBuffer: SourceBuffer;
      }
      
      declare var AudioTrack: {
          prototype: AudioTrack;
          new(): AudioTrack;
      }
      
      interface AudioTrackList extends EventTarget {
          length: number;
          onaddtrack: (ev: TrackEvent) => any;
          onchange: (ev: Event) => any;
          onremovetrack: (ev: TrackEvent) => any;
          getTrackById(id: string): AudioTrack;
          item(index: number): AudioTrack;
          addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
          [index: number]: AudioTrack;
      }
      
      declare var AudioTrackList: {
          prototype: AudioTrackList;
          new(): AudioTrackList;
      }
      
      interface BarProp {
          visible: boolean;
      }
      
      declare var BarProp: {
          prototype: BarProp;
          new(): BarProp;
      }
      
      interface BeforeUnloadEvent extends Event {
          returnValue: any;
      }
      
      declare var BeforeUnloadEvent: {
          prototype: BeforeUnloadEvent;
          new(): BeforeUnloadEvent;
      }
      
      interface BiquadFilterNode extends AudioNode {
          Q: AudioParam;
          detune: AudioParam;
          frequency: AudioParam;
          gain: AudioParam;
          type: string;
          getFrequencyResponse(frequencyHz: any, magResponse: any, phaseResponse: any): void;
      }
      
      declare var BiquadFilterNode: {
          prototype: BiquadFilterNode;
          new(): BiquadFilterNode;
      }
      
      interface Blob {
          size: number;
          type: string;
          msClose(): void;
          msDetachStream(): any;
          slice(start?: number, end?: number, contentType?: string): Blob;
      }
      
      declare var Blob: {
          prototype: Blob;
          new (blobParts?: any[], options?: BlobPropertyBag): Blob;
      }
      
      interface CDATASection extends Text {
      }
      
      declare var CDATASection: {
          prototype: CDATASection;
          new(): CDATASection;
      }
      
      interface CSS {
          supports(property: string, value?: string): boolean;
      }
      declare var CSS: CSS;
      
      interface CSSConditionRule extends CSSGroupingRule {
          conditionText: string;
      }
      
      declare var CSSConditionRule: {
          prototype: CSSConditionRule;
          new(): CSSConditionRule;
      }
      
      interface CSSFontFaceRule extends CSSRule {
          style: CSSStyleDeclaration;
      }
      
      declare var CSSFontFaceRule: {
          prototype: CSSFontFaceRule;
          new(): CSSFontFaceRule;
      }
      
      interface CSSGroupingRule extends CSSRule {
          cssRules: CSSRuleList;
          deleteRule(index?: number): void;
          insertRule(rule: string, index?: number): number;
      }
      
      declare var CSSGroupingRule: {
          prototype: CSSGroupingRule;
          new(): CSSGroupingRule;
      }
      
      interface CSSImportRule extends CSSRule {
          href: string;
          media: MediaList;
          styleSheet: CSSStyleSheet;
      }
      
      declare var CSSImportRule: {
          prototype: CSSImportRule;
          new(): CSSImportRule;
      }
      
      interface CSSKeyframeRule extends CSSRule {
          keyText: string;
          style: CSSStyleDeclaration;
      }
      
      declare var CSSKeyframeRule: {
          prototype: CSSKeyframeRule;
          new(): CSSKeyframeRule;
      }
      
      interface CSSKeyframesRule extends CSSRule {
          cssRules: CSSRuleList;
          name: string;
          appendRule(rule: string): void;
          deleteRule(rule: string): void;
          findRule(rule: string): CSSKeyframeRule;
      }
      
      declare var CSSKeyframesRule: {
          prototype: CSSKeyframesRule;
          new(): CSSKeyframesRule;
      }
      
      interface CSSMediaRule extends CSSConditionRule {
          media: MediaList;
      }
      
      declare var CSSMediaRule: {
          prototype: CSSMediaRule;
          new(): CSSMediaRule;
      }
      
      interface CSSNamespaceRule extends CSSRule {
          namespaceURI: string;
          prefix: string;
      }
      
      declare var CSSNamespaceRule: {
          prototype: CSSNamespaceRule;
          new(): CSSNamespaceRule;
      }
      
      interface CSSPageRule extends CSSRule {
          pseudoClass: string;
          selector: string;
          selectorText: string;
          style: CSSStyleDeclaration;
      }
      
      declare var CSSPageRule: {
          prototype: CSSPageRule;
          new(): CSSPageRule;
      }
      
      interface CSSRule {
          cssText: string;
          parentRule: CSSRule;
          parentStyleSheet: CSSStyleSheet;
          type: number;
          CHARSET_RULE: number;
          FONT_FACE_RULE: number;
          IMPORT_RULE: number;
          KEYFRAMES_RULE: number;
          KEYFRAME_RULE: number;
          MEDIA_RULE: number;
          NAMESPACE_RULE: number;
          PAGE_RULE: number;
          STYLE_RULE: number;
          SUPPORTS_RULE: number;
          UNKNOWN_RULE: number;
          VIEWPORT_RULE: number;
      }
      
      declare var CSSRule: {
          prototype: CSSRule;
          new(): CSSRule;
          CHARSET_RULE: number;
          FONT_FACE_RULE: number;
          IMPORT_RULE: number;
          KEYFRAMES_RULE: number;
          KEYFRAME_RULE: number;
          MEDIA_RULE: number;
          NAMESPACE_RULE: number;
          PAGE_RULE: number;
          STYLE_RULE: number;
          SUPPORTS_RULE: number;
          UNKNOWN_RULE: number;
          VIEWPORT_RULE: number;
      }
      
      interface CSSRuleList {
          length: number;
          item(index: number): CSSRule;
          [index: number]: CSSRule;
      }
      
      declare var CSSRuleList: {
          prototype: CSSRuleList;
          new(): CSSRuleList;
      }
      
      interface CSSStyleDeclaration {
          alignContent: string;
          alignItems: string;
          alignSelf: string;
          alignmentBaseline: string;
          animation: string;
          animationDelay: string;
          animationDirection: string;
          animationDuration: string;
          animationFillMode: string;
          animationIterationCount: string;
          animationName: string;
          animationPlayState: string;
          animationTimingFunction: string;
          backfaceVisibility: string;
          background: string;
          backgroundAttachment: string;
          backgroundClip: string;
          backgroundColor: string;
          backgroundImage: string;
          backgroundOrigin: string;
          backgroundPosition: string;
          backgroundPositionX: string;
          backgroundPositionY: string;
          backgroundRepeat: string;
          backgroundSize: string;
          baselineShift: string;
          border: string;
          borderBottom: string;
          borderBottomColor: string;
          borderBottomLeftRadius: string;
          borderBottomRightRadius: string;
          borderBottomStyle: string;
          borderBottomWidth: string;
          borderCollapse: string;
          borderColor: string;
          borderImage: string;
          borderImageOutset: string;
          borderImageRepeat: string;
          borderImageSlice: string;
          borderImageSource: string;
          borderImageWidth: string;
          borderLeft: string;
          borderLeftColor: string;
          borderLeftStyle: string;
          borderLeftWidth: string;
          borderRadius: string;
          borderRight: string;
          borderRightColor: string;
          borderRightStyle: string;
          borderRightWidth: string;
          borderSpacing: string;
          borderStyle: string;
          borderTop: string;
          borderTopColor: string;
          borderTopLeftRadius: string;
          borderTopRightRadius: string;
          borderTopStyle: string;
          borderTopWidth: string;
          borderWidth: string;
          bottom: string;
          boxShadow: string;
          boxSizing: string;
          breakAfter: string;
          breakBefore: string;
          breakInside: string;
          captionSide: string;
          clear: string;
          clip: string;
          clipPath: string;
          clipRule: string;
          color: string;
          colorInterpolationFilters: string;
          columnCount: any;
          columnFill: string;
          columnGap: any;
          columnRule: string;
          columnRuleColor: any;
          columnRuleStyle: string;
          columnRuleWidth: any;
          columnSpan: string;
          columnWidth: any;
          columns: string;
          content: string;
          counterIncrement: string;
          counterReset: string;
          cssFloat: string;
          cssText: string;
          cursor: string;
          direction: string;
          display: string;
          dominantBaseline: string;
          emptyCells: string;
          enableBackground: string;
          fill: string;
          fillOpacity: string;
          fillRule: string;
          filter: string;
          flex: string;
          flexBasis: string;
          flexDirection: string;
          flexFlow: string;
          flexGrow: string;
          flexShrink: string;
          flexWrap: string;
          floodColor: string;
          floodOpacity: string;
          font: string;
          fontFamily: string;
          fontFeatureSettings: string;
          fontSize: string;
          fontSizeAdjust: string;
          fontStretch: string;
          fontStyle: string;
          fontVariant: string;
          fontWeight: string;
          glyphOrientationHorizontal: string;
          glyphOrientationVertical: string;
          height: string;
          imeMode: string;
          justifyContent: string;
          kerning: string;
          left: string;
          length: number;
          letterSpacing: string;
          lightingColor: string;
          lineHeight: string;
          listStyle: string;
          listStyleImage: string;
          listStylePosition: string;
          listStyleType: string;
          margin: string;
          marginBottom: string;
          marginLeft: string;
          marginRight: string;
          marginTop: string;
          marker: string;
          markerEnd: string;
          markerMid: string;
          markerStart: string;
          mask: string;
          maxHeight: string;
          maxWidth: string;
          minHeight: string;
          minWidth: string;
          msContentZoomChaining: string;
          msContentZoomLimit: string;
          msContentZoomLimitMax: any;
          msContentZoomLimitMin: any;
          msContentZoomSnap: string;
          msContentZoomSnapPoints: string;
          msContentZoomSnapType: string;
          msContentZooming: string;
          msFlowFrom: string;
          msFlowInto: string;
          msFontFeatureSettings: string;
          msGridColumn: any;
          msGridColumnAlign: string;
          msGridColumnSpan: any;
          msGridColumns: string;
          msGridRow: any;
          msGridRowAlign: string;
          msGridRowSpan: any;
          msGridRows: string;
          msHighContrastAdjust: string;
          msHyphenateLimitChars: string;
          msHyphenateLimitLines: any;
          msHyphenateLimitZone: any;
          msHyphens: string;
          msImeAlign: string;
          msOverflowStyle: string;
          msScrollChaining: string;
          msScrollLimit: string;
          msScrollLimitXMax: any;
          msScrollLimitXMin: any;
          msScrollLimitYMax: any;
          msScrollLimitYMin: any;
          msScrollRails: string;
          msScrollSnapPointsX: string;
          msScrollSnapPointsY: string;
          msScrollSnapType: string;
          msScrollSnapX: string;
          msScrollSnapY: string;
          msScrollTranslation: string;
          msTextCombineHorizontal: string;
          msTextSizeAdjust: any;
          msTouchAction: string;
          msTouchSelect: string;
          msUserSelect: string;
          msWrapFlow: string;
          msWrapMargin: any;
          msWrapThrough: string;
          opacity: string;
          order: string;
          orphans: string;
          outline: string;
          outlineColor: string;
          outlineStyle: string;
          outlineWidth: string;
          overflow: string;
          overflowX: string;
          overflowY: string;
          padding: string;
          paddingBottom: string;
          paddingLeft: string;
          paddingRight: string;
          paddingTop: string;
          pageBreakAfter: string;
          pageBreakBefore: string;
          pageBreakInside: string;
          parentRule: CSSRule;
          perspective: string;
          perspectiveOrigin: string;
          pointerEvents: string;
          position: string;
          quotes: string;
          right: string;
          rubyAlign: string;
          rubyOverhang: string;
          rubyPosition: string;
          stopColor: string;
          stopOpacity: string;
          stroke: string;
          strokeDasharray: string;
          strokeDashoffset: string;
          strokeLinecap: string;
          strokeLinejoin: string;
          strokeMiterlimit: string;
          strokeOpacity: string;
          strokeWidth: string;
          tableLayout: string;
          textAlign: string;
          textAlignLast: string;
          textAnchor: string;
          textDecoration: string;
          textFillColor: string;
          textIndent: string;
          textJustify: string;
          textKashida: string;
          textKashidaSpace: string;
          textOverflow: string;
          textShadow: string;
          textTransform: string;
          textUnderlinePosition: string;
          top: string;
          touchAction: string;
          transform: string;
          transformOrigin: string;
          transformStyle: string;
          transition: string;
          transitionDelay: string;
          transitionDuration: string;
          transitionProperty: string;
          transitionTimingFunction: string;
          unicodeBidi: string;
          verticalAlign: string;
          visibility: string;
          webkitAlignContent: string;
          webkitAlignItems: string;
          webkitAlignSelf: string;
          webkitAnimation: string;
          webkitAnimationDelay: string;
          webkitAnimationDirection: string;
          webkitAnimationDuration: string;
          webkitAnimationFillMode: string;
          webkitAnimationIterationCount: string;
          webkitAnimationName: string;
          webkitAnimationPlayState: string;
          webkitAnimationTimingFunction: string;
          webkitAppearance: string;
          webkitBackfaceVisibility: string;
          webkitBackground: string;
          webkitBackgroundAttachment: string;
          webkitBackgroundClip: string;
          webkitBackgroundColor: string;
          webkitBackgroundImage: string;
          webkitBackgroundOrigin: string;
          webkitBackgroundPosition: string;
          webkitBackgroundPositionX: string;
          webkitBackgroundPositionY: string;
          webkitBackgroundRepeat: string;
          webkitBackgroundSize: string;
          webkitBorderBottomLeftRadius: string;
          webkitBorderBottomRightRadius: string;
          webkitBorderImage: string;
          webkitBorderImageOutset: string;
          webkitBorderImageRepeat: string;
          webkitBorderImageSlice: string;
          webkitBorderImageSource: string;
          webkitBorderImageWidth: string;
          webkitBorderRadius: string;
          webkitBorderTopLeftRadius: string;
          webkitBorderTopRightRadius: string;
          webkitBoxAlign: string;
          webkitBoxDirection: string;
          webkitBoxFlex: string;
          webkitBoxOrdinalGroup: string;
          webkitBoxOrient: string;
          webkitBoxPack: string;
          webkitBoxSizing: string;
          webkitColumnBreakAfter: string;
          webkitColumnBreakBefore: string;
          webkitColumnBreakInside: string;
          webkitColumnCount: any;
          webkitColumnGap: any;
          webkitColumnRule: string;
          webkitColumnRuleColor: any;
          webkitColumnRuleStyle: string;
          webkitColumnRuleWidth: any;
          webkitColumnSpan: string;
          webkitColumnWidth: any;
          webkitColumns: string;
          webkitFilter: string;
          webkitFlex: string;
          webkitFlexBasis: string;
          webkitFlexDirection: string;
          webkitFlexFlow: string;
          webkitFlexGrow: string;
          webkitFlexShrink: string;
          webkitFlexWrap: string;
          webkitJustifyContent: string;
          webkitOrder: string;
          webkitPerspective: string;
          webkitPerspectiveOrigin: string;
          webkitTapHighlightColor: string;
          webkitTextFillColor: string;
          webkitTextSizeAdjust: any;
          webkitTransform: string;
          webkitTransformOrigin: string;
          webkitTransformStyle: string;
          webkitTransition: string;
          webkitTransitionDelay: string;
          webkitTransitionDuration: string;
          webkitTransitionProperty: string;
          webkitTransitionTimingFunction: string;
          webkitUserSelect: string;
          webkitWritingMode: string;
          whiteSpace: string;
          widows: string;
          width: string;
          wordBreak: string;
          wordSpacing: string;
          wordWrap: string;
          writingMode: string;
          zIndex: string;
          zoom: string;
          getPropertyPriority(propertyName: string): string;
          getPropertyValue(propertyName: string): string;
          item(index: number): string;
          removeProperty(propertyName: string): string;
          setProperty(propertyName: string, value: string, priority?: string): void;
          [index: number]: string;
      }
      
      declare var CSSStyleDeclaration: {
          prototype: CSSStyleDeclaration;
          new(): CSSStyleDeclaration;
      }
      
      interface CSSStyleRule extends CSSRule {
          readOnly: boolean;
          selectorText: string;
          style: CSSStyleDeclaration;
      }
      
      declare var CSSStyleRule: {
          prototype: CSSStyleRule;
          new(): CSSStyleRule;
      }
      
      interface CSSStyleSheet extends StyleSheet {
          cssRules: CSSRuleList;
          cssText: string;
          href: string;
          id: string;
          imports: StyleSheetList;
          isAlternate: boolean;
          isPrefAlternate: boolean;
          ownerRule: CSSRule;
          owningElement: Element;
          pages: StyleSheetPageList;
          readOnly: boolean;
          rules: CSSRuleList;
          addImport(bstrURL: string, lIndex?: number): number;
          addPageRule(bstrSelector: string, bstrStyle: string, lIndex?: number): number;
          addRule(bstrSelector: string, bstrStyle?: string, lIndex?: number): number;
          deleteRule(index?: number): void;
          insertRule(rule: string, index?: number): number;
          removeImport(lIndex: number): void;
          removeRule(lIndex: number): void;
      }
      
      declare var CSSStyleSheet: {
          prototype: CSSStyleSheet;
          new(): CSSStyleSheet;
      }
      
      interface CSSSupportsRule extends CSSConditionRule {
      }
      
      declare var CSSSupportsRule: {
          prototype: CSSSupportsRule;
          new(): CSSSupportsRule;
      }
      
      interface CanvasGradient {
          addColorStop(offset: number, color: string): void;
      }
      
      declare var CanvasGradient: {
          prototype: CanvasGradient;
          new(): CanvasGradient;
      }
      
      interface CanvasPattern {
      }
      
      declare var CanvasPattern: {
          prototype: CanvasPattern;
          new(): CanvasPattern;
      }
      
      interface CanvasRenderingContext2D {
          canvas: HTMLCanvasElement;
          fillStyle: any;
          font: string;
          globalAlpha: number;
          globalCompositeOperation: string;
          lineCap: string;
          lineDashOffset: number;
          lineJoin: string;
          lineWidth: number;
          miterLimit: number;
          msFillRule: string;
          msImageSmoothingEnabled: boolean;
          shadowBlur: number;
          shadowColor: string;
          shadowOffsetX: number;
          shadowOffsetY: number;
          strokeStyle: any;
          textAlign: string;
          textBaseline: string;
          arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
          arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
          beginPath(): void;
          bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
          clearRect(x: number, y: number, w: number, h: number): void;
          clip(fillRule?: string): void;
          closePath(): void;
          createImageData(imageDataOrSw: number, sh?: number): ImageData;
          createImageData(imageDataOrSw: ImageData, sh?: number): ImageData;
          createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
          createPattern(image: HTMLImageElement, repetition: string): CanvasPattern;
          createPattern(image: HTMLCanvasElement, repetition: string): CanvasPattern;
          createPattern(image: HTMLVideoElement, repetition: string): CanvasPattern;
          createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
          drawImage(image: HTMLImageElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
          drawImage(image: HTMLCanvasElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
          drawImage(image: HTMLVideoElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
          fill(fillRule?: string): void;
          fillRect(x: number, y: number, w: number, h: number): void;
          fillText(text: string, x: number, y: number, maxWidth?: number): void;
          getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
          getLineDash(): number[];
          isPointInPath(x: number, y: number, fillRule?: string): boolean;
          lineTo(x: number, y: number): void;
          measureText(text: string): TextMetrics;
          moveTo(x: number, y: number): void;
          putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void;
          quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
          rect(x: number, y: number, w: number, h: number): void;
          restore(): void;
          rotate(angle: number): void;
          save(): void;
          scale(x: number, y: number): void;
          setLineDash(segments: number[]): void;
          setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
          stroke(): void;
          strokeRect(x: number, y: number, w: number, h: number): void;
          strokeText(text: string, x: number, y: number, maxWidth?: number): void;
          transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
          translate(x: number, y: number): void;
      }
      
      declare var CanvasRenderingContext2D: {
          prototype: CanvasRenderingContext2D;
          new(): CanvasRenderingContext2D;
      }
      
      interface ChannelMergerNode extends AudioNode {
      }
      
      declare var ChannelMergerNode: {
          prototype: ChannelMergerNode;
          new(): ChannelMergerNode;
      }
      
      interface ChannelSplitterNode extends AudioNode {
      }
      
      declare var ChannelSplitterNode: {
          prototype: ChannelSplitterNode;
          new(): ChannelSplitterNode;
      }
      
      interface CharacterData extends Node, ChildNode {
          data: string;
          length: number;
          appendData(arg: string): void;
          deleteData(offset: number, count: number): void;
          insertData(offset: number, arg: string): void;
          replaceData(offset: number, count: number, arg: string): void;
          substringData(offset: number, count: number): string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var CharacterData: {
          prototype: CharacterData;
          new(): CharacterData;
      }
      
      interface ClientRect {
          bottom: number;
          height: number;
          left: number;
          right: number;
          top: number;
          width: number;
      }
      
      declare var ClientRect: {
          prototype: ClientRect;
          new(): ClientRect;
      }
      
      interface ClientRectList {
          length: number;
          item(index: number): ClientRect;
          [index: number]: ClientRect;
      }
      
      declare var ClientRectList: {
          prototype: ClientRectList;
          new(): ClientRectList;
      }
      
      interface ClipboardEvent extends Event {
          clipboardData: DataTransfer;
      }
      
      declare var ClipboardEvent: {
          prototype: ClipboardEvent;
          new(type: string, eventInitDict?: ClipboardEventInit): ClipboardEvent;
      }
      
      interface CloseEvent extends Event {
          code: number;
          reason: string;
          wasClean: boolean;
          initCloseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, wasCleanArg: boolean, codeArg: number, reasonArg: string): void;
      }
      
      declare var CloseEvent: {
          prototype: CloseEvent;
          new(): CloseEvent;
      }
      
      interface CommandEvent extends Event {
          commandName: string;
          detail: string;
      }
      
      declare var CommandEvent: {
          prototype: CommandEvent;
          new(type: string, eventInitDict?: CommandEventInit): CommandEvent;
      }
      
      interface Comment extends CharacterData {
          text: string;
      }
      
      declare var Comment: {
          prototype: Comment;
          new(): Comment;
      }
      
      interface CompositionEvent extends UIEvent {
          data: string;
          locale: string;
          initCompositionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, locale: string): void;
      }
      
      declare var CompositionEvent: {
          prototype: CompositionEvent;
          new(typeArg: string, eventInitDict?: CompositionEventInit): CompositionEvent;
      }
      
      interface Console {
          assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
          clear(): void;
          count(countTitle?: string): void;
          debug(message?: string, ...optionalParams: any[]): void;
          dir(value?: any, ...optionalParams: any[]): void;
          dirxml(value: any): void;
          error(message?: any, ...optionalParams: any[]): void;
          group(groupTitle?: string): void;
          groupCollapsed(groupTitle?: string): void;
          groupEnd(): void;
          info(message?: any, ...optionalParams: any[]): void;
          log(message?: any, ...optionalParams: any[]): void;
          msIsIndependentlyComposed(element: Element): boolean;
          profile(reportName?: string): void;
          profileEnd(): void;
          select(element: Element): void;
          time(timerName?: string): void;
          timeEnd(timerName?: string): void;
          trace(): void;
          warn(message?: any, ...optionalParams: any[]): void;
      }
      
      declare var Console: {
          prototype: Console;
          new(): Console;
      }
      
      interface ConvolverNode extends AudioNode {
          buffer: AudioBuffer;
          normalize: boolean;
      }
      
      declare var ConvolverNode: {
          prototype: ConvolverNode;
          new(): ConvolverNode;
      }
      
      interface Coordinates {
          accuracy: number;
          altitude: number;
          altitudeAccuracy: number;
          heading: number;
          latitude: number;
          longitude: number;
          speed: number;
      }
      
      declare var Coordinates: {
          prototype: Coordinates;
          new(): Coordinates;
      }
      
      interface Crypto extends Object, RandomSource {
          subtle: SubtleCrypto;
      }
      
      declare var Crypto: {
          prototype: Crypto;
          new(): Crypto;
      }
      
      interface CryptoKey {
          algorithm: KeyAlgorithm;
          extractable: boolean;
          type: string;
          usages: string[];
      }
      
      declare var CryptoKey: {
          prototype: CryptoKey;
          new(): CryptoKey;
      }
      
      interface CryptoKeyPair {
          privateKey: CryptoKey;
          publicKey: CryptoKey;
      }
      
      declare var CryptoKeyPair: {
          prototype: CryptoKeyPair;
          new(): CryptoKeyPair;
      }
      
      interface CustomEvent extends Event {
          detail: any;
          initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void;
      }
      
      declare var CustomEvent: {
          prototype: CustomEvent;
          new(typeArg: string, eventInitDict?: CustomEventInit): CustomEvent;
      }
      
      interface DOMError {
          name: string;
          toString(): string;
      }
      
      declare var DOMError: {
          prototype: DOMError;
          new(): DOMError;
      }
      
      interface DOMException {
          code: number;
          message: string;
          name: string;
          toString(): string;
          ABORT_ERR: number;
          DATA_CLONE_ERR: number;
          DOMSTRING_SIZE_ERR: number;
          HIERARCHY_REQUEST_ERR: number;
          INDEX_SIZE_ERR: number;
          INUSE_ATTRIBUTE_ERR: number;
          INVALID_ACCESS_ERR: number;
          INVALID_CHARACTER_ERR: number;
          INVALID_MODIFICATION_ERR: number;
          INVALID_NODE_TYPE_ERR: number;
          INVALID_STATE_ERR: number;
          NAMESPACE_ERR: number;
          NETWORK_ERR: number;
          NOT_FOUND_ERR: number;
          NOT_SUPPORTED_ERR: number;
          NO_DATA_ALLOWED_ERR: number;
          NO_MODIFICATION_ALLOWED_ERR: number;
          PARSE_ERR: number;
          QUOTA_EXCEEDED_ERR: number;
          SECURITY_ERR: number;
          SERIALIZE_ERR: number;
          SYNTAX_ERR: number;
          TIMEOUT_ERR: number;
          TYPE_MISMATCH_ERR: number;
          URL_MISMATCH_ERR: number;
          VALIDATION_ERR: number;
          WRONG_DOCUMENT_ERR: number;
      }
      
      declare var DOMException: {
          prototype: DOMException;
          new(): DOMException;
          ABORT_ERR: number;
          DATA_CLONE_ERR: number;
          DOMSTRING_SIZE_ERR: number;
          HIERARCHY_REQUEST_ERR: number;
          INDEX_SIZE_ERR: number;
          INUSE_ATTRIBUTE_ERR: number;
          INVALID_ACCESS_ERR: number;
          INVALID_CHARACTER_ERR: number;
          INVALID_MODIFICATION_ERR: number;
          INVALID_NODE_TYPE_ERR: number;
          INVALID_STATE_ERR: number;
          NAMESPACE_ERR: number;
          NETWORK_ERR: number;
          NOT_FOUND_ERR: number;
          NOT_SUPPORTED_ERR: number;
          NO_DATA_ALLOWED_ERR: number;
          NO_MODIFICATION_ALLOWED_ERR: number;
          PARSE_ERR: number;
          QUOTA_EXCEEDED_ERR: number;
          SECURITY_ERR: number;
          SERIALIZE_ERR: number;
          SYNTAX_ERR: number;
          TIMEOUT_ERR: number;
          TYPE_MISMATCH_ERR: number;
          URL_MISMATCH_ERR: number;
          VALIDATION_ERR: number;
          WRONG_DOCUMENT_ERR: number;
      }
      
      interface DOMImplementation {
          createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document;
          createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;
          createHTMLDocument(title: string): Document;
          hasFeature(feature: string, version: string): boolean;
      }
      
      declare var DOMImplementation: {
          prototype: DOMImplementation;
          new(): DOMImplementation;
      }
      
      interface DOMParser {
          parseFromString(source: string, mimeType: string): Document;
      }
      
      declare var DOMParser: {
          prototype: DOMParser;
          new(): DOMParser;
      }
      
      interface DOMSettableTokenList extends DOMTokenList {
          value: string;
      }
      
      declare var DOMSettableTokenList: {
          prototype: DOMSettableTokenList;
          new(): DOMSettableTokenList;
      }
      
      interface DOMStringList {
          length: number;
          contains(str: string): boolean;
          item(index: number): string;
          [index: number]: string;
      }
      
      declare var DOMStringList: {
          prototype: DOMStringList;
          new(): DOMStringList;
      }
      
      interface DOMStringMap {
          [name: string]: string;
      }
      
      declare var DOMStringMap: {
          prototype: DOMStringMap;
          new(): DOMStringMap;
      }
      
      interface DOMTokenList {
          length: number;
          add(...token: string[]): void;
          contains(token: string): boolean;
          item(index: number): string;
          remove(...token: string[]): void;
          toString(): string;
          toggle(token: string, force?: boolean): boolean;
          [index: number]: string;
      }
      
      declare var DOMTokenList: {
          prototype: DOMTokenList;
          new(): DOMTokenList;
      }
      
      interface DataCue extends TextTrackCue {
          data: ArrayBuffer;
      }
      
      declare var DataCue: {
          prototype: DataCue;
          new(): DataCue;
      }
      
      interface DataTransfer {
          dropEffect: string;
          effectAllowed: string;
          files: FileList;
          items: DataTransferItemList;
          types: DOMStringList;
          clearData(format?: string): boolean;
          getData(format: string): string;
          setData(format: string, data: string): boolean;
      }
      
      declare var DataTransfer: {
          prototype: DataTransfer;
          new(): DataTransfer;
      }
      
      interface DataTransferItem {
          kind: string;
          type: string;
          getAsFile(): File;
          getAsString(_callback: FunctionStringCallback): void;
      }
      
      declare var DataTransferItem: {
          prototype: DataTransferItem;
          new(): DataTransferItem;
      }
      
      interface DataTransferItemList {
          length: number;
          add(data: File): DataTransferItem;
          clear(): void;
          item(index: number): File;
          remove(index: number): void;
          [index: number]: File;
      }
      
      declare var DataTransferItemList: {
          prototype: DataTransferItemList;
          new(): DataTransferItemList;
      }
      
      interface DeferredPermissionRequest {
          id: number;
          type: string;
          uri: string;
          allow(): void;
          deny(): void;
      }
      
      declare var DeferredPermissionRequest: {
          prototype: DeferredPermissionRequest;
          new(): DeferredPermissionRequest;
      }
      
      interface DelayNode extends AudioNode {
          delayTime: AudioParam;
      }
      
      declare var DelayNode: {
          prototype: DelayNode;
          new(): DelayNode;
      }
      
      interface DeviceAcceleration {
          x: number;
          y: number;
          z: number;
      }
      
      declare var DeviceAcceleration: {
          prototype: DeviceAcceleration;
          new(): DeviceAcceleration;
      }
      
      interface DeviceMotionEvent extends Event {
          acceleration: DeviceAcceleration;
          accelerationIncludingGravity: DeviceAcceleration;
          interval: number;
          rotationRate: DeviceRotationRate;
          initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void;
      }
      
      declare var DeviceMotionEvent: {
          prototype: DeviceMotionEvent;
          new(): DeviceMotionEvent;
      }
      
      interface DeviceOrientationEvent extends Event {
          absolute: boolean;
          alpha: number;
          beta: number;
          gamma: number;
          initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void;
      }
      
      declare var DeviceOrientationEvent: {
          prototype: DeviceOrientationEvent;
          new(): DeviceOrientationEvent;
      }
      
      interface DeviceRotationRate {
          alpha: number;
          beta: number;
          gamma: number;
      }
      
      declare var DeviceRotationRate: {
          prototype: DeviceRotationRate;
          new(): DeviceRotationRate;
      }
      
      interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEvent {
          /**
            * Sets or gets the URL for the current document. 
            */
          URL: string;
          /**
            * Gets the URL for the document, stripped of any character encoding.
            */
          URLUnencoded: string;
          /**
            * Gets the object that has the focus when the parent document has focus.
            */
          activeElement: Element;
          /**
            * Sets or gets the color of all active links in the document.
            */
          alinkColor: string;
          /**
            * Returns a reference to the collection of elements contained by the object.
            */
          all: HTMLCollection;
          /**
            * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.
            */
          anchors: HTMLCollection;
          /**
            * Retrieves a collection of all applet objects in the document.
            */
          applets: HTMLCollection;
          /**
            * Deprecated. Sets or retrieves a value that indicates the background color behind the object. 
            */
          bgColor: string;
          /**
            * Specifies the beginning and end of the document body.
            */
          body: HTMLElement;
          characterSet: string;
          /**
            * Gets or sets the character set used to encode the object.
            */
          charset: string;
          /**
            * Gets a value that indicates whether standards-compliant mode is switched on for the object.
            */
          compatMode: string;
          cookie: string;
          /**
            * Gets the default character set from the current regional language settings.
            */
          defaultCharset: string;
          defaultView: Window;
          /**
            * Sets or gets a value that indicates whether the document can be edited.
            */
          designMode: string;
          /**
            * Sets or retrieves a value that indicates the reading order of the object. 
            */
          dir: string;
          /**
            * Gets an object representing the document type declaration associated with the current document. 
            */
          doctype: DocumentType;
          /**
            * Gets a reference to the root node of the document. 
            */
          documentElement: HTMLElement;
          /**
            * Sets or gets the security domain of the document. 
            */
          domain: string;
          /**
            * Retrieves a collection of all embed objects in the document.
            */
          embeds: HTMLCollection;
          /**
            * Sets or gets the foreground (text) color of the document.
            */
          fgColor: string;
          /**
            * Retrieves a collection, in source order, of all form objects in the document.
            */
          forms: HTMLCollection;
          fullscreenElement: Element;
          fullscreenEnabled: boolean;
          head: HTMLHeadElement;
          hidden: boolean;
          /**
            * Retrieves a collection, in source order, of img objects in the document.
            */
          images: HTMLCollection;
          /**
            * Gets the implementation object of the current document. 
            */
          implementation: DOMImplementation;
          /**
            * Returns the character encoding used to create the webpage that is loaded into the document object.
            */
          inputEncoding: string;
          /**
            * Gets the date that the page was last modified, if the page supplies one. 
            */
          lastModified: string;
          /**
            * Sets or gets the color of the document links. 
            */
          linkColor: string;
          /**
            * Retrieves a collection of all a objects that specify the href property and all area objects in the document.
            */
          links: HTMLCollection;
          /**
            * Contains information about the current URL. 
            */
          location: Location;
          media: string;
          msCSSOMElementFloatMetrics: boolean;
          msCapsLockWarningOff: boolean;
          msHidden: boolean;
          msVisibilityState: string;
          /**
            * Fires when the user aborts the download.
            * @param ev The event.
            */
          onabort: (ev: Event) => any;
          /**
            * Fires when the object is set as the active element.
            * @param ev The event.
            */
          onactivate: (ev: UIEvent) => any;
          /**
            * Fires immediately before the object is set as the active element.
            * @param ev The event.
            */
          onbeforeactivate: (ev: UIEvent) => any;
          /**
            * Fires immediately before the activeElement is changed from the current object to another object in the parent document.
            * @param ev The event.
            */
          onbeforedeactivate: (ev: UIEvent) => any;
          /** 
            * Fires when the object loses the input focus. 
            * @param ev The focus event.
            */
          onblur: (ev: FocusEvent) => any;
          /**
            * Occurs when playback is possible, but would require further buffering. 
            * @param ev The event.
            */
          oncanplay: (ev: Event) => any;
          oncanplaythrough: (ev: Event) => any;
          /**
            * Fires when the contents of the object or selection have changed. 
            * @param ev The event.
            */
          onchange: (ev: Event) => any;
          /**
            * Fires when the user clicks the left mouse button on the object
            * @param ev The mouse event.
            */
          onclick: (ev: MouseEvent) => any;
          /**
            * Fires when the user clicks the right mouse button in the client area, opening the context menu. 
            * @param ev The mouse event.
            */
          oncontextmenu: (ev: PointerEvent) => any;
          /**
            * Fires when the user double-clicks the object.
            * @param ev The mouse event.
            */
          ondblclick: (ev: MouseEvent) => any;
          /**
            * Fires when the activeElement is changed from the current object to another object in the parent document.
            * @param ev The UI Event
            */
          ondeactivate: (ev: UIEvent) => any;
          /**
            * Fires on the source object continuously during a drag operation.
            * @param ev The event.
            */
          ondrag: (ev: DragEvent) => any;
          /**
            * Fires on the source object when the user releases the mouse at the close of a drag operation.
            * @param ev The event.
            */
          ondragend: (ev: DragEvent) => any;
          /** 
            * Fires on the target element when the user drags the object to a valid drop target.
            * @param ev The drag event.
            */
          ondragenter: (ev: DragEvent) => any;
          /** 
            * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.
            * @param ev The drag event.
            */
          ondragleave: (ev: DragEvent) => any;
          /**
            * Fires on the target element continuously while the user drags the object over a valid drop target.
            * @param ev The event.
            */
          ondragover: (ev: DragEvent) => any;
          /**
            * Fires on the source object when the user starts to drag a text selection or selected object. 
            * @param ev The event.
            */
          ondragstart: (ev: DragEvent) => any;
          ondrop: (ev: DragEvent) => any;
          /**
            * Occurs when the duration attribute is updated. 
            * @param ev The event.
            */
          ondurationchange: (ev: Event) => any;
          /**
            * Occurs when the media element is reset to its initial state. 
            * @param ev The event.
            */
          onemptied: (ev: Event) => any;
          /**
            * Occurs when the end of playback is reached. 
            * @param ev The event
            */
          onended: (ev: Event) => any;
          /**
            * Fires when an error occurs during object loading.
            * @param ev The event.
            */
          onerror: (ev: Event) => any;
          /**
            * Fires when the object receives focus. 
            * @param ev The event.
            */
          onfocus: (ev: FocusEvent) => any;
          onfullscreenchange: (ev: Event) => any;
          onfullscreenerror: (ev: Event) => any;
          oninput: (ev: Event) => any;
          /**
            * Fires when the user presses a key.
            * @param ev The keyboard event
            */
          onkeydown: (ev: KeyboardEvent) => any;
          /**
            * Fires when the user presses an alphanumeric key.
            * @param ev The event.
            */
          onkeypress: (ev: KeyboardEvent) => any;
          /**
            * Fires when the user releases a key.
            * @param ev The keyboard event
            */
          onkeyup: (ev: KeyboardEvent) => any;
          /**
            * Fires immediately after the browser loads the object. 
            * @param ev The event.
            */
          onload: (ev: Event) => any;
          /**
            * Occurs when media data is loaded at the current playback position. 
            * @param ev The event.
            */
          onloadeddata: (ev: Event) => any;
          /**
            * Occurs when the duration and dimensions of the media have been determined.
            * @param ev The event.
            */
          onloadedmetadata: (ev: Event) => any;
          /**
            * Occurs when Internet Explorer begins looking for media data. 
            * @param ev The event.
            */
          onloadstart: (ev: Event) => any;
          /**
            * Fires when the user clicks the object with either mouse button. 
            * @param ev The mouse event.
            */
          onmousedown: (ev: MouseEvent) => any;
          /**
            * Fires when the user moves the mouse over the object. 
            * @param ev The mouse event.
            */
          onmousemove: (ev: MouseEvent) => any;
          /**
            * Fires when the user moves the mouse pointer outside the boundaries of the object. 
            * @param ev The mouse event.
            */
          onmouseout: (ev: MouseEvent) => any;
          /**
            * Fires when the user moves the mouse pointer into the object.
            * @param ev The mouse event.
            */
          onmouseover: (ev: MouseEvent) => any;
          /**
            * Fires when the user releases a mouse button while the mouse is over the object. 
            * @param ev The mouse event.
            */
          onmouseup: (ev: MouseEvent) => any;
          /**
            * Fires when the wheel button is rotated. 
            * @param ev The mouse event
            */
          onmousewheel: (ev: MouseWheelEvent) => any;
          onmscontentzoom: (ev: UIEvent) => any;
          onmsgesturechange: (ev: MSGestureEvent) => any;
          onmsgesturedoubletap: (ev: MSGestureEvent) => any;
          onmsgestureend: (ev: MSGestureEvent) => any;
          onmsgesturehold: (ev: MSGestureEvent) => any;
          onmsgesturestart: (ev: MSGestureEvent) => any;
          onmsgesturetap: (ev: MSGestureEvent) => any;
          onmsinertiastart: (ev: MSGestureEvent) => any;
          onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any;
          onmspointercancel: (ev: MSPointerEvent) => any;
          onmspointerdown: (ev: MSPointerEvent) => any;
          onmspointerenter: (ev: MSPointerEvent) => any;
          onmspointerleave: (ev: MSPointerEvent) => any;
          onmspointermove: (ev: MSPointerEvent) => any;
          onmspointerout: (ev: MSPointerEvent) => any;
          onmspointerover: (ev: MSPointerEvent) => any;
          onmspointerup: (ev: MSPointerEvent) => any;
          /**
            * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. 
            * @param ev The event.
            */
          onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any;
          /**
            * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode.
            * @param ev The event.
            */
          onmsthumbnailclick: (ev: MSSiteModeEvent) => any;
          /**
            * Occurs when playback is paused.
            * @param ev The event.
            */
          onpause: (ev: Event) => any;
          /**
            * Occurs when the play method is requested. 
            * @param ev The event.
            */
          onplay: (ev: Event) => any;
          /**
            * Occurs when the audio or video has started playing. 
            * @param ev The event.
            */
          onplaying: (ev: Event) => any;
          onpointerlockchange: (ev: Event) => any;
          onpointerlockerror: (ev: Event) => any;
          /**
            * Occurs to indicate progress while downloading media data. 
            * @param ev The event.
            */
          onprogress: (ev: ProgressEvent) => any;
          /**
            * Occurs when the playback rate is increased or decreased. 
            * @param ev The event.
            */
          onratechange: (ev: Event) => any;
          /**
            * Fires when the state of the object has changed.
            * @param ev The event
            */
          onreadystatechange: (ev: ProgressEvent) => any;
          /**
            * Fires when the user resets a form. 
            * @param ev The event.
            */
          onreset: (ev: Event) => any;
          /**
            * Fires when the user repositions the scroll box in the scroll bar on the object. 
            * @param ev The event.
            */
          onscroll: (ev: UIEvent) => any;
          /**
            * Occurs when the seek operation ends. 
            * @param ev The event.
            */
          onseeked: (ev: Event) => any;
          /**
            * Occurs when the current playback position is moved. 
            * @param ev The event.
            */
          onseeking: (ev: Event) => any;
          /**
            * Fires when the current selection changes.
            * @param ev The event.
            */
          onselect: (ev: UIEvent) => any;
          onselectstart: (ev: Event) => any;
          /**
            * Occurs when the download has stopped. 
            * @param ev The event.
            */
          onstalled: (ev: Event) => any;
          /**
            * Fires when the user clicks the Stop button or leaves the Web page.
            * @param ev The event.
            */
          onstop: (ev: Event) => any;
          onsubmit: (ev: Event) => any;
          /**
            * Occurs if the load operation has been intentionally halted. 
            * @param ev The event.
            */
          onsuspend: (ev: Event) => any;
          /**
            * Occurs to indicate the current playback position.
            * @param ev The event.
            */
          ontimeupdate: (ev: Event) => any;
          ontouchcancel: (ev: TouchEvent) => any;
          ontouchend: (ev: TouchEvent) => any;
          ontouchmove: (ev: TouchEvent) => any;
          ontouchstart: (ev: TouchEvent) => any;
          /**
            * Occurs when the volume is changed, or playback is muted or unmuted.
            * @param ev The event.
            */
          onvolumechange: (ev: Event) => any;
          /**
            * Occurs when playback stops because the next frame of a video resource is not available. 
            * @param ev The event.
            */
          onwaiting: (ev: Event) => any;
          onwebkitfullscreenchange: (ev: Event) => any;
          onwebkitfullscreenerror: (ev: Event) => any;
          plugins: HTMLCollection;
          pointerLockElement: Element;
          /**
            * Retrieves a value that indicates the current state of the object.
            */
          readyState: string;
          /**
            * Gets the URL of the location that referred the user to the current page.
            */
          referrer: string;
          /**
            * Gets the root svg element in the document hierarchy.
            */
          rootElement: SVGSVGElement;
          /**
            * Retrieves a collection of all script objects in the document.
            */
          scripts: HTMLCollection;
          security: string;
          /**
            * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.
            */
          styleSheets: StyleSheetList;
          /**
            * Contains the title of the document.
            */
          title: string;
          visibilityState: string;
          /** 
            * Sets or gets the color of the links that the user has visited.
            */
          vlinkColor: string;
          webkitCurrentFullScreenElement: Element;
          webkitFullscreenElement: Element;
          webkitFullscreenEnabled: boolean;
          webkitIsFullScreen: boolean;
          xmlEncoding: string;
          xmlStandalone: boolean;
          /**
            * Gets or sets the version attribute specified in the declaration of an XML document.
            */
          xmlVersion: string;
          adoptNode(source: Node): Node;
          captureEvents(): void;
          clear(): void;
          /**
            * Closes an output stream and forces the sent data to display.
            */
          close(): void;
          /**
            * Creates an attribute object with a specified name.
            * @param name String that sets the attribute object's name.
            */
          createAttribute(name: string): Attr;
          createAttributeNS(namespaceURI: string, qualifiedName: string): Attr;
          createCDATASection(data: string): CDATASection;
          /**
            * Creates a comment object with the specified data.
            * @param data Sets the comment object's data.
            */
          createComment(data: string): Comment;
          /**
            * Creates a new document.
            */
          createDocumentFragment(): DocumentFragment;
          /**
            * Creates an instance of the element for the specified tag.
            * @param tagName The name of an element.
            */
          createElement(tagName: "a"): HTMLAnchorElement;
          createElement(tagName: "abbr"): HTMLPhraseElement;
          createElement(tagName: "acronym"): HTMLPhraseElement;
          createElement(tagName: "address"): HTMLBlockElement;
          createElement(tagName: "applet"): HTMLAppletElement;
          createElement(tagName: "area"): HTMLAreaElement;
          createElement(tagName: "audio"): HTMLAudioElement;
          createElement(tagName: "b"): HTMLPhraseElement;
          createElement(tagName: "base"): HTMLBaseElement;
          createElement(tagName: "basefont"): HTMLBaseFontElement;
          createElement(tagName: "bdo"): HTMLPhraseElement;
          createElement(tagName: "big"): HTMLPhraseElement;
          createElement(tagName: "blockquote"): HTMLBlockElement;
          createElement(tagName: "body"): HTMLBodyElement;
          createElement(tagName: "br"): HTMLBRElement;
          createElement(tagName: "button"): HTMLButtonElement;
          createElement(tagName: "canvas"): HTMLCanvasElement;
          createElement(tagName: "caption"): HTMLTableCaptionElement;
          createElement(tagName: "center"): HTMLBlockElement;
          createElement(tagName: "cite"): HTMLPhraseElement;
          createElement(tagName: "code"): HTMLPhraseElement;
          createElement(tagName: "col"): HTMLTableColElement;
          createElement(tagName: "colgroup"): HTMLTableColElement;
          createElement(tagName: "datalist"): HTMLDataListElement;
          createElement(tagName: "dd"): HTMLDDElement;
          createElement(tagName: "del"): HTMLModElement;
          createElement(tagName: "dfn"): HTMLPhraseElement;
          createElement(tagName: "dir"): HTMLDirectoryElement;
          createElement(tagName: "div"): HTMLDivElement;
          createElement(tagName: "dl"): HTMLDListElement;
          createElement(tagName: "dt"): HTMLDTElement;
          createElement(tagName: "em"): HTMLPhraseElement;
          createElement(tagName: "embed"): HTMLEmbedElement;
          createElement(tagName: "fieldset"): HTMLFieldSetElement;
          createElement(tagName: "font"): HTMLFontElement;
          createElement(tagName: "form"): HTMLFormElement;
          createElement(tagName: "frame"): HTMLFrameElement;
          createElement(tagName: "frameset"): HTMLFrameSetElement;
          createElement(tagName: "h1"): HTMLHeadingElement;
          createElement(tagName: "h2"): HTMLHeadingElement;
          createElement(tagName: "h3"): HTMLHeadingElement;
          createElement(tagName: "h4"): HTMLHeadingElement;
          createElement(tagName: "h5"): HTMLHeadingElement;
          createElement(tagName: "h6"): HTMLHeadingElement;
          createElement(tagName: "head"): HTMLHeadElement;
          createElement(tagName: "hr"): HTMLHRElement;
          createElement(tagName: "html"): HTMLHtmlElement;
          createElement(tagName: "i"): HTMLPhraseElement;
          createElement(tagName: "iframe"): HTMLIFrameElement;
          createElement(tagName: "img"): HTMLImageElement;
          createElement(tagName: "input"): HTMLInputElement;
          createElement(tagName: "ins"): HTMLModElement;
          createElement(tagName: "isindex"): HTMLIsIndexElement;
          createElement(tagName: "kbd"): HTMLPhraseElement;
          createElement(tagName: "keygen"): HTMLBlockElement;
          createElement(tagName: "label"): HTMLLabelElement;
          createElement(tagName: "legend"): HTMLLegendElement;
          createElement(tagName: "li"): HTMLLIElement;
          createElement(tagName: "link"): HTMLLinkElement;
          createElement(tagName: "listing"): HTMLBlockElement;
          createElement(tagName: "map"): HTMLMapElement;
          createElement(tagName: "marquee"): HTMLMarqueeElement;
          createElement(tagName: "menu"): HTMLMenuElement;
          createElement(tagName: "meta"): HTMLMetaElement;
          createElement(tagName: "nextid"): HTMLNextIdElement;
          createElement(tagName: "nobr"): HTMLPhraseElement;
          createElement(tagName: "object"): HTMLObjectElement;
          createElement(tagName: "ol"): HTMLOListElement;
          createElement(tagName: "optgroup"): HTMLOptGroupElement;
          createElement(tagName: "option"): HTMLOptionElement;
          createElement(tagName: "p"): HTMLParagraphElement;
          createElement(tagName: "param"): HTMLParamElement;
          createElement(tagName: "plaintext"): HTMLBlockElement;
          createElement(tagName: "pre"): HTMLPreElement;
          createElement(tagName: "progress"): HTMLProgressElement;
          createElement(tagName: "q"): HTMLQuoteElement;
          createElement(tagName: "rt"): HTMLPhraseElement;
          createElement(tagName: "ruby"): HTMLPhraseElement;
          createElement(tagName: "s"): HTMLPhraseElement;
          createElement(tagName: "samp"): HTMLPhraseElement;
          createElement(tagName: "script"): HTMLScriptElement;
          createElement(tagName: "select"): HTMLSelectElement;
          createElement(tagName: "small"): HTMLPhraseElement;
          createElement(tagName: "source"): HTMLSourceElement;
          createElement(tagName: "span"): HTMLSpanElement;
          createElement(tagName: "strike"): HTMLPhraseElement;
          createElement(tagName: "strong"): HTMLPhraseElement;
          createElement(tagName: "style"): HTMLStyleElement;
          createElement(tagName: "sub"): HTMLPhraseElement;
          createElement(tagName: "sup"): HTMLPhraseElement;
          createElement(tagName: "table"): HTMLTableElement;
          createElement(tagName: "tbody"): HTMLTableSectionElement;
          createElement(tagName: "td"): HTMLTableDataCellElement;
          createElement(tagName: "textarea"): HTMLTextAreaElement;
          createElement(tagName: "tfoot"): HTMLTableSectionElement;
          createElement(tagName: "th"): HTMLTableHeaderCellElement;
          createElement(tagName: "thead"): HTMLTableSectionElement;
          createElement(tagName: "title"): HTMLTitleElement;
          createElement(tagName: "tr"): HTMLTableRowElement;
          createElement(tagName: "track"): HTMLTrackElement;
          createElement(tagName: "tt"): HTMLPhraseElement;
          createElement(tagName: "u"): HTMLPhraseElement;
          createElement(tagName: "ul"): HTMLUListElement;
          createElement(tagName: "var"): HTMLPhraseElement;
          createElement(tagName: "video"): HTMLVideoElement;
          createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement;
          createElement(tagName: "xmp"): HTMLBlockElement;
          createElement(tagName: string): HTMLElement;
          createElementNS(namespaceURI: string, qualifiedName: string): Element;
          createExpression(expression: string, resolver: XPathNSResolver): XPathExpression;
          createNSResolver(nodeResolver: Node): XPathNSResolver;
          /**
            * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. 
            * @param root The root element or node to start traversing on.
            * @param whatToShow The type of nodes or elements to appear in the node list
            * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.
            * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
            */
          createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter, entityReferenceExpansion?: boolean): NodeIterator;
          createProcessingInstruction(target: string, data: string): ProcessingInstruction;
          /**
            *  Returns an empty range object that has both of its boundary points positioned at the beginning of the document. 
            */
          createRange(): Range;
          /**
            * Creates a text string from the specified value. 
            * @param data String that specifies the nodeValue property of the text node.
            */
          createTextNode(data: string): Text;
          createTouch(view: any, target: EventTarget, identifier: number, pageX: number, pageY: number, screenX: number, screenY: number): Touch;
          createTouchList(...touches: Touch[]): TouchList;
          /**
            * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.
            * @param root The root element or node to start traversing on.
            * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.
            * @param filter A custom NodeFilter function to use.
            * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
            */
          createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter, entityReferenceExpansion?: boolean): TreeWalker;
          /**
            * Returns the element for the specified x coordinate and the specified y coordinate. 
            * @param x The x-offset
            * @param y The y-offset
            */
          elementFromPoint(x: number, y: number): Element;
          evaluate(expression: string, contextNode: Node, resolver: XPathNSResolver, type: number, result: XPathResult): XPathResult;
          /**
            * Executes a command on the current document, current selection, or the given range.
            * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
            * @param showUI Display the user interface, defaults to false.
            * @param value Value to assign.
            */
          execCommand(commandId: string, showUI?: boolean, value?: any): boolean;
          /**
            * Displays help information for the given command identifier.
            * @param commandId Displays help information for the given command identifier.
            */
          execCommandShowHelp(commandId: string): boolean;
          exitFullscreen(): void;
          exitPointerLock(): void;
          /**
            * Causes the element to receive the focus and executes the code specified by the onfocus event.
            */
          focus(): void;
          /**
            * Returns a reference to the first object with the specified value of the ID or NAME attribute.
            * @param elementId String that specifies the ID value. Case-insensitive.
            */
          getElementById(elementId: string): HTMLElement;
          getElementsByClassName(classNames: string): NodeList;
          /**
            * Gets a collection of objects based on the value of the NAME or ID attribute.
            * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.
            */
          getElementsByName(elementName: string): NodeList;
          /**
            * Retrieves a collection of objects based on the specified element name.
            * @param name Specifies the name of an element.
            */
          getElementsByTagName(tagname: "a"): NodeListOf<HTMLAnchorElement>;
          getElementsByTagName(tagname: "abbr"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "acronym"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "address"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: "applet"): NodeListOf<HTMLAppletElement>;
          getElementsByTagName(tagname: "area"): NodeListOf<HTMLAreaElement>;
          getElementsByTagName(tagname: "article"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "aside"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "audio"): NodeListOf<HTMLAudioElement>;
          getElementsByTagName(tagname: "b"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "base"): NodeListOf<HTMLBaseElement>;
          getElementsByTagName(tagname: "basefont"): NodeListOf<HTMLBaseFontElement>;
          getElementsByTagName(tagname: "bdo"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "big"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "blockquote"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: "body"): NodeListOf<HTMLBodyElement>;
          getElementsByTagName(tagname: "br"): NodeListOf<HTMLBRElement>;
          getElementsByTagName(tagname: "button"): NodeListOf<HTMLButtonElement>;
          getElementsByTagName(tagname: "canvas"): NodeListOf<HTMLCanvasElement>;
          getElementsByTagName(tagname: "caption"): NodeListOf<HTMLTableCaptionElement>;
          getElementsByTagName(tagname: "center"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: "circle"): NodeListOf<SVGCircleElement>;
          getElementsByTagName(tagname: "cite"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "clippath"): NodeListOf<SVGClipPathElement>;
          getElementsByTagName(tagname: "code"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "col"): NodeListOf<HTMLTableColElement>;
          getElementsByTagName(tagname: "colgroup"): NodeListOf<HTMLTableColElement>;
          getElementsByTagName(tagname: "datalist"): NodeListOf<HTMLDataListElement>;
          getElementsByTagName(tagname: "dd"): NodeListOf<HTMLDDElement>;
          getElementsByTagName(tagname: "defs"): NodeListOf<SVGDefsElement>;
          getElementsByTagName(tagname: "del"): NodeListOf<HTMLModElement>;
          getElementsByTagName(tagname: "desc"): NodeListOf<SVGDescElement>;
          getElementsByTagName(tagname: "dfn"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "dir"): NodeListOf<HTMLDirectoryElement>;
          getElementsByTagName(tagname: "div"): NodeListOf<HTMLDivElement>;
          getElementsByTagName(tagname: "dl"): NodeListOf<HTMLDListElement>;
          getElementsByTagName(tagname: "dt"): NodeListOf<HTMLDTElement>;
          getElementsByTagName(tagname: "ellipse"): NodeListOf<SVGEllipseElement>;
          getElementsByTagName(tagname: "em"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "embed"): NodeListOf<HTMLEmbedElement>;
          getElementsByTagName(tagname: "feblend"): NodeListOf<SVGFEBlendElement>;
          getElementsByTagName(tagname: "fecolormatrix"): NodeListOf<SVGFEColorMatrixElement>;
          getElementsByTagName(tagname: "fecomponenttransfer"): NodeListOf<SVGFEComponentTransferElement>;
          getElementsByTagName(tagname: "fecomposite"): NodeListOf<SVGFECompositeElement>;
          getElementsByTagName(tagname: "feconvolvematrix"): NodeListOf<SVGFEConvolveMatrixElement>;
          getElementsByTagName(tagname: "fediffuselighting"): NodeListOf<SVGFEDiffuseLightingElement>;
          getElementsByTagName(tagname: "fedisplacementmap"): NodeListOf<SVGFEDisplacementMapElement>;
          getElementsByTagName(tagname: "fedistantlight"): NodeListOf<SVGFEDistantLightElement>;
          getElementsByTagName(tagname: "feflood"): NodeListOf<SVGFEFloodElement>;
          getElementsByTagName(tagname: "fefunca"): NodeListOf<SVGFEFuncAElement>;
          getElementsByTagName(tagname: "fefuncb"): NodeListOf<SVGFEFuncBElement>;
          getElementsByTagName(tagname: "fefuncg"): NodeListOf<SVGFEFuncGElement>;
          getElementsByTagName(tagname: "fefuncr"): NodeListOf<SVGFEFuncRElement>;
          getElementsByTagName(tagname: "fegaussianblur"): NodeListOf<SVGFEGaussianBlurElement>;
          getElementsByTagName(tagname: "feimage"): NodeListOf<SVGFEImageElement>;
          getElementsByTagName(tagname: "femerge"): NodeListOf<SVGFEMergeElement>;
          getElementsByTagName(tagname: "femergenode"): NodeListOf<SVGFEMergeNodeElement>;
          getElementsByTagName(tagname: "femorphology"): NodeListOf<SVGFEMorphologyElement>;
          getElementsByTagName(tagname: "feoffset"): NodeListOf<SVGFEOffsetElement>;
          getElementsByTagName(tagname: "fepointlight"): NodeListOf<SVGFEPointLightElement>;
          getElementsByTagName(tagname: "fespecularlighting"): NodeListOf<SVGFESpecularLightingElement>;
          getElementsByTagName(tagname: "fespotlight"): NodeListOf<SVGFESpotLightElement>;
          getElementsByTagName(tagname: "fetile"): NodeListOf<SVGFETileElement>;
          getElementsByTagName(tagname: "feturbulence"): NodeListOf<SVGFETurbulenceElement>;
          getElementsByTagName(tagname: "fieldset"): NodeListOf<HTMLFieldSetElement>;
          getElementsByTagName(tagname: "figcaption"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "figure"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "filter"): NodeListOf<SVGFilterElement>;
          getElementsByTagName(tagname: "font"): NodeListOf<HTMLFontElement>;
          getElementsByTagName(tagname: "footer"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "foreignobject"): NodeListOf<SVGForeignObjectElement>;
          getElementsByTagName(tagname: "form"): NodeListOf<HTMLFormElement>;
          getElementsByTagName(tagname: "frame"): NodeListOf<HTMLFrameElement>;
          getElementsByTagName(tagname: "frameset"): NodeListOf<HTMLFrameSetElement>;
          getElementsByTagName(tagname: "g"): NodeListOf<SVGGElement>;
          getElementsByTagName(tagname: "h1"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(tagname: "h2"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(tagname: "h3"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(tagname: "h4"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(tagname: "h5"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(tagname: "h6"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(tagname: "head"): NodeListOf<HTMLHeadElement>;
          getElementsByTagName(tagname: "header"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "hgroup"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "hr"): NodeListOf<HTMLHRElement>;
          getElementsByTagName(tagname: "html"): NodeListOf<HTMLHtmlElement>;
          getElementsByTagName(tagname: "i"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "iframe"): NodeListOf<HTMLIFrameElement>;
          getElementsByTagName(tagname: "image"): NodeListOf<SVGImageElement>;
          getElementsByTagName(tagname: "img"): NodeListOf<HTMLImageElement>;
          getElementsByTagName(tagname: "input"): NodeListOf<HTMLInputElement>;
          getElementsByTagName(tagname: "ins"): NodeListOf<HTMLModElement>;
          getElementsByTagName(tagname: "isindex"): NodeListOf<HTMLIsIndexElement>;
          getElementsByTagName(tagname: "kbd"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "keygen"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: "label"): NodeListOf<HTMLLabelElement>;
          getElementsByTagName(tagname: "legend"): NodeListOf<HTMLLegendElement>;
          getElementsByTagName(tagname: "li"): NodeListOf<HTMLLIElement>;
          getElementsByTagName(tagname: "line"): NodeListOf<SVGLineElement>;
          getElementsByTagName(tagname: "lineargradient"): NodeListOf<SVGLinearGradientElement>;
          getElementsByTagName(tagname: "link"): NodeListOf<HTMLLinkElement>;
          getElementsByTagName(tagname: "listing"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: "map"): NodeListOf<HTMLMapElement>;
          getElementsByTagName(tagname: "mark"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "marker"): NodeListOf<SVGMarkerElement>;
          getElementsByTagName(tagname: "marquee"): NodeListOf<HTMLMarqueeElement>;
          getElementsByTagName(tagname: "mask"): NodeListOf<SVGMaskElement>;
          getElementsByTagName(tagname: "menu"): NodeListOf<HTMLMenuElement>;
          getElementsByTagName(tagname: "meta"): NodeListOf<HTMLMetaElement>;
          getElementsByTagName(tagname: "metadata"): NodeListOf<SVGMetadataElement>;
          getElementsByTagName(tagname: "nav"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "nextid"): NodeListOf<HTMLNextIdElement>;
          getElementsByTagName(tagname: "nobr"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "noframes"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "noscript"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "object"): NodeListOf<HTMLObjectElement>;
          getElementsByTagName(tagname: "ol"): NodeListOf<HTMLOListElement>;
          getElementsByTagName(tagname: "optgroup"): NodeListOf<HTMLOptGroupElement>;
          getElementsByTagName(tagname: "option"): NodeListOf<HTMLOptionElement>;
          getElementsByTagName(tagname: "p"): NodeListOf<HTMLParagraphElement>;
          getElementsByTagName(tagname: "param"): NodeListOf<HTMLParamElement>;
          getElementsByTagName(tagname: "path"): NodeListOf<SVGPathElement>;
          getElementsByTagName(tagname: "pattern"): NodeListOf<SVGPatternElement>;
          getElementsByTagName(tagname: "plaintext"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: "polygon"): NodeListOf<SVGPolygonElement>;
          getElementsByTagName(tagname: "polyline"): NodeListOf<SVGPolylineElement>;
          getElementsByTagName(tagname: "pre"): NodeListOf<HTMLPreElement>;
          getElementsByTagName(tagname: "progress"): NodeListOf<HTMLProgressElement>;
          getElementsByTagName(tagname: "q"): NodeListOf<HTMLQuoteElement>;
          getElementsByTagName(tagname: "radialgradient"): NodeListOf<SVGRadialGradientElement>;
          getElementsByTagName(tagname: "rect"): NodeListOf<SVGRectElement>;
          getElementsByTagName(tagname: "rt"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "ruby"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "s"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "samp"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "script"): NodeListOf<HTMLScriptElement>;
          getElementsByTagName(tagname: "section"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "select"): NodeListOf<HTMLSelectElement>;
          getElementsByTagName(tagname: "small"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "source"): NodeListOf<HTMLSourceElement>;
          getElementsByTagName(tagname: "span"): NodeListOf<HTMLSpanElement>;
          getElementsByTagName(tagname: "stop"): NodeListOf<SVGStopElement>;
          getElementsByTagName(tagname: "strike"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "strong"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "style"): NodeListOf<HTMLStyleElement>;
          getElementsByTagName(tagname: "sub"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "sup"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "svg"): NodeListOf<SVGSVGElement>;
          getElementsByTagName(tagname: "switch"): NodeListOf<SVGSwitchElement>;
          getElementsByTagName(tagname: "symbol"): NodeListOf<SVGSymbolElement>;
          getElementsByTagName(tagname: "table"): NodeListOf<HTMLTableElement>;
          getElementsByTagName(tagname: "tbody"): NodeListOf<HTMLTableSectionElement>;
          getElementsByTagName(tagname: "td"): NodeListOf<HTMLTableDataCellElement>;
          getElementsByTagName(tagname: "text"): NodeListOf<SVGTextElement>;
          getElementsByTagName(tagname: "textpath"): NodeListOf<SVGTextPathElement>;
          getElementsByTagName(tagname: "textarea"): NodeListOf<HTMLTextAreaElement>;
          getElementsByTagName(tagname: "tfoot"): NodeListOf<HTMLTableSectionElement>;
          getElementsByTagName(tagname: "th"): NodeListOf<HTMLTableHeaderCellElement>;
          getElementsByTagName(tagname: "thead"): NodeListOf<HTMLTableSectionElement>;
          getElementsByTagName(tagname: "title"): NodeListOf<HTMLTitleElement>;
          getElementsByTagName(tagname: "tr"): NodeListOf<HTMLTableRowElement>;
          getElementsByTagName(tagname: "track"): NodeListOf<HTMLTrackElement>;
          getElementsByTagName(tagname: "tspan"): NodeListOf<SVGTSpanElement>;
          getElementsByTagName(tagname: "tt"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "u"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "ul"): NodeListOf<HTMLUListElement>;
          getElementsByTagName(tagname: "use"): NodeListOf<SVGUseElement>;
          getElementsByTagName(tagname: "var"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(tagname: "video"): NodeListOf<HTMLVideoElement>;
          getElementsByTagName(tagname: "view"): NodeListOf<SVGViewElement>;
          getElementsByTagName(tagname: "wbr"): NodeListOf<HTMLElement>;
          getElementsByTagName(tagname: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
          getElementsByTagName(tagname: "xmp"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(tagname: string): NodeList;
          getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
          /**
            * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage.
            */
          getSelection(): Selection;
          /**
            * Gets a value indicating whether the object currently has focus.
            */
          hasFocus(): boolean;
          importNode(importedNode: Node, deep: boolean): Node;
          msElementsFromPoint(x: number, y: number): NodeList;
          msElementsFromRect(left: number, top: number, width: number, height: number): NodeList;
          msGetPrintDocumentForNamedFlow(flowName: string): Document;
          msSetPrintDocumentUriForNamedFlow(flowName: string, uri: string): void;
          /**
            * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.
            * @param url Specifies a MIME type for the document.
            * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.
            * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported.
            * @param replace Specifies whether the existing entry for the document is replaced in the history list.
            */
          open(url?: string, name?: string, features?: string, replace?: boolean): Document | Window;
          /** 
            * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.
            * @param commandId Specifies a command identifier.
            */
          queryCommandEnabled(commandId: string): boolean;
          /**
            * Returns a Boolean value that indicates whether the specified command is in the indeterminate state.
            * @param commandId String that specifies a command identifier.
            */
          queryCommandIndeterm(commandId: string): boolean;
          /**
            * Returns a Boolean value that indicates the current state of the command.
            * @param commandId String that specifies a command identifier.
            */
          queryCommandState(commandId: string): boolean;
          /**
            * Returns a Boolean value that indicates whether the current command is supported on the current range.
            * @param commandId Specifies a command identifier.
            */
          queryCommandSupported(commandId: string): boolean;
          /**
            * Retrieves the string associated with a command.
            * @param commandId String that contains the identifier of a command. This can be any command identifier given in the list of Command Identifiers. 
            */
          queryCommandText(commandId: string): string;
          /**
            * Returns the current value of the document, range, or current selection for the given command.
            * @param commandId String that specifies a command identifier.
            */
          queryCommandValue(commandId: string): string;
          releaseEvents(): void;
          /**
            * Allows updating the print settings for the page.
            */
          updateSettings(): void;
          webkitCancelFullScreen(): void;
          webkitExitFullscreen(): void;
          /**
            * Writes one or more HTML expressions to a document in the specified window. 
            * @param content Specifies the text and HTML tags to write.
            */
          write(...content: string[]): void;
          /**
            * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window. 
            * @param content The text and HTML tags to write.
            */
          writeln(...content: string[]): void;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "fullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "fullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerlockchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerlockerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var Document: {
          prototype: Document;
          new(): Document;
      }
      
      interface DocumentFragment extends Node, NodeSelector {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var DocumentFragment: {
          prototype: DocumentFragment;
          new(): DocumentFragment;
      }
      
      interface DocumentType extends Node, ChildNode {
          entities: NamedNodeMap;
          internalSubset: string;
          name: string;
          notations: NamedNodeMap;
          publicId: string;
          systemId: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var DocumentType: {
          prototype: DocumentType;
          new(): DocumentType;
      }
      
      interface DragEvent extends MouseEvent {
          dataTransfer: DataTransfer;
          initDragEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, dataTransferArg: DataTransfer): void;
          msConvertURL(file: File, targetType: string, targetURL?: string): void;
      }
      
      declare var DragEvent: {
          prototype: DragEvent;
          new(): DragEvent;
      }
      
      interface DynamicsCompressorNode extends AudioNode {
          attack: AudioParam;
          knee: AudioParam;
          ratio: AudioParam;
          reduction: AudioParam;
          release: AudioParam;
          threshold: AudioParam;
      }
      
      declare var DynamicsCompressorNode: {
          prototype: DynamicsCompressorNode;
          new(): DynamicsCompressorNode;
      }
      
      interface EXT_texture_filter_anisotropic {
          MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
          TEXTURE_MAX_ANISOTROPY_EXT: number;
      }
      
      declare var EXT_texture_filter_anisotropic: {
          prototype: EXT_texture_filter_anisotropic;
          new(): EXT_texture_filter_anisotropic;
          MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
          TEXTURE_MAX_ANISOTROPY_EXT: number;
      }
      
      interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelector, ChildNode {
          classList: DOMTokenList;
          clientHeight: number;
          clientLeft: number;
          clientTop: number;
          clientWidth: number;
          msContentZoomFactor: number;
          msRegionOverflow: string;
          onariarequest: (ev: AriaRequestEvent) => any;
          oncommand: (ev: CommandEvent) => any;
          ongotpointercapture: (ev: PointerEvent) => any;
          onlostpointercapture: (ev: PointerEvent) => any;
          onmsgesturechange: (ev: MSGestureEvent) => any;
          onmsgesturedoubletap: (ev: MSGestureEvent) => any;
          onmsgestureend: (ev: MSGestureEvent) => any;
          onmsgesturehold: (ev: MSGestureEvent) => any;
          onmsgesturestart: (ev: MSGestureEvent) => any;
          onmsgesturetap: (ev: MSGestureEvent) => any;
          onmsgotpointercapture: (ev: MSPointerEvent) => any;
          onmsinertiastart: (ev: MSGestureEvent) => any;
          onmslostpointercapture: (ev: MSPointerEvent) => any;
          onmspointercancel: (ev: MSPointerEvent) => any;
          onmspointerdown: (ev: MSPointerEvent) => any;
          onmspointerenter: (ev: MSPointerEvent) => any;
          onmspointerleave: (ev: MSPointerEvent) => any;
          onmspointermove: (ev: MSPointerEvent) => any;
          onmspointerout: (ev: MSPointerEvent) => any;
          onmspointerover: (ev: MSPointerEvent) => any;
          onmspointerup: (ev: MSPointerEvent) => any;
          ontouchcancel: (ev: TouchEvent) => any;
          ontouchend: (ev: TouchEvent) => any;
          ontouchmove: (ev: TouchEvent) => any;
          ontouchstart: (ev: TouchEvent) => any;
          onwebkitfullscreenchange: (ev: Event) => any;
          onwebkitfullscreenerror: (ev: Event) => any;
          scrollHeight: number;
          scrollLeft: number;
          scrollTop: number;
          scrollWidth: number;
          tagName: string;
          getAttribute(name?: string): string;
          getAttributeNS(namespaceURI: string, localName: string): string;
          getAttributeNode(name: string): Attr;
          getAttributeNodeNS(namespaceURI: string, localName: string): Attr;
          getBoundingClientRect(): ClientRect;
          getClientRects(): ClientRectList;
          getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
          getElementsByTagName(name: "abbr"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "acronym"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "address"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: "applet"): NodeListOf<HTMLAppletElement>;
          getElementsByTagName(name: "area"): NodeListOf<HTMLAreaElement>;
          getElementsByTagName(name: "article"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "aside"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "audio"): NodeListOf<HTMLAudioElement>;
          getElementsByTagName(name: "b"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "base"): NodeListOf<HTMLBaseElement>;
          getElementsByTagName(name: "basefont"): NodeListOf<HTMLBaseFontElement>;
          getElementsByTagName(name: "bdo"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "big"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "blockquote"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
          getElementsByTagName(name: "br"): NodeListOf<HTMLBRElement>;
          getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
          getElementsByTagName(name: "canvas"): NodeListOf<HTMLCanvasElement>;
          getElementsByTagName(name: "caption"): NodeListOf<HTMLTableCaptionElement>;
          getElementsByTagName(name: "center"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: "circle"): NodeListOf<SVGCircleElement>;
          getElementsByTagName(name: "cite"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "clippath"): NodeListOf<SVGClipPathElement>;
          getElementsByTagName(name: "code"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "col"): NodeListOf<HTMLTableColElement>;
          getElementsByTagName(name: "colgroup"): NodeListOf<HTMLTableColElement>;
          getElementsByTagName(name: "datalist"): NodeListOf<HTMLDataListElement>;
          getElementsByTagName(name: "dd"): NodeListOf<HTMLDDElement>;
          getElementsByTagName(name: "defs"): NodeListOf<SVGDefsElement>;
          getElementsByTagName(name: "del"): NodeListOf<HTMLModElement>;
          getElementsByTagName(name: "desc"): NodeListOf<SVGDescElement>;
          getElementsByTagName(name: "dfn"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "dir"): NodeListOf<HTMLDirectoryElement>;
          getElementsByTagName(name: "div"): NodeListOf<HTMLDivElement>;
          getElementsByTagName(name: "dl"): NodeListOf<HTMLDListElement>;
          getElementsByTagName(name: "dt"): NodeListOf<HTMLDTElement>;
          getElementsByTagName(name: "ellipse"): NodeListOf<SVGEllipseElement>;
          getElementsByTagName(name: "em"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "embed"): NodeListOf<HTMLEmbedElement>;
          getElementsByTagName(name: "feblend"): NodeListOf<SVGFEBlendElement>;
          getElementsByTagName(name: "fecolormatrix"): NodeListOf<SVGFEColorMatrixElement>;
          getElementsByTagName(name: "fecomponenttransfer"): NodeListOf<SVGFEComponentTransferElement>;
          getElementsByTagName(name: "fecomposite"): NodeListOf<SVGFECompositeElement>;
          getElementsByTagName(name: "feconvolvematrix"): NodeListOf<SVGFEConvolveMatrixElement>;
          getElementsByTagName(name: "fediffuselighting"): NodeListOf<SVGFEDiffuseLightingElement>;
          getElementsByTagName(name: "fedisplacementmap"): NodeListOf<SVGFEDisplacementMapElement>;
          getElementsByTagName(name: "fedistantlight"): NodeListOf<SVGFEDistantLightElement>;
          getElementsByTagName(name: "feflood"): NodeListOf<SVGFEFloodElement>;
          getElementsByTagName(name: "fefunca"): NodeListOf<SVGFEFuncAElement>;
          getElementsByTagName(name: "fefuncb"): NodeListOf<SVGFEFuncBElement>;
          getElementsByTagName(name: "fefuncg"): NodeListOf<SVGFEFuncGElement>;
          getElementsByTagName(name: "fefuncr"): NodeListOf<SVGFEFuncRElement>;
          getElementsByTagName(name: "fegaussianblur"): NodeListOf<SVGFEGaussianBlurElement>;
          getElementsByTagName(name: "feimage"): NodeListOf<SVGFEImageElement>;
          getElementsByTagName(name: "femerge"): NodeListOf<SVGFEMergeElement>;
          getElementsByTagName(name: "femergenode"): NodeListOf<SVGFEMergeNodeElement>;
          getElementsByTagName(name: "femorphology"): NodeListOf<SVGFEMorphologyElement>;
          getElementsByTagName(name: "feoffset"): NodeListOf<SVGFEOffsetElement>;
          getElementsByTagName(name: "fepointlight"): NodeListOf<SVGFEPointLightElement>;
          getElementsByTagName(name: "fespecularlighting"): NodeListOf<SVGFESpecularLightingElement>;
          getElementsByTagName(name: "fespotlight"): NodeListOf<SVGFESpotLightElement>;
          getElementsByTagName(name: "fetile"): NodeListOf<SVGFETileElement>;
          getElementsByTagName(name: "feturbulence"): NodeListOf<SVGFETurbulenceElement>;
          getElementsByTagName(name: "fieldset"): NodeListOf<HTMLFieldSetElement>;
          getElementsByTagName(name: "figcaption"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "figure"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "filter"): NodeListOf<SVGFilterElement>;
          getElementsByTagName(name: "font"): NodeListOf<HTMLFontElement>;
          getElementsByTagName(name: "footer"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "foreignobject"): NodeListOf<SVGForeignObjectElement>;
          getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
          getElementsByTagName(name: "frame"): NodeListOf<HTMLFrameElement>;
          getElementsByTagName(name: "frameset"): NodeListOf<HTMLFrameSetElement>;
          getElementsByTagName(name: "g"): NodeListOf<SVGGElement>;
          getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(name: "h2"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(name: "h3"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(name: "h4"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(name: "h5"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(name: "h6"): NodeListOf<HTMLHeadingElement>;
          getElementsByTagName(name: "head"): NodeListOf<HTMLHeadElement>;
          getElementsByTagName(name: "header"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "hgroup"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "hr"): NodeListOf<HTMLHRElement>;
          getElementsByTagName(name: "html"): NodeListOf<HTMLHtmlElement>;
          getElementsByTagName(name: "i"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "iframe"): NodeListOf<HTMLIFrameElement>;
          getElementsByTagName(name: "image"): NodeListOf<SVGImageElement>;
          getElementsByTagName(name: "img"): NodeListOf<HTMLImageElement>;
          getElementsByTagName(name: "input"): NodeListOf<HTMLInputElement>;
          getElementsByTagName(name: "ins"): NodeListOf<HTMLModElement>;
          getElementsByTagName(name: "isindex"): NodeListOf<HTMLIsIndexElement>;
          getElementsByTagName(name: "kbd"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "keygen"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: "label"): NodeListOf<HTMLLabelElement>;
          getElementsByTagName(name: "legend"): NodeListOf<HTMLLegendElement>;
          getElementsByTagName(name: "li"): NodeListOf<HTMLLIElement>;
          getElementsByTagName(name: "line"): NodeListOf<SVGLineElement>;
          getElementsByTagName(name: "lineargradient"): NodeListOf<SVGLinearGradientElement>;
          getElementsByTagName(name: "link"): NodeListOf<HTMLLinkElement>;
          getElementsByTagName(name: "listing"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: "map"): NodeListOf<HTMLMapElement>;
          getElementsByTagName(name: "mark"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "marker"): NodeListOf<SVGMarkerElement>;
          getElementsByTagName(name: "marquee"): NodeListOf<HTMLMarqueeElement>;
          getElementsByTagName(name: "mask"): NodeListOf<SVGMaskElement>;
          getElementsByTagName(name: "menu"): NodeListOf<HTMLMenuElement>;
          getElementsByTagName(name: "meta"): NodeListOf<HTMLMetaElement>;
          getElementsByTagName(name: "metadata"): NodeListOf<SVGMetadataElement>;
          getElementsByTagName(name: "nav"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "nextid"): NodeListOf<HTMLNextIdElement>;
          getElementsByTagName(name: "nobr"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "noframes"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "noscript"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "object"): NodeListOf<HTMLObjectElement>;
          getElementsByTagName(name: "ol"): NodeListOf<HTMLOListElement>;
          getElementsByTagName(name: "optgroup"): NodeListOf<HTMLOptGroupElement>;
          getElementsByTagName(name: "option"): NodeListOf<HTMLOptionElement>;
          getElementsByTagName(name: "p"): NodeListOf<HTMLParagraphElement>;
          getElementsByTagName(name: "param"): NodeListOf<HTMLParamElement>;
          getElementsByTagName(name: "path"): NodeListOf<SVGPathElement>;
          getElementsByTagName(name: "pattern"): NodeListOf<SVGPatternElement>;
          getElementsByTagName(name: "plaintext"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: "polygon"): NodeListOf<SVGPolygonElement>;
          getElementsByTagName(name: "polyline"): NodeListOf<SVGPolylineElement>;
          getElementsByTagName(name: "pre"): NodeListOf<HTMLPreElement>;
          getElementsByTagName(name: "progress"): NodeListOf<HTMLProgressElement>;
          getElementsByTagName(name: "q"): NodeListOf<HTMLQuoteElement>;
          getElementsByTagName(name: "radialgradient"): NodeListOf<SVGRadialGradientElement>;
          getElementsByTagName(name: "rect"): NodeListOf<SVGRectElement>;
          getElementsByTagName(name: "rt"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "ruby"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "s"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "samp"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "script"): NodeListOf<HTMLScriptElement>;
          getElementsByTagName(name: "section"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "select"): NodeListOf<HTMLSelectElement>;
          getElementsByTagName(name: "small"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "source"): NodeListOf<HTMLSourceElement>;
          getElementsByTagName(name: "span"): NodeListOf<HTMLSpanElement>;
          getElementsByTagName(name: "stop"): NodeListOf<SVGStopElement>;
          getElementsByTagName(name: "strike"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "strong"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "style"): NodeListOf<HTMLStyleElement>;
          getElementsByTagName(name: "sub"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "sup"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "svg"): NodeListOf<SVGSVGElement>;
          getElementsByTagName(name: "switch"): NodeListOf<SVGSwitchElement>;
          getElementsByTagName(name: "symbol"): NodeListOf<SVGSymbolElement>;
          getElementsByTagName(name: "table"): NodeListOf<HTMLTableElement>;
          getElementsByTagName(name: "tbody"): NodeListOf<HTMLTableSectionElement>;
          getElementsByTagName(name: "td"): NodeListOf<HTMLTableDataCellElement>;
          getElementsByTagName(name: "text"): NodeListOf<SVGTextElement>;
          getElementsByTagName(name: "textpath"): NodeListOf<SVGTextPathElement>;
          getElementsByTagName(name: "textarea"): NodeListOf<HTMLTextAreaElement>;
          getElementsByTagName(name: "tfoot"): NodeListOf<HTMLTableSectionElement>;
          getElementsByTagName(name: "th"): NodeListOf<HTMLTableHeaderCellElement>;
          getElementsByTagName(name: "thead"): NodeListOf<HTMLTableSectionElement>;
          getElementsByTagName(name: "title"): NodeListOf<HTMLTitleElement>;
          getElementsByTagName(name: "tr"): NodeListOf<HTMLTableRowElement>;
          getElementsByTagName(name: "track"): NodeListOf<HTMLTrackElement>;
          getElementsByTagName(name: "tspan"): NodeListOf<SVGTSpanElement>;
          getElementsByTagName(name: "tt"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "u"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "ul"): NodeListOf<HTMLUListElement>;
          getElementsByTagName(name: "use"): NodeListOf<SVGUseElement>;
          getElementsByTagName(name: "var"): NodeListOf<HTMLPhraseElement>;
          getElementsByTagName(name: "video"): NodeListOf<HTMLVideoElement>;
          getElementsByTagName(name: "view"): NodeListOf<SVGViewElement>;
          getElementsByTagName(name: "wbr"): NodeListOf<HTMLElement>;
          getElementsByTagName(name: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
          getElementsByTagName(name: "xmp"): NodeListOf<HTMLBlockElement>;
          getElementsByTagName(name: string): NodeList;
          getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
          hasAttribute(name: string): boolean;
          hasAttributeNS(namespaceURI: string, localName: string): boolean;
          msGetRegionContent(): MSRangeCollection;
          msGetUntransformedBounds(): ClientRect;
          msMatchesSelector(selectors: string): boolean;
          msReleasePointerCapture(pointerId: number): void;
          msSetPointerCapture(pointerId: number): void;
          msZoomTo(args: MsZoomToOptions): void;
          releasePointerCapture(pointerId: number): void;
          removeAttribute(name?: string): void;
          removeAttributeNS(namespaceURI: string, localName: string): void;
          removeAttributeNode(oldAttr: Attr): Attr;
          requestFullscreen(): void;
          requestPointerLock(): void;
          setAttribute(name?: string, value?: string): void;
          setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void;
          setAttributeNode(newAttr: Attr): Attr;
          setAttributeNodeNS(newAttr: Attr): Attr;
          setPointerCapture(pointerId: number): void;
          webkitMatchesSelector(selectors: string): boolean;
          webkitRequestFullScreen(): void;
          webkitRequestFullscreen(): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var Element: {
          prototype: Element;
          new(): Element;
      }
      
      interface ErrorEvent extends Event {
          colno: number;
          error: any;
          filename: string;
          lineno: number;
          message: string;
          initErrorEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, messageArg: string, filenameArg: string, linenoArg: number): void;
      }
      
      declare var ErrorEvent: {
          prototype: ErrorEvent;
          new(): ErrorEvent;
      }
      
      interface Event {
          bubbles: boolean;
          cancelBubble: boolean;
          cancelable: boolean;
          currentTarget: EventTarget;
          defaultPrevented: boolean;
          eventPhase: number;
          isTrusted: boolean;
          returnValue: boolean;
          srcElement: Element;
          target: EventTarget;
          timeStamp: number;
          type: string;
          initEvent(eventTypeArg: string, canBubbleArg: boolean, cancelableArg: boolean): void;
          preventDefault(): void;
          stopImmediatePropagation(): void;
          stopPropagation(): void;
          AT_TARGET: number;
          BUBBLING_PHASE: number;
          CAPTURING_PHASE: number;
      }
      
      declare var Event: {
          prototype: Event;
          new(type: string, eventInitDict?: EventInit): Event;
          AT_TARGET: number;
          BUBBLING_PHASE: number;
          CAPTURING_PHASE: number;
      }
      
      interface EventTarget {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
          dispatchEvent(evt: Event): boolean;
          removeEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var EventTarget: {
          prototype: EventTarget;
          new(): EventTarget;
      }
      
      interface External {
      }
      
      declare var External: {
          prototype: External;
          new(): External;
      }
      
      interface File extends Blob {
          lastModifiedDate: any;
          name: string;
      }
      
      declare var File: {
          prototype: File;
          new(): File;
      }
      
      interface FileList {
          length: number;
          item(index: number): File;
          [index: number]: File;
      }
      
      declare var FileList: {
          prototype: FileList;
          new(): FileList;
      }
      
      interface FileReader extends EventTarget, MSBaseReader {
          error: DOMError;
          readAsArrayBuffer(blob: Blob): void;
          readAsBinaryString(blob: Blob): void;
          readAsDataURL(blob: Blob): void;
          readAsText(blob: Blob, encoding?: string): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var FileReader: {
          prototype: FileReader;
          new(): FileReader;
      }
      
      interface FocusEvent extends UIEvent {
          relatedTarget: EventTarget;
          initFocusEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, relatedTargetArg: EventTarget): void;
      }
      
      declare var FocusEvent: {
          prototype: FocusEvent;
          new(typeArg: string, eventInitDict?: FocusEventInit): FocusEvent;
      }
      
      interface FormData {
          append(name: any, value: any, blobName?: string): void;
      }
      
      declare var FormData: {
          prototype: FormData;
          new(): FormData;
      }
      
      interface GainNode extends AudioNode {
          gain: AudioParam;
      }
      
      declare var GainNode: {
          prototype: GainNode;
          new(): GainNode;
      }
      
      interface Gamepad {
          axes: number[];
          buttons: GamepadButton[];
          connected: boolean;
          id: string;
          index: number;
          mapping: string;
          timestamp: number;
      }
      
      declare var Gamepad: {
          prototype: Gamepad;
          new(): Gamepad;
      }
      
      interface GamepadButton {
          pressed: boolean;
          value: number;
      }
      
      declare var GamepadButton: {
          prototype: GamepadButton;
          new(): GamepadButton;
      }
      
      interface GamepadEvent extends Event {
          gamepad: Gamepad;
      }
      
      declare var GamepadEvent: {
          prototype: GamepadEvent;
          new(): GamepadEvent;
      }
      
      interface Geolocation {
          clearWatch(watchId: number): void;
          getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void;
          watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number;
      }
      
      declare var Geolocation: {
          prototype: Geolocation;
          new(): Geolocation;
      }
      
      interface HTMLAllCollection extends HTMLCollection {
          namedItem(name: string): Element;
      }
      
      declare var HTMLAllCollection: {
          prototype: HTMLAllCollection;
          new(): HTMLAllCollection;
      }
      
      interface HTMLAnchorElement extends HTMLElement {
          Methods: string;
          /**
            * Sets or retrieves the character set used to encode the object.
            */
          charset: string;
          /**
            * Sets or retrieves the coordinates of the object.
            */
          coords: string;
          /**
            * Contains the anchor portion of the URL including the hash sign (#).
            */
          hash: string;
          /**
            * Contains the hostname and port values of the URL.
            */
          host: string;
          /**
            * Contains the hostname of a URL.
            */
          hostname: string;
          /**
            * Sets or retrieves a destination URL or an anchor point.
            */
          href: string;
          /**
            * Sets or retrieves the language code of the object.
            */
          hreflang: string;
          mimeType: string;
          /**
            * Sets or retrieves the shape of the object.
            */
          name: string;
          nameProp: string;
          /**
            * Contains the pathname of the URL.
            */
          pathname: string;
          /**
            * Sets or retrieves the port number associated with a URL.
            */
          port: string;
          /**
            * Contains the protocol of the URL.
            */
          protocol: string;
          protocolLong: string;
          /**
            * Sets or retrieves the relationship between the object and the destination of the link.
            */
          rel: string;
          /**
            * Sets or retrieves the relationship between the object and the destination of the link.
            */
          rev: string;
          /**
            * Sets or retrieves the substring of the href property that follows the question mark.
            */
          search: string;
          /**
            * Sets or retrieves the shape of the object.
            */
          shape: string;
          /**
            * Sets or retrieves the window or frame at which to target content.
            */
          target: string;
          /**
            * Retrieves or sets the text of the object as a string. 
            */
          text: string;
          type: string;
          urn: string;
          /** 
            * Returns a string representation of an object.
            */
          toString(): string;
      }
      
      declare var HTMLAnchorElement: {
          prototype: HTMLAnchorElement;
          new(): HTMLAnchorElement;
      }
      
      interface HTMLAppletElement extends HTMLElement {
          /**
            * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
            */
          BaseHref: string;
          align: string;
          /**
            * Sets or retrieves a text alternative to the graphic.
            */
          alt: string;
          /**
            * Gets or sets the optional alternative HTML script to execute if the object fails to load.
            */
          altHtml: string;
          /**
            * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
            */
          archive: string;
          border: string;
          code: string;
          /**
            * Sets or retrieves the URL of the component.
            */
          codeBase: string;
          /**
            * Sets or retrieves the Internet media type for the code associated with the object.
            */
          codeType: string;
          /**
            * Address of a pointer to the document this page or frame contains. If there is no document, then null will be returned.
            */
          contentDocument: Document;
          /**
            * Sets or retrieves the URL that references the data of the object.
            */
          data: string;
          /**
            * Sets or retrieves a character string that can be used to implement your own declare functionality for the object.
            */
          declare: boolean;
          form: HTMLFormElement;
          /**
            * Sets or retrieves the height of the object.
            */
          height: string;
          hspace: number;
          /**
            * Sets or retrieves the shape of the object.
            */
          name: string;
          object: string;
          /**
            * Sets or retrieves a message to be displayed while an object is loading.
            */
          standby: string;
          /**
            * Returns the content type of the object.
            */
          type: string;
          /**
            * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
            */
          useMap: string;
          vspace: number;
          width: number;
      }
      
      declare var HTMLAppletElement: {
          prototype: HTMLAppletElement;
          new(): HTMLAppletElement;
      }
      
      interface HTMLAreaElement extends HTMLElement {
          /**
            * Sets or retrieves a text alternative to the graphic.
            */
          alt: string;
          /**
            * Sets or retrieves the coordinates of the object.
            */
          coords: string;
          /**
            * Sets or retrieves the subsection of the href property that follows the number sign (#).
            */
          hash: string;
          /**
            * Sets or retrieves the hostname and port number of the location or URL.
            */
          host: string;
          /**
            * Sets or retrieves the host name part of the location or URL. 
            */
          hostname: string;
          /**
            * Sets or retrieves a destination URL or an anchor point.
            */
          href: string;
          /**
            * Sets or gets whether clicks in this region cause action.
            */
          noHref: boolean;
          /**
            * Sets or retrieves the file name or path specified by the object.
            */
          pathname: string;
          /**
            * Sets or retrieves the port number associated with a URL.
            */
          port: string;
          /**
            * Sets or retrieves the protocol portion of a URL.
            */
          protocol: string;
          rel: string;
          /**
            * Sets or retrieves the substring of the href property that follows the question mark.
            */
          search: string;
          /**
            * Sets or retrieves the shape of the object.
            */
          shape: string;
          /**
            * Sets or retrieves the window or frame at which to target content.
            */
          target: string;
          /** 
            * Returns a string representation of an object.
            */
          toString(): string;
      }
      
      declare var HTMLAreaElement: {
          prototype: HTMLAreaElement;
          new(): HTMLAreaElement;
      }
      
      interface HTMLAreasCollection extends HTMLCollection {
          /**
            * Adds an element to the areas, controlRange, or options collection.
            */
          add(element: HTMLElement, before?: HTMLElement): void;
          add(element: HTMLElement, before?: number): void;
          /**
            * Removes an element from the collection.
            */
          remove(index?: number): void;
      }
      
      declare var HTMLAreasCollection: {
          prototype: HTMLAreasCollection;
          new(): HTMLAreasCollection;
      }
      
      interface HTMLAudioElement extends HTMLMediaElement {
      }
      
      declare var HTMLAudioElement: {
          prototype: HTMLAudioElement;
          new(): HTMLAudioElement;
      }
      
      interface HTMLBRElement extends HTMLElement {
          /**
            * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document.
            */
          clear: string;
      }
      
      declare var HTMLBRElement: {
          prototype: HTMLBRElement;
          new(): HTMLBRElement;
      }
      
      interface HTMLBaseElement extends HTMLElement {
          /**
            * Gets or sets the baseline URL on which relative links are based.
            */
          href: string;
          /**
            * Sets or retrieves the window or frame at which to target content.
            */
          target: string;
      }
      
      declare var HTMLBaseElement: {
          prototype: HTMLBaseElement;
          new(): HTMLBaseElement;
      }
      
      interface HTMLBaseFontElement extends HTMLElement, DOML2DeprecatedColorProperty {
          /**
            * Sets or retrieves the current typeface family.
            */
          face: string;
          /**
            * Sets or retrieves the font size of the object.
            */
          size: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLBaseFontElement: {
          prototype: HTMLBaseFontElement;
          new(): HTMLBaseFontElement;
      }
      
      interface HTMLBlockElement extends HTMLElement {
          /**
            * Sets or retrieves reference information about the object.
            */
          cite: string;
          clear: string;
          /**
            * Sets or retrieves the width of the object.
            */
          width: number;
      }
      
      declare var HTMLBlockElement: {
          prototype: HTMLBlockElement;
          new(): HTMLBlockElement;
      }
      
      interface HTMLBodyElement extends HTMLElement {
          aLink: any;
          background: string;
          bgColor: any;
          bgProperties: string;
          link: any;
          noWrap: boolean;
          onafterprint: (ev: Event) => any;
          onbeforeprint: (ev: Event) => any;
          onbeforeunload: (ev: BeforeUnloadEvent) => any;
          onblur: (ev: FocusEvent) => any;
          onerror: (ev: Event) => any;
          onfocus: (ev: FocusEvent) => any;
          onhashchange: (ev: HashChangeEvent) => any;
          onload: (ev: Event) => any;
          onmessage: (ev: MessageEvent) => any;
          onoffline: (ev: Event) => any;
          ononline: (ev: Event) => any;
          onorientationchange: (ev: Event) => any;
          onpagehide: (ev: PageTransitionEvent) => any;
          onpageshow: (ev: PageTransitionEvent) => any;
          onpopstate: (ev: PopStateEvent) => any;
          onresize: (ev: UIEvent) => any;
          onstorage: (ev: StorageEvent) => any;
          onunload: (ev: Event) => any;
          text: any;
          vLink: any;
          createTextRange(): TextRange;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLBodyElement: {
          prototype: HTMLBodyElement;
          new(): HTMLBodyElement;
      }
      
      interface HTMLButtonElement extends HTMLElement {
          /**
            * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
            */
          autofocus: boolean;
          disabled: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Overrides the action attribute (where the data on a form is sent) on the parent form element.
            */
          formAction: string;
          /**
            * Used to override the encoding (formEnctype attribute) specified on the form element.
            */
          formEnctype: string;
          /**
            * Overrides the submit method attribute previously specified on a form element.
            */
          formMethod: string;
          /**
            * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
            */
          formNoValidate: string;
          /**
            * Overrides the target attribute on a form element.
            */
          formTarget: string;
          /** 
            * Sets or retrieves the name of the object.
            */
          name: string;
          status: any;
          /**
            * Gets the classification and default behavior of the button.
            */
          type: string;
          /**
            * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
            */
          validationMessage: string;
          /**
            * Returns a  ValidityState object that represents the validity states of an element.
            */
          validity: ValidityState;
          /** 
            * Sets or retrieves the default or selected value of the control.
            */
          value: string;
          /**
            * Returns whether an element will successfully validate based on forms validation rules and constraints.
            */
          willValidate: boolean;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Creates a TextRange object for the element.
            */
          createTextRange(): TextRange;
          /**
            * Sets a custom error message that is displayed when a form is submitted.
            * @param error Sets a custom error message that is displayed when a form is submitted.
            */
          setCustomValidity(error: string): void;
      }
      
      declare var HTMLButtonElement: {
          prototype: HTMLButtonElement;
          new(): HTMLButtonElement;
      }
      
      interface HTMLCanvasElement extends HTMLElement {
          /**
            * Gets or sets the height of a canvas element on a document.
            */
          height: number;
          /**
            * Gets or sets the width of a canvas element on a document.
            */
          width: number;
          /**
            * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
            * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
            */
          getContext(contextId: "2d"): CanvasRenderingContext2D;
          getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
          getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext;
          /**
            * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
            */
          msToBlob(): Blob;
          /**
            * Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element.
            * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image.
            */
          toDataURL(type?: string, ...args: any[]): string;
      }
      
      declare var HTMLCanvasElement: {
          prototype: HTMLCanvasElement;
          new(): HTMLCanvasElement;
      }
      
      interface HTMLCollection {
          /**
            * Sets or retrieves the number of objects in a collection.
            */
          length: number;
          /**
            * Retrieves an object from various collections.
            */
          item(nameOrIndex?: any, optionalIndex?: any): Element;
          /**
            * Retrieves a select object or an object from an options collection.
            */
          namedItem(name: string): Element;
          [index: number]: Element;
      }
      
      declare var HTMLCollection: {
          prototype: HTMLCollection;
          new(): HTMLCollection;
      }
      
      interface HTMLDDElement extends HTMLElement {
          /**
            * Sets or retrieves whether the browser automatically performs wordwrap.
            */
          noWrap: boolean;
      }
      
      declare var HTMLDDElement: {
          prototype: HTMLDDElement;
          new(): HTMLDDElement;
      }
      
      interface HTMLDListElement extends HTMLElement {
          compact: boolean;
      }
      
      declare var HTMLDListElement: {
          prototype: HTMLDListElement;
          new(): HTMLDListElement;
      }
      
      interface HTMLDTElement extends HTMLElement {
          /**
            * Sets or retrieves whether the browser automatically performs wordwrap.
            */
          noWrap: boolean;
      }
      
      declare var HTMLDTElement: {
          prototype: HTMLDTElement;
          new(): HTMLDTElement;
      }
      
      interface HTMLDataListElement extends HTMLElement {
          options: HTMLCollection;
      }
      
      declare var HTMLDataListElement: {
          prototype: HTMLDataListElement;
          new(): HTMLDataListElement;
      }
      
      interface HTMLDirectoryElement extends HTMLElement {
          compact: boolean;
      }
      
      declare var HTMLDirectoryElement: {
          prototype: HTMLDirectoryElement;
          new(): HTMLDirectoryElement;
      }
      
      interface HTMLDivElement extends HTMLElement {
          /**
            * Sets or retrieves how the object is aligned with adjacent text. 
            */
          align: string;
          /**
            * Sets or retrieves whether the browser automatically performs wordwrap.
            */
          noWrap: boolean;
      }
      
      declare var HTMLDivElement: {
          prototype: HTMLDivElement;
          new(): HTMLDivElement;
      }
      
      interface HTMLDocument extends Document {
      }
      
      declare var HTMLDocument: {
          prototype: HTMLDocument;
          new(): HTMLDocument;
      }
      
      interface HTMLElement extends Element {
          accessKey: string;
          children: HTMLCollection;
          className: string;
          contentEditable: string;
          dataset: DOMStringMap;
          dir: string;
          draggable: boolean;
          hidden: boolean;
          hideFocus: boolean;
          id: string;
          innerHTML: string;
          innerText: string;
          isContentEditable: boolean;
          lang: string;
          offsetHeight: number;
          offsetLeft: number;
          offsetParent: Element;
          offsetTop: number;
          offsetWidth: number;
          onabort: (ev: Event) => any;
          onactivate: (ev: UIEvent) => any;
          onbeforeactivate: (ev: UIEvent) => any;
          onbeforecopy: (ev: DragEvent) => any;
          onbeforecut: (ev: DragEvent) => any;
          onbeforedeactivate: (ev: UIEvent) => any;
          onbeforepaste: (ev: DragEvent) => any;
          onblur: (ev: FocusEvent) => any;
          oncanplay: (ev: Event) => any;
          oncanplaythrough: (ev: Event) => any;
          onchange: (ev: Event) => any;
          onclick: (ev: MouseEvent) => any;
          oncontextmenu: (ev: PointerEvent) => any;
          oncopy: (ev: DragEvent) => any;
          oncuechange: (ev: Event) => any;
          oncut: (ev: DragEvent) => any;
          ondblclick: (ev: MouseEvent) => any;
          ondeactivate: (ev: UIEvent) => any;
          ondrag: (ev: DragEvent) => any;
          ondragend: (ev: DragEvent) => any;
          ondragenter: (ev: DragEvent) => any;
          ondragleave: (ev: DragEvent) => any;
          ondragover: (ev: DragEvent) => any;
          ondragstart: (ev: DragEvent) => any;
          ondrop: (ev: DragEvent) => any;
          ondurationchange: (ev: Event) => any;
          onemptied: (ev: Event) => any;
          onended: (ev: Event) => any;
          onerror: (ev: Event) => any;
          onfocus: (ev: FocusEvent) => any;
          oninput: (ev: Event) => any;
          onkeydown: (ev: KeyboardEvent) => any;
          onkeypress: (ev: KeyboardEvent) => any;
          onkeyup: (ev: KeyboardEvent) => any;
          onload: (ev: Event) => any;
          onloadeddata: (ev: Event) => any;
          onloadedmetadata: (ev: Event) => any;
          onloadstart: (ev: Event) => any;
          onmousedown: (ev: MouseEvent) => any;
          onmouseenter: (ev: MouseEvent) => any;
          onmouseleave: (ev: MouseEvent) => any;
          onmousemove: (ev: MouseEvent) => any;
          onmouseout: (ev: MouseEvent) => any;
          onmouseover: (ev: MouseEvent) => any;
          onmouseup: (ev: MouseEvent) => any;
          onmousewheel: (ev: MouseWheelEvent) => any;
          onmscontentzoom: (ev: UIEvent) => any;
          onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any;
          onpaste: (ev: DragEvent) => any;
          onpause: (ev: Event) => any;
          onplay: (ev: Event) => any;
          onplaying: (ev: Event) => any;
          onprogress: (ev: ProgressEvent) => any;
          onratechange: (ev: Event) => any;
          onreset: (ev: Event) => any;
          onscroll: (ev: UIEvent) => any;
          onseeked: (ev: Event) => any;
          onseeking: (ev: Event) => any;
          onselect: (ev: UIEvent) => any;
          onselectstart: (ev: Event) => any;
          onstalled: (ev: Event) => any;
          onsubmit: (ev: Event) => any;
          onsuspend: (ev: Event) => any;
          ontimeupdate: (ev: Event) => any;
          onvolumechange: (ev: Event) => any;
          onwaiting: (ev: Event) => any;
          outerHTML: string;
          outerText: string;
          spellcheck: boolean;
          style: CSSStyleDeclaration;
          tabIndex: number;
          title: string;
          blur(): void;
          click(): void;
          contains(child: HTMLElement): boolean;
          dragDrop(): boolean;
          focus(): void;
          getElementsByClassName(classNames: string): NodeList;
          insertAdjacentElement(position: string, insertedElement: Element): Element;
          insertAdjacentHTML(where: string, html: string): void;
          insertAdjacentText(where: string, text: string): void;
          msGetInputContext(): MSInputMethodContext;
          scrollIntoView(top?: boolean): void;
          setActive(): void;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLElement: {
          prototype: HTMLElement;
          new(): HTMLElement;
      }
      
      interface HTMLEmbedElement extends HTMLElement, GetSVGDocument {
          /**
            * Sets or retrieves the height of the object.
            */
          height: string;
          hidden: any;
          /**
            * Gets or sets whether the DLNA PlayTo device is available.
            */
          msPlayToDisabled: boolean;
          /**
            * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
            */
          msPlayToPreferredSourceUri: string;
          /**
            * Gets or sets the primary DLNA PlayTo device.
            */
          msPlayToPrimary: boolean;
          /**
            * Gets the source associated with the media element for use by the PlayToManager.
            */
          msPlayToSource: any;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          /**
            * Retrieves the palette used for the embedded document.
            */
          palette: string;
          /**
            * Retrieves the URL of the plug-in used to view an embedded document.
            */
          pluginspage: string;
          readyState: string;
          /**
            * Sets or retrieves a URL to be loaded by the object.
            */
          src: string;
          /**
            * Sets or retrieves the height and width units of the embed object.
            */
          units: string;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLEmbedElement: {
          prototype: HTMLEmbedElement;
          new(): HTMLEmbedElement;
      }
      
      interface HTMLFieldSetElement extends HTMLElement {
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          disabled: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
            */
          validationMessage: string;
          /**
            * Returns a  ValidityState object that represents the validity states of an element.
            */
          validity: ValidityState;
          /**
            * Returns whether an element will successfully validate based on forms validation rules and constraints.
            */
          willValidate: boolean;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Sets a custom error message that is displayed when a form is submitted.
            * @param error Sets a custom error message that is displayed when a form is submitted.
            */
          setCustomValidity(error: string): void;
      }
      
      declare var HTMLFieldSetElement: {
          prototype: HTMLFieldSetElement;
          new(): HTMLFieldSetElement;
      }
      
      interface HTMLFontElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
          /**
            * Sets or retrieves the current typeface family.
            */
          face: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLFontElement: {
          prototype: HTMLFontElement;
          new(): HTMLFontElement;
      }
      
      interface HTMLFormElement extends HTMLElement {
          /**
            * Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form.
            */
          acceptCharset: string;
          /**
            * Sets or retrieves the URL to which the form content is sent for processing.
            */
          action: string;
          /**
            * Specifies whether autocomplete is applied to an editable text field.
            */
          autocomplete: string;
          /**
            * Retrieves a collection, in source order, of all controls in a given form.
            */
          elements: HTMLCollection;
          /**
            * Sets or retrieves the MIME encoding for the form.
            */
          encoding: string;
          /**
            * Sets or retrieves the encoding type for the form.
            */
          enctype: string;
          /**
            * Sets or retrieves the number of objects in a collection.
            */
          length: number;
          /**
            * Sets or retrieves how to send the form data to the server.
            */
          method: string;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          /**
            * Designates a form that is not validated when submitted.
            */
          noValidate: boolean;
          /**
            * Sets or retrieves the window or frame at which to target content.
            */
          target: string;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Retrieves a form object or an object from an elements collection.
            * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is a Number, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
            * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
            */
          item(name?: any, index?: any): any;
          /**
            * Retrieves a form object or an object from an elements collection.
            */
          namedItem(name: string): any;
          /**
            * Fires when the user resets a form.
            */
          reset(): void;
          /**
            * Fires when a FORM is about to be submitted.
            */
          submit(): void;
          [name: string]: any;
      }
      
      declare var HTMLFormElement: {
          prototype: HTMLFormElement;
          new(): HTMLFormElement;
      }
      
      interface HTMLFrameElement extends HTMLElement, GetSVGDocument {
          /**
            * Specifies the properties of a border drawn around an object.
            */
          border: string;
          /**
            * Sets or retrieves the border color of the object.
            */
          borderColor: any;
          /**
            * Retrieves the document object of the page or frame.
            */
          contentDocument: Document;
          /**
            * Retrieves the object of the specified.
            */
          contentWindow: Window;
          /**
            * Sets or retrieves whether to display a border for the frame.
            */
          frameBorder: string;
          /**
            * Sets or retrieves the amount of additional space between the frames.
            */
          frameSpacing: any;
          /**
            * Sets or retrieves the height of the object.
            */
          height: string | number;
          /**
            * Sets or retrieves a URI to a long description of the object.
            */
          longDesc: string;
          /**
            * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
            */
          marginHeight: string;
          /**
            * Sets or retrieves the left and right margin widths before displaying the text in a frame.
            */
          marginWidth: string;
          /**
            * Sets or retrieves the frame name.
            */
          name: string;
          /**
            * Sets or retrieves whether the user can resize the frame.
            */
          noResize: boolean;
          /**
            * Raised when the object has been completely received from the server.
            */
          onload: (ev: Event) => any;
          /**
            * Sets or retrieves whether the frame can be scrolled.
            */
          scrolling: string;
          /**
            * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
            */
          security: any;
          /**
            * Sets or retrieves a URL to be loaded by the object.
            */
          src: string;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string | number;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLFrameElement: {
          prototype: HTMLFrameElement;
          new(): HTMLFrameElement;
      }
      
      interface HTMLFrameSetElement extends HTMLElement {
          border: string;
          /**
            * Sets or retrieves the border color of the object.
            */
          borderColor: any;
          /**
            * Sets or retrieves the frame widths of the object.
            */
          cols: string;
          /**
            * Sets or retrieves whether to display a border for the frame.
            */
          frameBorder: string;
          /**
            * Sets or retrieves the amount of additional space between the frames.
            */
          frameSpacing: any;
          name: string;
          onafterprint: (ev: Event) => any;
          onbeforeprint: (ev: Event) => any;
          onbeforeunload: (ev: BeforeUnloadEvent) => any;
          /**
            * Fires when the object loses the input focus.
            */
          onblur: (ev: FocusEvent) => any;
          onerror: (ev: Event) => any;
          /**
            * Fires when the object receives focus.
            */
          onfocus: (ev: FocusEvent) => any;
          onhashchange: (ev: HashChangeEvent) => any;
          onload: (ev: Event) => any;
          onmessage: (ev: MessageEvent) => any;
          onoffline: (ev: Event) => any;
          ononline: (ev: Event) => any;
          onorientationchange: (ev: Event) => any;
          onpagehide: (ev: PageTransitionEvent) => any;
          onpageshow: (ev: PageTransitionEvent) => any;
          onresize: (ev: UIEvent) => any;
          onstorage: (ev: StorageEvent) => any;
          onunload: (ev: Event) => any;
          /**
            * Sets or retrieves the frame heights of the object.
            */
          rows: string;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLFrameSetElement: {
          prototype: HTMLFrameSetElement;
          new(): HTMLFrameSetElement;
      }
      
      interface HTMLHRElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          /**
            * Sets or retrieves whether the horizontal rule is drawn with 3-D shading.
            */
          noShade: boolean;
          /**
            * Sets or retrieves the width of the object.
            */
          width: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLHRElement: {
          prototype: HTMLHRElement;
          new(): HTMLHRElement;
      }
      
      interface HTMLHeadElement extends HTMLElement {
          profile: string;
      }
      
      declare var HTMLHeadElement: {
          prototype: HTMLHeadElement;
          new(): HTMLHeadElement;
      }
      
      interface HTMLHeadingElement extends HTMLElement {
          /**
            * Sets or retrieves a value that indicates the table alignment.
            */
          align: string;
          clear: string;
      }
      
      declare var HTMLHeadingElement: {
          prototype: HTMLHeadingElement;
          new(): HTMLHeadingElement;
      }
      
      interface HTMLHtmlElement extends HTMLElement {
          /**
            * Sets or retrieves the DTD version that governs the current document.
            */
          version: string;
      }
      
      declare var HTMLHtmlElement: {
          prototype: HTMLHtmlElement;
          new(): HTMLHtmlElement;
      }
      
      interface HTMLIFrameElement extends HTMLElement, GetSVGDocument {
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          allowFullscreen: boolean;
          /**
            * Specifies the properties of a border drawn around an object.
            */
          border: string;
          /**
            * Retrieves the document object of the page or frame.
            */
          contentDocument: Document;
          /**
            * Retrieves the object of the specified.
            */
          contentWindow: Window;
          /**
            * Sets or retrieves whether to display a border for the frame.
            */
          frameBorder: string;
          /**
            * Sets or retrieves the amount of additional space between the frames.
            */
          frameSpacing: any;
          /**
            * Sets or retrieves the height of the object.
            */
          height: string;
          /**
            * Sets or retrieves the horizontal margin for the object.
            */
          hspace: number;
          /**
            * Sets or retrieves a URI to a long description of the object.
            */
          longDesc: string;
          /**
            * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
            */
          marginHeight: string;
          /**
            * Sets or retrieves the left and right margin widths before displaying the text in a frame.
            */
          marginWidth: string;
          /**
            * Sets or retrieves the frame name.
            */
          name: string;
          /**
            * Sets or retrieves whether the user can resize the frame.
            */
          noResize: boolean;
          /**
            * Raised when the object has been completely received from the server.
            */
          onload: (ev: Event) => any;
          sandbox: DOMSettableTokenList;
          /**
            * Sets or retrieves whether the frame can be scrolled.
            */
          scrolling: string;
          /**
            * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
            */
          security: any;
          /**
            * Sets or retrieves a URL to be loaded by the object.
            */
          src: string;
          /**
            * Sets or retrieves the vertical margin for the object.
            */
          vspace: number;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLIFrameElement: {
          prototype: HTMLIFrameElement;
          new(): HTMLIFrameElement;
      }
      
      interface HTMLImageElement extends HTMLElement {
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          /**
            * Sets or retrieves a text alternative to the graphic.
            */
          alt: string;
          /**
            * Specifies the properties of a border drawn around an object.
            */
          border: string;
          /**
            * Retrieves whether the object is fully loaded.
            */
          complete: boolean;
          crossOrigin: string;
          currentSrc: string;
          /**
            * Sets or retrieves the height of the object.
            */
          height: number;
          /**
            * Sets or retrieves the width of the border to draw around the object.
            */
          hspace: number;
          /**
            * Sets or retrieves whether the image is a server-side image map.
            */
          isMap: boolean;
          /**
            * Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object.
            */
          longDesc: string;
          /**
            * Gets or sets whether the DLNA PlayTo device is available.
            */
          msPlayToDisabled: boolean;
          msPlayToPreferredSourceUri: string;
          /**
            * Gets or sets the primary DLNA PlayTo device.
            */
          msPlayToPrimary: boolean;
          /**
            * Gets the source associated with the media element for use by the PlayToManager.
            */
          msPlayToSource: any;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          /**
            * The original height of the image resource before sizing.
            */
          naturalHeight: number;
          /**
            * The original width of the image resource before sizing.
            */
          naturalWidth: number;
          /**
            * The address or URL of the a media resource that is to be considered.
            */
          src: string;
          srcset: string;
          /**
            * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
            */
          useMap: string;
          /**
            * Sets or retrieves the vertical margin for the object.
            */
          vspace: number;
          /**
            * Sets or retrieves the width of the object.
            */
          width: number;
          x: number;
          y: number;
          msGetAsCastingSource(): any;
      }
      
      declare var HTMLImageElement: {
          prototype: HTMLImageElement;
          new(): HTMLImageElement;
          create(): HTMLImageElement;
      }
      
      interface HTMLInputElement extends HTMLElement {
          /**
            * Sets or retrieves a comma-separated list of content types.
            */
          accept: string;
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          /**
            * Sets or retrieves a text alternative to the graphic.
            */
          alt: string;
          /**
            * Specifies whether autocomplete is applied to an editable text field.
            */
          autocomplete: string;
          /**
            * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
            */
          autofocus: boolean;
          /**
            * Sets or retrieves the width of the border to draw around the object.
            */
          border: string;
          /**
            * Sets or retrieves the state of the check box or radio button.
            */
          checked: boolean;
          /**
            * Retrieves whether the object is fully loaded.
            */
          complete: boolean;
          /**
            * Sets or retrieves the state of the check box or radio button.
            */
          defaultChecked: boolean;
          /**
            * Sets or retrieves the initial contents of the object.
            */
          defaultValue: string;
          disabled: boolean;
          /**
            * Returns a FileList object on a file type input object.
            */
          files: FileList;
          /**
            * Retrieves a reference to the form that the object is embedded in. 
            */
          form: HTMLFormElement;
          /**
            * Overrides the action attribute (where the data on a form is sent) on the parent form element.
            */
          formAction: string;
          /**
            * Used to override the encoding (formEnctype attribute) specified on the form element.
            */
          formEnctype: string;
          /**
            * Overrides the submit method attribute previously specified on a form element.
            */
          formMethod: string;
          /**
            * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
            */
          formNoValidate: string;
          /**
            * Overrides the target attribute on a form element.
            */
          formTarget: string;
          /**
            * Sets or retrieves the height of the object.
            */
          height: string;
          /**
            * Sets or retrieves the width of the border to draw around the object.
            */
          hspace: number;
          indeterminate: boolean;
          /**
            * Specifies the ID of a pre-defined datalist of options for an input element.
            */
          list: HTMLElement;
          /**
            * Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field.
            */
          max: string;
          /**
            * Sets or retrieves the maximum number of characters that the user can enter in a text control.
            */
          maxLength: number;
          /**
            * Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field.
            */
          min: string;
          /**
            * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
            */
          multiple: boolean;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          /**
            * Gets or sets a string containing a regular expression that the user's input must match.
            */
          pattern: string;
          /**
            * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
            */
          placeholder: string;
          readOnly: boolean;
          /**
            * When present, marks an element that can't be submitted without a value.
            */
          required: boolean;
          /**
            * Gets or sets the end position or offset of a text selection.
            */
          selectionEnd: number;
          /**
            * Gets or sets the starting position or offset of a text selection.
            */
          selectionStart: number;
          size: number;
          /**
            * The address or URL of the a media resource that is to be considered.
            */
          src: string;
          status: boolean;
          /**
            * Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field.
            */
          step: string;
          /**
            * Returns the content type of the object.
            */
          type: string;
          /**
            * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
            */
          useMap: string;
          /**
            * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
            */
          validationMessage: string;
          /**
            * Returns a  ValidityState object that represents the validity states of an element.
            */
          validity: ValidityState;
          /**
            * Returns the value of the data at the cursor's current position.
            */
          value: string;
          valueAsDate: Date;
          /**
            * Returns the input field value as a number.
            */
          valueAsNumber: number;
          /**
            * Sets or retrieves the vertical margin for the object.
            */
          vspace: number;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string;
          /**
            * Returns whether an element will successfully validate based on forms validation rules and constraints.
            */
          willValidate: boolean;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Creates a TextRange object for the element.
            */
          createTextRange(): TextRange;
          /**
            * Makes the selection equal to the current object.
            */
          select(): void;
          /**
            * Sets a custom error message that is displayed when a form is submitted.
            * @param error Sets a custom error message that is displayed when a form is submitted.
            */
          setCustomValidity(error: string): void;
          /**
            * Sets the start and end positions of a selection in a text field.
            * @param start The offset into the text field for the start of the selection.
            * @param end The offset into the text field for the end of the selection.
            */
          setSelectionRange(start: number, end: number): void;
          /**
            * Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value.
            * @param n Value to decrement the value by.
            */
          stepDown(n?: number): void;
          /**
            * Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value.
            * @param n Value to increment the value by.
            */
          stepUp(n?: number): void;
      }
      
      declare var HTMLInputElement: {
          prototype: HTMLInputElement;
          new(): HTMLInputElement;
      }
      
      interface HTMLIsIndexElement extends HTMLElement {
          /**
            * Sets or retrieves the URL to which the form content is sent for processing.
            */
          action: string;
          /**
            * Retrieves a reference to the form that the object is embedded in. 
            */
          form: HTMLFormElement;
          prompt: string;
      }
      
      declare var HTMLIsIndexElement: {
          prototype: HTMLIsIndexElement;
          new(): HTMLIsIndexElement;
      }
      
      interface HTMLLIElement extends HTMLElement {
          type: string;
          /**
            * Sets or retrieves the value of a list item.
            */
          value: number;
      }
      
      declare var HTMLLIElement: {
          prototype: HTMLLIElement;
          new(): HTMLLIElement;
      }
      
      interface HTMLLabelElement extends HTMLElement {
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Sets or retrieves the object to which the given label object is assigned.
            */
          htmlFor: string;
      }
      
      declare var HTMLLabelElement: {
          prototype: HTMLLabelElement;
          new(): HTMLLabelElement;
      }
      
      interface HTMLLegendElement extends HTMLElement {
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          align: string;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
      }
      
      declare var HTMLLegendElement: {
          prototype: HTMLLegendElement;
          new(): HTMLLegendElement;
      }
      
      interface HTMLLinkElement extends HTMLElement, LinkStyle {
          /**
            * Sets or retrieves the character set used to encode the object.
            */
          charset: string;
          disabled: boolean;
          /**
            * Sets or retrieves a destination URL or an anchor point.
            */
          href: string;
          /**
            * Sets or retrieves the language code of the object.
            */
          hreflang: string;
          /**
            * Sets or retrieves the media type.
            */
          media: string;
          /**
            * Sets or retrieves the relationship between the object and the destination of the link.
            */
          rel: string;
          /**
            * Sets or retrieves the relationship between the object and the destination of the link.
            */
          rev: string;
          /**
            * Sets or retrieves the window or frame at which to target content.
            */
          target: string;
          /**
            * Sets or retrieves the MIME type of the object.
            */
          type: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLLinkElement: {
          prototype: HTMLLinkElement;
          new(): HTMLLinkElement;
      }
      
      interface HTMLMapElement extends HTMLElement {
          /**
            * Retrieves a collection of the area objects defined for the given map object.
            */
          areas: HTMLAreasCollection;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
      }
      
      declare var HTMLMapElement: {
          prototype: HTMLMapElement;
          new(): HTMLMapElement;
      }
      
      interface HTMLMarqueeElement extends HTMLElement {
          behavior: string;
          bgColor: any;
          direction: string;
          height: string;
          hspace: number;
          loop: number;
          onbounce: (ev: Event) => any;
          onfinish: (ev: Event) => any;
          onstart: (ev: Event) => any;
          scrollAmount: number;
          scrollDelay: number;
          trueSpeed: boolean;
          vspace: number;
          width: string;
          start(): void;
          stop(): void;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLMarqueeElement: {
          prototype: HTMLMarqueeElement;
          new(): HTMLMarqueeElement;
      }
      
      interface HTMLMediaElement extends HTMLElement {
          /**
            * Returns an AudioTrackList object with the audio tracks for a given video element.
            */
          audioTracks: AudioTrackList;
          /**
            * Gets or sets a value that indicates whether to start playing the media automatically.
            */
          autoplay: boolean;
          /**
            * Gets a collection of buffered time ranges.
            */
          buffered: TimeRanges;
          /**
            * Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player).
            */
          controls: boolean;
          /**
            * Gets the address or URL of the current media resource that is selected by IHTMLMediaElement.
            */
          currentSrc: string;
          /**
            * Gets or sets the current playback position, in seconds.
            */
          currentTime: number;
          defaultMuted: boolean;
          /**
            * Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource.
            */
          defaultPlaybackRate: number;
          /**
            * Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming.
            */
          duration: number;
          /**
            * Gets information about whether the playback has ended or not.
            */
          ended: boolean;
          /**
            * Returns an object representing the current error state of the audio or video element.
            */
          error: MediaError;
          /**
            * Gets or sets a flag to specify whether playback should restart after it completes.
            */
          loop: boolean;
          /**
            * Specifies the purpose of the audio or video media, such as background audio or alerts.
            */
          msAudioCategory: string;
          /**
            * Specifies the output device id that the audio will be sent to.
            */
          msAudioDeviceType: string;
          msGraphicsTrustStatus: MSGraphicsTrust;
          /**
            * Gets the MSMediaKeys object, which is used for decrypting media data, that is associated with this media element.
            */
          msKeys: MSMediaKeys;
          /**
            * Gets or sets whether the DLNA PlayTo device is available.
            */
          msPlayToDisabled: boolean;
          /**
            * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
            */
          msPlayToPreferredSourceUri: string;
          /**
            * Gets or sets the primary DLNA PlayTo device.
            */
          msPlayToPrimary: boolean;
          /**
            * Gets the source associated with the media element for use by the PlayToManager.
            */
          msPlayToSource: any;
          /**
            * Specifies whether or not to enable low-latency playback on the media element.
            */
          msRealTime: boolean;
          /**
            * Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted.
            */
          muted: boolean;
          /**
            * Gets the current network activity for the element.
            */
          networkState: number;
          onmsneedkey: (ev: MSMediaKeyNeededEvent) => any;
          /**
            * Gets a flag that specifies whether playback is paused.
            */
          paused: boolean;
          /**
            * Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource.
            */
          playbackRate: number;
          /**
            * Gets TimeRanges for the current media resource that has been played.
            */
          played: TimeRanges;
          /**
            * Gets or sets the current playback position, in seconds.
            */
          preload: string;
          readyState: any;
          /**
            * Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked.
            */
          seekable: TimeRanges;
          /**
            * Gets a flag that indicates whether the the client is currently moving to a new playback position in the media resource.
            */
          seeking: boolean;
          /**
            * The address or URL of the a media resource that is to be considered.
            */
          src: string;
          textTracks: TextTrackList;
          videoTracks: VideoTrackList;
          /**
            * Gets or sets the volume level for audio portions of the media element.
            */
          volume: number;
          addTextTrack(kind: string, label?: string, language?: string): TextTrack;
          /**
            * Returns a string that specifies whether the client can play a given media resource type.
            */
          canPlayType(type: string): string;
          /**
            * Fires immediately after the client loads the object.
            */
          load(): void;
          /**
            * Clears all effects from the media pipeline.
            */
          msClearEffects(): void;
          msGetAsCastingSource(): any;
          /**
            * Inserts the specified audio effect into media pipeline.
            */
          msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
          msSetMediaKeys(mediaKeys: MSMediaKeys): void;
          /**
            * Specifies the media protection manager for a given media pipeline.
            */
          msSetMediaProtectionManager(mediaProtectionManager?: any): void;
          /**
            * Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not.
            */
          pause(): void;
          /**
            * Loads and starts playback of a media resource.
            */
          play(): void;
          HAVE_CURRENT_DATA: number;
          HAVE_ENOUGH_DATA: number;
          HAVE_FUTURE_DATA: number;
          HAVE_METADATA: number;
          HAVE_NOTHING: number;
          NETWORK_EMPTY: number;
          NETWORK_IDLE: number;
          NETWORK_LOADING: number;
          NETWORK_NO_SOURCE: number;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLMediaElement: {
          prototype: HTMLMediaElement;
          new(): HTMLMediaElement;
          HAVE_CURRENT_DATA: number;
          HAVE_ENOUGH_DATA: number;
          HAVE_FUTURE_DATA: number;
          HAVE_METADATA: number;
          HAVE_NOTHING: number;
          NETWORK_EMPTY: number;
          NETWORK_IDLE: number;
          NETWORK_LOADING: number;
          NETWORK_NO_SOURCE: number;
      }
      
      interface HTMLMenuElement extends HTMLElement {
          compact: boolean;
          type: string;
      }
      
      declare var HTMLMenuElement: {
          prototype: HTMLMenuElement;
          new(): HTMLMenuElement;
      }
      
      interface HTMLMetaElement extends HTMLElement {
          /**
            * Sets or retrieves the character set used to encode the object.
            */
          charset: string;
          /**
            * Gets or sets meta-information to associate with httpEquiv or name.
            */
          content: string;
          /**
            * Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header.
            */
          httpEquiv: string;
          /**
            * Sets or retrieves the value specified in the content attribute of the meta object.
            */
          name: string;
          /**
            * Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object.
            */
          scheme: string;
          /**
            * Sets or retrieves the URL property that will be loaded after the specified time has elapsed. 
            */
          url: string;
      }
      
      declare var HTMLMetaElement: {
          prototype: HTMLMetaElement;
          new(): HTMLMetaElement;
      }
      
      interface HTMLModElement extends HTMLElement {
          /**
            * Sets or retrieves reference information about the object.
            */
          cite: string;
          /**
            * Sets or retrieves the date and time of a modification to the object.
            */
          dateTime: string;
      }
      
      declare var HTMLModElement: {
          prototype: HTMLModElement;
          new(): HTMLModElement;
      }
      
      interface HTMLNextIdElement extends HTMLElement {
          n: string;
      }
      
      declare var HTMLNextIdElement: {
          prototype: HTMLNextIdElement;
          new(): HTMLNextIdElement;
      }
      
      interface HTMLOListElement extends HTMLElement {
          compact: boolean;
          /**
            * The starting number.
            */
          start: number;
          type: string;
      }
      
      declare var HTMLOListElement: {
          prototype: HTMLOListElement;
          new(): HTMLOListElement;
      }
      
      interface HTMLObjectElement extends HTMLElement, GetSVGDocument {
          /**
            * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
            */
          BaseHref: string;
          align: string;
          /**
            * Sets or retrieves a text alternative to the graphic.
            */
          alt: string;
          /**
            * Gets or sets the optional alternative HTML script to execute if the object fails to load.
            */
          altHtml: string;
          /**
            * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
            */
          archive: string;
          border: string;
          /**
            * Sets or retrieves the URL of the file containing the compiled Java class.
            */
          code: string;
          /**
            * Sets or retrieves the URL of the component.
            */
          codeBase: string;
          /**
            * Sets or retrieves the Internet media type for the code associated with the object.
            */
          codeType: string;
          /**
            * Retrieves the document object of the page or frame.
            */
          contentDocument: Document;
          /**
            * Sets or retrieves the URL that references the data of the object.
            */
          data: string;
          declare: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Sets or retrieves the height of the object.
            */
          height: string;
          hspace: number;
          /**
            * Gets or sets whether the DLNA PlayTo device is available.
            */
          msPlayToDisabled: boolean;
          /**
            * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
            */
          msPlayToPreferredSourceUri: string;
          /**
            * Gets or sets the primary DLNA PlayTo device.
            */
          msPlayToPrimary: boolean;
          /**
            * Gets the source associated with the media element for use by the PlayToManager.
            */
          msPlayToSource: any;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          /**
            * Retrieves the contained object.
            */
          object: any;
          readyState: number;
          /**
            * Sets or retrieves a message to be displayed while an object is loading.
            */
          standby: string;
          /**
            * Sets or retrieves the MIME type of the object.
            */
          type: string;
          /**
            * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
            */
          useMap: string;
          /**
            * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
            */
          validationMessage: string;
          /**
            * Returns a  ValidityState object that represents the validity states of an element.
            */
          validity: ValidityState;
          vspace: number;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string;
          /**
            * Returns whether an element will successfully validate based on forms validation rules and constraints.
            */
          willValidate: boolean;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Sets a custom error message that is displayed when a form is submitted.
            * @param error Sets a custom error message that is displayed when a form is submitted.
            */
          setCustomValidity(error: string): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLObjectElement: {
          prototype: HTMLObjectElement;
          new(): HTMLObjectElement;
      }
      
      interface HTMLOptGroupElement extends HTMLElement {
          /**
            * Sets or retrieves the status of an option.
            */
          defaultSelected: boolean;
          disabled: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Sets or retrieves the ordinal position of an option in a list box.
            */
          index: number;
          /**
            * Sets or retrieves a value that you can use to implement your own label functionality for the object.
            */
          label: string;
          /**
            * Sets or retrieves whether the option in the list box is the default item.
            */
          selected: boolean;
          /**
            * Sets or retrieves the text string specified by the option tag.
            */
          text: string;
          /**
            * Sets or retrieves the value which is returned to the server when the form control is submitted.
            */
          value: string;
      }
      
      declare var HTMLOptGroupElement: {
          prototype: HTMLOptGroupElement;
          new(): HTMLOptGroupElement;
      }
      
      interface HTMLOptionElement extends HTMLElement {
          /**
            * Sets or retrieves the status of an option.
            */
          defaultSelected: boolean;
          disabled: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Sets or retrieves the ordinal position of an option in a list box.
            */
          index: number;
          /**
            * Sets or retrieves a value that you can use to implement your own label functionality for the object.
            */
          label: string;
          /**
            * Sets or retrieves whether the option in the list box is the default item.
            */
          selected: boolean;
          /**
            * Sets or retrieves the text string specified by the option tag.
            */
          text: string;
          /**
            * Sets or retrieves the value which is returned to the server when the form control is submitted.
            */
          value: string;
      }
      
      declare var HTMLOptionElement: {
          prototype: HTMLOptionElement;
          new(): HTMLOptionElement;
          create(): HTMLOptionElement;
      }
      
      interface HTMLParagraphElement extends HTMLElement {
          /**
            * Sets or retrieves how the object is aligned with adjacent text. 
            */
          align: string;
          clear: string;
      }
      
      declare var HTMLParagraphElement: {
          prototype: HTMLParagraphElement;
          new(): HTMLParagraphElement;
      }
      
      interface HTMLParamElement extends HTMLElement {
          /**
            * Sets or retrieves the name of an input parameter for an element.
            */
          name: string;
          /**
            * Sets or retrieves the content type of the resource designated by the value attribute.
            */
          type: string;
          /**
            * Sets or retrieves the value of an input parameter for an element.
            */
          value: string;
          /**
            * Sets or retrieves the data type of the value attribute.
            */
          valueType: string;
      }
      
      declare var HTMLParamElement: {
          prototype: HTMLParamElement;
          new(): HTMLParamElement;
      }
      
      interface HTMLPhraseElement extends HTMLElement {
          /**
            * Sets or retrieves reference information about the object.
            */
          cite: string;
          /**
            * Sets or retrieves the date and time of a modification to the object.
            */
          dateTime: string;
      }
      
      declare var HTMLPhraseElement: {
          prototype: HTMLPhraseElement;
          new(): HTMLPhraseElement;
      }
      
      interface HTMLPreElement extends HTMLElement {
          /**
            * Indicates a citation by rendering text in italic type.
            */
          cite: string;
          clear: string;
          /**
            * Sets or gets a value that you can use to implement your own width functionality for the object.
            */
          width: number;
      }
      
      declare var HTMLPreElement: {
          prototype: HTMLPreElement;
          new(): HTMLPreElement;
      }
      
      interface HTMLProgressElement extends HTMLElement {
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Defines the maximum, or "done" value for a progress element.
            */
          max: number;
          /**
            * Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar).
            */
          position: number;
          /**
            * Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value.
            */
          value: number;
      }
      
      declare var HTMLProgressElement: {
          prototype: HTMLProgressElement;
          new(): HTMLProgressElement;
      }
      
      interface HTMLQuoteElement extends HTMLElement {
          /**
            * Sets or retrieves reference information about the object.
            */
          cite: string;
          /**
            * Sets or retrieves the date and time of a modification to the object.
            */
          dateTime: string;
      }
      
      declare var HTMLQuoteElement: {
          prototype: HTMLQuoteElement;
          new(): HTMLQuoteElement;
      }
      
      interface HTMLScriptElement extends HTMLElement {
          async: boolean;
          /**
            * Sets or retrieves the character set used to encode the object.
            */
          charset: string;
          /**
            * Sets or retrieves the status of the script.
            */
          defer: boolean;
          /**
            * Sets or retrieves the event for which the script is written. 
            */
          event: string;
          /** 
            * Sets or retrieves the object that is bound to the event script.
            */
          htmlFor: string;
          /**
            * Retrieves the URL to an external file that contains the source code or data.
            */
          src: string;
          /**
            * Retrieves or sets the text of the object as a string. 
            */
          text: string;
          /**
            * Sets or retrieves the MIME type for the associated scripting engine.
            */
          type: string;
      }
      
      declare var HTMLScriptElement: {
          prototype: HTMLScriptElement;
          new(): HTMLScriptElement;
      }
      
      interface HTMLSelectElement extends HTMLElement {
          /**
            * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
            */
          autofocus: boolean;
          disabled: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in. 
            */
          form: HTMLFormElement;
          /**
            * Sets or retrieves the number of objects in a collection.
            */
          length: number;
          /**
            * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
            */
          multiple: boolean;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          options: HTMLSelectElement;
          /**
            * When present, marks an element that can't be submitted without a value.
            */
          required: boolean;
          /**
            * Sets or retrieves the index of the selected option in a select object.
            */
          selectedIndex: number;
          /**
            * Sets or retrieves the number of rows in the list box. 
            */
          size: number;
          /**
            * Retrieves the type of select control based on the value of the MULTIPLE attribute.
            */
          type: string;
          /**
            * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
            */
          validationMessage: string;
          /**
            * Returns a  ValidityState object that represents the validity states of an element.
            */
          validity: ValidityState;
          /**
            * Sets or retrieves the value which is returned to the server when the form control is submitted.
            */
          value: string;
          /**
            * Returns whether an element will successfully validate based on forms validation rules and constraints.
            */
          willValidate: boolean;
          /**
            * Adds an element to the areas, controlRange, or options collection.
            * @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection.
            * @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection. 
            */
          add(element: HTMLElement, before?: HTMLElement): void;
          add(element: HTMLElement, before?: number): void;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Retrieves a select object or an object from an options collection.
            * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
            * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
            */
          item(name?: any, index?: any): any;
          /**
            * Retrieves a select object or an object from an options collection.
            * @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made.
            */
          namedItem(name: string): any;
          /**
            * Removes an element from the collection.
            * @param index Number that specifies the zero-based index of the element to remove from the collection.
            */
          remove(index?: number): void;
          /**
            * Sets a custom error message that is displayed when a form is submitted.
            * @param error Sets a custom error message that is displayed when a form is submitted.
            */
          setCustomValidity(error: string): void;
          [name: string]: any;
      }
      
      declare var HTMLSelectElement: {
          prototype: HTMLSelectElement;
          new(): HTMLSelectElement;
      }
      
      interface HTMLSourceElement extends HTMLElement {
          /**
            * Gets or sets the intended media type of the media source.
           */
          media: string;
          msKeySystem: string;
          /**
            * The address or URL of the a media resource that is to be considered.
            */
          src: string;
          /**
           * Gets or sets the MIME type of a media resource.
           */
          type: string;
      }
      
      declare var HTMLSourceElement: {
          prototype: HTMLSourceElement;
          new(): HTMLSourceElement;
      }
      
      interface HTMLSpanElement extends HTMLElement {
      }
      
      declare var HTMLSpanElement: {
          prototype: HTMLSpanElement;
          new(): HTMLSpanElement;
      }
      
      interface HTMLStyleElement extends HTMLElement, LinkStyle {
          /**
            * Sets or retrieves the media type.
            */
          media: string;
          /**
            * Retrieves the CSS language in which the style sheet is written.
            */
          type: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLStyleElement: {
          prototype: HTMLStyleElement;
          new(): HTMLStyleElement;
      }
      
      interface HTMLTableCaptionElement extends HTMLElement {
          /**
            * Sets or retrieves the alignment of the caption or legend.
            */
          align: string;
          /**
            * Sets or retrieves whether the caption appears at the top or bottom of the table.
            */
          vAlign: string;
      }
      
      declare var HTMLTableCaptionElement: {
          prototype: HTMLTableCaptionElement;
          new(): HTMLTableCaptionElement;
      }
      
      interface HTMLTableCellElement extends HTMLElement, HTMLTableAlignment {
          /**
            * Sets or retrieves abbreviated text for the object.
            */
          abbr: string;
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          /**
            * Sets or retrieves a comma-delimited list of conceptual categories associated with the object.
            */
          axis: string;
          bgColor: any;
          /**
            * Retrieves the position of the object in the cells collection of a row.
            */
          cellIndex: number;
          /**
            * Sets or retrieves the number columns in the table that the object should span.
            */
          colSpan: number;
          /**
            * Sets or retrieves a list of header cells that provide information for the object.
            */
          headers: string;
          /**
            * Sets or retrieves the height of the object.
            */
          height: any;
          /**
            * Sets or retrieves whether the browser automatically performs wordwrap.
            */
          noWrap: boolean;
          /**
            * Sets or retrieves how many rows in a table the cell should span.
            */
          rowSpan: number;
          /**
            * Sets or retrieves the group of cells in a table to which the object's information applies.
            */
          scope: string;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLTableCellElement: {
          prototype: HTMLTableCellElement;
          new(): HTMLTableCellElement;
      }
      
      interface HTMLTableColElement extends HTMLElement, HTMLTableAlignment {
          /**
            * Sets or retrieves the alignment of the object relative to the display or table.
            */
          align: string;
          /**
            * Sets or retrieves the number of columns in the group.
            */
          span: number;
          /**
            * Sets or retrieves the width of the object.
            */
          width: any;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLTableColElement: {
          prototype: HTMLTableColElement;
          new(): HTMLTableColElement;
      }
      
      interface HTMLTableDataCellElement extends HTMLTableCellElement {
      }
      
      declare var HTMLTableDataCellElement: {
          prototype: HTMLTableDataCellElement;
          new(): HTMLTableDataCellElement;
      }
      
      interface HTMLTableElement extends HTMLElement {
          /**
            * Sets or retrieves a value that indicates the table alignment.
            */
          align: string;
          bgColor: any;
          /**
            * Sets or retrieves the width of the border to draw around the object.
            */
          border: string;
          /**
            * Sets or retrieves the border color of the object. 
            */
          borderColor: any;
          /**
            * Retrieves the caption object of a table.
            */
          caption: HTMLTableCaptionElement;
          /**
            * Sets or retrieves the amount of space between the border of the cell and the content of the cell.
            */
          cellPadding: string;
          /**
            * Sets or retrieves the amount of space between cells in a table.
            */
          cellSpacing: string;
          /**
            * Sets or retrieves the number of columns in the table.
            */
          cols: number;
          /**
            * Sets or retrieves the way the border frame around the table is displayed.
            */
          frame: string;
          /**
            * Sets or retrieves the height of the object.
            */
          height: any;
          /**
            * Sets or retrieves the number of horizontal rows contained in the object.
            */
          rows: HTMLCollection;
          /**
            * Sets or retrieves which dividing lines (inner borders) are displayed.
            */
          rules: string;
          /**
            * Sets or retrieves a description and/or structure of the object.
            */
          summary: string;
          /**
            * Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order.
            */
          tBodies: HTMLCollection;
          /**
            * Retrieves the tFoot object of the table.
            */
          tFoot: HTMLTableSectionElement;
          /**
            * Retrieves the tHead object of the table.
            */
          tHead: HTMLTableSectionElement;
          /**
            * Sets or retrieves the width of the object.
            */
          width: string;
          /**
            * Creates an empty caption element in the table.
            */
          createCaption(): HTMLElement;
          /**
            * Creates an empty tBody element in the table.
            */
          createTBody(): HTMLElement;
          /**
            * Creates an empty tFoot element in the table.
            */
          createTFoot(): HTMLElement;
          /**
            * Returns the tHead element object if successful, or null otherwise.
            */
          createTHead(): HTMLElement;
          /**
            * Deletes the caption element and its contents from the table.
            */
          deleteCaption(): void;
          /**
            * Removes the specified row (tr) from the element and from the rows collection.
            * @param index Number that specifies the zero-based position in the rows collection of the row to remove.
            */
          deleteRow(index?: number): void;
          /**
            * Deletes the tFoot element and its contents from the table.
            */
          deleteTFoot(): void;
          /**
            * Deletes the tHead element and its contents from the table.
            */
          deleteTHead(): void;
          /**
            * Creates a new row (tr) in the table, and adds the row to the rows collection.
            * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
            */
          insertRow(index?: number): HTMLElement;
      }
      
      declare var HTMLTableElement: {
          prototype: HTMLTableElement;
          new(): HTMLTableElement;
      }
      
      interface HTMLTableHeaderCellElement extends HTMLTableCellElement {
          /**
            * Sets or retrieves the group of cells in a table to which the object's information applies.
            */
          scope: string;
      }
      
      declare var HTMLTableHeaderCellElement: {
          prototype: HTMLTableHeaderCellElement;
          new(): HTMLTableHeaderCellElement;
      }
      
      interface HTMLTableRowElement extends HTMLElement, HTMLTableAlignment {
          /**
            * Sets or retrieves how the object is aligned with adjacent text.
            */
          align: string;
          bgColor: any;
          /**
            * Retrieves a collection of all cells in the table row.
            */
          cells: HTMLCollection;
          /**
            * Sets or retrieves the height of the object.
            */
          height: any;
          /**
            * Retrieves the position of the object in the rows collection for the table.
            */
          rowIndex: number;
          /**
            * Retrieves the position of the object in the collection.
            */
          sectionRowIndex: number;
          /**
            * Removes the specified cell from the table row, as well as from the cells collection.
            * @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted.
            */
          deleteCell(index?: number): void;
          /**
            * Creates a new cell in the table row, and adds the cell to the cells collection.
            * @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection.
            */
          insertCell(index?: number): HTMLElement;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLTableRowElement: {
          prototype: HTMLTableRowElement;
          new(): HTMLTableRowElement;
      }
      
      interface HTMLTableSectionElement extends HTMLElement, HTMLTableAlignment {
          /**
            * Sets or retrieves a value that indicates the table alignment.
            */
          align: string;
          /**
            * Sets or retrieves the number of horizontal rows contained in the object.
            */
          rows: HTMLCollection;
          /**
            * Removes the specified row (tr) from the element and from the rows collection.
            * @param index Number that specifies the zero-based position in the rows collection of the row to remove.
            */
          deleteRow(index?: number): void;
          /**
            * Creates a new row (tr) in the table, and adds the row to the rows collection.
            * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
            */
          insertRow(index?: number): HTMLElement;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLTableSectionElement: {
          prototype: HTMLTableSectionElement;
          new(): HTMLTableSectionElement;
      }
      
      interface HTMLTextAreaElement extends HTMLElement {
          /**
            * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
            */
          autofocus: boolean;
          /**
            * Sets or retrieves the width of the object.
            */
          cols: number;
          /**
            * Sets or retrieves the initial contents of the object.
            */
          defaultValue: string;
          disabled: boolean;
          /**
            * Retrieves a reference to the form that the object is embedded in.
            */
          form: HTMLFormElement;
          /**
            * Sets or retrieves the maximum number of characters that the user can enter in a text control.
            */
          maxLength: number;
          /**
            * Sets or retrieves the name of the object.
            */
          name: string;
          /**
            * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
            */
          placeholder: string;
          /**
            * Sets or retrieves the value indicated whether the content of the object is read-only.
            */
          readOnly: boolean;
          /**
            * When present, marks an element that can't be submitted without a value.
            */
          required: boolean;
          /**
            * Sets or retrieves the number of horizontal rows contained in the object.
            */
          rows: number;
          /**
            * Gets or sets the end position or offset of a text selection.
            */
          selectionEnd: number;
          /**
            * Gets or sets the starting position or offset of a text selection.
            */
          selectionStart: number;
          /**
            * Sets or retrieves the value indicating whether the control is selected.
            */
          status: any;
          /**
            * Retrieves the type of control.
            */
          type: string;
          /**
            * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
            */
          validationMessage: string;
          /**
            * Returns a  ValidityState object that represents the validity states of an element.
            */
          validity: ValidityState;
          /**
            * Retrieves or sets the text in the entry field of the textArea element.
            */
          value: string;
          /**
            * Returns whether an element will successfully validate based on forms validation rules and constraints.
            */
          willValidate: boolean;
          /**
            * Sets or retrieves how to handle wordwrapping in the object.
            */
          wrap: string;
          /**
            * Returns whether a form will validate when it is submitted, without having to submit it.
            */
          checkValidity(): boolean;
          /**
            * Creates a TextRange object for the element.
            */
          createTextRange(): TextRange;
          /**
            * Highlights the input area of a form element.
            */
          select(): void;
          /**
            * Sets a custom error message that is displayed when a form is submitted.
            * @param error Sets a custom error message that is displayed when a form is submitted.
            */
          setCustomValidity(error: string): void;
          /**
            * Sets the start and end positions of a selection in a text field.
            * @param start The offset into the text field for the start of the selection.
            * @param end The offset into the text field for the end of the selection.
            */
          setSelectionRange(start: number, end: number): void;
      }
      
      declare var HTMLTextAreaElement: {
          prototype: HTMLTextAreaElement;
          new(): HTMLTextAreaElement;
      }
      
      interface HTMLTitleElement extends HTMLElement {
          /**
            * Retrieves or sets the text of the object as a string. 
            */
          text: string;
      }
      
      declare var HTMLTitleElement: {
          prototype: HTMLTitleElement;
          new(): HTMLTitleElement;
      }
      
      interface HTMLTrackElement extends HTMLElement {
          default: boolean;
          kind: string;
          label: string;
          readyState: number;
          src: string;
          srclang: string;
          track: TextTrack;
          ERROR: number;
          LOADED: number;
          LOADING: number;
          NONE: number;
      }
      
      declare var HTMLTrackElement: {
          prototype: HTMLTrackElement;
          new(): HTMLTrackElement;
          ERROR: number;
          LOADED: number;
          LOADING: number;
          NONE: number;
      }
      
      interface HTMLUListElement extends HTMLElement {
          compact: boolean;
          type: string;
      }
      
      declare var HTMLUListElement: {
          prototype: HTMLUListElement;
          new(): HTMLUListElement;
      }
      
      interface HTMLUnknownElement extends HTMLElement {
      }
      
      declare var HTMLUnknownElement: {
          prototype: HTMLUnknownElement;
          new(): HTMLUnknownElement;
      }
      
      interface HTMLVideoElement extends HTMLMediaElement {
          /**
            * Gets or sets the height of the video element.
            */
          height: number;
          msHorizontalMirror: boolean;
          msIsLayoutOptimalForPlayback: boolean;
          msIsStereo3D: boolean;
          msStereo3DPackingMode: string;
          msStereo3DRenderMode: string;
          msZoom: boolean;
          onMSVideoFormatChanged: (ev: Event) => any;
          onMSVideoFrameStepCompleted: (ev: Event) => any;
          onMSVideoOptimalLayoutChanged: (ev: Event) => any;
          /**
            * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available.
            */
          poster: string;
          /**
            * Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known.
            */
          videoHeight: number;
          /**
            * Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known.
            */
          videoWidth: number;
          webkitDisplayingFullscreen: boolean;
          webkitSupportsFullscreen: boolean;
          /**
            * Gets or sets the width of the video element.
            */
          width: number;
          getVideoPlaybackQuality(): VideoPlaybackQuality;
          msFrameStep(forward: boolean): void;
          msInsertVideoEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
          msSetVideoRectangle(left: number, top: number, right: number, bottom: number): void;
          webkitEnterFullScreen(): void;
          webkitEnterFullscreen(): void;
          webkitExitFullScreen(): void;
          webkitExitFullscreen(): void;
          addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSVideoFormatChanged", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var HTMLVideoElement: {
          prototype: HTMLVideoElement;
          new(): HTMLVideoElement;
      }
      
      interface HashChangeEvent extends Event {
          newURL: string;
          oldURL: string;
      }
      
      declare var HashChangeEvent: {
          prototype: HashChangeEvent;
          new(type: string, eventInitDict?: HashChangeEventInit): HashChangeEvent;
      }
      
      interface History {
          length: number;
          state: any;
          back(distance?: any): void;
          forward(distance?: any): void;
          go(delta?: any): void;
          pushState(statedata: any, title?: string, url?: string): void;
          replaceState(statedata: any, title?: string, url?: string): void;
      }
      
      declare var History: {
          prototype: History;
          new(): History;
      }
      
      interface IDBCursor {
          direction: string;
          key: any;
          primaryKey: any;
          source: any;
          advance(count: number): void;
          continue(key?: any): void;
          delete(): IDBRequest;
          update(value: any): IDBRequest;
          NEXT: string;
          NEXT_NO_DUPLICATE: string;
          PREV: string;
          PREV_NO_DUPLICATE: string;
      }
      
      declare var IDBCursor: {
          prototype: IDBCursor;
          new(): IDBCursor;
          NEXT: string;
          NEXT_NO_DUPLICATE: string;
          PREV: string;
          PREV_NO_DUPLICATE: string;
      }
      
      interface IDBCursorWithValue extends IDBCursor {
          value: any;
      }
      
      declare var IDBCursorWithValue: {
          prototype: IDBCursorWithValue;
          new(): IDBCursorWithValue;
      }
      
      interface IDBDatabase extends EventTarget {
          name: string;
          objectStoreNames: DOMStringList;
          onabort: (ev: Event) => any;
          onerror: (ev: Event) => any;
          version: string;
          close(): void;
          createObjectStore(name: string, optionalParameters?: any): IDBObjectStore;
          deleteObjectStore(name: string): void;
          transaction(storeNames: any, mode?: string): IDBTransaction;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var IDBDatabase: {
          prototype: IDBDatabase;
          new(): IDBDatabase;
      }
      
      interface IDBFactory {
          cmp(first: any, second: any): number;
          deleteDatabase(name: string): IDBOpenDBRequest;
          open(name: string, version?: number): IDBOpenDBRequest;
      }
      
      declare var IDBFactory: {
          prototype: IDBFactory;
          new(): IDBFactory;
      }
      
      interface IDBIndex {
          keyPath: string;
          name: string;
          objectStore: IDBObjectStore;
          unique: boolean;
          count(key?: any): IDBRequest;
          get(key: any): IDBRequest;
          getKey(key: any): IDBRequest;
          openCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
          openKeyCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
      }
      
      declare var IDBIndex: {
          prototype: IDBIndex;
          new(): IDBIndex;
      }
      
      interface IDBKeyRange {
          lower: any;
          lowerOpen: boolean;
          upper: any;
          upperOpen: boolean;
      }
      
      declare var IDBKeyRange: {
          prototype: IDBKeyRange;
          new(): IDBKeyRange;
          bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange;
          lowerBound(bound: any, open?: boolean): IDBKeyRange;
          only(value: any): IDBKeyRange;
          upperBound(bound: any, open?: boolean): IDBKeyRange;
      }
      
      interface IDBObjectStore {
          indexNames: DOMStringList;
          keyPath: string;
          name: string;
          transaction: IDBTransaction;
          add(value: any, key?: any): IDBRequest;
          clear(): IDBRequest;
          count(key?: any): IDBRequest;
          createIndex(name: string, keyPath: string, optionalParameters?: any): IDBIndex;
          delete(key: any): IDBRequest;
          deleteIndex(indexName: string): void;
          get(key: any): IDBRequest;
          index(name: string): IDBIndex;
          openCursor(range?: any, direction?: string): IDBRequest;
          put(value: any, key?: any): IDBRequest;
      }
      
      declare var IDBObjectStore: {
          prototype: IDBObjectStore;
          new(): IDBObjectStore;
      }
      
      interface IDBOpenDBRequest extends IDBRequest {
          onblocked: (ev: Event) => any;
          onupgradeneeded: (ev: IDBVersionChangeEvent) => any;
          addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var IDBOpenDBRequest: {
          prototype: IDBOpenDBRequest;
          new(): IDBOpenDBRequest;
      }
      
      interface IDBRequest extends EventTarget {
          error: DOMError;
          onerror: (ev: Event) => any;
          onsuccess: (ev: Event) => any;
          readyState: string;
          result: any;
          source: any;
          transaction: IDBTransaction;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var IDBRequest: {
          prototype: IDBRequest;
          new(): IDBRequest;
      }
      
      interface IDBTransaction extends EventTarget {
          db: IDBDatabase;
          error: DOMError;
          mode: string;
          onabort: (ev: Event) => any;
          oncomplete: (ev: Event) => any;
          onerror: (ev: Event) => any;
          abort(): void;
          objectStore(name: string): IDBObjectStore;
          READ_ONLY: string;
          READ_WRITE: string;
          VERSION_CHANGE: string;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var IDBTransaction: {
          prototype: IDBTransaction;
          new(): IDBTransaction;
          READ_ONLY: string;
          READ_WRITE: string;
          VERSION_CHANGE: string;
      }
      
      interface IDBVersionChangeEvent extends Event {
          newVersion: number;
          oldVersion: number;
      }
      
      declare var IDBVersionChangeEvent: {
          prototype: IDBVersionChangeEvent;
          new(): IDBVersionChangeEvent;
      }
      
      interface ImageData {
          data: number[];
          height: number;
          width: number;
      }
      
      declare var ImageData: {
          prototype: ImageData;
          new(): ImageData;
      }
      
      interface KeyboardEvent extends UIEvent {
          altKey: boolean;
          char: string;
          charCode: number;
          ctrlKey: boolean;
          key: string;
          keyCode: number;
          locale: string;
          location: number;
          metaKey: boolean;
          repeat: boolean;
          shiftKey: boolean;
          which: number;
          getModifierState(keyArg: string): boolean;
          initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void;
          DOM_KEY_LOCATION_JOYSTICK: number;
          DOM_KEY_LOCATION_LEFT: number;
          DOM_KEY_LOCATION_MOBILE: number;
          DOM_KEY_LOCATION_NUMPAD: number;
          DOM_KEY_LOCATION_RIGHT: number;
          DOM_KEY_LOCATION_STANDARD: number;
      }
      
      declare var KeyboardEvent: {
          prototype: KeyboardEvent;
          new(typeArg: string, eventInitDict?: KeyboardEventInit): KeyboardEvent;
          DOM_KEY_LOCATION_JOYSTICK: number;
          DOM_KEY_LOCATION_LEFT: number;
          DOM_KEY_LOCATION_MOBILE: number;
          DOM_KEY_LOCATION_NUMPAD: number;
          DOM_KEY_LOCATION_RIGHT: number;
          DOM_KEY_LOCATION_STANDARD: number;
      }
      
      interface Location {
          hash: string;
          host: string;
          hostname: string;
          href: string;
          origin: string;
          pathname: string;
          port: string;
          protocol: string;
          search: string;
          assign(url: string): void;
          reload(forcedReload?: boolean): void;
          replace(url: string): void;
          toString(): string;
      }
      
      declare var Location: {
          prototype: Location;
          new(): Location;
      }
      
      interface LongRunningScriptDetectedEvent extends Event {
          executionTime: number;
          stopPageScriptExecution: boolean;
      }
      
      declare var LongRunningScriptDetectedEvent: {
          prototype: LongRunningScriptDetectedEvent;
          new(): LongRunningScriptDetectedEvent;
      }
      
      interface MSApp {
          clearTemporaryWebDataAsync(): MSAppAsyncOperation;
          createBlobFromRandomAccessStream(type: string, seeker: any): Blob;
          createDataPackage(object: any): any;
          createDataPackageFromSelection(): any;
          createFileFromStorageFile(storageFile: any): File;
          createStreamFromInputStream(type: string, inputStream: any): MSStream;
          execAsyncAtPriority(asynchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): void;
          execAtPriority(synchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): any;
          getCurrentPriority(): string;
          getHtmlPrintDocumentSourceAsync(htmlDoc: any): any;
          getViewId(view: any): any;
          isTaskScheduledAtPriorityOrHigher(priority: string): boolean;
          pageHandlesAllApplicationActivations(enabled: boolean): void;
          suppressSubdownloadCredentialPrompts(suppress: boolean): void;
          terminateApp(exceptionObject: any): void;
          CURRENT: string;
          HIGH: string;
          IDLE: string;
          NORMAL: string;
      }
      declare var MSApp: MSApp;
      
      interface MSAppAsyncOperation extends EventTarget {
          error: DOMError;
          oncomplete: (ev: Event) => any;
          onerror: (ev: Event) => any;
          readyState: number;
          result: any;
          start(): void;
          COMPLETED: number;
          ERROR: number;
          STARTED: number;
          addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var MSAppAsyncOperation: {
          prototype: MSAppAsyncOperation;
          new(): MSAppAsyncOperation;
          COMPLETED: number;
          ERROR: number;
          STARTED: number;
      }
      
      interface MSBlobBuilder {
          append(data: any, endings?: string): void;
          getBlob(contentType?: string): Blob;
      }
      
      declare var MSBlobBuilder: {
          prototype: MSBlobBuilder;
          new(): MSBlobBuilder;
      }
      
      interface MSCSSMatrix {
          a: number;
          b: number;
          c: number;
          d: number;
          e: number;
          f: number;
          m11: number;
          m12: number;
          m13: number;
          m14: number;
          m21: number;
          m22: number;
          m23: number;
          m24: number;
          m31: number;
          m32: number;
          m33: number;
          m34: number;
          m41: number;
          m42: number;
          m43: number;
          m44: number;
          inverse(): MSCSSMatrix;
          multiply(secondMatrix: MSCSSMatrix): MSCSSMatrix;
          rotate(angleX: number, angleY?: number, angleZ?: number): MSCSSMatrix;
          rotateAxisAngle(x: number, y: number, z: number, angle: number): MSCSSMatrix;
          scale(scaleX: number, scaleY?: number, scaleZ?: number): MSCSSMatrix;
          setMatrixValue(value: string): void;
          skewX(angle: number): MSCSSMatrix;
          skewY(angle: number): MSCSSMatrix;
          toString(): string;
          translate(x: number, y: number, z?: number): MSCSSMatrix;
      }
      
      declare var MSCSSMatrix: {
          prototype: MSCSSMatrix;
          new(text?: string): MSCSSMatrix;
      }
      
      interface MSGesture {
          target: Element;
          addPointer(pointerId: number): void;
          stop(): void;
      }
      
      declare var MSGesture: {
          prototype: MSGesture;
          new(): MSGesture;
      }
      
      interface MSGestureEvent extends UIEvent {
          clientX: number;
          clientY: number;
          expansion: number;
          gestureObject: any;
          hwTimestamp: number;
          offsetX: number;
          offsetY: number;
          rotation: number;
          scale: number;
          screenX: number;
          screenY: number;
          translationX: number;
          translationY: number;
          velocityAngular: number;
          velocityExpansion: number;
          velocityX: number;
          velocityY: number;
          initGestureEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, offsetXArg: number, offsetYArg: number, translationXArg: number, translationYArg: number, scaleArg: number, expansionArg: number, rotationArg: number, velocityXArg: number, velocityYArg: number, velocityExpansionArg: number, velocityAngularArg: number, hwTimestampArg: number): void;
          MSGESTURE_FLAG_BEGIN: number;
          MSGESTURE_FLAG_CANCEL: number;
          MSGESTURE_FLAG_END: number;
          MSGESTURE_FLAG_INERTIA: number;
          MSGESTURE_FLAG_NONE: number;
      }
      
      declare var MSGestureEvent: {
          prototype: MSGestureEvent;
          new(): MSGestureEvent;
          MSGESTURE_FLAG_BEGIN: number;
          MSGESTURE_FLAG_CANCEL: number;
          MSGESTURE_FLAG_END: number;
          MSGESTURE_FLAG_INERTIA: number;
          MSGESTURE_FLAG_NONE: number;
      }
      
      interface MSGraphicsTrust {
          constrictionActive: boolean;
          status: string;
      }
      
      declare var MSGraphicsTrust: {
          prototype: MSGraphicsTrust;
          new(): MSGraphicsTrust;
      }
      
      interface MSHTMLWebViewElement extends HTMLElement {
          canGoBack: boolean;
          canGoForward: boolean;
          containsFullScreenElement: boolean;
          documentTitle: string;
          height: number;
          settings: MSWebViewSettings;
          src: string;
          width: number;
          addWebAllowedObject(name: string, applicationObject: any): void;
          buildLocalStreamUri(contentIdentifier: string, relativePath: string): string;
          capturePreviewToBlobAsync(): MSWebViewAsyncOperation;
          captureSelectedContentToDataPackageAsync(): MSWebViewAsyncOperation;
          getDeferredPermissionRequestById(id: number): DeferredPermissionRequest;
          getDeferredPermissionRequests(): DeferredPermissionRequest[];
          goBack(): void;
          goForward(): void;
          invokeScriptAsync(scriptName: string, ...args: any[]): MSWebViewAsyncOperation;
          navigate(uri: string): void;
          navigateToLocalStreamUri(source: string, streamResolver: any): void;
          navigateToString(contents: string): void;
          navigateWithHttpRequestMessage(requestMessage: any): void;
          refresh(): void;
          stop(): void;
      }
      
      declare var MSHTMLWebViewElement: {
          prototype: MSHTMLWebViewElement;
          new(): MSHTMLWebViewElement;
      }
      
      interface MSHeaderFooter {
          URL: string;
          dateLong: string;
          dateShort: string;
          font: string;
          htmlFoot: string;
          htmlHead: string;
          page: number;
          pageTotal: number;
          textFoot: string;
          textHead: string;
          timeLong: string;
          timeShort: string;
          title: string;
      }
      
      declare var MSHeaderFooter: {
          prototype: MSHeaderFooter;
          new(): MSHeaderFooter;
      }
      
      interface MSInputMethodContext extends EventTarget {
          compositionEndOffset: number;
          compositionStartOffset: number;
          oncandidatewindowhide: (ev: Event) => any;
          oncandidatewindowshow: (ev: Event) => any;
          oncandidatewindowupdate: (ev: Event) => any;
          target: HTMLElement;
          getCandidateWindowClientRect(): ClientRect;
          getCompositionAlternatives(): string[];
          hasComposition(): boolean;
          isCandidateWindowVisible(): boolean;
          addEventListener(type: "MSCandidateWindowHide", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "MSCandidateWindowShow", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "MSCandidateWindowUpdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var MSInputMethodContext: {
          prototype: MSInputMethodContext;
          new(): MSInputMethodContext;
      }
      
      interface MSManipulationEvent extends UIEvent {
          currentState: number;
          inertiaDestinationX: number;
          inertiaDestinationY: number;
          lastState: number;
          initMSManipulationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, lastState: number, currentState: number): void;
          MS_MANIPULATION_STATE_ACTIVE: number;
          MS_MANIPULATION_STATE_CANCELLED: number;
          MS_MANIPULATION_STATE_COMMITTED: number;
          MS_MANIPULATION_STATE_DRAGGING: number;
          MS_MANIPULATION_STATE_INERTIA: number;
          MS_MANIPULATION_STATE_PRESELECT: number;
          MS_MANIPULATION_STATE_SELECTING: number;
          MS_MANIPULATION_STATE_STOPPED: number;
      }
      
      declare var MSManipulationEvent: {
          prototype: MSManipulationEvent;
          new(): MSManipulationEvent;
          MS_MANIPULATION_STATE_ACTIVE: number;
          MS_MANIPULATION_STATE_CANCELLED: number;
          MS_MANIPULATION_STATE_COMMITTED: number;
          MS_MANIPULATION_STATE_DRAGGING: number;
          MS_MANIPULATION_STATE_INERTIA: number;
          MS_MANIPULATION_STATE_PRESELECT: number;
          MS_MANIPULATION_STATE_SELECTING: number;
          MS_MANIPULATION_STATE_STOPPED: number;
      }
      
      interface MSMediaKeyError {
          code: number;
          systemCode: number;
          MS_MEDIA_KEYERR_CLIENT: number;
          MS_MEDIA_KEYERR_DOMAIN: number;
          MS_MEDIA_KEYERR_HARDWARECHANGE: number;
          MS_MEDIA_KEYERR_OUTPUT: number;
          MS_MEDIA_KEYERR_SERVICE: number;
          MS_MEDIA_KEYERR_UNKNOWN: number;
      }
      
      declare var MSMediaKeyError: {
          prototype: MSMediaKeyError;
          new(): MSMediaKeyError;
          MS_MEDIA_KEYERR_CLIENT: number;
          MS_MEDIA_KEYERR_DOMAIN: number;
          MS_MEDIA_KEYERR_HARDWARECHANGE: number;
          MS_MEDIA_KEYERR_OUTPUT: number;
          MS_MEDIA_KEYERR_SERVICE: number;
          MS_MEDIA_KEYERR_UNKNOWN: number;
      }
      
      interface MSMediaKeyMessageEvent extends Event {
          destinationURL: string;
          message: Uint8Array;
      }
      
      declare var MSMediaKeyMessageEvent: {
          prototype: MSMediaKeyMessageEvent;
          new(): MSMediaKeyMessageEvent;
      }
      
      interface MSMediaKeyNeededEvent extends Event {
          initData: Uint8Array;
      }
      
      declare var MSMediaKeyNeededEvent: {
          prototype: MSMediaKeyNeededEvent;
          new(): MSMediaKeyNeededEvent;
      }
      
      interface MSMediaKeySession extends EventTarget {
          error: MSMediaKeyError;
          keySystem: string;
          sessionId: string;
          close(): void;
          update(key: Uint8Array): void;
      }
      
      declare var MSMediaKeySession: {
          prototype: MSMediaKeySession;
          new(): MSMediaKeySession;
      }
      
      interface MSMediaKeys {
          keySystem: string;
          createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array): MSMediaKeySession;
      }
      
      declare var MSMediaKeys: {
          prototype: MSMediaKeys;
          new(keySystem: string): MSMediaKeys;
          isTypeSupported(keySystem: string, type?: string): boolean;
      }
      
      interface MSMimeTypesCollection {
          length: number;
      }
      
      declare var MSMimeTypesCollection: {
          prototype: MSMimeTypesCollection;
          new(): MSMimeTypesCollection;
      }
      
      interface MSPluginsCollection {
          length: number;
          refresh(reload?: boolean): void;
      }
      
      declare var MSPluginsCollection: {
          prototype: MSPluginsCollection;
          new(): MSPluginsCollection;
      }
      
      interface MSPointerEvent extends MouseEvent {
          currentPoint: any;
          height: number;
          hwTimestamp: number;
          intermediatePoints: any;
          isPrimary: boolean;
          pointerId: number;
          pointerType: any;
          pressure: number;
          rotation: number;
          tiltX: number;
          tiltY: number;
          width: number;
          getCurrentPoint(element: Element): void;
          getIntermediatePoints(element: Element): void;
          initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
      }
      
      declare var MSPointerEvent: {
          prototype: MSPointerEvent;
          new(typeArg: string, eventInitDict?: PointerEventInit): MSPointerEvent;
      }
      
      interface MSPrintManagerTemplatePrinter extends MSTemplatePrinter, EventTarget {
          percentScale: number;
          showHeaderFooter: boolean;
          shrinkToFit: boolean;
          drawPreviewPage(element: HTMLElement, pageNumber: number): void;
          endPrint(): void;
          getPrintTaskOptionValue(key: string): any;
          invalidatePreview(): void;
          setPageCount(pageCount: number): void;
          startPrint(): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var MSPrintManagerTemplatePrinter: {
          prototype: MSPrintManagerTemplatePrinter;
          new(): MSPrintManagerTemplatePrinter;
      }
      
      interface MSRangeCollection {
          length: number;
          item(index: number): Range;
          [index: number]: Range;
      }
      
      declare var MSRangeCollection: {
          prototype: MSRangeCollection;
          new(): MSRangeCollection;
      }
      
      interface MSSiteModeEvent extends Event {
          actionURL: string;
          buttonID: number;
      }
      
      declare var MSSiteModeEvent: {
          prototype: MSSiteModeEvent;
          new(): MSSiteModeEvent;
      }
      
      interface MSStream {
          type: string;
          msClose(): void;
          msDetachStream(): any;
      }
      
      declare var MSStream: {
          prototype: MSStream;
          new(): MSStream;
      }
      
      interface MSStreamReader extends EventTarget, MSBaseReader {
          error: DOMError;
          readAsArrayBuffer(stream: MSStream, size?: number): void;
          readAsBinaryString(stream: MSStream, size?: number): void;
          readAsBlob(stream: MSStream, size?: number): void;
          readAsDataURL(stream: MSStream, size?: number): void;
          readAsText(stream: MSStream, encoding?: string, size?: number): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var MSStreamReader: {
          prototype: MSStreamReader;
          new(): MSStreamReader;
      }
      
      interface MSTemplatePrinter {
          collate: boolean;
          copies: number;
          currentPage: boolean;
          currentPageAvail: boolean;
          duplex: boolean;
          footer: string;
          frameActive: boolean;
          frameActiveEnabled: boolean;
          frameAsShown: boolean;
          framesetDocument: boolean;
          header: string;
          headerFooterFont: string;
          marginBottom: number;
          marginLeft: number;
          marginRight: number;
          marginTop: number;
          orientation: string;
          pageFrom: number;
          pageHeight: number;
          pageTo: number;
          pageWidth: number;
          selectedPages: boolean;
          selection: boolean;
          selectionEnabled: boolean;
          unprintableBottom: number;
          unprintableLeft: number;
          unprintableRight: number;
          unprintableTop: number;
          usePrinterCopyCollate: boolean;
          createHeaderFooter(): MSHeaderFooter;
          deviceSupports(property: string): any;
          ensurePrintDialogDefaults(): boolean;
          getPageMarginBottom(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
          getPageMarginBottomImportant(pageRule: CSSPageRule): boolean;
          getPageMarginLeft(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
          getPageMarginLeftImportant(pageRule: CSSPageRule): boolean;
          getPageMarginRight(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
          getPageMarginRightImportant(pageRule: CSSPageRule): boolean;
          getPageMarginTop(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
          getPageMarginTopImportant(pageRule: CSSPageRule): boolean;
          printBlankPage(): void;
          printNonNative(document: any): boolean;
          printNonNativeFrames(document: any, activeFrame: boolean): void;
          printPage(element: HTMLElement): void;
          showPageSetupDialog(): boolean;
          showPrintDialog(): boolean;
          startDoc(title: string): boolean;
          stopDoc(): void;
          updatePageStatus(status: number): void;
      }
      
      declare var MSTemplatePrinter: {
          prototype: MSTemplatePrinter;
          new(): MSTemplatePrinter;
      }
      
      interface MSWebViewAsyncOperation extends EventTarget {
          error: DOMError;
          oncomplete: (ev: Event) => any;
          onerror: (ev: Event) => any;
          readyState: number;
          result: any;
          target: MSHTMLWebViewElement;
          type: number;
          start(): void;
          COMPLETED: number;
          ERROR: number;
          STARTED: number;
          TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
          TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
          TYPE_INVOKE_SCRIPT: number;
          addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var MSWebViewAsyncOperation: {
          prototype: MSWebViewAsyncOperation;
          new(): MSWebViewAsyncOperation;
          COMPLETED: number;
          ERROR: number;
          STARTED: number;
          TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
          TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
          TYPE_INVOKE_SCRIPT: number;
      }
      
      interface MSWebViewSettings {
          isIndexedDBEnabled: boolean;
          isJavaScriptEnabled: boolean;
      }
      
      declare var MSWebViewSettings: {
          prototype: MSWebViewSettings;
          new(): MSWebViewSettings;
      }
      
      interface MediaElementAudioSourceNode extends AudioNode {
      }
      
      declare var MediaElementAudioSourceNode: {
          prototype: MediaElementAudioSourceNode;
          new(): MediaElementAudioSourceNode;
      }
      
      interface MediaError {
          code: number;
          msExtendedCode: number;
          MEDIA_ERR_ABORTED: number;
          MEDIA_ERR_DECODE: number;
          MEDIA_ERR_NETWORK: number;
          MEDIA_ERR_SRC_NOT_SUPPORTED: number;
          MS_MEDIA_ERR_ENCRYPTED: number;
      }
      
      declare var MediaError: {
          prototype: MediaError;
          new(): MediaError;
          MEDIA_ERR_ABORTED: number;
          MEDIA_ERR_DECODE: number;
          MEDIA_ERR_NETWORK: number;
          MEDIA_ERR_SRC_NOT_SUPPORTED: number;
          MS_MEDIA_ERR_ENCRYPTED: number;
      }
      
      interface MediaList {
          length: number;
          mediaText: string;
          appendMedium(newMedium: string): void;
          deleteMedium(oldMedium: string): void;
          item(index: number): string;
          toString(): string;
          [index: number]: string;
      }
      
      declare var MediaList: {
          prototype: MediaList;
          new(): MediaList;
      }
      
      interface MediaQueryList {
          matches: boolean;
          media: string;
          addListener(listener: MediaQueryListListener): void;
          removeListener(listener: MediaQueryListListener): void;
      }
      
      declare var MediaQueryList: {
          prototype: MediaQueryList;
          new(): MediaQueryList;
      }
      
      interface MediaSource extends EventTarget {
          activeSourceBuffers: SourceBufferList;
          duration: number;
          readyState: string;
          sourceBuffers: SourceBufferList;
          addSourceBuffer(type: string): SourceBuffer;
          endOfStream(error?: string): void;
          removeSourceBuffer(sourceBuffer: SourceBuffer): void;
      }
      
      declare var MediaSource: {
          prototype: MediaSource;
          new(): MediaSource;
          isTypeSupported(type: string): boolean;
      }
      
      interface MessageChannel {
          port1: MessagePort;
          port2: MessagePort;
      }
      
      declare var MessageChannel: {
          prototype: MessageChannel;
          new(): MessageChannel;
      }
      
      interface MessageEvent extends Event {
          data: any;
          origin: string;
          ports: any;
          source: Window;
          initMessageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, dataArg: any, originArg: string, lastEventIdArg: string, sourceArg: Window): void;
      }
      
      declare var MessageEvent: {
          prototype: MessageEvent;
          new(): MessageEvent;
      }
      
      interface MessagePort extends EventTarget {
          onmessage: (ev: MessageEvent) => any;
          close(): void;
          postMessage(message?: any, ports?: any): void;
          start(): void;
          addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var MessagePort: {
          prototype: MessagePort;
          new(): MessagePort;
      }
      
      interface MimeType {
          description: string;
          enabledPlugin: Plugin;
          suffixes: string;
          type: string;
      }
      
      declare var MimeType: {
          prototype: MimeType;
          new(): MimeType;
      }
      
      interface MimeTypeArray {
          length: number;
          item(index: number): Plugin;
          namedItem(type: string): Plugin;
          [index: number]: Plugin;
      }
      
      declare var MimeTypeArray: {
          prototype: MimeTypeArray;
          new(): MimeTypeArray;
      }
      
      interface MouseEvent extends UIEvent {
          altKey: boolean;
          button: number;
          buttons: number;
          clientX: number;
          clientY: number;
          ctrlKey: boolean;
          fromElement: Element;
          layerX: number;
          layerY: number;
          metaKey: boolean;
          movementX: number;
          movementY: number;
          offsetX: number;
          offsetY: number;
          pageX: number;
          pageY: number;
          relatedTarget: EventTarget;
          screenX: number;
          screenY: number;
          shiftKey: boolean;
          toElement: Element;
          which: number;
          x: number;
          y: number;
          getModifierState(keyArg: string): boolean;
          initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget): void;
      }
      
      declare var MouseEvent: {
          prototype: MouseEvent;
          new(typeArg: string, eventInitDict?: MouseEventInit): MouseEvent;
      }
      
      interface MouseWheelEvent extends MouseEvent {
          wheelDelta: number;
          wheelDeltaX: number;
          wheelDeltaY: number;
          initMouseWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, wheelDeltaArg: number): void;
      }
      
      declare var MouseWheelEvent: {
          prototype: MouseWheelEvent;
          new(): MouseWheelEvent;
      }
      
      interface MutationEvent extends Event {
          attrChange: number;
          attrName: string;
          newValue: string;
          prevValue: string;
          relatedNode: Node;
          initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void;
          ADDITION: number;
          MODIFICATION: number;
          REMOVAL: number;
      }
      
      declare var MutationEvent: {
          prototype: MutationEvent;
          new(): MutationEvent;
          ADDITION: number;
          MODIFICATION: number;
          REMOVAL: number;
      }
      
      interface MutationObserver {
          disconnect(): void;
          observe(target: Node, options: MutationObserverInit): void;
          takeRecords(): MutationRecord[];
      }
      
      declare var MutationObserver: {
          prototype: MutationObserver;
          new(callback: MutationCallback): MutationObserver;
      }
      
      interface MutationRecord {
          addedNodes: NodeList;
          attributeName: string;
          attributeNamespace: string;
          nextSibling: Node;
          oldValue: string;
          previousSibling: Node;
          removedNodes: NodeList;
          target: Node;
          type: string;
      }
      
      declare var MutationRecord: {
          prototype: MutationRecord;
          new(): MutationRecord;
      }
      
      interface NamedNodeMap {
          length: number;
          getNamedItem(name: string): Attr;
          getNamedItemNS(namespaceURI: string, localName: string): Attr;
          item(index: number): Attr;
          removeNamedItem(name: string): Attr;
          removeNamedItemNS(namespaceURI: string, localName: string): Attr;
          setNamedItem(arg: Attr): Attr;
          setNamedItemNS(arg: Attr): Attr;
          [index: number]: Attr;
      }
      
      declare var NamedNodeMap: {
          prototype: NamedNodeMap;
          new(): NamedNodeMap;
      }
      
      interface NavigationCompletedEvent extends NavigationEvent {
          isSuccess: boolean;
          webErrorStatus: number;
      }
      
      declare var NavigationCompletedEvent: {
          prototype: NavigationCompletedEvent;
          new(): NavigationCompletedEvent;
      }
      
      interface NavigationEvent extends Event {
          uri: string;
      }
      
      declare var NavigationEvent: {
          prototype: NavigationEvent;
          new(): NavigationEvent;
      }
      
      interface NavigationEventWithReferrer extends NavigationEvent {
          referer: string;
      }
      
      declare var NavigationEventWithReferrer: {
          prototype: NavigationEventWithReferrer;
          new(): NavigationEventWithReferrer;
      }
      
      interface Navigator extends Object, NavigatorID, NavigatorOnLine, NavigatorContentUtils, NavigatorStorageUtils, NavigatorGeolocation, MSNavigatorDoNotTrack, MSFileSaver {
          appCodeName: string;
          appMinorVersion: string;
          browserLanguage: string;
          connectionSpeed: number;
          cookieEnabled: boolean;
          cpuClass: string;
          language: string;
          maxTouchPoints: number;
          mimeTypes: MSMimeTypesCollection;
          msManipulationViewsEnabled: boolean;
          msMaxTouchPoints: number;
          msPointerEnabled: boolean;
          plugins: MSPluginsCollection;
          pointerEnabled: boolean;
          systemLanguage: string;
          userLanguage: string;
          webdriver: boolean;
          getGamepads(): Gamepad[];
          javaEnabled(): boolean;
          msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var Navigator: {
          prototype: Navigator;
          new(): Navigator;
      }
      
      interface Node extends EventTarget {
          attributes: NamedNodeMap;
          baseURI: string;
          childNodes: NodeList;
          firstChild: Node;
          lastChild: Node;
          localName: string;
          namespaceURI: string;
          nextSibling: Node;
          nodeName: string;
          nodeType: number;
          nodeValue: string;
          ownerDocument: Document;
          parentElement: HTMLElement;
          parentNode: Node;
          prefix: string;
          previousSibling: Node;
          textContent: string;
          appendChild(newChild: Node): Node;
          cloneNode(deep?: boolean): Node;
          compareDocumentPosition(other: Node): number;
          hasAttributes(): boolean;
          hasChildNodes(): boolean;
          insertBefore(newChild: Node, refChild?: Node): Node;
          isDefaultNamespace(namespaceURI: string): boolean;
          isEqualNode(arg: Node): boolean;
          isSameNode(other: Node): boolean;
          lookupNamespaceURI(prefix: string): string;
          lookupPrefix(namespaceURI: string): string;
          normalize(): void;
          removeChild(oldChild: Node): Node;
          replaceChild(newChild: Node, oldChild: Node): Node;
          ATTRIBUTE_NODE: number;
          CDATA_SECTION_NODE: number;
          COMMENT_NODE: number;
          DOCUMENT_FRAGMENT_NODE: number;
          DOCUMENT_NODE: number;
          DOCUMENT_POSITION_CONTAINED_BY: number;
          DOCUMENT_POSITION_CONTAINS: number;
          DOCUMENT_POSITION_DISCONNECTED: number;
          DOCUMENT_POSITION_FOLLOWING: number;
          DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
          DOCUMENT_POSITION_PRECEDING: number;
          DOCUMENT_TYPE_NODE: number;
          ELEMENT_NODE: number;
          ENTITY_NODE: number;
          ENTITY_REFERENCE_NODE: number;
          NOTATION_NODE: number;
          PROCESSING_INSTRUCTION_NODE: number;
          TEXT_NODE: number;
      }
      
      declare var Node: {
          prototype: Node;
          new(): Node;
          ATTRIBUTE_NODE: number;
          CDATA_SECTION_NODE: number;
          COMMENT_NODE: number;
          DOCUMENT_FRAGMENT_NODE: number;
          DOCUMENT_NODE: number;
          DOCUMENT_POSITION_CONTAINED_BY: number;
          DOCUMENT_POSITION_CONTAINS: number;
          DOCUMENT_POSITION_DISCONNECTED: number;
          DOCUMENT_POSITION_FOLLOWING: number;
          DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
          DOCUMENT_POSITION_PRECEDING: number;
          DOCUMENT_TYPE_NODE: number;
          ELEMENT_NODE: number;
          ENTITY_NODE: number;
          ENTITY_REFERENCE_NODE: number;
          NOTATION_NODE: number;
          PROCESSING_INSTRUCTION_NODE: number;
          TEXT_NODE: number;
      }
      
      interface NodeFilter {
          FILTER_ACCEPT: number;
          FILTER_REJECT: number;
          FILTER_SKIP: number;
          SHOW_ALL: number;
          SHOW_ATTRIBUTE: number;
          SHOW_CDATA_SECTION: number;
          SHOW_COMMENT: number;
          SHOW_DOCUMENT: number;
          SHOW_DOCUMENT_FRAGMENT: number;
          SHOW_DOCUMENT_TYPE: number;
          SHOW_ELEMENT: number;
          SHOW_ENTITY: number;
          SHOW_ENTITY_REFERENCE: number;
          SHOW_NOTATION: number;
          SHOW_PROCESSING_INSTRUCTION: number;
          SHOW_TEXT: number;
      }
      declare var NodeFilter: NodeFilter;
      
      interface NodeIterator {
          expandEntityReferences: boolean;
          filter: NodeFilter;
          root: Node;
          whatToShow: number;
          detach(): void;
          nextNode(): Node;
          previousNode(): Node;
      }
      
      declare var NodeIterator: {
          prototype: NodeIterator;
          new(): NodeIterator;
      }
      
      interface NodeList {
          length: number;
          item(index: number): Node;
          [index: number]: Node;
      }
      
      declare var NodeList: {
          prototype: NodeList;
          new(): NodeList;
      }
      
      interface OES_element_index_uint {
      }
      
      declare var OES_element_index_uint: {
          prototype: OES_element_index_uint;
          new(): OES_element_index_uint;
      }
      
      interface OES_standard_derivatives {
          FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
      }
      
      declare var OES_standard_derivatives: {
          prototype: OES_standard_derivatives;
          new(): OES_standard_derivatives;
          FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
      }
      
      interface OES_texture_float {
      }
      
      declare var OES_texture_float: {
          prototype: OES_texture_float;
          new(): OES_texture_float;
      }
      
      interface OES_texture_float_linear {
      }
      
      declare var OES_texture_float_linear: {
          prototype: OES_texture_float_linear;
          new(): OES_texture_float_linear;
      }
      
      interface OfflineAudioCompletionEvent extends Event {
          renderedBuffer: AudioBuffer;
      }
      
      declare var OfflineAudioCompletionEvent: {
          prototype: OfflineAudioCompletionEvent;
          new(): OfflineAudioCompletionEvent;
      }
      
      interface OfflineAudioContext extends AudioContext {
          oncomplete: (ev: Event) => any;
          startRendering(): void;
          addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var OfflineAudioContext: {
          prototype: OfflineAudioContext;
          new(numberOfChannels: number, length: number, sampleRate: number): OfflineAudioContext;
      }
      
      interface OscillatorNode extends AudioNode {
          detune: AudioParam;
          frequency: AudioParam;
          onended: (ev: Event) => any;
          type: string;
          setPeriodicWave(periodicWave: PeriodicWave): void;
          start(when?: number): void;
          stop(when?: number): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var OscillatorNode: {
          prototype: OscillatorNode;
          new(): OscillatorNode;
      }
      
      interface PageTransitionEvent extends Event {
          persisted: boolean;
      }
      
      declare var PageTransitionEvent: {
          prototype: PageTransitionEvent;
          new(): PageTransitionEvent;
      }
      
      interface PannerNode extends AudioNode {
          coneInnerAngle: number;
          coneOuterAngle: number;
          coneOuterGain: number;
          distanceModel: string;
          maxDistance: number;
          panningModel: string;
          refDistance: number;
          rolloffFactor: number;
          setOrientation(x: number, y: number, z: number): void;
          setPosition(x: number, y: number, z: number): void;
          setVelocity(x: number, y: number, z: number): void;
      }
      
      declare var PannerNode: {
          prototype: PannerNode;
          new(): PannerNode;
      }
      
      interface PerfWidgetExternal {
          activeNetworkRequestCount: number;
          averageFrameTime: number;
          averagePaintTime: number;
          extraInformationEnabled: boolean;
          independentRenderingEnabled: boolean;
          irDisablingContentString: string;
          irStatusAvailable: boolean;
          maxCpuSpeed: number;
          paintRequestsPerSecond: number;
          performanceCounter: number;
          performanceCounterFrequency: number;
          addEventListener(eventType: string, callback: Function): void;
          getMemoryUsage(): number;
          getProcessCpuUsage(): number;
          getRecentCpuUsage(last: number): any;
          getRecentFrames(last: number): any;
          getRecentMemoryUsage(last: number): any;
          getRecentPaintRequests(last: number): any;
          removeEventListener(eventType: string, callback: Function): void;
          repositionWindow(x: number, y: number): void;
          resizeWindow(width: number, height: number): void;
      }
      
      declare var PerfWidgetExternal: {
          prototype: PerfWidgetExternal;
          new(): PerfWidgetExternal;
      }
      
      interface Performance {
          navigation: PerformanceNavigation;
          timing: PerformanceTiming;
          clearMarks(markName?: string): void;
          clearMeasures(measureName?: string): void;
          clearResourceTimings(): void;
          getEntries(): any;
          getEntriesByName(name: string, entryType?: string): any;
          getEntriesByType(entryType: string): any;
          getMarks(markName?: string): any;
          getMeasures(measureName?: string): any;
          mark(markName: string): void;
          measure(measureName: string, startMarkName?: string, endMarkName?: string): void;
          now(): number;
          setResourceTimingBufferSize(maxSize: number): void;
          toJSON(): any;
      }
      
      declare var Performance: {
          prototype: Performance;
          new(): Performance;
      }
      
      interface PerformanceEntry {
          duration: number;
          entryType: string;
          name: string;
          startTime: number;
      }
      
      declare var PerformanceEntry: {
          prototype: PerformanceEntry;
          new(): PerformanceEntry;
      }
      
      interface PerformanceMark extends PerformanceEntry {
      }
      
      declare var PerformanceMark: {
          prototype: PerformanceMark;
          new(): PerformanceMark;
      }
      
      interface PerformanceMeasure extends PerformanceEntry {
      }
      
      declare var PerformanceMeasure: {
          prototype: PerformanceMeasure;
          new(): PerformanceMeasure;
      }
      
      interface PerformanceNavigation {
          redirectCount: number;
          type: number;
          toJSON(): any;
          TYPE_BACK_FORWARD: number;
          TYPE_NAVIGATE: number;
          TYPE_RELOAD: number;
          TYPE_RESERVED: number;
      }
      
      declare var PerformanceNavigation: {
          prototype: PerformanceNavigation;
          new(): PerformanceNavigation;
          TYPE_BACK_FORWARD: number;
          TYPE_NAVIGATE: number;
          TYPE_RELOAD: number;
          TYPE_RESERVED: number;
      }
      
      interface PerformanceNavigationTiming extends PerformanceEntry {
          connectEnd: number;
          connectStart: number;
          domComplete: number;
          domContentLoadedEventEnd: number;
          domContentLoadedEventStart: number;
          domInteractive: number;
          domLoading: number;
          domainLookupEnd: number;
          domainLookupStart: number;
          fetchStart: number;
          loadEventEnd: number;
          loadEventStart: number;
          navigationStart: number;
          redirectCount: number;
          redirectEnd: number;
          redirectStart: number;
          requestStart: number;
          responseEnd: number;
          responseStart: number;
          type: string;
          unloadEventEnd: number;
          unloadEventStart: number;
      }
      
      declare var PerformanceNavigationTiming: {
          prototype: PerformanceNavigationTiming;
          new(): PerformanceNavigationTiming;
      }
      
      interface PerformanceResourceTiming extends PerformanceEntry {
          connectEnd: number;
          connectStart: number;
          domainLookupEnd: number;
          domainLookupStart: number;
          fetchStart: number;
          initiatorType: string;
          redirectEnd: number;
          redirectStart: number;
          requestStart: number;
          responseEnd: number;
          responseStart: number;
      }
      
      declare var PerformanceResourceTiming: {
          prototype: PerformanceResourceTiming;
          new(): PerformanceResourceTiming;
      }
      
      interface PerformanceTiming {
          connectEnd: number;
          connectStart: number;
          domComplete: number;
          domContentLoadedEventEnd: number;
          domContentLoadedEventStart: number;
          domInteractive: number;
          domLoading: number;
          domainLookupEnd: number;
          domainLookupStart: number;
          fetchStart: number;
          loadEventEnd: number;
          loadEventStart: number;
          msFirstPaint: number;
          navigationStart: number;
          redirectEnd: number;
          redirectStart: number;
          requestStart: number;
          responseEnd: number;
          responseStart: number;
          unloadEventEnd: number;
          unloadEventStart: number;
          toJSON(): any;
      }
      
      declare var PerformanceTiming: {
          prototype: PerformanceTiming;
          new(): PerformanceTiming;
      }
      
      interface PeriodicWave {
      }
      
      declare var PeriodicWave: {
          prototype: PeriodicWave;
          new(): PeriodicWave;
      }
      
      interface PermissionRequest extends DeferredPermissionRequest {
          state: string;
          defer(): void;
      }
      
      declare var PermissionRequest: {
          prototype: PermissionRequest;
          new(): PermissionRequest;
      }
      
      interface PermissionRequestedEvent extends Event {
          permissionRequest: PermissionRequest;
      }
      
      declare var PermissionRequestedEvent: {
          prototype: PermissionRequestedEvent;
          new(): PermissionRequestedEvent;
      }
      
      interface Plugin {
          description: string;
          filename: string;
          length: number;
          name: string;
          version: string;
          item(index: number): MimeType;
          namedItem(type: string): MimeType;
          [index: number]: MimeType;
      }
      
      declare var Plugin: {
          prototype: Plugin;
          new(): Plugin;
      }
      
      interface PluginArray {
          length: number;
          item(index: number): Plugin;
          namedItem(name: string): Plugin;
          refresh(reload?: boolean): void;
          [index: number]: Plugin;
      }
      
      declare var PluginArray: {
          prototype: PluginArray;
          new(): PluginArray;
      }
      
      interface PointerEvent extends MouseEvent {
          currentPoint: any;
          height: number;
          hwTimestamp: number;
          intermediatePoints: any;
          isPrimary: boolean;
          pointerId: number;
          pointerType: any;
          pressure: number;
          rotation: number;
          tiltX: number;
          tiltY: number;
          width: number;
          getCurrentPoint(element: Element): void;
          getIntermediatePoints(element: Element): void;
          initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
      }
      
      declare var PointerEvent: {
          prototype: PointerEvent;
          new(typeArg: string, eventInitDict?: PointerEventInit): PointerEvent;
      }
      
      interface PopStateEvent extends Event {
          state: any;
          initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void;
      }
      
      declare var PopStateEvent: {
          prototype: PopStateEvent;
          new(): PopStateEvent;
      }
      
      interface Position {
          coords: Coordinates;
          timestamp: Date;
      }
      
      declare var Position: {
          prototype: Position;
          new(): Position;
      }
      
      interface PositionError {
          code: number;
          message: string;
          toString(): string;
          PERMISSION_DENIED: number;
          POSITION_UNAVAILABLE: number;
          TIMEOUT: number;
      }
      
      declare var PositionError: {
          prototype: PositionError;
          new(): PositionError;
          PERMISSION_DENIED: number;
          POSITION_UNAVAILABLE: number;
          TIMEOUT: number;
      }
      
      interface ProcessingInstruction extends CharacterData {
          target: string;
      }
      
      declare var ProcessingInstruction: {
          prototype: ProcessingInstruction;
          new(): ProcessingInstruction;
      }
      
      interface ProgressEvent extends Event {
          lengthComputable: boolean;
          loaded: number;
          total: number;
          initProgressEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, lengthComputableArg: boolean, loadedArg: number, totalArg: number): void;
      }
      
      declare var ProgressEvent: {
          prototype: ProgressEvent;
          new(): ProgressEvent;
      }
      
      interface Range {
          collapsed: boolean;
          commonAncestorContainer: Node;
          endContainer: Node;
          endOffset: number;
          startContainer: Node;
          startOffset: number;
          cloneContents(): DocumentFragment;
          cloneRange(): Range;
          collapse(toStart: boolean): void;
          compareBoundaryPoints(how: number, sourceRange: Range): number;
          createContextualFragment(fragment: string): DocumentFragment;
          deleteContents(): void;
          detach(): void;
          expand(Unit: string): boolean;
          extractContents(): DocumentFragment;
          getBoundingClientRect(): ClientRect;
          getClientRects(): ClientRectList;
          insertNode(newNode: Node): void;
          selectNode(refNode: Node): void;
          selectNodeContents(refNode: Node): void;
          setEnd(refNode: Node, offset: number): void;
          setEndAfter(refNode: Node): void;
          setEndBefore(refNode: Node): void;
          setStart(refNode: Node, offset: number): void;
          setStartAfter(refNode: Node): void;
          setStartBefore(refNode: Node): void;
          surroundContents(newParent: Node): void;
          toString(): string;
          END_TO_END: number;
          END_TO_START: number;
          START_TO_END: number;
          START_TO_START: number;
      }
      
      declare var Range: {
          prototype: Range;
          new(): Range;
          END_TO_END: number;
          END_TO_START: number;
          START_TO_END: number;
          START_TO_START: number;
      }
      
      interface SVGAElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGURIReference {
          target: SVGAnimatedString;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGAElement: {
          prototype: SVGAElement;
          new(): SVGAElement;
      }
      
      interface SVGAngle {
          unitType: number;
          value: number;
          valueAsString: string;
          valueInSpecifiedUnits: number;
          convertToSpecifiedUnits(unitType: number): void;
          newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
          SVG_ANGLETYPE_DEG: number;
          SVG_ANGLETYPE_GRAD: number;
          SVG_ANGLETYPE_RAD: number;
          SVG_ANGLETYPE_UNKNOWN: number;
          SVG_ANGLETYPE_UNSPECIFIED: number;
      }
      
      declare var SVGAngle: {
          prototype: SVGAngle;
          new(): SVGAngle;
          SVG_ANGLETYPE_DEG: number;
          SVG_ANGLETYPE_GRAD: number;
          SVG_ANGLETYPE_RAD: number;
          SVG_ANGLETYPE_UNKNOWN: number;
          SVG_ANGLETYPE_UNSPECIFIED: number;
      }
      
      interface SVGAnimatedAngle {
          animVal: SVGAngle;
          baseVal: SVGAngle;
      }
      
      declare var SVGAnimatedAngle: {
          prototype: SVGAnimatedAngle;
          new(): SVGAnimatedAngle;
      }
      
      interface SVGAnimatedBoolean {
          animVal: boolean;
          baseVal: boolean;
      }
      
      declare var SVGAnimatedBoolean: {
          prototype: SVGAnimatedBoolean;
          new(): SVGAnimatedBoolean;
      }
      
      interface SVGAnimatedEnumeration {
          animVal: number;
          baseVal: number;
      }
      
      declare var SVGAnimatedEnumeration: {
          prototype: SVGAnimatedEnumeration;
          new(): SVGAnimatedEnumeration;
      }
      
      interface SVGAnimatedInteger {
          animVal: number;
          baseVal: number;
      }
      
      declare var SVGAnimatedInteger: {
          prototype: SVGAnimatedInteger;
          new(): SVGAnimatedInteger;
      }
      
      interface SVGAnimatedLength {
          animVal: SVGLength;
          baseVal: SVGLength;
      }
      
      declare var SVGAnimatedLength: {
          prototype: SVGAnimatedLength;
          new(): SVGAnimatedLength;
      }
      
      interface SVGAnimatedLengthList {
          animVal: SVGLengthList;
          baseVal: SVGLengthList;
      }
      
      declare var SVGAnimatedLengthList: {
          prototype: SVGAnimatedLengthList;
          new(): SVGAnimatedLengthList;
      }
      
      interface SVGAnimatedNumber {
          animVal: number;
          baseVal: number;
      }
      
      declare var SVGAnimatedNumber: {
          prototype: SVGAnimatedNumber;
          new(): SVGAnimatedNumber;
      }
      
      interface SVGAnimatedNumberList {
          animVal: SVGNumberList;
          baseVal: SVGNumberList;
      }
      
      declare var SVGAnimatedNumberList: {
          prototype: SVGAnimatedNumberList;
          new(): SVGAnimatedNumberList;
      }
      
      interface SVGAnimatedPreserveAspectRatio {
          animVal: SVGPreserveAspectRatio;
          baseVal: SVGPreserveAspectRatio;
      }
      
      declare var SVGAnimatedPreserveAspectRatio: {
          prototype: SVGAnimatedPreserveAspectRatio;
          new(): SVGAnimatedPreserveAspectRatio;
      }
      
      interface SVGAnimatedRect {
          animVal: SVGRect;
          baseVal: SVGRect;
      }
      
      declare var SVGAnimatedRect: {
          prototype: SVGAnimatedRect;
          new(): SVGAnimatedRect;
      }
      
      interface SVGAnimatedString {
          animVal: string;
          baseVal: string;
      }
      
      declare var SVGAnimatedString: {
          prototype: SVGAnimatedString;
          new(): SVGAnimatedString;
      }
      
      interface SVGAnimatedTransformList {
          animVal: SVGTransformList;
          baseVal: SVGTransformList;
      }
      
      declare var SVGAnimatedTransformList: {
          prototype: SVGAnimatedTransformList;
          new(): SVGAnimatedTransformList;
      }
      
      interface SVGCircleElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          cx: SVGAnimatedLength;
          cy: SVGAnimatedLength;
          r: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGCircleElement: {
          prototype: SVGCircleElement;
          new(): SVGCircleElement;
      }
      
      interface SVGClipPathElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGUnitTypes {
          clipPathUnits: SVGAnimatedEnumeration;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGClipPathElement: {
          prototype: SVGClipPathElement;
          new(): SVGClipPathElement;
      }
      
      interface SVGComponentTransferFunctionElement extends SVGElement {
          amplitude: SVGAnimatedNumber;
          exponent: SVGAnimatedNumber;
          intercept: SVGAnimatedNumber;
          offset: SVGAnimatedNumber;
          slope: SVGAnimatedNumber;
          tableValues: SVGAnimatedNumberList;
          type: SVGAnimatedEnumeration;
          SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
          SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
          SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
          SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
          SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
          SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
      }
      
      declare var SVGComponentTransferFunctionElement: {
          prototype: SVGComponentTransferFunctionElement;
          new(): SVGComponentTransferFunctionElement;
          SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
          SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
          SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
          SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
          SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
          SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
      }
      
      interface SVGDefsElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGDefsElement: {
          prototype: SVGDefsElement;
          new(): SVGDefsElement;
      }
      
      interface SVGDescElement extends SVGElement, SVGStylable, SVGLangSpace {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGDescElement: {
          prototype: SVGDescElement;
          new(): SVGDescElement;
      }
      
      interface SVGElement extends Element {
          id: string;
          onclick: (ev: MouseEvent) => any;
          ondblclick: (ev: MouseEvent) => any;
          onfocusin: (ev: FocusEvent) => any;
          onfocusout: (ev: FocusEvent) => any;
          onload: (ev: Event) => any;
          onmousedown: (ev: MouseEvent) => any;
          onmousemove: (ev: MouseEvent) => any;
          onmouseout: (ev: MouseEvent) => any;
          onmouseover: (ev: MouseEvent) => any;
          onmouseup: (ev: MouseEvent) => any;
          ownerSVGElement: SVGSVGElement;
          viewportElement: SVGElement;
          xmlbase: string;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGElement: {
          prototype: SVGElement;
          new(): SVGElement;
      }
      
      interface SVGElementInstance extends EventTarget {
          childNodes: SVGElementInstanceList;
          correspondingElement: SVGElement;
          correspondingUseElement: SVGUseElement;
          firstChild: SVGElementInstance;
          lastChild: SVGElementInstance;
          nextSibling: SVGElementInstance;
          parentNode: SVGElementInstance;
          previousSibling: SVGElementInstance;
      }
      
      declare var SVGElementInstance: {
          prototype: SVGElementInstance;
          new(): SVGElementInstance;
      }
      
      interface SVGElementInstanceList {
          length: number;
          item(index: number): SVGElementInstance;
      }
      
      declare var SVGElementInstanceList: {
          prototype: SVGElementInstanceList;
          new(): SVGElementInstanceList;
      }
      
      interface SVGEllipseElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          cx: SVGAnimatedLength;
          cy: SVGAnimatedLength;
          rx: SVGAnimatedLength;
          ry: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGEllipseElement: {
          prototype: SVGEllipseElement;
          new(): SVGEllipseElement;
      }
      
      interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          in2: SVGAnimatedString;
          mode: SVGAnimatedEnumeration;
          SVG_FEBLEND_MODE_COLOR: number;
          SVG_FEBLEND_MODE_COLOR_BURN: number;
          SVG_FEBLEND_MODE_COLOR_DODGE: number;
          SVG_FEBLEND_MODE_DARKEN: number;
          SVG_FEBLEND_MODE_DIFFERENCE: number;
          SVG_FEBLEND_MODE_EXCLUSION: number;
          SVG_FEBLEND_MODE_HARD_LIGHT: number;
          SVG_FEBLEND_MODE_HUE: number;
          SVG_FEBLEND_MODE_LIGHTEN: number;
          SVG_FEBLEND_MODE_LUMINOSITY: number;
          SVG_FEBLEND_MODE_MULTIPLY: number;
          SVG_FEBLEND_MODE_NORMAL: number;
          SVG_FEBLEND_MODE_OVERLAY: number;
          SVG_FEBLEND_MODE_SATURATION: number;
          SVG_FEBLEND_MODE_SCREEN: number;
          SVG_FEBLEND_MODE_SOFT_LIGHT: number;
          SVG_FEBLEND_MODE_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEBlendElement: {
          prototype: SVGFEBlendElement;
          new(): SVGFEBlendElement;
          SVG_FEBLEND_MODE_COLOR: number;
          SVG_FEBLEND_MODE_COLOR_BURN: number;
          SVG_FEBLEND_MODE_COLOR_DODGE: number;
          SVG_FEBLEND_MODE_DARKEN: number;
          SVG_FEBLEND_MODE_DIFFERENCE: number;
          SVG_FEBLEND_MODE_EXCLUSION: number;
          SVG_FEBLEND_MODE_HARD_LIGHT: number;
          SVG_FEBLEND_MODE_HUE: number;
          SVG_FEBLEND_MODE_LIGHTEN: number;
          SVG_FEBLEND_MODE_LUMINOSITY: number;
          SVG_FEBLEND_MODE_MULTIPLY: number;
          SVG_FEBLEND_MODE_NORMAL: number;
          SVG_FEBLEND_MODE_OVERLAY: number;
          SVG_FEBLEND_MODE_SATURATION: number;
          SVG_FEBLEND_MODE_SCREEN: number;
          SVG_FEBLEND_MODE_SOFT_LIGHT: number;
          SVG_FEBLEND_MODE_UNKNOWN: number;
      }
      
      interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          type: SVGAnimatedEnumeration;
          values: SVGAnimatedNumberList;
          SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
          SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
          SVG_FECOLORMATRIX_TYPE_MATRIX: number;
          SVG_FECOLORMATRIX_TYPE_SATURATE: number;
          SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEColorMatrixElement: {
          prototype: SVGFEColorMatrixElement;
          new(): SVGFEColorMatrixElement;
          SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
          SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
          SVG_FECOLORMATRIX_TYPE_MATRIX: number;
          SVG_FECOLORMATRIX_TYPE_SATURATE: number;
          SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
      }
      
      interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEComponentTransferElement: {
          prototype: SVGFEComponentTransferElement;
          new(): SVGFEComponentTransferElement;
      }
      
      interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          in2: SVGAnimatedString;
          k1: SVGAnimatedNumber;
          k2: SVGAnimatedNumber;
          k3: SVGAnimatedNumber;
          k4: SVGAnimatedNumber;
          operator: SVGAnimatedEnumeration;
          SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
          SVG_FECOMPOSITE_OPERATOR_ATOP: number;
          SVG_FECOMPOSITE_OPERATOR_IN: number;
          SVG_FECOMPOSITE_OPERATOR_OUT: number;
          SVG_FECOMPOSITE_OPERATOR_OVER: number;
          SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
          SVG_FECOMPOSITE_OPERATOR_XOR: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFECompositeElement: {
          prototype: SVGFECompositeElement;
          new(): SVGFECompositeElement;
          SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
          SVG_FECOMPOSITE_OPERATOR_ATOP: number;
          SVG_FECOMPOSITE_OPERATOR_IN: number;
          SVG_FECOMPOSITE_OPERATOR_OUT: number;
          SVG_FECOMPOSITE_OPERATOR_OVER: number;
          SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
          SVG_FECOMPOSITE_OPERATOR_XOR: number;
      }
      
      interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          bias: SVGAnimatedNumber;
          divisor: SVGAnimatedNumber;
          edgeMode: SVGAnimatedEnumeration;
          in1: SVGAnimatedString;
          kernelMatrix: SVGAnimatedNumberList;
          kernelUnitLengthX: SVGAnimatedNumber;
          kernelUnitLengthY: SVGAnimatedNumber;
          orderX: SVGAnimatedInteger;
          orderY: SVGAnimatedInteger;
          preserveAlpha: SVGAnimatedBoolean;
          targetX: SVGAnimatedInteger;
          targetY: SVGAnimatedInteger;
          SVG_EDGEMODE_DUPLICATE: number;
          SVG_EDGEMODE_NONE: number;
          SVG_EDGEMODE_UNKNOWN: number;
          SVG_EDGEMODE_WRAP: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEConvolveMatrixElement: {
          prototype: SVGFEConvolveMatrixElement;
          new(): SVGFEConvolveMatrixElement;
          SVG_EDGEMODE_DUPLICATE: number;
          SVG_EDGEMODE_NONE: number;
          SVG_EDGEMODE_UNKNOWN: number;
          SVG_EDGEMODE_WRAP: number;
      }
      
      interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          diffuseConstant: SVGAnimatedNumber;
          in1: SVGAnimatedString;
          kernelUnitLengthX: SVGAnimatedNumber;
          kernelUnitLengthY: SVGAnimatedNumber;
          surfaceScale: SVGAnimatedNumber;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEDiffuseLightingElement: {
          prototype: SVGFEDiffuseLightingElement;
          new(): SVGFEDiffuseLightingElement;
      }
      
      interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          in2: SVGAnimatedString;
          scale: SVGAnimatedNumber;
          xChannelSelector: SVGAnimatedEnumeration;
          yChannelSelector: SVGAnimatedEnumeration;
          SVG_CHANNEL_A: number;
          SVG_CHANNEL_B: number;
          SVG_CHANNEL_G: number;
          SVG_CHANNEL_R: number;
          SVG_CHANNEL_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEDisplacementMapElement: {
          prototype: SVGFEDisplacementMapElement;
          new(): SVGFEDisplacementMapElement;
          SVG_CHANNEL_A: number;
          SVG_CHANNEL_B: number;
          SVG_CHANNEL_G: number;
          SVG_CHANNEL_R: number;
          SVG_CHANNEL_UNKNOWN: number;
      }
      
      interface SVGFEDistantLightElement extends SVGElement {
          azimuth: SVGAnimatedNumber;
          elevation: SVGAnimatedNumber;
      }
      
      declare var SVGFEDistantLightElement: {
          prototype: SVGFEDistantLightElement;
          new(): SVGFEDistantLightElement;
      }
      
      interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEFloodElement: {
          prototype: SVGFEFloodElement;
          new(): SVGFEFloodElement;
      }
      
      interface SVGFEFuncAElement extends SVGComponentTransferFunctionElement {
      }
      
      declare var SVGFEFuncAElement: {
          prototype: SVGFEFuncAElement;
          new(): SVGFEFuncAElement;
      }
      
      interface SVGFEFuncBElement extends SVGComponentTransferFunctionElement {
      }
      
      declare var SVGFEFuncBElement: {
          prototype: SVGFEFuncBElement;
          new(): SVGFEFuncBElement;
      }
      
      interface SVGFEFuncGElement extends SVGComponentTransferFunctionElement {
      }
      
      declare var SVGFEFuncGElement: {
          prototype: SVGFEFuncGElement;
          new(): SVGFEFuncGElement;
      }
      
      interface SVGFEFuncRElement extends SVGComponentTransferFunctionElement {
      }
      
      declare var SVGFEFuncRElement: {
          prototype: SVGFEFuncRElement;
          new(): SVGFEFuncRElement;
      }
      
      interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          stdDeviationX: SVGAnimatedNumber;
          stdDeviationY: SVGAnimatedNumber;
          setStdDeviation(stdDeviationX: number, stdDeviationY: number): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEGaussianBlurElement: {
          prototype: SVGFEGaussianBlurElement;
          new(): SVGFEGaussianBlurElement;
      }
      
      interface SVGFEImageElement extends SVGElement, SVGFilterPrimitiveStandardAttributes, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired {
          preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEImageElement: {
          prototype: SVGFEImageElement;
          new(): SVGFEImageElement;
      }
      
      interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEMergeElement: {
          prototype: SVGFEMergeElement;
          new(): SVGFEMergeElement;
      }
      
      interface SVGFEMergeNodeElement extends SVGElement {
          in1: SVGAnimatedString;
      }
      
      declare var SVGFEMergeNodeElement: {
          prototype: SVGFEMergeNodeElement;
          new(): SVGFEMergeNodeElement;
      }
      
      interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          operator: SVGAnimatedEnumeration;
          radiusX: SVGAnimatedNumber;
          radiusY: SVGAnimatedNumber;
          SVG_MORPHOLOGY_OPERATOR_DILATE: number;
          SVG_MORPHOLOGY_OPERATOR_ERODE: number;
          SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEMorphologyElement: {
          prototype: SVGFEMorphologyElement;
          new(): SVGFEMorphologyElement;
          SVG_MORPHOLOGY_OPERATOR_DILATE: number;
          SVG_MORPHOLOGY_OPERATOR_ERODE: number;
          SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
      }
      
      interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          dx: SVGAnimatedNumber;
          dy: SVGAnimatedNumber;
          in1: SVGAnimatedString;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFEOffsetElement: {
          prototype: SVGFEOffsetElement;
          new(): SVGFEOffsetElement;
      }
      
      interface SVGFEPointLightElement extends SVGElement {
          x: SVGAnimatedNumber;
          y: SVGAnimatedNumber;
          z: SVGAnimatedNumber;
      }
      
      declare var SVGFEPointLightElement: {
          prototype: SVGFEPointLightElement;
          new(): SVGFEPointLightElement;
      }
      
      interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          kernelUnitLengthX: SVGAnimatedNumber;
          kernelUnitLengthY: SVGAnimatedNumber;
          specularConstant: SVGAnimatedNumber;
          specularExponent: SVGAnimatedNumber;
          surfaceScale: SVGAnimatedNumber;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFESpecularLightingElement: {
          prototype: SVGFESpecularLightingElement;
          new(): SVGFESpecularLightingElement;
      }
      
      interface SVGFESpotLightElement extends SVGElement {
          limitingConeAngle: SVGAnimatedNumber;
          pointsAtX: SVGAnimatedNumber;
          pointsAtY: SVGAnimatedNumber;
          pointsAtZ: SVGAnimatedNumber;
          specularExponent: SVGAnimatedNumber;
          x: SVGAnimatedNumber;
          y: SVGAnimatedNumber;
          z: SVGAnimatedNumber;
      }
      
      declare var SVGFESpotLightElement: {
          prototype: SVGFESpotLightElement;
          new(): SVGFESpotLightElement;
      }
      
      interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          in1: SVGAnimatedString;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFETileElement: {
          prototype: SVGFETileElement;
          new(): SVGFETileElement;
      }
      
      interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
          baseFrequencyX: SVGAnimatedNumber;
          baseFrequencyY: SVGAnimatedNumber;
          numOctaves: SVGAnimatedInteger;
          seed: SVGAnimatedNumber;
          stitchTiles: SVGAnimatedEnumeration;
          type: SVGAnimatedEnumeration;
          SVG_STITCHTYPE_NOSTITCH: number;
          SVG_STITCHTYPE_STITCH: number;
          SVG_STITCHTYPE_UNKNOWN: number;
          SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
          SVG_TURBULENCE_TYPE_TURBULENCE: number;
          SVG_TURBULENCE_TYPE_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFETurbulenceElement: {
          prototype: SVGFETurbulenceElement;
          new(): SVGFETurbulenceElement;
          SVG_STITCHTYPE_NOSTITCH: number;
          SVG_STITCHTYPE_STITCH: number;
          SVG_STITCHTYPE_UNKNOWN: number;
          SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
          SVG_TURBULENCE_TYPE_TURBULENCE: number;
          SVG_TURBULENCE_TYPE_UNKNOWN: number;
      }
      
      interface SVGFilterElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired {
          filterResX: SVGAnimatedInteger;
          filterResY: SVGAnimatedInteger;
          filterUnits: SVGAnimatedEnumeration;
          height: SVGAnimatedLength;
          primitiveUnits: SVGAnimatedEnumeration;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          setFilterRes(filterResX: number, filterResY: number): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGFilterElement: {
          prototype: SVGFilterElement;
          new(): SVGFilterElement;
      }
      
      interface SVGForeignObjectElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          height: SVGAnimatedLength;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGForeignObjectElement: {
          prototype: SVGForeignObjectElement;
          new(): SVGForeignObjectElement;
      }
      
      interface SVGGElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGGElement: {
          prototype: SVGGElement;
          new(): SVGGElement;
      }
      
      interface SVGGradientElement extends SVGElement, SVGStylable, SVGExternalResourcesRequired, SVGURIReference, SVGUnitTypes {
          gradientTransform: SVGAnimatedTransformList;
          gradientUnits: SVGAnimatedEnumeration;
          spreadMethod: SVGAnimatedEnumeration;
          SVG_SPREADMETHOD_PAD: number;
          SVG_SPREADMETHOD_REFLECT: number;
          SVG_SPREADMETHOD_REPEAT: number;
          SVG_SPREADMETHOD_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGGradientElement: {
          prototype: SVGGradientElement;
          new(): SVGGradientElement;
          SVG_SPREADMETHOD_PAD: number;
          SVG_SPREADMETHOD_REFLECT: number;
          SVG_SPREADMETHOD_REPEAT: number;
          SVG_SPREADMETHOD_UNKNOWN: number;
      }
      
      interface SVGImageElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGURIReference {
          height: SVGAnimatedLength;
          preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGImageElement: {
          prototype: SVGImageElement;
          new(): SVGImageElement;
      }
      
      interface SVGLength {
          unitType: number;
          value: number;
          valueAsString: string;
          valueInSpecifiedUnits: number;
          convertToSpecifiedUnits(unitType: number): void;
          newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
          SVG_LENGTHTYPE_CM: number;
          SVG_LENGTHTYPE_EMS: number;
          SVG_LENGTHTYPE_EXS: number;
          SVG_LENGTHTYPE_IN: number;
          SVG_LENGTHTYPE_MM: number;
          SVG_LENGTHTYPE_NUMBER: number;
          SVG_LENGTHTYPE_PC: number;
          SVG_LENGTHTYPE_PERCENTAGE: number;
          SVG_LENGTHTYPE_PT: number;
          SVG_LENGTHTYPE_PX: number;
          SVG_LENGTHTYPE_UNKNOWN: number;
      }
      
      declare var SVGLength: {
          prototype: SVGLength;
          new(): SVGLength;
          SVG_LENGTHTYPE_CM: number;
          SVG_LENGTHTYPE_EMS: number;
          SVG_LENGTHTYPE_EXS: number;
          SVG_LENGTHTYPE_IN: number;
          SVG_LENGTHTYPE_MM: number;
          SVG_LENGTHTYPE_NUMBER: number;
          SVG_LENGTHTYPE_PC: number;
          SVG_LENGTHTYPE_PERCENTAGE: number;
          SVG_LENGTHTYPE_PT: number;
          SVG_LENGTHTYPE_PX: number;
          SVG_LENGTHTYPE_UNKNOWN: number;
      }
      
      interface SVGLengthList {
          numberOfItems: number;
          appendItem(newItem: SVGLength): SVGLength;
          clear(): void;
          getItem(index: number): SVGLength;
          initialize(newItem: SVGLength): SVGLength;
          insertItemBefore(newItem: SVGLength, index: number): SVGLength;
          removeItem(index: number): SVGLength;
          replaceItem(newItem: SVGLength, index: number): SVGLength;
      }
      
      declare var SVGLengthList: {
          prototype: SVGLengthList;
          new(): SVGLengthList;
      }
      
      interface SVGLineElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          x1: SVGAnimatedLength;
          x2: SVGAnimatedLength;
          y1: SVGAnimatedLength;
          y2: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGLineElement: {
          prototype: SVGLineElement;
          new(): SVGLineElement;
      }
      
      interface SVGLinearGradientElement extends SVGGradientElement {
          x1: SVGAnimatedLength;
          x2: SVGAnimatedLength;
          y1: SVGAnimatedLength;
          y2: SVGAnimatedLength;
      }
      
      declare var SVGLinearGradientElement: {
          prototype: SVGLinearGradientElement;
          new(): SVGLinearGradientElement;
      }
      
      interface SVGMarkerElement extends SVGElement, SVGStylable, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox {
          markerHeight: SVGAnimatedLength;
          markerUnits: SVGAnimatedEnumeration;
          markerWidth: SVGAnimatedLength;
          orientAngle: SVGAnimatedAngle;
          orientType: SVGAnimatedEnumeration;
          refX: SVGAnimatedLength;
          refY: SVGAnimatedLength;
          setOrientToAngle(angle: SVGAngle): void;
          setOrientToAuto(): void;
          SVG_MARKERUNITS_STROKEWIDTH: number;
          SVG_MARKERUNITS_UNKNOWN: number;
          SVG_MARKERUNITS_USERSPACEONUSE: number;
          SVG_MARKER_ORIENT_ANGLE: number;
          SVG_MARKER_ORIENT_AUTO: number;
          SVG_MARKER_ORIENT_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGMarkerElement: {
          prototype: SVGMarkerElement;
          new(): SVGMarkerElement;
          SVG_MARKERUNITS_STROKEWIDTH: number;
          SVG_MARKERUNITS_UNKNOWN: number;
          SVG_MARKERUNITS_USERSPACEONUSE: number;
          SVG_MARKER_ORIENT_ANGLE: number;
          SVG_MARKER_ORIENT_AUTO: number;
          SVG_MARKER_ORIENT_UNKNOWN: number;
      }
      
      interface SVGMaskElement extends SVGElement, SVGStylable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGUnitTypes {
          height: SVGAnimatedLength;
          maskContentUnits: SVGAnimatedEnumeration;
          maskUnits: SVGAnimatedEnumeration;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGMaskElement: {
          prototype: SVGMaskElement;
          new(): SVGMaskElement;
      }
      
      interface SVGMatrix {
          a: number;
          b: number;
          c: number;
          d: number;
          e: number;
          f: number;
          flipX(): SVGMatrix;
          flipY(): SVGMatrix;
          inverse(): SVGMatrix;
          multiply(secondMatrix: SVGMatrix): SVGMatrix;
          rotate(angle: number): SVGMatrix;
          rotateFromVector(x: number, y: number): SVGMatrix;
          scale(scaleFactor: number): SVGMatrix;
          scaleNonUniform(scaleFactorX: number, scaleFactorY: number): SVGMatrix;
          skewX(angle: number): SVGMatrix;
          skewY(angle: number): SVGMatrix;
          translate(x: number, y: number): SVGMatrix;
      }
      
      declare var SVGMatrix: {
          prototype: SVGMatrix;
          new(): SVGMatrix;
      }
      
      interface SVGMetadataElement extends SVGElement {
      }
      
      declare var SVGMetadataElement: {
          prototype: SVGMetadataElement;
          new(): SVGMetadataElement;
      }
      
      interface SVGNumber {
          value: number;
      }
      
      declare var SVGNumber: {
          prototype: SVGNumber;
          new(): SVGNumber;
      }
      
      interface SVGNumberList {
          numberOfItems: number;
          appendItem(newItem: SVGNumber): SVGNumber;
          clear(): void;
          getItem(index: number): SVGNumber;
          initialize(newItem: SVGNumber): SVGNumber;
          insertItemBefore(newItem: SVGNumber, index: number): SVGNumber;
          removeItem(index: number): SVGNumber;
          replaceItem(newItem: SVGNumber, index: number): SVGNumber;
      }
      
      declare var SVGNumberList: {
          prototype: SVGNumberList;
          new(): SVGNumberList;
      }
      
      interface SVGPathElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGAnimatedPathData {
          createSVGPathSegArcAbs(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcAbs;
          createSVGPathSegArcRel(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcRel;
          createSVGPathSegClosePath(): SVGPathSegClosePath;
          createSVGPathSegCurvetoCubicAbs(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicAbs;
          createSVGPathSegCurvetoCubicRel(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicRel;
          createSVGPathSegCurvetoCubicSmoothAbs(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothAbs;
          createSVGPathSegCurvetoCubicSmoothRel(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothRel;
          createSVGPathSegCurvetoQuadraticAbs(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticAbs;
          createSVGPathSegCurvetoQuadraticRel(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticRel;
          createSVGPathSegCurvetoQuadraticSmoothAbs(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothAbs;
          createSVGPathSegCurvetoQuadraticSmoothRel(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothRel;
          createSVGPathSegLinetoAbs(x: number, y: number): SVGPathSegLinetoAbs;
          createSVGPathSegLinetoHorizontalAbs(x: number): SVGPathSegLinetoHorizontalAbs;
          createSVGPathSegLinetoHorizontalRel(x: number): SVGPathSegLinetoHorizontalRel;
          createSVGPathSegLinetoRel(x: number, y: number): SVGPathSegLinetoRel;
          createSVGPathSegLinetoVerticalAbs(y: number): SVGPathSegLinetoVerticalAbs;
          createSVGPathSegLinetoVerticalRel(y: number): SVGPathSegLinetoVerticalRel;
          createSVGPathSegMovetoAbs(x: number, y: number): SVGPathSegMovetoAbs;
          createSVGPathSegMovetoRel(x: number, y: number): SVGPathSegMovetoRel;
          getPathSegAtLength(distance: number): number;
          getPointAtLength(distance: number): SVGPoint;
          getTotalLength(): number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGPathElement: {
          prototype: SVGPathElement;
          new(): SVGPathElement;
      }
      
      interface SVGPathSeg {
          pathSegType: number;
          pathSegTypeAsLetter: string;
          PATHSEG_ARC_ABS: number;
          PATHSEG_ARC_REL: number;
          PATHSEG_CLOSEPATH: number;
          PATHSEG_CURVETO_CUBIC_ABS: number;
          PATHSEG_CURVETO_CUBIC_REL: number;
          PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
          PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
          PATHSEG_CURVETO_QUADRATIC_ABS: number;
          PATHSEG_CURVETO_QUADRATIC_REL: number;
          PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
          PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
          PATHSEG_LINETO_ABS: number;
          PATHSEG_LINETO_HORIZONTAL_ABS: number;
          PATHSEG_LINETO_HORIZONTAL_REL: number;
          PATHSEG_LINETO_REL: number;
          PATHSEG_LINETO_VERTICAL_ABS: number;
          PATHSEG_LINETO_VERTICAL_REL: number;
          PATHSEG_MOVETO_ABS: number;
          PATHSEG_MOVETO_REL: number;
          PATHSEG_UNKNOWN: number;
      }
      
      declare var SVGPathSeg: {
          prototype: SVGPathSeg;
          new(): SVGPathSeg;
          PATHSEG_ARC_ABS: number;
          PATHSEG_ARC_REL: number;
          PATHSEG_CLOSEPATH: number;
          PATHSEG_CURVETO_CUBIC_ABS: number;
          PATHSEG_CURVETO_CUBIC_REL: number;
          PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
          PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
          PATHSEG_CURVETO_QUADRATIC_ABS: number;
          PATHSEG_CURVETO_QUADRATIC_REL: number;
          PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
          PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
          PATHSEG_LINETO_ABS: number;
          PATHSEG_LINETO_HORIZONTAL_ABS: number;
          PATHSEG_LINETO_HORIZONTAL_REL: number;
          PATHSEG_LINETO_REL: number;
          PATHSEG_LINETO_VERTICAL_ABS: number;
          PATHSEG_LINETO_VERTICAL_REL: number;
          PATHSEG_MOVETO_ABS: number;
          PATHSEG_MOVETO_REL: number;
          PATHSEG_UNKNOWN: number;
      }
      
      interface SVGPathSegArcAbs extends SVGPathSeg {
          angle: number;
          largeArcFlag: boolean;
          r1: number;
          r2: number;
          sweepFlag: boolean;
          x: number;
          y: number;
      }
      
      declare var SVGPathSegArcAbs: {
          prototype: SVGPathSegArcAbs;
          new(): SVGPathSegArcAbs;
      }
      
      interface SVGPathSegArcRel extends SVGPathSeg {
          angle: number;
          largeArcFlag: boolean;
          r1: number;
          r2: number;
          sweepFlag: boolean;
          x: number;
          y: number;
      }
      
      declare var SVGPathSegArcRel: {
          prototype: SVGPathSegArcRel;
          new(): SVGPathSegArcRel;
      }
      
      interface SVGPathSegClosePath extends SVGPathSeg {
      }
      
      declare var SVGPathSegClosePath: {
          prototype: SVGPathSegClosePath;
          new(): SVGPathSegClosePath;
      }
      
      interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
          x: number;
          x1: number;
          x2: number;
          y: number;
          y1: number;
          y2: number;
      }
      
      declare var SVGPathSegCurvetoCubicAbs: {
          prototype: SVGPathSegCurvetoCubicAbs;
          new(): SVGPathSegCurvetoCubicAbs;
      }
      
      interface SVGPathSegCurvetoCubicRel extends SVGPathSeg {
          x: number;
          x1: number;
          x2: number;
          y: number;
          y1: number;
          y2: number;
      }
      
      declare var SVGPathSegCurvetoCubicRel: {
          prototype: SVGPathSegCurvetoCubicRel;
          new(): SVGPathSegCurvetoCubicRel;
      }
      
      interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
          x: number;
          x2: number;
          y: number;
          y2: number;
      }
      
      declare var SVGPathSegCurvetoCubicSmoothAbs: {
          prototype: SVGPathSegCurvetoCubicSmoothAbs;
          new(): SVGPathSegCurvetoCubicSmoothAbs;
      }
      
      interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
          x: number;
          x2: number;
          y: number;
          y2: number;
      }
      
      declare var SVGPathSegCurvetoCubicSmoothRel: {
          prototype: SVGPathSegCurvetoCubicSmoothRel;
          new(): SVGPathSegCurvetoCubicSmoothRel;
      }
      
      interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
          x: number;
          x1: number;
          y: number;
          y1: number;
      }
      
      declare var SVGPathSegCurvetoQuadraticAbs: {
          prototype: SVGPathSegCurvetoQuadraticAbs;
          new(): SVGPathSegCurvetoQuadraticAbs;
      }
      
      interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
          x: number;
          x1: number;
          y: number;
          y1: number;
      }
      
      declare var SVGPathSegCurvetoQuadraticRel: {
          prototype: SVGPathSegCurvetoQuadraticRel;
          new(): SVGPathSegCurvetoQuadraticRel;
      }
      
      interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
          x: number;
          y: number;
      }
      
      declare var SVGPathSegCurvetoQuadraticSmoothAbs: {
          prototype: SVGPathSegCurvetoQuadraticSmoothAbs;
          new(): SVGPathSegCurvetoQuadraticSmoothAbs;
      }
      
      interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
          x: number;
          y: number;
      }
      
      declare var SVGPathSegCurvetoQuadraticSmoothRel: {
          prototype: SVGPathSegCurvetoQuadraticSmoothRel;
          new(): SVGPathSegCurvetoQuadraticSmoothRel;
      }
      
      interface SVGPathSegLinetoAbs extends SVGPathSeg {
          x: number;
          y: number;
      }
      
      declare var SVGPathSegLinetoAbs: {
          prototype: SVGPathSegLinetoAbs;
          new(): SVGPathSegLinetoAbs;
      }
      
      interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
          x: number;
      }
      
      declare var SVGPathSegLinetoHorizontalAbs: {
          prototype: SVGPathSegLinetoHorizontalAbs;
          new(): SVGPathSegLinetoHorizontalAbs;
      }
      
      interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
          x: number;
      }
      
      declare var SVGPathSegLinetoHorizontalRel: {
          prototype: SVGPathSegLinetoHorizontalRel;
          new(): SVGPathSegLinetoHorizontalRel;
      }
      
      interface SVGPathSegLinetoRel extends SVGPathSeg {
          x: number;
          y: number;
      }
      
      declare var SVGPathSegLinetoRel: {
          prototype: SVGPathSegLinetoRel;
          new(): SVGPathSegLinetoRel;
      }
      
      interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
          y: number;
      }
      
      declare var SVGPathSegLinetoVerticalAbs: {
          prototype: SVGPathSegLinetoVerticalAbs;
          new(): SVGPathSegLinetoVerticalAbs;
      }
      
      interface SVGPathSegLinetoVerticalRel extends SVGPathSeg {
          y: number;
      }
      
      declare var SVGPathSegLinetoVerticalRel: {
          prototype: SVGPathSegLinetoVerticalRel;
          new(): SVGPathSegLinetoVerticalRel;
      }
      
      interface SVGPathSegList {
          numberOfItems: number;
          appendItem(newItem: SVGPathSeg): SVGPathSeg;
          clear(): void;
          getItem(index: number): SVGPathSeg;
          initialize(newItem: SVGPathSeg): SVGPathSeg;
          insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg;
          removeItem(index: number): SVGPathSeg;
          replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg;
      }
      
      declare var SVGPathSegList: {
          prototype: SVGPathSegList;
          new(): SVGPathSegList;
      }
      
      interface SVGPathSegMovetoAbs extends SVGPathSeg {
          x: number;
          y: number;
      }
      
      declare var SVGPathSegMovetoAbs: {
          prototype: SVGPathSegMovetoAbs;
          new(): SVGPathSegMovetoAbs;
      }
      
      interface SVGPathSegMovetoRel extends SVGPathSeg {
          x: number;
          y: number;
      }
      
      declare var SVGPathSegMovetoRel: {
          prototype: SVGPathSegMovetoRel;
          new(): SVGPathSegMovetoRel;
      }
      
      interface SVGPatternElement extends SVGElement, SVGStylable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox, SVGURIReference, SVGUnitTypes {
          height: SVGAnimatedLength;
          patternContentUnits: SVGAnimatedEnumeration;
          patternTransform: SVGAnimatedTransformList;
          patternUnits: SVGAnimatedEnumeration;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGPatternElement: {
          prototype: SVGPatternElement;
          new(): SVGPatternElement;
      }
      
      interface SVGPoint {
          x: number;
          y: number;
          matrixTransform(matrix: SVGMatrix): SVGPoint;
      }
      
      declare var SVGPoint: {
          prototype: SVGPoint;
          new(): SVGPoint;
      }
      
      interface SVGPointList {
          numberOfItems: number;
          appendItem(newItem: SVGPoint): SVGPoint;
          clear(): void;
          getItem(index: number): SVGPoint;
          initialize(newItem: SVGPoint): SVGPoint;
          insertItemBefore(newItem: SVGPoint, index: number): SVGPoint;
          removeItem(index: number): SVGPoint;
          replaceItem(newItem: SVGPoint, index: number): SVGPoint;
      }
      
      declare var SVGPointList: {
          prototype: SVGPointList;
          new(): SVGPointList;
      }
      
      interface SVGPolygonElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGAnimatedPoints {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGPolygonElement: {
          prototype: SVGPolygonElement;
          new(): SVGPolygonElement;
      }
      
      interface SVGPolylineElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGAnimatedPoints {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGPolylineElement: {
          prototype: SVGPolylineElement;
          new(): SVGPolylineElement;
      }
      
      interface SVGPreserveAspectRatio {
          align: number;
          meetOrSlice: number;
          SVG_MEETORSLICE_MEET: number;
          SVG_MEETORSLICE_SLICE: number;
          SVG_MEETORSLICE_UNKNOWN: number;
          SVG_PRESERVEASPECTRATIO_NONE: number;
          SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
          SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
          SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
          SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
          SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
          SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
          SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
          SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
          SVG_PRESERVEASPECTRATIO_XMINYMID: number;
          SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
      }
      
      declare var SVGPreserveAspectRatio: {
          prototype: SVGPreserveAspectRatio;
          new(): SVGPreserveAspectRatio;
          SVG_MEETORSLICE_MEET: number;
          SVG_MEETORSLICE_SLICE: number;
          SVG_MEETORSLICE_UNKNOWN: number;
          SVG_PRESERVEASPECTRATIO_NONE: number;
          SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
          SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
          SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
          SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
          SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
          SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
          SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
          SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
          SVG_PRESERVEASPECTRATIO_XMINYMID: number;
          SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
      }
      
      interface SVGRadialGradientElement extends SVGGradientElement {
          cx: SVGAnimatedLength;
          cy: SVGAnimatedLength;
          fx: SVGAnimatedLength;
          fy: SVGAnimatedLength;
          r: SVGAnimatedLength;
      }
      
      declare var SVGRadialGradientElement: {
          prototype: SVGRadialGradientElement;
          new(): SVGRadialGradientElement;
      }
      
      interface SVGRect {
          height: number;
          width: number;
          x: number;
          y: number;
      }
      
      declare var SVGRect: {
          prototype: SVGRect;
          new(): SVGRect;
      }
      
      interface SVGRectElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          height: SVGAnimatedLength;
          rx: SVGAnimatedLength;
          ry: SVGAnimatedLength;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGRectElement: {
          prototype: SVGRectElement;
          new(): SVGRectElement;
      }
      
      interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTests, SVGStylable, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
          contentScriptType: string;
          contentStyleType: string;
          currentScale: number;
          currentTranslate: SVGPoint;
          height: SVGAnimatedLength;
          onabort: (ev: Event) => any;
          onerror: (ev: Event) => any;
          onresize: (ev: UIEvent) => any;
          onscroll: (ev: UIEvent) => any;
          onunload: (ev: Event) => any;
          onzoom: (ev: SVGZoomEvent) => any;
          pixelUnitToMillimeterX: number;
          pixelUnitToMillimeterY: number;
          screenPixelToMillimeterX: number;
          screenPixelToMillimeterY: number;
          viewport: SVGRect;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          checkEnclosure(element: SVGElement, rect: SVGRect): boolean;
          checkIntersection(element: SVGElement, rect: SVGRect): boolean;
          createSVGAngle(): SVGAngle;
          createSVGLength(): SVGLength;
          createSVGMatrix(): SVGMatrix;
          createSVGNumber(): SVGNumber;
          createSVGPoint(): SVGPoint;
          createSVGRect(): SVGRect;
          createSVGTransform(): SVGTransform;
          createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
          deselectAll(): void;
          forceRedraw(): void;
          getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
          getCurrentTime(): number;
          getElementById(elementId: string): Element;
          getEnclosureList(rect: SVGRect, referenceElement: SVGElement): NodeList;
          getIntersectionList(rect: SVGRect, referenceElement: SVGElement): NodeList;
          pauseAnimations(): void;
          setCurrentTime(seconds: number): void;
          suspendRedraw(maxWaitMilliseconds: number): number;
          unpauseAnimations(): void;
          unsuspendRedraw(suspendHandleID: number): void;
          unsuspendRedrawAll(): void;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "SVGAbort", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "SVGError", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "SVGUnload", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "SVGZoom", listener: (ev: SVGZoomEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGSVGElement: {
          prototype: SVGSVGElement;
          new(): SVGSVGElement;
      }
      
      interface SVGScriptElement extends SVGElement, SVGExternalResourcesRequired, SVGURIReference {
          type: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGScriptElement: {
          prototype: SVGScriptElement;
          new(): SVGScriptElement;
      }
      
      interface SVGStopElement extends SVGElement, SVGStylable {
          offset: SVGAnimatedNumber;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGStopElement: {
          prototype: SVGStopElement;
          new(): SVGStopElement;
      }
      
      interface SVGStringList {
          numberOfItems: number;
          appendItem(newItem: string): string;
          clear(): void;
          getItem(index: number): string;
          initialize(newItem: string): string;
          insertItemBefore(newItem: string, index: number): string;
          removeItem(index: number): string;
          replaceItem(newItem: string, index: number): string;
      }
      
      declare var SVGStringList: {
          prototype: SVGStringList;
          new(): SVGStringList;
      }
      
      interface SVGStyleElement extends SVGElement, SVGLangSpace {
          media: string;
          title: string;
          type: string;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGStyleElement: {
          prototype: SVGStyleElement;
          new(): SVGStyleElement;
      }
      
      interface SVGSwitchElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGSwitchElement: {
          prototype: SVGSwitchElement;
          new(): SVGSwitchElement;
      }
      
      interface SVGSymbolElement extends SVGElement, SVGStylable, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGSymbolElement: {
          prototype: SVGSymbolElement;
          new(): SVGSymbolElement;
      }
      
      interface SVGTSpanElement extends SVGTextPositioningElement {
      }
      
      declare var SVGTSpanElement: {
          prototype: SVGTSpanElement;
          new(): SVGTSpanElement;
      }
      
      interface SVGTextContentElement extends SVGElement, SVGStylable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
          lengthAdjust: SVGAnimatedEnumeration;
          textLength: SVGAnimatedLength;
          getCharNumAtPosition(point: SVGPoint): number;
          getComputedTextLength(): number;
          getEndPositionOfChar(charnum: number): SVGPoint;
          getExtentOfChar(charnum: number): SVGRect;
          getNumberOfChars(): number;
          getRotationOfChar(charnum: number): number;
          getStartPositionOfChar(charnum: number): SVGPoint;
          getSubStringLength(charnum: number, nchars: number): number;
          selectSubString(charnum: number, nchars: number): void;
          LENGTHADJUST_SPACING: number;
          LENGTHADJUST_SPACINGANDGLYPHS: number;
          LENGTHADJUST_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGTextContentElement: {
          prototype: SVGTextContentElement;
          new(): SVGTextContentElement;
          LENGTHADJUST_SPACING: number;
          LENGTHADJUST_SPACINGANDGLYPHS: number;
          LENGTHADJUST_UNKNOWN: number;
      }
      
      interface SVGTextElement extends SVGTextPositioningElement, SVGTransformable {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGTextElement: {
          prototype: SVGTextElement;
          new(): SVGTextElement;
      }
      
      interface SVGTextPathElement extends SVGTextContentElement, SVGURIReference {
          method: SVGAnimatedEnumeration;
          spacing: SVGAnimatedEnumeration;
          startOffset: SVGAnimatedLength;
          TEXTPATH_METHODTYPE_ALIGN: number;
          TEXTPATH_METHODTYPE_STRETCH: number;
          TEXTPATH_METHODTYPE_UNKNOWN: number;
          TEXTPATH_SPACINGTYPE_AUTO: number;
          TEXTPATH_SPACINGTYPE_EXACT: number;
          TEXTPATH_SPACINGTYPE_UNKNOWN: number;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGTextPathElement: {
          prototype: SVGTextPathElement;
          new(): SVGTextPathElement;
          TEXTPATH_METHODTYPE_ALIGN: number;
          TEXTPATH_METHODTYPE_STRETCH: number;
          TEXTPATH_METHODTYPE_UNKNOWN: number;
          TEXTPATH_SPACINGTYPE_AUTO: number;
          TEXTPATH_SPACINGTYPE_EXACT: number;
          TEXTPATH_SPACINGTYPE_UNKNOWN: number;
      }
      
      interface SVGTextPositioningElement extends SVGTextContentElement {
          dx: SVGAnimatedLengthList;
          dy: SVGAnimatedLengthList;
          rotate: SVGAnimatedNumberList;
          x: SVGAnimatedLengthList;
          y: SVGAnimatedLengthList;
      }
      
      declare var SVGTextPositioningElement: {
          prototype: SVGTextPositioningElement;
          new(): SVGTextPositioningElement;
      }
      
      interface SVGTitleElement extends SVGElement, SVGStylable, SVGLangSpace {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGTitleElement: {
          prototype: SVGTitleElement;
          new(): SVGTitleElement;
      }
      
      interface SVGTransform {
          angle: number;
          matrix: SVGMatrix;
          type: number;
          setMatrix(matrix: SVGMatrix): void;
          setRotate(angle: number, cx: number, cy: number): void;
          setScale(sx: number, sy: number): void;
          setSkewX(angle: number): void;
          setSkewY(angle: number): void;
          setTranslate(tx: number, ty: number): void;
          SVG_TRANSFORM_MATRIX: number;
          SVG_TRANSFORM_ROTATE: number;
          SVG_TRANSFORM_SCALE: number;
          SVG_TRANSFORM_SKEWX: number;
          SVG_TRANSFORM_SKEWY: number;
          SVG_TRANSFORM_TRANSLATE: number;
          SVG_TRANSFORM_UNKNOWN: number;
      }
      
      declare var SVGTransform: {
          prototype: SVGTransform;
          new(): SVGTransform;
          SVG_TRANSFORM_MATRIX: number;
          SVG_TRANSFORM_ROTATE: number;
          SVG_TRANSFORM_SCALE: number;
          SVG_TRANSFORM_SKEWX: number;
          SVG_TRANSFORM_SKEWY: number;
          SVG_TRANSFORM_TRANSLATE: number;
          SVG_TRANSFORM_UNKNOWN: number;
      }
      
      interface SVGTransformList {
          numberOfItems: number;
          appendItem(newItem: SVGTransform): SVGTransform;
          clear(): void;
          consolidate(): SVGTransform;
          createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
          getItem(index: number): SVGTransform;
          initialize(newItem: SVGTransform): SVGTransform;
          insertItemBefore(newItem: SVGTransform, index: number): SVGTransform;
          removeItem(index: number): SVGTransform;
          replaceItem(newItem: SVGTransform, index: number): SVGTransform;
      }
      
      declare var SVGTransformList: {
          prototype: SVGTransformList;
          new(): SVGTransformList;
      }
      
      interface SVGUnitTypes {
          SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number;
          SVG_UNIT_TYPE_UNKNOWN: number;
          SVG_UNIT_TYPE_USERSPACEONUSE: number;
      }
      declare var SVGUnitTypes: SVGUnitTypes;
      
      interface SVGUseElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGURIReference {
          animatedInstanceRoot: SVGElementInstance;
          height: SVGAnimatedLength;
          instanceRoot: SVGElementInstance;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGUseElement: {
          prototype: SVGUseElement;
          new(): SVGUseElement;
      }
      
      interface SVGViewElement extends SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
          viewTarget: SVGStringList;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var SVGViewElement: {
          prototype: SVGViewElement;
          new(): SVGViewElement;
      }
      
      interface SVGZoomAndPan {
          SVG_ZOOMANDPAN_DISABLE: number;
          SVG_ZOOMANDPAN_MAGNIFY: number;
          SVG_ZOOMANDPAN_UNKNOWN: number;
      }
      declare var SVGZoomAndPan: SVGZoomAndPan;
      
      interface SVGZoomEvent extends UIEvent {
          newScale: number;
          newTranslate: SVGPoint;
          previousScale: number;
          previousTranslate: SVGPoint;
          zoomRectScreen: SVGRect;
      }
      
      declare var SVGZoomEvent: {
          prototype: SVGZoomEvent;
          new(): SVGZoomEvent;
      }
      
      interface Screen extends EventTarget {
          availHeight: number;
          availWidth: number;
          bufferDepth: number;
          colorDepth: number;
          deviceXDPI: number;
          deviceYDPI: number;
          fontSmoothingEnabled: boolean;
          height: number;
          logicalXDPI: number;
          logicalYDPI: number;
          msOrientation: string;
          onmsorientationchange: (ev: Event) => any;
          pixelDepth: number;
          systemXDPI: number;
          systemYDPI: number;
          width: number;
          msLockOrientation(orientations: string): boolean;
          msLockOrientation(orientations: string[]): boolean;
          msUnlockOrientation(): void;
          addEventListener(type: "MSOrientationChange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var Screen: {
          prototype: Screen;
          new(): Screen;
      }
      
      interface ScriptNotifyEvent extends Event {
          callingUri: string;
          value: string;
      }
      
      declare var ScriptNotifyEvent: {
          prototype: ScriptNotifyEvent;
          new(): ScriptNotifyEvent;
      }
      
      interface ScriptProcessorNode extends AudioNode {
          bufferSize: number;
          onaudioprocess: (ev: AudioProcessingEvent) => any;
          addEventListener(type: "audioprocess", listener: (ev: AudioProcessingEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var ScriptProcessorNode: {
          prototype: ScriptProcessorNode;
          new(): ScriptProcessorNode;
      }
      
      interface Selection {
          anchorNode: Node;
          anchorOffset: number;
          focusNode: Node;
          focusOffset: number;
          isCollapsed: boolean;
          rangeCount: number;
          type: string;
          addRange(range: Range): void;
          collapse(parentNode: Node, offset: number): void;
          collapseToEnd(): void;
          collapseToStart(): void;
          containsNode(node: Node, partlyContained: boolean): boolean;
          deleteFromDocument(): void;
          empty(): void;
          extend(newNode: Node, offset: number): void;
          getRangeAt(index: number): Range;
          removeAllRanges(): void;
          removeRange(range: Range): void;
          selectAllChildren(parentNode: Node): void;
          setBaseAndExtent(baseNode: Node, baseOffset: number, extentNode: Node, extentOffset: number): void;
          toString(): string;
      }
      
      declare var Selection: {
          prototype: Selection;
          new(): Selection;
      }
      
      interface SourceBuffer extends EventTarget {
          appendWindowEnd: number;
          appendWindowStart: number;
          audioTracks: AudioTrackList;
          buffered: TimeRanges;
          mode: string;
          timestampOffset: number;
          updating: boolean;
          videoTracks: VideoTrackList;
          abort(): void;
          appendBuffer(data: ArrayBuffer): void;
          appendBuffer(data: ArrayBufferView): void;
          appendStream(stream: MSStream, maxSize?: number): void;
          remove(start: number, end: number): void;
      }
      
      declare var SourceBuffer: {
          prototype: SourceBuffer;
          new(): SourceBuffer;
      }
      
      interface SourceBufferList extends EventTarget {
          length: number;
          item(index: number): SourceBuffer;
          [index: number]: SourceBuffer;
      }
      
      declare var SourceBufferList: {
          prototype: SourceBufferList;
          new(): SourceBufferList;
      }
      
      interface StereoPannerNode extends AudioNode {
          pan: AudioParam;
      }
      
      declare var StereoPannerNode: {
          prototype: StereoPannerNode;
          new(): StereoPannerNode;
      }
      
      interface Storage {
          length: number;
          clear(): void;
          getItem(key: string): any;
          key(index: number): string;
          removeItem(key: string): void;
          setItem(key: string, data: string): void;
          [key: string]: any;
          [index: number]: string;
      }
      
      declare var Storage: {
          prototype: Storage;
          new(): Storage;
      }
      
      interface StorageEvent extends Event {
          key: string;
          newValue: any;
          oldValue: any;
          storageArea: Storage;
          url: string;
          initStorageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, keyArg: string, oldValueArg: any, newValueArg: any, urlArg: string, storageAreaArg: Storage): void;
      }
      
      declare var StorageEvent: {
          prototype: StorageEvent;
          new(): StorageEvent;
      }
      
      interface StyleMedia {
          type: string;
          matchMedium(mediaquery: string): boolean;
      }
      
      declare var StyleMedia: {
          prototype: StyleMedia;
          new(): StyleMedia;
      }
      
      interface StyleSheet {
          disabled: boolean;
          href: string;
          media: MediaList;
          ownerNode: Node;
          parentStyleSheet: StyleSheet;
          title: string;
          type: string;
      }
      
      declare var StyleSheet: {
          prototype: StyleSheet;
          new(): StyleSheet;
      }
      
      interface StyleSheetList {
          length: number;
          item(index?: number): StyleSheet;
          [index: number]: StyleSheet;
      }
      
      declare var StyleSheetList: {
          prototype: StyleSheetList;
          new(): StyleSheetList;
      }
      
      interface StyleSheetPageList {
          length: number;
          item(index: number): CSSPageRule;
          [index: number]: CSSPageRule;
      }
      
      declare var StyleSheetPageList: {
          prototype: StyleSheetPageList;
          new(): StyleSheetPageList;
      }
      
      interface SubtleCrypto {
          decrypt(algorithm: string, key: CryptoKey, data: ArrayBufferView): any;
          decrypt(algorithm: Algorithm, key: CryptoKey, data: ArrayBufferView): any;
          deriveBits(algorithm: string, baseKey: CryptoKey, length: number): any;
          deriveBits(algorithm: Algorithm, baseKey: CryptoKey, length: number): any;
          deriveKey(algorithm: string, baseKey: CryptoKey, derivedKeyType: string, extractable: boolean, keyUsages: string[]): any;
          deriveKey(algorithm: string, baseKey: CryptoKey, derivedKeyType: Algorithm, extractable: boolean, keyUsages: string[]): any;
          deriveKey(algorithm: Algorithm, baseKey: CryptoKey, derivedKeyType: string, extractable: boolean, keyUsages: string[]): any;
          deriveKey(algorithm: Algorithm, baseKey: CryptoKey, derivedKeyType: Algorithm, extractable: boolean, keyUsages: string[]): any;
          digest(algorithm: string, data: ArrayBufferView): any;
          digest(algorithm: Algorithm, data: ArrayBufferView): any;
          encrypt(algorithm: string, key: CryptoKey, data: ArrayBufferView): any;
          encrypt(algorithm: Algorithm, key: CryptoKey, data: ArrayBufferView): any;
          exportKey(format: string, key: CryptoKey): any;
          generateKey(algorithm: string, extractable: boolean, keyUsages: string[]): any;
          generateKey(algorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
          importKey(format: string, keyData: ArrayBufferView, algorithm: string, extractable: boolean, keyUsages: string[]): any;
          importKey(format: string, keyData: ArrayBufferView, algorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
          sign(algorithm: string, key: CryptoKey, data: ArrayBufferView): any;
          sign(algorithm: Algorithm, key: CryptoKey, data: ArrayBufferView): any;
          unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string, unwrappedKeyAlgorithm: string, extractable: boolean, keyUsages: string[]): any;
          unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string, unwrappedKeyAlgorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
          unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: Algorithm, unwrappedKeyAlgorithm: string, extractable: boolean, keyUsages: string[]): any;
          unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: Algorithm, unwrappedKeyAlgorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
          verify(algorithm: string, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): any;
          verify(algorithm: Algorithm, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): any;
          wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string): any;
          wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: Algorithm): any;
      }
      
      declare var SubtleCrypto: {
          prototype: SubtleCrypto;
          new(): SubtleCrypto;
      }
      
      interface Text extends CharacterData {
          wholeText: string;
          replaceWholeText(content: string): Text;
          splitText(offset: number): Text;
      }
      
      declare var Text: {
          prototype: Text;
          new(): Text;
      }
      
      interface TextEvent extends UIEvent {
          data: string;
          inputMethod: number;
          locale: string;
          initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void;
          DOM_INPUT_METHOD_DROP: number;
          DOM_INPUT_METHOD_HANDWRITING: number;
          DOM_INPUT_METHOD_IME: number;
          DOM_INPUT_METHOD_KEYBOARD: number;
          DOM_INPUT_METHOD_MULTIMODAL: number;
          DOM_INPUT_METHOD_OPTION: number;
          DOM_INPUT_METHOD_PASTE: number;
          DOM_INPUT_METHOD_SCRIPT: number;
          DOM_INPUT_METHOD_UNKNOWN: number;
          DOM_INPUT_METHOD_VOICE: number;
      }
      
      declare var TextEvent: {
          prototype: TextEvent;
          new(): TextEvent;
          DOM_INPUT_METHOD_DROP: number;
          DOM_INPUT_METHOD_HANDWRITING: number;
          DOM_INPUT_METHOD_IME: number;
          DOM_INPUT_METHOD_KEYBOARD: number;
          DOM_INPUT_METHOD_MULTIMODAL: number;
          DOM_INPUT_METHOD_OPTION: number;
          DOM_INPUT_METHOD_PASTE: number;
          DOM_INPUT_METHOD_SCRIPT: number;
          DOM_INPUT_METHOD_UNKNOWN: number;
          DOM_INPUT_METHOD_VOICE: number;
      }
      
      interface TextMetrics {
          width: number;
      }
      
      declare var TextMetrics: {
          prototype: TextMetrics;
          new(): TextMetrics;
      }
      
      interface TextRange {
          boundingHeight: number;
          boundingLeft: number;
          boundingTop: number;
          boundingWidth: number;
          htmlText: string;
          offsetLeft: number;
          offsetTop: number;
          text: string;
          collapse(start?: boolean): void;
          compareEndPoints(how: string, sourceRange: TextRange): number;
          duplicate(): TextRange;
          execCommand(cmdID: string, showUI?: boolean, value?: any): boolean;
          execCommandShowHelp(cmdID: string): boolean;
          expand(Unit: string): boolean;
          findText(string: string, count?: number, flags?: number): boolean;
          getBookmark(): string;
          getBoundingClientRect(): ClientRect;
          getClientRects(): ClientRectList;
          inRange(range: TextRange): boolean;
          isEqual(range: TextRange): boolean;
          move(unit: string, count?: number): number;
          moveEnd(unit: string, count?: number): number;
          moveStart(unit: string, count?: number): number;
          moveToBookmark(bookmark: string): boolean;
          moveToElementText(element: Element): void;
          moveToPoint(x: number, y: number): void;
          parentElement(): Element;
          pasteHTML(html: string): void;
          queryCommandEnabled(cmdID: string): boolean;
          queryCommandIndeterm(cmdID: string): boolean;
          queryCommandState(cmdID: string): boolean;
          queryCommandSupported(cmdID: string): boolean;
          queryCommandText(cmdID: string): string;
          queryCommandValue(cmdID: string): any;
          scrollIntoView(fStart?: boolean): void;
          select(): void;
          setEndPoint(how: string, SourceRange: TextRange): void;
      }
      
      declare var TextRange: {
          prototype: TextRange;
          new(): TextRange;
      }
      
      interface TextRangeCollection {
          length: number;
          item(index: number): TextRange;
          [index: number]: TextRange;
      }
      
      declare var TextRangeCollection: {
          prototype: TextRangeCollection;
          new(): TextRangeCollection;
      }
      
      interface TextTrack extends EventTarget {
          activeCues: TextTrackCueList;
          cues: TextTrackCueList;
          inBandMetadataTrackDispatchType: string;
          kind: string;
          label: string;
          language: string;
          mode: any;
          oncuechange: (ev: Event) => any;
          onerror: (ev: Event) => any;
          onload: (ev: Event) => any;
          readyState: number;
          addCue(cue: TextTrackCue): void;
          removeCue(cue: TextTrackCue): void;
          DISABLED: number;
          ERROR: number;
          HIDDEN: number;
          LOADED: number;
          LOADING: number;
          NONE: number;
          SHOWING: number;
          addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var TextTrack: {
          prototype: TextTrack;
          new(): TextTrack;
          DISABLED: number;
          ERROR: number;
          HIDDEN: number;
          LOADED: number;
          LOADING: number;
          NONE: number;
          SHOWING: number;
      }
      
      interface TextTrackCue extends EventTarget {
          endTime: number;
          id: string;
          onenter: (ev: Event) => any;
          onexit: (ev: Event) => any;
          pauseOnExit: boolean;
          startTime: number;
          text: string;
          track: TextTrack;
          getCueAsHTML(): DocumentFragment;
          addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var TextTrackCue: {
          prototype: TextTrackCue;
          new(startTime: number, endTime: number, text: string): TextTrackCue;
      }
      
      interface TextTrackCueList {
          length: number;
          getCueById(id: string): TextTrackCue;
          item(index: number): TextTrackCue;
          [index: number]: TextTrackCue;
      }
      
      declare var TextTrackCueList: {
          prototype: TextTrackCueList;
          new(): TextTrackCueList;
      }
      
      interface TextTrackList extends EventTarget {
          length: number;
          onaddtrack: (ev: TrackEvent) => any;
          item(index: number): TextTrack;
          addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
          [index: number]: TextTrack;
      }
      
      declare var TextTrackList: {
          prototype: TextTrackList;
          new(): TextTrackList;
      }
      
      interface TimeRanges {
          length: number;
          end(index: number): number;
          start(index: number): number;
      }
      
      declare var TimeRanges: {
          prototype: TimeRanges;
          new(): TimeRanges;
      }
      
      interface Touch {
          clientX: number;
          clientY: number;
          identifier: number;
          pageX: number;
          pageY: number;
          screenX: number;
          screenY: number;
          target: EventTarget;
      }
      
      declare var Touch: {
          prototype: Touch;
          new(): Touch;
      }
      
      interface TouchEvent extends UIEvent {
          altKey: boolean;
          changedTouches: TouchList;
          ctrlKey: boolean;
          metaKey: boolean;
          shiftKey: boolean;
          targetTouches: TouchList;
          touches: TouchList;
      }
      
      declare var TouchEvent: {
          prototype: TouchEvent;
          new(): TouchEvent;
      }
      
      interface TouchList {
          length: number;
          item(index: number): Touch;
          [index: number]: Touch;
      }
      
      declare var TouchList: {
          prototype: TouchList;
          new(): TouchList;
      }
      
      interface TrackEvent extends Event {
          track: any;
      }
      
      declare var TrackEvent: {
          prototype: TrackEvent;
          new(): TrackEvent;
      }
      
      interface TransitionEvent extends Event {
          elapsedTime: number;
          propertyName: string;
          initTransitionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, propertyNameArg: string, elapsedTimeArg: number): void;
      }
      
      declare var TransitionEvent: {
          prototype: TransitionEvent;
          new(): TransitionEvent;
      }
      
      interface TreeWalker {
          currentNode: Node;
          expandEntityReferences: boolean;
          filter: NodeFilter;
          root: Node;
          whatToShow: number;
          firstChild(): Node;
          lastChild(): Node;
          nextNode(): Node;
          nextSibling(): Node;
          parentNode(): Node;
          previousNode(): Node;
          previousSibling(): Node;
      }
      
      declare var TreeWalker: {
          prototype: TreeWalker;
          new(): TreeWalker;
      }
      
      interface UIEvent extends Event {
          detail: number;
          view: Window;
          initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void;
      }
      
      declare var UIEvent: {
          prototype: UIEvent;
          new(type: string, eventInitDict?: UIEventInit): UIEvent;
      }
      
      interface URL {
          createObjectURL(object: any, options?: ObjectURLOptions): string;
          revokeObjectURL(url: string): void;
      }
      declare var URL: URL;
      
      interface UnviewableContentIdentifiedEvent extends NavigationEventWithReferrer {
          mediaType: string;
      }
      
      declare var UnviewableContentIdentifiedEvent: {
          prototype: UnviewableContentIdentifiedEvent;
          new(): UnviewableContentIdentifiedEvent;
      }
      
      interface ValidityState {
          badInput: boolean;
          customError: boolean;
          patternMismatch: boolean;
          rangeOverflow: boolean;
          rangeUnderflow: boolean;
          stepMismatch: boolean;
          tooLong: boolean;
          typeMismatch: boolean;
          valid: boolean;
          valueMissing: boolean;
      }
      
      declare var ValidityState: {
          prototype: ValidityState;
          new(): ValidityState;
      }
      
      interface VideoPlaybackQuality {
          corruptedVideoFrames: number;
          creationTime: number;
          droppedVideoFrames: number;
          totalFrameDelay: number;
          totalVideoFrames: number;
      }
      
      declare var VideoPlaybackQuality: {
          prototype: VideoPlaybackQuality;
          new(): VideoPlaybackQuality;
      }
      
      interface VideoTrack {
          id: string;
          kind: string;
          label: string;
          language: string;
          selected: boolean;
          sourceBuffer: SourceBuffer;
      }
      
      declare var VideoTrack: {
          prototype: VideoTrack;
          new(): VideoTrack;
      }
      
      interface VideoTrackList extends EventTarget {
          length: number;
          onaddtrack: (ev: TrackEvent) => any;
          onchange: (ev: Event) => any;
          onremovetrack: (ev: TrackEvent) => any;
          selectedIndex: number;
          getTrackById(id: string): VideoTrack;
          item(index: number): VideoTrack;
          addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
          [index: number]: VideoTrack;
      }
      
      declare var VideoTrackList: {
          prototype: VideoTrackList;
          new(): VideoTrackList;
      }
      
      interface WEBGL_compressed_texture_s3tc {
          COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
          COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
          COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
          COMPRESSED_RGB_S3TC_DXT1_EXT: number;
      }
      
      declare var WEBGL_compressed_texture_s3tc: {
          prototype: WEBGL_compressed_texture_s3tc;
          new(): WEBGL_compressed_texture_s3tc;
          COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
          COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
          COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
          COMPRESSED_RGB_S3TC_DXT1_EXT: number;
      }
      
      interface WEBGL_debug_renderer_info {
          UNMASKED_RENDERER_WEBGL: number;
          UNMASKED_VENDOR_WEBGL: number;
      }
      
      declare var WEBGL_debug_renderer_info: {
          prototype: WEBGL_debug_renderer_info;
          new(): WEBGL_debug_renderer_info;
          UNMASKED_RENDERER_WEBGL: number;
          UNMASKED_VENDOR_WEBGL: number;
      }
      
      interface WEBGL_depth_texture {
          UNSIGNED_INT_24_8_WEBGL: number;
      }
      
      declare var WEBGL_depth_texture: {
          prototype: WEBGL_depth_texture;
          new(): WEBGL_depth_texture;
          UNSIGNED_INT_24_8_WEBGL: number;
      }
      
      interface WaveShaperNode extends AudioNode {
          curve: any;
          oversample: string;
      }
      
      declare var WaveShaperNode: {
          prototype: WaveShaperNode;
          new(): WaveShaperNode;
      }
      
      interface WebGLActiveInfo {
          name: string;
          size: number;
          type: number;
      }
      
      declare var WebGLActiveInfo: {
          prototype: WebGLActiveInfo;
          new(): WebGLActiveInfo;
      }
      
      interface WebGLBuffer extends WebGLObject {
      }
      
      declare var WebGLBuffer: {
          prototype: WebGLBuffer;
          new(): WebGLBuffer;
      }
      
      interface WebGLContextEvent extends Event {
          statusMessage: string;
      }
      
      declare var WebGLContextEvent: {
          prototype: WebGLContextEvent;
          new(): WebGLContextEvent;
      }
      
      interface WebGLFramebuffer extends WebGLObject {
      }
      
      declare var WebGLFramebuffer: {
          prototype: WebGLFramebuffer;
          new(): WebGLFramebuffer;
      }
      
      interface WebGLObject {
      }
      
      declare var WebGLObject: {
          prototype: WebGLObject;
          new(): WebGLObject;
      }
      
      interface WebGLProgram extends WebGLObject {
      }
      
      declare var WebGLProgram: {
          prototype: WebGLProgram;
          new(): WebGLProgram;
      }
      
      interface WebGLRenderbuffer extends WebGLObject {
      }
      
      declare var WebGLRenderbuffer: {
          prototype: WebGLRenderbuffer;
          new(): WebGLRenderbuffer;
      }
      
      interface WebGLRenderingContext {
          canvas: HTMLCanvasElement;
          drawingBufferHeight: number;
          drawingBufferWidth: number;
          activeTexture(texture: number): void;
          attachShader(program: WebGLProgram, shader: WebGLShader): void;
          bindAttribLocation(program: WebGLProgram, index: number, name: string): void;
          bindBuffer(target: number, buffer: WebGLBuffer): void;
          bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void;
          bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void;
          bindTexture(target: number, texture: WebGLTexture): void;
          blendColor(red: number, green: number, blue: number, alpha: number): void;
          blendEquation(mode: number): void;
          blendEquationSeparate(modeRGB: number, modeAlpha: number): void;
          blendFunc(sfactor: number, dfactor: number): void;
          blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void;
          bufferData(target: number, size: number, usage: number): void;
          bufferData(target: number, size: ArrayBufferView, usage: number): void;
          bufferData(target: number, size: any, usage: number): void;
          bufferSubData(target: number, offset: number, data: ArrayBufferView): void;
          bufferSubData(target: number, offset: number, data: any): void;
          checkFramebufferStatus(target: number): number;
          clear(mask: number): void;
          clearColor(red: number, green: number, blue: number, alpha: number): void;
          clearDepth(depth: number): void;
          clearStencil(s: number): void;
          colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
          compileShader(shader: WebGLShader): void;
          compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void;
          compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void;
          copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void;
          copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void;
          createBuffer(): WebGLBuffer;
          createFramebuffer(): WebGLFramebuffer;
          createProgram(): WebGLProgram;
          createRenderbuffer(): WebGLRenderbuffer;
          createShader(type: number): WebGLShader;
          createTexture(): WebGLTexture;
          cullFace(mode: number): void;
          deleteBuffer(buffer: WebGLBuffer): void;
          deleteFramebuffer(framebuffer: WebGLFramebuffer): void;
          deleteProgram(program: WebGLProgram): void;
          deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void;
          deleteShader(shader: WebGLShader): void;
          deleteTexture(texture: WebGLTexture): void;
          depthFunc(func: number): void;
          depthMask(flag: boolean): void;
          depthRange(zNear: number, zFar: number): void;
          detachShader(program: WebGLProgram, shader: WebGLShader): void;
          disable(cap: number): void;
          disableVertexAttribArray(index: number): void;
          drawArrays(mode: number, first: number, count: number): void;
          drawElements(mode: number, count: number, type: number, offset: number): void;
          enable(cap: number): void;
          enableVertexAttribArray(index: number): void;
          finish(): void;
          flush(): void;
          framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void;
          framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void;
          frontFace(mode: number): void;
          generateMipmap(target: number): void;
          getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo;
          getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo;
          getAttachedShaders(program: WebGLProgram): WebGLShader[];
          getAttribLocation(program: WebGLProgram, name: string): number;
          getBufferParameter(target: number, pname: number): any;
          getContextAttributes(): WebGLContextAttributes;
          getError(): number;
          getExtension(name: string): any;
          getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any;
          getParameter(pname: number): any;
          getProgramInfoLog(program: WebGLProgram): string;
          getProgramParameter(program: WebGLProgram, pname: number): any;
          getRenderbufferParameter(target: number, pname: number): any;
          getShaderInfoLog(shader: WebGLShader): string;
          getShaderParameter(shader: WebGLShader, pname: number): any;
          getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat;
          getShaderSource(shader: WebGLShader): string;
          getSupportedExtensions(): string[];
          getTexParameter(target: number, pname: number): any;
          getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;
          getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation;
          getVertexAttrib(index: number, pname: number): any;
          getVertexAttribOffset(index: number, pname: number): number;
          hint(target: number, mode: number): void;
          isBuffer(buffer: WebGLBuffer): boolean;
          isContextLost(): boolean;
          isEnabled(cap: number): boolean;
          isFramebuffer(framebuffer: WebGLFramebuffer): boolean;
          isProgram(program: WebGLProgram): boolean;
          isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean;
          isShader(shader: WebGLShader): boolean;
          isTexture(texture: WebGLTexture): boolean;
          lineWidth(width: number): void;
          linkProgram(program: WebGLProgram): void;
          pixelStorei(pname: number, param: number): void;
          polygonOffset(factor: number, units: number): void;
          readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
          renderbufferStorage(target: number, internalformat: number, width: number, height: number): void;
          sampleCoverage(value: number, invert: boolean): void;
          scissor(x: number, y: number, width: number, height: number): void;
          shaderSource(shader: WebGLShader, source: string): void;
          stencilFunc(func: number, ref: number, mask: number): void;
          stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void;
          stencilMask(mask: number): void;
          stencilMaskSeparate(face: number, mask: number): void;
          stencilOp(fail: number, zfail: number, zpass: number): void;
          stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void;
          texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void;
          texParameterf(target: number, pname: number, param: number): void;
          texParameteri(target: number, pname: number, param: number): void;
          texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void;
          uniform1f(location: WebGLUniformLocation, x: number): void;
          uniform1fv(location: WebGLUniformLocation, v: any): void;
          uniform1i(location: WebGLUniformLocation, x: number): void;
          uniform1iv(location: WebGLUniformLocation, v: Int32Array): void;
          uniform2f(location: WebGLUniformLocation, x: number, y: number): void;
          uniform2fv(location: WebGLUniformLocation, v: any): void;
          uniform2i(location: WebGLUniformLocation, x: number, y: number): void;
          uniform2iv(location: WebGLUniformLocation, v: Int32Array): void;
          uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void;
          uniform3fv(location: WebGLUniformLocation, v: any): void;
          uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void;
          uniform3iv(location: WebGLUniformLocation, v: Int32Array): void;
          uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
          uniform4fv(location: WebGLUniformLocation, v: any): void;
          uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
          uniform4iv(location: WebGLUniformLocation, v: Int32Array): void;
          uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: any): void;
          uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: any): void;
          uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: any): void;
          useProgram(program: WebGLProgram): void;
          validateProgram(program: WebGLProgram): void;
          vertexAttrib1f(indx: number, x: number): void;
          vertexAttrib1fv(indx: number, values: any): void;
          vertexAttrib2f(indx: number, x: number, y: number): void;
          vertexAttrib2fv(indx: number, values: any): void;
          vertexAttrib3f(indx: number, x: number, y: number, z: number): void;
          vertexAttrib3fv(indx: number, values: any): void;
          vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void;
          vertexAttrib4fv(indx: number, values: any): void;
          vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void;
          viewport(x: number, y: number, width: number, height: number): void;
          ACTIVE_ATTRIBUTES: number;
          ACTIVE_TEXTURE: number;
          ACTIVE_UNIFORMS: number;
          ALIASED_LINE_WIDTH_RANGE: number;
          ALIASED_POINT_SIZE_RANGE: number;
          ALPHA: number;
          ALPHA_BITS: number;
          ALWAYS: number;
          ARRAY_BUFFER: number;
          ARRAY_BUFFER_BINDING: number;
          ATTACHED_SHADERS: number;
          BACK: number;
          BLEND: number;
          BLEND_COLOR: number;
          BLEND_DST_ALPHA: number;
          BLEND_DST_RGB: number;
          BLEND_EQUATION: number;
          BLEND_EQUATION_ALPHA: number;
          BLEND_EQUATION_RGB: number;
          BLEND_SRC_ALPHA: number;
          BLEND_SRC_RGB: number;
          BLUE_BITS: number;
          BOOL: number;
          BOOL_VEC2: number;
          BOOL_VEC3: number;
          BOOL_VEC4: number;
          BROWSER_DEFAULT_WEBGL: number;
          BUFFER_SIZE: number;
          BUFFER_USAGE: number;
          BYTE: number;
          CCW: number;
          CLAMP_TO_EDGE: number;
          COLOR_ATTACHMENT0: number;
          COLOR_BUFFER_BIT: number;
          COLOR_CLEAR_VALUE: number;
          COLOR_WRITEMASK: number;
          COMPILE_STATUS: number;
          COMPRESSED_TEXTURE_FORMATS: number;
          CONSTANT_ALPHA: number;
          CONSTANT_COLOR: number;
          CONTEXT_LOST_WEBGL: number;
          CULL_FACE: number;
          CULL_FACE_MODE: number;
          CURRENT_PROGRAM: number;
          CURRENT_VERTEX_ATTRIB: number;
          CW: number;
          DECR: number;
          DECR_WRAP: number;
          DELETE_STATUS: number;
          DEPTH_ATTACHMENT: number;
          DEPTH_BITS: number;
          DEPTH_BUFFER_BIT: number;
          DEPTH_CLEAR_VALUE: number;
          DEPTH_COMPONENT: number;
          DEPTH_COMPONENT16: number;
          DEPTH_FUNC: number;
          DEPTH_RANGE: number;
          DEPTH_STENCIL: number;
          DEPTH_STENCIL_ATTACHMENT: number;
          DEPTH_TEST: number;
          DEPTH_WRITEMASK: number;
          DITHER: number;
          DONT_CARE: number;
          DST_ALPHA: number;
          DST_COLOR: number;
          DYNAMIC_DRAW: number;
          ELEMENT_ARRAY_BUFFER: number;
          ELEMENT_ARRAY_BUFFER_BINDING: number;
          EQUAL: number;
          FASTEST: number;
          FLOAT: number;
          FLOAT_MAT2: number;
          FLOAT_MAT3: number;
          FLOAT_MAT4: number;
          FLOAT_VEC2: number;
          FLOAT_VEC3: number;
          FLOAT_VEC4: number;
          FRAGMENT_SHADER: number;
          FRAMEBUFFER: number;
          FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
          FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
          FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
          FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
          FRAMEBUFFER_BINDING: number;
          FRAMEBUFFER_COMPLETE: number;
          FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
          FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
          FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
          FRAMEBUFFER_UNSUPPORTED: number;
          FRONT: number;
          FRONT_AND_BACK: number;
          FRONT_FACE: number;
          FUNC_ADD: number;
          FUNC_REVERSE_SUBTRACT: number;
          FUNC_SUBTRACT: number;
          GENERATE_MIPMAP_HINT: number;
          GEQUAL: number;
          GREATER: number;
          GREEN_BITS: number;
          HIGH_FLOAT: number;
          HIGH_INT: number;
          IMPLEMENTATION_COLOR_READ_FORMAT: number;
          IMPLEMENTATION_COLOR_READ_TYPE: number;
          INCR: number;
          INCR_WRAP: number;
          INT: number;
          INT_VEC2: number;
          INT_VEC3: number;
          INT_VEC4: number;
          INVALID_ENUM: number;
          INVALID_FRAMEBUFFER_OPERATION: number;
          INVALID_OPERATION: number;
          INVALID_VALUE: number;
          INVERT: number;
          KEEP: number;
          LEQUAL: number;
          LESS: number;
          LINEAR: number;
          LINEAR_MIPMAP_LINEAR: number;
          LINEAR_MIPMAP_NEAREST: number;
          LINES: number;
          LINE_LOOP: number;
          LINE_STRIP: number;
          LINE_WIDTH: number;
          LINK_STATUS: number;
          LOW_FLOAT: number;
          LOW_INT: number;
          LUMINANCE: number;
          LUMINANCE_ALPHA: number;
          MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
          MAX_CUBE_MAP_TEXTURE_SIZE: number;
          MAX_FRAGMENT_UNIFORM_VECTORS: number;
          MAX_RENDERBUFFER_SIZE: number;
          MAX_TEXTURE_IMAGE_UNITS: number;
          MAX_TEXTURE_SIZE: number;
          MAX_VARYING_VECTORS: number;
          MAX_VERTEX_ATTRIBS: number;
          MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
          MAX_VERTEX_UNIFORM_VECTORS: number;
          MAX_VIEWPORT_DIMS: number;
          MEDIUM_FLOAT: number;
          MEDIUM_INT: number;
          MIRRORED_REPEAT: number;
          NEAREST: number;
          NEAREST_MIPMAP_LINEAR: number;
          NEAREST_MIPMAP_NEAREST: number;
          NEVER: number;
          NICEST: number;
          NONE: number;
          NOTEQUAL: number;
          NO_ERROR: number;
          ONE: number;
          ONE_MINUS_CONSTANT_ALPHA: number;
          ONE_MINUS_CONSTANT_COLOR: number;
          ONE_MINUS_DST_ALPHA: number;
          ONE_MINUS_DST_COLOR: number;
          ONE_MINUS_SRC_ALPHA: number;
          ONE_MINUS_SRC_COLOR: number;
          OUT_OF_MEMORY: number;
          PACK_ALIGNMENT: number;
          POINTS: number;
          POLYGON_OFFSET_FACTOR: number;
          POLYGON_OFFSET_FILL: number;
          POLYGON_OFFSET_UNITS: number;
          RED_BITS: number;
          RENDERBUFFER: number;
          RENDERBUFFER_ALPHA_SIZE: number;
          RENDERBUFFER_BINDING: number;
          RENDERBUFFER_BLUE_SIZE: number;
          RENDERBUFFER_DEPTH_SIZE: number;
          RENDERBUFFER_GREEN_SIZE: number;
          RENDERBUFFER_HEIGHT: number;
          RENDERBUFFER_INTERNAL_FORMAT: number;
          RENDERBUFFER_RED_SIZE: number;
          RENDERBUFFER_STENCIL_SIZE: number;
          RENDERBUFFER_WIDTH: number;
          RENDERER: number;
          REPEAT: number;
          REPLACE: number;
          RGB: number;
          RGB565: number;
          RGB5_A1: number;
          RGBA: number;
          RGBA4: number;
          SAMPLER_2D: number;
          SAMPLER_CUBE: number;
          SAMPLES: number;
          SAMPLE_ALPHA_TO_COVERAGE: number;
          SAMPLE_BUFFERS: number;
          SAMPLE_COVERAGE: number;
          SAMPLE_COVERAGE_INVERT: number;
          SAMPLE_COVERAGE_VALUE: number;
          SCISSOR_BOX: number;
          SCISSOR_TEST: number;
          SHADER_TYPE: number;
          SHADING_LANGUAGE_VERSION: number;
          SHORT: number;
          SRC_ALPHA: number;
          SRC_ALPHA_SATURATE: number;
          SRC_COLOR: number;
          STATIC_DRAW: number;
          STENCIL_ATTACHMENT: number;
          STENCIL_BACK_FAIL: number;
          STENCIL_BACK_FUNC: number;
          STENCIL_BACK_PASS_DEPTH_FAIL: number;
          STENCIL_BACK_PASS_DEPTH_PASS: number;
          STENCIL_BACK_REF: number;
          STENCIL_BACK_VALUE_MASK: number;
          STENCIL_BACK_WRITEMASK: number;
          STENCIL_BITS: number;
          STENCIL_BUFFER_BIT: number;
          STENCIL_CLEAR_VALUE: number;
          STENCIL_FAIL: number;
          STENCIL_FUNC: number;
          STENCIL_INDEX: number;
          STENCIL_INDEX8: number;
          STENCIL_PASS_DEPTH_FAIL: number;
          STENCIL_PASS_DEPTH_PASS: number;
          STENCIL_REF: number;
          STENCIL_TEST: number;
          STENCIL_VALUE_MASK: number;
          STENCIL_WRITEMASK: number;
          STREAM_DRAW: number;
          SUBPIXEL_BITS: number;
          TEXTURE: number;
          TEXTURE0: number;
          TEXTURE1: number;
          TEXTURE10: number;
          TEXTURE11: number;
          TEXTURE12: number;
          TEXTURE13: number;
          TEXTURE14: number;
          TEXTURE15: number;
          TEXTURE16: number;
          TEXTURE17: number;
          TEXTURE18: number;
          TEXTURE19: number;
          TEXTURE2: number;
          TEXTURE20: number;
          TEXTURE21: number;
          TEXTURE22: number;
          TEXTURE23: number;
          TEXTURE24: number;
          TEXTURE25: number;
          TEXTURE26: number;
          TEXTURE27: number;
          TEXTURE28: number;
          TEXTURE29: number;
          TEXTURE3: number;
          TEXTURE30: number;
          TEXTURE31: number;
          TEXTURE4: number;
          TEXTURE5: number;
          TEXTURE6: number;
          TEXTURE7: number;
          TEXTURE8: number;
          TEXTURE9: number;
          TEXTURE_2D: number;
          TEXTURE_BINDING_2D: number;
          TEXTURE_BINDING_CUBE_MAP: number;
          TEXTURE_CUBE_MAP: number;
          TEXTURE_CUBE_MAP_NEGATIVE_X: number;
          TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
          TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
          TEXTURE_CUBE_MAP_POSITIVE_X: number;
          TEXTURE_CUBE_MAP_POSITIVE_Y: number;
          TEXTURE_CUBE_MAP_POSITIVE_Z: number;
          TEXTURE_MAG_FILTER: number;
          TEXTURE_MIN_FILTER: number;
          TEXTURE_WRAP_S: number;
          TEXTURE_WRAP_T: number;
          TRIANGLES: number;
          TRIANGLE_FAN: number;
          TRIANGLE_STRIP: number;
          UNPACK_ALIGNMENT: number;
          UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
          UNPACK_FLIP_Y_WEBGL: number;
          UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
          UNSIGNED_BYTE: number;
          UNSIGNED_INT: number;
          UNSIGNED_SHORT: number;
          UNSIGNED_SHORT_4_4_4_4: number;
          UNSIGNED_SHORT_5_5_5_1: number;
          UNSIGNED_SHORT_5_6_5: number;
          VALIDATE_STATUS: number;
          VENDOR: number;
          VERSION: number;
          VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
          VERTEX_ATTRIB_ARRAY_ENABLED: number;
          VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
          VERTEX_ATTRIB_ARRAY_POINTER: number;
          VERTEX_ATTRIB_ARRAY_SIZE: number;
          VERTEX_ATTRIB_ARRAY_STRIDE: number;
          VERTEX_ATTRIB_ARRAY_TYPE: number;
          VERTEX_SHADER: number;
          VIEWPORT: number;
          ZERO: number;
      }
      
      declare var WebGLRenderingContext: {
          prototype: WebGLRenderingContext;
          new(): WebGLRenderingContext;
          ACTIVE_ATTRIBUTES: number;
          ACTIVE_TEXTURE: number;
          ACTIVE_UNIFORMS: number;
          ALIASED_LINE_WIDTH_RANGE: number;
          ALIASED_POINT_SIZE_RANGE: number;
          ALPHA: number;
          ALPHA_BITS: number;
          ALWAYS: number;
          ARRAY_BUFFER: number;
          ARRAY_BUFFER_BINDING: number;
          ATTACHED_SHADERS: number;
          BACK: number;
          BLEND: number;
          BLEND_COLOR: number;
          BLEND_DST_ALPHA: number;
          BLEND_DST_RGB: number;
          BLEND_EQUATION: number;
          BLEND_EQUATION_ALPHA: number;
          BLEND_EQUATION_RGB: number;
          BLEND_SRC_ALPHA: number;
          BLEND_SRC_RGB: number;
          BLUE_BITS: number;
          BOOL: number;
          BOOL_VEC2: number;
          BOOL_VEC3: number;
          BOOL_VEC4: number;
          BROWSER_DEFAULT_WEBGL: number;
          BUFFER_SIZE: number;
          BUFFER_USAGE: number;
          BYTE: number;
          CCW: number;
          CLAMP_TO_EDGE: number;
          COLOR_ATTACHMENT0: number;
          COLOR_BUFFER_BIT: number;
          COLOR_CLEAR_VALUE: number;
          COLOR_WRITEMASK: number;
          COMPILE_STATUS: number;
          COMPRESSED_TEXTURE_FORMATS: number;
          CONSTANT_ALPHA: number;
          CONSTANT_COLOR: number;
          CONTEXT_LOST_WEBGL: number;
          CULL_FACE: number;
          CULL_FACE_MODE: number;
          CURRENT_PROGRAM: number;
          CURRENT_VERTEX_ATTRIB: number;
          CW: number;
          DECR: number;
          DECR_WRAP: number;
          DELETE_STATUS: number;
          DEPTH_ATTACHMENT: number;
          DEPTH_BITS: number;
          DEPTH_BUFFER_BIT: number;
          DEPTH_CLEAR_VALUE: number;
          DEPTH_COMPONENT: number;
          DEPTH_COMPONENT16: number;
          DEPTH_FUNC: number;
          DEPTH_RANGE: number;
          DEPTH_STENCIL: number;
          DEPTH_STENCIL_ATTACHMENT: number;
          DEPTH_TEST: number;
          DEPTH_WRITEMASK: number;
          DITHER: number;
          DONT_CARE: number;
          DST_ALPHA: number;
          DST_COLOR: number;
          DYNAMIC_DRAW: number;
          ELEMENT_ARRAY_BUFFER: number;
          ELEMENT_ARRAY_BUFFER_BINDING: number;
          EQUAL: number;
          FASTEST: number;
          FLOAT: number;
          FLOAT_MAT2: number;
          FLOAT_MAT3: number;
          FLOAT_MAT4: number;
          FLOAT_VEC2: number;
          FLOAT_VEC3: number;
          FLOAT_VEC4: number;
          FRAGMENT_SHADER: number;
          FRAMEBUFFER: number;
          FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
          FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
          FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
          FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
          FRAMEBUFFER_BINDING: number;
          FRAMEBUFFER_COMPLETE: number;
          FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
          FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
          FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
          FRAMEBUFFER_UNSUPPORTED: number;
          FRONT: number;
          FRONT_AND_BACK: number;
          FRONT_FACE: number;
          FUNC_ADD: number;
          FUNC_REVERSE_SUBTRACT: number;
          FUNC_SUBTRACT: number;
          GENERATE_MIPMAP_HINT: number;
          GEQUAL: number;
          GREATER: number;
          GREEN_BITS: number;
          HIGH_FLOAT: number;
          HIGH_INT: number;
          IMPLEMENTATION_COLOR_READ_FORMAT: number;
          IMPLEMENTATION_COLOR_READ_TYPE: number;
          INCR: number;
          INCR_WRAP: number;
          INT: number;
          INT_VEC2: number;
          INT_VEC3: number;
          INT_VEC4: number;
          INVALID_ENUM: number;
          INVALID_FRAMEBUFFER_OPERATION: number;
          INVALID_OPERATION: number;
          INVALID_VALUE: number;
          INVERT: number;
          KEEP: number;
          LEQUAL: number;
          LESS: number;
          LINEAR: number;
          LINEAR_MIPMAP_LINEAR: number;
          LINEAR_MIPMAP_NEAREST: number;
          LINES: number;
          LINE_LOOP: number;
          LINE_STRIP: number;
          LINE_WIDTH: number;
          LINK_STATUS: number;
          LOW_FLOAT: number;
          LOW_INT: number;
          LUMINANCE: number;
          LUMINANCE_ALPHA: number;
          MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
          MAX_CUBE_MAP_TEXTURE_SIZE: number;
          MAX_FRAGMENT_UNIFORM_VECTORS: number;
          MAX_RENDERBUFFER_SIZE: number;
          MAX_TEXTURE_IMAGE_UNITS: number;
          MAX_TEXTURE_SIZE: number;
          MAX_VARYING_VECTORS: number;
          MAX_VERTEX_ATTRIBS: number;
          MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
          MAX_VERTEX_UNIFORM_VECTORS: number;
          MAX_VIEWPORT_DIMS: number;
          MEDIUM_FLOAT: number;
          MEDIUM_INT: number;
          MIRRORED_REPEAT: number;
          NEAREST: number;
          NEAREST_MIPMAP_LINEAR: number;
          NEAREST_MIPMAP_NEAREST: number;
          NEVER: number;
          NICEST: number;
          NONE: number;
          NOTEQUAL: number;
          NO_ERROR: number;
          ONE: number;
          ONE_MINUS_CONSTANT_ALPHA: number;
          ONE_MINUS_CONSTANT_COLOR: number;
          ONE_MINUS_DST_ALPHA: number;
          ONE_MINUS_DST_COLOR: number;
          ONE_MINUS_SRC_ALPHA: number;
          ONE_MINUS_SRC_COLOR: number;
          OUT_OF_MEMORY: number;
          PACK_ALIGNMENT: number;
          POINTS: number;
          POLYGON_OFFSET_FACTOR: number;
          POLYGON_OFFSET_FILL: number;
          POLYGON_OFFSET_UNITS: number;
          RED_BITS: number;
          RENDERBUFFER: number;
          RENDERBUFFER_ALPHA_SIZE: number;
          RENDERBUFFER_BINDING: number;
          RENDERBUFFER_BLUE_SIZE: number;
          RENDERBUFFER_DEPTH_SIZE: number;
          RENDERBUFFER_GREEN_SIZE: number;
          RENDERBUFFER_HEIGHT: number;
          RENDERBUFFER_INTERNAL_FORMAT: number;
          RENDERBUFFER_RED_SIZE: number;
          RENDERBUFFER_STENCIL_SIZE: number;
          RENDERBUFFER_WIDTH: number;
          RENDERER: number;
          REPEAT: number;
          REPLACE: number;
          RGB: number;
          RGB565: number;
          RGB5_A1: number;
          RGBA: number;
          RGBA4: number;
          SAMPLER_2D: number;
          SAMPLER_CUBE: number;
          SAMPLES: number;
          SAMPLE_ALPHA_TO_COVERAGE: number;
          SAMPLE_BUFFERS: number;
          SAMPLE_COVERAGE: number;
          SAMPLE_COVERAGE_INVERT: number;
          SAMPLE_COVERAGE_VALUE: number;
          SCISSOR_BOX: number;
          SCISSOR_TEST: number;
          SHADER_TYPE: number;
          SHADING_LANGUAGE_VERSION: number;
          SHORT: number;
          SRC_ALPHA: number;
          SRC_ALPHA_SATURATE: number;
          SRC_COLOR: number;
          STATIC_DRAW: number;
          STENCIL_ATTACHMENT: number;
          STENCIL_BACK_FAIL: number;
          STENCIL_BACK_FUNC: number;
          STENCIL_BACK_PASS_DEPTH_FAIL: number;
          STENCIL_BACK_PASS_DEPTH_PASS: number;
          STENCIL_BACK_REF: number;
          STENCIL_BACK_VALUE_MASK: number;
          STENCIL_BACK_WRITEMASK: number;
          STENCIL_BITS: number;
          STENCIL_BUFFER_BIT: number;
          STENCIL_CLEAR_VALUE: number;
          STENCIL_FAIL: number;
          STENCIL_FUNC: number;
          STENCIL_INDEX: number;
          STENCIL_INDEX8: number;
          STENCIL_PASS_DEPTH_FAIL: number;
          STENCIL_PASS_DEPTH_PASS: number;
          STENCIL_REF: number;
          STENCIL_TEST: number;
          STENCIL_VALUE_MASK: number;
          STENCIL_WRITEMASK: number;
          STREAM_DRAW: number;
          SUBPIXEL_BITS: number;
          TEXTURE: number;
          TEXTURE0: number;
          TEXTURE1: number;
          TEXTURE10: number;
          TEXTURE11: number;
          TEXTURE12: number;
          TEXTURE13: number;
          TEXTURE14: number;
          TEXTURE15: number;
          TEXTURE16: number;
          TEXTURE17: number;
          TEXTURE18: number;
          TEXTURE19: number;
          TEXTURE2: number;
          TEXTURE20: number;
          TEXTURE21: number;
          TEXTURE22: number;
          TEXTURE23: number;
          TEXTURE24: number;
          TEXTURE25: number;
          TEXTURE26: number;
          TEXTURE27: number;
          TEXTURE28: number;
          TEXTURE29: number;
          TEXTURE3: number;
          TEXTURE30: number;
          TEXTURE31: number;
          TEXTURE4: number;
          TEXTURE5: number;
          TEXTURE6: number;
          TEXTURE7: number;
          TEXTURE8: number;
          TEXTURE9: number;
          TEXTURE_2D: number;
          TEXTURE_BINDING_2D: number;
          TEXTURE_BINDING_CUBE_MAP: number;
          TEXTURE_CUBE_MAP: number;
          TEXTURE_CUBE_MAP_NEGATIVE_X: number;
          TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
          TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
          TEXTURE_CUBE_MAP_POSITIVE_X: number;
          TEXTURE_CUBE_MAP_POSITIVE_Y: number;
          TEXTURE_CUBE_MAP_POSITIVE_Z: number;
          TEXTURE_MAG_FILTER: number;
          TEXTURE_MIN_FILTER: number;
          TEXTURE_WRAP_S: number;
          TEXTURE_WRAP_T: number;
          TRIANGLES: number;
          TRIANGLE_FAN: number;
          TRIANGLE_STRIP: number;
          UNPACK_ALIGNMENT: number;
          UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
          UNPACK_FLIP_Y_WEBGL: number;
          UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
          UNSIGNED_BYTE: number;
          UNSIGNED_INT: number;
          UNSIGNED_SHORT: number;
          UNSIGNED_SHORT_4_4_4_4: number;
          UNSIGNED_SHORT_5_5_5_1: number;
          UNSIGNED_SHORT_5_6_5: number;
          VALIDATE_STATUS: number;
          VENDOR: number;
          VERSION: number;
          VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
          VERTEX_ATTRIB_ARRAY_ENABLED: number;
          VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
          VERTEX_ATTRIB_ARRAY_POINTER: number;
          VERTEX_ATTRIB_ARRAY_SIZE: number;
          VERTEX_ATTRIB_ARRAY_STRIDE: number;
          VERTEX_ATTRIB_ARRAY_TYPE: number;
          VERTEX_SHADER: number;
          VIEWPORT: number;
          ZERO: number;
      }
      
      interface WebGLShader extends WebGLObject {
      }
      
      declare var WebGLShader: {
          prototype: WebGLShader;
          new(): WebGLShader;
      }
      
      interface WebGLShaderPrecisionFormat {
          precision: number;
          rangeMax: number;
          rangeMin: number;
      }
      
      declare var WebGLShaderPrecisionFormat: {
          prototype: WebGLShaderPrecisionFormat;
          new(): WebGLShaderPrecisionFormat;
      }
      
      interface WebGLTexture extends WebGLObject {
      }
      
      declare var WebGLTexture: {
          prototype: WebGLTexture;
          new(): WebGLTexture;
      }
      
      interface WebGLUniformLocation {
      }
      
      declare var WebGLUniformLocation: {
          prototype: WebGLUniformLocation;
          new(): WebGLUniformLocation;
      }
      
      interface WebKitCSSMatrix {
          a: number;
          b: number;
          c: number;
          d: number;
          e: number;
          f: number;
          m11: number;
          m12: number;
          m13: number;
          m14: number;
          m21: number;
          m22: number;
          m23: number;
          m24: number;
          m31: number;
          m32: number;
          m33: number;
          m34: number;
          m41: number;
          m42: number;
          m43: number;
          m44: number;
          inverse(): WebKitCSSMatrix;
          multiply(secondMatrix: WebKitCSSMatrix): WebKitCSSMatrix;
          rotate(angleX: number, angleY?: number, angleZ?: number): WebKitCSSMatrix;
          rotateAxisAngle(x: number, y: number, z: number, angle: number): WebKitCSSMatrix;
          scale(scaleX: number, scaleY?: number, scaleZ?: number): WebKitCSSMatrix;
          setMatrixValue(value: string): void;
          skewX(angle: number): WebKitCSSMatrix;
          skewY(angle: number): WebKitCSSMatrix;
          toString(): string;
          translate(x: number, y: number, z?: number): WebKitCSSMatrix;
      }
      
      declare var WebKitCSSMatrix: {
          prototype: WebKitCSSMatrix;
          new(text?: string): WebKitCSSMatrix;
      }
      
      interface WebKitPoint {
          x: number;
          y: number;
      }
      
      declare var WebKitPoint: {
          prototype: WebKitPoint;
          new(x?: number, y?: number): WebKitPoint;
      }
      
      interface WebSocket extends EventTarget {
          binaryType: string;
          bufferedAmount: number;
          extensions: string;
          onclose: (ev: CloseEvent) => any;
          onerror: (ev: Event) => any;
          onmessage: (ev: MessageEvent) => any;
          onopen: (ev: Event) => any;
          protocol: string;
          readyState: number;
          url: string;
          close(code?: number, reason?: string): void;
          send(data: any): void;
          CLOSED: number;
          CLOSING: number;
          CONNECTING: number;
          OPEN: number;
          addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var WebSocket: {
          prototype: WebSocket;
          new(url: string, protocols?: string): WebSocket;
          new(url: string, protocols?: any): WebSocket;
          CLOSED: number;
          CLOSING: number;
          CONNECTING: number;
          OPEN: number;
      }
      
      interface WheelEvent extends MouseEvent {
          deltaMode: number;
          deltaX: number;
          deltaY: number;
          deltaZ: number;
          getCurrentPoint(element: Element): void;
          initWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, deltaXArg: number, deltaYArg: number, deltaZArg: number, deltaMode: number): void;
          DOM_DELTA_LINE: number;
          DOM_DELTA_PAGE: number;
          DOM_DELTA_PIXEL: number;
      }
      
      declare var WheelEvent: {
          prototype: WheelEvent;
          new(typeArg: string, eventInitDict?: WheelEventInit): WheelEvent;
          DOM_DELTA_LINE: number;
          DOM_DELTA_PAGE: number;
          DOM_DELTA_PIXEL: number;
      }
      
      interface Window extends EventTarget, WindowTimers, WindowSessionStorage, WindowLocalStorage, WindowConsole, GlobalEventHandlers, IDBEnvironment, WindowBase64 {
          animationStartTime: number;
          applicationCache: ApplicationCache;
          clientInformation: Navigator;
          closed: boolean;
          crypto: Crypto;
          defaultStatus: string;
          devicePixelRatio: number;
          doNotTrack: string;
          document: Document;
          event: Event;
          external: External;
          frameElement: Element;
          frames: Window;
          history: History;
          innerHeight: number;
          innerWidth: number;
          length: number;
          location: Location;
          locationbar: BarProp;
          menubar: BarProp;
          msAnimationStartTime: number;
          msTemplatePrinter: MSTemplatePrinter;
          name: string;
          navigator: Navigator;
          offscreenBuffering: string | boolean;
          onabort: (ev: Event) => any;
          onafterprint: (ev: Event) => any;
          onbeforeprint: (ev: Event) => any;
          onbeforeunload: (ev: BeforeUnloadEvent) => any;
          onblur: (ev: FocusEvent) => any;
          oncanplay: (ev: Event) => any;
          oncanplaythrough: (ev: Event) => any;
          onchange: (ev: Event) => any;
          onclick: (ev: MouseEvent) => any;
          oncompassneedscalibration: (ev: Event) => any;
          oncontextmenu: (ev: PointerEvent) => any;
          ondblclick: (ev: MouseEvent) => any;
          ondevicemotion: (ev: DeviceMotionEvent) => any;
          ondeviceorientation: (ev: DeviceOrientationEvent) => any;
          ondrag: (ev: DragEvent) => any;
          ondragend: (ev: DragEvent) => any;
          ondragenter: (ev: DragEvent) => any;
          ondragleave: (ev: DragEvent) => any;
          ondragover: (ev: DragEvent) => any;
          ondragstart: (ev: DragEvent) => any;
          ondrop: (ev: DragEvent) => any;
          ondurationchange: (ev: Event) => any;
          onemptied: (ev: Event) => any;
          onended: (ev: Event) => any;
          onerror: ErrorEventHandler;
          onfocus: (ev: FocusEvent) => any;
          onhashchange: (ev: HashChangeEvent) => any;
          oninput: (ev: Event) => any;
          onkeydown: (ev: KeyboardEvent) => any;
          onkeypress: (ev: KeyboardEvent) => any;
          onkeyup: (ev: KeyboardEvent) => any;
          onload: (ev: Event) => any;
          onloadeddata: (ev: Event) => any;
          onloadedmetadata: (ev: Event) => any;
          onloadstart: (ev: Event) => any;
          onmessage: (ev: MessageEvent) => any;
          onmousedown: (ev: MouseEvent) => any;
          onmouseenter: (ev: MouseEvent) => any;
          onmouseleave: (ev: MouseEvent) => any;
          onmousemove: (ev: MouseEvent) => any;
          onmouseout: (ev: MouseEvent) => any;
          onmouseover: (ev: MouseEvent) => any;
          onmouseup: (ev: MouseEvent) => any;
          onmousewheel: (ev: MouseWheelEvent) => any;
          onmsgesturechange: (ev: MSGestureEvent) => any;
          onmsgesturedoubletap: (ev: MSGestureEvent) => any;
          onmsgestureend: (ev: MSGestureEvent) => any;
          onmsgesturehold: (ev: MSGestureEvent) => any;
          onmsgesturestart: (ev: MSGestureEvent) => any;
          onmsgesturetap: (ev: MSGestureEvent) => any;
          onmsinertiastart: (ev: MSGestureEvent) => any;
          onmspointercancel: (ev: MSPointerEvent) => any;
          onmspointerdown: (ev: MSPointerEvent) => any;
          onmspointerenter: (ev: MSPointerEvent) => any;
          onmspointerleave: (ev: MSPointerEvent) => any;
          onmspointermove: (ev: MSPointerEvent) => any;
          onmspointerout: (ev: MSPointerEvent) => any;
          onmspointerover: (ev: MSPointerEvent) => any;
          onmspointerup: (ev: MSPointerEvent) => any;
          onoffline: (ev: Event) => any;
          ononline: (ev: Event) => any;
          onorientationchange: (ev: Event) => any;
          onpagehide: (ev: PageTransitionEvent) => any;
          onpageshow: (ev: PageTransitionEvent) => any;
          onpause: (ev: Event) => any;
          onplay: (ev: Event) => any;
          onplaying: (ev: Event) => any;
          onpopstate: (ev: PopStateEvent) => any;
          onprogress: (ev: ProgressEvent) => any;
          onratechange: (ev: Event) => any;
          onreadystatechange: (ev: ProgressEvent) => any;
          onreset: (ev: Event) => any;
          onresize: (ev: UIEvent) => any;
          onscroll: (ev: UIEvent) => any;
          onseeked: (ev: Event) => any;
          onseeking: (ev: Event) => any;
          onselect: (ev: UIEvent) => any;
          onstalled: (ev: Event) => any;
          onstorage: (ev: StorageEvent) => any;
          onsubmit: (ev: Event) => any;
          onsuspend: (ev: Event) => any;
          ontimeupdate: (ev: Event) => any;
          ontouchcancel: any;
          ontouchend: any;
          ontouchmove: any;
          ontouchstart: any;
          onunload: (ev: Event) => any;
          onvolumechange: (ev: Event) => any;
          onwaiting: (ev: Event) => any;
          opener: Window;
          orientation: string;
          outerHeight: number;
          outerWidth: number;
          pageXOffset: number;
          pageYOffset: number;
          parent: Window;
          performance: Performance;
          personalbar: BarProp;
          screen: Screen;
          screenLeft: number;
          screenTop: number;
          screenX: number;
          screenY: number;
          scrollX: number;
          scrollY: number;
          scrollbars: BarProp;
          self: Window;
          status: string;
          statusbar: BarProp;
          styleMedia: StyleMedia;
          toolbar: BarProp;
          top: Window;
          window: Window;
          alert(message?: any): void;
          blur(): void;
          cancelAnimationFrame(handle: number): void;
          captureEvents(): void;
          close(): void;
          confirm(message?: string): boolean;
          focus(): void;
          getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
          getMatchedCSSRules(elt: Element, pseudoElt?: string): CSSRuleList;
          getSelection(): Selection;
          matchMedia(mediaQuery: string): MediaQueryList;
          moveBy(x?: number, y?: number): void;
          moveTo(x?: number, y?: number): void;
          msCancelRequestAnimationFrame(handle: number): void;
          msMatchMedia(mediaQuery: string): MediaQueryList;
          msRequestAnimationFrame(callback: FrameRequestCallback): number;
          msWriteProfilerMark(profilerMarkName: string): void;
          open(url?: string, target?: string, features?: string, replace?: boolean): any;
          postMessage(message: any, targetOrigin: string, ports?: any): void;
          print(): void;
          prompt(message?: string, _default?: string): string;
          releaseEvents(): void;
          requestAnimationFrame(callback: FrameRequestCallback): number;
          resizeBy(x?: number, y?: number): void;
          resizeTo(x?: number, y?: number): void;
          scroll(x?: number, y?: number): void;
          scrollBy(x?: number, y?: number): void;
          scrollTo(x?: number, y?: number): void;
          webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
          webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
          addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
          [index: number]: Window;
      }
      
      declare var Window: {
          prototype: Window;
          new(): Window;
      }
      
      interface Worker extends EventTarget, AbstractWorker {
          onmessage: (ev: MessageEvent) => any;
          postMessage(message: any, ports?: any): void;
          terminate(): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var Worker: {
          prototype: Worker;
          new(stringUrl: string): Worker;
      }
      
      interface XMLDocument extends Document {
      }
      
      declare var XMLDocument: {
          prototype: XMLDocument;
          new(): XMLDocument;
      }
      
      interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
          msCaching: string;
          onreadystatechange: (ev: ProgressEvent) => any;
          readyState: number;
          response: any;
          responseBody: any;
          responseText: string;
          responseType: string;
          responseXML: any;
          status: number;
          statusText: string;
          timeout: number;
          upload: XMLHttpRequestUpload;
          withCredentials: boolean;
          abort(): void;
          getAllResponseHeaders(): string;
          getResponseHeader(header: string): string;
          msCachingEnabled(): boolean;
          open(method: string, url: string, async?: boolean, user?: string, password?: string): void;
          overrideMimeType(mime: string): void;
          send(data?: Document): void;
          send(data?: string): void;
          send(data?: any): void;
          setRequestHeader(header: string, value: string): void;
          DONE: number;
          HEADERS_RECEIVED: number;
          LOADING: number;
          OPENED: number;
          UNSENT: number;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var XMLHttpRequest: {
          prototype: XMLHttpRequest;
          new(): XMLHttpRequest;
          DONE: number;
          HEADERS_RECEIVED: number;
          LOADING: number;
          OPENED: number;
          UNSENT: number;
          create(): XMLHttpRequest;
      }
      
      interface XMLHttpRequestUpload extends EventTarget, XMLHttpRequestEventTarget {
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      declare var XMLHttpRequestUpload: {
          prototype: XMLHttpRequestUpload;
          new(): XMLHttpRequestUpload;
      }
      
      interface XMLSerializer {
          serializeToString(target: Node): string;
      }
      
      declare var XMLSerializer: {
          prototype: XMLSerializer;
          new(): XMLSerializer;
      }
      
      interface XPathEvaluator {
          createExpression(expression: string, resolver: XPathNSResolver): XPathExpression;
          createNSResolver(nodeResolver?: Node): XPathNSResolver;
          evaluate(expression: string, contextNode: Node, resolver: XPathNSResolver, type: number, result: XPathResult): XPathResult;
      }
      
      declare var XPathEvaluator: {
          prototype: XPathEvaluator;
          new(): XPathEvaluator;
      }
      
      interface XPathExpression {
          evaluate(contextNode: Node, type: number, result: XPathResult): XPathExpression;
      }
      
      declare var XPathExpression: {
          prototype: XPathExpression;
          new(): XPathExpression;
      }
      
      interface XPathNSResolver {
          lookupNamespaceURI(prefix: string): string;
      }
      
      declare var XPathNSResolver: {
          prototype: XPathNSResolver;
          new(): XPathNSResolver;
      }
      
      interface XPathResult {
          booleanValue: boolean;
          invalidIteratorState: boolean;
          numberValue: number;
          resultType: number;
          singleNodeValue: Node;
          snapshotLength: number;
          stringValue: string;
          iterateNext(): Node;
          snapshotItem(index: number): Node;
          ANY_TYPE: number;
          ANY_UNORDERED_NODE_TYPE: number;
          BOOLEAN_TYPE: number;
          FIRST_ORDERED_NODE_TYPE: number;
          NUMBER_TYPE: number;
          ORDERED_NODE_ITERATOR_TYPE: number;
          ORDERED_NODE_SNAPSHOT_TYPE: number;
          STRING_TYPE: number;
          UNORDERED_NODE_ITERATOR_TYPE: number;
          UNORDERED_NODE_SNAPSHOT_TYPE: number;
      }
      
      declare var XPathResult: {
          prototype: XPathResult;
          new(): XPathResult;
          ANY_TYPE: number;
          ANY_UNORDERED_NODE_TYPE: number;
          BOOLEAN_TYPE: number;
          FIRST_ORDERED_NODE_TYPE: number;
          NUMBER_TYPE: number;
          ORDERED_NODE_ITERATOR_TYPE: number;
          ORDERED_NODE_SNAPSHOT_TYPE: number;
          STRING_TYPE: number;
          UNORDERED_NODE_ITERATOR_TYPE: number;
          UNORDERED_NODE_SNAPSHOT_TYPE: number;
      }
      
      interface XSLTProcessor {
          clearParameters(): void;
          getParameter(namespaceURI: string, localName: string): any;
          importStylesheet(style: Node): void;
          removeParameter(namespaceURI: string, localName: string): void;
          reset(): void;
          setParameter(namespaceURI: string, localName: string, value: any): void;
          transformToDocument(source: Node): Document;
          transformToFragment(source: Node, document: Document): DocumentFragment;
      }
      
      declare var XSLTProcessor: {
          prototype: XSLTProcessor;
          new(): XSLTProcessor;
      }
      
      interface AbstractWorker {
          onerror: (ev: Event) => any;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      interface ChildNode {
          remove(): void;
      }
      
      interface DOML2DeprecatedColorProperty {
          color: string;
      }
      
      interface DOML2DeprecatedSizeProperty {
          size: number;
      }
      
      interface DocumentEvent {
          createEvent(eventInterface:"AnimationEvent"): AnimationEvent;
          createEvent(eventInterface:"AriaRequestEvent"): AriaRequestEvent;
          createEvent(eventInterface:"AudioProcessingEvent"): AudioProcessingEvent;
          createEvent(eventInterface:"BeforeUnloadEvent"): BeforeUnloadEvent;
          createEvent(eventInterface:"CloseEvent"): CloseEvent;
          createEvent(eventInterface:"CommandEvent"): CommandEvent;
          createEvent(eventInterface:"CompositionEvent"): CompositionEvent;
          createEvent(eventInterface: "CustomEvent"): CustomEvent;
          createEvent(eventInterface:"DeviceMotionEvent"): DeviceMotionEvent;
          createEvent(eventInterface:"DeviceOrientationEvent"): DeviceOrientationEvent;
          createEvent(eventInterface:"DragEvent"): DragEvent;
          createEvent(eventInterface:"ErrorEvent"): ErrorEvent;
          createEvent(eventInterface:"Event"): Event;
          createEvent(eventInterface:"Events"): Event;
          createEvent(eventInterface:"FocusEvent"): FocusEvent;
          createEvent(eventInterface:"GamepadEvent"): GamepadEvent;
          createEvent(eventInterface:"HashChangeEvent"): HashChangeEvent;
          createEvent(eventInterface:"IDBVersionChangeEvent"): IDBVersionChangeEvent;
          createEvent(eventInterface:"KeyboardEvent"): KeyboardEvent;
          createEvent(eventInterface:"LongRunningScriptDetectedEvent"): LongRunningScriptDetectedEvent;
          createEvent(eventInterface:"MSGestureEvent"): MSGestureEvent;
          createEvent(eventInterface:"MSManipulationEvent"): MSManipulationEvent;
          createEvent(eventInterface:"MSMediaKeyMessageEvent"): MSMediaKeyMessageEvent;
          createEvent(eventInterface:"MSMediaKeyNeededEvent"): MSMediaKeyNeededEvent;
          createEvent(eventInterface:"MSPointerEvent"): MSPointerEvent;
          createEvent(eventInterface:"MSSiteModeEvent"): MSSiteModeEvent;
          createEvent(eventInterface:"MessageEvent"): MessageEvent;
          createEvent(eventInterface:"MouseEvent"): MouseEvent;
          createEvent(eventInterface:"MouseEvents"): MouseEvent;
          createEvent(eventInterface:"MouseWheelEvent"): MouseWheelEvent;
          createEvent(eventInterface:"MSGestureEvent"): MSGestureEvent;
          createEvent(eventInterface:"MSPointerEvent"): MSPointerEvent;
          createEvent(eventInterface:"MutationEvent"): MutationEvent;
          createEvent(eventInterface:"MutationEvents"): MutationEvent;
          createEvent(eventInterface:"NavigationCompletedEvent"): NavigationCompletedEvent;
          createEvent(eventInterface:"NavigationEvent"): NavigationEvent;
          createEvent(eventInterface:"NavigationEventWithReferrer"): NavigationEventWithReferrer;
          createEvent(eventInterface:"OfflineAudioCompletionEvent"): OfflineAudioCompletionEvent;
          createEvent(eventInterface:"PageTransitionEvent"): PageTransitionEvent;
          createEvent(eventInterface:"PermissionRequestedEvent"): PermissionRequestedEvent;
          createEvent(eventInterface:"PointerEvent"): PointerEvent;
          createEvent(eventInterface:"PopStateEvent"): PopStateEvent;
          createEvent(eventInterface:"ProgressEvent"): ProgressEvent;
          createEvent(eventInterface:"SVGZoomEvent"): SVGZoomEvent;
          createEvent(eventInterface:"SVGZoomEvents"): SVGZoomEvent;
          createEvent(eventInterface:"ScriptNotifyEvent"): ScriptNotifyEvent;
          createEvent(eventInterface:"StorageEvent"): StorageEvent;
          createEvent(eventInterface:"TextEvent"): TextEvent;
          createEvent(eventInterface:"TouchEvent"): TouchEvent;
          createEvent(eventInterface:"TrackEvent"): TrackEvent;
          createEvent(eventInterface:"TransitionEvent"): TransitionEvent;
          createEvent(eventInterface:"UIEvent"): UIEvent;
          createEvent(eventInterface:"UIEvents"): UIEvent;
          createEvent(eventInterface:"UnviewableContentIdentifiedEvent"): UnviewableContentIdentifiedEvent;
          createEvent(eventInterface:"WebGLContextEvent"): WebGLContextEvent;
          createEvent(eventInterface:"WheelEvent"): WheelEvent;
          createEvent(eventInterface: string): Event;
      }
      
      interface ElementTraversal {
          childElementCount: number;
          firstElementChild: Element;
          lastElementChild: Element;
          nextElementSibling: Element;
          previousElementSibling: Element;
      }
      
      interface GetSVGDocument {
          getSVGDocument(): Document;
      }
      
      interface GlobalEventHandlers {
          onpointercancel: (ev: PointerEvent) => any;
          onpointerdown: (ev: PointerEvent) => any;
          onpointerenter: (ev: PointerEvent) => any;
          onpointerleave: (ev: PointerEvent) => any;
          onpointermove: (ev: PointerEvent) => any;
          onpointerout: (ev: PointerEvent) => any;
          onpointerover: (ev: PointerEvent) => any;
          onpointerup: (ev: PointerEvent) => any;
          onwheel: (ev: WheelEvent) => any;
          addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      interface HTMLTableAlignment {
          /**
            * Sets or retrieves a value that you can use to implement your own ch functionality for the object.
            */
          ch: string;
          /**
            * Sets or retrieves a value that you can use to implement your own chOff functionality for the object.
            */
          chOff: string;
          /**
            * Sets or retrieves how text and other content are vertically aligned within the object that contains them.
            */
          vAlign: string;
      }
      
      interface IDBEnvironment {
          indexedDB: IDBFactory;
          msIndexedDB: IDBFactory;
      }
      
      interface LinkStyle {
          sheet: StyleSheet;
      }
      
      interface MSBaseReader {
          onabort: (ev: Event) => any;
          onerror: (ev: Event) => any;
          onload: (ev: Event) => any;
          onloadend: (ev: ProgressEvent) => any;
          onloadstart: (ev: Event) => any;
          onprogress: (ev: ProgressEvent) => any;
          readyState: number;
          result: any;
          abort(): void;
          DONE: number;
          EMPTY: number;
          LOADING: number;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      interface MSFileSaver {
          msSaveBlob(blob: any, defaultName?: string): boolean;
          msSaveOrOpenBlob(blob: any, defaultName?: string): boolean;
      }
      
      interface MSNavigatorDoNotTrack {
          confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean;
          confirmWebWideTrackingException(args: ExceptionInformation): boolean;
          removeSiteSpecificTrackingException(args: ExceptionInformation): void;
          removeWebWideTrackingException(args: ExceptionInformation): void;
          storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void;
          storeWebWideTrackingException(args: StoreExceptionsInformation): void;
      }
      
      interface NavigatorContentUtils {
      }
      
      interface NavigatorGeolocation {
          geolocation: Geolocation;
      }
      
      interface NavigatorID {
          appName: string;
          appVersion: string;
          platform: string;
          product: string;
          productSub: string;
          userAgent: string;
          vendor: string;
          vendorSub: string;
      }
      
      interface NavigatorOnLine {
          onLine: boolean;
      }
      
      interface NavigatorStorageUtils {
      }
      
      interface NodeSelector {
          querySelector(selectors: string): Element;
          querySelectorAll(selectors: string): NodeList;
      }
      
      interface RandomSource {
          getRandomValues(array: ArrayBufferView): ArrayBufferView;
      }
      
      interface SVGAnimatedPathData {
          pathSegList: SVGPathSegList;
      }
      
      interface SVGAnimatedPoints {
          animatedPoints: SVGPointList;
          points: SVGPointList;
      }
      
      interface SVGExternalResourcesRequired {
          externalResourcesRequired: SVGAnimatedBoolean;
      }
      
      interface SVGFilterPrimitiveStandardAttributes extends SVGStylable {
          height: SVGAnimatedLength;
          result: SVGAnimatedString;
          width: SVGAnimatedLength;
          x: SVGAnimatedLength;
          y: SVGAnimatedLength;
      }
      
      interface SVGFitToViewBox {
          preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
          viewBox: SVGAnimatedRect;
      }
      
      interface SVGLangSpace {
          xmllang: string;
          xmlspace: string;
      }
      
      interface SVGLocatable {
          farthestViewportElement: SVGElement;
          nearestViewportElement: SVGElement;
          getBBox(): SVGRect;
          getCTM(): SVGMatrix;
          getScreenCTM(): SVGMatrix;
          getTransformToElement(element: SVGElement): SVGMatrix;
      }
      
      interface SVGStylable {
          className: SVGAnimatedString;
          style: CSSStyleDeclaration;
      }
      
      interface SVGTests {
          requiredExtensions: SVGStringList;
          requiredFeatures: SVGStringList;
          systemLanguage: SVGStringList;
          hasExtension(extension: string): boolean;
      }
      
      interface SVGTransformable extends SVGLocatable {
          transform: SVGAnimatedTransformList;
      }
      
      interface SVGURIReference {
          href: SVGAnimatedString;
      }
      
      interface WindowBase64 {
          atob(encodedString: string): string;
          btoa(rawString: string): string;
      }
      
      interface WindowConsole {
          console: Console;
      }
      
      interface WindowLocalStorage {
          localStorage: Storage;
      }
      
      interface WindowSessionStorage {
          sessionStorage: Storage;
      }
      
      interface WindowTimers extends Object, WindowTimersExtension {
          clearInterval(handle: number): void;
          clearTimeout(handle: number): void;
          setInterval(handler: any, timeout?: any, ...args: any[]): number;
          setTimeout(handler: any, timeout?: any, ...args: any[]): number;
      }
      
      interface WindowTimersExtension {
          clearImmediate(handle: number): void;
          msClearImmediate(handle: number): void;
          msSetImmediate(expression: any, ...args: any[]): number;
          setImmediate(expression: any, ...args: any[]): number;
      }
      
      interface XMLHttpRequestEventTarget {
          onabort: (ev: Event) => any;
          onerror: (ev: Event) => any;
          onload: (ev: Event) => any;
          onloadend: (ev: ProgressEvent) => any;
          onloadstart: (ev: Event) => any;
          onprogress: (ev: ProgressEvent) => any;
          ontimeout: (ev: ProgressEvent) => any;
          addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
          addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
          addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      }
      
      
      interface NodeListOf<TNode extends Node> extends NodeList {
          length: number;
          item(index: number): TNode;
          [index: number]: TNode;
      }
      
      interface BlobPropertyBag {
          type?: string;
          endings?: string;
      }
      
      interface EventListenerObject {
          handleEvent(evt: Event): void;
      }
      
      declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
      
      interface ErrorEventHandler {
          (event: Event, source?: string, fileno?: number, columnNumber?: number): void;
          (event: string, source?: string, fileno?: number, columnNumber?: number): void;
      }
      interface PositionCallback {
          (position: Position): void;
      }
      interface PositionErrorCallback {
          (error: PositionError): void;
      }
      interface MediaQueryListListener {
          (mql: MediaQueryList): void;
      }
      interface MSLaunchUriCallback {
          (): void;
      }
      interface FrameRequestCallback {
          (time: number): void;
      }
      interface MSUnsafeFunctionCallback {
          (): any;
      }
      interface MSExecAtPriorityFunctionCallback {
          (...args: any[]): any;
      }
      interface MutationCallback {
          (mutations: MutationRecord[], observer: MutationObserver): void;
      }
      interface DecodeSuccessCallback {
          (decodedData: AudioBuffer): void;
      }
      interface DecodeErrorCallback {
          (): void;
      }
      interface FunctionStringCallback {
          (data: string): void;
      }
      declare var Audio: {new(src?: string): HTMLAudioElement; };
      declare var Image: {new(width?: number, height?: number): HTMLImageElement; };
      declare var Option: {new(text?: string, value?: string, defaultSelected?: boolean, selected?: boolean): HTMLOptionElement; };
      declare var animationStartTime: number;
      declare var applicationCache: ApplicationCache;
      declare var clientInformation: Navigator;
      declare var closed: boolean;
      declare var crypto: Crypto;
      declare var defaultStatus: string;
      declare var devicePixelRatio: number;
      declare var doNotTrack: string;
      declare var document: Document;
      declare var event: Event;
      declare var external: External;
      declare var frameElement: Element;
      declare var frames: Window;
      declare var history: History;
      declare var innerHeight: number;
      declare var innerWidth: number;
      declare var length: number;
      declare var location: Location;
      declare var locationbar: BarProp;
      declare var menubar: BarProp;
      declare var msAnimationStartTime: number;
      declare var msTemplatePrinter: MSTemplatePrinter;
      declare var name: string;
      declare var navigator: Navigator;
      declare var offscreenBuffering: string | boolean;
      declare var onabort: (ev: Event) => any;
      declare var onafterprint: (ev: Event) => any;
      declare var onbeforeprint: (ev: Event) => any;
      declare var onbeforeunload: (ev: BeforeUnloadEvent) => any;
      declare var onblur: (ev: FocusEvent) => any;
      declare var oncanplay: (ev: Event) => any;
      declare var oncanplaythrough: (ev: Event) => any;
      declare var onchange: (ev: Event) => any;
      declare var onclick: (ev: MouseEvent) => any;
      declare var oncompassneedscalibration: (ev: Event) => any;
      declare var oncontextmenu: (ev: PointerEvent) => any;
      declare var ondblclick: (ev: MouseEvent) => any;
      declare var ondevicemotion: (ev: DeviceMotionEvent) => any;
      declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any;
      declare var ondrag: (ev: DragEvent) => any;
      declare var ondragend: (ev: DragEvent) => any;
      declare var ondragenter: (ev: DragEvent) => any;
      declare var ondragleave: (ev: DragEvent) => any;
      declare var ondragover: (ev: DragEvent) => any;
      declare var ondragstart: (ev: DragEvent) => any;
      declare var ondrop: (ev: DragEvent) => any;
      declare var ondurationchange: (ev: Event) => any;
      declare var onemptied: (ev: Event) => any;
      declare var onended: (ev: Event) => any;
      declare var onerror: ErrorEventHandler;
      declare var onfocus: (ev: FocusEvent) => any;
      declare var onhashchange: (ev: HashChangeEvent) => any;
      declare var oninput: (ev: Event) => any;
      declare var onkeydown: (ev: KeyboardEvent) => any;
      declare var onkeypress: (ev: KeyboardEvent) => any;
      declare var onkeyup: (ev: KeyboardEvent) => any;
      declare var onload: (ev: Event) => any;
      declare var onloadeddata: (ev: Event) => any;
      declare var onloadedmetadata: (ev: Event) => any;
      declare var onloadstart: (ev: Event) => any;
      declare var onmessage: (ev: MessageEvent) => any;
      declare var onmousedown: (ev: MouseEvent) => any;
      declare var onmouseenter: (ev: MouseEvent) => any;
      declare var onmouseleave: (ev: MouseEvent) => any;
      declare var onmousemove: (ev: MouseEvent) => any;
      declare var onmouseout: (ev: MouseEvent) => any;
      declare var onmouseover: (ev: MouseEvent) => any;
      declare var onmouseup: (ev: MouseEvent) => any;
      declare var onmousewheel: (ev: MouseWheelEvent) => any;
      declare var onmsgesturechange: (ev: MSGestureEvent) => any;
      declare var onmsgesturedoubletap: (ev: MSGestureEvent) => any;
      declare var onmsgestureend: (ev: MSGestureEvent) => any;
      declare var onmsgesturehold: (ev: MSGestureEvent) => any;
      declare var onmsgesturestart: (ev: MSGestureEvent) => any;
      declare var onmsgesturetap: (ev: MSGestureEvent) => any;
      declare var onmsinertiastart: (ev: MSGestureEvent) => any;
      declare var onmspointercancel: (ev: MSPointerEvent) => any;
      declare var onmspointerdown: (ev: MSPointerEvent) => any;
      declare var onmspointerenter: (ev: MSPointerEvent) => any;
      declare var onmspointerleave: (ev: MSPointerEvent) => any;
      declare var onmspointermove: (ev: MSPointerEvent) => any;
      declare var onmspointerout: (ev: MSPointerEvent) => any;
      declare var onmspointerover: (ev: MSPointerEvent) => any;
      declare var onmspointerup: (ev: MSPointerEvent) => any;
      declare var onoffline: (ev: Event) => any;
      declare var ononline: (ev: Event) => any;
      declare var onorientationchange: (ev: Event) => any;
      declare var onpagehide: (ev: PageTransitionEvent) => any;
      declare var onpageshow: (ev: PageTransitionEvent) => any;
      declare var onpause: (ev: Event) => any;
      declare var onplay: (ev: Event) => any;
      declare var onplaying: (ev: Event) => any;
      declare var onpopstate: (ev: PopStateEvent) => any;
      declare var onprogress: (ev: ProgressEvent) => any;
      declare var onratechange: (ev: Event) => any;
      declare var onreadystatechange: (ev: ProgressEvent) => any;
      declare var onreset: (ev: Event) => any;
      declare var onresize: (ev: UIEvent) => any;
      declare var onscroll: (ev: UIEvent) => any;
      declare var onseeked: (ev: Event) => any;
      declare var onseeking: (ev: Event) => any;
      declare var onselect: (ev: UIEvent) => any;
      declare var onstalled: (ev: Event) => any;
      declare var onstorage: (ev: StorageEvent) => any;
      declare var onsubmit: (ev: Event) => any;
      declare var onsuspend: (ev: Event) => any;
      declare var ontimeupdate: (ev: Event) => any;
      declare var ontouchcancel: any;
      declare var ontouchend: any;
      declare var ontouchmove: any;
      declare var ontouchstart: any;
      declare var onunload: (ev: Event) => any;
      declare var onvolumechange: (ev: Event) => any;
      declare var onwaiting: (ev: Event) => any;
      declare var opener: Window;
      declare var orientation: string;
      declare var outerHeight: number;
      declare var outerWidth: number;
      declare var pageXOffset: number;
      declare var pageYOffset: number;
      declare var parent: Window;
      declare var performance: Performance;
      declare var personalbar: BarProp;
      declare var screen: Screen;
      declare var screenLeft: number;
      declare var screenTop: number;
      declare var screenX: number;
      declare var screenY: number;
      declare var scrollX: number;
      declare var scrollY: number;
      declare var scrollbars: BarProp;
      declare var self: Window;
      declare var status: string;
      declare var statusbar: BarProp;
      declare var styleMedia: StyleMedia;
      declare var toolbar: BarProp;
      declare var top: Window;
      declare var window: Window;
      declare function alert(message?: any): void;
      declare function blur(): void;
      declare function cancelAnimationFrame(handle: number): void;
      declare function captureEvents(): void;
      declare function close(): void;
      declare function confirm(message?: string): boolean;
      declare function focus(): void;
      declare function getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
      declare function getMatchedCSSRules(elt: Element, pseudoElt?: string): CSSRuleList;
      declare function getSelection(): Selection;
      declare function matchMedia(mediaQuery: string): MediaQueryList;
      declare function moveBy(x?: number, y?: number): void;
      declare function moveTo(x?: number, y?: number): void;
      declare function msCancelRequestAnimationFrame(handle: number): void;
      declare function msMatchMedia(mediaQuery: string): MediaQueryList;
      declare function msRequestAnimationFrame(callback: FrameRequestCallback): number;
      declare function msWriteProfilerMark(profilerMarkName: string): void;
      declare function open(url?: string, target?: string, features?: string, replace?: boolean): any;
      declare function postMessage(message: any, targetOrigin: string, ports?: any): void;
      declare function print(): void;
      declare function prompt(message?: string, _default?: string): string;
      declare function releaseEvents(): void;
      declare function requestAnimationFrame(callback: FrameRequestCallback): number;
      declare function resizeBy(x?: number, y?: number): void;
      declare function resizeTo(x?: number, y?: number): void;
      declare function scroll(x?: number, y?: number): void;
      declare function scrollBy(x?: number, y?: number): void;
      declare function scrollTo(x?: number, y?: number): void;
      declare function webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
      declare function webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
      declare function toString(): string;
      declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      declare function dispatchEvent(evt: Event): boolean;
      declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      declare function clearInterval(handle: number): void;
      declare function clearTimeout(handle: number): void;
      declare function setInterval(handler: any, timeout?: any, ...args: any[]): number;
      declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
      declare function clearImmediate(handle: number): void;
      declare function msClearImmediate(handle: number): void;
      declare function msSetImmediate(expression: any, ...args: any[]): number;
      declare function setImmediate(expression: any, ...args: any[]): number;
      declare var sessionStorage: Storage;
      declare var localStorage: Storage;
      declare var console: Console;
      declare var onpointercancel: (ev: PointerEvent) => any;
      declare var onpointerdown: (ev: PointerEvent) => any;
      declare var onpointerenter: (ev: PointerEvent) => any;
      declare var onpointerleave: (ev: PointerEvent) => any;
      declare var onpointermove: (ev: PointerEvent) => any;
      declare var onpointerout: (ev: PointerEvent) => any;
      declare var onpointerover: (ev: PointerEvent) => any;
      declare var onpointerup: (ev: PointerEvent) => any;
      declare var onwheel: (ev: WheelEvent) => any;
      declare var indexedDB: IDBFactory;
      declare var msIndexedDB: IDBFactory;
      declare function atob(encodedString: string): string;
      declare function btoa(rawString: string): string;
      declare function addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
      declare function addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
      declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
      /////////////////////////////
      /// WorkerGlobalScope APIs 
      /////////////////////////////
      // These are only available in a Web Worker 
      declare function importScripts(...urls: string[]): void;
      
      
      /////////////////////////////
      /// Windows Script Host APIS
      /////////////////////////////
      
      
      interface ActiveXObject {
          new (s: string): any;
      }
      declare var ActiveXObject: ActiveXObject;
      
      interface ITextWriter {
          Write(s: string): void;
          WriteLine(s: string): void;
          Close(): void;
      }
      
      interface TextStreamBase {
          /**
           * The column number of the current character position in an input stream.
           */
          Column: number;
      
          /**
           * The current line number in an input stream.
           */
          Line: number;
      
          /**
           * Closes a text stream.
           * It is not necessary to close standard streams; they close automatically when the process ends. If 
           * you close a standard stream, be aware that any other pointers to that standard stream become invalid.
           */
          Close(): void;
      }
      
      interface TextStreamWriter extends TextStreamBase {
          /**
           * Sends a string to an output stream.
           */
          Write(s: string): void;
      
          /**
           * Sends a specified number of blank lines (newline characters) to an output stream.
           */
          WriteBlankLines(intLines: number): void;
      
          /**
           * Sends a string followed by a newline character to an output stream.
           */
          WriteLine(s: string): void;
      }
      
      interface TextStreamReader extends TextStreamBase {
          /**
           * Returns a specified number of characters from an input stream, starting at the current pointer position.
           * Does not return until the ENTER key is pressed.
           * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
           */
          Read(characters: number): string;
      
          /**
           * Returns all characters from an input stream.
           * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
           */
          ReadAll(): string;
      
          /**
           * Returns an entire line from an input stream.
           * Although this method extracts the newline character, it does not add it to the returned string.
           * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
           */
          ReadLine(): string;
      
          /**
           * Skips a specified number of characters when reading from an input text stream.
           * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
           * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.)
           */
          Skip(characters: number): void;
      
          /**
           * Skips the next line when reading from an input text stream.
           * Can only be used on a stream in reading mode, not writing or appending mode.
           */
          SkipLine(): void;
      
          /**
           * Indicates whether the stream pointer position is at the end of a line.
           */
          AtEndOfLine: boolean;
      
          /**
           * Indicates whether the stream pointer position is at the end of a stream.
           */
          AtEndOfStream: boolean;
      }
      
      declare var WScript: {
          /**
          * Outputs text to either a message box (under WScript.exe) or the command console window followed by
          * a newline (under CScript.exe).
          */
          Echo(s: any): void;
      
          /**
           * Exposes the write-only error output stream for the current script.
           * Can be accessed only while using CScript.exe.
           */
          StdErr: TextStreamWriter;
      
          /**
           * Exposes the write-only output stream for the current script.
           * Can be accessed only while using CScript.exe.
           */
          StdOut: TextStreamWriter;
          Arguments: { length: number; Item(n: number): string; };
      
          /**
           *  The full path of the currently running script.
           */
          ScriptFullName: string;
      
          /**
           * Forces the script to stop immediately, with an optional exit code.
           */
          Quit(exitCode?: number): number;
      
          /**
           * The Windows Script Host build version number.
           */
          BuildVersion: number;
      
          /**
           * Fully qualified path of the host executable.
           */
          FullName: string;
      
          /**
           * Gets/sets the script mode - interactive(true) or batch(false).
           */
          Interactive: boolean;
      
          /**
           * The name of the host executable (WScript.exe or CScript.exe).
           */
          Name: string;
      
          /**
           * Path of the directory containing the host executable.
           */
          Path: string;
      
          /**
           * The filename of the currently running script.
           */
          ScriptName: string;
      
          /**
           * Exposes the read-only input stream for the current script.
           * Can be accessed only while using CScript.exe.
           */
          StdIn: TextStreamReader;
      
          /**
           * Windows Script Host version
           */
          Version: string;
      
          /**
           * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event.
           */
          ConnectObject(objEventSource: any, strPrefix: string): void;
      
          /**
           * Creates a COM object.
           * @param strProgiID
           * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events.
           */
          CreateObject(strProgID: string, strPrefix?: string): any;
      
          /**
           * Disconnects a COM object from its event sources.
           */
          DisconnectObject(obj: any): void;
      
          /**
           * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file.
           * @param strPathname Fully qualified path to the file containing the object persisted to disk.
           *                       For objects in memory, pass a zero-length string.
           * @param strProgID
           * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events.
           */
          GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any;
      
          /**
           * Suspends script execution for a specified length of time, then continues execution.
           * @param intTime Interval (in milliseconds) to suspend script execution.
           */
          Sleep(intTime: number): void;
      };
      
      /**
       * Allows enumerating over a COM collection, which may not have indexed item access.
       */
      interface Enumerator<T> {
          /**
           * Returns true if the current item is the last one in the collection, or the collection is empty,
           * or the current item is undefined.
           */
          atEnd(): boolean;
      
          /**
           * Returns the current item in the collection
           */
          item(): T;
      
          /**
           * Resets the current item in the collection to the first item. If there are no items in the collection,
           * the current item is set to undefined.
           */
          moveFirst(): void;
      
          /**
           * Moves the current item to the next item in the collection. If the enumerator is at the end of
           * the collection or the collection is empty, the current item is set to undefined.
           */
          moveNext(): void;
      }
      
      interface EnumeratorConstructor {
          new <T>(collection: any): Enumerator<T>;
          new (collection: any): Enumerator<any>;
      }
      
      declare var Enumerator: EnumeratorConstructor;
      
      /**
       * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions.
       */
      interface VBArray<T> {
          /**
           * Returns the number of dimensions (1-based).
           */
          dimensions(): number;
      
          /**
           * Takes an index for each dimension in the array, and returns the item at the corresponding location.
           */
          getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T;
      
          /**
           * Returns the smallest available index for a given dimension.
           * @param dimension 1-based dimension (defaults to 1)
           */
          lbound(dimension?: number): number;
      
          /**
           * Returns the largest available index for a given dimension.
           * @param dimension 1-based dimension (defaults to 1)
           */
          ubound(dimension?: number): number;
      
          /**
           * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions,
           * each successive dimension is appended to the end of the array.
           * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6]
           */
          toArray(): T[];
      }
      
      interface VBArrayConstructor {
          new <T>(safeArray: any): VBArray<T>;
          new (safeArray: any): VBArray<any>;
      }
      
      declare var VBArray: VBArrayConstructor;
      
    • tsc.js
      /*! *****************************************************************************
      Copyright (c) Microsoft Corporation. All rights reserved. 
      Licensed under the Apache License, Version 2.0 (the "License"); you may not use
      this file except in compliance with the License. You may obtain a copy of the
      License at http://www.apache.org/licenses/LICENSE-2.0  
       
      THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
      WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
      MERCHANTABLITY OR NON-INFRINGEMENT. 
       
      See the Apache Version 2.0 License for specific language governing permissions
      and limitations under the License.
      ***************************************************************************** */
      
      var ts;
      (function (ts) {
          (function (ExitStatus) {
              ExitStatus[ExitStatus["Success"] = 0] = "Success";
              ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped";
              ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated";
          })(ts.ExitStatus || (ts.ExitStatus = {}));
          var ExitStatus = ts.ExitStatus;
          (function (DiagnosticCategory) {
              DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
              DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
              DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
          })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {}));
          var DiagnosticCategory = ts.DiagnosticCategory;
      })(ts || (ts = {}));
      /// <reference path="types.ts"/>
      var ts;
      (function (ts) {
          function forEach(array, callback) {
              if (array) {
                  for (var i = 0, len = array.length; i < len; i++) {
                      var result = callback(array[i], i);
                      if (result) {
                          return result;
                      }
                  }
              }
              return undefined;
          }
          ts.forEach = forEach;
          function contains(array, value) {
              if (array) {
                  for (var _i = 0; _i < array.length; _i++) {
                      var v = array[_i];
                      if (v === value) {
                          return true;
                      }
                  }
              }
              return false;
          }
          ts.contains = contains;
          function indexOf(array, value) {
              if (array) {
                  for (var i = 0, len = array.length; i < len; i++) {
                      if (array[i] === value) {
                          return i;
                      }
                  }
              }
              return -1;
          }
          ts.indexOf = indexOf;
          function countWhere(array, predicate) {
              var count = 0;
              if (array) {
                  for (var _i = 0; _i < array.length; _i++) {
                      var v = array[_i];
                      if (predicate(v)) {
                          count++;
                      }
                  }
              }
              return count;
          }
          ts.countWhere = countWhere;
          function filter(array, f) {
              var result;
              if (array) {
                  result = [];
                  for (var _i = 0; _i < array.length; _i++) {
                      var item = array[_i];
                      if (f(item)) {
                          result.push(item);
                      }
                  }
              }
              return result;
          }
          ts.filter = filter;
          function map(array, f) {
              var result;
              if (array) {
                  result = [];
                  for (var _i = 0; _i < array.length; _i++) {
                      var v = array[_i];
                      result.push(f(v));
                  }
              }
              return result;
          }
          ts.map = map;
          function concatenate(array1, array2) {
              if (!array2 || !array2.length)
                  return array1;
              if (!array1 || !array1.length)
                  return array2;
              return array1.concat(array2);
          }
          ts.concatenate = concatenate;
          function deduplicate(array) {
              var result;
              if (array) {
                  result = [];
                  for (var _i = 0; _i < array.length; _i++) {
                      var item = array[_i];
                      if (!contains(result, item)) {
                          result.push(item);
                      }
                  }
              }
              return result;
          }
          ts.deduplicate = deduplicate;
          function sum(array, prop) {
              var result = 0;
              for (var _i = 0; _i < array.length; _i++) {
                  var v = array[_i];
                  result += v[prop];
              }
              return result;
          }
          ts.sum = sum;
          function addRange(to, from) {
              if (to && from) {
                  for (var _i = 0; _i < from.length; _i++) {
                      var v = from[_i];
                      to.push(v);
                  }
              }
          }
          ts.addRange = addRange;
          function lastOrUndefined(array) {
              if (array.length === 0) {
                  return undefined;
              }
              return array[array.length - 1];
          }
          ts.lastOrUndefined = lastOrUndefined;
          function binarySearch(array, value) {
              var low = 0;
              var high = array.length - 1;
              while (low <= high) {
                  var middle = low + ((high - low) >> 1);
                  var midValue = array[middle];
                  if (midValue === value) {
                      return middle;
                  }
                  else if (midValue > value) {
                      high = middle - 1;
                  }
                  else {
                      low = middle + 1;
                  }
              }
              return ~low;
          }
          ts.binarySearch = binarySearch;
          function reduceLeft(array, f, initial) {
              if (array) {
                  var count = array.length;
                  if (count > 0) {
                      var pos = 0;
                      var result = arguments.length <= 2 ? array[pos++] : initial;
                      while (pos < count) {
                          result = f(result, array[pos++]);
                      }
                      return result;
                  }
              }
              return initial;
          }
          ts.reduceLeft = reduceLeft;
          function reduceRight(array, f, initial) {
              if (array) {
                  var pos = array.length - 1;
                  if (pos >= 0) {
                      var result = arguments.length <= 2 ? array[pos--] : initial;
                      while (pos >= 0) {
                          result = f(result, array[pos--]);
                      }
                      return result;
                  }
              }
              return initial;
          }
          ts.reduceRight = reduceRight;
          var hasOwnProperty = Object.prototype.hasOwnProperty;
          function hasProperty(map, key) {
              return hasOwnProperty.call(map, key);
          }
          ts.hasProperty = hasProperty;
          function getProperty(map, key) {
              return hasOwnProperty.call(map, key) ? map[key] : undefined;
          }
          ts.getProperty = getProperty;
          function isEmpty(map) {
              for (var id in map) {
                  if (hasProperty(map, id)) {
                      return false;
                  }
              }
              return true;
          }
          ts.isEmpty = isEmpty;
          function clone(object) {
              var result = {};
              for (var id in object) {
                  result[id] = object[id];
              }
              return result;
          }
          ts.clone = clone;
          function extend(first, second) {
              var result = {};
              for (var id in first) {
                  result[id] = first[id];
              }
              for (var id in second) {
                  if (!hasProperty(result, id)) {
                      result[id] = second[id];
                  }
              }
              return result;
          }
          ts.extend = extend;
          function forEachValue(map, callback) {
              var result;
              for (var id in map) {
                  if (result = callback(map[id]))
                      break;
              }
              return result;
          }
          ts.forEachValue = forEachValue;
          function forEachKey(map, callback) {
              var result;
              for (var id in map) {
                  if (result = callback(id))
                      break;
              }
              return result;
          }
          ts.forEachKey = forEachKey;
          function lookUp(map, key) {
              return hasProperty(map, key) ? map[key] : undefined;
          }
          ts.lookUp = lookUp;
          function copyMap(source, target) {
              for (var p in source) {
                  target[p] = source[p];
              }
          }
          ts.copyMap = copyMap;
          function arrayToMap(array, makeKey) {
              var result = {};
              forEach(array, function (value) {
                  result[makeKey(value)] = value;
              });
              return result;
          }
          ts.arrayToMap = arrayToMap;
          function memoize(callback) {
              var value;
              return function () {
                  if (callback) {
                      value = callback();
                      callback = undefined;
                  }
                  return value;
              };
          }
          ts.memoize = memoize;
          function formatStringFromArgs(text, args, baseIndex) {
              baseIndex = baseIndex || 0;
              return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; });
          }
          ts.localizedDiagnosticMessages = undefined;
          function getLocaleSpecificMessage(message) {
              return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message]
                  ? ts.localizedDiagnosticMessages[message]
                  : message;
          }
          ts.getLocaleSpecificMessage = getLocaleSpecificMessage;
          function createFileDiagnostic(file, start, length, message) {
              var end = start + length;
              Debug.assert(start >= 0, "start must be non-negative, is " + start);
              Debug.assert(length >= 0, "length must be non-negative, is " + length);
              Debug.assert(start <= file.text.length, "start must be within the bounds of the file. " + start + " > " + file.text.length);
              Debug.assert(end <= file.text.length, "end must be the bounds of the file. " + end + " > " + file.text.length);
              var text = getLocaleSpecificMessage(message.key);
              if (arguments.length > 4) {
                  text = formatStringFromArgs(text, arguments, 4);
              }
              return {
                  file: file,
                  start: start,
                  length: length,
                  messageText: text,
                  category: message.category,
                  code: message.code
              };
          }
          ts.createFileDiagnostic = createFileDiagnostic;
          function createCompilerDiagnostic(message) {
              var text = getLocaleSpecificMessage(message.key);
              if (arguments.length > 1) {
                  text = formatStringFromArgs(text, arguments, 1);
              }
              return {
                  file: undefined,
                  start: undefined,
                  length: undefined,
                  messageText: text,
                  category: message.category,
                  code: message.code
              };
          }
          ts.createCompilerDiagnostic = createCompilerDiagnostic;
          function chainDiagnosticMessages(details, message) {
              var text = getLocaleSpecificMessage(message.key);
              if (arguments.length > 2) {
                  text = formatStringFromArgs(text, arguments, 2);
              }
              return {
                  messageText: text,
                  category: message.category,
                  code: message.code,
                  next: details
              };
          }
          ts.chainDiagnosticMessages = chainDiagnosticMessages;
          function concatenateDiagnosticMessageChains(headChain, tailChain) {
              Debug.assert(!headChain.next);
              headChain.next = tailChain;
              return headChain;
          }
          ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains;
          function compareValues(a, b) {
              if (a === b)
                  return 0;
              if (a === undefined)
                  return -1;
              if (b === undefined)
                  return 1;
              return a < b ? -1 : 1;
          }
          ts.compareValues = compareValues;
          function getDiagnosticFileName(diagnostic) {
              return diagnostic.file ? diagnostic.file.fileName : undefined;
          }
          function compareDiagnostics(d1, d2) {
              return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) ||
                  compareValues(d1.start, d2.start) ||
                  compareValues(d1.length, d2.length) ||
                  compareValues(d1.code, d2.code) ||
                  compareMessageText(d1.messageText, d2.messageText) ||
                  0;
          }
          ts.compareDiagnostics = compareDiagnostics;
          function compareMessageText(text1, text2) {
              while (text1 && text2) {
                  var string1 = typeof text1 === "string" ? text1 : text1.messageText;
                  var string2 = typeof text2 === "string" ? text2 : text2.messageText;
                  var res = compareValues(string1, string2);
                  if (res) {
                      return res;
                  }
                  text1 = typeof text1 === "string" ? undefined : text1.next;
                  text2 = typeof text2 === "string" ? undefined : text2.next;
              }
              if (!text1 && !text2) {
                  return 0;
              }
              return text1 ? 1 : -1;
          }
          function sortAndDeduplicateDiagnostics(diagnostics) {
              return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics));
          }
          ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics;
          function deduplicateSortedDiagnostics(diagnostics) {
              if (diagnostics.length < 2) {
                  return diagnostics;
              }
              var newDiagnostics = [diagnostics[0]];
              var previousDiagnostic = diagnostics[0];
              for (var i = 1; i < diagnostics.length; i++) {
                  var currentDiagnostic = diagnostics[i];
                  var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0;
                  if (!isDupe) {
                      newDiagnostics.push(currentDiagnostic);
                      previousDiagnostic = currentDiagnostic;
                  }
              }
              return newDiagnostics;
          }
          ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics;
          function normalizeSlashes(path) {
              return path.replace(/\\/g, "/");
          }
          ts.normalizeSlashes = normalizeSlashes;
          function getRootLength(path) {
              if (path.charCodeAt(0) === 47) {
                  if (path.charCodeAt(1) !== 47)
                      return 1;
                  var p1 = path.indexOf("/", 2);
                  if (p1 < 0)
                      return 2;
                  var p2 = path.indexOf("/", p1 + 1);
                  if (p2 < 0)
                      return p1 + 1;
                  return p2 + 1;
              }
              if (path.charCodeAt(1) === 58) {
                  if (path.charCodeAt(2) === 47)
                      return 3;
                  return 2;
              }
              if (path.lastIndexOf("file:///", 0) === 0) {
                  return "file:///".length;
              }
              var idx = path.indexOf('://');
              if (idx !== -1) {
                  return idx + "://".length;
              }
              return 0;
          }
          ts.getRootLength = getRootLength;
          ts.directorySeparator = "/";
          function getNormalizedParts(normalizedSlashedPath, rootLength) {
              var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator);
              var normalized = [];
              for (var _i = 0; _i < parts.length; _i++) {
                  var part = parts[_i];
                  if (part !== ".") {
                      if (part === ".." && normalized.length > 0 && lastOrUndefined(normalized) !== "..") {
                          normalized.pop();
                      }
                      else {
                          if (part) {
                              normalized.push(part);
                          }
                      }
                  }
              }
              return normalized;
          }
          function normalizePath(path) {
              path = normalizeSlashes(path);
              var rootLength = getRootLength(path);
              var normalized = getNormalizedParts(path, rootLength);
              return path.substr(0, rootLength) + normalized.join(ts.directorySeparator);
          }
          ts.normalizePath = normalizePath;
          function getDirectoryPath(path) {
              return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator)));
          }
          ts.getDirectoryPath = getDirectoryPath;
          function isUrl(path) {
              return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1;
          }
          ts.isUrl = isUrl;
          function isRootedDiskPath(path) {
              return getRootLength(path) !== 0;
          }
          ts.isRootedDiskPath = isRootedDiskPath;
          function normalizedPathComponents(path, rootLength) {
              var normalizedParts = getNormalizedParts(path, rootLength);
              return [path.substr(0, rootLength)].concat(normalizedParts);
          }
          function getNormalizedPathComponents(path, currentDirectory) {
              path = normalizeSlashes(path);
              var rootLength = getRootLength(path);
              if (rootLength == 0) {
                  path = combinePaths(normalizeSlashes(currentDirectory), path);
                  rootLength = getRootLength(path);
              }
              return normalizedPathComponents(path, rootLength);
          }
          ts.getNormalizedPathComponents = getNormalizedPathComponents;
          function getNormalizedAbsolutePath(fileName, currentDirectory) {
              return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory));
          }
          ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
          function getNormalizedPathFromPathComponents(pathComponents) {
              if (pathComponents && pathComponents.length) {
                  return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator);
              }
          }
          ts.getNormalizedPathFromPathComponents = getNormalizedPathFromPathComponents;
          function getNormalizedPathComponentsOfUrl(url) {
              // Get root length of http://www.website.com/folder1/foler2/
              // In this example the root is:  http://www.website.com/ 
              // normalized path components should be ["http://www.website.com/", "folder1", "folder2"]
              var urlLength = url.length;
              var rootLength = url.indexOf("://") + "://".length;
              while (rootLength < urlLength) {
                  if (url.charCodeAt(rootLength) === 47) {
                      rootLength++;
                  }
                  else {
                      break;
                  }
              }
              if (rootLength === urlLength) {
                  return [url];
              }
              var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength);
              if (indexOfNextSlash !== -1) {
                  rootLength = indexOfNextSlash + 1;
                  return normalizedPathComponents(url, rootLength);
              }
              else {
                  return [url + ts.directorySeparator];
              }
          }
          function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) {
              if (isUrl(pathOrUrl)) {
                  return getNormalizedPathComponentsOfUrl(pathOrUrl);
              }
              else {
                  return getNormalizedPathComponents(pathOrUrl, currentDirectory);
              }
          }
          function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) {
              var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory);
              var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory);
              if (directoryComponents.length > 1 && lastOrUndefined(directoryComponents) === "") {
                  directoryComponents.length--;
              }
              for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) {
                  if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) {
                      break;
                  }
              }
              if (joinStartIndex) {
                  var relativePath = "";
                  var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length);
                  for (; joinStartIndex < directoryComponents.length; joinStartIndex++) {
                      if (directoryComponents[joinStartIndex] !== "") {
                          relativePath = relativePath + ".." + ts.directorySeparator;
                      }
                  }
                  return relativePath + relativePathComponents.join(ts.directorySeparator);
              }
              var absolutePath = getNormalizedPathFromPathComponents(pathComponents);
              if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) {
                  absolutePath = "file:///" + absolutePath;
              }
              return absolutePath;
          }
          ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
          function getBaseFileName(path) {
              var i = path.lastIndexOf(ts.directorySeparator);
              return i < 0 ? path : path.substring(i + 1);
          }
          ts.getBaseFileName = getBaseFileName;
          function combinePaths(path1, path2) {
              if (!(path1 && path1.length))
                  return path2;
              if (!(path2 && path2.length))
                  return path1;
              if (getRootLength(path2) !== 0)
                  return path2;
              if (path1.charAt(path1.length - 1) === ts.directorySeparator)
                  return path1 + path2;
              return path1 + ts.directorySeparator + path2;
          }
          ts.combinePaths = combinePaths;
          function fileExtensionIs(path, extension) {
              var pathLen = path.length;
              var extLen = extension.length;
              return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension;
          }
          ts.fileExtensionIs = fileExtensionIs;
          ts.supportedExtensions = [".ts", ".d.ts"];
          var extensionsToRemove = [".d.ts", ".ts", ".js"];
          function removeFileExtension(path) {
              for (var _i = 0; _i < extensionsToRemove.length; _i++) {
                  var ext = extensionsToRemove[_i];
                  if (fileExtensionIs(path, ext)) {
                      return path.substr(0, path.length - ext.length);
                  }
              }
              return path;
          }
          ts.removeFileExtension = removeFileExtension;
          var backslashOrDoubleQuote = /[\"\\]/g;
          var escapedCharsRegExp = /[\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
          var escapedCharsMap = {
              "\0": "\\0",
              "\t": "\\t",
              "\v": "\\v",
              "\f": "\\f",
              "\b": "\\b",
              "\r": "\\r",
              "\n": "\\n",
              "\\": "\\\\",
              "\"": "\\\"",
              "\u2028": "\\u2028",
              "\u2029": "\\u2029",
              "\u0085": "\\u0085"
          };
          function Symbol(flags, name) {
              this.flags = flags;
              this.name = name;
              this.declarations = undefined;
          }
          function Type(checker, flags) {
              this.flags = flags;
          }
          function Signature(checker) {
          }
          ts.objectAllocator = {
              getNodeConstructor: function (kind) {
                  function Node() {
                  }
                  Node.prototype = {
                      kind: kind,
                      pos: 0,
                      end: 0,
                      flags: 0,
                      parent: undefined
                  };
                  return Node;
              },
              getSymbolConstructor: function () { return Symbol; },
              getTypeConstructor: function () { return Type; },
              getSignatureConstructor: function () { return Signature; }
          };
          var Debug;
          (function (Debug) {
              var currentAssertionLevel = 0;
              function shouldAssert(level) {
                  return currentAssertionLevel >= level;
              }
              Debug.shouldAssert = shouldAssert;
              function assert(expression, message, verboseDebugInfo) {
                  if (!expression) {
                      var verboseDebugString = "";
                      if (verboseDebugInfo) {
                          verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo();
                      }
                      throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString);
                  }
              }
              Debug.assert = assert;
              function fail(message) {
                  Debug.assert(false, message);
              }
              Debug.fail = fail;
          })(Debug = ts.Debug || (ts.Debug = {}));
      })(ts || (ts = {}));
      /// <reference path="core.ts"/>
      var ts;
      (function (ts) {
          ts.sys = (function () {
              function getWScriptSystem() {
                  var fso = new ActiveXObject("Scripting.FileSystemObject");
                  var fileStream = new ActiveXObject("ADODB.Stream");
                  fileStream.Type = 2;
                  var binaryStream = new ActiveXObject("ADODB.Stream");
                  binaryStream.Type = 1;
                  var args = [];
                  for (var i = 0; i < WScript.Arguments.length; i++) {
                      args[i] = WScript.Arguments.Item(i);
                  }
                  function readFile(fileName, encoding) {
                      if (!fso.FileExists(fileName)) {
                          return undefined;
                      }
                      fileStream.Open();
                      try {
                          if (encoding) {
                              fileStream.Charset = encoding;
                              fileStream.LoadFromFile(fileName);
                          }
                          else {
                              fileStream.Charset = "x-ansi";
                              fileStream.LoadFromFile(fileName);
                              var bom = fileStream.ReadText(2) || "";
                              fileStream.Position = 0;
                              fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8";
                          }
                          return fileStream.ReadText();
                      }
                      catch (e) {
                          throw e;
                      }
                      finally {
                          fileStream.Close();
                      }
                  }
                  function writeFile(fileName, data, writeByteOrderMark) {
                      fileStream.Open();
                      binaryStream.Open();
                      try {
                          fileStream.Charset = "utf-8";
                          fileStream.WriteText(data);
                          if (writeByteOrderMark) {
                              fileStream.Position = 0;
                          }
                          else {
                              fileStream.Position = 3;
                          }
                          fileStream.CopyTo(binaryStream);
                          binaryStream.SaveToFile(fileName, 2);
                      }
                      finally {
                          binaryStream.Close();
                          fileStream.Close();
                      }
                  }
                  function getNames(collection) {
                      var result = [];
                      for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) {
                          result.push(e.item().Name);
                      }
                      return result.sort();
                  }
                  function readDirectory(path, extension) {
                      var result = [];
                      visitDirectory(path);
                      return result;
                      function visitDirectory(path) {
                          var folder = fso.GetFolder(path || ".");
                          var files = getNames(folder.files);
                          for (var _i = 0; _i < files.length; _i++) {
                              var name_1 = files[_i];
                              if (!extension || ts.fileExtensionIs(name_1, extension)) {
                                  result.push(ts.combinePaths(path, name_1));
                              }
                          }
                          var subfolders = getNames(folder.subfolders);
                          for (var _a = 0; _a < subfolders.length; _a++) {
                              var current = subfolders[_a];
                              visitDirectory(ts.combinePaths(path, current));
                          }
                      }
                  }
                  return {
                      args: args,
                      newLine: "\r\n",
                      useCaseSensitiveFileNames: false,
                      write: function (s) {
                          WScript.StdOut.Write(s);
                      },
                      readFile: readFile,
                      writeFile: writeFile,
                      resolvePath: function (path) {
                          return fso.GetAbsolutePathName(path);
                      },
                      fileExists: function (path) {
                          return fso.FileExists(path);
                      },
                      directoryExists: function (path) {
                          return fso.FolderExists(path);
                      },
                      createDirectory: function (directoryName) {
                          if (!this.directoryExists(directoryName)) {
                              fso.CreateFolder(directoryName);
                          }
                      },
                      getExecutingFilePath: function () {
                          return WScript.ScriptFullName;
                      },
                      getCurrentDirectory: function () {
                          return new ActiveXObject("WScript.Shell").CurrentDirectory;
                      },
                      readDirectory: readDirectory,
                      exit: function (exitCode) {
                          try {
                              WScript.Quit(exitCode);
                          }
                          catch (e) {
                          }
                      }
                  };
              }
              function getNodeSystem() {
                  var _fs = require("fs");
                  var _path = require("path");
                  var _os = require('os');
                  var platform = _os.platform();
                  var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin";
                  function readFile(fileName, encoding) {
                      if (!_fs.existsSync(fileName)) {
                          return undefined;
                      }
                      var buffer = _fs.readFileSync(fileName);
                      var len = buffer.length;
                      if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) {
                          len &= ~1;
                          for (var i = 0; i < len; i += 2) {
                              var temp = buffer[i];
                              buffer[i] = buffer[i + 1];
                              buffer[i + 1] = temp;
                          }
                          return buffer.toString("utf16le", 2);
                      }
                      if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) {
                          return buffer.toString("utf16le", 2);
                      }
                      if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {
                          return buffer.toString("utf8", 3);
                      }
                      return buffer.toString("utf8");
                  }
                  function writeFile(fileName, data, writeByteOrderMark) {
                      if (writeByteOrderMark) {
                          data = '\uFEFF' + data;
                      }
                      _fs.writeFileSync(fileName, data, "utf8");
                  }
                  function readDirectory(path, extension) {
                      var result = [];
                      visitDirectory(path);
                      return result;
                      function visitDirectory(path) {
                          var files = _fs.readdirSync(path || ".").sort();
                          var directories = [];
                          for (var _i = 0; _i < files.length; _i++) {
                              var current = files[_i];
                              var name = ts.combinePaths(path, current);
                              var stat = _fs.lstatSync(name);
                              if (stat.isFile()) {
                                  if (!extension || ts.fileExtensionIs(name, extension)) {
                                      result.push(name);
                                  }
                              }
                              else if (stat.isDirectory()) {
                                  directories.push(name);
                              }
                          }
                          for (var _a = 0; _a < directories.length; _a++) {
                              var current = directories[_a];
                              visitDirectory(current);
                          }
                      }
                  }
                  return {
                      args: process.argv.slice(2),
                      newLine: _os.EOL,
                      useCaseSensitiveFileNames: useCaseSensitiveFileNames,
                      write: function (s) {
                          _fs.writeSync(1, s);
                      },
                      readFile: readFile,
                      writeFile: writeFile,
                      watchFile: function (fileName, callback) {
                          _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged);
                          return {
                              close: function () { _fs.unwatchFile(fileName, fileChanged); }
                          };
                          function fileChanged(curr, prev) {
                              if (+curr.mtime <= +prev.mtime) {
                                  return;
                              }
                              callback(fileName);
                          }
                          ;
                      },
                      resolvePath: function (path) {
                          return _path.resolve(path);
                      },
                      fileExists: function (path) {
                          return _fs.existsSync(path);
                      },
                      directoryExists: function (path) {
                          return _fs.existsSync(path) && _fs.statSync(path).isDirectory();
                      },
                      createDirectory: function (directoryName) {
                          if (!this.directoryExists(directoryName)) {
                              _fs.mkdirSync(directoryName);
                          }
                      },
                      getExecutingFilePath: function () {
                          return __filename;
                      },
                      getCurrentDirectory: function () {
                          return process.cwd();
                      },
                      readDirectory: readDirectory,
                      getMemoryUsage: function () {
                          if (global.gc) {
                              global.gc();
                          }
                          return process.memoryUsage().heapUsed;
                      },
                      exit: function (exitCode) {
                          process.exit(exitCode);
                      }
                  };
              }
              if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") {
                  return getWScriptSystem();
              }
              else if (typeof module !== "undefined" && module.exports) {
                  return getNodeSystem();
              }
              else {
                  return undefined;
              }
          })();
      })(ts || (ts = {}));
      /// <reference path="types.ts" />
      var ts;
      (function (ts) {
          ts.Diagnostics = {
              Unterminated_string_literal: { code: 1002, category: ts.DiagnosticCategory.Error, key: "Unterminated string literal." },
              Identifier_expected: { code: 1003, category: ts.DiagnosticCategory.Error, key: "Identifier expected." },
              _0_expected: { code: 1005, category: ts.DiagnosticCategory.Error, key: "'{0}' expected." },
              A_file_cannot_have_a_reference_to_itself: { code: 1006, category: ts.DiagnosticCategory.Error, key: "A file cannot have a reference to itself." },
              Trailing_comma_not_allowed: { code: 1009, category: ts.DiagnosticCategory.Error, key: "Trailing comma not allowed." },
              Asterisk_Slash_expected: { code: 1010, category: ts.DiagnosticCategory.Error, key: "'*/' expected." },
              Unexpected_token: { code: 1012, category: ts.DiagnosticCategory.Error, key: "Unexpected token." },
              A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: ts.DiagnosticCategory.Error, key: "A rest parameter must be last in a parameter list." },
              Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: ts.DiagnosticCategory.Error, key: "Parameter cannot have question mark and initializer." },
              A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: ts.DiagnosticCategory.Error, key: "A required parameter cannot follow an optional parameter." },
              An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: ts.DiagnosticCategory.Error, key: "An index signature cannot have a rest parameter." },
              An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: ts.DiagnosticCategory.Error, key: "An index signature parameter cannot have an accessibility modifier." },
              An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: ts.DiagnosticCategory.Error, key: "An index signature parameter cannot have a question mark." },
              An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: ts.DiagnosticCategory.Error, key: "An index signature parameter cannot have an initializer." },
              An_index_signature_must_have_a_type_annotation: { code: 1021, category: ts.DiagnosticCategory.Error, key: "An index signature must have a type annotation." },
              An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: ts.DiagnosticCategory.Error, key: "An index signature parameter must have a type annotation." },
              An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: ts.DiagnosticCategory.Error, key: "An index signature parameter type must be 'string' or 'number'." },
              A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: ts.DiagnosticCategory.Error, key: "A class or interface declaration can only have one 'extends' clause." },
              An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: ts.DiagnosticCategory.Error, key: "An 'extends' clause must precede an 'implements' clause." },
              A_class_can_only_extend_a_single_class: { code: 1026, category: ts.DiagnosticCategory.Error, key: "A class can only extend a single class." },
              A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: ts.DiagnosticCategory.Error, key: "A class declaration can only have one 'implements' clause." },
              Accessibility_modifier_already_seen: { code: 1028, category: ts.DiagnosticCategory.Error, key: "Accessibility modifier already seen." },
              _0_modifier_must_precede_1_modifier: { code: 1029, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier must precede '{1}' modifier." },
              _0_modifier_already_seen: { code: 1030, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier already seen." },
              _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a class element." },
              An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: ts.DiagnosticCategory.Error, key: "An interface declaration cannot have an 'implements' clause." },
              super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: ts.DiagnosticCategory.Error, key: "'super' must be followed by an argument list or member access." },
              Only_ambient_modules_can_use_quoted_names: { code: 1035, category: ts.DiagnosticCategory.Error, key: "Only ambient modules can use quoted names." },
              Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: ts.DiagnosticCategory.Error, key: "Statements are not allowed in ambient contexts." },
              A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: ts.DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used in an already ambient context." },
              Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: ts.DiagnosticCategory.Error, key: "Initializers are not allowed in ambient contexts." },
              _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a module element." },
              A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: ts.DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used with an interface declaration." },
              A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: ts.DiagnosticCategory.Error, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." },
              A_rest_parameter_cannot_be_optional: { code: 1047, category: ts.DiagnosticCategory.Error, key: "A rest parameter cannot be optional." },
              A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: ts.DiagnosticCategory.Error, key: "A rest parameter cannot have an initializer." },
              A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor must have exactly one parameter." },
              A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor cannot have an optional parameter." },
              A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor parameter cannot have an initializer." },
              A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor cannot have rest parameter." },
              A_get_accessor_cannot_have_parameters: { code: 1054, category: ts.DiagnosticCategory.Error, key: "A 'get' accessor cannot have parameters." },
              Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: ts.DiagnosticCategory.Error, key: "Accessors are only available when targeting ECMAScript 5 and higher." },
              Enum_member_must_have_initializer: { code: 1061, category: ts.DiagnosticCategory.Error, key: "Enum member must have initializer." },
              An_export_assignment_cannot_be_used_in_a_namespace: { code: 1063, category: ts.DiagnosticCategory.Error, key: "An export assignment cannot be used in a namespace." },
              Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: ts.DiagnosticCategory.Error, key: "Ambient enum elements can only have integer literal initializers." },
              Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: ts.DiagnosticCategory.Error, key: "Unexpected token. A constructor, method, accessor, or property was expected." },
              A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: ts.DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used with an import declaration." },
              Invalid_reference_directive_syntax: { code: 1084, category: ts.DiagnosticCategory.Error, key: "Invalid 'reference' directive syntax." },
              Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: ts.DiagnosticCategory.Error, key: "Octal literals are not available when targeting ECMAScript 5 and higher." },
              An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: ts.DiagnosticCategory.Error, key: "An accessor cannot be declared in an ambient context." },
              _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a constructor declaration." },
              _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: ts.DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a parameter." },
              Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: ts.DiagnosticCategory.Error, key: "Only a single variable declaration is allowed in a 'for...in' statement." },
              Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: ts.DiagnosticCategory.Error, key: "Type parameters cannot appear on a constructor declaration." },
              Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: ts.DiagnosticCategory.Error, key: "Type annotation cannot appear on a constructor declaration." },
              An_accessor_cannot_have_type_parameters: { code: 1094, category: ts.DiagnosticCategory.Error, key: "An accessor cannot have type parameters." },
              A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: ts.DiagnosticCategory.Error, key: "A 'set' accessor cannot have a return type annotation." },
              An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: ts.DiagnosticCategory.Error, key: "An index signature must have exactly one parameter." },
              _0_list_cannot_be_empty: { code: 1097, category: ts.DiagnosticCategory.Error, key: "'{0}' list cannot be empty." },
              Type_parameter_list_cannot_be_empty: { code: 1098, category: ts.DiagnosticCategory.Error, key: "Type parameter list cannot be empty." },
              Type_argument_list_cannot_be_empty: { code: 1099, category: ts.DiagnosticCategory.Error, key: "Type argument list cannot be empty." },
              Invalid_use_of_0_in_strict_mode: { code: 1100, category: ts.DiagnosticCategory.Error, key: "Invalid use of '{0}' in strict mode." },
              with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: ts.DiagnosticCategory.Error, key: "'with' statements are not allowed in strict mode." },
              delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: ts.DiagnosticCategory.Error, key: "'delete' cannot be called on an identifier in strict mode." },
              A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: ts.DiagnosticCategory.Error, key: "A 'continue' statement can only be used within an enclosing iteration statement." },
              A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: ts.DiagnosticCategory.Error, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." },
              Jump_target_cannot_cross_function_boundary: { code: 1107, category: ts.DiagnosticCategory.Error, key: "Jump target cannot cross function boundary." },
              A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A 'return' statement can only be used within a function body." },
              Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression expected." },
              Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type expected." },
              A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A class member cannot be declared optional." },
              A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A 'default' clause cannot appear more than once in a 'switch' statement." },
              Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate label '{0}'" },
              A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." },
              A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: ts.DiagnosticCategory.Error, key: "A 'break' statement can only jump to a label of an enclosing statement." },
              An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: ts.DiagnosticCategory.Error, key: "An object literal cannot have multiple properties with the same name in strict mode." },
              An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: ts.DiagnosticCategory.Error, key: "An object literal cannot have multiple get/set accessors with the same name." },
              An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: ts.DiagnosticCategory.Error, key: "An object literal cannot have property and accessor with the same name." },
              An_export_assignment_cannot_have_modifiers: { code: 1120, category: ts.DiagnosticCategory.Error, key: "An export assignment cannot have modifiers." },
              Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: ts.DiagnosticCategory.Error, key: "Octal literals are not allowed in strict mode." },
              A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: ts.DiagnosticCategory.Error, key: "A tuple type element list cannot be empty." },
              Variable_declaration_list_cannot_be_empty: { code: 1123, category: ts.DiagnosticCategory.Error, key: "Variable declaration list cannot be empty." },
              Digit_expected: { code: 1124, category: ts.DiagnosticCategory.Error, key: "Digit expected." },
              Hexadecimal_digit_expected: { code: 1125, category: ts.DiagnosticCategory.Error, key: "Hexadecimal digit expected." },
              Unexpected_end_of_text: { code: 1126, category: ts.DiagnosticCategory.Error, key: "Unexpected end of text." },
              Invalid_character: { code: 1127, category: ts.DiagnosticCategory.Error, key: "Invalid character." },
              Declaration_or_statement_expected: { code: 1128, category: ts.DiagnosticCategory.Error, key: "Declaration or statement expected." },
              Statement_expected: { code: 1129, category: ts.DiagnosticCategory.Error, key: "Statement expected." },
              case_or_default_expected: { code: 1130, category: ts.DiagnosticCategory.Error, key: "'case' or 'default' expected." },
              Property_or_signature_expected: { code: 1131, category: ts.DiagnosticCategory.Error, key: "Property or signature expected." },
              Enum_member_expected: { code: 1132, category: ts.DiagnosticCategory.Error, key: "Enum member expected." },
              Type_reference_expected: { code: 1133, category: ts.DiagnosticCategory.Error, key: "Type reference expected." },
              Variable_declaration_expected: { code: 1134, category: ts.DiagnosticCategory.Error, key: "Variable declaration expected." },
              Argument_expression_expected: { code: 1135, category: ts.DiagnosticCategory.Error, key: "Argument expression expected." },
              Property_assignment_expected: { code: 1136, category: ts.DiagnosticCategory.Error, key: "Property assignment expected." },
              Expression_or_comma_expected: { code: 1137, category: ts.DiagnosticCategory.Error, key: "Expression or comma expected." },
              Parameter_declaration_expected: { code: 1138, category: ts.DiagnosticCategory.Error, key: "Parameter declaration expected." },
              Type_parameter_declaration_expected: { code: 1139, category: ts.DiagnosticCategory.Error, key: "Type parameter declaration expected." },
              Type_argument_expected: { code: 1140, category: ts.DiagnosticCategory.Error, key: "Type argument expected." },
              String_literal_expected: { code: 1141, category: ts.DiagnosticCategory.Error, key: "String literal expected." },
              Line_break_not_permitted_here: { code: 1142, category: ts.DiagnosticCategory.Error, key: "Line break not permitted here." },
              or_expected: { code: 1144, category: ts.DiagnosticCategory.Error, key: "'{' or ';' expected." },
              Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: ts.DiagnosticCategory.Error, key: "Modifiers not permitted on index signature members." },
              Declaration_expected: { code: 1146, category: ts.DiagnosticCategory.Error, key: "Declaration expected." },
              Import_declarations_in_a_namespace_cannot_reference_a_module: { code: 1147, category: ts.DiagnosticCategory.Error, key: "Import declarations in a namespace cannot reference a module." },
              Cannot_compile_modules_unless_the_module_flag_is_provided: { code: 1148, category: ts.DiagnosticCategory.Error, key: "Cannot compile modules unless the '--module' flag is provided." },
              File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: ts.DiagnosticCategory.Error, key: "File name '{0}' differs from already included file name '{1}' only in casing" },
              new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: ts.DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
              var_let_or_const_expected: { code: 1152, category: ts.DiagnosticCategory.Error, key: "'var', 'let' or 'const' expected." },
              let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: ts.DiagnosticCategory.Error, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." },
              const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: ts.DiagnosticCategory.Error, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." },
              const_declarations_must_be_initialized: { code: 1155, category: ts.DiagnosticCategory.Error, key: "'const' declarations must be initialized" },
              const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: ts.DiagnosticCategory.Error, key: "'const' declarations can only be declared inside a block." },
              let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: ts.DiagnosticCategory.Error, key: "'let' declarations can only be declared inside a block." },
              Unterminated_template_literal: { code: 1160, category: ts.DiagnosticCategory.Error, key: "Unterminated template literal." },
              Unterminated_regular_expression_literal: { code: 1161, category: ts.DiagnosticCategory.Error, key: "Unterminated regular expression literal." },
              An_object_member_cannot_be_declared_optional: { code: 1162, category: ts.DiagnosticCategory.Error, key: "An object member cannot be declared optional." },
              yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: ts.DiagnosticCategory.Error, key: "'yield' expression must be contained_within a generator declaration." },
              Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: ts.DiagnosticCategory.Error, key: "Computed property names are not allowed in enums." },
              A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: { code: 1165, category: ts.DiagnosticCategory.Error, key: "A computed property name in an ambient context must directly refer to a built-in symbol." },
              A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol: { code: 1166, category: ts.DiagnosticCategory.Error, key: "A computed property name in a class property declaration must directly refer to a built-in symbol." },
              Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: ts.DiagnosticCategory.Error, key: "Computed property names are only available when targeting ECMAScript 6 and higher." },
              A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol: { code: 1168, category: ts.DiagnosticCategory.Error, key: "A computed property name in a method overload must directly refer to a built-in symbol." },
              A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol: { code: 1169, category: ts.DiagnosticCategory.Error, key: "A computed property name in an interface must directly refer to a built-in symbol." },
              A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol: { code: 1170, category: ts.DiagnosticCategory.Error, key: "A computed property name in a type literal must directly refer to a built-in symbol." },
              A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: ts.DiagnosticCategory.Error, key: "A comma expression is not allowed in a computed property name." },
              extends_clause_already_seen: { code: 1172, category: ts.DiagnosticCategory.Error, key: "'extends' clause already seen." },
              extends_clause_must_precede_implements_clause: { code: 1173, category: ts.DiagnosticCategory.Error, key: "'extends' clause must precede 'implements' clause." },
              Classes_can_only_extend_a_single_class: { code: 1174, category: ts.DiagnosticCategory.Error, key: "Classes can only extend a single class." },
              implements_clause_already_seen: { code: 1175, category: ts.DiagnosticCategory.Error, key: "'implements' clause already seen." },
              Interface_declaration_cannot_have_implements_clause: { code: 1176, category: ts.DiagnosticCategory.Error, key: "Interface declaration cannot have 'implements' clause." },
              Binary_digit_expected: { code: 1177, category: ts.DiagnosticCategory.Error, key: "Binary digit expected." },
              Octal_digit_expected: { code: 1178, category: ts.DiagnosticCategory.Error, key: "Octal digit expected." },
              Unexpected_token_expected: { code: 1179, category: ts.DiagnosticCategory.Error, key: "Unexpected token. '{' expected." },
              Property_destructuring_pattern_expected: { code: 1180, category: ts.DiagnosticCategory.Error, key: "Property destructuring pattern expected." },
              Array_element_destructuring_pattern_expected: { code: 1181, category: ts.DiagnosticCategory.Error, key: "Array element destructuring pattern expected." },
              A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: ts.DiagnosticCategory.Error, key: "A destructuring declaration must have an initializer." },
              Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: ts.DiagnosticCategory.Error, key: "Destructuring declarations are not allowed in ambient contexts." },
              An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: ts.DiagnosticCategory.Error, key: "An implementation cannot be declared in ambient contexts." },
              Modifiers_cannot_appear_here: { code: 1184, category: ts.DiagnosticCategory.Error, key: "Modifiers cannot appear here." },
              Merge_conflict_marker_encountered: { code: 1185, category: ts.DiagnosticCategory.Error, key: "Merge conflict marker encountered." },
              A_rest_element_cannot_have_an_initializer: { code: 1186, category: ts.DiagnosticCategory.Error, key: "A rest element cannot have an initializer." },
              A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A parameter property may not be a binding pattern." },
              Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: { code: 1188, category: ts.DiagnosticCategory.Error, key: "Only a single variable declaration is allowed in a 'for...of' statement." },
              The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: { code: 1189, category: ts.DiagnosticCategory.Error, key: "The variable declaration of a 'for...in' statement cannot have an initializer." },
              The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: { code: 1190, category: ts.DiagnosticCategory.Error, key: "The variable declaration of a 'for...of' statement cannot have an initializer." },
              An_import_declaration_cannot_have_modifiers: { code: 1191, category: ts.DiagnosticCategory.Error, key: "An import declaration cannot have modifiers." },
              Module_0_has_no_default_export: { code: 1192, category: ts.DiagnosticCategory.Error, key: "Module '{0}' has no default export." },
              An_export_declaration_cannot_have_modifiers: { code: 1193, category: ts.DiagnosticCategory.Error, key: "An export declaration cannot have modifiers." },
              Export_declarations_are_not_permitted_in_a_namespace: { code: 1194, category: ts.DiagnosticCategory.Error, key: "Export declarations are not permitted in a namespace." },
              Catch_clause_variable_name_must_be_an_identifier: { code: 1195, category: ts.DiagnosticCategory.Error, key: "Catch clause variable name must be an identifier." },
              Catch_clause_variable_cannot_have_a_type_annotation: { code: 1196, category: ts.DiagnosticCategory.Error, key: "Catch clause variable cannot have a type annotation." },
              Catch_clause_variable_cannot_have_an_initializer: { code: 1197, category: ts.DiagnosticCategory.Error, key: "Catch clause variable cannot have an initializer." },
              An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: { code: 1198, category: ts.DiagnosticCategory.Error, key: "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive." },
              Unterminated_Unicode_escape_sequence: { code: 1199, category: ts.DiagnosticCategory.Error, key: "Unterminated Unicode escape sequence." },
              Line_terminator_not_permitted_before_arrow: { code: 1200, category: ts.DiagnosticCategory.Error, key: "Line terminator not permitted before arrow." },
              Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_or_import_d_from_mod_instead: { code: 1202, category: ts.DiagnosticCategory.Error, key: "Import assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"' or 'import d from \"mod\"' instead." },
              Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_export_default_instead: { code: 1203, category: ts.DiagnosticCategory.Error, key: "Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead." },
              Cannot_compile_modules_into_commonjs_amd_system_or_umd_when_targeting_ES6_or_higher: { code: 1204, category: ts.DiagnosticCategory.Error, key: "Cannot compile modules into 'commonjs', 'amd', 'system' or 'umd' when targeting 'ES6' or higher." },
              Decorators_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1205, category: ts.DiagnosticCategory.Error, key: "Decorators are only available when targeting ECMAScript 5 and higher." },
              Decorators_are_not_valid_here: { code: 1206, category: ts.DiagnosticCategory.Error, key: "Decorators are not valid here." },
              Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: { code: 1207, category: ts.DiagnosticCategory.Error, key: "Decorators cannot be applied to multiple get/set accessors of the same name." },
              Cannot_compile_namespaces_when_the_separateCompilation_flag_is_provided: { code: 1208, category: ts.DiagnosticCategory.Error, key: "Cannot compile namespaces when the '--separateCompilation' flag is provided." },
              Ambient_const_enums_are_not_allowed_when_the_separateCompilation_flag_is_provided: { code: 1209, category: ts.DiagnosticCategory.Error, key: "Ambient const enums are not allowed when the '--separateCompilation' flag is provided." },
              Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: { code: 1210, category: ts.DiagnosticCategory.Error, key: "Invalid use of '{0}'. Class definitions are automatically in strict mode." },
              A_class_declaration_without_the_default_modifier_must_have_a_name: { code: 1211, category: ts.DiagnosticCategory.Error, key: "A class declaration without the 'default' modifier must have a name" },
              Identifier_expected_0_is_a_reserved_word_in_strict_mode: { code: 1212, category: ts.DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode" },
              Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { code: 1213, category: ts.DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode." },
              Type_expected_0_is_a_reserved_word_in_strict_mode: { code: 1215, category: ts.DiagnosticCategory.Error, key: "Type expected. '{0}' is a reserved word in strict mode" },
              Type_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { code: 1216, category: ts.DiagnosticCategory.Error, key: "Type expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode." },
              Export_assignment_is_not_supported_when_module_flag_is_system: { code: 1218, category: ts.DiagnosticCategory.Error, key: "Export assignment is not supported when '--module' flag is 'system'." },
              Duplicate_identifier_0: { code: 2300, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." },
              Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: ts.DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." },
              Static_members_cannot_reference_class_type_parameters: { code: 2302, category: ts.DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." },
              Circular_definition_of_import_alias_0: { code: 2303, category: ts.DiagnosticCategory.Error, key: "Circular definition of import alias '{0}'." },
              Cannot_find_name_0: { code: 2304, category: ts.DiagnosticCategory.Error, key: "Cannot find name '{0}'." },
              Module_0_has_no_exported_member_1: { code: 2305, category: ts.DiagnosticCategory.Error, key: "Module '{0}' has no exported member '{1}'." },
              File_0_is_not_a_module: { code: 2306, category: ts.DiagnosticCategory.Error, key: "File '{0}' is not a module." },
              Cannot_find_module_0: { code: 2307, category: ts.DiagnosticCategory.Error, key: "Cannot find module '{0}'." },
              A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: ts.DiagnosticCategory.Error, key: "A module cannot have more than one export assignment." },
              An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: ts.DiagnosticCategory.Error, key: "An export assignment cannot be used in a module with other exported elements." },
              Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: ts.DiagnosticCategory.Error, key: "Type '{0}' recursively references itself as a base type." },
              A_class_may_only_extend_another_class: { code: 2311, category: ts.DiagnosticCategory.Error, key: "A class may only extend another class." },
              An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: ts.DiagnosticCategory.Error, key: "An interface may only extend a class or another interface." },
              Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: ts.DiagnosticCategory.Error, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." },
              Generic_type_0_requires_1_type_argument_s: { code: 2314, category: ts.DiagnosticCategory.Error, key: "Generic type '{0}' requires {1} type argument(s)." },
              Type_0_is_not_generic: { code: 2315, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not generic." },
              Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: ts.DiagnosticCategory.Error, key: "Global type '{0}' must be a class or interface type." },
              Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: ts.DiagnosticCategory.Error, key: "Global type '{0}' must have {1} type parameter(s)." },
              Cannot_find_global_type_0: { code: 2318, category: ts.DiagnosticCategory.Error, key: "Cannot find global type '{0}'." },
              Named_property_0_of_types_1_and_2_are_not_identical: { code: 2319, category: ts.DiagnosticCategory.Error, key: "Named property '{0}' of types '{1}' and '{2}' are not identical." },
              Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: ts.DiagnosticCategory.Error, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." },
              Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: ts.DiagnosticCategory.Error, key: "Excessive stack depth comparing types '{0}' and '{1}'." },
              Type_0_is_not_assignable_to_type_1: { code: 2322, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not assignable to type '{1}'." },
              Property_0_is_missing_in_type_1: { code: 2324, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is missing in type '{1}'." },
              Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is private in type '{1}' but not in type '{2}'." },
              Types_of_property_0_are_incompatible: { code: 2326, category: ts.DiagnosticCategory.Error, key: "Types of property '{0}' are incompatible." },
              Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is optional in type '{1}' but required in type '{2}'." },
              Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: ts.DiagnosticCategory.Error, key: "Types of parameters '{0}' and '{1}' are incompatible." },
              Index_signature_is_missing_in_type_0: { code: 2329, category: ts.DiagnosticCategory.Error, key: "Index signature is missing in type '{0}'." },
              Index_signatures_are_incompatible: { code: 2330, category: ts.DiagnosticCategory.Error, key: "Index signatures are incompatible." },
              this_cannot_be_referenced_in_a_module_or_namespace_body: { code: 2331, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in a module or namespace body." },
              this_cannot_be_referenced_in_current_location: { code: 2332, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in current location." },
              this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in constructor arguments." },
              this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in a static property initializer." },
              super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: ts.DiagnosticCategory.Error, key: "'super' can only be referenced in a derived class." },
              super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: ts.DiagnosticCategory.Error, key: "'super' cannot be referenced in constructor arguments." },
              Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: ts.DiagnosticCategory.Error, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" },
              super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: ts.DiagnosticCategory.Error, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" },
              Property_0_does_not_exist_on_type_1: { code: 2339, category: ts.DiagnosticCategory.Error, key: "Property '{0}' does not exist on type '{1}'." },
              Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: ts.DiagnosticCategory.Error, key: "Only public and protected methods of the base class are accessible via the 'super' keyword" },
              Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is private and only accessible within class '{1}'." },
              An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: { code: 2342, category: ts.DiagnosticCategory.Error, key: "An index expression argument must be of type 'string', 'number', 'symbol, or 'any'." },
              Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: ts.DiagnosticCategory.Error, key: "Type '{0}' does not satisfy the constraint '{1}'." },
              Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: ts.DiagnosticCategory.Error, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." },
              Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: ts.DiagnosticCategory.Error, key: "Supplied parameters do not match any signature of call target." },
              Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: ts.DiagnosticCategory.Error, key: "Untyped function calls may not accept type arguments." },
              Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: ts.DiagnosticCategory.Error, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" },
              Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: ts.DiagnosticCategory.Error, key: "Cannot invoke an expression whose type lacks a call signature." },
              Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: ts.DiagnosticCategory.Error, key: "Only a void function can be called with the 'new' keyword." },
              Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: ts.DiagnosticCategory.Error, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." },
              Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: ts.DiagnosticCategory.Error, key: "Neither type '{0}' nor type '{1}' is assignable to the other." },
              No_best_common_type_exists_among_return_expressions: { code: 2354, category: ts.DiagnosticCategory.Error, key: "No best common type exists among return expressions." },
              A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: ts.DiagnosticCategory.Error, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." },
              An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: ts.DiagnosticCategory.Error, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." },
              The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: ts.DiagnosticCategory.Error, key: "The operand of an increment or decrement operator must be a variable, property or indexer." },
              The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: ts.DiagnosticCategory.Error, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." },
              The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: ts.DiagnosticCategory.Error, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." },
              The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: { code: 2360, category: ts.DiagnosticCategory.Error, key: "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'." },
              The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: ts.DiagnosticCategory.Error, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" },
              The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: ts.DiagnosticCategory.Error, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
              The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: ts.DiagnosticCategory.Error, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
              Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: ts.DiagnosticCategory.Error, key: "Invalid left-hand side of assignment expression." },
              Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: ts.DiagnosticCategory.Error, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." },
              Type_parameter_name_cannot_be_0: { code: 2368, category: ts.DiagnosticCategory.Error, key: "Type parameter name cannot be '{0}'" },
              A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: ts.DiagnosticCategory.Error, key: "A parameter property is only allowed in a constructor implementation." },
              A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: ts.DiagnosticCategory.Error, key: "A rest parameter must be of an array type." },
              A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: ts.DiagnosticCategory.Error, key: "A parameter initializer is only allowed in a function or constructor implementation." },
              Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' cannot be referenced in its initializer." },
              Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: ts.DiagnosticCategory.Error, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." },
              Duplicate_string_index_signature: { code: 2374, category: ts.DiagnosticCategory.Error, key: "Duplicate string index signature." },
              Duplicate_number_index_signature: { code: 2375, category: ts.DiagnosticCategory.Error, key: "Duplicate number index signature." },
              A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: ts.DiagnosticCategory.Error, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." },
              Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: ts.DiagnosticCategory.Error, key: "Constructors for derived classes must contain a 'super' call." },
              A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: ts.DiagnosticCategory.Error, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." },
              Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: ts.DiagnosticCategory.Error, key: "Getter and setter accessors do not agree in visibility." },
              get_and_set_accessor_must_have_the_same_type: { code: 2380, category: ts.DiagnosticCategory.Error, key: "'get' and 'set' accessor must have the same type." },
              A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: ts.DiagnosticCategory.Error, key: "A signature with an implementation cannot use a string literal type." },
              Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: ts.DiagnosticCategory.Error, key: "Specialized overload signature is not assignable to any non-specialized signature." },
              Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be exported or not exported." },
              Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be ambient or non-ambient." },
              Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be public, private or protected." },
              Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: ts.DiagnosticCategory.Error, key: "Overload signatures must all be optional or required." },
              Function_overload_must_be_static: { code: 2387, category: ts.DiagnosticCategory.Error, key: "Function overload must be static." },
              Function_overload_must_not_be_static: { code: 2388, category: ts.DiagnosticCategory.Error, key: "Function overload must not be static." },
              Function_implementation_name_must_be_0: { code: 2389, category: ts.DiagnosticCategory.Error, key: "Function implementation name must be '{0}'." },
              Constructor_implementation_is_missing: { code: 2390, category: ts.DiagnosticCategory.Error, key: "Constructor implementation is missing." },
              Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: ts.DiagnosticCategory.Error, key: "Function implementation is missing or not immediately following the declaration." },
              Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: ts.DiagnosticCategory.Error, key: "Multiple constructor implementations are not allowed." },
              Duplicate_function_implementation: { code: 2393, category: ts.DiagnosticCategory.Error, key: "Duplicate function implementation." },
              Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: ts.DiagnosticCategory.Error, key: "Overload signature is not compatible with function implementation." },
              Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: ts.DiagnosticCategory.Error, key: "Individual declarations in merged declaration {0} must be all exported or all local." },
              Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." },
              Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." },
              Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: ts.DiagnosticCategory.Error, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." },
              Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." },
              Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: ts.DiagnosticCategory.Error, key: "Expression resolves to '_super' that compiler uses to capture base class reference." },
              Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: ts.DiagnosticCategory.Error, key: "Subsequent variable declarations must have the same type.  Variable '{0}' must be of type '{1}', but here has type '{2}'." },
              The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." },
              The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." },
              Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: ts.DiagnosticCategory.Error, key: "Invalid left-hand side in 'for...in' statement." },
              The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: ts.DiagnosticCategory.Error, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." },
              Setters_cannot_return_a_value: { code: 2408, category: ts.DiagnosticCategory.Error, key: "Setters cannot return a value." },
              Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: ts.DiagnosticCategory.Error, key: "Return type of constructor signature must be assignable to the instance type of the class" },
              All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: ts.DiagnosticCategory.Error, key: "All symbols within a 'with' block will be resolved to 'any'." },
              Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." },
              Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." },
              Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: ts.DiagnosticCategory.Error, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." },
              Class_name_cannot_be_0: { code: 2414, category: ts.DiagnosticCategory.Error, key: "Class name cannot be '{0}'" },
              Class_0_incorrectly_extends_base_class_1: { code: 2415, category: ts.DiagnosticCategory.Error, key: "Class '{0}' incorrectly extends base class '{1}'." },
              Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: ts.DiagnosticCategory.Error, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." },
              Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: ts.DiagnosticCategory.Error, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." },
              Class_0_incorrectly_implements_interface_1: { code: 2420, category: ts.DiagnosticCategory.Error, key: "Class '{0}' incorrectly implements interface '{1}'." },
              A_class_may_only_implement_another_class_or_interface: { code: 2422, category: ts.DiagnosticCategory.Error, key: "A class may only implement another class or interface." },
              Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." },
              Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." },
              Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." },
              Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: ts.DiagnosticCategory.Error, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." },
              Interface_name_cannot_be_0: { code: 2427, category: ts.DiagnosticCategory.Error, key: "Interface name cannot be '{0}'" },
              All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: ts.DiagnosticCategory.Error, key: "All declarations of an interface must have identical type parameters." },
              Interface_0_incorrectly_extends_interface_1: { code: 2430, category: ts.DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}'." },
              Enum_name_cannot_be_0: { code: 2431, category: ts.DiagnosticCategory.Error, key: "Enum name cannot be '{0}'" },
              In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: ts.DiagnosticCategory.Error, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." },
              A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: ts.DiagnosticCategory.Error, key: "A namespace declaration cannot be in a different file from a class or function with which it is merged" },
              A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: ts.DiagnosticCategory.Error, key: "A namespace declaration cannot be located prior to a class or function with which it is merged" },
              Ambient_modules_cannot_be_nested_in_other_modules: { code: 2435, category: ts.DiagnosticCategory.Error, key: "Ambient modules cannot be nested in other modules." },
              Ambient_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: ts.DiagnosticCategory.Error, key: "Ambient module declaration cannot specify relative module name." },
              Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: ts.DiagnosticCategory.Error, key: "Module '{0}' is hidden by a local declaration with the same name" },
              Import_name_cannot_be_0: { code: 2438, category: ts.DiagnosticCategory.Error, key: "Import name cannot be '{0}'" },
              Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: { code: 2439, category: ts.DiagnosticCategory.Error, key: "Import or export declaration in an ambient module declaration cannot reference module through relative module name." },
              Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: ts.DiagnosticCategory.Error, key: "Import declaration conflicts with local declaration of '{0}'" },
              Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: { code: 2441, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module." },
              Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: ts.DiagnosticCategory.Error, key: "Types have separate declarations of a private property '{0}'." },
              Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." },
              Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." },
              Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." },
              Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: ts.DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." },
              The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: ts.DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." },
              Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: ts.DiagnosticCategory.Error, key: "Block-scoped variable '{0}' used before its declaration." },
              The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: ts.DiagnosticCategory.Error, key: "The operand of an increment or decrement operator cannot be a constant." },
              Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: ts.DiagnosticCategory.Error, key: "Left-hand side of assignment expression cannot be a constant." },
              Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: ts.DiagnosticCategory.Error, key: "Cannot redeclare block-scoped variable '{0}'." },
              An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: ts.DiagnosticCategory.Error, key: "An enum member cannot have a numeric name." },
              The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: ts.DiagnosticCategory.Error, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." },
              Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: ts.DiagnosticCategory.Error, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
              Type_alias_0_circularly_references_itself: { code: 2456, category: ts.DiagnosticCategory.Error, key: "Type alias '{0}' circularly references itself." },
              Type_alias_name_cannot_be_0: { code: 2457, category: ts.DiagnosticCategory.Error, key: "Type alias name cannot be '{0}'" },
              An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: ts.DiagnosticCategory.Error, key: "An AMD module cannot have multiple name assignments." },
              Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: ts.DiagnosticCategory.Error, key: "Type '{0}' has no property '{1}' and no string index signature." },
              Type_0_has_no_property_1: { code: 2460, category: ts.DiagnosticCategory.Error, key: "Type '{0}' has no property '{1}'." },
              Type_0_is_not_an_array_type: { code: 2461, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not an array type." },
              A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: ts.DiagnosticCategory.Error, key: "A rest element must be last in an array destructuring pattern" },
              A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: ts.DiagnosticCategory.Error, key: "A binding pattern parameter cannot be optional in an implementation signature." },
              A_computed_property_name_must_be_of_type_string_number_symbol_or_any: { code: 2464, category: ts.DiagnosticCategory.Error, key: "A computed property name must be of type 'string', 'number', 'symbol', or 'any'." },
              this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: ts.DiagnosticCategory.Error, key: "'this' cannot be referenced in a computed property name." },
              super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: ts.DiagnosticCategory.Error, key: "'super' cannot be referenced in a computed property name." },
              A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2467, category: ts.DiagnosticCategory.Error, key: "A computed property name cannot reference a type parameter from its containing type." },
              Cannot_find_global_value_0: { code: 2468, category: ts.DiagnosticCategory.Error, key: "Cannot find global value '{0}'." },
              The_0_operator_cannot_be_applied_to_type_symbol: { code: 2469, category: ts.DiagnosticCategory.Error, key: "The '{0}' operator cannot be applied to type 'symbol'." },
              Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: { code: 2470, category: ts.DiagnosticCategory.Error, key: "'Symbol' reference does not refer to the global Symbol constructor object." },
              A_computed_property_name_of_the_form_0_must_be_of_type_symbol: { code: 2471, category: ts.DiagnosticCategory.Error, key: "A computed property name of the form '{0}' must be of type 'symbol'." },
              Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_6_and_higher: { code: 2472, category: ts.DiagnosticCategory.Error, key: "Spread operator in 'new' expressions is only available when targeting ECMAScript 6 and higher." },
              Enum_declarations_must_all_be_const_or_non_const: { code: 2473, category: ts.DiagnosticCategory.Error, key: "Enum declarations must all be const or non-const." },
              In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 2474, category: ts.DiagnosticCategory.Error, key: "In 'const' enum declarations member initializer must be constant expression." },
              const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 2475, category: ts.DiagnosticCategory.Error, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." },
              A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 2476, category: ts.DiagnosticCategory.Error, key: "A const enum member can only be accessed using a string literal." },
              const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 2477, category: ts.DiagnosticCategory.Error, key: "'const' enum member initializer was evaluated to a non-finite value." },
              const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 2478, category: ts.DiagnosticCategory.Error, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." },
              Property_0_does_not_exist_on_const_enum_1: { code: 2479, category: ts.DiagnosticCategory.Error, key: "Property '{0}' does not exist on 'const' enum '{1}'." },
              let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: { code: 2480, category: ts.DiagnosticCategory.Error, key: "'let' is not allowed to be used as a name in 'let' or 'const' declarations." },
              Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: { code: 2481, category: ts.DiagnosticCategory.Error, key: "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'." },
              The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: { code: 2483, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...of' statement cannot use a type annotation." },
              Export_declaration_conflicts_with_exported_declaration_of_0: { code: 2484, category: ts.DiagnosticCategory.Error, key: "Export declaration conflicts with exported declaration of '{0}'" },
              The_left_hand_side_of_a_for_of_statement_cannot_be_a_previously_defined_constant: { code: 2485, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...of' statement cannot be a previously defined constant." },
              The_left_hand_side_of_a_for_in_statement_cannot_be_a_previously_defined_constant: { code: 2486, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot be a previously defined constant." },
              Invalid_left_hand_side_in_for_of_statement: { code: 2487, category: ts.DiagnosticCategory.Error, key: "Invalid left-hand side in 'for...of' statement." },
              Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator: { code: 2488, category: ts.DiagnosticCategory.Error, key: "Type must have a '[Symbol.iterator]()' method that returns an iterator." },
              An_iterator_must_have_a_next_method: { code: 2489, category: ts.DiagnosticCategory.Error, key: "An iterator must have a 'next()' method." },
              The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: { code: 2490, category: ts.DiagnosticCategory.Error, key: "The type returned by the 'next()' method of an iterator must have a 'value' property." },
              The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: { code: 2491, category: ts.DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot be a destructuring pattern." },
              Cannot_redeclare_identifier_0_in_catch_clause: { code: 2492, category: ts.DiagnosticCategory.Error, key: "Cannot redeclare identifier '{0}' in catch clause" },
              Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: { code: 2493, category: ts.DiagnosticCategory.Error, key: "Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'." },
              Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: { code: 2494, category: ts.DiagnosticCategory.Error, key: "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher." },
              Type_0_is_not_an_array_type_or_a_string_type: { code: 2495, category: ts.DiagnosticCategory.Error, key: "Type '{0}' is not an array type or a string type." },
              The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression: { code: 2496, category: ts.DiagnosticCategory.Error, key: "The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression." },
              Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: { code: 2497, category: ts.DiagnosticCategory.Error, key: "Module '{0}' resolves to a non-module entity and cannot be imported using this construct." },
              Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: { code: 2498, category: ts.DiagnosticCategory.Error, key: "Module '{0}' uses 'export =' and cannot be used with 'export *'." },
              An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2499, category: ts.DiagnosticCategory.Error, key: "An interface can only extend an identifier/qualified-name with optional type arguments." },
              A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2500, category: ts.DiagnosticCategory.Error, key: "A class can only implement an identifier/qualified-name with optional type arguments." },
              A_rest_element_cannot_contain_a_binding_pattern: { code: 2501, category: ts.DiagnosticCategory.Error, key: "A rest element cannot contain a binding pattern." },
              _0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 2502, category: ts.DiagnosticCategory.Error, key: "'{0}' is referenced directly or indirectly in its own type annotation." },
              Cannot_find_namespace_0: { code: 2503, category: ts.DiagnosticCategory.Error, key: "Cannot find namespace '{0}'." },
              Import_declaration_0_is_using_private_name_1: { code: 4000, category: ts.DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." },
              Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
              Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." },
              Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
              Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
              Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
              Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." },
              Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." },
              Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: ts.DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." },
              Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: ts.DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." },
              Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: ts.DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." },
              Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: ts.DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." },
              Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: ts.DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." },
              Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: ts.DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." },
              Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: ts.DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using private name '{1}'." },
              Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: ts.DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
              Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: ts.DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
              Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: ts.DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using private name '{1}'." },
              Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: ts.DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
              Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: ts.DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
              Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: ts.DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using private name '{1}'." },
              Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." },
              Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: ts.DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using private name '{1}'." },
              Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." },
              Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." },
              Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: ts.DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
              Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: ts.DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." },
              Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: ts.DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using private name '{0}'." },
              Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: ts.DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
              Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: ts.DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." },
              Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: ts.DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using private name '{0}'." },
              Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: ts.DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." },
              Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: ts.DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." },
              Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: ts.DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." },
              Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: ts.DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using private name '{0}'." },
              Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: ts.DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." },
              Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: ts.DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using private name '{0}'." },
              Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: ts.DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
              Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: ts.DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." },
              Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: ts.DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using private name '{0}'." },
              Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: ts.DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
              Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: ts.DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." },
              Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: ts.DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using private name '{0}'." },
              Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: ts.DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." },
              Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: ts.DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using private name '{0}'." },
              Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: ts.DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." },
              Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: ts.DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." },
              Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: ts.DiagnosticCategory.Error, key: "Return type of exported function has or is using private name '{0}'." },
              Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." },
              Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." },
              Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
              Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
              Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
              Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
              Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
              Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." },
              Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." },
              Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." },
              Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." },
              Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." },
              Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: ts.DiagnosticCategory.Error, key: "Exported type alias '{0}' has or is using private name '{1}'." },
              Default_export_of_the_module_has_or_is_using_private_name_0: { code: 4082, category: ts.DiagnosticCategory.Error, key: "Default export of the module has or is using private name '{0}'." },
              Loop_contains_block_scoped_variable_0_referenced_by_a_function_in_the_loop_This_is_only_supported_in_ECMAScript_6_or_higher: { code: 4091, category: ts.DiagnosticCategory.Error, key: "Loop contains block-scoped variable '{0}' referenced by a function in the loop. This is only supported in ECMAScript 6 or higher." },
              The_current_host_does_not_support_the_0_option: { code: 5001, category: ts.DiagnosticCategory.Error, key: "The current host does not support the '{0}' option." },
              Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: ts.DiagnosticCategory.Error, key: "Cannot find the common subdirectory path for the input files." },
              Cannot_read_file_0_Colon_1: { code: 5012, category: ts.DiagnosticCategory.Error, key: "Cannot read file '{0}': {1}" },
              Unsupported_file_encoding: { code: 5013, category: ts.DiagnosticCategory.Error, key: "Unsupported file encoding." },
              Failed_to_parse_file_0_Colon_1: { code: 5014, category: ts.DiagnosticCategory.Error, key: "Failed to parse file '{0}': {1}." },
              Unknown_compiler_option_0: { code: 5023, category: ts.DiagnosticCategory.Error, key: "Unknown compiler option '{0}'." },
              Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: ts.DiagnosticCategory.Error, key: "Compiler option '{0}' requires a value of type {1}." },
              Could_not_write_file_0_Colon_1: { code: 5033, category: ts.DiagnosticCategory.Error, key: "Could not write file '{0}': {1}" },
              Option_mapRoot_cannot_be_specified_without_specifying_sourceMap_option: { code: 5038, category: ts.DiagnosticCategory.Error, key: "Option 'mapRoot' cannot be specified without specifying 'sourceMap' option." },
              Option_sourceRoot_cannot_be_specified_without_specifying_sourceMap_option: { code: 5039, category: ts.DiagnosticCategory.Error, key: "Option 'sourceRoot' cannot be specified without specifying 'sourceMap' option." },
              Option_noEmit_cannot_be_specified_with_option_out_or_outDir: { code: 5040, category: ts.DiagnosticCategory.Error, key: "Option 'noEmit' cannot be specified with option 'out' or 'outDir'." },
              Option_noEmit_cannot_be_specified_with_option_declaration: { code: 5041, category: ts.DiagnosticCategory.Error, key: "Option 'noEmit' cannot be specified with option 'declaration'." },
              Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: ts.DiagnosticCategory.Error, key: "Option 'project' cannot be mixed with source files on a command line." },
              Option_sourceMap_cannot_be_specified_with_option_separateCompilation: { code: 5043, category: ts.DiagnosticCategory.Error, key: "Option 'sourceMap' cannot be specified with option 'separateCompilation'." },
              Option_declaration_cannot_be_specified_with_option_separateCompilation: { code: 5044, category: ts.DiagnosticCategory.Error, key: "Option 'declaration' cannot be specified with option 'separateCompilation'." },
              Option_noEmitOnError_cannot_be_specified_with_option_separateCompilation: { code: 5045, category: ts.DiagnosticCategory.Error, key: "Option 'noEmitOnError' cannot be specified with option 'separateCompilation'." },
              Option_out_cannot_be_specified_with_option_separateCompilation: { code: 5046, category: ts.DiagnosticCategory.Error, key: "Option 'out' cannot be specified with option 'separateCompilation'." },
              Option_separateCompilation_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES6_or_higher: { code: 5047, category: ts.DiagnosticCategory.Error, key: "Option 'separateCompilation' can only be used when either option'--module' is provided or option 'target' is 'ES6' or higher." },
              Option_sourceMap_cannot_be_specified_with_option_inlineSourceMap: { code: 5048, category: ts.DiagnosticCategory.Error, key: "Option 'sourceMap' cannot be specified with option 'inlineSourceMap'." },
              Option_sourceRoot_cannot_be_specified_with_option_inlineSourceMap: { code: 5049, category: ts.DiagnosticCategory.Error, key: "Option 'sourceRoot' cannot be specified with option 'inlineSourceMap'." },
              Option_mapRoot_cannot_be_specified_with_option_inlineSourceMap: { code: 5050, category: ts.DiagnosticCategory.Error, key: "Option 'mapRoot' cannot be specified with option 'inlineSourceMap'." },
              Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: { code: 5051, category: ts.DiagnosticCategory.Error, key: "Option 'inlineSources' can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided." },
              Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate and emit output to single file." },
              Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates corresponding '.d.ts' file." },
              Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specifies the location where debugger should locate map files instead of generated locations." },
              Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: ts.DiagnosticCategory.Message, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." },
              Watch_input_files: { code: 6005, category: ts.DiagnosticCategory.Message, key: "Watch input files." },
              Redirect_output_structure_to_the_directory: { code: 6006, category: ts.DiagnosticCategory.Message, key: "Redirect output structure to the directory." },
              Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: ts.DiagnosticCategory.Message, key: "Do not erase const enum declarations in generated code." },
              Do_not_emit_outputs_if_any_errors_were_reported: { code: 6008, category: ts.DiagnosticCategory.Message, key: "Do not emit outputs if any errors were reported." },
              Do_not_emit_comments_to_output: { code: 6009, category: ts.DiagnosticCategory.Message, key: "Do not emit comments to output." },
              Do_not_emit_outputs: { code: 6010, category: ts.DiagnosticCategory.Message, key: "Do not emit outputs." },
              Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: ts.DiagnosticCategory.Message, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" },
              Specify_module_code_generation_Colon_commonjs_amd_system_or_umd: { code: 6016, category: ts.DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs', 'amd', 'system' or 'umd'" },
              Print_this_message: { code: 6017, category: ts.DiagnosticCategory.Message, key: "Print this message." },
              Print_the_compiler_s_version: { code: 6019, category: ts.DiagnosticCategory.Message, key: "Print the compiler's version." },
              Compile_the_project_in_the_given_directory: { code: 6020, category: ts.DiagnosticCategory.Message, key: "Compile the project in the given directory." },
              Syntax_Colon_0: { code: 6023, category: ts.DiagnosticCategory.Message, key: "Syntax: {0}" },
              options: { code: 6024, category: ts.DiagnosticCategory.Message, key: "options" },
              file: { code: 6025, category: ts.DiagnosticCategory.Message, key: "file" },
              Examples_Colon_0: { code: 6026, category: ts.DiagnosticCategory.Message, key: "Examples: {0}" },
              Options_Colon: { code: 6027, category: ts.DiagnosticCategory.Message, key: "Options:" },
              Version_0: { code: 6029, category: ts.DiagnosticCategory.Message, key: "Version {0}" },
              Insert_command_line_options_and_files_from_a_file: { code: 6030, category: ts.DiagnosticCategory.Message, key: "Insert command line options and files from a file." },
              File_change_detected_Starting_incremental_compilation: { code: 6032, category: ts.DiagnosticCategory.Message, key: "File change detected. Starting incremental compilation..." },
              KIND: { code: 6034, category: ts.DiagnosticCategory.Message, key: "KIND" },
              FILE: { code: 6035, category: ts.DiagnosticCategory.Message, key: "FILE" },
              VERSION: { code: 6036, category: ts.DiagnosticCategory.Message, key: "VERSION" },
              LOCATION: { code: 6037, category: ts.DiagnosticCategory.Message, key: "LOCATION" },
              DIRECTORY: { code: 6038, category: ts.DiagnosticCategory.Message, key: "DIRECTORY" },
              Compilation_complete_Watching_for_file_changes: { code: 6042, category: ts.DiagnosticCategory.Message, key: "Compilation complete. Watching for file changes." },
              Generates_corresponding_map_file: { code: 6043, category: ts.DiagnosticCategory.Message, key: "Generates corresponding '.map' file." },
              Compiler_option_0_expects_an_argument: { code: 6044, category: ts.DiagnosticCategory.Error, key: "Compiler option '{0}' expects an argument." },
              Unterminated_quoted_string_in_response_file_0: { code: 6045, category: ts.DiagnosticCategory.Error, key: "Unterminated quoted string in response file '{0}'." },
              Argument_for_module_option_must_be_commonjs_amd_system_or_umd: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument for '--module' option must be 'commonjs', 'amd', 'system' or 'umd'." },
              Argument_for_target_option_must_be_ES3_ES5_or_ES6: { code: 6047, category: ts.DiagnosticCategory.Error, key: "Argument for '--target' option must be 'ES3', 'ES5', or 'ES6'." },
              Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: ts.DiagnosticCategory.Error, key: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'." },
              Unsupported_locale_0: { code: 6049, category: ts.DiagnosticCategory.Error, key: "Unsupported locale '{0}'." },
              Unable_to_open_file_0: { code: 6050, category: ts.DiagnosticCategory.Error, key: "Unable to open file '{0}'." },
              Corrupted_locale_file_0: { code: 6051, category: ts.DiagnosticCategory.Error, key: "Corrupted locale file {0}." },
              Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: ts.DiagnosticCategory.Message, key: "Raise error on expressions and declarations with an implied 'any' type." },
              File_0_not_found: { code: 6053, category: ts.DiagnosticCategory.Error, key: "File '{0}' not found." },
              File_0_has_unsupported_extension_The_only_supported_extensions_are_1: { code: 6054, category: ts.DiagnosticCategory.Error, key: "File '{0}' has unsupported extension. The only supported extensions are {1}." },
              Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: ts.DiagnosticCategory.Message, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." },
              Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: ts.DiagnosticCategory.Message, key: "Do not emit declarations for code that has an '@internal' annotation." },
              Preserve_new_lines_when_emitting_code: { code: 6057, category: ts.DiagnosticCategory.Message, key: "Preserve new-lines when emitting code." },
              Specifies_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: { code: 6058, category: ts.DiagnosticCategory.Message, key: "Specifies the root directory of input files. Use to control the output directory structure with --outDir." },
              File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: { code: 6059, category: ts.DiagnosticCategory.Error, key: "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files." },
              Specifies_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: { code: 6060, category: ts.DiagnosticCategory.Message, key: "Specifies the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)." },
              NEWLINE: { code: 6061, category: ts.DiagnosticCategory.Message, key: "NEWLINE" },
              Argument_for_newLine_option_must_be_CRLF_or_LF: { code: 6062, category: ts.DiagnosticCategory.Error, key: "Argument for '--newLine' option must be 'CRLF' or 'LF'." },
              Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable '{0}' implicitly has an '{1}' type." },
              Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter '{0}' implicitly has an '{1}' type." },
              Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member '{0}' implicitly has an '{1}' type." },
              new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: ts.DiagnosticCategory.Error, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." },
              _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: ts.DiagnosticCategory.Error, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." },
              Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: ts.DiagnosticCategory.Error, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." },
              Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: ts.DiagnosticCategory.Error, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." },
              Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: ts.DiagnosticCategory.Error, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." },
              Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: ts.DiagnosticCategory.Error, key: "Index signature of object type implicitly has an 'any' type." },
              Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: ts.DiagnosticCategory.Error, key: "Object literal's property '{0}' implicitly has an '{1}' type." },
              Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: ts.DiagnosticCategory.Error, key: "Rest parameter '{0}' implicitly has an 'any[]' type." },
              Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: ts.DiagnosticCategory.Error, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." },
              _0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: ts.DiagnosticCategory.Error, key: "'{0}' implicitly has type 'any' because it is does not have a type annotation and is referenced directly or indirectly in its own initializer." },
              _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: ts.DiagnosticCategory.Error, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
              Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: ts.DiagnosticCategory.Error, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
              You_cannot_rename_this_element: { code: 8000, category: ts.DiagnosticCategory.Error, key: "You cannot rename this element." },
              You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: ts.DiagnosticCategory.Error, key: "You cannot rename elements that are defined in the standard TypeScript library." },
              import_can_only_be_used_in_a_ts_file: { code: 8002, category: ts.DiagnosticCategory.Error, key: "'import ... =' can only be used in a .ts file." },
              export_can_only_be_used_in_a_ts_file: { code: 8003, category: ts.DiagnosticCategory.Error, key: "'export=' can only be used in a .ts file." },
              type_parameter_declarations_can_only_be_used_in_a_ts_file: { code: 8004, category: ts.DiagnosticCategory.Error, key: "'type parameter declarations' can only be used in a .ts file." },
              implements_clauses_can_only_be_used_in_a_ts_file: { code: 8005, category: ts.DiagnosticCategory.Error, key: "'implements clauses' can only be used in a .ts file." },
              interface_declarations_can_only_be_used_in_a_ts_file: { code: 8006, category: ts.DiagnosticCategory.Error, key: "'interface declarations' can only be used in a .ts file." },
              module_declarations_can_only_be_used_in_a_ts_file: { code: 8007, category: ts.DiagnosticCategory.Error, key: "'module declarations' can only be used in a .ts file." },
              type_aliases_can_only_be_used_in_a_ts_file: { code: 8008, category: ts.DiagnosticCategory.Error, key: "'type aliases' can only be used in a .ts file." },
              _0_can_only_be_used_in_a_ts_file: { code: 8009, category: ts.DiagnosticCategory.Error, key: "'{0}' can only be used in a .ts file." },
              types_can_only_be_used_in_a_ts_file: { code: 8010, category: ts.DiagnosticCategory.Error, key: "'types' can only be used in a .ts file." },
              type_arguments_can_only_be_used_in_a_ts_file: { code: 8011, category: ts.DiagnosticCategory.Error, key: "'type arguments' can only be used in a .ts file." },
              parameter_modifiers_can_only_be_used_in_a_ts_file: { code: 8012, category: ts.DiagnosticCategory.Error, key: "'parameter modifiers' can only be used in a .ts file." },
              can_only_be_used_in_a_ts_file: { code: 8013, category: ts.DiagnosticCategory.Error, key: "'?' can only be used in a .ts file." },
              property_declarations_can_only_be_used_in_a_ts_file: { code: 8014, category: ts.DiagnosticCategory.Error, key: "'property declarations' can only be used in a .ts file." },
              enum_declarations_can_only_be_used_in_a_ts_file: { code: 8015, category: ts.DiagnosticCategory.Error, key: "'enum declarations' can only be used in a .ts file." },
              type_assertion_expressions_can_only_be_used_in_a_ts_file: { code: 8016, category: ts.DiagnosticCategory.Error, key: "'type assertion expressions' can only be used in a .ts file." },
              decorators_can_only_be_used_in_a_ts_file: { code: 8017, category: ts.DiagnosticCategory.Error, key: "'decorators' can only be used in a .ts file." },
              yield_expressions_are_not_currently_supported: { code: 9000, category: ts.DiagnosticCategory.Error, key: "'yield' expressions are not currently supported." },
              Generators_are_not_currently_supported: { code: 9001, category: ts.DiagnosticCategory.Error, key: "Generators are not currently supported." },
              Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses: { code: 9002, category: ts.DiagnosticCategory.Error, key: "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses." },
              class_expressions_are_not_currently_supported: { code: 9003, category: ts.DiagnosticCategory.Error, key: "'class' expressions are not currently supported." },
              class_declarations_are_only_supported_directly_inside_a_module_or_as_a_top_level_declaration: { code: 9004, category: ts.DiagnosticCategory.Error, key: "'class' declarations are only supported directly inside a module or as a top level declaration." }
          };
      })(ts || (ts = {}));
      /// <reference path="core.ts"/>
      /// <reference path="diagnosticInformationMap.generated.ts"/>
      var ts;
      (function (ts) {
          var textToToken = {
              "any": 112,
              "as": 111,
              "boolean": 113,
              "break": 66,
              "case": 67,
              "catch": 68,
              "class": 69,
              "continue": 71,
              "const": 70,
              "constructor": 114,
              "debugger": 72,
              "declare": 115,
              "default": 73,
              "delete": 74,
              "do": 75,
              "else": 76,
              "enum": 77,
              "export": 78,
              "extends": 79,
              "false": 80,
              "finally": 81,
              "for": 82,
              "from": 125,
              "function": 83,
              "get": 116,
              "if": 84,
              "implements": 102,
              "import": 85,
              "in": 86,
              "instanceof": 87,
              "interface": 103,
              "let": 104,
              "module": 117,
              "namespace": 118,
              "new": 88,
              "null": 89,
              "number": 120,
              "package": 105,
              "private": 106,
              "protected": 107,
              "public": 108,
              "require": 119,
              "return": 90,
              "set": 121,
              "static": 109,
              "string": 122,
              "super": 91,
              "switch": 92,
              "symbol": 123,
              "this": 93,
              "throw": 94,
              "true": 95,
              "try": 96,
              "type": 124,
              "typeof": 97,
              "var": 98,
              "void": 99,
              "while": 100,
              "with": 101,
              "yield": 110,
              "of": 126,
              "{": 14,
              "}": 15,
              "(": 16,
              ")": 17,
              "[": 18,
              "]": 19,
              ".": 20,
              "...": 21,
              ";": 22,
              ",": 23,
              "<": 24,
              ">": 25,
              "<=": 26,
              ">=": 27,
              "==": 28,
              "!=": 29,
              "===": 30,
              "!==": 31,
              "=>": 32,
              "+": 33,
              "-": 34,
              "*": 35,
              "/": 36,
              "%": 37,
              "++": 38,
              "--": 39,
              "<<": 40,
              ">>": 41,
              ">>>": 42,
              "&": 43,
              "|": 44,
              "^": 45,
              "!": 46,
              "~": 47,
              "&&": 48,
              "||": 49,
              "?": 50,
              ":": 51,
              "=": 53,
              "+=": 54,
              "-=": 55,
              "*=": 56,
              "/=": 57,
              "%=": 58,
              "<<=": 59,
              ">>=": 60,
              ">>>=": 61,
              "&=": 62,
              "|=": 63,
              "^=": 64,
              "@": 52
          };
          var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
          var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
          var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
          var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
          function lookupInUnicodeMap(code, map) {
              if (code < map[0]) {
                  return false;
              }
              var lo = 0;
              var hi = map.length;
              var mid;
              while (lo + 1 < hi) {
                  mid = lo + (hi - lo) / 2;
                  mid -= mid % 2;
                  if (map[mid] <= code && code <= map[mid + 1]) {
                      return true;
                  }
                  if (code < map[mid]) {
                      hi = mid;
                  }
                  else {
                      lo = mid + 2;
                  }
              }
              return false;
          }
          function isUnicodeIdentifierStart(code, languageVersion) {
              return languageVersion >= 1 ?
                  lookupInUnicodeMap(code, unicodeES5IdentifierStart) :
                  lookupInUnicodeMap(code, unicodeES3IdentifierStart);
          }
          ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart;
          function isUnicodeIdentifierPart(code, languageVersion) {
              return languageVersion >= 1 ?
                  lookupInUnicodeMap(code, unicodeES5IdentifierPart) :
                  lookupInUnicodeMap(code, unicodeES3IdentifierPart);
          }
          function makeReverseMap(source) {
              var result = [];
              for (var name_2 in source) {
                  if (source.hasOwnProperty(name_2)) {
                      result[source[name_2]] = name_2;
                  }
              }
              return result;
          }
          var tokenStrings = makeReverseMap(textToToken);
          function tokenToString(t) {
              return tokenStrings[t];
          }
          ts.tokenToString = tokenToString;
          function stringToToken(s) {
              return textToToken[s];
          }
          ts.stringToToken = stringToToken;
          function computeLineStarts(text) {
              var result = new Array();
              var pos = 0;
              var lineStart = 0;
              while (pos < text.length) {
                  var ch = text.charCodeAt(pos++);
                  switch (ch) {
                      case 13:
                          if (text.charCodeAt(pos) === 10) {
                              pos++;
                          }
                      case 10:
                          result.push(lineStart);
                          lineStart = pos;
                          break;
                      default:
                          if (ch > 127 && isLineBreak(ch)) {
                              result.push(lineStart);
                              lineStart = pos;
                          }
                          break;
                  }
              }
              result.push(lineStart);
              return result;
          }
          ts.computeLineStarts = computeLineStarts;
          function getPositionOfLineAndCharacter(sourceFile, line, character) {
              return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character);
          }
          ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter;
          function computePositionOfLineAndCharacter(lineStarts, line, character) {
              ts.Debug.assert(line >= 0 && line < lineStarts.length);
              return lineStarts[line] + character;
          }
          ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter;
          function getLineStarts(sourceFile) {
              return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text));
          }
          ts.getLineStarts = getLineStarts;
          function computeLineAndCharacterOfPosition(lineStarts, position) {
              var lineNumber = ts.binarySearch(lineStarts, position);
              if (lineNumber < 0) {
                  lineNumber = ~lineNumber - 1;
              }
              return {
                  line: lineNumber,
                  character: position - lineStarts[lineNumber]
              };
          }
          ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition;
          function getLineAndCharacterOfPosition(sourceFile, position) {
              return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position);
          }
          ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition;
          var hasOwnProperty = Object.prototype.hasOwnProperty;
          function isWhiteSpace(ch) {
              return ch === 32 ||
                  ch === 9 ||
                  ch === 11 ||
                  ch === 12 ||
                  ch === 160 ||
                  ch === 133 ||
                  ch === 5760 ||
                  ch >= 8192 && ch <= 8203 ||
                  ch === 8239 ||
                  ch === 8287 ||
                  ch === 12288 ||
                  ch === 65279;
          }
          ts.isWhiteSpace = isWhiteSpace;
          function isLineBreak(ch) {
              // ES5 7.3:
              // The ECMAScript line terminator characters are listed in Table 3.
              //     Table 3: Line Terminator Characters
              //     Code Unit Value     Name                    Formal Name
              //     \u000A              Line Feed               <LF>
              //     \u000D              Carriage Return         <CR>
              //     \u2028              Line separator          <LS>
              //     \u2029              Paragraph separator     <PS>
              // Only the characters in Table 3 are treated as line terminators. Other new line or line 
              // breaking characters are treated as white space but not as line terminators. 
              return ch === 10 ||
                  ch === 13 ||
                  ch === 8232 ||
                  ch === 8233;
          }
          ts.isLineBreak = isLineBreak;
          function isDigit(ch) {
              return ch >= 48 && ch <= 57;
          }
          function isOctalDigit(ch) {
              return ch >= 48 && ch <= 55;
          }
          ts.isOctalDigit = isOctalDigit;
          function skipTrivia(text, pos, stopAfterLineBreak) {
              while (true) {
                  var ch = text.charCodeAt(pos);
                  switch (ch) {
                      case 13:
                          if (text.charCodeAt(pos + 1) === 10) {
                              pos++;
                          }
                      case 10:
                          pos++;
                          if (stopAfterLineBreak) {
                              return pos;
                          }
                          continue;
                      case 9:
                      case 11:
                      case 12:
                      case 32:
                          pos++;
                          continue;
                      case 47:
                          if (text.charCodeAt(pos + 1) === 47) {
                              pos += 2;
                              while (pos < text.length) {
                                  if (isLineBreak(text.charCodeAt(pos))) {
                                      break;
                                  }
                                  pos++;
                              }
                              continue;
                          }
                          if (text.charCodeAt(pos + 1) === 42) {
                              pos += 2;
                              while (pos < text.length) {
                                  if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
                                      pos += 2;
                                      break;
                                  }
                                  pos++;
                              }
                              continue;
                          }
                          break;
                      case 60:
                      case 61:
                      case 62:
                          if (isConflictMarkerTrivia(text, pos)) {
                              pos = scanConflictMarkerTrivia(text, pos);
                              continue;
                          }
                          break;
                      default:
                          if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) {
                              pos++;
                              continue;
                          }
                          break;
                  }
                  return pos;
              }
          }
          ts.skipTrivia = skipTrivia;
          var mergeConflictMarkerLength = "<<<<<<<".length;
          function isConflictMarkerTrivia(text, pos) {
              ts.Debug.assert(pos >= 0);
              if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) {
                  var ch = text.charCodeAt(pos);
                  if ((pos + mergeConflictMarkerLength) < text.length) {
                      for (var i = 0, n = mergeConflictMarkerLength; i < n; i++) {
                          if (text.charCodeAt(pos + i) !== ch) {
                              return false;
                          }
                      }
                      return ch === 61 ||
                          text.charCodeAt(pos + mergeConflictMarkerLength) === 32;
                  }
              }
              return false;
          }
          function scanConflictMarkerTrivia(text, pos, error) {
              if (error) {
                  error(ts.Diagnostics.Merge_conflict_marker_encountered, mergeConflictMarkerLength);
              }
              var ch = text.charCodeAt(pos);
              var len = text.length;
              if (ch === 60 || ch === 62) {
                  while (pos < len && !isLineBreak(text.charCodeAt(pos))) {
                      pos++;
                  }
              }
              else {
                  ts.Debug.assert(ch === 61);
                  while (pos < len) {
                      var ch_1 = text.charCodeAt(pos);
                      if (ch_1 === 62 && isConflictMarkerTrivia(text, pos)) {
                          break;
                      }
                      pos++;
                  }
              }
              return pos;
          }
          function getCommentRanges(text, pos, trailing) {
              var result;
              var collecting = trailing || pos === 0;
              while (true) {
                  var ch = text.charCodeAt(pos);
                  switch (ch) {
                      case 13:
                          if (text.charCodeAt(pos + 1) === 10) {
                              pos++;
                          }
                      case 10:
                          pos++;
                          if (trailing) {
                              return result;
                          }
                          collecting = true;
                          if (result && result.length) {
                              ts.lastOrUndefined(result).hasTrailingNewLine = true;
                          }
                          continue;
                      case 9:
                      case 11:
                      case 12:
                      case 32:
                          pos++;
                          continue;
                      case 47:
                          var nextChar = text.charCodeAt(pos + 1);
                          var hasTrailingNewLine = false;
                          if (nextChar === 47 || nextChar === 42) {
                              var kind = nextChar === 47 ? 2 : 3;
                              var startPos = pos;
                              pos += 2;
                              if (nextChar === 47) {
                                  while (pos < text.length) {
                                      if (isLineBreak(text.charCodeAt(pos))) {
                                          hasTrailingNewLine = true;
                                          break;
                                      }
                                      pos++;
                                  }
                              }
                              else {
                                  while (pos < text.length) {
                                      if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
                                          pos += 2;
                                          break;
                                      }
                                      pos++;
                                  }
                              }
                              if (collecting) {
                                  if (!result) {
                                      result = [];
                                  }
                                  result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine, kind: kind });
                              }
                              continue;
                          }
                          break;
                      default:
                          if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) {
                              if (result && result.length && isLineBreak(ch)) {
                                  ts.lastOrUndefined(result).hasTrailingNewLine = true;
                              }
                              pos++;
                              continue;
                          }
                          break;
                  }
                  return result;
              }
          }
          function getLeadingCommentRanges(text, pos) {
              return getCommentRanges(text, pos, false);
          }
          ts.getLeadingCommentRanges = getLeadingCommentRanges;
          function getTrailingCommentRanges(text, pos) {
              return getCommentRanges(text, pos, true);
          }
          ts.getTrailingCommentRanges = getTrailingCommentRanges;
          function isIdentifierStart(ch, languageVersion) {
              return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
                  ch === 36 || ch === 95 ||
                  ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
          }
          ts.isIdentifierStart = isIdentifierStart;
          function isIdentifierPart(ch, languageVersion) {
              return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
                  ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
                  ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
          }
          ts.isIdentifierPart = isIdentifierPart;
          function createScanner(languageVersion, skipTrivia, text, onError, start, length) {
              var pos;
              var end;
              var startPos;
              var tokenPos;
              var token;
              var tokenValue;
              var precedingLineBreak;
              var hasExtendedUnicodeEscape;
              var tokenIsUnterminated;
              setText(text, start, length);
              return {
                  getStartPos: function () { return startPos; },
                  getTextPos: function () { return pos; },
                  getToken: function () { return token; },
                  getTokenPos: function () { return tokenPos; },
                  getTokenText: function () { return text.substring(tokenPos, pos); },
                  getTokenValue: function () { return tokenValue; },
                  hasExtendedUnicodeEscape: function () { return hasExtendedUnicodeEscape; },
                  hasPrecedingLineBreak: function () { return precedingLineBreak; },
                  isIdentifier: function () { return token === 65 || token > 101; },
                  isReservedWord: function () { return token >= 66 && token <= 101; },
                  isUnterminated: function () { return tokenIsUnterminated; },
                  reScanGreaterToken: reScanGreaterToken,
                  reScanSlashToken: reScanSlashToken,
                  reScanTemplateToken: reScanTemplateToken,
                  scan: scan,
                  setText: setText,
                  setScriptTarget: setScriptTarget,
                  setOnError: setOnError,
                  setTextPos: setTextPos,
                  tryScan: tryScan,
                  lookAhead: lookAhead
              };
              function error(message, length) {
                  if (onError) {
                      onError(message, length || 0);
                  }
              }
              function isIdentifierStart(ch) {
                  return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
                      ch === 36 || ch === 95 ||
                      ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
              }
              function isIdentifierPart(ch) {
                  return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
                      ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
                      ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
              }
              function scanNumber() {
                  var start = pos;
                  while (isDigit(text.charCodeAt(pos)))
                      pos++;
                  if (text.charCodeAt(pos) === 46) {
                      pos++;
                      while (isDigit(text.charCodeAt(pos)))
                          pos++;
                  }
                  var end = pos;
                  if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) {
                      pos++;
                      if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45)
                          pos++;
                      if (isDigit(text.charCodeAt(pos))) {
                          pos++;
                          while (isDigit(text.charCodeAt(pos)))
                              pos++;
                          end = pos;
                      }
                      else {
                          error(ts.Diagnostics.Digit_expected);
                      }
                  }
                  return +(text.substring(start, end));
              }
              function scanOctalDigits() {
                  var start = pos;
                  while (isOctalDigit(text.charCodeAt(pos))) {
                      pos++;
                  }
                  return +(text.substring(start, pos));
              }
              function scanExactNumberOfHexDigits(count) {
                  return scanHexDigits(count, false);
              }
              function scanMinimumNumberOfHexDigits(count) {
                  return scanHexDigits(count, true);
              }
              function scanHexDigits(minCount, scanAsManyAsPossible) {
                  var digits = 0;
                  var value = 0;
                  while (digits < minCount || scanAsManyAsPossible) {
                      var ch = text.charCodeAt(pos);
                      if (ch >= 48 && ch <= 57) {
                          value = value * 16 + ch - 48;
                      }
                      else if (ch >= 65 && ch <= 70) {
                          value = value * 16 + ch - 65 + 10;
                      }
                      else if (ch >= 97 && ch <= 102) {
                          value = value * 16 + ch - 97 + 10;
                      }
                      else {
                          break;
                      }
                      pos++;
                      digits++;
                  }
                  if (digits < minCount) {
                      value = -1;
                  }
                  return value;
              }
              function scanString() {
                  var quote = text.charCodeAt(pos++);
                  var result = "";
                  var start = pos;
                  while (true) {
                      if (pos >= end) {
                          result += text.substring(start, pos);
                          tokenIsUnterminated = true;
                          error(ts.Diagnostics.Unterminated_string_literal);
                          break;
                      }
                      var ch = text.charCodeAt(pos);
                      if (ch === quote) {
                          result += text.substring(start, pos);
                          pos++;
                          break;
                      }
                      if (ch === 92) {
                          result += text.substring(start, pos);
                          result += scanEscapeSequence();
                          start = pos;
                          continue;
                      }
                      if (isLineBreak(ch)) {
                          result += text.substring(start, pos);
                          tokenIsUnterminated = true;
                          error(ts.Diagnostics.Unterminated_string_literal);
                          break;
                      }
                      pos++;
                  }
                  return result;
              }
              function scanTemplateAndSetTokenValue() {
                  var startedWithBacktick = text.charCodeAt(pos) === 96;
                  pos++;
                  var start = pos;
                  var contents = "";
                  var resultingToken;
                  while (true) {
                      if (pos >= end) {
                          contents += text.substring(start, pos);
                          tokenIsUnterminated = true;
                          error(ts.Diagnostics.Unterminated_template_literal);
                          resultingToken = startedWithBacktick ? 10 : 13;
                          break;
                      }
                      var currChar = text.charCodeAt(pos);
                      if (currChar === 96) {
                          contents += text.substring(start, pos);
                          pos++;
                          resultingToken = startedWithBacktick ? 10 : 13;
                          break;
                      }
                      if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) {
                          contents += text.substring(start, pos);
                          pos += 2;
                          resultingToken = startedWithBacktick ? 11 : 12;
                          break;
                      }
                      if (currChar === 92) {
                          contents += text.substring(start, pos);
                          contents += scanEscapeSequence();
                          start = pos;
                          continue;
                      }
                      if (currChar === 13) {
                          contents += text.substring(start, pos);
                          pos++;
                          if (pos < end && text.charCodeAt(pos) === 10) {
                              pos++;
                          }
                          contents += "\n";
                          start = pos;
                          continue;
                      }
                      pos++;
                  }
                  ts.Debug.assert(resultingToken !== undefined);
                  tokenValue = contents;
                  return resultingToken;
              }
              function scanEscapeSequence() {
                  pos++;
                  if (pos >= end) {
                      error(ts.Diagnostics.Unexpected_end_of_text);
                      return "";
                  }
                  var ch = text.charCodeAt(pos++);
                  switch (ch) {
                      case 48:
                          return "\0";
                      case 98:
                          return "\b";
                      case 116:
                          return "\t";
                      case 110:
                          return "\n";
                      case 118:
                          return "\v";
                      case 102:
                          return "\f";
                      case 114:
                          return "\r";
                      case 39:
                          return "\'";
                      case 34:
                          return "\"";
                      case 117:
                          if (pos < end && text.charCodeAt(pos) === 123) {
                              hasExtendedUnicodeEscape = true;
                              pos++;
                              return scanExtendedUnicodeEscape();
                          }
                          return scanHexadecimalEscape(4);
                      case 120:
                          return scanHexadecimalEscape(2);
                      case 13:
                          if (pos < end && text.charCodeAt(pos) === 10) {
                              pos++;
                          }
                      case 10:
                      case 8232:
                      case 8233:
                          return "";
                      default:
                          return String.fromCharCode(ch);
                  }
              }
              function scanHexadecimalEscape(numDigits) {
                  var escapedValue = scanExactNumberOfHexDigits(numDigits);
                  if (escapedValue >= 0) {
                      return String.fromCharCode(escapedValue);
                  }
                  else {
                      error(ts.Diagnostics.Hexadecimal_digit_expected);
                      return "";
                  }
              }
              function scanExtendedUnicodeEscape() {
                  var escapedValue = scanMinimumNumberOfHexDigits(1);
                  var isInvalidExtendedEscape = false;
                  if (escapedValue < 0) {
                      error(ts.Diagnostics.Hexadecimal_digit_expected);
                      isInvalidExtendedEscape = true;
                  }
                  else if (escapedValue > 0x10FFFF) {
                      error(ts.Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive);
                      isInvalidExtendedEscape = true;
                  }
                  if (pos >= end) {
                      error(ts.Diagnostics.Unexpected_end_of_text);
                      isInvalidExtendedEscape = true;
                  }
                  else if (text.charCodeAt(pos) == 125) {
                      pos++;
                  }
                  else {
                      error(ts.Diagnostics.Unterminated_Unicode_escape_sequence);
                      isInvalidExtendedEscape = true;
                  }
                  if (isInvalidExtendedEscape) {
                      return "";
                  }
                  return utf16EncodeAsString(escapedValue);
              }
              function utf16EncodeAsString(codePoint) {
                  ts.Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF);
                  if (codePoint <= 65535) {
                      return String.fromCharCode(codePoint);
                  }
                  var codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 0xD800;
                  var codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00;
                  return String.fromCharCode(codeUnit1, codeUnit2);
              }
              function peekUnicodeEscape() {
                  if (pos + 5 < end && text.charCodeAt(pos + 1) === 117) {
                      var start_1 = pos;
                      pos += 2;
                      var value = scanExactNumberOfHexDigits(4);
                      pos = start_1;
                      return value;
                  }
                  return -1;
              }
              function scanIdentifierParts() {
                  var result = "";
                  var start = pos;
                  while (pos < end) {
                      var ch = text.charCodeAt(pos);
                      if (isIdentifierPart(ch)) {
                          pos++;
                      }
                      else if (ch === 92) {
                          ch = peekUnicodeEscape();
                          if (!(ch >= 0 && isIdentifierPart(ch))) {
                              break;
                          }
                          result += text.substring(start, pos);
                          result += String.fromCharCode(ch);
                          pos += 6;
                          start = pos;
                      }
                      else {
                          break;
                      }
                  }
                  result += text.substring(start, pos);
                  return result;
              }
              function getIdentifierToken() {
                  var len = tokenValue.length;
                  if (len >= 2 && len <= 11) {
                      var ch = tokenValue.charCodeAt(0);
                      if (ch >= 97 && ch <= 122 && hasOwnProperty.call(textToToken, tokenValue)) {
                          return token = textToToken[tokenValue];
                      }
                  }
                  return token = 65;
              }
              function scanBinaryOrOctalDigits(base) {
                  ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8");
                  var value = 0;
                  var numberOfDigits = 0;
                  while (true) {
                      var ch = text.charCodeAt(pos);
                      var valueOfCh = ch - 48;
                      if (!isDigit(ch) || valueOfCh >= base) {
                          break;
                      }
                      value = value * base + valueOfCh;
                      pos++;
                      numberOfDigits++;
                  }
                  if (numberOfDigits === 0) {
                      return -1;
                  }
                  return value;
              }
              function scan() {
                  startPos = pos;
                  hasExtendedUnicodeEscape = false;
                  precedingLineBreak = false;
                  tokenIsUnterminated = false;
                  while (true) {
                      tokenPos = pos;
                      if (pos >= end) {
                          return token = 1;
                      }
                      var ch = text.charCodeAt(pos);
                      switch (ch) {
                          case 10:
                          case 13:
                              precedingLineBreak = true;
                              if (skipTrivia) {
                                  pos++;
                                  continue;
                              }
                              else {
                                  if (ch === 13 && pos + 1 < end && text.charCodeAt(pos + 1) === 10) {
                                      pos += 2;
                                  }
                                  else {
                                      pos++;
                                  }
                                  return token = 4;
                              }
                          case 9:
                          case 11:
                          case 12:
                          case 32:
                              if (skipTrivia) {
                                  pos++;
                                  continue;
                              }
                              else {
                                  while (pos < end && isWhiteSpace(text.charCodeAt(pos))) {
                                      pos++;
                                  }
                                  return token = 5;
                              }
                          case 33:
                              if (text.charCodeAt(pos + 1) === 61) {
                                  if (text.charCodeAt(pos + 2) === 61) {
                                      return pos += 3, token = 31;
                                  }
                                  return pos += 2, token = 29;
                              }
                              return pos++, token = 46;
                          case 34:
                          case 39:
                              tokenValue = scanString();
                              return token = 8;
                          case 96:
                              return token = scanTemplateAndSetTokenValue();
                          case 37:
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 58;
                              }
                              return pos++, token = 37;
                          case 38:
                              if (text.charCodeAt(pos + 1) === 38) {
                                  return pos += 2, token = 48;
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 62;
                              }
                              return pos++, token = 43;
                          case 40:
                              return pos++, token = 16;
                          case 41:
                              return pos++, token = 17;
                          case 42:
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 56;
                              }
                              return pos++, token = 35;
                          case 43:
                              if (text.charCodeAt(pos + 1) === 43) {
                                  return pos += 2, token = 38;
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 54;
                              }
                              return pos++, token = 33;
                          case 44:
                              return pos++, token = 23;
                          case 45:
                              if (text.charCodeAt(pos + 1) === 45) {
                                  return pos += 2, token = 39;
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 55;
                              }
                              return pos++, token = 34;
                          case 46:
                              if (isDigit(text.charCodeAt(pos + 1))) {
                                  tokenValue = "" + scanNumber();
                                  return token = 7;
                              }
                              if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) {
                                  return pos += 3, token = 21;
                              }
                              return pos++, token = 20;
                          case 47:
                              if (text.charCodeAt(pos + 1) === 47) {
                                  pos += 2;
                                  while (pos < end) {
                                      if (isLineBreak(text.charCodeAt(pos))) {
                                          break;
                                      }
                                      pos++;
                                  }
                                  if (skipTrivia) {
                                      continue;
                                  }
                                  else {
                                      return token = 2;
                                  }
                              }
                              if (text.charCodeAt(pos + 1) === 42) {
                                  pos += 2;
                                  var commentClosed = false;
                                  while (pos < end) {
                                      var ch_2 = text.charCodeAt(pos);
                                      if (ch_2 === 42 && text.charCodeAt(pos + 1) === 47) {
                                          pos += 2;
                                          commentClosed = true;
                                          break;
                                      }
                                      if (isLineBreak(ch_2)) {
                                          precedingLineBreak = true;
                                      }
                                      pos++;
                                  }
                                  if (!commentClosed) {
                                      error(ts.Diagnostics.Asterisk_Slash_expected);
                                  }
                                  if (skipTrivia) {
                                      continue;
                                  }
                                  else {
                                      tokenIsUnterminated = !commentClosed;
                                      return token = 3;
                                  }
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 57;
                              }
                              return pos++, token = 36;
                          case 48:
                              if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) {
                                  pos += 2;
                                  var value = scanMinimumNumberOfHexDigits(1);
                                  if (value < 0) {
                                      error(ts.Diagnostics.Hexadecimal_digit_expected);
                                      value = 0;
                                  }
                                  tokenValue = "" + value;
                                  return token = 7;
                              }
                              else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) {
                                  pos += 2;
                                  var value = scanBinaryOrOctalDigits(2);
                                  if (value < 0) {
                                      error(ts.Diagnostics.Binary_digit_expected);
                                      value = 0;
                                  }
                                  tokenValue = "" + value;
                                  return token = 7;
                              }
                              else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) {
                                  pos += 2;
                                  var value = scanBinaryOrOctalDigits(8);
                                  if (value < 0) {
                                      error(ts.Diagnostics.Octal_digit_expected);
                                      value = 0;
                                  }
                                  tokenValue = "" + value;
                                  return token = 7;
                              }
                              if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) {
                                  tokenValue = "" + scanOctalDigits();
                                  return token = 7;
                              }
                          case 49:
                          case 50:
                          case 51:
                          case 52:
                          case 53:
                          case 54:
                          case 55:
                          case 56:
                          case 57:
                              tokenValue = "" + scanNumber();
                              return token = 7;
                          case 58:
                              return pos++, token = 51;
                          case 59:
                              return pos++, token = 22;
                          case 60:
                              if (isConflictMarkerTrivia(text, pos)) {
                                  pos = scanConflictMarkerTrivia(text, pos, error);
                                  if (skipTrivia) {
                                      continue;
                                  }
                                  else {
                                      return token = 6;
                                  }
                              }
                              if (text.charCodeAt(pos + 1) === 60) {
                                  if (text.charCodeAt(pos + 2) === 61) {
                                      return pos += 3, token = 59;
                                  }
                                  return pos += 2, token = 40;
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 26;
                              }
                              return pos++, token = 24;
                          case 61:
                              if (isConflictMarkerTrivia(text, pos)) {
                                  pos = scanConflictMarkerTrivia(text, pos, error);
                                  if (skipTrivia) {
                                      continue;
                                  }
                                  else {
                                      return token = 6;
                                  }
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  if (text.charCodeAt(pos + 2) === 61) {
                                      return pos += 3, token = 30;
                                  }
                                  return pos += 2, token = 28;
                              }
                              if (text.charCodeAt(pos + 1) === 62) {
                                  return pos += 2, token = 32;
                              }
                              return pos++, token = 53;
                          case 62:
                              if (isConflictMarkerTrivia(text, pos)) {
                                  pos = scanConflictMarkerTrivia(text, pos, error);
                                  if (skipTrivia) {
                                      continue;
                                  }
                                  else {
                                      return token = 6;
                                  }
                              }
                              return pos++, token = 25;
                          case 63:
                              return pos++, token = 50;
                          case 91:
                              return pos++, token = 18;
                          case 93:
                              return pos++, token = 19;
                          case 94:
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 64;
                              }
                              return pos++, token = 45;
                          case 123:
                              return pos++, token = 14;
                          case 124:
                              if (text.charCodeAt(pos + 1) === 124) {
                                  return pos += 2, token = 49;
                              }
                              if (text.charCodeAt(pos + 1) === 61) {
                                  return pos += 2, token = 63;
                              }
                              return pos++, token = 44;
                          case 125:
                              return pos++, token = 15;
                          case 126:
                              return pos++, token = 47;
                          case 64:
                              return pos++, token = 52;
                          case 92:
                              var cookedChar = peekUnicodeEscape();
                              if (cookedChar >= 0 && isIdentifierStart(cookedChar)) {
                                  pos += 6;
                                  tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
                                  return token = getIdentifierToken();
                              }
                              error(ts.Diagnostics.Invalid_character);
                              return pos++, token = 0;
                          default:
                              if (isIdentifierStart(ch)) {
                                  pos++;
                                  while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos)))
                                      pos++;
                                  tokenValue = text.substring(tokenPos, pos);
                                  if (ch === 92) {
                                      tokenValue += scanIdentifierParts();
                                  }
                                  return token = getIdentifierToken();
                              }
                              else if (isWhiteSpace(ch)) {
                                  pos++;
                                  continue;
                              }
                              else if (isLineBreak(ch)) {
                                  precedingLineBreak = true;
                                  pos++;
                                  continue;
                              }
                              error(ts.Diagnostics.Invalid_character);
                              return pos++, token = 0;
                      }
                  }
              }
              function reScanGreaterToken() {
                  if (token === 25) {
                      if (text.charCodeAt(pos) === 62) {
                          if (text.charCodeAt(pos + 1) === 62) {
                              if (text.charCodeAt(pos + 2) === 61) {
                                  return pos += 3, token = 61;
                              }
                              return pos += 2, token = 42;
                          }
                          if (text.charCodeAt(pos + 1) === 61) {
                              return pos += 2, token = 60;
                          }
                          return pos++, token = 41;
                      }
                      if (text.charCodeAt(pos) === 61) {
                          return pos++, token = 27;
                      }
                  }
                  return token;
              }
              function reScanSlashToken() {
                  if (token === 36 || token === 57) {
                      var p = tokenPos + 1;
                      var inEscape = false;
                      var inCharacterClass = false;
                      while (true) {
                          if (p >= end) {
                              tokenIsUnterminated = true;
                              error(ts.Diagnostics.Unterminated_regular_expression_literal);
                              break;
                          }
                          var ch = text.charCodeAt(p);
                          if (isLineBreak(ch)) {
                              tokenIsUnterminated = true;
                              error(ts.Diagnostics.Unterminated_regular_expression_literal);
                              break;
                          }
                          if (inEscape) {
                              inEscape = false;
                          }
                          else if (ch === 47 && !inCharacterClass) {
                              p++;
                              break;
                          }
                          else if (ch === 91) {
                              inCharacterClass = true;
                          }
                          else if (ch === 92) {
                              inEscape = true;
                          }
                          else if (ch === 93) {
                              inCharacterClass = false;
                          }
                          p++;
                      }
                      while (p < end && isIdentifierPart(text.charCodeAt(p))) {
                          p++;
                      }
                      pos = p;
                      tokenValue = text.substring(tokenPos, pos);
                      token = 9;
                  }
                  return token;
              }
              function reScanTemplateToken() {
                  ts.Debug.assert(token === 15, "'reScanTemplateToken' should only be called on a '}'");
                  pos = tokenPos;
                  return token = scanTemplateAndSetTokenValue();
              }
              function speculationHelper(callback, isLookahead) {
                  var savePos = pos;
                  var saveStartPos = startPos;
                  var saveTokenPos = tokenPos;
                  var saveToken = token;
                  var saveTokenValue = tokenValue;
                  var savePrecedingLineBreak = precedingLineBreak;
                  var result = callback();
                  if (!result || isLookahead) {
                      pos = savePos;
                      startPos = saveStartPos;
                      tokenPos = saveTokenPos;
                      token = saveToken;
                      tokenValue = saveTokenValue;
                      precedingLineBreak = savePrecedingLineBreak;
                  }
                  return result;
              }
              function lookAhead(callback) {
                  return speculationHelper(callback, true);
              }
              function tryScan(callback) {
                  return speculationHelper(callback, false);
              }
              function setText(newText, start, length) {
                  text = newText || "";
                  end = length === undefined ? text.length : start + length;
                  setTextPos(start || 0);
              }
              function setOnError(errorCallback) {
                  onError = errorCallback;
              }
              function setScriptTarget(scriptTarget) {
                  languageVersion = scriptTarget;
              }
              function setTextPos(textPos) {
                  ts.Debug.assert(textPos >= 0);
                  pos = textPos;
                  startPos = textPos;
                  tokenPos = textPos;
                  token = 0;
                  precedingLineBreak = false;
                  tokenValue = undefined;
                  hasExtendedUnicodeEscape = false;
                  tokenIsUnterminated = false;
              }
          }
          ts.createScanner = createScanner;
      })(ts || (ts = {}));
      /// <reference path="parser.ts"/>
      var ts;
      (function (ts) {
          ts.bindTime = 0;
          function getModuleInstanceState(node) {
              if (node.kind === 203 || node.kind === 204) {
                  return 0;
              }
              else if (ts.isConstEnumDeclaration(node)) {
                  return 2;
              }
              else if ((node.kind === 210 || node.kind === 209) && !(node.flags & 1)) {
                  return 0;
              }
              else if (node.kind === 207) {
                  var state = 0;
                  ts.forEachChild(node, function (n) {
                      switch (getModuleInstanceState(n)) {
                          case 0:
                              return false;
                          case 2:
                              state = 2;
                              return false;
                          case 1:
                              state = 1;
                              return true;
                      }
                  });
                  return state;
              }
              else if (node.kind === 206) {
                  return getModuleInstanceState(node.body);
              }
              else {
                  return 1;
              }
          }
          ts.getModuleInstanceState = getModuleInstanceState;
          function bindSourceFile(file) {
              var start = new Date().getTime();
              bindSourceFileWorker(file);
              ts.bindTime += new Date().getTime() - start;
          }
          ts.bindSourceFile = bindSourceFile;
          function bindSourceFileWorker(file) {
              var parent;
              var container;
              var blockScopeContainer;
              var lastContainer;
              var symbolCount = 0;
              var Symbol = ts.objectAllocator.getSymbolConstructor();
              if (!file.locals) {
                  file.locals = {};
                  container = file;
                  setBlockScopeContainer(file, false);
                  bind(file);
                  file.symbolCount = symbolCount;
              }
              function createSymbol(flags, name) {
                  symbolCount++;
                  return new Symbol(flags, name);
              }
              function setBlockScopeContainer(node, cleanLocals) {
                  blockScopeContainer = node;
                  if (cleanLocals) {
                      blockScopeContainer.locals = undefined;
                  }
              }
              function addDeclarationToSymbol(symbol, node, symbolKind) {
                  symbol.flags |= symbolKind;
                  if (!symbol.declarations)
                      symbol.declarations = [];
                  symbol.declarations.push(node);
                  if (symbolKind & 1952 && !symbol.exports)
                      symbol.exports = {};
                  if (symbolKind & 6240 && !symbol.members)
                      symbol.members = {};
                  node.symbol = symbol;
                  if (symbolKind & 107455 && !symbol.valueDeclaration)
                      symbol.valueDeclaration = node;
              }
              function getDeclarationName(node) {
                  if (node.name) {
                      if (node.kind === 206 && node.name.kind === 8) {
                          return '"' + node.name.text + '"';
                      }
                      if (node.name.kind === 128) {
                          var nameExpression = node.name.expression;
                          ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression));
                          return ts.getPropertyNameForKnownSymbolName(nameExpression.name.text);
                      }
                      return node.name.text;
                  }
                  switch (node.kind) {
                      case 144:
                      case 136:
                          return "__constructor";
                      case 143:
                      case 139:
                          return "__call";
                      case 140:
                          return "__new";
                      case 141:
                          return "__index";
                      case 216:
                          return "__export";
                      case 215:
                          return node.isExportEquals ? "export=" : "default";
                      case 201:
                      case 202:
                          return node.flags & 256 ? "default" : undefined;
                  }
              }
              function getDisplayName(node) {
                  return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node);
              }
              function declareSymbol(symbols, parent, node, includes, excludes) {
                  ts.Debug.assert(!ts.hasDynamicName(node));
                  var name = node.flags & 256 && parent ? "default" : getDeclarationName(node);
                  var symbol;
                  if (name !== undefined) {
                      symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, name));
                      if (symbol.flags & excludes) {
                          if (node.name) {
                              node.name.parent = node;
                          }
                          var message = symbol.flags & 2
                              ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0
                              : ts.Diagnostics.Duplicate_identifier_0;
                          ts.forEach(symbol.declarations, function (declaration) {
                              file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name || declaration, message, getDisplayName(declaration)));
                          });
                          file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name || node, message, getDisplayName(node)));
                          symbol = createSymbol(0, name);
                      }
                  }
                  else {
                      symbol = createSymbol(0, "__missing");
                  }
                  addDeclarationToSymbol(symbol, node, includes);
                  symbol.parent = parent;
                  if ((node.kind === 202 || node.kind === 175) && symbol.exports) {
                      var prototypeSymbol = createSymbol(4 | 134217728, "prototype");
                      if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) {
                          if (node.name) {
                              node.name.parent = node;
                          }
                          file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name));
                      }
                      symbol.exports[prototypeSymbol.name] = prototypeSymbol;
                      prototypeSymbol.parent = symbol;
                  }
                  return symbol;
              }
              function declareModuleMember(node, symbolKind, symbolExcludes) {
                  var hasExportModifier = ts.getCombinedNodeFlags(node) & 1;
                  if (symbolKind & 8388608) {
                      if (node.kind === 218 || (node.kind === 209 && hasExportModifier)) {
                          declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
                      }
                      else {
                          declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
                      }
                  }
                  else {
                      if (hasExportModifier || container.flags & 65536) {
                          var exportKind = (symbolKind & 107455 ? 1048576 : 0) |
                              (symbolKind & 793056 ? 2097152 : 0) |
                              (symbolKind & 1536 ? 4194304 : 0);
                          var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes);
                          local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
                          node.localSymbol = local;
                      }
                      else {
                          declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
                      }
                  }
              }
              function bindChildren(node, symbolKind, isBlockScopeContainer) {
                  if (symbolKind & 255504) {
                      node.locals = {};
                  }
                  var saveParent = parent;
                  var saveContainer = container;
                  var savedBlockScopeContainer = blockScopeContainer;
                  parent = node;
                  if (symbolKind & 262128) {
                      container = node;
                      addToContainerChain(container);
                  }
                  if (isBlockScopeContainer) {
                      setBlockScopeContainer(node, (symbolKind & 255504) === 0 && node.kind !== 228);
                  }
                  ts.forEachChild(node, bind);
                  container = saveContainer;
                  parent = saveParent;
                  blockScopeContainer = savedBlockScopeContainer;
              }
              function addToContainerChain(node) {
                  if (lastContainer) {
                      lastContainer.nextContainer = node;
                  }
                  lastContainer = node;
              }
              function bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
                  switch (container.kind) {
                      case 206:
                          declareModuleMember(node, symbolKind, symbolExcludes);
                          break;
                      case 228:
                          if (ts.isExternalModule(container)) {
                              declareModuleMember(node, symbolKind, symbolExcludes);
                              break;
                          }
                      case 143:
                      case 144:
                      case 139:
                      case 140:
                      case 141:
                      case 135:
                      case 134:
                      case 136:
                      case 137:
                      case 138:
                      case 201:
                      case 163:
                      case 164:
                          declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
                          break;
                      case 175:
                      case 202:
                          if (node.flags & 128) {
                              declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
                              break;
                          }
                      case 146:
                      case 155:
                      case 203:
                          declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes);
                          break;
                      case 205:
                          declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
                          break;
                  }
                  bindChildren(node, symbolKind, isBlockScopeContainer);
              }
              function isAmbientContext(node) {
                  while (node) {
                      if (node.flags & 2)
                          return true;
                      node = node.parent;
                  }
                  return false;
              }
              function hasExportDeclarations(node) {
                  var body = node.kind === 228 ? node : node.body;
                  if (body.kind === 228 || body.kind === 207) {
                      for (var _i = 0, _a = body.statements; _i < _a.length; _i++) {
                          var stat = _a[_i];
                          if (stat.kind === 216 || stat.kind === 215) {
                              return true;
                          }
                      }
                  }
                  return false;
              }
              function setExportContextFlag(node) {
                  if (isAmbientContext(node) && !hasExportDeclarations(node)) {
                      node.flags |= 65536;
                  }
                  else {
                      node.flags &= ~65536;
                  }
              }
              function bindModuleDeclaration(node) {
                  setExportContextFlag(node);
                  if (node.name.kind === 8) {
                      bindDeclaration(node, 512, 106639, true);
                  }
                  else {
                      var state = getModuleInstanceState(node);
                      if (state === 0) {
                          bindDeclaration(node, 1024, 0, true);
                      }
                      else {
                          bindDeclaration(node, 512, 106639, true);
                          var currentModuleIsConstEnumOnly = state === 2;
                          if (node.symbol.constEnumOnlyModule === undefined) {
                              node.symbol.constEnumOnlyModule = currentModuleIsConstEnumOnly;
                          }
                          else {
                              node.symbol.constEnumOnlyModule = node.symbol.constEnumOnlyModule && currentModuleIsConstEnumOnly;
                          }
                      }
                  }
              }
              function bindFunctionOrConstructorType(node) {
                  // For a given function symbol "<...>(...) => T" we want to generate a symbol identical
                  // to the one we would get for: { <...>(...): T }
                  //
                  // We do that by making an anonymous type literal symbol, and then setting the function 
                  // symbol as its sole member. To the rest of the system, this symbol will be  indistinguishable 
                  // from an actual type literal symbol you would have gotten had you used the long form.
                  var symbol = createSymbol(131072, getDeclarationName(node));
                  addDeclarationToSymbol(symbol, node, 131072);
                  bindChildren(node, 131072, false);
                  var typeLiteralSymbol = createSymbol(2048, "__type");
                  addDeclarationToSymbol(typeLiteralSymbol, node, 2048);
                  typeLiteralSymbol.members = {};
                  typeLiteralSymbol.members[node.kind === 143 ? "__call" : "__new"] = symbol;
              }
              function bindAnonymousDeclaration(node, symbolKind, name, isBlockScopeContainer) {
                  var symbol = createSymbol(symbolKind, name);
                  addDeclarationToSymbol(symbol, node, symbolKind);
                  bindChildren(node, symbolKind, isBlockScopeContainer);
              }
              function bindCatchVariableDeclaration(node) {
                  bindChildren(node, 0, true);
              }
              function bindBlockScopedDeclaration(node, symbolKind, symbolExcludes) {
                  switch (blockScopeContainer.kind) {
                      case 206:
                          declareModuleMember(node, symbolKind, symbolExcludes);
                          break;
                      case 228:
                          if (ts.isExternalModule(container)) {
                              declareModuleMember(node, symbolKind, symbolExcludes);
                              break;
                          }
                      default:
                          if (!blockScopeContainer.locals) {
                              blockScopeContainer.locals = {};
                              addToContainerChain(blockScopeContainer);
                          }
                          declareSymbol(blockScopeContainer.locals, undefined, node, symbolKind, symbolExcludes);
                  }
                  bindChildren(node, symbolKind, false);
              }
              function bindBlockScopedVariableDeclaration(node) {
                  bindBlockScopedDeclaration(node, 2, 107455);
              }
              function getDestructuringParameterName(node) {
                  return "__" + ts.indexOf(node.parent.parameters, node);
              }
              function bind(node) {
                  node.parent = parent;
                  switch (node.kind) {
                      case 129:
                          bindDeclaration(node, 262144, 530912, false);
                          break;
                      case 130:
                          bindParameter(node);
                          break;
                      case 199:
                      case 153:
                          if (ts.isBindingPattern(node.name)) {
                              bindChildren(node, 0, false);
                          }
                          else if (ts.isBlockOrCatchScoped(node)) {
                              bindBlockScopedVariableDeclaration(node);
                          }
                          else if (ts.isParameterDeclaration(node)) {
                              bindDeclaration(node, 1, 107455, false);
                          }
                          else {
                              bindDeclaration(node, 1, 107454, false);
                          }
                          break;
                      case 133:
                      case 132:
                          bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455, false);
                          break;
                      case 225:
                      case 226:
                          bindPropertyOrMethodOrAccessor(node, 4, 107455, false);
                          break;
                      case 227:
                          bindPropertyOrMethodOrAccessor(node, 8, 107455, false);
                          break;
                      case 139:
                      case 140:
                      case 141:
                          bindDeclaration(node, 131072, 0, false);
                          break;
                      case 135:
                      case 134:
                          bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263, true);
                          break;
                      case 201:
                          bindDeclaration(node, 16, 106927, true);
                          break;
                      case 136:
                          bindDeclaration(node, 16384, 0, true);
                          break;
                      case 137:
                          bindPropertyOrMethodOrAccessor(node, 32768, 41919, true);
                          break;
                      case 138:
                          bindPropertyOrMethodOrAccessor(node, 65536, 74687, true);
                          break;
                      case 143:
                      case 144:
                          bindFunctionOrConstructorType(node);
                          break;
                      case 146:
                          bindAnonymousDeclaration(node, 2048, "__type", false);
                          break;
                      case 155:
                          bindAnonymousDeclaration(node, 4096, "__object", false);
                          break;
                      case 163:
                      case 164:
                          bindAnonymousDeclaration(node, 16, "__function", true);
                          break;
                      case 175:
                          bindAnonymousDeclaration(node, 32, "__class", false);
                          break;
                      case 224:
                          bindCatchVariableDeclaration(node);
                          break;
                      case 202:
                          bindBlockScopedDeclaration(node, 32, 899583);
                          break;
                      case 203:
                          bindDeclaration(node, 64, 792992, false);
                          break;
                      case 204:
                          bindDeclaration(node, 524288, 793056, false);
                          break;
                      case 205:
                          if (ts.isConst(node)) {
                              bindDeclaration(node, 128, 899967, false);
                          }
                          else {
                              bindDeclaration(node, 256, 899327, false);
                          }
                          break;
                      case 206:
                          bindModuleDeclaration(node);
                          break;
                      case 209:
                      case 212:
                      case 214:
                      case 218:
                          bindDeclaration(node, 8388608, 8388608, false);
                          break;
                      case 211:
                          if (node.name) {
                              bindDeclaration(node, 8388608, 8388608, false);
                          }
                          else {
                              bindChildren(node, 0, false);
                          }
                          break;
                      case 216:
                          if (!node.exportClause) {
                              declareSymbol(container.symbol.exports, container.symbol, node, 1073741824, 0);
                          }
                          bindChildren(node, 0, false);
                          break;
                      case 215:
                          if (node.expression.kind === 65) {
                              declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608);
                          }
                          else {
                              declareSymbol(container.symbol.exports, container.symbol, node, 4, 107455 | 8388608);
                          }
                          bindChildren(node, 0, false);
                          break;
                      case 228:
                          setExportContextFlag(node);
                          if (ts.isExternalModule(node)) {
                              bindAnonymousDeclaration(node, 512, '"' + ts.removeFileExtension(node.fileName) + '"', true);
                              break;
                          }
                      case 180:
                          bindChildren(node, 0, !ts.isFunctionLike(node.parent));
                          break;
                      case 224:
                      case 187:
                      case 188:
                      case 189:
                      case 208:
                          bindChildren(node, 0, true);
                          break;
                      default:
                          var saveParent = parent;
                          parent = node;
                          ts.forEachChild(node, bind);
                          parent = saveParent;
                  }
              }
              function bindParameter(node) {
                  if (ts.isBindingPattern(node.name)) {
                      bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node), false);
                  }
                  else {
                      bindDeclaration(node, 1, 107455, false);
                  }
                  if (node.flags & 112 &&
                      node.parent.kind === 136 &&
                      (node.parent.parent.kind === 202 || node.parent.parent.kind === 175)) {
                      var classDeclaration = node.parent.parent;
                      declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455);
                  }
              }
              function bindPropertyOrMethodOrAccessor(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
                  if (ts.hasDynamicName(node)) {
                      bindAnonymousDeclaration(node, symbolKind, "__computed", isBlockScopeContainer);
                  }
                  else {
                      bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer);
                  }
              }
          }
      })(ts || (ts = {}));
      /// <reference path="binder.ts" />
      var ts;
      (function (ts) {
          function getDeclarationOfKind(symbol, kind) {
              var declarations = symbol.declarations;
              for (var _i = 0; _i < declarations.length; _i++) {
                  var declaration = declarations[_i];
                  if (declaration.kind === kind) {
                      return declaration;
                  }
              }
              return undefined;
          }
          ts.getDeclarationOfKind = getDeclarationOfKind;
          var stringWriters = [];
          function getSingleLineStringWriter() {
              if (stringWriters.length == 0) {
                  var str = "";
                  var writeText = function (text) { return str += text; };
                  return {
                      string: function () { return str; },
                      writeKeyword: writeText,
                      writeOperator: writeText,
                      writePunctuation: writeText,
                      writeSpace: writeText,
                      writeStringLiteral: writeText,
                      writeParameter: writeText,
                      writeSymbol: writeText,
                      writeLine: function () { return str += " "; },
                      increaseIndent: function () { },
                      decreaseIndent: function () { },
                      clear: function () { return str = ""; },
                      trackSymbol: function () { }
                  };
              }
              return stringWriters.pop();
          }
          ts.getSingleLineStringWriter = getSingleLineStringWriter;
          function releaseStringWriter(writer) {
              writer.clear();
              stringWriters.push(writer);
          }
          ts.releaseStringWriter = releaseStringWriter;
          function getFullWidth(node) {
              return node.end - node.pos;
          }
          ts.getFullWidth = getFullWidth;
          function containsParseError(node) {
              aggregateChildData(node);
              return (node.parserContextFlags & 64) !== 0;
          }
          ts.containsParseError = containsParseError;
          function aggregateChildData(node) {
              if (!(node.parserContextFlags & 128)) {
                  var thisNodeOrAnySubNodesHasError = ((node.parserContextFlags & 32) !== 0) ||
                      ts.forEachChild(node, containsParseError);
                  if (thisNodeOrAnySubNodesHasError) {
                      node.parserContextFlags |= 64;
                  }
                  node.parserContextFlags |= 128;
              }
          }
          function getSourceFileOfNode(node) {
              while (node && node.kind !== 228) {
                  node = node.parent;
              }
              return node;
          }
          ts.getSourceFileOfNode = getSourceFileOfNode;
          function getStartPositionOfLine(line, sourceFile) {
              ts.Debug.assert(line >= 0);
              return ts.getLineStarts(sourceFile)[line];
          }
          ts.getStartPositionOfLine = getStartPositionOfLine;
          function nodePosToString(node) {
              var file = getSourceFileOfNode(node);
              var loc = ts.getLineAndCharacterOfPosition(file, node.pos);
              return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")";
          }
          ts.nodePosToString = nodePosToString;
          function getStartPosOfNode(node) {
              return node.pos;
          }
          ts.getStartPosOfNode = getStartPosOfNode;
          function nodeIsMissing(node) {
              if (!node) {
                  return true;
              }
              return node.pos === node.end && node.kind !== 1;
          }
          ts.nodeIsMissing = nodeIsMissing;
          function nodeIsPresent(node) {
              return !nodeIsMissing(node);
          }
          ts.nodeIsPresent = nodeIsPresent;
          function getTokenPosOfNode(node, sourceFile) {
              if (nodeIsMissing(node)) {
                  return node.pos;
              }
              return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos);
          }
          ts.getTokenPosOfNode = getTokenPosOfNode;
          function getNonDecoratorTokenPosOfNode(node, sourceFile) {
              if (nodeIsMissing(node) || !node.decorators) {
                  return getTokenPosOfNode(node, sourceFile);
              }
              return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.decorators.end);
          }
          ts.getNonDecoratorTokenPosOfNode = getNonDecoratorTokenPosOfNode;
          function getSourceTextOfNodeFromSourceFile(sourceFile, node) {
              if (nodeIsMissing(node)) {
                  return "";
              }
              var text = sourceFile.text;
              return text.substring(ts.skipTrivia(text, node.pos), node.end);
          }
          ts.getSourceTextOfNodeFromSourceFile = getSourceTextOfNodeFromSourceFile;
          function getTextOfNodeFromSourceText(sourceText, node) {
              if (nodeIsMissing(node)) {
                  return "";
              }
              return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end);
          }
          ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText;
          function getTextOfNode(node) {
              return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node);
          }
          ts.getTextOfNode = getTextOfNode;
          function escapeIdentifier(identifier) {
              return identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier;
          }
          ts.escapeIdentifier = escapeIdentifier;
          function unescapeIdentifier(identifier) {
              return identifier.length >= 3 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 && identifier.charCodeAt(2) === 95 ? identifier.substr(1) : identifier;
          }
          ts.unescapeIdentifier = unescapeIdentifier;
          function makeIdentifierFromModuleName(moduleName) {
              return ts.getBaseFileName(moduleName).replace(/\W/g, "_");
          }
          ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName;
          function isBlockOrCatchScoped(declaration) {
              return (getCombinedNodeFlags(declaration) & 12288) !== 0 ||
                  isCatchClauseVariableDeclaration(declaration);
          }
          ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
          function getEnclosingBlockScopeContainer(node) {
              var current = node.parent;
              while (current) {
                  if (isFunctionLike(current)) {
                      return current;
                  }
                  switch (current.kind) {
                      case 228:
                      case 208:
                      case 224:
                      case 206:
                      case 187:
                      case 188:
                      case 189:
                          return current;
                      case 180:
                          if (!isFunctionLike(current.parent)) {
                              return current;
                          }
                  }
                  current = current.parent;
              }
          }
          ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
          function isCatchClauseVariableDeclaration(declaration) {
              return declaration &&
                  declaration.kind === 199 &&
                  declaration.parent &&
                  declaration.parent.kind === 224;
          }
          ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration;
          function declarationNameToString(name) {
              return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
          }
          ts.declarationNameToString = declarationNameToString;
          function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
              var sourceFile = getSourceFileOfNode(node);
              var span = getErrorSpanForNode(sourceFile, node);
              return ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2);
          }
          ts.createDiagnosticForNode = createDiagnosticForNode;
          function createDiagnosticForNodeFromMessageChain(node, messageChain) {
              var sourceFile = getSourceFileOfNode(node);
              var span = getErrorSpanForNode(sourceFile, node);
              return {
                  file: sourceFile,
                  start: span.start,
                  length: span.length,
                  code: messageChain.code,
                  category: messageChain.category,
                  messageText: messageChain.next ? messageChain : messageChain.messageText
              };
          }
          ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain;
          function getSpanOfTokenAtPosition(sourceFile, pos) {
              var scanner = ts.createScanner(sourceFile.languageVersion, true, sourceFile.text, undefined, pos);
              scanner.scan();
              var start = scanner.getTokenPos();
              return ts.createTextSpanFromBounds(start, scanner.getTextPos());
          }
          ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
          function getErrorSpanForNode(sourceFile, node) {
              var errorNode = node;
              switch (node.kind) {
                  case 228:
                      var pos_1 = ts.skipTrivia(sourceFile.text, 0, false);
                      if (pos_1 === sourceFile.text.length) {
                          return ts.createTextSpan(0, 0);
                      }
                      return getSpanOfTokenAtPosition(sourceFile, pos_1);
                  case 199:
                  case 153:
                  case 202:
                  case 175:
                  case 203:
                  case 206:
                  case 205:
                  case 227:
                  case 201:
                  case 163:
                      errorNode = node.name;
                      break;
              }
              if (errorNode === undefined) {
                  return getSpanOfTokenAtPosition(sourceFile, node.pos);
              }
              var pos = nodeIsMissing(errorNode)
                  ? errorNode.pos
                  : ts.skipTrivia(sourceFile.text, errorNode.pos);
              return ts.createTextSpanFromBounds(pos, errorNode.end);
          }
          ts.getErrorSpanForNode = getErrorSpanForNode;
          function isExternalModule(file) {
              return file.externalModuleIndicator !== undefined;
          }
          ts.isExternalModule = isExternalModule;
          function isDeclarationFile(file) {
              return (file.flags & 2048) !== 0;
          }
          ts.isDeclarationFile = isDeclarationFile;
          function isConstEnumDeclaration(node) {
              return node.kind === 205 && isConst(node);
          }
          ts.isConstEnumDeclaration = isConstEnumDeclaration;
          function walkUpBindingElementsAndPatterns(node) {
              while (node && (node.kind === 153 || isBindingPattern(node))) {
                  node = node.parent;
              }
              return node;
          }
          function getCombinedNodeFlags(node) {
              node = walkUpBindingElementsAndPatterns(node);
              var flags = node.flags;
              if (node.kind === 199) {
                  node = node.parent;
              }
              if (node && node.kind === 200) {
                  flags |= node.flags;
                  node = node.parent;
              }
              if (node && node.kind === 181) {
                  flags |= node.flags;
              }
              return flags;
          }
          ts.getCombinedNodeFlags = getCombinedNodeFlags;
          function isConst(node) {
              return !!(getCombinedNodeFlags(node) & 8192);
          }
          ts.isConst = isConst;
          function isLet(node) {
              return !!(getCombinedNodeFlags(node) & 4096);
          }
          ts.isLet = isLet;
          function isPrologueDirective(node) {
              return node.kind === 183 && node.expression.kind === 8;
          }
          ts.isPrologueDirective = isPrologueDirective;
          function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
              if (node.kind === 130 || node.kind === 129) {
                  return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos));
              }
              else {
                  return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos);
              }
          }
          ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
          function getJsDocComments(node, sourceFileOfNode) {
              return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), isJsDocComment);
              function isJsDocComment(comment) {
                  return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 &&
                      sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 &&
                      sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47;
              }
          }
          ts.getJsDocComments = getJsDocComments;
          ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
          function forEachReturnStatement(body, visitor) {
              return traverse(body);
              function traverse(node) {
                  switch (node.kind) {
                      case 192:
                          return visitor(node);
                      case 208:
                      case 180:
                      case 184:
                      case 185:
                      case 186:
                      case 187:
                      case 188:
                      case 189:
                      case 193:
                      case 194:
                      case 221:
                      case 222:
                      case 195:
                      case 197:
                      case 224:
                          return ts.forEachChild(node, traverse);
                  }
              }
          }
          ts.forEachReturnStatement = forEachReturnStatement;
          function isVariableLike(node) {
              if (node) {
                  switch (node.kind) {
                      case 153:
                      case 227:
                      case 130:
                      case 225:
                      case 133:
                      case 132:
                      case 226:
                      case 199:
                          return true;
                  }
              }
              return false;
          }
          ts.isVariableLike = isVariableLike;
          function isAccessor(node) {
              if (node) {
                  switch (node.kind) {
                      case 137:
                      case 138:
                          return true;
                  }
              }
              return false;
          }
          ts.isAccessor = isAccessor;
          function isFunctionLike(node) {
              if (node) {
                  switch (node.kind) {
                      case 136:
                      case 163:
                      case 201:
                      case 164:
                      case 135:
                      case 134:
                      case 137:
                      case 138:
                      case 139:
                      case 140:
                      case 141:
                      case 143:
                      case 144:
                          return true;
                  }
              }
              return false;
          }
          ts.isFunctionLike = isFunctionLike;
          function isFunctionBlock(node) {
              return node && node.kind === 180 && isFunctionLike(node.parent);
          }
          ts.isFunctionBlock = isFunctionBlock;
          function isObjectLiteralMethod(node) {
              return node && node.kind === 135 && node.parent.kind === 155;
          }
          ts.isObjectLiteralMethod = isObjectLiteralMethod;
          function getContainingFunction(node) {
              while (true) {
                  node = node.parent;
                  if (!node || isFunctionLike(node)) {
                      return node;
                  }
              }
          }
          ts.getContainingFunction = getContainingFunction;
          function getThisContainer(node, includeArrowFunctions) {
              while (true) {
                  node = node.parent;
                  if (!node) {
                      return undefined;
                  }
                  switch (node.kind) {
                      case 128:
                          if (node.parent.parent.kind === 202) {
                              return node;
                          }
                          node = node.parent;
                          break;
                      case 131:
                          if (node.parent.kind === 130 && isClassElement(node.parent.parent)) {
                              node = node.parent.parent;
                          }
                          else if (isClassElement(node.parent)) {
                              node = node.parent;
                          }
                          break;
                      case 164:
                          if (!includeArrowFunctions) {
                              continue;
                          }
                      case 201:
                      case 163:
                      case 206:
                      case 133:
                      case 132:
                      case 135:
                      case 134:
                      case 136:
                      case 137:
                      case 138:
                      case 205:
                      case 228:
                          return node;
                  }
              }
          }
          ts.getThisContainer = getThisContainer;
          function getSuperContainer(node, includeFunctions) {
              while (true) {
                  node = node.parent;
                  if (!node)
                      return node;
                  switch (node.kind) {
                      case 128:
                          if (node.parent.parent.kind === 202) {
                              return node;
                          }
                          node = node.parent;
                          break;
                      case 131:
                          if (node.parent.kind === 130 && isClassElement(node.parent.parent)) {
                              node = node.parent.parent;
                          }
                          else if (isClassElement(node.parent)) {
                              node = node.parent;
                          }
                          break;
                      case 201:
                      case 163:
                      case 164:
                          if (!includeFunctions) {
                              continue;
                          }
                      case 133:
                      case 132:
                      case 135:
                      case 134:
                      case 136:
                      case 137:
                      case 138:
                          return node;
                  }
              }
          }
          ts.getSuperContainer = getSuperContainer;
          function getInvokedExpression(node) {
              if (node.kind === 160) {
                  return node.tag;
              }
              return node.expression;
          }
          ts.getInvokedExpression = getInvokedExpression;
          function nodeCanBeDecorated(node) {
              switch (node.kind) {
                  case 202:
                      return true;
                  case 133:
                      return node.parent.kind === 202;
                  case 130:
                      return node.parent.body && node.parent.parent.kind === 202;
                  case 137:
                  case 138:
                  case 135:
                      return node.body && node.parent.kind === 202;
              }
              return false;
          }
          ts.nodeCanBeDecorated = nodeCanBeDecorated;
          function nodeIsDecorated(node) {
              switch (node.kind) {
                  case 202:
                      if (node.decorators) {
                          return true;
                      }
                      return false;
                  case 133:
                  case 130:
                      if (node.decorators) {
                          return true;
                      }
                      return false;
                  case 137:
                      if (node.body && node.decorators) {
                          return true;
                      }
                      return false;
                  case 135:
                  case 138:
                      if (node.body && node.decorators) {
                          return true;
                      }
                      return false;
              }
              return false;
          }
          ts.nodeIsDecorated = nodeIsDecorated;
          function childIsDecorated(node) {
              switch (node.kind) {
                  case 202:
                      return ts.forEach(node.members, nodeOrChildIsDecorated);
                  case 135:
                  case 138:
                      return ts.forEach(node.parameters, nodeIsDecorated);
              }
              return false;
          }
          ts.childIsDecorated = childIsDecorated;
          function nodeOrChildIsDecorated(node) {
              return nodeIsDecorated(node) || childIsDecorated(node);
          }
          ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
          function isExpression(node) {
              switch (node.kind) {
                  case 93:
                  case 91:
                  case 89:
                  case 95:
                  case 80:
                  case 9:
                  case 154:
                  case 155:
                  case 156:
                  case 157:
                  case 158:
                  case 159:
                  case 160:
                  case 161:
                  case 162:
                  case 163:
                  case 175:
                  case 164:
                  case 167:
                  case 165:
                  case 166:
                  case 168:
                  case 169:
                  case 170:
                  case 171:
                  case 174:
                  case 172:
                  case 10:
                  case 176:
                      return true;
                  case 127:
                      while (node.parent.kind === 127) {
                          node = node.parent;
                      }
                      return node.parent.kind === 145;
                  case 65:
                      if (node.parent.kind === 145) {
                          return true;
                      }
                  case 7:
                  case 8:
                      var parent_1 = node.parent;
                      switch (parent_1.kind) {
                          case 199:
                          case 130:
                          case 133:
                          case 132:
                          case 227:
                          case 225:
                          case 153:
                              return parent_1.initializer === node;
                          case 183:
                          case 184:
                          case 185:
                          case 186:
                          case 192:
                          case 193:
                          case 194:
                          case 221:
                          case 196:
                          case 194:
                              return parent_1.expression === node;
                          case 187:
                              var forStatement = parent_1;
                              return (forStatement.initializer === node && forStatement.initializer.kind !== 200) ||
                                  forStatement.condition === node ||
                                  forStatement.incrementor === node;
                          case 188:
                          case 189:
                              var forInStatement = parent_1;
                              return (forInStatement.initializer === node && forInStatement.initializer.kind !== 200) ||
                                  forInStatement.expression === node;
                          case 161:
                              return node === parent_1.expression;
                          case 178:
                              return node === parent_1.expression;
                          case 128:
                              return node === parent_1.expression;
                          case 131:
                              return true;
                          default:
                              if (isExpression(parent_1)) {
                                  return true;
                              }
                      }
              }
              return false;
          }
          ts.isExpression = isExpression;
          function isInstantiatedModule(node, preserveConstEnums) {
              var moduleState = ts.getModuleInstanceState(node);
              return moduleState === 1 ||
                  (preserveConstEnums && moduleState === 2);
          }
          ts.isInstantiatedModule = isInstantiatedModule;
          function isExternalModuleImportEqualsDeclaration(node) {
              return node.kind === 209 && node.moduleReference.kind === 220;
          }
          ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
          function getExternalModuleImportEqualsDeclarationExpression(node) {
              ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node));
              return node.moduleReference.expression;
          }
          ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression;
          function isInternalModuleImportEqualsDeclaration(node) {
              return node.kind === 209 && node.moduleReference.kind !== 220;
          }
          ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
          function getExternalModuleName(node) {
              if (node.kind === 210) {
                  return node.moduleSpecifier;
              }
              if (node.kind === 209) {
                  var reference = node.moduleReference;
                  if (reference.kind === 220) {
                      return reference.expression;
                  }
              }
              if (node.kind === 216) {
                  return node.moduleSpecifier;
              }
          }
          ts.getExternalModuleName = getExternalModuleName;
          function hasDotDotDotToken(node) {
              return node && node.kind === 130 && node.dotDotDotToken !== undefined;
          }
          ts.hasDotDotDotToken = hasDotDotDotToken;
          function hasQuestionToken(node) {
              if (node) {
                  switch (node.kind) {
                      case 130:
                          return node.questionToken !== undefined;
                      case 135:
                      case 134:
                          return node.questionToken !== undefined;
                      case 226:
                      case 225:
                      case 133:
                      case 132:
                          return node.questionToken !== undefined;
                  }
              }
              return false;
          }
          ts.hasQuestionToken = hasQuestionToken;
          function hasRestParameters(s) {
              return s.parameters.length > 0 && ts.lastOrUndefined(s.parameters).dotDotDotToken !== undefined;
          }
          ts.hasRestParameters = hasRestParameters;
          function isLiteralKind(kind) {
              return 7 <= kind && kind <= 10;
          }
          ts.isLiteralKind = isLiteralKind;
          function isTextualLiteralKind(kind) {
              return kind === 8 || kind === 10;
          }
          ts.isTextualLiteralKind = isTextualLiteralKind;
          function isTemplateLiteralKind(kind) {
              return 10 <= kind && kind <= 13;
          }
          ts.isTemplateLiteralKind = isTemplateLiteralKind;
          function isBindingPattern(node) {
              return !!node && (node.kind === 152 || node.kind === 151);
          }
          ts.isBindingPattern = isBindingPattern;
          function isInAmbientContext(node) {
              while (node) {
                  if (node.flags & (2 | 2048)) {
                      return true;
                  }
                  node = node.parent;
              }
              return false;
          }
          ts.isInAmbientContext = isInAmbientContext;
          function isDeclaration(node) {
              switch (node.kind) {
                  case 164:
                  case 153:
                  case 202:
                  case 136:
                  case 205:
                  case 227:
                  case 218:
                  case 201:
                  case 163:
                  case 137:
                  case 211:
                  case 209:
                  case 214:
                  case 203:
                  case 135:
                  case 134:
                  case 206:
                  case 212:
                  case 130:
                  case 225:
                  case 133:
                  case 132:
                  case 138:
                  case 226:
                  case 204:
                  case 129:
                  case 199:
                      return true;
              }
              return false;
          }
          ts.isDeclaration = isDeclaration;
          function isStatement(n) {
              switch (n.kind) {
                  case 191:
                  case 190:
                  case 198:
                  case 185:
                  case 183:
                  case 182:
                  case 188:
                  case 189:
                  case 187:
                  case 184:
                  case 195:
                  case 192:
                  case 194:
                  case 94:
                  case 197:
                  case 181:
                  case 186:
                  case 193:
                  case 215:
                      return true;
                  default:
                      return false;
              }
          }
          ts.isStatement = isStatement;
          function isClassElement(n) {
              switch (n.kind) {
                  case 136:
                  case 133:
                  case 135:
                  case 137:
                  case 138:
                  case 134:
                  case 141:
                      return true;
                  default:
                      return false;
              }
          }
          ts.isClassElement = isClassElement;
          function isDeclarationName(name) {
              if (name.kind !== 65 && name.kind !== 8 && name.kind !== 7) {
                  return false;
              }
              var parent = name.parent;
              if (parent.kind === 214 || parent.kind === 218) {
                  if (parent.propertyName) {
                      return true;
                  }
              }
              if (isDeclaration(parent)) {
                  return parent.name === name;
              }
              return false;
          }
          ts.isDeclarationName = isDeclarationName;
          function isAliasSymbolDeclaration(node) {
              return node.kind === 209 ||
                  node.kind === 211 && !!node.name ||
                  node.kind === 212 ||
                  node.kind === 214 ||
                  node.kind === 218 ||
                  node.kind === 215 && node.expression.kind === 65;
          }
          ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
          function getClassExtendsHeritageClauseElement(node) {
              var heritageClause = getHeritageClause(node.heritageClauses, 79);
              return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
          }
          ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement;
          function getClassImplementsHeritageClauseElements(node) {
              var heritageClause = getHeritageClause(node.heritageClauses, 102);
              return heritageClause ? heritageClause.types : undefined;
          }
          ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements;
          function getInterfaceBaseTypeNodes(node) {
              var heritageClause = getHeritageClause(node.heritageClauses, 79);
              return heritageClause ? heritageClause.types : undefined;
          }
          ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
          function getHeritageClause(clauses, kind) {
              if (clauses) {
                  for (var _i = 0; _i < clauses.length; _i++) {
                      var clause = clauses[_i];
                      if (clause.token === kind) {
                          return clause;
                      }
                  }
              }
              return undefined;
          }
          ts.getHeritageClause = getHeritageClause;
          function tryResolveScriptReference(host, sourceFile, reference) {
              if (!host.getCompilerOptions().noResolve) {
                  var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName);
                  referenceFileName = ts.getNormalizedAbsolutePath(referenceFileName, host.getCurrentDirectory());
                  return host.getSourceFile(referenceFileName);
              }
          }
          ts.tryResolveScriptReference = tryResolveScriptReference;
          function getAncestor(node, kind) {
              while (node) {
                  if (node.kind === kind) {
                      return node;
                  }
                  node = node.parent;
              }
              return undefined;
          }
          ts.getAncestor = getAncestor;
          function getFileReferenceFromReferencePath(comment, commentRange) {
              var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim;
              var isNoDefaultLibRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/gim;
              if (simpleReferenceRegEx.exec(comment)) {
                  if (isNoDefaultLibRegEx.exec(comment)) {
                      return {
                          isNoDefaultLib: true
                      };
                  }
                  else {
                      var matchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment);
                      if (matchResult) {
                          var start = commentRange.pos;
                          var end = commentRange.end;
                          return {
                              fileReference: {
                                  pos: start,
                                  end: end,
                                  fileName: matchResult[3]
                              },
                              isNoDefaultLib: false
                          };
                      }
                      else {
                          return {
                              diagnosticMessage: ts.Diagnostics.Invalid_reference_directive_syntax,
                              isNoDefaultLib: false
                          };
                      }
                  }
              }
              return undefined;
          }
          ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath;
          function isKeyword(token) {
              return 66 <= token && token <= 126;
          }
          ts.isKeyword = isKeyword;
          function isTrivia(token) {
              return 2 <= token && token <= 6;
          }
          ts.isTrivia = isTrivia;
          function hasDynamicName(declaration) {
              return declaration.name &&
                  declaration.name.kind === 128 &&
                  !isWellKnownSymbolSyntactically(declaration.name.expression);
          }
          ts.hasDynamicName = hasDynamicName;
          function isWellKnownSymbolSyntactically(node) {
              return node.kind === 156 && isESSymbolIdentifier(node.expression);
          }
          ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically;
          function getPropertyNameForPropertyNameNode(name) {
              if (name.kind === 65 || name.kind === 8 || name.kind === 7) {
                  return name.text;
              }
              if (name.kind === 128) {
                  var nameExpression = name.expression;
                  if (isWellKnownSymbolSyntactically(nameExpression)) {
                      var rightHandSideName = nameExpression.name.text;
                      return getPropertyNameForKnownSymbolName(rightHandSideName);
                  }
              }
              return undefined;
          }
          ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
          function getPropertyNameForKnownSymbolName(symbolName) {
              return "__@" + symbolName;
          }
          ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName;
          function isESSymbolIdentifier(node) {
              return node.kind === 65 && node.text === "Symbol";
          }
          ts.isESSymbolIdentifier = isESSymbolIdentifier;
          function isModifier(token) {
              switch (token) {
                  case 108:
                  case 106:
                  case 107:
                  case 109:
                  case 78:
                  case 115:
                  case 70:
                  case 73:
                      return true;
              }
              return false;
          }
          ts.isModifier = isModifier;
          function isParameterDeclaration(node) {
              var root = getRootDeclaration(node);
              return root.kind === 130;
          }
          ts.isParameterDeclaration = isParameterDeclaration;
          function getRootDeclaration(node) {
              while (node.kind === 153) {
                  node = node.parent.parent;
              }
              return node;
          }
          ts.getRootDeclaration = getRootDeclaration;
          function nodeStartsNewLexicalEnvironment(n) {
              return isFunctionLike(n) || n.kind === 206 || n.kind === 228;
          }
          ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
          function nodeIsSynthesized(node) {
              return node.pos === -1;
          }
          ts.nodeIsSynthesized = nodeIsSynthesized;
          function createSynthesizedNode(kind, startsOnNewLine) {
              var node = ts.createNode(kind);
              node.pos = -1;
              node.end = -1;
              node.startsOnNewLine = startsOnNewLine;
              return node;
          }
          ts.createSynthesizedNode = createSynthesizedNode;
          function createSynthesizedNodeArray() {
              var array = [];
              array.pos = -1;
              array.end = -1;
              return array;
          }
          ts.createSynthesizedNodeArray = createSynthesizedNodeArray;
          function createDiagnosticCollection() {
              var nonFileDiagnostics = [];
              var fileDiagnostics = {};
              var diagnosticsModified = false;
              var modificationCount = 0;
              return {
                  add: add,
                  getGlobalDiagnostics: getGlobalDiagnostics,
                  getDiagnostics: getDiagnostics,
                  getModificationCount: getModificationCount
              };
              function getModificationCount() {
                  return modificationCount;
              }
              function add(diagnostic) {
                  var diagnostics;
                  if (diagnostic.file) {
                      diagnostics = fileDiagnostics[diagnostic.file.fileName];
                      if (!diagnostics) {
                          diagnostics = [];
                          fileDiagnostics[diagnostic.file.fileName] = diagnostics;
                      }
                  }
                  else {
                      diagnostics = nonFileDiagnostics;
                  }
                  diagnostics.push(diagnostic);
                  diagnosticsModified = true;
                  modificationCount++;
              }
              function getGlobalDiagnostics() {
                  sortAndDeduplicate();
                  return nonFileDiagnostics;
              }
              function getDiagnostics(fileName) {
                  sortAndDeduplicate();
                  if (fileName) {
                      return fileDiagnostics[fileName] || [];
                  }
                  var allDiagnostics = [];
                  function pushDiagnostic(d) {
                      allDiagnostics.push(d);
                  }
                  ts.forEach(nonFileDiagnostics, pushDiagnostic);
                  for (var key in fileDiagnostics) {
                      if (ts.hasProperty(fileDiagnostics, key)) {
                          ts.forEach(fileDiagnostics[key], pushDiagnostic);
                      }
                  }
                  return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
              }
              function sortAndDeduplicate() {
                  if (!diagnosticsModified) {
                      return;
                  }
                  diagnosticsModified = false;
                  nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics);
                  for (var key in fileDiagnostics) {
                      if (ts.hasProperty(fileDiagnostics, key)) {
                          fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]);
                      }
                  }
              }
          }
          ts.createDiagnosticCollection = createDiagnosticCollection;
          var escapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
          var escapedCharsMap = {
              "\0": "\\0",
              "\t": "\\t",
              "\v": "\\v",
              "\f": "\\f",
              "\b": "\\b",
              "\r": "\\r",
              "\n": "\\n",
              "\\": "\\\\",
              "\"": "\\\"",
              "\u2028": "\\u2028",
              "\u2029": "\\u2029",
              "\u0085": "\\u0085"
          };
          function escapeString(s) {
              s = escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, getReplacement) : s;
              return s;
              function getReplacement(c) {
                  return escapedCharsMap[c] || get16BitUnicodeEscapeSequence(c.charCodeAt(0));
              }
          }
          ts.escapeString = escapeString;
          function get16BitUnicodeEscapeSequence(charCode) {
              var hexCharCode = charCode.toString(16).toUpperCase();
              var paddedHexCode = ("0000" + hexCharCode).slice(-4);
              return "\\u" + paddedHexCode;
          }
          var nonAsciiCharacters = /[^\u0000-\u007F]/g;
          function escapeNonAsciiCharacters(s) {
              return nonAsciiCharacters.test(s) ?
                  s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) :
                  s;
          }
          ts.escapeNonAsciiCharacters = escapeNonAsciiCharacters;
          var indentStrings = ["", "    "];
          function getIndentString(level) {
              if (indentStrings[level] === undefined) {
                  indentStrings[level] = getIndentString(level - 1) + indentStrings[1];
              }
              return indentStrings[level];
          }
          ts.getIndentString = getIndentString;
          function getIndentSize() {
              return indentStrings[1].length;
          }
          ts.getIndentSize = getIndentSize;
          function createTextWriter(newLine) {
              var output = "";
              var indent = 0;
              var lineStart = true;
              var lineCount = 0;
              var linePos = 0;
              function write(s) {
                  if (s && s.length) {
                      if (lineStart) {
                          output += getIndentString(indent);
                          lineStart = false;
                      }
                      output += s;
                  }
              }
              function rawWrite(s) {
                  if (s !== undefined) {
                      if (lineStart) {
                          lineStart = false;
                      }
                      output += s;
                  }
              }
              function writeLiteral(s) {
                  if (s && s.length) {
                      write(s);
                      var lineStartsOfS = ts.computeLineStarts(s);
                      if (lineStartsOfS.length > 1) {
                          lineCount = lineCount + lineStartsOfS.length - 1;
                          linePos = output.length - s.length + ts.lastOrUndefined(lineStartsOfS);
                      }
                  }
              }
              function writeLine() {
                  if (!lineStart) {
                      output += newLine;
                      lineCount++;
                      linePos = output.length;
                      lineStart = true;
                  }
              }
              function writeTextOfNode(sourceFile, node) {
                  write(getSourceTextOfNodeFromSourceFile(sourceFile, node));
              }
              return {
                  write: write,
                  rawWrite: rawWrite,
                  writeTextOfNode: writeTextOfNode,
                  writeLiteral: writeLiteral,
                  writeLine: writeLine,
                  increaseIndent: function () { return indent++; },
                  decreaseIndent: function () { return indent--; },
                  getIndent: function () { return indent; },
                  getTextPos: function () { return output.length; },
                  getLine: function () { return lineCount + 1; },
                  getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; },
                  getText: function () { return output; }
              };
          }
          ts.createTextWriter = createTextWriter;
          function getOwnEmitOutputFilePath(sourceFile, host, extension) {
              var compilerOptions = host.getCompilerOptions();
              var emitOutputFilePathWithoutExtension;
              if (compilerOptions.outDir) {
                  emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir));
              }
              else {
                  emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName);
              }
              return emitOutputFilePathWithoutExtension + extension;
          }
          ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath;
          function getSourceFilePathInNewDir(sourceFile, host, newDirPath) {
              var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory());
              sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), "");
              return ts.combinePaths(newDirPath, sourceFilePath);
          }
          ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir;
          function writeFile(host, diagnostics, fileName, data, writeByteOrderMark) {
              host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) {
                  diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
              });
          }
          ts.writeFile = writeFile;
          function getLineOfLocalPosition(currentSourceFile, pos) {
              return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line;
          }
          ts.getLineOfLocalPosition = getLineOfLocalPosition;
          function getFirstConstructorWithBody(node) {
              return ts.forEach(node.members, function (member) {
                  if (member.kind === 136 && nodeIsPresent(member.body)) {
                      return member;
                  }
              });
          }
          ts.getFirstConstructorWithBody = getFirstConstructorWithBody;
          function shouldEmitToOwnFile(sourceFile, compilerOptions) {
              if (!isDeclarationFile(sourceFile)) {
                  if ((isExternalModule(sourceFile) || !compilerOptions.out)) {
                      return compilerOptions.separateCompilation || !ts.fileExtensionIs(sourceFile.fileName, ".js");
                  }
                  return false;
              }
              return false;
          }
          ts.shouldEmitToOwnFile = shouldEmitToOwnFile;
          function getAllAccessorDeclarations(declarations, accessor) {
              var firstAccessor;
              var secondAccessor;
              var getAccessor;
              var setAccessor;
              if (hasDynamicName(accessor)) {
                  firstAccessor = accessor;
                  if (accessor.kind === 137) {
                      getAccessor = accessor;
                  }
                  else if (accessor.kind === 138) {
                      setAccessor = accessor;
                  }
                  else {
                      ts.Debug.fail("Accessor has wrong kind");
                  }
              }
              else {
                  ts.forEach(declarations, function (member) {
                      if ((member.kind === 137 || member.kind === 138)
                          && (member.flags & 128) === (accessor.flags & 128)) {
                          var memberName = getPropertyNameForPropertyNameNode(member.name);
                          var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                          if (memberName === accessorName) {
                              if (!firstAccessor) {
                                  firstAccessor = member;
                              }
                              else if (!secondAccessor) {
                                  secondAccessor = member;
                              }
                              if (member.kind === 137 && !getAccessor) {
                                  getAccessor = member;
                              }
                              if (member.kind === 138 && !setAccessor) {
                                  setAccessor = member;
                              }
                          }
                      }
                  });
              }
              return {
                  firstAccessor: firstAccessor,
                  secondAccessor: secondAccessor,
                  getAccessor: getAccessor,
                  setAccessor: setAccessor
              };
          }
          ts.getAllAccessorDeclarations = getAllAccessorDeclarations;
          function emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments) {
              if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos &&
                  getLineOfLocalPosition(currentSourceFile, node.pos) !== getLineOfLocalPosition(currentSourceFile, leadingComments[0].pos)) {
                  writer.writeLine();
              }
          }
          ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments;
          function emitComments(currentSourceFile, writer, comments, trailingSeparator, newLine, writeComment) {
              var emitLeadingSpace = !trailingSeparator;
              ts.forEach(comments, function (comment) {
                  if (emitLeadingSpace) {
                      writer.write(" ");
                      emitLeadingSpace = false;
                  }
                  writeComment(currentSourceFile, writer, comment, newLine);
                  if (comment.hasTrailingNewLine) {
                      writer.writeLine();
                  }
                  else if (trailingSeparator) {
                      writer.write(" ");
                  }
                  else {
                      emitLeadingSpace = true;
                  }
              });
          }
          ts.emitComments = emitComments;
          function writeCommentRange(currentSourceFile, writer, comment, newLine) {
              if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) {
                  var firstCommentLineAndCharacter = ts.getLineAndCharacterOfPosition(currentSourceFile, comment.pos);
                  var lineCount = ts.getLineStarts(currentSourceFile).length;
                  var firstCommentLineIndent;
                  for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) {
                      var nextLineStart = (currentLine + 1) === lineCount
                          ? currentSourceFile.text.length + 1
                          : getStartPositionOfLine(currentLine + 1, currentSourceFile);
                      if (pos !== comment.pos) {
                          if (firstCommentLineIndent === undefined) {
                              firstCommentLineIndent = calculateIndent(getStartPositionOfLine(firstCommentLineAndCharacter.line, currentSourceFile), comment.pos);
                          }
                          var currentWriterIndentSpacing = writer.getIndent() * getIndentSize();
                          var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart);
                          if (spacesToEmit > 0) {
                              var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize();
                              var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize());
                              writer.rawWrite(indentSizeSpaceString);
                              while (numberOfSingleSpacesToEmit) {
                                  writer.rawWrite(" ");
                                  numberOfSingleSpacesToEmit--;
                              }
                          }
                          else {
                              writer.rawWrite("");
                          }
                      }
                      writeTrimmedCurrentLine(pos, nextLineStart);
                      pos = nextLineStart;
                  }
              }
              else {
                  writer.write(currentSourceFile.text.substring(comment.pos, comment.end));
              }
              function writeTrimmedCurrentLine(pos, nextLineStart) {
                  var end = Math.min(comment.end, nextLineStart - 1);
                  var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, '');
                  if (currentLineText) {
                      writer.write(currentLineText);
                      if (end !== comment.end) {
                          writer.writeLine();
                      }
                  }
                  else {
                      writer.writeLiteral(newLine);
                  }
              }
              function calculateIndent(pos, end) {
                  var currentLineIndent = 0;
                  for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) {
                      if (currentSourceFile.text.charCodeAt(pos) === 9) {
                          currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize());
                      }
                      else {
                          currentLineIndent++;
                      }
                  }
                  return currentLineIndent;
              }
          }
          ts.writeCommentRange = writeCommentRange;
          function modifierToFlag(token) {
              switch (token) {
                  case 109: return 128;
                  case 108: return 16;
                  case 107: return 64;
                  case 106: return 32;
                  case 78: return 1;
                  case 115: return 2;
                  case 70: return 8192;
                  case 73: return 256;
              }
              return 0;
          }
          ts.modifierToFlag = modifierToFlag;
          function isLeftHandSideExpression(expr) {
              if (expr) {
                  switch (expr.kind) {
                      case 156:
                      case 157:
                      case 159:
                      case 158:
                      case 160:
                      case 154:
                      case 162:
                      case 155:
                      case 175:
                      case 163:
                      case 65:
                      case 9:
                      case 7:
                      case 8:
                      case 10:
                      case 172:
                      case 80:
                      case 89:
                      case 93:
                      case 95:
                      case 91:
                          return true;
                  }
              }
              return false;
          }
          ts.isLeftHandSideExpression = isLeftHandSideExpression;
          function isAssignmentOperator(token) {
              return token >= 53 && token <= 64;
          }
          ts.isAssignmentOperator = isAssignmentOperator;
          function isSupportedExpressionWithTypeArguments(node) {
              return isSupportedExpressionWithTypeArgumentsRest(node.expression);
          }
          ts.isSupportedExpressionWithTypeArguments = isSupportedExpressionWithTypeArguments;
          function isSupportedExpressionWithTypeArgumentsRest(node) {
              if (node.kind === 65) {
                  return true;
              }
              else if (node.kind === 156) {
                  return isSupportedExpressionWithTypeArgumentsRest(node.expression);
              }
              else {
                  return false;
              }
          }
          function isRightSideOfQualifiedNameOrPropertyAccess(node) {
              return (node.parent.kind === 127 && node.parent.right === node) ||
                  (node.parent.kind === 156 && node.parent.name === node);
          }
          ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
          function getLocalSymbolForExportDefault(symbol) {
              return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & 256) ? symbol.valueDeclaration.localSymbol : undefined;
          }
          ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault;
          function getExpandedCharCodes(input) {
              var output = [];
              var length = input.length;
              var leadSurrogate = undefined;
              for (var i = 0; i < length; i++) {
                  var charCode = input.charCodeAt(i);
                  if (charCode < 0x80) {
                      output.push(charCode);
                  }
                  else if (charCode < 0x800) {
                      output.push((charCode >> 6) | 192);
                      output.push((charCode & 63) | 128);
                  }
                  else if (charCode < 0x10000) {
                      output.push((charCode >> 12) | 224);
                      output.push(((charCode >> 6) & 63) | 128);
                      output.push((charCode & 63) | 128);
                  }
                  else if (charCode < 0x20000) {
                      output.push((charCode >> 18) | 240);
                      output.push(((charCode >> 12) & 63) | 128);
                      output.push(((charCode >> 6) & 63) | 128);
                      output.push((charCode & 63) | 128);
                  }
                  else {
                      ts.Debug.assert(false, "Unexpected code point");
                  }
              }
              return output;
          }
          var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
          function convertToBase64(input) {
              var result = "";
              var charCodes = getExpandedCharCodes(input);
              var i = 0;
              var length = charCodes.length;
              var byte1, byte2, byte3, byte4;
              while (i < length) {
                  byte1 = charCodes[i] >> 2;
                  byte2 = (charCodes[i] & 3) << 4 | charCodes[i + 1] >> 4;
                  byte3 = (charCodes[i + 1] & 15) << 2 | charCodes[i + 2] >> 6;
                  byte4 = charCodes[i + 2] & 63;
                  if (i + 1 >= length) {
                      byte3 = byte4 = 64;
                  }
                  else if (i + 2 >= length) {
                      byte4 = 64;
                  }
                  result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4);
                  i += 3;
              }
              return result;
          }
          ts.convertToBase64 = convertToBase64;
      })(ts || (ts = {}));
      var ts;
      (function (ts) {
          function getDefaultLibFileName(options) {
              return options.target === 2 ? "lib.es6.d.ts" : "lib.d.ts";
          }
          ts.getDefaultLibFileName = getDefaultLibFileName;
          function textSpanEnd(span) {
              return span.start + span.length;
          }
          ts.textSpanEnd = textSpanEnd;
          function textSpanIsEmpty(span) {
              return span.length === 0;
          }
          ts.textSpanIsEmpty = textSpanIsEmpty;
          function textSpanContainsPosition(span, position) {
              return position >= span.start && position < textSpanEnd(span);
          }
          ts.textSpanContainsPosition = textSpanContainsPosition;
          function textSpanContainsTextSpan(span, other) {
              return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span);
          }
          ts.textSpanContainsTextSpan = textSpanContainsTextSpan;
          function textSpanOverlapsWith(span, other) {
              var overlapStart = Math.max(span.start, other.start);
              var overlapEnd = Math.min(textSpanEnd(span), textSpanEnd(other));
              return overlapStart < overlapEnd;
          }
          ts.textSpanOverlapsWith = textSpanOverlapsWith;
          function textSpanOverlap(span1, span2) {
              var overlapStart = Math.max(span1.start, span2.start);
              var overlapEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2));
              if (overlapStart < overlapEnd) {
                  return createTextSpanFromBounds(overlapStart, overlapEnd);
              }
              return undefined;
          }
          ts.textSpanOverlap = textSpanOverlap;
          function textSpanIntersectsWithTextSpan(span, other) {
              return other.start <= textSpanEnd(span) && textSpanEnd(other) >= span.start;
          }
          ts.textSpanIntersectsWithTextSpan = textSpanIntersectsWithTextSpan;
          function textSpanIntersectsWith(span, start, length) {
              var end = start + length;
              return start <= textSpanEnd(span) && end >= span.start;
          }
          ts.textSpanIntersectsWith = textSpanIntersectsWith;
          function textSpanIntersectsWithPosition(span, position) {
              return position <= textSpanEnd(span) && position >= span.start;
          }
          ts.textSpanIntersectsWithPosition = textSpanIntersectsWithPosition;
          function textSpanIntersection(span1, span2) {
              var intersectStart = Math.max(span1.start, span2.start);
              var intersectEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2));
              if (intersectStart <= intersectEnd) {
                  return createTextSpanFromBounds(intersectStart, intersectEnd);
              }
              return undefined;
          }
          ts.textSpanIntersection = textSpanIntersection;
          function createTextSpan(start, length) {
              if (start < 0) {
                  throw new Error("start < 0");
              }
              if (length < 0) {
                  throw new Error("length < 0");
              }
              return { start: start, length: length };
          }
          ts.createTextSpan = createTextSpan;
          function createTextSpanFromBounds(start, end) {
              return createTextSpan(start, end - start);
          }
          ts.createTextSpanFromBounds = createTextSpanFromBounds;
          function textChangeRangeNewSpan(range) {
              return createTextSpan(range.span.start, range.newLength);
          }
          ts.textChangeRangeNewSpan = textChangeRangeNewSpan;
          function textChangeRangeIsUnchanged(range) {
              return textSpanIsEmpty(range.span) && range.newLength === 0;
          }
          ts.textChangeRangeIsUnchanged = textChangeRangeIsUnchanged;
          function createTextChangeRange(span, newLength) {
              if (newLength < 0) {
                  throw new Error("newLength < 0");
              }
              return { span: span, newLength: newLength };
          }
          ts.createTextChangeRange = createTextChangeRange;
          ts.unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0);
          function collapseTextChangeRangesAcrossMultipleVersions(changes) {
              if (changes.length === 0) {
                  return ts.unchangedTextChangeRange;
              }
              if (changes.length === 1) {
                  return changes[0];
              }
              var change0 = changes[0];
              var oldStartN = change0.span.start;
              var oldEndN = textSpanEnd(change0.span);
              var newEndN = oldStartN + change0.newLength;
              for (var i = 1; i < changes.length; i++) {
                  var nextChange = changes[i];
                  var oldStart1 = oldStartN;
                  var oldEnd1 = oldEndN;
                  var newEnd1 = newEndN;
                  var oldStart2 = nextChange.span.start;
                  var oldEnd2 = textSpanEnd(nextChange.span);
                  var newEnd2 = oldStart2 + nextChange.newLength;
                  oldStartN = Math.min(oldStart1, oldStart2);
                  oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1));
                  newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2));
              }
              return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN);
          }
          ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
      })(ts || (ts = {}));
      /// <reference path="scanner.ts"/>
      /// <reference path="utilities.ts"/>
      var ts;
      (function (ts) {
          var nodeConstructors = new Array(230);
          ts.parseTime = 0;
          function getNodeConstructor(kind) {
              return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind));
          }
          ts.getNodeConstructor = getNodeConstructor;
          function createNode(kind) {
              return new (getNodeConstructor(kind))();
          }
          ts.createNode = createNode;
          function visitNode(cbNode, node) {
              if (node) {
                  return cbNode(node);
              }
          }
          function visitNodeArray(cbNodes, nodes) {
              if (nodes) {
                  return cbNodes(nodes);
              }
          }
          function visitEachNode(cbNode, nodes) {
              if (nodes) {
                  for (var _i = 0; _i < nodes.length; _i++) {
                      var node = nodes[_i];
                      var result = cbNode(node);
                      if (result) {
                          return result;
                      }
                  }
              }
          }
          function forEachChild(node, cbNode, cbNodeArray) {
              if (!node) {
                  return;
              }
              var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode;
              var cbNodes = cbNodeArray || cbNode;
              switch (node.kind) {
                  case 127:
                      return visitNode(cbNode, node.left) ||
                          visitNode(cbNode, node.right);
                  case 129:
                      return visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.constraint) ||
                          visitNode(cbNode, node.expression);
                  case 130:
                  case 133:
                  case 132:
                  case 225:
                  case 226:
                  case 199:
                  case 153:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.propertyName) ||
                          visitNode(cbNode, node.dotDotDotToken) ||
                          visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.questionToken) ||
                          visitNode(cbNode, node.type) ||
                          visitNode(cbNode, node.initializer);
                  case 143:
                  case 144:
                  case 139:
                  case 140:
                  case 141:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNodes(cbNodes, node.typeParameters) ||
                          visitNodes(cbNodes, node.parameters) ||
                          visitNode(cbNode, node.type);
                  case 135:
                  case 134:
                  case 136:
                  case 137:
                  case 138:
                  case 163:
                  case 201:
                  case 164:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.asteriskToken) ||
                          visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.questionToken) ||
                          visitNodes(cbNodes, node.typeParameters) ||
                          visitNodes(cbNodes, node.parameters) ||
                          visitNode(cbNode, node.type) ||
                          visitNode(cbNode, node.equalsGreaterThanToken) ||
                          visitNode(cbNode, node.body);
                  case 142:
                      return visitNode(cbNode, node.typeName) ||
                          visitNodes(cbNodes, node.typeArguments);
                  case 145:
                      return visitNode(cbNode, node.exprName);
                  case 146:
                      return visitNodes(cbNodes, node.members);
                  case 147:
                      return visitNode(cbNode, node.elementType);
                  case 148:
                      return visitNodes(cbNodes, node.elementTypes);
                  case 149:
                      return visitNodes(cbNodes, node.types);
                  case 150:
                      return visitNode(cbNode, node.type);
                  case 151:
                  case 152:
                      return visitNodes(cbNodes, node.elements);
                  case 154:
                      return visitNodes(cbNodes, node.elements);
                  case 155:
                      return visitNodes(cbNodes, node.properties);
                  case 156:
                      return visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.dotToken) ||
                          visitNode(cbNode, node.name);
                  case 157:
                      return visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.argumentExpression);
                  case 158:
                  case 159:
                      return visitNode(cbNode, node.expression) ||
                          visitNodes(cbNodes, node.typeArguments) ||
                          visitNodes(cbNodes, node.arguments);
                  case 160:
                      return visitNode(cbNode, node.tag) ||
                          visitNode(cbNode, node.template);
                  case 161:
                      return visitNode(cbNode, node.type) ||
                          visitNode(cbNode, node.expression);
                  case 162:
                      return visitNode(cbNode, node.expression);
                  case 165:
                      return visitNode(cbNode, node.expression);
                  case 166:
                      return visitNode(cbNode, node.expression);
                  case 167:
                      return visitNode(cbNode, node.expression);
                  case 168:
                      return visitNode(cbNode, node.operand);
                  case 173:
                      return visitNode(cbNode, node.asteriskToken) ||
                          visitNode(cbNode, node.expression);
                  case 169:
                      return visitNode(cbNode, node.operand);
                  case 170:
                      return visitNode(cbNode, node.left) ||
                          visitNode(cbNode, node.operatorToken) ||
                          visitNode(cbNode, node.right);
                  case 171:
                      return visitNode(cbNode, node.condition) ||
                          visitNode(cbNode, node.questionToken) ||
                          visitNode(cbNode, node.whenTrue) ||
                          visitNode(cbNode, node.colonToken) ||
                          visitNode(cbNode, node.whenFalse);
                  case 174:
                      return visitNode(cbNode, node.expression);
                  case 180:
                  case 207:
                      return visitNodes(cbNodes, node.statements);
                  case 228:
                      return visitNodes(cbNodes, node.statements) ||
                          visitNode(cbNode, node.endOfFileToken);
                  case 181:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.declarationList);
                  case 200:
                      return visitNodes(cbNodes, node.declarations);
                  case 183:
                      return visitNode(cbNode, node.expression);
                  case 184:
                      return visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.thenStatement) ||
                          visitNode(cbNode, node.elseStatement);
                  case 185:
                      return visitNode(cbNode, node.statement) ||
                          visitNode(cbNode, node.expression);
                  case 186:
                      return visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.statement);
                  case 187:
                      return visitNode(cbNode, node.initializer) ||
                          visitNode(cbNode, node.condition) ||
                          visitNode(cbNode, node.incrementor) ||
                          visitNode(cbNode, node.statement);
                  case 188:
                      return visitNode(cbNode, node.initializer) ||
                          visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.statement);
                  case 189:
                      return visitNode(cbNode, node.initializer) ||
                          visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.statement);
                  case 190:
                  case 191:
                      return visitNode(cbNode, node.label);
                  case 192:
                      return visitNode(cbNode, node.expression);
                  case 193:
                      return visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.statement);
                  case 194:
                      return visitNode(cbNode, node.expression) ||
                          visitNode(cbNode, node.caseBlock);
                  case 208:
                      return visitNodes(cbNodes, node.clauses);
                  case 221:
                      return visitNode(cbNode, node.expression) ||
                          visitNodes(cbNodes, node.statements);
                  case 222:
                      return visitNodes(cbNodes, node.statements);
                  case 195:
                      return visitNode(cbNode, node.label) ||
                          visitNode(cbNode, node.statement);
                  case 196:
                      return visitNode(cbNode, node.expression);
                  case 197:
                      return visitNode(cbNode, node.tryBlock) ||
                          visitNode(cbNode, node.catchClause) ||
                          visitNode(cbNode, node.finallyBlock);
                  case 224:
                      return visitNode(cbNode, node.variableDeclaration) ||
                          visitNode(cbNode, node.block);
                  case 131:
                      return visitNode(cbNode, node.expression);
                  case 202:
                  case 175:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.name) ||
                          visitNodes(cbNodes, node.typeParameters) ||
                          visitNodes(cbNodes, node.heritageClauses) ||
                          visitNodes(cbNodes, node.members);
                  case 203:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.name) ||
                          visitNodes(cbNodes, node.typeParameters) ||
                          visitNodes(cbNodes, node.heritageClauses) ||
                          visitNodes(cbNodes, node.members);
                  case 204:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.type);
                  case 205:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.name) ||
                          visitNodes(cbNodes, node.members);
                  case 227:
                      return visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.initializer);
                  case 206:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.body);
                  case 209:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.moduleReference);
                  case 210:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.importClause) ||
                          visitNode(cbNode, node.moduleSpecifier);
                  case 211:
                      return visitNode(cbNode, node.name) ||
                          visitNode(cbNode, node.namedBindings);
                  case 212:
                      return visitNode(cbNode, node.name);
                  case 213:
                  case 217:
                      return visitNodes(cbNodes, node.elements);
                  case 216:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.exportClause) ||
                          visitNode(cbNode, node.moduleSpecifier);
                  case 214:
                  case 218:
                      return visitNode(cbNode, node.propertyName) ||
                          visitNode(cbNode, node.name);
                  case 215:
                      return visitNodes(cbNodes, node.decorators) ||
                          visitNodes(cbNodes, node.modifiers) ||
                          visitNode(cbNode, node.expression);
                  case 172:
                      return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans);
                  case 178:
                      return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
                  case 128:
                      return visitNode(cbNode, node.expression);
                  case 223:
                      return visitNodes(cbNodes, node.types);
                  case 177:
                      return visitNode(cbNode, node.expression) ||
                          visitNodes(cbNodes, node.typeArguments);
                  case 220:
                      return visitNode(cbNode, node.expression);
                  case 219:
                      return visitNodes(cbNodes, node.decorators);
              }
          }
          ts.forEachChild = forEachChild;
          function createSourceFile(fileName, sourceText, languageVersion, setParentNodes) {
              if (setParentNodes === void 0) { setParentNodes = false; }
              var start = new Date().getTime();
              var result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes);
              ts.parseTime += new Date().getTime() - start;
              return result;
          }
          ts.createSourceFile = createSourceFile;
          function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) {
              return IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks);
          }
          ts.updateSourceFile = updateSourceFile;
          var Parser;
          (function (Parser) {
              var scanner = ts.createScanner(2, true);
              var disallowInAndDecoratorContext = 2 | 16;
              var sourceFile;
              var syntaxCursor;
              var token;
              var sourceText;
              var nodeCount;
              var identifiers;
              var identifierCount;
              var parsingContext;
              var contextFlags = 0;
              var parseErrorBeforeNextFinishedNode = false;
              function parseSourceFile(fileName, _sourceText, languageVersion, _syntaxCursor, setParentNodes) {
                  sourceText = _sourceText;
                  syntaxCursor = _syntaxCursor;
                  parsingContext = 0;
                  identifiers = {};
                  identifierCount = 0;
                  nodeCount = 0;
                  contextFlags = 0;
                  parseErrorBeforeNextFinishedNode = false;
                  createSourceFile(fileName, languageVersion);
                  scanner.setText(sourceText);
                  scanner.setOnError(scanError);
                  scanner.setScriptTarget(languageVersion);
                  token = nextToken();
                  processReferenceComments(sourceFile);
                  sourceFile.statements = parseList(0, true, parseSourceElement);
                  ts.Debug.assert(token === 1);
                  sourceFile.endOfFileToken = parseTokenNode();
                  setExternalModuleIndicator(sourceFile);
                  sourceFile.nodeCount = nodeCount;
                  sourceFile.identifierCount = identifierCount;
                  sourceFile.identifiers = identifiers;
                  if (setParentNodes) {
                      fixupParentReferences(sourceFile);
                  }
                  syntaxCursor = undefined;
                  scanner.setText("");
                  scanner.setOnError(undefined);
                  var result = sourceFile;
                  sourceFile = undefined;
                  identifiers = undefined;
                  syntaxCursor = undefined;
                  sourceText = undefined;
                  return result;
              }
              Parser.parseSourceFile = parseSourceFile;
              function fixupParentReferences(sourceFile) {
                  // normally parent references are set during binding. However, for clients that only need
                  // a syntax tree, and no semantic features, then the binding process is an unnecessary
                  // overhead.  This functions allows us to set all the parents, without all the expense of
                  // binding.
                  var parent = sourceFile;
                  forEachChild(sourceFile, visitNode);
                  return;
                  function visitNode(n) {
                      if (n.parent !== parent) {
                          n.parent = parent;
                          var saveParent = parent;
                          parent = n;
                          forEachChild(n, visitNode);
                          parent = saveParent;
                      }
                  }
              }
              function createSourceFile(fileName, languageVersion) {
                  sourceFile = createNode(228, 0);
                  sourceFile.pos = 0;
                  sourceFile.end = sourceText.length;
                  sourceFile.text = sourceText;
                  sourceFile.parseDiagnostics = [];
                  sourceFile.bindDiagnostics = [];
                  sourceFile.languageVersion = languageVersion;
                  sourceFile.fileName = ts.normalizePath(fileName);
                  sourceFile.flags = ts.fileExtensionIs(sourceFile.fileName, ".d.ts") ? 2048 : 0;
              }
              function setContextFlag(val, flag) {
                  if (val) {
                      contextFlags |= flag;
                  }
                  else {
                      contextFlags &= ~flag;
                  }
              }
              function setStrictModeContext(val) {
                  setContextFlag(val, 1);
              }
              function setDisallowInContext(val) {
                  setContextFlag(val, 2);
              }
              function setYieldContext(val) {
                  setContextFlag(val, 4);
              }
              function setGeneratorParameterContext(val) {
                  setContextFlag(val, 8);
              }
              function setDecoratorContext(val) {
                  setContextFlag(val, 16);
              }
              function doOutsideOfContext(flags, func) {
                  var currentContextFlags = contextFlags & flags;
                  if (currentContextFlags) {
                      setContextFlag(false, currentContextFlags);
                      var result = func();
                      setContextFlag(true, currentContextFlags);
                      return result;
                  }
                  return func();
              }
              function allowInAnd(func) {
                  if (contextFlags & 2) {
                      setDisallowInContext(false);
                      var result = func();
                      setDisallowInContext(true);
                      return result;
                  }
                  return func();
              }
              function disallowInAnd(func) {
                  if (contextFlags & 2) {
                      return func();
                  }
                  setDisallowInContext(true);
                  var result = func();
                  setDisallowInContext(false);
                  return result;
              }
              function doInYieldContext(func) {
                  if (contextFlags & 4) {
                      return func();
                  }
                  setYieldContext(true);
                  var result = func();
                  setYieldContext(false);
                  return result;
              }
              function doOutsideOfYieldContext(func) {
                  if (contextFlags & 4) {
                      setYieldContext(false);
                      var result = func();
                      setYieldContext(true);
                      return result;
                  }
                  return func();
              }
              function doInDecoratorContext(func) {
                  if (contextFlags & 16) {
                      return func();
                  }
                  setDecoratorContext(true);
                  var result = func();
                  setDecoratorContext(false);
                  return result;
              }
              function inYieldContext() {
                  return (contextFlags & 4) !== 0;
              }
              function inStrictModeContext() {
                  return (contextFlags & 1) !== 0;
              }
              function inGeneratorParameterContext() {
                  return (contextFlags & 8) !== 0;
              }
              function inDisallowInContext() {
                  return (contextFlags & 2) !== 0;
              }
              function inDecoratorContext() {
                  return (contextFlags & 16) !== 0;
              }
              function parseErrorAtCurrentToken(message, arg0) {
                  var start = scanner.getTokenPos();
                  var length = scanner.getTextPos() - start;
                  parseErrorAtPosition(start, length, message, arg0);
              }
              function parseErrorAtPosition(start, length, message, arg0) {
                  var lastError = ts.lastOrUndefined(sourceFile.parseDiagnostics);
                  if (!lastError || start !== lastError.start) {
                      sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0));
                  }
                  parseErrorBeforeNextFinishedNode = true;
              }
              function scanError(message, length) {
                  var pos = scanner.getTextPos();
                  parseErrorAtPosition(pos, length || 0, message);
              }
              function getNodePos() {
                  return scanner.getStartPos();
              }
              function getNodeEnd() {
                  return scanner.getStartPos();
              }
              function nextToken() {
                  return token = scanner.scan();
              }
              function getTokenPos(pos) {
                  return ts.skipTrivia(sourceText, pos);
              }
              function reScanGreaterToken() {
                  return token = scanner.reScanGreaterToken();
              }
              function reScanSlashToken() {
                  return token = scanner.reScanSlashToken();
              }
              function reScanTemplateToken() {
                  return token = scanner.reScanTemplateToken();
              }
              function speculationHelper(callback, isLookAhead) {
                  var saveToken = token;
                  var saveParseDiagnosticsLength = sourceFile.parseDiagnostics.length;
                  var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
                  var saveContextFlags = contextFlags;
                  var result = isLookAhead
                      ? scanner.lookAhead(callback)
                      : scanner.tryScan(callback);
                  ts.Debug.assert(saveContextFlags === contextFlags);
                  if (!result || isLookAhead) {
                      token = saveToken;
                      sourceFile.parseDiagnostics.length = saveParseDiagnosticsLength;
                      parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
                  }
                  return result;
              }
              function lookAhead(callback) {
                  return speculationHelper(callback, true);
              }
              function tryParse(callback) {
                  return speculationHelper(callback, false);
              }
              function isIdentifier() {
                  if (token === 65) {
                      return true;
                  }
                  if (token === 110 && inYieldContext()) {
                      return false;
                  }
                  return token > 101;
              }
              function parseExpected(kind, diagnosticMessage) {
                  if (token === kind) {
                      nextToken();
                      return true;
                  }
                  if (diagnosticMessage) {
                      parseErrorAtCurrentToken(diagnosticMessage);
                  }
                  else {
                      parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind));
                  }
                  return false;
              }
              function parseOptional(t) {
                  if (token === t) {
                      nextToken();
                      return true;
                  }
                  return false;
              }
              function parseOptionalToken(t) {
                  if (token === t) {
                      return parseTokenNode();
                  }
                  return undefined;
              }
              function parseExpectedToken(t, reportAtCurrentPosition, diagnosticMessage, arg0) {
                  return parseOptionalToken(t) ||
                      createMissingNode(t, reportAtCurrentPosition, diagnosticMessage, arg0);
              }
              function parseTokenNode() {
                  var node = createNode(token);
                  nextToken();
                  return finishNode(node);
              }
              function canParseSemicolon() {
                  if (token === 22) {
                      return true;
                  }
                  return token === 15 || token === 1 || scanner.hasPrecedingLineBreak();
              }
              function parseSemicolon() {
                  if (canParseSemicolon()) {
                      if (token === 22) {
                          nextToken();
                      }
                      return true;
                  }
                  else {
                      return parseExpected(22);
                  }
              }
              function createNode(kind, pos) {
                  nodeCount++;
                  var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))();
                  if (!(pos >= 0)) {
                      pos = scanner.getStartPos();
                  }
                  node.pos = pos;
                  node.end = pos;
                  return node;
              }
              function finishNode(node) {
                  node.end = scanner.getStartPos();
                  if (contextFlags) {
                      node.parserContextFlags = contextFlags;
                  }
                  if (parseErrorBeforeNextFinishedNode) {
                      parseErrorBeforeNextFinishedNode = false;
                      node.parserContextFlags |= 32;
                  }
                  return node;
              }
              function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) {
                  if (reportAtCurrentPosition) {
                      parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0);
                  }
                  else {
                      parseErrorAtCurrentToken(diagnosticMessage, arg0);
                  }
                  var result = createNode(kind, scanner.getStartPos());
                  result.text = "";
                  return finishNode(result);
              }
              function internIdentifier(text) {
                  text = ts.escapeIdentifier(text);
                  return ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text);
              }
              function createIdentifier(isIdentifier, diagnosticMessage) {
                  identifierCount++;
                  if (isIdentifier) {
                      var node = createNode(65);
                      if (token !== 65) {
                          node.originalKeywordKind = token;
                      }
                      node.text = internIdentifier(scanner.getTokenValue());
                      nextToken();
                      return finishNode(node);
                  }
                  return createMissingNode(65, false, diagnosticMessage || ts.Diagnostics.Identifier_expected);
              }
              function parseIdentifier(diagnosticMessage) {
                  return createIdentifier(isIdentifier(), diagnosticMessage);
              }
              function parseIdentifierName() {
                  return createIdentifier(isIdentifierOrKeyword());
              }
              function isLiteralPropertyName() {
                  return isIdentifierOrKeyword() ||
                      token === 8 ||
                      token === 7;
              }
              function parsePropertyName() {
                  if (token === 8 || token === 7) {
                      return parseLiteralNode(true);
                  }
                  if (token === 18) {
                      return parseComputedPropertyName();
                  }
                  return parseIdentifierName();
              }
              function parseComputedPropertyName() {
                  var node = createNode(128);
                  parseExpected(18);
                  var yieldContext = inYieldContext();
                  if (inGeneratorParameterContext()) {
                      setYieldContext(false);
                  }
                  node.expression = allowInAnd(parseExpression);
                  if (inGeneratorParameterContext()) {
                      setYieldContext(yieldContext);
                  }
                  parseExpected(19);
                  return finishNode(node);
              }
              function parseContextualModifier(t) {
                  return token === t && tryParse(nextTokenCanFollowModifier);
              }
              function nextTokenCanFollowModifier() {
                  if (token === 70) {
                      return nextToken() === 77;
                  }
                  if (token === 78) {
                      nextToken();
                      if (token === 73) {
                          return lookAhead(nextTokenIsClassOrFunction);
                      }
                      return token !== 35 && token !== 14 && canFollowModifier();
                  }
                  if (token === 73) {
                      return nextTokenIsClassOrFunction();
                  }
                  nextToken();
                  return canFollowModifier();
              }
              function parseAnyContextualModifier() {
                  return ts.isModifier(token) && tryParse(nextTokenCanFollowModifier);
              }
              function canFollowModifier() {
                  return token === 18
                      || token === 14
                      || token === 35
                      || isLiteralPropertyName();
              }
              function nextTokenIsClassOrFunction() {
                  nextToken();
                  return token === 69 || token === 83;
              }
              function isListElement(parsingContext, inErrorRecovery) {
                  var node = currentNode(parsingContext);
                  if (node) {
                      return true;
                  }
                  switch (parsingContext) {
                      case 0:
                      case 1:
                          return isSourceElement(inErrorRecovery);
                      case 2:
                      case 4:
                          return isStartOfStatement(inErrorRecovery);
                      case 3:
                          return token === 67 || token === 73;
                      case 5:
                          return isStartOfTypeMember();
                      case 6:
                          return lookAhead(isClassMemberStart) || (token === 22 && !inErrorRecovery);
                      case 7:
                          return token === 18 || isLiteralPropertyName();
                      case 13:
                          return token === 18 || token === 35 || isLiteralPropertyName();
                      case 10:
                          return isLiteralPropertyName();
                      case 8:
                          if (token === 14) {
                              return lookAhead(isValidHeritageClauseObjectLiteral);
                          }
                          if (!inErrorRecovery) {
                              return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword();
                          }
                          else {
                              return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword();
                          }
                      case 9:
                          return isIdentifierOrPattern();
                      case 11:
                          return token === 23 || token === 21 || isIdentifierOrPattern();
                      case 16:
                          return isIdentifier();
                      case 12:
                      case 14:
                          return token === 23 || token === 21 || isStartOfExpression();
                      case 15:
                          return isStartOfParameter();
                      case 17:
                      case 18:
                          return token === 23 || isStartOfType();
                      case 19:
                          return isHeritageClause();
                      case 20:
                          return isIdentifierOrKeyword();
                  }
                  ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
              }
              function isValidHeritageClauseObjectLiteral() {
                  ts.Debug.assert(token === 14);
                  if (nextToken() === 15) {
                      var next = nextToken();
                      return next === 23 || next === 14 || next === 79 || next === 102;
                  }
                  return true;
              }
              function nextTokenIsIdentifier() {
                  nextToken();
                  return isIdentifier();
              }
              function isHeritageClauseExtendsOrImplementsKeyword() {
                  if (token === 102 ||
                      token === 79) {
                      return lookAhead(nextTokenIsStartOfExpression);
                  }
                  return false;
              }
              function nextTokenIsStartOfExpression() {
                  nextToken();
                  return isStartOfExpression();
              }
              function isListTerminator(kind) {
                  if (token === 1) {
                      return true;
                  }
                  switch (kind) {
                      case 1:
                      case 2:
                      case 3:
                      case 5:
                      case 6:
                      case 7:
                      case 13:
                      case 10:
                      case 20:
                          return token === 15;
                      case 4:
                          return token === 15 || token === 67 || token === 73;
                      case 8:
                          return token === 14 || token === 79 || token === 102;
                      case 9:
                          return isVariableDeclaratorListTerminator();
                      case 16:
                          return token === 25 || token === 16 || token === 14 || token === 79 || token === 102;
                      case 12:
                          return token === 17 || token === 22;
                      case 14:
                      case 18:
                      case 11:
                          return token === 19;
                      case 15:
                          return token === 17 || token === 19;
                      case 17:
                          return token === 25 || token === 16;
                      case 19:
                          return token === 14 || token === 15;
                  }
              }
              function isVariableDeclaratorListTerminator() {
                  if (canParseSemicolon()) {
                      return true;
                  }
                  if (isInOrOfKeyword(token)) {
                      return true;
                  }
                  if (token === 32) {
                      return true;
                  }
                  return false;
              }
              function isInSomeParsingContext() {
                  for (var kind = 0; kind < 21; kind++) {
                      if (parsingContext & (1 << kind)) {
                          if (isListElement(kind, true) || isListTerminator(kind)) {
                              return true;
                          }
                      }
                  }
                  return false;
              }
              function parseList(kind, checkForStrictMode, parseElement) {
                  var saveParsingContext = parsingContext;
                  parsingContext |= 1 << kind;
                  var result = [];
                  result.pos = getNodePos();
                  var savedStrictModeContext = inStrictModeContext();
                  while (!isListTerminator(kind)) {
                      if (isListElement(kind, false)) {
                          var element = parseListElement(kind, parseElement);
                          result.push(element);
                          if (checkForStrictMode && !inStrictModeContext()) {
                              if (ts.isPrologueDirective(element)) {
                                  if (isUseStrictPrologueDirective(sourceFile, element)) {
                                      setStrictModeContext(true);
                                      checkForStrictMode = false;
                                  }
                              }
                              else {
                                  checkForStrictMode = false;
                              }
                          }
                          continue;
                      }
                      if (abortParsingListOrMoveToNextToken(kind)) {
                          break;
                      }
                  }
                  setStrictModeContext(savedStrictModeContext);
                  result.end = getNodeEnd();
                  parsingContext = saveParsingContext;
                  return result;
              }
              function isUseStrictPrologueDirective(sourceFile, node) {
                  ts.Debug.assert(ts.isPrologueDirective(node));
                  var nodeText = ts.getSourceTextOfNodeFromSourceFile(sourceFile, node.expression);
                  return nodeText === '"use strict"' || nodeText === "'use strict'";
              }
              function parseListElement(parsingContext, parseElement) {
                  var node = currentNode(parsingContext);
                  if (node) {
                      return consumeNode(node);
                  }
                  return parseElement();
              }
              function currentNode(parsingContext) {
                  if (parseErrorBeforeNextFinishedNode) {
                      return undefined;
                  }
                  if (!syntaxCursor) {
                      return undefined;
                  }
                  var node = syntaxCursor.currentNode(scanner.getStartPos());
                  if (ts.nodeIsMissing(node)) {
                      return undefined;
                  }
                  if (node.intersectsChange) {
                      return undefined;
                  }
                  if (ts.containsParseError(node)) {
                      return undefined;
                  }
                  var nodeContextFlags = node.parserContextFlags & 63;
                  if (nodeContextFlags !== contextFlags) {
                      return undefined;
                  }
                  if (!canReuseNode(node, parsingContext)) {
                      return undefined;
                  }
                  return node;
              }
              function consumeNode(node) {
                  scanner.setTextPos(node.end);
                  nextToken();
                  return node;
              }
              function canReuseNode(node, parsingContext) {
                  switch (parsingContext) {
                      case 1:
                          return isReusableModuleElement(node);
                      case 6:
                          return isReusableClassMember(node);
                      case 3:
                          return isReusableSwitchClause(node);
                      case 2:
                      case 4:
                          return isReusableStatement(node);
                      case 7:
                          return isReusableEnumMember(node);
                      case 5:
                          return isReusableTypeMember(node);
                      case 9:
                          return isReusableVariableDeclaration(node);
                      case 15:
                          return isReusableParameter(node);
                      case 19:
                      case 16:
                      case 18:
                      case 17:
                      case 12:
                      case 13:
                      case 8:
                  }
                  return false;
              }
              function isReusableModuleElement(node) {
                  if (node) {
                      switch (node.kind) {
                          case 210:
                          case 209:
                          case 216:
                          case 215:
                          case 202:
                          case 203:
                          case 206:
                          case 205:
                              return true;
                      }
                      return isReusableStatement(node);
                  }
                  return false;
              }
              function isReusableClassMember(node) {
                  if (node) {
                      switch (node.kind) {
                          case 136:
                          case 141:
                          case 135:
                          case 137:
                          case 138:
                          case 133:
                          case 179:
                              return true;
                      }
                  }
                  return false;
              }
              function isReusableSwitchClause(node) {
                  if (node) {
                      switch (node.kind) {
                          case 221:
                          case 222:
                              return true;
                      }
                  }
                  return false;
              }
              function isReusableStatement(node) {
                  if (node) {
                      switch (node.kind) {
                          case 201:
                          case 181:
                          case 180:
                          case 184:
                          case 183:
                          case 196:
                          case 192:
                          case 194:
                          case 191:
                          case 190:
                          case 188:
                          case 189:
                          case 187:
                          case 186:
                          case 193:
                          case 182:
                          case 197:
                          case 195:
                          case 185:
                          case 198:
                              return true;
                      }
                  }
                  return false;
              }
              function isReusableEnumMember(node) {
                  return node.kind === 227;
              }
              function isReusableTypeMember(node) {
                  if (node) {
                      switch (node.kind) {
                          case 140:
                          case 134:
                          case 141:
                          case 132:
                          case 139:
                              return true;
                      }
                  }
                  return false;
              }
              function isReusableVariableDeclaration(node) {
                  if (node.kind !== 199) {
                      return false;
                  }
                  var variableDeclarator = node;
                  return variableDeclarator.initializer === undefined;
              }
              function isReusableParameter(node) {
                  if (node.kind !== 130) {
                      return false;
                  }
                  var parameter = node;
                  return parameter.initializer === undefined;
              }
              function abortParsingListOrMoveToNextToken(kind) {
                  parseErrorAtCurrentToken(parsingContextErrors(kind));
                  if (isInSomeParsingContext()) {
                      return true;
                  }
                  nextToken();
                  return false;
              }
              function parsingContextErrors(context) {
                  switch (context) {
                      case 0: return ts.Diagnostics.Declaration_or_statement_expected;
                      case 1: return ts.Diagnostics.Declaration_or_statement_expected;
                      case 2: return ts.Diagnostics.Statement_expected;
                      case 3: return ts.Diagnostics.case_or_default_expected;
                      case 4: return ts.Diagnostics.Statement_expected;
                      case 5: return ts.Diagnostics.Property_or_signature_expected;
                      case 6: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;
                      case 7: return ts.Diagnostics.Enum_member_expected;
                      case 8: return ts.Diagnostics.Expression_expected;
                      case 9: return ts.Diagnostics.Variable_declaration_expected;
                      case 10: return ts.Diagnostics.Property_destructuring_pattern_expected;
                      case 11: return ts.Diagnostics.Array_element_destructuring_pattern_expected;
                      case 12: return ts.Diagnostics.Argument_expression_expected;
                      case 13: return ts.Diagnostics.Property_assignment_expected;
                      case 14: return ts.Diagnostics.Expression_or_comma_expected;
                      case 15: return ts.Diagnostics.Parameter_declaration_expected;
                      case 16: return ts.Diagnostics.Type_parameter_declaration_expected;
                      case 17: return ts.Diagnostics.Type_argument_expected;
                      case 18: return ts.Diagnostics.Type_expected;
                      case 19: return ts.Diagnostics.Unexpected_token_expected;
                      case 20: return ts.Diagnostics.Identifier_expected;
                  }
              }
              ;
              function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimeter) {
                  var saveParsingContext = parsingContext;
                  parsingContext |= 1 << kind;
                  var result = [];
                  result.pos = getNodePos();
                  var commaStart = -1;
                  while (true) {
                      if (isListElement(kind, false)) {
                          result.push(parseListElement(kind, parseElement));
                          commaStart = scanner.getTokenPos();
                          if (parseOptional(23)) {
                              continue;
                          }
                          commaStart = -1;
                          if (isListTerminator(kind)) {
                              break;
                          }
                          parseExpected(23);
                          if (considerSemicolonAsDelimeter && token === 22 && !scanner.hasPrecedingLineBreak()) {
                              nextToken();
                          }
                          continue;
                      }
                      if (isListTerminator(kind)) {
                          break;
                      }
                      if (abortParsingListOrMoveToNextToken(kind)) {
                          break;
                      }
                  }
                  if (commaStart >= 0) {
                      result.hasTrailingComma = true;
                  }
                  result.end = getNodeEnd();
                  parsingContext = saveParsingContext;
                  return result;
              }
              function createMissingList() {
                  var pos = getNodePos();
                  var result = [];
                  result.pos = pos;
                  result.end = pos;
                  return result;
              }
              function parseBracketedList(kind, parseElement, open, close) {
                  if (parseExpected(open)) {
                      var result = parseDelimitedList(kind, parseElement);
                      parseExpected(close);
                      return result;
                  }
                  return createMissingList();
              }
              function parseEntityName(allowReservedWords, diagnosticMessage) {
                  var entity = parseIdentifier(diagnosticMessage);
                  while (parseOptional(20)) {
                      var node = createNode(127, entity.pos);
                      node.left = entity;
                      node.right = parseRightSideOfDot(allowReservedWords);
                      entity = finishNode(node);
                  }
                  return entity;
              }
              function parseRightSideOfDot(allowIdentifierNames) {
                  if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) {
                      var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
                      if (matchesPattern) {
                          return createMissingNode(65, true, ts.Diagnostics.Identifier_expected);
                      }
                  }
                  return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
              }
              function parseTemplateExpression() {
                  var template = createNode(172);
                  template.head = parseLiteralNode();
                  ts.Debug.assert(template.head.kind === 11, "Template head has wrong token kind");
                  var templateSpans = [];
                  templateSpans.pos = getNodePos();
                  do {
                      templateSpans.push(parseTemplateSpan());
                  } while (ts.lastOrUndefined(templateSpans).literal.kind === 12);
                  templateSpans.end = getNodeEnd();
                  template.templateSpans = templateSpans;
                  return finishNode(template);
              }
              function parseTemplateSpan() {
                  var span = createNode(178);
                  span.expression = allowInAnd(parseExpression);
                  var literal;
                  if (token === 15) {
                      reScanTemplateToken();
                      literal = parseLiteralNode();
                  }
                  else {
                      literal = parseExpectedToken(13, false, ts.Diagnostics._0_expected, ts.tokenToString(15));
                  }
                  span.literal = literal;
                  return finishNode(span);
              }
              function parseLiteralNode(internName) {
                  var node = createNode(token);
                  var text = scanner.getTokenValue();
                  node.text = internName ? internIdentifier(text) : text;
                  if (scanner.hasExtendedUnicodeEscape()) {
                      node.hasExtendedUnicodeEscape = true;
                  }
                  if (scanner.isUnterminated()) {
                      node.isUnterminated = true;
                  }
                  var tokenPos = scanner.getTokenPos();
                  nextToken();
                  finishNode(node);
                  if (node.kind === 7
                      && sourceText.charCodeAt(tokenPos) === 48
                      && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
                      node.flags |= 16384;
                  }
                  return node;
              }
              function parseTypeReference() {
                  var node = createNode(142);
                  node.typeName = parseEntityName(false, ts.Diagnostics.Type_expected);
                  if (!scanner.hasPrecedingLineBreak() && token === 24) {
                      node.typeArguments = parseBracketedList(17, parseType, 24, 25);
                  }
                  return finishNode(node);
              }
              function parseTypeQuery() {
                  var node = createNode(145);
                  parseExpected(97);
                  node.exprName = parseEntityName(true);
                  return finishNode(node);
              }
              function parseTypeParameter() {
                  var node = createNode(129);
                  node.name = parseIdentifier();
                  if (parseOptional(79)) {
                      if (isStartOfType() || !isStartOfExpression()) {
                          node.constraint = parseType();
                      }
                      else {
                          node.expression = parseUnaryExpressionOrHigher();
                      }
                  }
                  return finishNode(node);
              }
              function parseTypeParameters() {
                  if (token === 24) {
                      return parseBracketedList(16, parseTypeParameter, 24, 25);
                  }
              }
              function parseParameterType() {
                  if (parseOptional(51)) {
                      return token === 8
                          ? parseLiteralNode(true)
                          : parseType();
                  }
                  return undefined;
              }
              function isStartOfParameter() {
                  return token === 21 || isIdentifierOrPattern() || ts.isModifier(token) || token === 52;
              }
              function setModifiers(node, modifiers) {
                  if (modifiers) {
                      node.flags |= modifiers.flags;
                      node.modifiers = modifiers;
                  }
              }
              function parseParameter() {
                  var node = createNode(130);
                  node.decorators = parseDecorators();
                  setModifiers(node, parseModifiers());
                  node.dotDotDotToken = parseOptionalToken(21);
                  node.name = inGeneratorParameterContext() ? doInYieldContext(parseIdentifierOrPattern) : parseIdentifierOrPattern();
                  if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifier(token)) {
                      nextToken();
                  }
                  node.questionToken = parseOptionalToken(50);
                  node.type = parseParameterType();
                  node.initializer = inGeneratorParameterContext() ? doOutsideOfYieldContext(parseParameterInitializer) : parseParameterInitializer();
                  return finishNode(node);
              }
              function parseParameterInitializer() {
                  return parseInitializer(true);
              }
              function fillSignature(returnToken, yieldAndGeneratorParameterContext, requireCompleteParameterList, signature) {
                  var returnTokenRequired = returnToken === 32;
                  signature.typeParameters = parseTypeParameters();
                  signature.parameters = parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList);
                  if (returnTokenRequired) {
                      parseExpected(returnToken);
                      signature.type = parseType();
                  }
                  else if (parseOptional(returnToken)) {
                      signature.type = parseType();
                  }
              }
              function parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList) {
                  if (parseExpected(16)) {
                      var savedYieldContext = inYieldContext();
                      var savedGeneratorParameterContext = inGeneratorParameterContext();
                      setYieldContext(yieldAndGeneratorParameterContext);
                      setGeneratorParameterContext(yieldAndGeneratorParameterContext);
                      var result = parseDelimitedList(15, parseParameter);
                      setYieldContext(savedYieldContext);
                      setGeneratorParameterContext(savedGeneratorParameterContext);
                      if (!parseExpected(17) && requireCompleteParameterList) {
                          return undefined;
                      }
                      return result;
                  }
                  return requireCompleteParameterList ? undefined : createMissingList();
              }
              function parseTypeMemberSemicolon() {
                  if (parseOptional(23)) {
                      return;
                  }
                  parseSemicolon();
              }
              function parseSignatureMember(kind) {
                  var node = createNode(kind);
                  if (kind === 140) {
                      parseExpected(88);
                  }
                  fillSignature(51, false, false, node);
                  parseTypeMemberSemicolon();
                  return finishNode(node);
              }
              function isIndexSignature() {
                  if (token !== 18) {
                      return false;
                  }
                  return lookAhead(isUnambiguouslyIndexSignature);
              }
              function isUnambiguouslyIndexSignature() {
                  nextToken();
                  if (token === 21 || token === 19) {
                      return true;
                  }
                  if (ts.isModifier(token)) {
                      nextToken();
                      if (isIdentifier()) {
                          return true;
                      }
                  }
                  else if (!isIdentifier()) {
                      return false;
                  }
                  else {
                      nextToken();
                  }
                  if (token === 51 || token === 23) {
                      return true;
                  }
                  if (token !== 50) {
                      return false;
                  }
                  nextToken();
                  return token === 51 || token === 23 || token === 19;
              }
              function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(141, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  node.parameters = parseBracketedList(15, parseParameter, 18, 19);
                  node.type = parseTypeAnnotation();
                  parseTypeMemberSemicolon();
                  return finishNode(node);
              }
              function parsePropertyOrMethodSignature() {
                  var fullStart = scanner.getStartPos();
                  var name = parsePropertyName();
                  var questionToken = parseOptionalToken(50);
                  if (token === 16 || token === 24) {
                      var method = createNode(134, fullStart);
                      method.name = name;
                      method.questionToken = questionToken;
                      fillSignature(51, false, false, method);
                      parseTypeMemberSemicolon();
                      return finishNode(method);
                  }
                  else {
                      var property = createNode(132, fullStart);
                      property.name = name;
                      property.questionToken = questionToken;
                      property.type = parseTypeAnnotation();
                      parseTypeMemberSemicolon();
                      return finishNode(property);
                  }
              }
              function isStartOfTypeMember() {
                  switch (token) {
                      case 16:
                      case 24:
                      case 18:
                          return true;
                      default:
                          if (ts.isModifier(token)) {
                              var result = lookAhead(isStartOfIndexSignatureDeclaration);
                              if (result) {
                                  return result;
                              }
                          }
                          return isLiteralPropertyName() && lookAhead(isTypeMemberWithLiteralPropertyName);
                  }
              }
              function isStartOfIndexSignatureDeclaration() {
                  while (ts.isModifier(token)) {
                      nextToken();
                  }
                  return isIndexSignature();
              }
              function isTypeMemberWithLiteralPropertyName() {
                  nextToken();
                  return token === 16 ||
                      token === 24 ||
                      token === 50 ||
                      token === 51 ||
                      canParseSemicolon();
              }
              function parseTypeMember() {
                  switch (token) {
                      case 16:
                      case 24:
                          return parseSignatureMember(139);
                      case 18:
                          return isIndexSignature()
                              ? parseIndexSignatureDeclaration(scanner.getStartPos(), undefined, undefined)
                              : parsePropertyOrMethodSignature();
                      case 88:
                          if (lookAhead(isStartOfConstructSignature)) {
                              return parseSignatureMember(140);
                          }
                      case 8:
                      case 7:
                          return parsePropertyOrMethodSignature();
                      default:
                          if (ts.isModifier(token)) {
                              var result = tryParse(parseIndexSignatureWithModifiers);
                              if (result) {
                                  return result;
                              }
                          }
                          if (isIdentifierOrKeyword()) {
                              return parsePropertyOrMethodSignature();
                          }
                  }
              }
              function parseIndexSignatureWithModifiers() {
                  var fullStart = scanner.getStartPos();
                  var decorators = parseDecorators();
                  var modifiers = parseModifiers();
                  return isIndexSignature()
                      ? parseIndexSignatureDeclaration(fullStart, decorators, modifiers)
                      : undefined;
              }
              function isStartOfConstructSignature() {
                  nextToken();
                  return token === 16 || token === 24;
              }
              function parseTypeLiteral() {
                  var node = createNode(146);
                  node.members = parseObjectTypeMembers();
                  return finishNode(node);
              }
              function parseObjectTypeMembers() {
                  var members;
                  if (parseExpected(14)) {
                      members = parseList(5, false, parseTypeMember);
                      parseExpected(15);
                  }
                  else {
                      members = createMissingList();
                  }
                  return members;
              }
              function parseTupleType() {
                  var node = createNode(148);
                  node.elementTypes = parseBracketedList(18, parseType, 18, 19);
                  return finishNode(node);
              }
              function parseParenthesizedType() {
                  var node = createNode(150);
                  parseExpected(16);
                  node.type = parseType();
                  parseExpected(17);
                  return finishNode(node);
              }
              function parseFunctionOrConstructorType(kind) {
                  var node = createNode(kind);
                  if (kind === 144) {
                      parseExpected(88);
                  }
                  fillSignature(32, false, false, node);
                  return finishNode(node);
              }
              function parseKeywordAndNoDot() {
                  var node = parseTokenNode();
                  return token === 20 ? undefined : node;
              }
              function parseNonArrayType() {
                  switch (token) {
                      case 112:
                      case 122:
                      case 120:
                      case 113:
                      case 123:
                          var node = tryParse(parseKeywordAndNoDot);
                          return node || parseTypeReference();
                      case 99:
                          return parseTokenNode();
                      case 97:
                          return parseTypeQuery();
                      case 14:
                          return parseTypeLiteral();
                      case 18:
                          return parseTupleType();
                      case 16:
                          return parseParenthesizedType();
                      default:
                          return parseTypeReference();
                  }
              }
              function isStartOfType() {
                  switch (token) {
                      case 112:
                      case 122:
                      case 120:
                      case 113:
                      case 123:
                      case 99:
                      case 97:
                      case 14:
                      case 18:
                      case 24:
                      case 88:
                          return true;
                      case 16:
                          return lookAhead(isStartOfParenthesizedOrFunctionType);
                      default:
                          return isIdentifier();
                  }
              }
              function isStartOfParenthesizedOrFunctionType() {
                  nextToken();
                  return token === 17 || isStartOfParameter() || isStartOfType();
              }
              function parseArrayTypeOrHigher() {
                  var type = parseNonArrayType();
                  while (!scanner.hasPrecedingLineBreak() && parseOptional(18)) {
                      parseExpected(19);
                      var node = createNode(147, type.pos);
                      node.elementType = type;
                      type = finishNode(node);
                  }
                  return type;
              }
              function parseUnionTypeOrHigher() {
                  var type = parseArrayTypeOrHigher();
                  if (token === 44) {
                      var types = [type];
                      types.pos = type.pos;
                      while (parseOptional(44)) {
                          types.push(parseArrayTypeOrHigher());
                      }
                      types.end = getNodeEnd();
                      var node = createNode(149, type.pos);
                      node.types = types;
                      type = finishNode(node);
                  }
                  return type;
              }
              function isStartOfFunctionType() {
                  if (token === 24) {
                      return true;
                  }
                  return token === 16 && lookAhead(isUnambiguouslyStartOfFunctionType);
              }
              function isUnambiguouslyStartOfFunctionType() {
                  nextToken();
                  if (token === 17 || token === 21) {
                      return true;
                  }
                  if (isIdentifier() || ts.isModifier(token)) {
                      nextToken();
                      if (token === 51 || token === 23 ||
                          token === 50 || token === 53 ||
                          isIdentifier() || ts.isModifier(token)) {
                          return true;
                      }
                      if (token === 17) {
                          nextToken();
                          if (token === 32) {
                              return true;
                          }
                      }
                  }
                  return false;
              }
              function parseType() {
                  var savedYieldContext = inYieldContext();
                  var savedGeneratorParameterContext = inGeneratorParameterContext();
                  setYieldContext(false);
                  setGeneratorParameterContext(false);
                  var result = parseTypeWorker();
                  setYieldContext(savedYieldContext);
                  setGeneratorParameterContext(savedGeneratorParameterContext);
                  return result;
              }
              function parseTypeWorker() {
                  if (isStartOfFunctionType()) {
                      return parseFunctionOrConstructorType(143);
                  }
                  if (token === 88) {
                      return parseFunctionOrConstructorType(144);
                  }
                  return parseUnionTypeOrHigher();
              }
              function parseTypeAnnotation() {
                  return parseOptional(51) ? parseType() : undefined;
              }
              function isStartOfLeftHandSideExpression() {
                  switch (token) {
                      case 93:
                      case 91:
                      case 89:
                      case 95:
                      case 80:
                      case 7:
                      case 8:
                      case 10:
                      case 11:
                      case 16:
                      case 18:
                      case 14:
                      case 83:
                      case 69:
                      case 88:
                      case 36:
                      case 57:
                      case 65:
                          return true;
                      default:
                          return isIdentifier();
                  }
              }
              function isStartOfExpression() {
                  if (isStartOfLeftHandSideExpression()) {
                      return true;
                  }
                  switch (token) {
                      case 33:
                      case 34:
                      case 47:
                      case 46:
                      case 74:
                      case 97:
                      case 99:
                      case 38:
                      case 39:
                      case 24:
                      case 110:
                          return true;
                      default:
                          if (isBinaryOperator()) {
                              return true;
                          }
                          return isIdentifier();
                  }
              }
              function isStartOfExpressionStatement() {
                  return token !== 14 &&
                      token !== 83 &&
                      token !== 69 &&
                      token !== 52 &&
                      isStartOfExpression();
              }
              function parseExpression() {
                  // Expression[in]:
                  //      AssignmentExpression[in]
                  //      Expression[in] , AssignmentExpression[in]
                  var saveDecoratorContext = inDecoratorContext();
                  if (saveDecoratorContext) {
                      setDecoratorContext(false);
                  }
                  var expr = parseAssignmentExpressionOrHigher();
                  var operatorToken;
                  while ((operatorToken = parseOptionalToken(23))) {
                      expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher());
                  }
                  if (saveDecoratorContext) {
                      setDecoratorContext(true);
                  }
                  return expr;
              }
              function parseInitializer(inParameter) {
                  if (token !== 53) {
                      if (scanner.hasPrecedingLineBreak() || (inParameter && token === 14) || !isStartOfExpression()) {
                          return undefined;
                      }
                  }
                  parseExpected(53);
                  return parseAssignmentExpressionOrHigher();
              }
              function parseAssignmentExpressionOrHigher() {
                  //  AssignmentExpression[in,yield]:
                  //      1) ConditionalExpression[?in,?yield]
                  //      2) LeftHandSideExpression = AssignmentExpression[?in,?yield]
                  //      3) LeftHandSideExpression AssignmentOperator AssignmentExpression[?in,?yield]
                  //      4) ArrowFunctionExpression[?in,?yield]
                  //      5) [+Yield] YieldExpression[?In]
                  //
                  // Note: for ease of implementation we treat productions '2' and '3' as the same thing.
                  // (i.e. they're both BinaryExpressions with an assignment operator in it).
                  if (isYieldExpression()) {
                      return parseYieldExpression();
                  }
                  var arrowExpression = tryParseParenthesizedArrowFunctionExpression();
                  if (arrowExpression) {
                      return arrowExpression;
                  }
                  var expr = parseBinaryExpressionOrHigher(0);
                  if (expr.kind === 65 && token === 32) {
                      return parseSimpleArrowFunctionExpression(expr);
                  }
                  if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) {
                      return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher());
                  }
                  return parseConditionalExpressionRest(expr);
              }
              function isYieldExpression() {
                  if (token === 110) {
                      if (inYieldContext()) {
                          return true;
                      }
                      if (inStrictModeContext()) {
                          return true;
                      }
                      return lookAhead(nextTokenIsIdentifierOnSameLine);
                  }
                  return false;
              }
              function nextTokenIsIdentifierOnSameLine() {
                  nextToken();
                  return !scanner.hasPrecedingLineBreak() && isIdentifier();
              }
              function nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine() {
                  nextToken();
                  return !scanner.hasPrecedingLineBreak() &&
                      (isIdentifier() || token === 14 || token === 18);
              }
              function parseYieldExpression() {
                  var node = createNode(173);
                  nextToken();
                  if (!scanner.hasPrecedingLineBreak() &&
                      (token === 35 || isStartOfExpression())) {
                      node.asteriskToken = parseOptionalToken(35);
                      node.expression = parseAssignmentExpressionOrHigher();
                      return finishNode(node);
                  }
                  else {
                      return finishNode(node);
                  }
              }
              function parseSimpleArrowFunctionExpression(identifier) {
                  ts.Debug.assert(token === 32, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
                  var node = createNode(164, identifier.pos);
                  var parameter = createNode(130, identifier.pos);
                  parameter.name = identifier;
                  finishNode(parameter);
                  node.parameters = [parameter];
                  node.parameters.pos = parameter.pos;
                  node.parameters.end = parameter.end;
                  node.equalsGreaterThanToken = parseExpectedToken(32, false, ts.Diagnostics._0_expected, "=>");
                  node.body = parseArrowFunctionExpressionBody();
                  return finishNode(node);
              }
              function tryParseParenthesizedArrowFunctionExpression() {
                  var triState = isParenthesizedArrowFunctionExpression();
                  if (triState === 0) {
                      return undefined;
                  }
                  var arrowFunction = triState === 1
                      ? parseParenthesizedArrowFunctionExpressionHead(true)
                      : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead);
                  if (!arrowFunction) {
                      return undefined;
                  }
                  var lastToken = token;
                  arrowFunction.equalsGreaterThanToken = parseExpectedToken(32, false, ts.Diagnostics._0_expected, "=>");
                  arrowFunction.body = (lastToken === 32 || lastToken === 14)
                      ? parseArrowFunctionExpressionBody()
                      : parseIdentifier();
                  return finishNode(arrowFunction);
              }
              function isParenthesizedArrowFunctionExpression() {
                  if (token === 16 || token === 24) {
                      return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
                  }
                  if (token === 32) {
                      return 1;
                  }
                  return 0;
              }
              function isParenthesizedArrowFunctionExpressionWorker() {
                  var first = token;
                  var second = nextToken();
                  if (first === 16) {
                      if (second === 17) {
                          var third = nextToken();
                          switch (third) {
                              case 32:
                              case 51:
                              case 14:
                                  return 1;
                              default:
                                  return 0;
                          }
                      }
                      if (second === 18 || second === 14) {
                          return 2;
                      }
                      if (second === 21) {
                          return 1;
                      }
                      if (!isIdentifier()) {
                          return 0;
                      }
                      if (nextToken() === 51) {
                          return 1;
                      }
                      return 2;
                  }
                  else {
                      ts.Debug.assert(first === 24);
                      if (!isIdentifier()) {
                          return 0;
                      }
                      return 2;
                  }
              }
              function parsePossibleParenthesizedArrowFunctionExpressionHead() {
                  return parseParenthesizedArrowFunctionExpressionHead(false);
              }
              function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) {
                  var node = createNode(164);
                  fillSignature(51, false, !allowAmbiguity, node);
                  if (!node.parameters) {
                      return undefined;
                  }
                  if (!allowAmbiguity && token !== 32 && token !== 14) {
                      return undefined;
                  }
                  return node;
              }
              function parseArrowFunctionExpressionBody() {
                  if (token === 14) {
                      return parseFunctionBlock(false, false);
                  }
                  if (isStartOfStatement(true) &&
                      !isStartOfExpressionStatement() &&
                      token !== 83 &&
                      token !== 69) {
                      return parseFunctionBlock(false, true);
                  }
                  return parseAssignmentExpressionOrHigher();
              }
              function parseConditionalExpressionRest(leftOperand) {
                  var questionToken = parseOptionalToken(50);
                  if (!questionToken) {
                      return leftOperand;
                  }
                  var node = createNode(171, leftOperand.pos);
                  node.condition = leftOperand;
                  node.questionToken = questionToken;
                  node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher);
                  node.colonToken = parseExpectedToken(51, false, ts.Diagnostics._0_expected, ts.tokenToString(51));
                  node.whenFalse = parseAssignmentExpressionOrHigher();
                  return finishNode(node);
              }
              function parseBinaryExpressionOrHigher(precedence) {
                  var leftOperand = parseUnaryExpressionOrHigher();
                  return parseBinaryExpressionRest(precedence, leftOperand);
              }
              function isInOrOfKeyword(t) {
                  return t === 86 || t === 126;
              }
              function parseBinaryExpressionRest(precedence, leftOperand) {
                  while (true) {
                      reScanGreaterToken();
                      var newPrecedence = getBinaryOperatorPrecedence();
                      if (newPrecedence <= precedence) {
                          break;
                      }
                      if (token === 86 && inDisallowInContext()) {
                          break;
                      }
                      leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence));
                  }
                  return leftOperand;
              }
              function isBinaryOperator() {
                  if (inDisallowInContext() && token === 86) {
                      return false;
                  }
                  return getBinaryOperatorPrecedence() > 0;
              }
              function getBinaryOperatorPrecedence() {
                  switch (token) {
                      case 49:
                          return 1;
                      case 48:
                          return 2;
                      case 44:
                          return 3;
                      case 45:
                          return 4;
                      case 43:
                          return 5;
                      case 28:
                      case 29:
                      case 30:
                      case 31:
                          return 6;
                      case 24:
                      case 25:
                      case 26:
                      case 27:
                      case 87:
                      case 86:
                          return 7;
                      case 40:
                      case 41:
                      case 42:
                          return 8;
                      case 33:
                      case 34:
                          return 9;
                      case 35:
                      case 36:
                      case 37:
                          return 10;
                  }
                  return -1;
              }
              function makeBinaryExpression(left, operatorToken, right) {
                  var node = createNode(170, left.pos);
                  node.left = left;
                  node.operatorToken = operatorToken;
                  node.right = right;
                  return finishNode(node);
              }
              function parsePrefixUnaryExpression() {
                  var node = createNode(168);
                  node.operator = token;
                  nextToken();
                  node.operand = parseUnaryExpressionOrHigher();
                  return finishNode(node);
              }
              function parseDeleteExpression() {
                  var node = createNode(165);
                  nextToken();
                  node.expression = parseUnaryExpressionOrHigher();
                  return finishNode(node);
              }
              function parseTypeOfExpression() {
                  var node = createNode(166);
                  nextToken();
                  node.expression = parseUnaryExpressionOrHigher();
                  return finishNode(node);
              }
              function parseVoidExpression() {
                  var node = createNode(167);
                  nextToken();
                  node.expression = parseUnaryExpressionOrHigher();
                  return finishNode(node);
              }
              function parseUnaryExpressionOrHigher() {
                  switch (token) {
                      case 33:
                      case 34:
                      case 47:
                      case 46:
                      case 38:
                      case 39:
                          return parsePrefixUnaryExpression();
                      case 74:
                          return parseDeleteExpression();
                      case 97:
                          return parseTypeOfExpression();
                      case 99:
                          return parseVoidExpression();
                      case 24:
                          return parseTypeAssertion();
                      default:
                          return parsePostfixExpressionOrHigher();
                  }
              }
              function parsePostfixExpressionOrHigher() {
                  var expression = parseLeftHandSideExpressionOrHigher();
                  ts.Debug.assert(ts.isLeftHandSideExpression(expression));
                  if ((token === 38 || token === 39) && !scanner.hasPrecedingLineBreak()) {
                      var node = createNode(169, expression.pos);
                      node.operand = expression;
                      node.operator = token;
                      nextToken();
                      return finishNode(node);
                  }
                  return expression;
              }
              function parseLeftHandSideExpressionOrHigher() {
                  var expression = token === 91
                      ? parseSuperExpression()
                      : parseMemberExpressionOrHigher();
                  return parseCallExpressionRest(expression);
              }
              function parseMemberExpressionOrHigher() {
                  var expression = parsePrimaryExpression();
                  return parseMemberExpressionRest(expression);
              }
              function parseSuperExpression() {
                  var expression = parseTokenNode();
                  if (token === 16 || token === 20) {
                      return expression;
                  }
                  var node = createNode(156, expression.pos);
                  node.expression = expression;
                  node.dotToken = parseExpectedToken(20, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
                  node.name = parseRightSideOfDot(true);
                  return finishNode(node);
              }
              function parseTypeAssertion() {
                  var node = createNode(161);
                  parseExpected(24);
                  node.type = parseType();
                  parseExpected(25);
                  node.expression = parseUnaryExpressionOrHigher();
                  return finishNode(node);
              }
              function parseMemberExpressionRest(expression) {
                  while (true) {
                      var dotToken = parseOptionalToken(20);
                      if (dotToken) {
                          var propertyAccess = createNode(156, expression.pos);
                          propertyAccess.expression = expression;
                          propertyAccess.dotToken = dotToken;
                          propertyAccess.name = parseRightSideOfDot(true);
                          expression = finishNode(propertyAccess);
                          continue;
                      }
                      if (!inDecoratorContext() && parseOptional(18)) {
                          var indexedAccess = createNode(157, expression.pos);
                          indexedAccess.expression = expression;
                          if (token !== 19) {
                              indexedAccess.argumentExpression = allowInAnd(parseExpression);
                              if (indexedAccess.argumentExpression.kind === 8 || indexedAccess.argumentExpression.kind === 7) {
                                  var literal = indexedAccess.argumentExpression;
                                  literal.text = internIdentifier(literal.text);
                              }
                          }
                          parseExpected(19);
                          expression = finishNode(indexedAccess);
                          continue;
                      }
                      if (token === 10 || token === 11) {
                          var tagExpression = createNode(160, expression.pos);
                          tagExpression.tag = expression;
                          tagExpression.template = token === 10
                              ? parseLiteralNode()
                              : parseTemplateExpression();
                          expression = finishNode(tagExpression);
                          continue;
                      }
                      return expression;
                  }
              }
              function parseCallExpressionRest(expression) {
                  while (true) {
                      expression = parseMemberExpressionRest(expression);
                      if (token === 24) {
                          var typeArguments = tryParse(parseTypeArgumentsInExpression);
                          if (!typeArguments) {
                              return expression;
                          }
                          var callExpr = createNode(158, expression.pos);
                          callExpr.expression = expression;
                          callExpr.typeArguments = typeArguments;
                          callExpr.arguments = parseArgumentList();
                          expression = finishNode(callExpr);
                          continue;
                      }
                      else if (token === 16) {
                          var callExpr = createNode(158, expression.pos);
                          callExpr.expression = expression;
                          callExpr.arguments = parseArgumentList();
                          expression = finishNode(callExpr);
                          continue;
                      }
                      return expression;
                  }
              }
              function parseArgumentList() {
                  parseExpected(16);
                  var result = parseDelimitedList(12, parseArgumentExpression);
                  parseExpected(17);
                  return result;
              }
              function parseTypeArgumentsInExpression() {
                  if (!parseOptional(24)) {
                      return undefined;
                  }
                  var typeArguments = parseDelimitedList(17, parseType);
                  if (!parseExpected(25)) {
                      return undefined;
                  }
                  return typeArguments && canFollowTypeArgumentsInExpression()
                      ? typeArguments
                      : undefined;
              }
              function canFollowTypeArgumentsInExpression() {
                  switch (token) {
                      case 16:
                      case 20:
                      case 17:
                      case 19:
                      case 51:
                      case 22:
                      case 50:
                      case 28:
                      case 30:
                      case 29:
                      case 31:
                      case 48:
                      case 49:
                      case 45:
                      case 43:
                      case 44:
                      case 15:
                      case 1:
                          return true;
                      case 23:
                      case 14:
                      default:
                          return false;
                  }
              }
              function parsePrimaryExpression() {
                  switch (token) {
                      case 7:
                      case 8:
                      case 10:
                          return parseLiteralNode();
                      case 93:
                      case 91:
                      case 89:
                      case 95:
                      case 80:
                          return parseTokenNode();
                      case 16:
                          return parseParenthesizedExpression();
                      case 18:
                          return parseArrayLiteralExpression();
                      case 14:
                          return parseObjectLiteralExpression();
                      case 69:
                          return parseClassExpression();
                      case 83:
                          return parseFunctionExpression();
                      case 88:
                          return parseNewExpression();
                      case 36:
                      case 57:
                          if (reScanSlashToken() === 9) {
                              return parseLiteralNode();
                          }
                          break;
                      case 11:
                          return parseTemplateExpression();
                  }
                  return parseIdentifier(ts.Diagnostics.Expression_expected);
              }
              function parseParenthesizedExpression() {
                  var node = createNode(162);
                  parseExpected(16);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(17);
                  return finishNode(node);
              }
              function parseSpreadElement() {
                  var node = createNode(174);
                  parseExpected(21);
                  node.expression = parseAssignmentExpressionOrHigher();
                  return finishNode(node);
              }
              function parseArgumentOrArrayLiteralElement() {
                  return token === 21 ? parseSpreadElement() :
                      token === 23 ? createNode(176) :
                          parseAssignmentExpressionOrHigher();
              }
              function parseArgumentExpression() {
                  return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement);
              }
              function parseArrayLiteralExpression() {
                  var node = createNode(154);
                  parseExpected(18);
                  if (scanner.hasPrecedingLineBreak())
                      node.flags |= 512;
                  node.elements = parseDelimitedList(14, parseArgumentOrArrayLiteralElement);
                  parseExpected(19);
                  return finishNode(node);
              }
              function tryParseAccessorDeclaration(fullStart, decorators, modifiers) {
                  if (parseContextualModifier(116)) {
                      return parseAccessorDeclaration(137, fullStart, decorators, modifiers);
                  }
                  else if (parseContextualModifier(121)) {
                      return parseAccessorDeclaration(138, fullStart, decorators, modifiers);
                  }
                  return undefined;
              }
              function parseObjectLiteralElement() {
                  var fullStart = scanner.getStartPos();
                  var decorators = parseDecorators();
                  var modifiers = parseModifiers();
                  var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers);
                  if (accessor) {
                      return accessor;
                  }
                  var asteriskToken = parseOptionalToken(35);
                  var tokenIsIdentifier = isIdentifier();
                  var nameToken = token;
                  var propertyName = parsePropertyName();
                  var questionToken = parseOptionalToken(50);
                  if (asteriskToken || token === 16 || token === 24) {
                      return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, propertyName, questionToken);
                  }
                  if ((token === 23 || token === 15) && tokenIsIdentifier) {
                      var shorthandDeclaration = createNode(226, fullStart);
                      shorthandDeclaration.name = propertyName;
                      shorthandDeclaration.questionToken = questionToken;
                      return finishNode(shorthandDeclaration);
                  }
                  else {
                      var propertyAssignment = createNode(225, fullStart);
                      propertyAssignment.name = propertyName;
                      propertyAssignment.questionToken = questionToken;
                      parseExpected(51);
                      propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher);
                      return finishNode(propertyAssignment);
                  }
              }
              function parseObjectLiteralExpression() {
                  var node = createNode(155);
                  parseExpected(14);
                  if (scanner.hasPrecedingLineBreak()) {
                      node.flags |= 512;
                  }
                  node.properties = parseDelimitedList(13, parseObjectLiteralElement, true);
                  parseExpected(15);
                  return finishNode(node);
              }
              function parseFunctionExpression() {
                  var saveDecoratorContext = inDecoratorContext();
                  if (saveDecoratorContext) {
                      setDecoratorContext(false);
                  }
                  var node = createNode(163);
                  parseExpected(83);
                  node.asteriskToken = parseOptionalToken(35);
                  node.name = node.asteriskToken ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier();
                  fillSignature(51, !!node.asteriskToken, false, node);
                  node.body = parseFunctionBlock(!!node.asteriskToken, false);
                  if (saveDecoratorContext) {
                      setDecoratorContext(true);
                  }
                  return finishNode(node);
              }
              function parseOptionalIdentifier() {
                  return isIdentifier() ? parseIdentifier() : undefined;
              }
              function parseNewExpression() {
                  var node = createNode(159);
                  parseExpected(88);
                  node.expression = parseMemberExpressionOrHigher();
                  node.typeArguments = tryParse(parseTypeArgumentsInExpression);
                  if (node.typeArguments || token === 16) {
                      node.arguments = parseArgumentList();
                  }
                  return finishNode(node);
              }
              function parseBlock(ignoreMissingOpenBrace, checkForStrictMode, diagnosticMessage) {
                  var node = createNode(180);
                  if (parseExpected(14, diagnosticMessage) || ignoreMissingOpenBrace) {
                      node.statements = parseList(2, checkForStrictMode, parseStatement);
                      parseExpected(15);
                  }
                  else {
                      node.statements = createMissingList();
                  }
                  return finishNode(node);
              }
              function parseFunctionBlock(allowYield, ignoreMissingOpenBrace, diagnosticMessage) {
                  var savedYieldContext = inYieldContext();
                  setYieldContext(allowYield);
                  var saveDecoratorContext = inDecoratorContext();
                  if (saveDecoratorContext) {
                      setDecoratorContext(false);
                  }
                  var block = parseBlock(ignoreMissingOpenBrace, true, diagnosticMessage);
                  if (saveDecoratorContext) {
                      setDecoratorContext(true);
                  }
                  setYieldContext(savedYieldContext);
                  return block;
              }
              function parseEmptyStatement() {
                  var node = createNode(182);
                  parseExpected(22);
                  return finishNode(node);
              }
              function parseIfStatement() {
                  var node = createNode(184);
                  parseExpected(84);
                  parseExpected(16);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(17);
                  node.thenStatement = parseStatement();
                  node.elseStatement = parseOptional(76) ? parseStatement() : undefined;
                  return finishNode(node);
              }
              function parseDoStatement() {
                  var node = createNode(185);
                  parseExpected(75);
                  node.statement = parseStatement();
                  parseExpected(100);
                  parseExpected(16);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(17);
                  parseOptional(22);
                  return finishNode(node);
              }
              function parseWhileStatement() {
                  var node = createNode(186);
                  parseExpected(100);
                  parseExpected(16);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(17);
                  node.statement = parseStatement();
                  return finishNode(node);
              }
              function parseForOrForInOrForOfStatement() {
                  var pos = getNodePos();
                  parseExpected(82);
                  parseExpected(16);
                  var initializer = undefined;
                  if (token !== 22) {
                      if (token === 98 || token === 104 || token === 70) {
                          initializer = parseVariableDeclarationList(true);
                      }
                      else {
                          initializer = disallowInAnd(parseExpression);
                      }
                  }
                  var forOrForInOrForOfStatement;
                  if (parseOptional(86)) {
                      var forInStatement = createNode(188, pos);
                      forInStatement.initializer = initializer;
                      forInStatement.expression = allowInAnd(parseExpression);
                      parseExpected(17);
                      forOrForInOrForOfStatement = forInStatement;
                  }
                  else if (parseOptional(126)) {
                      var forOfStatement = createNode(189, pos);
                      forOfStatement.initializer = initializer;
                      forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher);
                      parseExpected(17);
                      forOrForInOrForOfStatement = forOfStatement;
                  }
                  else {
                      var forStatement = createNode(187, pos);
                      forStatement.initializer = initializer;
                      parseExpected(22);
                      if (token !== 22 && token !== 17) {
                          forStatement.condition = allowInAnd(parseExpression);
                      }
                      parseExpected(22);
                      if (token !== 17) {
                          forStatement.incrementor = allowInAnd(parseExpression);
                      }
                      parseExpected(17);
                      forOrForInOrForOfStatement = forStatement;
                  }
                  forOrForInOrForOfStatement.statement = parseStatement();
                  return finishNode(forOrForInOrForOfStatement);
              }
              function parseBreakOrContinueStatement(kind) {
                  var node = createNode(kind);
                  parseExpected(kind === 191 ? 66 : 71);
                  if (!canParseSemicolon()) {
                      node.label = parseIdentifier();
                  }
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseReturnStatement() {
                  var node = createNode(192);
                  parseExpected(90);
                  if (!canParseSemicolon()) {
                      node.expression = allowInAnd(parseExpression);
                  }
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseWithStatement() {
                  var node = createNode(193);
                  parseExpected(101);
                  parseExpected(16);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(17);
                  node.statement = parseStatement();
                  return finishNode(node);
              }
              function parseCaseClause() {
                  var node = createNode(221);
                  parseExpected(67);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(51);
                  node.statements = parseList(4, false, parseStatement);
                  return finishNode(node);
              }
              function parseDefaultClause() {
                  var node = createNode(222);
                  parseExpected(73);
                  parseExpected(51);
                  node.statements = parseList(4, false, parseStatement);
                  return finishNode(node);
              }
              function parseCaseOrDefaultClause() {
                  return token === 67 ? parseCaseClause() : parseDefaultClause();
              }
              function parseSwitchStatement() {
                  var node = createNode(194);
                  parseExpected(92);
                  parseExpected(16);
                  node.expression = allowInAnd(parseExpression);
                  parseExpected(17);
                  var caseBlock = createNode(208, scanner.getStartPos());
                  parseExpected(14);
                  caseBlock.clauses = parseList(3, false, parseCaseOrDefaultClause);
                  parseExpected(15);
                  node.caseBlock = finishNode(caseBlock);
                  return finishNode(node);
              }
              function parseThrowStatement() {
                  // ThrowStatement[Yield] :
                  //      throw [no LineTerminator here]Expression[In, ?Yield];
                  var node = createNode(196);
                  parseExpected(94);
                  node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseTryStatement() {
                  var node = createNode(197);
                  parseExpected(96);
                  node.tryBlock = parseBlock(false, false);
                  node.catchClause = token === 68 ? parseCatchClause() : undefined;
                  if (!node.catchClause || token === 81) {
                      parseExpected(81);
                      node.finallyBlock = parseBlock(false, false);
                  }
                  return finishNode(node);
              }
              function parseCatchClause() {
                  var result = createNode(224);
                  parseExpected(68);
                  if (parseExpected(16)) {
                      result.variableDeclaration = parseVariableDeclaration();
                  }
                  parseExpected(17);
                  result.block = parseBlock(false, false);
                  return finishNode(result);
              }
              function parseDebuggerStatement() {
                  var node = createNode(198);
                  parseExpected(72);
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseExpressionOrLabeledStatement() {
                  var fullStart = scanner.getStartPos();
                  var expression = allowInAnd(parseExpression);
                  if (expression.kind === 65 && parseOptional(51)) {
                      var labeledStatement = createNode(195, fullStart);
                      labeledStatement.label = expression;
                      labeledStatement.statement = parseStatement();
                      return finishNode(labeledStatement);
                  }
                  else {
                      var expressionStatement = createNode(183, fullStart);
                      expressionStatement.expression = expression;
                      parseSemicolon();
                      return finishNode(expressionStatement);
                  }
              }
              function isStartOfStatement(inErrorRecovery) {
                  if (ts.isModifier(token)) {
                      var result = lookAhead(parseVariableStatementOrFunctionDeclarationOrClassDeclarationWithDecoratorsOrModifiers);
                      if (result) {
                          return true;
                      }
                  }
                  switch (token) {
                      case 22:
                          return !inErrorRecovery;
                      case 14:
                      case 98:
                      case 104:
                      case 83:
                      case 69:
                      case 84:
                      case 75:
                      case 100:
                      case 82:
                      case 71:
                      case 66:
                      case 90:
                      case 101:
                      case 92:
                      case 94:
                      case 96:
                      case 72:
                      case 68:
                      case 81:
                          return true;
                      case 70:
                          var isConstEnum = lookAhead(nextTokenIsEnumKeyword);
                          return !isConstEnum;
                      case 103:
                      case 117:
                      case 118:
                      case 77:
                      case 124:
                          if (isDeclarationStart()) {
                              return false;
                          }
                      case 108:
                      case 106:
                      case 107:
                      case 109:
                          if (lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine)) {
                              return false;
                          }
                      default:
                          return isStartOfExpression();
                  }
              }
              function nextTokenIsEnumKeyword() {
                  nextToken();
                  return token === 77;
              }
              function nextTokenIsIdentifierOrKeywordOnSameLine() {
                  nextToken();
                  return isIdentifierOrKeyword() && !scanner.hasPrecedingLineBreak();
              }
              function parseStatement() {
                  switch (token) {
                      case 14:
                          return parseBlock(false, false);
                      case 98:
                      case 70:
                          return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
                      case 83:
                          return parseFunctionDeclaration(scanner.getStartPos(), undefined, undefined);
                      case 69:
                          return parseClassDeclaration(scanner.getStartPos(), undefined, undefined);
                      case 22:
                          return parseEmptyStatement();
                      case 84:
                          return parseIfStatement();
                      case 75:
                          return parseDoStatement();
                      case 100:
                          return parseWhileStatement();
                      case 82:
                          return parseForOrForInOrForOfStatement();
                      case 71:
                          return parseBreakOrContinueStatement(190);
                      case 66:
                          return parseBreakOrContinueStatement(191);
                      case 90:
                          return parseReturnStatement();
                      case 101:
                          return parseWithStatement();
                      case 92:
                          return parseSwitchStatement();
                      case 94:
                          return parseThrowStatement();
                      case 96:
                      case 68:
                      case 81:
                          return parseTryStatement();
                      case 72:
                          return parseDebuggerStatement();
                      case 104:
                          if (isLetDeclaration()) {
                              return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
                          }
                      default:
                          if (ts.isModifier(token) || token === 52) {
                              var result = tryParse(parseVariableStatementOrFunctionDeclarationOrClassDeclarationWithDecoratorsOrModifiers);
                              if (result) {
                                  return result;
                              }
                          }
                          return parseExpressionOrLabeledStatement();
                  }
              }
              function parseVariableStatementOrFunctionDeclarationOrClassDeclarationWithDecoratorsOrModifiers() {
                  var start = scanner.getStartPos();
                  var decorators = parseDecorators();
                  var modifiers = parseModifiers();
                  switch (token) {
                      case 70:
                          var nextTokenIsEnum = lookAhead(nextTokenIsEnumKeyword);
                          if (nextTokenIsEnum) {
                              return undefined;
                          }
                          return parseVariableStatement(start, decorators, modifiers);
                      case 104:
                          if (!isLetDeclaration()) {
                              return undefined;
                          }
                          return parseVariableStatement(start, decorators, modifiers);
                      case 98:
                          return parseVariableStatement(start, decorators, modifiers);
                      case 83:
                          return parseFunctionDeclaration(start, decorators, modifiers);
                      case 69:
                          return parseClassDeclaration(start, decorators, modifiers);
                  }
                  return undefined;
              }
              function parseFunctionBlockOrSemicolon(isGenerator, diagnosticMessage) {
                  if (token !== 14 && canParseSemicolon()) {
                      parseSemicolon();
                      return;
                  }
                  return parseFunctionBlock(isGenerator, false, diagnosticMessage);
              }
              function parseArrayBindingElement() {
                  if (token === 23) {
                      return createNode(176);
                  }
                  var node = createNode(153);
                  node.dotDotDotToken = parseOptionalToken(21);
                  node.name = parseIdentifierOrPattern();
                  node.initializer = parseInitializer(false);
                  return finishNode(node);
              }
              function parseObjectBindingElement() {
                  var node = createNode(153);
                  var tokenIsIdentifier = isIdentifier();
                  var propertyName = parsePropertyName();
                  if (tokenIsIdentifier && token !== 51) {
                      node.name = propertyName;
                  }
                  else {
                      parseExpected(51);
                      node.propertyName = propertyName;
                      node.name = parseIdentifierOrPattern();
                  }
                  node.initializer = parseInitializer(false);
                  return finishNode(node);
              }
              function parseObjectBindingPattern() {
                  var node = createNode(151);
                  parseExpected(14);
                  node.elements = parseDelimitedList(10, parseObjectBindingElement);
                  parseExpected(15);
                  return finishNode(node);
              }
              function parseArrayBindingPattern() {
                  var node = createNode(152);
                  parseExpected(18);
                  node.elements = parseDelimitedList(11, parseArrayBindingElement);
                  parseExpected(19);
                  return finishNode(node);
              }
              function isIdentifierOrPattern() {
                  return token === 14 || token === 18 || isIdentifier();
              }
              function parseIdentifierOrPattern() {
                  if (token === 18) {
                      return parseArrayBindingPattern();
                  }
                  if (token === 14) {
                      return parseObjectBindingPattern();
                  }
                  return parseIdentifier();
              }
              function parseVariableDeclaration() {
                  var node = createNode(199);
                  node.name = parseIdentifierOrPattern();
                  node.type = parseTypeAnnotation();
                  if (!isInOrOfKeyword(token)) {
                      node.initializer = parseInitializer(false);
                  }
                  return finishNode(node);
              }
              function parseVariableDeclarationList(inForStatementInitializer) {
                  var node = createNode(200);
                  switch (token) {
                      case 98:
                          break;
                      case 104:
                          node.flags |= 4096;
                          break;
                      case 70:
                          node.flags |= 8192;
                          break;
                      default:
                          ts.Debug.fail();
                  }
                  nextToken();
                  if (token === 126 && lookAhead(canFollowContextualOfKeyword)) {
                      node.declarations = createMissingList();
                  }
                  else {
                      var savedDisallowIn = inDisallowInContext();
                      setDisallowInContext(inForStatementInitializer);
                      node.declarations = parseDelimitedList(9, parseVariableDeclaration);
                      setDisallowInContext(savedDisallowIn);
                  }
                  return finishNode(node);
              }
              function canFollowContextualOfKeyword() {
                  return nextTokenIsIdentifier() && nextToken() === 17;
              }
              function parseVariableStatement(fullStart, decorators, modifiers) {
                  var node = createNode(181, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  node.declarationList = parseVariableDeclarationList(false);
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseFunctionDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(201, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  parseExpected(83);
                  node.asteriskToken = parseOptionalToken(35);
                  node.name = node.flags & 256 ? parseOptionalIdentifier() : parseIdentifier();
                  fillSignature(51, !!node.asteriskToken, false, node);
                  node.body = parseFunctionBlockOrSemicolon(!!node.asteriskToken, ts.Diagnostics.or_expected);
                  return finishNode(node);
              }
              function parseConstructorDeclaration(pos, decorators, modifiers) {
                  var node = createNode(136, pos);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  parseExpected(114);
                  fillSignature(51, false, false, node);
                  node.body = parseFunctionBlockOrSemicolon(false, ts.Diagnostics.or_expected);
                  return finishNode(node);
              }
              function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) {
                  var method = createNode(135, fullStart);
                  method.decorators = decorators;
                  setModifiers(method, modifiers);
                  method.asteriskToken = asteriskToken;
                  method.name = name;
                  method.questionToken = questionToken;
                  fillSignature(51, !!asteriskToken, false, method);
                  method.body = parseFunctionBlockOrSemicolon(!!asteriskToken, diagnosticMessage);
                  return finishNode(method);
              }
              function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) {
                  var property = createNode(133, fullStart);
                  property.decorators = decorators;
                  setModifiers(property, modifiers);
                  property.name = name;
                  property.questionToken = questionToken;
                  property.type = parseTypeAnnotation();
                  property.initializer = allowInAnd(parseNonParameterInitializer);
                  parseSemicolon();
                  return finishNode(property);
              }
              function parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers) {
                  var asteriskToken = parseOptionalToken(35);
                  var name = parsePropertyName();
                  var questionToken = parseOptionalToken(50);
                  if (asteriskToken || token === 16 || token === 24) {
                      return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, ts.Diagnostics.or_expected);
                  }
                  else {
                      return parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken);
                  }
              }
              function parseNonParameterInitializer() {
                  return parseInitializer(false);
              }
              function parseAccessorDeclaration(kind, fullStart, decorators, modifiers) {
                  var node = createNode(kind, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  node.name = parsePropertyName();
                  fillSignature(51, false, false, node);
                  node.body = parseFunctionBlockOrSemicolon(false);
                  return finishNode(node);
              }
              function isClassMemberModifier(idToken) {
                  switch (idToken) {
                      case 108:
                      case 106:
                      case 107:
                      case 109:
                          return true;
                      default:
                          return false;
                  }
              }
              function isClassMemberStart() {
                  var idToken;
                  if (token === 52) {
                      return true;
                  }
                  while (ts.isModifier(token)) {
                      idToken = token;
                      if (isClassMemberModifier(idToken)) {
                          return true;
                      }
                      nextToken();
                  }
                  if (token === 35) {
                      return true;
                  }
                  if (isLiteralPropertyName()) {
                      idToken = token;
                      nextToken();
                  }
                  if (token === 18) {
                      return true;
                  }
                  if (idToken !== undefined) {
                      if (!ts.isKeyword(idToken) || idToken === 121 || idToken === 116) {
                          return true;
                      }
                      switch (token) {
                          case 16:
                          case 24:
                          case 51:
                          case 53:
                          case 50:
                              return true;
                          default:
                              return canParseSemicolon();
                      }
                  }
                  return false;
              }
              function parseDecorators() {
                  var decorators;
                  while (true) {
                      var decoratorStart = getNodePos();
                      if (!parseOptional(52)) {
                          break;
                      }
                      if (!decorators) {
                          decorators = [];
                          decorators.pos = scanner.getStartPos();
                      }
                      var decorator = createNode(131, decoratorStart);
                      decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher);
                      decorators.push(finishNode(decorator));
                  }
                  if (decorators) {
                      decorators.end = getNodeEnd();
                  }
                  return decorators;
              }
              function parseModifiers() {
                  var flags = 0;
                  var modifiers;
                  while (true) {
                      var modifierStart = scanner.getStartPos();
                      var modifierKind = token;
                      if (!parseAnyContextualModifier()) {
                          break;
                      }
                      if (!modifiers) {
                          modifiers = [];
                          modifiers.pos = modifierStart;
                      }
                      flags |= ts.modifierToFlag(modifierKind);
                      modifiers.push(finishNode(createNode(modifierKind, modifierStart)));
                  }
                  if (modifiers) {
                      modifiers.flags = flags;
                      modifiers.end = scanner.getStartPos();
                  }
                  return modifiers;
              }
              function parseClassElement() {
                  if (token === 22) {
                      var result = createNode(179);
                      nextToken();
                      return finishNode(result);
                  }
                  var fullStart = getNodePos();
                  var decorators = parseDecorators();
                  var modifiers = parseModifiers();
                  var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers);
                  if (accessor) {
                      return accessor;
                  }
                  if (token === 114) {
                      return parseConstructorDeclaration(fullStart, decorators, modifiers);
                  }
                  if (isIndexSignature()) {
                      return parseIndexSignatureDeclaration(fullStart, decorators, modifiers);
                  }
                  if (isIdentifierOrKeyword() ||
                      token === 8 ||
                      token === 7 ||
                      token === 35 ||
                      token === 18) {
                      return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers);
                  }
                  if (decorators) {
                      var name_3 = createMissingNode(65, true, ts.Diagnostics.Declaration_expected);
                      return parsePropertyDeclaration(fullStart, decorators, modifiers, name_3, undefined);
                  }
                  ts.Debug.fail("Should not have attempted to parse class member declaration.");
              }
              function parseClassExpression() {
                  return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 175);
              }
              function parseClassDeclaration(fullStart, decorators, modifiers) {
                  return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 202);
              }
              function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) {
                  var savedStrictModeContext = inStrictModeContext();
                  setStrictModeContext(true);
                  var node = createNode(kind, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  parseExpected(69);
                  node.name = parseOptionalIdentifier();
                  node.typeParameters = parseTypeParameters();
                  node.heritageClauses = parseHeritageClauses(true);
                  if (parseExpected(14)) {
                      node.members = inGeneratorParameterContext()
                          ? doOutsideOfYieldContext(parseClassMembers)
                          : parseClassMembers();
                      parseExpected(15);
                  }
                  else {
                      node.members = createMissingList();
                  }
                  var finishedNode = finishNode(node);
                  setStrictModeContext(savedStrictModeContext);
                  return finishedNode;
              }
              function parseHeritageClauses(isClassHeritageClause) {
                  // ClassTail[Yield,GeneratorParameter] : See 14.5
                  //      [~GeneratorParameter]ClassHeritage[?Yield]opt { ClassBody[?Yield]opt }
                  //      [+GeneratorParameter] ClassHeritageopt { ClassBodyopt }
                  if (isHeritageClause()) {
                      return isClassHeritageClause && inGeneratorParameterContext()
                          ? doOutsideOfYieldContext(parseHeritageClausesWorker)
                          : parseHeritageClausesWorker();
                  }
                  return undefined;
              }
              function parseHeritageClausesWorker() {
                  return parseList(19, false, parseHeritageClause);
              }
              function parseHeritageClause() {
                  if (token === 79 || token === 102) {
                      var node = createNode(223);
                      node.token = token;
                      nextToken();
                      node.types = parseDelimitedList(8, parseExpressionWithTypeArguments);
                      return finishNode(node);
                  }
                  return undefined;
              }
              function parseExpressionWithTypeArguments() {
                  var node = createNode(177);
                  node.expression = parseLeftHandSideExpressionOrHigher();
                  if (token === 24) {
                      node.typeArguments = parseBracketedList(17, parseType, 24, 25);
                  }
                  return finishNode(node);
              }
              function isHeritageClause() {
                  return token === 79 || token === 102;
              }
              function parseClassMembers() {
                  return parseList(6, false, parseClassElement);
              }
              function parseInterfaceDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(203, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  parseExpected(103);
                  node.name = parseIdentifier();
                  node.typeParameters = parseTypeParameters();
                  node.heritageClauses = parseHeritageClauses(false);
                  node.members = parseObjectTypeMembers();
                  return finishNode(node);
              }
              function parseTypeAliasDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(204, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  parseExpected(124);
                  node.name = parseIdentifier();
                  parseExpected(53);
                  node.type = parseType();
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseEnumMember() {
                  var node = createNode(227, scanner.getStartPos());
                  node.name = parsePropertyName();
                  node.initializer = allowInAnd(parseNonParameterInitializer);
                  return finishNode(node);
              }
              function parseEnumDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(205, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  parseExpected(77);
                  node.name = parseIdentifier();
                  if (parseExpected(14)) {
                      node.members = parseDelimitedList(7, parseEnumMember);
                      parseExpected(15);
                  }
                  else {
                      node.members = createMissingList();
                  }
                  return finishNode(node);
              }
              function parseModuleBlock() {
                  var node = createNode(207, scanner.getStartPos());
                  if (parseExpected(14)) {
                      node.statements = parseList(1, false, parseModuleElement);
                      parseExpected(15);
                  }
                  else {
                      node.statements = createMissingList();
                  }
                  return finishNode(node);
              }
              function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) {
                  var node = createNode(206, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  node.flags |= flags;
                  node.name = parseIdentifier();
                  node.body = parseOptional(20)
                      ? parseModuleOrNamespaceDeclaration(getNodePos(), undefined, undefined, 1)
                      : parseModuleBlock();
                  return finishNode(node);
              }
              function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(206, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  node.name = parseLiteralNode(true);
                  node.body = parseModuleBlock();
                  return finishNode(node);
              }
              function parseModuleDeclaration(fullStart, decorators, modifiers) {
                  var flags = modifiers ? modifiers.flags : 0;
                  if (parseOptional(118)) {
                      flags |= 32768;
                  }
                  else {
                      parseExpected(117);
                      if (token === 8) {
                          return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers);
                      }
                  }
                  return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags);
              }
              function isExternalModuleReference() {
                  return token === 119 &&
                      lookAhead(nextTokenIsOpenParen);
              }
              function nextTokenIsOpenParen() {
                  return nextToken() === 16;
              }
              function nextTokenIsCommaOrFromKeyword() {
                  nextToken();
                  return token === 23 ||
                      token === 125;
              }
              function parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers) {
                  parseExpected(85);
                  var afterImportPos = scanner.getStartPos();
                  var identifier;
                  if (isIdentifier()) {
                      identifier = parseIdentifier();
                      if (token !== 23 && token !== 125) {
                          var importEqualsDeclaration = createNode(209, fullStart);
                          importEqualsDeclaration.decorators = decorators;
                          setModifiers(importEqualsDeclaration, modifiers);
                          importEqualsDeclaration.name = identifier;
                          parseExpected(53);
                          importEqualsDeclaration.moduleReference = parseModuleReference();
                          parseSemicolon();
                          return finishNode(importEqualsDeclaration);
                      }
                  }
                  var importDeclaration = createNode(210, fullStart);
                  importDeclaration.decorators = decorators;
                  setModifiers(importDeclaration, modifiers);
                  if (identifier ||
                      token === 35 ||
                      token === 14) {
                      importDeclaration.importClause = parseImportClause(identifier, afterImportPos);
                      parseExpected(125);
                  }
                  importDeclaration.moduleSpecifier = parseModuleSpecifier();
                  parseSemicolon();
                  return finishNode(importDeclaration);
              }
              function parseImportClause(identifier, fullStart) {
                  //ImportClause:
                  //  ImportedDefaultBinding
                  //  NameSpaceImport
                  //  NamedImports
                  //  ImportedDefaultBinding, NameSpaceImport
                  //  ImportedDefaultBinding, NamedImports
                  var importClause = createNode(211, fullStart);
                  if (identifier) {
                      importClause.name = identifier;
                  }
                  if (!importClause.name ||
                      parseOptional(23)) {
                      importClause.namedBindings = token === 35 ? parseNamespaceImport() : parseNamedImportsOrExports(213);
                  }
                  return finishNode(importClause);
              }
              function parseModuleReference() {
                  return isExternalModuleReference()
                      ? parseExternalModuleReference()
                      : parseEntityName(false);
              }
              function parseExternalModuleReference() {
                  var node = createNode(220);
                  parseExpected(119);
                  parseExpected(16);
                  node.expression = parseModuleSpecifier();
                  parseExpected(17);
                  return finishNode(node);
              }
              function parseModuleSpecifier() {
                  var result = parseExpression();
                  if (result.kind === 8) {
                      internIdentifier(result.text);
                  }
                  return result;
              }
              function parseNamespaceImport() {
                  var namespaceImport = createNode(212);
                  parseExpected(35);
                  parseExpected(111);
                  namespaceImport.name = parseIdentifier();
                  return finishNode(namespaceImport);
              }
              function parseNamedImportsOrExports(kind) {
                  var node = createNode(kind);
                  node.elements = parseBracketedList(20, kind === 213 ? parseImportSpecifier : parseExportSpecifier, 14, 15);
                  return finishNode(node);
              }
              function parseExportSpecifier() {
                  return parseImportOrExportSpecifier(218);
              }
              function parseImportSpecifier() {
                  return parseImportOrExportSpecifier(214);
              }
              function parseImportOrExportSpecifier(kind) {
                  var node = createNode(kind);
                  var checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier();
                  var checkIdentifierStart = scanner.getTokenPos();
                  var checkIdentifierEnd = scanner.getTextPos();
                  var identifierName = parseIdentifierName();
                  if (token === 111) {
                      node.propertyName = identifierName;
                      parseExpected(111);
                      checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier();
                      checkIdentifierStart = scanner.getTokenPos();
                      checkIdentifierEnd = scanner.getTextPos();
                      node.name = parseIdentifierName();
                  }
                  else {
                      node.name = identifierName;
                  }
                  if (kind === 214 && checkIdentifierIsKeyword) {
                      parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected);
                  }
                  return finishNode(node);
              }
              function parseExportDeclaration(fullStart, decorators, modifiers) {
                  var node = createNode(216, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  if (parseOptional(35)) {
                      parseExpected(125);
                      node.moduleSpecifier = parseModuleSpecifier();
                  }
                  else {
                      node.exportClause = parseNamedImportsOrExports(217);
                      if (parseOptional(125)) {
                          node.moduleSpecifier = parseModuleSpecifier();
                      }
                  }
                  parseSemicolon();
                  return finishNode(node);
              }
              function parseExportAssignment(fullStart, decorators, modifiers) {
                  var node = createNode(215, fullStart);
                  node.decorators = decorators;
                  setModifiers(node, modifiers);
                  if (parseOptional(53)) {
                      node.isExportEquals = true;
                  }
                  else {
                      parseExpected(73);
                  }
                  node.expression = parseAssignmentExpressionOrHigher();
                  parseSemicolon();
                  return finishNode(node);
              }
              function isLetDeclaration() {
                  return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine);
              }
              function isDeclarationStart(followsModifier) {
                  switch (token) {
                      case 98:
                      case 70:
                      case 83:
                          return true;
                      case 104:
                          return isLetDeclaration();
                      case 69:
                      case 103:
                      case 77:
                      case 124:
                          return lookAhead(nextTokenIsIdentifierOrKeyword);
                      case 85:
                          return lookAhead(nextTokenCanFollowImportKeyword);
                      case 117:
                      case 118:
                          return lookAhead(nextTokenIsIdentifierOrKeywordOrStringLiteral);
                      case 78:
                          return lookAhead(nextTokenCanFollowExportKeyword);
                      case 115:
                      case 108:
                      case 106:
                      case 107:
                      case 109:
                          return lookAhead(nextTokenIsDeclarationStart);
                      case 52:
                          return !followsModifier;
                  }
              }
              function isIdentifierOrKeyword() {
                  return token >= 65;
              }
              function nextTokenIsIdentifierOrKeyword() {
                  nextToken();
                  return isIdentifierOrKeyword();
              }
              function nextTokenIsIdentifierOrKeywordOrStringLiteral() {
                  nextToken();
                  return isIdentifierOrKeyword() || token === 8;
              }
              function nextTokenCanFollowImportKeyword() {
                  nextToken();
                  return isIdentifierOrKeyword() || token === 8 ||
                      token === 35 || token === 14;
              }
              function nextTokenCanFollowExportKeyword() {
                  nextToken();
                  return token === 53 || token === 35 ||
                      token === 14 || token === 73 || isDeclarationStart(true);
              }
              function nextTokenIsDeclarationStart() {
                  nextToken();
                  return isDeclarationStart(true);
              }
              function nextTokenIsAsKeyword() {
                  return nextToken() === 111;
              }
              function parseDeclaration() {
                  var fullStart = getNodePos();
                  var decorators = parseDecorators();
                  var modifiers = parseModifiers();
                  if (token === 78) {
                      nextToken();
                      if (token === 73 || token === 53) {
                          return parseExportAssignment(fullStart, decorators, modifiers);
                      }
                      if (token === 35 || token === 14) {
                          return parseExportDeclaration(fullStart, decorators, modifiers);
                      }
                  }
                  switch (token) {
                      case 98:
                      case 104:
                      case 70:
                          return parseVariableStatement(fullStart, decorators, modifiers);
                      case 83:
                          return parseFunctionDeclaration(fullStart, decorators, modifiers);
                      case 69:
                          return parseClassDeclaration(fullStart, decorators, modifiers);
                      case 103:
                          return parseInterfaceDeclaration(fullStart, decorators, modifiers);
                      case 124:
                          return parseTypeAliasDeclaration(fullStart, decorators, modifiers);
                      case 77:
                          return parseEnumDeclaration(fullStart, decorators, modifiers);
                      case 117:
                      case 118:
                          return parseModuleDeclaration(fullStart, decorators, modifiers);
                      case 85:
                          return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers);
                      default:
                          if (decorators) {
                              var node = createMissingNode(219, true, ts.Diagnostics.Declaration_expected);
                              node.pos = fullStart;
                              node.decorators = decorators;
                              setModifiers(node, modifiers);
                              return finishNode(node);
                          }
                          ts.Debug.fail("Mismatch between isDeclarationStart and parseDeclaration");
                  }
              }
              function isSourceElement(inErrorRecovery) {
                  return isDeclarationStart() || isStartOfStatement(inErrorRecovery);
              }
              function parseSourceElement() {
                  return parseSourceElementOrModuleElement();
              }
              function parseModuleElement() {
                  return parseSourceElementOrModuleElement();
              }
              function parseSourceElementOrModuleElement() {
                  return isDeclarationStart()
                      ? parseDeclaration()
                      : parseStatement();
              }
              function processReferenceComments(sourceFile) {
                  var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, sourceText);
                  var referencedFiles = [];
                  var amdDependencies = [];
                  var amdModuleName;
                  while (true) {
                      var kind = triviaScanner.scan();
                      if (kind === 5 || kind === 4 || kind === 3) {
                          continue;
                      }
                      if (kind !== 2) {
                          break;
                      }
                      var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos(), kind: triviaScanner.getToken() };
                      var comment = sourceText.substring(range.pos, range.end);
                      var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, range);
                      if (referencePathMatchResult) {
                          var fileReference = referencePathMatchResult.fileReference;
                          sourceFile.hasNoDefaultLib = referencePathMatchResult.isNoDefaultLib;
                          var diagnosticMessage = referencePathMatchResult.diagnosticMessage;
                          if (fileReference) {
                              referencedFiles.push(fileReference);
                          }
                          if (diagnosticMessage) {
                              sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage));
                          }
                      }
                      else {
                          var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim;
                          var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment);
                          if (amdModuleNameMatchResult) {
                              if (amdModuleName) {
                                  sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments));
                              }
                              amdModuleName = amdModuleNameMatchResult[2];
                          }
                          var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s/gim;
                          var pathRegex = /\spath\s*=\s*('|")(.+?)\1/gim;
                          var nameRegex = /\sname\s*=\s*('|")(.+?)\1/gim;
                          var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
                          if (amdDependencyMatchResult) {
                              var pathMatchResult = pathRegex.exec(comment);
                              var nameMatchResult = nameRegex.exec(comment);
                              if (pathMatchResult) {
                                  var amdDependency = { path: pathMatchResult[2], name: nameMatchResult ? nameMatchResult[2] : undefined };
                                  amdDependencies.push(amdDependency);
                              }
                          }
                      }
                  }
                  sourceFile.referencedFiles = referencedFiles;
                  sourceFile.amdDependencies = amdDependencies;
                  sourceFile.amdModuleName = amdModuleName;
              }
              function setExternalModuleIndicator(sourceFile) {
                  sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) {
                      return node.flags & 1
                          || node.kind === 209 && node.moduleReference.kind === 220
                          || node.kind === 210
                          || node.kind === 215
                          || node.kind === 216
                          ? node
                          : undefined;
                  });
              }
          })(Parser || (Parser = {}));
          var IncrementalParser;
          (function (IncrementalParser) {
              function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) {
                  aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2);
                  checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks);
                  if (ts.textChangeRangeIsUnchanged(textChangeRange)) {
                      return sourceFile;
                  }
                  if (sourceFile.statements.length === 0) {
                      return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true);
                  }
                  var incrementalSourceFile = sourceFile;
                  ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed);
                  incrementalSourceFile.hasBeenIncrementallyParsed = true;
                  var oldText = sourceFile.text;
                  var syntaxCursor = createSyntaxCursor(sourceFile);
                  var changeRange = extendToAffectedRange(sourceFile, textChangeRange);
                  checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks);
                  ts.Debug.assert(changeRange.span.start <= textChangeRange.span.start);
                  ts.Debug.assert(ts.textSpanEnd(changeRange.span) === ts.textSpanEnd(textChangeRange.span));
                  ts.Debug.assert(ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)) === ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)));
                  var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length;
                  updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks);
                  var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true);
                  return result;
              }
              IncrementalParser.updateSourceFile = updateSourceFile;
              function moveElementEntirelyPastChangeRange(element, isArray, delta, oldText, newText, aggressiveChecks) {
                  if (isArray) {
                      visitArray(element);
                  }
                  else {
                      visitNode(element);
                  }
                  return;
                  function visitNode(node) {
                      if (aggressiveChecks && shouldCheckNode(node)) {
                          var text = oldText.substring(node.pos, node.end);
                      }
                      node._children = undefined;
                      node.pos += delta;
                      node.end += delta;
                      if (aggressiveChecks && shouldCheckNode(node)) {
                          ts.Debug.assert(text === newText.substring(node.pos, node.end));
                      }
                      forEachChild(node, visitNode, visitArray);
                      checkNodePositions(node, aggressiveChecks);
                  }
                  function visitArray(array) {
                      array._children = undefined;
                      array.pos += delta;
                      array.end += delta;
                      for (var _i = 0; _i < array.length; _i++) {
                          var node = array[_i];
                          visitNode(node);
                      }
                  }
              }
              function shouldCheckNode(node) {
                  switch (node.kind) {
                      case 8:
                      case 7:
                      case 65:
                          return true;
                  }
                  return false;
              }
              function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) {
                  ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range");
                  ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range");
                  ts.Debug.assert(element.pos <= element.end);
                  element.pos = Math.min(element.pos, changeRangeNewEnd);
                  if (element.end >= changeRangeOldEnd) {
                      element.end += delta;
                  }
                  else {
                      element.end = Math.min(element.end, changeRangeNewEnd);
                  }
                  ts.Debug.assert(element.pos <= element.end);
                  if (element.parent) {
                      ts.Debug.assert(element.pos >= element.parent.pos);
                      ts.Debug.assert(element.end <= element.parent.end);
                  }
              }
              function checkNodePositions(node, aggressiveChecks) {
                  if (aggressiveChecks) {
                      var pos = node.pos;
                      forEachChild(node, function (child) {
                          ts.Debug.assert(child.pos >= pos);
                          pos = child.end;
                      });
                      ts.Debug.assert(pos <= node.end);
                  }
              }
              function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) {
                  visitNode(sourceFile);
                  return;
                  function visitNode(child) {
                      ts.Debug.assert(child.pos <= child.end);
                      if (child.pos > changeRangeOldEnd) {
                          moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks);
                          return;
                      }
                      var fullEnd = child.end;
                      if (fullEnd >= changeStart) {
                          child.intersectsChange = true;
                          child._children = undefined;
                          adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
                          forEachChild(child, visitNode, visitArray);
                          checkNodePositions(child, aggressiveChecks);
                          return;
                      }
                      ts.Debug.assert(fullEnd < changeStart);
                  }
                  function visitArray(array) {
                      ts.Debug.assert(array.pos <= array.end);
                      if (array.pos > changeRangeOldEnd) {
                          moveElementEntirelyPastChangeRange(array, true, delta, oldText, newText, aggressiveChecks);
                          return;
                      }
                      var fullEnd = array.end;
                      if (fullEnd >= changeStart) {
                          array.intersectsChange = true;
                          array._children = undefined;
                          adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
                          for (var _i = 0; _i < array.length; _i++) {
                              var node = array[_i];
                              visitNode(node);
                          }
                          return;
                      }
                      ts.Debug.assert(fullEnd < changeStart);
                  }
              }
              function extendToAffectedRange(sourceFile, changeRange) {
                  var maxLookahead = 1;
                  var start = changeRange.span.start;
                  for (var i = 0; start > 0 && i <= maxLookahead; i++) {
                      var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start);
                      ts.Debug.assert(nearestNode.pos <= start);
                      var position = nearestNode.pos;
                      start = Math.max(0, position - 1);
                  }
                  var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span));
                  var finalLength = changeRange.newLength + (changeRange.span.start - start);
                  return ts.createTextChangeRange(finalSpan, finalLength);
              }
              function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) {
                  var bestResult = sourceFile;
                  var lastNodeEntirelyBeforePosition;
                  forEachChild(sourceFile, visit);
                  if (lastNodeEntirelyBeforePosition) {
                      var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition);
                      if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) {
                          bestResult = lastChildOfLastEntireNodeBeforePosition;
                      }
                  }
                  return bestResult;
                  function getLastChild(node) {
                      while (true) {
                          var lastChild = getLastChildWorker(node);
                          if (lastChild) {
                              node = lastChild;
                          }
                          else {
                              return node;
                          }
                      }
                  }
                  function getLastChildWorker(node) {
                      var last = undefined;
                      forEachChild(node, function (child) {
                          if (ts.nodeIsPresent(child)) {
                              last = child;
                          }
                      });
                      return last;
                  }
                  function visit(child) {
                      if (ts.nodeIsMissing(child)) {
                          return;
                      }
                      if (child.pos <= position) {
                          if (child.pos >= bestResult.pos) {
                              bestResult = child;
                          }
                          if (position < child.end) {
                              forEachChild(child, visit);
                              return true;
                          }
                          else {
                              ts.Debug.assert(child.end <= position);
                              lastNodeEntirelyBeforePosition = child;
                          }
                      }
                      else {
                          ts.Debug.assert(child.pos > position);
                          return true;
                      }
                  }
              }
              function checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks) {
                  var oldText = sourceFile.text;
                  if (textChangeRange) {
                      ts.Debug.assert((oldText.length - textChangeRange.span.length + textChangeRange.newLength) === newText.length);
                      if (aggressiveChecks || ts.Debug.shouldAssert(3)) {
                          var oldTextPrefix = oldText.substr(0, textChangeRange.span.start);
                          var newTextPrefix = newText.substr(0, textChangeRange.span.start);
                          ts.Debug.assert(oldTextPrefix === newTextPrefix);
                          var oldTextSuffix = oldText.substring(ts.textSpanEnd(textChangeRange.span), oldText.length);
                          var newTextSuffix = newText.substring(ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)), newText.length);
                          ts.Debug.assert(oldTextSuffix === newTextSuffix);
                      }
                  }
              }
              function createSyntaxCursor(sourceFile) {
                  var currentArray = sourceFile.statements;
                  var currentArrayIndex = 0;
                  ts.Debug.assert(currentArrayIndex < currentArray.length);
                  var current = currentArray[currentArrayIndex];
                  var lastQueriedPosition = -1;
                  return {
                      currentNode: function (position) {
                          if (position !== lastQueriedPosition) {
                              if (current && current.end === position && currentArrayIndex < (currentArray.length - 1)) {
                                  currentArrayIndex++;
                                  current = currentArray[currentArrayIndex];
                              }
                              if (!current || current.pos !== position) {
                                  findHighestListElementThatStartsAtPosition(position);
                              }
                          }
                          lastQueriedPosition = position;
                          ts.Debug.assert(!current || current.pos === position);
                          return current;
                      }
                  };
                  function findHighestListElementThatStartsAtPosition(position) {
                      currentArray = undefined;
                      currentArrayIndex = -1;
                      current = undefined;
                      forEachChild(sourceFile, visitNode, visitArray);
                      return;
                      function visitNode(node) {
                          if (position >= node.pos && position < node.end) {
                              forEachChild(node, visitNode, visitArray);
                              return true;
                          }
                          return false;
                      }
                      function visitArray(array) {
                          if (position >= array.pos && position < array.end) {
                              for (var i = 0, n = array.length; i < n; i++) {
                                  var child = array[i];
                                  if (child) {
                                      if (child.pos === position) {
                                          currentArray = array;
                                          currentArrayIndex = i;
                                          current = child;
                                          return true;
                                      }
                                      else {
                                          if (child.pos < position && position < child.end) {
                                              forEachChild(child, visitNode, visitArray);
                                              return true;
                                          }
                                      }
                                  }
                              }
                          }
                          return false;
                      }
                  }
              }
          })(IncrementalParser || (IncrementalParser = {}));
      })(ts || (ts = {}));
      /// <reference path="binder.ts"/>
      var ts;
      (function (ts) {
          var nextSymbolId = 1;
          var nextNodeId = 1;
          var nextMergeId = 1;
          function getNodeId(node) {
              if (!node.id)
                  node.id = nextNodeId++;
              return node.id;
          }
          ts.getNodeId = getNodeId;
          ts.checkTime = 0;
          function getSymbolId(symbol) {
              if (!symbol.id) {
                  symbol.id = nextSymbolId++;
              }
              return symbol.id;
          }
          ts.getSymbolId = getSymbolId;
          function createTypeChecker(host, produceDiagnostics) {
              var Symbol = ts.objectAllocator.getSymbolConstructor();
              var Type = ts.objectAllocator.getTypeConstructor();
              var Signature = ts.objectAllocator.getSignatureConstructor();
              var typeCount = 0;
              var emptyArray = [];
              var emptySymbols = {};
              var compilerOptions = host.getCompilerOptions();
              var languageVersion = compilerOptions.target || 0;
              var emitResolver = createResolver();
              var undefinedSymbol = createSymbol(4 | 67108864, "undefined");
              var argumentsSymbol = createSymbol(4 | 67108864, "arguments");
              var checker = {
                  getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); },
                  getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); },
                  getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount"); },
                  getTypeCount: function () { return typeCount; },
                  isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
                  isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
                  getDiagnostics: getDiagnostics,
                  getGlobalDiagnostics: getGlobalDiagnostics,
                  getTypeOfSymbolAtLocation: getTypeOfSymbolAtLocation,
                  getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol,
                  getPropertiesOfType: getPropertiesOfType,
                  getPropertyOfType: getPropertyOfType,
                  getSignaturesOfType: getSignaturesOfType,
                  getIndexTypeOfType: getIndexTypeOfType,
                  getReturnTypeOfSignature: getReturnTypeOfSignature,
                  getSymbolsInScope: getSymbolsInScope,
                  getSymbolAtLocation: getSymbolAtLocation,
                  getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol,
                  getTypeAtLocation: getTypeAtLocation,
                  typeToString: typeToString,
                  getSymbolDisplayBuilder: getSymbolDisplayBuilder,
                  symbolToString: symbolToString,
                  getAugmentedPropertiesOfType: getAugmentedPropertiesOfType,
                  getRootSymbols: getRootSymbols,
                  getContextualType: getContextualType,
                  getFullyQualifiedName: getFullyQualifiedName,
                  getResolvedSignature: getResolvedSignature,
                  getConstantValue: getConstantValue,
                  isValidPropertyAccess: isValidPropertyAccess,
                  getSignatureFromDeclaration: getSignatureFromDeclaration,
                  isImplementationOfOverload: isImplementationOfOverload,
                  getAliasedSymbol: resolveAlias,
                  getEmitResolver: getEmitResolver,
                  getExportsOfModule: getExportsOfModuleAsArray
              };
              var unknownSymbol = createSymbol(4 | 67108864, "unknown");
              var resolvingSymbol = createSymbol(67108864, "__resolving__");
              var anyType = createIntrinsicType(1, "any");
              var stringType = createIntrinsicType(2, "string");
              var numberType = createIntrinsicType(4, "number");
              var booleanType = createIntrinsicType(8, "boolean");
              var esSymbolType = createIntrinsicType(1048576, "symbol");
              var voidType = createIntrinsicType(16, "void");
              var undefinedType = createIntrinsicType(32 | 262144, "undefined");
              var nullType = createIntrinsicType(64 | 262144, "null");
              var unknownType = createIntrinsicType(1, "unknown");
              var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
              var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
              var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
              var anySignature = createSignature(undefined, undefined, emptyArray, anyType, 0, false, false);
              var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, 0, false, false);
              var globals = {};
              var globalArraySymbol;
              var globalESSymbolConstructorSymbol;
              var globalObjectType;
              var globalFunctionType;
              var globalArrayType;
              var globalStringType;
              var globalNumberType;
              var globalBooleanType;
              var globalRegExpType;
              var globalTemplateStringsArrayType;
              var globalESSymbolType;
              var globalIterableType;
              var anyArrayType;
              var getGlobalClassDecoratorType;
              var getGlobalParameterDecoratorType;
              var getGlobalPropertyDecoratorType;
              var getGlobalMethodDecoratorType;
              var tupleTypes = {};
              var unionTypes = {};
              var stringLiteralTypes = {};
              var emitExtends = false;
              var emitDecorate = false;
              var emitParam = false;
              var resolutionTargets = [];
              var resolutionResults = [];
              var mergedSymbols = [];
              var symbolLinks = [];
              var nodeLinks = [];
              var potentialThisCollisions = [];
              var diagnostics = ts.createDiagnosticCollection();
              var primitiveTypeInfo = {
                  "string": {
                      type: stringType,
                      flags: 258
                  },
                  "number": {
                      type: numberType,
                      flags: 132
                  },
                  "boolean": {
                      type: booleanType,
                      flags: 8
                  },
                  "symbol": {
                      type: esSymbolType,
                      flags: 1048576
                  }
              };
              function getEmitResolver(sourceFile) {
                  getDiagnostics(sourceFile);
                  return emitResolver;
              }
              function error(location, message, arg0, arg1, arg2) {
                  var diagnostic = location
                      ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2)
                      : ts.createCompilerDiagnostic(message, arg0, arg1, arg2);
                  diagnostics.add(diagnostic);
              }
              function createSymbol(flags, name) {
                  return new Symbol(flags, name);
              }
              function getExcludedSymbolFlags(flags) {
                  var result = 0;
                  if (flags & 2)
                      result |= 107455;
                  if (flags & 1)
                      result |= 107454;
                  if (flags & 4)
                      result |= 107455;
                  if (flags & 8)
                      result |= 107455;
                  if (flags & 16)
                      result |= 106927;
                  if (flags & 32)
                      result |= 899583;
                  if (flags & 64)
                      result |= 792992;
                  if (flags & 256)
                      result |= 899327;
                  if (flags & 128)
                      result |= 899967;
                  if (flags & 512)
                      result |= 106639;
                  if (flags & 8192)
                      result |= 99263;
                  if (flags & 32768)
                      result |= 41919;
                  if (flags & 65536)
                      result |= 74687;
                  if (flags & 262144)
                      result |= 530912;
                  if (flags & 524288)
                      result |= 793056;
                  if (flags & 8388608)
                      result |= 8388608;
                  return result;
              }
              function recordMergedSymbol(target, source) {
                  if (!source.mergeId)
                      source.mergeId = nextMergeId++;
                  mergedSymbols[source.mergeId] = target;
              }
              function cloneSymbol(symbol) {
                  var result = createSymbol(symbol.flags | 33554432, symbol.name);
                  result.declarations = symbol.declarations.slice(0);
                  result.parent = symbol.parent;
                  if (symbol.valueDeclaration)
                      result.valueDeclaration = symbol.valueDeclaration;
                  if (symbol.constEnumOnlyModule)
                      result.constEnumOnlyModule = true;
                  if (symbol.members)
                      result.members = cloneSymbolTable(symbol.members);
                  if (symbol.exports)
                      result.exports = cloneSymbolTable(symbol.exports);
                  recordMergedSymbol(result, symbol);
                  return result;
              }
              function mergeSymbol(target, source) {
                  if (!(target.flags & getExcludedSymbolFlags(source.flags))) {
                      if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) {
                          target.constEnumOnlyModule = false;
                      }
                      target.flags |= source.flags;
                      if (!target.valueDeclaration && source.valueDeclaration)
                          target.valueDeclaration = source.valueDeclaration;
                      ts.forEach(source.declarations, function (node) {
                          target.declarations.push(node);
                      });
                      if (source.members) {
                          if (!target.members)
                              target.members = {};
                          mergeSymbolTable(target.members, source.members);
                      }
                      if (source.exports) {
                          if (!target.exports)
                              target.exports = {};
                          mergeSymbolTable(target.exports, source.exports);
                      }
                      recordMergedSymbol(target, source);
                  }
                  else {
                      var message = target.flags & 2 || source.flags & 2
                          ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
                      ts.forEach(source.declarations, function (node) {
                          error(node.name ? node.name : node, message, symbolToString(source));
                      });
                      ts.forEach(target.declarations, function (node) {
                          error(node.name ? node.name : node, message, symbolToString(source));
                      });
                  }
              }
              function cloneSymbolTable(symbolTable) {
                  var result = {};
                  for (var id in symbolTable) {
                      if (ts.hasProperty(symbolTable, id)) {
                          result[id] = symbolTable[id];
                      }
                  }
                  return result;
              }
              function mergeSymbolTable(target, source) {
                  for (var id in source) {
                      if (ts.hasProperty(source, id)) {
                          if (!ts.hasProperty(target, id)) {
                              target[id] = source[id];
                          }
                          else {
                              var symbol = target[id];
                              if (!(symbol.flags & 33554432)) {
                                  target[id] = symbol = cloneSymbol(symbol);
                              }
                              mergeSymbol(symbol, source[id]);
                          }
                      }
                  }
              }
              function getSymbolLinks(symbol) {
                  if (symbol.flags & 67108864)
                      return symbol;
                  var id = getSymbolId(symbol);
                  return symbolLinks[id] || (symbolLinks[id] = {});
              }
              function getNodeLinks(node) {
                  var nodeId = getNodeId(node);
                  return nodeLinks[nodeId] || (nodeLinks[nodeId] = {});
              }
              function getSourceFile(node) {
                  return ts.getAncestor(node, 228);
              }
              function isGlobalSourceFile(node) {
                  return node.kind === 228 && !ts.isExternalModule(node);
              }
              function getSymbol(symbols, name, meaning) {
                  if (meaning && ts.hasProperty(symbols, name)) {
                      var symbol = symbols[name];
                      ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here.");
                      if (symbol.flags & meaning) {
                          return symbol;
                      }
                      if (symbol.flags & 8388608) {
                          var target = resolveAlias(symbol);
                          if (target === unknownSymbol || target.flags & meaning) {
                              return symbol;
                          }
                      }
                  }
              }
              function isDefinedBefore(node1, node2) {
                  var file1 = ts.getSourceFileOfNode(node1);
                  var file2 = ts.getSourceFileOfNode(node2);
                  if (file1 === file2) {
                      return node1.pos <= node2.pos;
                  }
                  if (!compilerOptions.out) {
                      return true;
                  }
                  var sourceFiles = host.getSourceFiles();
                  return sourceFiles.indexOf(file1) <= sourceFiles.indexOf(file2);
              }
              function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) {
                  var result;
                  var lastLocation;
                  var propertyWithInvalidInitializer;
                  var errorLocation = location;
                  var grandparent;
                  loop: while (location) {
                      if (location.locals && !isGlobalSourceFile(location)) {
                          if (result = getSymbol(location.locals, name, meaning)) {
                              break loop;
                          }
                      }
                      switch (location.kind) {
                          case 228:
                              if (!ts.isExternalModule(location))
                                  break;
                          case 206:
                              if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8914931)) {
                                  if (result.flags & meaning || !(result.flags & 8388608 && getDeclarationOfAliasSymbol(result).kind === 218)) {
                                      break loop;
                                  }
                                  result = undefined;
                              }
                              else if (location.kind === 228 ||
                                  (location.kind === 206 && location.name.kind === 8)) {
                                  result = getSymbolOfNode(location).exports["default"];
                                  var localSymbol = ts.getLocalSymbolForExportDefault(result);
                                  if (result && localSymbol && (result.flags & meaning) && localSymbol.name === name) {
                                      break loop;
                                  }
                                  result = undefined;
                              }
                              break;
                          case 205:
                              if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) {
                                  break loop;
                              }
                              break;
                          case 133:
                          case 132:
                              if (location.parent.kind === 202 && !(location.flags & 128)) {
                                  var ctor = findConstructorDeclaration(location.parent);
                                  if (ctor && ctor.locals) {
                                      if (getSymbol(ctor.locals, name, meaning & 107455)) {
                                          propertyWithInvalidInitializer = location;
                                      }
                                  }
                              }
                              break;
                          case 202:
                          case 203:
                              if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) {
                                  if (lastLocation && lastLocation.flags & 128) {
                                      error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
                                      return undefined;
                                  }
                                  break loop;
                              }
                              break;
                          case 128:
                              grandparent = location.parent.parent;
                              if (grandparent.kind === 202 || grandparent.kind === 203) {
                                  if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) {
                                      error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
                                      return undefined;
                                  }
                              }
                              break;
                          case 135:
                          case 134:
                          case 136:
                          case 137:
                          case 138:
                          case 201:
                          case 164:
                              if (name === "arguments") {
                                  result = argumentsSymbol;
                                  break loop;
                              }
                              break;
                          case 163:
                              if (name === "arguments") {
                                  result = argumentsSymbol;
                                  break loop;
                              }
                              var functionName = location.name;
                              if (functionName && name === functionName.text) {
                                  result = location.symbol;
                                  break loop;
                              }
                              break;
                          case 175:
                              var className = location.name;
                              if (className && name === className.text) {
                                  result = location.symbol;
                                  break loop;
                              }
                              break;
                          case 131:
                              if (location.parent && location.parent.kind === 130) {
                                  location = location.parent;
                              }
                              if (location.parent && ts.isClassElement(location.parent)) {
                                  location = location.parent;
                              }
                              break;
                      }
                      lastLocation = location;
                      location = location.parent;
                  }
                  if (!result) {
                      result = getSymbol(globals, name, meaning);
                  }
                  if (!result) {
                      if (nameNotFoundMessage) {
                          error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
                      }
                      return undefined;
                  }
                  if (nameNotFoundMessage) {
                      if (propertyWithInvalidInitializer) {
                          var propertyName = propertyWithInvalidInitializer.name;
                          error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
                          return undefined;
                      }
                      if (result.flags & 2) {
                          checkResolvedBlockScopedVariable(result, errorLocation);
                      }
                  }
                  return result;
              }
              function checkResolvedBlockScopedVariable(result, errorLocation) {
                  ts.Debug.assert((result.flags & 2) !== 0);
                  var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; });
                  ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined");
                  var isUsedBeforeDeclaration = !isDefinedBefore(declaration, errorLocation);
                  if (!isUsedBeforeDeclaration) {
                      var variableDeclaration = ts.getAncestor(declaration, 199);
                      var container = ts.getEnclosingBlockScopeContainer(variableDeclaration);
                      if (variableDeclaration.parent.parent.kind === 181 ||
                          variableDeclaration.parent.parent.kind === 187) {
                          isUsedBeforeDeclaration = isSameScopeDescendentOf(errorLocation, variableDeclaration, container);
                      }
                      else if (variableDeclaration.parent.parent.kind === 189 ||
                          variableDeclaration.parent.parent.kind === 188) {
                          var expression = variableDeclaration.parent.parent.expression;
                          isUsedBeforeDeclaration = isSameScopeDescendentOf(errorLocation, expression, container);
                      }
                  }
                  if (isUsedBeforeDeclaration) {
                      error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name));
                  }
              }
              function isSameScopeDescendentOf(initial, parent, stopAt) {
                  if (!parent) {
                      return false;
                  }
                  for (var current = initial; current && current !== stopAt && !ts.isFunctionLike(current); current = current.parent) {
                      if (current === parent) {
                          return true;
                      }
                  }
                  return false;
              }
              function getAnyImportSyntax(node) {
                  if (ts.isAliasSymbolDeclaration(node)) {
                      if (node.kind === 209) {
                          return node;
                      }
                      while (node && node.kind !== 210) {
                          node = node.parent;
                      }
                      return node;
                  }
              }
              function getDeclarationOfAliasSymbol(symbol) {
                  return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; });
              }
              function getTargetOfImportEqualsDeclaration(node) {
                  if (node.moduleReference.kind === 220) {
                      return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node)));
                  }
                  return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node);
              }
              function getTargetOfImportClause(node) {
                  var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier);
                  if (moduleSymbol) {
                      var exportDefaultSymbol = resolveSymbol(moduleSymbol.exports["default"]);
                      if (!exportDefaultSymbol) {
                          error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol));
                      }
                      return exportDefaultSymbol;
                  }
              }
              function getTargetOfNamespaceImport(node) {
                  var moduleSpecifier = node.parent.parent.moduleSpecifier;
                  return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier);
              }
              function getMemberOfModuleVariable(moduleSymbol, name) {
                  if (moduleSymbol.flags & 3) {
                      var typeAnnotation = moduleSymbol.valueDeclaration.type;
                      if (typeAnnotation) {
                          return getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name);
                      }
                  }
              }
              function combineValueAndTypeSymbols(valueSymbol, typeSymbol) {
                  if (valueSymbol.flags & (793056 | 1536)) {
                      return valueSymbol;
                  }
                  var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.name);
                  result.declarations = ts.concatenate(valueSymbol.declarations, typeSymbol.declarations);
                  result.parent = valueSymbol.parent || typeSymbol.parent;
                  if (valueSymbol.valueDeclaration)
                      result.valueDeclaration = valueSymbol.valueDeclaration;
                  if (typeSymbol.members)
                      result.members = typeSymbol.members;
                  if (valueSymbol.exports)
                      result.exports = valueSymbol.exports;
                  return result;
              }
              function getExportOfModule(symbol, name) {
                  if (symbol.flags & 1536) {
                      var exports = getExportsOfSymbol(symbol);
                      if (ts.hasProperty(exports, name)) {
                          return resolveSymbol(exports[name]);
                      }
                  }
              }
              function getPropertyOfVariable(symbol, name) {
                  if (symbol.flags & 3) {
                      var typeAnnotation = symbol.valueDeclaration.type;
                      if (typeAnnotation) {
                          return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name));
                      }
                  }
              }
              function getExternalModuleMember(node, specifier) {
                  var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
                  var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier);
                  if (targetSymbol) {
                      var name_4 = specifier.propertyName || specifier.name;
                      if (name_4.text) {
                          var symbolFromModule = getExportOfModule(targetSymbol, name_4.text);
                          var symbolFromVariable = getPropertyOfVariable(targetSymbol, name_4.text);
                          var symbol = symbolFromModule && symbolFromVariable ?
                              combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
                              symbolFromModule || symbolFromVariable;
                          if (!symbol) {
                              error(name_4, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_4));
                          }
                          return symbol;
                      }
                  }
              }
              function getTargetOfImportSpecifier(node) {
                  return getExternalModuleMember(node.parent.parent.parent, node);
              }
              function getTargetOfExportSpecifier(node) {
                  return node.parent.parent.moduleSpecifier ?
                      getExternalModuleMember(node.parent.parent, node) :
                      resolveEntityName(node.propertyName || node.name, 107455 | 793056 | 1536);
              }
              function getTargetOfExportAssignment(node) {
                  return resolveEntityName(node.expression, 107455 | 793056 | 1536);
              }
              function getTargetOfAliasDeclaration(node) {
                  switch (node.kind) {
                      case 209:
                          return getTargetOfImportEqualsDeclaration(node);
                      case 211:
                          return getTargetOfImportClause(node);
                      case 212:
                          return getTargetOfNamespaceImport(node);
                      case 214:
                          return getTargetOfImportSpecifier(node);
                      case 218:
                          return getTargetOfExportSpecifier(node);
                      case 215:
                          return getTargetOfExportAssignment(node);
                  }
              }
              function resolveSymbol(symbol) {
                  return symbol && symbol.flags & 8388608 && !(symbol.flags & (107455 | 793056 | 1536)) ? resolveAlias(symbol) : symbol;
              }
              function resolveAlias(symbol) {
                  ts.Debug.assert((symbol.flags & 8388608) !== 0, "Should only get Alias here.");
                  var links = getSymbolLinks(symbol);
                  if (!links.target) {
                      links.target = resolvingSymbol;
                      var node = getDeclarationOfAliasSymbol(symbol);
                      var target = getTargetOfAliasDeclaration(node);
                      if (links.target === resolvingSymbol) {
                          links.target = target || unknownSymbol;
                      }
                      else {
                          error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol));
                      }
                  }
                  else if (links.target === resolvingSymbol) {
                      links.target = unknownSymbol;
                  }
                  return links.target;
              }
              function markExportAsReferenced(node) {
                  var symbol = getSymbolOfNode(node);
                  var target = resolveAlias(symbol);
                  if (target) {
                      var markAlias = (target === unknownSymbol && compilerOptions.separateCompilation) ||
                          (target !== unknownSymbol && (target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target));
                      if (markAlias) {
                          markAliasSymbolAsReferenced(symbol);
                      }
                  }
              }
              function markAliasSymbolAsReferenced(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.referenced) {
                      links.referenced = true;
                      var node = getDeclarationOfAliasSymbol(symbol);
                      if (node.kind === 215) {
                          checkExpressionCached(node.expression);
                      }
                      else if (node.kind === 218) {
                          checkExpressionCached(node.propertyName || node.name);
                      }
                      else if (ts.isInternalModuleImportEqualsDeclaration(node)) {
                          checkExpressionCached(node.moduleReference);
                      }
                  }
              }
              function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) {
                  if (!importDeclaration) {
                      importDeclaration = ts.getAncestor(entityName, 209);
                      ts.Debug.assert(importDeclaration !== undefined);
                  }
                  if (entityName.kind === 65 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                      entityName = entityName.parent;
                  }
                  if (entityName.kind === 65 || entityName.parent.kind === 127) {
                      return resolveEntityName(entityName, 1536);
                  }
                  else {
                      ts.Debug.assert(entityName.parent.kind === 209);
                      return resolveEntityName(entityName, 107455 | 793056 | 1536);
                  }
              }
              function getFullyQualifiedName(symbol) {
                  return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
              }
              function resolveEntityName(name, meaning) {
                  if (ts.nodeIsMissing(name)) {
                      return undefined;
                  }
                  var symbol;
                  if (name.kind === 65) {
                      var message = meaning === 1536 ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0;
                      symbol = resolveName(name, name.text, meaning, message, name);
                      if (!symbol) {
                          return undefined;
                      }
                  }
                  else if (name.kind === 127 || name.kind === 156) {
                      var left = name.kind === 127 ? name.left : name.expression;
                      var right = name.kind === 127 ? name.right : name.name;
                      var namespace = resolveEntityName(left, 1536);
                      if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) {
                          return undefined;
                      }
                      symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning);
                      if (!symbol) {
                          error(right, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(right));
                          return undefined;
                      }
                  }
                  else {
                      ts.Debug.fail("Unknown entity name kind.");
                  }
                  ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here.");
                  return symbol.flags & meaning ? symbol : resolveAlias(symbol);
              }
              function isExternalModuleNameRelative(moduleName) {
                  return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\";
              }
              function resolveExternalModuleName(location, moduleReferenceExpression) {
                  if (moduleReferenceExpression.kind !== 8) {
                      return;
                  }
                  var moduleReferenceLiteral = moduleReferenceExpression;
                  var searchPath = ts.getDirectoryPath(getSourceFile(location).fileName);
                  var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text);
                  if (!moduleName)
                      return;
                  var isRelative = isExternalModuleNameRelative(moduleName);
                  if (!isRelative) {
                      var symbol = getSymbol(globals, '"' + moduleName + '"', 512);
                      if (symbol) {
                          return symbol;
                      }
                  }
                  var fileName;
                  var sourceFile;
                  while (true) {
                      fileName = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
                      sourceFile = ts.forEach(ts.supportedExtensions, function (extension) { return host.getSourceFile(fileName + extension); });
                      if (sourceFile || isRelative) {
                          break;
                      }
                      var parentPath = ts.getDirectoryPath(searchPath);
                      if (parentPath === searchPath) {
                          break;
                      }
                      searchPath = parentPath;
                  }
                  if (sourceFile) {
                      if (sourceFile.symbol) {
                          return sourceFile.symbol;
                      }
                      error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName);
                      return;
                  }
                  error(moduleReferenceLiteral, ts.Diagnostics.Cannot_find_module_0, moduleName);
              }
              function resolveExternalModuleSymbol(moduleSymbol) {
                  return moduleSymbol && resolveSymbol(moduleSymbol.exports["export="]) || moduleSymbol;
              }
              function resolveESModuleSymbol(moduleSymbol, moduleReferenceExpression) {
                  var symbol = resolveExternalModuleSymbol(moduleSymbol);
                  if (symbol && !(symbol.flags & (1536 | 3))) {
                      error(moduleReferenceExpression, ts.Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct, symbolToString(moduleSymbol));
                      symbol = undefined;
                  }
                  return symbol;
              }
              function getExportAssignmentSymbol(moduleSymbol) {
                  return moduleSymbol.exports["export="];
              }
              function getExportsOfModuleAsArray(moduleSymbol) {
                  return symbolsToArray(getExportsOfModule(moduleSymbol));
              }
              function getExportsOfSymbol(symbol) {
                  return symbol.flags & 1536 ? getExportsOfModule(symbol) : symbol.exports || emptySymbols;
              }
              function getExportsOfModule(moduleSymbol) {
                  var links = getSymbolLinks(moduleSymbol);
                  return links.resolvedExports || (links.resolvedExports = getExportsForModule(moduleSymbol));
              }
              function extendExportSymbols(target, source) {
                  for (var id in source) {
                      if (id !== "default" && !ts.hasProperty(target, id)) {
                          target[id] = source[id];
                      }
                  }
              }
              function getExportsForModule(moduleSymbol) {
                  var result;
                  var visitedSymbols = [];
                  visit(moduleSymbol);
                  return result || moduleSymbol.exports;
                  function visit(symbol) {
                      if (symbol && symbol.flags & 1952 && !ts.contains(visitedSymbols, symbol)) {
                          visitedSymbols.push(symbol);
                          if (symbol !== moduleSymbol) {
                              if (!result) {
                                  result = cloneSymbolTable(moduleSymbol.exports);
                              }
                              extendExportSymbols(result, symbol.exports);
                          }
                          var exportStars = symbol.exports["__export"];
                          if (exportStars) {
                              for (var _i = 0, _a = exportStars.declarations; _i < _a.length; _i++) {
                                  var node = _a[_i];
                                  visit(resolveExternalModuleName(node, node.moduleSpecifier));
                              }
                          }
                      }
                  }
              }
              function getMergedSymbol(symbol) {
                  var merged;
                  return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol;
              }
              function getSymbolOfNode(node) {
                  return getMergedSymbol(node.symbol);
              }
              function getParentOfSymbol(symbol) {
                  return getMergedSymbol(symbol.parent);
              }
              function getExportSymbolOfValueSymbolIfExported(symbol) {
                  return symbol && (symbol.flags & 1048576) !== 0
                      ? getMergedSymbol(symbol.exportSymbol)
                      : symbol;
              }
              function symbolIsValue(symbol) {
                  if (symbol.flags & 16777216) {
                      return symbolIsValue(getSymbolLinks(symbol).target);
                  }
                  if (symbol.flags & 107455) {
                      return true;
                  }
                  if (symbol.flags & 8388608) {
                      return (resolveAlias(symbol).flags & 107455) !== 0;
                  }
                  return false;
              }
              function findConstructorDeclaration(node) {
                  var members = node.members;
                  for (var _i = 0; _i < members.length; _i++) {
                      var member = members[_i];
                      if (member.kind === 136 && ts.nodeIsPresent(member.body)) {
                          return member;
                      }
                  }
              }
              function createType(flags) {
                  var result = new Type(checker, flags);
                  result.id = typeCount++;
                  return result;
              }
              function createIntrinsicType(kind, intrinsicName) {
                  var type = createType(kind);
                  type.intrinsicName = intrinsicName;
                  return type;
              }
              function createObjectType(kind, symbol) {
                  var type = createType(kind);
                  type.symbol = symbol;
                  return type;
              }
              function isReservedMemberName(name) {
                  return name.charCodeAt(0) === 95 &&
                      name.charCodeAt(1) === 95 &&
                      name.charCodeAt(2) !== 95 &&
                      name.charCodeAt(2) !== 64;
              }
              function getNamedMembers(members) {
                  var result;
                  for (var id in members) {
                      if (ts.hasProperty(members, id)) {
                          if (!isReservedMemberName(id)) {
                              if (!result)
                                  result = [];
                              var symbol = members[id];
                              if (symbolIsValue(symbol)) {
                                  result.push(symbol);
                              }
                          }
                      }
                  }
                  return result || emptyArray;
              }
              function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
                  type.members = members;
                  type.properties = getNamedMembers(members);
                  type.callSignatures = callSignatures;
                  type.constructSignatures = constructSignatures;
                  if (stringIndexType)
                      type.stringIndexType = stringIndexType;
                  if (numberIndexType)
                      type.numberIndexType = numberIndexType;
                  return type;
              }
              function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
                  return setObjectTypeMembers(createObjectType(32768, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
              }
              function forEachSymbolTableInScope(enclosingDeclaration, callback) {
                  var result;
                  for (var location_1 = enclosingDeclaration; location_1; location_1 = location_1.parent) {
                      if (location_1.locals && !isGlobalSourceFile(location_1)) {
                          if (result = callback(location_1.locals)) {
                              return result;
                          }
                      }
                      switch (location_1.kind) {
                          case 228:
                              if (!ts.isExternalModule(location_1)) {
                                  break;
                              }
                          case 206:
                              if (result = callback(getSymbolOfNode(location_1).exports)) {
                                  return result;
                              }
                              break;
                          case 202:
                          case 203:
                              if (result = callback(getSymbolOfNode(location_1).members)) {
                                  return result;
                              }
                              break;
                      }
                  }
                  return callback(globals);
              }
              function getQualifiedLeftMeaning(rightMeaning) {
                  return rightMeaning === 107455 ? 107455 : 1536;
              }
              function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) {
                  function getAccessibleSymbolChainFromSymbolTable(symbols) {
                      function canQualifySymbol(symbolFromSymbolTable, meaning) {
                          if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) {
                              return true;
                          }
                          var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing);
                          return !!accessibleParent;
                      }
                      function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) {
                          if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) {
                              return !ts.forEach(symbolFromSymbolTable.declarations, hasExternalModuleSymbol) &&
                                  canQualifySymbol(symbolFromSymbolTable, meaning);
                          }
                      }
                      if (isAccessible(ts.lookUp(symbols, symbol.name))) {
                          return [symbol];
                      }
                      return ts.forEachValue(symbols, function (symbolFromSymbolTable) {
                          if (symbolFromSymbolTable.flags & 8388608 && symbolFromSymbolTable.name !== "export=") {
                              if (!useOnlyExternalAliasing ||
                                  ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) {
                                  var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                                  if (isAccessible(symbolFromSymbolTable, resolveAlias(symbolFromSymbolTable))) {
                                      return [symbolFromSymbolTable];
                                  }
                                  var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined;
                                  if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
                                      return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
                                  }
                              }
                          }
                      });
                  }
                  if (symbol) {
                      return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
                  }
              }
              function needsQualification(symbol, enclosingDeclaration, meaning) {
                  var qualify = false;
                  forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) {
                      if (!ts.hasProperty(symbolTable, symbol.name)) {
                          return false;
                      }
                      var symbolFromSymbolTable = symbolTable[symbol.name];
                      if (symbolFromSymbolTable === symbol) {
                          return true;
                      }
                      symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                      if (symbolFromSymbolTable.flags & meaning) {
                          qualify = true;
                          return true;
                      }
                      return false;
                  });
                  return qualify;
              }
              function isSymbolAccessible(symbol, enclosingDeclaration, meaning) {
                  if (symbol && enclosingDeclaration && !(symbol.flags & 262144)) {
                      var initialSymbol = symbol;
                      var meaningToLook = meaning;
                      while (symbol) {
                          var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false);
                          if (accessibleSymbolChain) {
                              var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]);
                              if (!hasAccessibleDeclarations) {
                                  return {
                                      accessibility: 1,
                                      errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
                                      errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536) : undefined
                                  };
                              }
                              return hasAccessibleDeclarations;
                          }
                          meaningToLook = getQualifiedLeftMeaning(meaning);
                          symbol = getParentOfSymbol(symbol);
                      }
                      var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer);
                      if (symbolExternalModule) {
                          var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration);
                          if (symbolExternalModule !== enclosingExternalModule) {
                              return {
                                  accessibility: 2,
                                  errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
                                  errorModuleName: symbolToString(symbolExternalModule)
                              };
                          }
                      }
                      return {
                          accessibility: 1,
                          errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning)
                      };
                  }
                  return { accessibility: 0 };
                  function getExternalModuleContainer(declaration) {
                      for (; declaration; declaration = declaration.parent) {
                          if (hasExternalModuleSymbol(declaration)) {
                              return getSymbolOfNode(declaration);
                          }
                      }
                  }
              }
              function hasExternalModuleSymbol(declaration) {
                  return (declaration.kind === 206 && declaration.name.kind === 8) ||
                      (declaration.kind === 228 && ts.isExternalModule(declaration));
              }
              function hasVisibleDeclarations(symbol) {
                  var aliasesToMakeVisible;
                  if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) {
                      return undefined;
                  }
                  return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible };
                  function getIsDeclarationVisible(declaration) {
                      if (!isDeclarationVisible(declaration)) {
                          var anyImportSyntax = getAnyImportSyntax(declaration);
                          if (anyImportSyntax &&
                              !(anyImportSyntax.flags & 1) &&
                              isDeclarationVisible(anyImportSyntax.parent)) {
                              getNodeLinks(declaration).isVisible = true;
                              if (aliasesToMakeVisible) {
                                  if (!ts.contains(aliasesToMakeVisible, anyImportSyntax)) {
                                      aliasesToMakeVisible.push(anyImportSyntax);
                                  }
                              }
                              else {
                                  aliasesToMakeVisible = [anyImportSyntax];
                              }
                              return true;
                          }
                          return false;
                      }
                      return true;
                  }
              }
              function isEntityNameVisible(entityName, enclosingDeclaration) {
                  var meaning;
                  if (entityName.parent.kind === 145) {
                      meaning = 107455 | 1048576;
                  }
                  else if (entityName.kind === 127 || entityName.kind === 156 ||
                      entityName.parent.kind === 209) {
                      meaning = 1536;
                  }
                  else {
                      meaning = 793056;
                  }
                  var firstIdentifier = getFirstIdentifier(entityName);
                  var symbol = resolveName(enclosingDeclaration, firstIdentifier.text, meaning, undefined, undefined);
                  return (symbol && hasVisibleDeclarations(symbol)) || {
                      accessibility: 1,
                      errorSymbolName: ts.getTextOfNode(firstIdentifier),
                      errorNode: firstIdentifier
                  };
              }
              function writeKeyword(writer, kind) {
                  writer.writeKeyword(ts.tokenToString(kind));
              }
              function writePunctuation(writer, kind) {
                  writer.writePunctuation(ts.tokenToString(kind));
              }
              function writeSpace(writer) {
                  writer.writeSpace(" ");
              }
              function symbolToString(symbol, enclosingDeclaration, meaning) {
                  var writer = ts.getSingleLineStringWriter();
                  getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning);
                  var result = writer.string();
                  ts.releaseStringWriter(writer);
                  return result;
              }
              function typeToString(type, enclosingDeclaration, flags) {
                  var writer = ts.getSingleLineStringWriter();
                  getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
                  var result = writer.string();
                  ts.releaseStringWriter(writer);
                  var maxLength = compilerOptions.noErrorTruncation || flags & 4 ? undefined : 100;
                  if (maxLength && result.length >= maxLength) {
                      result = result.substr(0, maxLength - "...".length) + "...";
                  }
                  return result;
              }
              function getTypeAliasForTypeLiteral(type) {
                  if (type.symbol && type.symbol.flags & 2048) {
                      var node = type.symbol.declarations[0].parent;
                      while (node.kind === 150) {
                          node = node.parent;
                      }
                      if (node.kind === 204) {
                          return getSymbolOfNode(node);
                      }
                  }
                  return undefined;
              }
              var _displayBuilder;
              function getSymbolDisplayBuilder() {
                  function appendSymbolNameOnly(symbol, writer) {
                      if (symbol.declarations && symbol.declarations.length > 0) {
                          var declaration = symbol.declarations[0];
                          if (declaration.name) {
                              writer.writeSymbol(ts.declarationNameToString(declaration.name), symbol);
                              return;
                          }
                      }
                      writer.writeSymbol(symbol.name, symbol);
                  }
                  function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) {
                      var parentSymbol;
                      function appendParentTypeArgumentsAndSymbolName(symbol) {
                          if (parentSymbol) {
                              if (flags & 1) {
                                  if (symbol.flags & 16777216) {
                                      buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration);
                                  }
                                  else {
                                      buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration);
                                  }
                              }
                              writePunctuation(writer, 20);
                          }
                          parentSymbol = symbol;
                          appendSymbolNameOnly(symbol, writer);
                      }
                      writer.trackSymbol(symbol, enclosingDeclaration, meaning);
                      function walkSymbol(symbol, meaning) {
                          if (symbol) {
                              var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2));
                              if (!accessibleSymbolChain ||
                                  needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
                                  walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning));
                              }
                              if (accessibleSymbolChain) {
                                  for (var _i = 0; _i < accessibleSymbolChain.length; _i++) {
                                      var accessibleSymbol = accessibleSymbolChain[_i];
                                      appendParentTypeArgumentsAndSymbolName(accessibleSymbol);
                                  }
                              }
                              else {
                                  if (!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) {
                                      return;
                                  }
                                  if (symbol.flags & 2048 || symbol.flags & 4096) {
                                      return;
                                  }
                                  appendParentTypeArgumentsAndSymbolName(symbol);
                              }
                          }
                      }
                      var isTypeParameter = symbol.flags & 262144;
                      var typeFormatFlag = 128 & typeFlags;
                      if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) {
                          walkSymbol(symbol, meaning);
                          return;
                      }
                      return appendParentTypeArgumentsAndSymbolName(symbol);
                  }
                  function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, typeStack) {
                      var globalFlagsToPass = globalFlags & 16;
                      return writeType(type, globalFlags);
                      function writeType(type, flags) {
                          if (type.flags & 1048703) {
                              writer.writeKeyword(!(globalFlags & 16) &&
                                  (type.flags & 1) ? "any" : type.intrinsicName);
                          }
                          else if (type.flags & 4096) {
                              writeTypeReference(type, flags);
                          }
                          else if (type.flags & (1024 | 2048 | 128 | 512)) {
                              buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056, 0, flags);
                          }
                          else if (type.flags & 8192) {
                              writeTupleType(type);
                          }
                          else if (type.flags & 16384) {
                              writeUnionType(type, flags);
                          }
                          else if (type.flags & 32768) {
                              writeAnonymousType(type, flags);
                          }
                          else if (type.flags & 256) {
                              writer.writeStringLiteral(type.text);
                          }
                          else {
                              writePunctuation(writer, 14);
                              writeSpace(writer);
                              writePunctuation(writer, 21);
                              writeSpace(writer);
                              writePunctuation(writer, 15);
                          }
                      }
                      function writeTypeList(types, union) {
                          for (var i = 0; i < types.length; i++) {
                              if (i > 0) {
                                  if (union) {
                                      writeSpace(writer);
                                  }
                                  writePunctuation(writer, union ? 44 : 23);
                                  writeSpace(writer);
                              }
                              writeType(types[i], union ? 64 : 0);
                          }
                      }
                      function writeTypeReference(type, flags) {
                          if (type.target === globalArrayType && !(flags & 1)) {
                              writeType(type.typeArguments[0], 64);
                              writePunctuation(writer, 18);
                              writePunctuation(writer, 19);
                          }
                          else {
                              buildSymbolDisplay(type.target.symbol, writer, enclosingDeclaration, 793056);
                              writePunctuation(writer, 24);
                              writeTypeList(type.typeArguments, false);
                              writePunctuation(writer, 25);
                          }
                      }
                      function writeTupleType(type) {
                          writePunctuation(writer, 18);
                          writeTypeList(type.elementTypes, false);
                          writePunctuation(writer, 19);
                      }
                      function writeUnionType(type, flags) {
                          if (flags & 64) {
                              writePunctuation(writer, 16);
                          }
                          writeTypeList(type.types, true);
                          if (flags & 64) {
                              writePunctuation(writer, 17);
                          }
                      }
                      function writeAnonymousType(type, flags) {
                          if (type.symbol && type.symbol.flags & (32 | 384 | 512)) {
                              writeTypeofSymbol(type, flags);
                          }
                          else if (shouldWriteTypeOfFunctionSymbol()) {
                              writeTypeofSymbol(type, flags);
                          }
                          else if (typeStack && ts.contains(typeStack, type)) {
                              var typeAlias = getTypeAliasForTypeLiteral(type);
                              if (typeAlias) {
                                  buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags);
                              }
                              else {
                                  writeKeyword(writer, 112);
                              }
                          }
                          else {
                              if (!typeStack) {
                                  typeStack = [];
                              }
                              typeStack.push(type);
                              writeLiteralType(type, flags);
                              typeStack.pop();
                          }
                          function shouldWriteTypeOfFunctionSymbol() {
                              if (type.symbol) {
                                  var isStaticMethodSymbol = !!(type.symbol.flags & 8192 &&
                                      ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 128; }));
                                  var isNonLocalFunctionSymbol = !!(type.symbol.flags & 16) &&
                                      (type.symbol.parent ||
                                          ts.forEach(type.symbol.declarations, function (declaration) {
                                              return declaration.parent.kind === 228 || declaration.parent.kind === 207;
                                          }));
                                  if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                                      return !!(flags & 2) ||
                                          (typeStack && ts.contains(typeStack, type));
                                  }
                              }
                          }
                      }
                      function writeTypeofSymbol(type, typeFormatFlags) {
                          writeKeyword(writer, 97);
                          writeSpace(writer);
                          buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags);
                      }
                      function getIndexerParameterName(type, indexKind, fallbackName) {
                          var declaration = getIndexDeclarationOfSymbol(type.symbol, indexKind);
                          if (!declaration) {
                              return fallbackName;
                          }
                          ts.Debug.assert(declaration.parameters.length !== 0);
                          return ts.declarationNameToString(declaration.parameters[0].name);
                      }
                      function writeLiteralType(type, flags) {
                          var resolved = resolveObjectOrUnionTypeMembers(type);
                          if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) {
                              if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                                  writePunctuation(writer, 14);
                                  writePunctuation(writer, 15);
                                  return;
                              }
                              if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                                  if (flags & 64) {
                                      writePunctuation(writer, 16);
                                  }
                                  buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack);
                                  if (flags & 64) {
                                      writePunctuation(writer, 17);
                                  }
                                  return;
                              }
                              if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                                  if (flags & 64) {
                                      writePunctuation(writer, 16);
                                  }
                                  writeKeyword(writer, 88);
                                  writeSpace(writer);
                                  buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack);
                                  if (flags & 64) {
                                      writePunctuation(writer, 17);
                                  }
                                  return;
                              }
                          }
                          writePunctuation(writer, 14);
                          writer.writeLine();
                          writer.increaseIndent();
                          for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
                              var signature = _a[_i];
                              buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, typeStack);
                              writePunctuation(writer, 22);
                              writer.writeLine();
                          }
                          for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
                              var signature = _c[_b];
                              writeKeyword(writer, 88);
                              writeSpace(writer);
                              buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, typeStack);
                              writePunctuation(writer, 22);
                              writer.writeLine();
                          }
                          if (resolved.stringIndexType) {
                              writePunctuation(writer, 18);
                              writer.writeParameter(getIndexerParameterName(resolved, 0, "x"));
                              writePunctuation(writer, 51);
                              writeSpace(writer);
                              writeKeyword(writer, 122);
                              writePunctuation(writer, 19);
                              writePunctuation(writer, 51);
                              writeSpace(writer);
                              writeType(resolved.stringIndexType, 0);
                              writePunctuation(writer, 22);
                              writer.writeLine();
                          }
                          if (resolved.numberIndexType) {
                              writePunctuation(writer, 18);
                              writer.writeParameter(getIndexerParameterName(resolved, 1, "x"));
                              writePunctuation(writer, 51);
                              writeSpace(writer);
                              writeKeyword(writer, 120);
                              writePunctuation(writer, 19);
                              writePunctuation(writer, 51);
                              writeSpace(writer);
                              writeType(resolved.numberIndexType, 0);
                              writePunctuation(writer, 22);
                              writer.writeLine();
                          }
                          for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
                              var p = _e[_d];
                              var t = getTypeOfSymbol(p);
                              if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) {
                                  var signatures = getSignaturesOfType(t, 0);
                                  for (var _f = 0; _f < signatures.length; _f++) {
                                      var signature = signatures[_f];
                                      buildSymbolDisplay(p, writer);
                                      if (p.flags & 536870912) {
                                          writePunctuation(writer, 50);
                                      }
                                      buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, typeStack);
                                      writePunctuation(writer, 22);
                                      writer.writeLine();
                                  }
                              }
                              else {
                                  buildSymbolDisplay(p, writer);
                                  if (p.flags & 536870912) {
                                      writePunctuation(writer, 50);
                                  }
                                  writePunctuation(writer, 51);
                                  writeSpace(writer);
                                  writeType(t, 0);
                                  writePunctuation(writer, 22);
                                  writer.writeLine();
                              }
                          }
                          writer.decreaseIndent();
                          writePunctuation(writer, 15);
                      }
                  }
                  function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) {
                      var targetSymbol = getTargetSymbol(symbol);
                      if (targetSymbol.flags & 32 || targetSymbol.flags & 64) {
                          buildDisplayForTypeParametersAndDelimiters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags);
                      }
                  }
                  function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, typeStack) {
                      appendSymbolNameOnly(tp.symbol, writer);
                      var constraint = getConstraintOfTypeParameter(tp);
                      if (constraint) {
                          writeSpace(writer);
                          writeKeyword(writer, 79);
                          writeSpace(writer);
                          buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, typeStack);
                      }
                  }
                  function buildParameterDisplay(p, writer, enclosingDeclaration, flags, typeStack) {
                      if (ts.hasDotDotDotToken(p.valueDeclaration)) {
                          writePunctuation(writer, 21);
                      }
                      appendSymbolNameOnly(p, writer);
                      if (ts.hasQuestionToken(p.valueDeclaration) || p.valueDeclaration.initializer) {
                          writePunctuation(writer, 50);
                      }
                      writePunctuation(writer, 51);
                      writeSpace(writer);
                      buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack);
                  }
                  function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, typeStack) {
                      if (typeParameters && typeParameters.length) {
                          writePunctuation(writer, 24);
                          for (var i = 0; i < typeParameters.length; i++) {
                              if (i > 0) {
                                  writePunctuation(writer, 23);
                                  writeSpace(writer);
                              }
                              buildTypeParameterDisplay(typeParameters[i], writer, enclosingDeclaration, flags, typeStack);
                          }
                          writePunctuation(writer, 25);
                      }
                  }
                  function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) {
                      if (typeParameters && typeParameters.length) {
                          writePunctuation(writer, 24);
                          for (var i = 0; i < typeParameters.length; i++) {
                              if (i > 0) {
                                  writePunctuation(writer, 23);
                                  writeSpace(writer);
                              }
                              buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0);
                          }
                          writePunctuation(writer, 25);
                      }
                  }
                  function buildDisplayForParametersAndDelimiters(parameters, writer, enclosingDeclaration, flags, typeStack) {
                      writePunctuation(writer, 16);
                      for (var i = 0; i < parameters.length; i++) {
                          if (i > 0) {
                              writePunctuation(writer, 23);
                              writeSpace(writer);
                          }
                          buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, typeStack);
                      }
                      writePunctuation(writer, 17);
                  }
                  function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
                      if (flags & 8) {
                          writeSpace(writer);
                          writePunctuation(writer, 32);
                      }
                      else {
                          writePunctuation(writer, 51);
                      }
                      writeSpace(writer);
                      buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack);
                  }
                  function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
                      if (signature.target && (flags & 32)) {
                          buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration);
                      }
                      else {
                          buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, typeStack);
                      }
                      buildDisplayForParametersAndDelimiters(signature.parameters, writer, enclosingDeclaration, flags, typeStack);
                      buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack);
                  }
                  return _displayBuilder || (_displayBuilder = {
                      symbolToString: symbolToString,
                      typeToString: typeToString,
                      buildSymbolDisplay: buildSymbolDisplay,
                      buildTypeDisplay: buildTypeDisplay,
                      buildTypeParameterDisplay: buildTypeParameterDisplay,
                      buildParameterDisplay: buildParameterDisplay,
                      buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters,
                      buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters,
                      buildDisplayForTypeArgumentsAndDelimiters: buildDisplayForTypeArgumentsAndDelimiters,
                      buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol,
                      buildSignatureDisplay: buildSignatureDisplay,
                      buildReturnTypeDisplay: buildReturnTypeDisplay
                  });
              }
              function isDeclarationVisible(node) {
                  function getContainingExternalModule(node) {
                      for (; node; node = node.parent) {
                          if (node.kind === 206) {
                              if (node.name.kind === 8) {
                                  return node;
                              }
                          }
                          else if (node.kind === 228) {
                              return ts.isExternalModule(node) ? node : undefined;
                          }
                      }
                      ts.Debug.fail("getContainingModule cant reach here");
                  }
                  function isUsedInExportAssignment(node) {
                      var externalModule = getContainingExternalModule(node);
                      var exportAssignmentSymbol;
                      var resolvedExportSymbol;
                      if (externalModule) {
                          var externalModuleSymbol = getSymbolOfNode(externalModule);
                          exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol);
                          var symbolOfNode = getSymbolOfNode(node);
                          if (isSymbolUsedInExportAssignment(symbolOfNode)) {
                              return true;
                          }
                          if (symbolOfNode.flags & 8388608) {
                              return isSymbolUsedInExportAssignment(resolveAlias(symbolOfNode));
                          }
                      }
                      function isSymbolUsedInExportAssignment(symbol) {
                          if (exportAssignmentSymbol === symbol) {
                              return true;
                          }
                          if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 8388608)) {
                              resolvedExportSymbol = resolvedExportSymbol || resolveAlias(exportAssignmentSymbol);
                              if (resolvedExportSymbol === symbol) {
                                  return true;
                              }
                              return ts.forEach(resolvedExportSymbol.declarations, function (current) {
                                  while (current) {
                                      if (current === node) {
                                          return true;
                                      }
                                      current = current.parent;
                                  }
                              });
                          }
                      }
                  }
                  function determineIfDeclarationIsVisible() {
                      switch (node.kind) {
                          case 153:
                              return isDeclarationVisible(node.parent.parent);
                          case 199:
                              if (ts.isBindingPattern(node.name) &&
                                  !node.name.elements.length) {
                                  return false;
                              }
                          case 206:
                          case 202:
                          case 203:
                          case 204:
                          case 201:
                          case 205:
                          case 209:
                              var parent_2 = getDeclarationContainer(node);
                              if (!(ts.getCombinedNodeFlags(node) & 1) &&
                                  !(node.kind !== 209 && parent_2.kind !== 228 && ts.isInAmbientContext(parent_2))) {
                                  return isGlobalSourceFile(parent_2);
                              }
                              return isDeclarationVisible(parent_2);
                          case 133:
                          case 132:
                          case 137:
                          case 138:
                          case 135:
                          case 134:
                              if (node.flags & (32 | 64)) {
                                  return false;
                              }
                          case 136:
                          case 140:
                          case 139:
                          case 141:
                          case 130:
                          case 207:
                          case 143:
                          case 144:
                          case 146:
                          case 142:
                          case 147:
                          case 148:
                          case 149:
                          case 150:
                              return isDeclarationVisible(node.parent);
                          case 211:
                          case 212:
                          case 214:
                              return false;
                          case 129:
                          case 228:
                              return true;
                          case 215:
                              return false;
                          default:
                              ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind);
                      }
                  }
                  if (node) {
                      var links = getNodeLinks(node);
                      if (links.isVisible === undefined) {
                          links.isVisible = !!determineIfDeclarationIsVisible();
                      }
                      return links.isVisible;
                  }
              }
              function collectLinkedAliases(node) {
                  var exportSymbol;
                  if (node.parent && node.parent.kind === 215) {
                      exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, node);
                  }
                  else if (node.parent.kind === 218) {
                      exportSymbol = getTargetOfExportSpecifier(node.parent);
                  }
                  var result = [];
                  if (exportSymbol) {
                      buildVisibleNodeList(exportSymbol.declarations);
                  }
                  return result;
                  function buildVisibleNodeList(declarations) {
                      ts.forEach(declarations, function (declaration) {
                          getNodeLinks(declaration).isVisible = true;
                          var resultNode = getAnyImportSyntax(declaration) || declaration;
                          if (!ts.contains(result, resultNode)) {
                              result.push(resultNode);
                          }
                          if (ts.isInternalModuleImportEqualsDeclaration(declaration)) {
                              var internalModuleReference = declaration.moduleReference;
                              var firstIdentifier = getFirstIdentifier(internalModuleReference);
                              var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, firstIdentifier);
                              buildVisibleNodeList(importSymbol.declarations);
                          }
                      });
                  }
              }
              function pushTypeResolution(target) {
                  var i = 0;
                  var count = resolutionTargets.length;
                  while (i < count && resolutionTargets[i] !== target) {
                      i++;
                  }
                  if (i < count) {
                      do {
                          resolutionResults[i++] = false;
                      } while (i < count);
                      return false;
                  }
                  resolutionTargets.push(target);
                  resolutionResults.push(true);
                  return true;
              }
              function popTypeResolution() {
                  resolutionTargets.pop();
                  return resolutionResults.pop();
              }
              function getDeclarationContainer(node) {
                  node = ts.getRootDeclaration(node);
                  return node.kind === 199 ? node.parent.parent.parent : node.parent;
              }
              function getTypeOfPrototypeProperty(prototype) {
                  var classType = getDeclaredTypeOfSymbol(prototype.parent);
                  return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType;
              }
              function getTypeOfPropertyOfType(type, name) {
                  var prop = getPropertyOfType(type, name);
                  return prop ? getTypeOfSymbol(prop) : undefined;
              }
              function getTypeForBindingElement(declaration) {
                  var pattern = declaration.parent;
                  var parentType = getTypeForVariableLikeDeclaration(pattern.parent);
                  if (parentType === unknownType) {
                      return unknownType;
                  }
                  if (!parentType || parentType === anyType) {
                      if (declaration.initializer) {
                          return checkExpressionCached(declaration.initializer);
                      }
                      return parentType;
                  }
                  var type;
                  if (pattern.kind === 151) {
                      var name_5 = declaration.propertyName || declaration.name;
                      type = getTypeOfPropertyOfType(parentType, name_5.text) ||
                          isNumericLiteralName(name_5.text) && getIndexTypeOfType(parentType, 1) ||
                          getIndexTypeOfType(parentType, 0);
                      if (!type) {
                          error(name_5, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_5));
                          return unknownType;
                      }
                  }
                  else {
                      var elementType = checkIteratedTypeOrElementType(parentType, pattern, false);
                      if (!declaration.dotDotDotToken) {
                          if (elementType.flags & 1) {
                              return elementType;
                          }
                          var propName = "" + ts.indexOf(pattern.elements, declaration);
                          type = isTupleLikeType(parentType)
                              ? getTypeOfPropertyOfType(parentType, propName)
                              : elementType;
                          if (!type) {
                              if (isTupleType(parentType)) {
                                  error(declaration, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(parentType), parentType.elementTypes.length, pattern.elements.length);
                              }
                              else {
                                  error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName);
                              }
                              return unknownType;
                          }
                      }
                      else {
                          type = createArrayType(elementType);
                      }
                  }
                  return type;
              }
              function getTypeForVariableLikeDeclaration(declaration) {
                  if (declaration.parent.parent.kind === 188) {
                      return anyType;
                  }
                  if (declaration.parent.parent.kind === 189) {
                      return checkRightHandSideOfForOf(declaration.parent.parent.expression) || anyType;
                  }
                  if (ts.isBindingPattern(declaration.parent)) {
                      return getTypeForBindingElement(declaration);
                  }
                  if (declaration.type) {
                      return getTypeFromTypeNode(declaration.type);
                  }
                  if (declaration.kind === 130) {
                      var func = declaration.parent;
                      if (func.kind === 138 && !ts.hasDynamicName(func)) {
                          var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 137);
                          if (getter) {
                              return getReturnTypeOfSignature(getSignatureFromDeclaration(getter));
                          }
                      }
                      var type = getContextuallyTypedParameterType(declaration);
                      if (type) {
                          return type;
                      }
                  }
                  if (declaration.initializer) {
                      return checkExpressionCached(declaration.initializer);
                  }
                  if (declaration.kind === 226) {
                      return checkIdentifier(declaration.name);
                  }
                  return undefined;
              }
              function getTypeFromBindingElement(element) {
                  if (element.initializer) {
                      return getWidenedType(checkExpressionCached(element.initializer));
                  }
                  if (ts.isBindingPattern(element.name)) {
                      return getTypeFromBindingPattern(element.name);
                  }
                  return anyType;
              }
              function getTypeFromObjectBindingPattern(pattern) {
                  var members = {};
                  ts.forEach(pattern.elements, function (e) {
                      var flags = 4 | 67108864 | (e.initializer ? 536870912 : 0);
                      var name = e.propertyName || e.name;
                      var symbol = createSymbol(flags, name.text);
                      symbol.type = getTypeFromBindingElement(e);
                      members[symbol.name] = symbol;
                  });
                  return createAnonymousType(undefined, members, emptyArray, emptyArray, undefined, undefined);
              }
              function getTypeFromArrayBindingPattern(pattern) {
                  var hasSpreadElement = false;
                  var elementTypes = [];
                  ts.forEach(pattern.elements, function (e) {
                      elementTypes.push(e.kind === 176 || e.dotDotDotToken ? anyType : getTypeFromBindingElement(e));
                      if (e.dotDotDotToken) {
                          hasSpreadElement = true;
                      }
                  });
                  if (!elementTypes.length) {
                      return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType;
                  }
                  else if (hasSpreadElement) {
                      var unionOfElements = getUnionType(elementTypes);
                      return languageVersion >= 2 ? createIterableType(unionOfElements) : createArrayType(unionOfElements);
                  }
                  return createTupleType(elementTypes);
              }
              function getTypeFromBindingPattern(pattern) {
                  return pattern.kind === 151
                      ? getTypeFromObjectBindingPattern(pattern)
                      : getTypeFromArrayBindingPattern(pattern);
              }
              function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) {
                  var type = getTypeForVariableLikeDeclaration(declaration);
                  if (type) {
                      if (reportErrors) {
                          reportErrorsFromWidening(declaration, type);
                      }
                      return declaration.kind !== 225 ? getWidenedType(type) : type;
                  }
                  if (ts.isBindingPattern(declaration.name)) {
                      return getTypeFromBindingPattern(declaration.name);
                  }
                  type = declaration.dotDotDotToken ? anyArrayType : anyType;
                  if (reportErrors && compilerOptions.noImplicitAny) {
                      var root = ts.getRootDeclaration(declaration);
                      if (!isPrivateWithinAmbient(root) && !(root.kind === 130 && isPrivateWithinAmbient(root.parent))) {
                          reportImplicitAnyError(declaration, type);
                      }
                  }
                  return type;
              }
              function getTypeOfVariableOrParameterOrProperty(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.type) {
                      if (symbol.flags & 134217728) {
                          return links.type = getTypeOfPrototypeProperty(symbol);
                      }
                      var declaration = symbol.valueDeclaration;
                      if (declaration.parent.kind === 224) {
                          return links.type = anyType;
                      }
                      if (declaration.kind === 215) {
                          return links.type = checkExpression(declaration.expression);
                      }
                      if (!pushTypeResolution(symbol)) {
                          return unknownType;
                      }
                      var type = getWidenedTypeForVariableLikeDeclaration(declaration, true);
                      if (!popTypeResolution()) {
                          if (symbol.valueDeclaration.type) {
                              type = unknownType;
                              error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
                          }
                          else {
                              type = anyType;
                              if (compilerOptions.noImplicitAny) {
                                  error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
                              }
                          }
                      }
                      links.type = type;
                  }
                  return links.type;
              }
              function getSetAccessorTypeAnnotationNode(accessor) {
                  return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type;
              }
              function getAnnotatedAccessorType(accessor) {
                  if (accessor) {
                      if (accessor.kind === 137) {
                          return accessor.type && getTypeFromTypeNode(accessor.type);
                      }
                      else {
                          var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor);
                          return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
                      }
                  }
                  return undefined;
              }
              function getTypeOfAccessors(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.type) {
                      if (!pushTypeResolution(symbol)) {
                          return unknownType;
                      }
                      var getter = ts.getDeclarationOfKind(symbol, 137);
                      var setter = ts.getDeclarationOfKind(symbol, 138);
                      var type;
                      var getterReturnType = getAnnotatedAccessorType(getter);
                      if (getterReturnType) {
                          type = getterReturnType;
                      }
                      else {
                          var setterParameterType = getAnnotatedAccessorType(setter);
                          if (setterParameterType) {
                              type = setterParameterType;
                          }
                          else {
                              if (getter && getter.body) {
                                  type = getReturnTypeFromBody(getter);
                              }
                              else {
                                  if (compilerOptions.noImplicitAny) {
                                      error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbolToString(symbol));
                                  }
                                  type = anyType;
                              }
                          }
                      }
                      if (!popTypeResolution()) {
                          type = anyType;
                          if (compilerOptions.noImplicitAny) {
                              var getter_1 = ts.getDeclarationOfKind(symbol, 137);
                              error(getter_1, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                          }
                      }
                      links.type = type;
                  }
                  return links.type;
              }
              function getTypeOfFuncClassEnumModule(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.type) {
                      links.type = createObjectType(32768, symbol);
                  }
                  return links.type;
              }
              function getTypeOfEnumMember(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.type) {
                      links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol));
                  }
                  return links.type;
              }
              function getTypeOfAlias(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.type) {
                      var targetSymbol = resolveAlias(symbol);
                      links.type = targetSymbol.flags & 107455
                          ? getTypeOfSymbol(targetSymbol)
                          : unknownType;
                  }
                  return links.type;
              }
              function getTypeOfInstantiatedSymbol(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.type) {
                      links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper);
                  }
                  return links.type;
              }
              function getTypeOfSymbol(symbol) {
                  if (symbol.flags & 16777216) {
                      return getTypeOfInstantiatedSymbol(symbol);
                  }
                  if (symbol.flags & (3 | 4)) {
                      return getTypeOfVariableOrParameterOrProperty(symbol);
                  }
                  if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) {
                      return getTypeOfFuncClassEnumModule(symbol);
                  }
                  if (symbol.flags & 8) {
                      return getTypeOfEnumMember(symbol);
                  }
                  if (symbol.flags & 98304) {
                      return getTypeOfAccessors(symbol);
                  }
                  if (symbol.flags & 8388608) {
                      return getTypeOfAlias(symbol);
                  }
                  return unknownType;
              }
              function getTargetType(type) {
                  return type.flags & 4096 ? type.target : type;
              }
              function hasBaseType(type, checkBase) {
                  return check(type);
                  function check(type) {
                      var target = getTargetType(type);
                      return target === checkBase || ts.forEach(getBaseTypes(target), check);
                  }
              }
              function getTypeParametersOfClassOrInterface(symbol) {
                  var result;
                  ts.forEach(symbol.declarations, function (node) {
                      if (node.kind === 203 || node.kind === 202) {
                          var declaration = node;
                          if (declaration.typeParameters && declaration.typeParameters.length) {
                              ts.forEach(declaration.typeParameters, function (node) {
                                  var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
                                  if (!result) {
                                      result = [tp];
                                  }
                                  else if (!ts.contains(result, tp)) {
                                      result.push(tp);
                                  }
                              });
                          }
                      }
                  });
                  return result;
              }
              function getBaseTypes(type) {
                  var typeWithBaseTypes = type;
                  if (!typeWithBaseTypes.baseTypes) {
                      if (type.symbol.flags & 32) {
                          resolveBaseTypesOfClass(typeWithBaseTypes);
                      }
                      else if (type.symbol.flags & 64) {
                          resolveBaseTypesOfInterface(typeWithBaseTypes);
                      }
                      else {
                          ts.Debug.fail("type must be class or interface");
                      }
                  }
                  return typeWithBaseTypes.baseTypes;
              }
              function resolveBaseTypesOfClass(type) {
                  type.baseTypes = [];
                  var declaration = ts.getDeclarationOfKind(type.symbol, 202);
                  var baseTypeNode = ts.getClassExtendsHeritageClauseElement(declaration);
                  if (baseTypeNode) {
                      var baseType = getTypeFromTypeNode(baseTypeNode);
                      if (baseType !== unknownType) {
                          if (getTargetType(baseType).flags & 1024) {
                              if (type !== baseType && !hasBaseType(baseType, type)) {
                                  type.baseTypes.push(baseType);
                              }
                              else {
                                  error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
                              }
                          }
                          else {
                              error(baseTypeNode, ts.Diagnostics.A_class_may_only_extend_another_class);
                          }
                      }
                  }
              }
              function resolveBaseTypesOfInterface(type) {
                  type.baseTypes = [];
                  for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                      var declaration = _a[_i];
                      if (declaration.kind === 203 && ts.getInterfaceBaseTypeNodes(declaration)) {
                          for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                              var node = _c[_b];
                              var baseType = getTypeFromTypeNode(node);
                              if (baseType !== unknownType) {
                                  if (getTargetType(baseType).flags & (1024 | 2048)) {
                                      if (type !== baseType && !hasBaseType(baseType, type)) {
                                          type.baseTypes.push(baseType);
                                      }
                                      else {
                                          error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
                                      }
                                  }
                                  else {
                                      error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface);
                                  }
                              }
                          }
                      }
                  }
              }
              function getDeclaredTypeOfClassOrInterface(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.declaredType) {
                      var kind = symbol.flags & 32 ? 1024 : 2048;
                      var type = links.declaredType = createObjectType(kind, symbol);
                      var typeParameters = getTypeParametersOfClassOrInterface(symbol);
                      if (typeParameters) {
                          type.flags |= 4096;
                          type.typeParameters = typeParameters;
                          type.instantiations = {};
                          type.instantiations[getTypeListId(type.typeParameters)] = type;
                          type.target = type;
                          type.typeArguments = type.typeParameters;
                      }
                  }
                  return links.declaredType;
              }
              function getDeclaredTypeOfTypeAlias(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.declaredType) {
                      if (!pushTypeResolution(links)) {
                          return unknownType;
                      }
                      var declaration = ts.getDeclarationOfKind(symbol, 204);
                      var type = getTypeFromTypeNode(declaration.type);
                      if (!popTypeResolution()) {
                          type = unknownType;
                          error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
                      }
                      links.declaredType = type;
                  }
                  return links.declaredType;
              }
              function getDeclaredTypeOfEnum(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.declaredType) {
                      var type = createType(128);
                      type.symbol = symbol;
                      links.declaredType = type;
                  }
                  return links.declaredType;
              }
              function getDeclaredTypeOfTypeParameter(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.declaredType) {
                      var type = createType(512);
                      type.symbol = symbol;
                      if (!ts.getDeclarationOfKind(symbol, 129).constraint) {
                          type.constraint = noConstraintType;
                      }
                      links.declaredType = type;
                  }
                  return links.declaredType;
              }
              function getDeclaredTypeOfAlias(symbol) {
                  var links = getSymbolLinks(symbol);
                  if (!links.declaredType) {
                      links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol));
                  }
                  return links.declaredType;
              }
              function getDeclaredTypeOfSymbol(symbol) {
                  ts.Debug.assert((symbol.flags & 16777216) === 0);
                  if (symbol.flags & (32 | 64)) {
                      return getDeclaredTypeOfClassOrInterface(symbol);
                  }
                  if (symbol.flags & 524288) {
                      return getDeclaredTypeOfTypeAlias(symbol);
                  }
                  if (symbol.flags & 384) {
                      return getDeclaredTypeOfEnum(symbol);
                  }
                  if (symbol.flags & 262144) {
                      return getDeclaredTypeOfTypeParameter(symbol);
                  }
                  if (symbol.flags & 8388608) {
                      return getDeclaredTypeOfAlias(symbol);
                  }
                  return unknownType;
              }
              function createSymbolTable(symbols) {
                  var result = {};
                  for (var _i = 0; _i < symbols.length; _i++) {
                      var symbol = symbols[_i];
                      result[symbol.name] = symbol;
                  }
                  return result;
              }
              function createInstantiatedSymbolTable(symbols, mapper) {
                  var result = {};
                  for (var _i = 0; _i < symbols.length; _i++) {
                      var symbol = symbols[_i];
                      result[symbol.name] = instantiateSymbol(symbol, mapper);
                  }
                  return result;
              }
              function addInheritedMembers(symbols, baseSymbols) {
                  for (var _i = 0; _i < baseSymbols.length; _i++) {
                      var s = baseSymbols[_i];
                      if (!ts.hasProperty(symbols, s.name)) {
                          symbols[s.name] = s;
                      }
                  }
              }
              function addInheritedSignatures(signatures, baseSignatures) {
                  if (baseSignatures) {
                      for (var _i = 0; _i < baseSignatures.length; _i++) {
                          var signature = baseSignatures[_i];
                          signatures.push(signature);
                      }
                  }
              }
              function resolveDeclaredMembers(type) {
                  if (!type.declaredProperties) {
                      var symbol = type.symbol;
                      type.declaredProperties = getNamedMembers(symbol.members);
                      type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]);
                      type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]);
                      type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0);
                      type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1);
                  }
                  return type;
              }
              function resolveClassOrInterfaceMembers(type) {
                  var target = resolveDeclaredMembers(type);
                  var members = target.symbol.members;
                  var callSignatures = target.declaredCallSignatures;
                  var constructSignatures = target.declaredConstructSignatures;
                  var stringIndexType = target.declaredStringIndexType;
                  var numberIndexType = target.declaredNumberIndexType;
                  var baseTypes = getBaseTypes(target);
                  if (baseTypes.length) {
                      members = createSymbolTable(target.declaredProperties);
                      for (var _i = 0; _i < baseTypes.length; _i++) {
                          var baseType = baseTypes[_i];
                          addInheritedMembers(members, getPropertiesOfObjectType(baseType));
                          callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0));
                          constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1));
                          stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0);
                          numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1);
                      }
                  }
                  setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
              }
              function resolveTypeReferenceMembers(type) {
                  var target = resolveDeclaredMembers(type.target);
                  var mapper = createTypeMapper(target.typeParameters, type.typeArguments);
                  var members = createInstantiatedSymbolTable(target.declaredProperties, mapper);
                  var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature);
                  var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature);
                  var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined;
                  var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined;
                  ts.forEach(getBaseTypes(target), function (baseType) {
                      var instantiatedBaseType = instantiateType(baseType, mapper);
                      addInheritedMembers(members, getPropertiesOfObjectType(instantiatedBaseType));
                      callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0));
                      constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1));
                      stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0);
                      numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1);
                  });
                  setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
              }
              function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) {
                  var sig = new Signature(checker);
                  sig.declaration = declaration;
                  sig.typeParameters = typeParameters;
                  sig.parameters = parameters;
                  sig.resolvedReturnType = resolvedReturnType;
                  sig.minArgumentCount = minArgumentCount;
                  sig.hasRestParameter = hasRestParameter;
                  sig.hasStringLiterals = hasStringLiterals;
                  return sig;
              }
              function cloneSignature(sig) {
                  return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals);
              }
              function getDefaultConstructSignatures(classType) {
                  var baseTypes = getBaseTypes(classType);
                  if (baseTypes.length) {
                      var baseType = baseTypes[0];
                      var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1);
                      return ts.map(baseSignatures, function (baseSignature) {
                          var signature = baseType.flags & 4096 ?
                              getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature);
                          signature.typeParameters = classType.typeParameters;
                          signature.resolvedReturnType = classType;
                          return signature;
                      });
                  }
                  return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)];
              }
              function createTupleTypeMemberSymbols(memberTypes) {
                  var members = {};
                  for (var i = 0; i < memberTypes.length; i++) {
                      var symbol = createSymbol(4 | 67108864, "" + i);
                      symbol.type = memberTypes[i];
                      members[i] = symbol;
                  }
                  return members;
              }
              function resolveTupleTypeMembers(type) {
                  var arrayType = resolveObjectOrUnionTypeMembers(createArrayType(getUnionType(type.elementTypes)));
                  var members = createTupleTypeMemberSymbols(type.elementTypes);
                  addInheritedMembers(members, arrayType.properties);
                  setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
              }
              function signatureListsIdentical(s, t) {
                  if (s.length !== t.length) {
                      return false;
                  }
                  for (var i = 0; i < s.length; i++) {
                      if (!compareSignatures(s[i], t[i], false, compareTypes)) {
                          return false;
                      }
                  }
                  return true;
              }
              function getUnionSignatures(types, kind) {
                  var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); });
                  var signatures = signatureLists[0];
                  for (var _i = 0; _i < signatures.length; _i++) {
                      var signature = signatures[_i];
                      if (signature.typeParameters) {
                          return emptyArray;
                      }
                  }
                  for (var i_1 = 1; i_1 < signatureLists.length; i_1++) {
                      if (!signatureListsIdentical(signatures, signatureLists[i_1])) {
                          return emptyArray;
                      }
                  }
                  var result = ts.map(signatures, cloneSignature);
                  for (var i = 0; i < result.length; i++) {
                      var s = result[i];
                      s.resolvedReturnType = undefined;
                      s.unionSignatures = ts.map(signatureLists, function (signatures) { return signatures[i]; });
                  }
                  return result;
              }
              function getUnionIndexType(types, kind) {
                  var indexTypes = [];
                  for (var _i = 0; _i < types.length; _i++) {
                      var type = types[_i];
                      var indexType = getIndexTypeOfType(type, kind);
                      if (!indexType) {
                          return undefined;
                      }
                      indexTypes.push(indexType);
                  }
                  return getUnionType(indexTypes);
              }
              function resolveUnionTypeMembers(type) {
                  var callSignatures = getUnionSignatures(type.types, 0);
                  var constructSignatures = getUnionSignatures(type.types, 1);
                  var stringIndexType = getUnionIndexType(type.types, 0);
                  var numberIndexType = getUnionIndexType(type.types, 1);
                  setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType);
              }
              function resolveAnonymousTypeMembers(type) {
                  var symbol = type.symbol;
                  var members;
                  var callSignatures;
                  var constructSignatures;
                  var stringIndexType;
                  var numberIndexType;
                  if (symbol.flags & 2048) {
                      members = symbol.members;
                      callSignatures = getSignaturesOfSymbol(members["__call"]);
                      constructSignatures = getSignaturesOfSymbol(members["__new"]);
                      stringIndexType = getIndexTypeOfSymbol(symbol, 0);
                      numberIndexType = getIndexTypeOfSymbol(symbol, 1);
                  }
                  else {
                      members = emptySymbols;
                      callSignatures = emptyArray;
                      constructSignatures = emptyArray;
                      if (symbol.flags & 1952) {
                          members = getExportsOfSymbol(symbol);
                      }
                      if (symbol.flags & (16 | 8192)) {
                          callSignatures = getSignaturesOfSymbol(symbol);
                      }
                      if (symbol.flags & 32) {
                          var classType = getDeclaredTypeOfClassOrInterface(symbol);
                          constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]);
                          if (!constructSignatures.length) {
                              constructSignatures = getDefaultConstructSignatures(classType);
                          }
                          var baseTypes = getBaseTypes(classType);
                          if (baseTypes.length) {
                              members = createSymbolTable(getNamedMembers(members));
                              addInheritedMembers(members, getPropertiesOfObjectType(getTypeOfSymbol(baseTypes[0].symbol)));
                          }
                      }
                      stringIndexType = undefined;
                      numberIndexType = (symbol.flags & 384) ? stringType : undefined;
                  }
                  setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
              }
              function resolveObjectOrUnionTypeMembers(type) {
                  if (!type.members) {
                      if (type.flags & (1024 | 2048)) {
                          resolveClassOrInterfaceMembers(type);
                      }
                      else if (type.flags & 32768) {
                          resolveAnonymousTypeMembers(type);
                      }
                      else if (type.flags & 8192) {
                          resolveTupleTypeMembers(type);
                      }
                      else if (type.flags & 16384) {
                          resolveUnionTypeMembers(type);
                      }
                      else {
                          resolveTypeReferenceMembers(type);
                      }
                  }
                  return type;
              }
              function getPropertiesOfObjectType(type) {
                  if (type.flags & 48128) {
                      return resolveObjectOrUnionTypeMembers(type).properties;
                  }
                  return emptyArray;
              }
              function getPropertyOfObjectType(type, name) {
                  if (type.flags & 48128) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      if (ts.hasProperty(resolved.members, name)) {
                          var symbol = resolved.members[name];
                          if (symbolIsValue(symbol)) {
                              return symbol;
                          }
                      }
                  }
              }
              function getPropertiesOfUnionType(type) {
                  var result = [];
                  ts.forEach(getPropertiesOfType(type.types[0]), function (prop) {
                      var unionProp = getPropertyOfUnionType(type, prop.name);
                      if (unionProp) {
                          result.push(unionProp);
                      }
                  });
                  return result;
              }
              function getPropertiesOfType(type) {
                  type = getApparentType(type);
                  return type.flags & 16384 ? getPropertiesOfUnionType(type) : getPropertiesOfObjectType(type);
              }
              function getApparentType(type) {
                  if (type.flags & 16384) {
                      type = getReducedTypeOfUnionType(type);
                  }
                  if (type.flags & 512) {
                      do {
                          type = getConstraintOfTypeParameter(type);
                      } while (type && type.flags & 512);
                      if (!type) {
                          type = emptyObjectType;
                      }
                  }
                  if (type.flags & 258) {
                      type = globalStringType;
                  }
                  else if (type.flags & 132) {
                      type = globalNumberType;
                  }
                  else if (type.flags & 8) {
                      type = globalBooleanType;
                  }
                  else if (type.flags & 1048576) {
                      type = globalESSymbolType;
                  }
                  return type;
              }
              function createUnionProperty(unionType, name) {
                  var types = unionType.types;
                  var props;
                  for (var _i = 0; _i < types.length; _i++) {
                      var current = types[_i];
                      var type = getApparentType(current);
                      if (type !== unknownType) {
                          var prop = getPropertyOfType(type, name);
                          if (!prop || getDeclarationFlagsFromSymbol(prop) & (32 | 64)) {
                              return undefined;
                          }
                          if (!props) {
                              props = [prop];
                          }
                          else {
                              props.push(prop);
                          }
                      }
                  }
                  var propTypes = [];
                  var declarations = [];
                  for (var _a = 0; _a < props.length; _a++) {
                      var prop = props[_a];
                      if (prop.declarations) {
                          declarations.push.apply(declarations, prop.declarations);
                      }
                      propTypes.push(getTypeOfSymbol(prop));
                  }
                  var result = createSymbol(4 | 67108864 | 268435456, name);
                  result.unionType = unionType;
                  result.declarations = declarations;
                  result.type = getUnionType(propTypes);
                  return result;
              }
              function getPropertyOfUnionType(type, name) {
                  var properties = type.resolvedProperties || (type.resolvedProperties = {});
                  if (ts.hasProperty(properties, name)) {
                      return properties[name];
                  }
                  var property = createUnionProperty(type, name);
                  if (property) {
                      properties[name] = property;
                  }
                  return property;
              }
              function getPropertyOfType(type, name) {
                  type = getApparentType(type);
                  if (type.flags & 48128) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      if (ts.hasProperty(resolved.members, name)) {
                          var symbol = resolved.members[name];
                          if (symbolIsValue(symbol)) {
                              return symbol;
                          }
                      }
                      if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) {
                          var symbol = getPropertyOfObjectType(globalFunctionType, name);
                          if (symbol) {
                              return symbol;
                          }
                      }
                      return getPropertyOfObjectType(globalObjectType, name);
                  }
                  if (type.flags & 16384) {
                      return getPropertyOfUnionType(type, name);
                  }
                  return undefined;
              }
              function getSignaturesOfObjectOrUnionType(type, kind) {
                  if (type.flags & (48128 | 16384)) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      return kind === 0 ? resolved.callSignatures : resolved.constructSignatures;
                  }
                  return emptyArray;
              }
              function getSignaturesOfType(type, kind) {
                  return getSignaturesOfObjectOrUnionType(getApparentType(type), kind);
              }
              function typeHasCallOrConstructSignatures(type) {
                  var apparentType = getApparentType(type);
                  if (apparentType.flags & (48128 | 16384)) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      return resolved.callSignatures.length > 0
                          || resolved.constructSignatures.length > 0;
                  }
                  return false;
              }
              function getIndexTypeOfObjectOrUnionType(type, kind) {
                  if (type.flags & (48128 | 16384)) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      return kind === 0 ? resolved.stringIndexType : resolved.numberIndexType;
                  }
              }
              function getIndexTypeOfType(type, kind) {
                  return getIndexTypeOfObjectOrUnionType(getApparentType(type), kind);
              }
              function getTypeParametersFromDeclaration(typeParameterDeclarations) {
                  var result = [];
                  ts.forEach(typeParameterDeclarations, function (node) {
                      var tp = getDeclaredTypeOfTypeParameter(node.symbol);
                      if (!ts.contains(result, tp)) {
                          result.push(tp);
                      }
                  });
                  return result;
              }
              function symbolsToArray(symbols) {
                  var result = [];
                  for (var id in symbols) {
                      if (!isReservedMemberName(id)) {
                          result.push(symbols[id]);
                      }
                  }
                  return result;
              }
              function getSignatureFromDeclaration(declaration) {
                  var links = getNodeLinks(declaration);
                  if (!links.resolvedSignature) {
                      var classType = declaration.kind === 136 ? getDeclaredTypeOfClassOrInterface(declaration.parent.symbol) : undefined;
                      var typeParameters = classType ? classType.typeParameters :
                          declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined;
                      var parameters = [];
                      var hasStringLiterals = false;
                      var minArgumentCount = -1;
                      for (var i = 0, n = declaration.parameters.length; i < n; i++) {
                          var param = declaration.parameters[i];
                          parameters.push(param.symbol);
                          if (param.type && param.type.kind === 8) {
                              hasStringLiterals = true;
                          }
                          if (minArgumentCount < 0) {
                              if (param.initializer || param.questionToken || param.dotDotDotToken) {
                                  minArgumentCount = i;
                              }
                          }
                      }
                      if (minArgumentCount < 0) {
                          minArgumentCount = declaration.parameters.length;
                      }
                      var returnType;
                      if (classType) {
                          returnType = classType;
                      }
                      else if (declaration.type) {
                          returnType = getTypeFromTypeNode(declaration.type);
                      }
                      else {
                          if (declaration.kind === 137 && !ts.hasDynamicName(declaration)) {
                              var setter = ts.getDeclarationOfKind(declaration.symbol, 138);
                              returnType = getAnnotatedAccessorType(setter);
                          }
                          if (!returnType && ts.nodeIsMissing(declaration.body)) {
                              returnType = anyType;
                          }
                      }
                      links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(declaration), hasStringLiterals);
                  }
                  return links.resolvedSignature;
              }
              function getSignaturesOfSymbol(symbol) {
                  if (!symbol)
                      return emptyArray;
                  var result = [];
                  for (var i = 0, len = symbol.declarations.length; i < len; i++) {
                      var node = symbol.declarations[i];
                      switch (node.kind) {
                          case 143:
                          case 144:
                          case 201:
                          case 135:
                          case 134:
                          case 136:
                          case 139:
                          case 140:
                          case 141:
                          case 137:
                          case 138:
                          case 163:
                          case 164:
                              if (i > 0 && node.body) {
                                  var previous = symbol.declarations[i - 1];
                                  if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) {
                                      break;
                                  }
                              }
                              result.push(getSignatureFromDeclaration(node));
                      }
                  }
                  return result;
              }
              function getReturnTypeOfSignature(signature) {
                  if (!signature.resolvedReturnType) {
                      if (!pushTypeResolution(signature)) {
                          return unknownType;
                      }
                      var type;
                      if (signature.target) {
                          type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper);
                      }
                      else if (signature.unionSignatures) {
                          type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature));
                      }
                      else {
                          type = getReturnTypeFromBody(signature.declaration);
                      }
                      if (!popTypeResolution()) {
                          type = anyType;
                          if (compilerOptions.noImplicitAny) {
                              var declaration = signature.declaration;
                              if (declaration.name) {
                                  error(declaration.name, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, ts.declarationNameToString(declaration.name));
                              }
                              else {
                                  error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions);
                              }
                          }
                      }
                      signature.resolvedReturnType = type;
                  }
                  return signature.resolvedReturnType;
              }
              function getRestTypeOfSignature(signature) {
                  if (signature.hasRestParameter) {
                      var type = getTypeOfSymbol(ts.lastOrUndefined(signature.parameters));
                      if (type.flags & 4096 && type.target === globalArrayType) {
                          return type.typeArguments[0];
                      }
                  }
                  return anyType;
              }
              function getSignatureInstantiation(signature, typeArguments) {
                  return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true);
              }
              function getErasedSignature(signature) {
                  if (!signature.typeParameters)
                      return signature;
                  if (!signature.erasedSignatureCache) {
                      if (signature.target) {
                          signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper);
                      }
                      else {
                          signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true);
                      }
                  }
                  return signature.erasedSignatureCache;
              }
              function getOrCreateTypeFromSignature(signature) {
                  if (!signature.isolatedSignatureType) {
                      var isConstructor = signature.declaration.kind === 136 || signature.declaration.kind === 140;
                      var type = createObjectType(32768 | 65536);
                      type.members = emptySymbols;
                      type.properties = emptyArray;
                      type.callSignatures = !isConstructor ? [signature] : emptyArray;
                      type.constructSignatures = isConstructor ? [signature] : emptyArray;
                      signature.isolatedSignatureType = type;
                  }
                  return signature.isolatedSignatureType;
              }
              function getIndexSymbol(symbol) {
                  return symbol.members["__index"];
              }
              function getIndexDeclarationOfSymbol(symbol, kind) {
                  var syntaxKind = kind === 1 ? 120 : 122;
                  var indexSymbol = getIndexSymbol(symbol);
                  if (indexSymbol) {
                      var len = indexSymbol.declarations.length;
                      for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
                          var decl = _a[_i];
                          var node = decl;
                          if (node.parameters.length === 1) {
                              var parameter = node.parameters[0];
                              if (parameter && parameter.type && parameter.type.kind === syntaxKind) {
                                  return node;
                              }
                          }
                      }
                  }
                  return undefined;
              }
              function getIndexTypeOfSymbol(symbol, kind) {
                  var declaration = getIndexDeclarationOfSymbol(symbol, kind);
                  return declaration
                      ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType
                      : undefined;
              }
              function getConstraintOfTypeParameter(type) {
                  if (!type.constraint) {
                      if (type.target) {
                          var targetConstraint = getConstraintOfTypeParameter(type.target);
                          type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType;
                      }
                      else {
                          type.constraint = getTypeFromTypeNode(ts.getDeclarationOfKind(type.symbol, 129).constraint);
                      }
                  }
                  return type.constraint === noConstraintType ? undefined : type.constraint;
              }
              function getTypeListId(types) {
                  switch (types.length) {
                      case 1:
                          return "" + types[0].id;
                      case 2:
                          return types[0].id + "," + types[1].id;
                      default:
                          var result = "";
                          for (var i = 0; i < types.length; i++) {
                              if (i > 0) {
                                  result += ",";
                              }
                              result += types[i].id;
                          }
                          return result;
                  }
              }
              function getWideningFlagsOfTypes(types) {
                  var result = 0;
                  for (var _i = 0; _i < types.length; _i++) {
                      var type = types[_i];
                      result |= type.flags;
                  }
                  return result & 786432;
              }
              function createTypeReference(target, typeArguments) {
                  var id = getTypeListId(typeArguments);
                  var type = target.instantiations[id];
                  if (!type) {
                      var flags = 4096 | getWideningFlagsOfTypes(typeArguments);
                      type = target.instantiations[id] = createObjectType(flags, target.symbol);
                      type.target = target;
                      type.typeArguments = typeArguments;
                  }
                  return type;
              }
              function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) {
                  var links = getNodeLinks(typeReferenceNode);
                  if (links.isIllegalTypeReferenceInConstraint !== undefined) {
                      return links.isIllegalTypeReferenceInConstraint;
                  }
                  var currentNode = typeReferenceNode;
                  while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) {
                      currentNode = currentNode.parent;
                  }
                  links.isIllegalTypeReferenceInConstraint = currentNode.kind === 129;
                  return links.isIllegalTypeReferenceInConstraint;
              }
              function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) {
                  var typeParameterSymbol;
                  function check(n) {
                      if (n.kind === 142 && n.typeName.kind === 65) {
                          var links = getNodeLinks(n);
                          if (links.isIllegalTypeReferenceInConstraint === undefined) {
                              var symbol = resolveName(typeParameter, n.typeName.text, 793056, undefined, undefined);
                              if (symbol && (symbol.flags & 262144)) {
                                  links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; });
                              }
                          }
                          if (links.isIllegalTypeReferenceInConstraint) {
                              error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list);
                          }
                      }
                      ts.forEachChild(n, check);
                  }
                  if (typeParameter.constraint) {
                      typeParameterSymbol = getSymbolOfNode(typeParameter);
                      check(typeParameter.constraint);
                  }
              }
              function getTypeFromTypeReferenceOrExpressionWithTypeArguments(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      var type;
                      if (node.kind !== 177 || ts.isSupportedExpressionWithTypeArguments(node)) {
                          var typeNameOrExpression = node.kind === 142
                              ? node.typeName
                              : node.expression;
                          var symbol = resolveEntityName(typeNameOrExpression, 793056);
                          if (symbol) {
                              if ((symbol.flags & 262144) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) {
                                  type = unknownType;
                              }
                              else {
                                  type = getDeclaredTypeOfSymbol(symbol);
                                  if (type.flags & (1024 | 2048) && type.flags & 4096) {
                                      var typeParameters = type.typeParameters;
                                      if (node.typeArguments && node.typeArguments.length === typeParameters.length) {
                                          type = createTypeReference(type, ts.map(node.typeArguments, getTypeFromTypeNode));
                                      }
                                      else {
                                          error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length);
                                          type = undefined;
                                      }
                                  }
                                  else {
                                      if (node.typeArguments) {
                                          error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
                                          type = undefined;
                                      }
                                  }
                              }
                          }
                      }
                      links.resolvedType = type || unknownType;
                  }
                  return links.resolvedType;
              }
              function getTypeFromTypeQueryNode(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = getWidenedType(checkExpressionOrQualifiedName(node.exprName));
                  }
                  return links.resolvedType;
              }
              function getTypeOfGlobalSymbol(symbol, arity) {
                  function getTypeDeclaration(symbol) {
                      var declarations = symbol.declarations;
                      for (var _i = 0; _i < declarations.length; _i++) {
                          var declaration = declarations[_i];
                          switch (declaration.kind) {
                              case 202:
                              case 203:
                              case 205:
                                  return declaration;
                          }
                      }
                  }
                  if (!symbol) {
                      return emptyObjectType;
                  }
                  var type = getDeclaredTypeOfSymbol(symbol);
                  if (!(type.flags & 48128)) {
                      error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name);
                      return emptyObjectType;
                  }
                  if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) {
                      error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity);
                      return emptyObjectType;
                  }
                  return type;
              }
              function getGlobalValueSymbol(name) {
                  return getGlobalSymbol(name, 107455, ts.Diagnostics.Cannot_find_global_value_0);
              }
              function getGlobalTypeSymbol(name) {
                  return getGlobalSymbol(name, 793056, ts.Diagnostics.Cannot_find_global_type_0);
              }
              function getGlobalSymbol(name, meaning, diagnostic) {
                  return resolveName(undefined, name, meaning, diagnostic, name);
              }
              function getGlobalType(name, arity) {
                  if (arity === void 0) { arity = 0; }
                  return getTypeOfGlobalSymbol(getGlobalTypeSymbol(name), arity);
              }
              function getGlobalESSymbolConstructorSymbol() {
                  return globalESSymbolConstructorSymbol || (globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol"));
              }
              function createIterableType(elementType) {
                  return globalIterableType !== emptyObjectType ? createTypeReference(globalIterableType, [elementType]) : emptyObjectType;
              }
              function createArrayType(elementType) {
                  var arrayType = globalArrayType || getDeclaredTypeOfSymbol(globalArraySymbol);
                  return arrayType !== emptyObjectType ? createTypeReference(arrayType, [elementType]) : emptyObjectType;
              }
              function getTypeFromArrayTypeNode(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType));
                  }
                  return links.resolvedType;
              }
              function createTupleType(elementTypes) {
                  var id = getTypeListId(elementTypes);
                  var type = tupleTypes[id];
                  if (!type) {
                      type = tupleTypes[id] = createObjectType(8192);
                      type.elementTypes = elementTypes;
                  }
                  return type;
              }
              function getTypeFromTupleTypeNode(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode));
                  }
                  return links.resolvedType;
              }
              function addTypeToSortedSet(sortedSet, type) {
                  if (type.flags & 16384) {
                      addTypesToSortedSet(sortedSet, type.types);
                  }
                  else {
                      var i = 0;
                      var id = type.id;
                      while (i < sortedSet.length && sortedSet[i].id < id) {
                          i++;
                      }
                      if (i === sortedSet.length || sortedSet[i].id !== id) {
                          sortedSet.splice(i, 0, type);
                      }
                  }
              }
              function addTypesToSortedSet(sortedTypes, types) {
                  for (var _i = 0; _i < types.length; _i++) {
                      var type = types[_i];
                      addTypeToSortedSet(sortedTypes, type);
                  }
              }
              function isSubtypeOfAny(candidate, types) {
                  for (var _i = 0; _i < types.length; _i++) {
                      var type = types[_i];
                      if (candidate !== type && isTypeSubtypeOf(candidate, type)) {
                          return true;
                      }
                  }
                  return false;
              }
              var removeSubtypesStack = [];
              function removeSubtypes(types) {
                  var typeListId = getTypeListId(types);
                  if (removeSubtypesStack.lastIndexOf(typeListId) >= 0) {
                      return;
                  }
                  removeSubtypesStack.push(typeListId);
                  var i = types.length;
                  while (i > 0) {
                      i--;
                      if (isSubtypeOfAny(types[i], types)) {
                          types.splice(i, 1);
                      }
                  }
                  removeSubtypesStack.pop();
              }
              function containsAnyType(types) {
                  for (var _i = 0; _i < types.length; _i++) {
                      var type = types[_i];
                      if (type.flags & 1) {
                          return true;
                      }
                  }
                  return false;
              }
              function removeAllButLast(types, typeToRemove) {
                  var i = types.length;
                  while (i > 0 && types.length > 1) {
                      i--;
                      if (types[i] === typeToRemove) {
                          types.splice(i, 1);
                      }
                  }
              }
              function getUnionType(types, noSubtypeReduction) {
                  if (types.length === 0) {
                      return emptyObjectType;
                  }
                  var sortedTypes = [];
                  addTypesToSortedSet(sortedTypes, types);
                  if (noSubtypeReduction) {
                      if (containsAnyType(sortedTypes)) {
                          return anyType;
                      }
                      removeAllButLast(sortedTypes, undefinedType);
                      removeAllButLast(sortedTypes, nullType);
                  }
                  else {
                      removeSubtypes(sortedTypes);
                  }
                  if (sortedTypes.length === 1) {
                      return sortedTypes[0];
                  }
                  var id = getTypeListId(sortedTypes);
                  var type = unionTypes[id];
                  if (!type) {
                      type = unionTypes[id] = createObjectType(16384 | getWideningFlagsOfTypes(sortedTypes));
                      type.types = sortedTypes;
                      type.reducedType = noSubtypeReduction ? undefined : type;
                  }
                  return type;
              }
              function getReducedTypeOfUnionType(type) {
                  if (!type.reducedType) {
                      type.reducedType = getUnionType(type.types, false);
                  }
                  return type.reducedType;
              }
              function getTypeFromUnionTypeNode(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true);
                  }
                  return links.resolvedType;
              }
              function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = createObjectType(32768, node.symbol);
                  }
                  return links.resolvedType;
              }
              function getStringLiteralType(node) {
                  if (ts.hasProperty(stringLiteralTypes, node.text)) {
                      return stringLiteralTypes[node.text];
                  }
                  var type = stringLiteralTypes[node.text] = createType(256);
                  type.text = ts.getTextOfNode(node);
                  return type;
              }
              function getTypeFromStringLiteral(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = getStringLiteralType(node);
                  }
                  return links.resolvedType;
              }
              function getTypeFromTypeNode(node) {
                  switch (node.kind) {
                      case 112:
                          return anyType;
                      case 122:
                          return stringType;
                      case 120:
                          return numberType;
                      case 113:
                          return booleanType;
                      case 123:
                          return esSymbolType;
                      case 99:
                          return voidType;
                      case 8:
                          return getTypeFromStringLiteral(node);
                      case 142:
                          return getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
                      case 177:
                          return getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
                      case 145:
                          return getTypeFromTypeQueryNode(node);
                      case 147:
                          return getTypeFromArrayTypeNode(node);
                      case 148:
                          return getTypeFromTupleTypeNode(node);
                      case 149:
                          return getTypeFromUnionTypeNode(node);
                      case 150:
                          return getTypeFromTypeNode(node.type);
                      case 143:
                      case 144:
                      case 146:
                          return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
                      case 65:
                      case 127:
                          var symbol = getSymbolInfo(node);
                          return symbol && getDeclaredTypeOfSymbol(symbol);
                      default:
                          return unknownType;
                  }
              }
              function instantiateList(items, mapper, instantiator) {
                  if (items && items.length) {
                      var result = [];
                      for (var _i = 0; _i < items.length; _i++) {
                          var v = items[_i];
                          result.push(instantiator(v, mapper));
                      }
                      return result;
                  }
                  return items;
              }
              function createUnaryTypeMapper(source, target) {
                  return function (t) { return t === source ? target : t; };
              }
              function createBinaryTypeMapper(source1, target1, source2, target2) {
                  return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; };
              }
              function createTypeMapper(sources, targets) {
                  switch (sources.length) {
                      case 1: return createUnaryTypeMapper(sources[0], targets[0]);
                      case 2: return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]);
                  }
                  return function (t) {
                      for (var i = 0; i < sources.length; i++) {
                          if (t === sources[i]) {
                              return targets[i];
                          }
                      }
                      return t;
                  };
              }
              function createUnaryTypeEraser(source) {
                  return function (t) { return t === source ? anyType : t; };
              }
              function createBinaryTypeEraser(source1, source2) {
                  return function (t) { return t === source1 || t === source2 ? anyType : t; };
              }
              function createTypeEraser(sources) {
                  switch (sources.length) {
                      case 1: return createUnaryTypeEraser(sources[0]);
                      case 2: return createBinaryTypeEraser(sources[0], sources[1]);
                  }
                  return function (t) {
                      for (var _i = 0; _i < sources.length; _i++) {
                          var source = sources[_i];
                          if (t === source) {
                              return anyType;
                          }
                      }
                      return t;
                  };
              }
              function createInferenceMapper(context) {
                  return function (t) {
                      for (var i = 0; i < context.typeParameters.length; i++) {
                          if (t === context.typeParameters[i]) {
                              context.inferences[i].isFixed = true;
                              return getInferredType(context, i);
                          }
                      }
                      return t;
                  };
              }
              function identityMapper(type) {
                  return type;
              }
              function combineTypeMappers(mapper1, mapper2) {
                  return function (t) { return instantiateType(mapper1(t), mapper2); };
              }
              function instantiateTypeParameter(typeParameter, mapper) {
                  var result = createType(512);
                  result.symbol = typeParameter.symbol;
                  if (typeParameter.constraint) {
                      result.constraint = instantiateType(typeParameter.constraint, mapper);
                  }
                  else {
                      result.target = typeParameter;
                      result.mapper = mapper;
                  }
                  return result;
              }
              function instantiateSignature(signature, mapper, eraseTypeParameters) {
                  var freshTypeParameters;
                  if (signature.typeParameters && !eraseTypeParameters) {
                      freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter);
                      mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper);
                  }
                  var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals);
                  result.target = signature;
                  result.mapper = mapper;
                  return result;
              }
              function instantiateSymbol(symbol, mapper) {
                  if (symbol.flags & 16777216) {
                      var links = getSymbolLinks(symbol);
                      symbol = links.target;
                      mapper = combineTypeMappers(links.mapper, mapper);
                  }
                  var result = createSymbol(16777216 | 67108864 | symbol.flags, symbol.name);
                  result.declarations = symbol.declarations;
                  result.parent = symbol.parent;
                  result.target = symbol;
                  result.mapper = mapper;
                  if (symbol.valueDeclaration) {
                      result.valueDeclaration = symbol.valueDeclaration;
                  }
                  return result;
              }
              function instantiateAnonymousType(type, mapper) {
                  var result = createObjectType(32768, type.symbol);
                  result.properties = instantiateList(getPropertiesOfObjectType(type), mapper, instantiateSymbol);
                  result.members = createSymbolTable(result.properties);
                  result.callSignatures = instantiateList(getSignaturesOfType(type, 0), mapper, instantiateSignature);
                  result.constructSignatures = instantiateList(getSignaturesOfType(type, 1), mapper, instantiateSignature);
                  var stringIndexType = getIndexTypeOfType(type, 0);
                  var numberIndexType = getIndexTypeOfType(type, 1);
                  if (stringIndexType)
                      result.stringIndexType = instantiateType(stringIndexType, mapper);
                  if (numberIndexType)
                      result.numberIndexType = instantiateType(numberIndexType, mapper);
                  return result;
              }
              function instantiateType(type, mapper) {
                  if (mapper !== identityMapper) {
                      if (type.flags & 512) {
                          return mapper(type);
                      }
                      if (type.flags & 32768) {
                          return type.symbol && type.symbol.flags & (16 | 8192 | 2048 | 4096) ?
                              instantiateAnonymousType(type, mapper) : type;
                      }
                      if (type.flags & 4096) {
                          return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType));
                      }
                      if (type.flags & 8192) {
                          return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType));
                      }
                      if (type.flags & 16384) {
                          return getUnionType(instantiateList(type.types, mapper, instantiateType), true);
                      }
                  }
                  return type;
              }
              function isContextSensitive(node) {
                  ts.Debug.assert(node.kind !== 135 || ts.isObjectLiteralMethod(node));
                  switch (node.kind) {
                      case 163:
                      case 164:
                          return isContextSensitiveFunctionLikeDeclaration(node);
                      case 155:
                          return ts.forEach(node.properties, isContextSensitive);
                      case 154:
                          return ts.forEach(node.elements, isContextSensitive);
                      case 171:
                          return isContextSensitive(node.whenTrue) ||
                              isContextSensitive(node.whenFalse);
                      case 170:
                          return node.operatorToken.kind === 49 &&
                              (isContextSensitive(node.left) || isContextSensitive(node.right));
                      case 225:
                          return isContextSensitive(node.initializer);
                      case 135:
                      case 134:
                          return isContextSensitiveFunctionLikeDeclaration(node);
                      case 162:
                          return isContextSensitive(node.expression);
                  }
                  return false;
              }
              function isContextSensitiveFunctionLikeDeclaration(node) {
                  return !node.typeParameters && node.parameters.length && !ts.forEach(node.parameters, function (p) { return p.type; });
              }
              function getTypeWithoutConstructors(type) {
                  if (type.flags & 48128) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      if (resolved.constructSignatures.length) {
                          var result = createObjectType(32768, type.symbol);
                          result.members = resolved.members;
                          result.properties = resolved.properties;
                          result.callSignatures = resolved.callSignatures;
                          result.constructSignatures = emptyArray;
                          type = result;
                      }
                  }
                  return type;
              }
              var subtypeRelation = {};
              var assignableRelation = {};
              var identityRelation = {};
              function isTypeIdenticalTo(source, target) {
                  return checkTypeRelatedTo(source, target, identityRelation, undefined);
              }
              function compareTypes(source, target) {
                  return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 : 0;
              }
              function isTypeSubtypeOf(source, target) {
                  return checkTypeSubtypeOf(source, target, undefined);
              }
              function isTypeAssignableTo(source, target) {
                  return checkTypeAssignableTo(source, target, undefined);
              }
              function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) {
                  return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain);
              }
              function checkTypeAssignableTo(source, target, errorNode, headMessage) {
                  return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage);
              }
              function isSignatureAssignableTo(source, target) {
                  var sourceType = getOrCreateTypeFromSignature(source);
                  var targetType = getOrCreateTypeFromSignature(target);
                  return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined);
              }
              function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) {
                  var errorInfo;
                  var sourceStack;
                  var targetStack;
                  var maybeStack;
                  var expandingFlags;
                  var depth = 0;
                  var overflow = false;
                  var elaborateErrors = false;
                  ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking");
                  var result = isRelatedTo(source, target, errorNode !== undefined, headMessage);
                  if (overflow) {
                      error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target));
                  }
                  else if (errorInfo) {
                      if (errorInfo.next === undefined) {
                          errorInfo = undefined;
                          elaborateErrors = true;
                          isRelatedTo(source, target, errorNode !== undefined, headMessage);
                      }
                      if (containingMessageChain) {
                          errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo);
                      }
                      diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo));
                  }
                  return result !== 0;
                  function reportError(message, arg0, arg1, arg2) {
                      errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2);
                  }
                  function isRelatedTo(source, target, reportErrors, headMessage) {
                      var result;
                      if (source === target)
                          return -1;
                      if (relation !== identityRelation) {
                          if (target.flags & 1)
                              return -1;
                          if (source === undefinedType)
                              return -1;
                          if (source === nullType && target !== undefinedType)
                              return -1;
                          if (source.flags & 128 && target === numberType)
                              return -1;
                          if (source.flags & 256 && target === stringType)
                              return -1;
                          if (relation === assignableRelation) {
                              if (source.flags & 1)
                                  return -1;
                              if (source === numberType && target.flags & 128)
                                  return -1;
                          }
                      }
                      var saveErrorInfo = errorInfo;
                      if (source.flags & 16384 || target.flags & 16384) {
                          if (relation === identityRelation) {
                              if (source.flags & 16384 && target.flags & 16384) {
                                  if (result = unionTypeRelatedToUnionType(source, target)) {
                                      if (result &= unionTypeRelatedToUnionType(target, source)) {
                                          return result;
                                      }
                                  }
                              }
                              else if (source.flags & 16384) {
                                  if (result = unionTypeRelatedToType(source, target, reportErrors)) {
                                      return result;
                                  }
                              }
                              else {
                                  if (result = unionTypeRelatedToType(target, source, reportErrors)) {
                                      return result;
                                  }
                              }
                          }
                          else {
                              if (source.flags & 16384) {
                                  if (result = unionTypeRelatedToType(source, target, reportErrors)) {
                                      return result;
                                  }
                              }
                              else {
                                  if (result = typeRelatedToUnionType(source, target, reportErrors)) {
                                      return result;
                                  }
                              }
                          }
                      }
                      else if (source.flags & 512 && target.flags & 512) {
                          if (result = typeParameterRelatedTo(source, target, reportErrors)) {
                              return result;
                          }
                      }
                      else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
                          if (result = typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) {
                              return result;
                          }
                      }
                      var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo;
                      var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source);
                      if (sourceOrApparentType.flags & 48128 && target.flags & 48128) {
                          if (result = objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors)) {
                              errorInfo = saveErrorInfo;
                              return result;
                          }
                      }
                      else if (source.flags & 512 && sourceOrApparentType.flags & 16384) {
                          errorInfo = saveErrorInfo;
                          if (result = isRelatedTo(sourceOrApparentType, target, reportErrors)) {
                              return result;
                          }
                      }
                      if (reportErrors) {
                          headMessage = headMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1;
                          var sourceType = typeToString(source);
                          var targetType = typeToString(target);
                          if (sourceType === targetType) {
                              sourceType = typeToString(source, undefined, 128);
                              targetType = typeToString(target, undefined, 128);
                          }
                          reportError(headMessage, sourceType, targetType);
                      }
                      return 0;
                  }
                  function unionTypeRelatedToUnionType(source, target) {
                      var result = -1;
                      var sourceTypes = source.types;
                      for (var _i = 0; _i < sourceTypes.length; _i++) {
                          var sourceType = sourceTypes[_i];
                          var related = typeRelatedToUnionType(sourceType, target, false);
                          if (!related) {
                              return 0;
                          }
                          result &= related;
                      }
                      return result;
                  }
                  function typeRelatedToUnionType(source, target, reportErrors) {
                      var targetTypes = target.types;
                      for (var i = 0, len = targetTypes.length; i < len; i++) {
                          var related = isRelatedTo(source, targetTypes[i], reportErrors && i === len - 1);
                          if (related) {
                              return related;
                          }
                      }
                      return 0;
                  }
                  function unionTypeRelatedToType(source, target, reportErrors) {
                      var result = -1;
                      var sourceTypes = source.types;
                      for (var _i = 0; _i < sourceTypes.length; _i++) {
                          var sourceType = sourceTypes[_i];
                          var related = isRelatedTo(sourceType, target, reportErrors);
                          if (!related) {
                              return 0;
                          }
                          result &= related;
                      }
                      return result;
                  }
                  function typesRelatedTo(sources, targets, reportErrors) {
                      var result = -1;
                      for (var i = 0, len = sources.length; i < len; i++) {
                          var related = isRelatedTo(sources[i], targets[i], reportErrors);
                          if (!related) {
                              return 0;
                          }
                          result &= related;
                      }
                      return result;
                  }
                  function typeParameterRelatedTo(source, target, reportErrors) {
                      if (relation === identityRelation) {
                          if (source.symbol.name !== target.symbol.name) {
                              return 0;
                          }
                          if (source.constraint === target.constraint) {
                              return -1;
                          }
                          if (source.constraint === noConstraintType || target.constraint === noConstraintType) {
                              return 0;
                          }
                          return isRelatedTo(source.constraint, target.constraint, reportErrors);
                      }
                      else {
                          while (true) {
                              var constraint = getConstraintOfTypeParameter(source);
                              if (constraint === target)
                                  return -1;
                              if (!(constraint && constraint.flags & 512))
                                  break;
                              source = constraint;
                          }
                          return 0;
                      }
                  }
                  function objectTypeRelatedTo(source, target, reportErrors) {
                      if (overflow) {
                          return 0;
                      }
                      var id = relation !== identityRelation || source.id < target.id ? source.id + "," + target.id : target.id + "," + source.id;
                      var related = relation[id];
                      if (related !== undefined) {
                          if (!elaborateErrors || (related === 3)) {
                              return related === 1 ? -1 : 0;
                          }
                      }
                      if (depth > 0) {
                          for (var i = 0; i < depth; i++) {
                              if (maybeStack[i][id]) {
                                  return 1;
                              }
                          }
                          if (depth === 100) {
                              overflow = true;
                              return 0;
                          }
                      }
                      else {
                          sourceStack = [];
                          targetStack = [];
                          maybeStack = [];
                          expandingFlags = 0;
                      }
                      sourceStack[depth] = source;
                      targetStack[depth] = target;
                      maybeStack[depth] = {};
                      maybeStack[depth][id] = 1;
                      depth++;
                      var saveExpandingFlags = expandingFlags;
                      if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack))
                          expandingFlags |= 1;
                      if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack))
                          expandingFlags |= 2;
                      var result;
                      if (expandingFlags === 3) {
                          result = 1;
                      }
                      else {
                          result = propertiesRelatedTo(source, target, reportErrors);
                          if (result) {
                              result &= signaturesRelatedTo(source, target, 0, reportErrors);
                              if (result) {
                                  result &= signaturesRelatedTo(source, target, 1, reportErrors);
                                  if (result) {
                                      result &= stringIndexTypesRelatedTo(source, target, reportErrors);
                                      if (result) {
                                          result &= numberIndexTypesRelatedTo(source, target, reportErrors);
                                      }
                                  }
                              }
                          }
                      }
                      expandingFlags = saveExpandingFlags;
                      depth--;
                      if (result) {
                          var maybeCache = maybeStack[depth];
                          var destinationCache = (result === -1 || depth === 0) ? relation : maybeStack[depth - 1];
                          ts.copyMap(maybeCache, destinationCache);
                      }
                      else {
                          relation[id] = reportErrors ? 3 : 2;
                      }
                      return result;
                  }
                  function isDeeplyNestedGeneric(type, stack) {
                      if (type.flags & 4096 && depth >= 10) {
                          var target_1 = type.target;
                          var count = 0;
                          for (var i = 0; i < depth; i++) {
                              var t = stack[i];
                              if (t.flags & 4096 && t.target === target_1) {
                                  count++;
                                  if (count >= 10)
                                      return true;
                              }
                          }
                      }
                      return false;
                  }
                  function propertiesRelatedTo(source, target, reportErrors) {
                      if (relation === identityRelation) {
                          return propertiesIdenticalTo(source, target);
                      }
                      var result = -1;
                      var properties = getPropertiesOfObjectType(target);
                      var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 131072);
                      for (var _i = 0; _i < properties.length; _i++) {
                          var targetProp = properties[_i];
                          var sourceProp = getPropertyOfType(source, targetProp.name);
                          if (sourceProp !== targetProp) {
                              if (!sourceProp) {
                                  if (!(targetProp.flags & 536870912) || requireOptionalProperties) {
                                      if (reportErrors) {
                                          reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source));
                                      }
                                      return 0;
                                  }
                              }
                              else if (!(targetProp.flags & 134217728)) {
                                  var sourceFlags = getDeclarationFlagsFromSymbol(sourceProp);
                                  var targetFlags = getDeclarationFlagsFromSymbol(targetProp);
                                  if (sourceFlags & 32 || targetFlags & 32) {
                                      if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
                                          if (reportErrors) {
                                              if (sourceFlags & 32 && targetFlags & 32) {
                                                  reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp));
                                              }
                                              else {
                                                  reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourceFlags & 32 ? source : target), typeToString(sourceFlags & 32 ? target : source));
                                              }
                                          }
                                          return 0;
                                      }
                                  }
                                  else if (targetFlags & 64) {
                                      var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32;
                                      var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(sourceProp.parent) : undefined;
                                      var targetClass = getDeclaredTypeOfSymbol(targetProp.parent);
                                      if (!sourceClass || !hasBaseType(sourceClass, targetClass)) {
                                          if (reportErrors) {
                                              reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass));
                                          }
                                          return 0;
                                      }
                                  }
                                  else if (sourceFlags & 64) {
                                      if (reportErrors) {
                                          reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
                                      }
                                      return 0;
                                  }
                                  var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors);
                                  if (!related) {
                                      if (reportErrors) {
                                          reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
                                      }
                                      return 0;
                                  }
                                  result &= related;
                                  if (sourceProp.flags & 536870912 && !(targetProp.flags & 536870912)) {
                                      if (reportErrors) {
                                          reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
                                      }
                                      return 0;
                                  }
                              }
                          }
                      }
                      return result;
                  }
                  function propertiesIdenticalTo(source, target) {
                      var sourceProperties = getPropertiesOfObjectType(source);
                      var targetProperties = getPropertiesOfObjectType(target);
                      if (sourceProperties.length !== targetProperties.length) {
                          return 0;
                      }
                      var result = -1;
                      for (var _i = 0; _i < sourceProperties.length; _i++) {
                          var sourceProp = sourceProperties[_i];
                          var targetProp = getPropertyOfObjectType(target, sourceProp.name);
                          if (!targetProp) {
                              return 0;
                          }
                          var related = compareProperties(sourceProp, targetProp, isRelatedTo);
                          if (!related) {
                              return 0;
                          }
                          result &= related;
                      }
                      return result;
                  }
                  function signaturesRelatedTo(source, target, kind, reportErrors) {
                      if (relation === identityRelation) {
                          return signaturesIdenticalTo(source, target, kind);
                      }
                      if (target === anyFunctionType || source === anyFunctionType) {
                          return -1;
                      }
                      var sourceSignatures = getSignaturesOfType(source, kind);
                      var targetSignatures = getSignaturesOfType(target, kind);
                      var result = -1;
                      var saveErrorInfo = errorInfo;
                      outer: for (var _i = 0; _i < targetSignatures.length; _i++) {
                          var t = targetSignatures[_i];
                          if (!t.hasStringLiterals || target.flags & 65536) {
                              var localErrors = reportErrors;
                              for (var _a = 0; _a < sourceSignatures.length; _a++) {
                                  var s = sourceSignatures[_a];
                                  if (!s.hasStringLiterals || source.flags & 65536) {
                                      var related = signatureRelatedTo(s, t, localErrors);
                                      if (related) {
                                          result &= related;
                                          errorInfo = saveErrorInfo;
                                          continue outer;
                                      }
                                      localErrors = false;
                                  }
                              }
                              return 0;
                          }
                      }
                      return result;
                  }
                  function signatureRelatedTo(source, target, reportErrors) {
                      if (source === target) {
                          return -1;
                      }
                      if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) {
                          return 0;
                      }
                      var sourceMax = source.parameters.length;
                      var targetMax = target.parameters.length;
                      var checkCount;
                      if (source.hasRestParameter && target.hasRestParameter) {
                          checkCount = sourceMax > targetMax ? sourceMax : targetMax;
                          sourceMax--;
                          targetMax--;
                      }
                      else if (source.hasRestParameter) {
                          sourceMax--;
                          checkCount = targetMax;
                      }
                      else if (target.hasRestParameter) {
                          targetMax--;
                          checkCount = sourceMax;
                      }
                      else {
                          checkCount = sourceMax < targetMax ? sourceMax : targetMax;
                      }
                      source = getErasedSignature(source);
                      target = getErasedSignature(target);
                      var result = -1;
                      for (var i = 0; i < checkCount; i++) {
                          var s_1 = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
                          var t_1 = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
                          var saveErrorInfo = errorInfo;
                          var related = isRelatedTo(s_1, t_1, reportErrors);
                          if (!related) {
                              related = isRelatedTo(t_1, s_1, false);
                              if (!related) {
                                  if (reportErrors) {
                                      reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name);
                                  }
                                  return 0;
                              }
                              errorInfo = saveErrorInfo;
                          }
                          result &= related;
                      }
                      var t = getReturnTypeOfSignature(target);
                      if (t === voidType)
                          return result;
                      var s = getReturnTypeOfSignature(source);
                      return result & isRelatedTo(s, t, reportErrors);
                  }
                  function signaturesIdenticalTo(source, target, kind) {
                      var sourceSignatures = getSignaturesOfType(source, kind);
                      var targetSignatures = getSignaturesOfType(target, kind);
                      if (sourceSignatures.length !== targetSignatures.length) {
                          return 0;
                      }
                      var result = -1;
                      for (var i = 0, len = sourceSignatures.length; i < len; ++i) {
                          var related = compareSignatures(sourceSignatures[i], targetSignatures[i], true, isRelatedTo);
                          if (!related) {
                              return 0;
                          }
                          result &= related;
                      }
                      return result;
                  }
                  function stringIndexTypesRelatedTo(source, target, reportErrors) {
                      if (relation === identityRelation) {
                          return indexTypesIdenticalTo(0, source, target);
                      }
                      var targetType = getIndexTypeOfType(target, 0);
                      if (targetType) {
                          var sourceType = getIndexTypeOfType(source, 0);
                          if (!sourceType) {
                              if (reportErrors) {
                                  reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
                              }
                              return 0;
                          }
                          var related = isRelatedTo(sourceType, targetType, reportErrors);
                          if (!related) {
                              if (reportErrors) {
                                  reportError(ts.Diagnostics.Index_signatures_are_incompatible);
                              }
                              return 0;
                          }
                          return related;
                      }
                      return -1;
                  }
                  function numberIndexTypesRelatedTo(source, target, reportErrors) {
                      if (relation === identityRelation) {
                          return indexTypesIdenticalTo(1, source, target);
                      }
                      var targetType = getIndexTypeOfType(target, 1);
                      if (targetType) {
                          var sourceStringType = getIndexTypeOfType(source, 0);
                          var sourceNumberType = getIndexTypeOfType(source, 1);
                          if (!(sourceStringType || sourceNumberType)) {
                              if (reportErrors) {
                                  reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
                              }
                              return 0;
                          }
                          var related;
                          if (sourceStringType && sourceNumberType) {
                              related = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors);
                          }
                          else {
                              related = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors);
                          }
                          if (!related) {
                              if (reportErrors) {
                                  reportError(ts.Diagnostics.Index_signatures_are_incompatible);
                              }
                              return 0;
                          }
                          return related;
                      }
                      return -1;
                  }
                  function indexTypesIdenticalTo(indexKind, source, target) {
                      var targetType = getIndexTypeOfType(target, indexKind);
                      var sourceType = getIndexTypeOfType(source, indexKind);
                      if (!sourceType && !targetType) {
                          return -1;
                      }
                      if (sourceType && targetType) {
                          return isRelatedTo(sourceType, targetType);
                      }
                      return 0;
                  }
              }
              function isPropertyIdenticalTo(sourceProp, targetProp) {
                  return compareProperties(sourceProp, targetProp, compareTypes) !== 0;
              }
              function compareProperties(sourceProp, targetProp, compareTypes) {
                  if (sourceProp === targetProp) {
                      return -1;
                  }
                  var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (32 | 64);
                  var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (32 | 64);
                  if (sourcePropAccessibility !== targetPropAccessibility) {
                      return 0;
                  }
                  if (sourcePropAccessibility) {
                      if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) {
                          return 0;
                      }
                  }
                  else {
                      if ((sourceProp.flags & 536870912) !== (targetProp.flags & 536870912)) {
                          return 0;
                      }
                  }
                  return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
              }
              function compareSignatures(source, target, compareReturnTypes, compareTypes) {
                  if (source === target) {
                      return -1;
                  }
                  if (source.parameters.length !== target.parameters.length ||
                      source.minArgumentCount !== target.minArgumentCount ||
                      source.hasRestParameter !== target.hasRestParameter) {
                      return 0;
                  }
                  var result = -1;
                  if (source.typeParameters && target.typeParameters) {
                      if (source.typeParameters.length !== target.typeParameters.length) {
                          return 0;
                      }
                      for (var i = 0, len = source.typeParameters.length; i < len; ++i) {
                          var related = compareTypes(source.typeParameters[i], target.typeParameters[i]);
                          if (!related) {
                              return 0;
                          }
                          result &= related;
                      }
                  }
                  else if (source.typeParameters || target.typeParameters) {
                      return 0;
                  }
                  source = getErasedSignature(source);
                  target = getErasedSignature(target);
                  for (var i = 0, len = source.parameters.length; i < len; i++) {
                      var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]);
                      var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]);
                      var related = compareTypes(s, t);
                      if (!related) {
                          return 0;
                      }
                      result &= related;
                  }
                  if (compareReturnTypes) {
                      result &= compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
                  }
                  return result;
              }
              function isSupertypeOfEach(candidate, types) {
                  for (var _i = 0; _i < types.length; _i++) {
                      var type = types[_i];
                      if (candidate !== type && !isTypeSubtypeOf(type, candidate))
                          return false;
                  }
                  return true;
              }
              function getCommonSupertype(types) {
                  return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; });
              }
              function reportNoCommonSupertypeError(types, errorLocation, errorMessageChainHead) {
                  var bestSupertype;
                  var bestSupertypeDownfallType;
                  var bestSupertypeScore = 0;
                  for (var i = 0; i < types.length; i++) {
                      var score = 0;
                      var downfallType = undefined;
                      for (var j = 0; j < types.length; j++) {
                          if (isTypeSubtypeOf(types[j], types[i])) {
                              score++;
                          }
                          else if (!downfallType) {
                              downfallType = types[j];
                          }
                      }
                      ts.Debug.assert(!!downfallType, "If there is no common supertype, each type should have a downfallType");
                      if (score > bestSupertypeScore) {
                          bestSupertype = types[i];
                          bestSupertypeDownfallType = downfallType;
                          bestSupertypeScore = score;
                      }
                      if (bestSupertypeScore === types.length - 1) {
                          break;
                      }
                  }
                  checkTypeSubtypeOf(bestSupertypeDownfallType, bestSupertype, errorLocation, ts.Diagnostics.Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0, errorMessageChainHead);
              }
              function isArrayType(type) {
                  return type.flags & 4096 && type.target === globalArrayType;
              }
              function isArrayLikeType(type) {
                  return !(type.flags & (32 | 64)) && isTypeAssignableTo(type, anyArrayType);
              }
              function isTupleLikeType(type) {
                  return !!getPropertyOfType(type, "0");
              }
              function isTupleType(type) {
                  return (type.flags & 8192) && !!type.elementTypes;
              }
              function getWidenedTypeOfObjectLiteral(type) {
                  var properties = getPropertiesOfObjectType(type);
                  var members = {};
                  ts.forEach(properties, function (p) {
                      var propType = getTypeOfSymbol(p);
                      var widenedType = getWidenedType(propType);
                      if (propType !== widenedType) {
                          var symbol = createSymbol(p.flags | 67108864, p.name);
                          symbol.declarations = p.declarations;
                          symbol.parent = p.parent;
                          symbol.type = widenedType;
                          symbol.target = p;
                          if (p.valueDeclaration)
                              symbol.valueDeclaration = p.valueDeclaration;
                          p = symbol;
                      }
                      members[p.name] = p;
                  });
                  var stringIndexType = getIndexTypeOfType(type, 0);
                  var numberIndexType = getIndexTypeOfType(type, 1);
                  if (stringIndexType)
                      stringIndexType = getWidenedType(stringIndexType);
                  if (numberIndexType)
                      numberIndexType = getWidenedType(numberIndexType);
                  return createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType);
              }
              function getWidenedType(type) {
                  if (type.flags & 786432) {
                      if (type.flags & (32 | 64)) {
                          return anyType;
                      }
                      if (type.flags & 131072) {
                          return getWidenedTypeOfObjectLiteral(type);
                      }
                      if (type.flags & 16384) {
                          return getUnionType(ts.map(type.types, getWidenedType));
                      }
                      if (isArrayType(type)) {
                          return createArrayType(getWidenedType(type.typeArguments[0]));
                      }
                  }
                  return type;
              }
              function reportWideningErrorsInType(type) {
                  if (type.flags & 16384) {
                      var errorReported = false;
                      ts.forEach(type.types, function (t) {
                          if (reportWideningErrorsInType(t)) {
                              errorReported = true;
                          }
                      });
                      return errorReported;
                  }
                  if (isArrayType(type)) {
                      return reportWideningErrorsInType(type.typeArguments[0]);
                  }
                  if (type.flags & 131072) {
                      var errorReported = false;
                      ts.forEach(getPropertiesOfObjectType(type), function (p) {
                          var t = getTypeOfSymbol(p);
                          if (t.flags & 262144) {
                              if (!reportWideningErrorsInType(t)) {
                                  error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(getWidenedType(t)));
                              }
                              errorReported = true;
                          }
                      });
                      return errorReported;
                  }
                  return false;
              }
              function reportImplicitAnyError(declaration, type) {
                  var typeAsString = typeToString(getWidenedType(type));
                  var diagnostic;
                  switch (declaration.kind) {
                      case 133:
                      case 132:
                          diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type;
                          break;
                      case 130:
                          diagnostic = declaration.dotDotDotToken ?
                              ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type :
                              ts.Diagnostics.Parameter_0_implicitly_has_an_1_type;
                          break;
                      case 201:
                      case 135:
                      case 134:
                      case 137:
                      case 138:
                      case 163:
                      case 164:
                          if (!declaration.name) {
                              error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                              return;
                          }
                          diagnostic = ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                          break;
                      default:
                          diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type;
                  }
                  error(declaration, diagnostic, ts.declarationNameToString(declaration.name), typeAsString);
              }
              function reportErrorsFromWidening(declaration, type) {
                  if (produceDiagnostics && compilerOptions.noImplicitAny && type.flags & 262144) {
                      if (!reportWideningErrorsInType(type)) {
                          reportImplicitAnyError(declaration, type);
                      }
                  }
              }
              function forEachMatchingParameterType(source, target, callback) {
                  var sourceMax = source.parameters.length;
                  var targetMax = target.parameters.length;
                  var count;
                  if (source.hasRestParameter && target.hasRestParameter) {
                      count = sourceMax > targetMax ? sourceMax : targetMax;
                      sourceMax--;
                      targetMax--;
                  }
                  else if (source.hasRestParameter) {
                      sourceMax--;
                      count = targetMax;
                  }
                  else if (target.hasRestParameter) {
                      targetMax--;
                      count = sourceMax;
                  }
                  else {
                      count = sourceMax < targetMax ? sourceMax : targetMax;
                  }
                  for (var i = 0; i < count; i++) {
                      var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
                      var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
                      callback(s, t);
                  }
              }
              function createInferenceContext(typeParameters, inferUnionTypes) {
                  var inferences = [];
                  for (var _i = 0; _i < typeParameters.length; _i++) {
                      var unused = typeParameters[_i];
                      inferences.push({ primary: undefined, secondary: undefined, isFixed: false });
                  }
                  return {
                      typeParameters: typeParameters,
                      inferUnionTypes: inferUnionTypes,
                      inferences: inferences,
                      inferredTypes: new Array(typeParameters.length)
                  };
              }
              function inferTypes(context, source, target) {
                  var sourceStack;
                  var targetStack;
                  var depth = 0;
                  var inferiority = 0;
                  inferFromTypes(source, target);
                  function isInProcess(source, target) {
                      for (var i = 0; i < depth; i++) {
                          if (source === sourceStack[i] && target === targetStack[i]) {
                              return true;
                          }
                      }
                      return false;
                  }
                  function isWithinDepthLimit(type, stack) {
                      if (depth >= 5) {
                          var target_2 = type.target;
                          var count = 0;
                          for (var i = 0; i < depth; i++) {
                              var t = stack[i];
                              if (t.flags & 4096 && t.target === target_2) {
                                  count++;
                              }
                          }
                          return count < 5;
                      }
                      return true;
                  }
                  function inferFromTypes(source, target) {
                      if (source === anyFunctionType) {
                          return;
                      }
                      if (target.flags & 512) {
                          var typeParameters = context.typeParameters;
                          for (var i = 0; i < typeParameters.length; i++) {
                              if (target === typeParameters[i]) {
                                  var inferences = context.inferences[i];
                                  if (!inferences.isFixed) {
                                      var candidates = inferiority ?
                                          inferences.secondary || (inferences.secondary = []) :
                                          inferences.primary || (inferences.primary = []);
                                      if (!ts.contains(candidates, source)) {
                                          candidates.push(source);
                                      }
                                  }
                                  return;
                              }
                          }
                      }
                      else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
                          var sourceTypes = source.typeArguments;
                          var targetTypes = target.typeArguments;
                          for (var i = 0; i < sourceTypes.length; i++) {
                              inferFromTypes(sourceTypes[i], targetTypes[i]);
                          }
                      }
                      else if (target.flags & 16384) {
                          var targetTypes = target.types;
                          var typeParameterCount = 0;
                          var typeParameter;
                          for (var _i = 0; _i < targetTypes.length; _i++) {
                              var t = targetTypes[_i];
                              if (t.flags & 512 && ts.contains(context.typeParameters, t)) {
                                  typeParameter = t;
                                  typeParameterCount++;
                              }
                              else {
                                  inferFromTypes(source, t);
                              }
                          }
                          if (typeParameterCount === 1) {
                              inferiority++;
                              inferFromTypes(source, typeParameter);
                              inferiority--;
                          }
                      }
                      else if (source.flags & 16384) {
                          var sourceTypes = source.types;
                          for (var _a = 0; _a < sourceTypes.length; _a++) {
                              var sourceType = sourceTypes[_a];
                              inferFromTypes(sourceType, target);
                          }
                      }
                      else if (source.flags & 48128 && (target.flags & (4096 | 8192) ||
                          (target.flags & 32768) && target.symbol && target.symbol.flags & (8192 | 2048))) {
                          if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) {
                              if (depth === 0) {
                                  sourceStack = [];
                                  targetStack = [];
                              }
                              sourceStack[depth] = source;
                              targetStack[depth] = target;
                              depth++;
                              inferFromProperties(source, target);
                              inferFromSignatures(source, target, 0);
                              inferFromSignatures(source, target, 1);
                              inferFromIndexTypes(source, target, 0, 0);
                              inferFromIndexTypes(source, target, 1, 1);
                              inferFromIndexTypes(source, target, 0, 1);
                              depth--;
                          }
                      }
                  }
                  function inferFromProperties(source, target) {
                      var properties = getPropertiesOfObjectType(target);
                      for (var _i = 0; _i < properties.length; _i++) {
                          var targetProp = properties[_i];
                          var sourceProp = getPropertyOfObjectType(source, targetProp.name);
                          if (sourceProp) {
                              inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
                          }
                      }
                  }
                  function inferFromSignatures(source, target, kind) {
                      var sourceSignatures = getSignaturesOfType(source, kind);
                      var targetSignatures = getSignaturesOfType(target, kind);
                      var sourceLen = sourceSignatures.length;
                      var targetLen = targetSignatures.length;
                      var len = sourceLen < targetLen ? sourceLen : targetLen;
                      for (var i = 0; i < len; i++) {
                          inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i]));
                      }
                  }
                  function inferFromSignature(source, target) {
                      forEachMatchingParameterType(source, target, inferFromTypes);
                      inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
                  }
                  function inferFromIndexTypes(source, target, sourceKind, targetKind) {
                      var targetIndexType = getIndexTypeOfType(target, targetKind);
                      if (targetIndexType) {
                          var sourceIndexType = getIndexTypeOfType(source, sourceKind);
                          if (sourceIndexType) {
                              inferFromTypes(sourceIndexType, targetIndexType);
                          }
                      }
                  }
              }
              function getInferenceCandidates(context, index) {
                  var inferences = context.inferences[index];
                  return inferences.primary || inferences.secondary || emptyArray;
              }
              function getInferredType(context, index) {
                  var inferredType = context.inferredTypes[index];
                  var inferenceSucceeded;
                  if (!inferredType) {
                      var inferences = getInferenceCandidates(context, index);
                      if (inferences.length) {
                          var unionOrSuperType = context.inferUnionTypes ? getUnionType(inferences) : getCommonSupertype(inferences);
                          inferredType = unionOrSuperType ? getWidenedType(unionOrSuperType) : unknownType;
                          inferenceSucceeded = !!unionOrSuperType;
                      }
                      else {
                          inferredType = emptyObjectType;
                          inferenceSucceeded = true;
                      }
                      if (inferenceSucceeded) {
                          var constraint = getConstraintOfTypeParameter(context.typeParameters[index]);
                          inferredType = constraint && !isTypeAssignableTo(inferredType, constraint) ? constraint : inferredType;
                      }
                      else if (context.failedTypeParameterIndex === undefined || context.failedTypeParameterIndex > index) {
                          context.failedTypeParameterIndex = index;
                      }
                      context.inferredTypes[index] = inferredType;
                  }
                  return inferredType;
              }
              function getInferredTypes(context) {
                  for (var i = 0; i < context.inferredTypes.length; i++) {
                      getInferredType(context, i);
                  }
                  return context.inferredTypes;
              }
              function hasAncestor(node, kind) {
                  return ts.getAncestor(node, kind) !== undefined;
              }
              function getResolvedSymbol(node) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedSymbol) {
                      links.resolvedSymbol = (!ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node)) || unknownSymbol;
                  }
                  return links.resolvedSymbol;
              }
              function isInTypeQuery(node) {
                  while (node) {
                      switch (node.kind) {
                          case 145:
                              return true;
                          case 65:
                          case 127:
                              node = node.parent;
                              continue;
                          default:
                              return false;
                      }
                  }
                  ts.Debug.fail("should not get here");
              }
              function removeTypesFromUnionType(type, typeKind, isOfTypeKind, allowEmptyUnionResult) {
                  if (type.flags & 16384) {
                      var types = type.types;
                      if (ts.forEach(types, function (t) { return !!(t.flags & typeKind) === isOfTypeKind; })) {
                          var narrowedType = getUnionType(ts.filter(types, function (t) { return !(t.flags & typeKind) === isOfTypeKind; }));
                          if (allowEmptyUnionResult || narrowedType !== emptyObjectType) {
                              return narrowedType;
                          }
                      }
                  }
                  else if (allowEmptyUnionResult && !!(type.flags & typeKind) === isOfTypeKind) {
                      return getUnionType(emptyArray);
                  }
                  return type;
              }
              function hasInitializer(node) {
                  return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent));
              }
              function isVariableAssignedWithin(symbol, node) {
                  var links = getNodeLinks(node);
                  if (links.assignmentChecks) {
                      var cachedResult = links.assignmentChecks[symbol.id];
                      if (cachedResult !== undefined) {
                          return cachedResult;
                      }
                  }
                  else {
                      links.assignmentChecks = {};
                  }
                  return links.assignmentChecks[symbol.id] = isAssignedIn(node);
                  function isAssignedInBinaryExpression(node) {
                      if (node.operatorToken.kind >= 53 && node.operatorToken.kind <= 64) {
                          var n = node.left;
                          while (n.kind === 162) {
                              n = n.expression;
                          }
                          if (n.kind === 65 && getResolvedSymbol(n) === symbol) {
                              return true;
                          }
                      }
                      return ts.forEachChild(node, isAssignedIn);
                  }
                  function isAssignedInVariableDeclaration(node) {
                      if (!ts.isBindingPattern(node.name) && getSymbolOfNode(node) === symbol && hasInitializer(node)) {
                          return true;
                      }
                      return ts.forEachChild(node, isAssignedIn);
                  }
                  function isAssignedIn(node) {
                      switch (node.kind) {
                          case 170:
                              return isAssignedInBinaryExpression(node);
                          case 199:
                          case 153:
                              return isAssignedInVariableDeclaration(node);
                          case 151:
                          case 152:
                          case 154:
                          case 155:
                          case 156:
                          case 157:
                          case 158:
                          case 159:
                          case 161:
                          case 162:
                          case 168:
                          case 165:
                          case 166:
                          case 167:
                          case 169:
                          case 171:
                          case 174:
                          case 180:
                          case 181:
                          case 183:
                          case 184:
                          case 185:
                          case 186:
                          case 187:
                          case 188:
                          case 189:
                          case 192:
                          case 193:
                          case 194:
                          case 221:
                          case 222:
                          case 195:
                          case 196:
                          case 197:
                          case 224:
                              return ts.forEachChild(node, isAssignedIn);
                      }
                      return false;
                  }
              }
              function resolveLocation(node) {
                  var containerNodes = [];
                  for (var parent_3 = node.parent; parent_3; parent_3 = parent_3.parent) {
                      if ((ts.isExpression(parent_3) || ts.isObjectLiteralMethod(node)) &&
                          isContextSensitive(parent_3)) {
                          containerNodes.unshift(parent_3);
                      }
                  }
                  ts.forEach(containerNodes, function (node) { getTypeOfNode(node); });
              }
              function getSymbolAtLocation(node) {
                  resolveLocation(node);
                  return getSymbolInfo(node);
              }
              function getTypeAtLocation(node) {
                  resolveLocation(node);
                  return getTypeOfNode(node);
              }
              function getTypeOfSymbolAtLocation(symbol, node) {
                  resolveLocation(node);
                  return getNarrowedTypeOfSymbol(symbol, node);
              }
              function getNarrowedTypeOfSymbol(symbol, node) {
                  var type = getTypeOfSymbol(symbol);
                  if (node && symbol.flags & 3 && type.flags & (1 | 48128 | 16384 | 512)) {
                      loop: while (node.parent) {
                          var child = node;
                          node = node.parent;
                          var narrowedType = type;
                          switch (node.kind) {
                              case 184:
                                  if (child !== node.expression) {
                                      narrowedType = narrowType(type, node.expression, child === node.thenStatement);
                                  }
                                  break;
                              case 171:
                                  if (child !== node.condition) {
                                      narrowedType = narrowType(type, node.condition, child === node.whenTrue);
                                  }
                                  break;
                              case 170:
                                  if (child === node.right) {
                                      if (node.operatorToken.kind === 48) {
                                          narrowedType = narrowType(type, node.left, true);
                                      }
                                      else if (node.operatorToken.kind === 49) {
                                          narrowedType = narrowType(type, node.left, false);
                                      }
                                  }
                                  break;
                              case 228:
                              case 206:
                              case 201:
                              case 135:
                              case 134:
                              case 137:
                              case 138:
                              case 136:
                                  break loop;
                          }
                          if (narrowedType !== type) {
                              if (isVariableAssignedWithin(symbol, node)) {
                                  break;
                              }
                              type = narrowedType;
                          }
                      }
                  }
                  return type;
                  function narrowTypeByEquality(type, expr, assumeTrue) {
                      if (expr.left.kind !== 166 || expr.right.kind !== 8) {
                          return type;
                      }
                      var left = expr.left;
                      var right = expr.right;
                      if (left.expression.kind !== 65 || getResolvedSymbol(left.expression) !== symbol) {
                          return type;
                      }
                      var typeInfo = primitiveTypeInfo[right.text];
                      if (expr.operatorToken.kind === 31) {
                          assumeTrue = !assumeTrue;
                      }
                      if (assumeTrue) {
                          if (!typeInfo) {
                              return removeTypesFromUnionType(type, 258 | 132 | 8 | 1048576, true, false);
                          }
                          if (isTypeSubtypeOf(typeInfo.type, type)) {
                              return typeInfo.type;
                          }
                          return removeTypesFromUnionType(type, typeInfo.flags, false, false);
                      }
                      else {
                          if (typeInfo) {
                              return removeTypesFromUnionType(type, typeInfo.flags, true, false);
                          }
                          return type;
                      }
                  }
                  function narrowTypeByAnd(type, expr, assumeTrue) {
                      if (assumeTrue) {
                          return narrowType(narrowType(type, expr.left, true), expr.right, true);
                      }
                      else {
                          return getUnionType([
                              narrowType(type, expr.left, false),
                              narrowType(narrowType(type, expr.left, true), expr.right, false)
                          ]);
                      }
                  }
                  function narrowTypeByOr(type, expr, assumeTrue) {
                      if (assumeTrue) {
                          return getUnionType([
                              narrowType(type, expr.left, true),
                              narrowType(narrowType(type, expr.left, false), expr.right, true)
                          ]);
                      }
                      else {
                          return narrowType(narrowType(type, expr.left, false), expr.right, false);
                      }
                  }
                  function narrowTypeByInstanceof(type, expr, assumeTrue) {
                      if (type.flags & 1 || !assumeTrue || expr.left.kind !== 65 || getResolvedSymbol(expr.left) !== symbol) {
                          return type;
                      }
                      var rightType = checkExpression(expr.right);
                      if (!isTypeSubtypeOf(rightType, globalFunctionType)) {
                          return type;
                      }
                      var targetType;
                      var prototypeProperty = getPropertyOfType(rightType, "prototype");
                      if (prototypeProperty) {
                          var prototypePropertyType = getTypeOfSymbol(prototypeProperty);
                          if (prototypePropertyType !== anyType) {
                              targetType = prototypePropertyType;
                          }
                      }
                      if (!targetType) {
                          var constructSignatures;
                          if (rightType.flags & 2048) {
                              constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures;
                          }
                          else if (rightType.flags & 32768) {
                              constructSignatures = getSignaturesOfType(rightType, 1);
                          }
                          if (constructSignatures && constructSignatures.length) {
                              targetType = getUnionType(ts.map(constructSignatures, function (signature) { return getReturnTypeOfSignature(getErasedSignature(signature)); }));
                          }
                      }
                      if (targetType) {
                          if (isTypeSubtypeOf(targetType, type)) {
                              return targetType;
                          }
                          if (type.flags & 16384) {
                              return getUnionType(ts.filter(type.types, function (t) { return isTypeSubtypeOf(t, targetType); }));
                          }
                      }
                      return type;
                  }
                  function narrowType(type, expr, assumeTrue) {
                      switch (expr.kind) {
                          case 162:
                              return narrowType(type, expr.expression, assumeTrue);
                          case 170:
                              var operator = expr.operatorToken.kind;
                              if (operator === 30 || operator === 31) {
                                  return narrowTypeByEquality(type, expr, assumeTrue);
                              }
                              else if (operator === 48) {
                                  return narrowTypeByAnd(type, expr, assumeTrue);
                              }
                              else if (operator === 49) {
                                  return narrowTypeByOr(type, expr, assumeTrue);
                              }
                              else if (operator === 87) {
                                  return narrowTypeByInstanceof(type, expr, assumeTrue);
                              }
                              break;
                          case 168:
                              if (expr.operator === 46) {
                                  return narrowType(type, expr.operand, !assumeTrue);
                              }
                              break;
                      }
                      return type;
                  }
              }
              function checkIdentifier(node) {
                  var symbol = getResolvedSymbol(node);
                  if (symbol === argumentsSymbol && ts.getContainingFunction(node).kind === 164 && languageVersion < 2) {
                      error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                  }
                  if (symbol.flags & 8388608 && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) {
                      markAliasSymbolAsReferenced(symbol);
                  }
                  checkCollisionWithCapturedSuperVariable(node, node);
                  checkCollisionWithCapturedThisVariable(node, node);
                  checkBlockScopedBindingCapturedInLoop(node, symbol);
                  return getNarrowedTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol), node);
              }
              function isInsideFunction(node, threshold) {
                  var current = node;
                  while (current && current !== threshold) {
                      if (ts.isFunctionLike(current)) {
                          return true;
                      }
                      current = current.parent;
                  }
                  return false;
              }
              function checkBlockScopedBindingCapturedInLoop(node, symbol) {
                  if (languageVersion >= 2 ||
                      (symbol.flags & 2) === 0 ||
                      symbol.valueDeclaration.parent.kind === 224) {
                      return;
                  }
                  var container = symbol.valueDeclaration;
                  while (container.kind !== 200) {
                      container = container.parent;
                  }
                  container = container.parent;
                  if (container.kind === 181) {
                      container = container.parent;
                  }
                  var inFunction = isInsideFunction(node.parent, container);
                  var current = container;
                  while (current && !ts.nodeStartsNewLexicalEnvironment(current)) {
                      if (isIterationStatement(current, false)) {
                          if (inFunction) {
                              grammarErrorOnFirstToken(current, ts.Diagnostics.Loop_contains_block_scoped_variable_0_referenced_by_a_function_in_the_loop_This_is_only_supported_in_ECMAScript_6_or_higher, ts.declarationNameToString(node));
                          }
                          getNodeLinks(symbol.valueDeclaration).flags |= 256;
                          break;
                      }
                      current = current.parent;
                  }
              }
              function captureLexicalThis(node, container) {
                  var classNode = container.parent && container.parent.kind === 202 ? container.parent : undefined;
                  getNodeLinks(node).flags |= 2;
                  if (container.kind === 133 || container.kind === 136) {
                      getNodeLinks(classNode).flags |= 4;
                  }
                  else {
                      getNodeLinks(container).flags |= 4;
                  }
              }
              function checkThisExpression(node) {
                  var container = ts.getThisContainer(node, true);
                  var needToCaptureLexicalThis = false;
                  if (container.kind === 164) {
                      container = ts.getThisContainer(container, false);
                      needToCaptureLexicalThis = (languageVersion < 2);
                  }
                  switch (container.kind) {
                      case 206:
                          error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                          break;
                      case 205:
                          error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                          break;
                      case 136:
                          if (isInConstructorArgumentInitializer(node, container)) {
                              error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                          }
                          break;
                      case 133:
                      case 132:
                          if (container.flags & 128) {
                              error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
                          }
                          break;
                      case 128:
                          error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                          break;
                  }
                  if (needToCaptureLexicalThis) {
                      captureLexicalThis(node, container);
                  }
                  var classNode = container.parent && container.parent.kind === 202 ? container.parent : undefined;
                  if (classNode) {
                      var symbol = getSymbolOfNode(classNode);
                      return container.flags & 128 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol);
                  }
                  return anyType;
              }
              function isInConstructorArgumentInitializer(node, constructorDecl) {
                  for (var n = node; n && n !== constructorDecl; n = n.parent) {
                      if (n.kind === 130) {
                          return true;
                      }
                  }
                  return false;
              }
              function checkSuperExpression(node) {
                  var isCallExpression = node.parent.kind === 158 && node.parent.expression === node;
                  var enclosingClass = ts.getAncestor(node, 202);
                  var baseClass;
                  if (enclosingClass && ts.getClassExtendsHeritageClauseElement(enclosingClass)) {
                      var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass));
                      var baseTypes = getBaseTypes(classType);
                      baseClass = baseTypes.length && baseTypes[0];
                  }
                  if (!baseClass) {
                      error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class);
                      return unknownType;
                  }
                  var container = ts.getSuperContainer(node, true);
                  if (container) {
                      var canUseSuperExpression = false;
                      var needToCaptureLexicalThis;
                      if (isCallExpression) {
                          canUseSuperExpression = container.kind === 136;
                      }
                      else {
                          needToCaptureLexicalThis = false;
                          while (container && container.kind === 164) {
                              container = ts.getSuperContainer(container, true);
                              needToCaptureLexicalThis = languageVersion < 2;
                          }
                          if (container && container.parent && container.parent.kind === 202) {
                              if (container.flags & 128) {
                                  canUseSuperExpression =
                                      container.kind === 135 ||
                                          container.kind === 134 ||
                                          container.kind === 137 ||
                                          container.kind === 138;
                              }
                              else {
                                  canUseSuperExpression =
                                      container.kind === 135 ||
                                          container.kind === 134 ||
                                          container.kind === 137 ||
                                          container.kind === 138 ||
                                          container.kind === 133 ||
                                          container.kind === 132 ||
                                          container.kind === 136;
                              }
                          }
                      }
                      if (canUseSuperExpression) {
                          var returnType;
                          if ((container.flags & 128) || isCallExpression) {
                              getNodeLinks(node).flags |= 32;
                              returnType = getTypeOfSymbol(baseClass.symbol);
                          }
                          else {
                              getNodeLinks(node).flags |= 16;
                              returnType = baseClass;
                          }
                          if (container.kind === 136 && isInConstructorArgumentInitializer(node, container)) {
                              error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                              returnType = unknownType;
                          }
                          if (!isCallExpression && needToCaptureLexicalThis) {
                              captureLexicalThis(node.parent, container);
                          }
                          return returnType;
                      }
                  }
                  if (container && container.kind === 128) {
                      error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                  }
                  else if (isCallExpression) {
                      error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                  }
                  else {
                      error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class);
                  }
                  return unknownType;
              }
              function getContextuallyTypedParameterType(parameter) {
                  if (isFunctionExpressionOrArrowFunction(parameter.parent)) {
                      var func = parameter.parent;
                      if (isContextSensitive(func)) {
                          var contextualSignature = getContextualSignature(func);
                          if (contextualSignature) {
                              var funcHasRestParameters = ts.hasRestParameters(func);
                              var len = func.parameters.length - (funcHasRestParameters ? 1 : 0);
                              var indexOfParameter = ts.indexOf(func.parameters, parameter);
                              if (indexOfParameter < len) {
                                  return getTypeAtPosition(contextualSignature, indexOfParameter);
                              }
                              if (indexOfParameter === (func.parameters.length - 1) &&
                                  funcHasRestParameters && contextualSignature.hasRestParameter && func.parameters.length >= contextualSignature.parameters.length) {
                                  return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters));
                              }
                          }
                      }
                  }
                  return undefined;
              }
              function getContextualTypeForInitializerExpression(node) {
                  var declaration = node.parent;
                  if (node === declaration.initializer) {
                      if (declaration.type) {
                          return getTypeFromTypeNode(declaration.type);
                      }
                      if (declaration.kind === 130) {
                          var type = getContextuallyTypedParameterType(declaration);
                          if (type) {
                              return type;
                          }
                      }
                      if (ts.isBindingPattern(declaration.name)) {
                          return getTypeFromBindingPattern(declaration.name);
                      }
                  }
                  return undefined;
              }
              function getContextualTypeForReturnExpression(node) {
                  var func = ts.getContainingFunction(node);
                  if (func) {
                      if (func.type || func.kind === 136 || func.kind === 137 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(func.symbol, 138))) {
                          return getReturnTypeOfSignature(getSignatureFromDeclaration(func));
                      }
                      var signature = getContextualSignatureForFunctionLikeDeclaration(func);
                      if (signature) {
                          return getReturnTypeOfSignature(signature);
                      }
                  }
                  return undefined;
              }
              function getContextualTypeForArgument(callTarget, arg) {
                  var args = getEffectiveCallArguments(callTarget);
                  var argIndex = ts.indexOf(args, arg);
                  if (argIndex >= 0) {
                      var signature = getResolvedSignature(callTarget);
                      return getTypeAtPosition(signature, argIndex);
                  }
                  return undefined;
              }
              function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
                  if (template.parent.kind === 160) {
                      return getContextualTypeForArgument(template.parent, substitutionExpression);
                  }
                  return undefined;
              }
              function getContextualTypeForBinaryOperand(node) {
                  var binaryExpression = node.parent;
                  var operator = binaryExpression.operatorToken.kind;
                  if (operator >= 53 && operator <= 64) {
                      if (node === binaryExpression.right) {
                          return checkExpression(binaryExpression.left);
                      }
                  }
                  else if (operator === 49) {
                      var type = getContextualType(binaryExpression);
                      if (!type && node === binaryExpression.right) {
                          type = checkExpression(binaryExpression.left);
                      }
                      return type;
                  }
                  return undefined;
              }
              function applyToContextualType(type, mapper) {
                  if (!(type.flags & 16384)) {
                      return mapper(type);
                  }
                  var types = type.types;
                  var mappedType;
                  var mappedTypes;
                  for (var _i = 0; _i < types.length; _i++) {
                      var current = types[_i];
                      var t = mapper(current);
                      if (t) {
                          if (!mappedType) {
                              mappedType = t;
                          }
                          else if (!mappedTypes) {
                              mappedTypes = [mappedType, t];
                          }
                          else {
                              mappedTypes.push(t);
                          }
                      }
                  }
                  return mappedTypes ? getUnionType(mappedTypes) : mappedType;
              }
              function getTypeOfPropertyOfContextualType(type, name) {
                  return applyToContextualType(type, function (t) {
                      var prop = getPropertyOfObjectType(t, name);
                      return prop ? getTypeOfSymbol(prop) : undefined;
                  });
              }
              function getIndexTypeOfContextualType(type, kind) {
                  return applyToContextualType(type, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); });
              }
              function contextualTypeIsTupleLikeType(type) {
                  return !!(type.flags & 16384 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type));
              }
              function contextualTypeHasIndexSignature(type, kind) {
                  return !!(type.flags & 16384 ? ts.forEach(type.types, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); }) : getIndexTypeOfObjectOrUnionType(type, kind));
              }
              function getContextualTypeForObjectLiteralMethod(node) {
                  ts.Debug.assert(ts.isObjectLiteralMethod(node));
                  if (isInsideWithStatementBody(node)) {
                      return undefined;
                  }
                  return getContextualTypeForObjectLiteralElement(node);
              }
              function getContextualTypeForObjectLiteralElement(element) {
                  var objectLiteral = element.parent;
                  var type = getContextualType(objectLiteral);
                  if (type) {
                      if (!ts.hasDynamicName(element)) {
                          var symbolName = getSymbolOfNode(element).name;
                          var propertyType = getTypeOfPropertyOfContextualType(type, symbolName);
                          if (propertyType) {
                              return propertyType;
                          }
                      }
                      return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) ||
                          getIndexTypeOfContextualType(type, 0);
                  }
                  return undefined;
              }
              function getContextualTypeForElementExpression(node) {
                  var arrayLiteral = node.parent;
                  var type = getContextualType(arrayLiteral);
                  if (type) {
                      var index = ts.indexOf(arrayLiteral.elements, node);
                      return getTypeOfPropertyOfContextualType(type, "" + index)
                          || getIndexTypeOfContextualType(type, 1)
                          || (languageVersion >= 2 ? checkIteratedType(type, undefined) : undefined);
                  }
                  return undefined;
              }
              function getContextualTypeForConditionalOperand(node) {
                  var conditional = node.parent;
                  return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined;
              }
              function getContextualType(node) {
                  if (isInsideWithStatementBody(node)) {
                      return undefined;
                  }
                  if (node.contextualType) {
                      return node.contextualType;
                  }
                  var parent = node.parent;
                  switch (parent.kind) {
                      case 199:
                      case 130:
                      case 133:
                      case 132:
                      case 153:
                          return getContextualTypeForInitializerExpression(node);
                      case 164:
                      case 192:
                          return getContextualTypeForReturnExpression(node);
                      case 158:
                      case 159:
                          return getContextualTypeForArgument(parent, node);
                      case 161:
                          return getTypeFromTypeNode(parent.type);
                      case 170:
                          return getContextualTypeForBinaryOperand(node);
                      case 225:
                          return getContextualTypeForObjectLiteralElement(parent);
                      case 154:
                          return getContextualTypeForElementExpression(node);
                      case 171:
                          return getContextualTypeForConditionalOperand(node);
                      case 178:
                          ts.Debug.assert(parent.parent.kind === 172);
                          return getContextualTypeForSubstitutionExpression(parent.parent, node);
                      case 162:
                          return getContextualType(parent);
                  }
                  return undefined;
              }
              function getNonGenericSignature(type) {
                  var signatures = getSignaturesOfObjectOrUnionType(type, 0);
                  if (signatures.length === 1) {
                      var signature = signatures[0];
                      if (!signature.typeParameters) {
                          return signature;
                      }
                  }
              }
              function isFunctionExpressionOrArrowFunction(node) {
                  return node.kind === 163 || node.kind === 164;
              }
              function getContextualSignatureForFunctionLikeDeclaration(node) {
                  return isFunctionExpressionOrArrowFunction(node) ? getContextualSignature(node) : undefined;
              }
              function getContextualSignature(node) {
                  ts.Debug.assert(node.kind !== 135 || ts.isObjectLiteralMethod(node));
                  var type = ts.isObjectLiteralMethod(node)
                      ? getContextualTypeForObjectLiteralMethod(node)
                      : getContextualType(node);
                  if (!type) {
                      return undefined;
                  }
                  if (!(type.flags & 16384)) {
                      return getNonGenericSignature(type);
                  }
                  var signatureList;
                  var types = type.types;
                  for (var _i = 0; _i < types.length; _i++) {
                      var current = types[_i];
                      if (signatureList &&
                          getSignaturesOfObjectOrUnionType(current, 0).length > 1) {
                          return undefined;
                      }
                      var signature = getNonGenericSignature(current);
                      if (signature) {
                          if (!signatureList) {
                              signatureList = [signature];
                          }
                          else if (!compareSignatures(signatureList[0], signature, false, compareTypes)) {
                              return undefined;
                          }
                          else {
                              signatureList.push(signature);
                          }
                      }
                  }
                  var result;
                  if (signatureList) {
                      result = cloneSignature(signatureList[0]);
                      result.resolvedReturnType = undefined;
                      result.unionSignatures = signatureList;
                  }
                  return result;
              }
              function isInferentialContext(mapper) {
                  return mapper && mapper !== identityMapper;
              }
              function isAssignmentTarget(node) {
                  var parent = node.parent;
                  if (parent.kind === 170 && parent.operatorToken.kind === 53 && parent.left === node) {
                      return true;
                  }
                  if (parent.kind === 225) {
                      return isAssignmentTarget(parent.parent);
                  }
                  if (parent.kind === 154) {
                      return isAssignmentTarget(parent);
                  }
                  return false;
              }
              function checkSpreadElementExpression(node, contextualMapper) {
                  var arrayOrIterableType = checkExpressionCached(node.expression, contextualMapper);
                  return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false);
              }
              function checkArrayLiteral(node, contextualMapper) {
                  var elements = node.elements;
                  if (!elements.length) {
                      return createArrayType(undefinedType);
                  }
                  var hasSpreadElement = false;
                  var elementTypes = [];
                  var inDestructuringPattern = isAssignmentTarget(node);
                  for (var _i = 0; _i < elements.length; _i++) {
                      var e = elements[_i];
                      if (inDestructuringPattern && e.kind === 174) {
                          var restArrayType = checkExpression(e.expression, contextualMapper);
                          var restElementType = getIndexTypeOfType(restArrayType, 1) ||
                              (languageVersion >= 2 ? checkIteratedType(restArrayType, undefined) : undefined);
                          if (restElementType) {
                              elementTypes.push(restElementType);
                          }
                      }
                      else {
                          var type = checkExpression(e, contextualMapper);
                          elementTypes.push(type);
                      }
                      hasSpreadElement = hasSpreadElement || e.kind === 174;
                  }
                  if (!hasSpreadElement) {
                      var contextualType = getContextualType(node);
                      if (contextualType && contextualTypeIsTupleLikeType(contextualType) || inDestructuringPattern) {
                          return createTupleType(elementTypes);
                      }
                  }
                  return createArrayType(getUnionType(elementTypes));
              }
              function isNumericName(name) {
                  return name.kind === 128 ? isNumericComputedName(name) : isNumericLiteralName(name.text);
              }
              function isNumericComputedName(name) {
                  return allConstituentTypesHaveKind(checkComputedPropertyName(name), 1 | 132);
              }
              function isNumericLiteralName(name) {
                  return (+name).toString() === name;
              }
              function checkComputedPropertyName(node) {
                  var links = getNodeLinks(node.expression);
                  if (!links.resolvedType) {
                      links.resolvedType = checkExpression(node.expression);
                      if (!allConstituentTypesHaveKind(links.resolvedType, 1 | 132 | 258 | 1048576)) {
                          error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any);
                      }
                      else {
                          checkThatExpressionIsProperSymbolReference(node.expression, links.resolvedType, true);
                      }
                  }
                  return links.resolvedType;
              }
              function checkObjectLiteral(node, contextualMapper) {
                  checkGrammarObjectLiteralExpression(node);
                  var propertiesTable = {};
                  var propertiesArray = [];
                  var contextualType = getContextualType(node);
                  var typeFlags;
                  for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                      var memberDecl = _a[_i];
                      var member = memberDecl.symbol;
                      if (memberDecl.kind === 225 ||
                          memberDecl.kind === 226 ||
                          ts.isObjectLiteralMethod(memberDecl)) {
                          var type = void 0;
                          if (memberDecl.kind === 225) {
                              type = checkPropertyAssignment(memberDecl, contextualMapper);
                          }
                          else if (memberDecl.kind === 135) {
                              type = checkObjectLiteralMethod(memberDecl, contextualMapper);
                          }
                          else {
                              ts.Debug.assert(memberDecl.kind === 226);
                              type = checkExpression(memberDecl.name, contextualMapper);
                          }
                          typeFlags |= type.flags;
                          var prop = createSymbol(4 | 67108864 | member.flags, member.name);
                          prop.declarations = member.declarations;
                          prop.parent = member.parent;
                          if (member.valueDeclaration) {
                              prop.valueDeclaration = member.valueDeclaration;
                          }
                          prop.type = type;
                          prop.target = member;
                          member = prop;
                      }
                      else {
                          ts.Debug.assert(memberDecl.kind === 137 || memberDecl.kind === 138);
                          checkAccessorDeclaration(memberDecl);
                      }
                      if (!ts.hasDynamicName(memberDecl)) {
                          propertiesTable[member.name] = member;
                      }
                      propertiesArray.push(member);
                  }
                  var stringIndexType = getIndexType(0);
                  var numberIndexType = getIndexType(1);
                  var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexType, numberIndexType);
                  result.flags |= 131072 | 524288 | (typeFlags & 262144);
                  return result;
                  function getIndexType(kind) {
                      if (contextualType && contextualTypeHasIndexSignature(contextualType, kind)) {
                          var propTypes = [];
                          for (var i = 0; i < propertiesArray.length; i++) {
                              var propertyDecl = node.properties[i];
                              if (kind === 0 || isNumericName(propertyDecl.name)) {
                                  var type = getTypeOfSymbol(propertiesArray[i]);
                                  if (!ts.contains(propTypes, type)) {
                                      propTypes.push(type);
                                  }
                              }
                          }
                          var result_1 = propTypes.length ? getUnionType(propTypes) : undefinedType;
                          typeFlags |= result_1.flags;
                          return result_1;
                      }
                      return undefined;
                  }
              }
              function getDeclarationKindFromSymbol(s) {
                  return s.valueDeclaration ? s.valueDeclaration.kind : 133;
              }
              function getDeclarationFlagsFromSymbol(s) {
                  return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 16 | 128 : 0;
              }
              function checkClassPropertyAccess(node, left, type, prop) {
                  var flags = getDeclarationFlagsFromSymbol(prop);
                  if (!(flags & (32 | 64))) {
                      return;
                  }
                  var enclosingClassDeclaration = ts.getAncestor(node, 202);
                  var enclosingClass = enclosingClassDeclaration ? getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClassDeclaration)) : undefined;
                  var declaringClass = getDeclaredTypeOfSymbol(prop.parent);
                  if (flags & 32) {
                      if (declaringClass !== enclosingClass) {
                          error(node, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(declaringClass));
                      }
                      return;
                  }
                  if (left.kind === 91) {
                      return;
                  }
                  if (!enclosingClass || !hasBaseType(enclosingClass, declaringClass)) {
                      error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(declaringClass));
                      return;
                  }
                  if (flags & 128) {
                      return;
                  }
                  if (!(getTargetType(type).flags & (1024 | 2048) && hasBaseType(type, enclosingClass))) {
                      error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));
                  }
              }
              function checkPropertyAccessExpression(node) {
                  return checkPropertyAccessExpressionOrQualifiedName(node, node.expression, node.name);
              }
              function checkQualifiedName(node) {
                  return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right);
              }
              function checkPropertyAccessExpressionOrQualifiedName(node, left, right) {
                  var type = checkExpressionOrQualifiedName(left);
                  if (type === unknownType)
                      return type;
                  if (type !== anyType) {
                      var apparentType = getApparentType(getWidenedType(type));
                      if (apparentType === unknownType) {
                          return unknownType;
                      }
                      var prop = getPropertyOfType(apparentType, right.text);
                      if (!prop) {
                          if (right.text) {
                              error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type));
                          }
                          return unknownType;
                      }
                      getNodeLinks(node).resolvedSymbol = prop;
                      if (prop.parent && prop.parent.flags & 32) {
                          if (left.kind === 91 && getDeclarationKindFromSymbol(prop) !== 135) {
                              error(right, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
                          }
                          else {
                              checkClassPropertyAccess(node, left, type, prop);
                          }
                      }
                      return getTypeOfSymbol(prop);
                  }
                  return anyType;
              }
              function isValidPropertyAccess(node, propertyName) {
                  var left = node.kind === 156
                      ? node.expression
                      : node.left;
                  var type = checkExpressionOrQualifiedName(left);
                  if (type !== unknownType && type !== anyType) {
                      var prop = getPropertyOfType(getWidenedType(type), propertyName);
                      if (prop && prop.parent && prop.parent.flags & 32) {
                          if (left.kind === 91 && getDeclarationKindFromSymbol(prop) !== 135) {
                              return false;
                          }
                          else {
                              var modificationCount = diagnostics.getModificationCount();
                              checkClassPropertyAccess(node, left, type, prop);
                              return diagnostics.getModificationCount() === modificationCount;
                          }
                      }
                  }
                  return true;
              }
              function checkIndexedAccess(node) {
                  if (!node.argumentExpression) {
                      var sourceFile = getSourceFile(node);
                      if (node.parent.kind === 159 && node.parent.expression === node) {
                          var start = ts.skipTrivia(sourceFile.text, node.expression.end);
                          var end = node.end;
                          grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead);
                      }
                      else {
                          var start = node.end - "]".length;
                          var end = node.end;
                          grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Expression_expected);
                      }
                  }
                  var objectType = getApparentType(checkExpression(node.expression));
                  var indexType = node.argumentExpression ? checkExpression(node.argumentExpression) : unknownType;
                  if (objectType === unknownType) {
                      return unknownType;
                  }
                  var isConstEnum = isConstEnumObjectType(objectType);
                  if (isConstEnum &&
                      (!node.argumentExpression || node.argumentExpression.kind !== 8)) {
                      error(node.argumentExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal);
                      return unknownType;
                  }
                  if (node.argumentExpression) {
                      var name_6 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType);
                      if (name_6 !== undefined) {
                          var prop = getPropertyOfType(objectType, name_6);
                          if (prop) {
                              getNodeLinks(node).resolvedSymbol = prop;
                              return getTypeOfSymbol(prop);
                          }
                          else if (isConstEnum) {
                              error(node.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_const_enum_1, name_6, symbolToString(objectType.symbol));
                              return unknownType;
                          }
                      }
                  }
                  if (allConstituentTypesHaveKind(indexType, 1 | 258 | 132 | 1048576)) {
                      if (allConstituentTypesHaveKind(indexType, 1 | 132)) {
                          var numberIndexType = getIndexTypeOfType(objectType, 1);
                          if (numberIndexType) {
                              return numberIndexType;
                          }
                      }
                      var stringIndexType = getIndexTypeOfType(objectType, 0);
                      if (stringIndexType) {
                          return stringIndexType;
                      }
                      if (compilerOptions.noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && objectType !== anyType) {
                          error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type);
                      }
                      return anyType;
                  }
                  error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_symbol_or_any);
                  return unknownType;
              }
              function getPropertyNameForIndexedAccess(indexArgumentExpression, indexArgumentType) {
                  if (indexArgumentExpression.kind === 8 || indexArgumentExpression.kind === 7) {
                      return indexArgumentExpression.text;
                  }
                  if (checkThatExpressionIsProperSymbolReference(indexArgumentExpression, indexArgumentType, false)) {
                      var rightHandSideName = indexArgumentExpression.name.text;
                      return ts.getPropertyNameForKnownSymbolName(rightHandSideName);
                  }
                  return undefined;
              }
              function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) {
                  if (expressionType === unknownType) {
                      return false;
                  }
                  if (!ts.isWellKnownSymbolSyntactically(expression)) {
                      return false;
                  }
                  if ((expressionType.flags & 1048576) === 0) {
                      if (reportError) {
                          error(expression, ts.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol, ts.getTextOfNode(expression));
                      }
                      return false;
                  }
                  var leftHandSide = expression.expression;
                  var leftHandSideSymbol = getResolvedSymbol(leftHandSide);
                  if (!leftHandSideSymbol) {
                      return false;
                  }
                  var globalESSymbol = getGlobalESSymbolConstructorSymbol();
                  if (!globalESSymbol) {
                      return false;
                  }
                  if (leftHandSideSymbol !== globalESSymbol) {
                      if (reportError) {
                          error(leftHandSide, ts.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object);
                      }
                      return false;
                  }
                  return true;
              }
              function resolveUntypedCall(node) {
                  if (node.kind === 160) {
                      checkExpression(node.template);
                  }
                  else {
                      ts.forEach(node.arguments, function (argument) {
                          checkExpression(argument);
                      });
                  }
                  return anySignature;
              }
              function resolveErrorCall(node) {
                  resolveUntypedCall(node);
                  return unknownSignature;
              }
              function reorderCandidates(signatures, result) {
                  var lastParent;
                  var lastSymbol;
                  var cutoffIndex = 0;
                  var index;
                  var specializedIndex = -1;
                  var spliceIndex;
                  ts.Debug.assert(!result.length);
                  for (var _i = 0; _i < signatures.length; _i++) {
                      var signature = signatures[_i];
                      var symbol = signature.declaration && getSymbolOfNode(signature.declaration);
                      var parent_4 = signature.declaration && signature.declaration.parent;
                      if (!lastSymbol || symbol === lastSymbol) {
                          if (lastParent && parent_4 === lastParent) {
                              index++;
                          }
                          else {
                              lastParent = parent_4;
                              index = cutoffIndex;
                          }
                      }
                      else {
                          index = cutoffIndex = result.length;
                          lastParent = parent_4;
                      }
                      lastSymbol = symbol;
                      if (signature.hasStringLiterals) {
                          specializedIndex++;
                          spliceIndex = specializedIndex;
                          cutoffIndex++;
                      }
                      else {
                          spliceIndex = index;
                      }
                      result.splice(spliceIndex, 0, signature);
                  }
              }
              function getSpreadArgumentIndex(args) {
                  for (var i = 0; i < args.length; i++) {
                      if (args[i].kind === 174) {
                          return i;
                      }
                  }
                  return -1;
              }
              function hasCorrectArity(node, args, signature) {
                  var adjustedArgCount;
                  var typeArguments;
                  var callIsIncomplete;
                  if (node.kind === 160) {
                      var tagExpression = node;
                      adjustedArgCount = args.length;
                      typeArguments = undefined;
                      if (tagExpression.template.kind === 172) {
                          var templateExpression = tagExpression.template;
                          var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans);
                          ts.Debug.assert(lastSpan !== undefined);
                          callIsIncomplete = ts.nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated;
                      }
                      else {
                          var templateLiteral = tagExpression.template;
                          ts.Debug.assert(templateLiteral.kind === 10);
                          callIsIncomplete = !!templateLiteral.isUnterminated;
                      }
                  }
                  else {
                      var callExpression = node;
                      if (!callExpression.arguments) {
                          ts.Debug.assert(callExpression.kind === 159);
                          return signature.minArgumentCount === 0;
                      }
                      adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length;
                      callIsIncomplete = callExpression.arguments.end === callExpression.end;
                      typeArguments = callExpression.typeArguments;
                  }
                  var hasRightNumberOfTypeArgs = !typeArguments ||
                      (signature.typeParameters && typeArguments.length === signature.typeParameters.length);
                  if (!hasRightNumberOfTypeArgs) {
                      return false;
                  }
                  var spreadArgIndex = getSpreadArgumentIndex(args);
                  if (spreadArgIndex >= 0) {
                      return signature.hasRestParameter && spreadArgIndex >= signature.parameters.length - 1;
                  }
                  if (!signature.hasRestParameter && adjustedArgCount > signature.parameters.length) {
                      return false;
                  }
                  var hasEnoughArguments = adjustedArgCount >= signature.minArgumentCount;
                  return callIsIncomplete || hasEnoughArguments;
              }
              function getSingleCallSignature(type) {
                  if (type.flags & 48128) {
                      var resolved = resolveObjectOrUnionTypeMembers(type);
                      if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 &&
                          resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) {
                          return resolved.callSignatures[0];
                      }
                  }
                  return undefined;
              }
              function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) {
                  var context = createInferenceContext(signature.typeParameters, true);
                  forEachMatchingParameterType(contextualSignature, signature, function (source, target) {
                      inferTypes(context, instantiateType(source, contextualMapper), target);
                  });
                  return getSignatureInstantiation(signature, getInferredTypes(context));
              }
              function inferTypeArguments(signature, args, excludeArgument, context) {
                  var typeParameters = signature.typeParameters;
                  var inferenceMapper = createInferenceMapper(context);
                  for (var i = 0; i < typeParameters.length; i++) {
                      if (!context.inferences[i].isFixed) {
                          context.inferredTypes[i] = undefined;
                      }
                  }
                  if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) {
                      context.failedTypeParameterIndex = undefined;
                  }
                  for (var i = 0; i < args.length; i++) {
                      var arg = args[i];
                      if (arg.kind !== 176) {
                          var paramType = getTypeAtPosition(signature, i);
                          var argType = void 0;
                          if (i === 0 && args[i].parent.kind === 160) {
                              argType = globalTemplateStringsArrayType;
                          }
                          else {
                              var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper;
                              argType = checkExpressionWithContextualType(arg, paramType, mapper);
                          }
                          inferTypes(context, argType, paramType);
                      }
                  }
                  if (excludeArgument) {
                      for (var i = 0; i < args.length; i++) {
                          if (excludeArgument[i] === false) {
                              var arg = args[i];
                              var paramType = getTypeAtPosition(signature, i);
                              inferTypes(context, checkExpressionWithContextualType(arg, paramType, inferenceMapper), paramType);
                          }
                      }
                  }
                  getInferredTypes(context);
              }
              function checkTypeArguments(signature, typeArguments, typeArgumentResultTypes, reportErrors) {
                  var typeParameters = signature.typeParameters;
                  var typeArgumentsAreAssignable = true;
                  for (var i = 0; i < typeParameters.length; i++) {
                      var typeArgNode = typeArguments[i];
                      var typeArgument = getTypeFromTypeNode(typeArgNode);
                      typeArgumentResultTypes[i] = typeArgument;
                      if (typeArgumentsAreAssignable) {
                          var constraint = getConstraintOfTypeParameter(typeParameters[i]);
                          if (constraint) {
                              typeArgumentsAreAssignable = checkTypeAssignableTo(typeArgument, constraint, reportErrors ? typeArgNode : undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
                          }
                      }
                  }
                  return typeArgumentsAreAssignable;
              }
              function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) {
                  for (var i = 0; i < args.length; i++) {
                      var arg = args[i];
                      if (arg.kind !== 176) {
                          var paramType = getTypeAtPosition(signature, i);
                          var argType = i === 0 && node.kind === 160
                              ? globalTemplateStringsArrayType
                              : arg.kind === 8 && !reportErrors
                                  ? getStringLiteralType(arg)
                                  : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
                          if (!checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1)) {
                              return false;
                          }
                      }
                  }
                  return true;
              }
              function getEffectiveCallArguments(node) {
                  var args;
                  if (node.kind === 160) {
                      var template = node.template;
                      args = [template];
                      if (template.kind === 172) {
                          ts.forEach(template.templateSpans, function (span) {
                              args.push(span.expression);
                          });
                      }
                  }
                  else {
                      args = node.arguments || emptyArray;
                  }
                  return args;
              }
              function getEffectiveTypeArguments(callExpression) {
                  if (callExpression.expression.kind === 91) {
                      var containingClass = ts.getAncestor(callExpression, 202);
                      var baseClassTypeNode = containingClass && ts.getClassExtendsHeritageClauseElement(containingClass);
                      return baseClassTypeNode && baseClassTypeNode.typeArguments;
                  }
                  else {
                      return callExpression.typeArguments;
                  }
              }
              function resolveCall(node, signatures, candidatesOutArray) {
                  var isTaggedTemplate = node.kind === 160;
                  var typeArguments;
                  if (!isTaggedTemplate) {
                      typeArguments = getEffectiveTypeArguments(node);
                      if (node.expression.kind !== 91) {
                          ts.forEach(typeArguments, checkSourceElement);
                      }
                  }
                  var candidates = candidatesOutArray || [];
                  reorderCandidates(signatures, candidates);
                  if (!candidates.length) {
                      error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
                      return resolveErrorCall(node);
                  }
                  var args = getEffectiveCallArguments(node);
                  var excludeArgument;
                  for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) {
                      if (isContextSensitive(args[i])) {
                          if (!excludeArgument) {
                              excludeArgument = new Array(args.length);
                          }
                          excludeArgument[i] = true;
                      }
                  }
                  var candidateForArgumentError;
                  var candidateForTypeArgumentError;
                  var resultOfFailedInference;
                  var result;
                  if (candidates.length > 1) {
                      result = chooseOverload(candidates, subtypeRelation);
                  }
                  if (!result) {
                      candidateForArgumentError = undefined;
                      candidateForTypeArgumentError = undefined;
                      resultOfFailedInference = undefined;
                      result = chooseOverload(candidates, assignableRelation);
                  }
                  if (result) {
                      return result;
                  }
                  if (candidateForArgumentError) {
                      checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true);
                  }
                  else if (candidateForTypeArgumentError) {
                      if (!isTaggedTemplate && node.typeArguments) {
                          checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, [], true);
                      }
                      else {
                          ts.Debug.assert(resultOfFailedInference.failedTypeParameterIndex >= 0);
                          var failedTypeParameter = candidateForTypeArgumentError.typeParameters[resultOfFailedInference.failedTypeParameterIndex];
                          var inferenceCandidates = getInferenceCandidates(resultOfFailedInference, resultOfFailedInference.failedTypeParameterIndex);
                          var diagnosticChainHead = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly, typeToString(failedTypeParameter));
                          reportNoCommonSupertypeError(inferenceCandidates, node.expression || node.tag, diagnosticChainHead);
                      }
                  }
                  else {
                      error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
                  }
                  if (!produceDiagnostics) {
                      for (var _i = 0; _i < candidates.length; _i++) {
                          var candidate = candidates[_i];
                          if (hasCorrectArity(node, args, candidate)) {
                              return candidate;
                          }
                      }
                  }
                  return resolveErrorCall(node);
                  function chooseOverload(candidates, relation) {
                      for (var _i = 0; _i < candidates.length; _i++) {
                          var originalCandidate = candidates[_i];
                          if (!hasCorrectArity(node, args, originalCandidate)) {
                              continue;
                          }
                          var candidate = void 0;
                          var typeArgumentsAreValid = void 0;
                          var inferenceContext = originalCandidate.typeParameters
                              ? createInferenceContext(originalCandidate.typeParameters, false)
                              : undefined;
                          while (true) {
                              candidate = originalCandidate;
                              if (candidate.typeParameters) {
                                  var typeArgumentTypes = void 0;
                                  if (typeArguments) {
                                      typeArgumentTypes = new Array(candidate.typeParameters.length);
                                      typeArgumentsAreValid = checkTypeArguments(candidate, typeArguments, typeArgumentTypes, false);
                                  }
                                  else {
                                      inferTypeArguments(candidate, args, excludeArgument, inferenceContext);
                                      typeArgumentsAreValid = inferenceContext.failedTypeParameterIndex === undefined;
                                      typeArgumentTypes = inferenceContext.inferredTypes;
                                  }
                                  if (!typeArgumentsAreValid) {
                                      break;
                                  }
                                  candidate = getSignatureInstantiation(candidate, typeArgumentTypes);
                              }
                              if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) {
                                  break;
                              }
                              var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1;
                              if (index < 0) {
                                  return candidate;
                              }
                              excludeArgument[index] = false;
                          }
                          if (originalCandidate.typeParameters) {
                              var instantiatedCandidate = candidate;
                              if (typeArgumentsAreValid) {
                                  candidateForArgumentError = instantiatedCandidate;
                              }
                              else {
                                  candidateForTypeArgumentError = originalCandidate;
                                  if (!typeArguments) {
                                      resultOfFailedInference = inferenceContext;
                                  }
                              }
                          }
                          else {
                              ts.Debug.assert(originalCandidate === candidate);
                              candidateForArgumentError = originalCandidate;
                          }
                      }
                      return undefined;
                  }
              }
              function resolveCallExpression(node, candidatesOutArray) {
                  if (node.expression.kind === 91) {
                      var superType = checkSuperExpression(node.expression);
                      if (superType !== unknownType) {
                          return resolveCall(node, getSignaturesOfType(superType, 1), candidatesOutArray);
                      }
                      return resolveUntypedCall(node);
                  }
                  var funcType = checkExpression(node.expression);
                  var apparentType = getApparentType(funcType);
                  if (apparentType === unknownType) {
                      return resolveErrorCall(node);
                  }
                  var callSignatures = getSignaturesOfType(apparentType, 0);
                  var constructSignatures = getSignaturesOfType(apparentType, 1);
                  if (funcType === anyType || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) {
                      if (node.typeArguments) {
                          error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
                      }
                      return resolveUntypedCall(node);
                  }
                  if (!callSignatures.length) {
                      if (constructSignatures.length) {
                          error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
                      }
                      else {
                          error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
                      }
                      return resolveErrorCall(node);
                  }
                  return resolveCall(node, callSignatures, candidatesOutArray);
              }
              function resolveNewExpression(node, candidatesOutArray) {
                  if (node.arguments && languageVersion < 2) {
                      var spreadIndex = getSpreadArgumentIndex(node.arguments);
                      if (spreadIndex >= 0) {
                          error(node.arguments[spreadIndex], ts.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_6_and_higher);
                      }
                  }
                  var expressionType = checkExpression(node.expression);
                  if (expressionType === anyType) {
                      if (node.typeArguments) {
                          error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
                      }
                      return resolveUntypedCall(node);
                  }
                  expressionType = getApparentType(expressionType);
                  if (expressionType === unknownType) {
                      return resolveErrorCall(node);
                  }
                  var constructSignatures = getSignaturesOfType(expressionType, 1);
                  if (constructSignatures.length) {
                      return resolveCall(node, constructSignatures, candidatesOutArray);
                  }
                  var callSignatures = getSignaturesOfType(expressionType, 0);
                  if (callSignatures.length) {
                      var signature = resolveCall(node, callSignatures, candidatesOutArray);
                      if (getReturnTypeOfSignature(signature) !== voidType) {
                          error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
                      }
                      return signature;
                  }
                  error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature);
                  return resolveErrorCall(node);
              }
              function resolveTaggedTemplateExpression(node, candidatesOutArray) {
                  var tagType = checkExpression(node.tag);
                  var apparentType = getApparentType(tagType);
                  if (apparentType === unknownType) {
                      return resolveErrorCall(node);
                  }
                  var callSignatures = getSignaturesOfType(apparentType, 0);
                  if (tagType === anyType || (!callSignatures.length && !(tagType.flags & 16384) && isTypeAssignableTo(tagType, globalFunctionType))) {
                      return resolveUntypedCall(node);
                  }
                  if (!callSignatures.length) {
                      error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
                      return resolveErrorCall(node);
                  }
                  return resolveCall(node, callSignatures, candidatesOutArray);
              }
              function getResolvedSignature(node, candidatesOutArray) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedSignature || candidatesOutArray) {
                      links.resolvedSignature = anySignature;
                      if (node.kind === 158) {
                          links.resolvedSignature = resolveCallExpression(node, candidatesOutArray);
                      }
                      else if (node.kind === 159) {
                          links.resolvedSignature = resolveNewExpression(node, candidatesOutArray);
                      }
                      else if (node.kind === 160) {
                          links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray);
                      }
                      else {
                          ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable.");
                      }
                  }
                  return links.resolvedSignature;
              }
              function checkCallExpression(node) {
                  checkGrammarTypeArguments(node, node.typeArguments) || checkGrammarArguments(node, node.arguments);
                  var signature = getResolvedSignature(node);
                  if (node.expression.kind === 91) {
                      return voidType;
                  }
                  if (node.kind === 159) {
                      var declaration = signature.declaration;
                      if (declaration &&
                          declaration.kind !== 136 &&
                          declaration.kind !== 140 &&
                          declaration.kind !== 144) {
                          if (compilerOptions.noImplicitAny) {
                              error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type);
                          }
                          return anyType;
                      }
                  }
                  return getReturnTypeOfSignature(signature);
              }
              function checkTaggedTemplateExpression(node) {
                  return getReturnTypeOfSignature(getResolvedSignature(node));
              }
              function checkTypeAssertion(node) {
                  var exprType = checkExpression(node.expression);
                  var targetType = getTypeFromTypeNode(node.type);
                  if (produceDiagnostics && targetType !== unknownType) {
                      var widenedType = getWidenedType(exprType);
                      if (!(isTypeAssignableTo(targetType, widenedType))) {
                          checkTypeAssignableTo(exprType, targetType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other);
                      }
                  }
                  return targetType;
              }
              function getTypeAtPosition(signature, pos) {
                  return signature.hasRestParameter ?
                      pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) :
                      pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType;
              }
              function assignContextualParameterTypes(signature, context, mapper) {
                  var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0);
                  for (var i = 0; i < len; i++) {
                      var parameter = signature.parameters[i];
                      var links = getSymbolLinks(parameter);
                      links.type = instantiateType(getTypeAtPosition(context, i), mapper);
                  }
                  if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) {
                      var parameter = ts.lastOrUndefined(signature.parameters);
                      var links = getSymbolLinks(parameter);
                      links.type = instantiateType(getTypeOfSymbol(ts.lastOrUndefined(context.parameters)), mapper);
                  }
              }
              function getReturnTypeFromBody(func, contextualMapper) {
                  var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
                  if (!func.body) {
                      return unknownType;
                  }
                  var type;
                  if (func.body.kind !== 180) {
                      type = checkExpressionCached(func.body, contextualMapper);
                  }
                  else {
                      var types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper);
                      if (types.length === 0) {
                          return voidType;
                      }
                      type = contextualSignature ? getUnionType(types) : getCommonSupertype(types);
                      if (!type) {
                          error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions);
                          return unknownType;
                      }
                  }
                  if (!contextualSignature) {
                      reportErrorsFromWidening(func, type);
                  }
                  return getWidenedType(type);
              }
              function checkAndAggregateReturnExpressionTypes(body, contextualMapper) {
                  var aggregatedTypes = [];
                  ts.forEachReturnStatement(body, function (returnStatement) {
                      var expr = returnStatement.expression;
                      if (expr) {
                          var type = checkExpressionCached(expr, contextualMapper);
                          if (!ts.contains(aggregatedTypes, type)) {
                              aggregatedTypes.push(type);
                          }
                      }
                  });
                  return aggregatedTypes;
              }
              function bodyContainsAReturnStatement(funcBody) {
                  return ts.forEachReturnStatement(funcBody, function (returnStatement) {
                      return true;
                  });
              }
              function bodyContainsSingleThrowStatement(body) {
                  return (body.statements.length === 1) && (body.statements[0].kind === 196);
              }
              function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) {
                  if (!produceDiagnostics) {
                      return;
                  }
                  if (returnType === voidType || returnType === anyType) {
                      return;
                  }
                  if (ts.nodeIsMissing(func.body) || func.body.kind !== 180) {
                      return;
                  }
                  var bodyBlock = func.body;
                  if (bodyContainsAReturnStatement(bodyBlock)) {
                      return;
                  }
                  if (bodyContainsSingleThrowStatement(bodyBlock)) {
                      return;
                  }
                  error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement);
              }
              function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) {
                  ts.Debug.assert(node.kind !== 135 || ts.isObjectLiteralMethod(node));
                  var hasGrammarError = checkGrammarDeclarationNameInStrictMode(node) || checkGrammarFunctionLikeDeclaration(node);
                  if (!hasGrammarError && node.kind === 163) {
                      checkGrammarFunctionName(node.name) || checkGrammarForGenerator(node);
                  }
                  if (contextualMapper === identityMapper && isContextSensitive(node)) {
                      return anyFunctionType;
                  }
                  var links = getNodeLinks(node);
                  var type = getTypeOfSymbol(node.symbol);
                  if (!(links.flags & 64)) {
                      var contextualSignature = getContextualSignature(node);
                      if (!(links.flags & 64)) {
                          links.flags |= 64;
                          if (contextualSignature) {
                              var signature = getSignaturesOfType(type, 0)[0];
                              if (isContextSensitive(node)) {
                                  assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper);
                              }
                              if (!node.type && !signature.resolvedReturnType) {
                                  var returnType = getReturnTypeFromBody(node, contextualMapper);
                                  if (!signature.resolvedReturnType) {
                                      signature.resolvedReturnType = returnType;
                                  }
                              }
                          }
                          checkSignatureDeclaration(node);
                      }
                  }
                  if (produceDiagnostics && node.kind !== 135 && node.kind !== 134) {
                      checkCollisionWithCapturedSuperVariable(node, node.name);
                      checkCollisionWithCapturedThisVariable(node, node.name);
                  }
                  return type;
              }
              function checkFunctionExpressionOrObjectLiteralMethodBody(node) {
                  ts.Debug.assert(node.kind !== 135 || ts.isObjectLiteralMethod(node));
                  if (node.type && !node.asteriskToken) {
                      checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
                  }
                  if (node.body) {
                      if (node.body.kind === 180) {
                          checkSourceElement(node.body);
                      }
                      else {
                          var exprType = checkExpression(node.body);
                          if (node.type) {
                              checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, undefined);
                          }
                          checkFunctionExpressionBodies(node.body);
                      }
                  }
              }
              function checkArithmeticOperandType(operand, type, diagnostic) {
                  if (!allConstituentTypesHaveKind(type, 1 | 132)) {
                      error(operand, diagnostic);
                      return false;
                  }
                  return true;
              }
              function checkReferenceExpression(n, invalidReferenceMessage, constantVariableMessage) {
                  function findSymbol(n) {
                      var symbol = getNodeLinks(n).resolvedSymbol;
                      return symbol && getExportSymbolOfValueSymbolIfExported(symbol);
                  }
                  function isReferenceOrErrorExpression(n) {
                      switch (n.kind) {
                          case 65: {
                              var symbol = findSymbol(n);
                              return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3) !== 0;
                          }
                          case 156: {
                              var symbol = findSymbol(n);
                              return !symbol || symbol === unknownSymbol || (symbol.flags & ~8) !== 0;
                          }
                          case 157:
                              return true;
                          case 162:
                              return isReferenceOrErrorExpression(n.expression);
                          default:
                              return false;
                      }
                  }
                  function isConstVariableReference(n) {
                      switch (n.kind) {
                          case 65:
                          case 156: {
                              var symbol = findSymbol(n);
                              return symbol && (symbol.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 8192) !== 0;
                          }
                          case 157: {
                              var index = n.argumentExpression;
                              var symbol = findSymbol(n.expression);
                              if (symbol && index && index.kind === 8) {
                                  var name_7 = index.text;
                                  var prop = getPropertyOfType(getTypeOfSymbol(symbol), name_7);
                                  return prop && (prop.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 8192) !== 0;
                              }
                              return false;
                          }
                          case 162:
                              return isConstVariableReference(n.expression);
                          default:
                              return false;
                      }
                  }
                  if (!isReferenceOrErrorExpression(n)) {
                      error(n, invalidReferenceMessage);
                      return false;
                  }
                  if (isConstVariableReference(n)) {
                      error(n, constantVariableMessage);
                      return false;
                  }
                  return true;
              }
              function checkDeleteExpression(node) {
                  if (node.parserContextFlags & 1 && node.expression.kind === 65) {
                      grammarErrorOnNode(node.expression, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode);
                  }
                  var operandType = checkExpression(node.expression);
                  return booleanType;
              }
              function checkTypeOfExpression(node) {
                  var operandType = checkExpression(node.expression);
                  return stringType;
              }
              function checkVoidExpression(node) {
                  var operandType = checkExpression(node.expression);
                  return undefinedType;
              }
              function checkPrefixUnaryExpression(node) {
                  if ((node.operator === 38 || node.operator === 39)) {
                      checkGrammarEvalOrArgumentsInStrictMode(node, node.operand);
                  }
                  var operandType = checkExpression(node.operand);
                  switch (node.operator) {
                      case 33:
                      case 34:
                      case 47:
                          if (someConstituentTypeHasKind(operandType, 1048576)) {
                              error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator));
                          }
                          return numberType;
                      case 46:
                          return booleanType;
                      case 38:
                      case 39:
                          var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
                          if (ok) {
                              checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
                          }
                          return numberType;
                  }
                  return unknownType;
              }
              function checkPostfixUnaryExpression(node) {
                  checkGrammarEvalOrArgumentsInStrictMode(node, node.operand);
                  var operandType = checkExpression(node.operand);
                  var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
                  if (ok) {
                      checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
                  }
                  return numberType;
              }
              function someConstituentTypeHasKind(type, kind) {
                  if (type.flags & kind) {
                      return true;
                  }
                  if (type.flags & 16384) {
                      var types = type.types;
                      for (var _i = 0; _i < types.length; _i++) {
                          var current = types[_i];
                          if (current.flags & kind) {
                              return true;
                          }
                      }
                      return false;
                  }
                  return false;
              }
              function allConstituentTypesHaveKind(type, kind) {
                  if (type.flags & kind) {
                      return true;
                  }
                  if (type.flags & 16384) {
                      var types = type.types;
                      for (var _i = 0; _i < types.length; _i++) {
                          var current = types[_i];
                          if (!(current.flags & kind)) {
                              return false;
                          }
                      }
                      return true;
                  }
                  return false;
              }
              function isConstEnumObjectType(type) {
                  return type.flags & (48128 | 32768) && type.symbol && isConstEnumSymbol(type.symbol);
              }
              function isConstEnumSymbol(symbol) {
                  return (symbol.flags & 128) !== 0;
              }
              function checkInstanceOfExpression(node, leftType, rightType) {
                  if (allConstituentTypesHaveKind(leftType, 1049086)) {
                      error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
                  }
                  if (!(rightType.flags & 1 || isTypeSubtypeOf(rightType, globalFunctionType))) {
                      error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type);
                  }
                  return booleanType;
              }
              function checkInExpression(node, leftType, rightType) {
                  if (!allConstituentTypesHaveKind(leftType, 1 | 258 | 132 | 1048576)) {
                      error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
                  }
                  if (!allConstituentTypesHaveKind(rightType, 1 | 48128 | 512)) {
                      error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
                  }
                  return booleanType;
              }
              function checkObjectLiteralAssignment(node, sourceType, contextualMapper) {
                  var properties = node.properties;
                  for (var _i = 0; _i < properties.length; _i++) {
                      var p = properties[_i];
                      if (p.kind === 225 || p.kind === 226) {
                          var name_8 = p.name;
                          var type = sourceType.flags & 1 ? sourceType :
                              getTypeOfPropertyOfType(sourceType, name_8.text) ||
                                  isNumericLiteralName(name_8.text) && getIndexTypeOfType(sourceType, 1) ||
                                  getIndexTypeOfType(sourceType, 0);
                          if (type) {
                              checkDestructuringAssignment(p.initializer || name_8, type);
                          }
                          else {
                              error(name_8, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_8));
                          }
                      }
                      else {
                          error(p, ts.Diagnostics.Property_assignment_expected);
                      }
                  }
                  return sourceType;
              }
              function checkArrayLiteralAssignment(node, sourceType, contextualMapper) {
                  var elementType = checkIteratedTypeOrElementType(sourceType, node, false) || unknownType;
                  var elements = node.elements;
                  for (var i = 0; i < elements.length; i++) {
                      var e = elements[i];
                      if (e.kind !== 176) {
                          if (e.kind !== 174) {
                              var propName = "" + i;
                              var type = sourceType.flags & 1 ? sourceType :
                                  isTupleLikeType(sourceType)
                                      ? getTypeOfPropertyOfType(sourceType, propName)
                                      : elementType;
                              if (type) {
                                  checkDestructuringAssignment(e, type, contextualMapper);
                              }
                              else {
                                  if (isTupleType(sourceType)) {
                                      error(e, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length);
                                  }
                                  else {
                                      error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName);
                                  }
                              }
                          }
                          else {
                              if (i < elements.length - 1) {
                                  error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
                              }
                              else {
                                  var restExpression = e.expression;
                                  if (restExpression.kind === 170 && restExpression.operatorToken.kind === 53) {
                                      error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                                  }
                                  else {
                                      checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper);
                                  }
                              }
                          }
                      }
                  }
                  return sourceType;
              }
              function checkDestructuringAssignment(target, sourceType, contextualMapper) {
                  if (target.kind === 170 && target.operatorToken.kind === 53) {
                      checkBinaryExpression(target, contextualMapper);
                      target = target.left;
                  }
                  if (target.kind === 155) {
                      return checkObjectLiteralAssignment(target, sourceType, contextualMapper);
                  }
                  if (target.kind === 154) {
                      return checkArrayLiteralAssignment(target, sourceType, contextualMapper);
                  }
                  return checkReferenceAssignment(target, sourceType, contextualMapper);
              }
              function checkReferenceAssignment(target, sourceType, contextualMapper) {
                  var targetType = checkExpression(target, contextualMapper);
                  if (checkReferenceExpression(target, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant)) {
                      checkTypeAssignableTo(sourceType, targetType, target, undefined);
                  }
                  return sourceType;
              }
              function checkBinaryExpression(node, contextualMapper) {
                  if (ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) {
                      checkGrammarEvalOrArgumentsInStrictMode(node, node.left);
                  }
                  var operator = node.operatorToken.kind;
                  if (operator === 53 && (node.left.kind === 155 || node.left.kind === 154)) {
                      return checkDestructuringAssignment(node.left, checkExpression(node.right, contextualMapper), contextualMapper);
                  }
                  var leftType = checkExpression(node.left, contextualMapper);
                  var rightType = checkExpression(node.right, contextualMapper);
                  switch (operator) {
                      case 35:
                      case 56:
                      case 36:
                      case 57:
                      case 37:
                      case 58:
                      case 34:
                      case 55:
                      case 40:
                      case 59:
                      case 41:
                      case 60:
                      case 42:
                      case 61:
                      case 44:
                      case 63:
                      case 45:
                      case 64:
                      case 43:
                      case 62:
                          if (leftType.flags & (32 | 64))
                              leftType = rightType;
                          if (rightType.flags & (32 | 64))
                              rightType = leftType;
                          var suggestedOperator;
                          if ((leftType.flags & 8) &&
                              (rightType.flags & 8) &&
                              (suggestedOperator = getSuggestedBooleanOperator(node.operatorToken.kind)) !== undefined) {
                              error(node, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(node.operatorToken.kind), ts.tokenToString(suggestedOperator));
                          }
                          else {
                              var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
                              var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
                              if (leftOk && rightOk) {
                                  checkAssignmentOperator(numberType);
                              }
                          }
                          return numberType;
                      case 33:
                      case 54:
                          if (leftType.flags & (32 | 64))
                              leftType = rightType;
                          if (rightType.flags & (32 | 64))
                              rightType = leftType;
                          var resultType;
                          if (allConstituentTypesHaveKind(leftType, 132) && allConstituentTypesHaveKind(rightType, 132)) {
                              resultType = numberType;
                          }
                          else {
                              if (allConstituentTypesHaveKind(leftType, 258) || allConstituentTypesHaveKind(rightType, 258)) {
                                  resultType = stringType;
                              }
                              else if (leftType.flags & 1 || rightType.flags & 1) {
                                  resultType = anyType;
                              }
                              if (resultType && !checkForDisallowedESSymbolOperand(operator)) {
                                  return resultType;
                              }
                          }
                          if (!resultType) {
                              reportOperatorError();
                              return anyType;
                          }
                          if (operator === 54) {
                              checkAssignmentOperator(resultType);
                          }
                          return resultType;
                      case 24:
                      case 25:
                      case 26:
                      case 27:
                          if (!checkForDisallowedESSymbolOperand(operator)) {
                              return booleanType;
                          }
                      case 28:
                      case 29:
                      case 30:
                      case 31:
                          if (!isTypeAssignableTo(leftType, rightType) && !isTypeAssignableTo(rightType, leftType)) {
                              reportOperatorError();
                          }
                          return booleanType;
                      case 87:
                          return checkInstanceOfExpression(node, leftType, rightType);
                      case 86:
                          return checkInExpression(node, leftType, rightType);
                      case 48:
                          return rightType;
                      case 49:
                          return getUnionType([leftType, rightType]);
                      case 53:
                          checkAssignmentOperator(rightType);
                          return rightType;
                      case 23:
                          return rightType;
                  }
                  function checkForDisallowedESSymbolOperand(operator) {
                      var offendingSymbolOperand = someConstituentTypeHasKind(leftType, 1048576) ? node.left :
                          someConstituentTypeHasKind(rightType, 1048576) ? node.right :
                              undefined;
                      if (offendingSymbolOperand) {
                          error(offendingSymbolOperand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(operator));
                          return false;
                      }
                      return true;
                  }
                  function getSuggestedBooleanOperator(operator) {
                      switch (operator) {
                          case 44:
                          case 63:
                              return 49;
                          case 45:
                          case 64:
                              return 31;
                          case 43:
                          case 62:
                              return 48;
                          default:
                              return undefined;
                      }
                  }
                  function checkAssignmentOperator(valueType) {
                      if (produceDiagnostics && operator >= 53 && operator <= 64) {
                          var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant);
                          if (ok) {
                              checkTypeAssignableTo(valueType, leftType, node.left, undefined);
                          }
                      }
                  }
                  function reportOperatorError() {
                      error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operatorToken.kind), typeToString(leftType), typeToString(rightType));
                  }
              }
              function checkYieldExpression(node) {
                  if (!(node.parserContextFlags & 4)) {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expression_must_be_contained_within_a_generator_declaration);
                  }
                  else {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expressions_are_not_currently_supported);
                  }
              }
              function checkConditionalExpression(node, contextualMapper) {
                  checkExpression(node.condition);
                  var type1 = checkExpression(node.whenTrue, contextualMapper);
                  var type2 = checkExpression(node.whenFalse, contextualMapper);
                  return getUnionType([type1, type2]);
              }
              function checkTemplateExpression(node) {
                  ts.forEach(node.templateSpans, function (templateSpan) {
                      checkExpression(templateSpan.expression);
                  });
                  return stringType;
              }
              function checkExpressionWithContextualType(node, contextualType, contextualMapper) {
                  var saveContextualType = node.contextualType;
                  node.contextualType = contextualType;
                  var result = checkExpression(node, contextualMapper);
                  node.contextualType = saveContextualType;
                  return result;
              }
              function checkExpressionCached(node, contextualMapper) {
                  var links = getNodeLinks(node);
                  if (!links.resolvedType) {
                      links.resolvedType = checkExpression(node, contextualMapper);
                  }
                  return links.resolvedType;
              }
              function checkPropertyAssignment(node, contextualMapper) {
                  if (node.name.kind === 128) {
                      checkComputedPropertyName(node.name);
                  }
                  return checkExpression(node.initializer, contextualMapper);
              }
              function checkObjectLiteralMethod(node, contextualMapper) {
                  checkGrammarMethod(node);
                  if (node.name.kind === 128) {
                      checkComputedPropertyName(node.name);
                  }
                  var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
                  return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
              }
              function instantiateTypeWithSingleGenericCallSignature(node, type, contextualMapper) {
                  if (contextualMapper && contextualMapper !== identityMapper) {
                      var signature = getSingleCallSignature(type);
                      if (signature && signature.typeParameters) {
                          var contextualType = getContextualType(node);
                          if (contextualType) {
                              var contextualSignature = getSingleCallSignature(contextualType);
                              if (contextualSignature && !contextualSignature.typeParameters) {
                                  return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper));
                              }
                          }
                      }
                  }
                  return type;
              }
              function checkExpression(node, contextualMapper) {
                  checkGrammarIdentifierInStrictMode(node);
                  return checkExpressionOrQualifiedName(node, contextualMapper);
              }
              function checkExpressionOrQualifiedName(node, contextualMapper) {
                  var type;
                  if (node.kind == 127) {
                      type = checkQualifiedName(node);
                  }
                  else {
                      var uninstantiatedType = checkExpressionWorker(node, contextualMapper);
                      type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
                  }
                  if (isConstEnumObjectType(type)) {
                      var ok = (node.parent.kind === 156 && node.parent.expression === node) ||
                          (node.parent.kind === 157 && node.parent.expression === node) ||
                          ((node.kind === 65 || node.kind === 127) && isInRightSideOfImportOrExportAssignment(node));
                      if (!ok) {
                          error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment);
                      }
                  }
                  return type;
              }
              function checkNumericLiteral(node) {
                  checkGrammarNumericLiteral(node);
                  return numberType;
              }
              function checkExpressionWorker(node, contextualMapper) {
                  switch (node.kind) {
                      case 65:
                          return checkIdentifier(node);
                      case 93:
                          return checkThisExpression(node);
                      case 91:
                          return checkSuperExpression(node);
                      case 89:
                          return nullType;
                      case 95:
                      case 80:
                          return booleanType;
                      case 7:
                          return checkNumericLiteral(node);
                      case 172:
                          return checkTemplateExpression(node);
                      case 8:
                      case 10:
                          return stringType;
                      case 9:
                          return globalRegExpType;
                      case 154:
                          return checkArrayLiteral(node, contextualMapper);
                      case 155:
                          return checkObjectLiteral(node, contextualMapper);
                      case 156:
                          return checkPropertyAccessExpression(node);
                      case 157:
                          return checkIndexedAccess(node);
                      case 158:
                      case 159:
                          return checkCallExpression(node);
                      case 160:
                          return checkTaggedTemplateExpression(node);
                      case 161:
                          return checkTypeAssertion(node);
                      case 162:
                          return checkExpression(node.expression, contextualMapper);
                      case 175:
                          return checkClassExpression(node);
                      case 163:
                      case 164:
                          return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
                      case 166:
                          return checkTypeOfExpression(node);
                      case 165:
                          return checkDeleteExpression(node);
                      case 167:
                          return checkVoidExpression(node);
                      case 168:
                          return checkPrefixUnaryExpression(node);
                      case 169:
                          return checkPostfixUnaryExpression(node);
                      case 170:
                          return checkBinaryExpression(node, contextualMapper);
                      case 171:
                          return checkConditionalExpression(node, contextualMapper);
                      case 174:
                          return checkSpreadElementExpression(node, contextualMapper);
                      case 176:
                          return undefinedType;
                      case 173:
                          checkYieldExpression(node);
                          return unknownType;
                  }
                  return unknownType;
              }
              function checkTypeParameter(node) {
                  checkGrammarDeclarationNameInStrictMode(node);
                  if (node.expression) {
                      grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected);
                  }
                  checkSourceElement(node.constraint);
                  if (produceDiagnostics) {
                      checkTypeParameterHasIllegalReferencesInConstraint(node);
                      checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0);
                  }
              }
              function checkParameter(node) {
                  // Grammar checking
                  // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the
                  // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code
                  // or if its FunctionBody is strict code(11.1.5).
                  // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a
                  // strict mode FunctionLikeDeclaration or FunctionExpression(13.1)
                  checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
                  checkVariableLikeDeclaration(node);
                  var func = ts.getContainingFunction(node);
                  if (node.flags & 112) {
                      func = ts.getContainingFunction(node);
                      if (!(func.kind === 136 && ts.nodeIsPresent(func.body))) {
                          error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                      }
                  }
                  if (node.questionToken && ts.isBindingPattern(node.name) && func.body) {
                      error(node, ts.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature);
                  }
                  if (node.dotDotDotToken && !ts.isBindingPattern(node.name) && !isArrayType(getTypeOfSymbol(node.symbol))) {
                      error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type);
                  }
              }
              function checkSignatureDeclaration(node) {
                  if (node.kind === 141) {
                      checkGrammarIndexSignature(node);
                  }
                  else if (node.kind === 143 || node.kind === 201 || node.kind === 144 ||
                      node.kind === 139 || node.kind === 136 ||
                      node.kind === 140) {
                      checkGrammarFunctionLikeDeclaration(node);
                  }
                  checkTypeParameters(node.typeParameters);
                  ts.forEach(node.parameters, checkParameter);
                  if (node.type) {
                      checkSourceElement(node.type);
                  }
                  if (produceDiagnostics) {
                      checkCollisionWithArgumentsInGeneratedCode(node);
                      if (compilerOptions.noImplicitAny && !node.type) {
                          switch (node.kind) {
                              case 140:
                                  error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                                  break;
                              case 139:
                                  error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                                  break;
                          }
                      }
                  }
                  checkSpecializedSignatureDeclaration(node);
              }
              function checkTypeForDuplicateIndexSignatures(node) {
                  if (node.kind === 203) {
                      var nodeSymbol = getSymbolOfNode(node);
                      if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
                          return;
                      }
                  }
                  var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
                  if (indexSymbol) {
                      var seenNumericIndexer = false;
                      var seenStringIndexer = false;
                      for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
                          var decl = _a[_i];
                          var declaration = decl;
                          if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
                              switch (declaration.parameters[0].type.kind) {
                                  case 122:
                                      if (!seenStringIndexer) {
                                          seenStringIndexer = true;
                                      }
                                      else {
                                          error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
                                      }
                                      break;
                                  case 120:
                                      if (!seenNumericIndexer) {
                                          seenNumericIndexer = true;
                                      }
                                      else {
                                          error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
                                      }
                                      break;
                              }
                          }
                      }
                  }
              }
              function checkPropertyDeclaration(node) {
                  checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarProperty(node) || checkGrammarComputedPropertyName(node.name);
                  checkVariableLikeDeclaration(node);
              }
              function checkMethodDeclaration(node) {
                  checkGrammarMethod(node) || checkGrammarComputedPropertyName(node.name);
                  checkFunctionLikeDeclaration(node);
              }
              function checkConstructorDeclaration(node) {
                  checkSignatureDeclaration(node);
                  checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node);
                  checkSourceElement(node.body);
                  var symbol = getSymbolOfNode(node);
                  var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind);
                  if (node === firstDeclaration) {
                      checkFunctionOrConstructorSymbol(symbol);
                  }
                  if (ts.nodeIsMissing(node.body)) {
                      return;
                  }
                  if (!produceDiagnostics) {
                      return;
                  }
                  function isSuperCallExpression(n) {
                      return n.kind === 158 && n.expression.kind === 91;
                  }
                  function containsSuperCall(n) {
                      if (isSuperCallExpression(n)) {
                          return true;
                      }
                      switch (n.kind) {
                          case 163:
                          case 201:
                          case 164:
                          case 155: return false;
                          default: return ts.forEachChild(n, containsSuperCall);
                      }
                  }
                  function markThisReferencesAsErrors(n) {
                      if (n.kind === 93) {
                          error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                      }
                      else if (n.kind !== 163 && n.kind !== 201) {
                          ts.forEachChild(n, markThisReferencesAsErrors);
                      }
                  }
                  function isInstancePropertyWithInitializer(n) {
                      return n.kind === 133 &&
                          !(n.flags & 128) &&
                          !!n.initializer;
                  }
                  if (ts.getClassExtendsHeritageClauseElement(node.parent)) {
                      if (containsSuperCall(node.body)) {
                          var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) ||
                              ts.forEach(node.parameters, function (p) { return p.flags & (16 | 32 | 64); });
                          if (superCallShouldBeFirst) {
                              var statements = node.body.statements;
                              if (!statements.length || statements[0].kind !== 183 || !isSuperCallExpression(statements[0].expression)) {
                                  error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);
                              }
                              else {
                                  markThisReferencesAsErrors(statements[0].expression);
                              }
                          }
                      }
                      else {
                          error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);
                      }
                  }
              }
              function checkAccessorDeclaration(node) {
                  if (produceDiagnostics) {
                      checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name);
                      if (node.kind === 137) {
                          if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) {
                              error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement);
                          }
                      }
                      if (!ts.hasDynamicName(node)) {
                          var otherKind = node.kind === 137 ? 138 : 137;
                          var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind);
                          if (otherAccessor) {
                              if (((node.flags & 112) !== (otherAccessor.flags & 112))) {
                                  error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility);
                              }
                              var currentAccessorType = getAnnotatedAccessorType(node);
                              var otherAccessorType = getAnnotatedAccessorType(otherAccessor);
                              if (currentAccessorType && otherAccessorType) {
                                  if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) {
                                      error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type);
                                  }
                              }
                          }
                      }
                      getTypeOfAccessors(getSymbolOfNode(node));
                  }
                  checkFunctionLikeDeclaration(node);
              }
              function checkMissingDeclaration(node) {
                  checkDecorators(node);
              }
              function checkTypeReferenceNode(node) {
                  checkGrammarTypeReferenceInStrictMode(node.typeName);
                  return checkTypeReferenceOrExpressionWithTypeArguments(node);
              }
              function checkExpressionWithTypeArguments(node) {
                  checkGrammarExpressionWithTypeArgumentsInStrictMode(node.expression);
                  return checkTypeReferenceOrExpressionWithTypeArguments(node);
              }
              function checkTypeReferenceOrExpressionWithTypeArguments(node) {
                  checkGrammarTypeArguments(node, node.typeArguments);
                  var type = getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
                  if (type !== unknownType && node.typeArguments) {
                      var len = node.typeArguments.length;
                      for (var i = 0; i < len; i++) {
                          checkSourceElement(node.typeArguments[i]);
                          var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]);
                          if (produceDiagnostics && constraint) {
                              var typeArgument = type.typeArguments[i];
                              checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
                          }
                      }
                  }
              }
              function checkTypeQuery(node) {
                  getTypeFromTypeQueryNode(node);
              }
              function checkTypeLiteral(node) {
                  ts.forEach(node.members, checkSourceElement);
                  if (produceDiagnostics) {
                      var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
                      checkIndexConstraints(type);
                      checkTypeForDuplicateIndexSignatures(node);
                  }
              }
              function checkArrayType(node) {
                  checkSourceElement(node.elementType);
              }
              function checkTupleType(node) {
                  var hasErrorFromDisallowedTrailingComma = checkGrammarForDisallowedTrailingComma(node.elementTypes);
                  if (!hasErrorFromDisallowedTrailingComma && node.elementTypes.length === 0) {
                      grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty);
                  }
                  ts.forEach(node.elementTypes, checkSourceElement);
              }
              function checkUnionType(node) {
                  ts.forEach(node.types, checkSourceElement);
              }
              function isPrivateWithinAmbient(node) {
                  return (node.flags & 32) && ts.isInAmbientContext(node);
              }
              function checkSpecializedSignatureDeclaration(signatureDeclarationNode) {
                  if (!produceDiagnostics) {
                      return;
                  }
                  var signature = getSignatureFromDeclaration(signatureDeclarationNode);
                  if (!signature.hasStringLiterals) {
                      return;
                  }
                  if (ts.nodeIsPresent(signatureDeclarationNode.body)) {
                      error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type);
                      return;
                  }
                  var signaturesToCheck;
                  if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 203) {
                      ts.Debug.assert(signatureDeclarationNode.kind === 139 || signatureDeclarationNode.kind === 140);
                      var signatureKind = signatureDeclarationNode.kind === 139 ? 0 : 1;
                      var containingSymbol = getSymbolOfNode(signatureDeclarationNode.parent);
                      var containingType = getDeclaredTypeOfSymbol(containingSymbol);
                      signaturesToCheck = getSignaturesOfType(containingType, signatureKind);
                  }
                  else {
                      signaturesToCheck = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode));
                  }
                  for (var _i = 0; _i < signaturesToCheck.length; _i++) {
                      var otherSignature = signaturesToCheck[_i];
                      if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) {
                          return;
                      }
                  }
                  error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature);
              }
              function getEffectiveDeclarationFlags(n, flagsToCheck) {
                  var flags = ts.getCombinedNodeFlags(n);
                  if (n.parent.kind !== 203 && ts.isInAmbientContext(n)) {
                      if (!(flags & 2)) {
                          flags |= 1;
                      }
                      flags |= 2;
                  }
                  return flags & flagsToCheck;
              }
              function checkFunctionOrConstructorSymbol(symbol) {
                  if (!produceDiagnostics) {
                      return;
                  }
                  function getCanonicalOverload(overloads, implementation) {
                      var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent;
                      return implementationSharesContainerWithFirstOverload ? implementation : overloads[0];
                  }
                  function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) {
                      var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags;
                      if (someButNotAllOverloadFlags !== 0) {
                          var canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck);
                          ts.forEach(overloads, function (o) {
                              var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags;
                              if (deviation & 1) {
                                  error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported);
                              }
                              else if (deviation & 2) {
                                  error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient);
                              }
                              else if (deviation & (32 | 64)) {
                                  error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected);
                              }
                          });
                      }
                  }
                  function checkQuestionTokenAgreementBetweenOverloads(overloads, implementation, someHaveQuestionToken, allHaveQuestionToken) {
                      if (someHaveQuestionToken !== allHaveQuestionToken) {
                          var canonicalHasQuestionToken = ts.hasQuestionToken(getCanonicalOverload(overloads, implementation));
                          ts.forEach(overloads, function (o) {
                              var deviation = ts.hasQuestionToken(o) !== canonicalHasQuestionToken;
                              if (deviation) {
                                  error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required);
                              }
                          });
                      }
                  }
                  var flagsToCheck = 1 | 2 | 32 | 64;
                  var someNodeFlags = 0;
                  var allNodeFlags = flagsToCheck;
                  var someHaveQuestionToken = false;
                  var allHaveQuestionToken = true;
                  var hasOverloads = false;
                  var bodyDeclaration;
                  var lastSeenNonAmbientDeclaration;
                  var previousDeclaration;
                  var declarations = symbol.declarations;
                  var isConstructor = (symbol.flags & 16384) !== 0;
                  function reportImplementationExpectedError(node) {
                      if (node.name && ts.nodeIsMissing(node.name)) {
                          return;
                      }
                      var seen = false;
                      var subsequentNode = ts.forEachChild(node.parent, function (c) {
                          if (seen) {
                              return c;
                          }
                          else {
                              seen = c === node;
                          }
                      });
                      if (subsequentNode) {
                          if (subsequentNode.kind === node.kind) {
                              var errorNode_1 = subsequentNode.name || subsequentNode;
                              if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) {
                                  ts.Debug.assert(node.kind === 135 || node.kind === 134);
                                  ts.Debug.assert((node.flags & 128) !== (subsequentNode.flags & 128));
                                  var diagnostic = node.flags & 128 ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                  error(errorNode_1, diagnostic);
                                  return;
                              }
                              else if (ts.nodeIsPresent(subsequentNode.body)) {
                                  error(errorNode_1, ts.Diagnostics.Function_implementation_name_must_be_0, ts.declarationNameToString(node.name));
                                  return;
                              }
                          }
                      }
                      var errorNode = node.name || node;
                      if (isConstructor) {
                          error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing);
                      }
                      else {
                          error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration);
                      }
                  }
                  var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536;
                  var duplicateFunctionDeclaration = false;
                  var multipleConstructorImplementation = false;
                  for (var _i = 0; _i < declarations.length; _i++) {
                      var current = declarations[_i];
                      var node = current;
                      var inAmbientContext = ts.isInAmbientContext(node);
                      var inAmbientContextOrInterface = node.parent.kind === 203 || node.parent.kind === 146 || inAmbientContext;
                      if (inAmbientContextOrInterface) {
                          previousDeclaration = undefined;
                      }
                      if (node.kind === 201 || node.kind === 135 || node.kind === 134 || node.kind === 136) {
                          var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                          someNodeFlags |= currentNodeFlags;
                          allNodeFlags &= currentNodeFlags;
                          someHaveQuestionToken = someHaveQuestionToken || ts.hasQuestionToken(node);
                          allHaveQuestionToken = allHaveQuestionToken && ts.hasQuestionToken(node);
                          if (ts.nodeIsPresent(node.body) && bodyDeclaration) {
                              if (isConstructor) {
                                  multipleConstructorImplementation = true;
                              }
                              else {
                                  duplicateFunctionDeclaration = true;
                              }
                          }
                          else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) {
                              reportImplementationExpectedError(previousDeclaration);
                          }
                          if (ts.nodeIsPresent(node.body)) {
                              if (!bodyDeclaration) {
                                  bodyDeclaration = node;
                              }
                          }
                          else {
                              hasOverloads = true;
                          }
                          previousDeclaration = node;
                          if (!inAmbientContextOrInterface) {
                              lastSeenNonAmbientDeclaration = node;
                          }
                      }
                  }
                  if (multipleConstructorImplementation) {
                      ts.forEach(declarations, function (declaration) {
                          error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed);
                      });
                  }
                  if (duplicateFunctionDeclaration) {
                      ts.forEach(declarations, function (declaration) {
                          error(declaration.name, ts.Diagnostics.Duplicate_function_implementation);
                      });
                  }
                  if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) {
                      reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
                  }
                  if (hasOverloads) {
                      checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags);
                      checkQuestionTokenAgreementBetweenOverloads(declarations, bodyDeclaration, someHaveQuestionToken, allHaveQuestionToken);
                      if (bodyDeclaration) {
                          var signatures = getSignaturesOfSymbol(symbol);
                          var bodySignature = getSignatureFromDeclaration(bodyDeclaration);
                          if (!bodySignature.hasStringLiterals) {
                              for (var _a = 0; _a < signatures.length; _a++) {
                                  var signature = signatures[_a];
                                  if (!signature.hasStringLiterals && !isSignatureAssignableTo(bodySignature, signature)) {
                                      error(signature.declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation);
                                      break;
                                  }
                              }
                          }
                      }
                  }
              }
              function checkExportsOnMergedDeclarations(node) {
                  if (!produceDiagnostics) {
                      return;
                  }
                  var symbol = node.localSymbol;
                  if (!symbol) {
                      symbol = getSymbolOfNode(node);
                      if (!(symbol.flags & 7340032)) {
                          return;
                      }
                  }
                  if (ts.getDeclarationOfKind(symbol, node.kind) !== node) {
                      return;
                  }
                  var exportedDeclarationSpaces = 0;
                  var nonExportedDeclarationSpaces = 0;
                  ts.forEach(symbol.declarations, function (d) {
                      var declarationSpaces = getDeclarationSpaces(d);
                      if (getEffectiveDeclarationFlags(d, 1)) {
                          exportedDeclarationSpaces |= declarationSpaces;
                      }
                      else {
                          nonExportedDeclarationSpaces |= declarationSpaces;
                      }
                  });
                  var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces;
                  if (commonDeclarationSpace) {
                      ts.forEach(symbol.declarations, function (d) {
                          if (getDeclarationSpaces(d) & commonDeclarationSpace) {
                              error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(d.name));
                          }
                      });
                  }
                  function getDeclarationSpaces(d) {
                      switch (d.kind) {
                          case 203:
                              return 2097152;
                          case 206:
                              return d.name.kind === 8 || ts.getModuleInstanceState(d) !== 0
                                  ? 4194304 | 1048576
                                  : 4194304;
                          case 202:
                          case 205:
                              return 2097152 | 1048576;
                          case 209:
                              var result = 0;
                              var target = resolveAlias(getSymbolOfNode(d));
                              ts.forEach(target.declarations, function (d) { result |= getDeclarationSpaces(d); });
                              return result;
                          default:
                              return 1048576;
                      }
                  }
              }
              function checkDecorator(node) {
                  var expression = node.expression;
                  var exprType = checkExpression(expression);
                  switch (node.parent.kind) {
                      case 202:
                          var classSymbol = getSymbolOfNode(node.parent);
                          var classConstructorType = getTypeOfSymbol(classSymbol);
                          var classDecoratorType = instantiateSingleCallFunctionType(getGlobalClassDecoratorType(), [classConstructorType]);
                          checkTypeAssignableTo(exprType, classDecoratorType, node);
                          break;
                      case 133:
                          checkTypeAssignableTo(exprType, getGlobalPropertyDecoratorType(), node);
                          break;
                      case 135:
                      case 137:
                      case 138:
                          var methodType = getTypeOfNode(node.parent);
                          var methodDecoratorType = instantiateSingleCallFunctionType(getGlobalMethodDecoratorType(), [methodType]);
                          checkTypeAssignableTo(exprType, methodDecoratorType, node);
                          break;
                      case 130:
                          checkTypeAssignableTo(exprType, getGlobalParameterDecoratorType(), node);
                          break;
                  }
              }
              function checkTypeNodeAsExpression(node) {
                  if (node && node.kind === 142) {
                      var type = getTypeFromTypeNode(node);
                      var shouldCheckIfUnknownType = type === unknownType && compilerOptions.separateCompilation;
                      if (!type || (!shouldCheckIfUnknownType && type.flags & (1048703 | 132 | 258))) {
                          return;
                      }
                      if (shouldCheckIfUnknownType || type.symbol.valueDeclaration) {
                          checkExpressionOrQualifiedName(node.typeName);
                      }
                  }
              }
              function checkTypeAnnotationAsExpression(node) {
                  switch (node.kind) {
                      case 133:
                          checkTypeNodeAsExpression(node.type);
                          break;
                      case 130:
                          checkTypeNodeAsExpression(node.type);
                          break;
                      case 135:
                          checkTypeNodeAsExpression(node.type);
                          break;
                      case 137:
                          checkTypeNodeAsExpression(node.type);
                          break;
                      case 138:
                          checkTypeNodeAsExpression(getSetAccessorTypeAnnotationNode(node));
                          break;
                  }
              }
              function checkParameterTypeAnnotationsAsExpressions(node) {
                  for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
                      var parameter = _a[_i];
                      checkTypeAnnotationAsExpression(parameter);
                  }
              }
              function checkDecorators(node) {
                  if (!node.decorators) {
                      return;
                  }
                  if (!ts.nodeCanBeDecorated(node)) {
                      return;
                  }
                  if (compilerOptions.emitDecoratorMetadata) {
                      switch (node.kind) {
                          case 202:
                              var constructor = ts.getFirstConstructorWithBody(node);
                              if (constructor) {
                                  checkParameterTypeAnnotationsAsExpressions(constructor);
                              }
                              break;
                          case 135:
                              checkParameterTypeAnnotationsAsExpressions(node);
                          case 138:
                          case 137:
                          case 133:
                          case 130:
                              checkTypeAnnotationAsExpression(node);
                              break;
                      }
                  }
                  emitDecorate = true;
                  if (node.kind === 130) {
                      emitParam = true;
                  }
                  ts.forEach(node.decorators, checkDecorator);
              }
              function checkFunctionDeclaration(node) {
                  if (produceDiagnostics) {
                      checkFunctionLikeDeclaration(node) ||
                          checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) ||
                          checkGrammarFunctionName(node.name) ||
                          checkGrammarForGenerator(node);
                      checkCollisionWithCapturedSuperVariable(node, node.name);
                      checkCollisionWithCapturedThisVariable(node, node.name);
                      checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
                  }
              }
              function checkFunctionLikeDeclaration(node) {
                  checkGrammarDeclarationNameInStrictMode(node);
                  checkDecorators(node);
                  checkSignatureDeclaration(node);
                  if (node.name && node.name.kind === 128) {
                      checkComputedPropertyName(node.name);
                  }
                  if (!ts.hasDynamicName(node)) {
                      var symbol = getSymbolOfNode(node);
                      var localSymbol = node.localSymbol || symbol;
                      var firstDeclaration = ts.getDeclarationOfKind(localSymbol, node.kind);
                      if (node === firstDeclaration) {
                          checkFunctionOrConstructorSymbol(localSymbol);
                      }
                      if (symbol.parent) {
                          if (ts.getDeclarationOfKind(symbol, node.kind) === node) {
                              checkFunctionOrConstructorSymbol(symbol);
                          }
                      }
                  }
                  checkSourceElement(node.body);
                  if (node.type && !isAccessor(node.kind) && !node.asteriskToken) {
                      checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
                  }
                  if (compilerOptions.noImplicitAny && ts.nodeIsMissing(node.body) && !node.type && !isPrivateWithinAmbient(node)) {
                      reportImplicitAnyError(node, anyType);
                  }
              }
              function checkBlock(node) {
                  if (node.kind === 180) {
                      checkGrammarStatementInAmbientContext(node);
                  }
                  ts.forEach(node.statements, checkSourceElement);
                  if (ts.isFunctionBlock(node) || node.kind === 207) {
                      checkFunctionExpressionBodies(node);
                  }
              }
              function checkCollisionWithArgumentsInGeneratedCode(node) {
                  if (!ts.hasRestParameters(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) {
                      return;
                  }
                  ts.forEach(node.parameters, function (p) {
                      if (p.name && !ts.isBindingPattern(p.name) && p.name.text === argumentsSymbol.name) {
                          error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);
                      }
                  });
              }
              function needCollisionCheckForIdentifier(node, identifier, name) {
                  if (!(identifier && identifier.text === name)) {
                      return false;
                  }
                  if (node.kind === 133 ||
                      node.kind === 132 ||
                      node.kind === 135 ||
                      node.kind === 134 ||
                      node.kind === 137 ||
                      node.kind === 138) {
                      return false;
                  }
                  if (ts.isInAmbientContext(node)) {
                      return false;
                  }
                  var root = ts.getRootDeclaration(node);
                  if (root.kind === 130 && ts.nodeIsMissing(root.parent.body)) {
                      return false;
                  }
                  return true;
              }
              function checkCollisionWithCapturedThisVariable(node, name) {
                  if (needCollisionCheckForIdentifier(node, name, "_this")) {
                      potentialThisCollisions.push(node);
                  }
              }
              function checkIfThisIsCapturedInEnclosingScope(node) {
                  var current = node;
                  while (current) {
                      if (getNodeCheckFlags(current) & 4) {
                          var isDeclaration_1 = node.kind !== 65;
                          if (isDeclaration_1) {
                              error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                          }
                          else {
                              error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference);
                          }
                          return;
                      }
                      current = current.parent;
                  }
              }
              function checkCollisionWithCapturedSuperVariable(node, name) {
                  if (!needCollisionCheckForIdentifier(node, name, "_super")) {
                      return;
                  }
                  var enclosingClass = ts.getAncestor(node, 202);
                  if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) {
                      return;
                  }
                  if (ts.getClassExtendsHeritageClauseElement(enclosingClass)) {
                      var isDeclaration_2 = node.kind !== 65;
                      if (isDeclaration_2) {
                          error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference);
                      }
                      else {
                          error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference);
                      }
                  }
              }
              function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
                  if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
                      return;
                  }
                  if (node.kind === 206 && ts.getModuleInstanceState(node) !== 1) {
                      return;
                  }
                  var parent = getDeclarationContainer(node);
                  if (parent.kind === 228 && ts.isExternalModule(parent)) {
                      error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
                  }
              }
              function checkVarDeclaredNamesNotShadowed(node) {
                  // - ScriptBody : StatementList
                  // It is a Syntax Error if any element of the LexicallyDeclaredNames of StatementList
                  // also occurs in the VarDeclaredNames of StatementList.
                  if ((ts.getCombinedNodeFlags(node) & 12288) !== 0 || ts.isParameterDeclaration(node)) {
                      return;
                  }
                  if (node.kind === 199 && !node.initializer) {
                      return;
                  }
                  var symbol = getSymbolOfNode(node);
                  if (symbol.flags & 1) {
                      var localDeclarationSymbol = resolveName(node, node.name.text, 3, undefined, undefined);
                      if (localDeclarationSymbol &&
                          localDeclarationSymbol !== symbol &&
                          localDeclarationSymbol.flags & 2) {
                          if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 12288) {
                              var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 200);
                              var container = varDeclList.parent.kind === 181 && varDeclList.parent.parent
                                  ? varDeclList.parent.parent
                                  : undefined;
                              var namesShareScope = container &&
                                  (container.kind === 180 && ts.isFunctionLike(container.parent) ||
                                      container.kind === 207 ||
                                      container.kind === 206 ||
                                      container.kind === 228);
                              if (!namesShareScope) {
                                  var name_9 = symbolToString(localDeclarationSymbol);
                                  error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_9, name_9);
                              }
                          }
                      }
                  }
              }
              function checkParameterInitializer(node) {
                  if (ts.getRootDeclaration(node).kind !== 130) {
                      return;
                  }
                  var func = ts.getContainingFunction(node);
                  visit(node.initializer);
                  function visit(n) {
                      if (n.kind === 65) {
                          var referencedSymbol = getNodeLinks(n).resolvedSymbol;
                          if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) {
                              if (referencedSymbol.valueDeclaration.kind === 130) {
                                  if (referencedSymbol.valueDeclaration === node) {
                                      error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name));
                                      return;
                                  }
                                  if (referencedSymbol.valueDeclaration.pos < node.pos) {
                                      return;
                                  }
                              }
                              error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n));
                          }
                      }
                      else {
                          ts.forEachChild(n, visit);
                      }
                  }
              }
              function checkVariableLikeDeclaration(node) {
                  checkGrammarDeclarationNameInStrictMode(node);
                  checkDecorators(node);
                  checkSourceElement(node.type);
                  if (node.name.kind === 128) {
                      checkComputedPropertyName(node.name);
                      if (node.initializer) {
                          checkExpressionCached(node.initializer);
                      }
                  }
                  if (ts.isBindingPattern(node.name)) {
                      ts.forEach(node.name.elements, checkSourceElement);
                  }
                  if (node.initializer && ts.getRootDeclaration(node).kind === 130 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) {
                      error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);
                      return;
                  }
                  if (ts.isBindingPattern(node.name)) {
                      if (node.initializer) {
                          checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined);
                          checkParameterInitializer(node);
                      }
                      return;
                  }
                  var symbol = getSymbolOfNode(node);
                  var type = getTypeOfVariableOrParameterOrProperty(symbol);
                  if (node === symbol.valueDeclaration) {
                      if (node.initializer) {
                          checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined);
                          checkParameterInitializer(node);
                      }
                  }
                  else {
                      var declarationType = getWidenedTypeForVariableLikeDeclaration(node);
                      if (type !== unknownType && declarationType !== unknownType && !isTypeIdenticalTo(type, declarationType)) {
                          error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.declarationNameToString(node.name), typeToString(type), typeToString(declarationType));
                      }
                      if (node.initializer) {
                          checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined);
                      }
                  }
                  if (node.kind !== 133 && node.kind !== 132) {
                      checkExportsOnMergedDeclarations(node);
                      if (node.kind === 199 || node.kind === 153) {
                          checkVarDeclaredNamesNotShadowed(node);
                      }
                      checkCollisionWithCapturedSuperVariable(node, node.name);
                      checkCollisionWithCapturedThisVariable(node, node.name);
                      checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
                  }
              }
              function checkVariableDeclaration(node) {
                  checkGrammarVariableDeclaration(node);
                  return checkVariableLikeDeclaration(node);
              }
              function checkBindingElement(node) {
                  checkGrammarBindingElement(node);
                  return checkVariableLikeDeclaration(node);
              }
              function checkVariableStatement(node) {
                  checkGrammarDecorators(node) || checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) || checkGrammarModifiers(node) || checkGrammarVariableDeclarationList(node.declarationList) || checkGrammarForDisallowedLetOrConstStatement(node);
                  ts.forEach(node.declarationList.declarations, checkSourceElement);
              }
              function checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) {
                  if (node.modifiers) {
                      if (inBlockOrObjectLiteralExpression(node)) {
                          return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                      }
                  }
              }
              function inBlockOrObjectLiteralExpression(node) {
                  while (node) {
                      if (node.kind === 180 || node.kind === 155) {
                          return true;
                      }
                      node = node.parent;
                  }
              }
              function checkExpressionStatement(node) {
                  checkGrammarStatementInAmbientContext(node);
                  checkExpression(node.expression);
              }
              function checkIfStatement(node) {
                  checkGrammarStatementInAmbientContext(node);
                  checkExpression(node.expression);
                  checkSourceElement(node.thenStatement);
                  checkSourceElement(node.elseStatement);
              }
              function checkDoStatement(node) {
                  checkGrammarStatementInAmbientContext(node);
                  checkSourceElement(node.statement);
                  checkExpression(node.expression);
              }
              function checkWhileStatement(node) {
                  checkGrammarStatementInAmbientContext(node);
                  checkExpression(node.expression);
                  checkSourceElement(node.statement);
              }
              function checkForStatement(node) {
                  if (!checkGrammarStatementInAmbientContext(node)) {
                      if (node.initializer && node.initializer.kind == 200) {
                          checkGrammarVariableDeclarationList(node.initializer);
                      }
                  }
                  if (node.initializer) {
                      if (node.initializer.kind === 200) {
                          ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                      }
                      else {
                          checkExpression(node.initializer);
                      }
                  }
                  if (node.condition)
                      checkExpression(node.condition);
                  if (node.incrementor)
                      checkExpression(node.incrementor);
                  checkSourceElement(node.statement);
              }
              function checkForOfStatement(node) {
                  checkGrammarForInOrForOfStatement(node);
                  if (node.initializer.kind === 200) {
                      checkForInOrForOfVariableDeclaration(node);
                  }
                  else {
                      var varExpr = node.initializer;
                      var iteratedType = checkRightHandSideOfForOf(node.expression);
                      if (varExpr.kind === 154 || varExpr.kind === 155) {
                          checkDestructuringAssignment(varExpr, iteratedType || unknownType);
                      }
                      else {
                          var leftType = checkExpression(varExpr);
                          checkReferenceExpression(varExpr, ts.Diagnostics.Invalid_left_hand_side_in_for_of_statement, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_be_a_previously_defined_constant);
                          if (iteratedType) {
                              checkTypeAssignableTo(iteratedType, leftType, varExpr, undefined);
                          }
                      }
                  }
                  checkSourceElement(node.statement);
              }
              function checkForInStatement(node) {
                  checkGrammarForInOrForOfStatement(node);
                  if (node.initializer.kind === 200) {
                      var variable = node.initializer.declarations[0];
                      if (variable && ts.isBindingPattern(variable.name)) {
                          error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                      }
                      checkForInOrForOfVariableDeclaration(node);
                  }
                  else {
                      var varExpr = node.initializer;
                      var leftType = checkExpression(varExpr);
                      if (varExpr.kind === 154 || varExpr.kind === 155) {
                          error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                      }
                      else if (!allConstituentTypesHaveKind(leftType, 1 | 258)) {
                          error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);
                      }
                      else {
                          checkReferenceExpression(varExpr, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_previously_defined_constant);
                      }
                  }
                  var rightType = checkExpression(node.expression);
                  if (!allConstituentTypesHaveKind(rightType, 1 | 48128 | 512)) {
                      error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
                  }
                  checkSourceElement(node.statement);
              }
              function checkForInOrForOfVariableDeclaration(iterationStatement) {
                  var variableDeclarationList = iterationStatement.initializer;
                  if (variableDeclarationList.declarations.length >= 1) {
                      var decl = variableDeclarationList.declarations[0];
                      checkVariableDeclaration(decl);
                  }
              }
              function checkRightHandSideOfForOf(rhsExpression) {
                  var expressionType = getTypeOfExpression(rhsExpression);
                  return checkIteratedTypeOrElementType(expressionType, rhsExpression, true);
              }
              function checkIteratedTypeOrElementType(inputType, errorNode, allowStringInput) {
                  if (inputType.flags & 1) {
                      return inputType;
                  }
                  if (languageVersion >= 2) {
                      return checkIteratedType(inputType, errorNode) || anyType;
                  }
                  if (allowStringInput) {
                      return checkElementTypeOfArrayOrString(inputType, errorNode);
                  }
                  if (isArrayLikeType(inputType)) {
                      var indexType = getIndexTypeOfType(inputType, 1);
                      if (indexType) {
                          return indexType;
                      }
                  }
                  error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType));
                  return unknownType;
              }
              function checkIteratedType(iterable, errorNode) {
                  ts.Debug.assert(languageVersion >= 2);
                  var iteratedType = getIteratedType(iterable, errorNode);
                  if (errorNode && iteratedType) {
                      checkTypeAssignableTo(iterable, createIterableType(iteratedType), errorNode);
                  }
                  return iteratedType;
                  function getIteratedType(iterable, errorNode) {
                      // We want to treat type as an iterable, and get the type it is an iterable of. The iterable
                      // must have the following structure (annotated with the names of the variables below):
                      //
                      // { // iterable
                      //     [Symbol.iterator]: { // iteratorFunction
                      //         (): { // iterator
                      //             next: { // iteratorNextFunction
                      //                 (): { // iteratorNextResult
                      //                     value: T // iteratorNextValue
                      //                 }
                      //             }
                      //         }
                      //     }
                      // }
                      //
                      // T is the type we are after. At every level that involves analyzing return types
                      // of signatures, we union the return types of all the signatures.
                      //
                      // Another thing to note is that at any step of this process, we could run into a dead end,
                      // meaning either the property is missing, or we run into the anyType. If either of these things
                      // happens, we return undefined to signal that we could not find the iterated type. If a property
                      // is missing, and the previous step did not result in 'any', then we also give an error if the
                      // caller requested it. Then the caller can decide what to do in the case where there is no iterated
                      // type. This is different from returning anyType, because that would signify that we have matched the
                      // whole pattern and that T (above) is 'any'.
                      if (allConstituentTypesHaveKind(iterable, 1)) {
                          return undefined;
                      }
                      if ((iterable.flags & 4096) && iterable.target === globalIterableType) {
                          return iterable.typeArguments[0];
                      }
                      var iteratorFunction = getTypeOfPropertyOfType(iterable, ts.getPropertyNameForKnownSymbolName("iterator"));
                      if (iteratorFunction && allConstituentTypesHaveKind(iteratorFunction, 1)) {
                          return undefined;
                      }
                      var iteratorFunctionSignatures = iteratorFunction ? getSignaturesOfType(iteratorFunction, 0) : emptyArray;
                      if (iteratorFunctionSignatures.length === 0) {
                          if (errorNode) {
                              error(errorNode, ts.Diagnostics.Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator);
                          }
                          return undefined;
                      }
                      var iterator = getUnionType(ts.map(iteratorFunctionSignatures, getReturnTypeOfSignature));
                      if (allConstituentTypesHaveKind(iterator, 1)) {
                          return undefined;
                      }
                      var iteratorNextFunction = getTypeOfPropertyOfType(iterator, "next");
                      if (iteratorNextFunction && allConstituentTypesHaveKind(iteratorNextFunction, 1)) {
                          return undefined;
                      }
                      var iteratorNextFunctionSignatures = iteratorNextFunction ? getSignaturesOfType(iteratorNextFunction, 0) : emptyArray;
                      if (iteratorNextFunctionSignatures.length === 0) {
                          if (errorNode) {
                              error(errorNode, ts.Diagnostics.An_iterator_must_have_a_next_method);
                          }
                          return undefined;
                      }
                      var iteratorNextResult = getUnionType(ts.map(iteratorNextFunctionSignatures, getReturnTypeOfSignature));
                      if (allConstituentTypesHaveKind(iteratorNextResult, 1)) {
                          return undefined;
                      }
                      var iteratorNextValue = getTypeOfPropertyOfType(iteratorNextResult, "value");
                      if (!iteratorNextValue) {
                          if (errorNode) {
                              error(errorNode, ts.Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property);
                          }
                          return undefined;
                      }
                      return iteratorNextValue;
                  }
              }
              function checkElementTypeOfArrayOrString(arrayOrStringType, errorNode) {
                  ts.Debug.assert(languageVersion < 2);
                  var arrayType = removeTypesFromUnionType(arrayOrStringType, 258, true, true);
                  var hasStringConstituent = arrayOrStringType !== arrayType;
                  var reportedError = false;
                  if (hasStringConstituent) {
                      if (languageVersion < 1) {
                          error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher);
                          reportedError = true;
                      }
                      if (arrayType === emptyObjectType) {
                          return stringType;
                      }
                  }
                  if (!isArrayLikeType(arrayType)) {
                      if (!reportedError) {
                          var diagnostic = hasStringConstituent
                              ? ts.Diagnostics.Type_0_is_not_an_array_type
                              : ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type;
                          error(errorNode, diagnostic, typeToString(arrayType));
                      }
                      return hasStringConstituent ? stringType : unknownType;
                  }
                  var arrayElementType = getIndexTypeOfType(arrayType, 1) || unknownType;
                  if (hasStringConstituent) {
                      if (arrayElementType.flags & 258) {
                          return stringType;
                      }
                      return getUnionType([arrayElementType, stringType]);
                  }
                  return arrayElementType;
              }
              function checkBreakOrContinueStatement(node) {
                  checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node);
              }
              function isGetAccessorWithAnnotatatedSetAccessor(node) {
                  return !!(node.kind === 137 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 138)));
              }
              function checkReturnStatement(node) {
                  if (!checkGrammarStatementInAmbientContext(node)) {
                      var functionBlock = ts.getContainingFunction(node);
                      if (!functionBlock) {
                          grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                      }
                  }
                  if (node.expression) {
                      var func = ts.getContainingFunction(node);
                      if (func) {
                          var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func));
                          var exprType = checkExpressionCached(node.expression);
                          if (func.kind === 138) {
                              error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value);
                          }
                          else {
                              if (func.kind === 136) {
                                  if (!isTypeAssignableTo(exprType, returnType)) {
                                      error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                                  }
                              }
                              else if (func.type || isGetAccessorWithAnnotatatedSetAccessor(func)) {
                                  checkTypeAssignableTo(exprType, returnType, node.expression, undefined);
                              }
                          }
                      }
                  }
              }
              function checkWithStatement(node) {
                  if (!checkGrammarStatementInAmbientContext(node)) {
                      if (node.parserContextFlags & 1) {
                          grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
                      }
                  }
                  checkExpression(node.expression);
                  error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any);
              }
              function checkSwitchStatement(node) {
                  checkGrammarStatementInAmbientContext(node);
                  var firstDefaultClause;
                  var hasDuplicateDefaultClause = false;
                  var expressionType = checkExpression(node.expression);
                  ts.forEach(node.caseBlock.clauses, function (clause) {
                      if (clause.kind === 222 && !hasDuplicateDefaultClause) {
                          if (firstDefaultClause === undefined) {
                              firstDefaultClause = clause;
                          }
                          else {
                              var sourceFile = ts.getSourceFileOfNode(node);
                              var start = ts.skipTrivia(sourceFile.text, clause.pos);
                              var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end;
                              grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement);
                              hasDuplicateDefaultClause = true;
                          }
                      }
                      if (produceDiagnostics && clause.kind === 221) {
                          var caseClause = clause;
                          var caseType = checkExpression(caseClause.expression);
                          if (!isTypeAssignableTo(expressionType, caseType)) {
                              checkTypeAssignableTo(caseType, expressionType, caseClause.expression, undefined);
                          }
                      }
                      ts.forEach(clause.statements, checkSourceElement);
                  });
              }
              function checkLabeledStatement(node) {
                  if (!checkGrammarStatementInAmbientContext(node)) {
                      var current = node.parent;
                      while (current) {
                          if (ts.isFunctionLike(current)) {
                              break;
                          }
                          if (current.kind === 195 && current.label.text === node.label.text) {
                              var sourceFile = ts.getSourceFileOfNode(node);
                              grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label));
                              break;
                          }
                          current = current.parent;
                      }
                  }
                  checkSourceElement(node.statement);
              }
              function checkThrowStatement(node) {
                  if (!checkGrammarStatementInAmbientContext(node)) {
                      if (node.expression === undefined) {
                          grammarErrorAfterFirstToken(node, ts.Diagnostics.Line_break_not_permitted_here);
                      }
                  }
                  if (node.expression) {
                      checkExpression(node.expression);
                  }
              }
              function checkTryStatement(node) {
                  checkGrammarStatementInAmbientContext(node);
                  checkBlock(node.tryBlock);
                  var catchClause = node.catchClause;
                  if (catchClause) {
                      if (catchClause.variableDeclaration) {
                          if (catchClause.variableDeclaration.name.kind !== 65) {
                              grammarErrorOnFirstToken(catchClause.variableDeclaration.name, ts.Diagnostics.Catch_clause_variable_name_must_be_an_identifier);
                          }
                          else if (catchClause.variableDeclaration.type) {
                              grammarErrorOnFirstToken(catchClause.variableDeclaration.type, ts.Diagnostics.Catch_clause_variable_cannot_have_a_type_annotation);
                          }
                          else if (catchClause.variableDeclaration.initializer) {
                              grammarErrorOnFirstToken(catchClause.variableDeclaration.initializer, ts.Diagnostics.Catch_clause_variable_cannot_have_an_initializer);
                          }
                          else {
                              var identifierName = catchClause.variableDeclaration.name.text;
                              var locals = catchClause.block.locals;
                              if (locals && ts.hasProperty(locals, identifierName)) {
                                  var localSymbol = locals[identifierName];
                                  if (localSymbol && (localSymbol.flags & 2) !== 0) {
                                      grammarErrorOnNode(localSymbol.valueDeclaration, ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, identifierName);
                                  }
                              }
                              checkGrammarEvalOrArgumentsInStrictMode(node, catchClause.variableDeclaration.name);
                          }
                      }
                      checkBlock(catchClause.block);
                  }
                  if (node.finallyBlock) {
                      checkBlock(node.finallyBlock);
                  }
              }
              function checkIndexConstraints(type) {
                  var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1);
                  var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0);
                  var stringIndexType = getIndexTypeOfType(type, 0);
                  var numberIndexType = getIndexTypeOfType(type, 1);
                  if (stringIndexType || numberIndexType) {
                      ts.forEach(getPropertiesOfObjectType(type), function (prop) {
                          var propType = getTypeOfSymbol(prop);
                          checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0);
                          checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1);
                      });
                      if (type.flags & 1024 && type.symbol.valueDeclaration.kind === 202) {
                          var classDeclaration = type.symbol.valueDeclaration;
                          for (var _i = 0, _a = classDeclaration.members; _i < _a.length; _i++) {
                              var member = _a[_i];
                              if (!(member.flags & 128) && ts.hasDynamicName(member)) {
                                  var propType = getTypeOfSymbol(member.symbol);
                                  checkIndexConstraintForProperty(member.symbol, propType, type, declaredStringIndexer, stringIndexType, 0);
                                  checkIndexConstraintForProperty(member.symbol, propType, type, declaredNumberIndexer, numberIndexType, 1);
                              }
                          }
                      }
                  }
                  var errorNode;
                  if (stringIndexType && numberIndexType) {
                      errorNode = declaredNumberIndexer || declaredStringIndexer;
                      if (!errorNode && (type.flags & 2048)) {
                          var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); });
                          errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0];
                      }
                  }
                  if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) {
                      error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
                  }
                  function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
                      if (!indexType) {
                          return;
                      }
                      if (indexKind === 1 && !isNumericName(prop.valueDeclaration.name)) {
                          return;
                      }
                      var errorNode;
                      if (prop.valueDeclaration.name.kind === 128 || prop.parent === containingType.symbol) {
                          errorNode = prop.valueDeclaration;
                      }
                      else if (indexDeclaration) {
                          errorNode = indexDeclaration;
                      }
                      else if (containingType.flags & 2048) {
                          var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.name) && getIndexTypeOfType(base, indexKind); });
                          errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : containingType.symbol.declarations[0];
                      }
                      if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
                          var errorMessage = indexKind === 0
                              ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
                              : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
                          error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
                      }
                  }
              }
              function checkTypeNameIsReserved(name, message) {
                  switch (name.text) {
                      case "any":
                      case "number":
                      case "boolean":
                      case "string":
                      case "symbol":
                      case "void":
                          error(name, message, name.text);
                  }
              }
              function checkTypeParameters(typeParameterDeclarations) {
                  if (typeParameterDeclarations) {
                      for (var i = 0, n = typeParameterDeclarations.length; i < n; i++) {
                          var node = typeParameterDeclarations[i];
                          checkTypeParameter(node);
                          if (produceDiagnostics) {
                              for (var j = 0; j < i; j++) {
                                  if (typeParameterDeclarations[j].symbol === node.symbol) {
                                      error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.declarationNameToString(node.name));
                                  }
                              }
                          }
                      }
                  }
              }
              function checkClassExpression(node) {
                  grammarErrorOnNode(node, ts.Diagnostics.class_expressions_are_not_currently_supported);
                  ts.forEach(node.members, checkSourceElement);
                  return unknownType;
              }
              function checkClassDeclaration(node) {
                  checkGrammarDeclarationNameInStrictMode(node);
                  if (node.parent.kind !== 207 && node.parent.kind !== 228) {
                      grammarErrorOnNode(node, ts.Diagnostics.class_declarations_are_only_supported_directly_inside_a_module_or_as_a_top_level_declaration);
                  }
                  if (!node.name && !(node.flags & 256)) {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name);
                  }
                  checkGrammarClassDeclarationHeritageClauses(node);
                  checkDecorators(node);
                  if (node.name) {
                      checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
                      checkCollisionWithCapturedThisVariable(node, node.name);
                      checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
                  }
                  checkTypeParameters(node.typeParameters);
                  checkExportsOnMergedDeclarations(node);
                  var symbol = getSymbolOfNode(node);
                  var type = getDeclaredTypeOfSymbol(symbol);
                  var staticType = getTypeOfSymbol(symbol);
                  var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
                  if (baseTypeNode) {
                      if (!ts.isSupportedExpressionWithTypeArguments(baseTypeNode)) {
                          error(baseTypeNode.expression, ts.Diagnostics.Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses);
                      }
                      emitExtends = emitExtends || !ts.isInAmbientContext(node);
                      checkExpressionWithTypeArguments(baseTypeNode);
                  }
                  var baseTypes = getBaseTypes(type);
                  if (baseTypes.length) {
                      if (produceDiagnostics) {
                          var baseType = baseTypes[0];
                          checkTypeAssignableTo(type, baseType, node.name || node, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
                          var staticBaseType = getTypeOfSymbol(baseType.symbol);
                          checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name || node, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
                          if (baseType.symbol !== resolveEntityName(baseTypeNode.expression, 107455)) {
                              error(baseTypeNode, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType));
                          }
                          checkKindsOfPropertyMemberOverrides(type, baseType);
                      }
                  }
                  if (baseTypes.length || (baseTypeNode && compilerOptions.separateCompilation)) {
                      checkExpressionOrQualifiedName(baseTypeNode.expression);
                  }
                  var implementedTypeNodes = ts.getClassImplementsHeritageClauseElements(node);
                  if (implementedTypeNodes) {
                      ts.forEach(implementedTypeNodes, function (typeRefNode) {
                          if (!ts.isSupportedExpressionWithTypeArguments(typeRefNode)) {
                              error(typeRefNode.expression, ts.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
                          }
                          checkExpressionWithTypeArguments(typeRefNode);
                          if (produceDiagnostics) {
                              var t = getTypeFromTypeNode(typeRefNode);
                              if (t !== unknownType) {
                                  var declaredType = (t.flags & 4096) ? t.target : t;
                                  if (declaredType.flags & (1024 | 2048)) {
                                      checkTypeAssignableTo(type, t, node.name || node, ts.Diagnostics.Class_0_incorrectly_implements_interface_1);
                                  }
                                  else {
                                      error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface);
                                  }
                              }
                          }
                      });
                  }
                  ts.forEach(node.members, checkSourceElement);
                  if (produceDiagnostics) {
                      checkIndexConstraints(type);
                      checkTypeForDuplicateIndexSignatures(node);
                  }
              }
              function getTargetSymbol(s) {
                  return s.flags & 16777216 ? getSymbolLinks(s).target : s;
              }
              function checkKindsOfPropertyMemberOverrides(type, baseType) {
                  // TypeScript 1.0 spec (April 2014): 8.2.3
                  // A derived class inherits all members from its base class it doesn't override.
                  // Inheritance means that a derived class implicitly contains all non - overridden members of the base class.
                  // Both public and private property members are inherited, but only public property members can be overridden.
                  // A property member in a derived class is said to override a property member in a base class
                  // when the derived class property member has the same name and kind(instance or static)
                  // as the base class property member.
                  // The type of an overriding property member must be assignable(section 3.8.4)
                  // to the type of the overridden property member, or otherwise a compile - time error occurs.
                  // Base class instance member functions can be overridden by derived class instance member functions,
                  // but not by other kinds of members.
                  // Base class instance member variables and accessors can be overridden by
                  // derived class instance member variables and accessors, but not by other kinds of members.
                  var baseProperties = getPropertiesOfObjectType(baseType);
                  for (var _i = 0; _i < baseProperties.length; _i++) {
                      var baseProperty = baseProperties[_i];
                      var base = getTargetSymbol(baseProperty);
                      if (base.flags & 134217728) {
                          continue;
                      }
                      var derived = getTargetSymbol(getPropertyOfObjectType(type, base.name));
                      if (derived) {
                          var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base);
                          var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived);
                          if ((baseDeclarationFlags & 32) || (derivedDeclarationFlags & 32)) {
                              continue;
                          }
                          if ((baseDeclarationFlags & 128) !== (derivedDeclarationFlags & 128)) {
                              continue;
                          }
                          if ((base.flags & derived.flags & 8192) || ((base.flags & 98308) && (derived.flags & 98308))) {
                              continue;
                          }
                          var errorMessage = void 0;
                          if (base.flags & 8192) {
                              if (derived.flags & 98304) {
                                  errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
                              }
                              else {
                                  ts.Debug.assert((derived.flags & 4) !== 0);
                                  errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property;
                              }
                          }
                          else if (base.flags & 4) {
                              ts.Debug.assert((derived.flags & 8192) !== 0);
                              errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;
                          }
                          else {
                              ts.Debug.assert((base.flags & 98304) !== 0);
                              ts.Debug.assert((derived.flags & 8192) !== 0);
                              errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
                          }
                          error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type));
                      }
                  }
              }
              function isAccessor(kind) {
                  return kind === 137 || kind === 138;
              }
              function areTypeParametersIdentical(list1, list2) {
                  if (!list1 && !list2) {
                      return true;
                  }
                  if (!list1 || !list2 || list1.length !== list2.length) {
                      return false;
                  }
                  for (var i = 0, len = list1.length; i < len; i++) {
                      var tp1 = list1[i];
                      var tp2 = list2[i];
                      if (tp1.name.text !== tp2.name.text) {
                          return false;
                      }
                      if (!tp1.constraint && !tp2.constraint) {
                          continue;
                      }
                      if (!tp1.constraint || !tp2.constraint) {
                          return false;
                      }
                      if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) {
                          return false;
                      }
                  }
                  return true;
              }
              function checkInheritedPropertiesAreIdentical(type, typeNode) {
                  var baseTypes = getBaseTypes(type);
                  if (baseTypes.length < 2) {
                      return true;
                  }
                  var seen = {};
                  ts.forEach(resolveDeclaredMembers(type).declaredProperties, function (p) { seen[p.name] = { prop: p, containingType: type }; });
                  var ok = true;
                  for (var _i = 0; _i < baseTypes.length; _i++) {
                      var base = baseTypes[_i];
                      var properties = getPropertiesOfObjectType(base);
                      for (var _a = 0; _a < properties.length; _a++) {
                          var prop = properties[_a];
                          if (!ts.hasProperty(seen, prop.name)) {
                              seen[prop.name] = { prop: prop, containingType: base };
                          }
                          else {
                              var existing = seen[prop.name];
                              var isInheritedProperty = existing.containingType !== type;
                              if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) {
                                  ok = false;
                                  var typeName1 = typeToString(existing.containingType);
                                  var typeName2 = typeToString(base);
                                  var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, symbolToString(prop), typeName1, typeName2);
                                  errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2);
                                  diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo));
                              }
                          }
                      }
                  }
                  return ok;
              }
              function checkInterfaceDeclaration(node) {
                  checkGrammarDeclarationNameInStrictMode(node) || checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarInterfaceDeclaration(node);
                  checkTypeParameters(node.typeParameters);
                  if (produceDiagnostics) {
                      checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0);
                      checkExportsOnMergedDeclarations(node);
                      var symbol = getSymbolOfNode(node);
                      var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 203);
                      if (symbol.declarations.length > 1) {
                          if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) {
                              error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters);
                          }
                      }
                      if (node === firstInterfaceDecl) {
                          var type = getDeclaredTypeOfSymbol(symbol);
                          if (checkInheritedPropertiesAreIdentical(type, node.name)) {
                              ts.forEach(getBaseTypes(type), function (baseType) {
                                  checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1);
                              });
                              checkIndexConstraints(type);
                          }
                      }
                  }
                  ts.forEach(ts.getInterfaceBaseTypeNodes(node), function (heritageElement) {
                      if (!ts.isSupportedExpressionWithTypeArguments(heritageElement)) {
                          error(heritageElement.expression, ts.Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments);
                      }
                      checkExpressionWithTypeArguments(heritageElement);
                  });
                  ts.forEach(node.members, checkSourceElement);
                  if (produceDiagnostics) {
                      checkTypeForDuplicateIndexSignatures(node);
                  }
              }
              function checkTypeAliasDeclaration(node) {
                  checkGrammarDecorators(node) || checkGrammarModifiers(node);
                  checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
                  checkSourceElement(node.type);
              }
              function computeEnumMemberValues(node) {
                  var nodeLinks = getNodeLinks(node);
                  if (!(nodeLinks.flags & 128)) {
                      var enumSymbol = getSymbolOfNode(node);
                      var enumType = getDeclaredTypeOfSymbol(enumSymbol);
                      var autoValue = 0;
                      var ambient = ts.isInAmbientContext(node);
                      var enumIsConst = ts.isConst(node);
                      ts.forEach(node.members, function (member) {
                          if (member.name.kind !== 128 && isNumericLiteralName(member.name.text)) {
                              error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                          }
                          var initializer = member.initializer;
                          if (initializer) {
                              autoValue = getConstantValueForEnumMemberInitializer(initializer);
                              if (autoValue === undefined) {
                                  if (enumIsConst) {
                                      error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression);
                                  }
                                  else if (!ambient) {
                                      checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined);
                                  }
                              }
                              else if (enumIsConst) {
                                  if (isNaN(autoValue)) {
                                      error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN);
                                  }
                                  else if (!isFinite(autoValue)) {
                                      error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);
                                  }
                              }
                          }
                          else if (ambient && !enumIsConst) {
                              autoValue = undefined;
                          }
                          if (autoValue !== undefined) {
                              getNodeLinks(member).enumMemberValue = autoValue++;
                          }
                      });
                      nodeLinks.flags |= 128;
                  }
                  function getConstantValueForEnumMemberInitializer(initializer) {
                      return evalConstant(initializer);
                      function evalConstant(e) {
                          switch (e.kind) {
                              case 168:
                                  var value = evalConstant(e.operand);
                                  if (value === undefined) {
                                      return undefined;
                                  }
                                  switch (e.operator) {
                                      case 33: return value;
                                      case 34: return -value;
                                      case 47: return ~value;
                                  }
                                  return undefined;
                              case 170:
                                  var left = evalConstant(e.left);
                                  if (left === undefined) {
                                      return undefined;
                                  }
                                  var right = evalConstant(e.right);
                                  if (right === undefined) {
                                      return undefined;
                                  }
                                  switch (e.operatorToken.kind) {
                                      case 44: return left | right;
                                      case 43: return left & right;
                                      case 41: return left >> right;
                                      case 42: return left >>> right;
                                      case 40: return left << right;
                                      case 45: return left ^ right;
                                      case 35: return left * right;
                                      case 36: return left / right;
                                      case 33: return left + right;
                                      case 34: return left - right;
                                      case 37: return left % right;
                                  }
                                  return undefined;
                              case 7:
                                  return +e.text;
                              case 162:
                                  return evalConstant(e.expression);
                              case 65:
                              case 157:
                              case 156:
                                  var member = initializer.parent;
                                  var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent));
                                  var enumType;
                                  var propertyName;
                                  if (e.kind === 65) {
                                      enumType = currentType;
                                      propertyName = e.text;
                                  }
                                  else {
                                      var expression;
                                      if (e.kind === 157) {
                                          if (e.argumentExpression === undefined ||
                                              e.argumentExpression.kind !== 8) {
                                              return undefined;
                                          }
                                          expression = e.expression;
                                          propertyName = e.argumentExpression.text;
                                      }
                                      else {
                                          expression = e.expression;
                                          propertyName = e.name.text;
                                      }
                                      var current = expression;
                                      while (current) {
                                          if (current.kind === 65) {
                                              break;
                                          }
                                          else if (current.kind === 156) {
                                              current = current.expression;
                                          }
                                          else {
                                              return undefined;
                                          }
                                      }
                                      enumType = checkExpression(expression);
                                      if (!(enumType.symbol && (enumType.symbol.flags & 384))) {
                                          return undefined;
                                      }
                                  }
                                  if (propertyName === undefined) {
                                      return undefined;
                                  }
                                  var property = getPropertyOfObjectType(enumType, propertyName);
                                  if (!property || !(property.flags & 8)) {
                                      return undefined;
                                  }
                                  var propertyDecl = property.valueDeclaration;
                                  if (member === propertyDecl) {
                                      return undefined;
                                  }
                                  if (!isDefinedBefore(propertyDecl, member)) {
                                      return undefined;
                                  }
                                  return getNodeLinks(propertyDecl).enumMemberValue;
                          }
                      }
                  }
              }
              function checkEnumDeclaration(node) {
                  if (!produceDiagnostics) {
                      return;
                  }
                  checkGrammarDeclarationNameInStrictMode(node) || checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarEnumDeclaration(node);
                  checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
                  checkCollisionWithCapturedThisVariable(node, node.name);
                  checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
                  checkExportsOnMergedDeclarations(node);
                  computeEnumMemberValues(node);
                  var enumIsConst = ts.isConst(node);
                  if (compilerOptions.separateCompilation && enumIsConst && ts.isInAmbientContext(node)) {
                      error(node.name, ts.Diagnostics.Ambient_const_enums_are_not_allowed_when_the_separateCompilation_flag_is_provided);
                  }
                  var enumSymbol = getSymbolOfNode(node);
                  var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind);
                  if (node === firstDeclaration) {
                      if (enumSymbol.declarations.length > 1) {
                          ts.forEach(enumSymbol.declarations, function (decl) {
                              if (ts.isConstEnumDeclaration(decl) !== enumIsConst) {
                                  error(decl.name, ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const);
                              }
                          });
                      }
                      var seenEnumMissingInitialInitializer = false;
                      ts.forEach(enumSymbol.declarations, function (declaration) {
                          if (declaration.kind !== 205) {
                              return false;
                          }
                          var enumDeclaration = declaration;
                          if (!enumDeclaration.members.length) {
                              return false;
                          }
                          var firstEnumMember = enumDeclaration.members[0];
                          if (!firstEnumMember.initializer) {
                              if (seenEnumMissingInitialInitializer) {
                                  error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element);
                              }
                              else {
                                  seenEnumMissingInitialInitializer = true;
                              }
                          }
                      });
                  }
              }
              function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
                  var declarations = symbol.declarations;
                  for (var _i = 0; _i < declarations.length; _i++) {
                      var declaration = declarations[_i];
                      if ((declaration.kind === 202 ||
                          (declaration.kind === 201 && ts.nodeIsPresent(declaration.body))) &&
                          !ts.isInAmbientContext(declaration)) {
                          return declaration;
                      }
                  }
                  return undefined;
              }
              function inSameLexicalScope(node1, node2) {
                  var container1 = ts.getEnclosingBlockScopeContainer(node1);
                  var container2 = ts.getEnclosingBlockScopeContainer(node2);
                  if (isGlobalSourceFile(container1)) {
                      return isGlobalSourceFile(container2);
                  }
                  else if (isGlobalSourceFile(container2)) {
                      return false;
                  }
                  else {
                      return container1 === container2;
                  }
              }
              function checkModuleDeclaration(node) {
                  if (produceDiagnostics) {
                      if (!checkGrammarDeclarationNameInStrictMode(node) && !checkGrammarDecorators(node) && !checkGrammarModifiers(node)) {
                          if (!ts.isInAmbientContext(node) && node.name.kind === 8) {
                              grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names);
                          }
                      }
                      checkCollisionWithCapturedThisVariable(node, node.name);
                      checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
                      checkExportsOnMergedDeclarations(node);
                      var symbol = getSymbolOfNode(node);
                      if (symbol.flags & 512
                          && symbol.declarations.length > 1
                          && !ts.isInAmbientContext(node)
                          && ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.separateCompilation)) {
                          var firstNonAmbientClassOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol);
                          if (firstNonAmbientClassOrFunc) {
                              if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(firstNonAmbientClassOrFunc)) {
                                  error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged);
                              }
                              else if (node.pos < firstNonAmbientClassOrFunc.pos) {
                                  error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged);
                              }
                          }
                          var mergedClass = ts.getDeclarationOfKind(symbol, 202);
                          if (mergedClass &&
                              inSameLexicalScope(node, mergedClass)) {
                              getNodeLinks(node).flags |= 2048;
                          }
                      }
                      if (node.name.kind === 8) {
                          if (!isGlobalSourceFile(node.parent)) {
                              error(node.name, ts.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules);
                          }
                          if (isExternalModuleNameRelative(node.name.text)) {
                              error(node.name, ts.Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name);
                          }
                      }
                  }
                  checkSourceElement(node.body);
              }
              function getFirstIdentifier(node) {
                  while (true) {
                      if (node.kind === 127) {
                          node = node.left;
                      }
                      else if (node.kind === 156) {
                          node = node.expression;
                      }
                      else {
                          break;
                      }
                  }
                  ts.Debug.assert(node.kind === 65);
                  return node;
              }
              function checkExternalImportOrExportDeclaration(node) {
                  var moduleName = ts.getExternalModuleName(node);
                  if (!ts.nodeIsMissing(moduleName) && moduleName.kind !== 8) {
                      error(moduleName, ts.Diagnostics.String_literal_expected);
                      return false;
                  }
                  var inAmbientExternalModule = node.parent.kind === 207 && node.parent.parent.name.kind === 8;
                  if (node.parent.kind !== 228 && !inAmbientExternalModule) {
                      error(moduleName, node.kind === 216 ?
                          ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                          ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                      return false;
                  }
                  if (inAmbientExternalModule && isExternalModuleNameRelative(moduleName.text)) {
                      error(node, ts.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name);
                      return false;
                  }
                  return true;
              }
              function checkAliasSymbol(node) {
                  var symbol = getSymbolOfNode(node);
                  var target = resolveAlias(symbol);
                  if (target !== unknownSymbol) {
                      var excludedMeanings = (symbol.flags & 107455 ? 107455 : 0) |
                          (symbol.flags & 793056 ? 793056 : 0) |
                          (symbol.flags & 1536 ? 1536 : 0);
                      if (target.flags & excludedMeanings) {
                          var message = node.kind === 218 ?
                              ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                              ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                          error(node, message, symbolToString(symbol));
                      }
                  }
              }
              function checkImportBinding(node) {
                  checkCollisionWithCapturedThisVariable(node, node.name);
                  checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
                  checkAliasSymbol(node);
              }
              function checkImportDeclaration(node) {
                  if (!checkGrammarImportDeclarationNameInStrictMode(node) && !checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 499)) {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers);
                  }
                  if (checkExternalImportOrExportDeclaration(node)) {
                      var importClause = node.importClause;
                      if (importClause) {
                          if (importClause.name) {
                              checkImportBinding(importClause);
                          }
                          if (importClause.namedBindings) {
                              if (importClause.namedBindings.kind === 212) {
                                  checkImportBinding(importClause.namedBindings);
                              }
                              else {
                                  ts.forEach(importClause.namedBindings.elements, checkImportBinding);
                              }
                          }
                      }
                  }
              }
              function checkImportEqualsDeclaration(node) {
                  checkGrammarDeclarationNameInStrictMode(node) || checkGrammarDecorators(node) || checkGrammarModifiers(node);
                  if (ts.isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) {
                      checkImportBinding(node);
                      if (node.flags & 1) {
                          markExportAsReferenced(node);
                      }
                      if (ts.isInternalModuleImportEqualsDeclaration(node)) {
                          var target = resolveAlias(getSymbolOfNode(node));
                          if (target !== unknownSymbol) {
                              if (target.flags & 107455) {
                                  var moduleName = getFirstIdentifier(node.moduleReference);
                                  if (!(resolveEntityName(moduleName, 107455 | 1536).flags & 1536)) {
                                      error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName));
                                  }
                              }
                              if (target.flags & 793056) {
                                  checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0);
                              }
                          }
                      }
                      else {
                          if (languageVersion >= 2) {
                              grammarErrorOnNode(node, ts.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_or_import_d_from_mod_instead);
                          }
                      }
                  }
              }
              function checkExportDeclaration(node) {
                  if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 499)) {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers);
                  }
                  if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) {
                      if (node.exportClause) {
                          ts.forEach(node.exportClause.elements, checkExportSpecifier);
                          var inAmbientExternalModule = node.parent.kind === 207 && node.parent.parent.name.kind === 8;
                          if (node.parent.kind !== 228 && !inAmbientExternalModule) {
                              error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                          }
                      }
                      else {
                          var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
                          if (moduleSymbol && moduleSymbol.exports["export="]) {
                              error(node.moduleSpecifier, ts.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol));
                          }
                      }
                  }
              }
              function checkExportSpecifier(node) {
                  checkAliasSymbol(node);
                  if (!node.parent.parent.moduleSpecifier) {
                      markExportAsReferenced(node);
                  }
              }
              function checkExportAssignment(node) {
                  var container = node.parent.kind === 228 ? node.parent : node.parent.parent;
                  if (container.kind === 206 && container.name.kind === 65) {
                      error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                      return;
                  }
                  if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 499)) {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
                  }
                  if (node.expression.kind === 65) {
                      markExportAsReferenced(node);
                  }
                  else {
                      checkExpressionCached(node.expression);
                  }
                  checkExternalModuleExports(container);
                  if (node.isExportEquals && !ts.isInAmbientContext(node)) {
                      if (languageVersion >= 2) {
                          grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_export_default_instead);
                      }
                      else if (compilerOptions.module === 4) {
                          grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system);
                      }
                  }
              }
              function getModuleStatements(node) {
                  if (node.kind === 228) {
                      return node.statements;
                  }
                  if (node.kind === 206 && node.body.kind === 207) {
                      return node.body.statements;
                  }
                  return emptyArray;
              }
              function hasExportedMembers(moduleSymbol) {
                  for (var id in moduleSymbol.exports) {
                      if (id !== "export=") {
                          return true;
                      }
                  }
                  return false;
              }
              function checkExternalModuleExports(node) {
                  var moduleSymbol = getSymbolOfNode(node);
                  var links = getSymbolLinks(moduleSymbol);
                  if (!links.exportsChecked) {
                      var exportEqualsSymbol = moduleSymbol.exports["export="];
                      if (exportEqualsSymbol && hasExportedMembers(moduleSymbol)) {
                          var declaration = getDeclarationOfAliasSymbol(exportEqualsSymbol) || exportEqualsSymbol.valueDeclaration;
                          error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);
                      }
                      links.exportsChecked = true;
                  }
              }
              function checkSourceElement(node) {
                  if (!node)
                      return;
                  switch (node.kind) {
                      case 129:
                          return checkTypeParameter(node);
                      case 130:
                          return checkParameter(node);
                      case 133:
                      case 132:
                          return checkPropertyDeclaration(node);
                      case 143:
                      case 144:
                      case 139:
                      case 140:
                          return checkSignatureDeclaration(node);
                      case 141:
                          return checkSignatureDeclaration(node);
                      case 135:
                      case 134:
                          return checkMethodDeclaration(node);
                      case 136:
                          return checkConstructorDeclaration(node);
                      case 137:
                      case 138:
                          return checkAccessorDeclaration(node);
                      case 142:
                          return checkTypeReferenceNode(node);
                      case 145:
                          return checkTypeQuery(node);
                      case 146:
                          return checkTypeLiteral(node);
                      case 147:
                          return checkArrayType(node);
                      case 148:
                          return checkTupleType(node);
                      case 149:
                          return checkUnionType(node);
                      case 150:
                          return checkSourceElement(node.type);
                      case 201:
                          return checkFunctionDeclaration(node);
                      case 180:
                      case 207:
                          return checkBlock(node);
                      case 181:
                          return checkVariableStatement(node);
                      case 183:
                          return checkExpressionStatement(node);
                      case 184:
                          return checkIfStatement(node);
                      case 185:
                          return checkDoStatement(node);
                      case 186:
                          return checkWhileStatement(node);
                      case 187:
                          return checkForStatement(node);
                      case 188:
                          return checkForInStatement(node);
                      case 189:
                          return checkForOfStatement(node);
                      case 190:
                      case 191:
                          return checkBreakOrContinueStatement(node);
                      case 192:
                          return checkReturnStatement(node);
                      case 193:
                          return checkWithStatement(node);
                      case 194:
                          return checkSwitchStatement(node);
                      case 195:
                          return checkLabeledStatement(node);
                      case 196:
                          return checkThrowStatement(node);
                      case 197:
                          return checkTryStatement(node);
                      case 199:
                          return checkVariableDeclaration(node);
                      case 153:
                          return checkBindingElement(node);
                      case 202:
                          return checkClassDeclaration(node);
                      case 203:
                          return checkInterfaceDeclaration(node);
                      case 204:
                          return checkTypeAliasDeclaration(node);
                      case 205:
                          return checkEnumDeclaration(node);
                      case 206:
                          return checkModuleDeclaration(node);
                      case 210:
                          return checkImportDeclaration(node);
                      case 209:
                          return checkImportEqualsDeclaration(node);
                      case 216:
                          return checkExportDeclaration(node);
                      case 215:
                          return checkExportAssignment(node);
                      case 182:
                          checkGrammarStatementInAmbientContext(node);
                          return;
                      case 198:
                          checkGrammarStatementInAmbientContext(node);
                          return;
                      case 219:
                          return checkMissingDeclaration(node);
                  }
              }
              function checkFunctionExpressionBodies(node) {
                  switch (node.kind) {
                      case 163:
                      case 164:
                          ts.forEach(node.parameters, checkFunctionExpressionBodies);
                          checkFunctionExpressionOrObjectLiteralMethodBody(node);
                          break;
                      case 135:
                      case 134:
                          ts.forEach(node.parameters, checkFunctionExpressionBodies);
                          if (ts.isObjectLiteralMethod(node)) {
                              checkFunctionExpressionOrObjectLiteralMethodBody(node);
                          }
                          break;
                      case 136:
                      case 137:
                      case 138:
                      case 201:
                          ts.forEach(node.parameters, checkFunctionExpressionBodies);
                          break;
                      case 193:
                          checkFunctionExpressionBodies(node.expression);
                          break;
                      case 130:
                      case 133:
                      case 132:
                      case 151:
                      case 152:
                      case 153:
                      case 154:
                      case 155:
                      case 225:
                      case 156:
                      case 157:
                      case 158:
                      case 159:
                      case 160:
                      case 172:
                      case 178:
                      case 161:
                      case 162:
                      case 166:
                      case 167:
                      case 165:
                      case 168:
                      case 169:
                      case 170:
                      case 171:
                      case 174:
                      case 180:
                      case 207:
                      case 181:
                      case 183:
                      case 184:
                      case 185:
                      case 186:
                      case 187:
                      case 188:
                      case 189:
                      case 190:
                      case 191:
                      case 192:
                      case 194:
                      case 208:
                      case 221:
                      case 222:
                      case 195:
                      case 196:
                      case 197:
                      case 224:
                      case 199:
                      case 200:
                      case 202:
                      case 205:
                      case 227:
                      case 215:
                      case 228:
                          ts.forEachChild(node, checkFunctionExpressionBodies);
                          break;
                  }
              }
              function checkSourceFile(node) {
                  var start = new Date().getTime();
                  checkSourceFileWorker(node);
                  ts.checkTime += new Date().getTime() - start;
              }
              function checkSourceFileWorker(node) {
                  var links = getNodeLinks(node);
                  if (!(links.flags & 1)) {
                      checkGrammarSourceFile(node);
                      emitExtends = false;
                      emitDecorate = false;
                      emitParam = false;
                      potentialThisCollisions.length = 0;
                      ts.forEach(node.statements, checkSourceElement);
                      checkFunctionExpressionBodies(node);
                      if (ts.isExternalModule(node)) {
                          checkExternalModuleExports(node);
                      }
                      if (potentialThisCollisions.length) {
                          ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope);
                          potentialThisCollisions.length = 0;
                      }
                      if (emitExtends) {
                          links.flags |= 8;
                      }
                      if (emitDecorate) {
                          links.flags |= 512;
                      }
                      if (emitParam) {
                          links.flags |= 1024;
                      }
                      links.flags |= 1;
                  }
              }
              function getDiagnostics(sourceFile) {
                  throwIfNonDiagnosticsProducing();
                  if (sourceFile) {
                      checkSourceFile(sourceFile);
                      return diagnostics.getDiagnostics(sourceFile.fileName);
                  }
                  ts.forEach(host.getSourceFiles(), checkSourceFile);
                  return diagnostics.getDiagnostics();
              }
              function getGlobalDiagnostics() {
                  throwIfNonDiagnosticsProducing();
                  return diagnostics.getGlobalDiagnostics();
              }
              function throwIfNonDiagnosticsProducing() {
                  if (!produceDiagnostics) {
                      throw new Error("Trying to get diagnostics from a type checker that does not produce them.");
                  }
              }
              function isInsideWithStatementBody(node) {
                  if (node) {
                      while (node.parent) {
                          if (node.parent.kind === 193 && node.parent.statement === node) {
                              return true;
                          }
                          node = node.parent;
                      }
                  }
                  return false;
              }
              function getSymbolsInScope(location, meaning) {
                  var symbols = {};
                  var memberFlags = 0;
                  if (isInsideWithStatementBody(location)) {
                      return [];
                  }
                  populateSymbols();
                  return symbolsToArray(symbols);
                  function populateSymbols() {
                      while (location) {
                          if (location.locals && !isGlobalSourceFile(location)) {
                              copySymbols(location.locals, meaning);
                          }
                          switch (location.kind) {
                              case 228:
                                  if (!ts.isExternalModule(location)) {
                                      break;
                                  }
                              case 206:
                                  copySymbols(getSymbolOfNode(location).exports, meaning & 8914931);
                                  break;
                              case 205:
                                  copySymbols(getSymbolOfNode(location).exports, meaning & 8);
                                  break;
                              case 202:
                              case 203:
                                  if (!(memberFlags & 128)) {
                                      copySymbols(getSymbolOfNode(location).members, meaning & 793056);
                                  }
                                  break;
                              case 163:
                                  if (location.name) {
                                      copySymbol(location.symbol, meaning);
                                  }
                                  break;
                          }
                          memberFlags = location.flags;
                          location = location.parent;
                      }
                      copySymbols(globals, meaning);
                  }
                  function copySymbol(symbol, meaning) {
                      if (symbol.flags & meaning) {
                          var id = symbol.name;
                          if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) {
                              symbols[id] = symbol;
                          }
                      }
                  }
                  function copySymbols(source, meaning) {
                      if (meaning) {
                          for (var id in source) {
                              if (ts.hasProperty(source, id)) {
                                  copySymbol(source[id], meaning);
                              }
                          }
                      }
                  }
                  if (isInsideWithStatementBody(location)) {
                      return [];
                  }
                  while (location) {
                      if (location.locals && !isGlobalSourceFile(location)) {
                          copySymbols(location.locals, meaning);
                      }
                      switch (location.kind) {
                          case 228:
                              if (!ts.isExternalModule(location))
                                  break;
                          case 206:
                              copySymbols(getSymbolOfNode(location).exports, meaning & 8914931);
                              break;
                          case 205:
                              copySymbols(getSymbolOfNode(location).exports, meaning & 8);
                              break;
                          case 202:
                          case 203:
                              if (!(memberFlags & 128)) {
                                  copySymbols(getSymbolOfNode(location).members, meaning & 793056);
                              }
                              break;
                          case 163:
                              if (location.name) {
                                  copySymbol(location.symbol, meaning);
                              }
                              break;
                      }
                      memberFlags = location.flags;
                      location = location.parent;
                  }
                  copySymbols(globals, meaning);
                  return symbolsToArray(symbols);
              }
              function isTypeDeclarationName(name) {
                  return name.kind == 65 &&
                      isTypeDeclaration(name.parent) &&
                      name.parent.name === name;
              }
              function isTypeDeclaration(node) {
                  switch (node.kind) {
                      case 129:
                      case 202:
                      case 203:
                      case 204:
                      case 205:
                          return true;
                  }
              }
              function isTypeReferenceIdentifier(entityName) {
                  var node = entityName;
                  while (node.parent && node.parent.kind === 127) {
                      node = node.parent;
                  }
                  return node.parent && node.parent.kind === 142;
              }
              function isHeritageClauseElementIdentifier(entityName) {
                  var node = entityName;
                  while (node.parent && node.parent.kind === 156) {
                      node = node.parent;
                  }
                  return node.parent && node.parent.kind === 177;
              }
              function isTypeNode(node) {
                  if (142 <= node.kind && node.kind <= 150) {
                      return true;
                  }
                  switch (node.kind) {
                      case 112:
                      case 120:
                      case 122:
                      case 113:
                      case 123:
                          return true;
                      case 99:
                          return node.parent.kind !== 167;
                      case 8:
                          return node.parent.kind === 130;
                      case 177:
                          return true;
                      case 65:
                          if (node.parent.kind === 127 && node.parent.right === node) {
                              node = node.parent;
                          }
                          else if (node.parent.kind === 156 && node.parent.name === node) {
                              node = node.parent;
                          }
                      case 127:
                      case 156:
                          ts.Debug.assert(node.kind === 65 || node.kind === 127 || node.kind === 156, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'.");
                          var parent_5 = node.parent;
                          if (parent_5.kind === 145) {
                              return false;
                          }
                          if (142 <= parent_5.kind && parent_5.kind <= 150) {
                              return true;
                          }
                          switch (parent_5.kind) {
                              case 177:
                                  return true;
                              case 129:
                                  return node === parent_5.constraint;
                              case 133:
                              case 132:
                              case 130:
                              case 199:
                                  return node === parent_5.type;
                              case 201:
                              case 163:
                              case 164:
                              case 136:
                              case 135:
                              case 134:
                              case 137:
                              case 138:
                                  return node === parent_5.type;
                              case 139:
                              case 140:
                              case 141:
                                  return node === parent_5.type;
                              case 161:
                                  return node === parent_5.type;
                              case 158:
                              case 159:
                                  return parent_5.typeArguments && ts.indexOf(parent_5.typeArguments, node) >= 0;
                              case 160:
                                  return false;
                          }
                  }
                  return false;
              }
              function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
                  while (nodeOnRightSide.parent.kind === 127) {
                      nodeOnRightSide = nodeOnRightSide.parent;
                  }
                  if (nodeOnRightSide.parent.kind === 209) {
                      return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent;
                  }
                  if (nodeOnRightSide.parent.kind === 215) {
                      return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent;
                  }
                  return undefined;
              }
              function isInRightSideOfImportOrExportAssignment(node) {
                  return getLeftSideOfImportEqualsOrExportAssignment(node) !== undefined;
              }
              function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) {
                  if (ts.isDeclarationName(entityName)) {
                      return getSymbolOfNode(entityName.parent);
                  }
                  if (entityName.parent.kind === 215) {
                      return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608);
                  }
                  if (entityName.kind !== 156) {
                      if (isInRightSideOfImportOrExportAssignment(entityName)) {
                          return getSymbolOfPartOfRightHandSideOfImportEquals(entityName);
                      }
                  }
                  if (ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                      entityName = entityName.parent;
                  }
                  if (isHeritageClauseElementIdentifier(entityName)) {
                      var meaning = entityName.parent.kind === 177 ? 793056 : 1536;
                      meaning |= 8388608;
                      return resolveEntityName(entityName, meaning);
                  }
                  else if (ts.isExpression(entityName)) {
                      if (ts.nodeIsMissing(entityName)) {
                          return undefined;
                      }
                      if (entityName.kind === 65) {
                          var meaning = 107455 | 8388608;
                          return resolveEntityName(entityName, meaning);
                      }
                      else if (entityName.kind === 156) {
                          var symbol = getNodeLinks(entityName).resolvedSymbol;
                          if (!symbol) {
                              checkPropertyAccessExpression(entityName);
                          }
                          return getNodeLinks(entityName).resolvedSymbol;
                      }
                      else if (entityName.kind === 127) {
                          var symbol = getNodeLinks(entityName).resolvedSymbol;
                          if (!symbol) {
                              checkQualifiedName(entityName);
                          }
                          return getNodeLinks(entityName).resolvedSymbol;
                      }
                  }
                  else if (isTypeReferenceIdentifier(entityName)) {
                      var meaning = entityName.parent.kind === 142 ? 793056 : 1536;
                      meaning |= 8388608;
                      return resolveEntityName(entityName, meaning);
                  }
                  return undefined;
              }
              function getSymbolInfo(node) {
                  if (isInsideWithStatementBody(node)) {
                      return undefined;
                  }
                  if (ts.isDeclarationName(node)) {
                      return getSymbolOfNode(node.parent);
                  }
                  if (node.kind === 65 && isInRightSideOfImportOrExportAssignment(node)) {
                      return node.parent.kind === 215
                          ? getSymbolOfEntityNameOrPropertyAccessExpression(node)
                          : getSymbolOfPartOfRightHandSideOfImportEquals(node);
                  }
                  switch (node.kind) {
                      case 65:
                      case 156:
                      case 127:
                          return getSymbolOfEntityNameOrPropertyAccessExpression(node);
                      case 93:
                      case 91:
                          var type = checkExpression(node);
                          return type.symbol;
                      case 114:
                          var constructorDeclaration = node.parent;
                          if (constructorDeclaration && constructorDeclaration.kind === 136) {
                              return constructorDeclaration.parent.symbol;
                          }
                          return undefined;
                      case 8:
                          var moduleName;
                          if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) &&
                              ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
                              ((node.parent.kind === 210 || node.parent.kind === 216) &&
                                  node.parent.moduleSpecifier === node)) {
                              return resolveExternalModuleName(node, node);
                          }
                      case 7:
                          if (node.parent.kind == 157 && node.parent.argumentExpression === node) {
                              var objectType = checkExpression(node.parent.expression);
                              if (objectType === unknownType)
                                  return undefined;
                              var apparentType = getApparentType(objectType);
                              if (apparentType === unknownType)
                                  return undefined;
                              return getPropertyOfType(apparentType, node.text);
                          }
                          break;
                  }
                  return undefined;
              }
              function getShorthandAssignmentValueSymbol(location) {
                  if (location && location.kind === 226) {
                      return resolveEntityName(location.name, 107455);
                  }
                  return undefined;
              }
              function getTypeOfNode(node) {
                  if (isInsideWithStatementBody(node)) {
                      return unknownType;
                  }
                  if (isTypeNode(node)) {
                      return getTypeFromTypeNode(node);
                  }
                  if (ts.isExpression(node)) {
                      return getTypeOfExpression(node);
                  }
                  if (isTypeDeclaration(node)) {
                      var symbol = getSymbolOfNode(node);
                      return getDeclaredTypeOfSymbol(symbol);
                  }
                  if (isTypeDeclarationName(node)) {
                      var symbol = getSymbolInfo(node);
                      return symbol && getDeclaredTypeOfSymbol(symbol);
                  }
                  if (ts.isDeclaration(node)) {
                      var symbol = getSymbolOfNode(node);
                      return getTypeOfSymbol(symbol);
                  }
                  if (ts.isDeclarationName(node)) {
                      var symbol = getSymbolInfo(node);
                      return symbol && getTypeOfSymbol(symbol);
                  }
                  if (isInRightSideOfImportOrExportAssignment(node)) {
                      var symbol = getSymbolInfo(node);
                      var declaredType = symbol && getDeclaredTypeOfSymbol(symbol);
                      return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol);
                  }
                  return unknownType;
              }
              function getTypeOfExpression(expr) {
                  if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
                      expr = expr.parent;
                  }
                  return checkExpression(expr);
              }
              function getAugmentedPropertiesOfType(type) {
                  type = getApparentType(type);
                  var propsByName = createSymbolTable(getPropertiesOfType(type));
                  if (getSignaturesOfType(type, 0).length || getSignaturesOfType(type, 1).length) {
                      ts.forEach(getPropertiesOfType(globalFunctionType), function (p) {
                          if (!ts.hasProperty(propsByName, p.name)) {
                              propsByName[p.name] = p;
                          }
                      });
                  }
                  return getNamedMembers(propsByName);
              }
              function getRootSymbols(symbol) {
                  if (symbol.flags & 268435456) {
                      var symbols = [];
                      var name_10 = symbol.name;
                      ts.forEach(getSymbolLinks(symbol).unionType.types, function (t) {
                          symbols.push(getPropertyOfType(t, name_10));
                      });
                      return symbols;
                  }
                  else if (symbol.flags & 67108864) {
                      var target = getSymbolLinks(symbol).target;
                      if (target) {
                          return [target];
                      }
                  }
                  return [symbol];
              }
              function isExternalModuleSymbol(symbol) {
                  return symbol.flags & 512 && symbol.declarations.length === 1 && symbol.declarations[0].kind === 228;
              }
              function getAliasNameSubstitution(symbol, getGeneratedNameForNode) {
                  if (languageVersion >= 2) {
                      return undefined;
                  }
                  var node = getDeclarationOfAliasSymbol(symbol);
                  if (node) {
                      if (node.kind === 211) {
                          var defaultKeyword;
                          if (languageVersion === 0) {
                              defaultKeyword = "[\"default\"]";
                          }
                          else {
                              defaultKeyword = ".default";
                          }
                          return getGeneratedNameForNode(node.parent) + defaultKeyword;
                      }
                      if (node.kind === 214) {
                          var moduleName = getGeneratedNameForNode(node.parent.parent.parent);
                          var propertyName = node.propertyName || node.name;
                          return moduleName + "." + ts.unescapeIdentifier(propertyName.text);
                      }
                  }
              }
              function getExportNameSubstitution(symbol, location, getGeneratedNameForNode) {
                  if (isExternalModuleSymbol(symbol.parent)) {
                      if (languageVersion >= 2 || compilerOptions.module === 4) {
                          return undefined;
                      }
                      return "exports." + ts.unescapeIdentifier(symbol.name);
                  }
                  var node = location;
                  var containerSymbol = getParentOfSymbol(symbol);
                  while (node) {
                      if ((node.kind === 206 || node.kind === 205) && getSymbolOfNode(node) === containerSymbol) {
                          return getGeneratedNameForNode(node) + "." + ts.unescapeIdentifier(symbol.name);
                      }
                      node = node.parent;
                  }
              }
              function getExpressionNameSubstitution(node, getGeneratedNameForNode) {
                  var symbol = getNodeLinks(node).resolvedSymbol || (ts.isDeclarationName(node) ? getSymbolOfNode(node.parent) : undefined);
                  if (symbol) {
                      if (symbol.parent) {
                          return getExportNameSubstitution(symbol, node.parent, getGeneratedNameForNode);
                      }
                      var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol);
                      if (symbol !== exportSymbol && !(exportSymbol.flags & 944)) {
                          return getExportNameSubstitution(exportSymbol, node.parent, getGeneratedNameForNode);
                      }
                      if (symbol.flags & 8388608) {
                          return getAliasNameSubstitution(symbol, getGeneratedNameForNode);
                      }
                  }
              }
              function isValueAliasDeclaration(node) {
                  switch (node.kind) {
                      case 209:
                      case 211:
                      case 212:
                      case 214:
                      case 218:
                          return isAliasResolvedToValue(getSymbolOfNode(node));
                      case 216:
                          var exportClause = node.exportClause;
                          return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration);
                      case 215:
                          return node.expression && node.expression.kind === 65 ? isAliasResolvedToValue(getSymbolOfNode(node)) : true;
                  }
                  return false;
              }
              function isTopLevelValueImportEqualsWithEntityName(node) {
                  if (node.parent.kind !== 228 || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                      return false;
                  }
                  var isValue = isAliasResolvedToValue(getSymbolOfNode(node));
                  return isValue && node.moduleReference && !ts.nodeIsMissing(node.moduleReference);
              }
              function isAliasResolvedToValue(symbol) {
                  var target = resolveAlias(symbol);
                  if (target === unknownSymbol && compilerOptions.separateCompilation) {
                      return true;
                  }
                  return target !== unknownSymbol && target && target.flags & 107455 && !isConstEnumOrConstEnumOnlyModule(target);
              }
              function isConstEnumOrConstEnumOnlyModule(s) {
                  return isConstEnumSymbol(s) || s.constEnumOnlyModule;
              }
              function isReferencedAliasDeclaration(node, checkChildren) {
                  if (ts.isAliasSymbolDeclaration(node)) {
                      var symbol = getSymbolOfNode(node);
                      if (getSymbolLinks(symbol).referenced) {
                          return true;
                      }
                  }
                  if (checkChildren) {
                      return ts.forEachChild(node, function (node) { return isReferencedAliasDeclaration(node, checkChildren); });
                  }
                  return false;
              }
              function isImplementationOfOverload(node) {
                  if (ts.nodeIsPresent(node.body)) {
                      var symbol = getSymbolOfNode(node);
                      var signaturesOfSymbol = getSignaturesOfSymbol(symbol);
                      return signaturesOfSymbol.length > 1 ||
                          (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node);
                  }
                  return false;
              }
              function getNodeCheckFlags(node) {
                  return getNodeLinks(node).flags;
              }
              function getEnumMemberValue(node) {
                  computeEnumMemberValues(node.parent);
                  return getNodeLinks(node).enumMemberValue;
              }
              function getConstantValue(node) {
                  if (node.kind === 227) {
                      return getEnumMemberValue(node);
                  }
                  var symbol = getNodeLinks(node).resolvedSymbol;
                  if (symbol && (symbol.flags & 8)) {
                      if (ts.isConstEnumDeclaration(symbol.valueDeclaration.parent)) {
                          return getEnumMemberValue(symbol.valueDeclaration);
                      }
                  }
                  return undefined;
              }
              function serializeEntityName(node, getGeneratedNameForNode, fallbackPath) {
                  if (node.kind === 65) {
                      var substitution = getExpressionNameSubstitution(node, getGeneratedNameForNode);
                      var text = substitution || node.text;
                      if (fallbackPath) {
                          fallbackPath.push(text);
                      }
                      else {
                          return text;
                      }
                  }
                  else {
                      var left = serializeEntityName(node.left, getGeneratedNameForNode, fallbackPath);
                      var right = serializeEntityName(node.right, getGeneratedNameForNode, fallbackPath);
                      if (!fallbackPath) {
                          return left + "." + right;
                      }
                  }
              }
              function serializeTypeReferenceNode(node, getGeneratedNameForNode) {
                  var type = getTypeFromTypeNode(node);
                  if (type.flags & 16) {
                      return "void 0";
                  }
                  else if (type.flags & 8) {
                      return "Boolean";
                  }
                  else if (type.flags & 132) {
                      return "Number";
                  }
                  else if (type.flags & 258) {
                      return "String";
                  }
                  else if (type.flags & 8192) {
                      return "Array";
                  }
                  else if (type.flags & 1048576) {
                      return "Symbol";
                  }
                  else if (type === unknownType) {
                      var fallbackPath = [];
                      serializeEntityName(node.typeName, getGeneratedNameForNode, fallbackPath);
                      return fallbackPath;
                  }
                  else if (type.symbol && type.symbol.valueDeclaration) {
                      return serializeEntityName(node.typeName, getGeneratedNameForNode);
                  }
                  else if (typeHasCallOrConstructSignatures(type)) {
                      return "Function";
                  }
                  return "Object";
              }
              function serializeTypeNode(node, getGeneratedNameForNode) {
                  if (node) {
                      switch (node.kind) {
                          case 99:
                              return "void 0";
                          case 150:
                              return serializeTypeNode(node.type, getGeneratedNameForNode);
                          case 143:
                          case 144:
                              return "Function";
                          case 147:
                          case 148:
                              return "Array";
                          case 113:
                              return "Boolean";
                          case 122:
                          case 8:
                              return "String";
                          case 120:
                              return "Number";
                          case 142:
                              return serializeTypeReferenceNode(node, getGeneratedNameForNode);
                          case 145:
                          case 146:
                          case 149:
                          case 112:
                              break;
                          default:
                              ts.Debug.fail("Cannot serialize unexpected type node.");
                              break;
                      }
                  }
                  return "Object";
              }
              function serializeTypeOfNode(node, getGeneratedNameForNode) {
                  switch (node.kind) {
                      case 202: return "Function";
                      case 133: return serializeTypeNode(node.type, getGeneratedNameForNode);
                      case 130: return serializeTypeNode(node.type, getGeneratedNameForNode);
                      case 137: return serializeTypeNode(node.type, getGeneratedNameForNode);
                      case 138: return serializeTypeNode(getSetAccessorTypeAnnotationNode(node), getGeneratedNameForNode);
                  }
                  if (ts.isFunctionLike(node)) {
                      return "Function";
                  }
                  return "void 0";
              }
              function serializeParameterTypesOfNode(node, getGeneratedNameForNode) {
                  if (node) {
                      var valueDeclaration;
                      if (node.kind === 202) {
                          valueDeclaration = ts.getFirstConstructorWithBody(node);
                      }
                      else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) {
                          valueDeclaration = node;
                      }
                      if (valueDeclaration) {
                          var result;
                          var parameters = valueDeclaration.parameters;
                          var parameterCount = parameters.length;
                          if (parameterCount > 0) {
                              result = new Array(parameterCount);
                              for (var i = 0; i < parameterCount; i++) {
                                  if (parameters[i].dotDotDotToken) {
                                      var parameterType = parameters[i].type;
                                      if (parameterType.kind === 147) {
                                          parameterType = parameterType.elementType;
                                      }
                                      else if (parameterType.kind === 142 && parameterType.typeArguments && parameterType.typeArguments.length === 1) {
                                          parameterType = parameterType.typeArguments[0];
                                      }
                                      else {
                                          parameterType = undefined;
                                      }
                                      result[i] = serializeTypeNode(parameterType, getGeneratedNameForNode);
                                  }
                                  else {
                                      result[i] = serializeTypeOfNode(parameters[i], getGeneratedNameForNode);
                                  }
                              }
                              return result;
                          }
                      }
                  }
                  return emptyArray;
              }
              function serializeReturnTypeOfNode(node, getGeneratedNameForNode) {
                  if (node && ts.isFunctionLike(node)) {
                      return serializeTypeNode(node.type, getGeneratedNameForNode);
                  }
                  return "void 0";
              }
              function writeTypeOfDeclaration(declaration, enclosingDeclaration, flags, writer) {
                  var symbol = getSymbolOfNode(declaration);
                  var type = symbol && !(symbol.flags & (2048 | 131072))
                      ? getTypeOfSymbol(symbol)
                      : unknownType;
                  getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
              }
              function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) {
                  var signature = getSignatureFromDeclaration(signatureDeclaration);
                  getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags);
              }
              function writeTypeOfExpression(expr, enclosingDeclaration, flags, writer) {
                  var type = getTypeOfExpression(expr);
                  getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
              }
              function hasGlobalName(name) {
                  return ts.hasProperty(globals, name);
              }
              function resolvesToSomeValue(location, name) {
                  ts.Debug.assert(!ts.nodeIsSynthesized(location), "resolvesToSomeValue called with a synthesized location");
                  return !!resolveName(location, name, 107455, undefined, undefined);
              }
              function getReferencedValueDeclaration(reference) {
                  ts.Debug.assert(!ts.nodeIsSynthesized(reference));
                  var symbol = getNodeLinks(reference).resolvedSymbol ||
                      resolveName(reference, reference.text, 107455 | 8388608, undefined, undefined);
                  return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration;
              }
              function getBlockScopedVariableId(n) {
                  ts.Debug.assert(!ts.nodeIsSynthesized(n));
                  var isVariableDeclarationOrBindingElement = n.parent.kind === 153 || (n.parent.kind === 199 && n.parent.name === n);
                  var symbol = (isVariableDeclarationOrBindingElement ? getSymbolOfNode(n.parent) : undefined) ||
                      getNodeLinks(n).resolvedSymbol ||
                      resolveName(n, n.text, 107455 | 8388608, undefined, undefined);
                  var isLetOrConst = symbol &&
                      (symbol.flags & 2) &&
                      symbol.valueDeclaration.parent.kind !== 224;
                  if (isLetOrConst) {
                      getSymbolLinks(symbol);
                      return symbol.id;
                  }
                  return undefined;
              }
              function instantiateSingleCallFunctionType(functionType, typeArguments) {
                  if (functionType === unknownType) {
                      return unknownType;
                  }
                  var signature = getSingleCallSignature(functionType);
                  if (!signature) {
                      return unknownType;
                  }
                  var instantiatedSignature = getSignatureInstantiation(signature, typeArguments);
                  return getOrCreateTypeFromSignature(instantiatedSignature);
              }
              function createResolver() {
                  return {
                      getExpressionNameSubstitution: getExpressionNameSubstitution,
                      isValueAliasDeclaration: isValueAliasDeclaration,
                      hasGlobalName: hasGlobalName,
                      isReferencedAliasDeclaration: isReferencedAliasDeclaration,
                      getNodeCheckFlags: getNodeCheckFlags,
                      isTopLevelValueImportEqualsWithEntityName: isTopLevelValueImportEqualsWithEntityName,
                      isDeclarationVisible: isDeclarationVisible,
                      isImplementationOfOverload: isImplementationOfOverload,
                      writeTypeOfDeclaration: writeTypeOfDeclaration,
                      writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration,
                      writeTypeOfExpression: writeTypeOfExpression,
                      isSymbolAccessible: isSymbolAccessible,
                      isEntityNameVisible: isEntityNameVisible,
                      getConstantValue: getConstantValue,
                      resolvesToSomeValue: resolvesToSomeValue,
                      collectLinkedAliases: collectLinkedAliases,
                      getBlockScopedVariableId: getBlockScopedVariableId,
                      getReferencedValueDeclaration: getReferencedValueDeclaration,
                      serializeTypeOfNode: serializeTypeOfNode,
                      serializeParameterTypesOfNode: serializeParameterTypesOfNode,
                      serializeReturnTypeOfNode: serializeReturnTypeOfNode
                  };
              }
              function initializeTypeChecker() {
                  ts.forEach(host.getSourceFiles(), function (file) {
                      ts.bindSourceFile(file);
                  });
                  ts.forEach(host.getSourceFiles(), function (file) {
                      if (!ts.isExternalModule(file)) {
                          mergeSymbolTable(globals, file.locals);
                      }
                  });
                  getSymbolLinks(undefinedSymbol).type = undefinedType;
                  getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments");
                  getSymbolLinks(unknownSymbol).type = unknownType;
                  globals[undefinedSymbol.name] = undefinedSymbol;
                  globalArraySymbol = getGlobalTypeSymbol("Array");
                  globalArrayType = getTypeOfGlobalSymbol(globalArraySymbol, 1);
                  globalObjectType = getGlobalType("Object");
                  globalFunctionType = getGlobalType("Function");
                  globalStringType = getGlobalType("String");
                  globalNumberType = getGlobalType("Number");
                  globalBooleanType = getGlobalType("Boolean");
                  globalRegExpType = getGlobalType("RegExp");
                  getGlobalClassDecoratorType = ts.memoize(function () { return getGlobalType("ClassDecorator"); });
                  getGlobalPropertyDecoratorType = ts.memoize(function () { return getGlobalType("PropertyDecorator"); });
                  getGlobalMethodDecoratorType = ts.memoize(function () { return getGlobalType("MethodDecorator"); });
                  getGlobalParameterDecoratorType = ts.memoize(function () { return getGlobalType("ParameterDecorator"); });
                  if (languageVersion >= 2) {
                      globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
                      globalESSymbolType = getGlobalType("Symbol");
                      globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol");
                      globalIterableType = getGlobalType("Iterable", 1);
                  }
                  else {
                      globalTemplateStringsArrayType = unknownType;
                      globalESSymbolType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
                      globalESSymbolConstructorSymbol = undefined;
                  }
                  anyArrayType = createArrayType(anyType);
              }
              function isReservedWordInStrictMode(node) {
                  return (node.parserContextFlags & 1) &&
                      (102 <= node.originalKeywordKind && node.originalKeywordKind <= 110);
              }
              function reportStrictModeGrammarErrorInClassDeclaration(identifier, message, arg0, arg1, arg2) {
                  if (ts.getAncestor(identifier, 202) || ts.getAncestor(identifier, 175)) {
                      return grammarErrorOnNode(identifier, message, arg0);
                  }
                  return false;
              }
              function checkGrammarImportDeclarationNameInStrictMode(node) {
                  if (node.importClause) {
                      var impotClause = node.importClause;
                      if (impotClause.namedBindings) {
                          var nameBindings = impotClause.namedBindings;
                          if (nameBindings.kind === 212) {
                              var name_11 = nameBindings.name;
                              if (isReservedWordInStrictMode(name_11)) {
                                  var nameText = ts.declarationNameToString(name_11);
                                  return grammarErrorOnNode(name_11, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
                              }
                          }
                          else if (nameBindings.kind === 213) {
                              var reportError = false;
                              for (var _i = 0, _a = nameBindings.elements; _i < _a.length; _i++) {
                                  var element = _a[_i];
                                  var name_12 = element.name;
                                  if (isReservedWordInStrictMode(name_12)) {
                                      var nameText = ts.declarationNameToString(name_12);
                                      reportError = reportError || grammarErrorOnNode(name_12, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
                                  }
                              }
                              return reportError;
                          }
                      }
                  }
                  return false;
              }
              function checkGrammarDeclarationNameInStrictMode(node) {
                  var name = node.name;
                  if (name && name.kind === 65 && isReservedWordInStrictMode(name)) {
                      var nameText = ts.declarationNameToString(name);
                      switch (node.kind) {
                          case 130:
                          case 199:
                          case 201:
                          case 129:
                          case 153:
                          case 203:
                          case 204:
                          case 205:
                              return checkGrammarIdentifierInStrictMode(name);
                          case 202:
                              return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode, nameText);
                          case 206:
                              return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
                          case 209:
                              return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
                      }
                  }
                  return false;
              }
              function checkGrammarTypeReferenceInStrictMode(typeName) {
                  if (typeName.kind === 65) {
                      checkGrammarTypeNameInStrictMode(typeName);
                  }
                  else if (typeName.kind === 127) {
                      checkGrammarTypeNameInStrictMode(typeName.right);
                      checkGrammarTypeReferenceInStrictMode(typeName.left);
                  }
              }
              function checkGrammarExpressionWithTypeArgumentsInStrictMode(expression) {
                  if (expression && expression.kind === 65) {
                      return checkGrammarIdentifierInStrictMode(expression);
                  }
                  else if (expression && expression.kind === 156) {
                      checkGrammarExpressionWithTypeArgumentsInStrictMode(expression.expression);
                  }
              }
              function checkGrammarIdentifierInStrictMode(node, nameText) {
                  if (node && node.kind === 65 && isReservedWordInStrictMode(node)) {
                      if (!nameText) {
                          nameText = ts.declarationNameToString(node);
                      }
                      var errorReport = reportStrictModeGrammarErrorInClassDeclaration(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode, nameText) ||
                          grammarErrorOnNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText);
                      return errorReport;
                  }
                  return false;
              }
              function checkGrammarTypeNameInStrictMode(node) {
                  if (node && node.kind === 65 && isReservedWordInStrictMode(node)) {
                      var nameText = ts.declarationNameToString(node);
                      var errorReport = reportStrictModeGrammarErrorInClassDeclaration(node, ts.Diagnostics.Type_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode, nameText) ||
                          grammarErrorOnNode(node, ts.Diagnostics.Type_expected_0_is_a_reserved_word_in_strict_mode, nameText);
                      return errorReport;
                  }
                  return false;
              }
              function checkGrammarDecorators(node) {
                  if (!node.decorators) {
                      return false;
                  }
                  if (!ts.nodeCanBeDecorated(node)) {
                      return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                  }
                  else if (languageVersion < 1) {
                      return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_only_available_when_targeting_ECMAScript_5_and_higher);
                  }
                  else if (node.kind === 137 || node.kind === 138) {
                      var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                      if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                          return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
                      }
                  }
                  return false;
              }
              function checkGrammarModifiers(node) {
                  switch (node.kind) {
                      case 137:
                      case 138:
                      case 136:
                      case 133:
                      case 132:
                      case 135:
                      case 134:
                      case 141:
                      case 202:
                      case 203:
                      case 206:
                      case 205:
                      case 181:
                      case 201:
                      case 204:
                      case 210:
                      case 209:
                      case 216:
                      case 215:
                      case 130:
                          break;
                      default:
                          return false;
                  }
                  if (!node.modifiers) {
                      return;
                  }
                  var lastStatic, lastPrivate, lastProtected, lastDeclare;
                  var flags = 0;
                  for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                      var modifier = _a[_i];
                      switch (modifier.kind) {
                          case 108:
                          case 107:
                          case 106:
                              var text = void 0;
                              if (modifier.kind === 108) {
                                  text = "public";
                              }
                              else if (modifier.kind === 107) {
                                  text = "protected";
                                  lastProtected = modifier;
                              }
                              else {
                                  text = "private";
                                  lastPrivate = modifier;
                              }
                              if (flags & 112) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
                              }
                              else if (flags & 128) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static");
                              }
                              else if (node.parent.kind === 207 || node.parent.kind === 228) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text);
                              }
                              flags |= ts.modifierToFlag(modifier.kind);
                              break;
                          case 109:
                              if (flags & 128) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                              }
                              else if (node.parent.kind === 207 || node.parent.kind === 228) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static");
                              }
                              else if (node.kind === 130) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                              }
                              flags |= 128;
                              lastStatic = modifier;
                              break;
                          case 78:
                              if (flags & 1) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                              }
                              else if (flags & 2) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare");
                              }
                              else if (node.parent.kind === 202) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export");
                              }
                              else if (node.kind === 130) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                              }
                              flags |= 1;
                              break;
                          case 115:
                              if (flags & 2) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                              }
                              else if (node.parent.kind === 202) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
                              }
                              else if (node.kind === 130) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                              }
                              else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 207) {
                                  return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                              }
                              flags |= 2;
                              lastDeclare = modifier;
                              break;
                      }
                  }
                  if (node.kind === 136) {
                      if (flags & 128) {
                          return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                      }
                      else if (flags & 64) {
                          return grammarErrorOnNode(lastProtected, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected");
                      }
                      else if (flags & 32) {
                          return grammarErrorOnNode(lastPrivate, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private");
                      }
                  }
                  else if ((node.kind === 210 || node.kind === 209) && flags & 2) {
                      return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare");
                  }
                  else if (node.kind === 203 && flags & 2) {
                      return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare");
                  }
                  else if (node.kind === 130 && (flags & 112) && ts.isBindingPattern(node.name)) {
                      return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern);
                  }
              }
              function checkGrammarForDisallowedTrailingComma(list) {
                  if (list && list.hasTrailingComma) {
                      var start = list.end - ",".length;
                      var end = list.end;
                      var sourceFile = ts.getSourceFileOfNode(list[0]);
                      return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Trailing_comma_not_allowed);
                  }
              }
              function checkGrammarTypeParameterList(node, typeParameters, file) {
                  if (checkGrammarForDisallowedTrailingComma(typeParameters)) {
                      return true;
                  }
                  if (typeParameters && typeParameters.length === 0) {
                      var start = typeParameters.pos - "<".length;
                      var end = ts.skipTrivia(file.text, typeParameters.end) + ">".length;
                      return grammarErrorAtPos(file, start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty);
                  }
              }
              function checkGrammarParameterList(parameters) {
                  if (checkGrammarForDisallowedTrailingComma(parameters)) {
                      return true;
                  }
                  var seenOptionalParameter = false;
                  var parameterCount = parameters.length;
                  for (var i = 0; i < parameterCount; i++) {
                      var parameter = parameters[i];
                      if (parameter.dotDotDotToken) {
                          if (i !== (parameterCount - 1)) {
                              return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);
                          }
                          if (ts.isBindingPattern(parameter.name)) {
                              return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
                          }
                          if (parameter.questionToken) {
                              return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_rest_parameter_cannot_be_optional);
                          }
                          if (parameter.initializer) {
                              return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer);
                          }
                      }
                      else if (parameter.questionToken || parameter.initializer) {
                          seenOptionalParameter = true;
                          if (parameter.questionToken && parameter.initializer) {
                              return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
                          }
                      }
                      else {
                          if (seenOptionalParameter) {
                              return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter);
                          }
                      }
                  }
              }
              function checkGrammarFunctionLikeDeclaration(node) {
                  var file = ts.getSourceFileOfNode(node);
                  return checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarTypeParameterList(node, node.typeParameters, file) ||
                      checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file);
              }
              function checkGrammarArrowFunction(node, file) {
                  if (node.kind === 164) {
                      var arrowFunction = node;
                      var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line;
                      var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line;
                      if (startLine !== endLine) {
                          return grammarErrorOnNode(arrowFunction.equalsGreaterThanToken, ts.Diagnostics.Line_terminator_not_permitted_before_arrow);
                      }
                  }
                  return false;
              }
              function checkGrammarIndexSignatureParameters(node) {
                  var parameter = node.parameters[0];
                  if (node.parameters.length !== 1) {
                      if (parameter) {
                          return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
                      }
                      else {
                          return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
                      }
                  }
                  if (parameter.dotDotDotToken) {
                      return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);
                  }
                  if (parameter.flags & 499) {
                      return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier);
                  }
                  if (parameter.questionToken) {
                      return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark);
                  }
                  if (parameter.initializer) {
                      return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer);
                  }
                  if (!parameter.type) {
                      return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
                  }
                  if (parameter.type.kind !== 122 && parameter.type.kind !== 120) {
                      return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number);
                  }
                  if (!node.type) {
                      return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
                  }
              }
              function checkGrammarForIndexSignatureModifier(node) {
                  if (node.flags & 499) {
                      grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members);
                  }
              }
              function checkGrammarIndexSignature(node) {
                  return checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarIndexSignatureParameters(node) || checkGrammarForIndexSignatureModifier(node);
              }
              function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) {
                  if (typeArguments && typeArguments.length === 0) {
                      var sourceFile = ts.getSourceFileOfNode(node);
                      var start = typeArguments.pos - "<".length;
                      var end = ts.skipTrivia(sourceFile.text, typeArguments.end) + ">".length;
                      return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty);
                  }
              }
              function checkGrammarTypeArguments(node, typeArguments) {
                  return checkGrammarForDisallowedTrailingComma(typeArguments) ||
                      checkGrammarForAtLeastOneTypeArgument(node, typeArguments);
              }
              function checkGrammarForOmittedArgument(node, arguments) {
                  if (arguments) {
                      var sourceFile = ts.getSourceFileOfNode(node);
                      for (var _i = 0; _i < arguments.length; _i++) {
                          var arg = arguments[_i];
                          if (arg.kind === 176) {
                              return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                          }
                      }
                  }
              }
              function checkGrammarArguments(node, arguments) {
                  return checkGrammarForDisallowedTrailingComma(arguments) ||
                      checkGrammarForOmittedArgument(node, arguments);
              }
              function checkGrammarHeritageClause(node) {
                  var types = node.types;
                  if (checkGrammarForDisallowedTrailingComma(types)) {
                      return true;
                  }
                  if (types && types.length === 0) {
                      var listType = ts.tokenToString(node.token);
                      var sourceFile = ts.getSourceFileOfNode(node);
                      return grammarErrorAtPos(sourceFile, types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType);
                  }
              }
              function checkGrammarClassDeclarationHeritageClauses(node) {
                  var seenExtendsClause = false;
                  var seenImplementsClause = false;
                  if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && node.heritageClauses) {
                      for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                          var heritageClause = _a[_i];
                          if (heritageClause.token === 79) {
                              if (seenExtendsClause) {
                                  return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                              }
                              if (seenImplementsClause) {
                                  return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_must_precede_implements_clause);
                              }
                              if (heritageClause.types.length > 1) {
                                  return grammarErrorOnFirstToken(heritageClause.types[1], ts.Diagnostics.Classes_can_only_extend_a_single_class);
                              }
                              seenExtendsClause = true;
                          }
                          else {
                              ts.Debug.assert(heritageClause.token === 102);
                              if (seenImplementsClause) {
                                  return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                              }
                              seenImplementsClause = true;
                          }
                          checkGrammarHeritageClause(heritageClause);
                      }
                  }
              }
              function checkGrammarInterfaceDeclaration(node) {
                  var seenExtendsClause = false;
                  if (node.heritageClauses) {
                      for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                          var heritageClause = _a[_i];
                          if (heritageClause.token === 79) {
                              if (seenExtendsClause) {
                                  return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                              }
                              seenExtendsClause = true;
                          }
                          else {
                              ts.Debug.assert(heritageClause.token === 102);
                              return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                          }
                          checkGrammarHeritageClause(heritageClause);
                      }
                  }
                  return false;
              }
              function checkGrammarComputedPropertyName(node) {
                  if (node.kind !== 128) {
                      return false;
                  }
                  var computedPropertyName = node;
                  if (computedPropertyName.expression.kind === 170 && computedPropertyName.expression.operatorToken.kind === 23) {
                      return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
                  }
              }
              function checkGrammarForGenerator(node) {
                  if (node.asteriskToken) {
                      return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_currently_supported);
                  }
              }
              function checkGrammarFunctionName(name) {
                  return checkGrammarEvalOrArgumentsInStrictMode(name, name);
              }
              function checkGrammarForInvalidQuestionMark(node, questionToken, message) {
                  if (questionToken) {
                      return grammarErrorOnNode(questionToken, message);
                  }
              }
              function checkGrammarObjectLiteralExpression(node) {
                  var seen = {};
                  var Property = 1;
                  var GetAccessor = 2;
                  var SetAccesor = 4;
                  var GetOrSetAccessor = GetAccessor | SetAccesor;
                  var inStrictMode = (node.parserContextFlags & 1) !== 0;
                  for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                      var prop = _a[_i];
                      var name_13 = prop.name;
                      if (prop.kind === 176 ||
                          name_13.kind === 128) {
                          checkGrammarComputedPropertyName(name_13);
                          continue;
                      }
                      var currentKind = void 0;
                      if (prop.kind === 225 || prop.kind === 226) {
                          checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                          if (name_13.kind === 7) {
                              checkGrammarNumericLiteral(name_13);
                          }
                          currentKind = Property;
                      }
                      else if (prop.kind === 135) {
                          currentKind = Property;
                      }
                      else if (prop.kind === 137) {
                          currentKind = GetAccessor;
                      }
                      else if (prop.kind === 138) {
                          currentKind = SetAccesor;
                      }
                      else {
                          ts.Debug.fail("Unexpected syntax kind:" + prop.kind);
                      }
                      if (!ts.hasProperty(seen, name_13.text)) {
                          seen[name_13.text] = currentKind;
                      }
                      else {
                          var existingKind = seen[name_13.text];
                          if (currentKind === Property && existingKind === Property) {
                              if (inStrictMode) {
                                  grammarErrorOnNode(name_13, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode);
                              }
                          }
                          else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
                              if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
                                  seen[name_13.text] = currentKind | existingKind;
                              }
                              else {
                                  return grammarErrorOnNode(name_13, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
                              }
                          }
                          else {
                              return grammarErrorOnNode(name_13, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
                          }
                      }
                  }
              }
              function checkGrammarForInOrForOfStatement(forInOrOfStatement) {
                  if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                      return true;
                  }
                  if (forInOrOfStatement.initializer.kind === 200) {
                      var variableList = forInOrOfStatement.initializer;
                      if (!checkGrammarVariableDeclarationList(variableList)) {
                          if (variableList.declarations.length > 1) {
                              var diagnostic = forInOrOfStatement.kind === 188
                                  ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                                  : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                              return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                          }
                          var firstDeclaration = variableList.declarations[0];
                          if (firstDeclaration.initializer) {
                              var diagnostic = forInOrOfStatement.kind === 188
                                  ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                                  : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                              return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                          }
                          if (firstDeclaration.type) {
                              var diagnostic = forInOrOfStatement.kind === 188
                                  ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                                  : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                              return grammarErrorOnNode(firstDeclaration, diagnostic);
                          }
                      }
                  }
                  return false;
              }
              function checkGrammarAccessor(accessor) {
                  var kind = accessor.kind;
                  if (languageVersion < 1) {
                      return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                  }
                  else if (ts.isInAmbientContext(accessor)) {
                      return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
                  }
                  else if (accessor.body === undefined) {
                      return grammarErrorAtPos(ts.getSourceFileOfNode(accessor), accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
                  }
                  else if (accessor.typeParameters) {
                      return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
                  }
                  else if (kind === 137 && accessor.parameters.length) {
                      return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters);
                  }
                  else if (kind === 138) {
                      if (accessor.type) {
                          return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                      }
                      else if (accessor.parameters.length !== 1) {
                          return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
                      }
                      else {
                          var parameter = accessor.parameters[0];
                          if (parameter.dotDotDotToken) {
                              return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter);
                          }
                          else if (parameter.flags & 499) {
                              return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                          }
                          else if (parameter.questionToken) {
                              return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);
                          }
                          else if (parameter.initializer) {
                              return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer);
                          }
                      }
                  }
              }
              function checkGrammarForNonSymbolComputedProperty(node, message) {
                  if (node.kind === 128 && !ts.isWellKnownSymbolSyntactically(node.expression)) {
                      return grammarErrorOnNode(node, message);
                  }
              }
              function checkGrammarMethod(node) {
                  if (checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) ||
                      checkGrammarFunctionLikeDeclaration(node) ||
                      checkGrammarForGenerator(node)) {
                      return true;
                  }
                  if (node.parent.kind === 155) {
                      if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) {
                          return true;
                      }
                      else if (node.body === undefined) {
                          return grammarErrorAtPos(getSourceFile(node), node.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
                      }
                  }
                  if (node.parent.kind === 202) {
                      if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) {
                          return true;
                      }
                      if (ts.isInAmbientContext(node)) {
                          return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol);
                      }
                      else if (!node.body) {
                          return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol);
                      }
                  }
                  else if (node.parent.kind === 203) {
                      return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol);
                  }
                  else if (node.parent.kind === 146) {
                      return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol);
                  }
              }
              function isIterationStatement(node, lookInLabeledStatements) {
                  switch (node.kind) {
                      case 187:
                      case 188:
                      case 189:
                      case 185:
                      case 186:
                          return true;
                      case 195:
                          return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
                  }
                  return false;
              }
              function checkGrammarBreakOrContinueStatement(node) {
                  var current = node;
                  while (current) {
                      if (ts.isFunctionLike(current)) {
                          return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                      }
                      switch (current.kind) {
                          case 195:
                              if (node.label && current.label.text === node.label.text) {
                                  var isMisplacedContinueLabel = node.kind === 190
                                      && !isIterationStatement(current.statement, true);
                                  if (isMisplacedContinueLabel) {
                                      return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
                                  }
                                  return false;
                              }
                              break;
                          case 194:
                              if (node.kind === 191 && !node.label) {
                                  return false;
                              }
                              break;
                          default:
                              if (isIterationStatement(current, false) && !node.label) {
                                  return false;
                              }
                              break;
                      }
                      current = current.parent;
                  }
                  if (node.label) {
                      var message = node.kind === 191
                          ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                          : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                      return grammarErrorOnNode(node, message);
                  }
                  else {
                      var message = node.kind === 191
                          ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                          : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                      return grammarErrorOnNode(node, message);
                  }
              }
              function checkGrammarBindingElement(node) {
                  if (node.dotDotDotToken) {
                      var elements = node.parent.elements;
                      if (node !== ts.lastOrUndefined(elements)) {
                          return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
                      }
                      if (node.name.kind === 152 || node.name.kind === 151) {
                          return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
                      }
                      if (node.initializer) {
                          return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                      }
                  }
                  return checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
              }
              function checkGrammarVariableDeclaration(node) {
                  if (node.parent.parent.kind !== 188 && node.parent.parent.kind !== 189) {
                      if (ts.isInAmbientContext(node)) {
                          if (node.initializer) {
                              var equalsTokenLength = "=".length;
                              return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
                          }
                      }
                      else if (!node.initializer) {
                          if (ts.isBindingPattern(node.name) && !ts.isBindingPattern(node.parent)) {
                              return grammarErrorOnNode(node, ts.Diagnostics.A_destructuring_declaration_must_have_an_initializer);
                          }
                          if (ts.isConst(node)) {
                              return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized);
                          }
                      }
                  }
                  var checkLetConstNames = languageVersion >= 2 && (ts.isLet(node) || ts.isConst(node));
                  return (checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name)) ||
                      checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
              }
              function checkGrammarNameInLetOrConstDeclarations(name) {
                  if (name.kind === 65) {
                      if (name.text === "let") {
                          return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                      }
                  }
                  else {
                      var elements = name.elements;
                      for (var _i = 0; _i < elements.length; _i++) {
                          var element = elements[_i];
                          if (element.kind !== 176) {
                              checkGrammarNameInLetOrConstDeclarations(element.name);
                          }
                      }
                  }
              }
              function checkGrammarVariableDeclarationList(declarationList) {
                  var declarations = declarationList.declarations;
                  if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) {
                      return true;
                  }
                  if (!declarationList.declarations.length) {
                      return grammarErrorAtPos(ts.getSourceFileOfNode(declarationList), declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
                  }
              }
              function allowLetAndConstDeclarations(parent) {
                  switch (parent.kind) {
                      case 184:
                      case 185:
                      case 186:
                      case 193:
                      case 187:
                      case 188:
                      case 189:
                          return false;
                      case 195:
                          return allowLetAndConstDeclarations(parent.parent);
                  }
                  return true;
              }
              function checkGrammarForDisallowedLetOrConstStatement(node) {
                  if (!allowLetAndConstDeclarations(node.parent)) {
                      if (ts.isLet(node.declarationList)) {
                          return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);
                      }
                      else if (ts.isConst(node.declarationList)) {
                          return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block);
                      }
                  }
              }
              function isIntegerLiteral(expression) {
                  if (expression.kind === 168) {
                      var unaryExpression = expression;
                      if (unaryExpression.operator === 33 || unaryExpression.operator === 34) {
                          expression = unaryExpression.operand;
                      }
                  }
                  if (expression.kind === 7) {
                      return /^[0-9]+([eE]\+?[0-9]+)?$/.test(expression.text);
                  }
                  return false;
              }
              function checkGrammarEnumDeclaration(enumDecl) {
                  var enumIsConst = (enumDecl.flags & 8192) !== 0;
                  var hasError = false;
                  if (!enumIsConst) {
                      var inConstantEnumMemberSection = true;
                      var inAmbientContext = ts.isInAmbientContext(enumDecl);
                      for (var _i = 0, _a = enumDecl.members; _i < _a.length; _i++) {
                          var node = _a[_i];
                          if (node.name.kind === 128) {
                              hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums);
                          }
                          else if (inAmbientContext) {
                              if (node.initializer && !isIntegerLiteral(node.initializer)) {
                                  hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers) || hasError;
                              }
                          }
                          else if (node.initializer) {
                              inConstantEnumMemberSection = isIntegerLiteral(node.initializer);
                          }
                          else if (!inConstantEnumMemberSection) {
                              hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer) || hasError;
                          }
                      }
                  }
                  return hasError;
              }
              function hasParseDiagnostics(sourceFile) {
                  return sourceFile.parseDiagnostics.length > 0;
              }
              function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) {
                  var sourceFile = ts.getSourceFileOfNode(node);
                  if (!hasParseDiagnostics(sourceFile)) {
                      var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                      diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2));
                      return true;
                  }
              }
              function grammarErrorAtPos(sourceFile, start, length, message, arg0, arg1, arg2) {
                  if (!hasParseDiagnostics(sourceFile)) {
                      diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2));
                      return true;
                  }
              }
              function grammarErrorOnNode(node, message, arg0, arg1, arg2) {
                  var sourceFile = ts.getSourceFileOfNode(node);
                  if (!hasParseDiagnostics(sourceFile)) {
                      diagnostics.add(ts.createDiagnosticForNode(node, message, arg0, arg1, arg2));
                      return true;
                  }
              }
              function checkGrammarEvalOrArgumentsInStrictMode(contextNode, name) {
                  if (name && name.kind === 65) {
                      var identifier = name;
                      if (contextNode && (contextNode.parserContextFlags & 1) && isEvalOrArgumentsIdentifier(identifier)) {
                          var nameText = ts.declarationNameToString(identifier);
                          var reportErrorInClassDeclaration = reportStrictModeGrammarErrorInClassDeclaration(identifier, ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode, nameText);
                          if (!reportErrorInClassDeclaration) {
                              return grammarErrorOnNode(identifier, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, nameText);
                          }
                          return reportErrorInClassDeclaration;
                      }
                  }
              }
              function isEvalOrArgumentsIdentifier(node) {
                  return node.kind === 65 &&
                      (node.text === "eval" || node.text === "arguments");
              }
              function checkGrammarConstructorTypeParameters(node) {
                  if (node.typeParameters) {
                      return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
                  }
              }
              function checkGrammarConstructorTypeAnnotation(node) {
                  if (node.type) {
                      return grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration);
                  }
              }
              function checkGrammarProperty(node) {
                  if (node.parent.kind === 202) {
                      if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) ||
                          checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) {
                          return true;
                      }
                  }
                  else if (node.parent.kind === 203) {
                      if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) {
                          return true;
                      }
                  }
                  else if (node.parent.kind === 146) {
                      if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) {
                          return true;
                      }
                  }
                  if (ts.isInAmbientContext(node) && node.initializer) {
                      return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
                  }
              }
              function checkGrammarTopLevelElementForRequiredDeclareModifier(node) {
                  if (node.kind === 203 ||
                      node.kind === 210 ||
                      node.kind === 209 ||
                      node.kind === 216 ||
                      node.kind === 215 ||
                      (node.flags & 2) ||
                      (node.flags & (1 | 256))) {
                      return false;
                  }
                  return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
              }
              function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
                  for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                      var decl = _a[_i];
                      if (ts.isDeclaration(decl) || decl.kind === 181) {
                          if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                              return true;
                          }
                      }
                  }
              }
              function checkGrammarSourceFile(node) {
                  return ts.isInAmbientContext(node) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node);
              }
              function checkGrammarStatementInAmbientContext(node) {
                  if (ts.isInAmbientContext(node)) {
                      if (isAccessor(node.parent.kind)) {
                          return getNodeLinks(node).hasReportedStatementInAmbientContext = true;
                      }
                      var links = getNodeLinks(node);
                      if (!links.hasReportedStatementInAmbientContext && ts.isFunctionLike(node.parent)) {
                          return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                      }
                      if (node.parent.kind === 180 || node.parent.kind === 207 || node.parent.kind === 228) {
                          var links_1 = getNodeLinks(node.parent);
                          if (!links_1.hasReportedStatementInAmbientContext) {
                              return links_1.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
                          }
                      }
                      else {
                      }
                  }
              }
              function checkGrammarNumericLiteral(node) {
                  if (node.flags & 16384) {
                      if (node.parserContextFlags & 1) {
                          return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode);
                      }
                      else if (languageVersion >= 1) {
                          return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher);
                      }
                  }
              }
              function grammarErrorAfterFirstToken(node, message, arg0, arg1, arg2) {
                  var sourceFile = ts.getSourceFileOfNode(node);
                  if (!hasParseDiagnostics(sourceFile)) {
                      var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                      diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span), 0, message, arg0, arg1, arg2));
                      return true;
                  }
              }
              initializeTypeChecker();
              return checker;
          }
          ts.createTypeChecker = createTypeChecker;
      })(ts || (ts = {}));
      /// <reference path="checker.ts"/>
      var ts;
      (function (ts) {
          function getDeclarationDiagnostics(host, resolver, targetSourceFile) {
              var diagnostics = [];
              var jsFilePath = ts.getOwnEmitOutputFilePath(targetSourceFile, host, ".js");
              emitDeclarations(host, resolver, diagnostics, jsFilePath, targetSourceFile);
              return diagnostics;
          }
          ts.getDeclarationDiagnostics = getDeclarationDiagnostics;
          function emitDeclarations(host, resolver, diagnostics, jsFilePath, root) {
              var newLine = host.getNewLine();
              var compilerOptions = host.getCompilerOptions();
              var languageVersion = compilerOptions.target || 0;
              var write;
              var writeLine;
              var increaseIndent;
              var decreaseIndent;
              var writeTextOfNode;
              var writer = createAndSetNewTextWriterWithSymbolWriter();
              var enclosingDeclaration;
              var currentSourceFile;
              var reportedDeclarationError = false;
              var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { } : writeJsDocComments;
              var emit = compilerOptions.stripInternal ? stripInternal : emitNode;
              var moduleElementDeclarationEmitInfo = [];
              var asynchronousSubModuleDeclarationEmitInfo;
              var referencePathsOutput = "";
              if (root) {
                  if (!compilerOptions.noResolve) {
                      var addedGlobalFileReference = false;
                      ts.forEach(root.referencedFiles, function (fileReference) {
                          var referencedFile = ts.tryResolveScriptReference(host, root, fileReference);
                          if (referencedFile && ((referencedFile.flags & 2048) ||
                              ts.shouldEmitToOwnFile(referencedFile, compilerOptions) ||
                              !addedGlobalFileReference)) {
                              writeReferencePath(referencedFile);
                              if (!ts.isExternalModuleOrDeclarationFile(referencedFile)) {
                                  addedGlobalFileReference = true;
                              }
                          }
                      });
                  }
                  emitSourceFile(root);
                  if (moduleElementDeclarationEmitInfo.length) {
                      var oldWriter = writer;
                      ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) {
                          if (aliasEmitInfo.isVisible) {
                              ts.Debug.assert(aliasEmitInfo.node.kind === 210);
                              createAndSetNewTextWriterWithSymbolWriter();
                              ts.Debug.assert(aliasEmitInfo.indent === 0);
                              writeImportDeclaration(aliasEmitInfo.node);
                              aliasEmitInfo.asynchronousOutput = writer.getText();
                          }
                      });
                      setWriter(oldWriter);
                  }
              }
              else {
                  var emittedReferencedFiles = [];
                  ts.forEach(host.getSourceFiles(), function (sourceFile) {
                      if (!ts.isExternalModuleOrDeclarationFile(sourceFile)) {
                          if (!compilerOptions.noResolve) {
                              ts.forEach(sourceFile.referencedFiles, function (fileReference) {
                                  var referencedFile = ts.tryResolveScriptReference(host, sourceFile, fileReference);
                                  if (referencedFile && (ts.isExternalModuleOrDeclarationFile(referencedFile) &&
                                      !ts.contains(emittedReferencedFiles, referencedFile))) {
                                      writeReferencePath(referencedFile);
                                      emittedReferencedFiles.push(referencedFile);
                                  }
                              });
                          }
                          emitSourceFile(sourceFile);
                      }
                  });
              }
              return {
                  reportedDeclarationError: reportedDeclarationError,
                  moduleElementDeclarationEmitInfo: moduleElementDeclarationEmitInfo,
                  synchronousDeclarationOutput: writer.getText(),
                  referencePathsOutput: referencePathsOutput
              };
              function hasInternalAnnotation(range) {
                  var text = currentSourceFile.text;
                  var comment = text.substring(range.pos, range.end);
                  return comment.indexOf("@internal") >= 0;
              }
              function stripInternal(node) {
                  if (node) {
                      var leadingCommentRanges = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
                      if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) {
                          return;
                      }
                      emitNode(node);
                  }
              }
              function createAndSetNewTextWriterWithSymbolWriter() {
                  var writer = ts.createTextWriter(newLine);
                  writer.trackSymbol = trackSymbol;
                  writer.writeKeyword = writer.write;
                  writer.writeOperator = writer.write;
                  writer.writePunctuation = writer.write;
                  writer.writeSpace = writer.write;
                  writer.writeStringLiteral = writer.writeLiteral;
                  writer.writeParameter = writer.write;
                  writer.writeSymbol = writer.write;
                  setWriter(writer);
                  return writer;
              }
              function setWriter(newWriter) {
                  writer = newWriter;
                  write = newWriter.write;
                  writeTextOfNode = newWriter.writeTextOfNode;
                  writeLine = newWriter.writeLine;
                  increaseIndent = newWriter.increaseIndent;
                  decreaseIndent = newWriter.decreaseIndent;
              }
              function writeAsynchronousModuleElements(nodes) {
                  var oldWriter = writer;
                  ts.forEach(nodes, function (declaration) {
                      var nodeToCheck;
                      if (declaration.kind === 199) {
                          nodeToCheck = declaration.parent.parent;
                      }
                      else if (declaration.kind === 213 || declaration.kind === 214 || declaration.kind === 211) {
                          ts.Debug.fail("We should be getting ImportDeclaration instead to write");
                      }
                      else {
                          nodeToCheck = declaration;
                      }
                      var moduleElementEmitInfo = ts.forEach(moduleElementDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; });
                      if (!moduleElementEmitInfo && asynchronousSubModuleDeclarationEmitInfo) {
                          moduleElementEmitInfo = ts.forEach(asynchronousSubModuleDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; });
                      }
                      if (moduleElementEmitInfo) {
                          if (moduleElementEmitInfo.node.kind === 210) {
                              moduleElementEmitInfo.isVisible = true;
                          }
                          else {
                              createAndSetNewTextWriterWithSymbolWriter();
                              for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) {
                                  increaseIndent();
                              }
                              if (nodeToCheck.kind === 206) {
                                  ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined);
                                  asynchronousSubModuleDeclarationEmitInfo = [];
                              }
                              writeModuleElement(nodeToCheck);
                              if (nodeToCheck.kind === 206) {
                                  moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo;
                                  asynchronousSubModuleDeclarationEmitInfo = undefined;
                              }
                              moduleElementEmitInfo.asynchronousOutput = writer.getText();
                          }
                      }
                  });
                  setWriter(oldWriter);
              }
              function handleSymbolAccessibilityError(symbolAccesibilityResult) {
                  if (symbolAccesibilityResult.accessibility === 0) {
                      if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) {
                          writeAsynchronousModuleElements(symbolAccesibilityResult.aliasesToMakeVisible);
                      }
                  }
                  else {
                      reportedDeclarationError = true;
                      var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccesibilityResult);
                      if (errorInfo) {
                          if (errorInfo.typeName) {
                              diagnostics.push(ts.createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
                          }
                          else {
                              diagnostics.push(ts.createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
                          }
                      }
                  }
              }
              function trackSymbol(symbol, enclosingDeclaration, meaning) {
                  handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning));
              }
              function writeTypeOfDeclaration(declaration, type, getSymbolAccessibilityDiagnostic) {
                  writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
                  write(": ");
                  if (type) {
                      emitType(type);
                  }
                  else {
                      resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2, writer);
                  }
              }
              function writeReturnTypeAtSignature(signature, getSymbolAccessibilityDiagnostic) {
                  writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
                  write(": ");
                  if (signature.type) {
                      emitType(signature.type);
                  }
                  else {
                      resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 2, writer);
                  }
              }
              function emitLines(nodes) {
                  for (var _i = 0; _i < nodes.length; _i++) {
                      var node = nodes[_i];
                      emit(node);
                  }
              }
              function emitSeparatedList(nodes, separator, eachNodeEmitFn, canEmitFn) {
                  var currentWriterPos = writer.getTextPos();
                  for (var _i = 0; _i < nodes.length; _i++) {
                      var node = nodes[_i];
                      if (!canEmitFn || canEmitFn(node)) {
                          if (currentWriterPos !== writer.getTextPos()) {
                              write(separator);
                          }
                          currentWriterPos = writer.getTextPos();
                          eachNodeEmitFn(node);
                      }
                  }
              }
              function emitCommaList(nodes, eachNodeEmitFn, canEmitFn) {
                  emitSeparatedList(nodes, ", ", eachNodeEmitFn, canEmitFn);
              }
              function writeJsDocComments(declaration) {
                  if (declaration) {
                      var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile);
                      ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, declaration, jsDocComments);
                      ts.emitComments(currentSourceFile, writer, jsDocComments, true, newLine, ts.writeCommentRange);
                  }
              }
              function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type, getSymbolAccessibilityDiagnostic) {
                  writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
                  emitType(type);
              }
              function emitType(type) {
                  switch (type.kind) {
                      case 112:
                      case 122:
                      case 120:
                      case 113:
                      case 123:
                      case 99:
                      case 8:
                          return writeTextOfNode(currentSourceFile, type);
                      case 177:
                          return emitExpressionWithTypeArguments(type);
                      case 142:
                          return emitTypeReference(type);
                      case 145:
                          return emitTypeQuery(type);
                      case 147:
                          return emitArrayType(type);
                      case 148:
                          return emitTupleType(type);
                      case 149:
                          return emitUnionType(type);
                      case 150:
                          return emitParenType(type);
                      case 143:
                      case 144:
                          return emitSignatureDeclarationWithJsDocComments(type);
                      case 146:
                          return emitTypeLiteral(type);
                      case 65:
                          return emitEntityName(type);
                      case 127:
                          return emitEntityName(type);
                  }
                  function emitEntityName(entityName) {
                      var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 209 ? entityName.parent : enclosingDeclaration);
                      handleSymbolAccessibilityError(visibilityResult);
                      writeEntityName(entityName);
                      function writeEntityName(entityName) {
                          if (entityName.kind === 65) {
                              writeTextOfNode(currentSourceFile, entityName);
                          }
                          else {
                              var left = entityName.kind === 127 ? entityName.left : entityName.expression;
                              var right = entityName.kind === 127 ? entityName.right : entityName.name;
                              writeEntityName(left);
                              write(".");
                              writeTextOfNode(currentSourceFile, right);
                          }
                      }
                  }
                  function emitExpressionWithTypeArguments(node) {
                      if (ts.isSupportedExpressionWithTypeArguments(node)) {
                          ts.Debug.assert(node.expression.kind === 65 || node.expression.kind === 156);
                          emitEntityName(node.expression);
                          if (node.typeArguments) {
                              write("<");
                              emitCommaList(node.typeArguments, emitType);
                              write(">");
                          }
                      }
                  }
                  function emitTypeReference(type) {
                      emitEntityName(type.typeName);
                      if (type.typeArguments) {
                          write("<");
                          emitCommaList(type.typeArguments, emitType);
                          write(">");
                      }
                  }
                  function emitTypeQuery(type) {
                      write("typeof ");
                      emitEntityName(type.exprName);
                  }
                  function emitArrayType(type) {
                      emitType(type.elementType);
                      write("[]");
                  }
                  function emitTupleType(type) {
                      write("[");
                      emitCommaList(type.elementTypes, emitType);
                      write("]");
                  }
                  function emitUnionType(type) {
                      emitSeparatedList(type.types, " | ", emitType);
                  }
                  function emitParenType(type) {
                      write("(");
                      emitType(type.type);
                      write(")");
                  }
                  function emitTypeLiteral(type) {
                      write("{");
                      if (type.members.length) {
                          writeLine();
                          increaseIndent();
                          emitLines(type.members);
                          decreaseIndent();
                      }
                      write("}");
                  }
              }
              function emitSourceFile(node) {
                  currentSourceFile = node;
                  enclosingDeclaration = node;
                  emitLines(node.statements);
              }
              function getExportDefaultTempVariableName() {
                  var baseName = "_default";
                  if (!ts.hasProperty(currentSourceFile.identifiers, baseName)) {
                      return baseName;
                  }
                  var count = 0;
                  while (true) {
                      var name_14 = baseName + "_" + (++count);
                      if (!ts.hasProperty(currentSourceFile.identifiers, name_14)) {
                          return name_14;
                      }
                  }
              }
              function emitExportAssignment(node) {
                  if (node.expression.kind === 65) {
                      write(node.isExportEquals ? "export = " : "export default ");
                      writeTextOfNode(currentSourceFile, node.expression);
                  }
                  else {
                      var tempVarName = getExportDefaultTempVariableName();
                      write("declare var ");
                      write(tempVarName);
                      write(": ");
                      writer.getSymbolAccessibilityDiagnostic = getDefaultExportAccessibilityDiagnostic;
                      resolver.writeTypeOfExpression(node.expression, enclosingDeclaration, 2, writer);
                      write(";");
                      writeLine();
                      write(node.isExportEquals ? "export = " : "export default ");
                      write(tempVarName);
                  }
                  write(";");
                  writeLine();
                  if (node.expression.kind === 65) {
                      var nodes = resolver.collectLinkedAliases(node.expression);
                      writeAsynchronousModuleElements(nodes);
                  }
                  function getDefaultExportAccessibilityDiagnostic(diagnostic) {
                      return {
                          diagnosticMessage: ts.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0,
                          errorNode: node
                      };
                  }
              }
              function isModuleElementVisible(node) {
                  return resolver.isDeclarationVisible(node);
              }
              function emitModuleElement(node, isModuleElementVisible) {
                  if (isModuleElementVisible) {
                      writeModuleElement(node);
                  }
                  else if (node.kind === 209 ||
                      (node.parent.kind === 228 && ts.isExternalModule(currentSourceFile))) {
                      var isVisible;
                      if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 228) {
                          asynchronousSubModuleDeclarationEmitInfo.push({
                              node: node,
                              outputPos: writer.getTextPos(),
                              indent: writer.getIndent(),
                              isVisible: isVisible
                          });
                      }
                      else {
                          if (node.kind === 210) {
                              var importDeclaration = node;
                              if (importDeclaration.importClause) {
                                  isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) ||
                                      isVisibleNamedBinding(importDeclaration.importClause.namedBindings);
                              }
                          }
                          moduleElementDeclarationEmitInfo.push({
                              node: node,
                              outputPos: writer.getTextPos(),
                              indent: writer.getIndent(),
                              isVisible: isVisible
                          });
                      }
                  }
              }
              function writeModuleElement(node) {
                  switch (node.kind) {
                      case 201:
                          return writeFunctionDeclaration(node);
                      case 181:
                          return writeVariableStatement(node);
                      case 203:
                          return writeInterfaceDeclaration(node);
                      case 202:
                          return writeClassDeclaration(node);
                      case 204:
                          return writeTypeAliasDeclaration(node);
                      case 205:
                          return writeEnumDeclaration(node);
                      case 206:
                          return writeModuleDeclaration(node);
                      case 209:
                          return writeImportEqualsDeclaration(node);
                      case 210:
                          return writeImportDeclaration(node);
                      default:
                          ts.Debug.fail("Unknown symbol kind");
                  }
              }
              function emitModuleElementDeclarationFlags(node) {
                  if (node.parent === currentSourceFile) {
                      if (node.flags & 1) {
                          write("export ");
                      }
                      if (node.flags & 256) {
                          write("default ");
                      }
                      else if (node.kind !== 203) {
                          write("declare ");
                      }
                  }
              }
              function emitClassMemberDeclarationFlags(node) {
                  if (node.flags & 32) {
                      write("private ");
                  }
                  else if (node.flags & 64) {
                      write("protected ");
                  }
                  if (node.flags & 128) {
                      write("static ");
                  }
              }
              function writeImportEqualsDeclaration(node) {
                  emitJsDocComments(node);
                  if (node.flags & 1) {
                      write("export ");
                  }
                  write("import ");
                  writeTextOfNode(currentSourceFile, node.name);
                  write(" = ");
                  if (ts.isInternalModuleImportEqualsDeclaration(node)) {
                      emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.moduleReference, getImportEntityNameVisibilityError);
                      write(";");
                  }
                  else {
                      write("require(");
                      writeTextOfNode(currentSourceFile, ts.getExternalModuleImportEqualsDeclarationExpression(node));
                      write(");");
                  }
                  writer.writeLine();
                  function getImportEntityNameVisibilityError(symbolAccesibilityResult) {
                      return {
                          diagnosticMessage: ts.Diagnostics.Import_declaration_0_is_using_private_name_1,
                          errorNode: node,
                          typeName: node.name
                      };
                  }
              }
              function isVisibleNamedBinding(namedBindings) {
                  if (namedBindings) {
                      if (namedBindings.kind === 212) {
                          return resolver.isDeclarationVisible(namedBindings);
                      }
                      else {
                          return ts.forEach(namedBindings.elements, function (namedImport) { return resolver.isDeclarationVisible(namedImport); });
                      }
                  }
              }
              function writeImportDeclaration(node) {
                  if (!node.importClause && !(node.flags & 1)) {
                      return;
                  }
                  emitJsDocComments(node);
                  if (node.flags & 1) {
                      write("export ");
                  }
                  write("import ");
                  if (node.importClause) {
                      var currentWriterPos = writer.getTextPos();
                      if (node.importClause.name && resolver.isDeclarationVisible(node.importClause)) {
                          writeTextOfNode(currentSourceFile, node.importClause.name);
                      }
                      if (node.importClause.namedBindings && isVisibleNamedBinding(node.importClause.namedBindings)) {
                          if (currentWriterPos !== writer.getTextPos()) {
                              write(", ");
                          }
                          if (node.importClause.namedBindings.kind === 212) {
                              write("* as ");
                              writeTextOfNode(currentSourceFile, node.importClause.namedBindings.name);
                          }
                          else {
                              write("{ ");
                              emitCommaList(node.importClause.namedBindings.elements, emitImportOrExportSpecifier, resolver.isDeclarationVisible);
                              write(" }");
                          }
                      }
                      write(" from ");
                  }
                  writeTextOfNode(currentSourceFile, node.moduleSpecifier);
                  write(";");
                  writer.writeLine();
              }
              function emitImportOrExportSpecifier(node) {
                  if (node.propertyName) {
                      writeTextOfNode(currentSourceFile, node.propertyName);
                      write(" as ");
                  }
                  writeTextOfNode(currentSourceFile, node.name);
              }
              function emitExportSpecifier(node) {
                  emitImportOrExportSpecifier(node);
                  var nodes = resolver.collectLinkedAliases(node.propertyName || node.name);
                  writeAsynchronousModuleElements(nodes);
              }
              function emitExportDeclaration(node) {
                  emitJsDocComments(node);
                  write("export ");
                  if (node.exportClause) {
                      write("{ ");
                      emitCommaList(node.exportClause.elements, emitExportSpecifier);
                      write(" }");
                  }
                  else {
                      write("*");
                  }
                  if (node.moduleSpecifier) {
                      write(" from ");
                      writeTextOfNode(currentSourceFile, node.moduleSpecifier);
                  }
                  write(";");
                  writer.writeLine();
              }
              function writeModuleDeclaration(node) {
                  emitJsDocComments(node);
                  emitModuleElementDeclarationFlags(node);
                  write("module ");
                  writeTextOfNode(currentSourceFile, node.name);
                  while (node.body.kind !== 207) {
                      node = node.body;
                      write(".");
                      writeTextOfNode(currentSourceFile, node.name);
                  }
                  var prevEnclosingDeclaration = enclosingDeclaration;
                  enclosingDeclaration = node;
                  write(" {");
                  writeLine();
                  increaseIndent();
                  emitLines(node.body.statements);
                  decreaseIndent();
                  write("}");
                  writeLine();
                  enclosingDeclaration = prevEnclosingDeclaration;
              }
              function writeTypeAliasDeclaration(node) {
                  emitJsDocComments(node);
                  emitModuleElementDeclarationFlags(node);
                  write("type ");
                  writeTextOfNode(currentSourceFile, node.name);
                  write(" = ");
                  emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.type, getTypeAliasDeclarationVisibilityError);
                  write(";");
                  writeLine();
                  function getTypeAliasDeclarationVisibilityError(symbolAccesibilityResult) {
                      return {
                          diagnosticMessage: ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,
                          errorNode: node.type,
                          typeName: node.name
                      };
                  }
              }
              function writeEnumDeclaration(node) {
                  emitJsDocComments(node);
                  emitModuleElementDeclarationFlags(node);
                  if (ts.isConst(node)) {
                      write("const ");
                  }
                  write("enum ");
                  writeTextOfNode(currentSourceFile, node.name);
                  write(" {");
                  writeLine();
                  increaseIndent();
                  emitLines(node.members);
                  decreaseIndent();
                  write("}");
                  writeLine();
              }
              function emitEnumMemberDeclaration(node) {
                  emitJsDocComments(node);
                  writeTextOfNode(currentSourceFile, node.name);
                  var enumMemberValue = resolver.getConstantValue(node);
                  if (enumMemberValue !== undefined) {
                      write(" = ");
                      write(enumMemberValue.toString());
                  }
                  write(",");
                  writeLine();
              }
              function isPrivateMethodTypeParameter(node) {
                  return node.parent.kind === 135 && (node.parent.flags & 32);
              }
              function emitTypeParameters(typeParameters) {
                  function emitTypeParameter(node) {
                      increaseIndent();
                      emitJsDocComments(node);
                      decreaseIndent();
                      writeTextOfNode(currentSourceFile, node.name);
                      if (node.constraint && !isPrivateMethodTypeParameter(node)) {
                          write(" extends ");
                          if (node.parent.kind === 143 ||
                              node.parent.kind === 144 ||
                              (node.parent.parent && node.parent.parent.kind === 146)) {
                              ts.Debug.assert(node.parent.kind === 135 ||
                                  node.parent.kind === 134 ||
                                  node.parent.kind === 143 ||
                                  node.parent.kind === 144 ||
                                  node.parent.kind === 139 ||
                                  node.parent.kind === 140);
                              emitType(node.constraint);
                          }
                          else {
                              emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.constraint, getTypeParameterConstraintVisibilityError);
                          }
                      }
                      function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) {
                          var diagnosticMessage;
                          switch (node.parent.kind) {
                              case 202:
                                  diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                                  break;
                              case 203:
                                  diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                                  break;
                              case 140:
                                  diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                                  break;
                              case 139:
                                  diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                                  break;
                              case 135:
                              case 134:
                                  if (node.parent.flags & 128) {
                                      diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                                  }
                                  else if (node.parent.parent.kind === 202) {
                                      diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                                  }
                                  else {
                                      diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                                  }
                                  break;
                              case 201:
                                  diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                                  break;
                              default:
                                  ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind);
                          }
                          return {
                              diagnosticMessage: diagnosticMessage,
                              errorNode: node,
                              typeName: node.name
                          };
                      }
                  }
                  if (typeParameters) {
                      write("<");
                      emitCommaList(typeParameters, emitTypeParameter);
                      write(">");
                  }
              }
              function emitHeritageClause(typeReferences, isImplementsList) {
                  if (typeReferences) {
                      write(isImplementsList ? " implements " : " extends ");
                      emitCommaList(typeReferences, emitTypeOfTypeReference);
                  }
                  function emitTypeOfTypeReference(node) {
                      if (ts.isSupportedExpressionWithTypeArguments(node)) {
                          emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError);
                      }
                      function getHeritageClauseVisibilityError(symbolAccesibilityResult) {
                          var diagnosticMessage;
                          if (node.parent.parent.kind === 202) {
                              diagnosticMessage = isImplementsList ?
                                  ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                                  ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1;
                          }
                          else {
                              diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1;
                          }
                          return {
                              diagnosticMessage: diagnosticMessage,
                              errorNode: node,
                              typeName: node.parent.parent.name
                          };
                      }
                  }
              }
              function writeClassDeclaration(node) {
                  function emitParameterProperties(constructorDeclaration) {
                      if (constructorDeclaration) {
                          ts.forEach(constructorDeclaration.parameters, function (param) {
                              if (param.flags & 112) {
                                  emitPropertyDeclaration(param);
                              }
                          });
                      }
                  }
                  emitJsDocComments(node);
                  emitModuleElementDeclarationFlags(node);
                  write("class ");
                  writeTextOfNode(currentSourceFile, node.name);
                  var prevEnclosingDeclaration = enclosingDeclaration;
                  enclosingDeclaration = node;
                  emitTypeParameters(node.typeParameters);
                  var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
                  if (baseTypeNode) {
                      emitHeritageClause([baseTypeNode], false);
                  }
                  emitHeritageClause(ts.getClassImplementsHeritageClauseElements(node), true);
                  write(" {");
                  writeLine();
                  increaseIndent();
                  emitParameterProperties(ts.getFirstConstructorWithBody(node));
                  emitLines(node.members);
                  decreaseIndent();
                  write("}");
                  writeLine();
                  enclosingDeclaration = prevEnclosingDeclaration;
              }
              function writeInterfaceDeclaration(node) {
                  emitJsDocComments(node);
                  emitModuleElementDeclarationFlags(node);
                  write("interface ");
                  writeTextOfNode(currentSourceFile, node.name);
                  var prevEnclosingDeclaration = enclosingDeclaration;
                  enclosingDeclaration = node;
                  emitTypeParameters(node.typeParameters);
                  emitHeritageClause(ts.getInterfaceBaseTypeNodes(node), false);
                  write(" {");
                  writeLine();
                  increaseIndent();
                  emitLines(node.members);
                  decreaseIndent();
                  write("}");
                  writeLine();
                  enclosingDeclaration = prevEnclosingDeclaration;
              }
              function emitPropertyDeclaration(node) {
                  if (ts.hasDynamicName(node)) {
                      return;
                  }
                  emitJsDocComments(node);
                  emitClassMemberDeclarationFlags(node);
                  emitVariableDeclaration(node);
                  write(";");
                  writeLine();
              }
              function emitVariableDeclaration(node) {
                  if (node.kind !== 199 || resolver.isDeclarationVisible(node)) {
                      if (ts.isBindingPattern(node.name)) {
                          emitBindingPattern(node.name);
                      }
                      else {
                          writeTextOfNode(currentSourceFile, node.name);
                          if ((node.kind === 133 || node.kind === 132) && ts.hasQuestionToken(node)) {
                              write("?");
                          }
                          if ((node.kind === 133 || node.kind === 132) && node.parent.kind === 146) {
                              emitTypeOfVariableDeclarationFromTypeLiteral(node);
                          }
                          else if (!(node.flags & 32)) {
                              writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError);
                          }
                      }
                  }
                  function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult) {
                      if (node.kind === 199) {
                          return symbolAccesibilityResult.errorModuleName ?
                              symbolAccesibilityResult.accessibility === 2 ?
                                  ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                  ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 :
                              ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1;
                      }
                      else if (node.kind === 133 || node.kind === 132) {
                          if (node.flags & 128) {
                              return symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                      ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                          }
                          else if (node.parent.kind === 202) {
                              return symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                      ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1;
                          }
                          else {
                              return symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1;
                          }
                      }
                  }
                  function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) {
                      var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
                      return diagnosticMessage !== undefined ? {
                          diagnosticMessage: diagnosticMessage,
                          errorNode: node,
                          typeName: node.name
                      } : undefined;
                  }
                  function emitBindingPattern(bindingPattern) {
                      var elements = [];
                      for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) {
                          var element = _a[_i];
                          if (element.kind !== 176) {
                              elements.push(element);
                          }
                      }
                      emitCommaList(elements, emitBindingElement);
                  }
                  function emitBindingElement(bindingElement) {
                      function getBindingElementTypeVisibilityError(symbolAccesibilityResult) {
                          var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
                          return diagnosticMessage !== undefined ? {
                              diagnosticMessage: diagnosticMessage,
                              errorNode: bindingElement,
                              typeName: bindingElement.name
                          } : undefined;
                      }
                      if (bindingElement.name) {
                          if (ts.isBindingPattern(bindingElement.name)) {
                              emitBindingPattern(bindingElement.name);
                          }
                          else {
                              writeTextOfNode(currentSourceFile, bindingElement.name);
                              writeTypeOfDeclaration(bindingElement, undefined, getBindingElementTypeVisibilityError);
                          }
                      }
                  }
              }
              function emitTypeOfVariableDeclarationFromTypeLiteral(node) {
                  if (node.type) {
                      write(": ");
                      emitType(node.type);
                  }
              }
              function isVariableStatementVisible(node) {
                  return ts.forEach(node.declarationList.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); });
              }
              function writeVariableStatement(node) {
                  emitJsDocComments(node);
                  emitModuleElementDeclarationFlags(node);
                  if (ts.isLet(node.declarationList)) {
                      write("let ");
                  }
                  else if (ts.isConst(node.declarationList)) {
                      write("const ");
                  }
                  else {
                      write("var ");
                  }
                  emitCommaList(node.declarationList.declarations, emitVariableDeclaration, resolver.isDeclarationVisible);
                  write(";");
                  writeLine();
              }
              function emitAccessorDeclaration(node) {
                  if (ts.hasDynamicName(node)) {
                      return;
                  }
                  var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                  var accessorWithTypeAnnotation;
                  if (node === accessors.firstAccessor) {
                      emitJsDocComments(accessors.getAccessor);
                      emitJsDocComments(accessors.setAccessor);
                      emitClassMemberDeclarationFlags(node);
                      writeTextOfNode(currentSourceFile, node.name);
                      if (!(node.flags & 32)) {
                          accessorWithTypeAnnotation = node;
                          var type = getTypeAnnotationFromAccessor(node);
                          if (!type) {
                              var anotherAccessor = node.kind === 137 ? accessors.setAccessor : accessors.getAccessor;
                              type = getTypeAnnotationFromAccessor(anotherAccessor);
                              if (type) {
                                  accessorWithTypeAnnotation = anotherAccessor;
                              }
                          }
                          writeTypeOfDeclaration(node, type, getAccessorDeclarationTypeVisibilityError);
                      }
                      write(";");
                      writeLine();
                  }
                  function getTypeAnnotationFromAccessor(accessor) {
                      if (accessor) {
                          return accessor.kind === 137
                              ? accessor.type
                              : accessor.parameters.length > 0
                                  ? accessor.parameters[0].type
                                  : undefined;
                      }
                  }
                  function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) {
                      var diagnosticMessage;
                      if (accessorWithTypeAnnotation.kind === 138) {
                          if (accessorWithTypeAnnotation.parent.flags & 128) {
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1;
                          }
                          else {
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1;
                          }
                          return {
                              diagnosticMessage: diagnosticMessage,
                              errorNode: accessorWithTypeAnnotation.parameters[0],
                              typeName: accessorWithTypeAnnotation.name
                          };
                      }
                      else {
                          if (accessorWithTypeAnnotation.flags & 128) {
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                      ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                                  ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0;
                          }
                          else {
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                      ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                                  ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0;
                          }
                          return {
                              diagnosticMessage: diagnosticMessage,
                              errorNode: accessorWithTypeAnnotation.name,
                              typeName: undefined
                          };
                      }
                  }
              }
              function writeFunctionDeclaration(node) {
                  if (ts.hasDynamicName(node)) {
                      return;
                  }
                  if (!resolver.isImplementationOfOverload(node)) {
                      emitJsDocComments(node);
                      if (node.kind === 201) {
                          emitModuleElementDeclarationFlags(node);
                      }
                      else if (node.kind === 135) {
                          emitClassMemberDeclarationFlags(node);
                      }
                      if (node.kind === 201) {
                          write("function ");
                          writeTextOfNode(currentSourceFile, node.name);
                      }
                      else if (node.kind === 136) {
                          write("constructor");
                      }
                      else {
                          writeTextOfNode(currentSourceFile, node.name);
                          if (ts.hasQuestionToken(node)) {
                              write("?");
                          }
                      }
                      emitSignatureDeclaration(node);
                  }
              }
              function emitSignatureDeclarationWithJsDocComments(node) {
                  emitJsDocComments(node);
                  emitSignatureDeclaration(node);
              }
              function emitSignatureDeclaration(node) {
                  if (node.kind === 140 || node.kind === 144) {
                      write("new ");
                  }
                  emitTypeParameters(node.typeParameters);
                  if (node.kind === 141) {
                      write("[");
                  }
                  else {
                      write("(");
                  }
                  var prevEnclosingDeclaration = enclosingDeclaration;
                  enclosingDeclaration = node;
                  emitCommaList(node.parameters, emitParameterDeclaration);
                  if (node.kind === 141) {
                      write("]");
                  }
                  else {
                      write(")");
                  }
                  var isFunctionTypeOrConstructorType = node.kind === 143 || node.kind === 144;
                  if (isFunctionTypeOrConstructorType || node.parent.kind === 146) {
                      if (node.type) {
                          write(isFunctionTypeOrConstructorType ? " => " : ": ");
                          emitType(node.type);
                      }
                  }
                  else if (node.kind !== 136 && !(node.flags & 32)) {
                      writeReturnTypeAtSignature(node, getReturnTypeVisibilityError);
                  }
                  enclosingDeclaration = prevEnclosingDeclaration;
                  if (!isFunctionTypeOrConstructorType) {
                      write(";");
                      writeLine();
                  }
                  function getReturnTypeVisibilityError(symbolAccesibilityResult) {
                      var diagnosticMessage;
                      switch (node.kind) {
                          case 140:
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                                  ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                              break;
                          case 139:
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                                  ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                              break;
                          case 141:
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                                  ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                              break;
                          case 135:
                          case 134:
                              if (node.flags & 128) {
                                  diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                      symbolAccesibilityResult.accessibility === 2 ?
                                          ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                          ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                                      ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                              }
                              else if (node.parent.kind === 202) {
                                  diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                      symbolAccesibilityResult.accessibility === 2 ?
                                          ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                          ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                                      ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0;
                              }
                              else {
                                  diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                      ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                                      ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                              }
                              break;
                          case 201:
                              diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                      ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 :
                                  ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;
                              break;
                          default:
                              ts.Debug.fail("This is unknown kind for signature: " + node.kind);
                      }
                      return {
                          diagnosticMessage: diagnosticMessage,
                          errorNode: node.name || node
                      };
                  }
              }
              function emitParameterDeclaration(node) {
                  increaseIndent();
                  emitJsDocComments(node);
                  if (node.dotDotDotToken) {
                      write("...");
                  }
                  if (ts.isBindingPattern(node.name)) {
                      emitBindingPattern(node.name);
                  }
                  else {
                      writeTextOfNode(currentSourceFile, node.name);
                  }
                  if (node.initializer || ts.hasQuestionToken(node)) {
                      write("?");
                  }
                  decreaseIndent();
                  if (node.parent.kind === 143 ||
                      node.parent.kind === 144 ||
                      node.parent.parent.kind === 146) {
                      emitTypeOfVariableDeclarationFromTypeLiteral(node);
                  }
                  else if (!(node.parent.flags & 32)) {
                      writeTypeOfDeclaration(node, node.type, getParameterDeclarationTypeVisibilityError);
                  }
                  function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) {
                      var diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
                      return diagnosticMessage !== undefined ? {
                          diagnosticMessage: diagnosticMessage,
                          errorNode: node,
                          typeName: node.name
                      } : undefined;
                  }
                  function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult) {
                      switch (node.parent.kind) {
                          case 136:
                              return symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                      ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
                          case 140:
                              return symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                          case 139:
                              return symbolAccesibilityResult.errorModuleName ?
                                  ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                          case 135:
                          case 134:
                              if (node.parent.flags & 128) {
                                  return symbolAccesibilityResult.errorModuleName ?
                                      symbolAccesibilityResult.accessibility === 2 ?
                                          ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                          ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                      ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                              }
                              else if (node.parent.parent.kind === 202) {
                                  return symbolAccesibilityResult.errorModuleName ?
                                      symbolAccesibilityResult.accessibility === 2 ?
                                          ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                          ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                                      ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                              }
                              else {
                                  return symbolAccesibilityResult.errorModuleName ?
                                      ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                                      ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                              }
                          case 201:
                              return symbolAccesibilityResult.errorModuleName ?
                                  symbolAccesibilityResult.accessibility === 2 ?
                                      ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                      ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                                  ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
                          default:
                              ts.Debug.fail("This is unknown parent for parameter: " + node.parent.kind);
                      }
                  }
                  function emitBindingPattern(bindingPattern) {
                      if (bindingPattern.kind === 151) {
                          write("{");
                          emitCommaList(bindingPattern.elements, emitBindingElement);
                          write("}");
                      }
                      else if (bindingPattern.kind === 152) {
                          write("[");
                          var elements = bindingPattern.elements;
                          emitCommaList(elements, emitBindingElement);
                          if (elements && elements.hasTrailingComma) {
                              write(", ");
                          }
                          write("]");
                      }
                  }
                  function emitBindingElement(bindingElement) {
                      function getBindingElementTypeVisibilityError(symbolAccesibilityResult) {
                          var diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccesibilityResult);
                          return diagnosticMessage !== undefined ? {
                              diagnosticMessage: diagnosticMessage,
                              errorNode: bindingElement,
                              typeName: bindingElement.name
                          } : undefined;
                      }
                      if (bindingElement.kind === 176) {
                          write(" ");
                      }
                      else if (bindingElement.kind === 153) {
                          if (bindingElement.propertyName) {
                              writeTextOfNode(currentSourceFile, bindingElement.propertyName);
                              write(": ");
                              emitBindingPattern(bindingElement.name);
                          }
                          else if (bindingElement.name) {
                              if (ts.isBindingPattern(bindingElement.name)) {
                                  emitBindingPattern(bindingElement.name);
                              }
                              else {
                                  ts.Debug.assert(bindingElement.name.kind === 65);
                                  if (bindingElement.dotDotDotToken) {
                                      write("...");
                                  }
                                  writeTextOfNode(currentSourceFile, bindingElement.name);
                              }
                          }
                      }
                  }
              }
              function emitNode(node) {
                  switch (node.kind) {
                      case 201:
                      case 206:
                      case 209:
                      case 203:
                      case 202:
                      case 204:
                      case 205:
                          return emitModuleElement(node, isModuleElementVisible(node));
                      case 181:
                          return emitModuleElement(node, isVariableStatementVisible(node));
                      case 210:
                          return emitModuleElement(node, !node.importClause);
                      case 216:
                          return emitExportDeclaration(node);
                      case 136:
                      case 135:
                      case 134:
                          return writeFunctionDeclaration(node);
                      case 140:
                      case 139:
                      case 141:
                          return emitSignatureDeclarationWithJsDocComments(node);
                      case 137:
                      case 138:
                          return emitAccessorDeclaration(node);
                      case 133:
                      case 132:
                          return emitPropertyDeclaration(node);
                      case 227:
                          return emitEnumMemberDeclaration(node);
                      case 215:
                          return emitExportAssignment(node);
                      case 228:
                          return emitSourceFile(node);
                  }
              }
              function writeReferencePath(referencedFile) {
                  var declFileName = referencedFile.flags & 2048
                      ? referencedFile.fileName
                      : ts.shouldEmitToOwnFile(referencedFile, compilerOptions)
                          ? ts.getOwnEmitOutputFilePath(referencedFile, host, ".d.ts")
                          : ts.removeFileExtension(compilerOptions.out) + ".d.ts";
                  declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false);
                  referencePathsOutput += "/// <reference path=\"" + declFileName + "\" />" + newLine;
              }
          }
          function writeDeclarationFile(jsFilePath, sourceFile, host, resolver, diagnostics) {
              var emitDeclarationResult = emitDeclarations(host, resolver, diagnostics, jsFilePath, sourceFile);
              if (!emitDeclarationResult.reportedDeclarationError) {
                  var declarationOutput = emitDeclarationResult.referencePathsOutput
                      + getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo);
                  ts.writeFile(host, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, host.getCompilerOptions().emitBOM);
              }
              function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) {
                  var appliedSyncOutputPos = 0;
                  var declarationOutput = "";
                  ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) {
                      if (aliasEmitInfo.asynchronousOutput) {
                          declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos);
                          declarationOutput += getDeclarationOutput(aliasEmitInfo.asynchronousOutput, aliasEmitInfo.subModuleElementDeclarationEmitInfo);
                          appliedSyncOutputPos = aliasEmitInfo.outputPos;
                      }
                  });
                  declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos);
                  return declarationOutput;
              }
          }
          ts.writeDeclarationFile = writeDeclarationFile;
      })(ts || (ts = {}));
      /// <reference path="checker.ts"/>
      /// <reference path="declarationEmitter.ts"/>
      var ts;
      (function (ts) {
          function isExternalModuleOrDeclarationFile(sourceFile) {
              return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile);
          }
          ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile;
          function emitFiles(resolver, host, targetSourceFile) {
              var extendsHelper = "\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    __.prototype = b.prototype;\n    d.prototype = new __();\n};";
              var decorateHelper = "\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n        case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target);\n        case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0);\n        case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc);\n    }\n};";
              var metadataHelper = "\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};";
              var paramHelper = "\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};";
              var compilerOptions = host.getCompilerOptions();
              var languageVersion = compilerOptions.target || 0;
              var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? [] : undefined;
              var diagnostics = [];
              var newLine = host.getNewLine();
              if (targetSourceFile === undefined) {
                  ts.forEach(host.getSourceFiles(), function (sourceFile) {
                      if (ts.shouldEmitToOwnFile(sourceFile, compilerOptions)) {
                          var jsFilePath = ts.getOwnEmitOutputFilePath(sourceFile, host, ".js");
                          emitFile(jsFilePath, sourceFile);
                      }
                  });
                  if (compilerOptions.out) {
                      emitFile(compilerOptions.out);
                  }
              }
              else {
                  if (ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions)) {
                      var jsFilePath = ts.getOwnEmitOutputFilePath(targetSourceFile, host, ".js");
                      emitFile(jsFilePath, targetSourceFile);
                  }
                  else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) {
                      emitFile(compilerOptions.out);
                  }
              }
              diagnostics = ts.sortAndDeduplicateDiagnostics(diagnostics);
              return {
                  emitSkipped: false,
                  diagnostics: diagnostics,
                  sourceMaps: sourceMapDataList
              };
              function isNodeDescendentOf(node, ancestor) {
                  while (node) {
                      if (node === ancestor)
                          return true;
                      node = node.parent;
                  }
                  return false;
              }
              function isUniqueLocalName(name, container) {
                  for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) {
                      if (node.locals && ts.hasProperty(node.locals, name)) {
                          if (node.locals[name].flags & (107455 | 1048576 | 8388608)) {
                              return false;
                          }
                      }
                  }
                  return true;
              }
              function emitJavaScript(jsFilePath, root) {
                  var writer = ts.createTextWriter(newLine);
                  var write = writer.write;
                  var writeTextOfNode = writer.writeTextOfNode;
                  var writeLine = writer.writeLine;
                  var increaseIndent = writer.increaseIndent;
                  var decreaseIndent = writer.decreaseIndent;
                  var currentSourceFile;
                  var exportFunctionForFile;
                  var generatedNameSet = {};
                  var nodeToGeneratedName = [];
                  var blockScopedVariableToGeneratedName;
                  var computedPropertyNamesToGeneratedNames;
                  var extendsEmitted = false;
                  var decorateEmitted = false;
                  var paramEmitted = false;
                  var tempFlags = 0;
                  var tempVariables;
                  var tempParameters;
                  var externalImports;
                  var exportSpecifiers;
                  var exportEquals;
                  var hasExportStars;
                  var writeEmittedFiles = writeJavaScriptFile;
                  var detachedCommentsInfo;
                  var writeComment = ts.writeCommentRange;
                  var emit = emitNodeWithoutSourceMap;
                  var emitStart = function (node) { };
                  var emitEnd = function (node) { };
                  var emitToken = emitTokenText;
                  var scopeEmitStart = function (scopeDeclaration, scopeName) { };
                  var scopeEmitEnd = function () { };
                  var sourceMapData;
                  if (compilerOptions.sourceMap || compilerOptions.inlineSourceMap) {
                      initializeEmitterWithSourceMaps();
                  }
                  if (root) {
                      emitSourceFile(root);
                  }
                  else {
                      ts.forEach(host.getSourceFiles(), function (sourceFile) {
                          if (!isExternalModuleOrDeclarationFile(sourceFile)) {
                              emitSourceFile(sourceFile);
                          }
                      });
                  }
                  writeLine();
                  writeEmittedFiles(writer.getText(), compilerOptions.emitBOM);
                  return;
                  function emitSourceFile(sourceFile) {
                      currentSourceFile = sourceFile;
                      exportFunctionForFile = undefined;
                      emit(sourceFile);
                  }
                  function isUniqueName(name) {
                      return !resolver.hasGlobalName(name) &&
                          !ts.hasProperty(currentSourceFile.identifiers, name) &&
                          !ts.hasProperty(generatedNameSet, name);
                  }
                  function makeTempVariableName(flags) {
                      if (flags && !(tempFlags & flags)) {
                          var name = flags === 268435456 ? "_i" : "_n";
                          if (isUniqueName(name)) {
                              tempFlags |= flags;
                              return name;
                          }
                      }
                      while (true) {
                          var count = tempFlags & 268435455;
                          tempFlags++;
                          if (count !== 8 && count !== 13) {
                              var name_15 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26);
                              if (isUniqueName(name_15)) {
                                  return name_15;
                              }
                          }
                      }
                  }
                  function makeUniqueName(baseName) {
                      if (baseName.charCodeAt(baseName.length - 1) !== 95) {
                          baseName += "_";
                      }
                      var i = 1;
                      while (true) {
                          var generatedName = baseName + i;
                          if (isUniqueName(generatedName)) {
                              return generatedNameSet[generatedName] = generatedName;
                          }
                          i++;
                      }
                  }
                  function assignGeneratedName(node, name) {
                      nodeToGeneratedName[ts.getNodeId(node)] = ts.unescapeIdentifier(name);
                  }
                  function generateNameForFunctionOrClassDeclaration(node) {
                      if (!node.name) {
                          assignGeneratedName(node, makeUniqueName("default"));
                      }
                  }
                  function generateNameForModuleOrEnum(node) {
                      if (node.name.kind === 65) {
                          var name_16 = node.name.text;
                          assignGeneratedName(node, isUniqueLocalName(name_16, node) ? name_16 : makeUniqueName(name_16));
                      }
                  }
                  function generateNameForImportOrExportDeclaration(node) {
                      var expr = ts.getExternalModuleName(node);
                      var baseName = expr.kind === 8 ?
                          ts.escapeIdentifier(ts.makeIdentifierFromModuleName(expr.text)) : "module";
                      assignGeneratedName(node, makeUniqueName(baseName));
                  }
                  function generateNameForImportDeclaration(node) {
                      if (node.importClause) {
                          generateNameForImportOrExportDeclaration(node);
                      }
                  }
                  function generateNameForExportDeclaration(node) {
                      if (node.moduleSpecifier) {
                          generateNameForImportOrExportDeclaration(node);
                      }
                  }
                  function generateNameForExportAssignment(node) {
                      if (node.expression && node.expression.kind !== 65) {
                          assignGeneratedName(node, makeUniqueName("default"));
                      }
                  }
                  function generateNameForNode(node) {
                      switch (node.kind) {
                          case 201:
                          case 202:
                          case 175:
                              generateNameForFunctionOrClassDeclaration(node);
                              break;
                          case 206:
                              generateNameForModuleOrEnum(node);
                              generateNameForNode(node.body);
                              break;
                          case 205:
                              generateNameForModuleOrEnum(node);
                              break;
                          case 210:
                              generateNameForImportDeclaration(node);
                              break;
                          case 216:
                              generateNameForExportDeclaration(node);
                              break;
                          case 215:
                              generateNameForExportAssignment(node);
                              break;
                      }
                  }
                  function getGeneratedNameForNode(node) {
                      var nodeId = ts.getNodeId(node);
                      if (!nodeToGeneratedName[nodeId]) {
                          generateNameForNode(node);
                      }
                      return nodeToGeneratedName[nodeId];
                  }
                  function initializeEmitterWithSourceMaps() {
                      var sourceMapDir;
                      var sourceMapSourceIndex = -1;
                      var sourceMapNameIndexMap = {};
                      var sourceMapNameIndices = [];
                      function getSourceMapNameIndex() {
                          return sourceMapNameIndices.length ? ts.lastOrUndefined(sourceMapNameIndices) : -1;
                      }
                      var lastRecordedSourceMapSpan;
                      var lastEncodedSourceMapSpan = {
                          emittedLine: 1,
                          emittedColumn: 1,
                          sourceLine: 1,
                          sourceColumn: 1,
                          sourceIndex: 0
                      };
                      var lastEncodedNameIndex = 0;
                      function encodeLastRecordedSourceMapSpan() {
                          if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) {
                              return;
                          }
                          var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn;
                          if (lastEncodedSourceMapSpan.emittedLine == lastRecordedSourceMapSpan.emittedLine) {
                              if (sourceMapData.sourceMapMappings) {
                                  sourceMapData.sourceMapMappings += ",";
                              }
                          }
                          else {
                              for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) {
                                  sourceMapData.sourceMapMappings += ";";
                              }
                              prevEncodedEmittedColumn = 1;
                          }
                          sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn);
                          sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex);
                          sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine);
                          sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn);
                          if (lastRecordedSourceMapSpan.nameIndex >= 0) {
                              sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex);
                              lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex;
                          }
                          lastEncodedSourceMapSpan = lastRecordedSourceMapSpan;
                          sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan);
                          function base64VLQFormatEncode(inValue) {
                              function base64FormatEncode(inValue) {
                                  if (inValue < 64) {
                                      return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.charAt(inValue);
                                  }
                                  throw TypeError(inValue + ": not a 64 based value");
                              }
                              if (inValue < 0) {
                                  inValue = ((-inValue) << 1) + 1;
                              }
                              else {
                                  inValue = inValue << 1;
                              }
                              var encodedStr = "";
                              do {
                                  var currentDigit = inValue & 31;
                                  inValue = inValue >> 5;
                                  if (inValue > 0) {
                                      currentDigit = currentDigit | 32;
                                  }
                                  encodedStr = encodedStr + base64FormatEncode(currentDigit);
                              } while (inValue > 0);
                              return encodedStr;
                          }
                      }
                      function recordSourceMapSpan(pos) {
                          var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSourceFile, pos);
                          sourceLinePos.line++;
                          sourceLinePos.character++;
                          var emittedLine = writer.getLine();
                          var emittedColumn = writer.getColumn();
                          if (!lastRecordedSourceMapSpan ||
                              lastRecordedSourceMapSpan.emittedLine != emittedLine ||
                              lastRecordedSourceMapSpan.emittedColumn != emittedColumn ||
                              (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex &&
                                  (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line ||
                                      (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) {
                              encodeLastRecordedSourceMapSpan();
                              lastRecordedSourceMapSpan = {
                                  emittedLine: emittedLine,
                                  emittedColumn: emittedColumn,
                                  sourceLine: sourceLinePos.line,
                                  sourceColumn: sourceLinePos.character,
                                  nameIndex: getSourceMapNameIndex(),
                                  sourceIndex: sourceMapSourceIndex
                              };
                          }
                          else {
                              lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line;
                              lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character;
                              lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex;
                          }
                      }
                      function recordEmitNodeStartSpan(node) {
                          recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos));
                      }
                      function recordEmitNodeEndSpan(node) {
                          recordSourceMapSpan(node.end);
                      }
                      function writeTextWithSpanRecord(tokenKind, startPos, emitFn) {
                          var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos);
                          recordSourceMapSpan(tokenStartPos);
                          var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn);
                          recordSourceMapSpan(tokenEndPos);
                          return tokenEndPos;
                      }
                      function recordNewSourceFileStart(node) {
                          var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir;
                          sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true));
                          sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1;
                          sourceMapData.inputSourceFileNames.push(node.fileName);
                          if (compilerOptions.inlineSources) {
                              if (!sourceMapData.sourceMapSourcesContent) {
                                  sourceMapData.sourceMapSourcesContent = [];
                              }
                              sourceMapData.sourceMapSourcesContent.push(node.text);
                          }
                      }
                      function recordScopeNameOfNode(node, scopeName) {
                          function recordScopeNameIndex(scopeNameIndex) {
                              sourceMapNameIndices.push(scopeNameIndex);
                          }
                          function recordScopeNameStart(scopeName) {
                              var scopeNameIndex = -1;
                              if (scopeName) {
                                  var parentIndex = getSourceMapNameIndex();
                                  if (parentIndex !== -1) {
                                      var name_17 = node.name;
                                      if (!name_17 || name_17.kind !== 128) {
                                          scopeName = "." + scopeName;
                                      }
                                      scopeName = sourceMapData.sourceMapNames[parentIndex] + scopeName;
                                  }
                                  scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName);
                                  if (scopeNameIndex === undefined) {
                                      scopeNameIndex = sourceMapData.sourceMapNames.length;
                                      sourceMapData.sourceMapNames.push(scopeName);
                                      sourceMapNameIndexMap[scopeName] = scopeNameIndex;
                                  }
                              }
                              recordScopeNameIndex(scopeNameIndex);
                          }
                          if (scopeName) {
                              recordScopeNameStart(scopeName);
                          }
                          else if (node.kind === 201 ||
                              node.kind === 163 ||
                              node.kind === 135 ||
                              node.kind === 134 ||
                              node.kind === 137 ||
                              node.kind === 138 ||
                              node.kind === 206 ||
                              node.kind === 202 ||
                              node.kind === 205) {
                              if (node.name) {
                                  var name_18 = node.name;
                                  scopeName = name_18.kind === 128
                                      ? ts.getTextOfNode(name_18)
                                      : node.name.text;
                              }
                              recordScopeNameStart(scopeName);
                          }
                          else {
                              recordScopeNameIndex(getSourceMapNameIndex());
                          }
                      }
                      function recordScopeNameEnd() {
                          sourceMapNameIndices.pop();
                      }
                      ;
                      function writeCommentRangeWithMap(curentSourceFile, writer, comment, newLine) {
                          recordSourceMapSpan(comment.pos);
                          ts.writeCommentRange(currentSourceFile, writer, comment, newLine);
                          recordSourceMapSpan(comment.end);
                      }
                      function serializeSourceMapContents(version, file, sourceRoot, sources, names, mappings, sourcesContent) {
                          if (typeof JSON !== "undefined") {
                              var map_1 = {
                                  version: version,
                                  file: file,
                                  sourceRoot: sourceRoot,
                                  sources: sources,
                                  names: names,
                                  mappings: mappings
                              };
                              if (sourcesContent !== undefined) {
                                  map_1.sourcesContent = sourcesContent;
                              }
                              return JSON.stringify(map_1);
                          }
                          return "{\"version\":" + version + ",\"file\":\"" + ts.escapeString(file) + "\",\"sourceRoot\":\"" + ts.escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + ts.escapeString(mappings) + "\" " + (sourcesContent !== undefined ? ",\"sourcesContent\":[" + serializeStringArray(sourcesContent) + "]" : "") + "}";
                          function serializeStringArray(list) {
                              var output = "";
                              for (var i = 0, n = list.length; i < n; i++) {
                                  if (i) {
                                      output += ",";
                                  }
                                  output += "\"" + ts.escapeString(list[i]) + "\"";
                              }
                              return output;
                          }
                      }
                      function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) {
                          encodeLastRecordedSourceMapSpan();
                          var sourceMapText = serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings, sourceMapData.sourceMapSourcesContent);
                          sourceMapDataList.push(sourceMapData);
                          var sourceMapUrl;
                          if (compilerOptions.inlineSourceMap) {
                              var base64SourceMapText = ts.convertToBase64(sourceMapText);
                              sourceMapUrl = "//# sourceMappingURL=data:application/json;base64," + base64SourceMapText;
                          }
                          else {
                              ts.writeFile(host, diagnostics, sourceMapData.sourceMapFilePath, sourceMapText, false);
                              sourceMapUrl = "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL;
                          }
                          writeJavaScriptFile(emitOutput + sourceMapUrl, writeByteOrderMark);
                      }
                      var sourceMapJsFile = ts.getBaseFileName(ts.normalizeSlashes(jsFilePath));
                      sourceMapData = {
                          sourceMapFilePath: jsFilePath + ".map",
                          jsSourceMappingURL: sourceMapJsFile + ".map",
                          sourceMapFile: sourceMapJsFile,
                          sourceMapSourceRoot: compilerOptions.sourceRoot || "",
                          sourceMapSources: [],
                          inputSourceFileNames: [],
                          sourceMapNames: [],
                          sourceMapMappings: "",
                          sourceMapSourcesContent: undefined,
                          sourceMapDecodedMappings: []
                      };
                      sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot);
                      if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47) {
                          sourceMapData.sourceMapSourceRoot += ts.directorySeparator;
                      }
                      if (compilerOptions.mapRoot) {
                          sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot);
                          if (root) {
                              sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(root, host, sourceMapDir));
                          }
                          if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) {
                              sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir);
                              sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), host.getCurrentDirectory(), host.getCanonicalFileName, true);
                          }
                          else {
                              sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL);
                          }
                      }
                      else {
                          sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath));
                      }
                      function emitNodeWithSourceMap(node, allowGeneratedIdentifiers) {
                          if (node) {
                              if (ts.nodeIsSynthesized(node)) {
                                  return emitNodeWithoutSourceMap(node, false);
                              }
                              if (node.kind != 228) {
                                  recordEmitNodeStartSpan(node);
                                  emitNodeWithoutSourceMap(node, allowGeneratedIdentifiers);
                                  recordEmitNodeEndSpan(node);
                              }
                              else {
                                  recordNewSourceFileStart(node);
                                  emitNodeWithoutSourceMap(node, false);
                              }
                          }
                      }
                      writeEmittedFiles = writeJavaScriptAndSourceMapFile;
                      emit = emitNodeWithSourceMap;
                      emitStart = recordEmitNodeStartSpan;
                      emitEnd = recordEmitNodeEndSpan;
                      emitToken = writeTextWithSpanRecord;
                      scopeEmitStart = recordScopeNameOfNode;
                      scopeEmitEnd = recordScopeNameEnd;
                      writeComment = writeCommentRangeWithMap;
                  }
                  function writeJavaScriptFile(emitOutput, writeByteOrderMark) {
                      ts.writeFile(host, diagnostics, jsFilePath, emitOutput, writeByteOrderMark);
                  }
                  function createTempVariable(flags) {
                      var result = ts.createSynthesizedNode(65);
                      result.text = makeTempVariableName(flags);
                      return result;
                  }
                  function recordTempDeclaration(name) {
                      if (!tempVariables) {
                          tempVariables = [];
                      }
                      tempVariables.push(name);
                  }
                  function createAndRecordTempVariable(flags) {
                      var temp = createTempVariable(flags);
                      recordTempDeclaration(temp);
                      return temp;
                  }
                  function emitTempDeclarations(newLine) {
                      if (tempVariables) {
                          if (newLine) {
                              writeLine();
                          }
                          else {
                              write(" ");
                          }
                          write("var ");
                          emitCommaList(tempVariables);
                          write(";");
                      }
                  }
                  function emitTokenText(tokenKind, startPos, emitFn) {
                      var tokenString = ts.tokenToString(tokenKind);
                      if (emitFn) {
                          emitFn();
                      }
                      else {
                          write(tokenString);
                      }
                      return startPos + tokenString.length;
                  }
                  function emitOptional(prefix, node) {
                      if (node) {
                          write(prefix);
                          emit(node);
                      }
                  }
                  function emitParenthesizedIf(node, parenthesized) {
                      if (parenthesized) {
                          write("(");
                      }
                      emit(node);
                      if (parenthesized) {
                          write(")");
                      }
                  }
                  function emitTrailingCommaIfPresent(nodeList) {
                      if (nodeList.hasTrailingComma) {
                          write(",");
                      }
                  }
                  function emitLinePreservingList(parent, nodes, allowTrailingComma, spacesBetweenBraces) {
                      ts.Debug.assert(nodes.length > 0);
                      increaseIndent();
                      if (nodeStartPositionsAreOnSameLine(parent, nodes[0])) {
                          if (spacesBetweenBraces) {
                              write(" ");
                          }
                      }
                      else {
                          writeLine();
                      }
                      for (var i = 0, n = nodes.length; i < n; i++) {
                          if (i) {
                              if (nodeEndIsOnSameLineAsNodeStart(nodes[i - 1], nodes[i])) {
                                  write(", ");
                              }
                              else {
                                  write(",");
                                  writeLine();
                              }
                          }
                          emit(nodes[i]);
                      }
                      if (nodes.hasTrailingComma && allowTrailingComma) {
                          write(",");
                      }
                      decreaseIndent();
                      if (nodeEndPositionsAreOnSameLine(parent, ts.lastOrUndefined(nodes))) {
                          if (spacesBetweenBraces) {
                              write(" ");
                          }
                      }
                      else {
                          writeLine();
                      }
                  }
                  function emitList(nodes, start, count, multiLine, trailingComma, leadingComma, noTrailingNewLine, emitNode) {
                      if (!emitNode) {
                          emitNode = emit;
                      }
                      for (var i = 0; i < count; i++) {
                          if (multiLine) {
                              if (i || leadingComma) {
                                  write(",");
                              }
                              writeLine();
                          }
                          else {
                              if (i || leadingComma) {
                                  write(", ");
                              }
                          }
                          emitNode(nodes[start + i]);
                          leadingComma = true;
                      }
                      if (trailingComma) {
                          write(",");
                      }
                      if (multiLine && !noTrailingNewLine) {
                          writeLine();
                      }
                      return count;
                  }
                  function emitCommaList(nodes) {
                      if (nodes) {
                          emitList(nodes, 0, nodes.length, false, false);
                      }
                  }
                  function emitLines(nodes) {
                      emitLinesStartingAt(nodes, 0);
                  }
                  function emitLinesStartingAt(nodes, startIndex) {
                      for (var i = startIndex; i < nodes.length; i++) {
                          writeLine();
                          emit(nodes[i]);
                      }
                  }
                  function isBinaryOrOctalIntegerLiteral(node, text) {
                      if (node.kind === 7 && text.length > 1) {
                          switch (text.charCodeAt(1)) {
                              case 98:
                              case 66:
                              case 111:
                              case 79:
                                  return true;
                          }
                      }
                      return false;
                  }
                  function emitLiteral(node) {
                      var text = getLiteralText(node);
                      if ((compilerOptions.sourceMap || compilerOptions.inlineSourceMap) && (node.kind === 8 || ts.isTemplateLiteralKind(node.kind))) {
                          writer.writeLiteral(text);
                      }
                      else if (languageVersion < 2 && isBinaryOrOctalIntegerLiteral(node, text)) {
                          write(node.text);
                      }
                      else {
                          write(text);
                      }
                  }
                  function getLiteralText(node) {
                      if (languageVersion < 2 && (ts.isTemplateLiteralKind(node.kind) || node.hasExtendedUnicodeEscape)) {
                          return getQuotedEscapedLiteralText('"', node.text, '"');
                      }
                      if (node.parent) {
                          return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
                      }
                      switch (node.kind) {
                          case 8:
                              return getQuotedEscapedLiteralText('"', node.text, '"');
                          case 10:
                              return getQuotedEscapedLiteralText('`', node.text, '`');
                          case 11:
                              return getQuotedEscapedLiteralText('`', node.text, '${');
                          case 12:
                              return getQuotedEscapedLiteralText('}', node.text, '${');
                          case 13:
                              return getQuotedEscapedLiteralText('}', node.text, '`');
                          case 7:
                              return node.text;
                      }
                      ts.Debug.fail("Literal kind '" + node.kind + "' not accounted for.");
                  }
                  function getQuotedEscapedLiteralText(leftQuote, text, rightQuote) {
                      return leftQuote + ts.escapeNonAsciiCharacters(ts.escapeString(text)) + rightQuote;
                  }
                  function emitDownlevelRawTemplateLiteral(node) {
                      var text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
                      var isLast = node.kind === 10 || node.kind === 13;
                      text = text.substring(1, text.length - (isLast ? 1 : 2));
                      text = text.replace(/\r\n?/g, "\n");
                      text = ts.escapeString(text);
                      write('"' + text + '"');
                  }
                  function emitDownlevelTaggedTemplateArray(node, literalEmitter) {
                      write("[");
                      if (node.template.kind === 10) {
                          literalEmitter(node.template);
                      }
                      else {
                          literalEmitter(node.template.head);
                          ts.forEach(node.template.templateSpans, function (child) {
                              write(", ");
                              literalEmitter(child.literal);
                          });
                      }
                      write("]");
                  }
                  function emitDownlevelTaggedTemplate(node) {
                      var tempVariable = createAndRecordTempVariable(0);
                      write("(");
                      emit(tempVariable);
                      write(" = ");
                      emitDownlevelTaggedTemplateArray(node, emit);
                      write(", ");
                      emit(tempVariable);
                      write(".raw = ");
                      emitDownlevelTaggedTemplateArray(node, emitDownlevelRawTemplateLiteral);
                      write(", ");
                      emitParenthesizedIf(node.tag, needsParenthesisForPropertyAccessOrInvocation(node.tag));
                      write("(");
                      emit(tempVariable);
                      if (node.template.kind === 172) {
                          ts.forEach(node.template.templateSpans, function (templateSpan) {
                              write(", ");
                              var needsParens = templateSpan.expression.kind === 170
                                  && templateSpan.expression.operatorToken.kind === 23;
                              emitParenthesizedIf(templateSpan.expression, needsParens);
                          });
                      }
                      write("))");
                  }
                  function emitTemplateExpression(node) {
                      if (languageVersion >= 2) {
                          ts.forEachChild(node, emit);
                          return;
                      }
                      var emitOuterParens = ts.isExpression(node.parent)
                          && templateNeedsParens(node, node.parent);
                      if (emitOuterParens) {
                          write("(");
                      }
                      var headEmitted = false;
                      if (shouldEmitTemplateHead()) {
                          emitLiteral(node.head);
                          headEmitted = true;
                      }
                      for (var i = 0, n = node.templateSpans.length; i < n; i++) {
                          var templateSpan = node.templateSpans[i];
                          var needsParens = templateSpan.expression.kind !== 162
                              && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1;
                          if (i > 0 || headEmitted) {
                              write(" + ");
                          }
                          emitParenthesizedIf(templateSpan.expression, needsParens);
                          if (templateSpan.literal.text.length !== 0) {
                              write(" + ");
                              emitLiteral(templateSpan.literal);
                          }
                      }
                      if (emitOuterParens) {
                          write(")");
                      }
                      function shouldEmitTemplateHead() {
                          // If this expression has an empty head literal and the first template span has a non-empty
                          // literal, then emitting the empty head literal is not necessary.
                          //     `${ foo } and ${ bar }`
                          // can be emitted as
                          //     foo + " and " + bar
                          // This is because it is only required that one of the first two operands in the emit
                          // output must be a string literal, so that the other operand and all following operands
                          // are forced into strings.
                          //
                          // If the first template span has an empty literal, then the head must still be emitted.
                          //     `${ foo }${ bar }`
                          // must still be emitted as
                          //     "" + foo + bar
                          ts.Debug.assert(node.templateSpans.length !== 0);
                          return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0;
                      }
                      function templateNeedsParens(template, parent) {
                          switch (parent.kind) {
                              case 158:
                              case 159:
                                  return parent.expression === template;
                              case 160:
                              case 162:
                                  return false;
                              default:
                                  return comparePrecedenceToBinaryPlus(parent) !== -1;
                          }
                      }
                      function comparePrecedenceToBinaryPlus(expression) {
                          switch (expression.kind) {
                              case 170:
                                  switch (expression.operatorToken.kind) {
                                      case 35:
                                      case 36:
                                      case 37:
                                          return 1;
                                      case 33:
                                      case 34:
                                          return 0;
                                      default:
                                          return -1;
                                  }
                              case 173:
                              case 171:
                                  return -1;
                              default:
                                  return 1;
                          }
                      }
                  }
                  function emitTemplateSpan(span) {
                      emit(span.expression);
                      emit(span.literal);
                  }
                  function emitExpressionForPropertyName(node) {
                      ts.Debug.assert(node.kind !== 153);
                      if (node.kind === 8) {
                          emitLiteral(node);
                      }
                      else if (node.kind === 128) {
                          if (ts.nodeIsDecorated(node.parent)) {
                              if (!computedPropertyNamesToGeneratedNames) {
                                  computedPropertyNamesToGeneratedNames = [];
                              }
                              var generatedName = computedPropertyNamesToGeneratedNames[ts.getNodeId(node)];
                              if (generatedName) {
                                  write(generatedName);
                                  return;
                              }
                              generatedName = createAndRecordTempVariable(0).text;
                              computedPropertyNamesToGeneratedNames[ts.getNodeId(node)] = generatedName;
                              write(generatedName);
                              write(" = ");
                          }
                          emit(node.expression);
                      }
                      else {
                          write("\"");
                          if (node.kind === 7) {
                              write(node.text);
                          }
                          else {
                              writeTextOfNode(currentSourceFile, node);
                          }
                          write("\"");
                      }
                  }
                  function isNotExpressionIdentifier(node) {
                      var parent = node.parent;
                      switch (parent.kind) {
                          case 130:
                          case 199:
                          case 153:
                          case 133:
                          case 132:
                          case 225:
                          case 226:
                          case 227:
                          case 135:
                          case 134:
                          case 201:
                          case 137:
                          case 138:
                          case 163:
                          case 202:
                          case 203:
                          case 205:
                          case 206:
                          case 209:
                          case 211:
                          case 212:
                              return parent.name === node;
                          case 214:
                          case 218:
                              return parent.name === node || parent.propertyName === node;
                          case 191:
                          case 190:
                          case 215:
                              return false;
                          case 195:
                              return node.parent.label === node;
                      }
                  }
                  function emitExpressionIdentifier(node) {
                      var substitution = resolver.getExpressionNameSubstitution(node, getGeneratedNameForNode);
                      if (substitution) {
                          write(substitution);
                      }
                      else {
                          writeTextOfNode(currentSourceFile, node);
                      }
                  }
                  function getGeneratedNameForIdentifier(node) {
                      if (ts.nodeIsSynthesized(node) || !blockScopedVariableToGeneratedName) {
                          return undefined;
                      }
                      var variableId = resolver.getBlockScopedVariableId(node);
                      if (variableId === undefined) {
                          return undefined;
                      }
                      return blockScopedVariableToGeneratedName[variableId];
                  }
                  function emitIdentifier(node, allowGeneratedIdentifiers) {
                      if (allowGeneratedIdentifiers) {
                          var generatedName = getGeneratedNameForIdentifier(node);
                          if (generatedName) {
                              write(generatedName);
                              return;
                          }
                      }
                      if (!node.parent) {
                          write(node.text);
                      }
                      else if (!isNotExpressionIdentifier(node)) {
                          emitExpressionIdentifier(node);
                      }
                      else {
                          writeTextOfNode(currentSourceFile, node);
                      }
                  }
                  function emitThis(node) {
                      if (resolver.getNodeCheckFlags(node) & 2) {
                          write("_this");
                      }
                      else {
                          write("this");
                      }
                  }
                  function emitSuper(node) {
                      if (languageVersion >= 2) {
                          write("super");
                      }
                      else {
                          var flags = resolver.getNodeCheckFlags(node);
                          if (flags & 16) {
                              write("_super.prototype");
                          }
                          else {
                              write("_super");
                          }
                      }
                  }
                  function emitObjectBindingPattern(node) {
                      write("{ ");
                      var elements = node.elements;
                      emitList(elements, 0, elements.length, false, elements.hasTrailingComma);
                      write(" }");
                  }
                  function emitArrayBindingPattern(node) {
                      write("[");
                      var elements = node.elements;
                      emitList(elements, 0, elements.length, false, elements.hasTrailingComma);
                      write("]");
                  }
                  function emitBindingElement(node) {
                      if (node.propertyName) {
                          emit(node.propertyName, false);
                          write(": ");
                      }
                      if (node.dotDotDotToken) {
                          write("...");
                      }
                      if (ts.isBindingPattern(node.name)) {
                          emit(node.name);
                      }
                      else {
                          emitModuleMemberName(node);
                      }
                      emitOptional(" = ", node.initializer);
                  }
                  function emitSpreadElementExpression(node) {
                      write("...");
                      emit(node.expression);
                  }
                  function emitYieldExpression(node) {
                      write(ts.tokenToString(110));
                      if (node.asteriskToken) {
                          write("*");
                      }
                      if (node.expression) {
                          write(" ");
                          emit(node.expression);
                      }
                  }
                  function needsParenthesisForPropertyAccessOrInvocation(node) {
                      switch (node.kind) {
                          case 65:
                          case 154:
                          case 156:
                          case 157:
                          case 158:
                          case 162:
                              return false;
                      }
                      return true;
                  }
                  function emitListWithSpread(elements, alwaysCopy, multiLine, trailingComma) {
                      var pos = 0;
                      var group = 0;
                      var length = elements.length;
                      while (pos < length) {
                          if (group === 1) {
                              write(".concat(");
                          }
                          else if (group > 1) {
                              write(", ");
                          }
                          var e = elements[pos];
                          if (e.kind === 174) {
                              e = e.expression;
                              emitParenthesizedIf(e, group === 0 && needsParenthesisForPropertyAccessOrInvocation(e));
                              pos++;
                              if (pos === length && group === 0 && alwaysCopy && e.kind !== 154) {
                                  write(".slice()");
                              }
                          }
                          else {
                              var i = pos;
                              while (i < length && elements[i].kind !== 174) {
                                  i++;
                              }
                              write("[");
                              if (multiLine) {
                                  increaseIndent();
                              }
                              emitList(elements, pos, i - pos, multiLine, trailingComma && i === length);
                              if (multiLine) {
                                  decreaseIndent();
                              }
                              write("]");
                              pos = i;
                          }
                          group++;
                      }
                      if (group > 1) {
                          write(")");
                      }
                  }
                  function isSpreadElementExpression(node) {
                      return node.kind === 174;
                  }
                  function emitArrayLiteral(node) {
                      var elements = node.elements;
                      if (elements.length === 0) {
                          write("[]");
                      }
                      else if (languageVersion >= 2 || !ts.forEach(elements, isSpreadElementExpression)) {
                          write("[");
                          emitLinePreservingList(node, node.elements, elements.hasTrailingComma, false);
                          write("]");
                      }
                      else {
                          emitListWithSpread(elements, true, (node.flags & 512) !== 0, elements.hasTrailingComma);
                      }
                  }
                  function emitObjectLiteralBody(node, numElements) {
                      if (numElements === 0) {
                          write("{}");
                          return;
                      }
                      write("{");
                      if (numElements > 0) {
                          var properties = node.properties;
                          if (numElements === properties.length) {
                              emitLinePreservingList(node, properties, languageVersion >= 1, true);
                          }
                          else {
                              var multiLine = (node.flags & 512) !== 0;
                              if (!multiLine) {
                                  write(" ");
                              }
                              else {
                                  increaseIndent();
                              }
                              emitList(properties, 0, numElements, multiLine, false);
                              if (!multiLine) {
                                  write(" ");
                              }
                              else {
                                  decreaseIndent();
                              }
                          }
                      }
                      write("}");
                  }
                  function emitDownlevelObjectLiteralWithComputedProperties(node, firstComputedPropertyIndex) {
                      var multiLine = (node.flags & 512) !== 0;
                      var properties = node.properties;
                      write("(");
                      if (multiLine) {
                          increaseIndent();
                      }
                      var tempVar = createAndRecordTempVariable(0);
                      emit(tempVar);
                      write(" = ");
                      emitObjectLiteralBody(node, firstComputedPropertyIndex);
                      for (var i = firstComputedPropertyIndex, n = properties.length; i < n; i++) {
                          writeComma();
                          var property = properties[i];
                          emitStart(property);
                          if (property.kind === 137 || property.kind === 138) {
                              var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                              if (property !== accessors.firstAccessor) {
                                  continue;
                              }
                              write("Object.defineProperty(");
                              emit(tempVar);
                              write(", ");
                              emitStart(node.name);
                              emitExpressionForPropertyName(property.name);
                              emitEnd(property.name);
                              write(", {");
                              increaseIndent();
                              if (accessors.getAccessor) {
                                  writeLine();
                                  emitLeadingComments(accessors.getAccessor);
                                  write("get: ");
                                  emitStart(accessors.getAccessor);
                                  write("function ");
                                  emitSignatureAndBody(accessors.getAccessor);
                                  emitEnd(accessors.getAccessor);
                                  emitTrailingComments(accessors.getAccessor);
                                  write(",");
                              }
                              if (accessors.setAccessor) {
                                  writeLine();
                                  emitLeadingComments(accessors.setAccessor);
                                  write("set: ");
                                  emitStart(accessors.setAccessor);
                                  write("function ");
                                  emitSignatureAndBody(accessors.setAccessor);
                                  emitEnd(accessors.setAccessor);
                                  emitTrailingComments(accessors.setAccessor);
                                  write(",");
                              }
                              writeLine();
                              write("enumerable: true,");
                              writeLine();
                              write("configurable: true");
                              decreaseIndent();
                              writeLine();
                              write("})");
                              emitEnd(property);
                          }
                          else {
                              emitLeadingComments(property);
                              emitStart(property.name);
                              emit(tempVar);
                              emitMemberAccessForPropertyName(property.name);
                              emitEnd(property.name);
                              write(" = ");
                              if (property.kind === 225) {
                                  emit(property.initializer);
                              }
                              else if (property.kind === 226) {
                                  emitExpressionIdentifier(property.name);
                              }
                              else if (property.kind === 135) {
                                  emitFunctionDeclaration(property);
                              }
                              else {
                                  ts.Debug.fail("ObjectLiteralElement type not accounted for: " + property.kind);
                              }
                          }
                          emitEnd(property);
                      }
                      writeComma();
                      emit(tempVar);
                      if (multiLine) {
                          decreaseIndent();
                          writeLine();
                      }
                      write(")");
                      function writeComma() {
                          if (multiLine) {
                              write(",");
                              writeLine();
                          }
                          else {
                              write(", ");
                          }
                      }
                  }
                  function emitObjectLiteral(node) {
                      var properties = node.properties;
                      if (languageVersion < 2) {
                          var numProperties = properties.length;
                          var numInitialNonComputedProperties = numProperties;
                          for (var i = 0, n = properties.length; i < n; i++) {
                              if (properties[i].name.kind === 128) {
                                  numInitialNonComputedProperties = i;
                                  break;
                              }
                          }
                          var hasComputedProperty = numInitialNonComputedProperties !== properties.length;
                          if (hasComputedProperty) {
                              emitDownlevelObjectLiteralWithComputedProperties(node, numInitialNonComputedProperties);
                              return;
                          }
                      }
                      emitObjectLiteralBody(node, properties.length);
                  }
                  function createBinaryExpression(left, operator, right, startsOnNewLine) {
                      var result = ts.createSynthesizedNode(170, startsOnNewLine);
                      result.operatorToken = ts.createSynthesizedNode(operator);
                      result.left = left;
                      result.right = right;
                      return result;
                  }
                  function createPropertyAccessExpression(expression, name) {
                      var result = ts.createSynthesizedNode(156);
                      result.expression = parenthesizeForAccess(expression);
                      result.dotToken = ts.createSynthesizedNode(20);
                      result.name = name;
                      return result;
                  }
                  function createElementAccessExpression(expression, argumentExpression) {
                      var result = ts.createSynthesizedNode(157);
                      result.expression = parenthesizeForAccess(expression);
                      result.argumentExpression = argumentExpression;
                      return result;
                  }
                  function parenthesizeForAccess(expr) {
                      if (ts.isLeftHandSideExpression(expr) && expr.kind !== 159 && expr.kind !== 7) {
                          return expr;
                      }
                      var node = ts.createSynthesizedNode(162);
                      node.expression = expr;
                      return node;
                  }
                  function emitComputedPropertyName(node) {
                      write("[");
                      emitExpressionForPropertyName(node);
                      write("]");
                  }
                  function emitMethod(node) {
                      if (languageVersion >= 2 && node.asteriskToken) {
                          write("*");
                      }
                      emit(node.name, false);
                      if (languageVersion < 2) {
                          write(": function ");
                      }
                      emitSignatureAndBody(node);
                  }
                  function emitPropertyAssignment(node) {
                      emit(node.name, false);
                      write(": ");
                      emit(node.initializer);
                  }
                  function emitShorthandPropertyAssignment(node) {
                      emit(node.name, false);
                      if (languageVersion < 2) {
                          write(": ");
                          var generatedName = getGeneratedNameForIdentifier(node.name);
                          if (generatedName) {
                              write(generatedName);
                          }
                          else {
                              emitExpressionIdentifier(node.name);
                          }
                      }
                      else if (resolver.getExpressionNameSubstitution(node.name, getGeneratedNameForNode)) {
                          write(": ");
                          emitExpressionIdentifier(node.name);
                      }
                  }
                  function tryEmitConstantValue(node) {
                      if (compilerOptions.separateCompilation) {
                          return false;
                      }
                      var constantValue = resolver.getConstantValue(node);
                      if (constantValue !== undefined) {
                          write(constantValue.toString());
                          if (!compilerOptions.removeComments) {
                              var propertyName = node.kind === 156 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression);
                              write(" /* " + propertyName + " */");
                          }
                          return true;
                      }
                      return false;
                  }
                  function indentIfOnDifferentLines(parent, node1, node2, valueToWriteWhenNotIndenting) {
                      var realNodesAreOnDifferentLines = !ts.nodeIsSynthesized(parent) && !nodeEndIsOnSameLineAsNodeStart(node1, node2);
                      var synthesizedNodeIsOnDifferentLine = synthesizedNodeStartsOnNewLine(node2);
                      if (realNodesAreOnDifferentLines || synthesizedNodeIsOnDifferentLine) {
                          increaseIndent();
                          writeLine();
                          return true;
                      }
                      else {
                          if (valueToWriteWhenNotIndenting) {
                              write(valueToWriteWhenNotIndenting);
                          }
                          return false;
                      }
                  }
                  function emitPropertyAccess(node) {
                      if (tryEmitConstantValue(node)) {
                          return;
                      }
                      emit(node.expression);
                      var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken);
                      write(".");
                      var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name);
                      emit(node.name, false);
                      decreaseIndentIf(indentedBeforeDot, indentedAfterDot);
                  }
                  function emitQualifiedName(node) {
                      emit(node.left);
                      write(".");
                      emit(node.right);
                  }
                  function emitIndexedAccess(node) {
                      if (tryEmitConstantValue(node)) {
                          return;
                      }
                      emit(node.expression);
                      write("[");
                      emit(node.argumentExpression);
                      write("]");
                  }
                  function hasSpreadElement(elements) {
                      return ts.forEach(elements, function (e) { return e.kind === 174; });
                  }
                  function skipParentheses(node) {
                      while (node.kind === 162 || node.kind === 161) {
                          node = node.expression;
                      }
                      return node;
                  }
                  function emitCallTarget(node) {
                      if (node.kind === 65 || node.kind === 93 || node.kind === 91) {
                          emit(node);
                          return node;
                      }
                      var temp = createAndRecordTempVariable(0);
                      write("(");
                      emit(temp);
                      write(" = ");
                      emit(node);
                      write(")");
                      return temp;
                  }
                  function emitCallWithSpread(node) {
                      var target;
                      var expr = skipParentheses(node.expression);
                      if (expr.kind === 156) {
                          target = emitCallTarget(expr.expression);
                          write(".");
                          emit(expr.name);
                      }
                      else if (expr.kind === 157) {
                          target = emitCallTarget(expr.expression);
                          write("[");
                          emit(expr.argumentExpression);
                          write("]");
                      }
                      else if (expr.kind === 91) {
                          target = expr;
                          write("_super");
                      }
                      else {
                          emit(node.expression);
                      }
                      write(".apply(");
                      if (target) {
                          if (target.kind === 91) {
                              emitThis(target);
                          }
                          else {
                              emit(target);
                          }
                      }
                      else {
                          write("void 0");
                      }
                      write(", ");
                      emitListWithSpread(node.arguments, false, false, false);
                      write(")");
                  }
                  function emitCallExpression(node) {
                      if (languageVersion < 2 && hasSpreadElement(node.arguments)) {
                          emitCallWithSpread(node);
                          return;
                      }
                      var superCall = false;
                      if (node.expression.kind === 91) {
                          emitSuper(node.expression);
                          superCall = true;
                      }
                      else {
                          emit(node.expression);
                          superCall = node.expression.kind === 156 && node.expression.expression.kind === 91;
                      }
                      if (superCall && languageVersion < 2) {
                          write(".call(");
                          emitThis(node.expression);
                          if (node.arguments.length) {
                              write(", ");
                              emitCommaList(node.arguments);
                          }
                          write(")");
                      }
                      else {
                          write("(");
                          emitCommaList(node.arguments);
                          write(")");
                      }
                  }
                  function emitNewExpression(node) {
                      write("new ");
                      emit(node.expression);
                      if (node.arguments) {
                          write("(");
                          emitCommaList(node.arguments);
                          write(")");
                      }
                  }
                  function emitTaggedTemplateExpression(node) {
                      if (languageVersion >= 2) {
                          emit(node.tag);
                          write(" ");
                          emit(node.template);
                      }
                      else {
                          emitDownlevelTaggedTemplate(node);
                      }
                  }
                  function emitParenExpression(node) {
                      if (!node.parent || node.parent.kind !== 164) {
                          if (node.expression.kind === 161) {
                              var operand = node.expression.expression;
                              while (operand.kind == 161) {
                                  operand = operand.expression;
                              }
                              if (operand.kind !== 168 &&
                                  operand.kind !== 167 &&
                                  operand.kind !== 166 &&
                                  operand.kind !== 165 &&
                                  operand.kind !== 169 &&
                                  operand.kind !== 159 &&
                                  !(operand.kind === 158 && node.parent.kind === 159) &&
                                  !(operand.kind === 163 && node.parent.kind === 158)) {
                                  emit(operand);
                                  return;
                              }
                          }
                      }
                      write("(");
                      emit(node.expression);
                      write(")");
                  }
                  function emitDeleteExpression(node) {
                      write(ts.tokenToString(74));
                      write(" ");
                      emit(node.expression);
                  }
                  function emitVoidExpression(node) {
                      write(ts.tokenToString(99));
                      write(" ");
                      emit(node.expression);
                  }
                  function emitTypeOfExpression(node) {
                      write(ts.tokenToString(97));
                      write(" ");
                      emit(node.expression);
                  }
                  function isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node) {
                      if (!isCurrentFileSystemExternalModule() || node.kind !== 65 || ts.nodeIsSynthesized(node)) {
                          return false;
                      }
                      var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 199 || node.parent.kind === 153);
                      var targetDeclaration = isVariableDeclarationOrBindingElement
                          ? node.parent
                          : resolver.getReferencedValueDeclaration(node);
                      return isSourceFileLevelDeclarationInSystemJsModule(targetDeclaration, true);
                  }
                  function emitPrefixUnaryExpression(node) {
                      var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand);
                      if (exportChanged) {
                          write(exportFunctionForFile + "(\"");
                          emitNodeWithoutSourceMap(node.operand);
                          write("\", ");
                      }
                      write(ts.tokenToString(node.operator));
                      if (node.operand.kind === 168) {
                          var operand = node.operand;
                          if (node.operator === 33 && (operand.operator === 33 || operand.operator === 38)) {
                              write(" ");
                          }
                          else if (node.operator === 34 && (operand.operator === 34 || operand.operator === 39)) {
                              write(" ");
                          }
                      }
                      emit(node.operand);
                      if (exportChanged) {
                          write(")");
                      }
                  }
                  function emitPostfixUnaryExpression(node) {
                      var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand);
                      if (exportChanged) {
                          write("(" + exportFunctionForFile + "(\"");
                          emitNodeWithoutSourceMap(node.operand);
                          write("\", ");
                          write(ts.tokenToString(node.operator));
                          emit(node.operand);
                          if (node.operator === 38) {
                              write(") - 1)");
                          }
                          else {
                              write(") + 1)");
                          }
                      }
                      else {
                          emit(node.operand);
                          write(ts.tokenToString(node.operator));
                      }
                  }
                  function shouldHoistDeclarationInSystemJsModule(node) {
                      return isSourceFileLevelDeclarationInSystemJsModule(node, false);
                  }
                  function isSourceFileLevelDeclarationInSystemJsModule(node, isExported) {
                      if (!node || languageVersion >= 2 || !isCurrentFileSystemExternalModule()) {
                          return false;
                      }
                      var current = node;
                      while (current) {
                          if (current.kind === 228) {
                              return !isExported || ((ts.getCombinedNodeFlags(node) & 1) !== 0);
                          }
                          else if (ts.isFunctionLike(current) || current.kind === 207) {
                              return false;
                          }
                          else {
                              current = current.parent;
                          }
                      }
                  }
                  function emitBinaryExpression(node) {
                      if (languageVersion < 2 && node.operatorToken.kind === 53 &&
                          (node.left.kind === 155 || node.left.kind === 154)) {
                          emitDestructuring(node, node.parent.kind === 183);
                      }
                      else {
                          var exportChanged = node.operatorToken.kind >= 53 &&
                              node.operatorToken.kind <= 64 &&
                              isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.left);
                          if (exportChanged) {
                              write(exportFunctionForFile + "(\"");
                              emitNodeWithoutSourceMap(node.left);
                              write("\", ");
                          }
                          emit(node.left);
                          var indentedBeforeOperator = indentIfOnDifferentLines(node, node.left, node.operatorToken, node.operatorToken.kind !== 23 ? " " : undefined);
                          write(ts.tokenToString(node.operatorToken.kind));
                          var indentedAfterOperator = indentIfOnDifferentLines(node, node.operatorToken, node.right, " ");
                          emit(node.right);
                          decreaseIndentIf(indentedBeforeOperator, indentedAfterOperator);
                          if (exportChanged) {
                              write(")");
                          }
                      }
                  }
                  function synthesizedNodeStartsOnNewLine(node) {
                      return ts.nodeIsSynthesized(node) && node.startsOnNewLine;
                  }
                  function emitConditionalExpression(node) {
                      emit(node.condition);
                      var indentedBeforeQuestion = indentIfOnDifferentLines(node, node.condition, node.questionToken, " ");
                      write("?");
                      var indentedAfterQuestion = indentIfOnDifferentLines(node, node.questionToken, node.whenTrue, " ");
                      emit(node.whenTrue);
                      decreaseIndentIf(indentedBeforeQuestion, indentedAfterQuestion);
                      var indentedBeforeColon = indentIfOnDifferentLines(node, node.whenTrue, node.colonToken, " ");
                      write(":");
                      var indentedAfterColon = indentIfOnDifferentLines(node, node.colonToken, node.whenFalse, " ");
                      emit(node.whenFalse);
                      decreaseIndentIf(indentedBeforeColon, indentedAfterColon);
                  }
                  function decreaseIndentIf(value1, value2) {
                      if (value1) {
                          decreaseIndent();
                      }
                      if (value2) {
                          decreaseIndent();
                      }
                  }
                  function isSingleLineEmptyBlock(node) {
                      if (node && node.kind === 180) {
                          var block = node;
                          return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block);
                      }
                  }
                  function emitBlock(node) {
                      if (isSingleLineEmptyBlock(node)) {
                          emitToken(14, node.pos);
                          write(" ");
                          emitToken(15, node.statements.end);
                          return;
                      }
                      emitToken(14, node.pos);
                      increaseIndent();
                      scopeEmitStart(node.parent);
                      if (node.kind === 207) {
                          ts.Debug.assert(node.parent.kind === 206);
                          emitCaptureThisForNodeIfNecessary(node.parent);
                      }
                      emitLines(node.statements);
                      if (node.kind === 207) {
                          emitTempDeclarations(true);
                      }
                      decreaseIndent();
                      writeLine();
                      emitToken(15, node.statements.end);
                      scopeEmitEnd();
                  }
                  function emitEmbeddedStatement(node) {
                      if (node.kind === 180) {
                          write(" ");
                          emit(node);
                      }
                      else {
                          increaseIndent();
                          writeLine();
                          emit(node);
                          decreaseIndent();
                      }
                  }
                  function emitExpressionStatement(node) {
                      emitParenthesizedIf(node.expression, node.expression.kind === 164);
                      write(";");
                  }
                  function emitIfStatement(node) {
                      var endPos = emitToken(84, node.pos);
                      write(" ");
                      endPos = emitToken(16, endPos);
                      emit(node.expression);
                      emitToken(17, node.expression.end);
                      emitEmbeddedStatement(node.thenStatement);
                      if (node.elseStatement) {
                          writeLine();
                          emitToken(76, node.thenStatement.end);
                          if (node.elseStatement.kind === 184) {
                              write(" ");
                              emit(node.elseStatement);
                          }
                          else {
                              emitEmbeddedStatement(node.elseStatement);
                          }
                      }
                  }
                  function emitDoStatement(node) {
                      write("do");
                      emitEmbeddedStatement(node.statement);
                      if (node.statement.kind === 180) {
                          write(" ");
                      }
                      else {
                          writeLine();
                      }
                      write("while (");
                      emit(node.expression);
                      write(");");
                  }
                  function emitWhileStatement(node) {
                      write("while (");
                      emit(node.expression);
                      write(")");
                      emitEmbeddedStatement(node.statement);
                  }
                  function tryEmitStartOfVariableDeclarationList(decl, startPos) {
                      if (shouldHoistVariable(decl, true)) {
                          return false;
                      }
                      var tokenKind = 98;
                      if (decl && languageVersion >= 2) {
                          if (ts.isLet(decl)) {
                              tokenKind = 104;
                          }
                          else if (ts.isConst(decl)) {
                              tokenKind = 70;
                          }
                      }
                      if (startPos !== undefined) {
                          emitToken(tokenKind, startPos);
                          write(" ");
                      }
                      else {
                          switch (tokenKind) {
                              case 98:
                                  write("var ");
                                  break;
                              case 104:
                                  write("let ");
                                  break;
                              case 70:
                                  write("const ");
                                  break;
                          }
                      }
                      return true;
                  }
                  function emitVariableDeclarationListSkippingUninitializedEntries(list) {
                      var started = false;
                      for (var _a = 0, _b = list.declarations; _a < _b.length; _a++) {
                          var decl = _b[_a];
                          if (!decl.initializer) {
                              continue;
                          }
                          if (!started) {
                              started = true;
                          }
                          else {
                              write(", ");
                          }
                          emit(decl);
                      }
                      return started;
                  }
                  function emitForStatement(node) {
                      var endPos = emitToken(82, node.pos);
                      write(" ");
                      endPos = emitToken(16, endPos);
                      if (node.initializer && node.initializer.kind === 200) {
                          var variableDeclarationList = node.initializer;
                          var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList, endPos);
                          if (startIsEmitted) {
                              emitCommaList(variableDeclarationList.declarations);
                          }
                          else {
                              emitVariableDeclarationListSkippingUninitializedEntries(variableDeclarationList);
                          }
                      }
                      else if (node.initializer) {
                          emit(node.initializer);
                      }
                      write(";");
                      emitOptional(" ", node.condition);
                      write(";");
                      emitOptional(" ", node.incrementor);
                      write(")");
                      emitEmbeddedStatement(node.statement);
                  }
                  function emitForInOrForOfStatement(node) {
                      if (languageVersion < 2 && node.kind === 189) {
                          return emitDownLevelForOfStatement(node);
                      }
                      var endPos = emitToken(82, node.pos);
                      write(" ");
                      endPos = emitToken(16, endPos);
                      if (node.initializer.kind === 200) {
                          var variableDeclarationList = node.initializer;
                          if (variableDeclarationList.declarations.length >= 1) {
                              tryEmitStartOfVariableDeclarationList(variableDeclarationList, endPos);
                              emit(variableDeclarationList.declarations[0]);
                          }
                      }
                      else {
                          emit(node.initializer);
                      }
                      if (node.kind === 188) {
                          write(" in ");
                      }
                      else {
                          write(" of ");
                      }
                      emit(node.expression);
                      emitToken(17, node.expression.end);
                      emitEmbeddedStatement(node.statement);
                  }
                  function emitDownLevelForOfStatement(node) {
                      // The following ES6 code:
                      //
                      //    for (let v of expr) { }
                      //
                      // should be emitted as
                      //
                      //    for (let _i = 0, _a = expr; _i < _a.length; _i++) {
                      //        let v = _a[_i];
                      //    }
                      //
                      // where _a and _i are temps emitted to capture the RHS and the counter,
                      // respectively.
                      // When the left hand side is an expression instead of a let declaration,
                      // the "let v" is not emitted.
                      // When the left hand side is a let/const, the v is renamed if there is
                      // another v in scope.
                      // Note that all assignments to the LHS are emitted in the body, including
                      // all destructuring.
                      // Note also that because an extra statement is needed to assign to the LHS,
                      // for-of bodies are always emitted as blocks.
                      var endPos = emitToken(82, node.pos);
                      write(" ");
                      endPos = emitToken(16, endPos);
                      var rhsIsIdentifier = node.expression.kind === 65;
                      var counter = createTempVariable(268435456);
                      var rhsReference = rhsIsIdentifier ? node.expression : createTempVariable(0);
                      emitStart(node.expression);
                      write("var ");
                      emitNodeWithoutSourceMap(counter);
                      write(" = 0");
                      emitEnd(node.expression);
                      if (!rhsIsIdentifier) {
                          write(", ");
                          emitStart(node.expression);
                          emitNodeWithoutSourceMap(rhsReference);
                          write(" = ");
                          emitNodeWithoutSourceMap(node.expression);
                          emitEnd(node.expression);
                      }
                      write("; ");
                      emitStart(node.initializer);
                      emitNodeWithoutSourceMap(counter);
                      write(" < ");
                      emitNodeWithoutSourceMap(rhsReference);
                      write(".length");
                      emitEnd(node.initializer);
                      write("; ");
                      emitStart(node.initializer);
                      emitNodeWithoutSourceMap(counter);
                      write("++");
                      emitEnd(node.initializer);
                      emitToken(17, node.expression.end);
                      write(" {");
                      writeLine();
                      increaseIndent();
                      var rhsIterationValue = createElementAccessExpression(rhsReference, counter);
                      emitStart(node.initializer);
                      if (node.initializer.kind === 200) {
                          write("var ");
                          var variableDeclarationList = node.initializer;
                          if (variableDeclarationList.declarations.length > 0) {
                              var declaration = variableDeclarationList.declarations[0];
                              if (ts.isBindingPattern(declaration.name)) {
                                  emitDestructuring(declaration, false, rhsIterationValue);
                              }
                              else {
                                  emitNodeWithoutSourceMap(declaration);
                                  write(" = ");
                                  emitNodeWithoutSourceMap(rhsIterationValue);
                              }
                          }
                          else {
                              emitNodeWithoutSourceMap(createTempVariable(0));
                              write(" = ");
                              emitNodeWithoutSourceMap(rhsIterationValue);
                          }
                      }
                      else {
                          var assignmentExpression = createBinaryExpression(node.initializer, 53, rhsIterationValue, false);
                          if (node.initializer.kind === 154 || node.initializer.kind === 155) {
                              emitDestructuring(assignmentExpression, true, undefined);
                          }
                          else {
                              emitNodeWithoutSourceMap(assignmentExpression);
                          }
                      }
                      emitEnd(node.initializer);
                      write(";");
                      if (node.statement.kind === 180) {
                          emitLines(node.statement.statements);
                      }
                      else {
                          writeLine();
                          emit(node.statement);
                      }
                      writeLine();
                      decreaseIndent();
                      write("}");
                  }
                  function emitBreakOrContinueStatement(node) {
                      emitToken(node.kind === 191 ? 66 : 71, node.pos);
                      emitOptional(" ", node.label);
                      write(";");
                  }
                  function emitReturnStatement(node) {
                      emitToken(90, node.pos);
                      emitOptional(" ", node.expression);
                      write(";");
                  }
                  function emitWithStatement(node) {
                      write("with (");
                      emit(node.expression);
                      write(")");
                      emitEmbeddedStatement(node.statement);
                  }
                  function emitSwitchStatement(node) {
                      var endPos = emitToken(92, node.pos);
                      write(" ");
                      emitToken(16, endPos);
                      emit(node.expression);
                      endPos = emitToken(17, node.expression.end);
                      write(" ");
                      emitCaseBlock(node.caseBlock, endPos);
                  }
                  function emitCaseBlock(node, startPos) {
                      emitToken(14, startPos);
                      increaseIndent();
                      emitLines(node.clauses);
                      decreaseIndent();
                      writeLine();
                      emitToken(15, node.clauses.end);
                  }
                  function nodeStartPositionsAreOnSameLine(node1, node2) {
                      return ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node1.pos)) ===
                          ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos));
                  }
                  function nodeEndPositionsAreOnSameLine(node1, node2) {
                      return ts.getLineOfLocalPosition(currentSourceFile, node1.end) ===
                          ts.getLineOfLocalPosition(currentSourceFile, node2.end);
                  }
                  function nodeEndIsOnSameLineAsNodeStart(node1, node2) {
                      return ts.getLineOfLocalPosition(currentSourceFile, node1.end) ===
                          ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos));
                  }
                  function emitCaseOrDefaultClause(node) {
                      if (node.kind === 221) {
                          write("case ");
                          emit(node.expression);
                          write(":");
                      }
                      else {
                          write("default:");
                      }
                      if (node.statements.length === 1 && nodeStartPositionsAreOnSameLine(node, node.statements[0])) {
                          write(" ");
                          emit(node.statements[0]);
                      }
                      else {
                          increaseIndent();
                          emitLines(node.statements);
                          decreaseIndent();
                      }
                  }
                  function emitThrowStatement(node) {
                      write("throw ");
                      emit(node.expression);
                      write(";");
                  }
                  function emitTryStatement(node) {
                      write("try ");
                      emit(node.tryBlock);
                      emit(node.catchClause);
                      if (node.finallyBlock) {
                          writeLine();
                          write("finally ");
                          emit(node.finallyBlock);
                      }
                  }
                  function emitCatchClause(node) {
                      writeLine();
                      var endPos = emitToken(68, node.pos);
                      write(" ");
                      emitToken(16, endPos);
                      emit(node.variableDeclaration);
                      emitToken(17, node.variableDeclaration ? node.variableDeclaration.end : endPos);
                      write(" ");
                      emitBlock(node.block);
                  }
                  function emitDebuggerStatement(node) {
                      emitToken(72, node.pos);
                      write(";");
                  }
                  function emitLabelledStatement(node) {
                      emit(node.label);
                      write(": ");
                      emit(node.statement);
                  }
                  function getContainingModule(node) {
                      do {
                          node = node.parent;
                      } while (node && node.kind !== 206);
                      return node;
                  }
                  function emitContainingModuleName(node) {
                      var container = getContainingModule(node);
                      write(container ? getGeneratedNameForNode(container) : "exports");
                  }
                  function emitModuleMemberName(node) {
                      emitStart(node.name);
                      if (ts.getCombinedNodeFlags(node) & 1) {
                          var container = getContainingModule(node);
                          if (container) {
                              write(getGeneratedNameForNode(container));
                              write(".");
                          }
                          else if (languageVersion < 2 && compilerOptions.module !== 4) {
                              write("exports.");
                          }
                      }
                      emitNodeWithoutSourceMap(node.name);
                      emitEnd(node.name);
                  }
                  function createVoidZero() {
                      var zero = ts.createSynthesizedNode(7);
                      zero.text = "0";
                      var result = ts.createSynthesizedNode(167);
                      result.expression = zero;
                      return result;
                  }
                  function emitExportMemberAssignment(node) {
                      if (node.flags & 1) {
                          writeLine();
                          emitStart(node);
                          if (compilerOptions.module === 4 && node.parent === currentSourceFile) {
                              write(exportFunctionForFile + "(\"");
                              if (node.flags & 256) {
                                  write("default");
                              }
                              else {
                                  emitNodeWithoutSourceMap(node.name);
                              }
                              write("\", ");
                              emitDeclarationName(node);
                              write(")");
                          }
                          else {
                              if (node.flags & 256) {
                                  if (languageVersion === 0) {
                                      write("exports[\"default\"]");
                                  }
                                  else {
                                      write("exports.default");
                                  }
                              }
                              else {
                                  emitModuleMemberName(node);
                              }
                              write(" = ");
                              emitDeclarationName(node);
                          }
                          emitEnd(node);
                          write(";");
                      }
                  }
                  function emitExportMemberAssignments(name) {
                      if (!exportEquals && exportSpecifiers && ts.hasProperty(exportSpecifiers, name.text)) {
                          for (var _a = 0, _b = exportSpecifiers[name.text]; _a < _b.length; _a++) {
                              var specifier = _b[_a];
                              writeLine();
                              if (compilerOptions.module === 4) {
                                  emitStart(specifier.name);
                                  write(exportFunctionForFile + "(\"");
                                  emitNodeWithoutSourceMap(specifier.name);
                                  write("\", ");
                                  emitExpressionIdentifier(name);
                                  write(")");
                                  emitEnd(specifier.name);
                              }
                              else {
                                  emitStart(specifier.name);
                                  emitContainingModuleName(specifier);
                                  write(".");
                                  emitNodeWithoutSourceMap(specifier.name);
                                  emitEnd(specifier.name);
                                  write(" = ");
                                  emitExpressionIdentifier(name);
                              }
                              write(";");
                          }
                      }
                  }
                  function emitDestructuring(root, isAssignmentExpressionStatement, value) {
                      var emitCount = 0;
                      var canDefineTempVariablesInPlace = false;
                      if (root.kind === 199) {
                          var isExported = ts.getCombinedNodeFlags(root) & 1;
                          var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root);
                          canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind;
                      }
                      else if (root.kind === 130) {
                          canDefineTempVariablesInPlace = true;
                      }
                      if (root.kind === 170) {
                          emitAssignmentExpression(root);
                      }
                      else {
                          ts.Debug.assert(!isAssignmentExpressionStatement);
                          emitBindingElement(root, value);
                      }
                      function emitAssignment(name, value) {
                          if (emitCount++) {
                              write(", ");
                          }
                          renameNonTopLevelLetAndConst(name);
                          var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 199 || name.parent.kind === 153);
                          var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(name);
                          if (exportChanged) {
                              write(exportFunctionForFile + "(\"");
                              emitNodeWithoutSourceMap(name);
                              write("\", ");
                          }
                          if (isVariableDeclarationOrBindingElement) {
                              emitModuleMemberName(name.parent);
                          }
                          else {
                              emit(name);
                          }
                          write(" = ");
                          emit(value);
                          if (exportChanged) {
                              write(")");
                          }
                      }
                      function ensureIdentifier(expr) {
                          if (expr.kind !== 65) {
                              var identifier = createTempVariable(0);
                              if (!canDefineTempVariablesInPlace) {
                                  recordTempDeclaration(identifier);
                              }
                              emitAssignment(identifier, expr);
                              expr = identifier;
                          }
                          return expr;
                      }
                      function createDefaultValueCheck(value, defaultValue) {
                          value = ensureIdentifier(value);
                          var equals = ts.createSynthesizedNode(170);
                          equals.left = value;
                          equals.operatorToken = ts.createSynthesizedNode(30);
                          equals.right = createVoidZero();
                          return createConditionalExpression(equals, defaultValue, value);
                      }
                      function createConditionalExpression(condition, whenTrue, whenFalse) {
                          var cond = ts.createSynthesizedNode(171);
                          cond.condition = condition;
                          cond.questionToken = ts.createSynthesizedNode(50);
                          cond.whenTrue = whenTrue;
                          cond.colonToken = ts.createSynthesizedNode(51);
                          cond.whenFalse = whenFalse;
                          return cond;
                      }
                      function createNumericLiteral(value) {
                          var node = ts.createSynthesizedNode(7);
                          node.text = "" + value;
                          return node;
                      }
                      function createPropertyAccessForDestructuringProperty(object, propName) {
                          if (propName.kind !== 65) {
                              return createElementAccessExpression(object, propName);
                          }
                          return createPropertyAccessExpression(object, propName);
                      }
                      function createSliceCall(value, sliceIndex) {
                          var call = ts.createSynthesizedNode(158);
                          var sliceIdentifier = ts.createSynthesizedNode(65);
                          sliceIdentifier.text = "slice";
                          call.expression = createPropertyAccessExpression(value, sliceIdentifier);
                          call.arguments = ts.createSynthesizedNodeArray();
                          call.arguments[0] = createNumericLiteral(sliceIndex);
                          return call;
                      }
                      function emitObjectLiteralAssignment(target, value) {
                          var properties = target.properties;
                          if (properties.length !== 1) {
                              value = ensureIdentifier(value);
                          }
                          for (var _a = 0; _a < properties.length; _a++) {
                              var p = properties[_a];
                              if (p.kind === 225 || p.kind === 226) {
                                  var propName = (p.name);
                                  emitDestructuringAssignment(p.initializer || propName, createPropertyAccessForDestructuringProperty(value, propName));
                              }
                          }
                      }
                      function emitArrayLiteralAssignment(target, value) {
                          var elements = target.elements;
                          if (elements.length !== 1) {
                              value = ensureIdentifier(value);
                          }
                          for (var i = 0; i < elements.length; i++) {
                              var e = elements[i];
                              if (e.kind !== 176) {
                                  if (e.kind !== 174) {
                                      emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)));
                                  }
                                  else if (i === elements.length - 1) {
                                      emitDestructuringAssignment(e.expression, createSliceCall(value, i));
                                  }
                              }
                          }
                      }
                      function emitDestructuringAssignment(target, value) {
                          if (target.kind === 170 && target.operatorToken.kind === 53) {
                              value = createDefaultValueCheck(value, target.right);
                              target = target.left;
                          }
                          if (target.kind === 155) {
                              emitObjectLiteralAssignment(target, value);
                          }
                          else if (target.kind === 154) {
                              emitArrayLiteralAssignment(target, value);
                          }
                          else {
                              emitAssignment(target, value);
                          }
                      }
                      function emitAssignmentExpression(root) {
                          var target = root.left;
                          var value = root.right;
                          if (isAssignmentExpressionStatement) {
                              emitDestructuringAssignment(target, value);
                          }
                          else {
                              if (root.parent.kind !== 162) {
                                  write("(");
                              }
                              value = ensureIdentifier(value);
                              emitDestructuringAssignment(target, value);
                              write(", ");
                              emit(value);
                              if (root.parent.kind !== 162) {
                                  write(")");
                              }
                          }
                      }
                      function emitBindingElement(target, value) {
                          if (target.initializer) {
                              value = value ? createDefaultValueCheck(value, target.initializer) : target.initializer;
                          }
                          else if (!value) {
                              value = createVoidZero();
                          }
                          if (ts.isBindingPattern(target.name)) {
                              var pattern = target.name;
                              var elements = pattern.elements;
                              if (elements.length !== 1) {
                                  value = ensureIdentifier(value);
                              }
                              for (var i = 0; i < elements.length; i++) {
                                  var element = elements[i];
                                  if (pattern.kind === 151) {
                                      var propName = element.propertyName || element.name;
                                      emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName));
                                  }
                                  else if (element.kind !== 176) {
                                      if (!element.dotDotDotToken) {
                                          emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i)));
                                      }
                                      else if (i === elements.length - 1) {
                                          emitBindingElement(element, createSliceCall(value, i));
                                      }
                                  }
                              }
                          }
                          else {
                              emitAssignment(target.name, value);
                          }
                      }
                  }
                  function emitVariableDeclaration(node) {
                      if (ts.isBindingPattern(node.name)) {
                          if (languageVersion < 2) {
                              emitDestructuring(node, false);
                          }
                          else {
                              emit(node.name);
                              emitOptional(" = ", node.initializer);
                          }
                      }
                      else {
                          renameNonTopLevelLetAndConst(node.name);
                          var initializer = node.initializer;
                          if (!initializer && languageVersion < 2) {
                              var isUninitializedLet = (resolver.getNodeCheckFlags(node) & 256) &&
                                  (getCombinedFlagsForIdentifier(node.name) & 4096);
                              if (isUninitializedLet &&
                                  node.parent.parent.kind !== 188 &&
                                  node.parent.parent.kind !== 189) {
                                  initializer = createVoidZero();
                              }
                          }
                          var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.name);
                          if (exportChanged) {
                              write(exportFunctionForFile + "(\"");
                              emitNodeWithoutSourceMap(node.name);
                              write("\", ");
                          }
                          emitModuleMemberName(node);
                          emitOptional(" = ", initializer);
                          if (exportChanged) {
                              write(")");
                          }
                      }
                  }
                  function emitExportVariableAssignments(node) {
                      if (node.kind === 176) {
                          return;
                      }
                      var name = node.name;
                      if (name.kind === 65) {
                          emitExportMemberAssignments(name);
                      }
                      else if (ts.isBindingPattern(name)) {
                          ts.forEach(name.elements, emitExportVariableAssignments);
                      }
                  }
                  function getCombinedFlagsForIdentifier(node) {
                      if (!node.parent || (node.parent.kind !== 199 && node.parent.kind !== 153)) {
                          return 0;
                      }
                      return ts.getCombinedNodeFlags(node.parent);
                  }
                  function renameNonTopLevelLetAndConst(node) {
                      if (languageVersion >= 2 ||
                          ts.nodeIsSynthesized(node) ||
                          node.kind !== 65 ||
                          (node.parent.kind !== 199 && node.parent.kind !== 153)) {
                          return;
                      }
                      var combinedFlags = getCombinedFlagsForIdentifier(node);
                      if (((combinedFlags & 12288) === 0) || combinedFlags & 1) {
                          return;
                      }
                      var list = ts.getAncestor(node, 200);
                      if (list.parent.kind === 181) {
                          var isSourceFileLevelBinding = list.parent.parent.kind === 228;
                          var isModuleLevelBinding = list.parent.parent.kind === 207;
                          var isFunctionLevelBinding = list.parent.parent.kind === 180 && ts.isFunctionLike(list.parent.parent.parent);
                          if (isSourceFileLevelBinding || isModuleLevelBinding || isFunctionLevelBinding) {
                              return;
                          }
                      }
                      var blockScopeContainer = ts.getEnclosingBlockScopeContainer(node);
                      var parent = blockScopeContainer.kind === 228
                          ? blockScopeContainer
                          : blockScopeContainer.parent;
                      if (resolver.resolvesToSomeValue(parent, node.text)) {
                          var variableId = resolver.getBlockScopedVariableId(node);
                          if (!blockScopedVariableToGeneratedName) {
                              blockScopedVariableToGeneratedName = [];
                          }
                          var generatedName = makeUniqueName(node.text);
                          blockScopedVariableToGeneratedName[variableId] = generatedName;
                      }
                  }
                  function isES6ExportedDeclaration(node) {
                      return !!(node.flags & 1) &&
                          languageVersion >= 2 &&
                          node.parent.kind === 228;
                  }
                  function emitVariableStatement(node) {
                      var startIsEmitted = false;
                      if (node.flags & 1) {
                          if (isES6ExportedDeclaration(node)) {
                              write("export ");
                              startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList);
                          }
                      }
                      else {
                          startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList);
                      }
                      if (startIsEmitted) {
                          emitCommaList(node.declarationList.declarations);
                          write(";");
                      }
                      else {
                          var atLeastOneItem = emitVariableDeclarationListSkippingUninitializedEntries(node.declarationList);
                          if (atLeastOneItem) {
                              write(";");
                          }
                      }
                      if (languageVersion < 2 && node.parent === currentSourceFile) {
                          ts.forEach(node.declarationList.declarations, emitExportVariableAssignments);
                      }
                  }
                  function emitParameter(node) {
                      if (languageVersion < 2) {
                          if (ts.isBindingPattern(node.name)) {
                              var name_19 = createTempVariable(0);
                              if (!tempParameters) {
                                  tempParameters = [];
                              }
                              tempParameters.push(name_19);
                              emit(name_19);
                          }
                          else {
                              emit(node.name);
                          }
                      }
                      else {
                          if (node.dotDotDotToken) {
                              write("...");
                          }
                          emit(node.name);
                          emitOptional(" = ", node.initializer);
                      }
                  }
                  function emitDefaultValueAssignments(node) {
                      if (languageVersion < 2) {
                          var tempIndex = 0;
                          ts.forEach(node.parameters, function (p) {
                              if (p.dotDotDotToken) {
                                  return;
                              }
                              if (ts.isBindingPattern(p.name)) {
                                  writeLine();
                                  write("var ");
                                  emitDestructuring(p, false, tempParameters[tempIndex]);
                                  write(";");
                                  tempIndex++;
                              }
                              else if (p.initializer) {
                                  writeLine();
                                  emitStart(p);
                                  write("if (");
                                  emitNodeWithoutSourceMap(p.name);
                                  write(" === void 0)");
                                  emitEnd(p);
                                  write(" { ");
                                  emitStart(p);
                                  emitNodeWithoutSourceMap(p.name);
                                  write(" = ");
                                  emitNodeWithoutSourceMap(p.initializer);
                                  emitEnd(p);
                                  write("; }");
                              }
                          });
                      }
                  }
                  function emitRestParameter(node) {
                      if (languageVersion < 2 && ts.hasRestParameters(node)) {
                          var restIndex = node.parameters.length - 1;
                          var restParam = node.parameters[restIndex];
                          if (ts.isBindingPattern(restParam.name)) {
                              return;
                          }
                          var tempName = createTempVariable(268435456).text;
                          writeLine();
                          emitLeadingComments(restParam);
                          emitStart(restParam);
                          write("var ");
                          emitNodeWithoutSourceMap(restParam.name);
                          write(" = [];");
                          emitEnd(restParam);
                          emitTrailingComments(restParam);
                          writeLine();
                          write("for (");
                          emitStart(restParam);
                          write("var " + tempName + " = " + restIndex + ";");
                          emitEnd(restParam);
                          write(" ");
                          emitStart(restParam);
                          write(tempName + " < arguments.length;");
                          emitEnd(restParam);
                          write(" ");
                          emitStart(restParam);
                          write(tempName + "++");
                          emitEnd(restParam);
                          write(") {");
                          increaseIndent();
                          writeLine();
                          emitStart(restParam);
                          emitNodeWithoutSourceMap(restParam.name);
                          write("[" + tempName + " - " + restIndex + "] = arguments[" + tempName + "];");
                          emitEnd(restParam);
                          decreaseIndent();
                          writeLine();
                          write("}");
                      }
                  }
                  function emitAccessor(node) {
                      write(node.kind === 137 ? "get " : "set ");
                      emit(node.name, false);
                      emitSignatureAndBody(node);
                  }
                  function shouldEmitAsArrowFunction(node) {
                      return node.kind === 164 && languageVersion >= 2;
                  }
                  function emitDeclarationName(node) {
                      if (node.name) {
                          emitNodeWithoutSourceMap(node.name);
                      }
                      else {
                          write(getGeneratedNameForNode(node));
                      }
                  }
                  function shouldEmitFunctionName(node) {
                      if (node.kind === 163) {
                          return !!node.name;
                      }
                      if (node.kind === 201) {
                          return !!node.name || languageVersion < 2;
                      }
                  }
                  function emitFunctionDeclaration(node) {
                      if (ts.nodeIsMissing(node.body)) {
                          return emitOnlyPinnedOrTripleSlashComments(node);
                      }
                      if (node.kind !== 135 && node.kind !== 134) {
                          emitLeadingComments(node);
                      }
                      if (!shouldEmitAsArrowFunction(node)) {
                          if (isES6ExportedDeclaration(node)) {
                              write("export ");
                              if (node.flags & 256) {
                                  write("default ");
                              }
                          }
                          write("function");
                          if (languageVersion >= 2 && node.asteriskToken) {
                              write("*");
                          }
                          write(" ");
                      }
                      if (shouldEmitFunctionName(node)) {
                          emitDeclarationName(node);
                      }
                      emitSignatureAndBody(node);
                      if (languageVersion < 2 && node.kind === 201 && node.parent === currentSourceFile && node.name) {
                          emitExportMemberAssignments(node.name);
                      }
                      if (node.kind !== 135 && node.kind !== 134) {
                          emitTrailingComments(node);
                      }
                  }
                  function emitCaptureThisForNodeIfNecessary(node) {
                      if (resolver.getNodeCheckFlags(node) & 4) {
                          writeLine();
                          emitStart(node);
                          write("var _this = this;");
                          emitEnd(node);
                      }
                  }
                  function emitSignatureParameters(node) {
                      increaseIndent();
                      write("(");
                      if (node) {
                          var parameters = node.parameters;
                          var omitCount = languageVersion < 2 && ts.hasRestParameters(node) ? 1 : 0;
                          emitList(parameters, 0, parameters.length - omitCount, false, false);
                      }
                      write(")");
                      decreaseIndent();
                  }
                  function emitSignatureParametersForArrow(node) {
                      if (node.parameters.length === 1 && node.pos === node.parameters[0].pos) {
                          emit(node.parameters[0]);
                          return;
                      }
                      emitSignatureParameters(node);
                  }
                  function emitSignatureAndBody(node) {
                      var saveTempFlags = tempFlags;
                      var saveTempVariables = tempVariables;
                      var saveTempParameters = tempParameters;
                      tempFlags = 0;
                      tempVariables = undefined;
                      tempParameters = undefined;
                      if (shouldEmitAsArrowFunction(node)) {
                          emitSignatureParametersForArrow(node);
                          write(" =>");
                      }
                      else {
                          emitSignatureParameters(node);
                      }
                      if (!node.body) {
                          write(" { }");
                      }
                      else if (node.body.kind === 180) {
                          emitBlockFunctionBody(node, node.body);
                      }
                      else {
                          emitExpressionFunctionBody(node, node.body);
                      }
                      if (!isES6ExportedDeclaration(node)) {
                          emitExportMemberAssignment(node);
                      }
                      tempFlags = saveTempFlags;
                      tempVariables = saveTempVariables;
                      tempParameters = saveTempParameters;
                  }
                  function emitFunctionBodyPreamble(node) {
                      emitCaptureThisForNodeIfNecessary(node);
                      emitDefaultValueAssignments(node);
                      emitRestParameter(node);
                  }
                  function emitExpressionFunctionBody(node, body) {
                      if (languageVersion < 2) {
                          emitDownLevelExpressionFunctionBody(node, body);
                          return;
                      }
                      write(" ");
                      var current = body;
                      while (current.kind === 161) {
                          current = current.expression;
                      }
                      emitParenthesizedIf(body, current.kind === 155);
                  }
                  function emitDownLevelExpressionFunctionBody(node, body) {
                      write(" {");
                      scopeEmitStart(node);
                      increaseIndent();
                      var outPos = writer.getTextPos();
                      emitDetachedComments(node.body);
                      emitFunctionBodyPreamble(node);
                      var preambleEmitted = writer.getTextPos() !== outPos;
                      decreaseIndent();
                      if (!preambleEmitted && nodeStartPositionsAreOnSameLine(node, body)) {
                          write(" ");
                          emitStart(body);
                          write("return ");
                          emit(body);
                          emitEnd(body);
                          write(";");
                          emitTempDeclarations(false);
                          write(" ");
                      }
                      else {
                          increaseIndent();
                          writeLine();
                          emitLeadingComments(node.body);
                          write("return ");
                          emit(body);
                          write(";");
                          emitTrailingComments(node.body);
                          emitTempDeclarations(true);
                          decreaseIndent();
                          writeLine();
                      }
                      emitStart(node.body);
                      write("}");
                      emitEnd(node.body);
                      scopeEmitEnd();
                  }
                  function emitBlockFunctionBody(node, body) {
                      write(" {");
                      scopeEmitStart(node);
                      var initialTextPos = writer.getTextPos();
                      increaseIndent();
                      emitDetachedComments(body.statements);
                      var startIndex = emitDirectivePrologues(body.statements, true);
                      emitFunctionBodyPreamble(node);
                      decreaseIndent();
                      var preambleEmitted = writer.getTextPos() !== initialTextPos;
                      if (!preambleEmitted && nodeEndIsOnSameLineAsNodeStart(body, body)) {
                          for (var _a = 0, _b = body.statements; _a < _b.length; _a++) {
                              var statement = _b[_a];
                              write(" ");
                              emit(statement);
                          }
                          emitTempDeclarations(false);
                          write(" ");
                          emitLeadingCommentsOfPosition(body.statements.end);
                      }
                      else {
                          increaseIndent();
                          emitLinesStartingAt(body.statements, startIndex);
                          emitTempDeclarations(true);
                          writeLine();
                          emitLeadingCommentsOfPosition(body.statements.end);
                          decreaseIndent();
                      }
                      emitToken(15, body.statements.end);
                      scopeEmitEnd();
                  }
                  function findInitialSuperCall(ctor) {
                      if (ctor.body) {
                          var statement = ctor.body.statements[0];
                          if (statement && statement.kind === 183) {
                              var expr = statement.expression;
                              if (expr && expr.kind === 158) {
                                  var func = expr.expression;
                                  if (func && func.kind === 91) {
                                      return statement;
                                  }
                              }
                          }
                      }
                  }
                  function emitParameterPropertyAssignments(node) {
                      ts.forEach(node.parameters, function (param) {
                          if (param.flags & 112) {
                              writeLine();
                              emitStart(param);
                              emitStart(param.name);
                              write("this.");
                              emitNodeWithoutSourceMap(param.name);
                              emitEnd(param.name);
                              write(" = ");
                              emit(param.name);
                              write(";");
                              emitEnd(param);
                          }
                      });
                  }
                  function emitMemberAccessForPropertyName(memberName) {
                      if (memberName.kind === 8 || memberName.kind === 7) {
                          write("[");
                          emitNodeWithoutSourceMap(memberName);
                          write("]");
                      }
                      else if (memberName.kind === 128) {
                          emitComputedPropertyName(memberName);
                      }
                      else {
                          write(".");
                          emitNodeWithoutSourceMap(memberName);
                      }
                  }
                  function getInitializedProperties(node, isStatic) {
                      var properties = [];
                      for (var _a = 0, _b = node.members; _a < _b.length; _a++) {
                          var member = _b[_a];
                          if (member.kind === 133 && isStatic === ((member.flags & 128) !== 0) && member.initializer) {
                              properties.push(member);
                          }
                      }
                      return properties;
                  }
                  function emitPropertyDeclarations(node, properties) {
                      for (var _a = 0; _a < properties.length; _a++) {
                          var property = properties[_a];
                          emitPropertyDeclaration(node, property);
                      }
                  }
                  function emitPropertyDeclaration(node, property, receiver, isExpression) {
                      writeLine();
                      emitLeadingComments(property);
                      emitStart(property);
                      emitStart(property.name);
                      if (receiver) {
                          emit(receiver);
                      }
                      else {
                          if (property.flags & 128) {
                              emitDeclarationName(node);
                          }
                          else {
                              write("this");
                          }
                      }
                      emitMemberAccessForPropertyName(property.name);
                      emitEnd(property.name);
                      write(" = ");
                      emit(property.initializer);
                      if (!isExpression) {
                          write(";");
                      }
                      emitEnd(property);
                      emitTrailingComments(property);
                  }
                  function emitMemberFunctionsForES5AndLower(node) {
                      ts.forEach(node.members, function (member) {
                          if (member.kind === 179) {
                              writeLine();
                              write(";");
                          }
                          else if (member.kind === 135 || node.kind === 134) {
                              if (!member.body) {
                                  return emitOnlyPinnedOrTripleSlashComments(member);
                              }
                              writeLine();
                              emitLeadingComments(member);
                              emitStart(member);
                              emitStart(member.name);
                              emitClassMemberPrefix(node, member);
                              emitMemberAccessForPropertyName(member.name);
                              emitEnd(member.name);
                              write(" = ");
                              emitStart(member);
                              emitFunctionDeclaration(member);
                              emitEnd(member);
                              emitEnd(member);
                              write(";");
                              emitTrailingComments(member);
                          }
                          else if (member.kind === 137 || member.kind === 138) {
                              var accessors = ts.getAllAccessorDeclarations(node.members, member);
                              if (member === accessors.firstAccessor) {
                                  writeLine();
                                  emitStart(member);
                                  write("Object.defineProperty(");
                                  emitStart(member.name);
                                  emitClassMemberPrefix(node, member);
                                  write(", ");
                                  emitExpressionForPropertyName(member.name);
                                  emitEnd(member.name);
                                  write(", {");
                                  increaseIndent();
                                  if (accessors.getAccessor) {
                                      writeLine();
                                      emitLeadingComments(accessors.getAccessor);
                                      write("get: ");
                                      emitStart(accessors.getAccessor);
                                      write("function ");
                                      emitSignatureAndBody(accessors.getAccessor);
                                      emitEnd(accessors.getAccessor);
                                      emitTrailingComments(accessors.getAccessor);
                                      write(",");
                                  }
                                  if (accessors.setAccessor) {
                                      writeLine();
                                      emitLeadingComments(accessors.setAccessor);
                                      write("set: ");
                                      emitStart(accessors.setAccessor);
                                      write("function ");
                                      emitSignatureAndBody(accessors.setAccessor);
                                      emitEnd(accessors.setAccessor);
                                      emitTrailingComments(accessors.setAccessor);
                                      write(",");
                                  }
                                  writeLine();
                                  write("enumerable: true,");
                                  writeLine();
                                  write("configurable: true");
                                  decreaseIndent();
                                  writeLine();
                                  write("});");
                                  emitEnd(member);
                              }
                          }
                      });
                  }
                  function emitMemberFunctionsForES6AndHigher(node) {
                      for (var _a = 0, _b = node.members; _a < _b.length; _a++) {
                          var member = _b[_a];
                          if ((member.kind === 135 || node.kind === 134) && !member.body) {
                              emitOnlyPinnedOrTripleSlashComments(member);
                          }
                          else if (member.kind === 135 ||
                              member.kind === 137 ||
                              member.kind === 138) {
                              writeLine();
                              emitLeadingComments(member);
                              emitStart(member);
                              if (member.flags & 128) {
                                  write("static ");
                              }
                              if (member.kind === 137) {
                                  write("get ");
                              }
                              else if (member.kind === 138) {
                                  write("set ");
                              }
                              if (member.asteriskToken) {
                                  write("*");
                              }
                              emit(member.name);
                              emitSignatureAndBody(member);
                              emitEnd(member);
                              emitTrailingComments(member);
                          }
                          else if (member.kind === 179) {
                              writeLine();
                              write(";");
                          }
                      }
                  }
                  function emitConstructor(node, baseTypeElement) {
                      var saveTempFlags = tempFlags;
                      var saveTempVariables = tempVariables;
                      var saveTempParameters = tempParameters;
                      tempFlags = 0;
                      tempVariables = undefined;
                      tempParameters = undefined;
                      emitConstructorWorker(node, baseTypeElement);
                      tempFlags = saveTempFlags;
                      tempVariables = saveTempVariables;
                      tempParameters = saveTempParameters;
                  }
                  function emitConstructorWorker(node, baseTypeElement) {
                      var hasInstancePropertyWithInitializer = false;
                      ts.forEach(node.members, function (member) {
                          if (member.kind === 136 && !member.body) {
                              emitOnlyPinnedOrTripleSlashComments(member);
                          }
                          if (member.kind === 133 && member.initializer && (member.flags & 128) === 0) {
                              hasInstancePropertyWithInitializer = true;
                          }
                      });
                      var ctor = ts.getFirstConstructorWithBody(node);
                      if (languageVersion >= 2 && !ctor && !hasInstancePropertyWithInitializer) {
                          return;
                      }
                      if (ctor) {
                          emitLeadingComments(ctor);
                      }
                      emitStart(ctor || node);
                      if (languageVersion < 2) {
                          write("function ");
                          emitDeclarationName(node);
                          emitSignatureParameters(ctor);
                      }
                      else {
                          write("constructor");
                          if (ctor) {
                              emitSignatureParameters(ctor);
                          }
                          else {
                              if (baseTypeElement) {
                                  write("(...args)");
                              }
                              else {
                                  write("()");
                              }
                          }
                      }
                      write(" {");
                      scopeEmitStart(node, "constructor");
                      increaseIndent();
                      if (ctor) {
                          emitDetachedComments(ctor.body.statements);
                      }
                      emitCaptureThisForNodeIfNecessary(node);
                      if (ctor) {
                          emitDefaultValueAssignments(ctor);
                          emitRestParameter(ctor);
                          if (baseTypeElement) {
                              var superCall = findInitialSuperCall(ctor);
                              if (superCall) {
                                  writeLine();
                                  emit(superCall);
                              }
                          }
                          emitParameterPropertyAssignments(ctor);
                      }
                      else {
                          if (baseTypeElement) {
                              writeLine();
                              emitStart(baseTypeElement);
                              if (languageVersion < 2) {
                                  write("_super.apply(this, arguments);");
                              }
                              else {
                                  write("super(...args);");
                              }
                              emitEnd(baseTypeElement);
                          }
                      }
                      emitPropertyDeclarations(node, getInitializedProperties(node, false));
                      if (ctor) {
                          var statements = ctor.body.statements;
                          if (superCall) {
                              statements = statements.slice(1);
                          }
                          emitLines(statements);
                      }
                      emitTempDeclarations(true);
                      writeLine();
                      if (ctor) {
                          emitLeadingCommentsOfPosition(ctor.body.statements.end);
                      }
                      decreaseIndent();
                      emitToken(15, ctor ? ctor.body.statements.end : node.members.end);
                      scopeEmitEnd();
                      emitEnd(ctor || node);
                      if (ctor) {
                          emitTrailingComments(ctor);
                      }
                  }
                  function emitClassExpression(node) {
                      return emitClassLikeDeclaration(node);
                  }
                  function emitClassDeclaration(node) {
                      return emitClassLikeDeclaration(node);
                  }
                  function emitClassLikeDeclaration(node) {
                      if (languageVersion < 2) {
                          emitClassLikeDeclarationBelowES6(node);
                      }
                      else {
                          emitClassLikeDeclarationForES6AndHigher(node);
                      }
                  }
                  function emitClassLikeDeclarationForES6AndHigher(node) {
                      var thisNodeIsDecorated = ts.nodeIsDecorated(node);
                      if (node.kind === 202) {
                          if (thisNodeIsDecorated) {
                              if (isES6ExportedDeclaration(node) && !(node.flags & 256)) {
                                  write("export ");
                              }
                              write("let ");
                              emitDeclarationName(node);
                              write(" = ");
                          }
                          else if (isES6ExportedDeclaration(node)) {
                              write("export ");
                              if (node.flags & 256) {
                                  write("default ");
                              }
                          }
                      }
                      var staticProperties = getInitializedProperties(node, true);
                      var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 175;
                      var tempVariable;
                      if (isClassExpressionWithStaticProperties) {
                          tempVariable = createAndRecordTempVariable(0);
                          write("(");
                          increaseIndent();
                          emit(tempVariable);
                          write(" = ");
                      }
                      write("class");
                      if ((node.name || !(node.flags & 256)) && !thisNodeIsDecorated) {
                          write(" ");
                          emitDeclarationName(node);
                      }
                      var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
                      if (baseTypeNode) {
                          write(" extends ");
                          emit(baseTypeNode.expression);
                      }
                      write(" {");
                      increaseIndent();
                      scopeEmitStart(node);
                      writeLine();
                      emitConstructor(node, baseTypeNode);
                      emitMemberFunctionsForES6AndHigher(node);
                      decreaseIndent();
                      writeLine();
                      emitToken(15, node.members.end);
                      scopeEmitEnd();
                      if (thisNodeIsDecorated) {
                          write(";");
                      }
                      if (isClassExpressionWithStaticProperties) {
                          for (var _a = 0; _a < staticProperties.length; _a++) {
                              var property = staticProperties[_a];
                              write(",");
                              writeLine();
                              emitPropertyDeclaration(node, property, tempVariable, true);
                          }
                          write(",");
                          writeLine();
                          emit(tempVariable);
                          decreaseIndent();
                          write(")");
                      }
                      else {
                          writeLine();
                          emitPropertyDeclarations(node, staticProperties);
                          emitDecoratorsOfClass(node);
                      }
                      if (!isES6ExportedDeclaration(node) && (node.flags & 1)) {
                          writeLine();
                          emitStart(node);
                          emitModuleMemberName(node);
                          write(" = ");
                          emitDeclarationName(node);
                          emitEnd(node);
                          write(";");
                      }
                      else if (isES6ExportedDeclaration(node) && (node.flags & 256) && thisNodeIsDecorated) {
                          writeLine();
                          write("export default ");
                          emitDeclarationName(node);
                          write(";");
                      }
                  }
                  function emitClassLikeDeclarationBelowES6(node) {
                      if (node.kind === 202) {
                          if (!shouldHoistDeclarationInSystemJsModule(node)) {
                              write("var ");
                          }
                          emitDeclarationName(node);
                          write(" = ");
                      }
                      write("(function (");
                      var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
                      if (baseTypeNode) {
                          write("_super");
                      }
                      write(") {");
                      var saveTempFlags = tempFlags;
                      var saveTempVariables = tempVariables;
                      var saveTempParameters = tempParameters;
                      var saveComputedPropertyNamesToGeneratedNames = computedPropertyNamesToGeneratedNames;
                      tempFlags = 0;
                      tempVariables = undefined;
                      tempParameters = undefined;
                      computedPropertyNamesToGeneratedNames = undefined;
                      increaseIndent();
                      scopeEmitStart(node);
                      if (baseTypeNode) {
                          writeLine();
                          emitStart(baseTypeNode);
                          write("__extends(");
                          emitDeclarationName(node);
                          write(", _super);");
                          emitEnd(baseTypeNode);
                      }
                      writeLine();
                      emitConstructor(node, baseTypeNode);
                      emitMemberFunctionsForES5AndLower(node);
                      emitPropertyDeclarations(node, getInitializedProperties(node, true));
                      writeLine();
                      emitDecoratorsOfClass(node);
                      writeLine();
                      emitToken(15, node.members.end, function () {
                          write("return ");
                          emitDeclarationName(node);
                      });
                      write(";");
                      emitTempDeclarations(true);
                      tempFlags = saveTempFlags;
                      tempVariables = saveTempVariables;
                      tempParameters = saveTempParameters;
                      computedPropertyNamesToGeneratedNames = saveComputedPropertyNamesToGeneratedNames;
                      decreaseIndent();
                      writeLine();
                      emitToken(15, node.members.end);
                      scopeEmitEnd();
                      emitStart(node);
                      write(")(");
                      if (baseTypeNode) {
                          emit(baseTypeNode.expression);
                      }
                      write(")");
                      if (node.kind === 202) {
                          write(";");
                      }
                      emitEnd(node);
                      if (node.kind === 202) {
                          emitExportMemberAssignment(node);
                      }
                      if (languageVersion < 2 && node.parent === currentSourceFile && node.name) {
                          emitExportMemberAssignments(node.name);
                      }
                  }
                  function emitClassMemberPrefix(node, member) {
                      emitDeclarationName(node);
                      if (!(member.flags & 128)) {
                          write(".prototype");
                      }
                  }
                  function emitDecoratorsOfClass(node) {
                      emitDecoratorsOfMembers(node, 0);
                      emitDecoratorsOfMembers(node, 128);
                      emitDecoratorsOfConstructor(node);
                  }
                  function emitDecoratorsOfConstructor(node) {
                      var decorators = node.decorators;
                      var constructor = ts.getFirstConstructorWithBody(node);
                      var hasDecoratedParameters = constructor && ts.forEach(constructor.parameters, ts.nodeIsDecorated);
                      if (!decorators && !hasDecoratedParameters) {
                          return;
                      }
                      writeLine();
                      emitStart(node);
                      emitDeclarationName(node);
                      write(" = __decorate([");
                      increaseIndent();
                      writeLine();
                      var decoratorCount = decorators ? decorators.length : 0;
                      var argumentsWritten = emitList(decorators, 0, decoratorCount, true, false, false, true, function (decorator) {
                          emitStart(decorator);
                          emit(decorator.expression);
                          emitEnd(decorator);
                      });
                      argumentsWritten += emitDecoratorsOfParameters(constructor, argumentsWritten > 0);
                      emitSerializedTypeMetadata(node, argumentsWritten >= 0);
                      decreaseIndent();
                      writeLine();
                      write("], ");
                      emitDeclarationName(node);
                      write(");");
                      emitEnd(node);
                      writeLine();
                  }
                  function emitDecoratorsOfMembers(node, staticFlag) {
                      for (var _a = 0, _b = node.members; _a < _b.length; _a++) {
                          var member = _b[_a];
                          if ((member.flags & 128) !== staticFlag) {
                              continue;
                          }
                          if (!ts.nodeCanBeDecorated(member)) {
                              continue;
                          }
                          if (!ts.nodeOrChildIsDecorated(member)) {
                              continue;
                          }
                          var decorators = void 0;
                          var functionLikeMember = void 0;
                          if (ts.isAccessor(member)) {
                              var accessors = ts.getAllAccessorDeclarations(node.members, member);
                              if (member !== accessors.firstAccessor) {
                                  continue;
                              }
                              decorators = accessors.firstAccessor.decorators;
                              if (!decorators && accessors.secondAccessor) {
                                  decorators = accessors.secondAccessor.decorators;
                              }
                              functionLikeMember = accessors.setAccessor;
                          }
                          else {
                              decorators = member.decorators;
                              if (member.kind === 135) {
                                  functionLikeMember = member;
                              }
                          }
                          writeLine();
                          emitStart(member);
                          if (member.kind !== 133) {
                              write("Object.defineProperty(");
                              emitStart(member.name);
                              emitClassMemberPrefix(node, member);
                              write(", ");
                              emitExpressionForPropertyName(member.name);
                              emitEnd(member.name);
                              write(",");
                              increaseIndent();
                              writeLine();
                          }
                          write("__decorate([");
                          increaseIndent();
                          writeLine();
                          var decoratorCount = decorators ? decorators.length : 0;
                          var argumentsWritten = emitList(decorators, 0, decoratorCount, true, false, false, true, function (decorator) {
                              emitStart(decorator);
                              emit(decorator.expression);
                              emitEnd(decorator);
                          });
                          argumentsWritten += emitDecoratorsOfParameters(functionLikeMember, argumentsWritten > 0);
                          emitSerializedTypeMetadata(member, argumentsWritten > 0);
                          decreaseIndent();
                          writeLine();
                          write("], ");
                          emitStart(member.name);
                          emitClassMemberPrefix(node, member);
                          write(", ");
                          emitExpressionForPropertyName(member.name);
                          emitEnd(member.name);
                          if (member.kind !== 133) {
                              write(", Object.getOwnPropertyDescriptor(");
                              emitStart(member.name);
                              emitClassMemberPrefix(node, member);
                              write(", ");
                              emitExpressionForPropertyName(member.name);
                              emitEnd(member.name);
                              write("))");
                              decreaseIndent();
                          }
                          write(");");
                          emitEnd(member);
                          writeLine();
                      }
                  }
                  function emitDecoratorsOfParameters(node, leadingComma) {
                      var argumentsWritten = 0;
                      if (node) {
                          var parameterIndex = 0;
                          for (var _a = 0, _b = node.parameters; _a < _b.length; _a++) {
                              var parameter = _b[_a];
                              if (ts.nodeIsDecorated(parameter)) {
                                  var decorators = parameter.decorators;
                                  argumentsWritten += emitList(decorators, 0, decorators.length, true, false, leadingComma, true, function (decorator) {
                                      emitStart(decorator);
                                      write("__param(" + parameterIndex + ", ");
                                      emit(decorator.expression);
                                      write(")");
                                      emitEnd(decorator);
                                  });
                                  leadingComma = true;
                              }
                              ++parameterIndex;
                          }
                      }
                      return argumentsWritten;
                  }
                  function shouldEmitTypeMetadata(node) {
                      switch (node.kind) {
                          case 135:
                          case 137:
                          case 138:
                          case 133:
                              return true;
                      }
                      return false;
                  }
                  function shouldEmitReturnTypeMetadata(node) {
                      switch (node.kind) {
                          case 135:
                              return true;
                      }
                      return false;
                  }
                  function shouldEmitParamTypesMetadata(node) {
                      switch (node.kind) {
                          case 202:
                          case 135:
                          case 138:
                              return true;
                      }
                      return false;
                  }
                  function emitSerializedTypeMetadata(node, writeComma) {
                      var argumentsWritten = 0;
                      if (compilerOptions.emitDecoratorMetadata) {
                          if (shouldEmitTypeMetadata(node)) {
                              var serializedType = resolver.serializeTypeOfNode(node, getGeneratedNameForNode);
                              if (serializedType) {
                                  if (writeComma) {
                                      write(", ");
                                  }
                                  writeLine();
                                  write("__metadata('design:type', ");
                                  emitSerializedType(node, serializedType);
                                  write(")");
                                  argumentsWritten++;
                              }
                          }
                          if (shouldEmitParamTypesMetadata(node)) {
                              var serializedTypes = resolver.serializeParameterTypesOfNode(node, getGeneratedNameForNode);
                              if (serializedTypes) {
                                  if (writeComma || argumentsWritten) {
                                      write(", ");
                                  }
                                  writeLine();
                                  write("__metadata('design:paramtypes', [");
                                  for (var i = 0; i < serializedTypes.length; ++i) {
                                      if (i > 0) {
                                          write(", ");
                                      }
                                      emitSerializedType(node, serializedTypes[i]);
                                  }
                                  write("])");
                                  argumentsWritten++;
                              }
                          }
                          if (shouldEmitReturnTypeMetadata(node)) {
                              var serializedType = resolver.serializeReturnTypeOfNode(node, getGeneratedNameForNode);
                              if (serializedType) {
                                  if (writeComma || argumentsWritten) {
                                      write(", ");
                                  }
                                  writeLine();
                                  write("__metadata('design:returntype', ");
                                  emitSerializedType(node, serializedType);
                                  write(")");
                                  argumentsWritten++;
                              }
                          }
                      }
                      return argumentsWritten;
                  }
                  function serializeTypeNameSegment(location, path, index) {
                      switch (index) {
                          case 0:
                              return "typeof " + path[index] + " !== 'undefined' && " + path[index];
                          case 1:
                              return serializeTypeNameSegment(location, path, index - 1) + "." + path[index];
                          default:
                              var temp = createAndRecordTempVariable(0).text;
                              return "(" + temp + " = " + serializeTypeNameSegment(location, path, index - 1) + ") && " + temp + "." + path[index];
                      }
                  }
                  function emitSerializedType(location, name) {
                      if (typeof name === "string") {
                          write(name);
                          return;
                      }
                      else {
                          ts.Debug.assert(name.length > 0, "Invalid serialized type name");
                          write("(" + serializeTypeNameSegment(location, name, name.length - 1) + ") || Object");
                      }
                  }
                  function emitInterfaceDeclaration(node) {
                      emitOnlyPinnedOrTripleSlashComments(node);
                  }
                  function shouldEmitEnumDeclaration(node) {
                      var isConstEnum = ts.isConst(node);
                      return !isConstEnum || compilerOptions.preserveConstEnums || compilerOptions.separateCompilation;
                  }
                  function emitEnumDeclaration(node) {
                      if (!shouldEmitEnumDeclaration(node)) {
                          return;
                      }
                      if (!shouldHoistDeclarationInSystemJsModule(node)) {
                          if (!(node.flags & 1) || isES6ExportedDeclaration(node)) {
                              emitStart(node);
                              if (isES6ExportedDeclaration(node)) {
                                  write("export ");
                              }
                              write("var ");
                              emit(node.name);
                              emitEnd(node);
                              write(";");
                          }
                      }
                      writeLine();
                      emitStart(node);
                      write("(function (");
                      emitStart(node.name);
                      write(getGeneratedNameForNode(node));
                      emitEnd(node.name);
                      write(") {");
                      increaseIndent();
                      scopeEmitStart(node);
                      emitLines(node.members);
                      decreaseIndent();
                      writeLine();
                      emitToken(15, node.members.end);
                      scopeEmitEnd();
                      write(")(");
                      emitModuleMemberName(node);
                      write(" || (");
                      emitModuleMemberName(node);
                      write(" = {}));");
                      emitEnd(node);
                      if (!isES6ExportedDeclaration(node) && node.flags & 1 && !shouldHoistDeclarationInSystemJsModule(node)) {
                          writeLine();
                          emitStart(node);
                          write("var ");
                          emit(node.name);
                          write(" = ");
                          emitModuleMemberName(node);
                          emitEnd(node);
                          write(";");
                      }
                      if (languageVersion < 2 && node.parent === currentSourceFile) {
                          if (compilerOptions.module === 4 && (node.flags & 1)) {
                              writeLine();
                              write(exportFunctionForFile + "(\"");
                              emitDeclarationName(node);
                              write("\", ");
                              emitDeclarationName(node);
                              write(")");
                          }
                          emitExportMemberAssignments(node.name);
                      }
                  }
                  function emitEnumMember(node) {
                      var enumParent = node.parent;
                      emitStart(node);
                      write(getGeneratedNameForNode(enumParent));
                      write("[");
                      write(getGeneratedNameForNode(enumParent));
                      write("[");
                      emitExpressionForPropertyName(node.name);
                      write("] = ");
                      writeEnumMemberDeclarationValue(node);
                      write("] = ");
                      emitExpressionForPropertyName(node.name);
                      emitEnd(node);
                      write(";");
                  }
                  function writeEnumMemberDeclarationValue(member) {
                      var value = resolver.getConstantValue(member);
                      if (value !== undefined) {
                          write(value.toString());
                          return;
                      }
                      else if (member.initializer) {
                          emit(member.initializer);
                      }
                      else {
                          write("undefined");
                      }
                  }
                  function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
                      if (moduleDeclaration.body.kind === 206) {
                          var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                          return recursiveInnerModule || moduleDeclaration.body;
                      }
                  }
                  function shouldEmitModuleDeclaration(node) {
                      return ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.separateCompilation);
                  }
                  function isModuleMergedWithES6Class(node) {
                      return languageVersion === 2 && !!(resolver.getNodeCheckFlags(node) & 2048);
                  }
                  function emitModuleDeclaration(node) {
                      var shouldEmit = shouldEmitModuleDeclaration(node);
                      if (!shouldEmit) {
                          return emitOnlyPinnedOrTripleSlashComments(node);
                      }
                      var hoistedInDeclarationScope = shouldHoistDeclarationInSystemJsModule(node);
                      var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node);
                      if (emitVarForModule) {
                          emitStart(node);
                          if (isES6ExportedDeclaration(node)) {
                              write("export ");
                          }
                          write("var ");
                          emit(node.name);
                          write(";");
                          emitEnd(node);
                          writeLine();
                      }
                      emitStart(node);
                      write("(function (");
                      emitStart(node.name);
                      write(getGeneratedNameForNode(node));
                      emitEnd(node.name);
                      write(") ");
                      if (node.body.kind === 207) {
                          var saveTempFlags = tempFlags;
                          var saveTempVariables = tempVariables;
                          tempFlags = 0;
                          tempVariables = undefined;
                          emit(node.body);
                          tempFlags = saveTempFlags;
                          tempVariables = saveTempVariables;
                      }
                      else {
                          write("{");
                          increaseIndent();
                          scopeEmitStart(node);
                          emitCaptureThisForNodeIfNecessary(node);
                          writeLine();
                          emit(node.body);
                          decreaseIndent();
                          writeLine();
                          var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body;
                          emitToken(15, moduleBlock.statements.end);
                          scopeEmitEnd();
                      }
                      write(")(");
                      if ((node.flags & 1) && !isES6ExportedDeclaration(node)) {
                          emit(node.name);
                          write(" = ");
                      }
                      emitModuleMemberName(node);
                      write(" || (");
                      emitModuleMemberName(node);
                      write(" = {}));");
                      emitEnd(node);
                      if (!isES6ExportedDeclaration(node) && node.name.kind === 65 && node.parent === currentSourceFile) {
                          if (compilerOptions.module === 4 && (node.flags & 1)) {
                              writeLine();
                              write(exportFunctionForFile + "(\"");
                              emitDeclarationName(node);
                              write("\", ");
                              emitDeclarationName(node);
                              write(")");
                          }
                          emitExportMemberAssignments(node.name);
                      }
                  }
                  function emitRequire(moduleName) {
                      if (moduleName.kind === 8) {
                          write("require(");
                          emitStart(moduleName);
                          emitLiteral(moduleName);
                          emitEnd(moduleName);
                          emitToken(17, moduleName.end);
                      }
                      else {
                          write("require()");
                      }
                  }
                  function getNamespaceDeclarationNode(node) {
                      if (node.kind === 209) {
                          return node;
                      }
                      var importClause = node.importClause;
                      if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 212) {
                          return importClause.namedBindings;
                      }
                  }
                  function isDefaultImport(node) {
                      return node.kind === 210 && node.importClause && !!node.importClause.name;
                  }
                  function emitExportImportAssignments(node) {
                      if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) {
                          emitExportMemberAssignments(node.name);
                      }
                      ts.forEachChild(node, emitExportImportAssignments);
                  }
                  function emitImportDeclaration(node) {
                      if (languageVersion < 2) {
                          return emitExternalImportDeclaration(node);
                      }
                      if (node.importClause) {
                          var shouldEmitDefaultBindings = resolver.isReferencedAliasDeclaration(node.importClause);
                          var shouldEmitNamedBindings = node.importClause.namedBindings && resolver.isReferencedAliasDeclaration(node.importClause.namedBindings, true);
                          if (shouldEmitDefaultBindings || shouldEmitNamedBindings) {
                              write("import ");
                              emitStart(node.importClause);
                              if (shouldEmitDefaultBindings) {
                                  emit(node.importClause.name);
                                  if (shouldEmitNamedBindings) {
                                      write(", ");
                                  }
                              }
                              if (shouldEmitNamedBindings) {
                                  emitLeadingComments(node.importClause.namedBindings);
                                  emitStart(node.importClause.namedBindings);
                                  if (node.importClause.namedBindings.kind === 212) {
                                      write("* as ");
                                      emit(node.importClause.namedBindings.name);
                                  }
                                  else {
                                      write("{ ");
                                      emitExportOrImportSpecifierList(node.importClause.namedBindings.elements, resolver.isReferencedAliasDeclaration);
                                      write(" }");
                                  }
                                  emitEnd(node.importClause.namedBindings);
                                  emitTrailingComments(node.importClause.namedBindings);
                              }
                              emitEnd(node.importClause);
                              write(" from ");
                              emit(node.moduleSpecifier);
                              write(";");
                          }
                      }
                      else {
                          write("import ");
                          emit(node.moduleSpecifier);
                          write(";");
                      }
                  }
                  function emitExternalImportDeclaration(node) {
                      if (ts.contains(externalImports, node)) {
                          var isExportedImport = node.kind === 209 && (node.flags & 1) !== 0;
                          var namespaceDeclaration = getNamespaceDeclarationNode(node);
                          if (compilerOptions.module !== 2) {
                              emitLeadingComments(node);
                              emitStart(node);
                              if (namespaceDeclaration && !isDefaultImport(node)) {
                                  if (!isExportedImport)
                                      write("var ");
                                  emitModuleMemberName(namespaceDeclaration);
                                  write(" = ");
                              }
                              else {
                                  var isNakedImport = 210 && !node.importClause;
                                  if (!isNakedImport) {
                                      write("var ");
                                      write(getGeneratedNameForNode(node));
                                      write(" = ");
                                  }
                              }
                              emitRequire(ts.getExternalModuleName(node));
                              if (namespaceDeclaration && isDefaultImport(node)) {
                                  write(", ");
                                  emitModuleMemberName(namespaceDeclaration);
                                  write(" = ");
                                  write(getGeneratedNameForNode(node));
                              }
                              write(";");
                              emitEnd(node);
                              emitExportImportAssignments(node);
                              emitTrailingComments(node);
                          }
                          else {
                              if (isExportedImport) {
                                  emitModuleMemberName(namespaceDeclaration);
                                  write(" = ");
                                  emit(namespaceDeclaration.name);
                                  write(";");
                              }
                              else if (namespaceDeclaration && isDefaultImport(node)) {
                                  write("var ");
                                  emitModuleMemberName(namespaceDeclaration);
                                  write(" = ");
                                  write(getGeneratedNameForNode(node));
                                  write(";");
                              }
                              emitExportImportAssignments(node);
                          }
                      }
                  }
                  function emitImportEqualsDeclaration(node) {
                      if (ts.isExternalModuleImportEqualsDeclaration(node)) {
                          emitExternalImportDeclaration(node);
                          return;
                      }
                      if (resolver.isReferencedAliasDeclaration(node) ||
                          (!ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportEqualsWithEntityName(node))) {
                          emitLeadingComments(node);
                          emitStart(node);
                          if (isES6ExportedDeclaration(node)) {
                              write("export ");
                              write("var ");
                          }
                          else if (!(node.flags & 1)) {
                              write("var ");
                          }
                          emitModuleMemberName(node);
                          write(" = ");
                          emit(node.moduleReference);
                          write(";");
                          emitEnd(node);
                          emitExportImportAssignments(node);
                          emitTrailingComments(node);
                      }
                  }
                  function emitExportDeclaration(node) {
                      ts.Debug.assert(compilerOptions.module !== 4);
                      if (languageVersion < 2) {
                          if (node.moduleSpecifier && (!node.exportClause || resolver.isValueAliasDeclaration(node))) {
                              emitStart(node);
                              var generatedName = getGeneratedNameForNode(node);
                              if (node.exportClause) {
                                  if (compilerOptions.module !== 2) {
                                      write("var ");
                                      write(generatedName);
                                      write(" = ");
                                      emitRequire(ts.getExternalModuleName(node));
                                      write(";");
                                  }
                                  for (var _a = 0, _b = node.exportClause.elements; _a < _b.length; _a++) {
                                      var specifier = _b[_a];
                                      if (resolver.isValueAliasDeclaration(specifier)) {
                                          writeLine();
                                          emitStart(specifier);
                                          emitContainingModuleName(specifier);
                                          write(".");
                                          emitNodeWithoutSourceMap(specifier.name);
                                          write(" = ");
                                          write(generatedName);
                                          write(".");
                                          emitNodeWithoutSourceMap(specifier.propertyName || specifier.name);
                                          write(";");
                                          emitEnd(specifier);
                                      }
                                  }
                              }
                              else {
                                  writeLine();
                                  write("__export(");
                                  if (compilerOptions.module !== 2) {
                                      emitRequire(ts.getExternalModuleName(node));
                                  }
                                  else {
                                      write(generatedName);
                                  }
                                  write(");");
                              }
                              emitEnd(node);
                          }
                      }
                      else {
                          if (!node.exportClause || resolver.isValueAliasDeclaration(node)) {
                              emitStart(node);
                              write("export ");
                              if (node.exportClause) {
                                  write("{ ");
                                  emitExportOrImportSpecifierList(node.exportClause.elements, resolver.isValueAliasDeclaration);
                                  write(" }");
                              }
                              else {
                                  write("*");
                              }
                              if (node.moduleSpecifier) {
                                  write(" from ");
                                  emitNodeWithoutSourceMap(node.moduleSpecifier);
                              }
                              write(";");
                              emitEnd(node);
                          }
                      }
                  }
                  function emitExportOrImportSpecifierList(specifiers, shouldEmit) {
                      ts.Debug.assert(languageVersion >= 2);
                      var needsComma = false;
                      for (var _a = 0; _a < specifiers.length; _a++) {
                          var specifier = specifiers[_a];
                          if (shouldEmit(specifier)) {
                              if (needsComma) {
                                  write(", ");
                              }
                              emitStart(specifier);
                              if (specifier.propertyName) {
                                  emitNodeWithoutSourceMap(specifier.propertyName);
                                  write(" as ");
                              }
                              emitNodeWithoutSourceMap(specifier.name);
                              emitEnd(specifier);
                              needsComma = true;
                          }
                      }
                  }
                  function emitExportAssignment(node) {
                      if (!node.isExportEquals && resolver.isValueAliasDeclaration(node)) {
                          if (languageVersion >= 2) {
                              writeLine();
                              emitStart(node);
                              write("export default ");
                              var expression = node.expression;
                              emit(expression);
                              if (expression.kind !== 201 &&
                                  expression.kind !== 202) {
                                  write(";");
                              }
                              emitEnd(node);
                          }
                          else {
                              writeLine();
                              emitStart(node);
                              if (compilerOptions.module === 4) {
                                  write(exportFunctionForFile + "(\"default\",");
                                  emit(node.expression);
                                  write(")");
                              }
                              else {
                                  emitContainingModuleName(node);
                                  if (languageVersion === 0) {
                                      write("[\"default\"] = ");
                                  }
                                  else {
                                      write(".default = ");
                                  }
                                  emit(node.expression);
                              }
                              write(";");
                              emitEnd(node);
                          }
                      }
                  }
                  function collectExternalModuleInfo(sourceFile) {
                      externalImports = [];
                      exportSpecifiers = {};
                      exportEquals = undefined;
                      hasExportStars = false;
                      for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) {
                          var node = _b[_a];
                          switch (node.kind) {
                              case 210:
                                  if (!node.importClause ||
                                      resolver.isReferencedAliasDeclaration(node.importClause, true)) {
                                      externalImports.push(node);
                                  }
                                  break;
                              case 209:
                                  if (node.moduleReference.kind === 220 && resolver.isReferencedAliasDeclaration(node)) {
                                      externalImports.push(node);
                                  }
                                  break;
                              case 216:
                                  if (node.moduleSpecifier) {
                                      if (!node.exportClause) {
                                          externalImports.push(node);
                                          hasExportStars = true;
                                      }
                                      else if (resolver.isValueAliasDeclaration(node)) {
                                          externalImports.push(node);
                                      }
                                  }
                                  else {
                                      for (var _c = 0, _d = node.exportClause.elements; _c < _d.length; _c++) {
                                          var specifier = _d[_c];
                                          var name_20 = (specifier.propertyName || specifier.name).text;
                                          (exportSpecifiers[name_20] || (exportSpecifiers[name_20] = [])).push(specifier);
                                      }
                                  }
                                  break;
                              case 215:
                                  if (node.isExportEquals && !exportEquals) {
                                      exportEquals = node;
                                  }
                                  break;
                          }
                      }
                  }
                  function emitExportStarHelper() {
                      if (hasExportStars) {
                          writeLine();
                          write("function __export(m) {");
                          increaseIndent();
                          writeLine();
                          write("for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];");
                          decreaseIndent();
                          writeLine();
                          write("}");
                      }
                  }
                  function getLocalNameForExternalImport(importNode) {
                      var namespaceDeclaration = getNamespaceDeclarationNode(importNode);
                      if (namespaceDeclaration && !isDefaultImport(importNode)) {
                          return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, namespaceDeclaration.name);
                      }
                      else {
                          return getGeneratedNameForNode(importNode);
                      }
                  }
                  function getExternalModuleNameText(importNode) {
                      var moduleName = ts.getExternalModuleName(importNode);
                      if (moduleName.kind === 8) {
                          return getLiteralText(moduleName);
                      }
                      return undefined;
                  }
                  function emitVariableDeclarationsForImports() {
                      if (externalImports.length === 0) {
                          return;
                      }
                      writeLine();
                      var started = false;
                      for (var _a = 0; _a < externalImports.length; _a++) {
                          var importNode = externalImports[_a];
                          var skipNode = importNode.kind === 216 ||
                              (importNode.kind === 210 && !importNode.importClause);
                          if (skipNode) {
                              continue;
                          }
                          if (!started) {
                              write("var ");
                              started = true;
                          }
                          else {
                              write(", ");
                          }
                          write(getLocalNameForExternalImport(importNode));
                      }
                      if (started) {
                          write(";");
                      }
                  }
                  function emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations) {
                      if (!hasExportStars) {
                          return undefined;
                      }
                      if (!exportedDeclarations && ts.isEmpty(exportSpecifiers)) {
                          var hasExportDeclarationWithExportClause = false;
                          for (var _a = 0; _a < externalImports.length; _a++) {
                              var externalImport = externalImports[_a];
                              if (externalImport.kind === 216 && externalImport.exportClause) {
                                  hasExportDeclarationWithExportClause = true;
                                  break;
                              }
                          }
                          if (!hasExportDeclarationWithExportClause) {
                              return emitExportStarFunction(undefined);
                          }
                      }
                      var exportedNamesStorageRef = makeUniqueName("exportedNames");
                      writeLine();
                      write("var " + exportedNamesStorageRef + " = {");
                      increaseIndent();
                      var started = false;
                      if (exportedDeclarations) {
                          for (var i = 0; i < exportedDeclarations.length; ++i) {
                              writeExportedName(exportedDeclarations[i]);
                          }
                      }
                      if (exportSpecifiers) {
                          for (var n in exportSpecifiers) {
                              for (var _b = 0, _c = exportSpecifiers[n]; _b < _c.length; _b++) {
                                  var specifier = _c[_b];
                                  writeExportedName(specifier.name);
                              }
                          }
                      }
                      for (var _d = 0; _d < externalImports.length; _d++) {
                          var externalImport = externalImports[_d];
                          if (externalImport.kind !== 216) {
                              continue;
                          }
                          var exportDecl = externalImport;
                          if (!exportDecl.exportClause) {
                              continue;
                          }
                          for (var _e = 0, _f = exportDecl.exportClause.elements; _e < _f.length; _e++) {
                              var element = _f[_e];
                              writeExportedName(element.name || element.propertyName);
                          }
                      }
                      decreaseIndent();
                      writeLine();
                      write("};");
                      return emitExportStarFunction(exportedNamesStorageRef);
                      function emitExportStarFunction(localNames) {
                          var exportStarFunction = makeUniqueName("exportStar");
                          writeLine();
                          write("function " + exportStarFunction + "(m) {");
                          increaseIndent();
                          writeLine();
                          write("for(var n in m) {");
                          increaseIndent();
                          writeLine();
                          write("if (n !== \"default\"");
                          if (localNames) {
                              write("&& !" + localNames + ".hasOwnProperty(n)");
                          }
                          write(") " + exportFunctionForFile + "(n, m[n]);");
                          decreaseIndent();
                          writeLine();
                          write("}");
                          decreaseIndent();
                          writeLine();
                          write("}");
                          return exportStarFunction;
                      }
                      function writeExportedName(node) {
                          if (node.kind !== 65 && node.flags & 256) {
                              return;
                          }
                          if (started) {
                              write(",");
                          }
                          else {
                              started = true;
                          }
                          writeLine();
                          write("'");
                          if (node.kind === 65) {
                              emitNodeWithoutSourceMap(node);
                          }
                          else {
                              emitDeclarationName(node);
                          }
                          write("': true");
                      }
                  }
                  function processTopLevelVariableAndFunctionDeclarations(node) {
                      var hoistedVars;
                      var hoistedFunctionDeclarations;
                      var exportedDeclarations;
                      visit(node);
                      if (hoistedVars) {
                          writeLine();
                          write("var ");
                          var seen = {};
                          for (var i = 0; i < hoistedVars.length; ++i) {
                              var local = hoistedVars[i];
                              var name_21 = local.kind === 65
                                  ? local
                                  : local.name;
                              if (name_21) {
                                  var text = ts.unescapeIdentifier(name_21.text);
                                  if (ts.hasProperty(seen, text)) {
                                      continue;
                                  }
                                  else {
                                      seen[text] = text;
                                  }
                              }
                              if (i !== 0) {
                                  write(", ");
                              }
                              if (local.kind === 202 || local.kind === 206 || local.kind === 205) {
                                  emitDeclarationName(local);
                              }
                              else {
                                  emit(local);
                              }
                              var flags = ts.getCombinedNodeFlags(local.kind === 65 ? local.parent : local);
                              if (flags & 1) {
                                  if (!exportedDeclarations) {
                                      exportedDeclarations = [];
                                  }
                                  exportedDeclarations.push(local);
                              }
                          }
                          write(";");
                      }
                      if (hoistedFunctionDeclarations) {
                          for (var _a = 0; _a < hoistedFunctionDeclarations.length; _a++) {
                              var f = hoistedFunctionDeclarations[_a];
                              writeLine();
                              emit(f);
                              if (f.flags & 1) {
                                  if (!exportedDeclarations) {
                                      exportedDeclarations = [];
                                  }
                                  exportedDeclarations.push(f);
                              }
                          }
                      }
                      return exportedDeclarations;
                      function visit(node) {
                          if (node.flags & 2) {
                              return;
                          }
                          if (node.kind === 201) {
                              if (!hoistedFunctionDeclarations) {
                                  hoistedFunctionDeclarations = [];
                              }
                              hoistedFunctionDeclarations.push(node);
                              return;
                          }
                          if (node.kind === 202) {
                              if (!hoistedVars) {
                                  hoistedVars = [];
                              }
                              hoistedVars.push(node);
                              return;
                          }
                          if (node.kind === 205) {
                              if (shouldEmitEnumDeclaration(node)) {
                                  if (!hoistedVars) {
                                      hoistedVars = [];
                                  }
                                  hoistedVars.push(node);
                              }
                              return;
                          }
                          if (node.kind === 206) {
                              if (shouldEmitModuleDeclaration(node)) {
                                  if (!hoistedVars) {
                                      hoistedVars = [];
                                  }
                                  hoistedVars.push(node);
                              }
                              return;
                          }
                          if (node.kind === 199 || node.kind === 153) {
                              if (shouldHoistVariable(node, false)) {
                                  var name_22 = node.name;
                                  if (name_22.kind === 65) {
                                      if (!hoistedVars) {
                                          hoistedVars = [];
                                      }
                                      hoistedVars.push(name_22);
                                  }
                                  else {
                                      ts.forEachChild(name_22, visit);
                                  }
                              }
                              return;
                          }
                          if (ts.isBindingPattern(node)) {
                              ts.forEach(node.elements, visit);
                              return;
                          }
                          if (!ts.isDeclaration(node)) {
                              ts.forEachChild(node, visit);
                          }
                      }
                  }
                  function shouldHoistVariable(node, checkIfSourceFileLevelDecl) {
                      if (checkIfSourceFileLevelDecl && !shouldHoistDeclarationInSystemJsModule(node)) {
                          return false;
                      }
                      return (ts.getCombinedNodeFlags(node) & 12288) === 0 ||
                          ts.getEnclosingBlockScopeContainer(node).kind === 228;
                  }
                  function isCurrentFileSystemExternalModule() {
                      return compilerOptions.module === 4 && ts.isExternalModule(currentSourceFile);
                  }
                  function emitSystemModuleBody(node, startIndex) {
                      emitVariableDeclarationsForImports();
                      writeLine();
                      var exportedDeclarations = processTopLevelVariableAndFunctionDeclarations(node);
                      var exportStarFunction = emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations);
                      writeLine();
                      write("return {");
                      increaseIndent();
                      writeLine();
                      emitSetters(exportStarFunction);
                      writeLine();
                      emitExecute(node, startIndex);
                      emitTempDeclarations(true);
                      decreaseIndent();
                      writeLine();
                      write("}");
                  }
                  function emitSetters(exportStarFunction) {
                      write("setters:[");
                      for (var i = 0; i < externalImports.length; ++i) {
                          if (i !== 0) {
                              write(",");
                          }
                          writeLine();
                          increaseIndent();
                          var importNode = externalImports[i];
                          var importVariableName = getLocalNameForExternalImport(importNode) || "";
                          var parameterName = "_" + importVariableName;
                          write("function (" + parameterName + ") {");
                          switch (importNode.kind) {
                              case 210:
                                  if (!importNode.importClause) {
                                      break;
                                  }
                              case 209:
                                  ts.Debug.assert(importVariableName !== "");
                                  increaseIndent();
                                  writeLine();
                                  write(importVariableName + " = " + parameterName + ";");
                                  writeLine();
                                  var defaultName = importNode.kind === 210
                                      ? importNode.importClause.name
                                      : importNode.name;
                                  if (defaultName) {
                                      emitExportMemberAssignments(defaultName);
                                      writeLine();
                                  }
                                  if (importNode.kind === 210 &&
                                      importNode.importClause.namedBindings) {
                                      var namedBindings = importNode.importClause.namedBindings;
                                      if (namedBindings.kind === 212) {
                                          emitExportMemberAssignments(namedBindings.name);
                                          writeLine();
                                      }
                                      else {
                                          for (var _a = 0, _b = namedBindings.elements; _a < _b.length; _a++) {
                                              var element = _b[_a];
                                              emitExportMemberAssignments(element.name || element.propertyName);
                                              writeLine();
                                          }
                                      }
                                  }
                                  decreaseIndent();
                                  break;
                              case 216:
                                  ts.Debug.assert(importVariableName !== "");
                                  increaseIndent();
                                  if (importNode.exportClause) {
                                      for (var _c = 0, _d = importNode.exportClause.elements; _c < _d.length; _c++) {
                                          var e = _d[_c];
                                          writeLine();
                                          write(exportFunctionForFile + "(\"");
                                          emitNodeWithoutSourceMap(e.name);
                                          write("\", " + parameterName + "[\"");
                                          emitNodeWithoutSourceMap(e.propertyName || e.name);
                                          write("\"]);");
                                      }
                                  }
                                  else {
                                      writeLine();
                                      write(exportStarFunction + "(" + parameterName + ");");
                                  }
                                  writeLine();
                                  decreaseIndent();
                                  break;
                          }
                          write("}");
                          decreaseIndent();
                      }
                      write("],");
                  }
                  function emitExecute(node, startIndex) {
                      write("execute: function() {");
                      increaseIndent();
                      writeLine();
                      for (var i = startIndex; i < node.statements.length; ++i) {
                          var statement = node.statements[i];
                          switch (statement.kind) {
                              case 216:
                              case 210:
                              case 209:
                              case 201:
                                  continue;
                          }
                          writeLine();
                          emit(statement);
                      }
                      decreaseIndent();
                      writeLine();
                      write("}");
                  }
                  function emitSystemModule(node, startIndex) {
                      collectExternalModuleInfo(node);
                      ts.Debug.assert(!exportFunctionForFile);
                      exportFunctionForFile = makeUniqueName("exports");
                      write("System.register([");
                      for (var i = 0; i < externalImports.length; ++i) {
                          var text = getExternalModuleNameText(externalImports[i]);
                          if (i !== 0) {
                              write(", ");
                          }
                          write(text);
                      }
                      write("], function(" + exportFunctionForFile + ") {");
                      writeLine();
                      increaseIndent();
                      emitCaptureThisForNodeIfNecessary(node);
                      emitSystemModuleBody(node, startIndex);
                      decreaseIndent();
                      writeLine();
                      write("});");
                  }
                  function emitAMDDependencies(node, includeNonAmdDependencies) {
                      // An AMD define function has the following shape:
                      //     define(id?, dependencies?, factory);
                      //
                      // This has the shape of
                      //     define(name, ["module1", "module2"], function (module1Alias) {
                      // The location of the alias in the parameter list in the factory function needs to
                      // match the position of the module name in the dependency list.
                      //
                      // To ensure this is true in cases of modules with no aliases, e.g.:
                      // `import "module"` or `<amd-dependency path= "a.css" />`
                      // we need to add modules without alias names to the end of the dependencies list
                      var aliasedModuleNames = [];
                      var unaliasedModuleNames = [];
                      var importAliasNames = [];
                      for (var _a = 0, _b = node.amdDependencies; _a < _b.length; _a++) {
                          var amdDependency = _b[_a];
                          if (amdDependency.name) {
                              aliasedModuleNames.push("\"" + amdDependency.path + "\"");
                              importAliasNames.push(amdDependency.name);
                          }
                          else {
                              unaliasedModuleNames.push("\"" + amdDependency.path + "\"");
                          }
                      }
                      for (var _c = 0; _c < externalImports.length; _c++) {
                          var importNode = externalImports[_c];
                          var externalModuleName = getExternalModuleNameText(importNode);
                          var importAliasName = getLocalNameForExternalImport(importNode);
                          if (includeNonAmdDependencies && importAliasName) {
                              aliasedModuleNames.push(externalModuleName);
                              importAliasNames.push(importAliasName);
                          }
                          else {
                              unaliasedModuleNames.push(externalModuleName);
                          }
                      }
                      write("[\"require\", \"exports\"");
                      if (aliasedModuleNames.length) {
                          write(", ");
                          write(aliasedModuleNames.join(", "));
                      }
                      if (unaliasedModuleNames.length) {
                          write(", ");
                          write(unaliasedModuleNames.join(", "));
                      }
                      write("], function (require, exports");
                      if (importAliasNames.length) {
                          write(", ");
                          write(importAliasNames.join(", "));
                      }
                  }
                  function emitAMDModule(node, startIndex) {
                      collectExternalModuleInfo(node);
                      writeLine();
                      write("define(");
                      if (node.amdModuleName) {
                          write("\"" + node.amdModuleName + "\", ");
                      }
                      emitAMDDependencies(node, true);
                      write(") {");
                      increaseIndent();
                      emitExportStarHelper();
                      emitCaptureThisForNodeIfNecessary(node);
                      emitLinesStartingAt(node.statements, startIndex);
                      emitTempDeclarations(true);
                      emitExportEquals(true);
                      decreaseIndent();
                      writeLine();
                      write("});");
                  }
                  function emitCommonJSModule(node, startIndex) {
                      collectExternalModuleInfo(node);
                      emitExportStarHelper();
                      emitCaptureThisForNodeIfNecessary(node);
                      emitLinesStartingAt(node.statements, startIndex);
                      emitTempDeclarations(true);
                      emitExportEquals(false);
                  }
                  function emitUMDModule(node, startIndex) {
                      collectExternalModuleInfo(node);
                      writeLines("(function (deps, factory) {\n    if (typeof module === 'object' && typeof module.exports === 'object') {\n        var v = factory(require, exports); if (v !== undefined) module.exports = v;\n    }\n    else if (typeof define === 'function' && define.amd) {\n        define(deps, factory);\n    }\n})(");
                      emitAMDDependencies(node, false);
                      write(") {");
                      increaseIndent();
                      emitExportStarHelper();
                      emitCaptureThisForNodeIfNecessary(node);
                      emitLinesStartingAt(node.statements, startIndex);
                      emitTempDeclarations(true);
                      emitExportEquals(true);
                      decreaseIndent();
                      writeLine();
                      write("});");
                  }
                  function emitES6Module(node, startIndex) {
                      externalImports = undefined;
                      exportSpecifiers = undefined;
                      exportEquals = undefined;
                      hasExportStars = false;
                      emitCaptureThisForNodeIfNecessary(node);
                      emitLinesStartingAt(node.statements, startIndex);
                      emitTempDeclarations(true);
                  }
                  function emitExportEquals(emitAsReturn) {
                      if (exportEquals && resolver.isValueAliasDeclaration(exportEquals)) {
                          writeLine();
                          emitStart(exportEquals);
                          write(emitAsReturn ? "return " : "module.exports = ");
                          emit(exportEquals.expression);
                          write(";");
                          emitEnd(exportEquals);
                      }
                  }
                  function emitDirectivePrologues(statements, startWithNewLine) {
                      for (var i = 0; i < statements.length; ++i) {
                          if (ts.isPrologueDirective(statements[i])) {
                              if (startWithNewLine || i > 0) {
                                  writeLine();
                              }
                              emit(statements[i]);
                          }
                          else {
                              return i;
                          }
                      }
                      return statements.length;
                  }
                  function writeLines(text) {
                      var lines = text.split(/\r\n|\r|\n/g);
                      for (var i = 0; i < lines.length; ++i) {
                          var line = lines[i];
                          if (line.length) {
                              writeLine();
                              write(line);
                          }
                      }
                  }
                  function emitSourceFileNode(node) {
                      writeLine();
                      emitDetachedComments(node);
                      var startIndex = emitDirectivePrologues(node.statements, false);
                      if (!compilerOptions.noEmitHelpers) {
                          if ((languageVersion < 2) && (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8)) {
                              writeLines(extendsHelper);
                              extendsEmitted = true;
                          }
                          if (!decorateEmitted && resolver.getNodeCheckFlags(node) & 512) {
                              writeLines(decorateHelper);
                              if (compilerOptions.emitDecoratorMetadata) {
                                  writeLines(metadataHelper);
                              }
                              decorateEmitted = true;
                          }
                          if (!paramEmitted && resolver.getNodeCheckFlags(node) & 1024) {
                              writeLines(paramHelper);
                              paramEmitted = true;
                          }
                      }
                      if (ts.isExternalModule(node) || compilerOptions.separateCompilation) {
                          if (languageVersion >= 2) {
                              emitES6Module(node, startIndex);
                          }
                          else if (compilerOptions.module === 2) {
                              emitAMDModule(node, startIndex);
                          }
                          else if (compilerOptions.module === 4) {
                              emitSystemModule(node, startIndex);
                          }
                          else if (compilerOptions.module === 3) {
                              emitUMDModule(node, startIndex);
                          }
                          else {
                              emitCommonJSModule(node, startIndex);
                          }
                      }
                      else {
                          externalImports = undefined;
                          exportSpecifiers = undefined;
                          exportEquals = undefined;
                          hasExportStars = false;
                          emitCaptureThisForNodeIfNecessary(node);
                          emitLinesStartingAt(node.statements, startIndex);
                          emitTempDeclarations(true);
                      }
                      emitLeadingComments(node.endOfFileToken);
                  }
                  function emitNodeWithoutSourceMap(node, allowGeneratedIdentifiers) {
                      if (!node) {
                          return;
                      }
                      if (node.flags & 2) {
                          return emitOnlyPinnedOrTripleSlashComments(node);
                      }
                      var emitComments = shouldEmitLeadingAndTrailingComments(node);
                      if (emitComments) {
                          emitLeadingComments(node);
                      }
                      emitJavaScriptWorker(node, allowGeneratedIdentifiers);
                      if (emitComments) {
                          emitTrailingComments(node);
                      }
                  }
                  function shouldEmitLeadingAndTrailingComments(node) {
                      switch (node.kind) {
                          case 203:
                          case 201:
                          case 210:
                          case 209:
                          case 204:
                          case 215:
                              return false;
                          case 206:
                              return shouldEmitModuleDeclaration(node);
                          case 205:
                              return shouldEmitEnumDeclaration(node);
                      }
                      if (node.kind !== 180 &&
                          node.parent &&
                          node.parent.kind === 164 &&
                          node.parent.body === node &&
                          compilerOptions.target <= 1) {
                          return false;
                      }
                      return true;
                  }
                  function emitJavaScriptWorker(node, allowGeneratedIdentifiers) {
                      if (allowGeneratedIdentifiers === void 0) { allowGeneratedIdentifiers = true; }
                      switch (node.kind) {
                          case 65:
                              return emitIdentifier(node, allowGeneratedIdentifiers);
                          case 130:
                              return emitParameter(node);
                          case 135:
                          case 134:
                              return emitMethod(node);
                          case 137:
                          case 138:
                              return emitAccessor(node);
                          case 93:
                              return emitThis(node);
                          case 91:
                              return emitSuper(node);
                          case 89:
                              return write("null");
                          case 95:
                              return write("true");
                          case 80:
                              return write("false");
                          case 7:
                          case 8:
                          case 9:
                          case 10:
                          case 11:
                          case 12:
                          case 13:
                              return emitLiteral(node);
                          case 172:
                              return emitTemplateExpression(node);
                          case 178:
                              return emitTemplateSpan(node);
                          case 127:
                              return emitQualifiedName(node);
                          case 151:
                              return emitObjectBindingPattern(node);
                          case 152:
                              return emitArrayBindingPattern(node);
                          case 153:
                              return emitBindingElement(node);
                          case 154:
                              return emitArrayLiteral(node);
                          case 155:
                              return emitObjectLiteral(node);
                          case 225:
                              return emitPropertyAssignment(node);
                          case 226:
                              return emitShorthandPropertyAssignment(node);
                          case 128:
                              return emitComputedPropertyName(node);
                          case 156:
                              return emitPropertyAccess(node);
                          case 157:
                              return emitIndexedAccess(node);
                          case 158:
                              return emitCallExpression(node);
                          case 159:
                              return emitNewExpression(node);
                          case 160:
                              return emitTaggedTemplateExpression(node);
                          case 161:
                              return emit(node.expression);
                          case 162:
                              return emitParenExpression(node);
                          case 201:
                          case 163:
                          case 164:
                              return emitFunctionDeclaration(node);
                          case 165:
                              return emitDeleteExpression(node);
                          case 166:
                              return emitTypeOfExpression(node);
                          case 167:
                              return emitVoidExpression(node);
                          case 168:
                              return emitPrefixUnaryExpression(node);
                          case 169:
                              return emitPostfixUnaryExpression(node);
                          case 170:
                              return emitBinaryExpression(node);
                          case 171:
                              return emitConditionalExpression(node);
                          case 174:
                              return emitSpreadElementExpression(node);
                          case 173:
                              return emitYieldExpression(node);
                          case 176:
                              return;
                          case 180:
                          case 207:
                              return emitBlock(node);
                          case 181:
                              return emitVariableStatement(node);
                          case 182:
                              return write(";");
                          case 183:
                              return emitExpressionStatement(node);
                          case 184:
                              return emitIfStatement(node);
                          case 185:
                              return emitDoStatement(node);
                          case 186:
                              return emitWhileStatement(node);
                          case 187:
                              return emitForStatement(node);
                          case 189:
                          case 188:
                              return emitForInOrForOfStatement(node);
                          case 190:
                          case 191:
                              return emitBreakOrContinueStatement(node);
                          case 192:
                              return emitReturnStatement(node);
                          case 193:
                              return emitWithStatement(node);
                          case 194:
                              return emitSwitchStatement(node);
                          case 221:
                          case 222:
                              return emitCaseOrDefaultClause(node);
                          case 195:
                              return emitLabelledStatement(node);
                          case 196:
                              return emitThrowStatement(node);
                          case 197:
                              return emitTryStatement(node);
                          case 224:
                              return emitCatchClause(node);
                          case 198:
                              return emitDebuggerStatement(node);
                          case 199:
                              return emitVariableDeclaration(node);
                          case 175:
                              return emitClassExpression(node);
                          case 202:
                              return emitClassDeclaration(node);
                          case 203:
                              return emitInterfaceDeclaration(node);
                          case 205:
                              return emitEnumDeclaration(node);
                          case 227:
                              return emitEnumMember(node);
                          case 206:
                              return emitModuleDeclaration(node);
                          case 210:
                              return emitImportDeclaration(node);
                          case 209:
                              return emitImportEqualsDeclaration(node);
                          case 216:
                              return emitExportDeclaration(node);
                          case 215:
                              return emitExportAssignment(node);
                          case 228:
                              return emitSourceFileNode(node);
                      }
                  }
                  function hasDetachedComments(pos) {
                      return detachedCommentsInfo !== undefined && ts.lastOrUndefined(detachedCommentsInfo).nodePos === pos;
                  }
                  function getLeadingCommentsWithoutDetachedComments() {
                      var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, ts.lastOrUndefined(detachedCommentsInfo).detachedCommentEndPos);
                      if (detachedCommentsInfo.length - 1) {
                          detachedCommentsInfo.pop();
                      }
                      else {
                          detachedCommentsInfo = undefined;
                      }
                      return leadingComments;
                  }
                  function filterComments(ranges, onlyPinnedOrTripleSlashComments) {
                      if (ranges && onlyPinnedOrTripleSlashComments) {
                          ranges = ts.filter(ranges, isPinnedOrTripleSlashComment);
                          if (ranges.length === 0) {
                              return undefined;
                          }
                      }
                      return ranges;
                  }
                  function getLeadingCommentsToEmit(node) {
                      if (node.parent) {
                          if (node.parent.kind === 228 || node.pos !== node.parent.pos) {
                              if (hasDetachedComments(node.pos)) {
                                  return getLeadingCommentsWithoutDetachedComments();
                              }
                              else {
                                  return ts.getLeadingCommentRangesOfNode(node, currentSourceFile);
                              }
                          }
                      }
                  }
                  function getTrailingCommentsToEmit(node) {
                      if (node.parent) {
                          if (node.parent.kind === 228 || node.end !== node.parent.end) {
                              return ts.getTrailingCommentRanges(currentSourceFile.text, node.end);
                          }
                      }
                  }
                  function emitOnlyPinnedOrTripleSlashComments(node) {
                      emitLeadingCommentsWorker(node, true);
                  }
                  function emitLeadingComments(node) {
                      return emitLeadingCommentsWorker(node, compilerOptions.removeComments);
                  }
                  function emitLeadingCommentsWorker(node, onlyPinnedOrTripleSlashComments) {
                      var leadingComments = filterComments(getLeadingCommentsToEmit(node), onlyPinnedOrTripleSlashComments);
                      ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
                      ts.emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
                  }
                  function emitTrailingComments(node) {
                      var trailingComments = filterComments(getTrailingCommentsToEmit(node), compilerOptions.removeComments);
                      ts.emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment);
                  }
                  function emitLeadingCommentsOfPosition(pos) {
                      var leadingComments;
                      if (hasDetachedComments(pos)) {
                          leadingComments = getLeadingCommentsWithoutDetachedComments();
                      }
                      else {
                          leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos);
                      }
                      leadingComments = filterComments(leadingComments, compilerOptions.removeComments);
                      ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments);
                      ts.emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
                  }
                  function emitDetachedComments(node) {
                      var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
                      if (leadingComments) {
                          var detachedComments = [];
                          var lastComment;
                          ts.forEach(leadingComments, function (comment) {
                              if (lastComment) {
                                  var lastCommentLine = ts.getLineOfLocalPosition(currentSourceFile, lastComment.end);
                                  var commentLine = ts.getLineOfLocalPosition(currentSourceFile, comment.pos);
                                  if (commentLine >= lastCommentLine + 2) {
                                      return detachedComments;
                                  }
                              }
                              detachedComments.push(comment);
                              lastComment = comment;
                          });
                          if (detachedComments.length) {
                              var lastCommentLine = ts.getLineOfLocalPosition(currentSourceFile, ts.lastOrUndefined(detachedComments).end);
                              var nodeLine = ts.getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.pos));
                              if (nodeLine >= lastCommentLine + 2) {
                                  ts.emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
                                  ts.emitComments(currentSourceFile, writer, detachedComments, true, newLine, writeComment);
                                  var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.lastOrUndefined(detachedComments).end };
                                  if (detachedCommentsInfo) {
                                      detachedCommentsInfo.push(currentDetachedCommentInfo);
                                  }
                                  else {
                                      detachedCommentsInfo = [currentDetachedCommentInfo];
                                  }
                              }
                          }
                      }
                  }
                  function isPinnedOrTripleSlashComment(comment) {
                      if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) {
                          return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33;
                      }
                      else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 &&
                          comment.pos + 2 < comment.end &&
                          currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 &&
                          currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) {
                          return true;
                      }
                  }
              }
              function emitFile(jsFilePath, sourceFile) {
                  emitJavaScript(jsFilePath, sourceFile);
                  if (compilerOptions.declaration) {
                      ts.writeDeclarationFile(jsFilePath, sourceFile, host, resolver, diagnostics);
                  }
              }
          }
          ts.emitFiles = emitFiles;
      })(ts || (ts = {}));
      /// <reference path="sys.ts" />
      /// <reference path="emitter.ts" />
      var ts;
      (function (ts) {
          ts.programTime = 0;
          ts.emitTime = 0;
          ts.ioReadTime = 0;
          ts.ioWriteTime = 0;
          ts.version = "1.5.2";
          var carriageReturnLineFeed = "\r\n";
          var lineFeed = "\n";
          function findConfigFile(searchPath) {
              var fileName = "tsconfig.json";
              while (true) {
                  if (ts.sys.fileExists(fileName)) {
                      return fileName;
                  }
                  var parentPath = ts.getDirectoryPath(searchPath);
                  if (parentPath === searchPath) {
                      break;
                  }
                  searchPath = parentPath;
                  fileName = "../" + fileName;
              }
              return undefined;
          }
          ts.findConfigFile = findConfigFile;
          function createCompilerHost(options, setParentNodes) {
              var currentDirectory;
              var existingDirectories = {};
              function getCanonicalFileName(fileName) {
                  return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
              }
              var unsupportedFileEncodingErrorCode = -2147024809;
              function getSourceFile(fileName, languageVersion, onError) {
                  var text;
                  try {
                      var start = new Date().getTime();
                      text = ts.sys.readFile(fileName, options.charset);
                      ts.ioReadTime += new Date().getTime() - start;
                  }
                  catch (e) {
                      if (onError) {
                          onError(e.number === unsupportedFileEncodingErrorCode
                              ? ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_file_encoding).messageText
                              : e.message);
                      }
                      text = "";
                  }
                  return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion, setParentNodes) : undefined;
              }
              function directoryExists(directoryPath) {
                  if (ts.hasProperty(existingDirectories, directoryPath)) {
                      return true;
                  }
                  if (ts.sys.directoryExists(directoryPath)) {
                      existingDirectories[directoryPath] = true;
                      return true;
                  }
                  return false;
              }
              function ensureDirectoriesExist(directoryPath) {
                  if (directoryPath.length > ts.getRootLength(directoryPath) && !directoryExists(directoryPath)) {
                      var parentDirectory = ts.getDirectoryPath(directoryPath);
                      ensureDirectoriesExist(parentDirectory);
                      ts.sys.createDirectory(directoryPath);
                  }
              }
              function writeFile(fileName, data, writeByteOrderMark, onError) {
                  try {
                      var start = new Date().getTime();
                      ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName)));
                      ts.sys.writeFile(fileName, data, writeByteOrderMark);
                      ts.ioWriteTime += new Date().getTime() - start;
                  }
                  catch (e) {
                      if (onError) {
                          onError(e.message);
                      }
                  }
              }
              var newLine = options.newLine === 0 ? carriageReturnLineFeed :
                  options.newLine === 1 ? lineFeed :
                      ts.sys.newLine;
              return {
                  getSourceFile: getSourceFile,
                  getDefaultLibFileName: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), ts.getDefaultLibFileName(options)); },
                  writeFile: writeFile,
                  getCurrentDirectory: function () { return currentDirectory || (currentDirectory = ts.sys.getCurrentDirectory()); },
                  useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; },
                  getCanonicalFileName: getCanonicalFileName,
                  getNewLine: function () { return newLine; }
              };
          }
          ts.createCompilerHost = createCompilerHost;
          function getPreEmitDiagnostics(program, sourceFile) {
              var diagnostics = program.getSyntacticDiagnostics(sourceFile).concat(program.getGlobalDiagnostics()).concat(program.getSemanticDiagnostics(sourceFile));
              if (program.getCompilerOptions().declaration) {
                  diagnostics.concat(program.getDeclarationDiagnostics(sourceFile));
              }
              return ts.sortAndDeduplicateDiagnostics(diagnostics);
          }
          ts.getPreEmitDiagnostics = getPreEmitDiagnostics;
          function flattenDiagnosticMessageText(messageText, newLine) {
              if (typeof messageText === "string") {
                  return messageText;
              }
              else {
                  var diagnosticChain = messageText;
                  var result = "";
                  var indent = 0;
                  while (diagnosticChain) {
                      if (indent) {
                          result += newLine;
                          for (var i = 0; i < indent; i++) {
                              result += "  ";
                          }
                      }
                      result += diagnosticChain.messageText;
                      indent++;
                      diagnosticChain = diagnosticChain.next;
                  }
                  return result;
              }
          }
          ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText;
          function createProgram(rootNames, options, host) {
              var program;
              var files = [];
              var filesByName = {};
              var diagnostics = ts.createDiagnosticCollection();
              var seenNoDefaultLib = options.noLib;
              var commonSourceDirectory;
              var diagnosticsProducingTypeChecker;
              var noDiagnosticsTypeChecker;
              var start = new Date().getTime();
              host = host || createCompilerHost(options);
              ts.forEach(rootNames, function (name) { return processRootFile(name, false); });
              if (!seenNoDefaultLib) {
                  processRootFile(host.getDefaultLibFileName(options), true);
              }
              verifyCompilerOptions();
              ts.programTime += new Date().getTime() - start;
              program = {
                  getSourceFile: getSourceFile,
                  getSourceFiles: function () { return files; },
                  getCompilerOptions: function () { return options; },
                  getSyntacticDiagnostics: getSyntacticDiagnostics,
                  getGlobalDiagnostics: getGlobalDiagnostics,
                  getSemanticDiagnostics: getSemanticDiagnostics,
                  getDeclarationDiagnostics: getDeclarationDiagnostics,
                  getTypeChecker: getTypeChecker,
                  getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker,
                  getCommonSourceDirectory: function () { return commonSourceDirectory; },
                  emit: emit,
                  getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                  getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); },
                  getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); },
                  getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); },
                  getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }
              };
              return program;
              function getEmitHost(writeFileCallback) {
                  return {
                      getCanonicalFileName: function (fileName) { return host.getCanonicalFileName(fileName); },
                      getCommonSourceDirectory: program.getCommonSourceDirectory,
                      getCompilerOptions: program.getCompilerOptions,
                      getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                      getNewLine: function () { return host.getNewLine(); },
                      getSourceFile: program.getSourceFile,
                      getSourceFiles: program.getSourceFiles,
                      writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError) { return host.writeFile(fileName, data, writeByteOrderMark, onError); })
                  };
              }
              function getDiagnosticsProducingTypeChecker() {
                  return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true));
              }
              function getTypeChecker() {
                  return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false));
              }
              function emit(sourceFile, writeFileCallback) {
                  if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) {
                      return { diagnostics: [], sourceMaps: undefined, emitSkipped: true };
                  }
                  var emitResolver = getDiagnosticsProducingTypeChecker().getEmitResolver(options.out ? undefined : sourceFile);
                  var start = new Date().getTime();
                  var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile);
                  ts.emitTime += new Date().getTime() - start;
                  return emitResult;
              }
              function getSourceFile(fileName) {
                  fileName = host.getCanonicalFileName(ts.normalizeSlashes(fileName));
                  return ts.hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined;
              }
              function getDiagnosticsHelper(sourceFile, getDiagnostics) {
                  if (sourceFile) {
                      return getDiagnostics(sourceFile);
                  }
                  var allDiagnostics = [];
                  ts.forEach(program.getSourceFiles(), function (sourceFile) {
                      ts.addRange(allDiagnostics, getDiagnostics(sourceFile));
                  });
                  return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
              }
              function getSyntacticDiagnostics(sourceFile) {
                  return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile);
              }
              function getSemanticDiagnostics(sourceFile) {
                  return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile);
              }
              function getDeclarationDiagnostics(sourceFile) {
                  return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile);
              }
              function getSyntacticDiagnosticsForFile(sourceFile) {
                  return sourceFile.parseDiagnostics;
              }
              function getSemanticDiagnosticsForFile(sourceFile) {
                  var typeChecker = getDiagnosticsProducingTypeChecker();
                  ts.Debug.assert(!!sourceFile.bindDiagnostics);
                  var bindDiagnostics = sourceFile.bindDiagnostics;
                  var checkDiagnostics = typeChecker.getDiagnostics(sourceFile);
                  var programDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName);
                  return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics);
              }
              function getDeclarationDiagnosticsForFile(sourceFile) {
                  if (!ts.isDeclarationFile(sourceFile)) {
                      var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile);
                      var writeFile = function () { };
                      return ts.getDeclarationDiagnostics(getEmitHost(writeFile), resolver, sourceFile);
                  }
              }
              function getGlobalDiagnostics() {
                  var typeChecker = getDiagnosticsProducingTypeChecker();
                  var allDiagnostics = [];
                  ts.addRange(allDiagnostics, typeChecker.getGlobalDiagnostics());
                  ts.addRange(allDiagnostics, diagnostics.getGlobalDiagnostics());
                  return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
              }
              function hasExtension(fileName) {
                  return ts.getBaseFileName(fileName).indexOf(".") >= 0;
              }
              function processRootFile(fileName, isDefaultLib) {
                  processSourceFile(ts.normalizePath(fileName), isDefaultLib);
              }
              function processSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) {
                  var start;
                  var length;
                  var extensions;
                  var diagnosticArgument;
                  if (refEnd !== undefined && refPos !== undefined) {
                      start = refPos;
                      length = refEnd - refPos;
                  }
                  var diagnostic;
                  if (hasExtension(fileName)) {
                      if (!options.allowNonTsExtensions && !ts.forEach(ts.supportedExtensions, function (extension) { return ts.fileExtensionIs(host.getCanonicalFileName(fileName), extension); })) {
                          diagnostic = ts.Diagnostics.File_0_has_unsupported_extension_The_only_supported_extensions_are_1;
                          diagnosticArgument = [fileName, "'" + ts.supportedExtensions.join("', '") + "'"];
                      }
                      else if (!findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
                          diagnostic = ts.Diagnostics.File_0_not_found;
                          diagnosticArgument = [fileName];
                      }
                      else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) {
                          diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself;
                          diagnosticArgument = [fileName];
                      }
                  }
                  else {
                      if (options.allowNonTsExtensions && !findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
                          diagnostic = ts.Diagnostics.File_0_not_found;
                          diagnosticArgument = [fileName];
                      }
                      else if (!ts.forEach(ts.supportedExtensions, function (extension) { return findSourceFile(fileName + extension, isDefaultLib, refFile, refPos, refEnd); })) {
                          diagnostic = ts.Diagnostics.File_0_not_found;
                          fileName += ".ts";
                          diagnosticArgument = [fileName];
                      }
                  }
                  if (diagnostic) {
                      if (refFile) {
                          diagnostics.add(ts.createFileDiagnostic.apply(void 0, [refFile, start, length, diagnostic].concat(diagnosticArgument)));
                      }
                      else {
                          diagnostics.add(ts.createCompilerDiagnostic.apply(void 0, [diagnostic].concat(diagnosticArgument)));
                      }
                  }
              }
              function findSourceFile(fileName, isDefaultLib, refFile, refStart, refLength) {
                  var canonicalName = host.getCanonicalFileName(ts.normalizeSlashes(fileName));
                  if (ts.hasProperty(filesByName, canonicalName)) {
                      return getSourceFileFromCache(fileName, canonicalName, false);
                  }
                  else {
                      var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory());
                      var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath);
                      if (ts.hasProperty(filesByName, canonicalAbsolutePath)) {
                          return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, true);
                      }
                      var file = filesByName[canonicalName] = host.getSourceFile(fileName, options.target, function (hostErrorMessage) {
                          if (refFile) {
                              diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
                          }
                          else {
                              diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
                          }
                      });
                      if (file) {
                          seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib;
                          filesByName[canonicalAbsolutePath] = file;
                          if (!options.noResolve) {
                              var basePath = ts.getDirectoryPath(fileName);
                              processReferencedFiles(file, basePath);
                              processImportedModules(file, basePath);
                          }
                          if (isDefaultLib) {
                              files.unshift(file);
                          }
                          else {
                              files.push(file);
                          }
                      }
                      return file;
                  }
                  function getSourceFileFromCache(fileName, canonicalName, useAbsolutePath) {
                      var file = filesByName[canonicalName];
                      if (file && host.useCaseSensitiveFileNames()) {
                          var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName;
                          if (canonicalName !== sourceFileName) {
                              diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName));
                          }
                      }
                      return file;
                  }
              }
              function processReferencedFiles(file, basePath) {
                  ts.forEach(file.referencedFiles, function (ref) {
                      var referencedFileName = ts.isRootedDiskPath(ref.fileName) ? ref.fileName : ts.combinePaths(basePath, ref.fileName);
                      processSourceFile(ts.normalizePath(referencedFileName), false, file, ref.pos, ref.end);
                  });
              }
              function processImportedModules(file, basePath) {
                  ts.forEach(file.statements, function (node) {
                      if (node.kind === 210 || node.kind === 209 || node.kind === 216) {
                          var moduleNameExpr = ts.getExternalModuleName(node);
                          if (moduleNameExpr && moduleNameExpr.kind === 8) {
                              var moduleNameText = moduleNameExpr.text;
                              if (moduleNameText) {
                                  var searchPath = basePath;
                                  var searchName;
                                  while (true) {
                                      searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleNameText));
                                      if (ts.forEach(ts.supportedExtensions, function (extension) { return findModuleSourceFile(searchName + extension, moduleNameExpr); })) {
                                          break;
                                      }
                                      var parentPath = ts.getDirectoryPath(searchPath);
                                      if (parentPath === searchPath) {
                                          break;
                                      }
                                      searchPath = parentPath;
                                  }
                              }
                          }
                      }
                      else if (node.kind === 206 && node.name.kind === 8 && (node.flags & 2 || ts.isDeclarationFile(file))) {
                          ts.forEachChild(node.body, function (node) {
                              if (ts.isExternalModuleImportEqualsDeclaration(node) &&
                                  ts.getExternalModuleImportEqualsDeclarationExpression(node).kind === 8) {
                                  var nameLiteral = ts.getExternalModuleImportEqualsDeclarationExpression(node);
                                  var moduleName = nameLiteral.text;
                                  if (moduleName) {
                                      var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName));
                                      ts.forEach(ts.supportedExtensions, function (extension) { return findModuleSourceFile(searchName + extension, nameLiteral); });
                                  }
                              }
                          });
                      }
                  });
                  function findModuleSourceFile(fileName, nameLiteral) {
                      return findSourceFile(fileName, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos);
                  }
              }
              function computeCommonSourceDirectory(sourceFiles) {
                  var commonPathComponents;
                  var currentDirectory = host.getCurrentDirectory();
                  ts.forEach(files, function (sourceFile) {
                      if (ts.isDeclarationFile(sourceFile)) {
                          return;
                      }
                      var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.fileName, currentDirectory);
                      sourcePathComponents.pop();
                      if (!commonPathComponents) {
                          commonPathComponents = sourcePathComponents;
                          return;
                      }
                      for (var i = 0, n = Math.min(commonPathComponents.length, sourcePathComponents.length); i < n; i++) {
                          if (commonPathComponents[i] !== sourcePathComponents[i]) {
                              if (i === 0) {
                                  diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files));
                                  return;
                              }
                              commonPathComponents.length = i;
                              break;
                          }
                      }
                      if (sourcePathComponents.length < commonPathComponents.length) {
                          commonPathComponents.length = sourcePathComponents.length;
                      }
                  });
                  return ts.getNormalizedPathFromPathComponents(commonPathComponents);
              }
              function checkSourceFilesBelongToPath(sourceFiles, rootDirectory) {
                  var allFilesBelongToPath = true;
                  if (sourceFiles) {
                      var currentDirectory = host.getCurrentDirectory();
                      var absoluteRootDirectoryPath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(rootDirectory, currentDirectory));
                      for (var _i = 0; _i < sourceFiles.length; _i++) {
                          var sourceFile = sourceFiles[_i];
                          if (!ts.isDeclarationFile(sourceFile)) {
                              var absoluteSourceFilePath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory));
                              if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) {
                                  diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, sourceFile.fileName, options.rootDir));
                                  allFilesBelongToPath = false;
                              }
                          }
                      }
                  }
                  return allFilesBelongToPath;
              }
              function verifyCompilerOptions() {
                  if (options.separateCompilation) {
                      if (options.sourceMap) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceMap_cannot_be_specified_with_option_separateCompilation));
                      }
                      if (options.declaration) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_declaration_cannot_be_specified_with_option_separateCompilation));
                      }
                      if (options.noEmitOnError) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmitOnError_cannot_be_specified_with_option_separateCompilation));
                      }
                      if (options.out) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_out_cannot_be_specified_with_option_separateCompilation));
                      }
                  }
                  if (options.inlineSourceMap) {
                      if (options.sourceMap) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceMap_cannot_be_specified_with_option_inlineSourceMap));
                      }
                      if (options.mapRoot) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_with_option_inlineSourceMap));
                      }
                      if (options.sourceRoot) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_with_option_inlineSourceMap));
                      }
                  }
                  if (options.inlineSources) {
                      if (!options.sourceMap && !options.inlineSourceMap) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided));
                      }
                  }
                  if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) {
                      if (options.mapRoot) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourceMap_option));
                      }
                      if (options.sourceRoot) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourceMap_option));
                      }
                      return;
                  }
                  var languageVersion = options.target || 0;
                  var firstExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) ? f : undefined; });
                  if (options.separateCompilation) {
                      if (!options.module && languageVersion < 2) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_separateCompilation_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES6_or_higher));
                      }
                      var firstNonExternalModuleSourceFile = ts.forEach(files, function (f) { return !ts.isExternalModule(f) && !ts.isDeclarationFile(f) ? f : undefined; });
                      if (firstNonExternalModuleSourceFile) {
                          var span = ts.getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile);
                          diagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_namespaces_when_the_separateCompilation_flag_is_provided));
                      }
                  }
                  else if (firstExternalModuleSourceFile && languageVersion < 2 && !options.module) {
                      var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator);
                      diagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided));
                  }
                  if (options.module && languageVersion >= 2) {
                      diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_commonjs_amd_system_or_umd_when_targeting_ES6_or_higher));
                  }
                  if (options.outDir ||
                      options.sourceRoot ||
                      (options.mapRoot &&
                          (!options.out || firstExternalModuleSourceFile !== undefined))) {
                      if (options.rootDir && checkSourceFilesBelongToPath(files, options.rootDir)) {
                          commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, host.getCurrentDirectory());
                      }
                      else {
                          commonSourceDirectory = computeCommonSourceDirectory(files);
                      }
                      if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) {
                          commonSourceDirectory += ts.directorySeparator;
                      }
                  }
                  if (options.noEmit) {
                      if (options.out || options.outDir) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir));
                      }
                      if (options.declaration) {
                          diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration));
                      }
                  }
              }
          }
          ts.createProgram = createProgram;
      })(ts || (ts = {}));
      /// <reference path="sys.ts"/>
      /// <reference path="types.ts"/>
      /// <reference path="core.ts"/>
      /// <reference path="scanner.ts"/>
      var ts;
      (function (ts) {
          ts.optionDeclarations = [
              {
                  name: "charset",
                  type: "string"
              },
              {
                  name: "declaration",
                  shortName: "d",
                  type: "boolean",
                  description: ts.Diagnostics.Generates_corresponding_d_ts_file
              },
              {
                  name: "diagnostics",
                  type: "boolean"
              },
              {
                  name: "emitBOM",
                  type: "boolean"
              },
              {
                  name: "help",
                  shortName: "h",
                  type: "boolean",
                  description: ts.Diagnostics.Print_this_message
              },
              {
                  name: "inlineSourceMap",
                  type: "boolean"
              },
              {
                  name: "inlineSources",
                  type: "boolean"
              },
              {
                  name: "listFiles",
                  type: "boolean"
              },
              {
                  name: "locale",
                  type: "string"
              },
              {
                  name: "mapRoot",
                  type: "string",
                  isFilePath: true,
                  description: ts.Diagnostics.Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
                  paramType: ts.Diagnostics.LOCATION
              },
              {
                  name: "module",
                  shortName: "m",
                  type: {
                      "commonjs": 1,
                      "amd": 2,
                      "system": 4,
                      "umd": 3
                  },
                  description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_or_umd,
                  paramType: ts.Diagnostics.KIND,
                  error: ts.Diagnostics.Argument_for_module_option_must_be_commonjs_amd_system_or_umd
              },
              {
                  name: "newLine",
                  type: {
                      "crlf": 0,
                      "lf": 1
                  },
                  description: ts.Diagnostics.Specifies_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
                  paramType: ts.Diagnostics.NEWLINE,
                  error: ts.Diagnostics.Argument_for_newLine_option_must_be_CRLF_or_LF
              },
              {
                  name: "noEmit",
                  type: "boolean",
                  description: ts.Diagnostics.Do_not_emit_outputs
              },
              {
                  name: "noEmitHelpers",
                  type: "boolean"
              },
              {
                  name: "noEmitOnError",
                  type: "boolean",
                  description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported
              },
              {
                  name: "noImplicitAny",
                  type: "boolean",
                  description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
              },
              {
                  name: "noLib",
                  type: "boolean"
              },
              {
                  name: "noResolve",
                  type: "boolean"
              },
              {
                  name: "out",
                  type: "string",
                  description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
                  paramType: ts.Diagnostics.FILE
              },
              {
                  name: "outDir",
                  type: "string",
                  isFilePath: true,
                  description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
                  paramType: ts.Diagnostics.DIRECTORY
              },
              {
                  name: "preserveConstEnums",
                  type: "boolean",
                  description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
              },
              {
                  name: "project",
                  shortName: "p",
                  type: "string",
                  isFilePath: true,
                  description: ts.Diagnostics.Compile_the_project_in_the_given_directory,
                  paramType: ts.Diagnostics.DIRECTORY
              },
              {
                  name: "removeComments",
                  type: "boolean",
                  description: ts.Diagnostics.Do_not_emit_comments_to_output
              },
              {
                  name: "rootDir",
                  type: "string",
                  isFilePath: true,
                  description: ts.Diagnostics.Specifies_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
                  paramType: ts.Diagnostics.LOCATION
              },
              {
                  name: "separateCompilation",
                  type: "boolean"
              },
              {
                  name: "sourceMap",
                  type: "boolean",
                  description: ts.Diagnostics.Generates_corresponding_map_file
              },
              {
                  name: "sourceRoot",
                  type: "string",
                  isFilePath: true,
                  description: ts.Diagnostics.Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
                  paramType: ts.Diagnostics.LOCATION
              },
              {
                  name: "suppressImplicitAnyIndexErrors",
                  type: "boolean",
                  description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures
              },
              {
                  name: "stripInternal",
                  type: "boolean",
                  description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
                  experimental: true
              },
              {
                  name: "target",
                  shortName: "t",
                  type: { "es3": 0, "es5": 1, "es6": 2 },
                  description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental,
                  paramType: ts.Diagnostics.VERSION,
                  error: ts.Diagnostics.Argument_for_target_option_must_be_ES3_ES5_or_ES6
              },
              {
                  name: "version",
                  shortName: "v",
                  type: "boolean",
                  description: ts.Diagnostics.Print_the_compiler_s_version
              },
              {
                  name: "watch",
                  shortName: "w",
                  type: "boolean",
                  description: ts.Diagnostics.Watch_input_files
              },
              {
                  name: "emitDecoratorMetadata",
                  type: "boolean",
                  experimental: true
              }
          ];
          function parseCommandLine(commandLine) {
              var options = {};
              var fileNames = [];
              var errors = [];
              var shortOptionNames = {};
              var optionNameMap = {};
              ts.forEach(ts.optionDeclarations, function (option) {
                  optionNameMap[option.name.toLowerCase()] = option;
                  if (option.shortName) {
                      shortOptionNames[option.shortName] = option.name;
                  }
              });
              parseStrings(commandLine);
              return {
                  options: options,
                  fileNames: fileNames,
                  errors: errors
              };
              function parseStrings(args) {
                  var i = 0;
                  while (i < args.length) {
                      var s = args[i++];
                      if (s.charCodeAt(0) === 64) {
                          parseResponseFile(s.slice(1));
                      }
                      else if (s.charCodeAt(0) === 45) {
                          s = s.slice(s.charCodeAt(1) === 45 ? 2 : 1).toLowerCase();
                          if (ts.hasProperty(shortOptionNames, s)) {
                              s = shortOptionNames[s];
                          }
                          if (ts.hasProperty(optionNameMap, s)) {
                              var opt = optionNameMap[s];
                              if (!args[i] && opt.type !== "boolean") {
                                  errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_expects_an_argument, opt.name));
                              }
                              switch (opt.type) {
                                  case "number":
                                      options[opt.name] = parseInt(args[i++]);
                                      break;
                                  case "boolean":
                                      options[opt.name] = true;
                                      break;
                                  case "string":
                                      options[opt.name] = args[i++] || "";
                                      break;
                                  default:
                                      var map = opt.type;
                                      var key = (args[i++] || "").toLowerCase();
                                      if (ts.hasProperty(map, key)) {
                                          options[opt.name] = map[key];
                                      }
                                      else {
                                          errors.push(ts.createCompilerDiagnostic(opt.error));
                                      }
                              }
                          }
                          else {
                              errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, s));
                          }
                      }
                      else {
                          fileNames.push(s);
                      }
                  }
              }
              function parseResponseFile(fileName) {
                  var text = ts.sys.readFile(fileName);
                  if (!text) {
                      errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName));
                      return;
                  }
                  var args = [];
                  var pos = 0;
                  while (true) {
                      while (pos < text.length && text.charCodeAt(pos) <= 32)
                          pos++;
                      if (pos >= text.length)
                          break;
                      var start = pos;
                      if (text.charCodeAt(start) === 34) {
                          pos++;
                          while (pos < text.length && text.charCodeAt(pos) !== 34)
                              pos++;
                          if (pos < text.length) {
                              args.push(text.substring(start + 1, pos));
                              pos++;
                          }
                          else {
                              errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName));
                          }
                      }
                      else {
                          while (text.charCodeAt(pos) > 32)
                              pos++;
                          args.push(text.substring(start, pos));
                      }
                  }
                  parseStrings(args);
              }
          }
          ts.parseCommandLine = parseCommandLine;
          function readConfigFile(fileName) {
              try {
                  var text = ts.sys.readFile(fileName);
              }
              catch (e) {
                  return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message) };
              }
              return parseConfigFileText(fileName, text);
          }
          ts.readConfigFile = readConfigFile;
          function parseConfigFileText(fileName, jsonText) {
              try {
                  return { config: /\S/.test(jsonText) ? JSON.parse(jsonText) : {} };
              }
              catch (e) {
                  return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Failed_to_parse_file_0_Colon_1, fileName, e.message) };
              }
          }
          ts.parseConfigFileText = parseConfigFileText;
          function parseConfigFile(json, host, basePath) {
              var errors = [];
              return {
                  options: getCompilerOptions(),
                  fileNames: getFiles(),
                  errors: errors
              };
              function getCompilerOptions() {
                  var options = {};
                  var optionNameMap = {};
                  ts.forEach(ts.optionDeclarations, function (option) {
                      optionNameMap[option.name] = option;
                  });
                  var jsonOptions = json["compilerOptions"];
                  if (jsonOptions) {
                      for (var id in jsonOptions) {
                          if (ts.hasProperty(optionNameMap, id)) {
                              var opt = optionNameMap[id];
                              var optType = opt.type;
                              var value = jsonOptions[id];
                              var expectedType = typeof optType === "string" ? optType : "string";
                              if (typeof value === expectedType) {
                                  if (typeof optType !== "string") {
                                      var key = value.toLowerCase();
                                      if (ts.hasProperty(optType, key)) {
                                          value = optType[key];
                                      }
                                      else {
                                          errors.push(ts.createCompilerDiagnostic(opt.error));
                                          value = 0;
                                      }
                                  }
                                  if (opt.isFilePath) {
                                      value = ts.normalizePath(ts.combinePaths(basePath, value));
                                  }
                                  options[opt.name] = value;
                              }
                              else {
                                  errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, id, expectedType));
                              }
                          }
                          else {
                              errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, id));
                          }
                      }
                  }
                  return options;
              }
              function getFiles() {
                  var files = [];
                  if (ts.hasProperty(json, "files")) {
                      if (json["files"] instanceof Array) {
                          var files = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); });
                      }
                  }
                  else {
                      var sysFiles = host.readDirectory(basePath, ".ts");
                      for (var i = 0; i < sysFiles.length; i++) {
                          var name = sysFiles[i];
                          if (!ts.fileExtensionIs(name, ".d.ts") || !ts.contains(sysFiles, name.substr(0, name.length - 5) + ".ts")) {
                              files.push(name);
                          }
                      }
                  }
                  return files;
              }
          }
          ts.parseConfigFile = parseConfigFile;
      })(ts || (ts = {}));
      /// <reference path="program.ts"/>
      /// <reference path="commandLineParser.ts"/>
      var ts;
      (function (ts) {
          function validateLocaleAndSetLanguage(locale, errors) {
              var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase());
              if (!matchResult) {
                  errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, 'en', 'ja-jp'));
                  return false;
              }
              var language = matchResult[1];
              var territory = matchResult[3];
              if (!trySetLanguageAndTerritory(language, territory, errors) &&
                  !trySetLanguageAndTerritory(language, undefined, errors)) {
                  errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_locale_0, locale));
                  return false;
              }
              return true;
          }
          function trySetLanguageAndTerritory(language, territory, errors) {
              var compilerFilePath = ts.normalizePath(ts.sys.getExecutingFilePath());
              var containingDirectoryPath = ts.getDirectoryPath(compilerFilePath);
              var filePath = ts.combinePaths(containingDirectoryPath, language);
              if (territory) {
                  filePath = filePath + "-" + territory;
              }
              filePath = ts.sys.resolvePath(ts.combinePaths(filePath, "diagnosticMessages.generated.json"));
              if (!ts.sys.fileExists(filePath)) {
                  return false;
              }
              try {
                  var fileContents = ts.sys.readFile(filePath);
              }
              catch (e) {
                  errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, filePath));
                  return false;
              }
              try {
                  ts.localizedDiagnosticMessages = JSON.parse(fileContents);
              }
              catch (e) {
                  errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Corrupted_locale_file_0, filePath));
                  return false;
              }
              return true;
          }
          function countLines(program) {
              var count = 0;
              ts.forEach(program.getSourceFiles(), function (file) {
                  count += ts.getLineStarts(file).length;
              });
              return count;
          }
          function getDiagnosticText(message) {
              var args = [];
              for (var _i = 1; _i < arguments.length; _i++) {
                  args[_i - 1] = arguments[_i];
              }
              var diagnostic = ts.createCompilerDiagnostic.apply(undefined, arguments);
              return diagnostic.messageText;
          }
          function reportDiagnostic(diagnostic) {
              var output = "";
              if (diagnostic.file) {
                  var loc = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
                  output += diagnostic.file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + "): ";
              }
              var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase();
              output += category + " TS" + diagnostic.code + ": " + ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine) + ts.sys.newLine;
              ts.sys.write(output);
          }
          function reportDiagnostics(diagnostics) {
              for (var i = 0; i < diagnostics.length; i++) {
                  reportDiagnostic(diagnostics[i]);
              }
          }
          function padLeft(s, length) {
              while (s.length < length) {
                  s = " " + s;
              }
              return s;
          }
          function padRight(s, length) {
              while (s.length < length) {
                  s = s + " ";
              }
              return s;
          }
          function reportStatisticalValue(name, value) {
              ts.sys.write(padRight(name + ":", 12) + padLeft(value.toString(), 10) + ts.sys.newLine);
          }
          function reportCountStatistic(name, count) {
              reportStatisticalValue(name, "" + count);
          }
          function reportTimeStatistic(name, time) {
              reportStatisticalValue(name, (time / 1000).toFixed(2) + "s");
          }
          function isJSONSupported() {
              return typeof JSON === "object" && typeof JSON.parse === "function";
          }
          function executeCommandLine(args) {
              var commandLine = ts.parseCommandLine(args);
              var configFileName;
              var configFileWatcher;
              var cachedProgram;
              var rootFileNames;
              var compilerOptions;
              var compilerHost;
              var hostGetSourceFile;
              var timerHandle;
              if (commandLine.options.locale) {
                  if (!isJSONSupported()) {
                      reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--locale"));
                      return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
                  }
                  validateLocaleAndSetLanguage(commandLine.options.locale, commandLine.errors);
              }
              if (commandLine.errors.length > 0) {
                  reportDiagnostics(commandLine.errors);
                  return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
              }
              if (commandLine.options.version) {
                  reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Version_0, ts.version));
                  return ts.sys.exit(ts.ExitStatus.Success);
              }
              if (commandLine.options.help) {
                  printVersion();
                  printHelp();
                  return ts.sys.exit(ts.ExitStatus.Success);
              }
              if (commandLine.options.project) {
                  if (!isJSONSupported()) {
                      reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--project"));
                      return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
                  }
                  configFileName = ts.normalizePath(ts.combinePaths(commandLine.options.project, "tsconfig.json"));
                  if (commandLine.fileNames.length !== 0) {
                      reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line));
                      return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
                  }
              }
              else if (commandLine.fileNames.length === 0 && isJSONSupported()) {
                  var searchPath = ts.normalizePath(ts.sys.getCurrentDirectory());
                  configFileName = ts.findConfigFile(searchPath);
              }
              if (commandLine.fileNames.length === 0 && !configFileName) {
                  printVersion();
                  printHelp();
                  return ts.sys.exit(ts.ExitStatus.Success);
              }
              if (commandLine.options.watch) {
                  if (!ts.sys.watchFile) {
                      reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"));
                      return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
                  }
                  if (configFileName) {
                      configFileWatcher = ts.sys.watchFile(configFileName, configFileChanged);
                  }
              }
              performCompilation();
              function performCompilation() {
                  if (!cachedProgram) {
                      if (configFileName) {
                          var result = ts.readConfigFile(configFileName);
                          if (result.error) {
                              reportDiagnostic(result.error);
                              return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
                          }
                          var configObject = result.config;
                          var configParseResult = ts.parseConfigFile(configObject, ts.sys, ts.getDirectoryPath(configFileName));
                          if (configParseResult.errors.length > 0) {
                              reportDiagnostics(configParseResult.errors);
                              return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
                          }
                          rootFileNames = configParseResult.fileNames;
                          compilerOptions = ts.extend(commandLine.options, configParseResult.options);
                      }
                      else {
                          rootFileNames = commandLine.fileNames;
                          compilerOptions = commandLine.options;
                      }
                      compilerHost = ts.createCompilerHost(compilerOptions);
                      hostGetSourceFile = compilerHost.getSourceFile;
                      compilerHost.getSourceFile = getSourceFile;
                  }
                  var compileResult = compile(rootFileNames, compilerOptions, compilerHost);
                  if (!compilerOptions.watch) {
                      return ts.sys.exit(compileResult.exitStatus);
                  }
                  setCachedProgram(compileResult.program);
                  reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Compilation_complete_Watching_for_file_changes));
              }
              function getSourceFile(fileName, languageVersion, onError) {
                  if (cachedProgram) {
                      var sourceFile = cachedProgram.getSourceFile(fileName);
                      if (sourceFile && sourceFile.fileWatcher) {
                          return sourceFile;
                      }
                  }
                  var sourceFile = hostGetSourceFile(fileName, languageVersion, onError);
                  if (sourceFile && compilerOptions.watch) {
                      sourceFile.fileWatcher = ts.sys.watchFile(sourceFile.fileName, function () { return sourceFileChanged(sourceFile); });
                  }
                  return sourceFile;
              }
              function setCachedProgram(program) {
                  if (cachedProgram) {
                      var newSourceFiles = program ? program.getSourceFiles() : undefined;
                      ts.forEach(cachedProgram.getSourceFiles(), function (sourceFile) {
                          if (!(newSourceFiles && ts.contains(newSourceFiles, sourceFile))) {
                              if (sourceFile.fileWatcher) {
                                  sourceFile.fileWatcher.close();
                                  sourceFile.fileWatcher = undefined;
                              }
                          }
                      });
                  }
                  cachedProgram = program;
              }
              function sourceFileChanged(sourceFile) {
                  sourceFile.fileWatcher.close();
                  sourceFile.fileWatcher = undefined;
                  startTimer();
              }
              function configFileChanged() {
                  setCachedProgram(undefined);
                  startTimer();
              }
              function startTimer() {
                  if (timerHandle) {
                      clearTimeout(timerHandle);
                  }
                  timerHandle = setTimeout(recompile, 250);
              }
              function recompile() {
                  timerHandle = undefined;
                  reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation));
                  performCompilation();
              }
          }
          ts.executeCommandLine = executeCommandLine;
          function compile(fileNames, compilerOptions, compilerHost) {
              ts.ioReadTime = 0;
              ts.ioWriteTime = 0;
              ts.programTime = 0;
              ts.bindTime = 0;
              ts.checkTime = 0;
              ts.emitTime = 0;
              var program = ts.createProgram(fileNames, compilerOptions, compilerHost);
              var exitStatus = compileProgram();
              if (compilerOptions.listFiles) {
                  ts.forEach(program.getSourceFiles(), function (file) {
                      ts.sys.write(file.fileName + ts.sys.newLine);
                  });
              }
              if (compilerOptions.diagnostics) {
                  var memoryUsed = ts.sys.getMemoryUsage ? ts.sys.getMemoryUsage() : -1;
                  reportCountStatistic("Files", program.getSourceFiles().length);
                  reportCountStatistic("Lines", countLines(program));
                  reportCountStatistic("Nodes", program.getNodeCount());
                  reportCountStatistic("Identifiers", program.getIdentifierCount());
                  reportCountStatistic("Symbols", program.getSymbolCount());
                  reportCountStatistic("Types", program.getTypeCount());
                  if (memoryUsed >= 0) {
                      reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K");
                  }
                  reportTimeStatistic("I/O read", ts.ioReadTime);
                  reportTimeStatistic("I/O write", ts.ioWriteTime);
                  reportTimeStatistic("Parse time", ts.programTime);
                  reportTimeStatistic("Bind time", ts.bindTime);
                  reportTimeStatistic("Check time", ts.checkTime);
                  reportTimeStatistic("Emit time", ts.emitTime);
                  reportTimeStatistic("Total time", ts.programTime + ts.bindTime + ts.checkTime + ts.emitTime);
              }
              return { program: program, exitStatus: exitStatus };
              function compileProgram() {
                  var diagnostics = program.getSyntacticDiagnostics();
                  reportDiagnostics(diagnostics);
                  if (diagnostics.length === 0) {
                      var diagnostics = program.getGlobalDiagnostics();
                      reportDiagnostics(diagnostics);
                      if (diagnostics.length === 0) {
                          var diagnostics = program.getSemanticDiagnostics();
                          reportDiagnostics(diagnostics);
                      }
                  }
                  if (compilerOptions.noEmit) {
                      return diagnostics.length
                          ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped
                          : ts.ExitStatus.Success;
                  }
                  var emitOutput = program.emit();
                  reportDiagnostics(emitOutput.diagnostics);
                  if (emitOutput.emitSkipped) {
                      return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped;
                  }
                  if (diagnostics.length > 0 || emitOutput.diagnostics.length > 0) {
                      return ts.ExitStatus.DiagnosticsPresent_OutputsGenerated;
                  }
                  return ts.ExitStatus.Success;
              }
          }
          function printVersion() {
              ts.sys.write(getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + ts.sys.newLine);
          }
          function printHelp() {
              var output = "";
              var syntaxLength = getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, "").length;
              var examplesLength = getDiagnosticText(ts.Diagnostics.Examples_Colon_0, "").length;
              var marginLength = Math.max(syntaxLength, examplesLength);
              var syntax = makePadding(marginLength - syntaxLength);
              syntax += "tsc [" + getDiagnosticText(ts.Diagnostics.options) + "] [" + getDiagnosticText(ts.Diagnostics.file) + " ...]";
              output += getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, syntax);
              output += ts.sys.newLine + ts.sys.newLine;
              var padding = makePadding(marginLength);
              output += getDiagnosticText(ts.Diagnostics.Examples_Colon_0, makePadding(marginLength - examplesLength) + "tsc hello.ts") + ts.sys.newLine;
              output += padding + "tsc --out file.js file.ts" + ts.sys.newLine;
              output += padding + "tsc @args.txt" + ts.sys.newLine;
              output += ts.sys.newLine;
              output += getDiagnosticText(ts.Diagnostics.Options_Colon) + ts.sys.newLine;
              var optsList = ts.filter(ts.optionDeclarations.slice(), function (v) { return !v.experimental; });
              optsList.sort(function (a, b) { return ts.compareValues(a.name.toLowerCase(), b.name.toLowerCase()); });
              var marginLength = 0;
              var usageColumn = [];
              var descriptionColumn = [];
              for (var i = 0; i < optsList.length; i++) {
                  var option = optsList[i];
                  if (!option.description) {
                      continue;
                  }
                  var usageText = " ";
                  if (option.shortName) {
                      usageText += "-" + option.shortName;
                      usageText += getParamType(option);
                      usageText += ", ";
                  }
                  usageText += "--" + option.name;
                  usageText += getParamType(option);
                  usageColumn.push(usageText);
                  descriptionColumn.push(getDiagnosticText(option.description));
                  marginLength = Math.max(usageText.length, marginLength);
              }
              var usageText = " @<" + getDiagnosticText(ts.Diagnostics.file) + ">";
              usageColumn.push(usageText);
              descriptionColumn.push(getDiagnosticText(ts.Diagnostics.Insert_command_line_options_and_files_from_a_file));
              marginLength = Math.max(usageText.length, marginLength);
              for (var i = 0; i < usageColumn.length; i++) {
                  var usage = usageColumn[i];
                  var description = descriptionColumn[i];
                  output += usage + makePadding(marginLength - usage.length + 2) + description + ts.sys.newLine;
              }
              ts.sys.write(output);
              return;
              function getParamType(option) {
                  if (option.paramType !== undefined) {
                      return " " + getDiagnosticText(option.paramType);
                  }
                  return "";
              }
              function makePadding(paddingLength) {
                  return Array(paddingLength + 1).join(" ");
              }
          }
      })(ts || (ts = {}));
      ts.executeCommandLine(ts.sys.args);
      
  • typings
    • webSQL.d.ts
      declare function openDatabase(
        name: string,
        version: any,
        displayName: string,
        size: number,
        upgrade?: DatabaseCallback): Database;
      
      interface DatabaseCallback {
        (database: Database): void;
      }
      
      interface Database {
        transaction(
          callback: (transaction: SQLTransaction) => void,
          errorCallback?: (error: SQLError) => void,
          successCallback?: () => void);
      
        readTransaction(
          callback: (transaction: SQLTransaction) => void,
          errorCallback?: (error: SQLError) => void,
          successCallback?: () => void);
      
        version: string;
      
        changeVersion(
          oldVersion: string,
          newVersion: string,
          callback: (transaction: SQLTransaction) => void,
          errorCallback?: (error: SQLError) => void,
          successCallback?: () => void);
      }
      
      interface SQLTransaction {
        executeSql(
          sqlStatement: string,
          arguments?: any[],
          callback?: (transaction: SQLTransaction, result: SQLResultSet) => void,
          errorCallback?: (transaction: SQLTransaction, error: SQLError) => void): void;
      }
      
      interface SQLError {
        /**
         * UNKNOWN_ERR = 0;
         * DATABASE_ERR = 1;
         * VERSION_ERR = 2;
         * TOO_LARGE_ERR = 3;
         * QUOTA_ERR = 4;
         * SYNTAX_ERR = 5;
         * CONSTRAINT_ERR = 6;
        * TIMEOUT_ERR = 7;
         */
        code: number;
        message: string
      }
      
      interface SQLResultSet {
        insertId: number;
        rowsAffected: number;
        rows: SQLResultSetRowList;
      }
      
      interface SQLResultSetRowList {
        length: number;
        item(index: number): any;
      }
  • dummy.ts
    class Apple {
      constructor(public color = 'red') {
      }
    }
    
    console.log('Look, I am a happy TypeScript file running away.');
    console.log('I\'ve got class ' + Apple);
    var apple = new Apple();
    console.log('I\'ve created an instance of it: ', apple);
    apple.color = 'green';
    console.log('I\'ve changed its colour: ', apple);
  • index.html
    <!doctype html>
    <title>mini shell </title>
    
    <script data-legit=mi>
      // ONERROR
      <%=embedFile('boot/onerror.js')%>
    //# sourceURL=boot/onerror.js
    </script>
    
    
    <script data-legit=mi>
      // EARLYBOOT
      earlyBoot(window);
    
      	<%=typescriptBuild('boot/*')%>
    
        <%=embedFile('boot/bootUI.js')%>
    //# sourceURL=/boot/base.js
    </script>
    
    
    <script data-legit=mi>
    
      // LOADER
    <%=typescriptBuild('load/*', 'persistence/*', 'boot/base.d.ts', 'typings/*')%>
    //# sourceURL=/load/shellLoader.ts.js
    </script>
    
    <!-- total 12Mb, saved <%=(function() {
    
    // TOTAL SUMMARY
    var monthsPrettyCase = ('Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec').split('|');
    
    var saveDate = new Date();
    var dtText =
      saveDate.getDate() + ' ' +
      monthsPrettyCase[saveDate.getMonth()] + ' ' +
      saveDate.getFullYear() + ' ' +
      num2(saveDate.getHours()) + ':' +
      num2(saveDate.getMinutes()) + ':' +
      num2(saveDate.getSeconds()) + '.' +
      (+saveDate).toString().slice(-3);
    
    var saveDateLocalStr = saveDate.toString();
    var gmtMatch = (/(GMT\s*[\-\+]\d+(\:\d+)?)/i).exec(saveDateLocalStr);
    if (gmtMatch)
    	dtText += ' ' + gmtMatch[1];
    
    return dtText;
    
    function num2(n) { return n <= 9 ? '0' + n : '' + n; }
    
    })()
    %> -->
    
    <!-- /shell/showCommander.js
    <%=typescriptBuild('shell/*', 'noapi/*', 'isolation/*',   'boot/base.d.ts', 'persistence/API.d.ts', 'typings/*')%>
    -->
    
    <!-- /shell/buildMessage.js
    
    var shell;
    if (!shell) shell = {};
    shell.buildMessage = 'Built at <%=(function() {
    
    var monthsPrettyCase = ('Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec').split('|');
    
    var saveDate = new Date();
    var dtText =
      saveDate.getDate() + ' ' +
      monthsPrettyCase[saveDate.getMonth()] + ' ' +
      saveDate.getFullYear() + ' ' +
      num2(saveDate.getHours()) + ':' +
      num2(saveDate.getMinutes()) + ':' +
      num2(saveDate.getSeconds()) + '.' +
      (+saveDate).toString().slice(-3);
    
    var saveDateLocalStr = saveDate.toString();
    var gmtMatch = (/(GMT\s*[\-\+]\d+(\:\d+)?)/i).exec(saveDateLocalStr);
    if (gmtMatch)
    	dtText += ' ' + gmtMatch[1];
    
    return dtText;
    
    function num2(n) { return n <= 9 ? '0' + n : '' + n; }
    
    })()
    %>';
    
    shell.buildTime = <%=+new Date()%>;
    -->
    
    <!-- /shell/!onerror.js
    <%=embedFile('/boot/onerror.js')%>
    -->
    
    <!-- /empty/
    -->
    
    
    <!-- /LF-file.txt
    123
    456-->
    
    <!-- /CRLF-file [CRLF]
    123
    456-->
    
    <!-- /CR-file [CR]
    123
    456-->
    
    <!-- /exportsome.js [CR]
    module.exports = 55-->
    
    <!-- /exports_fs.js [CR]
    module.exports = require('fs')-->
    
    <!-- /exports_process.js [CR]
    module.exports = process-->
    
    <!-- /eval-file.txt [eval]
     "random char: " + String.fromCharCode(Math.random()*16000)+"\n"+
     "date: "+new Date()+"\n"+
     "location: "+location -->
    
    <!-- /json-file.txt [json]
    "new ok \u2222 and what\r\n or \u0001?\n\n\n"-->
    
    <%=(function() {
    return ''; // SWITCHED OFF LARGE DIRECTORY GENERATION (it makes it easier to debug DOM stuff)
    
    var dump = [];
    for (var i = 0; i < 2000; i++) {
    	dump.push('<'+'!'+'-- /large-directory/'+(500+i)+'.txt');
      dump.push('OK --'+'>');
    }
    return dump.join('\n');
       })()%>
    
    
    
    
    
    
    
    
    <!-- /shell/style.css
    <%=(function() {
    	var drive = portabled.build.processTemplate.mainDrive;
    	var files = drive.files();
    	var styleText = [];
      for (var i = 0; i < files.length; i++) {
        if (/^\/shell\/[\s\S]*\.css$/.test(files[i]))
          styleText.push(drive.read(files[i]));
      }
    	return styleText.join('\n');
    
    })()%>
    -->
    
    <%=(function() {
    
    	var drive = portabled.build.processTemplate.mainDrive;
    	var files = drive.files();
    	var fileDump = [];
      for (var i = 0; i < files.length; i++) {
        var content = drive.read(files[i]);
        var decoratedContent = content.
    			replace(/\-\-(\**)\>/g, '--*$1>').
    			replace(/\<(\**)\!/g, '<*$1!');
    	  fileDump.push('<'+'!'+'-- '+'/src'+files[i]);
        fileDump.push(decoratedContent);
        fileDump.push('--'+'!'+'>');
      }
    	return fileDump.join('\n');
    
    })()%>
    
    
  • readme.md
    #New mini portable shell development
    
    Used these open-source libraries:
    
     * [feross/buffer] (https://github.com/feross/buffer) - MIT
     * [beatgammit/base64-js] (https://github.com/beatgammit/base64-js) - MIT
     * [feross/ieee754] (https://github.com/feross/ieee754) - MIT
     * [retrofox/is-array] (https://github.com/retrofox/is-array) - MIT
    
    ## Boot process
    
    The boot process begins with first bytes of the page received, during the loading of the content,
    then would continue for a little after the page is loaded.
    
    The main post-content-load is completing the data fetch from the local storage. It may well finish earlier,
    but may take some time.
    
    During the boot process, and at the end of it the code is supposed to show sensible UI
    and implement neat handover animations (unless the whole boot finishes very fast).
    
    ### Early boot
    
    The mission of this stage is to create the temporary boot UI (very quickly!) and hand over to the shell loader.
    The boot UI is something like a splash screen, boot animation, washed-out live-like image or whatever.
    
     * Error handler is installed at the first opportunity
     * Base.js library with primitives for basic DOM manipulation is loaded
     * BootUI iframe is created
     * BootUI function is invoked to draw the boot animation
    
    ### Shell loader
    
    Shell loader's task is to initialise the persistence (virtual filesystem backed by DOM and local storage).
    
    During that persistence loading the shell loader passes progress events to the boot UI. Upon completion
    it starts the actual shell and finally animates from boot UI to the shell.
    
     * Persistence loading is started
     * Persistence keeps polling the DOM state, fishing for pieces of 'virtual filesystem'
     * Progress is supposed to be reported to the BootUI
     * Persistence also need to load the locally-stored state, reconciling it with the DOM (by timestamps)
     * Eventualy persistence report completion
     * Shell iframe is created with opacity=0
     * Shell start code is loaded (normally from the filesystem) and kicked off
     * Animating BootUI.opacity -> 0; Shell.opacity->1
    
     ### Shell
    
    When shell begins to load, the persistence is fully functional, so it's up to the shell what to do with it.
    
    The interactive node-like shell emulates node.js to a great extent: by laying node.js API on top of the persistence and various browser features.
    
    At the moment the shell also has file-manager-like panels, so virtual filesystem can be navigated
    and necessary tasks (copying/editing/moving of files or directories) performed interactively.
    
    Other shells may host more specialised apps. These are planned examples:
    
     * PC.js virtual machine hosting early PC images (DOS, early Windows, OS/2 and such)
     * Markdown viewer/editor
     * SVG editor
     * Slide editor
     * Spreadsheet editor
    
    ## Involved libaries and sub-modules
    
    First of all, the sequence above explicitly mentiones three mini-libraries:
    
     * Base.js
     * BootUI
     * Persistence
    
    Those indeed can be considered separately, with a degree of isolation from the rest of the boot process.
    
    ### Base.js
    
    A very tight set of functions for DOM manipulation. It is used by both booting stage, as well as actually employed by the current shell.
    
    These are broad features of the mini-library:
    
     * Setting/getting text of a DOM element (older IE handling, special workarounds for some elements)
     * Creating elements and setting properties/CSS attributes in JSON-like syntax
     * Subscribing to events
     * Creating IFRAME and retrieving its key objects (inner window, inner document)
    
    ### BootUI
    
    The boot-time UI is largely free in what it renders. It is hosted in a separate IFRAME
    with limited communication to the rest of the code.
    
    It is expected that various shells provide each their fine-tuned boot UI 'library'.
    
    A good option would be to render the state of the application as the user left,
    with a tasteful overlay reflecting the boot progress.
    
    ### Persistence
    
    The task of emulating an embedded virtual filesystem of files/directories is implemented in the persistence mini-library.
    
    The persistence API is described in terms of a Drive object (with read/write methods) and its construction stages.
    
    Several sources of storage are implemented towards the same API:
    
     * DOM
     * IndexedDB
     * WebSQL
     * LocalStorage
    
    DOM storage is expected to exist at a very minimum (we are running in the context of a page already!),
    then one of the local storage options is added upon a brief detection process.
    
    From the external caller the persistence mini-library expects a single call to *mountDrive* function,
    passing in a few inputs and a callback.

New mini portable shell development

Used these open-source libraries:

Boot process

The boot process begins with first bytes of the page received, during the loading of the content, then would continue for a little after the page is loaded.

The main post-content-load is completing the data fetch from the local storage. It may well finish earlier, but may take some time.

During the boot process, and at the end of it the code is supposed to show sensible UI and implement neat handover animations (unless the whole boot finishes very fast).

Early boot

The mission of this stage is to create the temporary boot UI (very quickly!) and hand over to the shell loader. The boot UI is something like a splash screen, boot animation, washed-out live-like image or whatever.

  • Error handler is installed at the first opportunity
  • Base.js library with primitives for basic DOM manipulation is loaded
  • BootUI iframe is created
  • BootUI function is invoked to draw the boot animation

Shell loader

Shell loader's task is to initialise the persistence (virtual filesystem backed by DOM and local storage).

During that persistence loading the shell loader passes progress events to the boot UI. Upon completion it starts the actual shell and finally animates from boot UI to the shell.

  • Persistence loading is started
  • Persistence keeps polling the DOM state, fishing for pieces of 'virtual filesystem'
  • Progress is supposed to be reported to the BootUI
  • Persistence also need to load the locally-stored state, reconciling it with the DOM (by timestamps)
  • Eventualy persistence report completion
  • Shell iframe is created with opacity=0
  • Shell start code is loaded (normally from the filesystem) and kicked off
  • Animating BootUI.opacity -> 0; Shell.opacity->1

    Shell

When shell begins to load, the persistence is fully functional, so it's up to the shell what to do with it.

The interactive node-like shell emulates node.js to a great extent: by laying node.js API on top of the persistence and various browser features.

At the moment the shell also has file-manager-like panels, so virtual filesystem can be navigated and necessary tasks (copying/editing/moving of files or directories) performed interactively.

Other shells may host more specialised apps. These are planned examples:

  • PC.js virtual machine hosting early PC images (DOS, early Windows, OS/2 and such)
  • Markdown viewer/editor
  • SVG editor
  • Slide editor
  • Spreadsheet editor

Involved libaries and sub-modules

First of all, the sequence above explicitly mentiones three mini-libraries:

  • Base.js
  • BootUI
  • Persistence

Those indeed can be considered separately, with a degree of isolation from the rest of the boot process.

Base.js

A very tight set of functions for DOM manipulation. It is used by both booting stage, as well as actually employed by the current shell.

These are broad features of the mini-library:

  • Setting/getting text of a DOM element (older IE handling, special workarounds for some elements)
  • Creating elements and setting properties/CSS attributes in JSON-like syntax
  • Subscribing to events
  • Creating IFRAME and retrieving its key objects (inner window, inner document)

BootUI

The boot-time UI is largely free in what it renders. It is hosted in a separate IFRAME with limited communication to the rest of the code.

It is expected that various shells provide each their fine-tuned boot UI 'library'.

A good option would be to render the state of the application as the user left, with a tasteful overlay reflecting the boot progress.

Persistence

The task of emulating an embedded virtual filesystem of files/directories is implemented in the persistence mini-library.

The persistence API is described in terms of a Drive object (with read/write methods) and its construction stages.

Several sources of storage are implemented towards the same API:

  • DOM
  • IndexedDB
  • WebSQL
  • LocalStorage

DOM storage is expected to exist at a very minimum (we are running in the context of a page already!), then one of the local storage options is added upon a brief detection process.

From the external caller the persistence mini-library expects a single call to mountDrive function, passing in a few inputs and a callback.

portabled v0.6.1a by Oleg Mihailik
built Sat Jun 13 2015 11:52:49 GMT+0100 (GMT Summer Time)

Used Open Source libraries:
TypeScript (Microsoft, with Apache 2.0 license)
CodeMirror (Marijn Haverbeke, with MIT license)
Knockout.js (Ryan Niemeyer, with MIT license)
Zip.js (Gildas Lormeau, with BSD license)
Marked (Christopher Jeffrey, with MIT license)
ES5-shims (with MIT license)
GitHub API wrapper (Michael Aufreiter with BSD2 license)
JS Murmur hasher (Gary Court with MIT license)
google-diff-match-patch (Google with Apache 2.0 license)
UglifyJS2 (Mihai Bazon with BSD license)
UglifyCSS (Franck Marcia with MIT license)
JSON3 (Kit Cambridge with MIT license)
- main contributors mentioned where applicable.
/pcjs-embed/boot/bootUI.js